diff --git a/Documentation/Doxyfile b/Documentation/Doxyfile index 55bb410..d9b76af 100644 --- a/Documentation/Doxyfile +++ b/Documentation/Doxyfile @@ -743,7 +743,7 @@ WARN_LOGFILE = # spaces. # Note: If this tag is empty the current directory is searched. -INPUT = libraries/MySensors Documentation/mainpage.dox +INPUT = . Documentation/mainpage.dox # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses @@ -811,7 +811,7 @@ EXCLUDE_SYMBOLS = # that contain example code fragments that are included (see the \include # command). -EXAMPLE_PATH = libraries/MySensors/examples libraries/MySensors/drivers/AES +EXAMPLE_PATH = examples drivers/AES # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and diff --git a/libraries/MySensors/MyConfig.h b/MyConfig.h similarity index 99% rename from libraries/MySensors/MyConfig.h rename to MyConfig.h index 48dd130..2a9c5da 100644 --- a/libraries/MySensors/MyConfig.h +++ b/MyConfig.h @@ -701,4 +701,5 @@ #define MY_PARENT_NODE_IS_STATIC #define MY_REGISTRATION_CONTROLLER #define MY_DEBUG_VERBOSE_RF24 +#define MY_TRANSPORT_SANITY_CHECK #endif diff --git a/libraries/MySensors/MySensors.h b/MySensors.h similarity index 100% rename from libraries/MySensors/MySensors.h rename to MySensors.h diff --git a/libraries/MySensors/core/MyCapabilities.h b/core/MyCapabilities.h similarity index 100% rename from libraries/MySensors/core/MyCapabilities.h rename to core/MyCapabilities.h diff --git a/libraries/MySensors/core/MyEepromAddresses.h b/core/MyEepromAddresses.h similarity index 100% rename from libraries/MySensors/core/MyEepromAddresses.h rename to core/MyEepromAddresses.h diff --git a/libraries/MySensors/core/MyGatewayTransport.cpp b/core/MyGatewayTransport.cpp similarity index 100% rename from libraries/MySensors/core/MyGatewayTransport.cpp rename to core/MyGatewayTransport.cpp diff --git a/libraries/MySensors/core/MyGatewayTransport.h b/core/MyGatewayTransport.h similarity index 100% rename from libraries/MySensors/core/MyGatewayTransport.h rename to core/MyGatewayTransport.h diff --git a/libraries/MySensors/core/MyGatewayTransportEthernet.cpp b/core/MyGatewayTransportEthernet.cpp similarity index 100% rename from libraries/MySensors/core/MyGatewayTransportEthernet.cpp rename to core/MyGatewayTransportEthernet.cpp diff --git a/libraries/MySensors/core/MyGatewayTransportMQTTClient.cpp b/core/MyGatewayTransportMQTTClient.cpp similarity index 100% rename from libraries/MySensors/core/MyGatewayTransportMQTTClient.cpp rename to core/MyGatewayTransportMQTTClient.cpp diff --git a/libraries/MySensors/core/MyGatewayTransportSerial.cpp b/core/MyGatewayTransportSerial.cpp similarity index 100% rename from libraries/MySensors/core/MyGatewayTransportSerial.cpp rename to core/MyGatewayTransportSerial.cpp diff --git a/libraries/MySensors/core/MyHw.h b/core/MyHw.h similarity index 100% rename from libraries/MySensors/core/MyHw.h rename to core/MyHw.h diff --git a/libraries/MySensors/core/MyHwATMega328.cpp b/core/MyHwATMega328.cpp similarity index 100% rename from libraries/MySensors/core/MyHwATMega328.cpp rename to core/MyHwATMega328.cpp diff --git a/libraries/MySensors/core/MyHwATMega328.h b/core/MyHwATMega328.h similarity index 100% rename from libraries/MySensors/core/MyHwATMega328.h rename to core/MyHwATMega328.h diff --git a/libraries/MySensors/core/MyHwESP8266.cpp b/core/MyHwESP8266.cpp similarity index 100% rename from libraries/MySensors/core/MyHwESP8266.cpp rename to core/MyHwESP8266.cpp diff --git a/libraries/MySensors/core/MyHwESP8266.h b/core/MyHwESP8266.h similarity index 100% rename from libraries/MySensors/core/MyHwESP8266.h rename to core/MyHwESP8266.h diff --git a/libraries/MySensors/core/MyHwSAMD.cpp b/core/MyHwSAMD.cpp similarity index 100% rename from libraries/MySensors/core/MyHwSAMD.cpp rename to core/MyHwSAMD.cpp diff --git a/libraries/MySensors/core/MyHwSAMD.h b/core/MyHwSAMD.h similarity index 100% rename from libraries/MySensors/core/MyHwSAMD.h rename to core/MyHwSAMD.h diff --git a/libraries/MySensors/core/MyInclusionMode.cpp b/core/MyInclusionMode.cpp similarity index 100% rename from libraries/MySensors/core/MyInclusionMode.cpp rename to core/MyInclusionMode.cpp diff --git a/libraries/MySensors/core/MyInclusionMode.h b/core/MyInclusionMode.h similarity index 100% rename from libraries/MySensors/core/MyInclusionMode.h rename to core/MyInclusionMode.h diff --git a/libraries/MySensors/core/MyIndication.cpp b/core/MyIndication.cpp similarity index 100% rename from libraries/MySensors/core/MyIndication.cpp rename to core/MyIndication.cpp diff --git a/libraries/MySensors/core/MyIndication.h b/core/MyIndication.h similarity index 100% rename from libraries/MySensors/core/MyIndication.h rename to core/MyIndication.h diff --git a/libraries/MySensors/core/MyLeds.cpp b/core/MyLeds.cpp similarity index 100% rename from libraries/MySensors/core/MyLeds.cpp rename to core/MyLeds.cpp diff --git a/libraries/MySensors/core/MyLeds.h b/core/MyLeds.h similarity index 100% rename from libraries/MySensors/core/MyLeds.h rename to core/MyLeds.h diff --git a/libraries/MySensors/core/MyMainDefault.cpp b/core/MyMainDefault.cpp similarity index 100% rename from libraries/MySensors/core/MyMainDefault.cpp rename to core/MyMainDefault.cpp diff --git a/libraries/MySensors/core/MyMainESP8266.cpp b/core/MyMainESP8266.cpp similarity index 100% rename from libraries/MySensors/core/MyMainESP8266.cpp rename to core/MyMainESP8266.cpp diff --git a/libraries/MySensors/core/MyMessage.cpp b/core/MyMessage.cpp similarity index 100% rename from libraries/MySensors/core/MyMessage.cpp rename to core/MyMessage.cpp diff --git a/libraries/MySensors/core/MyMessage.h b/core/MyMessage.h similarity index 100% rename from libraries/MySensors/core/MyMessage.h rename to core/MyMessage.h diff --git a/libraries/MySensors/core/MyOTAFirmwareUpdate.cpp b/core/MyOTAFirmwareUpdate.cpp similarity index 100% rename from libraries/MySensors/core/MyOTAFirmwareUpdate.cpp rename to core/MyOTAFirmwareUpdate.cpp diff --git a/libraries/MySensors/core/MyOTAFirmwareUpdate.h b/core/MyOTAFirmwareUpdate.h similarity index 100% rename from libraries/MySensors/core/MyOTAFirmwareUpdate.h rename to core/MyOTAFirmwareUpdate.h diff --git a/libraries/MySensors/core/MyPrivateConfig.h.sample b/core/MyPrivateConfig.h.sample similarity index 100% rename from libraries/MySensors/core/MyPrivateConfig.h.sample rename to core/MyPrivateConfig.h.sample diff --git a/libraries/MySensors/core/MyProtocol.h b/core/MyProtocol.h similarity index 100% rename from libraries/MySensors/core/MyProtocol.h rename to core/MyProtocol.h diff --git a/libraries/MySensors/core/MyProtocolMySensors.cpp b/core/MyProtocolMySensors.cpp similarity index 100% rename from libraries/MySensors/core/MyProtocolMySensors.cpp rename to core/MyProtocolMySensors.cpp diff --git a/libraries/MySensors/core/MySensorsCore.cpp b/core/MySensorsCore.cpp similarity index 100% rename from libraries/MySensors/core/MySensorsCore.cpp rename to core/MySensorsCore.cpp diff --git a/libraries/MySensors/core/MySensorsCore.h b/core/MySensorsCore.h similarity index 100% rename from libraries/MySensors/core/MySensorsCore.h rename to core/MySensorsCore.h diff --git a/libraries/MySensors/core/MySigning.cpp b/core/MySigning.cpp similarity index 100% rename from libraries/MySensors/core/MySigning.cpp rename to core/MySigning.cpp diff --git a/libraries/MySensors/core/MySigning.h b/core/MySigning.h similarity index 100% rename from libraries/MySensors/core/MySigning.h rename to core/MySigning.h diff --git a/libraries/MySensors/core/MySigningAtsha204.cpp b/core/MySigningAtsha204.cpp similarity index 100% rename from libraries/MySensors/core/MySigningAtsha204.cpp rename to core/MySigningAtsha204.cpp diff --git a/libraries/MySensors/core/MySigningAtsha204Soft.cpp b/core/MySigningAtsha204Soft.cpp similarity index 100% rename from libraries/MySensors/core/MySigningAtsha204Soft.cpp rename to core/MySigningAtsha204Soft.cpp diff --git a/libraries/MySensors/core/MyTransport.cpp b/core/MyTransport.cpp similarity index 100% rename from libraries/MySensors/core/MyTransport.cpp rename to core/MyTransport.cpp diff --git a/libraries/MySensors/core/MyTransport.h b/core/MyTransport.h similarity index 100% rename from libraries/MySensors/core/MyTransport.h rename to core/MyTransport.h diff --git a/libraries/MySensors/core/MyTransportNRF24.cpp b/core/MyTransportNRF24.cpp similarity index 100% rename from libraries/MySensors/core/MyTransportNRF24.cpp rename to core/MyTransportNRF24.cpp diff --git a/libraries/MySensors/core/MyTransportRFM69.cpp b/core/MyTransportRFM69.cpp similarity index 100% rename from libraries/MySensors/core/MyTransportRFM69.cpp rename to core/MyTransportRFM69.cpp diff --git a/libraries/MySensors/core/MyTransportRS485.cpp b/core/MyTransportRS485.cpp similarity index 100% rename from libraries/MySensors/core/MyTransportRS485.cpp rename to core/MyTransportRS485.cpp diff --git a/libraries/MySensors/core/Version.h b/core/Version.h similarity index 100% rename from libraries/MySensors/core/Version.h rename to core/Version.h diff --git a/libraries/MySensors/drivers/AES/AES.cpp b/drivers/AES/AES.cpp similarity index 100% rename from libraries/MySensors/drivers/AES/AES.cpp rename to drivers/AES/AES.cpp diff --git a/libraries/MySensors/drivers/AES/AES.h b/drivers/AES/AES.h similarity index 100% rename from libraries/MySensors/drivers/AES/AES.h rename to drivers/AES/AES.h diff --git a/libraries/MySensors/drivers/AES/AES_config.h b/drivers/AES/AES_config.h similarity index 100% rename from libraries/MySensors/drivers/AES/AES_config.h rename to drivers/AES/AES_config.h diff --git a/libraries/MySensors/drivers/AES/Doxyfile b/drivers/AES/Doxyfile similarity index 100% rename from libraries/MySensors/drivers/AES/Doxyfile rename to drivers/AES/Doxyfile diff --git a/libraries/MySensors/drivers/AES/Makefile b/drivers/AES/Makefile similarity index 100% rename from libraries/MySensors/drivers/AES/Makefile rename to drivers/AES/Makefile diff --git a/libraries/MySensors/drivers/AES/README.MD b/drivers/AES/README.MD similarity index 100% rename from libraries/MySensors/drivers/AES/README.MD rename to drivers/AES/README.MD diff --git a/libraries/MySensors/drivers/AES/examples/aes/aes.pde b/drivers/AES/examples/aes/aes.pde similarity index 100% rename from libraries/MySensors/drivers/AES/examples/aes/aes.pde rename to drivers/AES/examples/aes/aes.pde diff --git a/libraries/MySensors/drivers/AES/examples/test_vectors/RESOURCES b/drivers/AES/examples/test_vectors/RESOURCES similarity index 100% rename from libraries/MySensors/drivers/AES/examples/test_vectors/RESOURCES rename to drivers/AES/examples/test_vectors/RESOURCES diff --git a/libraries/MySensors/drivers/AES/examples/test_vectors/known_answers.txt b/drivers/AES/examples/test_vectors/known_answers.txt similarity index 100% rename from libraries/MySensors/drivers/AES/examples/test_vectors/known_answers.txt rename to drivers/AES/examples/test_vectors/known_answers.txt diff --git a/libraries/MySensors/drivers/AES/examples/test_vectors/test_vectors.pde b/drivers/AES/examples/test_vectors/test_vectors.pde similarity index 100% rename from libraries/MySensors/drivers/AES/examples/test_vectors/test_vectors.pde rename to drivers/AES/examples/test_vectors/test_vectors.pde diff --git a/libraries/MySensors/drivers/AES/examples_Rpi/Makefile b/drivers/AES/examples_Rpi/Makefile similarity index 100% rename from libraries/MySensors/drivers/AES/examples_Rpi/Makefile rename to drivers/AES/examples_Rpi/Makefile diff --git a/libraries/MySensors/drivers/AES/examples_Rpi/RESOURCES b/drivers/AES/examples_Rpi/RESOURCES similarity index 100% rename from libraries/MySensors/drivers/AES/examples_Rpi/RESOURCES rename to drivers/AES/examples_Rpi/RESOURCES diff --git a/libraries/MySensors/drivers/AES/examples_Rpi/aes.cpp b/drivers/AES/examples_Rpi/aes.cpp similarity index 100% rename from libraries/MySensors/drivers/AES/examples_Rpi/aes.cpp rename to drivers/AES/examples_Rpi/aes.cpp diff --git a/libraries/MySensors/drivers/AES/examples_Rpi/known_answers.txt b/drivers/AES/examples_Rpi/known_answers.txt similarity index 100% rename from libraries/MySensors/drivers/AES/examples_Rpi/known_answers.txt rename to drivers/AES/examples_Rpi/known_answers.txt diff --git a/libraries/MySensors/drivers/AES/examples_Rpi/test_vectors.cpp b/drivers/AES/examples_Rpi/test_vectors.cpp similarity index 100% rename from libraries/MySensors/drivers/AES/examples_Rpi/test_vectors.cpp rename to drivers/AES/examples_Rpi/test_vectors.cpp diff --git a/libraries/MySensors/drivers/AES/keywords.txt b/drivers/AES/keywords.txt similarity index 100% rename from libraries/MySensors/drivers/AES/keywords.txt rename to drivers/AES/keywords.txt diff --git a/libraries/MySensors/drivers/AES/printf.h b/drivers/AES/printf.h similarity index 100% rename from libraries/MySensors/drivers/AES/printf.h rename to drivers/AES/printf.h diff --git a/libraries/MySensors/drivers/ATSHA204/ATSHA204.cpp b/drivers/ATSHA204/ATSHA204.cpp similarity index 100% rename from libraries/MySensors/drivers/ATSHA204/ATSHA204.cpp rename to drivers/ATSHA204/ATSHA204.cpp diff --git a/libraries/MySensors/drivers/ATSHA204/ATSHA204.h b/drivers/ATSHA204/ATSHA204.h similarity index 100% rename from libraries/MySensors/drivers/ATSHA204/ATSHA204.h rename to drivers/ATSHA204/ATSHA204.h diff --git a/libraries/MySensors/drivers/ATSHA204/sha256.cpp b/drivers/ATSHA204/sha256.cpp similarity index 100% rename from libraries/MySensors/drivers/ATSHA204/sha256.cpp rename to drivers/ATSHA204/sha256.cpp diff --git a/libraries/MySensors/drivers/ATSHA204/sha256.h b/drivers/ATSHA204/sha256.h similarity index 100% rename from libraries/MySensors/drivers/ATSHA204/sha256.h rename to drivers/ATSHA204/sha256.h diff --git a/libraries/MySensors/drivers/AVR/DigitalIO/DigitalIO.h b/drivers/AVR/DigitalIO/DigitalIO.h similarity index 100% rename from libraries/MySensors/drivers/AVR/DigitalIO/DigitalIO.h rename to drivers/AVR/DigitalIO/DigitalIO.h diff --git a/libraries/MySensors/drivers/AVR/DigitalIO/DigitalPin.h b/drivers/AVR/DigitalIO/DigitalPin.h similarity index 100% rename from libraries/MySensors/drivers/AVR/DigitalIO/DigitalPin.h rename to drivers/AVR/DigitalIO/DigitalPin.h diff --git a/libraries/MySensors/drivers/AVR/DigitalIO/I2cConstants.h b/drivers/AVR/DigitalIO/I2cConstants.h similarity index 100% rename from libraries/MySensors/drivers/AVR/DigitalIO/I2cConstants.h rename to drivers/AVR/DigitalIO/I2cConstants.h diff --git a/libraries/MySensors/drivers/AVR/DigitalIO/PinIO.cpp b/drivers/AVR/DigitalIO/PinIO.cpp similarity index 100% rename from libraries/MySensors/drivers/AVR/DigitalIO/PinIO.cpp rename to drivers/AVR/DigitalIO/PinIO.cpp diff --git a/libraries/MySensors/drivers/AVR/DigitalIO/PinIO.h b/drivers/AVR/DigitalIO/PinIO.h similarity index 100% rename from libraries/MySensors/drivers/AVR/DigitalIO/PinIO.h rename to drivers/AVR/DigitalIO/PinIO.h diff --git a/libraries/MySensors/drivers/AVR/DigitalIO/SoftI2cMaster.cpp b/drivers/AVR/DigitalIO/SoftI2cMaster.cpp similarity index 100% rename from libraries/MySensors/drivers/AVR/DigitalIO/SoftI2cMaster.cpp rename to drivers/AVR/DigitalIO/SoftI2cMaster.cpp diff --git a/libraries/MySensors/drivers/AVR/DigitalIO/SoftI2cMaster.h b/drivers/AVR/DigitalIO/SoftI2cMaster.h similarity index 100% rename from libraries/MySensors/drivers/AVR/DigitalIO/SoftI2cMaster.h rename to drivers/AVR/DigitalIO/SoftI2cMaster.h diff --git a/libraries/MySensors/drivers/AVR/DigitalIO/SoftSPI.h b/drivers/AVR/DigitalIO/SoftSPI.h similarity index 100% rename from libraries/MySensors/drivers/AVR/DigitalIO/SoftSPI.h rename to drivers/AVR/DigitalIO/SoftSPI.h diff --git a/libraries/MySensors/drivers/AVR/DigitalIO/attic/ADS7818.h b/drivers/AVR/DigitalIO/attic/ADS7818.h similarity index 100% rename from libraries/MySensors/drivers/AVR/DigitalIO/attic/ADS7818.h rename to drivers/AVR/DigitalIO/attic/ADS7818.h diff --git a/libraries/MySensors/drivers/AVR/DigitalIO/attic/MCP320X.h b/drivers/AVR/DigitalIO/attic/MCP320X.h similarity index 100% rename from libraries/MySensors/drivers/AVR/DigitalIO/attic/MCP320X.h rename to drivers/AVR/DigitalIO/attic/MCP320X.h diff --git a/libraries/MySensors/drivers/AVR/DigitalIO/attic/MCP355X.h b/drivers/AVR/DigitalIO/attic/MCP355X.h similarity index 100% rename from libraries/MySensors/drivers/AVR/DigitalIO/attic/MCP355X.h rename to drivers/AVR/DigitalIO/attic/MCP355X.h diff --git a/libraries/MySensors/drivers/AVR/DigitalIO/examples/DigitalPinBlink/DigitalPinBlink.ino b/drivers/AVR/DigitalIO/examples/DigitalPinBlink/DigitalPinBlink.ino similarity index 100% rename from libraries/MySensors/drivers/AVR/DigitalIO/examples/DigitalPinBlink/DigitalPinBlink.ino rename to drivers/AVR/DigitalIO/examples/DigitalPinBlink/DigitalPinBlink.ino diff --git a/libraries/MySensors/drivers/AVR/DigitalIO/examples/DigitalPinConfigToggle/DigitalPinConfigToggle.ino b/drivers/AVR/DigitalIO/examples/DigitalPinConfigToggle/DigitalPinConfigToggle.ino similarity index 100% rename from libraries/MySensors/drivers/AVR/DigitalIO/examples/DigitalPinConfigToggle/DigitalPinConfigToggle.ino rename to drivers/AVR/DigitalIO/examples/DigitalPinConfigToggle/DigitalPinConfigToggle.ino diff --git a/libraries/MySensors/drivers/AVR/DigitalIO/examples/DigitalPinReadWrite/DigitalPinReadWrite.ino b/drivers/AVR/DigitalIO/examples/DigitalPinReadWrite/DigitalPinReadWrite.ino similarity index 100% rename from libraries/MySensors/drivers/AVR/DigitalIO/examples/DigitalPinReadWrite/DigitalPinReadWrite.ino rename to drivers/AVR/DigitalIO/examples/DigitalPinReadWrite/DigitalPinReadWrite.ino diff --git a/libraries/MySensors/drivers/AVR/DigitalIO/examples/DigitalPinShiftOut/DigitalPinShiftOut.ino b/drivers/AVR/DigitalIO/examples/DigitalPinShiftOut/DigitalPinShiftOut.ino similarity index 100% rename from libraries/MySensors/drivers/AVR/DigitalIO/examples/DigitalPinShiftOut/DigitalPinShiftOut.ino rename to drivers/AVR/DigitalIO/examples/DigitalPinShiftOut/DigitalPinShiftOut.ino diff --git a/libraries/MySensors/drivers/AVR/DigitalIO/examples/PinIOBegin/PinIOBegin.ino b/drivers/AVR/DigitalIO/examples/PinIOBegin/PinIOBegin.ino similarity index 100% rename from libraries/MySensors/drivers/AVR/DigitalIO/examples/PinIOBegin/PinIOBegin.ino rename to drivers/AVR/DigitalIO/examples/PinIOBegin/PinIOBegin.ino diff --git a/libraries/MySensors/drivers/AVR/DigitalIO/examples/PinIOConfigToggle/PinIOConfigToggle.ino b/drivers/AVR/DigitalIO/examples/PinIOConfigToggle/PinIOConfigToggle.ino similarity index 100% rename from libraries/MySensors/drivers/AVR/DigitalIO/examples/PinIOConfigToggle/PinIOConfigToggle.ino rename to drivers/AVR/DigitalIO/examples/PinIOConfigToggle/PinIOConfigToggle.ino diff --git a/libraries/MySensors/drivers/AVR/DigitalIO/examples/PinIOReadWrite/PinIOReadWrite.ino b/drivers/AVR/DigitalIO/examples/PinIOReadWrite/PinIOReadWrite.ino similarity index 100% rename from libraries/MySensors/drivers/AVR/DigitalIO/examples/PinIOReadWrite/PinIOReadWrite.ino rename to drivers/AVR/DigitalIO/examples/PinIOReadWrite/PinIOReadWrite.ino diff --git a/libraries/MySensors/drivers/AVR/DigitalIO/examples/ScanI2cBus/ScanI2cBus.ino b/drivers/AVR/DigitalIO/examples/ScanI2cBus/ScanI2cBus.ino similarity index 100% rename from libraries/MySensors/drivers/AVR/DigitalIO/examples/ScanI2cBus/ScanI2cBus.ino rename to drivers/AVR/DigitalIO/examples/ScanI2cBus/ScanI2cBus.ino diff --git a/libraries/MySensors/drivers/AVR/DigitalIO/examples/SoftDS1307Utility/SoftDS1307Utility.ino b/drivers/AVR/DigitalIO/examples/SoftDS1307Utility/SoftDS1307Utility.ino similarity index 100% rename from libraries/MySensors/drivers/AVR/DigitalIO/examples/SoftDS1307Utility/SoftDS1307Utility.ino rename to drivers/AVR/DigitalIO/examples/SoftDS1307Utility/SoftDS1307Utility.ino diff --git a/libraries/MySensors/drivers/AVR/DigitalIO/examples/testArduino/testArduino.ino b/drivers/AVR/DigitalIO/examples/testArduino/testArduino.ino similarity index 100% rename from libraries/MySensors/drivers/AVR/DigitalIO/examples/testArduino/testArduino.ino rename to drivers/AVR/DigitalIO/examples/testArduino/testArduino.ino diff --git a/libraries/MySensors/drivers/AVR/DigitalIO/examples/testDigitalPin/testDigitalPin.ino b/drivers/AVR/DigitalIO/examples/testDigitalPin/testDigitalPin.ino similarity index 100% rename from libraries/MySensors/drivers/AVR/DigitalIO/examples/testDigitalPin/testDigitalPin.ino rename to drivers/AVR/DigitalIO/examples/testDigitalPin/testDigitalPin.ino diff --git a/libraries/MySensors/drivers/AVR/DigitalIO/examples/testFastDigital/testFastDigital.ino b/drivers/AVR/DigitalIO/examples/testFastDigital/testFastDigital.ino similarity index 100% rename from libraries/MySensors/drivers/AVR/DigitalIO/examples/testFastDigital/testFastDigital.ino rename to drivers/AVR/DigitalIO/examples/testFastDigital/testFastDigital.ino diff --git a/libraries/MySensors/drivers/AVR/DigitalIO/examples/testPinIO/testPinIO.ino b/drivers/AVR/DigitalIO/examples/testPinIO/testPinIO.ino similarity index 100% rename from libraries/MySensors/drivers/AVR/DigitalIO/examples/testPinIO/testPinIO.ino rename to drivers/AVR/DigitalIO/examples/testPinIO/testPinIO.ino diff --git a/libraries/MySensors/drivers/AVR/DigitalIO/examples/testSoftSPI/testSoftSPI.ino b/drivers/AVR/DigitalIO/examples/testSoftSPI/testSoftSPI.ino similarity index 100% rename from libraries/MySensors/drivers/AVR/DigitalIO/examples/testSoftSPI/testSoftSPI.ino rename to drivers/AVR/DigitalIO/examples/testSoftSPI/testSoftSPI.ino diff --git a/libraries/MySensors/drivers/AltSoftSerial/AltSoftSerial.cpp b/drivers/AltSoftSerial/AltSoftSerial.cpp similarity index 100% rename from libraries/MySensors/drivers/AltSoftSerial/AltSoftSerial.cpp rename to drivers/AltSoftSerial/AltSoftSerial.cpp diff --git a/libraries/MySensors/drivers/AltSoftSerial/AltSoftSerial.h b/drivers/AltSoftSerial/AltSoftSerial.h similarity index 100% rename from libraries/MySensors/drivers/AltSoftSerial/AltSoftSerial.h rename to drivers/AltSoftSerial/AltSoftSerial.h diff --git a/libraries/MySensors/drivers/AltSoftSerial/README.md b/drivers/AltSoftSerial/README.md similarity index 100% rename from libraries/MySensors/drivers/AltSoftSerial/README.md rename to drivers/AltSoftSerial/README.md diff --git a/libraries/MySensors/drivers/AltSoftSerial/config/AltSoftSerial_Boards.h b/drivers/AltSoftSerial/config/AltSoftSerial_Boards.h similarity index 100% rename from libraries/MySensors/drivers/AltSoftSerial/config/AltSoftSerial_Boards.h rename to drivers/AltSoftSerial/config/AltSoftSerial_Boards.h diff --git a/libraries/MySensors/drivers/AltSoftSerial/config/AltSoftSerial_Timers.h b/drivers/AltSoftSerial/config/AltSoftSerial_Timers.h similarity index 100% rename from libraries/MySensors/drivers/AltSoftSerial/config/AltSoftSerial_Timers.h rename to drivers/AltSoftSerial/config/AltSoftSerial_Timers.h diff --git a/libraries/MySensors/drivers/AltSoftSerial/config/known_boards.h b/drivers/AltSoftSerial/config/known_boards.h similarity index 100% rename from libraries/MySensors/drivers/AltSoftSerial/config/known_boards.h rename to drivers/AltSoftSerial/config/known_boards.h diff --git a/libraries/MySensors/drivers/AltSoftSerial/config/known_timers.h b/drivers/AltSoftSerial/config/known_timers.h similarity index 100% rename from libraries/MySensors/drivers/AltSoftSerial/config/known_timers.h rename to drivers/AltSoftSerial/config/known_timers.h diff --git a/libraries/MySensors/drivers/AltSoftSerial/examples/Test/Test.pde b/drivers/AltSoftSerial/examples/Test/Test.pde similarity index 100% rename from libraries/MySensors/drivers/AltSoftSerial/examples/Test/Test.pde rename to drivers/AltSoftSerial/examples/Test/Test.pde diff --git a/libraries/MySensors/drivers/AltSoftSerial/keywords.txt b/drivers/AltSoftSerial/keywords.txt similarity index 100% rename from libraries/MySensors/drivers/AltSoftSerial/keywords.txt rename to drivers/AltSoftSerial/keywords.txt diff --git a/libraries/MySensors/drivers/PubSubClient/PubSubClient.cpp b/drivers/PubSubClient/PubSubClient.cpp similarity index 100% rename from libraries/MySensors/drivers/PubSubClient/PubSubClient.cpp rename to drivers/PubSubClient/PubSubClient.cpp diff --git a/libraries/MySensors/drivers/PubSubClient/PubSubClient.h b/drivers/PubSubClient/PubSubClient.h similarity index 100% rename from libraries/MySensors/drivers/PubSubClient/PubSubClient.h rename to drivers/PubSubClient/PubSubClient.h diff --git a/libraries/MySensors/drivers/RF24/RF24.cpp b/drivers/RF24/RF24.cpp similarity index 100% rename from libraries/MySensors/drivers/RF24/RF24.cpp rename to drivers/RF24/RF24.cpp diff --git a/libraries/MySensors/drivers/RF24/RF24.h b/drivers/RF24/RF24.h similarity index 100% rename from libraries/MySensors/drivers/RF24/RF24.h rename to drivers/RF24/RF24.h diff --git a/libraries/MySensors/drivers/RFM69/RFM69.cpp b/drivers/RFM69/RFM69.cpp similarity index 100% rename from libraries/MySensors/drivers/RFM69/RFM69.cpp rename to drivers/RFM69/RFM69.cpp diff --git a/libraries/MySensors/drivers/RFM69/RFM69.h b/drivers/RFM69/RFM69.h similarity index 100% rename from libraries/MySensors/drivers/RFM69/RFM69.h rename to drivers/RFM69/RFM69.h diff --git a/libraries/MySensors/drivers/RFM69/RFM69registers.h b/drivers/RFM69/RFM69registers.h similarity index 100% rename from libraries/MySensors/drivers/RFM69/RFM69registers.h rename to drivers/RFM69/RFM69registers.h diff --git a/libraries/MySensors/drivers/SPIFlash/SPIFlash.cpp b/drivers/SPIFlash/SPIFlash.cpp similarity index 100% rename from libraries/MySensors/drivers/SPIFlash/SPIFlash.cpp rename to drivers/SPIFlash/SPIFlash.cpp diff --git a/libraries/MySensors/drivers/SPIFlash/SPIFlash.h b/drivers/SPIFlash/SPIFlash.h similarity index 100% rename from libraries/MySensors/drivers/SPIFlash/SPIFlash.h rename to drivers/SPIFlash/SPIFlash.h diff --git a/libraries/MySensors/drivers/pubsubclient/CHANGES.txt b/drivers/pubsubclient/CHANGES.txt similarity index 100% rename from libraries/MySensors/drivers/pubsubclient/CHANGES.txt rename to drivers/pubsubclient/CHANGES.txt diff --git a/libraries/MySensors/drivers/pubsubclient/LICENSE.txt b/drivers/pubsubclient/LICENSE.txt similarity index 100% rename from libraries/MySensors/drivers/pubsubclient/LICENSE.txt rename to drivers/pubsubclient/LICENSE.txt diff --git a/libraries/MySensors/drivers/pubsubclient/README.md b/drivers/pubsubclient/README.md similarity index 100% rename from libraries/MySensors/drivers/pubsubclient/README.md rename to drivers/pubsubclient/README.md diff --git a/libraries/MySensors/examples/AirQualitySensor/AirQualitySensor.ino b/examples/AirQualitySensor/AirQualitySensor.ino similarity index 100% rename from libraries/MySensors/examples/AirQualitySensor/AirQualitySensor.ino rename to examples/AirQualitySensor/AirQualitySensor.ino diff --git a/libraries/MySensors/examples/BatteryPoweredSensor/BatteryPoweredSensor.ino b/examples/BatteryPoweredSensor/BatteryPoweredSensor.ino similarity index 100% rename from libraries/MySensors/examples/BatteryPoweredSensor/BatteryPoweredSensor.ino rename to examples/BatteryPoweredSensor/BatteryPoweredSensor.ino diff --git a/libraries/MySensors/examples/BinarySwitchSleepSensor/BinarySwitchSleepSensor.ino b/examples/BinarySwitchSleepSensor/BinarySwitchSleepSensor.ino similarity index 100% rename from libraries/MySensors/examples/BinarySwitchSleepSensor/BinarySwitchSleepSensor.ino rename to examples/BinarySwitchSleepSensor/BinarySwitchSleepSensor.ino diff --git a/libraries/MySensors/examples/CO2Sensor/CO2Sensor.ino b/examples/CO2Sensor/CO2Sensor.ino similarity index 100% rename from libraries/MySensors/examples/CO2Sensor/CO2Sensor.ino rename to examples/CO2Sensor/CO2Sensor.ino diff --git a/libraries/MySensors/examples/ClearEepromConfig/ClearEepromConfig.ino b/examples/ClearEepromConfig/ClearEepromConfig.ino similarity index 100% rename from libraries/MySensors/examples/ClearEepromConfig/ClearEepromConfig.ino rename to examples/ClearEepromConfig/ClearEepromConfig.ino diff --git a/libraries/MySensors/examples/DimmableLEDActuator/DimmableLEDActuator.ino b/examples/DimmableLEDActuator/DimmableLEDActuator.ino similarity index 100% rename from libraries/MySensors/examples/DimmableLEDActuator/DimmableLEDActuator.ino rename to examples/DimmableLEDActuator/DimmableLEDActuator.ino diff --git a/libraries/MySensors/examples/DimmableLight/DimmableLight.ino b/examples/DimmableLight/DimmableLight.ino similarity index 100% rename from libraries/MySensors/examples/DimmableLight/DimmableLight.ino rename to examples/DimmableLight/DimmableLight.ino diff --git a/libraries/MySensors/examples/DustSensor/DustSensor.ino b/examples/DustSensor/DustSensor.ino similarity index 100% rename from libraries/MySensors/examples/DustSensor/DustSensor.ino rename to examples/DustSensor/DustSensor.ino diff --git a/libraries/MySensors/examples/DustSensorDSM/DustSensorDSM.ino b/examples/DustSensorDSM/DustSensorDSM.ino similarity index 100% rename from libraries/MySensors/examples/DustSensorDSM/DustSensorDSM.ino rename to examples/DustSensorDSM/DustSensorDSM.ino diff --git a/libraries/MySensors/examples/EnergyMeterPulseSensor/EnergyMeterPulseSensor.ino b/examples/EnergyMeterPulseSensor/EnergyMeterPulseSensor.ino similarity index 100% rename from libraries/MySensors/examples/EnergyMeterPulseSensor/EnergyMeterPulseSensor.ino rename to examples/EnergyMeterPulseSensor/EnergyMeterPulseSensor.ino diff --git a/libraries/MySensors/examples/GatewayESP8266/GatewayESP8266.ino b/examples/GatewayESP8266/GatewayESP8266.ino similarity index 100% rename from libraries/MySensors/examples/GatewayESP8266/GatewayESP8266.ino rename to examples/GatewayESP8266/GatewayESP8266.ino diff --git a/libraries/MySensors/examples/GatewayESP8266MQTTClient/GatewayESP8266MQTTClient.ino b/examples/GatewayESP8266MQTTClient/GatewayESP8266MQTTClient.ino similarity index 100% rename from libraries/MySensors/examples/GatewayESP8266MQTTClient/GatewayESP8266MQTTClient.ino rename to examples/GatewayESP8266MQTTClient/GatewayESP8266MQTTClient.ino diff --git a/libraries/MySensors/examples/GatewayESP8266OTA/GatewayESP8266OTA.ino b/examples/GatewayESP8266OTA/GatewayESP8266OTA.ino similarity index 100% rename from libraries/MySensors/examples/GatewayESP8266OTA/GatewayESP8266OTA.ino rename to examples/GatewayESP8266OTA/GatewayESP8266OTA.ino diff --git a/libraries/MySensors/examples/GatewaySerial/GatewaySerial.ino b/examples/GatewaySerial/GatewaySerial.ino similarity index 100% rename from libraries/MySensors/examples/GatewaySerial/GatewaySerial.ino rename to examples/GatewaySerial/GatewaySerial.ino diff --git a/libraries/MySensors/examples/GatewaySerialRS485/GatewaySerialRS485.ino b/examples/GatewaySerialRS485/GatewaySerialRS485.ino similarity index 100% rename from libraries/MySensors/examples/GatewaySerialRS485/GatewaySerialRS485.ino rename to examples/GatewaySerialRS485/GatewaySerialRS485.ino diff --git a/libraries/MySensors/examples/GatewayW5100/GatewayW5100.ino b/examples/GatewayW5100/GatewayW5100.ino similarity index 100% rename from libraries/MySensors/examples/GatewayW5100/GatewayW5100.ino rename to examples/GatewayW5100/GatewayW5100.ino diff --git a/libraries/MySensors/examples/GatewayW5100MQTTClient/GatewayW5100MQTTClient.ino b/examples/GatewayW5100MQTTClient/GatewayW5100MQTTClient.ino similarity index 100% rename from libraries/MySensors/examples/GatewayW5100MQTTClient/GatewayW5100MQTTClient.ino rename to examples/GatewayW5100MQTTClient/GatewayW5100MQTTClient.ino diff --git a/libraries/MySensors/examples/LightSensor/LightSensor.ino b/examples/LightSensor/LightSensor.ino similarity index 100% rename from libraries/MySensors/examples/LightSensor/LightSensor.ino rename to examples/LightSensor/LightSensor.ino diff --git a/libraries/MySensors/examples/MockMySensors/MockMySensors.ino b/examples/MockMySensors/MockMySensors.ino similarity index 100% rename from libraries/MySensors/examples/MockMySensors/MockMySensors.ino rename to examples/MockMySensors/MockMySensors.ino diff --git a/libraries/MySensors/examples/MockMySensors/README.md b/examples/MockMySensors/README.md similarity index 100% rename from libraries/MySensors/examples/MockMySensors/README.md rename to examples/MockMySensors/README.md diff --git a/libraries/MySensors/examples/MotionSensor/MotionSensor.ino b/examples/MotionSensor/MotionSensor.ino similarity index 100% rename from libraries/MySensors/examples/MotionSensor/MotionSensor.ino rename to examples/MotionSensor/MotionSensor.ino diff --git a/libraries/MySensors/examples/MotionSensorRS485/MotionSensorRS485.ino b/examples/MotionSensorRS485/MotionSensorRS485.ino similarity index 100% rename from libraries/MySensors/examples/MotionSensorRS485/MotionSensorRS485.ino rename to examples/MotionSensorRS485/MotionSensorRS485.ino diff --git a/libraries/MySensors/examples/PHSensor/PHSensor.ino b/examples/PHSensor/PHSensor.ino similarity index 100% rename from libraries/MySensors/examples/PHSensor/PHSensor.ino rename to examples/PHSensor/PHSensor.ino diff --git a/libraries/MySensors/examples/PingPongSensor/MYSLog.h b/examples/PingPongSensor/MYSLog.h similarity index 100% rename from libraries/MySensors/examples/PingPongSensor/MYSLog.h rename to examples/PingPongSensor/MYSLog.h diff --git a/libraries/MySensors/examples/PingPongSensor/PingPongSensor.ino b/examples/PingPongSensor/PingPongSensor.ino similarity index 100% rename from libraries/MySensors/examples/PingPongSensor/PingPongSensor.ino rename to examples/PingPongSensor/PingPongSensor.ino diff --git a/libraries/MySensors/examples/RelayActuator/RelayActuator.ino b/examples/RelayActuator/RelayActuator.ino similarity index 100% rename from libraries/MySensors/examples/RelayActuator/RelayActuator.ino rename to examples/RelayActuator/RelayActuator.ino diff --git a/libraries/MySensors/examples/RepeaterNode/RepeaterNode.ino b/examples/RepeaterNode/RepeaterNode.ino similarity index 100% rename from libraries/MySensors/examples/RepeaterNode/RepeaterNode.ino rename to examples/RepeaterNode/RepeaterNode.ino diff --git a/libraries/MySensors/examples/SecretKnockSensor/SecretKnockSensor.ino b/examples/SecretKnockSensor/SecretKnockSensor.ino similarity index 100% rename from libraries/MySensors/examples/SecretKnockSensor/SecretKnockSensor.ino rename to examples/SecretKnockSensor/SecretKnockSensor.ino diff --git a/libraries/MySensors/examples/SecureActuator/SecureActuator.ino b/examples/SecureActuator/SecureActuator.ino similarity index 100% rename from libraries/MySensors/examples/SecureActuator/SecureActuator.ino rename to examples/SecureActuator/SecureActuator.ino diff --git a/libraries/MySensors/examples/SecurityPersonalizer/SecurityPersonalizer.ino b/examples/SecurityPersonalizer/SecurityPersonalizer.ino similarity index 99% rename from libraries/MySensors/examples/SecurityPersonalizer/SecurityPersonalizer.ino rename to examples/SecurityPersonalizer/SecurityPersonalizer.ino index f28dc2b..c5ada8d 100644 --- a/libraries/MySensors/examples/SecurityPersonalizer/SecurityPersonalizer.ino +++ b/examples/SecurityPersonalizer/SecurityPersonalizer.ino @@ -80,8 +80,8 @@ * Details on personalization procedure is given in @ref personalization. */ -#include -#include +#include "sha204/sha204_library.h" +#include "sha204/sha204_lib_return_codes.h" #define MY_CORE_ONLY #include diff --git a/libraries/sha204/sha204_lib_return_codes.h b/examples/SecurityPersonalizer/sha204/sha204_lib_return_codes.h similarity index 100% rename from libraries/sha204/sha204_lib_return_codes.h rename to examples/SecurityPersonalizer/sha204/sha204_lib_return_codes.h diff --git a/libraries/sha204/sha204_library.cpp b/examples/SecurityPersonalizer/sha204/sha204_library.cpp similarity index 100% rename from libraries/sha204/sha204_library.cpp rename to examples/SecurityPersonalizer/sha204/sha204_library.cpp diff --git a/libraries/sha204/sha204_library.h b/examples/SecurityPersonalizer/sha204/sha204_library.h similarity index 100% rename from libraries/sha204/sha204_library.h rename to examples/SecurityPersonalizer/sha204/sha204_library.h diff --git a/libraries/MySensors/examples/SoilMoistSensor/SoilMoistSensor.ino b/examples/SoilMoistSensor/SoilMoistSensor.ino similarity index 100% rename from libraries/MySensors/examples/SoilMoistSensor/SoilMoistSensor.ino rename to examples/SoilMoistSensor/SoilMoistSensor.ino diff --git a/libraries/MySensors/examples/UVSensor/UVSensor.ino b/examples/UVSensor/UVSensor.ino similarity index 100% rename from libraries/MySensors/examples/UVSensor/UVSensor.ino rename to examples/UVSensor/UVSensor.ino diff --git a/libraries/MySensors/examples/VibrationSensor/VibrationSensor.ino b/examples/VibrationSensor/VibrationSensor.ino similarity index 100% rename from libraries/MySensors/examples/VibrationSensor/VibrationSensor.ino rename to examples/VibrationSensor/VibrationSensor.ino diff --git a/libraries/MySensors/examples/WaterMeterPulseSensor/WaterMeterPulseSensor.ino b/examples/WaterMeterPulseSensor/WaterMeterPulseSensor.ino similarity index 100% rename from libraries/MySensors/examples/WaterMeterPulseSensor/WaterMeterPulseSensor.ino rename to examples/WaterMeterPulseSensor/WaterMeterPulseSensor.ino diff --git a/libraries/MySensors/keywords.txt b/keywords.txt similarity index 100% rename from libraries/MySensors/keywords.txt rename to keywords.txt diff --git a/libraries/Adafruit_BMP085/Adafruit_BMP085.cpp b/libraries/Adafruit_BMP085/Adafruit_BMP085.cpp deleted file mode 100644 index 14e7e96..0000000 --- a/libraries/Adafruit_BMP085/Adafruit_BMP085.cpp +++ /dev/null @@ -1,297 +0,0 @@ -/*************************************************** - This is a library for the Adafruit BMP085/BMP180 Barometric Pressure + Temp sensor - - Designed specifically to work with the Adafruit BMP085 or BMP180 Breakout - ----> http://www.adafruit.com/products/391 - ----> http://www.adafruit.com/products/1603 - - These displays use I2C to communicate, 2 pins are required to - interface - Adafruit invests time and resources providing this open source code, - please support Adafruit and open-source hardware by purchasing - products from Adafruit! - - Written by Limor Fried/Ladyada for Adafruit Industries. - BSD license, all text above must be included in any redistribution - ****************************************************/ - -#include "Adafruit_BMP085.h" - -Adafruit_BMP085::Adafruit_BMP085() { -} - - -boolean Adafruit_BMP085::begin(uint8_t mode) { - if (mode > BMP085_ULTRAHIGHRES) - mode = BMP085_ULTRAHIGHRES; - oversampling = mode; - - Wire.begin(); - - if (read8(0xD0) != 0x55) return false; - - /* read calibration data */ - ac1 = read16(BMP085_CAL_AC1); - ac2 = read16(BMP085_CAL_AC2); - ac3 = read16(BMP085_CAL_AC3); - ac4 = read16(BMP085_CAL_AC4); - ac5 = read16(BMP085_CAL_AC5); - ac6 = read16(BMP085_CAL_AC6); - - b1 = read16(BMP085_CAL_B1); - b2 = read16(BMP085_CAL_B2); - - mb = read16(BMP085_CAL_MB); - mc = read16(BMP085_CAL_MC); - md = read16(BMP085_CAL_MD); -#if (BMP085_DEBUG == 1) - Serial.print("ac1 = "); Serial.println(ac1, DEC); - Serial.print("ac2 = "); Serial.println(ac2, DEC); - Serial.print("ac3 = "); Serial.println(ac3, DEC); - Serial.print("ac4 = "); Serial.println(ac4, DEC); - Serial.print("ac5 = "); Serial.println(ac5, DEC); - Serial.print("ac6 = "); Serial.println(ac6, DEC); - - Serial.print("b1 = "); Serial.println(b1, DEC); - Serial.print("b2 = "); Serial.println(b2, DEC); - - Serial.print("mb = "); Serial.println(mb, DEC); - Serial.print("mc = "); Serial.println(mc, DEC); - Serial.print("md = "); Serial.println(md, DEC); -#endif - - return true; -} - -int32_t Adafruit_BMP085::computeB5(int32_t UT) { - int32_t X1 = (UT - (int32_t)ac6) * ((int32_t)ac5) >> 15; - int32_t X2 = ((int32_t)mc << 11) / (X1+(int32_t)md); - return X1 + X2; -} - -uint16_t Adafruit_BMP085::readRawTemperature(void) { - write8(BMP085_CONTROL, BMP085_READTEMPCMD); - delay(5); -#if BMP085_DEBUG == 1 - Serial.print("Raw temp: "); Serial.println(read16(BMP085_TEMPDATA)); -#endif - return read16(BMP085_TEMPDATA); -} - -uint32_t Adafruit_BMP085::readRawPressure(void) { - uint32_t raw; - - write8(BMP085_CONTROL, BMP085_READPRESSURECMD + (oversampling << 6)); - - if (oversampling == BMP085_ULTRALOWPOWER) - delay(5); - else if (oversampling == BMP085_STANDARD) - delay(8); - else if (oversampling == BMP085_HIGHRES) - delay(14); - else - delay(26); - - raw = read16(BMP085_PRESSUREDATA); - - raw <<= 8; - raw |= read8(BMP085_PRESSUREDATA+2); - raw >>= (8 - oversampling); - - /* this pull broke stuff, look at it later? - if (oversampling==0) { - raw <<= 8; - raw |= read8(BMP085_PRESSUREDATA+2); - raw >>= (8 - oversampling); - } - */ - -#if BMP085_DEBUG == 1 - Serial.print("Raw pressure: "); Serial.println(raw); -#endif - return raw; -} - - -int32_t Adafruit_BMP085::readPressure(void) { - int32_t UT, UP, B3, B5, B6, X1, X2, X3, p; - uint32_t B4, B7; - - UT = readRawTemperature(); - UP = readRawPressure(); - -#if BMP085_DEBUG == 1 - // use datasheet numbers! - UT = 27898; - UP = 23843; - ac6 = 23153; - ac5 = 32757; - mc = -8711; - md = 2868; - b1 = 6190; - b2 = 4; - ac3 = -14383; - ac2 = -72; - ac1 = 408; - ac4 = 32741; - oversampling = 0; -#endif - - B5 = computeB5(UT); - -#if BMP085_DEBUG == 1 - Serial.print("X1 = "); Serial.println(X1); - Serial.print("X2 = "); Serial.println(X2); - Serial.print("B5 = "); Serial.println(B5); -#endif - - // do pressure calcs - B6 = B5 - 4000; - X1 = ((int32_t)b2 * ( (B6 * B6)>>12 )) >> 11; - X2 = ((int32_t)ac2 * B6) >> 11; - X3 = X1 + X2; - B3 = ((((int32_t)ac1*4 + X3) << oversampling) + 2) / 4; - -#if BMP085_DEBUG == 1 - Serial.print("B6 = "); Serial.println(B6); - Serial.print("X1 = "); Serial.println(X1); - Serial.print("X2 = "); Serial.println(X2); - Serial.print("B3 = "); Serial.println(B3); -#endif - - X1 = ((int32_t)ac3 * B6) >> 13; - X2 = ((int32_t)b1 * ((B6 * B6) >> 12)) >> 16; - X3 = ((X1 + X2) + 2) >> 2; - B4 = ((uint32_t)ac4 * (uint32_t)(X3 + 32768)) >> 15; - B7 = ((uint32_t)UP - B3) * (uint32_t)( 50000UL >> oversampling ); - -#if BMP085_DEBUG == 1 - Serial.print("X1 = "); Serial.println(X1); - Serial.print("X2 = "); Serial.println(X2); - Serial.print("B4 = "); Serial.println(B4); - Serial.print("B7 = "); Serial.println(B7); -#endif - - if (B7 < 0x80000000) { - p = (B7 * 2) / B4; - } else { - p = (B7 / B4) * 2; - } - X1 = (p >> 8) * (p >> 8); - X1 = (X1 * 3038) >> 16; - X2 = (-7357 * p) >> 16; - -#if BMP085_DEBUG == 1 - Serial.print("p = "); Serial.println(p); - Serial.print("X1 = "); Serial.println(X1); - Serial.print("X2 = "); Serial.println(X2); -#endif - - p = p + ((X1 + X2 + (int32_t)3791)>>4); -#if BMP085_DEBUG == 1 - Serial.print("p = "); Serial.println(p); -#endif - return p; -} - -int32_t Adafruit_BMP085::readSealevelPressure(float altitude_meters) { - float pressure = readPressure(); - return (int32_t)(pressure / pow(1.0-altitude_meters/44330, 5.255)); -} - -float Adafruit_BMP085::readTemperature(void) { - int32_t UT, B5; // following ds convention - float temp; - - UT = readRawTemperature(); - -#if BMP085_DEBUG == 1 - // use datasheet numbers! - UT = 27898; - ac6 = 23153; - ac5 = 32757; - mc = -8711; - md = 2868; -#endif - - B5 = computeB5(UT); - temp = (B5+8) >> 4; - temp /= 10; - - return temp; -} - -float Adafruit_BMP085::readAltitude(float sealevelPressure) { - float altitude; - - float pressure = readPressure(); - - altitude = 44330 * (1.0 - pow(pressure /sealevelPressure,0.1903)); - - return altitude; -} - - -/*********************************************************************/ - -uint8_t Adafruit_BMP085::read8(uint8_t a) { - uint8_t ret; - - Wire.beginTransmission(BMP085_I2CADDR); // start transmission to device -#if (ARDUINO >= 100) - Wire.write(a); // sends register address to read from -#else - Wire.send(a); // sends register address to read from -#endif - Wire.endTransmission(); // end transmission - - Wire.beginTransmission(BMP085_I2CADDR); // start transmission to device - Wire.requestFrom(BMP085_I2CADDR, 1);// send data n-bytes read -#if (ARDUINO >= 100) - ret = Wire.read(); // receive DATA -#else - ret = Wire.receive(); // receive DATA -#endif - Wire.endTransmission(); // end transmission - - return ret; -} - -uint16_t Adafruit_BMP085::read16(uint8_t a) { - uint16_t ret; - - Wire.beginTransmission(BMP085_I2CADDR); // start transmission to device -#if (ARDUINO >= 100) - Wire.write(a); // sends register address to read from -#else - Wire.send(a); // sends register address to read from -#endif - Wire.endTransmission(); // end transmission - - Wire.beginTransmission(BMP085_I2CADDR); // start transmission to device - Wire.requestFrom(BMP085_I2CADDR, 2);// send data n-bytes read -#if (ARDUINO >= 100) - ret = Wire.read(); // receive DATA - ret <<= 8; - ret |= Wire.read(); // receive DATA -#else - ret = Wire.receive(); // receive DATA - ret <<= 8; - ret |= Wire.receive(); // receive DATA -#endif - Wire.endTransmission(); // end transmission - - return ret; -} - -void Adafruit_BMP085::write8(uint8_t a, uint8_t d) { - Wire.beginTransmission(BMP085_I2CADDR); // start transmission to device -#if (ARDUINO >= 100) - Wire.write(a); // sends register address to read from - Wire.write(d); // write data -#else - Wire.send(a); // sends register address to read from - Wire.send(d); // write data -#endif - Wire.endTransmission(); // end transmission -} diff --git a/libraries/Adafruit_BMP085/Adafruit_BMP085.h b/libraries/Adafruit_BMP085/Adafruit_BMP085.h deleted file mode 100644 index d91b7b1..0000000 --- a/libraries/Adafruit_BMP085/Adafruit_BMP085.h +++ /dev/null @@ -1,79 +0,0 @@ -/*************************************************** - This is a library for the Adafruit BMP085/BMP180 Barometric Pressure + Temp sensor - - Designed specifically to work with the Adafruit BMP085 or BMP180 Breakout - ----> http://www.adafruit.com/products/391 - ----> http://www.adafruit.com/products/1603 - - These displays use I2C to communicate, 2 pins are required to - interface - Adafruit invests time and resources providing this open source code, - please support Adafruit and open-source hardware by purchasing - products from Adafruit! - - Written by Limor Fried/Ladyada for Adafruit Industries. - BSD license, all text above must be included in any redistribution - ****************************************************/ - -#ifndef ADAFRUIT_BMP085_H -#define ADAFRUIT_BMP085_H - -#if (ARDUINO >= 100) - #include "Arduino.h" -#else - #include "WProgram.h" -#endif -#include "Wire.h" - -#define BMP085_DEBUG 0 - -#define BMP085_I2CADDR 0x77 - -#define BMP085_ULTRALOWPOWER 0 -#define BMP085_STANDARD 1 -#define BMP085_HIGHRES 2 -#define BMP085_ULTRAHIGHRES 3 -#define BMP085_CAL_AC1 0xAA // R Calibration data (16 bits) -#define BMP085_CAL_AC2 0xAC // R Calibration data (16 bits) -#define BMP085_CAL_AC3 0xAE // R Calibration data (16 bits) -#define BMP085_CAL_AC4 0xB0 // R Calibration data (16 bits) -#define BMP085_CAL_AC5 0xB2 // R Calibration data (16 bits) -#define BMP085_CAL_AC6 0xB4 // R Calibration data (16 bits) -#define BMP085_CAL_B1 0xB6 // R Calibration data (16 bits) -#define BMP085_CAL_B2 0xB8 // R Calibration data (16 bits) -#define BMP085_CAL_MB 0xBA // R Calibration data (16 bits) -#define BMP085_CAL_MC 0xBC // R Calibration data (16 bits) -#define BMP085_CAL_MD 0xBE // R Calibration data (16 bits) - -#define BMP085_CONTROL 0xF4 -#define BMP085_TEMPDATA 0xF6 -#define BMP085_PRESSUREDATA 0xF6 -#define BMP085_READTEMPCMD 0x2E -#define BMP085_READPRESSURECMD 0x34 - - -class Adafruit_BMP085 { - public: - Adafruit_BMP085(); - boolean begin(uint8_t mode = BMP085_ULTRAHIGHRES); // by default go highres - float readTemperature(void); - int32_t readPressure(void); - int32_t readSealevelPressure(float altitude_meters = 0); - float readAltitude(float sealevelPressure = 101325); // std atmosphere - uint16_t readRawTemperature(void); - uint32_t readRawPressure(void); - - private: - int32_t computeB5(int32_t UT); - uint8_t read8(uint8_t addr); - uint16_t read16(uint8_t addr); - void write8(uint8_t addr, uint8_t data); - - uint8_t oversampling; - - int16_t ac1, ac2, ac3, b1, b2, mb, mc, md; - uint16_t ac4, ac5, ac6; -}; - - -#endif // ADAFRUIT_BMP085_H diff --git a/libraries/Adafruit_BMP085/README.txt b/libraries/Adafruit_BMP085/README.txt deleted file mode 100644 index 0a465b7..0000000 --- a/libraries/Adafruit_BMP085/README.txt +++ /dev/null @@ -1,28 +0,0 @@ -This is a library for the Adafruit BMP085/BMP180 Barometric Pressure + Temp sensor - -Designed specifically to work with the Adafruit BMP085 or BMP180 Breakout - ----> http://www.adafruit.com/products/391 - ----> http://www.adafruit.com/products/1603 - -These displays use I2C to communicate, 2 pins are required to interface -Adafruit invests time and resources providing this open source code, -please support Adafruit and open-source hardware by purchasing -products from Adafruit! - -Check out the links above for our tutorials and wiring diagrams - -Adafruit invests time and resources providing this open source code, -please support Adafruit and open-source hardware by purchasing -products from Adafruit! - -Written by Limor Fried/Ladyada for Adafruit Industries. -BSD license, all text above must be included in any redistribution - -To download. click the DOWNLOAD ZIP button, rename the uncompressed folder Adafruit_BMP085. -Check that the Adafruit_BMP085 folder contains Adafruit_BMP085.cpp and Adafruit_BMP085.h - -Place the Adafruit_BMP085 library folder your arduinosketchfolder/libraries/ folder. -You may need to create the libraries subfolder if its your first library. Restart the IDE. - -We also have a great tutorial on Arduino library installation at: -http://learn.adafruit.com/adafruit-all-about-arduino-libraries-install-use \ No newline at end of file diff --git a/libraries/Adafruit_BMP085/examples/BMP085test/BMP085test.pde b/libraries/Adafruit_BMP085/examples/BMP085test/BMP085test.pde deleted file mode 100644 index 1cc2af4..0000000 --- a/libraries/Adafruit_BMP085/examples/BMP085test/BMP085test.pde +++ /dev/null @@ -1,62 +0,0 @@ -#include -#include - -/*************************************************** - This is an example for the BMP085 Barometric Pressure & Temp Sensor - - Designed specifically to work with the Adafruit BMP085 Breakout - ----> https://www.adafruit.com/products/391 - - These displays use I2C to communicate, 2 pins are required to - interface - Adafruit invests time and resources providing this open source code, - please support Adafruit and open-source hardware by purchasing - products from Adafruit! - - Written by Limor Fried/Ladyada for Adafruit Industries. - BSD license, all text above must be included in any redistribution - ****************************************************/ - -// Connect VCC of the BMP085 sensor to 3.3V (NOT 5.0V!) -// Connect GND to Ground -// Connect SCL to i2c clock - on '168/'328 Arduino Nano/Uno/Duemilanove/etc thats Analog 5 -// Connect SDA to i2c data - on '168/'328 Arduino Nano/Uno/Duemilanove/etc thats Analog 4 -// EOC is not used, it signifies an end of conversion -// XCLR is a reset pin, also not used here - -Adafruit_BMP085 bmp; - -void setup() { - Serial.begin(9600); - if (!bmp.begin()) { - Serial.println("Could not find a valid BMP085 sensor, check wiring!"); - while (1) {} - } -} - -void loop() { - Serial.print("Temperature = "); - Serial.print(bmp.readTemperature()); - Serial.println(" *C"); - - Serial.print("Pressure = "); - Serial.print(bmp.readPressure()); - Serial.println(" Pa"); - - // Calculate altitude assuming 'standard' barometric - // pressure of 1013.25 millibar = 101325 Pascal - Serial.print("Altitude = "); - Serial.print(bmp.readAltitude()); - Serial.println(" meters"); - - // you can get a more precise measurement of altitude - // if you know the current sea level pressure which will - // vary with weather and such. If it is 1015 millibars - // that is equal to 101500 Pascals. - Serial.print("Real altitude = "); - Serial.print(bmp.readAltitude(101500)); - Serial.println(" meters"); - - Serial.println(); - delay(500); -} \ No newline at end of file diff --git a/libraries/Adafruit_FONA_Library/.travis.yml b/libraries/Adafruit_FONA_Library/.travis.yml deleted file mode 100644 index 6b62611..0000000 --- a/libraries/Adafruit_FONA_Library/.travis.yml +++ /dev/null @@ -1,10 +0,0 @@ -language: c -sudo: false -before_install: - - source <(curl -SLs https://raw.githubusercontent.com/adafruit/travis-ci-arduino/master/install.sh) -script: - - build_main_platforms -notifications: - email: - on_success: change - on_failure: change diff --git a/libraries/Adafruit_FONA_Library/Adafruit_FONA.cpp b/libraries/Adafruit_FONA_Library/Adafruit_FONA.cpp deleted file mode 100644 index 714aa2f..0000000 --- a/libraries/Adafruit_FONA_Library/Adafruit_FONA.cpp +++ /dev/null @@ -1,1975 +0,0 @@ -/*************************************************** - This is a library for our Adafruit FONA Cellular Module - - Designed specifically to work with the Adafruit FONA - ----> http://www.adafruit.com/products/1946 - ----> http://www.adafruit.com/products/1963 - - These displays use TTL Serial to communicate, 2 pins are required to - interface - Adafruit invests time and resources providing this open source code, - please support Adafruit and open-source hardware by purchasing - products from Adafruit! - - Written by Limor Fried/Ladyada for Adafruit Industries. - BSD license, all text above must be included in any redistribution - ****************************************************/ -#include - // next line per http://postwarrior.com/arduino-ethershield-error-prog_char-does-not-name-a-type/ -#define prog_char char PROGMEM - -#if (ARDUINO >= 100) - #include "Arduino.h" - #ifndef __SAM3X8E__ // Arduino Due doesn't support SoftwareSerial - #include - #endif -#else - #include "WProgram.h" - #include -#endif - -#include "Adafruit_FONA.h" - -Adafruit_FONA::Adafruit_FONA(int8_t rst) -{ - _rstpin = rst; - - apn = F("FONAnet"); - apnusername = 0; - apnpassword = 0; - mySerial = 0; - httpsredirect = false; - useragent = F("FONA"); -} - -uint8_t Adafruit_FONA::type(void) { - return _type; -} - -boolean Adafruit_FONA::begin(Stream &port) { - mySerial = &port; - - pinMode(_rstpin, OUTPUT); - digitalWrite(_rstpin, HIGH); - delay(10); - digitalWrite(_rstpin, LOW); - delay(100); - digitalWrite(_rstpin, HIGH); - - // give 7 seconds to reboot - delay(7000); - - while (mySerial->available()) mySerial->read(); - - sendCheckReply(F("AT"), F("OK")); - delay(100); - sendCheckReply(F("AT"), F("OK")); - delay(100); - sendCheckReply(F("AT"), F("OK")); - delay(100); - - // turn off Echo! - sendCheckReply(F("ATE0"), F("OK")); - delay(100); - - if (! sendCheckReply(F("ATE0"), F("OK"))) { - return false; - } - - // turn on hangupitude - sendCheckReply(F("AT+CVHU=0"), F("OK")); - - delay(100); - flushInput(); - -#ifdef ADAFRUIT_FONA_DEBUG - Serial.print("\t---> "); Serial.println("ATI"); -#endif - - mySerial->println("ATI"); - - readline(500, true); - -#ifdef ADAFRUIT_FONA_DEBUG - Serial.print (F("\t<--- ")); Serial.println(replybuffer); -#endif - - if (strstr_P(replybuffer, (prog_char *)F("SIM808 R14")) != 0) { - _type = FONA808_V2; - } else if (strstr_P(replybuffer, (prog_char *)F("SIM808 R13")) != 0) { - _type = FONA808_V1; - } else if (strstr_P(replybuffer, (prog_char *)F("SIM800 R13")) != 0) { - _type = FONA800L; - } else if (strstr_P(replybuffer, (prog_char *)F("SIMCOM_SIM5320A")) != 0) { - _type = FONA3G_A; - } else if (strstr_P(replybuffer, (prog_char *)F("SIMCOM_SIM5320E")) != 0) { - _type = FONA3G_E; - } - - return true; -} - - -/********* Serial port ********************************************/ -boolean Adafruit_FONA::setBaudrate(uint16_t baud) { - return sendCheckReply(F("AT+IPREX="), baud, F("OK")); -} - -/********* Real Time Clock ********************************************/ - -boolean Adafruit_FONA::readRTC(uint8_t *year, uint8_t *month, uint8_t *date, uint8_t *hr, uint8_t *min, uint8_t *sec) { - uint16_t v; - uint8_t mm = 0; - uint8_t dd = 0; - uint8_t hh = 0; - uint8_t nn = 0; - uint8_t ss = 0; - - *month = mm; - *date = dd; - *hr = hh; - *min = nn; - *sec = ss; - - boolean b = sendParseReply(F("AT+CCLK?"), F("+CCLK: "), &v, '/', 0); - *year = v; - Serial.println(*year); - return b; -} - -boolean Adafruit_FONA::enableRTC(uint8_t i) { - if (! sendCheckReply(F("AT+CLTS="), i, F("OK"))) - return false; - return sendCheckReply(F("AT&W"), F("OK")); -} - - -/********* BATTERY & ADC ********************************************/ - -/* returns value in mV (uint16_t) */ -boolean Adafruit_FONA::getBattVoltage(uint16_t *v) { - return sendParseReply(F("AT+CBC"), F("+CBC: "), v, ',', 2); -} - -/* returns value in mV (uint16_t) */ -boolean Adafruit_FONA_3G::getBattVoltage(uint16_t *v) { - float f; - boolean b = sendParseReply(F("AT+CBC"), F("+CBC: "), &f, ',', 2); - *v = f*1000; - return b; -} - - -/* returns the percentage charge of battery as reported by sim800 */ -boolean Adafruit_FONA::getBattPercent(uint16_t *p) { - return sendParseReply(F("AT+CBC"), F("+CBC: "), p, ',', 1); -} - -boolean Adafruit_FONA::getADCVoltage(uint16_t *v) { - return sendParseReply(F("AT+CADC?"), F("+CADC: 1,"), v); -} - -/********* SIM ***********************************************************/ - -uint8_t Adafruit_FONA::unlockSIM(char *pin) -{ - char sendbuff[14] = "AT+CPIN="; - sendbuff[8] = pin[0]; - sendbuff[9] = pin[1]; - sendbuff[10] = pin[2]; - sendbuff[11] = pin[3]; - sendbuff[12] = 0; - char sendOK[3] = "OK"; - -// return sendCheckReply(sendbuff, "OK"); - return sendCheckReply(sendbuff, sendOK); -} - -uint8_t Adafruit_FONA::getSIMCCID(char *ccid) -{ - - getReply(F("AT+CCID")); - // up to 28 chars for reply, 20 char total ccid - if (replybuffer[0] == '+') { - // fona 3g? - strncpy(ccid, replybuffer+8, 20); - } else { - // fona 800 or 800 - strncpy(ccid, replybuffer, 20); - } - ccid[20] = 0; - - readline(); // eat 'OK' - - return strlen(ccid); -} - -/********* IMEI **********************************************************/ - -uint8_t Adafruit_FONA::getIMEI(char *imei) { - getReply(F("AT+GSN")); - - // up to 15 chars - strncpy(imei, replybuffer, 15); - imei[15] = 0; - - readline(); // eat 'OK' - - return strlen(imei); -} - -/********* NETWORK *******************************************************/ - -uint8_t Adafruit_FONA::getNetworkStatus(void) { - uint16_t status; - - if (! sendParseReply(F("AT+CREG?"), F("+CREG: "), &status, ',', 1)) return 0; - - return status; -} - - -uint8_t Adafruit_FONA::getRSSI(void) { - uint16_t reply; - - if (! sendParseReply(F("AT+CSQ"), F("+CSQ: "), &reply) ) return 0; - - return reply; -} - -/********* AUDIO *******************************************************/ - -boolean Adafruit_FONA::setAudio(uint8_t a) { - // 0 is headset, 1 is external audio - if (a > 1) return false; - - return sendCheckReply(F("AT+CHFA="), a, F("OK")); -} - -uint8_t Adafruit_FONA::getVolume(void) { - uint16_t reply; - - if (! sendParseReply(F("AT+CLVL?"), F("+CLVL: "), &reply) ) return 0; - - return reply; -} - -boolean Adafruit_FONA::setVolume(uint8_t i) { - return sendCheckReply(F("AT+CLVL="), i, F("OK")); -} - - -boolean Adafruit_FONA::playDTMF(char dtmf) { - char str[4]; - str[0] = '\"'; - str[1] = dtmf; - str[2] = '\"'; - str[3] = 0; - return sendCheckReply(F("AT+CLDTMF=3,"), str, F("OK")); -} - -boolean Adafruit_FONA::playToolkitTone(uint8_t t, uint16_t len) { - return sendCheckReply(F("AT+STTONE=1,"), t, len, F("OK")); -} - -boolean Adafruit_FONA_3G::playToolkitTone(uint8_t t, uint16_t len) { - if (! sendCheckReply(F("AT+CPTONE="), t, F("OK"))) - return false; - delay(len); - return sendCheckReply(F("AT+CPTONE=0"), F("OK")); -} - -boolean Adafruit_FONA::setMicVolume(uint8_t a, uint8_t level) { - // 0 is headset, 1 is external audio - if (a > 1) return false; - - return sendCheckReply(F("AT+CMIC="), a, level, F("OK")); -} - -/********* FM RADIO *******************************************************/ - - -boolean Adafruit_FONA::FMradio(boolean onoff, uint8_t a) { - if (! onoff) { - return sendCheckReply(F("AT+FMCLOSE"), F("OK")); - } - - // 0 is headset, 1 is external audio - if (a > 1) return false; - - return sendCheckReply(F("AT+FMOPEN="), a, F("OK")); -} - -boolean Adafruit_FONA::tuneFMradio(uint16_t station) { - // Fail if FM station is outside allowed range. - if ((station < 870) || (station > 1090)) - return false; - - return sendCheckReply(F("AT+FMFREQ="), station, F("OK")); -} - -boolean Adafruit_FONA::setFMVolume(uint8_t i) { - // Fail if volume is outside allowed range (0-6). - if (i > 6) { - return false; - } - // Send FM volume command and verify response. - return sendCheckReply(F("AT+FMVOLUME="), i, F("OK")); -} - -int8_t Adafruit_FONA::getFMVolume() { - uint16_t level; - - if (! sendParseReply(F("AT+FMVOLUME?"), F("+FMVOLUME: "), &level) ) return 0; - - return level; -} - -int8_t Adafruit_FONA::getFMSignalLevel(uint16_t station) { - // Fail if FM station is outside allowed range. - if ((station < 875) || (station > 1080)) { - return -1; - } - - // Send FM signal level query command. - // Note, need to explicitly send timeout so right overload is chosen. - getReply(F("AT+FMSIGNAL="), station, FONA_DEFAULT_TIMEOUT_MS); - // Check response starts with expected value. - char *p = strstr_P(replybuffer, PSTR("+FMSIGNAL: ")); - if (p == 0) return -1; - p+=11; - // Find second colon to get start of signal quality. - p = strchr(p, ':'); - if (p == 0) return -1; - p+=1; - // Parse signal quality. - int8_t level = atoi(p); - readline(); // eat the "OK" - return level; -} - -/********* PWM/BUZZER **************************************************/ - -boolean Adafruit_FONA::setPWM(uint16_t period, uint8_t duty) { - if (period > 2000) return false; - if (duty > 100) return false; - - return sendCheckReply(F("AT+SPWM=0,"), period, duty, F("OK")); -} - -/********* CALL PHONES **************************************************/ -boolean Adafruit_FONA::callPhone(char *number) { - char sendbuff[35] = "ATD"; - strncpy(sendbuff+3, number, min(30, strlen(number))); - uint8_t x = strlen(sendbuff); - sendbuff[x] = ';'; - sendbuff[x+1] = 0; - //Serial.println(sendbuff); - char sendOK[3] = "OK"; - -// return sendCheckReply(sendbuff, "OK"); - return sendCheckReply(sendbuff, sendOK); - -} - -boolean Adafruit_FONA::hangUp(void) { - return sendCheckReply(F("ATH0"), F("OK")); -} - -boolean Adafruit_FONA_3G::hangUp(void) { - getReply(F("ATH")); - - return (strstr_P(replybuffer, (prog_char *)F("VOICE CALL: END")) != 0); -} - -boolean Adafruit_FONA::pickUp(void) { - return sendCheckReply(F("ATA"), F("OK")); -} - -boolean Adafruit_FONA_3G::pickUp(void) { - return sendCheckReply(F("ATA"), F("VOICE CALL: BEGIN")); -} - - -void Adafruit_FONA::onIncomingCall() { - #ifdef ADAFRUIT_FONA_DEBUG - Serial.print(F("> ")); Serial.println(F("Incoming call...")); - #endif - Adafruit_FONA::_incomingCall = true; -} - -boolean Adafruit_FONA::_incomingCall = false; - -boolean Adafruit_FONA::callerIdNotification(boolean enable, uint8_t interrupt) { - if(enable){ - attachInterrupt(interrupt, onIncomingCall, FALLING); - return sendCheckReply(F("AT+CLIP=1"), F("OK")); - } - - detachInterrupt(interrupt); - return sendCheckReply(F("AT+CLIP=0"), F("OK")); -} - -boolean Adafruit_FONA::incomingCallNumber(char* phonenum) { - //+CLIP: "",145,"",0,"",0 - if(!Adafruit_FONA::_incomingCall) - return false; - - readline(); - while(!strcmp_P(replybuffer, (prog_char*)F("RING")) == 0) { - flushInput(); - readline(); - } - - readline(); //reads incoming phone number line - - parseReply(F("+CLIP: \""), phonenum, '"'); - - #ifdef ADAFRUIT_FONA_DEBUG - Serial.print(F("Phone Number: ")); - Serial.println(replybuffer); - #endif - - Adafruit_FONA::_incomingCall = false; - return true; -} - -/********* SMS **********************************************************/ - -uint8_t Adafruit_FONA::getSMSInterrupt(void) { - uint16_t reply; - - if (! sendParseReply(F("AT+CFGRI?"), F("+CFGRI: "), &reply) ) return 0; - - return reply; -} - -boolean Adafruit_FONA::setSMSInterrupt(uint8_t i) { - return sendCheckReply(F("AT+CFGRI="), i, F("OK")); -} - -int8_t Adafruit_FONA::getNumSMS(void) { - uint16_t numsms; - - // get into text mode - if (! sendCheckReply(F("AT+CMGF=1"), F("OK"))) return -1; - - // ask how many sms are stored - if ( (_type == FONA3G_A) || (_type == FONA3G_E) ) { - if (! sendParseReply(F("AT+CPMS?"), F("+CPMS: \"ME\","), &numsms) ) return -1; - } else { - if (! sendParseReply(F("AT+CPMS?"), F("+CPMS: \"SM_P\","), &numsms) ) return -1; - } - return numsms; -} - -// Reading SMS's is a bit involved so we don't use helpers that may cause delays or debug -// printouts! -boolean Adafruit_FONA::readSMS(uint8_t i, char *smsbuff, - uint16_t maxlen, uint16_t *readlen) { - // text mode - if (! sendCheckReply(F("AT+CMGF=1"), F("OK"))) return false; - - // show all text mode parameters - if (! sendCheckReply(F("AT+CSDH=1"), F("OK"))) return false; - - // parse out the SMS len - uint16_t thesmslen = 0; - - //getReply(F("AT+CMGR="), i, 1000); // do not print debug! - mySerial->print(F("AT+CMGR=")); - mySerial->println(i); - readline(1000); // timeout - - //Serial.print(F("Reply: ")); Serial.println(replybuffer); - // parse it out... - if (! parseReply(F("+CMGR:"), &thesmslen, ',', 11)) { - *readlen = 0; - return false; - } - - readRaw(thesmslen); - - flushInput(); - - uint16_t thelen = min(maxlen, strlen(replybuffer)); - strncpy(smsbuff, replybuffer, thelen); - smsbuff[thelen] = 0; // end the string - -#ifdef ADAFRUIT_FONA_DEBUG - Serial.println(replybuffer); -#endif - *readlen = thelen; - return true; -} - -// Retrieve the sender of the specified SMS message and copy it as a string to -// the sender buffer. Up to senderlen characters of the sender will be copied -// and a null terminator will be added if less than senderlen charactesr are -// copied to the result. Returns true if a result was successfully retrieved, -// otherwise false. -boolean Adafruit_FONA::getSMSSender(uint8_t i, char *sender, int senderlen) { - // Ensure text mode and all text mode parameters are sent. - if (! sendCheckReply(F("AT+CMGF=1"), F("OK"))) return false; - if (! sendCheckReply(F("AT+CSDH=1"), F("OK"))) return false; - // Send command to retrieve SMS message and parse a line of response. - mySerial->print(F("AT+CMGR=")); - mySerial->println(i); - readline(1000); - // Parse the second field in the response. - boolean result = parseReplyQuoted(F("+CMGR:"), sender, senderlen, ',', 1); - // Drop any remaining data from the response. - flushInput(); - return result; -} - -boolean Adafruit_FONA::sendSMS(char *smsaddr, char *smsmsg) -{ -// char sendOK[3] = "OK"; -// if (!sendCheckReply("AT+CMGF=1", "OK")) return -1; - if (!sendCheckReply(F("AT+CMGF=1"), F("OK"))) return -1; - - char sendcmd[30] = "AT+CMGS=\""; - char sendgreater[3] = "> "; - strncpy(sendcmd+9, smsaddr, 30-9-2); // 9 bytes beginning, 2 bytes for close quote + null - sendcmd[strlen(sendcmd)] = '\"'; - -// if (!sendCheckReply(sendcmd, "> ")) return false; - if (!sendCheckReply(sendcmd, sendgreater)) return false; -#ifdef ADAFRUIT_FONA_DEBUG - Serial.print(F("> ")); Serial.println(smsmsg); -#endif - mySerial->println(smsmsg); - mySerial->println(); - mySerial->write(0x1A); -#ifdef ADAFRUIT_FONA_DEBUG - Serial.println("^Z"); -#endif - if ( (_type == FONA3G_A) || (_type == FONA3G_E) ) { - // Eat two sets of CRLF - readline(200); - //Serial.print("Line 1: "); Serial.println(strlen(replybuffer)); - readline(200); - //Serial.print("Line 2: "); Serial.println(strlen(replybuffer)); - } - readline(10000); // read the +CMGS reply, wait up to 10 seconds!!! - //Serial.print("Line 3: "); Serial.println(strlen(replybuffer)); - if (strstr(replybuffer, "+CMGS") == 0) { - return false; - } - readline(1000); // read OK - //Serial.print("* "); Serial.println(replybuffer); - - if (strcmp(replybuffer, "OK") != 0) { - return false; - } - - return true; -} - - -boolean Adafruit_FONA::deleteSMS(uint8_t i) -{ -// if (!sendCheckReply("AT+CMGF=1", "OK")) return -1; - if (!sendCheckReply(F("AT+CMGF=1"), F("OK"))) return -1; - // read an sms - char sendbuff[12] = "AT+CMGD=000"; - char sendOK[3] = "OK"; - sendbuff[8] = (i / 100) + '0'; - i %= 100; - sendbuff[9] = (i / 10) + '0'; - i %= 10; - sendbuff[10] = i + '0'; - -// return sendCheckReply(sendbuff, "OK", 2000); - return sendCheckReply(sendbuff, sendOK, 2000); -} - -/********* TIME **********************************************************/ - -boolean Adafruit_FONA::enableNetworkTimeSync(boolean onoff) { - if (onoff) { - if (! sendCheckReply(F("AT+CLTS=1"), F("OK"))) - return false; - } else { - if (! sendCheckReply(F("AT+CLTS=0"), F("OK"))) - return false; - } - - flushInput(); // eat any 'Unsolicted Result Code' - - return true; -} - -boolean Adafruit_FONA::enableNTPTimeSync(boolean onoff, const __FlashStringHelper *ntpserver) { - if (onoff) { - if (! sendCheckReply(F("AT+CNTPCID=1"), F("OK"))) - return false; - - mySerial->print(F("AT+CNTP=\"")); - if (ntpserver != 0) { - mySerial->print(ntpserver); - } else { - mySerial->print(F("pool.ntp.org")); - } - mySerial->println(F("\",0")); - readline(FONA_DEFAULT_TIMEOUT_MS); - if (strcmp(replybuffer, "OK") != 0) - return false; - - if (! sendCheckReply(F("AT+CNTP"), F("OK"), 10000)) - return false; - - uint16_t status; - readline(10000); - if (! parseReply(F("+CNTP:"), &status)) - return false; - } else { - if (! sendCheckReply(F("AT+CNTPCID=0"), F("OK"))) - return false; - } - - return true; -} - -boolean Adafruit_FONA::getTime(char *buff, uint16_t maxlen) { - getReply(F("AT+CCLK?"), (uint16_t) 10000); - if (strncmp(replybuffer, "+CCLK: ", 7) != 0) - return false; - - char *p = replybuffer+7; - uint16_t lentocopy = min(maxlen-1, strlen(p)); - strncpy(buff, p, lentocopy+1); - buff[lentocopy] = 0; - - readline(); // eat OK - - return true; -} - -/********* GPS **********************************************************/ - - -boolean Adafruit_FONA::enableGPS(boolean onoff) { - uint16_t state; - - // first check if its already on or off - - if (_type == FONA808_V2) { - if (! sendParseReply(F("AT+CGNSPWR?"), F("+CGNSPWR: "), &state) ) - return false; - } else { - if (! sendParseReply(F("AT+CGPSPWR?"), F("+CGPSPWR: "), &state)) - return false; - } - - if (onoff && !state) { - if (_type == FONA808_V2) { - if (! sendCheckReply(F("AT+CGNSPWR=1"), F("OK"))) // try GNS command - return false; - } else { - if (! sendCheckReply(F("AT+CGPSPWR=1"), F("OK"))) - return false; - } - } else if (!onoff && state) { - if (_type == FONA808_V2) { - if (! sendCheckReply(F("AT+CGNSPWR=0"), F("OK"))) // try GNS command - return false; - } else { - if (! sendCheckReply(F("AT+CGPSPWR=0"), F("OK"))) - return false; - } - } - return true; -} - - - -boolean Adafruit_FONA_3G::enableGPS(boolean onoff) { - uint16_t state; - - // first check if its already on or off - if (! Adafruit_FONA::sendParseReply(F("AT+CGPS?"), F("+CGPS: "), &state) ) - return false; - - if (onoff && !state) { - if (! sendCheckReply(F("AT+CGPS=1"), F("OK"))) - return false; - } else if (!onoff && state) { - if (! sendCheckReply(F("AT+CGPS=0"), F("OK"))) - return false; - // this takes a little time - readline(2000); // eat '+CGPS: 0' - } - return true; -} - -int8_t Adafruit_FONA::GPSstatus(void) { - if (_type == FONA808_V2) { - // 808 V2 uses GNS commands and doesn't have an explicit 2D/3D fix status. - // Instead just look for a fix and if found assume it's a 3D fix. - getReply(F("AT+CGNSINF")); - char *p = strstr_P(replybuffer, (prog_char*)F("+CGNSINF: ")); - if (p == 0) return -1; - p+=12; // Skip to second value, fix status. - readline(); // eat 'OK' - //Serial.println(p); - // Assume if the fix status is '1' then we have a 3D fix, otherwise no fix. - if (p[0] == '1') return 3; - else return 0; - } - if (_type == FONA3G_A || _type == FONA3G_E) { - // FONA 3G doesn't have an explicit 2D/3D fix status. - // Instead just look for a fix and if found assume it's a 3D fix. - getReply(F("AT+CGPSINFO")); - char *p = strstr_P(replybuffer, (prog_char*)F("+CGPSINFO:")); - if (p == 0) return -1; - if (p[10] != ',') return 3; // if you get anything, its 3D fix - return 0; - } - else { - // 808 V1 looks for specific 2D or 3D fix state. - getReply(F("AT+CGPSSTATUS?")); - char *p = strstr_P(replybuffer, (prog_char*)F("SSTATUS: Location ")); - if (p == 0) return -1; - p+=18; - readline(); // eat 'OK' - //Serial.println(p); - if (p[0] == 'U') return 0; - if (p[0] == 'N') return 1; - if (p[0] == '2') return 2; - if (p[0] == '3') return 3; - } - // else - return 0; -} - -uint8_t Adafruit_FONA::getGPS(uint8_t arg, char *buffer, uint8_t maxbuff) { - int32_t x = arg; - - if ( (_type == FONA3G_A) || (_type == FONA3G_E) ) { - getReply(F("AT+CGPSINFO")); - } else if (_type == FONA808_V1) { - getReply(F("AT+CGPSINF="), x); - } else { - getReply(F("AT+CGNSINF")); - } - - char *p = strstr_P(replybuffer, (prog_char*)F("SINF")); - if (p == 0) { - buffer[0] = 0; - return 0; - } - - p+=6; - - uint8_t len = max((unsigned)maxbuff-1, (unsigned) strlen(p)); - strncpy(buffer, p, len); - buffer[len] = 0; - - readline(); // eat 'OK' - return len; -} - -boolean Adafruit_FONA::getGPS(float *lat, float *lon, float *speed_kph, float *heading, float *altitude) { - - char gpsbuffer[120]; - - // we need at least a 2D fix - if (GPSstatus() < 2) - return false; - - // grab the mode 2^5 gps csv from the sim808 - uint8_t res_len = getGPS(32, gpsbuffer, 120); - - // make sure we have a response - if (res_len == 0) - return false; - - if (_type == FONA3G_A || _type == FONA3G_E) -{ - // Parse 3G respose - // +CGPSINFO:4043.000000,N,07400.000000,W,151015,203802.1,-12.0,0.0,0 - // skip beginning - char *tok = {0}; - strcpy(tok, ""); - - - // grab the latitude - char *latp = strtok(gpsbuffer, ","); - if (! latp) return false; - - // grab latitude direction - char *latdir = strtok(NULL, ","); - if (! latdir) return false; - - // grab longitude - char *longp = strtok(NULL, ","); - if (! longp) return false; - - // grab longitude direction - char *longdir = strtok(NULL, ","); - if (! longdir) return false; - - // skip date & time - tok = strtok(NULL, ","); - tok = strtok(NULL, ","); - - // only grab altitude if needed - if (altitude != NULL) { - // grab altitude - char *altp = strtok(NULL, ","); - if (! altp) return false; - *altitude = atof(altp); - } - - // only grab speed if needed - if (speed_kph != NULL) { - // grab the speed in km/h - char *speedp = strtok(NULL, ","); - if (! speedp) return false; - - *speed_kph = atof(speedp); - } - - // only grab heading if needed - if (heading != NULL) { - - // grab the speed in knots - char *coursep = strtok(NULL, ","); - if (! coursep) return false; - - *heading = atof(coursep); - } - - double latitude = atof(latp); - double longitude = atof(longp); - - // convert latitude from minutes to decimal - float degrees = floor(latitude / 100); - double minutes = latitude - (100 * degrees); - minutes /= 60; - degrees += minutes; - - // turn direction into + or - - if (latdir[0] == 'S') degrees *= -1; - - *lat = degrees; - - // convert longitude from minutes to decimal - degrees = floor(longitude / 100); - minutes = longitude - (100 * degrees); - minutes /= 60; - degrees += minutes; - - // turn direction into + or - - if (longdir[0] == 'W') degrees *= -1; - - *lon = degrees; - - } else if (_type == FONA808_V2) - { - // Parse 808 V2 response. See table 2-3 from here for format: - // http://www.adafruit.com/datasheets/SIM800%20Series_GNSS_Application%20Note%20V1.00.pdf - - // skip GPS run status - char *tok = strtok(gpsbuffer, ","); - if (! tok) return false; - - // skip fix status - tok = strtok(NULL, ","); - if (! tok) return false; - - // skip date - tok = strtok(NULL, ","); - if (! tok) return false; - - // grab the latitude - char *latp = strtok(NULL, ","); - if (! latp) return false; - - // grab longitude - char *longp = strtok(NULL, ","); - if (! longp) return false; - - *lat = atof(latp); - *lon = atof(longp); - - // only grab altitude if needed - if (altitude != NULL) { - // grab altitude - char *altp = strtok(NULL, ","); - if (! altp) return false; - - *altitude = atof(altp); - } - - // only grab speed if needed - if (speed_kph != NULL) { - // grab the speed in km/h - char *speedp = strtok(NULL, ","); - if (! speedp) return false; - - *speed_kph = atof(speedp); - } - - // only grab heading if needed - if (heading != NULL) { - - // grab the speed in knots - char *coursep = strtok(NULL, ","); - if (! coursep) return false; - - *heading = atof(coursep); - } - } - else { - // Parse 808 V1 response. - - // skip mode - char *tok = strtok(gpsbuffer, ","); - if (! tok) return false; - - // skip date - tok = strtok(NULL, ","); - if (! tok) return false; - - // skip fix - tok = strtok(NULL, ","); - if (! tok) return false; - - // grab the latitude - char *latp = strtok(NULL, ","); - if (! latp) return false; - - // grab latitude direction - char *latdir = strtok(NULL, ","); - if (! latdir) return false; - - // grab longitude - char *longp = strtok(NULL, ","); - if (! longp) return false; - - // grab longitude direction - char *longdir = strtok(NULL, ","); - if (! longdir) return false; - - double latitude = atof(latp); - double longitude = atof(longp); - - // convert latitude from minutes to decimal - float degrees = floor(latitude / 100); - double minutes = latitude - (100 * degrees); - minutes /= 60; - degrees += minutes; - - // turn direction into + or - - if (latdir[0] == 'S') degrees *= -1; - - *lat = degrees; - - // convert longitude from minutes to decimal - degrees = floor(longitude / 100); - minutes = longitude - (100 * degrees); - minutes /= 60; - degrees += minutes; - - // turn direction into + or - - if (longdir[0] == 'W') degrees *= -1; - - *lon = degrees; - - // only grab speed if needed - if (speed_kph != NULL) { - - // grab the speed in knots - char *speedp = strtok(NULL, ","); - if (! speedp) return false; - - // convert to kph - *speed_kph = atof(speedp) * 1.852; - - } - - // only grab heading if needed - if (heading != NULL) { - - // grab the speed in knots - char *coursep = strtok(NULL, ","); - if (! coursep) return false; - - *heading = atof(coursep); - - } - - // no need to continue - if (altitude == NULL) - return true; - - // we need at least a 3D fix for altitude - if (GPSstatus() < 3) - return false; - - // grab the mode 0 gps csv from the sim808 - res_len = getGPS(0, gpsbuffer, 120); - - // make sure we have a response - if (res_len == 0) - return false; - - // skip mode - tok = strtok(gpsbuffer, ","); - if (! tok) return false; - - // skip lat - tok = strtok(NULL, ","); - if (! tok) return false; - - // skip long - tok = strtok(NULL, ","); - if (! tok) return false; - - // grab altitude - char *altp = strtok(NULL, ","); - if (! altp) return false; - - *altitude = atof(altp); - } - - return true; - -} - -boolean Adafruit_FONA::enableGPSNMEA(uint8_t i) { - - char sendbuff[15] = "AT+CGPSOUT=000"; - char sendOK[3] = "OK"; - sendbuff[11] = (i / 100) + '0'; - i %= 100; - sendbuff[12] = (i / 10) + '0'; - i %= 10; - sendbuff[13] = i + '0'; - - if (_type == FONA808_V2) { - if (i) - return sendCheckReply(F("AT+CGNSTST=1"), F("OK")); - else - return sendCheckReply(F("AT+CGNSTST=0"), F("OK")); - } else { -// return sendCheckReply(sendbuff, "OK", 2000); - return sendCheckReply(sendbuff, sendOK, 2000); - } -} - - -/********* GPRS **********************************************************/ - - -boolean Adafruit_FONA::enableGPRS(boolean onoff) { - - if (onoff) { - // disconnect all sockets - sendCheckReply(F("AT+CIPSHUT"), F("SHUT OK"), 5000); - - if (! sendCheckReply(F("AT+CGATT=1"), F("OK"), 10000)) - return false; - - // set bearer profile! connection type GPRS - if (! sendCheckReply(F("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\""), - F("OK"), 10000)) - return false; - - // set bearer profile access point name - if (apn) { - // Send command AT+SAPBR=3,1,"APN","" where is the configured APN value. - if (! sendCheckReplyQuoted(F("AT+SAPBR=3,1,\"APN\","), apn, F("OK"), 10000)) - return false; - - // set username/password - if (apnusername) { - // Send command AT+SAPBR=3,1,"USER","" where is the configured APN username. - if (! sendCheckReplyQuoted(F("AT+SAPBR=3,1,\"USER\","), apnusername, F("OK"), 10000)) - return false; - } - if (apnpassword) { - // Send command AT+SAPBR=3,1,"PWD","" where is the configured APN password. - if (! sendCheckReplyQuoted(F("AT+SAPBR=3,1,\"PWD\","), apnpassword, F("OK"), 10000)) - return false; - } - } - - // open GPRS context - if (! sendCheckReply(F("AT+SAPBR=1,1"), F("OK"), 10000)) - return false; - } else { - // disconnect all sockets - if (! sendCheckReply(F("AT+CIPSHUT"), F("SHUT OK"), 5000)) - return false; - - // close GPRS context - if (! sendCheckReply(F("AT+SAPBR=0,1"), F("OK"), 10000)) - return false; - - if (! sendCheckReply(F("AT+CGATT=0"), F("OK"), 10000)) - return false; - - } - return true; -} - -boolean Adafruit_FONA_3G::enableGPRS(boolean onoff) { - - if (onoff) { - // disconnect all sockets - //sendCheckReply(F("AT+CIPSHUT"), F("SHUT OK"), 5000); - - if (! sendCheckReply(F("AT+CGATT=1"), F("OK"), 10000)) - return false; - - - // set bearer profile access point name - if (apn) { - // Send command AT+CGSOCKCONT=1,"IP","" where is the configured APN name. - if (! sendCheckReplyQuoted(F("AT+CGSOCKCONT=1,\"IP\","), apn, F("OK"), 10000)) - return false; - - // set username/password - if (apnusername) { - char authstring[100] = "AT+CGAUTH=1,1,\""; - char *strp = authstring + strlen(authstring); - strcpy_P(strp, (prog_char *)apnusername); - strp+=strlen_P((prog_char *)apnusername); - strp[0] = '\"'; - strp++; - strp[0] = 0; - - if (apnpassword) { - strp[0] = ','; strp++; - strp[0] = '\"'; strp++; - strcpy_P(strp, (prog_char *)apnpassword); - strp+=strlen_P((prog_char *)apnpassword); - strp[0] = '\"'; - strp++; - strp[0] = 0; - } - - char sendOK[3] = "OK"; -// if (!sendCheckReply(authstring, "OK", 10000)) - if (!sendCheckReply(authstring, sendOK, 10000)) - return false; - } - } - - // connect in transparent - if (! sendCheckReply(F("AT+CIPMODE=1"), F("OK"), 10000)) - return false; - // open network (?) - if (! sendCheckReply(F("AT+NETOPEN=,,1"), F("Network opened"), 10000)) - return false; - - readline(); // eat 'OK' - } else { - // close GPRS context - if (! sendCheckReply(F("AT+NETCLOSE"), F("Network closed"), 10000)) - return false; - - readline(); // eat 'OK' - } - - return true; -} - -uint8_t Adafruit_FONA::GPRSstate(void) { - uint16_t state; - - if (! sendParseReply(F("AT+CGATT?"), F("+CGATT: "), &state) ) - return -1; - - return state; -} - -void Adafruit_FONA::setGPRSNetworkSettings(const __FlashStringHelper *apn, - const __FlashStringHelper *username, const __FlashStringHelper *password) { - this->apn = apn; - this->apnusername = username; - this->apnpassword = password; -} - -boolean Adafruit_FONA::getGSMLoc(uint16_t *errorcode, char *buff, uint16_t maxlen) { - - getReply(F("AT+CIPGSMLOC=1,1"), (uint16_t)10000); - - if (! parseReply(F("+CIPGSMLOC: "), errorcode)) - return false; - - char *p = replybuffer+14; - uint16_t lentocopy = min(maxlen-1, strlen(p)); - strncpy(buff, p, lentocopy+1); - - readline(); // eat OK - - return true; -} - -boolean Adafruit_FONA::getGSMLoc(float *lat, float *lon) { - - uint16_t returncode; - char gpsbuffer[120]; - - // make sure we could get a response - if (! getGSMLoc(&returncode, gpsbuffer, 120)) - return false; - - // make sure we have a valid return code - if (returncode != 0) - return false; - - // +CIPGSMLOC: 0,-74.007729,40.730160,2015/10/15,19:24:55 - // tokenize the gps buffer to locate the lat & long - char *longp = strtok(gpsbuffer, ","); - if (! longp) return false; - - char *latp = strtok(NULL, ","); - if (! latp) return false; - - *lat = atof(latp); - *lon = atof(longp); - - return true; - -} -/********* TCP FUNCTIONS ************************************/ - - -boolean Adafruit_FONA::TCPconnect(char *server, uint16_t port) { - flushInput(); - - // close all old connections - if (! sendCheckReply(F("AT+CIPSHUT"), F("SHUT OK"), 5000) ) return false; - - // single connection at a time - if (! sendCheckReply(F("AT+CIPMUX=0"), F("OK")) ) return false; - - // manually read data - if (! sendCheckReply(F("AT+CIPRXGET=1"), F("OK")) ) return false; - -#ifdef ADAFRUIT_FONA_DEBUG - Serial.print(F("AT+CIPSTART=\"TCP\",\"")); - Serial.print(server); - Serial.print(F("\",\"")); - Serial.print(port); - Serial.println(F("\"")); -#endif - - mySerial->print(F("AT+CIPSTART=\"TCP\",\"")); - mySerial->print(server); - mySerial->print(F("\",\"")); - mySerial->print(port); - mySerial->println(F("\"")); - - if (! expectReply(F("OK"))) return false; - return (expectReply(F("CONNECT OK"))); - -} - -boolean Adafruit_FONA::TCPclose(void) { - return sendCheckReply(F("AT+CIPCLOSE"), F("OK")); -} - -boolean Adafruit_FONA::TCPconnected(void) { - if (! sendCheckReply(F("AT+CIPSTATUS"), F("OK"), 100) ) return false; - readline(100); -#ifdef ADAFRUIT_FONA_DEBUG - Serial.print (F("\t<--- ")); Serial.println(replybuffer); -#endif - return (strcmp(replybuffer, "STATE: CONNECT OK") == 0); -} - -boolean Adafruit_FONA::TCPsend(char *packet, uint8_t len) { - -#ifdef ADAFRUIT_FONA_DEBUG - Serial.print(F("AT+CIPSEND=")); - Serial.println(len); - - for (uint16_t i=0; iprint(F("AT+CIPSEND=")); - mySerial->println(len); - readline(); -#ifdef ADAFRUIT_FONA_DEBUG - Serial.print (F("\t<--- ")); Serial.println(replybuffer); -#endif - if (replybuffer[0] != '>') return false; - - mySerial->write(packet, len); - readline(3000); // wait up to 3 seconds to send the data -#ifdef ADAFRUIT_FONA_DEBUG - Serial.print (F("\t<--- ")); Serial.println(replybuffer); -#endif - - return (strcmp(replybuffer, "SEND OK") == 0); -} - -uint16_t Adafruit_FONA::TCPavailable(void) { - uint16_t avail; - - if (! sendParseReply(F("AT+CIPRXGET=4"), F("+CIPRXGET: 4,"), &avail, ',', 0) ) return false; - -#ifdef ADAFRUIT_FONA_DEBUG - Serial.print (avail); Serial.println(F(" bytes available")); -#endif - - return avail; -} - - -uint16_t Adafruit_FONA::TCPread(uint8_t *buff, uint8_t len) { - uint16_t avail; - - mySerial->print(F("AT+CIPRXGET=2,")); - mySerial->println(len); - readline(); - if (! parseReply(F("+CIPRXGET: 2,"), &avail, ',', 0)) return false; - - readRaw(avail); - -#ifdef ADAFRUIT_FONA_DEBUG - Serial.print (avail); Serial.println(F(" bytes read")); - for (uint8_t i=0;i "); - Serial.print(F("AT+HTTPPARA=\"")); - Serial.print(parameter); - Serial.println('"'); -#endif - - mySerial->print(F("AT+HTTPPARA=\"")); - mySerial->print(parameter); - if (quoted) - mySerial->print(F("\",\"")); - else - mySerial->print(F("\",")); -} - -boolean Adafruit_FONA::HTTP_para_end(boolean quoted) { - if (quoted) - mySerial->println('"'); - else - mySerial->println(); - - return expectReply(F("OK")); -} - -boolean Adafruit_FONA::HTTP_para(const __FlashStringHelper *parameter, - const char *value) { - HTTP_para_start(parameter, true); - mySerial->print(value); - return HTTP_para_end(true); -} - -boolean Adafruit_FONA::HTTP_para(const __FlashStringHelper *parameter, - const __FlashStringHelper *value) { - HTTP_para_start(parameter, true); - mySerial->print(value); - return HTTP_para_end(true); -} - -boolean Adafruit_FONA::HTTP_para(const __FlashStringHelper *parameter, - int32_t value) { - HTTP_para_start(parameter, false); - mySerial->print(value); - return HTTP_para_end(false); -} - -boolean Adafruit_FONA::HTTP_data(uint32_t size, uint32_t maxTime) { - flushInput(); - -#ifdef ADAFRUIT_FONA_DEBUG - Serial.print("\t---> "); - Serial.print(F("AT+HTTPDATA=")); - Serial.print(size); - Serial.print(","); - Serial.println(maxTime); -#endif - - mySerial->print(F("AT+HTTPDATA=")); - mySerial->print(size); - mySerial->print(","); - mySerial->println(maxTime); - - return expectReply(F("DOWNLOAD")); -} - -boolean Adafruit_FONA::HTTP_action(uint8_t method, uint16_t *status, - uint16_t *datalen, int32_t timeout) { - // Send request. - if (! sendCheckReply(F("AT+HTTPACTION="), method, F("OK"))) - return false; - - // Parse response status and size. - readline(timeout); - if (! parseReply(F("+HTTPACTION:"), status, ',', 1)) - return false; - if (! parseReply(F("+HTTPACTION:"), datalen, ',', 2)) - return false; - - return true; -} - -boolean Adafruit_FONA::HTTP_readall(uint16_t *datalen) { - getReply(F("AT+HTTPREAD")); - if (! parseReply(F("+HTTPREAD:"), datalen, ',', 0)) - return false; - - return true; -} - -boolean Adafruit_FONA::HTTP_ssl(boolean onoff) { - return sendCheckReply(F("AT+HTTPSSL="), onoff ? 1 : 0, F("OK")); -} - -/********* HTTP HIGH LEVEL FUNCTIONS ***************************/ - -boolean Adafruit_FONA::HTTP_GET_start(char *url, - uint16_t *status, uint16_t *datalen){ - if (! HTTP_setup(url)) - return false; - - // HTTP GET - if (! HTTP_action(FONA_HTTP_GET, status, datalen)) - return false; - - Serial.print("Status: "); Serial.println(*status); - Serial.print("Len: "); Serial.println(*datalen); - - // HTTP response data - if (! HTTP_readall(datalen)) - return false; - - return true; -} - -/* -boolean Adafruit_FONA_3G::HTTP_GET_start(char *ipaddr, char *path, uint16_t port - uint16_t *status, uint16_t *datalen){ - char send[100] = "AT+CHTTPACT=\""; - char *sendp = send + strlen(send); - memset(sendp, 0, 100 - strlen(send)); - - strcpy(sendp, ipaddr); - sendp+=strlen(ipaddr); - sendp[0] = '\"'; - sendp++; - sendp[0] = ','; - itoa(sendp, port); - getReply(send, 500); - - return; - - if (! HTTP_setup(url)) - - return false; - - // HTTP GET - if (! HTTP_action(FONA_HTTP_GET, status, datalen)) - return false; - - Serial.print("Status: "); Serial.println(*status); - Serial.print("Len: "); Serial.println(*datalen); - - // HTTP response data - if (! HTTP_readall(datalen)) - return false; - - return true; -} -*/ - -void Adafruit_FONA::HTTP_GET_end(void) { - HTTP_term(); -} - -boolean Adafruit_FONA::HTTP_POST_start(char *url, - const __FlashStringHelper *contenttype, - const uint8_t *postdata, uint16_t postdatalen, - uint16_t *status, uint16_t *datalen){ - if (! HTTP_setup(url)) - return false; - - if (! HTTP_para(F("CONTENT"), contenttype)) { - return false; - } - - // HTTP POST data - if (! HTTP_data(postdatalen, 10000)) - return false; - mySerial->write(postdata, postdatalen); - if (! expectReply(F("OK"))) - return false; - - // HTTP POST - if (! HTTP_action(FONA_HTTP_POST, status, datalen)) - return false; - - Serial.print("Status: "); Serial.println(*status); - Serial.print("Len: "); Serial.println(*datalen); - - // HTTP response data - if (! HTTP_readall(datalen)) - return false; - - return true; -} - -void Adafruit_FONA::HTTP_POST_end(void) { - HTTP_term(); -} - -void Adafruit_FONA::setUserAgent(const __FlashStringHelper *useragent) { - this->useragent = useragent; -} - -void Adafruit_FONA::setHTTPSRedirect(boolean onoff) { - httpsredirect = onoff; -} - -/********* HTTP HELPERS ****************************************/ - -boolean Adafruit_FONA::HTTP_setup(char *url) { - // Handle any pending - HTTP_term(); - - // Initialize and set parameters - if (! HTTP_init()) - return false; - if (! HTTP_para(F("CID"), 1)) - return false; - if (! HTTP_para(F("UA"), useragent)) - return false; - if (! HTTP_para(F("URL"), url)) - return false; - - // HTTPS redirect - if (httpsredirect) { - if (! HTTP_para(F("REDIR"),1)) - return false; - - if (! HTTP_ssl(true)) - return false; - } - - return true; -} - -/********* HELPERS *********************************************/ - -boolean Adafruit_FONA::expectReply(const __FlashStringHelper *reply, - uint16_t timeout) { - readline(timeout); -#ifdef ADAFRUIT_FONA_DEBUG - Serial.print(F("\t<--- ")); Serial.println(replybuffer); -#endif - return (strcmp_P(replybuffer, (prog_char*)reply) == 0); -} - -/********* LOW LEVEL *******************************************/ - -inline int Adafruit_FONA::available(void) { - return mySerial->available(); -} - -inline size_t Adafruit_FONA::write(uint8_t x) { - return mySerial->write(x); -} - -inline int Adafruit_FONA::read(void) { - return mySerial->read(); -} - -inline int Adafruit_FONA::peek(void) { - return mySerial->peek(); -} - -inline void Adafruit_FONA::flush() { - mySerial->flush(); -} - -void Adafruit_FONA::flushInput() { - // Read all available serial input to flush pending data. - uint16_t timeoutloop = 0; - while (timeoutloop++ < 40) { - while(available()) { - read(); - timeoutloop = 0; // If char was received reset the timer - } - delay(1); - } -} - -uint16_t Adafruit_FONA::readRaw(uint16_t b) { - uint16_t idx = 0; - - while (b && (idx < sizeof(replybuffer)-1)) { - if (mySerial->available()) { - replybuffer[idx] = mySerial->read(); - idx++; - b--; - } - } - replybuffer[idx] = 0; - - return idx; -} - -uint8_t Adafruit_FONA::readline(uint16_t timeout, boolean multiline) { - uint16_t replyidx = 0; - - while (timeout--) { - if (replyidx >= 254) { - //Serial.println(F("SPACE")); - break; - } - - while(mySerial->available()) { - char c = mySerial->read(); - if (c == '\r') continue; - if (c == 0xA) { - if (replyidx == 0) // the first 0x0A is ignored - continue; - - if (!multiline) { - timeout = 0; // the second 0x0A is the end of the line - break; - } - } - replybuffer[replyidx] = c; - //Serial.print(c, HEX); Serial.print("#"); Serial.println(c); - replyidx++; - } - - if (timeout == 0) { - //Serial.println(F("TIMEOUT")); - break; - } - delay(1); - } - replybuffer[replyidx] = 0; // null term - return replyidx; -} - -uint8_t Adafruit_FONA::getReply(char *send, uint16_t timeout) { - flushInput(); - -#ifdef ADAFRUIT_FONA_DEBUG - Serial.print("\t---> "); Serial.println(send); -#endif - - mySerial->println(send); - - uint8_t l = readline(timeout); -#ifdef ADAFRUIT_FONA_DEBUG - Serial.print (F("\t<--- ")); Serial.println(replybuffer); -#endif - return l; -} - -uint8_t Adafruit_FONA::getReply(const __FlashStringHelper *send, uint16_t timeout) { - flushInput(); - -#ifdef ADAFRUIT_FONA_DEBUG - Serial.print("\t---> "); Serial.println(send); -#endif - - mySerial->println(send); - - uint8_t l = readline(timeout); -#ifdef ADAFRUIT_FONA_DEBUG - Serial.print (F("\t<--- ")); Serial.println(replybuffer); -#endif - return l; -} - -// Send prefix, suffix, and newline. Return response (and also set replybuffer with response). -uint8_t Adafruit_FONA::getReply(const __FlashStringHelper *prefix, char *suffix, uint16_t timeout) { - flushInput(); - -#ifdef ADAFRUIT_FONA_DEBUG - Serial.print("\t---> "); Serial.print(prefix); Serial.println(suffix); -#endif - - mySerial->print(prefix); - mySerial->println(suffix); - - uint8_t l = readline(timeout); -#ifdef ADAFRUIT_FONA_DEBUG - Serial.print (F("\t<--- ")); Serial.println(replybuffer); -#endif - return l; -} - -// Send prefix, suffix, and newline. Return response (and also set replybuffer with response). -uint8_t Adafruit_FONA::getReply(const __FlashStringHelper *prefix, int32_t suffix, uint16_t timeout) { - flushInput(); - -#ifdef ADAFRUIT_FONA_DEBUG - Serial.print("\t---> "); Serial.print(prefix); Serial.println(suffix, DEC); -#endif - - mySerial->print(prefix); - mySerial->println(suffix, DEC); - - uint8_t l = readline(timeout); -#ifdef ADAFRUIT_FONA_DEBUG - Serial.print (F("\t<--- ")); Serial.println(replybuffer); -#endif - return l; -} - -// Send prefix, suffix, suffix2, and newline. Return response (and also set replybuffer with response). -uint8_t Adafruit_FONA::getReply(const __FlashStringHelper *prefix, int32_t suffix1, int32_t suffix2, uint16_t timeout) { - flushInput(); - -#ifdef ADAFRUIT_FONA_DEBUG - Serial.print("\t---> "); Serial.print(prefix); - Serial.print(suffix1, DEC); Serial.print(","); Serial.println(suffix2, DEC); -#endif - - mySerial->print(prefix); - mySerial->print(suffix1); - mySerial->print(','); - mySerial->println(suffix2, DEC); - - uint8_t l = readline(timeout); -#ifdef ADAFRUIT_FONA_DEBUG - Serial.print (F("\t<--- ")); Serial.println(replybuffer); -#endif - return l; -} - -// Send prefix, ", suffix, ", and newline. Return response (and also set replybuffer with response). -uint8_t Adafruit_FONA::getReplyQuoted(const __FlashStringHelper *prefix, const __FlashStringHelper *suffix, uint16_t timeout) { - flushInput(); - -#ifdef ADAFRUIT_FONA_DEBUG - Serial.print("\t---> "); Serial.print(prefix); - Serial.print('"'); Serial.print(suffix); Serial.println('"'); -#endif - - mySerial->print(prefix); - mySerial->print('"'); - mySerial->print(suffix); - mySerial->println('"'); - - uint8_t l = readline(timeout); -#ifdef ADAFRUIT_FONA_DEBUG - Serial.print (F("\t<--- ")); Serial.println(replybuffer); -#endif - return l; -} - -boolean Adafruit_FONA::sendCheckReply(char *send, char *reply, uint16_t timeout) { - getReply(send, timeout); - -/* - for (uint8_t i=0; i http://www.adafruit.com/products/1946 - ----> http://www.adafruit.com/products/1963 - - These displays use TTL Serial to communicate, 2 pins are required to - interface - Adafruit invests time and resources providing this open source code, - please support Adafruit and open-source hardware by purchasing - products from Adafruit! - - Written by Limor Fried/Ladyada for Adafruit Industries. - BSD license, all text above must be included in any redistribution - ****************************************************/ -#ifndef ADAFRUIT_FONA_H -#define ADAFRUIT_FONA_H - -#if (ARDUINO >= 100) - #include "Arduino.h" - #ifndef __SAM3X8E__ // Arduino Due doesn't support SoftwareSerial - #include - #endif -#else - #include "WProgram.h" - #include -#endif - -#define ADAFRUIT_FONA_DEBUG - -#define FONA800L 1 -#define FONA800H 6 - -#define FONA808_V1 2 -#define FONA808_V2 3 - -#define FONA3G_A 4 -#define FONA3G_E 5 - - -#define FONA_HEADSETAUDIO 0 -#define FONA_EXTAUDIO 1 - -#define FONA_STTONE_DIALTONE 1 -#define FONA_STTONE_BUSY 2 -#define FONA_STTONE_CONGESTION 3 -#define FONA_STTONE_PATHACK 4 -#define FONA_STTONE_DROPPED 5 -#define FONA_STTONE_ERROR 6 -#define FONA_STTONE_CALLWAIT 7 -#define FONA_STTONE_RINGING 8 -#define FONA_STTONE_BEEP 16 -#define FONA_STTONE_POSTONE 17 -#define FONA_STTONE_ERRTONE 18 -#define FONA_STTONE_INDIANDIALTONE 19 -#define FONA_STTONE_USADIALTONE 20 - -#define FONA_DEFAULT_TIMEOUT_MS 500 - -#define FONA_HTTP_GET 0 -#define FONA_HTTP_POST 1 -#define FONA_HTTP_HEAD 2 - -class Adafruit_FONA : public Stream { - public: - Adafruit_FONA(int8_t r); - boolean begin(Stream &port); - uint8_t type(); - - // Stream - int available(void); - size_t write(uint8_t x); - int read(void); - int peek(void); - void flush(); - - // FONA 3G requirements - boolean setBaudrate(uint16_t baud); - - // RTC - boolean enableRTC(uint8_t i); - boolean readRTC(uint8_t *year, uint8_t *month, uint8_t *date, uint8_t *hr, uint8_t *min, uint8_t *sec); - - // Battery and ADC - boolean getADCVoltage(uint16_t *v); - boolean getBattPercent(uint16_t *p); - boolean getBattVoltage(uint16_t *v); - - // SIM query - uint8_t unlockSIM(char *pin); - uint8_t getSIMCCID(char *ccid); - uint8_t getNetworkStatus(void); - uint8_t getRSSI(void); - - // IMEI - uint8_t getIMEI(char *imei); - - // set Audio output - boolean setAudio(uint8_t a); - boolean setVolume(uint8_t i); - uint8_t getVolume(void); - boolean playToolkitTone(uint8_t t, uint16_t len); - boolean setMicVolume(uint8_t a, uint8_t level); - boolean playDTMF(char tone); - - // FM radio functions. - boolean tuneFMradio(uint16_t station); - boolean FMradio(boolean onoff, uint8_t a = FONA_HEADSETAUDIO); - boolean setFMVolume(uint8_t i); - int8_t getFMVolume(); - int8_t getFMSignalLevel(uint16_t station); - - // SMS handling - boolean setSMSInterrupt(uint8_t i); - uint8_t getSMSInterrupt(void); - int8_t getNumSMS(void); - boolean readSMS(uint8_t i, char *smsbuff, uint16_t max, uint16_t *readsize); - boolean sendSMS(char *smsaddr, char *smsmsg); - boolean deleteSMS(uint8_t i); - boolean getSMSSender(uint8_t i, char *sender, int senderlen); - - // Time - boolean enableNetworkTimeSync(boolean onoff); - boolean enableNTPTimeSync(boolean onoff, const __FlashStringHelper *ntpserver=0); - boolean getTime(char *buff, uint16_t maxlen); - - // GPRS handling - boolean enableGPRS(boolean onoff); - uint8_t GPRSstate(void); - boolean getGSMLoc(uint16_t *replycode, char *buff, uint16_t maxlen); - boolean getGSMLoc(float *lat, float *lon); - void setGPRSNetworkSettings(const __FlashStringHelper *apn, const __FlashStringHelper *username=0, const __FlashStringHelper *password=0); - - // GPS handling - boolean enableGPS(boolean onoff); - int8_t GPSstatus(void); - uint8_t getGPS(uint8_t arg, char *buffer, uint8_t maxbuff); - boolean getGPS(float *lat, float *lon, float *speed_kph=0, float *heading=0, float *altitude=0); - boolean enableGPSNMEA(uint8_t nmea); - - // TCP raw connections - boolean TCPconnect(char *server, uint16_t port); - boolean TCPclose(void); - boolean TCPconnected(void); - boolean TCPsend(char *packet, uint8_t len); - uint16_t TCPavailable(void); - uint16_t TCPread(uint8_t *buff, uint8_t len); - - // HTTP low level interface (maps directly to SIM800 commands). - boolean HTTP_init(); - boolean HTTP_term(); - void HTTP_para_start(const __FlashStringHelper *parameter, boolean quoted = true); - boolean HTTP_para_end(boolean quoted = true); - boolean HTTP_para(const __FlashStringHelper *parameter, const char *value); - boolean HTTP_para(const __FlashStringHelper *parameter, const __FlashStringHelper *value); - boolean HTTP_para(const __FlashStringHelper *parameter, int32_t value); - boolean HTTP_data(uint32_t size, uint32_t maxTime=10000); - boolean HTTP_action(uint8_t method, uint16_t *status, uint16_t *datalen, int32_t timeout = 10000); - boolean HTTP_readall(uint16_t *datalen); - boolean HTTP_ssl(boolean onoff); - - // HTTP high level interface (easier to use, less flexible). - boolean HTTP_GET_start(char *url, uint16_t *status, uint16_t *datalen); - void HTTP_GET_end(void); - boolean HTTP_POST_start(char *url, const __FlashStringHelper *contenttype, const uint8_t *postdata, uint16_t postdatalen, uint16_t *status, uint16_t *datalen); - void HTTP_POST_end(void); - void setUserAgent(const __FlashStringHelper *useragent); - - // HTTPS - void setHTTPSRedirect(boolean onoff); - - // PWM (buzzer) - boolean setPWM(uint16_t period, uint8_t duty = 50); - - // Phone calls - boolean callPhone(char *phonenum); - boolean hangUp(void); - boolean pickUp(void); - boolean callerIdNotification(boolean enable, uint8_t interrupt = 0); - boolean incomingCallNumber(char* phonenum); - - // Helper functions to verify responses. - boolean expectReply(const __FlashStringHelper *reply, uint16_t timeout = 10000); - boolean sendCheckReply(char *send, char *reply, uint16_t timeout = FONA_DEFAULT_TIMEOUT_MS); - boolean sendCheckReply(const __FlashStringHelper *send, const __FlashStringHelper *reply, uint16_t timeout = FONA_DEFAULT_TIMEOUT_MS); - - - protected: - int8_t _rstpin; - uint8_t _type; - - char replybuffer[255]; - const __FlashStringHelper *apn; - const __FlashStringHelper *apnusername; - const __FlashStringHelper *apnpassword; - boolean httpsredirect; - const __FlashStringHelper *useragent; - - // HTTP helpers - boolean HTTP_setup(char *url); - - void flushInput(); - uint16_t readRaw(uint16_t b); - uint8_t readline(uint16_t timeout = FONA_DEFAULT_TIMEOUT_MS, boolean multiline = false); - uint8_t getReply(char *send, uint16_t timeout = FONA_DEFAULT_TIMEOUT_MS); - uint8_t getReply(const __FlashStringHelper *send, uint16_t timeout = FONA_DEFAULT_TIMEOUT_MS); - uint8_t getReply(const __FlashStringHelper *prefix, char *suffix, uint16_t timeout = FONA_DEFAULT_TIMEOUT_MS); - uint8_t getReply(const __FlashStringHelper *prefix, int32_t suffix, uint16_t timeout = FONA_DEFAULT_TIMEOUT_MS); - uint8_t getReply(const __FlashStringHelper *prefix, int32_t suffix1, int32_t suffix2, uint16_t timeout); // Don't set default value or else function call is ambiguous. - uint8_t getReplyQuoted(const __FlashStringHelper *prefix, const __FlashStringHelper *suffix, uint16_t timeout = FONA_DEFAULT_TIMEOUT_MS); - - boolean sendCheckReply(const __FlashStringHelper *prefix, char *suffix, const __FlashStringHelper *reply, uint16_t timeout = FONA_DEFAULT_TIMEOUT_MS); - boolean sendCheckReply(const __FlashStringHelper *prefix, int32_t suffix, const __FlashStringHelper *reply, uint16_t timeout = FONA_DEFAULT_TIMEOUT_MS); - boolean sendCheckReply(const __FlashStringHelper *prefix, int32_t suffix, int32_t suffix2, const __FlashStringHelper *reply, uint16_t timeout = FONA_DEFAULT_TIMEOUT_MS); - boolean sendCheckReplyQuoted(const __FlashStringHelper *prefix, const __FlashStringHelper *suffix, const __FlashStringHelper *reply, uint16_t timeout = FONA_DEFAULT_TIMEOUT_MS); - - - boolean parseReply(const __FlashStringHelper *toreply, - uint16_t *v, char divider = ',', uint8_t index=0); - boolean parseReply(const __FlashStringHelper *toreply, - char *v, char divider = ',', uint8_t index=0); - boolean parseReplyQuoted(const __FlashStringHelper *toreply, - char *v, int maxlen, char divider, uint8_t index); - - boolean sendParseReply(const __FlashStringHelper *tosend, - const __FlashStringHelper *toreply, - uint16_t *v, char divider = ',', uint8_t index=0); - - static boolean _incomingCall; - static void onIncomingCall(); - - Stream *mySerial; -}; - -class Adafruit_FONA_3G : public Adafruit_FONA { - - public: - Adafruit_FONA_3G (int8_t r) : Adafruit_FONA(r) { _type = FONA3G_A; } - - boolean getBattVoltage(uint16_t *v); - boolean playToolkitTone(uint8_t t, uint16_t len); - boolean hangUp(void); - boolean pickUp(void); - boolean enableGPRS(boolean onoff); - boolean enableGPS(boolean onoff); - - protected: - boolean parseReply(const __FlashStringHelper *toreply, - float *f, char divider, uint8_t index); - - boolean sendParseReply(const __FlashStringHelper *tosend, - const __FlashStringHelper *toreply, - float *f, char divider = ',', uint8_t index=0); -}; - -#endif diff --git a/libraries/Adafruit_FONA_Library/README.md b/libraries/Adafruit_FONA_Library/README.md deleted file mode 100644 index 73452ca..0000000 --- a/libraries/Adafruit_FONA_Library/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# Adafruit FONA Library [![Build Status](https://secure.travis-ci.org/adafruit/Adafruit_FONA_Library.svg?branch=master)](https://travis-ci.org/adafruit/Adafruit_FONA_Library) - -**This library requires Arduino v1.0.6 or higher** - -This is a library for the Adafruit FONA Cellular GSM Breakouts etc - -Designed specifically to work with the Adafruit FONA Breakout - * https://www.adafruit.com/products/1946 - * https://www.adafruit.com/products/1963 - * http://www.adafruit.com/products/2468 - * http://www.adafruit.com/products/2542 - -These modules use TTL Serial to communicate, 2 pins are required to interface - -Adafruit invests time and resources providing this open source code, -please support Adafruit and open-source hardware by purchasing -products from Adafruit! - -Check out the links above for our tutorials and wiring diagrams - -Written by Limor Fried/Ladyada for Adafruit Industries. -BSD license, all text above must be included in any redistribution -With updates from Samy Kamkar - -To download. click the DOWNLOADS button in the top right corner, rename the uncompressed folder Adafruit_FONA -Check that the Adafruit_FONA folder contains Adafruit_FONA.cpp and Adafruit_FONA.h - -Place the Adafruit_FONA library folder your *arduinosketchfolder*/libraries/ folder. -You may need to create the libraries subfolder if its your first library. Restart the IDE. diff --git a/libraries/Adafruit_FONA_Library/examples/FONA3G_setbaud/.esp8266.test.skip b/libraries/Adafruit_FONA_Library/examples/FONA3G_setbaud/.esp8266.test.skip deleted file mode 100644 index e69de29..0000000 diff --git a/libraries/Adafruit_FONA_Library/examples/FONA3G_setbaud/FONA3G_setbaud.ino b/libraries/Adafruit_FONA_Library/examples/FONA3G_setbaud/FONA3G_setbaud.ino deleted file mode 100644 index b0be4c5..0000000 --- a/libraries/Adafruit_FONA_Library/examples/FONA3G_setbaud/FONA3G_setbaud.ino +++ /dev/null @@ -1,77 +0,0 @@ -/*************************************************** - This is an example for our Adafruit FONA Cellular Module - since the FONA 3G does not do auto-baud very well, this demo - fixes the baud rate to 4800 from the default 115200 - - Designed specifically to work with the Adafruit FONA 3G - ----> http://www.adafruit.com/products/2691 - ----> http://www.adafruit.com/products/2687 - - These cellular modules use TTL Serial to communicate, 2 pins are - required to interface - Adafruit invests time and resources providing this open source code, - please support Adafruit and open-source hardware by purchasing - products from Adafruit! - - Written by Limor Fried/Ladyada for Adafruit Industries. - BSD license, all text above must be included in any redistribution - ****************************************************/ - -#include "Adafruit_FONA.h" - -#define FONA_RX 2 -#define FONA_TX 3 -#define FONA_RST 4 - -// this is a large buffer for replies -char replybuffer[255]; - -// We default to using software serial. If you want to use hardware serial -// (because softserial isnt supported) comment out the following three lines -// and uncomment the HardwareSerial line -#include -SoftwareSerial fonaSS = SoftwareSerial(FONA_TX, FONA_RX); -SoftwareSerial *fonaSerial = &fonaSS; - -// Hardware serial is also possible! -// HardwareSerial *fonaSerial = &Serial1; - -Adafruit_FONA fona = Adafruit_FONA(FONA_RST); - -uint8_t readline(char *buff, uint8_t maxbuff, uint16_t timeout = 0); - -void setup() { - while (!Serial); - - Serial.begin(115200); - Serial.println(F("FONA set baudrate")); - - Serial.println(F("First trying 115200 baud")); - // start at 115200 baud - fonaSerial->begin(115200); - fona.begin(*fonaSerial); - - // send the command to reset the baud rate to 4800 - fona.setBaudrate(4800); - - // restart with 4800 baud - fonaSerial->begin(4800); - Serial.println(F("Initializing @ 4800 baud...")); - - if (! fona.begin(*fonaSerial)) { - Serial.println(F("Couldn't find FONA")); - while(1); - } - Serial.println(F("FONA is OK")); - - // Print module IMEI number. - char imei[15] = {0}; // MUST use a 16 character buffer for IMEI! - uint8_t imeiLen = fona.getIMEI(imei); - if (imeiLen > 0) { - Serial.print("Module IMEI: "); Serial.println(imei); - } - -} - -void loop() { -} \ No newline at end of file diff --git a/libraries/Adafruit_FONA_Library/examples/FONA_SMS_Response/.esp8266.test.skip b/libraries/Adafruit_FONA_Library/examples/FONA_SMS_Response/.esp8266.test.skip deleted file mode 100644 index e69de29..0000000 diff --git a/libraries/Adafruit_FONA_Library/examples/FONA_SMS_Response/FONA_SMS_Response.ino b/libraries/Adafruit_FONA_Library/examples/FONA_SMS_Response/FONA_SMS_Response.ino deleted file mode 100644 index f1bcf66..0000000 --- a/libraries/Adafruit_FONA_Library/examples/FONA_SMS_Response/FONA_SMS_Response.ino +++ /dev/null @@ -1,122 +0,0 @@ -/*************************************************** - This is an example for our Adafruit FONA Cellular Module - - Designed specifically to work with the Adafruit FONA - ----> http://www.adafruit.com/products/1946 - ----> http://www.adafruit.com/products/1963 - ----> http://www.adafruit.com/products/2468 - ----> http://www.adafruit.com/products/2542 - - These cellular modules use TTL Serial to communicate, 2 pins are - required to interface - Adafruit invests time and resources providing this open source code, - please support Adafruit and open-source hardware by purchasing - products from Adafruit! - - Written by Limor Fried/Ladyada for Adafruit Industries. - BSD license, all text above must be included in any redistribution - ****************************************************/ - -/* -THIS CODE IS STILL IN PROGRESS! - -Open up the serial console on the Arduino at 115200 baud to interact with FONA - - -This code will receive an SMS, identify the sender's phone number, and automatically send a response - -*/ - -#include "Adafruit_FONA.h" - -#define FONA_RX 2 -#define FONA_TX 3 -#define FONA_RST 4 - -// this is a large buffer for replies -char replybuffer[255]; - -// We default to using software serial. If you want to use hardware serial -// (because softserial isnt supported) comment out the following three lines -// and uncomment the HardwareSerial line -#include -SoftwareSerial fonaSS = SoftwareSerial(FONA_TX, FONA_RX); -SoftwareSerial *fonaSerial = &fonaSS; - -// Hardware serial is also possible! -// HardwareSerial *fonaSerial = &Serial1; - -Adafruit_FONA fona = Adafruit_FONA(FONA_RST); - -uint8_t readline(char *buff, uint8_t maxbuff, uint16_t timeout = 0); - -void setup() { - while (!Serial); - - Serial.begin(115200); - Serial.println(F("FONA SMS caller ID test")); - Serial.println(F("Initializing....(May take 3 seconds)")); - - // make it slow so its easy to read! - fonaSerial->begin(4800); - if (! fona.begin(*fonaSerial)) { - Serial.println(F("Couldn't find FONA")); - while(1); - } - Serial.println(F("FONA is OK")); - - // Print SIM card IMEI number. - char imei[15] = {0}; // MUST use a 16 character buffer for IMEI! - uint8_t imeiLen = fona.getIMEI(imei); - if (imeiLen > 0) { - Serial.print("SIM card IMEI: "); Serial.println(imei); - } - - Serial.println("FONA Ready"); -} - - -char fonaInBuffer[64]; //for notifications from the FONA - -void loop() { - - char* bufPtr = fonaInBuffer; //handy buffer pointer - - if (fona.available()) //any data available from the FONA? - { - int slot = 0; //this will be the slot number of the SMS - int charCount = 0; - //Read the notification into fonaInBuffer - do { - *bufPtr = fona.read(); - Serial.write(*bufPtr); - delay(1); - } while ((*bufPtr++ != '\n') && (fona.available()) && (++charCount < (sizeof(fonaInBuffer)-1))); - - //Add a terminal NULL to the notification string - *bufPtr = 0; - - //Scan the notification string for an SMS received notification. - // If it's an SMS message, we'll get the slot number in 'slot' - if (1 == sscanf(fonaInBuffer, "+CMTI: \"SM\",%d", &slot)) { - Serial.print("slot: "); Serial.println(slot); - - char callerIDbuffer[32]; //we'll store the SMS sender number in here - - // Retrieve SMS sender address/phone number. - if (! fona.getSMSSender(slot, callerIDbuffer, 31)) { - Serial.println("Didn't find SMS message in slot!"); - } - Serial.print(F("FROM: ")); Serial.println(callerIDbuffer); - - //Send back an automatic response - Serial.println("Sending reponse..."); - if (!fona.sendSMS(callerIDbuffer, "Hey, I got your text!")) { - Serial.println(F("Failed")); - } else { - Serial.println(F("Sent!")); - } - - } - } -} diff --git a/libraries/Adafruit_FONA_Library/examples/FONAtest/.esp8266.test.skip b/libraries/Adafruit_FONA_Library/examples/FONAtest/.esp8266.test.skip deleted file mode 100644 index e69de29..0000000 diff --git a/libraries/Adafruit_FONA_Library/examples/FONAtest/FONAtest.ino b/libraries/Adafruit_FONA_Library/examples/FONAtest/FONAtest.ino deleted file mode 100644 index fea4f9e..0000000 --- a/libraries/Adafruit_FONA_Library/examples/FONAtest/FONAtest.ino +++ /dev/null @@ -1,851 +0,0 @@ -/*************************************************** - This is an example for our Adafruit FONA Cellular Module - - Designed specifically to work with the Adafruit FONA - ----> http://www.adafruit.com/products/1946 - ----> http://www.adafruit.com/products/1963 - ----> http://www.adafruit.com/products/2468 - ----> http://www.adafruit.com/products/2542 - - These cellular modules use TTL Serial to communicate, 2 pins are - required to interface - Adafruit invests time and resources providing this open source code, - please support Adafruit and open-source hardware by purchasing - products from Adafruit! - - Written by Limor Fried/Ladyada for Adafruit Industries. - BSD license, all text above must be included in any redistribution - ****************************************************/ - -/* -THIS CODE IS STILL IN PROGRESS! - -Open up the serial console on the Arduino at 115200 baud to interact with FONA - -Note that if you need to set a GPRS APN, username, and password scroll down to -the commented section below at the end of the setup() function. -*/ -#include "Adafruit_FONA.h" - -#define FONA_RX 2 -#define FONA_TX 3 -#define FONA_RST 4 - -// this is a large buffer for replies -char replybuffer[255]; - -// We default to using software serial. If you want to use hardware serial -// (because softserial isnt supported) comment out the following three lines -// and uncomment the HardwareSerial line -#include -SoftwareSerial fonaSS = SoftwareSerial(FONA_TX, FONA_RX); -SoftwareSerial *fonaSerial = &fonaSS; - -// Hardware serial is also possible! -// HardwareSerial *fonaSerial = &Serial1; - -// Use this for FONA 800 and 808s -Adafruit_FONA fona = Adafruit_FONA(FONA_RST); -// Use this one for FONA 3G -//Adafruit_FONA_3G fona = Adafruit_FONA_3G(FONA_RST); - -uint8_t readline(char *buff, uint8_t maxbuff, uint16_t timeout = 0); - -uint8_t type; - -void setup() { - while (!Serial); - - Serial.begin(115200); - Serial.println(F("FONA basic test")); - Serial.println(F("Initializing....(May take 3 seconds)")); - - fonaSerial->begin(4800); - if (! fona.begin(*fonaSerial)) { - Serial.println(F("Couldn't find FONA")); - while (1); - } - type = fona.type(); - Serial.println(F("FONA is OK")); - Serial.print(F("Found ")); - switch (type) { - case FONA800L: - Serial.println(F("FONA 800L")); break; - case FONA800H: - Serial.println(F("FONA 800H")); break; - case FONA808_V1: - Serial.println(F("FONA 808 (v1)")); break; - case FONA808_V2: - Serial.println(F("FONA 808 (v2)")); break; - case FONA3G_A: - Serial.println(F("FONA 3G (American)")); break; - case FONA3G_E: - Serial.println(F("FONA 3G (European)")); break; - default: - Serial.println(F("???")); break; - } - - // Print module IMEI number. - char imei[15] = {0}; // MUST use a 16 character buffer for IMEI! - uint8_t imeiLen = fona.getIMEI(imei); - if (imeiLen > 0) { - Serial.print("Module IMEI: "); Serial.println(imei); - } - - // Optionally configure a GPRS APN, username, and password. - // You might need to do this to access your network's GPRS/data - // network. Contact your provider for the exact APN, username, - // and password values. Username and password are optional and - // can be removed, but APN is required. - //fona.setGPRSNetworkSettings(F("your APN"), F("your username"), F("your password")); - - // Optionally configure HTTP gets to follow redirects over SSL. - // Default is not to follow SSL redirects, however if you uncomment - // the following line then redirects over SSL will be followed. - //fona.setHTTPSRedirect(true); - - printMenu(); -} - -void printMenu(void) { - Serial.println(F("-------------------------------------")); - Serial.println(F("[?] Print this menu")); - Serial.println(F("[a] read the ADC 2.8V max (FONA800 & 808)")); - Serial.println(F("[b] read the Battery V and % charged")); - Serial.println(F("[C] read the SIM CCID")); - Serial.println(F("[U] Unlock SIM with PIN code")); - Serial.println(F("[i] read RSSI")); - Serial.println(F("[n] get Network status")); - Serial.println(F("[v] set audio Volume")); - Serial.println(F("[V] get Volume")); - Serial.println(F("[H] set Headphone audio (FONA800 & 808)")); - Serial.println(F("[e] set External audio (FONA800 & 808)")); - Serial.println(F("[T] play audio Tone")); - Serial.println(F("[P] PWM/Buzzer out (FONA800 & 808)")); - - // FM (SIM800 only!) - Serial.println(F("[f] tune FM radio (FONA800)")); - Serial.println(F("[F] turn off FM (FONA800)")); - Serial.println(F("[m] set FM volume (FONA800)")); - Serial.println(F("[M] get FM volume (FONA800)")); - Serial.println(F("[q] get FM station signal level (FONA800)")); - - // Phone - Serial.println(F("[c] make phone Call")); - Serial.println(F("[h] Hang up phone")); - Serial.println(F("[p] Pick up phone")); - - // SMS - Serial.println(F("[N] Number of SMSs")); - Serial.println(F("[r] Read SMS #")); - Serial.println(F("[R] Read All SMS")); - Serial.println(F("[d] Delete SMS #")); - Serial.println(F("[s] Send SMS")); - - // Time - Serial.println(F("[y] Enable network time sync (FONA 800 & 808)")); - Serial.println(F("[Y] Enable NTP time sync (GPRS FONA 800 & 808)")); - Serial.println(F("[t] Get network time")); - - // GPRS - Serial.println(F("[G] Enable GPRS")); - Serial.println(F("[g] Disable GPRS")); - Serial.println(F("[l] Query GSMLOC (GPRS)")); - Serial.println(F("[w] Read webpage (GPRS)")); - Serial.println(F("[W] Post to website (GPRS)")); - - // GPS - if ((type == FONA3G_A) || (type == FONA3G_E) || (type == FONA808_V1) || (type == FONA808_V2)) { - Serial.println(F("[O] Turn GPS on (FONA 808 & 3G)")); - Serial.println(F("[o] Turn GPS off (FONA 808 & 3G)")); - Serial.println(F("[L] Query GPS location (FONA 808 & 3G)")); - if (type == FONA808_V1) { - Serial.println(F("[x] GPS fix status (FONA808 v1 only)")); - } - Serial.println(F("[E] Raw NMEA out (FONA808)")); - } - - Serial.println(F("[S] create Serial passthru tunnel")); - Serial.println(F("-------------------------------------")); - Serial.println(F("")); - -} -void loop() { - Serial.print(F("FONA> ")); - while (! Serial.available() ) { - if (fona.available()) { - Serial.write(fona.read()); - } - } - - char command = Serial.read(); - Serial.println(command); - - - switch (command) { - case '?': { - printMenu(); - break; - } - - case 'a': { - // read the ADC - uint16_t adc; - if (! fona.getADCVoltage(&adc)) { - Serial.println(F("Failed to read ADC")); - } else { - Serial.print(F("ADC = ")); Serial.print(adc); Serial.println(F(" mV")); - } - break; - } - - case 'b': { - // read the battery voltage and percentage - uint16_t vbat; - if (! fona.getBattVoltage(&vbat)) { - Serial.println(F("Failed to read Batt")); - } else { - Serial.print(F("VBat = ")); Serial.print(vbat); Serial.println(F(" mV")); - } - - - if (! fona.getBattPercent(&vbat)) { - Serial.println(F("Failed to read Batt")); - } else { - Serial.print(F("VPct = ")); Serial.print(vbat); Serial.println(F("%")); - } - - break; - } - - case 'U': { - // Unlock the SIM with a PIN code - char PIN[5]; - flushSerial(); - Serial.println(F("Enter 4-digit PIN")); - readline(PIN, 3); - Serial.println(PIN); - Serial.print(F("Unlocking SIM card: ")); - if (! fona.unlockSIM(PIN)) { - Serial.println(F("Failed")); - } else { - Serial.println(F("OK!")); - } - break; - } - - case 'C': { - // read the CCID - fona.getSIMCCID(replybuffer); // make sure replybuffer is at least 21 bytes! - Serial.print(F("SIM CCID = ")); Serial.println(replybuffer); - break; - } - - case 'i': { - // read the RSSI - uint8_t n = fona.getRSSI(); - int8_t r; - - Serial.print(F("RSSI = ")); Serial.print(n); Serial.print(": "); - if (n == 0) r = -115; - if (n == 1) r = -111; - if (n == 31) r = -52; - if ((n >= 2) && (n <= 30)) { - r = map(n, 2, 30, -110, -54); - } - Serial.print(r); Serial.println(F(" dBm")); - - break; - } - - case 'n': { - // read the network/cellular status - uint8_t n = fona.getNetworkStatus(); - Serial.print(F("Network status ")); - Serial.print(n); - Serial.print(F(": ")); - if (n == 0) Serial.println(F("Not registered")); - if (n == 1) Serial.println(F("Registered (home)")); - if (n == 2) Serial.println(F("Not registered (searching)")); - if (n == 3) Serial.println(F("Denied")); - if (n == 4) Serial.println(F("Unknown")); - if (n == 5) Serial.println(F("Registered roaming")); - break; - } - - /*** Audio ***/ - case 'v': { - // set volume - flushSerial(); - if ( (type == FONA3G_A) || (type == FONA3G_E) ) { - Serial.print(F("Set Vol [0-8] ")); - } else { - Serial.print(F("Set Vol % [0-100] ")); - } - uint8_t vol = readnumber(); - Serial.println(); - if (! fona.setVolume(vol)) { - Serial.println(F("Failed")); - } else { - Serial.println(F("OK!")); - } - break; - } - - case 'V': { - uint8_t v = fona.getVolume(); - Serial.print(v); - if ( (type == FONA3G_A) || (type == FONA3G_E) ) { - Serial.println(" / 8"); - } else { - Serial.println("%"); - } - break; - } - - case 'H': { - // Set Headphone output - if (! fona.setAudio(FONA_HEADSETAUDIO)) { - Serial.println(F("Failed")); - } else { - Serial.println(F("OK!")); - } - fona.setMicVolume(FONA_HEADSETAUDIO, 15); - break; - } - case 'e': { - // Set External output - if (! fona.setAudio(FONA_EXTAUDIO)) { - Serial.println(F("Failed")); - } else { - Serial.println(F("OK!")); - } - - fona.setMicVolume(FONA_EXTAUDIO, 10); - break; - } - - case 'T': { - // play tone - flushSerial(); - Serial.print(F("Play tone #")); - uint8_t kittone = readnumber(); - Serial.println(); - // play for 1 second (1000 ms) - if (! fona.playToolkitTone(kittone, 1000)) { - Serial.println(F("Failed")); - } else { - Serial.println(F("OK!")); - } - break; - } - - /*** FM Radio ***/ - - case 'f': { - // get freq - flushSerial(); - Serial.print(F("FM Freq (eg 1011 == 101.1 MHz): ")); - uint16_t station = readnumber(); - Serial.println(); - // FM radio ON using headset - if (fona.FMradio(true, FONA_HEADSETAUDIO)) { - Serial.println(F("Opened")); - } - if (! fona.tuneFMradio(station)) { - Serial.println(F("Failed")); - } else { - Serial.println(F("Tuned")); - } - break; - } - case 'F': { - // FM radio off - if (! fona.FMradio(false)) { - Serial.println(F("Failed")); - } else { - Serial.println(F("OK!")); - } - break; - } - case 'm': { - // Set FM volume. - flushSerial(); - Serial.print(F("Set FM Vol [0-6]:")); - uint8_t vol = readnumber(); - Serial.println(); - if (!fona.setFMVolume(vol)) { - Serial.println(F("Failed")); - } else { - Serial.println(F("OK!")); - } - break; - } - case 'M': { - // Get FM volume. - uint8_t fmvol = fona.getFMVolume(); - if (fmvol < 0) { - Serial.println(F("Failed")); - } else { - Serial.print(F("FM volume: ")); - Serial.println(fmvol, DEC); - } - break; - } - case 'q': { - // Get FM station signal level (in decibels). - flushSerial(); - Serial.print(F("FM Freq (eg 1011 == 101.1 MHz): ")); - uint16_t station = readnumber(); - Serial.println(); - int8_t level = fona.getFMSignalLevel(station); - if (level < 0) { - Serial.println(F("Failed! Make sure FM radio is on (tuned to station).")); - } else { - Serial.print(F("Signal level (dB): ")); - Serial.println(level, DEC); - } - break; - } - - /*** PWM ***/ - - case 'P': { - // PWM Buzzer output @ 2KHz max - flushSerial(); - Serial.print(F("PWM Freq, 0 = Off, (1-2000): ")); - uint16_t freq = readnumber(); - Serial.println(); - if (! fona.setPWM(freq)) { - Serial.println(F("Failed")); - } else { - Serial.println(F("OK!")); - } - break; - } - - /*** Call ***/ - case 'c': { - // call a phone! - char number[30]; - flushSerial(); - Serial.print(F("Call #")); - readline(number, 30); - Serial.println(); - Serial.print(F("Calling ")); Serial.println(number); - if (!fona.callPhone(number)) { - Serial.println(F("Failed")); - } else { - Serial.println(F("Sent!")); - } - - break; - } - case 'h': { - // hang up! - if (! fona.hangUp()) { - Serial.println(F("Failed")); - } else { - Serial.println(F("OK!")); - } - break; - } - - case 'p': { - // pick up! - if (! fona.pickUp()) { - Serial.println(F("Failed")); - } else { - Serial.println(F("OK!")); - } - break; - } - - /*** SMS ***/ - - case 'N': { - // read the number of SMS's! - int8_t smsnum = fona.getNumSMS(); - if (smsnum < 0) { - Serial.println(F("Could not read # SMS")); - } else { - Serial.print(smsnum); - Serial.println(F(" SMS's on SIM card!")); - } - break; - } - case 'r': { - // read an SMS - flushSerial(); - Serial.print(F("Read #")); - uint8_t smsn = readnumber(); - Serial.print(F("\n\rReading SMS #")); Serial.println(smsn); - - // Retrieve SMS sender address/phone number. - if (! fona.getSMSSender(smsn, replybuffer, 250)) { - Serial.println("Failed!"); - break; - } - Serial.print(F("FROM: ")); Serial.println(replybuffer); - - // Retrieve SMS value. - uint16_t smslen; - if (! fona.readSMS(smsn, replybuffer, 250, &smslen)) { // pass in buffer and max len! - Serial.println("Failed!"); - break; - } - Serial.print(F("***** SMS #")); Serial.print(smsn); - Serial.print(" ("); Serial.print(smslen); Serial.println(F(") bytes *****")); - Serial.println(replybuffer); - Serial.println(F("*****")); - - break; - } - case 'R': { - // read all SMS - int8_t smsnum = fona.getNumSMS(); - uint16_t smslen; - int8_t smsn; - - if ( (type == FONA3G_A) || (type == FONA3G_E) ) { - smsn = 0; // zero indexed - smsnum--; - } else { - smsn = 1; // 1 indexed - } - - for ( ; smsn <= smsnum; smsn++) { - Serial.print(F("\n\rReading SMS #")); Serial.println(smsn); - if (!fona.readSMS(smsn, replybuffer, 250, &smslen)) { // pass in buffer and max len! - Serial.println(F("Failed!")); - break; - } - // if the length is zero, its a special case where the index number is higher - // so increase the max we'll look at! - if (smslen == 0) { - Serial.println(F("[empty slot]")); - smsnum++; - continue; - } - - Serial.print(F("***** SMS #")); Serial.print(smsn); - Serial.print(" ("); Serial.print(smslen); Serial.println(F(") bytes *****")); - Serial.println(replybuffer); - Serial.println(F("*****")); - } - break; - } - - case 'd': { - // delete an SMS - flushSerial(); - Serial.print(F("Delete #")); - uint8_t smsn = readnumber(); - - Serial.print(F("\n\rDeleting SMS #")); Serial.println(smsn); - if (fona.deleteSMS(smsn)) { - Serial.println(F("OK!")); - } else { - Serial.println(F("Couldn't delete")); - } - break; - } - - case 's': { - // send an SMS! - char sendto[21], message[141]; - flushSerial(); - Serial.print(F("Send to #")); - readline(sendto, 20); - Serial.println(sendto); - Serial.print(F("Type out one-line message (140 char): ")); - readline(message, 140); - Serial.println(message); - if (!fona.sendSMS(sendto, message)) { - Serial.println(F("Failed")); - } else { - Serial.println(F("Sent!")); - } - - break; - } - - /*** Time ***/ - - case 'y': { - // enable network time sync - if (!fona.enableNetworkTimeSync(true)) - Serial.println(F("Failed to enable")); - break; - } - - case 'Y': { - // enable NTP time sync - if (!fona.enableNTPTimeSync(true, F("pool.ntp.org"))) - Serial.println(F("Failed to enable")); - break; - } - - case 't': { - // read the time - char buffer[23]; - - fona.getTime(buffer, 23); // make sure replybuffer is at least 23 bytes! - Serial.print(F("Time = ")); Serial.println(buffer); - break; - } - - - /*********************************** GPS (SIM808 only) */ - - case 'o': { - // turn GPS off - if (!fona.enableGPS(false)) - Serial.println(F("Failed to turn off")); - break; - } - case 'O': { - // turn GPS on - if (!fona.enableGPS(true)) - Serial.println(F("Failed to turn on")); - break; - } - case 'x': { - int8_t stat; - // check GPS fix - stat = fona.GPSstatus(); - if (stat < 0) - Serial.println(F("Failed to query")); - if (stat == 0) Serial.println(F("GPS off")); - if (stat == 1) Serial.println(F("No fix")); - if (stat == 2) Serial.println(F("2D fix")); - if (stat == 3) Serial.println(F("3D fix")); - break; - } - - case 'L': { - // check for GPS location - char gpsdata[120]; - fona.getGPS(0, gpsdata, 120); - if (type == FONA808_V1) - Serial.println(F("Reply in format: mode,longitude,latitude,altitude,utctime(yyyymmddHHMMSS),ttff,satellites,speed,course")); - else - Serial.println(F("Reply in format: mode,fixstatus,utctime(yyyymmddHHMMSS),latitude,longitude,altitude,speed,course,fixmode,reserved1,HDOP,PDOP,VDOP,reserved2,view_satellites,used_satellites,reserved3,C/N0max,HPA,VPA")); - Serial.println(gpsdata); - - break; - } - - case 'E': { - flushSerial(); - if (type == FONA808_V1) { - Serial.print(F("GPS NMEA output sentences (0 = off, 34 = RMC+GGA, 255 = all)")); - } else { - Serial.print(F("On (1) or Off (0)? ")); - } - uint8_t nmeaout = readnumber(); - - // turn on NMEA output - fona.enableGPSNMEA(nmeaout); - - break; - } - - /*********************************** GPRS */ - - case 'g': { - // turn GPRS off - if (!fona.enableGPRS(false)) - Serial.println(F("Failed to turn off")); - break; - } - case 'G': { - // turn GPRS on - if (!fona.enableGPRS(true)) - Serial.println(F("Failed to turn on")); - break; - } - case 'l': { - // check for GSMLOC (requires GPRS) - uint16_t returncode; - - if (!fona.getGSMLoc(&returncode, replybuffer, 250)) - Serial.println(F("Failed!")); - if (returncode == 0) { - Serial.println(replybuffer); - } else { - Serial.print(F("Fail code #")); Serial.println(returncode); - } - - break; - } - case 'w': { - // read website URL - uint16_t statuscode; - int16_t length; - char url[80]; - - flushSerial(); - Serial.println(F("NOTE: in beta! Use small webpages to read!")); - Serial.println(F("URL to read (e.g. www.adafruit.com/testwifi/index.html):")); - Serial.print(F("http://")); readline(url, 79); - Serial.println(url); - - Serial.println(F("****")); - if (!fona.HTTP_GET_start(url, &statuscode, (uint16_t *)&length)) { - Serial.println("Failed!"); - break; - } - while (length > 0) { - while (fona.available()) { - char c = fona.read(); - - // Serial.write is too slow, we'll write directly to Serial register! -#if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__) - loop_until_bit_is_set(UCSR0A, UDRE0); /* Wait until data register empty. */ - UDR0 = c; -#else - Serial.write(c); -#endif - length--; - if (! length) break; - } - } - Serial.println(F("\n****")); - fona.HTTP_GET_end(); - break; - } - - case 'W': { - // Post data to website - uint16_t statuscode; - int16_t length; - char url[80]; - char data[80]; - - flushSerial(); - Serial.println(F("NOTE: in beta! Use simple websites to post!")); - Serial.println(F("URL to post (e.g. httpbin.org/post):")); - Serial.print(F("http://")); readline(url, 79); - Serial.println(url); - Serial.println(F("Data to post (e.g. \"foo\" or \"{\"simple\":\"json\"}\"):")); - readline(data, 79); - Serial.println(data); - - Serial.println(F("****")); - if (!fona.HTTP_POST_start(url, F("text/plain"), (uint8_t *) data, strlen(data), &statuscode, (uint16_t *)&length)) { - Serial.println("Failed!"); - break; - } - while (length > 0) { - while (fona.available()) { - char c = fona.read(); - -#if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__) - loop_until_bit_is_set(UCSR0A, UDRE0); /* Wait until data register empty. */ - UDR0 = c; -#else - Serial.write(c); -#endif - - length--; - if (! length) break; - } - } - Serial.println(F("\n****")); - fona.HTTP_POST_end(); - break; - } - /*****************************************/ - - case 'S': { - Serial.println(F("Creating SERIAL TUBE")); - while (1) { - while (Serial.available()) { - delay(1); - fona.write(Serial.read()); - } - if (fona.available()) { - Serial.write(fona.read()); - } - } - break; - } - - default: { - Serial.println(F("Unknown command")); - printMenu(); - break; - } - } - // flush input - flushSerial(); - while (fona.available()) { - Serial.write(fona.read()); - } - -} - -void flushSerial() { - while (Serial.available()) - Serial.read(); -} - -char readBlocking() { - while (!Serial.available()); - return Serial.read(); -} -uint16_t readnumber() { - uint16_t x = 0; - char c; - while (! isdigit(c = readBlocking())) { - //Serial.print(c); - } - Serial.print(c); - x = c - '0'; - while (isdigit(c = readBlocking())) { - Serial.print(c); - x *= 10; - x += c - '0'; - } - return x; -} - -uint8_t readline(char *buff, uint8_t maxbuff, uint16_t timeout) { - uint16_t buffidx = 0; - boolean timeoutvalid = true; - if (timeout == 0) timeoutvalid = false; - - while (true) { - if (buffidx > maxbuff) { - //Serial.println(F("SPACE")); - break; - } - - while (Serial.available()) { - char c = Serial.read(); - - //Serial.print(c, HEX); Serial.print("#"); Serial.println(c); - - if (c == '\r') continue; - if (c == 0xA) { - if (buffidx == 0) // the first 0x0A is ignored - continue; - - timeout = 0; // the second 0x0A is the end of the line - timeoutvalid = true; - break; - } - buff[buffidx] = c; - buffidx++; - } - - if (timeoutvalid && timeout == 0) { - //Serial.println(F("TIMEOUT")); - break; - } - delay(1); - } - buff[buffidx] = 0; // null term - return buffidx; -} diff --git a/libraries/Adafruit_FONA_Library/examples/GPS/.esp8266.test.skip b/libraries/Adafruit_FONA_Library/examples/GPS/.esp8266.test.skip deleted file mode 100644 index e69de29..0000000 diff --git a/libraries/Adafruit_FONA_Library/examples/GPS/GPS.ino b/libraries/Adafruit_FONA_Library/examples/GPS/GPS.ino deleted file mode 100644 index cce63d5..0000000 --- a/libraries/Adafruit_FONA_Library/examples/GPS/GPS.ino +++ /dev/null @@ -1,112 +0,0 @@ -/** - * ___ ___ _ _ _ ___ __ ___ ___ ___ ___ - * | __/ _ \| \| | /_\ ( _ )/ \( _ ) / __| _ \/ __| - * | _| (_) | .` |/ _ \ / _ \ () / _ \ | (_ | _/\__ \ - * |_| \___/|_|\_/_/ \_\ \___/\__/\___/ \___|_| |___/ - * - * This example is meant to work with the Adafruit - * FONA 808 or 3G Shield or Breakout - * - * Copyright: 2015 Adafruit - * Author: Todd Treece - * Licence: MIT - * - */ -#include "Adafruit_FONA.h" - -// standard pins for the shield, adjust as necessary -#define FONA_RX 2 -#define FONA_TX 3 -#define FONA_RST 4 - -// We default to using software serial. If you want to use hardware serial -// (because softserial isnt supported) comment out the following three lines -// and uncomment the HardwareSerial line -#include -SoftwareSerial fonaSS = SoftwareSerial(FONA_TX, FONA_RX); -SoftwareSerial *fonaSerial = &fonaSS; - -// Hardware serial is also possible! -// HardwareSerial *fonaSerial = &Serial1; - -Adafruit_FONA fona = Adafruit_FONA(FONA_RST); - -// Have a FONA 3G? use this object type instead -//Adafruit_FONA_3G fona = Adafruit_FONA_3G(FONA_RST); - - -void setup() { - - while (! Serial); - - Serial.begin(115200); - Serial.println(F("Adafruit FONA 808 & 3G GPS demo")); - Serial.println(F("Initializing FONA... (May take a few seconds)")); - - fonaSerial->begin(4800); - if (! fona.begin(*fonaSerial)) { - Serial.println(F("Couldn't find FONA")); - while(1); - } - Serial.println(F("FONA is OK")); - // Try to enable GPRS - - - Serial.println(F("Enabling GPS...")); - fona.enableGPS(true); -} - -void loop() { - delay(2000); - - float latitude, longitude, speed_kph, heading, speed_mph, altitude; - - // if you ask for an altitude reading, getGPS will return false if there isn't a 3D fix - boolean gps_success = fona.getGPS(&latitude, &longitude, &speed_kph, &heading, &altitude); - - if (gps_success) { - - Serial.print("GPS lat:"); - Serial.println(latitude, 6); - Serial.print("GPS long:"); - Serial.println(longitude, 6); - Serial.print("GPS speed KPH:"); - Serial.println(speed_kph); - Serial.print("GPS speed MPH:"); - speed_mph = speed_kph * 0.621371192; - Serial.println(speed_mph); - Serial.print("GPS heading:"); - Serial.println(heading); - Serial.print("GPS altitude:"); - Serial.println(altitude); - - } else { - Serial.println("Waiting for FONA GPS 3D fix..."); - } - - // Fona 3G doesnt have GPRSlocation :/ - if ((fona.type() == FONA3G_A) || (fona.type() == FONA3G_E)) - return; - // Check for network, then GPRS - Serial.println(F("Checking for Cell network...")); - if (fona.getNetworkStatus() == 1) { - // network & GPRS? Great! Print out the GSM location to compare - boolean gsmloc_success = fona.getGSMLoc(&latitude, &longitude); - - if (gsmloc_success) { - Serial.print("GSMLoc lat:"); - Serial.println(latitude, 6); - Serial.print("GSMLoc long:"); - Serial.println(longitude, 6); - } else { - Serial.println("GSM location failed..."); - Serial.println(F("Disabling GPRS")); - fona.enableGPRS(false); - Serial.println(F("Enabling GPRS")); - if (!fona.enableGPRS(true)) { - Serial.println(F("Failed to turn GPRS on")); - } - } - } -} - diff --git a/libraries/Adafruit_FONA_Library/examples/IncomingCall/.esp8266.test.skip b/libraries/Adafruit_FONA_Library/examples/IncomingCall/.esp8266.test.skip deleted file mode 100644 index e69de29..0000000 diff --git a/libraries/Adafruit_FONA_Library/examples/IncomingCall/IncomingCall.ino b/libraries/Adafruit_FONA_Library/examples/IncomingCall/IncomingCall.ino deleted file mode 100644 index 8dba308..0000000 --- a/libraries/Adafruit_FONA_Library/examples/IncomingCall/IncomingCall.ino +++ /dev/null @@ -1,62 +0,0 @@ -// FONA Incoming Call Number Example -// Listens for a call and displays the phone number of the caller (if available). -// Use this example to add phone call detection to your own FONA sketch. -#include "Adafruit_FONA.h" - -// Pins which are connected to the FONA. -// Note that this is different from FONAtest! -#define FONA_RX 3 -#define FONA_TX 4 -#define FONA_RST 5 - -// Note you need to map interrupt number to pin number -// for your board. On an Uno & Mega interrupt 0 is -// digital pin 2, and on a Leonardo interrupt 0 is -// digital pin 3. See this page for a complete table: -// http://arduino.cc/en/Reference/attachInterrupt -// Make sure this interrupt pin is connected to FONA RI! -#define FONA_RI_INTERRUPT 0 - -// We default to using software serial. If you want to use hardware serial -// (because softserial isnt supported) comment out the following three lines -// and uncomment the HardwareSerial line -#include -SoftwareSerial fonaSS = SoftwareSerial(FONA_TX, FONA_RX); -SoftwareSerial *fonaSerial = &fonaSS; - -// Hardware serial is also possible! -// HardwareSerial *fonaSerial = &Serial1; - -Adafruit_FONA fona = Adafruit_FONA(FONA_RST); - -void setup() { - Serial.begin(115200); - Serial.println(F("FONA incoming call example")); - Serial.println(F("Initializing....(May take 3 seconds)")); - - fonaSerial->begin(4800); - if (! fona.begin(*fonaSerial)) { - Serial.println(F("Couldn't find FONA")); - while(1); - } - Serial.println(F("FONA is OK")); - - // Enable incoming call notification. - if(fona.callerIdNotification(true, FONA_RI_INTERRUPT)) { - Serial.println(F("Caller id notification enabled.")); - } - else { - Serial.println(F("Caller id notification disabled")); - } -} - -void loop(){ - // Create a small string buffer to hold incoming call number. - char phone[32] = {0}; - // Check for an incoming call. Will return true if a call is incoming. - if(fona.incomingCallNumber(phone)){ - Serial.println(F("RING!")); - Serial.print(F("Phone Number: ")); - Serial.println(phone); - } -} diff --git a/libraries/Adafruit_FONA_Library/library.properties b/libraries/Adafruit_FONA_Library/library.properties deleted file mode 100644 index 973c059..0000000 --- a/libraries/Adafruit_FONA_Library/library.properties +++ /dev/null @@ -1,9 +0,0 @@ -name=Adafruit FONA Library -version=1.3.0 -author=Adafruit -maintainer=Adafruit -sentence=Arduino library for the Adafruit FONA -paragraph=Arduino library for the Adafruit FONA -category=Communication -url=https://github.com/adafruit/Adafruit_FONA_Library -architectures=* diff --git a/libraries/Adafruit_NeoPixel/Adafruit_NeoPixel.cpp b/libraries/Adafruit_NeoPixel/Adafruit_NeoPixel.cpp deleted file mode 100755 index af6386c..0000000 --- a/libraries/Adafruit_NeoPixel/Adafruit_NeoPixel.cpp +++ /dev/null @@ -1,1029 +0,0 @@ -/*------------------------------------------------------------------------- - Arduino library to control a wide variety of WS2811- and WS2812-based RGB - LED devices such as Adafruit FLORA RGB Smart Pixels and NeoPixel strips. - Currently handles 400 and 800 KHz bitstreams on 8, 12 and 16 MHz ATmega - MCUs, with LEDs wired for RGB or GRB color order. 8 MHz MCUs provide - output on PORTB and PORTD, while 16 MHz chips can handle most output pins - (possible exception with upper PORT registers on the Arduino Mega). - - Written by Phil Burgess / Paint Your Dragon for Adafruit Industries, - contributions by PJRC and other members of the open source community. - - Adafruit invests time and resources providing this open source code, - please support Adafruit and open-source hardware by purchasing products - from Adafruit! - - ------------------------------------------------------------------------- - This file is part of the Adafruit NeoPixel library. - - NeoPixel is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation, either version 3 of - the License, or (at your option) any later version. - - NeoPixel is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with NeoPixel. If not, see - . - -------------------------------------------------------------------------*/ - -#include "Adafruit_NeoPixel.h" - -Adafruit_NeoPixel::Adafruit_NeoPixel(uint16_t n, uint8_t p, uint8_t t) : - numLEDs(n), numBytes(n * 3), pin(p), brightness(0), - pixels(NULL), type(t), endTime(0) -#ifdef __AVR__ - ,port(portOutputRegister(digitalPinToPort(p))), - pinMask(digitalPinToBitMask(p)) -#endif -{ - if((pixels = (uint8_t *)malloc(numBytes))) { - memset(pixels, 0, numBytes); - } - if(t & NEO_GRB) { // GRB vs RGB; might add others if needed - rOffset = 1; - gOffset = 0; - bOffset = 2; - } else if (t & NEO_BRG) { - rOffset = 1; - gOffset = 2; - bOffset = 0; - } else { - rOffset = 0; - gOffset = 1; - bOffset = 2; - } - -} - -Adafruit_NeoPixel::~Adafruit_NeoPixel() { - if(pixels) free(pixels); - pinMode(pin, INPUT); -} - -void Adafruit_NeoPixel::begin(void) { - pinMode(pin, OUTPUT); - digitalWrite(pin, LOW); -} - -void Adafruit_NeoPixel::show(void) { - - if(!pixels) return; - - // Data latch = 50+ microsecond pause in the output stream. Rather than - // put a delay at the end of the function, the ending time is noted and - // the function will simply hold off (if needed) on issuing the - // subsequent round of data until the latch time has elapsed. This - // allows the mainline code to start generating the next frame of data - // rather than stalling for the latch. - while(!canShow()); - // endTime is a private member (rather than global var) so that mutliple - // instances on different pins can be quickly issued in succession (each - // instance doesn't delay the next). - - // In order to make this code runtime-configurable to work with any pin, - // SBI/CBI instructions are eschewed in favor of full PORT writes via the - // OUT or ST instructions. It relies on two facts: that peripheral - // functions (such as PWM) take precedence on output pins, so our PORT- - // wide writes won't interfere, and that interrupts are globally disabled - // while data is being issued to the LEDs, so no other code will be - // accessing the PORT. The code takes an initial 'snapshot' of the PORT - // state, computes 'pin high' and 'pin low' values, and writes these back - // to the PORT register as needed. - - noInterrupts(); // Need 100% focus on instruction timing - -#ifdef __AVR__ - - volatile uint16_t - i = numBytes; // Loop counter - volatile uint8_t - *ptr = pixels, // Pointer to next byte - b = *ptr++, // Current byte value - hi, // PORT w/output bit set high - lo; // PORT w/output bit set low - - // Hand-tuned assembly code issues data to the LED drivers at a specific - // rate. There's separate code for different CPU speeds (8, 12, 16 MHz) - // for both the WS2811 (400 KHz) and WS2812 (800 KHz) drivers. The - // datastream timing for the LED drivers allows a little wiggle room each - // way (listed in the datasheets), so the conditions for compiling each - // case are set up for a range of frequencies rather than just the exact - // 8, 12 or 16 MHz values, permitting use with some close-but-not-spot-on - // devices (e.g. 16.5 MHz DigiSpark). The ranges were arrived at based - // on the datasheet figures and have not been extensively tested outside - // the canonical 8/12/16 MHz speeds; there's no guarantee these will work - // close to the extremes (or possibly they could be pushed further). - // Keep in mind only one CPU speed case actually gets compiled; the - // resulting program isn't as massive as it might look from source here. - -// 8 MHz(ish) AVR --------------------------------------------------------- -#if (F_CPU >= 7400000UL) && (F_CPU <= 9500000UL) - -#ifdef NEO_KHZ400 - if((type & NEO_SPDMASK) == NEO_KHZ800) { // 800 KHz bitstream -#endif - - volatile uint8_t n1, n2 = 0; // First, next bits out - - // Squeezing an 800 KHz stream out of an 8 MHz chip requires code - // specific to each PORT register. At present this is only written - // to work with pins on PORTD or PORTB, the most likely use case -- - // this covers all the pins on the Adafruit Flora and the bulk of - // digital pins on the Arduino Pro 8 MHz (keep in mind, this code - // doesn't even get compiled for 16 MHz boards like the Uno, Mega, - // Leonardo, etc., so don't bother extending this out of hand). - // Additional PORTs could be added if you really need them, just - // duplicate the else and loop and change the PORT. Each add'l - // PORT will require about 150(ish) bytes of program space. - - // 10 instruction clocks per bit: HHxxxxxLLL - // OUT instructions: ^ ^ ^ (T=0,2,7) - -#ifdef PORTD // PORTD isn't present on ATtiny85, etc. - - if(port == &PORTD) { - - hi = PORTD | pinMask; - lo = PORTD & ~pinMask; - n1 = lo; - if(b & 0x80) n1 = hi; - - // Dirty trick: RJMPs proceeding to the next instruction are used - // to delay two clock cycles in one instruction word (rather than - // using two NOPs). This was necessary in order to squeeze the - // loop down to exactly 64 words -- the maximum possible for a - // relative branch. - - asm volatile( - "headD:" "\n\t" // Clk Pseudocode - // Bit 7: - "out %[port] , %[hi]" "\n\t" // 1 PORT = hi - "mov %[n2] , %[lo]" "\n\t" // 1 n2 = lo - "out %[port] , %[n1]" "\n\t" // 1 PORT = n1 - "rjmp .+0" "\n\t" // 2 nop nop - "sbrc %[byte] , 6" "\n\t" // 1-2 if(b & 0x40) - "mov %[n2] , %[hi]" "\n\t" // 0-1 n2 = hi - "out %[port] , %[lo]" "\n\t" // 1 PORT = lo - "rjmp .+0" "\n\t" // 2 nop nop - // Bit 6: - "out %[port] , %[hi]" "\n\t" // 1 PORT = hi - "mov %[n1] , %[lo]" "\n\t" // 1 n1 = lo - "out %[port] , %[n2]" "\n\t" // 1 PORT = n2 - "rjmp .+0" "\n\t" // 2 nop nop - "sbrc %[byte] , 5" "\n\t" // 1-2 if(b & 0x20) - "mov %[n1] , %[hi]" "\n\t" // 0-1 n1 = hi - "out %[port] , %[lo]" "\n\t" // 1 PORT = lo - "rjmp .+0" "\n\t" // 2 nop nop - // Bit 5: - "out %[port] , %[hi]" "\n\t" // 1 PORT = hi - "mov %[n2] , %[lo]" "\n\t" // 1 n2 = lo - "out %[port] , %[n1]" "\n\t" // 1 PORT = n1 - "rjmp .+0" "\n\t" // 2 nop nop - "sbrc %[byte] , 4" "\n\t" // 1-2 if(b & 0x10) - "mov %[n2] , %[hi]" "\n\t" // 0-1 n2 = hi - "out %[port] , %[lo]" "\n\t" // 1 PORT = lo - "rjmp .+0" "\n\t" // 2 nop nop - // Bit 4: - "out %[port] , %[hi]" "\n\t" // 1 PORT = hi - "mov %[n1] , %[lo]" "\n\t" // 1 n1 = lo - "out %[port] , %[n2]" "\n\t" // 1 PORT = n2 - "rjmp .+0" "\n\t" // 2 nop nop - "sbrc %[byte] , 3" "\n\t" // 1-2 if(b & 0x08) - "mov %[n1] , %[hi]" "\n\t" // 0-1 n1 = hi - "out %[port] , %[lo]" "\n\t" // 1 PORT = lo - "rjmp .+0" "\n\t" // 2 nop nop - // Bit 3: - "out %[port] , %[hi]" "\n\t" // 1 PORT = hi - "mov %[n2] , %[lo]" "\n\t" // 1 n2 = lo - "out %[port] , %[n1]" "\n\t" // 1 PORT = n1 - "rjmp .+0" "\n\t" // 2 nop nop - "sbrc %[byte] , 2" "\n\t" // 1-2 if(b & 0x04) - "mov %[n2] , %[hi]" "\n\t" // 0-1 n2 = hi - "out %[port] , %[lo]" "\n\t" // 1 PORT = lo - "rjmp .+0" "\n\t" // 2 nop nop - // Bit 2: - "out %[port] , %[hi]" "\n\t" // 1 PORT = hi - "mov %[n1] , %[lo]" "\n\t" // 1 n1 = lo - "out %[port] , %[n2]" "\n\t" // 1 PORT = n2 - "rjmp .+0" "\n\t" // 2 nop nop - "sbrc %[byte] , 1" "\n\t" // 1-2 if(b & 0x02) - "mov %[n1] , %[hi]" "\n\t" // 0-1 n1 = hi - "out %[port] , %[lo]" "\n\t" // 1 PORT = lo - "rjmp .+0" "\n\t" // 2 nop nop - // Bit 1: - "out %[port] , %[hi]" "\n\t" // 1 PORT = hi - "mov %[n2] , %[lo]" "\n\t" // 1 n2 = lo - "out %[port] , %[n1]" "\n\t" // 1 PORT = n1 - "rjmp .+0" "\n\t" // 2 nop nop - "sbrc %[byte] , 0" "\n\t" // 1-2 if(b & 0x01) - "mov %[n2] , %[hi]" "\n\t" // 0-1 n2 = hi - "out %[port] , %[lo]" "\n\t" // 1 PORT = lo - "sbiw %[count], 1" "\n\t" // 2 i-- (don't act on Z flag yet) - // Bit 0: - "out %[port] , %[hi]" "\n\t" // 1 PORT = hi - "mov %[n1] , %[lo]" "\n\t" // 1 n1 = lo - "out %[port] , %[n2]" "\n\t" // 1 PORT = n2 - "ld %[byte] , %a[ptr]+" "\n\t" // 2 b = *ptr++ - "sbrc %[byte] , 7" "\n\t" // 1-2 if(b & 0x80) - "mov %[n1] , %[hi]" "\n\t" // 0-1 n1 = hi - "out %[port] , %[lo]" "\n\t" // 1 PORT = lo - "brne headD" "\n" // 2 while(i) (Z flag set above) - : [byte] "+r" (b), - [n1] "+r" (n1), - [n2] "+r" (n2), - [count] "+w" (i) - : [port] "I" (_SFR_IO_ADDR(PORTD)), - [ptr] "e" (ptr), - [hi] "r" (hi), - [lo] "r" (lo)); - - } else if(port == &PORTB) { - -#endif // PORTD - - // Same as above, just switched to PORTB and stripped of comments. - hi = PORTB | pinMask; - lo = PORTB & ~pinMask; - n1 = lo; - if(b & 0x80) n1 = hi; - - asm volatile( - "headB:" "\n\t" - "out %[port] , %[hi]" "\n\t" - "mov %[n2] , %[lo]" "\n\t" - "out %[port] , %[n1]" "\n\t" - "rjmp .+0" "\n\t" - "sbrc %[byte] , 6" "\n\t" - "mov %[n2] , %[hi]" "\n\t" - "out %[port] , %[lo]" "\n\t" - "rjmp .+0" "\n\t" - "out %[port] , %[hi]" "\n\t" - "mov %[n1] , %[lo]" "\n\t" - "out %[port] , %[n2]" "\n\t" - "rjmp .+0" "\n\t" - "sbrc %[byte] , 5" "\n\t" - "mov %[n1] , %[hi]" "\n\t" - "out %[port] , %[lo]" "\n\t" - "rjmp .+0" "\n\t" - "out %[port] , %[hi]" "\n\t" - "mov %[n2] , %[lo]" "\n\t" - "out %[port] , %[n1]" "\n\t" - "rjmp .+0" "\n\t" - "sbrc %[byte] , 4" "\n\t" - "mov %[n2] , %[hi]" "\n\t" - "out %[port] , %[lo]" "\n\t" - "rjmp .+0" "\n\t" - "out %[port] , %[hi]" "\n\t" - "mov %[n1] , %[lo]" "\n\t" - "out %[port] , %[n2]" "\n\t" - "rjmp .+0" "\n\t" - "sbrc %[byte] , 3" "\n\t" - "mov %[n1] , %[hi]" "\n\t" - "out %[port] , %[lo]" "\n\t" - "rjmp .+0" "\n\t" - "out %[port] , %[hi]" "\n\t" - "mov %[n2] , %[lo]" "\n\t" - "out %[port] , %[n1]" "\n\t" - "rjmp .+0" "\n\t" - "sbrc %[byte] , 2" "\n\t" - "mov %[n2] , %[hi]" "\n\t" - "out %[port] , %[lo]" "\n\t" - "rjmp .+0" "\n\t" - "out %[port] , %[hi]" "\n\t" - "mov %[n1] , %[lo]" "\n\t" - "out %[port] , %[n2]" "\n\t" - "rjmp .+0" "\n\t" - "sbrc %[byte] , 1" "\n\t" - "mov %[n1] , %[hi]" "\n\t" - "out %[port] , %[lo]" "\n\t" - "rjmp .+0" "\n\t" - "out %[port] , %[hi]" "\n\t" - "mov %[n2] , %[lo]" "\n\t" - "out %[port] , %[n1]" "\n\t" - "rjmp .+0" "\n\t" - "sbrc %[byte] , 0" "\n\t" - "mov %[n2] , %[hi]" "\n\t" - "out %[port] , %[lo]" "\n\t" - "sbiw %[count], 1" "\n\t" - "out %[port] , %[hi]" "\n\t" - "mov %[n1] , %[lo]" "\n\t" - "out %[port] , %[n2]" "\n\t" - "ld %[byte] , %a[ptr]+" "\n\t" - "sbrc %[byte] , 7" "\n\t" - "mov %[n1] , %[hi]" "\n\t" - "out %[port] , %[lo]" "\n\t" - "brne headB" "\n" - : [byte] "+r" (b), [n1] "+r" (n1), [n2] "+r" (n2), [count] "+w" (i) - : [port] "I" (_SFR_IO_ADDR(PORTB)), [ptr] "e" (ptr), [hi] "r" (hi), - [lo] "r" (lo)); - -#ifdef PORTD - } // endif PORTB -#endif - -#ifdef NEO_KHZ400 - } else { // end 800 KHz, do 400 KHz - - // Timing is more relaxed; unrolling the inner loop for each bit is - // not necessary. Still using the peculiar RJMPs as 2X NOPs, not out - // of need but just to trim the code size down a little. - // This 400-KHz-datastream-on-8-MHz-CPU code is not quite identical - // to the 800-on-16 code later -- the hi/lo timing between WS2811 and - // WS2812 is not simply a 2:1 scale! - - // 20 inst. clocks per bit: HHHHxxxxxxLLLLLLLLLL - // ST instructions: ^ ^ ^ (T=0,4,10) - - volatile uint8_t next, bit; - - hi = *port | pinMask; - lo = *port & ~pinMask; - next = lo; - bit = 8; - - asm volatile( - "head20:" "\n\t" // Clk Pseudocode (T = 0) - "st %a[port], %[hi]" "\n\t" // 2 PORT = hi (T = 2) - "sbrc %[byte] , 7" "\n\t" // 1-2 if(b & 128) - "mov %[next], %[hi]" "\n\t" // 0-1 next = hi (T = 4) - "st %a[port], %[next]" "\n\t" // 2 PORT = next (T = 6) - "mov %[next] , %[lo]" "\n\t" // 1 next = lo (T = 7) - "dec %[bit]" "\n\t" // 1 bit-- (T = 8) - "breq nextbyte20" "\n\t" // 1-2 if(bit == 0) - "rol %[byte]" "\n\t" // 1 b <<= 1 (T = 10) - "st %a[port], %[lo]" "\n\t" // 2 PORT = lo (T = 12) - "rjmp .+0" "\n\t" // 2 nop nop (T = 14) - "rjmp .+0" "\n\t" // 2 nop nop (T = 16) - "rjmp .+0" "\n\t" // 2 nop nop (T = 18) - "rjmp head20" "\n\t" // 2 -> head20 (next bit out) - "nextbyte20:" "\n\t" // (T = 10) - "st %a[port], %[lo]" "\n\t" // 2 PORT = lo (T = 12) - "nop" "\n\t" // 1 nop (T = 13) - "ldi %[bit] , 8" "\n\t" // 1 bit = 8 (T = 14) - "ld %[byte] , %a[ptr]+" "\n\t" // 2 b = *ptr++ (T = 16) - "sbiw %[count], 1" "\n\t" // 2 i-- (T = 18) - "brne head20" "\n" // 2 if(i != 0) -> (next byte) - : [port] "+e" (port), - [byte] "+r" (b), - [bit] "+r" (bit), - [next] "+r" (next), - [count] "+w" (i) - : [hi] "r" (hi), - [lo] "r" (lo), - [ptr] "e" (ptr)); - } -#endif - -// 12 MHz(ish) AVR -------------------------------------------------------- -#elif (F_CPU >= 11100000UL) && (F_CPU <= 14300000UL) - -#ifdef NEO_KHZ400 - if((type & NEO_SPDMASK) == NEO_KHZ800) { // 800 KHz bitstream -#endif - - // In the 12 MHz case, an optimized 800 KHz datastream (no dead time - // between bytes) requires a PORT-specific loop similar to the 8 MHz - // code (but a little more relaxed in this case). - - // 15 instruction clocks per bit: HHHHxxxxxxLLLLL - // OUT instructions: ^ ^ ^ (T=0,4,10) - - volatile uint8_t next; - -#ifdef PORTD - - if(port == &PORTD) { - - hi = PORTD | pinMask; - lo = PORTD & ~pinMask; - next = lo; - if(b & 0x80) next = hi; - - // Don't "optimize" the OUT calls into the bitTime subroutine; - // we're exploiting the RCALL and RET as 3- and 4-cycle NOPs! - asm volatile( - "headD:" "\n\t" // (T = 0) - "out %[port], %[hi]" "\n\t" // (T = 1) - "rcall bitTimeD" "\n\t" // Bit 7 (T = 15) - "out %[port], %[hi]" "\n\t" - "rcall bitTimeD" "\n\t" // Bit 6 - "out %[port], %[hi]" "\n\t" - "rcall bitTimeD" "\n\t" // Bit 5 - "out %[port], %[hi]" "\n\t" - "rcall bitTimeD" "\n\t" // Bit 4 - "out %[port], %[hi]" "\n\t" - "rcall bitTimeD" "\n\t" // Bit 3 - "out %[port], %[hi]" "\n\t" - "rcall bitTimeD" "\n\t" // Bit 2 - "out %[port], %[hi]" "\n\t" - "rcall bitTimeD" "\n\t" // Bit 1 - // Bit 0: - "out %[port] , %[hi]" "\n\t" // 1 PORT = hi (T = 1) - "rjmp .+0" "\n\t" // 2 nop nop (T = 3) - "ld %[byte] , %a[ptr]+" "\n\t" // 2 b = *ptr++ (T = 5) - "out %[port] , %[next]" "\n\t" // 1 PORT = next (T = 6) - "mov %[next] , %[lo]" "\n\t" // 1 next = lo (T = 7) - "sbrc %[byte] , 7" "\n\t" // 1-2 if(b & 0x80) (T = 8) - "mov %[next] , %[hi]" "\n\t" // 0-1 next = hi (T = 9) - "nop" "\n\t" // 1 (T = 10) - "out %[port] , %[lo]" "\n\t" // 1 PORT = lo (T = 11) - "sbiw %[count], 1" "\n\t" // 2 i-- (T = 13) - "brne headD" "\n\t" // 2 if(i != 0) -> (next byte) - "rjmp doneD" "\n\t" - "bitTimeD:" "\n\t" // nop nop nop (T = 4) - "out %[port], %[next]" "\n\t" // 1 PORT = next (T = 5) - "mov %[next], %[lo]" "\n\t" // 1 next = lo (T = 6) - "rol %[byte]" "\n\t" // 1 b <<= 1 (T = 7) - "sbrc %[byte], 7" "\n\t" // 1-2 if(b & 0x80) (T = 8) - "mov %[next], %[hi]" "\n\t" // 0-1 next = hi (T = 9) - "nop" "\n\t" // 1 (T = 10) - "out %[port], %[lo]" "\n\t" // 1 PORT = lo (T = 11) - "ret" "\n\t" // 4 nop nop nop nop (T = 15) - "doneD:" "\n" - : [byte] "+r" (b), - [next] "+r" (next), - [count] "+w" (i) - : [port] "I" (_SFR_IO_ADDR(PORTD)), - [ptr] "e" (ptr), - [hi] "r" (hi), - [lo] "r" (lo)); - - } else if(port == &PORTB) { - -#endif // PORTD - - hi = PORTB | pinMask; - lo = PORTB & ~pinMask; - next = lo; - if(b & 0x80) next = hi; - - // Same as above, just set for PORTB & stripped of comments - asm volatile( - "headB:" "\n\t" - "out %[port], %[hi]" "\n\t" - "rcall bitTimeB" "\n\t" - "out %[port], %[hi]" "\n\t" - "rcall bitTimeB" "\n\t" - "out %[port], %[hi]" "\n\t" - "rcall bitTimeB" "\n\t" - "out %[port], %[hi]" "\n\t" - "rcall bitTimeB" "\n\t" - "out %[port], %[hi]" "\n\t" - "rcall bitTimeB" "\n\t" - "out %[port], %[hi]" "\n\t" - "rcall bitTimeB" "\n\t" - "out %[port], %[hi]" "\n\t" - "rcall bitTimeB" "\n\t" - "out %[port] , %[hi]" "\n\t" - "rjmp .+0" "\n\t" - "ld %[byte] , %a[ptr]+" "\n\t" - "out %[port] , %[next]" "\n\t" - "mov %[next] , %[lo]" "\n\t" - "sbrc %[byte] , 7" "\n\t" - "mov %[next] , %[hi]" "\n\t" - "nop" "\n\t" - "out %[port] , %[lo]" "\n\t" - "sbiw %[count], 1" "\n\t" - "brne headB" "\n\t" - "rjmp doneB" "\n\t" - "bitTimeB:" "\n\t" - "out %[port], %[next]" "\n\t" - "mov %[next], %[lo]" "\n\t" - "rol %[byte]" "\n\t" - "sbrc %[byte], 7" "\n\t" - "mov %[next], %[hi]" "\n\t" - "nop" "\n\t" - "out %[port], %[lo]" "\n\t" - "ret" "\n\t" - "doneB:" "\n" - : [byte] "+r" (b), [next] "+r" (next), [count] "+w" (i) - : [port] "I" (_SFR_IO_ADDR(PORTB)), [ptr] "e" (ptr), [hi] "r" (hi), - [lo] "r" (lo)); - -#ifdef PORTD - } -#endif - -#ifdef NEO_KHZ400 - } else { // 400 KHz - - // 30 instruction clocks per bit: HHHHHHxxxxxxxxxLLLLLLLLLLLLLLL - // ST instructions: ^ ^ ^ (T=0,6,15) - - volatile uint8_t next, bit; - - hi = *port | pinMask; - lo = *port & ~pinMask; - next = lo; - bit = 8; - - asm volatile( - "head30:" "\n\t" // Clk Pseudocode (T = 0) - "st %a[port], %[hi]" "\n\t" // 2 PORT = hi (T = 2) - "sbrc %[byte] , 7" "\n\t" // 1-2 if(b & 128) - "mov %[next], %[hi]" "\n\t" // 0-1 next = hi (T = 4) - "rjmp .+0" "\n\t" // 2 nop nop (T = 6) - "st %a[port], %[next]" "\n\t" // 2 PORT = next (T = 8) - "rjmp .+0" "\n\t" // 2 nop nop (T = 10) - "rjmp .+0" "\n\t" // 2 nop nop (T = 12) - "rjmp .+0" "\n\t" // 2 nop nop (T = 14) - "nop" "\n\t" // 1 nop (T = 15) - "st %a[port], %[lo]" "\n\t" // 2 PORT = lo (T = 17) - "rjmp .+0" "\n\t" // 2 nop nop (T = 19) - "dec %[bit]" "\n\t" // 1 bit-- (T = 20) - "breq nextbyte30" "\n\t" // 1-2 if(bit == 0) - "rol %[byte]" "\n\t" // 1 b <<= 1 (T = 22) - "rjmp .+0" "\n\t" // 2 nop nop (T = 24) - "rjmp .+0" "\n\t" // 2 nop nop (T = 26) - "rjmp .+0" "\n\t" // 2 nop nop (T = 28) - "rjmp head30" "\n\t" // 2 -> head30 (next bit out) - "nextbyte30:" "\n\t" // (T = 22) - "nop" "\n\t" // 1 nop (T = 23) - "ldi %[bit] , 8" "\n\t" // 1 bit = 8 (T = 24) - "ld %[byte] , %a[ptr]+" "\n\t" // 2 b = *ptr++ (T = 26) - "sbiw %[count], 1" "\n\t" // 2 i-- (T = 28) - "brne head30" "\n" // 1-2 if(i != 0) -> (next byte) - : [port] "+e" (port), - [byte] "+r" (b), - [bit] "+r" (bit), - [next] "+r" (next), - [count] "+w" (i) - : [hi] "r" (hi), - [lo] "r" (lo), - [ptr] "e" (ptr)); - } -#endif - -// 16 MHz(ish) AVR -------------------------------------------------------- -#elif (F_CPU >= 15400000UL) && (F_CPU <= 19000000L) - -#ifdef NEO_KHZ400 - if((type & NEO_SPDMASK) == NEO_KHZ800) { // 800 KHz bitstream -#endif - - // WS2811 and WS2812 have different hi/lo duty cycles; this is - // similar but NOT an exact copy of the prior 400-on-8 code. - - // 20 inst. clocks per bit: HHHHHxxxxxxxxLLLLLLL - // ST instructions: ^ ^ ^ (T=0,5,13) - - volatile uint8_t next, bit; - - hi = *port | pinMask; - lo = *port & ~pinMask; - next = lo; - bit = 8; - - asm volatile( - "head20:" "\n\t" // Clk Pseudocode (T = 0) - "st %a[port], %[hi]" "\n\t" // 2 PORT = hi (T = 2) - "sbrc %[byte], 7" "\n\t" // 1-2 if(b & 128) - "mov %[next], %[hi]" "\n\t" // 0-1 next = hi (T = 4) - "dec %[bit]" "\n\t" // 1 bit-- (T = 5) - "st %a[port], %[next]" "\n\t" // 2 PORT = next (T = 7) - "mov %[next] , %[lo]" "\n\t" // 1 next = lo (T = 8) - "breq nextbyte20" "\n\t" // 1-2 if(bit == 0) (from dec above) - "rol %[byte]" "\n\t" // 1 b <<= 1 (T = 10) - "rjmp .+0" "\n\t" // 2 nop nop (T = 12) - "nop" "\n\t" // 1 nop (T = 13) - "st %a[port], %[lo]" "\n\t" // 2 PORT = lo (T = 15) - "nop" "\n\t" // 1 nop (T = 16) - "rjmp .+0" "\n\t" // 2 nop nop (T = 18) - "rjmp head20" "\n\t" // 2 -> head20 (next bit out) - "nextbyte20:" "\n\t" // (T = 10) - "ldi %[bit] , 8" "\n\t" // 1 bit = 8 (T = 11) - "ld %[byte] , %a[ptr]+" "\n\t" // 2 b = *ptr++ (T = 13) - "st %a[port], %[lo]" "\n\t" // 2 PORT = lo (T = 15) - "nop" "\n\t" // 1 nop (T = 16) - "sbiw %[count], 1" "\n\t" // 2 i-- (T = 18) - "brne head20" "\n" // 2 if(i != 0) -> (next byte) - : [port] "+e" (port), - [byte] "+r" (b), - [bit] "+r" (bit), - [next] "+r" (next), - [count] "+w" (i) - : [ptr] "e" (ptr), - [hi] "r" (hi), - [lo] "r" (lo)); - -#ifdef NEO_KHZ400 - } else { // 400 KHz - - // The 400 KHz clock on 16 MHz MCU is the most 'relaxed' version. - - // 40 inst. clocks per bit: HHHHHHHHxxxxxxxxxxxxLLLLLLLLLLLLLLLLLLLL - // ST instructions: ^ ^ ^ (T=0,8,20) - - volatile uint8_t next, bit; - - hi = *port | pinMask; - lo = *port & ~pinMask; - next = lo; - bit = 8; - - asm volatile( - "head40:" "\n\t" // Clk Pseudocode (T = 0) - "st %a[port], %[hi]" "\n\t" // 2 PORT = hi (T = 2) - "sbrc %[byte] , 7" "\n\t" // 1-2 if(b & 128) - "mov %[next] , %[hi]" "\n\t" // 0-1 next = hi (T = 4) - "rjmp .+0" "\n\t" // 2 nop nop (T = 6) - "rjmp .+0" "\n\t" // 2 nop nop (T = 8) - "st %a[port], %[next]" "\n\t" // 2 PORT = next (T = 10) - "rjmp .+0" "\n\t" // 2 nop nop (T = 12) - "rjmp .+0" "\n\t" // 2 nop nop (T = 14) - "rjmp .+0" "\n\t" // 2 nop nop (T = 16) - "rjmp .+0" "\n\t" // 2 nop nop (T = 18) - "rjmp .+0" "\n\t" // 2 nop nop (T = 20) - "st %a[port], %[lo]" "\n\t" // 2 PORT = lo (T = 22) - "nop" "\n\t" // 1 nop (T = 23) - "mov %[next] , %[lo]" "\n\t" // 1 next = lo (T = 24) - "dec %[bit]" "\n\t" // 1 bit-- (T = 25) - "breq nextbyte40" "\n\t" // 1-2 if(bit == 0) - "rol %[byte]" "\n\t" // 1 b <<= 1 (T = 27) - "nop" "\n\t" // 1 nop (T = 28) - "rjmp .+0" "\n\t" // 2 nop nop (T = 30) - "rjmp .+0" "\n\t" // 2 nop nop (T = 32) - "rjmp .+0" "\n\t" // 2 nop nop (T = 34) - "rjmp .+0" "\n\t" // 2 nop nop (T = 36) - "rjmp .+0" "\n\t" // 2 nop nop (T = 38) - "rjmp head40" "\n\t" // 2 -> head40 (next bit out) - "nextbyte40:" "\n\t" // (T = 27) - "ldi %[bit] , 8" "\n\t" // 1 bit = 8 (T = 28) - "ld %[byte] , %a[ptr]+" "\n\t" // 2 b = *ptr++ (T = 30) - "rjmp .+0" "\n\t" // 2 nop nop (T = 32) - "st %a[port], %[lo]" "\n\t" // 2 PORT = lo (T = 34) - "rjmp .+0" "\n\t" // 2 nop nop (T = 36) - "sbiw %[count], 1" "\n\t" // 2 i-- (T = 38) - "brne head40" "\n" // 1-2 if(i != 0) -> (next byte) - : [port] "+e" (port), - [byte] "+r" (b), - [bit] "+r" (bit), - [next] "+r" (next), - [count] "+w" (i) - : [ptr] "e" (ptr), - [hi] "r" (hi), - [lo] "r" (lo)); - } -#endif - -#else - #error "CPU SPEED NOT SUPPORTED" -#endif - -#elif defined(__arm__) - -#if defined(__MK20DX128__) || defined(__MK20DX256__) // Teensy 3.0 & 3.1 -#define CYCLES_800_T0H (F_CPU / 4000000) -#define CYCLES_800_T1H (F_CPU / 1250000) -#define CYCLES_800 (F_CPU / 800000) -#define CYCLES_400_T0H (F_CPU / 2000000) -#define CYCLES_400_T1H (F_CPU / 833333) -#define CYCLES_400 (F_CPU / 400000) - - uint8_t *p = pixels, - *end = p + numBytes, pix, mask; - volatile uint8_t *set = portSetRegister(pin), - *clr = portClearRegister(pin); - uint32_t cyc; - - ARM_DEMCR |= ARM_DEMCR_TRCENA; - ARM_DWT_CTRL |= ARM_DWT_CTRL_CYCCNTENA; - -#ifdef NEO_KHZ400 - if((type & NEO_SPDMASK) == NEO_KHZ800) { // 800 KHz bitstream -#endif - cyc = ARM_DWT_CYCCNT + CYCLES_800; - while(p < end) { - pix = *p++; - for(mask = 0x80; mask; mask >>= 1) { - while(ARM_DWT_CYCCNT - cyc < CYCLES_800); - cyc = ARM_DWT_CYCCNT; - *set = 1; - if(pix & mask) { - while(ARM_DWT_CYCCNT - cyc < CYCLES_800_T1H); - } else { - while(ARM_DWT_CYCCNT - cyc < CYCLES_800_T0H); - } - *clr = 1; - } - } - while(ARM_DWT_CYCCNT - cyc < CYCLES_800); -#ifdef NEO_KHZ400 - } else { // 400 kHz bitstream - cyc = ARM_DWT_CYCCNT + CYCLES_400; - while(p < end) { - pix = *p++; - for(mask = 0x80; mask; mask >>= 1) { - while(ARM_DWT_CYCCNT - cyc < CYCLES_400); - cyc = ARM_DWT_CYCCNT; - *set = 1; - if(pix & mask) { - while(ARM_DWT_CYCCNT - cyc < CYCLES_400_T1H); - } else { - while(ARM_DWT_CYCCNT - cyc < CYCLES_400_T0H); - } - *clr = 1; - } - } - while(ARM_DWT_CYCCNT - cyc < CYCLES_400); - } -#endif - - - - - -#elif defined(__MKL26Z64__) // Teensy-LC - -#if F_CPU == 48000000 - uint8_t *p = pixels, - pix, count, dly, - bitmask = digitalPinToBitMask(pin); - volatile uint8_t *reg = portSetRegister(pin); - uint32_t num = numBytes; - asm volatile( - "L%=_begin:" "\n\t" - "ldrb %[pix], [%[p], #0]" "\n\t" - "lsl %[pix], #24" "\n\t" - "movs %[count], #7" "\n\t" - "L%=_loop:" "\n\t" - "lsl %[pix], #1" "\n\t" - "bcs L%=_loop_one" "\n\t" - "L%=_loop_zero:" - "strb %[bitmask], [%[reg], #0]" "\n\t" - "movs %[dly], #4" "\n\t" - "L%=_loop_delay_T0H:" "\n\t" - "sub %[dly], #1" "\n\t" - "bne L%=_loop_delay_T0H" "\n\t" - "strb %[bitmask], [%[reg], #4]" "\n\t" - "movs %[dly], #13" "\n\t" - "L%=_loop_delay_T0L:" "\n\t" - "sub %[dly], #1" "\n\t" - "bne L%=_loop_delay_T0L" "\n\t" - "b L%=_next" "\n\t" - "L%=_loop_one:" - "strb %[bitmask], [%[reg], #0]" "\n\t" - "movs %[dly], #13" "\n\t" - "L%=_loop_delay_T1H:" "\n\t" - "sub %[dly], #1" "\n\t" - "bne L%=_loop_delay_T1H" "\n\t" - "strb %[bitmask], [%[reg], #4]" "\n\t" - "movs %[dly], #4" "\n\t" - "L%=_loop_delay_T1L:" "\n\t" - "sub %[dly], #1" "\n\t" - "bne L%=_loop_delay_T1L" "\n\t" - "nop" "\n\t" - "L%=_next:" "\n\t" - "sub %[count], #1" "\n\t" - "bne L%=_loop" "\n\t" - "lsl %[pix], #1" "\n\t" - "bcs L%=_last_one" "\n\t" - "L%=_last_zero:" - "strb %[bitmask], [%[reg], #0]" "\n\t" - "movs %[dly], #4" "\n\t" - "L%=_last_delay_T0H:" "\n\t" - "sub %[dly], #1" "\n\t" - "bne L%=_last_delay_T0H" "\n\t" - "strb %[bitmask], [%[reg], #4]" "\n\t" - "movs %[dly], #10" "\n\t" - "L%=_last_delay_T0L:" "\n\t" - "sub %[dly], #1" "\n\t" - "bne L%=_last_delay_T0L" "\n\t" - "b L%=_repeat" "\n\t" - "L%=_last_one:" - "strb %[bitmask], [%[reg], #0]" "\n\t" - "movs %[dly], #13" "\n\t" - "L%=_last_delay_T1H:" "\n\t" - "sub %[dly], #1" "\n\t" - "bne L%=_last_delay_T1H" "\n\t" - "strb %[bitmask], [%[reg], #4]" "\n\t" - "movs %[dly], #1" "\n\t" - "L%=_last_delay_T1L:" "\n\t" - "sub %[dly], #1" "\n\t" - "bne L%=_last_delay_T1L" "\n\t" - "nop" "\n\t" - "L%=_repeat:" "\n\t" - "add %[p], #1" "\n\t" - "sub %[num], #1" "\n\t" - "bne L%=_begin" "\n\t" - "L%=_done:" "\n\t" - : [p] "+r" (p), - [pix] "=&r" (pix), - [count] "=&r" (count), - [dly] "=&r" (dly), - [num] "+r" (num) - : [bitmask] "r" (bitmask), - [reg] "r" (reg) - ); -#else -#error "Sorry, only 48 MHz is supported, please set Tools > CPU Speed to 48 MHz" -#endif - - -#else // Arduino Due - - #define SCALE VARIANT_MCK / 2UL / 1000000UL - #define INST (2UL * F_CPU / VARIANT_MCK) - #define TIME_800_0 ((int)(0.40 * SCALE + 0.5) - (5 * INST)) - #define TIME_800_1 ((int)(0.80 * SCALE + 0.5) - (5 * INST)) - #define PERIOD_800 ((int)(1.25 * SCALE + 0.5) - (5 * INST)) - #define TIME_400_0 ((int)(0.50 * SCALE + 0.5) - (5 * INST)) - #define TIME_400_1 ((int)(1.20 * SCALE + 0.5) - (5 * INST)) - #define PERIOD_400 ((int)(2.50 * SCALE + 0.5) - (5 * INST)) - - int pinMask, time0, time1, period, t; - Pio *port; - volatile WoReg *portSet, *portClear, *timeValue, *timeReset; - uint8_t *p, *end, pix, mask; - - pmc_set_writeprotect(false); - pmc_enable_periph_clk((uint32_t)TC3_IRQn); - TC_Configure(TC1, 0, - TC_CMR_WAVE | TC_CMR_WAVSEL_UP | TC_CMR_TCCLKS_TIMER_CLOCK1); - TC_Start(TC1, 0); - - pinMask = g_APinDescription[pin].ulPin; // Don't 'optimize' these into - port = g_APinDescription[pin].pPort; // declarations above. Want to - portSet = &(port->PIO_SODR); // burn a few cycles after - portClear = &(port->PIO_CODR); // starting timer to minimize - timeValue = &(TC1->TC_CHANNEL[0].TC_CV); // the initial 'while'. - timeReset = &(TC1->TC_CHANNEL[0].TC_CCR); - p = pixels; - end = p + numBytes; - pix = *p++; - mask = 0x80; - -#ifdef NEO_KHZ400 - if((type & NEO_SPDMASK) == NEO_KHZ800) { // 800 KHz bitstream -#endif - time0 = TIME_800_0; - time1 = TIME_800_1; - period = PERIOD_800; -#ifdef NEO_KHZ400 - } else { // 400 KHz bitstream - time0 = TIME_400_0; - time1 = TIME_400_1; - period = PERIOD_400; - } -#endif - - for(t = time0;; t = time0) { - if(pix & mask) t = time1; - while(*timeValue < period); - *portSet = pinMask; - *timeReset = TC_CCR_CLKEN | TC_CCR_SWTRG; - while(*timeValue < t); - *portClear = pinMask; - if(!(mask >>= 1)) { // This 'inside-out' loop logic utilizes - if(p >= end) break; // idle time to minimize inter-byte delays. - pix = *p++; - mask = 0x80; - } - } - while(*timeValue < period); // Wait for last bit - TC_Stop(TC1, 0); - -#endif // end Arduino Due - -#endif // end Architecture select - - interrupts(); - endTime = micros(); // Save EOD time for latch on next call -} - -// Set the output pin number -void Adafruit_NeoPixel::setPin(uint8_t p) { - pinMode(pin, INPUT); - pin = p; - pinMode(p, OUTPUT); - digitalWrite(p, LOW); -#ifdef __AVR__ - port = portOutputRegister(digitalPinToPort(p)); - pinMask = digitalPinToBitMask(p); -#endif -} - -// Set pixel color from separate R,G,B components: -void Adafruit_NeoPixel::setPixelColor( - uint16_t n, uint8_t r, uint8_t g, uint8_t b) { - if(n < numLEDs) { - if(brightness) { // See notes in setBrightness() - r = (r * brightness) >> 8; - g = (g * brightness) >> 8; - b = (b * brightness) >> 8; - } - uint8_t *p = &pixels[n * 3]; - p[rOffset] = r; - p[gOffset] = g; - p[bOffset] = b; - } -} - -// Set pixel color from 'packed' 32-bit RGB color: -void Adafruit_NeoPixel::setPixelColor(uint16_t n, uint32_t c) { - if(n < numLEDs) { - uint8_t - r = (uint8_t)(c >> 16), - g = (uint8_t)(c >> 8), - b = (uint8_t)c; - if(brightness) { // See notes in setBrightness() - r = (r * brightness) >> 8; - g = (g * brightness) >> 8; - b = (b * brightness) >> 8; - } - uint8_t *p = &pixels[n * 3]; - p[rOffset] = r; - p[gOffset] = g; - p[bOffset] = b; - } -} - -// Convert separate R,G,B into packed 32-bit RGB color. -// Packed format is always RGB, regardless of LED strand color order. -uint32_t Adafruit_NeoPixel::Color(uint8_t r, uint8_t g, uint8_t b) { - return ((uint32_t)r << 16) | ((uint32_t)g << 8) | b; -} - -// Query color from previously-set pixel (returns packed 32-bit RGB value) -uint32_t Adafruit_NeoPixel::getPixelColor(uint16_t n) const { - if(n >= numLEDs) { - // Out of bounds, return no color. - return 0; - } - uint8_t *p = &pixels[n * 3]; - uint32_t c = ((uint32_t)p[rOffset] << 16) | - ((uint32_t)p[gOffset] << 8) | - (uint32_t)p[bOffset]; - // Adjust this back up to the true color, as setting a pixel color will - // scale it back down again. - if(brightness) { // See notes in setBrightness() - //Cast the color to a byte array - uint8_t * c_ptr =reinterpret_cast(&c); - c_ptr[0] = (c_ptr[0] << 8)/brightness; - c_ptr[1] = (c_ptr[1] << 8)/brightness; - c_ptr[2] = (c_ptr[2] << 8)/brightness; - } - return c; // Pixel # is out of bounds -} - -// Returns pointer to pixels[] array. Pixel data is stored in device- -// native format and is not translated here. Application will need to be -// aware whether pixels are RGB vs. GRB and handle colors appropriately. -uint8_t *Adafruit_NeoPixel::getPixels(void) const { - return pixels; -} - -uint16_t Adafruit_NeoPixel::numPixels(void) const { - return numLEDs; -} - -// Adjust output brightness; 0=darkest (off), 255=brightest. This does -// NOT immediately affect what's currently displayed on the LEDs. The -// next call to show() will refresh the LEDs at this level. However, -// this process is potentially "lossy," especially when increasing -// brightness. The tight timing in the WS2811/WS2812 code means there -// aren't enough free cycles to perform this scaling on the fly as data -// is issued. So we make a pass through the existing color data in RAM -// and scale it (subsequent graphics commands also work at this -// brightness level). If there's a significant step up in brightness, -// the limited number of steps (quantization) in the old data will be -// quite visible in the re-scaled version. For a non-destructive -// change, you'll need to re-render the full strip data. C'est la vie. -void Adafruit_NeoPixel::setBrightness(uint8_t b) { - // Stored brightness value is different than what's passed. - // This simplifies the actual scaling math later, allowing a fast - // 8x8-bit multiply and taking the MSB. 'brightness' is a uint8_t, - // adding 1 here may (intentionally) roll over...so 0 = max brightness - // (color values are interpreted literally; no scaling), 1 = min - // brightness (off), 255 = just below max brightness. - uint8_t newBrightness = b + 1; - if(newBrightness != brightness) { // Compare against prior value - // Brightness has changed -- re-scale existing data in RAM - uint8_t c, - *ptr = pixels, - oldBrightness = brightness - 1; // De-wrap old brightness value - uint16_t scale; - if(oldBrightness == 0) scale = 0; // Avoid /0 - else if(b == 255) scale = 65535 / oldBrightness; - else scale = (((uint16_t)newBrightness << 8) - 1) / oldBrightness; - for(uint16_t i=0; i> 8; - } - brightness = newBrightness; - } -} - -//Return the brightness value -uint8_t Adafruit_NeoPixel::getBrightness(void) const { - return brightness - 1; -} - -void Adafruit_NeoPixel::clear() { - memset(pixels, 0, numBytes); -} diff --git a/libraries/Adafruit_NeoPixel/Adafruit_NeoPixel.h b/libraries/Adafruit_NeoPixel/Adafruit_NeoPixel.h deleted file mode 100755 index 264c199..0000000 --- a/libraries/Adafruit_NeoPixel/Adafruit_NeoPixel.h +++ /dev/null @@ -1,97 +0,0 @@ -/*-------------------------------------------------------------------- - This file is part of the Adafruit NeoPixel library. - - NeoPixel is free software: you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as - published by the Free Software Foundation, either version 3 of - the License, or (at your option) any later version. - - NeoPixel is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with NeoPixel. If not, see - . - --------------------------------------------------------------------*/ - -#ifndef ADAFRUIT_NEOPIXEL_H -#define ADAFRUIT_NEOPIXEL_H - -#if (ARDUINO >= 100) - #include -#else - #include - #include -#endif - -// 'type' flags for LED pixels (third parameter to constructor): -#define NEO_RGB 0x00 // Wired for RGB data order -#define NEO_GRB 0x01 // Wired for GRB data order -#define NEO_BRG 0x04 - -#define NEO_COLMASK 0x01 -#define NEO_KHZ800 0x02 // 800 KHz datastream -#define NEO_SPDMASK 0x02 -// Trinket flash space is tight, v1 NeoPixels aren't handled by default. -// Remove the ifndef/endif to add support -- but code will be bigger. -// Conversely, can comment out the #defines to save space on other MCUs. -#ifndef __AVR_ATtiny85__ -#define NEO_KHZ400 0x00 // 400 KHz datastream -#endif - -class Adafruit_NeoPixel { - - public: - - // Constructor: number of LEDs, pin number, LED type - Adafruit_NeoPixel(uint16_t n, uint8_t p=6, uint8_t t=NEO_GRB + NEO_KHZ800); - ~Adafruit_NeoPixel(); - - void - begin(void), - show(void), - setPin(uint8_t p), - setPixelColor(uint16_t n, uint8_t r, uint8_t g, uint8_t b), - setPixelColor(uint16_t n, uint32_t c), - setBrightness(uint8_t), - clear(); - uint8_t - *getPixels(void) const, - getBrightness(void) const; - uint16_t - numPixels(void) const; - static uint32_t - Color(uint8_t r, uint8_t g, uint8_t b); - uint32_t - getPixelColor(uint16_t n) const; - inline bool - canShow(void) { return (micros() - endTime) >= 50L; } - - private: - - const uint16_t - numLEDs, // Number of RGB LEDs in strip - numBytes; // Size of 'pixels' buffer below - uint8_t - pin, // Output pin number - brightness, - *pixels, // Holds LED color values (3 bytes each) - rOffset, // Index of red byte within each 3-byte pixel - gOffset, // Index of green byte - bOffset; // Index of blue byte - const uint8_t - type; // Pixel flags (400 vs 800 KHz, RGB vs GRB color) - uint32_t - endTime; // Latch timing reference -#ifdef __AVR__ - const volatile uint8_t - *port; // Output PORT register - uint8_t - pinMask; // Output PORT bitmask -#endif - -}; - -#endif // ADAFRUIT_NEOPIXEL_H diff --git a/libraries/Adafruit_NeoPixel/COPYING b/libraries/Adafruit_NeoPixel/COPYING deleted file mode 100755 index 7dcf8e8..0000000 --- a/libraries/Adafruit_NeoPixel/COPYING +++ /dev/null @@ -1,794 +0,0 @@ - - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - - -LGPL ADDENDUM: - - - - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. diff --git a/libraries/Adafruit_NeoPixel/README.md b/libraries/Adafruit_NeoPixel/README.md deleted file mode 100755 index 2eeda47..0000000 --- a/libraries/Adafruit_NeoPixel/README.md +++ /dev/null @@ -1,12 +0,0 @@ -Adafruit NeoPixel library -========================= - -Arduino library for controlling single-wire-based LED pixels and strip such as the [Adafruit 60 LED/meter Digital LED strip][strip], the [Adafruit FLORA RGB Smart Pixel][flora], the [Adafruit Breadboard-friendly RGB Smart Pixel][pixel], the [Adafruit NeoPixel Stick][stick], and the [Adafruit NeoPixel Shield][shield]. - -After downloading, rename folder to 'Adafruit_NeoPixel' and install in Arduino Libraries folder. Restart Arduino IDE, then open File->Sketchbook->Library->Adafruit_NeoPixel->strandtest sketch. - -[flora]: http://adafruit.com/products/1060 -[strip]: http://adafruit.com/products/1138 -[pixel]: http://adafruit.com/products/1312 -[stick]: http://adafruit.com/products/1426 -[shield]: http://adafruit.com/products/1430 diff --git a/libraries/Adafruit_NeoPixel/examples/buttoncycler/buttoncycler.ino b/libraries/Adafruit_NeoPixel/examples/buttoncycler/buttoncycler.ino deleted file mode 100755 index 45d9c6a..0000000 --- a/libraries/Adafruit_NeoPixel/examples/buttoncycler/buttoncycler.ino +++ /dev/null @@ -1,165 +0,0 @@ -// This is a demonstration on how to use an input device to trigger changes on your neo pixels. -// You should wire a momentary push button to connect from ground to a digital IO pin. When you -// press the button it will change to a new pixel animation. Note that you need to press the -// button once to start the first animation! - -#include - -#define BUTTON_PIN 2 // Digital IO pin connected to the button. This will be - // driven with a pull-up resistor so the switch should - // pull the pin to ground momentarily. On a high -> low - // transition the button press logic will execute. - -#define PIXEL_PIN 6 // Digital IO pin connected to the NeoPixels. - -#define PIXEL_COUNT 16 - -// Parameter 1 = number of pixels in strip, neopixel stick has 8 -// Parameter 2 = pin number (most are valid) -// Parameter 3 = pixel type flags, add together as needed: -// NEO_RGB Pixels are wired for RGB bitstream -// NEO_GRB Pixels are wired for GRB bitstream, correct for neopixel stick -// NEO_KHZ400 400 KHz bitstream (e.g. FLORA pixels) -// NEO_KHZ800 800 KHz bitstream (e.g. High Density LED strip), correct for neopixel stick -Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, NEO_GRB + NEO_KHZ800); - -bool oldState = HIGH; -int showType = 0; - -void setup() { - pinMode(BUTTON_PIN, INPUT_PULLUP); - strip.begin(); - strip.show(); // Initialize all pixels to 'off' -} - -void loop() { - // Get current button state. - bool newState = digitalRead(BUTTON_PIN); - - // Check if state changed from high to low (button press). - if (newState == LOW && oldState == HIGH) { - // Short delay to debounce button. - delay(20); - // Check if button is still low after debounce. - newState = digitalRead(BUTTON_PIN); - if (newState == LOW) { - showType++; - if (showType > 9) - showType=0; - startShow(showType); - } - } - - // Set the last button state to the old state. - oldState = newState; -} - -void startShow(int i) { - switch(i){ - case 0: colorWipe(strip.Color(0, 0, 0), 50); // Black/off - break; - case 1: colorWipe(strip.Color(255, 0, 0), 50); // Red - break; - case 2: colorWipe(strip.Color(0, 255, 0), 50); // Green - break; - case 3: colorWipe(strip.Color(0, 0, 255), 50); // Blue - break; - case 4: theaterChase(strip.Color(127, 127, 127), 50); // White - break; - case 5: theaterChase(strip.Color(127, 0, 0), 50); // Red - break; - case 6: theaterChase(strip.Color( 0, 0, 127), 50); // Blue - break; - case 7: rainbow(20); - break; - case 8: rainbowCycle(20); - break; - case 9: theaterChaseRainbow(50); - break; - } -} - -// Fill the dots one after the other with a color -void colorWipe(uint32_t c, uint8_t wait) { - for(uint16_t i=0; i -#include - -// Which pin on the Arduino is connected to the NeoPixels? -// On a Trinket or Gemma we suggest changing this to 1 -#define PIN 6 - -// How many NeoPixels are attached to the Arduino? -#define NUMPIXELS 16 - -// When we setup the NeoPixel library, we tell it how many pixels, and which pin to use to send signals. -// Note that for older NeoPixel strips you might need to change the third parameter--see the strandtest -// example for more information on possible values. -Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); - -int delayval = 500; // delay for half a second - -void setup() { - // This is for Trinket 5V 16MHz, you can remove these three lines if you are not using a Trinket -#if defined (__AVR_ATtiny85__) - if (F_CPU == 16000000) clock_prescale_set(clock_div_1); -#endif - // End of trinket special code - - pixels.begin(); // This initializes the NeoPixel library. -} - -void loop() { - - // For a set of NeoPixels the first NeoPixel is 0, second is 1, all the way up to the count of pixels minus one. - - for(int i=0;i -#include - -#define PIN 6 - -// Parameter 1 = number of pixels in strip -// Parameter 2 = Arduino pin number (most are valid) -// Parameter 3 = pixel type flags, add together as needed: -// NEO_KHZ800 800 KHz bitstream (most NeoPixel products w/WS2812 LEDs) -// NEO_KHZ400 400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers) -// NEO_GRB Pixels are wired for GRB bitstream (most NeoPixel products) -// NEO_RGB Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2) -Adafruit_NeoPixel strip = Adafruit_NeoPixel(60, PIN, NEO_GRB + NEO_KHZ800); - -// IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across -// pixel power leads, add 300 - 500 Ohm resistor on first pixel's data input -// and minimize distance between Arduino and first pixel. Avoid connecting -// on a live circuit...if you must, connect GND first. - -void setup() { - // This is for Trinket 5V 16MHz, you can remove these three lines if you are not using a Trinket -#if defined (__AVR_ATtiny85__) - if (F_CPU == 16000000) clock_prescale_set(clock_div_1); -#endif - // End of trinket special code - - - strip.begin(); - strip.show(); // Initialize all pixels to 'off' -} - -void loop() { - // Some example procedures showing how to display to the pixels: - colorWipe(strip.Color(255, 0, 0), 50); // Red - colorWipe(strip.Color(0, 255, 0), 50); // Green - colorWipe(strip.Color(0, 0, 255), 50); // Blue - // Send a theater pixel chase in... - theaterChase(strip.Color(127, 127, 127), 50); // White - theaterChase(strip.Color(127, 0, 0), 50); // Red - theaterChase(strip.Color( 0, 0, 127), 50); // Blue - - rainbow(20); - rainbowCycle(20); - theaterChaseRainbow(50); -} - -// Fill the dots one after the other with a color -void colorWipe(uint32_t c, uint8_t wait) { - for(uint16_t i=0; i -sentence=Arduino library for controlling single-wire-based LED pixels and strip. -paragraph=Arduino library for controlling single-wire-based LED pixels and strip. -category=Display -url=https://github.com/adafruit/Adafruit_NeoPixel -architectures=* diff --git a/libraries/BH1750/BH1750.cpp b/libraries/BH1750/BH1750.cpp deleted file mode 100644 index b9ff09c..0000000 --- a/libraries/BH1750/BH1750.cpp +++ /dev/null @@ -1,97 +0,0 @@ -/* - -This is a library for the BH1750FVI Digital Light Sensor -breakout board. - -The board uses I2C for communication. 2 pins are required to -interface to the device. - - -Written by Christopher Laws, March, 2013. - -*/ - -#include "BH1750.h" -#include - - -BH1750::BH1750() { -} - -void BH1750::begin(uint8_t mode) { - - Wire.begin(); - //write8(mode); - configure(mode); -} - - -void BH1750::configure(uint8_t mode) { - - switch (mode) { - case BH1750_CONTINUOUS_HIGH_RES_MODE: - case BH1750_CONTINUOUS_HIGH_RES_MODE_2: - case BH1750_CONTINUOUS_LOW_RES_MODE: - case BH1750_ONE_TIME_HIGH_RES_MODE: - case BH1750_ONE_TIME_HIGH_RES_MODE_2: - case BH1750_ONE_TIME_LOW_RES_MODE: - // apply a valid mode change - write8(mode); - _delay_ms(10); - break; - default: - // Invalid measurement mode - #if BH1750_DEBUG == 1 - Serial.println("Invalid measurement mode"); - #endif - break; - } -} - - -uint16_t BH1750::readLightLevel(void) { - - uint16_t level; - - Wire.beginTransmission(BH1750_I2CADDR); - Wire.requestFrom(BH1750_I2CADDR, 2); -#if (ARDUINO >= 100) - level = Wire.read(); - level <<= 8; - level |= Wire.read(); -#else - level = Wire.receive(); - level <<= 8; - level |= Wire.receive(); -#endif - Wire.endTransmission(); - -#if BH1750_DEBUG == 1 - Serial.print("Raw light level: "); - Serial.println(level); -#endif - - level = level/1.2; // convert to lux - -#if BH1750_DEBUG == 1 - Serial.print("Light level: "); - Serial.println(level); -#endif - return level; -} - - - -/*********************************************************************/ - - -void BH1750::write8(uint8_t d) { - Wire.beginTransmission(BH1750_I2CADDR); -#if (ARDUINO >= 100) - Wire.write(d); -#else - Wire.send(d); -#endif - Wire.endTransmission(); -} - diff --git a/libraries/BH1750/BH1750.h b/libraries/BH1750/BH1750.h deleted file mode 100644 index 176db0b..0000000 --- a/libraries/BH1750/BH1750.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - -This is a library for the BH1750FVI Digital Light Sensor -breakout board. - -The board uses I2C for communication. 2 pins are required to -interface to the device. - -Datasheet: -http://rohmfs.rohm.com/en/products/databook/datasheet/ic/sensor/light/bh1750fvi-e.pdf - -Written by Christopher Laws, March, 2013. - -*/ - -#ifndef BH1750_h -#define BH1750_h - -#if (ARDUINO >= 100) -#include -#else -#include -#endif -#include "Wire.h" - -#define BH1750_DEBUG 0 - -#define BH1750_I2CADDR 0x23 - -// No active state -#define BH1750_POWER_DOWN 0x00 - -// Wating for measurment command -#define BH1750_POWER_ON 0x01 - -// Reset data register value - not accepted in POWER_DOWN mode -#define BH1750_RESET 0x07 - -// Start measurement at 1lx resolution. Measurement time is approx 120ms. -#define BH1750_CONTINUOUS_HIGH_RES_MODE 0x10 - -// Start measurement at 0.5lx resolution. Measurement time is approx 120ms. -#define BH1750_CONTINUOUS_HIGH_RES_MODE_2 0x11 - -// Start measurement at 4lx resolution. Measurement time is approx 16ms. -#define BH1750_CONTINUOUS_LOW_RES_MODE 0x13 - -// Start measurement at 1lx resolution. Measurement time is approx 120ms. -// Device is automatically set to Power Down after measurement. -#define BH1750_ONE_TIME_HIGH_RES_MODE 0x20 - -// Start measurement at 0.5lx resolution. Measurement time is approx 120ms. -// Device is automatically set to Power Down after measurement. -#define BH1750_ONE_TIME_HIGH_RES_MODE_2 0x21 - -// Start measurement at 1lx resolution. Measurement time is approx 120ms. -// Device is automatically set to Power Down after measurement. -#define BH1750_ONE_TIME_LOW_RES_MODE 0x23 - -class BH1750 { - public: - BH1750(); - void begin(uint8_t mode = BH1750_CONTINUOUS_HIGH_RES_MODE); - void configure(uint8_t mode); - uint16_t readLightLevel(void); - - private: - void write8(uint8_t data); - -}; - -#endif \ No newline at end of file diff --git a/libraries/BH1750/README.md b/libraries/BH1750/README.md deleted file mode 100644 index 6995742..0000000 --- a/libraries/BH1750/README.md +++ /dev/null @@ -1,58 +0,0 @@ -BH1750 -====== - -An Arduino library for digital light sensor breakout boards containing the BH1750FVI IC. - -The board uses I2C for communication. - -2 pins are required to interface to the device. - -Datasheet for the light sensor: -http://rohmfs.rohm.com/en/products/databook/datasheet/ic/sensor/light/bh1750fvi-e.pdf - - -To download, click the ZIP button above. Extract the zip file and rename the uncompressed folder to BH1750. Check that it contains BH1750.cpp and BH1750.h, keywords.txt. - -Place the BH1750 library folder your <arduinosketchfolder>/libraries/ folder. Restart the IDE. - - -Example usage: -```c -/* - -Example of BH1750 library usage. - -This example initalises the BH1750 object using the default -high resolution mode and then makes a light level reading every second. - -Connection: - VCC-5v - GND-GND - SCL-SCL(analog pin 5) - SDA-SDA(analog pin 4) - ADD-NC or GND - -*/ - -#include -#include - - -BH1750 lightMeter; - - -void setup(){ - Serial.begin(9600); - lightMeter.begin(); - Serial.println("Running..."); -} - - -void loop() { - uint16_t lux = lightMeter.readLightLevel(); - Serial.print("Light: "); - Serial.print(lux); - Serial.println(" lx"); - delay(1000); -} -``` diff --git a/libraries/BH1750/examples/BH1750test/BH1750test.pde b/libraries/BH1750/examples/BH1750test/BH1750test.pde deleted file mode 100644 index 2b601be..0000000 --- a/libraries/BH1750/examples/BH1750test/BH1750test.pde +++ /dev/null @@ -1,37 +0,0 @@ -/* - -Example of BH1750 library usage. - -This example initalises the BH1750 object using the default -high resolution mode and then makes a light level reading every second. - -Connection: - VCC-5v - GND-GND - SCL-SCL(analog pin 5) - SDA-SDA(analog pin 4) - ADD-NC or GND - -*/ - -#include -#include - - -BH1750 lightMeter; - - -void setup(){ - Serial.begin(9600); - lightMeter.begin(); - Serial.println("Running..."); -} - - -void loop() { - uint16_t lux = lightMeter.readLightLevel(); - Serial.print("Light: "); - Serial.print(lux); - Serial.println(" lx"); - delay(1000); -} \ No newline at end of file diff --git a/libraries/BH1750/keywords.txt b/libraries/BH1750/keywords.txt deleted file mode 100644 index febeef4..0000000 --- a/libraries/BH1750/keywords.txt +++ /dev/null @@ -1,27 +0,0 @@ -####################################### -# Syntax Coloring Map For BH1750 -####################################### - -####################################### -# Datatypes (KEYWORD1) -####################################### - -BH1750 KEYWORD1 - -####################################### -# Methods and Functions (KEYWORD2) -####################################### - -begin KEYWORD2 -configure KEYWORD2 -readLightLevel KEYWORD2 - - -####################################### -# Instances (KEYWORD2) -####################################### - - -####################################### -# Constants (LITERAL1) -####################################### \ No newline at end of file diff --git a/libraries/Bounce2/Bounce2.cpp b/libraries/Bounce2/Bounce2.cpp deleted file mode 100644 index 1d3b1f9..0000000 --- a/libraries/Bounce2/Bounce2.cpp +++ /dev/null @@ -1,84 +0,0 @@ - -// Please read Bounce.h for information about the liscence and authors - -#if defined(ARDUINO) && ARDUINO >= 100 -#include "Arduino.h" -#else -#include "WProgram.h" -#endif -#include "Bounce2.h" - - - -Bounce::Bounce() { - this->interval_millis = 10; - -} - -void Bounce::attach(int pin) { - this->pin = pin; - debouncedState = unstableState = digitalRead(pin); - #ifdef BOUNCE_LOCK_OUT - previous_millis = 0; - #else - previous_millis = millis(); - #endif -} - - - -void Bounce::interval(unsigned long interval_millis) -{ - this->interval_millis = interval_millis; - -} - - -bool Bounce::update() -{ - -#ifdef BOUNCE_LOCK_OUT - stateChanged = false; - // Ignore everything if we are locked out - if (millis() - previous_millis >= interval_millis) { - uint8_t currentState = digitalRead(pin); - if (debouncedState != currentState ) { - previous_millis = millis(); - debouncedState = currentState; - stateChanged = true; - } - } - return stateChanged; - -#else - // Lire l'etat de l'interrupteur dans une variable temporaire. - uint8_t currentState = digitalRead(pin); - stateChanged = false; - - // Redemarrer le compteur timeStamp tant et aussi longtemps que - // la lecture ne se stabilise pas. - if ( currentState != unstableState ) { - previous_millis = millis(); - } else if ( millis() - previous_millis >= interval_millis ) { - // Rendu ici, la lecture est stable - - // Est-ce que la lecture est différente de l'etat emmagasine de l'interrupteur? - if ( currentState != debouncedState ) { - debouncedState = currentState; - stateChanged = true; - - } - - } - - unstableState = currentState; - return stateChanged; -#endif - -} - -uint8_t Bounce::read() -{ - return debouncedState; -} - diff --git a/libraries/Bounce2/Bounce2.h b/libraries/Bounce2/Bounce2.h deleted file mode 100644 index 86c1520..0000000 --- a/libraries/Bounce2/Bounce2.h +++ /dev/null @@ -1,64 +0,0 @@ - -/* - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301, USA. - */ - - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * - Main code by Thomas O Fredericks (tof@t-o-f.info) - Previous contributions by Eric Lowry, Jim Schimpf and Tom Harkaway -* * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -// Uncomment the following line for "LOCK-OUT" debounce method -//#define BOUNCE_LOCK_OUT - - -#ifndef Bounce2_h -#define Bounce2_h - -#include - -class Bounce -{ - -public: - // Create an instance of the bounce library - Bounce(); - // Attach to a pin (and also sets initial state) - void attach(int pin); - // Sets the debounce interval - void interval(unsigned long interval_millis); - // Updates the pin - // Returns 1 if the state changed - // Returns 0 if the state did not change - bool update(); - // Returns the updated pin state - uint8_t read(); - - -protected: - int debounce(); - unsigned long previous_millis, interval_millis; - uint8_t debouncedState; - uint8_t unstableState; - uint8_t pin; - uint8_t stateChanged; -}; - -#endif - - diff --git a/libraries/Bounce2/LICENSE b/libraries/Bounce2/LICENSE deleted file mode 100644 index f945b53..0000000 --- a/libraries/Bounce2/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2013 thomasfredericks - -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. diff --git a/libraries/Bounce2/README.md b/libraries/Bounce2/README.md deleted file mode 100644 index bd90445..0000000 --- a/libraries/Bounce2/README.md +++ /dev/null @@ -1 +0,0 @@ -Please visit https://github.com/thomasfredericks/Bounce-Arduino-Wiring for latest code and documentation. \ No newline at end of file diff --git a/libraries/Bounce2/examples/bounce/bounce.ino b/libraries/Bounce2/examples/bounce/bounce.ino deleted file mode 100644 index a845848..0000000 --- a/libraries/Bounce2/examples/bounce/bounce.ino +++ /dev/null @@ -1,52 +0,0 @@ -#include - -/* -DESCRIPTION -==================== -Simple example of the bounce library that switches the debug LED when a button is pressed. - -CIRCUIT -==================== -https://raw.github.com/thomasfredericks/Bounce-Arduino-Wiring/master/Bounce/examples/circuit-bounce-change-duration-retrigger.png -*/ - - -#define BUTTON_PIN 2 -#define LED_PIN 13 - - - -// Instantiate a Bounce object -Bounce debouncer = Bounce(); - -void setup() { - // Setup the button - pinMode(BUTTON_PIN,INPUT); - // Activate internal pull-up - digitalWrite(BUTTON_PIN,HIGH); - - // After setting up the button, setup debouncer - debouncer.attach(BUTTON_PIN); - debouncer.interval(5); - - //Setup the LED - pinMode(LED_PIN,OUTPUT); - -} - -void loop() { - // Update the debouncer - debouncer.update(); - - // Get the update value - int value = debouncer.read(); - - // Turn on or off the LED - if ( value == HIGH) { - digitalWrite(LED_PIN, HIGH ); - } else { - digitalWrite(LED_PIN, LOW ); - } - -} - diff --git a/libraries/Bounce2/examples/change/change.ino b/libraries/Bounce2/examples/change/change.ino deleted file mode 100644 index 93f5703..0000000 --- a/libraries/Bounce2/examples/change/change.ino +++ /dev/null @@ -1,50 +0,0 @@ -#include - -// Detect the falling edge - -// Circuit : -// https://raw.github.com/thomasfredericks/Bounce-Arduino-Wiring/master/Bounce/examples/circuit-bounce-change-duration-retrigger.png - -#define BUTTON_PIN 2 -#define LED_PIN 13 - -int ledState = LOW; - - -// Instantiate a Bounce object -Bounce debouncer = Bounce(); - -void setup() { - // Setup the button - pinMode(BUTTON_PIN,INPUT); - digitalWrite(BUTTON_PIN,HIGH); - - // After setting up the button, setup Bounce object - debouncer.attach(BUTTON_PIN); - debouncer.interval(500); - - //Setup the LED - pinMode(LED_PIN,OUTPUT); - digitalWrite(LED_PIN,ledState); - -} - -void loop() { - - - boolean stateChanged = debouncer.update(); - int state = debouncer.read(); - - // Detect the falling edge - if ( stateChanged && state == LOW ) { - - if ( ledState == LOW ) { - ledState = HIGH; - } else { - ledState = LOW; - } - digitalWrite(LED_PIN,ledState); - - } -} - diff --git a/libraries/Bounce2/examples/circuit-bounce-change-duration-retrigger.png b/libraries/Bounce2/examples/circuit-bounce-change-duration-retrigger.png deleted file mode 100644 index 2e41148..0000000 Binary files a/libraries/Bounce2/examples/circuit-bounce-change-duration-retrigger.png and /dev/null differ diff --git a/libraries/Bounce2/examples/duration/duration.ino b/libraries/Bounce2/examples/duration/duration.ino deleted file mode 100644 index ec2796b..0000000 --- a/libraries/Bounce2/examples/duration/duration.ino +++ /dev/null @@ -1,78 +0,0 @@ -#include - -/* -DESCRIPTION -==================== -Simple example of the bounce library that sets three states for a button through the duration of the press. -Open the Serial Monitor (57600 baud) for debug messages. - -CIRCUIT -==================== -https://raw.github.com/thomasfredericks/Bounce-Arduino-Wiring/master/Bounce/examples/circuit-bounce-change-duration-retrigger.png -*/ - -#define BUTTON_PIN 2 -#define LED_PIN 13 - -// Instantiate a Bounce object -Bounce debouncer = Bounce(); - -// The current buttonState -// 0 : released -// 1 : pressed less than 2 seconds -// 2 : pressed longer than 2 seconds -int buttonState; -unsigned long buttonPressTimeStamp; - -void setup() { - - Serial.begin(57600); - - // Setup the button - pinMode(BUTTON_PIN,INPUT); - // Activate internal pull-up - digitalWrite(BUTTON_PIN,HIGH); - - // After setting up the button, setup debouncer - debouncer.attach(BUTTON_PIN); - debouncer.interval(5); - - //Setup the LED - pinMode(LED_PIN,OUTPUT); - -} - -void loop() { - // Update the debouncer and get the changed state - boolean changed = debouncer.update(); - - - - if ( changed ) { - // Get the update value - int value = debouncer.read(); - if ( value == HIGH) { - digitalWrite(LED_PIN, HIGH ); - - buttonState = 0; - Serial.println("Button released (state 0)"); - - } else { - digitalWrite(LED_PIN, LOW ); - buttonState = 1; - Serial.println("Button pressed (state 1)"); - buttonPressTimeStamp = millis(); - - } - } - - if ( buttonState == 1 ) { - if ( millis() - buttonPressTimeStamp >= 2000 ) { - buttonState = 2; - Serial.println("Button held for two seconds (state 2)"); - } - } - - -} - diff --git a/libraries/Bounce2/examples/retrigger/retrigger.ino b/libraries/Bounce2/examples/retrigger/retrigger.ino deleted file mode 100644 index f3153db..0000000 --- a/libraries/Bounce2/examples/retrigger/retrigger.ino +++ /dev/null @@ -1,85 +0,0 @@ -#include - -/* -DESCRIPTION -==================== -Simple example of the bounce library that shows how to retrigger an event when a button is held down. -In this case, the debug LED will blink every 500 ms as long as the button is held down. -Open the Serial Monitor (57600 baud) for debug messages. - -CIRCUIT -==================== -https://raw.github.com/thomasfredericks/Bounce-Arduino-Wiring/master/Bounce/examples/circuit-bounce-change-duration-retrigger.png -*/ - -#define BUTTON_PIN 2 -#define LED_PIN 13 - -// Instantiate a Bounce object -Bounce debouncer = Bounce(); - -int buttonState; -unsigned long buttonPressTimeStamp; - -int ledState; - -void setup() { - - Serial.begin(57600); - - // Setup the button - pinMode(BUTTON_PIN,INPUT); - // Activate internal pull-up - digitalWrite(BUTTON_PIN,HIGH); - - // After setting up the button, setup debouncer - debouncer.attach(BUTTON_PIN); - debouncer.interval(5); - - //Setup the LED - pinMode(LED_PIN,OUTPUT); - digitalWrite(LED_PIN,ledState); - -} - -void loop() { - // Update the debouncer and get the changed state - boolean changed = debouncer.update(); - - - - if ( changed ) { - // Get the update value - int value = debouncer.read(); - if ( value == HIGH) { - ledState = LOW; - digitalWrite(LED_PIN, ledState ); - - buttonState = 0; - Serial.println("Button released (state 0)"); - - } else { - ledState = HIGH; - digitalWrite(LED_PIN, ledState ); - - buttonState = 1; - Serial.println("Button pressed (state 1)"); - buttonPressTimeStamp = millis(); - - } - } - - if ( buttonState == 1 ) { - if ( millis() - buttonPressTimeStamp >= 500 ) { - buttonPressTimeStamp = millis(); - if ( ledState == HIGH ) ledState = LOW; - else if ( ledState == LOW ) ledState = HIGH; - digitalWrite(LED_PIN, ledState ); - Serial.println("Retriggering button"); - } - } - - -} - - diff --git a/libraries/DHT/DHT.cpp b/libraries/DHT/DHT.cpp deleted file mode 100644 index 1584d6a..0000000 --- a/libraries/DHT/DHT.cpp +++ /dev/null @@ -1,206 +0,0 @@ -/****************************************************************** - DHT Temperature & Humidity Sensor library for Arduino. - - Features: - - Support for DHT11 and DHT22/AM2302/RHT03 - - Auto detect sensor model - - Very low memory footprint - - Very small code - - http://www.github.com/markruys/arduino-DHT - - Written by Mark Ruys, mark@paracas.nl. - - BSD license, check license.txt for more information. - All text above must be included in any redistribution. - - Datasheets: - - http://www.micro4you.com/files/sensor/DHT11.pdf - - http://www.adafruit.com/datasheets/DHT22.pdf - - http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/Weather/RHT03.pdf - - http://meteobox.tk/files/AM2302.pdf - - Changelog: - 2013-06-10: Initial version - 2013-06-12: Refactored code - 2013-07-01: Add a resetTimer method - ******************************************************************/ - -#include "DHT.h" - -void DHT::setup(uint8_t pin, DHT_MODEL_t model) -{ - DHT::pin = pin; - DHT::model = model; - DHT::resetTimer(); // Make sure we do read the sensor in the next readSensor() - - if ( model == AUTO_DETECT) { - DHT::model = DHT22; - readSensor(); - if ( error == ERROR_TIMEOUT ) { - DHT::model = DHT11; - // Warning: in case we auto detect a DHT11, you should wait at least 1000 msec - // before your first read request. Otherwise you will get a time out error. - } - } -} - -void DHT::resetTimer() -{ - DHT::lastReadTime = millis() - 3000; -} - -float DHT::getHumidity() -{ - readSensor(); - return humidity; -} - -float DHT::getTemperature() -{ - readSensor(); - return temperature; -} - -#ifndef OPTIMIZE_SRAM_SIZE - -const char* DHT::getStatusString() -{ - switch ( error ) { - case DHT::ERROR_TIMEOUT: - return "TIMEOUT"; - - case DHT::ERROR_CHECKSUM: - return "CHECKSUM"; - - default: - return "OK"; - } -} - -#else - -// At the expense of 26 bytes of extra PROGMEM, we save 11 bytes of -// SRAM by using the following method: - -prog_char P_OK[] PROGMEM = "OK"; -prog_char P_TIMEOUT[] PROGMEM = "TIMEOUT"; -prog_char P_CHECKSUM[] PROGMEM = "CHECKSUM"; - -const char *DHT::getStatusString() { - prog_char *c; - switch ( error ) { - case DHT::ERROR_CHECKSUM: - c = P_CHECKSUM; break; - - case DHT::ERROR_TIMEOUT: - c = P_TIMEOUT; break; - - default: - c = P_OK; break; - } - - static char buffer[9]; - strcpy_P(buffer, c); - - return buffer; -} - -#endif - -void DHT::readSensor() -{ - // Make sure we don't poll the sensor too often - // - Max sample rate DHT11 is 1 Hz (duty cicle 1000 ms) - // - Max sample rate DHT22 is 0.5 Hz (duty cicle 2000 ms) - unsigned long startTime = millis(); - if ( (unsigned long)(startTime - lastReadTime) < (model == DHT11 ? 999L : 1999L) ) { - return; - } - lastReadTime = startTime; - - temperature = NAN; - humidity = NAN; - - // Request sample - - digitalWrite(pin, LOW); // Send start signal - pinMode(pin, OUTPUT); - if ( model == DHT11 ) { - delay(18); - } - else { - // This will fail for a DHT11 - that's how we can detect such a device - delayMicroseconds(800); - } - - pinMode(pin, INPUT); - digitalWrite(pin, HIGH); // Switch bus to receive data - - // We're going to read 83 edges: - // - First a FALLING, RISING, and FALLING edge for the start bit - // - Then 40 bits: RISING and then a FALLING edge per bit - // To keep our code simple, we accept any HIGH or LOW reading if it's max 85 usecs long - - word rawHumidity = 0; - word rawTemperature = 0; - word data = 0; - - for ( int8_t i = -3 ; i < 2 * 40; i++ ) { - byte age; - startTime = micros(); - - do { - age = (unsigned long)(micros() - startTime); - if ( age > 90 ) { - error = ERROR_TIMEOUT; - return; - } - } - while ( digitalRead(pin) == (i & 1) ? HIGH : LOW ); - - if ( i >= 0 && (i & 1) ) { - // Now we are being fed our 40 bits - data <<= 1; - - // A zero max 30 usecs, a one at least 68 usecs. - if ( age > 30 ) { - data |= 1; // we got a one - } - } - - switch ( i ) { - case 31: - rawHumidity = data; - break; - case 63: - rawTemperature = data; - data = 0; - break; - } - } - - // Verify checksum - - if ( (byte)(((byte)rawHumidity) + (rawHumidity >> 8) + ((byte)rawTemperature) + (rawTemperature >> 8)) != data ) { - error = ERROR_CHECKSUM; - return; - } - - // Store readings - - if ( model == DHT11 ) { - humidity = rawHumidity >> 8; - temperature = rawTemperature >> 8; - } - else { - humidity = rawHumidity * 0.1; - - if ( rawTemperature & 0x8000 ) { - rawTemperature = -(int16_t)(rawTemperature & 0x7FFF); - } - temperature = ((int16_t)rawTemperature) * 0.1; - } - - error = ERROR_NONE; -} diff --git a/libraries/DHT/DHT.h b/libraries/DHT/DHT.h deleted file mode 100644 index 9e24518..0000000 --- a/libraries/DHT/DHT.h +++ /dev/null @@ -1,96 +0,0 @@ -/****************************************************************** - DHT Temperature & Humidity Sensor library for Arduino. - - Features: - - Support for DHT11 and DHT22/AM2302/RHT03 - - Auto detect sensor model - - Very low memory footprint - - Very small code - - http://www.github.com/markruys/arduino-DHT - - Written by Mark Ruys, mark@paracas.nl. - - BSD license, check license.txt for more information. - All text above must be included in any redistribution. - - Datasheets: - - http://www.micro4you.com/files/sensor/DHT11.pdf - - http://www.adafruit.com/datasheets/DHT22.pdf - - http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/Weather/RHT03.pdf - - http://meteobox.tk/files/AM2302.pdf - - Changelog: - 2013-06-10: Initial version - 2013-06-12: Refactored code - 2013-07-01: Add a resetTimer method - ******************************************************************/ - -#ifndef dht_h -#define dht_h - -#if ARDUINO < 100 - #include -#else - #include -#endif - -class DHT -{ -public: - - typedef enum { - AUTO_DETECT, - DHT11, - DHT22, - AM2302, // Packaged DHT22 - RHT03 // Equivalent to DHT22 - } - DHT_MODEL_t; - - typedef enum { - ERROR_NONE = 0, - ERROR_TIMEOUT, - ERROR_CHECKSUM - } - DHT_ERROR_t; - - void setup(uint8_t pin, DHT_MODEL_t model=AUTO_DETECT); - void resetTimer(); - - float getTemperature(); - float getHumidity(); - - DHT_ERROR_t getStatus() { return error; }; - const char* getStatusString(); - - DHT_MODEL_t getModel() { return model; } - - int getMinimumSamplingPeriod() { return model == DHT11 ? 1000 : 2000; } - - int8_t getNumberOfDecimalsTemperature() { return model == DHT11 ? 0 : 1; }; - int8_t getLowerBoundTemperature() { return model == DHT11 ? 0 : -40; }; - int8_t getUpperBoundTemperature() { return model == DHT11 ? 50 : 125; }; - - int8_t getNumberOfDecimalsHumidity() { return 0; }; - int8_t getLowerBoundHumidity() { return model == DHT11 ? 20 : 0; }; - int8_t getUpperBoundHumidity() { return model == DHT11 ? 90 : 100; }; - - static float toFahrenheit(float fromCelcius) { return 1.8 * fromCelcius + 32.0; }; - static float toCelsius(float fromFahrenheit) { return (fromFahrenheit - 32.0) / 1.8; }; - -protected: - void readSensor(); - - float temperature; - float humidity; - - uint8_t pin; - -private: - DHT_MODEL_t model; - DHT_ERROR_t error; - unsigned long lastReadTime; -}; - -#endif /*dht_h*/ diff --git a/libraries/DHT/README.md b/libraries/DHT/README.md deleted file mode 100644 index 812f044..0000000 --- a/libraries/DHT/README.md +++ /dev/null @@ -1,49 +0,0 @@ -DHT -=== - -An Arduino library for reading the DHT family of temperature and humidity sensors. - -Written by Mark Ruys, . - -Features --------- - - Support for DHT11 and DHT22, AM2302, RHT03 - - Auto detect sensor model - - Low memory footprint - - Very small code - -Usage ------ - -``` -#include "DHT.h" - -DHT dht; - -void setup() -{ - Serial.begin(9600); - - dht.setup(2); // data pin 2 -} - -void loop() -{ - delay(dht.getMinimumSamplingPeriod()); - - Serial.print(dht.getHumidity()); - Serial.print("\t"); - Serial.print(dht.getTemperature()); -} -``` -Also check out the [example] how to read out your sensor. For all the options, see [dht.h][header]. - -Installation ------------- - -Place the [DHT][download] library folder in your `/libraries/` folder. You may need to create the `libraries` subfolder if its your first library. Restart the Arduino IDE. - -[download]: https://github.com/markruys/arduino-DHT/archive/master.zip "Download DHT library" -[example]: https://github.com/markruys/arduino-DHT/blob/master/examples/DHT_Test/DHT_Test.pde "Show DHT example" -[header]: https://github.com/markruys/arduino-DHT/blob/master/DHT.h "Show header file" - diff --git a/libraries/DHT/examples/DHT_Test/DHT_Test.pde b/libraries/DHT/examples/DHT_Test/DHT_Test.pde deleted file mode 100644 index e6afba3..0000000 --- a/libraries/DHT/examples/DHT_Test/DHT_Test.pde +++ /dev/null @@ -1,29 +0,0 @@ -#include "DHT.h" - -DHT dht; - -void setup() -{ - Serial.begin(9600); - Serial.println(); - Serial.println("Status\tHumidity (%)\tTemperature (C)\t(F)"); - - dht.setup(2); // data pin 2 -} - -void loop() -{ - delay(dht.getMinimumSamplingPeriod()); - - float humidity = dht.getHumidity(); - float temperature = dht.getTemperature(); - - Serial.print(dht.getStatusString()); - Serial.print("\t"); - Serial.print(humidity, 1); - Serial.print("\t\t"); - Serial.print(temperature, 1); - Serial.print("\t\t"); - Serial.println(dht.toFahrenheit(temperature), 1); -} - diff --git a/libraries/DHT/keywords.txt b/libraries/DHT/keywords.txt deleted file mode 100644 index c969b6f..0000000 --- a/libraries/DHT/keywords.txt +++ /dev/null @@ -1,42 +0,0 @@ -####################################### -# Syntax Coloring Map For DHT -####################################### - -####################################### -# Datatypes (KEYWORD1) -####################################### - -DHT KEYWORD1 - -####################################### -# Methods and Functions (KEYWORD2) -####################################### - -setup KEYWORD2 -getTemperature KEYWORD2 -getHumidity KEYWORD2 -getStatus KEYWORD2 -getStatusString KEYWORD2 -getModel KEYWORD2 -getMinimumSamplingPeriod KEYWORD2 -toFahrenheit KEYWORD2 -toCelsius KEYWORD2 - -####################################### -# Instances (KEYWORD2) -####################################### - - -####################################### -# Constants (LITERAL1) -####################################### - -AUTO_DETECT LITERAL1 -DHT11 LITERAL1 -DHT22 LITERAL1 -AM2302 LITERAL1 -RHT03 LITERAL1 - -ERROR_NONE LITERAL1 -ERROR_TIMEOUT LITERAL1 -ERROR_CHECKSUM LITERAL1 diff --git a/libraries/DHT/license.txt b/libraries/DHT/license.txt deleted file mode 100644 index 320f064..0000000 --- a/libraries/DHT/license.txt +++ /dev/null @@ -1,26 +0,0 @@ -Software License Agreement (BSD License) - -Copyright (c) 2013, Mark Ruys. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the University of California, Berkeley nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS" AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/libraries/DHT/readme.pdf b/libraries/DHT/readme.pdf deleted file mode 100644 index 2c8706c..0000000 Binary files a/libraries/DHT/readme.pdf and /dev/null differ diff --git a/libraries/DS3232RTC/.gitignore b/libraries/DS3232RTC/.gitignore deleted file mode 100644 index b03f7f6..0000000 --- a/libraries/DS3232RTC/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.zip -*.7z diff --git a/libraries/DS3232RTC/DS3232RTC.cpp b/libraries/DS3232RTC/DS3232RTC.cpp deleted file mode 100644 index a3fe8c5..0000000 --- a/libraries/DS3232RTC/DS3232RTC.cpp +++ /dev/null @@ -1,335 +0,0 @@ -/*----------------------------------------------------------------------* - * DS3232RTC.cpp - Arduino library for the Maxim Integrated DS3232 * - * Real-Time Clock. This library is intended for use with the Arduino * - * Time.h library, http://www.arduino.cc/playground/Code/Time * - * * - * This library is a drop-in replacement for the DS1307RTC.h library * - * by Michael Margolis that is supplied with the Arduino Time library * - * above. To change from using a DS1307 RTC to an DS3232 RTC, it is * - * only necessary to change the #include statement to include this * - * library instead of DS1307RTC.h. * - * * - * In addition, this library implements functions to support the * - * additional features of the DS3232. * - * * - * This library will also work with the DS3231 RTC, which has the same * - * features of the DS3232 except: (1) Battery-backed SRAM, (2) Battery- * - * backed 32kHz output (BB32kHz bit in Control/Status register 0x0F), * - * and (3) Adjustable temperature sensor sample rate (CRATE1:0 bits in * - * the Control/Status register). * - * * - * Whether used with the DS3232 or DS3231, the user is responsible for * - * ensuring reads and writes do not exceed the device's address space * - * (0x00-0x12 for DS3231, 0x00-0xFF for DS3232); no bounds checking * - * is done by this library. * - * * - * Jack Christensen 06Mar2013 * - * 28Aug2013 Changed the lower level methods to return the status of * - * the I2C communication with the RTC. Thanks to * - * Rob Tillaart for the suggestion. (Fixes issue #1.) * - * * - * This work is licensed under the Creative Commons Attribution- * - * ShareAlike 3.0 Unported License. To view a copy of this license, * - * visit http://creativecommons.org/licenses/by-sa/3.0/ or send a * - * letter to Creative Commons, 444 Castro Street, Suite 900, * - * Mountain View, CA 94041. * - *----------------------------------------------------------------------*/ - -#include - -//define release-independent I2C functions -#if defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) -#include -#define i2cBegin TinyWireM.begin -#define i2cBeginTransmission TinyWireM.beginTransmission -#define i2cEndTransmission TinyWireM.endTransmission -#define i2cRequestFrom TinyWireM.requestFrom -#define i2cRead TinyWireM.receive -#define i2cWrite TinyWireM.send -#elif ARDUINO >= 100 -#include -#define i2cBegin Wire.begin -#define i2cBeginTransmission Wire.beginTransmission -#define i2cEndTransmission Wire.endTransmission -#define i2cRequestFrom Wire.requestFrom -#define i2cRead Wire.read -#define i2cWrite Wire.write -#else -#include -#define i2cBegin Wire.begin -#define i2cBeginTransmission Wire.beginTransmission -#define i2cEndTransmission Wire.endTransmission -#define i2cRequestFrom Wire.requestFrom -#define i2cRead Wire.receive -#define i2cWrite Wire.send -#endif - -/*----------------------------------------------------------------------* - * Constructor. * - *----------------------------------------------------------------------*/ -DS3232RTC::DS3232RTC() -{ - i2cBegin(); -} - -/*----------------------------------------------------------------------* - * Read the current time from the RTC and return it as a time_t value. * - * Returns a zero value if an I2C error occurred (e.g. RTC * - * not present). * - *----------------------------------------------------------------------*/ -time_t DS3232RTC::get() -{ - tmElements_t tm; - - if ( read(tm) ) return 0; - return( makeTime(tm) ); -} - -/*----------------------------------------------------------------------* - * Set the RTC to the given time_t value. * - * Returns the I2C status (zero if successful). * - *----------------------------------------------------------------------*/ -byte DS3232RTC::set(time_t t) -{ - tmElements_t tm; - - breakTime(t, tm); - return ( write(tm) ); -} - -/*----------------------------------------------------------------------* - * Read the current time from the RTC and return it in a tmElements_t * - * structure. Returns the I2C status (zero if successful). * - *----------------------------------------------------------------------*/ -byte DS3232RTC::read(tmElements_t &tm) -{ - i2cBeginTransmission(RTC_ADDR); - i2cWrite((uint8_t)RTC_SECONDS); - if ( byte e = i2cEndTransmission() ) return e; - //request 7 bytes (secs, min, hr, dow, date, mth, yr) - i2cRequestFrom(RTC_ADDR, tmNbrFields); - tm.Second = bcd2dec(i2cRead() & ~_BV(DS1307_CH)); - tm.Minute = bcd2dec(i2cRead()); - tm.Hour = bcd2dec(i2cRead() & ~_BV(HR1224)); //assumes 24hr clock - tm.Wday = i2cRead(); - tm.Day = bcd2dec(i2cRead()); - tm.Month = bcd2dec(i2cRead() & ~_BV(CENTURY)); //don't use the Century bit - tm.Year = y2kYearToTm(bcd2dec(i2cRead())); - return 0; -} - -/*----------------------------------------------------------------------* - * Set the RTC's time from a tmElements_t structure. * - * Returns the I2C status (zero if successful). * - *----------------------------------------------------------------------*/ -byte DS3232RTC::write(tmElements_t &tm) -{ - i2cBeginTransmission(RTC_ADDR); - i2cWrite((uint8_t)RTC_SECONDS); - i2cWrite(dec2bcd(tm.Second)); - i2cWrite(dec2bcd(tm.Minute)); - i2cWrite(dec2bcd(tm.Hour)); //sets 24 hour format (Bit 6 == 0) - i2cWrite(tm.Wday); - i2cWrite(dec2bcd(tm.Day)); - i2cWrite(dec2bcd(tm.Month)); - i2cWrite(dec2bcd(tmYearToY2k(tm.Year))); - return i2cEndTransmission(); -} - -/*----------------------------------------------------------------------* - * Write multiple bytes to RTC RAM. * - * Valid address range is 0x00 - 0xFF, no checking. * - * Number of bytes (nBytes) must be between 1 and 31 (Wire library * - * limitation). * - * Returns the I2C status (zero if successful). * - *----------------------------------------------------------------------*/ -byte DS3232RTC::writeRTC(byte addr, byte *values, byte nBytes) -{ - i2cBeginTransmission(RTC_ADDR); - i2cWrite(addr); - for (byte i=0; i= SQWAVE_NONE) { - controlReg |= _BV(INTCN); - } - else { - controlReg = (controlReg & 0xE3) | (freq << RS1); - } - writeRTC(RTC_CONTROL, controlReg); -} - -/*----------------------------------------------------------------------* - * Checks the OSF bit in the status register which indicates that the * - * oscillator is or was stopped. * - *----------------------------------------------------------------------*/ -boolean DS3232RTC::oscStopped(void) -{ - return ( readRTC(RTC_STATUS) & _BV(OSF) ); -} - -/*----------------------------------------------------------------------* - * Returns the temperature in Celsius times four. * - *----------------------------------------------------------------------*/ -int DS3232RTC::temperature(void) -{ - union int16_byte { - int i; - byte b[2]; - } rtcTemp; - - rtcTemp.b[0] = readRTC(TEMP_LSB); - rtcTemp.b[1] = readRTC(TEMP_MSB); - return rtcTemp.i >> 6; -} - -/*----------------------------------------------------------------------* - * Decimal-to-BCD conversion * - *----------------------------------------------------------------------*/ -uint8_t DS3232RTC::dec2bcd(uint8_t n) -{ - return n + 6 * (n / 10); -} - -/*----------------------------------------------------------------------* - * BCD-to-Decimal conversion * - *----------------------------------------------------------------------*/ -uint8_t __attribute__ ((noinline)) DS3232RTC::bcd2dec(uint8_t n) -{ - return n - 6 * (n >> 4); -} - -DS3232RTC RTC = DS3232RTC(); //instantiate an RTC object diff --git a/libraries/DS3232RTC/DS3232RTC.h b/libraries/DS3232RTC/DS3232RTC.h deleted file mode 100644 index 673217e..0000000 --- a/libraries/DS3232RTC/DS3232RTC.h +++ /dev/null @@ -1,157 +0,0 @@ -/*----------------------------------------------------------------------* - * DS3232RTC.h - Arduino library for the Maxim Integrated DS3232 * - * Real-Time Clock. This library is intended for use with the Arduino * - * Time.h library, http://www.arduino.cc/playground/Code/Time * - * * - * This library is a drop-in replacement for the DS1307RTC.h library * - * by Michael Margolis that is supplied with the Arduino Time library * - * above. To change from using a DS1307 RTC to an DS3232 RTC, it is * - * only necessary to change the #include statement to include this * - * library instead of DS1307RTC.h. * - * * - * In addition, this library implements functions to support the * - * additional features of the DS3232. * - * * - * This library will also work with the DS3231 RTC, which has the same * - * features of the DS3232 except: (1) Battery-backed SRAM, (2) Battery- * - * backed 32kHz output (BB32kHz bit in Control/Status register 0x0F), * - * and (3) Adjustable temperature sensor sample rate (CRATE1:0 bits in * - * the Control/Status register). * - * * - * Whether used with the DS3232 or DS3231, the user is responsible for * - * ensuring reads and writes do not exceed the device's address space * - * (0x00-0x12 for DS3231, 0x00-0xFF for DS3232); no bounds checking * - * is done by this library. * - * * - * Jack Christensen 06Mar2013 * - * 28Aug2013 Changed the lower level methods to return the status of * - * the I2C communication with the RTC. Thanks to * - * Rob Tillaart for the suggestion. (Fixes issue #1.) * - * * - * This work is licensed under the Creative Commons Attribution- * - * ShareAlike 3.0 Unported License. To view a copy of this license, * - * visit http://creativecommons.org/licenses/by-sa/3.0/ or send a * - * letter to Creative Commons, 444 Castro Street, Suite 900, * - * Mountain View, CA 94041. * - *----------------------------------------------------------------------*/ - -#ifndef DS3232RTC_h -#define DS3232RTC_h -#include - -#if defined(ARDUINO) && ARDUINO >= 100 -#include -#else -#include -#endif - -//DS3232 I2C Address -#define RTC_ADDR 0x68 - -//DS3232 Register Addresses -#define RTC_SECONDS 0x00 -#define RTC_MINUTES 0x01 -#define RTC_HOURS 0x02 -#define RTC_DAY 0x03 -#define RTC_DATE 0x04 -#define RTC_MONTH 0x05 -#define RTC_YEAR 0x06 -#define ALM1_SECONDS 0x07 -#define ALM1_MINUTES 0x08 -#define ALM1_HOURS 0x09 -#define ALM1_DAYDATE 0x0A -#define ALM2_MINUTES 0x0B -#define ALM2_HOURS 0x0C -#define ALM2_DAYDATE 0x0D -#define RTC_CONTROL 0x0E -#define RTC_STATUS 0x0F -#define RTC_AGING 0x10 -#define TEMP_MSB 0x11 -#define TEMP_LSB 0x12 -#define SRAM_START_ADDR 0x14 //first SRAM address -#define SRAM_SIZE 236 //number of bytes of SRAM - -//Alarm mask bits -#define A1M1 7 -#define A1M2 7 -#define A1M3 7 -#define A1M4 7 -#define A2M2 7 -#define A2M3 7 -#define A2M4 7 - -//Control register bits -#define EOSC 7 -#define BBSQW 6 -#define CONV 5 -#define RS2 4 -#define RS1 3 -#define INTCN 2 -#define A2IE 1 -#define A1IE 0 - -//Status register bits -#define OSF 7 -#define BB32KHZ 6 -#define CRATE1 5 -#define CRATE0 4 -#define EN32KHZ 3 -#define BSY 2 -#define A2F 1 -#define A1F 0 - -//Square-wave output frequency (TS2, RS1 bits) -enum SQWAVE_FREQS_t {SQWAVE_1_HZ, SQWAVE_1024_HZ, SQWAVE_4096_HZ, SQWAVE_8192_HZ, SQWAVE_NONE}; - -//Alarm masks -enum ALARM_TYPES_t { - ALM1_EVERY_SECOND = 0x0F, - ALM1_MATCH_SECONDS = 0x0E, - ALM1_MATCH_MINUTES = 0x0C, //match minutes *and* seconds - ALM1_MATCH_HOURS = 0x08, //match hours *and* minutes, seconds - ALM1_MATCH_DATE = 0x00, //match date *and* hours, minutes, seconds - ALM1_MATCH_DAY = 0x10, //match day *and* hours, minutes, seconds - ALM2_EVERY_MINUTE = 0x8E, - ALM2_MATCH_MINUTES = 0x8C, //match minutes - ALM2_MATCH_HOURS = 0x88, //match hours *and* minutes - ALM2_MATCH_DATE = 0x80, //match date *and* hours, minutes - ALM2_MATCH_DAY = 0x90, //match day *and* hours, minutes -}; - -#define ALARM_1 1 //constants for calling functions -#define ALARM_2 2 - -//Other -#define DS1307_CH 7 //for DS1307 compatibility, Clock Halt bit in Seconds register -#define HR1224 6 //Hours register 12 or 24 hour mode (24 hour mode==0) -#define CENTURY 7 //Century bit in Month register -#define DYDT 6 //Day/Date flag bit in alarm Day/Date registers - -class DS3232RTC -{ - public: - DS3232RTC(); - static time_t get(void); - static byte set(time_t t); - static byte read(tmElements_t &tm); - static byte write(tmElements_t &tm); - byte writeRTC(byte addr, byte *values, byte nBytes); - byte writeRTC(byte addr, byte value); - byte readRTC(byte addr, byte *values, byte nBytes); - byte readRTC(byte addr); - void setAlarm(ALARM_TYPES_t alarmType, byte seconds, byte minutes, byte hours, byte daydate); - void setAlarm(ALARM_TYPES_t alarmType, byte minutes, byte hours, byte daydate); - void alarmInterrupt(byte alarmNumber, boolean alarmEnabled); - boolean alarm(byte alarmNumber); - void squareWave(SQWAVE_FREQS_t freq); - boolean oscStopped(void); - int temperature(void); - - private: - static uint8_t dec2bcd(uint8_t n); - static uint8_t bcd2dec(uint8_t n); -}; - -extern DS3232RTC RTC; - -#endif diff --git a/libraries/DS3232RTC/LICENSE.md b/libraries/DS3232RTC/LICENSE.md deleted file mode 100644 index f875494..0000000 --- a/libraries/DS3232RTC/LICENSE.md +++ /dev/null @@ -1,8 +0,0 @@ -# Arduino DS3232RTC Library v1.0 # -https://github.com/JChristensen/DS3232RTC -LICENSE file -Jack Christensen Mar 2013 - -![CC BY-SA](http://mirrors.creativecommons.org/presskit/buttons/88x31/png/by-sa.png) -## CC BY-SA ## -"Arduino DS3232RTC Library" by Jack Christensen is licensed under [CC BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/). \ No newline at end of file diff --git a/libraries/DS3232RTC/ReadMe.md b/libraries/DS3232RTC/ReadMe.md deleted file mode 100644 index 3e13c6d..0000000 --- a/libraries/DS3232RTC/ReadMe.md +++ /dev/null @@ -1,345 +0,0 @@ -# Arduino DS3232RTC Library v1.0 # -https://github.com/JChristensen/DS3232RTC -ReadMe file -Jack Christensen Mar 2013 - -![CC BY-SA](http://mirrors.creativecommons.org/presskit/buttons/80x15/png/by-sa.png) - -## Introduction ## -**DS3232RTC** is an Arduino library that supports the Maxim Integrated DS3232 and DS3231 Real-Time Clocks. This library is intended to be used with the [Arduino Time library](http://www.arduino.cc/playground/Code/Time). - -The **DS3232RTC** library is a drop-in replacement for the DS1307RTC.h library by Michael Margolis that is supplied with the Arduino Time library above. To change from using a DS1307 RTC to an DS323x RTC, it is only necessary to use `#include ` instead of `#include `. - -**DS3232RTC** also implements functions to support the additional features of the DS3232 and DS3231. The DS3231 has the same features as the DS3232 except: (1) Battery-backed SRAM, (2) Battery-backed 32kHz output (BB32kHz bit in Control/Status register 0x0F), and (3) Adjustable temperature sensor sample rate (CRATE1:0 bits in the Control/Status register). - -"Arduino DS3232RTC Library" by Jack Christensen is licensed under CC BY-SA 4.0. - -## Installation ## -To use the **DS3232RTC** library: -- Go to https://github.com/JChristensen/DS3232RTC, click the **Download ZIP** button and save the ZIP file to a convenient location on your PC. -- Uncompress the downloaded file. This will result in a folder containing all the files for the library, that has a name that includes the branch name, usually **DS3232RTC-master**. -- Rename the folder to just **DS3232RTC**. -- Copy the renamed folder to the Arduino sketchbook\libraries folder. - -## Examples ## -The following example sketches are included with the **DS3232RTC** library: -- **SetSerial:** Set the RTC's date and time from the Arduino serial monitor. Displays date, time and temperature. -- **TimeRTC:** Same as the example of the same name provided with the **Time** library, demonstrating the interchangeability of the **DS3232RTC** library with the **DS1307RTC** library. -- **tiny3232_KnockBang:** Demonstrates interfacing an ATtiny45/85 to a DS3231 or DS3232 RTC. - -## Usage notes ## - -When using the **DS3232RTC** library, the user is responsible for ensuring that reads and writes do not exceed the device's address space (0x00-0x12 for DS3231, 0x00-0xFF for DS3232); no bounds checking is done by the library. - -Similar to the **DS1307RTC** library, the **DS3232RTC** library instantiates an RTC object; the user does not need to do this. - -To use the **DS3232RTC** library, the Time and Wire libraries must also be included. For brevity, these includes are not repeated in the examples below: -```c++ -#include //http://github.com/JChristensen/DS3232RTC -#include //http://www.arduino.cc/playground/Code/Time -#include //http://arduino.cc/en/Reference/Wire (included with Arduino IDE) -``` - -## Enumerations ## -### SQWAVE_FREQS_t -##### Description -Symbolic names used with the squareWave() method (described below). -##### Values -- SQWAVE_NONE -- SQWAVE_1_HZ -- SQWAVE_1024_HZ -- SQWAVE_4096_HZ -- SQWAVE_8192_HZ - -### ALARM_TYPES_t -##### Description -Symbolic names used with the setAlarm() method (described below). -##### Values for Alarm 1 -- ALM1_EVERY_SECOND -- causes an alarm once per second. -- ALM1_MATCH_SECONDS -- causes an alarm when the seconds match (i.e. once per minute). -- ALM1_MATCH_MINUTES -- causes an alarm when the minutes *and* seconds match. -- ALM1_MATCH_HOURS -- causes an alarm when the hours *and* minutes *and* seconds match. -- ALM1_MATCH_DATE -- causes an alarm when the date of the month *and* hours *and* minutes *and* seconds match. -- ALM1_MATCH_DAY -- causes an alarm when the day of the week *and* hours *and* minutes *and* seconds match. - -##### Values for Alarm 2 -- ALM2_EVERY_MINUTE -- causes an alarm once per minute. -- ALM2_MATCH_MINUTES -- causes an alarm when the minutes match (i.e. once per hour). -- ALM2_MATCH_HOURS -- causes an alarm when the hours *and* minutes match. -- ALM2_MATCH_DATE -- causes an alarm when the date of the month *and* hours *and* minutes match. -- ALM2_MATCH_DAY -- causes an alarm when the day of the week *and* hours *and* minutes match. - - -## Methods for setting and reading the time ## - -###get(void) -#####Description -Reads the current date and time from the RTC and returns it as a *time_t* value. Returns zero if an I2C error occurs (RTC not present, etc.). -#####Syntax -`RTC.get();` -#####Parameters -None. -#####Returns -Current date and time *(time_t)* -#####Example -```c++ -time_t myTime; -myTime = RTC.get(); -``` - -###set(time_t t) -#####Description -Sets the RTC date and time to the given *time_t* value. -#####Syntax -`RTC.set(t);` -#####Parameters -**t:** The date and time to set the RTC to *(time_t)* -#####Returns -I2C status *(byte)*. Returns zero if successful. -#####Example -```c++ -//this example first sets the system time (maintained by the Time library) to -//a hard-coded date and time, and then sets the RTC from the system time. -//the setTime() function is part of the Time library. -setTime(23, 31, 30, 13, 2, 2009); //set the system time to 23h31m30s on 13Feb2009 -RTC.set(now()); //set the RTC from the system time -``` - -###read(tmElements_t &tm) -#####Description -Reads the current date and time from the RTC and returns it as a *tmElements_t* structure. See the [Arduino Time library](http://www.arduino.cc/playground/Code/Time) for details on the *tmElements_t* structure. -#####Syntax -`RTC.read(tm);` -#####Parameters -**tm:** Address of a *tmElements_t* structure to which the date and time are returned. -#####Returns -I2C status *(byte)*. Returns zero if successful. The date and time read from the RTC are returned to the **tm** parameter. -#####Example -```c++ -tmElements_t tm; -RTC.read(tm); -Serial.print(tm.Hour, DEC); -Serial.print(':'); -Serial.print(tm.Minute,DEC); -Serial.print(':'); -Serial.println(tm.Second,DEC); -``` - -###write(tmElements_t &tm) -#####Description -Sets the RTC to the date and time given by a *tmElements_t* structure. -#####Syntax -`RTC.write(tm);` -#####Parameters -**tm:** Address of a *tmElements_t* structure used to set the date and time. -#####Returns -I2C status *(byte)*. Returns zero if successful. -#####Example -```c++ -tmElements_t tm; -tm.Hour = 23; //set the tm structure to 23h31m30s on 13Feb2009 -tm.Minute = 31; -tm.Minute = 30; -tm.Day = 13; -tm.Month = 2; -tm.Year = 2009 - 1970; //tmElements_t.Year is the offset from 1970 -RTC.write(tm); //set the RTC from the tm structure -``` - -## Methods for reading and writing RTC registers or static RAM (SRAM) for the DS3232 ## -The DS3232RTC.h file defines symbolic names for the timekeeping, alarm, status and control registers. These can be used for the addr argument in the functions below. - -###writeRTC(byte addr, byte *values, byte nBytes) -#####Description -Write one or more bytes to RTC memory. -#####Syntax -`RTC.writeRTC(addr, values, nbytes);` -#####Parameters -**addr:** First SRAM address to write *(byte)*. The valid address range is 0x00-0x12 for DS3231, 0x00-0xFF for DS3232. The general-purpose SRAM for the DS3232 begins at address 0x14. Address is not checked for validity by the library. -**values:** An array of values to write _(*byte)_ -**nBytes:** Number of bytes to write *(byte)*. Must be between 1 and 31 (Wire library limitation) but is not checked by the library. -#####Returns -I2C status *(byte)*. Returns zero if successful. -#####Example -```c++ -//write 1, 2, ..., 8 to the first eight DS3232 SRAM locations -byte buf[8] = {1, 2, 3, 4, 5, 6, 7, 8}; -RTC.sramWrite(0x14, buf, 8); -``` - -###writeRTC(byte addr, byte value) -#####Description -Write a single byte to RTC memory. -#####Syntax -`RTC.writeRTC(addr, value);` -#####Parameters -**addr:** SRAM address to write *(byte)*. The valid address range is 0x00-0x12 for DS3231, 0x00-0xFF for DS3232. The general-purpose SRAM for the DS3232 begins at address 0x14. Address is not checked for validity by the library. -**value:** Value to write _(byte)_ -#####Returns -I2C status *(byte)*. Returns zero if successful. -#####Example -```c++ -RTC.writeRTC(3, 14); //write the value 14 to SRAM address 3 -``` - -###readRTC(byte addr, byte *values, byte nBytes) -#####Description -Read one or more bytes from RTC RAM. -#####Syntax -`RTC.readRTC(addr, values, nbytes);` -#####Parameters -**addr:** First SRAM address to read *(byte)*. The valid address range is 0x00-0x12 for DS3231, 0x00-0xFF for DS3232. The general-purpose SRAM for the DS3232 begins at address 0x14. Address is not checked for validity by the library. -**values:** An array to receive the values read _(*byte)_ -**nBytes:** Number of bytes to read *(byte)*. Must be between 1 and 32 (Wire library limitation) but is not checked by the library. -#####Returns -I2C status *(byte)*. Returns zero if successful. -#####Example -```c++ -//read the last eight locations of SRAM into buf -byte buf[8]; -RTC.sramRead(248, buf, 8); -``` - -###readRTC(byte addr) -#####Description -Reads a single byte from RTC RAM. -#####Syntax -`RTC.readRTC(addr);` -#####Parameters -**addr:** SRAM address to read *(byte)*. The valid address range is 0x00-0x12 for DS3231, 0x00-0xFF for DS3232. The general-purpose SRAM for the DS3232 begins at address 0x14. Address is not checked for validity by the library. -#####Returns -Value read from the RTC *(byte)* -#####Example -```c++ -byte val; -val = RTC.readRTC(3); //read the value from SRAM location 3 -``` - -## Alarm methods ## -The DS3232 and DS3231 have two alarms. Alarm1 can be set to seconds precision; Alarm2 can only be set to minutes precision. - -###setAlarm(ALARM_TYPES_t alarmType, byte seconds, byte minutes, byte hours, byte daydate) -#####Description -Set an alarm time. Sets the alarm registers only. To cause the INT pin to be asserted on alarm match, use alarmInterrupt(). This method can set either Alarm 1 or Alarm 2, depending on the value of alarmType (use the ALARM_TYPES_t enumeration above). When setting Alarm 2, the seconds value must be supplied but is ignored, recommend using zero. (Alarm 2 has no seconds register.) - -#####Syntax -`RTC.setAlarm(alarmType, seconds, minutes, hours, dayOrDate);` -#####Parameters -**alarmType:** A value from the ALARM_TYPES_t enumeration, above. *(ALARM_TYPES_t)* -**seconds:** The seconds value to set the alarm to. *(byte)* -**minutes:** The minutes value to set the alarm to. *(byte)* -**hours:** The hours value to set the alarm to. *(byte)* -**dayOrDate:** The day of the week or the date of the month. For day of the week, use a value from the Time library timeDayOfWeek_t enumeration, i.e. dowSunday, dowMonday, dowTuesday, dowWednesday, dowThursday, dowFriday, dowSaturday. *(byte)* -#####Returns -None. -#####Example -```c++ -//Set Alarm1 for 12:34:56 on Sunday -RTC.setAlarm(ALM1_MATCH_DAY, 56, 34, 12, dowSunday); -``` - -###setAlarm(ALARM_TYPES_t alarmType, byte minutes, byte hours, byte daydate) -#####Description -Set an alarm time. Sets the alarm registers only. To cause the INT pin to be asserted on alarm match, use alarmInterrupt(). This method can set either Alarm 1 or Alarm 2, depending on the value of alarmType (use the ALARM_TYPES_t enumeration above). However, when using this method to set Alarm 1, the seconds value is set to zero. (Alarm 2 has no seconds register.) - -#####Syntax -`RTC.setAlarm(alarmType, minutes, hours, dayOrDate);` -#####Parameters -**alarmType:** A value from the ALARM_TYPES_t enumeration, above. *(ALARM_TYPES_t)* -**minutes:** The minutes value to set the alarm to. *(byte)* -**hours:** The hours value to set the alarm to. *(byte)* -**dayOrDate:** The day of the week or the date of the month. For day of the week, use a value from the Time library timeDayOfWeek_t enumeration, i.e. dowSunday, dowMonday, dowTuesday, dowWednesday, dowThursday, dowFriday, dowSaturday. *(byte)* -#####Returns -None. -#####Example -```c++ -//Set Alarm2 for 12:34 on the 4th day of the month -RTC.setAlarm(ALM1_MATCH_DATE, 34, 12, 4); -``` - -###alarmInterrupt(byte alarmNumber, boolean alarmEnabled) -#####Description -Enable or disable an alarm "interrupt". Note that this "interrupt" causes the RTC's INT pin to be asserted. To use this signal as an actual interrupt to a microcontroller, it will need to be connected properly and programmed in the application firmware. -on the RTC. -#####Syntax -`RTC.alarmInterrupt(alarmNumber, enable);` -#####Parameters -**alarmNumber:** The number of the alarm to enable or disable, ALARM_1 or ALARM_2 *(byte)* -**alarmEnabled:** true or false *(boolean)* -#####Returns -None. -#####Example -```c++ -RTC.alarmInterrupt(ALARM_1, true); //assert the INT pin when Alarm1 occurs. -RTC.alarmInterrupt(ALARM_2, false); //disable Alarm2 -``` - -###alarm(byte alarmNumber) -#####Description -Tests whether an alarm has been triggered. If the alarm was triggered, returns true and resets the alarm flag in the RTC, else returns false. -#####Syntax -`RTC.alarm(alarmNumber);` -#####Parameters -**alarmNumber:** The number of the alarm to test, ALARM_1 or ALARM_2 *(byte)* -#####Returns -Description *(type)* -#####Example -```c++ -if ( RTC.alarm(ALARM_1) ) { //has Alarm1 triggered? - //yes, act on the alarm -} -else { - //no alarm -} -``` - -## Other methods ## -###temperature(void) -#####Description -Returns the RTC temperature. -#####Syntax -`RTC.temperature();` -#####Parameters -None. -#####Returns -RTC temperature as degrees Celsius times four. *(int)* -#####Example -```c++ -int t = RTC.temperature(); -float celsius = t / 4.0; -float fahrenheit = celsius * 9.0 / 5.0 + 32.0; -``` - -###squareWave(SQWAVE_FREQS_t freq) -#####Description -Enables or disables the square wave output. -#####Syntax -`RTC.squareWave(freq);` -#####Parameters -**freq:** a value from the SQWAVE_FREQS_t enumeration above. *(SQWAVE_FREQS_t)* -#####Returns -None. -#####Example -```c++ -RTC.squareWave(SQWAVE_1_HZ); //1 Hz square wave -RTC.squareWave(SQWAVE_NONE); //no square wave -``` - -###oscStopped(void) -#####Description -Check whether the RTC oscillator is or was stopped. This may indicate that the RTC's time is not accurate. -#####Syntax -`RTC.oscStopped();` -#####Parameters -None. -#####Returns -True or false *(boolean)* -#####Example -```c++ -if ( RTC.oscStopped() ) { //check the oscillator - //may be trouble -} -else { - //all is well -} -``` \ No newline at end of file diff --git a/libraries/DS3232RTC/examples/SetSerial/SetSerial.ino b/libraries/DS3232RTC/examples/SetSerial/SetSerial.ino deleted file mode 100644 index af03b52..0000000 --- a/libraries/DS3232RTC/examples/SetSerial/SetSerial.ino +++ /dev/null @@ -1,132 +0,0 @@ -/*----------------------------------------------------------------------* - * Display the date and time from a DS3231 or DS3232 RTC every second. * - * Display the temperature once per minute. (The DS3231 does a * - * temperature conversion once every 64 seconds. This is also the * - * default for the DS3232.) * - * * - * Set the date and time by entering the following on the Arduino * - * serial monitor: * - * year,month,day,hour,minute,second, * - * * - * Where * - * year can be two or four digits, * - * month is 1-12, * - * day is 1-31, * - * hour is 0-23, and * - * minute and second are 0-59. * - * * - * Entering the final comma delimiter (after "second") will avoid a * - * one-second timeout and will allow the RTC to be set more accurately. * - * * - * No validity checking is done, invalid values or incomplete syntax * - * in the input will result in an incorrect RTC setting. * - * * - * Jack Christensen 08Aug2013 * - * * - * Tested with Arduino 1.0.5, Arduino Uno, DS3231/Chronodot, DS3232. * - * * - * This work is licensed under the Creative Commons Attribution- * - * ShareAlike 3.0 Unported License. To view a copy of this license, * - * visit http://creativecommons.org/licenses/by-sa/3.0/ or send a * - * letter to Creative Commons, 171 Second Street, Suite 300, * - * San Francisco, California, 94105, USA. * - *----------------------------------------------------------------------*/ - -#include //http://github.com/JChristensen/DS3232RTC -#include //http://arduiniana.org/libraries/streaming/ -#include //http://playground.arduino.cc/Code/Time -#include //http://arduino.cc/en/Reference/Wire - -void setup(void) -{ - Serial.begin(115200); - - //setSyncProvider() causes the Time library to synchronize with the - //external RTC by calling RTC.get() every five minutes by default. - setSyncProvider(RTC.get); - Serial << F("RTC Sync"); - if (timeStatus() != timeSet) Serial << F(" FAIL!"); - Serial << endl; -} - -void loop(void) -{ - static time_t tLast; - time_t t; - tmElements_t tm; - - //check for input to set the RTC, minimum length is 12, i.e. yy,m,d,h,m,s - if (Serial.available() >= 12) { - //note that the tmElements_t Year member is an offset from 1970, - //but the RTC wants the last two digits of the calendar year. - //use the convenience macros from Time.h to do the conversions. - int y = Serial.parseInt(); - if (y >= 100 && y < 1000) - Serial << F("Error: Year must be two digits or four digits!") << endl; - else { - if (y >= 1000) - tm.Year = CalendarYrToTm(y); - else //(y < 100) - tm.Year = y2kYearToTm(y); - tm.Month = Serial.parseInt(); - tm.Day = Serial.parseInt(); - tm.Hour = Serial.parseInt(); - tm.Minute = Serial.parseInt(); - tm.Second = Serial.parseInt(); - t = makeTime(tm); - RTC.set(t); //use the time_t value to ensure correct weekday is set - setTime(t); - Serial << F("RTC set to: "); - printDateTime(t); - Serial << endl; - //dump any extraneous input - while (Serial.available() > 0) Serial.read(); - } - } - - t = now(); - if (t != tLast) { - tLast = t; - printDateTime(t); - if (second(t) == 0) { - float c = RTC.temperature() / 4.; - float f = c * 9. / 5. + 32.; - Serial << F(" ") << c << F(" C ") << f << F(" F"); - } - Serial << endl; - } -} - -//print date and time to Serial -void printDateTime(time_t t) -{ - printDate(t); - Serial << ' '; - printTime(t); -} - -//print time to Serial -void printTime(time_t t) -{ - printI00(hour(t), ':'); - printI00(minute(t), ':'); - printI00(second(t), ' '); -} - -//print date to Serial -void printDate(time_t t) -{ - printI00(day(t), 0); - Serial << monthShortStr(month(t)) << _DEC(year(t)); -} - -//Print an integer in "00" format (with leading zero), -//followed by a delimiter character to Serial. -//Input value assumed to be between 0 and 99. -void printI00(int val, char delim) -{ - if (val < 10) Serial << '0'; - Serial << _DEC(val); - if (delim > 0) Serial << delim; - return; -} \ No newline at end of file diff --git a/libraries/DS3232RTC/examples/TimeRTC/TimeRTC.ino b/libraries/DS3232RTC/examples/TimeRTC/TimeRTC.ino deleted file mode 100644 index 1145bf2..0000000 --- a/libraries/DS3232RTC/examples/TimeRTC/TimeRTC.ino +++ /dev/null @@ -1,50 +0,0 @@ -/* - * TimeRTC.pde - * Example code illustrating Time library with Real Time Clock. - * This example is identical to the example provided with the Time Library, - * only the #include statement has been changed to include the DS3232RTC library. - */ - -#include //http://github.com/JChristensen/DS3232RTC -#include //http://www.arduino.cc/playground/Code/Time -#include //http://arduino.cc/en/Reference/Wire (included with Arduino IDE) - -void setup(void) -{ - Serial.begin(9600); - setSyncProvider(RTC.get); // the function to get the time from the RTC - if(timeStatus() != timeSet) - Serial.println("Unable to sync with the RTC"); - else - Serial.println("RTC has set the system time"); -} - -void loop(void) -{ - digitalClockDisplay(); - delay(1000); -} - -void digitalClockDisplay(void) -{ - // digital clock display of the time - Serial.print(hour()); - printDigits(minute()); - printDigits(second()); - Serial.print(' '); - Serial.print(day()); - Serial.print(' '); - Serial.print(month()); - Serial.print(' '); - Serial.print(year()); - Serial.println(); -} - -void printDigits(int digits) -{ - // utility function for digital clock display: prints preceding colon and leading 0 - Serial.print(':'); - if(digits < 10) - Serial.print('0'); - Serial.print(digits); -} diff --git a/libraries/DS3232RTC/examples/tiny3232_KnockBang/tiny3232_KnockBang.ino b/libraries/DS3232RTC/examples/tiny3232_KnockBang/tiny3232_KnockBang.ino deleted file mode 100644 index e54924e..0000000 --- a/libraries/DS3232RTC/examples/tiny3232_KnockBang/tiny3232_KnockBang.ino +++ /dev/null @@ -1,88 +0,0 @@ -/*----------------------------------------------------------------------* - * Digital clock display using a DS3231/32 Real-Time Clock * - * and an ATtiny45/85 with a 1MHz system clock. * - * Also seems to work with a DS1307 which is fairly similar but the * - * DS3232RTC library doesn't officially support it. * - * * - * Tested with Arduino 1.0.5. Also Arduino-Tiny Core, TinyISP, and * - * TinyDebugKnockBang from http://code.google.com/p/arduino-tiny/ * - * * - * Run TinyISP on an ATmega microcontroller that does not have an LED * - * connected to pin 13 (SCK). The LED causes problems because the SPI * - * pins are also the I2C pins on the ATtiny. Connect MISO, MOSI, SCK * - * on the ATmega to the corresponding pins on the ATtiny through 220Ω * - * resistors for safety. Use 4.7K pullup resistors on the ATtiny * - * I2C bus. * - * * - * Jack Christensen 21Aug2013 * - * * - * This work is licensed under the Creative Commons Attribution- * - * ShareAlike 3.0 Unported License. To view a copy of this license, * - * visit http://creativecommons.org/licenses/by-sa/3.0/ or send a * - * letter to Creative Commons, 171 Second Street, Suite 300, * - * San Francisco, California, 94105, USA. * - *----------------------------------------------------------------------*/ - -#include //http://github.com/JChristensen/DS3232RTC -#include //http://playground.arduino.cc/Code/Time -#include //http://code.google.com/p/arduino-tiny/ -#include //http://playground.arduino.cc/Code/USIi2c - -void setup(void) -{ - Debug.begin(250000); - - //setSyncProvider() causes the Time library to synchronize with the - //external RTC by calling RTC.get() every five minutes by default. - setSyncProvider(RTC.get); - Debug.print(F("RTC Sync")); - if (timeStatus() != timeSet) Debug.print(F(" FAIL!")); - Debug.println(); -} - -void loop(void) -{ - static time_t tLast; - - time_t t = now(); - if (t != tLast) { - tLast = t; - printDateTime(t); - Debug.println(); - } -} - -//print date and time to Serial -void printDateTime(time_t t) -{ - printDate(t); - Debug.print(' '); - printTime(t); -} - -//print time to Serial -void printTime(time_t t) -{ - printI00(hour(t), ':'); - printI00(minute(t), ':'); - printI00(second(t), ' '); -} - -//print date to Serial -void printDate(time_t t) -{ - printI00(day(t), 0); - Debug.print(monthShortStr(month(t))); - Debug.print(year(t), DEC); -} - -//Print an integer in "00" format (with leading zero), -//followed by a delimiter character to Serial. -//Input value assumed to be between 0 and 99. -void printI00(int val, char delim) -{ - if (val < 10) Debug.print('0'); - Debug.print(val, DEC);; - if (delim > 0) Debug.print(delim); - return; -} diff --git a/libraries/DS3232RTC/keywords.txt b/libraries/DS3232RTC/keywords.txt deleted file mode 100644 index 22e5dd7..0000000 --- a/libraries/DS3232RTC/keywords.txt +++ /dev/null @@ -1,13 +0,0 @@ -DS3232RTC KEYWORD1 -get KEYWORD2 -set KEYWORD2 -read KEYWORD2 -write KEYWORD2 -writeRTC KEYWORD2 -readRTC KEYWORD2 -setAlarm KEYWORD2 -alarmInterrupt KEYWORD2 -alarm KEYWORD2 -squareWave KEYWORD2 -oscStopped KEYWORD2 -temperature KEYWORD2 diff --git a/libraries/DallasTemperature/DallasTemperature.cpp b/libraries/DallasTemperature/DallasTemperature.cpp deleted file mode 100644 index 80ee4f8..0000000 --- a/libraries/DallasTemperature/DallasTemperature.cpp +++ /dev/null @@ -1,761 +0,0 @@ -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. - -// Version 3.7.2 modified on Dec 6, 2011 to support Arduino 1.0 -// See Includes... -// Modified by Jordan Hochenbaum - -#include "DallasTemperature.h" - -#if ARDUINO >= 100 -#include "Arduino.h" -#else -extern "C" { -#include "WConstants.h" -} -#endif - -DallasTemperature::DallasTemperature(OneWire* _oneWire) -#if REQUIRESALARMS - : _AlarmHandler(&defaultAlarmHandler) -#endif -{ - _wire = _oneWire; - devices = 0; - parasite = false; - bitResolution = 9; - waitForConversion = true; - checkForConversion = true; -} - -// initialise the bus -void DallasTemperature::begin(void) -{ - DeviceAddress deviceAddress; - - _wire->reset_search(); - devices = 0; // Reset the number of devices when we enumerate wire devices - - while (_wire->search(deviceAddress)) - { - if (validAddress(deviceAddress)) - { - if (!parasite && readPowerSupply(deviceAddress)) parasite = true; - - ScratchPad scratchPad; - - readScratchPad(deviceAddress, scratchPad); - - bitResolution = max(bitResolution, getResolution(deviceAddress)); - - devices++; - } - } -} - -// returns the number of devices found on the bus -uint8_t DallasTemperature::getDeviceCount(void) -{ - return devices; -} - -// returns true if address is valid -bool DallasTemperature::validAddress(const uint8_t* deviceAddress) -{ - return (_wire->crc8(deviceAddress, 7) == deviceAddress[7]); -} - -// finds an address at a given index on the bus -// returns true if the device was found -bool DallasTemperature::getAddress(uint8_t* deviceAddress, uint8_t index) -{ - uint8_t depth = 0; - - _wire->reset_search(); - - while (depth <= index && _wire->search(deviceAddress)) - { - if (depth == index && validAddress(deviceAddress)) return true; - depth++; - } - - return false; -} - -// attempt to determine if the device at the given address is connected to the bus -bool DallasTemperature::isConnected(const uint8_t* deviceAddress) -{ - ScratchPad scratchPad; - return isConnected(deviceAddress, scratchPad); -} - -// attempt to determine if the device at the given address is connected to the bus -// also allows for updating the read scratchpad -bool DallasTemperature::isConnected(const uint8_t* deviceAddress, uint8_t* scratchPad) -{ - readScratchPad(deviceAddress, scratchPad); - return (_wire->crc8(scratchPad, 8) == scratchPad[SCRATCHPAD_CRC]); -} - -// read device's scratch pad -void DallasTemperature::readScratchPad(const uint8_t* deviceAddress, uint8_t* scratchPad) -{ - // send the command - _wire->reset(); - _wire->select(deviceAddress); - _wire->write(READSCRATCH); - - // TODO => collect all comments & use simple loop - // byte 0: temperature LSB - // byte 1: temperature MSB - // byte 2: high alarm temp - // byte 3: low alarm temp - // byte 4: DS18S20: store for crc - // DS18B20 & DS1822: configuration register - // byte 5: internal use & crc - // byte 6: DS18S20: COUNT_REMAIN - // DS18B20 & DS1822: store for crc - // byte 7: DS18S20: COUNT_PER_C - // DS18B20 & DS1822: store for crc - // byte 8: SCRATCHPAD_CRC - // - // for(int i=0; i<9; i++) - // { - // scratchPad[i] = _wire->read(); - // } - - - // read the response - - // byte 0: temperature LSB - scratchPad[TEMP_LSB] = _wire->read(); - - // byte 1: temperature MSB - scratchPad[TEMP_MSB] = _wire->read(); - - // byte 2: high alarm temp - scratchPad[HIGH_ALARM_TEMP] = _wire->read(); - - // byte 3: low alarm temp - scratchPad[LOW_ALARM_TEMP] = _wire->read(); - - // byte 4: - // DS18S20: store for crc - // DS18B20 & DS1822: configuration register - scratchPad[CONFIGURATION] = _wire->read(); - - // byte 5: - // internal use & crc - scratchPad[INTERNAL_BYTE] = _wire->read(); - - // byte 6: - // DS18S20: COUNT_REMAIN - // DS18B20 & DS1822: store for crc - scratchPad[COUNT_REMAIN] = _wire->read(); - - // byte 7: - // DS18S20: COUNT_PER_C - // DS18B20 & DS1822: store for crc - scratchPad[COUNT_PER_C] = _wire->read(); - - // byte 8: - // SCTRACHPAD_CRC - scratchPad[SCRATCHPAD_CRC] = _wire->read(); - - _wire->reset(); -} - -// writes device's scratch pad -void DallasTemperature::writeScratchPad(const uint8_t* deviceAddress, const uint8_t* scratchPad) -{ - _wire->reset(); - _wire->select(deviceAddress); - _wire->write(WRITESCRATCH); - _wire->write(scratchPad[HIGH_ALARM_TEMP]); // high alarm temp - _wire->write(scratchPad[LOW_ALARM_TEMP]); // low alarm temp - // DS1820 and DS18S20 have no configuration register - if (deviceAddress[0] != DS18S20MODEL) _wire->write(scratchPad[CONFIGURATION]); // configuration - _wire->reset(); - _wire->select(deviceAddress); //<--this line was missing - // save the newly written values to eeprom - _wire->write(COPYSCRATCH, parasite); - delay(20); // <--- added 20ms delay to allow 10ms long EEPROM write operation (as specified by datasheet) - if (parasite) delay(10); // 10ms delay - _wire->reset(); -} - -// reads the device's power requirements -bool DallasTemperature::readPowerSupply(const uint8_t* deviceAddress) -{ - bool ret = false; - _wire->reset(); - _wire->select(deviceAddress); - _wire->write(READPOWERSUPPLY); - if (_wire->read_bit() == 0) ret = true; - _wire->reset(); - return ret; -} - - -// set resolution of all devices to 9, 10, 11, or 12 bits -// if new resolution is out of range, it is constrained. -void DallasTemperature::setResolution(uint8_t newResolution) -{ - bitResolution = constrain(newResolution, 9, 12); - DeviceAddress deviceAddress; - for (int i=0; ireset(); - _wire->skip(); - _wire->write(STARTCONVO, parasite); - - // ASYNC mode? - if (!waitForConversion) return; - blockTillConversionComplete(bitResolution, NULL); -} - -// sends command for one device to perform a temperature by address -// returns FALSE if device is disconnected -// returns TRUE otherwise -bool DallasTemperature::requestTemperaturesByAddress(const uint8_t* deviceAddress) -{ - _wire->reset(); - _wire->select(deviceAddress); - _wire->write(STARTCONVO, parasite); - - // check device - ScratchPad scratchPad; - if (!isConnected(deviceAddress, scratchPad)) return false; - - // ASYNC mode? - if (!waitForConversion) return true; - blockTillConversionComplete(getResolution(deviceAddress), deviceAddress); - - return true; -} - -// returns number of milliseconds to wait till conversion is complete (based on IC datasheet) -int16_t DallasTemperature::millisToWaitForConversion(uint8_t bitResolution) -{ - switch (bitResolution) - { - case 9: - return 94; - case 10: - return 188; - case 11: - return 375; - default: - return 750; - } -} - -// Continue to check if the IC has responded with a temperature -void DallasTemperature::blockTillConversionComplete(uint8_t bitResolution, const uint8_t* deviceAddress) -{ - int delms = millisToWaitForConversion(bitResolution); - if (deviceAddress != NULL && checkForConversion && !parasite) - { - unsigned long timend = millis() + delms; - while(!isConversionAvailable(deviceAddress) && (millis() < timend)); - } - else - { - delay(delms); - } -} - -// sends command for one device to perform a temp conversion by index -bool DallasTemperature::requestTemperaturesByIndex(uint8_t deviceIndex) -{ - DeviceAddress deviceAddress; - getAddress(deviceAddress, deviceIndex); - return requestTemperaturesByAddress(deviceAddress); -} - -// Fetch temperature for device index -float DallasTemperature::getTempCByIndex(uint8_t deviceIndex) -{ - DeviceAddress deviceAddress; - if (!getAddress(deviceAddress, deviceIndex)) - return DEVICE_DISCONNECTED_C; - return getTempC((uint8_t*)deviceAddress); -} - -// Fetch temperature for device index -float DallasTemperature::getTempFByIndex(uint8_t deviceIndex) -{ - DeviceAddress deviceAddress; - if (!getAddress(deviceAddress, deviceIndex)) - return DEVICE_DISCONNECTED_F; - return getTempF((uint8_t*)deviceAddress); -} - -// reads scratchpad and returns fixed-point temperature, scaling factor 2^-7 -int16_t DallasTemperature::calculateTemperature(const uint8_t* deviceAddress, uint8_t* scratchPad) -{ - int16_t fpTemperature = - (((int16_t) scratchPad[TEMP_MSB]) << 11) | - (((int16_t) scratchPad[TEMP_LSB]) << 3); - - /* - DS1820 and DS18S20 have a 9-bit temperature register. - - Resolutions greater than 9-bit can be calculated using the data from - the temperature, and COUNT REMAIN and COUNT PER °C registers in the - scratchpad. The resolution of the calculation depends on the model. - - While the COUNT PER °C register is hard-wired to 16 (10h) in a - DS18S20, it changes with temperature in DS1820. - - After reading the scratchpad, the TEMP_READ value is obtained by - truncating the 0.5°C bit (bit 0) from the temperature data. The - extended resolution temperature can then be calculated using the - following equation: - - COUNT_PER_C - COUNT_REMAIN - TEMPERATURE = TEMP_READ - 0.25 + -------------------------- - COUNT_PER_C - - Hagai Shatz simplified this to integer arithmetic for a 12 bits - value for a DS18S20, and James Cameron added legacy DS1820 support. - - See - http://myarduinotoy.blogspot.co.uk/2013/02/12bit-result-from-ds18s20.html - */ - - if (deviceAddress[0] == DS18S20MODEL) - fpTemperature = ((fpTemperature & 0xfff0) << 3) - 16 + - ( - ((scratchPad[COUNT_PER_C] - scratchPad[COUNT_REMAIN]) << 7) / - scratchPad[COUNT_PER_C] - ); - - return fpTemperature; -} - - -// returns temperature in 1/128 degrees C or DEVICE_DISCONNECTED_RAW if the -// device's scratch pad cannot be read successfully. -// the numeric value of DEVICE_DISCONNECTED_RAW is defined in -// DallasTemperature.h. It is a large negative number outside the -// operating range of the device -int16_t DallasTemperature::getTemp(const uint8_t* deviceAddress) -{ - ScratchPad scratchPad; - if (isConnected(deviceAddress, scratchPad)) return calculateTemperature(deviceAddress, scratchPad); - return DEVICE_DISCONNECTED_RAW; -} - -// returns temperature in degrees C or DEVICE_DISCONNECTED_C if the -// device's scratch pad cannot be read successfully. -// the numeric value of DEVICE_DISCONNECTED_C is defined in -// DallasTemperature.h. It is a large negative number outside the -// operating range of the device -float DallasTemperature::getTempC(const uint8_t* deviceAddress) -{ - return rawToCelsius(getTemp(deviceAddress)); -} - -// returns temperature in degrees F or DEVICE_DISCONNECTED_F if the -// device's scratch pad cannot be read successfully. -// the numeric value of DEVICE_DISCONNECTED_F is defined in -// DallasTemperature.h. It is a large negative number outside the -// operating range of the device -float DallasTemperature::getTempF(const uint8_t* deviceAddress) -{ - return rawToFahrenheit(getTemp(deviceAddress)); -} - -// returns true if the bus requires parasite power -bool DallasTemperature::isParasitePowerMode(void) -{ - return parasite; -} - -#if REQUIRESALARMS - -/* - -ALARMS: - -TH and TL Register Format - -BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 - S 2^6 2^5 2^4 2^3 2^2 2^1 2^0 - -Only bits 11 through 4 of the temperature register are used -in the TH and TL comparison since TH and TL are 8-bit -registers. If the measured temperature is lower than or equal -to TL or higher than or equal to TH, an alarm condition exists -and an alarm flag is set inside the DS18B20. This flag is -updated after every temperature measurement; therefore, if the -alarm condition goes away, the flag will be turned off after -the next temperature conversion. - -*/ - -// sets the high alarm temperature for a device in degrees Celsius -// accepts a float, but the alarm resolution will ignore anything -// after a decimal point. valid range is -55C - 125C -void DallasTemperature::setHighAlarmTemp(const uint8_t* deviceAddress, char celsius) -{ - // make sure the alarm temperature is within the device's range - if (celsius > 125) celsius = 125; - else if (celsius < -55) celsius = -55; - - ScratchPad scratchPad; - if (isConnected(deviceAddress, scratchPad)) - { - scratchPad[HIGH_ALARM_TEMP] = (uint8_t)celsius; - writeScratchPad(deviceAddress, scratchPad); - } -} - -// sets the low alarm temperature for a device in degrees Celsius -// accepts a float, but the alarm resolution will ignore anything -// after a decimal point. valid range is -55C - 125C -void DallasTemperature::setLowAlarmTemp(const uint8_t* deviceAddress, char celsius) -{ - // make sure the alarm temperature is within the device's range - if (celsius > 125) celsius = 125; - else if (celsius < -55) celsius = -55; - - ScratchPad scratchPad; - if (isConnected(deviceAddress, scratchPad)) - { - scratchPad[LOW_ALARM_TEMP] = (uint8_t)celsius; - writeScratchPad(deviceAddress, scratchPad); - } -} - -// returns a char with the current high alarm temperature or -// DEVICE_DISCONNECTED for an address -char DallasTemperature::getHighAlarmTemp(const uint8_t* deviceAddress) -{ - ScratchPad scratchPad; - if (isConnected(deviceAddress, scratchPad)) return (char)scratchPad[HIGH_ALARM_TEMP]; - return DEVICE_DISCONNECTED_C; -} - -// returns a char with the current low alarm temperature or -// DEVICE_DISCONNECTED for an address -char DallasTemperature::getLowAlarmTemp(const uint8_t* deviceAddress) -{ - ScratchPad scratchPad; - if (isConnected(deviceAddress, scratchPad)) return (char)scratchPad[LOW_ALARM_TEMP]; - return DEVICE_DISCONNECTED_C; -} - -// resets internal variables used for the alarm search -void DallasTemperature::resetAlarmSearch() -{ - alarmSearchJunction = -1; - alarmSearchExhausted = 0; - for(uint8_t i = 0; i < 7; i++) - alarmSearchAddress[i] = 0; -} - -// This is a modified version of the OneWire::search method. -// -// Also added the OneWire search fix documented here: -// http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1238032295 -// -// Perform an alarm search. If this function returns a '1' then it has -// enumerated the next device and you may retrieve the ROM from the -// OneWire::address variable. If there are no devices, no further -// devices, or something horrible happens in the middle of the -// enumeration then a 0 is returned. If a new device is found then -// its address is copied to newAddr. Use -// DallasTemperature::resetAlarmSearch() to start over. -bool DallasTemperature::alarmSearch(uint8_t* newAddr) -{ - uint8_t i; - char lastJunction = -1; - uint8_t done = 1; - - if (alarmSearchExhausted) return false; - if (!_wire->reset()) return false; - - // send the alarm search command - _wire->write(0xEC, 0); - - for(i = 0; i < 64; i++) - { - uint8_t a = _wire->read_bit( ); - uint8_t nota = _wire->read_bit( ); - uint8_t ibyte = i / 8; - uint8_t ibit = 1 << (i & 7); - - // I don't think this should happen, this means nothing responded, but maybe if - // something vanishes during the search it will come up. - if (a && nota) return false; - - if (!a && !nota) - { - if (i == alarmSearchJunction) - { - // this is our time to decide differently, we went zero last time, go one. - a = 1; - alarmSearchJunction = lastJunction; - } - else if (i < alarmSearchJunction) - { - // take whatever we took last time, look in address - if (alarmSearchAddress[ibyte] & ibit) a = 1; - else - { - // Only 0s count as pending junctions, we've already exhausted the 0 side of 1s - a = 0; - done = 0; - lastJunction = i; - } - } - else - { - // we are blazing new tree, take the 0 - a = 0; - alarmSearchJunction = i; - done = 0; - } - // OneWire search fix - // See: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1238032295 - } - - if (a) alarmSearchAddress[ibyte] |= ibit; - else alarmSearchAddress[ibyte] &= ~ibit; - - _wire->write_bit(a); - } - - if (done) alarmSearchExhausted = 1; - for (i = 0; i < 8; i++) newAddr[i] = alarmSearchAddress[i]; - return true; -} - -// returns true if device address might have an alarm condition -// (only an alarm search can verify this) -bool DallasTemperature::hasAlarm(const uint8_t* deviceAddress) -{ - ScratchPad scratchPad; - if (isConnected(deviceAddress, scratchPad)) - { - char temp = calculateTemperature(deviceAddress, scratchPad) >> 7; - - // check low alarm - if (temp <= (char)scratchPad[LOW_ALARM_TEMP]) return true; - - // check high alarm - if (temp >= (char)scratchPad[HIGH_ALARM_TEMP]) return true; - } - - // no alarm - return false; -} - -// returns true if any device is reporting an alarm condition on the bus -bool DallasTemperature::hasAlarm(void) -{ - DeviceAddress deviceAddress; - resetAlarmSearch(); - return alarmSearch(deviceAddress); -} - -// runs the alarm handler for all devices returned by alarmSearch() -void DallasTemperature::processAlarms(void) -{ - resetAlarmSearch(); - DeviceAddress alarmAddr; - - while (alarmSearch(alarmAddr)) - { - if (validAddress(alarmAddr)) - _AlarmHandler(alarmAddr); - } -} - -// sets the alarm handler -void DallasTemperature::setAlarmHandler(AlarmHandler *handler) -{ - _AlarmHandler = handler; -} - -// The default alarm handler -void DallasTemperature::defaultAlarmHandler(const uint8_t* deviceAddress) -{ - (void)deviceAddress; -} - -#endif - -// Convert float Celsius to Fahrenheit -float DallasTemperature::toFahrenheit(float celsius) -{ - return (celsius * 1.8) + 32; -} - -// Convert float Fahrenheit to Celsius -float DallasTemperature::toCelsius(float fahrenheit) -{ - return (fahrenheit - 32) * 0.555555556; -} - -// convert from raw to Celsius -float DallasTemperature::rawToCelsius(int16_t raw) -{ - if (raw <= DEVICE_DISCONNECTED_RAW) - return DEVICE_DISCONNECTED_C; - // C = RAW/128 - return (float)raw * 0.0078125; -} - -// convert from raw to Fahrenheit -float DallasTemperature::rawToFahrenheit(int16_t raw) -{ - if (raw <= DEVICE_DISCONNECTED_RAW) - return DEVICE_DISCONNECTED_F; - // C = RAW/128 - // F = (C*1.8)+32 = (RAW/128*1.8)+32 = (RAW*0.0140625)+32 - return ((float)raw * 0.0140625) + 32; -} - -#if REQUIRESNEW - -// MnetCS - Allocates memory for DallasTemperature. Allows us to instance a new object -void* DallasTemperature::operator new(unsigned int size) // Implicit NSS obj size -{ - void * p; // void pointer - p = malloc(size); // Allocate memory - memset((DallasTemperature*)p,0,size); // Initialise memory - - //!!! CANT EXPLICITLY CALL CONSTRUCTOR - workaround by using an init() methodR - workaround by using an init() method - return (DallasTemperature*) p; // Cast blank region to NSS pointer -} - -// MnetCS 2009 - Free the memory used by this instance -void DallasTemperature::operator delete(void* p) -{ - DallasTemperature* pNss = (DallasTemperature*) p; // Cast to NSS pointer - pNss->~DallasTemperature(); // Destruct the object - - free(p); // Free the memory -} - -#endif diff --git a/libraries/DallasTemperature/DallasTemperature.h b/libraries/DallasTemperature/DallasTemperature.h deleted file mode 100644 index 189fc6b..0000000 --- a/libraries/DallasTemperature/DallasTemperature.h +++ /dev/null @@ -1,254 +0,0 @@ -#ifndef DallasTemperature_h -#define DallasTemperature_h - -#define DALLASTEMPLIBVERSION "3.7.2" - -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License, or (at your option) any later version. - -// set to true to include code for new and delete operators -#ifndef REQUIRESNEW -#define REQUIRESNEW false -#endif - -// set to true to include code implementing alarm search functions -#ifndef REQUIRESALARMS -#define REQUIRESALARMS true -#endif - -#include -#include - -// Model IDs -#define DS18S20MODEL 0x10 // also DS1820 -#define DS18B20MODEL 0x28 -#define DS1822MODEL 0x22 -#define DS1825MODEL 0x3B - -// OneWire commands -#define STARTCONVO 0x44 // Tells device to take a temperature reading and put it on the scratchpad -#define COPYSCRATCH 0x48 // Copy EEPROM -#define READSCRATCH 0xBE // Read EEPROM -#define WRITESCRATCH 0x4E // Write to EEPROM -#define RECALLSCRATCH 0xB8 // Reload from last known -#define READPOWERSUPPLY 0xB4 // Determine if device needs parasite power -#define ALARMSEARCH 0xEC // Query bus for devices with an alarm condition - -// Scratchpad locations -#define TEMP_LSB 0 -#define TEMP_MSB 1 -#define HIGH_ALARM_TEMP 2 -#define LOW_ALARM_TEMP 3 -#define CONFIGURATION 4 -#define INTERNAL_BYTE 5 -#define COUNT_REMAIN 6 -#define COUNT_PER_C 7 -#define SCRATCHPAD_CRC 8 - -// Device resolution -#define TEMP_9_BIT 0x1F // 9 bit -#define TEMP_10_BIT 0x3F // 10 bit -#define TEMP_11_BIT 0x5F // 11 bit -#define TEMP_12_BIT 0x7F // 12 bit - -// Error Codes -#define DEVICE_DISCONNECTED_C -127 -#define DEVICE_DISCONNECTED_F -196.6 -#define DEVICE_DISCONNECTED_RAW -7040 - -typedef uint8_t DeviceAddress[8]; - -class DallasTemperature -{ - public: - - DallasTemperature(OneWire*); - - // initialise bus - void begin(void); - - // returns the number of devices found on the bus - uint8_t getDeviceCount(void); - - // returns true if address is valid - bool validAddress(const uint8_t*); - - // finds an address at a given index on the bus - bool getAddress(uint8_t*, uint8_t); - - // attempt to determine if the device at the given address is connected to the bus - bool isConnected(const uint8_t*); - - // attempt to determine if the device at the given address is connected to the bus - // also allows for updating the read scratchpad - bool isConnected(const uint8_t*, uint8_t*); - - // read device's scratchpad - void readScratchPad(const uint8_t*, uint8_t*); - - // write device's scratchpad - void writeScratchPad(const uint8_t*, const uint8_t*); - - // read device's power requirements - bool readPowerSupply(const uint8_t*); - - // get global resolution - uint8_t getResolution(); - - // set global resolution to 9, 10, 11, or 12 bits - void setResolution(uint8_t); - - // returns the device resolution: 9, 10, 11, or 12 bits - uint8_t getResolution(const uint8_t*); - - // set resolution of a device to 9, 10, 11, or 12 bits - bool setResolution(const uint8_t*, uint8_t); - - // sets/gets the waitForConversion flag - void setWaitForConversion(bool); - bool getWaitForConversion(void); - - // sets/gets the checkForConversion flag - void setCheckForConversion(bool); - bool getCheckForConversion(void); - - // sends command for all devices on the bus to perform a temperature conversion - void requestTemperatures(void); - - // returns time to wait for a temperature conversion based on given resolution - int16_t millisToWaitForConversion(uint8_t); - - // sends command for one device to perform a temperature conversion by address - bool requestTemperaturesByAddress(const uint8_t*); - - // sends command for one device to perform a temperature conversion by index - bool requestTemperaturesByIndex(uint8_t); - - // returns temperature raw value (12 bit integer of 1/16 degrees C) - int16_t getTemp(const uint8_t*); - - // returns temperature in degrees C - float getTempC(const uint8_t*); - - // returns temperature in degrees F - float getTempF(const uint8_t*); - - // Get temperature for device index (slow) - float getTempCByIndex(uint8_t); - - // Get temperature for device index (slow) - float getTempFByIndex(uint8_t); - - // returns true if the bus requires parasite power - bool isParasitePowerMode(void); - - bool isConversionAvailable(const uint8_t*); - - #if REQUIRESALARMS - - typedef void AlarmHandler(const uint8_t*); - - // sets the high alarm temperature for a device - // accepts a char. valid range is -55C - 125C - void setHighAlarmTemp(const uint8_t*, char); - - // sets the low alarm temperature for a device - // accepts a char. valid range is -55C - 125C - void setLowAlarmTemp(const uint8_t*, char); - - // returns a signed char with the current high alarm temperature for a device - // in the range -55C - 125C - char getHighAlarmTemp(const uint8_t*); - - // returns a signed char with the current low alarm temperature for a device - // in the range -55C - 125C - char getLowAlarmTemp(const uint8_t*); - - // resets internal variables used for the alarm search - void resetAlarmSearch(void); - - // search the wire for devices with active alarms - bool alarmSearch(uint8_t*); - - // returns true if ia specific device has an alarm - bool hasAlarm(const uint8_t*); - - // returns true if any device is reporting an alarm on the bus - bool hasAlarm(void); - - // runs the alarm handler for all devices returned by alarmSearch() - void processAlarms(void); - - // sets the alarm handler - void setAlarmHandler(const AlarmHandler *); - - // The default alarm handler - static void defaultAlarmHandler(const uint8_t*); - - #endif - - // convert from Celsius to Fahrenheit - static float toFahrenheit(float); - - // convert from Fahrenheit to Celsius - static float toCelsius(float); - - // convert from raw to Celsius - static float rawToCelsius(int16_t); - - // convert from raw to Fahrenheit - static float rawToFahrenheit(int16_t); - - #if REQUIRESNEW - - // initialize memory area - void* operator new (unsigned int); - - // delete memory reference - void operator delete(void*); - - #endif - - private: - typedef uint8_t ScratchPad[9]; - - // parasite power on or off - bool parasite; - - // used to determine the delay amount needed to allow for the - // temperature conversion to take place - uint8_t bitResolution; - - // used to requestTemperature with or without delay - bool waitForConversion; - - // used to requestTemperature to dynamically check if a conversion is complete - bool checkForConversion; - - // count of devices on the bus - uint8_t devices; - - // Take a pointer to one wire instance - OneWire* _wire; - - // reads scratchpad and returns the raw temperature - int16_t calculateTemperature(const uint8_t*, uint8_t*); - - void blockTillConversionComplete(uint8_t, const uint8_t*); - - #if REQUIRESALARMS - - // required for alarmSearch - uint8_t alarmSearchAddress[8]; - char alarmSearchJunction; - uint8_t alarmSearchExhausted; - - // the alarm handler function pointer - AlarmHandler *_AlarmHandler; - - #endif - -}; -#endif diff --git a/libraries/DallasTemperature/README.md b/libraries/DallasTemperature/README.md deleted file mode 100644 index b4ca8c2..0000000 --- a/libraries/DallasTemperature/README.md +++ /dev/null @@ -1,68 +0,0 @@ -Arduino Library for Dallas Temperature ICs -========================================== - -Usage ------ - -This library supports the following devices : - - -* DS18B20 -* DS18S20 - Please note there appears to be an issue with this series. -* DS1822 -* DS1820 - - -You will need a pull-up resistor of about 5 KOhm between the 1-Wire data line -and your 5V power. If you are using the DS18B20, ground pins 1 and 3. The -centre pin is the data line '1-wire'. - -We have included a "REQUIRESNEW" and "REQUIRESALARMS" definition. If you -want to slim down the code feel free to use either of these by including - - - - #define REQUIRESNEW - -or - - #define REQUIRESALARMS - - -at the top of DallasTemperature.h - - -Credits -------- - -The OneWire code has been derived from -http://www.arduino.cc/playground/Learning/OneWire. -Miles Burton originally developed this library. -Tim Newsome added support for multiple sensors on -the same bus. -Guil Barros [gfbarros@bappos.com] added getTempByAddress (v3.5) -Rob Tillaart [rob.tillaart@gmail.com] added async modus (v3.7.0) - - -Website -------- - -You can find the latest version of the library at -http://milesburton.com/index.php?title=Dallas_Temperature_Control_Library - -License -------- - -This library is free software; you can redistribute it and/or -modify it under the terms of the GNU Lesser General Public -License as published by the Free Software Foundation; either -version 2.1 of the License, or (at your option) any later version. - -This library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public -License along with this library; if not, write to the Free Software -Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA diff --git a/libraries/DallasTemperature/change.txt b/libraries/DallasTemperature/change.txt deleted file mode 100644 index 42564ca..0000000 --- a/libraries/DallasTemperature/change.txt +++ /dev/null @@ -1,85 +0,0 @@ - -This file contains the change history of the Dallas Temperature Control Library. - -VERSION 3.7.2 BETA -=================== -DATE: 6 DEC 2011 - -- Jordan Hochenbaum [jhochenbaum@gmail.com] updated library for compatibility with Arduino 1.0. - -VERSION 3.7.0 BETA -=================== -DATE: 11 JAN 2011 - -- Rob Tillaart [rob.tillaart@gmail.com] added async modus (v3.7.0) - The library is backwards compatible with version 3.6.0 - - MAJOR: async modus - ------------------ -- Added - private bool waitForConversion. -This boolean is default set to true in the Constructor to keep the library backwards compatible. If this flag is true calls to requestTemperatures(), requestTemperaturesByAddress() et al, will be blocking with the appropiate time specified (in datasheet) for the resolution used. If the flag is set to false, requestTemperatures() et al, will return immediately after the conversion command is send over the 1-wire interface. The programmer is responsible to wait long enough before reading the temperature values. This enables the application to do other things while waiting for a new reading, like calculations, update LCD, read/write other IO lines etc. See examples. - -- Added - void setWaitForConversion(bool); -To set the flag to true or false, depending on the modus needed. - -- Added - bool getWaitForConversion(void); -To get the current value of the flag. - -- Changed - void requestTemperatures(void); -Added a test (false == waitForConversion) to return immediately after the conversion command instead of waiting until the conversion is ready. - -- Changed - bool requestTemperaturesByAddress(uint8_t*); -Added a test (false == waitForConversion) to return immediately after the conversion command instead of waiting until the conversion is ready. - - - MINOR version number - -------------------- -- Added - #define DALLASTEMPLIBVERSION "3.7.0" -To indicate the version number in .h file - - - MINOR internal var bitResolution - ---------------------------- -- Changed - private int conversionDelay - is renamed to - private int bitResolution -As this variable holds the resolution. The delay for the conversion is derived from it. - -- Changed - uint8_t getResolution(uint8_t* deviceAddress); -If the device is not connected, it returns 0, otherwise it returns the resolution of the device. - -- Changed - bool setResolution(uint8_t* deviceAddress, uint8_t newResolution); -If the device is not connected, it returns FALSE (fail), otherwise it returns TRUE (succes). - -- Added - uint8_t getResolution(); -Returns bitResolution. - -- Added - void setResolution(uint8_t newResolution) -Sets the internal variable bitResolution, and all devices to this value - - - MINOR check connected state - ---------------------------- -- Changed - bool requestTemperaturesByIndex(deviceIndex) -Changed return type from void to bool. The function returns false if the device identified with [deviceIndex] is not found on the bus and true otherwise. - -- Changed - bool requestTemperaturesByAddress(deviceAddress) -Changed return type from void to bool. The function returns false if the device identified with [deviceAddress] is not found on the bus and true otherwise. -Added code to handle the DS18S20 which has a 9 bit resolution separately. -Changed code so the blocking delay matches the bitResolution set in the device with deviceAddress. - -- Changed - bool requestTemperaturesByIndex(uint8_t deviceIndex) -Changed return type from void to bool. The function returns false if the device identified with [deviceIndex] is not found on the bus and true otherwise. - - - -VERSION 3.6.0 -============== -DATE: 2010-10-10 - -- no detailed change history known except: - -- The OneWire code has been derived from -http://www.arduino.cc/playground/Learning/OneWire. -- Miles Burton originally developed this library. -- Tim Newsome added support for multiple sensors on -the same bus. -- Guil Barros [gfbarros@bappos.com] added getTempByAddress (v3.5) diff --git a/libraries/DallasTemperature/examples/Alarm/Alarm.pde b/libraries/DallasTemperature/examples/Alarm/Alarm.pde deleted file mode 100644 index 2aab5f5..0000000 --- a/libraries/DallasTemperature/examples/Alarm/Alarm.pde +++ /dev/null @@ -1,162 +0,0 @@ -#include -#include - -// Data wire is plugged into port 2 on the Arduino -#define ONE_WIRE_BUS 2 - -// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs) -OneWire oneWire(ONE_WIRE_BUS); - -// Pass our oneWire reference to Dallas Temperature. -DallasTemperature sensors(&oneWire); - -// arrays to hold device addresses -DeviceAddress insideThermometer, outsideThermometer; - -void setup(void) -{ - // start serial port - Serial.begin(9600); - Serial.println("Dallas Temperature IC Control Library Demo"); - - // Start up the library - sensors.begin(); - - // locate devices on the bus - Serial.print("Found "); - Serial.print(sensors.getDeviceCount(), DEC); - Serial.println(" devices."); - - // search for devices on the bus and assign based on an index. - if (!sensors.getAddress(insideThermometer, 0)) Serial.println("Unable to find address for Device 0"); - if (!sensors.getAddress(outsideThermometer, 1)) Serial.println("Unable to find address for Device 1"); - - // show the addresses we found on the bus - Serial.print("Device 0 Address: "); - printAddress(insideThermometer); - Serial.println(); - - Serial.print("Device 0 Alarms: "); - printAlarms(insideThermometer); - Serial.println(); - - Serial.print("Device 1 Address: "); - printAddress(outsideThermometer); - Serial.println(); - - Serial.print("Device 1 Alarms: "); - printAlarms(outsideThermometer); - Serial.println(); - - Serial.println("Setting alarm temps..."); - - // alarm when temp is higher than 30C - sensors.setHighAlarmTemp(insideThermometer, 30); - - // alarm when temp is lower than -10C - sensors.setLowAlarmTemp(insideThermometer, -10); - - // alarm when temp is higher than 31C - sensors.setHighAlarmTemp(outsideThermometer, 31); - - // alarn when temp is lower than 27C - sensors.setLowAlarmTemp(outsideThermometer, 27); - - Serial.print("New Device 0 Alarms: "); - printAlarms(insideThermometer); - Serial.println(); - - Serial.print("New Device 1 Alarms: "); - printAlarms(outsideThermometer); - Serial.println(); -} - -// function to print a device address -void printAddress(DeviceAddress deviceAddress) -{ - for (uint8_t i = 0; i < 8; i++) - { - if (deviceAddress[i] < 16) Serial.print("0"); - Serial.print(deviceAddress[i], HEX); - } -} - -// function to print the temperature for a device -void printTemperature(DeviceAddress deviceAddress) -{ - float tempC = sensors.getTempC(deviceAddress); - Serial.print("Temp C: "); - Serial.print(tempC); - Serial.print(" Temp F: "); - Serial.print(DallasTemperature::toFahrenheit(tempC)); -} - -void printAlarms(uint8_t deviceAddress[]) -{ - char temp; - temp = sensors.getHighAlarmTemp(deviceAddress); - Serial.print("High Alarm: "); - Serial.print(temp, DEC); - Serial.print("C/"); - Serial.print(DallasTemperature::toFahrenheit(temp)); - Serial.print("F | Low Alarm: "); - temp = sensors.getLowAlarmTemp(deviceAddress); - Serial.print(temp, DEC); - Serial.print("C/"); - Serial.print(DallasTemperature::toFahrenheit(temp)); - Serial.print("F"); -} - -// main function to print information about a device -void printData(DeviceAddress deviceAddress) -{ - Serial.print("Device Address: "); - printAddress(deviceAddress); - Serial.print(" "); - printTemperature(deviceAddress); - Serial.println(); -} - -void checkAlarm(DeviceAddress deviceAddress) -{ - if (sensors.hasAlarm(deviceAddress)) - { - Serial.print("ALARM: "); - printData(deviceAddress); - } -} - -void loop(void) -{ - // call sensors.requestTemperatures() to issue a global temperature - // request to all devices on the bus - Serial.print("Requesting temperatures..."); - sensors.requestTemperatures(); - Serial.println("DONE"); - - // Method 1: - // check each address individually for an alarm condition - checkAlarm(insideThermometer); - checkAlarm(outsideThermometer); -/* - // Alternate method: - // Search the bus and iterate through addresses of devices with alarms - - // space for the alarm device's address - DeviceAddress alarmAddr; - - Serial.println("Searching for alarms..."); - - // resetAlarmSearch() must be called before calling alarmSearch() - sensors.resetAlarmSearch(); - - // alarmSearch() returns 0 when there are no devices with alarms - while (sensors.alarmSearch(alarmAddr)) - { - Serial.print("ALARM: "); - printData(alarmAddr); - } -*/ - -} - diff --git a/libraries/DallasTemperature/examples/AlarmHandler/AlarmHandler.pde b/libraries/DallasTemperature/examples/AlarmHandler/AlarmHandler.pde deleted file mode 100644 index 606c5df..0000000 --- a/libraries/DallasTemperature/examples/AlarmHandler/AlarmHandler.pde +++ /dev/null @@ -1,144 +0,0 @@ -#include -#include - -// Data wire is plugged into port 2 on the Arduino -#define ONE_WIRE_BUS 2 - -// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs) -OneWire oneWire(ONE_WIRE_BUS); - -// Pass our oneWire reference to Dallas Temperature. -DallasTemperature sensors(&oneWire); - -// arrays to hold device addresses -DeviceAddress insideThermometer, outsideThermometer; - -// function that will be called when an alarm condition exists during DallasTemperatures::processAlarms(); -void newAlarmHandler(uint8_t* deviceAddress) -{ - Serial.println("Alarm Handler Start"); - printAlarmInfo(deviceAddress); - printTemp(deviceAddress); - Serial.println(); - Serial.println("Alarm Handler Finish"); -} - -void printCurrentTemp(DeviceAddress deviceAddress) -{ - printAddress(deviceAddress); - printTemp(deviceAddress); - Serial.println(); -} - -void printAddress(DeviceAddress deviceAddress) -{ - Serial.print("Address: "); - for (uint8_t i = 0; i < 8; i++) - { - if (deviceAddress[i] < 16) Serial.print("0"); - Serial.print(deviceAddress[i], HEX); - } - Serial.print(" "); -} - -void printTemp(DeviceAddress deviceAddress) -{ - float tempC = sensors.getTempC(deviceAddress); - if (tempC != DEVICE_DISCONNECTED) - { - Serial.print("Current Temp C: "); - Serial.print(tempC); - } - else Serial.print("DEVICE DISCONNECTED"); - Serial.print(" "); -} - -void printAlarmInfo(DeviceAddress deviceAddress) -{ - char temp; - printAddress(deviceAddress); - temp = sensors.getHighAlarmTemp(deviceAddress); - Serial.print("High Alarm: "); - Serial.print(temp, DEC); - Serial.print("C"); - Serial.print(" Low Alarm: "); - temp = sensors.getLowAlarmTemp(deviceAddress); - Serial.print(temp, DEC); - Serial.print("C"); - Serial.print(" "); -} - -void setup(void) -{ - // start serial port - Serial.begin(9600); - Serial.println("Dallas Temperature IC Control Library Demo"); - - // Start up the library - sensors.begin(); - - // locate devices on the bus - Serial.print("Found "); - Serial.print(sensors.getDeviceCount(), DEC); - Serial.println(" devices."); - - // search for devices on the bus and assign based on an index - if (!sensors.getAddress(insideThermometer, 0)) Serial.println("Unable to find address for Device 0"); - if (!sensors.getAddress(outsideThermometer, 1)) Serial.println("Unable to find address for Device 1"); - - Serial.print("Device insideThermometer "); - printAlarmInfo(insideThermometer); - Serial.println(); - - Serial.print("Device outsideThermometer "); - printAlarmInfo(outsideThermometer); - Serial.println(); - - // set alarm ranges - Serial.println("Setting alarm temps..."); - sensors.setHighAlarmTemp(insideThermometer, 26); - sensors.setLowAlarmTemp(insideThermometer, 22); - sensors.setHighAlarmTemp(outsideThermometer, 25); - sensors.setLowAlarmTemp(outsideThermometer, 21); - - Serial.print("New insideThermometer "); - printAlarmInfo(insideThermometer); - Serial.println(); - - Serial.print("New outsideThermometer "); - printAlarmInfo(outsideThermometer); - Serial.println(); - - // attach alarm handler - sensors.setAlarmHandler(&newAlarmHandler); - -} - -void loop(void) -{ - // ask the devices to measure the temperature - sensors.requestTemperatures(); - - // if an alarm condition exists as a result of the most recent - // requestTemperatures() request, it exists until the next time - // requestTemperatures() is called AND there isn't an alarm condition - // on the device - if (sensors.hasAlarm()) - { - Serial.println("Oh noes! There is at least one alarm on the bus."); - } - - // call alarm handler function defined by sensors.setAlarmHandler - // for each device reporting an alarm - sensors.processAlarms(); - - if (!sensors.hasAlarm()) - { - // just print out the current temperature - printCurrentTemp(insideThermometer); - printCurrentTemp(outsideThermometer); - } - - delay(1000); -} - diff --git a/libraries/DallasTemperature/examples/Multiple/Multiple.pde b/libraries/DallasTemperature/examples/Multiple/Multiple.pde deleted file mode 100644 index 9e7d6a8..0000000 --- a/libraries/DallasTemperature/examples/Multiple/Multiple.pde +++ /dev/null @@ -1,140 +0,0 @@ -#include -#include - -// Data wire is plugged into port 2 on the Arduino -#define ONE_WIRE_BUS 2 -#define TEMPERATURE_PRECISION 9 - -// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs) -OneWire oneWire(ONE_WIRE_BUS); - -// Pass our oneWire reference to Dallas Temperature. -DallasTemperature sensors(&oneWire); - -// arrays to hold device addresses -DeviceAddress insideThermometer, outsideThermometer; - -void setup(void) -{ - // start serial port - Serial.begin(9600); - Serial.println("Dallas Temperature IC Control Library Demo"); - - // Start up the library - sensors.begin(); - - // locate devices on the bus - Serial.print("Locating devices..."); - Serial.print("Found "); - Serial.print(sensors.getDeviceCount(), DEC); - Serial.println(" devices."); - - // report parasite power requirements - Serial.print("Parasite power is: "); - if (sensors.isParasitePowerMode()) Serial.println("ON"); - else Serial.println("OFF"); - - // assign address manually. the addresses below will beed to be changed - // to valid device addresses on your bus. device address can be retrieved - // by using either oneWire.search(deviceAddress) or individually via - // sensors.getAddress(deviceAddress, index) - //insideThermometer = { 0x28, 0x1D, 0x39, 0x31, 0x2, 0x0, 0x0, 0xF0 }; - //outsideThermometer = { 0x28, 0x3F, 0x1C, 0x31, 0x2, 0x0, 0x0, 0x2 }; - - // search for devices on the bus and assign based on an index. ideally, - // you would do this to initially discover addresses on the bus and then - // use those addresses and manually assign them (see above) once you know - // the devices on your bus (and assuming they don't change). - // - // method 1: by index - if (!sensors.getAddress(insideThermometer, 0)) Serial.println("Unable to find address for Device 0"); - if (!sensors.getAddress(outsideThermometer, 1)) Serial.println("Unable to find address for Device 1"); - - // method 2: search() - // search() looks for the next device. Returns 1 if a new address has been - // returned. A zero might mean that the bus is shorted, there are no devices, - // or you have already retrieved all of them. It might be a good idea to - // check the CRC to make sure you didn't get garbage. The order is - // deterministic. You will always get the same devices in the same order - // - // Must be called before search() - //oneWire.reset_search(); - // assigns the first address found to insideThermometer - //if (!oneWire.search(insideThermometer)) Serial.println("Unable to find address for insideThermometer"); - // assigns the seconds address found to outsideThermometer - //if (!oneWire.search(outsideThermometer)) Serial.println("Unable to find address for outsideThermometer"); - - // show the addresses we found on the bus - Serial.print("Device 0 Address: "); - printAddress(insideThermometer); - Serial.println(); - - Serial.print("Device 1 Address: "); - printAddress(outsideThermometer); - Serial.println(); - - // set the resolution to 9 bit - sensors.setResolution(insideThermometer, TEMPERATURE_PRECISION); - sensors.setResolution(outsideThermometer, TEMPERATURE_PRECISION); - - Serial.print("Device 0 Resolution: "); - Serial.print(sensors.getResolution(insideThermometer), DEC); - Serial.println(); - - Serial.print("Device 1 Resolution: "); - Serial.print(sensors.getResolution(outsideThermometer), DEC); - Serial.println(); -} - -// function to print a device address -void printAddress(DeviceAddress deviceAddress) -{ - for (uint8_t i = 0; i < 8; i++) - { - // zero pad the address if necessary - if (deviceAddress[i] < 16) Serial.print("0"); - Serial.print(deviceAddress[i], HEX); - } -} - -// function to print the temperature for a device -void printTemperature(DeviceAddress deviceAddress) -{ - float tempC = sensors.getTempC(deviceAddress); - Serial.print("Temp C: "); - Serial.print(tempC); - Serial.print(" Temp F: "); - Serial.print(DallasTemperature::toFahrenheit(tempC)); -} - -// function to print a device's resolution -void printResolution(DeviceAddress deviceAddress) -{ - Serial.print("Resolution: "); - Serial.print(sensors.getResolution(deviceAddress)); - Serial.println(); -} - -// main function to print information about a device -void printData(DeviceAddress deviceAddress) -{ - Serial.print("Device Address: "); - printAddress(deviceAddress); - Serial.print(" "); - printTemperature(deviceAddress); - Serial.println(); -} - -void loop(void) -{ - // call sensors.requestTemperatures() to issue a global temperature - // request to all devices on the bus - Serial.print("Requesting temperatures..."); - sensors.requestTemperatures(); - Serial.println("DONE"); - - // print the device information - printData(insideThermometer); - printData(outsideThermometer); -} - diff --git a/libraries/DallasTemperature/examples/Simple/Simple.pde b/libraries/DallasTemperature/examples/Simple/Simple.pde deleted file mode 100644 index e4383bf..0000000 --- a/libraries/DallasTemperature/examples/Simple/Simple.pde +++ /dev/null @@ -1,33 +0,0 @@ -#include -#include - -// Data wire is plugged into port 2 on the Arduino -#define ONE_WIRE_BUS 2 - -// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs) -OneWire oneWire(ONE_WIRE_BUS); - -// Pass our oneWire reference to Dallas Temperature. -DallasTemperature sensors(&oneWire); - -void setup(void) -{ - // start serial port - Serial.begin(9600); - Serial.println("Dallas Temperature IC Control Library Demo"); - - // Start up the library - sensors.begin(); -} - -void loop(void) -{ - // call sensors.requestTemperatures() to issue a global temperature - // request to all devices on the bus - Serial.print("Requesting temperatures..."); - sensors.requestTemperatures(); // Send the command to get temperatures - Serial.println("DONE"); - - Serial.print("Temperature for the device 1 (index 0) is: "); - Serial.println(sensors.getTempCByIndex(0)); -} diff --git a/libraries/DallasTemperature/examples/Single/Single.pde b/libraries/DallasTemperature/examples/Single/Single.pde deleted file mode 100644 index 784eb7a..0000000 --- a/libraries/DallasTemperature/examples/Single/Single.pde +++ /dev/null @@ -1,109 +0,0 @@ -#include -#include - -// Data wire is plugged into port 2 on the Arduino -#define ONE_WIRE_BUS 2 - -// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs) -OneWire oneWire(ONE_WIRE_BUS); - -// Pass our oneWire reference to Dallas Temperature. -DallasTemperature sensors(&oneWire); - -// arrays to hold device address -DeviceAddress insideThermometer; - -void setup(void) -{ - // start serial port - Serial.begin(9600); - Serial.println("Dallas Temperature IC Control Library Demo"); - - // locate devices on the bus - Serial.print("Locating devices..."); - sensors.begin(); - Serial.print("Found "); - Serial.print(sensors.getDeviceCount(), DEC); - Serial.println(" devices."); - - // report parasite power requirements - Serial.print("Parasite power is: "); - if (sensors.isParasitePowerMode()) Serial.println("ON"); - else Serial.println("OFF"); - - // assign address manually. the addresses below will beed to be changed - // to valid device addresses on your bus. device address can be retrieved - // by using either oneWire.search(deviceAddress) or individually via - // sensors.getAddress(deviceAddress, index) - //insideThermometer = { 0x28, 0x1D, 0x39, 0x31, 0x2, 0x0, 0x0, 0xF0 }; - - // Method 1: - // search for devices on the bus and assign based on an index. ideally, - // you would do this to initially discover addresses on the bus and then - // use those addresses and manually assign them (see above) once you know - // the devices on your bus (and assuming they don't change). - if (!sensors.getAddress(insideThermometer, 0)) Serial.println("Unable to find address for Device 0"); - - // method 2: search() - // search() looks for the next device. Returns 1 if a new address has been - // returned. A zero might mean that the bus is shorted, there are no devices, - // or you have already retrieved all of them. It might be a good idea to - // check the CRC to make sure you didn't get garbage. The order is - // deterministic. You will always get the same devices in the same order - // - // Must be called before search() - //oneWire.reset_search(); - // assigns the first address found to insideThermometer - //if (!oneWire.search(insideThermometer)) Serial.println("Unable to find address for insideThermometer"); - - // show the addresses we found on the bus - Serial.print("Device 0 Address: "); - printAddress(insideThermometer); - Serial.println(); - - // set the resolution to 9 bit (Each Dallas/Maxim device is capable of several different resolutions) - sensors.setResolution(insideThermometer, 9); - - Serial.print("Device 0 Resolution: "); - Serial.print(sensors.getResolution(insideThermometer), DEC); - Serial.println(); -} - -// function to print the temperature for a device -void printTemperature(DeviceAddress deviceAddress) -{ - // method 1 - slower - //Serial.print("Temp C: "); - //Serial.print(sensors.getTempC(deviceAddress)); - //Serial.print(" Temp F: "); - //Serial.print(sensors.getTempF(deviceAddress)); // Makes a second call to getTempC and then converts to Fahrenheit - - // method 2 - faster - float tempC = sensors.getTempC(deviceAddress); - Serial.print("Temp C: "); - Serial.print(tempC); - Serial.print(" Temp F: "); - Serial.println(DallasTemperature::toFahrenheit(tempC)); // Converts tempC to Fahrenheit -} - -void loop(void) -{ - // call sensors.requestTemperatures() to issue a global temperature - // request to all devices on the bus - Serial.print("Requesting temperatures..."); - sensors.requestTemperatures(); // Send the command to get temperatures - Serial.println("DONE"); - - // It responds almost immediately. Let's print out the data - printTemperature(insideThermometer); // Use a simple function to print out the data -} - -// function to print a device address -void printAddress(DeviceAddress deviceAddress) -{ - for (uint8_t i = 0; i < 8; i++) - { - if (deviceAddress[i] < 16) Serial.print("0"); - Serial.print(deviceAddress[i], HEX); - } -} diff --git a/libraries/DallasTemperature/examples/Tester/Tester.pde b/libraries/DallasTemperature/examples/Tester/Tester.pde deleted file mode 100644 index 4f75839..0000000 --- a/libraries/DallasTemperature/examples/Tester/Tester.pde +++ /dev/null @@ -1,124 +0,0 @@ -#include -#include - -// Data wire is plugged into port 2 on the Arduino -#define ONE_WIRE_BUS 2 -#define TEMPERATURE_PRECISION 9 - -// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs) -OneWire oneWire(ONE_WIRE_BUS); - -// Pass our oneWire reference to Dallas Temperature. -DallasTemperature sensors(&oneWire); - -int numberOfDevices; // Number of temperature devices found - -DeviceAddress tempDeviceAddress; // We'll use this variable to store a found device address - -void setup(void) -{ - // start serial port - Serial.begin(9600); - Serial.println("Dallas Temperature IC Control Library Demo"); - - // Start up the library - sensors.begin(); - - // Grab a count of devices on the wire - numberOfDevices = sensors.getDeviceCount(); - - // locate devices on the bus - Serial.print("Locating devices..."); - - Serial.print("Found "); - Serial.print(numberOfDevices, DEC); - Serial.println(" devices."); - - // report parasite power requirements - Serial.print("Parasite power is: "); - if (sensors.isParasitePowerMode()) Serial.println("ON"); - else Serial.println("OFF"); - - // Loop through each device, print out address - for(int i=0;i -#include - -// Data wire is plugged into port 2 on the Arduino -#define ONE_WIRE_BUS 2 - -// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs) -OneWire oneWire(ONE_WIRE_BUS); - -// Pass our oneWire reference to Dallas Temperature. -DallasTemperature sensors(&oneWire); - -void setup(void) -{ - // start serial port - Serial.begin(115200); - Serial.println("Dallas Temperature Control Library - Async Demo"); - Serial.println("\nDemo shows the difference in length of the call\n\n"); - - // Start up the library - sensors.begin(); -} - -void loop(void) -{ - // Request temperature conversion (traditional) - Serial.println("Before blocking requestForConversion"); - unsigned long start = millis(); - - sensors.requestTemperatures(); - - unsigned long stop = millis(); - Serial.println("After blocking requestForConversion"); - Serial.print("Time used: "); - Serial.println(stop - start); - - // get temperature - Serial.print("Temperature: "); - Serial.println(sensors.getTempCByIndex(0)); - Serial.println("\n"); - - // Request temperature conversion - non-blocking / async - Serial.println("Before NON-blocking/async requestForConversion"); - start = millis(); - sensors.setWaitForConversion(false); // makes it async - sensors.requestTemperatures(); - sensors.setWaitForConversion(true); - stop = millis(); - Serial.println("After NON-blocking/async requestForConversion"); - Serial.print("Time used: "); - Serial.println(stop - start); - - - // 9 bit resolution by default - // Note the programmer is responsible for the right delay - // we could do something usefull here instead of the delay - int resolution = 9; - delay(750/ (1 << (12-resolution))); - - // get temperature - Serial.print("Temperature: "); - Serial.println(sensors.getTempCByIndex(0)); - Serial.println("\n\n\n\n"); - - delay(5000); -} diff --git a/libraries/DallasTemperature/examples/WaitForConversion2/WaitForConversion2.pde b/libraries/DallasTemperature/examples/WaitForConversion2/WaitForConversion2.pde deleted file mode 100644 index f8e7700..0000000 --- a/libraries/DallasTemperature/examples/WaitForConversion2/WaitForConversion2.pde +++ /dev/null @@ -1,80 +0,0 @@ -// -// Sample of using Async reading of Dallas Temperature Sensors -// -#include -#include - -// Data wire is plugged into port 2 on the Arduino -#define ONE_WIRE_BUS 2 - -// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs) -OneWire oneWire(ONE_WIRE_BUS); - -// Pass our oneWire reference to Dallas Temperature. -DallasTemperature sensors(&oneWire); - -DeviceAddress tempDeviceAddress; - -int resolution = 12; -unsigned long lastTempRequest = 0; -int delayInMillis = 0; -float temperature = 0.0; -int idle = 0; -// -// SETUP -// -void setup(void) -{ - Serial.begin(115200); - Serial.println("Dallas Temperature Control Library - Async Demo"); - Serial.print("Library Version: "); - Serial.println(DALLASTEMPLIBVERSION); - Serial.println("\n"); - - sensors.begin(); - sensors.getAddress(tempDeviceAddress, 0); - sensors.setResolution(tempDeviceAddress, resolution); - - sensors.setWaitForConversion(false); - sensors.requestTemperatures(); - delayInMillis = 750 / (1 << (12 - resolution)); - lastTempRequest = millis(); - - pinMode(13, OUTPUT); -} - -void loop(void) -{ - - if (millis() - lastTempRequest >= delayInMillis) // waited long enough?? - { - digitalWrite(13, LOW); - Serial.print(" Temperature: "); - temperature = sensors.getTempCByIndex(0); - Serial.println(temperature, resolution - 8); - Serial.print(" Resolution: "); - Serial.println(resolution); - Serial.print("Idle counter: "); - Serial.println(idle); - Serial.println(); - - idle = 0; - - // immediately after fetching the temperature we request a new sample - // in the async modus - // for the demo we let the resolution change to show differences - resolution++; - if (resolution > 12) resolution = 9; - - sensors.setResolution(tempDeviceAddress, resolution); - sensors.requestTemperatures(); - delayInMillis = 750 / (1 << (12 - resolution)); - lastTempRequest = millis(); - } - - digitalWrite(13, HIGH); - // we can do usefull things here - // for the demo we just count the idle time in millis - delay(1); - idle++; -} diff --git a/libraries/DallasTemperature/keywords.txt b/libraries/DallasTemperature/keywords.txt deleted file mode 100644 index b80a269..0000000 --- a/libraries/DallasTemperature/keywords.txt +++ /dev/null @@ -1,55 +0,0 @@ -####################################### -# Syntax Coloring Map For Ultrasound -####################################### - -####################################### -# Datatypes (KEYWORD1) -####################################### -DallasTemperature KEYWORD1 -OneWire KEYWORD1 -AlarmHandler KEYWORD1 -DeviceAddress KEYWORD1 - -####################################### -# Methods and Functions (KEYWORD2) -####################################### - -setResolution KEYWORD2 -getResolution KEYWORD2 -getTempC KEYWORD2 -toFahrenheit KEYWORD2 -getTempF KEYWORD2 -getTempCByIndex KEYWORD2 -getTempFByIndex KEYWORD2 -setWaitForConversion KEYWORD2 -getWaitForConversion KEYWORD2 -requestTemperatures KEYWORD2 -requestTemperaturesByAddress KEYWORD2 -requestTemperaturesByIndex KEYWORD2 -isParasitePowerMode KEYWORD2 -begin KEYWORD2 -getDeviceCount KEYWORD2 -getAddress KEYWORD2 -validAddress KEYWORD2 -isConnected KEYWORD2 -readScratchPad KEYWORD2 -writeScratchPad KEYWORD2 -readPowerSupply KEYWORD2 -setHighAlarmTemp KEYWORD2 -setLowAlarmTemp KEYWORD2 -getHighAlarmTemp KEYWORD2 -getLowAlarmTemp KEYWORD2 -resetAlarmSearch KEYWORD2 -alarmSearch KEYWORD2 -hasAlarm KEYWORD2 -toCelsius KEYWORD2 -processAlarmss KEYWORD2 -setAlarmHandlers KEYWORD2 -defaultAlarmHandler KEYWORD2 -calculateTemperature KEYWORD2 -millisToWaitForConversion KEYWORD2 - -####################################### -# Constants (LITERAL1) -####################################### - diff --git a/libraries/DallasTemperature/library.json b/libraries/DallasTemperature/library.json deleted file mode 100644 index 2222135..0000000 --- a/libraries/DallasTemperature/library.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "DallasTemperature", - "keywords": "onewire, 1-wire, bus, sensor, temperature", - "description": "Arduino Library for Dallas Temperature ICs (DS18B20, DS18S20, DS1822, DS1820)", - "repository": - { - "type": "git", - "url": "https://github.com/milesburton/Arduino-Temperature-Control-Library.git" - }, - "authors": - [ - { - "name": "Miles Burton", - "email": "miles@mnetcs.com", - "url": "http://www.milesburton.com", - "maintainer": true - }, - { - "name": "Tim Newsome", - "email": "nuisance@casualhacker.net" - }, - { - "name": "Guil Barros", - "email": "gfbarros@bappos.com" - }, - { - "name": "Rob Tillaart", - "email": "rob.tillaart@gmail.com" - } - ], - "dependencies": - { - "name": "OneWire", - "authors": "Paul Stoffregen", - "frameworks": "arduino" - }, - "frameworks": "arduino", - "platforms": "atmelavr" -} diff --git a/libraries/EmonLib/EmonLib.cpp b/libraries/EmonLib/EmonLib.cpp deleted file mode 100644 index 1a1fd29..0000000 --- a/libraries/EmonLib/EmonLib.cpp +++ /dev/null @@ -1,259 +0,0 @@ -/* - Emon.cpp - Library for openenergymonitor - Created by Trystan Lea, April 27 2010 - GNU GPL - modified to use up to 12 bits ADC resolution (ex. Arduino Due) - by boredman@boredomprojects.net 26.12.2013 -*/ - -//#include "WProgram.h" un-comment for use on older versions of Arduino IDE -#include "EmonLib.h" - -#if defined(ARDUINO) && ARDUINO >= 100 - -#include "Arduino.h" - -#else - -#include "WProgram.h" - -#endif - -//-------------------------------------------------------------------------------------- -// Sets the pins to be used for voltage and current sensors -//-------------------------------------------------------------------------------------- -void EnergyMonitor::voltage(int _inPinV, double _VCAL, double _PHASECAL) -{ - inPinV = _inPinV; - VCAL = _VCAL; - PHASECAL = _PHASECAL; -} - -void EnergyMonitor::current(int _inPinI, double _ICAL) -{ - inPinI = _inPinI; - ICAL = _ICAL; -} - -//-------------------------------------------------------------------------------------- -// Sets the pins to be used for voltage and current sensors based on emontx pin map -//-------------------------------------------------------------------------------------- -void EnergyMonitor::voltageTX(double _VCAL, double _PHASECAL) -{ - inPinV = 2; - VCAL = _VCAL; - PHASECAL = _PHASECAL; -} - -void EnergyMonitor::currentTX(int _channel, double _ICAL) -{ - if (_channel == 1) inPinI = 3; - if (_channel == 2) inPinI = 0; - if (_channel == 3) inPinI = 1; - ICAL = _ICAL; -} - -//-------------------------------------------------------------------------------------- -// emon_calc procedure -// Calculates realPower,apparentPower,powerFactor,Vrms,Irms,kwh increment -// From a sample window of the mains AC voltage and current. -// The Sample window length is defined by the number of half wavelengths or crossings we choose to measure. -//-------------------------------------------------------------------------------------- -void EnergyMonitor::calcVI(int crossings, int timeout) -{ - #if defined emonTxV3 - int SUPPLYVOLTAGE=3300; - #else - int SUPPLYVOLTAGE = readVcc(); - #endif - - int crossCount = 0; //Used to measure number of times threshold is crossed. - int numberOfSamples = 0; //This is now incremented - - //------------------------------------------------------------------------------------------------------------------------- - // 1) Waits for the waveform to be close to 'zero' (500 adc) part in sin curve. - //------------------------------------------------------------------------------------------------------------------------- - boolean st=false; //an indicator to exit the while loop - - unsigned long start = millis(); //millis()-start makes sure it doesnt get stuck in the loop if there is an error. - - while(st==false) //the while loop... - { - startV = analogRead(inPinV); //using the voltage waveform - if ((startV < (ADC_COUNTS/2+50)) && (startV > (ADC_COUNTS/2-50))) st=true; //check its within range - if ((millis()-start)>timeout) st = true; - } - - //------------------------------------------------------------------------------------------------------------------------- - // 2) Main measurment loop - //------------------------------------------------------------------------------------------------------------------------- - start = millis(); - - while ((crossCount < crossings) && ((millis()-start) startV) checkVCross = true; - else checkVCross = false; - if (numberOfSamples==1) lastVCross = checkVCross; - - if (lastVCross != checkVCross) crossCount++; - } - - //------------------------------------------------------------------------------------------------------------------------- - // 3) Post loop calculations - //------------------------------------------------------------------------------------------------------------------------- - //Calculation of the root of the mean of the voltage and current squared (rms) - //Calibration coeficients applied. - - double V_RATIO = VCAL *((SUPPLYVOLTAGE/1000.0) / (ADC_COUNTS)); - Vrms = V_RATIO * sqrt(sumV / numberOfSamples); - - double I_RATIO = ICAL *((SUPPLYVOLTAGE/1000.0) / (ADC_COUNTS)); - Irms = I_RATIO * sqrt(sumI / numberOfSamples); - - //Calculation power values - realPower = V_RATIO * I_RATIO * sumP / numberOfSamples; - apparentPower = Vrms * Irms; - powerFactor=realPower / apparentPower; - - //Reset accumulators - sumV = 0; - sumI = 0; - sumP = 0; -//-------------------------------------------------------------------------------------- -} - -//-------------------------------------------------------------------------------------- -double EnergyMonitor::calcIrms(int NUMBER_OF_SAMPLES) -{ - - #if defined emonTxV3 - int SUPPLYVOLTAGE=3300; - #else - int SUPPLYVOLTAGE = readVcc(); - #endif - - - for (int n = 0; n < NUMBER_OF_SAMPLES; n++) - { - lastSampleI = sampleI; - sampleI = analogRead(inPinI); - lastFilteredI = filteredI; - filteredI = 0.996*(lastFilteredI+sampleI-lastSampleI); - - // Root-mean-square method current - // 1) square current values - sqI = filteredI * filteredI; - // 2) sum - sumI += sqI; - } - - double I_RATIO = ICAL *((SUPPLYVOLTAGE/1000.0) / (ADC_COUNTS)); - Irms = I_RATIO * sqrt(sumI / NUMBER_OF_SAMPLES); - - //Reset accumulators - sumI = 0; -//-------------------------------------------------------------------------------------- - - return Irms; -} - -void EnergyMonitor::serialprint() -{ - Serial.print(realPower); - Serial.print(' '); - Serial.print(apparentPower); - Serial.print(' '); - Serial.print(Vrms); - Serial.print(' '); - Serial.print(Irms); - Serial.print(' '); - Serial.print(powerFactor); - Serial.println(' '); - delay(100); -} - -//thanks to http://hacking.majenko.co.uk/making-accurate-adc-readings-on-arduino -//and Jérôme who alerted us to http://provideyourown.com/2012/secret-arduino-voltmeter-measure-battery-voltage/ - -long EnergyMonitor::readVcc() { - long result; - - //not used on emonTx V3 - as Vcc is always 3.3V - eliminates bandgap error and need for calibration http://harizanov.com/2013/09/thoughts-on-avr-adc-accuracy/ - - #if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328__) || defined (__AVR_ATmega328P__) - ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1); - #elif defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_AT90USB1286__) - ADMUX = _BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1); - ADCSRB &= ~_BV(MUX5); // Without this the function always returns -1 on the ATmega2560 http://openenergymonitor.org/emon/node/2253#comment-11432 - #elif defined (__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) - ADMUX = _BV(MUX5) | _BV(MUX0); - #elif defined (__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) - ADMUX = _BV(MUX3) | _BV(MUX2); - - #endif - - - #if defined(__AVR__) - delay(2); // Wait for Vref to settle - ADCSRA |= _BV(ADSC); // Convert - while (bit_is_set(ADCSRA,ADSC)); - result = ADCL; - result |= ADCH<<8; - result = 1126400L / result; //1100mV*1024 ADC steps http://openenergymonitor.org/emon/node/1186 - return result; - #elif defined(__arm__) - return (3300); //Arduino Due - #else - return (3300); //Guess that other un-supported architectures will be running a 3.3V! - #endif -} - diff --git a/libraries/EmonLib/EmonLib.h b/libraries/EmonLib/EmonLib.h deleted file mode 100644 index 41cafcb..0000000 --- a/libraries/EmonLib/EmonLib.h +++ /dev/null @@ -1,89 +0,0 @@ -/* - Emon.h - Library for openenergymonitor - Created by Trystan Lea, April 27 2010 - GNU GPL - modified to use up to 12 bits ADC resolution (ex. Arduino Due) - by boredman@boredomprojects.net 26.12.2013 -*/ - -#ifndef EmonLib_h -#define EmonLib_h - -#if defined(ARDUINO) && ARDUINO >= 100 - -#include "Arduino.h" - -#else - -#include "WProgram.h" - -#endif - -// to enable 12-bit ADC resolution on Arduino Due, -// include the following line in main sketch inside setup() function: -// analogReadResolution(ADC_BITS); -// otherwise will default to 10 bits, as in regular Arduino-based boards. -#if defined(__arm__) -#define ADC_BITS 12 -#else -#define ADC_BITS 10 -#endif - -#define ADC_COUNTS (1< - * - * Version 1.2 - fix -2 bug in C-only code - * Version 1.1 - expand to support boards with up to 60 interrupts - * Version 1.0 - initial release - * - * 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. - */ - - -#ifndef Encoder_h_ -#define Encoder_h_ - -#if defined(ARDUINO) && ARDUINO >= 100 -#include "Arduino.h" -#elif defined(WIRING) -#include "Wiring.h" -#else -#include "WProgram.h" -#include "pins_arduino.h" -#endif - -#include "utility/direct_pin_read.h" - -#if defined(ENCODER_USE_INTERRUPTS) || !defined(ENCODER_DO_NOT_USE_INTERRUPTS) -#define ENCODER_USE_INTERRUPTS -#define ENCODER_ARGLIST_SIZE CORE_NUM_INTERRUPT -#include "utility/interrupt_pins.h" -#ifdef ENCODER_OPTIMIZE_INTERRUPTS -#include "utility/interrupt_config.h" -#endif -#else -#define ENCODER_ARGLIST_SIZE 0 -#endif - - - -// All the data needed by interrupts is consolidated into this ugly struct -// to facilitate assembly language optimizing of the speed critical update. -// The assembly code uses auto-incrementing addressing modes, so the struct -// must remain in exactly this order. -typedef struct { - volatile IO_REG_TYPE * pin1_register; - volatile IO_REG_TYPE * pin2_register; - IO_REG_TYPE pin1_bitmask; - IO_REG_TYPE pin2_bitmask; - uint8_t state; - int32_t position; -} Encoder_internal_state_t; - -class Encoder -{ -public: - Encoder(uint8_t pin1, uint8_t pin2) { - #ifdef INPUT_PULLUP - pinMode(pin1, INPUT_PULLUP); - pinMode(pin2, INPUT_PULLUP); - #else - pinMode(pin1, INPUT); - digitalWrite(pin1, HIGH); - pinMode(pin2, INPUT); - digitalWrite(pin2, HIGH); - #endif - encoder.pin1_register = PIN_TO_BASEREG(pin1); - encoder.pin1_bitmask = PIN_TO_BITMASK(pin1); - encoder.pin2_register = PIN_TO_BASEREG(pin2); - encoder.pin2_bitmask = PIN_TO_BITMASK(pin2); - encoder.position = 0; - // allow time for a passive R-C filter to charge - // through the pullup resistors, before reading - // the initial state - delayMicroseconds(2000); - uint8_t s = 0; - if (DIRECT_PIN_READ(encoder.pin1_register, encoder.pin1_bitmask)) s |= 1; - if (DIRECT_PIN_READ(encoder.pin2_register, encoder.pin2_bitmask)) s |= 2; - encoder.state = s; -#ifdef ENCODER_USE_INTERRUPTS - interrupts_in_use = attach_interrupt(pin1, &encoder); - interrupts_in_use += attach_interrupt(pin2, &encoder); -#endif - //update_finishup(); // to force linker to include the code (does not work) - } - - -#ifdef ENCODER_USE_INTERRUPTS - inline int32_t read() { - if (interrupts_in_use < 2) { - noInterrupts(); - update(&encoder); - } else { - noInterrupts(); - } - int32_t ret = encoder.position; - interrupts(); - return ret; - } - inline void write(int32_t p) { - noInterrupts(); - encoder.position = p; - interrupts(); - } -#else - inline int32_t read() { - update(&encoder); - return encoder.position; - } - inline void write(int32_t p) { - encoder.position = p; - } -#endif -private: - Encoder_internal_state_t encoder; -#ifdef ENCODER_USE_INTERRUPTS - uint8_t interrupts_in_use; -#endif -public: - static Encoder_internal_state_t * interruptArgs[ENCODER_ARGLIST_SIZE]; - -// _______ _______ -// Pin1 ______| |_______| |______ Pin1 -// negative <--- _______ _______ __ --> positive -// Pin2 __| |_______| |_______| Pin2 - - // new new old old - // pin2 pin1 pin2 pin1 Result - // ---- ---- ---- ---- ------ - // 0 0 0 0 no movement - // 0 0 0 1 +1 - // 0 0 1 0 -1 - // 0 0 1 1 +2 (assume pin1 edges only) - // 0 1 0 0 -1 - // 0 1 0 1 no movement - // 0 1 1 0 -2 (assume pin1 edges only) - // 0 1 1 1 +1 - // 1 0 0 0 +1 - // 1 0 0 1 -2 (assume pin1 edges only) - // 1 0 1 0 no movement - // 1 0 1 1 -1 - // 1 1 0 0 +2 (assume pin1 edges only) - // 1 1 0 1 -1 - // 1 1 1 0 +1 - // 1 1 1 1 no movement -/* - // Simple, easy-to-read "documentation" version :-) - // - void update(void) { - uint8_t s = state & 3; - if (digitalRead(pin1)) s |= 4; - if (digitalRead(pin2)) s |= 8; - switch (s) { - case 0: case 5: case 10: case 15: - break; - case 1: case 7: case 8: case 14: - position++; break; - case 2: case 4: case 11: case 13: - position--; break; - case 3: case 12: - position += 2; break; - default: - position -= 2; break; - } - state = (s >> 2); - } -*/ - -private: - static void update(Encoder_internal_state_t *arg) { -#if defined(__AVR__) - // The compiler believes this is just 1 line of code, so - // it will inline this function into each interrupt - // handler. That's a tiny bit faster, but grows the code. - // Especially when used with ENCODER_OPTIMIZE_INTERRUPTS, - // the inline nature allows the ISR prologue and epilogue - // to only save/restore necessary registers, for very nice - // speed increase. - asm volatile ( - "ld r30, X+" "\n\t" - "ld r31, X+" "\n\t" - "ld r24, Z" "\n\t" // r24 = pin1 input - "ld r30, X+" "\n\t" - "ld r31, X+" "\n\t" - "ld r25, Z" "\n\t" // r25 = pin2 input - "ld r30, X+" "\n\t" // r30 = pin1 mask - "ld r31, X+" "\n\t" // r31 = pin2 mask - "ld r22, X" "\n\t" // r22 = state - "andi r22, 3" "\n\t" - "and r24, r30" "\n\t" - "breq L%=1" "\n\t" // if (pin1) - "ori r22, 4" "\n\t" // state |= 4 - "L%=1:" "and r25, r31" "\n\t" - "breq L%=2" "\n\t" // if (pin2) - "ori r22, 8" "\n\t" // state |= 8 - "L%=2:" "ldi r30, lo8(pm(L%=table))" "\n\t" - "ldi r31, hi8(pm(L%=table))" "\n\t" - "add r30, r22" "\n\t" - "adc r31, __zero_reg__" "\n\t" - "asr r22" "\n\t" - "asr r22" "\n\t" - "st X+, r22" "\n\t" // store new state - "ld r22, X+" "\n\t" - "ld r23, X+" "\n\t" - "ld r24, X+" "\n\t" - "ld r25, X+" "\n\t" - "ijmp" "\n\t" // jumps to update_finishup() - // TODO move this table to another static function, - // so it doesn't get needlessly duplicated. Easier - // said than done, due to linker issues and inlining - "L%=table:" "\n\t" - "rjmp L%=end" "\n\t" // 0 - "rjmp L%=plus1" "\n\t" // 1 - "rjmp L%=minus1" "\n\t" // 2 - "rjmp L%=plus2" "\n\t" // 3 - "rjmp L%=minus1" "\n\t" // 4 - "rjmp L%=end" "\n\t" // 5 - "rjmp L%=minus2" "\n\t" // 6 - "rjmp L%=plus1" "\n\t" // 7 - "rjmp L%=plus1" "\n\t" // 8 - "rjmp L%=minus2" "\n\t" // 9 - "rjmp L%=end" "\n\t" // 10 - "rjmp L%=minus1" "\n\t" // 11 - "rjmp L%=plus2" "\n\t" // 12 - "rjmp L%=minus1" "\n\t" // 13 - "rjmp L%=plus1" "\n\t" // 14 - "rjmp L%=end" "\n\t" // 15 - "L%=minus2:" "\n\t" - "subi r22, 2" "\n\t" - "sbci r23, 0" "\n\t" - "sbci r24, 0" "\n\t" - "sbci r25, 0" "\n\t" - "rjmp L%=store" "\n\t" - "L%=minus1:" "\n\t" - "subi r22, 1" "\n\t" - "sbci r23, 0" "\n\t" - "sbci r24, 0" "\n\t" - "sbci r25, 0" "\n\t" - "rjmp L%=store" "\n\t" - "L%=plus2:" "\n\t" - "subi r22, 254" "\n\t" - "rjmp L%=z" "\n\t" - "L%=plus1:" "\n\t" - "subi r22, 255" "\n\t" - "L%=z:" "sbci r23, 255" "\n\t" - "sbci r24, 255" "\n\t" - "sbci r25, 255" "\n\t" - "L%=store:" "\n\t" - "st -X, r25" "\n\t" - "st -X, r24" "\n\t" - "st -X, r23" "\n\t" - "st -X, r22" "\n\t" - "L%=end:" "\n" - : : "x" (arg) : "r22", "r23", "r24", "r25", "r30", "r31"); -#else - uint8_t p1val = DIRECT_PIN_READ(arg->pin1_register, arg->pin1_bitmask); - uint8_t p2val = DIRECT_PIN_READ(arg->pin2_register, arg->pin2_bitmask); - uint8_t state = arg->state & 3; - if (p1val) state |= 4; - if (p2val) state |= 8; - arg->state = (state >> 2); - switch (state) { - case 1: case 7: case 8: case 14: - arg->position++; - return; - case 2: case 4: case 11: case 13: - arg->position--; - return; - case 3: case 12: - arg->position += 2; - return; - case 6: case 9: - arg->position -= 2; - return; - } -#endif - } -/* -#if defined(__AVR__) - // TODO: this must be a no inline function - // even noinline does not seem to solve difficult - // problems with this. Oh well, it was only meant - // to shrink code size - there's no performance - // improvement in this, only code size reduction. - __attribute__((noinline)) void update_finishup(void) { - asm volatile ( - "ldi r30, lo8(pm(Ltable))" "\n\t" - "ldi r31, hi8(pm(Ltable))" "\n\t" - "Ltable:" "\n\t" - "rjmp L%=end" "\n\t" // 0 - "rjmp L%=plus1" "\n\t" // 1 - "rjmp L%=minus1" "\n\t" // 2 - "rjmp L%=plus2" "\n\t" // 3 - "rjmp L%=minus1" "\n\t" // 4 - "rjmp L%=end" "\n\t" // 5 - "rjmp L%=minus2" "\n\t" // 6 - "rjmp L%=plus1" "\n\t" // 7 - "rjmp L%=plus1" "\n\t" // 8 - "rjmp L%=minus2" "\n\t" // 9 - "rjmp L%=end" "\n\t" // 10 - "rjmp L%=minus1" "\n\t" // 11 - "rjmp L%=plus2" "\n\t" // 12 - "rjmp L%=minus1" "\n\t" // 13 - "rjmp L%=plus1" "\n\t" // 14 - "rjmp L%=end" "\n\t" // 15 - "L%=minus2:" "\n\t" - "subi r22, 2" "\n\t" - "sbci r23, 0" "\n\t" - "sbci r24, 0" "\n\t" - "sbci r25, 0" "\n\t" - "rjmp L%=store" "\n\t" - "L%=minus1:" "\n\t" - "subi r22, 1" "\n\t" - "sbci r23, 0" "\n\t" - "sbci r24, 0" "\n\t" - "sbci r25, 0" "\n\t" - "rjmp L%=store" "\n\t" - "L%=plus2:" "\n\t" - "subi r22, 254" "\n\t" - "rjmp L%=z" "\n\t" - "L%=plus1:" "\n\t" - "subi r22, 255" "\n\t" - "L%=z:" "sbci r23, 255" "\n\t" - "sbci r24, 255" "\n\t" - "sbci r25, 255" "\n\t" - "L%=store:" "\n\t" - "st -X, r25" "\n\t" - "st -X, r24" "\n\t" - "st -X, r23" "\n\t" - "st -X, r22" "\n\t" - "L%=end:" "\n" - : : : "r22", "r23", "r24", "r25", "r30", "r31"); - } -#endif -*/ - - -#ifdef ENCODER_USE_INTERRUPTS - // this giant function is an unfortunate consequence of Arduino's - // attachInterrupt function not supporting any way to pass a pointer - // or other context to the attached function. - static uint8_t attach_interrupt(uint8_t pin, Encoder_internal_state_t *state) { - switch (pin) { - #ifdef CORE_INT0_PIN - case CORE_INT0_PIN: - interruptArgs[0] = state; - attachInterrupt(0, isr0, CHANGE); - break; - #endif - #ifdef CORE_INT1_PIN - case CORE_INT1_PIN: - interruptArgs[1] = state; - attachInterrupt(1, isr1, CHANGE); - break; - #endif - #ifdef CORE_INT2_PIN - case CORE_INT2_PIN: - interruptArgs[2] = state; - attachInterrupt(2, isr2, CHANGE); - break; - #endif - #ifdef CORE_INT3_PIN - case CORE_INT3_PIN: - interruptArgs[3] = state; - attachInterrupt(3, isr3, CHANGE); - break; - #endif - #ifdef CORE_INT4_PIN - case CORE_INT4_PIN: - interruptArgs[4] = state; - attachInterrupt(4, isr4, CHANGE); - break; - #endif - #ifdef CORE_INT5_PIN - case CORE_INT5_PIN: - interruptArgs[5] = state; - attachInterrupt(5, isr5, CHANGE); - break; - #endif - #ifdef CORE_INT6_PIN - case CORE_INT6_PIN: - interruptArgs[6] = state; - attachInterrupt(6, isr6, CHANGE); - break; - #endif - #ifdef CORE_INT7_PIN - case CORE_INT7_PIN: - interruptArgs[7] = state; - attachInterrupt(7, isr7, CHANGE); - break; - #endif - #ifdef CORE_INT8_PIN - case CORE_INT8_PIN: - interruptArgs[8] = state; - attachInterrupt(8, isr8, CHANGE); - break; - #endif - #ifdef CORE_INT9_PIN - case CORE_INT9_PIN: - interruptArgs[9] = state; - attachInterrupt(9, isr9, CHANGE); - break; - #endif - #ifdef CORE_INT10_PIN - case CORE_INT10_PIN: - interruptArgs[10] = state; - attachInterrupt(10, isr10, CHANGE); - break; - #endif - #ifdef CORE_INT11_PIN - case CORE_INT11_PIN: - interruptArgs[11] = state; - attachInterrupt(11, isr11, CHANGE); - break; - #endif - #ifdef CORE_INT12_PIN - case CORE_INT12_PIN: - interruptArgs[12] = state; - attachInterrupt(12, isr12, CHANGE); - break; - #endif - #ifdef CORE_INT13_PIN - case CORE_INT13_PIN: - interruptArgs[13] = state; - attachInterrupt(13, isr13, CHANGE); - break; - #endif - #ifdef CORE_INT14_PIN - case CORE_INT14_PIN: - interruptArgs[14] = state; - attachInterrupt(14, isr14, CHANGE); - break; - #endif - #ifdef CORE_INT15_PIN - case CORE_INT15_PIN: - interruptArgs[15] = state; - attachInterrupt(15, isr15, CHANGE); - break; - #endif - #ifdef CORE_INT16_PIN - case CORE_INT16_PIN: - interruptArgs[16] = state; - attachInterrupt(16, isr16, CHANGE); - break; - #endif - #ifdef CORE_INT17_PIN - case CORE_INT17_PIN: - interruptArgs[17] = state; - attachInterrupt(17, isr17, CHANGE); - break; - #endif - #ifdef CORE_INT18_PIN - case CORE_INT18_PIN: - interruptArgs[18] = state; - attachInterrupt(18, isr18, CHANGE); - break; - #endif - #ifdef CORE_INT19_PIN - case CORE_INT19_PIN: - interruptArgs[19] = state; - attachInterrupt(19, isr19, CHANGE); - break; - #endif - #ifdef CORE_INT20_PIN - case CORE_INT20_PIN: - interruptArgs[20] = state; - attachInterrupt(20, isr20, CHANGE); - break; - #endif - #ifdef CORE_INT21_PIN - case CORE_INT21_PIN: - interruptArgs[21] = state; - attachInterrupt(21, isr21, CHANGE); - break; - #endif - #ifdef CORE_INT22_PIN - case CORE_INT22_PIN: - interruptArgs[22] = state; - attachInterrupt(22, isr22, CHANGE); - break; - #endif - #ifdef CORE_INT23_PIN - case CORE_INT23_PIN: - interruptArgs[23] = state; - attachInterrupt(23, isr23, CHANGE); - break; - #endif - #ifdef CORE_INT24_PIN - case CORE_INT24_PIN: - interruptArgs[24] = state; - attachInterrupt(24, isr24, CHANGE); - break; - #endif - #ifdef CORE_INT25_PIN - case CORE_INT25_PIN: - interruptArgs[25] = state; - attachInterrupt(25, isr25, CHANGE); - break; - #endif - #ifdef CORE_INT26_PIN - case CORE_INT26_PIN: - interruptArgs[26] = state; - attachInterrupt(26, isr26, CHANGE); - break; - #endif - #ifdef CORE_INT27_PIN - case CORE_INT27_PIN: - interruptArgs[27] = state; - attachInterrupt(27, isr27, CHANGE); - break; - #endif - #ifdef CORE_INT28_PIN - case CORE_INT28_PIN: - interruptArgs[28] = state; - attachInterrupt(28, isr28, CHANGE); - break; - #endif - #ifdef CORE_INT29_PIN - case CORE_INT29_PIN: - interruptArgs[29] = state; - attachInterrupt(29, isr29, CHANGE); - break; - #endif - - #ifdef CORE_INT30_PIN - case CORE_INT30_PIN: - interruptArgs[30] = state; - attachInterrupt(30, isr30, CHANGE); - break; - #endif - #ifdef CORE_INT31_PIN - case CORE_INT31_PIN: - interruptArgs[31] = state; - attachInterrupt(31, isr31, CHANGE); - break; - #endif - #ifdef CORE_INT32_PIN - case CORE_INT32_PIN: - interruptArgs[32] = state; - attachInterrupt(32, isr32, CHANGE); - break; - #endif - #ifdef CORE_INT33_PIN - case CORE_INT33_PIN: - interruptArgs[33] = state; - attachInterrupt(33, isr33, CHANGE); - break; - #endif - #ifdef CORE_INT34_PIN - case CORE_INT34_PIN: - interruptArgs[34] = state; - attachInterrupt(34, isr34, CHANGE); - break; - #endif - #ifdef CORE_INT35_PIN - case CORE_INT35_PIN: - interruptArgs[35] = state; - attachInterrupt(35, isr35, CHANGE); - break; - #endif - #ifdef CORE_INT36_PIN - case CORE_INT36_PIN: - interruptArgs[36] = state; - attachInterrupt(36, isr36, CHANGE); - break; - #endif - #ifdef CORE_INT37_PIN - case CORE_INT37_PIN: - interruptArgs[37] = state; - attachInterrupt(37, isr37, CHANGE); - break; - #endif - #ifdef CORE_INT38_PIN - case CORE_INT38_PIN: - interruptArgs[38] = state; - attachInterrupt(38, isr38, CHANGE); - break; - #endif - #ifdef CORE_INT39_PIN - case CORE_INT39_PIN: - interruptArgs[39] = state; - attachInterrupt(39, isr39, CHANGE); - break; - #endif - #ifdef CORE_INT40_PIN - case CORE_INT40_PIN: - interruptArgs[40] = state; - attachInterrupt(40, isr40, CHANGE); - break; - #endif - #ifdef CORE_INT41_PIN - case CORE_INT41_PIN: - interruptArgs[41] = state; - attachInterrupt(41, isr41, CHANGE); - break; - #endif - #ifdef CORE_INT42_PIN - case CORE_INT42_PIN: - interruptArgs[42] = state; - attachInterrupt(42, isr42, CHANGE); - break; - #endif - #ifdef CORE_INT43_PIN - case CORE_INT43_PIN: - interruptArgs[43] = state; - attachInterrupt(43, isr43, CHANGE); - break; - #endif - #ifdef CORE_INT44_PIN - case CORE_INT44_PIN: - interruptArgs[44] = state; - attachInterrupt(44, isr44, CHANGE); - break; - #endif - #ifdef CORE_INT45_PIN - case CORE_INT45_PIN: - interruptArgs[45] = state; - attachInterrupt(45, isr45, CHANGE); - break; - #endif - #ifdef CORE_INT46_PIN - case CORE_INT46_PIN: - interruptArgs[46] = state; - attachInterrupt(46, isr46, CHANGE); - break; - #endif - #ifdef CORE_INT47_PIN - case CORE_INT47_PIN: - interruptArgs[47] = state; - attachInterrupt(47, isr47, CHANGE); - break; - #endif - #ifdef CORE_INT48_PIN - case CORE_INT48_PIN: - interruptArgs[48] = state; - attachInterrupt(48, isr48, CHANGE); - break; - #endif - #ifdef CORE_INT49_PIN - case CORE_INT49_PIN: - interruptArgs[49] = state; - attachInterrupt(49, isr49, CHANGE); - break; - #endif - #ifdef CORE_INT50_PIN - case CORE_INT50_PIN: - interruptArgs[50] = state; - attachInterrupt(50, isr50, CHANGE); - break; - #endif - #ifdef CORE_INT51_PIN - case CORE_INT51_PIN: - interruptArgs[51] = state; - attachInterrupt(51, isr51, CHANGE); - break; - #endif - #ifdef CORE_INT52_PIN - case CORE_INT52_PIN: - interruptArgs[52] = state; - attachInterrupt(52, isr52, CHANGE); - break; - #endif - #ifdef CORE_INT53_PIN - case CORE_INT53_PIN: - interruptArgs[53] = state; - attachInterrupt(53, isr53, CHANGE); - break; - #endif - #ifdef CORE_INT54_PIN - case CORE_INT54_PIN: - interruptArgs[54] = state; - attachInterrupt(54, isr54, CHANGE); - break; - #endif - #ifdef CORE_INT55_PIN - case CORE_INT55_PIN: - interruptArgs[55] = state; - attachInterrupt(55, isr55, CHANGE); - break; - #endif - #ifdef CORE_INT56_PIN - case CORE_INT56_PIN: - interruptArgs[56] = state; - attachInterrupt(56, isr56, CHANGE); - break; - #endif - #ifdef CORE_INT57_PIN - case CORE_INT57_PIN: - interruptArgs[57] = state; - attachInterrupt(57, isr57, CHANGE); - break; - #endif - #ifdef CORE_INT58_PIN - case CORE_INT58_PIN: - interruptArgs[58] = state; - attachInterrupt(58, isr58, CHANGE); - break; - #endif - #ifdef CORE_INT59_PIN - case CORE_INT59_PIN: - interruptArgs[59] = state; - attachInterrupt(59, isr59, CHANGE); - break; - #endif - default: - return 0; - } - return 1; - } -#endif // ENCODER_USE_INTERRUPTS - - -#if defined(ENCODER_USE_INTERRUPTS) && !defined(ENCODER_OPTIMIZE_INTERRUPTS) - #ifdef CORE_INT0_PIN - static void isr0(void) { update(interruptArgs[0]); } - #endif - #ifdef CORE_INT1_PIN - static void isr1(void) { update(interruptArgs[1]); } - #endif - #ifdef CORE_INT2_PIN - static void isr2(void) { update(interruptArgs[2]); } - #endif - #ifdef CORE_INT3_PIN - static void isr3(void) { update(interruptArgs[3]); } - #endif - #ifdef CORE_INT4_PIN - static void isr4(void) { update(interruptArgs[4]); } - #endif - #ifdef CORE_INT5_PIN - static void isr5(void) { update(interruptArgs[5]); } - #endif - #ifdef CORE_INT6_PIN - static void isr6(void) { update(interruptArgs[6]); } - #endif - #ifdef CORE_INT7_PIN - static void isr7(void) { update(interruptArgs[7]); } - #endif - #ifdef CORE_INT8_PIN - static void isr8(void) { update(interruptArgs[8]); } - #endif - #ifdef CORE_INT9_PIN - static void isr9(void) { update(interruptArgs[9]); } - #endif - #ifdef CORE_INT10_PIN - static void isr10(void) { update(interruptArgs[10]); } - #endif - #ifdef CORE_INT11_PIN - static void isr11(void) { update(interruptArgs[11]); } - #endif - #ifdef CORE_INT12_PIN - static void isr12(void) { update(interruptArgs[12]); } - #endif - #ifdef CORE_INT13_PIN - static void isr13(void) { update(interruptArgs[13]); } - #endif - #ifdef CORE_INT14_PIN - static void isr14(void) { update(interruptArgs[14]); } - #endif - #ifdef CORE_INT15_PIN - static void isr15(void) { update(interruptArgs[15]); } - #endif - #ifdef CORE_INT16_PIN - static void isr16(void) { update(interruptArgs[16]); } - #endif - #ifdef CORE_INT17_PIN - static void isr17(void) { update(interruptArgs[17]); } - #endif - #ifdef CORE_INT18_PIN - static void isr18(void) { update(interruptArgs[18]); } - #endif - #ifdef CORE_INT19_PIN - static void isr19(void) { update(interruptArgs[19]); } - #endif - #ifdef CORE_INT20_PIN - static void isr20(void) { update(interruptArgs[20]); } - #endif - #ifdef CORE_INT21_PIN - static void isr21(void) { update(interruptArgs[21]); } - #endif - #ifdef CORE_INT22_PIN - static void isr22(void) { update(interruptArgs[22]); } - #endif - #ifdef CORE_INT23_PIN - static void isr23(void) { update(interruptArgs[23]); } - #endif - #ifdef CORE_INT24_PIN - static void isr24(void) { update(interruptArgs[24]); } - #endif - #ifdef CORE_INT25_PIN - static void isr25(void) { update(interruptArgs[25]); } - #endif - #ifdef CORE_INT26_PIN - static void isr26(void) { update(interruptArgs[26]); } - #endif - #ifdef CORE_INT27_PIN - static void isr27(void) { update(interruptArgs[27]); } - #endif - #ifdef CORE_INT28_PIN - static void isr28(void) { update(interruptArgs[28]); } - #endif - #ifdef CORE_INT29_PIN - static void isr29(void) { update(interruptArgs[29]); } - #endif - #ifdef CORE_INT30_PIN - static void isr30(void) { update(interruptArgs[30]); } - #endif - #ifdef CORE_INT31_PIN - static void isr31(void) { update(interruptArgs[31]); } - #endif - #ifdef CORE_INT32_PIN - static void isr32(void) { update(interruptArgs[32]); } - #endif - #ifdef CORE_INT33_PIN - static void isr33(void) { update(interruptArgs[33]); } - #endif - #ifdef CORE_INT34_PIN - static void isr34(void) { update(interruptArgs[34]); } - #endif - #ifdef CORE_INT35_PIN - static void isr35(void) { update(interruptArgs[35]); } - #endif - #ifdef CORE_INT36_PIN - static void isr36(void) { update(interruptArgs[36]); } - #endif - #ifdef CORE_INT37_PIN - static void isr37(void) { update(interruptArgs[37]); } - #endif - #ifdef CORE_INT38_PIN - static void isr38(void) { update(interruptArgs[38]); } - #endif - #ifdef CORE_INT39_PIN - static void isr39(void) { update(interruptArgs[39]); } - #endif - #ifdef CORE_INT40_PIN - static void isr40(void) { update(interruptArgs[40]); } - #endif - #ifdef CORE_INT41_PIN - static void isr41(void) { update(interruptArgs[41]); } - #endif - #ifdef CORE_INT42_PIN - static void isr42(void) { update(interruptArgs[42]); } - #endif - #ifdef CORE_INT43_PIN - static void isr43(void) { update(interruptArgs[43]); } - #endif - #ifdef CORE_INT44_PIN - static void isr44(void) { update(interruptArgs[44]); } - #endif - #ifdef CORE_INT45_PIN - static void isr45(void) { update(interruptArgs[45]); } - #endif - #ifdef CORE_INT46_PIN - static void isr46(void) { update(interruptArgs[46]); } - #endif - #ifdef CORE_INT47_PIN - static void isr47(void) { update(interruptArgs[47]); } - #endif - #ifdef CORE_INT48_PIN - static void isr48(void) { update(interruptArgs[48]); } - #endif - #ifdef CORE_INT49_PIN - static void isr49(void) { update(interruptArgs[49]); } - #endif - #ifdef CORE_INT50_PIN - static void isr50(void) { update(interruptArgs[50]); } - #endif - #ifdef CORE_INT51_PIN - static void isr51(void) { update(interruptArgs[51]); } - #endif - #ifdef CORE_INT52_PIN - static void isr52(void) { update(interruptArgs[52]); } - #endif - #ifdef CORE_INT53_PIN - static void isr53(void) { update(interruptArgs[53]); } - #endif - #ifdef CORE_INT54_PIN - static void isr54(void) { update(interruptArgs[54]); } - #endif - #ifdef CORE_INT55_PIN - static void isr55(void) { update(interruptArgs[55]); } - #endif - #ifdef CORE_INT56_PIN - static void isr56(void) { update(interruptArgs[56]); } - #endif - #ifdef CORE_INT57_PIN - static void isr57(void) { update(interruptArgs[57]); } - #endif - #ifdef CORE_INT58_PIN - static void isr58(void) { update(interruptArgs[58]); } - #endif - #ifdef CORE_INT59_PIN - static void isr59(void) { update(interruptArgs[59]); } - #endif -#endif -}; - -#if defined(ENCODER_USE_INTERRUPTS) && defined(ENCODER_OPTIMIZE_INTERRUPTS) -#if defined(__AVR__) -#if defined(INT0_vect) && CORE_NUM_INTERRUPT > 0 -ISR(INT0_vect) { Encoder::update(Encoder::interruptArgs[SCRAMBLE_INT_ORDER(0)]); } -#endif -#if defined(INT1_vect) && CORE_NUM_INTERRUPT > 1 -ISR(INT1_vect) { Encoder::update(Encoder::interruptArgs[SCRAMBLE_INT_ORDER(1)]); } -#endif -#if defined(INT2_vect) && CORE_NUM_INTERRUPT > 2 -ISR(INT2_vect) { Encoder::update(Encoder::interruptArgs[SCRAMBLE_INT_ORDER(2)]); } -#endif -#if defined(INT3_vect) && CORE_NUM_INTERRUPT > 3 -ISR(INT3_vect) { Encoder::update(Encoder::interruptArgs[SCRAMBLE_INT_ORDER(3)]); } -#endif -#if defined(INT4_vect) && CORE_NUM_INTERRUPT > 4 -ISR(INT4_vect) { Encoder::update(Encoder::interruptArgs[SCRAMBLE_INT_ORDER(4)]); } -#endif -#if defined(INT5_vect) && CORE_NUM_INTERRUPT > 5 -ISR(INT5_vect) { Encoder::update(Encoder::interruptArgs[SCRAMBLE_INT_ORDER(5)]); } -#endif -#if defined(INT6_vect) && CORE_NUM_INTERRUPT > 6 -ISR(INT6_vect) { Encoder::update(Encoder::interruptArgs[SCRAMBLE_INT_ORDER(6)]); } -#endif -#if defined(INT7_vect) && CORE_NUM_INTERRUPT > 7 -ISR(INT7_vect) { Encoder::update(Encoder::interruptArgs[SCRAMBLE_INT_ORDER(7)]); } -#endif -#endif // AVR -#endif // ENCODER_OPTIMIZE_INTERRUPTS - - -#endif diff --git a/libraries/Encoder/examples/Basic/Basic.pde b/libraries/Encoder/examples/Basic/Basic.pde deleted file mode 100644 index 3394b58..0000000 --- a/libraries/Encoder/examples/Basic/Basic.pde +++ /dev/null @@ -1,29 +0,0 @@ -/* Encoder Library - Basic Example - * http://www.pjrc.com/teensy/td_libs_Encoder.html - * - * This example code is in the public domain. - */ - -#include - -// Change these two numbers to the pins connected to your encoder. -// Best Performance: both pins have interrupt capability -// Good Performance: only the first pin has interrupt capability -// Low Performance: neither pin has interrupt capability -Encoder myEnc(5, 6); -// avoid using pins with LEDs attached - -void setup() { - Serial.begin(9600); - Serial.println("Basic Encoder Test:"); -} - -long oldPosition = -999; - -void loop() { - long newPosition = myEnc.read(); - if (newPosition != oldPosition) { - oldPosition = newPosition; - Serial.println(newPosition); - } -} diff --git a/libraries/Encoder/examples/NoInterrupts/NoInterrupts.pde b/libraries/Encoder/examples/NoInterrupts/NoInterrupts.pde deleted file mode 100644 index b890652..0000000 --- a/libraries/Encoder/examples/NoInterrupts/NoInterrupts.pde +++ /dev/null @@ -1,46 +0,0 @@ -/* Encoder Library - NoInterrupts Example - * http://www.pjrc.com/teensy/td_libs_Encoder.html - * - * This example code is in the public domain. - */ - -// If you define ENCODER_DO_NOT_USE_INTERRUPTS *before* including -// Encoder, the library will never use interrupts. This is mainly -// useful to reduce the size of the library when you are using it -// with pins that do not support interrupts. Without interrupts, -// your program must call the read() function rapidly, or risk -// missing changes in position. -#define ENCODER_DO_NOT_USE_INTERRUPTS -#include - -// Beware of Serial.print() speed. Without interrupts, if you -// transmit too much data with Serial.print() it can slow your -// reading from Encoder. Arduino 1.0 has improved transmit code. -// Using the fastest baud rate also helps. Teensy has USB packet -// buffering. But all boards can experience problems if you print -// too much and fill up buffers. - -// Change these two numbers to the pins connected to your encoder. -// With ENCODER_DO_NOT_USE_INTERRUPTS, no interrupts are ever -// used, even if the pin has interrupt capability -Encoder myEnc(5, 6); -// avoid using pins with LEDs attached - -void setup() { - Serial.begin(9600); - Serial.println("Basic NoInterrupts Test:"); -} - -long position = -999; - -void loop() { - long newPos = myEnc.read(); - if (newPos != position) { - position = newPos; - Serial.println(position); - } - // With any substantial delay added, Encoder can only track - // very slow motion. You may uncomment this line to see - // how badly a delay affects your encoder. - //delay(50); -} diff --git a/libraries/Encoder/examples/SpeedTest/SpeedTest.pde b/libraries/Encoder/examples/SpeedTest/SpeedTest.pde deleted file mode 100644 index 76cf350..0000000 --- a/libraries/Encoder/examples/SpeedTest/SpeedTest.pde +++ /dev/null @@ -1,113 +0,0 @@ -/* Encoder Library - SpeedTest - for measuring maximum Encoder speed - * http://www.pjrc.com/teensy/td_libs_Encoder.html - * - * This example code is in the public domain. - */ - - -// This SpeedTest example provides a simple way to verify how much -// CPU time Encoder is consuming. Connect a DC voltmeter to the -// output pin and measure the voltage while the encoder is stopped -// or running at a very slow speed. Even though the pin is rapidly -// pulsing, a DC voltmeter will show the average voltage. Due to -// software timing, it will read a number much less than a steady -// logic high, but this number will give you a baseline reading -// for output with minimal interrupt overhead. Then increase the -// encoder speed. The voltage will decrease as the processor spends -// more time in Encoder's interrupt routines counting the pulses -// and less time pulsing the output pin. When the voltage is -// close to zero and will not decrease any farther, you have reached -// the absolute speed limit. Or, if using a mechanical system where -// you reach a speed limit imposed by your motors or other hardware, -// the amount this voltage has decreased, compared to the baseline, -// should give you a good approximation of the portion of available -// CPU time Encoder is consuming at your maximum speed. - -// Encoder requires low latency interrupt response. Available CPU -// time does NOT necessarily prove or guarantee correct performance. -// If another library, like NewSoftSerial, is disabling interrupts -// for lengthy periods of time, Encoder can be prevented from -// properly counting the intput signals while interrupt are disabled. - - -// This optional setting causes Encoder to use more optimized code, -// but the downside is a conflict if any other part of your sketch -// or any other library you're using requires attachInterrupt(). -// It must be defined before Encoder.h is included. -//#define ENCODER_OPTIMIZE_INTERRUPTS - -#include -#include "pins_arduino.h" - -// Change these two numbers to the pins connected to your encoder -// or shift register circuit which emulates a quadrature encoder -// case 1: both pins are interrupts -// case 2: only first pin used as interrupt -Encoder myEnc(5, 6); - -// Connect a DC voltmeter to this pin. -const int outputPin = 12; - -/* This simple circuit, using a Dual Flip-Flop chip, can emulate - quadrature encoder signals. The clock can come from a fancy - function generator or a cheap 555 timer chip. The clock - frequency can be measured with another board running FreqCount - http://www.pjrc.com/teensy/td_libs_FreqCount.html - - +5V - | Quadrature Encoder Signal Emulator - Clock | - Input o----*-------------------------- ---------------------------o Output1 - | |14 | | - | _______|_______ | | _______________ - | | CD4013 | | | | CD4013 | - | 5 | | 1 | | 9 | | 13 - ---------| D Q |-----|----*----| D Q |------o Output2 - | | | | | | | - | | 3 | | | 11 | | - | ----|> Clk | ---------|> Clk | - | | | | | - | 6 | | 8 | | - | ----| S | ----| S | - | | | | | | | - | | 4 | _ | 2 | 10 | _ | 12 - | *----| R Q |--- *----| R Q |---- - | | | | | | | | - | | |_______________| | |_______________| | - | | | | | - | | | 7 | | - | | | | | - -------------------------------------------------------------- - | | | - | | | - ----- ----- ----- - --- --- --- - - - - -*/ - - -void setup() { - pinMode(outputPin, OUTPUT); -} - -#if defined(__AVR__) -#define REGTYPE unsigned char -#elif defined(__PIC32MX__) -#define REGTYPE unsigned long -#endif - -void loop() { - volatile int count = 0; - volatile REGTYPE *reg = portOutputRegister(digitalPinToPort(outputPin)); - REGTYPE mask = digitalPinToBitMask(outputPin); - - while (1) { - myEnc.read(); // Read the encoder while interrupts are enabled. - noInterrupts(); - *reg |= mask; // Pulse the pin high, while interrupts are disabled. - count = count + 1; - *reg &= ~mask; - interrupts(); - } -} - diff --git a/libraries/Encoder/examples/TwoKnobs/TwoKnobs.pde b/libraries/Encoder/examples/TwoKnobs/TwoKnobs.pde deleted file mode 100644 index 306b33e..0000000 --- a/libraries/Encoder/examples/TwoKnobs/TwoKnobs.pde +++ /dev/null @@ -1,46 +0,0 @@ -/* Encoder Library - TwoKnobs Example - * http://www.pjrc.com/teensy/td_libs_Encoder.html - * - * This example code is in the public domain. - */ - -#include - -// Change these pin numbers to the pins connected to your encoder. -// Best Performance: both pins have interrupt capability -// Good Performance: only the first pin has interrupt capability -// Low Performance: neither pin has interrupt capability -Encoder knobLeft(5, 6); -Encoder knobRight(7, 8); -// avoid using pins with LEDs attached - -void setup() { - Serial.begin(9600); - Serial.println("TwoKnobs Encoder Test:"); -} - -long positionLeft = -999; -long positionRight = -999; - -void loop() { - long newLeft, newRight; - newLeft = knobLeft.read(); - newRight = knobRight.read(); - if (newLeft != positionLeft || newRight != positionRight) { - Serial.print("Left = "); - Serial.print(newLeft); - Serial.print(", Right = "); - Serial.print(newRight); - Serial.println(); - positionLeft = newLeft; - positionRight = newRight; - } - // if a character is sent from the serial monitor, - // reset both back to zero. - if (Serial.available()) { - Serial.read(); - Serial.println("Reset both knobs to zero"); - knobLeft.write(0); - knobRight.write(0); - } -} diff --git a/libraries/Encoder/keywords.txt b/libraries/Encoder/keywords.txt deleted file mode 100644 index a4baa01..0000000 --- a/libraries/Encoder/keywords.txt +++ /dev/null @@ -1,4 +0,0 @@ -ENCODER_USE_INTERRUPTS LITERAL1 -ENCODER_OPTIMIZE_INTERRUPTS LITERAL1 -ENCODER_DO_NOT_USE_INTERRUPTS LITERAL1 -Encoder KEYWORD1 diff --git a/libraries/Encoder/utility/direct_pin_read.h b/libraries/Encoder/utility/direct_pin_read.h deleted file mode 100644 index 97b8862..0000000 --- a/libraries/Encoder/utility/direct_pin_read.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef direct_pin_read_h_ -#define direct_pin_read_h_ - -#if defined(__AVR__) || defined(__MK20DX128__) || defined(__MK20DX256__) - -#define IO_REG_TYPE uint8_t -#define PIN_TO_BASEREG(pin) (portInputRegister(digitalPinToPort(pin))) -#define PIN_TO_BITMASK(pin) (digitalPinToBitMask(pin)) -#define DIRECT_PIN_READ(base, mask) (((*(base)) & (mask)) ? 1 : 0) - -#elif defined(__SAM3X8E__) - -#define IO_REG_TYPE uint32_t -#define PIN_TO_BASEREG(pin) (portInputRegister(digitalPinToPort(pin))) -#define PIN_TO_BITMASK(pin) (digitalPinToBitMask(pin)) -#define DIRECT_PIN_READ(base, mask) (((*(base)) & (mask)) ? 1 : 0) - -#elif defined(__PIC32MX__) - -#define IO_REG_TYPE uint32_t -#define PIN_TO_BASEREG(pin) (portModeRegister(digitalPinToPort(pin))) -#define PIN_TO_BITMASK(pin) (digitalPinToBitMask(pin)) -#define DIRECT_PIN_READ(base, mask) (((*(base+4)) & (mask)) ? 1 : 0) - -#endif - -#endif diff --git a/libraries/Encoder/utility/interrupt_config.h b/libraries/Encoder/utility/interrupt_config.h deleted file mode 100644 index cde6adf..0000000 --- a/libraries/Encoder/utility/interrupt_config.h +++ /dev/null @@ -1,87 +0,0 @@ -#if defined(__AVR__) - -#include -#include - -#define attachInterrupt(num, func, mode) enableInterrupt(num) -#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) -#define SCRAMBLE_INT_ORDER(num) ((num < 4) ? num + 2 : ((num < 6) ? num - 4 : num)) -#define DESCRAMBLE_INT_ORDER(num) ((num < 2) ? num + 4 : ((num < 6) ? num - 2 : num)) -#else -#define SCRAMBLE_INT_ORDER(num) (num) -#define DESCRAMBLE_INT_ORDER(num) (num) -#endif - -static void enableInterrupt(uint8_t num) -{ - switch (DESCRAMBLE_INT_ORDER(num)) { - #if defined(EICRA) && defined(EIMSK) - case 0: - EICRA = (EICRA & 0xFC) | 0x01; - EIMSK |= 0x01; - return; - case 1: - EICRA = (EICRA & 0xF3) | 0x04; - EIMSK |= 0x02; - return; - case 2: - EICRA = (EICRA & 0xCF) | 0x10; - EIMSK |= 0x04; - return; - case 3: - EICRA = (EICRA & 0x3F) | 0x40; - EIMSK |= 0x08; - return; - #elif defined(MCUCR) && defined(GICR) - case 0: - MCUCR = (MCUCR & ~((1 << ISC00) | (1 << ISC01))) | (mode << ISC00); - GICR |= (1 << INT0); - return; - case 1: - MCUCR = (MCUCR & ~((1 << ISC10) | (1 << ISC11))) | (mode << ISC10); - GICR |= (1 << INT1); - return; - #elif defined(MCUCR) && defined(GIMSK) - case 0: - MCUCR = (MCUCR & ~((1 << ISC00) | (1 << ISC01))) | (mode << ISC00); - GIMSK |= (1 << INT0); - return; - case 1: - MCUCR = (MCUCR & ~((1 << ISC10) | (1 << ISC11))) | (mode << ISC10); - GIMSK |= (1 << INT1); - return; - #endif - #if defined(EICRB) && defined(EIMSK) - case 4: - EICRB = (EICRB & 0xFC) | 0x01; - EIMSK |= 0x10; - return; - case 5: - EICRB = (EICRB & 0xF3) | 0x04; - EIMSK |= 0x20; - return; - case 6: - EICRB = (EICRB & 0xCF) | 0x10; - EIMSK |= 0x40; - return; - case 7: - EICRB = (EICRB & 0x3F) | 0x40; - EIMSK |= 0x80; - return; - #endif - } -} - -#elif defined(__PIC32MX__) - -#ifdef ENCODER_OPTIMIZE_INTERRUPTS -#undef ENCODER_OPTIMIZE_INTERRUPTS -#endif - -#else - -#ifdef ENCODER_OPTIMIZE_INTERRUPTS -#undef ENCODER_OPTIMIZE_INTERRUPTS -#endif - -#endif diff --git a/libraries/Encoder/utility/interrupt_pins.h b/libraries/Encoder/utility/interrupt_pins.h deleted file mode 100644 index e677c4f..0000000 --- a/libraries/Encoder/utility/interrupt_pins.h +++ /dev/null @@ -1,156 +0,0 @@ -// interrupt pins for known boards - -// Teensy (and maybe others) define these automatically -#if !defined(CORE_NUM_INTERRUPT) - -// Wiring boards -#if defined(WIRING) - #define CORE_NUM_INTERRUPT NUM_EXTERNAL_INTERRUPTS - #if NUM_EXTERNAL_INTERRUPTS > 0 - #define CORE_INT0_PIN EI0 - #endif - #if NUM_EXTERNAL_INTERRUPTS > 1 - #define CORE_INT1_PIN EI1 - #endif - #if NUM_EXTERNAL_INTERRUPTS > 2 - #define CORE_INT2_PIN EI2 - #endif - #if NUM_EXTERNAL_INTERRUPTS > 3 - #define CORE_INT3_PIN EI3 - #endif - #if NUM_EXTERNAL_INTERRUPTS > 4 - #define CORE_INT4_PIN EI4 - #endif - #if NUM_EXTERNAL_INTERRUPTS > 5 - #define CORE_INT5_PIN EI5 - #endif - #if NUM_EXTERNAL_INTERRUPTS > 6 - #define CORE_INT6_PIN EI6 - #endif - #if NUM_EXTERNAL_INTERRUPTS > 7 - #define CORE_INT7_PIN EI7 - #endif - -// Arduino Uno, Duemilanove, Diecimila, LilyPad, Mini, Fio, etc... -#elif defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__) || defined(__AVR_ATmega8__) - #define CORE_NUM_INTERRUPT 2 - #define CORE_INT0_PIN 2 - #define CORE_INT1_PIN 3 - -// Arduino Mega -#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) - #define CORE_NUM_INTERRUPT 6 - #define CORE_INT0_PIN 2 - #define CORE_INT1_PIN 3 - #define CORE_INT2_PIN 21 - #define CORE_INT3_PIN 20 - #define CORE_INT4_PIN 19 - #define CORE_INT5_PIN 18 - -// Arduino Leonardo (untested) -#elif defined(__AVR_ATmega32U4__) && !defined(CORE_TEENSY) - #define CORE_NUM_INTERRUPT 4 - #define CORE_INT0_PIN 3 - #define CORE_INT1_PIN 2 - #define CORE_INT2_PIN 0 - #define CORE_INT3_PIN 1 - -// Sanguino (untested) -#elif defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644__) - #define CORE_NUM_INTERRUPT 3 - #define CORE_INT0_PIN 10 - #define CORE_INT1_PIN 11 - #define CORE_INT2_PIN 2 - -// Chipkit Uno32 - attachInterrupt may not support CHANGE option -#elif defined(__PIC32MX__) && defined(_BOARD_UNO_) - #define CORE_NUM_INTERRUPT 5 - #define CORE_INT0_PIN 38 - #define CORE_INT1_PIN 2 - #define CORE_INT2_PIN 7 - #define CORE_INT3_PIN 8 - #define CORE_INT4_PIN 35 - -// Chipkit Uno32 - attachInterrupt may not support CHANGE option -#elif defined(__PIC32MX__) && defined(_BOARD_MEGA_) - #define CORE_NUM_INTERRUPT 5 - #define CORE_INT0_PIN 3 - #define CORE_INT1_PIN 2 - #define CORE_INT2_PIN 7 - #define CORE_INT3_PIN 21 - #define CORE_INT4_PIN 20 - -// http://hlt.media.mit.edu/?p=1229 -#elif defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) - #define CORE_NUM_INTERRUPT 1 - #define CORE_INT0_PIN 2 - -// Arduino Due (untested) -#elif defined(__SAM3X8E__) - #define CORE_NUM_INTERRUPT 54 - #define CORE_INT0_PIN 0 - #define CORE_INT1_PIN 1 - #define CORE_INT2_PIN 2 - #define CORE_INT3_PIN 3 - #define CORE_INT4_PIN 4 - #define CORE_INT5_PIN 5 - #define CORE_INT6_PIN 6 - #define CORE_INT7_PIN 7 - #define CORE_INT8_PIN 8 - #define CORE_INT9_PIN 9 - #define CORE_INT10_PIN 10 - #define CORE_INT11_PIN 11 - #define CORE_INT12_PIN 12 - #define CORE_INT13_PIN 13 - #define CORE_INT14_PIN 14 - #define CORE_INT15_PIN 15 - #define CORE_INT16_PIN 16 - #define CORE_INT17_PIN 17 - #define CORE_INT18_PIN 18 - #define CORE_INT19_PIN 19 - #define CORE_INT20_PIN 20 - #define CORE_INT21_PIN 21 - #define CORE_INT22_PIN 22 - #define CORE_INT23_PIN 23 - #define CORE_INT24_PIN 24 - #define CORE_INT25_PIN 25 - #define CORE_INT26_PIN 26 - #define CORE_INT27_PIN 27 - #define CORE_INT28_PIN 28 - #define CORE_INT29_PIN 29 - #define CORE_INT30_PIN 30 - #define CORE_INT31_PIN 31 - #define CORE_INT32_PIN 32 - #define CORE_INT33_PIN 33 - #define CORE_INT34_PIN 34 - #define CORE_INT35_PIN 35 - #define CORE_INT36_PIN 36 - #define CORE_INT37_PIN 37 - #define CORE_INT38_PIN 38 - #define CORE_INT39_PIN 39 - #define CORE_INT40_PIN 40 - #define CORE_INT41_PIN 41 - #define CORE_INT42_PIN 42 - #define CORE_INT43_PIN 43 - #define CORE_INT44_PIN 44 - #define CORE_INT45_PIN 45 - #define CORE_INT46_PIN 46 - #define CORE_INT47_PIN 47 - #define CORE_INT48_PIN 48 - #define CORE_INT49_PIN 49 - #define CORE_INT50_PIN 50 - #define CORE_INT51_PIN 51 - #define CORE_INT52_PIN 52 - #define CORE_INT53_PIN 53 - -#endif -#endif - -#if !defined(CORE_NUM_INTERRUPT) -#error "Interrupts are unknown for this board, please add to this code" -#endif -#if CORE_NUM_INTERRUPT <= 0 -#error "Encoder requires interrupt pins, but this board does not have any :(" -#error "You could try defining ENCODER_DO_NOT_USE_INTERRUPTS as a kludge." -#endif - diff --git a/libraries/HeatpumpIR/CarrierHeatpumpIR.cpp b/libraries/HeatpumpIR/CarrierHeatpumpIR.cpp deleted file mode 100644 index 2b08763..0000000 --- a/libraries/HeatpumpIR/CarrierHeatpumpIR.cpp +++ /dev/null @@ -1,170 +0,0 @@ -#include - -CarrierHeatpumpIR::CarrierHeatpumpIR() : HeatpumpIR() -{ - static const char PROGMEM model[] PROGMEM = "carrier"; - static const char PROGMEM info[] PROGMEM = "{\"mdl\":\"carrier\",\"dn\":\"Carrier\",\"mT\":17,\"xT\":30,\"fs\":6}"; - - _model = model; - _info = info; -} - - -void CarrierHeatpumpIR::send(IRSender& IR, uint8_t powerModeCmd, uint8_t operatingModeCmd, uint8_t fanSpeedCmd, uint8_t temperatureCmd, uint8_t swingVCmd, uint8_t swingHCmd) -{ - (void)swingVCmd; - (void)swingHCmd; - - // Sensible defaults for the heat pump mode - - uint8_t operatingMode = CARRIER_AIRCON1_MODE_HEAT; - uint8_t fanSpeed = CARRIER_AIRCON1_FAN_AUTO; - uint8_t temperature = 23; - - if (powerModeCmd == POWER_OFF) - { - operatingMode = CARRIER_AIRCON1_MODE_OFF; - } - else - { - switch (operatingModeCmd) - { - case MODE_AUTO: - operatingMode = CARRIER_AIRCON1_MODE_AUTO; - break; - case MODE_HEAT: - operatingMode = CARRIER_AIRCON1_MODE_HEAT; - break; - case MODE_COOL: - operatingMode = CARRIER_AIRCON1_MODE_COOL; - break; - case MODE_DRY: - operatingMode = CARRIER_AIRCON1_MODE_DRY; - fanSpeedCmd = FAN_AUTO; // Fan speed is always 'AUTO' in DRY mode - break; - case MODE_FAN: - operatingMode = CARRIER_AIRCON1_MODE_FAN; - temperatureCmd = 22; // Temperature is always 22 in FAN mode - break; - } - } - - switch (fanSpeedCmd) - { - case FAN_AUTO: - fanSpeed = CARRIER_AIRCON1_FAN_AUTO; - break; - case FAN_1: - fanSpeed = CARRIER_AIRCON1_FAN1; - break; - case FAN_2: - fanSpeed = CARRIER_AIRCON1_FAN2; - break; - case FAN_3: - fanSpeed = CARRIER_AIRCON1_FAN3; - break; - case FAN_4: - fanSpeed = CARRIER_AIRCON1_FAN4; - break; - case FAN_5: - fanSpeed = CARRIER_AIRCON1_FAN5; - break; - } - - if ( temperatureCmd > 16 && temperatureCmd < 31) - { - temperature = temperatureCmd; - } - - sendCarrier(IR, operatingMode, fanSpeed, temperature); -} - -// Send the Carrier code -// Carrier has the LSB and MSB in different format than Panasonic - -void CarrierHeatpumpIR::sendCarrier(IRSender& IR, uint8_t operatingMode, uint8_t fanSpeed, uint8_t temperature) -{ - uint8_t sendBuffer[9] = { 0x4f, 0xb0, 0xc0, 0x3f, 0x80, 0x00, 0x00, 0x00, 0x00 }; // The data is on the last four uint8_ts - - static const uint8_t temperatures[] PROGMEM = { 0x00, 0x08, 0x04, 0x0c, 0x02, 0x0a, 0x06, 0x0e, 0x01, 0x09, 0x05, 0x0d, 0x03, 0x0b }; - uint8_t checksum = 0; - - // PROGMEM arrays cannot be addressed directly, see http://forum.arduino.cc/index.php?topic=106603.0 - sendBuffer[5] = pgm_read_byte(&(temperatures[(temperature-17)])); - - sendBuffer[6] = operatingMode | fanSpeed; - - // Checksum - - for (int i=0; i<8; i++) { - checksum += IR.bitReverse(sendBuffer[i]); - } - - // There's something really strange with the checksum calculation... - // With these many of the codes matchs with the code from the real Carrier remote - // Still certain temperatures do not work with fan speeds 1, 2 or 5 - - switch (sendBuffer[6] & 0xF0) { - case 0x00: // MODE_AUTO - certain temperature / fan speed combinations do not work - checksum += 0x02; - switch (sendBuffer[6] & 0x0F) { - case 0x02: // FAN1 - case 0x03: // FAN5 - case 0x06: // FAN2 - checksum += 0x80; - break; - } - break; - case 0x40: // MODE_DRY - all settings should work - checksum += 0x02; - break; - case 0xC0: // MODE_HEAT - certain temperature / fan speed combinations do not work - switch (sendBuffer[6] & 0x0F) { - case 0x05: // FAN4 - case 0x06: // FAN2 - checksum += 0xC0; - break; - } - break; - case 0x20: // MODE_FAN - all settings should work - checksum += 0x02; - switch (sendBuffer[6] & 0x0F) { - case 0x02: // FAN1 - case 0x03: // FAN5 - case 0x06: // FAN2 - checksum += 0x80; - break; - } - break; - } - - sendBuffer[8] = IR.bitReverse(checksum); - - // 40 kHz PWM frequency - IR.setFrequency(38); - - // Header - IR.mark(CARRIER_AIRCON1_HDR_MARK); - IR.space(CARRIER_AIRCON1_HDR_SPACE); - - // Payload - for (size_t i=0; i - -// Carrier (42NQV035G / 38NYV035H2) timing constants (remote control P/N WH-L05SE) -#define CARRIER_AIRCON1_HDR_MARK 4320 -#define CARRIER_AIRCON1_HDR_SPACE 4350 -#define CARRIER_AIRCON1_BIT_MARK 500 -#define CARRIER_AIRCON1_ONE_SPACE 1650 -#define CARRIER_AIRCON1_ZERO_SPACE 550 -#define CARRIER_AIRCON1_MSG_SPACE 7400 - -// Carrier codes -#define CARRIER_AIRCON1_MODE_AUTO 0x00 // Operating mode -#define CARRIER_AIRCON1_MODE_HEAT 0xC0 -#define CARRIER_AIRCON1_MODE_COOL 0x80 -#define CARRIER_AIRCON1_MODE_DRY 0x40 -#define CARRIER_AIRCON1_MODE_FAN 0x20 -#define CARRIER_AIRCON1_MODE_OFF 0xE0 // Power OFF -#define CARRIER_AIRCON1_FAN_AUTO 0x00 // Fan speed -#define CARRIER_AIRCON1_FAN1 0x02 -#define CARRIER_AIRCON1_FAN2 0x06 -#define CARRIER_AIRCON1_FAN3 0x01 -#define CARRIER_AIRCON1_FAN4 0x05 -#define CARRIER_AIRCON1_FAN5 0x03 - - -class CarrierHeatpumpIR : public HeatpumpIR -{ - public: - CarrierHeatpumpIR(); - void send(IRSender& IR, uint8_t powerModeCmd, uint8_t operatingModeCmd, uint8_t fanSpeedCmd, uint8_t temperatureCmd, uint8_t swingVCmd, uint8_t swingHCmd); - - private: - void sendCarrier(IRSender& IR, uint8_t operatingMode, uint8_t fanSpeed, uint8_t temperature); -}; - -#endif diff --git a/libraries/HeatpumpIR/DaikinHeatpumpIR.cpp b/libraries/HeatpumpIR/DaikinHeatpumpIR.cpp deleted file mode 100644 index af5d0bb..0000000 --- a/libraries/HeatpumpIR/DaikinHeatpumpIR.cpp +++ /dev/null @@ -1,146 +0,0 @@ -#include - -DaikinHeatpumpIR::DaikinHeatpumpIR() : HeatpumpIR() -{ - static const char PROGMEM model[] PROGMEM = "daikin"; - static const char PROGMEM info[] PROGMEM = "{\"mdl\":\"daikin\",\"dn\":\"Daikin\",\"mT\":18,\"xT\":30,\"fs\":6,\"maint\":[10,11,12,13,14,15,16,17]}}}"; - - _model = model; - _info = info; -} - - -// Daikin numeric values to command bytes -void DaikinHeatpumpIR::send(IRSender& IR, uint8_t powerModeCmd, uint8_t operatingModeCmd, uint8_t fanSpeedCmd, uint8_t temperatureCmd, uint8_t swingVCmd, uint8_t swingHCmd) -{ - // Sensible defaults for the heat pump mode - - uint8_t operatingMode = DAIKIN_AIRCON_MODE_OFF | DAIKIN_AIRCON_MODE_AUTO; - uint8_t fanSpeed = DAIKIN_AIRCON_FAN_AUTO; - uint8_t temperature = 23; - - switch (powerModeCmd) - { - case POWER_ON: - operatingMode |= DAIKIN_AIRCON_MODE_ON; - break; - } - - switch (operatingModeCmd) - { - case MODE_AUTO: - operatingMode |= DAIKIN_AIRCON_MODE_AUTO; - break; - case MODE_HEAT: - operatingMode |= DAIKIN_AIRCON_MODE_HEAT; - break; - case MODE_COOL: - operatingMode |= DAIKIN_AIRCON_MODE_COOL; - break; - case MODE_DRY: - operatingMode |= DAIKIN_AIRCON_MODE_DRY; - temperatureCmd = 0x24; - break; - case MODE_FAN: - operatingMode |= DAIKIN_AIRCON_MODE_FAN; - temperatureCmd = 0xC0; - break; - } - - switch (fanSpeedCmd) - { - case FAN_AUTO: - fanSpeed = DAIKIN_AIRCON_FAN_AUTO; - break; - case FAN_1: - fanSpeed = DAIKIN_AIRCON_FAN1; - break; - case FAN_2: - fanSpeed = DAIKIN_AIRCON_FAN2; - break; - case FAN_3: - fanSpeed = DAIKIN_AIRCON_FAN3; - break; - case FAN_4: - fanSpeed = DAIKIN_AIRCON_FAN4; - break; - case FAN_5: - fanSpeed = DAIKIN_AIRCON_FAN5; - break; - } - - if ((operatingModeCmd == DAIKIN_AIRCON_MODE_HEAT && temperatureCmd >= 10 && temperatureCmd <= 30) || - (temperatureCmd >= 18 && temperatureCmd <= 30)) - { - temperature = temperatureCmd << 1; - } - - sendDaikin(IR, operatingMode, fanSpeed, temperature, swingVCmd, swingHCmd); -} - - -// Send the Daikin code -void DaikinHeatpumpIR::sendDaikin(IRSender& IR, uint8_t operatingMode, uint8_t fanSpeed, uint8_t temperature, uint8_t swingV, uint8_t swingH) -{ - (void)swingV; - (void)swingH; - - uint8_t daikinTemplate[35] = { - 0x11, 0xDA, 0x27, 0x00, 0xC5, 0x00, 0x00, 0xD7, // First header - // 0 1 2 3 4 5 6 7 - 0x11, 0xDA, 0x27, 0x00, 0x42, 0x49, 0x05, 0xA2, // Second header, this seems to have the wall clock time (bytes 12 & 13 are changing) - // 8 9 10 11 12 13 14 15 - 0x11, 0xDA, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00 }; - // 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 - - daikinTemplate[21] = operatingMode; - daikinTemplate[22] = temperature; - daikinTemplate[24] = fanSpeed; - - // Checksum calculation - // * Checksums at bytes 7 and 15 are calculated the same way - uint8_t checksum = 0x00; - - for (int i=16; i<34; i++) { - checksum += daikinTemplate[i]; - } - - daikinTemplate[34] = checksum; - - // 38 kHz PWM frequency - IR.setFrequency(38); - - // Header - IR.mark(DAIKIN_AIRCON_HDR_MARK); - IR.space(DAIKIN_AIRCON_HDR_SPACE); - - // First header - for (int i=0; i<8; i++) { - IR.sendIRbyte(daikinTemplate[i], DAIKIN_AIRCON_BIT_MARK, DAIKIN_AIRCON_ZERO_SPACE, DAIKIN_AIRCON_ONE_SPACE); - } - - // Pause + new header - IR.mark(DAIKIN_AIRCON_BIT_MARK); - IR.space(DAIKIN_AIRCON_MSG_SPACE); - IR.mark(DAIKIN_AIRCON_HDR_MARK); - IR.space(DAIKIN_AIRCON_HDR_SPACE); - - // Second header - this probably has the wall clock time - for (int i=8; i<16; i++) { - IR.sendIRbyte(daikinTemplate[i], DAIKIN_AIRCON_BIT_MARK, DAIKIN_AIRCON_ZERO_SPACE, DAIKIN_AIRCON_ONE_SPACE); - } - - // Pause + new header - IR.mark(DAIKIN_AIRCON_BIT_MARK); - IR.space(DAIKIN_AIRCON_MSG_SPACE); - IR.mark(DAIKIN_AIRCON_HDR_MARK); - IR.space(DAIKIN_AIRCON_HDR_SPACE); - - // Last 19 bytes - the actual payload - for (int i=16; i<35; i++) { - IR.sendIRbyte(daikinTemplate[i], DAIKIN_AIRCON_BIT_MARK, DAIKIN_AIRCON_ZERO_SPACE, DAIKIN_AIRCON_ONE_SPACE); - } - - IR.mark(DAIKIN_AIRCON_BIT_MARK); - IR.space(0); -} \ No newline at end of file diff --git a/libraries/HeatpumpIR/DaikinHeatpumpIR.h b/libraries/HeatpumpIR/DaikinHeatpumpIR.h deleted file mode 100644 index a0580d2..0000000 --- a/libraries/HeatpumpIR/DaikinHeatpumpIR.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - Daikin heatpump control (Daikin remote control P/N ARC433B50) -*/ -#ifndef DaikinHeatpumpIR_h -#define DaikinHeatpumpIR_h - -#include - - -// Daikin timing constants -#define DAIKIN_AIRCON_HDR_MARK 3360 // 3300 -#define DAIKIN_AIRCON_HDR_SPACE 1760 // 1600 -#define DAIKIN_AIRCON_BIT_MARK 360 // 310 -#define DAIKIN_AIRCON_ONE_SPACE 1370 // 1220 -#define DAIKIN_AIRCON_ZERO_SPACE 520 // 400 -#define DAIKIN_AIRCON_MSG_SPACE 32300 // 30800 - -// Daikin codes -#define DAIKIN_AIRCON_MODE_AUTO 0x00 // Operating mode -#define DAIKIN_AIRCON_MODE_HEAT 0x40 -#define DAIKIN_AIRCON_MODE_COOL 0x30 -#define DAIKIN_AIRCON_MODE_DRY 0x20 -#define DAIKIN_AIRCON_MODE_FAN 0x60 -#define DAIKIN_AIRCON_MODE_OFF 0x00 // Power OFF -#define DAIKIN_AIRCON_MODE_ON 0x01 -#define DAIKIN_AIRCON_FAN_AUTO 0xA0 // Fan speed -#define DAIKIN_AIRCON_FAN1 0x30 -#define DAIKIN_AIRCON_FAN2 0x40 -#define DAIKIN_AIRCON_FAN3 0x50 -#define DAIKIN_AIRCON_FAN4 0x60 -#define DAIKIN_AIRCON_FAN5 0x70 - - -class DaikinHeatpumpIR : public HeatpumpIR -{ - public: - DaikinHeatpumpIR(); - void send(IRSender& IR, uint8_t powerModeCmd, uint8_t operatingModeCmd, uint8_t fanSpeedCmd, uint8_t temperatureCmd, uint8_t swingVCmd, uint8_t swingHCmd); - - private: - void sendDaikin(IRSender& IR, uint8_t operatingMode, uint8_t fanSpeed, uint8_t temperature, uint8_t swingV, uint8_t swingH); -}; - -#endif \ No newline at end of file diff --git a/libraries/HeatpumpIR/FujitsuHeatpumpIR.cpp b/libraries/HeatpumpIR/FujitsuHeatpumpIR.cpp deleted file mode 100644 index 294491b..0000000 --- a/libraries/HeatpumpIR/FujitsuHeatpumpIR.cpp +++ /dev/null @@ -1,193 +0,0 @@ -#include - -FujitsuHeatpumpIR::FujitsuHeatpumpIR() : HeatpumpIR() -{ - static const char PROGMEM model[] PROGMEM = "fujitsu_awyz"; - static const char PROGMEM info[] PROGMEM = "{\"mdl\":\"fujitsu_awyz\",\"dn\":\"Fujitsu AWYZ\",\"mT\":16,\"xT\":30,\"fs\":5}"; - - _model = model; - _info = info; -} - - -void FujitsuHeatpumpIR::send(IRSender& IR, uint8_t powerModeCmd, uint8_t operatingModeCmd, uint8_t fanSpeedCmd, uint8_t temperatureCmd, uint8_t swingVCmd, uint8_t swingHCmd) -{ - send(IR, powerModeCmd, operatingModeCmd, fanSpeedCmd, temperatureCmd, swingVCmd, swingHCmd, false); -} - - -void FujitsuHeatpumpIR::send(IRSender& IR, uint8_t powerModeCmd, uint8_t operatingModeCmd, uint8_t fanSpeedCmd, uint8_t temperatureCmd, uint8_t swingVCmd, uint8_t swingHCmd, bool ecoModeCmd) -{ - // Sensible defaults for the heat pump mode - - uint8_t operatingMode = FUJITSU_AIRCON1_MODE_HEAT; - uint8_t fanSpeed = FUJITSU_AIRCON1_FAN_AUTO; - uint8_t temperature = 23; - uint8_t swingV = FUJITSU_AIRCON1_VDIR_MANUAL; - uint8_t swingH = FUJITSU_AIRCON1_HDIR_MANUAL; - uint8_t ecoMode = FUJITSU_AIRCON1_ECO_OFF; - - if (powerModeCmd == POWER_OFF) - { - operatingMode = FUJITSU_AIRCON1_MODE_OFF; - } - else - { - switch (operatingModeCmd) - { - case MODE_AUTO: - operatingMode = FUJITSU_AIRCON1_MODE_AUTO; - break; - case MODE_HEAT: - operatingMode = FUJITSU_AIRCON1_MODE_HEAT; - break; - case MODE_COOL: - operatingMode = FUJITSU_AIRCON1_MODE_COOL; - break; - case MODE_DRY: - operatingMode = FUJITSU_AIRCON1_MODE_DRY; - break; - case MODE_FAN: - operatingMode = FUJITSU_AIRCON1_MODE_FAN; - // When Fujitsu goes to FAN mode, it sets the low bit of the uint8_t with the temperature. What is the meaning of that? - break; - } - } - - switch (fanSpeedCmd) - { - case FAN_AUTO: - fanSpeed = FUJITSU_AIRCON1_FAN_AUTO; - break; - case FAN_1: - fanSpeed = FUJITSU_AIRCON1_FAN1; - break; - case FAN_2: - fanSpeed = FUJITSU_AIRCON1_FAN2; - break; - case FAN_3: - fanSpeed = FUJITSU_AIRCON1_FAN3; - break; - case FAN_4: - fanSpeed = FUJITSU_AIRCON1_FAN4; - break; - } - - if ( temperatureCmd > 15 && temperatureCmd < 31) - { - temperature = temperatureCmd; - } - - // Only support 'don't move' or 'swing' at the moment, not any specific position - if ( swingVCmd == VDIR_SWING) { - swingV = FUJITSU_AIRCON1_VDIR_SWING; - } - - if ( swingHCmd == HDIR_SWING) { - swingH = FUJITSU_AIRCON1_HDIR_SWING; - } - - if (ecoModeCmd) { - ecoMode = FUJITSU_AIRCON1_ECO_ON; - } - - sendFujitsu(IR, operatingMode, fanSpeed, temperature, swingV, swingH, ecoMode); -} - - -void FujitsuHeatpumpIR::sendFujitsu(IRSender& IR, uint8_t operatingMode, uint8_t fanSpeed, uint8_t temperature, uint8_t swingV, uint8_t swingH, uint8_t ecoMode) -{ - // ON, HEAT, AUTO FAN, +24 degrees - uint8_t FujitsuTemplate[] = { 0x14, 0x63, 0x00, 0x10, 0x10, 0xFE, 0x09, 0x30, 0x80, 0x04, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00 }; - // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 - - uint8_t OFF_msg[] = { 0x14, 0x63, 0x00, 0x10, 0x10, 0x02, 0xFD }; - uint8_t checksum = 0x00; - -/* - - Fujitsu does not have codes to set the air direction to any specific position, but just go to the next position: - - uint8_t nextVerticalPosition_msg[] = { 0x14, 0x63, 0x00, 0x10, 0x10, 0x6C, 0x93 }; - uint8_t nextHorizontalPosition_msg[] = { 0x14, 0x63, 0x00, 0x10, 0x10, 0x79,0x86 }; - - These would need to be sent separately... -*/ - // Set the operatingmode on the template message - FujitsuTemplate[9] = operatingMode; - - // Set the eco mode on the template message - FujitsuTemplate[14] = ecoMode; - - // Set the temperature on the template message. The least significant bit should be set to '1' - FujitsuTemplate[8] = (temperature - 16) << 4 | 0x01; - - // Set the fan speed and air direction on the template message - FujitsuTemplate[10] = fanSpeed + swingV + swingH; - - // Calculate the checksum - for (int i=0; i<15; i++) { - checksum += FujitsuTemplate[i]; - } - - FujitsuTemplate[15] = (uint8_t)(0x9E - checksum); - - if (operatingMode == FUJITSU_AIRCON1_MODE_OFF) { - // OFF - sendFujitsuMsg(IR, sizeof(OFF_msg), OFF_msg); - } else { - sendFujitsuMsg(IR, sizeof(FujitsuTemplate), FujitsuTemplate); - } -} - - -void FujitsuHeatpumpIR::sendFujitsuHiPower(IRSender& IR) -{ - uint8_t HiPower_msg[] = { 0x14, 0x63, 0x00, 0x10, 0x10, 0x39, 0xC6 }; - - sendFujitsuMsg(IR, sizeof(HiPower_msg), HiPower_msg); -} - - -void FujitsuHeatpumpIR::sendFujitsuFilterClean(IRSender& IR) -{ - uint8_t FilterClean_msg[] = { 0x14, 0x63, 0x00, 0x10, 0x10, 0x02, 0xFD }; - - sendFujitsuMsg(IR, sizeof(FilterClean_msg), FilterClean_msg); -} - - -void FujitsuHeatpumpIR::sendFujitsuSuperQuiet(IRSender& IR) -{ - uint8_t SuperQuiet_msg[] = { 0x14, 0x63, 0x00, 0x10, 0x10, 0x02, 0xFD }; - - sendFujitsuMsg(IR, sizeof(SuperQuiet_msg), SuperQuiet_msg); -} - - -void FujitsuHeatpumpIR::sendFujitsuTestRun(IRSender& IR) -{ - uint8_t TestRun_msg[] = { 0x14, 0x63, 0x00, 0x10, 0x10, 0x02, 0xFD }; - - sendFujitsuMsg(IR, sizeof(TestRun_msg), TestRun_msg); -} - - -void FujitsuHeatpumpIR::sendFujitsuMsg(IRSender& IR, uint8_t msgSize, uint8_t *msg) -{ - // 40 kHz PWM frequency - IR.setFrequency(38); - - // Header - IR.mark(FUJITSU_AIRCON1_HDR_MARK); - IR.space(FUJITSU_AIRCON1_HDR_SPACE); - - // Data - for (uint8_t i=0; i - - -// Fujitsu Nocria (AWYZ14) timing constants (remote control P/N AR-PZ2) -#define FUJITSU_AIRCON1_HDR_MARK 3210 -#define FUJITSU_AIRCON1_HDR_SPACE 1680 -#define FUJITSU_AIRCON1_BIT_MARK 410 -#define FUJITSU_AIRCON1_ONE_SPACE 1230 -#define FUJITSU_AIRCON1_ZERO_SPACE 440 - -// Fujitsu codes -#define FUJITSU_AIRCON1_MODE_AUTO 0x00 // Operating mode -#define FUJITSU_AIRCON1_MODE_HEAT 0x04 -#define FUJITSU_AIRCON1_MODE_COOL 0x01 -#define FUJITSU_AIRCON1_MODE_DRY 0x02 -#define FUJITSU_AIRCON1_MODE_FAN 0x03 -#define FUJITSU_AIRCON1_MODE_OFF 0xFF // Power OFF - not real codes, but we need something... -#define FUJITSU_AIRCON1_FAN_AUTO 0x00 // Fan speed -#define FUJITSU_AIRCON1_FAN1 0x04 -#define FUJITSU_AIRCON1_FAN2 0x03 -#define FUJITSU_AIRCON1_FAN3 0x02 -#define FUJITSU_AIRCON1_FAN4 0x01 -#define FUJITSU_AIRCON1_VDIR_MANUAL 0x00 // Air direction modes -#define FUJITSU_AIRCON1_VDIR_SWING 0x10 -#define FUJITSU_AIRCON1_HDIR_MANUAL 0x00 -#define FUJITSU_AIRCON1_HDIR_SWING 0x20 -#define FUJITSU_AIRCON1_ECO_OFF 0x20 -#define FUJITSU_AIRCON1_ECO_ON 0x00 - - - -class FujitsuHeatpumpIR : public HeatpumpIR -{ - public: - FujitsuHeatpumpIR(); - void send(IRSender& IR, uint8_t powerModeCmd, uint8_t operatingModeCmd, uint8_t fanSpeedCmd, uint8_t temperatureCmd, uint8_t swingVCmd, uint8_t swingHCmd); - void send(IRSender& IR, uint8_t powerModeCmd, uint8_t operatingModeCmd, uint8_t fanSpeedCmd, uint8_t temperatureCmd, uint8_t swingVCmd, uint8_t swingHCmd, bool ecoModeCmd); - void sendFujitsuHiPower(IRSender& IR); - void sendFujitsuFilterClean(IRSender& IR); - void sendFujitsuSuperQuiet(IRSender& IR); - void sendFujitsuTestRun(IRSender& IR); - - private: - void sendFujitsu(IRSender& IR, uint8_t operatingMode, uint8_t fanSpeed, uint8_t temperature, uint8_t swingV, uint8_t swingH, uint8_t ecoMode); - void sendFujitsuMsg(IRSender& IR, uint8_t msgSize, uint8_t *msg); -}; - -#endif diff --git a/libraries/HeatpumpIR/HeatpumpIR.cpp b/libraries/HeatpumpIR/HeatpumpIR.cpp deleted file mode 100644 index 4edffa3..0000000 --- a/libraries/HeatpumpIR/HeatpumpIR.cpp +++ /dev/null @@ -1,21 +0,0 @@ -#include - -HeatpumpIR::HeatpumpIR() -{ -} - -// This is a virtual function, i.e. never called -void HeatpumpIR::send(IRSender&, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t) -{ -} - -// Heatpump model and info getters -const char PROGMEM* HeatpumpIR::model() -{ - return _model; -} - -const char PROGMEM* HeatpumpIR::info() -{ - return _info; -} \ No newline at end of file diff --git a/libraries/HeatpumpIR/HeatpumpIR.h b/libraries/HeatpumpIR/HeatpumpIR.h deleted file mode 100644 index 7bc93ba..0000000 --- a/libraries/HeatpumpIR/HeatpumpIR.h +++ /dev/null @@ -1,68 +0,0 @@ -/* - The generic heatpump interface - * Constants for modes - * The constructor and the 'send' command interface -*/ - -#ifndef HeatpumpIR_h -#define HeatpumpIR_h - -#include -#include - - -// Power state -#define POWER_OFF 0 -#define POWER_ON 1 - -// Operating modes -#define MODE_AUTO 1 -#define MODE_HEAT 2 -#define MODE_COOL 3 -#define MODE_DRY 4 -#define MODE_FAN 5 -#define MODE_MAINT 6 - -// Fan speeds. Note that some heatpumps have less than 5 fan speeds -#define FAN_AUTO 0 -#define FAN_1 1 -#define FAN_2 2 -#define FAN_3 3 -#define FAN_4 4 -#define FAN_5 5 - -// Vertical air directions. Note that these cannot be set on all heat pumps -#define VDIR_AUTO 0 -#define VDIR_MANUAL 0 -#define VDIR_SWING 1 -#define VDIR_UP 2 -#define VDIR_MUP 3 -#define VDIR_MIDDLE 4 -#define VDIR_MDOWN 5 -#define VDIR_DOWN 6 - -// Horizontal air directions. Note that these cannot be set on all heat pumps -#define HDIR_AUTO 0 -#define HDIR_MANUAL 0 -#define HDIR_SWING 1 -#define HDIR_MIDDLE 2 -#define HDIR_LEFT 3 -#define HDIR_MLEFT 4 -#define HDIR_MRIGHT 5 -#define HDIR_RIGHT 6 - - -class HeatpumpIR -{ - protected: - HeatpumpIR(); // Cannot create generic heatpump instances - const char * _model; - const char * _info; - - public: - virtual void send(IRSender& IR, uint8_t powerModeCmd, uint8_t operatingModeCmd, uint8_t fanSpeedCmd, uint8_t temperatureCmd, uint8_t swingVCmd, uint8_t swingHCmd); - const char PROGMEM* model(); - const char PROGMEM* info(); -}; - -#endif diff --git a/libraries/HeatpumpIR/HisenseHeatpumpIR.cpp b/libraries/HeatpumpIR/HisenseHeatpumpIR.cpp deleted file mode 100644 index e01a092..0000000 --- a/libraries/HeatpumpIR/HisenseHeatpumpIR.cpp +++ /dev/null @@ -1,129 +0,0 @@ -#include - -HisenseHeatpumpIR::HisenseHeatpumpIR() : HeatpumpIR() -{ - static const char PROGMEM model[] PROGMEM = "hisense_aud"; - static const char PROGMEM info[] PROGMEM = "{\"mdl\":\"hisense_aud\",\"dn\":\"Hisense AUD\",\"mT\":18,\"xT\":32,\"fs\":3}"; - - _model = model; - _info = info; -} - - -void HisenseHeatpumpIR::send(IRSender& IR, uint8_t powerModeCmd, uint8_t operatingModeCmd , uint8_t fanSpeedCmd , uint8_t temperatureCmd , uint8_t swingVCmd , uint8_t swingHCmd ) -{ - (void)swingVCmd; - (void)swingHCmd; - - // Sensible defaults for the heat pump mode - - uint8_t powerMode = HISENSE_AIRCON1_POWER_ON; - uint8_t operatingMode = HISENSE_AIRCON1_MODE_HEAT; - uint8_t fanSpeed = HISENSE_AIRCON1_FAN_AUTO; - uint8_t temperature = 21; - uint8_t swingV=0; - uint8_t swingH=0; - - if (powerModeCmd == POWER_OFF) - { - powerMode = HISENSE_AIRCON1_POWER_OFF; - } - else - { - switch (operatingModeCmd) - { - case MODE_AUTO: - operatingMode = HISENSE_AIRCON1_MODE_AUTO; - fanSpeedCmd = FAN_AUTO; // Fan speed is always 'AUTO' in AUTO mode - break; - case MODE_HEAT: - operatingMode = HISENSE_AIRCON1_MODE_HEAT; - break; - case MODE_COOL: - operatingMode = HISENSE_AIRCON1_MODE_COOL; - break; - case MODE_DRY: - operatingMode = HISENSE_AIRCON1_MODE_DRY; - fanSpeedCmd = FAN_AUTO; // Fan speed is always 'AUTO' in DRY mode - break; - case MODE_FAN: - operatingMode = HISENSE_AIRCON1_MODE_FAN; - if ( fanSpeedCmd == FAN_AUTO ) { - fanSpeedCmd = FAN_1; // Fan speed cannot be 'AUTO' in FAN mode - temperatureCmd = 25; // Fixed temperature FAN mode - } - break; - } - } - - switch (fanSpeedCmd) - { - case FAN_AUTO: - fanSpeed = HISENSE_AIRCON1_FAN_AUTO; - break; - case FAN_1: - fanSpeed = HISENSE_AIRCON1_FAN1; - break; - case FAN_2: - fanSpeed = HISENSE_AIRCON1_FAN2; - break; - case FAN_3: - fanSpeed = HISENSE_AIRCON1_FAN3; - break; - } - - if ( temperatureCmd > 17 && temperatureCmd < 33) - { - temperature = temperatureCmd; - } - - - sendHisense(IR, powerMode, operatingMode, fanSpeed, temperature, swingV, swingH); -} - -// Send the Hisense code -void HisenseHeatpumpIR::sendHisense(IRSender& IR, uint8_t powerMode, uint8_t operatingMode, uint8_t fanSpeed, uint8_t temperature, uint8_t swingV ,uint8_t swingH) -{ - (void)swingV; - (void)swingH; - - uint8_t HisenseTemplate[] = { 0x87, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, // Header uint8_t 0-1 - 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00 }; // - - uint8_t i; - - // Set the Fan speed, On/Off. - HisenseTemplate[2] = fanSpeed | powerMode; - HisenseTemplate[3] = (((temperature - 18) << 4) | operatingMode ) ; - - // Calculate the uint8_t checksum EXOR uint8_t 2 to 12 - HisenseTemplate[13] = HisenseTemplate[2]; - for (i=3; i<13; i++) { - HisenseTemplate[13]= HisenseTemplate[i] ^ HisenseTemplate[13]; - } - - // 38 kHz PWM frequency - IR.setFrequency(38); - - // Send Header mark - IR.mark(HISENSE_AIRCON1_HDR_MARK); - IR.space(HISENSE_AIRCON1_HDR_SPACE); - - // Payload header part - for (i=0; i<7; i++) { - IR.sendIRbyte(HisenseTemplate[i], HISENSE_AIRCON1_BIT_MARK, HISENSE_AIRCON1_ZERO_SPACE, HISENSE_AIRCON1_ONE_SPACE); - } - - // Mesage space - IR.mark(HISENSE_AIRCON1_BIT_MARK); - IR.space(HISENSE_AIRCON1_MSG_SPACE); - - // Payload message part - for (; i<14; i++) { - IR.sendIRbyte(HisenseTemplate[i], HISENSE_AIRCON1_BIT_MARK, HISENSE_AIRCON1_ZERO_SPACE, HISENSE_AIRCON1_ONE_SPACE); - } - - // End mark - IR.mark(HISENSE_AIRCON1_BIT_MARK); - IR.space(0); -} \ No newline at end of file diff --git a/libraries/HeatpumpIR/HisenseHeatpumpIR.h b/libraries/HeatpumpIR/HisenseHeatpumpIR.h deleted file mode 100644 index eb2e69c..0000000 --- a/libraries/HeatpumpIR/HisenseHeatpumpIR.h +++ /dev/null @@ -1,73 +0,0 @@ -/* - Hisense AQV12PSBN / AQV09ASA heatpump control (remote control P/N zzz) -*/ -#ifndef HisenseHeatpumpIR_h -#define HisenseHeatpumpIR_h - -#include - - -// Hisense timing constants -#define HISENSE_AIRCON1_HDR_MARK 9060 -#define HISENSE_AIRCON1_HDR_SPACE 4550 -#define HISENSE_AIRCON1_BIT_MARK 520 -#define HISENSE_AIRCON1_ONE_SPACE 1700 -#define HISENSE_AIRCON1_ZERO_SPACE 630 -#define HISENSE_AIRCON1_MSG_SPACE 8140 - -// Power state -#define HISENSE_AIRCON1_POWER_OFF 0x04 //** -#define HISENSE_AIRCON1_POWER_ON 0x00 //** - -// Operating modes -// Hisense codes -#define HISENSE_AIRCON1_MODE_AUTO 0x04 // Not available 0x00 -#define HISENSE_AIRCON1_MODE_HEAT 0x00 -#define HISENSE_AIRCON1_MODE_COOL 0x02 -#define HISENSE_AIRCON1_MODE_DRY 0x03 -#define HISENSE_AIRCON1_MODE_FAN 0x04 -#define HISENSE_AIRCON1_MODE_MAINT 0x04 // Power OFF - -// Fan speeds. Note that some heatpumps have less than 5 fan speeds - -#define HISENSE_AIRCON1_FAN_AUTO 0x00 // Fan speed -#define HISENSE_AIRCON1_FAN1 0x03 // * low -#define HISENSE_AIRCON1_FAN2 0x02 // * med -#define HISENSE_AIRCON1_FAN3 0x01 // * high -#define HISENSE_AIRCON1_FAN4 0x01 // * high Not available -#define HISENSE_AIRCON1_FAN5 0x01 // * high Not available - -// Not available in this model. -// Vertical air directions. Note that these cannot be set on all heat pumps -#define HISENSE_VDIR_AUTO 0 -#define HISENSE_VDIR_MANUAL 0 -#define HISENSE_VDIR_SWING 0 -#define HISENSE_VDIR_UP 0 -#define HISENSE_VDIR_MUP 0 -#define HISENSE_VDIR_MIDDLE 0 -#define HISENSE_VDIR_MDOWN 0 -#define HISENSE_VDIR_DOWN 0 - -// Not available in this model. -// Horizontal air directions. Note that these cannot be set on all heat pumps -#define HISENSE_HDIR_AUTO 0 -#define HISENSE_HDIR_MANUAL 0 -#define HISENSE_HDIR_SWING 0 -#define HISENSE_HDIR_MIDDLE 0 -#define HISENSE_HDIR_LEFT 0 -#define HISENSE_HDIR_MLEFT 0 -#define HISENSE_HDIR_MRIGHT 0 -#define HISENSE_HDIR_RIGHT 0 - - -class HisenseHeatpumpIR : public HeatpumpIR -{ - public: - HisenseHeatpumpIR(); - void send(IRSender& IR, uint8_t powerModeCmd, uint8_t operatingModeCmd, uint8_t fanSpeedCmd, uint8_t temperatureCmd, uint8_t swingVCmd, uint8_t swingHCmd); - - private: - void sendHisense(IRSender& IR, uint8_t powerMode, uint8_t operatingMode, uint8_t fanSpeed, uint8_t temperature, uint8_t swingV, uint8_t swingH); -}; - -#endif diff --git a/libraries/HeatpumpIR/IRSender.cpp b/libraries/HeatpumpIR/IRSender.cpp deleted file mode 100644 index fdf8b58..0000000 --- a/libraries/HeatpumpIR/IRSender.cpp +++ /dev/null @@ -1,206 +0,0 @@ -#include -#include - -// Heavily based on Ken Shirriff's IRRemote library: -// https://github.com/shirriff/Arduino-IRremote -// -// For PWM on Arduino, see http://playground.arduino.cc/Main/TimerPWMCheatsheet - -IRSender::IRSender(uint8_t pin) -{ - _pin = pin; -} - -// Set the PWM frequency. The selected pin determines which timer to use -void IRSender::setFrequency(int frequency) -{ - uint8_t pwmval8 = F_CPU / 2000 / (frequency); - uint16_t pwmval16 = F_CPU / 2000 / (frequency); - - pinMode(_pin, OUTPUT); - digitalWrite(_pin, LOW); // When not sending PWM, we want it low - - switch (_pin) - { -#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) -// Arduino Mega - case 9: - // Fall-through to 10, timer2 controls both 9 and 10 - case 10: - TCCR2A = _BV(WGM20); - TCCR2B = _BV(WGM22) | _BV(CS20); - OCR2A = pwmval8; - OCR2B = pwmval8 / 3; - break; - case 11: - // Fall-through to 12, timer1 controls both 11 and 12 - case 12: - TCCR1A = _BV(WGM11); - TCCR1B = _BV(WGM13) | _BV(CS10); - ICR1 = pwmval16; - OCR1A = pwmval16 / 3; - OCR1B = pwmval16 / 3; - break; - case 44: - // Fall-through to 46, timer 5 controls pins 44, 45 and 46 on Arduino Mega - case 45: - case 46: - TCCR5A = _BV(WGM51) | _BV(WGM50); - TCCR5B = _BV(WGM53) | _BV(CS50); - ICR5 = pwmval16; - OCR5A = pwmval16 / 3; -#else -// Arduino Duemilanove etc - case 3: - // Fall-through to 11, timer2 controls both 3 and 11 - case 11: - TCCR2A = _BV(WGM20); - TCCR2B = _BV(WGM22) | _BV(CS20); - OCR2A = pwmval8; - OCR2B = pwmval8 / 3; - break; - case 9: - // Fall-through to 10, timer1 controls both 9 and 10 - case 10: - TCCR1A = _BV(WGM11); - TCCR1B = _BV(WGM13) | _BV(CS10); - ICR1 = pwmval16; - OCR1A = pwmval16 / 3; - OCR1B = pwmval16 / 3; - break; -#endif - } -} - -// Send a uint8_t (8 bits) over IR -void IRSender::sendIRbyte(uint8_t sendByte, int bitMarkLength, int zeroSpaceLength, int oneSpaceLength) -{ - for (int i=0; i<8 ; i++) - { - if (sendByte & 0x01) - { - mark(bitMarkLength); - space(oneSpaceLength); - } - else - { - mark(bitMarkLength); - space(zeroSpaceLength); - } - - sendByte >>= 1; - } -} - -// The Carrier IR protocol has the bits in a reverse order (compared to the other heatpumps) -// See http://www.nrtm.org/index.php/2013/07/25/reverse-bits-in-a-uint8_t/ -uint8_t IRSender::bitReverse(uint8_t x) -{ - // 01010101 | 10101010 - x = ((x >> 1) & 0x55) | ((x << 1) & 0xaa); - // 00110011 | 11001100 - x = ((x >> 2) & 0x33) | ((x << 2) & 0xcc); - // 00001111 | 11110000 - x = ((x >> 4) & 0x0f) | ((x << 4) & 0xf0); - return x; -} - -// Send an IR 'mark' symbol, i.e. transmitter ON -void IRSender::mark(int markLength) -{ - switch (_pin) - { -#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) -// Arduino Mega - case 9: - (TCCR2A |= _BV(COM2B1)); // Enable pin 3 PWM output - break; - case 11: - (TCCR1A |= _BV(COM1A1)); // Enable pin 9 PWM output - break; - case 12: - (TCCR1A |= _BV(COM1B1)); // Enable pin 10 PWM output - break; - case 10: - (TCCR2A |= _BV(COM2A1)); // Enable pin 11 PWM output - break; - case 44: - (TCCR5A |= _BV(COM5C1)); // Enable pin 44 PWM output on Arduino Mega - break; - case 45: - (TCCR5A |= _BV(COM5B1)); // Enable pin 45 PWM output on Arduino Mega - break; - case 46: - (TCCR5A |= _BV(COM5A1)); // Enable pin 46 PWM output on Arduino Mega - break; -#else -// Arduino Duemilanove etc - case 3: - (TCCR2A |= _BV(COM2B1)); // Enable pin 3 PWM output - break; - case 9: - (TCCR1A |= _BV(COM1A1)); // Enable pin 9 PWM output - break; - case 10: - (TCCR1A |= _BV(COM1B1)); // Enable pin 10 PWM output - break; - case 11: - (TCCR2A |= _BV(COM2A1)); // Enable pin 11 PWM output - break; -#endif - } - - delayMicroseconds(markLength); -} - -// Send an IR 'space' symbol, i.e. transmitter OFF -void IRSender::space(int spaceLength) -{ - switch (_pin) - { -#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) -// Arduino Mega - case 9: - (TCCR2A &= ~(_BV(COM2B1))); // Disable pin 3 PWM output - break; - case 11: - (TCCR1A &= ~(_BV(COM1A1))); // Disable pin 9 PWM output - break; - case 12: - (TCCR1A &= ~(_BV(COM1B1))); // Disable pin 10 PWM output - break; - case 10: - (TCCR2A &= ~(_BV(COM2A1))); // Disable pin 11 PWM output - break; - case 44: - (TCCR5A &= ~(_BV(COM5C1))); // Disable pin 44 PWM output on Arduino Mega - case 45: - (TCCR5A &= ~(_BV(COM5B1))); // Disable pin 45 PWM output on Arduino Mega - case 46: - (TCCR5A &= ~(_BV(COM5A1))); // Disable pin 46 PWM output on Arduino Mega -#else -// Arduino Duemilanove etc - case 3: - (TCCR2A &= ~(_BV(COM2B1))); // Disable pin 3 PWM output - break; - case 9: - (TCCR1A &= ~(_BV(COM1A1))); // Disable pin 9 PWM output - break; - case 10: - (TCCR1A &= ~(_BV(COM1B1))); // Disable pin 10 PWM output - break; - case 11: - (TCCR2A &= ~(_BV(COM2A1))); // Disable pin 11 PWM output - break; -#endif -} - - // Mitsubishi heatpump uses > 16383us spaces, and delayMicroseconds only works up to 2^14 - 1 us - // Use the less accurate milliseconds delay for longer delays - - if (spaceLength < 16383) { - delayMicroseconds(spaceLength); - } else { - delay(spaceLength/1000); - } -} diff --git a/libraries/HeatpumpIR/IRSender.h b/libraries/HeatpumpIR/IRSender.h deleted file mode 100644 index c99bb82..0000000 --- a/libraries/HeatpumpIR/IRSender.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - Class to send IR signals using the Arduino PWM -*/ -#ifndef IRSender_h -#define IRSender_h - -#include - -class IRSender -{ - public: - IRSender(uint8_t pin); - void setFrequency(int frequency); - void sendIRbyte(uint8_t sendByte, int bitMarkLength, int zeroSpaceLength, int oneSpaceLength); - uint8_t bitReverse(uint8_t x); - void space(int spaceLength); - void mark(int markLength); - - private: - uint8_t _pin; -}; - -#endif diff --git a/libraries/HeatpumpIR/LICENSE b/libraries/HeatpumpIR/LICENSE deleted file mode 100644 index d7f1051..0000000 --- a/libraries/HeatpumpIR/LICENSE +++ /dev/null @@ -1,339 +0,0 @@ -GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - {description} - Copyright (C) {year} {fullname} - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - {signature of Ty Coon}, 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/libraries/HeatpumpIR/MideaHeatpumpIR.cpp b/libraries/HeatpumpIR/MideaHeatpumpIR.cpp deleted file mode 100644 index 7f5d5c9..0000000 --- a/libraries/HeatpumpIR/MideaHeatpumpIR.cpp +++ /dev/null @@ -1,150 +0,0 @@ -#include - -MideaHeatpumpIR::MideaHeatpumpIR() : HeatpumpIR() -{ - static const char PROGMEM model[] PROGMEM = "midea"; // The basic and inverter Midea's are the same, i.e. at least Pro Plus 10FP, Pro Plus 13Fp, Pro Plus 9 Inverter and Pro Plus 12 Inverter should work - static const char PROGMEM info[] PROGMEM = "{\"mdl\":\"midea\",\"dn\":\"Ultimate Pro Plus\",\"mT\":16,\"xT\":30,\"fs\":4,\"maint\":[10]}"; - - _model = model; - _info = info; -} - - -void MideaHeatpumpIR::send(IRSender& IR, uint8_t powerModeCmd, uint8_t operatingModeCmd, uint8_t fanSpeedCmd, uint8_t temperatureCmd, uint8_t swingVCmd, uint8_t swingHCmd) -{ - (void)swingVCmd; - (void)swingHCmd; - - // Sensible defaults for the heat pump mode - uint8_t operatingMode = MIDEA_AIRCON1_MODE_HEAT; - uint8_t fanSpeed = MIDEA_AIRCON1_FAN_AUTO; - uint8_t temperature = 23; - - switch (powerModeCmd) - { - case 0: - // OFF is a special case - operatingMode = MIDEA_AIRCON1_MODE_OFF; - sendMidea(IR, operatingMode, fanSpeed, temperature); - return; - } - - switch (operatingModeCmd) - { - case MODE_AUTO: - operatingMode = MIDEA_AIRCON1_MODE_AUTO; - break; - case MODE_HEAT: - operatingMode = MIDEA_AIRCON1_MODE_HEAT; - break; - case MODE_COOL: - operatingMode = MIDEA_AIRCON1_MODE_COOL; - break; - case MODE_DRY: - operatingMode = MIDEA_AIRCON1_MODE_DRY; - break; - case MODE_FAN: - operatingMode = MIDEA_AIRCON1_MODE_FAN; - break; - case MODE_MAINT: - // Maintenance mode ('FP' on the remote) is a special mode on Midea - // Also, this is a switch between 'normal' operation and 'maintenance' operation, - // i.e. if already running on maintenance, the heatpump will go back to normal operation - operatingMode = MIDEA_AIRCON1_MODE_FP; - break; - } - - switch (fanSpeedCmd) - { - case FAN_AUTO: - fanSpeed = MIDEA_AIRCON1_FAN_AUTO; - break; - case FAN_1: - fanSpeed = MIDEA_AIRCON1_FAN1; - break; - case FAN_2: - fanSpeed = MIDEA_AIRCON1_FAN2; - break; - case FAN_3: - fanSpeed = MIDEA_AIRCON1_FAN3; - break; - } - - if ( temperatureCmd > 16 && temperatureCmd < 31) - { - temperature = temperatureCmd; - } - - sendMidea(IR, operatingMode, fanSpeed, temperature); -} - -// Send the Midea code -void MideaHeatpumpIR::sendMidea(IRSender& IR, uint8_t operatingMode, uint8_t fanSpeed, uint8_t temperature) -{ - uint8_t sendBuffer[3] = { 0x4D, 0x00, 0x00 }; // First uint8_t is always 0x4D - - static const uint8_t temperatures[] PROGMEM = {0, 8, 12, 4, 6, 14, 10, 2, 3, 11, 9, 1, 5, 13 }; - - static const uint8_t OffMsg[] PROGMEM = {0x4D, 0xDE, 0x07 }; - static const uint8_t FPMsg[] PROGMEM = {0xAD, 0xAF, 0xB5 }; - - if (operatingMode == MIDEA_AIRCON1_MODE_OFF) - { - memcpy_P(sendBuffer, OffMsg, sizeof(sendBuffer)); - } - else if (operatingMode == MIDEA_AIRCON1_MODE_FP) - { - memcpy_P(sendBuffer, FPMsg, sizeof(sendBuffer)); - } - else - { - sendBuffer[1] = ~fanSpeed; - - if ( operatingMode == MIDEA_AIRCON1_MODE_FAN ) - { - sendBuffer[2] = MIDEA_AIRCON1_MODE_DRY | 0x07; - } - else - { - sendBuffer[2] = operatingMode | pgm_read_byte(&(temperatures[(temperature-17)])); - } - } - - // Send the code - sendMidearaw(IR, sendBuffer); -} - -// Send the Midea raw code -void MideaHeatpumpIR::sendMidearaw(IRSender& IR, uint8_t sendBuffer[]) -{ - // 40 kHz PWM frequency - IR.setFrequency(38); - - // Header - IR.mark(MIDEA_AIRCON1_HDR_MARK); - IR.space(MIDEA_AIRCON1_HDR_SPACE); - - // Six uint8_ts, every second uint8_t is a bitwise not of the previous uint8_t - for (int i=0; i<3; i++) { - IR.sendIRbyte(sendBuffer[i], MIDEA_AIRCON1_BIT_MARK, MIDEA_AIRCON1_ZERO_SPACE, MIDEA_AIRCON1_ONE_SPACE); - IR.sendIRbyte(~sendBuffer[i], MIDEA_AIRCON1_BIT_MARK, MIDEA_AIRCON1_ZERO_SPACE, MIDEA_AIRCON1_ONE_SPACE); - } - - // Pause - IR.mark(MIDEA_AIRCON1_BIT_MARK); - IR.space(MIDEA_AIRCON1_MSG_SPACE); - - // Header, two last uint8_ts repeated - IR.mark(MIDEA_AIRCON1_HDR_MARK); - IR.space(MIDEA_AIRCON1_HDR_SPACE); - - // Six uint8_ts, every second uint8_t is a bitwise not of the previous uint8_t - for (int i=0; i<3; i++) { - IR.sendIRbyte(sendBuffer[i], MIDEA_AIRCON1_BIT_MARK, MIDEA_AIRCON1_ZERO_SPACE, MIDEA_AIRCON1_ONE_SPACE); - IR.sendIRbyte(~sendBuffer[i], MIDEA_AIRCON1_BIT_MARK, MIDEA_AIRCON1_ZERO_SPACE, MIDEA_AIRCON1_ONE_SPACE); - } - - // End mark - IR.mark(MIDEA_AIRCON1_BIT_MARK); - IR.space(0); -} \ No newline at end of file diff --git a/libraries/HeatpumpIR/MideaHeatpumpIR.h b/libraries/HeatpumpIR/MideaHeatpumpIR.h deleted file mode 100644 index 20602a3..0000000 --- a/libraries/HeatpumpIR/MideaHeatpumpIR.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - Midea MSR1-12HRN1-QC2 + MOA1-12HN1-QC2 heatpump control (remote control P/N RG51M1/E) - This heatpump is sold as 'Ultimate Pro Plus 13FP' in Finland, by www.ultimatemarket.com - - Midea MSR1U-12HRDN1-QRC4W + MOB-12HFN1-QRC4W (remote control P/N RG51I20/BGE) - This heatpump is sold as 'Ultimate 12 Pro Plus Inverter' in Finland, by www.ultimatemarket.com -*/ -#ifndef MideaHeatpumpIR_h -#define MideaHeatpumpIR_h - -#include - -// Midea timing constants -#define MIDEA_AIRCON1_HDR_MARK 4420 -#define MIDEA_AIRCON1_HDR_SPACE 4300 -#define MIDEA_AIRCON1_BIT_MARK 620 -#define MIDEA_AIRCON1_ONE_SPACE 1560 -#define MIDEA_AIRCON1_ZERO_SPACE 480 -#define MIDEA_AIRCON1_MSG_SPACE 5100 - -// MIDEA codes -#define MIDEA_AIRCON1_MODE_AUTO 0x10 // Operating mode -#define MIDEA_AIRCON1_MODE_HEAT 0x30 -#define MIDEA_AIRCON1_MODE_COOL 0x00 -#define MIDEA_AIRCON1_MODE_DRY 0x20 -#define MIDEA_AIRCON1_MODE_FAN 0x60 -#define MIDEA_AIRCON1_MODE_FP 0x70 // Not a real mode... -#define MIDEA_AIRCON1_MODE_OFF 0xFE // Power OFF - not real codes, but we need something... -#define MIDEA_AIRCON1_MODE_ON 0xFF // Power ON -#define MIDEA_AIRCON1_FAN_AUTO 0x02 // Fan speed -#define MIDEA_AIRCON1_FAN1 0x06 -#define MIDEA_AIRCON1_FAN2 0x05 -#define MIDEA_AIRCON1_FAN3 0x03 - - -class MideaHeatpumpIR : public HeatpumpIR -{ - public: - MideaHeatpumpIR(); - void send(IRSender& IR, uint8_t powerModeCmd, uint8_t operatingModeCmd, uint8_t fanSpeedCmd, uint8_t temperatureCmd, uint8_t swingVCmd, uint8_t swingHCmd); - - private: - void sendMidea(IRSender& IR, uint8_t operatingMode, uint8_t fanSpeed, uint8_t temperature); - void sendMidearaw(IRSender& IR, uint8_t sendBuffer[]); -}; - -#endif diff --git a/libraries/HeatpumpIR/MitsubishiHeatpumpIR.cpp b/libraries/HeatpumpIR/MitsubishiHeatpumpIR.cpp deleted file mode 100644 index 23b7fee..0000000 --- a/libraries/HeatpumpIR/MitsubishiHeatpumpIR.cpp +++ /dev/null @@ -1,214 +0,0 @@ -#include - -// These are protected methods, i.e. generic Mitsubishi instances cannot be created directly -MitsubishiHeatpumpIR::MitsubishiHeatpumpIR() : HeatpumpIR() -{ -} - - -// The different models just set the model accordingly - -MitsubishiFDHeatpumpIR::MitsubishiFDHeatpumpIR() : MitsubishiHeatpumpIR() -{ - static const char PROGMEM model[] PROGMEM = "mitsubishi_fd"; - static const char PROGMEM info[] PROGMEM = "{\"mdl\":\"mitsubishi_fd\",\"dn\":\"Mitsubishi FD\",\"mT\":16,\"xT\":31,\"fs\":5}"; - - _model = model; - _info = info; - - _mitsubishiModel = MITSUBISHI_FD; -} - -MitsubishiFEHeatpumpIR::MitsubishiFEHeatpumpIR() : MitsubishiHeatpumpIR() -{ - static const char PROGMEM model[] PROGMEM = "mitsubishi_fe"; - static const char PROGMEM info[] PROGMEM = "{\"mdl\":\"mitsubishi_fe\",\"dn\":\"Mitsubishi FE\",\"mT\":16,\"xT\":31,\"fs\":5,\"maint\":[10]}"; - - _model = model; - _info = info; - - _mitsubishiModel = MITSUBISHI_FE; -} - - -void MitsubishiHeatpumpIR::send(IRSender& IR, uint8_t powerModeCmd, uint8_t operatingModeCmd, uint8_t fanSpeedCmd, uint8_t temperatureCmd, uint8_t swingVCmd, uint8_t swingHCmd) -{ - // Sensible defaults for the heat pump mode - - uint8_t powerMode = MITSUBISHI_AIRCON1_MODE_ON; - uint8_t operatingMode = MITSUBISHI_AIRCON1_MODE_HEAT; - uint8_t fanSpeed = MITSUBISHI_AIRCON1_FAN_AUTO; - uint8_t temperature = 23; - uint8_t swingV = MITSUBISHI_AIRCON1_VS_AUTO; - uint8_t swingH = MITSUBISHI_AIRCON1_HS_SWING; - - if (powerModeCmd == 0) - { - powerMode = MITSUBISHI_AIRCON1_MODE_OFF; - } - - switch (operatingModeCmd) - { - case MODE_AUTO: - operatingMode = MITSUBISHI_AIRCON1_MODE_AUTO; - break; - case MODE_HEAT: - operatingMode = MITSUBISHI_AIRCON1_MODE_HEAT; - break; - case MODE_COOL: - operatingMode = MITSUBISHI_AIRCON1_MODE_COOL; - break; - case MODE_DRY: - operatingMode = MITSUBISHI_AIRCON1_MODE_DRY; - break; - case MODE_FAN: - if (_mitsubishiModel == MITSUBISHI_FE) { - operatingMode = MITSUBISHI_AIRCON1_MODE_FAN; - temperatureCmd = 24; - } else { - operatingMode = MITSUBISHI_AIRCON1_MODE_COOL; - // Temperature needs to be set to 31 degrees for 'simulated' FAN mode - temperatureCmd = 31; - } - break; - case MODE_MAINT: // Maintenance mode is just the heat mode at +10, FAN5 - if (_mitsubishiModel == MITSUBISHI_FE) { - operatingMode |= MITSUBISHI_AIRCON1_MODE_HEAT; - temperature = 10; // Default to +10 degrees - fanSpeedCmd = FAN_AUTO; - } - break; - } - - switch (fanSpeedCmd) - { - case FAN_AUTO: - fanSpeed = MITSUBISHI_AIRCON1_FAN_AUTO; - break; - case FAN_1: - fanSpeed = MITSUBISHI_AIRCON1_FAN1; - break; - case FAN_2: - fanSpeed = MITSUBISHI_AIRCON1_FAN2; - break; - case FAN_3: - fanSpeed = MITSUBISHI_AIRCON1_FAN3; - break; - case FAN_4: - fanSpeed = MITSUBISHI_AIRCON1_FAN4; - break; - } - - if ( temperatureCmd > 16 && temperatureCmd < 32) - { - temperature = temperatureCmd; - } - - switch (swingVCmd) - { - case VDIR_AUTO: - swingV = MITSUBISHI_AIRCON1_VS_AUTO; - break; - case VDIR_SWING: - swingV = MITSUBISHI_AIRCON1_VS_SWING; - break; - case VDIR_UP: - swingV = MITSUBISHI_AIRCON1_VS_UP; - break; - case VDIR_MUP: - swingV = MITSUBISHI_AIRCON1_VS_MUP; - break; - case VDIR_MIDDLE: - swingV = MITSUBISHI_AIRCON1_VS_MIDDLE; - break; - case VDIR_MDOWN: - swingV = MITSUBISHI_AIRCON1_VS_MDOWN; - break; - case VDIR_DOWN: - swingV = MITSUBISHI_AIRCON1_VS_DOWN; - break; - } - - switch (swingHCmd) - { - case HDIR_AUTO: - case HDIR_SWING: - swingH = MITSUBISHI_AIRCON1_HS_SWING; - break; - case HDIR_MIDDLE: - swingH = MITSUBISHI_AIRCON1_HS_MIDDLE; - break; - case HDIR_LEFT: - swingH = MITSUBISHI_AIRCON1_HS_LEFT; - break; - case HDIR_MLEFT: - swingH = MITSUBISHI_AIRCON1_HS_MLEFT; - break; - case HDIR_RIGHT: - swingH = MITSUBISHI_AIRCON1_HS_RIGHT; - break; - case HDIR_MRIGHT: - swingH = MITSUBISHI_AIRCON1_HS_MRIGHT; - break; - } - - sendMitsubishi(IR, powerMode, operatingMode, fanSpeed, temperature, swingV, swingH); -} - -void MitsubishiHeatpumpIR::sendMitsubishi(IRSender& IR, uint8_t powerMode, uint8_t operatingMode, uint8_t fanSpeed, uint8_t temperature, uint8_t swingV, uint8_t swingH) -{ - uint8_t MitsubishiTemplate[] = { 0x23, 0xCB, 0x26, 0x01, 0x00, 0x20, 0x48, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x10, 0x40, 0x00, 0x00 }; - // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 - - uint8_t checksum = 0x00; - - // Set the operatingmode on the template message - MitsubishiTemplate[5] = powerMode; - MitsubishiTemplate[6] = operatingMode; - - // Set the temperature on the template message - if (temperature == 10) { - MitsubishiTemplate[7] = 0x00; // Maintenance mode - MitsubishiTemplate[15] = 0x20; // This seems to be set to 0x20 on maintenance mode - } else { - MitsubishiTemplate[7] = temperature - 16; - } - - // Set the horizontal air direction on the template message - MitsubishiTemplate[8] = swingH; - - // Set the fan speed and vertical air direction on the template message - MitsubishiTemplate[9] = fanSpeed | swingV; - - // Calculate the checksum - for (int i=0; i<17; i++) { - checksum += MitsubishiTemplate[i]; - } - - MitsubishiTemplate[17] = checksum; - - // 40 kHz PWM frequency - IR.setFrequency(38); - - // The Mitsubishi data is repeated twice - for (int j=0; j<2; j++) { - // Header - IR.mark(MITSUBISHI_AIRCON1_HDR_MARK); - IR.space(MITSUBISHI_AIRCON1_HDR_SPACE); - - // Data - for (unsigned int i=0; i - - -// Mitsubishi MSZ FD-25 timing constants (remote control P/N KM09D 0052376) -#define MITSUBISHI_AIRCON1_HDR_MARK 3500 -#define MITSUBISHI_AIRCON1_HDR_SPACE 1700 -#define MITSUBISHI_AIRCON1_BIT_MARK 430 -#define MITSUBISHI_AIRCON1_ONE_SPACE 1250 -#define MITSUBISHI_AIRCON1_ZERO_SPACE 390 -#define MITSUBISHI_AIRCON1_MSG_SPACE 17500 - -// Mitsubishi codes -#define MITSUBISHI_AIRCON1_MODE_AUTO 0x60 // Operating mode -#define MITSUBISHI_AIRCON1_MODE_HEAT 0x48 -#define MITSUBISHI_AIRCON1_MODE_COOL 0x58 -#define MITSUBISHI_AIRCON1_MODE_DRY 0x50 -#define MITSUBISHI_AIRCON1_MODE_FAN 0x38 // EF 'FAN' mode -#define MITSUBISHI_AIRCON1_MODE_OFF 0x00 // Power OFF -#define MITSUBISHI_AIRCON1_MODE_ON 0x20 // Power ON -#define MITSUBISHI_AIRCON1_FAN_AUTO 0x00 // Fan speed - mixed with vertical swing... -#define MITSUBISHI_AIRCON1_FAN1 0x01 -#define MITSUBISHI_AIRCON1_FAN2 0x02 -#define MITSUBISHI_AIRCON1_FAN3 0x03 -#define MITSUBISHI_AIRCON1_FAN4 0x04 - -#define MITSUBISHI_AIRCON1_VS_SWING 0x78 // Vertical swing -#define MITSUBISHI_AIRCON1_VS_AUTO 0x40 // Automatic setting -#define MITSUBISHI_AIRCON1_VS_UP 0x48 -#define MITSUBISHI_AIRCON1_VS_MUP 0x50 -#define MITSUBISHI_AIRCON1_VS_MIDDLE 0x58 -#define MITSUBISHI_AIRCON1_VS_MDOWN 0x60 -#define MITSUBISHI_AIRCON1_VS_DOWN 0x68 - -#define MITSUBISHI_AIRCON1_VS_AUTO2 0x80 // ??? -#define MITSUBISHI_AIRCON1_VS_AUTO3 0xB8 // ??? - -#define MITSUBISHI_AIRCON1_HS_SWING 0xC0 // Horizontal swing -#define MITSUBISHI_AIRCON1_HS_MIDDLE 0x30 -#define MITSUBISHI_AIRCON1_HS_LEFT 0x10 -#define MITSUBISHI_AIRCON1_HS_MLEFT 0x20 -#define MITSUBISHI_AIRCON1_HS_MRIGHT 0x40 -#define MITSUBISHI_AIRCON1_HS_RIGHT 0x50 - -// Mitsubishi model codes -#define MITSUBISHI_FD 0 -#define MITSUBISHI_FE 1 - -class MitsubishiHeatpumpIR : public HeatpumpIR -{ - protected: // Cannot create generic Mitsubishi heatpump instances - MitsubishiHeatpumpIR(); - uint8_t _mitsubishiModel; // Tells whether this is FD or EF (or other supported model...) - - public: - void send(IRSender& IR, uint8_t powerModeCmd, uint8_t operatingModeCmd, uint8_t fanSpeedCmd, uint8_t temperatureCmd, uint8_t swingVCmd, uint8_t swingHCmd); - - private: - void sendMitsubishi(IRSender& IR, uint8_t powerMode, uint8_t operatingMode, uint8_t fanSpeed, uint8_t temperature, uint8_t swingVCmd, uint8_t swingHCmd); -}; - -class MitsubishiFDHeatpumpIR : public MitsubishiHeatpumpIR -{ - public: - MitsubishiFDHeatpumpIR(); -}; - -class MitsubishiFEHeatpumpIR : public MitsubishiHeatpumpIR -{ - public: - MitsubishiFEHeatpumpIR(); -}; - -#endif diff --git a/libraries/HeatpumpIR/PanasonicCKPHeatpumpIR.cpp b/libraries/HeatpumpIR/PanasonicCKPHeatpumpIR.cpp deleted file mode 100644 index fb62e9f..0000000 --- a/libraries/HeatpumpIR/PanasonicCKPHeatpumpIR.cpp +++ /dev/null @@ -1,262 +0,0 @@ -#include - - -PanasonicCKPHeatpumpIR::PanasonicCKPHeatpumpIR() -{ - static const char PROGMEM model[] PROGMEM = "panasonic_ckp"; - static const char PROGMEM info[] PROGMEM = "{\"mdl\":\"panasonic_ckp\",\"dn\":\"Panasonic CKP\",\"mT\":16,\"xT\":30,\"fs\":6}"; - - _model = model; - _info = info; -} - - -// Panasonic CKP numeric values to command uint8_ts -void PanasonicCKPHeatpumpIR::send(IRSender& IR, uint8_t powerModeCmd, uint8_t operatingModeCmd, uint8_t fanSpeedCmd, uint8_t temperatureCmd, uint8_t swingVCmd, uint8_t swingHCmd) -{ - // Sensible defaults for the heat pump mode - - uint8_t powerMode = false; - uint8_t operatingMode = PANASONIC_AIRCON1_MODE_KEEP; - uint8_t fanSpeed = PANASONIC_AIRCON1_FAN_AUTO; - uint8_t temperature = 23; - uint8_t swingV = PANASONIC_AIRCON1_VS_UP; - uint8_t swingH = PANASONIC_AIRCON1_HS_SWING; - - switch (powerModeCmd) - { - case POWER_ON: - powerMode = true; - break; - } - - switch (operatingModeCmd) - { - case MODE_AUTO: - operatingMode |= PANASONIC_AIRCON1_MODE_AUTO; - break; - case MODE_HEAT: - operatingMode |= PANASONIC_AIRCON1_MODE_HEAT; - break; - case MODE_COOL: - operatingMode |= PANASONIC_AIRCON1_MODE_COOL; - break; - case MODE_DRY: - operatingMode |= PANASONIC_AIRCON1_MODE_DRY; - break; - case MODE_FAN: - operatingMode |= PANASONIC_AIRCON1_MODE_FAN; - temperatureCmd = 27; // Temperature is always 27 in FAN mode - break; - default: - operatingMode |= PANASONIC_AIRCON1_MODE_HEAT; - break; - } - - switch (fanSpeedCmd) - { - case FAN_AUTO: - fanSpeed = PANASONIC_AIRCON1_FAN_AUTO; - break; - case FAN_1: - fanSpeed = PANASONIC_AIRCON1_FAN1; - break; - case FAN_2: - fanSpeed = PANASONIC_AIRCON1_FAN2; - break; - case FAN_3: - fanSpeed = PANASONIC_AIRCON1_FAN3; - break; - case FAN_4: - fanSpeed = PANASONIC_AIRCON1_FAN4; - break; - case FAN_5: - fanSpeed = PANASONIC_AIRCON1_FAN5; - break; - } - - if ( temperatureCmd > 15 && temperatureCmd < 31) - { - temperature = temperatureCmd; - } - - switch (swingVCmd) - { - case VDIR_SWING: - swingV = PANASONIC_AIRCON1_VS_SWING; - break; - case VDIR_UP: - swingV = PANASONIC_AIRCON1_VS_UP; - break; - case VDIR_MUP: - swingV = PANASONIC_AIRCON1_VS_MUP; - break; - case VDIR_MIDDLE: - swingV = PANASONIC_AIRCON1_VS_MIDDLE; - break; - case VDIR_MDOWN: - swingV = PANASONIC_AIRCON1_VS_MDOWN; - break; - case VDIR_DOWN: - swingV = PANASONIC_AIRCON1_VS_DOWN; - break; - } - - switch (swingHCmd) - { - case HDIR_SWING: - swingH = PANASONIC_AIRCON1_HS_SWING; - break; - case HDIR_AUTO: // Well, just set it to manual - swingH = PANASONIC_AIRCON1_HS_MANUAL; - break; - } - - sendPanasonicCKP(IR, operatingMode, fanSpeed, temperature, swingV, swingH); - delay(1000); // Sleep 1 second between the messages - - // This will change the power state in one minute from now - sendPanasonicCKPOnOffTimerCancel(IR, powerMode, false); -/* - // Send the 'timer cancel' signal 2 minutes later - if (panasonicCancelTimer != 0) - { - timer.stop(panasonicCancelTimer); - panasonicCancelTimer = 0; - } - - // Note that the argument to 'timer.after' has to be explicitly cast into 'long' - panasonicCancelTimer = timer.after(2L*60L*1000L, sendPanasonicCKPCancelTimer); - - Serial.print(F("'Timer cancel' timer ID: ")); - Serial.println(panasonicCancelTimer); -*/ -} - -// Send the Panasonic CKP code -void PanasonicCKPHeatpumpIR::sendPanasonicCKP(IRSender& IR, uint8_t operatingMode, uint8_t fanSpeed, uint8_t temperature, uint8_t swingV, uint8_t swingH) -{ - uint8_t sendBuffer[4]; - - // Fan speed & temperature, temperature needs to be 27 in FAN mode - if (operatingMode == PANASONIC_AIRCON1_MODE_FAN || operatingMode == (PANASONIC_AIRCON1_MODE_FAN | PANASONIC_AIRCON1_MODE_KEEP )) - { - temperature = 27; - } - - sendBuffer[0] = fanSpeed | (temperature - 15); - - // Power toggle & operation mode - sendBuffer[1] = operatingMode; - - // Swings - sendBuffer[2] = swingV | swingH; - - // Always 0x36 - sendBuffer[3] = 0x36; - - // Send the code - sendPanasonicCKPraw(IR, sendBuffer); -} - -// Send the Panasonic CKP raw code -void PanasonicCKPHeatpumpIR::sendPanasonicCKPraw(IRSender& IR, uint8_t sendBuffer[]) -{ - // 40 kHz PWM frequency - IR.setFrequency(38); - - // Header, two first uint8_ts repeated - IR.mark(PANASONIC_AIRCON1_HDR_MARK); - IR.space(PANASONIC_AIRCON1_HDR_SPACE); - - for (int i=0; i<2; i++) { - IR.sendIRbyte(sendBuffer[0], PANASONIC_AIRCON1_BIT_MARK, PANASONIC_AIRCON1_ZERO_SPACE, PANASONIC_AIRCON1_ONE_SPACE); - IR.sendIRbyte(sendBuffer[0], PANASONIC_AIRCON1_BIT_MARK, PANASONIC_AIRCON1_ZERO_SPACE, PANASONIC_AIRCON1_ONE_SPACE); - IR.sendIRbyte(sendBuffer[1], PANASONIC_AIRCON1_BIT_MARK, PANASONIC_AIRCON1_ZERO_SPACE, PANASONIC_AIRCON1_ONE_SPACE); - IR.sendIRbyte(sendBuffer[1], PANASONIC_AIRCON1_BIT_MARK, PANASONIC_AIRCON1_ZERO_SPACE, PANASONIC_AIRCON1_ONE_SPACE); - - IR.mark(PANASONIC_AIRCON1_HDR_MARK); - IR.space(PANASONIC_AIRCON1_HDR_SPACE); - } - - // Pause - - IR.mark(PANASONIC_AIRCON1_BIT_MARK); - IR.space(PANASONIC_AIRCON1_MSG_SPACE); - - // Header, two last uint8_ts repeated - - IR.mark(PANASONIC_AIRCON1_HDR_MARK); - IR.space(PANASONIC_AIRCON1_HDR_SPACE); - - for (int i=0; i<2; i++) { - IR.sendIRbyte(sendBuffer[2], PANASONIC_AIRCON1_BIT_MARK, PANASONIC_AIRCON1_ZERO_SPACE, PANASONIC_AIRCON1_ONE_SPACE); - IR.sendIRbyte(sendBuffer[2], PANASONIC_AIRCON1_BIT_MARK, PANASONIC_AIRCON1_ZERO_SPACE, PANASONIC_AIRCON1_ONE_SPACE); - IR.sendIRbyte(sendBuffer[3], PANASONIC_AIRCON1_BIT_MARK, PANASONIC_AIRCON1_ZERO_SPACE, PANASONIC_AIRCON1_ONE_SPACE); - IR.sendIRbyte(sendBuffer[3], PANASONIC_AIRCON1_BIT_MARK, PANASONIC_AIRCON1_ZERO_SPACE, PANASONIC_AIRCON1_ONE_SPACE); - - IR.mark(PANASONIC_AIRCON1_HDR_MARK); - IR.space(PANASONIC_AIRCON1_HDR_SPACE); - } - - IR.mark(PANASONIC_AIRCON1_BIT_MARK); - IR.space(0); -} - -// Send the Panasonic CKP On/Off code -// -// CKP does not have discrete ON/OFF commands, but this can be emulated by using the timer -// The side-effects of using the timer are: -// * ONE minute delay before the power state changes -// * the 'TIMER' led (orange) is lit -// * a timer event is scheduled to cancel the timer after TWO minutes (the 'TIMER' led turns off -void PanasonicCKPHeatpumpIR::sendPanasonicCKPOnOffTimerCancel(IRSender& IR, boolean powerState, boolean cancelTimer) -{ - static const uint8_t ON_msg[] PROGMEM = { 0x7F, 0x38, 0xBF, 0x38, 0x10, 0x3D, 0x80, 0x3D, 0x09, 0x34, 0x80, 0x34 }; // ON at 00:10, time now 00:09, no OFF timing - static const uint8_t OFF_msg[] PROGMEM = { 0x10, 0x38, 0x80, 0x38, 0x7F, 0x3D, 0xBF, 0x3D, 0x09, 0x34, 0x80, 0x34 }; // OFF at 00:10, time now 00:09, no ON timing - static const uint8_t CANCEL_msg[] PROGMEM = { 0x7F, 0x38, 0xBF, 0x38, 0x7F, 0x3D, 0xBF, 0x3D, 0x17, 0x34, 0x80, 0x34 }; // Timer CANCEL - - // Save some SRAM by only having one copy of the template on the SRAM - uint8_t sendBuffer[sizeof(ON_msg)]; - - if ( cancelTimer == true ) { - memcpy_P(sendBuffer, CANCEL_msg, sizeof(ON_msg)); - } else if ( powerState == true ) { - memcpy_P(sendBuffer, ON_msg, sizeof(ON_msg)); - } else { - memcpy_P(sendBuffer, OFF_msg, sizeof(ON_msg)); - } - - // 40 kHz PWM frequency - IR.setFrequency(38); - - for (int i=0; i<6; i++) { - IR.mark(PANASONIC_AIRCON1_HDR_MARK); - IR.space(PANASONIC_AIRCON1_HDR_SPACE); - - IR.sendIRbyte(sendBuffer[i*2 + 0], PANASONIC_AIRCON1_BIT_MARK, PANASONIC_AIRCON1_ZERO_SPACE, PANASONIC_AIRCON1_ONE_SPACE); - IR.sendIRbyte(sendBuffer[i*2 + 0], PANASONIC_AIRCON1_BIT_MARK, PANASONIC_AIRCON1_ZERO_SPACE, PANASONIC_AIRCON1_ONE_SPACE); - IR.sendIRbyte(sendBuffer[i*2 + 1], PANASONIC_AIRCON1_BIT_MARK, PANASONIC_AIRCON1_ZERO_SPACE, PANASONIC_AIRCON1_ONE_SPACE); - IR.sendIRbyte(sendBuffer[i*2 + 1], PANASONIC_AIRCON1_BIT_MARK, PANASONIC_AIRCON1_ZERO_SPACE, PANASONIC_AIRCON1_ONE_SPACE); - - IR.mark(PANASONIC_AIRCON1_HDR_MARK); - IR.space(PANASONIC_AIRCON1_HDR_SPACE); - - if ( i < 5 ) { - IR.mark(PANASONIC_AIRCON1_BIT_MARK); - IR.space(PANASONIC_AIRCON1_MSG_SPACE); - } - } - - IR.mark(PANASONIC_AIRCON1_BIT_MARK); - IR.space(0); -} - -// Send the Panasonic CKP timer cancel -void PanasonicCKPHeatpumpIR::sendPanasonicCKPCancelTimer(IRSender& IR) -{ - Serial.println(F("Sending Panasonic CKP timer cancel")); - - sendPanasonicCKPOnOffTimerCancel(IR, false, true); -} - diff --git a/libraries/HeatpumpIR/PanasonicCKPHeatpumpIR.h b/libraries/HeatpumpIR/PanasonicCKPHeatpumpIR.h deleted file mode 100644 index ba15ae7..0000000 --- a/libraries/HeatpumpIR/PanasonicCKPHeatpumpIR.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - Panasonic CKP heatpump control (remote control P/N A75C2295) -*/ -#ifndef PanasonicCKPHeatpumpIR_h -#define PanasonicCKPHeatpumpIR_h - -#include - - -// Panasonic CKP timing constants (remote control P/N A75C2295) -#define PANASONIC_AIRCON1_HDR_MARK 3400 -#define PANASONIC_AIRCON1_HDR_SPACE 3500 -#define PANASONIC_AIRCON1_BIT_MARK 800 -#define PANASONIC_AIRCON1_ONE_SPACE 2700 -#define PANASONIC_AIRCON1_ZERO_SPACE 1000 -#define PANASONIC_AIRCON1_MSG_SPACE 14000 - -// Panasonic CKP codes -#define PANASONIC_AIRCON1_MODE_AUTO 0x06 // Operating mode -#define PANASONIC_AIRCON1_MODE_HEAT 0x04 -#define PANASONIC_AIRCON1_MODE_COOL 0x02 -#define PANASONIC_AIRCON1_MODE_DRY 0x03 -#define PANASONIC_AIRCON1_MODE_FAN 0x01 -#define PANASONIC_AIRCON1_MODE_ONOFF 0x00 // Toggle ON/OFF -#define PANASONIC_AIRCON1_MODE_KEEP 0x08 // Do not toggle ON/OFF -#define PANASONIC_AIRCON1_FAN_AUTO 0xF0 // Fan speed -#define PANASONIC_AIRCON1_FAN1 0x20 -#define PANASONIC_AIRCON1_FAN2 0x30 -#define PANASONIC_AIRCON1_FAN3 0x40 -#define PANASONIC_AIRCON1_FAN4 0x50 -#define PANASONIC_AIRCON1_FAN5 0x60 -#define PANASONIC_AIRCON1_VS_SWING 0xF0 // Vertical swing -#define PANASONIC_AIRCON1_VS_UP 0x90 -#define PANASONIC_AIRCON1_VS_MUP 0xA0 -#define PANASONIC_AIRCON1_VS_MIDDLE 0xB0 -#define PANASONIC_AIRCON1_VS_MDOWN 0xC0 -#define PANASONIC_AIRCON1_VS_DOWN 0xD0 -#define PANASONIC_AIRCON1_HS_SWING 0x08 // Horizontal swing -#define PANASONIC_AIRCON1_HS_MANUAL 0x00 - - -class PanasonicCKPHeatpumpIR : public HeatpumpIR -{ - public: - PanasonicCKPHeatpumpIR(); - void send(IRSender& IR, uint8_t powerModeCmd, uint8_t operatingModeCmd, uint8_t fanSpeedCmd, uint8_t temperatureCmd, uint8_t swingVCmd, uint8_t swingHCmd); - void sendPanasonicCKPCancelTimer(IRSender& IR); - - private: - void sendPanasonicCKP(IRSender& IR, uint8_t operatingMode, uint8_t fanSpeed, uint8_t temperature, uint8_t swingV, uint8_t swingH); - void sendPanasonicCKPraw(IRSender& IR, uint8_t sendBuffer[]); - void sendPanasonicCKPOnOffTimerCancel(IRSender& IR, boolean powerState, boolean cancelTimer); -}; - -#endif diff --git a/libraries/HeatpumpIR/PanasonicHeatpumpIR.cpp b/libraries/HeatpumpIR/PanasonicHeatpumpIR.cpp deleted file mode 100644 index ff4c292..0000000 --- a/libraries/HeatpumpIR/PanasonicHeatpumpIR.cpp +++ /dev/null @@ -1,237 +0,0 @@ -#include - -// This is a protected method, i.e. generic Panasonic instances cannot be created -PanasonicHeatpumpIR::PanasonicHeatpumpIR() : HeatpumpIR() -{ -} - - -// The different models just set the model accordingly -PanasonicDKEHeatpumpIR::PanasonicDKEHeatpumpIR() : PanasonicHeatpumpIR() -{ - static const char PROGMEM model[] PROGMEM = "panasonic_dke"; - static const char PROGMEM info[] PROGMEM = "{\"mdl\":\"panasonic_dke\",\"dn\":\"Panasonic DKE\",\"mT\":16,\"xT\":30,\"fs\":6}"; - - _model = model; - _info = info; - - _panasonicModel = PANASONIC_DKE; -} - -PanasonicJKEHeatpumpIR::PanasonicJKEHeatpumpIR() : PanasonicHeatpumpIR() -{ - static const char PROGMEM model[] PROGMEM = "panasonic_jke"; - static const char PROGMEM info[] PROGMEM = "{\"mdl\":\"panasonic_jke\",\"dn\":\"Panasonic JKE\",\"mT\":16,\"xT\":30,\"fs\":6}"; - - _model = model; - _info = info; - - _panasonicModel = PANASONIC_JKE; -} - -PanasonicNKEHeatpumpIR::PanasonicNKEHeatpumpIR() : PanasonicHeatpumpIR() -{ - static const char PROGMEM model[] PROGMEM = "panasonic_nke"; - static const char PROGMEM info[] PROGMEM = "{\"mdl\":\"panasonic_nke\",\"dn\":\"Panasonic NKE\",\"mT\":16,\"xT\":30,\"fs\":6,\"maint\":[8,10]}"; - - _model = model; - _info = info; - - _panasonicModel = PANASONIC_NKE; -} - - -// Panasonic DKE/NKE/JKE numeric values to command uint8_ts -void PanasonicHeatpumpIR::send(IRSender& IR, uint8_t powerModeCmd, uint8_t operatingModeCmd, uint8_t fanSpeedCmd, uint8_t temperatureCmd, uint8_t swingVCmd, uint8_t swingHCmd) -{ - // Sensible defaults for the heat pump mode - - uint8_t operatingMode = PANASONIC_AIRCON2_TIMER_CNL; - uint8_t fanSpeed = PANASONIC_AIRCON2_FAN_AUTO; - uint8_t temperature = 23; - uint8_t swingV = PANASONIC_AIRCON2_VS_UP; - uint8_t swingH = PANASONIC_AIRCON2_HS_AUTO; - - switch (powerModeCmd) - { - case POWER_ON: - operatingMode |= PANASONIC_AIRCON2_MODE_ON; - break; - } - - switch (operatingModeCmd) - { - case MODE_AUTO: - operatingMode |= PANASONIC_AIRCON2_MODE_AUTO; - break; - case MODE_HEAT: - operatingMode |= PANASONIC_AIRCON2_MODE_HEAT; - break; - case MODE_COOL: - operatingMode |= PANASONIC_AIRCON2_MODE_COOL; - break; - case MODE_DRY: - operatingMode |= PANASONIC_AIRCON2_MODE_DRY; - break; - case MODE_FAN: - operatingMode |= PANASONIC_AIRCON2_MODE_FAN; - temperatureCmd = 27; // Temperature is always 27 in FAN mode - break; - case MODE_MAINT: // Maintenance mode is just the heat mode at +8 or +10, FAN5 - operatingMode |= PANASONIC_AIRCON2_MODE_HEAT; - temperature = 10; // Default to +10 degrees - fanSpeedCmd = FAN_5; - break; - } - - switch (fanSpeedCmd) - { - case FAN_AUTO: - fanSpeed = PANASONIC_AIRCON2_FAN_AUTO; - break; - case FAN_1: - fanSpeed = PANASONIC_AIRCON2_FAN1; - break; - case FAN_2: - fanSpeed = PANASONIC_AIRCON2_FAN2; - break; - case FAN_3: - fanSpeed = PANASONIC_AIRCON2_FAN3; - break; - case FAN_4: - fanSpeed = PANASONIC_AIRCON2_FAN4; - break; - case FAN_5: - fanSpeed = PANASONIC_AIRCON2_FAN5; - break; - } - - if ( temperatureCmd > 15 && temperatureCmd < 31) - { - temperature = temperatureCmd; - } - - switch (swingVCmd) - { - case VDIR_AUTO: - case VDIR_SWING: - swingV = PANASONIC_AIRCON2_VS_AUTO; - break; - case VDIR_UP: - swingV = PANASONIC_AIRCON2_VS_UP; - break; - case VDIR_MUP: - swingV = PANASONIC_AIRCON2_VS_MUP; - break; - case VDIR_MIDDLE: - swingV = PANASONIC_AIRCON2_VS_MIDDLE; - break; - case VDIR_MDOWN: - swingV = PANASONIC_AIRCON2_VS_MDOWN; - break; - case VDIR_DOWN: - swingV = PANASONIC_AIRCON2_VS_DOWN; - break; - } - - switch (swingHCmd) - { - case HDIR_AUTO: - case HDIR_SWING: - swingH = PANASONIC_AIRCON2_HS_AUTO; - break; - case HDIR_MIDDLE: - swingH = PANASONIC_AIRCON2_HS_MIDDLE; - break; - case HDIR_LEFT: - swingH = PANASONIC_AIRCON2_HS_LEFT; - break; - case HDIR_MLEFT: - swingH = PANASONIC_AIRCON2_HS_MLEFT; - break; - case HDIR_RIGHT: - swingH = PANASONIC_AIRCON2_HS_RIGHT; - break; - case HDIR_MRIGHT: - swingH = PANASONIC_AIRCON2_HS_MRIGHT; - break; - } - - // NKE has +8 / + 10 maintenance heating, which also means MAX fanspeed - if ( _panasonicModel == PANASONIC_NKE ) - { - if ( temperatureCmd == 8 || temperatureCmd == 10 ) - { - temperature = temperatureCmd; - fanSpeed = PANASONIC_AIRCON2_FAN5; - } - } - - sendPanasonic(IR, operatingMode, fanSpeed, temperature, swingV, swingH); -} - -// Send the Panasonic DKE/JKE/NKE code -void PanasonicHeatpumpIR::sendPanasonic(IRSender& IR, uint8_t operatingMode, uint8_t fanSpeed, uint8_t temperature, uint8_t swingV, uint8_t swingH) -{ - // Only uint8_ts 13, 14, 16, 17 and 26 are modified, DKE and JKE seem to share the same template? - static const uint8_t panasonicProgmemTemplate[][27] PROGMEM = { - // DKE, model 0 - { 0x02, 0x20, 0xE0, 0x04, 0x00, 0x00, 0x00, 0x06, 0x02, 0x20, 0xE0, 0x04, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x0E, 0xE0, 0x00, 0x00, 0x01, 0x00, 0x06, 0x00 }, - // JKE, model 1 - { 0x02, 0x20, 0xE0, 0x04, 0x00, 0x00, 0x00, 0x06, 0x02, 0x20, 0xE0, 0x04, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x0E, 0xE0, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00 }, - // NKE, model 2 - { 0x02, 0x20, 0xE0, 0x04, 0x00, 0x00, 0x00, 0x06, 0x02, 0x20, 0xE0, 0x04, 0x00, 0x00, 0x00, 0x80, 0x00, 0x06, 0x00, 0x0E, 0xE0, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00 } - // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 - }; - - // Save some SRAM by only having one copy of the template on the SRAM - uint8_t panasonicTemplate[27]; - memcpy_P(panasonicTemplate, panasonicProgmemTemplate[_panasonicModel], sizeof(panasonicTemplate)); - - panasonicTemplate[13] = operatingMode; - panasonicTemplate[14] = temperature << 1; - panasonicTemplate[16] = fanSpeed | swingV; - - // Only the DKE model has a setting for the horizontal air flow - if ( _panasonicModel == PANASONIC_DKE) { - panasonicTemplate[17] = swingH; - } - - // Checksum calculation - - uint8_t checksum = 0xF4; - - for (int i=0; i<26; i++) { - checksum += panasonicTemplate[i]; - } - - panasonicTemplate[26] = checksum; - - // 40 kHz PWM frequency - IR.setFrequency(38); - - // Header - IR.mark(PANASONIC_AIRCON2_HDR_MARK); - IR.space(PANASONIC_AIRCON2_HDR_SPACE); - - // First 8 uint8_ts - for (int i=0; i<8; i++) { - IR.sendIRbyte(panasonicTemplate[i], PANASONIC_AIRCON2_BIT_MARK, PANASONIC_AIRCON2_ZERO_SPACE, PANASONIC_AIRCON2_ONE_SPACE); - } - - // Pause - IR.mark(PANASONIC_AIRCON2_BIT_MARK); - IR.space(PANASONIC_AIRCON2_MSG_SPACE); - - // Header - IR.mark(PANASONIC_AIRCON2_HDR_MARK); - IR.space(PANASONIC_AIRCON2_HDR_SPACE); - - // Last 19 uint8_ts - for (int i=8; i<27; i++) { - IR.sendIRbyte(panasonicTemplate[i], PANASONIC_AIRCON2_BIT_MARK, PANASONIC_AIRCON2_ZERO_SPACE, PANASONIC_AIRCON2_ONE_SPACE); - } - - IR.mark(PANASONIC_AIRCON2_BIT_MARK); - IR.space(0); -} \ No newline at end of file diff --git a/libraries/HeatpumpIR/PanasonicHeatpumpIR.h b/libraries/HeatpumpIR/PanasonicHeatpumpIR.h deleted file mode 100644 index 202cdf5..0000000 --- a/libraries/HeatpumpIR/PanasonicHeatpumpIR.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - Panasonic DKE/JKE/NKE heatpump control (DKE remote control P/N A75C2616 etc) -*/ -#ifndef PanasonicHeatpumpIR_h -#define PanasonicHeatpumpIR_h - -#include - - -// Panasonic DKE, JKE & NKE timing constants (DKE remote control P/N A75C2616) -#define PANASONIC_AIRCON2_HDR_MARK 3500 -#define PANASONIC_AIRCON2_HDR_SPACE 1800 -#define PANASONIC_AIRCON2_BIT_MARK 420 -#define PANASONIC_AIRCON2_ONE_SPACE 1350 -#define PANASONIC_AIRCON2_ZERO_SPACE 470 -#define PANASONIC_AIRCON2_MSG_SPACE 10000 - -// Panasonic DKE, JNE & NKE codes -#define PANASONIC_AIRCON2_MODE_AUTO 0x00 // Operating mode -#define PANASONIC_AIRCON2_MODE_HEAT 0x40 -#define PANASONIC_AIRCON2_MODE_COOL 0x30 -#define PANASONIC_AIRCON2_MODE_DRY 0x20 -#define PANASONIC_AIRCON2_MODE_FAN 0x60 -#define PANASONIC_AIRCON2_MODE_OFF 0x00 // Power OFF -#define PANASONIC_AIRCON2_MODE_ON 0x01 -#define PANASONIC_AIRCON2_TIMER_CNL 0x08 -#define PANASONIC_AIRCON2_FAN_AUTO 0xA0 // Fan speed -#define PANASONIC_AIRCON2_FAN1 0x30 -#define PANASONIC_AIRCON2_FAN2 0x40 -#define PANASONIC_AIRCON2_FAN3 0x50 -#define PANASONIC_AIRCON2_FAN4 0x60 -#define PANASONIC_AIRCON2_FAN5 0x70 -#define PANASONIC_AIRCON2_VS_AUTO 0x0F // Vertical swing -#define PANASONIC_AIRCON2_VS_UP 0x01 -#define PANASONIC_AIRCON2_VS_MUP 0x02 -#define PANASONIC_AIRCON2_VS_MIDDLE 0x03 -#define PANASONIC_AIRCON2_VS_MDOWN 0x04 -#define PANASONIC_AIRCON2_VS_DOWN 0x05 -#define PANASONIC_AIRCON2_HS_AUTO 0x0D // Horizontal swing -#define PANASONIC_AIRCON2_HS_MIDDLE 0x06 -#define PANASONIC_AIRCON2_HS_LEFT 0x09 -#define PANASONIC_AIRCON2_HS_MLEFT 0x0A -#define PANASONIC_AIRCON2_HS_MRIGHT 0x0B -#define PANASONIC_AIRCON2_HS_RIGHT 0x0C - -// Panasonic model codes -#define PANASONIC_DKE 0 -#define PANASONIC_JKE 1 -#define PANASONIC_NKE 2 - - -class PanasonicHeatpumpIR : public HeatpumpIR -{ - protected: // Cannot create generic Panasonic heatpump instances - PanasonicHeatpumpIR(); - uint8_t _panasonicModel; // Tells whether this is DKE, NKE or JKE (or other supported model...) - - public: - void send(IRSender& IR, uint8_t powerModeCmd, uint8_t operatingModeCmd, uint8_t fanSpeedCmd, uint8_t temperatureCmd, uint8_t swingVCmd, uint8_t swingHCmd); - - private: - void sendPanasonic(IRSender& IR, uint8_t operatingMode, uint8_t fanSpeed, uint8_t temperature, uint8_t swingV, uint8_t swingH); -}; - -class PanasonicDKEHeatpumpIR : public PanasonicHeatpumpIR -{ - public: - PanasonicDKEHeatpumpIR(); -}; - -class PanasonicJKEHeatpumpIR : public PanasonicHeatpumpIR -{ - public: - PanasonicJKEHeatpumpIR(); -}; - -class PanasonicNKEHeatpumpIR : public PanasonicHeatpumpIR -{ - public: - PanasonicNKEHeatpumpIR(); -}; - -#endif \ No newline at end of file diff --git a/libraries/HeatpumpIR/README.md b/libraries/HeatpumpIR/README.md deleted file mode 100644 index cd14f13..0000000 --- a/libraries/HeatpumpIR/README.md +++ /dev/null @@ -1,24 +0,0 @@ -# arduino-heatpumpir - -Original location: https://github.com/ToniA/arduino-heatpumpir - -An Arduino library to control a Panasonic, Midea, Carrier, Fujitsu or Mitsubishi heat pump/split unit air conditioner. -Currently supports at least these models -* Panasonic E9/E12-CKP (Panasonic remote control P/N A75C2295) -* Panasonic E9/E12-DKE (Panasonic remote control P/N A75C2616) -* Panasonic E9/E12-JKE and E9/E12-NKE -* Midea MSR1-12HRN1-QC2 + MOA1-12HN1-QC2, sold as Ultimate Pro Plus Basic 13FP in Finland (Midea remote control P/N RG51M1/E) -* Carrier 42NQV035G / 38NYV035H2 (Carrier remote control P/N WH-L05SE) -* Fujitsu Nocria AWYZ14 (remote control P/N AR-PZ2) -* Mitsubishi MSZ FD-25, probably also FD-35 (remote control P/N KM09D 0052376) -* Hisense AUD (remote control Y-H1-01, Y-H1-02(E), Y-J1, Y-E4-07) probably AUC model -* Sharp AY-ZP40KR (remote control P/N CRMC-A788JBEZ), possibly also IVT -* Daikin RXS25G2V1B /FVXS25FV1B (Remote control P/N ARC452A1) - - -## Instructions - -* Download the library, and place it under your personal Arduino 'libraries' directory, under directory 'HeatpumpIR' -* See the example sketches - -![Schema](https://raw.github.com/ToniA/arduino-heatpumpir/master/arduino_irsender.png) diff --git a/libraries/HeatpumpIR/SamsungHeatpumpIR.cpp b/libraries/HeatpumpIR/SamsungHeatpumpIR.cpp deleted file mode 100644 index 859dc7e..0000000 --- a/libraries/HeatpumpIR/SamsungHeatpumpIR.cpp +++ /dev/null @@ -1,175 +0,0 @@ -#include - -SamsungHeatpumpIR::SamsungHeatpumpIR() : HeatpumpIR() -{ - static const char PROGMEM model[] PROGMEM = "samsung"; - static const char PROGMEM info[] PROGMEM = "{\"mdl\":\"samsung\",\"dn\":\"Samsung\",\"mT\":16,\"xT\":27,\"fs\":4}"; - - _model = model; - _info = info; -} - - -void SamsungHeatpumpIR::send(IRSender& IR, uint8_t powerModeCmd, uint8_t operatingModeCmd, uint8_t fanSpeedCmd, uint8_t temperatureCmd, uint8_t swingVCmd, uint8_t swingHCmd) -{ - (void)swingVCmd; - (void)swingHCmd; - - // Sensible defaults for the heat pump mode - - uint8_t powerMode = SAMSUNG_AIRCON1_MODE_ON; - uint8_t operatingMode = SAMSUNG_AIRCON1_MODE_HEAT; - uint8_t fanSpeed = SAMSUNG_AIRCON1_FAN_AUTO; - uint8_t temperature = 23; - uint8_t swingV = SAMSUNG_AIRCON1_VS_AUTO; - - if (powerModeCmd == POWER_OFF) - { - powerMode = SAMSUNG_AIRCON1_MODE_OFF; - } - else - { - switch (operatingModeCmd) - { - case MODE_AUTO: - operatingMode = SAMSUNG_AIRCON1_MODE_AUTO; - fanSpeedCmd = FAN_AUTO; // Fan speed is always 'AUTO' in AUTO mode - break; - case MODE_HEAT: - operatingMode = SAMSUNG_AIRCON1_MODE_HEAT; - break; - case MODE_COOL: - operatingMode = SAMSUNG_AIRCON1_MODE_COOL; - break; - case MODE_DRY: - operatingMode = SAMSUNG_AIRCON1_MODE_DRY; - fanSpeedCmd = FAN_AUTO; // Fan speed is always 'AUTO' in DRY mode - break; - case MODE_FAN: - operatingMode = SAMSUNG_AIRCON1_MODE_FAN; - if ( fanSpeedCmd == FAN_AUTO ) { - fanSpeedCmd = FAN_1; // Fan speed cannot be 'AUTO' in FAN mode - } - break; - } - } - - switch (fanSpeedCmd) - { - case FAN_AUTO: - fanSpeed = SAMSUNG_AIRCON1_FAN_AUTO; - break; - case FAN_1: - fanSpeed = SAMSUNG_AIRCON1_FAN1; - break; - case FAN_2: - fanSpeed = SAMSUNG_AIRCON1_FAN2; - break; - case FAN_3: - fanSpeed = SAMSUNG_AIRCON1_FAN3; - break; - } - - if ( temperatureCmd > 15 && temperatureCmd < 28) - { - temperature = temperatureCmd; - } - - switch (swingVCmd) - { - case VDIR_SWING: - swingV = SAMSUNG_AIRCON1_VS_SWING; - break; - } - - sendSamsung(IR, powerMode, operatingMode, fanSpeed, temperature, swingV); -} - -// Send the Samsung code - -void SamsungHeatpumpIR::sendSamsung(IRSender& IR, uint8_t powerMode, uint8_t operatingMode, uint8_t fanSpeed, uint8_t temperature, uint8_t swingV) -{ - uint8_t SamsungTemplate[] = { 0x02, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, // Header part - 0x01, 0xD2, 0x0F, 0x00, 0x00, 0x00, 0x00, // Always the same data on POWER messages - 0x01, 0x00, 0xFE, 0x71, 0x00, 0x00, 0x00 }; // The actual data is in this part, on uint8_ts 14-20 - - uint8_t SamsungChecksum = 0; - - // Set the power mode on the template message, also add the first part checksum - SamsungTemplate[6] = powerMode; - if ( powerMode == SAMSUNG_AIRCON1_MODE_ON ) { - SamsungTemplate[1] = 0x92; - } else { - SamsungTemplate[1] = 0xB2; - } - - SamsungTemplate[20] = powerMode; - - // Set the fan speed and the operating mode on the template message - SamsungTemplate[19] = operatingMode | fanSpeed; - - // Set the temperature on the template message - SamsungTemplate[18] = (temperature - 16) << 4; - - // Set the vertical swing mode on the template message - SamsungTemplate[16] = swingV; - - // Calculate the byte 15 checksum - // Count the number of ONE bits on message uint8_ts 15-20 - for (uint8_t j=15; j<21; j++) { - uint8_t Samsungbyte = SamsungTemplate[j]; - for (uint8_t i=0; i<8; i++) { - if ( (Samsungbyte & 0x01) == 0x01 ) { - SamsungChecksum++; - } - Samsungbyte >>= 1; - } - } - - // Transform the number of ONE bits to the actual checksum - SamsungChecksum = 32 - SamsungChecksum; - SamsungChecksum <<= 4; - SamsungChecksum += 0x02; - - SamsungTemplate[15] = SamsungChecksum; - - // 38 kHz PWM frequency - IR.setFrequency(38); - - // Header - IR.mark(SAMSUNG_AIRCON1_HDR_MARK); - IR.space(SAMSUNG_AIRCON1_HDR_SPACE); - - // Payload header part - for (int i=0; i<7; i++) { - IR.sendIRbyte(SamsungTemplate[i], SAMSUNG_AIRCON1_BIT_MARK, SAMSUNG_AIRCON1_ZERO_SPACE, SAMSUNG_AIRCON1_ONE_SPACE); - } - - // Pause + new header - IR.mark(SAMSUNG_AIRCON1_BIT_MARK); - IR.space(SAMSUNG_AIRCON1_MSG_SPACE); - - IR.mark(SAMSUNG_AIRCON1_HDR_MARK); - IR.space(SAMSUNG_AIRCON1_HDR_SPACE); - - // Payload power message part - for (int i=7; i<14; i++) { - IR.sendIRbyte(SamsungTemplate[i], SAMSUNG_AIRCON1_BIT_MARK, SAMSUNG_AIRCON1_ZERO_SPACE, SAMSUNG_AIRCON1_ONE_SPACE); - } - - // Pause + new header - IR.mark(SAMSUNG_AIRCON1_BIT_MARK); - IR.space(SAMSUNG_AIRCON1_MSG_SPACE); - - IR.mark(SAMSUNG_AIRCON1_HDR_MARK); - IR.space(SAMSUNG_AIRCON1_HDR_SPACE); - - // Payload data message part - for (int i=14; i<21; i++) { - IR.sendIRbyte(SamsungTemplate[i], SAMSUNG_AIRCON1_BIT_MARK, SAMSUNG_AIRCON1_ZERO_SPACE, SAMSUNG_AIRCON1_ONE_SPACE); - } - - // End mark - IR.mark(SAMSUNG_AIRCON1_BIT_MARK); - IR.space(0); -} \ No newline at end of file diff --git a/libraries/HeatpumpIR/SamsungHeatpumpIR.h b/libraries/HeatpumpIR/SamsungHeatpumpIR.h deleted file mode 100644 index c33e661..0000000 --- a/libraries/HeatpumpIR/SamsungHeatpumpIR.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - Samsung AQV12PSBN / AQV09ASA heatpump control (remote control P/N zzz) -*/ -#ifndef SamsungHeatpumpIR_h -#define SamsungHeatpumpIR_h - -#include - -// Samsung timing constants -#define SAMSUNG_AIRCON1_HDR_MARK 3000 -#define SAMSUNG_AIRCON1_HDR_SPACE 9000 -#define SAMSUNG_AIRCON1_BIT_MARK 500 -#define SAMSUNG_AIRCON1_ONE_SPACE 1500 -#define SAMSUNG_AIRCON1_ZERO_SPACE 500 -#define SAMSUNG_AIRCON1_MSG_SPACE 2000 - -// Samsung codes -#define SAMSUNG_AIRCON1_MODE_AUTO 0x00 // Operating mode -#define SAMSUNG_AIRCON1_MODE_HEAT 0x40 -#define SAMSUNG_AIRCON1_MODE_COOL 0x10 -#define SAMSUNG_AIRCON1_MODE_DRY 0x20 -#define SAMSUNG_AIRCON1_MODE_FAN 0x30 -#define SAMSUNG_AIRCON1_MODE_OFF 0xC0 // Power OFF -#define SAMSUNG_AIRCON1_MODE_ON 0xF0 // Power ON -#define SAMSUNG_AIRCON1_FAN_AUTO 0x01 // Fan speed -#define SAMSUNG_AIRCON1_FAN1 0x05 // * low -#define SAMSUNG_AIRCON1_FAN2 0x09 // * med -#define SAMSUNG_AIRCON1_FAN3 0x0B // * high -#define SAMSUNG_AIRCON1_VS_SWING 0xAE // Vertical swing -#define SAMSUNG_AIRCON1_VS_AUTO 0xFE - -class SamsungHeatpumpIR : public HeatpumpIR -{ - public: - SamsungHeatpumpIR(); - void send(IRSender& IR, uint8_t powerModeCmd, uint8_t operatingModeCmd, uint8_t fanSpeedCmd, uint8_t temperatureCmd, uint8_t swingVCmd, uint8_t swingHCmd); - - private: - void sendSamsung(IRSender& IR, uint8_t powerMode, uint8_t operatingMode, uint8_t fanSpeed, uint8_t temperature, uint8_t swingV); -}; - -#endif diff --git a/libraries/HeatpumpIR/SharpHeatpumpIR.cpp b/libraries/HeatpumpIR/SharpHeatpumpIR.cpp deleted file mode 100644 index 2ff656a..0000000 --- a/libraries/HeatpumpIR/SharpHeatpumpIR.cpp +++ /dev/null @@ -1,125 +0,0 @@ -#include - - -SharpHeatpumpIR::SharpHeatpumpIR() : HeatpumpIR() -{ - static const char PROGMEM model[] PROGMEM = "sharp"; - static const char PROGMEM info[] PROGMEM = "{\"mdl\":\"sharp\",\"dn\":\"Sharp AY-ZP40KR\",\"mT\":18,\"xT\":32,\"fs\":3,\"maint\":[10]}}"; - - _model = model; - _info = info; -} - - -void SharpHeatpumpIR::send(IRSender& IR, uint8_t powerModeCmd, uint8_t operatingModeCmd, uint8_t fanSpeedCmd, uint8_t temperatureCmd, uint8_t swingVCmd, uint8_t swingHCmd) -{ - (void)swingVCmd; - (void)swingHCmd; - - // Sensible defaults for the heat pump mode - - uint8_t powerMode = SHARP_AIRCON1_MODE_ON; - uint8_t operatingMode = SHARP_AIRCON1_MODE_HEAT; - uint8_t fanSpeed = SHARP_AIRCON1_FAN_AUTO; - uint8_t temperature = 23; - - if (powerModeCmd == 0) - { - powerMode = SHARP_AIRCON1_MODE_OFF; - } - - switch (operatingModeCmd) - { - case MODE_HEAT: - operatingMode = SHARP_AIRCON1_MODE_HEAT; - break; - case MODE_COOL: - operatingMode = SHARP_AIRCON1_MODE_COOL; - break; - case MODE_DRY: - operatingMode = SHARP_AIRCON1_MODE_DRY; - temperatureCmd = 10; - break; - case MODE_FAN: - operatingMode = SHARP_AIRCON1_MODE_COOL; - // Temperature needs to be set to 32 degrees for 'simulated' FAN mode - temperatureCmd = 32; - break; - case MODE_MAINT: // Maintenance mode is just the heat mode at +8 or +10, FAN5 - operatingMode |= SHARP_AIRCON1_MODE_HEAT; - temperature = 10; - fanSpeedCmd = FAN_5; - break; - } - - switch (fanSpeedCmd) - { - case FAN_AUTO: - fanSpeed = SHARP_AIRCON1_FAN_AUTO; - break; - case FAN_1: - fanSpeed = SHARP_AIRCON1_FAN1; - break; - case FAN_2: - fanSpeed = SHARP_AIRCON1_FAN2; - break; - case FAN_3: - fanSpeed = SHARP_AIRCON1_FAN3; - break; - } - - if ( temperatureCmd > 16 && temperatureCmd < 32) - { - temperature = temperatureCmd; - } - - sendSharp(IR, powerMode, operatingMode, fanSpeed, temperature); -} - -void SharpHeatpumpIR::sendSharp(IRSender& IR, uint8_t powerMode, uint8_t operatingMode, uint8_t fanSpeed, uint8_t temperature) -{ - uint8_t SharpTemplate[] = { 0xAA, 0x5A, 0xCF, 0x10, 0x00, 0x00, 0x00, 0x06, 0x08, 0x80, 0x04, 0xF0, 0x01 }; - // 0 1 2 3 4 5 6 7 8 9 10 11 12 - - uint8_t checksum = 0x00; - - // Set the power mode on the template message - SharpTemplate[5] = powerMode; - - // Set the fan speed & operating mode on the template message - SharpTemplate[6] = fanSpeed | operatingMode; - - // Set the temperature on the template message - if (temperature == 10) { - SharpTemplate[4] = 0x00; // Maintenance mode temperature - } else { - SharpTemplate[4] = (temperature - 17); - } - - // Calculate the checksum - for (int i=0; i<12; i++) { - checksum ^= SharpTemplate[i]; - } - - checksum ^= SharpTemplate[12] & 0x0F; - checksum ^= (checksum >> 4); - checksum &= 0x0F; - - SharpTemplate[12] |= (checksum << 4); - - // 38 kHz PWM frequency - IR.setFrequency(38); - - // Header - IR.mark(SHARP_AIRCON1_HDR_MARK); - IR.space(SHARP_AIRCON1_HDR_SPACE); - - // Data - for (unsigned int i=0; i - - -// Sharp timing constants -#define SHARP_AIRCON1_HDR_MARK 3540 // 3820 -#define SHARP_AIRCON1_HDR_SPACE 1720 // 1680 -#define SHARP_AIRCON1_BIT_MARK 460 // 420 -#define SHARP_AIRCON1_ONE_SPACE 1400 // 1250 -#define SHARP_AIRCON1_ZERO_SPACE 430 // 330 - -// Sharp codes -#define SHARP_AIRCON1_MODE_HEAT 0x01 -#define SHARP_AIRCON1_MODE_COOL 0x02 -#define SHARP_AIRCON1_MODE_DRY 0x03 -#define SHARP_AIRCON1_MODE_OFF 0x21 // Power OFF -#define SHARP_AIRCON1_MODE_ON 0x31 // Power ON -#define SHARP_AIRCON1_FAN_AUTO 0x20 // Fan speed -#define SHARP_AIRCON1_FAN1 0x30 -#define SHARP_AIRCON1_FAN2 0x50 -#define SHARP_AIRCON1_FAN3 0x70 - - -class SharpHeatpumpIR : public HeatpumpIR -{ - public: - SharpHeatpumpIR(); - void send(IRSender& IR, uint8_t powerModeCmd, uint8_t operatingModeCmd, uint8_t fanSpeedCmd, uint8_t temperatureCmd, uint8_t swingVCmd, uint8_t swingHCmd); - - private: - void sendSharp(IRSender& IR, uint8_t powerMode, uint8_t operatingMode, uint8_t fanSpeed, uint8_t temperature); -}; - -#endif diff --git a/libraries/HeatpumpIR/arduino_irsender.png b/libraries/HeatpumpIR/arduino_irsender.png deleted file mode 100644 index 7c9e1fb..0000000 Binary files a/libraries/HeatpumpIR/arduino_irsender.png and /dev/null differ diff --git a/libraries/HeatpumpIR/examples/HisenseTest/HisenseTest.ino b/libraries/HeatpumpIR/examples/HisenseTest/HisenseTest.ino deleted file mode 100644 index 3215480..0000000 --- a/libraries/HeatpumpIR/examples/HisenseTest/HisenseTest.ino +++ /dev/null @@ -1,48 +0,0 @@ -#include -#include - -IRSender irSender(3); // IR led on Duemilanove digital pin 3 - -HisenseHeatpumpIR *heatpumpIR; - -void setup() -{ - Serial.begin(9600); - delay(500); - heatpumpIR = new HisenseHeatpumpIR(); - Serial.println(F("Starting")); -} - -void loop() -{ - const char* buf; - - Serial.print(F("Sending IR to ")); - // Print the model - buf = heatpumpIR->model(); - // 'model' is a PROGMEM pointer, so need to write a byte at a time - while (char modelChar = pgm_read_byte(buf++)) - { - Serial.print(modelChar); - } - Serial.print(F(", info: ")); - // Print the info - buf = heatpumpIR->info(); - // 'info' is a PROGMEM pointer, so need to write a byte at a time - while (char infoChar = pgm_read_byte(buf++)) - { - Serial.print(infoChar); - } - Serial.println(); - - heatpumpIR->send(irSender, POWER_ON, MODE_HEAT, FAN_3, 30, VDIR_AUTO, HDIR_AUTO); - delay(1500); - heatpumpIR->send(irSender, POWER_ON, MODE_DRY, FAN_2, 20, VDIR_AUTO, HDIR_AUTO); - delay(1500); - heatpumpIR->send(irSender, POWER_ON, MODE_FAN, FAN_AUTO, 18, VDIR_AUTO, HDIR_AUTO); - delay(1500); - heatpumpIR->send(irSender, POWER_ON, MODE_COOL, FAN_1, 18, VDIR_AUTO, HDIR_AUTO); - delay(2500); - heatpumpIR->send(irSender, POWER_OFF, MODE_COOL, FAN_1, 18, VDIR_AUTO, HDIR_AUTO); - delay(1500); -} \ No newline at end of file diff --git a/libraries/HeatpumpIR/examples/MideaRelayControl/MideaRelayControl.ino b/libraries/HeatpumpIR/examples/MideaRelayControl/MideaRelayControl.ino deleted file mode 100644 index 80a5bdb..0000000 --- a/libraries/HeatpumpIR/examples/MideaRelayControl/MideaRelayControl.ino +++ /dev/null @@ -1,93 +0,0 @@ -#include -#include // https://github.com/ToniA/arduino-heatpumpir -#include // http://playground.arduino.cc/Code/Button - -/* - -This is a project I did for my my friend's summer cottage. He has an alarm system -with some extra relays which can be controlled via GSM SMS messages. With two relays -we can have four heatpump states: -* relay 1 OFF and relay 2 in any state: heatpump OFF -* relay 1 ON and relay 2 OFF: heatpump ON, normal heating state -* relay 1 ON and relay 2 ON: heatpump ON, maintenance heating (FP mode on Midea's remote) - -The heatpump is 'Ultimate 12 Pro Plus Inverter', sold by ultimatemarket.com: -Midea MSR1U-12HRDN1-QRC4W + MOB-12HFN1-QRC4W, with remote control RG51I20/BGE - -This same sketch would also control the older 'Ultimate Pro Plus 13FP': -Midea MSR1-12HRN1-QC2 + MOA1-12HN1-QC2 heatpump control, with remote control RG51M1/E - -... and very likely many other Midea heatpumps... - - -The Midea 'FP', or 'maintenance mode', is not really a mode even if the HeatpumpIR library -interface makes it look like a mode. Instead it's a switch between the 'normal' and 'FP' -mode, so to be absolutely sure about the operating mode, we need to turn the heatpump OFF -first, and then turn it on (goes into 'normal' mode), and finally switch into 'FP'. - -The IR led is driven by a transistor amplifier. I used 2 ohms as the resistor. I might sound -very small, but also the led operates on very short bursts. For example Panasonic uses 2 ohm -resistor for the IR led on its remotes. -*/ - -// Heatpump states -const byte heatpumpOff = 0; -const byte heatpumpNormal = 1; -const byte heatpumpMaintenance = 2; - -Button relay1 = Button(11, INPUT_PULLUP); // Heatpump ON-OFF state -Button relay2 = Button(12, INPUT_PULLUP); // FP mode (maintenance heating at 8 degrees C) ON-OFF state - -IRSender irSender(9); // IR led on Duemilanove digital pin 9 - -byte heatpumpState = heatpumpOff; - -HeatpumpIR *heatpumpIR = new MideaHeatpumpIR(); - -void setup(){ - Serial.begin(9600); - delay(500); - Serial.println(F("Starting...")); -} - -void loop(){ - - if (relay1.isPressed()) { - // Normal heating operation - if (!relay2.isPressed() && heatpumpState != heatpumpNormal) { - Serial.println(F("Normal heating operation")); - - Serial.println(F("* Sending power OFF")); - heatpumpIR->send(irSender, POWER_OFF, MODE_HEAT, FAN_2, 22, VDIR_UP, HDIR_AUTO); - delay(15 * 1000); // 15 seconds, to allow full shutdown - - Serial.println(F("* Sending normal heat command")); - heatpumpIR->send(irSender, POWER_ON, MODE_HEAT, FAN_2, 22, VDIR_UP, HDIR_AUTO); - heatpumpState = heatpumpNormal; - - // Maintenance heating operation - } else if (relay2.isPressed() && heatpumpState != heatpumpMaintenance) { - Serial.println(F("Maintenance heating operation")); - - Serial.println(F("* Sending power OFF")); - heatpumpIR->send(irSender, POWER_OFF, MODE_HEAT, FAN_2, 22, VDIR_UP, HDIR_AUTO); - delay(15 * 1000); // 15 seconds, to allow full shutdown - - Serial.println(F("* Sending normal heat command")); - heatpumpIR->send(irSender, POWER_ON, MODE_HEAT, FAN_2, 22, VDIR_UP, HDIR_AUTO); - delay(5 * 1000); // 15 seconds, to allow full start before switching to maintenance - - Serial.println(F("* Switching to maintenance heating")); - heatpumpIR->send(irSender, POWER_ON, MODE_MAINT, FAN_3, 10, VDIR_UP, HDIR_AUTO); - - heatpumpState = heatpumpMaintenance; - } - // Power OFF - } else if (!relay1.isPressed() && heatpumpState != heatpumpOff) { - heatpumpState = heatpumpOff; - Serial.println(F("Sending power OFF")); - heatpumpIR->send(irSender, POWER_OFF, MODE_HEAT, FAN_2, 22, VDIR_UP, HDIR_AUTO); - } - - delay(500); // 0.5 seconds delay -} diff --git a/libraries/HeatpumpIR/examples/MySensorsNode/MySensorsNode.ino b/libraries/HeatpumpIR/examples/MySensorsNode/MySensorsNode.ino deleted file mode 100644 index a5b303b..0000000 --- a/libraries/HeatpumpIR/examples/MySensorsNode/MySensorsNode.ino +++ /dev/null @@ -1,205 +0,0 @@ -#include - -// HeatpumpIR libraries -#include -#include -#include -#include -#include -#include -#include - -// Timer library, https://github.com/ToniA/Timer -#include - -// MySensors libraries -#include -#include - -// This MySensors node has three childs, with ID's 1, 2 & 3 -#define CHILD_1 1 -#define CHILD_2 2 -#define CHILD_3 3 - -// MySensors definitions -MySensor gw; -MyMessage irMsg(CHILD_1, V_IR_RECEIVE); -// Domoticz does not yet properly support the S_IR sensor type -MyMessage textMsg(CHILD_2, V_TEXT); -MyMessage sendMsg(CHILD_3, V_LIGHT); - -// Array with all supported heatpump models -HeatpumpIR *heatpumpIR[] = { new PanasonicCKPHeatpumpIR(), // 0, keep this if you don't remove the timer for cancelling Panasonic CKP messages - new PanasonicDKEHeatpumpIR(), // 1 - new PanasonicJKEHeatpumpIR(), // 2 - new PanasonicNKEHeatpumpIR(), // 3 - new CarrierHeatpumpIR(), // 4 - new MideaHeatpumpIR(), // 5 - new FujitsuHeatpumpIR(), // 6 - new MitsubishiFDHeatpumpIR(), // 7 - new MitsubishiFEHeatpumpIR(), // 8 - new SamsungHeatpumpIR() // 9 - }; - -// IR led on PWM output-capable digital pin 3 -IRSender irSender(3); - -// Timer for sending Panasonic CKP series timer cancellation commands -Timer timer; -int8_t panasonicCKPTimer = 0; - -// Number of supported models -byte models = 0; - -void setup() -{ - Serial.begin(115200); - delay(1000); - Serial.println(F("HeatpumpIR sensor starting up...")); - - models = sizeof(heatpumpIR) / sizeof(HeatpumpIR*); - Serial.print(F("Number of supported models: ")); Serial.println(models); - - // Auto-assign the node ID, do not forward messages - gw.begin(incomingMessage, AUTO, false); - - // Send the sketch version information to the gateway and Controller - gw.sendSketchInfo("Heatpump Sensor", "1.0"); - - // Register a sensors to the MySensors Gateway - gw.present(CHILD_1, S_IR, "IR sender"); - - // For Domoticz - gw.present(CHILD_2, S_INFO, "IR data"); - gw.present(CHILD_3, S_LIGHT, "IR send"); - // The TEXT sensor is not created in Domoticz before data is sent - gw.send(textMsg.setSensor(CHILD_2).set("00000000")); -} - - -void loop() -{ - gw.process(); - timer.update(); -} - - -// Handle incoming messages from the MySensors Gateway -void incomingMessage(const MyMessage &message) { - - const char *irData; - - // V_IR type message - if (message.type==V_IR_SEND) { - Serial.println(F("Received IR send command...")); - irData = message.getString(); - Serial.print(F("Code: 0x")); - Serial.println(irData); - sendHeatpumpIRCommand(irData); - } - // Domoticz - else if (message.type==V_LIGHT) { - // When the button is pressed on Domoticz, request the value of the TEXT sensor - Serial.println(F("Requesting IR code from Domoticz...")); - gw.request(CHILD_2, V_TEXT, 0); - } else if (message.type==V_TEXT) { - // TEXT sensor value is received as a result of the previous step - Serial.println(F("IR code received from Domoticz...")); - Serial.print(F("Code: 0x")); - - irData = message.getString(); - Serial.println(irData); - - sendHeatpumpIRCommand(irData); - - // Set the Domoticz switch back to 'OFF' state - gw.send(sendMsg.setSensor(CHILD_3).set(0)); - } -} - - -// Decode the IR command and send the IR command to the heatpump -void sendHeatpumpIRCommand(const char *irCommandString) { - - // irCommandString is an 8-digit hex digit - long irCommand = 0; - int sscanfStatus = sscanf(irCommandString, "%lx", &irCommand); - - if (sscanfStatus == 1) { - Serial.print(F("IR code conversion OK: 0x")); - Serial.println(irCommand, HEX); - } else { - Serial.println(F("Failed to convert IR hex code to number")); - } - -/* -The heatpump command is packed into a 32-bit hex number, see -libraries\HeatpumpIR\HeatpumpIR.h for the constants - -12345678 - 3 MODEL - 4 POWER - 5 OPERATING MODE - 6 FAN SPEED - 78 TEMPERATURE IN HEX - -00213416 (as an example of a valid code) - 2 = PanasonicJKE - 1 = Power ON - 3 = COOL - 4 = FAN 4 - 16 = Temperature 22 degrees (0x16 = 22) - */ - - byte model = (irCommand & 0x00F00000) >> 20; - byte power = (irCommand & 0x00010000) >> 16; - byte mode = (irCommand & 0x0000F000) >> 12; - byte fan = (irCommand & 0x00000F00) >> 8; - byte temp = (irCommand & 0x000000FF); - - const char* buf; - Serial.print(F("Model: ")); - - buf = heatpumpIR[model]->model(); - // 'model' is a PROGMEM pointer, so need to write a byte at a time - while (char modelChar = pgm_read_byte(buf++)) - { - Serial.print(modelChar); - } - Serial.println(); - - Serial.print(F("Model #: ")); Serial.println(model); - Serial.print(F("Power: ")); Serial.println(power); - Serial.print(F("Mode: ")); Serial.println(mode); - Serial.print(F("Fan: ")); Serial.println(fan); - Serial.print(F("Temp: ")); Serial.println(temp); - - // Heatpump models start from 0, i.e. model number is always less than the number of different models - if (model < models) { - // This is a supported model - - // Cancel the timer on Panasonic CKP heatpump - if (model == 0) { - Serial.println(F("Cancelling timer on Panasonic CKP heatpump...")); - timer.stop(panasonicCKPTimer); - } - - Serial.println(F("All OK - sending IR command to heatpump...")); - heatpumpIR[model]->send(irSender, power, mode, fan, temp, VDIR_UP, HDIR_AUTO); - - if (model == 0) { - Serial.println(F("Scheduling timer cancellation on Panasonic CKP heatpump...")); - panasonicCKPTimer = timer.after(120000, panasonicCancelTimer); // Called after 2 minutes - } - } -} - - -// Cancel the timer on the Panasonic CKP heatpump -void panasonicCancelTimer() -{ - PanasonicCKPHeatpumpIR *panasonicCKPHeatpumpIR = new PanasonicCKPHeatpumpIR(); - - panasonicCKPHeatpumpIR->sendPanasonicCKPCancelTimer(irSender); - Serial.println(F("The TIMER led should now be OFF")); -} diff --git a/libraries/HeatpumpIR/examples/MySensorsNode/README.md b/libraries/HeatpumpIR/examples/MySensorsNode/README.md deleted file mode 100644 index 2f53ec8..0000000 --- a/libraries/HeatpumpIR/examples/MySensorsNode/README.md +++ /dev/null @@ -1,73 +0,0 @@ -# MySensors example - -This example shows how HeatpumpIR could be integrated with the MySensors sensor network. As this sensor sends infrared signals, -the natural sensor type is 'S_IR'. The heatpump/air conditioner signals are really long, so the signals need to be encoded somehow. - -In this example the idea is to encode just this information, using 24 bits of data -* model code (see the index of the array heatpumpIR in the code) -* power state (for the rest, see the HeatpumpIR.h file for the constants) -* operating mode -* fan speed -* temperature (the temperature is directly the temperature in HEX) - -``` -An example: -00213416 (as an example of a valid code) - 2 = PanasonicJKE - 1 = Power ON - 3 = COOL - 4 = FAN 4 - 16 = Temperature 22 degrees (0x16 = 22) -``` - -This sketch creates three sensors: -* S_IR -* S_INFO -* S_LIGHT - -The S_INFO and S_LIGHT sensors are for Domoticz, as it does not currently (as of V2.3093) support infrared code sending through the S_IR sensor type. - -## Sending the code -### MYSController - -* Select the IR sensor on the 'Heatpump Sensor 1.0' node -* Select 'IR_SEND' as the subtype -* Enter for example '00213416' as the payload - -### Domoticz - -As Domoticz does not really support sending IR code yet, the workaround is to use two sensors. When the node is connected, Domoticz should find two new devices -* A 'Lighting 2 / AC' type sensor with name 'IR send' -* A 'General / Text' type sensor with name 'Unknown' and Data '00000000' - -To send a command, first add the sensors. Then update the data of the text sensor to contain the IR code to be sent, and then flip the switch to trigger the sending. -The data can be updated through the JSON REST API, or through the Lua event scripts. - -REST API example (assuming that the idx of the text sensor is 105 and the switch is 104, and Domoticz is at 192.168.0.4:8080): -``` -http://192.168.0.4:8080/json.htm?type=command¶m=udevice&idx=105&nvalue=0&svalue=00213416 -http://192.168.0.4:8080/json.htm?type=command¶m=switchlight&idx=104&switchcmd=On -``` - -Lua example: -* Seems that the text sensor can't be updated through the commandArray... -* So now when a device called 'trigger' changes, the text sensor value is first updated to '00213416', and then the IR signal is sent - -``` -commandArray = {} - -for key, value in pairs(devicechanged) do - if (key == 'trigger') then - - print("Heatpump script") - commandArray['OpenURL']='http://192.168.0.4:8080/json.htm?type=command¶m=udevice&idx=105&nvalue=0&svalue=00213416' - commandArray['IR send']='On' - end -end - -return commandArray -``` - -## Hardware - -Use any ATMega328-based Arduino, connect the radio, and finally connect an infrared led (in series with a resistor, like 100 Ohm) between digital pin 3 and GND. \ No newline at end of file diff --git a/libraries/HeatpumpIR/examples/PanasonicCKPTimer/PanasonicCKPTimer.ino b/libraries/HeatpumpIR/examples/PanasonicCKPTimer/PanasonicCKPTimer.ino deleted file mode 100644 index dcacf44..0000000 --- a/libraries/HeatpumpIR/examples/PanasonicCKPTimer/PanasonicCKPTimer.ino +++ /dev/null @@ -1,58 +0,0 @@ -#include - -#include -#include // https://github.com/JChristensen/Timer - -/* - This schema demonstrates how to control the Panasonic CKP power state change. The CKP does not have discrete - 'ON' and 'OFF' commands, but only a state switch. So, if the initial power state is now known, switching the - state does not help much. - - Luckily this can be implemented by using the timer: - * The 'send' command will send all the settings AND program the timer so that the pump will turn ON in a minute - * The 'sendPanasonicCKPCancelTimer' will cancel the timer - - The 'turn OFF' must be implemented the same way. - - Of course you can choose to not turn off the timer, but that means that the heatpump will attempt to switch ON - (or OFF) every day at the same time, as the timer will still be active. -*/ - - -IRSender irSender(3); // IR led on Duemilanove digital pin 3 - -PanasonicCKPHeatpumpIR *heatpumpIR; - -Timer timer; - -void setup() -{ - Serial.begin(9600); - delay(500); - - heatpumpIR = new PanasonicCKPHeatpumpIR(); - - Serial.println("Turning the Panasonic CKP heatpump ON by using the timer"); - heatpumpIR->send(irSender, POWER_ON, MODE_HEAT, FAN_2, 24, VDIR_UP, HDIR_AUTO); - Serial.println("The heatpump should have beeped, and the TIMER led should be ON"); - - timer.after(60000, panasonicIsOn); // Called after 1 minute - timer.after(120000, panasonicCancelTimer); // Called after 2 minutes - -} - -void loop() -{ - timer.update(); -} - -void panasonicIsOn() -{ - Serial.println("The heatpump should should turn ON by now, the TIMER led is still ON"); -} - -void panasonicCancelTimer() -{ - heatpumpIR->sendPanasonicCKPCancelTimer(irSender); - Serial.println("The TIMER led should now be OFF"); -} \ No newline at end of file diff --git a/libraries/HeatpumpIR/examples/simple/simple.ino b/libraries/HeatpumpIR/examples/simple/simple.ino deleted file mode 100644 index aff127d..0000000 --- a/libraries/HeatpumpIR/examples/simple/simple.ino +++ /dev/null @@ -1,62 +0,0 @@ -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -IRSender irSender(3); // IR led on Duemilanove digital pin 3 - -// Array with all supported heatpumps -HeatpumpIR *heatpumpIR[] = {new PanasonicCKPHeatpumpIR(), new PanasonicDKEHeatpumpIR(), new PanasonicJKEHeatpumpIR(), - new PanasonicNKEHeatpumpIR(), new CarrierHeatpumpIR(), new MideaHeatpumpIR(), - new FujitsuHeatpumpIR(), new MitsubishiFDHeatpumpIR(), new MitsubishiFEHeatpumpIR(), - new SamsungHeatpumpIR(), new SharpHeatpumpIR(), new DaikinHeatpumpIR(), NULL}; - -void setup() -{ - Serial.begin(9600); - delay(500); - - Serial.println(F("Starting")); -} - -void loop() -{ - int i = 0; - const char* buf; - - do { - // Send the same IR command to all supported heatpumps - Serial.print(F("Sending IR to ")); - - buf = heatpumpIR[i]->model(); - // 'model' is a PROGMEM pointer, so need to write a byte at a time - while (char modelChar = pgm_read_byte(buf++)) - { - Serial.print(modelChar); - } - Serial.print(F(", info: ")); - - buf = heatpumpIR[i]->info(); - // 'info' is a PROGMEM pointer, so need to write a byte at a time - while (char infoChar = pgm_read_byte(buf++)) - { - Serial.print(infoChar); - } - Serial.println(); - - // Send the IR command - heatpumpIR[i]->send(irSender, POWER_ON, MODE_HEAT, FAN_2, 24, VDIR_UP, HDIR_AUTO); - delay(500); - } - while (heatpumpIR[++i] != NULL); - - delay(2000); -} \ No newline at end of file diff --git a/libraries/HeatpumpIR/keywords.txt b/libraries/HeatpumpIR/keywords.txt deleted file mode 100644 index a53afec..0000000 --- a/libraries/HeatpumpIR/keywords.txt +++ /dev/null @@ -1,28 +0,0 @@ -HeatpumpIR KEYWORD1 -PanasonicHeatpumpIR KEYWORD1 -PanasonicCKPHeatpumpIR KEYWORD1 -PanasonicDKEHeatpumpIR KEYWORD1 -PanasonicJKEHeatpumpIR KEYWORD1 -PanasonicNKEHeatpumpIR KEYWORD1 -CarrierHeatpumpIR KEYWORD1 -MideaHeatpumpIR KEYWORD1 -FujitsuHeatpumpIR KEYWORD1 -MitsubishiHeatpumpIR KEYWORD1 -MitsubishiFDHeatpumpIR KEYWORD1 -MitsubishiFEHeatpumpIR KEYWORD1 -SamsungHeatpumpIR KEYWORD1 -SharpHeatpumpIR KEYWORD1 -DaikinHeatpumpIR KEYWORD1 - -IRSender KEYWORD1 - -setFrequency KEYWORD2 -sendIRByte KEYWORD2 -bitReverse KEYWORD2 -space KEYWORD2 -mark KEYWORD2 - -send KEYWORD2 -model KEYWORD2 -info KEYWORD2 -sendPanasonicCKPCancelTimer KEYWORD2 diff --git a/libraries/IRLib/.gitattributes b/libraries/IRLib/.gitattributes deleted file mode 100644 index 412eeda..0000000 --- a/libraries/IRLib/.gitattributes +++ /dev/null @@ -1,22 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto - -# Custom for Visual Studio -*.cs diff=csharp -*.sln merge=union -*.csproj merge=union -*.vbproj merge=union -*.fsproj merge=union -*.dbproj merge=union - -# Standard to msysgit -*.doc diff=astextplain -*.DOC diff=astextplain -*.docx diff=astextplain -*.DOCX diff=astextplain -*.dot diff=astextplain -*.DOT diff=astextplain -*.pdf diff=astextplain -*.PDF diff=astextplain -*.rtf diff=astextplain -*.RTF diff=astextplain diff --git a/libraries/IRLib/.gitignore b/libraries/IRLib/.gitignore deleted file mode 100644 index b9d6bd9..0000000 --- a/libraries/IRLib/.gitignore +++ /dev/null @@ -1,215 +0,0 @@ -################# -## Eclipse -################# - -*.pydevproject -.project -.metadata -bin/ -tmp/ -*.tmp -*.bak -*.swp -*~.nib -local.properties -.classpath -.settings/ -.loadpath - -# External tool builders -.externalToolBuilders/ - -# Locally stored "Eclipse launch configurations" -*.launch - -# CDT-specific -.cproject - -# PDT-specific -.buildpath - - -################# -## Visual Studio -################# - -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. - -# User-specific files -*.suo -*.user -*.sln.docstates - -# Build results - -[Dd]ebug/ -[Rr]elease/ -x64/ -build/ -[Bb]in/ -[Oo]bj/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -*_i.c -*_p.c -*.ilk -*.meta -*.obj -*.pch -*.pdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*.log -*.vspscc -*.vssscc -.builds -*.pidb -*.log -*.scc - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opensdf -*.sdf -*.cachefile - -# Visual Studio profiler -*.psess -*.vsp -*.vspx - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# NCrunch -*.ncrunch* -.*crunch*.local.xml - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.Publish.xml -*.pubxml - -# NuGet Packages Directory -## TODO: If you have NuGet Package Restore enabled, uncomment the next line -#packages/ - -# Windows Azure Build Output -csx -*.build.csdef - -# Windows Store app package directory -AppPackages/ - -# Others -sql/ -*.Cache -ClientBin/ -[Ss]tyle[Cc]op.* -~$* -*~ -*.dbmdl -*.[Pp]ublish.xml -*.pfx -*.publishsettings - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file to a newer -# Visual Studio version. Backup files are not needed, because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm - -# SQL Server files -App_Data/*.mdf -App_Data/*.ldf - -############# -## Windows detritus -############# - -# Windows image file caches -Thumbs.db -ehthumbs.db - -# Folder config file -Desktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Mac crap -.DS_Store - - -############# -## Python -############# - -*.py[co] - -# Packages -*.egg -*.egg-info -dist/ -build/ -eggs/ -parts/ -var/ -sdist/ -develop-eggs/ -.installed.cfg - -# Installer logs -pip-log.txt - -# Unit test / coverage reports -.coverage -.tox - -#Translations -*.mo - -#Mr Developer -.mr.developer.cfg diff --git a/libraries/IRLib/CHANGELOG.txt b/libraries/IRLib/CHANGELOG.txt deleted file mode 100644 index 1aa1013..0000000 --- a/libraries/IRLib/CHANGELOG.txt +++ /dev/null @@ -1,50 +0,0 @@ -Change Log for IRLib – an Arduino library for infrared encoding and decoding -Copyright 2013-2014 by Chris Young http://tech.cyborg5.com/irlib/ - -Version 1.4 – March 2014 - Added IRLIB_ prefix to debug macros to avoid name collisions - Debug macros now report more information - Added example new protocol Phillips RCMM used by AT&T U-Verse boxes and Nokia satellite boxes - Added ABS_MATCH macro which allows you to match using absolute number of microseconds versus the old way which used a percentage. Necessary for implementing RCMM protocol. - Added IRLIB_USE_PERCENT definition which when commented out changes the default from percentage match to absolute match. Also added DEFAULT_ABS_TOLERANCE. More details on these changes will be provided in the documentation when the section on adding new protocols is completed. -Version 1.31 – March 2014 - Commented out debug code that was accidentally left active in 1.3 release -Version 1.3 – January 2014 -NEW FILES - Added new file IRLibRData.h and moved irparams structure and related items to that file. Allows users to create custom IRrecv classes -NEW EXAMPLES - Rewrote Samsung36 example to include both send and receive - Added new examples for new protocols DirecTV and GIcable - Added new example IRanalyze gives more detailed analysis of timing. Useful in analyzing the protocols - Added new example IRfreq reports modulation frequency of a signal. Requires TSMP58000 IR learner chip - Cleanup of other example routines. -NEW CLASSES - Created IRrecvBase class to allow custom receiver classes. IRrecv is now a derived class from it. - Created IRrecvLoop class which receives IR signals without using any hardware interrupts or timers. Also created IRrecvPCI class which uses Pin Change Interrupts to receive IR signals. These new receivers are more accurate than the 50µs timing of the original IRrecv. However they also have other limitations described in comments. -New functions, variables and methods - In IRrecvBase added "unsigned char Mark_Excess" with default value 100. Was a define macro but now is user settable. - In IRrecvBase added method "unsigned char getPinNum(void);" which retrieves the pin number used from irparams.recvpin. This value not normally accessible to end user. - Globally available function "void do_Blink(void);" blinks pin 13 LED. For use by user created extensions of IRrecvBase. -INTERNAL CHANGES - Data collected by IRrecvBase classes in irparams.rawbuf is now converted to actual microseconds rather than clock ticks of 50 µs each. IRrecvBase::GetResults has a new parameter "Time_per_Ticks" that is used to convert ticks into actual microseconds if needed. - Adjustments to mark and space to deal with overreporting and underreporting of intervals is now done once in IRrecvBase::GetResults eliminating the need for MATCH_MARK(d,v) and MATCH_SPACE(d,v). Just use MATCH(d,v) everywhere. - Modified IRLibsendBase::mark() and IRLibsendBase::space() to overcome limitations of "delayMicroseconds()". - Changed many int to char or unsigned char to save memory - Eliminated DEBUG macro in IRLib.h and its use elsewhere. Macro TRACE is more useful. - Changed IRTYPES to unsigned char and a list of #defines rather than an enum (even though I still really like enums, changing it saves memory) -MEMORY EFFICIENCY - Code changes result in memory savings of approximately 54 bytes in code space and 39 bytes of RAM. --------------------------------- -Version 1.2 – July 2013 - Internal version. No public release --------------------------------- -Version 1.1 – April 2013 - Constructor of IRsendBase now initializes output pin and forces it low immediately. - New IRrecv::No_Output() method initializes output pin and forces it low. Use this in sketches which receive only by the have output hardware connected. - Added examples IRservo and IRserial_remote --------------------------------- -Version 1.0a – February 2013 - Removed debugging test switch which was accidentally left on in file "IRLib.h" --------------------------------- -Version 1.0 – January 2013 - Initial Release \ No newline at end of file diff --git a/libraries/IRLib/IRLib.cpp b/libraries/IRLib/IRLib.cpp deleted file mode 100644 index a8748bd..0000000 --- a/libraries/IRLib/IRLib.cpp +++ /dev/null @@ -1,1055 +0,0 @@ -/* IRLib.cpp from IRLib - an Arduino library for infrared encoding and decoding - * Version 1.4 March 2014 - * Copyright 2014 by Chris Young http://cyborg5.com - * - * This library is a major rewrite of IRemote by Ken Shirriff which was covered by - * GNU LESSER GENERAL PUBLIC LICENSE which as I read it allows me to make modified versions. - * That same license applies to this modified version. See his original copyright below. - * The latest Ken Shirriff code can be found at https://github.com/shirriff/Arduino-IRremote - * My purpose was to reorganize the code to make it easier to add or remove protocols. - * As a result I have separated the act of receiving a set of raw timing codes from the act of decoding them - * by making them separate classes. That way the receiving aspect can be more black box and implementers - * of decoders and senders can just deal with the decoding of protocols. It also allows for alternative - * types of receivers independent of the decoding. This makes porting to different hardware platforms easier. - * Also added provisions to make the classes base classes that could be extended with new protocols - * which would not require recompiling of the original library nor understanding of its detailed contents. - * Some of the changes were made to reduce code size such as unnecessary use of long versus bool. - * Some changes were just my weird programming style. Also extended debugging information added. - */ -/* - * IRremote - * Version 0.1 July, 2009 - * Copyright 2009 Ken Shirriff - * For details, see http://www.righto.com/2009/08/multi-protocol-infrared-remote-library.html http://www.righto.com/ - * - * Interrupt code based on NECIRrcv by Joe Knapp - * http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1210243556 - * Also influenced by http://zovirl.com/2008/11/12/building-a-universal-remote-with-an-arduino/ - */ - -#include "IRLib.h" -#include "IRLibMatch.h" -#include "IRLibRData.h" -#include - -volatile irparams_t irparams; -/* - * Returns a pointer to a flash stored string that is the name of the protocol received. - */ -const __FlashStringHelper *Pnames(IRTYPES Type) { - if(Type>LAST_PROTOCOL) Type=UNKNOWN; - // You can add additional strings before the entry for hash code. - const __FlashStringHelper *Names[LAST_PROTOCOL+1]={F("Unknown"),F("NEC"),F("Sony"),F("RC5"),F("RC6"),F("Panasonic Old"),F("JVC"),F("NECx"),F("Hash Code")}; - return Names[Type]; -}; - - -#define TOPBIT 0x80000000 - -/* - * The IRsend classes contain a series of methods for sending various protocols. - * Each of these begin by calling enableIROut(unsigned char kHz) to set the carrier frequency. - * It then calls mark(int usec) and space(inc usec) to transmit marks and - * spaces of varying length of microseconds however the protocol defines. - * Because we want to separate the hardware specific portions of the code from the general programming - * portions of the code, the code for IRsendBase::IRsendBase, IRsendBase::enableIROut, - * IRsendBase::mark and IRsendBase::space can be found in the lower section of this file. - */ - -/* - * Most of the protocols have a header consisting of a mark/space of a particular length followed by - * a series of variable length mark/space signals. Depending on the protocol they very the lengths of the - * mark or the space to indicate a data bit of "0" or "1". Most also end with a stop bit of "1". - * The basic structure of the sending and decoding these protocols led to lots of redundant code. - * Therefore I have implemented generic sending and decoding routines. You just need to pass a bunch of customized - * parameters and it does the work. This reduces compiled code size with only minor speed degradation. - * You may be able to implement additional protocols by simply passing the proper values to these generic routines. - * The decoding routines do not encode stop bits. So you have to tell this routine whether or not to send one. - */ -void IRsendBase::sendGeneric(unsigned long data, unsigned char Num_Bits, unsigned int Head_Mark, unsigned int Head_Space, - unsigned int Mark_One, unsigned int Mark_Zero, unsigned int Space_One, unsigned int Space_Zero, - unsigned char kHz, bool Use_Stop, unsigned long Max_Extent) { - Extent=0; - data = data << (32 - Num_Bits); - enableIROut(kHz); -//Some protocols do not send a header when sending repeat codes. So we pass a zero value to indicate skipping this. - if(Head_Mark) mark(Head_Mark); - if(Head_Space) space(Head_Space); - for (int i = 0; i rawbuf,sizeof(irparams.rawbuf)); - rawlen=source->rawlen; -}; - -/* - * This routine is actually quite useful. Allows extended classes to call their parent - * if they fail to decode themselves. - */ -bool IRdecodeBase::decode(void) { - return false; -}; - -void IRdecodeBase::Reset(void) { - decode_type= UNKNOWN; - value=0; - bits=0; - rawlen=0; -}; - -/* - * This method dumps useful information about the decoded values. - */ -void IRdecodeBase::DumpResults(void) { - int i;unsigned long Extent;int interval; - if(decode_type<=LAST_PROTOCOL){ - Serial.print(F("Decoded ")); Serial.print(Pnames(decode_type)); - Serial.print(F(": Value:")); Serial.print(value, HEX); - }; - Serial.print(F(" (")); Serial.print(bits, DEC); Serial.println(F(" bits)")); - Serial.print(F("Raw samples(")); Serial.print(rawlen, DEC); - Serial.print(F("): Gap:")); Serial.println(rawbuf[0], DEC); - Serial.print(F(" Head: m")); Serial.print(rawbuf[1], DEC); - Serial.print(F(" s")); Serial.println(rawbuf[2], DEC); - int LowSpace= 32767; int LowMark= 32767; - int HiSpace=0; int HiMark= 0; - Extent=rawbuf[1]+rawbuf[2]; - for (i = 3; i < rawlen; i++) { - Extent+=(interval= rawbuf[i]); - if (i % 2) { - LowMark=min(LowMark, interval); HiMark=max(HiMark, interval); - Serial.print(i/2-1,DEC); Serial.print(F(":m")); - } - else { - if(interval>0)LowSpace=min(LowSpace, interval); HiSpace=max (HiSpace, interval); - Serial.print(F(" s")); - } - Serial.print(interval, DEC); - int j=i-1; - if ((j % 2)==1)Serial.print(F("\t")); - if ((j % 4)==1)Serial.print(F("\t ")); - if ((j % 8)==1)Serial.println(); - if ((j % 32)==1)Serial.println(); - } - Serial.println(); - Serial.print(F("Extent=")); Serial.println(Extent,DEC); - Serial.print(F("Mark min:")); Serial.print(LowMark,DEC);Serial.print(F("\t max:")); Serial.println(HiMark,DEC); - Serial.print(F("Space min:")); Serial.print(LowSpace,DEC);Serial.print(F("\t max:")); Serial.println(HiSpace,DEC); - Serial.println(); -} - -/* - * Again we use a generic routine because most protocols have the same basic structure. However we need to - * indicate whether or not the protocol varies the length of the mark or the space to indicate a "0" or "1". - * If "Mark_One" is zero. We assume that the length of the space varies. If "Mark_One" is not zero then - * we assume that the length of Mark varies and the value passed as "Space_Zero" is ignored. - * When using variable length Mark, assumes Head_Space==Space_One. If it doesn't, you need a specialized decoder. - */ -bool IRdecodeBase::decodeGeneric(unsigned char Raw_Count, unsigned int Head_Mark, unsigned int Head_Space, - unsigned int Mark_One, unsigned int Mark_Zero, unsigned int Space_One, unsigned int Space_Zero) { -// If raw samples count or head mark are zero then don't perform these tests. -// Some protocols need to do custom header work. - unsigned long data = 0; unsigned char Max; offset=1; - if (Raw_Count) {if (rawlen != Raw_Count) return RAW_COUNT_ERROR;} - if (Head_Mark) {if (!MATCH(rawbuf[offset],Head_Mark)) return HEADER_MARK_ERROR(Head_Mark);} - offset++; - if (Head_Space) {if (!MATCH(rawbuf[offset],Head_Space)) return HEADER_SPACE_ERROR(Head_Space);} - - if (Mark_One) {//Length of a mark indicates data "0" or "1". Space_Zero is ignored. - offset=2;//skip initial gap plus header Mark. - Max=rawlen; - while (offset < Max) { - if (!MATCH(rawbuf[offset], Space_One)) return DATA_SPACE_ERROR(Space_One); - offset++; - if (MATCH(rawbuf[offset], Mark_One)) { - data = (data << 1) | 1; - } - else if (MATCH(rawbuf[offset], Mark_Zero)) { - data <<= 1; - } - else return DATA_MARK_ERROR(Mark_Zero); - offset++; - } - bits = (offset - 1) / 2; - } - else {//Mark_One was 0 therefore length of a space indicates data "0" or "1". - Max=rawlen-1; //ignore stop bit - offset=3;//skip initial gap plus two header items - while (offset < Max) { - if (!MATCH (rawbuf[offset],Mark_Zero)) return DATA_MARK_ERROR(Mark_Zero); - offset++; - if (MATCH(rawbuf[offset],Space_One)) { - data = (data << 1) | 1; - } - else if (MATCH (rawbuf[offset],Space_Zero)) { - data <<= 1; - } - else return DATA_SPACE_ERROR(Space_Zero); - offset++; - } - bits = (offset - 1) / 2 -1;//didn't encode stop bit - } - // Success - value = data; - return true; -} - -/* - * This routine has been modified significantly from the original IRremote. - * It assumes you've already called IRrecvBase::GetResults and it was true. - * The purpose of GetResults is to determine if a complete set of signals - * has been received. It then copies the raw data into your decoder's rawbuf - * By moving the test for completion and the copying of the buffer - * outside of this "decode" method you can use the individual decode - * methods or make your own custom "decode" without checking for - * protocols you don't use. - * Note: Don't forget to call IRrecvBase::resume(); after decoding is complete. - */ -bool IRdecode::decode(void) { - if (IRdecodeNEC::decode()) return true; - if (IRdecodeSony::decode()) return true; - if (IRdecodeRC5::decode()) return true; - if (IRdecodeRC6::decode()) return true; - if (IRdecodePanasonic_Old::decode()) return true; - if (IRdecodeNECx::decode()) return true; - if (IRdecodeJVC::decode()) return true; -//if (IRdecodeADDITIONAL::decode()) return true;//add additional protocols here -//Deliberately did not add hash code decoding. If you get decode_type==UNKNOWN and -// you want to know a hash code you can call IRhash::decode() yourself. -// BTW This is another reason we separated IRrecv from IRdecode. - return false; -} - -#define NEC_RPT_SPACE 2250 -bool IRdecodeNEC::decode(void) { - IRLIB_ATTEMPT_MESSAGE(F("NEC")); - // Check for repeat - if (rawlen == 4 && MATCH(rawbuf[2], NEC_RPT_SPACE) && - MATCH(rawbuf[3],564)) { - bits = 0; - value = REPEAT; - decode_type = NEC; - return true; - } - if(!decodeGeneric(68, 564*16, 564*8, 0, 564, 564*3, 564)) return false; - decode_type = NEC; - return true; -} - -// According to http://www.hifi-remote.com/johnsfine/DecodeIR.html#Sony8 -// Sony protocol can only be 8, 12, 15, or 20 bits in length. -bool IRdecodeSony::decode(void) { - IRLIB_ATTEMPT_MESSAGE(F("Sony")); - if(rawlen!=2*8+2 && rawlen!=2*12+2 && rawlen!=2*15+2 && rawlen!=2*20+2) return RAW_COUNT_ERROR; - if(!decodeGeneric(0, 600*4, 600, 600*2, 600, 600,0)) return false; - decode_type = SONY; - return true; -} - -/* - * The next several decoders were added by Chris Young. They illustrate some of the special cases - * that can come up when decoding using the generic decoder. - */ - -/* - * A very good source for protocol information is... http://www.hifi-remote.com/johnsfine/DecodeIR.html - * I used that information to understand what they call the "Panasonic old" protocol which is used by - * Scientific Atlanta cable boxes. That website uses a very strange notation called IRP notation. - * For this protocol, the notation was: - * {57.6k,833}<1,-1|1,-3>(4,-4,D:5,F:6,~D:5,~F:6,1,-???)+ - * This indicates that the frequency is 57.6, the base length for the pulse is 833 - * The first part of the section tells you what a "0" is and the second part - * tells you what a "1" is. That means "0" is 833 on, 833 off while an "1" is 833 on - * followed by 833*3=2499 off. The section in parentheses tells you what data gets sent. - * The protocol begins with header consisting of 4*833 on and 4*833 off. The other items - * describe what the remaining data bits are. - * It reads as 5 device bits followed by 6 function bits. You then repeat those bits complemented. - * It concludes with a single "1" bit followed by and an undetermined amount of blank space. - * This makes the entire protocol 5+6+5+6= 22 bits long since we don't encode the stop bit. - * The "+" at the end means you only need to send it once and it can repeat as many times as you want. - */ -bool IRdecodePanasonic_Old::decode(void) { - IRLIB_ATTEMPT_MESSAGE(F("Panasonic_Old")); - if(!decodeGeneric(48,833*4,833*4,0,833,833*3,833)) return false; - /* - * The protocol spec says that the first 11 bits described the device and function. - * The next 11 bits are the same thing only it is the logical Bitwise complement. - * Many protocols have such check features in their definition but our code typically doesn't - * perform these checks. For example NEC's least significant 8 bits are the complement of - * of the next more significant 8 bits. While it's probably not necessary to error check this, - * here is some sample code to show you how. - */ - long S1= (value & 0x0007ff); // 00 0000 0000 0111 1111 1111 //00000 000000 11111 111111 - long S2= (value & 0x3ff800)>> 11; // 11 1111 1111 1000 0000 0000 //11111 111111 00000 000000 - S2= (~S2) & 0x0007ff; - if (S1!=S2) return IRLIB_REJECTION_MESSAGE(F("inverted bit redundancy")); - // Success - decode_type = PANASONIC_OLD; - return true; -} - -bool IRdecodeNECx::decode(void) { - IRLIB_ATTEMPT_MESSAGE(F("NECx")); - if(!decodeGeneric(68,564*8,564*8,0,564,564*3,564)) return false; - decode_type = NECX; - return true; -} - -// JVC does not send any header if there is a repeat. -bool IRdecodeJVC::decode(void) { - IRLIB_ATTEMPT_MESSAGE(F("JVC")); - if(!decodeGeneric(36,525*16,525*8,0,525,525*3,525)) - { - IRLIB_ATTEMPT_MESSAGE(F("JVC Repeat")); - if (rawlen==34) - { - if(!decodeGeneric(0,525,0,0,525,525*3,525)) - {return IRLIB_REJECTION_MESSAGE(F("JVC repeat failed generic"));} - else { - //If this is a repeat code then IRdecodeBase::decode fails to add the most significant bit - if (MATCH(rawbuf[4],(525*3))) - { - value |= 0x8000; - } - else - { - if (!MATCH(rawbuf[4],525)) return DATA_SPACE_ERROR(525); - } - } - bits++; - } - else return RAW_COUNT_ERROR; - } - decode_type =JVC; - return true; -} - -/* - * The remaining protocols from the original IRremote library require special handling - * This routine gets one undecoded level at a time from the raw buffer. - * The RC5/6 decoding is easier if the data is broken into time intervals. - * E.g. if the buffer has MARK for 2 time intervals and SPACE for 1, - * successive calls to getRClevel will return MARK, MARK, SPACE. - * offset and used are updated to keep track of the current position. - * t1 is the time interval for a single bit in microseconds. - * Returns ERROR if the measured time interval is not a multiple of t1. - */ -IRdecodeRC::RCLevel IRdecodeRC::getRClevel(unsigned char *used, const unsigned int t1) { - if (offset >= rawlen) { - // After end of recorded buffer, assume SPACE. - return SPACE; - } - unsigned int width = rawbuf[offset]; - IRdecodeRC::RCLevel val; - if ((offset) % 2) val=MARK; else val=SPACE; - - unsigned char avail; - if (MATCH(width, t1)) { - avail = 1; - } - else if (MATCH(width, 2*t1)) { - avail = 2; - } - else if (MATCH(width, 3*t1)) { - avail = 3; - } - else { - return ERROR; - } - (*used)++; - if (*used >= avail) { - *used = 0; - (offset)++; - } - return val; -} - -#define MIN_RC5_SAMPLES 11 -#define MIN_RC6_SAMPLES 1 - -bool IRdecodeRC5::decode(void) { - IRLIB_ATTEMPT_MESSAGE(F("RC5")); - if (rawlen < MIN_RC5_SAMPLES + 2) return RAW_COUNT_ERROR; - offset = 1; // Skip gap space - data = 0; - used = 0; - // Get start bits - if (getRClevel(&used, RC5_T1) != MARK) return HEADER_MARK_ERROR(RC5_T1); -//Note: Original IRremote library incorrectly assumed second bit was always a "1" -//bit patterns from this decoder are not backward compatible with patterns produced -//by original library. Uncomment the following two lines to maintain backward compatibility. - //if (getRClevel(&used, RC5_T1) != SPACE) return HEADER_SPACE_ERROR(RC5_T1); - //if (getRClevel(&used, RC5_T1) != MARK) return HEADER_MARK_ERROR(RC5_T1); - for (nbits = 0; offset < rawlen; nbits++) { - RCLevel levelA = getRClevel(&used, RC5_T1); - RCLevel levelB = getRClevel(&used, RC5_T1); - if (levelA == SPACE && levelB == MARK) { - // 1 bit - data = (data << 1) | 1; - } - else if (levelA == MARK && levelB == SPACE) { - // zero bit - data <<= 1; - } - else return DATA_MARK_ERROR(RC5_T1); - } - // Success - bits = 13; - value = data; - decode_type = RC5; - return true; -} - -bool IRdecodeRC6::decode(void) { - IRLIB_ATTEMPT_MESSAGE(F("RC6")); - if (rawlen < MIN_RC6_SAMPLES) return RAW_COUNT_ERROR; - // Initial mark - if (!MATCH(rawbuf[1], RC6_HDR_MARK)) return HEADER_MARK_ERROR(RC6_HDR_MARK); - if (!MATCH(rawbuf[2], RC6_HDR_SPACE)) return HEADER_SPACE_ERROR(RC6_HDR_SPACE); - offset=3;//Skip gap and header - data = 0; - used = 0; - // Get start bit (1) - if (getRClevel(&used, RC6_T1) != MARK) return DATA_MARK_ERROR(RC6_T1); - if (getRClevel(&used, RC6_T1) != SPACE) return DATA_SPACE_ERROR(RC6_T1); - for (nbits = 0; offset < rawlen; nbits++) { - RCLevel levelA, levelB; // Next two levels - levelA = getRClevel(&used, RC6_T1); - if (nbits == 3) { - // T bit is double wide; make sure second half matches - if (levelA != getRClevel(&used, RC6_T1)) return TRAILER_BIT_ERROR(RC6_T1); - } - levelB = getRClevel(&used, RC6_T1); - if (nbits == 3) { - // T bit is double wide; make sure second half matches - if (levelB != getRClevel(&used, RC6_T1)) return TRAILER_BIT_ERROR(RC6_T1); - } - if (levelA == MARK && levelB == SPACE) { // reversed compared to RC5 - // 1 bit - data = (data << 1) | 1; - } - else if (levelA == SPACE && levelB == MARK) { - // zero bit - data <<= 1; - } - else { - return DATA_MARK_ERROR(RC6_T1); - } - } - // Success - bits = nbits; - value = data; - decode_type = RC6; - return true; -} - -/* - * This Hash decoder is based on IRhashcode - * Copyright 2010 Ken Shirriff - * For details see http://www.righto.com/2010/01/using-arbitrary-remotes-with-arduino.html - * Use FNV hash algorithm: http://isthe.com/chongo/tech/comp/fnv/#FNV-param - * Converts the raw code values into a 32-bit hash code. - * Hopefully this code is unique for each button. - */ -#define FNV_PRIME_32 16777619 -#define FNV_BASIS_32 2166136261UL -// Compare two tick values, returning 0 if newval is shorter, -// 1 if newval is equal, and 2 if newval is longer -int IRdecodeHash::compare(unsigned int oldval, unsigned int newval) { - if (newval < oldval * .8) return 0; - if (oldval < newval * .8) return 2; - return 1; -} - -bool IRdecodeHash::decode(void) { - hash = FNV_BASIS_32; - for (int i = 1; i+2 < rawlen; i++) { - hash = (hash * FNV_PRIME_32) ^ compare(rawbuf[i], rawbuf[i+2]); - } -//note: does not set decode_type=HASH_CODE nor "value" because you might not want to. - return true; -} - -/* We have created a new receiver base class so that we can use its code to implement - * additional receiver classes in addition to the original IRremote code which used - * 50us interrupt sampling of the input pin. See IRrecvLoop and IRrecvPCI classes - * below. IRrecv is the original receiver class with the 50us sampling. - */ -IRrecvBase::IRrecvBase(unsigned char recvpin) -{ - irparams.recvpin = recvpin; - Init(); -} -void IRrecvBase::Init(void) { - irparams.blinkflag = 0; - Mark_Excess=100; -} - -unsigned char IRrecvBase::getPinNum(void){ - return irparams.recvpin; -} - -/* Any receiver class must implement a GetResults method that will return true when a complete code - * has been received. At a successful end of your GetResults code you should then call IRrecvBase::GetResults - * and it will copy the data from the receiver structures into your decoder. Some receivers - * provide results in rawbuf measured in ticks on some number of microseconds while others - * return results in actual microseconds. If you use ticks then you should pass a multiplier - * value in Time_per_Ticks. - */ -bool IRrecvBase::GetResults(IRdecodeBase *decoder, const unsigned int Time_per_Tick) { - decoder->Reset();//clear out any old values. - decoder->rawlen = irparams.rawlen; -/* Typically IR receivers over-report the length of a mark and under-report the length of a space. - * This routine adjusts for that by subtracting Mark_Excess from recorded marks and - * deleting it from a recorded spaces. The amount of adjustment used to be defined in IRLibMatch.h. - * It is now user adjustable with the old default of 100; - * By copying the the values from irparams to decoder we can call IRrecvBase::resume - * immediately while decoding is still in progress. - */ - for(unsigned char i=0; irawbuf[i]=irparams.rawbuf[i]*Time_per_Tick + ( (i % 2)? -Mark_Excess:Mark_Excess); - } - return true; -} - -void IRrecvBase::enableIRIn(void) { - pinMode(irparams.recvpin, INPUT); - resume(); -} - -void IRrecvBase::resume() { - irparams.rawlen = 0; -} - -/* This receiver uses no interrupts or timers. Other interrupt driven receivers - * allow you to do other things and call GetResults at your leisure to see if perhaps - * a sequence has been received. Typically you would put GetResults in your loop - * and it would return false until the sequence had been received. However because this - * receiver uses no interrupts, it takes control of your program when you call GetResults - * and doesn't let go until it's got something to show you. The advantage is you don't need - * interrupts which would make it easier to use and nonstandard hardware and will allow you to - * use any digital input pin. Timing of this routine is only as accurate as your "micros();" - */ -bool IRrecvLoop::GetResults(IRdecodeBase *decoder) { - bool Finished=false; - byte OldState=HIGH;byte NewState; - unsigned long StartTime, DeltaTime=0, EndTime=0; - StartTime=micros(); - while(irparams.rawlen 10000) { //If it's a very long wait - if((Finished=irparams.rawlen)) break; //finished unless it's the opening gap - } - } - if(Finished) break; - do_Blink(); - irparams.rawbuf[irparams.rawlen++]=DeltaTime; - OldState=NewState;StartTime=EndTime; - }; - IRrecvBase::GetResults(decoder); - return true; -} - -/* This receiver uses the pin change hardware interrupt to detect when your input pin - * changes state. It gives more detailed results than the 50µs interrupts of IRrecv - * and theoretically is more accurate than IRrecvLoop. However because it only detects - * pin changes, it doesn't always know when it's finished. GetResults attempts to detect - * a long gap of space but sometimes the next signal gets there before GetResults notices. - * This means the second set of signals can get messed up unless there is a long gap. - * This receiver is based in part on Arduino firmware for use with AnalysIR IR signal analysis - * software for Windows PCs. Many thanks to the people at http://analysir.com for their - * assistance in developing this section of code. - */ - -IRrecvPCI::IRrecvPCI(unsigned char inum) { - Init(); - switch(intrnum=inum) { -#if defined(__AVR_ATmega32U4__) //Assume Arduino Leonardo - case 0: irparams.recvpin=3; break; - case 1: irparams.recvpin=2; break; - case 2: irparams.recvpin=0; break; - case 3: irparams.recvpin=1; break; - case 4: irparams.recvpin=7; break; -#else //Arduino Uno or Mega - case 0: irparams.recvpin=2; break; - case 1: irparams.recvpin=3; break; - #if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)//Mega only - case 2: irparams.recvpin=21; break; - case 3: irparams.recvpin=20; break; - case 4: irparams.recvpin=19; break; - case 5: irparams.recvpin=18; break; - #endif -#endif - //Illegal vaalue to flag you that something is wrong - default: irparams.recvpin=255; - } -} -void IRrecvPCI_Handler(){ - unsigned long volatile ChangeTime=micros(); - unsigned long DeltaTime=ChangeTime-irparams.timer; - switch(irparams.rcvstate) { - case STATE_STOP: return; - case STATE_RUNNING: - do_Blink(); - if (DeltaTime>10000) { - irparams.rcvstate=STATE_STOP; - //Setting gap to 0 is a flag to let you know why we stopped For debugging purposes - //irparams.rawbuf[0]=0; - return; - }; - break; - case STATE_IDLE: - if(digitalRead(irparams.recvpin)) return; else irparams.rcvstate=STATE_RUNNING; - break; - default: - // what of STATE_UNKNOWN, STATE_MARK and STATE_SPACE? - break; - }; - irparams.rawbuf[irparams.rawlen]=DeltaTime; - irparams.timer=ChangeTime; - if(++irparams.rawlen>=RAWBUF) { - irparams.rcvstate=STATE_STOP; - //Setting gap to 1 is a flag to let you know why we stopped For debugging purposes - //irparams.rawbuf[0]=1; - } -} - -void IRrecvPCI::resume(void) { - irparams.rcvstate = STATE_IDLE; - IRrecvBase::resume(); - irparams.timer=micros(); - attachInterrupt(intrnum, IRrecvPCI_Handler, CHANGE); -}; - -bool IRrecvPCI::GetResults(IRdecodeBase *decoder) { - if(irparams.rcvstate==STATE_RUNNING) { - unsigned long ChangeTime=irparams.timer; - if( (micros()-ChangeTime) > 10000) { - irparams.rcvstate=STATE_STOP; - //Setting gap to 2 is a flag to let you know why we stopped For debugging purposes - //irparams.rawbuf[0]=2; - } - } - if (irparams.rcvstate != STATE_STOP) return false; - detachInterrupt(intrnum); - IRrecvBase::GetResults(decoder); - return true; -}; - - - - - -/* - * The remainder of this file is all related to interrupt handling and hardware issues. It has - * nothing to do with IR protocols. You need not understand this is all you're doing is adding - * new protocols or improving the receiving, decoding and sending of protocols. - */ -// Provides ISR -#include -// defines for setting and clearing register bits -#ifndef cbi -#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) -#endif -#ifndef sbi -#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) -#endif -#define CLKFUDGE 5 // fudge factor for clock interrupt overhead -#ifdef F_CPU -#define SYSCLOCK F_CPU // main Arduino clock -#else -#define SYSCLOCK 16000000 // main Arduino clock -#endif -#define PRESCALE 8 // timer clock prescale -#define CLKSPERUSEC (SYSCLOCK/PRESCALE/1000000) // timer clocks per microsecond - -#include - -/* - * This section contains the hardware specific portions of IRrecvBase - */ -/* If your hardware is set up to do both output and input but your particular sketch - * doesn't do any output, this method will ensure that your output pin is low - * and doesn't turn on your IR LED or any output circuit. - */ -void IRrecvBase::No_Output (void) { - pinMode(TIMER_PWM_PIN, OUTPUT); - digitalWrite(TIMER_PWM_PIN, LOW); // When not sending PWM, we want it low -} - -// enable/disable blinking of pin 13 on IR processing -void IRrecvBase::blink13(bool blinkflag) -{ - irparams.blinkflag = blinkflag; - if (blinkflag) - pinMode(BLINKLED, OUTPUT); -} - -//Do the actual blinking off and on -//This is not part of IRrecvBase because it may need to be inside an ISR -//and we cannot pass parameters to them. -void do_Blink(void) { - if (irparams.blinkflag) { - if(irparams.rawlen % 2) { - BLINKLED_ON(); // turn pin 13 LED on - } - else { - BLINKLED_OFF(); // turn pin 13 LED off - } - } -} - -/* - * The original IRrecv which uses 50µs timer driven interrupts to sample input pin. - */ -void IRrecv::resume() { - // initialize state machine variables - irparams.rcvstate = STATE_IDLE; - IRrecvBase::resume(); -} - -void IRrecv::enableIRIn(void) { - IRrecvBase::enableIRIn(); - // setup pulse clock timer interrupt - cli(); - TIMER_CONFIG_NORMAL(); - TIMER_ENABLE_INTR; - TIMER_RESET; - sei(); -} - -bool IRrecv::GetResults(IRdecodeBase *decoder) { - if (irparams.rcvstate != STATE_STOP) return false; - IRrecvBase::GetResults(decoder,USECPERTICK); - return true; -} - -#define _GAP 5000 // Minimum map between transmissions -#define GAP_TICKS (_GAP/USECPERTICK) -/* - * This interrupt service routine is only used by IRrecv and may or may not be used by other - * extensions of the IRrecBase. It is timer driven interrupt code to collect raw data. - * Widths of alternating SPACE, MARK are recorded in rawbuf. Recorded in ticks of 50 microseconds. - * rawlen counts the number of entries recorded so far. First entry is the SPACE between transmissions. - * As soon as a SPACE gets long, ready is set, state switches to IDLE, timing of SPACE continues. - * As soon as first MARK arrives, gap width is recorded, ready is cleared, and new logging starts. - */ -ISR(TIMER_INTR_NAME) -{ - TIMER_RESET; - enum irdata_t {IR_MARK=0, IR_SPACE=1}; - irdata_t irdata = (irdata_t)digitalRead(irparams.recvpin); - irparams.timer++; // One more 50us tick - if (irparams.rawlen >= RAWBUF) { - // Buffer overflow - irparams.rcvstate = STATE_STOP; - } - switch(irparams.rcvstate) { - case STATE_IDLE: // In the middle of a gap - if (irdata == IR_MARK) { - if (irparams.timer < GAP_TICKS) { - // Not big enough to be a gap. - irparams.timer = 0; - } - else { - // gap just ended, record duration and start recording transmission - irparams.rawlen = 0; - irparams.rawbuf[irparams.rawlen++] = irparams.timer; - irparams.timer = 0; - irparams.rcvstate = STATE_MARK; - } - } - break; - case STATE_MARK: // timing MARK - if (irdata == IR_SPACE) { // MARK ended, record time - irparams.rawbuf[irparams.rawlen++] = irparams.timer; - irparams.timer = 0; - irparams.rcvstate = STATE_SPACE; - } - break; - case STATE_SPACE: // timing SPACE - if (irdata == IR_MARK) { // SPACE just ended, record it - irparams.rawbuf[irparams.rawlen++] = irparams.timer; - irparams.timer = 0; - irparams.rcvstate = STATE_MARK; - } - else { // SPACE - if (irparams.timer > GAP_TICKS) { - // big SPACE, indicates gap between codes - // Mark current code as ready for processing - // Switch to STOP - // Don't reset timer; keep counting space width - irparams.rcvstate = STATE_STOP; - } - } - break; - case STATE_STOP: // waiting, measuring gap - if (irdata == IR_MARK) { // reset gap timer - irparams.timer = 0; - } - break; - default: - // what of STATE_UNKNOWN and STATE_RUNNING? - break; - } - do_Blink(); -} - -/* - * The hardware specific portions of IRsendBase - */ -void IRsendBase::enableIROut(unsigned char khz) { -//NOTE: the comments on this routine accompanied the original early version of IRremote library -//which only used TIMER2. The parameters defined in IRLibTimer.h may or may not work this way. - // Enables IR output. The khz value controls the modulation frequency in kilohertz. - // The IR output will be on pin 3 (OC2B). - // This routine is designed for 36-40KHz; if you use it for other values, it's up to you - // to make sure it gives reasonable results. (Watch out for overflow / underflow / rounding.) - // TIMER2 is used in phase-correct PWM mode, with OCR2A controlling the frequency and OCR2B - // controlling the duty cycle. - // There is no prescaling, so the output frequency is 16MHz / (2 * OCR2A) - // To turn the output on and off, we leave the PWM running, but connect and disconnect the output pin. - // A few hours staring at the ATmega documentation and this will all make sense. - // See my Secrets of Arduino PWM at http://www.righto.com/2009/07/secrets-of-arduino-pwm.html for details. - - // Disable the Timer2 Interrupt (which is used for receiving IR) - TIMER_DISABLE_INTR; //Timer2 Overflow Interrupt - pinMode(TIMER_PWM_PIN, OUTPUT); - digitalWrite(TIMER_PWM_PIN, LOW); // When not sending PWM, we want it low - TIMER_CONFIG_KHZ(khz); - } - -IRsendBase::IRsendBase () { - pinMode(TIMER_PWM_PIN, OUTPUT); - digitalWrite(TIMER_PWM_PIN, LOW); // When not sending PWM, we want it low -} - -//The Arduino built in function delayMicroseconds has limits we wish to exceed -//Therefore we have created this alternative -void My_delay_uSecs(unsigned int T) { - if(T){if(T>16000) {delayMicroseconds(T % 1000); delay(T/1000); } else delayMicroseconds(T);}; -} - -void IRsendBase::mark(unsigned int time) { - TIMER_ENABLE_PWM; - My_delay_uSecs(time); - Extent+=time; -} - -void IRsendBase::space(unsigned int time) { - TIMER_DISABLE_PWM; - My_delay_uSecs(time); - Extent+=time; -} - -/* - * Various debugging routines - */ - - -#ifdef IRLIB_TRACE -void IRLIB_ATTEMPT_MESSAGE(const __FlashStringHelper * s) {Serial.print(F("Attempting ")); Serial.print(s); Serial.println(F(" decode:"));}; -void IRLIB_TRACE_MESSAGE(const __FlashStringHelper * s) {Serial.print(F("Executing ")); Serial.println(s);}; -byte IRLIB_REJECTION_MESSAGE(const __FlashStringHelper * s) { Serial.print(F(" Protocol failed because ")); Serial.print(s); Serial.println(F(" wrong.")); return false;}; -byte IRLIB_DATA_ERROR_MESSAGE(const __FlashStringHelper * s, unsigned char index, unsigned int value, unsigned int expected) { - IRLIB_REJECTION_MESSAGE(s); Serial.print(F("Error occurred with rawbuf[")); Serial.print(index,DEC); Serial.print(F("]=")); Serial.print(value,DEC); - Serial.print(F(" expected:")); Serial.println(expected,DEC); return false; -}; -#endif diff --git a/libraries/IRLib/IRLib.h b/libraries/IRLib/IRLib.h deleted file mode 100644 index 0dd05a2..0000000 --- a/libraries/IRLib/IRLib.h +++ /dev/null @@ -1,323 +0,0 @@ -/* IRLib.h from IRLib – an Arduino library for infrared encoding and decoding - * Version 1.4 March 2014 - * Copyright 2014 by Chris Young http://cyborg5.com - * - * This library is a major rewrite of IRemote by Ken Shirriff which was covered by - * GNU LESSER GENERAL PUBLIC LICENSE which as I read it allows me to make modified versions. - * That same license applies to this modified version. See his original copyright below. - * The latest Ken Shirriff code can be found at https://github.com/shirriff/Arduino-IRremote - * My purpose was to reorganize the code to make it easier to add or remove protocols. - * As a result I have separated the act of receiving a set of raw timing codes from the act of decoding them - * by making them separate classes. That way the receiving aspect can be more black box and implementers - * of decoders and senders can just deal with the decoding of protocols. It also allows for alternative - * types of receivers independent of the decoding. This makes porting to different hardware platforms easier. - * Also added provisions to make the classes base classes that could be extended with new protocols - * which would not require recompiling of the original library nor understanding of its detailed contents. - * Some of the changes were made to reduce code size such as unnecessary use of long versus bool. - * Some changes were just my weird programming style. Also extended debugging information added. - */ -/* - * IRremote - * Version 0.1 July, 2009 - * Copyright 2009 Ken Shirriff - * For details, see http://www.righto.com/2009/08/multi-protocol-infrared-remote-library.html http://www.righto.com/ - * - * Interrupt code based on NECIRrcv by Joe Knapp - * http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1210243556 - * Also influenced by http://zovirl.com/2008/11/12/building-a-universal-remote-with-an-arduino/ - */ - -#ifndef IRLib_h -#define IRLib_h -#include - -// The following are compile-time library options. -// If you change them, recompile the library. -// If IRLIB_TRACE is defined, some debugging information about the decode will be printed -// IRLIB_TEST must be defined for the IRtest unittests to work. It will make some -// methods virtual, which will be slightly slower, which is why it is optional. -// #define IRLIB_TRACE -// #define IRLIB_TEST - -// Only used for testing; can remove virtual for shorter code -#ifdef IRLIB_TEST -#define VIRTUAL virtual -#else -#define VIRTUAL -#endif - -#define RAWBUF 100 // Length of raw duration buffer (cannot exceed 255) - -typedef unsigned char IRTYPES; //formerly was an enum -#define UNKNOWN 0 -#define NEC 1 -#define SONY 2 -#define RC5 3 -#define RC6 4 -#define PANASONIC_OLD 5 -#define JVC 6 -#define NECX 7 -//#define ADDITIONAL (number) //make additional protocol 8 and change HASH_CODE to 9 -#define HASH_CODE 8 -#define LAST_PROTOCOL HASH_CODE - -const __FlashStringHelper *Pnames(IRTYPES Type); //Returns a character string that is name of protocol. - -// Base class for decoding raw results -class IRdecodeBase -{ -public: - IRdecodeBase(void); - IRTYPES decode_type; // NEC, SONY, RC5, UNKNOWN etc. - unsigned long value; // Decoded value - unsigned char bits; // Number of bits in decoded value - volatile unsigned int *rawbuf; // Raw intervals in microseconds - unsigned char rawlen; // Number of records in rawbuf. - virtual void Reset(void); // Initializes the decoder - virtual bool decode(void); // This base routine always returns false override with your routine - bool decodeGeneric(unsigned char Raw_Count, unsigned int Head_Mark, unsigned int Head_Space, - unsigned int Mark_One, unsigned int Mark_Zero, unsigned int Space_One, unsigned int Space_Zero); - virtual void DumpResults (void); - void UseExtnBuf(void *P); //Normally uses same rawbuf as IRrecv. Use this to define your own buffer. - void copyBuf (IRdecodeBase *source);//copies rawbuf and rawlen from one decoder to another -protected: - unsigned char offset; // Index into rawbuf used various places -}; - -class IRdecodeHash: public virtual IRdecodeBase -{ -public: - unsigned long hash; - virtual bool decode(void);//made virtual in case you want to substitute your own hash code -protected: - int compare(unsigned int oldval, unsigned int newval);//used by decodeHash -}; - - -class IRdecodeNEC: public virtual IRdecodeBase -{ -public: - virtual bool decode(void); -}; - -class IRdecodeSony: public virtual IRdecodeBase -{ -public: - virtual bool decode(void); -}; - -class IRdecodeRC: public virtual IRdecodeBase -{ -public: - enum RCLevel {MARK, SPACE, ERROR};//used by decoders for RC5/RC6 - // These are called by decode - RCLevel getRClevel(unsigned char *used, const unsigned int t1); -protected: - unsigned char nbits; - unsigned char used; - long data; -}; - -class IRdecodeRC5: public virtual IRdecodeRC -{ -public: - virtual bool decode(void); -}; - -class IRdecodeRC6: public virtual IRdecodeRC -{ -public: - virtual bool decode(void); -}; - -class IRdecodePanasonic_Old: public virtual IRdecodeBase -{ -public: - virtual bool decode(void); -}; - -class IRdecodeJVC: public virtual IRdecodeBase -{ -public: - virtual bool decode(void); -}; - -class IRdecodeNECx: public virtual IRdecodeBase -{ -public: - virtual bool decode(void); -}; - -// main class for decoding all supported protocols -class IRdecode: -public virtual IRdecodeNEC, -public virtual IRdecodeSony, -public virtual IRdecodeRC5, -public virtual IRdecodeRC6, -public virtual IRdecodePanasonic_Old, -public virtual IRdecodeJVC, -public virtual IRdecodeNECx -// , public virtual IRdecodeADDITIONAL //add additional protocols here -{ -public: - virtual bool decode(void); // Calls each decode routine individually -}; - -//Base class for sending signals -class IRsendBase -{ -public: - IRsendBase(); - void sendGeneric(unsigned long data, unsigned char Num_Bits, unsigned int Head_Mark, unsigned int Head_Space, - unsigned int Mark_One, unsigned int Mark_Zero, unsigned int Space_One, unsigned int Space_Zero, - unsigned char kHz, bool Stop_Bits, unsigned long Max_Extent=0); -protected: - void enableIROut(unsigned char khz); - VIRTUAL void mark(unsigned int usec); - VIRTUAL void space(unsigned int usec); - unsigned long Extent; -}; - -class IRsendNEC: public virtual IRsendBase -{ -public: - void send(unsigned long data); -}; - -class IRsendSony: public virtual IRsendBase -{ -public: - void send(unsigned long data, int nbits); -}; - -class IRsendRaw: public virtual IRsendBase -{ -public: - void send(unsigned int buf[], unsigned char len, unsigned char khz); -}; - -class IRsendRC5: public virtual IRsendBase -{ -public: - void send(unsigned long data); -}; - -class IRsendRC6: public virtual IRsendBase -{ -public: - void send(unsigned long data, unsigned char nbits); -}; - -class IRsendPanasonic_Old: public virtual IRsendBase -{ -public: - void send(unsigned long data); -}; - -class IRsendJVC: public virtual IRsendBase -{ -public: - void send(unsigned long data, bool First); -}; - -class IRsendNECx: public virtual IRsendBase -{ -public: - void send(unsigned long data); -}; - -class IRsend: -public virtual IRsendNEC, -public virtual IRsendSony, -public virtual IRsendRaw, -public virtual IRsendRC5, -public virtual IRsendRC6, -public virtual IRsendPanasonic_Old, -public virtual IRsendJVC, -public virtual IRsendNECx -// , public virtual IRsendADDITIONAL //add additional protocols here -{ -public: - void send(IRTYPES Type, unsigned long data, unsigned int data2); -}; - -// Changed this to a base class so it can be extended -class IRrecvBase -{ -public: - IRrecvBase(void) {}; - IRrecvBase(unsigned char recvpin); - void No_Output(void); - void blink13(bool blinkflag); - bool GetResults(IRdecodeBase *decoder, const unsigned int Time_per_Ticks=1); - void enableIRIn(void); - virtual void resume(void); - unsigned char getPinNum(void); - unsigned char Mark_Excess; -protected: - void Init(void); -}; - -/* Original IRrecv class uses 50µs interrupts to sample input. While this is generally - * accurate enough for everyday purposes, it may be difficult to port to other - * hardware unless you know a lot about hardware timers and interrupts. Also - * when trying to analyze unknown protocols, the 50µs granularity may not be sufficient. - * In that case use either the IRrecvLoop or the IRrecvPCI class. - */ -class IRrecv: public IRrecvBase -{ -public: - IRrecv(unsigned char recvpin):IRrecvBase(recvpin){}; - bool GetResults(IRdecodeBase *decoder); - void enableIRIn(void); - void resume(void); -}; -/* This receiver uses no interrupts or timers. Other interrupt driven receivers - * allow you to do other things and call GetResults at your leisure to see if perhaps - * a sequence has been received. Typically you would put GetResults in your loop - * and it would return false until the sequence had been received. However because this - * receiver uses no interrupts, it takes control of your program when you call GetResults - * and doesn't let go until it's got something to show you. The advantage is you don't need - * interrupts which would make it easier to use and nonstandard hardware and will allow you to - * use any digital input pin. Timing of this routine is only as accurate as your "micros();" - */ -class IRrecvLoop: public IRrecvBase -{ -public: - IRrecvLoop(unsigned char recvpin):IRrecvBase(recvpin){}; - bool GetResults(IRdecodeBase *decoder); -}; - -/* This receiver uses the pin change hardware interrupt to detect when your input pin - * changes state. It gives more detailed results than the 50µs interrupts of IRrecv - * and theoretically is more accurate than IRrecvLoop. However because it only detects - * pin changes, it doesn't always know when it's finished. GetResults attempts to detect - * a long gap of space but sometimes the next signal gets there before GetResults notices. - * This means the second set of signals can get messed up unless there is a long gap. - * This receiver is based in part on Arduino firmware for use with AnalysIR IR signal analysis - * software for Windows PCs. Many thanks to the people at http://analysir.com for their - * assistance in developing this section of code. - */ -class IRrecvPCI: public IRrecvBase -{ -public: - //Note this is interrupt number not pin number - IRrecvPCI(unsigned char inum); - bool GetResults(IRdecodeBase *decoder); - void resume(void); -private: - unsigned char intrnum; -}; - - -//Do the actual blinking off and on -//This is not part of IRrecvBase because it may need to be inside an ISR -//and we cannot pass parameters to them. -void do_Blink(void); - -// Some useful constants -// Decoded value for NEC when a repeat code is received -#define REPEAT 0xffffffff - - -#endif //IRLib_h diff --git a/libraries/IRLib/IRLibMatch.h b/libraries/IRLib/IRLibMatch.h deleted file mode 100644 index ddd2cc5..0000000 --- a/libraries/IRLib/IRLibMatch.h +++ /dev/null @@ -1,100 +0,0 @@ -/* IRLibMatch.h from IRLib – an Arduino library for infrared encoding and decoding - * Version 1.4 March 2014 - * Copyright 2014 by Chris Young http://cyborg5.com - * - * This library is a major rewrite of IRemote by Ken Shirriff which was covered by - * GNU LESSER GENERAL PUBLIC LICENSE which as I read it allows me to make modified versions. - * That same license applies to this modified version. See his original copyright below. - * The latest Ken Shirriff code can be found at https://github.com/shirriff/Arduino-IRremote - * My purpose was to reorganize the code to make it easier to add or remove protocols. - * As a result I have separated the act of receiving a set of raw timing codes from the act of decoding them - * by making them separate classes. That way the receiving aspect can be more black box and implementers - * of decoders and senders can just deal with the decoding of protocols. It also allows for alternative - * types of receivers independent of the decoding. This makes porting to different hardware platforms easier. - * Also added provisions to make the classes base classes that could be extended with new protocols - * which would not require recompiling of the original library nor understanding of its detailed contents. - * Some of the changes were made to reduce code size such as unnecessary use of long versus bool. - * Some changes were just my weird programming style. Also extended debugging information added. - */ -/* - * IRremote - * Version 0.1 July, 2009 - * Copyright 2009 Ken Shirriff - * For details, see http://www.righto.com/2009/08/multi-protocol-infrared-remote-library.html http://www.righto.com/ - * - * Interrupt code based on NECIRrcv by Joe Knapp - * http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1210243556 - * Also influenced by http://zovirl.com/2008/11/12/building-a-universal-remote-with-an-arduino/ - */ - -#ifndef IRLibMatch_h -#define IRLibMatch_h - -/* - * Originally all timing comparisons for decoding were based on a percent of the - * target value. However when target values are relatively large, the percent tolerance - * is too much. In some instances an absolute tolerance is needed. In order to maintain - * backward compatibility, the default will be to continue to use percent. If you wish to default - * to an absolute tolerance, you should comment out the line below. - */ -#define IRLIB_USE_PERCENT - -/* - * These are some miscellaneous definitions that are needed by the decoding routines. - * You need not include this file unless you are creating custom decode routines - * which will require these macros and definitions. Even if you include it, you probably - * don't need to be intimately familiar with the internal details. - */ - -#define USECPERTICK 50 // microseconds per clock interrupt tick -#define PERCENT_TOLERANCE 25 // percent tolerance in measurements -#define DEFAULT_ABS_TOLERANCE 75 //absolute tolerance in microseconds - -/* - * These revised MATCH routines allow you to use either percentage were absolute tolerances. - * Use ABS_MATCH for absolute and PERC_MATCH percentages. The original MATCH macro - * is controlled by the IRLIB_USE_PERCENT definition a few lines above. - */ - -#define PERCENT_LOW(us) (unsigned int) (((us)*(1.0 - PERCENT_TOLERANCE/100.))) -#define PERCENT_HIGH(us) (unsigned int) (((us)*(1.0 + PERCENT_TOLERANCE/100.) + 1)) - -#define ABS_MATCH(v,e,t) ((v) >= ((e)-(t)) && (v) <= ((e)+(t))) -#define PERC_MATCH(v,e) ((v) >= PERCENT_LOW(e) && (v) <= PERCENT_HIGH(e)) - -#ifdef IRLIB_USE_PERCENT -#define MATCH(v,e) PERC_MATCH(v,e) -#else -#define MATCH(v,e) ABS_MATCH(v,e,DEFAULT_ABS_TOLERANCE) -#endif - -//The following two routines are no longer necessary because mark/space adjustments are done elsewhere -//These definitions maintain backward compatibility. -#define MATCH_MARK(t,u) MATCH(t,u) -#define MATCH_SPACE(t,u) MATCH(t,u) - -#ifdef IRLIB_TRACE -void IRLIB_ATTEMPT_MESSAGE(const __FlashStringHelper * s); -void IRLIB_TRACE_MESSAGE(const __FlashStringHelper * s); -byte IRLIB_REJECTION_MESSAGE(const __FlashStringHelper * s); -byte IRLIB_DATA_ERROR_MESSAGE(const __FlashStringHelper * s, unsigned char index, unsigned int value, unsigned int expected); -#define RAW_COUNT_ERROR IRLIB_REJECTION_MESSAGE(F("number of raw samples")); -#define HEADER_MARK_ERROR(expected) IRLIB_DATA_ERROR_MESSAGE(F("header mark"),offset,rawbuf[offset],expected); -#define HEADER_SPACE_ERROR(expected) IRLIB_DATA_ERROR_MESSAGE(F("header space"),offset,rawbuf[offset],expected); -#define DATA_MARK_ERROR(expected) IRLIB_DATA_ERROR_MESSAGE(F("data mark"),offset,rawbuf[offset],expected); -#define DATA_SPACE_ERROR(expected) IRLIB_DATA_ERROR_MESSAGE(F("data space"),offset,rawbuf[offset],expected); -#define TRAILER_BIT_ERROR(expected) IRLIB_DATA_ERROR_MESSAGE(F("RC5/RC6 trailer bit length"),offset,rawbuf[offset],expected); -#else -#define IRLIB_ATTEMPT_MESSAGE(s) -#define IRLIB_TRACE_MESSAGE(s) -#define IRLIB_REJECTION_MESSAGE(s) false -#define IRLIB_DATA_ERROR_MESSAGE(s,i,v,e) false -#define RAW_COUNT_ERROR false -#define HEADER_MARK_ERROR(expected) false -#define HEADER_SPACE_ERROR(expected) false -#define DATA_MARK_ERROR(expected) false -#define DATA_SPACE_ERROR(expected) false -#define TRAILER_BIT_ERROR(expected) false -#endif - -#endif //IRLibMatch_h diff --git a/libraries/IRLib/IRLibRData.h b/libraries/IRLib/IRLibRData.h deleted file mode 100644 index 4eae0ff..0000000 --- a/libraries/IRLib/IRLibRData.h +++ /dev/null @@ -1,54 +0,0 @@ -/* IRLibRData.h from IRLib – an Arduino library for infrared encoding and decoding - * Version 1.4 March 2014 - * Copyright 2014 by Chris Young http://cyborg5.com - * - * This library is a major rewrite of IRemote by Ken Shirriff which was covered by - * GNU LESSER GENERAL PUBLIC LICENSE which as I read it allows me to make modified versions. - * That same license applies to this modified version. See his original copyright below. - * The latest Ken Shirriff code can be found at https://github.com/shirriff/Arduino-IRremote - * My purpose was to reorganize the code to make it easier to add or remove protocols. - * As a result I have separated the act of receiving a set of raw timing codes from the act of decoding them - * by making them separate classes. That way the receiving aspect can be more black box and implementers - * of decoders and senders can just deal with the decoding of protocols. It also allows for alternative - * types of receivers independent of the decoding. This makes porting to different hardware platforms easier. - * Also added provisions to make the classes base classes that could be extended with new protocols - * which would not require recompiling of the original library nor understanding of its detailed contents. - * Some of the changes were made to reduce code size such as unnecessary use of long versus bool. - * Some changes were just my weird programming style. Also extended debugging information added. - */ -/* - * IRremote - * Version 0.1 July, 2009 - * Copyright 2009 Ken Shirriff - * For details, see http://www.righto.com/2009/08/multi-protocol-infrared-remote-library.html http://www.righto.com/ - * - * Interrupt code based on NECIRrcv by Joe Knapp - * http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1210243556 - * Also influenced by http://zovirl.com/2008/11/12/building-a-universal-remote-with-an-arduino/ - */ - -#ifndef IRLibRData_h -#define IRLibRData_h - -/* - * The structure contains a variety of variables needed by the receiver routines. - * Typically this data would be part of the IRrecv class however the interrupt service routine - * must have access to it and you cannot pass a parameter to such a routine. The data must be global. - * You need not include this file unless you are creating a custom receiver class or extending - * the provided IRrecv class. - */ - -// receiver states -enum rcvstate_t {STATE_UNKNOWN, STATE_IDLE, STATE_MARK, STATE_SPACE, STATE_STOP, STATE_RUNNING}; -// information for the interrupt handler -typedef struct { - unsigned char recvpin; // pin for IR data from detector - rcvstate_t rcvstate; // state machine - bool blinkflag; // TRUE to enable blinking of pin 13 on IR processing - unsigned long timer; // state timer, counts 50uS ticks.(and other uses) - unsigned int rawbuf[RAWBUF]; // raw data - unsigned char rawlen; // counter of entries in rawbuf -} -irparams_t; -extern volatile irparams_t irparams; -#endif diff --git a/libraries/IRLib/IRLibTimer.h b/libraries/IRLib/IRLibTimer.h deleted file mode 100644 index 9079ae0..0000000 --- a/libraries/IRLib/IRLibTimer.h +++ /dev/null @@ -1,330 +0,0 @@ -/* IRLibTimer.h from IRLib – an Arduino library for infrared encoding and decoding - * Version 1.4 March 2014 - * Copyright 2014 by Chris Young http://cyborg5.com - * - * This library is a major rewrite of IRemote by Ken Shirriff which was covered by - * GNU LESSER GENERAL PUBLIC LICENSE which as I read it allows me to make modified versions. - * That same license applies to this modified version. See his original copyright below. - * The latest Ken Shirriff code can be found at https://github.com/shirriff/Arduino-IRremote - * My purpose was to reorganize the code to make it easier to add or remove protocols. - * As a result I have separated the act of receiving a set of raw timing codes from the act of decoding them - * by making them separate classes. That way the receiving aspect can be more black box and implementers - * of decoders and senders can just deal with the decoding of protocols. It also allows for alternative - * types of receivers independent of the decoding. This makes porting to different hardware platforms easier. - * Also added provisions to make the classes base classes that could be extended with new protocols - * which would not require recompiling of the original library nor understanding of its detailed contents. - * Some of the changes were made to reduce code size such as unnecessary use of long versus bool. - * Some changes were just my weird programming style. Also extended debugging information added. - */ -/* - * IRremote - * Version 0.1 July, 2009 - * Copyright 2009 Ken Shirriff - * For details, see http://www.righto.com/2009/08/multi-protocol-infrared-remote-library.html http://www.righto.com/ - * - * Interrupt code based on NECIRrcv by Joe Knapp - * http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1210243556 - * Also influenced by http://zovirl.com/2008/11/12/building-a-universal-remote-with-an-arduino/ - */ -/* This file defines which timer you wish to use. Different versions of Arduino and related boards - * have different timers available to them. For various reasons you might want to use something other than - * timer 2. Some boards do not have timer 2. This attempts to detect which type of board you are using. - * You need uncomment wish to use on your board. You probably will not need to include this in your - * program unless you want to see which timer is being used and which board has been detected. - * This information came from an alternative fork of the original Ken Shirriff library found here - * https://github.com/TKJElectronics/Arduino-IRremote - */ -#ifndef IRLibTimer_h -#define IRLibTimer_h - -#if defined(ARDUINO) && ARDUINO >= 100 -#include "Arduino.h" -#else -#include "WProgram.h" -#endif - -// Arduino Mega -#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) - //#define IR_USE_TIMER1 // tx = pin 11 - #define IR_USE_TIMER2 // tx = pin 9 - //#define IR_USE_TIMER3 // tx = pin 5 - //#define IR_USE_TIMER4 // tx = pin 6 - //#define IR_USE_TIMER5 // tx = pin 46 - -// Teensy 1.0 -#elif defined(__AVR_AT90USB162__) - #define IR_USE_TIMER1 // tx = pin 17 - -// Teensy 2.0 versus Leonardo -// These boards use the same chip but the pinouts are different. -#elif defined(__AVR_ATmega32U4__) -#ifdef CORE_TEENSY - // it's Teensy 2.0 - //#define IR_USE_TIMER1 // tx = pin 14 - //#define IR_USE_TIMER3 // tx = pin 9 - #define IR_USE_TIMER4_HS // tx = pin 10 -#else - // it's probably Leonardo - #define IR_USE_TIMER1 // tx = pin 9 - //#define IR_USE_TIMER3 // tx = pin 5 - //#define IR_USE_TIMER4_HS // tx = pin 13 -#endif - -// Teensy++ 1.0 & 2.0 -#elif defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__) - //#define IR_USE_TIMER1 // tx = pin 25 - #define IR_USE_TIMER2 // tx = pin 1 - //#define IR_USE_TIMER3 // tx = pin 16 - -// Sanguino -#elif defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644__) - //#define IR_USE_TIMER1 // tx = pin 13 - #define IR_USE_TIMER2 // tx = pin 14 - -// Arduino Duemilanove, Diecimila, LilyPad, Mini, Fio, etc -#else - //#define IR_USE_TIMER1 // tx = pin 9 - #define IR_USE_TIMER2 // tx = pin 3 -#endif - - - - - -// defines for timer2 (8 bits) -#if defined(IR_USE_TIMER2) -#define TIMER_RESET -#define TIMER_ENABLE_PWM (TCCR2A |= _BV(COM2B1)) -#define TIMER_DISABLE_PWM (TCCR2A &= ~(_BV(COM2B1))) -#define TIMER_ENABLE_INTR (TIMSK2 = _BV(OCIE2A)) -#define TIMER_DISABLE_INTR (TIMSK2 = 0) -#define TIMER_INTR_NAME TIMER2_COMPA_vect -#define TIMER_CONFIG_KHZ(val) ({ \ - const uint8_t pwmval = SYSCLOCK / 2000 / (val); \ - TCCR2A = _BV(WGM20); \ - TCCR2B = _BV(WGM22) | _BV(CS20); \ - OCR2A = pwmval; \ - OCR2B = pwmval / 3; \ -}) -#define TIMER_COUNT_TOP (SYSCLOCK * USECPERTICK / 1000000) -#if (TIMER_COUNT_TOP < 256) -#define TIMER_CONFIG_NORMAL() ({ \ - TCCR2A = _BV(WGM21); \ - TCCR2B = _BV(CS20); \ - OCR2A = TIMER_COUNT_TOP; \ - TCNT2 = 0; \ -}) -#else -#define TIMER_CONFIG_NORMAL() ({ \ - TCCR2A = _BV(WGM21); \ - TCCR2B = _BV(CS21); \ - OCR2A = TIMER_COUNT_TOP / 8; \ - TCNT2 = 0; \ -}) -#endif -#if defined(CORE_OC2B_PIN) -#define TIMER_PWM_PIN CORE_OC2B_PIN /* Teensy */ -#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) -#define TIMER_PWM_PIN 9 /* Arduino Mega */ -#elif defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644__) -#define TIMER_PWM_PIN 14 /* Sanguino */ -#else -#define TIMER_PWM_PIN 3 /* Arduino Duemilanove, Diecimila, LilyPad, etc */ -#endif - - -// defines for timer1 (16 bits) -#elif defined(IR_USE_TIMER1) -#define TIMER_RESET -#define TIMER_ENABLE_PWM (TCCR1A |= _BV(COM1A1)) -#define TIMER_DISABLE_PWM (TCCR1A &= ~(_BV(COM1A1))) -#define TIMER_ENABLE_INTR (TIMSK1 = _BV(OCIE1A)) -#define TIMER_DISABLE_INTR (TIMSK1 = 0) -#define TIMER_INTR_NAME TIMER1_COMPA_vect -#define TIMER_CONFIG_KHZ(val) ({ \ - const uint16_t pwmval = SYSCLOCK / 2000 / (val); \ - TCCR1A = _BV(WGM11); \ - TCCR1B = _BV(WGM13) | _BV(CS10); \ - ICR1 = pwmval; \ - OCR1A = pwmval / 3; \ -}) -#define TIMER_CONFIG_NORMAL() ({ \ - TCCR1A = 0; \ - TCCR1B = _BV(WGM12) | _BV(CS10); \ - OCR1A = SYSCLOCK * USECPERTICK / 1000000; \ - TCNT1 = 0; \ -}) -#if defined(CORE_OC1A_PIN) -#define TIMER_PWM_PIN CORE_OC1A_PIN /* Teensy */ -#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) -#define TIMER_PWM_PIN 11 /* Arduino Mega */ -#elif defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644__) -#define TIMER_PWM_PIN 13 /* Sanguino */ -#else -#define TIMER_PWM_PIN 9 /* Arduino Duemilanove, Diecimila, LilyPad, etc */ -#endif - - -// defines for timer3 (16 bits) -#elif defined(IR_USE_TIMER3) -#define TIMER_RESET -#define TIMER_ENABLE_PWM (TCCR3A |= _BV(COM3A1)) -#define TIMER_DISABLE_PWM (TCCR3A &= ~(_BV(COM3A1))) -#define TIMER_ENABLE_INTR (TIMSK3 = _BV(OCIE3A)) -#define TIMER_DISABLE_INTR (TIMSK3 = 0) -#define TIMER_INTR_NAME TIMER3_COMPA_vect -#define TIMER_CONFIG_KHZ(val) ({ \ - const uint16_t pwmval = SYSCLOCK / 2000 / (val); \ - TCCR3A = _BV(WGM31); \ - TCCR3B = _BV(WGM33) | _BV(CS30); \ - ICR3 = pwmval; \ - OCR3A = pwmval / 3; \ -}) -#define TIMER_CONFIG_NORMAL() ({ \ - TCCR3A = 0; \ - TCCR3B = _BV(WGM32) | _BV(CS30); \ - OCR3A = SYSCLOCK * USECPERTICK / 1000000; \ - TCNT3 = 0; \ -}) -#if defined(CORE_OC3A_PIN) -#define TIMER_PWM_PIN CORE_OC3A_PIN /* Teensy */ -#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) -#define TIMER_PWM_PIN 5 /* Arduino Mega */ -#elif defined(__AVR_ATmega32U4__) -#define TIMER_PWM_PIN 5 /* Arduino Leonardo note already checked for Teensy */ -#else -#error "Please add OC3A pin number here\n" -#endif - - -// defines for timer4 (10 bits, high speed option) -#elif defined(IR_USE_TIMER4_HS) -#define TIMER_RESET -#define TIMER_ENABLE_PWM (TCCR4A |= _BV(COM4A1)) -#define TIMER_DISABLE_PWM (TCCR4A &= ~(_BV(COM4A1))) -#define TIMER_ENABLE_INTR (TIMSK4 = _BV(TOIE4)) -#define TIMER_DISABLE_INTR (TIMSK4 = 0) -#define TIMER_INTR_NAME TIMER4_OVF_vect -#define TIMER_CONFIG_KHZ(val) ({ \ - const uint16_t pwmval = SYSCLOCK / 2000 / (val); \ - TCCR4A = (1<> 8; \ - OCR4C = pwmval; \ - TC4H = (pwmval / 3) >> 8; \ - OCR4A = (pwmval / 3) & 255; \ -}) -#define TIMER_CONFIG_NORMAL() ({ \ - TCCR4A = 0; \ - TCCR4B = _BV(CS40); \ - TCCR4C = 0; \ - TCCR4D = 0; \ - TCCR4E = 0; \ - TC4H = (SYSCLOCK * USECPERTICK / 1000000) >> 8; \ - OCR4C = (SYSCLOCK * USECPERTICK / 1000000) & 255; \ - TC4H = 0; \ - TCNT4 = 0; \ -}) -#if defined(CORE_OC4A_PIN) -#define TIMER_PWM_PIN CORE_OC4A_PIN /* Teensy */ -#elif defined(__AVR_ATmega32U4__) -#define TIMER_PWM_PIN 13 /*Leonardo*/ -#else -#error "Please add OC4A pin number here\n" -#endif - - -// defines for timer4 (16 bits) -#elif defined(IR_USE_TIMER4) -#define TIMER_RESET -#define TIMER_ENABLE_PWM (TCCR4A |= _BV(COM4A1)) -#define TIMER_DISABLE_PWM (TCCR4A &= ~(_BV(COM4A1))) -#define TIMER_ENABLE_INTR (TIMSK4 = _BV(OCIE4A)) -#define TIMER_DISABLE_INTR (TIMSK4 = 0) -#define TIMER_INTR_NAME TIMER4_COMPA_vect -#define TIMER_CONFIG_KHZ(val) ({ \ - const uint16_t pwmval = SYSCLOCK / 2000 / (val); \ - TCCR4A = _BV(WGM41); \ - TCCR4B = _BV(WGM43) | _BV(CS40); \ - ICR4 = pwmval; \ - OCR4A = pwmval / 3; \ -}) -#define TIMER_CONFIG_NORMAL() ({ \ - TCCR4A = 0; \ - TCCR4B = _BV(WGM42) | _BV(CS40); \ - OCR4A = SYSCLOCK * USECPERTICK / 1000000; \ - TCNT4 = 0; \ -}) -#if defined(CORE_OC4A_PIN) -#define TIMER_PWM_PIN CORE_OC4A_PIN -#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) -#define TIMER_PWM_PIN 6 /* Arduino Mega */ -#else -#error "Please add OC4A pin number here\n" -#endif - - -// defines for timer5 (16 bits) -#elif defined(IR_USE_TIMER5) -#define TIMER_RESET -#define TIMER_ENABLE_PWM (TCCR5A |= _BV(COM5A1)) -#define TIMER_DISABLE_PWM (TCCR5A &= ~(_BV(COM5A1))) -#define TIMER_ENABLE_INTR (TIMSK5 = _BV(OCIE5A)) -#define TIMER_DISABLE_INTR (TIMSK5 = 0) -#define TIMER_INTR_NAME TIMER5_COMPA_vect -#define TIMER_CONFIG_KHZ(val) ({ \ - const uint16_t pwmval = SYSCLOCK / 2000 / (val); \ - TCCR5A = _BV(WGM51); \ - TCCR5B = _BV(WGM53) | _BV(CS50); \ - ICR5 = pwmval; \ - OCR5A = pwmval / 3; \ -}) -#define TIMER_CONFIG_NORMAL() ({ \ - TCCR5A = 0; \ - TCCR5B = _BV(WGM52) | _BV(CS50); \ - OCR5A = SYSCLOCK * USECPERTICK / 1000000; \ - TCNT5 = 0; \ -}) -#if defined(CORE_OC5A_PIN) -#define TIMER_PWM_PIN CORE_OC5A_PIN -#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) -#define TIMER_PWM_PIN 46 /* Arduino Mega */ -#else -#error "Please add OC5A pin number here\n" -#endif - - -#else // unknown timer -#error "Internal code configuration error, no known IR_USE_TIMER# defined\n" -#endif - - -// defines for blinking the LED -#if defined(CORE_LED0_PIN) -#define BLINKLED CORE_LED0_PIN -#define BLINKLED_ON() (digitalWrite(CORE_LED0_PIN, HIGH)) -#define BLINKLED_OFF() (digitalWrite(CORE_LED0_PIN, LOW)) -#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) -#define BLINKLED 13 -#define BLINKLED_ON() (PORTB |= B10000000) -#define BLINKLED_OFF() (PORTB &= B01111111) -#elif defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644__) -#define BLINKLED 0 -#define BLINKLED_ON() (PORTD |= B00000001) -#define BLINKLED_OFF() (PORTD &= B11111110) -#elif defined(__AVR_ATmega32U4__) && defined(IR_USE_TIMER4_HS) -//Leonardo not teensy. When using Timer4 output is on 13. Therefore disabling blink LED -//You can add an LED elsewhere if you want -#define BLINKLED 1 -#define BLINKLED_ON() (digitalWrite(BLINKLED, HIGH)) -#define BLINKLED_OFF() (digitalWrite(BLINKLED, LOW)) -#else -#define BLINKLED 13 -#define BLINKLED_ON() (PORTB |= B00100000) -#define BLINKLED_OFF() (PORTB &= B11011111) -#endif - -#endif //IRLibTimer_h diff --git a/libraries/IRLib/LICENSE.txt b/libraries/IRLib/LICENSE.txt deleted file mode 100644 index 1a3c3c4..0000000 Binary files a/libraries/IRLib/LICENSE.txt and /dev/null differ diff --git a/libraries/IRLib/README.txt b/libraries/IRLib/README.txt deleted file mode 100644 index ae6b786..0000000 --- a/libraries/IRLib/README.txt +++ /dev/null @@ -1,84 +0,0 @@ -IRLib – an Arduino library for infrared encoding and decoding -Version 1.32 January 2014 -Copyright 2013, 2014 by Chris Young http://cyborg5.com - -This library is a major rewrite of IRemote by Ken Shirriff which was covered -by GNU LESSER GENERAL PUBLIC LICENSE which as I read it allows me to make -modified versions. That same license applies to this modified version. See -his original copyright below. - -The latest Ken Shirriff code can be found at -https://github.com/shirriff/Arduino-IRremote - -My purpose was to reorganize the code to make it easier to add or remove -protocols. As a result I have separated the act of receiving a set of raw timing -codes from the act of decoding them by making them separate classes. That way -the receiving aspect can be more black box and implementers of decoders and -senders can just deal with the decoding of protocols. - -Also added provisions to make the classes base classes that could be extended -with new protocols which would not require recompiling of the original library nor -understanding of its detailed contents. Some of the changes were made to reduce -code size such as unnecessary use of long versus bool. Some changes were just my -weird programming style. Also extended debugging information added. - -IRremote -Version 0.1 July, 2009 -Copyright 2009 Ken Shirriff -For details, see http://arcfn.com/2009/08/multi-protocol-infrared-remote-library.htm -http://arcfn.com - -Interrupt code based on NECIRrcv by Joe Knapp -http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1210243556 -Also influenced by http://zovirl.com/2008/11/12/building-a-universal-remote-with-an-arduino/ - -**************************************************** -The package contains: -IRLib.cpp Code for the library written in object C++ -IRLib.h Header file which you will include in your sketch -IRLibMatch.h Match macros used internally. Need not include this unless you implement - your own protocols -iRLibTimer.h Attempts to detect type of Arduino board and allows you to modify which - interrupt timer you will use. Defaults to timer 2 as did the original KS - library. Alternate board and timer information based on a fork of the - original KS library. That for can be found here. - https://github.com/TKJElectronics/Arduino-IRremote -IRLibRData.h Moved irparams structure and related data to this header to facilitate - user created extensions to IRrecvBase. - -Note: there is no "IRremoteInt.h" header as in the original library. Those values were - moved elsewhere. - -The examples directory contains: -IRanalyze Dumps detailed information about a recent signal. Useful for analyzing - unknown protocols -IRfreq Reports modulation frequency of IR signal. Requires TSMP58000 IR learner -IRhashdecode Demonstrates hash decoder. -IRrecord Recording incoming signal and play it back when a character is sent - through the serial console. By using the console you no longer need - to wire up a pushbutton to run this code. -IRrecvDump Receives a code, attempts to decode it, produces well formatted - output of the results using the new "dump" method. -IRsendDemo Simplistic demo to send a Sony DVD power signal every time a - character is received from the serial monitor. -IRsendJVC Demonstrates sending a code using JVC protocol which is tricky. -IRservo Demonstrates controlling a servo motor using an IR remote -IRserial_remote Demonstrates a Python application that runs on your PC and sends - serial data to Arduino which in turn sends IR remote signals. -Samsung36 Demonstrates how to expand the library without recompiling it. - Also demonstrates how to handle codes that are longer than 32 bits. -DirecTV Demonstrates additional protocol for DirecTV -GIcable Demonstrates additional protocol for GIcable used by Motorola cable boxes -rcmm Additional protocol Phillips RCMM used by AT&T U-Verse boxes -Note: I did not port any of the other demo sketches although I may add IRTest later. -The manuals directory contains: -IRLibReference.docx Reference manual in Microsoft Word format -IRLibReference.pdf Reference manual in Adobe PDF format -Online version of this manual is also available at: - http://tech.cyborg5.com/irlib/docs/ -**************************************************** -The library handles the following protocols: -NEC, Sony, RC5, RC6, Raw all of which were supported in the KS version. -Additionally added Panasonic_Old, JVC, NECx. -Also added KS hash code routines which he released separately. -Example code included but not in the library: Samsung36, DirecTV, GIcable. diff --git a/libraries/IRLib/examples/DirecTV/DirecTV.ino b/libraries/IRLib/examples/DirecTV/DirecTV.ino deleted file mode 100644 index ff57884..0000000 --- a/libraries/IRLib/examples/DirecTV/DirecTV.ino +++ /dev/null @@ -1,201 +0,0 @@ -/* Example program for from IRLib – an Arduino library for infrared encoding and decoding - * Version 1.4 March 2014 - * Copyright 2014 by Chris Young http://cyborg5.com - * Based on original example sketch for IRremote library - * Version 0.11 September, 2009I know prescription and no - * Copyright 2009 Ken Shirriff - * http://www.righto.com/ - */ -/* - * This example demonstrates how to extend this library to add a new protocol - * without actually modifying or recompiling the library itself. It implements the protocol - * used by DirecTV. This protocol actually comes in six different varieties. - * It uses three different frequencies 38, 40, or 57 kHz. It also uses two different varieties - * lead out times either 9000us or 30000us. The default is 38 kHz and 30000us. - * You can use a different constructor for the other varieties. - * This is a modified version of the IRecord example. - * If you would like to make this a permanent part of your library you could copy the class - * prototypes to IRLib.h and the code itself to IRLib.cpp. Search for the word "ADDITIONAL" - * to see where to add various pieces of code. Also see the Samsung36 example for details. - */ -#include -#include - -class IRdecodeDirecTV: public virtual IRdecodeBase -{ -public: - bool decode(void); - bool Repeat; -}; - -class IRsendDirecTV: public virtual IRsendBase -{ -public: - IRsendDirecTV (int khz= 38,bool LongLeadOut=true); - void send(unsigned long data, bool Repeat); - int Freq; - unsigned int LeadOut; -}; - -#define DIRECTV (LAST_PROTOCOL+1) - -/* - * According to http://www.hifi-remote.com/johnsfine/DecodeIR.html#DirecTV - * The IRP notation for this protocol is: - *{38k,600,msb}<1,-1|1,-2|2,-1|2,-2>(5,(5,-2,D:4,F:8,C:4,1,-50)+) {C=7*(F:2:6)+5*(F:2:4)+3*(F:2:2)+(F:2)} - * Unlike most protocols which use a fixed length mark and a variable length or a variable length - * mark a fixed length space, this protocol varies both the mark and the space. - * The stream is still a series of marks and spaces but the length of either of those - * denotes a one or zero. A length of 1200us=logical 1 and length 600us=logical 0 - * It also makes changes to the length of the header mark to devote repeat codes. - * The first header mark should be 6000us but repeat codes should only be 3000us. - */ -bool IRdecodeDirecTV::decode(void) { - long data; int offset; - IRLIB_ATTEMPT_MESSAGE(F("DirecTV")); - if (rawlen != 20) return RAW_COUNT_ERROR; - if (MATCH(rawbuf[1],3000)) - Repeat=true; - else - if (!MATCH(rawbuf[1],6000)){ - return HEADER_MARK_ERROR(6000); - } else { - Repeat=false; - } - if (!MATCH(rawbuf[2],1200)) return HEADER_SPACE_ERROR(1200); - offset=3; data=0; - while (offset < 18) { - if (MATCH(rawbuf[offset],1200)) { - data = (data << 1) | 1; - } - else if (MATCH(rawbuf[offset],600)) { - data <<= 1; - } - else return DATA_MARK_ERROR(1200); - offset++; - if (MATCH(rawbuf[offset],1200)) { - data = (data << 1) | 1; - } - else if (MATCH (rawbuf[offset],600)) { - data <<= 1; - } - else return DATA_SPACE_ERROR(1200); - offset++; - } - if (!MATCH(rawbuf[1],6000)) return DATA_MARK_ERROR(6000); - bits = 16;//set bit length - value = data;//put remaining bits in value - decode_type= static_castDIRECTV; - return true; -}; - -//See the comment at the top about different frequencies and lead out times -IRsendDirecTV::IRsendDirecTV (int khz, bool LongLeadOut){ - Freq=khz; - if (LongLeadOut) LeadOut=50*600; else LeadOut=15*600; -}; - -void IRsendDirecTV::send(unsigned long data, bool Repeat) { - enableIROut(Freq); - if(Repeat) mark(3000); else mark(6000); - space(1200);//Send header - for (int i = 0; i < 8; i++) { - if (data & 0x8000) mark(1200); else mark(600); - data <<= 1; - if (data & 0x8000) space(1200); else space(600); - data <<= 1; - }; - mark(600); - space(LeadOut); -}; - -//Create a custom class that combines this new protocol with all the others -class MyCustomSend: -public virtual IRsend, -public virtual IRsendDirecTV -{ -public: - void send(IRTYPES Type, unsigned long data, int nbits); -}; -void MyCustomSend::send(IRTYPES Type, unsigned long data, int nbits) { - if (Type==DIRECTV) - IRsendDirecTV::send(data,false); - else - IRsend::send(Type, data, nbits); -} -class MyCustomDecode: -public virtual IRdecode, -public virtual IRdecodeDirecTV -{ -public: - virtual bool decode(void); // Calls each decode routine individually - void DumpResults(void); -}; -bool MyCustomDecode::decode(void) { - if (IRdecodeDirecTV::decode()) return true; - return IRdecode::decode (); -} -void MyCustomDecode::DumpResults(void){ - if(decode_type==DIRECTV) { - Serial.print(F("Decoded DirecTV: Value:")); Serial.print(value, HEX); - if (Repeat) Serial.print(F(" repeat flag")); - }; - IRdecode::DumpResults(); -}; - -MyCustomDecode My_Decoder; - -MyCustomSend My_Sender; - -int RECV_PIN = 11; - -IRrecv My_Receiver(RECV_PIN); -IRTYPES codeType; // The type of code -unsigned long codeValue; // The data bits -int codeBits; // The length of the code in bits -bool GotOne; - -void setup() -{ - GotOne=false; - codeType=UNKNOWN; - codeValue=0; - codeBits=0; - Serial.begin(9600); - Serial.println(F("Send a code from your remote and we will record it.")); - Serial.println(F("Type any character and press enter. We will send the recorded code.")); - My_Receiver.enableIRIn(); // Start the receiver -} -void loop() { - if (Serial.available()>0) { - unsigned char c=Serial.read(); - if (c=='p') {//Send a test pattern - GotOne= true; codeType=DIRECTV; codeValue=0x1234; codeBits=16; - } - if(GotOne) { - My_Sender.send(codeType,codeValue,codeBits); - Serial.print(F("Sent ")); - if (codeType== DIRECTV) Serial.print(F("DirecTV")); else Serial.print(Pnames(codeType)); - Serial.print(F(" Value:0x")); - Serial.print(codeValue, HEX); - Serial.print(F(" Bits:")); - Serial.println(codeBits, DEC); - My_Receiver.enableIRIn(); // Re-enable receiver - } - } - else if (My_Receiver.GetResults(&My_Decoder)) { - My_Decoder.decode(); - if(My_Decoder.decode_type == UNKNOWN) { - Serial.println(F("Unknown type received. Ignoring.")); - } else { - codeType= My_Decoder.decode_type; - codeValue= My_Decoder.value; - codeBits= My_Decoder.bits; - GotOne=true; - } - My_Decoder.DumpResults(); - delay(1000); - My_Receiver.resume(); - } -} - diff --git a/libraries/IRLib/examples/GIcable/GIcable.ino b/libraries/IRLib/examples/GIcable/GIcable.ino deleted file mode 100644 index 72aa858..0000000 --- a/libraries/IRLib/examples/GIcable/GIcable.ino +++ /dev/null @@ -1,152 +0,0 @@ -/* Example program for from IRLib – an Arduino library for infrared encoding and decoding - * Version 1.4 March 2014 - * Copyright 2014 by Chris Young http://cyborg5.com - * Based on original example sketch for IRremote library - * Version 0.11 September, 2009I know prescription and no - * Copyright 2009 Ken Shirriff - * http://www.righto.com/ - */ -/* - * This example demonstrates how to extend this library to add a new protocol - * without actually modifying or recompiling the library itself. It implements the protocol - * known as GIcable which is used by some Motorola cable boxes. - * This is a modified version of the IRecord example. - * If you would like to make this a permanent part of your library you could copy the class - * prototypes to IRLib.h and the code itself to IRLib.cpp. Search for the word "ADDITIONAL" - * to see where to add various pieces of code. Also see the Samsung36 example for details. - */ -#include -#include - -class IRdecodeGIcable: public virtual IRdecodeBase -{ -public: - bool decode(void); -}; -class IRsendGIcable: public virtual IRsendBase -{ -public: - void send(unsigned long data, bool Repeat); -}; - -#define GICABLE (LAST_PROTOCOL+1) - -/* The IRP notation for this protocol according to - * http://www.hifi-remote.com/johnsfine/DecodeIR.html#G.I. Cable - * is "{38.7k,490}<1,-4.5|1,-9>(18,-9,F:8,D:4,C:4,1,-84,(18,-4.5,1,-178)*) {C = -(D + F:4 + F:4:4)}" - */ -bool IRdecodeGIcable::decode(void) { - IRLIB_ATTEMPT_MESSAGE(F("GIcable")); - // Check for repeat - if (rawlen == 4 && MATCH(rawbuf[1], 490*18) && MATCH(rawbuf[2],2205)) { - bits = 0; - value = REPEAT; - decode_type= static_castGICABLE; - return true; - } - if(!decodeGeneric(36, 18*490, 9*490, 0, 490, 9*490, 2205/*(4.5*490)*/)) return false; - decode_type= static_castGICABLE; - return true; -}; - -void IRsendGIcable::send(unsigned long data, bool Repeat) { - if(Repeat) { - enableIROut(39); - mark (490*18); space (2205); mark (490); space(220);delay (87);//actually "space(87200);" - } else { - sendGeneric(data,16, 490*18, 490*9, 490, 490, 490*9, 2205, 39, true); - } -}; - -//Create a custom class that combines this new protocol with all the others -class MyCustomSend: -public virtual IRsend, -public virtual IRsendGIcable -{ -public: - void send(IRTYPES Type, unsigned long data, int nbits); -}; -void MyCustomSend::send(IRTYPES Type, unsigned long data, int nbits) { - if (Type==GICABLE){ - IRsendGIcable::send(data,false); - //un-comment the line below to text repeats - //delay(3000); IRsendGIcable::send(data,true); - } - else - IRsend::send(Type, data, nbits); -} -class MyCustomDecode: -public virtual IRdecode, -public virtual IRdecodeGIcable -{ -public: - virtual bool decode(void); // Calls each decode routine individually - void DumpResults(void); -}; -bool MyCustomDecode::decode(void) { - if (IRdecodeGIcable::decode()) return true; - return IRdecode::decode (); -} -void MyCustomDecode::DumpResults(void){ - if(decode_type==GICABLE) { - Serial.print(F("Decoded GIcable: Value:")); Serial.print(value, HEX); - }; - IRdecode::DumpResults(); -}; - -MyCustomDecode My_Decoder; - -MyCustomSend My_Sender; - -int RECV_PIN =11; - -IRrecv My_Receiver(RECV_PIN); -IRTYPES codeType; // The type of code -unsigned long codeValue; // The data bits -int codeBits; // The length of the code in bits -bool GotOne; - -void setup() -{ - GotOne=false; - codeType=UNKNOWN; - codeValue=0; - codeBits=0; - Serial.begin(9600); - Serial.println(F("Send a code from your remote and we will record it.")); - Serial.println(F("Type any character and press enter. We will send the recorded code.")); - My_Receiver.enableIRIn(); // Start the receiver -} -void loop() { - if (Serial.available()>0) { - unsigned char c=Serial.read(); - if (c=='p') {//Send a test pattern - GotOne= true; codeType=GICABLE; codeValue=0x1234; codeBits=16; - } - if(GotOne) { - My_Sender.send(codeType,codeValue,codeBits); - Serial.print(F("Sent ")); - if (codeType== GICABLE) Serial.print(F("GIcable")); else Serial.print(Pnames(codeType)); - Serial.print(F(" Value:0x")); - Serial.print(codeValue, HEX); - Serial.print(F(" Bits:")); - Serial.println(codeBits, DEC); - My_Receiver.enableIRIn(); // Re-enable receiver - } - } - else if (My_Receiver.GetResults(&My_Decoder)) { - My_Decoder.decode(); - if(My_Decoder.decode_type == UNKNOWN) { - Serial.println(F("Unknown type received. Ignoring.")); - } else { - codeType= My_Decoder.decode_type; - codeValue= My_Decoder.value; - codeBits= My_Decoder.bits; - GotOne=true; - } - My_Decoder.DumpResults(); - delay(1000); - My_Receiver.resume(); - } -} - diff --git a/libraries/IRLib/examples/IRanalyze/IRanalyze.ino b/libraries/IRLib/examples/IRanalyze/IRanalyze.ino deleted file mode 100644 index aec2673..0000000 --- a/libraries/IRLib/examples/IRanalyze/IRanalyze.ino +++ /dev/null @@ -1,117 +0,0 @@ -/* Example program for from IRLib – an Arduino library for infrared encoding and decoding - * Version 1.3 January 2014 - * Copyright 2014 by Chris Young http://cyborg5.com - * Based on original example sketch for IRremote library - * Version 0.11 September, 2009 - * Copyright 2009 Ken Shirriff - * http://www.righto.com/ - */ -/* IRanalyze receives repeated values from a remote and averages the results. Should help in - * analyzing unknown protocols. You have to press the same key repeatedly. If you press a - * different key the totals reset and it computes new averages. - */ -#include -#include - -int RECV_PIN = 11; - -unsigned int Samples,i, LowSpace, LowMark, HighMark, HighSpace, interval, - balm,aalm,bahm,aahm,bals,aals,bahs,aahs; -unsigned char bacm,aacm,bacs,aacs, Mark_Count,Space_Count; -unsigned int Accumulated_Time[RAWBUF]; -unsigned long Mark_Avg, Space_Avg,baam,aaam,baas,aaas; -//Try this program with various receivers -IRrecv My_Receiver(RECV_PIN); -//IRrecvLoop My_Receiver(RECV_PIN); -//Use interrupt=0. This is pin 2 on Arduino Uno and Mega, pin 3 on Leonardo -//IRrecvPCI My_Receiver(0); - -IRdecode My_Decoder; -IRTYPES Old_Type; -unsigned long Old_Value; -void setup() -{ - Serial.begin(9600); - delay(1000);while(!Serial); - My_Receiver.enableIRIn(); -// My_Receiver.Mark_Excess=50;//Try different values here - Samples=0;Old_Value=0; Old_Type=UNKNOWN; - Serial.println(F("Send a signal repeatedly. We will report averages and statistics.")); -} -void Tab(void) {Serial.print("\t");}; -void loop() { - if (My_Receiver.GetResults(&My_Decoder)) { - My_Decoder.decode(); - if( (My_Decoder.decode_type != Old_Type) || (My_Decoder.value != Old_Value)) { - Serial.println(F("Resetting counters")); - for(i=0;i - -int RECV_PIN = 11; - -IRrecv My_Receiver(RECV_PIN); -IRdecode My_Decoder; -IRdecodeHash My_Hash_Decoder; - -void setup() -{ - My_Receiver.enableIRIn(); // Start the receiver - Serial.begin(9600); - delay(2000);while(!Serial);//delay for Leonardo -} - -void loop() { - if (My_Receiver.GetResults(&My_Decoder)) {//Puts results in My_Decoder - My_Hash_Decoder.copyBuf(&My_Decoder);//copy the results to the hash decoder - My_Decoder.decode(); - Serial.print("real decode type:"); - Serial.print(Pnames(My_Decoder.decode_type)); - Serial.print(" value: 0x"); - Serial.print(My_Decoder.value, HEX); - My_Hash_Decoder.decode(); - Serial.print(", hash decode: 0x"); - Serial.println(My_Hash_Decoder.hash, HEX); // Do something interesting with this value - delay(1000); - My_Receiver.resume(); - } -} - diff --git a/libraries/IRLib/examples/IRrecord/IRrecord.ino b/libraries/IRLib/examples/IRrecord/IRrecord.ino deleted file mode 100644 index 28e5e61..0000000 --- a/libraries/IRLib/examples/IRrecord/IRrecord.ino +++ /dev/null @@ -1,130 +0,0 @@ -/* Example program for from IRLib – an Arduino library for infrared encoding and decoding - * Version 1.3 January 2014 - * Copyright 2014 by Chris Young http://cyborg5.com - * Based on original example sketch for IRremote library - * Version 0.11 September, 2009 - * Copyright 2009 Ken Shirriff - * http://www.righto.com/ - */ -/* - * IRrecord: record and play back IR signals - * An IR detector/demodulator must be connected to the input RECV_PIN. - * An IR LED must be connected to the appropriate pin.(See IRLibTimer.h) for your - * machine's timers and erupts. - * Record a value by pointing your remote at the device then send any character - * from the serial monitor to send the recorded value. - * Also demonstrates how to use toggle bits which must be controlled outside - * the library routines. - * The logic is: - * If an IR code is received, record it. - * If g serial character is received, send the IR code. - */ - -#include - -int RECV_PIN = 11; - -IRrecv My_Receiver(RECV_PIN); -IRdecode My_Decoder; -IRsend My_Sender; -/* - * Because this version of the library separated the receiver from the decoder, - * technically you would not need to "store" the code outside the decoder object - * for this overly simple example. All of the details would remain in the object. - * However we are going to go ahead and store them just to show you how. - */ -// Storage for the recorded code -IRTYPES codeType; // The type of code -unsigned long codeValue; // The data bits if type is not raw -int codeBits; // The length of the code in bits - -// These values are only stored if it's an unknown type and we are going to use -// raw codes to resend the information. -unsigned int rawCodes[RAWBUF]; // The durations if raw -int rawCount; //The number of interval samples - -bool GotOne, GotNew; - -void setup() -{ - GotOne=false; GotNew=false; - codeType=UNKNOWN; - codeValue=0; - Serial.begin(9600); - delay(2000);while(!Serial);//delay for Leonardo - Serial.println(F("Send a code from your remote and we will record it.")); - Serial.println(F("Type any character and press enter. We will send the recorded code.")); - My_Receiver.enableIRIn(); // Start the receiver -} - -// Stores the code for later playback -void storeCode(void) { - GotNew=true; - codeType = My_Decoder.decode_type; - if (codeType == UNKNOWN) { - Serial.println("Received unknown code, saving as raw"); - // To store raw codes: - // Drop first value (gap) - // As of v1.3 of IRLib global values are already in microseconds rather than ticks - // They have also been adjusted for overreporting/underreporting of marks and spaces - rawCount = My_Decoder.rawlen-1; - for (int i = 1; i <=rawCount; i++) { - rawCodes[i - 1] = My_Decoder.rawbuf[i]; - }; - My_Decoder.DumpResults(); - codeType=UNKNOWN; - } - else { - Serial.print(F("Received ")); - Serial.print(Pnames(codeType)); - if (My_Decoder.value == REPEAT) { - // Don't record a NEC repeat value as that's useless. - Serial.println(F("repeat; ignoring.")); - } - else { - codeValue = My_Decoder.value; - codeBits = My_Decoder.bits; - } - Serial.print(F(" Value:0x")); - Serial.println(My_Decoder.value, HEX); - } -} -void sendCode(int repeat) { - if(codeType== UNKNOWN) { - // Assume 38 KHz - My_Sender.IRsendRaw::send(rawCodes,rawCount,38); - Serial.println(F("Sent raw")); - return; - } - if( !GotNew ) {//We've already sent this so handle toggle bits - if (codeType == RC5) { - codeValue ^= 0x0800; - } - else if (codeType == RC6) { - codeValue ^= 0x10000; - } - } - GotNew=false; - My_Sender.send(codeType,codeValue,codeBits); - Serial.print(F("Sent ")); - Serial.print(Pnames(codeType)); - Serial.print(F(" Value:0x")); - Serial.println(codeValue, HEX); -} - -void loop() { - if (Serial.read() != -1) { - if(GotOne) { - sendCode(0); - My_Receiver.enableIRIn(); // Re-enable receiver - } - } - else if (My_Receiver.GetResults(&My_Decoder)) { - My_Decoder.decode(); - GotOne=true; - storeCode(); - delay(1000); - My_Receiver.resume(); - } -} - diff --git a/libraries/IRLib/examples/IRrecvDump/IRrecvDump.ino b/libraries/IRLib/examples/IRrecvDump/IRrecvDump.ino deleted file mode 100644 index fb8828c..0000000 --- a/libraries/IRLib/examples/IRrecvDump/IRrecvDump.ino +++ /dev/null @@ -1,40 +0,0 @@ -/* Example program for from IRLib – an Arduino library for infrared encoding and decoding - * Version 1.3 January 2014 - * Copyright 2014 by Chris Young http://cyborg5.com - * Based on original example sketch for IRremote library - * Version 0.11 September, 2009 - * Copyright 2009 Ken Shirriff - * http://www.righto.com/ - */ -/* - * IRLib: IRrecvDump - dump details of IR codes with IRrecv - * An IR detector/demodulator must be connected to the input RECV_PIN. - */ - -#include - -int RECV_PIN = 11; - -IRrecv My_Receiver(RECV_PIN); - -IRdecode My_Decoder; -unsigned int Buffer[RAWBUF]; - -void setup() -{ - Serial.begin(9600); - delay(2000);while(!Serial);//delay for Leonardo - My_Receiver.enableIRIn(); // Start the receiver - My_Decoder.UseExtnBuf(Buffer); -} - -void loop() { - if (My_Receiver.GetResults(&My_Decoder)) { - //Restart the receiver so it can be capturing another code - //while we are working on decoding this one. - My_Receiver.resume(); - My_Decoder.decode(); - My_Decoder.DumpResults(); - } -} - diff --git a/libraries/IRLib/examples/IRsendDemo/IRsendDemo.ino b/libraries/IRLib/examples/IRsendDemo/IRsendDemo.ino deleted file mode 100644 index b61217e..0000000 --- a/libraries/IRLib/examples/IRsendDemo/IRsendDemo.ino +++ /dev/null @@ -1,25 +0,0 @@ -/* Example program for from IRLib – an Arduino library for infrared encoding and decoding - * Version 1.3 January 2014 - * Copyright 2014 by Chris Young http://cyborg5.com - * Based on original example sketch for IRremote library - * Version 0.11 September, 2009 - * Copyright 2009 Ken Shirriff - * http://www.righto.com/ - */ -#include - -IRsend My_Sender; - -void setup() -{ - Serial.begin(9600); -} - -void loop() { - if (Serial.read() != -1) { - //send a code every time a character is received from the serial port - //Sony DVD power A8BCA - My_Sender.send(SONY,0xa8bca, 20); - } -} - diff --git a/libraries/IRLib/examples/IRsendJVC/IRsendJVC.ino b/libraries/IRLib/examples/IRsendJVC/IRsendJVC.ino deleted file mode 100644 index a49f0a2..0000000 --- a/libraries/IRLib/examples/IRsendJVC/IRsendJVC.ino +++ /dev/null @@ -1,37 +0,0 @@ -/* Example program for from IRLib – an Arduino library for infrared encoding and decoding - * Version 1.3 January 2014 - * Copyright 2014 by Chris Young http://cyborg5.com - * Based on original example sketch for IRremote library - * Version 0.11 September, 2009 - * Copyright 2009 Ken Shirriff - * http://www.righto.com/ - */ -/* - * JVC sends repeat codes that are identical to the regular JVC codes - * however they have no header. Therefore there is an additional parameter - * that tells you whether or not to send as an original code or as a repeat. - * - * The only device I had to test this protocol was an old JVC VCR. It would only work if at least - * 2 frames are sent separated by 45us of "space". All JVC is the same bit length so we use - * the third parameter as a flag to tell it whether or not to send the header. - * Send once with the third parameter "1" then delay about 50 microseconds and send again - * with the third parameter "0". - */ - -#include - -IRsend My_Sender; - -void setup() -{ - Serial.begin(9600); -} - -//send a code every time a character is received from the serial port -void loop() { - if (Serial.read() != -1) { - My_Sender.send(JVC,0xc2d0,1); delayMicroseconds (50); - My_Sender.send(JVC,0xc2d0,0); delayMicroseconds (50); - } -} - diff --git a/libraries/IRLib/examples/IRserial_remote/IRserial_remote.ino b/libraries/IRLib/examples/IRserial_remote/IRserial_remote.ino deleted file mode 100644 index f710949..0000000 --- a/libraries/IRLib/examples/IRserial_remote/IRserial_remote.ino +++ /dev/null @@ -1,55 +0,0 @@ -/* Example program for from IRLib – an Arduino library for infrared encoding and decoding - * Version 1.3 January 2014 - * Copyright 2014 by Chris Young http://cyborg5.com - * Use serial port to send codes. For details on this project see - http://tech.cyborg5.com/2013/05/30/irlib-tutorial-part-3-overview-sending-ir-codes/ - */ -#include - -IRsend My_Sender; - -int protocol; -long code; -int bits; -void setup() { - Serial.begin(9600); - delay(2000);while(!Serial);//delay for Leonardo -} - -long parseHex (void) { - long Value=0; char C;delay(100); - while (Serial.available()>0) { - C= tolower(Serial.read()); - if ((C>='0')&&(C<='9')) - C=C-'0'; - else - if ((C>='a') && (C<='f')) - C=C-'a'+10; - else - return Value; - Value= C+(Value<<4); - }; - return Value; -} -void parseDelimiter () { - char C; - while(Serial.available()>0) { - C=tolower(Serial.peek()); - if( (C>='0') && (C<='9') )return; - if( (C>='a') && (C<='f') )return; - C=Serial.read();//throwaway delimiters - delay (5); - } -} - -void loop() { - if (Serial.available ()>0) { - protocol = Serial.parseInt (); parseDelimiter(); - code = parseHex (); parseDelimiter(); - bits = Serial.parseInt (); parseDelimiter(); - Serial.print("Prot:"); Serial.print(protocol); - Serial.print(" Code:"); Serial.print(code,HEX); - Serial.print(" Bits:"); Serial.println(bits); - My_Sender.send(IRTYPES(protocol), code, bits); - } -} diff --git a/libraries/IRLib/examples/IRserial_remote/IRserial_remote.py b/libraries/IRLib/examples/IRserial_remote/IRserial_remote.py deleted file mode 100644 index 33cb042..0000000 --- a/libraries/IRLib/examples/IRserial_remote/IRserial_remote.py +++ /dev/null @@ -1,133 +0,0 @@ -# IRLib demo script -# version 1.0 by Chris Young http://tech.cyborg5.com/irlib/ -# Displays a "Virtual remote" on your screen. Clicking on the -# buttons sends serial datato the Arduino which in turn -# since IR signals to a cable box in TV. - -# Import all of the necessary pieces of code -import serial, sys, pygame, pygame.mixer -from pygame.locals import * - -# You will have to edit this to the proper port and speed -ser = serial.Serial('COM4', 9600) - -pygame.init() -# Established screen size, size of buttons and position -size = width, height = 400, 768 -button_size=54; button_offset=71 -button_x1=65;button_y1=39 -max_rows=10; max_columns=4 - -# Specify a font. I'm using Arial narrow bold from my Windows -# font folder. However the default font shown below also works. -myfont =pygame.font.Font ("c:/windows/fonts/ARIALNB.TTF",30) -#myfont=pygame.font.Font(None,36) - -# These are the text labels that will appear on each button -label_text=("TVp", "CBp", "P^", "Pv",\ - "<<", ">", ">>", "->",\ - "Rec", "=", "s", "<-",\ - "Gd", "^", "Fav", "Inf",\ - - "<", "sel", ">", "Lis",\ - "ret", "v", "Prv", "Mnu",\ - "1", "2", "3", "Ch+",\ - - "4", "5", "6", "Ch-",\ - "7", "8", "9", "Vol+",\ - "Pip", "0", "Mut", "Vol-",\ - ) -# Each of these 40 strings of text correspond to the -# protocol in code which will be sent over the USB serial -# to the Arduino. The first number is the protocol number. -# See the defined protocols in "IRLib.h"for the -# enum IRTYPES at about line 50. This example uses -# protocol 3 which is "RC5" used by my Magnavox TV -# and protocol 5 "PANASONIC_OLD" used by my Scientific -# Atlantic SA 8300 DVR. The protocol number is followed by -# the hex code to be transmitted. That is followed by the -# number of bits. Note that the PANASONIC_OLD protocol -# does not need the number of bits specified so they are omitted. -IR_Codes= ("3,180c,13","5,37c107","5,36d924","5,37d904",\ - "5,37291a","5,37990c","5,36293a","5,36b129",\ - "5,375914","5,374117","5,365934","5,37c906",\ - "5,36c127","5,36812f","5,37f101","5,36213b",\ - - "5,37810f","5,366133","5,364137","5,36c926",\ - "5,366932","5,37a10b","5,36e123","5,373918",\ - "5,36113d","5,37111d","5,36912d","5,377111",\ - - "5,37910d","5,365135","5,375115","5,36f121",\ - "5,36d125","5,37d105","5,363139","3,1810,13",\ - "5,37b908","5,373119","3,180d,13","3,1811,13",\ - ) -# This function gets called to shut everything down -def Finished(): - pygame.quit() - sys.exit() - -# Gets the button index based on mouse position. Returned -# value is from 0 to 39 (number of buttons-1) -# Returns -1 if you are not over a button. -def ComputeButton(): - mx,my=pygame.mouse.get_pos() - mx=mx-button_x1 - my=my-button_y1 - bx=mx/button_offset; by=my/button_offset - if bx<0 or bx>=max_columns:return -1 - if by<0 or by> max_rows:return -1 - if (mx%button_offset)>button_size:return -1 - if (my%button_offset)>button_size:return -1 - return bx+by*max_columns - -# Blits the button text from button number "i" -# onto the specified layer using the specified color. -def Show_Text(i,Layer,color=(0,0,0)): - t=label_text[i] - label = myfont.render (t,1,color) - labelpos= label.get_rect() - labelpos.centerx=button_x1+button_size/2+i%max_columns*button_offset - labelpos.centery=button_y1+button_size/2+i/max_columns*button_offset - Layer.blit(label,labelpos) - -# Create the screen and load the background image. -screen = pygame.display.set_mode(size) -bg = pygame.image.load("remotebg.png") - -# Blit black text labels onto the background image -for i in range (max_rows*max_columns): - Show_Text(i, bg) -# Copy the background to the display -screen.blit(bg,(0,0)) -pygame.display.flip() - -# Load the clicking sound -Click=pygame.mixer.Sound("click.wav") - -# Used to detect when the mouse hovers over a different button -previous=-1 - -while 1: - for event in pygame.event.get(): - if event.type == pygame.QUIT: - Finished() - elif event.type == KEYDOWN and event.key == K_ESCAPE: - Finished () - elif event.type == MOUSEBUTTONDOWN: - i=ComputeButton() #which button did we click - if i>=0: - Click.play() #play the sound - ser.write(IR_Codes[i]) #send the codes - elif event.type==MOUSEMOTION: - i=ComputeButton() #which button are we over - if i!=previous: #difference in the last one? - if i>=0: #turn it red - Show_Text(i,screen,(255,0,0)) - else: #or put it back the way it was - screen.blit(bg,(0,0)) - previous=i - pygame.display.flip() #update the display -# That's all folks - - - diff --git a/libraries/IRLib/examples/IRserial_remote/POV-Ray/remotebg.pov b/libraries/IRLib/examples/IRserial_remote/POV-Ray/remotebg.pov deleted file mode 100644 index d964b2f..0000000 --- a/libraries/IRLib/examples/IRserial_remote/POV-Ray/remotebg.pov +++ /dev/null @@ -1,62 +0,0 @@ -//POV-Ray source to generate the background image for IRserial_remote -// create rectangular areas with rounded corners for use as -// buttons and background objects. - -// Render at 1024x768 then crop 312 pixels from each side -// leaving 400x768 final image. -#declare Area=15; //size of area lights -#declare CR=0.1; //corner radius -#declare ER= 0.5; //edge radius -#declare CX= 3; //width from corner to corner -#declare CY= 7.75; //height from corner to corner -#declare BZ=-ER; //Z offset for buttons - -plane {z,0 pigment{rgb<0.8,0.85,1>*0.8}}//background - -#macro Thing (ER,CR,CX,CY,T) - #local Corner= - union { - torus {CR,ER rotate x*90} - cylinder {ER*z,-ER*z,CR} - } - union { - object{Corner translate< CX,CY,0>} - object{Corner translate<-CX,CY,0>} - object{Corner translate< CX,-CY,0>} - object{Corner translate<-CX,-CY,0>} - cylinder{CY*y,-CY*y,ER translate<-CX-CR,0,0>} - cylinder{CY*y,-CY*y,ER translate< CX+CR,0,0>} - cylinder{CX*x,-CX*x,ER translate<0,-CY-CR,0>} - cylinder{CX*x,-CX*x,ER translate<0, CY+CR,0>} - box{<-CX,-CY-CR,-ER>} - box{<-CX-CR,-CY,-ER>} - texture {T} - } -#end - -#declare BX= 0.4; #declare BY=BX;//size of the buttons -#declare White_Texture=texture{pigment{rgb 1}finish {ambient 0.3}} -#declare Blue_Texture=texture{pigment {rgb<0.85,0.9 ,1>}} - -object {Thing(ER,CR,CX,CY, White_Texture)}//main object -//loop through the buttons -#declare R=-4.5; -#while (R<5.5) - #declare C=-1.5; - #while (C<=1.5) - object{Thing(0.1,0.2,(BX*0.8),(BY*0.8), Blue_Texture) - translate - } - #declare C=C+1; - #end - #declare R=R+1; -#end - - -light_source{<50,50,-100>*5 color 0.8 - #if (Area)area_light x*Area,y*Area,9,9#end -} -light_source{<0,0,-400>*3 rgb 1} - -camera{orthographic location <0,0,-120> look_at <0,0,0> angle 11 } -//That's all folks! \ No newline at end of file diff --git a/libraries/IRLib/examples/IRserial_remote/click.wav b/libraries/IRLib/examples/IRserial_remote/click.wav deleted file mode 100644 index dbc4c22..0000000 Binary files a/libraries/IRLib/examples/IRserial_remote/click.wav and /dev/null differ diff --git a/libraries/IRLib/examples/IRserial_remote/remotebg.png b/libraries/IRLib/examples/IRserial_remote/remotebg.png deleted file mode 100644 index 28bc828..0000000 Binary files a/libraries/IRLib/examples/IRserial_remote/remotebg.png and /dev/null differ diff --git a/libraries/IRLib/examples/IRservo/IRservo.ino b/libraries/IRLib/examples/IRservo/IRservo.ino deleted file mode 100644 index 81d78d7..0000000 --- a/libraries/IRLib/examples/IRservo/IRservo.ino +++ /dev/null @@ -1,75 +0,0 @@ -/* Example program for from IRLib – an Arduino library for infrared encoding and decoding - * Version 1.3 January 2014 - * Copyright 2014 by Chris Young http://cyborg5.com - * "IRservo" Control a servo using an IR remote - */ -#include -#include -/* Note: Servo library uses TIMER1. The default timer for IRLib on Arduino Uno - * is TIMER2 so there is no conflict. However a default timer on Arduino Leonardo - * is TIMER1 so you will have to modify the timer used to use TIMER3 or TIMER4 - * as specified in IRLibTimer.h. Also you will need to modify the input being used. - */ -// You will have to set these values depending on the protocol -// and remote codes that you are using. These are from my Sony DVD/VCR -#define MY_PROTOCOL SONY -#define RIGHT_ARROW 0x86bca //Move several clockwise -#define LEFT_ARROW 0x46bca //Move servo counterclockwise -#define SELECT_BUTTON 0xd0bca //Center the servo -#define UP_ARROW 0x42bca //Increased number of degrees servo moves -#define DOWN_ARROW 0xc2bca //Decrease number of degrees servo moves -#define BUTTON_0 0x90bca //Pushing buttons 0-9 moves to fix positions -#define BUTTON_1 0x00bca // each 20 degrees greater -#define BUTTON_2 0x80bca -#define BUTTON_3 0x40bca -#define BUTTON_4 0xc0bca -#define BUTTON_5 0x20bca -#define BUTTON_6 0xa0bca -#define BUTTON_7 0x60bca -#define BUTTON_8 0xe0bca -#define BUTTON_9 0x10bca - -IRrecv My_Receiver(11);//Receive on pin 11 -IRdecode My_Decoder; -Servo My_Servo; // create servo object to control a servo -int pos; // variable to store the servo position -int Speed; // Number of degrees to move each time a left/right button is pressed - -void setup() -{ - My_Receiver.No_Output();//Turn off any unused IR LED output circuit - My_Servo.attach(9); // attaches the servo on pin 9 to the servo object - pos = 90; // start at midpoint 90 degrees - Speed = 3; // servo moves 3 degrees each time left/right is pushed - My_Servo.write(pos); // Set initial position - My_Receiver.enableIRIn(); // Start the receiver -} - -void loop() -{ - if (My_Receiver.GetResults(&My_Decoder)) { - My_Decoder.decode(); - if(My_Decoder.decode_type==MY_PROTOCOL) { - switch(My_Decoder.value) { - case LEFT_ARROW: pos=min(180,pos+Speed); break; - case RIGHT_ARROW: pos=max(0,pos-Speed); break; - case SELECT_BUTTON: pos=90; break; - case UP_ARROW: Speed=min(10, Speed+1); break; - case DOWN_ARROW: Speed=max(1, Speed-1); break; - case BUTTON_0: pos=0*20; break; - case BUTTON_1: pos=1*20; break; - case BUTTON_2: pos=2*20; break; - case BUTTON_3: pos=3*20; break; - case BUTTON_4: pos=4*20; break; - case BUTTON_5: pos=5*20; break; - case BUTTON_6: pos=6*20; break; - case BUTTON_7: pos=7*20; break; - case BUTTON_8: pos=8*20; break; - case BUTTON_9: pos=9*20; break; - } - My_Servo.write(pos); // tell servo to go to position in variable 'pos' - } - My_Receiver.resume(); - } -} - diff --git a/libraries/IRLib/examples/Samsung36/Samsung36.ino b/libraries/IRLib/examples/Samsung36/Samsung36.ino deleted file mode 100644 index b4865d5..0000000 --- a/libraries/IRLib/examples/Samsung36/Samsung36.ino +++ /dev/null @@ -1,258 +0,0 @@ -/* Example program for from IRLib – an Arduino library for infrared encoding and decoding - * Version 1.4 March 2014 - * Copyright 2014 by Chris Young http://cyborg5.com - * Based on original example sketch for IRremote library - * Version 0.11 September, 2009I know prescription and no - * Copyright 2009 Ken Shirriff - * http://www.righto.com/ - */ -/* - * This example demonstrates how to extend this library to add a new protocol - * without actually modifying or recompiling the library itself. It implements a 36 bit - * Samsung protocol that is used on a Blu-ray player that I own. - * Because a 36 bit value will not fit in the value field (only 32 bits) we have to create - * a second value field. This is a modified version of the IRecord example. - */ -#include -#include -/* Although it is not necessary for this example to run, everything in this section - * this section of the code could be moved to the actual IRLib.h file - */ -class IRdecodeSamsung36: public virtual IRdecodeBase -{ -public: - bool decode(void); - unsigned int value2; - void Reset(void); -private: - bool GetBit(void); - int offset; - unsigned long data; -}; - -class IRsendSamsung36: public virtual IRsendBase -{ -public: - void send(unsigned long data, unsigned long data2); -private: - void PutBits (unsigned long data, int nbits); -}; -/* If moving this code to IRLib.h instead of the line below at about - line 60 you should search for the line that says... -#define ADDITIONAL (number) - and change the code to read as follows‘ -#define NECX 7 -#define SAMSUNG36 8 -#define HASH_CODE 9 -#define LAST_PROTOCOL HASH_CODE - Also at approximately line 160 look for the line that says... - , public virtual IRdecodeADDITIONAL - and change it to read... -public virtual IRdecodeNECx, //Be sure to add the comma -public virtual IRdecodeSamsung36 //No comma here - And at about line 238 change to read... -public virtual IRsendNECx, //Be sure to add the comma -public virtual IRsendSamsung36 //No comma here - Which will add this protocol to the master send and decode classes -*/ -#define SAMSUNG36 (LAST_PROTOCOL+1) - -/* Although it is not necessary for this example to run, everything in this section - * this section of the code could be moved to the actual IRLib.cpp file - */ -/* - * According to http://www.hifi-remote.com/johnsfine/DecodeIR.html#Samsung36 - * The IRP notation for this protocol is: - * {38k,500}<1,-1|1,-3>(9,-9,D:8,S:8,1,-9,E:4,F:8,-68u,~F:8,1,-118)+ - * This means it uses 38k frequency. Base timing is multiples of 500. - * A "0" is mark(500) space(500). A "1" is mark (500) space(1500) - * The header is mark(4500) space(4500). - * The header is followed by 16 bits (8 device, 8 sub device) - * This is followed by a mark(500) space(4500). - * This is followed by 12 more bits (4+8) - * This is followed by 68us ofspace. Followed by eight more bits - * and a final stop bit. -*/ -/* Because not all of the data bits are contiguous in the stream - * we created this little routine to get one data bit. - * We then call it in a loop as needed. - */ -bool IRdecodeSamsung36::GetBit(void) { - if (!MATCH(rawbuf[offset],500)) return DATA_MARK_ERROR(500); - offset++; - if (MATCH(rawbuf[offset],1500)) - data = (data << 1) | 1; - else if (MATCH(rawbuf[offset],500)) - data <<= 1; - else return DATA_SPACE_ERROR(1500); - offset++; - return true; -}; -bool IRdecodeSamsung36::decode(void) { - IRLIB_ATTEMPT_MESSAGE(F("Samsung36")); - if (rawlen != 78) return RAW_COUNT_ERROR; - if (!MATCH(rawbuf[1],4500)) return HEADER_MARK_ERROR(4500); - if (!MATCH(rawbuf[2],4500)) return HEADER_SPACE_ERROR(4500); - offset=3; data=0; - //Get first 16 bits - while (offset < 16*2+2) if(!GetBit()) return false; - //Skip middle header - if (!MATCH(rawbuf[offset],500)) return DATA_MARK_ERROR(500); - offset++; - if (!MATCH(rawbuf[offset],4500)) return DATA_SPACE_ERROR(4400); - //save first 16 bits in "value2" and reset data - offset++; value2=data; data=0; - //12 bits into this second segment there is a 68us space - //so we find one of the raw values to eliminate that - rawbuf[62]=rawbuf[62]-68; - //this gets remaining 20 bits - while(offset<77)if(!GetBit()) return false; - bits =36;//set bit length - value = data;//put remaining 12 bits in value - decode_type= static_castSAMSUNG36; - return true; -}; -//The Reset method clears out the data however we have extra data to clear -void IRdecodeSamsung36::Reset(void) { - IRdecodeBase::Reset();//respect your parents - value2=0; -}; -//Similar to GetBits, this routine sends just one bit of data. -//Need this because data bits are not contiguous in the stream -void IRsendSamsung36::PutBits (unsigned long data, int nbits){ - for (int i = 0; i < nbits; i++) { - if (data & 0x80000000) { - mark(500); space(1500); - } else { - mark(500); space(500); - }; - data <<= 1; - } -} - -void IRsendSamsung36::send(unsigned long data, unsigned long data2) { - data <<= 32-20; - data2 <<= 32-16; - enableIROut(38); - mark(4500); space(4500);//Send header - PutBits (data2, 16);//Send data2 16 bits - mark (500); space (4500);//Send break - PutBits (data, 12);//Send 12 bits - space(68);//Send tiny break - data <<= 12; - PutBits (data, 8);mark(500); //Final eight bits and one stop bit - space(118*500);//Lead out is 118 times the base time 500 -}; -/* - * This concludes the portion that you could move to IRLib.cpp - * Additionally at apprx. line 39 add F("Samsung36"), to the list - * between NECx and hash code. - * Also add "case SAMSUNG36:IRsendSamsung36::send(data,nbits); break; - * at about line 238. Also at about 400 add - * if (IRdecodeSamsung36::decode()) return true; - */ - -/* - * The remaining code is unique to the example sketch. - * We will create a custom class which is a combination - * of all other protocols and our new protocol. - */ - -class MyCustomSend: -public virtual IRsend, -public virtual IRsendSamsung36 -{ -public: -//Note: data2 is the number of bits for non-Samsung36 protocols - void send(IRTYPES Type, unsigned long data, int data2); -}; -void MyCustomSend::send(IRTYPES Type, unsigned long data, int data2) { - if (Type==SAMSUNG36) - IRsendSamsung36::send(data,data2); - else - IRsend::send(Type, data, data2); -} -class MyCustomDecode: -public virtual IRdecode, -public virtual IRdecodeSamsung36 -{ -public: - virtual bool decode(void); // Calls each decode routine individually - void DumpResults(void); -}; -bool MyCustomDecode::decode(void) { - if (IRdecodeSamsung36::decode()) return true; - return IRdecode::decode (); -} -void MyCustomDecode::DumpResults(void){ - if(decode_type==SAMSUNG36) { - Serial.print(F("Decoded Samsung36: Value:")); Serial.print(value, HEX); - Serial.print(F(": Value2:")); Serial.print(value2, HEX); - }; - IRdecode::DumpResults(); -}; - -MyCustomDecode My_Decoder; - -MyCustomSend My_Sender; - -int RECV_PIN = 11; - -IRrecv My_Receiver(RECV_PIN); -IRTYPES codeType; // The type of code -unsigned long codeValue; // The data bits -int codeBits; // The length of the code in bits or for Samsung is storage for data2 -bool GotOne; - -void setup() -{ - GotOne=false; - codeType=UNKNOWN; - codeValue=0; - codeBits=0;//Stores data2 on Samsung36. Stores number of bits on another protocols - Serial.begin(9600); - delay(2000); while(!Serial); - Serial.println(F("Send a code from your remote and we will record it.")); - Serial.println(F("Type any character and press enter. We will send the recorded code.")); - My_Receiver.enableIRIn(); // Start the receiver -} -void loop() { - if (Serial.available()>0) { - unsigned char c=Serial.read(); - if (c=='p') {//Send a test pattern - GotOne= true; codeType=SAMSUNG36; codeValue=0x12345; codeBits=0x6789; - } - if(GotOne) { - My_Sender.send(codeType,codeValue,codeBits); - Serial.print(F("Sent ")); - if (codeType==SAMSUNG36) { - Serial.print(F("Samsung36 Value:0x")); - Serial.print(codeValue, HEX); - Serial.print(F(" Value2:0x")); - Serial.println(codeBits, HEX); - } else { - Serial.print(Pnames(codeType)); - Serial.print(F(" Value:0x")); - Serial.print(codeValue, HEX); - Serial.print(F(" Bits:")); - Serial.println(codeBits, DEC); - }; - My_Receiver.enableIRIn(); // Re-enable receiver - } - } - else if (My_Receiver.GetResults(&My_Decoder)) { - My_Decoder.decode(); - if(My_Decoder.decode_type == UNKNOWN) { - Serial.println(F("Unknown type received. Ignoring.")); - } else { - codeType= My_Decoder.decode_type; - codeValue= My_Decoder.value; - codeBits= My_Decoder.bits; - GotOne=true; - } - My_Decoder.DumpResults(); - delay(1000); - My_Receiver.resume(); - } -} - diff --git a/libraries/IRLib/examples/rcmm/rcmm.ino b/libraries/IRLib/examples/rcmm/rcmm.ino deleted file mode 100644 index 989a260..0000000 --- a/libraries/IRLib/examples/rcmm/rcmm.ino +++ /dev/null @@ -1,210 +0,0 @@ -/* Example program for from IRLib – an Arduino library for infrared encoding and decoding - * Version 1.4 March 2014 - * Copyright 2014 by Chris Young http://cyborg5.com - * Based on original example sketch for IRremote library - * Version 0.11 September, 2009I know prescription and no - * Copyright 2009 Ken Shirriff - * http://www.righto.com/ - */ -/* - * This example demonstrates how to extend this library to add a new protocol - * without actually modifying or recompiling the libnonstickrary itself. It implements the - * Phillips RC-MM also known as Nokia Protocol. Is used by AT&T U-Verse cable boxes. - * There are three different varieties that are 12, 24, or 32 bits. - * This is a modified version of the IRecord example. - * If you would like to make this a permanent part of your library you could copy the class - * prototypes to IRLib.h and the code itself to IRLib.cpp. Search for the word "ADDITIONAL" - * to see where to add various pieces of code. Also see the Samsung36 example for details. - */ -#include -#include - -class IRdecodeRCMM: public virtual IRdecodeBase -{ -public: - bool decode(void); -}; - -class IRsendRCMM: public virtual IRsendBase -{ -public: - void send(unsigned long data, unsigned char nbits); -}; - -#define RCMM (LAST_PROTOCOL+1) -#define RCMM_HEAD_MARK 417 -#define RCMM_DATA_MARK 167 -#define RCMM_ZERO 278 -#define RCMM_ONE 444 -#define RCMM_TWO 611 -#define RCMM_THREE 778 - -/* - * According to http://www.hifi-remote.com/johnsfine/DecodeIR.html#Nokia - * The IRP notation for these protocols are: - * Nokia 12 bit: {36k,msb}<164,-276|164,-445|164,-614|164,-783>(412,-276,D:4,F:8,164,-???)+ - * Nokia 24-bit: {36k,msb}<164,-276|164,-445|164,-614|164,-783>(412,-276,D:8,S:8,F:8,164,-???)+ - * Nokia 32 bit: {36k,msb}<164,-276|164,-445|164,-614|164,-783>(412,-276,D:8,S:8,X:8,F:8,164,^100m)+ - * Slightly different timing values are documented at - * http://www.sbprojects.com/knowledge/ir/rcmm.php - * We will use the timing from the latter reference. - * Unlike most protocols which defined sequences for a logical "0" and "1", this protocol - * encodes 2 bits per pulse. Therefore it encodes a logical "2" and "3" as well. - * The length of the mark is constant but the length of the space denotes the bit values. - * Note the 32-bit version uses a toggle bit of 0x8000 and as usual it is up to the end-user - * to implement it outside the library routines. - */ -/* - * Normally IRLib uses a plus or minus percentage to determine if an interval matches the - * desired value. However this protocol uses extremely long intervals of similar length. - * For example using the default 25% tolerance the RCMM_TWO value 611 would be accepted for - * anything between 458 and 763. The low end is actually closer to RCMM_ONE value of 444 - * and the upper range is closer to RCM_THREE value of 778. To implement this protocol - * we created a new match routine ABS_MATCH which allows you to specify an absolute - * number of microseconds of tolerance for comparison. - */ -#define RCMM_TOLERANCE 80 -bool IRdecodeRCMM::decode(void) { - long data; - IRLIB_ATTEMPT_MESSAGE(F("RCMM")); - if ( (rawlen!=(12+2)) && (rawlen!=(24+2)) && (rawlen!=(32+4)) ) return RAW_COUNT_ERROR; - if (!MATCH(rawbuf[1],RCMM_HEAD_MARK)) return HEADER_MARK_ERROR(RCMM_HEAD_MARK); - if (!MATCH(rawbuf[2],RCMM_ZERO)) return HEADER_SPACE_ERROR(RCMM_ZERO); - offset=3; data=0; - while (offset < (rawlen-1)) { - if (!ABS_MATCH(rawbuf[offset],RCMM_DATA_MARK, RCMM_TOLERANCE+50)) return DATA_MARK_ERROR(RCMM_DATA_MARK); - offset++; - if (ABS_MATCH(rawbuf[offset],RCMM_ZERO, RCMM_TOLERANCE) ) { //Logical "0" - data <<= 2; - } - else if (ABS_MATCH(rawbuf[offset],RCMM_ONE, RCMM_TOLERANCE) ) { //Logical "1" - data = (data<<2) + 1; - } - else if (ABS_MATCH(rawbuf[offset],RCMM_TWO, RCMM_TOLERANCE) ) { //Logical "2" - data = (data<<2) + 2; - } - else if (ABS_MATCH(rawbuf[offset],RCMM_THREE, RCMM_TOLERANCE) ) { //Logical "3" - data = (data<<2) + 3; - } - else return DATA_SPACE_ERROR(RCMM_ZERO); - offset++; - } - if (!MATCH(rawbuf[offset],RCMM_DATA_MARK)) return DATA_MARK_ERROR(RCMM_DATA_MARK); - bits = rawlen-4;//set bit length - value = data;//put remaining bits in value - decode_type= static_castRCMM; - return true; -}; - -void IRsendRCMM::send(unsigned long data, unsigned char nbits) { - Extent=0; - data = data << (32 - nbits); - nbits=nbits/2; - enableIROut(36); - mark(RCMM_HEAD_MARK); space(RCMM_ZERO);//Send header - for (int i = 0; i < nbits; i++) { - mark(RCMM_DATA_MARK); - switch (data & 0xC0000000UL) {//use the leftmost two bits - case 0x00000000UL: space(RCMM_ZERO); break; - case 0x40000000UL: space(RCMM_ONE); break; - case 0x80000000UL: space(RCMM_TWO); break; - case 0xC0000000UL: space(RCMM_THREE); break; - default: Serial.println("sending error"); - } - data <<= 2; - }; - mark(RCMM_DATA_MARK); - space(27778-Extent); -}; - -//Create a custom class that combines this new protocol with all the others -class MyCustomSend: -public virtual IRsend, -public virtual IRsendRCMM -{ -public: - void send(IRTYPES Type, unsigned long data, int nbits); -}; -void MyCustomSend::send(IRTYPES Type, unsigned long data, int nbits) { - if (Type==RCMM) - IRsendRCMM::send(data,nbits); - else - IRsend::send(Type, data, nbits); -} -class MyCustomDecode: -public virtual IRdecode, -public virtual IRdecodeRCMM -{ -public: - virtual bool decode(void); // Calls each decode routine individually - void DumpResults(void); -}; -bool MyCustomDecode::decode(void) { - if (IRdecodeRCMM::decode()) return true; - return IRdecode::decode (); -} -void MyCustomDecode::DumpResults(void){ - if(decode_type==RCMM) { - Serial.print(F("Decoded RCMM: Value:")); Serial.print(value, HEX); - }; - IRdecode::DumpResults(); -}; - -MyCustomDecode My_Decoder; - -MyCustomSend My_Sender; - -int RECV_PIN = 11; - -IRrecv My_Receiver(RECV_PIN); -IRTYPES codeType; // The type of code -unsigned long codeValue; // The data bits -int codeBits; // The length of the code in bits or for Samsung is storage for data2 -bool GotOne; -char c; - -void setup() -{ - GotOne=false; - codeType=UNKNOWN; - codeValue=0; - codeBits=0; - Serial.begin(9600);while (! Serial) {}; - Serial.println(F("Send a code from your remote and we will record it.")); - Serial.println(F("Type any character and press enter. We will send the recorded code.")); - My_Receiver.enableIRIn(); // Start the receiver - My_Receiver.Mark_Excess=40; -} -void loop() { - if (Serial.available()>0) { - c=Serial.read(); - if (c=='p') {//Send a test pattern - GotOne= true; codeType=RCMM; codeValue=0x12345678; codeBits= 32; - } - if(GotOne) { - My_Sender.send(codeType,codeValue,codeBits); - Serial.print(F("Sent ")); - if (codeType== RCMM) Serial.print(F("RCMM")); else Serial.print(Pnames(codeType)); - Serial.print(F(" Value:0x")); - Serial.print(codeValue, HEX); - Serial.print(F(" Bits:")); - Serial.println(codeBits, DEC); - My_Receiver.enableIRIn(); // Re-enable receiver - } - } - else if (My_Receiver.GetResults(&My_Decoder)) { - My_Decoder.decode(); - if(My_Decoder.decode_type == UNKNOWN) { - Serial.println(F("Unknown type received. Ignoring.")); - } else { - codeType= My_Decoder.decode_type; - codeValue= My_Decoder.value; - codeBits= My_Decoder.bits; - GotOne=true; - } - My_Decoder.DumpResults(); - delay(1000); - My_Receiver.resume(); - } -} - diff --git a/libraries/IRLib/manuals/IRLibReference.docx b/libraries/IRLib/manuals/IRLibReference.docx deleted file mode 100644 index 08be4cb..0000000 Binary files a/libraries/IRLib/manuals/IRLibReference.docx and /dev/null differ diff --git a/libraries/IRLib/manuals/IRLibReference.pdf b/libraries/IRLib/manuals/IRLibReference.pdf deleted file mode 100644 index 9fe0734..0000000 Binary files a/libraries/IRLib/manuals/IRLibReference.pdf and /dev/null differ diff --git a/libraries/InterruptChain/InterruptChain.cpp b/libraries/InterruptChain/InterruptChain.cpp deleted file mode 100644 index 12570a2..0000000 --- a/libraries/InterruptChain/InterruptChain.cpp +++ /dev/null @@ -1,107 +0,0 @@ -/* - * IntereruptChain library v1.3.0 (20130601) - * - * Copyright 2011-2013 by Randy Simons http://randysimons.nl/ - * - * License: GPLv3. See license.txt - */ - -#include - -void InterruptChainLink::init(InterruptCallback callbackIn, InterruptChainLink *nextIn) { - callback = callbackIn; - next = nextIn; -} - -InterruptChainLink *InterruptChain::chain[MAX_INTERRUPTS] = {NULL}; -byte InterruptChain::mode[MAX_INTERRUPTS] = {CHANGE}; - -void InterruptChain::setMode(byte interruptNr, byte modeIn) { - mode[interruptNr] = modeIn; -} - - - -void InterruptChain::addInterruptCallback(byte interruptNr, InterruptCallback callback) { - InterruptChainLink *prevLink = chain[interruptNr]; // Note: the chain-array is NULL initialized, so the first time prevLink is indeed NULL - - chain[interruptNr] = (InterruptChainLink *) malloc(sizeof(InterruptChainLink)); // malloc instead of new, due to the lack of new / delete support in AVR-libc - chain[interruptNr]->init(callback, prevLink); - - enable(interruptNr); -} - -void InterruptChain::enable(byte interruptNr) { - switch (interruptNr) { - case 0: - attachInterrupt(0, InterruptChain::processInterrupt0, mode[0]); - break; - case 1: - attachInterrupt(1, InterruptChain::processInterrupt1, mode[1]); - break; - case 2: - attachInterrupt(2, InterruptChain::processInterrupt2, mode[2]); - break; - case 3: - attachInterrupt(3, InterruptChain::processInterrupt3, mode[3]); - break; - case 4: - attachInterrupt(4, InterruptChain::processInterrupt4, mode[4]); - break; - case 5: - attachInterrupt(5, InterruptChain::processInterrupt5, mode[5]); - break; - } -} - -void InterruptChain::disable(byte interruptNr) { - detachInterrupt(interruptNr); -} - -void InterruptChain::processInterrupt0() { - InterruptChainLink *current = chain[0]; - while(current) { - (current->callback)(); - current = current->next; - } -} - -void InterruptChain::processInterrupt1() { - InterruptChainLink *current = chain[1]; - while(current) { - (current->callback)(); - current = current->next; - } -} - -void InterruptChain::processInterrupt2() { - InterruptChainLink *current = chain[2]; - while(current) { - (current->callback)(); - current = current->next; - } -} - -void InterruptChain::processInterrupt3() { - InterruptChainLink *current = chain[3]; - while(current) { - (current->callback)(); - current = current->next; - } -} - -void InterruptChain::processInterrupt4() { - InterruptChainLink *current = chain[4]; - while(current) { - (current->callback)(); - current = current->next; - } -} - -void InterruptChain::processInterrupt5() { - InterruptChainLink *current = chain[5]; - while(current) { - (current->callback)(); - current = current->next; - } -} diff --git a/libraries/InterruptChain/InterruptChain.h b/libraries/InterruptChain/InterruptChain.h deleted file mode 100644 index 5e4272a..0000000 --- a/libraries/InterruptChain/InterruptChain.h +++ /dev/null @@ -1,90 +0,0 @@ -/* - * IntereruptChain library v1.3.0 (20130601) - * - * Copyright 2011-2013 by Randy Simons http://randysimons.nl/ - * - * License: GPLv3. See license.txt - */ - -#ifndef InterruptChain_h -#define InterruptChain_h - -#include - -// Arduino Mega has 6 interrupts. For smaller Arduinos and / or to save a few bytes memory you can lower it to 2 or even 1. Don't go higher than 6 tho. -#define MAX_INTERRUPTS 6 - -typedef void (*InterruptCallback)(); - -/** - * For internal use - */ -class InterruptChainLink { - public: - InterruptChainLink *next; - InterruptCallback callback; - - void init(InterruptCallback callbackIn, InterruptChainLink *nextIn); - - void processInterrupt(); -}; - -class InterruptChain { - public: - /** - * Add an interrupt handler on interrupt pin interruptNr. The callback is of the same type as - * Arduino's standard attachInterrupt(). - * - * So, instead of attachInterrupt(0, callback, CHANGE); you can use - * InterruptChain::addInterruptCallback(0, callback); - * - * You can add more than one callback to a single interrupt! The callbacks are called in - * the reversed order in which they were added. - * addInterruptCallback will also call this.enable(interruptNr). - * - */ - static void addInterruptCallback(byte interruptNr, InterruptCallback callbackIn); - - /** - * Enables interrupt handling by InterruptChain for given interrupt pin. Note that this - * is different from Arduino's interrupts(), which will enable _all_ interrupts on the CPU. - * - * @param interruptNr The interrupt pin number for which to enable handling. - */ - static void enable(byte interruptNr); - - /** - * Disables interrupt handling by InterruptChain for given interrupt pin. Note that this - * is different from Arduino's noInterrupts(), which will disable _all_ interrupts on the CPU. - * - * @param interruptNr The interrupt pin number for which to disable handling. - */ - static void disable(byte interruptNr); - - /** - * Set the interrupt mode for given interrupt pin. By default the interrupt mode is CHANGE. - * If you need this changed, best to call setMode before adding interrupt handlers. - * - * @param interruptNr Interrupt to set - * @param modeIn LOW, CHANGE, RISING or FALLING - */ - static void setMode(byte interruptNr, byte modeIn); - - private: - static InterruptChainLink *chain[MAX_INTERRUPTS]; - static byte mode[MAX_INTERRUPTS]; - - static void processInterrupt0(); - - static void processInterrupt1(); - - static void processInterrupt2(); - - static void processInterrupt3(); - - static void processInterrupt4(); - - static void processInterrupt5(); -}; - -#endif diff --git a/libraries/InterruptChain/README.TXT b/libraries/InterruptChain/README.TXT deleted file mode 100644 index 07e06dd..0000000 --- a/libraries/InterruptChain/README.TXT +++ /dev/null @@ -1,36 +0,0 @@ -InterruptChain library v1.3.0 (20130601) for Arduino 1.0 -Made by Randy Simons http://randysimons.nl/ - -This library allows for daisychaining the interrupts, i.e. you can attach -more than one interrupt handler to a single interrupt. - -See the examples for usage. See InterruptChainLib.h for details! - -License: GPLv3. See ./InterruptChain/license.txt - -Latest source and wiki: https://bitbucket.org/fuzzillogic/433mhzforarduino - - -Installation of library: - - Make sure Arduino is closed - - Copy the directory InterruptChain to the Arduino library directory (usually - /libraries/) - See http://arduino.cc/en/Guide/Libraries for detailed instructions. - -Examples are provided. - - -Changelog: -InterruptChain library v1.3.0 (20130601) for Arduino 1.0 - - Dropped support for Arduino pre-1.0 - - Doesn't use recursion internally, and fewer function calls. This should save - some extra bytes in RAM, at the cost of moderately increased Flash usage. - -InterruptChain library v1.2.0 (20120213) for Arduino 0022/1.0 - - Support for Arduino 1.0. - -InterruptChain library v1.1.0 (20110921) for Arduino 0022 - - Added enable, disable. Expanded setMode. - -InterruptChain library v1.0.0 (20110919) for Arduino 0022 - - First release \ No newline at end of file diff --git a/libraries/InterruptChain/examples/Basic/Basic.ino b/libraries/InterruptChain/examples/Basic/Basic.ino deleted file mode 100644 index 84f8236..0000000 --- a/libraries/InterruptChain/examples/Basic/Basic.ino +++ /dev/null @@ -1,52 +0,0 @@ -/** - * Demo of a chained interrupt handler. - * - * This sketch duplicates the signal on digital pin 2 to digital pin 13 (the LED) and - * echos the value on the serial line. (so open up the serial console @ 9600 baud) - * - * Hardware setup for this example: - * - Attach a switch from ground to pin 2, or use a wire from ground to pin 2. - */ - -#include - -void echoLed() { - digitalWrite(13, digitalRead(2)); -} - -void echoSerial() { - // Within interrupts handlers, interrupts are disabled. - // However, Serial doesn't seem to like it when interrupts are disabled, - // causing hangs when the transmit buffer is full. - // First, disable the interrupt chain, to prevent race conditions. - // Then enable interrupts. - InterruptChain::disable(0); - interrupts(); - - if (digitalRead(2)) { - Serial.println("The signal is HIGH!"); - } else { - Serial.println("The signal is LOW!"); - } - - // Disabling interrupts before enabling the interrupt chain. - noInterrupts(); - InterruptChain::enable(0); -} - -void setup() { - Serial.begin(9600); - pinMode(13, OUTPUT); - - // Enable internal pull-up on pin 2. - // This is merely for this demo; it is not required for interrupt handling. - digitalWrite(2, HIGH); - - // Links two callback to interrupt 0 with default mode CHANGE. - InterruptChain::addInterruptCallback(0, echoLed); - InterruptChain::addInterruptCallback(0, echoSerial); -} - -void loop() { - // You can do other stuff here! -} \ No newline at end of file diff --git a/libraries/InterruptChain/examples/ReceiveRemoteAndSensor/ReceiveRemoteAndSensor.ino b/libraries/InterruptChain/examples/ReceiveRemoteAndSensor/ReceiveRemoteAndSensor.ino deleted file mode 100644 index f3805c5..0000000 --- a/libraries/InterruptChain/examples/ReceiveRemoteAndSensor/ReceiveRemoteAndSensor.ino +++ /dev/null @@ -1,109 +0,0 @@ -/* - * This sketch demonstrates how to use InterruptChain to receive and - * decode remote switches (old and new) and remote sensors. - * - * Basically, this sketch combines the features of the ShowReceivedCode - * and ShowReceivedCodeNewKaku examples of RemoteSwitch and the - * ThermoHygroReceiver of RemoteSensor all at the same time! - * - * After uploading, enable the serial monitor at 115200 baud. - * When you press buttons on a 433MHz remote control, as supported by - * RemoteSwitch or NewRemoteSwitch, the code will be echoed. - * At the same time, if data of a remote thermo/hygro-sensor is - * received, as supported by RemoteSensor, it will be echoed as well. - * - * Setup: - * - connect a 433MHz receiver on digital pin 2. - */ - -#include -#include -#include -#include - -void setup() { - Serial.begin(115200); - - // Interrupt -1 to indicate you will call the interrupt handler with InterruptChain - RemoteReceiver::init(-1, 2, showOldCode); - - // Again, interrupt -1 to indicate you will call the interrupt handler with InterruptChain - NewRemoteReceiver::init(-1, 2, showNewCode); - - // And once more, interrupt -1 to indicate you will call the interrupt handler with InterruptChain - SensorReceiver::init(-1, showTempHumi); - - // On interrupt, call the interrupt handlers of remote and sensor receivers - InterruptChain::addInterruptCallback(0, RemoteReceiver::interruptHandler); - InterruptChain::addInterruptCallback(0, NewRemoteReceiver::interruptHandler); - InterruptChain::addInterruptCallback(0, SensorReceiver::interruptHandler); -} - -void loop() { - // You can do other stuff here! -} - -// shows the received code sent from an old-style remote switch -void showOldCode(unsigned long receivedCode, unsigned int period) { - // Print the received code. - Serial.print("Code: "); - Serial.print(receivedCode); - Serial.print(", period: "); - Serial.print(period); - Serial.println("us."); -} - -// Shows the received code sent from an new-style remote switch -void showNewCode(NewRemoteCode receivedCode) { - // Print the received code. - Serial.print("Addr "); - Serial.print(receivedCode.address); - - if (receivedCode.groupBit) { - Serial.print(" group"); - } else { - Serial.print(" unit "); - Serial.print(receivedCode.unit); - } - - switch (receivedCode.switchType) { - case NewRemoteCode::off: - Serial.print(" off"); - break; - case NewRemoteCode::on: - Serial.print(" on"); - break; - case NewRemoteCode::dim: - Serial.print(" dim level "); - Serial.print(receivedCode.dimLevel); - break; - case NewRemoteCode::on_with_dim: - Serial.print(" on with dim level "); - Serial.print(receivedCode.dimLevel); - break; - } - - Serial.print(", period: "); - Serial.print(receivedCode.period); - Serial.println("us."); -} - -// Shows the received sensor data -void showTempHumi(byte *data) { - // is data a ThermoHygro-device? - if ((data[3] & 0x1f) == 0x1e) { - // Yes! - byte channel, randomId; - int temp; - byte humidity; - - // Decode the data - SensorReceiver::decodeThermoHygro(data, channel, randomId, temp, humidity); - - // Print temperature. Note: temp is 10x the actual temperature! - Serial.print("Temperature: "); - Serial.print(temp / 10); // units - Serial.print('.'); - Serial.println(temp % 10); // decimal - } -} diff --git a/libraries/InterruptChain/keywords.txt b/libraries/InterruptChain/keywords.txt deleted file mode 100644 index 7b0c9cc..0000000 --- a/libraries/InterruptChain/keywords.txt +++ /dev/null @@ -1,5 +0,0 @@ -InterruptChain KEYWORD1 -addInterruptCallback KEYWORD2 -setMode KEYWORD2 -enable KEYWORD2 -disable KEYWORD2 \ No newline at end of file diff --git a/libraries/InterruptChain/license.txt b/libraries/InterruptChain/license.txt deleted file mode 100644 index 94a9ed0..0000000 --- a/libraries/InterruptChain/license.txt +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/libraries/LiquidCrystal/.hg_archival.txt b/libraries/LiquidCrystal/.hg_archival.txt deleted file mode 100644 index d71b2ce..0000000 --- a/libraries/LiquidCrystal/.hg_archival.txt +++ /dev/null @@ -1,5 +0,0 @@ -repo: 4745f01bb4722dc06b7b0a75823a95636b078ad4 -node: 4ab8294150b54d466e0b2d19e21bcf8894e0c4ce -branch: default -latesttag: V 1.2.2 -latesttagdistance: 1 diff --git a/libraries/LiquidCrystal/.hgignore b/libraries/LiquidCrystal/.hgignore deleted file mode 100644 index 762efca..0000000 --- a/libraries/LiquidCrystal/.hgignore +++ /dev/null @@ -1,3 +0,0 @@ -syntax: glob -.DS_Store -delay_x.h diff --git a/libraries/LiquidCrystal/.hgtags b/libraries/LiquidCrystal/.hgtags deleted file mode 100644 index ce1444c..0000000 --- a/libraries/LiquidCrystal/.hgtags +++ /dev/null @@ -1,34 +0,0 @@ -350358815c25656fde83ab5c636511e16f2d1b93 V 1.1.2 -350358815c25656fde83ab5c636511e16f2d1b93 V 1.1.2 -3afcaba7f807357817b0deedec59a6dc0452d291 V 1.1.3 -3afcaba7f807357817b0deedec59a6dc0452d291 V 1.1.3 -c57fe4cf1b3544f590ffb1cce38a1af03148cd89 V 1.1.3 -b0a1d4a24de12d4a323b3a8f7564ae282f1f9209 V 1.1.4 -070f1d90be5f7bd513a4c5663f429c39077c06ab V 1.1.5 -cb271438ac1fa67906296cd2c821da61814be2ea V 1.1.6 -cb271438ac1fa67906296cd2c821da61814be2ea V 1.1.6 -82f18d4b8ebca14c59e0f8fc2fef075abb9a5d50 V 1.1.6 -981e5559fab2205d613d3c192a322e16f9a20fb2 V 1.1.7 -df4563d57b5cb8a6f534564f10a5d65935d8ef71 V 1.1.7 -2ec4883f118bb66655dbb4012df70df0a4f75b9b V 1.0.7_RC1 -e1485608a8fcda9e6d3a52380e558005283e2619 V 1.2.0_RC1 -2ec4883f118bb66655dbb4012df70df0a4f75b9b V 1.2.0_RC1 -66821a8054ea8dfacdad6c19397dbf93f6bd7fa5 V 1.0.2_RC1 -e1485608a8fcda9e6d3a52380e558005283e2619 V 1.2.0_RC1 -9a1bd27980a539427b876c5bc9cf76a6e679df25 V 1.2.0_RC1 -e1485608a8fcda9e6d3a52380e558005283e2619 V 1.2.0_RC1 -cdf9b4eb0556635c20da8273dfc1f3204864c0a0 V 1.2.0_RC1 -1cf625ca9242d298a480c655d38ad964cd61ae61 V 1.2.0 -5dc9d6595d270ea757ef0ea9eae017b8f89732f3 V 1.2.1_RC1 -2299ac1b335bb99702ee345ea82f9fe8cbd809ef V 1.2.1_RC1 -5dc9d6595d270ea757ef0ea9eae017b8f89732f3 V 1.2.1_RC1 -2bbd1aad67c3ee1bda2fb8637618514100f49c7c V 1.2.1_RC1 -f3f7c8436a62c7f3d50ba8f7d5790cd4ede94210 V 1.2.1_RC2 -c5879ff3f2e5e0d2a0755022781406bc8045567a V 1.2.1_RC2 -488875877f5714d1e286d9a331e40abe57103efe V 1.2.1_RC3 -a4eb104f6dffbe58fc3fd96a5ef9736be5bd07a4 V 1.2.1_RC3 -83bc88dc5c5637bf982c9d8d3dee1e6d57d13bc4 V 1.2.1_RC4 -2e6269d8b2695bd8d33941c3afe09c61b555a26b V 1.2.1_RC4 -a0910a053530c0a19bfbaa1144d1d3b90fcb5e3b V_1.2.1_RC5 -eac3d34ed9dd1bd80f57098ee563f57fa5df1586 V 1.2.1 -c0432608719bae3cdf60b0cb428181d36b25b945 V 1.2.2 diff --git a/libraries/LiquidCrystal/FastIO.cpp b/libraries/LiquidCrystal/FastIO.cpp deleted file mode 100644 index 2d08690..0000000 --- a/libraries/LiquidCrystal/FastIO.cpp +++ /dev/null @@ -1,267 +0,0 @@ -// --------------------------------------------------------------------------- -// Created by Florian Fida on 20/01/12 -// Copyright 2012 - Under creative commons license 3.0: -// Attribution-ShareAlike CC BY-SA -// http://creativecommons.org/licenses/by-sa/3.0/ -// -// This software is furnished "as is", without technical support, and with no -// warranty, express or implied, as to its usefulness for any purpose. -// --------------------------------------------------------------------------- -// fio_shiftOut1 functions are based on Shif1 protocol developed by Roman Black -// (http://www.romanblack.com/shift1.htm) -// -// Thread Safe: No -// Extendable: Yes -// -// @file FastIO.h -// This file implements basic fast IO routines. -// -// @brief -// -// @version API 1.0.0 -// -// @author Florian Fida - -// -// 2012-03-16 bperrybap updated fio_shiftout() to be smaller & faster -// -// @todo: -// support chipkit: -// (https://github.com/chipKIT32/chipKIT32-MAX/blob/master/hardware/pic32/ -// cores/pic32/wiring_digital.c) -// --------------------------------------------------------------------------- -#include "FastIO.h" - - -fio_register fio_pinToOutputRegister(uint8_t pin, uint8_t initial_state) -{ - pinMode(pin, OUTPUT); - - if(initial_state != SKIP) - { - digitalWrite(pin, initial_state); // also turns off pwm timer - } -#ifdef FIO_FALLBACK - // just wasting memory if not using fast io... - return 0; -#else - return portOutputRegister(digitalPinToPort(pin)); -#endif -} - - -fio_register fio_pinToInputRegister(uint8_t pin) -{ - pinMode(pin, INPUT); - digitalWrite(pin, LOW); // also turns off pwm timer and pullup -#ifdef FIO_FALLBACK - // just wasting memory if not using fast io... - return 0; -#else - return portInputRegister(digitalPinToPort(pin)); -#endif -} - - -fio_bit fio_pinToBit(uint8_t pin) -{ -#ifdef FIO_FALLBACK - // (ab)use the bit variable to store the pin - return pin; -#else - return digitalPinToBitMask(pin); -#endif -} - - -void fio_digitalWrite(fio_register pinRegister, fio_bit pinBit, uint8_t value) -{ -#ifdef FIO_FALLBACK - digitalWrite(pinBit, value); -#else - ATOMIC_BLOCK(ATOMIC_RESTORESTATE) - { - if(value == LOW) - { - fio_digitalWrite_LOW(pinRegister,pinBit); - } - else - { - fio_digitalWrite_HIGH(pinRegister,pinBit); - } - } -#endif -} - -int fio_digitalRead(fio_register pinRegister, uint8_t pinBit) -{ -#ifdef FIO_FALLBACK - return digitalRead (pinBit); -#else - if (*pinRegister & pinBit) - { - return HIGH; - } - return LOW; -#endif -} - -void fio_shiftOut (fio_register dataRegister, fio_bit dataBit, - fio_register clockRegister, fio_bit clockBit, - uint8_t value, uint8_t bitOrder) -{ - // # disable interrupts - int8_t i; - - if(bitOrder == LSBFIRST) - { - for(i = 0; i < 8; i++) - { - ATOMIC_BLOCK(ATOMIC_RESTORESTATE) - { - if(value & 1) - { - fio_digitalWrite_HIGH(dataRegister, dataBit); - } - else - { - fio_digitalWrite_LOW(dataRegister, dataBit); - } - value >>= 1; - fio_digitalWrite_HIGH (clockRegister, clockBit); - fio_digitalWrite_LOW (clockRegister,clockBit); - } - } - - } - else - { - for(i = 0; i < 8; i++) - { - ATOMIC_BLOCK(ATOMIC_RESTORESTATE) - { - if(value & 0x80) - { - fio_digitalWrite_HIGH(dataRegister, dataBit); - } - else - { - fio_digitalWrite_LOW(dataRegister, dataBit); - } - value <<= 1; - fio_digitalWrite_HIGH (clockRegister, clockBit); - fio_digitalWrite_LOW (clockRegister,clockBit); - } - } - } -} - - -void fio_shiftOut(fio_register dataRegister, fio_bit dataBit, - fio_register clockRegister, fio_bit clockBit) -{ - ATOMIC_BLOCK(ATOMIC_RESTORESTATE) - { - // shift out 0x0 (B00000000) fast, byte order is irrelevant - fio_digitalWrite_LOW (dataRegister, dataBit); - - for(uint8_t i = 0; i<8; ++i) - { - fio_digitalWrite_HIGH (clockRegister, clockBit); - fio_digitalWrite_SWITCH (clockRegister, clockBit); - } - } -} - - -void fio_shiftOut1_init(uint8_t pin) -{ - fio_shiftOut1_init(fio_pinToOutputRegister(pin,HIGH),fio_pinToBit(pin)); -} - -void fio_shiftOut1_init(fio_register shift1Register, fio_bit shift1Bit) -{ - // Make sure that capacitors are charged - // 300us is an educated guess... - fio_digitalWrite(shift1Register,shift1Bit,HIGH); - delayMicroseconds(300); -} - - -void fio_shiftOut1(fio_register shift1Register, fio_bit shift1Bit, uint8_t value, - boolean noLatch) -{ - /* - * this function are based on Shif1 protocol developed by Roman Black - * (http://www.romanblack.com/shift1.htm) - * - * test sketches: - * http://pastebin.com/raw.php?i=2hnC9v2Z - * http://pastebin.com/raw.php?i=bGg4DhXQ - * http://pastebin.com/raw.php?i=tg1ZFiM5 - * http://pastebin.com/raw.php?i=93ExPDD3 - cascading - * tested with: - * TPIC6595N - seems to work fine (circuit: http://www.3guys1laser.com/ - * arduino-one-wire-shift-register-prototype) - * 7HC595N - */ - - // iterate but ignore last bit (is it correct now?) - for(int8_t i = 7; i>=0; --i) - { - - // assume that pin is HIGH (smokin' pot all day... :) - requires - // initialization - if(value & _BV(i)) - { - ATOMIC_BLOCK(ATOMIC_RESTORESTATE) - { - // HIGH = 1 Bit - fio_digitalWrite_SWITCHTO(shift1Register,shift1Bit,LOW); - //hold pin LOW for 1us - done! :) - fio_digitalWrite_SWITCHTO(shift1Register,shift1Bit,HIGH); - } // end critical section - //hold pin HIGH for 15us - delayMicroseconds(15); - } - else - { - ATOMIC_BLOCK(ATOMIC_RESTORESTATE) - { - // LOW = 0 Bit - fio_digitalWrite_SWITCHTO(shift1Register,shift1Bit,LOW); - // hold pin LOW for 15us - delayMicroseconds(15); - fio_digitalWrite_SWITCHTO(shift1Register,shift1Bit,HIGH); - } // end critical section - - // hold pin HIGH for 30us - delayMicroseconds(30); - } - if(!noLatch && i==1) - { - break; - } - } - - if(!noLatch) - { - ATOMIC_BLOCK(ATOMIC_RESTORESTATE) - { - // send last bit (=LOW) and Latch command - fio_digitalWrite_SWITCHTO(shift1Register,shift1Bit,LOW); - } // end critical section - delayMicroseconds(199); // Hold pin low for 200us - - ATOMIC_BLOCK(ATOMIC_RESTORESTATE) - { - fio_digitalWrite_HIGH(shift1Register,shift1Bit); - } // end critical section - delayMicroseconds(299); // Hold pin high for 300us and leave it that - // way - using explicit HIGH here, just in case. - } -} - -void fio_shiftOut1(uint8_t pin, uint8_t value, boolean noLatch) -{ - fio_shiftOut1(fio_pinToOutputRegister(pin, SKIP),fio_pinToBit(pin),value, noLatch); -} diff --git a/libraries/LiquidCrystal/FastIO.h b/libraries/LiquidCrystal/FastIO.h deleted file mode 100644 index 81e8f30..0000000 --- a/libraries/LiquidCrystal/FastIO.h +++ /dev/null @@ -1,219 +0,0 @@ -// --------------------------------------------------------------------------- -// Created by Florian Fida on 20/01/12 -// Copyright 2012 - Under creative commons license 3.0: -// Attribution-ShareAlike CC BY-SA -// http://creativecommons.org/licenses/by-sa/3.0/ -// -// This software is furnished "as is", without technical support, and with no -// warranty, express or implied, as to its usefulness for any purpose. -// --------------------------------------------------------------------------- -// fio_shiftOut1 functions are based on Shif1 protocol developed by Roman Black -// (http://www.romanblack.com/shift1.htm) -// -// Thread Safe: No -// Extendable: Yes -// -// @file FastIO.h -// This file implements basic fast IO routines. -// -// @brief -// -// @version API 1.0.0 -// -// @author Florian Fida - -// 2012-03-16 bperrybap mods for chipkit32 (pic32) Arduino -// support chipkit: -// (https://github.com/chipKIT32/chipKIT32-MAX/blob/master/hardware/pic32/ -// cores/pic32/wiring_digital.c) -// --------------------------------------------------------------------------- -#ifndef _FAST_IO_H_ -#define _FAST_IO_H_ - -#if (ARDUINO < 100) -#include -#else -#include -#endif - -#include // pleasing sanguino core -#include - - -#define SKIP 0x23 - -#if defined (__AVR__) -#include // for critical section management -typedef uint8_t fio_bit; -typedef volatile uint8_t *fio_register; - - -#elif defined(__PIC32MX__) -typedef uint32_t fio_bit; -typedef volatile uint32_t *fio_register; - - -#else -// fallback to Arduino standard digital i/o routines -#define FIO_FALLBACK -#define ATOMIC_BLOCK(dummy) if(true) -#define ATOMIC_RESTORESTATE -typedef uint8_t fio_bit; -typedef uint8_t fio_register; -#endif - - - -#if !defined(FIO_FALLBACK) && !defined(ATOMIC_BLOCK) -/* - * Define an ATOMIC_BLOCK that implements ATOMIC_FORCEON type - * Using the portable Arduino interrupts() and noInterrupts() - */ -#define ATOMIC_RESTORESTATE ATOMIC_FORCEON // sorry, no support for save/restore yet. -#define ATOMIC_FORCEON uint8_t sreg_save \ - __attribute__((__cleanup__(__iSeiParam))) = 0 - -static __inline__ uint8_t __iCliRetVal(void) -{ - noInterrupts(); - return(1); -} -static __inline__ void __iSeiParam(const uint8_t *__s) -{ - interrupts(); -} -#define ATOMIC_BLOCK(type) for(type, __Todo = __iCliRetVal(); __Todo; __Todo = 0) - -#endif // end of block to create compatible ATOMIC_BLOCK() - - - -/*! - @function - @abstract Get the output register for specified pin. - @discussion if fast digital IO is disabled this function returns NULL - @param pin[in] Number of a digital pin - @result Register - */ -fio_register fio_pinToOutputRegister(uint8_t pin, uint8_t initial_state = LOW); - -/*! - @function - @abstract Get the input register for specified pin. - @discussion if fast digital IO is disabled this function returns NULL - @param pin[in] Number of a digital pin - @result Register - */ -fio_register fio_pinToInputRegister(uint8_t pin); - -/*! - @function - @abstract Find the bit which belongs to specified pin - @discussion if fast digitalWrite is disabled this function returns the pin - @param pin[in] Number of a digital pin - @result Bit - */ -fio_bit fio_pinToBit(uint8_t pin); - - -/*! - @method - @abstract direct digital write - @discussion without any checks - @discussion falls back to normal digitalWrite if fast io is disabled - @param pinRegister[in] Register - ignored if fast digital write is disabled - @param pinBit[in] Bit - Pin if fast digital write is disabled - @param value[in] desired output - */ -// __attribute__ ((always_inline)) /* let the optimizer decide that for now */ -void fio_digitalWrite ( fio_register pinRegister, fio_bit pinBit, uint8_t value ); - -/** - * This is where the magic happens that makes things fast. - * Implemented as preprocessor directives to force inlining - * SWITCH is fast for FIO but probably slow for FIO_FALLBACK so SWITCHTO is recommended if the value is known. - */ - -#ifndef FIO_FALLBACK -#define fio_digitalWrite_LOW(reg,bit) *reg &= ~bit -#define fio_digitalWrite_HIGH(reg,bit) *reg |= bit -#define fio_digitalWrite_SWITCH(reg,bit) *reg ^= bit -#define fio_digitalWrite_SWITCHTO(reg,bit,val) fio_digitalWrite_SWITCH(reg,bit) -#else -// reg -> dummy NULL, bit -> pin -#define fio_digitalWrite_HIGH(reg,bit) digitalWrite(bit,HIGH) -#define fio_digitalWrite_LOW(reg,bit) digitalWrite(bit,LOW) -#define fio_digitalWrite_SWITCH(reg,bit) digitalWrite(bit, !digitalRead(bit)) -#define fio_digitalWrite_SWITCHTO(reg,bit,val) digitalWrite(bit,val); -#endif - -/*! - @function - @abstract direct digital read - @discussion without any checks - @discussion falls back to normal digitalRead if fast io is disabled - @param pinRegister[in] Register - ignored if fast io is disabled - @param pinBit[in] Bit - Pin if fast io is disabled - @result Value read from pin - */ -int fio_digitalRead ( fio_register pinRegister, fio_bit pinBit ); - -/*! - @method - @abstract faster shift out - @discussion using fast digital write - @discussion falls back to normal digitalWrite if fastio is disabled - @param dataRegister[in] Register of data pin - ignored if fast digital write is disabled - @param dataBit[in] Bit of data pin - Pin if fast digital write is disabled - @param clockRegister[in] Register of data pin - ignored if fast digital write is disabled - @param clockBit[in] Bit of data pin - Pin if fast digital write is disabled - @param bitOrder[in] bit order - */ -void fio_shiftOut( fio_register dataRegister, fio_bit dataBit, fio_register clockRegister, - fio_bit clockBit, uint8_t value, uint8_t bitOrder ); - -/*! - @method - @abstract faster shift out clear - @discussion using fast digital write - @discussion falls back to normal digitalWrite if fastio is disabled - @param dataRegister[in] Register of data pin - ignored if fast digital write is disabled - @param dataBit[in] Bit of data pin - Pin if fast digital write is disabled - @param clockRegister[in] Register of data pin - ignored if fast digital write is disabled - @param clockBit[in] Bit of data pin - Pin if fast digital write is disabled - */ -void fio_shiftOut(fio_register dataRegister, fio_bit dataBit, fio_register clockRegister, fio_bit clockBit); - -/*! - * @method - * @abstract one wire shift out - * @discussion protocol needs initialisation (fio_shiftOut1_init) - * @param shift1Register[in] pins register - * @param shift1Bit[in] pins bit - * @param value[in] value to shift out, last byte is ignored and always shifted out LOW - */ -void fio_shiftOut1(fio_register shift1Register, fio_bit shift1Bit, uint8_t value, boolean noLatch = false); -/*! - * @method - * @abstract one wire shift out - * @discussion protocol needs initialisation (fio_shiftOut1_init) - * @param pin[in] digital pin - * @param value[in] value to shift out, last byte is ignored and always shifted out LOW - */ -void fio_shiftOut1(uint8_t pin, uint8_t value, boolean noLatch = false); -/*! - * @method - * @abstract initializes one wire shift out protocol - * @discussion Puts pin to HIGH state and delays until Capacitors are charged. - * @param shift1Register[in] pins register - * @param shift1Bit[in] pins bit - */ -void fio_shiftOut1_init(fio_register shift1Register, fio_bit shift1Bit); -/*! - * @method - * @abstract initializes one wire shift out protocol - * @discussion Puts pin to HIGH state and delays until Capacitors are charged. - * @param pin[in] digital pin - */ -void fio_shiftOut1_init(uint8_t pin); - -#endif // FAST_IO_H diff --git a/libraries/LiquidCrystal/I2CIO.cpp b/libraries/LiquidCrystal/I2CIO.cpp deleted file mode 100644 index ddda7d3..0000000 --- a/libraries/LiquidCrystal/I2CIO.cpp +++ /dev/null @@ -1,198 +0,0 @@ -// --------------------------------------------------------------------------- -// Created by Francisco Malpartida on 20/08/11. -// Copyright 2011 - Under creative commons license 3.0: -// Attribution-ShareAlike CC BY-SA -// -// This software is furnished "as is", without technical support, and with no -// warranty, express or implied, as to its usefulness for any purpose. -// -// Thread Safe: No -// Extendable: Yes -// -// @file I2CIO.h -// This file implements a basic IO library using the PCF8574 I2C IO Expander -// chip. -// -// @brief -// Implement a basic IO library to drive the PCF8574* I2C IO Expander ASIC. -// The library implements basic IO general methods to configure IO pin direction -// read and write uint8_t operations and basic pin level routines to set or read -// a particular IO port. -// -// -// @version API 1.0.0 -// -// @author F. Malpartida - fmalpartida@gmail.com -// --------------------------------------------------------------------------- -#if (ARDUINO < 100) -#include -#else -#include -#endif - -#include - -#include -#include "I2CIO.h" - -// CLASS VARIABLES -// --------------------------------------------------------------------------- - - -// CONSTRUCTOR -// --------------------------------------------------------------------------- -I2CIO::I2CIO ( ) -{ - _i2cAddr = 0x0; - _dirMask = 0xFF; // mark all as INPUTs - _shadow = 0x0; // no values set - _initialised = false; -} - -// PUBLIC METHODS -// --------------------------------------------------------------------------- - -// -// begin -int I2CIO::begin ( uint8_t i2cAddr ) -{ - _i2cAddr = i2cAddr; - - Wire.begin ( ); - - _initialised = Wire.requestFrom ( _i2cAddr, (uint8_t)1 ); - -#if (ARDUINO < 100) - _shadow = Wire.receive (); -#else - _shadow = Wire.read (); // Remove the byte read don't need it. -#endif - - return ( _initialised ); -} - -// -// pinMode -void I2CIO::pinMode ( uint8_t pin, uint8_t dir ) -{ - if ( _initialised ) - { - if ( OUTPUT == dir ) - { - _dirMask &= ~( 1 << pin ); - } - else - { - _dirMask |= ( 1 << pin ); - } - } -} - -// -// portMode -void I2CIO::portMode ( uint8_t dir ) -{ - - if ( _initialised ) - { - if ( dir == INPUT ) - { - _dirMask = 0xFF; - } - else - { - _dirMask = 0x00; - } - } -} - -// -// read -uint8_t I2CIO::read ( void ) -{ - uint8_t retVal = 0; - - if ( _initialised ) - { - Wire.requestFrom ( _i2cAddr, (uint8_t)1 ); -#if (ARDUINO < 100) - retVal = ( _dirMask & Wire.receive ( ) ); -#else - retVal = ( _dirMask & Wire.read ( ) ); -#endif - - } - return ( retVal ); -} - -// -// write -int I2CIO::write ( uint8_t value ) -{ - int status = 0; - - if ( _initialised ) - { - // Only write HIGH the values of the ports that have been initialised as - // outputs updating the output shadow of the device - _shadow = ( value & ~(_dirMask) ); - - Wire.beginTransmission ( _i2cAddr ); -#if (ARDUINO < 100) - Wire.send ( _shadow ); -#else - Wire.write ( _shadow ); -#endif - status = Wire.endTransmission (); - } - return ( (status == 0) ); -} - -// -// digitalRead -uint8_t I2CIO::digitalRead ( uint8_t pin ) -{ - uint8_t pinVal = 0; - - // Check if initialised and that the pin is within range of the device - // ------------------------------------------------------------------- - if ( ( _initialised ) && ( pin <= 7 ) ) - { - // Remove the values which are not inputs and get the value of the pin - pinVal = this->read() & _dirMask; - pinVal = ( pinVal >> pin ) & 0x01; // Get the pin value - } - return (pinVal); -} - -// -// digitalWrite -int I2CIO::digitalWrite ( uint8_t pin, uint8_t level ) -{ - uint8_t writeVal; - int status = 0; - - // Check if initialised and that the pin is within range of the device - // ------------------------------------------------------------------- - if ( ( _initialised ) && ( pin <= 7 ) ) - { - // Only write to HIGH the port if the port has been configured as - // an OUTPUT pin. Add the new state of the pin to the shadow - writeVal = ( 1 << pin ) & ~_dirMask; - if ( level == HIGH ) - { - _shadow |= writeVal; - - } - else - { - _shadow &= ~writeVal; - } - status = this->write ( _shadow ); - } - return ( status ); -} - -// -// PRIVATE METHODS -// --------------------------------------------------------------------------- diff --git a/libraries/LiquidCrystal/I2CIO.h b/libraries/LiquidCrystal/I2CIO.h deleted file mode 100644 index e05f16b..0000000 --- a/libraries/LiquidCrystal/I2CIO.h +++ /dev/null @@ -1,148 +0,0 @@ -// --------------------------------------------------------------------------- -// Created by Francisco Malpartida on 20/08/11. -// Copyright 2011 - Under creative commons license 3.0: -// Attribution-ShareAlike CC BY-SA -// -// This software is furnished "as is", without technical support, and with no -// warranty, express or implied, as to its usefulness for any purpose. -// -// Thread Safe: No -// Extendable: Yes -// -// @file I2CIO.h -// This file implements a basic IO library using the PCF8574 I2C IO Expander -// chip. -// -// @brief -// Implement a basic IO library to drive the PCF8574* I2C IO Expander ASIC. -// The library implements basic IO general methods to configure IO pin direction -// read and write uint8_t operations and basic pin level routines to set or read -// a particular IO port. -// -// @version API 1.0.0 -// -// @author F. Malpartida - fmalpartida@gmail.com -// --------------------------------------------------------------------------- - -#ifndef _I2CIO_H_ -#define _I2CIO_H_ - -#include - -#define _I2CIO_VERSION "1.0.0" - -/*! - @class - @abstract I2CIO - @discussion Library driver to control PCF8574 based ASICs. Implementing - library calls to set/get port through I2C bus. - */ - -class I2CIO -{ -public: - /*! - @method - @abstract Constructor method - @discussion Class constructor constructor. - */ - I2CIO ( ); - - /*! - @method - @abstract Initializes the device. - @discussion This method initializes the device allocating an I2C address. - This method is the first method that should be call prior to calling any - other method form this class. On initialization all pins are configured - as INPUT on the device. - - @param i2cAddr: I2C Address where the device is located. - @result 1 if the device was initialized correctly, 0 otherwise - */ - int begin ( uint8_t i2cAddr ); - - /*! - @method - @abstract Sets the mode of a particular pin. - @discussion Sets the mode of a particular pin to INPUT, OUTPUT. digitalWrite - has no effect on pins which are not declared as output. - - @param pin[in] Pin from the I2C IO expander to be configured. Range 0..7 - @param dir[in] Pin direction (INPUT, OUTPUT). - */ - void pinMode ( uint8_t pin, uint8_t dir ); - - /*! - @method - @abstract Sets all the pins of the device in a particular direction. - @discussion This method sets all the pins of the device in a particular - direction. This method is useful to set all the pins of the device to be - either inputs or outputs. - @param dir[in] Direction of all the pins of the device (INPUT, OUTPUT). - */ - void portMode ( uint8_t dir ); - - /*! - @method - @abstract Reads all the pins of the device that are configured as INPUT. - @discussion Reads from the device the status of the pins that are configured - as INPUT. During initialization all pins are configured as INPUTs by default. - Please refer to pinMode or portMode. - - @param none - */ - uint8_t read ( void ); - - /*! - @method - @abstract Read a pin from the device. - @discussion Reads a particular pin from the device. To read a particular - pin it has to be configured as INPUT. During initialization all pins are - configured as INPUTs by default. Please refer to pinMode or portMode. - - @param pin[in] Pin from the port to read its status. Range (0..7) - @result Returns the pin status (HIGH, LOW) if the pin is configured - as an output, reading its value will always return LOW regardless of its - real state. - */ - uint8_t digitalRead ( uint8_t pin ); - - /*! - @method - @abstract Write a value to the device. - @discussion Writes to a set of pins in the device. The value is the binary - representation of all the pins in device. The value written is masked with - the configuration of the direction of the pins; to change the state of - a particular pin with this method, such pin has to be configured as OUTPUT - using the portMode or pinMode methods. If no pins have been configured as - OUTPUTs this method will have no effect. - - @param value[in] value to be written to the device. - @result 1 on success, 0 otherwise - */ - int write ( uint8_t value ); - - /*! - @method - @abstract Writes a digital level to a particular pin. - @discussion Write a level to the indicated pin of the device. For this - method to have effect, the pin has to be configured as OUTPUT using the - pinMode or portMode methods. - - @param pin[in] device pin to change level. Range (0..7). - @para level[in] logic level to set the pin at (HIGH, LOW). - @result 1 on success, 0 otherwise. - */ - int digitalWrite ( uint8_t pin, uint8_t level ); - - - -private: - uint8_t _shadow; // Shadow output - uint8_t _dirMask; // Direction mask - uint8_t _i2cAddr; // I2C address - bool _initialised; // Initialised object - -}; - -#endif \ No newline at end of file diff --git a/libraries/LiquidCrystal/LCD.cpp b/libraries/LiquidCrystal/LCD.cpp deleted file mode 100644 index e7af077..0000000 --- a/libraries/LiquidCrystal/LCD.cpp +++ /dev/null @@ -1,370 +0,0 @@ -// --------------------------------------------------------------------------- -// Created by Francisco Malpartida on 20/08/11. -// Copyright 2011 - Under creative commons license 3.0: -// Attribution-ShareAlike CC BY-SA -// -// This software is furnished "as is", without technical support, and with no -// warranty, express or implied, as to its usefulness for any purpose. -// -// Thread Safe: No -// Extendable: Yes -// -// @file LCD.cpp -// This file implements a basic liquid crystal library that comes as standard -// in the Arduino SDK. -// -// @brief -// This is a basic implementation of the HD44780 library of the -// Arduino SDK. This library is a refactored version of the one supplied -// in the Arduino SDK in such a way that it simplifies its extension -// to support other mechanism to communicate to LCDs such as I2C, Serial, SR, ... -// The original library has been reworked in such a way that this will be -// the base class implementing all generic methods to command an LCD based -// on the Hitachi HD44780 and compatible chipsets. -// -// This base class is a pure abstract class and needs to be extended. As reference, -// it has been extended to drive 4 and 8 bit mode control, LCDs and I2C extension -// backpacks such as the I2CLCDextraIO using the PCF8574* I2C IO Expander ASIC. -// -// -// @version API 1.1.0 -// -// 2012.03.29 bperrybap - changed comparision to use LCD_5x8DOTS rather than 0 -// @author F. Malpartida - fmalpartida@gmail.com -// --------------------------------------------------------------------------- -#include -#include -#include - -#if (ARDUINO < 100) -#include -#else -#include -#endif - -#include "LCD.h" - -// CLASS CONSTRUCTORS -// --------------------------------------------------------------------------- -// Constructor -LCD::LCD () -{ - -} - -// PUBLIC METHODS -// --------------------------------------------------------------------------- -// When the display powers up, it is configured as follows: -// 0. LCD starts in 8 bit mode -// 1. Display clear -// 2. Function set: -// DL = 1; 8-bit interface data -// N = 0; 1-line display -// F = 0; 5x8 dot character font -// 3. Display on/off control: -// D = 0; Display off -// C = 0; Cursor off -// B = 0; Blinking off -// 4. Entry mode set: -// I/D = 1; Increment by 1 -// S = 0; No shift -// -// Note, however, that resetting the Arduino doesn't reset the LCD, so we -// can't assume that its in that state when a application starts (and the -// LiquidCrystal constructor is called). -// A call to begin() will reinitialize the LCD. -// -void LCD::begin(uint8_t cols, uint8_t lines, uint8_t dotsize) -{ - if (lines > 1) - { - _displayfunction |= LCD_2LINE; - } - _numlines = lines; - _cols = cols; - - // for some 1 line displays you can select a 10 pixel high font - // ------------------------------------------------------------ - if ((dotsize != LCD_5x8DOTS) && (lines == 1)) - { - _displayfunction |= LCD_5x10DOTS; - } - - // SEE PAGE 45/46 FOR INITIALIZATION SPECIFICATION! - // according to datasheet, we need at least 40ms after power rises above 2.7V - // before sending commands. Arduino can turn on way before 4.5V so we'll wait - // 50 - // --------------------------------------------------------------------------- - delay (100); // 100ms delay - - //put the LCD into 4 bit or 8 bit mode - // ------------------------------------- - if (! (_displayfunction & LCD_8BITMODE)) - { - // this is according to the hitachi HD44780 datasheet - // figure 24, pg 46 - - // we start in 8bit mode, try to set 4 bit mode - // Special case of "Function Set" - send(0x03, FOUR_BITS); - delayMicroseconds(4500); // wait min 4.1ms - - // second try - send ( 0x03, FOUR_BITS ); - delayMicroseconds(150); // wait min 100us - - // third go! - send( 0x03, FOUR_BITS ); - delayMicroseconds(150); // wait min of 100us - - // finally, set to 4-bit interface - send ( 0x02, FOUR_BITS ); - delayMicroseconds(150); // wait min of 100us - - } - else - { - // this is according to the hitachi HD44780 datasheet - // page 45 figure 23 - - // Send function set command sequence - command(LCD_FUNCTIONSET | _displayfunction); - delayMicroseconds(4500); // wait more than 4.1ms - - // second try - command(LCD_FUNCTIONSET | _displayfunction); - delayMicroseconds(150); - - // third go - command(LCD_FUNCTIONSET | _displayfunction); - delayMicroseconds(150); - - } - - // finally, set # lines, font size, etc. - command(LCD_FUNCTIONSET | _displayfunction); - delayMicroseconds ( 60 ); // wait more - - // turn the display on with no cursor or blinking default - _displaycontrol = LCD_DISPLAYON | LCD_CURSOROFF | LCD_BLINKOFF; - display(); - - // clear the LCD - clear(); - - // Initialize to default text direction (for romance languages) - _displaymode = LCD_ENTRYLEFT | LCD_ENTRYSHIFTDECREMENT; - // set the entry mode - command(LCD_ENTRYMODESET | _displaymode); - - backlight(); - -} - -// Common LCD Commands -// --------------------------------------------------------------------------- -void LCD::clear() -{ - command(LCD_CLEARDISPLAY); // clear display, set cursor position to zero - delayMicroseconds(HOME_CLEAR_EXEC); // this command is time consuming -} - -void LCD::home() -{ - command(LCD_RETURNHOME); // set cursor position to zero - delayMicroseconds(HOME_CLEAR_EXEC); // This command is time consuming -} - -void LCD::setCursor(uint8_t col, uint8_t row) -{ - const byte row_offsetsDef[] = { 0x00, 0x40, 0x14, 0x54 }; // For regular LCDs - const byte row_offsetsLarge[] = { 0x00, 0x40, 0x10, 0x50 }; // For 16x4 LCDs - - if ( row >= _numlines ) - { - row = _numlines-1; // rows start at 0 - } - - // 16x4 LCDs have special memory map layout - // ---------------------------------------- - if ( _cols == 16 && _numlines == 4 ) - { - command(LCD_SETDDRAMADDR | (col + row_offsetsLarge[row])); - } - else - { - command(LCD_SETDDRAMADDR | (col + row_offsetsDef[row])); - } - -} - -// Turn the display on/off -void LCD::noDisplay() -{ - _displaycontrol &= ~LCD_DISPLAYON; - command(LCD_DISPLAYCONTROL | _displaycontrol); -} - -void LCD::display() -{ - _displaycontrol |= LCD_DISPLAYON; - command(LCD_DISPLAYCONTROL | _displaycontrol); -} - -// Turns the underline cursor on/off -void LCD::noCursor() -{ - _displaycontrol &= ~LCD_CURSORON; - command(LCD_DISPLAYCONTROL | _displaycontrol); -} -void LCD::cursor() -{ - _displaycontrol |= LCD_CURSORON; - command(LCD_DISPLAYCONTROL | _displaycontrol); -} - -// Turns on/off the blinking cursor -void LCD::noBlink() -{ - _displaycontrol &= ~LCD_BLINKON; - command(LCD_DISPLAYCONTROL | _displaycontrol); -} - -void LCD::blink() -{ - _displaycontrol |= LCD_BLINKON; - command(LCD_DISPLAYCONTROL | _displaycontrol); -} - -// These commands scroll the display without changing the RAM -void LCD::scrollDisplayLeft(void) -{ - command(LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVELEFT); -} - -void LCD::scrollDisplayRight(void) -{ - command(LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVERIGHT); -} - -// This is for text that flows Left to Right -void LCD::leftToRight(void) -{ - _displaymode |= LCD_ENTRYLEFT; - command(LCD_ENTRYMODESET | _displaymode); -} - -// This is for text that flows Right to Left -void LCD::rightToLeft(void) -{ - _displaymode &= ~LCD_ENTRYLEFT; - command(LCD_ENTRYMODESET | _displaymode); -} - -// This method moves the cursor one space to the right -void LCD::moveCursorRight(void) -{ - command(LCD_CURSORSHIFT | LCD_CURSORMOVE | LCD_MOVERIGHT); -} - -// This method moves the cursor one space to the left -void LCD::moveCursorLeft(void) -{ - command(LCD_CURSORSHIFT | LCD_CURSORMOVE | LCD_MOVELEFT); -} - - -// This will 'right justify' text from the cursor -void LCD::autoscroll(void) -{ - _displaymode |= LCD_ENTRYSHIFTINCREMENT; - command(LCD_ENTRYMODESET | _displaymode); -} - -// This will 'left justify' text from the cursor -void LCD::noAutoscroll(void) -{ - _displaymode &= ~LCD_ENTRYSHIFTINCREMENT; - command(LCD_ENTRYMODESET | _displaymode); -} - -// Write to CGRAM of new characters -void LCD::createChar(uint8_t location, uint8_t charmap[]) -{ - location &= 0x7; // we only have 8 locations 0-7 - - command(LCD_SETCGRAMADDR | (location << 3)); - delayMicroseconds(30); - - for (uint8_t i = 0; i < 8; i++) - { - write(charmap[i]); // call the virtual write method - delayMicroseconds(40); - } -} - -#ifdef __AVR__ -void LCD::createChar(uint8_t location, const unsigned char charmap[]) -{ - location &= 0x7; // we only have 8 memory locations 0-7 - - command(LCD_SETCGRAMADDR | (location << 3)); - delayMicroseconds(30); - - for (uint8_t i = 0; i < 8; i++) - { - write(pgm_read_byte_near(charmap++)); - delayMicroseconds(40); - } -} -#endif // __AVR__ - -// -// Switch on the backlight -void LCD::backlight ( void ) -{ - setBacklight(255); -} - -// -// Switch off the backlight -void LCD::noBacklight ( void ) -{ - setBacklight(0); -} - -// -// Switch fully on the LCD (backlight and LCD) -void LCD::on ( void ) -{ - display(); - backlight(); -} - -// -// Switch fully off the LCD (backlight and LCD) -void LCD::off ( void ) -{ - noBacklight(); - noDisplay(); -} - -// General LCD commands - generic methods used by the rest of the commands -// --------------------------------------------------------------------------- -void LCD::command(uint8_t value) -{ - send(value, COMMAND); -} - -#if (ARDUINO < 100) -void LCD::write(uint8_t value) -{ - send(value, DATA); -} -#else -size_t LCD::write(uint8_t value) -{ - send(value, DATA); - return 1; // assume OK -} -#endif diff --git a/libraries/LiquidCrystal/LCD.h b/libraries/LiquidCrystal/LCD.h deleted file mode 100644 index 43367aa..0000000 --- a/libraries/LiquidCrystal/LCD.h +++ /dev/null @@ -1,578 +0,0 @@ -// --------------------------------------------------------------------------- -// Created by Francisco Malpartida on 20/08/11. -// Copyright 2011 - Under creative commons license 3.0: -// Attribution-ShareAlike CC BY-SA -// -// This software is furnished "as is", without technical support, and with no -// warranty, express or implied, as to its usefulness for any purpose. -// -// Thread Safe: No -// Extendable: Yes -// -// @file LCD.h -// This file implements a basic liquid crystal library that comes as standard -// in the Arduino SDK. -// -// @brief -// This is a basic implementation of the LiquidCrystal library of the -// Arduino SDK. This library is a refactored version of the one supplied -// in the Arduino SDK in such a way that it simplifies its extension -// to support other mechanism to communicate to LCDs such as I2C, Serial, SR, -// The original library has been reworked in such a way that this will be -// the base class implementing all generic methods to command an LCD based -// on the Hitachi HD44780 and compatible chipsets. -// -// This base class is a pure abstract class and needs to be extended. As reference, -// it has been extended to drive 4 and 8 bit mode control, LCDs and I2C extension -// backpacks such as the I2CLCDextraIO using the PCF8574* I2C IO Expander ASIC. -// -// The functionality provided by this class and its base class is identical -// to the original functionality of the Arduino LiquidCrystal library. -// -// @version API 1.1.0 -// -// -// @author F. Malpartida - fmalpartida@gmail.com -// --------------------------------------------------------------------------- -#ifndef _LCD_H_ -#define _LCD_H_ - -#if (ARDUINO < 100) -#include -#else -#include -#endif - -#ifdef __AVR__ -#include -#endif - -#include -#include - - -/*! - @defined - @abstract Performs a bitwise shift. - @discussion Defines _BV bit shift which is very dependent macro defined by - Atmel. - - \note The bit shift is performed by the compiler which then inserts the - result into the code. Thus, there is no run-time overhead when using - _BV(). -*/ -#ifndef _BV -#define _BV(bit) (1 << (bit)) -#endif - -/*! - @defined - @abstract Enables disables fast waits for write operations for LCD - @discussion If defined, the library will avoid doing un-necessary waits. - this can be done, because the time taken by Arduino's slow digitalWrite - operations. If fast digitalIO operations, comment this line out or undefine - the mode. - */ -#ifdef __AVR__ -#define FAST_MODE -#endif - -/*! - @function - @abstract waits for a given time in microseconds (compilation dependent). - @discussion Waits for a given time defined in microseconds depending on - the FAST_MODE define. If the FAST_MODE is defined the call will return - inmediatelly. - @param uSec[in] time in microseconds. - @result None - */ -inline static void waitUsec ( uint16_t uSec ) -{ -#ifndef FAST_MODE - delayMicroseconds ( uSec ); -#else - (void)uSec; -#endif // FAST_MODE -} - - -/*! - @defined - @abstract All these definitions shouldn't be used unless you are writing - a driver. - @discussion All these definitions are for driver implementation only and - shouldn't be used by applications. - */ -// LCD Commands -// --------------------------------------------------------------------------- -#define LCD_CLEARDISPLAY 0x01 -#define LCD_RETURNHOME 0x02 -#define LCD_ENTRYMODESET 0x04 -#define LCD_DISPLAYCONTROL 0x08 -#define LCD_CURSORSHIFT 0x10 -#define LCD_FUNCTIONSET 0x20 -#define LCD_SETCGRAMADDR 0x40 -#define LCD_SETDDRAMADDR 0x80 - -// flags for display entry mode -// --------------------------------------------------------------------------- -#define LCD_ENTRYRIGHT 0x00 -#define LCD_ENTRYLEFT 0x02 -#define LCD_ENTRYSHIFTINCREMENT 0x01 -#define LCD_ENTRYSHIFTDECREMENT 0x00 - -// flags for display on/off and cursor control -// --------------------------------------------------------------------------- -#define LCD_DISPLAYON 0x04 -#define LCD_DISPLAYOFF 0x00 -#define LCD_CURSORON 0x02 -#define LCD_CURSOROFF 0x00 -#define LCD_BLINKON 0x01 -#define LCD_BLINKOFF 0x00 - -// flags for display/cursor shift -// --------------------------------------------------------------------------- -#define LCD_DISPLAYMOVE 0x08 -#define LCD_CURSORMOVE 0x00 -#define LCD_MOVERIGHT 0x04 -#define LCD_MOVELEFT 0x00 - -// flags for function set -// --------------------------------------------------------------------------- -#define LCD_8BITMODE 0x10 -#define LCD_4BITMODE 0x00 -#define LCD_2LINE 0x08 -#define LCD_1LINE 0x00 -#define LCD_5x10DOTS 0x04 -#define LCD_5x8DOTS 0x00 - - -// Define COMMAND and DATA LCD Rs (used by send method). -// --------------------------------------------------------------------------- -#define COMMAND 0 -#define DATA 1 -#define FOUR_BITS 2 - - -/*! - @defined - @abstract Defines the duration of the home and clear commands - @discussion This constant defines the time it takes for the home and clear - commands in the LCD - Time in microseconds. - */ -#define HOME_CLEAR_EXEC 2000 - -/*! - @defined - @abstract Backlight off constant declaration - @discussion Used in combination with the setBacklight to swith off the - LCD backlight. @set setBacklight -*/ -#define BACKLIGHT_OFF 0 - -/*! - @defined - @abstract Backlight on constant declaration - @discussion Used in combination with the setBacklight to swith on the - LCD backlight. @set setBacklight - */ -#define BACKLIGHT_ON 255 - - -/*! - @typedef - @abstract Define backlight control polarity - @discussion Backlight control polarity. @see setBacklightPin. - */ -typedef enum { POSITIVE, NEGATIVE } t_backlighPol; - -class LCD : public Print -{ -public: - - /*! - @method - @abstract LiquidCrystal abstract constructor. - @discussion LiquidCrystal class abstract constructor needed to create - the base abstract class. - */ - LCD ( ); - - /*! - @function - @abstract LCD initialization. - @discussion Initializes the LCD to a given size (col, row). This methods - initializes the LCD, therefore, it MUST be called prior to using any other - method from this class. - - This method is abstract, a base implementation is available common to all LCD - drivers. Should it not be compatible with some other LCD driver, a derived - implementation should be done on the driver specif class. - - @param cols[in] the number of columns that the display has - @param rows[in] the number of rows that the display has - @param charsize[in] character size, default==LCD_5x8DOTS - */ - virtual void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS); - - /*! - @function - @abstract Clears the LCD. - @discussion Clears the LCD screen and positions the cursor in the upper-left - corner. - - This operation is time consuming for the LCD. - - @param none - */ - void clear(); - - /*! - @function - @abstract Sets the cursor to the upper-left corner. - @discussion Positions the cursor in the upper-left of the LCD. - That is, use that location in outputting subsequent text to the display. - To also clear the display, use the clear() function instead. - - This operation is time consuming for the LCD. - - @param none - */ - void home(); - - /*! - @function - @abstract Turns off the LCD display. - @discussion Turns off the LCD display, without losing the text currently - being displayed on it. - - @param none - */ - void noDisplay(); - - /*! - @function - @abstract Turns on the LCD display. - @discussion Turns on the LCD display, after it's been turned off with - noDisplay(). This will restore the text (and cursor location) that was on - the display prior to calling noDisplay(). - - @param none - */ - void display(); - - /*! - @function - @abstract Turns off the blinking of the LCD cursor. - - @param none - */ - void noBlink(); - - /*! - @function - @abstract Display the cursor of the LCD. - @discussion Display the blinking LCD cursor. If used in combination with - the cursor() function, the result will depend on the particular display. - - @param none - */ - void blink(); - - /*! - @function - @abstract Hides the LCD cursor. - - @param none - */ - void noCursor(); - - /*! - @function - @abstract Display the LCD cursor. - @discussion Display the LCD cursor: an underscore (line) at the location - where the next character will be written. - - @param none - */ - void cursor(); - - /*! - @function - @abstract Scrolls the contents of the display (text and cursor) one space - to the left. - - @param none - */ - void scrollDisplayLeft(); - - /*! - @function - @abstract Scrolls the contents of the display (text and cursor) one space - to the right. - - @param none - */ - void scrollDisplayRight(); - - /*! - @function - @abstract Set the direction for text written to the LCD to left-to-right. - @discussion Set the direction for text written to the LCD to left-to-right. - All subsequent characters written to the display will go from left to right, - but does not affect previously-output text. - - This is the default configuration. - - @param none - */ - void leftToRight(); - - /*! - @function - @abstract Set the direction for text written to the LCD to right-to-left. - @discussion Set the direction for text written to the LCD to right-to-left. - All subsequent characters written to the display will go from right to left, - but does not affect previously-output text. - - left-to-right is the default configuration. - - @param none - */ - void rightToLeft(); - - /*! - @function - @abstract Moves the cursor one space to the left. - @discussion - @param none - */ - void moveCursorLeft(); - - - /*! - @function - @abstract Moves the cursor one space to the right. - - @param none - */ - void moveCursorRight(); - - /*! - @function - @abstract Turns on automatic scrolling of the LCD. - @discussion Turns on automatic scrolling of the LCD. This causes each - character output to the display to push previous characters over by one - space. If the current text direction is left-to-right (the default), - the display scrolls to the left; if the current direction is right-to-left, - the display scrolls to the right. - This has the effect of outputting each new character to the same location on - the LCD. - - @param none - */ - void autoscroll(); - - /*! - @function - @abstract Turns off automatic scrolling of the LCD. - @discussion Turns off automatic scrolling of the LCD, this is the default - configuration of the LCD. - - @param none - */ - void noAutoscroll(); - - /*! - @function - @abstract Creates a custom character for use on the LCD. - @discussion Create a custom character (glyph) for use on the LCD. - Most chipsets only support up to eight characters of 5x8 pixels. Therefore, - this methods has been limited to locations (numbered 0 to 7). - - The appearance of each custom character is specified by an array of eight - bytes, one for each row. The five least significant bits of each byte - determine the pixels in that row. To display a custom character on screen, - write()/print() its number, i.e. lcd.print (char(x)); // Where x is 0..7. - - @param location[in] LCD memory location of the character to create - (0 to 7) - @param charmap[in] the bitmap array representing each row of the character. - */ - void createChar(uint8_t location, uint8_t charmap[]); - -#ifdef __AVR__ - /*! - @function - @abstract Creates a custom character for use on the LCD. - @discussion Create a custom character (glyph) for use on the LCD. - Most chipsets only support up to eight characters of 5x8 pixels. Therefore, - this methods has been limited to locations (numbered 0 to 7). - - The appearance of each custom character is specified by an array of eight - bytes, one for each row. The five least significant bits of each byte - determine the pixels in that row. To display a custom character on screen, - write()/print() its number, i.e. lcd.print (char(x)); // Where x is 0..7. - - This method take the character defined in program memory. - - @param location[in] LCD memory location of the character to create - (0 to 7) - @param charmap[in] the bitmap array representing each row of the character. - */ - void createChar(uint8_t location, const unsigned char charmap[]); -#endif // __AVR__ - - /*! - @function - @abstract Position the LCD cursor. - @discussion Sets the position of the LCD cursor. Set the location at which - subsequent text written to the LCD will be displayed. - - @param col[in] LCD column - @param row[in] LCD row - line. - */ - void setCursor(uint8_t col, uint8_t row); - - /*! - @function - @abstract Switch-on the LCD backlight. - @discussion Switch-on the LCD backlight. - The setBacklightPin has to be called before setting the backlight for - this method to work. @see setBacklightPin. - */ - void backlight ( void ); - - /*! - @function - @abstract Switch-off the LCD backlight. - @discussion Switch-off the LCD backlight. - The setBacklightPin has to be called before setting the backlight for - this method to work. @see setBacklightPin. - */ - void noBacklight ( void ); - - /*! - @function - @abstract Switch on the LCD module. - @discussion Switch on the LCD module, it will switch on the LCD controller - and the backlight. This method has the same effect of calling display and - backlight. @see display, @see backlight - */ - void on ( void ); - - /*! - @function - @abstract Switch off the LCD module. - @discussion Switch off the LCD module, it will switch off the LCD controller - and the backlight. This method has the same effect of calling noDisplay and - noBacklight. @see display, @see backlight - */ - void off ( void ); - - // - // virtual class methods - // -------------------------------------------------------------------------- - /*! - @function - @abstract Sets the pin to control the backlight. - @discussion Sets the pin in the device to control the backlight. - This method is device dependent and can be programmed on each subclass. An - empty function call is provided that does nothing. - - @param value: pin associated to backlight control. - @param pol: backlight polarity control (POSITIVE, NEGATIVE) - */ - virtual void setBacklightPin ( uint8_t /*value*/, t_backlighPol /*pol*/ ) { }; - - /*! - @function - @abstract Sets the pin to control the backlight. - @discussion Sets the pin in the device to control the backlight. The behaviour - of this method is very dependent on the device. Some controllers support - dimming some don't. Please read the actual header file for each individual - device. The setBacklightPin method has to be called before setting the backlight - or the adequate backlight control constructor. - @see setBacklightPin. - - NOTE: The prefered methods to control the backlight are "backlight" and - "noBacklight". - - @param 0..255 - the value is very dependent on the LCD. However, - BACKLIGHT_OFF will be interpreted as off and BACKLIGHT_ON will drive the - backlight on. - */ - virtual void setBacklight ( uint8_t /*value*/ ) { }; - - /*! - @function - @abstract Writes to the LCD. - @discussion This method writes character to the LCD in the current cursor - position. - - This is the virtual write method, implemented in the Print class, therefore - all Print class methods will end up calling this method. - - @param value[in] Value to write to the LCD. - */ -#if (ARDUINO < 100) - virtual void write(uint8_t /*value*/); -#else - virtual size_t write(uint8_t /*value*/); -#endif - -#if (ARDUINO < 100) - using Print::write; -#else - using Print::write; -#endif - -protected: - // Internal LCD variables to control the LCD shared between all derived - // classes. - uint8_t _displayfunction; // LCD_5x10DOTS or LCD_5x8DOTS, LCD_4BITMODE or - // LCD_8BITMODE, LCD_1LINE or LCD_2LINE - uint8_t _displaycontrol; // LCD base control command LCD on/off, blink, cursor - // all commands are "ored" to its contents. - uint8_t _displaymode; // Text entry mode to the LCD - uint8_t _numlines; // Number of lines of the LCD, initialized with begin() - uint8_t _cols; // Number of columns in the LCD - t_backlighPol _polarity; // Backlight polarity - -private: - /*! - @function - @abstract Send a command to the LCD. - @discussion This method sends a command to the LCD by setting the Register - select line of the LCD. - - This command shouldn't be used to drive the LCD, only to implement any other - feature that is not available on this library. - - @param value[in] Command value to send to the LCD (COMMAND, DATA or - FOUR_BITS). - */ - void command(uint8_t value); - - /*! - @function - @abstract Send a particular value to the LCD. - @discussion Sends a particular value to the LCD. This is a pure abstract - method, therefore, it is implementation dependent of each derived class how - to physically write to the LCD. - - Users should never call this method. - - @param value[in] Value to send to the LCD. - @result mode LOW - write to the LCD CGRAM, HIGH - write a command to - the LCD. - */ -#if (ARDUINO < 100) - virtual void send(uint8_t /*value*/, uint8_t /*mode*/) { }; -#else - virtual void send(uint8_t /*value*/, uint8_t /*mode*/) = 0; -#endif - -}; - -#endif diff --git a/libraries/LiquidCrystal/LiquidCrystal.cpp b/libraries/LiquidCrystal/LiquidCrystal.cpp deleted file mode 100644 index 2c2cae1..0000000 --- a/libraries/LiquidCrystal/LiquidCrystal.cpp +++ /dev/null @@ -1,299 +0,0 @@ -// --------------------------------------------------------------------------- -// Created by Francisco Malpartida on 20/08/11. -// Copyright 2011 - Under creative commons license 3.0: -// Attribution-ShareAlike CC BY-SA -// -// This software is furnished "as is", without technical support, and with no -// warranty, express or implied, as to its usefulness for any purpose. -// -// Thread Safe: No -// Extendable: Yes -// -// @file LiquidCrystal.cpp -// This file implements a basic liquid crystal library that comes as standard -// in the Arduino SDK. -// -// @brief -// This is a basic implementation of the LiquidCrystal library of the -// Arduino SDK. The original library has been reworked in such a way that -// this class implements the all methods to command an LCD based -// on the Hitachi HD44780 and compatible chipsets using the parallel port of -// the LCD (4 bit and 8 bit). -// -// The functionality provided by this class and its base class is identical -// to the original functionality of the Arduino LiquidCrystal library. -// -// -// @author F. Malpartida - fmalpartida@gmail.com -// --------------------------------------------------------------------------- -#include -#include -#include - -#if (ARDUINO < 100) -#include -#else -#include -#endif -#include "LiquidCrystal.h" - -// CONSTANT definitions -// --------------------------------------------------------------------------- -#define LCD_NOBACKLIGHT 0xFF - -// LCD driver configuration (4bit or 8bit driver control) -#define LCD_4BIT 1 -#define LCD_8BIT 0 - -// STATIC helper functions -// --------------------------------------------------------------------------- - - -// CONSTRUCTORS -// --------------------------------------------------------------------------- - -LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, - uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7) -{ - init(LCD_8BIT, rs, 255, enable, d0, d1, d2, d3, d4, d5, d6, d7); -} - -LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, - uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7) -{ - init(LCD_8BIT, rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7); -} - -LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3) -{ - init(LCD_4BIT, rs, rw, enable, d0, d1, d2, d3, 0, 0, 0, 0); -} - -LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3) -{ - init(LCD_4BIT, rs, 255, enable, d0, d1, d2, d3, 0, 0, 0, 0); -} - -// Contructors with backlight control -LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, - uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, - uint8_t backlightPin, t_backlighPol pol) -{ - init(LCD_8BIT, rs, 255, enable, d0, d1, d2, d3, d4, d5, d6, d7); - setBacklightPin ( backlightPin, pol ); -} - -LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, - uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, - uint8_t backlightPin, t_backlighPol pol) -{ - init(LCD_8BIT, rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7); - setBacklightPin ( backlightPin, pol ); -} - -LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, - uint8_t backlightPin, t_backlighPol pol) -{ - init(LCD_4BIT, rs, rw, enable, d0, d1, d2, d3, 0, 0, 0, 0); - setBacklightPin ( backlightPin, pol ); -} - -LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, - uint8_t backlightPin, t_backlighPol pol) -{ - init(LCD_4BIT, rs, 255, enable, d0, d1, d2, d3, 0, 0, 0, 0); - setBacklightPin ( backlightPin, pol ); -} - -// PUBLIC METHODS -// --------------------------------------------------------------------------- - -/************ low level data pushing commands **********/ -// -// send -void LiquidCrystal::send(uint8_t value, uint8_t mode) -{ - // Only interested in COMMAND or DATA - digitalWrite( _rs_pin, ( mode == DATA ) ); - - // if there is a RW pin indicated, set it low to Write - // --------------------------------------------------- - if (_rw_pin != 255) - { - digitalWrite(_rw_pin, LOW); - } - - if ( mode != FOUR_BITS ) - { - if ( (_displayfunction & LCD_8BITMODE ) ) - { - writeNbits(value, 8); - } - else - { - writeNbits ( value >> 4, 4 ); - writeNbits ( value, 4 ); - } - } - else - { - writeNbits ( value, 4 ); - } - waitUsec ( EXEC_TIME ); // wait for the command to execute by the LCD -} - -// -// setBacklightPin -void LiquidCrystal::setBacklightPin ( uint8_t pin, t_backlighPol pol ) -{ - pinMode ( pin, OUTPUT ); // Difine the backlight pin as output - _backlightPin = pin; - _polarity = pol; - setBacklight(BACKLIGHT_OFF); // Set the backlight low by default -} - -// -// setBackligh -void LiquidCrystal::setBacklight ( uint8_t value ) -{ - // Check if there is a pin assigned to the backlight - // --------------------------------------------------- - if ( _backlightPin != LCD_NOBACKLIGHT ) - { - // Check if the pin is associated to a timer, i.e. PWM - // --------------------------------------------------- - if(digitalPinToTimer(_backlightPin) != NOT_ON_TIMER) - { - // Check for control polarity inversion - // --------------------------------------------------- - if ( _polarity == POSITIVE ) - { - analogWrite ( _backlightPin, value ); - } - else - { - analogWrite ( _backlightPin, 255 - value ); - } - } - // Not a PWM pin, set the backlight pin for POSI or NEG - // polarity - // -------------------------------------------------------- - else if (((value > 0) && (_polarity == POSITIVE)) || - ((value == 0) && (_polarity == NEGATIVE))) - { - digitalWrite( _backlightPin, HIGH); - } - else - { - digitalWrite( _backlightPin, LOW); - } - } -} - -// PRIVATE METHODS -// --------------------------------------------------------------------------- - - -// init -void LiquidCrystal::init(uint8_t fourbitmode, uint8_t rs, uint8_t rw, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, - uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7) -{ - uint8_t i; - - // Initialize the IO pins - // ----------------------- - - _rs_pin = rs; - _rw_pin = rw; - _enable_pin = enable; - - _data_pins[0] = d0; - _data_pins[1] = d1; - _data_pins[2] = d2; - _data_pins[3] = d3; - _data_pins[4] = d4; - _data_pins[5] = d5; - _data_pins[6] = d6; - _data_pins[7] = d7; - - // Initialize the IO port direction to OUTPUT - // ------------------------------------------ - - for ( i = 0; i < 4; i++ ) - { - pinMode ( _data_pins[i], OUTPUT ); - } - - // Initialize the rest of the ports if it is an 8bit controlled LCD - // ---------------------------------------------------------------- - - if ( !fourbitmode ) - { - for ( i = 4; i < 8; i++ ) - { - pinMode ( _data_pins[i], OUTPUT ); - } - } - pinMode(_rs_pin, OUTPUT); - - // we can save 1 pin by not using RW. Indicate by passing 255 instead of pin# - if (_rw_pin != 255) - { - pinMode(_rw_pin, OUTPUT); - } - - pinMode(_enable_pin, OUTPUT); - - // Initialise displaymode functions to defaults: LCD_1LINE and LCD_5x8DOTS - // ------------------------------------------------------------------------- - if (fourbitmode) - _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS; - else - _displayfunction = LCD_8BITMODE | LCD_1LINE | LCD_5x8DOTS; - - // Now we pull both RS and R/W low to begin commands - digitalWrite(_rs_pin, LOW); - digitalWrite(_enable_pin, LOW); - - if (_rw_pin != 255) - { - digitalWrite(_rw_pin, LOW); - } - - // Initialise the backlight pin no nothing - _backlightPin = LCD_NOBACKLIGHT; - _polarity = POSITIVE; -} - -// -// pulseEnable -void LiquidCrystal::pulseEnable(void) -{ - // There is no need for the delays, since the digitalWrite operation - // takes longer. - digitalWrite(_enable_pin, HIGH); - waitUsec(1); // enable pulse must be > 450ns - digitalWrite(_enable_pin, LOW); -} - -// -// write4bits -void LiquidCrystal::writeNbits(uint8_t value, uint8_t numBits) -{ - for (uint8_t i = 0; i < numBits; i++) - { - digitalWrite(_data_pins[i], (value >> i) & 0x01); - } - pulseEnable(); -} - - diff --git a/libraries/LiquidCrystal/LiquidCrystal.h b/libraries/LiquidCrystal/LiquidCrystal.h deleted file mode 100644 index e2114dc..0000000 --- a/libraries/LiquidCrystal/LiquidCrystal.h +++ /dev/null @@ -1,161 +0,0 @@ -// --------------------------------------------------------------------------- -// Created by Francisco Malpartida on 20/08/11. -// Copyright 2011 - Under creative commons license 3.0: -// Attribution-ShareAlike CC BY-SA -// -// This software is furnished "as is", without technical support, and with no -// warranty, express or implied, as to its usefulness for any purpose. -// -// Thread Safe: No -// Extendable: Yes -// -// @file LiquidCrystal.h -// This file implements a basic liquid crystal library that comes as standard -// in the Arduino SDK. -// -// @brief -// This is a basic implementation of the LiquidCrystal library of the -// Arduino SDK. The original library has been reworked in such a way that -// this class implements the all methods to command an LCD based -// on the Hitachi HD44780 and compatible chipsets using the parallel port of -// the LCD (4 bit and 8 bit). -// -// -// -// @author F. Malpartida - fmalpartida@gmail.com -// --------------------------------------------------------------------------- -#ifndef LiquidCrystal_4bit_h -#define LiquidCrystal_4bit_h - -#include - -#include "LCD.h" -#include "FastIO.h" - - -/*! - @defined - @abstract Command execution time on the LCD. - @discussion This defines how long a command takes to execute by the LCD. - The time is expressed in micro-seconds. - */ -#define EXEC_TIME 37 - -class LiquidCrystal : public LCD -{ -public: - /*! - @method - @abstract 8 bit LCD constructors. - @discussion Defines the pin assignment that the LCD will have. - The constructor does not initialize the LCD. - */ - LiquidCrystal(uint8_t rs, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, - uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7); - LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, - uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7); - - // Constructors with backlight control - LiquidCrystal(uint8_t rs, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, - uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, - uint8_t backlightPin, t_backlighPol pol); - LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, - uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, - uint8_t backlightPin, t_backlighPol pol); - /*! - @method - @abstract 4 bit LCD constructors. - @discussion Defines the pin assignment that the LCD will have. - The constructor does not initialize the LCD. - */ - LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3); - LiquidCrystal(uint8_t rs, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3); - - // Constructors with backlight control - LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, - uint8_t backlightPin, t_backlighPol pol); - LiquidCrystal(uint8_t rs, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, - uint8_t backlightPin, t_backlighPol pol); - /*! - @function - @abstract Send a particular value to the LCD. - @discussion Sends a particular value to the LCD for writing to the LCD or - as an LCD command. - - Users should never call this method. - - @param value Value to send to the LCD. - @result mode LOW - write to the LCD CGRAM, HIGH - write a command to - the LCD. - */ - virtual void send(uint8_t value, uint8_t mode); - - /*! - @function - @abstract Sets the pin to control the backlight. - @discussion Sets the pin in the device to control the backlight. - - @param pin: pin assigned to the backlight - @param pol: backlight pin control polarity (POSITIVE, NEGATIVE). - */ - void setBacklightPin ( uint8_t pin, t_backlighPol pol ); - - /*! - @function - @abstract Switch-on/off the LCD backlight. - @discussion Switch-on/off the LCD backlight. - The setBacklightPin has to be called before setting the backlight for - this method to work. @see setBacklightPin. For dimming control of the - backlight, the configuration pin must be a PWM output pin. Dim control - is achieved by passing a value from 1 to 255 as a parameter. If the - pin configured when calling the setBacklightPin does not support PWM, - then: (0) backlight off, (1..255) backlight on. - - @param value: backlight value. 0: off, 1..255: dim control of the - backlight. For negative logic 255: off, 254..0: dim control. - */ - void setBacklight ( uint8_t value ); - -private: - - /*! - @method - @abstract Initializes the LCD pin allocation and associated HW - @discussion Initializes the LCD pin allocation and configuration. - */ - void init(uint8_t fourbitmode, uint8_t rs, uint8_t rw, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, - uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7); - - /*! - @method - @abstract Writes numBits bits from value value to the LCD. - @discussion Writes numBists bits (the least significant) to the LCD control - data lines. - */ - void writeNbits(uint8_t value, uint8_t numBits); - - /*! - @method - @abstract Pulse the LCD enable line (En). - @discussion Sends a pulse of 1 uS to the Enable pin to execute an command - or write operation. - */ - void pulseEnable(); - - uint8_t _rs_pin; // LOW: command. HIGH: character. - uint8_t _rw_pin; // LOW: write to LCD. HIGH: read from LCD. - uint8_t _enable_pin; // activated by a HIGH pulse. - uint8_t _data_pins[8]; // Data pins. - uint8_t _backlightPin; // Pin associated to control the LCD backlight -}; - -#endif diff --git a/libraries/LiquidCrystal/LiquidCrystal_I2C.cpp b/libraries/LiquidCrystal/LiquidCrystal_I2C.cpp deleted file mode 100644 index 8f1ce77..0000000 --- a/libraries/LiquidCrystal/LiquidCrystal_I2C.cpp +++ /dev/null @@ -1,291 +0,0 @@ -// --------------------------------------------------------------------------- -// Created by Francisco Malpartida on 20/08/11. -// Copyright 2011 - Under creative commons license 3.0: -// Attribution-ShareAlike CC BY-SA -// -// This software is furnished "as is", without technical support, and with no -// warranty, express or implied, as to its usefulness for any purpose. -// -// Thread Safe: No -// Extendable: Yes -// -// @file LiquidCrystal_I2C.c -// This file implements a basic liquid crystal library that comes as standard -// in the Arduino SDK but using an I2C IO extension board. -// -// @brief -// This is a basic implementation of the LiquidCrystal library of the -// Arduino SDK. The original library has been reworked in such a way that -// this class implements the all methods to command an LCD based -// on the Hitachi HD44780 and compatible chipsets using I2C extension -// backpacks such as the I2CLCDextraIO with the PCF8574* I2C IO Expander ASIC. -// -// The functionality provided by this class and its base class is identical -// to the original functionality of the Arduino LiquidCrystal library. -// -// -// -// @author F. Malpartida - fmalpartida@gmail.com -// --------------------------------------------------------------------------- -#if (ARDUINO < 100) -#include -#else -#include -#endif -#include -#include "I2CIO.h" -#include "LiquidCrystal_I2C.h" - -// CONSTANT definitions -// --------------------------------------------------------------------------- - -// flags for backlight control -/*! - @defined - @abstract LCD_NOBACKLIGHT - @discussion NO BACKLIGHT MASK - */ -#define LCD_NOBACKLIGHT 0x00 - -/*! - @defined - @abstract LCD_BACKLIGHT - @discussion BACKLIGHT MASK used when backlight is on - */ -#define LCD_BACKLIGHT 0xFF - - -// Default library configuration parameters used by class constructor with -// only the I2C address field. -// --------------------------------------------------------------------------- -/*! - @defined - @abstract Enable bit of the LCD - @discussion Defines the IO of the expander connected to the LCD Enable - */ -#define EN 6 // Enable bit - -/*! - @defined - @abstract Read/Write bit of the LCD - @discussion Defines the IO of the expander connected to the LCD Rw pin - */ -#define RW 5 // Read/Write bit - -/*! - @defined - @abstract Register bit of the LCD - @discussion Defines the IO of the expander connected to the LCD Register select pin - */ -#define RS 4 // Register select bit - -/*! - @defined - @abstract LCD dataline allocation this library only supports 4 bit LCD control - mode. - @discussion D4, D5, D6, D7 LCD data lines pin mapping of the extender module - */ -#define D4 0 -#define D5 1 -#define D6 2 -#define D7 3 - - -// CONSTRUCTORS -// --------------------------------------------------------------------------- -LiquidCrystal_I2C::LiquidCrystal_I2C( uint8_t lcd_Addr ) -{ - config(lcd_Addr, EN, RW, RS, D4, D5, D6, D7); -} - - -LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t backlighPin, - t_backlighPol pol = POSITIVE) -{ - config(lcd_Addr, EN, RW, RS, D4, D5, D6, D7); - setBacklightPin(backlighPin, pol); -} - -LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw, - uint8_t Rs) -{ - config(lcd_Addr, En, Rw, Rs, D4, D5, D6, D7); -} - -LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw, - uint8_t Rs, uint8_t backlighPin, - t_backlighPol pol = POSITIVE) -{ - config(lcd_Addr, En, Rw, Rs, D4, D5, D6, D7); - setBacklightPin(backlighPin, pol); -} - -LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw, - uint8_t Rs, uint8_t d4, uint8_t d5, - uint8_t d6, uint8_t d7 ) -{ - config(lcd_Addr, En, Rw, Rs, d4, d5, d6, d7); -} - -LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw, - uint8_t Rs, uint8_t d4, uint8_t d5, - uint8_t d6, uint8_t d7, uint8_t backlighPin, - t_backlighPol pol = POSITIVE ) -{ - config(lcd_Addr, En, Rw, Rs, d4, d5, d6, d7); - setBacklightPin(backlighPin, pol); -} - -// PUBLIC METHODS -// --------------------------------------------------------------------------- - -// -// begin -void LiquidCrystal_I2C::begin(uint8_t cols, uint8_t lines, uint8_t dotsize) -{ - - init(); // Initialise the I2C expander interface - LCD::begin ( cols, lines, dotsize ); -} - - -// User commands - users can expand this section -//---------------------------------------------------------------------------- -// Turn the (optional) backlight off/on - -// -// setBacklightPin -void LiquidCrystal_I2C::setBacklightPin ( uint8_t value, t_backlighPol pol = POSITIVE ) -{ - _backlightPinMask = ( 1 << value ); - _polarity = pol; - setBacklight(BACKLIGHT_OFF); -} - -// -// setBacklight -void LiquidCrystal_I2C::setBacklight( uint8_t value ) -{ - // Check if backlight is available - // ---------------------------------------------------- - if ( _backlightPinMask != 0x0 ) - { - // Check for polarity to configure mask accordingly - // ---------------------------------------------------------- - if (((_polarity == POSITIVE) && (value > 0)) || - ((_polarity == NEGATIVE ) && ( value == 0 ))) - { - _backlightStsMask = _backlightPinMask & LCD_BACKLIGHT; - } - else - { - _backlightStsMask = _backlightPinMask & LCD_NOBACKLIGHT; - } - _i2cio.write( _backlightStsMask ); - } -} - - -// PRIVATE METHODS -// --------------------------------------------------------------------------- - -// -// init -int LiquidCrystal_I2C::init() -{ - int status = 0; - - // initialize the backpack IO expander - // and display functions. - // ------------------------------------------------------------------------ - if ( _i2cio.begin ( _Addr ) == 1 ) - { - _i2cio.portMode ( OUTPUT ); // Set the entire IO extender to OUTPUT - _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS; - status = 1; - _i2cio.write(0); // Set the entire port to LOW - } - return ( status ); -} - -// -// config -void LiquidCrystal_I2C::config (uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, - uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7 ) -{ - _Addr = lcd_Addr; - - _backlightPinMask = 0; - _backlightStsMask = LCD_NOBACKLIGHT; - _polarity = POSITIVE; - - _En = ( 1 << En ); - _Rw = ( 1 << Rw ); - _Rs = ( 1 << Rs ); - - // Initialise pin mapping - _data_pins[0] = ( 1 << d4 ); - _data_pins[1] = ( 1 << d5 ); - _data_pins[2] = ( 1 << d6 ); - _data_pins[3] = ( 1 << d7 ); -} - - - -// low level data pushing commands -//---------------------------------------------------------------------------- - -// -// send - write either command or data -void LiquidCrystal_I2C::send(uint8_t value, uint8_t mode) -{ - // No need to use the delay routines since the time taken to write takes - // longer that what is needed both for toggling and enable pin an to execute - // the command. - - if ( mode == FOUR_BITS ) - { - write4bits( (value & 0x0F), COMMAND ); - } - else - { - write4bits( (value >> 4), mode ); - write4bits( (value & 0x0F), mode); - } -} - -// -// write4bits -void LiquidCrystal_I2C::write4bits ( uint8_t value, uint8_t mode ) -{ - uint8_t pinMapValue = 0; - - // Map the value to LCD pin mapping - // -------------------------------- - for ( uint8_t i = 0; i < 4; i++ ) - { - if ( ( value & 0x1 ) == 1 ) - { - pinMapValue |= _data_pins[i]; - } - value = ( value >> 1 ); - } - - // Is it a command or data - // ----------------------- - if ( mode == DATA ) - { - mode = _Rs; - } - - pinMapValue |= mode | _backlightStsMask; - pulseEnable ( pinMapValue ); -} - -// -// pulseEnable -void LiquidCrystal_I2C::pulseEnable (uint8_t data) -{ - _i2cio.write (data | _En); // En HIGH - _i2cio.write (data & ~_En); // En LOW -} \ No newline at end of file diff --git a/libraries/LiquidCrystal/LiquidCrystal_I2C.h b/libraries/LiquidCrystal/LiquidCrystal_I2C.h deleted file mode 100644 index ea6d87f..0000000 --- a/libraries/LiquidCrystal/LiquidCrystal_I2C.h +++ /dev/null @@ -1,204 +0,0 @@ -// --------------------------------------------------------------------------- -// Created by Francisco Malpartida on 20/08/11. -// Copyright 2011 - Under creative commons license 3.0: -// Attribution-ShareAlike CC BY-SA -// -// This software is furnished "as is", without technical support, and with no -// warranty, express or implied, as to its usefulness for any purpose. -// -// Thread Safe: No -// Extendable: Yes -// -// @file LiquidCrystal_I2C.h -// This file implements a basic liquid crystal library that comes as standard -// in the Arduino SDK but using an I2C IO extension board. -// -// @brief -// This is a basic implementation of the LiquidCrystal library of the -// Arduino SDK. The original library has been reworked in such a way that -// this class implements the all methods to command an LCD based -// on the Hitachi HD44780 and compatible chipsets using I2C extension -// backpacks such as the I2CLCDextraIO with the PCF8574* I2C IO Expander ASIC. -// -// The functionality provided by this class and its base class is identical -// to the original functionality of the Arduino LiquidCrystal library. -// -// -// @author F. Malpartida - fmalpartida@gmail.com -// --------------------------------------------------------------------------- -#ifndef LiquidCrystal_I2C_h -#define LiquidCrystal_I2C_h -#include -#include - -#include "I2CIO.h" -#include "LCD.h" - - -class LiquidCrystal_I2C : public LCD -{ -public: - - /*! - @method - @abstract Class constructor. - @discussion Initializes class variables and defines the I2C address of the - LCD. The constructor does not initialize the LCD. - - @param lcd_Addr[in] I2C address of the IO expansion module. For I2CLCDextraIO, - the address can be configured using the on board jumpers. - */ - LiquidCrystal_I2C (uint8_t lcd_Addr); - // Constructor with backlight control - LiquidCrystal_I2C (uint8_t lcd_Addr, uint8_t backlighPin, t_backlighPol pol); - - /*! - @method - @abstract Class constructor. - @discussion Initializes class variables and defines the I2C address of the - LCD. The constructor does not initialize the LCD. - - @param lcd_Addr[in] I2C address of the IO expansion module. For I2CLCDextraIO, - the address can be configured using the on board jumpers. - @param En[in] LCD En (Enable) pin connected to the IO extender module - @param Rw[in] LCD Rw (Read/write) pin connected to the IO extender module - @param Rs[in] LCD Rs (Reset) pin connected to the IO extender module - */ - LiquidCrystal_I2C( uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs); - // Constructor with backlight control - LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, - uint8_t backlighPin, t_backlighPol pol); - - /*! - @method - @abstract Class constructor. - @discussion Initializes class variables and defines the I2C address of the - LCD. The constructor does not initialize the LCD. - - @param lcd_Addr[in] I2C address of the IO expansion module. For I2CLCDextraIO, - the address can be configured using the on board jumpers. - @param En[in] LCD En (Enable) pin connected to the IO extender module - @param Rw[in] LCD Rw (Read/write) pin connected to the IO extender module - @param Rs[in] LCD Rs (Reset) pin connected to the IO extender module - @param d4[in] LCD data 0 pin map on IO extender module - @param d5[in] LCD data 1 pin map on IO extender module - @param d6[in] LCD data 2 pin map on IO extender module - @param d7[in] LCD data 3 pin map on IO extender module - */ - LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, - uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7 ); - // Constructor with backlight control - LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, - uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, - uint8_t backlighPin, t_backlighPol pol); - /*! - @function - @abstract LCD initialization and associated HW. - @discussion Initializes the LCD to a given size (col, row). This methods - initializes the LCD, therefore, it MUST be called prior to using any other - method from this class or parent class. - - The begin method can be overloaded if necessary to initialize any HW that - is implemented by a library and can't be done during construction, here - we use the Wire class. - - @param cols[in] the number of columns that the display has - @param rows[in] the number of rows that the display has - @param charsize[in] size of the characters of the LCD: LCD_5x8DOTS or - LCD_5x10DOTS. - */ - virtual void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS); - - /*! - @function - @abstract Send a particular value to the LCD. - @discussion Sends a particular value to the LCD for writing to the LCD or - as an LCD command. - - Users should never call this method. - - @param value[in] Value to send to the LCD. - @param mode[in] DATA - write to the LCD CGRAM, COMMAND - write a - command to the LCD. - */ - virtual void send(uint8_t value, uint8_t mode); - - /*! - @function - @abstract Sets the pin to control the backlight. - @discussion Sets the pin in the device to control the backlight. This device - doesn't support dimming backlight capability. - - @param 0: backlight off, 1..255: backlight on. - */ - void setBacklightPin ( uint8_t value, t_backlighPol pol ); - - /*! - @function - @abstract Switch-on/off the LCD backlight. - @discussion Switch-on/off the LCD backlight. - The setBacklightPin has to be called before setting the backlight for - this method to work. @see setBacklightPin. - - @param value: backlight mode (HIGH|LOW) - */ - void setBacklight ( uint8_t value ); - -private: - - /*! - @method - @abstract Initializes the LCD class - @discussion Initializes the LCD class and IO expansion module. - */ - int init(); - - /*! - @function - @abstract Initialises class private variables - @discussion This is the class single point for initialising private variables. - - @param lcd_Addr[in] I2C address of the IO expansion module. For I2CLCDextraIO, - the address can be configured using the on board jumpers. - @param En[in] LCD En (Enable) pin connected to the IO extender module - @param Rw[in] LCD Rw (Read/write) pin connected to the IO extender module - @param Rs[in] LCD Rs (Reset) pin connected to the IO extender module - @param d4[in] LCD data 0 pin map on IO extender module - @param d5[in] LCD data 1 pin map on IO extender module - @param d6[in] LCD data 2 pin map on IO extender module - @param d7[in] LCD data 3 pin map on IO extender module - */ - void config (uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, - uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7 ); - - /*! - @method - @abstract Writes an 4 bit value to the LCD. - @discussion Writes 4 bits (the least significant) to the LCD control data lines. - @param value[in] Value to write to the LCD - @param more[in] Value to distinguish between command and data. - COMMAND == command, DATA == data. - */ - void write4bits(uint8_t value, uint8_t mode); - - /*! - @method - @abstract Pulse the LCD enable line (En). - @discussion Sends a pulse of 1 uS to the Enable pin to execute an command - or write operation. - */ - void pulseEnable(uint8_t); - - - uint8_t _Addr; // I2C Address of the IO expander - uint8_t _backlightPinMask; // Backlight IO pin mask - uint8_t _backlightStsMask; // Backlight status mask - I2CIO _i2cio; // I2CIO PCF8574* expansion module driver I2CLCDextraIO - uint8_t _En; // LCD expander word for enable pin - uint8_t _Rw; // LCD expander word for R/W pin - uint8_t _Rs; // LCD expander word for Register Select pin - uint8_t _data_pins[4]; // LCD data lines - -}; - -#endif diff --git a/libraries/LiquidCrystal/LiquidCrystal_I2C_ByVac.cpp b/libraries/LiquidCrystal/LiquidCrystal_I2C_ByVac.cpp deleted file mode 100644 index 9f73fab..0000000 --- a/libraries/LiquidCrystal/LiquidCrystal_I2C_ByVac.cpp +++ /dev/null @@ -1,105 +0,0 @@ -// --------------------------------------------------------------------------- -// Created by GHPS on 5/06/2012. -// Copyright 2012 - Under creative commons license 3.0: -// Attribution-ShareAlike CC BY-SA -// -// This software is furnished "as is", without technical support, and with no -// warranty, express or implied, as to its usefulness for any purpose. -// -// Thread Safe: No -// Extendable: Yes -// -// @file LiquidCrystal_I2C_ByVac.c -// This file implements a basic liquid crystal library that comes as standard -// in the Arduino SDK but using the extension board BV4218/BV4208 from ByVac. -// -// @brief -// This is a basic implementation of the LiquidCrystal library of the -// Arduino SDK. The original library has been reworked in such a way that -// this class implements the all methods to command an LCD based -// on the Hitachi HD44780 and compatible chipsets using I2C extension -// backpack BV4218 from ByVac. -// -// The functionality provided by this class and its base class is identical -// to the original functionality of the Arduino LiquidCrystal library. -// -// @author GHPS - ghps@users.sourceforge.net -// --------------------------------------------------------------------------- -#if (ARDUINO < 100) -#include -#else -#include -#endif -#include -#include "LiquidCrystal_I2C_ByVac.h" - -// CONSTRUCTORS -// --------------------------------------------------------------------------- -LiquidCrystal_I2C_ByVac::LiquidCrystal_I2C_ByVac( uint8_t lcd_Addr ) -{ - _Addr = lcd_Addr; - _polarity = NEGATIVE; -} - -// PUBLIC METHODS -// --------------------------------------------------------------------------- - -// -// begin -void LiquidCrystal_I2C_ByVac::begin(uint8_t cols, uint8_t lines, uint8_t dotsize) -{ - Wire.begin(); - LCD::begin ( cols, lines, dotsize ); -} - -// User commands - users can expand this section -//---------------------------------------------------------------------------- -// Turn the integrated backlight off/on - -// setBacklight -void LiquidCrystal_I2C_ByVac::setBacklight( uint8_t value ) -{ - Wire.beginTransmission(_Addr); - Wire.write(0x03); // ByVac command code 0x03 for backlight - if (value==0) Wire.write(1); else Wire.write((byte)0); // 1 for off since polarity is NEGATIVE - Wire.endTransmission(); -} - -// Turn the contrast off/on - -// setContrast -void LiquidCrystal_I2C_ByVac::setContrast( uint8_t value ) -{ - Wire.beginTransmission(_Addr); - Wire.write(0x05); // ByVac command code 0x05 for contrast - if (value==0) Wire.write((byte)0); else Wire.write(1); - Wire.endTransmission(); -} - -// PRIVATE METHODS -// --------------------------------------------------------------------------- - -// -// init -int LiquidCrystal_I2C_ByVac::init() -{ - int status = 0; - - // ByVac backpack initialized by onboard firmware - // ------------------------------------------------------------------------ - status=1; - return ( status ); -} - -// low level data pushing commands -//---------------------------------------------------------------------------- - -// -// send - write either command or data -void LiquidCrystal_I2C_ByVac::send(uint8_t value, uint8_t mode) -{ - Wire.beginTransmission(_Addr); - Wire.write(mode+1); // map COMMAND (0) -> ByVac command code 0x01/ DATA (1) -> ByVac command code 0x02 - Wire.write(value); - Wire.endTransmission(); -} diff --git a/libraries/LiquidCrystal/LiquidCrystal_I2C_ByVac.h b/libraries/LiquidCrystal/LiquidCrystal_I2C_ByVac.h deleted file mode 100644 index 028861d..0000000 --- a/libraries/LiquidCrystal/LiquidCrystal_I2C_ByVac.h +++ /dev/null @@ -1,126 +0,0 @@ -// --------------------------------------------------------------------------- -// Created by GHPS on 5/06/2012. -// Copyright 2012 - Under creative commons license 3.0: -// Attribution-ShareAlike CC BY-SA -// -// This software is furnished "as is", without technical support, and with no -// warranty, express or implied, as to its usefulness for any purpose. -// -// Thread Safe: No -// Extendable: Yes -// -// @file LiquidCrystal_I2C_ByVac.c -// This file implements a basic liquid crystal library that comes as standard -// in the Arduino SDK but using the extension board BV4218/BV4208 from ByVac. -// -// @brief -// This is a basic implementation of the LiquidCrystal library of the -// Arduino SDK. The original library has been reworked in such a way that -// this class implements the all methods to command an LCD based -// on the Hitachi HD44780 and compatible chipsets using I2C extension -// backpack BV4218 from ByVac. -// -// The functionality provided by this class and its base class is identical -// to the original functionality of the Arduino LiquidCrystal library. -// -// @author GHPS - ghps-et-users-sourceforge-net -// --------------------------------------------------------------------------- -#ifndef LiquidCrystal_I2C_ByVac_h -#define LiquidCrystal_I2C_ByVac_h -#include -#include - -#include -#include "LCD.h" - - -class LiquidCrystal_I2C_ByVac : public LCD -{ -public: - - /*! - @method - @abstract Class constructor. - @discussion Initializes class variables and defines the I2C address of the - LCD. The constructor does not initialize the LCD. - - @param lcd_Addr[in] I2C address of the IO expansion module. For BV4218, - the address can be configured using the address commands (to be implemented). - */ - LiquidCrystal_I2C_ByVac (uint8_t lcd_Addr); - - /*! - @function - @abstract LCD initialization and associated HW. - @discussion Initializes the LCD to a given size (col, row). This methods - initializes the LCD, therefore, it MUST be called prior to using any other - method from this class or parent class. - - The begin method can be overloaded if necessary to initialize any HW that - is implemented by a library and can't be done during construction, here - we use the Wire class. - - @param cols[in] the number of columns that the display has - @param rows[in] the number of rows that the display has - @param charsize[in] size of the characters of the LCD: LCD_5x8DOTS or - LCD_5x10DOTS. - */ - virtual void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS); - - /*! - @function - @abstract Send a particular value to the LCD. - @discussion Sends a particular value to the LCD for writing to the LCD or - as an LCD command. - - Users should never call this method. - - @param value[in] Value to send to the LCD. - @param mode[in] DATA - write to the LCD CGRAM, COMMAND - write a - command to the LCD. - */ - virtual void send(uint8_t value, uint8_t mode); - - - /*! - @function - @abstract Switch-on/off the LCD backlight. - @discussion Switch-on/off the LCD backlight. - - @param value: backlight mode (HIGH|LOW) - */ - void setBacklight ( uint8_t value ); - - /*! - @function - @abstract Switch-on/off the LCD contrast. - @discussion Switch-on/off the LCD contrast. - - - @param value: contrast mode (HIGH|LOW) - */ - void setContrast ( uint8_t value ); - -private: - - /*! - @method - @abstract Initializes the LCD class - @discussion Initializes the LCD class and IO expansion module. - */ - int init(); - - /*! - @function - @abstract Initialises class private variables - @discussion This is the class single point for initialising private variables. - - @param lcd_Addr[in] I2C address of the IO expansion module. For BV4218, - the address can be configured using the address commands. - */ - - uint8_t _Addr; // I2C Address of the IO expander - -}; - -#endif diff --git a/libraries/LiquidCrystal/LiquidCrystal_SR.cpp b/libraries/LiquidCrystal/LiquidCrystal_SR.cpp deleted file mode 100644 index 64aae2f..0000000 --- a/libraries/LiquidCrystal/LiquidCrystal_SR.cpp +++ /dev/null @@ -1,211 +0,0 @@ -// --------------------------------------------------------------------------- -// Created by Francisco Malpartida on 20/08/11. -// Copyright 2011 - Under creative commons license 3.0: -// Attribution-ShareAlike CC BY-SA -// -// This software is furnished "as is", without technical support, and with no -// warranty, express or implied, as to its usefulness for any purpose. -// -// Thread Safe: No -// Extendable: Yes -// -// @file LiquidCrystal_SR.h -// Connects an LCD using 2 or 3 pins from the Arduino, via an 8-bit -// ShiftRegister (SR from now on). -// -// @brief -// This is a port of the ShiftRegLCD library from raron and ported to the -// LCD library. -// -// The functionality provided by this class and its base class is identical -// to the original functionality of the Arduino LiquidCrystal library and can -// be used as such. -// -// Modified to work serially with the shiftOut() function, an 8-bit -// unlatched, no-tristate, unidirectional SIPO (Serial-In-Parallel-Out) -// shift register (IE a very simple SR), and an LCD in 4-bit mode. -// Any such shift register should do (pref. 74LS family IC's for 2-wire). -// I used 74LS164, for the reason that's what I had at hand. -// -// Connection description: -// -// SR output: -// Bit #0 - N/C - not connected, used to hold a zero -// Bit #1 - N/C -// Bit #2 - connects to RS (Register Select) on the LCD -// Bits #3-6 - connects to LCD data inputs D4 - D7. -// Bit #7 - enables the LCD enable-puls (via the diode-resistor AND "gate") -// -// 2 or 3 Pins required from the Arduino for Data, Clock and (optional) Enable -// If not using Enable, the Data pin is used for the enable signal by defining -// the same pin for Enable as for Data. Data and Clock outputs/pins goes to -// the shiftregister. -// LCD RW-pin hardwired to LOW (only writing to LCD). -// Busy Flag (BF, data bit D7) is not read. -// -// Original project homepage: http://code.google.com/p/arduinoshiftreglcd/ -// -// -// History -// 2012.03.29 bperrybap - Added delays for faster fio shiftout (it got too fast) -// AVR needed delay. cmd/write delays are based on CPU speed so it works on pic32. -// Added code to support indicating two wire mode by using enable=data pin -// (documentation indicated this as working) -// Fixed incorrect use of 5x10 for default font - now matches original LQ library. -// can now eliminate enable pin in constructor for two wire mode. -// 2012.01.16 Florian Fida - faster digitalWrite/shiftOut -// 2011.10.29 fmalpartida - adaption of the library to the LCD class hierarchy. -// 2011.07.02 Fixed a minor flaw in setCursor function. No functional change, -// just a bit more memory efficient. -// Thanks to CapnBry (from google code and github) who noticed it. -// URL to his version of shiftregLCD: -// https://github.com/CapnBry/HeaterMeter/commit/c6beba1b46b092ab0b33bcbd0a30a201fd1f28c1 -// 2009.07.30 raron - minor corrections to the comments. -// Fixed timing to datasheet safe. Fixed keyword highlights. -// 2009.07.28 Mircho / raron - a new modification to the schematics, and a -// more streamlined interface -// 2009.07.27 Thanks to an excellent suggestion from mircho at the Arduino -// playgrond forum, the number of wires now required is only two! -// 2009.07.25 raron - Fixed comments. I really messed up the comments before -// posting this, so I had to fix it. -// Renamed a function, but no improvements or functional changes. -// 2009.07.23 Incorporated some proper initialization routines -// inspired (lets say copy-paste-tweaked) from LiquidCrystal -// library improvements from LadyAda. -// 2009.05.23 raron - first version, but based mostly (as in almost verbatim) -// on the "official" LiquidCrystal library. -// -// -// @author F. Malpartida - fmalpartida@gmail.com -// --------------------------------------------------------------------------- -#include -#include -#include - -#if (ARDUINO < 100) -#include -#else -#include -#endif -#include "LiquidCrystal_SR.h" - -#include "FastIO.h" - - -// CONSTRUCTORS -// --------------------------------------------------------------------------- -// Assuming 1 line 8 pixel high font -LiquidCrystal_SR::LiquidCrystal_SR (uint8_t srdata, uint8_t srclock, - uint8_t enable ) -{ - init ( srdata, srclock, enable, 1, 0 ); -} - - -// PRIVATE METHODS -// --------------------------------------------------------------------------- - -// -// init -void LiquidCrystal_SR::init(uint8_t srdata, uint8_t srclock, uint8_t enable, - uint8_t lines, uint8_t font) -{ - (void)lines; - (void)font; - // Initialise private variables - _two_wire = 0; - - _srDataRegister = fio_pinToOutputRegister(srdata); - _srDataBit = fio_pinToBit(srdata); - _srClockRegister = fio_pinToOutputRegister(srclock); - _srClockBit = fio_pinToBit(srclock); - - if ((enable == TWO_WIRE) || (enable == srdata)) - { - _two_wire = 1; - _srEnableRegister = _srDataRegister; - _srEnableBit = _srDataBit; - } - else - { - _srEnableRegister = fio_pinToOutputRegister(enable); - _srEnableBit = fio_pinToBit(enable); - } - - // Configure control pins as outputs - // ------------------------------------------------------------------------ - - _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS; -} - -// -// shiftIt -void LiquidCrystal_SR::shiftIt(uint8_t val) -{ - if (_two_wire) - { - // Clear to get Enable LOW - fio_shiftOut(_srDataRegister, _srDataBit, _srClockRegister, _srClockBit); - } - fio_shiftOut(_srDataRegister, _srDataBit, _srClockRegister, _srClockBit, val, MSBFIRST); - - // LCD ENABLE PULSE - // - // While this library is written with a shift register without an output - // latch in mind, it can work in 3-wire mode with a shiftregister with a - // latch. The shiftregister latch pin (STR, RCL or similar) is then - // connected to the LCD enable pin. The LCD is (very likely) slower - // to read the Enable pulse, and then reads the new contents of the SR. - ATOMIC_BLOCK(ATOMIC_RESTORESTATE) - { - fio_digitalWrite_HIGH(_srEnableRegister, _srEnableBit); - delayMicroseconds (1); // enable pulse must be >450ns - fio_digitalWrite_SWITCHTO(_srEnableRegister, _srEnableBit, LOW); - } // end critical section -} - -// PUBLIC METHODS -// --------------------------------------------------------------------------- - - -/************ low level data pushing commands **********/ -// -// send -void LiquidCrystal_SR::send(uint8_t value, uint8_t mode) -{ - // Divide byte in two nibbles include the RS signal - // and format it for shiftregister output wiring to the LCD - // We are only interested in my COMMAND or DATA for myMode - uint8_t myMode = ( mode == DATA ) ? SR_RS_BIT : 0; // RS bit; LOW: command. HIGH: character. - - if ( mode != FOUR_BITS ) - { - shiftIt(myMode | SR_EN_BIT | ((value >> 1) & 0x78)); // upper nibble - } - - shiftIt(myMode | SR_EN_BIT | ((value << 3) & 0x78)); // lower nibble - /* - * Add some delay since this code is so fast it needs some added delay - * even on AVRs because the shiftout is shorter than the LCD command execution time. - */ -#if (F_CPU <= 16000000) - if(_two_wire) - delayMicroseconds ( 10 ); - else - delayMicroseconds ( 17 ); // 3 wire mode is faster so it must delay longer -#else - delayMicroseconds ( 37 ); // commands & data writes need > 37us to complete -#endif - -} - -// -// setBacklightPin -void LiquidCrystal_SR::setBacklightPin ( uint8_t pin, t_backlighPol pol ) -{ (void)pin; (void)pol; } - -// -// setBacklight -void LiquidCrystal_SR::setBacklight ( uint8_t mode ) -{ (void)mode; } - diff --git a/libraries/LiquidCrystal/LiquidCrystal_SR.h b/libraries/LiquidCrystal/LiquidCrystal_SR.h deleted file mode 100644 index 0d22022..0000000 --- a/libraries/LiquidCrystal/LiquidCrystal_SR.h +++ /dev/null @@ -1,176 +0,0 @@ -// --------------------------------------------------------------------------- -// Created by Francisco Malpartida on 20/08/11. -// Copyright 2011 - Under creative commons license 3.0: -// Attribution-ShareAlike CC BY-SA -// -// This software is furnished "as is", without technical support, and with no -// warranty, express or implied, as to its usefulness for any purpose. -// -// Thread Safe: No -// Extendable: Yes -// -// @file LiquidCrystal_SR.h -// Connects an LCD using 2 or 3 pins from the Arduino, via an 8-bit -// ShiftRegister (SR from now on). -// -// @brief -// This is a port of the ShiftRegLCD library from raron and ported to the -// LCD library. -// -// The functionality provided by this class and its base class is identical -// to the original functionality of the Arduino LiquidCrystal library and can -// be used as such. -// -// Modified to work serially with the shiftOut() function, an 8-bit -// unlatched, no-tristate, unidirectional SIPO (Serial-In-Parallel-Out) -// shift register (IE a very simple SR), and an LCD in 4-bit mode. -// Any such shift register should do (pref. 74LS family IC's for 2-wire). -// I used 74LS164, for the reason that's what I had at hand. -// -// Connection description: -// -// SR output: -// Bit #0 - N/C - not connected, used to hold a zero -// Bit #1 - N/C -// Bit #2 - connects to RS (Register Select) on the LCD -// Bits #3-6 - connects to LCD data inputs D4 - D7. -// Bit #7 - enables the LCD enable-puls (via the diode-resistor AND "gate") -// -// 2 or 3 Pins required from the Arduino for Data, Clock and (optional) Enable -// If not using Enable, the Data pin will be used for the enable signal. -// 2 wire mode can be indicated by: -// - ommitting the enable pin in constructor -// - defining the same pin for Enable as for Data in constructor -// - by using the token TWO_WIRE for the enable pin. -// -// Data and Clock outputs/pins goes to the shiftregister. -// LCD RW-pin hardwired to LOW (only writing to LCD). -// Busy Flag (BF, data bit D7) is not read. -// -// Original project homepage: http://code.google.com/p/arduinoshiftreglcd/ -// -// -// History -// 2012.03.29 bperrybap - can now eliminate enable pin in constructor for two wire mode. -// 2011.10.29 fmalpartida - adaption of the library to the LCD class hierarchy. -// 2011.07.02 Fixed a minor flaw in setCursor function. No functional change, -// just a bit more memory efficient. -// Thanks to CapnBry (from google code and github) who noticed it. -// URL to his version of shiftregLCD: -// https://github.com/CapnBry/HeaterMeter/commit/c6beba1b46b092ab0b33bcbd0a30a201fd1f28c1 -// 2009.07.30 raron - minor corrections to the comments. -// Fixed timing to datasheet safe. Fixed keyword highlights. -// 2009.07.28 Mircho / raron - a new modification to the schematics, and a -// more streamlined interface -// 2009.07.27 Thanks to an excellent suggestion from mircho at the Arduiono -// playgrond forum, the number of wires now required is only two! -// 2009.07.25 raron - Fixed comments. I really messed up the comments before -// posting this, so I had to fix it. -// Renamed a function, but no improvements or functional changes. -// 2009.07.23 Incorporated some proper initialization routines -// inspired (lets say copy-paste-tweaked) from LiquidCrystal -// library improvements from LadyAda. -// 2009.05.23 raron - first version, but based mostly (as in almost verbatim) -// on the "official" LiquidCrystal library. -// -// -// -// @author F. Malpartida - fmalpartida@gmail.com -// --------------------------------------------------------------------------- -#ifndef _LIQUIDCRYSTAL_SR_ -#define _LIQUIDCRYSTAL_SR_ - -#include -#include "LCD.h" -#include "FastIO.h" - - -// two-wire indicator constant -// --------------------------------------------------------------------------- -#define TWO_WIRE 204 -#define SR_RS_BIT 0x04 -#define SR_EN_BIT 0x80 - -class LiquidCrystal_SR : public LCD -{ -public: - /*! - @method - @abstract LCD SHIFT REGISTER constructors. - @discussion Defines the pin assignment that the LCD will have. - The constructor does not initialize the LCD. Assuming 1 line 8 pixel high - font. - - @param srdata[in] pin for shiftregister data line. - @param srclock[in] pin for shiftregister clock line. - @param enable[in] optional direct enable pin for the LCD - */ - LiquidCrystal_SR ( uint8_t srdata, uint8_t srclock, uint8_t enable=TWO_WIRE ); - - /*! - @function - @abstract Send a particular value to the LCD. - @discussion Sends a particular value to the LCD for writing to the LCD or - as an LCD command using the shift register. - - Users should never call this method. - - @param value[in] Value to send to the LCD. - @result mode LOW - write to the LCD CGRAM, HIGH - write a command to - the LCD. - */ - virtual void send(uint8_t value, uint8_t mode); - - - /*! - @function - @abstract Sets the pin to control the backlight. - @discussion Sets the pin in the device to control the backlight. - @warning Currently not supported - - @param mode: backlight mode (HIGH|LOW) - @param pol: backlight polarity - */ - void setBacklightPin ( uint8_t pin, t_backlighPol pol ); - - /*! - @function - @abstract Switch-on/off the LCD backlight. - @discussion Switch-on/off the LCD backlight. - The setBacklightPin has to be called before setting the backlight for - this method to work. @see setBacklightPin. - - @param mode: backlight mode (HIGH|LOW) - */ - void setBacklight ( uint8_t mode ); - -private: - - /*! - @method - @abstract Initializes the LCD pin allocation - @discussion Initializes the LCD pin allocation and configuration. - */ - void init ( uint8_t srdata, uint8_t srclock, uint8_t enable, uint8_t lines, - uint8_t font ); - - /*! - * @method - * @abstract takes care of shifting and the enable pulse - */ - void shiftIt (uint8_t val); - - uint8_t _enable_pin; // Enable Pin - uint8_t _two_wire; // two wire mode - - fio_register _srDataRegister; // Serial Data pin - fio_bit _srDataBit; - fio_register _srClockRegister; // Clock Pin - fio_bit _srClockBit; - fio_register _srEnableRegister; // Enable Pin - fio_bit _srEnableBit; - -}; - -#endif - diff --git a/libraries/LiquidCrystal/LiquidCrystal_SR1W.cpp b/libraries/LiquidCrystal/LiquidCrystal_SR1W.cpp deleted file mode 100644 index a04dfb2..0000000 --- a/libraries/LiquidCrystal/LiquidCrystal_SR1W.cpp +++ /dev/null @@ -1,254 +0,0 @@ -// --------------------------------------------------------------------------- -// Created/Adapted by Stephen Erisman 2013-07-06 -// Copyright 2013 - Under creative commons license 3.0: -// Attribution-ShareAlike CC BY-SA -// -// This software is furnished "as is", without technical support, and with no -// warranty, express or implied, as to its usefulness for any purpose. -// -// Thread Safe: No -// Extendable: Yes -// -// @file LiquidCrystal_SR1W.cpp -// Connects a hd44780 LCD using 1 pin from the Arduino, via an 8-bit Latching -// ShiftRegister (SR1W from now on). -// -// @brief -// This is an optimized implementation of the 1-wire shift concept developed by -// Roman Black (http://www.romanblack.com/shift1.htm) that also makes use of -// (and merges) the diode-resistor AND "gate" concept (http://www.rentron.com/Myke1.htm) -// as well as introducing some new and original ideas (particularly how HW_CLEAR works). -// -// -// See the corresponding SR1W header file for full details. -// -// History -// 2013.07.31 serisman - fixed potential interrupt bug and made more performance optimizations -// 2013.07.10 serisman - more performance optimizations and modified the HW_CLEAR circuit a bit -// 2013.07.09 serisman - added an even faster version that performs the clear in hardware -// 2013.07.08 serisman - changed code to shift data MSB first to match SR2W -// 2013.07.07 serisman - major speed optimization -// 2013.07.06 serisman - created/modified from SR2W and FastIO sources to create SR1W -// @author S. Erisman - arduino@serisman.com -// --------------------------------------------------------------------------- - -#include "LiquidCrystal_SR1W.h" - -// CONSTRUCTORS -// --------------------------------------------------------------------------- -// Assuming 1 line 8 pixel high font -LiquidCrystal_SR1W::LiquidCrystal_SR1W (uint8_t srdata, t_sr1w_circuitType circuitType, t_backlighPol blpol) -{ - init ( srdata, circuitType, blpol, 1, 0 ); -} - -// PRIVATE METHODS -// --------------------------------------------------------------------------- - -// -// init -void LiquidCrystal_SR1W::init(uint8_t srdata, t_sr1w_circuitType circuitType, t_backlighPol blpol, uint8_t lines, uint8_t font) -{ - (void)lines; - (void)font; - _srRegister = fio_pinToOutputRegister(srdata); - _srMask = fio_pinToBit(srdata); - - _circuitType = circuitType; - - _blPolarity = blpol; - - _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS; - - clearSR(); - - backlight(); // set default backlight state to on -} - -// -// clearSR -uint8_t LiquidCrystal_SR1W::clearSR() -{ - uint8_t numDelays = 0; - - // Store these as local variables for extra performance (and smaller compiled sketch size) - fio_register srRegister = _srRegister; - fio_bit srMask = _srMask; - - // Set the Serial PIN to a LOW state - SR1W_ATOMIC_WRITE_LOW(srRegister, srMask); - - // We need to delay to make sure the Data and Latch/EN capacitors are fully discharged - // This also triggers the EN pin because of the falling edge. - SR1W_DELAY(); - - ATOMIC_BLOCK(ATOMIC_RESTORESTATE) - { - // Pre-calculate these values for extra performance and to make sure the clock pulse is as quick as possible - fio_bit reg_val = *srRegister; - fio_bit bit_low = reg_val & ~srMask; - fio_bit bit_high = reg_val | srMask; - - // Clear the shift register (without triggering the Latch/EN pins) - // We only need to shift 7 bits here because the subsequent HIGH transistion will also shift a '0' in. - for (int8_t i = 6; i>=0; i--) - { - // Shift in a '0' (NOTE: This clock pulse needs to execute as quickly as possible) - *srRegister = bit_high; - *srRegister = bit_low; - } - - // Set the Serial PIN to a HIGH state so the next nibble/byte can be loaded - // This also shifts the 8th '0' bit in. - *srRegister = bit_high; - } - - // Give the Data capacitor a chance to fully charge - SR1W_DELAY(); - - return numDelays; -} - -// -// loadSR -uint8_t LiquidCrystal_SR1W::loadSR(uint8_t val) -{ - uint8_t numDelays = 0; - - // Store these as local variables for extra performance (and smaller compiled sketch size) - fio_register srRegister = _srRegister; - fio_bit srMask = _srMask; - - // NOTE: This assumes the Serial PIN is already HIGH and the Data capacitor is fully charged - uint8_t previousBit = 1; - - // Send the data to the shift register (MSB first) - for (int8_t i = 7; i>=0; i--) - { - if (val & 0x80) - { - if (previousBit == 0) - { - // We need to make sure the Data capacitor has fully recharged - SR1W_DELAY(); - } - - previousBit = 1; - - ATOMIC_BLOCK(ATOMIC_RESTORESTATE) - { - // Pre-calculate these values to make sure the clock pulse is as quick as possible - fio_bit reg_val = *srRegister; - fio_bit bit_low = reg_val & ~srMask; - fio_bit bit_high = reg_val | srMask; - - // Shift in a '1' (NOTE: This clock pulse needs to execute as quickly as possible) - *srRegister = bit_low; - *srRegister = bit_high; - } - } - else - { - // Shift in a '0' - SR1W_ATOMIC_WRITE_LOW(srRegister, srMask); - - // We need to make sure the Data capacitor has fully discharged - SR1W_DELAY(); - - previousBit = 0; - - SR1W_ATOMIC_WRITE_HIGH(srRegister, srMask); - } - val <<= 1; - } - - // NOTE: Serial PIN is currently HIGH - - // For SW_CLEAR, we need to delay to make sure the Latch/EN capacitor is fully charged. - // This triggers the Latch pin because of the rising edge. - // For HW_CLEAR, we need to delay to give the hardware time to perform the clear. - // This also gives the Data capacitor a chance to fully charge - SR1W_DELAY(); - - if (_circuitType == SW_CLEAR) - { - // Clear the shift register to get ready for the next nibble/byte - // This also discharges the Latch/EN capacitor which finally triggers the EN pin because of the falling edge. - numDelays += clearSR(); - } - else - { - // For some reason HW_CLEAR isn't totally stable unless we delay a little bit more. - // TODO... figure this out... - SR1W_DELAY(); - } - - return numDelays; -} - -// PUBLIC METHODS -// --------------------------------------------------------------------------- - - -/************ low level data pushing commands **********/ -// -// send -void LiquidCrystal_SR1W::send(uint8_t value, uint8_t mode) -{ - uint8_t numDelays = 0; - - uint8_t data; - - if ( mode != FOUR_BITS ) - { - // upper nibble - data = ( mode == DATA ) ? SR1W_RS_MASK : 0; - data |= SR1W_EN_MASK | SR1W_UNUSED_MASK; - data |= _blMask; - - if (value & _BV(4)) data |= SR1W_D4_MASK; - if (value & _BV(5)) data |= SR1W_D5_MASK; - if (value & _BV(6)) data |= SR1W_D6_MASK; - if (value & _BV(7)) data |= SR1W_D7_MASK; - - numDelays += loadSR(data); - } - - // lower nibble - data = ( mode == DATA ) ? SR1W_RS_MASK : 0; - data |= SR1W_EN_MASK | SR1W_UNUSED_MASK; - data |= _blMask; - - if (value & _BV(0)) data |= SR1W_D4_MASK; - if (value & _BV(1)) data |= SR1W_D5_MASK; - if (value & _BV(2)) data |= SR1W_D6_MASK; - if (value & _BV(3)) data |= SR1W_D7_MASK; - - numDelays += loadSR(data); - - // Make sure we wait at least 40 uS between bytes. - unsigned int totalDelay = numDelays * SR1W_DELAY_US; - if (totalDelay < 40) - delayMicroseconds(40 - totalDelay); -} - -// -// setBacklight -void LiquidCrystal_SR1W::setBacklight ( uint8_t value ) -{ - // Check for polarity to configure mask accordingly - // ---------------------------------------------------------- - if ( ((_blPolarity == POSITIVE) && (value > 0)) || - ((_blPolarity == NEGATIVE ) && ( value == 0 )) ) - { - _blMask = SR1W_BL_MASK; - } - else - { - _blMask = 0; - } - - // Send a dummy (non-existant) command to allow the backlight PIN to be latched. - // The seems to be safe because the LCD appears to treat this as a NOP. - send(0, COMMAND); -} \ No newline at end of file diff --git a/libraries/LiquidCrystal/LiquidCrystal_SR1W.h b/libraries/LiquidCrystal/LiquidCrystal_SR1W.h deleted file mode 100644 index 7b26900..0000000 --- a/libraries/LiquidCrystal/LiquidCrystal_SR1W.h +++ /dev/null @@ -1,373 +0,0 @@ - -// --------------------------------------------------------------------------- -// Created/Adapted by Stephen Erisman 2013-07-06 -// Copyright 2013 - Under creative commons license 3.0: -// Attribution-ShareAlike CC BY-SA -// -// This software is furnished "as is", without technical support, and with no -// warranty, express or implied, as to its usefulness for any purpose. -// -// @file LiquidCrystal_SR1W.h -// Connects a hd44780 LCD using 1 pin from the Arduino, via an 8-bit Latching -// ShiftRegister (SR1W from now on). -// -// @brief -// This is the 1 wire shift register interface class for the LCD library -// -// The functionality provided by this class and its base class is a superset of -// the original functionality of the Arduino LiquidCrystal library and can -// be used as such. -// See the LCD class for a full description of the API functions available. -// -// It works with a 8-bit latched, no-tristate, unidirectional SIPO (Serial-In-Parallel-Out) -// shift register, and an hd44780 LCD in 4-bit mode. -// The 74HC595 shift register has been tested. -// -// -// 1 Pin required from the Arduino: -// - Serial PIN: -// The Serial PIN is wired directly to the shift register's Clock PIN and its -// unaltered signal directly triggers the Clock on every LOW to HIGH transition. -// -// Additionally, the Serial PIN is wired through a resistor capacitor (RC) filter to -// the shift register's Data PIN. During a quick transition of the Serial PIN the -// RC filter will maintain the Data PIN's previous value because the capacitor isn't -// given enough time to charge (or discharge) to the alternate state. If the transition -// is held for enough time, however, the RC capacitor will charge (or discharge) and the -// value seen by the Data PIN will have changed state. -// -// There are two circuit versions that behave differently for Latch, Enable, and Clear: -// -// HW_CLEAR version: -// In this version the shift register's Latch and LCD's Enable PINs are wired directly to -// the shift register's Q'H output. The shift register's /Clear PIN is then wired up -// through two logic "gates": first QH and Q'H are AND'd together with a diode-resistor -// "gate" the output of which is NAND'd with VCC using a resistor-NPN-resistor "gate". -// So, /CLR = ((QH AND Q'H) NAND VCC). We also put a capacitor on the NPN base to GND -// to delay the signal a bit and allow the Latch and EN signals some extra time to trigger. -// -// This all fits together as follows: -// 1. We shift in a '1'. -// 2. Ws shift in the other 7 bits. -// 3. At this point the first '1' has been shifted into Q'H causing it to go HIGH. -// 4. When Q'H is HIGH it causes Latch and EN to also go HIGH. -// 5. When Latch transitions to HIGH it changes the shift register outputs to the bits -// that were shifted in. -// 6. This causes QH to go HIGH (if it wasn't already). -// 7. Now that QH AND Q'H are both HIGH they causes the base capacitor to start charging. -// 8. When the capacitor has charged enough the transistor brings /CLR LOW. -// 8. This will cause /CLR to trigger and the shift register will be cleared -// (NOTE: This doesn't change the latched outputs) -// 9. The clearing of the shift register causes Q'H to go LOW. -// 9. When Q'H is LOW it causes Latch and EN to also go LOW. -// 10. When EN transitions to LOW the LCD reads in the bits on the shift register pins -// and does it's thing. -// 11. Now that Q'H is LOW the base capacitor starts discharging. -// 12. When the capacitor has discharged enough the transistor will stop sinking /CLR. -// 13. This will cause /CLR to be pulled back up to HIGH by the VCC pullup resistor -// (it will stay that way until our next nibble/byte has been shifted in) -// 14. We are now ready for our next nibble/byte. -// -// -// SW_CLEAR version: -// In this version the Serial PIN is wired to the shift register's Latch and LCD's Enable -// PINs through another RC filter. These PINs are also wired through a diode (AND "gate") -// tied to the shift register's Q'H output. This combination means that the Latch and -// Enable PINs will be held LOW as long as EITHER the Q'H or RC output is LOW. -// -// This all fits together as follows: -// 1. We shift in a '1'. -// 2. We shift in the other 7 bits. (NOTE: We leave Serial PIN HIGH at the end of this) -// 3. At this point the first '1' has been shifted into Q'H causing it to go HIGH. -// (NOTE: Up until this time Q'H has been LOW so the attached diode has been keeping -// the Latch/EN pins LOW.) -// 4. Now that Q'H is HIGH it causes the attached diode to stop discharging the Latch/EN -// capacitor. We delay here for a while to make sure it is fully charged. -// 5. When the capacitor has charged enough Latch/EN will be HIGH -// 5. When Latch transitions to HIGH it changes the shift register outputs to what was -// shifted in. -// 6. We now bring the Serial PIN LOW and wait for the Latch/EN capacitor to discharge. -// 7. When the capacitor has discharged enough Latch/EN will be LOW -// 8. When EN transitions to LOW the LCD reads in the bits on the shift register pins -// and does it's thing. -// 9. We now shift in '0' 8 times (as quickly as possible). -// 10. If we keep the LOW to HIGH to LOW pulses short enough while shifting in the '0's -// the Latch/EN capacitor won't have time to charge to a point where it will re-trigger -// the Latch/EN pins. -// 11. Now Q'H will be LOW and the shift register has been cleared (NOTE: This doesn't -// change the latched outputs.) -// 12. We now bring the Serial PIN HIGH again and wait for the Data capacitor to recharge. -// 13. When the Data capacitor has fully charged we are ready for our next nibble/byte. -// -// -// These designs incorporate (and merge) ideas originally found here (1-wire concept): -// http://www.romanblack.com/shift1.htm -// and here (diode-resistor AND "gate" EN control): -// http://www.rentron.com/Myke1.htm -// as well as introducing some new and original ideas (particularly how HW_CLEAR works). -// -// Because of its use of the diode AND "gate", the SW_CLEAR design allows for faster sending -// of data to the LCD compared to Roman's original design. With the proposed 5uS delay (see -// notes below), a byte can be sent to the LCD in as little as 30 uS (plus overhead) when -// sending all 1's. This increases to as much as 190 uS (plus overhead) when sending all 0's. -// This is in comparison to Roman's estimate of around 3-4 mS to send a byte. So this -// implementation is 15-133 times faster for the cost of a single (1N4148 or similar) diode. -// -// The HW_CLEAR version is even faster as it can completely eliminate the clearSR() call as -// well as the delays that are needed to latch the data in the SW_CLEAR version. -// -// -// Default Shift Register Bits - Shifted MSB first: -// Bit #0 (QA) - not used -// Bit #1 (QB) - connects to LCD data input D7 -// Bit #2 (QC) - connects to LCD data input D6 -// Bit #3 (QD) - connects to LCD data input D5 -// Bit #4 (QE) - connects to LCD data input D4 -// Bit #5 (QF) - optional backlight control -// Bit #6 (QG) - connects to RS (Register Select) on the LCD -// Bit #7 (QH) - used for /CLR on the HW_CLEAR version (cannot be changed) -// (Q'H) - used for Latch/EN (via the diode AND "gate") (cannot be changed) -// -// NOTE: Any of these can be changed around as needed EXCEPT Bit #7 (QH and Q'H). -// -// -// Circuit Types (for the 74HC595) -// ------------------------------- -// The 74HC595 is a latching shift register. See the explanations above for how these circuits -// work. -// -// -// HW_CLEAR version: (Faster but higher part count) -// ------------------------------------------------ -// -// 74HC595 (VCC) -// +----u----+ | 2.2nF -// (LCD D7)------------1-|QB VCC|-16--+ +----||----(GND) -// (LCD D6)------------2-|QC QA|-15 | -// (LCD D5)------------3-|QD SER|-14-------+--[ Resistor ]--+ -// (LCD D4)------------4-|QE /OE|-13--(GND) 1.5k | -// (BL Circuit)--------5-|QF RCK|-12-----+ | -// | | \ | -// (LCD RS)------------6-|QG SCK|-11-------)----------------+--(Serial PIN) -// | | | -// +-------7-|QH /CLR|-10-------)--+--[ Resistor ]--(VCC) -// | | | / | 1k -// | +--8-|GND Q'H|--9-----+ | -// | | +---------+ | | (GND)--(LCD RW) -/* | | 0.1uF | \ */ -// | (GND)-----||----(VCC) +------)--------------(LCD EN) -// | | / -// |----|<|----+--[ Resistor ]--| | -// diode | 1k C -// | | -// +-------------+---B-|> (NPN) -// | | -// (2.2nF) = E -// | | -// (GND) (GND) -// -// -// SW_CLEAR version: (Lower part count but slower) -// ----------------------------------------------- -// -// 74HC595 (VCC) -// +----u----+ | 2.2nF -// (LCD D7)------------1-|QB VCC|-16--+ +----||----(GND) -// (LCD D6)------------2-|QC QA|-15 | -// (LCD D5)------------3-|QD SER|-14---------+--[ Resistor ]--+ -// (LCD D4)------------4-|QE /OE|-13--(GND) 1.5k | -// (BL Circuit)--------5-|QF RCK|-12---------+ | -// | | \ | -// (LCD RS)------------6-|QG SCK|-11-----------)--------------+--(Serial PIN) -// 7-|QH /CLR|-10--(VCC) / | -// +--8-|GND Q'H|--9---|<|---+--[ Resistor ]--+ -// | +---------+ diode | 1.5k -// | | -// | 0.1uF | -// (GND)-----||----(VCC) +----||----(GND) -// | 2.2nF -// (LCD EN)-------------------------------------+ -// (LCD RW)--(GND) -// -// -// In either case the LCD RW pin is hardwired to GND meaning we will only be able to write -// to the LCD. -// Therefore, the Busy Flag (BF, data bit D7) is not able to be read and we have to make use -// of the minimum delay time constraints. This isn't really a problem because it usually -// takes us longer to shift and latch the data than the minimum delay anyway. For now, we -// simply keep track of our delays and add more delay at the end to get to at least 37 uS. -// -// -// Backlight Control Circuit -// ------------------------- -// Since we are using the latching nature of the shift resiter we don't need the extra -// backlight circuitry that SR2W uses. Keeping it around, however, would still work because -// the circuit just slows down the transitions to the mosfet a bit. -// -// Here are two more optimized versions that can be used. -// -// -// NPN Transistor version: (Cheaper but more power draw and higher part count) -// --------------------------------------------------------------------------- -// -// (value depends on LCD, 100ohm is usually safe) -// (LCD BL anode)---[ resistor ]---(VCC) -// -// (LCD BL cathode)---------------+ -// | -// C -// | -// (BL input)--[ Resistor ]---B-|> (NPN) -// 1k | -// E -// | -// (GND) -// -// NOTE: The Bate resistor is needed because the NPN is current fed. For lower -// power draw, try a 10k resistor. -// -// -// N-CH Mosfet version: (More costly but less power draw and lower part count) -// --------------------------------------------------------------------------- -// -// (value depends on LCD, 100ohm is usually safe) -// (LCD BL anode)---[ resistor ]---(VCC) -// -// (LCD BL cathode)---------------+ -// | -// D -// | -// (BL input)----------------G-|-< (2N7000 FET) -// | -// S -// | -// (GND) -// -// NOTE: Gate resistor not needed because the mosfet is voltage fed and only really -// pulls current while switching. -// -// In either case, when the BL input is HIGH the LCD backlight will turn on. -// -// -// History -// 2013.07.31 serisman - fixed potential interrupt bug and made more performance optimizations -// 2013.07.10 serisman - more performance optimizations and modified the HW_CLEAR circuit a bit -// 2013.07.09 serisman - added an even faster version that performs the clear in hardware -// 2013.07.08 serisman - changed code to shift data MSB first to match SR2W -// 2013.07.07 serisman - major speed optimization -// 2013.07.06 serisman - created/modified from SR2W source to create SR1W -// @author S. Erisman - arduino@serisman.com -// -------------------------------------------------------------------------------- - -#ifndef _LIQUIDCRYSTAL_SR1W_ -#define _LIQUIDCRYSTAL_SR1W_ - -#include -#include "LCD.h" -#include "FastIO.h" - -// 1-wire SR timing constants -// --------------------------------------------------------------------------- - -// NOTE: -// The 1.5k resistor (1.2k - 1.8k with a 20% tolerance) -// takes between 2.376uS and 4.36uS to fully charge or discharge -// the 2.2n capacitor (1.98n - 2.42n with a 10% tolerance). -// We round this up to a 5uS delay to provide an additional safety margin. - -#define SR1W_DELAY_US 5 -#define SR1W_DELAY() { delayMicroseconds(SR1W_DELAY_US); numDelays++; } - -// 1-wire SR output bit constants -// --------------------------------------------------------------------------- - -#define SR1W_UNUSED_MASK 0x01 // Set unused bit(s) to '1' as they are slightly faster to clock in. -#define SR1W_D7_MASK 0x02 -#define SR1W_D6_MASK 0x04 -#define SR1W_D5_MASK 0x08 -#define SR1W_D4_MASK 0x10 -#define SR1W_BL_MASK 0x20 -#define SR1W_RS_MASK 0x40 -#define SR1W_EN_MASK 0x80 // This cannot be changed. It has to be the first thing shifted in. - -#define SR1W_ATOMIC_WRITE_LOW(reg, mask) ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { *reg &= ~mask; } -#define SR1W_ATOMIC_WRITE_HIGH(reg, mask) ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { *reg |= mask; } - - -typedef enum { SW_CLEAR, HW_CLEAR } t_sr1w_circuitType; - -class LiquidCrystal_SR1W : public LCD -{ -public: - /*! - @method - @abstract LCD 1 wire SHIFT REGISTER constructor. - @discussion Defines the pin assignments that connect to the shift register. - The constructor does not initialize the LCD. Assuming 1 line 8 pixel high - font. - - @param srdata[in] Arduino pin for shift register. - @param circuitType[in] optionally select an alternate circuit type - @param blpol[in] optional backlight polarity (default = POSITIVE) - */ - LiquidCrystal_SR1W (uint8_t srdata, t_sr1w_circuitType circuitType, - t_backlighPol blpol = POSITIVE); - - /*! - @function - @abstract Send a particular value to the LCD. - @discussion Sends a particular value to the LCD for writing to the LCD or - as an LCD command using the shift register. - - Users should never call this method. - - @param value[in] Value to send to the LCD. - @param mode[in] DATA=8bit data, COMMAND=8bit cmd, FOUR_BITS=4bit cmd - the LCD. - */ - virtual void send(uint8_t value, uint8_t mode); - - - /*! - @function - @abstract Switch-on/off the LCD backlight. - @discussion Switch-on/off the LCD backlight. - The setBacklightPin has to be called before setting the backlight for - this method to work. @see setBacklightPin. - - @param mode[in] backlight mode (0 off, non-zero on) - */ - void setBacklight ( uint8_t mode ); - -private: - - /*! - @method - @abstract Initializes the LCD pin allocation - @discussion Initializes the LCD pin allocation and configuration. - */ - void init ( uint8_t srdata, t_sr1w_circuitType circuitType, t_backlighPol blpol, - uint8_t lines, uint8_t font ); - - /*! - @method - @abstract Clears the shift register to ensure the Latch/Enable pins aren't - triggered accidentally. - */ - uint8_t clearSR (); - - /*! - * @method - * @abstract takes care of shifting and the enable pulse - */ - uint8_t loadSR (uint8_t val); - - fio_register _srRegister; // Serial PIN - fio_bit _srMask; - - t_sr1w_circuitType _circuitType; - - uint8_t _blPolarity; - uint8_t _blMask; -}; -#endif \ No newline at end of file diff --git a/libraries/LiquidCrystal/LiquidCrystal_SR2W.cpp b/libraries/LiquidCrystal/LiquidCrystal_SR2W.cpp deleted file mode 100644 index e76a585..0000000 --- a/libraries/LiquidCrystal/LiquidCrystal_SR2W.cpp +++ /dev/null @@ -1,137 +0,0 @@ -// --------------------------------------------------------------------------- -// Created/Adapted by Bill Perry 2012-03-16 -// Copyright 2012 - Under creative commons license 3.0: -// Attribution-ShareAlike CC BY-SA -// -// This software is furnished "as is", without technical support, and with no -// warranty, express or implied, as to its usefulness for any purpose. -// -// Thread Safe: No -// Extendable: Yes -// -// @file LiquidCrystal_SR2W.cpp -// Connects a hd44780 LCD using 2 pins from the Arduino, via an 8-bit -// ShiftRegister (SR2W from now on). -// -// @brief -// This is a port of the ShiftRegLCD library from raron and ported to the -// LCD library. -// -// -// See the corresponding SR2W header file for full details. -// -// History -// 2012.03.29 bperrybap - Fixed incorrect use of 5x10 for default font -// (now matches original LQ library) -// Fixed typo in SR2W mask define names -// changed default backlight state to on -// 2012.03.16 bperrybap - created/modified from SR sources to create SR2W -// @author B. Perry - bperrybap@opensource.billsworld.billandterrie.com -// --------------------------------------------------------------------------- - -#include "LiquidCrystal_SR2W.h" - -// CONSTRUCTORS -// --------------------------------------------------------------------------- -// Assuming 1 line 8 pixel high font -LiquidCrystal_SR2W::LiquidCrystal_SR2W (uint8_t srdata, uint8_t srclock, t_backlighPol blpol) -{ - init ( srdata, srclock, blpol, 1, 0 ); -} - - -// PRIVATE METHODS -// --------------------------------------------------------------------------- - -// -// init -void LiquidCrystal_SR2W::init(uint8_t srdata, uint8_t srclock, t_backlighPol blpol, uint8_t lines, uint8_t font) -{ - (void)lines; - (void)font; - _srDataRegister = fio_pinToOutputRegister(srdata); - _srDataMask = fio_pinToBit(srdata); - _srClockRegister = fio_pinToOutputRegister(srclock); - _srClockMask = fio_pinToBit(srclock); - - _blPolarity = blpol; - - _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS; - - backlight(); // set default backlight state to on -} - -// -// loadSR -void LiquidCrystal_SR2W::loadSR(uint8_t val) -{ - // Clear to keep Enable LOW while clocking in new bits - fio_shiftOut(_srDataRegister, _srDataMask, _srClockRegister, _srClockMask); - - - // clock out SR data byte - fio_shiftOut(_srDataRegister, _srDataMask, _srClockRegister, _srClockMask, val, MSBFIRST); - - - // strobe LCD enable which can now be toggled by the data line - ATOMIC_BLOCK(ATOMIC_RESTORESTATE) - { - fio_digitalWrite_HIGH(_srDataRegister, _srDataMask); - waitUsec (1); // enable pulse must be >450ns - fio_digitalWrite_SWITCHTO(_srDataRegister, _srDataMask, LOW); - } // end critical section -} - -// PUBLIC METHODS -// --------------------------------------------------------------------------- - - -/************ low level data pushing commands **********/ -// -// send -void LiquidCrystal_SR2W::send(uint8_t value, uint8_t mode) -{ - uint8_t myMode = ( mode == DATA ) ? SR2W_RS_MASK : 0; - - myMode = myMode | SR2W_EN_MASK | _blMask; - - if ( mode != FOUR_BITS ) - { - loadSR(myMode | ((value >> 1) & SR2W_DATA_MASK)); // upper nibble - } - - loadSR(myMode | ((value << 3) & SR2W_DATA_MASK)); // lower nibble - - /* - * Don't call waitUsec() - * do our own delay optmization since this code is so fast it needs some added delay - * even on slower AVRs. - */ -#if (F_CPU <= 16000000) - delayMicroseconds ( 10 ); // commands & data writes need > 37us to complete -#else - delayMicroseconds ( 37 ); // commands & data writes need > 37us to complete -#endif -} - -// -// setBacklight -void LiquidCrystal_SR2W::setBacklight ( uint8_t value ) -{ - // Check for polarity to configure mask accordingly - // ---------------------------------------------------------- - if ( ((_blPolarity == POSITIVE) && (value > 0)) || - ((_blPolarity == NEGATIVE ) && ( value == 0 )) ) - { - _blMask = SR2W_BL_MASK; - } - else - { - _blMask = 0; - } - - // send dummy data of blMask to set BL pin - // Note: loadSR() will strobe the data line trying to pulse EN - // but E will not strobe because the EN output bit is not set. - loadSR(_blMask); -} diff --git a/libraries/LiquidCrystal/LiquidCrystal_SR2W.h b/libraries/LiquidCrystal/LiquidCrystal_SR2W.h deleted file mode 100644 index 2bccb87..0000000 --- a/libraries/LiquidCrystal/LiquidCrystal_SR2W.h +++ /dev/null @@ -1,202 +0,0 @@ -// --------------------------------------------------------------------------- -// Created/Adapted by Bill Perry 2012-03-16 -// Copyright 2012 - Under creative commons license 3.0: -// Attribution-ShareAlike CC BY-SA -// -// This software is furnished "as is", without technical support, and with no -// warranty, express or implied, as to its usefulness for any purpose. -// -// @file LiquidCrystal_SR2W.h -// Connects a hd44780 LCD using 2 pins from the Arduino, via an 8-bit -// ShiftRegister (SR2W from now on). -// -// @brief -// This is the 2 wire shift register interface class for the LCD library -// -// The functionality provided by this class and its base class is a superset of -// the original functionality of the Arduino LiquidCrystal library and can -// be used as such. -// See the LCD class for a full description of the API functions available. -// -// It works with a 8-bit unlatched, no-tristate, unidirectional SIPO (Serial-In-Parallel-Out) -// shift register (IE a very simple SR), and an hd44780 LCD in 4-bit mode. -// Any such shift register should do (pref. 74LS family IC's for 2-wire). -// 74LS164 and 74HC595 have been exstensively tested. -// -// -// 2 Pins required from the Arduino: -// - Data/Enable -// - Clock -// The Data pin is also used to control the enable signal -// LCD RW-pin hardwired to LOW (only writing to LCD). -// Busy Flag (BF, data bit D7) is not read. -// -// Original project homepage: http://code.google.com/p/arduinoshiftreglcd/ -// -// Shift register bits -// Bit #0 - (cannot be used on 74HC595) -// Bit #1 - optional backlight control -// Bit #2 - connects to RS (Register Select) on the LCD -// Bit #3 - connects to LCD data inputs D4 -// Bit #4 - connects to LCD data inputs D5 -// Bit #5 - connects to LCD data inputs D6 -// Bit #6 - connects to LCD data inputs D7 -// Bit #7 - enables the LCD enable-puls (via the diode-resistor AND "gate") -// -// Wiring for a 74LS164 -// --------------------- -// 1k/4.7k -// +--------[ Resistor ]--------+---(LCD Enable) -// | | -// | 74LS164 (VCC) | -// | +----u----+ | _V_ diode -// (data pin)---+---+--1-|A VCC|-14-+ | -// | | | | -// +--2-|B Q7|-13------+ -// 3-|Q0 Q6|-12--(LCD D7) -// (BL Circuit)--------4-|Q1 Q5|-11--(LCD D6) -// (LCD RS)------------5-|Q2 Q4|-10--(LCD D5) -// (LCD D4)------------6-|Q3 /MR|--9--(VCC) -// +-7-|GND CP|--8--(clock pin) -// | +---------+ -// | 0.1uf -// (gnd)-----||----(vcc) -// -// Wiring for a 74HC595 -// -------------------- -// NOTE: the 74HC595 is a latching shift register. In order to get it to operate -// in a "non latching" mode, RCLK and SCLK are tied together. The side effect of this -// is that the latched output is one clock behind behind the internal shift register bits. -// To compensate for this the wiring is offset by one bit position lower. -// For example, while the backlight is hooked to Q0 it is still using bit 1 of -// of the shift register because the outputs are 1 clock behind the real internal shift -// register. -// -// 74HC595 (VCC) -// +----u----+ | +-----------------------(BL circuit) -// (LCD RS)------------1-|Q1 VCC|-16-+ | +--------------------(data pin) -// (LCD D4)------------2-|Q2 Q0|-15----+ | 1k/4.7k -// (LCD D5)------------3-|Q3 SER|-14-------+---[ Resistor ]--+--(LCD Enable) -// (LCD D6)------------4-|Q4 /OE|-13--(gnd) | -// (LCD D7)------------5-|Q5 RCLK|-12-------+ | -// | | | | -// +------6-|Q6 SCLK|-11-------+--(clock pin) | -// | 7-|Q7 /MR|-10--(VCC) | -// | +-8-|GND Q6'|--9 | -// | | +---------+ diode _V_ -// | | 0.1uf | -// | (gnd)-----||----(vcc) | -// +-----------------------------------------------+ -// -// -// Backlight Control circuit -// ------------------------- -// Because the shift resiter is not latching the outputs, the backlight circuitry -// will "see" the output bits as they are shifted into the shift register which -// can cause the backlight to flicker rather than remain constantly on/off. -// The circuit below slows down the transitions to the transistor to remove -// the visible flicker. When the BL input is HIGH the LCD backlight will turn on. -// -// (value depends on LCD, 100ohm is usually safe) -// (LCD BL anode)---[ resistor ]---(vcc) -// -// (LCD BL cathode)-------------------------------+ -// | -// D -// | -// (BL input)----[ 4.7k Resistor ]----+-------G-|-< (2N7000 FET) -// | | -// (0.1uf) = S -// | | -// (gnd) (gnd) -// -// -// -// -// History -// 2012.03.16 bperrybap - creation/adaption from SR header to create SR2W header. -// Fixed typo in SR2W mask define names -// @author B. Perry - bperrybap@opensource.billsworld.billandterrie.com -// -------------------------------------------------------------------------------- -#ifndef _LIQUIDCRYSTAL_SR2W_ -#define _LIQUIDCRYSTAL_SR2W_ - -#include -#include "LCD.h" -#include "FastIO.h" - - -// two-wire SR output bit constants -// --------------------------------------------------------------------------- - -#define SR2W_BL_MASK 0x02 -#define SR2W_RS_MASK 0x04 -#define SR2W_DATA_MASK 0x78 // data bits are hard coded to be SR bits 6,5,4,3 -#define SR2W_EN_MASK 0x80 // cannot ever be changed - -class LiquidCrystal_SR2W : public LCD -{ -public: - /*! - @method - @abstract LCD 2 wire SHIFT REGISTER constructor. - @discussion Defines the pin assignments that connect to the shift register. - The constructor does not initialize the LCD. Assuming 1 line 8 pixel high - font. - - @param srdata[in] Arduino pin for shift register data line. - @param srclock[in] Arduino pin for shift register clock line. - @param blpol[in] optional backlight polarity (default = POSITIVE) - */ - LiquidCrystal_SR2W (uint8_t srdata, uint8_t srclock, t_backlighPol blpol = POSITIVE); - - /*! - @function - @abstract Send a particular value to the LCD. - @discussion Sends a particular value to the LCD for writing to the LCD or - as an LCD command using the shift register. - - Users should never call this method. - - @param value[in] Value to send to the LCD. - @param mode[in] DATA=8bit data, COMMAND=8bit cmd, FOUR_BITS=4bit cmd - the LCD. - */ - virtual void send(uint8_t value, uint8_t mode); - - - /*! - @function - @abstract Switch-on/off the LCD backlight. - @discussion Switch-on/off the LCD backlight. - The setBacklightPin has to be called before setting the backlight for - this method to work. @see setBacklightPin. - - @param mode[in] backlight mode (0 off, non-zero on) - */ - void setBacklight ( uint8_t mode ); - -private: - - /*! - @method - @abstract Initializes the LCD pin allocation - @discussion Initializes the LCD pin allocation and configuration. - */ - void init ( uint8_t srdata, uint8_t srclock, t_backlighPol blpol, uint8_t lines, uint8_t font ); - - /*! - * @method - * @abstract takes care of shifting and the enable pulse - */ - void loadSR (uint8_t val); - - fio_register _srDataRegister; // Serial Data pin - fio_bit _srDataMask; - fio_register _srClockRegister; // Clock Pin - fio_bit _srClockMask; - - uint8_t _blPolarity; - uint8_t _blMask; -}; -#endif diff --git a/libraries/LiquidCrystal/LiquidCrystal_SR3W.cpp b/libraries/LiquidCrystal/LiquidCrystal_SR3W.cpp deleted file mode 100644 index 6144c06..0000000 --- a/libraries/LiquidCrystal/LiquidCrystal_SR3W.cpp +++ /dev/null @@ -1,283 +0,0 @@ -// --------------------------------------------------------------------------- -// Created by Francisco Malpartida on 7.3.2012. -// Copyright 2011 - Under creative commons license 3.0: -// Attribution-ShareAlike CC BY-SA -// -// This software is furnished "as is", without technical support, and with no -// warranty, express or implied, as to its usefulness for any purpose. -// -// Thread Safe: No -// Extendable: Yes -// -// @file LiquidCrystal_SRG.h -// This file implements a basic liquid crystal library that comes as standard -// in the Arduino SDK but using a generic SHIFT REGISTER extension board. -// -// @brief -// This is a basic implementation of the LiquidCrystal library of the -// Arduino SDK. The original library has been reworked in such a way that -// this class implements the all methods to command an LCD based -// on the Hitachi HD44780 and compatible chipsets using a 3 wire latching -// shift register. While it has been tested with a 74HC595N shift register -// it should also work with other latching shift registers such as the MC14094 -// and the HEF4094 -// -// This particular driver has been created as generic as possible to enable -// users to configure and connect their LCDs using just 3 digital IOs from the -// AVR or Arduino, and connect the LCD to the outputs of the shiftregister -// in any configuration. The library is configured by passing the IO pins -// that control the strobe, data and clock of the shift register and a map -// of how the shiftregister is connected to the LCD. -// -// -// +--------------------------------------------+ -// | MCU | -// | IO1 IO2 IO3 | -// +----+-------------+-------------+-----------+ -// | | | -// | | | -// +----+-------------+-------------+-----------+ -// | Strobe Data Clock | -// | 8-bit shift/latch register | 74HC595N -// | Qa0 Qb1 Qc2 Qd3 Qe4 Qf5 Qg6 Qh7 | -// +----+----+----+----+----+----+----+----+----+ -// | | | | | | | -// |11 |12 |13 |14 |6 |5 |4 (LCD pins) -// +----+----+----+----+----+----+----+----+----+ -// | DB4 DB5 DB6 DB7 E Rw RS | -// | LCD Module | -// -// NOTE: Rw is not used by the driver so it can be connected to GND. -// -// The functionality provided by this class and its base class is identical -// to the original functionality of the Arduino LiquidCrystal library. -// -// -// History -// 2012.03.29 bperrybap - fixed constructors not properly using Rs -// Fixed incorrect use of 5x10 for default font -// - now matches original LQ library. -// moved delay to send() so it is per cmd/write vs shiftout() -// NOTE: delay is on hairy edge of working when FAST_MODE is on. -// because of waitUsec(). -// There is margin at 16Mhz AVR but might fail on 20Mhz AVRs. -// -// @author F. Malpartida - fmalpartida@gmail.com -// --------------------------------------------------------------------------- -// flags for backlight control -#include -#include -#include - -#if (ARDUINO < 100) -#include -#else -#include -#endif -#include "LiquidCrystal_SR3W.h" - -#include "FastIO.h" - -/*! - @defined - @abstract LCD_NOBACKLIGHT - @discussion No BACKLIGHT MASK - */ -#define LCD_NOBACKLIGHT 0x00 - -/*! - @defined - @abstract LCD_BACKLIGHT - @discussion BACKLIGHT MASK used when backlight is on - */ -#define LCD_BACKLIGHT 0xFF - - -// Default library configuration parameters used by class constructor with -// only the I2C address field. -// --------------------------------------------------------------------------- -/*! - @defined - @abstract Enable bit of the LCD - @discussion Defines the IO of the expander connected to the LCD's Enable - */ -#define EN 4 // Enable bit - -/*! - @defined - @abstract Read/Write bit of the LCD - @discussion Defines the IO of the expander connected to the LCD's Rw pin - */ -#define RW 5 // Read/Write bit - -/*! - @defined - @abstract Register bit of the LCD - @discussion Defines the IO of the expander connected to the LCD's Register select pin - */ -#define RS 6 // Register select bit - -/*! - @defined - @abstract LCD dataline allocation this library only supports 4 bit LCD control - mode. - @discussion D4, D5, D6, D7 LCD data lines pin mapping of the extender module - */ -#define D4 0 -#define D5 1 -#define D6 2 -#define D7 3 - - - -LiquidCrystal_SR3W::LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe) -{ - init( data, clk, strobe, RS, RW, EN, D4, D5, D6, D7 ); -} - -LiquidCrystal_SR3W::LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe, - uint8_t backlighPin, t_backlighPol pol) -{ - init( data, clk, strobe, RS, RW, EN, D4, D5, D6, D7 ); - setBacklightPin(backlighPin, pol); -} - -LiquidCrystal_SR3W::LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe, - uint8_t En, uint8_t Rw, uint8_t Rs, - uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7 ) -{ - init( data, clk, strobe, Rs, Rw, En, d4, d5, d6, d7 ); -} - -LiquidCrystal_SR3W::LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe, - uint8_t En, uint8_t Rw, uint8_t Rs, - uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, - uint8_t backlighPin, t_backlighPol pol) -{ - init( data, clk, strobe, Rs, Rw, En, d4, d5, d6, d7 ); - setBacklightPin(backlighPin, pol); -} - - -void LiquidCrystal_SR3W::send(uint8_t value, uint8_t mode) -{ - - if ( mode != FOUR_BITS ) - { - write4bits( (value >> 4), mode ); // upper nibble - } - write4bits( (value & 0x0F), mode); // lower nibble - - -#if (F_CPU <= 16000000) - // No need to use the delay routines on AVR since the time taken to write - // on AVR with SR pin mapping even with fio is longer than LCD command execution. - waitUsec(37); //goes away on AVRs -#else - delayMicroseconds ( 37 ); // commands & data writes need > 37us to complete -#endif - -} - - -void LiquidCrystal_SR3W::setBacklightPin ( uint8_t value, t_backlighPol pol = POSITIVE ) -{ - _backlightPinMask = ( 1 << value ); - _backlightStsMask = LCD_NOBACKLIGHT; - _polarity = pol; - setBacklight (BACKLIGHT_OFF); // Set backlight to off as initial setup -} - -void LiquidCrystal_SR3W::setBacklight ( uint8_t value ) -{ - // Check if backlight is available - // ---------------------------------------------------- - if ( _backlightPinMask != 0x0 ) - { - // Check for polarity to configure mask accordingly - // ---------------------------------------------------------- - if (((_polarity == POSITIVE) && (value > 0)) || - ((_polarity == NEGATIVE ) && ( value == 0 ))) - { - _backlightStsMask = _backlightPinMask & LCD_BACKLIGHT; - } - else - { - _backlightStsMask = _backlightPinMask & LCD_NOBACKLIGHT; - } - loadSR( _backlightStsMask ); - } -} - - -// PRIVATE METHODS -// ----------------------------------------------------------------------------- - -int LiquidCrystal_SR3W::init(uint8_t data, uint8_t clk, uint8_t strobe, - uint8_t Rs, uint8_t Rw, uint8_t En, - uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7) -{ - _data = fio_pinToBit(data); - _clk = fio_pinToBit(clk); - _strobe = fio_pinToBit(strobe); - _data_reg = fio_pinToOutputRegister(data); - _clk_reg = fio_pinToOutputRegister(clk); - _strobe_reg = fio_pinToOutputRegister(strobe); - - // LCD pin mapping - _backlightPinMask = 0; - _backlightStsMask = LCD_NOBACKLIGHT; - _polarity = POSITIVE; - - _En = ( 1 << En ); - _Rw = ( 1 << Rw ); - _Rs = ( 1 << Rs ); - - // Initialise pin mapping - _data_pins[0] = ( 1 << d4 ); - _data_pins[1] = ( 1 << d5 ); - _data_pins[2] = ( 1 << d6 ); - _data_pins[3] = ( 1 << d7 ); - - _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS; - - return (1); -} - -void LiquidCrystal_SR3W::write4bits(uint8_t value, uint8_t mode) -{ - uint8_t pinMapValue = 0; - - // Map the value to LCD pin mapping - // -------------------------------- - for ( uint8_t i = 0; i < 4; i++ ) - { - if ( ( value & 0x1 ) == 1 ) - { - pinMapValue |= _data_pins[i]; - } - value = ( value >> 1 ); - } - - // Is it a command or data - // ----------------------- - mode = ( mode == DATA ) ? _Rs : 0; - - pinMapValue |= mode | _backlightStsMask; - loadSR ( pinMapValue | _En ); // Send with enable high - loadSR ( pinMapValue); // Send with enable low -} - - -void LiquidCrystal_SR3W::loadSR(uint8_t value) -{ - // Load the shift register with information - fio_shiftOut(_data_reg, _data, _clk_reg, _clk, value, MSBFIRST); - - // Strobe the data into the latch - ATOMIC_BLOCK(ATOMIC_RESTORESTATE) - { - fio_digitalWrite_HIGH(_strobe_reg, _strobe); - fio_digitalWrite_SWITCHTO(_strobe_reg, _strobe, LOW); - } -} diff --git a/libraries/LiquidCrystal/LiquidCrystal_SR3W.h b/libraries/LiquidCrystal/LiquidCrystal_SR3W.h deleted file mode 100644 index 0f0b32f..0000000 --- a/libraries/LiquidCrystal/LiquidCrystal_SR3W.h +++ /dev/null @@ -1,202 +0,0 @@ -// --------------------------------------------------------------------------- -// Created by Francisco Malpartida on 7.3.2012. -// Copyright 2011 - Under creative commons license 3.0: -// Attribution-ShareAlike CC BY-SA -// -// This software is furnished "as is", without technical support, and with no -// warranty, express or implied, as to its usefulness for any purpose. -// -// Thread Safe: No -// Extendable: Yes -// -// @file LiquidCrystal_SR3W.h -// This file implements a basic liquid crystal library that comes as standard -// in the Arduino SDK but using a generic SHIFT REGISTER extension board. -// -// @brief -// This is a basic implementation of the LiquidCrystal library of the -// Arduino SDK. The original library has been reworked in such a way that -// this class implements the all methods to command an LCD based -// on the Hitachi HD44780 and compatible chipsets using a 3 wire latching -// shift register. While it has been tested with a 74HC595N shift register -// it should also work with other latching shift registers such as the MC14094 -// and the HEF4094 -// -// This particular driver has been created as generic as possible to enable -// users to configure and connect their LCDs using just 3 digital IOs from the -// AVR or Arduino, and connect the LCD to the outputs of the shiftregister -// in any configuration. The library is configured by passing the IO pins -// that control the strobe, data and clock of the shift register and a map -// of how the shiftregister is connected to the LCD. -// -// -// +--------------------------------------------+ -// | MCU | -// | IO1 IO2 IO3 | -// +----+-------------+-------------+-----------+ -// | | | -// | | | -// +----+-------------+-------------+-----------+ -// | Strobe Data Clock | -// | 8-bit shift/latch register | 74HC595N -// | Qa0 Qb1 Qc2 Qd3 Qe4 Qf5 Qg6 Qh7 | -// +----+----+----+----+----+----+----+----+----+ -// | | | | | | | -// |11 |12 |13 |14 |6 |5 |4 (LCD pins) -// +----+----+----+----+----+----+----+----+----+ -// | DB4 DB5 DB6 DB7 E Rw RS | -// | LCD Module | -// -// NOTE: Rw is not used by the driver so it can be connected to GND. -// -// The functionality provided by this class and its base class is identical -// to the original functionality of the Arduino LiquidCrystal library. -// -// -// @author F. Malpartida - fmalpartida@gmail.com -// --------------------------------------------------------------------------- -#ifndef _LIQUIDCRYSTAL_SR3W_H_ -#define _LIQUIDCRYSTAL_SR3W_H_ - -#include -#include "LCD.h" -#include "FastIO.h" - - -class LiquidCrystal_SR3W : public LCD -{ -public: - - /*! - @method - @abstract Class constructor. - @discussion Initializes class variables and defines the IO driving the - shift register. The constructor does not initialize the LCD. - Default configuration: - Shift register LCD - QA - 0 DB4 - QB - 1 DB5 - QC - 2 DB6 - QD - 3 DB7 - QE - 4 E - QF - 5 - QG - 6 Rs - GND Rw - - @param strobe[in] digital IO connected to shiftregister strobe pin. - @param data[in] digital IO connected to the shiftregister data pin. - @param clk[in] digital IO connected to the shiftregister clock pin. - */ - LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe); - // Constructor with backlight control - LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe, - uint8_t backlighPin, t_backlighPol pol); - - /*! - @method - @abstract Class constructor. - @discussion Initializes class variables and defines the control lines of - the LCD and the shiftregister. The constructor does not initialize the LCD. - - @param strobe[in] digital IO connected to shiftregister strobe pin. - @param data[in] digital IO connected to shiftregister data pin. - @param clk[in] digital IO connected to shiftregister clock pin. - @param En[in] LCD En (Enable) pin connected to SR output pin. - @param Rw[in] LCD Rw (Read/write) pin connected to SR output pin. - @param Rs[in] LCD Rs (Reg Select) pin connected to SR output pin. - @param d4[in] LCD data 4 pin map to the SR output pin. - @param d5[in] LCD data 5 pin map to the SR output pin. - @param d6[in] LCD data 6 pin map to the SR output pin. - @param d7[in] LCD data 7 pin map to the SR output pin. - */ - LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe, - uint8_t En, uint8_t Rw, uint8_t Rs, - uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7 ); - // Constructor with backlight control - LiquidCrystal_SR3W( uint8_t data, uint8_t clk, uint8_t strobe, - uint8_t En, uint8_t Rw, uint8_t Rs, - uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, - uint8_t backlighPin, t_backlighPol pol); - - /*! - @function - @abstract Send a particular value to the LCD. - @discussion Sends a particular value to the LCD for writing to the LCD or - as an LCD command. - - Users should never call this method. - - @param value[in] Value to send to the LCD. - @param mode[in] DATA - write to the LCD CGRAM, COMMAND - write a - command to the LCD. - */ - virtual void send(uint8_t value, uint8_t mode); - - /*! - @function - @abstract Sets the pin to control the backlight. - @discussion Sets the pin in the device to control the backlight. This device - doesn't support dimming backlight capability. - - @param 0: backlight off, 1..255: backlight on. - */ - void setBacklightPin ( uint8_t value, t_backlighPol pol ); - - /*! - @function - @abstract Switch-on/off the LCD backlight. - @discussion Switch-on/off the LCD backlight. - The setBacklightPin has to be called before setting the backlight for - this method to work. @see setBacklightPin. - - @param value: backlight mode (HIGH|LOW) - */ - void setBacklight ( uint8_t value ); - -private: - - /*! - @method - @abstract Initializes the LCD class - @discussion Initializes the LCD class and IO expansion module. - */ - int init(uint8_t data, uint8_t clk, uint8_t strobe, - uint8_t Rs, uint8_t Rw, uint8_t En, - uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7); - - /*! - @method - @abstract Writes an 4 bit value to the LCD. - @discussion Writes 4 bits (the least significant) to the LCD control data lines. - @param value[in] Value to write to the LCD - @param more[in] Value to distinguish between command and data. - COMMAND == command, DATA == data. - */ - void write4bits(uint8_t value, uint8_t mode); - - /*! - @function - @abstract load into the shift register a byte - @discussion loads into the shift register a byte - @param value[in]: value to be loaded into the shiftregister. - */ - void loadSR(uint8_t value); - - - fio_bit _strobe; // shift register strobe pin - fio_register _strobe_reg; // SR strobe pin MCU register - fio_bit _data; // shift register data pin - fio_register _data_reg; // SR data pin MCU register - fio_bit _clk; // shift register clock pin - fio_register _clk_reg; // SR clock pin MCU register - uint8_t _En; // LCD expander word for enable pin - uint8_t _Rw; // LCD expander word for R/W pin - uint8_t _Rs; // LCD expander word for Register Select pin - uint8_t _data_pins[4]; // LCD data lines - uint8_t _backlightPinMask; // Backlight IO pin mask - uint8_t _backlightStsMask; // Backlight status mask - -}; - -#endif - diff --git a/libraries/LiquidCrystal/def/doxygen.def b/libraries/LiquidCrystal/def/doxygen.def deleted file mode 100644 index e19fb0b..0000000 --- a/libraries/LiquidCrystal/def/doxygen.def +++ /dev/null @@ -1,8422 +0,0 @@ -AutoGen Definitions dummy; -class = { - cp-id = 'class_i2_c_i_o'; - cp-name = 'I2CIO'; - cp-section = { - sec-kind = 'public-func'; - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_i2_c_i_o_1a6f814653d903dc2ff6e8420eeb7954ae'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -int -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'begin'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'i2cAddr'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; - sec-mem-desc-line = '62'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Initializes the device. - @discussion This method initializes the device allocating an I2C address. - This method is the first method that should be call prior to calling any - other method form this class. On initialization all pins are configured - as INPUT on the device. - - @param i2cAddr: I2C Address where the device is located. - @result 1 if the device was initialized correctly, 0 otherwise -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_i2_c_i_o_1ac26221011a8b49bcea9ef62712ea88a7'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'digitalRead'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'pin'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; - sec-mem-desc-line = '108'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Read a pin from the device. - @discussion Reads a particular pin from the device. To read a particular - pin it has to be configured as INPUT. During initialization all pins are - configured as INPUTs by default. Please refer to pinMode or portMode. - - @param pin[in] Pin from the port to read its status. Range (0..7) - @result Returns the pin status (HIGH, LOW) if the pin is configured - as an output, reading its value will always return LOW regardless of its - real state. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_i2_c_i_o_1a473206162522b847546777d16a7c6dcd'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -int -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'digitalWrite'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'pin'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'level'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; - sec-mem-desc-line = '136'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Writes a digital level to a particular pin. - @discussion Write a level to the indicated pin of the device. For this - method to have effect, the pin has to be configured as OUTPUT using the - pinMode or portMode methods. - - @param pin[in] device pin to change level. Range (0..7). - @para level[in] logic level to set the pin at (HIGH, LOW). - @result 1 on success, 0 otherwise. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_i2_c_i_o_1a32eb7832075ad6011d67874405a0d0a6'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'I2CIO'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; - sec-mem-desc-line = '49'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Constructor method - @discussion Class constructor constructor. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_i2_c_i_o_1a53b94274eb6bb68564cf5243323db887'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'pinMode'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'pin'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'dir'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; - sec-mem-desc-line = '73'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Sets the mode of a particular pin. - @discussion Sets the mode of a particular pin to INPUT, OUTPUT. digitalWrite - has no effect on pins which are not declared as output. - - @param pin[in] Pin from the I2C IO expander to be configured. Range 0..7 - @param dir[in] Pin direction (INPUT, OUTPUT). -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_i2_c_i_o_1a0341888753bc54c4384f5593a870fb34'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'portMode'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'dir'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; - sec-mem-desc-line = '83'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Sets all the pins of the device in a particular direction. - @discussion This method sets all the pins of the device in a particular - direction. This method is useful to set all the pins of the device to be - either inputs or outputs. - @param dir[in] Direction of all the pins of the device (INPUT, OUTPUT). -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_i2_c_i_o_1a7a3db7bfc15ede0ae9e8c8bd44290ef7'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'read'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; - sec-mem-desc-line = '94'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Reads all the pins of the device that are configured as INPUT. - @discussion Reads from the device the status of the pins that are configured - as INPUT. During initialization all pins are configured as INPUTs by default. - Please refer to pinMode or portMode. - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_i2_c_i_o_1ae2063569c927d0008e2593d14504fdcd'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -int -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'write'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; - sec-mem-desc-line = '123'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Write a value to the device. - @discussion Writes to a set of pins in the device. The value is the binary - representation of all the pins in device. The value written is masked with - the configuration of the direction of the pins; to change the state of - a particular pin with this method, such pin has to be configured as OUTPUT - using the portMode or pinMode methods. If no pins have been configured as - OUTPUTs this method will have no effect. - - @param value[in] value to be written to the device. - @result 1 on success, 0 otherwise -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-section = { - sec-kind = 'private-attrib'; - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_i2_c_i_o_1a283a99ef1c6f58fa8a0489089cba9682'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_dirMask'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; - sec-mem-desc-line = '142'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_i2_c_i_o_1ade58da873af4240a53053ef5f12a2728'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_i2cAddr'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; - sec-mem-desc-line = '143'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_i2_c_i_o_1a8c566f3fd332eefe4db57cbe6b69337c'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -bool -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_initialised'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; - sec-mem-desc-line = '144'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_i2_c_i_o_1abcd6f7f5f176f965d8ae535afa9f6cec'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_shadow'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; - sec-mem-desc-line = '141'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-filename = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; - cp-fileline = '42'; - cp-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - cp-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* class */ -class = { - cp-id = 'class_l_c_d'; - cp-name = 'LCD'; - cp-ref = { - ref-type = derived; - ref-id = 'class_liquid_crystal'; - ref-prot = public; - ref-virt = non-virtual; - }; - cp-ref = { - ref-type = derived; - ref-id = 'class_liquid_crystal___i2_c'; - ref-prot = public; - ref-virt = non-virtual; - }; - cp-ref = { - ref-type = derived; - ref-id = 'class_liquid_crystal___i2_c___by_vac'; - ref-prot = public; - ref-virt = non-virtual; - }; - cp-ref = { - ref-type = derived; - ref-id = 'class_liquid_crystal___s_r'; - ref-prot = public; - ref-virt = non-virtual; - }; - cp-ref = { - ref-type = derived; - ref-id = 'class_liquid_crystal___s_r1_w'; - ref-prot = public; - ref-virt = non-virtual; - }; - cp-ref = { - ref-type = derived; - ref-id = 'class_liquid_crystal___s_r2_w'; - ref-prot = public; - ref-virt = non-virtual; - }; - cp-ref = { - ref-type = derived; - ref-id = 'class_liquid_crystal___s_r3_w'; - ref-prot = public; - ref-virt = non-virtual; - }; - cp-section = { - sec-kind = 'public-func'; - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1abb3ed88d530f6283e6159b4973e7da9e'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'autoscroll'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '358'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Turns on automatic scrolling of the LCD. - @discussion Turns on automatic scrolling of the LCD. This causes each - character output to the display to push previous characters over by one - space. If the current text direction is left-to-right (the default), - the display scrolls to the left; if the current direction is right-to-left, - the display scrolls to the right. - This has the effect of outputting each new character to the same location on - the LCD. - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1aba8867fe2210cbfa8db869208709be10'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'backlight'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '428'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Switch-on the LCD backlight. - @discussion Switch-on the LCD backlight. - The setBacklightPin has to be called before setting the backlight for - this method to work. @see setBacklightPin. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a3f587d1cbb2d59765ef60a5216b56fea'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -virtual void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'begin'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'cols'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'rows'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'charsize'; - sec-mem-param-defval = <<_EnD_oF_dEf_TeXt_ -LCD_5x8DOTS -_EnD_oF_dEf_TeXt_; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '200'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract LCD initialization. - @discussion Initializes the LCD to a given size (col, row). This methods - initializes the LCD, therefore, it MUST be called prior to using any other - method from this class. - - This method is abstract, a base implementation is available common to all LCD - drivers. Should it not be compatible with some other LCD driver, a derived - implementation should be done on the driver specif class. - - @param cols[in] the number of columns that the display has - @param rows[in] the number of rows that the display has - @param charsize[in] character size, default==LCD_5x8DOTS -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a878b36878fa8287093964eba83aace77'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'blink'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '264'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Display the cursor of the LCD. - @discussion Display the blinking LCD cursor. If used in combination with - the cursor() function, the result will depend on the particular display. - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1afa699e0beeeee03cce8cef87eba81c4a'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'clear'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '212'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Clears the LCD. - @discussion Clears the LCD screen and positions the cursor in the upper-left - corner. - - This operation is time consuming for the LCD. - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a91cba8f93c692abcddf8bc3de58d2d3a'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'createChar'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'location'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'charmap'; - sec-mem-param-array = '[]'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '386'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Creates a custom character for use on the LCD. - @discussion Create a custom character (glyph) for use on the LCD. - Most chipsets only support up to eight characters of 5x8 pixels. Therefore, - this methods has been limited to locations (numbered 0 to 7). - - The appearance of each custom character is specified by an array of eight - bytes, one for each row. The five least significant bits of each byte - determine the pixels in that row. To display a custom character on screen, - write()/print() its number, i.e. lcd.print (char(x)); // Where x is 0..7. - - @param location[in] LCD memory location of the character to create - (0 to 7) - @param charmap[in] the bitmap array representing each row of the character. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a194814f64dfa50a90e07e0fe0d361620'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'cursor'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '282'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Display the LCD cursor. - @discussion Display the LCD cursor: an underscore (line) at the location - where the next character will be written. - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a5b07cf05e8e5e7c53654f5ca0cf58b89'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'display'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '246'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Turns on the LCD display. - @discussion Turns on the LCD display, after it's been turned off with - noDisplay(). This will restore the text (and cursor location) that was on - the display prior to calling noDisplay(). - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1aee45ad37f09312f5d9982257e2d37e68'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'home'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '225'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Sets the cursor to the upper-left corner. - @discussion Positions the cursor in the upper-left of the LCD. - That is, use that location in outputting subsequent text to the display. - To also clear the display, use the clear() function instead. - - This operation is time consuming for the LCD. - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a00bb2db1390721abc7b24ac4b8c276c8'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LCD'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '183'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract LiquidCrystal abstract constructor. - @discussion LiquidCrystal class abstract constructor needed to create - the base abstract class. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a238e9f6476dc7df64af04eb6c87f6ac7'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'leftToRight'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '313'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Set the direction for text written to the LCD to left-to-right. - @discussion Set the direction for text written to the LCD to left-to-right. - All subsequent characters written to the display will go from left to right, - but does not affect previously-output text. - - This is the default configuration. - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1aad2abc99d1aca5403873579d9d72c2d4'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'moveCursorLeft'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '334'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Moves the cursor one space to the left. - @discussion - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a09eec0c712e54b066f5894635c1fe75c'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'moveCursorRight'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '343'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Moves the cursor one space to the right. - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a96035dde40efbf73390e00b5beb00231'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'noAutoscroll'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '368'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Turns off automatic scrolling of the LCD. - @discussion Turns off automatic scrolling of the LCD, this is the default - configuration of the LCD. - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a2a331b4e142734411b2f1cfaffe7a488'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'noBacklight'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '437'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Switch-off the LCD backlight. - @discussion Switch-off the LCD backlight. - The setBacklightPin has to be called before setting the backlight for - this method to work. @see setBacklightPin. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a3b755c4b397b5985752be8c30ee1a9b5'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'noBlink'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '254'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Turns off the blinking of the LCD cursor. - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1aec8ffaa1e69c7a6e13ac0cfbc29151d9'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'noCursor'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '272'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Hides the LCD cursor. - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1af3974da6d988ba2d21c25135ada12108'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'noDisplay'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '235'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Turns off the LCD display. - @discussion Turns off the LCD display, without losing the text currently - being displayed on it. - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a191639be183be1476c9bfe6d455d23b2'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'off'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '455'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Switch off the LCD module. - @discussion Switch off the LCD module, it will switch off the LCD controller - and the backlight. This method has the same effect of calling noDisplay and - noBacklight. @see display, @see backlight -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a718da3a638deb59bd1c7a5222a52d98a'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'on'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '446'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Switch on the LCD module. - @discussion Switch on the LCD module, it will switch on the LCD controller - and the backlight. This method has the same effect of calling display and - backlight. @see display, @see backlight -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1ac014830eadc26bfd86308ea8734f4428'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'rightToLeft'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '326'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Set the direction for text written to the LCD to right-to-left. - @discussion Set the direction for text written to the LCD to right-to-left. - All subsequent characters written to the display will go from right to left, - but does not affect previously-output text. - - left-to-right is the default configuration. - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a6f3a503055b3b8dcf0f61b2633c584f7'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'scrollDisplayLeft'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '291'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Scrolls the contents of the display (text and cursor) one space - to the left. - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1abfc44b294772f09020bfa32af8a79571'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'scrollDisplayRight'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '300'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Scrolls the contents of the display (text and cursor) one space - to the right. - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a3305570d7b37eb93f2cf840263c15828'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -virtual void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'setBacklight'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '489'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Sets the pin to control the backlight. - @discussion Sets the pin in the device to control the backlight. The behaviour - of this method is very dependent on the device. Some controllers support - dimming some don't. Please read the actual header file for each individual - device. The setBacklightPin method has to be called before setting the backlight - or the adequate backlight control constructor. - @see setBacklightPin. - - NOTE: The prefered methods to control the backlight are "backlight" and - "noBacklight". - - @param 0..255 - the value is very dependent on the LCD. However, - BACKLIGHT_OFF will be interpreted as off and BACKLIGHT_ON will drive the - backlight on. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a53f4ee9b39d9ab3d7ae4d9f8dedca3bc'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -virtual void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'setBacklightPin'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -t_backlighPol -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'pol'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '470'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Sets the pin to control the backlight. - @discussion Sets the pin in the device to control the backlight. - This method is device dependent and can be programmed on each subclass. An - empty function call is provided that does nothing. - - @param value: pin associated to backlight control. - @param pol: backlight polarity control (POSITIVE, NEGATIVE) -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a48220450fd152b25994eb7d0ba340e8d'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'setCursor'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'col'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'row'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '419'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Position the LCD cursor. - @discussion Sets the position of the LCD cursor. Set the location at which - subsequent text written to the LCD will be displayed. - - @param col[in] LCD column - @param row[in] LCD row - line. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a2d89cc2e62f72afb5f15a7fd812900e3'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -virtual void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'write'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '503'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Writes to the LCD. - @discussion This method writes character to the LCD in the current cursor - position. - - This is the virtual write method, implemented in the Print class, therefore - all Print class methods will end up calling this method. - - @param value[in] Value to write to the LCD. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-section = { - sec-kind = 'protected-attrib'; - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_l_c_d_1a88b16ea0e5c7d1cabc5007d48bcbd2b0'; - sec-mem-virt = normal; - sec-mem-prot = protected; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_cols'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '523'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_l_c_d_1ae47a0e2eff74431a39774b788d5761f4'; - sec-mem-virt = normal; - sec-mem-prot = protected; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_displaycontrol'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '519'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_l_c_d_1aef093ba3f8e1016267b40ac235a0fa0f'; - sec-mem-virt = normal; - sec-mem-prot = protected; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_displayfunction'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '517'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_l_c_d_1a726b9a68d091dd8683a18e83f3a8fd3c'; - sec-mem-virt = normal; - sec-mem-prot = protected; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_displaymode'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '521'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_l_c_d_1ac1374911fb145fea430c21092ada0c06'; - sec-mem-virt = normal; - sec-mem-prot = protected; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_numlines'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '522'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_l_c_d_1a990338759d2abe10b0fb1743b7789566'; - sec-mem-virt = normal; - sec-mem-prot = protected; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -t_backlighPol -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_polarity'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '524'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-section = { - sec-kind = 'private-func'; - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a31a0cb42497d83cdc9cb8000828f7190'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'command'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '539'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Send a command to the LCD. - @discussion This method sends a command to the LCD by setting the Register - select line of the LCD. - - This command shouldn't be used to drive the LCD, only to implement any other - feature that is not available on this library. - - @param value[in] Command value to send to the LCD (COMMAND, DATA or - FOUR_BITS). -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a8a5b6f6f448a6ca6eeb3466c370d47ab'; - sec-mem-virt = virtual; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -virtual void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'send'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'mode'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '555'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Send a particular value to the LCD. - @discussion Sends a particular value to the LCD. This is a pure abstract - method, therefore, it is implementation dependent of each derived class how - to physically write to the LCD. - - Users should never call this method. - - @param value[in] Value to send to the LCD. - @result mode LOW - write to the LCD CGRAM, HIGH - write a command to - the LCD. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-filename = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - cp-fileline = '174'; - cp-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - cp-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - cp-inheritancegraph = <<_EnD_oF_dEf_TeXt_ - node = { - node-id = 5; - node-label = 'LiquidCrystal_I2C_ByVac'; - node-link = { - node-link-id = 'class_liquid_crystal___i2_c___by_vac'; - }; - node-child = { - child-id = '2'; - relation = public-inheritance; - }; /* node-child */ - }; /* node */ - node = { - node-id = 6; - node-label = 'LiquidCrystal_SR'; - node-link = { - node-link-id = 'class_liquid_crystal___s_r'; - }; - node-child = { - child-id = '2'; - relation = public-inheritance; - }; /* node-child */ - }; /* node */ - node = { - node-id = 2; - node-label = 'LCD'; - node-link = { - node-link-id = 'class_l_c_d'; - }; - }; /* node */ - node = { - node-id = 3; - node-label = 'LiquidCrystal'; - node-link = { - node-link-id = 'class_liquid_crystal'; - }; - node-child = { - child-id = '2'; - relation = public-inheritance; - }; /* node-child */ - }; /* node */ - node = { - node-id = 4; - node-label = 'LiquidCrystal_I2C'; - node-link = { - node-link-id = 'class_liquid_crystal___i2_c'; - }; - node-child = { - child-id = '2'; - relation = public-inheritance; - }; /* node-child */ - }; /* node */ - node = { - node-id = 8; - node-label = 'LiquidCrystal_SR2W'; - node-link = { - node-link-id = 'class_liquid_crystal___s_r2_w'; - }; - node-child = { - child-id = '2'; - relation = public-inheritance; - }; /* node-child */ - }; /* node */ - node = { - node-id = 7; - node-label = 'LiquidCrystal_SR1W'; - node-link = { - node-link-id = 'class_liquid_crystal___s_r1_w'; - }; - node-child = { - child-id = '2'; - relation = public-inheritance; - }; /* node-child */ - }; /* node */ - node = { - node-id = 9; - node-label = 'LiquidCrystal_SR3W'; - node-link = { - node-link-id = 'class_liquid_crystal___s_r3_w'; - }; - node-child = { - child-id = '2'; - relation = public-inheritance; - }; /* node-child */ - }; /* node */ - -_EnD_oF_dEf_TeXt_; -}; /* class */ -class = { - cp-id = 'class_liquid_crystal'; - cp-name = 'LiquidCrystal'; - cp-ref = { - ref-type = base; - ref-id = 'class_l_c_d'; - ref-prot = public; - ref-virt = non-virtual; - }; - cp-section = { - sec-kind = 'public-func'; - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal_1a49d2bd8d26031a1c83bcbd73978a1686'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'rs'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'enable'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd0'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd1'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd2'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd3'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd4'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd5'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd6'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd7'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '55'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract 8 bit LCD constructors. - @discussion Defines the pin assignment that the LCD will have. - The constructor does not initialize the LCD. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal_1a30e3d865c4b4a003a36cb45903f93644'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'rs'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'rw'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'enable'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd0'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd1'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd2'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd3'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd4'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd5'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd6'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd7'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '58'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal_1ae0c3c8f7661634b1400f00a1c9c02c26'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'rs'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'rw'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'enable'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd0'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd1'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd2'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd3'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd4'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd5'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd6'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd7'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'backlightPin'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -t_backlighPol -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'pol'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '68'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal_1a52a4de3d866e347208a32dfc9d797729'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'rs'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'enable'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd0'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd1'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd2'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd3'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'backlightPin'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -t_backlighPol -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'pol'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '86'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal_1a0a0a8dfa7a2e775a031fd65f5c6366ec'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'rs'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'rw'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'enable'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd0'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd1'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd2'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd3'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '76'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract 4 bit LCD constructors. - @discussion Defines the pin assignment that the LCD will have. - The constructor does not initialize the LCD. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal_1a8b90122c67a6d14b967c8a11ba490670'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'rs'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'rw'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'enable'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd0'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd1'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd2'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd3'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'backlightPin'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -t_backlighPol -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'pol'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '83'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal_1a23124e6dd5ac4a9b6147629b96e91953'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'rs'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'enable'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd0'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd1'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd2'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd3'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '78'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal_1aff2330186495fde93370d46c0ca2cbf0'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'rs'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'enable'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd0'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd1'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd2'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd3'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd4'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd5'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd6'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd7'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'backlightPin'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -t_backlighPol -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'pol'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '64'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal_1a56142f8b3753bedd133e4139e5eb5089'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -virtual void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'send'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'mode'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '99'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Send a particular value to the LCD. - @discussion Sends a particular value to the LCD for writing to the LCD or - as an LCD command. - - Users should never call this method. - - @param value Value to send to the LCD. - @result mode LOW - write to the LCD CGRAM, HIGH - write a command to - the LCD. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal_1aa2b898366e1c656ac313b9007c98cebd'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'setBacklight'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '125'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Switch-on/off the LCD backlight. - @discussion Switch-on/off the LCD backlight. - The setBacklightPin has to be called before setting the backlight for - this method to work. @see setBacklightPin. For dimming control of the - backlight, the configuration pin must be a PWM output pin. Dim control - is achieved by passing a value from 1 to 255 as a parameter. If the - pin configured when calling the setBacklightPin does not support PWM, - then: (0) backlight off, (1..255) backlight on. - - @param value: backlight value. 0: off, 1..255: dim control of the - backlight. For negative logic 255: off, 254..0: dim control. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal_1a63740dc1198d8169a39d9c6daff0efc9'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'setBacklightPin'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'pin'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -t_backlighPol -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'pol'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '109'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Sets the pin to control the backlight. - @discussion Sets the pin in the device to control the backlight. - - @param pin: pin assigned to the backlight - @param pol: backlight pin control polarity (POSITIVE, NEGATIVE). -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-section = { - sec-kind = 'private-func'; - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal_1ae45eec827b26174f73e9cf3ddda635af'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'init'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'fourbitmode'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'rs'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'rw'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'enable'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd0'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd1'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd2'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd3'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd4'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd5'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd6'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd7'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '136'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Initializes the LCD pin allocation and associated HW - @discussion Initializes the LCD pin allocation and configuration. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal_1a44d84c010396c993f124d2feb9dc794d'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'pulseEnable'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '152'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Pulse the LCD enable line (En). - @discussion Sends a pulse of 1 uS to the Enable pin to execute an command - or write operation. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal_1a641301bc315a4e167c5aee7ea99993fd'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'writeNbits'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'numBits'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '144'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Writes numBits bits from value value to the LCD. - @discussion Writes numBists bits (the least significant) to the LCD control - data lines. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-section = { - sec-kind = 'private-attrib'; - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal_1a23a1807a1fe4210ac7cfca9b779513ea'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_backlightPin'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '158'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal_1a0b2da39d056aed9940b0525e554668d7'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_data_pins'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '157'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal_1aef7d920abae32b5faa2625ffa3879c4b'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_enable_pin'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '156'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal_1affd20665bda00d8b0e37d5ee87543e81'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_rs_pin'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '154'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal_1a29061eaa64c2e9f3b985ff52249b62a9'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_rw_pin'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '155'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-filename = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - cp-fileline = '45'; - cp-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - cp-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - cp-inheritancegraph = <<_EnD_oF_dEf_TeXt_ - node = { - node-id = 12; - node-label = 'LCD'; - node-link = { - node-link-id = 'class_l_c_d'; - }; - }; /* node */ - node = { - node-id = 11; - node-label = 'LiquidCrystal'; - node-link = { - node-link-id = 'class_liquid_crystal'; - }; - node-child = { - child-id = '12'; - relation = public-inheritance; - }; /* node-child */ - }; /* node */ - -_EnD_oF_dEf_TeXt_; - cp-collaborationgraph = <<_EnD_oF_dEf_TeXt_ - node = { - node-id = 14; - node-label = 'LCD'; - node-link = { - node-link-id = 'class_l_c_d'; - }; - }; /* node */ - node = { - node-id = 13; - node-label = 'LiquidCrystal'; - node-link = { - node-link-id = 'class_liquid_crystal'; - }; - node-child = { - child-id = '14'; - relation = public-inheritance; - }; /* node-child */ - }; /* node */ - -_EnD_oF_dEf_TeXt_; -}; /* class */ -class = { - cp-id = 'class_liquid_crystal___i2_c'; - cp-name = 'LiquidCrystal_I2C'; - cp-ref = { - ref-type = base; - ref-id = 'class_l_c_d'; - ref-prot = public; - ref-virt = non-virtual; - }; - cp-section = { - sec-kind = 'public-func'; - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___i2_c_1aeee2ada537f0cfbfda8613324b57c4a6'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -virtual void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'begin'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'cols'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'rows'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'charsize'; - sec-mem-param-defval = <<_EnD_oF_dEf_TeXt_ -LCD_5x8DOTS -_EnD_oF_dEf_TeXt_; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '110'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract LCD initialization and associated HW. - @discussion Initializes the LCD to a given size (col, row). This methods - initializes the LCD, therefore, it MUST be called prior to using any other - method from this class or parent class. - - The begin method can be overloaded if necessary to initialize any HW that - is implemented by a library and can't be done during construction, here - we use the Wire class. - - @param cols[in] the number of columns that the display has - @param rows[in] the number of rows that the display has - @param charsize[in] size of the characters of the LCD: LCD_5x8DOTS or - LCD_5x10DOTS. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___i2_c_1a9fc9bc519ebbf7503dadc11622e02ed6'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal_I2C'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'lcd_Addr'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'backlighPin'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -t_backlighPol -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'pol'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '53'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___i2_c_1add1f2da7de4ec9b9cd5c9b5fab712464'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal_I2C'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'lcd_Addr'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'En'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'Rw'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'Rs'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'backlighPin'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -t_backlighPol -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'pol'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '70'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___i2_c_1a7d9b54d3a91fa0e0e50db27cda6b4654'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal_I2C'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'lcd_Addr'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'En'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'Rw'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'Rs'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd4'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd5'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd6'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd7'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '89'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Class constructor. - @discussion Initializes class variables and defines the I2C address of the - LCD. The constructor does not initialize the LCD. - - @param lcd_Addr[in] I2C address of the IO expansion module. For I2CLCDextraIO, - the address can be configured using the on board jumpers. - @param En[in] LCD En (Enable) pin connected to the IO extender module - @param Rw[in] LCD Rw (Read/write) pin connected to the IO extender module - @param Rs[in] LCD Rs (Reset) pin connected to the IO extender module - @param d4[in] LCD data 0 pin map on IO extender module - @param d5[in] LCD data 1 pin map on IO extender module - @param d6[in] LCD data 2 pin map on IO extender module - @param d7[in] LCD data 3 pin map on IO extender module -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___i2_c_1a517f8847ebf09f0eacfb9c7232975fce'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal_I2C'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'lcd_Addr'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'En'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'Rw'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'Rs'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '67'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Class constructor. - @discussion Initializes class variables and defines the I2C address of the - LCD. The constructor does not initialize the LCD. - - @param lcd_Addr[in] I2C address of the IO expansion module. For I2CLCDextraIO, - the address can be configured using the on board jumpers. - @param En[in] LCD En (Enable) pin connected to the IO extender module - @param Rw[in] LCD Rw (Read/write) pin connected to the IO extender module - @param Rs[in] LCD Rs (Reset) pin connected to the IO extender module -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___i2_c_1ab15622287533de7a47f3e2012ebf18be'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal_I2C'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'lcd_Addr'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'En'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'Rw'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'Rs'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd4'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd5'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd6'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd7'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'backlighPin'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -t_backlighPol -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'pol'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '93'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___i2_c_1aac537d195557e0b8afac1a71441a484c'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal_I2C'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'lcd_Addr'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '51'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Class constructor. - @discussion Initializes class variables and defines the I2C address of the - LCD. The constructor does not initialize the LCD. - - @param lcd_Addr[in] I2C address of the IO expansion module. For I2CLCDextraIO, - the address can be configured using the on board jumpers. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___i2_c_1a8bf1fab7efe13e8b17b96c42d1f810b4'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -virtual void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'send'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'mode'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '124'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Send a particular value to the LCD. - @discussion Sends a particular value to the LCD for writing to the LCD or - as an LCD command. - - Users should never call this method. - - @param value[in] Value to send to the LCD. - @param mode[in] DATA - write to the LCD CGRAM, COMMAND - write a - command to the LCD. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___i2_c_1af11b8fa0082616e2b6e6e4238589d8a8'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'setBacklight'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '145'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Switch-on/off the LCD backlight. - @discussion Switch-on/off the LCD backlight. - The setBacklightPin has to be called before setting the backlight for - this method to work. @see setBacklightPin. - - @param value: backlight mode (HIGH|LOW) -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___i2_c_1a2eaf86f62d1f169b3763b03fbf88f70b'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'setBacklightPin'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -t_backlighPol -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'pol'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '134'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Sets the pin to control the backlight. - @discussion Sets the pin in the device to control the backlight. This device - doesn't support dimming backlight capability. - - @param 0: backlight off, 1..255: backlight on. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-section = { - sec-kind = 'private-func'; - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___i2_c_1adb997350478bdc0ab8eb5cc5623a2ad9'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'config'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'lcd_Addr'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'En'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'Rw'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'Rs'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd4'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd5'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd6'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd7'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '172'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Initialises class private variables - @discussion This is the class single point for initialising private variables. - - @param lcd_Addr[in] I2C address of the IO expansion module. For I2CLCDextraIO, - the address can be configured using the on board jumpers. - @param En[in] LCD En (Enable) pin connected to the IO extender module - @param Rw[in] LCD Rw (Read/write) pin connected to the IO extender module - @param Rs[in] LCD Rs (Reset) pin connected to the IO extender module - @param d4[in] LCD data 0 pin map on IO extender module - @param d5[in] LCD data 1 pin map on IO extender module - @param d6[in] LCD data 2 pin map on IO extender module - @param d7[in] LCD data 3 pin map on IO extender module -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___i2_c_1a459c4fa106fb7bac5940e3c6aea736af'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -int -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'init'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '154'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Initializes the LCD class - @discussion Initializes the LCD class and IO expansion module. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___i2_c_1a1d715dbf40f06b4c15004cd356b5a321'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'pulseEnable'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-defname = 'data'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '190'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Pulse the LCD enable line (En). - @discussion Sends a pulse of 1 uS to the Enable pin to execute an command - or write operation. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___i2_c_1a60111950cc0a47e6223c22949faa15f3'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'write4bits'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'mode'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '182'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Writes an 4 bit value to the LCD. - @discussion Writes 4 bits (the least significant) to the LCD control data lines. - @param value[in] Value to write to the LCD - @param more[in] Value to distinguish between command and data. - COMMAND == command, DATA == data. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-section = { - sec-kind = 'private-attrib'; - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___i2_c_1a0bb3cc7ec414b373ef00e0cc6642ec88'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_Addr'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '193'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___i2_c_1a9d59c16cde5c3ffb30a881e9a61c9a32'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_backlightPinMask'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '194'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___i2_c_1a0eaa7c2ac1040a1786960618866c066e'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_backlightStsMask'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '195'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___i2_c_1a3436246b17062357066c636aa598b49d'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_data_pins'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '200'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___i2_c_1aa0a878e97b6111abf1bc8d767a548cf2'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_En'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '197'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___i2_c_1adcc89f14c444ff086f544f33fc18ca4c'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -I2CIO -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_i2cio'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '196'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___i2_c_1ab70fc18e99a70e3293c4f6ba25c37efa'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_Rs'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '199'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___i2_c_1a882df32eb9ae0e7a1b74f9a8ee4bffe9'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_Rw'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '198'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-filename = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - cp-fileline = '39'; - cp-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - cp-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - cp-inheritancegraph = <<_EnD_oF_dEf_TeXt_ - node = { - node-id = 16; - node-label = 'LCD'; - node-link = { - node-link-id = 'class_l_c_d'; - }; - }; /* node */ - node = { - node-id = 15; - node-label = 'LiquidCrystal_I2C'; - node-link = { - node-link-id = 'class_liquid_crystal___i2_c'; - }; - node-child = { - child-id = '16'; - relation = public-inheritance; - }; /* node-child */ - }; /* node */ - -_EnD_oF_dEf_TeXt_; - cp-collaborationgraph = <<_EnD_oF_dEf_TeXt_ - node = { - node-id = 18; - node-label = 'LCD'; - node-link = { - node-link-id = 'class_l_c_d'; - }; - }; /* node */ - node = { - node-id = 17; - node-label = 'LiquidCrystal_I2C'; - node-link = { - node-link-id = 'class_liquid_crystal___i2_c'; - }; - node-child = { - child-id = '18'; - relation = public-inheritance; - }; /* node-child */ - node-child = { - child-id = '19'; - relation = usage; - edgelabel = <<_EnD_oF_dEf_TeXt_ -_i2cio -_EnD_oF_dEf_TeXt_; - }; /* node-child */ - }; /* node */ - node = { - node-id = 19; - node-label = 'I2CIO'; - node-link = { - node-link-id = 'class_i2_c_i_o'; - }; - }; /* node */ - -_EnD_oF_dEf_TeXt_; -}; /* class */ -class = { - cp-id = 'class_liquid_crystal___i2_c___by_vac'; - cp-name = 'LiquidCrystal_I2C_ByVac'; - cp-ref = { - ref-type = base; - ref-id = 'class_l_c_d'; - ref-prot = public; - ref-virt = non-virtual; - }; - cp-section = { - sec-kind = 'public-func'; - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___i2_c___by_vac_1a34ce9cf919b9f8de59f842a4e94c1abb'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -virtual void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'begin'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'cols'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'rows'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'charsize'; - sec-mem-param-defval = <<_EnD_oF_dEf_TeXt_ -LCD_5x8DOTS -_EnD_oF_dEf_TeXt_; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C_ByVac.h'; - sec-mem-desc-line = '68'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract LCD initialization and associated HW. - @discussion Initializes the LCD to a given size (col, row). This methods - initializes the LCD, therefore, it MUST be called prior to using any other - method from this class or parent class. - - The begin method can be overloaded if necessary to initialize any HW that - is implemented by a library and can't be done during construction, here - we use the Wire class. - - @param cols[in] the number of columns that the display has - @param rows[in] the number of rows that the display has - @param charsize[in] size of the characters of the LCD: LCD_5x8DOTS or - LCD_5x10DOTS. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___i2_c___by_vac_1a29c027cc8bfa78bb8d9ff3124fe83a31'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal_I2C_ByVac'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'lcd_Addr'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C_ByVac.h'; - sec-mem-desc-line = '50'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Class constructor. - @discussion Initializes class variables and defines the I2C address of the - LCD. The constructor does not initialize the LCD. - - @param lcd_Addr[in] I2C address of the IO expansion module. For BV4218, - the address can be configured using the address commands (to be implemented). -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___i2_c___by_vac_1a9e64cc68ec5df1a0fa421a242239b1b1'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -virtual void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'send'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'mode'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C_ByVac.h'; - sec-mem-desc-line = '82'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Send a particular value to the LCD. - @discussion Sends a particular value to the LCD for writing to the LCD or - as an LCD command. - - Users should never call this method. - - @param value[in] Value to send to the LCD. - @param mode[in] DATA - write to the LCD CGRAM, COMMAND - write a - command to the LCD. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___i2_c___by_vac_1a9b16e6ce123e2ebe3a3e33b2306e66a7'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'setBacklight'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C_ByVac.h'; - sec-mem-desc-line = '92'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Switch-on/off the LCD backlight. - @discussion Switch-on/off the LCD backlight. - - @param value: backlight mode (HIGH|LOW) -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___i2_c___by_vac_1a53c79a20e8d21d2c3bc9e6d0dfc79cb4'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'setContrast'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C_ByVac.h'; - sec-mem-desc-line = '102'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Switch-on/off the LCD contrast. - @discussion Switch-on/off the LCD contrast. - - @param value: contrast mode (HIGH|LOW) -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-section = { - sec-kind = 'private-func'; - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___i2_c___by_vac_1a7293d7ccd2a1f6305430f57a2023b5ef'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -int -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'init'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C_ByVac.h'; - sec-mem-desc-line = '111'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Initializes the LCD class - @discussion Initializes the LCD class and IO expansion module. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-section = { - sec-kind = 'private-attrib'; - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___i2_c___by_vac_1a6989e196aecac177e2b3b06d83877079'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_Addr'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C_ByVac.h'; - sec-mem-desc-line = '122'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Initialises class private variables - @discussion This is the class single point for initialising private variables. - - @param lcd_Addr[in] I2C address of the IO expansion module. For BV4218, - the address can be configured using the address commands. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-filename = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C_ByVac.h'; - cp-fileline = '38'; - cp-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - cp-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - cp-inheritancegraph = <<_EnD_oF_dEf_TeXt_ - node = { - node-id = 20; - node-label = 'LiquidCrystal_I2C_ByVac'; - node-link = { - node-link-id = 'class_liquid_crystal___i2_c___by_vac'; - }; - node-child = { - child-id = '21'; - relation = public-inheritance; - }; /* node-child */ - }; /* node */ - node = { - node-id = 21; - node-label = 'LCD'; - node-link = { - node-link-id = 'class_l_c_d'; - }; - }; /* node */ - -_EnD_oF_dEf_TeXt_; - cp-collaborationgraph = <<_EnD_oF_dEf_TeXt_ - node = { - node-id = 22; - node-label = 'LiquidCrystal_I2C_ByVac'; - node-link = { - node-link-id = 'class_liquid_crystal___i2_c___by_vac'; - }; - node-child = { - child-id = '23'; - relation = public-inheritance; - }; /* node-child */ - }; /* node */ - node = { - node-id = 23; - node-label = 'LCD'; - node-link = { - node-link-id = 'class_l_c_d'; - }; - }; /* node */ - -_EnD_oF_dEf_TeXt_; -}; /* class */ -class = { - cp-id = 'class_liquid_crystal___s_r'; - cp-name = 'LiquidCrystal_SR'; - cp-ref = { - ref-type = base; - ref-id = 'class_l_c_d'; - ref-prot = public; - ref-virt = non-virtual; - }; - cp-section = { - sec-kind = 'public-func'; - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r_1ac3fe0b48f8d4c1c941d82d1333495cfc'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal_SR'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'srdata'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'srclock'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'enable'; - sec-mem-param-defval = <<_EnD_oF_dEf_TeXt_ -TWO_WIRE -_EnD_oF_dEf_TeXt_; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; - sec-mem-desc-line = '108'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract LCD SHIFT REGISTER constructors. - @discussion Defines the pin assignment that the LCD will have. - The constructor does not initialize the LCD. Assuming 1 line 8 pixel high - font. - - @param srdata[in] pin for shiftregister data line. - @param srclock[in] pin for shiftregister clock line. - @param enable[in] optional direct enable pin for the LCD -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r_1a03821351a32db07cb7e42c8c11ce8d47'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -virtual void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'send'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'mode'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; - sec-mem-desc-line = '122'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Send a particular value to the LCD. - @discussion Sends a particular value to the LCD for writing to the LCD or - as an LCD command using the shift register. - - Users should never call this method. - - @param value[in] Value to send to the LCD. - @result mode LOW - write to the LCD CGRAM, HIGH - write a command to - the LCD. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r_1ad9f3e3f36257984c23fb508973e14535'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'setBacklight'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'mode'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; - sec-mem-desc-line = '145'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Switch-on/off the LCD backlight. - @discussion Switch-on/off the LCD backlight. - The setBacklightPin has to be called before setting the backlight for - this method to work. @see setBacklightPin. - - @param mode: backlight mode (HIGH|LOW) -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r_1a5bfc0dcc1f042bcb59992493a3a7231d'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'setBacklightPin'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'pin'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -t_backlighPol -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'pol'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; - sec-mem-desc-line = '134'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Sets the pin to control the backlight. - @discussion Sets the pin in the device to control the backlight. - @warning Currently not supported - - @param mode: backlight mode (HIGH|LOW) - @param pol: backlight polarity -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-section = { - sec-kind = 'private-func'; - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r_1a0f15bf3f5041a91469da5fd75aba5d5e'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'init'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'srdata'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'srclock'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'enable'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'lines'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'font'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; - sec-mem-desc-line = '155'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Initializes the LCD pin allocation - @discussion Initializes the LCD pin allocation and configuration. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r_1a2684630ad69618fab065f53eea543df8'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'shiftIt'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'val'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; - sec-mem-desc-line = '161'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract takes care of shifting and the enable pulse -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-section = { - sec-kind = 'private-attrib'; - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r_1acee96e0ef397441bdde73ca921160476'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_enable_pin'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; - sec-mem-desc-line = '163'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r_1a68bffb6befc28cb716fb0c48b50f65fc'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_srClockBit'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; - sec-mem-desc-line = '169'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r_1a507726b30de4b552b4e32faf9a3aa9e3'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_srClockRegister'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; - sec-mem-desc-line = '168'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r_1a9984b207beddba9ff299f9356f891065'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_srDataBit'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; - sec-mem-desc-line = '167'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r_1a1e5bf3e5c6ec5b6c41f6949b6e34fd34'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_srDataRegister'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; - sec-mem-desc-line = '166'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r_1a12e3ee583d454d5f52223beca91f5bae'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_srEnableBit'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; - sec-mem-desc-line = '171'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r_1adab0eb2bb7392a77375034530bf230eb'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_srEnableRegister'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; - sec-mem-desc-line = '170'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r_1ad20f9d3282b047fdbae8e97b07d4fc89'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_two_wire'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; - sec-mem-desc-line = '164'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-filename = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; - cp-fileline = '95'; - cp-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - cp-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - cp-inheritancegraph = <<_EnD_oF_dEf_TeXt_ - node = { - node-id = 24; - node-label = 'LiquidCrystal_SR'; - node-link = { - node-link-id = 'class_liquid_crystal___s_r'; - }; - node-child = { - child-id = '25'; - relation = public-inheritance; - }; /* node-child */ - }; /* node */ - node = { - node-id = 25; - node-label = 'LCD'; - node-link = { - node-link-id = 'class_l_c_d'; - }; - }; /* node */ - -_EnD_oF_dEf_TeXt_; - cp-collaborationgraph = <<_EnD_oF_dEf_TeXt_ - node = { - node-id = 26; - node-label = 'LiquidCrystal_SR'; - node-link = { - node-link-id = 'class_liquid_crystal___s_r'; - }; - node-child = { - child-id = '27'; - relation = public-inheritance; - }; /* node-child */ - }; /* node */ - node = { - node-id = 27; - node-label = 'LCD'; - node-link = { - node-link-id = 'class_l_c_d'; - }; - }; /* node */ - -_EnD_oF_dEf_TeXt_; -}; /* class */ -class = { - cp-id = 'class_liquid_crystal___s_r1_w'; - cp-name = 'LiquidCrystal_SR1W'; - cp-ref = { - ref-type = base; - ref-id = 'class_l_c_d'; - ref-prot = public; - ref-virt = non-virtual; - }; - cp-section = { - sec-kind = 'public-func'; - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r1_w_1a33bff2c123d3dc42a829b0f8034912c9'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal_SR1W'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'srdata'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -t_sr1w_circuitType -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'circuitType'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -t_backlighPol -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'blpol'; - sec-mem-param-defval = <<_EnD_oF_dEf_TeXt_ -POSITIVE -_EnD_oF_dEf_TeXt_; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR1W.h'; - sec-mem-desc-line = '314'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract LCD 1 wire SHIFT REGISTER constructor. - @discussion Defines the pin assignments that connect to the shift register. - The constructor does not initialize the LCD. Assuming 1 line 8 pixel high - font. - - @param srdata[in] Arduino pin for shift register. - @param circuitType[in] optionally select an alternate circuit type - @param blpol[in] optional backlight polarity (default = POSITIVE) -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r1_w_1a7fc0b03977907b4d526a6b9e49a331b1'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -virtual void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'send'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'mode'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR1W.h'; - sec-mem-desc-line = '328'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Send a particular value to the LCD. - @discussion Sends a particular value to the LCD for writing to the LCD or - as an LCD command using the shift register. - - Users should never call this method. - - @param value[in] Value to send to the LCD. - @param mode[in] DATA=8bit data, COMMAND=8bit cmd, FOUR_BITS=4bit cmd - the LCD. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r1_w_1a82d844569eb258559afb40ab354eb0a5'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'setBacklight'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'mode'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR1W.h'; - sec-mem-desc-line = '340'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Switch-on/off the LCD backlight. - @discussion Switch-on/off the LCD backlight. - The setBacklightPin has to be called before setting the backlight for - this method to work. @see setBacklightPin. - - @param mode[in] backlight mode (0 off, non-zero on) -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-section = { - sec-kind = 'private-func'; - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r1_w_1a69e25db9a22f6db2298a491f7ad1e584'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'clearSR'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR1W.h'; - sec-mem-desc-line = '357'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Clears the shift register to ensure the Latch/Enable pins aren't - triggered accidentally. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r1_w_1a0327b271d94edec240063b64406bf0b9'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'init'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'srdata'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -t_sr1w_circuitType -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'circuitType'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -t_backlighPol -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'blpol'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'lines'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'font'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR1W.h'; - sec-mem-desc-line = '350'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Initializes the LCD pin allocation - @discussion Initializes the LCD pin allocation and configuration. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r1_w_1afcb233448f4cec3f4074a812554dc389'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'loadSR'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'val'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR1W.h'; - sec-mem-desc-line = '363'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract takes care of shifting and the enable pulse -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-section = { - sec-kind = 'private-attrib'; - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r1_w_1a925c01c77c3fa96b8f9e9b0861f25ded'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_blMask'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR1W.h'; - sec-mem-desc-line = '371'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r1_w_1aed16f51df5f5a6aaadabdc4ccc04b998'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_blPolarity'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR1W.h'; - sec-mem-desc-line = '370'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r1_w_1a03ff5be51ff970ec73a521740d4a4d97'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -t_sr1w_circuitType -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_circuitType'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR1W.h'; - sec-mem-desc-line = '368'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r1_w_1a1a23b85dfd7f61b455959f5c43b4654c'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_srMask'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR1W.h'; - sec-mem-desc-line = '366'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r1_w_1ad8d5ad6e9b25dd1c86b17a73ddc61369'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_srRegister'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR1W.h'; - sec-mem-desc-line = '365'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-filename = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR1W.h'; - cp-fileline = '300'; - cp-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - cp-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - cp-inheritancegraph = <<_EnD_oF_dEf_TeXt_ - node = { - node-id = 29; - node-label = 'LCD'; - node-link = { - node-link-id = 'class_l_c_d'; - }; - }; /* node */ - node = { - node-id = 28; - node-label = 'LiquidCrystal_SR1W'; - node-link = { - node-link-id = 'class_liquid_crystal___s_r1_w'; - }; - node-child = { - child-id = '29'; - relation = public-inheritance; - }; /* node-child */ - }; /* node */ - -_EnD_oF_dEf_TeXt_; - cp-collaborationgraph = <<_EnD_oF_dEf_TeXt_ - node = { - node-id = 31; - node-label = 'LCD'; - node-link = { - node-link-id = 'class_l_c_d'; - }; - }; /* node */ - node = { - node-id = 30; - node-label = 'LiquidCrystal_SR1W'; - node-link = { - node-link-id = 'class_liquid_crystal___s_r1_w'; - }; - node-child = { - child-id = '31'; - relation = public-inheritance; - }; /* node-child */ - }; /* node */ - -_EnD_oF_dEf_TeXt_; -}; /* class */ -class = { - cp-id = 'class_liquid_crystal___s_r2_w'; - cp-name = 'LiquidCrystal_SR2W'; - cp-ref = { - ref-type = base; - ref-id = 'class_l_c_d'; - ref-prot = public; - ref-virt = non-virtual; - }; - cp-section = { - sec-kind = 'public-func'; - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r2_w_1af307fdf5c8feb757e965074dcdeb1dd3'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal_SR2W'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'srdata'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'srclock'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -t_backlighPol -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'blpol'; - sec-mem-param-defval = <<_EnD_oF_dEf_TeXt_ -POSITIVE -_EnD_oF_dEf_TeXt_; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; - sec-mem-desc-line = '151'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract LCD 2 wire SHIFT REGISTER constructor. - @discussion Defines the pin assignments that connect to the shift register. - The constructor does not initialize the LCD. Assuming 1 line 8 pixel high - font. - - @param srdata[in] Arduino pin for shift register data line. - @param srclock[in] Arduino pin for shift register clock line. - @param blpol[in] optional backlight polarity (default = POSITIVE) -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r2_w_1a65dc6f261c319be8e56f3c1f6a5c877d'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -virtual void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'send'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'mode'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; - sec-mem-desc-line = '165'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Send a particular value to the LCD. - @discussion Sends a particular value to the LCD for writing to the LCD or - as an LCD command using the shift register. - - Users should never call this method. - - @param value[in] Value to send to the LCD. - @param mode[in] DATA=8bit data, COMMAND=8bit cmd, FOUR_BITS=4bit cmd - the LCD. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r2_w_1a2158db27287c1564a03e7a1472beb3b6'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'setBacklight'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'mode'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; - sec-mem-desc-line = '177'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Switch-on/off the LCD backlight. - @discussion Switch-on/off the LCD backlight. - The setBacklightPin has to be called before setting the backlight for - this method to work. @see setBacklightPin. - - @param mode[in] backlight mode (0 off, non-zero on) -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-section = { - sec-kind = 'private-func'; - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r2_w_1a12c14153e7056cb4a98310529bace6a8'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'init'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'srdata'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'srclock'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -t_backlighPol -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'blpol'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'lines'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'font'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; - sec-mem-desc-line = '186'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Initializes the LCD pin allocation - @discussion Initializes the LCD pin allocation and configuration. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r2_w_1ae369efcd3fca47a018a034f5f4a1679b'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'loadSR'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'val'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; - sec-mem-desc-line = '192'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract takes care of shifting and the enable pulse -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-section = { - sec-kind = 'private-attrib'; - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r2_w_1a3b1dfb83ad02274c30fa940a10619737'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_blMask'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; - sec-mem-desc-line = '200'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r2_w_1a906f803e1ae324b5383fa004093124f4'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_blPolarity'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; - sec-mem-desc-line = '199'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r2_w_1a27727d63c1ce0f9aada630814b8f022b'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_srClockMask'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; - sec-mem-desc-line = '197'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r2_w_1aa36d38c009bf846e7726fc48c0067fc3'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_srClockRegister'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; - sec-mem-desc-line = '196'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r2_w_1ad188042fdcc7df0178248401c678eb8e'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_srDataMask'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; - sec-mem-desc-line = '195'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r2_w_1a2e43c3f1d6b0e5599a1b4d14ef428077'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_srDataRegister'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; - sec-mem-desc-line = '194'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-filename = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; - cp-fileline = '138'; - cp-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - cp-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - cp-inheritancegraph = <<_EnD_oF_dEf_TeXt_ - node = { - node-id = 33; - node-label = 'LCD'; - node-link = { - node-link-id = 'class_l_c_d'; - }; - }; /* node */ - node = { - node-id = 32; - node-label = 'LiquidCrystal_SR2W'; - node-link = { - node-link-id = 'class_liquid_crystal___s_r2_w'; - }; - node-child = { - child-id = '33'; - relation = public-inheritance; - }; /* node-child */ - }; /* node */ - -_EnD_oF_dEf_TeXt_; - cp-collaborationgraph = <<_EnD_oF_dEf_TeXt_ - node = { - node-id = 35; - node-label = 'LCD'; - node-link = { - node-link-id = 'class_l_c_d'; - }; - }; /* node */ - node = { - node-id = 34; - node-label = 'LiquidCrystal_SR2W'; - node-link = { - node-link-id = 'class_liquid_crystal___s_r2_w'; - }; - node-child = { - child-id = '35'; - relation = public-inheritance; - }; /* node-child */ - }; /* node */ - -_EnD_oF_dEf_TeXt_; -}; /* class */ -class = { - cp-id = 'class_liquid_crystal___s_r3_w'; - cp-name = 'LiquidCrystal_SR3W'; - cp-ref = { - ref-type = base; - ref-id = 'class_l_c_d'; - ref-prot = public; - ref-virt = non-virtual; - }; - cp-section = { - sec-kind = 'public-func'; - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r3_w_1ae1396bcd5e9c5b7ed13182c166de776b'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal_SR3W'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'data'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'clk'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'strobe'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - sec-mem-desc-line = '90'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Class constructor. - @discussion Initializes class variables and defines the IO driving the - shift register. The constructor does not initialize the LCD. - Default configuration: - Shift register LCD - QA - 0 DB4 - QB - 1 DB5 - QC - 2 DB6 - QD - 3 DB7 - QE - 4 E - QF - 5 - QG - 6 Rs - GND Rw - - @param strobe[in] digital IO connected to shiftregister strobe pin. - @param data[in] digital IO connected to the shiftregister data pin. - @param clk[in] digital IO connected to the shiftregister clock pin. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r3_w_1a7b2f382b76bc9d88adb8d681e824b4de'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal_SR3W'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'data'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'clk'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'strobe'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'backlighPin'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -t_backlighPol -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'pol'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - sec-mem-desc-line = '93'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r3_w_1a24f051747dfeda48f7b207c3358c8015'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal_SR3W'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'data'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'clk'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'strobe'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'En'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'Rw'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'Rs'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd4'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd5'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd6'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd7'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'backlighPin'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -t_backlighPol -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'pol'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - sec-mem-desc-line = '119'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r3_w_1a4fab8ff2f21bba3efd133cd8c87fffc0'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal_SR3W'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'data'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'clk'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'strobe'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'En'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'Rw'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'Rs'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd4'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd5'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd6'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd7'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - sec-mem-desc-line = '114'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Class constructor. - @discussion Initializes class variables and defines the control lines of - the LCD and the shiftregister. The constructor does not initialize the LCD. - - @param strobe[in] digital IO connected to shiftregister strobe pin. - @param data[in] digital IO connected to shiftregister data pin. - @param clk[in] digital IO connected to shiftregister clock pin. - @param En[in] LCD En (Enable) pin connected to SR output pin. - @param Rw[in] LCD Rw (Read/write) pin connected to SR output pin. - @param Rs[in] LCD Rs (Reg Select) pin connected to SR output pin. - @param d4[in] LCD data 4 pin map to the SR output pin. - @param d5[in] LCD data 5 pin map to the SR output pin. - @param d6[in] LCD data 6 pin map to the SR output pin. - @param d7[in] LCD data 7 pin map to the SR output pin. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r3_w_1ade34af5b7fe795482f1848c2176d6e56'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -virtual void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'send'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'mode'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - sec-mem-desc-line = '133'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Send a particular value to the LCD. - @discussion Sends a particular value to the LCD for writing to the LCD or - as an LCD command. - - Users should never call this method. - - @param value[in] Value to send to the LCD. - @param mode[in] DATA - write to the LCD CGRAM, COMMAND - write a - command to the LCD. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r3_w_1a6d0fc7907ef9fd87c408a21b9bd49295'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'setBacklight'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - sec-mem-desc-line = '154'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Switch-on/off the LCD backlight. - @discussion Switch-on/off the LCD backlight. - The setBacklightPin has to be called before setting the backlight for - this method to work. @see setBacklightPin. - - @param value: backlight mode (HIGH|LOW) -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r3_w_1a894d0ea8ea61c1d15acd8a26d417e477'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'setBacklightPin'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -t_backlighPol -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'pol'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - sec-mem-desc-line = '143'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Sets the pin to control the backlight. - @discussion Sets the pin in the device to control the backlight. This device - doesn't support dimming backlight capability. - - @param 0: backlight off, 1..255: backlight on. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-section = { - sec-kind = 'private-func'; - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r3_w_1a45cde916021d9b52b0f769c17886b2ef'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -int -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'init'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'data'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'clk'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'strobe'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'Rs'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'Rw'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'En'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd4'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd5'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd6'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd7'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - sec-mem-desc-line = '165'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Initializes the LCD class - @discussion Initializes the LCD class and IO expansion module. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r3_w_1a80f6e4e8b10635d9daed718f2918c1bd'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'loadSR'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - sec-mem-desc-line = '183'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract load into the shift register a byte - @discussion loads into the shift register a byte - @param value[in]: value to be loaded into the shiftregister. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r3_w_1ac0702caa5d07ffd8e832ad8a5d0afe7c'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'write4bits'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'mode'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - sec-mem-desc-line = '175'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Writes an 4 bit value to the LCD. - @discussion Writes 4 bits (the least significant) to the LCD control data lines. - @param value[in] Value to write to the LCD - @param more[in] Value to distinguish between command and data. - COMMAND == command, DATA == data. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-section = { - sec-kind = 'private-attrib'; - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r3_w_1a21ef2e5b78edd0d160d81b0c06d41440'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_backlightPinMask'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - sec-mem-desc-line = '196'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r3_w_1adf17379bfac4def5c780fc8ad023764c'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_backlightStsMask'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - sec-mem-desc-line = '197'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r3_w_1a2c14746e8f626a53f777c8df68f8a92b'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_clk'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - sec-mem-desc-line = '190'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r3_w_1af7d09207dffb9f2fc85fc60661ffa0d4'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_clk_reg'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - sec-mem-desc-line = '191'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r3_w_1ab81049d446d2e7399ee6b20c9da4cdde'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_data'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - sec-mem-desc-line = '188'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r3_w_1a366adab314f5dc8b7e53298d6eccf85d'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_data_pins'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - sec-mem-desc-line = '195'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r3_w_1a301acb36345c56ae336156fdeee4a783'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_data_reg'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - sec-mem-desc-line = '189'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r3_w_1a4306c59b6bf3870fecad23d6b0c0aa5d'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_En'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - sec-mem-desc-line = '192'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r3_w_1a062da9fb985a7e88128d7d95fd8239d6'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_Rs'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - sec-mem-desc-line = '194'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r3_w_1aef47417b089e53af1ce032e5f1b23b43'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_Rw'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - sec-mem-desc-line = '193'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r3_w_1a0d40b3c14c3f56fd341d41220f425925'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_strobe'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - sec-mem-desc-line = '186'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r3_w_1a2a7d9703b04a91658b7a590b926ff9cd'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_strobe_reg'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - sec-mem-desc-line = '187'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-filename = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - cp-fileline = '67'; - cp-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - cp-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - cp-inheritancegraph = <<_EnD_oF_dEf_TeXt_ - node = { - node-id = 37; - node-label = 'LCD'; - node-link = { - node-link-id = 'class_l_c_d'; - }; - }; /* node */ - node = { - node-id = 36; - node-label = 'LiquidCrystal_SR3W'; - node-link = { - node-link-id = 'class_liquid_crystal___s_r3_w'; - }; - node-child = { - child-id = '37'; - relation = public-inheritance; - }; /* node-child */ - }; /* node */ - -_EnD_oF_dEf_TeXt_; - cp-collaborationgraph = <<_EnD_oF_dEf_TeXt_ - node = { - node-id = 39; - node-label = 'LCD'; - node-link = { - node-link-id = 'class_l_c_d'; - }; - }; /* node */ - node = { - node-id = 38; - node-label = 'LiquidCrystal_SR3W'; - node-link = { - node-link-id = 'class_liquid_crystal___s_r3_w'; - }; - node-child = { - child-id = '39'; - relation = public-inheritance; - }; /* node-child */ - }; /* node */ - -_EnD_oF_dEf_TeXt_; -}; /* class */ -file = { - file-id = '_fast_i_o_8cpp'; - file-name = 'FastIO.cpp'; - func = { - func-member = { - func-mem-kind = 'function'; - func-mem-id = '_fast_i_o_8cpp_1a83fc2fdc19ab3f9aade9e1a2f39e81a6'; - func-mem-virt = normal; - func-mem-prot = public; - func-mem-type = <<_EnD_oF_dEf_TeXt_ -int -_EnD_oF_dEf_TeXt_; - func-mem-name = 'fio_digitalRead'; - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'pinRegister'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'pinBit'; - }; /* func-mem-param--param */ - func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; - func-mem-desc-line = '96'; - func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - func-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract direct digital read - @discussion without any checks - @discussion falls back to normal digitalRead if fast io is disabled - @param pinRegister[in] Register - ignored if fast io is disabled - @param pinBit[in] Bit - Pin if fast io is disabled - @result Value read from pin -_EnD_oF_dEf_TeXt_; - }; /* func-member */ - func-member = { - func-mem-kind = 'function'; - func-mem-id = '_fast_i_o_8cpp_1ae91bbe682b02a5842c291055c0e998b5'; - func-mem-virt = normal; - func-mem-prot = public; - func-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - func-mem-name = 'fio_digitalWrite'; - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'pinRegister'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'pinBit'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'value'; - }; /* func-mem-param--param */ - func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; - func-mem-desc-line = '77'; - func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - func-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract direct digital write - @discussion without any checks - @discussion falls back to normal digitalWrite if fast io is disabled - @param pinRegister[in] Register - ignored if fast digital write is disabled - @param pinBit[in] Bit - Pin if fast digital write is disabled - @param value[in] desired output -_EnD_oF_dEf_TeXt_; - }; /* func-member */ - func-member = { - func-mem-kind = 'function'; - func-mem-id = '_fast_i_o_8cpp_1a07a19dfbdca1afaca5d666bdaa3be7d5'; - func-mem-virt = normal; - func-mem-prot = public; - func-mem-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - func-mem-name = 'fio_pinToBit'; - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'pin'; - }; /* func-mem-param--param */ - func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; - func-mem-desc-line = '66'; - func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - func-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Find the bit which belongs to specified pin - @discussion if fast digitalWrite is disabled this function returns the pin - @param pin[in] Number of a digital pin - @result Bit -_EnD_oF_dEf_TeXt_; - }; /* func-member */ - func-member = { - func-mem-kind = 'function'; - func-mem-id = '_fast_i_o_8cpp_1afb934fc0ded94cbb5ed8ed14e2a123ed'; - func-mem-virt = normal; - func-mem-prot = public; - func-mem-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - func-mem-name = 'fio_pinToInputRegister'; - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'pin'; - }; /* func-mem-param--param */ - func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; - func-mem-desc-line = '53'; - func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - func-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Get the input register for specified pin. - @discussion if fast digital IO is disabled this function returns NULL - @param pin[in] Number of a digital pin - @result Register -_EnD_oF_dEf_TeXt_; - }; /* func-member */ - func-member = { - func-mem-kind = 'function'; - func-mem-id = '_fast_i_o_8cpp_1a04210cc785c3b4a11c86f794949c327f'; - func-mem-virt = normal; - func-mem-prot = public; - func-mem-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - func-mem-name = 'fio_pinToOutputRegister'; - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'pin'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'initial_state'; - }; /* func-mem-param--param */ - func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; - func-mem-desc-line = '36'; - func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - func-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Get the output register for specified pin. - @discussion if fast digital IO is disabled this function returns NULL - @param pin[in] Number of a digital pin - @result Register -_EnD_oF_dEf_TeXt_; - }; /* func-member */ - func-member = { - func-mem-kind = 'function'; - func-mem-id = '_fast_i_o_8cpp_1a5d8d5977294d614d15bda19f75d6b787'; - func-mem-virt = normal; - func-mem-prot = public; - func-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - func-mem-name = 'fio_shiftOut'; - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'dataRegister'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'dataBit'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'clockRegister'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'clockBit'; - }; /* func-mem-param--param */ - func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; - func-mem-desc-line = '161'; - func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - func-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract faster shift out clear - @discussion using fast digital write - @discussion falls back to normal digitalWrite if fastio is disabled - @param dataRegister[in] Register of data pin - ignored if fast digital write is disabled - @param dataBit[in] Bit of data pin - Pin if fast digital write is disabled - @param clockRegister[in] Register of data pin - ignored if fast digital write is disabled - @param clockBit[in] Bit of data pin - Pin if fast digital write is disabled -_EnD_oF_dEf_TeXt_; - }; /* func-member */ - func-member = { - func-mem-kind = 'function'; - func-mem-id = '_fast_i_o_8cpp_1a56c72b9f00680662229895ab22aaa743'; - func-mem-virt = normal; - func-mem-prot = public; - func-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - func-mem-name = 'fio_shiftOut'; - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'dataRegister'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'dataBit'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'clockRegister'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'clockBit'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'value'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'bitOrder'; - }; /* func-mem-param--param */ - func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; - func-mem-desc-line = '111'; - func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - func-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract faster shift out - @discussion using fast digital write - @discussion falls back to normal digitalWrite if fastio is disabled - @param dataRegister[in] Register of data pin - ignored if fast digital write is disabled - @param dataBit[in] Bit of data pin - Pin if fast digital write is disabled - @param clockRegister[in] Register of data pin - ignored if fast digital write is disabled - @param clockBit[in] Bit of data pin - Pin if fast digital write is disabled - @param bitOrder[in] bit order -_EnD_oF_dEf_TeXt_; - }; /* func-member */ - func-member = { - func-mem-kind = 'function'; - func-mem-id = '_fast_i_o_8cpp_1a7ac8b242e7e3cacf175e481889e047dd'; - func-mem-virt = normal; - func-mem-prot = public; - func-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - func-mem-name = 'fio_shiftOut1'; - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'pin'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'value'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -boolean -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'noLatch'; - }; /* func-mem-param--param */ - func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; - func-mem-desc-line = '265'; - func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - func-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract one wire shift out - @discussion protocol needs initialisation (fio_shiftOut1_init) - @param pin[in] digital pin - @param value[in] value to shift out, last byte is ignored and always shifted out LOW -_EnD_oF_dEf_TeXt_; - }; /* func-member */ - func-member = { - func-mem-kind = 'function'; - func-mem-id = '_fast_i_o_8cpp_1a5b4d1684030dc620938b7c2fbdf5ced8'; - func-mem-virt = normal; - func-mem-prot = public; - func-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - func-mem-name = 'fio_shiftOut1'; - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'shift1Register'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'shift1Bit'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'value'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -boolean -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'noLatch'; - }; /* func-mem-param--param */ - func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; - func-mem-desc-line = '192'; - func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - func-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract one wire shift out - @discussion protocol needs initialisation (fio_shiftOut1_init) - @param shift1Register[in] pins register - @param shift1Bit[in] pins bit - @param value[in] value to shift out, last byte is ignored and always shifted out LOW -_EnD_oF_dEf_TeXt_; - }; /* func-member */ - func-member = { - func-mem-kind = 'function'; - func-mem-id = '_fast_i_o_8cpp_1a2d0e4495eb12504255bbd3f82405b17b'; - func-mem-virt = normal; - func-mem-prot = public; - func-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - func-mem-name = 'fio_shiftOut1_init'; - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'shift1Register'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'shift1Bit'; - }; /* func-mem-param--param */ - func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; - func-mem-desc-line = '182'; - func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - func-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract initializes one wire shift out protocol - @discussion Puts pin to HIGH state and delays until Capacitors are charged. - @param shift1Register[in] pins register - @param shift1Bit[in] pins bit -_EnD_oF_dEf_TeXt_; - }; /* func-member */ - func-member = { - func-mem-kind = 'function'; - func-mem-id = '_fast_i_o_8cpp_1ae4b2e099f8ade9ee674d1565669e870a'; - func-mem-virt = normal; - func-mem-prot = public; - func-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - func-mem-name = 'fio_shiftOut1_init'; - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'pin'; - }; /* func-mem-param--param */ - func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; - func-mem-desc-line = '177'; - func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - func-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract initializes one wire shift out protocol - @discussion Puts pin to HIGH state and delays until Capacitors are charged. - @param pin[in] digital pin -_EnD_oF_dEf_TeXt_; - }; /* func-member */ - }; - file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; - file-first-line = '1'; - file-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - file-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* file */ -file = { - file-id = '_fast_i_o_8h'; - file-name = 'FastIO.h'; - define = { - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_fast_i_o_8h_1a04971fe5fabe4129736708c494e08e6d'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'ATOMIC_BLOCK'; - define-mem-param = { - define-mem-def-name = 'dummy'; - }; /* define-mem-def--param */ - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -if(true) -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; - define-mem-desc-line = '58'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_fast_i_o_8h_1a362c18b15a09703e42e1c246c47420ef'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'ATOMIC_RESTORESTATE'; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; - define-mem-desc-line = '59'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_fast_i_o_8h_1a89e1c62276052100c62b6c82a2e95622'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'fio_digitalWrite_HIGH'; - define-mem-param = { - define-mem-def-name = 'reg'; - }; /* define-mem-def--param */ - define-mem-param = { - define-mem-def-name = 'bit'; - }; /* define-mem-def--param */ - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -digitalWrite(bit,HIGH) -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; - define-mem-desc-line = '143'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - This is where the magic happens that makes things fast. - Implemented as preprocessor directives to force inlining - SWITCH is fast for FIO but probably slow for FIO_FALLBACK so SWITCHTO is recommended if the value is known. -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_fast_i_o_8h_1ac8f00a1bccb98109531b88fbb6e91478'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'fio_digitalWrite_LOW'; - define-mem-param = { - define-mem-def-name = 'reg'; - }; /* define-mem-def--param */ - define-mem-param = { - define-mem-def-name = 'bit'; - }; /* define-mem-def--param */ - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -digitalWrite(bit,LOW) -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; - define-mem-desc-line = '144'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_fast_i_o_8h_1a6d1dffed7f0c8f28f6c88146315f7832'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'fio_digitalWrite_SWITCH'; - define-mem-param = { - define-mem-def-name = 'reg'; - }; /* define-mem-def--param */ - define-mem-param = { - define-mem-def-name = 'bit'; - }; /* define-mem-def--param */ - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -digitalWrite(bit, !digitalRead(bit)) -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; - define-mem-desc-line = '145'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_fast_i_o_8h_1accae9687fdfc5f3492fb6344d62eb190'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'fio_digitalWrite_SWITCHTO'; - define-mem-param = { - define-mem-def-name = 'reg'; - }; /* define-mem-def--param */ - define-mem-param = { - define-mem-def-name = 'bit'; - }; /* define-mem-def--param */ - define-mem-param = { - define-mem-def-name = 'val'; - }; /* define-mem-def--param */ - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -digitalWrite(bit,val); -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; - define-mem-desc-line = '146'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_fast_i_o_8h_1a32f90d0ad5c1295c97cc1e79936aadd6'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'FIO_FALLBACK'; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; - define-mem-desc-line = '57'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_fast_i_o_8h_1a688a4adbb87520a2b68681bd6bfb199e'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'SKIP'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x23 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; - define-mem-desc-line = '42'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - }; - typedef = { - typedef-member = { - typedef-mem-kind = 'typedef'; - typedef-mem-id = '_fast_i_o_8h_1a0a595a88b29bcfd1540b6fac75787937'; - typedef-mem-virt = normal; - typedef-mem-prot = public; - typedef-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - typedef-mem-name = 'fio_bit'; - typedef-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; - typedef-mem-desc-line = '60'; - typedef-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - typedef-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* typedef-member */ - typedef-member = { - typedef-mem-kind = 'typedef'; - typedef-mem-id = '_fast_i_o_8h_1ae44ea3af54ef26db03f1ae2ea62f9c1f'; - typedef-mem-virt = normal; - typedef-mem-prot = public; - typedef-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - typedef-mem-name = 'fio_register'; - typedef-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; - typedef-mem-desc-line = '61'; - typedef-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - typedef-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* typedef-member */ - }; - func = { - func-member = { - func-mem-kind = 'function'; - func-mem-id = '_fast_i_o_8h_1a197336e47e1c3f929056ce3abbbc7e8d'; - func-mem-virt = normal; - func-mem-prot = public; - func-mem-type = <<_EnD_oF_dEf_TeXt_ -int -_EnD_oF_dEf_TeXt_; - func-mem-name = 'fio_digitalRead'; - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'pinRegister'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'pinBit'; - }; /* func-mem-param--param */ - func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; - func-mem-desc-line = '158'; - func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - func-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract direct digital read - @discussion without any checks - @discussion falls back to normal digitalRead if fast io is disabled - @param pinRegister[in] Register - ignored if fast io is disabled - @param pinBit[in] Bit - Pin if fast io is disabled - @result Value read from pin -_EnD_oF_dEf_TeXt_; - }; /* func-member */ - func-member = { - func-mem-kind = 'function'; - func-mem-id = '_fast_i_o_8h_1ae91bbe682b02a5842c291055c0e998b5'; - func-mem-virt = normal; - func-mem-prot = public; - func-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - func-mem-name = 'fio_digitalWrite'; - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'pinRegister'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'pinBit'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'value'; - }; /* func-mem-param--param */ - func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; - func-mem-desc-line = '128'; - func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - func-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract direct digital write - @discussion without any checks - @discussion falls back to normal digitalWrite if fast io is disabled - @param pinRegister[in] Register - ignored if fast digital write is disabled - @param pinBit[in] Bit - Pin if fast digital write is disabled - @param value[in] desired output -_EnD_oF_dEf_TeXt_; - }; /* func-member */ - func-member = { - func-mem-kind = 'function'; - func-mem-id = '_fast_i_o_8h_1a07a19dfbdca1afaca5d666bdaa3be7d5'; - func-mem-virt = normal; - func-mem-prot = public; - func-mem-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - func-mem-name = 'fio_pinToBit'; - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'pin'; - }; /* func-mem-param--param */ - func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; - func-mem-desc-line = '115'; - func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - func-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Find the bit which belongs to specified pin - @discussion if fast digitalWrite is disabled this function returns the pin - @param pin[in] Number of a digital pin - @result Bit -_EnD_oF_dEf_TeXt_; - }; /* func-member */ - func-member = { - func-mem-kind = 'function'; - func-mem-id = '_fast_i_o_8h_1afb934fc0ded94cbb5ed8ed14e2a123ed'; - func-mem-virt = normal; - func-mem-prot = public; - func-mem-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - func-mem-name = 'fio_pinToInputRegister'; - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'pin'; - }; /* func-mem-param--param */ - func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; - func-mem-desc-line = '106'; - func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - func-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Get the input register for specified pin. - @discussion if fast digital IO is disabled this function returns NULL - @param pin[in] Number of a digital pin - @result Register -_EnD_oF_dEf_TeXt_; - }; /* func-member */ - func-member = { - func-mem-kind = 'function'; - func-mem-id = '_fast_i_o_8h_1a385ae40d960c1a57e86818332476a802'; - func-mem-virt = normal; - func-mem-prot = public; - func-mem-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - func-mem-name = 'fio_pinToOutputRegister'; - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'pin'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'initial_state'; - func-mem-param-defval = <<_EnD_oF_dEf_TeXt_ -LOW -_EnD_oF_dEf_TeXt_; - }; /* func-mem-param--param */ - func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; - func-mem-desc-line = '97'; - func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - func-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Get the output register for specified pin. - @discussion if fast digital IO is disabled this function returns NULL - @param pin[in] Number of a digital pin - @result Register -_EnD_oF_dEf_TeXt_; - }; /* func-member */ - func-member = { - func-mem-kind = 'function'; - func-mem-id = '_fast_i_o_8h_1a5d8d5977294d614d15bda19f75d6b787'; - func-mem-virt = normal; - func-mem-prot = public; - func-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - func-mem-name = 'fio_shiftOut'; - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'dataRegister'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'dataBit'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'clockRegister'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'clockBit'; - }; /* func-mem-param--param */ - func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; - func-mem-desc-line = '184'; - func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - func-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract faster shift out clear - @discussion using fast digital write - @discussion falls back to normal digitalWrite if fastio is disabled - @param dataRegister[in] Register of data pin - ignored if fast digital write is disabled - @param dataBit[in] Bit of data pin - Pin if fast digital write is disabled - @param clockRegister[in] Register of data pin - ignored if fast digital write is disabled - @param clockBit[in] Bit of data pin - Pin if fast digital write is disabled -_EnD_oF_dEf_TeXt_; - }; /* func-member */ - func-member = { - func-mem-kind = 'function'; - func-mem-id = '_fast_i_o_8h_1a56c72b9f00680662229895ab22aaa743'; - func-mem-virt = normal; - func-mem-prot = public; - func-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - func-mem-name = 'fio_shiftOut'; - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'dataRegister'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'dataBit'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'clockRegister'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'clockBit'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'value'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'bitOrder'; - }; /* func-mem-param--param */ - func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; - func-mem-desc-line = '172'; - func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - func-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract faster shift out - @discussion using fast digital write - @discussion falls back to normal digitalWrite if fastio is disabled - @param dataRegister[in] Register of data pin - ignored if fast digital write is disabled - @param dataBit[in] Bit of data pin - Pin if fast digital write is disabled - @param clockRegister[in] Register of data pin - ignored if fast digital write is disabled - @param clockBit[in] Bit of data pin - Pin if fast digital write is disabled - @param bitOrder[in] bit order -_EnD_oF_dEf_TeXt_; - }; /* func-member */ - func-member = { - func-mem-kind = 'function'; - func-mem-id = '_fast_i_o_8h_1a33ce251dcd6b448185cda415a99001cf'; - func-mem-virt = normal; - func-mem-prot = public; - func-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - func-mem-name = 'fio_shiftOut1'; - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'shift1Register'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'shift1Bit'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'value'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -boolean -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'noLatch'; - func-mem-param-defval = <<_EnD_oF_dEf_TeXt_ -false -_EnD_oF_dEf_TeXt_; - }; /* func-mem-param--param */ - func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; - func-mem-desc-line = '194'; - func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - func-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract one wire shift out - @discussion protocol needs initialisation (fio_shiftOut1_init) - @param shift1Register[in] pins register - @param shift1Bit[in] pins bit - @param value[in] value to shift out, last byte is ignored and always shifted out LOW -_EnD_oF_dEf_TeXt_; - }; /* func-member */ - func-member = { - func-mem-kind = 'function'; - func-mem-id = '_fast_i_o_8h_1af2aac35d9a8ab7a2c87672f2c7cbbafb'; - func-mem-virt = normal; - func-mem-prot = public; - func-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - func-mem-name = 'fio_shiftOut1'; - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'pin'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'value'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -boolean -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'noLatch'; - func-mem-param-defval = <<_EnD_oF_dEf_TeXt_ -false -_EnD_oF_dEf_TeXt_; - }; /* func-mem-param--param */ - func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; - func-mem-desc-line = '202'; - func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - func-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract one wire shift out - @discussion protocol needs initialisation (fio_shiftOut1_init) - @param pin[in] digital pin - @param value[in] value to shift out, last byte is ignored and always shifted out LOW -_EnD_oF_dEf_TeXt_; - }; /* func-member */ - func-member = { - func-mem-kind = 'function'; - func-mem-id = '_fast_i_o_8h_1a2d0e4495eb12504255bbd3f82405b17b'; - func-mem-virt = normal; - func-mem-prot = public; - func-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - func-mem-name = 'fio_shiftOut1_init'; - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'shift1Register'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'shift1Bit'; - }; /* func-mem-param--param */ - func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; - func-mem-desc-line = '210'; - func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - func-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract initializes one wire shift out protocol - @discussion Puts pin to HIGH state and delays until Capacitors are charged. - @param shift1Register[in] pins register - @param shift1Bit[in] pins bit -_EnD_oF_dEf_TeXt_; - }; /* func-member */ - func-member = { - func-mem-kind = 'function'; - func-mem-id = '_fast_i_o_8h_1ae4b2e099f8ade9ee674d1565669e870a'; - func-mem-virt = normal; - func-mem-prot = public; - func-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - func-mem-name = 'fio_shiftOut1_init'; - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'pin'; - }; /* func-mem-param--param */ - func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; - func-mem-desc-line = '217'; - func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - func-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract initializes one wire shift out protocol - @discussion Puts pin to HIGH state and delays until Capacitors are charged. - @param pin[in] digital pin -_EnD_oF_dEf_TeXt_; - }; /* func-member */ - }; - file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; - file-first-line = '1'; - file-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - file-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* file */ -file = { - file-id = '_i2_c_i_o_8cpp'; - file-name = 'I2CIO.cpp'; - file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.cpp'; - file-first-line = '1'; - file-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - file-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* file */ -file = { - file-id = '_i2_c_i_o_8h'; - file-name = 'I2CIO.h'; - define = { - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_i2_c_i_o_8h_1a218dbde2f6fda8c5825e25da10864c71'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = '_I2CIO_VERSION'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -"1.0.0" -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; - define-mem-desc-line = '32'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - }; - file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; - file-first-line = '1'; - file-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - file-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* file */ -file = { - file-id = '_l_c_d_8cpp'; - file-name = 'LCD.cpp'; - file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.cpp'; - file-first-line = '1'; - file-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - file-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* file */ -file = { - file-id = '_l_c_d_8h'; - file-name = 'LCD.h'; - define = { - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1a0f50ae3b4bdb42dd5ad74b2c604a7515'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'BACKLIGHT_OFF'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '155'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @defined - @abstract Backlight off constant declaration - @discussion Used in combination with the setBacklight to swith off the - LCD backlight. @set setBacklight -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1aa5bad1c51f5fac029f3deacfef48c54b'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'BACKLIGHT_ON'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -255 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '163'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @defined - @abstract Backlight on constant declaration - @discussion Used in combination with the setBacklight to swith on the - LCD backlight. @set setBacklight -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1ab0d87e07831e7e4943caef187872123e'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'COMMAND'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '136'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1aad9ae913bdfab20dd94ad04ee2d5b045'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'DATA'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -1 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '137'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1aa1e30e32b6c2cf8d90a9281328472dbe'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'FOUR_BITS'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -2 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '138'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1ad25b138788d83e67f840588754e2df2f'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'HOME_CLEAR_EXEC'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -2000 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '147'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @defined - @abstract Defines the duration of the home and clear commands - @discussion This constant defines the time it takes for the home and clear - commands in the LCD - Time in microseconds. -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1a8c85cf88d8af66a47c42249d81c94641'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_1LINE'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x00 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '129'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1a7987e93538df2819583ba43b81ddbb25'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_2LINE'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x08 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '128'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1ab8c35d355d2372090c7a347e961c9224'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_4BITMODE'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x00 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '127'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1abb3210156d88d3fe18c9352eb161fe42'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_5x10DOTS'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x04 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '130'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1a9ef57e724c1b846dae0f531aff6fb464'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_5x8DOTS'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x00 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '131'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1a59a57ca857dae5d89eb5f2a38c4ac6f0'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_8BITMODE'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x10 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '126'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1a4b28243034cec656b0ed490ba6979752'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_BLINKOFF'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x00 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '115'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1ac3b19d4e6553b9bbf18a23387e439206'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_BLINKON'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x01 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '114'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1acc3509bc0442b41e2b816555de473ed2'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_CLEARDISPLAY'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x01 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '92'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @defined - @abstract All these definitions shouldn't be used unless you are writing - a driver. - @discussion All these definitions are for driver implementation only and - shouldn't be used by applications. -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1ac21f0302ac4136775877d5f4759e4f74'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_CURSORMOVE'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x00 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '120'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1a32b194a3adaa0a0bb69acee2e6a754fa'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_CURSOROFF'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x00 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '113'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1ab67f0adccde68de88eee0513fdfc4574'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_CURSORON'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x02 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '112'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1a61f16a2b7550e4700f7898a7587c5594'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_CURSORSHIFT'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x10 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '96'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1adfb8b2b8b8a08d7313504d7a4f89d99f'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_DISPLAYCONTROL'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x08 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '95'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1ab2f7b67abfac33f610acfd5d7a971f40'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_DISPLAYMOVE'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x08 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '119'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1a257ebe775cac7140cf82aa40d8ce545a'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_DISPLAYOFF'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x00 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '111'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1a76236ae8317b34bbc98ea56bc0a2639c'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_DISPLAYON'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x04 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '110'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1ae7c6309fce6200bd7526d090a4a84dd0'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_ENTRYLEFT'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x02 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '104'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1a5597e1d5819ea2f0734ad4313abf6703'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_ENTRYMODESET'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x04 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '94'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1a43c26ba2e66880fac95ef640b56873ad'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_ENTRYRIGHT'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x00 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '103'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1a049ee97e98d04788c1da9a55590fbe42'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_ENTRYSHIFTDECREMENT'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x00 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '106'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1aa2cf1d0f4a319e53c009cffe1184466c'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_ENTRYSHIFTINCREMENT'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x01 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '105'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1aaef882ae70d1f485cd132815d9716111'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_FUNCTIONSET'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x20 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '97'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1aafb86adb0dfca1e65d65b2cd1946a009'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_MOVELEFT'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x00 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '122'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1acf5999180233790bb2c9902efde58f7f'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_MOVERIGHT'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x04 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '121'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1a154c86a887633d0f6d9988e4dbb1f419'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_RETURNHOME'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x02 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '93'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1aae6ea856879c11dee58493184582a52f'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_SETCGRAMADDR'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x40 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '98'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1a15008b832807a208d9d88c74e6751ebf'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_SETDDRAMADDR'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x80 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '99'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - }; - enum = { - enum-member = { - enum-mem-kind = 'enum'; - enum-mem-id = '_l_c_d_8h_1aeeef728bf4726268aa5e99391a1502bc'; - enum-mem-virt = normal; - enum-mem-prot = public; - enum-mem-name = 't_backlighPol'; - enum-mem-enum = { enum-name = POSITIVE; }; - enum-mem-enum = { enum-name = NEGATIVE; }; - enum-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - enum-mem-desc-line = '171'; - enum-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - enum-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* enum-member */ - }; - func = { - func-member = { - func-mem-kind = 'function'; - func-mem-id = '_l_c_d_8h_1a6eac41e4be58d7736ac0c19de225c0dc'; - func-mem-virt = normal; - func-mem-prot = public; - func-mem-type = <<_EnD_oF_dEf_TeXt_ -static void -_EnD_oF_dEf_TeXt_; - func-mem-name = 'waitUsec'; - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint16_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'uSec'; - }; /* func-mem-param--param */ - func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - func-mem-desc-line = '76'; - func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - func-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @defined - @abstract Enables disables fast waits for write operations for LCD - @discussion If defined, the library will avoid doing un-necessary waits. - this can be done, because the time taken by Arduino's slow digitalWrite - operations. If fast digitalIO operations, comment this line out or undefine - the mode. - - - @function - @abstract waits for a given time in microseconds (compilation dependent). - @discussion Waits for a given time defined in microseconds depending on - the FAST_MODE define. If the FAST_MODE is defined the call will return - inmediatelly. - @param uSec[in] time in microseconds. - @result None -_EnD_oF_dEf_TeXt_; - }; /* func-member */ - }; - file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - file-first-line = '1'; - file-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - file-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* file */ -file = { - file-id = '_liquid_crystal_8cpp'; - file-name = 'LiquidCrystal.cpp'; - define = { - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal_8cpp_1a31e1c14e8c2845dec3301f0ebd36b43c'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_4BIT'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -1 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.cpp'; - define-mem-desc-line = '45'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal_8cpp_1a57d84af8cf61ceee4eb91db77889f071'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_8BIT'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.cpp'; - define-mem-desc-line = '46'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal_8cpp_1a65fa786d6e31fe8b1aa51784a9736581'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_NOBACKLIGHT'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0xFF -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.cpp'; - define-mem-desc-line = '42'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - }; - file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.cpp'; - file-first-line = '1'; - file-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - file-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* file */ -file = { - file-id = '_liquid_crystal_8h'; - file-name = 'LiquidCrystal.h'; - define = { - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal_8h_1adebff0f00a59c9f9863bc196938d5726'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'EXEC_TIME'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -37 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - define-mem-desc-line = '42'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @defined - @abstract Command execution time on the LCD. - @discussion This defines how long a command takes to execute by the LCD. - The time is expressed in micro-seconds. -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - }; - file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - file-first-line = '1'; - file-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - file-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* file */ -file = { - file-id = '_liquid_crystal___i2_c_8cpp'; - file-name = 'LiquidCrystal_I2C.cpp'; - define = { - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___i2_c_8cpp_1a3d9bb178282c3cb69740c94ba1e48fed'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'D4'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp'; - define-mem-desc-line = '88'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @defined - @abstract LCD dataline allocation this library only supports 4 bit LCD control - mode. - @discussion D4, D5, D6, D7 LCD data lines pin mapping of the extender module -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___i2_c_8cpp_1a2ddd4183d444d6d128cbdbd6269e4e0c'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'D5'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -1 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp'; - define-mem-desc-line = '89'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___i2_c_8cpp_1a79a18a7f5ccf7a7ca31f302bd62527a6'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'D6'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -2 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp'; - define-mem-desc-line = '90'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___i2_c_8cpp_1a2ba78f059a7ebebc95e7beef690e88d6'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'D7'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -3 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp'; - define-mem-desc-line = '91'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___i2_c_8cpp_1a22e6626f2c98ed902f8ded47f6438c05'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'EN'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -6 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp'; - define-mem-desc-line = '66'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @defined - @abstract Enable bit of the LCD - @discussion Defines the IO of the expander connected to the LCD Enable -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___i2_c_8cpp_1ac059d24dfe9c1e1f7c07cb7869a1833b'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_BACKLIGHT'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0xFF -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp'; - define-mem-desc-line = '55'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @defined - @abstract LCD_BACKLIGHT - @discussion BACKLIGHT MASK used when backlight is on -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___i2_c_8cpp_1a65fa786d6e31fe8b1aa51784a9736581'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_NOBACKLIGHT'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x00 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp'; - define-mem-desc-line = '48'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @defined - @abstract LCD_NOBACKLIGHT - @discussion NO BACKLIGHT MASK -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___i2_c_8cpp_1af8903d8eea3868940c60af887473b152'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'RS'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -4 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp'; - define-mem-desc-line = '80'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @defined - @abstract Register bit of the LCD - @discussion Defines the IO of the expander connected to the LCD Register select pin -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___i2_c_8cpp_1afc4ded33ac0ca43defcce639e965748a'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'RW'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -5 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp'; - define-mem-desc-line = '73'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @defined - @abstract Read/Write bit of the LCD - @discussion Defines the IO of the expander connected to the LCD Rw pin -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - }; - file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp'; - file-first-line = '1'; - file-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - file-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* file */ -file = { - file-id = '_liquid_crystal___i2_c_8h'; - file-name = 'LiquidCrystal_I2C.h'; - file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - file-first-line = '1'; - file-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - file-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* file */ -file = { - file-id = '_liquid_crystal___i2_c___by_vac_8cpp'; - file-name = 'LiquidCrystal_I2C_ByVac.cpp'; - file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C_ByVac.cpp'; - file-first-line = '1'; - file-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - file-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* file */ -file = { - file-id = '_liquid_crystal___i2_c___by_vac_8h'; - file-name = 'LiquidCrystal_I2C_ByVac.h'; - file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C_ByVac.h'; - file-first-line = '1'; - file-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - file-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* file */ -file = { - file-id = '_liquid_crystal___s_r_8cpp'; - file-name = 'LiquidCrystal_SR.cpp'; - file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.cpp'; - file-first-line = '1'; - file-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - file-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* file */ -file = { - file-id = '_liquid_crystal___s_r_8h'; - file-name = 'LiquidCrystal_SR.h'; - define = { - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___s_r_8h_1a0075b041d82abb47f279dce482e7b087'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'SR_EN_BIT'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x80 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; - define-mem-desc-line = '92'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___s_r_8h_1afdaa2bbb2cc185700864ac8d7a570ced'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'SR_RS_BIT'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x04 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; - define-mem-desc-line = '91'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___s_r_8h_1a40fb1f76bc5f8ca9e6534b47bd6da27c'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'TWO_WIRE'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -204 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; - define-mem-desc-line = '90'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - }; - file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; - file-first-line = '1'; - file-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - file-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* file */ -file = { - file-id = '_liquid_crystal___s_r1_w_8cpp'; - file-name = 'LiquidCrystal_SR1W.cpp'; - file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR1W.cpp'; - file-first-line = '1'; - file-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - file-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* file */ -file = { - file-id = '_liquid_crystal___s_r1_w_8h'; - file-name = 'LiquidCrystal_SR1W.h'; - define = { - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___s_r1_w_8h_1a7582c2cf6ceaeddf740f675c8f731ecf'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'SR1W_ATOMIC_WRITE_HIGH'; - define-mem-param = { - define-mem-def-name = 'reg'; - }; /* define-mem-def--param */ - define-mem-param = { - define-mem-def-name = 'mask'; - }; /* define-mem-def--param */ - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { *reg |= mask; } -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR1W.h'; - define-mem-desc-line = '294'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___s_r1_w_8h_1a895edbf1947d432e4616bc4592de8cfa'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'SR1W_ATOMIC_WRITE_LOW'; - define-mem-param = { - define-mem-def-name = 'reg'; - }; /* define-mem-def--param */ - define-mem-param = { - define-mem-def-name = 'mask'; - }; /* define-mem-def--param */ - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { *reg &= ~mask; } -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR1W.h'; - define-mem-desc-line = '293'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___s_r1_w_8h_1a2bfc90f6a1e21e271196273a8db741af'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'SR1W_BL_MASK'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x20 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR1W.h'; - define-mem-desc-line = '289'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___s_r1_w_8h_1a2ee8ae46c168f471666c4aaddbca1ec0'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'SR1W_D4_MASK'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x10 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR1W.h'; - define-mem-desc-line = '288'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___s_r1_w_8h_1a159fe0dd329cef231ae7d8ad674adad3'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'SR1W_D5_MASK'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x08 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR1W.h'; - define-mem-desc-line = '287'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___s_r1_w_8h_1a5cea156a4ee75a239b094b1c24116140'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'SR1W_D6_MASK'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x04 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR1W.h'; - define-mem-desc-line = '286'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___s_r1_w_8h_1a7accf5938d87cf2edbda80b26e0e6f69'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'SR1W_D7_MASK'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x02 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR1W.h'; - define-mem-desc-line = '285'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___s_r1_w_8h_1a645c2cb325144756182083dad23498e7'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'SR1W_DELAY'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -{ delayMicroseconds(SR1W_DELAY_US); numDelays++; } -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR1W.h'; - define-mem-desc-line = '279'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___s_r1_w_8h_1af142acb4543f9067f60a28d58a49f033'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'SR1W_DELAY_US'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -5 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR1W.h'; - define-mem-desc-line = '278'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___s_r1_w_8h_1a6875204445378ad8d8a8ded846cbcbaa'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'SR1W_EN_MASK'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x80 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR1W.h'; - define-mem-desc-line = '291'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___s_r1_w_8h_1a874628609b122ed01ccd5e39411f86de'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'SR1W_RS_MASK'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x40 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR1W.h'; - define-mem-desc-line = '290'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___s_r1_w_8h_1ae4324c30e18eea1716bd2b0f60027712'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'SR1W_UNUSED_MASK'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x01 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR1W.h'; - define-mem-desc-line = '284'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - }; - enum = { - enum-member = { - enum-mem-kind = 'enum'; - enum-mem-id = '_liquid_crystal___s_r1_w_8h_1a31959259c88db00960459461ba423d99'; - enum-mem-virt = normal; - enum-mem-prot = public; - enum-mem-name = 't_sr1w_circuitType'; - enum-mem-enum = { enum-name = SW_CLEAR; }; - enum-mem-enum = { enum-name = HW_CLEAR; }; - enum-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR1W.h'; - enum-mem-desc-line = '297'; - enum-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - enum-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* enum-member */ - }; - file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR1W.h'; - file-first-line = '1'; - file-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - file-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* file */ -file = { - file-id = '_liquid_crystal___s_r2_w_8cpp'; - file-name = 'LiquidCrystal_SR2W.cpp'; - file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.cpp'; - file-first-line = '1'; - file-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - file-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* file */ -file = { - file-id = '_liquid_crystal___s_r2_w_8h'; - file-name = 'LiquidCrystal_SR2W.h'; - define = { - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___s_r2_w_8h_1a53e3add69865ae57ca872cb41fcae9e3'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'SR2W_BL_MASK'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x02 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; - define-mem-desc-line = '132'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___s_r2_w_8h_1a7cf86f2a173473d01e02b2ac786a8690'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'SR2W_DATA_MASK'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x78 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; - define-mem-desc-line = '134'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___s_r2_w_8h_1a8d17b6abb5bcde6883dbdc86d34be9d8'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'SR2W_EN_MASK'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x80 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; - define-mem-desc-line = '135'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___s_r2_w_8h_1acce98b026d9fdcb2e126705c14af7500'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'SR2W_RS_MASK'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x04 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; - define-mem-desc-line = '133'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - }; - file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; - file-first-line = '1'; - file-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - file-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* file */ -file = { - file-id = '_liquid_crystal___s_r3_w_8cpp'; - file-name = 'LiquidCrystal_SR3W.cpp'; - define = { - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___s_r3_w_8cpp_1a3d9bb178282c3cb69740c94ba1e48fed'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'D4'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp'; - define-mem-desc-line = '126'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @defined - @abstract LCD dataline allocation this library only supports 4 bit LCD control - mode. - @discussion D4, D5, D6, D7 LCD data lines pin mapping of the extender module -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___s_r3_w_8cpp_1a2ddd4183d444d6d128cbdbd6269e4e0c'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'D5'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -1 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp'; - define-mem-desc-line = '127'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___s_r3_w_8cpp_1a79a18a7f5ccf7a7ca31f302bd62527a6'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'D6'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -2 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp'; - define-mem-desc-line = '128'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___s_r3_w_8cpp_1a2ba78f059a7ebebc95e7beef690e88d6'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'D7'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -3 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp'; - define-mem-desc-line = '129'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___s_r3_w_8cpp_1a22e6626f2c98ed902f8ded47f6438c05'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'EN'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -4 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp'; - define-mem-desc-line = '104'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @defined - @abstract Enable bit of the LCD - @discussion Defines the IO of the expander connected to the LCD's Enable -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___s_r3_w_8cpp_1ac059d24dfe9c1e1f7c07cb7869a1833b'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_BACKLIGHT'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0xFF -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp'; - define-mem-desc-line = '93'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @defined - @abstract LCD_BACKLIGHT - @discussion BACKLIGHT MASK used when backlight is on -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___s_r3_w_8cpp_1a65fa786d6e31fe8b1aa51784a9736581'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_NOBACKLIGHT'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x00 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp'; - define-mem-desc-line = '86'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @defined - @abstract LCD_NOBACKLIGHT - @discussion No BACKLIGHT MASK -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___s_r3_w_8cpp_1af8903d8eea3868940c60af887473b152'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'RS'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -6 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp'; - define-mem-desc-line = '118'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @defined - @abstract Register bit of the LCD - @discussion Defines the IO of the expander connected to the LCD's Register select pin -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___s_r3_w_8cpp_1afc4ded33ac0ca43defcce639e965748a'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'RW'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -5 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp'; - define-mem-desc-line = '111'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @defined - @abstract Read/Write bit of the LCD - @discussion Defines the IO of the expander connected to the LCD's Rw pin -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - }; - file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp'; - file-first-line = '1'; - file-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - file-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* file */ -file = { - file-id = '_liquid_crystal___s_r3_w_8h'; - file-name = 'LiquidCrystal_SR3W.h'; - file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - file-first-line = '1'; - file-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - file-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* file */ diff --git a/libraries/LiquidCrystal/examples/HelloWorld_4bit/HelloWorld_4bit.ino b/libraries/LiquidCrystal/examples/HelloWorld_4bit/HelloWorld_4bit.ino deleted file mode 100644 index 72c42cc..0000000 --- a/libraries/LiquidCrystal/examples/HelloWorld_4bit/HelloWorld_4bit.ino +++ /dev/null @@ -1,78 +0,0 @@ -#include -#include - - -#define CONTRAST_PIN 9 -#define BACKLIGHT_PIN 7 -#define CONTRAST 110 -LiquidCrystal lcd(12, 11, 5, 4, 3, 2, BACKLIGHT_PIN, POSITIVE ); - - -// Creat a set of new characters -byte smiley[8] = { - 0b00000, - 0b00000, - 0b01010, - 0b00000, - 0b00000, - 0b10001, - 0b01110, - 0b00000 -}; - -byte armsUp[8] = { - 0b00100, - 0b01010, - 0b00100, - 0b10101, - 0b01110, - 0b00100, - 0b00100, - 0b01010 -}; - -byte frownie[8] = { - 0b00000, - 0b00000, - 0b01010, - 0b00000, - 0b00000, - 0b00000, - 0b01110, - 0b10001 -}; - -void setup() -{ - Serial.begin ( 57600 ); - - // Switch on the backlight and LCD contrast levels - pinMode(CONTRAST_PIN, OUTPUT); - analogWrite ( CONTRAST_PIN, CONTRAST ); - - //lcd.setBacklightPin ( BACKLIGHT_PIN, POSITIVE ); - //lcd.setBacklight ( HIGH ); - lcd.backlight(); - - lcd.begin(16,2); // initialize the lcd - - lcd.createChar (0, smiley); // load character to the LCD - lcd.createChar (1, armsUp); // load character to the LCD - lcd.createChar (2, frownie); // load character to the LCD - - lcd.home (); // go home - lcd.print("Hello, ARDUINO "); - lcd.setCursor ( 0, 1 ); // go to the next line - lcd.print (" FORUM - fm "); -} - -void loop() -{ - // Do a little animation by writing to the same location - lcd.setCursor ( 14, 1 ); - lcd.print (char(2)); - delay (200); - lcd.setCursor ( 14, 1 ); - lcd.print ( char(0)); - delay (200); -} diff --git a/libraries/LiquidCrystal/examples/HelloWorld_SR/HelloWorld_SR.ino b/libraries/LiquidCrystal/examples/HelloWorld_SR/HelloWorld_SR.ino deleted file mode 100644 index 00c8eeb..0000000 --- a/libraries/LiquidCrystal/examples/HelloWorld_SR/HelloWorld_SR.ino +++ /dev/null @@ -1,36 +0,0 @@ -#include -#include - -LiquidCrystal_SR lcd(8,7,TWO_WIRE); -// | | -// | \-- Clock Pin -// \---- Data/Enable Pin - -// Creat a set of new characters -byte armsUp[8] = {0b00100,0b01010,0b00100,0b10101,0b01110,0b00100,0b00100,0b01010}; -byte armsDown[8] = {0b00100,0b01010,0b00100,0b00100,0b01110,0b10101,0b00100,0b01010}; - -void setup(){ - - lcd.begin(16,2); // initialize the lcd - - lcd.createChar (0, armsUp); // load character to the LCD - lcd.createChar (1, armsDown); // load character to the LCD - - lcd.home (); // go home - lcd.print("LiquidCrystal_SR"); -} - -void loop(){ - // Do a little animation - for(int i = 0; i <= 15; i++) showHappyGuy(i); - for(int i = 15; i >= 0; i--) showHappyGuy(i); -} - -void showHappyGuy(int pos){ - lcd.setCursor ( pos, 1 ); // go to position - lcd.print(char(random(0,2))); // show one of the two custom characters - delay(150); // wait so it can be seen - lcd.setCursor ( pos, 1 ); // go to position again - lcd.print(" "); // delete character -} \ No newline at end of file diff --git a/libraries/LiquidCrystal/examples/HelloWorld_byVac/HelloWorld_byVac.ino b/libraries/LiquidCrystal/examples/HelloWorld_byVac/HelloWorld_byVac.ino deleted file mode 100644 index 4133544..0000000 --- a/libraries/LiquidCrystal/examples/HelloWorld_byVac/HelloWorld_byVac.ino +++ /dev/null @@ -1,72 +0,0 @@ -//#include -//LiquidCrystal lcd(4, 7, 8, 9, 10, 11, 12); - -#include -//#include -//LiquidCrystal_I2C_ByVac lcd(0x21); - -//#include -//LiquidCrystal_I2C lcd_1(0x27,2,1,0,4,5,6,7,backlight_pin,POSITIVE); // DF Robots - -//#include -//LiquidCrystal_SR lcd(14,15,4); - -#include -//LiquidCrystal lcd(4, 7, 8, 9, 10, 11, 12); -LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // LCD Shield - -uint8_t bell[8] = {0x4,0xe,0xe,0xe,0x1f,0x0,0x4}; -uint8_t note[8] = {0x2,0x3,0x2,0xe,0x1e,0xc,0x0}; -uint8_t clock[8] = {0x0,0xe,0x15,0x17,0x11,0xe,0x0}; -uint8_t heart[8] = {0x0,0xa,0x1f,0x1f,0xe,0x4,0x0}; -uint8_t duck[8] = {0x0,0xc,0x1d,0xf,0xf,0x6,0x0}; -uint8_t check[8] = {0x0,0x1,0x3,0x16,0x1c,0x8,0x0}; -uint8_t cross[8] = {0x0,0x1b,0xe,0x4,0xe,0x1b,0x0}; -uint8_t retarrow[8] = { 0x1,0x1,0x5,0x9,0x1f,0x8,0x4}; - - -const byte backLightpin = 5; -//const byte backLightpin = 10; -const byte contrast_pin = 6; - -void setup () { - //lcd.begin(16,2); - lcd.begin(20,4); - lcd.clear(); - // lcd.backlight(); - // lcd.setBacklightPin(3); - // lcd.setBacklight(1); - pinMode(backLightpin, OUTPUT); - analogWrite(backLightpin, 210); - pinMode(contrast_pin, OUTPUT); - analogWrite(contrast_pin, 40); - lcd.createChar(0, bell); - lcd.createChar(1, note); - lcd.createChar(2, clock); - lcd.createChar(3, heart); - lcd.createChar(4, duck); - lcd.createChar(5, check); - lcd.createChar(6, cross); - lcd.createChar(7, retarrow); - } - -// display all keycodes -void displayKeyCodes(void) { - uint8_t i = 0; - while (1) { - lcd.clear(); - lcd.print("Codes 0x"); lcd.print(i, HEX); - lcd.print("-0x"); lcd.print(i+16, HEX); - lcd.setCursor(0, 1); - for (int j=0; j<16; j++) { - lcd.write(i+j); - } - i+=16; - - delay(10000); - }} - - -void loop () { - displayKeyCodes(); -} diff --git a/libraries/LiquidCrystal/examples/HelloWorld_i2c/HelloWorld_i2c.ino b/libraries/LiquidCrystal/examples/HelloWorld_i2c/HelloWorld_i2c.ino deleted file mode 100644 index d0fd78c..0000000 --- a/libraries/LiquidCrystal/examples/HelloWorld_i2c/HelloWorld_i2c.ino +++ /dev/null @@ -1,61 +0,0 @@ -#include -#include - - - -#define BACKLIGHT_PIN 13 - -LiquidCrystal_I2C lcd(0x38); // Set the LCD I2C address - -//LiquidCrystal_I2C lcd(0x38, BACKLIGHT_PIN, POSITIVE); // Set the LCD I2C address - - -// Creat a set of new characters -const uint8_t charBitmap[][8] = { - { 0xc, 0x12, 0x12, 0xc, 0, 0, 0, 0 }, - { 0x6, 0x9, 0x9, 0x6, 0, 0, 0, 0 }, - { 0x0, 0x6, 0x9, 0x9, 0x6, 0, 0, 0x0 }, - { 0x0, 0xc, 0x12, 0x12, 0xc, 0, 0, 0x0 }, - { 0x0, 0x0, 0xc, 0x12, 0x12, 0xc, 0, 0x0 }, - { 0x0, 0x0, 0x6, 0x9, 0x9, 0x6, 0, 0x0 }, - { 0x0, 0x0, 0x0, 0x6, 0x9, 0x9, 0x6, 0x0 }, - { 0x0, 0x0, 0x0, 0xc, 0x12, 0x12, 0xc, 0x0 } - -}; - -void setup() -{ - int charBitmapSize = (sizeof(charBitmap ) / sizeof (charBitmap[0])); - - // Switch on the backlight - pinMode ( BACKLIGHT_PIN, OUTPUT ); - digitalWrite ( BACKLIGHT_PIN, HIGH ); - - lcd.begin(16,2); // initialize the lcd - - for ( int i = 0; i < charBitmapSize; i++ ) - { - lcd.createChar ( i, (uint8_t *)charBitmap[i] ); - } - - lcd.home (); // go home - lcd.print("Hello, ARDUINO "); - lcd.setCursor ( 0, 1 ); // go to the next line - lcd.print (" FORUM - fm "); - delay ( 1000 ); -} - -void loop() -{ - lcd.home (); - // Do a little animation by writing to the same location - for ( int i = 0; i < 2; i++ ) - { - for ( int j = 0; j < 16; j++ ) - { - lcd.print (char(random(7))); - } - lcd.setCursor ( 0, 1 ); - } - delay (200); -} diff --git a/libraries/LiquidCrystal/examples/LCDiSpeed/LCDiSpeed.ino b/libraries/LiquidCrystal/examples/LCDiSpeed/LCDiSpeed.ino deleted file mode 100644 index 4edcddc..0000000 --- a/libraries/LiquidCrystal/examples/LCDiSpeed/LCDiSpeed.ino +++ /dev/null @@ -1,274 +0,0 @@ -static char dummyvar; // dummy declaration for STUPID IDE!!!! -/*---------------------------------------------------------------------------- - * vi:ts=4 - * - * LCDiSpeed - LCD Interface Speed - * - * Created by Bill Perry 2012-03-16 - * Copyright 2012 - Under creative commons license 3.0: - * Attribution-NonCommercial-ShareAlike 3.0 Unported (CC BY-NC-SA 3.0) - * license page: http://creativecommons.org/licenses/by-nc-sa/3.0/ - * - * Sketch to measure and report the speed of the interface to the LCD and - * speed of updating the LCD. - * - * It runs a Frames/Sec (FPS) test which writes a "frame" of each digit 0-9 to - * the display. - * A "frame" is a full display of characters. - * It is created by positioning the cursor to the begining of each row - * and then writing a character to every position on the row, until the - * entire display is filled. - * The FPS test does a frame of 9's then 8's, .... down to 0's - * On fast interfaces it will not normally be seen. - * - * The sketch will then calculate & report transfer speeds and - * LCD update rates to the LCD display. - * - * Reported Information: - * - Single byte transfer speed (ByteXfer) - * This is the time it takes for a single character to be sent from - * the sketch to the LCD display. - * - * - Frame/Sec (FPS) - * This is the number of times the full display can be updated - * in one second. - * - * - Frame Time (Ftime) - * This is the amount of time it takes to update the full LCD display. - * - * - * The sketch will also report "independent" FPS and Ftime values. - * These are timing values that are independent of the size of the LCD under test. - * Currently they represent the timing for a 16x2 LCD - * The value of always having numbers for a 16x2 display - * is that these numbers can be compared to each other since they are - * independent of the size of the actual LCD display that is running the test. - * - * All times & rates are measured and calculeted from what a sketch "sees" - * using the LiquidCrystal API. - * It includes any/all s/w overhead including the time to go through the - * Arduino Print class and LCD library. - * The actual low level hardware times are obviously lower. - * - * History - * 2012.03.15 bperrybap - Original creation - * - * @author Bill Perry - bperrybap@opensource.billsworld.billandterrie.com - *---------------------------------------------------------------------------- - -/* - * Define your LCD size - */ -#define LCD_COLS 16 -#define LCD_ROWS 2 - -/* - * Pick your interface. - */ - -//#define LCDIF_4BIT -//#define LCDIF_I2C -//#define LCDIF_SR2W -//#define LCDIF_SR_2W // SR in 2 wire mode -//#define LCDIF_SR_3W // SR in 3 wire mode -#define LCDIF_SR3W -//#define LCDIF_SR1W - - -/* - * Options - */ - -#define FPS_iter 1 // number of iterations to repeat each "frame" within the test - // (current frame test is 10 full display frames, 1 for each digits 0-9) - // FPS_iter like 100 will allow the frames to be seen - // Note: the only reason other than visual to make this larger than 1 - // might be to compensate for Async serial buffering should a serial interface be tested - // even with 1 iteration, 340 bytes are written for a 16x2 display - // bytes written = FPS_iter * ((LCD_ROWS * LCD_COLS) + LCD_ROWS) * 10 - -#define iLCD // turn on code to calculate speed of "independent" sized display -#define iLCD_ROWS 2 // independent FPS row size -#define iLCD_COLS 16 // independent FPS col size - - -#define DELAY_TIME 3500 // delay time to see information on lcd - -#if defined(LCDIF_4BIT) - -// Include the Liquid Crystal library code: -#include - -// initialize the library with the numbers of the interface pins -// lcd(RS, E, d4, d5, d6, d7, bl, polarity) -#ifdef BACKLIGHT_ON -LiquidCrystal lcd( 8, 9, 4, 5, 6, 7, 10, POSITIVE); // new constructor with backlight support -#else -LiquidCrystal lcd( 8, 9, 4, 5, 6, 7); // old style constructor w/o backlight (to test old library) -#endif - -#elif defined(LCDIF_I2C) -#include -#include - -LiquidCrystal_I2C lcd(0x38); // Set the LCD I2C address - - -#elif defined(LCDIF_SR3W) -#include - // d,clk,strb, en,rw,rs,d4,d5,d6,d7,bl,blpol -//LiquidCrystal_SR3W lcd (2, 3, 4, 6, 7, 1, 2, 3, 4, 5, 0, POSITIVE); -LiquidCrystal_SR3W lcd(3, 2, 4); - -#elif defined(LCDIF_SR2W) - -#include - // d, clk, (blPolarity optional, defaults to POSITIVE) -LiquidCrystal_SR2W lcd (2, 3); - -#elif defined(LCDIF_SR1W) - -#include -LiquidCrystal_SR1W lcd (2); - -#elif defined(LCDIF_SR_2W) - -#include - // d, clk -LiquidCrystal_SR lcd (2, 3); - -#elif defined(LCDIF_SR_3W) - -#include - // d,clk,strb -LiquidCrystal_SR lcd (2, 3, 4); - -#endif - -void setup() -{ - // set up the LCD's number of columns and rows: - lcd.begin(LCD_COLS, LCD_ROWS); - -#ifdef BACKLIGHT_ON - lcd.backlight(); // make sure backlight is on with new library -#endif -} - -void loop() -{ -unsigned long etime; -char buf[8]; - - lcd.clear(); - - - /* - * Time an FPS test - */ - - etime = timeFPS(FPS_iter, LCD_COLS, LCD_ROWS); - - /* - * show the average single byte xfer time during the FPS test - */ - showByteXfer(etime); - - /* - * show FPS rate and Frame update time for this display - */ - - sprintf(buf, "%dx%d", LCD_COLS, LCD_ROWS); - showFPS(etime, buf); - -#ifdef iLCD - /* - * calculate Independent FPS and Frame update time - * (rate & time for a "standard" display - default of 16x2) - * This is simply a matter of scaling the time based on the - * ratio of the display sizes. - */ - - etime = etime *iLCD_ROWS * iLCD_COLS / LCD_ROWS / LCD_COLS; - - /* - * show independent FPS rate & Frame update time - */ - sprintf(buf, "%dx%d", iLCD_COLS, iLCD_ROWS); - showFPS(etime, buf); -#endif - -} - -unsigned long timeFPS(uint8_t iter, uint8_t cols, uint8_t rows) -{ -char c; -unsigned long stime, etime; - - stime = micros(); - for(c = '9'; c >= '0'; c--) // do not change this unless you change the FPS/ByteXfer calcuations as well - { - for(uint8_t i = 0; i < iter; i++) - { - for(uint8_t row = 0; row < rows; row++) - { - lcd.setCursor(0, row); - for(uint8_t col = 0; col< cols;col++) - { - lcd.write(c); - } - } - } - } - etime = micros(); - return((etime-stime)); -} -void showFPS(unsigned long etime, const char *type) -{ -float fps; - - - /* - * calculate Frame update time and FPS rate - * The 10.0 is for the 10 frames done per iteration - * one for each digit 0-9 - */ - - fps = (10.0 * FPS_iter) * 1000000.0/(etime); - - - lcd.clear(); - lcd.print(type); - lcd.print("FPS: "); - lcd.print(fps); - - if(LCD_ROWS > 1) - { - lcd.setCursor(0,1); - } - else - { - delay(DELAY_TIME); - lcd.clear(); - } - lcd.print("Ftime: "); - lcd.print((etime)/10.0/FPS_iter/1000); - lcd.print("ms"); - - delay(DELAY_TIME); -} -void showByteXfer(unsigned long etime) -{ - lcd.clear(); - lcd.print("ByteXfer: "); - /* - * Calculate average byte xfer time from time of FPS test - * This takes into consideration the set cursor position commands which - * are single byte commands and take the same amount of time as a data byte write. - * The final result is rounded up to an integer. - */ - lcd.print((int) (etime / (FPS_iter * (10.0 * (LCD_COLS * LCD_ROWS + LCD_ROWS)))+0.5)); - lcd.print("uS"); - - delay(DELAY_TIME); -} diff --git a/libraries/LiquidCrystal/examples/LCDiSpeed/LCDiSpeed.txt b/libraries/LiquidCrystal/examples/LCDiSpeed/LCDiSpeed.txt deleted file mode 100644 index b59d013..0000000 --- a/libraries/LiquidCrystal/examples/LCDiSpeed/LCDiSpeed.txt +++ /dev/null @@ -1,20 +0,0 @@ -16Mhz AVR -Interface ByteXfer 16x2FPS Ftime ----------------------------------------------- -4BIT 338uS 86.92 11.51ms (orignal Liquid Crystal) -4BIT 98uS 298.58 3.35ms -SR2W 76uS 388.62 2.57ms -SR_2W 72uS 406.90 2.46ms -SR_3W 61uS 480.03 2.08ms -SR3W 102uS 287.92 3.47ms - - -80Mhz Pic32 (ChipKit Uno32) -Interface ByteXfer 16x2FPS Ftime ----------------------------------------------- -4BIT 232uS 126.73 7.89ms (orignal mpide Liquid Crystal) -4BIT 57uS 517.41 1.93ms -SR2W 53uS 557.35 1.79ms -SR_2W 53uS 554.66 1.80ms -SR_3W 50uS 591.40 1.69ms -SR3W 56uS 524.91 1.91ms diff --git a/libraries/LiquidCrystal/examples/SerialDisplay/SerialDisplay.ino b/libraries/LiquidCrystal/examples/SerialDisplay/SerialDisplay.ino deleted file mode 100644 index ce21e1c..0000000 --- a/libraries/LiquidCrystal/examples/SerialDisplay/SerialDisplay.ino +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Displays text sent over the serial port (e.g. from the Serial Monitor) on - * an attached LCD. - */ -#include -#include - -#define BACKLIGHT_PIN 13 - -LiquidCrystal_I2C lcd(0x38); // set the LCD address to 0x38 - -void setup() -{ - pinMode ( BACKLIGHT_PIN, OUTPUT ); - lcd.begin (16,2); - digitalWrite ( BACKLIGHT_PIN, HIGH ); - - Serial.begin(57600); -} - -void loop() -{ - // when characters arrive over the serial port... - if (Serial.available()) - { - // wait a bit for the entire message to arrive - delay(100); - // clear the screen - lcd.clear(); - // read all the available characters - while (Serial.available() > 0) - { - // display each character to the LCD - lcd.write(Serial.read()); - } - } -} diff --git a/libraries/LiquidCrystal/examples/i2cLCDextraIO/i2cLCDextraIO.ino b/libraries/LiquidCrystal/examples/i2cLCDextraIO/i2cLCDextraIO.ino deleted file mode 100644 index 5eaad1f..0000000 --- a/libraries/LiquidCrystal/examples/i2cLCDextraIO/i2cLCDextraIO.ino +++ /dev/null @@ -1,246 +0,0 @@ -// --------------------------------------------------------------------------- -// Created by Francisco Malpartida on 1/1/12. -// Copyright 2011 - Under creative commons license: -// Attribution-NonCommercial-ShareAlike CC BY-NC-SA -// -// This software is furnished "as is", without technical support, and with no -// warranty, express or implied, as to its usefulness for any purpose. -// -// Thread Safe: No -// Extendable: Yes -// -// @file i2CLCDextraIO.pde -// Temperature logging to demonstrate the I2CLCDextraIO library. -// -// @brief This application is a demostration file for the I2CLCDextraIO library -// that reads a temperature from the internal ATMEGA328p temperature sensor -// and displays it on the LCD. The application also demonstrates some of the -// methods of the library, such as loading custom characters to the LCD, -// moving around the LCD, and writing to it. -// -// @author F. Malpartida -// --------------------------------------------------------------------------- -#include -#include - -#define _LCD_I2C_ - -#ifdef _LCD_I2C_ -#include -#endif - -#ifdef _LCD_4BIT_ -#include -#endif - - -/*! - @defined CHAR_WIDTH - @abstract Character witdth of the display, expressed in pixeles per character. -*/ -#define CHAR_WIDTH 5 - -/*! - @defined BACKLIGHT_PIN - @abstract LCD backlight pin definition. - @discussion AVR pin used for the backlight illumintation of the LCD. -*/ -#define BACKLIGHT_PIN 7 - -/*! - @defined TEMP_CAL_OFFSET - @abstract Temperature calibration offset. - @discussion This is the offset value that has to be modified to get a - correct temperature reading from the internal temperature sensor - of your AVR. -*/ -#define TEMP_CAL_OFFSET 334 - -/*! - @defined FILTER_ALP - @abstract Low pass filter alpha value - @discussion This value defines how much does the current reading, influences - the over all value. The smaller, the less influence the current - reading has over the overall result. -*/ -#define FILTER_ALP 0.1 - -extern unsigned int __bss_end; -extern unsigned int __heap_start; -extern void *__brkval; - -#ifdef _LCD_I2C_ -LiquidCrystal_I2C lcd(0x38); // set the LCD address to 0x20 for a 16 chars and 2 line display -#endif - -#ifdef _LCD_4BIT_ -LiquidCrystal lcd(12, 11, 5, 4, 3, 2, BACKLIGHT_PIN, POSITIVE); -#endif -const int CONTRAST_PIN = 9; -const int CONTRAST = 65; - - - -LCD *myLCD = &lcd; - -static double tempFilter; - - -/*! - @const charBitmap - @abstract Define Character bitmap for the bargraph. - @discussion Defines a character bitmap to represent a bargraph on a text - display. The bitmap goes from a blank character to full black. -*/ -const uint8_t charBitmap[][8] = { - { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }, - { 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0 }, - { 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0 }, - { 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x0 }, - { 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x0 }, - { 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x0 }, - { 0xe, 0x11, 0x11, 0x11, 0xe, 0, 0, 0 }, - { 0x6, 0x9, 0x9, 0x6, 0x0, 0, 0, 0} -}; - -/*! - @function - @abstract Return available RAM memory - @discussion This routine returns the ammount of RAM memory available after - initialising the C runtime. - @param - @result Free RAM available. -*/ - -static int freeMemory() -{ - int free_memory; - - if((int)__brkval == 0) - free_memory = ((int)&free_memory) - ((int)&__bss_end); - else - free_memory = ((int)&free_memory) - ((int)__brkval); - - return free_memory; -} - -/*! - @function - @abstract Returns AVR328p internal temperature - @discussion Configures the ADC MUX for the temperature ADC channel and - waits for conversion and returns the value of the ADC module - @result The internal temperature reading - in degrees C -*/ - -static int readTemperature() -{ - ADMUX = 0xC8; // activate interal temperature sensor, - // using 1.1V ref. voltage - ADCSRA |= _BV(ADSC); // start the conversion - while (bit_is_set(ADCSRA, ADSC)); // ADSC is cleared when the conversion - // finishes - - // combine bytes & correct for temperature offset (approximate) - return ( (ADCL | (ADCH << 8)) - TEMP_CAL_OFFSET); -} - -/*! - @function - @abstract Braws a bargraph onto the display representing the value passed. - @discussion Draws a bargraph on the specified row using barLength characters. - @param value[in] Value to represent in the bargraph - @param row[in] Row of the LCD where to display the bargraph. Range (0, 1) - for this display. - @param barlength[in] Length of the bar, expressed in display characters. - @param start[in] Start bar character - @param end [in] End bar character - - @result None -*/ -static void drawBars ( int value, uint8_t row, uint8_t barLength, char start, - char end ) -{ - int numBars; - - // Set initial titles on the display - myLCD->setCursor (0, row); - myLCD->print (start); - - // Calculate the size of the bar - value = map ( value, -30, 50, 0, ( barLength ) * CHAR_WIDTH ); - numBars = value / CHAR_WIDTH; - - // Limit the size of the bargraph to barLength - if ( numBars > barLength ) - { - numBars = barLength; - } - myLCD->setCursor ( 1, row ); - - // Draw the bars - while ( numBars-- ) - { - myLCD->print ( char( 5 ) ); - } - - // Draw the fractions - numBars = value % CHAR_WIDTH; - myLCD->print ( char(numBars) ); - myLCD->setCursor (barLength + 1, row); - myLCD->print (end); - -} - -void setup () -{ - int i; - int charBitmapSize = (sizeof(charBitmap ) / sizeof (charBitmap[0])); - - Serial.begin ( 57600 ); - analogReference ( INTERNAL ); - -#ifdef _LCD_4BIT_ - pinMode(CONTRAST_PIN, OUTPUT); - lcd.backlight(); - digitalWrite(BACKLIGHT_PIN, HIGH); - analogWrite (CONTRAST_PIN, CONTRAST); -#else - pinMode ( BACKLIGHT_PIN, OUTPUT ); - digitalWrite(BACKLIGHT_PIN, HIGH); -#endif - - myLCD->begin ( 16, 2 ); - - // Load custom character set into CGRAM - for ( i = 0; i < charBitmapSize; i++ ) - { - myLCD->createChar ( i, (uint8_t *)charBitmap[i] ); - } - Serial.println ( freeMemory () ); - - myLCD->clear (); - myLCD->print ("Temp:"); - - tempFilter = readTemperature (); // Initialise the temperature Filter - -} - - -void loop () -{ - int temp; - - temp = readTemperature(); - tempFilter = ( FILTER_ALP * temp) + (( 1.0 - FILTER_ALP ) * tempFilter); - - myLCD->setCursor ( 8, 0 ); - myLCD->print (" "); - myLCD->setCursor ( 8, 0 ); - myLCD->print ( tempFilter, 1 ); - myLCD->setCursor ( 12, 0 ); - myLCD->print ( "\x07" ); - myLCD->print ("C"); - drawBars ( tempFilter, 1, 14, '-', '+' ); - - delay (200); -} diff --git a/libraries/LiquidCrystal/examples/i2cLCDextraIO_tempLeonardo/i2cLCDextraIO_tempLeonardo.ino b/libraries/LiquidCrystal/examples/i2cLCDextraIO_tempLeonardo/i2cLCDextraIO_tempLeonardo.ino deleted file mode 100644 index f981507..0000000 --- a/libraries/LiquidCrystal/examples/i2cLCDextraIO_tempLeonardo/i2cLCDextraIO_tempLeonardo.ino +++ /dev/null @@ -1,332 +0,0 @@ -// --------------------------------------------------------------------------- -// Created by Francisco Malpartida on 1/1/12. -// Copyright 2011 - Under creative commons license: -// Attribution-NonCommercial-ShareAlike CC BY-NC-SA -// -// This software is furnished "as is", without technical support, and with no -// warranty, express or implied, as to its usefulness for any purpose. -// -// Thread Safe: No -// Extendable: Yes -// -// @file i2CLCDextraIO_tempLeonardo.ino -// Temperature logging to demonstrate the I2CLCDextraIO library. -// -// @brief This application is a demostration file for the I2CLCDextraIO library -// that reads a temperature from the internal ATMEGA32U4 temperature sensor -// and displays it on the LCD. The application also demonstrates some of the -// methods of the library, such as loading custom characters to the LCD, -// moving around the LCD, and writing to it. -// -// @author F. Malpartida -// --------------------------------------------------------------------------- -#include -#include -#include - -#define _LCD_SR3W_ - -#ifdef _LCD_I2C_ -#include -#endif - -#ifdef _LCD_4BIT_ -#include -#endif - - -#ifdef _LCD_SR_ -#include -#endif - -#ifdef _LCD_SR3W_ -#include -#endif - - -/*! - @defined CHAR_WIDTH - @abstract Character witdth of the display, expressed in pixeles per character. -*/ -#define CHAR_WIDTH 5 - -/*! - @defined BACKLIGHT_PIN - @abstract LCD backlight pin definition. - @discussion AVR pin used for the backlight illumintation of the LCD. -*/ -#define BACKLIGHT_PIN 12 - -/*! - @defined STATUS_PIN - @abstract Status LED indicator. - @discussion Activity LED blinking indicating that the system is up. -*/ -#define STATUS_PIN 13 - -/*! - @defined LOOP_DELAY - @abstract Main loop delay. - @discussion Main loop delay executing temperature readings and LCD updates. -*/ -#define LOOP_DELAY 300 - -/*! - @defined TEMP_CAL_OFFSET - @abstract Temperature calibration offset. - @discussion This is the offset value that has to be modified to get a - correct temperature reading from the internal temperature sensor - of your AVR. -*/ -#define TEMP_CAL_OFFSET 282 - -/*! - @defined FILTER_ALP - @abstract Low pass filter alpha value - @discussion This value defines how much does the current reading, influences - the over all value. The smaller, the less influence the current - reading has over the overall result. -*/ -#define FILTER_ALP 0.1 - -/*! - @defined MIN_TEMP - @abstract Minimum temperature range for bargraph - -*/ -#define MIN_TEMP -10 - -/*! - @defined MAX_TEMP - @abstract Maximum temperature range for bargraph - -*/ -#define MAX_TEMP 50 - -extern unsigned int __bss_end; -extern unsigned int __heap_start; -extern void *__brkval; - - -// Initialise LCD module -// ----------------------------------------------------------------------------- -#ifdef _LCD_I2C_ -LiquidCrystal_I2C lcd(0x38); -#endif - -#ifdef _LCD_4BIT_ -LiquidCrystal lcd(12, 11, 5, 4, 3, 2, BACKLIGHT_PIN, POSITIVE); -const int CONTRAST_PIN = 9; -const int CONTRAST = 65; -#endif - -#ifdef _LCD_SR_ -LiquidCrystal_SR lcd(3,2,TWO_WIRE); -// | | -// | \-- Clock Pin -// \---- Data/Enable Pin -#endif - -#ifdef _LCD_SR3W_ -LiquidCrystal_SR3W lcd(3, 2, 4); -// | | -// | \-- Clock Pin -// \---- Data/Enable Pin -#endif - - -// LCD reference variable -LCD *myLCD = &lcd; - -// Temperature filter variable -static double tempFilter; - -/*! - @const charBitmap - @abstract Define Character bitmap for the bargraph. - @discussion Defines a character bitmap to represent a bargraph on a text - display. The bitmap goes from a blank character to full black. -*/ -const uint8_t charBitmap[][8] = { - { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }, - { 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0 }, - { 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0 }, - { 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x0 }, - { 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x0 }, - { 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x0 }, - { 0xe, 0x11, 0x11, 0x11, 0xe, 0, 0, 0 }, - { 0x6, 0x9, 0x9, 0x6, 0x0, 0, 0, 0} -}; - -/*! - @function - @abstract Return available RAM memory - @discussion This routine returns the ammount of RAM memory available after - initialising the C runtime. - @param - @result Free RAM available. -*/ -static int freeMemory() -{ - int free_memory; - - if((int)__brkval == 0) - free_memory = ((int)&free_memory) - ((int)&__bss_end); - else - free_memory = ((int)&free_memory) - ((int)__brkval); - - return free_memory; -} - -/*! - @function - @abstract Returns AVR328p internal temperature - @discussion Configures the ADC MUX for the temperature ADC channel and - waits for conversion and returns the value of the ADC module - @result The internal temperature reading - in degrees C -*/ - -static int readTemperature() -{ - ADMUX = 0xC7; // activate interal temperature sensor, - // using 2.56V ref. voltage - ADCSRB |= _BV(MUX5); - - ADCSRA |= _BV(ADSC); // start the conversion - while (bit_is_set(ADCSRA, ADSC)); // ADSC is cleared when the conversion - // finishes - - // combine bytes & correct for temperature offset (approximate) - return ( (ADCL | (ADCH << 8)) - TEMP_CAL_OFFSET); -} - -/*! - @function - @abstract Braws a bargraph onto the display representing the value passed. - @discussion Draws a bargraph on the specified row using barLength characters. - @param value[in] Value to represent in the bargraph - @param row[in] Row of the LCD where to display the bargraph. Range (0, 1) - for this display. - @param barlength[in] Length of the bar, expressed in display characters. - @param start[in] Start bar character - @param end [in] End bar character - - @result None -*/ -static void drawBars ( int value, uint8_t row, uint8_t barLength, char start, - char end ) -{ - int numBars; - - // Set initial titles on the display - myLCD->setCursor (0, row); - myLCD->print (start); - - // Calculate the size of the bar - value = map ( value, MIN_TEMP, MAX_TEMP, 0, ( barLength ) * CHAR_WIDTH ); - numBars = value / CHAR_WIDTH; - - // Limit the size of the bargraph to barLength - if ( numBars > barLength ) - { - numBars = barLength; - } - myLCD->setCursor ( 1, row ); - - // Draw the bars - while ( numBars-- ) - { - myLCD->print ( char( 5 ) ); - } - - // Draw the fractions - numBars = value % CHAR_WIDTH; - myLCD->print ( char(numBars) ); - myLCD->setCursor (barLength + 1, row); - myLCD->print (end); - -} - -/*! - @function - @abstract Initialise the HW - @discussion Initialise the HW used within this application: UART, LCD & IOs - @param - @result -*/ - -static void initHW ( void ) -{ - int i; - int charBitmapSize = (sizeof(charBitmap ) / sizeof (charBitmap[0])); - - Serial.begin ( 57600 ); - - // Hardware initialise - // ------------------------------------ - - //ADCSRA |= (1 << ADEN); // Initialise ADC block (no need done by env) - - // Initialise LCD HW: backlight and LCD - // ------------------------------------- -#ifdef _LCD_4BIT_ - pinMode(CONTRAST_PIN, OUTPUT); - analogWrite (CONTRAST_PIN, CONTRAST); -#endif - -#ifdef _LCD_I2C_ - pinMode ( BACKLIGHT_PIN, OUTPUT ); - digitalWrite (BACKLIGHT_PIN, HIGH); -#endif - pinMode ( STATUS_PIN, OUTPUT ); - - myLCD->begin ( 20, 2 ); - // Load custom character set into CGRAM - // -------------------------------------------------------------------- - for ( i = 0; i < charBitmapSize; i++ ) - { - myLCD->createChar ( i, (uint8_t *)charBitmap[i] ); - } -} - -void setup () -{ - initHW(); - - Serial.println ( freeMemory () ); - myLCD->clear (); - myLCD->print ( F("Free Mem: ")); - myLCD->print ( freeMemory () ); - delay ( 2000 ); - myLCD->clear (); - myLCD->print (F("Temp:")); - myLCD->setCursor ( 8, 0 ); - - tempFilter = 0; - myLCD->print ( readTemperature() ); -} - - -void loop () -{ - int temp; - static byte status = 1; - - status ^= 1; - digitalWrite ( STATUS_PIN, status); - - temp = readTemperature(); - tempFilter = ( FILTER_ALP * temp) + (( 1.0 - FILTER_ALP ) * tempFilter); - - // Display the information to the LCD - myLCD->setCursor ( 8, 0 ); - myLCD->print (" "); - myLCD->setCursor ( 8, 0 ); - myLCD->print ( tempFilter, 1 ); - myLCD->setCursor ( 12, 0 ); - myLCD->print ( "\x07" ); - myLCD->print ("C"); - drawBars ( tempFilter, 1, 14, '-', '+' ); - - delay (LOOP_DELAY); -} \ No newline at end of file diff --git a/libraries/LiquidCrystal/examples/performanceLCD/performanceLCD.ino b/libraries/LiquidCrystal/examples/performanceLCD/performanceLCD.ino deleted file mode 100644 index dea6c50..0000000 --- a/libraries/LiquidCrystal/examples/performanceLCD/performanceLCD.ino +++ /dev/null @@ -1,480 +0,0 @@ -// Created by Francisco Malpartida on 20/08/11. -// Copyright 2011 - Under creative commons license 3.0: -// Attribution-ShareAlike CC BY-SA -// -// This software is furnished "as is", without technical support, and with no -// warranty, express or implied, as to its usefulness for any purpose. -// -// Thread Safe: No -// Extendable: Yes -// -// @file performanceLCD.h -// This sketch implements a simple benchmark for the New LiquidCrystal library. -// -// @brief -// This sketch provides a simple benchmark for the New LiquidCrystal library. It -// enables to test the varios classes provided by the library giving a performance -// reference. -// -// This library is only compatible with Arduino's SDK version 1.0 -// -// @version API 1.0.0 -// -// @author F. Malpartida - fmalpartida@gmail.com -// Contribution by flo - Florian@Fida.biz - for benchmarking SR -// --------------------------------------------------------------------------- -#include - -#define _LCD_I2C_ - -#ifdef _LCD_I2C_ -#include -#endif - -#ifdef _LCD_4BIT_ -#include -#endif - -#ifdef _LCD_SR_ -#include -#endif - -#ifdef _LCD_SR3W_ -#include -#endif - -#ifdef _LCD_SR1_ -#include -#endif - -// C runtime variables -// ------------------- -#ifdef __AVR__ -extern unsigned int __bss_end; -extern unsigned int __heap_start; -extern void *__brkval; -#endif - -// Constants and definitions -// ------------------------- -// Definitions for compatibility with Arduino SDK prior to version 1.0 -#ifndef F -#define F(str) str -#endif - -/*! - @defined NUM_BENCHMARKS - @abstract Number of benchmarks in the project. - */ -#define NUM_BENCHMARKS 4 - -/*! - @defined ITERATIONS - @abstract Number of benchmarks iterations to perform. - */ -#define ITERATIONS 10 - -/*! - @defined LCD_ROWS - @abstract LCD rows - @discussion Defines the number of rows that the LCD has, normal LCD ranges are (1, 2, 4). - */ -#define LCD_ROWS 2 - -/*! - @defined LCD_COLUMNS - @abstract LCD available columns - @discussion Defines the number of colums that the LCD has, normal LCD ranges are (8, 16, 20). - */ -#define LCD_COLUMNS 16 - -/*! - @const Pin constant definitions - @abstract Define several constants required to manage the LCD backlight and contrast - */ -#ifdef _LCD_I2C_ -const int BACKLIGHT_PIN = 12; -const int CONTRAST_PIN = 0; // none -const int CONTRAST = 0; // none -#endif - -#ifdef _LCD_4BIT_ -const int CONTRAST_PIN = 9; -const int BACKLIGHT_PIN = 7; -const int CONTRAST = 120; -#endif - -#ifdef _LCD_SR_ -const int CONTRAST_PIN = 0; // not connected -const int BACKLIGHT_PIN = 0; // none -const int CONTRAST = 0; -#endif - -#ifdef _LCD_SR1_ -const int CONTRAST_PIN = 0; // not connected -const int BACKLIGHT_PIN = 0; // none -const int CONTRAST = 0; -#endif - -#ifdef _LCD_SR3W_ -const int CONTRAST_PIN = 0; // none -const int BACKLIGHT_PIN = 5; -const int CONTRAST = 0; -#endif - -/*! - @const charBitmap - @abstract Define Character bitmap for the bargraph. - @discussion Defines a character bitmap to represent a bargraph on a text - display. The bitmap goes from a blank character to full black. - */ -const uint8_t charBitmap[][8] = { - { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 }, - { 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0 }, - { 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x0 }, - { 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x0 }, - { 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x0 }, - { 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x0 } -}; - -/*! - @typedef t_benchmarkOp - @abstract Function pointer associated to each benchmark. - */ -typedef long (*t_benchmarkOp)( uint8_t ); - -/*! - @typedef t_timeBenchMarks - @abstract Structure to store results of the execution time of the benchmark. - @field benchmark: function pointer of the benchmark to be executed. - */ -typedef struct -{ - t_benchmarkOp benchmark; /**< Function pointer associated to the benchmark */ - long benchTime; /**< execution time for benchmark 1 in useconds */ - uint16_t numWrites; /**< Number of write cycles of the benchmark */ -} t_benchMarks; - - -// Main LCD objects -// ---------------- -#ifdef _LCD_I2C_ -LiquidCrystal_I2C lcd(0x38); // set the LCD address to 0x20 for a 16 chars and 2 line display -#endif - -#ifdef _LCD_4BIT_ -LiquidCrystal lcd(12, 11, 5, 4, 3, 2); -#endif - -#ifdef _LCD_SR_ -LiquidCrystal_SR lcd(8,7,TWO_WIRE); -#endif - -#ifdef _LCD_SR1_ -LiquidCrystal_SR1 lcd(2); -#endif - -#ifdef _LCD_SR3W_ -LiquidCrystal_SR3W lcd(3, 2, 4); -#endif - -// benchMarks definitions -// ---------------------- -extern long benchmark1 ( uint8_t ); -extern long benchmark2 ( uint8_t ); -extern long benchmark3 ( uint8_t ); -extern long benchmark4 ( uint8_t ); - -//! @brief benchmark structure that will be initialised and -static t_benchMarks myBenchMarks[NUM_BENCHMARKS] = -{ - { benchmark1, 0, (LCD_ROWS * LCD_COLUMNS) + 2 }, - { benchmark2, 0, LCD_ROWS * LCD_COLUMNS * 6 * 2 }, - { benchmark3, 0, 40 + 2 }, - { benchmark4, 0, 40 + 2 } -}; - -// Static methods -// -------------- -/*! - @function freeMemory - @abstract Return available RAM memory - @discussion This routine returns the ammount of RAM memory available after - initialising the C runtime. - @param - @return Free RAM available, -1 for non AVR microcontrollers - */ -static int freeMemory ( void ) -{ -#ifdef __AVR__ - int free_memory; - - if((int)__brkval == 0) - free_memory = ((int)&free_memory) - ((int)&__bss_end); - else - free_memory = ((int)&free_memory) - ((int)__brkval); - - return free_memory; -#else - return -1; -#endif - -} - -/*! - @function LCDSetup - @abstract Initialise LCD associated pins and initialise the LCD object - with its geometry. - @discussion Initialise the LCD object and make it ready for operation by - setting up the LCD geometry, i.e. LCD character size. Initialise - and configure all associated control pins such as backlight and - contras pin if necessary. - - @param[in] charBitmapSize: contrasts pin associated to the contrast (should be an - analog pin). 0 if contrast pin is not required. - @param[in] backlight: backlight pin associated to the LCD backlight. - @param[in] cols: number of LCD columns normal values (1, 2, 4) - @param[in] rows: number of LCD rows normal values (8, 16, 20) - */ -static void LCDSetup ( uint8_t contrasPin, uint8_t backlight, uint8_t cols, uint8_t rows ) -{ - // If our setup uses a PWM to control the backlight, configure it - // -------------------------------------------------------------- - if ( contrasPin != 0 ) - { - pinMode ( contrasPin, OUTPUT ); - analogWrite ( contrasPin, CONTRAST ); - } - // Setup backlight pin - if ( backlight != 0 ){ - pinMode(backlight, OUTPUT); - digitalWrite(backlight, HIGH); - } - - lcd.begin ( cols, rows ); - lcd.clear ( ); -} - - -/*! - @function LCDLoadCharacters - @abstract Loads onto the LCD the character set for the benchmark. - @discussion Loads onto the LCD the character set that will be used throughout - the benchmark. - - @param[in] charBitmapSize: number of characters to load to the LCD. - */ -static void LCDLoadCharacters ( int numChars ) -{ - // Load custom character set into CGRAM - for ( int i = 0; i < numChars; i++ ) - { - lcd.createChar ( i, (uint8_t *)charBitmap[i] ); - } -} - - -// Benchmarks -// ---------- -/*! - @function benchmark1 - @abstract writes to the LCD a full set of characters loaded on the LCD - memory. - @discussion Writes to all the positions of the LCD a fixed pattern from - memory. For every line it writes, it positions the cursor. - The number of writen LCD accesses is: LCD_ROW * LCD_COLUMS + 2. - It returns the cumulative time used by all the iterations. - - @param[in] iterations: number of iterations the benchmark is executed before - returning the time taken by all iterations. - @return The time take to execute iterations number of benchmarks. - */ -long benchmark1 ( uint8_t iterations ) -{ - unsigned long time, totalTime = 0; - int i, j; - - while ( iterations > 0 ) - { - // Clear the LCD - lcd.clear ( ); - - time = micros (); - for ( i = 0; i < LCD_ROWS; i++ ) - { - lcd.setCursor ( 0, i ); - for ( j = 0; j < LCD_COLUMNS; j++ ) - { - lcd.print (char(5)); - } - } - totalTime += ( micros() - time ); - delay ( 200 ); // it doesn't keep up with the LCD refresh rate. - iterations--; - } - return ( totalTime ); -} - -/*! - @function benchmark2 - @abstract writes to the LCD a full set of characters loaded on the LCD - memory one line pixel at the time - @discussion Writes to all the positions of the LCD a fixed pattern from - memory each patern take 6 write operations to the LCD. For every - character it writes it sets the cursor possition. - The number of writen LCD accesses is: LCD_ROW * LCD_COLUMS * 6. - It returns the cumulative time used by all the iterations. - - @param[in] iterations: number of iterations the benchmark is executed before - returning the time taken by all iterations. - @return The time take to execute iterations number of benchmarks. - */ -long benchmark2 ( uint8_t iterations ) -{ - unsigned long time, totalTime = 0; - int i, j, k; - - while ( iterations > 0 ) - { - // Clear the LCD - lcd.clear ( ); - - time = micros (); - - for ( i = 0; i < LCD_ROWS; i++ ) - { - for ( j = 0; j < LCD_COLUMNS; j++ ) - { - for ( k = 0; k <= 5; k++ ) - { - lcd.setCursor ( j, i ); - lcd.print (char(k)); - } - } - } - totalTime += ( micros() - time ); - iterations--; - } - return ( totalTime ); -} - -/*! - @function benchmark3 - @abstract writes to the LCD a full set of characters from memory. - @discussion Writes to all the positions of the LCD a fixed pattern from - RAM. For every line it writes, it positions the cursor. - The number of writen LCD accesses is: LCD_ROW * LCD_COLUMS + 2. - It returns the cumulative time used by all the iterations. - - @param[in] iterations: number of iterations the benchmark is executed before - returning the time taken by all iterations. - @return The time take to execute iterations number of benchmarks. - */ -long benchmark3 ( uint8_t iterations ) -{ - unsigned long time, totalTime = 0; - int i; - - while ( iterations > 0 ) - { - // Clear the LCD - lcd.clear ( ); - - time = micros (); - for ( i = 0; i < LCD_ROWS; i++ ) - { - lcd.setCursor ( 0, i ); - lcd.print ( "####################" ); - } - totalTime += ( micros() - time ); - delay ( 200 ); // it doesn't keep up with the LCD refresh rate. - iterations--; - } - return ( totalTime ); -} - -/*! - @function benchmark4 - @abstract writes to the LCD a full set of characters from memory. - @discussion Writes to all the positions of the LCD a fixed pattern from - flash. For every line it writes, it positions the cursor. - The number of writen LCD accesses is: LCD_ROW * LCD_COLUMS + 2. - It returns the cumulative time used by all the iterations. - - @param[in] iterations: number of iterations the benchmark is executed before - returning the time taken by all iterations. - @return The time take to execute iterations number of benchmarks. - */ -long benchmark4 ( uint8_t iterations ) -{ - unsigned long time, totalTime = 0; - int i; - - while ( iterations > 0 ) - { - // Clear the LCD - lcd.clear ( ); - - time = micros (); - for ( i = 0; i < LCD_ROWS; i++ ) - { - lcd.setCursor ( 0, i ); - lcd.print ( F("####################") ); - } - totalTime += ( micros() - time ); - delay ( 200 ); // it doesn't keep up with the LCD refresh rate. - iterations--; - } - return ( totalTime ); -} - -// Main system setup -// ----------------- -void setup () -{ - Serial.begin ( 57600 ); -#ifdef __AVR__ - Serial.print ( F("Free mem: ") ); - Serial.println ( freeMemory () ); -#endif - - // Initialise the LCD - LCDSetup ( CONTRAST_PIN, BACKLIGHT_PIN, LCD_COLUMNS, LCD_ROWS ); - LCDLoadCharacters ( (sizeof(charBitmap ) / sizeof (charBitmap[0])) ); -} - - -// Main system loop -// ---------------- -void loop () -{ - int i; - - lcd.setCursor ( 0, 0 ); - lcd.clear ( ); - - // Run benchmark - for ( i = 0; i < NUM_BENCHMARKS; i++ ) - { - myBenchMarks[i].benchTime = - (myBenchMarks[i].benchmark (ITERATIONS))/ITERATIONS; - Serial.println (i); - } - - float fAllWrites=0.0; - - for ( i = 0; i < NUM_BENCHMARKS; i++ ) - { - Serial.print ( F("benchmark") ); - Serial.print ( i ); - Serial.print ( F(": ") ); - Serial.print ( myBenchMarks[i].benchTime ); - Serial.print ( F(" us - ") ); - Serial.print ( F(" write: ") ); - Serial.print ( myBenchMarks[i].benchTime / (float)myBenchMarks[i].numWrites ); - Serial.println ( F(" us") ); - fAllWrites += myBenchMarks[i].benchTime / (float)myBenchMarks[i].numWrites; - } - Serial.print( F("avg. write: ") ); - Serial.println( fAllWrites / (float)NUM_BENCHMARKS ); - } \ No newline at end of file diff --git a/libraries/LiquidCrystal/keywords.txt b/libraries/LiquidCrystal/keywords.txt deleted file mode 100644 index c13f5ae..0000000 --- a/libraries/LiquidCrystal/keywords.txt +++ /dev/null @@ -1,52 +0,0 @@ -########################################### -# Syntax Coloring Map For LiquidCrystal_I2C -########################################### - -########################################### -# Datatypes (KEYWORD1) -########################################### - -LiquidCrystal_SR KEYWORD1 -LiquidCrystal_I2C KEYWORD1 -LiquidCrystal_SR3W KEYWORD1 -LiquidCrystal KEYWORD1 -LCD KEYWORD1 - -########################################### -# Methods and Functions (KEYWORD2) -########################################### -begin KEYWORD2 -clear KEYWORD2 -home KEYWORD2 -noDisplay KEYWORD2 -display KEYWORD2 -noBlink KEYWORD2 -blink KEYWORD2 -noCursor KEYWORD2 -cursor KEYWORD2 -scrollDisplayLeft KEYWORD2 -scrollDisplayRight KEYWORD2 -leftToRight KEYWORD2 -rightToLeft KEYWORD2 -moveCursorLeft KEYWORD2 -moveCursorRight KEYWORD2 -autoscroll KEYWORD2 -noAutoscroll KEYWORD2 -createChar KEYWORD2 -setCursor KEYWORD2 -print KEYWORD2 -write KEYWORD2 -println KEYWORD2 -backlight KEYWORD2 -noBacklight KEYWORD2 -on KEYWORD2 -off KEYWORD2 -setBacklightPin KEYWORD2 -setBacklight KEYWORD2 -########################################### -# Constants (LITERAL1) -########################################### -POSITIVE LITERAL1 -NEGATIVE LITERAL1 -BACKLIGHT_ON LITERAL1 -BACKLIGHT_OFF LITERAL1 \ No newline at end of file diff --git a/libraries/LiquidCrystal/utility/docs/Doxyfile b/libraries/LiquidCrystal/utility/docs/Doxyfile deleted file mode 100644 index b097cd8..0000000 --- a/libraries/LiquidCrystal/utility/docs/Doxyfile +++ /dev/null @@ -1,1749 +0,0 @@ -# Doxyfile 1.7.4 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# This tag specifies the encoding used for all characters in the config file -# that follow. The default is UTF-8 which is also the encoding used for all -# text before the first occurrence of this tag. Doxygen uses libiconv (or the -# iconv built into libc) for the transcoding. See -# http://www.gnu.org/software/libiconv for the list of possible encodings. - -DOXYFILE_ENCODING = UTF-8 - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = "LCD Library" - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = 1.2.0 - -# Using the PROJECT_BRIEF tag one can provide an optional one line description -# for a project that appears at the top of each page and should give viewer -# a quick idea about the purpose of the project. Keep the description short. - -PROJECT_BRIEF = "LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library." - -# With the PROJECT_LOGO tag one can specify an logo or icon that is -# included in the documentation. The maximum height of the logo should not -# exceed 55 pixels and the maximum width should not exceed 200 pixels. -# Doxygen will copy the logo to the output directory. - -PROJECT_LOGO = /Users/fmalpartida/Documents/electroFunLTD/templates/anchillary/graficas/logo/logoGoogle.jpg - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = . - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. - -CREATE_SUBDIRS = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, -# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, -# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English -# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, -# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, -# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. - -OUTPUT_LANGUAGE = English - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = "The $name class" \ - "The $name widget" \ - "The $name file" \ - is \ - provides \ - specifies \ - contains \ - represents \ - a \ - an \ - the - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = YES - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = YES - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. - -STRIP_FROM_PATH = - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful if your file system -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like regular Qt-style comments -# (thus requiring an explicit @brief command for a brief description.) - -JAVADOC_AUTOBRIEF = NO - -# If the QT_AUTOBRIEF tag is set to YES then Doxygen will -# interpret the first line (until the first dot) of a Qt-style -# comment as the brief description. If set to NO, the comments -# will behave just like regular Qt-style comments (thus requiring -# an explicit \brief command for a brief description.) - -QT_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = YES - -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce -# a new page for each member. If set to NO, the documentation of a member will -# be part of the file/class/namespace that contains it. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 8 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -# sources only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java -# sources only. Doxygen will then generate output that is more tailored for -# Java. For instance, namespaces will be presented as packages, qualified -# scopes will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran -# sources only. Doxygen will then generate output that is more tailored for -# Fortran. - -OPTIMIZE_FOR_FORTRAN = NO - -# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL -# sources. Doxygen will then generate output that is tailored for -# VHDL. - -OPTIMIZE_OUTPUT_VHDL = NO - -# Doxygen selects the parser to use depending on the extension of the files it -# parses. With this tag you can assign which parser to use for a given extension. -# Doxygen has a built-in mapping, but you can override or extend it using this -# tag. The format is ext=language, where ext is a file extension, and language -# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, -# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make -# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C -# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions -# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. - -EXTENSION_MAPPING = - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want -# to include (a tag file for) the STL sources as input, then you should -# set this tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. -# func(std::string) {}). This also makes the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. - -BUILTIN_STL_SUPPORT = NO - -# If you use Microsoft's C++/CLI language, you should set this option to YES to -# enable parsing support. - -CPP_CLI_SUPPORT = NO - -# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. -# Doxygen will parse them like normal C++ but will assume all classes use public -# instead of private inheritance when no explicit protection keyword is present. - -SIP_SUPPORT = NO - -# For Microsoft's IDL there are propget and propput attributes to indicate getter -# and setter methods for a property. Setting this option to YES (the default) -# will make doxygen replace the get and set methods by a property in the -# documentation. This will only work if the methods are indeed getting or -# setting a simple type. If this is not the case, or you want to show the -# methods anyway, you should set this option to NO. - -IDL_PROPERTY_SUPPORT = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and -# unions are shown inside the group in which they are included (e.g. using -# @ingroup) instead of on a separate page (for HTML and Man pages) or -# section (for LaTeX and RTF). - -INLINE_GROUPED_CLASSES = NO - -# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum -# is documented as struct, union, or enum with the name of the typedef. So -# typedef struct TypeS {} TypeT, will appear in the documentation as a struct -# with name TypeT. When disabled the typedef will appear as a member of a file, -# namespace, or class. And the struct will be named TypeS. This can typically -# be useful for C code in case the coding convention dictates that all compound -# types are typedef'ed and only the typedef is referenced, never the tag name. - -TYPEDEF_HIDES_STRUCT = NO - -# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to -# determine which symbols to keep in memory and which to flush to disk. -# When the cache is full, less often used symbols will be written to disk. -# For small to medium size projects (<1000 input files) the default value is -# probably good enough. For larger projects a too small cache size can cause -# doxygen to be busy swapping symbols to and from disk most of the time -# causing a significant performance penalty. -# If the system has enough physical memory increasing the cache will improve the -# performance by keeping more symbols in memory. Note that the value works on -# a logarithmic scale so increasing the size by one will roughly double the -# memory usage. The cache size is given by this formula: -# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, -# corresponding to a cache size of 2^16 = 65536 symbols - -SYMBOL_CACHE_SIZE = 0 - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = YES - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = YES - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = YES - -# If this flag is set to YES, the members of anonymous namespaces will be -# extracted and appear in the documentation as a namespace called -# 'anonymous_namespace{file}', where file will be replaced with the base -# name of the file that contains the anonymous namespace. By default -# anonymous namespaces are hidden. - -EXTRACT_ANON_NSPACES = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. - -CASE_SENSE_NAMES = NO - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = NO - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen -# will list include files with double quotes in the documentation -# rather than with sharp brackets. - -FORCE_LOCAL_INCLUDES = NO - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = YES - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = YES - -# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen -# will sort the (brief and detailed) documentation of class members so that -# constructors and destructors are listed first. If set to NO (the default) -# the constructors will appear in the respective orders defined by -# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. -# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO -# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. - -SORT_MEMBERS_CTORS_1ST = NO - -# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the -# hierarchy of group names into alphabetical order. If set to NO (the default) -# the group names will appear in their defined order. - -SORT_GROUP_NAMES = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to -# do proper type resolution of all parameters of a function it will reject a -# match between the prototype and the implementation of a member function even -# if there is only one candidate or it is obvious which candidate to choose -# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen -# will still accept a match between prototype and implementation in such cases. - -STRICT_PROTO_MATCHING = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or macro consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and macros in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -# If the sources in your project are distributed over multiple directories -# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy -# in the documentation. The default is NO. - -SHOW_DIRECTORIES = NO - -# Set the SHOW_FILES tag to NO to disable the generation of the Files page. -# This will remove the Files entry from the Quick Index and from the -# Folder Tree View (if specified). The default is YES. - -SHOW_FILES = YES - -# Set the SHOW_NAMESPACES tag to NO to disable the generation of the -# Namespaces page. This will remove the Namespaces entry from the Quick Index -# and from the Folder Tree View (if specified). The default is YES. - -SHOW_NAMESPACES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from -# the version control system). Doxygen will invoke the program by executing (via -# popen()) the command , where is the value of -# the FILE_VERSION_FILTER tag, and is the name of an input file -# provided by doxygen. Whatever the program writes to standard output -# is used as the file version. See the manual for examples. - -FILE_VERSION_FILTER = - -# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed -# by doxygen. The layout file controls the global structure of the generated -# output files in an output format independent way. The create the layout file -# that represents doxygen's defaults, run doxygen with the -l option. -# You can optionally specify a file name after the option, if omitted -# DoxygenLayout.xml will be used as the name of the layout file. - -LAYOUT_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# The WARN_NO_PARAMDOC option can be enabled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. - -WARN_NO_PARAMDOC = NO - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = ../ - -# This tag can be used to specify the character encoding of the source files -# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is -# also the default input encoding. Doxygen uses libiconv (or the iconv built -# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for -# the list of possible encodings. - -INPUT_ENCODING = UTF-8 - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh -# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py -# *.f90 *.f *.for *.vhd *.vhdl - -FILE_PATTERNS = *.c \ - *.cc \ - *.cxx \ - *.cpp \ - *.c++ \ - *.d \ - *.java \ - *.ii \ - *.ixx \ - *.ipp \ - *.i++ \ - *.inl \ - *.h \ - *.hh \ - *.hxx \ - *.hpp \ - *.h++ \ - *.idl \ - *.odl \ - *.cs \ - *.php \ - *.php3 \ - *.inc \ - *.m \ - *.mm \ - *.dox \ - *.py \ - *.f90 \ - *.f \ - *.for \ - *.vhd \ - *.vhdl - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = NO - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or -# directories that are symbolic links (a Unix file system feature) are excluded -# from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. Note that the wildcards are matched -# against the file with absolute path, so to exclude all test directories -# for example use the pattern */test/* - -EXCLUDE_PATTERNS = - -# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -# (namespaces, classes, functions, etc.) that should be excluded from the -# output. The symbol name can be a fully qualified name, a word, or if the -# wildcard * is used, a substring. Examples: ANamespace, AClass, -# AClass::ANamespace, ANamespace::*Test - -EXCLUDE_SYMBOLS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = * - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command , where -# is the value of the INPUT_FILTER tag, and is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. If FILTER_PATTERNS is specified, this tag will be -# ignored. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty or if -# non of the patterns match the file name, INPUT_FILTER is applied. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file -# pattern. A pattern will override the setting for FILTER_PATTERN (if any) -# and it is also possible to disable source filtering for a specific pattern -# using *.ext= (so without naming a filter). This option only has effect when -# FILTER_SOURCE_FILES is enabled. - -FILTER_SOURCE_PATTERNS = - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = YES - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = NO - -# If the REFERENCES_RELATION tag is set to YES -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = NO - -# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) -# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from -# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will -# link to the source code. Otherwise they will link to the documentation. - -REFERENCES_LINK_SOURCE = YES - -# If the USE_HTAGS tag is set to YES then the references to source code -# will point to the HTML generated by the htags(1) tool instead of doxygen -# built-in source browser. The htags tool is part of GNU's global source -# tagging system (see http://www.gnu.org/software/global/global.html). You -# will need version 4.8.6 or higher. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = YES - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. Note that when using a custom header you are responsible -# for the proper inclusion of any scripts and style sheets that doxygen -# needs, which is dependent on the configuration options used. -# It is adviced to generate a default header using "doxygen -w html -# header.html footer.html stylesheet.css YourConfigFile" and then modify -# that header. Note that the header is subject to change so you typically -# have to redo this when upgrading to a newer version of doxygen or when -# changing the value of configuration settings such as GENERATE_TREEVIEW! - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = - -# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or -# other source files which should be copied to the HTML output directory. Note -# that these files will be copied to the base HTML output directory. Use the -# $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these -# files. In the HTML_STYLESHEET file, use the file name only. Also note that -# the files will be copied as-is; there are no commands or markers available. - -HTML_EXTRA_FILES = - -# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. -# Doxygen will adjust the colors in the stylesheet and background images -# according to this color. Hue is specified as an angle on a colorwheel, -# see http://en.wikipedia.org/wiki/Hue for more information. -# For instance the value 0 represents red, 60 is yellow, 120 is green, -# 180 is cyan, 240 is blue, 300 purple, and 360 is red again. -# The allowed range is 0 to 359. - -HTML_COLORSTYLE_HUE = 220 - -# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of -# the colors in the HTML output. For a value of 0 the output will use -# grayscales only. A value of 255 will produce the most vivid colors. - -HTML_COLORSTYLE_SAT = 100 - -# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to -# the luminance component of the colors in the HTML output. Values below -# 100 gradually make the output lighter, whereas values above 100 make -# the output darker. The value divided by 100 is the actual gamma applied, -# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, -# and 100 does not change the gamma. - -HTML_COLORSTYLE_GAMMA = 80 - -# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting -# this to NO can help when comparing the output of multiple runs. - -HTML_TIMESTAMP = YES - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML -# documentation will contain sections that can be hidden and shown after the -# page has loaded. For this to work a browser that supports -# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox -# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). - -HTML_DYNAMIC_SECTIONS = NO - -# If the GENERATE_DOCSET tag is set to YES, additional index files -# will be generated that can be used as input for Apple's Xcode 3 -# integrated development environment, introduced with OSX 10.5 (Leopard). -# To create a documentation set, doxygen will generate a Makefile in the -# HTML output directory. Running make will produce the docset in that -# directory and running "make install" will install the docset in -# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find -# it at startup. -# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html -# for more information. - -GENERATE_DOCSET = NO - -# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the -# feed. A documentation feed provides an umbrella under which multiple -# documentation sets from a single provider (such as a company or product suite) -# can be grouped. - -DOCSET_FEEDNAME = "Doxygen generated docs" - -# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that -# should uniquely identify the documentation set bundle. This should be a -# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen -# will append .docset to the name. - -DOCSET_BUNDLE_ID = org.doxygen.Project - -# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify -# the documentation publisher. This should be a reverse domain-name style -# string, e.g. com.mycompany.MyDocSet.documentation. - -DOCSET_PUBLISHER_ID = org.doxygen.Publisher - -# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. - -DOCSET_PUBLISHER_NAME = Publisher - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING -# is used to encode HtmlHelp index (hhk), content (hhc) and project file -# content. - -CHM_INDEX_ENCODING = - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and -# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated -# that can be used as input for Qt's qhelpgenerator to generate a -# Qt Compressed Help (.qch) of the generated HTML documentation. - -GENERATE_QHP = NO - -# If the QHG_LOCATION tag is specified, the QCH_FILE tag can -# be used to specify the file name of the resulting .qch file. -# The path specified is relative to the HTML output folder. - -QCH_FILE = - -# The QHP_NAMESPACE tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# http://doc.trolltech.com/qthelpproject.html#namespace - -QHP_NAMESPACE = org.doxygen.Project - -# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# http://doc.trolltech.com/qthelpproject.html#virtual-folders - -QHP_VIRTUAL_FOLDER = doc - -# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to -# add. For more information please see -# http://doc.trolltech.com/qthelpproject.html#custom-filters - -QHP_CUST_FILTER_NAME = - -# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the -# custom filter to add. For more information please see -# -# Qt Help Project / Custom Filters. - -QHP_CUST_FILTER_ATTRS = - -# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this -# project's -# filter section matches. -# -# Qt Help Project / Filter Attributes. - -QHP_SECT_FILTER_ATTRS = - -# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can -# be used to specify the location of Qt's qhelpgenerator. -# If non-empty doxygen will try to run qhelpgenerator on the generated -# .qhp file. - -QHG_LOCATION = - -# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files -# will be generated, which together with the HTML files, form an Eclipse help -# plugin. To install this plugin and make it available under the help contents -# menu in Eclipse, the contents of the directory containing the HTML and XML -# files needs to be copied into the plugins directory of eclipse. The name of -# the directory within the plugins directory should be the same as -# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before -# the help appears. - -GENERATE_ECLIPSEHELP = NO - -# A unique identifier for the eclipse help plugin. When installing the plugin -# the directory name containing the HTML and XML files should also have -# this name. - -ECLIPSE_DOC_ID = org.doxygen.Project - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values -# (range [0,1..20]) that doxygen will group on one line in the generated HTML -# documentation. Note that a value of 0 will completely suppress the enum -# values from appearing in the overview section. - -ENUM_VALUES_PER_LINE = 4 - -# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index -# structure should be generated to display hierarchical information. -# If the tag value is set to YES, a side panel will be generated -# containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). -# Windows users are probably better off using the HTML help feature. - -GENERATE_TREEVIEW = NO - -# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, -# and Class Hierarchy pages using a tree view instead of an ordered list. - -USE_INLINE_TREES = NO - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open -# links to external symbols imported via tag files in a separate window. - -EXT_LINKS_IN_WINDOW = NO - -# Use this tag to change the font size of Latex formulas included -# as images in the HTML documentation. The default is 10. Note that -# when you change the font size after a successful doxygen run you need -# to manually remove any form_*.png images from the HTML output directory -# to force them to be regenerated. - -FORMULA_FONTSIZE = 10 - -# Use the FORMULA_TRANPARENT tag to determine whether or not the images -# generated for formulas are transparent PNGs. Transparent PNGs are -# not supported properly for IE 6.0, but are supported on all modern browsers. -# Note that when changing this option you need to delete any form_*.png files -# in the HTML output before the changes have effect. - -FORMULA_TRANSPARENT = YES - -# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax -# (see http://www.mathjax.org) which uses client side Javascript for the -# rendering instead of using prerendered bitmaps. Use this if you do not -# have LaTeX installed or if you want to formulas look prettier in the HTML -# output. When enabled you also need to install MathJax separately and -# configure the path to it using the MATHJAX_RELPATH option. - -USE_MATHJAX = NO - -# When MathJax is enabled you need to specify the location relative to the -# HTML output directory using the MATHJAX_RELPATH option. The destination -# directory should contain the MathJax.js script. For instance, if the mathjax -# directory is located at the same level as the HTML output directory, then -# MATHJAX_RELPATH should be ../mathjax. The default value points to the -# mathjax.org site, so you can quickly see the result without installing -# MathJax, but it is strongly recommended to install a local copy of MathJax -# before deployment. - -MATHJAX_RELPATH = http://www.mathjax.org/mathjax - -# When the SEARCHENGINE tag is enabled doxygen will generate a search box -# for the HTML output. The underlying search engine uses javascript -# and DHTML and should work on any modern browser. Note that when using -# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets -# (GENERATE_DOCSET) there is already a search function so this one should -# typically be disabled. For large projects the javascript based search engine -# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. - -SEARCHENGINE = YES - -# When the SERVER_BASED_SEARCH tag is enabled the search engine will be -# implemented using a PHP enabled web server instead of at the web client -# using Javascript. Doxygen will generate the search PHP script and index -# file to put on the web server. The advantage of the server -# based approach is that it scales better to large projects and allows -# full text search. The disadvantages are that it is more difficult to setup -# and does not have live searching capabilities. - -SERVER_BASED_SEARCH = NO - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = NO - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. -# Note that when enabling USE_PDFLATEX this option is only used for -# generating bitmaps for formulas in the HTML output, but not in the -# Makefile that is written to the output directory. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4 - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for -# the generated latex document. The footer should contain everything after -# the last chapter. If it is left blank doxygen will generate a -# standard footer. Notice: only use this tag if you know what you are doing! - -LATEX_FOOTER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = YES - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = YES - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -# If LATEX_SOURCE_CODE is set to YES then doxygen will include -# source code with syntax highlighting in the LaTeX output. -# Note that which sources are shown also depends on other settings -# such as SOURCE_BROWSER. - -LATEX_SOURCE_CODE = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = YES - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = YES - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. This is useful -# if you want to understand what is going on. On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = NO - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_DEFINED tags. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# pointed to by INCLUDE_PATH will be searched when a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - -PREDEFINED = - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition that -# overrules the definition found in the source code. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all references to function-like macros -# that are alone on a line, have an all uppercase name, and do not end with a -# semicolon, because these will confuse the parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base -# or super classes. Setting the tag to NO turns the diagrams off. Note that -# this option also works with HAVE_DOT disabled, but it is recommended to -# install and use dot, since it yields more powerful graphs. - -CLASS_DIAGRAMS = YES - -# You can define message sequence charts within doxygen comments using the \msc -# command. Doxygen will then run the mscgen tool (see -# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the -# documentation. The MSCGEN_PATH tag allows you to specify the directory where -# the mscgen tool resides. If left empty the tool is assumed to be found in the -# default search path. - -MSCGEN_PATH = - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = NO - -# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is -# allowed to run in parallel. When set to 0 (the default) doxygen will -# base this on the number of processors available in the system. You can set it -# explicitly to a value larger than 0 to get control over the balance -# between CPU load and processing speed. - -DOT_NUM_THREADS = 0 - -# By default doxygen will write a font called Helvetica to the output -# directory and reference it in all dot files that doxygen generates. -# When you want a differently looking font you can specify the font name -# using DOT_FONTNAME. You need to make sure dot is able to find the font, -# which can be done by putting it in a standard location or by setting the -# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory -# containing the font. - -DOT_FONTNAME = Helvetica - -# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. -# The default size is 10pt. - -DOT_FONTSIZE = 10 - -# By default doxygen will tell dot to use the output directory to look for the -# FreeSans.ttf font (which doxygen will put there itself). If you specify a -# different font using DOT_FONTNAME you can set the path where dot -# can find it using this tag. - -DOT_FONTPATH = - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for groups, showing the direct groups dependencies - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = NO - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT options are set to YES then -# doxygen will generate a call dependency graph for every global function -# or class method. Note that enabling this option will significantly increase -# the time of a run. So in most cases it will be better to enable call graphs -# for selected functions only using the \callgraph command. - -CALL_GRAPH = NO - -# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then -# doxygen will generate a caller dependency graph for every global function -# or class method. Note that enabling this option will significantly increase -# the time of a run. So in most cases it will be better to enable caller -# graphs for selected functions only using the \callergraph command. - -CALLER_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will generate a graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES -# then doxygen will show the dependencies a directory has on other directories -# in a graphical way. The dependency relations are determined by the #include -# relations between the files in the directories. - -DIRECTORY_GRAPH = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are svg, png, jpg, or gif. -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MSCFILE_DIRS tag can be used to specify one or more directories that -# contain msc files that are included in the documentation (see the -# \mscfile command). - -MSCFILE_DIRS = - -# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of -# nodes that will be shown in the graph. If the number of nodes in a graph -# becomes larger than this value, doxygen will truncate the graph, which is -# visualized by representing a node as a red box. Note that doxygen if the -# number of direct children of the root node in a graph is already larger than -# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note -# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. - -DOT_GRAPH_MAX_NODES = 50 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes -# that lay further from the root node will be omitted. Note that setting this -# option to 1 or 2 may greatly reduce the computation time needed for large -# code bases. Also note that the size of a graph can be further restricted by -# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. - -MAX_DOT_GRAPH_DEPTH = 0 - -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, because dot on Windows does not -# seem to support this out of the box. Warning: Depending on the platform used, -# enabling this option may lead to badly anti-aliased labels on the edges of -# a graph (i.e. they become hard to read). - -DOT_TRANSPARENT = NO - -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) -# support this, this feature is disabled by default. - -DOT_MULTI_TARGETS = NO - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES diff --git a/libraries/LiquidCrystal/utility/docs/def/doxygen.def b/libraries/LiquidCrystal/utility/docs/def/doxygen.def deleted file mode 100644 index 5af747c..0000000 --- a/libraries/LiquidCrystal/utility/docs/def/doxygen.def +++ /dev/null @@ -1,7432 +0,0 @@ -AutoGen Definitions dummy; -class = { - cp-id = 'class_i2_c_i_o'; - cp-name = 'I2CIO'; - cp-section = { - sec-kind = 'public-func'; - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_i2_c_i_o_1a6f814653d903dc2ff6e8420eeb7954ae'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -int -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'begin'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'i2cAddr'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; - sec-mem-desc-line = '62'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Initializes the device. - @discussion This method initializes the device allocating an I2C address. - This method is the first method that should be call prior to calling any - other method form this class. On initialization all pins are configured - as INPUT on the device. - - @param i2cAddr: I2C Address where the device is located. - @result 1 if the device was initialized correctly, 0 otherwise -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_i2_c_i_o_1ac26221011a8b49bcea9ef62712ea88a7'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'digitalRead'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'pin'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; - sec-mem-desc-line = '108'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Read a pin from the device. - @discussion Reads a particular pin from the device. To read a particular - pin it has to be configured as INPUT. During initialization all pins are - configured as INPUTs by default. Please refer to pinMode or portMode. - - @param pin[in] Pin from the port to read its status. Range (0..7) - @result Returns the pin status (HIGH, LOW) if the pin is configured - as an output, reading its value will always return LOW regardless of its - real state. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_i2_c_i_o_1a473206162522b847546777d16a7c6dcd'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -int -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'digitalWrite'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'pin'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'level'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; - sec-mem-desc-line = '136'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Writes a digital level to a particular pin. - @discussion Write a level to the indicated pin of the device. For this - method to have effect, the pin has to be configured as OUTPUT using the - pinMode or portMode methods. - - @param pin[in] device pin to change level. Range (0..7). - @para level[in] logic level to set the pin at (HIGH, LOW). - @result 1 on success, 0 otherwise. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_i2_c_i_o_1a32eb7832075ad6011d67874405a0d0a6'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'I2CIO'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; - sec-mem-desc-line = '49'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Constructor method - @discussion Class constructor constructor. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_i2_c_i_o_1a53b94274eb6bb68564cf5243323db887'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'pinMode'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'pin'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'dir'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; - sec-mem-desc-line = '73'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Sets the mode of a particular pin. - @discussion Sets the mode of a particular pin to INPUT, OUTPUT. digitalWrite - has no effect on pins which are not declared as output. - - @param pin[in] Pin from the I2C IO expander to be configured. Range 0..7 - @param dir[in] Pin direction (INPUT, OUTPUT). -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_i2_c_i_o_1a0341888753bc54c4384f5593a870fb34'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'portMode'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'dir'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; - sec-mem-desc-line = '83'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Sets all the pins of the device in a particular direction. - @discussion This method sets all the pins of the device in a particular - direction. This method is useful to set all the pins of the device to be - either inputs or outputs. - @param dir[in] Direction of all the pins of the device (INPUT, OUTPUT). -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_i2_c_i_o_1a7a3db7bfc15ede0ae9e8c8bd44290ef7'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'read'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; - sec-mem-desc-line = '94'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Reads all the pins of the device that are configured as INPUT. - @discussion Reads from the device the status of the pins that are configured - as INPUT. During initialization all pins are configured as INPUTs by default. - Please refer to pinMode or portMode. - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_i2_c_i_o_1ae2063569c927d0008e2593d14504fdcd'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -int -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'write'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; - sec-mem-desc-line = '123'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Write a value to the device. - @discussion Writes to a set of pins in the device. The value is the binary - representation of all the pins in device. The value written is masked with - the configuration of the direction of the pins; to change the state of - a particular pin with this method, such pin has to be configured as OUTPUT - using the portMode or pinMode methods. If no pins have been configured as - OUTPUTs this method will have no effect. - - @param value[in] value to be written to the device. - @result 1 on success, 0 otherwise -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-section = { - sec-kind = 'private-attrib'; - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_i2_c_i_o_1a283a99ef1c6f58fa8a0489089cba9682'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_dirMask'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; - sec-mem-desc-line = '142'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_i2_c_i_o_1ade58da873af4240a53053ef5f12a2728'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_i2cAddr'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; - sec-mem-desc-line = '143'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_i2_c_i_o_1a8c566f3fd332eefe4db57cbe6b69337c'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -bool -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_initialised'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; - sec-mem-desc-line = '144'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_i2_c_i_o_1abcd6f7f5f176f965d8ae535afa9f6cec'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_shadow'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; - sec-mem-desc-line = '141'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-filename = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; - cp-fileline = '42'; - cp-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - cp-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* class */ -class = { - cp-id = 'class_l_c_d'; - cp-name = 'LCD'; - cp-ref = { - ref-type = derived; - ref-id = 'class_liquid_crystal'; - ref-prot = public; - ref-virt = non-virtual; - }; - cp-ref = { - ref-type = derived; - ref-id = 'class_liquid_crystal___i2_c'; - ref-prot = public; - ref-virt = non-virtual; - }; - cp-ref = { - ref-type = derived; - ref-id = 'class_liquid_crystal___s_r'; - ref-prot = public; - ref-virt = non-virtual; - }; - cp-ref = { - ref-type = derived; - ref-id = 'class_liquid_crystal___s_r2_w'; - ref-prot = public; - ref-virt = non-virtual; - }; - cp-ref = { - ref-type = derived; - ref-id = 'class_liquid_crystal___s_r3_w'; - ref-prot = public; - ref-virt = non-virtual; - }; - cp-section = { - sec-kind = 'public-func'; - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1abb3ed88d530f6283e6159b4973e7da9e'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'autoscroll'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '354'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Turns on automatic scrolling of the LCD. - @discussion Turns on automatic scrolling of the LCD. This causes each - character output to the display to push previous characters over by one - space. If the current text direction is left-to-right (the default), - the display scrolls to the left; if the current direction is right-to-left, - the display scrolls to the right. - This has the effect of outputting each new character to the same location on - the LCD. - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1aba8867fe2210cbfa8db869208709be10'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'backlight'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '402'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Switch-on the LCD backlight. - @discussion Switch-on the LCD backlight. - The setBacklightPin has to be called before setting the backlight for - this method to work. @see setBacklightPin. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a3f587d1cbb2d59765ef60a5216b56fea'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -virtual void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'begin'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'cols'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'rows'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'charsize'; - sec-mem-param-defval = <<_EnD_oF_dEf_TeXt_ -LCD_5x8DOTS -_EnD_oF_dEf_TeXt_; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '196'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract LCD initialization. - @discussion Initializes the LCD to a given size (col, row). This methods - initializes the LCD, therefore, it MUST be called prior to using any other - method from this class. - - This method is abstract, a base implementation is available common to all LCD - drivers. Should it not be compatible with some other LCD driver, a derived - implementation should be done on the driver specif class. - - @param cols[in] the number of columns that the display has - @param rows[in] the number of rows that the display has - @param charsize[in] character size, default==LCD_5x8DOTS -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a878b36878fa8287093964eba83aace77'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'blink'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '260'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Display the cursor of the LCD. - @discussion Display the blinking LCD cursor. If used in combination with - the cursor() function, the result will depend on the particular display. - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1afa699e0beeeee03cce8cef87eba81c4a'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'clear'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '208'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Clears the LCD. - @discussion Clears the LCD screen and positions the cursor in the upper-left - corner. - - This operation is time consuming for the LCD. - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a91cba8f93c692abcddf8bc3de58d2d3a'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'createChar'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'location'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'charmap'; - sec-mem-param-array = '[]'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '382'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Creates a custom character for use on the LCD. - @discussion Create a custom character (glyph) for use on the LCD. - Most chipsets only support up to eight characters of 5x8 pixels. Therefore, - this methods has been limited to locations (numbered 0 to 7). - - The appearance of each custom character is specified by an array of eight - bytes, one for each row. The five least significant bits of each byte - determine the pixels in that row. To display a custom character on screen, - write()/print() its number, i.e. lcd.print (char(x)); // Where x is 0..7. - - @param location[in] LCD memory location of the character to create - (0 to 7) - @param charmap[in] the bitmap array representing each row of the character. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a194814f64dfa50a90e07e0fe0d361620'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'cursor'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '278'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Display the LCD cursor. - @discussion Display the LCD cursor: an underscore (line) at the location - where the next character will be written. - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a5b07cf05e8e5e7c53654f5ca0cf58b89'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'display'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '242'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Turns on the LCD display. - @discussion Turns on the LCD display, after it's been turned off with - noDisplay(). This will restore the text (and cursor location) that was on - the display prior to calling noDisplay(). - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1aee45ad37f09312f5d9982257e2d37e68'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'home'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '221'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Sets the cursor to the upper-left corner. - @discussion Positions the cursor in the upper-left of the LCD. - That is, use that location in outputting subsequent text to the display. - To also clear the display, use the clear() function instead. - - This operation is time consuming for the LCD. - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a00bb2db1390721abc7b24ac4b8c276c8'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LCD'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '179'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract LiquidCrystal abstract constructor. - @discussion LiquidCrystal class abstract constructor needed to create - the base abstract class. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a238e9f6476dc7df64af04eb6c87f6ac7'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'leftToRight'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '309'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Set the direction for text written to the LCD to left-to-right. - @discussion Set the direction for text written to the LCD to left-to-right. - All subsequent characters written to the display will go from left to right, - but does not affect previously-output text. - - This is the default configuration. - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1aad2abc99d1aca5403873579d9d72c2d4'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'moveCursorLeft'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '330'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Moves the cursor one space to the left. - @discussion - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a09eec0c712e54b066f5894635c1fe75c'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'moveCursorRight'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '339'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Moves the cursor one space to the right. - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a96035dde40efbf73390e00b5beb00231'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'noAutoscroll'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '364'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Turns off automatic scrolling of the LCD. - @discussion Turns off automatic scrolling of the LCD, this is the default - configuration of the LCD. - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a2a331b4e142734411b2f1cfaffe7a488'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'noBacklight'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '411'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Switch-off the LCD backlight. - @discussion Switch-off the LCD backlight. - The setBacklightPin has to be called before setting the backlight for - this method to work. @see setBacklightPin. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a3b755c4b397b5985752be8c30ee1a9b5'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'noBlink'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '250'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Turns off the blinking of the LCD cursor. - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1aec8ffaa1e69c7a6e13ac0cfbc29151d9'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'noCursor'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '268'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Hides the LCD cursor. - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1af3974da6d988ba2d21c25135ada12108'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'noDisplay'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '231'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Turns off the LCD display. - @discussion Turns off the LCD display, without losing the text currently - being displayed on it. - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a191639be183be1476c9bfe6d455d23b2'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'off'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '429'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Switch off the LCD module. - @discussion Switch off the LCD module, it will switch off the LCD controller - and the backlight. This method has the same effect of calling noDisplay and - noBacklight. @see display, @see backlight -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a718da3a638deb59bd1c7a5222a52d98a'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'on'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '420'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Switch on the LCD module. - @discussion Switch on the LCD module, it will switch on the LCD controller - and the backlight. This method has the same effect of calling display and - backlight. @see display, @see backlight -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1ac014830eadc26bfd86308ea8734f4428'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'rightToLeft'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '322'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Set the direction for text written to the LCD to right-to-left. - @discussion Set the direction for text written to the LCD to right-to-left. - All subsequent characters written to the display will go from right to left, - but does not affect previously-output text. - - left-to-right is the default configuration. - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a6f3a503055b3b8dcf0f61b2633c584f7'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'scrollDisplayLeft'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '287'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Scrolls the contents of the display (text and cursor) one space - to the left. - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1abfc44b294772f09020bfa32af8a79571'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'scrollDisplayRight'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '296'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Scrolls the contents of the display (text and cursor) one space - to the right. - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a3305570d7b37eb93f2cf840263c15828'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -virtual void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'setBacklight'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '463'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Sets the pin to control the backlight. - @discussion Sets the pin in the device to control the backlight. The behaviour - of this method is very dependent on the device. Some controllers support - dimming some don't. Please read the actual header file for each individual - device. The setBacklightPin method has to be called before setting the backlight - or the adequate backlight control constructor. - @see setBacklightPin. - - NOTE: The prefered methods to control the backlight are "backlight" and - "noBacklight". - - @param 0..255 - the value is very dependent on the LCD. However, - BACKLIGHT_OFF will be interpreted as off and BACKLIGHT_ON will drive the - backlight on. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a53f4ee9b39d9ab3d7ae4d9f8dedca3bc'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -virtual void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'setBacklightPin'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -t_backlighPol -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'pol'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '444'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Sets the pin to control the backlight. - @discussion Sets the pin in the device to control the backlight. - This method is device dependent and can be programmed on each subclass. An - empty function call is provided that does nothing. - - @param value: pin associated to backlight control. - @param pol: backlight polarity control (POSITIVE, NEGATIVE) -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a48220450fd152b25994eb7d0ba340e8d'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'setCursor'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'col'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'row'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '393'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Position the LCD cursor. - @discussion Sets the position of the LCD cursor. Set the location at which - subsequent text written to the LCD will be displayed. - - @param col[in] LCD column - @param row[in] LCD row - line. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a2d89cc2e62f72afb5f15a7fd812900e3'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -virtual void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'write'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '477'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Writes to the LCD. - @discussion This method writes character to the LCD in the current cursor - position. - - This is the virtual write method, implemented in the Print class, therefore - all Print class methods will end up calling this method. - - @param value[in] Value to write to the LCD. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-section = { - sec-kind = 'protected-attrib'; - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_l_c_d_1a88b16ea0e5c7d1cabc5007d48bcbd2b0'; - sec-mem-virt = normal; - sec-mem-prot = protected; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_cols'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '497'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_l_c_d_1ae47a0e2eff74431a39774b788d5761f4'; - sec-mem-virt = normal; - sec-mem-prot = protected; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_displaycontrol'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '493'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_l_c_d_1aef093ba3f8e1016267b40ac235a0fa0f'; - sec-mem-virt = normal; - sec-mem-prot = protected; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_displayfunction'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '491'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_l_c_d_1a726b9a68d091dd8683a18e83f3a8fd3c'; - sec-mem-virt = normal; - sec-mem-prot = protected; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_displaymode'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '495'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_l_c_d_1ac1374911fb145fea430c21092ada0c06'; - sec-mem-virt = normal; - sec-mem-prot = protected; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_numlines'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '496'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_l_c_d_1a990338759d2abe10b0fb1743b7789566'; - sec-mem-virt = normal; - sec-mem-prot = protected; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -t_backlighPol -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_polarity'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '498'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-section = { - sec-kind = 'private-func'; - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a31a0cb42497d83cdc9cb8000828f7190'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'command'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '513'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Send a command to the LCD. - @discussion This method sends a command to the LCD by setting the Register - select line of the LCD. - - This command shouldn't be used to drive the LCD, only to implement any other - feature that is not available on this library. - - @param value[in] Command value to send to the LCD (COMMAND, DATA or - FOUR_BITS). -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a8a5b6f6f448a6ca6eeb3466c370d47ab'; - sec-mem-virt = virtual; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -virtual void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'send'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'mode'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '529'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Send a particular value to the LCD. - @discussion Sends a particular value to the LCD. This is a pure abstract - method, therefore, it is implementation dependent of each derived class how - to physically write to the LCD. - - Users should never call this method. - - @param value[in] Value to send to the LCD. - @result mode LOW - write to the LCD CGRAM, HIGH - write a command to - the LCD. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-filename = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - cp-fileline = '170'; - cp-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - cp-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - cp-inheritancegraph = <<_EnD_oF_dEf_TeXt_ - node = { - node-id = 5; - node-label = 'LiquidCrystal_SR'; - node-link = { - node-link-id = 'class_liquid_crystal___s_r'; - }; - node-child = { - child-id = '2'; - relation = public-inheritance; - }; /* node-child */ - }; /* node */ - node = { - node-id = 2; - node-label = 'LCD'; - node-link = { - node-link-id = 'class_l_c_d'; - }; - }; /* node */ - node = { - node-id = 3; - node-label = 'LiquidCrystal'; - node-link = { - node-link-id = 'class_liquid_crystal'; - }; - node-child = { - child-id = '2'; - relation = public-inheritance; - }; /* node-child */ - }; /* node */ - node = { - node-id = 4; - node-label = 'LiquidCrystal_I2C'; - node-link = { - node-link-id = 'class_liquid_crystal___i2_c'; - }; - node-child = { - child-id = '2'; - relation = public-inheritance; - }; /* node-child */ - }; /* node */ - node = { - node-id = 6; - node-label = 'LiquidCrystal_SR2W'; - node-link = { - node-link-id = 'class_liquid_crystal___s_r2_w'; - }; - node-child = { - child-id = '2'; - relation = public-inheritance; - }; /* node-child */ - }; /* node */ - node = { - node-id = 7; - node-label = 'LiquidCrystal_SR3W'; - node-link = { - node-link-id = 'class_liquid_crystal___s_r3_w'; - }; - node-child = { - child-id = '2'; - relation = public-inheritance; - }; /* node-child */ - }; /* node */ - -_EnD_oF_dEf_TeXt_; -}; /* class */ -class = { - cp-id = 'class_liquid_crystal'; - cp-name = 'LiquidCrystal'; - cp-ref = { - ref-type = base; - ref-id = 'class_l_c_d'; - ref-prot = public; - ref-virt = non-virtual; - }; - cp-section = { - sec-kind = 'public-func'; - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal_1a49d2bd8d26031a1c83bcbd73978a1686'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'rs'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'enable'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd0'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd1'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd2'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd3'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd4'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd5'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd6'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd7'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '55'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract 8 bit LCD constructors. - @discussion Defines the pin assignment that the LCD will have. - The constructor does not initialize the LCD. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal_1a30e3d865c4b4a003a36cb45903f93644'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'rs'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'rw'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'enable'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd0'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd1'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd2'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd3'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd4'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd5'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd6'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd7'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '58'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal_1ae0c3c8f7661634b1400f00a1c9c02c26'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'rs'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'rw'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'enable'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd0'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd1'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd2'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd3'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd4'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd5'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd6'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd7'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'backlightPin'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -t_backlighPol -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'pol'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '68'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal_1a52a4de3d866e347208a32dfc9d797729'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'rs'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'enable'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd0'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd1'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd2'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd3'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'backlightPin'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -t_backlighPol -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'pol'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '86'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal_1a0a0a8dfa7a2e775a031fd65f5c6366ec'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'rs'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'rw'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'enable'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd0'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd1'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd2'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd3'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '76'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract 4 bit LCD constructors. - @discussion Defines the pin assignment that the LCD will have. - The constructor does not initialize the LCD. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal_1a8b90122c67a6d14b967c8a11ba490670'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'rs'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'rw'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'enable'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd0'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd1'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd2'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd3'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'backlightPin'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -t_backlighPol -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'pol'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '83'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal_1a23124e6dd5ac4a9b6147629b96e91953'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'rs'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'enable'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd0'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd1'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd2'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd3'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '78'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal_1aff2330186495fde93370d46c0ca2cbf0'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'rs'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'enable'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd0'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd1'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd2'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd3'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd4'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd5'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd6'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd7'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'backlightPin'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -t_backlighPol -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'pol'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '64'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal_1a56142f8b3753bedd133e4139e5eb5089'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -virtual void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'send'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'mode'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '99'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Send a particular value to the LCD. - @discussion Sends a particular value to the LCD for writing to the LCD or - as an LCD command. - - Users should never call this method. - - @param value Value to send to the LCD. - @result mode LOW - write to the LCD CGRAM, HIGH - write a command to - the LCD. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal_1aa2b898366e1c656ac313b9007c98cebd'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'setBacklight'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '125'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Switch-on/off the LCD backlight. - @discussion Switch-on/off the LCD backlight. - The setBacklightPin has to be called before setting the backlight for - this method to work. @see setBacklightPin. For dimming control of the - backlight, the configuration pin must be a PWM output pin. Dim control - is achieved by passing a value from 1 to 255 as a parameter. If the - pin configured when calling the setBacklightPin does not support PWM, - then: (0) backlight off, (1..255) backlight on. - - @param value: backlight value. 0: off, 1..255: dim control of the - backlight. For negative logic 255: off, 254..0: dim control. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal_1a63740dc1198d8169a39d9c6daff0efc9'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'setBacklightPin'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'pin'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -t_backlighPol -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'pol'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '109'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Sets the pin to control the backlight. - @discussion Sets the pin in the device to control the backlight. - - @param pin: pin assigned to the backlight - @param pol: backlight pin control polarity (POSITIVE, NEGATIVE). -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-section = { - sec-kind = 'private-func'; - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal_1ae45eec827b26174f73e9cf3ddda635af'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'init'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'fourbitmode'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'rs'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'rw'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'enable'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd0'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd1'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd2'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd3'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd4'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd5'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd6'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd7'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '136'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Initializes the LCD pin allocation and associated HW - @discussion Initializes the LCD pin allocation and configuration. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal_1a44d84c010396c993f124d2feb9dc794d'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'pulseEnable'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '152'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Pulse the LCD enable line (En). - @discussion Sends a pulse of 1 uS to the Enable pin to execute an command - or write operation. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal_1a641301bc315a4e167c5aee7ea99993fd'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'writeNbits'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'numBits'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '144'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Writes numBits bits from value value to the LCD. - @discussion Writes numBists bits (the least significant) to the LCD control - data lines. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-section = { - sec-kind = 'private-attrib'; - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal_1a23a1807a1fe4210ac7cfca9b779513ea'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_backlightPin'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '158'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal_1a0b2da39d056aed9940b0525e554668d7'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_data_pins'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '157'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal_1aef7d920abae32b5faa2625ffa3879c4b'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_enable_pin'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '156'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal_1affd20665bda00d8b0e37d5ee87543e81'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_rs_pin'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '154'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal_1a29061eaa64c2e9f3b985ff52249b62a9'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_rw_pin'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '155'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-filename = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - cp-fileline = '45'; - cp-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - cp-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - cp-inheritancegraph = <<_EnD_oF_dEf_TeXt_ - node = { - node-id = 10; - node-label = 'LCD'; - node-link = { - node-link-id = 'class_l_c_d'; - }; - }; /* node */ - node = { - node-id = 9; - node-label = 'LiquidCrystal'; - node-link = { - node-link-id = 'class_liquid_crystal'; - }; - node-child = { - child-id = '10'; - relation = public-inheritance; - }; /* node-child */ - }; /* node */ - -_EnD_oF_dEf_TeXt_; - cp-collaborationgraph = <<_EnD_oF_dEf_TeXt_ - node = { - node-id = 12; - node-label = 'LCD'; - node-link = { - node-link-id = 'class_l_c_d'; - }; - }; /* node */ - node = { - node-id = 11; - node-label = 'LiquidCrystal'; - node-link = { - node-link-id = 'class_liquid_crystal'; - }; - node-child = { - child-id = '12'; - relation = public-inheritance; - }; /* node-child */ - }; /* node */ - -_EnD_oF_dEf_TeXt_; -}; /* class */ -class = { - cp-id = 'class_liquid_crystal___i2_c'; - cp-name = 'LiquidCrystal_I2C'; - cp-ref = { - ref-type = base; - ref-id = 'class_l_c_d'; - ref-prot = public; - ref-virt = non-virtual; - }; - cp-section = { - sec-kind = 'public-func'; - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___i2_c_1aeee2ada537f0cfbfda8613324b57c4a6'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -virtual void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'begin'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'cols'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'rows'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'charsize'; - sec-mem-param-defval = <<_EnD_oF_dEf_TeXt_ -LCD_5x8DOTS -_EnD_oF_dEf_TeXt_; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '110'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract LCD initialization and associated HW. - @discussion Initializes the LCD to a given size (col, row). This methods - initializes the LCD, therefore, it MUST be called prior to using any other - method from this class or parent class. - - The begin method can be overloaded if necessary to initialize any HW that - is implemented by a library and can't be done during construction, here - we use the Wire class. - - @param cols[in] the number of columns that the display has - @param rows[in] the number of rows that the display has - @param charsize[in] size of the characters of the LCD: LCD_5x8DOTS or - LCD_5x10DOTS. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___i2_c_1a9fc9bc519ebbf7503dadc11622e02ed6'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal_I2C'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'lcd_Addr'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'backlighPin'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -t_backlighPol -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'pol'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '53'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___i2_c_1add1f2da7de4ec9b9cd5c9b5fab712464'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal_I2C'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'lcd_Addr'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'En'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'Rw'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'Rs'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'backlighPin'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -t_backlighPol -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'pol'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '70'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___i2_c_1a7d9b54d3a91fa0e0e50db27cda6b4654'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal_I2C'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'lcd_Addr'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'En'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'Rw'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'Rs'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd4'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd5'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd6'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd7'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '89'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Class constructor. - @discussion Initializes class variables and defines the I2C address of the - LCD. The constructor does not initialize the LCD. - - @param lcd_Addr[in] I2C address of the IO expansion module. For I2CLCDextraIO, - the address can be configured using the on board jumpers. - @param En[in] LCD En (Enable) pin connected to the IO extender module - @param Rw[in] LCD Rw (Read/write) pin connected to the IO extender module - @param Rs[in] LCD Rs (Reset) pin connected to the IO extender module - @param d4[in] LCD data 0 pin map on IO extender module - @param d5[in] LCD data 1 pin map on IO extender module - @param d6[in] LCD data 2 pin map on IO extender module - @param d7[in] LCD data 3 pin map on IO extender module -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___i2_c_1a517f8847ebf09f0eacfb9c7232975fce'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal_I2C'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'lcd_Addr'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'En'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'Rw'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'Rs'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '67'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Class constructor. - @discussion Initializes class variables and defines the I2C address of the - LCD. The constructor does not initialize the LCD. - - @param lcd_Addr[in] I2C address of the IO expansion module. For I2CLCDextraIO, - the address can be configured using the on board jumpers. - @param En[in] LCD En (Enable) pin connected to the IO extender module - @param Rw[in] LCD Rw (Read/write) pin connected to the IO extender module - @param Rs[in] LCD Rs (Reset) pin connected to the IO extender module -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___i2_c_1ab15622287533de7a47f3e2012ebf18be'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal_I2C'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'lcd_Addr'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'En'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'Rw'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'Rs'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd4'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd5'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd6'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd7'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'backlighPin'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -t_backlighPol -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'pol'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '93'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___i2_c_1aac537d195557e0b8afac1a71441a484c'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal_I2C'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'lcd_Addr'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '51'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Class constructor. - @discussion Initializes class variables and defines the I2C address of the - LCD. The constructor does not initialize the LCD. - - @param lcd_Addr[in] I2C address of the IO expansion module. For I2CLCDextraIO, - the address can be configured using the on board jumpers. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___i2_c_1a8bf1fab7efe13e8b17b96c42d1f810b4'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -virtual void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'send'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'mode'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '124'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Send a particular value to the LCD. - @discussion Sends a particular value to the LCD for writing to the LCD or - as an LCD command. - - Users should never call this method. - - @param value[in] Value to send to the LCD. - @param mode[in] DATA - write to the LCD CGRAM, COMMAND - write a - command to the LCD. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___i2_c_1af11b8fa0082616e2b6e6e4238589d8a8'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'setBacklight'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '145'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Switch-on/off the LCD backlight. - @discussion Switch-on/off the LCD backlight. - The setBacklightPin has to be called before setting the backlight for - this method to work. @see setBacklightPin. - - @param value: backlight mode (HIGH|LOW) -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___i2_c_1a2eaf86f62d1f169b3763b03fbf88f70b'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'setBacklightPin'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -t_backlighPol -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'pol'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '134'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Sets the pin to control the backlight. - @discussion Sets the pin in the device to control the backlight. This device - doesn't support dimming backlight capability. - - @param 0: backlight off, 1..255: backlight on. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-section = { - sec-kind = 'private-func'; - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___i2_c_1adb997350478bdc0ab8eb5cc5623a2ad9'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'config'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'lcd_Addr'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'En'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'Rw'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'Rs'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd4'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd5'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd6'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd7'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '172'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Initialises class private variables - @discussion This is the class single point for initialising private variables. - - @param lcd_Addr[in] I2C address of the IO expansion module. For I2CLCDextraIO, - the address can be configured using the on board jumpers. - @param En[in] LCD En (Enable) pin connected to the IO extender module - @param Rw[in] LCD Rw (Read/write) pin connected to the IO extender module - @param Rs[in] LCD Rs (Reset) pin connected to the IO extender module - @param d4[in] LCD data 0 pin map on IO extender module - @param d5[in] LCD data 1 pin map on IO extender module - @param d6[in] LCD data 2 pin map on IO extender module - @param d7[in] LCD data 3 pin map on IO extender module -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___i2_c_1a459c4fa106fb7bac5940e3c6aea736af'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -int -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'init'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '154'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Initializes the LCD class - @discussion Initializes the LCD class and IO expansion module. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___i2_c_1a1d715dbf40f06b4c15004cd356b5a321'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'pulseEnable'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-defname = 'data'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '190'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Pulse the LCD enable line (En). - @discussion Sends a pulse of 1 uS to the Enable pin to execute an command - or write operation. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___i2_c_1a60111950cc0a47e6223c22949faa15f3'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'write4bits'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'mode'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '182'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Writes an 4 bit value to the LCD. - @discussion Writes 4 bits (the least significant) to the LCD control data lines. - @param value[in] Value to write to the LCD - @param more[in] Value to distinguish between command and data. - COMMAND == command, DATA == data. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-section = { - sec-kind = 'private-attrib'; - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___i2_c_1a0bb3cc7ec414b373ef00e0cc6642ec88'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_Addr'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '193'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___i2_c_1a9d59c16cde5c3ffb30a881e9a61c9a32'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_backlightPinMask'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '194'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___i2_c_1a0eaa7c2ac1040a1786960618866c066e'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_backlightStsMask'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '195'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___i2_c_1a3436246b17062357066c636aa598b49d'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_data_pins'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '200'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___i2_c_1aa0a878e97b6111abf1bc8d767a548cf2'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_En'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '197'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___i2_c_1adcc89f14c444ff086f544f33fc18ca4c'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -I2CIO -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_i2cio'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '196'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___i2_c_1ab70fc18e99a70e3293c4f6ba25c37efa'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_Rs'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '199'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___i2_c_1a882df32eb9ae0e7a1b74f9a8ee4bffe9'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_Rw'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '198'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-filename = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - cp-fileline = '39'; - cp-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - cp-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - cp-inheritancegraph = <<_EnD_oF_dEf_TeXt_ - node = { - node-id = 14; - node-label = 'LCD'; - node-link = { - node-link-id = 'class_l_c_d'; - }; - }; /* node */ - node = { - node-id = 13; - node-label = 'LiquidCrystal_I2C'; - node-link = { - node-link-id = 'class_liquid_crystal___i2_c'; - }; - node-child = { - child-id = '14'; - relation = public-inheritance; - }; /* node-child */ - }; /* node */ - -_EnD_oF_dEf_TeXt_; - cp-collaborationgraph = <<_EnD_oF_dEf_TeXt_ - node = { - node-id = 16; - node-label = 'LCD'; - node-link = { - node-link-id = 'class_l_c_d'; - }; - }; /* node */ - node = { - node-id = 15; - node-label = 'LiquidCrystal_I2C'; - node-link = { - node-link-id = 'class_liquid_crystal___i2_c'; - }; - node-child = { - child-id = '16'; - relation = public-inheritance; - }; /* node-child */ - node-child = { - child-id = '17'; - relation = usage; - edgelabel = <<_EnD_oF_dEf_TeXt_ -_i2cio -_EnD_oF_dEf_TeXt_; - }; /* node-child */ - }; /* node */ - node = { - node-id = 17; - node-label = 'I2CIO'; - node-link = { - node-link-id = 'class_i2_c_i_o'; - }; - }; /* node */ - -_EnD_oF_dEf_TeXt_; -}; /* class */ -class = { - cp-id = 'class_liquid_crystal___s_r'; - cp-name = 'LiquidCrystal_SR'; - cp-ref = { - ref-type = base; - ref-id = 'class_l_c_d'; - ref-prot = public; - ref-virt = non-virtual; - }; - cp-section = { - sec-kind = 'public-func'; - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r_1ac3fe0b48f8d4c1c941d82d1333495cfc'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal_SR'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'srdata'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'srclock'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'enable'; - sec-mem-param-defval = <<_EnD_oF_dEf_TeXt_ -TWO_WIRE -_EnD_oF_dEf_TeXt_; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; - sec-mem-desc-line = '108'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract LCD SHIFT REGISTER constructors. - @discussion Defines the pin assignment that the LCD will have. - The constructor does not initialize the LCD. Assuming 1 line 8 pixel high - font. - - @param srdata[in] pin for shiftregister data line. - @param srclock[in] pin for shiftregister clock line. - @param enable[in] optional direct enable pin for the LCD -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r_1a03821351a32db07cb7e42c8c11ce8d47'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -virtual void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'send'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'mode'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; - sec-mem-desc-line = '122'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Send a particular value to the LCD. - @discussion Sends a particular value to the LCD for writing to the LCD or - as an LCD command using the shift register. - - Users should never call this method. - - @param value[in] Value to send to the LCD. - @result mode LOW - write to the LCD CGRAM, HIGH - write a command to - the LCD. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r_1ad9f3e3f36257984c23fb508973e14535'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'setBacklight'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'mode'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; - sec-mem-desc-line = '145'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Switch-on/off the LCD backlight. - @discussion Switch-on/off the LCD backlight. - The setBacklightPin has to be called before setting the backlight for - this method to work. @see setBacklightPin. - - @param mode: backlight mode (HIGH|LOW) -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r_1a5bfc0dcc1f042bcb59992493a3a7231d'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'setBacklightPin'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'pin'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -t_backlighPol -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'pol'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; - sec-mem-desc-line = '134'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Sets the pin to control the backlight. - @discussion Sets the pin in the device to control the backlight. - @warning Currently not supported - - @param mode: backlight mode (HIGH|LOW) - @param pol: backlight polarity -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-section = { - sec-kind = 'private-func'; - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r_1a0f15bf3f5041a91469da5fd75aba5d5e'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'init'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'srdata'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'srclock'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'enable'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'lines'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'font'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; - sec-mem-desc-line = '155'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Initializes the LCD pin allocation - @discussion Initializes the LCD pin allocation and configuration. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r_1a2684630ad69618fab065f53eea543df8'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'shiftIt'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'val'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; - sec-mem-desc-line = '161'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract takes care of shifting and the enable pulse -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-section = { - sec-kind = 'private-attrib'; - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r_1acee96e0ef397441bdde73ca921160476'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_enable_pin'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; - sec-mem-desc-line = '163'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r_1a68bffb6befc28cb716fb0c48b50f65fc'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_srClockBit'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; - sec-mem-desc-line = '169'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r_1a507726b30de4b552b4e32faf9a3aa9e3'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_srClockRegister'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; - sec-mem-desc-line = '168'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r_1a9984b207beddba9ff299f9356f891065'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_srDataBit'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; - sec-mem-desc-line = '167'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r_1a1e5bf3e5c6ec5b6c41f6949b6e34fd34'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_srDataRegister'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; - sec-mem-desc-line = '166'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r_1a12e3ee583d454d5f52223beca91f5bae'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_srEnableBit'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; - sec-mem-desc-line = '171'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r_1adab0eb2bb7392a77375034530bf230eb'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_srEnableRegister'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; - sec-mem-desc-line = '170'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r_1ad20f9d3282b047fdbae8e97b07d4fc89'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_two_wire'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; - sec-mem-desc-line = '164'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-filename = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; - cp-fileline = '95'; - cp-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - cp-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - cp-inheritancegraph = <<_EnD_oF_dEf_TeXt_ - node = { - node-id = 18; - node-label = 'LiquidCrystal_SR'; - node-link = { - node-link-id = 'class_liquid_crystal___s_r'; - }; - node-child = { - child-id = '19'; - relation = public-inheritance; - }; /* node-child */ - }; /* node */ - node = { - node-id = 19; - node-label = 'LCD'; - node-link = { - node-link-id = 'class_l_c_d'; - }; - }; /* node */ - -_EnD_oF_dEf_TeXt_; - cp-collaborationgraph = <<_EnD_oF_dEf_TeXt_ - node = { - node-id = 20; - node-label = 'LiquidCrystal_SR'; - node-link = { - node-link-id = 'class_liquid_crystal___s_r'; - }; - node-child = { - child-id = '21'; - relation = public-inheritance; - }; /* node-child */ - }; /* node */ - node = { - node-id = 21; - node-label = 'LCD'; - node-link = { - node-link-id = 'class_l_c_d'; - }; - }; /* node */ - -_EnD_oF_dEf_TeXt_; -}; /* class */ -class = { - cp-id = 'class_liquid_crystal___s_r2_w'; - cp-name = 'LiquidCrystal_SR2W'; - cp-ref = { - ref-type = base; - ref-id = 'class_l_c_d'; - ref-prot = public; - ref-virt = non-virtual; - }; - cp-section = { - sec-kind = 'public-func'; - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r2_w_1af307fdf5c8feb757e965074dcdeb1dd3'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal_SR2W'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'srdata'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'srclock'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -t_backlighPol -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'blpol'; - sec-mem-param-defval = <<_EnD_oF_dEf_TeXt_ -POSITIVE -_EnD_oF_dEf_TeXt_; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; - sec-mem-desc-line = '151'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract LCD 2 wire SHIFT REGISTER constructor. - @discussion Defines the pin assignments that connect to the shift register. - The constructor does not initialize the LCD. Assuming 1 line 8 pixel high - font. - - @param srdata[in] Arduino pin for shift register data line. - @param srclock[in] Arduino pin for shift register clock line. - @param blpol[in] optional backlight polarity (default = POSITIVE) -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r2_w_1a65dc6f261c319be8e56f3c1f6a5c877d'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -virtual void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'send'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'mode'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; - sec-mem-desc-line = '165'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Send a particular value to the LCD. - @discussion Sends a particular value to the LCD for writing to the LCD or - as an LCD command using the shift register. - - Users should never call this method. - - @param value[in] Value to send to the LCD. - @param mode[in] DATA=8bit data, COMMAND=8bit cmd, FOUR_BITS=4bit cmd - the LCD. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r2_w_1a2158db27287c1564a03e7a1472beb3b6'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'setBacklight'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'mode'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; - sec-mem-desc-line = '177'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Switch-on/off the LCD backlight. - @discussion Switch-on/off the LCD backlight. - The setBacklightPin has to be called before setting the backlight for - this method to work. @see setBacklightPin. - - @param mode[in] backlight mode (0 off, non-zero on) -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-section = { - sec-kind = 'private-func'; - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r2_w_1a12c14153e7056cb4a98310529bace6a8'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'init'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'srdata'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'srclock'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -t_backlighPol -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'blpol'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'lines'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'font'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; - sec-mem-desc-line = '186'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Initializes the LCD pin allocation - @discussion Initializes the LCD pin allocation and configuration. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r2_w_1ae369efcd3fca47a018a034f5f4a1679b'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'loadSR'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'val'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; - sec-mem-desc-line = '192'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract takes care of shifting and the enable pulse -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-section = { - sec-kind = 'private-attrib'; - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r2_w_1a3b1dfb83ad02274c30fa940a10619737'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_blMask'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; - sec-mem-desc-line = '200'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r2_w_1a906f803e1ae324b5383fa004093124f4'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_blPolarity'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; - sec-mem-desc-line = '199'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r2_w_1a27727d63c1ce0f9aada630814b8f022b'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_srClockMask'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; - sec-mem-desc-line = '197'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r2_w_1aa36d38c009bf846e7726fc48c0067fc3'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_srClockRegister'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; - sec-mem-desc-line = '196'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r2_w_1ad188042fdcc7df0178248401c678eb8e'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_srDataMask'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; - sec-mem-desc-line = '195'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r2_w_1a2e43c3f1d6b0e5599a1b4d14ef428077'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_srDataRegister'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; - sec-mem-desc-line = '194'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-filename = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; - cp-fileline = '138'; - cp-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - cp-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - cp-inheritancegraph = <<_EnD_oF_dEf_TeXt_ - node = { - node-id = 23; - node-label = 'LCD'; - node-link = { - node-link-id = 'class_l_c_d'; - }; - }; /* node */ - node = { - node-id = 22; - node-label = 'LiquidCrystal_SR2W'; - node-link = { - node-link-id = 'class_liquid_crystal___s_r2_w'; - }; - node-child = { - child-id = '23'; - relation = public-inheritance; - }; /* node-child */ - }; /* node */ - -_EnD_oF_dEf_TeXt_; - cp-collaborationgraph = <<_EnD_oF_dEf_TeXt_ - node = { - node-id = 25; - node-label = 'LCD'; - node-link = { - node-link-id = 'class_l_c_d'; - }; - }; /* node */ - node = { - node-id = 24; - node-label = 'LiquidCrystal_SR2W'; - node-link = { - node-link-id = 'class_liquid_crystal___s_r2_w'; - }; - node-child = { - child-id = '25'; - relation = public-inheritance; - }; /* node-child */ - }; /* node */ - -_EnD_oF_dEf_TeXt_; -}; /* class */ -class = { - cp-id = 'class_liquid_crystal___s_r3_w'; - cp-name = 'LiquidCrystal_SR3W'; - cp-ref = { - ref-type = base; - ref-id = 'class_l_c_d'; - ref-prot = public; - ref-virt = non-virtual; - }; - cp-section = { - sec-kind = 'public-func'; - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r3_w_1ae1396bcd5e9c5b7ed13182c166de776b'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal_SR3W'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'data'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'clk'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'strobe'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - sec-mem-desc-line = '90'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Class constructor. - @discussion Initializes class variables and defines the IO driving the - shift register. The constructor does not initialize the LCD. - Default configuration: - Shift register LCD - QA - 0 DB4 - QB - 1 DB5 - QC - 2 DB6 - QD - 3 DB7 - QE - 4 E - QF - 5 - QG - 6 Rs - GND Rw - - @param strobe[in] digital IO connected to shiftregister strobe pin. - @param data[in] digital IO connected to the shiftregister data pin. - @param clk[in] digital IO connected to the shiftregister clock pin. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r3_w_1a7b2f382b76bc9d88adb8d681e824b4de'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal_SR3W'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'data'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'clk'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'strobe'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'backlighPin'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -t_backlighPol -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'pol'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - sec-mem-desc-line = '93'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r3_w_1a24f051747dfeda48f7b207c3358c8015'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal_SR3W'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'data'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'clk'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'strobe'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'En'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'Rw'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'Rs'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd4'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd5'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd6'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd7'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'backlighPin'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -t_backlighPol -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'pol'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - sec-mem-desc-line = '119'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r3_w_1a4fab8ff2f21bba3efd133cd8c87fffc0'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal_SR3W'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'data'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'clk'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'strobe'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'En'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'Rw'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'Rs'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd4'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd5'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd6'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd7'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - sec-mem-desc-line = '114'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Class constructor. - @discussion Initializes class variables and defines the control lines of - the LCD and the shiftregister. The constructor does not initialize the LCD. - - @param strobe[in] digital IO connected to shiftregister strobe pin. - @param data[in] digital IO connected to shiftregister data pin. - @param clk[in] digital IO connected to shiftregister clock pin. - @param En[in] LCD En (Enable) pin connected to SR output pin. - @param Rw[in] LCD Rw (Read/write) pin connected to SR output pin. - @param Rs[in] LCD Rs (Reg Select) pin connected to SR output pin. - @param d4[in] LCD data 4 pin map to the SR output pin. - @param d5[in] LCD data 5 pin map to the SR output pin. - @param d6[in] LCD data 6 pin map to the SR output pin. - @param d7[in] LCD data 7 pin map to the SR output pin. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r3_w_1ade34af5b7fe795482f1848c2176d6e56'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -virtual void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'send'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'mode'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - sec-mem-desc-line = '133'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Send a particular value to the LCD. - @discussion Sends a particular value to the LCD for writing to the LCD or - as an LCD command. - - Users should never call this method. - - @param value[in] Value to send to the LCD. - @param mode[in] DATA - write to the LCD CGRAM, COMMAND - write a - command to the LCD. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r3_w_1a6d0fc7907ef9fd87c408a21b9bd49295'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'setBacklight'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - sec-mem-desc-line = '154'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Switch-on/off the LCD backlight. - @discussion Switch-on/off the LCD backlight. - The setBacklightPin has to be called before setting the backlight for - this method to work. @see setBacklightPin. - - @param value: backlight mode (HIGH|LOW) -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r3_w_1a894d0ea8ea61c1d15acd8a26d417e477'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'setBacklightPin'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -t_backlighPol -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'pol'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - sec-mem-desc-line = '143'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Sets the pin to control the backlight. - @discussion Sets the pin in the device to control the backlight. This device - doesn't support dimming backlight capability. - - @param 0: backlight off, 1..255: backlight on. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-section = { - sec-kind = 'private-func'; - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r3_w_1a45cde916021d9b52b0f769c17886b2ef'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -int -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'init'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'data'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'clk'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'strobe'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'Rs'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'Rw'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'En'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd4'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd5'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd6'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd7'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - sec-mem-desc-line = '165'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Initializes the LCD class - @discussion Initializes the LCD class and IO expansion module. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r3_w_1a80f6e4e8b10635d9daed718f2918c1bd'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'loadSR'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - sec-mem-desc-line = '183'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract load into the shift register a byte - @discussion loads into the shift register a byte - @param value[in]: value to be loaded into the shiftregister. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___s_r3_w_1ac0702caa5d07ffd8e832ad8a5d0afe7c'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'write4bits'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'mode'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - sec-mem-desc-line = '175'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Writes an 4 bit value to the LCD. - @discussion Writes 4 bits (the least significant) to the LCD control data lines. - @param value[in] Value to write to the LCD - @param more[in] Value to distinguish between command and data. - COMMAND == command, DATA == data. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-section = { - sec-kind = 'private-attrib'; - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r3_w_1a21ef2e5b78edd0d160d81b0c06d41440'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_backlightPinMask'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - sec-mem-desc-line = '196'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r3_w_1adf17379bfac4def5c780fc8ad023764c'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_backlightStsMask'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - sec-mem-desc-line = '197'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r3_w_1a2c14746e8f626a53f777c8df68f8a92b'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_clk'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - sec-mem-desc-line = '190'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r3_w_1af7d09207dffb9f2fc85fc60661ffa0d4'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_clk_reg'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - sec-mem-desc-line = '191'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r3_w_1ab81049d446d2e7399ee6b20c9da4cdde'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_data'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - sec-mem-desc-line = '188'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r3_w_1a366adab314f5dc8b7e53298d6eccf85d'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_data_pins'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - sec-mem-desc-line = '195'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r3_w_1a301acb36345c56ae336156fdeee4a783'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_data_reg'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - sec-mem-desc-line = '189'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r3_w_1a4306c59b6bf3870fecad23d6b0c0aa5d'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_En'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - sec-mem-desc-line = '192'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r3_w_1a062da9fb985a7e88128d7d95fd8239d6'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_Rs'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - sec-mem-desc-line = '194'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r3_w_1aef47417b089e53af1ce032e5f1b23b43'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_Rw'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - sec-mem-desc-line = '193'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r3_w_1a0d40b3c14c3f56fd341d41220f425925'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_strobe'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - sec-mem-desc-line = '186'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___s_r3_w_1a2a7d9703b04a91658b7a590b926ff9cd'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_strobe_reg'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - sec-mem-desc-line = '187'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-filename = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - cp-fileline = '67'; - cp-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - cp-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - cp-inheritancegraph = <<_EnD_oF_dEf_TeXt_ - node = { - node-id = 27; - node-label = 'LCD'; - node-link = { - node-link-id = 'class_l_c_d'; - }; - }; /* node */ - node = { - node-id = 26; - node-label = 'LiquidCrystal_SR3W'; - node-link = { - node-link-id = 'class_liquid_crystal___s_r3_w'; - }; - node-child = { - child-id = '27'; - relation = public-inheritance; - }; /* node-child */ - }; /* node */ - -_EnD_oF_dEf_TeXt_; - cp-collaborationgraph = <<_EnD_oF_dEf_TeXt_ - node = { - node-id = 29; - node-label = 'LCD'; - node-link = { - node-link-id = 'class_l_c_d'; - }; - }; /* node */ - node = { - node-id = 28; - node-label = 'LiquidCrystal_SR3W'; - node-link = { - node-link-id = 'class_liquid_crystal___s_r3_w'; - }; - node-child = { - child-id = '29'; - relation = public-inheritance; - }; /* node-child */ - }; /* node */ - -_EnD_oF_dEf_TeXt_; -}; /* class */ -file = { - file-id = '_fast_i_o_8cpp'; - file-name = 'FastIO.cpp'; - func = { - func-member = { - func-mem-kind = 'function'; - func-mem-id = '_fast_i_o_8cpp_1a83fc2fdc19ab3f9aade9e1a2f39e81a6'; - func-mem-virt = normal; - func-mem-prot = public; - func-mem-type = <<_EnD_oF_dEf_TeXt_ -int -_EnD_oF_dEf_TeXt_; - func-mem-name = 'fio_digitalRead'; - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'pinRegister'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'pinBit'; - }; /* func-mem-param--param */ - func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; - func-mem-desc-line = '96'; - func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - func-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract direct digital read - @discussion without any checks - @discussion falls back to normal digitalRead if fast io is disabled - @param pinRegister[in] Register - ignored if fast io is disabled - @param pinBit[in] Bit - Pin if fast io is disabled - @result Value read from pin -_EnD_oF_dEf_TeXt_; - }; /* func-member */ - func-member = { - func-mem-kind = 'function'; - func-mem-id = '_fast_i_o_8cpp_1ae91bbe682b02a5842c291055c0e998b5'; - func-mem-virt = normal; - func-mem-prot = public; - func-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - func-mem-name = 'fio_digitalWrite'; - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'pinRegister'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'pinBit'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'value'; - }; /* func-mem-param--param */ - func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; - func-mem-desc-line = '77'; - func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - func-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract direct digital write - @discussion without any checks - @discussion falls back to normal digitalWrite if fast io is disabled - @param pinRegister[in] Register - ignored if fast digital write is disabled - @param pinBit[in] Bit - Pin if fast digital write is disabled - @param value[in] desired output -_EnD_oF_dEf_TeXt_; - }; /* func-member */ - func-member = { - func-mem-kind = 'function'; - func-mem-id = '_fast_i_o_8cpp_1a07a19dfbdca1afaca5d666bdaa3be7d5'; - func-mem-virt = normal; - func-mem-prot = public; - func-mem-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - func-mem-name = 'fio_pinToBit'; - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'pin'; - }; /* func-mem-param--param */ - func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; - func-mem-desc-line = '66'; - func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - func-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Find the bit which belongs to specified pin - @discussion if fast digitalWrite is disabled this function returns the pin - @param pin[in] Number of a digital pin - @result Bit -_EnD_oF_dEf_TeXt_; - }; /* func-member */ - func-member = { - func-mem-kind = 'function'; - func-mem-id = '_fast_i_o_8cpp_1afb934fc0ded94cbb5ed8ed14e2a123ed'; - func-mem-virt = normal; - func-mem-prot = public; - func-mem-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - func-mem-name = 'fio_pinToInputRegister'; - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'pin'; - }; /* func-mem-param--param */ - func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; - func-mem-desc-line = '53'; - func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - func-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Get the input register for specified pin. - @discussion if fast digital IO is disabled this function returns NULL - @param pin[in] Number of a digital pin - @result Register -_EnD_oF_dEf_TeXt_; - }; /* func-member */ - func-member = { - func-mem-kind = 'function'; - func-mem-id = '_fast_i_o_8cpp_1a04210cc785c3b4a11c86f794949c327f'; - func-mem-virt = normal; - func-mem-prot = public; - func-mem-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - func-mem-name = 'fio_pinToOutputRegister'; - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'pin'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'initial_state'; - }; /* func-mem-param--param */ - func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; - func-mem-desc-line = '36'; - func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - func-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Get the output register for specified pin. - @discussion if fast digital IO is disabled this function returns NULL - @param pin[in] Number of a digital pin - @result Register -_EnD_oF_dEf_TeXt_; - }; /* func-member */ - func-member = { - func-mem-kind = 'function'; - func-mem-id = '_fast_i_o_8cpp_1a5d8d5977294d614d15bda19f75d6b787'; - func-mem-virt = normal; - func-mem-prot = public; - func-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - func-mem-name = 'fio_shiftOut'; - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'dataRegister'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'dataBit'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'clockRegister'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'clockBit'; - }; /* func-mem-param--param */ - func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; - func-mem-desc-line = '161'; - func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - func-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract faster shift out clear - @discussion using fast digital write - @discussion falls back to normal digitalWrite if fastio is disabled - @param dataRegister[in] Register of data pin - ignored if fast digital write is disabled - @param dataBit[in] Bit of data pin - Pin if fast digital write is disabled - @param clockRegister[in] Register of data pin - ignored if fast digital write is disabled - @param clockBit[in] Bit of data pin - Pin if fast digital write is disabled -_EnD_oF_dEf_TeXt_; - }; /* func-member */ - func-member = { - func-mem-kind = 'function'; - func-mem-id = '_fast_i_o_8cpp_1a56c72b9f00680662229895ab22aaa743'; - func-mem-virt = normal; - func-mem-prot = public; - func-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - func-mem-name = 'fio_shiftOut'; - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'dataRegister'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'dataBit'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'clockRegister'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'clockBit'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'value'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'bitOrder'; - }; /* func-mem-param--param */ - func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; - func-mem-desc-line = '111'; - func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - func-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract faster shift out - @discussion using fast digital write - @discussion falls back to normal digitalWrite if fastio is disabled - @param dataRegister[in] Register of data pin - ignored if fast digital write is disabled - @param dataBit[in] Bit of data pin - Pin if fast digital write is disabled - @param clockRegister[in] Register of data pin - ignored if fast digital write is disabled - @param clockBit[in] Bit of data pin - Pin if fast digital write is disabled - @param bitOrder[in] bit order -_EnD_oF_dEf_TeXt_; - }; /* func-member */ - func-member = { - func-mem-kind = 'function'; - func-mem-id = '_fast_i_o_8cpp_1a7ac8b242e7e3cacf175e481889e047dd'; - func-mem-virt = normal; - func-mem-prot = public; - func-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - func-mem-name = 'fio_shiftOut1'; - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'pin'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'value'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -boolean -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'noLatch'; - }; /* func-mem-param--param */ - func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; - func-mem-desc-line = '265'; - func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - func-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract one wire shift out - @discussion protocol needs initialisation (fio_shiftOut1_init) - @param pin[in] digital pin - @param value[in] value to shift out, last byte is ignored and always shifted out LOW -_EnD_oF_dEf_TeXt_; - }; /* func-member */ - func-member = { - func-mem-kind = 'function'; - func-mem-id = '_fast_i_o_8cpp_1a5b4d1684030dc620938b7c2fbdf5ced8'; - func-mem-virt = normal; - func-mem-prot = public; - func-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - func-mem-name = 'fio_shiftOut1'; - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'shift1Register'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'shift1Bit'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'value'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -boolean -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'noLatch'; - }; /* func-mem-param--param */ - func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; - func-mem-desc-line = '192'; - func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - func-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract one wire shift out - @discussion protocol needs initialisation (fio_shiftOut1_init) - @param shift1Register[in] pins register - @param shift1Bit[in] pins bit - @param value[in] value to shift out, last byte is ignored and always shifted out LOW -_EnD_oF_dEf_TeXt_; - }; /* func-member */ - func-member = { - func-mem-kind = 'function'; - func-mem-id = '_fast_i_o_8cpp_1a2d0e4495eb12504255bbd3f82405b17b'; - func-mem-virt = normal; - func-mem-prot = public; - func-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - func-mem-name = 'fio_shiftOut1_init'; - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'shift1Register'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'shift1Bit'; - }; /* func-mem-param--param */ - func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; - func-mem-desc-line = '182'; - func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - func-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract initializes one wire shift out protocol - @discussion Puts pin to HIGH state and delays until Capacitors are charged. - @param shift1Register[in] pins register - @param shift1Bit[in] pins bit -_EnD_oF_dEf_TeXt_; - }; /* func-member */ - func-member = { - func-mem-kind = 'function'; - func-mem-id = '_fast_i_o_8cpp_1ae4b2e099f8ade9ee674d1565669e870a'; - func-mem-virt = normal; - func-mem-prot = public; - func-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - func-mem-name = 'fio_shiftOut1_init'; - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'pin'; - }; /* func-mem-param--param */ - func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; - func-mem-desc-line = '177'; - func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - func-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract initializes one wire shift out protocol - @discussion Puts pin to HIGH state and delays until Capacitors are charged. - @param pin[in] digital pin -_EnD_oF_dEf_TeXt_; - }; /* func-member */ - }; - file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.cpp'; - file-first-line = '1'; - file-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - file-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* file */ -file = { - file-id = '_fast_i_o_8h'; - file-name = 'FastIO.h'; - define = { - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_fast_i_o_8h_1a04971fe5fabe4129736708c494e08e6d'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'ATOMIC_BLOCK'; - define-mem-param = { - define-mem-def-name = 'dummy'; - }; /* define-mem-def--param */ - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -if(true) -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; - define-mem-desc-line = '58'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_fast_i_o_8h_1a362c18b15a09703e42e1c246c47420ef'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'ATOMIC_RESTORESTATE'; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; - define-mem-desc-line = '59'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_fast_i_o_8h_1a89e1c62276052100c62b6c82a2e95622'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'fio_digitalWrite_HIGH'; - define-mem-param = { - define-mem-def-name = 'reg'; - }; /* define-mem-def--param */ - define-mem-param = { - define-mem-def-name = 'bit'; - }; /* define-mem-def--param */ - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -digitalWrite(bit,HIGH) -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; - define-mem-desc-line = '143'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - This is where the magic happens that makes things fast. - Implemented as preprocessor directives to force inlining - SWITCH is fast for FIO but probably slow for FIO_FALLBACK so SWITCHTO is recommended if the value is known. -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_fast_i_o_8h_1ac8f00a1bccb98109531b88fbb6e91478'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'fio_digitalWrite_LOW'; - define-mem-param = { - define-mem-def-name = 'reg'; - }; /* define-mem-def--param */ - define-mem-param = { - define-mem-def-name = 'bit'; - }; /* define-mem-def--param */ - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -digitalWrite(bit,LOW) -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; - define-mem-desc-line = '144'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_fast_i_o_8h_1a6d1dffed7f0c8f28f6c88146315f7832'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'fio_digitalWrite_SWITCH'; - define-mem-param = { - define-mem-def-name = 'reg'; - }; /* define-mem-def--param */ - define-mem-param = { - define-mem-def-name = 'bit'; - }; /* define-mem-def--param */ - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -digitalWrite(bit, !digitalRead(bit)) -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; - define-mem-desc-line = '145'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_fast_i_o_8h_1accae9687fdfc5f3492fb6344d62eb190'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'fio_digitalWrite_SWITCHTO'; - define-mem-param = { - define-mem-def-name = 'reg'; - }; /* define-mem-def--param */ - define-mem-param = { - define-mem-def-name = 'bit'; - }; /* define-mem-def--param */ - define-mem-param = { - define-mem-def-name = 'val'; - }; /* define-mem-def--param */ - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -digitalWrite(bit,val); -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; - define-mem-desc-line = '146'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_fast_i_o_8h_1a32f90d0ad5c1295c97cc1e79936aadd6'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'FIO_FALLBACK'; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; - define-mem-desc-line = '57'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_fast_i_o_8h_1a688a4adbb87520a2b68681bd6bfb199e'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'SKIP'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x23 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; - define-mem-desc-line = '42'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - }; - typedef = { - typedef-member = { - typedef-mem-kind = 'typedef'; - typedef-mem-id = '_fast_i_o_8h_1a0a595a88b29bcfd1540b6fac75787937'; - typedef-mem-virt = normal; - typedef-mem-prot = public; - typedef-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - typedef-mem-name = 'fio_bit'; - typedef-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; - typedef-mem-desc-line = '60'; - typedef-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - typedef-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* typedef-member */ - typedef-member = { - typedef-mem-kind = 'typedef'; - typedef-mem-id = '_fast_i_o_8h_1ae44ea3af54ef26db03f1ae2ea62f9c1f'; - typedef-mem-virt = normal; - typedef-mem-prot = public; - typedef-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - typedef-mem-name = 'fio_register'; - typedef-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; - typedef-mem-desc-line = '61'; - typedef-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - typedef-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* typedef-member */ - }; - func = { - func-member = { - func-mem-kind = 'function'; - func-mem-id = '_fast_i_o_8h_1a197336e47e1c3f929056ce3abbbc7e8d'; - func-mem-virt = normal; - func-mem-prot = public; - func-mem-type = <<_EnD_oF_dEf_TeXt_ -int -_EnD_oF_dEf_TeXt_; - func-mem-name = 'fio_digitalRead'; - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'pinRegister'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'pinBit'; - }; /* func-mem-param--param */ - func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; - func-mem-desc-line = '158'; - func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - func-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract direct digital read - @discussion without any checks - @discussion falls back to normal digitalRead if fast io is disabled - @param pinRegister[in] Register - ignored if fast io is disabled - @param pinBit[in] Bit - Pin if fast io is disabled - @result Value read from pin -_EnD_oF_dEf_TeXt_; - }; /* func-member */ - func-member = { - func-mem-kind = 'function'; - func-mem-id = '_fast_i_o_8h_1ae91bbe682b02a5842c291055c0e998b5'; - func-mem-virt = normal; - func-mem-prot = public; - func-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - func-mem-name = 'fio_digitalWrite'; - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'pinRegister'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'pinBit'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'value'; - }; /* func-mem-param--param */ - func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; - func-mem-desc-line = '128'; - func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - func-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract direct digital write - @discussion without any checks - @discussion falls back to normal digitalWrite if fast io is disabled - @param pinRegister[in] Register - ignored if fast digital write is disabled - @param pinBit[in] Bit - Pin if fast digital write is disabled - @param value[in] desired output -_EnD_oF_dEf_TeXt_; - }; /* func-member */ - func-member = { - func-mem-kind = 'function'; - func-mem-id = '_fast_i_o_8h_1a07a19dfbdca1afaca5d666bdaa3be7d5'; - func-mem-virt = normal; - func-mem-prot = public; - func-mem-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - func-mem-name = 'fio_pinToBit'; - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'pin'; - }; /* func-mem-param--param */ - func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; - func-mem-desc-line = '115'; - func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - func-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Find the bit which belongs to specified pin - @discussion if fast digitalWrite is disabled this function returns the pin - @param pin[in] Number of a digital pin - @result Bit -_EnD_oF_dEf_TeXt_; - }; /* func-member */ - func-member = { - func-mem-kind = 'function'; - func-mem-id = '_fast_i_o_8h_1afb934fc0ded94cbb5ed8ed14e2a123ed'; - func-mem-virt = normal; - func-mem-prot = public; - func-mem-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - func-mem-name = 'fio_pinToInputRegister'; - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'pin'; - }; /* func-mem-param--param */ - func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; - func-mem-desc-line = '106'; - func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - func-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Get the input register for specified pin. - @discussion if fast digital IO is disabled this function returns NULL - @param pin[in] Number of a digital pin - @result Register -_EnD_oF_dEf_TeXt_; - }; /* func-member */ - func-member = { - func-mem-kind = 'function'; - func-mem-id = '_fast_i_o_8h_1a385ae40d960c1a57e86818332476a802'; - func-mem-virt = normal; - func-mem-prot = public; - func-mem-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - func-mem-name = 'fio_pinToOutputRegister'; - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'pin'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'initial_state'; - func-mem-param-defval = <<_EnD_oF_dEf_TeXt_ -LOW -_EnD_oF_dEf_TeXt_; - }; /* func-mem-param--param */ - func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; - func-mem-desc-line = '97'; - func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - func-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Get the output register for specified pin. - @discussion if fast digital IO is disabled this function returns NULL - @param pin[in] Number of a digital pin - @result Register -_EnD_oF_dEf_TeXt_; - }; /* func-member */ - func-member = { - func-mem-kind = 'function'; - func-mem-id = '_fast_i_o_8h_1a5d8d5977294d614d15bda19f75d6b787'; - func-mem-virt = normal; - func-mem-prot = public; - func-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - func-mem-name = 'fio_shiftOut'; - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'dataRegister'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'dataBit'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'clockRegister'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'clockBit'; - }; /* func-mem-param--param */ - func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; - func-mem-desc-line = '184'; - func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - func-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract faster shift out clear - @discussion using fast digital write - @discussion falls back to normal digitalWrite if fastio is disabled - @param dataRegister[in] Register of data pin - ignored if fast digital write is disabled - @param dataBit[in] Bit of data pin - Pin if fast digital write is disabled - @param clockRegister[in] Register of data pin - ignored if fast digital write is disabled - @param clockBit[in] Bit of data pin - Pin if fast digital write is disabled -_EnD_oF_dEf_TeXt_; - }; /* func-member */ - func-member = { - func-mem-kind = 'function'; - func-mem-id = '_fast_i_o_8h_1a56c72b9f00680662229895ab22aaa743'; - func-mem-virt = normal; - func-mem-prot = public; - func-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - func-mem-name = 'fio_shiftOut'; - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'dataRegister'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'dataBit'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'clockRegister'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'clockBit'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'value'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'bitOrder'; - }; /* func-mem-param--param */ - func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; - func-mem-desc-line = '172'; - func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - func-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract faster shift out - @discussion using fast digital write - @discussion falls back to normal digitalWrite if fastio is disabled - @param dataRegister[in] Register of data pin - ignored if fast digital write is disabled - @param dataBit[in] Bit of data pin - Pin if fast digital write is disabled - @param clockRegister[in] Register of data pin - ignored if fast digital write is disabled - @param clockBit[in] Bit of data pin - Pin if fast digital write is disabled - @param bitOrder[in] bit order -_EnD_oF_dEf_TeXt_; - }; /* func-member */ - func-member = { - func-mem-kind = 'function'; - func-mem-id = '_fast_i_o_8h_1a33ce251dcd6b448185cda415a99001cf'; - func-mem-virt = normal; - func-mem-prot = public; - func-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - func-mem-name = 'fio_shiftOut1'; - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'shift1Register'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'shift1Bit'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'value'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -boolean -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'noLatch'; - func-mem-param-defval = <<_EnD_oF_dEf_TeXt_ -false -_EnD_oF_dEf_TeXt_; - }; /* func-mem-param--param */ - func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; - func-mem-desc-line = '194'; - func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - func-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract one wire shift out - @discussion protocol needs initialisation (fio_shiftOut1_init) - @param shift1Register[in] pins register - @param shift1Bit[in] pins bit - @param value[in] value to shift out, last byte is ignored and always shifted out LOW -_EnD_oF_dEf_TeXt_; - }; /* func-member */ - func-member = { - func-mem-kind = 'function'; - func-mem-id = '_fast_i_o_8h_1af2aac35d9a8ab7a2c87672f2c7cbbafb'; - func-mem-virt = normal; - func-mem-prot = public; - func-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - func-mem-name = 'fio_shiftOut1'; - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'pin'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'value'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -boolean -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'noLatch'; - func-mem-param-defval = <<_EnD_oF_dEf_TeXt_ -false -_EnD_oF_dEf_TeXt_; - }; /* func-mem-param--param */ - func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; - func-mem-desc-line = '202'; - func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - func-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract one wire shift out - @discussion protocol needs initialisation (fio_shiftOut1_init) - @param pin[in] digital pin - @param value[in] value to shift out, last byte is ignored and always shifted out LOW -_EnD_oF_dEf_TeXt_; - }; /* func-member */ - func-member = { - func-mem-kind = 'function'; - func-mem-id = '_fast_i_o_8h_1a2d0e4495eb12504255bbd3f82405b17b'; - func-mem-virt = normal; - func-mem-prot = public; - func-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - func-mem-name = 'fio_shiftOut1_init'; - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_register -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'shift1Register'; - }; /* func-mem-param--param */ - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -fio_bit -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'shift1Bit'; - }; /* func-mem-param--param */ - func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; - func-mem-desc-line = '210'; - func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - func-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract initializes one wire shift out protocol - @discussion Puts pin to HIGH state and delays until Capacitors are charged. - @param shift1Register[in] pins register - @param shift1Bit[in] pins bit -_EnD_oF_dEf_TeXt_; - }; /* func-member */ - func-member = { - func-mem-kind = 'function'; - func-mem-id = '_fast_i_o_8h_1ae4b2e099f8ade9ee674d1565669e870a'; - func-mem-virt = normal; - func-mem-prot = public; - func-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - func-mem-name = 'fio_shiftOut1_init'; - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'pin'; - }; /* func-mem-param--param */ - func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; - func-mem-desc-line = '217'; - func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - func-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract initializes one wire shift out protocol - @discussion Puts pin to HIGH state and delays until Capacitors are charged. - @param pin[in] digital pin -_EnD_oF_dEf_TeXt_; - }; /* func-member */ - }; - file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/FastIO.h'; - file-first-line = '1'; - file-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - file-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* file */ -file = { - file-id = '_i2_c_i_o_8cpp'; - file-name = 'I2CIO.cpp'; - file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.cpp'; - file-first-line = '1'; - file-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - file-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* file */ -file = { - file-id = '_i2_c_i_o_8h'; - file-name = 'I2CIO.h'; - define = { - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_i2_c_i_o_8h_1a218dbde2f6fda8c5825e25da10864c71'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = '_I2CIO_VERSION'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -"1.0.0" -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; - define-mem-desc-line = '32'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - }; - file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; - file-first-line = '1'; - file-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - file-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* file */ -file = { - file-id = '_l_c_d_8cpp'; - file-name = 'LCD.cpp'; - file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.cpp'; - file-first-line = '1'; - file-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - file-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* file */ -file = { - file-id = '_l_c_d_8h'; - file-name = 'LCD.h'; - define = { - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1a0f50ae3b4bdb42dd5ad74b2c604a7515'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'BACKLIGHT_OFF'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '151'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @defined - @abstract Backlight off constant declaration - @discussion Used in combination with the setBacklight to swith off the - LCD backlight. @set setBacklight -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1aa5bad1c51f5fac029f3deacfef48c54b'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'BACKLIGHT_ON'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -255 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '159'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @defined - @abstract Backlight on constant declaration - @discussion Used in combination with the setBacklight to swith on the - LCD backlight. @set setBacklight -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1ab0d87e07831e7e4943caef187872123e'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'COMMAND'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '132'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1aad9ae913bdfab20dd94ad04ee2d5b045'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'DATA'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -1 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '133'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1aa1e30e32b6c2cf8d90a9281328472dbe'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'FOUR_BITS'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -2 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '134'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1ad25b138788d83e67f840588754e2df2f'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'HOME_CLEAR_EXEC'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -2000 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '143'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @defined - @abstract Defines the duration of the home and clear commands - @discussion This constant defines the time it takes for the home and clear - commands in the LCD - Time in microseconds. -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1a8c85cf88d8af66a47c42249d81c94641'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_1LINE'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x00 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '125'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1a7987e93538df2819583ba43b81ddbb25'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_2LINE'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x08 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '124'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1ab8c35d355d2372090c7a347e961c9224'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_4BITMODE'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x00 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '123'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1abb3210156d88d3fe18c9352eb161fe42'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_5x10DOTS'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x04 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '126'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1a9ef57e724c1b846dae0f531aff6fb464'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_5x8DOTS'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x00 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '127'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1a59a57ca857dae5d89eb5f2a38c4ac6f0'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_8BITMODE'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x10 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '122'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1a4b28243034cec656b0ed490ba6979752'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_BLINKOFF'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x00 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '111'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1ac3b19d4e6553b9bbf18a23387e439206'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_BLINKON'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x01 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '110'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1acc3509bc0442b41e2b816555de473ed2'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_CLEARDISPLAY'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x01 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '88'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @defined - @abstract All these definitions shouldn't be used unless you are writing - a driver. - @discussion All these definitions are for driver implementation only and - shouldn't be used by applications. -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1ac21f0302ac4136775877d5f4759e4f74'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_CURSORMOVE'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x00 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '116'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1a32b194a3adaa0a0bb69acee2e6a754fa'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_CURSOROFF'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x00 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '109'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1ab67f0adccde68de88eee0513fdfc4574'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_CURSORON'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x02 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '108'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1a61f16a2b7550e4700f7898a7587c5594'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_CURSORSHIFT'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x10 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '92'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1adfb8b2b8b8a08d7313504d7a4f89d99f'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_DISPLAYCONTROL'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x08 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '91'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1ab2f7b67abfac33f610acfd5d7a971f40'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_DISPLAYMOVE'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x08 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '115'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1a257ebe775cac7140cf82aa40d8ce545a'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_DISPLAYOFF'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x00 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '107'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1a76236ae8317b34bbc98ea56bc0a2639c'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_DISPLAYON'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x04 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '106'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1ae7c6309fce6200bd7526d090a4a84dd0'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_ENTRYLEFT'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x02 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '100'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1a5597e1d5819ea2f0734ad4313abf6703'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_ENTRYMODESET'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x04 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '90'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1a43c26ba2e66880fac95ef640b56873ad'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_ENTRYRIGHT'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x00 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '99'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1a049ee97e98d04788c1da9a55590fbe42'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_ENTRYSHIFTDECREMENT'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x00 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '102'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1aa2cf1d0f4a319e53c009cffe1184466c'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_ENTRYSHIFTINCREMENT'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x01 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '101'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1aaef882ae70d1f485cd132815d9716111'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_FUNCTIONSET'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x20 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '93'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1aafb86adb0dfca1e65d65b2cd1946a009'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_MOVELEFT'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x00 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '118'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1acf5999180233790bb2c9902efde58f7f'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_MOVERIGHT'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x04 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '117'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1a154c86a887633d0f6d9988e4dbb1f419'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_RETURNHOME'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x02 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '89'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1aae6ea856879c11dee58493184582a52f'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_SETCGRAMADDR'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x40 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '94'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1a15008b832807a208d9d88c74e6751ebf'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_SETDDRAMADDR'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x80 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '95'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - }; - enum = { - enum-member = { - enum-mem-kind = 'enum'; - enum-mem-id = '_l_c_d_8h_1aeeef728bf4726268aa5e99391a1502bc'; - enum-mem-virt = normal; - enum-mem-prot = public; - enum-mem-name = 't_backlighPol'; - enum-mem-enum = { enum-name = POSITIVE; }; - enum-mem-enum = { enum-name = NEGATIVE; }; - enum-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - enum-mem-desc-line = '167'; - enum-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - enum-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* enum-member */ - }; - func = { - func-member = { - func-mem-kind = 'function'; - func-mem-id = '_l_c_d_8h_1a6eac41e4be58d7736ac0c19de225c0dc'; - func-mem-virt = normal; - func-mem-prot = public; - func-mem-type = <<_EnD_oF_dEf_TeXt_ -static void -_EnD_oF_dEf_TeXt_; - func-mem-name = 'waitUsec'; - func-mem-param = { - func-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint16_t -_EnD_oF_dEf_TeXt_; - func-mem-param-declname = 'uSec'; - }; /* func-mem-param--param */ - func-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - func-mem-desc-line = '72'; - func-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - func-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @defined - @abstract Enables disables fast waits for write operations for LCD - @discussion If defined, the library will avoid doing un-necessary waits. - this can be done, because the time taken by Arduino's slow digitalWrite - operations. If fast digitalIO operations, comment this line out or undefine - the mode. - - - @function - @abstract waits for a given time in microseconds (compilation dependent). - @discussion Waits for a given time defined in microseconds depending on - the FAST_MODE define. If the FAST_MODE is defined the call will return - inmediatelly. - @param uSec[in] time in microseconds. - @result None -_EnD_oF_dEf_TeXt_; - }; /* func-member */ - }; - file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - file-first-line = '1'; - file-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - file-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* file */ -file = { - file-id = '_liquid_crystal_8cpp'; - file-name = 'LiquidCrystal.cpp'; - define = { - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal_8cpp_1a31e1c14e8c2845dec3301f0ebd36b43c'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_4BIT'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -1 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.cpp'; - define-mem-desc-line = '45'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal_8cpp_1a57d84af8cf61ceee4eb91db77889f071'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_8BIT'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.cpp'; - define-mem-desc-line = '46'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal_8cpp_1a65fa786d6e31fe8b1aa51784a9736581'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_NOBACKLIGHT'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0xFF -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.cpp'; - define-mem-desc-line = '42'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - }; - file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.cpp'; - file-first-line = '1'; - file-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - file-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* file */ -file = { - file-id = '_liquid_crystal_8h'; - file-name = 'LiquidCrystal.h'; - define = { - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal_8h_1adebff0f00a59c9f9863bc196938d5726'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'EXEC_TIME'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -37 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - define-mem-desc-line = '42'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @defined - @abstract Command execution time on the LCD. - @discussion This defines how long a command takes to execute by the LCD. - The time is expressed in micro-seconds. -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - }; - file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - file-first-line = '1'; - file-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - file-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* file */ -file = { - file-id = '_liquid_crystal___i2_c_8cpp'; - file-name = 'LiquidCrystal_I2C.cpp'; - define = { - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___i2_c_8cpp_1a3d9bb178282c3cb69740c94ba1e48fed'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'D4'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp'; - define-mem-desc-line = '88'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @defined - @abstract LCD dataline allocation this library only supports 4 bit LCD control - mode. - @discussion D4, D5, D6, D7 LCD data lines pin mapping of the extender module -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___i2_c_8cpp_1a2ddd4183d444d6d128cbdbd6269e4e0c'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'D5'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -1 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp'; - define-mem-desc-line = '89'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___i2_c_8cpp_1a79a18a7f5ccf7a7ca31f302bd62527a6'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'D6'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -2 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp'; - define-mem-desc-line = '90'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___i2_c_8cpp_1a2ba78f059a7ebebc95e7beef690e88d6'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'D7'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -3 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp'; - define-mem-desc-line = '91'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___i2_c_8cpp_1a22e6626f2c98ed902f8ded47f6438c05'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'EN'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -6 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp'; - define-mem-desc-line = '66'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @defined - @abstract Enable bit of the LCD - @discussion Defines the IO of the expander connected to the LCD Enable -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___i2_c_8cpp_1ac059d24dfe9c1e1f7c07cb7869a1833b'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_BACKLIGHT'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0xFF -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp'; - define-mem-desc-line = '55'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @defined - @abstract LCD_BACKLIGHT - @discussion BACKLIGHT MASK used when backlight is on -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___i2_c_8cpp_1a65fa786d6e31fe8b1aa51784a9736581'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_NOBACKLIGHT'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x00 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp'; - define-mem-desc-line = '48'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @defined - @abstract LCD_NOBACKLIGHT - @discussion NO BACKLIGHT MASK -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___i2_c_8cpp_1af8903d8eea3868940c60af887473b152'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'RS'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -4 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp'; - define-mem-desc-line = '80'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @defined - @abstract Register bit of the LCD - @discussion Defines the IO of the expander connected to the LCD Register select pin -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___i2_c_8cpp_1afc4ded33ac0ca43defcce639e965748a'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'RW'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -5 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp'; - define-mem-desc-line = '73'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @defined - @abstract Read/Write bit of the LCD - @discussion Defines the IO of the expander connected to the LCD Rw pin -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - }; - file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp'; - file-first-line = '1'; - file-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - file-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* file */ -file = { - file-id = '_liquid_crystal___i2_c_8h'; - file-name = 'LiquidCrystal_I2C.h'; - file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - file-first-line = '1'; - file-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - file-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* file */ -file = { - file-id = '_liquid_crystal___s_r_8cpp'; - file-name = 'LiquidCrystal_SR.cpp'; - file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.cpp'; - file-first-line = '1'; - file-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - file-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* file */ -file = { - file-id = '_liquid_crystal___s_r_8h'; - file-name = 'LiquidCrystal_SR.h'; - define = { - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___s_r_8h_1a0075b041d82abb47f279dce482e7b087'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'SR_EN_BIT'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x80 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; - define-mem-desc-line = '92'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___s_r_8h_1afdaa2bbb2cc185700864ac8d7a570ced'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'SR_RS_BIT'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x04 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; - define-mem-desc-line = '91'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___s_r_8h_1a40fb1f76bc5f8ca9e6534b47bd6da27c'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'TWO_WIRE'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -204 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; - define-mem-desc-line = '90'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - }; - file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR.h'; - file-first-line = '1'; - file-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - file-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* file */ -file = { - file-id = '_liquid_crystal___s_r2_w_8cpp'; - file-name = 'LiquidCrystal_SR2W.cpp'; - file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.cpp'; - file-first-line = '1'; - file-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - file-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* file */ -file = { - file-id = '_liquid_crystal___s_r2_w_8h'; - file-name = 'LiquidCrystal_SR2W.h'; - define = { - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___s_r2_w_8h_1a53e3add69865ae57ca872cb41fcae9e3'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'SR2W_BL_MASK'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x02 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; - define-mem-desc-line = '132'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___s_r2_w_8h_1a7cf86f2a173473d01e02b2ac786a8690'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'SR2W_DATA_MASK'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x78 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; - define-mem-desc-line = '134'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___s_r2_w_8h_1a8d17b6abb5bcde6883dbdc86d34be9d8'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'SR2W_EN_MASK'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x80 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; - define-mem-desc-line = '135'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___s_r2_w_8h_1acce98b026d9fdcb2e126705c14af7500'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'SR2W_RS_MASK'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x04 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; - define-mem-desc-line = '133'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - }; - file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR2W.h'; - file-first-line = '1'; - file-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - file-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* file */ -file = { - file-id = '_liquid_crystal___s_r3_w_8cpp'; - file-name = 'LiquidCrystal_SR3W.cpp'; - define = { - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___s_r3_w_8cpp_1a3d9bb178282c3cb69740c94ba1e48fed'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'D4'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp'; - define-mem-desc-line = '126'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @defined - @abstract LCD dataline allocation this library only supports 4 bit LCD control - mode. - @discussion D4, D5, D6, D7 LCD data lines pin mapping of the extender module -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___s_r3_w_8cpp_1a2ddd4183d444d6d128cbdbd6269e4e0c'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'D5'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -1 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp'; - define-mem-desc-line = '127'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___s_r3_w_8cpp_1a79a18a7f5ccf7a7ca31f302bd62527a6'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'D6'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -2 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp'; - define-mem-desc-line = '128'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___s_r3_w_8cpp_1a2ba78f059a7ebebc95e7beef690e88d6'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'D7'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -3 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp'; - define-mem-desc-line = '129'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___s_r3_w_8cpp_1a22e6626f2c98ed902f8ded47f6438c05'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'EN'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -4 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp'; - define-mem-desc-line = '104'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @defined - @abstract Enable bit of the LCD - @discussion Defines the IO of the expander connected to the LCD's Enable -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___s_r3_w_8cpp_1ac059d24dfe9c1e1f7c07cb7869a1833b'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_BACKLIGHT'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0xFF -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp'; - define-mem-desc-line = '93'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @defined - @abstract LCD_BACKLIGHT - @discussion BACKLIGHT MASK used when backlight is on -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___s_r3_w_8cpp_1a65fa786d6e31fe8b1aa51784a9736581'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_NOBACKLIGHT'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x00 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp'; - define-mem-desc-line = '86'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @defined - @abstract LCD_NOBACKLIGHT - @discussion No BACKLIGHT MASK -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___s_r3_w_8cpp_1af8903d8eea3868940c60af887473b152'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'RS'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -6 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp'; - define-mem-desc-line = '118'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @defined - @abstract Register bit of the LCD - @discussion Defines the IO of the expander connected to the LCD's Register select pin -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___s_r3_w_8cpp_1afc4ded33ac0ca43defcce639e965748a'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'RW'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -5 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp'; - define-mem-desc-line = '111'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @defined - @abstract Read/Write bit of the LCD - @discussion Defines the IO of the expander connected to the LCD's Rw pin -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - }; - file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.cpp'; - file-first-line = '1'; - file-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - file-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* file */ -file = { - file-id = '_liquid_crystal___s_r3_w_8h'; - file-name = 'LiquidCrystal_SR3W.h'; - file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR3W.h'; - file-first-line = '1'; - file-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - file-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* file */ diff --git a/libraries/LiquidCrystal/utility/docs/def/doxygen.def.txt b/libraries/LiquidCrystal/utility/docs/def/doxygen.def.txt deleted file mode 100644 index 8f4275f..0000000 --- a/libraries/LiquidCrystal/utility/docs/def/doxygen.def.txt +++ /dev/null @@ -1,2897 +0,0 @@ -AutoGen Definitions dummy; -class = { - cp-id = 'class_i2_c_i_o'; - cp-name = 'I2CIO'; - cp-section = { - sec-kind = 'public-func'; - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_i2_c_i_o_1a32eb7832075ad6011d67874405a0d0a6'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'I2CIO'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; - sec-mem-desc-line = '51'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Constructor method - @discussion Class constructor constructor. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_i2_c_i_o_1a6f814653d903dc2ff6e8420eeb7954ae'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -int -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'begin'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'i2cAddr'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; - sec-mem-desc-line = '63'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Initializes the device. - @discussion This method initializes the device allocating an I2C address. - This method is the first method that should be call prior to calling any - other method form this class. On initialization all pins are configured - as INPUT on the device. - @param i2cAddr: I2C Address where the device is located. - @result 1 if the device was initialized correctly, 0 otherwise -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_i2_c_i_o_1a53b94274eb6bb68564cf5243323db887'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'pinMode'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'pin'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'dir'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; - sec-mem-desc-line = '73'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Sets the mode of a particular pin. - @discussion Sets the mode of a particular pin to INPUT, OUTPUT. digitalWrite - has no effect on pins which are not declared as output. - @param pin: Pin from the I2C IO expander to be configured. Range 0..7 - @param dir: Pin direction (INPUT, OUTPUT). -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_i2_c_i_o_1a0341888753bc54c4384f5593a870fb34'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'portMode'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'dir'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; - sec-mem-desc-line = '83'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Sets all the pins of the device in a particular direction. - @discussion This method sets all the pins of the device in a particular - direction. This method is useful to set all the pins of the device to be - either inputs or outputs. - @param dir: Direction of all the pins of the device (INPUT, OUTPUT). -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_i2_c_i_o_1a7a3db7bfc15ede0ae9e8c8bd44290ef7'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'read'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; - sec-mem-desc-line = '93'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Reads all the pins of the device that are configured as INPUT. - @discussion Reads from the device the status of the pins that are configured - as INPUT. During initialization all pins are configured as INPUTs by default. - Please refer to pinMode or portMode. - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_i2_c_i_o_1ac26221011a8b49bcea9ef62712ea88a7'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'digitalRead'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'pin'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; - sec-mem-desc-line = '106'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Read a pin from the device. - @discussion Reads a particular pin from the device. To read a particular - pin it has to be configured as INPUT. During initialization all pins are - configured as INPUTs by default. Please refer to pinMode or portMode. - @param pin: Pin from the port to read its status. Range (0..7) - @result Returns the pin status (HIGH, LOW) if the pin is configured - as an output, reading its value will always return LOW regardless of its - real state. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_i2_c_i_o_1ae2063569c927d0008e2593d14504fdcd'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -int -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'write'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; - sec-mem-desc-line = '120'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Write a value to the device. - @discussion Writes to a set of pins in the device. The value is the binary - representation of all the pins in device. The value written is masked with - the configuration of the direction of the pins; to change the state of - a particular pin with this method, such pin has to be configured as OUTPUT - using the portMode or pinMode methods. If no pins have been configured as - OUTPUTs this method will have no effect. - @param value: value to be written to the device. - @result 1 on success, 0 otherwise -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_i2_c_i_o_1a473206162522b847546777d16a7c6dcd'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -int -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'digitalWrite'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'pin'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'level'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; - sec-mem-desc-line = '132'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Writes a digital level to a particular pin. - @discussion Write a level to the indicated pin of the device. For this - method to have effect, the pin has to be configured as OUTPUT using the - pinMode or portMode methods. - @param pin: device pin to change level. Range (0..7). - @para level: logic level to set the pin at (HIGH, LOW). - @result 1 on success, 0 otherwise. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-section = { - sec-kind = 'private-attrib'; - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_i2_c_i_o_1abcd6f7f5f176f965d8ae535afa9f6cec'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_shadow'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; - sec-mem-desc-line = '137'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_i2_c_i_o_1a283a99ef1c6f58fa8a0489089cba9682'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_dirMask'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; - sec-mem-desc-line = '138'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_i2_c_i_o_1ade58da873af4240a53053ef5f12a2728'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_i2cAddr'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; - sec-mem-desc-line = '139'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_i2_c_i_o_1a8c566f3fd332eefe4db57cbe6b69337c'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -bool -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_initialised'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; - sec-mem-desc-line = '140'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-filename = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; - cp-fileline = '44'; - cp-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - cp-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* class */ -class = { - cp-id = 'class_l_c_d'; - cp-name = 'LCD'; - cp-ref = { - ref-type = derived; - ref-id = 'class_liquid_crystal'; - ref-prot = public; - ref-virt = non-virtual; - }; - cp-ref = { - ref-type = derived; - ref-id = 'class_liquid_crystal___i2_c'; - ref-prot = public; - ref-virt = non-virtual; - }; - cp-section = { - sec-kind = 'public-func'; - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a00bb2db1390721abc7b24ac4b8c276c8'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LCD'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '104'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract LiquidCrystal abstract constructor. - @discussion LiquidCrystal class abstract constructor needed to create - the base abstract class. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a5b7aee49867828a0160a142b9109c07a'; - sec-mem-virt = pure-virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -virtual void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'begin'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'cols'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'rows'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'charsize'; - sec-mem-param-defval = <<_EnD_oF_dEf_TeXt_ -LCD_5x8DOTS -_EnD_oF_dEf_TeXt_; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '120'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract LCD initialization. - @discussion Initializes the LCD to a given size (col, row). This methods - initializes the LCD, therefore, it MUST be called prior to using any other - method from this class. - - This method is pure abstract, it is dependent on each derived class from - this base class to implement the internals of how the LCD is initialized - and configured. - - @param cols the number of columns that the display has - @param rows the number of rows that the display has -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1afa699e0beeeee03cce8cef87eba81c4a'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'clear'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '132'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Clears the LCD. - @discussion Clears the LCD screen and positions the cursor in the upper-left - corner. - - This operation is time consuming for the LCD. - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1aee45ad37f09312f5d9982257e2d37e68'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'home'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '145'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Sets the cursor to the upper-left corner. - @discussion Positions the cursor in the upper-left of the LCD. - That is, use that location in outputting subsequent text to the display. - To also clear the display, use the clear() function instead. - - This operation is time consuming for the LCD. - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1af3974da6d988ba2d21c25135ada12108'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'noDisplay'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '155'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Turns off the LCD display. - @discussion Turns off the LCD display, without losing the text currently - being displayed on it. - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a5b07cf05e8e5e7c53654f5ca0cf58b89'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'display'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '166'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Turns on the LCD display. - @discussion Turns on the LCD display, after it's been turned off with - noDisplay(). This will restore the text (and cursor location) that was on - the display prior to calling noDisplay(). - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a3b755c4b397b5985752be8c30ee1a9b5'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'noBlink'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '174'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Turns off the blinking of the LCD cursor. - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a878b36878fa8287093964eba83aace77'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'blink'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '184'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Display the cursor of the LCD. - @discussion Display the blinking LCD cursor. If used in combination with - the cursor() function, the result will depend on the particular display. - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1aec8ffaa1e69c7a6e13ac0cfbc29151d9'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'noCursor'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '192'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Hides the LCD cursor. - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a194814f64dfa50a90e07e0fe0d361620'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'cursor'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '202'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Display the LCD cursor. - @discussion Display the LCD cursor: an underscore (line) at the location - where the next character will be written. - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a6f3a503055b3b8dcf0f61b2633c584f7'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'scrollDisplayLeft'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '211'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Scrolls the contents of the display (text and cursor) one space - to the left. - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1abfc44b294772f09020bfa32af8a79571'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'scrollDisplayRight'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '220'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Scrolls the contents of the display (text and cursor) one space - to the right. - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a238e9f6476dc7df64af04eb6c87f6ac7'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'leftToRight'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '233'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Set the direction for text written to the LCD to left-to-right. - @discussion Set the direction for text written to the LCD to left-to-right. - All subsequent characters written to the display will go from left to right, - but does not affect previously-output text. - - This is the default configuration. - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1ac014830eadc26bfd86308ea8734f4428'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'rightToLeft'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '246'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Set the direction for text written to the LCD to right-to-left. - @discussion Set the direction for text written to the LCD to right-to-left. - All subsequent characters written to the display will go from right to left, - but does not affect previously-output text. - - left-to-right is the default configuration. - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1abb3ed88d530f6283e6159b4973e7da9e'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'autoscroll'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '261'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Turns on automatic scrolling of the LCD. - @discussion Turns on automatic scrolling of the LCD. This causes each - character output to the display to push previous characters over by one - space. If the current text direction is left-to-right (the default), - the display scrolls to the left; if the current direction is right-to-left, - the display scrolls to the right. - This has the effect of outputting each new character to the same location on - the LCD. - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a96035dde40efbf73390e00b5beb00231'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'noAutoscroll'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '271'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Turns off automatic scrolling of the LCD. - @discussion Turns off automatic scrolling of the LCD, this is the default - configuration of the LCD. - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a91cba8f93c692abcddf8bc3de58d2d3a'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'createChar'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'location'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'charmap'; - sec-mem-param-array = '[]'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '289'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Creates a custom character for use on the LCD. - @discussion Create a custom character (glyph) for use on the LCD. - Most chipsets only support up to eight characters of 5x8 pixels. Therefore, - this methods has been limited to locations (numbered 0 to 7). - - The appearance of each custom character is specified by an array of eight - bytes, one for each row. The five least significant bits of each byte - determine the pixels in that row. To display a custom character on screen, - write()/print() its number, i.e. lcd.print (char(x)); // Where x is 0..7. - - @param location: LCD memory location of the character to create - (0 to 7) - @param charmap: the bitmap array representing each row of the character. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a48220450fd152b25994eb7d0ba340e8d'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'setCursor'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'col'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'row'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '300'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Position the LCD cursor. - @discussion Sets the position of the LCD cursor. Set the location at which - subsequent text written to the LCD will be displayed. - - @param col LCD column - @param row LCD row - line. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a31a0cb42497d83cdc9cb8000828f7190'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'command'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '314'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Send a command to the LCD. - @discussion This method sends a command to the LCD by setting the Register - select line of the LCD. - - This command shouldn't be used to drive the LCD, only to implement any other - feature that is not available on this library. - - @param value Command value to send to the LCD. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1acf471f0d9fea7ea3f5c3279519c8b32c'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -size_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'write'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '327'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Writes to the LCD. - @discussion This method writes character to the LCD in the current cursor - position. - - This is the virtual write method, implemented in the Print class, therefore - all Print class methods will end up calling this method. - - @param value Value to write to the LCD. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_l_c_d_1a121fac7d916284d71af8b1fdd9ade2f6'; - sec-mem-virt = pure-virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -virtual void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'send'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'mode'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '342'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Send a particular value to the LCD. - @discussion Sends a particular value to the LCD. This is a pure abstract - method, therefore, it is implementation dependent of each derived class how - to physically write to the LCD. - - Users should never call this method. - - @param value Value to send to the LCD. - @result mode LOW - write to the LCD CGRAM, HIGH - write a command to - the LCD. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-section = { - sec-kind = 'protected-attrib'; - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_l_c_d_1aef093ba3f8e1016267b40ac235a0fa0f'; - sec-mem-virt = normal; - sec-mem-prot = protected; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_displayfunction'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '349'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_l_c_d_1ae47a0e2eff74431a39774b788d5761f4'; - sec-mem-virt = normal; - sec-mem-prot = protected; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_displaycontrol'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '351'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_l_c_d_1a726b9a68d091dd8683a18e83f3a8fd3c'; - sec-mem-virt = normal; - sec-mem-prot = protected; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_displaymode'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '353'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_l_c_d_1ac1374911fb145fea430c21092ada0c06'; - sec-mem-virt = normal; - sec-mem-prot = protected; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_numlines'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - sec-mem-desc-line = '354'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-filename = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - cp-fileline = '95'; - cp-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - cp-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - cp-inheritancegraph = <<_EnD_oF_dEf_TeXt_ - node = { - node-id = 2; - node-label = 'LCD'; - node-link = { - node-link-id = 'class_l_c_d'; - }; - }; /* node */ - node = { - node-id = 3; - node-label = 'LiquidCrystal'; - node-link = { - node-link-id = 'class_liquid_crystal'; - }; - node-child = { - child-id = '2'; - relation = public-inheritance; - }; /* node-child */ - }; /* node */ - node = { - node-id = 4; - node-label = 'LiquidCrystal_I2C'; - node-link = { - node-link-id = 'class_liquid_crystal___i2_c'; - }; - node-child = { - child-id = '2'; - relation = public-inheritance; - }; /* node-child */ - }; /* node */ - -_EnD_oF_dEf_TeXt_; -}; /* class */ -class = { - cp-id = 'class_liquid_crystal'; - cp-name = 'LiquidCrystal'; - cp-ref = { - ref-type = base; - ref-id = 'class_l_c_d'; - ref-prot = public; - ref-virt = non-virtual; - }; - cp-section = { - sec-kind = 'public-func'; - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal_1a49d2bd8d26031a1c83bcbd73978a1686'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'rs'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'enable'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd0'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd1'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd2'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd3'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd4'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd5'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd6'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd7'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '50'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract 8 bit LCD constructors. - @discussion Defines the pin assignment that the LCD will have. - The constructor does not initialize the LCD. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal_1a30e3d865c4b4a003a36cb45903f93644'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'rs'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'rw'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'enable'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd0'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd1'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd2'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd3'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd4'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd5'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd6'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd7'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '53'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal_1a0a0a8dfa7a2e775a031fd65f5c6366ec'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'rs'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'rw'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'enable'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd0'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd1'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd2'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd3'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '62'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract 4 bit LCD constructors. - @discussion Defines the pin assignment that the LCD will have. - The constructor does not initialize the LCD. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal_1a23124e6dd5ac4a9b6147629b96e91953'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'rs'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'enable'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd0'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd1'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd2'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd3'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '64'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal_1adb5f37d69809ed7c0772c74a4adff19b'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -virtual void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'begin'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'cols'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'rows'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'charsize'; - sec-mem-param-defval = <<_EnD_oF_dEf_TeXt_ -LCD_5x8DOTS -_EnD_oF_dEf_TeXt_; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '79'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract LCD initialization. - @discussion Initializes the LCD to a given size (col, row). This methods - initializes the LCD, therefore, it MUST be called prior to using any other - method from this class. - - @param cols: the number of columns that the display has - @param rows: the number of rows that the display has - @param charsize: size of the characters of the LCD: LCD_5x8DOTS or - LCD_5x10DOTS. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal_1a56142f8b3753bedd133e4139e5eb5089'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -virtual void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'send'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'mode'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '93'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Send a particular value to the LCD. - @discussion Sends a particular value to the LCD for writing to the LCD or - as an LCD command. - - Users should never call this method. - - @param value Value to send to the LCD. - @result mode LOW - write to the LCD CGRAM, HIGH - write a command to - the LCD. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-section = { - sec-kind = 'private-func'; - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal_1ae45eec827b26174f73e9cf3ddda635af'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'init'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'fourbitmode'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'rs'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'rw'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'enable'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd0'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd1'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd2'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd3'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd4'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd5'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd6'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'd7'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '105'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Initializes the LCD pin allocation - @discussion Initializes the LCD pin allocation and configuration. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal_1adebd21f2955b1e193a6d24367833fd63'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'write8bits'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '112'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Writes an 8 bit value to the LCD. - @discussion Writes 8 bits to the LCD control data lines. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal_1a52837217db49272eea03c9056cab36a8'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'write4bits'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '119'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Writes an 4 bit value to the LCD. - @discussion Writes 4 bits (the least significant) to the LCD control data lines. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal_1a44d84c010396c993f124d2feb9dc794d'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'pulseEnable'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '127'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Pulse the LCD enable line (En). - @discussion Sends a pulse of 1 uS to the Enable pin to execute an command - or write operation. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-section = { - sec-kind = 'private-attrib'; - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal_1affd20665bda00d8b0e37d5ee87543e81'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_rs_pin'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '129'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal_1a29061eaa64c2e9f3b985ff52249b62a9'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_rw_pin'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '130'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal_1aef7d920abae32b5faa2625ffa3879c4b'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_enable_pin'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '131'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal_1a0b2da39d056aed9940b0525e554668d7'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_data_pins'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - sec-mem-desc-line = '132'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-filename = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - cp-fileline = '40'; - cp-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - cp-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - cp-inheritancegraph = <<_EnD_oF_dEf_TeXt_ - node = { - node-id = 7; - node-label = 'LCD'; - node-link = { - node-link-id = 'class_l_c_d'; - }; - }; /* node */ - node = { - node-id = 6; - node-label = 'LiquidCrystal'; - node-link = { - node-link-id = 'class_liquid_crystal'; - }; - node-child = { - child-id = '7'; - relation = public-inheritance; - }; /* node-child */ - }; /* node */ - -_EnD_oF_dEf_TeXt_; - cp-collaborationgraph = <<_EnD_oF_dEf_TeXt_ - node = { - node-id = 9; - node-label = 'LCD'; - node-link = { - node-link-id = 'class_l_c_d'; - }; - }; /* node */ - node = { - node-id = 8; - node-label = 'LiquidCrystal'; - node-link = { - node-link-id = 'class_liquid_crystal'; - }; - node-child = { - child-id = '9'; - relation = public-inheritance; - }; /* node-child */ - }; /* node */ - -_EnD_oF_dEf_TeXt_; -}; /* class */ -class = { - cp-id = 'class_liquid_crystal___i2_c'; - cp-name = 'LiquidCrystal_I2C'; - cp-ref = { - ref-type = base; - ref-id = 'class_l_c_d'; - ref-prot = public; - ref-virt = non-virtual; - }; - cp-section = { - sec-kind = 'public-func'; - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___i2_c_1aac537d195557e0b8afac1a71441a484c'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'LiquidCrystal_I2C'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'lcd_Addr'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '84'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Class constructor. - @discussion Initializes class variables and defines the I2C address of the - LCD. The constructor does not initialize the LCD. - - @param lcd_Addr: I2C address of the IO expansion module. For I2CLCDextraIO, - the address can be configured using the on board jumpers. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___i2_c_1aeee2ada537f0cfbfda8613324b57c4a6'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -virtual void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'begin'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'cols'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'rows'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'charsize'; - sec-mem-param-defval = <<_EnD_oF_dEf_TeXt_ -LCD_5x8DOTS -_EnD_oF_dEf_TeXt_; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '98'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract LCD initialization. - @discussion Initializes the LCD to a given size (col, row). This methods - initializes the LCD, therefore, it MUST be called prior to using any other - method from this class. - - @param cols: the number of columns that the display has - @param rows: the number of rows that the display has - @param charsize: size of the characters of the LCD: LCD_5x8DOTS or - LCD_5x10DOTS. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___i2_c_1a8bf1fab7efe13e8b17b96c42d1f810b4'; - sec-mem-virt = virtual; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -virtual void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'send'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-declname = 'mode'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '112'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Send a particular value to the LCD. - @discussion Sends a particular value to the LCD for writing to the LCD or - as an LCD command. - - Users should never call this method. - - @param value: Value to send to the LCD. - @result mode: LOW - write to the LCD CGRAM, HIGH - write a command to - the LCD. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___i2_c_1a576f1f5813f55f34333d6d7e9fe53ad3'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'noBacklight'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '122'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Switch-off the LCD backlight. - @discussion Switch-off the LCD backlight, this method is not supported by - the I2CLCDextraIO, it needs an extra IO pin to drive the LCD backlight - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___i2_c_1a9f296e0d26f8b6a4509d8d4b9d738c03'; - sec-mem-virt = normal; - sec-mem-prot = public; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'backlight'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '132'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @function - @abstract Switch-on the LCD backlight. - @discussion Switch-on the LCD backlight, this method is not supported by - the I2CLCDextraIO, it needs an extra IO pin to drive the LCD backlight - - @param none -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-section = { - sec-kind = 'private-func'; - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___i2_c_1a459c4fa106fb7bac5940e3c6aea736af'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -int -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'init'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '142'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Initializes the LCD class - @discussion Initializes the LCD class and IO expansion module. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___i2_c_1aebb0b9f000b94cc3ab026e0154d6ecef'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'write4bits'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-defname = 'value'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '149'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Writes an 4 bit value to the LCD. - @discussion Writes 4 bits (the least significant) to the LCD control data lines. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___i2_c_1a1d715dbf40f06b4c15004cd356b5a321'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'pulseEnable'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-defname = '_data'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '157'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Pulse the LCD enable line (En). - @discussion Sends a pulse of 1 uS to the Enable pin to execute an command - or write operation. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'function'; - sec-mem-id = 'class_liquid_crystal___i2_c_1a4c63780ceef67e90750d3e4bbdb83402'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -void -_EnD_oF_dEf_TeXt_; - sec-mem-name = 'expanderWrite'; - sec-mem-param = { - sec-mem-param-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-param-defname = '_data'; - }; /* sec-mem-param--param */ - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '165'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @method - @abstract Writes to the expansion module. - @discussion Writes a byte to the IO expansion module. This will be applied - to all its outputs. -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-section = { - sec-kind = 'private-attrib'; - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___i2_c_1a0bb3cc7ec414b373ef00e0cc6642ec88'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_Addr'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '167'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___i2_c_1af99934fdb39403e02d68981ad8366e6b'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_cols'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '168'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___i2_c_1adb3edf6c68b018a37293a926c4816127'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_rows'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '169'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___i2_c_1af63a2b732d345d55abfcb83bf962c8d3'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -uint8_t -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_backlightval'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '170'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - sec-member = { - sec-mem-kind = 'variable'; - sec-mem-id = 'class_liquid_crystal___i2_c_1adcc89f14c444ff086f544f33fc18ca4c'; - sec-mem-virt = normal; - sec-mem-prot = private; - sec-mem-type = <<_EnD_oF_dEf_TeXt_ -I2CIO -_EnD_oF_dEf_TeXt_; - sec-mem-name = '_i2cio'; - sec-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - sec-mem-desc-line = '171'; - sec-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - sec-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* sec-member */ - }; /* cp-section */ - cp-filename = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - cp-fileline = '72'; - cp-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - cp-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - cp-inheritancegraph = <<_EnD_oF_dEf_TeXt_ - node = { - node-id = 11; - node-label = 'LCD'; - node-link = { - node-link-id = 'class_l_c_d'; - }; - }; /* node */ - node = { - node-id = 10; - node-label = 'LiquidCrystal_I2C'; - node-link = { - node-link-id = 'class_liquid_crystal___i2_c'; - }; - node-child = { - child-id = '11'; - relation = public-inheritance; - }; /* node-child */ - }; /* node */ - -_EnD_oF_dEf_TeXt_; - cp-collaborationgraph = <<_EnD_oF_dEf_TeXt_ - node = { - node-id = 13; - node-label = 'LCD'; - node-link = { - node-link-id = 'class_l_c_d'; - }; - }; /* node */ - node = { - node-id = 12; - node-label = 'LiquidCrystal_I2C'; - node-link = { - node-link-id = 'class_liquid_crystal___i2_c'; - }; - node-child = { - child-id = '13'; - relation = public-inheritance; - }; /* node-child */ - node-child = { - child-id = '14'; - relation = usage; - edgelabel = <<_EnD_oF_dEf_TeXt_ -_i2cio -_EnD_oF_dEf_TeXt_; - }; /* node-child */ - }; /* node */ - node = { - node-id = 14; - node-label = 'I2CIO'; - node-link = { - node-link-id = 'class_i2_c_i_o'; - }; - }; /* node */ - -_EnD_oF_dEf_TeXt_; -}; /* class */ -file = { - file-id = '_i2_c_i_o_8cpp'; - file-name = 'I2CIO.cpp'; - file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.cpp'; - file-first-line = '1'; - file-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - file-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* file */ -file = { - file-id = '_i2_c_i_o_8h'; - file-name = 'I2CIO.h'; - define = { - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_i2_c_i_o_8h_1a218dbde2f6fda8c5825e25da10864c71'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = '_I2CIO_VERSION'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -"1.0.0" -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; - define-mem-desc-line = '34'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - }; - file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/I2CIO.h'; - file-first-line = '1'; - file-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - file-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* file */ -file = { - file-id = '_l_c_d_8cpp'; - file-name = 'LCD.cpp'; - file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.cpp'; - file-first-line = '1'; - file-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - file-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* file */ -file = { - file-id = '_l_c_d_8h'; - file-name = 'LCD.h'; - define = { - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1acc3509bc0442b41e2b816555de473ed2'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_CLEARDISPLAY'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x01 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '53'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @defined - @abstract All these definitions shouldn't be used unless you are writing - a driver. - @discussion All these definitions are for driver implementation only and - shouldn't be used by applications. -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1a154c86a887633d0f6d9988e4dbb1f419'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_RETURNHOME'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x02 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '54'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1a5597e1d5819ea2f0734ad4313abf6703'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_ENTRYMODESET'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x04 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '55'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1adfb8b2b8b8a08d7313504d7a4f89d99f'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_DISPLAYCONTROL'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x08 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '56'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1a61f16a2b7550e4700f7898a7587c5594'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_CURSORSHIFT'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x10 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '57'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1aaef882ae70d1f485cd132815d9716111'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_FUNCTIONSET'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x20 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '58'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1aae6ea856879c11dee58493184582a52f'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_SETCGRAMADDR'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x40 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '59'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1a15008b832807a208d9d88c74e6751ebf'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_SETDDRAMADDR'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x80 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '60'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1a43c26ba2e66880fac95ef640b56873ad'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_ENTRYRIGHT'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x00 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '64'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1ae7c6309fce6200bd7526d090a4a84dd0'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_ENTRYLEFT'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x02 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '65'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1aa2cf1d0f4a319e53c009cffe1184466c'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_ENTRYSHIFTINCREMENT'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x01 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '66'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1a049ee97e98d04788c1da9a55590fbe42'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_ENTRYSHIFTDECREMENT'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x00 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '67'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1a76236ae8317b34bbc98ea56bc0a2639c'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_DISPLAYON'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x04 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '71'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1a257ebe775cac7140cf82aa40d8ce545a'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_DISPLAYOFF'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x00 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '72'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1ab67f0adccde68de88eee0513fdfc4574'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_CURSORON'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x02 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '73'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1a32b194a3adaa0a0bb69acee2e6a754fa'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_CURSOROFF'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x00 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '74'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1ac3b19d4e6553b9bbf18a23387e439206'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_BLINKON'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x01 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '75'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1a4b28243034cec656b0ed490ba6979752'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_BLINKOFF'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x00 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '76'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1ab2f7b67abfac33f610acfd5d7a971f40'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_DISPLAYMOVE'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x08 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '80'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1ac21f0302ac4136775877d5f4759e4f74'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_CURSORMOVE'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x00 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '81'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1acf5999180233790bb2c9902efde58f7f'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_MOVERIGHT'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x04 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '82'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1aafb86adb0dfca1e65d65b2cd1946a009'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_MOVELEFT'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x00 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '83'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1a59a57ca857dae5d89eb5f2a38c4ac6f0'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_8BITMODE'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x10 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '87'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1ab8c35d355d2372090c7a347e961c9224'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_4BITMODE'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x00 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '88'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1a7987e93538df2819583ba43b81ddbb25'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_2LINE'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x08 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '89'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1a8c85cf88d8af66a47c42249d81c94641'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_1LINE'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x00 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '90'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1abb3210156d88d3fe18c9352eb161fe42'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_5x10DOTS'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x04 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '91'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_l_c_d_8h_1a9ef57e724c1b846dae0f531aff6fb464'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_5x8DOTS'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x00 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - define-mem-desc-line = '92'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - }; - file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LCD.h'; - file-first-line = '1'; - file-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - file-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* file */ -file = { - file-id = '_liquid_crystal_8cpp'; - file-name = 'LiquidCrystal.cpp'; - file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.cpp'; - file-first-line = '1'; - file-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - file-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* file */ -file = { - file-id = '_liquid_crystal_8h'; - file-name = 'LiquidCrystal.h'; - file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal.h'; - file-first-line = '1'; - file-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - file-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* file */ -file = { - file-id = '_liquid_crystal___i2_c_8cpp'; - file-name = 'LiquidCrystal_I2C.cpp'; - file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.cpp'; - file-first-line = '1'; - file-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - file-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* file */ -file = { - file-id = '_liquid_crystal___i2_c_8h'; - file-name = 'LiquidCrystal_I2C.h'; - define = { - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___i2_c_8h_1ac059d24dfe9c1e1f7c07cb7869a1833b'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_BACKLIGHT'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x00 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - define-mem-desc-line = '41'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___i2_c_8h_1a65fa786d6e31fe8b1aa51784a9736581'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'LCD_NOBACKLIGHT'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -0x80 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - define-mem-desc-line = '42'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___i2_c_8h_1ab5ef25ebfe582f7bf0d93e2770548e2c'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'En'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -B01000000 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - define-mem-desc-line = '54'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @warning These definitions will have to be changed should the IOExpander be - connected differently to this default. - - - @defined - @abstract Enable bit of the LCD - @discussion Defines the IO of the expander connected to the LCD Enable -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___i2_c_8h_1a98b6a2661a04ebbc1b3f38da70306814'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'Rw'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -B00100000 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - define-mem-desc-line = '61'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @defined - @abstract Read/Write bit of the LCD - @discussion Defines the IO of the expander connected to the LCD Rw pin -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - define-member = { - define-mem-kind = 'define'; - define-mem-id = '_liquid_crystal___i2_c_8h_1a345d1a871beb9e772c3bf9ef75412bb5'; - define-mem-virt = normal; - define-mem-prot = public; - define-mem-name = 'Rs'; - define-mem-initializer = <<_EnD_oF_dEf_TeXt_ -B00010000 -_EnD_oF_dEf_TeXt_; - define-mem-desc-file = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - define-mem-desc-line = '68'; - define-mem-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - define-mem-documentation = <<_EnD_oF_dEf_TeXt_ - @defined - @abstract Register bit of the LCD - @discussion Defines the IO of the expander connected to the LCD Register select pin -_EnD_oF_dEf_TeXt_; - }; /* define-member */ - }; - file-full-name = '/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_I2C.h'; - file-first-line = '1'; - file-briefdesc = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; - file-documentation = <<_EnD_oF_dEf_TeXt_ - -_EnD_oF_dEf_TeXt_; -}; /* file */ diff --git a/libraries/LiquidCrystal/utility/docs/html/_fast_i_o_8cpp.html b/libraries/LiquidCrystal/utility/docs/html/_fast_i_o_8cpp.html deleted file mode 100644 index 94260bf..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/_fast_i_o_8cpp.html +++ /dev/null @@ -1,576 +0,0 @@ - - - - -LCD Library: FastIO.cpp File Reference - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
- -
-
FastIO.cpp File Reference
-
-
-
#include "FastIO.h"
-
-

Go to the source code of this file.

- - - - - - - - - - - - - -

-Functions

int fio_digitalRead (fio_register pinRegister, uint8_t pinBit)
void fio_digitalWrite (fio_register pinRegister, fio_bit pinBit, uint8_t value)
fio_bit fio_pinToBit (uint8_t pin)
fio_register fio_pinToInputRegister (uint8_t pin)
fio_register fio_pinToOutputRegister (uint8_t pin, uint8_t initial_state)
void fio_shiftOut (fio_register dataRegister, fio_bit dataBit, fio_register clockRegister, fio_bit clockBit)
void fio_shiftOut (fio_register dataRegister, fio_bit dataBit, fio_register clockRegister, fio_bit clockBit, uint8_t value, uint8_t bitOrder)
void fio_shiftOut1 (uint8_t pin, uint8_t value, boolean noLatch)
void fio_shiftOut1 (fio_register shift1Register, fio_bit shift1Bit, uint8_t value, boolean noLatch)
void fio_shiftOut1_init (fio_register shift1Register, fio_bit shift1Bit)
void fio_shiftOut1_init (uint8_t pin)
-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
int fio_digitalRead (fio_register pinRegister,
fio_bit pinBit 
)
-
-
-

direct digital read without any checks falls back to normal digitalRead if fast io is disabled

-
Parameters:
- - - -
pinRegister[in]Register - ignored if fast io is disabled
pinBit[in]Bit - Pin if fast io is disabled
-
-
-
Returns:
Value read from pin
- -

Definition at line 95 of file FastIO.cpp.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void fio_digitalWrite (fio_register pinRegister,
fio_bit pinBit,
uint8_t value 
)
-
-
-

direct digital write without any checks falls back to normal digitalWrite if fast io is disabled

-
Parameters:
- - - - -
pinRegister[in]Register - ignored if fast digital write is disabled
pinBit[in]Bit - Pin if fast digital write is disabled
value[in]desired output
-
-
- -

Definition at line 76 of file FastIO.cpp.

- -
-
- -
-
- - - - - - - - -
fio_bit fio_pinToBit (uint8_t pin)
-
-
-

Find the bit which belongs to specified pin if fast digitalWrite is disabled this function returns the pin

-
Parameters:
- - -
pin[in]Number of a digital pin
-
-
-
Returns:
Bit
- -

Definition at line 65 of file FastIO.cpp.

- -
-
- -
-
- - - - - - - - -
fio_register fio_pinToInputRegister (uint8_t pin)
-
-
-

Get the input register for specified pin. if fast digital IO is disabled this function returns NULL

-
Parameters:
- - -
pin[in]Number of a digital pin
-
-
-
Returns:
Register
- -

Definition at line 52 of file FastIO.cpp.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
fio_register fio_pinToOutputRegister (uint8_t pin,
uint8_t initial_state = LOW 
)
-
-
-

Get the output register for specified pin. if fast digital IO is disabled this function returns NULL

-
Parameters:
- - -
pin[in]Number of a digital pin
-
-
-
Returns:
Register
- -

Definition at line 35 of file FastIO.cpp.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void fio_shiftOut (fio_register dataRegister,
fio_bit dataBit,
fio_register clockRegister,
fio_bit clockBit 
)
-
-
-

faster shift out clear using fast digital write falls back to normal digitalWrite if fastio is disabled

-
Parameters:
- - - - - -
dataRegister[in]Register of data pin - ignored if fast digital write is disabled
dataBit[in]Bit of data pin - Pin if fast digital write is disabled
clockRegister[in]Register of data pin - ignored if fast digital write is disabled
clockBit[in]Bit of data pin - Pin if fast digital write is disabled
-
-
- -

Definition at line 159 of file FastIO.cpp.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void fio_shiftOut (fio_register dataRegister,
fio_bit dataBit,
fio_register clockRegister,
fio_bit clockBit,
uint8_t value,
uint8_t bitOrder 
)
-
-
-

faster shift out using fast digital write falls back to normal digitalWrite if fastio is disabled

-
Parameters:
- - - - - - -
dataRegister[in]Register of data pin - ignored if fast digital write is disabled
dataBit[in]Bit of data pin - Pin if fast digital write is disabled
clockRegister[in]Register of data pin - ignored if fast digital write is disabled
clockBit[in]Bit of data pin - Pin if fast digital write is disabled
bitOrder[in]bit order
-
-
- -

Definition at line 108 of file FastIO.cpp.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void fio_shiftOut1 (uint8_t pin,
uint8_t value,
boolean noLatch = false 
)
-
-
-

one wire shift out protocol needs initialisation (fio_shiftOut1_init)

-
Parameters:
- - - -
pin[in]digital pin
value[in]value to shift out, last byte is ignored and always shifted out LOW
-
-
- -

Definition at line 264 of file FastIO.cpp.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void fio_shiftOut1 (fio_register shift1Register,
fio_bit shift1Bit,
uint8_t value,
boolean noLatch = false 
)
-
-
-

one wire shift out protocol needs initialisation (fio_shiftOut1_init)

-
Parameters:
- - - - -
shift1Register[in]pins register
shift1Bit[in]pins bit
value[in]value to shift out, last byte is ignored and always shifted out LOW
-
-
- -

Definition at line 190 of file FastIO.cpp.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void fio_shiftOut1_init (fio_register shift1Register,
fio_bit shift1Bit 
)
-
-
-

initializes one wire shift out protocol Puts pin to HIGH state and delays until Capacitors are charged.

-
Parameters:
- - - -
shift1Register[in]pins register
shift1Bit[in]pins bit
-
-
- -

Definition at line 181 of file FastIO.cpp.

- -
-
- -
-
- - - - - - - - -
void fio_shiftOut1_init (uint8_t pin)
-
-
-

initializes one wire shift out protocol Puts pin to HIGH state and delays until Capacitors are charged.

-
Parameters:
- - -
pin[in]digital pin
-
-
- -

Definition at line 176 of file FastIO.cpp.

- -
-
-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/_fast_i_o_8cpp_source.html b/libraries/LiquidCrystal/utility/docs/html/_fast_i_o_8cpp_source.html deleted file mode 100644 index dc0cf2c..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/_fast_i_o_8cpp_source.html +++ /dev/null @@ -1,378 +0,0 @@ - - - - -LCD Library: FastIO.cpp Source File - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
-
-
FastIO.cpp
-
-
-Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
-00002 // Created by Florian Fida on 20/01/12
-00003 // Copyright 2012 - Under creative commons license 3.0:
-00004 //        Attribution-ShareAlike CC BY-SA
-00005 //        http://creativecommons.org/licenses/by-sa/3.0/
-00006 //
-00007 // This software is furnished "as is", without technical support, and with no
-00008 // warranty, express or implied, as to its usefulness for any purpose.
-00009 // ---------------------------------------------------------------------------
-00010 // fio_shiftOut1 functions are based on Shif1 protocol developed by Roman Black 
-00011 // (http://www.romanblack.com/shift1.htm)
-00012 //
-00013 // Thread Safe: No
-00014 // Extendable: Yes
-00015 //
-00016 // @file FastIO.h
-00017 // This file implements basic fast IO routines.
-00018 // 
-00019 // @brief 
-00020 //
-00021 // @version API 1.0.0
-00022 //
-00023 // @author Florian Fida -
-00024 //
-00025 // 2012-03-16 bperrybap updated fio_shiftout() to be smaller & faster
-00026 //
-00027 // @todo:
-00028 //  support chipkit:
-00029 // (https://github.com/chipKIT32/chipKIT32-MAX/blob/master/hardware/pic32/
-00030 //   cores/pic32/wiring_digital.c)
-00031 // ---------------------------------------------------------------------------
-00032 #include "FastIO.h"
-00033 
-00034 
-00035 fio_register fio_pinToOutputRegister(uint8_t pin, uint8_t initial_state)
-00036 {
-00037         pinMode(pin, OUTPUT);
-00038    
-00039         if(initial_state != SKIP) 
-00040    {
-00041       digitalWrite(pin, initial_state); // also turns off pwm timer
-00042    }
-00043 #ifdef FIO_FALLBACK
-00044         //  just wasting memory if not using fast io...
-00045         return 0;
-00046 #else
-00047         return portOutputRegister(digitalPinToPort(pin));
-00048 #endif
-00049 }
-00050 
-00051 
-00052 fio_register fio_pinToInputRegister(uint8_t pin)
-00053 {
-00054         pinMode(pin, INPUT);
-00055         digitalWrite(pin, LOW); // also turns off pwm timer and pullup
-00056 #ifdef FIO_FALLBACK
-00057         //  just wasting memory if not using fast io...
-00058         return 0;
-00059 #else
-00060         return portInputRegister(digitalPinToPort(pin));
-00061 #endif
-00062 }
-00063 
-00064 
-00065 fio_bit fio_pinToBit(uint8_t pin)
-00066 {
-00067 #ifdef FIO_FALLBACK
-00068         // (ab)use the bit variable to store the pin
-00069         return pin;
-00070 #else
-00071         return digitalPinToBitMask(pin);
-00072 #endif
-00073 }
-00074 
-00075 
-00076 void fio_digitalWrite(fio_register pinRegister, fio_bit pinBit, uint8_t value) 
-00077 {
-00078 #ifdef FIO_FALLBACK
-00079         digitalWrite(pinBit, value);
-00080 #else
-00081    ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
-00082    {
-00083       if(value == LOW)
-00084       {
-00085          fio_digitalWrite_LOW(pinRegister,pinBit);
-00086       }
-00087       else
-00088       {
-00089          fio_digitalWrite_HIGH(pinRegister,pinBit);
-00090       }
-00091    }
-00092 #endif
-00093 }
-00094 
-00095 int fio_digitalRead(fio_register pinRegister, uint8_t pinBit)
-00096 {
-00097 #ifdef FIO_FALLBACK
-00098         return digitalRead (pinBit);
-00099 #else
-00100         if (*pinRegister & pinBit)
-00101    {
-00102       return HIGH;
-00103    }
-00104         return LOW;
-00105 #endif
-00106 }
-00107 
-00108 void fio_shiftOut (fio_register dataRegister, fio_bit dataBit, 
-00109                    fio_register clockRegister, fio_bit clockBit, 
-00110                    uint8_t value, uint8_t bitOrder)
-00111 {
-00112         // # disable interrupts
-00113         int8_t i;
-00114    
-00115         if(bitOrder == LSBFIRST)
-00116         {
-00117                 for(i = 0; i < 8; i++)
-00118                 {
-00119                         ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
-00120                         {
-00121                                 if(value & 1)
-00122             {
-00123                fio_digitalWrite_HIGH(dataRegister, dataBit);
-00124                                 }
-00125             else
-00126             {
-00127                fio_digitalWrite_LOW(dataRegister, dataBit);
-00128             }
-00129             value >>= 1;
-00130                                 fio_digitalWrite_HIGH (clockRegister, clockBit);
-00131                                 fio_digitalWrite_LOW (clockRegister,clockBit);
-00132                         }
-00133                 }
-00134       
-00135         }
-00136         else
-00137         {
-00138                 for(i = 0; i < 8; i++)
-00139                 {
-00140                         ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
-00141                         {
-00142                                 if(value & 0x80)
-00143             {
-00144                fio_digitalWrite_HIGH(dataRegister, dataBit);
-00145                                 }
-00146             else
-00147             {
-00148                fio_digitalWrite_LOW(dataRegister, dataBit);
-00149             }
-00150                                 value <<= 1;
-00151                                 fio_digitalWrite_HIGH (clockRegister, clockBit);
-00152                                 fio_digitalWrite_LOW (clockRegister,clockBit);
-00153                         }
-00154                 }
-00155         }
-00156 }
-00157 
-00158 
-00159 void fio_shiftOut(fio_register dataRegister, fio_bit dataBit, 
-00160                   fio_register clockRegister, fio_bit clockBit)
-00161 {
-00162    ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
-00163    {
-00164       // shift out 0x0 (B00000000) fast, byte order is irrelevant
-00165       fio_digitalWrite_LOW (dataRegister, dataBit);
-00166       
-00167       for(uint8_t i = 0; i<8; ++i)
-00168       {
-00169          fio_digitalWrite_HIGH (clockRegister, clockBit);
-00170          fio_digitalWrite_SWITCH (clockRegister, clockBit);
-00171       }
-00172    }
-00173 }
-00174 
-00175 
-00176 void fio_shiftOut1_init(uint8_t pin)
-00177 {
-00178         fio_shiftOut1_init(fio_pinToOutputRegister(pin,HIGH),fio_pinToBit(pin));
-00179 }
-00180 
-00181 void fio_shiftOut1_init(fio_register shift1Register, fio_bit shift1Bit)
-00182 {
-00183         // Make sure that capacitors are charged
-00184         // 300us is an educated guess...
-00185         fio_digitalWrite(shift1Register,shift1Bit,HIGH);
-00186         delayMicroseconds(300);
-00187 }
-00188 
-00189 
-00190 void fio_shiftOut1(fio_register shift1Register, fio_bit shift1Bit, uint8_t value, 
-00191                    boolean noLatch)
-00192 {
-00193         /*
-00194          * this function are based on Shif1 protocol developed by Roman Black 
-00195     *    (http://www.romanblack.com/shift1.htm)
-00196          *
-00197          * test sketches:
-00198          *      http://pastebin.com/raw.php?i=2hnC9v2Z
-00199          *      http://pastebin.com/raw.php?i=bGg4DhXQ
-00200          *      http://pastebin.com/raw.php?i=tg1ZFiM5
-00201          *    http://pastebin.com/raw.php?i=93ExPDD3 - cascading
-00202          * tested with:
-00203          *      TPIC6595N - seems to work fine (circuit: http://www.3guys1laser.com/
-00204     *                   arduino-one-wire-shift-register-prototype)
-00205          *      7HC595N
-00206          */
-00207    
-00208         // iterate but ignore last bit (is it correct now?)
-00209         for(int8_t i = 7; i>=0; --i)
-00210    {
-00211       
-00212                 // assume that pin is HIGH (smokin' pot all day... :) - requires 
-00213       // initialization
-00214                 if(value & _BV(i))
-00215       {
-00216          ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
-00217          {
-00218             // HIGH = 1 Bit
-00219             fio_digitalWrite_SWITCHTO(shift1Register,shift1Bit,LOW);
-00220             //hold pin LOW for 1us - done! :)
-00221             fio_digitalWrite_SWITCHTO(shift1Register,shift1Bit,HIGH);
-00222          } // end critical section
-00223          //hold pin HIGH for 15us
-00224          delayMicroseconds(15);
-00225                 }
-00226       else
-00227       {
-00228          ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
-00229          {
-00230             // LOW = 0 Bit
-00231             fio_digitalWrite_SWITCHTO(shift1Register,shift1Bit,LOW);
-00232             // hold pin LOW for 15us
-00233             delayMicroseconds(15);
-00234             fio_digitalWrite_SWITCHTO(shift1Register,shift1Bit,HIGH);
-00235          } // end critical section
-00236          
-00237          // hold pin HIGH for 30us
-00238          delayMicroseconds(30);         
-00239                 }
-00240                 if(!noLatch && i==1)
-00241       {
-00242          break;
-00243       }
-00244         }
-00245    
-00246         if(!noLatch)
-00247    {
-00248       ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
-00249       {
-00250          // send last bit (=LOW) and Latch command
-00251          fio_digitalWrite_SWITCHTO(shift1Register,shift1Bit,LOW);
-00252       } // end critical section
-00253       delayMicroseconds(199);           // Hold pin low for 200us
-00254       
-00255       ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
-00256       {
-00257          fio_digitalWrite_HIGH(shift1Register,shift1Bit);
-00258       } // end critical section
-00259                 delayMicroseconds(299);   // Hold pin high for 300us and leave it that 
-00260       // way - using explicit HIGH here, just in case.
-00261         }
-00262 }
-00263 
-00264 void fio_shiftOut1(uint8_t pin, uint8_t value, boolean noLatch)
-00265 {
-00266         fio_shiftOut1(fio_pinToOutputRegister(pin, SKIP),fio_pinToBit(pin),value, noLatch);
-00267 }
-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/_fast_i_o_8h.html b/libraries/LiquidCrystal/utility/docs/html/_fast_i_o_8h.html deleted file mode 100644 index 8137412..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/_fast_i_o_8h.html +++ /dev/null @@ -1,813 +0,0 @@ - - - - -LCD Library: FastIO.h File Reference - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
- -
-
FastIO.h File Reference
-
-
-
#include <WProgram.h>
-#include <pins_arduino.h>
-#include <inttypes.h>
-
-

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - -

-Defines

#define ATOMIC_BLOCK(dummy)   if(true)
#define ATOMIC_RESTORESTATE
#define fio_digitalWrite_HIGH(reg, bit)   digitalWrite(bit,HIGH)
#define fio_digitalWrite_LOW(reg, bit)   digitalWrite(bit,LOW)
#define fio_digitalWrite_SWITCH(reg, bit)   digitalWrite(bit, !digitalRead(bit))
#define fio_digitalWrite_SWITCHTO(reg, bit, val)   digitalWrite(bit,val);
#define FIO_FALLBACK
#define SKIP   0x23

-Typedefs

typedef uint8_t fio_bit
typedef uint8_t fio_register

-Functions

int fio_digitalRead (fio_register pinRegister, fio_bit pinBit)
void fio_digitalWrite (fio_register pinRegister, fio_bit pinBit, uint8_t value)
fio_bit fio_pinToBit (uint8_t pin)
fio_register fio_pinToInputRegister (uint8_t pin)
fio_register fio_pinToOutputRegister (uint8_t pin, uint8_t initial_state=LOW)
void fio_shiftOut (fio_register dataRegister, fio_bit dataBit, fio_register clockRegister, fio_bit clockBit)
void fio_shiftOut (fio_register dataRegister, fio_bit dataBit, fio_register clockRegister, fio_bit clockBit, uint8_t value, uint8_t bitOrder)
void fio_shiftOut1 (fio_register shift1Register, fio_bit shift1Bit, uint8_t value, boolean noLatch=false)
void fio_shiftOut1 (uint8_t pin, uint8_t value, boolean noLatch=false)
void fio_shiftOut1_init (fio_register shift1Register, fio_bit shift1Bit)
void fio_shiftOut1_init (uint8_t pin)
-

Define Documentation

- -
-
- - - - - - - - -
#define ATOMIC_BLOCK( dummy)   if(true)
-
-
- -

Definition at line 58 of file FastIO.h.

- -
-
- -
-
- - - - -
#define ATOMIC_RESTORESTATE
-
-
- -

Definition at line 59 of file FastIO.h.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
#define fio_digitalWrite_HIGH( reg,
 bit 
)   digitalWrite(bit,HIGH)
-
-
-

This is where the magic happens that makes things fast. Implemented as preprocessor directives to force inlining SWITCH is fast for FIO but probably slow for FIO_FALLBACK so SWITCHTO is recommended if the value is known.

- -

Definition at line 143 of file FastIO.h.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
#define fio_digitalWrite_LOW( reg,
 bit 
)   digitalWrite(bit,LOW)
-
-
- -

Definition at line 144 of file FastIO.h.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
#define fio_digitalWrite_SWITCH( reg,
 bit 
)   digitalWrite(bit, !digitalRead(bit))
-
-
- -

Definition at line 145 of file FastIO.h.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
#define fio_digitalWrite_SWITCHTO( reg,
 bit,
 val 
)   digitalWrite(bit,val);
-
-
- -

Definition at line 146 of file FastIO.h.

- -
-
- -
-
- - - - -
#define FIO_FALLBACK
-
-
- -

Definition at line 57 of file FastIO.h.

- -
-
- -
-
- - - - -
#define SKIP   0x23
-
-
- -

Definition at line 42 of file FastIO.h.

- -
-
-

Typedef Documentation

- -
-
- - - - -
typedef uint8_t fio_bit
-
-
- -

Definition at line 60 of file FastIO.h.

- -
-
- -
-
- - - - -
typedef uint8_t fio_register
-
-
- -

Definition at line 61 of file FastIO.h.

- -
-
-

Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
int fio_digitalRead (fio_register pinRegister,
fio_bit pinBit 
)
-
-
-

direct digital read without any checks falls back to normal digitalRead if fast io is disabled

-
Parameters:
- - - -
pinRegister[in]Register - ignored if fast io is disabled
pinBit[in]Bit - Pin if fast io is disabled
-
-
-
Returns:
Value read from pin
- -

Definition at line 95 of file FastIO.cpp.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void fio_digitalWrite (fio_register pinRegister,
fio_bit pinBit,
uint8_t value 
)
-
-
-

direct digital write without any checks falls back to normal digitalWrite if fast io is disabled

-
Parameters:
- - - - -
pinRegister[in]Register - ignored if fast digital write is disabled
pinBit[in]Bit - Pin if fast digital write is disabled
value[in]desired output
-
-
- -

Definition at line 76 of file FastIO.cpp.

- -
-
- -
-
- - - - - - - - -
fio_bit fio_pinToBit (uint8_t pin)
-
-
-

Find the bit which belongs to specified pin if fast digitalWrite is disabled this function returns the pin

-
Parameters:
- - -
pin[in]Number of a digital pin
-
-
-
Returns:
Bit
- -

Definition at line 65 of file FastIO.cpp.

- -
-
- -
-
- - - - - - - - -
fio_register fio_pinToInputRegister (uint8_t pin)
-
-
-

Get the input register for specified pin. if fast digital IO is disabled this function returns NULL

-
Parameters:
- - -
pin[in]Number of a digital pin
-
-
-
Returns:
Register
- -

Definition at line 52 of file FastIO.cpp.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
fio_register fio_pinToOutputRegister (uint8_t pin,
uint8_t initial_state = LOW 
)
-
-
-

Get the output register for specified pin. if fast digital IO is disabled this function returns NULL

-
Parameters:
- - -
pin[in]Number of a digital pin
-
-
-
Returns:
Register
- -

Definition at line 35 of file FastIO.cpp.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void fio_shiftOut (fio_register dataRegister,
fio_bit dataBit,
fio_register clockRegister,
fio_bit clockBit 
)
-
-
-

faster shift out clear using fast digital write falls back to normal digitalWrite if fastio is disabled

-
Parameters:
- - - - - -
dataRegister[in]Register of data pin - ignored if fast digital write is disabled
dataBit[in]Bit of data pin - Pin if fast digital write is disabled
clockRegister[in]Register of data pin - ignored if fast digital write is disabled
clockBit[in]Bit of data pin - Pin if fast digital write is disabled
-
-
- -

Definition at line 159 of file FastIO.cpp.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void fio_shiftOut (fio_register dataRegister,
fio_bit dataBit,
fio_register clockRegister,
fio_bit clockBit,
uint8_t value,
uint8_t bitOrder 
)
-
-
-

faster shift out using fast digital write falls back to normal digitalWrite if fastio is disabled

-
Parameters:
- - - - - - -
dataRegister[in]Register of data pin - ignored if fast digital write is disabled
dataBit[in]Bit of data pin - Pin if fast digital write is disabled
clockRegister[in]Register of data pin - ignored if fast digital write is disabled
clockBit[in]Bit of data pin - Pin if fast digital write is disabled
bitOrder[in]bit order
-
-
- -

Definition at line 108 of file FastIO.cpp.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void fio_shiftOut1 (fio_register shift1Register,
fio_bit shift1Bit,
uint8_t value,
boolean noLatch = false 
)
-
-
-

one wire shift out protocol needs initialisation (fio_shiftOut1_init)

-
Parameters:
- - - - -
shift1Register[in]pins register
shift1Bit[in]pins bit
value[in]value to shift out, last byte is ignored and always shifted out LOW
-
-
- -

Definition at line 190 of file FastIO.cpp.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void fio_shiftOut1 (uint8_t pin,
uint8_t value,
boolean noLatch = false 
)
-
-
-

one wire shift out protocol needs initialisation (fio_shiftOut1_init)

-
Parameters:
- - - -
pin[in]digital pin
value[in]value to shift out, last byte is ignored and always shifted out LOW
-
-
- -

Definition at line 264 of file FastIO.cpp.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void fio_shiftOut1_init (fio_register shift1Register,
fio_bit shift1Bit 
)
-
-
-

initializes one wire shift out protocol Puts pin to HIGH state and delays until Capacitors are charged.

-
Parameters:
- - - -
shift1Register[in]pins register
shift1Bit[in]pins bit
-
-
- -

Definition at line 181 of file FastIO.cpp.

- -
-
- -
-
- - - - - - - - -
void fio_shiftOut1_init (uint8_t pin)
-
-
-

initializes one wire shift out protocol Puts pin to HIGH state and delays until Capacitors are charged.

-
Parameters:
- - -
pin[in]digital pin
-
-
- -

Definition at line 176 of file FastIO.cpp.

- -
-
-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/_fast_i_o_8h_source.html b/libraries/LiquidCrystal/utility/docs/html/_fast_i_o_8h_source.html deleted file mode 100644 index 9a3eb6f..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/_fast_i_o_8h_source.html +++ /dev/null @@ -1,236 +0,0 @@ - - - - -LCD Library: FastIO.h Source File - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
-
-
FastIO.h
-
-
-Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
-00002 // Created by Florian Fida on 20/01/12
-00003 // Copyright 2012 - Under creative commons license 3.0:
-00004 //        Attribution-ShareAlike CC BY-SA
-00005 //        http://creativecommons.org/licenses/by-sa/3.0/
-00006 //
-00007 // This software is furnished "as is", without technical support, and with no
-00008 // warranty, express or implied, as to its usefulness for any purpose.
-00009 // ---------------------------------------------------------------------------
-00010 // fio_shiftOut1 functions are based on Shif1 protocol developed by Roman Black 
-00011 // (http://www.romanblack.com/shift1.htm)
-00012 //
-00013 // Thread Safe: No
-00014 // Extendable: Yes
-00015 //
-00016 // @file FastIO.h
-00017 // This file implements basic fast IO routines.
-00018 // 
-00019 // @brief 
-00020 //
-00021 // @version API 1.0.0
-00022 //
-00023 // @author Florian Fida -
-00024 // 2012-03-16 bperrybap mods for chipkit32 (pic32) Arduino
-00025 //  support chipkit:
-00026 // (https://github.com/chipKIT32/chipKIT32-MAX/blob/master/hardware/pic32/
-00027 //   cores/pic32/wiring_digital.c)
-00028 // ---------------------------------------------------------------------------
-00029 #ifndef _FAST_IO_H_
-00030 #define _FAST_IO_H_
-00031 
-00032 #if (ARDUINO <  100)
-00033 #include <WProgram.h>
-00034 #else
-00035 #include <Arduino.h>
-00036 #endif
-00037 
-00038 #include <pins_arduino.h> // pleasing sanguino core
-00039 #include <inttypes.h>
-00040 
-00041 
-00042 #define SKIP 0x23
-00043 
-00044 #if defined (__AVR__)
-00045 #include <util/atomic.h> // for critical section management
-00046 typedef uint8_t fio_bit;
-00047 typedef volatile uint8_t *fio_register;
-00048 
-00049 
-00050 #elif defined(__PIC32MX__)
-00051 typedef uint32_t fio_bit;
-00052 typedef volatile uint32_t *fio_register;
-00053 
-00054 
-00055 #else
-00056 // fallback to Arduino standard digital i/o routines
-00057 #define FIO_FALLBACK
-00058 #define ATOMIC_BLOCK(dummy) if(true)
-00059 #define ATOMIC_RESTORESTATE
-00060 typedef uint8_t fio_bit;
-00061 typedef uint8_t fio_register;
-00062 #endif
-00063 
-00064 
-00065 
-00066 #if !defined(FIO_FALLBACK) && !defined(ATOMIC_BLOCK)
-00067 /*
-00068  * Define an ATOMIC_BLOCK that implements ATOMIC_FORCEON type
-00069  * Using the portable Arduino interrupts() and noInterrupts()
-00070  */
-00071 #define ATOMIC_RESTORESTATE ATOMIC_FORCEON // sorry, no support for save/restore yet.
-00072 #define ATOMIC_FORCEON uint8_t sreg_save \
-00073               __attribute__((__cleanup__(__iSeiParam))) = 0
-00074 
-00075 static __inline__ uint8_t __iCliRetVal(void)
-00076 {
-00077         noInterrupts();
-00078         return(1);
-00079 }
-00080 static __inline__ void __iSeiParam(const uint8_t *__s)
-00081 {
-00082         interrupts();
-00083 }
-00084 #define ATOMIC_BLOCK(type) for(type,  __Todo = __iCliRetVal(); __Todo; __Todo = 0)
-00085 
-00086 #endif // end of block to create compatible ATOMIC_BLOCK()
-00087 
-00088 
-00089 
-00097 fio_register fio_pinToOutputRegister(uint8_t pin, uint8_t initial_state = LOW);
-00098 
-00106 fio_register fio_pinToInputRegister(uint8_t pin);
-00107 
-00115 fio_bit fio_pinToBit(uint8_t pin);
-00116 
-00117 
-00127 // __attribute__ ((always_inline)) /* let the optimizer decide that for now */
-00128 void fio_digitalWrite ( fio_register pinRegister, fio_bit pinBit, uint8_t value );
-00129 
-00136 #ifndef FIO_FALLBACK
-00137 #define fio_digitalWrite_LOW(reg,bit) *reg &= ~bit
-00138 #define fio_digitalWrite_HIGH(reg,bit) *reg |= bit
-00139 #define fio_digitalWrite_SWITCH(reg,bit) *reg ^= bit
-00140 #define fio_digitalWrite_SWITCHTO(reg,bit,val) fio_digitalWrite_SWITCH(reg,bit)
-00141 #else
-00142 // reg -> dummy NULL, bit -> pin
-00143 #define fio_digitalWrite_HIGH(reg,bit) digitalWrite(bit,HIGH)
-00144 #define fio_digitalWrite_LOW(reg,bit) digitalWrite(bit,LOW)
-00145 #define fio_digitalWrite_SWITCH(reg,bit) digitalWrite(bit, !digitalRead(bit))
-00146 #define fio_digitalWrite_SWITCHTO(reg,bit,val) digitalWrite(bit,val);
-00147 #endif
-00148 
-00158 int fio_digitalRead ( fio_register pinRegister, fio_bit pinBit );
-00159 
-00171 void fio_shiftOut( fio_register dataRegister, fio_bit dataBit, fio_register clockRegister, 
-00172                   fio_bit clockBit, uint8_t value, uint8_t bitOrder );
-00173 
-00184 void fio_shiftOut(fio_register dataRegister, fio_bit dataBit, fio_register clockRegister, fio_bit clockBit);
-00185 
-00194 void fio_shiftOut1(fio_register shift1Register, fio_bit shift1Bit, uint8_t value, boolean noLatch = false);
-00202 void fio_shiftOut1(uint8_t pin, uint8_t value, boolean noLatch = false);
-00210 void fio_shiftOut1_init(fio_register shift1Register, fio_bit shift1Bit);
-00217 void fio_shiftOut1_init(uint8_t pin);
-00218 
-00219 #endif // FAST_IO_H
-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/_i2_c_i_o_8cpp.html b/libraries/LiquidCrystal/utility/docs/html/_i2_c_i_o_8cpp.html deleted file mode 100644 index 0b5ae7c..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/_i2_c_i_o_8cpp.html +++ /dev/null @@ -1,119 +0,0 @@ - - - - -LCD Library: I2CIO.cpp File Reference - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
-
-
I2CIO.cpp File Reference
-
-
-
#include <WProgram.h>
-#include <inttypes.h>
-#include <../Wire/Wire.h>
-#include "I2CIO.h"
-
-

Go to the source code of this file.

- -
-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/_i2_c_i_o_8cpp_source.html b/libraries/LiquidCrystal/utility/docs/html/_i2_c_i_o_8cpp_source.html deleted file mode 100644 index f1198cf..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/_i2_c_i_o_8cpp_source.html +++ /dev/null @@ -1,309 +0,0 @@ - - - - -LCD Library: I2CIO.cpp Source File - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
-
-
I2CIO.cpp
-
-
-Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
-00002 // Created by Francisco Malpartida on 20/08/11.
-00003 // Copyright 2011 - Under creative commons license 3.0:
-00004 //        Attribution-ShareAlike CC BY-SA
-00005 //
-00006 // This software is furnished "as is", without technical support, and with no 
-00007 // warranty, express or implied, as to its usefulness for any purpose.
-00008 //
-00009 // Thread Safe: No
-00010 // Extendable: Yes
-00011 //
-00012 // @file I2CIO.h
-00013 // This file implements a basic IO library using the PCF8574 I2C IO Expander
-00014 // chip.
-00015 // 
-00016 // @brief 
-00017 // Implement a basic IO library to drive the PCF8574* I2C IO Expander ASIC.
-00018 // The library implements basic IO general methods to configure IO pin direction
-00019 // read and write uint8_t operations and basic pin level routines to set or read
-00020 // a particular IO port.
-00021 //
-00022 //
-00023 // @version API 1.0.0
-00024 //
-00025 // @author F. Malpartida - fmalpartida@gmail.com
-00026 // ---------------------------------------------------------------------------
-00027 #if (ARDUINO <  100)
-00028 #include <WProgram.h>
-00029 #else
-00030 #include <Arduino.h>
-00031 #endif
-00032 
-00033 #include <inttypes.h>
-00034 
-00035 #include <../Wire/Wire.h>
-00036 #include "I2CIO.h"
-00037 
-00038 // CLASS VARIABLES
-00039 // ---------------------------------------------------------------------------
-00040 
-00041 
-00042 // CONSTRUCTOR
-00043 // ---------------------------------------------------------------------------
-00044 I2CIO::I2CIO ( )
-00045 {
-00046    _i2cAddr     = 0x0;
-00047    _dirMask     = 0xFF;    // mark all as INPUTs
-00048    _shadow      = 0x0;     // no values set
-00049    _initialised = false;
-00050 }
-00051 
-00052 // PUBLIC METHODS
-00053 // ---------------------------------------------------------------------------
-00054 
-00055 //
-00056 // begin
-00057 int I2CIO::begin (  uint8_t i2cAddr )
-00058 {
-00059    _i2cAddr = i2cAddr;
-00060    
-00061    Wire.begin ( );
-00062       
-00063    _initialised = Wire.requestFrom ( _i2cAddr, (uint8_t)1 );
-00064 
-00065 #if (ARDUINO <  100)
-00066    _shadow = Wire.receive ();
-00067 #else
-00068    _shadow = Wire.read (); // Remove the byte read don't need it.
-00069 #endif
-00070    
-00071    return ( _initialised );
-00072 }
-00073 
-00074 //
-00075 // pinMode
-00076 void I2CIO::pinMode ( uint8_t pin, uint8_t dir )
-00077 {
-00078    if ( _initialised )
-00079    {
-00080       if ( OUTPUT == dir )
-00081       {
-00082          _dirMask &= ~( 1 << pin );
-00083       }
-00084       else 
-00085       {
-00086          _dirMask |= ( 1 << pin );
-00087       }
-00088    }
-00089 }
-00090 
-00091 //
-00092 // portMode
-00093 void I2CIO::portMode ( uint8_t dir )
-00094 {
-00095    
-00096    if ( _initialised )
-00097    {
-00098       if ( dir == INPUT )
-00099       {
-00100          _dirMask = 0xFF;
-00101       }
-00102       else
-00103       {
-00104          _dirMask = 0x00;
-00105       }
-00106    }
-00107 }
-00108 
-00109 //
-00110 // read
-00111 uint8_t I2CIO::read ( void )
-00112 {
-00113    uint8_t retVal = 0;
-00114    
-00115    if ( _initialised )
-00116    {
-00117       Wire.requestFrom ( _i2cAddr, (uint8_t)1 );
-00118 #if (ARDUINO <  100)
-00119       retVal = ( _dirMask & Wire.receive ( ) );
-00120 #else
-00121       retVal = ( _dirMask & Wire.read ( ) );
-00122 #endif      
-00123       
-00124    }
-00125    return ( retVal );
-00126 }
-00127 
-00128 //
-00129 // write
-00130 int I2CIO::write ( uint8_t value )
-00131 {
-00132    int status = 0;
-00133    
-00134    if ( _initialised )
-00135    {
-00136       // Only write HIGH the values of the ports that have been initialised as
-00137       // outputs updating the output shadow of the device
-00138       _shadow = ( value & ~(_dirMask) );
-00139    
-00140       Wire.beginTransmission ( _i2cAddr );
-00141 #if (ARDUINO <  100)
-00142       Wire.send ( _shadow );
-00143 #else
-00144       Wire.write ( _shadow );
-00145 #endif  
-00146       status = Wire.endTransmission ();
-00147    }
-00148    return ( (status == 0) );
-00149 }
-00150 
-00151 //
-00152 // digitalRead
-00153 uint8_t I2CIO::digitalRead ( uint8_t pin )
-00154 {
-00155    uint8_t pinVal = 0;
-00156    
-00157    // Check if initialised and that the pin is within range of the device
-00158    // -------------------------------------------------------------------
-00159    if ( ( _initialised ) && ( pin <= 7 ) )
-00160    {
-00161       // Remove the values which are not inputs and get the value of the pin
-00162       pinVal = this->read() & _dirMask;
-00163       pinVal = ( pinVal >> pin ) & 0x01; // Get the pin value
-00164    }
-00165    return (pinVal);
-00166 }
-00167 
-00168 //
-00169 // digitalWrite
-00170 int I2CIO::digitalWrite ( uint8_t pin, uint8_t level )
-00171 {
-00172    uint8_t writeVal;
-00173    int status = 0;
-00174    
-00175    // Check if initialised and that the pin is within range of the device
-00176    // -------------------------------------------------------------------
-00177    if ( ( _initialised ) && ( pin <= 7 ) )
-00178    {
-00179       // Only write to HIGH the port if the port has been configured as
-00180       // an OUTPUT pin. Add the new state of the pin to the shadow
-00181       writeVal = ( 1 << pin ) & ~_dirMask;
-00182       if ( level == HIGH )
-00183       {
-00184          _shadow |= writeVal;
-00185                                                       
-00186       }
-00187       else 
-00188       {
-00189          _shadow &= ~writeVal;
-00190       }
-00191       status = this->write ( _shadow );
-00192    }
-00193    return ( status );
-00194 }
-00195 
-00196 //
-00197 // PRIVATE METHODS
-00198 // ---------------------------------------------------------------------------
-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/_i2_c_i_o_8h.html b/libraries/LiquidCrystal/utility/docs/html/_i2_c_i_o_8h.html deleted file mode 100644 index b49a933..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/_i2_c_i_o_8h.html +++ /dev/null @@ -1,141 +0,0 @@ - - - - -LCD Library: I2CIO.h File Reference - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
- -
-
I2CIO.h File Reference
-
-
-
#include <inttypes.h>
-
-

Go to the source code of this file.

- - - - - -

-Classes

class  I2CIO

-Defines

#define _I2CIO_VERSION   "1.0.0"
-

Define Documentation

- -
-
- - - - -
#define _I2CIO_VERSION   "1.0.0"
-
-
- -

Definition at line 32 of file I2CIO.h.

- -
-
-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/_i2_c_i_o_8h_source.html b/libraries/LiquidCrystal/utility/docs/html/_i2_c_i_o_8h_source.html deleted file mode 100644 index 3cbb3e6..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/_i2_c_i_o_8h_source.html +++ /dev/null @@ -1,174 +0,0 @@ - - - - -LCD Library: I2CIO.h Source File - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
-
-
I2CIO.h
-
-
-Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
-00002 // Created by Francisco Malpartida on 20/08/11.
-00003 // Copyright 2011 - Under creative commons license 3.0:
-00004 //        Attribution-ShareAlike CC BY-SA
-00005 //
-00006 // This software is furnished "as is", without technical support, and with no 
-00007 // warranty, express or implied, as to its usefulness for any purpose.
-00008 //
-00009 // Thread Safe: No
-00010 // Extendable: Yes
-00011 //
-00012 // @file I2CIO.h
-00013 // This file implements a basic IO library using the PCF8574 I2C IO Expander
-00014 // chip.
-00015 // 
-00016 // @brief 
-00017 // Implement a basic IO library to drive the PCF8574* I2C IO Expander ASIC.
-00018 // The library implements basic IO general methods to configure IO pin direction
-00019 // read and write uint8_t operations and basic pin level routines to set or read
-00020 // a particular IO port.
-00021 //
-00022 // @version API 1.0.0
-00023 //
-00024 // @author F. Malpartida - fmalpartida@gmail.com
-00025 // ---------------------------------------------------------------------------
-00026 
-00027 #ifndef _I2CIO_H_
-00028 #define _I2CIO_H_
-00029 
-00030 #include <inttypes.h>
-00031 
-00032 #define _I2CIO_VERSION "1.0.0"
-00033 
-00041 class I2CIO  
-00042 {
-00043 public:
-00049    I2CIO ( );
-00050    
-00062    int begin ( uint8_t i2cAddr );
-00063    
-00073    void pinMode ( uint8_t pin, uint8_t dir );
-00074    
-00083    void portMode ( uint8_t dir );
-00084    
-00094    uint8_t read ( void );
-00095    
-00108    uint8_t digitalRead ( uint8_t pin );
-00109    
-00123    int write ( uint8_t value );
-00124    
-00136    int digitalWrite ( uint8_t pin, uint8_t level );
-00137    
-00138    
-00139    
-00140 private:
-00141    uint8_t _shadow;      // Shadow output
-00142    uint8_t _dirMask;     // Direction mask
-00143    uint8_t _i2cAddr;     // I2C address
-00144    bool    _initialised; // Initialised object
-00145    
-00146 };
-00147 
-00148 #endif
-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/_l_c_d_8cpp.html b/libraries/LiquidCrystal/utility/docs/html/_l_c_d_8cpp.html deleted file mode 100644 index 812e2d9..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/_l_c_d_8cpp.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - -LCD Library: LCD.cpp File Reference - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
-
-
LCD.cpp File Reference
-
-
-
#include <stdio.h>
-#include <string.h>
-#include <inttypes.h>
-#include <WProgram.h>
-#include "LCD.h"
-
-

Go to the source code of this file.

- -
-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/_l_c_d_8cpp_source.html b/libraries/LiquidCrystal/utility/docs/html/_l_c_d_8cpp_source.html deleted file mode 100644 index 5fb8e7f..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/_l_c_d_8cpp_source.html +++ /dev/null @@ -1,481 +0,0 @@ - - - - -LCD Library: LCD.cpp Source File - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
-
-
LCD.cpp
-
-
-Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
-00002 // Created by Francisco Malpartida on 20/08/11.
-00003 // Copyright 2011 - Under creative commons license 3.0:
-00004 //        Attribution-ShareAlike CC BY-SA
-00005 //
-00006 // This software is furnished "as is", without technical support, and with no 
-00007 // warranty, express or implied, as to its usefulness for any purpose.
-00008 //
-00009 // Thread Safe: No
-00010 // Extendable: Yes
-00011 //
-00012 // @file LCD.cpp
-00013 // This file implements a basic liquid crystal library that comes as standard
-00014 // in the Arduino SDK.
-00015 // 
-00016 // @brief 
-00017 // This is a basic implementation of the HD44780 library of the
-00018 // Arduino SDK. This library is a refactored version of the one supplied
-00019 // in the Arduino SDK in such a way that it simplifies its extension
-00020 // to support other mechanism to communicate to LCDs such as I2C, Serial, SR, ...
-00021 // The original library has been reworked in such a way that this will be
-00022 // the base class implementing all generic methods to command an LCD based
-00023 // on the Hitachi HD44780 and compatible chipsets.
-00024 //
-00025 // This base class is a pure abstract class and needs to be extended. As reference,
-00026 // it has been extended to drive 4 and 8 bit mode control, LCDs and I2C extension
-00027 // backpacks such as the I2CLCDextraIO using the PCF8574* I2C IO Expander ASIC.
-00028 //
-00029 //
-00030 // @version API 1.1.0
-00031 //
-00032 // 2012.03.29 bperrybap - changed comparision to use LCD_5x8DOTS rather than 0
-00033 // @author F. Malpartida - fmalpartida@gmail.com
-00034 // ---------------------------------------------------------------------------
-00035 #include <stdio.h>
-00036 #include <string.h>
-00037 #include <inttypes.h>
-00038 
-00039 #if (ARDUINO <  100)
-00040 #include <WProgram.h>
-00041 #else
-00042 #include <Arduino.h>
-00043 #endif
-00044 
-00045 #include "LCD.h"
-00046 
-00047 // CLASS CONSTRUCTORS
-00048 // ---------------------------------------------------------------------------
-00049 // Constructor
-00050 LCD::LCD () 
-00051 {
-00052    
-00053 }
-00054 
-00055 // PUBLIC METHODS
-00056 // ---------------------------------------------------------------------------
-00057 // When the display powers up, it is configured as follows:
-00058 // 0. LCD starts in 8 bit mode
-00059 // 1. Display clear
-00060 // 2. Function set: 
-00061 //    DL = 1; 8-bit interface data 
-00062 //    N = 0; 1-line display 
-00063 //    F = 0; 5x8 dot character font 
-00064 // 3. Display on/off control: 
-00065 //    D = 0; Display off 
-00066 //    C = 0; Cursor off 
-00067 //    B = 0; Blinking off 
-00068 // 4. Entry mode set: 
-00069 //    I/D = 1; Increment by 1 
-00070 //    S = 0; No shift 
-00071 //
-00072 // Note, however, that resetting the Arduino doesn't reset the LCD, so we
-00073 // can't assume that its in that state when a application starts (and the
-00074 // LiquidCrystal constructor is called).
-00075 // A call to begin() will reinitialize the LCD.
-00076 //
-00077 void LCD::begin(uint8_t cols, uint8_t lines, uint8_t dotsize) 
-00078 {
-00079    if (lines > 1) 
-00080    {
-00081       _displayfunction |= LCD_2LINE;
-00082    }
-00083    _numlines = lines;
-00084    _cols = cols;
-00085    
-00086    // for some 1 line displays you can select a 10 pixel high font
-00087    // ------------------------------------------------------------
-00088    if ((dotsize != LCD_5x8DOTS) && (lines == 1)) 
-00089    {
-00090       _displayfunction |= LCD_5x10DOTS;
-00091    }
-00092    
-00093    // SEE PAGE 45/46 FOR INITIALIZATION SPECIFICATION!
-00094    // according to datasheet, we need at least 40ms after power rises above 2.7V
-00095    // before sending commands. Arduino can turn on way before 4.5V so we'll wait 
-00096    // 50
-00097    // ---------------------------------------------------------------------------
-00098    delay (100); // 100ms delay
-00099    
-00100    //put the LCD into 4 bit or 8 bit mode
-00101    // -------------------------------------
-00102    if (! (_displayfunction & LCD_8BITMODE)) 
-00103    {
-00104       // this is according to the hitachi HD44780 datasheet
-00105       // figure 24, pg 46
-00106       
-00107       // we start in 8bit mode, try to set 4 bit mode
-00108       // Special case of "Function Set"
-00109       send(0x03, FOUR_BITS);
-00110       delayMicroseconds(4500); // wait min 4.1ms
-00111       
-00112       // second try
-00113       send ( 0x03, FOUR_BITS );
-00114       delayMicroseconds(150); // wait min 100us
-00115       
-00116       // third go!
-00117       send( 0x03, FOUR_BITS );
-00118       delayMicroseconds(150); // wait min of 100us
-00119       
-00120       // finally, set to 4-bit interface
-00121       send ( 0x02, FOUR_BITS );
-00122       delayMicroseconds(150); // wait min of 100us
-00123 
-00124    } 
-00125    else 
-00126    {
-00127       // this is according to the hitachi HD44780 datasheet
-00128       // page 45 figure 23
-00129       
-00130       // Send function set command sequence
-00131       command(LCD_FUNCTIONSET | _displayfunction);
-00132       delayMicroseconds(4500);  // wait more than 4.1ms
-00133       
-00134       // second try
-00135       command(LCD_FUNCTIONSET | _displayfunction);
-00136       delayMicroseconds(150);
-00137       
-00138       // third go
-00139       command(LCD_FUNCTIONSET | _displayfunction);
-00140       delayMicroseconds(150);
-00141 
-00142    }
-00143    
-00144    // finally, set # lines, font size, etc.
-00145    command(LCD_FUNCTIONSET | _displayfunction);
-00146    delayMicroseconds ( 60 );  // wait more
-00147    
-00148    // turn the display on with no cursor or blinking default
-00149    _displaycontrol = LCD_DISPLAYON | LCD_CURSOROFF | LCD_BLINKOFF;  
-00150    display();
-00151    
-00152    // clear the LCD
-00153    clear();
-00154    
-00155    // Initialize to default text direction (for romance languages)
-00156    _displaymode = LCD_ENTRYLEFT | LCD_ENTRYSHIFTDECREMENT;
-00157    // set the entry mode
-00158    command(LCD_ENTRYMODESET | _displaymode);
-00159 
-00160    backlight();
-00161 
-00162 }
-00163 
-00164 // Common LCD Commands
-00165 // ---------------------------------------------------------------------------
-00166 void LCD::clear()
-00167 {
-00168    command(LCD_CLEARDISPLAY);             // clear display, set cursor position to zero
-00169    delayMicroseconds(HOME_CLEAR_EXEC);    // this command is time consuming
-00170 }
-00171 
-00172 void LCD::home()
-00173 {
-00174    command(LCD_RETURNHOME);             // set cursor position to zero
-00175    delayMicroseconds(HOME_CLEAR_EXEC);  // This command is time consuming
-00176 }
-00177 
-00178 void LCD::setCursor(uint8_t col, uint8_t row)
-00179 {
-00180    const byte row_offsetsDef[]   = { 0x00, 0x40, 0x14, 0x54 }; // For regular LCDs
-00181    const byte row_offsetsLarge[] = { 0x00, 0x40, 0x10, 0x50 }; // For 16x4 LCDs
-00182    
-00183    if ( row >= _numlines ) 
-00184    {
-00185       row = _numlines-1;    // rows start at 0
-00186    }
-00187    
-00188    // 16x4 LCDs have special memory map layout
-00189    // ----------------------------------------
-00190    if ( _cols == 16 && _numlines == 4 )
-00191    {
-00192       command(LCD_SETDDRAMADDR | (col + row_offsetsLarge[row]));
-00193    }
-00194    else 
-00195    {
-00196       command(LCD_SETDDRAMADDR | (col + row_offsetsDef[row]));
-00197    }
-00198    
-00199 }
-00200 
-00201 // Turn the display on/off
-00202 void LCD::noDisplay() 
-00203 {
-00204    _displaycontrol &= ~LCD_DISPLAYON;
-00205    command(LCD_DISPLAYCONTROL | _displaycontrol);
-00206 }
-00207 
-00208 void LCD::display() 
-00209 {
-00210    _displaycontrol |= LCD_DISPLAYON;
-00211    command(LCD_DISPLAYCONTROL | _displaycontrol);
-00212 }
-00213 
-00214 // Turns the underline cursor on/off
-00215 void LCD::noCursor() 
-00216 {
-00217    _displaycontrol &= ~LCD_CURSORON;
-00218    command(LCD_DISPLAYCONTROL | _displaycontrol);
-00219 }
-00220 void LCD::cursor() 
-00221 {
-00222    _displaycontrol |= LCD_CURSORON;
-00223    command(LCD_DISPLAYCONTROL | _displaycontrol);
-00224 }
-00225 
-00226 // Turns on/off the blinking cursor
-00227 void LCD::noBlink() 
-00228 {
-00229    _displaycontrol &= ~LCD_BLINKON;
-00230    command(LCD_DISPLAYCONTROL | _displaycontrol);
-00231 }
-00232 
-00233 void LCD::blink() 
-00234 {
-00235    _displaycontrol |= LCD_BLINKON;
-00236    command(LCD_DISPLAYCONTROL | _displaycontrol);
-00237 }
-00238 
-00239 // These commands scroll the display without changing the RAM
-00240 void LCD::scrollDisplayLeft(void) 
-00241 {
-00242    command(LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVELEFT);
-00243 }
-00244 
-00245 void LCD::scrollDisplayRight(void) 
-00246 {
-00247    command(LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVERIGHT);
-00248 }
-00249 
-00250 // This is for text that flows Left to Right
-00251 void LCD::leftToRight(void) 
-00252 {
-00253    _displaymode |= LCD_ENTRYLEFT;
-00254    command(LCD_ENTRYMODESET | _displaymode);
-00255 }
-00256 
-00257 // This is for text that flows Right to Left
-00258 void LCD::rightToLeft(void) 
-00259 {
-00260    _displaymode &= ~LCD_ENTRYLEFT;
-00261    command(LCD_ENTRYMODESET | _displaymode);
-00262 }
-00263 
-00264 // This method moves the cursor one space to the right
-00265 void LCD::moveCursorRight(void)
-00266 {
-00267    command(LCD_CURSORSHIFT | LCD_CURSORMOVE | LCD_MOVERIGHT);
-00268 }
-00269 
-00270 // This method moves the cursor one space to the left
-00271 void LCD::moveCursorLeft(void)
-00272 {
-00273    command(LCD_CURSORSHIFT | LCD_CURSORMOVE | LCD_MOVELEFT);
-00274 }
-00275 
-00276 
-00277 // This will 'right justify' text from the cursor
-00278 void LCD::autoscroll(void) 
-00279 {
-00280    _displaymode |= LCD_ENTRYSHIFTINCREMENT;
-00281    command(LCD_ENTRYMODESET | _displaymode);
-00282 }
-00283 
-00284 // This will 'left justify' text from the cursor
-00285 void LCD::noAutoscroll(void) 
-00286 {
-00287    _displaymode &= ~LCD_ENTRYSHIFTINCREMENT;
-00288    command(LCD_ENTRYMODESET | _displaymode);
-00289 }
-00290 
-00291 // Write to CGRAM of new characters
-00292 void LCD::createChar(uint8_t location, uint8_t charmap[]) 
-00293 {
-00294    location &= 0x7;            // we only have 8 locations 0-7
-00295    
-00296    command(LCD_SETCGRAMADDR | (location << 3));
-00297    delayMicroseconds(30);
-00298    
-00299    for (uint8_t i = 0; i < 8; i++)
-00300    {
-00301       write(charmap[i]);      // call the virtual write method
-00302       delayMicroseconds(40);
-00303    }
-00304 }
-00305 
-00306 #ifdef __AVR__
-00307 void LCD::createChar(uint8_t location, const prog_uchar charmap[])
-00308 {
-00309    location &= 0x7;   // we only have 8 memory locations 0-7
-00310    
-00311    command(LCD_SETCGRAMADDR | (location << 3));
-00312    delayMicroseconds(30);
-00313    
-00314    for (uint8_t i = 0; i < 8; i++)
-00315    {
-00316       write(pgm_read_byte_near(charmap++));
-00317       delayMicroseconds(40);
-00318    }
-00319 }
-00320 #endif // __AVR__
-00321 
-00322 //
-00323 // Switch on the backlight
-00324 void LCD::backlight ( void )
-00325 {
-00326    setBacklight(255);
-00327 }
-00328 
-00329 //
-00330 // Switch off the backlight
-00331 void LCD::noBacklight ( void )
-00332 {
-00333    setBacklight(0);
-00334 }
-00335 
-00336 //
-00337 // Switch fully on the LCD (backlight and LCD)
-00338 void LCD::on ( void )
-00339 {
-00340    display();
-00341    backlight();
-00342 }
-00343 
-00344 //
-00345 // Switch fully off the LCD (backlight and LCD) 
-00346 void LCD::off ( void )
-00347 {
-00348    noBacklight();
-00349    noDisplay();
-00350 }
-00351 
-00352 // General LCD commands - generic methods used by the rest of the commands
-00353 // ---------------------------------------------------------------------------
-00354 void LCD::command(uint8_t value) 
-00355 {
-00356    send(value, COMMAND);
-00357 }
-00358 
-00359 #if (ARDUINO <  100)
-00360 void LCD::write(uint8_t value)
-00361 {
-00362    send(value, DATA);
-00363 }
-00364 #else
-00365 size_t LCD::write(uint8_t value) 
-00366 {
-00367    send(value, DATA);
-00368    return 1;             // assume OK
-00369 }
-00370 #endif
-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/_l_c_d_8h.html b/libraries/LiquidCrystal/utility/docs/html/_l_c_d_8h.html deleted file mode 100644 index 6f87675..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/_l_c_d_8h.html +++ /dev/null @@ -1,738 +0,0 @@ - - - - -LCD Library: LCD.h File Reference - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
- -
-
LCD.h File Reference
-
-
-
#include <WProgram.h>
-#include <inttypes.h>
-#include <Print.h>
-
-

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Classes

class  LCD

-Defines

#define BACKLIGHT_OFF   0
#define BACKLIGHT_ON   255
#define COMMAND   0
#define DATA   1
#define FOUR_BITS   2
#define HOME_CLEAR_EXEC   2000
#define LCD_1LINE   0x00
#define LCD_2LINE   0x08
#define LCD_4BITMODE   0x00
#define LCD_5x10DOTS   0x04
#define LCD_5x8DOTS   0x00
#define LCD_8BITMODE   0x10
#define LCD_BLINKOFF   0x00
#define LCD_BLINKON   0x01
#define LCD_CLEARDISPLAY   0x01
#define LCD_CURSORMOVE   0x00
#define LCD_CURSOROFF   0x00
#define LCD_CURSORON   0x02
#define LCD_CURSORSHIFT   0x10
#define LCD_DISPLAYCONTROL   0x08
#define LCD_DISPLAYMOVE   0x08
#define LCD_DISPLAYOFF   0x00
#define LCD_DISPLAYON   0x04
#define LCD_ENTRYLEFT   0x02
#define LCD_ENTRYMODESET   0x04
#define LCD_ENTRYRIGHT   0x00
#define LCD_ENTRYSHIFTDECREMENT   0x00
#define LCD_ENTRYSHIFTINCREMENT   0x01
#define LCD_FUNCTIONSET   0x20
#define LCD_MOVELEFT   0x00
#define LCD_MOVERIGHT   0x04
#define LCD_RETURNHOME   0x02
#define LCD_SETCGRAMADDR   0x40
#define LCD_SETDDRAMADDR   0x80

-Enumerations

enum  t_backlighPol { POSITIVE, -NEGATIVE - }

-Functions

static void waitUsec (uint16_t uSec)
-

Define Documentation

- -
-
- - - - -
#define BACKLIGHT_OFF   0
-
-
-

Backlight off constant declaration Used in combination with the setBacklight to swith off the LCD backlight. setBacklight

- -

Definition at line 155 of file LCD.h.

- -
-
- -
-
- - - - -
#define BACKLIGHT_ON   255
-
-
-

Backlight on constant declaration Used in combination with the setBacklight to swith on the LCD backlight. setBacklight

- -

Definition at line 163 of file LCD.h.

- -
-
- -
-
- - - - -
#define COMMAND   0
-
-
- -

Definition at line 136 of file LCD.h.

- -
-
- -
-
- - - - -
#define DATA   1
-
-
- -

Definition at line 137 of file LCD.h.

- -
-
- -
-
- - - - -
#define FOUR_BITS   2
-
-
- -

Definition at line 138 of file LCD.h.

- -
-
- -
-
- - - - -
#define HOME_CLEAR_EXEC   2000
-
-
-

Defines the duration of the home and clear commands This constant defines the time it takes for the home and clear commands in the LCD - Time in microseconds.

- -

Definition at line 147 of file LCD.h.

- -
-
- -
-
- - - - -
#define LCD_1LINE   0x00
-
-
- -

Definition at line 129 of file LCD.h.

- -
-
- -
-
- - - - -
#define LCD_2LINE   0x08
-
-
- -

Definition at line 128 of file LCD.h.

- -
-
- -
-
- - - - -
#define LCD_4BITMODE   0x00
-
-
- -

Definition at line 127 of file LCD.h.

- -
-
- -
-
- - - - -
#define LCD_5x10DOTS   0x04
-
-
- -

Definition at line 130 of file LCD.h.

- -
-
- -
-
- - - - -
#define LCD_5x8DOTS   0x00
-
-
- -

Definition at line 131 of file LCD.h.

- -
-
- -
-
- - - - -
#define LCD_8BITMODE   0x10
-
-
- -

Definition at line 126 of file LCD.h.

- -
-
- -
-
- - - - -
#define LCD_BLINKOFF   0x00
-
-
- -

Definition at line 115 of file LCD.h.

- -
-
- -
-
- - - - -
#define LCD_BLINKON   0x01
-
-
- -

Definition at line 114 of file LCD.h.

- -
-
- -
-
- - - - -
#define LCD_CLEARDISPLAY   0x01
-
-
-

All these definitions shouldn't be used unless you are writing a driver. All these definitions are for driver implementation only and shouldn't be used by applications.

- -

Definition at line 92 of file LCD.h.

- -
-
- -
-
- - - - -
#define LCD_CURSORMOVE   0x00
-
-
- -

Definition at line 120 of file LCD.h.

- -
-
- -
-
- - - - -
#define LCD_CURSOROFF   0x00
-
-
- -

Definition at line 113 of file LCD.h.

- -
-
- -
-
- - - - -
#define LCD_CURSORON   0x02
-
-
- -

Definition at line 112 of file LCD.h.

- -
-
- -
-
- - - - -
#define LCD_CURSORSHIFT   0x10
-
-
- -

Definition at line 96 of file LCD.h.

- -
-
- -
-
- - - - -
#define LCD_DISPLAYCONTROL   0x08
-
-
- -

Definition at line 95 of file LCD.h.

- -
-
- -
-
- - - - -
#define LCD_DISPLAYMOVE   0x08
-
-
- -

Definition at line 119 of file LCD.h.

- -
-
- -
-
- - - - -
#define LCD_DISPLAYOFF   0x00
-
-
- -

Definition at line 111 of file LCD.h.

- -
-
- -
-
- - - - -
#define LCD_DISPLAYON   0x04
-
-
- -

Definition at line 110 of file LCD.h.

- -
-
- -
-
- - - - -
#define LCD_ENTRYLEFT   0x02
-
-
- -

Definition at line 104 of file LCD.h.

- -
-
- -
-
- - - - -
#define LCD_ENTRYMODESET   0x04
-
-
- -

Definition at line 94 of file LCD.h.

- -
-
- -
-
- - - - -
#define LCD_ENTRYRIGHT   0x00
-
-
- -

Definition at line 103 of file LCD.h.

- -
-
- -
-
- - - - -
#define LCD_ENTRYSHIFTDECREMENT   0x00
-
-
- -

Definition at line 106 of file LCD.h.

- -
-
- -
-
- - - - -
#define LCD_ENTRYSHIFTINCREMENT   0x01
-
-
- -

Definition at line 105 of file LCD.h.

- -
-
- -
-
- - - - -
#define LCD_FUNCTIONSET   0x20
-
-
- -

Definition at line 97 of file LCD.h.

- -
-
- -
-
- - - - -
#define LCD_MOVELEFT   0x00
-
-
- -

Definition at line 122 of file LCD.h.

- -
-
- -
-
- - - - -
#define LCD_MOVERIGHT   0x04
-
-
- -

Definition at line 121 of file LCD.h.

- -
-
- -
-
- - - - -
#define LCD_RETURNHOME   0x02
-
-
- -

Definition at line 93 of file LCD.h.

- -
-
- -
-
- - - - -
#define LCD_SETCGRAMADDR   0x40
-
-
- -

Definition at line 98 of file LCD.h.

- -
-
- -
-
- - - - -
#define LCD_SETDDRAMADDR   0x80
-
-
- -

Definition at line 99 of file LCD.h.

- -
-
-

Enumeration Type Documentation

- -
-
- - - - -
enum t_backlighPol
-
-
-
Enumerator:
- - -
POSITIVE  -
NEGATIVE  -
-
-
- -

Definition at line 171 of file LCD.h.

- -
-
-

Function Documentation

- -
-
- - - - - - - - -
static void waitUsec (uint16_t uSec) [inline, static]
-
-
-

Enables disables fast waits for write operations for LCD If defined, the library will avoid doing un-necessary waits. this can be done, because the time taken by Arduino's slow digitalWrite operations. If fast digitalIO operations, comment this line out or undefine the mode.

-

waits for a given time in microseconds (compilation dependent). Waits for a given time defined in microseconds depending on the FAST_MODE define. If the FAST_MODE is defined the call will return inmediatelly.

-
Parameters:
- - -
uSec[in]time in microseconds.
-
-
-
Returns:
None
- -

Definition at line 75 of file LCD.h.

- -
-
-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/_l_c_d_8h_source.html b/libraries/LiquidCrystal/utility/docs/html/_l_c_d_8h_source.html deleted file mode 100644 index ae207cf..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/_l_c_d_8h_source.html +++ /dev/null @@ -1,337 +0,0 @@ - - - - -LCD Library: LCD.h Source File - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
-
-
LCD.h
-
-
-Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
-00002 // Created by Francisco Malpartida on 20/08/11.
-00003 // Copyright 2011 - Under creative commons license 3.0:
-00004 //        Attribution-ShareAlike CC BY-SA
-00005 //
-00006 // This software is furnished "as is", without technical support, and with no 
-00007 // warranty, express or implied, as to its usefulness for any purpose.
-00008 //
-00009 // Thread Safe: No
-00010 // Extendable: Yes
-00011 //
-00012 // @file LCD.h
-00013 // This file implements a basic liquid crystal library that comes as standard
-00014 // in the Arduino SDK.
-00015 // 
-00016 // @brief 
-00017 // This is a basic implementation of the LiquidCrystal library of the
-00018 // Arduino SDK. This library is a refactored version of the one supplied
-00019 // in the Arduino SDK in such a way that it simplifies its extension
-00020 // to support other mechanism to communicate to LCDs such as I2C, Serial, SR, 
-00021 // The original library has been reworked in such a way that this will be
-00022 // the base class implementing all generic methods to command an LCD based
-00023 // on the Hitachi HD44780 and compatible chipsets.
-00024 //
-00025 // This base class is a pure abstract class and needs to be extended. As reference,
-00026 // it has been extended to drive 4 and 8 bit mode control, LCDs and I2C extension
-00027 // backpacks such as the I2CLCDextraIO using the PCF8574* I2C IO Expander ASIC.
-00028 //
-00029 // The functionality provided by this class and its base class is identical
-00030 // to the original functionality of the Arduino LiquidCrystal library.
-00031 //
-00032 // @version API 1.1.0
-00033 //
-00034 //
-00035 // @author F. Malpartida - fmalpartida@gmail.com
-00036 // ---------------------------------------------------------------------------
-00037 #ifndef _LCD_H_
-00038 #define _LCD_H_
-00039 
-00040 #if (ARDUINO <  100)
-00041 #include <WProgram.h>
-00042 #else
-00043 #include <Arduino.h>
-00044 #endif
-00045 
-00046 #ifdef __AVR__
-00047 #include <avr/pgmspace.h>
-00048 #endif
-00049 
-00050 #include <inttypes.h>
-00051 #include <Print.h>
-00052 
-00053 
-00062 #ifdef __AVR__
-00063 #define FAST_MODE
-00064 #endif
-00065 
-00075 inline static void waitUsec ( uint16_t uSec )
-00076 {
-00077 #ifndef FAST_MODE
-00078    delayMicroseconds ( uSec );
-00079 #endif // FAST_MODE
-00080 }
-00081 
-00082 
-00090 // LCD Commands
-00091 // ---------------------------------------------------------------------------
-00092 #define LCD_CLEARDISPLAY        0x01
-00093 #define LCD_RETURNHOME          0x02
-00094 #define LCD_ENTRYMODESET        0x04
-00095 #define LCD_DISPLAYCONTROL      0x08
-00096 #define LCD_CURSORSHIFT         0x10
-00097 #define LCD_FUNCTIONSET         0x20
-00098 #define LCD_SETCGRAMADDR        0x40
-00099 #define LCD_SETDDRAMADDR        0x80
-00100 
-00101 // flags for display entry mode
-00102 // ---------------------------------------------------------------------------
-00103 #define LCD_ENTRYRIGHT          0x00
-00104 #define LCD_ENTRYLEFT           0x02
-00105 #define LCD_ENTRYSHIFTINCREMENT 0x01
-00106 #define LCD_ENTRYSHIFTDECREMENT 0x00
-00107 
-00108 // flags for display on/off and cursor control
-00109 // ---------------------------------------------------------------------------
-00110 #define LCD_DISPLAYON           0x04
-00111 #define LCD_DISPLAYOFF          0x00
-00112 #define LCD_CURSORON            0x02
-00113 #define LCD_CURSOROFF           0x00
-00114 #define LCD_BLINKON             0x01
-00115 #define LCD_BLINKOFF            0x00
-00116 
-00117 // flags for display/cursor shift
-00118 // ---------------------------------------------------------------------------
-00119 #define LCD_DISPLAYMOVE         0x08
-00120 #define LCD_CURSORMOVE          0x00
-00121 #define LCD_MOVERIGHT           0x04
-00122 #define LCD_MOVELEFT            0x00
-00123 
-00124 // flags for function set
-00125 // ---------------------------------------------------------------------------
-00126 #define LCD_8BITMODE            0x10
-00127 #define LCD_4BITMODE            0x00
-00128 #define LCD_2LINE               0x08
-00129 #define LCD_1LINE               0x00
-00130 #define LCD_5x10DOTS            0x04
-00131 #define LCD_5x8DOTS             0x00
-00132 
-00133 
-00134 // Define COMMAND and DATA LCD Rs (used by send method).
-00135 // ---------------------------------------------------------------------------
-00136 #define COMMAND                 0
-00137 #define DATA                    1
-00138 #define FOUR_BITS               2
-00139 
-00140 
-00147 #define HOME_CLEAR_EXEC      2000
-00148 
-00155 #define BACKLIGHT_OFF           0
-00156 
-00163 #define BACKLIGHT_ON          255
-00164 
-00165 
-00171 typedef enum { POSITIVE, NEGATIVE } t_backlighPol;
-00172 
-00173 class LCD : public Print 
-00174 {
-00175 public:
-00176    
-00183    LCD ( );
-00184    
-00200    virtual void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS);
-00201    
-00212    void clear();
-00213    
-00225    void home();
-00226    
-00235    void noDisplay();
-00236    
-00246    void display();
-00247    
-00254    void noBlink();
-00255    
-00264    void blink();
-00265    
-00272    void noCursor();
-00273    
-00282    void cursor();
-00283    
-00291    void scrollDisplayLeft();
-00292    
-00300    void scrollDisplayRight();
-00301    
-00313    void leftToRight();
-00314    
-00326    void rightToLeft();
-00327    
-00334    void moveCursorLeft();
-00335    
-00336    
-00343    void moveCursorRight();
-00344    
-00358    void autoscroll();
-00359    
-00368    void noAutoscroll();
-00369    
-00386    void createChar(uint8_t location, uint8_t charmap[]);
-00387 
-00388 #ifdef __AVR__
-00389 
-00407    void createChar(uint8_t location, const prog_uchar charmap[]);
-00408 #endif // __AVR__
-00409    
-00419    void setCursor(uint8_t col, uint8_t row);
-00420    
-00428    void backlight ( void );
-00429    
-00437    void noBacklight ( void );
-00438    
-00446    void on ( void );
-00447 
-00455    void off ( void );
-00456    
-00457    //
-00458    // virtual class methods
-00459    // --------------------------------------------------------------------------
-00470    virtual void setBacklightPin ( uint8_t value, t_backlighPol pol ) { };
-00471    
-00489    virtual void setBacklight ( uint8_t value ) { };
-00490    
-00502 #if (ARDUINO <  100)
-00503    virtual void write(uint8_t value);
-00504 #else
-00505    virtual size_t write(uint8_t value);
-00506 #endif
-00507    
-00508 #if (ARDUINO <  100)
-00509    using Print::write;
-00510 #else
-00511    using Print::write;
-00512 #endif   
-00513    
-00514 protected:
-00515    // Internal LCD variables to control the LCD shared between all derived
-00516    // classes.
-00517    uint8_t _displayfunction;  // LCD_5x10DOTS or LCD_5x8DOTS, LCD_4BITMODE or 
-00518                               // LCD_8BITMODE, LCD_1LINE or LCD_2LINE
-00519    uint8_t _displaycontrol;   // LCD base control command LCD on/off, blink, cursor
-00520                               // all commands are "ored" to its contents.
-00521    uint8_t _displaymode;      // Text entry mode to the LCD
-00522    uint8_t _numlines;         // Number of lines of the LCD, initialized with begin()
-00523    uint8_t _cols;             // Number of columns in the LCD
-00524    t_backlighPol _polarity;   // Backlight polarity
-00525    
-00526 private:
-00539    void command(uint8_t value);
-00540 
-00554 #if (ARDUINO <  100)
-00555    virtual void send(uint8_t value, uint8_t mode) { };
-00556 #else
-00557    virtual void send(uint8_t value, uint8_t mode) = 0;
-00558 #endif
-00559    
-00560 };
-00561 
-00562 #endif
-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal_8cpp.html b/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal_8cpp.html deleted file mode 100644 index a1244e6..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal_8cpp.html +++ /dev/null @@ -1,173 +0,0 @@ - - - - -LCD Library: LiquidCrystal.cpp File Reference - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
- -
-
LiquidCrystal.cpp File Reference
-
-
-
#include <stdio.h>
-#include <string.h>
-#include <inttypes.h>
-#include <WProgram.h>
-#include "LiquidCrystal.h"
-
-

Go to the source code of this file.

- - - - - -

-Defines

#define LCD_4BIT   1
#define LCD_8BIT   0
#define LCD_NOBACKLIGHT   0xFF
-

Define Documentation

- -
-
- - - - -
#define LCD_4BIT   1
-
-
- -

Definition at line 45 of file LiquidCrystal.cpp.

- -
-
- -
-
- - - - -
#define LCD_8BIT   0
-
-
- -

Definition at line 46 of file LiquidCrystal.cpp.

- -
-
- -
-
- - - - -
#define LCD_NOBACKLIGHT   0xFF
-
-
- -

Definition at line 42 of file LiquidCrystal.cpp.

- -
-
-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal_8cpp_source.html b/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal_8cpp_source.html deleted file mode 100644 index 2103f80..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal_8cpp_source.html +++ /dev/null @@ -1,410 +0,0 @@ - - - - -LCD Library: LiquidCrystal.cpp Source File - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
-
-
LiquidCrystal.cpp
-
-
-Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
-00002 // Created by Francisco Malpartida on 20/08/11.
-00003 // Copyright 2011 - Under creative commons license 3.0:
-00004 //        Attribution-ShareAlike CC BY-SA
-00005 //
-00006 // This software is furnished "as is", without technical support, and with no 
-00007 // warranty, express or implied, as to its usefulness for any purpose.
-00008 //
-00009 // Thread Safe: No
-00010 // Extendable: Yes
-00011 //
-00012 // @file LiquidCrystal.cpp
-00013 // This file implements a basic liquid crystal library that comes as standard
-00014 // in the Arduino SDK.
-00015 // 
-00016 // @brief 
-00017 // This is a basic implementation of the LiquidCrystal library of the
-00018 // Arduino SDK. The original library has been reworked in such a way that 
-00019 // this class implements the all methods to command an LCD based
-00020 // on the Hitachi HD44780 and compatible chipsets using the parallel port of
-00021 // the LCD (4 bit and 8 bit).
-00022 //
-00023 // The functionality provided by this class and its base class is identical
-00024 // to the original functionality of the Arduino LiquidCrystal library.
-00025 //
-00026 //
-00027 // @author F. Malpartida - fmalpartida@gmail.com
-00028 // ---------------------------------------------------------------------------
-00029 #include <stdio.h>
-00030 #include <string.h>
-00031 #include <inttypes.h>
-00032 
-00033 #if (ARDUINO <  100)
-00034 #include <WProgram.h>
-00035 #else
-00036 #include <Arduino.h>
-00037 #endif
-00038 #include "LiquidCrystal.h"
-00039 
-00040 // CONSTANT  definitions
-00041 // ---------------------------------------------------------------------------
-00042 #define LCD_NOBACKLIGHT 0xFF
-00043 
-00044 // LCD driver configuration (4bit or 8bit driver control)
-00045 #define LCD_4BIT                1
-00046 #define LCD_8BIT                0
-00047 
-00048 // STATIC helper functions
-00049 // ---------------------------------------------------------------------------
-00050 
-00051 
-00052 // CONSTRUCTORS
-00053 // ---------------------------------------------------------------------------
-00054 
-00055 LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t enable,
-00056                              uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
-00057                              uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)
-00058 {
-00059    init(LCD_8BIT, rs, 255, enable, d0, d1, d2, d3, d4, d5, d6, d7);
-00060 }
-00061 
-00062 LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
-00063                              uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
-00064                              uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)
-00065 {
-00066    init(LCD_8BIT, rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7);
-00067 }
-00068 
-00069 LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
-00070                              uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3)
-00071 {
-00072    init(LCD_4BIT, rs, rw, enable, d0, d1, d2, d3, 0, 0, 0, 0);
-00073 }
-00074 
-00075 LiquidCrystal::LiquidCrystal(uint8_t rs,  uint8_t enable,
-00076                              uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3)
-00077 {
-00078    init(LCD_4BIT, rs, 255, enable, d0, d1, d2, d3, 0, 0, 0, 0);
-00079 }
-00080 
-00081 // Contructors with backlight control
-00082 LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t enable,
-00083                              uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
-00084                              uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7,
-00085                              uint8_t backlightPin, t_backlighPol pol)
-00086 {
-00087    init(LCD_8BIT, rs, 255, enable, d0, d1, d2, d3, d4, d5, d6, d7);
-00088    setBacklightPin ( backlightPin, pol );
-00089 }
-00090 
-00091 LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
-00092                              uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
-00093                              uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7,
-00094                              uint8_t backlightPin, t_backlighPol pol)
-00095 {
-00096    init(LCD_8BIT, rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7);
-00097    setBacklightPin ( backlightPin, pol );
-00098 }
-00099 
-00100 LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
-00101                              uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
-00102                              uint8_t backlightPin, t_backlighPol pol)
-00103 {
-00104    init(LCD_4BIT, rs, rw, enable, d0, d1, d2, d3, 0, 0, 0, 0);
-00105    setBacklightPin ( backlightPin, pol );
-00106 }
-00107 
-00108 LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t enable,
-00109                              uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
-00110                              uint8_t backlightPin, t_backlighPol pol)
-00111 {
-00112    init(LCD_4BIT, rs, 255, enable, d0, d1, d2, d3, 0, 0, 0, 0);
-00113    setBacklightPin ( backlightPin, pol );
-00114 }
-00115 
-00116 // PUBLIC METHODS
-00117 // ---------------------------------------------------------------------------
-00118 
-00119 /************ low level data pushing commands **********/
-00120 //
-00121 // send
-00122 void LiquidCrystal::send(uint8_t value, uint8_t mode) 
-00123 {
-00124    // Only interested in COMMAND or DATA
-00125    digitalWrite( _rs_pin, ( mode == DATA ) );
-00126    
-00127    // if there is a RW pin indicated, set it low to Write
-00128    // ---------------------------------------------------
-00129    if (_rw_pin != 255) 
-00130    { 
-00131       digitalWrite(_rw_pin, LOW);
-00132    }
-00133    
-00134    if ( mode != FOUR_BITS )
-00135    {   
-00136       if ( (_displayfunction & LCD_8BITMODE ) )
-00137       {
-00138          writeNbits(value, 8); 
-00139       } 
-00140       else 
-00141       {
-00142          writeNbits ( value >> 4, 4 );
-00143          writeNbits ( value, 4 );
-00144       }
-00145    } 
-00146    else 
-00147    {
-00148       writeNbits ( value, 4 );
-00149    }
-00150    waitUsec ( EXEC_TIME ); // wait for the command to execute by the LCD
-00151 }
-00152 
-00153 //
-00154 // setBacklightPin
-00155 void LiquidCrystal::setBacklightPin ( uint8_t pin, t_backlighPol pol )
-00156 {
-00157    pinMode ( pin, OUTPUT );       // Difine the backlight pin as output
-00158    _backlightPin = pin;
-00159    _polarity = pol;
-00160    setBacklight(BACKLIGHT_OFF);   // Set the backlight low by default
-00161 }
-00162 
-00163 //
-00164 // setBackligh
-00165 void LiquidCrystal::setBacklight ( uint8_t value )
-00166 {
-00167    // Check if there is a pin assigned to the backlight
-00168    // ---------------------------------------------------
-00169    if ( _backlightPin != LCD_NOBACKLIGHT )
-00170    {
-00171       // Check if the pin is associated to a timer, i.e. PWM
-00172       // ---------------------------------------------------
-00173       if(digitalPinToTimer(_backlightPin) != NOT_ON_TIMER)
-00174       {
-00175          // Check for control polarity inversion
-00176          // ---------------------------------------------------
-00177          if ( _polarity == POSITIVE )
-00178          {
-00179             analogWrite ( _backlightPin, value );
-00180          }
-00181          else 
-00182          {
-00183             analogWrite ( _backlightPin, 255 - value );
-00184          }
-00185       }
-00186       // Not a PWM pin, set the backlight pin for POSI or NEG
-00187       // polarity
-00188       // --------------------------------------------------------
-00189       else if (((value > 0) && (_polarity == POSITIVE)) ||
-00190                ((value == 0) && (_polarity == NEGATIVE)))
-00191       {
-00192          digitalWrite( _backlightPin, HIGH);
-00193       }
-00194       else
-00195       {
-00196          digitalWrite( _backlightPin, LOW);
-00197       }
-00198    }
-00199 }
-00200 
-00201 // PRIVATE METHODS
-00202 // ---------------------------------------------------------------------------
-00203 
-00204 
-00205 // init
-00206 void LiquidCrystal::init(uint8_t fourbitmode, uint8_t rs, uint8_t rw, uint8_t enable,
-00207                          uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
-00208                          uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)
-00209 {
-00210    uint8_t i;
-00211    
-00212    // Initialize the IO pins
-00213    // -----------------------
-00214    
-00215    _rs_pin = rs;
-00216    _rw_pin = rw;
-00217    _enable_pin = enable;
-00218    
-00219    _data_pins[0] = d0;
-00220    _data_pins[1] = d1;
-00221    _data_pins[2] = d2;
-00222    _data_pins[3] = d3; 
-00223    _data_pins[4] = d4;
-00224    _data_pins[5] = d5;
-00225    _data_pins[6] = d6;
-00226    _data_pins[7] = d7;
-00227    
-00228    // Initialize the IO port direction to OUTPUT
-00229    // ------------------------------------------
-00230    
-00231    for ( i = 0; i < 4; i++ )
-00232    {
-00233       pinMode ( _data_pins[i], OUTPUT );
-00234    }
-00235    
-00236    // Initialize the rest of the ports if it is an 8bit controlled LCD
-00237    // ----------------------------------------------------------------
-00238    
-00239    if ( !fourbitmode )
-00240    {
-00241       for ( i = 4; i < 8; i++ )
-00242       {
-00243          pinMode ( _data_pins[i], OUTPUT );
-00244       }
-00245    }
-00246    pinMode(_rs_pin, OUTPUT);
-00247    
-00248    // we can save 1 pin by not using RW. Indicate by passing 255 instead of pin#
-00249    if (_rw_pin != 255) 
-00250    { 
-00251       pinMode(_rw_pin, OUTPUT);
-00252    }
-00253    
-00254    pinMode(_enable_pin, OUTPUT);
-00255    
-00256    // Initialise displaymode functions to defaults: LCD_1LINE and LCD_5x8DOTS
-00257    // -------------------------------------------------------------------------
-00258    if (fourbitmode)
-00259       _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS;
-00260    else 
-00261       _displayfunction = LCD_8BITMODE | LCD_1LINE | LCD_5x8DOTS;
-00262    
-00263    // Now we pull both RS and R/W low to begin commands
-00264    digitalWrite(_rs_pin, LOW);
-00265    digitalWrite(_enable_pin, LOW);
-00266    
-00267    if (_rw_pin != 255) 
-00268    { 
-00269       digitalWrite(_rw_pin, LOW);
-00270    }
-00271    
-00272    // Initialise the backlight pin no nothing
-00273    _backlightPin = LCD_NOBACKLIGHT;
-00274    _polarity = POSITIVE;
-00275 }
-00276 
-00277 //
-00278 // pulseEnable
-00279 void LiquidCrystal::pulseEnable(void) 
-00280 {
-00281    // There is no need for the delays, since the digitalWrite operation
-00282    // takes longer.
-00283    digitalWrite(_enable_pin, HIGH);   
-00284    waitUsec(1);          // enable pulse must be > 450ns   
-00285    digitalWrite(_enable_pin, LOW);
-00286 }
-00287 
-00288 //
-00289 // write4bits
-00290 void LiquidCrystal::writeNbits(uint8_t value, uint8_t numBits) 
-00291 {
-00292    for (uint8_t i = 0; i < numBits; i++) 
-00293    {
-00294       digitalWrite(_data_pins[i], (value >> i) & 0x01);
-00295    }
-00296    pulseEnable();
-00297 }
-00298 
-00299 
-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal_8h.html b/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal_8h.html deleted file mode 100644 index b5a4389..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal_8h.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - -LCD Library: LiquidCrystal.h File Reference - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
- -
-
LiquidCrystal.h File Reference
-
-
-
#include <inttypes.h>
-#include "LCD.h"
-#include "FastIO.h"
-
-

Go to the source code of this file.

- - - - - -

-Classes

class  LiquidCrystal

-Defines

#define EXEC_TIME   37
-

Define Documentation

- -
-
- - - - -
#define EXEC_TIME   37
-
-
-

Command execution time on the LCD. This defines how long a command takes to execute by the LCD. The time is expressed in micro-seconds.

- -

Definition at line 42 of file LiquidCrystal.h.

- -
-
-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal_8h_source.html b/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal_8h_source.html deleted file mode 100644 index df727bb..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal_8h_source.html +++ /dev/null @@ -1,203 +0,0 @@ - - - - -LCD Library: LiquidCrystal.h Source File - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
-
-
LiquidCrystal.h
-
-
-Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
-00002 // Created by Francisco Malpartida on 20/08/11.
-00003 // Copyright 2011 - Under creative commons license 3.0:
-00004 //        Attribution-ShareAlike CC BY-SA
-00005 //
-00006 // This software is furnished "as is", without technical support, and with no 
-00007 // warranty, express or implied, as to its usefulness for any purpose.
-00008 //
-00009 // Thread Safe: No
-00010 // Extendable: Yes
-00011 //
-00012 // @file LiquidCrystal.h
-00013 // This file implements a basic liquid crystal library that comes as standard
-00014 // in the Arduino SDK.
-00015 // 
-00016 // @brief 
-00017 // This is a basic implementation of the LiquidCrystal library of the
-00018 // Arduino SDK. The original library has been reworked in such a way that 
-00019 // this class implements the all methods to command an LCD based
-00020 // on the Hitachi HD44780 and compatible chipsets using the parallel port of
-00021 // the LCD (4 bit and 8 bit).
-00022 //
-00023 //
-00024 //
-00025 // @author F. Malpartida - fmalpartida@gmail.com
-00026 // ---------------------------------------------------------------------------
-00027 #ifndef LiquidCrystal_4bit_h
-00028 #define LiquidCrystal_4bit_h
-00029 
-00030 #include <inttypes.h>
-00031 
-00032 #include "LCD.h"
-00033 #include "FastIO.h"
-00034 
-00035 
-00042 #define EXEC_TIME 37
-00043 
-00044 class LiquidCrystal : public LCD
-00045 {
-00046 public:
-00053    LiquidCrystal(uint8_t rs, uint8_t enable,
-00054                  uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
-00055                  uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7);
-00056    LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
-00057                  uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
-00058                  uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7);
-00059    
-00060    // Constructors with backlight control
-00061    LiquidCrystal(uint8_t rs, uint8_t enable,
-00062                  uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
-00063                  uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7,
-00064                  uint8_t backlightPin, t_backlighPol pol);
-00065    LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
-00066                  uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
-00067                  uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7,
-00068                  uint8_t backlightPin, t_backlighPol pol);   
-00075    LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
-00076                  uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3);
-00077    LiquidCrystal(uint8_t rs, uint8_t enable,
-00078                  uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3);
-00079    
-00080    // Constructors with backlight control
-00081    LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
-00082                  uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
-00083                  uint8_t backlightPin, t_backlighPol pol);
-00084    LiquidCrystal(uint8_t rs, uint8_t enable,
-00085                  uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
-00086                  uint8_t backlightPin, t_backlighPol pol);
-00099    virtual void send(uint8_t value, uint8_t mode);
-00100    
-00109    void setBacklightPin ( uint8_t pin, t_backlighPol pol );
-00110    
-00125    void setBacklight ( uint8_t value );
-00126    
-00127 private:
-00128    
-00134    void init(uint8_t fourbitmode, uint8_t rs, uint8_t rw, uint8_t enable,
-00135              uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
-00136              uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7);
-00137    
-00144    void writeNbits(uint8_t value, uint8_t numBits);
-00145    
-00152    void pulseEnable();
-00153    
-00154    uint8_t _rs_pin;       // LOW: command.  HIGH: character.
-00155    uint8_t _rw_pin;       // LOW: write to LCD.  HIGH: read from LCD.
-00156    uint8_t _enable_pin;   // activated by a HIGH pulse.
-00157    uint8_t _data_pins[8]; // Data pins.
-00158    uint8_t _backlightPin; // Pin associated to control the LCD backlight
-00159 };
-00160 
-00161 #endif
-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___i2_c_8cpp.html b/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___i2_c_8cpp.html deleted file mode 100644 index 1e2f1b7..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___i2_c_8cpp.html +++ /dev/null @@ -1,274 +0,0 @@ - - - - -LCD Library: LiquidCrystal_I2C.cpp File Reference - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
- -
-
LiquidCrystal_I2C.cpp File Reference
-
-
-
#include <WProgram.h>
-#include <inttypes.h>
-#include "I2CIO.h"
-#include "LiquidCrystal_I2C.h"
-
-

Go to the source code of this file.

- - - - - - - - - - - -

-Defines

#define D4   0
#define D5   1
#define D6   2
#define D7   3
#define EN   6
#define LCD_BACKLIGHT   0xFF
#define LCD_NOBACKLIGHT   0x00
#define RS   4
#define RW   5
-

Define Documentation

- -
-
- - - - -
#define D4   0
-
-
-

LCD dataline allocation this library only supports 4 bit LCD control mode. D4, D5, D6, D7 LCD data lines pin mapping of the extender module

- -

Definition at line 88 of file LiquidCrystal_I2C.cpp.

- -
-
- -
-
- - - - -
#define D5   1
-
-
- -

Definition at line 89 of file LiquidCrystal_I2C.cpp.

- -
-
- -
-
- - - - -
#define D6   2
-
-
- -

Definition at line 90 of file LiquidCrystal_I2C.cpp.

- -
-
- -
-
- - - - -
#define D7   3
-
-
- -

Definition at line 91 of file LiquidCrystal_I2C.cpp.

- -
-
- -
-
- - - - -
#define EN   6
-
-
-

Enable bit of the LCD Defines the IO of the expander connected to the LCD Enable

- -

Definition at line 66 of file LiquidCrystal_I2C.cpp.

- -
-
- -
-
- - - - -
#define LCD_BACKLIGHT   0xFF
-
-
-

LCD_BACKLIGHT BACKLIGHT MASK used when backlight is on

- -

Definition at line 55 of file LiquidCrystal_I2C.cpp.

- -
-
- -
-
- - - - -
#define LCD_NOBACKLIGHT   0x00
-
-
-

LCD_NOBACKLIGHT NO BACKLIGHT MASK

- -

Definition at line 48 of file LiquidCrystal_I2C.cpp.

- -
-
- -
-
- - - - -
#define RS   4
-
-
-

Register bit of the LCD Defines the IO of the expander connected to the LCD Register select pin

- -

Definition at line 80 of file LiquidCrystal_I2C.cpp.

- -
-
- -
-
- - - - -
#define RW   5
-
-
-

Read/Write bit of the LCD Defines the IO of the expander connected to the LCD Rw pin

- -

Definition at line 73 of file LiquidCrystal_I2C.cpp.

- -
-
-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___i2_c_8cpp_source.html b/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___i2_c_8cpp_source.html deleted file mode 100644 index a4274fc..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___i2_c_8cpp_source.html +++ /dev/null @@ -1,371 +0,0 @@ - - - - -LCD Library: LiquidCrystal_I2C.cpp Source File - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
-
-
LiquidCrystal_I2C.cpp
-
-
-Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
-00002 // Created by Francisco Malpartida on 20/08/11.
-00003 // Copyright 2011 - Under creative commons license 3.0:
-00004 //        Attribution-ShareAlike CC BY-SA
-00005 //
-00006 // This software is furnished "as is", without technical support, and with no 
-00007 // warranty, express or implied, as to its usefulness for any purpose.
-00008 //
-00009 // Thread Safe: No
-00010 // Extendable: Yes
-00011 //
-00012 // @file LiquidCrystal_I2C.c
-00013 // This file implements a basic liquid crystal library that comes as standard
-00014 // in the Arduino SDK but using an I2C IO extension board.
-00015 // 
-00016 // @brief 
-00017 // This is a basic implementation of the LiquidCrystal library of the
-00018 // Arduino SDK. The original library has been reworked in such a way that 
-00019 // this class implements the all methods to command an LCD based
-00020 // on the Hitachi HD44780 and compatible chipsets using I2C extension
-00021 // backpacks such as the I2CLCDextraIO with the PCF8574* I2C IO Expander ASIC.
-00022 //
-00023 // The functionality provided by this class and its base class is identical
-00024 // to the original functionality of the Arduino LiquidCrystal library.
-00025 //
-00026 //
-00027 //
-00028 // @author F. Malpartida - fmalpartida@gmail.com
-00029 // ---------------------------------------------------------------------------
-00030 #if (ARDUINO <  100)
-00031 #include <WProgram.h>
-00032 #else
-00033 #include <Arduino.h>
-00034 #endif
-00035 #include <inttypes.h>
-00036 #include "I2CIO.h"
-00037 #include "LiquidCrystal_I2C.h"
-00038 
-00039 // CONSTANT  definitions
-00040 // ---------------------------------------------------------------------------
-00041 
-00042 // flags for backlight control
-00048 #define LCD_NOBACKLIGHT 0x00
-00049 
-00055 #define LCD_BACKLIGHT   0xFF
-00056 
-00057 
-00058 // Default library configuration parameters used by class constructor with
-00059 // only the I2C address field.
-00060 // ---------------------------------------------------------------------------
-00066 #define EN 6  // Enable bit
-00067 
-00073 #define RW 5  // Read/Write bit
-00074 
-00080 #define RS 4  // Register select bit
-00081 
-00088 #define D4 0
-00089 #define D5 1
-00090 #define D6 2
-00091 #define D7 3
-00092 
-00093 
-00094 // CONSTRUCTORS
-00095 // ---------------------------------------------------------------------------
-00096 LiquidCrystal_I2C::LiquidCrystal_I2C( uint8_t lcd_Addr )
-00097 {
-00098    config(lcd_Addr, EN, RW, RS, D4, D5, D6, D7);
-00099 }
-00100 
-00101 
-00102 LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t backlighPin, 
-00103                                      t_backlighPol pol = POSITIVE)
-00104 {
-00105    config(lcd_Addr, EN, RW, RS, D4, D5, D6, D7);
-00106    setBacklightPin(backlighPin, pol);
-00107 }
-00108 
-00109 LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw,
-00110                                      uint8_t Rs)
-00111 {
-00112    config(lcd_Addr, En, Rw, Rs, D4, D5, D6, D7);
-00113 }
-00114 
-00115 LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw,
-00116                                      uint8_t Rs, uint8_t backlighPin, 
-00117                                      t_backlighPol pol = POSITIVE)
-00118 {
-00119    config(lcd_Addr, En, Rw, Rs, D4, D5, D6, D7);
-00120    setBacklightPin(backlighPin, pol);
-00121 }
-00122 
-00123 LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw,
-00124                                      uint8_t Rs, uint8_t d4, uint8_t d5,
-00125                                      uint8_t d6, uint8_t d7 )
-00126 {
-00127    config(lcd_Addr, En, Rw, Rs, d4, d5, d6, d7);
-00128 }
-00129 
-00130 LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw,
-00131                                      uint8_t Rs, uint8_t d4, uint8_t d5,
-00132                                      uint8_t d6, uint8_t d7, uint8_t backlighPin, 
-00133                                      t_backlighPol pol = POSITIVE )
-00134 {
-00135    config(lcd_Addr, En, Rw, Rs, d4, d5, d6, d7);
-00136    setBacklightPin(backlighPin, pol);
-00137 }
-00138 
-00139 // PUBLIC METHODS
-00140 // ---------------------------------------------------------------------------
-00141 
-00142 //
-00143 // begin
-00144 void LiquidCrystal_I2C::begin(uint8_t cols, uint8_t lines, uint8_t dotsize) 
-00145 {
-00146    
-00147    init();     // Initialise the I2C expander interface
-00148    LCD::begin ( cols, lines, dotsize );   
-00149 }
-00150 
-00151 
-00152 // User commands - users can expand this section
-00153 //----------------------------------------------------------------------------
-00154 // Turn the (optional) backlight off/on
-00155 
-00156 //
-00157 // setBacklightPin
-00158 void LiquidCrystal_I2C::setBacklightPin ( uint8_t value, t_backlighPol pol = POSITIVE )
-00159 {
-00160    _backlightPinMask = ( 1 << value );
-00161    _polarity = pol;
-00162    setBacklight(BACKLIGHT_OFF);
-00163 }
-00164 
-00165 //
-00166 // setBacklight
-00167 void LiquidCrystal_I2C::setBacklight( uint8_t value ) 
-00168 {
-00169    // Check if backlight is available
-00170    // ----------------------------------------------------
-00171    if ( _backlightPinMask != 0x0 )
-00172    {
-00173       // Check for polarity to configure mask accordingly
-00174       // ----------------------------------------------------------
-00175       if  (((_polarity == POSITIVE) && (value > 0)) || 
-00176            ((_polarity == NEGATIVE ) && ( value == 0 )))
-00177       {
-00178          _backlightStsMask = _backlightPinMask & LCD_BACKLIGHT;
-00179       }
-00180       else 
-00181       {
-00182          _backlightStsMask = _backlightPinMask & LCD_NOBACKLIGHT;
-00183       }
-00184       _i2cio.write( _backlightStsMask );
-00185    }
-00186 }
-00187 
-00188 
-00189 // PRIVATE METHODS
-00190 // ---------------------------------------------------------------------------
-00191 
-00192 //
-00193 // init
-00194 int LiquidCrystal_I2C::init()
-00195 {
-00196    int status = 0;
-00197    
-00198    // initialize the backpack IO expander
-00199    // and display functions.
-00200    // ------------------------------------------------------------------------
-00201    if ( _i2cio.begin ( _Addr ) == 1 )
-00202    {
-00203       _i2cio.portMode ( OUTPUT );  // Set the entire IO extender to OUTPUT
-00204       _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS;
-00205       status = 1;
-00206       _i2cio.write(0);  // Set the entire port to LOW
-00207    }
-00208    return ( status );
-00209 }
-00210 
-00211 //
-00212 // config
-00213 void LiquidCrystal_I2C::config (uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, 
-00214                                 uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7 )
-00215 {
-00216    _Addr = lcd_Addr;
-00217    
-00218    _backlightPinMask = 0;
-00219    _backlightStsMask = LCD_NOBACKLIGHT;
-00220    _polarity = POSITIVE;
-00221    
-00222    _En = ( 1 << En );
-00223    _Rw = ( 1 << Rw );
-00224    _Rs = ( 1 << Rs );
-00225    
-00226    // Initialise pin mapping
-00227    _data_pins[0] = ( 1 << d4 );
-00228    _data_pins[1] = ( 1 << d5 );
-00229    _data_pins[2] = ( 1 << d6 );
-00230    _data_pins[3] = ( 1 << d7 );   
-00231 }
-00232 
-00233 
-00234 
-00235 // low level data pushing commands
-00236 //----------------------------------------------------------------------------
-00237 
-00238 //
-00239 // send - write either command or data
-00240 void LiquidCrystal_I2C::send(uint8_t value, uint8_t mode) 
-00241 {
-00242    // No need to use the delay routines since the time taken to write takes
-00243    // longer that what is needed both for toggling and enable pin an to execute
-00244    // the command.
-00245    
-00246    if ( mode == FOUR_BITS )
-00247    {
-00248       write4bits( (value & 0x0F), COMMAND );
-00249    }
-00250    else 
-00251    {
-00252       write4bits( (value >> 4), mode );
-00253       write4bits( (value & 0x0F), mode);
-00254    }
-00255 }
-00256 
-00257 //
-00258 // write4bits
-00259 void LiquidCrystal_I2C::write4bits ( uint8_t value, uint8_t mode ) 
-00260 {
-00261    uint8_t pinMapValue = 0;
-00262    
-00263    // Map the value to LCD pin mapping
-00264    // --------------------------------
-00265    for ( uint8_t i = 0; i < 4; i++ )
-00266    {
-00267       if ( ( value & 0x1 ) == 1 )
-00268       {
-00269          pinMapValue |= _data_pins[i];
-00270       }
-00271       value = ( value >> 1 );
-00272    }
-00273    
-00274    // Is it a command or data
-00275    // -----------------------
-00276    if ( mode == DATA )
-00277    {
-00278       mode = _Rs;
-00279    }
-00280    
-00281    pinMapValue |= mode | _backlightStsMask;
-00282    pulseEnable ( pinMapValue );
-00283 }
-00284 
-00285 //
-00286 // pulseEnable
-00287 void LiquidCrystal_I2C::pulseEnable (uint8_t data)
-00288 {
-00289    _i2cio.write (data | _En);   // En HIGH
-00290    _i2cio.write (data & ~_En);  // En LOW
-00291 }
-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___i2_c_8h.html b/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___i2_c_8h.html deleted file mode 100644 index 177e3fd..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___i2_c_8h.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - -LCD Library: LiquidCrystal_I2C.h File Reference - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
- -
-
LiquidCrystal_I2C.h File Reference
-
-
-
#include <inttypes.h>
-#include <Print.h>
-#include "I2CIO.h"
-#include "LCD.h"
-
-

Go to the source code of this file.

- - - -

-Classes

class  LiquidCrystal_I2C
-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___i2_c_8h_source.html b/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___i2_c_8h_source.html deleted file mode 100644 index 8373801..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___i2_c_8h_source.html +++ /dev/null @@ -1,199 +0,0 @@ - - - - -LCD Library: LiquidCrystal_I2C.h Source File - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
-
-
LiquidCrystal_I2C.h
-
-
-Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
-00002 // Created by Francisco Malpartida on 20/08/11.
-00003 // Copyright 2011 - Under creative commons license 3.0:
-00004 //        Attribution-ShareAlike CC BY-SA
-00005 //
-00006 // This software is furnished "as is", without technical support, and with no 
-00007 // warranty, express or implied, as to its usefulness for any purpose.
-00008 //
-00009 // Thread Safe: No
-00010 // Extendable: Yes
-00011 //
-00012 // @file LiquidCrystal_I2C.h
-00013 // This file implements a basic liquid crystal library that comes as standard
-00014 // in the Arduino SDK but using an I2C IO extension board.
-00015 // 
-00016 // @brief 
-00017 // This is a basic implementation of the LiquidCrystal library of the
-00018 // Arduino SDK. The original library has been reworked in such a way that 
-00019 // this class implements the all methods to command an LCD based
-00020 // on the Hitachi HD44780 and compatible chipsets using I2C extension
-00021 // backpacks such as the I2CLCDextraIO with the PCF8574* I2C IO Expander ASIC.
-00022 //
-00023 // The functionality provided by this class and its base class is identical
-00024 // to the original functionality of the Arduino LiquidCrystal library.
-00025 //
-00026 //
-00027 // @author F. Malpartida - fmalpartida@gmail.com
-00028 // ---------------------------------------------------------------------------
-00029 #ifndef LiquidCrystal_I2C_h
-00030 #define LiquidCrystal_I2C_h
-00031 #include <inttypes.h>
-00032 #include <Print.h>
-00033 
-00034 #include "I2CIO.h"
-00035 #include "LCD.h"
-00036 
-00037 
-00038 class LiquidCrystal_I2C : public LCD 
-00039 {
-00040 public:
-00041    
-00051    LiquidCrystal_I2C (uint8_t lcd_Addr);
-00052    // Constructor with backlight control
-00053    LiquidCrystal_I2C (uint8_t lcd_Addr, uint8_t backlighPin, t_backlighPol pol);
-00054    
-00067    LiquidCrystal_I2C( uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs);
-00068    // Constructor with backlight control
-00069    LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs,
-00070                      uint8_t backlighPin, t_backlighPol pol);   
-00071    
-00088    LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, 
-00089                      uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7 );
-00090    // Constructor with backlight control
-00091    LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, 
-00092                      uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7,
-00093                      uint8_t backlighPin, t_backlighPol pol);
-00110    virtual void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS);   
-00111    
-00124    virtual void send(uint8_t value, uint8_t mode);
-00125    
-00134    void setBacklightPin ( uint8_t value, t_backlighPol pol );
-00135    
-00145    void setBacklight ( uint8_t value );
-00146    
-00147 private:
-00148    
-00154    int  init();
-00155    
-00171    void config (uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, 
-00172                 uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7 );
-00173    
-00182    void write4bits(uint8_t value, uint8_t mode);
-00183    
-00190    void pulseEnable(uint8_t);
-00191    
-00192    
-00193    uint8_t _Addr;             // I2C Address of the IO expander
-00194    uint8_t _backlightPinMask; // Backlight IO pin mask
-00195    uint8_t _backlightStsMask; // Backlight status mask
-00196    I2CIO   _i2cio;            // I2CIO PCF8574* expansion module driver I2CLCDextraIO
-00197    uint8_t _En;               // LCD expander word for enable pin
-00198    uint8_t _Rw;               // LCD expander word for R/W pin
-00199    uint8_t _Rs;               // LCD expander word for Register Select pin
-00200    uint8_t _data_pins[4];     // LCD data lines
-00201    
-00202 };
-00203 
-00204 #endif
-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___i2_c___by_vac_8cpp.html b/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___i2_c___by_vac_8cpp.html deleted file mode 100644 index 7dce84d..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___i2_c___by_vac_8cpp.html +++ /dev/null @@ -1,118 +0,0 @@ - - - - -LCD Library: LiquidCrystal_I2C_ByVac.cpp File Reference - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
-
-
LiquidCrystal_I2C_ByVac.cpp File Reference
-
-
-
#include <WProgram.h>
-#include <inttypes.h>
-#include "LiquidCrystal_I2C_ByVac.h"
-
-

Go to the source code of this file.

- -
-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___i2_c___by_vac_8cpp_source.html b/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___i2_c___by_vac_8cpp_source.html deleted file mode 100644 index e2ad15f..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___i2_c___by_vac_8cpp_source.html +++ /dev/null @@ -1,216 +0,0 @@ - - - - -LCD Library: LiquidCrystal_I2C_ByVac.cpp Source File - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
-
-
LiquidCrystal_I2C_ByVac.cpp
-
-
-Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
-00002 // Created by GHPS on 5/06/2012.
-00003 // Copyright 2012 - Under creative commons license 3.0:
-00004 //        Attribution-ShareAlike CC BY-SA
-00005 //
-00006 // This software is furnished "as is", without technical support, and with no 
-00007 // warranty, express or implied, as to its usefulness for any purpose.
-00008 //
-00009 // Thread Safe: No
-00010 // Extendable: Yes
-00011 //
-00012 // @file LiquidCrystal_I2C_ByVac.c
-00013 // This file implements a basic liquid crystal library that comes as standard
-00014 // in the Arduino SDK but using the extension board BV4218/BV4208 from ByVac.
-00015 // 
-00016 // @brief 
-00017 // This is a basic implementation of the LiquidCrystal library of the
-00018 // Arduino SDK. The original library has been reworked in such a way that 
-00019 // this class implements the all methods to command an LCD based
-00020 // on the Hitachi HD44780 and compatible chipsets using I2C extension
-00021 // backpack BV4218 from ByVac.
-00022 //
-00023 // The functionality provided by this class and its base class is identical
-00024 // to the original functionality of the Arduino LiquidCrystal library.
-00025 //
-00026 // @author GHPS - ghps@users.sourceforge.net
-00027 // ---------------------------------------------------------------------------
-00028 #if (ARDUINO <  100)
-00029 #include <WProgram.h>
-00030 #else
-00031 #include <Arduino.h>
-00032 #endif
-00033 #include <inttypes.h>
-00034 #include "LiquidCrystal_I2C_ByVac.h"
-00035 
-00036 // CONSTRUCTORS
-00037 // ---------------------------------------------------------------------------
-00038 LiquidCrystal_I2C_ByVac::LiquidCrystal_I2C_ByVac( uint8_t lcd_Addr )
-00039 {
-00040    _Addr = lcd_Addr;
-00041    _polarity == NEGATIVE;
-00042 }
-00043 
-00044 // PUBLIC METHODS
-00045 // ---------------------------------------------------------------------------
-00046 
-00047 //
-00048 // begin
-00049 void LiquidCrystal_I2C_ByVac::begin(uint8_t cols, uint8_t lines, uint8_t dotsize) 
-00050 {
-00051    Wire.begin();
-00052    LCD::begin ( cols, lines, dotsize );   
-00053 }
-00054 
-00055 // User commands - users can expand this section
-00056 //----------------------------------------------------------------------------
-00057 // Turn the integrated backlight off/on
-00058 
-00059 // setBacklight
-00060 void LiquidCrystal_I2C_ByVac::setBacklight( uint8_t value ) 
-00061 {
-00062   Wire.beginTransmission(_Addr);
-00063   Wire.write(0x03);                                     //  ByVac command code 0x03 for backlight
-00064   if (value==0) Wire.write(1); else Wire.write((byte)0);        // 1 for off since polarity is NEGATIVE
-00065   Wire.endTransmission();
-00066 }
-00067 
-00068 // Turn the contrast off/on
-00069 
-00070 // setContrast
-00071 void LiquidCrystal_I2C_ByVac::setContrast( uint8_t value ) 
-00072 {
-00073   Wire.beginTransmission(_Addr);
-00074   Wire.write(0x05);                                     //  ByVac command code 0x05 for contrast
-00075   if (value==0) Wire.write((byte)0); else Wire.write(1); 
-00076   Wire.endTransmission();
-00077 }
-00078 
-00079 // PRIVATE METHODS
-00080 // ---------------------------------------------------------------------------
-00081 
-00082 //
-00083 // init
-00084 int LiquidCrystal_I2C_ByVac::init()
-00085 {
-00086    int status = 0;
-00087    
-00088    // ByVac backpack initialized by onboard firmware
-00089    // ------------------------------------------------------------------------
-00090    status=1;
-00091    return ( status );
-00092 }
-00093 
-00094 // low level data pushing commands
-00095 //----------------------------------------------------------------------------
-00096 
-00097 //
-00098 // send - write either command or data
-00099 void LiquidCrystal_I2C_ByVac::send(uint8_t value, uint8_t mode) 
-00100 {
-00101   Wire.beginTransmission(_Addr);
-00102   Wire.write(mode+1); // map COMMAND (0) -> ByVac command code 0x01/ DATA  (1) ->  ByVac command code 0x02
-00103   Wire.write(value);
-00104   Wire.endTransmission();
-00105 }
-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___i2_c___by_vac_8h.html b/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___i2_c___by_vac_8h.html deleted file mode 100644 index 8764194..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___i2_c___by_vac_8h.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - -LCD Library: LiquidCrystal_I2C_ByVac.h File Reference - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
- -
-
LiquidCrystal_I2C_ByVac.h File Reference
-
-
-
#include <inttypes.h>
-#include <Print.h>
-#include <../Wire/Wire.h>
-#include "LCD.h"
-
-

Go to the source code of this file.

- - - -

-Classes

class  LiquidCrystal_I2C_ByVac
-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___i2_c___by_vac_8h_source.html b/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___i2_c___by_vac_8h_source.html deleted file mode 100644 index 5af35d5..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___i2_c___by_vac_8h_source.html +++ /dev/null @@ -1,171 +0,0 @@ - - - - -LCD Library: LiquidCrystal_I2C_ByVac.h Source File - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
-
-
LiquidCrystal_I2C_ByVac.h
-
-
-Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
-00002 // Created by GHPS on 5/06/2012.
-00003 // Copyright 2012 - Under creative commons license 3.0:
-00004 //        Attribution-ShareAlike CC BY-SA
-00005 //
-00006 // This software is furnished "as is", without technical support, and with no 
-00007 // warranty, express or implied, as to its usefulness for any purpose.
-00008 //
-00009 // Thread Safe: No
-00010 // Extendable: Yes
-00011 //
-00012 // @file LiquidCrystal_I2C_ByVac.c
-00013 // This file implements a basic liquid crystal library that comes as standard
-00014 // in the Arduino SDK but using the extension board BV4218/BV4208 from ByVac.
-00015 // 
-00016 // @brief 
-00017 // This is a basic implementation of the LiquidCrystal library of the
-00018 // Arduino SDK. The original library has been reworked in such a way that 
-00019 // this class implements the all methods to command an LCD based
-00020 // on the Hitachi HD44780 and compatible chipsets using I2C extension
-00021 // backpack BV4218 from ByVac.
-00022 //
-00023 // The functionality provided by this class and its base class is identical
-00024 // to the original functionality of the Arduino LiquidCrystal library.
-00025 //
-00026 // @author GHPS - ghps-et-users-sourceforge-net
-00027 // ---------------------------------------------------------------------------
-00028 #ifndef LiquidCrystal_I2C_ByVac_h
-00029 #define LiquidCrystal_I2C_ByVac_h
-00030 #include <inttypes.h>
-00031 #include <Print.h>
-00032 
-00033 #include <../Wire/Wire.h>
-00034 #include "LCD.h"
-00035 
-00036 
-00037 class LiquidCrystal_I2C_ByVac : public LCD 
-00038 {
-00039 public:
-00040    
-00050    LiquidCrystal_I2C_ByVac (uint8_t lcd_Addr);
-00051 
-00068    virtual void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS);
-00069    
-00082    virtual void send(uint8_t value, uint8_t mode);
-00083    
-00084    
-00092    void setBacklight ( uint8_t value );
-00093  
-00102    void setContrast ( uint8_t value );
-00103  
-00104 private:
-00105    
-00111    int  init();
-00112    
-00122    uint8_t _Addr;             // I2C Address of the IO expander
-00123    
-00124 };
-00125 
-00126 #endif
-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r1_w_8cpp.html b/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r1_w_8cpp.html deleted file mode 100644 index 3d711b8..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r1_w_8cpp.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - -LCD Library: LiquidCrystal_SR1W.cpp File Reference - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
-
-
LiquidCrystal_SR1W.cpp File Reference
-
- -
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r1_w_8cpp_source.html b/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r1_w_8cpp_source.html deleted file mode 100644 index 0a2d904..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r1_w_8cpp_source.html +++ /dev/null @@ -1,363 +0,0 @@ - - - - -LCD Library: LiquidCrystal_SR1W.cpp Source File - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
-
-
LiquidCrystal_SR1W.cpp
-
-
-Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
-00002 // Created/Adapted by Stephen Erisman 2013-07-06
-00003 // Copyright 2013 - Under creative commons license 3.0:
-00004 //        Attribution-ShareAlike CC BY-SA
-00005 //
-00006 // This software is furnished "as is", without technical support, and with no 
-00007 // warranty, express or implied, as to its usefulness for any purpose.
-00008 //
-00009 // Thread Safe: No
-00010 // Extendable: Yes
-00011 //
-00012 // @file LiquidCrystal_SR1W.cpp
-00013 // Connects a hd44780 LCD using 1 pin from the Arduino, via an 8-bit Latching
-00014 // ShiftRegister (SR1W from now on).
-00015 // 
-00016 // @brief 
-00017 // This is an optimized implementation of the 1-wire shift concept developed by
-00018 // Roman Black (http://www.romanblack.com/shift1.htm) that also makes use of
-00019 // (and merges) the diode-resistor AND "gate" concept (http://www.rentron.com/Myke1.htm)
-00020 // as well as introducing some new and original ideas (particularly how HW_CLEAR works).
-00021 // 
-00022 //
-00023 // See the corresponding SR1W header file for full details.
-00024 //
-00025 // History
-00026 // 2013.07.31 serisman - fixed potential interrupt bug and made more performance optimizations
-00027 // 2013.07.10 serisman - more performance optimizations and modified the HW_CLEAR circuit a bit
-00028 // 2013.07.09 serisman - added an even faster version that performs the clear in hardware
-00029 // 2013.07.08 serisman - changed code to shift data MSB first to match SR2W
-00030 // 2013.07.07 serisman - major speed optimization
-00031 // 2013.07.06 serisman - created/modified from SR2W and FastIO sources to create SR1W
-00032 // @author  S. Erisman - arduino@serisman.com
-00033 // ---------------------------------------------------------------------------
-00034 
-00035 #include "LiquidCrystal_SR1W.h"
-00036 
-00037 // CONSTRUCTORS
-00038 // ---------------------------------------------------------------------------
-00039 // Assuming 1 line 8 pixel high font
-00040 LiquidCrystal_SR1W::LiquidCrystal_SR1W (uint8_t srdata, t_sr1w_circuitType circuitType, t_backlighPol blpol)
-00041 {
-00042         init ( srdata, circuitType, blpol, 1, 0 );
-00043 }
-00044 
-00045 // PRIVATE METHODS
-00046 // ---------------------------------------------------------------------------
-00047 
-00048 //
-00049 // init
-00050 void LiquidCrystal_SR1W::init(uint8_t srdata, t_sr1w_circuitType circuitType, t_backlighPol blpol, uint8_t lines, uint8_t font)
-00051 {
-00052         _srRegister = fio_pinToOutputRegister(srdata);
-00053         _srMask = fio_pinToBit(srdata);
-00054    
-00055         _circuitType = circuitType;
-00056    
-00057         _blPolarity = blpol;
-00058    
-00059         _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS;
-00060    
-00061    clearSR();
-00062    
-00063         backlight(); // set default backlight state to on
-00064 }
-00065 
-00066 //
-00067 // clearSR
-00068 uint8_t LiquidCrystal_SR1W::clearSR()
-00069 {
-00070         uint8_t numDelays = 0;
-00071    
-00072         // Store these as local variables for extra performance (and smaller compiled sketch size)
-00073         fio_register srRegister = _srRegister;
-00074         fio_bit srMask = _srMask;
-00075    
-00076         // Set the Serial PIN to a LOW state
-00077         SR1W_ATOMIC_WRITE_LOW(srRegister, srMask);
-00078    
-00079         // We need to delay to make sure the Data and Latch/EN capacitors are fully discharged
-00080         // This also triggers the EN pin because of the falling edge.
-00081         SR1W_DELAY();
-00082    
-00083         ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
-00084         {
-00085                 // Pre-calculate these values for extra performance and to make sure the clock pulse is as quick as possible
-00086                 fio_bit reg_val = *srRegister;
-00087                 fio_bit bit_low = reg_val & ~srMask;
-00088                 fio_bit bit_high = reg_val | srMask;
-00089       
-00090                 // Clear the shift register (without triggering the Latch/EN pins)
-00091                 // We only need to shift 7 bits here because the subsequent HIGH transistion will also shift a '0' in.
-00092                 for (int8_t i = 6; i>=0; i--)
-00093                 {
-00094                         // Shift in a '0' (NOTE: This clock pulse needs to execute as quickly as possible)
-00095                         *srRegister = bit_high;
-00096                         *srRegister = bit_low;
-00097                 }
-00098       
-00099                 // Set the Serial PIN to a HIGH state so the next nibble/byte can be loaded
-00100                 // This also shifts the 8th '0' bit in.
-00101                 *srRegister = bit_high;
-00102         }
-00103    
-00104         // Give the Data capacitor a chance to fully charge
-00105         SR1W_DELAY();
-00106    
-00107         return numDelays;
-00108 }
-00109 
-00110 //
-00111 // loadSR
-00112 uint8_t LiquidCrystal_SR1W::loadSR(uint8_t val)
-00113 {
-00114         uint8_t numDelays = 0;
-00115    
-00116         // Store these as local variables for extra performance (and smaller compiled sketch size)
-00117         fio_register srRegister = _srRegister;
-00118         fio_bit srMask = _srMask;
-00119    
-00120         // NOTE: This assumes the Serial PIN is already HIGH and the Data capacitor is fully charged
-00121         uint8_t previousBit = 1;
-00122    
-00123         // Send the data to the shift register (MSB first)
-00124         for (int8_t i = 7; i>=0; i--)
-00125         {
-00126                 if (val & 0x80)
-00127                 {
-00128                         if (previousBit == 0)
-00129                         {
-00130                                 // We need to make sure the Data capacitor has fully recharged
-00131                                 SR1W_DELAY();
-00132                         }
-00133          
-00134                         previousBit = 1;
-00135          
-00136                         ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
-00137                         {
-00138                                 // Pre-calculate these values to make sure the clock pulse is as quick as possible
-00139                                 fio_bit reg_val = *srRegister;
-00140                                 fio_bit bit_low = reg_val & ~srMask;
-00141                                 fio_bit bit_high = reg_val | srMask;
-00142             
-00143                                 // Shift in a '1' (NOTE: This clock pulse needs to execute as quickly as possible)
-00144                                 *srRegister = bit_low;
-00145                                 *srRegister = bit_high;
-00146                         }
-00147                 }
-00148                 else
-00149                 {
-00150                         // Shift in a '0'
-00151                         SR1W_ATOMIC_WRITE_LOW(srRegister, srMask);
-00152          
-00153                         // We need to make sure the Data capacitor has fully discharged
-00154                         SR1W_DELAY();
-00155          
-00156                         previousBit = 0;
-00157          
-00158                         SR1W_ATOMIC_WRITE_HIGH(srRegister, srMask);
-00159                 }
-00160                 val <<= 1;
-00161         }
-00162    
-00163         // NOTE: Serial PIN is currently HIGH
-00164    
-00165         // For SW_CLEAR, we need to delay to make sure the Latch/EN capacitor is fully charged.
-00166         //   This triggers the Latch pin because of the rising edge.
-00167         // For HW_CLEAR, we need to delay to give the hardware time to perform the clear.
-00168         //   This also gives the Data capacitor a chance to fully charge
-00169         SR1W_DELAY();
-00170    
-00171    if (_circuitType == SW_CLEAR)
-00172         {
-00173                 // Clear the shift register to get ready for the next nibble/byte
-00174                 // This also discharges the Latch/EN capacitor which finally triggers the EN pin because of the falling edge.
-00175                 numDelays += clearSR();
-00176    }
-00177         else
-00178         {
-00179                 // For some reason HW_CLEAR isn't totally stable unless we delay a little bit more.
-00180                 // TODO... figure this out...
-00181                 SR1W_DELAY();
-00182         }
-00183    
-00184         return numDelays;
-00185 }
-00186 
-00187 // PUBLIC METHODS
-00188 // ---------------------------------------------------------------------------
-00189 
-00190 
-00191 /************ low level data pushing commands **********/
-00192 //
-00193 // send
-00194 void LiquidCrystal_SR1W::send(uint8_t value, uint8_t mode)
-00195 {
-00196         uint8_t numDelays = 0;
-00197    
-00198         uint8_t data;
-00199    
-00200         if ( mode != FOUR_BITS )
-00201         {
-00202                 // upper nibble
-00203                 data = ( mode == DATA ) ? SR1W_RS_MASK : 0;
-00204                 data |= SR1W_EN_MASK | SR1W_UNUSED_MASK;
-00205                 data |= _blMask;
-00206       
-00207                 if (value & _BV(4))     data |= SR1W_D4_MASK;
-00208                 if (value & _BV(5)) data |= SR1W_D5_MASK;
-00209                 if (value & _BV(6)) data |= SR1W_D6_MASK;
-00210                 if (value & _BV(7)) data |= SR1W_D7_MASK;
-00211       
-00212                 numDelays += loadSR(data);
-00213         }
-00214    
-00215         // lower nibble
-00216         data = ( mode == DATA ) ? SR1W_RS_MASK : 0;
-00217         data |= SR1W_EN_MASK | SR1W_UNUSED_MASK;
-00218         data |= _blMask;
-00219    
-00220         if (value & _BV(0))     data |= SR1W_D4_MASK;
-00221         if (value & _BV(1)) data |= SR1W_D5_MASK;
-00222         if (value & _BV(2)) data |= SR1W_D6_MASK;
-00223         if (value & _BV(3)) data |= SR1W_D7_MASK;
-00224    
-00225         numDelays += loadSR(data);
-00226    
-00227         // Make sure we wait at least 40 uS between bytes.
-00228         unsigned int totalDelay = numDelays * SR1W_DELAY_US;
-00229         if (totalDelay < 40)
-00230                 delayMicroseconds(40 - totalDelay);
-00231 }
-00232 
-00233 //
-00234 // setBacklight
-00235 void LiquidCrystal_SR1W::setBacklight ( uint8_t value )
-00236 { 
-00237         // Check for polarity to configure mask accordingly
-00238         // ----------------------------------------------------------
-00239         if  ( ((_blPolarity == POSITIVE) && (value > 0)) || 
-00240         ((_blPolarity == NEGATIVE ) && ( value == 0 )) )
-00241         {
-00242                 _blMask = SR1W_BL_MASK;
-00243         }
-00244         else 
-00245         {
-00246                 _blMask = 0;
-00247         }
-00248    
-00249         // Send a dummy (non-existant) command to allow the backlight PIN to be latched.
-00250         // The seems to be safe because the LCD appears to treat this as a NOP.
-00251         send(0, COMMAND);
-00252 }
-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r1_w_8h.html b/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r1_w_8h.html deleted file mode 100644 index 630abda..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r1_w_8h.html +++ /dev/null @@ -1,380 +0,0 @@ - - - - -LCD Library: LiquidCrystal_SR1W.h File Reference - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
- -
-
LiquidCrystal_SR1W.h File Reference
-
-
-
#include <inttypes.h>
-#include "LCD.h"
-#include "FastIO.h"
-
-

Go to the source code of this file.

- - - - - - - - - - - - - - - - - - -

-Classes

class  LiquidCrystal_SR1W

-Defines

#define SR1W_ATOMIC_WRITE_HIGH(reg, mask)   ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { *reg |= mask; }
#define SR1W_ATOMIC_WRITE_LOW(reg, mask)   ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { *reg &= ~mask; }
#define SR1W_BL_MASK   0x20
#define SR1W_D4_MASK   0x10
#define SR1W_D5_MASK   0x08
#define SR1W_D6_MASK   0x04
#define SR1W_D7_MASK   0x02
#define SR1W_DELAY()   { delayMicroseconds(SR1W_DELAY_US); numDelays++; }
#define SR1W_DELAY_US   5
#define SR1W_EN_MASK   0x80
#define SR1W_RS_MASK   0x40
#define SR1W_UNUSED_MASK   0x01

-Enumerations

enum  t_sr1w_circuitType { SW_CLEAR, -HW_CLEAR - }
-

Define Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
#define SR1W_ATOMIC_WRITE_HIGH( reg,
 mask 
)   ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { *reg |= mask; }
-
-
- -

Definition at line 294 of file LiquidCrystal_SR1W.h.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
#define SR1W_ATOMIC_WRITE_LOW( reg,
 mask 
)   ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { *reg &= ~mask; }
-
-
- -

Definition at line 293 of file LiquidCrystal_SR1W.h.

- -
-
- -
-
- - - - -
#define SR1W_BL_MASK   0x20
-
-
- -

Definition at line 289 of file LiquidCrystal_SR1W.h.

- -
-
- -
-
- - - - -
#define SR1W_D4_MASK   0x10
-
-
- -

Definition at line 288 of file LiquidCrystal_SR1W.h.

- -
-
- -
-
- - - - -
#define SR1W_D5_MASK   0x08
-
-
- -

Definition at line 287 of file LiquidCrystal_SR1W.h.

- -
-
- -
-
- - - - -
#define SR1W_D6_MASK   0x04
-
-
- -

Definition at line 286 of file LiquidCrystal_SR1W.h.

- -
-
- -
-
- - - - -
#define SR1W_D7_MASK   0x02
-
-
- -

Definition at line 285 of file LiquidCrystal_SR1W.h.

- -
-
- -
-
- - - - - - - -
#define SR1W_DELAY()   { delayMicroseconds(SR1W_DELAY_US); numDelays++; }
-
-
- -

Definition at line 279 of file LiquidCrystal_SR1W.h.

- -
-
- -
-
- - - - -
#define SR1W_DELAY_US   5
-
-
- -

Definition at line 278 of file LiquidCrystal_SR1W.h.

- -
-
- -
-
- - - - -
#define SR1W_EN_MASK   0x80
-
-
- -

Definition at line 291 of file LiquidCrystal_SR1W.h.

- -
-
- -
-
- - - - -
#define SR1W_RS_MASK   0x40
-
-
- -

Definition at line 290 of file LiquidCrystal_SR1W.h.

- -
-
- -
-
- - - - -
#define SR1W_UNUSED_MASK   0x01
-
-
- -

Definition at line 284 of file LiquidCrystal_SR1W.h.

- -
-
-

Enumeration Type Documentation

- -
-
- - - - -
enum t_sr1w_circuitType
-
-
-
Enumerator:
- - -
SW_CLEAR  -
HW_CLEAR  -
-
-
- -

Definition at line 297 of file LiquidCrystal_SR1W.h.

- -
-
-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r1_w_8h_source.html b/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r1_w_8h_source.html deleted file mode 100644 index 403d6f5..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r1_w_8h_source.html +++ /dev/null @@ -1,438 +0,0 @@ - - - - -LCD Library: LiquidCrystal_SR1W.h Source File - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
-
-
LiquidCrystal_SR1W.h
-
-
-Go to the documentation of this file.
00001 
-00002 // ---------------------------------------------------------------------------
-00003 // Created/Adapted by Stephen Erisman 2013-07-06
-00004 // Copyright 2013 - Under creative commons license 3.0:
-00005 //        Attribution-ShareAlike CC BY-SA
-00006 //
-00007 // This software is furnished "as is", without technical support, and with no 
-00008 // warranty, express or implied, as to its usefulness for any purpose.
-00009 //
-00010 // @file LiquidCrystal_SR1W.h
-00011 // Connects a hd44780 LCD using 1 pin from the Arduino, via an 8-bit Latching
-00012 // ShiftRegister (SR1W from now on).
-00013 // 
-00014 // @brief 
-00015 // This is the 1 wire shift register interface class for the LCD library
-00016 //
-00017 // The functionality provided by this class and its base class is a superset of
-00018 // the original functionality of the Arduino LiquidCrystal library and can
-00019 // be used as such.
-00020 // See the LCD class for a full description of the API functions available.
-00021 //
-00022 // It works with a 8-bit latched, no-tristate, unidirectional SIPO (Serial-In-Parallel-Out)
-00023 // shift register, and an hd44780 LCD in 4-bit mode.
-00024 // The 74HC595 shift register has been tested.
-00025 //
-00026 //
-00027 // 1 Pin required from the Arduino:
-00028 // - Serial PIN:
-00029 //    The Serial PIN is wired directly to the shift register's Clock PIN and its
-00030 //    unaltered signal directly triggers the Clock on every LOW to HIGH transition.
-00031 //
-00032 //    Additionally, the Serial PIN is wired through a resistor capacitor (RC) filter to
-00033 //    the shift register's Data PIN.  During a quick transition of the Serial PIN the
-00034 //    RC filter will maintain the Data PIN's previous value because the capacitor isn't
-00035 //    given enough time to charge (or discharge) to the alternate state.  If the transition
-00036 //    is held for enough time, however, the RC capacitor will charge (or discharge) and the
-00037 //    value seen by the Data PIN will have changed state.
-00038 //
-00039 //    There are two circuit versions that behave differently for Latch, Enable, and Clear:
-00040 //
-00041 //  HW_CLEAR version:
-00042 //    In this version the shift register's Latch and LCD's Enable PINs are wired directly to
-00043 //    the shift register's Q'H output.  The shift register's /Clear PIN is then wired up
-00044 //    through two logic "gates": first QH and Q'H are AND'd together with a diode-resistor
-00045 //    "gate" the output of which is NAND'd with VCC using a resistor-NPN-resistor "gate".
-00046 //    So, /CLR = ((QH AND Q'H) NAND VCC).  We also put a capacitor on the NPN base to GND
-00047 //    to delay the signal a bit and allow the Latch and EN signals some extra time to trigger.
-00048 //    
-00049 //    This all fits together as follows:
-00050 //      1. We shift in a '1'.
-00051 //      2. Ws shift in the other 7 bits.
-00052 //      3. At this point the first '1' has been shifted into Q'H causing it to go HIGH.
-00053 //      4. When Q'H is HIGH it causes Latch and EN to also go HIGH.
-00054 //      5. When Latch transitions to HIGH it changes the shift register outputs to the bits
-00055 //         that were shifted in.
-00056 //      6. This causes QH to go HIGH (if it wasn't already).
-00057 //      7. Now that QH AND Q'H are both HIGH they causes the base capacitor to start charging.
-00058 //      8. When the capacitor has charged enough the transistor brings /CLR LOW.
-00059 //      8. This will cause /CLR to trigger and the shift register will be cleared
-00060 //         (NOTE: This doesn't change the latched outputs)
-00061 //      9. The clearing of the shift register causes Q'H to go LOW.
-00062 //      9. When Q'H is LOW it causes Latch and EN to also go LOW.
-00063 //      10. When EN transitions to LOW the LCD reads in the bits on the shift register pins
-00064 //          and does it's thing.
-00065 //      11. Now that Q'H is LOW the base capacitor starts discharging.
-00066 //      12. When the capacitor has discharged enough the transistor will stop sinking /CLR.
-00067 //      13. This will cause /CLR to be pulled back up to HIGH by the VCC pullup resistor
-00068 //          (it will stay that way until our next nibble/byte has been shifted in)
-00069 //      14. We are now ready for our next nibble/byte.
-00070 //
-00071 //
-00072 //  SW_CLEAR version:
-00073 //    In this version the Serial PIN is wired to the shift register's Latch and LCD's Enable
-00074 //    PINs through another RC filter.  These PINs are also wired through a diode (AND "gate")
-00075 //    tied to the shift register's Q'H output.  This combination means that the Latch and
-00076 //    Enable PINs will be held LOW as long as EITHER the Q'H or RC output is LOW.
-00077 //
-00078 //    This all fits together as follows:
-00079 //      1. We shift in a '1'.
-00080 //      2. We shift in the other 7 bits. (NOTE: We leave Serial PIN HIGH at the end of this)
-00081 //      3. At this point the first '1' has been shifted into Q'H causing it to go HIGH.
-00082 //         (NOTE: Up until this time Q'H has been LOW so the attached diode has been keeping
-00083 //          the Latch/EN pins LOW.)
-00084 //      4. Now that Q'H is HIGH it causes the attached diode to stop discharging the Latch/EN
-00085 //         capacitor.  We delay here for a while to make sure it is fully charged.
-00086 //      5. When the capacitor has charged enough Latch/EN will be HIGH
-00087 //      5. When Latch transitions to HIGH it changes the shift register outputs to what was
-00088 //         shifted in.
-00089 //      6. We now bring the Serial PIN LOW and wait for the Latch/EN capacitor to discharge.
-00090 //      7. When the capacitor has discharged enough Latch/EN will be LOW
-00091 //      8. When EN transitions to LOW the LCD reads in the bits on the shift register pins
-00092 //         and does it's thing.
-00093 //      9. We now shift in '0' 8 times (as quickly as possible).
-00094 //      10. If we keep the LOW to HIGH to LOW pulses short enough while shifting in the '0's
-00095 //          the Latch/EN capacitor won't have time to charge to a point where it will re-trigger
-00096 //          the Latch/EN pins.
-00097 //      11. Now Q'H will be LOW and the shift register has been cleared (NOTE: This doesn't
-00098 //          change the latched outputs.)
-00099 //      12. We now bring the Serial PIN HIGH again and wait for the Data capacitor to recharge.
-00100 //      13. When the Data capacitor has fully charged we are ready for our next nibble/byte.
-00101 //
-00102 //
-00103 // These designs incorporate (and merge) ideas originally found here (1-wire concept):
-00104 //   http://www.romanblack.com/shift1.htm
-00105 // and here (diode-resistor AND "gate" EN control):
-00106 //   http://www.rentron.com/Myke1.htm
-00107 // as well as introducing some new and original ideas (particularly how HW_CLEAR works).
-00108 //
-00109 // Because of its use of the diode AND "gate", the SW_CLEAR design allows for faster sending
-00110 // of data to the LCD compared to Roman's original design.  With the proposed 5uS delay (see
-00111 // notes below), a byte can be sent to the LCD in as little as 30 uS (plus overhead) when
-00112 // sending all 1's. This increases to as much as 190 uS (plus overhead) when sending all 0's.
-00113 // This is in comparison to Roman's estimate of around 3-4 mS to send a byte. So this
-00114 // implementation is 15-133 times faster for the cost of a single (1N4148 or similar) diode.
-00115 //
-00116 // The HW_CLEAR version is even faster as it can completely eliminate the clearSR() call as
-00117 // well as the delays that are needed to latch the data in the SW_CLEAR version.
-00118 //
-00119 //
-00120 // Default Shift Register Bits - Shifted MSB first:
-00121 // Bit #0 (QA) - not used
-00122 // Bit #1 (QB) - connects to LCD data input D7
-00123 // Bit #2 (QC) - connects to LCD data input D6
-00124 // Bit #3 (QD) - connects to LCD data input D5
-00125 // Bit #4 (QE) - connects to LCD data input D4
-00126 // Bit #5 (QF) - optional backlight control
-00127 // Bit #6 (QG) - connects to RS (Register Select) on the LCD
-00128 // Bit #7 (QH) - used for /CLR on the HW_CLEAR version (cannot be changed)
-00129 //        (Q'H) - used for Latch/EN (via the diode AND "gate") (cannot be changed)
-00130 //
-00131 // NOTE: Any of these can be changed around as needed EXCEPT Bit #7 (QH and Q'H).
-00132 //
-00133 //
-00134 // Circuit Types (for the 74HC595)
-00135 // -------------------------------
-00136 // The 74HC595 is a latching shift register.  See the explanations above for how these circuits
-00137 // work.
-00138 //
-00139 //
-00140 // HW_CLEAR version: (Faster but higher part count)
-00141 // ------------------------------------------------
-00142 //
-00143 //                         74HC595     (VCC)
-00144 //                       +----u----+     |        2.2nF
-00145 // (LCD D7)------------1-|QB    VCC|-16--+    +----||----(GND)
-00146 // (LCD D6)------------2-|QC     QA|-15       |
-00147 // (LCD D5)------------3-|QD    SER|-14-------+--[ Resistor ]--+
-00148 // (LCD D4)------------4-|QE    /OE|-13--(GND)     1.5k        |
-00149 // (BL Circuit)--------5-|QF    RCK|-12-----+                  |
-00150 //                       |         |         \                 |
-00151 // (LCD RS)------------6-|QG    SCK|-11-------)----------------+--(Serial PIN)
-00152 //                       |         |          |
-00153 //             +-------7-|QH   /CLR|-10-------)--+--[ Resistor ]--(VCC)
-00154 //             |         |         |         /   |       1k
-00155 //             |    +--8-|GND   Q'H|--9-----+    |
-00156 //             |    |    +---------+        |    |         (GND)--(LCD RW)
-00157 //             |    |      0.1uF            |     \
-00158 //             |  (GND)-----||----(VCC)     +------)--------------(LCD EN)
-00159 //             |                            |     /
-00160 //             |----|<|----+--[ Resistor ]--|    |
-00161 //                 diode   |       1k            C
-00162 //                         |                     |
-00163 //                         +-------------+---B-|> (NPN)
-00164 //                                       |       |
-00165 //                               (2.2nF) =       E
-00166 //                                       |       |
-00167 //                                     (GND)   (GND)
-00168 //
-00169 //
-00170 // SW_CLEAR version: (Lower part count but slower)
-00171 // -----------------------------------------------
-00172 //
-00173 //                         74HC595     (VCC)
-00174 //                       +----u----+     |          2.2nF
-00175 // (LCD D7)------------1-|QB    VCC|-16--+      +----||----(GND)
-00176 // (LCD D6)------------2-|QC     QA|-15         |
-00177 // (LCD D5)------------3-|QD    SER|-14---------+--[ Resistor ]--+
-00178 // (LCD D4)------------4-|QE    /OE|-13--(GND)         1.5k      |
-00179 // (BL Circuit)--------5-|QF    RCK|-12---------+                |
-00180 //                       |         |             \               |
-00181 // (LCD RS)------------6-|QG    SCK|-11-----------)--------------+--(Serial PIN)
-00182 //                     7-|QH   /CLR|-10--(VCC)   /               |
-00183 //                  +--8-|GND   Q'H|--9---|<|---+--[ Resistor ]--+
-00184 //                  |    +---------+     diode  |      1.5k
-00185 //                  |                           |
-00186 //                  |      0.1uF                |
-00187 //                (GND)-----||----(VCC)         +----||----(GND)
-00188 //                                              |   2.2nF
-00189 // (LCD EN)-------------------------------------+
-00190 // (LCD RW)--(GND)
-00191 //
-00192 //
-00193 // In either case the LCD RW pin is hardwired to GND meaning we will only be able to write
-00194 // to the LCD.
-00195 // Therefore, the Busy Flag (BF, data bit D7) is not able to be read and we have to make use
-00196 // of the minimum delay time constraints.  This isn't really a problem because it usually
-00197 // takes us longer to shift and latch the data than the minimum delay anyway.  For now, we
-00198 // simply keep track of our delays and add more delay at the end to get to at least 37 uS.
-00199 //
-00200 //
-00201 // Backlight Control Circuit
-00202 // -------------------------
-00203 // Since we are using the latching nature of the shift resiter we don't need the extra
-00204 // backlight circuitry that SR2W uses.  Keeping it around, however, would still work because
-00205 // the circuit just slows down the transitions to the mosfet a bit.
-00206 //
-00207 // Here are two more optimized versions that can be used.
-00208 //
-00209 //
-00210 // NPN Transistor version: (Cheaper but more power draw and higher part count)
-00211 // ---------------------------------------------------------------------------
-00212 //
-00213 //                (value depends on LCD, 100ohm is usually safe)
-00214 // (LCD BL anode)---[ resistor ]---(VCC)
-00215 //
-00216 // (LCD BL cathode)---------------+
-00217 //                                |
-00218 //                                C
-00219 //                                |
-00220 // (BL input)--[ Resistor ]---B-|> (NPN)
-00221 //                  1k            |
-00222 //                                E
-00223 //                                |
-00224 //                              (GND)
-00225 //
-00226 // NOTE: The Bate resistor is needed because the NPN is current fed.  For lower
-00227 //       power draw, try a 10k resistor.
-00228 //
-00229 //
-00230 // N-CH Mosfet version: (More costly but less power draw and lower part count)
-00231 // ---------------------------------------------------------------------------
-00232 //
-00233 //                (value depends on LCD, 100ohm is usually safe)
-00234 // (LCD BL anode)---[ resistor ]---(VCC)
-00235 //
-00236 // (LCD BL cathode)---------------+
-00237 //                                |
-00238 //                                D
-00239 //                                |
-00240 // (BL input)----------------G-|-< (2N7000 FET)
-00241 //                                |
-00242 //                                S
-00243 //                                |
-00244 //                              (GND)
-00245 //
-00246 // NOTE: Gate resistor not needed because the mosfet is voltage fed and only really
-00247 //       pulls current while switching.
-00248 //
-00249 // In either case, when the BL input is HIGH the LCD backlight will turn on.
-00250 //
-00251 //
-00252 // History
-00253 // 2013.07.31 serisman - fixed potential interrupt bug and made more performance optimizations
-00254 // 2013.07.10 serisman - more performance optimizations and modified the HW_CLEAR circuit a bit
-00255 // 2013.07.09 serisman - added an even faster version that performs the clear in hardware
-00256 // 2013.07.08 serisman - changed code to shift data MSB first to match SR2W
-00257 // 2013.07.07 serisman - major speed optimization
-00258 // 2013.07.06 serisman - created/modified from SR2W source to create SR1W
-00259 // @author  S. Erisman - arduino@serisman.com
-00260 // --------------------------------------------------------------------------------
-00261 
-00262 #ifndef _LIQUIDCRYSTAL_SR1W_
-00263 #define _LIQUIDCRYSTAL_SR1W_
-00264 
-00265 #include <inttypes.h>
-00266 #include "LCD.h"
-00267 #include "FastIO.h"
-00268 
-00269 // 1-wire SR timing constants
-00270 // ---------------------------------------------------------------------------
-00271 
-00272 // NOTE:
-00273 //  The 1.5k resistor (1.2k - 1.8k with a 20% tolerance)
-00274 //   takes between 2.376uS and 4.36uS to fully charge or discharge
-00275 //       the 2.2n capacitor (1.98n - 2.42n with a 10% tolerance).
-00276 //      We round this up to a 5uS delay to provide an additional safety margin.
-00277 
-00278 #define SR1W_DELAY_US           5
-00279 #define SR1W_DELAY()            { delayMicroseconds(SR1W_DELAY_US); numDelays++; }
-00280 
-00281 // 1-wire SR output bit constants
-00282 // ---------------------------------------------------------------------------
-00283 
-00284 #define SR1W_UNUSED_MASK        0x01    // Set unused bit(s) to '1' as they are slightly faster to clock in.
-00285 #define SR1W_D7_MASK            0x02
-00286 #define SR1W_D6_MASK            0x04
-00287 #define SR1W_D5_MASK            0x08
-00288 #define SR1W_D4_MASK            0x10
-00289 #define SR1W_BL_MASK            0x20
-00290 #define SR1W_RS_MASK            0x40
-00291 #define SR1W_EN_MASK            0x80    // This cannot be changed. It has to be the first thing shifted in.
-00292 
-00293 #define SR1W_ATOMIC_WRITE_LOW(reg, mask)        ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { *reg &= ~mask; }
-00294 #define SR1W_ATOMIC_WRITE_HIGH(reg, mask)       ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { *reg |= mask; }
-00295 
-00296 
-00297 typedef enum { SW_CLEAR, HW_CLEAR } t_sr1w_circuitType;
-00298 
-00299 class LiquidCrystal_SR1W : public LCD
-00300 {
-00301 public:
-00313    LiquidCrystal_SR1W (uint8_t srdata, t_sr1w_circuitType circuitType, 
-00314                        t_backlighPol blpol = POSITIVE);
-00315    
-00328    virtual void send(uint8_t value, uint8_t mode);
-00329    
-00330    
-00340    void setBacklight ( uint8_t mode );
-00341    
-00342 private:
-00343    
-00349    void init ( uint8_t srdata, t_sr1w_circuitType circuitType, t_backlighPol blpol, 
-00350                uint8_t lines, uint8_t font );
-00351    
-00357    uint8_t clearSR ();
-00358    
-00363    uint8_t loadSR (uint8_t val);
-00364    
-00365    fio_register _srRegister; // Serial PIN
-00366    fio_bit _srMask;
-00367    
-00368    t_sr1w_circuitType _circuitType;
-00369    
-00370    uint8_t _blPolarity;
-00371    uint8_t _blMask;
-00372 };
-00373 #endif
-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r2_w_8cpp.html b/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r2_w_8cpp.html deleted file mode 100644 index 16fdcc6..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r2_w_8cpp.html +++ /dev/null @@ -1,116 +0,0 @@ - - - - -LCD Library: LiquidCrystal_SR2W.cpp File Reference - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
-
-
LiquidCrystal_SR2W.cpp File Reference
-
- -
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r2_w_8cpp_source.html b/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r2_w_8cpp_source.html deleted file mode 100644 index 7cfd191..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r2_w_8cpp_source.html +++ /dev/null @@ -1,246 +0,0 @@ - - - - -LCD Library: LiquidCrystal_SR2W.cpp Source File - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
-
-
LiquidCrystal_SR2W.cpp
-
-
-Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
-00002 // Created/Adapted by Bill Perry 2012-03-16
-00003 // Copyright 2012 - Under creative commons license 3.0:
-00004 //        Attribution-ShareAlike CC BY-SA
-00005 //
-00006 // This software is furnished "as is", without technical support, and with no 
-00007 // warranty, express or implied, as to its usefulness for any purpose.
-00008 //
-00009 // Thread Safe: No
-00010 // Extendable: Yes
-00011 //
-00012 // @file LiquidCrystal_SR2W.cpp
-00013 // Connects a hd44780 LCD using 2 pins from the Arduino, via an 8-bit 
-00014 // ShiftRegister (SR2W from now on).
-00015 // 
-00016 // @brief 
-00017 // This is a port of the ShiftRegLCD library from raron and ported to the
-00018 // LCD library.
-00019 //
-00020 //
-00021 // See the corresponding SR2W header file for full details.
-00022 //
-00023 // History
-00024 // 2012.03.29  bperrybap - Fixed incorrect use of 5x10 for default font 
-00025 //                         (now matches original LQ library)
-00026 //                         Fixed typo in SR2W mask define names
-00027 //                         changed default backlight state to on
-00028 // 2012.03.16  bperrybap - created/modified from SR sources to create SR2W
-00029 // @author B. Perry - bperrybap@opensource.billsworld.billandterrie.com
-00030 // ---------------------------------------------------------------------------
-00031 
-00032 #include "LiquidCrystal_SR2W.h"
-00033 
-00034 // CONSTRUCTORS
-00035 // ---------------------------------------------------------------------------
-00036 // Assuming 1 line 8 pixel high font
-00037 LiquidCrystal_SR2W::LiquidCrystal_SR2W (uint8_t srdata, uint8_t srclock, t_backlighPol blpol)
-00038 {
-00039         init ( srdata, srclock, blpol, 1, 0 );
-00040 }
-00041 
-00042 
-00043 // PRIVATE METHODS
-00044 // ---------------------------------------------------------------------------
-00045 
-00046 //
-00047 // init
-00048 void LiquidCrystal_SR2W::init(uint8_t srdata, uint8_t srclock, t_backlighPol blpol, uint8_t lines, uint8_t font)
-00049 {
-00050         _srDataRegister = fio_pinToOutputRegister(srdata);
-00051         _srDataMask = fio_pinToBit(srdata);
-00052         _srClockRegister = fio_pinToOutputRegister(srclock);
-00053         _srClockMask = fio_pinToBit(srclock);
-00054    
-00055         _blPolarity = blpol;
-00056    
-00057         _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS;
-00058    
-00059         backlight(); // set default backlight state to on
-00060 }
-00061 
-00062 //
-00063 // loadSR
-00064 void LiquidCrystal_SR2W::loadSR(uint8_t val)
-00065 {
-00066         // Clear to keep Enable LOW while clocking in new bits
-00067         fio_shiftOut(_srDataRegister, _srDataMask, _srClockRegister, _srClockMask);
-00068    
-00069    
-00070         // clock out SR data byte
-00071         fio_shiftOut(_srDataRegister, _srDataMask, _srClockRegister, _srClockMask, val, MSBFIRST);
-00072    
-00073         
-00074         // strobe LCD enable which can now be toggled by the data line
-00075         ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
-00076         {
-00077                 fio_digitalWrite_HIGH(_srDataRegister, _srDataMask);
-00078                 waitUsec (1);         // enable pulse must be >450ns               
-00079                 fio_digitalWrite_SWITCHTO(_srDataRegister, _srDataMask, LOW);
-00080         } // end critical section
-00081 }
-00082 
-00083 // PUBLIC METHODS
-00084 // ---------------------------------------------------------------------------
-00085 
-00086 
-00087 /************ low level data pushing commands **********/
-00088 //
-00089 // send
-00090 void LiquidCrystal_SR2W::send(uint8_t value, uint8_t mode)
-00091 {
-00092         uint8_t myMode = ( mode == DATA ) ? SR2W_RS_MASK : 0; 
-00093    
-00094         myMode = myMode | SR2W_EN_MASK | _blMask;
-00095 
-00096         if ( mode != FOUR_BITS )
-00097         {
-00098                 loadSR(myMode | ((value >> 1) & SR2W_DATA_MASK)); // upper nibble
-00099         }
-00100 
-00101         loadSR(myMode | ((value << 3) & SR2W_DATA_MASK)); // lower nibble
-00102    
-00103         /*
-00104          * Don't call waitUsec()
-00105          * do our own delay optmization since this code is so fast it needs some added delay
-00106          * even on slower AVRs.
-00107          */
-00108 #if (F_CPU <= 16000000)
-00109         delayMicroseconds ( 10 );      // commands & data writes need > 37us to complete
-00110 #else
-00111         delayMicroseconds ( 37 );      // commands & data writes need > 37us to complete
-00112 #endif
-00113 }
-00114 
-00115 //
-00116 // setBacklight
-00117 void LiquidCrystal_SR2W::setBacklight ( uint8_t value ) 
-00118 { 
-00119         // Check for polarity to configure mask accordingly
-00120         // ----------------------------------------------------------
-00121         if  ( ((_blPolarity == POSITIVE) && (value > 0)) || 
-00122         ((_blPolarity == NEGATIVE ) && ( value == 0 )) )
-00123         {
-00124                 _blMask = SR2W_BL_MASK;
-00125         }
-00126         else 
-00127         {
-00128                 _blMask = 0;
-00129         }
-00130    
-00131         // send dummy data of blMask to set BL pin
-00132         // Note: loadSR() will strobe the data line trying to pulse EN
-00133         // but E will not strobe because the EN output bit is not set.
-00134         loadSR(_blMask); 
-00135 }
-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r2_w_8h.html b/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r2_w_8h.html deleted file mode 100644 index 0036b40..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r2_w_8h.html +++ /dev/null @@ -1,191 +0,0 @@ - - - - -LCD Library: LiquidCrystal_SR2W.h File Reference - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
- -
-
LiquidCrystal_SR2W.h File Reference
-
-
-
#include <inttypes.h>
-#include "LCD.h"
-#include "FastIO.h"
-
-

Go to the source code of this file.

- - - - - - - - -

-Classes

class  LiquidCrystal_SR2W

-Defines

#define SR2W_BL_MASK   0x02
#define SR2W_DATA_MASK   0x78
#define SR2W_EN_MASK   0x80
#define SR2W_RS_MASK   0x04
-

Define Documentation

- -
-
- - - - -
#define SR2W_BL_MASK   0x02
-
-
- -

Definition at line 132 of file LiquidCrystal_SR2W.h.

- -
-
- -
-
- - - - -
#define SR2W_DATA_MASK   0x78
-
-
- -

Definition at line 134 of file LiquidCrystal_SR2W.h.

- -
-
- -
-
- - - - -
#define SR2W_EN_MASK   0x80
-
-
- -

Definition at line 135 of file LiquidCrystal_SR2W.h.

- -
-
- -
-
- - - - -
#define SR2W_RS_MASK   0x04
-
-
- -

Definition at line 133 of file LiquidCrystal_SR2W.h.

- -
-
-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r2_w_8h_source.html b/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r2_w_8h_source.html deleted file mode 100644 index 3fbb4cd..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r2_w_8h_source.html +++ /dev/null @@ -1,272 +0,0 @@ - - - - -LCD Library: LiquidCrystal_SR2W.h Source File - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
-
-
LiquidCrystal_SR2W.h
-
-
-Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
-00002 // Created/Adapted by Bill Perry 2012-03-16
-00003 // Copyright 2012 - Under creative commons license 3.0:
-00004 //        Attribution-ShareAlike CC BY-SA
-00005 //
-00006 // This software is furnished "as is", without technical support, and with no 
-00007 // warranty, express or implied, as to its usefulness for any purpose.
-00008 //
-00009 // @file LiquidCrystal_SR2W.h
-00010 // Connects a hd44780 LCD using 2 pins from the Arduino, via an 8-bit 
-00011 // ShiftRegister (SR2W from now on).
-00012 // 
-00013 // @brief 
-00014 // This is the 2 wire shift register interface class for the LCD library
-00015 //
-00016 // The functionality provided by this class and its base class is a superset of
-00017 // the original functionality of the Arduino LiquidCrystal library and can
-00018 // be used as such.
-00019 // See the LCD class for a full description of the API functions available.
-00020 //
-00021 // It works with a 8-bit unlatched, no-tristate, unidirectional SIPO (Serial-In-Parallel-Out)
-00022 // shift register (IE a very simple SR), and an hd44780 LCD in 4-bit mode.
-00023 // Any such shift register should do (pref. 74LS family IC's for 2-wire).
-00024 // 74LS164 and 74HC595 have been exstensively tested.
-00025 //
-00026 //
-00027 // 2 Pins required from the Arduino:
-00028 // - Data/Enable
-00029 // - Clock
-00030 // The Data pin is also used to control the enable signal
-00031 // LCD RW-pin hardwired to LOW (only writing to LCD).
-00032 // Busy Flag (BF, data bit D7) is not read.
-00033 //
-00034 //  Original project homepage: http://code.google.com/p/arduinoshiftreglcd/
-00035 //
-00036 // Shift register bits
-00037 // Bit  #0   - (cannot be used on 74HC595)
-00038 // Bit  #1   - optional backlight control
-00039 // Bit  #2   - connects to RS (Register Select) on the LCD
-00040 // Bit  #3   - connects to LCD data inputs D4
-00041 // Bit  #4   - connects to LCD data inputs D5
-00042 // Bit  #5   - connects to LCD data inputs D6
-00043 // Bit  #6   - connects to LCD data inputs D7
-00044 // Bit  #7   - enables the LCD enable-puls (via the diode-resistor AND "gate")
-00045 // 
-00046 // Wiring for a 74LS164
-00047 // ---------------------
-00048 //                          1k/4.7k
-00049 //              +--------[ Resistor ]--------+---(LCD Enable)
-00050 //              |                            |
-00051 //              |          74LS164    (VCC)  |
-00052 //              |        +----u----+    |   _V_ diode
-00053 // (data pin)---+---+--1-|A     VCC|-14-+    |
-00054 //                  |    |         |         |
-00055 //                  +--2-|B      Q7|-13------+
-00056 //                     3-|Q0     Q6|-12--(LCD D7)
-00057 // (BL Circuit)--------4-|Q1     Q5|-11--(LCD D6)
-00058 // (LCD RS)------------5-|Q2     Q4|-10--(LCD D5)
-00059 // (LCD D4)------------6-|Q3    /MR|--9--(VCC)
-00060 //                   +-7-|GND    CP|--8--(clock pin)
-00061 //                   |   +---------+ 
-00062 //                   |      0.1uf
-00063 //                 (gnd)-----||----(vcc)
-00064 // 
-00065 // Wiring for a 74HC595
-00066 // --------------------
-00067 // NOTE: the 74HC595 is a latching shift register. In order to get it to operate
-00068 // in a "non latching" mode, RCLK and SCLK are tied together. The side effect of this
-00069 // is that the latched output is one clock behind behind the internal shift register bits.
-00070 // To compensate for this the wiring is offset by one bit position lower.
-00071 // For example, while the backlight is hooked to Q0 it is still using bit 1 of
-00072 // of the shift register because the outputs are 1 clock behind the real internal shift
-00073 // register.
-00074 // 
-00075 //                         74HC595    (VCC)
-00076 //                       +----u----+    |  +-----------------------(BL circuit)
-00077 // (LCD RS)------------1-|Q1    VCC|-16-+  |  +--------------------(data pin)
-00078 // (LCD D4)------------2-|Q2     Q0|-15----+  |      1k/4.7k
-00079 // (LCD D5)------------3-|Q3    SER|-14-------+---[ Resistor ]--+--(LCD Enable)
-00080 // (LCD D6)------------4-|Q4    /OE|-13--(gnd)                  |
-00081 // (LCD D7)------------5-|Q5   RCLK|-12-------+                 |
-00082 //                       |         |          |                 |
-00083 //              +------6-|Q6   SCLK|-11-------+--(clock pin)    |
-00084 //              |      7-|Q7    /MR|-10--(VCC)                  |
-00085 //              |    +-8-|GND   Q6'|--9                         |
-00086 //              |    |   +---------+                    diode  _V_
-00087 //              |    |      0.1uf                               |
-00088 //              |  (gnd)-----||----(vcc)                        |
-00089 //              +-----------------------------------------------+
-00090 // 
-00091 //
-00092 // Backlight Control circuit
-00093 // -------------------------
-00094 // Because the shift resiter is not latching the outputs, the backlight circuitry
-00095 // will "see" the output bits as they are shifted into the shift register which
-00096 // can cause the backlight to flicker rather than remain constantly on/off.
-00097 // The circuit below slows down the transitions to the transistor to remove
-00098 // the visible flicker. When the BL input is HIGH the LCD backlight will turn on.
-00099 //
-00100 //                (value depends on LCD, 100ohm is usually safe)
-00101 // (LCD BL anode)---[ resistor ]---(vcc)
-00102 //
-00103 // (LCD BL cathode)-------------------------------+
-00104 //                                                |
-00105 //                                                D
-00106 //                                                |
-00107 // (BL input)----[ 4.7k Resistor ]----+-------G-|-<  (2N7000 FET)
-00108 //                                    |           |
-00109 //                          (0.1uf)   =           S
-00110 //                                    |           |
-00111 //                                  (gnd)        (gnd)
-00112 // 
-00113 // 
-00114 // 
-00115 //
-00116 // History
-00117 // 2012.03.16  bperrybap - creation/adaption from SR header to create SR2W header.
-00118 //                         Fixed typo in SR2W mask define names
-00119 // @author B. Perry - bperrybap@opensource.billsworld.billandterrie.com
-00120 // --------------------------------------------------------------------------------
-00121 #ifndef _LIQUIDCRYSTAL_SR2W_
-00122 #define _LIQUIDCRYSTAL_SR2W_
-00123 
-00124 #include <inttypes.h>
-00125 #include "LCD.h"
-00126 #include "FastIO.h"
-00127 
-00128 
-00129 // two-wire SR output bit constants
-00130 // ---------------------------------------------------------------------------
-00131 
-00132 #define SR2W_BL_MASK 0x02
-00133 #define SR2W_RS_MASK 0x04
-00134 #define SR2W_DATA_MASK 0x78     // data bits are hard coded to be SR bits 6,5,4,3
-00135 #define SR2W_EN_MASK 0x80       // cannot ever be changed
-00136 
-00137 class LiquidCrystal_SR2W : public LCD
-00138 {
-00139 public:
-00151    LiquidCrystal_SR2W (uint8_t srdata, uint8_t srclock, t_backlighPol blpol = POSITIVE);
-00152    
-00165    virtual void send(uint8_t value, uint8_t mode);
-00166    
-00167    
-00177    void setBacklight ( uint8_t mode );
-00178    
-00179 private:
-00180    
-00186    void init ( uint8_t srdata, uint8_t srclock, t_backlighPol blpol, uint8_t lines, uint8_t font );
-00187    
-00192    void loadSR (uint8_t val);
-00193    
-00194    fio_register _srDataRegister; // Serial Data pin
-00195    fio_bit _srDataMask;
-00196    fio_register _srClockRegister; // Clock Pin
-00197    fio_bit _srClockMask;
-00198 
-00199    uint8_t _blPolarity;
-00200    uint8_t _blMask;
-00201 };
-00202 #endif
-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r3_w_8cpp.html b/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r3_w_8cpp.html deleted file mode 100644 index 215b179..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r3_w_8cpp.html +++ /dev/null @@ -1,276 +0,0 @@ - - - - -LCD Library: LiquidCrystal_SR3W.cpp File Reference - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
- -
-
LiquidCrystal_SR3W.cpp File Reference
-
-
-
#include <stdio.h>
-#include <string.h>
-#include <inttypes.h>
-#include <WProgram.h>
-#include "LiquidCrystal_SR3W.h"
-#include "FastIO.h"
-
-

Go to the source code of this file.

- - - - - - - - - - - -

-Defines

#define D4   0
#define D5   1
#define D6   2
#define D7   3
#define EN   4
#define LCD_BACKLIGHT   0xFF
#define LCD_NOBACKLIGHT   0x00
#define RS   6
#define RW   5
-

Define Documentation

- -
-
- - - - -
#define D4   0
-
-
-

LCD dataline allocation this library only supports 4 bit LCD control mode. D4, D5, D6, D7 LCD data lines pin mapping of the extender module

- -

Definition at line 126 of file LiquidCrystal_SR3W.cpp.

- -
-
- -
-
- - - - -
#define D5   1
-
-
- -

Definition at line 127 of file LiquidCrystal_SR3W.cpp.

- -
-
- -
-
- - - - -
#define D6   2
-
-
- -

Definition at line 128 of file LiquidCrystal_SR3W.cpp.

- -
-
- -
-
- - - - -
#define D7   3
-
-
- -

Definition at line 129 of file LiquidCrystal_SR3W.cpp.

- -
-
- -
-
- - - - -
#define EN   4
-
-
-

Enable bit of the LCD Defines the IO of the expander connected to the LCD's Enable

- -

Definition at line 104 of file LiquidCrystal_SR3W.cpp.

- -
-
- -
-
- - - - -
#define LCD_BACKLIGHT   0xFF
-
-
-

LCD_BACKLIGHT BACKLIGHT MASK used when backlight is on

- -

Definition at line 93 of file LiquidCrystal_SR3W.cpp.

- -
-
- -
-
- - - - -
#define LCD_NOBACKLIGHT   0x00
-
-
-

LCD_NOBACKLIGHT No BACKLIGHT MASK

- -

Definition at line 86 of file LiquidCrystal_SR3W.cpp.

- -
-
- -
-
- - - - -
#define RS   6
-
-
-

Register bit of the LCD Defines the IO of the expander connected to the LCD's Register select pin

- -

Definition at line 118 of file LiquidCrystal_SR3W.cpp.

- -
-
- -
-
- - - - -
#define RW   5
-
-
-

Read/Write bit of the LCD Defines the IO of the expander connected to the LCD's Rw pin

- -

Definition at line 111 of file LiquidCrystal_SR3W.cpp.

- -
-
-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r3_w_8cpp_source.html b/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r3_w_8cpp_source.html deleted file mode 100644 index f85668b..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r3_w_8cpp_source.html +++ /dev/null @@ -1,363 +0,0 @@ - - - - -LCD Library: LiquidCrystal_SR3W.cpp Source File - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
-
-
LiquidCrystal_SR3W.cpp
-
-
-Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
-00002 // Created by Francisco Malpartida on 7.3.2012.
-00003 // Copyright 2011 - Under creative commons license 3.0:
-00004 //        Attribution-ShareAlike CC BY-SA
-00005 //
-00006 // This software is furnished "as is", without technical support, and with no 
-00007 // warranty, express or implied, as to its usefulness for any purpose.
-00008 //
-00009 // Thread Safe: No
-00010 // Extendable: Yes
-00011 //
-00012 // @file LiquidCrystal_SRG.h
-00013 // This file implements a basic liquid crystal library that comes as standard
-00014 // in the Arduino SDK but using a generic SHIFT REGISTER extension board.
-00015 // 
-00016 // @brief 
-00017 // This is a basic implementation of the LiquidCrystal library of the
-00018 // Arduino SDK. The original library has been reworked in such a way that 
-00019 // this class implements the all methods to command an LCD based
-00020 // on the Hitachi HD44780 and compatible chipsets using a 3 wire latching
-00021 // shift register. While it has been tested with a 74HC595N shift register
-00022 // it should also work with other latching shift registers such as the MC14094
-00023 // and the HEF4094
-00024 //
-00025 // This particular driver has been created as generic as possible to enable
-00026 // users to configure and connect their LCDs using just 3 digital IOs from the
-00027 // AVR or Arduino, and connect the LCD to the outputs of the shiftregister
-00028 // in any configuration. The library is configured by passing the IO pins
-00029 // that control the strobe, data and clock of the shift register and a map
-00030 // of how the shiftregister is connected to the LCD.
-00031 // 
-00032 //
-00033 //   +--------------------------------------------+
-00034 //   |                 MCU                        |
-00035 //   |   IO1           IO2           IO3          |
-00036 //   +----+-------------+-------------+-----------+
-00037 //        |             |             |
-00038 //        |             |             |
-00039 //   +----+-------------+-------------+-----------+
-00040 //   |    Strobe        Data          Clock       |
-00041 //   |          8-bit shift/latch register        | 74HC595N
-00042 //   |    Qa0  Qb1  Qc2  Qd3  Qe4  Qf5  Qg6  Qh7  |
-00043 //   +----+----+----+----+----+----+----+----+----+
-00044 //        |    |    |    |    |    |    |    
-00045 //        |11  |12  |13  |14  |6   |5   |4   (LCD pins)
-00046 //   +----+----+----+----+----+----+----+----+----+
-00047 //   |    DB4  DB5  DB6  DB7  E    Rw   RS        |
-00048 //   |                 LCD Module                 |
-00049 //
-00050 // NOTE: Rw is not used by the driver so it can be connected to GND.
-00051 //
-00052 // The functionality provided by this class and its base class is identical
-00053 // to the original functionality of the Arduino LiquidCrystal library.
-00054 //
-00055 //
-00056 // History
-00057 // 2012.03.29 bperrybap - fixed constructors not properly using Rs
-00058 //                        Fixed incorrect use of 5x10 for default font 
-00059 //                        - now matches original LQ library.
-00060 //                        moved delay to send() so it is per cmd/write vs shiftout()
-00061 //                        NOTE: delay is on hairy edge of working when FAST_MODE is on.
-00062 //                        because of waitUsec().
-00063 //                        There is margin at 16Mhz AVR but might fail on 20Mhz AVRs.
-00064 //                        
-00065 // @author F. Malpartida - fmalpartida@gmail.com
-00066 // ---------------------------------------------------------------------------
-00067 // flags for backlight control
-00068 #include <stdio.h>
-00069 #include <string.h>
-00070 #include <inttypes.h>
-00071 
-00072 #if (ARDUINO <  100)
-00073 #include <WProgram.h>
-00074 #else
-00075 #include <Arduino.h>
-00076 #endif
-00077 #include "LiquidCrystal_SR3W.h"
-00078 
-00079 #include "FastIO.h"
-00080 
-00086 #define LCD_NOBACKLIGHT 0x00
-00087 
-00093 #define LCD_BACKLIGHT   0xFF
-00094 
-00095 
-00096 // Default library configuration parameters used by class constructor with
-00097 // only the I2C address field.
-00098 // ---------------------------------------------------------------------------
-00104 #define EN 4  // Enable bit
-00105 
-00111 #define RW 5  // Read/Write bit
-00112 
-00118 #define RS 6  // Register select bit
-00119 
-00126 #define D4 0
-00127 #define D5 1
-00128 #define D6 2
-00129 #define D7 3
-00130 
-00131 
-00132 
-00133 LiquidCrystal_SR3W::LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe)
-00134 {
-00135    init( data, clk, strobe, RS, RW, EN, D4, D5, D6, D7 );
-00136 }
-00137 
-00138 LiquidCrystal_SR3W::LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe,
-00139                                        uint8_t backlighPin, t_backlighPol pol)
-00140 {
-00141    init( data, clk, strobe, RS, RW, EN, D4, D5, D6, D7 );
-00142    setBacklightPin(backlighPin, pol);
-00143 }
-00144 
-00145 LiquidCrystal_SR3W::LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe,
-00146                                        uint8_t En, uint8_t Rw, uint8_t Rs, 
-00147                                        uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7 )
-00148 {
-00149    init( data, clk, strobe, Rs, Rw, En, d4, d5, d6, d7 );
-00150 }
-00151 
-00152 LiquidCrystal_SR3W::LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe, 
-00153                                        uint8_t En, uint8_t Rw, uint8_t Rs, 
-00154                                        uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7,
-00155                                        uint8_t backlighPin, t_backlighPol pol)
-00156 {
-00157    init( data, clk, strobe, Rs, Rw, En, d4, d5, d6, d7 );
-00158    setBacklightPin(backlighPin, pol);
-00159 }
-00160 
-00161 
-00162 void LiquidCrystal_SR3W::send(uint8_t value, uint8_t mode)
-00163 {
-00164    
-00165    if ( mode != FOUR_BITS )
-00166    {
-00167       write4bits( (value >> 4), mode ); // upper nibble
-00168    }   
-00169    write4bits( (value & 0x0F), mode); // lower nibble
-00170 
-00171 
-00172 #if (F_CPU <= 16000000)
-00173    // No need to use the delay routines on AVR since the time taken to write
-00174    // on AVR with SR pin mapping even with fio is longer than LCD command execution.
-00175    waitUsec(37); //goes away on AVRs
-00176 #else
-00177    delayMicroseconds ( 37 );      // commands & data writes need > 37us to complete
-00178 #endif
-00179 
-00180 }
-00181 
-00182 
-00183 void LiquidCrystal_SR3W::setBacklightPin ( uint8_t value, t_backlighPol pol = POSITIVE )
-00184 {
-00185    _backlightPinMask = ( 1 << value );
-00186    _backlightStsMask = LCD_NOBACKLIGHT;
-00187    _polarity = pol;
-00188    setBacklight (BACKLIGHT_OFF);     // Set backlight to off as initial setup
-00189 }
-00190 
-00191 void LiquidCrystal_SR3W::setBacklight ( uint8_t value )
-00192 {
-00193    // Check if backlight is available
-00194    // ----------------------------------------------------
-00195    if ( _backlightPinMask != 0x0 )
-00196    {
-00197       // Check for polarity to configure mask accordingly
-00198       // ----------------------------------------------------------
-00199       if  (((_polarity == POSITIVE) && (value > 0)) || 
-00200            ((_polarity == NEGATIVE ) && ( value == 0 )))
-00201       {
-00202          _backlightStsMask = _backlightPinMask & LCD_BACKLIGHT;
-00203       }
-00204       else 
-00205       {
-00206          _backlightStsMask = _backlightPinMask & LCD_NOBACKLIGHT;
-00207       }
-00208       loadSR( _backlightStsMask );
-00209    }
-00210 }
-00211 
-00212 
-00213 // PRIVATE METHODS
-00214 // -----------------------------------------------------------------------------
-00215 
-00216 int LiquidCrystal_SR3W::init(uint8_t data, uint8_t clk, uint8_t strobe, 
-00217                              uint8_t Rs, uint8_t Rw, uint8_t En,
-00218                              uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)
-00219 {
-00220    _data       = fio_pinToBit(data);
-00221    _clk        = fio_pinToBit(clk);
-00222    _strobe     = fio_pinToBit(strobe);
-00223    _data_reg   = fio_pinToOutputRegister(data);
-00224    _clk_reg    = fio_pinToOutputRegister(clk);
-00225    _strobe_reg = fio_pinToOutputRegister(strobe);
-00226    
-00227    // LCD pin mapping
-00228    _backlightPinMask = 0;
-00229    _backlightStsMask = LCD_NOBACKLIGHT;
-00230    _polarity = POSITIVE;
-00231    
-00232    _En = ( 1 << En );
-00233    _Rw = ( 1 << Rw );
-00234    _Rs = ( 1 << Rs );
-00235    
-00236    // Initialise pin mapping
-00237    _data_pins[0] = ( 1 << d4 );
-00238    _data_pins[1] = ( 1 << d5 );
-00239    _data_pins[2] = ( 1 << d6 );
-00240    _data_pins[3] = ( 1 << d7 );
-00241    
-00242    _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS;
-00243    
-00244    return (1);
-00245 }
-00246 
-00247 void LiquidCrystal_SR3W::write4bits(uint8_t value, uint8_t mode)
-00248 {
-00249    uint8_t pinMapValue = 0;
-00250    
-00251    // Map the value to LCD pin mapping
-00252    // --------------------------------
-00253    for ( uint8_t i = 0; i < 4; i++ )
-00254    {
-00255       if ( ( value & 0x1 ) == 1 )
-00256       {
-00257          pinMapValue |= _data_pins[i];
-00258       }
-00259       value = ( value >> 1 );
-00260    }
-00261    
-00262    // Is it a command or data
-00263    // -----------------------
-00264    mode = ( mode == DATA ) ? _Rs : 0;
-00265    
-00266    pinMapValue |= mode | _backlightStsMask;
-00267    loadSR ( pinMapValue | _En );  // Send with enable high
-00268    loadSR ( pinMapValue); // Send with enable low
-00269 }
-00270 
-00271 
-00272 void LiquidCrystal_SR3W::loadSR(uint8_t value) 
-00273 {
-00274    // Load the shift register with information
-00275    fio_shiftOut(_data_reg, _data, _clk_reg, _clk, value, MSBFIRST);
-00276    
-00277    // Strobe the data into the latch
-00278    ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
-00279    {
-00280       fio_digitalWrite_HIGH(_strobe_reg, _strobe);
-00281       fio_digitalWrite_SWITCHTO(_strobe_reg, _strobe, LOW);
-00282    }
-00283 }
-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r3_w_8h.html b/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r3_w_8h.html deleted file mode 100644 index 90e61fa..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r3_w_8h.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - -LCD Library: LiquidCrystal_SR3W.h File Reference - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
- -
-
LiquidCrystal_SR3W.h File Reference
-
-
-
#include <inttypes.h>
-#include "LCD.h"
-#include "FastIO.h"
-
-

Go to the source code of this file.

- - - -

-Classes

class  LiquidCrystal_SR3W
-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r3_w_8h_source.html b/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r3_w_8h_source.html deleted file mode 100644 index f69ac47..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r3_w_8h_source.html +++ /dev/null @@ -1,228 +0,0 @@ - - - - -LCD Library: LiquidCrystal_SR3W.h Source File - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
-
-
LiquidCrystal_SR3W.h
-
-
-Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
-00002 // Created by Francisco Malpartida on 7.3.2012.
-00003 // Copyright 2011 - Under creative commons license 3.0:
-00004 //        Attribution-ShareAlike CC BY-SA
-00005 //
-00006 // This software is furnished "as is", without technical support, and with no 
-00007 // warranty, express or implied, as to its usefulness for any purpose.
-00008 //
-00009 // Thread Safe: No
-00010 // Extendable: Yes
-00011 //
-00012 // @file LiquidCrystal_SR3W.h
-00013 // This file implements a basic liquid crystal library that comes as standard
-00014 // in the Arduino SDK but using a generic SHIFT REGISTER extension board.
-00015 // 
-00016 // @brief 
-00017 // This is a basic implementation of the LiquidCrystal library of the
-00018 // Arduino SDK. The original library has been reworked in such a way that 
-00019 // this class implements the all methods to command an LCD based
-00020 // on the Hitachi HD44780 and compatible chipsets using a 3 wire latching
-00021 // shift register. While it has been tested with a 74HC595N shift register
-00022 // it should also work with other latching shift registers such as the MC14094
-00023 // and the HEF4094
-00024 //
-00025 // This particular driver has been created as generic as possible to enable
-00026 // users to configure and connect their LCDs using just 3 digital IOs from the
-00027 // AVR or Arduino, and connect the LCD to the outputs of the shiftregister
-00028 // in any configuration. The library is configured by passing the IO pins
-00029 // that control the strobe, data and clock of the shift register and a map
-00030 // of how the shiftregister is connected to the LCD.
-00031 // 
-00032 //
-00033 //   +--------------------------------------------+
-00034 //   |                 MCU                        |
-00035 //   |   IO1           IO2           IO3          |
-00036 //   +----+-------------+-------------+-----------+
-00037 //        |             |             |
-00038 //        |             |             |
-00039 //   +----+-------------+-------------+-----------+
-00040 //   |    Strobe        Data          Clock       |
-00041 //   |          8-bit shift/latch register        | 74HC595N
-00042 //   |    Qa0  Qb1  Qc2  Qd3  Qe4  Qf5  Qg6  Qh7  |
-00043 //   +----+----+----+----+----+----+----+----+----+
-00044 //        |    |    |    |    |    |    |    
-00045 //        |11  |12  |13  |14  |6   |5   |4   (LCD pins)
-00046 //   +----+----+----+----+----+----+----+----+----+
-00047 //   |    DB4  DB5  DB6  DB7  E    Rw   RS        |
-00048 //   |                 LCD Module                 |
-00049 //
-00050 // NOTE: Rw is not used by the driver so it can be connected to GND.
-00051 //
-00052 // The functionality provided by this class and its base class is identical
-00053 // to the original functionality of the Arduino LiquidCrystal library.
-00054 //
-00055 //
-00056 // @author F. Malpartida - fmalpartida@gmail.com
-00057 // ---------------------------------------------------------------------------
-00058 #ifndef _LIQUIDCRYSTAL_SR3W_H_
-00059 #define _LIQUIDCRYSTAL_SR3W_H_
-00060 
-00061 #include <inttypes.h>
-00062 #include "LCD.h"
-00063 #include "FastIO.h"
-00064 
-00065 
-00066 class LiquidCrystal_SR3W : public LCD 
-00067 {
-00068 public:
-00069    
-00090    LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe);
-00091    // Constructor with backlight control
-00092    LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe, 
-00093                       uint8_t backlighPin, t_backlighPol pol);   
-00094    
-00112    LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe, 
-00113                       uint8_t En, uint8_t Rw, uint8_t Rs, 
-00114                       uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7 );
-00115    // Constructor with backlight control
-00116    LiquidCrystal_SR3W( uint8_t data, uint8_t clk, uint8_t strobe,
-00117                       uint8_t En, uint8_t Rw, uint8_t Rs, 
-00118                       uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7,
-00119                       uint8_t backlighPin, t_backlighPol pol);
-00120    
-00133    virtual void send(uint8_t value, uint8_t mode);
-00134    
-00143    void setBacklightPin ( uint8_t value, t_backlighPol pol );
-00144    
-00154    void setBacklight ( uint8_t value );
-00155    
-00156 private:
-00157    
-00163    int  init(uint8_t data, uint8_t clk, uint8_t strobe, 
-00164              uint8_t Rs, uint8_t Rw, uint8_t En,
-00165              uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7);
-00166    
-00175    void write4bits(uint8_t value, uint8_t mode);
-00176    
-00183    void loadSR(uint8_t value);
-00184    
-00185    
-00186    fio_bit      _strobe;           // shift register strobe pin
-00187    fio_register _strobe_reg;       // SR strobe pin MCU register
-00188    fio_bit      _data;             // shift register data pin
-00189    fio_register _data_reg;         // SR data pin MCU register
-00190    fio_bit      _clk;              // shift register clock pin
-00191    fio_register _clk_reg;          // SR clock pin MCU register
-00192    uint8_t      _En;               // LCD expander word for enable pin
-00193    uint8_t      _Rw;               // LCD expander word for R/W pin
-00194    uint8_t      _Rs;               // LCD expander word for Register Select pin
-00195    uint8_t      _data_pins[4];     // LCD data lines
-00196    uint8_t      _backlightPinMask; // Backlight IO pin mask
-00197    uint8_t      _backlightStsMask; // Backlight status mask
-00198    
-00199 };
-00200 
-00201 #endif
-00202 
-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r_8cpp.html b/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r_8cpp.html deleted file mode 100644 index b7f90b1..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r_8cpp.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - -LCD Library: LiquidCrystal_SR.cpp File Reference - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
-
-
LiquidCrystal_SR.cpp File Reference
-
-
-
#include <stdio.h>
-#include <string.h>
-#include <inttypes.h>
-#include <WProgram.h>
-#include "LiquidCrystal_SR.h"
-#include "FastIO.h"
-
-

Go to the source code of this file.

- -
-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r_8cpp_source.html b/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r_8cpp_source.html deleted file mode 100644 index bc429f0..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r_8cpp_source.html +++ /dev/null @@ -1,320 +0,0 @@ - - - - -LCD Library: LiquidCrystal_SR.cpp Source File - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
-
-
LiquidCrystal_SR.cpp
-
-
-Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
-00002 // Created by Francisco Malpartida on 20/08/11.
-00003 // Copyright 2011 - Under creative commons license 3.0:
-00004 //        Attribution-ShareAlike CC BY-SA
-00005 //
-00006 // This software is furnished "as is", without technical support, and with no 
-00007 // warranty, express or implied, as to its usefulness for any purpose.
-00008 //
-00009 // Thread Safe: No
-00010 // Extendable: Yes
-00011 //
-00012 // @file LiquidCrystal_SR.h
-00013 //  Connects an LCD using 2 or 3 pins from the Arduino, via an 8-bit 
-00014 // ShiftRegister (SR from now on).
-00015 // 
-00016 // @brief 
-00017 // This is a port of the ShiftRegLCD library from raron and ported to the
-00018 // LCD library.
-00019 //
-00020 // The functionality provided by this class and its base class is identical
-00021 // to the original functionality of the Arduino LiquidCrystal library and can
-00022 // be used as such.
-00023 //
-00024 // Modified to work serially with the shiftOut() function, an 8-bit
-00025 // unlatched, no-tristate, unidirectional SIPO (Serial-In-Parallel-Out)
-00026 // shift register (IE a very simple SR), and an LCD in 4-bit mode.
-00027 // Any such shift register should do (pref. 74LS family IC's for 2-wire).
-00028 // I used 74LS164, for the reason that's what I had at hand.
-00029 //
-00030 // Connection description:
-00031 //
-00032 // SR output:
-00033 // Bit  #0   - N/C - not connected, used to hold a zero
-00034 // Bit  #1   - N/C
-00035 // Bit  #2   - connects to RS (Register Select) on the LCD
-00036 // Bits #3-6 - connects to LCD data inputs D4 - D7.
-00037 // Bit  #7   - enables the LCD enable-puls (via the diode-resistor AND "gate")
-00038 //
-00039 // 2 or 3 Pins required from the Arduino for Data, Clock and (optional) Enable
-00040 // If not using Enable, the Data pin is used for the enable signal by defining
-00041 // the same pin for Enable as for Data. Data and Clock outputs/pins goes to
-00042 // the shiftregister.
-00043 // LCD RW-pin hardwired to LOW (only writing to LCD).
-00044 // Busy Flag (BF, data bit D7) is not read.
-00045 //
-00046 //  Original project homepage: http://code.google.com/p/arduinoshiftreglcd/
-00047 //
-00048 //
-00049 // History
-00050 // 2012.03.29  bperrybap - Added delays for faster fio shiftout (it got too fast)
-00051 //             AVR needed delay. cmd/write delays are based on CPU speed so it works on pic32.
-00052 //             Added code to support indicating two wire mode by using enable=data pin
-00053 //             (documentation indicated this as working)
-00054 //             Fixed incorrect use of 5x10 for default font - now matches original LQ library.
-00055 //             can now eliminate enable pin in constructor for two wire mode.
-00056 // 2012.01.16  Florian Fida - faster digitalWrite/shiftOut
-00057 // 2011.10.29  fmalpartida - adaption of the library to the LCD class hierarchy.
-00058 // 2011.07.02  Fixed a minor flaw in setCursor function. No functional change, 
-00059 //             just a bit more memory efficient.
-00060 //             Thanks to CapnBry (from google code and github) who noticed it.
-00061 //             URL to his version of shiftregLCD:
-00062 //             https://github.com/CapnBry/HeaterMeter/commit/c6beba1b46b092ab0b33bcbd0a30a201fd1f28c1
-00063 // 2009.07.30  raron - minor corrections to the comments.
-00064 //             Fixed timing to datasheet safe. Fixed keyword highlights.
-00065 // 2009.07.28  Mircho / raron - a new modification to the schematics, and a
-00066 //             more streamlined interface
-00067 // 2009.07.27  Thanks to an excellent suggestion from mircho at the Arduino
-00068 //             playgrond forum, the number of wires now required is only two!
-00069 // 2009.07.25  raron - Fixed comments. I really messed up the comments before 
-00070 //             posting this, so I had to fix it.
-00071 //             Renamed a function, but no improvements or functional changes.
-00072 // 2009.07.23  Incorporated some proper initialization routines
-00073 //             inspired (lets say copy-paste-tweaked) from LiquidCrystal
-00074 //             library improvements from LadyAda.
-00075 // 2009.05.23  raron - first version, but based mostly (as in almost verbatim)
-00076 //             on the "official" LiquidCrystal library.
-00077 //
-00078 //
-00079 // @author F. Malpartida - fmalpartida@gmail.com
-00080 // ---------------------------------------------------------------------------
-00081 #include <stdio.h>
-00082 #include <string.h>
-00083 #include <inttypes.h>
-00084 
-00085 #if (ARDUINO <  100)
-00086 #include <WProgram.h>
-00087 #else
-00088 #include <Arduino.h>
-00089 #endif
-00090 #include "LiquidCrystal_SR.h"
-00091 
-00092 #include "FastIO.h"
-00093 
-00094 
-00095 // CONSTRUCTORS
-00096 // ---------------------------------------------------------------------------
-00097 // Assuming 1 line 8 pixel high font
-00098 LiquidCrystal_SR::LiquidCrystal_SR (uint8_t srdata, uint8_t srclock, 
-00099                                     uint8_t enable ) 
-00100 {
-00101         init ( srdata, srclock, enable, 1, 0 );
-00102 }
-00103 
-00104 
-00105 // PRIVATE METHODS
-00106 // ---------------------------------------------------------------------------
-00107 
-00108 //
-00109 // init
-00110 void LiquidCrystal_SR::init(uint8_t srdata, uint8_t srclock, uint8_t enable, 
-00111                             uint8_t lines, uint8_t font)
-00112 {
-00113    // Initialise private variables
-00114    _two_wire = 0;
-00115    
-00116    _srDataRegister = fio_pinToOutputRegister(srdata);
-00117    _srDataBit = fio_pinToBit(srdata);
-00118    _srClockRegister = fio_pinToOutputRegister(srclock);
-00119    _srClockBit = fio_pinToBit(srclock);
-00120    
-00121    if ((enable == TWO_WIRE) || (enable == srdata))
-00122    {
-00123       _two_wire = 1;
-00124       _srEnableRegister = _srDataRegister;
-00125       _srEnableBit = _srDataBit;
-00126    }
-00127    else
-00128    {
-00129       _srEnableRegister = fio_pinToOutputRegister(enable);
-00130       _srEnableBit = fio_pinToBit(enable);
-00131    }
-00132    
-00133    // Configure control pins as outputs
-00134    // ------------------------------------------------------------------------
-00135    
-00136    _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS;
-00137 }
-00138 
-00139 //
-00140 // shiftIt
-00141 void LiquidCrystal_SR::shiftIt(uint8_t val)
-00142 {
-00143    if (_two_wire)
-00144    {
-00145       // Clear to get Enable LOW
-00146       fio_shiftOut(_srDataRegister, _srDataBit, _srClockRegister, _srClockBit);
-00147    }
-00148    fio_shiftOut(_srDataRegister, _srDataBit, _srClockRegister, _srClockBit, val, MSBFIRST);
-00149    
-00150    // LCD ENABLE PULSE
-00151    //
-00152    // While this library is written with a shift register without an output
-00153    // latch in mind, it can work in 3-wire mode with a shiftregister with a
-00154    // latch. The shiftregister latch pin (STR, RCL or similar) is then
-00155    // connected to the LCD enable pin. The LCD is (very likely) slower
-00156    // to read the Enable pulse, and then reads the new contents of the SR.
-00157    ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
-00158    {
-00159       fio_digitalWrite_HIGH(_srEnableRegister, _srEnableBit);
-00160       delayMicroseconds (1);         // enable pulse must be >450ns               
-00161       fio_digitalWrite_SWITCHTO(_srEnableRegister, _srEnableBit, LOW);
-00162    } // end critical section
-00163 }
-00164 
-00165 // PUBLIC METHODS
-00166 // ---------------------------------------------------------------------------
-00167 
-00168 
-00169 /************ low level data pushing commands **********/
-00170 //
-00171 // send
-00172 void LiquidCrystal_SR::send(uint8_t value, uint8_t mode)
-00173 {
-00174    // Divide byte in two nibbles include the RS signal
-00175    // and format it for shiftregister output wiring to the LCD
-00176    // We are only interested in my COMMAND or DATA for myMode
-00177    uint8_t myMode = ( mode == DATA ) ? SR_RS_BIT : 0; // RS bit; LOW: command.  HIGH: character.
-00178    
-00179    if ( mode != FOUR_BITS )
-00180    {
-00181       shiftIt(myMode | SR_EN_BIT | ((value >> 1) & 0x78)); // upper nibble
-00182    }
-00183 
-00184    shiftIt(myMode | SR_EN_BIT | ((value << 3) & 0x78)); // lower nibble
-00185    /*
-00186     * Add some delay since this code is so fast it needs some added delay
-00187     * even on AVRs because the shiftout is shorter than the LCD command execution time.
-00188     */
-00189 #if (F_CPU <= 16000000)
-00190    if(_two_wire)
-00191         delayMicroseconds ( 10 );
-00192    else
-00193         delayMicroseconds ( 17 ); // 3 wire mode is faster so it must delay longer
-00194 #else
-00195    delayMicroseconds ( 37 );      // commands & data writes need > 37us to complete
-00196 #endif
-00197 
-00198 }
-00199 
-00200 //
-00201 // setBacklightPin
-00202 void LiquidCrystal_SR::setBacklightPin ( uint8_t pin, t_backlighPol pol )
-00203 { }
-00204 
-00205 //
-00206 // setBacklight
-00207 void LiquidCrystal_SR::setBacklight ( uint8_t mode ) 
-00208 { }
-00209 
-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r_8h.html b/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r_8h.html deleted file mode 100644 index 39687a2..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r_8h.html +++ /dev/null @@ -1,175 +0,0 @@ - - - - -LCD Library: LiquidCrystal_SR.h File Reference - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
- -
-
LiquidCrystal_SR.h File Reference
-
-
-
#include <inttypes.h>
-#include "LCD.h"
-#include "FastIO.h"
-
-

Go to the source code of this file.

- - - - - - - -

-Classes

class  LiquidCrystal_SR

-Defines

#define SR_EN_BIT   0x80
#define SR_RS_BIT   0x04
#define TWO_WIRE   204
-

Define Documentation

- -
-
- - - - -
#define SR_EN_BIT   0x80
-
-
- -

Definition at line 92 of file LiquidCrystal_SR.h.

- -
-
- -
-
- - - - -
#define SR_RS_BIT   0x04
-
-
- -

Definition at line 91 of file LiquidCrystal_SR.h.

- -
-
- -
-
- - - - -
#define TWO_WIRE   204
-
-
- -

Definition at line 90 of file LiquidCrystal_SR.h.

- -
-
-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r_8h_source.html b/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r_8h_source.html deleted file mode 100644 index e794b4d..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r_8h_source.html +++ /dev/null @@ -1,237 +0,0 @@ - - - - -LCD Library: LiquidCrystal_SR.h Source File - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
-
-
LiquidCrystal_SR.h
-
-
-Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
-00002 // Created by Francisco Malpartida on 20/08/11.
-00003 // Copyright 2011 - Under creative commons license 3.0:
-00004 //        Attribution-ShareAlike CC BY-SA
-00005 //
-00006 // This software is furnished "as is", without technical support, and with no 
-00007 // warranty, express or implied, as to its usefulness for any purpose.
-00008 //
-00009 // Thread Safe: No
-00010 // Extendable: Yes
-00011 //
-00012 // @file LiquidCrystal_SR.h
-00013 //  Connects an LCD using 2 or 3 pins from the Arduino, via an 8-bit 
-00014 // ShiftRegister (SR from now on).
-00015 // 
-00016 // @brief 
-00017 // This is a port of the ShiftRegLCD library from raron and ported to the
-00018 // LCD library.
-00019 //
-00020 // The functionality provided by this class and its base class is identical
-00021 // to the original functionality of the Arduino LiquidCrystal library and can
-00022 // be used as such.
-00023 //
-00024 // Modified to work serially with the shiftOut() function, an 8-bit
-00025 // unlatched, no-tristate, unidirectional SIPO (Serial-In-Parallel-Out)
-00026 // shift register (IE a very simple SR), and an LCD in 4-bit mode.
-00027 // Any such shift register should do (pref. 74LS family IC's for 2-wire).
-00028 // I used 74LS164, for the reason that's what I had at hand.
-00029 //
-00030 // Connection description:
-00031 //
-00032 // SR output:
-00033 // Bit  #0   - N/C - not connected, used to hold a zero
-00034 // Bit  #1   - N/C
-00035 // Bit  #2   - connects to RS (Register Select) on the LCD
-00036 // Bits #3-6 - connects to LCD data inputs D4 - D7.
-00037 // Bit  #7   - enables the LCD enable-puls (via the diode-resistor AND "gate")
-00038 //
-00039 // 2 or 3 Pins required from the Arduino for Data, Clock and (optional) Enable
-00040 // If not using Enable, the Data pin will be used for the enable signal.
-00041 // 2 wire mode can be indicated by:
-00042 // - ommitting the enable pin in constructor
-00043 // - defining the same pin for Enable as for Data in constructor
-00044 // - by using the token TWO_WIRE for the enable pin.
-00045 //
-00046 // Data and Clock outputs/pins goes to the shiftregister.
-00047 // LCD RW-pin hardwired to LOW (only writing to LCD).
-00048 // Busy Flag (BF, data bit D7) is not read.
-00049 //
-00050 //  Original project homepage: http://code.google.com/p/arduinoshiftreglcd/
-00051 //
-00052 //
-00053 // History
-00054 // 2012.03.29  bperrybap - can now eliminate enable pin in constructor for two wire mode.
-00055 // 2011.10.29  fmalpartida - adaption of the library to the LCD class hierarchy.
-00056 // 2011.07.02  Fixed a minor flaw in setCursor function. No functional change, 
-00057 //             just a bit more memory efficient.
-00058 //             Thanks to CapnBry (from google code and github) who noticed it.
-00059 //             URL to his version of shiftregLCD:
-00060 //             https://github.com/CapnBry/HeaterMeter/commit/c6beba1b46b092ab0b33bcbd0a30a201fd1f28c1
-00061 // 2009.07.30  raron - minor corrections to the comments.
-00062 //             Fixed timing to datasheet safe. Fixed keyword highlights.
-00063 // 2009.07.28  Mircho / raron - a new modification to the schematics, and a
-00064 //             more streamlined interface
-00065 // 2009.07.27  Thanks to an excellent suggestion from mircho at the Arduiono 
-00066 //             playgrond forum, the number of wires now required is only two!
-00067 // 2009.07.25  raron - Fixed comments. I really messed up the comments before 
-00068 //             posting this, so I had to fix it.
-00069 //             Renamed a function, but no improvements or functional changes.
-00070 // 2009.07.23  Incorporated some proper initialization routines
-00071 //             inspired (lets say copy-paste-tweaked) from LiquidCrystal
-00072 //             library improvements from LadyAda.
-00073 // 2009.05.23  raron - first version, but based mostly (as in almost verbatim)
-00074 //             on the "official" LiquidCrystal library.
-00075 //
-00076 //
-00077 //
-00078 // @author F. Malpartida - fmalpartida@gmail.com
-00079 // ---------------------------------------------------------------------------
-00080 #ifndef _LIQUIDCRYSTAL_SR_
-00081 #define _LIQUIDCRYSTAL_SR_
-00082 
-00083 #include <inttypes.h>
-00084 #include "LCD.h"
-00085 #include "FastIO.h"
-00086 
-00087 
-00088 // two-wire indicator constant
-00089 // ---------------------------------------------------------------------------
-00090 #define TWO_WIRE  204
-00091 #define SR_RS_BIT 0x04
-00092 #define SR_EN_BIT 0x80
-00093 
-00094 class LiquidCrystal_SR : public LCD
-00095 {
-00096 public:
-00108    LiquidCrystal_SR ( uint8_t srdata, uint8_t srclock, uint8_t enable=TWO_WIRE );
-00109    
-00122    virtual void send(uint8_t value, uint8_t mode);
-00123    
-00124    
-00134    void setBacklightPin ( uint8_t pin, t_backlighPol pol );
-00135    
-00145    void setBacklight ( uint8_t mode );
-00146    
-00147 private:
-00148    
-00154    void init ( uint8_t srdata, uint8_t srclock, uint8_t enable, uint8_t lines, 
-00155               uint8_t font );
-00156    
-00161    void shiftIt (uint8_t val);
-00162    
-00163    uint8_t _enable_pin;  // Enable Pin
-00164    uint8_t _two_wire;    // two wire mode
-00165    
-00166    fio_register _srDataRegister; // Serial Data pin
-00167    fio_bit _srDataBit;
-00168    fio_register _srClockRegister; // Clock Pin
-00169    fio_bit _srClockBit;
-00170    fio_register _srEnableRegister; // Enable Pin
-00171    fio_bit _srEnableBit;
-00172    
-00173 };
-00174 
-00175 #endif
-00176 
-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r___l_c_d3_8cpp.html b/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r___l_c_d3_8cpp.html deleted file mode 100644 index 8049852..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r___l_c_d3_8cpp.html +++ /dev/null @@ -1,147 +0,0 @@ - - - - -LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR_LCD3.cpp File Reference - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.2.1
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR_LCD3.cpp File Reference
-
-
-
#include <stdio.h>
-#include <string.h>
-#include <inttypes.h>
-#include <WProgram.h>
-#include "FastIO.h"
-#include "LiquidCrystal_SR_LCD3.h"
-
-

Go to the source code of this file.

- - - - - -

-Defines

#define SR_EN_BIT   B00010000
#define SR_RS_BIT   B01000000
#define SR_RW_BIT   B00100000
-

Define Documentation

- -
-
- - - - -
#define SR_EN_BIT   B00010000
-
-
- -

Definition at line 167 of file LiquidCrystal_SR_LCD3.cpp.

- -
-
- -
-
- - - - -
#define SR_RS_BIT   B01000000
-
-
- -

Definition at line 169 of file LiquidCrystal_SR_LCD3.cpp.

- -
-
- -
-
- - - - -
#define SR_RW_BIT   B00100000
-
-
- -

Definition at line 168 of file LiquidCrystal_SR_LCD3.cpp.

- -
-
-
- - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r___l_c_d3_8cpp_source.html b/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r___l_c_d3_8cpp_source.html deleted file mode 100644 index 310997e..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r___l_c_d3_8cpp_source.html +++ /dev/null @@ -1,295 +0,0 @@ - - - - -LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR_LCD3.cpp Source File - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.2.1
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
-
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR_LCD3.cpp
-
-
-Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
-00002 // Originally Created by Francisco Malpartida on 2011/08/20.
-00003 // Copyright 2011 - Under creative commons license 3.0:
-00004 //        Attribution-ShareAlike CC BY-SA
-00005 //
-00006 // This software is furnished "as is", without technical support, and with no 
-00007 // warranty, express or implied, as to its usefulness for any purpose.
-00008 //
-00009 // 2012/01/21 - Marc MERLIN
-00010 // This library, LiquidCrystal_SR_LCD3, was forked off LiquidCrystal_SR which
-00011 // used a different wiring than the Pebble and Pebblev2 (just released by
-00012 // freetronics in the arduino miniconf as part of linux.conf.au 2012) and
-00013 // therefore this code organizes the output data differently.
-00014 //
-00015 // Upstream source for this module is
-00016 // https://github.com/marcmerlin/NewLiquidCrystal
-00017 //
-00018 // Thread Safe: No
-00019 // Extendable: Yes
-00020 //
-00021 // @file LiquidCrystal_SR_LCD3.h
-00022 //
-00023 //  Connects an LCD using 3 pins from the Arduino, via an 8-bit 
-00024 //  ShiftRegister (SR from now on).
-00025 //  The original port source for this module is https://github.com/marcmerlin/NewLiquidCrystal
-00026 //  The 'FastIO' merge has madethis code 4 times faster.
-00027 // 
-00028 // @brief 
-00029 // This is a port of the ShiftRegLCD library from raron and ported to the
-00030 // LCD library.
-00031 //
-00032 // The functionality provided by this class and its base class is identical
-00033 // to the original functionality of the Arduino LiquidCrystal library and can
-00034 // be used as such.
-00035 //
-00036 // Pinout for this code is used by derivatives of the original LCD3Wire page:
-00037 // http://www.arduino.cc/playground/Code/LCD3wires
-00038 //
-00039 // This includes the LCA (linux.conf.au) Arduino Miniconf Pebble: 
-00040 // http://shieldlist.org/luke-weston/pebble
-00041 // https://github.com/lukeweston/Pebble
-00042 //
-00043 // It also includes the Pebble v2:
-00044 // http://www.arduinominiconf.org/index.php/Pebble_V2.0_Instructions
-00045 // http://www.freetronics.com/pages/pebble-v2
-00046 // https://github.com/lukeweston/pebble20/blob/master/README.md
-00047 // https://github.com/lukeweston/pebble20/blob/master/pebble-sch.pdf
-00048 //
-00049 // Shiftregister connection description:
-00050 // MC14094 input:  Arduino digital pin 2=Clock, pin 3=Data, pin 4=Strobe
-00051 // MC14094 output: Q8=DB4, Q7=DB5, Q6=DB6, Q5=DB7, Q4=E, Q3=RW, Q2=RS, Q1=None
-00052 //
-00053 //   +--------------------------------------------+
-00054 //   |    Arduino (ATMega 168 or 328)             |
-00055 //   |    D02           D03           D04         |
-00056 //   +----+-------------+-------------+-----------+
-00057 //        |4            |5            |6
-00058 //        |1            |2            |3
-00059 //   +----+-------------+-------------+-----------+
-00060 //   |    Strobe        Data          Clock       |
-00061 //   |    MC14094 8-bit shift/latch register      |
-00062 //   |    Q8   Q7   Q6   Q5   Q4   Q3   Q2   Q1   |
-00063 //   +----+----+----+----+----+----+----+----+----+
-00064 //        |11  |12  |13  |14  |7   |6   |5   |4
-00065 //        |11  |12  |13  |14  |6   |5   |4
-00066 //   +----+----+----+----+----+----+----+---------+
-00067 //   |    DB4  DB5  DB6  DB7  E    RW   RS        |
-00068 //   |               LCD KS0066                   |
-00069 //   +--------------------------------------------+
-00070 //
-00071 // 3 Pins required from the Arduino for Data, Clock, and Enable/Strobe.
-00072 //
-00073 // This code was inspired from LiquidCrystal_SR from
-00074 // http://code.google.com/p/arduinoshiftreglcd/
-00075 // but was written for implementing LiquidCrystal support for the Pebble
-00076 // and Pebblev2 (see below).
-00077 // The Pebbles's LCD and shift register wiring were inspired from this
-00078 // original page:
-00079 // http://www.arduino.cc/playground/Code/LCD3wires
-00080 // 
-00081 // Pebbles and the LCD3Wires design are compatible hardware-wise, but
-00082 // the LCD3Wire code does not work with arduino 1.0 anymore and is generally
-00083 // quite limited in functionality compared to this framework that provides the
-00084 // entire LiquidDisplay functionality.
-00085 // Why not just use the LiquidCrystal_SR pinout?
-00086 // - LCD3Wire was first and therefore have hardware that was designed with 
-00087 //   incompatible (IMO better if you don't mind 3 wires) pinout.
-00088 // - The pinout used here is same saner (the 4 bits for the LCD are all in one 
-00089 //   nibble of the shift register, not spread across 2 like in the
-00090 //   LiquidCrystal_SR pinout)
-00091 //
-00092 // Note however that LiquidCrystal_SR while a bit more complex wiring and code
-00093 // wise, supports non latching shift registers and it a few percent faster than
-00094 // this code since it can address the LCD enable pin without having to send 
-00095 // a pulse through the shift register like the LCD3Wires setup requires.
-00096 //  
-00097 // This code makes sure to properly follow the specifications when talking
-00098 // to the LCD while using minimal delays (it's faster than the LCD3wire and aiko
-00099 // pebble code).
-00100 //
-00101 // @author Marc MERLIN - marc_soft<at>merlins.org.
-00102 // ---------------------------------------------------------------------------
-00103 #include <stdio.h>
-00104 #include <string.h>
-00105 #include <inttypes.h>
-00106 
-00107 #if (ARDUINO <  100)
-00108 #include <WProgram.h>
-00109 #else
-00110 #include <Arduino.h>
-00111 #endif
-00112 #include "FastIO.h"
-00113 #include "LiquidCrystal_SR_LCD3.h"
-00114 
-00115 
-00116 // STATIC helper functions
-00117 // ---------------------------------------------------------------------------
-00118 
-00119 
-00120 // CONSTRUCTORS
-00121 // ---------------------------------------------------------------------------
-00122 // Assuming 1 line 8 pixel high font
-00123 LiquidCrystal_SR_LCD3::LiquidCrystal_SR_LCD3 ( uint8_t srdata, uint8_t srclock, 
-00124                                               uint8_t strobe )
-00125 {
-00126         init ( srdata, srclock, strobe, 1, 0 );
-00127 }
-00128 
-00129 
-00130 // PRIVATE METHODS
-00131 // ---------------------------------------------------------------------------
-00132 
-00133 //
-00134 // init
-00135 void LiquidCrystal_SR_LCD3::init( uint8_t srdata, uint8_t srclock, uint8_t strobe, 
-00136                                  uint8_t lines, uint8_t font )
-00137 {
-00138         // Initialise private variables
-00139         // translate all pins to bits and registers
-00140         // pinMode to OUTPUT, Output LOW
-00141    
-00142    _srdata_bit = fio_pinToBit(srdata);
-00143    _srdata_register = fio_pinToOutputRegister(srdata);
-00144    _srclock_bit = fio_pinToBit(srclock);
-00145    _srclock_register = fio_pinToOutputRegister(srclock);
-00146    _strobe_bit = fio_pinToBit(strobe);
-00147    _strobe_register = fio_pinToOutputRegister(strobe);
-00148    
-00149    // Little trick to force a pulse of the LCD enable bit and make sure it is
-00150    // low before we start further writes since this is assumed.
-00151    
-00152    write4bits(0);
-00153    
-00154    _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x10DOTS;
-00155 }
-00156 
-00157 // PUBLIC METHODS
-00158 // ---------------------------------------------------------------------------
-00159 
-00160 
-00161 /************ low level data pushing commands **********/
-00162 
-00163 // Code below was borrowed from LCD3Wire from
-00164 // http://www.arduino.cc/playground/Code/LCD3wires
-00165 
-00166 // bitmasks for control bits on shift register
-00167 #define SR_EN_BIT B00010000   // LCD Data enable bit.
-00168 #define SR_RW_BIT B00100000   // RW can be pinned low since we only send
-00169 #define SR_RS_BIT B01000000   // LOW: command. HIGH: character.
-00170 
-00171 void LiquidCrystal_SR_LCD3::send(uint8_t value, uint8_t mode) 
-00172 {
-00173    uint8_t nibble;
-00174    
-00175    mode = mode ? SR_RS_BIT : 0; // RS bit; LOW: command.  HIGH: character.
-00176    
-00177    nibble = value >> 4; // Get high nibble.
-00178    write4bits(nibble | mode);
-00179    
-00180    //delay(1); // This was in the LCD3 code but does not seem needed -- merlin
-00181    
-00182    nibble = value & 15; // Get low nibble
-00183    write4bits(nibble | mode);
-00184 }
-00185 
-00186 void LiquidCrystal_SR_LCD3::write4bits(uint8_t nibble) 
-00187 {
-00188    nibble &= ~SR_RW_BIT; // set RW LOW (we do this always since we only write).
-00189    
-00190    // Send a High transition to display the data that was pushed
-00191    nibble |=  SR_EN_BIT; // LCD Data Enable HIGH
-00192    _pushOut(nibble);
-00193    nibble &= ~SR_EN_BIT; // LCD Data Enable LOW
-00194    _pushOut(nibble); 
-00195 }
-00196 
-00197 // push byte to shift register and on to LCD
-00198 void LiquidCrystal_SR_LCD3::_pushOut(uint8_t nibble) 
-00199 {
-00200    // Make data available for pushing to the LCD.
-00201    fio_shiftOut(_srdata_register, _srdata_bit, _srclock_register, _srclock_bit, nibble, LSBFIRST);
-00202    
-00203    // Make new data active.
-00204    ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
-00205    {
-00206       fio_digitalWrite_HIGH(_strobe_register, _strobe_bit);
-00207       waitUsec( 1 ); // strobe pulse must be >450ns (old code had 10ms)
-00208       fio_digitalWrite_SWITCHTO(_strobe_register, _strobe_bit,LOW);
-00209    }
-00210    waitUsec( 40 ); // commands need > 37us to settle
-00211 }
-
-
- - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r___l_c_d3_8h.html b/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r___l_c_d3_8h.html deleted file mode 100644 index 1b75e74..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r___l_c_d3_8h.html +++ /dev/null @@ -1,95 +0,0 @@ - - - - -LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR_LCD3.h File Reference - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.2.1
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR_LCD3.h File Reference
-
-
-
#include <inttypes.h>
-#include "LCD.h"
-
-

Go to the source code of this file.

- - - -

-Classes

class  LiquidCrystal_SR_LCD3
-
- - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r___l_c_d3_8h_source.html b/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r___l_c_d3_8h_source.html deleted file mode 100644 index 9888666..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/_liquid_crystal___s_r___l_c_d3_8h_source.html +++ /dev/null @@ -1,129 +0,0 @@ - - - - -LCD Library: /Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR_LCD3.h Source File - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.2.1
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
-
/Users/fmalpartida/development/ardWorkspace/LiquidCrystal_I2C/LiquiCrystal_I2C/LiquidCrystal_SR_LCD3.h
-
-
-Go to the documentation of this file.
00001 // ---------------------------------------------------------------------------
-00002 // Created by Francisco Malpartida on 20/08/11.
-00003 // Copyright 2011 - Under creative commons license 3.0:
-00004 //        Attribution-ShareAlike CC BY-SA
-00005 //
-00006 // This module is a port by Marc MERLIN <marc_soft<at>merlins.org>
-00007 // See .cpp file for hardware details.
-00008 // ---------------------------------------------------------------------------
-00009 #ifndef _LIQUIDCRYSTAL_SR_LCD3_
-00010 #define _LIQUIDCRYSTAL_SR_LCD3_
-00011 
-00012 #include <inttypes.h>
-00013 #include "LCD.h"
-00014 
-00015 
-00016 class LiquidCrystal_SR_LCD3 : public LCD
-00017 {
-00018 public:
-00030    LiquidCrystal_SR_LCD3 ( uint8_t srdata, uint8_t srclock, uint8_t enable );
-00031    
-00044    virtual void send(uint8_t value, uint8_t mode);
-00045    
-00046    
-00047 private:
-00048    
-00054    void init ( uint8_t srdata, uint8_t srclock, uint8_t enable, uint8_t lines, 
-00055               uint8_t font );
-00061    void write4bits ( uint8_t );
-00062    void _pushOut ( uint8_t );
-00063    
-00064    // Serial Data pin
-00065    fio_bit _srdata_bit;
-00066    fio_register _srdata_register;
-00067    
-00068    // Clock Pin
-00069    fio_bit _srclock_bit;
-00070    fio_register _srclock_register;
-00071    
-00072    // Enable Pin
-00073    fio_bit _strobe_bit;
-00074    fio_register _strobe_register;
-00075 };
-00076 
-00077 #endif
-00078 
-
-
- - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/annotated.html b/libraries/LiquidCrystal/utility/docs/html/annotated.html deleted file mode 100644 index 0e3eae8..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/annotated.html +++ /dev/null @@ -1,123 +0,0 @@ - - - - -LCD Library: Class List - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
-
-
Class List
-
-
-
Here are the classes, structs, unions and interfaces with brief descriptions:
- - - - - - - - - -
I2CIO
LCD
LiquidCrystal
LiquidCrystal_I2C
LiquidCrystal_I2C_ByVac
LiquidCrystal_SR
LiquidCrystal_SR1W
LiquidCrystal_SR2W
LiquidCrystal_SR3W
-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/bc_s.png b/libraries/LiquidCrystal/utility/docs/html/bc_s.png deleted file mode 100644 index e401862..0000000 Binary files a/libraries/LiquidCrystal/utility/docs/html/bc_s.png and /dev/null differ diff --git a/libraries/LiquidCrystal/utility/docs/html/class_i2_c_i_o-members.html b/libraries/LiquidCrystal/utility/docs/html/class_i2_c_i_o-members.html deleted file mode 100644 index e9cd9c6..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/class_i2_c_i_o-members.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - -LCD Library: Member List - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
-
-
I2CIO Member List
-
-
-This is the complete list of members for I2CIO, including all inherited members. - - - - - - - - -
begin(uint8_t i2cAddr)I2CIO
digitalRead(uint8_t pin)I2CIO
digitalWrite(uint8_t pin, uint8_t level)I2CIO
I2CIO()I2CIO
pinMode(uint8_t pin, uint8_t dir)I2CIO
portMode(uint8_t dir)I2CIO
read(void)I2CIO
write(uint8_t value)I2CIO
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/class_i2_c_i_o.html b/libraries/LiquidCrystal/utility/docs/html/class_i2_c_i_o.html deleted file mode 100644 index b556e37..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/class_i2_c_i_o.html +++ /dev/null @@ -1,366 +0,0 @@ - - - - -LCD Library: I2CIO Class Reference - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
- -
-
I2CIO Class Reference
-
-
- -

#include <I2CIO.h>

- -

List of all members.

- - - - - - - - - - -

-Public Member Functions

int begin (uint8_t i2cAddr)
uint8_t digitalRead (uint8_t pin)
int digitalWrite (uint8_t pin, uint8_t level)
 I2CIO ()
void pinMode (uint8_t pin, uint8_t dir)
void portMode (uint8_t dir)
uint8_t read (void)
int write (uint8_t value)
-

Detailed Description

-
-

Definition at line 41 of file I2CIO.h.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - -
I2CIO::I2CIO ()
-
-
-

Constructor method Class constructor constructor.

- -

Definition at line 44 of file I2CIO.cpp.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - -
int I2CIO::begin (uint8_t i2cAddr)
-
-
-

Initializes the device. This method initializes the device allocating an I2C address. This method is the first method that should be call prior to calling any other method form this class. On initialization all pins are configured as INPUT on the device.

-
Parameters:
- - -
i2cAddr,:I2C Address where the device is located.
-
-
-
Returns:
1 if the device was initialized correctly, 0 otherwise
- -

Definition at line 57 of file I2CIO.cpp.

- -
-
- -
-
- - - - - - - - -
uint8_t I2CIO::digitalRead (uint8_t pin)
-
-
-

Read a pin from the device. Reads a particular pin from the device. To read a particular pin it has to be configured as INPUT. During initialization all pins are configured as INPUTs by default. Please refer to pinMode or portMode.

-
Parameters:
- - -
pin[in]Pin from the port to read its status. Range (0..7)
-
-
-
Returns:
Returns the pin status (HIGH, LOW) if the pin is configured as an output, reading its value will always return LOW regardless of its real state.
- -

Definition at line 153 of file I2CIO.cpp.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
int I2CIO::digitalWrite (uint8_t pin,
uint8_t level 
)
-
-
-

Writes a digital level to a particular pin. Write a level to the indicated pin of the device. For this method to have effect, the pin has to be configured as OUTPUT using the pinMode or portMode methods.

-
Parameters:
- - -
pin[in]device pin to change level. Range (0..7). level[in] logic level to set the pin at (HIGH, LOW).
-
-
-
Returns:
1 on success, 0 otherwise.
- -

Definition at line 170 of file I2CIO.cpp.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void I2CIO::pinMode (uint8_t pin,
uint8_t dir 
)
-
-
-

Sets the mode of a particular pin. Sets the mode of a particular pin to INPUT, OUTPUT. digitalWrite has no effect on pins which are not declared as output.

-
Parameters:
- - - -
pin[in]Pin from the I2C IO expander to be configured. Range 0..7
dir[in]Pin direction (INPUT, OUTPUT).
-
-
- -

Definition at line 76 of file I2CIO.cpp.

- -
-
- -
-
- - - - - - - - -
void I2CIO::portMode (uint8_t dir)
-
-
-

Sets all the pins of the device in a particular direction. This method sets all the pins of the device in a particular direction. This method is useful to set all the pins of the device to be either inputs or outputs.

-
Parameters:
- - -
dir[in]Direction of all the pins of the device (INPUT, OUTPUT).
-
-
- -

Definition at line 93 of file I2CIO.cpp.

- -
-
- -
-
- - - - - - - - -
uint8_t I2CIO::read (void )
-
-
-

Reads all the pins of the device that are configured as INPUT. Reads from the device the status of the pins that are configured as INPUT. During initialization all pins are configured as INPUTs by default. Please refer to pinMode or portMode.

-
Parameters:
- - -
none
-
-
- -

Definition at line 111 of file I2CIO.cpp.

- -
-
- -
-
- - - - - - - - -
int I2CIO::write (uint8_t value)
-
-
-

Write a value to the device. Writes to a set of pins in the device. The value is the binary representation of all the pins in device. The value written is masked with the configuration of the direction of the pins; to change the state of a particular pin with this method, such pin has to be configured as OUTPUT using the portMode or pinMode methods. If no pins have been configured as OUTPUTs this method will have no effect.

-
Parameters:
- - -
value[in]value to be written to the device.
-
-
-
Returns:
1 on success, 0 otherwise
- -

Definition at line 130 of file I2CIO.cpp.

- -
-
-
The documentation for this class was generated from the following files: -
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/class_l_c_d-members.html b/libraries/LiquidCrystal/utility/docs/html/class_l_c_d-members.html deleted file mode 100644 index 53cf540..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/class_l_c_d-members.html +++ /dev/null @@ -1,146 +0,0 @@ - - - - -LCD Library: Member List - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
-
-
LCD Member List
-
-
-This is the complete list of members for LCD, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_colsLCD [protected]
_displaycontrolLCD [protected]
_displayfunctionLCD [protected]
_displaymodeLCD [protected]
_numlinesLCD [protected]
_polarityLCD [protected]
autoscroll()LCD
backlight(void)LCD
begin(uint8_t cols, uint8_t rows, uint8_t charsize=LCD_5x8DOTS)LCD [virtual]
blink()LCD
clear()LCD
createChar(uint8_t location, uint8_t charmap[])LCD
cursor()LCD
display()LCD
home()LCD
LCD()LCD
leftToRight()LCD
moveCursorLeft()LCD
moveCursorRight()LCD
noAutoscroll()LCD
noBacklight(void)LCD
noBlink()LCD
noCursor()LCD
noDisplay()LCD
off(void)LCD
on(void)LCD
rightToLeft()LCD
scrollDisplayLeft()LCD
scrollDisplayRight()LCD
setBacklight(uint8_t value)LCD [inline, virtual]
setBacklightPin(uint8_t value, t_backlighPol pol)LCD [inline, virtual]
setCursor(uint8_t col, uint8_t row)LCD
write(uint8_t value)LCD [virtual]
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/class_l_c_d.html b/libraries/LiquidCrystal/utility/docs/html/class_l_c_d.html deleted file mode 100644 index ee135e2..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/class_l_c_d.html +++ /dev/null @@ -1,1011 +0,0 @@ - - - - -LCD Library: LCD Class Reference - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
- -
-
LCD Class Reference
-
-
- -

#include <LCD.h>

-
-Inheritance diagram for LCD:
-
-
- - -LiquidCrystal -LiquidCrystal_I2C -LiquidCrystal_I2C_ByVac -LiquidCrystal_SR -LiquidCrystal_SR1W -LiquidCrystal_SR2W -LiquidCrystal_SR3W - -
- -

List of all members.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-Public Member Functions

void autoscroll ()
void backlight (void)
virtual void begin (uint8_t cols, uint8_t rows, uint8_t charsize=LCD_5x8DOTS)
void blink ()
void clear ()
void createChar (uint8_t location, uint8_t charmap[])
void cursor ()
void display ()
void home ()
 LCD ()
void leftToRight ()
void moveCursorLeft ()
void moveCursorRight ()
void noAutoscroll ()
void noBacklight (void)
void noBlink ()
void noCursor ()
void noDisplay ()
void off (void)
void on (void)
void rightToLeft ()
void scrollDisplayLeft ()
void scrollDisplayRight ()
virtual void setBacklight (uint8_t value)
virtual void setBacklightPin (uint8_t value, t_backlighPol pol)
void setCursor (uint8_t col, uint8_t row)
virtual void write (uint8_t value)

-Protected Attributes

uint8_t _cols
uint8_t _displaycontrol
uint8_t _displayfunction
uint8_t _displaymode
uint8_t _numlines
t_backlighPol _polarity
-

Detailed Description

-
-

Definition at line 173 of file LCD.h.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - -
LCD::LCD ()
-
-
-

LiquidCrystal abstract constructor. LiquidCrystal class abstract constructor needed to create the base abstract class.

- -

Definition at line 50 of file LCD.cpp.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - -
void LCD::autoscroll (void )
-
-
-

Turns on automatic scrolling of the LCD. Turns on automatic scrolling of the LCD. This causes each character output to the display to push previous characters over by one space. If the current text direction is left-to-right (the default), the display scrolls to the left; if the current direction is right-to-left, the display scrolls to the right. This has the effect of outputting each new character to the same location on the LCD.

-
Parameters:
- - -
none
-
-
- -

Definition at line 278 of file LCD.cpp.

- -
-
- -
-
- - - - - - - - -
void LCD::backlight (void )
-
-
-

Switch-on the LCD backlight. Switch-on the LCD backlight. The setBacklightPin has to be called before setting the backlight for this method to work.

-
See also:
setBacklightPin.
- -

Definition at line 324 of file LCD.cpp.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void LCD::begin (uint8_t cols,
uint8_t rows,
uint8_t charsize = LCD_5x8DOTS 
) [virtual]
-
-
-

LCD initialization. Initializes the LCD to a given size (col, row). This methods initializes the LCD, therefore, it MUST be called prior to using any other method from this class.

-

This method is abstract, a base implementation is available common to all LCD drivers. Should it not be compatible with some other LCD driver, a derived implementation should be done on the driver specif class.

-
Parameters:
- - - - -
cols[in]the number of columns that the display has
rows[in]the number of rows that the display has
charsize[in]character size, default==LCD_5x8DOTS
-
-
- -

Reimplemented in LiquidCrystal_I2C, and LiquidCrystal_I2C_ByVac.

- -

Definition at line 77 of file LCD.cpp.

- -
-
- -
-
- - - - - - - -
void LCD::blink ()
-
-
-

Display the cursor of the LCD. Display the blinking LCD cursor. If used in combination with the cursor() function, the result will depend on the particular display.

-
Parameters:
- - -
none
-
-
- -

Definition at line 233 of file LCD.cpp.

- -
-
- -
-
- - - - - - - -
void LCD::clear ()
-
-
-

Clears the LCD. Clears the LCD screen and positions the cursor in the upper-left corner.

-

This operation is time consuming for the LCD.

-
Parameters:
- - -
none
-
-
- -

Definition at line 166 of file LCD.cpp.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void LCD::createChar (uint8_t location,
uint8_t charmap[] 
)
-
-
-

Creates a custom character for use on the LCD. Create a custom character (glyph) for use on the LCD. Most chipsets only support up to eight characters of 5x8 pixels. Therefore, this methods has been limited to locations (numbered 0 to 7).

-

The appearance of each custom character is specified by an array of eight bytes, one for each row. The five least significant bits of each byte determine the pixels in that row. To display a custom character on screen, write()/print() its number, i.e. lcd.print (char(x)); // Where x is 0..7.

-
Parameters:
- - - -
location[in]LCD memory location of the character to create (0 to 7)
charmap[in]the bitmap array representing each row of the character.
-
-
- -

Definition at line 292 of file LCD.cpp.

- -
-
- -
-
- - - - - - - -
void LCD::cursor ()
-
-
-

Display the LCD cursor. Display the LCD cursor: an underscore (line) at the location where the next character will be written.

-
Parameters:
- - -
none
-
-
- -

Definition at line 220 of file LCD.cpp.

- -
-
- -
-
- - - - - - - -
void LCD::display ()
-
-
-

Turns on the LCD display. Turns on the LCD display, after it's been turned off with noDisplay(). This will restore the text (and cursor location) that was on the display prior to calling noDisplay().

-
Parameters:
- - -
none
-
-
- -

Definition at line 208 of file LCD.cpp.

- -
-
- -
-
- - - - - - - -
void LCD::home ()
-
-
-

Sets the cursor to the upper-left corner. Positions the cursor in the upper-left of the LCD. That is, use that location in outputting subsequent text to the display. To also clear the display, use the clear() function instead.

-

This operation is time consuming for the LCD.

-
Parameters:
- - -
none
-
-
- -

Definition at line 172 of file LCD.cpp.

- -
-
- -
-
- - - - - - - - -
void LCD::leftToRight (void )
-
-
-

Set the direction for text written to the LCD to left-to-right. Set the direction for text written to the LCD to left-to-right. All subsequent characters written to the display will go from left to right, but does not affect previously-output text.

-

This is the default configuration.

-
Parameters:
- - -
none
-
-
- -

Definition at line 251 of file LCD.cpp.

- -
-
- -
-
- - - - - - - - -
void LCD::moveCursorLeft (void )
-
-
-

Moves the cursor one space to the left.

-
Parameters:
- - -
none
-
-
- -

Definition at line 271 of file LCD.cpp.

- -
-
- -
-
- - - - - - - - -
void LCD::moveCursorRight (void )
-
-
-

Moves the cursor one space to the right.

-
Parameters:
- - -
none
-
-
- -

Definition at line 265 of file LCD.cpp.

- -
-
- -
-
- - - - - - - - -
void LCD::noAutoscroll (void )
-
-
-

Turns off automatic scrolling of the LCD. Turns off automatic scrolling of the LCD, this is the default configuration of the LCD.

-
Parameters:
- - -
none
-
-
- -

Definition at line 285 of file LCD.cpp.

- -
-
- -
-
- - - - - - - - -
void LCD::noBacklight (void )
-
-
-

Switch-off the LCD backlight. Switch-off the LCD backlight. The setBacklightPin has to be called before setting the backlight for this method to work.

-
See also:
setBacklightPin.
- -

Definition at line 331 of file LCD.cpp.

- -
-
- -
-
- - - - - - - -
void LCD::noBlink ()
-
-
-

Turns off the blinking of the LCD cursor.

-
Parameters:
- - -
none
-
-
- -

Definition at line 227 of file LCD.cpp.

- -
-
- -
-
- - - - - - - -
void LCD::noCursor ()
-
-
-

Hides the LCD cursor.

-
Parameters:
- - -
none
-
-
- -

Definition at line 215 of file LCD.cpp.

- -
-
- -
-
- - - - - - - -
void LCD::noDisplay ()
-
-
-

Turns off the LCD display. Turns off the LCD display, without losing the text currently being displayed on it.

-
Parameters:
- - -
none
-
-
- -

Definition at line 202 of file LCD.cpp.

- -
-
- -
-
- - - - - - - - -
void LCD::off (void )
-
-
-

Switch off the LCD module. Switch off the LCD module, it will switch off the LCD controller and the backlight. This method has the same effect of calling noDisplay and noBacklight.

-
See also:
display,
-
-backlight
- -

Definition at line 346 of file LCD.cpp.

- -
-
- -
-
- - - - - - - - -
void LCD::on (void )
-
-
-

Switch on the LCD module. Switch on the LCD module, it will switch on the LCD controller and the backlight. This method has the same effect of calling display and backlight.

-
See also:
display,
-
-backlight
- -

Definition at line 338 of file LCD.cpp.

- -
-
- -
-
- - - - - - - - -
void LCD::rightToLeft (void )
-
-
-

Set the direction for text written to the LCD to right-to-left. Set the direction for text written to the LCD to right-to-left. All subsequent characters written to the display will go from right to left, but does not affect previously-output text.

-

left-to-right is the default configuration.

-
Parameters:
- - -
none
-
-
- -

Definition at line 258 of file LCD.cpp.

- -
-
- -
-
- - - - - - - - -
void LCD::scrollDisplayLeft (void )
-
-
-

Scrolls the contents of the display (text and cursor) one space to the left.

-
Parameters:
- - -
none
-
-
- -

Definition at line 240 of file LCD.cpp.

- -
-
- -
-
- - - - - - - - -
void LCD::scrollDisplayRight (void )
-
-
-

Scrolls the contents of the display (text and cursor) one space to the right.

-
Parameters:
- - -
none
-
-
- -

Definition at line 245 of file LCD.cpp.

- -
-
- -
-
- - - - - - - - -
virtual void LCD::setBacklight (uint8_t value) [inline, virtual]
-
-
-

Sets the pin to control the backlight. Sets the pin in the device to control the backlight. The behaviour of this method is very dependent on the device. Some controllers support dimming some don't. Please read the actual header file for each individual device. The setBacklightPin method has to be called before setting the backlight or the adequate backlight control constructor.

-
See also:
setBacklightPin.
-

NOTE: The prefered methods to control the backlight are "backlight" and "noBacklight".

-
Parameters:
- - -
0..255- the value is very dependent on the LCD. However, BACKLIGHT_OFF will be interpreted as off and BACKLIGHT_ON will drive the backlight on.
-
-
- -

Reimplemented in LiquidCrystal, LiquidCrystal_I2C, LiquidCrystal_I2C_ByVac, LiquidCrystal_SR, LiquidCrystal_SR1W, LiquidCrystal_SR2W, and LiquidCrystal_SR3W.

- -

Definition at line 489 of file LCD.h.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
virtual void LCD::setBacklightPin (uint8_t value,
t_backlighPol pol 
) [inline, virtual]
-
-
-

Sets the pin to control the backlight. Sets the pin in the device to control the backlight. This method is device dependent and can be programmed on each subclass. An empty function call is provided that does nothing.

-
Parameters:
- - - -
value,:pin associated to backlight control.
pol,:backlight polarity control (POSITIVE, NEGATIVE)
-
-
- -

Reimplemented in LiquidCrystal, LiquidCrystal_I2C, LiquidCrystal_SR, and LiquidCrystal_SR3W.

- -

Definition at line 470 of file LCD.h.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void LCD::setCursor (uint8_t col,
uint8_t row 
)
-
-
-

Position the LCD cursor. Sets the position of the LCD cursor. Set the location at which subsequent text written to the LCD will be displayed.

-
Parameters:
- - - -
col[in]LCD column
row[in]LCD row - line.
-
-
- -

Definition at line 178 of file LCD.cpp.

- -
-
- -
-
- - - - - - - - -
void LCD::write (uint8_t value) [virtual]
-
-
-

Writes to the LCD. This method writes character to the LCD in the current cursor position.

-

This is the virtual write method, implemented in the Print class, therefore all Print class methods will end up calling this method.

-
Parameters:
- - -
value[in]Value to write to the LCD.
-
-
- -

Definition at line 360 of file LCD.cpp.

- -
-
-

Member Data Documentation

- -
-
- - - - -
uint8_t LCD::_cols [protected]
-
-
- -

Definition at line 523 of file LCD.h.

- -
-
- -
-
- - - - -
uint8_t LCD::_displaycontrol [protected]
-
-
- -

Definition at line 519 of file LCD.h.

- -
-
- -
-
- - - - -
uint8_t LCD::_displayfunction [protected]
-
-
- -

Definition at line 517 of file LCD.h.

- -
-
- -
-
- - - - -
uint8_t LCD::_displaymode [protected]
-
-
- -

Definition at line 521 of file LCD.h.

- -
-
- -
-
- - - - -
uint8_t LCD::_numlines [protected]
-
-
- -

Definition at line 522 of file LCD.h.

- -
-
- -
-
- - - - -
t_backlighPol LCD::_polarity [protected]
-
-
- -

Definition at line 524 of file LCD.h.

- -
-
-
The documentation for this class was generated from the following files: -
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/class_l_c_d.png b/libraries/LiquidCrystal/utility/docs/html/class_l_c_d.png deleted file mode 100644 index ee7d21c..0000000 Binary files a/libraries/LiquidCrystal/utility/docs/html/class_l_c_d.png and /dev/null differ diff --git a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal-members.html b/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal-members.html deleted file mode 100644 index 6cccc72..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal-members.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - -LCD Library: Member List - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
-
-
LiquidCrystal Member List
-
-
-This is the complete list of members for LiquidCrystal, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_colsLCD [protected]
_displaycontrolLCD [protected]
_displayfunctionLCD [protected]
_displaymodeLCD [protected]
_numlinesLCD [protected]
_polarityLCD [protected]
autoscroll()LCD
backlight(void)LCD
begin(uint8_t cols, uint8_t rows, uint8_t charsize=LCD_5x8DOTS)LCD [virtual]
blink()LCD
clear()LCD
createChar(uint8_t location, uint8_t charmap[])LCD
cursor()LCD
display()LCD
home()LCD
LCD()LCD
leftToRight()LCD
LiquidCrystal(uint8_t rs, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)LiquidCrystal
LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)LiquidCrystal
LiquidCrystal(uint8_t rs, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t backlightPin, t_backlighPol pol)LiquidCrystal
LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t backlightPin, t_backlighPol pol)LiquidCrystal
LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3)LiquidCrystal
LiquidCrystal(uint8_t rs, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3)LiquidCrystal
LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t backlightPin, t_backlighPol pol)LiquidCrystal
LiquidCrystal(uint8_t rs, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t backlightPin, t_backlighPol pol)LiquidCrystal
moveCursorLeft()LCD
moveCursorRight()LCD
noAutoscroll()LCD
noBacklight(void)LCD
noBlink()LCD
noCursor()LCD
noDisplay()LCD
off(void)LCD
on(void)LCD
rightToLeft()LCD
scrollDisplayLeft()LCD
scrollDisplayRight()LCD
send(uint8_t value, uint8_t mode)LiquidCrystal [virtual]
setBacklight(uint8_t value)LiquidCrystal [virtual]
setBacklightPin(uint8_t pin, t_backlighPol pol)LiquidCrystal [virtual]
setCursor(uint8_t col, uint8_t row)LCD
write(uint8_t value)LCD [virtual]
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal.html b/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal.html deleted file mode 100644 index 1076287..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal.html +++ /dev/null @@ -1,854 +0,0 @@ - - - - -LCD Library: LiquidCrystal Class Reference - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
- -
-
LiquidCrystal Class Reference
-
-
- -

#include <LiquidCrystal.h>

-
-Inheritance diagram for LiquidCrystal:
-
-
- - -LCD - -
- -

List of all members.

- - - - - - - - - - - - - -

-Public Member Functions

 LiquidCrystal (uint8_t rs, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)
 LiquidCrystal (uint8_t rs, uint8_t rw, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)
 LiquidCrystal (uint8_t rs, uint8_t rw, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t backlightPin, t_backlighPol pol)
 LiquidCrystal (uint8_t rs, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t backlightPin, t_backlighPol pol)
 LiquidCrystal (uint8_t rs, uint8_t rw, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3)
 LiquidCrystal (uint8_t rs, uint8_t rw, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t backlightPin, t_backlighPol pol)
 LiquidCrystal (uint8_t rs, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3)
 LiquidCrystal (uint8_t rs, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t backlightPin, t_backlighPol pol)
virtual void send (uint8_t value, uint8_t mode)
void setBacklight (uint8_t value)
void setBacklightPin (uint8_t pin, t_backlighPol pol)
-

Detailed Description

-
-

Definition at line 44 of file LiquidCrystal.h.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
LiquidCrystal::LiquidCrystal (uint8_t rs,
uint8_t enable,
uint8_t d0,
uint8_t d1,
uint8_t d2,
uint8_t d3,
uint8_t d4,
uint8_t d5,
uint8_t d6,
uint8_t d7 
)
-
-
-

8 bit LCD constructors. Defines the pin assignment that the LCD will have. The constructor does not initialize the LCD.

- -

Definition at line 55 of file LiquidCrystal.cpp.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
LiquidCrystal::LiquidCrystal (uint8_t rs,
uint8_t rw,
uint8_t enable,
uint8_t d0,
uint8_t d1,
uint8_t d2,
uint8_t d3,
uint8_t d4,
uint8_t d5,
uint8_t d6,
uint8_t d7 
)
-
-
- -

Definition at line 62 of file LiquidCrystal.cpp.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
LiquidCrystal::LiquidCrystal (uint8_t rs,
uint8_t enable,
uint8_t d0,
uint8_t d1,
uint8_t d2,
uint8_t d3,
uint8_t d4,
uint8_t d5,
uint8_t d6,
uint8_t d7,
uint8_t backlightPin,
t_backlighPol pol 
)
-
-
- -

Definition at line 82 of file LiquidCrystal.cpp.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
LiquidCrystal::LiquidCrystal (uint8_t rs,
uint8_t rw,
uint8_t enable,
uint8_t d0,
uint8_t d1,
uint8_t d2,
uint8_t d3,
uint8_t d4,
uint8_t d5,
uint8_t d6,
uint8_t d7,
uint8_t backlightPin,
t_backlighPol pol 
)
-
-
- -

Definition at line 91 of file LiquidCrystal.cpp.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
LiquidCrystal::LiquidCrystal (uint8_t rs,
uint8_t rw,
uint8_t enable,
uint8_t d0,
uint8_t d1,
uint8_t d2,
uint8_t d3 
)
-
-
-

4 bit LCD constructors. Defines the pin assignment that the LCD will have. The constructor does not initialize the LCD.

- -

Definition at line 69 of file LiquidCrystal.cpp.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
LiquidCrystal::LiquidCrystal (uint8_t rs,
uint8_t enable,
uint8_t d0,
uint8_t d1,
uint8_t d2,
uint8_t d3 
)
-
-
- -

Definition at line 75 of file LiquidCrystal.cpp.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
LiquidCrystal::LiquidCrystal (uint8_t rs,
uint8_t rw,
uint8_t enable,
uint8_t d0,
uint8_t d1,
uint8_t d2,
uint8_t d3,
uint8_t backlightPin,
t_backlighPol pol 
)
-
-
- -

Definition at line 100 of file LiquidCrystal.cpp.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
LiquidCrystal::LiquidCrystal (uint8_t rs,
uint8_t enable,
uint8_t d0,
uint8_t d1,
uint8_t d2,
uint8_t d3,
uint8_t backlightPin,
t_backlighPol pol 
)
-
-
- -

Definition at line 108 of file LiquidCrystal.cpp.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
void LiquidCrystal::send (uint8_t value,
uint8_t mode 
) [virtual]
-
-
-

Send a particular value to the LCD. Sends a particular value to the LCD for writing to the LCD or as an LCD command.

-

Users should never call this method.

-
Parameters:
- - -
valueValue to send to the LCD.
-
-
-
Returns:
mode LOW - write to the LCD CGRAM, HIGH - write a command to the LCD.
- -

Reimplemented from LCD.

- -

Definition at line 122 of file LiquidCrystal.cpp.

- -
-
- -
-
- - - - - - - - -
void LiquidCrystal::setBacklight (uint8_t value) [virtual]
-
-
-

Switch-on/off the LCD backlight. Switch-on/off the LCD backlight. The setBacklightPin has to be called before setting the backlight for this method to work.

-
See also:
setBacklightPin. For dimming control of the backlight, the configuration pin must be a PWM output pin. Dim control is achieved by passing a value from 1 to 255 as a parameter. If the pin configured when calling the setBacklightPin does not support PWM, then: (0) backlight off, (1..255) backlight on.
-
Parameters:
- - -
value,:backlight value. 0: off, 1..255: dim control of the backlight. For negative logic 255: off, 254..0: dim control.
-
-
- -

Reimplemented from LCD.

- -

Definition at line 165 of file LiquidCrystal.cpp.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void LiquidCrystal::setBacklightPin (uint8_t pin,
t_backlighPol pol 
) [virtual]
-
-
-

Sets the pin to control the backlight. Sets the pin in the device to control the backlight.

-
Parameters:
- - - -
pin,:pin assigned to the backlight
pol,:backlight pin control polarity (POSITIVE, NEGATIVE).
-
-
- -

Reimplemented from LCD.

- -

Definition at line 155 of file LiquidCrystal.cpp.

- -
-
-
The documentation for this class was generated from the following files: -
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal.png b/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal.png deleted file mode 100644 index 6b24ded..0000000 Binary files a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal.png and /dev/null differ diff --git a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___i2_c-members.html b/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___i2_c-members.html deleted file mode 100644 index 35a7861..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___i2_c-members.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - -LCD Library: Member List - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
-
-
LiquidCrystal_I2C Member List
-
-
-This is the complete list of members for LiquidCrystal_I2C, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_colsLCD [protected]
_displaycontrolLCD [protected]
_displayfunctionLCD [protected]
_displaymodeLCD [protected]
_numlinesLCD [protected]
_polarityLCD [protected]
autoscroll()LCD
backlight(void)LCD
begin(uint8_t cols, uint8_t rows, uint8_t charsize=LCD_5x8DOTS)LiquidCrystal_I2C [virtual]
blink()LCD
clear()LCD
createChar(uint8_t location, uint8_t charmap[])LCD
cursor()LCD
display()LCD
home()LCD
LCD()LCD
leftToRight()LCD
LiquidCrystal_I2C(uint8_t lcd_Addr)LiquidCrystal_I2C
LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t backlighPin, t_backlighPol pol)LiquidCrystal_I2C
LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs)LiquidCrystal_I2C
LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, uint8_t backlighPin, t_backlighPol pol)LiquidCrystal_I2C
LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)LiquidCrystal_I2C
LiquidCrystal_I2C(uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t backlighPin, t_backlighPol pol)LiquidCrystal_I2C
moveCursorLeft()LCD
moveCursorRight()LCD
noAutoscroll()LCD
noBacklight(void)LCD
noBlink()LCD
noCursor()LCD
noDisplay()LCD
off(void)LCD
on(void)LCD
rightToLeft()LCD
scrollDisplayLeft()LCD
scrollDisplayRight()LCD
send(uint8_t value, uint8_t mode)LiquidCrystal_I2C [virtual]
setBacklight(uint8_t value)LiquidCrystal_I2C [virtual]
setBacklightPin(uint8_t value, t_backlighPol pol)LiquidCrystal_I2C [virtual]
setCursor(uint8_t col, uint8_t row)LCD
write(uint8_t value)LCD [virtual]
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___i2_c.html b/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___i2_c.html deleted file mode 100644 index a820550..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___i2_c.html +++ /dev/null @@ -1,626 +0,0 @@ - - - - -LCD Library: LiquidCrystal_I2C Class Reference - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
- -
-
LiquidCrystal_I2C Class Reference
-
-
- -

#include <LiquidCrystal_I2C.h>

-
-Inheritance diagram for LiquidCrystal_I2C:
-
-
- - -LCD - -
- -

List of all members.

- - - - - - - - - - - - -

-Public Member Functions

virtual void begin (uint8_t cols, uint8_t rows, uint8_t charsize=LCD_5x8DOTS)
 LiquidCrystal_I2C (uint8_t lcd_Addr, uint8_t backlighPin, t_backlighPol pol)
 LiquidCrystal_I2C (uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, uint8_t backlighPin, t_backlighPol pol)
 LiquidCrystal_I2C (uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)
 LiquidCrystal_I2C (uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs)
 LiquidCrystal_I2C (uint8_t lcd_Addr, uint8_t En, uint8_t Rw, uint8_t Rs, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t backlighPin, t_backlighPol pol)
 LiquidCrystal_I2C (uint8_t lcd_Addr)
virtual void send (uint8_t value, uint8_t mode)
void setBacklight (uint8_t value)
void setBacklightPin (uint8_t value, t_backlighPol pol)
-

Detailed Description

-
-

Definition at line 38 of file LiquidCrystal_I2C.h.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - -
LiquidCrystal_I2C::LiquidCrystal_I2C (uint8_t lcd_Addr)
-
-
-

Class constructor. Initializes class variables and defines the I2C address of the LCD. The constructor does not initialize the LCD.

-
Parameters:
- - -
lcd_Addr[in]I2C address of the IO expansion module. For I2CLCDextraIO, the address can be configured using the on board jumpers.
-
-
- -

Definition at line 96 of file LiquidCrystal_I2C.cpp.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
LiquidCrystal_I2C::LiquidCrystal_I2C (uint8_t lcd_Addr,
uint8_t backlighPin,
t_backlighPol pol = POSITIVE 
)
-
-
- -

Definition at line 102 of file LiquidCrystal_I2C.cpp.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
LiquidCrystal_I2C::LiquidCrystal_I2C (uint8_t lcd_Addr,
uint8_t En,
uint8_t Rw,
uint8_t Rs 
)
-
-
-

Class constructor. Initializes class variables and defines the I2C address of the LCD. The constructor does not initialize the LCD.

-
Parameters:
- - - - - -
lcd_Addr[in]I2C address of the IO expansion module. For I2CLCDextraIO, the address can be configured using the on board jumpers.
En[in]LCD En (Enable) pin connected to the IO extender module
Rw[in]LCD Rw (Read/write) pin connected to the IO extender module
Rs[in]LCD Rs (Reset) pin connected to the IO extender module
-
-
- -

Definition at line 109 of file LiquidCrystal_I2C.cpp.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
LiquidCrystal_I2C::LiquidCrystal_I2C (uint8_t lcd_Addr,
uint8_t En,
uint8_t Rw,
uint8_t Rs,
uint8_t backlighPin,
t_backlighPol pol = POSITIVE 
)
-
-
- -

Definition at line 115 of file LiquidCrystal_I2C.cpp.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
LiquidCrystal_I2C::LiquidCrystal_I2C (uint8_t lcd_Addr,
uint8_t En,
uint8_t Rw,
uint8_t Rs,
uint8_t d4,
uint8_t d5,
uint8_t d6,
uint8_t d7 
)
-
-
-

Class constructor. Initializes class variables and defines the I2C address of the LCD. The constructor does not initialize the LCD.

-
Parameters:
- - - - - - - - - -
lcd_Addr[in]I2C address of the IO expansion module. For I2CLCDextraIO, the address can be configured using the on board jumpers.
En[in]LCD En (Enable) pin connected to the IO extender module
Rw[in]LCD Rw (Read/write) pin connected to the IO extender module
Rs[in]LCD Rs (Reset) pin connected to the IO extender module
d4[in]LCD data 0 pin map on IO extender module
d5[in]LCD data 1 pin map on IO extender module
d6[in]LCD data 2 pin map on IO extender module
d7[in]LCD data 3 pin map on IO extender module
-
-
- -

Definition at line 123 of file LiquidCrystal_I2C.cpp.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
LiquidCrystal_I2C::LiquidCrystal_I2C (uint8_t lcd_Addr,
uint8_t En,
uint8_t Rw,
uint8_t Rs,
uint8_t d4,
uint8_t d5,
uint8_t d6,
uint8_t d7,
uint8_t backlighPin,
t_backlighPol pol = POSITIVE 
)
-
-
- -

Definition at line 130 of file LiquidCrystal_I2C.cpp.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void LiquidCrystal_I2C::begin (uint8_t cols,
uint8_t rows,
uint8_t charsize = LCD_5x8DOTS 
) [virtual]
-
-
-

LCD initialization and associated HW. Initializes the LCD to a given size (col, row). This methods initializes the LCD, therefore, it MUST be called prior to using any other method from this class or parent class.

-

The begin method can be overloaded if necessary to initialize any HW that is implemented by a library and can't be done during construction, here we use the Wire class.

-
Parameters:
- - - - -
cols[in]the number of columns that the display has
rows[in]the number of rows that the display has
charsize[in]size of the characters of the LCD: LCD_5x8DOTS or LCD_5x10DOTS.
-
-
- -

Reimplemented from LCD.

- -

Definition at line 144 of file LiquidCrystal_I2C.cpp.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void LiquidCrystal_I2C::send (uint8_t value,
uint8_t mode 
) [virtual]
-
-
-

Send a particular value to the LCD. Sends a particular value to the LCD for writing to the LCD or as an LCD command.

-

Users should never call this method.

-
Parameters:
- - - -
value[in]Value to send to the LCD.
mode[in]DATA - write to the LCD CGRAM, COMMAND - write a command to the LCD.
-
-
- -

Reimplemented from LCD.

- -

Definition at line 240 of file LiquidCrystal_I2C.cpp.

- -
-
- -
-
- - - - - - - - -
void LiquidCrystal_I2C::setBacklight (uint8_t value) [virtual]
-
-
-

Switch-on/off the LCD backlight. Switch-on/off the LCD backlight. The setBacklightPin has to be called before setting the backlight for this method to work.

-
See also:
setBacklightPin.
-
Parameters:
- - -
value,:backlight mode (HIGH|LOW)
-
-
- -

Reimplemented from LCD.

- -

Definition at line 167 of file LiquidCrystal_I2C.cpp.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void LiquidCrystal_I2C::setBacklightPin (uint8_t value,
t_backlighPol pol = POSITIVE 
) [virtual]
-
-
-

Sets the pin to control the backlight. Sets the pin in the device to control the backlight. This device doesn't support dimming backlight capability.

-
Parameters:
- - -
0,:backlight off, 1..255: backlight on.
-
-
- -

Reimplemented from LCD.

- -

Definition at line 158 of file LiquidCrystal_I2C.cpp.

- -
-
-
The documentation for this class was generated from the following files: -
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___i2_c.png b/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___i2_c.png deleted file mode 100644 index 3f20cd2..0000000 Binary files a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___i2_c.png and /dev/null differ diff --git a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___i2_c___by_vac-members.html b/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___i2_c___by_vac-members.html deleted file mode 100644 index ba1bbad..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___i2_c___by_vac-members.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - -LCD Library: Member List - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
-
-
LiquidCrystal_I2C_ByVac Member List
-
-
-This is the complete list of members for LiquidCrystal_I2C_ByVac, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_colsLCD [protected]
_displaycontrolLCD [protected]
_displayfunctionLCD [protected]
_displaymodeLCD [protected]
_numlinesLCD [protected]
_polarityLCD [protected]
autoscroll()LCD
backlight(void)LCD
begin(uint8_t cols, uint8_t rows, uint8_t charsize=LCD_5x8DOTS)LiquidCrystal_I2C_ByVac [virtual]
blink()LCD
clear()LCD
createChar(uint8_t location, uint8_t charmap[])LCD
cursor()LCD
display()LCD
home()LCD
LCD()LCD
leftToRight()LCD
LiquidCrystal_I2C_ByVac(uint8_t lcd_Addr)LiquidCrystal_I2C_ByVac
moveCursorLeft()LCD
moveCursorRight()LCD
noAutoscroll()LCD
noBacklight(void)LCD
noBlink()LCD
noCursor()LCD
noDisplay()LCD
off(void)LCD
on(void)LCD
rightToLeft()LCD
scrollDisplayLeft()LCD
scrollDisplayRight()LCD
send(uint8_t value, uint8_t mode)LiquidCrystal_I2C_ByVac [virtual]
setBacklight(uint8_t value)LiquidCrystal_I2C_ByVac [virtual]
setBacklightPin(uint8_t value, t_backlighPol pol)LCD [inline, virtual]
setContrast(uint8_t value)LiquidCrystal_I2C_ByVac
setCursor(uint8_t col, uint8_t row)LCD
write(uint8_t value)LCD [virtual]
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___i2_c___by_vac.html b/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___i2_c___by_vac.html deleted file mode 100644 index 6b1f269..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___i2_c___by_vac.html +++ /dev/null @@ -1,313 +0,0 @@ - - - - -LCD Library: LiquidCrystal_I2C_ByVac Class Reference - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
- -
-
LiquidCrystal_I2C_ByVac Class Reference
-
-
- -

#include <LiquidCrystal_I2C_ByVac.h>

-
-Inheritance diagram for LiquidCrystal_I2C_ByVac:
-
-
- - -LCD - -
- -

List of all members.

- - - - - - - -

-Public Member Functions

virtual void begin (uint8_t cols, uint8_t rows, uint8_t charsize=LCD_5x8DOTS)
 LiquidCrystal_I2C_ByVac (uint8_t lcd_Addr)
virtual void send (uint8_t value, uint8_t mode)
void setBacklight (uint8_t value)
void setContrast (uint8_t value)
-

Detailed Description

-
-

Definition at line 37 of file LiquidCrystal_I2C_ByVac.h.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - -
LiquidCrystal_I2C_ByVac::LiquidCrystal_I2C_ByVac (uint8_t lcd_Addr)
-
-
-

Class constructor. Initializes class variables and defines the I2C address of the LCD. The constructor does not initialize the LCD.

-
Parameters:
- - -
lcd_Addr[in]I2C address of the IO expansion module. For BV4218, the address can be configured using the address commands (to be implemented).
-
-
- -

Definition at line 38 of file LiquidCrystal_I2C_ByVac.cpp.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
void LiquidCrystal_I2C_ByVac::begin (uint8_t cols,
uint8_t rows,
uint8_t charsize = LCD_5x8DOTS 
) [virtual]
-
-
-

LCD initialization and associated HW. Initializes the LCD to a given size (col, row). This methods initializes the LCD, therefore, it MUST be called prior to using any other method from this class or parent class.

-

The begin method can be overloaded if necessary to initialize any HW that is implemented by a library and can't be done during construction, here we use the Wire class.

-
Parameters:
- - - - -
cols[in]the number of columns that the display has
rows[in]the number of rows that the display has
charsize[in]size of the characters of the LCD: LCD_5x8DOTS or LCD_5x10DOTS.
-
-
- -

Reimplemented from LCD.

- -

Definition at line 49 of file LiquidCrystal_I2C_ByVac.cpp.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void LiquidCrystal_I2C_ByVac::send (uint8_t value,
uint8_t mode 
) [virtual]
-
-
-

Send a particular value to the LCD. Sends a particular value to the LCD for writing to the LCD or as an LCD command.

-

Users should never call this method.

-
Parameters:
- - - -
value[in]Value to send to the LCD.
mode[in]DATA - write to the LCD CGRAM, COMMAND - write a command to the LCD.
-
-
- -

Reimplemented from LCD.

- -

Definition at line 99 of file LiquidCrystal_I2C_ByVac.cpp.

- -
-
- -
-
- - - - - - - - -
void LiquidCrystal_I2C_ByVac::setBacklight (uint8_t value) [virtual]
-
-
-

Switch-on/off the LCD backlight. Switch-on/off the LCD backlight.

-
Parameters:
- - -
value,:backlight mode (HIGH|LOW)
-
-
- -

Reimplemented from LCD.

- -

Definition at line 60 of file LiquidCrystal_I2C_ByVac.cpp.

- -
-
- -
-
- - - - - - - - -
void LiquidCrystal_I2C_ByVac::setContrast (uint8_t value)
-
-
-

Switch-on/off the LCD contrast. Switch-on/off the LCD contrast.

-
Parameters:
- - -
value,:contrast mode (HIGH|LOW)
-
-
- -

Definition at line 71 of file LiquidCrystal_I2C_ByVac.cpp.

- -
-
-
The documentation for this class was generated from the following files: -
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___i2_c___by_vac.png b/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___i2_c___by_vac.png deleted file mode 100644 index 2fcb932..0000000 Binary files a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___i2_c___by_vac.png and /dev/null differ diff --git a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___s_r-members.html b/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___s_r-members.html deleted file mode 100644 index 46ac3f3..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___s_r-members.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - -LCD Library: Member List - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
-
-
LiquidCrystal_SR Member List
-
-
-This is the complete list of members for LiquidCrystal_SR, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_colsLCD [protected]
_displaycontrolLCD [protected]
_displayfunctionLCD [protected]
_displaymodeLCD [protected]
_numlinesLCD [protected]
_polarityLCD [protected]
autoscroll()LCD
backlight(void)LCD
begin(uint8_t cols, uint8_t rows, uint8_t charsize=LCD_5x8DOTS)LCD [virtual]
blink()LCD
clear()LCD
createChar(uint8_t location, uint8_t charmap[])LCD
cursor()LCD
display()LCD
home()LCD
LCD()LCD
leftToRight()LCD
LiquidCrystal_SR(uint8_t srdata, uint8_t srclock, uint8_t enable=TWO_WIRE)LiquidCrystal_SR
moveCursorLeft()LCD
moveCursorRight()LCD
noAutoscroll()LCD
noBacklight(void)LCD
noBlink()LCD
noCursor()LCD
noDisplay()LCD
off(void)LCD
on(void)LCD
rightToLeft()LCD
scrollDisplayLeft()LCD
scrollDisplayRight()LCD
send(uint8_t value, uint8_t mode)LiquidCrystal_SR [virtual]
setBacklight(uint8_t mode)LiquidCrystal_SR [virtual]
setBacklightPin(uint8_t pin, t_backlighPol pol)LiquidCrystal_SR [virtual]
setCursor(uint8_t col, uint8_t row)LCD
write(uint8_t value)LCD [virtual]
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___s_r.html b/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___s_r.html deleted file mode 100644 index 34312e1..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___s_r.html +++ /dev/null @@ -1,298 +0,0 @@ - - - - -LCD Library: LiquidCrystal_SR Class Reference - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
- -
-
LiquidCrystal_SR Class Reference
-
-
- -

#include <LiquidCrystal_SR.h>

-
-Inheritance diagram for LiquidCrystal_SR:
-
-
- - -LCD - -
- -

List of all members.

- - - - - - -

-Public Member Functions

 LiquidCrystal_SR (uint8_t srdata, uint8_t srclock, uint8_t enable=TWO_WIRE)
virtual void send (uint8_t value, uint8_t mode)
void setBacklight (uint8_t mode)
void setBacklightPin (uint8_t pin, t_backlighPol pol)
-

Detailed Description

-
-

Definition at line 94 of file LiquidCrystal_SR.h.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
LiquidCrystal_SR::LiquidCrystal_SR (uint8_t srdata,
uint8_t srclock,
uint8_t enable = TWO_WIRE 
)
-
-
-

LCD SHIFT REGISTER constructors. Defines the pin assignment that the LCD will have. The constructor does not initialize the LCD. Assuming 1 line 8 pixel high font.

-
Parameters:
- - - - -
srdata[in]pin for shiftregister data line.
srclock[in]pin for shiftregister clock line.
enable[in]optional direct enable pin for the LCD
-
-
- -

Definition at line 98 of file LiquidCrystal_SR.cpp.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
void LiquidCrystal_SR::send (uint8_t value,
uint8_t mode 
) [virtual]
-
-
-

Send a particular value to the LCD. Sends a particular value to the LCD for writing to the LCD or as an LCD command using the shift register.

-

Users should never call this method.

-
Parameters:
- - -
value[in]Value to send to the LCD.
-
-
-
Returns:
mode LOW - write to the LCD CGRAM, HIGH - write a command to the LCD.
- -

Reimplemented from LCD.

- -

Definition at line 172 of file LiquidCrystal_SR.cpp.

- -
-
- -
-
- - - - - - - - -
void LiquidCrystal_SR::setBacklight (uint8_t mode) [virtual]
-
-
-

Switch-on/off the LCD backlight. Switch-on/off the LCD backlight. The setBacklightPin has to be called before setting the backlight for this method to work.

-
See also:
setBacklightPin.
-
Parameters:
- - -
mode,:backlight mode (HIGH|LOW)
-
-
- -

Reimplemented from LCD.

- -

Definition at line 207 of file LiquidCrystal_SR.cpp.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void LiquidCrystal_SR::setBacklightPin (uint8_t pin,
t_backlighPol pol 
) [virtual]
-
-
-

Sets the pin to control the backlight. Sets the pin in the device to control the backlight.

-
Warning:
Currently not supported
-
Parameters:
- - - -
mode,:backlight mode (HIGH|LOW)
pol,:backlight polarity
-
-
- -

Reimplemented from LCD.

- -

Definition at line 202 of file LiquidCrystal_SR.cpp.

- -
-
-
The documentation for this class was generated from the following files: -
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___s_r.png b/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___s_r.png deleted file mode 100644 index 04adf58..0000000 Binary files a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___s_r.png and /dev/null differ diff --git a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___s_r1_w-members.html b/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___s_r1_w-members.html deleted file mode 100644 index caf8e76..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___s_r1_w-members.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - -LCD Library: Member List - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
-
-
LiquidCrystal_SR1W Member List
-
-
-This is the complete list of members for LiquidCrystal_SR1W, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_colsLCD [protected]
_displaycontrolLCD [protected]
_displayfunctionLCD [protected]
_displaymodeLCD [protected]
_numlinesLCD [protected]
_polarityLCD [protected]
autoscroll()LCD
backlight(void)LCD
begin(uint8_t cols, uint8_t rows, uint8_t charsize=LCD_5x8DOTS)LCD [virtual]
blink()LCD
clear()LCD
createChar(uint8_t location, uint8_t charmap[])LCD
cursor()LCD
display()LCD
home()LCD
LCD()LCD
leftToRight()LCD
LiquidCrystal_SR1W(uint8_t srdata, t_sr1w_circuitType circuitType, t_backlighPol blpol=POSITIVE)LiquidCrystal_SR1W
moveCursorLeft()LCD
moveCursorRight()LCD
noAutoscroll()LCD
noBacklight(void)LCD
noBlink()LCD
noCursor()LCD
noDisplay()LCD
off(void)LCD
on(void)LCD
rightToLeft()LCD
scrollDisplayLeft()LCD
scrollDisplayRight()LCD
send(uint8_t value, uint8_t mode)LiquidCrystal_SR1W [virtual]
setBacklight(uint8_t mode)LiquidCrystal_SR1W [virtual]
setBacklightPin(uint8_t value, t_backlighPol pol)LCD [inline, virtual]
setCursor(uint8_t col, uint8_t row)LCD
write(uint8_t value)LCD [virtual]
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___s_r1_w.html b/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___s_r1_w.html deleted file mode 100644 index cfeab8d..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___s_r1_w.html +++ /dev/null @@ -1,257 +0,0 @@ - - - - -LCD Library: LiquidCrystal_SR1W Class Reference - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
- -
-
LiquidCrystal_SR1W Class Reference
-
-
- -

#include <LiquidCrystal_SR1W.h>

-
-Inheritance diagram for LiquidCrystal_SR1W:
-
-
- - -LCD - -
- -

List of all members.

- - - - - -

-Public Member Functions

 LiquidCrystal_SR1W (uint8_t srdata, t_sr1w_circuitType circuitType, t_backlighPol blpol=POSITIVE)
virtual void send (uint8_t value, uint8_t mode)
void setBacklight (uint8_t mode)
-

Detailed Description

-
-

Definition at line 299 of file LiquidCrystal_SR1W.h.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
LiquidCrystal_SR1W::LiquidCrystal_SR1W (uint8_t srdata,
t_sr1w_circuitType circuitType,
t_backlighPol blpol = POSITIVE 
)
-
-
-

LCD 1 wire SHIFT REGISTER constructor. Defines the pin assignments that connect to the shift register. The constructor does not initialize the LCD. Assuming 1 line 8 pixel high font.

-
Parameters:
- - - - -
srdata[in]Arduino pin for shift register.
circuitType[in]optionally select an alternate circuit type
blpol[in]optional backlight polarity (default = POSITIVE)
-
-
- -

Definition at line 40 of file LiquidCrystal_SR1W.cpp.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
void LiquidCrystal_SR1W::send (uint8_t value,
uint8_t mode 
) [virtual]
-
-
-

Send a particular value to the LCD. Sends a particular value to the LCD for writing to the LCD or as an LCD command using the shift register.

-

Users should never call this method.

-
Parameters:
- - - -
value[in]Value to send to the LCD.
mode[in]DATA=8bit data, COMMAND=8bit cmd, FOUR_BITS=4bit cmd the LCD.
-
-
- -

Reimplemented from LCD.

- -

Definition at line 194 of file LiquidCrystal_SR1W.cpp.

- -
-
- -
-
- - - - - - - - -
void LiquidCrystal_SR1W::setBacklight (uint8_t mode) [virtual]
-
-
-

Switch-on/off the LCD backlight. Switch-on/off the LCD backlight. The setBacklightPin has to be called before setting the backlight for this method to work.

-
See also:
setBacklightPin.
-
Parameters:
- - -
mode[in]backlight mode (0 off, non-zero on)
-
-
- -

Reimplemented from LCD.

- -

Definition at line 235 of file LiquidCrystal_SR1W.cpp.

- -
-
-
The documentation for this class was generated from the following files: -
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___s_r1_w.png b/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___s_r1_w.png deleted file mode 100644 index 3e7575a..0000000 Binary files a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___s_r1_w.png and /dev/null differ diff --git a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___s_r2_w-members.html b/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___s_r2_w-members.html deleted file mode 100644 index 6c529ac..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___s_r2_w-members.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - -LCD Library: Member List - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
-
-
LiquidCrystal_SR2W Member List
-
-
-This is the complete list of members for LiquidCrystal_SR2W, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_colsLCD [protected]
_displaycontrolLCD [protected]
_displayfunctionLCD [protected]
_displaymodeLCD [protected]
_numlinesLCD [protected]
_polarityLCD [protected]
autoscroll()LCD
backlight(void)LCD
begin(uint8_t cols, uint8_t rows, uint8_t charsize=LCD_5x8DOTS)LCD [virtual]
blink()LCD
clear()LCD
createChar(uint8_t location, uint8_t charmap[])LCD
cursor()LCD
display()LCD
home()LCD
LCD()LCD
leftToRight()LCD
LiquidCrystal_SR2W(uint8_t srdata, uint8_t srclock, t_backlighPol blpol=POSITIVE)LiquidCrystal_SR2W
moveCursorLeft()LCD
moveCursorRight()LCD
noAutoscroll()LCD
noBacklight(void)LCD
noBlink()LCD
noCursor()LCD
noDisplay()LCD
off(void)LCD
on(void)LCD
rightToLeft()LCD
scrollDisplayLeft()LCD
scrollDisplayRight()LCD
send(uint8_t value, uint8_t mode)LiquidCrystal_SR2W [virtual]
setBacklight(uint8_t mode)LiquidCrystal_SR2W [virtual]
setBacklightPin(uint8_t value, t_backlighPol pol)LCD [inline, virtual]
setCursor(uint8_t col, uint8_t row)LCD
write(uint8_t value)LCD [virtual]
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___s_r2_w.html b/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___s_r2_w.html deleted file mode 100644 index de65277..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___s_r2_w.html +++ /dev/null @@ -1,257 +0,0 @@ - - - - -LCD Library: LiquidCrystal_SR2W Class Reference - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
- -
-
LiquidCrystal_SR2W Class Reference
-
-
- -

#include <LiquidCrystal_SR2W.h>

-
-Inheritance diagram for LiquidCrystal_SR2W:
-
-
- - -LCD - -
- -

List of all members.

- - - - - -

-Public Member Functions

 LiquidCrystal_SR2W (uint8_t srdata, uint8_t srclock, t_backlighPol blpol=POSITIVE)
virtual void send (uint8_t value, uint8_t mode)
void setBacklight (uint8_t mode)
-

Detailed Description

-
-

Definition at line 137 of file LiquidCrystal_SR2W.h.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
LiquidCrystal_SR2W::LiquidCrystal_SR2W (uint8_t srdata,
uint8_t srclock,
t_backlighPol blpol = POSITIVE 
)
-
-
-

LCD 2 wire SHIFT REGISTER constructor. Defines the pin assignments that connect to the shift register. The constructor does not initialize the LCD. Assuming 1 line 8 pixel high font.

-
Parameters:
- - - - -
srdata[in]Arduino pin for shift register data line.
srclock[in]Arduino pin for shift register clock line.
blpol[in]optional backlight polarity (default = POSITIVE)
-
-
- -

Definition at line 37 of file LiquidCrystal_SR2W.cpp.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
void LiquidCrystal_SR2W::send (uint8_t value,
uint8_t mode 
) [virtual]
-
-
-

Send a particular value to the LCD. Sends a particular value to the LCD for writing to the LCD or as an LCD command using the shift register.

-

Users should never call this method.

-
Parameters:
- - - -
value[in]Value to send to the LCD.
mode[in]DATA=8bit data, COMMAND=8bit cmd, FOUR_BITS=4bit cmd the LCD.
-
-
- -

Reimplemented from LCD.

- -

Definition at line 90 of file LiquidCrystal_SR2W.cpp.

- -
-
- -
-
- - - - - - - - -
void LiquidCrystal_SR2W::setBacklight (uint8_t mode) [virtual]
-
-
-

Switch-on/off the LCD backlight. Switch-on/off the LCD backlight. The setBacklightPin has to be called before setting the backlight for this method to work.

-
See also:
setBacklightPin.
-
Parameters:
- - -
mode[in]backlight mode (0 off, non-zero on)
-
-
- -

Reimplemented from LCD.

- -

Definition at line 117 of file LiquidCrystal_SR2W.cpp.

- -
-
-
The documentation for this class was generated from the following files: -
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___s_r2_w.png b/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___s_r2_w.png deleted file mode 100644 index 774ed61..0000000 Binary files a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___s_r2_w.png and /dev/null differ diff --git a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___s_r3_w-members.html b/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___s_r3_w-members.html deleted file mode 100644 index 1d3fa2e..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___s_r3_w-members.html +++ /dev/null @@ -1,151 +0,0 @@ - - - - -LCD Library: Member List - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
-
-
LiquidCrystal_SR3W Member List
-
-
-This is the complete list of members for LiquidCrystal_SR3W, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_colsLCD [protected]
_displaycontrolLCD [protected]
_displayfunctionLCD [protected]
_displaymodeLCD [protected]
_numlinesLCD [protected]
_polarityLCD [protected]
autoscroll()LCD
backlight(void)LCD
begin(uint8_t cols, uint8_t rows, uint8_t charsize=LCD_5x8DOTS)LCD [virtual]
blink()LCD
clear()LCD
createChar(uint8_t location, uint8_t charmap[])LCD
cursor()LCD
display()LCD
home()LCD
LCD()LCD
leftToRight()LCD
LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe)LiquidCrystal_SR3W
LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe, uint8_t backlighPin, t_backlighPol pol)LiquidCrystal_SR3W
LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe, uint8_t En, uint8_t Rw, uint8_t Rs, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)LiquidCrystal_SR3W
LiquidCrystal_SR3W(uint8_t data, uint8_t clk, uint8_t strobe, uint8_t En, uint8_t Rw, uint8_t Rs, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t backlighPin, t_backlighPol pol)LiquidCrystal_SR3W
moveCursorLeft()LCD
moveCursorRight()LCD
noAutoscroll()LCD
noBacklight(void)LCD
noBlink()LCD
noCursor()LCD
noDisplay()LCD
off(void)LCD
on(void)LCD
rightToLeft()LCD
scrollDisplayLeft()LCD
scrollDisplayRight()LCD
send(uint8_t value, uint8_t mode)LiquidCrystal_SR3W [virtual]
setBacklight(uint8_t value)LiquidCrystal_SR3W [virtual]
setBacklightPin(uint8_t value, t_backlighPol pol)LiquidCrystal_SR3W [virtual]
setCursor(uint8_t col, uint8_t row)LCD
write(uint8_t value)LCD [virtual]
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___s_r3_w.html b/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___s_r3_w.html deleted file mode 100644 index 3e36b39..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___s_r3_w.html +++ /dev/null @@ -1,528 +0,0 @@ - - - - -LCD Library: LiquidCrystal_SR3W Class Reference - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
- -
-
LiquidCrystal_SR3W Class Reference
-
-
- -

#include <LiquidCrystal_SR3W.h>

-
-Inheritance diagram for LiquidCrystal_SR3W:
-
-
- - -LCD - -
- -

List of all members.

- - - - - - - - - -

-Public Member Functions

 LiquidCrystal_SR3W (uint8_t data, uint8_t clk, uint8_t strobe)
 LiquidCrystal_SR3W (uint8_t data, uint8_t clk, uint8_t strobe, uint8_t backlighPin, t_backlighPol pol)
 LiquidCrystal_SR3W (uint8_t data, uint8_t clk, uint8_t strobe, uint8_t En, uint8_t Rw, uint8_t Rs, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t backlighPin, t_backlighPol pol)
 LiquidCrystal_SR3W (uint8_t data, uint8_t clk, uint8_t strobe, uint8_t En, uint8_t Rw, uint8_t Rs, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)
virtual void send (uint8_t value, uint8_t mode)
void setBacklight (uint8_t value)
void setBacklightPin (uint8_t value, t_backlighPol pol)
-

Detailed Description

-
-

Definition at line 66 of file LiquidCrystal_SR3W.h.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
LiquidCrystal_SR3W::LiquidCrystal_SR3W (uint8_t data,
uint8_t clk,
uint8_t strobe 
)
-
-
-

Class constructor. Initializes class variables and defines the IO driving the shift register. The constructor does not initialize the LCD. Default configuration: Shift register LCD QA - 0 DB4 QB - 1 DB5 QC - 2 DB6 QD - 3 DB7 QE - 4 E QF - 5 QG - 6 Rs GND Rw

-
Parameters:
- - - - -
strobe[in]digital IO connected to shiftregister strobe pin.
data[in]digital IO connected to the shiftregister data pin.
clk[in]digital IO connected to the shiftregister clock pin.
-
-
- -

Definition at line 133 of file LiquidCrystal_SR3W.cpp.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
LiquidCrystal_SR3W::LiquidCrystal_SR3W (uint8_t data,
uint8_t clk,
uint8_t strobe,
uint8_t backlighPin,
t_backlighPol pol 
)
-
-
- -

Definition at line 138 of file LiquidCrystal_SR3W.cpp.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
LiquidCrystal_SR3W::LiquidCrystal_SR3W (uint8_t data,
uint8_t clk,
uint8_t strobe,
uint8_t En,
uint8_t Rw,
uint8_t Rs,
uint8_t d4,
uint8_t d5,
uint8_t d6,
uint8_t d7 
)
-
-
-

Class constructor. Initializes class variables and defines the control lines of the LCD and the shiftregister. The constructor does not initialize the LCD.

-
Parameters:
- - - - - - - - - - - -
strobe[in]digital IO connected to shiftregister strobe pin.
data[in]digital IO connected to shiftregister data pin.
clk[in]digital IO connected to shiftregister clock pin.
En[in]LCD En (Enable) pin connected to SR output pin.
Rw[in]LCD Rw (Read/write) pin connected to SR output pin.
Rs[in]LCD Rs (Reg Select) pin connected to SR output pin.
d4[in]LCD data 4 pin map to the SR output pin.
d5[in]LCD data 5 pin map to the SR output pin.
d6[in]LCD data 6 pin map to the SR output pin.
d7[in]LCD data 7 pin map to the SR output pin.
-
-
- -

Definition at line 145 of file LiquidCrystal_SR3W.cpp.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
LiquidCrystal_SR3W::LiquidCrystal_SR3W (uint8_t data,
uint8_t clk,
uint8_t strobe,
uint8_t En,
uint8_t Rw,
uint8_t Rs,
uint8_t d4,
uint8_t d5,
uint8_t d6,
uint8_t d7,
uint8_t backlighPin,
t_backlighPol pol 
)
-
-
- -

Definition at line 152 of file LiquidCrystal_SR3W.cpp.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
void LiquidCrystal_SR3W::send (uint8_t value,
uint8_t mode 
) [virtual]
-
-
-

Send a particular value to the LCD. Sends a particular value to the LCD for writing to the LCD or as an LCD command.

-

Users should never call this method.

-
Parameters:
- - - -
value[in]Value to send to the LCD.
mode[in]DATA - write to the LCD CGRAM, COMMAND - write a command to the LCD.
-
-
- -

Reimplemented from LCD.

- -

Definition at line 162 of file LiquidCrystal_SR3W.cpp.

- -
-
- -
-
- - - - - - - - -
void LiquidCrystal_SR3W::setBacklight (uint8_t value) [virtual]
-
-
-

Switch-on/off the LCD backlight. Switch-on/off the LCD backlight. The setBacklightPin has to be called before setting the backlight for this method to work.

-
See also:
setBacklightPin.
-
Parameters:
- - -
value,:backlight mode (HIGH|LOW)
-
-
- -

Reimplemented from LCD.

- -

Definition at line 191 of file LiquidCrystal_SR3W.cpp.

- -
-
- -
-
- - - - - - - - - - - - - - - - - - -
void LiquidCrystal_SR3W::setBacklightPin (uint8_t value,
t_backlighPol pol = POSITIVE 
) [virtual]
-
-
-

Sets the pin to control the backlight. Sets the pin in the device to control the backlight. This device doesn't support dimming backlight capability.

-
Parameters:
- - -
0,:backlight off, 1..255: backlight on.
-
-
- -

Reimplemented from LCD.

- -

Definition at line 183 of file LiquidCrystal_SR3W.cpp.

- -
-
-
The documentation for this class was generated from the following files: -
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___s_r3_w.png b/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___s_r3_w.png deleted file mode 100644 index 2d13cf7..0000000 Binary files a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___s_r3_w.png and /dev/null differ diff --git a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___s_r___l_c_d3-members.html b/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___s_r___l_c_d3-members.html deleted file mode 100644 index 8185ec5..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___s_r___l_c_d3-members.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - -LCD Library: Member List - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.2.1
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
-
-
LiquidCrystal_SR_LCD3 Member List
-
-
-This is the complete list of members for LiquidCrystal_SR_LCD3, including all inherited members. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
_colsLCD [protected]
_displaycontrolLCD [protected]
_displayfunctionLCD [protected]
_displaymodeLCD [protected]
_numlinesLCD [protected]
autoscroll()LCD
backlight(void)LCD
begin(uint8_t cols, uint8_t rows, uint8_t charsize=LCD_5x8DOTS)LCD [virtual]
blink()LCD
clear()LCD
command(uint8_t value)LCD
createChar(uint8_t location, uint8_t charmap[])LCD
cursor()LCD
display()LCD
home()LCD
LCD()LCD
leftToRight()LCD
LiquidCrystal_SR_LCD3(uint8_t srdata, uint8_t srclock, uint8_t enable)LiquidCrystal_SR_LCD3
moveCursorLeft()LCD
moveCursorRight()LCD
noAutoscroll()LCD
noBacklight(void)LCD
noBlink()LCD
noCursor()LCD
noDisplay()LCD
rightToLeft()LCD
scrollDisplayLeft()LCD
scrollDisplayRight()LCD
send(uint8_t value, uint8_t mode)LiquidCrystal_SR_LCD3 [virtual]
setBacklight(uint8_t value)LCD [inline, virtual]
setBacklightPin(uint8_t value)LCD [inline, virtual]
setCursor(uint8_t col, uint8_t row)LCD
write(uint8_t value)LCD [virtual]
- - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___s_r___l_c_d3.html b/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___s_r___l_c_d3.html deleted file mode 100644 index 73b9d1e..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___s_r___l_c_d3.html +++ /dev/null @@ -1,200 +0,0 @@ - - - - -LCD Library: LiquidCrystal_SR_LCD3 Class Reference - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.2.1
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
LiquidCrystal_SR_LCD3 Class Reference
-
-
- -

#include <LiquidCrystal_SR_LCD3.h>

-
-Inheritance diagram for LiquidCrystal_SR_LCD3:
-
-
- - -LCD - -
- -

List of all members.

- - - - -

-Public Member Functions

 LiquidCrystal_SR_LCD3 (uint8_t srdata, uint8_t srclock, uint8_t enable)
virtual void send (uint8_t value, uint8_t mode)
-

Detailed Description

-
-

Definition at line 16 of file LiquidCrystal_SR_LCD3.h.

-

Constructor & Destructor Documentation

- -
-
- - - - - - - - - - - - - - - - - - - - - - - - -
LiquidCrystal_SR_LCD3::LiquidCrystal_SR_LCD3 (uint8_t srdata,
uint8_t srclock,
uint8_t enable 
)
-
-
-

LCD SHIFT REGISTER constructors. Defines the pin assignment that the LCD will have. The constructor does not initialize the LCD. Assuming 1 line 8 pixel high font.

-
Parameters:
- - - - -
srdata[in]pin for shiftregister data line.
srclock[in]pin for shiftregister clock line.
enable[in]enable pin for the shiftregister (also called strobe).
-
-
- -

Definition at line 123 of file LiquidCrystal_SR_LCD3.cpp.

- -
-
-

Member Function Documentation

- -
-
- - - - - - - - - - - - - - - - - - -
void LiquidCrystal_SR_LCD3::send (uint8_t value,
uint8_t mode 
) [virtual]
-
-
-

Send a particular value to the LCD. Sends a particular value to the LCD for writing to the LCD or as an LCD command using the shift register.

-

Users should never call this method.

-
Parameters:
- - -
value[in]Value to send to the LCD.
-
-
-
Returns:
mode LOW - write to the LCD CGRAM, HIGH - write a command to the LCD.
- -

Reimplemented from LCD.

- -

Definition at line 171 of file LiquidCrystal_SR_LCD3.cpp.

- -
-
-
The documentation for this class was generated from the following files: -
- - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___s_r___l_c_d3.png b/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___s_r___l_c_d3.png deleted file mode 100644 index 966e05c..0000000 Binary files a/libraries/LiquidCrystal/utility/docs/html/class_liquid_crystal___s_r___l_c_d3.png and /dev/null differ diff --git a/libraries/LiquidCrystal/utility/docs/html/classes.html b/libraries/LiquidCrystal/utility/docs/html/classes.html deleted file mode 100644 index 4994665..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/classes.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - -LCD Library: Class Index - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
-
-
Class Index
-
-
-
I | L
- -
  I  
-
LCD   LiquidCrystal_I2C   LiquidCrystal_SR   LiquidCrystal_SR2W   
I2CIO   LiquidCrystal   LiquidCrystal_I2C_ByVac   LiquidCrystal_SR1W   LiquidCrystal_SR3W   
  L  
-
I | L
-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/closed.png b/libraries/LiquidCrystal/utility/docs/html/closed.png deleted file mode 100644 index b7d4bd9..0000000 Binary files a/libraries/LiquidCrystal/utility/docs/html/closed.png and /dev/null differ diff --git a/libraries/LiquidCrystal/utility/docs/html/doxygen.css b/libraries/LiquidCrystal/utility/docs/html/doxygen.css deleted file mode 100644 index 74445fe..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/doxygen.css +++ /dev/null @@ -1,835 +0,0 @@ -/* The standard CSS for doxygen */ - -body, table, div, p, dl { - font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif; - font-size: 12px; -} - -/* @group Heading Levels */ - -h1 { - font-size: 150%; -} - -.title { - font-size: 150%; - font-weight: bold; - margin: 10px 2px; -} - -h2 { - font-size: 120%; -} - -h3 { - font-size: 100%; -} - -dt { - font-weight: bold; -} - -div.multicol { - -moz-column-gap: 1em; - -webkit-column-gap: 1em; - -moz-column-count: 3; - -webkit-column-count: 3; -} - -p.startli, p.startdd, p.starttd { - margin-top: 2px; -} - -p.endli { - margin-bottom: 0px; -} - -p.enddd { - margin-bottom: 4px; -} - -p.endtd { - margin-bottom: 2px; -} - -/* @end */ - -caption { - font-weight: bold; -} - -span.legend { - font-size: 70%; - text-align: center; -} - -h3.version { - font-size: 90%; - text-align: center; -} - -div.qindex, div.navtab{ - background-color: #EBEFF6; - border: 1px solid #A3B4D7; - text-align: center; - margin: 2px; - padding: 2px; -} - -div.qindex, div.navpath { - width: 100%; - line-height: 140%; -} - -div.navtab { - margin-right: 15px; -} - -/* @group Link Styling */ - -a { - color: #3D578C; - font-weight: normal; - text-decoration: none; -} - -.contents a:visited { - color: #4665A2; -} - -a:hover { - text-decoration: underline; -} - -a.qindex { - font-weight: bold; -} - -a.qindexHL { - font-weight: bold; - background-color: #9CAFD4; - color: #ffffff; - border: 1px double #869DCA; -} - -.contents a.qindexHL:visited { - color: #ffffff; -} - -a.el { - font-weight: bold; -} - -a.elRef { -} - -a.code { - color: #4665A2; -} - -a.codeRef { - color: #4665A2; -} - -/* @end */ - -dl.el { - margin-left: -1cm; -} - -.fragment { - font-family: monospace, fixed; - font-size: 105%; -} - -pre.fragment { - border: 1px solid #C4CFE5; - background-color: #FBFCFD; - padding: 4px 6px; - margin: 4px 8px 4px 2px; - overflow: auto; - word-wrap: break-word; - font-size: 9pt; - line-height: 125%; -} - -div.ah { - background-color: black; - font-weight: bold; - color: #ffffff; - margin-bottom: 3px; - margin-top: 3px; - padding: 0.2em; - border: solid thin #333; - border-radius: 0.5em; - -webkit-border-radius: .5em; - -moz-border-radius: .5em; - box-shadow: 2px 2px 3px #999; - -webkit-box-shadow: 2px 2px 3px #999; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; - background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); - background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000); -} - -div.groupHeader { - margin-left: 16px; - margin-top: 12px; - font-weight: bold; -} - -div.groupText { - margin-left: 16px; - font-style: italic; -} - -body { - background: white; - color: black; - margin: 0; -} - -div.contents { - margin-top: 10px; - margin-left: 10px; - margin-right: 5px; -} - -td.indexkey { - background-color: #EBEFF6; - font-weight: bold; - border: 1px solid #C4CFE5; - margin: 2px 0px 2px 0; - padding: 2px 10px; -} - -td.indexvalue { - background-color: #EBEFF6; - border: 1px solid #C4CFE5; - padding: 2px 10px; - margin: 2px 0px; -} - -tr.memlist { - background-color: #EEF1F7; -} - -p.formulaDsp { - text-align: center; -} - -img.formulaDsp { - -} - -img.formulaInl { - vertical-align: middle; -} - -div.center { - text-align: center; - margin-top: 0px; - margin-bottom: 0px; - padding: 0px; -} - -div.center img { - border: 0px; -} - -address.footer { - text-align: right; - padding-right: 12px; -} - -img.footer { - border: 0px; - vertical-align: middle; -} - -/* @group Code Colorization */ - -span.keyword { - color: #008000 -} - -span.keywordtype { - color: #604020 -} - -span.keywordflow { - color: #e08000 -} - -span.comment { - color: #800000 -} - -span.preprocessor { - color: #806020 -} - -span.stringliteral { - color: #002080 -} - -span.charliteral { - color: #008080 -} - -span.vhdldigit { - color: #ff00ff -} - -span.vhdlchar { - color: #000000 -} - -span.vhdlkeyword { - color: #700070 -} - -span.vhdllogic { - color: #ff0000 -} - -/* @end */ - -/* -.search { - color: #003399; - font-weight: bold; -} - -form.search { - margin-bottom: 0px; - margin-top: 0px; -} - -input.search { - font-size: 75%; - color: #000080; - font-weight: normal; - background-color: #e8eef2; -} -*/ - -td.tiny { - font-size: 75%; -} - -.dirtab { - padding: 4px; - border-collapse: collapse; - border: 1px solid #A3B4D7; -} - -th.dirtab { - background: #EBEFF6; - font-weight: bold; -} - -hr { - height: 0px; - border: none; - border-top: 1px solid #4A6AAA; -} - -hr.footer { - height: 1px; -} - -/* @group Member Descriptions */ - -table.memberdecls { - border-spacing: 0px; - padding: 0px; -} - -.mdescLeft, .mdescRight, -.memItemLeft, .memItemRight, -.memTemplItemLeft, .memTemplItemRight, .memTemplParams { - background-color: #F9FAFC; - border: none; - margin: 4px; - padding: 1px 0 0 8px; -} - -.mdescLeft, .mdescRight { - padding: 0px 8px 4px 8px; - color: #555; -} - -.memItemLeft, .memItemRight, .memTemplParams { - border-top: 1px solid #C4CFE5; -} - -.memItemLeft, .memTemplItemLeft { - white-space: nowrap; -} - -.memItemRight { - width: 100%; -} - -.memTemplParams { - color: #4665A2; - white-space: nowrap; -} - -/* @end */ - -/* @group Member Details */ - -/* Styles for detailed member documentation */ - -.memtemplate { - font-size: 80%; - color: #4665A2; - font-weight: normal; - margin-left: 9px; -} - -.memnav { - background-color: #EBEFF6; - border: 1px solid #A3B4D7; - text-align: center; - margin: 2px; - margin-right: 15px; - padding: 2px; -} - -.mempage { - width: 100%; -} - -.memitem { - padding: 0; - margin-bottom: 10px; - margin-right: 5px; -} - -.memname { - white-space: nowrap; - font-weight: bold; - margin-left: 6px; -} - -.memproto { - border-top: 1px solid #A8B8D9; - border-left: 1px solid #A8B8D9; - border-right: 1px solid #A8B8D9; - padding: 6px 0px 6px 0px; - color: #253555; - font-weight: bold; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - /* opera specific markup */ - box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - border-top-right-radius: 8px; - border-top-left-radius: 8px; - /* firefox specific markup */ - -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; - -moz-border-radius-topright: 8px; - -moz-border-radius-topleft: 8px; - /* webkit specific markup */ - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - -webkit-border-top-right-radius: 8px; - -webkit-border-top-left-radius: 8px; - background-image:url('nav_f.png'); - background-repeat:repeat-x; - background-color: #E2E8F2; - -} - -.memdoc { - border-bottom: 1px solid #A8B8D9; - border-left: 1px solid #A8B8D9; - border-right: 1px solid #A8B8D9; - padding: 2px 5px; - background-color: #FBFCFD; - border-top-width: 0; - /* opera specific markup */ - border-bottom-left-radius: 8px; - border-bottom-right-radius: 8px; - box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - /* firefox specific markup */ - -moz-border-radius-bottomleft: 8px; - -moz-border-radius-bottomright: 8px; - -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; - background-image: -moz-linear-gradient(center top, #FFFFFF 0%, #FFFFFF 60%, #F7F8FB 95%, #EEF1F7); - /* webkit specific markup */ - -webkit-border-bottom-left-radius: 8px; - -webkit-border-bottom-right-radius: 8px; - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); - background-image: -webkit-gradient(linear,center top,center bottom,from(#FFFFFF), color-stop(0.6,#FFFFFF), color-stop(0.60,#FFFFFF), color-stop(0.95,#F7F8FB), to(#EEF1F7)); -} - -.paramkey { - text-align: right; -} - -.paramtype { - white-space: nowrap; -} - -.paramname { - color: #602020; - white-space: nowrap; -} -.paramname em { - font-style: normal; -} - -.params, .retval, .exception, .tparams { - border-spacing: 6px 2px; -} - -.params .paramname, .retval .paramname { - font-weight: bold; - vertical-align: top; -} - -.params .paramtype { - font-style: italic; - vertical-align: top; -} - -.params .paramdir { - font-family: "courier new",courier,monospace; - vertical-align: top; -} - - - - -/* @end */ - -/* @group Directory (tree) */ - -/* for the tree view */ - -.ftvtree { - font-family: sans-serif; - margin: 0px; -} - -/* these are for tree view when used as main index */ - -.directory { - font-size: 9pt; - font-weight: bold; - margin: 5px; -} - -.directory h3 { - margin: 0px; - margin-top: 1em; - font-size: 11pt; -} - -/* -The following two styles can be used to replace the root node title -with an image of your choice. Simply uncomment the next two styles, -specify the name of your image and be sure to set 'height' to the -proper pixel height of your image. -*/ - -/* -.directory h3.swap { - height: 61px; - background-repeat: no-repeat; - background-image: url("yourimage.gif"); -} -.directory h3.swap span { - display: none; -} -*/ - -.directory > h3 { - margin-top: 0; -} - -.directory p { - margin: 0px; - white-space: nowrap; -} - -.directory div { - display: none; - margin: 0px; -} - -.directory img { - vertical-align: -30%; -} - -/* these are for tree view when not used as main index */ - -.directory-alt { - font-size: 100%; - font-weight: bold; -} - -.directory-alt h3 { - margin: 0px; - margin-top: 1em; - font-size: 11pt; -} - -.directory-alt > h3 { - margin-top: 0; -} - -.directory-alt p { - margin: 0px; - white-space: nowrap; -} - -.directory-alt div { - display: none; - margin: 0px; -} - -.directory-alt img { - vertical-align: -30%; -} - -/* @end */ - -div.dynheader { - margin-top: 8px; -} - -address { - font-style: normal; - color: #2A3D61; -} - -table.doxtable { - border-collapse:collapse; -} - -table.doxtable td, table.doxtable th { - border: 1px solid #2D4068; - padding: 3px 7px 2px; -} - -table.doxtable th { - background-color: #374F7F; - color: #FFFFFF; - font-size: 110%; - padding-bottom: 4px; - padding-top: 5px; - text-align:left; -} - -.tabsearch { - top: 0px; - left: 10px; - height: 36px; - background-image: url('tab_b.png'); - z-index: 101; - overflow: hidden; - font-size: 13px; -} - -.navpath ul -{ - font-size: 11px; - background-image:url('tab_b.png'); - background-repeat:repeat-x; - height:30px; - line-height:30px; - color:#8AA0CC; - border:solid 1px #C2CDE4; - overflow:hidden; - margin:0px; - padding:0px; -} - -.navpath li -{ - list-style-type:none; - float:left; - padding-left:10px; - padding-right:15px; - background-image:url('bc_s.png'); - background-repeat:no-repeat; - background-position:right; - color:#364D7C; -} - -.navpath li.navelem a -{ - height:32px; - display:block; - text-decoration: none; - outline: none; -} - -.navpath li.navelem a:hover -{ - color:#6884BD; -} - -.navpath li.footer -{ - list-style-type:none; - float:right; - padding-left:10px; - padding-right:15px; - background-image:none; - background-repeat:no-repeat; - background-position:right; - color:#364D7C; - font-size: 8pt; -} - - -div.summary -{ - float: right; - font-size: 8pt; - padding-right: 5px; - width: 50%; - text-align: right; -} - -div.summary a -{ - white-space: nowrap; -} - -div.ingroups -{ - font-size: 8pt; - padding-left: 5px; - width: 50%; - text-align: left; -} - -div.ingroups a -{ - white-space: nowrap; -} - -div.header -{ - background-image:url('nav_h.png'); - background-repeat:repeat-x; - background-color: #F9FAFC; - margin: 0px; - border-bottom: 1px solid #C4CFE5; -} - -div.headertitle -{ - padding: 5px 5px 5px 10px; -} - -dl -{ - padding: 0 0 0 10px; -} - -dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug -{ - border-left:4px solid; - padding: 0 0 0 6px; -} - -dl.note -{ - border-color: #D0C000; -} - -dl.warning, dl.attention -{ - border-color: #FF0000; -} - -dl.pre, dl.post, dl.invariant -{ - border-color: #00D000; -} - -dl.deprecated -{ - border-color: #505050; -} - -dl.todo -{ - border-color: #00C0E0; -} - -dl.test -{ - border-color: #3030E0; -} - -dl.bug -{ - border-color: #C08050; -} - -#projectlogo -{ - text-align: center; - vertical-align: bottom; - border-collapse: separate; -} - -#projectlogo img -{ - border: 0px none; -} - -#projectname -{ - font: 300% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 2px 0px; -} - -#projectbrief -{ - font: 120% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 0px; -} - -#projectnumber -{ - font: 50% Tahoma, Arial,sans-serif; - margin: 0px; - padding: 0px; -} - -#titlearea -{ - padding: 0px; - margin: 0px; - width: 100%; - border-bottom: 1px solid #5373B4; -} - -.image -{ - text-align: center; -} - -.dotgraph -{ - text-align: center; -} - -.mscgraph -{ - text-align: center; -} - -.caption -{ - font-weight: bold; -} - diff --git a/libraries/LiquidCrystal/utility/docs/html/doxygen.png b/libraries/LiquidCrystal/utility/docs/html/doxygen.png deleted file mode 100644 index 635ed52..0000000 Binary files a/libraries/LiquidCrystal/utility/docs/html/doxygen.png and /dev/null differ diff --git a/libraries/LiquidCrystal/utility/docs/html/files.html b/libraries/LiquidCrystal/utility/docs/html/files.html deleted file mode 100644 index 6c7a45c..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/files.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - -LCD Library: File List - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- - - - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/ftv2blank.png b/libraries/LiquidCrystal/utility/docs/html/ftv2blank.png deleted file mode 100644 index 3b7a29c..0000000 Binary files a/libraries/LiquidCrystal/utility/docs/html/ftv2blank.png and /dev/null differ diff --git a/libraries/LiquidCrystal/utility/docs/html/ftv2doc.png b/libraries/LiquidCrystal/utility/docs/html/ftv2doc.png deleted file mode 100644 index 310e441..0000000 Binary files a/libraries/LiquidCrystal/utility/docs/html/ftv2doc.png and /dev/null differ diff --git a/libraries/LiquidCrystal/utility/docs/html/ftv2folderclosed.png b/libraries/LiquidCrystal/utility/docs/html/ftv2folderclosed.png deleted file mode 100644 index 79aeaf7..0000000 Binary files a/libraries/LiquidCrystal/utility/docs/html/ftv2folderclosed.png and /dev/null differ diff --git a/libraries/LiquidCrystal/utility/docs/html/ftv2folderopen.png b/libraries/LiquidCrystal/utility/docs/html/ftv2folderopen.png deleted file mode 100644 index 1b703dd..0000000 Binary files a/libraries/LiquidCrystal/utility/docs/html/ftv2folderopen.png and /dev/null differ diff --git a/libraries/LiquidCrystal/utility/docs/html/ftv2lastnode.png b/libraries/LiquidCrystal/utility/docs/html/ftv2lastnode.png deleted file mode 100644 index 3b7a29c..0000000 Binary files a/libraries/LiquidCrystal/utility/docs/html/ftv2lastnode.png and /dev/null differ diff --git a/libraries/LiquidCrystal/utility/docs/html/ftv2link.png b/libraries/LiquidCrystal/utility/docs/html/ftv2link.png deleted file mode 100644 index 310e441..0000000 Binary files a/libraries/LiquidCrystal/utility/docs/html/ftv2link.png and /dev/null differ diff --git a/libraries/LiquidCrystal/utility/docs/html/ftv2mlastnode.png b/libraries/LiquidCrystal/utility/docs/html/ftv2mlastnode.png deleted file mode 100644 index ec51f17..0000000 Binary files a/libraries/LiquidCrystal/utility/docs/html/ftv2mlastnode.png and /dev/null differ diff --git a/libraries/LiquidCrystal/utility/docs/html/ftv2mnode.png b/libraries/LiquidCrystal/utility/docs/html/ftv2mnode.png deleted file mode 100644 index ec51f17..0000000 Binary files a/libraries/LiquidCrystal/utility/docs/html/ftv2mnode.png and /dev/null differ diff --git a/libraries/LiquidCrystal/utility/docs/html/ftv2node.png b/libraries/LiquidCrystal/utility/docs/html/ftv2node.png deleted file mode 100644 index 3b7a29c..0000000 Binary files a/libraries/LiquidCrystal/utility/docs/html/ftv2node.png and /dev/null differ diff --git a/libraries/LiquidCrystal/utility/docs/html/ftv2plastnode.png b/libraries/LiquidCrystal/utility/docs/html/ftv2plastnode.png deleted file mode 100644 index 270a965..0000000 Binary files a/libraries/LiquidCrystal/utility/docs/html/ftv2plastnode.png and /dev/null differ diff --git a/libraries/LiquidCrystal/utility/docs/html/ftv2pnode.png b/libraries/LiquidCrystal/utility/docs/html/ftv2pnode.png deleted file mode 100644 index 270a965..0000000 Binary files a/libraries/LiquidCrystal/utility/docs/html/ftv2pnode.png and /dev/null differ diff --git a/libraries/LiquidCrystal/utility/docs/html/ftv2splitbar.png b/libraries/LiquidCrystal/utility/docs/html/ftv2splitbar.png deleted file mode 100644 index f60a527..0000000 Binary files a/libraries/LiquidCrystal/utility/docs/html/ftv2splitbar.png and /dev/null differ diff --git a/libraries/LiquidCrystal/utility/docs/html/ftv2vertline.png b/libraries/LiquidCrystal/utility/docs/html/ftv2vertline.png deleted file mode 100644 index 3b7a29c..0000000 Binary files a/libraries/LiquidCrystal/utility/docs/html/ftv2vertline.png and /dev/null differ diff --git a/libraries/LiquidCrystal/utility/docs/html/functions.html b/libraries/LiquidCrystal/utility/docs/html/functions.html deleted file mode 100644 index 926819a..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/functions.html +++ /dev/null @@ -1,359 +0,0 @@ - - - - -LCD Library: Class Members - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - - - -
-
- -
-
-
- -
-
-
Here is a list of all class members with links to the classes they belong to:
- -

- _ -

    -
  • _cols -: LCD -
  • -
  • _displaycontrol -: LCD -
  • -
  • _displayfunction -: LCD -
  • -
  • _displaymode -: LCD -
  • -
  • _numlines -: LCD -
  • -
  • _polarity -: LCD -
  • -
- - -

- a -

    -
  • autoscroll() -: LCD -
  • -
- - -

- b -

- - -

- c -

    -
  • clear() -: LCD -
  • -
  • createChar() -: LCD -
  • -
  • cursor() -: LCD -
  • -
- - -

- d -

    -
  • digitalRead() -: I2CIO -
  • -
  • digitalWrite() -: I2CIO -
  • -
  • display() -: LCD -
  • -
- - -

- h -

    -
  • home() -: LCD -
  • -
- - -

- i -

- - -

- l -

- - -

- m -

    -
  • moveCursorLeft() -: LCD -
  • -
  • moveCursorRight() -: LCD -
  • -
- - -

- n -

    -
  • noAutoscroll() -: LCD -
  • -
  • noBacklight() -: LCD -
  • -
  • noBlink() -: LCD -
  • -
  • noCursor() -: LCD -
  • -
  • noDisplay() -: LCD -
  • -
- - -

- o -

    -
  • off() -: LCD -
  • -
  • on() -: LCD -
  • -
- - -

- p -

- - -

- r -

    -
  • read() -: I2CIO -
  • -
  • rightToLeft() -: LCD -
  • -
- - -

- s -

- - -

- w -

-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/functions_func.html b/libraries/LiquidCrystal/utility/docs/html/functions_func.html deleted file mode 100644 index 314b6cb..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/functions_func.html +++ /dev/null @@ -1,336 +0,0 @@ - - - - -LCD Library: Class Members - Functions - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - - - -
-
- -
-
-
- -
-
-  - -

- a -

    -
  • autoscroll() -: LCD -
  • -
- - -

- b -

- - -

- c -

    -
  • clear() -: LCD -
  • -
  • createChar() -: LCD -
  • -
  • cursor() -: LCD -
  • -
- - -

- d -

    -
  • digitalRead() -: I2CIO -
  • -
  • digitalWrite() -: I2CIO -
  • -
  • display() -: LCD -
  • -
- - -

- h -

    -
  • home() -: LCD -
  • -
- - -

- i -

- - -

- l -

- - -

- m -

    -
  • moveCursorLeft() -: LCD -
  • -
  • moveCursorRight() -: LCD -
  • -
- - -

- n -

    -
  • noAutoscroll() -: LCD -
  • -
  • noBacklight() -: LCD -
  • -
  • noBlink() -: LCD -
  • -
  • noCursor() -: LCD -
  • -
  • noDisplay() -: LCD -
  • -
- - -

- o -

    -
  • off() -: LCD -
  • -
  • on() -: LCD -
  • -
- - -

- p -

- - -

- r -

    -
  • read() -: I2CIO -
  • -
  • rightToLeft() -: LCD -
  • -
- - -

- s -

- - -

- w -

-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/functions_vars.html b/libraries/LiquidCrystal/utility/docs/html/functions_vars.html deleted file mode 100644 index 086c706..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/functions_vars.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - -LCD Library: Class Members - Variables - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - - -
-
- -
-
-
- -
-
- 
    -
  • _cols -: LCD -
  • -
  • _displaycontrol -: LCD -
  • -
  • _displayfunction -: LCD -
  • -
  • _displaymode -: LCD -
  • -
  • _numlines -: LCD -
  • -
  • _polarity -: LCD -
  • -
-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/globals.html b/libraries/LiquidCrystal/utility/docs/html/globals.html deleted file mode 100644 index 29e1f62..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/globals.html +++ /dev/null @@ -1,490 +0,0 @@ - - - - -LCD Library: File Members - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - - - -
-
- -
-
-
- -
-
-
Here is a list of all file members with links to the files they belong to:
- -

- _ -

- - -

- a -

- - -

- b -

    -
  • BACKLIGHT_OFF -: LCD.h -
  • -
  • BACKLIGHT_ON -: LCD.h -
  • -
- - -

- c -

- - -

- d -

- - -

- e -

- - -

- f -

- - -

- h -

- - -

- l -

- - -

- n -

- - -

- p -

- - -

- r -

- - -

- s -

- - -

- t -

- - -

- w -

    -
  • waitUsec() -: LCD.h -
  • -
-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/globals_defs.html b/libraries/LiquidCrystal/utility/docs/html/globals_defs.html deleted file mode 100644 index 6fc2e40..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/globals_defs.html +++ /dev/null @@ -1,412 +0,0 @@ - - - - -LCD Library: File Members - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - - - -
-
- -
-
-
- -
-
-  - -

- _ -

- - -

- a -

- - -

- b -

    -
  • BACKLIGHT_OFF -: LCD.h -
  • -
  • BACKLIGHT_ON -: LCD.h -
  • -
- - -

- c -

- - -

- d -

- - -

- e -

- - -

- f -

- - -

- h -

    -
  • HOME_CLEAR_EXEC -: LCD.h -
  • -
- - -

- l -

- - -

- r -

- - -

- s -

- - -

- t -

-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/globals_enum.html b/libraries/LiquidCrystal/utility/docs/html/globals_enum.html deleted file mode 100644 index bb4e68a..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/globals_enum.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - -LCD Library: File Members - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - - -
-
- -
-
-
- -
-
-  -
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/globals_eval.html b/libraries/LiquidCrystal/utility/docs/html/globals_eval.html deleted file mode 100644 index 115e47e..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/globals_eval.html +++ /dev/null @@ -1,130 +0,0 @@ - - - - -LCD Library: File Members - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - - -
-
- -
-
-
- -
-
-  -
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/globals_func.html b/libraries/LiquidCrystal/utility/docs/html/globals_func.html deleted file mode 100644 index 38b6dbf..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/globals_func.html +++ /dev/null @@ -1,154 +0,0 @@ - - - - -LCD Library: File Members - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - - -
-
- -
-
-
- -
-
-  -
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/globals_type.html b/libraries/LiquidCrystal/utility/docs/html/globals_type.html deleted file mode 100644 index 47fb668..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/globals_type.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - -LCD Library: File Members - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - - -
-
- -
-
-
- -
-
-  -
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/hierarchy.html b/libraries/LiquidCrystal/utility/docs/html/hierarchy.html deleted file mode 100644 index 96a243b..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/hierarchy.html +++ /dev/null @@ -1,125 +0,0 @@ - - - - -LCD Library: Class Hierarchy - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- - -
-
- -
-
-
- -
-
-
-
Class Hierarchy
-
-
-
This inheritance list is sorted roughly, but not completely, alphabetically:
-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/index.html b/libraries/LiquidCrystal/utility/docs/html/index.html deleted file mode 100644 index 36a8581..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/index.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - -LCD Library: Main Page - - - - - - - - - - - - - -
-
- - - - - - - -
-
LCD Library 1.3.0
-
LCD Library - LCD control class hierarchy library. Drop in replacement for the LiquidCrystal Library.
-
-
- -
-
- -
-
-
- -
-
-
-
LCD Library Documentation
-
-
-
-
- - - - - -
- -
- - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/installdox b/libraries/LiquidCrystal/utility/docs/html/installdox deleted file mode 100644 index edf5bbf..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/installdox +++ /dev/null @@ -1,112 +0,0 @@ -#!/usr/bin/perl - -%subst = ( ); -$quiet = 0; - -while ( @ARGV ) { - $_ = shift @ARGV; - if ( s/^-// ) { - if ( /^l(.*)/ ) { - $v = ($1 eq "") ? shift @ARGV : $1; - ($v =~ /\/$/) || ($v .= "/"); - $_ = $v; - if ( /(.+)\@(.+)/ ) { - if ( exists $subst{$1} ) { - $subst{$1} = $2; - } else { - print STDERR "Unknown tag file $1 given with option -l\n"; - &usage(); - } - } else { - print STDERR "Argument $_ is invalid for option -l\n"; - &usage(); - } - } - elsif ( /^q/ ) { - $quiet = 1; - } - elsif ( /^\?|^h/ ) { - &usage(); - } - else { - print STDERR "Illegal option -$_\n"; - &usage(); - } - } - else { - push (@files, $_ ); - } -} - -foreach $sub (keys %subst) -{ - if ( $subst{$sub} eq "" ) - { - print STDERR "No substitute given for tag file `$sub'\n"; - &usage(); - } - elsif ( ! $quiet && $sub ne "_doc" && $sub ne "_cgi" ) - { - print "Substituting $subst{$sub} for each occurrence of tag file $sub\n"; - } -} - -if ( ! @files ) { - if (opendir(D,".")) { - foreach $file ( readdir(D) ) { - $match = ".html"; - next if ( $file =~ /^\.\.?$/ ); - ($file =~ /$match/) && (push @files, $file); - ($file =~ /\.svg/) && (push @files, $file); - ($file =~ "navtree.js") && (push @files, $file); - } - closedir(D); - } -} - -if ( ! @files ) { - print STDERR "Warning: No input files given and none found!\n"; -} - -foreach $f (@files) -{ - if ( ! $quiet ) { - print "Editing: $f...\n"; - } - $oldf = $f; - $f .= ".bak"; - unless (rename $oldf,$f) { - print STDERR "Error: cannot rename file $oldf\n"; - exit 1; - } - if (open(F,"<$f")) { - unless (open(G,">$oldf")) { - print STDERR "Error: opening file $oldf for writing\n"; - exit 1; - } - if ($oldf ne "tree.js") { - while () { - s/doxygen\=\"([^ \"\:\t\>\<]*)\:([^ \"\t\>\<]*)\" (xlink:href|href|src)=\"\2/doxygen\=\"$1:$subst{$1}\" \3=\"$subst{$1}/g; - print G "$_"; - } - } - else { - while () { - s/\"([^ \"\:\t\>\<]*)\:([^ \"\t\>\<]*)\", \"\2/\"$1:$subst{$1}\" ,\"$subst{$1}/g; - print G "$_"; - } - } - } - else { - print STDERR "Warning file $f does not exist\n"; - } - unlink $f; -} - -sub usage { - print STDERR "Usage: installdox [options] [html-file [html-file ...]]\n"; - print STDERR "Options:\n"; - print STDERR " -l tagfile\@linkName tag file + URL or directory \n"; - print STDERR " -q Quiet mode\n\n"; - exit 1; -} diff --git a/libraries/LiquidCrystal/utility/docs/html/jquery.js b/libraries/LiquidCrystal/utility/docs/html/jquery.js deleted file mode 100644 index c052173..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/jquery.js +++ /dev/null @@ -1,54 +0,0 @@ -/* - * jQuery JavaScript Library v1.3.2 - * http://jquery.com/ - * - * Copyright (c) 2009 John Resig - * Dual licensed under the MIT and GPL licenses. - * http://docs.jquery.com/License - * - * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009) - * Revision: 6246 - */ -(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("",""]||!O.indexOf("",""]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"","
"]||!O.indexOf("",""]||(!O.indexOf("",""]||!O.indexOf("",""]||!o.support.htmlSerialize&&[1,"div
","
"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}}); -/* - * Sizzle CSS Selector Engine - v0.9.3 - * Copyright 2009, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * More information: http://sizzlejs.com/ - */ -(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return UT[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="

";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="
";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0) -{I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("
").append(M.responseText.replace(//g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function() -{G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='
';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})(); -/* - * jQuery UI 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI - */ -jQuery.ui||(function(c){var i=c.fn.remove,d=c.browser.mozilla&&(parseFloat(c.browser.version)<1.9);c.ui={version:"1.7.2",plugin:{add:function(k,l,n){var m=c.ui[k].prototype;for(var j in n){m.plugins[j]=m.plugins[j]||[];m.plugins[j].push([l,n[j]])}},call:function(j,l,k){var n=j.plugins[l];if(!n||!j.element[0].parentNode){return}for(var m=0;m0){return true}m[j]=1;l=(m[j]>0);m[j]=0;return l},isOverAxis:function(k,j,l){return(k>j)&&(k<(j+l))},isOver:function(o,k,n,m,j,l){return c.ui.isOverAxis(o,n,j)&&c.ui.isOverAxis(k,m,l)},keyCode:{BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38}};if(d){var f=c.attr,e=c.fn.removeAttr,h="http://www.w3.org/2005/07/aaa",a=/^aria-/,b=/^wairole:/;c.attr=function(k,j,l){var m=l!==undefined;return(j=="role"?(m?f.call(this,k,j,"wairole:"+l):(f.apply(this,arguments)||"").replace(b,"")):(a.test(j)?(m?k.setAttributeNS(h,j.replace(a,"aaa:"),l):f.call(this,k,j.replace(a,"aaa:"))):f.apply(this,arguments)))};c.fn.removeAttr=function(j){return(a.test(j)?this.each(function(){this.removeAttributeNS(h,j.replace(a,""))}):e.call(this,j))}}c.fn.extend({remove:function(){c("*",this).add(this).each(function(){c(this).triggerHandler("remove")});return i.apply(this,arguments)},enableSelection:function(){return this.attr("unselectable","off").css("MozUserSelect","").unbind("selectstart.ui")},disableSelection:function(){return this.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return false})},scrollParent:function(){var j;if((c.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){j=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(c.curCSS(this,"position",1))&&(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}else{j=this.parents().filter(function(){return(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!j.length?c(document):j}});c.extend(c.expr[":"],{data:function(l,k,j){return !!c.data(l,j[3])},focusable:function(k){var l=k.nodeName.toLowerCase(),j=c.attr(k,"tabindex");return(/input|select|textarea|button|object/.test(l)?!k.disabled:"a"==l||"area"==l?k.href||!isNaN(j):!isNaN(j))&&!c(k)["area"==l?"parents":"closest"](":hidden").length},tabbable:function(k){var j=c.attr(k,"tabindex");return(isNaN(j)||j>=0)&&c(k).is(":focusable")}});function g(m,n,o,l){function k(q){var p=c[m][n][q]||[];return(typeof p=="string"?p.split(/,?\s+/):p)}var j=k("getter");if(l.length==1&&typeof l[0]=="string"){j=j.concat(k("getterSetter"))}return(c.inArray(o,j)!=-1)}c.widget=function(k,j){var l=k.split(".")[0];k=k.split(".")[1];c.fn[k]=function(p){var n=(typeof p=="string"),o=Array.prototype.slice.call(arguments,1);if(n&&p.substring(0,1)=="_"){return this}if(n&&g(l,k,p,o)){var m=c.data(this[0],k);return(m?m[p].apply(m,o):undefined)}return this.each(function(){var q=c.data(this,k);(!q&&!n&&c.data(this,k,new c[l][k](this,p))._init());(q&&n&&c.isFunction(q[p])&&q[p].apply(q,o))})};c[l]=c[l]||{};c[l][k]=function(o,n){var m=this;this.namespace=l;this.widgetName=k;this.widgetEventPrefix=c[l][k].eventPrefix||k;this.widgetBaseClass=l+"-"+k;this.options=c.extend({},c.widget.defaults,c[l][k].defaults,c.metadata&&c.metadata.get(o)[k],n);this.element=c(o).bind("setData."+k,function(q,p,r){if(q.target==o){return m._setData(p,r)}}).bind("getData."+k,function(q,p){if(q.target==o){return m._getData(p)}}).bind("remove",function(){return m.destroy()})};c[l][k].prototype=c.extend({},c.widget.prototype,j);c[l][k].getterSetter="option"};c.widget.prototype={_init:function(){},destroy:function(){this.element.removeData(this.widgetName).removeClass(this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").removeAttr("aria-disabled")},option:function(l,m){var k=l,j=this;if(typeof l=="string"){if(m===undefined){return this._getData(l)}k={};k[l]=m}c.each(k,function(n,o){j._setData(n,o)})},_getData:function(j){return this.options[j]},_setData:function(j,k){this.options[j]=k;if(j=="disabled"){this.element[k?"addClass":"removeClass"](this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").attr("aria-disabled",k)}},enable:function(){this._setData("disabled",false)},disable:function(){this._setData("disabled",true)},_trigger:function(l,m,n){var p=this.options[l],j=(l==this.widgetEventPrefix?l:this.widgetEventPrefix+l);m=c.Event(m);m.type=j;if(m.originalEvent){for(var k=c.event.props.length,o;k;){o=c.event.props[--k];m[o]=m.originalEvent[o]}}this.element.trigger(m,n);return !(c.isFunction(p)&&p.call(this.element[0],m,n)===false||m.isDefaultPrevented())}};c.widget.defaults={disabled:false};c.ui.mouse={_mouseInit:function(){var j=this;this.element.bind("mousedown."+this.widgetName,function(k){return j._mouseDown(k)}).bind("click."+this.widgetName,function(k){if(j._preventClickEvent){j._preventClickEvent=false;k.stopImmediatePropagation();return false}});if(c.browser.msie){this._mouseUnselectable=this.element.attr("unselectable");this.element.attr("unselectable","on")}this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName);(c.browser.msie&&this.element.attr("unselectable",this._mouseUnselectable))},_mouseDown:function(l){l.originalEvent=l.originalEvent||{};if(l.originalEvent.mouseHandled){return}(this._mouseStarted&&this._mouseUp(l));this._mouseDownEvent=l;var k=this,m=(l.which==1),j=(typeof this.options.cancel=="string"?c(l.target).parents().add(l.target).filter(this.options.cancel).length:false);if(!m||j||!this._mouseCapture(l)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){k.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(l)&&this._mouseDelayMet(l)){this._mouseStarted=(this._mouseStart(l)!==false);if(!this._mouseStarted){l.preventDefault();return true}}this._mouseMoveDelegate=function(n){return k._mouseMove(n)};this._mouseUpDelegate=function(n){return k._mouseUp(n)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);(c.browser.safari||l.preventDefault());l.originalEvent.mouseHandled=true;return true},_mouseMove:function(j){if(c.browser.msie&&!j.button){return this._mouseUp(j)}if(this._mouseStarted){this._mouseDrag(j);return j.preventDefault()}if(this._mouseDistanceMet(j)&&this._mouseDelayMet(j)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,j)!==false);(this._mouseStarted?this._mouseDrag(j):this._mouseUp(j))}return !this._mouseStarted},_mouseUp:function(j){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=(j.target==this._mouseDownEvent.target);this._mouseStop(j)}return false},_mouseDistanceMet:function(j){return(Math.max(Math.abs(this._mouseDownEvent.pageX-j.pageX),Math.abs(this._mouseDownEvent.pageY-j.pageY))>=this.options.distance)},_mouseDelayMet:function(j){return this.mouseDelayMet},_mouseStart:function(j){},_mouseDrag:function(j){},_mouseStop:function(j){},_mouseCapture:function(j){return true}};c.ui.mouse.defaults={cancel:null,distance:1,delay:0}})(jQuery);;/* * jQuery UI Resizable 1.7.2 - * - * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * http://docs.jquery.com/UI/Resizables - * - * Depends: - * ui.core.js - */ -(function(c){c.widget("ui.resizable",c.extend({},c.ui.mouse,{_init:function(){var e=this,j=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(j.aspectRatio),aspectRatio:j.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:j.helper||j.ghost||j.animate?j.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){if(/relative/.test(this.element.css("position"))&&c.browser.opera){this.element.css({position:"relative",top:"auto",left:"auto"})}this.element.wrap(c('
').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=j.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var k=this.handles.split(",");this.handles={};for(var f=0;f
');if(/sw|se|ne|nw/.test(h)){g.css({zIndex:++j.zIndex})}if("se"==h){g.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[h]=".ui-resizable-"+h;this.element.append(g)}}this._renderAxis=function(p){p=p||this.element;for(var m in this.handles){if(this.handles[m].constructor==String){this.handles[m]=c(this.handles[m],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var n=c(this.handles[m],this.element),o=0;o=/sw|ne|nw|se|n|s/.test(m)?n.outerHeight():n.outerWidth();var l=["padding",/ne|nw|n/.test(m)?"Top":/se|sw|s/.test(m)?"Bottom":/^e$/.test(m)?"Right":"Left"].join("");p.css(l,o);this._proportionallyResize()}if(!c(this.handles[m]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!e.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}e.axis=i&&i[1]?i[1]:"se"}});if(j.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){c(this).removeClass("ui-resizable-autohide");e._handles.show()},function(){if(!e.resizing){c(this).addClass("ui-resizable-autohide");e._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var d=function(f){c(f).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){d(this.element);var e=this.element;e.parent().append(this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")})).end().remove()}this.originalElement.css("resize",this.originalResizeStyle);d(this.originalElement)},_mouseCapture:function(e){var f=false;for(var d in this.handles){if(c(this.handles[d])[0]==e.target){f=true}}return this.options.disabled||!!f},_mouseStart:function(f){var i=this.options,e=this.element.position(),d=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(d.is(".ui-draggable")||(/absolute/).test(d.css("position"))){d.css({position:"absolute",top:e.top,left:e.left})}if(c.browser.opera&&(/relative/).test(d.css("position"))){d.css({position:"relative",top:"auto",left:"auto"})}this._renderProxy();var j=b(this.helper.css("left")),g=b(this.helper.css("top"));if(i.containment){j+=c(i.containment).scrollLeft()||0;g+=c(i.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:j,top:g};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:j,top:g};this.sizeDiff={width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:f.pageX,top:f.pageY};this.aspectRatio=(typeof i.aspectRatio=="number")?i.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var h=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",h=="auto"?this.axis+"-resize":h);d.addClass("ui-resizable-resizing");this._propagate("start",f);return true},_mouseDrag:function(d){var g=this.helper,f=this.options,l={},p=this,i=this.originalMousePosition,m=this.axis;var q=(d.pageX-i.left)||0,n=(d.pageY-i.top)||0;var h=this._change[m];if(!h){return false}var k=h.apply(this,[d,q,n]),j=c.browser.msie&&c.browser.version<7,e=this.sizeDiff;if(this._aspectRatio||d.shiftKey){k=this._updateRatio(k,d)}k=this._respectSize(k,d);this._propagate("resize",d);g.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(k);this._trigger("resize",d,this.ui());return false},_mouseStop:function(g){this.resizing=false;var h=this.options,l=this;if(this._helper){var f=this._proportionallyResizeElements,d=f.length&&(/textarea/i).test(f[0].nodeName),e=d&&c.ui.hasScroll(f[0],"left")?0:l.sizeDiff.height,j=d?0:l.sizeDiff.width;var m={width:(l.size.width-j),height:(l.size.height-e)},i=(parseInt(l.element.css("left"),10)+(l.position.left-l.originalPosition.left))||null,k=(parseInt(l.element.css("top"),10)+(l.position.top-l.originalPosition.top))||null;if(!h.animate){this.element.css(c.extend(m,{top:k,left:i}))}l.helper.height(l.size.height);l.helper.width(l.size.width);if(this._helper&&!h.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",g);if(this._helper){this.helper.remove()}return false},_updateCache:function(d){var e=this.options;this.offset=this.helper.offset();if(a(d.left)){this.position.left=d.left}if(a(d.top)){this.position.top=d.top}if(a(d.height)){this.size.height=d.height}if(a(d.width)){this.size.width=d.width}},_updateRatio:function(g,f){var h=this.options,i=this.position,e=this.size,d=this.axis;if(g.height){g.width=(e.height*this.aspectRatio)}else{if(g.width){g.height=(e.width/this.aspectRatio)}}if(d=="sw"){g.left=i.left+(e.width-g.width);g.top=null}if(d=="nw"){g.top=i.top+(e.height-g.height);g.left=i.left+(e.width-g.width)}return g},_respectSize:function(k,f){var i=this.helper,h=this.options,q=this._aspectRatio||f.shiftKey,p=this.axis,s=a(k.width)&&h.maxWidth&&(h.maxWidthk.width),r=a(k.height)&&h.minHeight&&(h.minHeight>k.height);if(g){k.width=h.minWidth}if(r){k.height=h.minHeight}if(s){k.width=h.maxWidth}if(l){k.height=h.maxHeight}var e=this.originalPosition.left+this.originalSize.width,n=this.position.top+this.size.height;var j=/sw|nw|w/.test(p),d=/nw|ne|n/.test(p);if(g&&j){k.left=e-h.minWidth}if(s&&j){k.left=e-h.maxWidth}if(r&&d){k.top=n-h.minHeight}if(l&&d){k.top=n-h.maxHeight}var m=!k.width&&!k.height;if(m&&!k.left&&k.top){k.top=null}else{if(m&&!k.top&&k.left){k.left=null}}return k},_proportionallyResize:function(){var j=this.options;if(!this._proportionallyResizeElements.length){return}var f=this.helper||this.element;for(var e=0;e');var d=c.browser.msie&&c.browser.version<7,f=(d?1:0),g=(d?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+g,height:this.element.outerHeight()+g,position:"absolute",left:this.elementOffset.left-f+"px",top:this.elementOffset.top-f+"px",zIndex:++h.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(f,e,d){return{width:this.originalSize.width+e}},w:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{left:h.left+e,width:f.width-e}},n:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{top:h.top+d,height:f.height-d}},s:function(f,e,d){return{height:this.originalSize.height+d}},se:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},sw:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[f,e,d]))},ne:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},nw:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[f,e,d]))}},_propagate:function(e,d){c.ui.plugin.call(this,e,[d,this.ui()]);(e!="resize"&&this._trigger(e,d,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}));c.extend(c.ui.resizable,{version:"1.7.2",eventPrefix:"resize",defaults:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,cancel:":input,option",containment:false,delay:0,distance:1,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000}});c.ui.plugin.add("resizable","alsoResize",{start:function(e,f){var d=c(this).data("resizable"),g=d.options;_store=function(h){c(h).each(function(){c(this).data("resizable-alsoresize",{width:parseInt(c(this).width(),10),height:parseInt(c(this).height(),10),left:parseInt(c(this).css("left"),10),top:parseInt(c(this).css("top"),10)})})};if(typeof(g.alsoResize)=="object"&&!g.alsoResize.parentNode){if(g.alsoResize.length){g.alsoResize=g.alsoResize[0];_store(g.alsoResize)}else{c.each(g.alsoResize,function(h,i){_store(h)})}}else{_store(g.alsoResize)}},resize:function(f,h){var e=c(this).data("resizable"),i=e.options,g=e.originalSize,k=e.originalPosition;var j={height:(e.size.height-g.height)||0,width:(e.size.width-g.width)||0,top:(e.position.top-k.top)||0,left:(e.position.left-k.left)||0},d=function(l,m){c(l).each(function(){var p=c(this),q=c(this).data("resizable-alsoresize"),o={},n=m&&m.length?m:["width","height","top","left"];c.each(n||["width","height","top","left"],function(r,t){var s=(q[t]||0)+(j[t]||0);if(s&&s>=0){o[t]=s||null}});if(/relative/.test(p.css("position"))&&c.browser.opera){e._revertToRelativePosition=true;p.css({position:"absolute",top:"auto",left:"auto"})}p.css(o)})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.nodeType){c.each(i.alsoResize,function(l,m){d(l,m)})}else{d(i.alsoResize)}},stop:function(e,f){var d=c(this).data("resizable");if(d._revertToRelativePosition&&c.browser.opera){d._revertToRelativePosition=false;el.css({position:"relative"})}c(this).removeData("resizable-alsoresize-start")}});c.ui.plugin.add("resizable","animate",{stop:function(h,m){var n=c(this).data("resizable"),i=n.options;var g=n._proportionallyResizeElements,d=g.length&&(/textarea/i).test(g[0].nodeName),e=d&&c.ui.hasScroll(g[0],"left")?0:n.sizeDiff.height,k=d?0:n.sizeDiff.width;var f={width:(n.size.width-k),height:(n.size.height-e)},j=(parseInt(n.element.css("left"),10)+(n.position.left-n.originalPosition.left))||null,l=(parseInt(n.element.css("top"),10)+(n.position.top-n.originalPosition.top))||null;n.element.animate(c.extend(f,l&&j?{top:l,left:j}:{}),{duration:i.animateDuration,easing:i.animateEasing,step:function(){var o={width:parseInt(n.element.css("width"),10),height:parseInt(n.element.css("height"),10),top:parseInt(n.element.css("top"),10),left:parseInt(n.element.css("left"),10)};if(g&&g.length){c(g[0]).css({width:o.width,height:o.height})}n._updateCache(o);n._propagate("resize",h)}})}});c.ui.plugin.add("resizable","containment",{start:function(e,q){var s=c(this).data("resizable"),i=s.options,k=s.element;var f=i.containment,j=(f instanceof c)?f.get(0):(/parent/.test(f))?k.parent().get(0):f;if(!j){return}s.containerElement=c(j);if(/document/.test(f)||f==document){s.containerOffset={left:0,top:0};s.containerPosition={left:0,top:0};s.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var m=c(j),h=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){h[p]=b(m.css("padding"+o))});s.containerOffset=m.offset();s.containerPosition=m.position();s.containerSize={height:(m.innerHeight()-h[3]),width:(m.innerWidth()-h[1])};var n=s.containerOffset,d=s.containerSize.height,l=s.containerSize.width,g=(c.ui.hasScroll(j,"left")?j.scrollWidth:l),r=(c.ui.hasScroll(j)?j.scrollHeight:d);s.parentData={element:j,left:n.left,top:n.top,width:g,height:r}}},resize:function(f,p){var s=c(this).data("resizable"),h=s.options,e=s.containerSize,n=s.containerOffset,l=s.size,m=s.position,q=s._aspectRatio||f.shiftKey,d={top:0,left:0},g=s.containerElement;if(g[0]!=document&&(/static/).test(g.css("position"))){d=n}if(m.left<(s._helper?n.left:0)){s.size.width=s.size.width+(s._helper?(s.position.left-n.left):(s.position.left-d.left));if(q){s.size.height=s.size.width/h.aspectRatio}s.position.left=h.helper?n.left:0}if(m.top<(s._helper?n.top:0)) -{s.size.height=s.size.height+(s._helper?(s.position.top-n.top):s.position.top);if(q){s.size.width=s.size.height*h.aspectRatio}s.position.top=s._helper?n.top:0}s.offset.left=s.parentData.left+s.position.left;s.offset.top=s.parentData.top+s.position.top;var k=Math.abs((s._helper?s.offset.left-d.left:(s.offset.left-d.left))+s.sizeDiff.width),r=Math.abs((s._helper?s.offset.top-d.top:(s.offset.top-n.top))+s.sizeDiff.height);var j=s.containerElement.get(0)==s.element.parent().get(0),i=/relative|absolute/.test(s.containerElement.css("position"));if(j&&i){k-=s.parentData.left}if(k+s.size.width>=s.parentData.width){s.size.width=s.parentData.width-k;if(q){s.size.height=s.size.width/s.aspectRatio}}if(r+s.size.height>=s.parentData.height){s.size.height=s.parentData.height-r;if(q){s.size.width=s.size.height*s.aspectRatio}}},stop:function(e,m){var p=c(this).data("resizable"),f=p.options,k=p.position,l=p.containerOffset,d=p.containerPosition,g=p.containerElement;var i=c(p.helper),q=i.offset(),n=i.outerWidth()-p.sizeDiff.width,j=i.outerHeight()-p.sizeDiff.height;if(p._helper&&!f.animate&&(/relative/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}if(p._helper&&!f.animate&&(/static/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}}});c.ui.plugin.add("resizable","ghost",{start:function(f,g){var d=c(this).data("resizable"),h=d.options,e=d.size;d.ghost=d.originalElement.clone();d.ghost.css({opacity:0.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof h.ghost=="string"?h.ghost:"");d.ghost.appendTo(d.helper)},resize:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost){d.ghost.css({position:"relative",height:d.size.height,width:d.size.width})}},stop:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost&&d.helper){d.helper.get(0).removeChild(d.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(d,l){var n=c(this).data("resizable"),g=n.options,j=n.size,h=n.originalSize,i=n.originalPosition,m=n.axis,k=g._aspectRatio||d.shiftKey;g.grid=typeof g.grid=="number"?[g.grid,g.grid]:g.grid;var f=Math.round((j.width-h.width)/(g.grid[0]||1))*(g.grid[0]||1),e=Math.round((j.height-h.height)/(g.grid[1]||1))*(g.grid[1]||1);if(/^(se|s|e)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e}else{if(/^(ne)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e}else{if(/^(sw)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.left=i.left-f}else{n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e;n.position.left=i.left-f}}}}});var b=function(d){return parseInt(d,10)||0};var a=function(d){return !isNaN(parseInt(d,10))}})(jQuery);; -/** - * jQuery.ScrollTo - Easy element scrolling using jQuery. - * Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com - * Licensed under GPL license (http://www.opensource.org/licenses/gpl-license.php). - * Date: 2/8/2008 - * @author Ariel Flesler - * @version 1.3.2 - */ -;(function($){var o=$.scrollTo=function(a,b,c){o.window().scrollTo(a,b,c)};o.defaults={axis:'y',duration:1};o.window=function(){return $($.browser.safari?'body':'html')};$.fn.scrollTo=function(l,m,n){if(typeof m=='object'){n=m;m=0}n=$.extend({},o.defaults,n);m=m||n.speed||n.duration;n.queue=n.queue&&n.axis.length>1;if(n.queue)m/=2;n.offset=j(n.offset);n.over=j(n.over);return this.each(function(){var a=this,b=$(a),t=l,c,d={},w=b.is('html,body');switch(typeof t){case'number':case'string':if(/^([+-]=)?\d+(px)?$/.test(t)){t=j(t);break}t=$(t,this);case'object':if(t.is||t.style)c=(t=$(t)).offset()}$.each(n.axis.split(''),function(i,f){var P=f=='x'?'Left':'Top',p=P.toLowerCase(),k='scroll'+P,e=a[k],D=f=='x'?'Width':'Height';if(c){d[k]=c[p]+(w?0:e-b.offset()[p]);if(n.margin){d[k]-=parseInt(t.css('margin'+P))||0;d[k]-=parseInt(t.css('border'+P+'Width'))||0}d[k]+=n.offset[p]||0;if(n.over[p])d[k]+=t[D.toLowerCase()]()*n.over[p]}else d[k]=t[p];if(/^\d+$/.test(d[k]))d[k]=d[k]<=0?0:Math.min(d[k],h(D));if(!i&&n.queue){if(e!=d[k])g(n.onAfterFirst);delete d[k]}});g(n.onAfter);function g(a){b.animate(d,m,n.easing,a&&function(){a.call(this,l)})};function h(D){var b=w?$.browser.opera?document.body:document.documentElement:a;return b['scroll'+D]-b['client'+D]}})};function j(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery); - diff --git a/libraries/LiquidCrystal/utility/docs/html/logoGoogle.jpg b/libraries/LiquidCrystal/utility/docs/html/logoGoogle.jpg deleted file mode 100644 index 28f6ae1..0000000 Binary files a/libraries/LiquidCrystal/utility/docs/html/logoGoogle.jpg and /dev/null differ diff --git a/libraries/LiquidCrystal/utility/docs/html/nav_f.png b/libraries/LiquidCrystal/utility/docs/html/nav_f.png deleted file mode 100644 index 1b07a16..0000000 Binary files a/libraries/LiquidCrystal/utility/docs/html/nav_f.png and /dev/null differ diff --git a/libraries/LiquidCrystal/utility/docs/html/nav_h.png b/libraries/LiquidCrystal/utility/docs/html/nav_h.png deleted file mode 100644 index 01f5fa6..0000000 Binary files a/libraries/LiquidCrystal/utility/docs/html/nav_h.png and /dev/null differ diff --git a/libraries/LiquidCrystal/utility/docs/html/navtree.css b/libraries/LiquidCrystal/utility/docs/html/navtree.css deleted file mode 100644 index e46ffcd..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/navtree.css +++ /dev/null @@ -1,123 +0,0 @@ -#nav-tree .children_ul { - margin:0; - padding:4px; -} - -#nav-tree ul { - list-style:none outside none; - margin:0px; - padding:0px; -} - -#nav-tree li { - white-space:nowrap; - margin:0px; - padding:0px; -} - -#nav-tree .plus { - margin:0px; -} - -#nav-tree .selected { - background-image: url('tab_a.png'); - background-repeat:repeat-x; - color: #fff; - text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); -} - -#nav-tree img { - margin:0px; - padding:0px; - border:0px; - vertical-align: middle; -} - -#nav-tree a { - text-decoration:none; - padding:0px; - margin:0px; - outline:none; -} - -#nav-tree .label { - margin:0px; - padding:0px; -} - -#nav-tree .label a { - padding:2px; -} - -#nav-tree .selected a { - text-decoration:none; - padding:2px; - margin:0px; - color:#fff; -} - -#nav-tree .children_ul { - margin:0px; - padding:0px; -} - -#nav-tree .item { - margin:0px; - padding:0px; -} - -#nav-tree { - padding: 0px 0px; - background-color: #FAFAFF; - font-size:14px; - overflow:auto; -} - -#doc-content { - overflow:auto; - display:block; - padding:0px; - margin:0px; -} - -#side-nav { - padding:0 6px 0 0; - margin: 0px; - display:block; - position: absolute; - left: 0px; - width: 300px; -} - -.ui-resizable .ui-resizable-handle { - display:block; -} - -.ui-resizable-e { - background:url("ftv2splitbar.png") repeat scroll right center transparent; - cursor:e-resize; - height:100%; - right:0; - top:0; - width:6px; -} - -.ui-resizable-handle { - display:none; - font-size:0.1px; - position:absolute; - z-index:1; -} - -#nav-tree-contents { - margin: 6px 0px 0px 0px; -} - -#nav-tree { - background-image:url('nav_h.png'); - background-repeat:repeat-x; - background-color: #F9FAFC; -} - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/navtree.js b/libraries/LiquidCrystal/utility/docs/html/navtree.js deleted file mode 100644 index 2f5fb26..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/navtree.js +++ /dev/null @@ -1,299 +0,0 @@ -var NAVTREE = -[ - [ "LCD Library", "index.html", [ - [ "Class List", "annotated.html", [ - [ "I2CIO", "class_i2_c_i_o.html", null ], - [ "LCD", "class_l_c_d.html", null ], - [ "LiquidCrystal", "class_liquid_crystal.html", null ], - [ "LiquidCrystal_I2C", "class_liquid_crystal___i2_c.html", null ], - [ "LiquidCrystal_I2C_ByVac", "class_liquid_crystal___i2_c___by_vac.html", null ], - [ "LiquidCrystal_SR", "class_liquid_crystal___s_r.html", null ], - [ "LiquidCrystal_SR1W", "class_liquid_crystal___s_r1_w.html", null ], - [ "LiquidCrystal_SR2W", "class_liquid_crystal___s_r2_w.html", null ], - [ "LiquidCrystal_SR3W", "class_liquid_crystal___s_r3_w.html", null ] - ] ], - [ "Class Index", "classes.html", null ], - [ "Class Hierarchy", "hierarchy.html", [ - [ "I2CIO", "class_i2_c_i_o.html", null ], - [ "LCD", "class_l_c_d.html", [ - [ "LiquidCrystal", "class_liquid_crystal.html", null ], - [ "LiquidCrystal_I2C", "class_liquid_crystal___i2_c.html", null ], - [ "LiquidCrystal_I2C_ByVac", "class_liquid_crystal___i2_c___by_vac.html", null ], - [ "LiquidCrystal_SR", "class_liquid_crystal___s_r.html", null ], - [ "LiquidCrystal_SR1W", "class_liquid_crystal___s_r1_w.html", null ], - [ "LiquidCrystal_SR2W", "class_liquid_crystal___s_r2_w.html", null ], - [ "LiquidCrystal_SR3W", "class_liquid_crystal___s_r3_w.html", null ] - ] ] - ] ], - [ "Class Members", "functions.html", null ], - [ "File List", "files.html", [ - [ "FastIO.cpp", "_fast_i_o_8cpp.html", null ], - [ "FastIO.h", "_fast_i_o_8h.html", null ], - [ "I2CIO.cpp", "_i2_c_i_o_8cpp.html", null ], - [ "I2CIO.h", "_i2_c_i_o_8h.html", null ], - [ "LCD.cpp", "_l_c_d_8cpp.html", null ], - [ "LCD.h", "_l_c_d_8h.html", null ], - [ "LiquidCrystal.cpp", "_liquid_crystal_8cpp.html", null ], - [ "LiquidCrystal.h", "_liquid_crystal_8h.html", null ], - [ "LiquidCrystal_I2C.cpp", "_liquid_crystal___i2_c_8cpp.html", null ], - [ "LiquidCrystal_I2C.h", "_liquid_crystal___i2_c_8h.html", null ], - [ "LiquidCrystal_I2C_ByVac.cpp", "_liquid_crystal___i2_c___by_vac_8cpp.html", null ], - [ "LiquidCrystal_I2C_ByVac.h", "_liquid_crystal___i2_c___by_vac_8h.html", null ], - [ "LiquidCrystal_SR.cpp", "_liquid_crystal___s_r_8cpp.html", null ], - [ "LiquidCrystal_SR.h", "_liquid_crystal___s_r_8h.html", null ], - [ "LiquidCrystal_SR1W.cpp", "_liquid_crystal___s_r1_w_8cpp.html", null ], - [ "LiquidCrystal_SR1W.h", "_liquid_crystal___s_r1_w_8h.html", null ], - [ "LiquidCrystal_SR2W.cpp", "_liquid_crystal___s_r2_w_8cpp.html", null ], - [ "LiquidCrystal_SR2W.h", "_liquid_crystal___s_r2_w_8h.html", null ], - [ "LiquidCrystal_SR3W.cpp", "_liquid_crystal___s_r3_w_8cpp.html", null ], - [ "LiquidCrystal_SR3W.h", "_liquid_crystal___s_r3_w_8h.html", null ] - ] ], - [ "File Members", "globals.html", null ] - ] ] -]; - -function createIndent(o,domNode,node,level) -{ - if (node.parentNode && node.parentNode.parentNode) - { - createIndent(o,domNode,node.parentNode,level+1); - } - var imgNode = document.createElement("img"); - if (level==0 && node.childrenData) - { - node.plus_img = imgNode; - node.expandToggle = document.createElement("a"); - node.expandToggle.href = "javascript:void(0)"; - node.expandToggle.onclick = function() - { - if (node.expanded) - { - $(node.getChildrenUL()).slideUp("fast"); - if (node.isLast) - { - node.plus_img.src = node.relpath+"ftv2plastnode.png"; - } - else - { - node.plus_img.src = node.relpath+"ftv2pnode.png"; - } - node.expanded = false; - } - else - { - expandNode(o, node, false); - } - } - node.expandToggle.appendChild(imgNode); - domNode.appendChild(node.expandToggle); - } - else - { - domNode.appendChild(imgNode); - } - if (level==0) - { - if (node.isLast) - { - if (node.childrenData) - { - imgNode.src = node.relpath+"ftv2plastnode.png"; - } - else - { - imgNode.src = node.relpath+"ftv2lastnode.png"; - domNode.appendChild(imgNode); - } - } - else - { - if (node.childrenData) - { - imgNode.src = node.relpath+"ftv2pnode.png"; - } - else - { - imgNode.src = node.relpath+"ftv2node.png"; - domNode.appendChild(imgNode); - } - } - } - else - { - if (node.isLast) - { - imgNode.src = node.relpath+"ftv2blank.png"; - } - else - { - imgNode.src = node.relpath+"ftv2vertline.png"; - } - } - imgNode.border = "0"; -} - -function newNode(o, po, text, link, childrenData, lastNode) -{ - var node = new Object(); - node.children = Array(); - node.childrenData = childrenData; - node.depth = po.depth + 1; - node.relpath = po.relpath; - node.isLast = lastNode; - - node.li = document.createElement("li"); - po.getChildrenUL().appendChild(node.li); - node.parentNode = po; - - node.itemDiv = document.createElement("div"); - node.itemDiv.className = "item"; - - node.labelSpan = document.createElement("span"); - node.labelSpan.className = "label"; - - createIndent(o,node.itemDiv,node,0); - node.itemDiv.appendChild(node.labelSpan); - node.li.appendChild(node.itemDiv); - - var a = document.createElement("a"); - node.labelSpan.appendChild(a); - node.label = document.createTextNode(text); - a.appendChild(node.label); - if (link) - { - a.href = node.relpath+link; - } - else - { - if (childrenData != null) - { - a.className = "nolink"; - a.href = "javascript:void(0)"; - a.onclick = node.expandToggle.onclick; - node.expanded = false; - } - } - - node.childrenUL = null; - node.getChildrenUL = function() - { - if (!node.childrenUL) - { - node.childrenUL = document.createElement("ul"); - node.childrenUL.className = "children_ul"; - node.childrenUL.style.display = "none"; - node.li.appendChild(node.childrenUL); - } - return node.childrenUL; - }; - - return node; -} - -function showRoot() -{ - var headerHeight = $("#top").height(); - var footerHeight = $("#nav-path").height(); - var windowHeight = $(window).height() - headerHeight - footerHeight; - navtree.scrollTo('#selected',0,{offset:-windowHeight/2}); -} - -function expandNode(o, node, imm) -{ - if (node.childrenData && !node.expanded) - { - if (!node.childrenVisited) - { - getNode(o, node); - } - if (imm) - { - $(node.getChildrenUL()).show(); - } - else - { - $(node.getChildrenUL()).slideDown("fast",showRoot); - } - if (node.isLast) - { - node.plus_img.src = node.relpath+"ftv2mlastnode.png"; - } - else - { - node.plus_img.src = node.relpath+"ftv2mnode.png"; - } - node.expanded = true; - } -} - -function getNode(o, po) -{ - po.childrenVisited = true; - var l = po.childrenData.length-1; - for (var i in po.childrenData) - { - var nodeData = po.childrenData[i]; - po.children[i] = newNode(o, po, nodeData[0], nodeData[1], nodeData[2], - i==l); - } -} - -function findNavTreePage(url, data) -{ - var nodes = data; - var result = null; - for (var i in nodes) - { - var d = nodes[i]; - if (d[1] == url) - { - return new Array(i); - } - else if (d[2] != null) // array of children - { - result = findNavTreePage(url, d[2]); - if (result != null) - { - return (new Array(i).concat(result)); - } - } - } - return null; -} - -function initNavTree(toroot,relpath) -{ - var o = new Object(); - o.toroot = toroot; - o.node = new Object(); - o.node.li = document.getElementById("nav-tree-contents"); - o.node.childrenData = NAVTREE; - o.node.children = new Array(); - o.node.childrenUL = document.createElement("ul"); - o.node.getChildrenUL = function() { return o.node.childrenUL; }; - o.node.li.appendChild(o.node.childrenUL); - o.node.depth = 0; - o.node.relpath = relpath; - - getNode(o, o.node); - - o.breadcrumbs = findNavTreePage(toroot, NAVTREE); - if (o.breadcrumbs == null) - { - o.breadcrumbs = findNavTreePage("index.html",NAVTREE); - } - if (o.breadcrumbs != null && o.breadcrumbs.length>0) - { - var p = o.node; - for (var i in o.breadcrumbs) - { - var j = o.breadcrumbs[i]; - p = p.children[j]; - expandNode(o,p,true); - } - p.itemDiv.className = p.itemDiv.className + " selected"; - p.itemDiv.id = "selected"; - $(window).load(showRoot); - } -} - diff --git a/libraries/LiquidCrystal/utility/docs/html/open.png b/libraries/LiquidCrystal/utility/docs/html/open.png deleted file mode 100644 index 7b35d2c..0000000 Binary files a/libraries/LiquidCrystal/utility/docs/html/open.png and /dev/null differ diff --git a/libraries/LiquidCrystal/utility/docs/html/resize.js b/libraries/LiquidCrystal/utility/docs/html/resize.js deleted file mode 100644 index 04fa95c..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/resize.js +++ /dev/null @@ -1,81 +0,0 @@ -var cookie_namespace = 'doxygen'; -var sidenav,navtree,content,header; - -function readCookie(cookie) -{ - var myCookie = cookie_namespace+"_"+cookie+"="; - if (document.cookie) - { - var index = document.cookie.indexOf(myCookie); - if (index != -1) - { - var valStart = index + myCookie.length; - var valEnd = document.cookie.indexOf(";", valStart); - if (valEnd == -1) - { - valEnd = document.cookie.length; - } - var val = document.cookie.substring(valStart, valEnd); - return val; - } - } - return 0; -} - -function writeCookie(cookie, val, expiration) -{ - if (val==undefined) return; - if (expiration == null) - { - var date = new Date(); - date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week - expiration = date.toGMTString(); - } - document.cookie = cookie_namespace + "_" + cookie + "=" + val + "; expires=" + expiration+"; path=/"; -} - -function resizeWidth() -{ - var windowWidth = $(window).width() + "px"; - var sidenavWidth = $(sidenav).width(); - content.css({marginLeft:parseInt(sidenavWidth)+6+"px"}); //account for 6px-wide handle-bar - writeCookie('width',sidenavWidth, null); -} - -function restoreWidth(navWidth) -{ - var windowWidth = $(window).width() + "px"; - content.css({marginLeft:parseInt(navWidth)+6+"px"}); - sidenav.css({width:navWidth + "px"}); -} - -function resizeHeight() -{ - var headerHeight = header.height(); - var footerHeight = footer.height(); - var windowHeight = $(window).height() - headerHeight - footerHeight; - content.css({height:windowHeight + "px"}); - navtree.css({height:windowHeight + "px"}); - sidenav.css({height:windowHeight + "px",top: headerHeight+"px"}); -} - -function initResizable() -{ - header = $("#top"); - sidenav = $("#side-nav"); - content = $("#doc-content"); - navtree = $("#nav-tree"); - footer = $("#nav-path"); - $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } }); - $(window).resize(function() { resizeHeight(); }); - var width = readCookie('width'); - if (width) { restoreWidth(width); } else { resizeWidth(); } - resizeHeight(); - var url = location.href; - var i=url.indexOf("#"); - if (i>=0) window.location.hash=url.substr(i); - var _preventDefault = function(evt) { evt.preventDefault(); }; - $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); -} - - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/all_5f.html b/libraries/LiquidCrystal/utility/docs/html/search/all_5f.html deleted file mode 100644 index f4de1dd..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/all_5f.html +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- _cols - LCD -
-
-
-
- _displaycontrol - LCD -
-
-
-
- _displayfunction - LCD -
-
-
-
- _displaymode - LCD -
-
-
-
- _I2CIO_VERSION - I2CIO.h -
-
-
-
- _numlines - LCD -
-
-
-
- _polarity - LCD -
-
-
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/all_61.html b/libraries/LiquidCrystal/utility/docs/html/search/all_61.html deleted file mode 100644 index 77a85bb..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/all_61.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- ATOMIC_BLOCK - FastIO.h -
-
-
-
- ATOMIC_RESTORESTATE - FastIO.h -
-
-
-
- autoscroll - LCD -
-
-
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/all_62.html b/libraries/LiquidCrystal/utility/docs/html/search/all_62.html deleted file mode 100644 index d930b2a..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/all_62.html +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- backlight - LCD -
-
-
-
- BACKLIGHT_OFF - LCD.h -
-
-
-
- BACKLIGHT_ON - LCD.h -
-
- - -
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/all_63.html b/libraries/LiquidCrystal/utility/docs/html/search/all_63.html deleted file mode 100644 index fd37373..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/all_63.html +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- clear - LCD -
-
-
-
- COMMAND - LCD.h -
-
-
-
- createChar - LCD -
-
-
-
- cursor - LCD -
-
-
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/all_64.html b/libraries/LiquidCrystal/utility/docs/html/search/all_64.html deleted file mode 100644 index e66c526..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/all_64.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - -
-
Loading...
- - - - -
-
- DATA - LCD.h -
-
-
-
- digitalRead - I2CIO -
-
-
-
- digitalWrite - I2CIO -
-
-
-
- display - LCD -
-
-
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/all_65.html b/libraries/LiquidCrystal/utility/docs/html/search/all_65.html deleted file mode 100644 index 7ac4e79..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/all_65.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - -
-
Loading...
- -
-
- EXEC_TIME - LiquidCrystal.h -
-
-
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/all_66.html b/libraries/LiquidCrystal/utility/docs/html/search/all_66.html deleted file mode 100644 index f615e95..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/all_66.html +++ /dev/null @@ -1,156 +0,0 @@ - - - - - - - -
-
Loading...
-
- -
-
-
- FastIO.h -
-
-
-
- fio_bit - FastIO.h -
-
- - -
-
- fio_digitalWrite_HIGH - FastIO.h -
-
-
-
- fio_digitalWrite_LOW - FastIO.h -
-
-
-
- fio_digitalWrite_SWITCH - FastIO.h -
-
-
-
- fio_digitalWrite_SWITCHTO - FastIO.h -
-
-
-
- FIO_FALLBACK - FastIO.h -
-
- - - -
-
- fio_register - FastIO.h -
-
- - - -
-
- FOUR_BITS - LCD.h -
-
-
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/all_68.html b/libraries/LiquidCrystal/utility/docs/html/search/all_68.html deleted file mode 100644 index 33a52d6..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/all_68.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- home - LCD -
-
-
-
- HOME_CLEAR_EXEC - LCD.h -
-
-
-
- HW_CLEAR - LiquidCrystal_SR1W.h -
-
-
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/all_69.html b/libraries/LiquidCrystal/utility/docs/html/search/all_69.html deleted file mode 100644 index 2bbba17..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/all_69.html +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- I2CIO - -
-
-
-
- I2CIO.cpp -
-
-
-
- I2CIO.h -
-
-
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/all_6c.html b/libraries/LiquidCrystal/utility/docs/html/search/all_6c.html deleted file mode 100644 index dd5ad3f..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/all_6c.html +++ /dev/null @@ -1,392 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- LCD -
- LCD - LCD::LCD() -
-
-
-
-
- LCD.cpp -
-
-
-
- LCD.h -
-
-
-
- LCD_1LINE - LCD.h -
-
-
-
- LCD_2LINE - LCD.h -
-
-
-
- LCD_4BIT - LiquidCrystal.cpp -
-
-
-
- LCD_4BITMODE - LCD.h -
-
-
-
- LCD_5x10DOTS - LCD.h -
-
-
-
- LCD_5x8DOTS - LCD.h -
-
-
-
- LCD_8BIT - LiquidCrystal.cpp -
-
-
-
- LCD_8BITMODE - LCD.h -
-
- -
-
- LCD_BLINKOFF - LCD.h -
-
-
-
- LCD_BLINKON - LCD.h -
-
-
-
- LCD_CLEARDISPLAY - LCD.h -
-
-
-
- LCD_CURSORMOVE - LCD.h -
-
-
-
- LCD_CURSOROFF - LCD.h -
-
-
-
- LCD_CURSORON - LCD.h -
-
-
-
- LCD_CURSORSHIFT - LCD.h -
-
-
-
- LCD_DISPLAYCONTROL - LCD.h -
-
-
-
- LCD_DISPLAYMOVE - LCD.h -
-
-
-
- LCD_DISPLAYOFF - LCD.h -
-
-
-
- LCD_DISPLAYON - LCD.h -
-
-
-
- LCD_ENTRYLEFT - LCD.h -
-
-
-
- LCD_ENTRYMODESET - LCD.h -
-
-
-
- LCD_ENTRYRIGHT - LCD.h -
-
-
- -
-
- -
-
-
- LCD_FUNCTIONSET - LCD.h -
-
-
-
- LCD_MOVELEFT - LCD.h -
-
-
-
- LCD_MOVERIGHT - LCD.h -
-
- -
-
- LCD_RETURNHOME - LCD.h -
-
-
-
- LCD_SETCGRAMADDR - LCD.h -
-
-
-
- LCD_SETDDRAMADDR - LCD.h -
-
-
-
- leftToRight - LCD -
-
- - - - - - - - - - - - - - - - - - - - - -
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/all_6d.html b/libraries/LiquidCrystal/utility/docs/html/search/all_6d.html deleted file mode 100644 index 6a0ea3f..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/all_6d.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- moveCursorLeft - LCD -
-
-
-
- moveCursorRight - LCD -
-
-
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/all_6e.html b/libraries/LiquidCrystal/utility/docs/html/search/all_6e.html deleted file mode 100644 index f3e1f8b..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/all_6e.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- NEGATIVE - LCD.h -
-
-
-
- noAutoscroll - LCD -
-
-
-
- noBacklight - LCD -
-
- -
-
- noCursor - LCD -
-
-
-
- noDisplay - LCD -
-
-
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/all_6f.html b/libraries/LiquidCrystal/utility/docs/html/search/all_6f.html deleted file mode 100644 index e5e659c..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/all_6f.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- off - LCD -
-
-
-
- on - LCD -
-
-
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/all_70.html b/libraries/LiquidCrystal/utility/docs/html/search/all_70.html deleted file mode 100644 index 29b653f..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/all_70.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- pinMode - I2CIO -
-
-
-
- portMode - I2CIO -
-
-
-
- POSITIVE - LCD.h -
-
-
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/all_72.html b/libraries/LiquidCrystal/utility/docs/html/search/all_72.html deleted file mode 100644 index d2d6cc6..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/all_72.html +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- read - I2CIO -
-
-
-
- rightToLeft - LCD -
-
- - -
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/all_73.html b/libraries/LiquidCrystal/utility/docs/html/search/all_73.html deleted file mode 100644 index 2c155a9..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/all_73.html +++ /dev/null @@ -1,205 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- scrollDisplayLeft - LCD -
-
-
-
- scrollDisplayRight - LCD -
-
- - - -
-
- setContrast - LiquidCrystal_I2C_ByVac -
-
-
-
- setCursor - LCD -
-
-
-
- SKIP - FastIO.h -
-
-
-
- SR1W_ATOMIC_WRITE_HIGH - LiquidCrystal_SR1W.h -
-
-
-
- SR1W_ATOMIC_WRITE_LOW - LiquidCrystal_SR1W.h -
-
-
-
- SR1W_BL_MASK - LiquidCrystal_SR1W.h -
-
-
-
- SR1W_D4_MASK - LiquidCrystal_SR1W.h -
-
-
-
- SR1W_D5_MASK - LiquidCrystal_SR1W.h -
-
-
-
- SR1W_D6_MASK - LiquidCrystal_SR1W.h -
-
-
-
- SR1W_D7_MASK - LiquidCrystal_SR1W.h -
-
-
-
- SR1W_DELAY - LiquidCrystal_SR1W.h -
-
-
-
- SR1W_DELAY_US - LiquidCrystal_SR1W.h -
-
-
-
- SR1W_EN_MASK - LiquidCrystal_SR1W.h -
-
-
-
- SR1W_RS_MASK - LiquidCrystal_SR1W.h -
-
-
-
- SR1W_UNUSED_MASK - LiquidCrystal_SR1W.h -
-
-
-
- SR2W_BL_MASK - LiquidCrystal_SR2W.h -
-
-
-
- SR2W_DATA_MASK - LiquidCrystal_SR2W.h -
-
-
-
- SR2W_EN_MASK - LiquidCrystal_SR2W.h -
-
-
-
- SR2W_RS_MASK - LiquidCrystal_SR2W.h -
-
-
-
- SR_EN_BIT - LiquidCrystal_SR.h -
-
-
-
- SR_RS_BIT - LiquidCrystal_SR.h -
-
-
-
- SW_CLEAR - LiquidCrystal_SR1W.h -
-
-
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/all_74.html b/libraries/LiquidCrystal/utility/docs/html/search/all_74.html deleted file mode 100644 index 99245c7..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/all_74.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- t_backlighPol - LCD.h -
-
-
-
- t_sr1w_circuitType - LiquidCrystal_SR1W.h -
-
-
-
- TWO_WIRE - LiquidCrystal_SR.h -
-
-
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/all_77.html b/libraries/LiquidCrystal/utility/docs/html/search/all_77.html deleted file mode 100644 index d81a974..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/all_77.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- waitUsec - LCD.h -
-
- -
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/classes_69.html b/libraries/LiquidCrystal/utility/docs/html/search/classes_69.html deleted file mode 100644 index 48921d3..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/classes_69.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- I2CIO -
-
-
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/classes_6c.html b/libraries/LiquidCrystal/utility/docs/html/search/classes_6c.html deleted file mode 100644 index 1372c59..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/classes_6c.html +++ /dev/null @@ -1,60 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- LCD -
-
-
- -
- - - - - - -
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/close.png b/libraries/LiquidCrystal/utility/docs/html/search/close.png deleted file mode 100644 index 9342d3d..0000000 Binary files a/libraries/LiquidCrystal/utility/docs/html/search/close.png and /dev/null differ diff --git a/libraries/LiquidCrystal/utility/docs/html/search/defines_5f.html b/libraries/LiquidCrystal/utility/docs/html/search/defines_5f.html deleted file mode 100644 index 8a9b6d1..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/defines_5f.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- _I2CIO_VERSION - I2CIO.h -
-
-
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/defines_61.html b/libraries/LiquidCrystal/utility/docs/html/search/defines_61.html deleted file mode 100644 index 64e6e11..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/defines_61.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- ATOMIC_BLOCK - FastIO.h -
-
-
-
- ATOMIC_RESTORESTATE - FastIO.h -
-
-
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/defines_62.html b/libraries/LiquidCrystal/utility/docs/html/search/defines_62.html deleted file mode 100644 index e65a734..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/defines_62.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- BACKLIGHT_OFF - LCD.h -
-
-
-
- BACKLIGHT_ON - LCD.h -
-
-
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/defines_63.html b/libraries/LiquidCrystal/utility/docs/html/search/defines_63.html deleted file mode 100644 index d74c25d..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/defines_63.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- COMMAND - LCD.h -
-
-
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/defines_64.html b/libraries/LiquidCrystal/utility/docs/html/search/defines_64.html deleted file mode 100644 index f47ef02..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/defines_64.html +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - -
-
Loading...
- - - - -
-
- DATA - LCD.h -
-
-
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/defines_65.html b/libraries/LiquidCrystal/utility/docs/html/search/defines_65.html deleted file mode 100644 index 7ac4e79..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/defines_65.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - -
-
Loading...
- -
-
- EXEC_TIME - LiquidCrystal.h -
-
-
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/defines_66.html b/libraries/LiquidCrystal/utility/docs/html/search/defines_66.html deleted file mode 100644 index 6225879..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/defines_66.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- fio_digitalWrite_HIGH - FastIO.h -
-
-
-
- fio_digitalWrite_LOW - FastIO.h -
-
-
-
- fio_digitalWrite_SWITCH - FastIO.h -
-
-
-
- fio_digitalWrite_SWITCHTO - FastIO.h -
-
-
-
- FIO_FALLBACK - FastIO.h -
-
-
-
- FOUR_BITS - LCD.h -
-
-
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/defines_68.html b/libraries/LiquidCrystal/utility/docs/html/search/defines_68.html deleted file mode 100644 index 28e210e..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/defines_68.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- HOME_CLEAR_EXEC - LCD.h -
-
-
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/defines_6c.html b/libraries/LiquidCrystal/utility/docs/html/search/defines_6c.html deleted file mode 100644 index 525e0b4..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/defines_6c.html +++ /dev/null @@ -1,219 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- LCD_1LINE - LCD.h -
-
-
-
- LCD_2LINE - LCD.h -
-
-
-
- LCD_4BIT - LiquidCrystal.cpp -
-
-
-
- LCD_4BITMODE - LCD.h -
-
-
-
- LCD_5x10DOTS - LCD.h -
-
-
-
- LCD_5x8DOTS - LCD.h -
-
-
-
- LCD_8BIT - LiquidCrystal.cpp -
-
-
-
- LCD_8BITMODE - LCD.h -
-
- -
-
- LCD_BLINKOFF - LCD.h -
-
-
-
- LCD_BLINKON - LCD.h -
-
-
-
- LCD_CLEARDISPLAY - LCD.h -
-
-
-
- LCD_CURSORMOVE - LCD.h -
-
-
-
- LCD_CURSOROFF - LCD.h -
-
-
-
- LCD_CURSORON - LCD.h -
-
-
-
- LCD_CURSORSHIFT - LCD.h -
-
-
-
- LCD_DISPLAYCONTROL - LCD.h -
-
-
-
- LCD_DISPLAYMOVE - LCD.h -
-
-
-
- LCD_DISPLAYOFF - LCD.h -
-
-
-
- LCD_DISPLAYON - LCD.h -
-
-
-
- LCD_ENTRYLEFT - LCD.h -
-
-
-
- LCD_ENTRYMODESET - LCD.h -
-
-
-
- LCD_ENTRYRIGHT - LCD.h -
-
-
- -
-
- -
-
-
- LCD_FUNCTIONSET - LCD.h -
-
-
-
- LCD_MOVELEFT - LCD.h -
-
-
-
- LCD_MOVERIGHT - LCD.h -
-
- -
-
- LCD_RETURNHOME - LCD.h -
-
-
-
- LCD_SETCGRAMADDR - LCD.h -
-
-
-
- LCD_SETDDRAMADDR - LCD.h -
-
-
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/defines_72.html b/libraries/LiquidCrystal/utility/docs/html/search/defines_72.html deleted file mode 100644 index 091148d..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/defines_72.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - -
-
Loading...
- - -
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/defines_73.html b/libraries/LiquidCrystal/utility/docs/html/search/defines_73.html deleted file mode 100644 index e33c996..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/defines_73.html +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- SKIP - FastIO.h -
-
-
-
- SR1W_ATOMIC_WRITE_HIGH - LiquidCrystal_SR1W.h -
-
-
-
- SR1W_ATOMIC_WRITE_LOW - LiquidCrystal_SR1W.h -
-
-
-
- SR1W_BL_MASK - LiquidCrystal_SR1W.h -
-
-
-
- SR1W_D4_MASK - LiquidCrystal_SR1W.h -
-
-
-
- SR1W_D5_MASK - LiquidCrystal_SR1W.h -
-
-
-
- SR1W_D6_MASK - LiquidCrystal_SR1W.h -
-
-
-
- SR1W_D7_MASK - LiquidCrystal_SR1W.h -
-
-
-
- SR1W_DELAY - LiquidCrystal_SR1W.h -
-
-
-
- SR1W_DELAY_US - LiquidCrystal_SR1W.h -
-
-
-
- SR1W_EN_MASK - LiquidCrystal_SR1W.h -
-
-
-
- SR1W_RS_MASK - LiquidCrystal_SR1W.h -
-
-
-
- SR1W_UNUSED_MASK - LiquidCrystal_SR1W.h -
-
-
-
- SR2W_BL_MASK - LiquidCrystal_SR2W.h -
-
-
-
- SR2W_DATA_MASK - LiquidCrystal_SR2W.h -
-
-
-
- SR2W_EN_MASK - LiquidCrystal_SR2W.h -
-
-
-
- SR2W_RS_MASK - LiquidCrystal_SR2W.h -
-
-
-
- SR_EN_BIT - LiquidCrystal_SR.h -
-
-
-
- SR_RS_BIT - LiquidCrystal_SR.h -
-
-
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/defines_74.html b/libraries/LiquidCrystal/utility/docs/html/search/defines_74.html deleted file mode 100644 index ba27d7f..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/defines_74.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- TWO_WIRE - LiquidCrystal_SR.h -
-
-
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/enums_74.html b/libraries/LiquidCrystal/utility/docs/html/search/enums_74.html deleted file mode 100644 index 0de07b9..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/enums_74.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- t_backlighPol - LCD.h -
-
-
-
- t_sr1w_circuitType - LiquidCrystal_SR1W.h -
-
-
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/enumvalues_68.html b/libraries/LiquidCrystal/utility/docs/html/search/enumvalues_68.html deleted file mode 100644 index ea6214c..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/enumvalues_68.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- HW_CLEAR - LiquidCrystal_SR1W.h -
-
-
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/enumvalues_6e.html b/libraries/LiquidCrystal/utility/docs/html/search/enumvalues_6e.html deleted file mode 100644 index 13de3f4..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/enumvalues_6e.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- NEGATIVE - LCD.h -
-
-
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/enumvalues_70.html b/libraries/LiquidCrystal/utility/docs/html/search/enumvalues_70.html deleted file mode 100644 index ccfeb29..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/enumvalues_70.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- POSITIVE - LCD.h -
-
-
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/enumvalues_73.html b/libraries/LiquidCrystal/utility/docs/html/search/enumvalues_73.html deleted file mode 100644 index 224f311..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/enumvalues_73.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- SW_CLEAR - LiquidCrystal_SR1W.h -
-
-
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/files_66.html b/libraries/LiquidCrystal/utility/docs/html/search/files_66.html deleted file mode 100644 index 2eeecab..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/files_66.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - -
-
Loading...
-
- -
-
-
- FastIO.h -
-
-
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/files_69.html b/libraries/LiquidCrystal/utility/docs/html/search/files_69.html deleted file mode 100644 index 6d0e429..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/files_69.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- I2CIO.cpp -
-
-
-
- I2CIO.h -
-
-
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/files_6c.html b/libraries/LiquidCrystal/utility/docs/html/search/files_6c.html deleted file mode 100644 index 35127c6..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/files_6c.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- LCD.cpp -
-
-
-
- LCD.h -
-
- - - - - - - - - - - - - - -
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/functions_61.html b/libraries/LiquidCrystal/utility/docs/html/search/functions_61.html deleted file mode 100644 index 7fb674c..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/functions_61.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- autoscroll - LCD -
-
-
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/functions_62.html b/libraries/LiquidCrystal/utility/docs/html/search/functions_62.html deleted file mode 100644 index 0e2cb17..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/functions_62.html +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- backlight - LCD -
-
- - -
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/functions_63.html b/libraries/LiquidCrystal/utility/docs/html/search/functions_63.html deleted file mode 100644 index 118cc32..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/functions_63.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- clear - LCD -
-
-
-
- createChar - LCD -
-
-
-
- cursor - LCD -
-
-
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/functions_64.html b/libraries/LiquidCrystal/utility/docs/html/search/functions_64.html deleted file mode 100644 index ba77ba3..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/functions_64.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- digitalRead - I2CIO -
-
-
-
- digitalWrite - I2CIO -
-
-
-
- display - LCD -
-
-
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/functions_65.html b/libraries/LiquidCrystal/utility/docs/html/search/functions_65.html deleted file mode 100644 index 86ec5ea..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/functions_65.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- expanderWrite - LiquidCrystal_I2C -
-
-
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/functions_66.html b/libraries/LiquidCrystal/utility/docs/html/search/functions_66.html deleted file mode 100644 index 8cdaa77..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/functions_66.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - - -
-
Loading...
- - - - - - - - -
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/functions_68.html b/libraries/LiquidCrystal/utility/docs/html/search/functions_68.html deleted file mode 100644 index 15aec73..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/functions_68.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- home - LCD -
-
-
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/functions_69.html b/libraries/LiquidCrystal/utility/docs/html/search/functions_69.html deleted file mode 100644 index dc3dc28..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/functions_69.html +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- I2CIO - I2CIO -
-
-
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/functions_6c.html b/libraries/LiquidCrystal/utility/docs/html/search/functions_6c.html deleted file mode 100644 index 86b91bc..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/functions_6c.html +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- LCD - LCD -
-
-
-
- leftToRight - LCD -
-
- - -
-
- LiquidCrystal_I2C_ByVac - LiquidCrystal_I2C_ByVac -
-
-
-
- LiquidCrystal_SR - LiquidCrystal_SR -
-
-
-
- LiquidCrystal_SR1W - LiquidCrystal_SR1W -
-
-
-
- LiquidCrystal_SR2W - LiquidCrystal_SR2W -
-
- -
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/functions_6d.html b/libraries/LiquidCrystal/utility/docs/html/search/functions_6d.html deleted file mode 100644 index 6a0ea3f..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/functions_6d.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- moveCursorLeft - LCD -
-
-
-
- moveCursorRight - LCD -
-
-
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/functions_6e.html b/libraries/LiquidCrystal/utility/docs/html/search/functions_6e.html deleted file mode 100644 index 02acfb2..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/functions_6e.html +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- noAutoscroll - LCD -
-
-
-
- noBacklight - LCD -
-
- -
-
- noCursor - LCD -
-
-
-
- noDisplay - LCD -
-
-
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/functions_6f.html b/libraries/LiquidCrystal/utility/docs/html/search/functions_6f.html deleted file mode 100644 index e5e659c..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/functions_6f.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- off - LCD -
-
-
-
- on - LCD -
-
-
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/functions_70.html b/libraries/LiquidCrystal/utility/docs/html/search/functions_70.html deleted file mode 100644 index 16e8ed0..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/functions_70.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- pinMode - I2CIO -
-
-
-
- portMode - I2CIO -
-
-
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/functions_72.html b/libraries/LiquidCrystal/utility/docs/html/search/functions_72.html deleted file mode 100644 index 31d4b8e..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/functions_72.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- read - I2CIO -
-
-
-
- rightToLeft - LCD -
-
-
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/functions_73.html b/libraries/LiquidCrystal/utility/docs/html/search/functions_73.html deleted file mode 100644 index 332aca5..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/functions_73.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - - - - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/functions_77.html b/libraries/LiquidCrystal/utility/docs/html/search/functions_77.html deleted file mode 100644 index d81a974..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/functions_77.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- waitUsec - LCD.h -
-
- -
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/mag_sel.png b/libraries/LiquidCrystal/utility/docs/html/search/mag_sel.png deleted file mode 100644 index 81f6040..0000000 Binary files a/libraries/LiquidCrystal/utility/docs/html/search/mag_sel.png and /dev/null differ diff --git a/libraries/LiquidCrystal/utility/docs/html/search/nomatches.html b/libraries/LiquidCrystal/utility/docs/html/search/nomatches.html deleted file mode 100644 index b1ded27..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/nomatches.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - -
-
No Matches
-
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/search.css b/libraries/LiquidCrystal/utility/docs/html/search/search.css deleted file mode 100644 index 50249e5..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/search.css +++ /dev/null @@ -1,240 +0,0 @@ -/*---------------- Search Box */ - -#FSearchBox { - float: left; -} - -#searchli { - float: right; - display: block; - width: 170px; - height: 36px; -} - -#MSearchBox { - white-space : nowrap; - position: absolute; - float: none; - display: inline; - margin-top: 8px; - right: 0px; - width: 170px; - z-index: 102; -} - -#MSearchBox .left -{ - display:block; - position:absolute; - left:10px; - width:20px; - height:19px; - background:url('search_l.png') no-repeat; - background-position:right; -} - -#MSearchSelect { - display:block; - position:absolute; - width:20px; - height:19px; -} - -.left #MSearchSelect { - left:4px; -} - -.right #MSearchSelect { - right:5px; -} - -#MSearchField { - display:block; - position:absolute; - height:19px; - background:url('search_m.png') repeat-x; - border:none; - width:116px; - margin-left:20px; - padding-left:4px; - color: #909090; - outline: none; - font: 9pt Arial, Verdana, sans-serif; -} - -#FSearchBox #MSearchField { - margin-left:15px; -} - -#MSearchBox .right { - display:block; - position:absolute; - right:10px; - top:0px; - width:20px; - height:19px; - background:url('search_r.png') no-repeat; - background-position:left; -} - -#MSearchClose { - display: none; - position: absolute; - top: 4px; - background : none; - border: none; - margin: 0px 4px 0px 0px; - padding: 0px 0px; - outline: none; -} - -.left #MSearchClose { - left: 6px; -} - -.right #MSearchClose { - right: 2px; -} - -.MSearchBoxActive #MSearchField { - color: #000000; -} - -/*---------------- Search filter selection */ - -#MSearchSelectWindow { - display: none; - position: absolute; - left: 0; top: 0; - border: 1px solid #90A5CE; - background-color: #F9FAFC; - z-index: 1; - padding-top: 4px; - padding-bottom: 4px; - -moz-border-radius: 4px; - -webkit-border-top-left-radius: 4px; - -webkit-border-top-right-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); -} - -.SelectItem { - font: 8pt Arial, Verdana, sans-serif; - padding-left: 2px; - padding-right: 12px; - border: 0px; -} - -span.SelectionMark { - margin-right: 4px; - font-family: monospace; - outline-style: none; - text-decoration: none; -} - -a.SelectItem { - display: block; - outline-style: none; - color: #000000; - text-decoration: none; - padding-left: 6px; - padding-right: 12px; -} - -a.SelectItem:focus, -a.SelectItem:active { - color: #000000; - outline-style: none; - text-decoration: none; -} - -a.SelectItem:hover { - color: #FFFFFF; - background-color: #3D578C; - outline-style: none; - text-decoration: none; - cursor: pointer; - display: block; -} - -/*---------------- Search results window */ - -iframe#MSearchResults { - width: 60ex; - height: 15em; -} - -#MSearchResultsWindow { - display: none; - position: absolute; - left: 0; top: 0; - border: 1px solid #000; - background-color: #EEF1F7; -} - -/* ----------------------------------- */ - - -#SRIndex { - clear:both; - padding-bottom: 15px; -} - -.SREntry { - font-size: 10pt; - padding-left: 1ex; -} - -.SRPage .SREntry { - font-size: 8pt; - padding: 1px 5px; -} - -body.SRPage { - margin: 5px 2px; -} - -.SRChildren { - padding-left: 3ex; padding-bottom: .5em -} - -.SRPage .SRChildren { - display: none; -} - -.SRSymbol { - font-weight: bold; - color: #425E97; - font-family: Arial, Verdana, sans-serif; - text-decoration: none; - outline: none; -} - -a.SRScope { - display: block; - color: #425E97; - font-family: Arial, Verdana, sans-serif; - text-decoration: none; - outline: none; -} - -a.SRSymbol:focus, a.SRSymbol:active, -a.SRScope:focus, a.SRScope:active { - text-decoration: underline; -} - -.SRPage .SRStatus { - padding: 2px 5px; - font-size: 8pt; - font-style: italic; -} - -.SRResult { - display: none; -} - -DIV.searchresults { - margin-left: 10px; - margin-right: 10px; -} diff --git a/libraries/LiquidCrystal/utility/docs/html/search/search.js b/libraries/LiquidCrystal/utility/docs/html/search/search.js deleted file mode 100644 index c0c7464..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/search.js +++ /dev/null @@ -1,742 +0,0 @@ -// Search script generated by doxygen -// Copyright (C) 2009 by Dimitri van Heesch. - -// The code in this file is loosly based on main.js, part of Natural Docs, -// which is Copyright (C) 2003-2008 Greg Valure -// Natural Docs is licensed under the GPL. - -var indexSectionsWithContent = -{ - 0: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010111111011001111101110010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - 1: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - 2: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001001001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - 3: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111101011001111101100010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - 4: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - 5: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - 6: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - 7: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000010100100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - 8: "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010111111010001000001110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" -}; - -var indexSectionNames = -{ - 0: "all", - 1: "classes", - 2: "files", - 3: "functions", - 4: "variables", - 5: "typedefs", - 6: "enums", - 7: "enumvalues", - 8: "defines" -}; - -function convertToId(search) -{ - var result = ''; - for (i=0;i do a search - { - this.Search(); - } - } - - this.OnSearchSelectKey = function(evt) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==40 && this.searchIndex0) // Up - { - this.searchIndex--; - this.OnSelectItem(this.searchIndex); - } - else if (e.keyCode==13 || e.keyCode==27) - { - this.OnSelectItem(this.searchIndex); - this.CloseSelectionWindow(); - this.DOMSearchField().focus(); - } - return false; - } - - // --------- Actions - - // Closes the results window. - this.CloseResultsWindow = function() - { - this.DOMPopupSearchResultsWindow().style.display = 'none'; - this.DOMSearchClose().style.display = 'none'; - this.Activate(false); - } - - this.CloseSelectionWindow = function() - { - this.DOMSearchSelectWindow().style.display = 'none'; - } - - // Performs a search. - this.Search = function() - { - this.keyTimeout = 0; - - // strip leading whitespace - var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); - - var code = searchValue.toLowerCase().charCodeAt(0); - var hexCode; - if (code<16) - { - hexCode="0"+code.toString(16); - } - else - { - hexCode=code.toString(16); - } - - var resultsPage; - var resultsPageWithSearch; - var hasResultsPage; - - if (indexSectionsWithContent[this.searchIndex].charAt(code) == '1') - { - resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html'; - resultsPageWithSearch = resultsPage+'?'+escape(searchValue); - hasResultsPage = true; - } - else // nothing available for this search term - { - resultsPage = this.resultsPath + '/nomatches.html'; - resultsPageWithSearch = resultsPage; - hasResultsPage = false; - } - - window.frames.MSearchResults.location.href = resultsPageWithSearch; - var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); - - if (domPopupSearchResultsWindow.style.display!='block') - { - var domSearchBox = this.DOMSearchBox(); - this.DOMSearchClose().style.display = 'inline'; - if (this.insideFrame) - { - var domPopupSearchResults = this.DOMPopupSearchResults(); - domPopupSearchResultsWindow.style.position = 'relative'; - domPopupSearchResultsWindow.style.display = 'block'; - var width = document.body.clientWidth - 8; // the -8 is for IE :-( - domPopupSearchResultsWindow.style.width = width + 'px'; - domPopupSearchResults.style.width = width + 'px'; - } - else - { - var domPopupSearchResults = this.DOMPopupSearchResults(); - var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; - var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; - domPopupSearchResultsWindow.style.display = 'block'; - left -= domPopupSearchResults.offsetWidth; - domPopupSearchResultsWindow.style.top = top + 'px'; - domPopupSearchResultsWindow.style.left = left + 'px'; - } - } - - this.lastSearchValue = searchValue; - this.lastResultsPage = resultsPage; - } - - // -------- Activation Functions - - // Activates or deactivates the search panel, resetting things to - // their default values if necessary. - this.Activate = function(isActive) - { - if (isActive || // open it - this.DOMPopupSearchResultsWindow().style.display == 'block' - ) - { - this.DOMSearchBox().className = 'MSearchBoxActive'; - - var searchField = this.DOMSearchField(); - - if (searchField.value == this.searchLabel) // clear "Search" term upon entry - { - searchField.value = ''; - this.searchActive = true; - } - } - else if (!isActive) // directly remove the panel - { - this.DOMSearchBox().className = 'MSearchBoxInactive'; - this.DOMSearchField().value = this.searchLabel; - this.searchActive = false; - this.lastSearchValue = '' - this.lastResultsPage = ''; - } - } -} - -// ----------------------------------------------------------------------- - -// The class that handles everything on the search results page. -function SearchResults(name) -{ - // The number of matches from the last run of . - this.lastMatchCount = 0; - this.lastKey = 0; - this.repeatOn = false; - - // Toggles the visibility of the passed element ID. - this.FindChildElement = function(id) - { - var parentElement = document.getElementById(id); - var element = parentElement.firstChild; - - while (element && element!=parentElement) - { - if (element.nodeName == 'DIV' && element.className == 'SRChildren') - { - return element; - } - - if (element.nodeName == 'DIV' && element.hasChildNodes()) - { - element = element.firstChild; - } - else if (element.nextSibling) - { - element = element.nextSibling; - } - else - { - do - { - element = element.parentNode; - } - while (element && element!=parentElement && !element.nextSibling); - - if (element && element!=parentElement) - { - element = element.nextSibling; - } - } - } - } - - this.Toggle = function(id) - { - var element = this.FindChildElement(id); - if (element) - { - if (element.style.display == 'block') - { - element.style.display = 'none'; - } - else - { - element.style.display = 'block'; - } - } - } - - // Searches for the passed string. If there is no parameter, - // it takes it from the URL query. - // - // Always returns true, since other documents may try to call it - // and that may or may not be possible. - this.Search = function(search) - { - if (!search) // get search word from URL - { - search = window.location.search; - search = search.substring(1); // Remove the leading '?' - search = unescape(search); - } - - search = search.replace(/^ +/, ""); // strip leading spaces - search = search.replace(/ +$/, ""); // strip trailing spaces - search = search.toLowerCase(); - search = convertToId(search); - - var resultRows = document.getElementsByTagName("div"); - var matches = 0; - - var i = 0; - while (i < resultRows.length) - { - var row = resultRows.item(i); - if (row.className == "SRResult") - { - var rowMatchName = row.id.toLowerCase(); - rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' - - if (search.length<=rowMatchName.length && - rowMatchName.substr(0, search.length)==search) - { - row.style.display = 'block'; - matches++; - } - else - { - row.style.display = 'none'; - } - } - i++; - } - document.getElementById("Searching").style.display='none'; - if (matches == 0) // no results - { - document.getElementById("NoMatches").style.display='block'; - } - else // at least one result - { - document.getElementById("NoMatches").style.display='none'; - } - this.lastMatchCount = matches; - return true; - } - - // return the first item with index index or higher that is visible - this.NavNext = function(index) - { - var focusItem; - while (1) - { - var focusName = 'Item'+index; - focusItem = document.getElementById(focusName); - if (focusItem && focusItem.parentNode.parentNode.style.display=='block') - { - break; - } - else if (!focusItem) // last element - { - break; - } - focusItem=null; - index++; - } - return focusItem; - } - - this.NavPrev = function(index) - { - var focusItem; - while (1) - { - var focusName = 'Item'+index; - focusItem = document.getElementById(focusName); - if (focusItem && focusItem.parentNode.parentNode.style.display=='block') - { - break; - } - else if (!focusItem) // last element - { - break; - } - focusItem=null; - index--; - } - return focusItem; - } - - this.ProcessKeys = function(e) - { - if (e.type == "keydown") - { - this.repeatOn = false; - this.lastKey = e.keyCode; - } - else if (e.type == "keypress") - { - if (!this.repeatOn) - { - if (this.lastKey) this.repeatOn = true; - return false; // ignore first keypress after keydown - } - } - else if (e.type == "keyup") - { - this.lastKey = 0; - this.repeatOn = false; - } - return this.lastKey!=0; - } - - this.Nav = function(evt,itemIndex) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==13) return true; - if (!this.ProcessKeys(e)) return false; - - if (this.lastKey==38) // Up - { - var newIndex = itemIndex-1; - var focusItem = this.NavPrev(newIndex); - if (focusItem) - { - var child = this.FindChildElement(focusItem.parentNode.parentNode.id); - if (child && child.style.display == 'block') // children visible - { - var n=0; - var tmpElem; - while (1) // search for last child - { - tmpElem = document.getElementById('Item'+newIndex+'_c'+n); - if (tmpElem) - { - focusItem = tmpElem; - } - else // found it! - { - break; - } - n++; - } - } - } - if (focusItem) - { - focusItem.focus(); - } - else // return focus to search field - { - parent.document.getElementById("MSearchField").focus(); - } - } - else if (this.lastKey==40) // Down - { - var newIndex = itemIndex+1; - var focusItem; - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem && elem.style.display == 'block') // children visible - { - focusItem = document.getElementById('Item'+itemIndex+'_c0'); - } - if (!focusItem) focusItem = this.NavNext(newIndex); - if (focusItem) focusItem.focus(); - } - else if (this.lastKey==39) // Right - { - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem) elem.style.display = 'block'; - } - else if (this.lastKey==37) // Left - { - var item = document.getElementById('Item'+itemIndex); - var elem = this.FindChildElement(item.parentNode.parentNode.id); - if (elem) elem.style.display = 'none'; - } - else if (this.lastKey==27) // Escape - { - parent.searchBox.CloseResultsWindow(); - parent.document.getElementById("MSearchField").focus(); - } - else if (this.lastKey==13) // Enter - { - return true; - } - return false; - } - - this.NavChild = function(evt,itemIndex,childIndex) - { - var e = (evt) ? evt : window.event; // for IE - if (e.keyCode==13) return true; - if (!this.ProcessKeys(e)) return false; - - if (this.lastKey==38) // Up - { - if (childIndex>0) - { - var newIndex = childIndex-1; - document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); - } - else // already at first child, jump to parent - { - document.getElementById('Item'+itemIndex).focus(); - } - } - else if (this.lastKey==40) // Down - { - var newIndex = childIndex+1; - var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); - if (!elem) // last child, jump to parent next parent - { - elem = this.NavNext(itemIndex+1); - } - if (elem) - { - elem.focus(); - } - } - else if (this.lastKey==27) // Escape - { - parent.searchBox.CloseResultsWindow(); - parent.document.getElementById("MSearchField").focus(); - } - else if (this.lastKey==13) // Enter - { - return true; - } - return false; - } -} diff --git a/libraries/LiquidCrystal/utility/docs/html/search/search_l.png b/libraries/LiquidCrystal/utility/docs/html/search/search_l.png deleted file mode 100644 index c872f4d..0000000 Binary files a/libraries/LiquidCrystal/utility/docs/html/search/search_l.png and /dev/null differ diff --git a/libraries/LiquidCrystal/utility/docs/html/search/search_m.png b/libraries/LiquidCrystal/utility/docs/html/search/search_m.png deleted file mode 100644 index b429a16..0000000 Binary files a/libraries/LiquidCrystal/utility/docs/html/search/search_m.png and /dev/null differ diff --git a/libraries/LiquidCrystal/utility/docs/html/search/search_r.png b/libraries/LiquidCrystal/utility/docs/html/search/search_r.png deleted file mode 100644 index 97ee8b4..0000000 Binary files a/libraries/LiquidCrystal/utility/docs/html/search/search_r.png and /dev/null differ diff --git a/libraries/LiquidCrystal/utility/docs/html/search/typedefs_66.html b/libraries/LiquidCrystal/utility/docs/html/search/typedefs_66.html deleted file mode 100644 index 7ad240b..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/typedefs_66.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- fio_bit - FastIO.h -
-
-
-
- fio_register - FastIO.h -
-
-
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/search/variables_5f.html b/libraries/LiquidCrystal/utility/docs/html/search/variables_5f.html deleted file mode 100644 index 0bac2f1..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/search/variables_5f.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - -
-
Loading...
-
-
- _cols - LCD -
-
-
-
- _displaycontrol - LCD -
-
-
-
- _displayfunction - LCD -
-
-
-
- _displaymode - LCD -
-
-
-
- _numlines - LCD -
-
-
-
- _polarity - LCD -
-
-
Searching...
-
No Matches
- -
- - diff --git a/libraries/LiquidCrystal/utility/docs/html/tab_a.png b/libraries/LiquidCrystal/utility/docs/html/tab_a.png deleted file mode 100644 index 2d99ef2..0000000 Binary files a/libraries/LiquidCrystal/utility/docs/html/tab_a.png and /dev/null differ diff --git a/libraries/LiquidCrystal/utility/docs/html/tab_b.png b/libraries/LiquidCrystal/utility/docs/html/tab_b.png deleted file mode 100644 index b2c3d2b..0000000 Binary files a/libraries/LiquidCrystal/utility/docs/html/tab_b.png and /dev/null differ diff --git a/libraries/LiquidCrystal/utility/docs/html/tab_h.png b/libraries/LiquidCrystal/utility/docs/html/tab_h.png deleted file mode 100644 index c11f48f..0000000 Binary files a/libraries/LiquidCrystal/utility/docs/html/tab_h.png and /dev/null differ diff --git a/libraries/LiquidCrystal/utility/docs/html/tab_s.png b/libraries/LiquidCrystal/utility/docs/html/tab_s.png deleted file mode 100644 index 978943a..0000000 Binary files a/libraries/LiquidCrystal/utility/docs/html/tab_s.png and /dev/null differ diff --git a/libraries/LiquidCrystal/utility/docs/html/tabs.css b/libraries/LiquidCrystal/utility/docs/html/tabs.css deleted file mode 100644 index 2192056..0000000 --- a/libraries/LiquidCrystal/utility/docs/html/tabs.css +++ /dev/null @@ -1,59 +0,0 @@ -.tabs, .tabs2, .tabs3 { - background-image: url('tab_b.png'); - width: 100%; - z-index: 101; - font-size: 13px; -} - -.tabs2 { - font-size: 10px; -} -.tabs3 { - font-size: 9px; -} - -.tablist { - margin: 0; - padding: 0; - display: table; -} - -.tablist li { - float: left; - display: table-cell; - background-image: url('tab_b.png'); - line-height: 36px; - list-style: none; -} - -.tablist a { - display: block; - padding: 0 20px; - font-weight: bold; - background-image:url('tab_s.png'); - background-repeat:no-repeat; - background-position:right; - color: #283A5D; - text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); - text-decoration: none; - outline: none; -} - -.tabs3 .tablist a { - padding: 0 10px; -} - -.tablist a:hover { - background-image: url('tab_h.png'); - background-repeat:repeat-x; - color: #fff; - text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); - text-decoration: none; -} - -.tablist li.current a { - background-image: url('tab_a.png'); - background-repeat:repeat-x; - color: #fff; - text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); -} diff --git a/libraries/LowPower/Examples/idleWakePeriodic/idleWakePeriodic.ino b/libraries/LowPower/Examples/idleWakePeriodic/idleWakePeriodic.ino deleted file mode 100644 index e93072d..0000000 --- a/libraries/LowPower/Examples/idleWakePeriodic/idleWakePeriodic.ino +++ /dev/null @@ -1,31 +0,0 @@ -// **** INCLUDES ***** -#include "LowPower.h" - -void setup() -{ - // No setup is required for this library -} - -void loop() -{ - // Enter idle state for 8 s with the rest of peripherals turned off - // Each microcontroller comes with different number of peripherals - // Comment off line of code where necessary - - // ATmega328P, ATmega168 - LowPower.idle(SLEEP_8S, ADC_OFF, TIMER2_OFF, TIMER1_OFF, TIMER0_OFF, - SPI_OFF, USART0_OFF, TWI_OFF); - - // ATmega32U4 - //LowPower.idle(SLEEP_8S, ADC_OFF, TIMER4_OFF, TIMER3_OFF, TIMER1_OFF, - // TIMER0_OFF, SPI_OFF, USART1_OFF, TWI_OFF, USB_OFF); - - // ATmega2560 - //LowPower.idle(SLEEP_8S, ADC_OFF, TIMER5_OFF, TIMER4_OFF, TIMER3_OFF, - // TIMER2_OFF, TIMER1_OFF, TIMER0_OFF, SPI_OFF, USART3_OFF, - // USART2_OFF, USART1_OFF, USART0_OFF, TWI_OFF); - - // Do something here - // Example: Read sensor, data logging, data transmission. -} - diff --git a/libraries/LowPower/Examples/powerDownWakeExternalInterrupt/powerDownWakeExternalInterrupt.ino b/libraries/LowPower/Examples/powerDownWakeExternalInterrupt/powerDownWakeExternalInterrupt.ino deleted file mode 100644 index f914bd6..0000000 --- a/libraries/LowPower/Examples/powerDownWakeExternalInterrupt/powerDownWakeExternalInterrupt.ino +++ /dev/null @@ -1,33 +0,0 @@ -// **** INCLUDES ***** -#include "LowPower.h" - -// Use pin 2 as wake up pin -const int wakeUpPin = 2; - -void wakeUp() -{ - // Just a handler for the pin interrupt. -} - -void setup() -{ - // Configure wake up pin as input. - // This will consumes few uA of current. - pinMode(wakeUpPin, INPUT); -} - -void loop() -{ - // Allow wake up pin to trigger interrupt on low. - attachInterrupt(0, wakeUp, LOW); - - // Enter power down state with ADC and BOD module disabled. - // Wake up when wake up pin is low. - LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF); - - // Disable external pin interrupt on wake up pin. - detachInterrupt(0); - - // Do something here - // Example: Read sensor, data logging, data transmission. -} diff --git a/libraries/LowPower/Examples/powerDownWakePeriodic/powerDownWakePeriodic.ino b/libraries/LowPower/Examples/powerDownWakePeriodic/powerDownWakePeriodic.ino deleted file mode 100644 index bce822a..0000000 --- a/libraries/LowPower/Examples/powerDownWakePeriodic/powerDownWakePeriodic.ino +++ /dev/null @@ -1,16 +0,0 @@ -// **** INCLUDES ***** -#include "LowPower.h" - -void setup() -{ - // No setup is required for this library -} - -void loop() -{ - // Enter power down state for 8 s with ADC and BOD module disabled - LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF); - - // Do something here - // Example: Read sensor, data logging, data transmission. -} diff --git a/libraries/LowPower/LowPower.cpp b/libraries/LowPower/LowPower.cpp deleted file mode 100644 index a72cc31..0000000 --- a/libraries/LowPower/LowPower.cpp +++ /dev/null @@ -1,856 +0,0 @@ -/******************************************************************************* -* LowPower Library -* Version: 1.30 -* Date: 22-05-2013 -* Company: Rocket Scream Electronics -* Website: www.rocketscream.com -* -* This is a lightweight low power library for Arduino. Please check our wiki -* (www.rocketscream.com/wiki) for more information on using this piece of -* library. -* -* This library is licensed under Creative Commons Attribution-ShareAlike 3.0 -* Unported License. -* -* Revision Description -* ======== =========== -* 1.30 Added support for ATMega168, ATMega2560, ATMega1280 & ATMega32U4. -* Tested to work with Arduino IDE 1.0.1 - 1.0.4. -* 1.20 Remove typo error in idle method for checking whether Timer 0 was -* turned off. -* Remove dependecy on WProgram.h which is not required. -* Tested to work with Arduino IDE 1.0. -* 1.10 Added #ifndef for sleep_bod_disable() for compatibility with future -* Arduino IDE release. -* 1.00 Initial public release. -*******************************************************************************/ -#include -#include -#include -#include -#include "LowPower.h" - -// Only Pico Power devices can change BOD settings through software -#if defined __AVR_ATmega328P__ -#ifndef sleep_bod_disable -#define sleep_bod_disable() \ -do { \ - unsigned char tempreg; \ - __asm__ __volatile__("in %[tempreg], %[mcucr]" "\n\t" \ - "ori %[tempreg], %[bods_bodse]" "\n\t" \ - "out %[mcucr], %[tempreg]" "\n\t" \ - "andi %[tempreg], %[not_bodse]" "\n\t" \ - "out %[mcucr], %[tempreg]" \ - : [tempreg] "=&d" (tempreg) \ - : [mcucr] "I" _SFR_IO_ADDR(MCUCR), \ - [bods_bodse] "i" (_BV(BODS) | _BV(BODSE)), \ - [not_bodse] "i" (~_BV(BODSE))); \ -} while (0) -#endif -#endif - -#define lowPowerBodOn(mode) \ -do { \ - set_sleep_mode(mode); \ - cli(); \ - sleep_enable(); \ - sei(); \ - sleep_cpu(); \ - sleep_disable(); \ - sei(); \ -} while (0); - -// Only Pico Power devices can change BOD settings through software -#if defined __AVR_ATmega328P__ -#define lowPowerBodOff(mode)\ -do { \ - set_sleep_mode(mode); \ - cli(); \ - sleep_enable(); \ - sleep_bod_disable(); \ - sei(); \ - sleep_cpu(); \ - sleep_disable(); \ - sei(); \ -} while (0); -#endif - -// Some macros is still missing from AVR GCC distribution for ATmega32U4 -#if defined __AVR_ATmega32U4__ - // Timer 4 PRR bit is currently not defined in iom32u4.h - #ifndef PRTIM4 - #define PRTIM4 4 - #endif - - // Timer 4 power reduction macro is not defined currently in power.h - #ifndef power_timer4_disable - #define power_timer4_disable() (PRR1 |= (uint8_t)(1 << PRTIM4)) - #endif - - #ifndef power_timer4_enable - #define power_timer4_enable() (PRR1 &= (uint8_t)~(1 << PRTIM4)) - #endif -#endif - -/******************************************************************************* -* Name: idle -* Description: Putting ATmega328P/168 into idle state. Please make sure you -* understand the implication and result of disabling module. -* -* Argument Description -* ========= =========== -* 1. period Duration of low power mode. Use SLEEP_FOREVER to use other wake -* up resource: -* (a) SLEEP_15MS - 15 ms sleep -* (b) SLEEP_30MS - 30 ms sleep -* (c) SLEEP_60MS - 60 ms sleep -* (d) SLEEP_120MS - 120 ms sleep -* (e) SLEEP_250MS - 250 ms sleep -* (f) SLEEP_500MS - 500 ms sleep -* (g) SLEEP_1S - 1 s sleep -* (h) SLEEP_2S - 2 s sleep -* (i) SLEEP_4S - 4 s sleep -* (j) SLEEP_8S - 8 s sleep -* (k) SLEEP_FOREVER - Sleep without waking up through WDT -* -* 2. adc ADC module disable control: -* (a) ADC_OFF - Turn off ADC module -* (b) ADC_ON - Leave ADC module in its default state -* -* 3. timer2 Timer 2 module disable control: -* (a) TIMER2_OFF - Turn off Timer 2 module -* (b) TIMER2_ON - Leave Timer 2 module in its default state -* -* 4. timer1 Timer 1 module disable control: -* (a) TIMER1_OFF - Turn off Timer 1 module -* (b) TIMER1_ON - Leave Timer 1 module in its default state -* -* 5. timer0 Timer 0 module disable control: -* (a) TIMER0_OFF - Turn off Timer 0 module -* (b) TIMER0_ON - Leave Timer 0 module in its default state -* -* 6. spi SPI module disable control: -* (a) SPI_OFF - Turn off SPI module -* (b) SPI_ON - Leave SPI module in its default state -* -* 7. usart0 USART0 module disable control: -* (a) USART0_OFF - Turn off USART0 module -* (b) USART0_ON - Leave USART0 module in its default state -* -* 8. twi TWI module disable control: -* (a) TWI_OFF - Turn off TWI module -* (b) TWI_ON - Leave TWI module in its default state -* -*******************************************************************************/ -#if defined (__AVR_ATmega328P__) || defined (__AVR_ATmega168__) -void LowPowerClass::idle(period_t period, adc_t adc, timer2_t timer2, - timer1_t timer1, timer0_t timer0, - spi_t spi, usart0_t usart0, twi_t twi) -{ - // Temporary clock source variable - unsigned char clockSource = 0; - - if (timer2 == TIMER2_OFF) - { - if (TCCR2B & CS22) clockSource |= (1 << CS22); - if (TCCR2B & CS21) clockSource |= (1 << CS21); - if (TCCR2B & CS20) clockSource |= (1 << CS20); - - // Remove the clock source to shutdown Timer2 - TCCR2B &= ~(1 << CS22); - TCCR2B &= ~(1 << CS21); - TCCR2B &= ~(1 << CS20); - - power_timer2_disable(); - } - - if (adc == ADC_OFF) - { - ADCSRA &= ~(1 << ADEN); - power_adc_disable(); - } - - if (timer1 == TIMER1_OFF) power_timer1_disable(); - if (timer0 == TIMER0_OFF) power_timer0_disable(); - if (spi == SPI_OFF) power_spi_disable(); - if (usart0 == USART0_OFF) power_usart0_disable(); - if (twi == TWI_OFF) power_twi_disable(); - - if (period != SLEEP_FOREVER) - { - wdt_enable(period); - WDTCSR |= (1 << WDIE); - } - - lowPowerBodOn(SLEEP_MODE_IDLE); - - if (adc == ADC_OFF) - { - power_adc_enable(); - ADCSRA |= (1 << ADEN); - } - - if (timer2 == TIMER2_OFF) - { - if (clockSource & CS22) TCCR2B |= (1 << CS22); - if (clockSource & CS21) TCCR2B |= (1 << CS21); - if (clockSource & CS20) TCCR2B |= (1 << CS20); - - power_timer2_enable(); - } - - if (timer1 == TIMER1_OFF) power_timer1_enable(); - if (timer0 == TIMER0_OFF) power_timer0_enable(); - if (spi == SPI_OFF) power_spi_enable(); - if (usart0 == USART0_OFF) power_usart0_enable(); - if (twi == TWI_OFF) power_twi_enable(); -} -#endif - -/******************************************************************************* -* Name: idle -* Description: Putting ATmega32U4 into idle state. Please make sure you -* understand the implication and result of disabling module. -* Take note that Timer 2 is not available and USART0 -* is replaced with USART1 on ATmega32U4. -* -* Argument Description -* ========= =========== -* 1. period Duration of low power mode. Use SLEEP_FOREVER to use other wake -* up resource: -* (a) SLEEP_15MS - 15 ms sleep -* (b) SLEEP_30MS - 30 ms sleep -* (c) SLEEP_60MS - 60 ms sleep -* (d) SLEEP_120MS - 120 ms sleep -* (e) SLEEP_250MS - 250 ms sleep -* (f) SLEEP_500MS - 500 ms sleep -* (g) SLEEP_1S - 1 s sleep -* (h) SLEEP_2S - 2 s sleep -* (i) SLEEP_4S - 4 s sleep -* (j) SLEEP_8S - 8 s sleep -* (k) SLEEP_FOREVER - Sleep without waking up through WDT -* -* 2. adc ADC module disable control: -* (a) ADC_OFF - Turn off ADC module -* (b) ADC_ON - Leave ADC module in its default state -* -* 3. timer4 Timer 4 module disable control: -* (a) TIMER4_OFF - Turn off Timer 4 module -* (b) TIMER4_ON - Leave Timer 4 module in its default state -* -* 4. timer3 Timer 3 module disable control: -* (a) TIMER3_OFF - Turn off Timer 3 module -* (b) TIMER3_ON - Leave Timer 3 module in its default state -* -* 5. timer1 Timer 1 module disable control: -* (a) TIMER1_OFF - Turn off Timer 1 module -* (b) TIMER1_ON - Leave Timer 1 module in its default state -* -* 6. timer0 Timer 0 module disable control: -* (a) TIMER0_OFF - Turn off Timer 0 module -* (b) TIMER0_ON - Leave Timer 0 module in its default state -* -* 7. spi SPI module disable control: -* (a) SPI_OFF - Turn off SPI module -* (b) SPI_ON - Leave SPI module in its default state -* -* 8. usart1 USART1 module disable control: -* (a) USART1_OFF - Turn off USART1 module -* (b) USART1_ON - Leave USART1 module in its default state -* -* 9. twi TWI module disable control: -* (a) TWI_OFF - Turn off TWI module -* (b) TWI_ON - Leave TWI module in its default state -* -* 10.usb USB module disable control: -* (a) USB_OFF - Turn off USB module -* (b) USB_ON - Leave USB module in its default state -*******************************************************************************/ -#if defined __AVR_ATmega32U4__ -void LowPowerClass::idle(period_t period, adc_t adc, - timer4_t timer4, timer3_t timer3, - timer1_t timer1, timer0_t timer0, - spi_t spi, usart1_t usart1, twi_t twi, usb_t usb) -{ - if (adc == ADC_OFF) - { - ADCSRA &= ~(1 << ADEN); - power_adc_disable(); - } - - if (timer4 == TIMER4_OFF) power_timer4_disable(); - if (timer3 == TIMER3_OFF) power_timer3_disable(); - if (timer1 == TIMER1_OFF) power_timer1_disable(); - if (timer0 == TIMER0_OFF) power_timer0_disable(); - if (spi == SPI_OFF) power_spi_disable(); - if (usart1 == USART1_OFF) power_usart1_disable(); - if (twi == TWI_OFF) power_twi_disable(); - if (usb == USB_OFF) power_usb_disable(); - - if (period != SLEEP_FOREVER) - { - wdt_enable(period); - WDTCSR |= (1 << WDIE); - } - - lowPowerBodOn(SLEEP_MODE_IDLE); - - if (adc == ADC_OFF) - { - power_adc_enable(); - ADCSRA |= (1 << ADEN); - } - - if (timer4 == TIMER4_OFF) power_timer4_enable(); - if (timer3 == TIMER3_OFF) power_timer3_enable(); - if (timer1 == TIMER1_OFF) power_timer1_enable(); - if (timer0 == TIMER0_OFF) power_timer0_enable(); - if (spi == SPI_OFF) power_spi_enable(); - if (usart1 == USART1_OFF) power_usart1_enable(); - if (twi == TWI_OFF) power_twi_enable(); - if (usb == USB_OFF) power_usb_enable(); -} -#endif - -/******************************************************************************* -* Name: idle -* Description: Putting ATmega2560 & ATmega1280 into idle state. Please make sure -* you understand the implication and result of disabling module. -* Take note that extra Timer 5, 4, 3 compared to an ATmega328P/168. -* Also take note that extra USART 3, 2, 1 compared to an -* ATmega328P/168. -* -* Argument Description -* ========= =========== -* 1. period Duration of low power mode. Use SLEEP_FOREVER to use other wake -* up resource: -* (a) SLEEP_15MS - 15 ms sleep -* (b) SLEEP_30MS - 30 ms sleep -* (c) SLEEP_60MS - 60 ms sleep -* (d) SLEEP_120MS - 120 ms sleep -* (e) SLEEP_250MS - 250 ms sleep -* (f) SLEEP_500MS - 500 ms sleep -* (g) SLEEP_1S - 1 s sleep -* (h) SLEEP_2S - 2 s sleep -* (i) SLEEP_4S - 4 s sleep -* (j) SLEEP_8S - 8 s sleep -* (k) SLEEP_FOREVER - Sleep without waking up through WDT -* -* 2. adc ADC module disable control: -* (a) ADC_OFF - Turn off ADC module -* (b) ADC_ON - Leave ADC module in its default state -* -* 3. timer5 Timer 5 module disable control: -* (a) TIMER5_OFF - Turn off Timer 5 module -* (b) TIMER5_ON - Leave Timer 5 module in its default state -* -* 4. timer4 Timer 4 module disable control: -* (a) TIMER4_OFF - Turn off Timer 4 module -* (b) TIMER4_ON - Leave Timer 4 module in its default state -* -* 5. timer3 Timer 3 module disable control: -* (a) TIMER3_OFF - Turn off Timer 3 module -* (b) TIMER3_ON - Leave Timer 3 module in its default state -* -* 6. timer2 Timer 2 module disable control: -* (a) TIMER2_OFF - Turn off Timer 2 module -* (b) TIMER2_ON - Leave Timer 2 module in its default state -* -* 7. timer1 Timer 1 module disable control: -* (a) TIMER1_OFF - Turn off Timer 1 module -* (b) TIMER1_ON - Leave Timer 1 module in its default state -* -* 8. timer0 Timer 0 module disable control: -* (a) TIMER0_OFF - Turn off Timer 0 module -* (b) TIMER0_ON - Leave Timer 0 module in its default state -* -* 9. spi SPI module disable control: -* (a) SPI_OFF - Turn off SPI module -* (b) SPI_ON - Leave SPI module in its default state -* -* 10.usart3 USART3 module disable control: -* (a) USART3_OFF - Turn off USART3 module -* (b) USART3_ON - Leave USART3 module in its default state -* -* 11.usart2 USART2 module disable control: -* (a) USART2_OFF - Turn off USART2 module -* (b) USART2_ON - Leave USART2 module in its default state -* -* 12.usart1 USART1 module disable control: -* (a) USART1_OFF - Turn off USART1 module -* (b) USART1_ON - Leave USART1 module in its default state -* -* 13.usart0 USART0 module disable control: -* (a) USART0_OFF - Turn off USART0 module -* (b) USART0_ON - Leave USART0 module in its default state -* -* 14.twi TWI module disable control: -* (a) TWI_OFF - Turn off TWI module -* (b) TWI_ON - Leave TWI module in its default state -* -*******************************************************************************/ -#if defined (__AVR_ATmega2560__) || defined (__AVR_ATmega1280__) -void LowPowerClass::idle(period_t period, adc_t adc, timer5_t timer5, - timer4_t timer4, timer3_t timer3, timer2_t timer2, - timer1_t timer1, timer0_t timer0, spi_t spi, - usart3_t usart3, usart2_t usart2, usart1_t usart1, - usart0_t usart0, twi_t twi) -{ - // Temporary clock source variable - unsigned char clockSource = 0; - - if (timer2 == TIMER2_OFF) - { - if (TCCR2B & CS22) clockSource |= (1 << CS22); - if (TCCR2B & CS21) clockSource |= (1 << CS21); - if (TCCR2B & CS20) clockSource |= (1 << CS20); - - // Remove the clock source to shutdown Timer2 - TCCR2B &= ~(1 << CS22); - TCCR2B &= ~(1 << CS21); - TCCR2B &= ~(1 << CS20); - - power_timer2_disable(); - } - - if (adc == ADC_OFF) - { - ADCSRA &= ~(1 << ADEN); - power_adc_disable(); - } - - if (timer5 == TIMER5_OFF) power_timer5_disable(); - if (timer4 == TIMER4_OFF) power_timer4_disable(); - if (timer3 == TIMER3_OFF) power_timer3_disable(); - if (timer1 == TIMER1_OFF) power_timer1_disable(); - if (timer0 == TIMER0_OFF) power_timer0_disable(); - if (spi == SPI_OFF) power_spi_disable(); - if (usart3 == USART3_OFF) power_usart3_disable(); - if (usart2 == USART2_OFF) power_usart2_disable(); - if (usart1 == USART1_OFF) power_usart1_disable(); - if (usart0 == USART0_OFF) power_usart0_disable(); - if (twi == TWI_OFF) power_twi_disable(); - - if (period != SLEEP_FOREVER) - { - wdt_enable(period); - WDTCSR |= (1 << WDIE); - } - - lowPowerBodOn(SLEEP_MODE_IDLE); - - if (adc == ADC_OFF) - { - power_adc_enable(); - ADCSRA |= (1 << ADEN); - } - - if (timer2 == TIMER2_OFF) - { - if (clockSource & CS22) TCCR2B |= (1 << CS22); - if (clockSource & CS21) TCCR2B |= (1 << CS21); - if (clockSource & CS20) TCCR2B |= (1 << CS20); - - power_timer2_enable(); - } - - if (timer5 == TIMER5_OFF) power_timer5_enable(); - if (timer4 == TIMER4_OFF) power_timer4_enable(); - if (timer3 == TIMER3_OFF) power_timer3_enable(); - if (timer1 == TIMER1_OFF) power_timer1_enable(); - if (timer0 == TIMER0_OFF) power_timer0_enable(); - if (spi == SPI_OFF) power_spi_enable(); - if (usart3 == USART3_OFF) power_usart3_enable(); - if (usart2 == USART2_OFF) power_usart2_enable(); - if (usart1 == USART1_OFF) power_usart1_enable(); - if (usart0 == USART0_OFF) power_usart0_enable(); - if (twi == TWI_OFF) power_twi_enable(); -} -#endif - -/******************************************************************************* -* Name: adcNoiseReduction -* Description: Putting microcontroller into ADC noise reduction state. This is -* a very useful state when using the ADC to achieve best and low -* noise signal. -* -* Argument Description -* ========= =========== -* 1. period Duration of low power mode. Use SLEEP_FOREVER to use other wake -* up resource: -* (a) SLEEP_15MS - 15 ms sleep -* (b) SLEEP_30MS - 30 ms sleep -* (c) SLEEP_60MS - 60 ms sleep -* (d) SLEEP_120MS - 120 ms sleep -* (e) SLEEP_250MS - 250 ms sleep -* (f) SLEEP_500MS - 500 ms sleep -* (g) SLEEP_1S - 1 s sleep -* (h) SLEEP_2S - 2 s sleep -* (i) SLEEP_4S - 4 s sleep -* (j) SLEEP_8S - 8 s sleep -* (k) SLEEP_FOREVER - Sleep without waking up through WDT -* -* 2. adc ADC module disable control. Turning off the ADC module is -* basically removing the purpose of this low power mode. -* (a) ADC_OFF - Turn off ADC module -* (b) ADC_ON - Leave ADC module in its default state -* -* 3. timer2 Timer 2 module disable control: -* (a) TIMER2_OFF - Turn off Timer 2 module -* (b) TIMER2_ON - Leave Timer 2 module in its default state -* -*******************************************************************************/ -void LowPowerClass::adcNoiseReduction(period_t period, adc_t adc, - timer2_t timer2) -{ - // Temporary clock source variable - unsigned char clockSource = 0; - - #if !defined(__AVR_ATmega32U4__) - if (timer2 == TIMER2_OFF) - { - if (TCCR2B & CS22) clockSource |= (1 << CS22); - if (TCCR2B & CS21) clockSource |= (1 << CS21); - if (TCCR2B & CS20) clockSource |= (1 << CS20); - - // Remove the clock source to shutdown Timer2 - TCCR2B &= ~(1 << CS22); - TCCR2B &= ~(1 << CS21); - TCCR2B &= ~(1 << CS20); - } - #endif - - if (adc == ADC_OFF) ADCSRA &= ~(1 << ADEN); - - if (period != SLEEP_FOREVER) - { - wdt_enable(period); - WDTCSR |= (1 << WDIE); - } - - lowPowerBodOn(SLEEP_MODE_ADC); - - if (adc == ADC_OFF) ADCSRA |= (1 << ADEN); - - #if !defined(__AVR_ATmega32U4__) - if (timer2 == TIMER2_OFF) - { - if (clockSource & CS22) TCCR2B |= (1 << CS22); - if (clockSource & CS21) TCCR2B |= (1 << CS21); - if (clockSource & CS20) TCCR2B |= (1 << CS20); - - } - #endif -} - -/******************************************************************************* -* Name: powerDown -* Description: Putting microcontroller into power down state. This is -* the lowest current consumption state. Use this together with -* external pin interrupt to wake up through external event -* triggering (example: RTC clockout pin, SD card detect pin). -* -* Argument Description -* ========= =========== -* 1. period Duration of low power mode. Use SLEEP_FOREVER to use other wake -* up resource: -* (a) SLEEP_15MS - 15 ms sleep -* (b) SLEEP_30MS - 30 ms sleep -* (c) SLEEP_60MS - 60 ms sleep -* (d) SLEEP_120MS - 120 ms sleep -* (e) SLEEP_250MS - 250 ms sleep -* (f) SLEEP_500MS - 500 ms sleep -* (g) SLEEP_1S - 1 s sleep -* (h) SLEEP_2S - 2 s sleep -* (i) SLEEP_4S - 4 s sleep -* (j) SLEEP_8S - 8 s sleep -* (k) SLEEP_FOREVER - Sleep without waking up through WDT -* -* 2. adc ADC module disable control. Turning off the ADC module is -* basically removing the purpose of this low power mode. -* (a) ADC_OFF - Turn off ADC module -* (b) ADC_ON - Leave ADC module in its default state -* -* 3. bod Brown Out Detector (BOD) module disable control: -* (a) BOD_OFF - Turn off BOD module -* (b) BOD_ON - Leave BOD module in its default state -* -*******************************************************************************/ -void LowPowerClass::powerDown(period_t period, adc_t adc, bod_t bod) -{ - if (adc == ADC_OFF) ADCSRA &= ~(1 << ADEN); - - if (period != SLEEP_FOREVER) - { - wdt_enable(period); - WDTCSR |= (1 << WDIE); - } - if (bod == BOD_OFF) - { - #if defined __AVR_ATmega328P__ - lowPowerBodOff(SLEEP_MODE_PWR_DOWN); - #else - lowPowerBodOn(SLEEP_MODE_PWR_DOWN); - #endif - } - else - { - lowPowerBodOn(SLEEP_MODE_PWR_DOWN); - } - - if (adc == ADC_OFF) ADCSRA |= (1 << ADEN); -} - -/******************************************************************************* -* Name: powerSave -* Description: Putting microcontroller into power save state. This is -* the lowest current consumption state after power down. -* Use this state together with an external 32.768 kHz crystal (but -* 8/16 MHz crystal/resonator need to be removed) to provide an -* asynchronous clock source to Timer 2. Please take note that -* Timer 2 is also used by the Arduino core for PWM operation. -* Please refer to wiring.c for explanation. Removal of the external -* 8/16 MHz crystal/resonator requires the microcontroller to run -* on its internal RC oscillator which is not so accurate for time -* critical operation. -* -* Argument Description -* ========= =========== -* 1. period Duration of low power mode. Use SLEEP_FOREVER to use other wake -* up resource: -* (a) SLEEP_15MS - 15 ms sleep -* (b) SLEEP_30MS - 30 ms sleep -* (c) SLEEP_60MS - 60 ms sleep -* (d) SLEEP_120MS - 120 ms sleep -* (e) SLEEP_250MS - 250 ms sleep -* (f) SLEEP_500MS - 500 ms sleep -* (g) SLEEP_1S - 1 s sleep -* (h) SLEEP_2S - 2 s sleep -* (i) SLEEP_4S - 4 s sleep -* (j) SLEEP_8S - 8 s sleep -* (k) SLEEP_FOREVER - Sleep without waking up through WDT -* -* 2. adc ADC module disable control. Turning off the ADC module is -* basically removing the purpose of this low power mode. -* (a) ADC_OFF - Turn off ADC module -* (b) ADC_ON - Leave ADC module in its default state -* -* 3. bod Brown Out Detector (BOD) module disable control: -* (a) BOD_OFF - Turn off BOD module -* (b) BOD_ON - Leave BOD module in its default state -* -* 4. timer2 Timer 2 module disable control: -* (a) TIMER2_OFF - Turn off Timer 2 module -* (b) TIMER2_ON - Leave Timer 2 module in its default state -* -*******************************************************************************/ -void LowPowerClass::powerSave(period_t period, adc_t adc, bod_t bod, - timer2_t timer2) -{ - // Temporary clock source variable - unsigned char clockSource = 0; - - #if !defined(__AVR_ATmega32U4__) - if (timer2 == TIMER2_OFF) - { - if (TCCR2B & CS22) clockSource |= (1 << CS22); - if (TCCR2B & CS21) clockSource |= (1 << CS21); - if (TCCR2B & CS20) clockSource |= (1 << CS20); - - // Remove the clock source to shutdown Timer2 - TCCR2B &= ~(1 << CS22); - TCCR2B &= ~(1 << CS21); - TCCR2B &= ~(1 << CS20); - } - #endif - - if (adc == ADC_OFF) ADCSRA &= ~(1 << ADEN); - - if (period != SLEEP_FOREVER) - { - wdt_enable(period); - WDTCSR |= (1 << WDIE); - } - - if (bod == BOD_OFF) - { - #if defined __AVR_ATmega328P__ - lowPowerBodOff(SLEEP_MODE_PWR_SAVE); - #else - lowPowerBodOn(SLEEP_MODE_PWR_SAVE); - #endif - } - else - { - lowPowerBodOn(SLEEP_MODE_PWR_SAVE); - } - - if (adc == ADC_OFF) ADCSRA |= (1 << ADEN); - - #if !defined(__AVR_ATmega32U4__) - if (timer2 == TIMER2_OFF) - { - if (clockSource & CS22) TCCR2B |= (1 << CS22); - if (clockSource & CS21) TCCR2B |= (1 << CS21); - if (clockSource & CS20) TCCR2B |= (1 << CS20); - } - #endif -} - -/******************************************************************************* -* Name: powerStandby -* Description: Putting microcontroller into power standby state. -* -* Argument Description -* ========= =========== -* 1. period Duration of low power mode. Use SLEEP_FOREVER to use other wake -* up resource: -* (a) SLEEP_15MS - 15 ms sleep -* (b) SLEEP_30MS - 30 ms sleep -* (c) SLEEP_60MS - 60 ms sleep -* (d) SLEEP_120MS - 120 ms sleep -* (e) SLEEP_250MS - 250 ms sleep -* (f) SLEEP_500MS - 500 ms sleep -* (g) SLEEP_1S - 1 s sleep -* (h) SLEEP_2S - 2 s sleep -* (i) SLEEP_4S - 4 s sleep -* (j) SLEEP_8S - 8 s sleep -* (k) SLEEP_FOREVER - Sleep without waking up through WDT -* -* 2. adc ADC module disable control. Turning off the ADC module is -* basically removing the purpose of this low power mode. -* (a) ADC_OFF - Turn off ADC module -* (b) ADC_ON - Leave ADC module in its default state -* -* 3. bod Brown Out Detector (BOD) module disable control: -* (a) BOD_OFF - Turn off BOD module -* (b) BOD_ON - Leave BOD module in its default state -* -*******************************************************************************/ -void LowPowerClass::powerStandby(period_t period, adc_t adc, bod_t bod) -{ - if (adc == ADC_OFF) ADCSRA &= ~(1 << ADEN); - - if (period != SLEEP_FOREVER) - { - wdt_enable(period); - WDTCSR |= (1 << WDIE); - } - - if (bod == BOD_OFF) - { - #if defined __AVR_ATmega328P__ - lowPowerBodOff(SLEEP_MODE_STANDBY); - #else - lowPowerBodOn(SLEEP_MODE_STANDBY); - #endif - } - else - { - lowPowerBodOn(SLEEP_MODE_STANDBY); - } - - if (adc == ADC_OFF) ADCSRA |= (1 << ADEN); -} - -/******************************************************************************* -* Name: powerExtStandby -* Description: Putting microcontroller into power extended standby state. This -* is different from the power standby state as it has the -* capability to run Timer 2 asynchronously. -* -* Argument Description -* ========= =========== -* 1. period Duration of low power mode. Use SLEEP_FOREVER to use other wake -* up resource: -* (a) SLEEP_15MS - 15 ms sleep -* (b) SLEEP_30MS - 30 ms sleep -* (c) SLEEP_60MS - 60 ms sleep -* (d) SLEEP_120MS - 120 ms sleep -* (e) SLEEP_250MS - 250 ms sleep -* (f) SLEEP_500MS - 500 ms sleep -* (g) SLEEP_1S - 1 s sleep -* (h) SLEEP_2S - 2 s sleep -* (i) SLEEP_4S - 4 s sleep -* (j) SLEEP_8S - 8 s sleep -* (k) SLEEP_FOREVER - Sleep without waking up through WDT -* -* 2. adc ADC module disable control. -* (a) ADC_OFF - Turn off ADC module -* (b) ADC_ON - Leave ADC module in its default state -* -* 3. bod Brown Out Detector (BOD) module disable control: -* (a) BOD_OFF - Turn off BOD module -* (b) BOD_ON - Leave BOD module in its default state -* -* 4. timer2 Timer 2 module disable control: -* (a) TIMER2_OFF - Turn off Timer 2 module -* (b) TIMER2_ON - Leave Timer 2 module in its default state -* -*******************************************************************************/ -void LowPowerClass::powerExtStandby(period_t period, adc_t adc, bod_t bod, - timer2_t timer2) -{ - // Temporary clock source variable - unsigned char clockSource = 0; - - #if !defined(__AVR_ATmega32U4__) - if (timer2 == TIMER2_OFF) - { - if (TCCR2B & CS22) clockSource |= (1 << CS22); - if (TCCR2B & CS21) clockSource |= (1 << CS21); - if (TCCR2B & CS20) clockSource |= (1 << CS20); - - // Remove the clock source to shutdown Timer2 - TCCR2B &= ~(1 << CS22); - TCCR2B &= ~(1 << CS21); - TCCR2B &= ~(1 << CS20); - } - #endif - - if (adc == ADC_OFF) ADCSRA &= ~(1 << ADEN); - - if (period != SLEEP_FOREVER) - { - wdt_enable(period); - WDTCSR |= (1 << WDIE); - } - if (bod == BOD_OFF) - { - #if defined __AVR_ATmega328P__ - lowPowerBodOff(SLEEP_MODE_EXT_STANDBY); - #else - lowPowerBodOn(SLEEP_MODE_EXT_STANDBY); - #endif - } - else - { - lowPowerBodOn(SLEEP_MODE_EXT_STANDBY); - } - - if (adc == ADC_OFF) ADCSRA |= (1 << ADEN); - - #if !defined(__AVR_ATmega32U4__) - if (timer2 == TIMER2_OFF) - { - if (clockSource & CS22) TCCR2B |= (1 << CS22); - if (clockSource & CS21) TCCR2B |= (1 << CS21); - if (clockSource & CS20) TCCR2B |= (1 << CS20); - } - #endif -} - -/******************************************************************************* -* Name: ISR (WDT_vect) -* Description: Watchdog Timer interrupt service routine. This routine is -* required to allow automatic WDIF and WDIE bit clearance in -* hardware. -* -*******************************************************************************/ -ISR (WDT_vect) -{ - // WDIE & WDIF is cleared in hardware upon entering this ISR - wdt_disable(); -} - -LowPowerClass LowPower; \ No newline at end of file diff --git a/libraries/LowPower/LowPower.h b/libraries/LowPower/LowPower.h deleted file mode 100644 index ef05901..0000000 --- a/libraries/LowPower/LowPower.h +++ /dev/null @@ -1,137 +0,0 @@ -#ifndef LowPower_h -#define LowPower_h - -enum period_t -{ - SLEEP_15Ms, - SLEEP_30MS, - SLEEP_60MS, - SLEEP_120MS, - SLEEP_250MS, - SLEEP_500MS, - SLEEP_1S, - SLEEP_2S, - SLEEP_4S, - SLEEP_8S, - SLEEP_FOREVER -}; - -enum bod_t -{ - BOD_OFF, - BOD_ON -}; - -enum adc_t -{ - ADC_OFF, - ADC_ON -}; - -enum timer5_t -{ - TIMER5_OFF, - TIMER5_ON -}; - -enum timer4_t -{ - TIMER4_OFF, - TIMER4_ON -}; - -enum timer3_t -{ - TIMER3_OFF, - TIMER3_ON -}; - -enum timer2_t -{ - TIMER2_OFF, - TIMER2_ON -}; - -enum timer1_t -{ - TIMER1_OFF, - TIMER1_ON -}; - -enum timer0_t -{ - TIMER0_OFF, - TIMER0_ON -}; - -enum spi_t -{ - SPI_OFF, - SPI_ON -}; - -enum usart0_t -{ - USART0_OFF, - USART0_ON -}; - -enum usart1_t -{ - USART1_OFF, - USART1_ON -}; - -enum usart2_t -{ - USART2_OFF, - USART2_ON -}; - -enum usart3_t -{ - USART3_OFF, - USART3_ON -}; - -enum twi_t -{ - TWI_OFF, - TWI_ON -}; - -enum usb_t -{ - USB_OFF, - USB_ON -}; - -class LowPowerClass -{ - public: - #if defined (__AVR_ATmega328P__) || defined (__AVR_ATmega168__) - void idle(period_t period, adc_t adc, timer2_t timer2, - timer1_t timer1, timer0_t timer0, spi_t spi, - usart0_t usart0, twi_t twi); - #elif defined __AVR_ATmega2560__ - void idle(period_t period, adc_t adc, timer5_t timer5, - timer4_t timer4, timer3_t timer3, timer2_t timer2, - timer1_t timer1, timer0_t timer0, spi_t spi, - usart3_t usart3, usart2_t usart2, usart1_t usart1, - usart0_t usart0, twi_t twi); - #elif defined __AVR_ATmega32U4__ - void idle(period_t period, adc_t adc, timer4_t timer4, timer3_t timer3, - timer1_t timer1, timer0_t timer0, spi_t spi, - usart1_t usart1, twi_t twi, usb_t usb); - #else - #error "Please ensure chosen MCU is either 328P, 32U4 or 2560." - #endif - void adcNoiseReduction(period_t period, adc_t adc, timer2_t timer2); - void powerDown(period_t period, adc_t adc, bod_t bod); - void powerSave(period_t period, adc_t adc, bod_t bod, timer2_t timer2); - void powerStandby(period_t period, adc_t adc, bod_t bod); - void powerExtStandby(period_t period, adc_t adc, bod_t bod, timer2_t timer2); -}; - -extern LowPowerClass LowPower; -#endif \ No newline at end of file diff --git a/libraries/LowPower/keywords.txt b/libraries/LowPower/keywords.txt deleted file mode 100644 index ef2461c..0000000 --- a/libraries/LowPower/keywords.txt +++ /dev/null @@ -1,68 +0,0 @@ -####################################### -# Syntax Coloring Map LowPower -####################################### - -####################################### -# Datatypes (KEYWORD1) -####################################### - -####################################### -# Methods and Functions (KEYWORD2) -####################################### - -idle KEYWORD2 -adcNoiseReduction KEYWORD2 -powerDown KEYWORD2 -powerSave KEYWORD2 -powerStandby KEYWORD2 -powerExtStandby KEYWORD2 - -####################################### -# Instances (KEYWORD2) -####################################### - -LowPower KEYWORD2 - -####################################### -# Constants (LITERAL1) -####################################### - -SLEEP_15MS LITERAL1 -SLEEP_30MS LITERAL1 -SLEEP_60MS LITERAL1 -SLEEP_120MS LITERAL1 -SLEEP_250MS LITERAL1 -SLEEP_500MS LITERAL1 -SLEEP_1S LITERAL1 -SLEEP_2S LITERAL1 -SLEEP_4S LITERAL1 -SLEEP_8S LITERAL1 -SLEEP_FOREVER LITERAL1 -ADC_OFF LITERAL1 -ADC_ON LITERAL1 -BOD_OFF LITERAL1 -BOD_ON LITERAL1 -TIMER4_OFF LITERAL1 -TIMER4_ON LITERAL1 -TIMER3_OFF LITERAL1 -TIMER3_ON LITERAL1 -TIMER2_OFF LITERAL1 -TIMER2_ON LITERAL1 -TIMER1_OFF LITERAL1 -TIMER1_ON LITERAL1 -TIMER0_OFF LITERAL1 -TIMER0_ON LITERAL1 -USART3_OFF LITERAL1 -USART3_ON LITERAL1 -USART2_OFF LITERAL1 -USART2_ON LITERAL1 -USART1_OFF LITERAL1 -USART1_ON LITERAL1 -USART0_OFF LITERAL1 -USART0_ON LITERAL1 -SPI_OFF LITERAL1 -SPI_ON LITERAL1 -TWI_OFF LITERAL1 -TWI_ON LITERAL1 -USB_OFF LITERAL1 -USB_ON LITERAL1 \ No newline at end of file diff --git a/libraries/MAX6675/MAX6675.cpp b/libraries/MAX6675/MAX6675.cpp deleted file mode 100644 index d918de2..0000000 --- a/libraries/MAX6675/MAX6675.cpp +++ /dev/null @@ -1,109 +0,0 @@ -/* - MAX6675.cpp - Library for reading temperature from a MAX6675. - - This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. - http://creativecommons.org/licenses/by-sa/3.0/ -*/ - -#include - -MAX6675::MAX6675(uint8_t CS_pin, uint8_t SO_pin, uint8_t SCK_pin, uint8_t units) -{ - pinMode(CS_pin, OUTPUT); - pinMode(SO_pin, INPUT); - pinMode(SCK_pin, OUTPUT); - - digitalWrite(CS_pin, HIGH); - - _CS_pin = CS_pin; - _SO_pin = SO_pin; - _SCK_pin = SCK_pin; - _units = units; -} - -float MAX6675::read_temp() -{ - uint16_t value = 0; - uint8_t error_tc = 0; - float temp = 0.0; - - /* - Initiate a temperature conversion. According to MAX's tech notes FAQ's - for the chip, Line going high initiates a conversion, which means, we - need to clock the chip low to high to initiate the conversion, then wait - for the conversion to be complete before trying to read the data from - the chip. - */ - digitalWrite(_CS_pin,LOW); - delay(2); - digitalWrite(_CS_pin,HIGH); - delay(220); - - /* Read the chip and return the raw temperature value */ - - /* - Bring CS pin low to allow us to read the data from - the conversion process - */ - digitalWrite(_CS_pin,LOW); - - /* Cycle the clock for dummy bit 15 */ - digitalWrite(_SCK_pin,HIGH); - delay(1); - digitalWrite(_SCK_pin,LOW); - - /* - Read bits 14-3 from MAX6675 for the Temp. Loop for each bit reading - the value and storing the final value in 'temp' - */ - for (int i=11; i>=0; i--) { - digitalWrite(_SCK_pin,HIGH); - value += digitalRead(_SO_pin) << i; - digitalWrite(_SCK_pin,LOW); - } - - /* Read the TC Input inp to check for TC Errors */ - digitalWrite(_SCK_pin,HIGH); - error_tc = digitalRead(_SO_pin); - digitalWrite(_SCK_pin,LOW); - - /* - Read the last two bits from the chip, faliure to do so will result - in erratic readings from the chip. - */ - for (int i=1; i>=0; i--) { - digitalWrite(_SCK_pin,HIGH); - delay(1); - digitalWrite(_SCK_pin,LOW); - } - - // Disable Device - digitalWrite(_CS_pin, HIGH); - - /* - Keep in mind that the temp that was just read is on the digital scale - from 0ËšC to 1023.75ËšC at a resolution of 2^12. We now need to convert - to an actual readable temperature (this drove me nuts until I figured - this out!). Now multiply by 0.25. I tried to avoid float math but - it is tough to do a good conversion to ËšF. THe final value is converted - to an int and returned at x10 power. - - 2 = temp in deg F - 1 = temp in deg C - 0 = raw chip value 0-4095 - */ - if(_units == 2) { - temp = (value*0.25) * 9.0/5.0 + 32.0; - } else if(_units == 1) { - temp = (value*0.25); - } else { - temp = value; - } - - /* Output negative of CS_pin if there is a TC error, otherwise return 'temp' */ - if(error_tc != 0) { - return -_CS_pin; - } else { - return temp; - } -} diff --git a/libraries/MAX6675/MAX6675.h b/libraries/MAX6675/MAX6675.h deleted file mode 100644 index e80d8d0..0000000 --- a/libraries/MAX6675/MAX6675.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - MAX6675.h - Library for reading temperature from a MAX6675. - - This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. - http://creativecommons.org/licenses/by-sa/3.0/ -*/ - -#ifndef MAX6675_h -#define MAX6675_h - -#if defined(ARDUINO) && ARDUINO >= 100 -#include "Arduino.h" -#else -#include "WProgram.h" -#endif - -class MAX6675 -{ - public: - MAX6675(uint8_t CS_pin, uint8_t SO_pin, uint8_t SCK_pin, uint8_t units); - float read_temp(); - private: - uint8_t _CS_pin; - uint8_t _SO_pin; - uint8_t _SCK_pin; - uint8_t _units; - uint8_t chip_read(uint8_t CS_pin, uint8_t &error_tc); -}; - -#endif diff --git a/libraries/MAX6675/README.markdown b/libraries/MAX6675/README.markdown deleted file mode 100644 index 54af7d3..0000000 --- a/libraries/MAX6675/README.markdown +++ /dev/null @@ -1,28 +0,0 @@ -MAX6675 Arduino Library -======================= -Version: **2.0.1** - -This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. - - -Summary -------- - -The primary use of the library is to easily interface with a MAX6675 chip via it's SPI interface. Use the following code to initialize the library. V2 also greatly improves performance and timing of the chip for more accurate reads. Thanks Ed! - - MAX6675 temp0(CS,SO,SCK,units); - -Variables: - -* CS is chip select pin of chip -* SO is data out of the chip -* SCK is the clock pin of the chip -* units is one of the following: - * 0 = raw 0-4095 value - * 1 = temp in ËšC - * 2 = temp in ËšF - -Following this you can use the _read_temp()_ function to return the temperature as a float. - - temperature = temp0.read_temp(); - diff --git a/libraries/MAX6675/examples/read_temp/read_temp.pde b/libraries/MAX6675/examples/read_temp/read_temp.pde deleted file mode 100644 index 3a9dbda..0000000 --- a/libraries/MAX6675/examples/read_temp/read_temp.pde +++ /dev/null @@ -1,47 +0,0 @@ -/* - Single_Temp.pde - Example using the MAX6675 Library. - Created by Ryan McLaughlin - - This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License. - http://creativecommons.org/licenses/by-sa/3.0/ -*/ - -#include - -int LED1 = 9; // Status LED Pin -int CS = 10; // CS pin on MAX6675 -int SO = 12; // SO pin of MAX6675 -int SCK = 13; // SCK pin of MAX6675 -int units = 2; // Units to readout temp (0 = raw, 1 = ËšC, 2 = ËšF) -float temperature = 0.0; // Temperature output variable - - -// Initialize the MAX6675 Library for our chip -MAX6675 temp(CS,SO,SCK,units); - - -// Setup Serial output and LED Pin -// MAX6675 Library already sets pin modes for MAX6675 chip! -void setup() { - Serial.begin(9600); - pinMode(LED1, OUTPUT); -} - -void loop() { - // Read the temp from the MAX6675 - temperature = temp.read_temp(); - - if(temperature < 0) { - // If there is an error with the TC, temperature will be < 0 - Serial.print("Thermocouple Error on CS"); - Serial.println( temperature ); - digitalWrite(LED1, HIGH); - } else { - Serial.print("Current Temperature: "); - Serial.println( temperature ); - digitalWrite(LED1, LOW); - } - - // Wait one second before reading again - delay(1000); -} diff --git a/libraries/MAX6675/keywords.txt b/libraries/MAX6675/keywords.txt deleted file mode 100644 index f2c1136..0000000 --- a/libraries/MAX6675/keywords.txt +++ /dev/null @@ -1,16 +0,0 @@ -####################################### -# Syntax Coloring Map For MAX6675 -####################################### - -####################################### -# Datatypes (KEYWORD1) -####################################### - -MAX6675 KEYWORD1 - -####################################### -# Methods and Functions (KEYWORD2) -####################################### - -read_temp KEYWORD2 - diff --git a/libraries/MsTimer2/MsTimer2.cpp b/libraries/MsTimer2/MsTimer2.cpp deleted file mode 100644 index 0b0c2dc..0000000 --- a/libraries/MsTimer2/MsTimer2.cpp +++ /dev/null @@ -1,207 +0,0 @@ -/* - MsTimer2.h - Using timer2 with 1ms resolution - Javier Valencia - - History: - - 05Apr2015 TRL V0.6a added support for ATmega1284P - 29/Dec/11 - V0.6 added support for ATmega32u4, AT90USB646, AT90USB1286 (paul@pjrc.com) - some improvements added by Bill Perry - note: uses timer4 on Atmega32u4 - 29/May/09 - V0.5 added support for Atmega1280 (thanks to Manuel Negri) - 19/Mar/09 - V0.4 added support for ATmega328P (thanks to Jerome Despatis) - 11/Jun/08 - V0.3 - changes to allow working with different CPU frequencies - added support for ATMega128 (using timer2) - compatible with ATMega48/88/168/8 - 10/May/08 - V0.2 added some security tests and volatile keywords - 9/May/08 - V0.1 released working on ATMEGA168 only - - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#include - -unsigned long MsTimer2::msecs; -void (*MsTimer2::func)(); -volatile unsigned long MsTimer2::count; -volatile char MsTimer2::overflowing; -volatile unsigned int MsTimer2::tcnt2; - -void MsTimer2::set(unsigned long ms, void (*f)()) { - float prescaler = 0.0; - - if (ms == 0) - msecs = 1; - else - msecs = ms; - - func = f; - -#if defined (__AVR_ATmega168__) || defined (__AVR_ATmega48__) || defined (__AVR_ATmega88__) || defined (__AVR_ATmega328P__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega1284P__) || defined(__AVR_ATmega2560__) || defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__) - TIMSK2 &= ~(1<= 1000000UL) && (F_CPU <= 16000000UL)) { // prescaler set to 64 - TCCR2B |= (1< 16Mhz, prescaler set to 128 - TCCR2B |= ((1<= 1000000UL) && (F_CPU <= 16000000UL)) { // prescaler set to 64 - TCCR2 |= (1< 16Mhz, prescaler set to 128 - TCCR2 |= ((1<= 1000000UL) && (F_CPU <= 16000000UL)) { // prescaler set to 64 - TCCR2 |= ((1< 16Mhz, prescaler set to 256 - TCCR2 |= (1<= 16000000L) { - TCCR4B = (1<= 8000000L) { - TCCR4B = (1<= 4000000L) { - TCCR4B = (1<= 2000000L) { - TCCR4B = (1<= 1000000L) { - TCCR4B = (1<= 500000L) { - TCCR4B = (1<= msecs && !overflowing) { - overflowing = 1; - count = count - msecs; // subtract ms to catch missed overflows - // set to 0 if you don't want this. - (*func)(); - overflowing = 0; - } -} - -#if defined (__AVR_ATmega32U4__) -ISR(TIMER4_OVF_vect) { -#else -ISR(TIMER2_OVF_vect) { -#endif -#if defined (__AVR_ATmega168__) || defined (__AVR_ATmega48__) || defined (__AVR_ATmega88__) || defined (__AVR_ATmega328P__) || defined (__AVR_ATmega1280__) || defined(__AVR_ATmega1284P__) || defined(__AVR_ATmega2560__) || defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__) - TCNT2 = MsTimer2::tcnt2; -#elif defined (__AVR_ATmega128__) - TCNT2 = MsTimer2::tcnt2; -#elif defined (__AVR_ATmega8__) - TCNT2 = MsTimer2::tcnt2; -#elif defined (__AVR_ATmega32U4__) - // not necessary on 32u4's high speed timer4 -#endif - MsTimer2::_overflow(); -} diff --git a/libraries/MsTimer2/MsTimer2.h b/libraries/MsTimer2/MsTimer2.h deleted file mode 100644 index 7a93dd5..0000000 --- a/libraries/MsTimer2/MsTimer2.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef MsTimer2_h -#define MsTimer2_h - -#ifdef __AVR__ -#include -#else -#error MsTimer2 library only works on AVR architecture -#endif - -namespace MsTimer2 { - extern unsigned long msecs; - extern void (*func)(); - extern volatile unsigned long count; - extern volatile char overflowing; - extern volatile unsigned int tcnt2; - - void set(unsigned long ms, void (*f)()); - void start(); - void stop(); - void _overflow(); -} - -#endif diff --git a/libraries/MsTimer2/examples/FlashLed/FlashLed.pde b/libraries/MsTimer2/examples/FlashLed/FlashLed.pde deleted file mode 100644 index 4d04496..0000000 --- a/libraries/MsTimer2/examples/FlashLed/FlashLed.pde +++ /dev/null @@ -1,42 +0,0 @@ -char dummyvar; // to get Arduinoi IDE to include core headers properly - -/* - MsTimer2 is a small and very easy to use library to interface Timer2 with - humans. It's called MsTimer2 because it "hardcodes" a resolution of 1 - millisecond on timer2 - For Details see: http://www.arduino.cc/playground/Main/MsTimer2 -*/ -#include - -// Switch on LED on and off each half second - -#if defined(ARDUINO) && ARDUINO >= 100 -const int led_pin = LED_BUILTIN; // 1.0 built in LED pin var -#else -#if defined(CORE_LED0_PIN) -const int led_pin = CORE_LED0_PIN; // 3rd party LED pin define -#else -const int led_pin = 13; // default to pin 13 -#endif -#endif - - -void flash() -{ - static boolean output = HIGH; - - digitalWrite(led_pin, output); - output = !output; -} - -void setup() -{ - pinMode(led_pin, OUTPUT); - - MsTimer2::set(500, flash); // 500ms period - MsTimer2::start(); -} - -void loop() -{ -} diff --git a/libraries/MsTimer2/keywords.txt b/libraries/MsTimer2/keywords.txt deleted file mode 100644 index 8b4fff7..0000000 --- a/libraries/MsTimer2/keywords.txt +++ /dev/null @@ -1,4 +0,0 @@ -MsTimer2 KEYWORD1 -set KEYWORD2 -start KEYWORD2 -stop KEYWORD2 diff --git a/libraries/MySensors/examples/BinarySwitchSensor/BinarySwitchSensor.ino b/libraries/MySensors/examples/BinarySwitchSensor/BinarySwitchSensor.ino deleted file mode 100644 index cb48456..0000000 --- a/libraries/MySensors/examples/BinarySwitchSensor/BinarySwitchSensor.ino +++ /dev/null @@ -1,84 +0,0 @@ -/** - * The MySensors Arduino library handles the wireless radio link and protocol - * between your home built sensors/actuators and HA controller of choice. - * The sensors forms a self healing radio network with optional repeaters. Each - * repeater and gateway builds a routing tables in EEPROM which keeps track of the - * network topology allowing messages to be routed to nodes. - * - * Created by Henrik Ekblad - * Copyright (C) 2013-2015 Sensnology AB - * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors - * - * Documentation: http://www.mysensors.org - * Support Forum: http://forum.mysensors.org - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 as published by the Free Software Foundation. - * - ******************************* - * - * DESCRIPTION - * - * Simple binary switch example - * Connect button or door/window reed switch between - * digitial I/O pin 3 (BUTTON_PIN below) and GND. - * http://www.mysensors.org/build/binary - */ - - -// Enable debug prints to serial monitor -#define MY_DEBUG - -// Enable and select radio type attached -#define MY_RADIO_NRF24 -//#define MY_RADIO_RFM69 - -#include -#include -#include - -#define CHILD_ID 3 -#define BUTTON_PIN 3 // Arduino Digital I/O pin for button/reed switch - -Bounce debouncer = Bounce(); -int oldValue=-1; - -// Change to V_LIGHT if you use S_LIGHT in presentation below -MyMessage msg(CHILD_ID,V_TRIPPED); - -void setup() -{ - // Setup the button - pinMode(BUTTON_PIN,INPUT); - // Activate internal pull-up - digitalWrite(BUTTON_PIN,HIGH); - - // After setting up the button, setup debouncer - debouncer.attach(BUTTON_PIN); - debouncer.interval(5); - -} - -void presentation() { - // Register binary input sensor to gw (they will be created as child devices) - // You can use S_DOOR, S_MOTION or S_LIGHT here depending on your usage. - // If S_LIGHT is used, remember to update variable type you send in. See "msg" above. - present(CHILD_ID, S_DOOR); -} - - -// Check if digital input has changed and send in new value -void loop() -{ - debouncer.update(); - // Get the update value - int value = debouncer.read(); - - if (value != oldValue) { - // Send in the new value - send(msg.set(value==HIGH ? 1 : 0)); - oldValue = value; - } -} - diff --git a/libraries/MySensors/examples/BinarySwitchSensorIndication/BinarySwitchSensorIndication.ino b/libraries/MySensors/examples/BinarySwitchSensorIndication/BinarySwitchSensorIndication.ino deleted file mode 100644 index 6265d9d..0000000 --- a/libraries/MySensors/examples/BinarySwitchSensorIndication/BinarySwitchSensorIndication.ino +++ /dev/null @@ -1,150 +0,0 @@ -/** - * The MySensors Arduino library handles the wireless radio link and protocol - * between your home built sensors/actuators and HA controller of choice. - * The sensors forms a self healing radio network with optional repeaters. Each - * repeater and gateway builds a routing tables in EEPROM which keeps track of the - * network topology allowing messages to be routed to nodes. - * - * Created by Henrik Ekblad - * Copyright (C) 2013-2016 Sensnology AB - * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors - * - * Documentation: http://www.mysensors.org - * Support Forum: http://forum.mysensors.org - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 as published by the Free Software Foundation. - * - ******************************* - * - * DESCRIPTION - * - * Simple binary switch example - * Connect button or door/window reed switch between - * digitial I/O pin 3 (BUTTON_PIN below) and GND. - * A NeoPixel LED will be used to provide visual feedback of the sensor status. - * http://www.mysensors.org/build/binary - */ - - -// Enable debug prints to serial monitor -#define MY_DEBUG - -// Enable and select radio type attached -#define MY_RADIO_NRF24 -//#define MY_RADIO_RFM69 - -#include -#include -#include -#include -#include - -#define LED_CYCLE_MS 30 // Update rate of LEDs, in [ms]. -#define NEO_PIN 6 // NeoPixels input pin -#define CHILD_ID 3 -#define BUTTON_PIN 3 // Arduino Digital I/O pin for button/reed switch - -Bounce debouncer = Bounce(); -int oldValue=-1; - -static Adafruit_NeoPixel pixels = Adafruit_NeoPixel(1, NEO_PIN, NEO_GRB + NEO_KHZ800); - -// Change to V_LIGHT if you use S_LIGHT in presentation below -MyMessage msg(CHILD_ID,V_TRIPPED); - -#define BLINK_TIMES(x) ((x)<<4) - -static uint8_t ledR = 0; -static uint8_t ledG = 0; -static uint8_t ledB = 0; - -void updateLed(void) -{ - // Update the pattern (setting leds). - if (ledR > 0) --ledR; - if (ledG > 0) --ledG; - if (ledB > 0) --ledB; - // Determine of each color if it should be on or off. - uint8_t r = ((ledR & 0x0F) < 6) ? 0 : 255; - uint8_t g = ((ledG & 0x0F) < 6) ? 0 : 255; - uint8_t b = ((ledB & 0x0F) < 6) ? 0 : 255; - pixels.setPixelColor(0, r, g, b); - pixels.show(); -} - -void before() -{ - // Initialize the NeoPixel chain - pixels.begin(); - pixels.show(); - - // Configure timer interrupt - MsTimer2::set(LED_CYCLE_MS, updateLed); - MsTimer2::start(); -} - -void setup() -{ - // Setup the button - pinMode(BUTTON_PIN,INPUT); - // Activate internal pull-up - digitalWrite(BUTTON_PIN,HIGH); - - // After setting up the button, setup debouncer - debouncer.attach(BUTTON_PIN); - debouncer.interval(5); -} - -void presentation() { - // Register binary input sensor to gw (they will be created as child devices) - // You can use S_DOOR, S_MOTION or S_LIGHT here depending on your usage. - // If S_LIGHT is used, remember to update variable type you send in. See "msg" above. - present(CHILD_ID, S_DOOR); -} - -void indication( const indication_t ind ) -{ - if ((INDICATION_TX == ind) || (INDICATION_GW_TX == ind)) - { - // Blink Blue 1x - ledB = BLINK_TIMES(1); - Serial.println(F("TX")); - } else if ((INDICATION_RX == ind) || (INDICATION_GW_RX == ind)) - { - // Blink Blue 1x - ledB = BLINK_TIMES(1); - Serial.println(F("RX")); - } else if (INDICATION_FIND_PARENT == ind) - { - // Blink Green 5x - ledG = BLINK_TIMES(5); - Serial.println(F("JOIN")); - } else if (INDICATION_GOT_PARENT == ind) - { - // Green off - ledG = BLINK_TIMES(0); - Serial.println(F("JOINED")); - } else if (ind > INDICATION_ERR_START) - { - // Blink Red, depending on the error number - ledR = BLINK_TIMES(ind - INDICATION_ERR_START); - Serial.print(F("ERROR")); Serial.println(ind - INDICATION_ERR_START); - } -} - -// Check if digital input has changed and send in new value -void loop() -{ - debouncer.update(); - // Get the update value - int value = debouncer.read(); - - if (value != oldValue) { - // Send in the new value - send(msg.set(value==HIGH ? 1 : 0)); - oldValue = value; - } -} - diff --git a/libraries/MySensors/examples/DallasTemperatureSensor/DallasTemperatureSensor.ino b/libraries/MySensors/examples/DallasTemperatureSensor/DallasTemperatureSensor.ino deleted file mode 100644 index c9fd64c..0000000 --- a/libraries/MySensors/examples/DallasTemperatureSensor/DallasTemperatureSensor.ino +++ /dev/null @@ -1,105 +0,0 @@ -/** - * The MySensors Arduino library handles the wireless radio link and protocol - * between your home built sensors/actuators and HA controller of choice. - * The sensors forms a self healing radio network with optional repeaters. Each - * repeater and gateway builds a routing tables in EEPROM which keeps track of the - * network topology allowing messages to be routed to nodes. - * - * Created by Henrik Ekblad - * Copyright (C) 2013-2015 Sensnology AB - * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors - * - * Documentation: http://www.mysensors.org - * Support Forum: http://forum.mysensors.org - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 as published by the Free Software Foundation. - * - ******************************* - * - * DESCRIPTION - * - * Example sketch showing how to send in DS1820B OneWire temperature readings back to the controller - * http://www.mysensors.org/build/temp - */ - - -// Enable debug prints to serial monitor -//#define MY_DEBUG - -// Enable and select radio type attached -#define MY_RADIO_NRF24 -//#define MY_RADIO_RFM69 - -#include -#include -#include -#include - -#define COMPARE_TEMP 1 // Send temperature only if changed? 1 = Yes 0 = No - -#define ONE_WIRE_BUS 3 // Pin where dallase sensor is connected -#define MAX_ATTACHED_DS18B20 16 -unsigned long SLEEP_TIME = 30000; // Sleep time between reads (in milliseconds) -OneWire oneWire(ONE_WIRE_BUS); // Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs) -DallasTemperature sensors(&oneWire); // Pass the oneWire reference to Dallas Temperature. -float lastTemperature[MAX_ATTACHED_DS18B20]; -int numSensors=0; -boolean receivedConfig = false; -boolean metric = true; -// Initialize temperature message -MyMessage msg(0,V_TEMP); - -void setup() -{ - // Startup up the OneWire library - sensors.begin(); - // requestTemperatures() will not block current thread - sensors.setWaitForConversion(false); -} - -void presentation() { - // Send the sketch version information to the gateway and Controller - sendSketchInfo("Temperature Sensor", "1.1"); - - // Fetch the number of attached temperature sensors - numSensors = sensors.getDeviceCount(); - - // Present all sensors to controller - for (int i=0; i(static_cast((getConfig().isMetric?sensors.getTempCByIndex(i):sensors.getTempFByIndex(i)) * 10.)) / 10.; - - // Only send data if temperature has changed and no error - #if COMPARE_TEMP == 1 - if (lastTemperature[i] != temperature && temperature != -127.00 && temperature != 85.00) { - #else - if (temperature != -127.00 && temperature != 85.00) { - #endif - - // Send in the new temperature - send(msg.setSensor(i).set(temperature,1)); - // Save new temperatures for next compare - lastTemperature[i]=temperature; - } - } - sleep(SLEEP_TIME); -} diff --git a/libraries/MySensors/examples/DimmableLightWithRotaryEncoderButton/DimmableLightWithRotaryEncoderButton.ino b/libraries/MySensors/examples/DimmableLightWithRotaryEncoderButton/DimmableLightWithRotaryEncoderButton.ino deleted file mode 100644 index abddc14..0000000 --- a/libraries/MySensors/examples/DimmableLightWithRotaryEncoderButton/DimmableLightWithRotaryEncoderButton.ino +++ /dev/null @@ -1,240 +0,0 @@ -/** - * The MySensors Arduino library handles the wireless radio link and protocol - * between your home built sensors/actuators and HA controller of choice. - * The sensors forms a self healing radio network with optional repeaters. Each - * repeater and gateway builds a routing tables in EEPROM which keeps track of the - * network topology allowing messages to be routed to nodes. - * - * Created by Henrik Ekblad - * Copyright (C) 2013-2015 Sensnology AB - * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors - * - * Documentation: http://www.mysensors.org - * Support Forum: http://forum.mysensors.org - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 as published by the Free Software Foundation. - * - ******************************* - * - * REVISION HISTORY - * Version 1.0 - Developed by Bruce Lacey and GizMoCuz (Domoticz) - * Version 1.1 - Modified by hek to incorporate a rotary encode to adjust - * light level locally at node - * - * DESCRIPTION - * This sketch provides an example how to implement a dimmable led light node with a rotary - * encoder connected for adjusting light level. - * The encoder has a click button which turns on/off the light (and remembers last dim-level) - * The sketch fades the light (non-blocking) to the desired level. - * - * Default MOSFET pin is 3 - * - * Arduino Encoder module - * --------------------------- - * 5V 5V (+) - * GND GND (-) - * 4 CLK (or putput 1) - * 5 DT (or output 1) - * 6 SW (Switch/Click) - */ - - -// Enable debug prints -#define MY_DEBUG - -// Enable and select radio type attached -#define MY_RADIO_NRF24 -//#define MY_RADIO_RFM69 - -#include -#include -#include -#include - -#define LED_PIN 3 // Arduino pin attached to MOSFET Gate pin -#define KNOB_ENC_PIN_1 4 // Rotary encoder input pin 1 -#define KNOB_ENC_PIN_2 5 // Rotary encoder input pin 2 -#define KNOB_BUTTON_PIN 6 // Rotary encoder button pin -#define FADE_DELAY 10 // Delay in ms for each percentage fade up/down (10ms = 1s full-range dim) -#define SEND_THROTTLE_DELAY 400 // Number of milliseconds before sending after user stops turning knob -#define SN "DimmableLED /w button" -#define SV "1.2" - -#define CHILD_ID_LIGHT 1 - -#define EEPROM_DIM_LEVEL_LAST 1 -#define EEPROM_DIM_LEVEL_SAVE 2 - -#define LIGHT_OFF 0 -#define LIGHT_ON 1 - -int dimValue; -int fadeTo; -int fadeDelta; -byte oldButtonVal; -bool changedByKnob=false; -bool sendDimValue=false; -unsigned long lastFadeStep; -unsigned long sendDimTimeout; -char convBuffer[10]; - -MyMessage dimmerMsg(CHILD_ID_LIGHT, V_DIMMER); -Encoder knob(KNOB_ENC_PIN_1, KNOB_ENC_PIN_2); -Bounce debouncer = Bounce(); - -void setup() -{ - // Set knob button pin as input (with debounce) - pinMode(KNOB_BUTTON_PIN, INPUT); - digitalWrite(KNOB_BUTTON_PIN, HIGH); - debouncer.attach(KNOB_BUTTON_PIN); - debouncer.interval(5); - oldButtonVal = debouncer.read(); - - // Set analog led pin to off - analogWrite( LED_PIN, 0); - - // Retreive our last dim levels from the eprom - fadeTo = dimValue = 0; - byte oldLevel = loadLevelState(EEPROM_DIM_LEVEL_LAST); - Serial.print("Sending in last known light level to controller: "); - Serial.println(oldLevel); - send(dimmerMsg.set(oldLevel), true); - - Serial.println("Ready to receive messages..."); -} - -void presentation() { - // Send the Sketch Version Information to the Gateway - present(CHILD_ID_LIGHT, S_DIMMER); - sendSketchInfo(SN, SV); -} - -void loop() -{ - // Check if someone turned the rotary encode - checkRotaryEncoder(); - - // Check if someone has pressed the knob button - checkButtonClick(); - - // Fade light to new dim value - fadeStep(); -} - -void receive(const MyMessage &message) -{ - if (message.type == V_LIGHT) { - // Incoming on/off command sent from controller ("1" or "0") - int lightState = message.getString()[0] == '1'; - int newLevel = 0; - if (lightState==LIGHT_ON) { - // Pick up last saved dimmer level from the eeprom - newLevel = loadLevelState(EEPROM_DIM_LEVEL_SAVE); - } - // Send dimmer level back to controller with ack enabled - send(dimmerMsg.set(newLevel), true); - // We do not change any levels here until ack comes back from gateway - return; - } else if (message.type == V_DIMMER) { - // Incoming dim-level command sent from controller (or ack message) - fadeTo = atoi(message.getString(convBuffer)); - // Save received dim value to eeprom (unless turned off). Will be - // retreived when a on command comes in - if (fadeTo != 0) - saveLevelState(EEPROM_DIM_LEVEL_SAVE, fadeTo); - } - saveLevelState(EEPROM_DIM_LEVEL_LAST, fadeTo); - - Serial.print("New light level received: "); - Serial.println(fadeTo); - - if (!changedByKnob) - knob.write(fadeTo); - - // Cancel send if user turns knob while message comes in - changedByKnob = false; - sendDimValue = false; - - // Stard fading to new light level - startFade(); -} - - - -void checkRotaryEncoder() { - long encoderValue = knob.read(); - - if (encoderValue > 100) { - encoderValue = 100; - knob.write(100); - } else if (encoderValue < 0) { - encoderValue = 0; - knob.write(0); - } - - if (encoderValue != fadeTo) { - fadeTo = encoderValue; - changedByKnob = true; - startFade(); - } -} - -void checkButtonClick() { - debouncer.update(); - byte buttonVal = debouncer.read(); - byte newLevel = 0; - if (buttonVal != oldButtonVal && buttonVal == LOW) { - if (dimValue==0) { - // Turn on light. Set the level to last saved dim value - int saved = loadLevelState(EEPROM_DIM_LEVEL_SAVE); - newLevel = saved > 0 ? saved : 100; - } - send(dimmerMsg.set(newLevel),true); - } - oldButtonVal = buttonVal; -} - -void startFade() { - fadeDelta = ( fadeTo - dimValue ) < 0 ? -1 : 1; - lastFadeStep = millis(); -} - -// This method provides a graceful none-blocking fade up/down effect -void fadeStep() { - unsigned long currentTime = millis(); - if ( dimValue != fadeTo && currentTime > lastFadeStep + FADE_DELAY) { - dimValue += fadeDelta; - analogWrite( LED_PIN, (int)(dimValue / 100. * 255) ); - lastFadeStep = currentTime; - - Serial.print("Fading level: "); - Serial.println(dimValue); - - if (fadeTo == dimValue && changedByKnob) { - sendDimValue = true; - sendDimTimeout = currentTime; - } - } - // Wait a few millisecs before sending in new value (if user still turns the knob) - if (sendDimValue && currentTime > sendDimTimeout + SEND_THROTTLE_DELAY) { - // We're done fading.. send in new dim-value to controller. - // Send in new dim value with ack (will be picked up in incomingMessage) - send(dimmerMsg.set(dimValue), true); // Send new dimmer value and request ack back - sendDimValue = false; - } -} - -// Make sure only to store/fetch values in the range 0-100 from eeprom -int loadLevelState(byte pos) { - return min(max(loadState(pos),0),100); -} -void saveLevelState(byte pos, byte data) { - saveState(pos,min(max(data,0),100)); -} - - - - diff --git a/libraries/MySensors/examples/DistanceSensor/DistanceSensor.ino b/libraries/MySensors/examples/DistanceSensor/DistanceSensor.ino deleted file mode 100644 index f076314..0000000 --- a/libraries/MySensors/examples/DistanceSensor/DistanceSensor.ino +++ /dev/null @@ -1,79 +0,0 @@ -/** - * The MySensors Arduino library handles the wireless radio link and protocol - * between your home built sensors/actuators and HA controller of choice. - * The sensors forms a self healing radio network with optional repeaters. Each - * repeater and gateway builds a routing tables in EEPROM which keeps track of the - * network topology allowing messages to be routed to nodes. - * - * Created by Henrik Ekblad - * Copyright (C) 2013-2015 Sensnology AB - * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors - * - * Documentation: http://www.mysensors.org - * Support Forum: http://forum.mysensors.org - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 as published by the Free Software Foundation. - * - ******************************* - * - * REVISION HISTORY - * Version 1.0 - Henrik EKblad - * - * DESCRIPTION - * This sketch provides an example how to implement a distance sensor using HC-SR04 - * http://www.mysensors.org/build/distance - */ - -// Enable debug prints -#define MY_DEBUG - -// Enable and select radio type attached -#define MY_RADIO_NRF24 -//#define MY_RADIO_RFM69 - -#include -#include -#include - -#define CHILD_ID 1 -#define TRIGGER_PIN 6 // Arduino pin tied to trigger pin on the ultrasonic sensor. -#define ECHO_PIN 5 // Arduino pin tied to echo pin on the ultrasonic sensor. -#define MAX_DISTANCE 300 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm. -unsigned long SLEEP_TIME = 5000; // Sleep time between reads (in milliseconds) - -NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance. -MyMessage msg(CHILD_ID, V_DISTANCE); -int lastDist; -boolean metric = true; - -void setup() -{ - metric = getConfig().isMetric; -} - -void presentation() { - // Send the sketch version information to the gateway and Controller - sendSketchInfo("Distance Sensor", "1.0"); - - // Register all sensors to gw (they will be created as child devices) - present(CHILD_ID, S_DISTANCE); -} - -void loop() -{ - int dist = metric?sonar.ping_cm():sonar.ping_in(); - Serial.print("Ping: "); - Serial.print(dist); // Convert ping time to distance in cm and print result (0 = outside set distance range) - Serial.println(metric?" cm":" in"); - - if (dist != lastDist) { - send(msg.set(dist)); - lastDist = dist; - } - - sleep(SLEEP_TIME); -} - - diff --git a/libraries/MySensors/examples/GPSSensor/GPSSensor.ino b/libraries/MySensors/examples/GPSSensor/GPSSensor.ino deleted file mode 100644 index b49ab96..0000000 --- a/libraries/MySensors/examples/GPSSensor/GPSSensor.ino +++ /dev/null @@ -1,148 +0,0 @@ -/** - * The MySensors Arduino library handles the wireless radio link and protocol - * between your home built sensors/actuators and HA controller of choice. - * The sensors forms a self healing radio network with optional repeaters. Each - * repeater and gateway builds a routing tables in EEPROM which keeps track of the - * network topology allowing messages to be routed to nodes. - * - * Created by Henrik Ekblad - * Copyright (C) 2013-2015 Sensnology AB - * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors - * - * Documentation: http://www.mysensors.org - * Support Forum: http://forum.mysensors.org - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 as published by the Free Software Foundation. - * - ******************************* - * - * REVISION HISTORY - * Version 1.0 - Henrik Ekblad - * - * DESCRIPTION - * Example sketch showing how to interface with a GPS sensor. - * A GPS is also an excellent atomic time source. - * http://www.mysensors.org/build/gps - */ - -// Enable debug prints to serial monitor -#define MY_DEBUG - -// Enable and select radio type attached -#define MY_RADIO_NRF24 -//#define MY_RADIO_RFM69 - -// GPS position send interval (in millisectonds) -#define GPS_SEND_INTERVAL 10000 - -// The child id used for the gps sensor -#define CHILD_ID_GPS 1 - -// This is where the pin TX pin of your GPS sensor is connected to the arduino -static const int GPS_PIN = A0; - -// GPS Baud rate (note this is not the same as your serial montor baudrate). Most GPS modules uses 9600 bps. -static const uint32_t GPSBaud = 9600; - -// Offset hours adjustment from gps time (UTC) -const int offset = 1; - -#include -#include -#include -#include -#include - -// TinyGPS++ is used for parsing serial gps data -TinyGPSPlus gps; - -MyMessage msg(CHILD_ID_GPS, V_POSITION); - -// The serial connection to the GPS device -// A5 pin can be left unconnected -SoftwareSerial ss(GPS_PIN, A5); - -// Last time GPS position was sent to controller -unsigned long lastGPSSent = 0; - -// Some buffers -char latBuf[11]; -char lngBuf[11]; -char altBuf[6]; -char payload[30]; -char sz[64]; - - -void setup() { - // Set baudrate form gps communication - ss.begin(GPSBaud); -} - - -void present() { - // Send the sketch version information to the gateway and Controller - sendSketchInfo("GPS Sensor", "1.0"); - - // Register all sensors to gateway (they will be created as child devices) - present(CHILD_ID_GPS, S_GPS); -} - -void loop() -{ - unsigned long currentTime = millis(); - - // Evaluate if it is time to send a new position - bool timeToSend = currentTime - lastGPSSent > GPS_SEND_INTERVAL; - - // Read gps data - while (ss.available()) - gps.encode(ss.read()); - - if (timeToSend) { - // Sync gps time with Arduino - updateTime(); - - // Send current gps location - if (gps.location.isValid() && gps.altitude.isValid()) { - // Build position and altitude string to send - dtostrf(gps.location.lat(), 1, 6, latBuf); - dtostrf(gps.location.lng(), 1, 6, lngBuf); - dtostrf(gps.altitude.meters(), 1, 0, altBuf); - sprintf(payload, "%s;%s;%s", latBuf, lngBuf, altBuf); - - Serial.print(F("Position: ")); - Serial.println(payload); - - send(msg.set(payload)); - - Serial.print(F("GPS Time: ")); - sprintf(sz, "%02d/%02d/%02d %02d:%02d:%02d", month(), day(), year(), hour(), minute(), second()); - Serial.println(sz); - - - } else { - if (millis() > 5000 && gps.charsProcessed() < 10) - Serial.println(F("No GPS data received: check wiring")); - else - Serial.println(F("No GPS data received yet...")); - } - lastGPSSent = currentTime; - } -} - -void updateTime() -{ - TinyGPSDate d = gps.date; - TinyGPSTime t = gps.time; - if (d.isValid() && t.isValid()) { - // set the Time to the latest GPS reading if less then 0.2 seconds old - setTime(t.hour(), t.minute(), t.second(), d.day(), d.month(), d.year()); - adjustTime(offset * SECS_PER_HOUR); - return; - } - Serial.println(F("Unable to adjust time from GPS")); -} - - diff --git a/libraries/MySensors/examples/GatewayENC28J60/GatewayENC28J60.ino b/libraries/MySensors/examples/GatewayENC28J60/GatewayENC28J60.ino deleted file mode 100644 index 926ba39..0000000 --- a/libraries/MySensors/examples/GatewayENC28J60/GatewayENC28J60.ino +++ /dev/null @@ -1,102 +0,0 @@ -/** - * The MySensors Arduino library handles the wireless radio link and protocol - * between your home built sensors/actuators and HA controller of choice. - * The sensors forms a self healing radio network with optional repeaters. Each - * repeater and gateway builds a routing tables in EEPROM which keeps track of the - * network topology allowing messages to be routed to nodes. - * - * Created by Henrik Ekblad - * Copyright (C) 2013-2015 Sensnology AB - * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors - * - * Documentation: http://www.mysensors.org - * Support Forum: http://forum.mysensors.org - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 as published by the Free Software Foundation. - * - ******************************* - * - * REVISION HISTORY - * Version 1.0 - Henrik EKblad - * Contribution by a-lurker and Anticimex, - * Contribution by Norbert Truchsess - * Contribution by Tomas Hozza - * - * - * DESCRIPTION - * The EthernetGateway sends data received from sensors to the ethernet link. - * The gateway also accepts input on ethernet interface, which is then sent out to the radio network. - * - * The GW code is designed for Arduino 328p / 16MHz. ATmega168 does not have enough memory to run this program. - * - * LED purposes: - * - To use the feature, uncomment WITH_LEDS_BLINKING in MyConfig.h - * - RX (green) - blink fast on radio message recieved. In inclusion mode will blink fast only on presentation recieved - * - TX (yellow) - blink fast on radio message transmitted. In inclusion mode will blink slowly - * - ERR (red) - fast blink on error during transmission error or recieve crc error - * - * See http://www.mysensors.org/build/ethernet_gateway for wiring instructions. - * - */ - -// Enable debug prints to serial monitor -#define MY_DEBUG - -// Enable and select radio type attached -#define MY_RADIO_NRF24 -//#define MY_RADIO_RFM69 - -// When ENC28J60 is connected we have to move CE/CSN pins for NRF radio -#define MY_RF24_CE_PIN 5 -#define MY_RF24_CS_PIN 6 - -// Enable gateway ethernet module type -#define MY_GATEWAY_ENC28J60 - -// Gateway IP address -#define MY_IP_ADDRESS 192,168,178,66 - -// The port to keep open on node server mode / or port to contact in client mode -#define MY_PORT 5003 - -// Controller ip address. Enables client mode (default is "server" mode). -// Also enable this if MY_USE_UDP is used and you want sensor data sent somewhere. -//#define MY_CONTROLLER_IP_ADDRESS 192, 168, 178, 254 - -// The MAC address can be anything you want but should be unique on your network. -// Newer boards have a MAC address printed on the underside of the PCB, which you can (optionally) use. -// Note that most of the Ardunio examples use "DEAD BEEF FEED" for the MAC address. -#define MY_MAC_ADDRESS 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED - -// Flash leds on rx/tx/err -#define MY_LEDS_BLINKING_FEATURE -// Set blinking period -#define MY_DEFAULT_LED_BLINK_PERIOD 300 - -// Enable inclusion mode -#define MY_INCLUSION_MODE_FEATURE -// Enable Inclusion mode button on gateway -#define MY_INCLUSION_BUTTON_FEATURE -// Set inclusion mode duration (in seconds) -#define MY_INCLUSION_MODE_DURATION 60 -// Digital pin used for inclusion mode button -#define MY_INCLUSION_MODE_BUTTON_PIN 3 - -#define MY_DEFAULT_ERR_LED_PIN 7 // Error led pin -#define MY_DEFAULT_RX_LED_PIN 8 // Receive led pin -#define MY_DEFAULT_TX_LED_PIN 9 // the PCB, on board LED - -#include -#include -#include - - -void setup() -{ -} - -void loop() { -} - diff --git a/libraries/MySensors/examples/HeatpumpIRController/HeatpumpIRController.ino b/libraries/MySensors/examples/HeatpumpIRController/HeatpumpIRController.ino deleted file mode 100644 index 5c026e8..0000000 --- a/libraries/MySensors/examples/HeatpumpIRController/HeatpumpIRController.ino +++ /dev/null @@ -1,244 +0,0 @@ -/** - * The MySensors Arduino library handles the wireless radio link and protocol - * between your home built sensors/actuators and HA controller of choice. - * The sensors forms a self healing radio network with optional repeaters. Each - * repeater and gateway builds a routing tables in EEPROM which keeps track of the - * network topology allowing messages to be routed to nodes. - * - * Created by Henrik Ekblad - * Copyright (C) 2013-2015 Sensnology AB - * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors - * - * Documentation: http://www.mysensors.org - * Support Forum: http://forum.mysensors.org - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 as published by the Free Software Foundation. - * - ******************************* - * - * REVISION HISTORY - * Version 1.0 - Toni A - https://github.com/ToniA/arduino-heatpumpir - * - * DESCRIPTION - * Heatpump controller - */ - -// Enable debug prints to serial monitor -#define MY_DEBUG - -// Enable and select radio type attached -#define MY_RADIO_NRF24 -//#define MY_RADIO_RFM69 - -// HeatpumpIR libraries, -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// Timer library, https://github.com/JChristensen/Timer -#include - -// MySensors libraries -#include -#include - -// Child ID's of this node -#define CHILD_1 1 - -// MySensors definitions -MyMessage irMsg(CHILD_1, V_IR_RECEIVE); - -// -- Hacks for Domoticz start -#define CHILD_2 2 -#define CHILD_3 3 -// Domoticz does not yet properly support the S_IR sensor type -MyMessage textMsg(CHILD_2, V_TEXT); -MyMessage sendMsg(CHILD_3, V_LIGHT); -// -- Hacks for Domoticz end - -// Array with all supported heatpump models -HeatpumpIR *heatpumpIR[] = { new PanasonicCKPHeatpumpIR(), // 0, keep this if you don't remove the timer for cancelling Panasonic CKP messages - new PanasonicDKEHeatpumpIR(), // 1 - new PanasonicJKEHeatpumpIR(), // 2 - new PanasonicNKEHeatpumpIR(), // 3 - new CarrierHeatpumpIR(), // 4 - new MideaHeatpumpIR(), // 5 - new FujitsuHeatpumpIR(), // 6 - new MitsubishiFDHeatpumpIR(), // 7 - new MitsubishiFEHeatpumpIR(), // 8 - new SamsungHeatpumpIR(), // 9 - new SharpHeatpumpIR(), // 10 - new DaikinHeatpumpIR() // 11 - }; - -// IR led on PWM output-capable digital pin 3 -IRSender irSender(3); - -// Timer for sending Panasonic CKP series timer cancellation commands -Timer timer; -int8_t panasonicCKPTimer = 0; - -// Number of supported models -byte models = 0; - - -void setup() -{ - Serial.begin(115200); - delay(1000); - Serial.println(F("HeatpumpIR sensor starting up...")); - - models = sizeof(heatpumpIR) / sizeof(HeatpumpIR*); - Serial.print(F("Number of supported models: ")); Serial.println(models); - - // The TEXT sensor is not created in Domoticz before data is sent - send(textMsg.setSensor(CHILD_2).set("00000000")); - // -- Hacks for Domoticz end -} - -void presentation() { - // Send the sketch version information to the gateway and Controller - sendSketchInfo("Heatpump Sensor", "1.0"); - - // Register a sensors to the MySensors Gateway - present(CHILD_1, S_IR, "IR sender"); - - // -- Hacks for Domoticz start - present(CHILD_2, S_INFO, "IR data"); - present(CHILD_3, S_LIGHT, "IR send"); -} - -void loop() -{ - timer.update(); -} - - -// Handle incoming messages from the MySensors Gateway -void receive(const MyMessage &message) { - - const char *irData; - - // V_IR type message - if (message.type==V_IR_SEND) { - Serial.println(F("Received IR send command...")); - irData = message.getString(); - Serial.print(F("Code: 0x")); - Serial.println(irData); - sendHeatpumpIRCommand(irData); - } - // -- Hacks for Domoticz start - else if (message.type==V_LIGHT) { - // When the button is pressed on Domoticz, request the value of the TEXT sensor - Serial.println(F("Requesting IR code from Domoticz...")); - request(CHILD_2, V_TEXT, 0); - } else if (message.type==V_TEXT) { - // TEXT sensor value is received as a result of the previous step - Serial.println(F("IR code received from Domoticz...")); - Serial.print(F("Code: 0x")); - - irData = message.getString(); - Serial.println(irData); - - sendHeatpumpIRCommand(irData); - - // Set the Domoticz switch back to 'OFF' state - send(sendMsg.setSensor(CHILD_3).set(0)); - } - // -- Hacks for Domoticz end -} - - -// Decode the IR command and send the IR command to the heatpump -void sendHeatpumpIRCommand(const char *irCommandString) { - - // irCommandString is an 8-digit hex digit - long irCommand = 0; - int sscanfStatus = sscanf(irCommandString, "%lx", &irCommand); - - if (sscanfStatus == 1) { - Serial.print(F("IR code conversion OK: 0x")); - Serial.println(irCommand, HEX); - } else { - Serial.println(F("Failed to convert IR hex code to number")); - } - -/* -The heatpump command is packed into a 32-bit hex number, see -libraries\HeatpumpIR\HeatpumpIR.h for the constants - -12345678 - 3 MODEL - 4 POWER - 5 OPERATING MODE - 6 FAN SPEED - 78 TEMPERATURE IN HEX - -00213416 (as an example of a valid code) - 2 = PanasonicJKE - 1 = Power ON - 3 = COOL - 4 = FAN 4 - 16 = Temperature 22 degrees (0x16 = 22) - */ - - byte model = (irCommand & 0x00F00000) >> 20; - byte power = (irCommand & 0x00010000) >> 16; - byte mode = (irCommand & 0x0000F000) >> 12; - byte fan = (irCommand & 0x00000F00) >> 8; - byte temp = (irCommand & 0x000000FF); - - const char* buf; - Serial.print(F("Model: ")); - - buf = heatpumpIR[model]->model(); - // 'model' is a PROGMEM pointer, so need to write a byte at a time - while (char modelChar = pgm_read_byte(buf++)) - { - Serial.print(modelChar); - } - Serial.println(); - - Serial.print(F("Model #: ")); Serial.println(model); - Serial.print(F("Power: ")); Serial.println(power); - Serial.print(F("Mode: ")); Serial.println(mode); - Serial.print(F("Fan: ")); Serial.println(fan); - Serial.print(F("Temp: ")); Serial.println(temp); - - // Heatpump models start from 0, i.e. model number is always less than the number of different models - if (model < models) { - // This is a supported model - - // Cancel the timer on Panasonic CKP heatpump - if (model == 0) { - Serial.println(F("Cancelling timer on Panasonic CKP heatpump...")); - timer.stop(panasonicCKPTimer); - } - - Serial.println(F("All OK - sending IR command to heatpump...")); - heatpumpIR[model]->send(irSender, power, mode, fan, temp, VDIR_UP, HDIR_AUTO); - - if (model == 0) { - Serial.println(F("Scheduling timer cancellation on Panasonic CKP heatpump...")); - panasonicCKPTimer = timer.after(120000, panasonicCancelTimer); // Called after 2 minutes - } - } -} - - -// Cancel the timer on the Panasonic CKP heatpump -void panasonicCancelTimer() -{ - PanasonicCKPHeatpumpIR *panasonicCKPHeatpumpIR = new PanasonicCKPHeatpumpIR(); - - panasonicCKPHeatpumpIR->sendPanasonicCKPCancelTimer(irSender); - Serial.println(F("The TIMER led should now be OFF")); -} diff --git a/libraries/MySensors/examples/HeatpumpIRController/README.md b/libraries/MySensors/examples/HeatpumpIRController/README.md deleted file mode 100644 index 2f53ec8..0000000 --- a/libraries/MySensors/examples/HeatpumpIRController/README.md +++ /dev/null @@ -1,73 +0,0 @@ -# MySensors example - -This example shows how HeatpumpIR could be integrated with the MySensors sensor network. As this sensor sends infrared signals, -the natural sensor type is 'S_IR'. The heatpump/air conditioner signals are really long, so the signals need to be encoded somehow. - -In this example the idea is to encode just this information, using 24 bits of data -* model code (see the index of the array heatpumpIR in the code) -* power state (for the rest, see the HeatpumpIR.h file for the constants) -* operating mode -* fan speed -* temperature (the temperature is directly the temperature in HEX) - -``` -An example: -00213416 (as an example of a valid code) - 2 = PanasonicJKE - 1 = Power ON - 3 = COOL - 4 = FAN 4 - 16 = Temperature 22 degrees (0x16 = 22) -``` - -This sketch creates three sensors: -* S_IR -* S_INFO -* S_LIGHT - -The S_INFO and S_LIGHT sensors are for Domoticz, as it does not currently (as of V2.3093) support infrared code sending through the S_IR sensor type. - -## Sending the code -### MYSController - -* Select the IR sensor on the 'Heatpump Sensor 1.0' node -* Select 'IR_SEND' as the subtype -* Enter for example '00213416' as the payload - -### Domoticz - -As Domoticz does not really support sending IR code yet, the workaround is to use two sensors. When the node is connected, Domoticz should find two new devices -* A 'Lighting 2 / AC' type sensor with name 'IR send' -* A 'General / Text' type sensor with name 'Unknown' and Data '00000000' - -To send a command, first add the sensors. Then update the data of the text sensor to contain the IR code to be sent, and then flip the switch to trigger the sending. -The data can be updated through the JSON REST API, or through the Lua event scripts. - -REST API example (assuming that the idx of the text sensor is 105 and the switch is 104, and Domoticz is at 192.168.0.4:8080): -``` -http://192.168.0.4:8080/json.htm?type=command¶m=udevice&idx=105&nvalue=0&svalue=00213416 -http://192.168.0.4:8080/json.htm?type=command¶m=switchlight&idx=104&switchcmd=On -``` - -Lua example: -* Seems that the text sensor can't be updated through the commandArray... -* So now when a device called 'trigger' changes, the text sensor value is first updated to '00213416', and then the IR signal is sent - -``` -commandArray = {} - -for key, value in pairs(devicechanged) do - if (key == 'trigger') then - - print("Heatpump script") - commandArray['OpenURL']='http://192.168.0.4:8080/json.htm?type=command¶m=udevice&idx=105&nvalue=0&svalue=00213416' - commandArray['IR send']='On' - end -end - -return commandArray -``` - -## Hardware - -Use any ATMega328-based Arduino, connect the radio, and finally connect an infrared led (in series with a resistor, like 100 Ohm) between digital pin 3 and GND. \ No newline at end of file diff --git a/libraries/MySensors/examples/HumiditySensor/HumiditySensor.ino b/libraries/MySensors/examples/HumiditySensor/HumiditySensor.ino deleted file mode 100644 index 1d28795..0000000 --- a/libraries/MySensors/examples/HumiditySensor/HumiditySensor.ino +++ /dev/null @@ -1,104 +0,0 @@ -/** - * The MySensors Arduino library handles the wireless radio link and protocol - * between your home built sensors/actuators and HA controller of choice. - * The sensors forms a self healing radio network with optional repeaters. Each - * repeater and gateway builds a routing tables in EEPROM which keeps track of the - * network topology allowing messages to be routed to nodes. - * - * Created by Henrik Ekblad - * Copyright (C) 2013-2015 Sensnology AB - * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors - * - * Documentation: http://www.mysensors.org - * Support Forum: http://forum.mysensors.org - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 as published by the Free Software Foundation. - * - ******************************* - * - * REVISION HISTORY - * Version 1.0 - Henrik EKblad - * - * DESCRIPTION - * This sketch provides an example how to implement a humidity/temperature - * sensor using DHT11/DHT-22 - * http://www.mysensors.org/build/humidity - */ - -// Enable debug prints -//#define MY_DEBUG - -// Enable and select radio type attached -#define MY_RADIO_NRF24 -//#define MY_RADIO_RFM69 - -#include -#include -#include - -#define CHILD_ID_HUM 0 -#define CHILD_ID_TEMP 1 -#define HUMIDITY_SENSOR_DIGITAL_PIN 3 -unsigned long SLEEP_TIME = 30000; // Sleep time between reads (in milliseconds) - -DHT dht; -float lastTemp; -float lastHum; -boolean metric = true; -MyMessage msgHum(CHILD_ID_HUM, V_HUM); -MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP); - -void setup() -{ - dht.setup(HUMIDITY_SENSOR_DIGITAL_PIN); - - metric = getConfig().isMetric; -} - -void presentation() -{ - // Send the Sketch Version Information to the Gateway - sendSketchInfo("Humidity", "1.0"); - - // Register all sensors to gw (they will be created as child devices) - present(CHILD_ID_HUM, S_HUM); - present(CHILD_ID_TEMP, S_TEMP); -} - -void loop() -{ - delay(dht.getMinimumSamplingPeriod()); - - // Fetch temperatures from DHT sensor - float temperature = dht.getTemperature(); - if (isnan(temperature)) { - Serial.println("Failed reading temperature from DHT"); - } else if (temperature != lastTemp) { - lastTemp = temperature; - if (!metric) { - temperature = dht.toFahrenheit(temperature); - } - send(msgTemp.set(temperature, 1)); - #ifdef MY_DEBUG - Serial.print("T: "); - Serial.println(temperature); - #endif - } - - // Fetch humidity from DHT sensor - float humidity = dht.getHumidity(); - if (isnan(humidity)) { - Serial.println("Failed reading humidity from DHT"); - } else if (humidity != lastHum) { - lastHum = humidity; - send(msgHum.set(humidity, 1)); - #ifdef MY_DEBUG - Serial.print("H: "); - Serial.println(humidity); - #endif - } - - sleep(SLEEP_TIME); //sleep a bit -} diff --git a/libraries/MySensors/examples/IrSensor/IrSensor.ino b/libraries/MySensors/examples/IrSensor/IrSensor.ino deleted file mode 100644 index c5e5a2f..0000000 --- a/libraries/MySensors/examples/IrSensor/IrSensor.ino +++ /dev/null @@ -1,150 +0,0 @@ -/** - * The MySensors Arduino library handles the wireless radio link and protocol - * between your home built sensors/actuators and HA controller of choice. - * The sensors forms a self healing radio network with optional repeaters. Each - * repeater and gateway builds a routing tables in EEPROM which keeps track of the - * network topology allowing messages to be routed to nodes. - * - * Created by Henrik Ekblad - * Copyright (C) 2013-2015 Sensnology AB - * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors - * - * Documentation: http://www.mysensors.org - * Support Forum: http://forum.mysensors.org - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 as published by the Free Software Foundation. - * - ******************************* - * - * REVISION HISTORY - * Version 1.0 - Henrik EKblad - * - * DESCRIPTION - * Example sketch showing how to control ir devices - * An IR LED must be connected to Arduino PWM pin 3. - * An optional ir receiver can be connected to PWM pin 8. - * All receied ir signals will be sent to gateway device stored in VAR_1. - * When binary light on is clicked - sketch will send volume up ir command - * When binary light off is clicked - sketch will send volume down ir command - * http://www.mysensors.org/build/ir - */ - -// Enable debug prints -//#define MY_DEBUG - -// Enable and select radio type attached -#define MY_RADIO_NRF24 -//#define MY_RADIO_RFM69 - -#include -#include -#include - -int RECV_PIN = 8; - -#define CHILD_1 3 // childId - -IRsend irsend; -IRrecv irrecv(RECV_PIN); -IRdecode decoder; -//decode_results results; -unsigned int Buffer[RAWBUF]; -MyMessage msg(CHILD_1, V_VAR1); - -void setup() -{ - irrecv.enableIRIn(); // Start the ir receiver - decoder.UseExtnBuf(Buffer); - -} - -void presentation() { - // Send the sketch version information to the gateway and Controller - sendSketchInfo("IR Sensor", "1.0"); - - // Register a sensors to Use binary light for test purposes. - present(CHILD_1, S_LIGHT); -} - -void loop() -{ - if (irrecv.GetResults(&decoder)) { - irrecv.resume(); - decoder.decode(); - decoder.DumpResults(); - - char buffer[10]; - sprintf(buffer, "%08lx", decoder.value); - // Send ir result to gw - send(msg.set(buffer)); - } -} - - - -void receive(const MyMessage &message) { - // We only expect one type of message from controller. But we better check anyway. - if (message.type==V_LIGHT) { - int incomingRelayStatus = message.getInt(); - if (incomingRelayStatus == 1) { - irsend.send(NEC, 0x1EE17887, 32); // Vol up yamaha ysp-900 - } else { - irsend.send(NEC, 0x1EE1F807, 32); // Vol down yamaha ysp-900 - } - // Start receiving ir again... - irrecv.enableIRIn(); - } -} - -// Dumps out the decode_results structure. -// Call this after IRrecv::decode() -// void * to work around compiler issue -//void dump(void *v) { -// decode_results *results = (decode_results *)v -/*void dump(decode_results *results) { - int count = results->rawlen; - if (results->decode_type == UNKNOWN) { - Serial.print("Unknown encoding: "); - } - else if (results->decode_type == NEC) { - Serial.print("Decoded NEC: "); - } - else if (results->decode_type == SONY) { - Serial.print("Decoded SONY: "); - } - else if (results->decode_type == RC5) { - Serial.print("Decoded RC5: "); - } - else if (results->decode_type == RC6) { - Serial.print("Decoded RC6: "); - } - else if (results->decode_type == PANASONIC) { - Serial.print("Decoded PANASONIC - Address: "); - Serial.print(results->panasonicAddress,HEX); - Serial.print(" Value: "); - } - else if (results->decode_type == JVC) { - Serial.print("Decoded JVC: "); - } - Serial.print(results->value, HEX); - Serial.print(" ("); - Serial.print(results->bits, DEC); - Serial.println(" bits)"); - Serial.print("Raw ("); - Serial.print(count, DEC); - Serial.print("): "); - - for (int i = 0; i < count; i++) { - if ((i % 2) == 1) { - Serial.print(results->rawbuf[i]*USECPERTICK, DEC); - } - else { - Serial.print(-(int)results->rawbuf[i]*USECPERTICK, DEC); - } - Serial.print(" "); - } - Serial.println(""); -} -*/ diff --git a/libraries/MySensors/examples/IrrigationController/IrrigationController.ino b/libraries/MySensors/examples/IrrigationController/IrrigationController.ino deleted file mode 100644 index 29e9251..0000000 --- a/libraries/MySensors/examples/IrrigationController/IrrigationController.ino +++ /dev/null @@ -1,883 +0,0 @@ -/* -MySprinkler for MySensors - -Arduino Multi-Zone Sprinkler Control - -May 31, 2015 - -*** Version 2.0 - -*** Upgraded to http://MySensors.org version 1.4.1 -*** Expanded for up to 16 Valves -*** Setup for active low relay board or comment out #define ACTIVE_LOW to switch to active high -*** Switch to bitshift method vs byte arrays -*** Changed RUN_ALL_ZONES Vera device to 0 (was highest valve) -*** Added optional LCD display featuring remaining time, date last ran & current time -*** Features 'raindrop' and 'clock' icons which indicate sensor is updating valve data and clock respectively -*** Added single pushbutton menu to manually select which program to run (All Zones or a Single Zone) -*** Added option of naming your Zones programmatically or with Vera (V_VAR3 used to store names) - -Utilizing your Vera home automation controller and the MySensors.org gateway you can -control up to a sixteen zone irrigation system with only three digital pins. This sketch -will create NUMBER_OF_VALVES + 1 devices on your Vera controller - -This sketch features the following: - -* Allows you to cycle through All zones (RUN_ALL_ZONES) or individual zone (RUN_SINGLE_ZONE) control. -* Use the 0th controller to activate RUN_ALL_ZONES (each zone in numeric sequence 1 to n) - using Variable1 as the "ON" time in minutes in each of the vera devices created. -* Use the individual zone controller to activate a single zone. This feature uses - Variable2 as the "ON" time for each individual device/zone. -* Connect according to pinout below and uses Shift Registers as to allow the MySensors - standard radio configuration and still leave available digital pins -* Turning on any zone will stop the current process and begin that particular process. -* Turning off any zone will stop the current process and turn off all zones. -* To push your new time intervals for your zones, simply change the variable on your Vera and - your arduino will call to Vera once a minute and update accordingly. Variables will also be - requested when the device is first powered on. -* Pushbutton activation to RUN_ALL_ZONES, RUN_SINGLE_ZONE or halt the current program -* LED status indicator - -PARTS LIST: -Available from the MySensors store - http://www.mysensors.org/store/ -* Relays (8 channel) -* Female Pin Header Connector Strip -* Prototype Universal Printed Circuit Boards (PCB) -* NRF24L01 Radio -* Arduino (I used a Pro Mini) -* FTDI USB to TTL Serial Adapter -* Capacitors (10uf and .1uf) -* 3.3v voltage regulator -* Resistors (270 & 10K) -* Female Dupont Cables -* 1602 LCD (with I2C Interface) -* LED -* Push button -* Shift Register (SN74HC595) -* 2 Pole 5mm Pitch PCB Mount Screw Terminal Block -* 3 Pole 5mm Pitch PCB Mount Screw Terminal Block -* 22-24 gauge wire or similar (I used Cat5/Cat6 cable) -* 18 gauge wire (for relay) -* Irrigation Power Supply (24-Volt/750 mA Transformer) - - -INSTRUCTIONS: - -* A step-by-step setup video is available here: http://youtu.be/l4GPRTsuHkI -* After assembling your arduino, radio, decoupling capacitors, shift register(s), status LED, pushbutton LCD (I2C connected to - A4 and A5) and relays, and load the sketch. -* Following the instructions at https://MySensors.org include the device to your MySensors Gateway. -* Verify that each new device has a Variable1, Variable2 and Variable3. Populate data accordingly with whole minutes for - the RUN_ALL_ZONES routine (Variable1) and the RUN_SINGLE_ZONE routines (Variable 2). The values entered for times may be zero and - you may use the defaulet zone names by leaving Variable3 blank. -* Once you have entered values for each zone and each variable, save the settings by pressing the red save button on your Vera. -* Restart your arduino; verify the settings are loaded into your arduino with the serial monitor; the array will be printed - on the serial monitor. -* Your arduino should slow-flash, indicating that it is in ready mode. -* There are multiple debug serial prints that can be monitored to assure that it is operating properly. -* ***THIS SHOULD NO LONGER BE NEEDED*** The standard MySensors library now works. https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads for the I2C library, or use yours - -Contributed by Jim (BulldogLowell@gmail.com) with much contribution from Pete (pete.will@mysensors.org) and is released to the public domain -*/ -// - -// Enable debug prints -//#define MY_DEBUG - -// Enable and select radio type attached -#define MY_RADIO_NRF24 -//#define MY_RADIO_RFM69 - -//#define MY_NODE_ID 1 // Set this to fix your Radio ID or use Auto - -#include -#include -#include -#include -#include -#include - - -#define NUMBER_OF_VALVES 8 // Change this to set your valve count up to 16. -#define VALVE_RESET_TIME 7500UL // Change this (in milliseconds) for the time you need your valves to hydraulically reset and change state - -#define SKETCH_NAME "MySprinkler" -#define SKETCH_VERSION "2.0" -// -#define CHILD_ID_SPRINKLER 0 -// -#define ACTIVE_LOW // comment out this line if your relays are active high -// -#define DEBUG_ON // comment out to supress serial monitor output -// -#ifdef ACTIVE_LOW -#define BITSHIFT_VALVE_NUMBER ~(1U << (valveNumber-1)) -#define ALL_VALVES_OFF 0xFFFF -#else -#define BITSHIFT_VALVE_NUMBER (1U << (valveNumber-1)) -#define ALL_VALVES_OFF 0U -#endif -// -#ifdef DEBUG_ON -#define DEBUG_PRINT(x) Serial.print(x) -#define DEBUG_PRINTLN(x) Serial.println(x) -#else -#define DEBUG_PRINT(x) -#define DEBUG_PRINTLN(x) -#define SERIAL_START(x) -#endif -// -typedef enum { - STAND_BY_ALL_OFF, RUN_SINGLE_ZONE, RUN_ALL_ZONES, CYCLE_COMPLETE, ZONE_SELECT_MENU -} -SprinklerStates; -// -SprinklerStates state = STAND_BY_ALL_OFF; -SprinklerStates lastState; -byte menuState = 0; -unsigned long menuTimer; -byte countDownTime = 10; -// -int allZoneTime [NUMBER_OF_VALVES + 1]; -int valveSoloTime [NUMBER_OF_VALVES + 1]; -int valveNumber; -int lastValve; -unsigned long startMillis; -const int ledPin = 5; -const int waterButtonPin = 3; -boolean buttonPushed = false; -boolean showTime = true; -boolean clockUpdating = false; -boolean recentUpdate = true; -const char *dayOfWeek[] = { - "Null", "Sunday ", "Monday ", "Tuesday ", "Wednesday ", "Thursday ", "Friday ", "Saturday " -}; -// Name your Zones here or use Vera to edit them by adding a name in Variable3... -String valveNickName[17] = { - "All Zones", "Zone 1", "Zone 2", "Zone 3", "Zone 4", "Zone 5", "Zone 6", "Zone 7", "Zone 8", "Zone 9", "Zone 10", "Zone 11", "Zone 12", "Zone 13", "Zone 14", "Zone 15", "Zone 16" -}; -// -time_t lastTimeRun = 0; -//Setup Shift Register... -const int latchPin = 8; -const int clockPin = 4; -const int dataPin = 7; -// -byte clock[8] = {0x0, 0xe, 0x15, 0x17, 0x11, 0xe, 0x0}; // fetching time indicator -byte raindrop[8] = {0x4, 0x4, 0xA, 0xA, 0x11, 0xE, 0x0,}; // fetching Valve Data indicator -// Set the pins on the I2C chip used for LCD connections: -// addr, en,rw,rs,d4,d5,d6,d7,bl,blpol -LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address to 0x27 -// -MyMessage msg1valve(CHILD_ID_SPRINKLER, V_LIGHT); -MyMessage var1valve(CHILD_ID_SPRINKLER, V_VAR1); -MyMessage var2valve(CHILD_ID_SPRINKLER, V_VAR2); - -bool receivedInitialValue = false; -// -void setup() -{ - DEBUG_PRINTLN(F("Initialising...")); - pinMode(latchPin, OUTPUT); - pinMode(clockPin, OUTPUT); - pinMode(dataPin, OUTPUT); - pinMode(ledPin, OUTPUT); - pinMode(waterButtonPin, INPUT_PULLUP); - //pinMode(waterButtonPin, INPUT); - attachInterrupt(digitalPinToInterrupt(waterButtonPin), PushButton, RISING); //May need to change for your Arduino model - digitalWrite (ledPin, HIGH); - DEBUG_PRINTLN(F("Turning All Valves Off...")); - updateRelays(ALL_VALVES_OFF); - //delay(5000); - lcd.begin(16, 2); //(16 characters and 2 line display) - lcd.clear(); - lcd.backlight(); - lcd.createChar(0, clock); - lcd.createChar(1, raindrop); - // - //check for saved date in EEPROM - DEBUG_PRINTLN(F("Checking EEPROM for stored date:")); - delay(500); - if (loadState(0) == 0xFF) // EEPROM flag - { - DEBUG_PRINTLN(F("Retreiving last run time from EEPROM...")); - for (int i = 0; i < 4 ; i++) - { - lastTimeRun = lastTimeRun << 8; - lastTimeRun = lastTimeRun | loadState(i + 1); // assemble 4 bytes into an ussigned long epoch timestamp - } - } - - DEBUG_PRINTLN(F("Sensor Presentation Complete")); - // - digitalWrite (ledPin, LOW); - DEBUG_PRINTLN(F("Ready...")); - // - lcd.setCursor(0, 0); - lcd.print(F(" Syncing Time ")); - lcd.setCursor(15, 0); - lcd.write(byte(0)); - lcd.setCursor(0, 1); - int clockCounter = 0; - while (timeStatus() == timeNotSet && clockCounter < 21) - { - requestTime(); - DEBUG_PRINTLN(F("Requesting time from Gateway:")); - wait(1000); - lcd.print("."); - clockCounter++; - if (clockCounter > 16) - { - DEBUG_PRINTLN(F("Failed initial clock synchronization!")); - lcd.clear(); - lcd.print(F(" Failed Clock ")); - lcd.setCursor(0, 1); - lcd.print(F(" Syncronization ")); - wait(2000); - break; - } - } - // - lcd.clear(); - //Update valve data when first powered on - for (byte i = 0; i <= NUMBER_OF_VALVES; i++) - { - lcd.print(F(" Updating ")); - lcd.setCursor(0, 1); - lcd.print(F(" Valve Data: ")); - lcd.print(i); - boolean flashIcon = false; - DEBUG_PRINT(F("Calling for Valve ")); - DEBUG_PRINT(i); - DEBUG_PRINTLN(F(" Data...")); - while (!receivedInitialValue) - { - lcd.setCursor(15, 0); - flashIcon = !flashIcon; - flashIcon ? lcd.write(byte(1)) : lcd.print(F(" ")); - request(i, V_VAR1); - wait(500); - } - receivedInitialValue = false; - while (!receivedInitialValue) - { - lcd.setCursor(15, 0); - flashIcon = !flashIcon; - flashIcon ? lcd.write(byte(1)) : lcd.print(F(" ")); - request(i, V_VAR2); - wait(500); - } - receivedInitialValue = false; - while (!receivedInitialValue) - { - lcd.setCursor(15, 0); - flashIcon = !flashIcon; - flashIcon ? lcd.write(byte(1)) : lcd.print(F(" ")); - request(i, V_VAR3); - wait(500); - } - } - lcd.clear(); -} - - -void presentation() -{ - sendSketchInfo(SKETCH_NAME, SKETCH_VERSION); - for (byte i = 0; i <= NUMBER_OF_VALVES; i++) - { - present(i, S_LIGHT); - } -} - -// -void loop() -{ - updateClock(); - updateDisplay(); - goGetValveTimes(); - // - if (buttonPushed) - { - menuTimer = millis(); - DEBUG_PRINTLN(F("Button Pressed")); - if (state == STAND_BY_ALL_OFF) - { - state = ZONE_SELECT_MENU; - menuState = 0; - } - else if (state == ZONE_SELECT_MENU) - { - menuState++; - if (menuState > NUMBER_OF_VALVES) - { - menuState = 0; - } - } - else - { - state = STAND_BY_ALL_OFF; - } - buttonPushed = false; - } - if (state == STAND_BY_ALL_OFF) - { - slowToggleLED (); - if (state != lastState) - { - updateRelays(ALL_VALVES_OFF); - DEBUG_PRINTLN(F("State Changed... all Zones off")); - for (byte i = 0; i <= NUMBER_OF_VALVES; i++) - { - wait(50); - send(msg1valve.setSensor(i).set(false), false); - } - lcd.clear(); - lcd.setCursor(0,0); - lcd.print(F("** Irrigation **")); - lcd.setCursor(0,1); - lcd.print(F("** Halted **")); - wait(2000); - lastValve = -1; - } - } - // - else if (state == RUN_ALL_ZONES) - { - if (lastValve != valveNumber) - { - for (byte i = 0; i <= NUMBER_OF_VALVES; i++) - { - if (i == 0 || i == valveNumber) - { - send(msg1valve.setSensor(i).set(true), false); - } - else - { - send(msg1valve.setSensor(i).set(false), false); - } - } - } - lastValve = valveNumber; - fastToggleLed(); - if (state != lastState) - { - valveNumber = 1; - updateRelays(ALL_VALVES_OFF); - DEBUG_PRINTLN(F("State Changed, Running All Zones...")); - } - unsigned long nowMillis = millis(); - if (nowMillis - startMillis < VALVE_RESET_TIME) - { - updateRelays(ALL_VALVES_OFF); - } - else if (nowMillis - startMillis < (allZoneTime[valveNumber] * 60000UL)) - { - updateRelays(BITSHIFT_VALVE_NUMBER); - } - else - { - DEBUG_PRINTLN(F("Changing Valves...")); - updateRelays(ALL_VALVES_OFF); - startMillis = millis(); - valveNumber++; - if (valveNumber > NUMBER_OF_VALVES) - { - state = CYCLE_COMPLETE; - startMillis = millis(); - lastValve = -1; - lastTimeRun = now(); - saveDateToEEPROM(lastTimeRun); - for (byte i = 0; i <= NUMBER_OF_VALVES; i++) - { - send(msg1valve.setSensor(i).set(false), false); - } - DEBUG_PRINT(F("State = ")); - DEBUG_PRINTLN(state); - } - } - } - // - else if (state == RUN_SINGLE_ZONE) - { - fastToggleLed(); - if (state != lastState) - { - for (byte i = 0; i <= NUMBER_OF_VALVES; i++) - { - if (i == 0 || i == valveNumber) - { - send(msg1valve.setSensor(i).set(true), false); - } - else - { - send(msg1valve.setSensor(i).set(false), false); - } - } - DEBUG_PRINTLN(F("State Changed, Single Zone Running...")); - DEBUG_PRINT(F("Zone: ")); - DEBUG_PRINTLN(valveNumber); - } - unsigned long nowMillis = millis(); - if (nowMillis - startMillis < VALVE_RESET_TIME) - { - updateRelays(ALL_VALVES_OFF); - } - else if (nowMillis - startMillis < (valveSoloTime [valveNumber] * 60000UL)) - { - updateRelays(BITSHIFT_VALVE_NUMBER); - } - else - { - updateRelays(ALL_VALVES_OFF); - for (byte i = 0; i <= NUMBER_OF_VALVES; i++) - { - send(msg1valve.setSensor(i).set(false), false); - } - state = CYCLE_COMPLETE; - startMillis = millis(); - DEBUG_PRINT(F("State = ")); - DEBUG_PRINTLN(state); - } - lastTimeRun = now(); - } - else if (state == CYCLE_COMPLETE) - { - if (millis() - startMillis < 30000UL) - { - fastToggleLed(); - } - else - { - state = STAND_BY_ALL_OFF; - } - } - else if (state == ZONE_SELECT_MENU) - { - displayMenu(); - } - lastState = state; -} -// -void displayMenu(void) -{ - static byte lastMenuState = -1; - static int lastSecond; - if (menuState != lastMenuState) - { - lcd.clear(); - lcd.setCursor(0, 0); - lcd.print(valveNickName[menuState]); - lcd.setCursor(0, 1); - lcd.print(F("Starting")); - DEBUG_PRINT(valveNickName[menuState]); - Serial.print(F(" Starting Shortly")); - } - int thisSecond = (millis() - menuTimer) / 1000UL; - if (thisSecond != lastSecond && thisSecond < 8) - { - lcd.print(F(".")); - Serial.print("."); - } - lastSecond = thisSecond; - if (millis() - menuTimer > 10000UL) - { - startMillis = millis(); - if (menuState == 0) - { - valveNumber = 1; - state = RUN_ALL_ZONES; - } - else - { - valveNumber = menuState; - state = RUN_SINGLE_ZONE; - } - } - else - { - - } - lastMenuState = menuState; -} -// -void updateRelays(int value) -{ - digitalWrite(latchPin, LOW); - shiftOut(dataPin, clockPin, MSBFIRST, highByte(value)); - shiftOut(dataPin, clockPin, MSBFIRST, lowByte(value)); - digitalWrite(latchPin, HIGH); -} -// -void PushButton() //interrupt with debounce -{ - static unsigned long last_interrupt_time = 0; - unsigned long interrupt_time = millis(); - if (interrupt_time - last_interrupt_time > 200) - { - buttonPushed = true; - } - last_interrupt_time = interrupt_time; -} -// -void fastToggleLed() -{ - static unsigned long fastLedTimer; - if (millis() - fastLedTimer >= 100UL) - { - digitalWrite(ledPin, !digitalRead(ledPin)); - fastLedTimer = millis (); - } -} -// -void slowToggleLED () -{ - static unsigned long slowLedTimer; - if (millis() - slowLedTimer >= 1250UL) - { - digitalWrite(ledPin, !digitalRead(ledPin)); - slowLedTimer = millis (); - } -} -// -void receive(const MyMessage &message) -{ - boolean zoneTimeUpdate = false; - if (message.isAck()) - { - DEBUG_PRINTLN(F("This is an ack from gateway")); - } - for (byte i = 0; i <= NUMBER_OF_VALVES; i++) - { - if (message.sensor == i) - { - if (message.type == V_LIGHT) - { - int switchState = atoi(message.data); - if (switchState == 0) - { - state = STAND_BY_ALL_OFF; - DEBUG_PRINTLN(F("Recieved Instruction to Cancel...")); - } - else - { - if (i == 0) - { - state = RUN_ALL_ZONES; - valveNumber = 1; - DEBUG_PRINTLN(F("Recieved Instruction to Run All Zones...")); - } - else - { - state = RUN_SINGLE_ZONE; - valveNumber = i; - DEBUG_PRINT(F("Recieved Instruction to Activate Zone: ")); - DEBUG_PRINTLN(i); - } - } - startMillis = millis(); - } - else if (message.type == V_VAR1) - { - int variable1 = atoi(message.data);// RUN_ALL_ZONES time - DEBUG_PRINT(F("Recieved variable1 valve:")); - DEBUG_PRINT(i); - DEBUG_PRINT(F(" = ")); - DEBUG_PRINTLN(variable1); - if (variable1 != allZoneTime[i]) - { - allZoneTime[i] = variable1; - - zoneTimeUpdate = true; - } - receivedInitialValue = true; - } - else if (message.type == V_VAR2) - { - int variable2 = atoi(message.data);// RUN_SINGLE_ZONE time - DEBUG_PRINT(F("Recieved variable2 valve:")); - DEBUG_PRINT(i); - DEBUG_PRINT(F(" = ")); - DEBUG_PRINTLN(variable2); - if (variable2 != valveSoloTime[i]) - { - valveSoloTime[i] = variable2; - zoneTimeUpdate = true; - } - receivedInitialValue = true; - } - else if (message.type == V_VAR3) - { - String newMessage = String(message.data); - if (newMessage.length() == 0) - { - DEBUG_PRINT(F("No Name Recieved for zone ")); - DEBUG_PRINTLN(i); - break; - } - if (newMessage.length() > 16) - { - newMessage.substring(0, 16); - } - valveNickName[i] = ""; - valveNickName[i] += newMessage; - DEBUG_PRINT(F("Recieved new name for zone ")); - DEBUG_PRINT(i); - DEBUG_PRINT(F(" and it is now called: ")); - DEBUG_PRINTLN(valveNickName[i]); - } - receivedInitialValue = true; - } - } - if (zoneTimeUpdate) - { - // - DEBUG_PRINTLN(F("New Zone Times Recieved...")); - for (byte i = 0; i <= NUMBER_OF_VALVES; i++) - { - if (i != 0) - { - DEBUG_PRINT(F("Zone ")); - DEBUG_PRINT(i); - DEBUG_PRINT(F(" individual time: ")); - DEBUG_PRINT(valveSoloTime[i]); - DEBUG_PRINT(F(" group time: ")); - DEBUG_PRINTLN(allZoneTime[i]); - recentUpdate = true; - } - } - } - else - { - recentUpdate = false; - } -} -// -void updateDisplay() -{ - static unsigned long lastUpdateTime; - static boolean displayToggle = false; - //static byte toggleCounter = 0; - static SprinklerStates lastDisplayState; - if (state != lastDisplayState || millis() - lastUpdateTime >= 3000UL) - { - displayToggle = !displayToggle; - switch (state) { - case STAND_BY_ALL_OFF: - // - fastClear(); - lcd.setCursor(0, 0); - if (displayToggle) - { - lcd.print(F(" System Ready ")); - if (clockUpdating) - { - lcd.setCursor(15, 0); - lcd.write(byte(0)); - } - lcd.setCursor(0, 1); - lcd.print(hourFormat12() < 10 ? F(" ") : F("")); - lcd.print(hourFormat12()); - lcd.print(minute() < 10 ? F(":0") : F(":")); - lcd.print(minute()); - lcd.print(isAM() ? F("am") : F("pm")); - lcd.print(month() < 10 ? F(" 0") : F(" ")); - lcd.print(month()); - lcd.print(day() < 10 ? F("/0") : F("/")); - lcd.print(day()); - lcd.print(F("/")); - lcd.print(year() % 100); - } - else - { - lcd.print(F(" Last Watered ")); - if (clockUpdating) - { - lcd.setCursor(15, 0); - lcd.write(byte(0)); - } - lcd.setCursor(0, 1); - lcd.print(dayOfWeek[weekday(lastTimeRun)]); - lcd.setCursor(11, 1); - lcd.print(month(lastTimeRun) < 10 ? F(" ") : F("")); - lcd.print(month(lastTimeRun)); - lcd.print(day(lastTimeRun) < 10 ? F("/0") : F("/")); - lcd.print(day(lastTimeRun)); - } - break; - case RUN_SINGLE_ZONE: - // - fastClear(); - lcd.setCursor(0, 0); - if (displayToggle) - { - lcd.print(F("Single Zone Mode")); - lcd.setCursor(0, 1); - lcd.print(F(" Zone:")); - if (valveNumber < 10) lcd.print(F("0")); - lcd.print(valveNumber); - lcd.print(F(" Active")); - } - else - { - lcd.print(F(" Time Remaining ")); - lcd.setCursor(0, 1); - if (valveSoloTime[valveNumber] == 0) - { - lcd.print(F(" No Valve Time ")); - } - else - { - unsigned long timeRemaining = (valveSoloTime[valveNumber] * 60) - ((millis() - startMillis) / 1000); - lcd.print(timeRemaining / 60 < 10 ? " 0" : " "); - lcd.print(timeRemaining / 60); - lcd.print("min"); - lcd.print(timeRemaining % 60 < 10 ? " 0" : " "); - lcd.print(timeRemaining % 60); - lcd.print("sec "); - } - } - break; - case RUN_ALL_ZONES: - // - fastClear(); - lcd.setCursor(0, 0); - if (displayToggle) - { - lcd.print(F(" All-Zone Mode ")); - lcd.setCursor(0, 1); - lcd.print(F(" Zone:")); - if (valveNumber < 10) lcd.print(F("0")); - lcd.print(valveNumber); - lcd.print(F(" Active ")); - } - else - { - lcd.print(F(" Time Remaining ")); - lcd.setCursor(0, 1); - int timeRemaining = (allZoneTime[valveNumber] * 60) - ((millis() - startMillis) / 1000); - lcd.print((timeRemaining / 60) < 10 ? " 0" : " "); - lcd.print(timeRemaining / 60); - lcd.print("min"); - lcd.print(timeRemaining % 60 < 10 ? " 0" : " "); - lcd.print(timeRemaining % 60); - lcd.print("sec "); - } - break; - case CYCLE_COMPLETE: - // - if (displayToggle) - { - lcd.setCursor(0, 0); - lcd.print(F(" Watering Cycle ")); - lcd.setCursor(0, 1); - lcd.print(F(" Complete ")); - } - else - { - int totalTimeRan = 0; - for (int i = 1; i < NUMBER_OF_VALVES + 1; i++) - { - totalTimeRan += allZoneTime[i]; - } - lcd.setCursor(0, 0); - lcd.print(F(" Total Time Run ")); - lcd.setCursor(0, 1); - lcd.print(totalTimeRan < 10 ? " 0" : " "); - lcd.print(totalTimeRan); - lcd.print(" Minutes "); - } - default: - // what of ZONE_SELECT_MENU? - break; - } - lastUpdateTime = millis(); - } - lastDisplayState = state; -} -void receiveTime(time_t newTime) -{ - DEBUG_PRINTLN(F("Time value received and updated...")); - int lastSecond = second(); - int lastMinute = minute(); - int lastHour = hour(); - setTime(newTime); - if (((second() != lastSecond) || (minute() != lastMinute) || (hour() != lastHour)) || showTime) - { - DEBUG_PRINTLN(F("Clock updated....")); - DEBUG_PRINT(F("Sensor's time currently set to:")); - DEBUG_PRINT(hourFormat12() < 10 ? F(" 0") : F(" ")); - DEBUG_PRINT(hourFormat12()); - DEBUG_PRINT(minute() < 10 ? F(":0") : F(":")); - DEBUG_PRINT(minute()); - DEBUG_PRINTLN(isAM() ? F("am") : F("pm")); - DEBUG_PRINT(month()); - DEBUG_PRINT(F("/")); - DEBUG_PRINT(day()); - DEBUG_PRINT(F("/")); - DEBUG_PRINTLN(year()); - DEBUG_PRINTLN(dayOfWeek[weekday()]); - showTime = false; - } - else - { - DEBUG_PRINTLN(F("Sensor's time did NOT need adjustment greater than 1 second.")); - } - clockUpdating = false; -} -void fastClear() -{ - lcd.setCursor(0, 0); - lcd.print(F(" ")); - lcd.setCursor(0, 1); - lcd.print(F(" ")); -} -// -void updateClock() -{ - static unsigned long lastVeraGetTime; - if (millis() - lastVeraGetTime >= 3600000UL) // updates clock time and gets zone times from vera once every hour - { - DEBUG_PRINTLN(F("Requesting time and valve data from Gateway...")); - lcd.setCursor(15, 0); - lcd.write(byte(0)); - clockUpdating = true; - requestTime(); - lastVeraGetTime = millis(); - } -} -// -void saveDateToEEPROM(unsigned long theDate) -{ - DEBUG_PRINTLN(F("Saving Last Run date")); - if (loadState(0) != 0xFF) - { - saveState(0, 0xFF); // EEPROM flag for last date saved stored in EEPROM (location zero) - } - // - for (int i = 1; i < 5; i++) - { - saveState(5 - i, byte(theDate >> 8 * (i - 1))); // store epoch datestamp in 4 bytes of EEPROM starting in location one - } -} -// -void goGetValveTimes() -{ - static unsigned long valveUpdateTime; - static byte valveIndex = 1; - if (millis() - valveUpdateTime >= 300000UL / NUMBER_OF_VALVES)// update each valve once every 5 mins (distributes the traffic) - { - DEBUG_PRINTLN(F("Calling for Valve Data...")); - lcd.setCursor(15, 0); - lcd.write(byte(1)); //lcd.write(1); - request(valveIndex, V_VAR1); - request(valveIndex, V_VAR2); - request(valveIndex, V_VAR3); - valveUpdateTime = millis(); - valveIndex++; - if (valveIndex > NUMBER_OF_VALVES + 1) - { - valveIndex = 1; - } - } -} diff --git a/libraries/MySensors/examples/LightLuxSensor/LightLuxSensor.ino b/libraries/MySensors/examples/LightLuxSensor/LightLuxSensor.ino deleted file mode 100644 index eb4485f..0000000 --- a/libraries/MySensors/examples/LightLuxSensor/LightLuxSensor.ino +++ /dev/null @@ -1,88 +0,0 @@ -/** - * The MySensors Arduino library handles the wireless radio link and protocol - * between your home built sensors/actuators and HA controller of choice. - * The sensors forms a self healing radio network with optional repeaters. Each - * repeater and gateway builds a routing tables in EEPROM which keeps track of the - * network topology allowing messages to be routed to nodes. - * - * Created by Henrik Ekblad - * Copyright (C) 2013-2015 Sensnology AB - * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors - * - * Documentation: http://www.mysensors.org - * Support Forum: http://forum.mysensors.org - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 as published by the Free Software Foundation. - * - ******************************* - * - * REVISION HISTORY - * Version 1.0 - idefix - * - * DESCRIPTION - * Arduino BH1750FVI Light sensor - * communicate using I2C Protocol - * this library enable 2 slave device addresses - * Main address 0x23 - * secondary address 0x5C - * connect the sensor as follows : - * - * VCC >>> 5V - * Gnd >>> Gnd - * ADDR >>> NC or GND - * SCL >>> A5 - * SDA >>> A4 - * http://www.mysensors.org/build/light - */ - - -// Enable debug prints to serial monitor -#define MY_DEBUG - -// Enable and select radio type attached -#define MY_RADIO_NRF24 -//#define MY_RADIO_RFM69 - -#include -#include -#include -#include - -#define CHILD_ID_LIGHT 0 -unsigned long SLEEP_TIME = 30000; // Sleep time between reads (in milliseconds) - -BH1750 lightSensor; - -// V_LIGHT_LEVEL should only be used for uncalibrated light level 0-100%. -// If your controller supports the new V_LEVEL variable, use this instead for -// transmitting LUX light level. -MyMessage msg(CHILD_ID_LIGHT, V_LIGHT_LEVEL); -// MyMessage msg(CHILD_ID_LIGHT, V_LEVEL); -uint16_t lastlux; - -void setup() -{ - lightSensor.begin(); -} - -void presentation() { - // Send the sketch version information to the gateway and Controller - sendSketchInfo("Light Lux Sensor", "1.0"); - - // Register all sensors to gateway (they will be created as child devices) - present(CHILD_ID_LIGHT, S_LIGHT_LEVEL); -} - -void loop() -{ - uint16_t lux = lightSensor.readLightLevel();// Get Lux value - Serial.println(lux); - if (lux != lastlux) { - send(msg.set(lux)); - lastlux = lux; - } - - sleep(SLEEP_TIME); -} diff --git a/libraries/MySensors/examples/LightningSensor/LightningSensor.ino b/libraries/MySensors/examples/LightningSensor/LightningSensor.ino deleted file mode 100644 index aded9f0..0000000 --- a/libraries/MySensors/examples/LightningSensor/LightningSensor.ino +++ /dev/null @@ -1,125 +0,0 @@ -// This sketch is to integrate the Playing With Fusion AXS3935 Lightning Sensor Breakout Board -// with the MySensors environment and is based on a sketch provided by Playing With Fusion -// http://playingwithfusion.com/productview.php?pdid=22&catid=1001 -// - -// Enable debug prints to serial monitor -#define MY_DEBUG - -// Enable and select radio type attached -#define MY_RADIO_NRF24 -//#define MY_RADIO_RFM69 - -#include -#include -// include Playing With Fusion AXS3935 libraries -#include - -// setup CS pins used for the connection with the lightning sensor -// other connections are controlled by the SPI library) -#define CS_PIN 8 -#define SI_PIN 7 -#define IRQ_PIN 3 -volatile int8_t AS3935_ISR_Trig = 0; - -// #defines -#define AS3935_INDOORS 1 -#define AS3935_OUTDOORS 0 -#define AS3935_DIST_DIS 0 -#define AS3935_DIST_EN 1 -#define AS3935_CAPACITANCE 96 // <-- SET THIS VALUE TO THE NUMBER LISTED ON YOUR BOARD -// prototypes -void AS3935_ISR(); - -PWF_AS3935 lightning0(CS_PIN, IRQ_PIN, SI_PIN); - -#define CHILD_ID_DISTANCE 1 -#define CHILD_ID_INTENSITY 2 -MyMessage msgDist(CHILD_ID_DISTANCE, V_DISTANCE); -MyMessage msgInt(CHILD_ID_INTENSITY, V_VAR1); - -void setup() -{ - Serial.println("Playing With Fusion: AS3935 Lightning Sensor, SEN-39001"); - Serial.println("beginning boot procedure...."); - - // setup for the the SPI library: - SPI.begin(); // begin SPI - SPI.setClockDivider(SPI_CLOCK_DIV4); // SPI speed to SPI_CLOCK_DIV16/1MHz (max 2MHz, NEVER 500kHz!) - SPI.setDataMode(SPI_MODE1); // MAX31855 is a Mode 1 device - // --> clock starts low, read on rising edge - SPI.setBitOrder(MSBFIRST); // data sent to chip MSb first - - lightning0.AS3935_DefInit(); // set registers to default - // now update sensor cal for your application and power up chip - lightning0.AS3935_ManualCal(AS3935_CAPACITANCE, AS3935_OUTDOORS, AS3935_DIST_EN); - // AS3935_ManualCal Parameters: - // --> capacitance, in pF (marked on package) - // --> indoors/outdoors (AS3935_INDOORS:0 / AS3935_OUTDOORS:1) - // --> disturbers (AS3935_DIST_EN:1 / AS3935_DIST_DIS:2) - // function also powers up the chip - - // enable interrupt (hook IRQ pin to Arduino Uno/Mega interrupt input: 1 -> pin 3 ) - attachInterrupt(digitalPinToInterrupt(IRQ_PIN), AS3935_ISR, RISING); - // dump the registry data to the serial port for troubleshooting purposes - lightning0.AS3935_PrintAllRegs(); - - // delay execution to allow chip to stabilize. - delay(1000); - -} - -void presentation() { - // Send the sketch version information to the gateway and Controller - sendSketchInfo("Lightning Sensor", "1.1"); - - // Register all sensors to gw (they will be created as child devices) - present(CHILD_ID_DISTANCE, S_DISTANCE); - present(CHILD_ID_INTENSITY, S_CUSTOM); -} - -void loop() -{ - - // This program only handles an AS3935 lightning sensor. It does nothing until - // an interrupt is detected on the IRQ pin. - while(0 == AS3935_ISR_Trig){} - - // reset interrupt flag - AS3935_ISR_Trig = 0; - - // now get interrupt source - uint8_t int_src = lightning0.AS3935_GetInterruptSrc(); - if(0 == int_src) - { - Serial.println("Unknown interrupt source"); - } - else if(1 == int_src) - { - uint8_t lightning_dist_km = lightning0.AS3935_GetLightningDistKm(); - uint32_t lightning_intensity = lightning0.AS3935_GetStrikeEnergyRaw(); - - Serial.print("Lightning detected! Distance to strike: "); - Serial.print(lightning_dist_km); - Serial.println(" kilometers"); - Serial.print("Lightning detected! Lightning Intensity: "); - Serial.println(lightning_intensity); - send(msgDist.set(lightning_dist_km)); - send(msgInt.set(lightning_intensity)); - } - else if(2 == int_src) - { - Serial.println("Disturber detected"); - } - else if(3 == int_src) - { - Serial.println("Noise level too high"); - } -} - -// this is irq handler for AS3935 interrupts, has to return void and take no arguments -// always make code in interrupt handlers fast and short -void AS3935_ISR() -{ - AS3935_ISR_Trig = 1; -} diff --git a/libraries/MySensors/examples/MAX6875TemperatureSensor/MAX6875TemperatureSensor.ino b/libraries/MySensors/examples/MAX6875TemperatureSensor/MAX6875TemperatureSensor.ino deleted file mode 100644 index eb9e5b2..0000000 --- a/libraries/MySensors/examples/MAX6875TemperatureSensor/MAX6875TemperatureSensor.ino +++ /dev/null @@ -1,87 +0,0 @@ -/** - * The MySensors Arduino library handles the wireless radio link and protocol - * between your home built sensors/actuators and HA controller of choice. - * The sensors forms a self healing radio network with optional repeaters. Each - * repeater and gateway builds a routing tables in EEPROM which keeps track of the - * network topology allowing messages to be routed to nodes. - * - * Created by Henrik Ekblad - * Copyright (C) 2013-2015 Sensnology AB - * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors - * - * Documentation: http://www.mysensors.org - * Support Forum: http://forum.mysensors.org - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 as published by the Free Software Foundation. - * - ******************************* - * - * REVISION HISTORY - * Version 1.0 - MrLynx - * - * DESCRIPTION - * MAX6875 High temperature sensor with range: -200 degC - +1300 degC - * http://forum.mysensors.org/topic/641/max6675 - * - * Connect MAX6675 - Arduino - * CS0 - 4 - * SO - 3 - * SCLK - 5 - * VCC - 5V - * GND - GND - * - */ - - -// Enable debug prints to serial monitor -#define MY_DEBUG - -// Enable and select radio type attached -#define MY_RADIO_NRF24 -//#define MY_RADIO_RFM69 - -#include -#include -#include - -uint8_t CS0 = 4; // CS pin on MAX6675 -uint8_t SO = 3; // SO pin of MAX6675 -uint8_t SCLK = 5; // SCK pin of MAX6675 -uint8_t units = 1; // Units to readout temp (0 = ËšF, 1 = ËšC) -float temperature = 0.0; // Temperature output variable -float lastTemperature; -unsigned long SLEEP_TIME = 30000; -boolean metric = true; - -MyMessage msg(0, V_TEMP); - -// Initialize the MAX6675 Library for our chip - -MAX6675 temp0(CS0, SO, SCLK, units); - -void presentation() { - // Send the sketch version information to the gateway and Controller - sendSketchInfo("Max6675 Temp Sensor", "1.0"); - - // Present all sensors to controller - present(0, S_TEMP); -} - -void loop() -{ - temperature = temp0.read_temp(); // Read the temp - - if (temperature < 0) { // If there is an error with the TC, temperature will be < 0 - Serial.println("Thermocouple Error!!"); // There is a thermocouple error - } else { - Serial.print("Current Temperature: "); - Serial.println( temperature ); // Print the temperature to Serial - if (temperature != lastTemperature) - send(msg.setSensor(0).set(temperature, 1)); - lastTemperature = temperature; - } - - sleep(SLEEP_TIME); -} diff --git a/libraries/MySensors/examples/OregonSensorDecode/OregonSensorDecode.ino b/libraries/MySensors/examples/OregonSensorDecode/OregonSensorDecode.ino deleted file mode 100644 index 4795526..0000000 --- a/libraries/MySensors/examples/OregonSensorDecode/OregonSensorDecode.ino +++ /dev/null @@ -1,126 +0,0 @@ -/** - * The MySensors Arduino library handles the wireless radio link and protocol - * between your home built sensors/actuators and HA controller of choice. - * The sensors forms a self healing radio network with optional repeaters. Each - * repeater and gateway builds a routing tables in EEPROM which keeps track of the - * network topology allowing messages to be routed to nodes. - * - * Created by Henrik Ekblad - * Copyright (C) 2013-2015 Sensnology AB - * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors - * - * Documentation: http://www.mysensors.org - * Support Forum: http://forum.mysensors.org - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 as published by the Free Software Foundation. - * - ******************************* - * - * REVISION HISTORY - * WARNING: I use MySensors V1.6.0 (dev branch) (https://github.com/mysensors/Arduino/tree/development/libraries) - * - * Version 1.0 - Hubert Mickael (https://github.com/Mickaelh51) - * - Clean ino code - * - Add MY_DEBUG mode in library - * Version 0.2 (Beta 2) - Hubert Mickael (https://github.com/Mickaelh51) - * - Auto detect Oregon 433Mhz - * - Add battery level - * - etc ... - * Version 0.1 (Beta 1) - Hubert Mickael (https://github.com/Mickaelh51) - * - ******************************* - * DESCRIPTION - * This sketch provides an example how to implement a humidity/temperature from Oregon sensor. - * - Oregon sensor's battery level - * - Oregon sensor's id - * - Oregon sensor's type - * - Oregon sensor's channel - * - Oregon sensor's temperature - * - Oregon sensor's humidity - * - * MySensors gateway <=======> Arduino UNO <-- (PIN 2) --> 433Mhz receiver <=============> Oregon sensors - */ - -// Enable debug prints -#define MY_DEBUG - -#define MY_NODE_ID 10 - -// Enable and select radio type attached -#define MY_RADIO_NRF24 -//#define MY_RADIO_RFM69 - -#include -#include -#include - -//Define pin where is 433Mhz receiver (here, pin 2) -#define MHZ_RECEIVER_PIN 2 -//Define maximum Oregon sensors (here, 3 differents sensors) -#define COUNT_OREGON_SENSORS 3 - -#define CHILD_ID_HUM 0 -#define CHILD_ID_TEMP 1 -#define CHILD_ID_BAT 2 - -MyMessage msgHum(CHILD_ID_HUM, V_HUM); -MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP); -MyMessage msgBat(CHILD_ID_BAT, V_VAR1); - -void setup () -{ - - Serial.println("Setup started"); - - //Setup received data - attachInterrupt(digitalPinToInterrupt(MHZ_RECEIVER_PIN), ext_int_1, CHANGE); - - Serial.println("Setup completed"); -} - -void presentation() -{ - // Send the Sketch Version Information to the Gateway - sendSketchInfo("Oregon Sensor", "1.0"); - - // Present all sensors to controller - for (int i=0; i - * Copyright (C) 2013-2015 Sensnology AB - * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors - * - * Documentation: http://www.mysensors.org - * Support Forum: http://forum.mysensors.org - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 as published by the Free Software Foundation. - * - ******************************* - * - * REVISION HISTORY - * Version 1.0 - Created by Henrik Ekblad - * - * DESCRIPTION - * Parking sensor using a neopixel led ring and distance sensor (HC-SR04). - * Configure the digital pins used for distance sensor and neopixels below. - * NOTE! Remeber to feed leds and distance sensor serparatly from your Arduino. - * It will probably not survive feeding more than a couple of LEDs. You - * can also adjust intesity below to reduce the power requirements. - * - * Sends parking status to the controller as a DOOR sensor if SEND_STATUS_TO_CONTROLLER - * is defined below. You can also use this _standalone_ without any radio by - * removing the SEND_STATUS_TO_CONTROLLER define. - */ - -#define SEND_STATUS_TO_CONTROLLER // Put a comment on this line for standalone mode - -#include -#include - -#ifdef SEND_STATUS_TO_CONTROLLER -// Enable debug prints to serial monitor -#define MY_DEBUG - -// Enable and select radio type attached -#define MY_RADIO_NRF24 -//#define MY_RADIO_RFM69 - -#include -#include -#endif - -#define NEO_PIN 4 // NeoPixels input pin - -#define TRIGGER_PIN 6 // Arduino pin tied to trigger pin on the ultrasonic sensor. -#define ECHO_PIN 5 // Arduino pin tied to echo pin on the ultrasonic sensor. - -#define NUMPIXELS 24 // Number of nexpixels in ring/strip -#define MAX_INTESITY 20 // Intesity of leds (in percentage). Remeber more intesity requires more power. - -// The maximum rated measuring range for the HC-SR04 is about 400-500cm. -#define MAX_DISTANCE 100 // Max distance we want to start indicating green (in cm) -#define PANIC_DISTANCE 5 // Mix distance we red warning indication should be active (in cm) -#define PARKED_DISTANCE 20 // Distance when "parked signal" should be sent to controller (in cm) - -#define PARK_OFF_TIMEOUT 20000 // Number of milliseconds until turning off light when parked. - -// Note that for older NeoPixel strips you might need to change the third parameter--see the strandtest -// example for more information on possible values. - -Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, NEO_PIN, NEO_GRB + NEO_KHZ800); - -NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance. - -#ifdef SEND_STATUS_TO_CONTROLLER -#define CHILD_ID 1 -MyMessage msg(CHILD_ID,V_TRIPPED); -#endif -unsigned long sendInterval = 5000; // Send park status at maximum every 5 second. -unsigned long lastSend; - -int oldParkedStatus=-1; - -unsigned long blinkInterval = 100; // blink interval (milliseconds) -unsigned long lastBlinkPeriod; -bool blinkColor = true; - -// To make a fading motion on the led ring/tape we only move one pixel/distDebounce time -unsigned long distDebounce = 30; -unsigned long lastDebouncePeriod; -int numLightPixels=0; -int skipZero=0; - -void setup() { - Serial.begin(115200); - Serial.println("Starting distance sensor"); - pixels.begin(); // This initializes the NeoPixel library. - Serial.println("Neopixels initialized"); -} - -#ifdef SEND_STATUS_TO_CONTROLLER -void presentation() { - sendSketchInfo("Parking Sensor", "1.0"); - present(CHILD_ID, S_DOOR, "Parking Status"); -} -#endif - -void loop() { - unsigned long now = millis(); - unsigned int fullDist = (sonar.ping_median() / US_ROUNDTRIP_CM); -// Serial.println(fullDist); - int displayDist = min(fullDist, MAX_DISTANCE); - if (displayDist == 0 && skipZero<10) { - // Try to filter zero readings - skipZero++; - return; - } - // Check if it is time to alter the leds - if (now-lastDebouncePeriod > distDebounce) { - lastDebouncePeriod = now; - - // Update parked status - int parked = displayDist != 0 && displayDist sendInterval) { - if (parked) - Serial.println("Car Parked"); - else - Serial.println("Car Gone"); -#ifdef SEND_STATUS_TO_CONTROLLER - send(msg.set(parked)); -#endif - oldParkedStatus = parked; - lastSend = now; - } - - if (parked && now-lastSend > PARK_OFF_TIMEOUT) { - // We've been parked for a while now. Turn off all pixels - for(int i=0;inumLightPixels) { - // Fast raise - numLightPixels += max((newLightPixels - numLightPixels) / 2, 1); - } else if (newLightPixels=NUMPIXELS) { - // Do some intense red blinking - if (now-lastBlinkPeriod > blinkInterval) { - blinkColor = !blinkColor; - lastBlinkPeriod = now; - } - for(int i=0;i - * Copyright (C) 2013-2015 Sensnology AB - * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors - * - * Documentation: http://www.mysensors.org - * Support Forum: http://forum.mysensors.org - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 as published by the Free Software Foundation. - * - ******************************* - * - * REVISION HISTORY - * Version 1.0 - Henrik Ekblad - * - * DESCRIPTION - * Pressure sensor example using BMP085 module - * http://www.mysensors.org/build/pressure - * - */ - -// Enable debug prints to serial monitor -#define MY_DEBUG - -// Enable and select radio type attached -#define MY_RADIO_NRF24 -//#define MY_RADIO_RFM69 - -#include -#include -#include -#include - -#define BARO_CHILD 0 -#define TEMP_CHILD 1 - -const float ALTITUDE = 688; // <-- adapt this value to your own location's altitude. - -// Sleep time between reads (in seconds). Do not change this value as the forecast algorithm needs a sample every minute. -const unsigned long SLEEP_TIME = 60000; - -const char *weather[] = { "stable", "sunny", "cloudy", "unstable", "thunderstorm", "unknown" }; -enum FORECAST -{ - STABLE = 0, // "Stable Weather Pattern" - SUNNY = 1, // "Slowly rising Good Weather", "Clear/Sunny " - CLOUDY = 2, // "Slowly falling L-Pressure ", "Cloudy/Rain " - UNSTABLE = 3, // "Quickly rising H-Press", "Not Stable" - THUNDERSTORM = 4, // "Quickly falling L-Press", "Thunderstorm" - UNKNOWN = 5 // "Unknown (More Time needed) -}; - -Adafruit_BMP085 bmp = Adafruit_BMP085(); // Digital Pressure Sensor - -float lastPressure = -1; -float lastTemp = -1; -int lastForecast = -1; - -const int LAST_SAMPLES_COUNT = 5; -float lastPressureSamples[LAST_SAMPLES_COUNT]; - -// this CONVERSION_FACTOR is used to convert from Pa to kPa in forecast algorithm -// get kPa/h be dividing hPa by 10 -#define CONVERSION_FACTOR (1.0/10.0) - -int minuteCount = 0; -bool firstRound = true; -// average value is used in forecast algorithm. -float pressureAvg; -// average after 2 hours is used as reference value for the next iteration. -float pressureAvg2; - -float dP_dt; -boolean metric; -MyMessage tempMsg(TEMP_CHILD, V_TEMP); -MyMessage pressureMsg(BARO_CHILD, V_PRESSURE); -MyMessage forecastMsg(BARO_CHILD, V_FORECAST); - - -void setup() -{ - if (!bmp.begin()) - { - Serial.println("Could not find a valid BMP085 sensor, check wiring!"); - while (1) {} - } - metric = getConfig().isMetric; -} - -void presentation() { - // Send the sketch version information to the gateway and Controller - sendSketchInfo("Pressure Sensor", "1.1"); - - // Register sensors to gw (they will be created as child devices) - present(BARO_CHILD, S_BARO); - present(TEMP_CHILD, S_TEMP); -} - -void loop() -{ - float pressure = bmp.readSealevelPressure(ALTITUDE) / 100.0; - float temperature = bmp.readTemperature(); - - if (!metric) - { - // Convert to fahrenheit - temperature = temperature * 9.0 / 5.0 + 32.0; - } - - int forecast = sample(pressure); - - Serial.print("Temperature = "); - Serial.print(temperature); - Serial.println(metric ? " *C" : " *F"); - Serial.print("Pressure = "); - Serial.print(pressure); - Serial.println(" hPa"); - Serial.print("Forecast = "); - Serial.println(weather[forecast]); - - - if (temperature != lastTemp) - { - send(tempMsg.set(temperature, 1)); - lastTemp = temperature; - } - - if (pressure != lastPressure) - { - send(pressureMsg.set(pressure, 0)); - lastPressure = pressure; - } - - if (forecast != lastForecast) - { - send(forecastMsg.set(weather[forecast])); - lastForecast = forecast; - } - - sleep(SLEEP_TIME); -} - -float getLastPressureSamplesAverage() -{ - float lastPressureSamplesAverage = 0; - for (int i = 0; i < LAST_SAMPLES_COUNT; i++) - { - lastPressureSamplesAverage += lastPressureSamples[i]; - } - lastPressureSamplesAverage /= LAST_SAMPLES_COUNT; - - return lastPressureSamplesAverage; -} - - - -// Algorithm found here -// http://www.freescale.com/files/sensors/doc/app_note/AN3914.pdf -// Pressure in hPa --> forecast done by calculating kPa/h -int sample(float pressure) -{ - // Calculate the average of the last n minutes. - int index = minuteCount % LAST_SAMPLES_COUNT; - lastPressureSamples[index] = pressure; - - minuteCount++; - if (minuteCount > 185) - { - minuteCount = 6; - } - - if (minuteCount == 5) - { - pressureAvg = getLastPressureSamplesAverage(); - } - else if (minuteCount == 35) - { - float lastPressureAvg = getLastPressureSamplesAverage(); - float change = (lastPressureAvg - pressureAvg) * CONVERSION_FACTOR; - if (firstRound) // first time initial 3 hour - { - dP_dt = change * 2; // note this is for t = 0.5hour - } - else - { - dP_dt = change / 1.5; // divide by 1.5 as this is the difference in time from 0 value. - } - } - else if (minuteCount == 65) - { - float lastPressureAvg = getLastPressureSamplesAverage(); - float change = (lastPressureAvg - pressureAvg) * CONVERSION_FACTOR; - if (firstRound) //first time initial 3 hour - { - dP_dt = change; //note this is for t = 1 hour - } - else - { - dP_dt = change / 2; //divide by 2 as this is the difference in time from 0 value - } - } - else if (minuteCount == 95) - { - float lastPressureAvg = getLastPressureSamplesAverage(); - float change = (lastPressureAvg - pressureAvg) * CONVERSION_FACTOR; - if (firstRound) // first time initial 3 hour - { - dP_dt = change / 1.5; // note this is for t = 1.5 hour - } - else - { - dP_dt = change / 2.5; // divide by 2.5 as this is the difference in time from 0 value - } - } - else if (minuteCount == 125) - { - float lastPressureAvg = getLastPressureSamplesAverage(); - pressureAvg2 = lastPressureAvg; // store for later use. - float change = (lastPressureAvg - pressureAvg) * CONVERSION_FACTOR; - if (firstRound) // first time initial 3 hour - { - dP_dt = change / 2; // note this is for t = 2 hour - } - else - { - dP_dt = change / 3; // divide by 3 as this is the difference in time from 0 value - } - } - else if (minuteCount == 155) - { - float lastPressureAvg = getLastPressureSamplesAverage(); - float change = (lastPressureAvg - pressureAvg) * CONVERSION_FACTOR; - if (firstRound) // first time initial 3 hour - { - dP_dt = change / 2.5; // note this is for t = 2.5 hour - } - else - { - dP_dt = change / 3.5; // divide by 3.5 as this is the difference in time from 0 value - } - } - else if (minuteCount == 185) - { - float lastPressureAvg = getLastPressureSamplesAverage(); - float change = (lastPressureAvg - pressureAvg) * CONVERSION_FACTOR; - if (firstRound) // first time initial 3 hour - { - dP_dt = change / 3; // note this is for t = 3 hour - } - else - { - dP_dt = change / 4; // divide by 4 as this is the difference in time from 0 value - } - pressureAvg = pressureAvg2; // Equating the pressure at 0 to the pressure at 2 hour after 3 hours have past. - firstRound = false; // flag to let you know that this is on the past 3 hour mark. Initialized to 0 outside main loop. - } - - int forecast = UNKNOWN; - if (minuteCount < 35 && firstRound) //if time is less than 35 min on the first 3 hour interval. - { - forecast = UNKNOWN; - } - else if (dP_dt < (-0.25)) - { - forecast = THUNDERSTORM; - } - else if (dP_dt > 0.25) - { - forecast = UNSTABLE; - } - else if ((dP_dt > (-0.25)) && (dP_dt < (-0.05))) - { - forecast = CLOUDY; - } - else if ((dP_dt > 0.05) && (dP_dt < 0.25)) - { - forecast = SUNNY; - } - else if ((dP_dt >(-0.05)) && (dP_dt < 0.05)) - { - forecast = STABLE; - } - else - { - forecast = UNKNOWN; - } - - // uncomment when debugging - //Serial.print(F("Forecast at minute ")); - //Serial.print(minuteCount); - //Serial.print(F(" dP/dt = ")); - //Serial.print(dP_dt); - //Serial.print(F("kPa/h --> ")); - //Serial.println(weather[forecast]); - - return forecast; -} diff --git a/libraries/MySensors/examples/RF433MhzSensor/RF433MhzSensor.ino b/libraries/MySensors/examples/RF433MhzSensor/RF433MhzSensor.ino deleted file mode 100644 index ec21834..0000000 --- a/libraries/MySensors/examples/RF433MhzSensor/RF433MhzSensor.ino +++ /dev/null @@ -1,139 +0,0 @@ -/** - * The MySensors Arduino library handles the wireless radio link and protocol - * between your home built sensors/actuators and HA controller of choice. - * The sensors forms a self healing radio network with optional repeaters. Each - * repeater and gateway builds a routing tables in EEPROM which keeps track of the - * network topology allowing messages to be routed to nodes. - * - * Created by Henrik Ekblad - * Copyright (C) 2013-2015 Sensnology AB - * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors - * - * Documentation: http://www.mysensors.org - * Support Forum: http://forum.mysensors.org - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 as published by the Free Software Foundation. - * - ******************************* - * - * REVISION HISTORY - * Version 1.0 - Henrik Ekblad - * - * DESCRIPTION - * This sketch demonstrates how to use InterruptChain to receive and - * decode remote switches (old and new) and remote sensors. - * - * Basically, this sketch combines the features of the ShowReceivedCode - * and ShowReceivedCodeNewKaku examples of RemoteSwitch and the - * ThermoHygroReceiver of RemoteSensor all at the same time! - * - * After uploading, enable the serial monitor at 115200 baud. - * When you press buttons on a 433MHz remote control, as supported by - * RemoteSwitch or NewRemoteSwitch, the code will be echoed. - * At the same time, if data of a remote thermo/hygro-sensor is - * received, as supported by RemoteSensor, it will be echoed as well. - * - * Setup: - * - connect a 433MHz receiver on digital pin 2. - * - * MySensor note: This example has not yet been adopted but can be used as an example - * of receiving 433Mhz stuff. - * - * One idea could be to echo received 433 codes back to gateway to be able to pick up and - * handle data over there. - * - */ - -#include -#include -#include -#include - -void setup() { - Serial.begin(115200); - - // Interrupt -1 to indicate you will call the interrupt handler with InterruptChain - RemoteReceiver::init(-1, 2, showOldCode); - - // Again, interrupt -1 to indicate you will call the interrupt handler with InterruptChain - NewRemoteReceiver::init(-1, 2, showNewCode); - - // And once more, interrupt -1 to indicate you will call the interrupt handler with InterruptChain - SensorReceiver::init(-1, showTempHumi); - - // On interrupt, call the interrupt handlers of remote and sensor receivers - InterruptChain::addInterruptCallback(0, RemoteReceiver::interruptHandler); - InterruptChain::addInterruptCallback(0, NewRemoteReceiver::interruptHandler); - InterruptChain::addInterruptCallback(0, SensorReceiver::interruptHandler); -} - -void loop() { - // You can do other stuff here! -} - -// shows the received code sent from an old-style remote switch -void showOldCode(unsigned long receivedCode, unsigned int period) { - // Print the received code. - Serial.print("Code: "); - Serial.print(receivedCode); - Serial.print(", period: "); - Serial.print(period); - Serial.println("us."); -} - -// Shows the received code sent from an new-style remote switch -void showNewCode(NewRemoteCode receivedCode) { - // Print the received code. - Serial.print("Addr "); - Serial.print(receivedCode.address); - - if (receivedCode.groupBit) { - Serial.print(" group"); - } else { - Serial.print(" unit "); - Serial.print(receivedCode.unit); - } - - switch (receivedCode.switchType) { - case NewRemoteCode::off: - Serial.print(" off"); - break; - case NewRemoteCode::on: - Serial.print(" on"); - break; - case NewRemoteCode::dim: - Serial.print(" dim level "); - Serial.print(receivedCode.dimLevel); - break; - case NewRemoteCode::on_with_dim: - Serial.print(" on with dim level "); - Serial.print(receivedCode.dimLevel); - break; - } - - Serial.print(", period: "); - Serial.print(receivedCode.period); - Serial.println("us."); -} - -// Shows the received sensor data -void showTempHumi(byte *data) { - // is data a ThermoHygro-device? - if ((data[3] & 0x1f) == 0x1e) { - // Yes! - byte channel, randomId; - int temp; - byte humidity; - - // Decode the data - SensorReceiver::decodeThermoHygro(data, channel, randomId, temp, humidity); - - // Print temperature. Note: temp is 10x the actual temperature! - Serial.print("Temperature: "); - Serial.print(temp / 10); // units - Serial.print('.'); - Serial.println(temp % 10); // decimal - } -} diff --git a/libraries/MySensors/examples/RFIDLockSensor/RFIDLockSensor.ino b/libraries/MySensors/examples/RFIDLockSensor/RFIDLockSensor.ino deleted file mode 100644 index d705c5c..0000000 --- a/libraries/MySensors/examples/RFIDLockSensor/RFIDLockSensor.ino +++ /dev/null @@ -1,184 +0,0 @@ -/** - * The MySensors Arduino library handles the wireless radio link and protocol - * between your home built sensors/actuators and HA controller of choice. - * The sensors forms a self healing radio network with optional repeaters. Each - * repeater and gateway builds a routing tables in EEPROM which keeps track of the - * network topology allowing messages to be routed to nodes. - * - * Created by Henrik Ekblad - * Copyright (C) 2013-2015 Sensnology AB - * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors - * - * Documentation: http://www.mysensors.org - * Support Forum: http://forum.mysensors.org - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 as published by the Free Software Foundation. - * - ******************************* - * - * REVISION HISTORY - * Version 1.0 - Henrik Ekblad - * - * DESCRIPTION - * RFID Lock sensor/actuator - * - * Use RFID tag to lock/unlock a door or trigger a scene on your controller. - * This example sketch allows you to add an optional relay or solenoid - * which can be activated/opened by RFID or controller. - * - * Use the I2C wiring option for your RFID module and connect to the following Arduino pins. - * - * RFID Arduino - * ----- ------- - * GND -> GND - * VCC -> +5V - * SCL -> A5 - * SDA -> A4 - * - * Use normal wiring for NRF24L01 radio - * - * Attach a optional relay or solonoid lock to pin 4 - * http://www.mysensors.org/build/rfid - */ - -// Enable debug prints to serial monitor -#define MY_DEBUG - -// Enable and select radio type attached -#define MY_RADIO_NRF24 -//#define MY_RADIO_RFM69 - -#include -#include -#include -#include -#include - - -// Add your valid rfid keys here. To find you your key just run sketch; hold your new RFID tag in fron ot the reader; -// and copy the key from serial output of this sketch. -const uint8_t maxKeyLength = 7; -uint8_t validKeys[][maxKeyLength] = { - { 0xB3, 0xC6, 0xD9, 0x80, 0x00, 0x00, 0x00 }, - { 0, 0, 0, 0, 0, 0, 0 }, // ADD YOUR KEYS HERE! - { 0, 0, 0, 0, 0, 0, 0 }}; -int keyCount = sizeof validKeys / maxKeyLength; - - -#define CHILD_ID 99 // Id of the sensor child - -// Pin definition -const int lockPin = 4; // (Digital 4) The pin that activates the relay/solenoid lock. -bool lockStatus; -MyMessage lockMsg(CHILD_ID, V_LOCK_STATUS); -PN532_I2C pn532i2c(Wire); -PN532 nfc(pn532i2c); - -void setup() { - - pinMode(lockPin, OUTPUT); - - nfc.begin(); - uint32_t versiondata = nfc.getFirmwareVersion(); - if (! versiondata) { - Serial.print("Couldn't find PN53x board"); - while (1); // halt - } - Serial.print("Found NFC chip PN5"); Serial.println((versiondata>>24) & 0xFF, HEX); - Serial.print("Firmware ver. "); Serial.print((versiondata>>16) & 0xFF, DEC); - Serial.print('.'); Serial.println((versiondata>>8) & 0xFF, DEC); - // Set the max number of retry attempts to read from a card - // This prevents us from waiting forever for a card, which is - // the default behaviour of the PN532. - nfc.setPassiveActivationRetries(0x3); - - // configure board to read RFID tags - nfc.SAMConfig(); - - lockStatus = loadState(0); // Read last lock status from eeprom - setLockState(lockStatus, true); // Now set the last known state and send it to controller -} - -void presentation() { - sendSketchInfo("RFID Lock", "1.0"); - present(CHILD_ID, S_LOCK); -} - -void loop() { - boolean success; - uint8_t key[] = { 0, 0, 0, 0, 0, 0, 0 }; // Buffer to store the returned UID - uint8_t currentKeyLength; // Length of the UID (4 or 7 bytes depending on ISO14443A card type) - - - // Wait for an ISO14443A type cards (Mifare, etc.). When one is found - // 'uid' will be populated with the UID, and uidLength will indicate - // if the uid is 4 bytes (Mifare Classic) or 7 bytes (Mifare Ultralight) - success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, &key[0], ¤tKeyLength); - - if (success) { - Serial.print("Found tag id: "); - for (uint8_t i=0; i < currentKeyLength; i++) - { - if (i>0) Serial.print(","); - Serial.print("0x");Serial.print(key[i], HEX); - } - for (uint8_t i=currentKeyLength; i < maxKeyLength; i++) - { - Serial.print(",0x00"); - } - - - Serial.println(""); - - boolean valid = false; - // Compare this key to the valid once registered here in sketch - for (int i=0;i - * Copyright (C) 2013-2015 Sensnology AB - * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors - * - * Documentation: http://www.mysensors.org - * Support Forum: http://forum.mysensors.org - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 as published by the Free Software Foundation. - * - ******************************* - * - * REVISION HISTORY - * Version 1.0 - Created by vil1driver - * - * DESCRIPTION - * RGB led strip controled with three dimmers + one On/Off for run/stop rgb color cycle :p - * - */ - -#define SN "RGB Led strip 3D" -#define SV "v1" - -// Enable debug prints to serial monitor -#define MY_DEBUG - -// Enable and select radio type attached -#define MY_RADIO_NRF24 -//#define MY_RADIO_RFM69 - -#include -#include - -// Arduino pin attached to MOSFET Gate pin -#define RED_PIN 3 -#define GREEN_PIN 5 -#define BLUE_PIN 6 - -// Define message name and type to send sensor info -MyMessage RedStatus(RED_PIN, V_DIMMER); -MyMessage GreenStatus(GREEN_PIN, V_DIMMER); -MyMessage BlueStatus(BLUE_PIN, V_DIMMER); -MyMessage Status(1, V_DIMMER); -MyMessage rgbShowState(0, V_LIGHT); - -// Serial.print translate sensor id to sensor name -char color[][6] = {"","","","RED","","GREEN","BLUE"}; - -// Vars for rgbShow function -int redval = 0; -int greenval = 0; -int blueval = 0; -long time=0; -int isShow; - -void setup() -{ - // Define pin mode (pin number, type) - pinMode(RED_PIN, OUTPUT); - pinMode(GREEN_PIN, OUTPUT); - pinMode(BLUE_PIN, OUTPUT); - - // Correct saved RGB value for first start - saveState(RED_PIN, constrain((int8_t)loadState(RED_PIN), 0, 100)); - saveState(GREEN_PIN, constrain((int8_t)loadState(GREEN_PIN), 0, 100)); - saveState(BLUE_PIN, constrain((int8_t)loadState(BLUE_PIN), 0, 100)); - - // Get value from eeprom and write to output - analogWrite(RED_PIN, 255 * loadState(RED_PIN) / 100); - analogWrite(GREEN_PIN, 255 * loadState(GREEN_PIN) / 100); - analogWrite(BLUE_PIN, 255 * loadState(BLUE_PIN) / 100); - - // Write some debug info - Serial.print("Load from eeprom RED: "); - Serial.print(loadState(RED_PIN)); - Serial.println("%"); - Serial.print("Load from eeprom GREEN: "); - Serial.print(loadState(GREEN_PIN)); - Serial.println("%"); - Serial.print("Load from eeprom BLUE: "); - Serial.print(loadState(BLUE_PIN)); - Serial.println("%"); - - // Send RGB value to controler (request ack back: true/false) - Serial.println("Send eeprom value to controler"); - send( RedStatus.set(loadState(RED_PIN)), false ); - send( GreenStatus.set(loadState(GREEN_PIN)), false ); - send( BlueStatus.set(loadState(BLUE_PIN)), false ); - - // Correct RGB show state for first start and load it (set to 'On' at first start) - saveState(0, constrain((int8_t)loadState(0), 0, 1)); - isShow=loadState(0); - - // Send RGB show state to controler (request ack back: true/false) - send( rgbShowState.set(isShow), false); - - if (isShow==1){Serial.println("RGB show running..."); } - Serial.println("Ready to receive messages..."); -} - -void presentation() { - // Present sketch (name, version) - sendSketchInfo(SN, SV); - - // Register sensors (id, type, description, ack back) - present(RED_PIN, S_DIMMER, "present RED light", false); - present(GREEN_PIN, S_DIMMER, "present GREEN light", false); - present(BLUE_PIN, S_DIMMER, "present BLUE light", false); - present(0, S_LIGHT, "present Show button", false); -} - -void loop() -{ - // Run RGB show if is set - if (isShow==1) - { - rgbShow(); - analogWrite(RED_PIN, redval); - analogWrite(GREEN_PIN, greenval); - analogWrite(BLUE_PIN, blueval); - } -} - - -void receive(const MyMessage &message) -{ - if (message.isAck()) - { - Serial.println("Got ack from gateway"); - } - if (message.type == V_LIGHT) - { - // Incoming on/off command sent from controller ("1" or "0") - int lightState = message.getString()[0] == '1'; - - // if receive RGB Show On commands, start the show - if (message.sensor==0 && lightState==1){ rgbShowOn(); } - // if receive RGB Show Off commands, stop the show - else if (message.sensor==0 && lightState==0){ rgbShowOff(); } - - // if receive RGB switch On command - else if (lightState==1) - { - // Write some debug info - Serial.print("Incoming change for "); - Serial.print(color[message.sensor]); - Serial.println(": On"); - Serial.print("Load from eeprom: "); - - if ( loadState(message.sensor) == 0) - { - // Pick up last saved dimmer level from the eeprom - analogWrite(message.sensor, 255 * loadState(10*message.sensor) / 100); - // Save loaded value to current - saveState(message.sensor, loadState(10*message.sensor)); - Serial.print(loadState(10*message.sensor)); - Serial.println("%"); - // Send value to controler - Serial.println("Send value to controler"); - send(Status.setSensor(message.sensor).set(loadState(10*message.sensor)),false); - } - else - { - // Pick up last saved dimmer level from the eeprom - analogWrite(message.sensor, 255 * loadState(message.sensor) / 100); - Serial.print(loadState(message.sensor)); - Serial.println("%"); - // Send value to controler - Serial.println("Send value to controler"); - send(Status.setSensor(message.sensor).set(loadState(message.sensor)),false); - } - // Stop the show if it's running - if (isShow==1){ rgbShowStop(message.sensor); } - } - // if recieve switch Off command - else if (lightState==0) - { - // Write output to 0 (Off) - analogWrite(message.sensor, 0); - // Save old value to eeprom if it'was not zero - if ( loadState(message.sensor) != 0 ) - { - saveState(10*message.sensor, constrain((int8_t)loadState(message.sensor), 0, 100)); - } - // Save new value to eeprom - saveState(message.sensor, 0); - // Write some debug info - Serial.print("Incoming change for "); - Serial.print(color[message.sensor]); - Serial.print(": "); - Serial.println("Off"); - Serial.print("Store old value: "); - Serial.print(loadState(10*message.sensor)); - Serial.println("%"); - // Send value to controler - Serial.println("Send value to controler"); - send(Status.setSensor(message.sensor).set(loadState(message.sensor)),false); - // Stop the show if it's running - if (isShow==1){ rgbShowStop(message.sensor); } - } - } - else if (message.type == V_DIMMER) - { - uint8_t incomingDimmerStatus = message.getByte(); - // limits range of sensor values to between 0 and 100 - incomingDimmerStatus = constrain((int8_t)incomingDimmerStatus, 0, 100); - // Change Dimmer level - analogWrite(message.sensor, 255 * incomingDimmerStatus / 100); - //Save value to eeprom - saveState(message.sensor, incomingDimmerStatus); - // Write some debug info - Serial.print("Incoming change for "); - Serial.print(color[message.sensor]); - Serial.print(": "); - Serial.print(incomingDimmerStatus); - Serial.println("%"); - // Send value to controler - Serial.println("Send value to controler"); - send(Status.setSensor(message.sensor).set(loadState(message.sensor)),false); - // Stop the show if it's running - if (isShow==1){ rgbShowStop(message.sensor); } - } -} - -void rgbShow() -{ - time = millis(); - redval = 128+250*cos(2*PI/300000*time); - greenval = 128+250*cos(2*PI/300000*time-222); - blueval = 128+250*cos(2*PI/300000*time-111); - // limits range of sensor values to between 0 and 255 - redval = constrain(redval, 0, 255); - greenval = constrain(greenval, 0, 255); - blueval = constrain(blueval, 0, 255); -} - -void rgbShowOn() -{ - // define show On - isShow=1; - // Save state - saveState(0, 1); - // Write some debug info - Serial.println("Show must go on"); -} - -void rgbShowOff() -{ - // define show Off - isShow=0; - // Save state - saveState(0, 0); - // Save RGB value to eeprom - saveState(RED_PIN, 100 * redval / 255); - saveState(GREEN_PIN, 100 * greenval / 255); - saveState(BLUE_PIN, 100 * blueval / 255); - // Write some debug info - Serial.println("Stop the show"); - // Send actual RGB value and state to controler and request ack back (true/false) - Serial.println("Send eeprom value to controler"); - send( RedStatus.set(loadState(RED_PIN)), false ); - send( GreenStatus.set(loadState(GREEN_PIN)), false ); - send( BlueStatus.set(loadState(BLUE_PIN)), false ); - send( rgbShowState.set(0), false); -} - -void rgbShowStop(int sensor) -{ - // define show Off - isShow=0; - // Save state - saveState(0, 0); - // Write some debug info - Serial.println("Stop the show"); - // Send actual RGB value and state to controler and request ack back (true/false) - Serial.println("Send eeprom value to controler"); - if (sensor != RED_PIN) - { - saveState(RED_PIN, 100 * redval / 255); - send( RedStatus.set(loadState(RED_PIN)), false ); - } - if (sensor != GREEN_PIN) - { - saveState(GREEN_PIN, 100 * greenval / 255); - send( GreenStatus.set(loadState(GREEN_PIN)), false ); - } - if (sensor != BLUE_PIN) - { - saveState(BLUE_PIN, 100 * blueval / 255); - send( BlueStatus.set(loadState(BLUE_PIN)), false ); - } - send( rgbShowState.set(0), false); -} - - - diff --git a/libraries/MySensors/examples/RainGauge/RainGauge.ino b/libraries/MySensors/examples/RainGauge/RainGauge.ino deleted file mode 100644 index aa38f4a..0000000 --- a/libraries/MySensors/examples/RainGauge/RainGauge.ino +++ /dev/null @@ -1,609 +0,0 @@ -/* - Arduino Tipping Bucket Rain Gauge - - April 26, 2015 - - Version 1.4.1 alpha - - Arduino Tipping Bucket Rain Gauge - - Utilizing a tipping bucket sensor, your Vera home automation controller and the MySensors.org - gateway you can measure and sense local rain. This sketch will create two devices on your - Vera controller. One will display your total precipitation for the last 5 days. The other, - a sensor that changes state if there is recent rain (up to last 120 hours) above a threshold. - Both these settings are user definable. - - There is a build overview video here: https://youtu.be/1eMfKQaLROo - - This sketch features the following: - - * Allows you to set the rain threshold in mm - * Allows you to determine the tripped indicator window up to 120 hours. - * Displays the last 5 days of rain in Variable1 through Variable5 - of the Rain Sensor device - * Configuration changes to Sensor device updated every hour - * Should run on any Arduino - * Will retain Tripped/Not Tripped status and data in a power interruption, saving small amount - of data to EEPROM (Circular Buffer to maximize life of EEPROM) - * LED status indicator - * Optional Temp/Humidity (DHT-22 or DHT-11) and Light LUX (BH1750) sensors. To use, uncomment - #define DHT_ON and/or #define LUX_ON - * Optionally send total accumulation of each day's rainfall or send only individual days rainfall totals. - Comment out #define USE_DAILY to display individual daily rainfall. - - by @BulldogLowell and @PeteWill for free public use - - */ - -// Enable debug prints to serial monitor -#define MY_DEBUG - -// Enable and select radio type attached -#define MY_RADIO_NRF24 -//#define MY_RADIO_RFM69 - -//#define MY_NODE_ID 7 - -#include -#include -#include -#include - -#define SKETCH_NAME "Rain Gauge" -#define SKETCH_VERSION "1.4.1a" - -#define DWELL_TIME 125 // this allows for radio to come back to power after a transmission, ideally 0 - -//#define DEBUG_ON // comment out this line to disable serial debug -#define DHT_ON // uncomment out this line to enable DHT sensor -#define LUX_ON // uncomment out this line to enable BH1750 sensor -//#define USE_DAILY // displays each time segment as an accumulation of prior periods inclusive. Comment out to display individual daily rainfall totals in the variables sent to your controller. - -#define TIP_SENSOR_PIN 3 - -#define CALIBRATE_FACTOR 60 // amount of rain per rain bucket tip e.g. 5 is .05mm -#define DHT_LUX_DELAY 300000 //Delay in milliseconds that the DHT and LUX sensors will wait before sending data - -#define CHILD_ID_RAIN_LOG 3 // Keeps track of accumulated rainfall -#define CHILD_ID_TRIPPED_INDICATOR 4 // Indicates Tripped when rain detected -#define EEPROM_BUFFER_LOCATION 0 // location of the EEPROM circular buffer -#define E_BUFFER_LENGTH 240 -#define RAIN_BUCKET_SIZE 120 - -#ifdef DEBUG_ON - #define DEBUG_PRINT(x) Serial.print(x) - #define DEBUG_PRINTLN(x) Serial.println(x) - #define SERIAL_START(x) Serial.begin(x) - #else - #define DEBUG_PRINT(x) - #define DEBUG_PRINTLN(x) - #define SERIAL_START(x) -#endif -// -MyMessage msgRainRate(CHILD_ID_RAIN_LOG, V_RAINRATE); -MyMessage msgRain(CHILD_ID_RAIN_LOG, V_RAIN); -// -MyMessage msgRainVAR1(CHILD_ID_RAIN_LOG, V_VAR1); -MyMessage msgRainVAR2(CHILD_ID_RAIN_LOG, V_VAR2); -MyMessage msgRainVAR3(CHILD_ID_RAIN_LOG, V_VAR3); -MyMessage msgRainVAR4(CHILD_ID_RAIN_LOG, V_VAR4); -MyMessage msgRainVAR5(CHILD_ID_RAIN_LOG, V_VAR5); -// -MyMessage msgTripped(CHILD_ID_TRIPPED_INDICATOR, V_TRIPPED); -MyMessage msgTrippedVar1(CHILD_ID_TRIPPED_INDICATOR, V_VAR1); -MyMessage msgTrippedVar2(CHILD_ID_TRIPPED_INDICATOR, V_VAR2); -// -#ifdef DHT_ON - #include - #define CHILD_ID_HUM 0 - #define CHILD_ID_TEMP 1 - #define HUMIDITY_SENSOR_DIGITAL_PIN 8 - DHT dht; - float lastTemp; - float lastHum; - boolean metric = true; - MyMessage msgHum(CHILD_ID_HUM, V_HUM); - MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP); -#endif -// -#ifdef LUX_ON - //BH1750 is connected to SCL (analog input A5) and SDA (analog input A4) - #include - #include - #define CHILD_ID_LIGHT 2 - BH1750 lightSensor; - MyMessage msg(CHILD_ID_LIGHT, V_LIGHT_LEVEL); - unsigned int lastlux; - byte heartbeat = 10; //Used to send the light lux to gateway as soon as the device is restarted and after the DHT_LUX_DELAY has happened 10 times -#endif -unsigned long sensorPreviousMillis; -int eepromIndex; -int ledPin = 5; // Pin the LED is connected to. PWM capable pin required -unsigned long dataMillis; -unsigned long serialInterval = 600000UL; -const unsigned long oneHour = 3600000UL; -unsigned long lastTipTime; -unsigned long lastRainTime; //Used for rainRate calculation -unsigned int rainBucket [RAIN_BUCKET_SIZE] ; /* 24 hours x 5 Days = 120 hours */ -unsigned int rainRate = 0; -byte rainWindow = 72; //default rain window in hours. Will be overwritten with msgTrippedVar1. -volatile int wasTippedBuffer = 0; -int rainSensorThreshold = 50; //default rain sensor sensitivity in hundredths. Will be overwritten with msgTrippedVar2. -byte state = 0; -byte oldState = -1; -unsigned int lastRainRate = 0; -int lastMeasure = 0; -boolean gotTime = false; -byte lastHour; -byte currentHour; -// -void setup() -{ - SERIAL_START(115200); - // - // Set up the IO - pinMode(TIP_SENSOR_PIN, INPUT_PULLUP); - attachInterrupt (digitalPinToInterrupt(TIP_SENSOR_PIN), sensorTipped, FALLING); // depending on location of the hall effect sensor may need CHANGE - pinMode(ledPin, OUTPUT); - digitalWrite(ledPin, HIGH); - // - //Sync time with the server, this will be called hourly in order to keep time from creeping with the crystal - // - unsigned long functionTimeout = millis(); - while (timeStatus() == timeNotSet && millis() - functionTimeout < 30000UL) - { - requestTime(); - DEBUG_PRINTLN(F("Getting Time")); - wait(1000); // call once per second - DEBUG_PRINTLN(F(".")); - } - currentHour = hour(); - lastHour = hour(); - // - //retrieve from EEPROM stored values on a power cycle. - // - boolean isDataOnEeprom = false; - for (int i = 0; i < E_BUFFER_LENGTH; i++) - { - byte locator = loadState(EEPROM_BUFFER_LOCATION + i); - if (locator == 0xFE) // found the EEPROM circular buffer index - { - eepromIndex = EEPROM_BUFFER_LOCATION + i; - DEBUG_PRINT(F("EEPROM Index ")); - DEBUG_PRINTLN(eepromIndex); - //Now that we have the buffer index let's populate the rainBucket[] with data from eeprom - loadRainArray(eepromIndex); - isDataOnEeprom = true; - break; - } - } - // - if (!isDataOnEeprom) // Added for the first time it is run on a new Arduino - { - DEBUG_PRINTLN(F("I didn't find valid EEPROM Index, so I'm writing one to location 0")); - eepromIndex = EEPROM_BUFFER_LOCATION; - saveState(eepromIndex, 0xFE); - saveState(eepromIndex + 1, 0xFE); - //then I will clear out any bad data - for (int i = 2; i <= E_BUFFER_LENGTH; i++) - { - saveState(i, 0x00); - } - } - dataMillis = millis(); - lastTipTime = millis() - oneHour; //why is this -oneHour?? Doesn't millis() start at 0 when first powered on? - // - request(CHILD_ID_TRIPPED_INDICATOR, V_VAR1); - wait(DWELL_TIME); - request(CHILD_ID_TRIPPED_INDICATOR, V_VAR2); - wait(DWELL_TIME); - // -#ifdef DHT_ON - dht.setup(HUMIDITY_SENSOR_DIGITAL_PIN); - wait(DWELL_TIME); - metric = getConfig().isMetric; -#endif - // -#ifdef LUX_ON - wait(DWELL_TIME); - lightSensor.begin(); -#endif - // - DEBUG_PRINTLN(F("Radio Setup Complete!")); - transmitRainData(); -} - - -void presentation() { - // Register all sensors to gw (they will be created as child devices) - sendSketchInfo(SKETCH_NAME, SKETCH_VERSION); - wait(DWELL_TIME); - present(CHILD_ID_RAIN_LOG, S_RAIN); - wait(DWELL_TIME); - present(CHILD_ID_TRIPPED_INDICATOR, S_MOTION); - wait(DWELL_TIME); - -#ifdef DHT_ON - present(CHILD_ID_HUM, S_HUM); - wait(DWELL_TIME); - present(CHILD_ID_TEMP, S_TEMP); - wait(DWELL_TIME); -#endif - - -#ifdef LUX_ON - present(CHILD_ID_LIGHT, S_LIGHT_LEVEL); -#endif - - DEBUG_PRINTLN(F("Sensor Presentation Complete")); -} - -void loop() -{ - if (state) - { - prettyFade(); // breathe if tripped - } - else - { - slowFlash(); // blink if not tripped - } -#ifdef DEBUG_ON // Serial Debug Block - if ( (millis() - dataMillis) >= serialInterval) - { - for (int i = 24; i <= 120; i = i + 24) - { - updateSerialData(i); - } - dataMillis = millis(); - } -#endif - // - // let's constantly check to see if the rain in the past rainWindow hours is greater than rainSensorThreshold - // - int measure = 0; // Check to see if we need to show sensor tripped in this block - for (int i = 0; i < rainWindow; i++) - { - measure += rainBucket [i]; - if (measure != lastMeasure) - { - // DEBUG_PRINT(F("measure value (total rainBucket within rainWindow): ")); - // DEBUG_PRINTLN(measure); - lastMeasure = measure; - } - } - // - state = (measure >= (rainSensorThreshold * 100)); - if (state != oldState) - { - send(msgTripped.set(state)); - wait(DWELL_TIME); - DEBUG_PRINT(F("New Sensor State... Sensor: ")); - DEBUG_PRINTLN(state ? "Tripped" : "Not Tripped"); - oldState = state; - } - // - unsigned long tipDelay = millis() - lastRainTime; - if (wasTippedBuffer) // if was tipped, then update the 24hour total and transmit to Vera - { - DEBUG_PRINTLN(F("Sensor Tipped")); - DEBUG_PRINT(F("rainBucket [0] value: ")); - DEBUG_PRINTLN(rainBucket [0]); - send(msgRain.set((float)rainTotal(currentHour) / 100, 1)); //Calculate the total rain for the day - wait(DWELL_TIME); - wasTippedBuffer--; - rainRate = ((oneHour) / tipDelay); - if (rainRate != lastRainRate) - { - send(msgRainRate.set(rainRate, 1)); - wait(DWELL_TIME); - DEBUG_PRINT(F("RainRate= ")); - DEBUG_PRINTLN(rainRate); - lastRainRate = rainRate; - } - lastRainTime = lastTipTime; - } - // - currentHour = hour(); - if (currentHour != lastHour) - { - DEBUG_PRINTLN(F("One hour elapsed.")); - send(msgRain.set((float)rainTotal(currentHour) / 100, 1)); // send today's rainfall - wait(DWELL_TIME); - saveState(eepromIndex, highByte(rainBucket[0])); - saveState(eepromIndex + 1, lowByte(rainBucket[0])); - DEBUG_PRINT(F("Saving rainBucket[0] to eeprom. rainBucket[0] = ")); - DEBUG_PRINTLN(rainBucket[0]); - for (int i = RAIN_BUCKET_SIZE - 1; i >= 0; i--)//cascade an hour of values back into the array - { - rainBucket [i + 1] = rainBucket [i]; - } - request(CHILD_ID_TRIPPED_INDICATOR, V_VAR1); - wait(DWELL_TIME); - request(CHILD_ID_TRIPPED_INDICATOR, V_VAR2); - wait(DWELL_TIME); - rainBucket[0] = 0; - eepromIndex = eepromIndex + 2; - if (eepromIndex > EEPROM_BUFFER_LOCATION + E_BUFFER_LENGTH) - { - eepromIndex = EEPROM_BUFFER_LOCATION; - } - DEBUG_PRINT(F("Writing to EEPROM. Index: ")); - DEBUG_PRINTLN(eepromIndex); - saveState(eepromIndex, 0xFE); - saveState(eepromIndex + 1, 0xFE); - requestTime(); // sync the time every hour - wait(DWELL_TIME); - transmitRainData(); - rainRate = 0; - send(msgRainRate.set(rainRate, 1)); - wait(DWELL_TIME); - DEBUG_PRINTLN(F("Sending rainRate is 0 to controller")); - lastHour = currentHour; - } - if (millis() - sensorPreviousMillis > DHT_LUX_DELAY) - { - #ifdef DHT_ON //DHT Code - doDHT(); - #endif - #ifdef LUX_ON - doLUX(); - #endif - sensorPreviousMillis = millis(); - } -} -// -#ifdef DHT_ON -void doDHT(void) -{ - float temperature = dht.getTemperature(); - if (isnan(temperature)) - { - DEBUG_PRINTLN(F("Failed reading temperature from DHT")); - } else if (temperature != lastTemp) - { - lastTemp = temperature; - if (!metric) - { - temperature = dht.toFahrenheit(temperature); - } - send(msgTemp.set(temperature, 1)); - wait(DWELL_TIME); - DEBUG_PRINT(F("Temperature is: ")); - DEBUG_PRINTLN(temperature); - } - float humidity = dht.getHumidity();; - if (isnan(humidity)) - { - DEBUG_PRINTLN(F("Failed reading humidity from DHT")); - } else if (humidity != lastHum) - { - lastHum = humidity; - send(msgHum.set(humidity, 1)); - wait(DWELL_TIME); - DEBUG_PRINT(F("Humidity is: ")); - DEBUG_PRINTLN(humidity); - } -} -#endif -// -#ifdef LUX_ON -void doLUX(void) -{ - unsigned int lux = lightSensor.readLightLevel();// Get Lux value - DEBUG_PRINT(F("Current LUX Level: ")); - DEBUG_PRINTLN(lux); - heartbeat++; - if (lux != lastlux || heartbeat > 10) - { - send(msg.set(lux)); - lastlux = lux; - } - if (heartbeat > 10) - { - heartbeat = 0; - } -} -#endif -// -void sensorTipped() -{ - unsigned long thisTipTime = millis(); - if (thisTipTime - lastTipTime > 100UL) - { - rainBucket[0] += CALIBRATE_FACTOR; // adds CALIBRATE_FACTOR hundredths of unit each tip - wasTippedBuffer++; - } - lastTipTime = thisTipTime; -} -// -int rainTotal(int hours) -{ - int total = 0; - for ( int i = 0; i <= hours; i++) - { - total += rainBucket [i]; - } - return total; -} - -void updateSerialData(int x) -{ - DEBUG_PRINT(F("Rain last ")); - DEBUG_PRINT(x); - DEBUG_PRINTLN(F(" hours: ")); - float tipCount = 0; - for (int i = 0; i < x; i++) - { - tipCount = tipCount + rainBucket [i]; - } - tipCount = tipCount / 100; - DEBUG_PRINTLN(tipCount); -} - -void loadRainArray(int value) // retrieve stored rain array from EEPROM on powerup -{ - for (int i = 0; i < RAIN_BUCKET_SIZE; i++) - { - value = value - 2; - if (value < EEPROM_BUFFER_LOCATION) - { - value = EEPROM_BUFFER_LOCATION + E_BUFFER_LENGTH; - } - DEBUG_PRINT(F("EEPROM location: ")); - DEBUG_PRINTLN(value); - byte rainValueHigh = loadState(value); - byte rainValueLow = loadState(value + 1); - unsigned int rainValue = rainValueHigh << 8; - rainValue |= rainValueLow; - rainBucket[i + 1] = rainValue; - // - DEBUG_PRINT(F("rainBucket[ value: ")); - DEBUG_PRINT(i + 1); - DEBUG_PRINT(F("] value: ")); - DEBUG_PRINTLN(rainBucket[i + 1]); - } -} - -void transmitRainData(void) -{ - DEBUG_PRINT(F("In transmitRainData. currentHour = ")); - DEBUG_PRINTLN(currentHour); - int rainUpdateTotal = 0; - for (int i = currentHour; i >= 0; i--) - { - rainUpdateTotal += rainBucket[i]; - DEBUG_PRINT(F("Adding rainBucket[")); - DEBUG_PRINT(i); - DEBUG_PRINTLN(F("] to rainUpdateTotal.")); - } - DEBUG_PRINT(F("TX Day 1: rainUpdateTotal = ")); - DEBUG_PRINTLN((float)rainUpdateTotal / 100.0); - send(msgRainVAR1.set((float)rainUpdateTotal / 100.0, 1)); //Send current day rain totals (resets at midnight) - wait(DWELL_TIME); -#ifdef USE_DAILY - rainUpdateTotal = 0; -#endif - for (int i = currentHour + 24; i > currentHour; i--) - { - rainUpdateTotal += rainBucket[i]; - DEBUG_PRINT(F("Adding rainBucket[")); - DEBUG_PRINT(i); - DEBUG_PRINTLN(F("] to rainUpdateTotal.")); - } - DEBUG_PRINT(F("TX Day 2: rainUpdateTotal = ")); - DEBUG_PRINTLN((float)rainUpdateTotal / 100.0); - send(msgRainVAR2.set((float)rainUpdateTotal / 100.0, 1)); - wait(DWELL_TIME); -#ifdef USE_DAILY - rainUpdateTotal = 0; -#endif - for (int i = currentHour + 48; i > currentHour + 24; i--) - { - rainUpdateTotal += rainBucket[i]; - DEBUG_PRINT(F("Adding rainBucket[")); - DEBUG_PRINT(i); - DEBUG_PRINTLN(F("] to rainUpdateTotal.")); - } - DEBUG_PRINT(F("TX Day 3: rainUpdateTotal = ")); - DEBUG_PRINTLN((float)rainUpdateTotal / 100.0); - send(msgRainVAR3.set((float)rainUpdateTotal / 100.0, 1)); - wait(DWELL_TIME); -#ifdef USE_DAILY - rainUpdateTotal = 0; -#endif - for (int i = currentHour + 72; i > currentHour + 48; i--) - { - rainUpdateTotal += rainBucket[i]; - DEBUG_PRINT(F("Adding rainBucket[")); - DEBUG_PRINT(i); - DEBUG_PRINTLN(F("] to rainUpdateTotal.")); - } - DEBUG_PRINT(F("TX Day 4: rainUpdateTotal = ")); - DEBUG_PRINTLN((float)rainUpdateTotal / 100.0); - send(msgRainVAR4.set((float)rainUpdateTotal / 100.0, 1)); - wait(DWELL_TIME); -#ifdef USE_DAILY - rainUpdateTotal = 0; -#endif - for (int i = currentHour + 96; i > currentHour + 72; i--) - { - rainUpdateTotal += rainBucket[i]; - DEBUG_PRINT(F("Adding rainBucket[")); - DEBUG_PRINT(i); - DEBUG_PRINTLN(F("] to rainUpdateTotal.")); - } - DEBUG_PRINT(F("TX Day 5: rainUpdateTotal = ")); - DEBUG_PRINTLN((float)rainUpdateTotal / 100.0); - send(msgRainVAR5.set((float)rainUpdateTotal / 100.0, 1)); - wait(DWELL_TIME); -} - -void receive(const MyMessage &message) -{ - if (message.sensor == CHILD_ID_RAIN_LOG) - { - // nothing to do here - } - else if (message.sensor == CHILD_ID_TRIPPED_INDICATOR) - { - if (message.type == V_VAR1) - { - rainWindow = atoi(message.data); - if (rainWindow > 120) - { - rainWindow = 120; - } - else if (rainWindow < 1) - { - rainWindow = 1; - } - if (rainWindow != atoi(message.data)) // if I changed the value back inside the boundries, push that number back to Vera - { - send(msgTrippedVar1.set(rainWindow)); - } - } - else if (message.type == V_VAR2) - { - rainSensorThreshold = atoi(message.data); - if (rainSensorThreshold > 10000) - { - rainSensorThreshold = 10000; - } - else if (rainSensorThreshold < 1) - { - rainSensorThreshold = 1; - } - if (rainSensorThreshold != atoi(message.data)) // if I changed the value back inside the boundries, push that number back to Vera - { - send(msgTrippedVar2.set(rainSensorThreshold)); - } - } - } -} - -void prettyFade(void) -{ - float val = (exp(sin(millis() / 2000.0 * PI)) - 0.36787944) * 108.0; - analogWrite(ledPin, val); -} - -void slowFlash(void) -{ - static boolean ledState = true; - static unsigned long pulseStart = millis(); - if (millis() - pulseStart < 100UL) - { - digitalWrite(ledPin, !ledState); - pulseStart = millis(); - } -} - -void receiveTime(unsigned long time) -{ - DEBUG_PRINTLN(F("Time received...")); - setTime(time); - char theTime[6]; - sprintf(theTime, "%d:%2d", hour(), minute()); - DEBUG_PRINTLN(theTime); -} diff --git a/libraries/MySensors/examples/RealTimeClockDisplaySensor/RealTimeClockDisplaySensor.ino b/libraries/MySensors/examples/RealTimeClockDisplaySensor/RealTimeClockDisplaySensor.ino deleted file mode 100644 index 4ed35cf..0000000 --- a/libraries/MySensors/examples/RealTimeClockDisplaySensor/RealTimeClockDisplaySensor.ino +++ /dev/null @@ -1,145 +0,0 @@ -/** - * The MySensors Arduino library handles the wireless radio link and protocol - * between your home built sensors/actuators and HA controller of choice. - * The sensors forms a self healing radio network with optional repeaters. Each - * repeater and gateway builds a routing tables in EEPROM which keeps track of the - * network topology allowing messages to be routed to nodes. - * - * Created by Henrik Ekblad - * Copyright (C) 2013-2015 Sensnology AB - * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors - * - * Documentation: http://www.mysensors.org - * Support Forum: http://forum.mysensors.org - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 as published by the Free Software Foundation. - * - ******************************* - * - * REVISION HISTORY - * Version 1.0 - Henrik Ekblad - * - * DESCRIPTION - * Example sketch showing how to request time from controller which is stored in RTC module - * The time and temperature (DS3231/DS3232) is shown on an attached Crystal LCD display - * - * - * Wiring (radio wiring on www.mysensors.org) - * ------------------------------------ - * Arduino RTC-Module I2C Display - * ------------------------------------ - * GND GND GND - * +5V VCC VCC - * A4 SDA SDA - * A5 SCL SCL - * - * http://www.mysensors.org/build/display - * - */ - -// Enable debug prints to serial monitor -#define MY_DEBUG - -// Enable and select radio type attached -#define MY_RADIO_NRF24 -//#define MY_RADIO_RFM69 - -#include -#include -#include -#include // A DS3231/DS3232 library -#include -#include - -boolean timeReceived = false; -unsigned long lastUpdate=0, lastRequest=0; - -// Initialize display. Google the correct settings for your display. -// The follwoing setting should work for the recommended display in the MySensors "shop". -LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); - -void setup() -{ - // the function to get the time from the RTC - setSyncProvider(RTC.get); - - // Request latest time from controller at startup - requestTime(); - - // initialize the lcd for 16 chars 2 lines and turn on backlight - lcd.begin(16,2); -} - -void presentation() { - // Send the sketch version information to the gateway and Controller - sendSketchInfo("RTC Clock", "1.0"); -} - -// This is called when a new time value was received -void receiveTime(unsigned long controllerTime) { - // Ok, set incoming time - Serial.print("Time value received: "); - Serial.println(controllerTime); - RTC.set(controllerTime); // this sets the RTC to the time from controller - which we do want periodically - timeReceived = true; -} - -void loop() -{ - unsigned long now = millis(); - - // If no time has been received yet, request it every 10 second from controller - // When time has been received, request update every hour - if ((!timeReceived && (now-lastRequest) > (10UL*1000UL)) - || (timeReceived && (now-lastRequest) > (60UL*1000UL*60UL))) { - // Request time from controller. - Serial.println("requesting time"); - requestTime(); - lastRequest = now; - } - - // Update display every second - if (now-lastUpdate > 1000) { - updateDisplay(); - lastUpdate = now; - } -} - - -void updateDisplay(){ - tmElements_t tm; - RTC.read(tm); - - // Print date and time - lcd.home(); - lcd.print(tm.Day); - lcd.print("/"); - lcd.print(tm.Month); -// lcd.print(" "); -// lcd.print(tmYearToCalendar(tm.Year)-2000); - - lcd.print(" "); - printDigits(tm.Hour); - lcd.print(":"); - printDigits(tm.Minute); - lcd.print(":"); - printDigits(tm.Second); - - // Go to next line and print temperature - lcd.setCursor ( 0, 1 ); - lcd.print("Temp: "); - lcd.print(RTC.temperature()/4); - lcd.write(223); // Degree-sign - lcd.print("C"); -} - - -void printDigits(int digits){ - if(digits < 10) - lcd.print('0'); - lcd.print(digits); -} - - diff --git a/libraries/MySensors/examples/RelayWithButtonActuator/RelayWithButtonActuator.ino b/libraries/MySensors/examples/RelayWithButtonActuator/RelayWithButtonActuator.ino deleted file mode 100644 index 64c35fa..0000000 --- a/libraries/MySensors/examples/RelayWithButtonActuator/RelayWithButtonActuator.ino +++ /dev/null @@ -1,121 +0,0 @@ -/** - * The MySensors Arduino library handles the wireless radio link and protocol - * between your home built sensors/actuators and HA controller of choice. - * The sensors forms a self healing radio network with optional repeaters. Each - * repeater and gateway builds a routing tables in EEPROM which keeps track of the - * network topology allowing messages to be routed to nodes. - * - * Created by Henrik Ekblad - * Copyright (C) 2013-2015 Sensnology AB - * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors - * - * Documentation: http://www.mysensors.org - * Support Forum: http://forum.mysensors.org - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 as published by the Free Software Foundation. - * - ******************************* - * - * REVISION HISTORY - * Version 1.0 - Henrik Ekblad - * - * DESCRIPTION - * Example sketch for a "light switch" where you can control light or something - * else from both HA controller and a local physical button - * (connected between digital pin 3 and GND). - * This node also works as a repeader for other nodes - * http://www.mysensors.org/build/relay - */ - -// Enable debug prints to serial monitor -#define MY_DEBUG - -// Enable and select radio type attached -#define MY_RADIO_NRF24 -//#define MY_RADIO_RFM69 - -// Enabled repeater feature for this node -#define MY_REPEATER_FEATURE - -#include -#include -#include - -#define RELAY_PIN 4 // Arduino Digital I/O pin number for relay -#define BUTTON_PIN 3 // Arduino Digital I/O pin number for button -#define CHILD_ID 1 // Id of the sensor child -#define RELAY_ON 1 -#define RELAY_OFF 0 - -Bounce debouncer = Bounce(); -int oldValue=0; -bool state; - -MyMessage msg(CHILD_ID,V_LIGHT); - -void setup() -{ - // Setup the button - pinMode(BUTTON_PIN,INPUT); - // Activate internal pull-up - digitalWrite(BUTTON_PIN,HIGH); - - // After setting up the button, setup debouncer - debouncer.attach(BUTTON_PIN); - debouncer.interval(5); - - // Make sure relays are off when starting up - digitalWrite(RELAY_PIN, RELAY_OFF); - // Then set relay pins in output mode - pinMode(RELAY_PIN, OUTPUT); - - // Set relay to last known state (using eeprom storage) - state = loadState(CHILD_ID); - digitalWrite(RELAY_PIN, state?RELAY_ON:RELAY_OFF); -} - -void presentation() { - // Send the sketch version information to the gateway and Controller - sendSketchInfo("Relay & Button", "1.0"); - - // Register all sensors to gw (they will be created as child devices) - present(CHILD_ID, S_LIGHT); -} - -/* -* Example on how to asynchronously check for new messages from gw -*/ -void loop() -{ - debouncer.update(); - // Get the update value - int value = debouncer.read(); - if (value != oldValue && value==0) { - send(msg.set(state?false:true), true); // Send new state and request ack back - } - oldValue = value; -} - -void receive(const MyMessage &message) { - // We only expect one type of message from controller. But we better check anyway. - if (message.isAck()) { - Serial.println("This is an ack from gateway"); - } - - if (message.type == V_LIGHT) { - // Change relay state - state = message.getBool(); - digitalWrite(RELAY_PIN, state?RELAY_ON:RELAY_OFF); - // Store state in eeprom - saveState(CHILD_ID, state); - - // Write some debug info - Serial.print("Incoming change for sensor:"); - Serial.print(message.sensor); - Serial.print(", New status: "); - Serial.println(message.getBool()); - } -} - diff --git a/libraries/MySensors/examples/SMSGatewayNode/SMSGatewayNode.ino b/libraries/MySensors/examples/SMSGatewayNode/SMSGatewayNode.ino deleted file mode 100644 index c18e3d9..0000000 --- a/libraries/MySensors/examples/SMSGatewayNode/SMSGatewayNode.ino +++ /dev/null @@ -1,646 +0,0 @@ -/* - SMS Gateway - - This node works as a SMS gateway, receiving and sending SMS messages at the request of other nodes - It needs to have a fixed ID to be able to be addessed within a MySensors network. - As it is easy to remember I chose the ID 123. - - Once the node is sent an initiating SMS, it will respond to the received calling number as it's "owner". This way you do not - need to hardcode your number in the sketch. But to make it operational, you will need to send at least 1 SMS to it - with the prededfined text MYPASSWORD (see below in the definitions, you set your own string). - The node should respond with CONFIRMOWNER, you can set this string in de definitions below. - The allow another phone to control the node and receive messages, the "owner" needs to release the node by sending a SMS with - the text MYRELEASEWORD. Again you can set this string in the definitions below. - The node will then again become ownerless and ignore all messages and SMS's. - - If the node has an owner and another phone sends a message to the node, it will inform the owner of a "take over attempt". - - You can sent V_TEXT to other nodes in your network by using the following format: - - "N021:xxx.any.25.characters.xxx" - - Anything sent after the "N021:" will be sent to the node with address 021. A V_TEXT has a maximum length of 25 charters. Adding the node address make the SMS length 30 charters. - The SMS buffer is 31 characters long. - - A node address can have a value 000 (the controller) and any value between 001 and 254. Values higher then 254 are ignored and nothing will be done with the - received SMS, apart from informing the controller that this SMS was received. - - Sending a SMS to the SMS Gateway with the address of the SMS Gateway itself will result in the SMS Gateway sending the same SMS back. - So if you send the following SMS to your SMS Gateway: - "N123:Are you there ?" - You will receive a SMS with the content ""N123:Are you there ?" - - What is happening ? - - The SMS Gateway receives a SMS adressed to the node 123, the SMS Gateway sends a copy of the received SMS to the controller and sends a message with content "Are you there ?" - to the node 123. Since node 123 is the SMS Gateway receiving a message, it will pass on this message as a SMS to the owner in the format specified earlier. - So a text SMS is sent with content "N123:Are you there?" - - If a node sends a V_TEXT "Garagedoor is opened" to the SMS Gateway, the SMS gateway will pass this on to the owner's GSM in the format below: - "N011:Garagedoor is opened" - Address from the node sending the text is sent first (in this case "N011:"), and then the contents of the V_TEXT itself is appended ("Garagedoor is opened"). - - You need a SIM800L module hooked to an atmega328 based MySensor node via softserial port. This sketch was made for my AC capable - board wich allows use of a SIM800L module. More on that board on the forum at this location: - http://forum.mysensors.org/topic/2374/50mm-x-50mm-board-with-different-powering-options/10 - or - https://www.openhardware.io/view/11/ACDCBatteries-capable-atmega328p-board - - Nodes that want to inform an GSM owner via the SMS Gateway need to have the capacity to send a V_TEXT. - Even nodes that sleep most of the time can send messages to any other node. You just need to define a V_TEXT message type. - - Nodes that need to react to SMS messages with instructions, need to be able to receive V_TEXT and need to be reachable (always on). - So battery based nodes will not be the best candidates as actuators based on SMS. - - This example code is in the public domain. - - modified 10 oktober 2015 version 1.0 - modified 6 january 2016 version 1.1 - modified 15 january 2016 version 1.2 - - by GertSanders on the MySensors forum - - Uses the Adafruit FONA library to drive the SIM800L, this need to be included in your library to compile this sketch. - - - To do: create a buffer structure to handle several incoming messages from nodes or phone. - - -*/ - -#define SKETCHNAME "SMSGatewayNode" -#define SKETCHVERSION "1.2" - - -// Enable debug prints to serial monitor - -//#define MY_DEBUG -//#define MY_DEBUG_VERBOSE - -//#define MY_BAUD_RATE 57600 - -#define MY_NODE_ID 123 -#define GATEWAY_ID 0 - -// Enable and select radio type attached -#define MY_RADIO_NRF24 -//#define MY_RADIO_RFM69 - -// defines for sensors -//#define BATTERYLEVEL 0 -#define SMSTEXT 1 - - -// Enable repeater functionality for this node -//#define MY_REPEATER_FEATURE - - -// All includes -#include -#include -#include -#include - -// Pin definitions and other defines -#define FONA_RX 2 -#define FONA_TX 3 -#define FONA_RST 4 - -#define defaultledpin 8 // usually this is pin 13, but better to use another digital pin - -// constants - -#define MAXSMSLENGTH 30 // No need for longer messages from GSM's as V_TEXT is limiting what can be sent to the other nodes. Node addresses are maximum 000 -> 255 -#define MAXMSGLENGTH 25 // limiting factor is the payload of V_TEXT, which is 25 chars. Nodes will never send you more then this in 1 message. -#define MAXNUMBERLENGTH 12 // based on "plus" sign, a country prefix and national number. Example in Belgium: +32 123 45 67 -#define MAXNODEID 254 // highest value a node ID can have - -// following strings need to be set by you, maximum length is 30 CHARS. -#define MYPASSWORD "Password" // replace this with your preferred passphrase to gain ownership -#define CONFIRMOWNER "I am yours" // replace this string if your partner is of the untrusting type ;-) -#define MYRELEASEWORD "I release you" // replace this with your preferred release confirmation - -// variables - -boolean KnowMyOwner = false; -boolean MsgReceived = false; -uint16_t smslen = 0; -int8_t smsnum = 0; -int bufferindex = 0; - -char smsbuffer[MAXSMSLENGTH + 1] = ""; -char msgbuffer[MAXMSGLENGTH + 1] = ""; -char nodemsgbuffer[MAXMSGLENGTH + 1] = ""; -char nodeaddress[5]; -char Numbers[11] = "0123456789"; - -char myOwnersNumber[MAXNUMBERLENGTH + 1] = ""; -char ReceivedNumber[MAXNUMBERLENGTH + 1] = ""; - -// Instantiate objects -MyMessage SMSMsg(SMSTEXT, V_TEXT); -Adafruit_FONA fona = Adafruit_FONA(FONA_RST); -SoftwareSerial fonaSS = SoftwareSerial(FONA_TX, FONA_RX); -SoftwareSerial *fonaSerial = &fonaSS; - - - - - - - -///////////////////////////////////////////////////////////////////////// -// supporting functions. -///////////////////////////////////////////////////////////////////////// -void blipled() -{ - digitalWrite(defaultledpin, HIGH); // turn the LED on (HIGH is the voltage level) - wait(3); // wait for a second - digitalWrite(defaultledpin, LOW); // turn the LED off by making the voltage HIGH - wait(100); // wait for a second - digitalWrite(defaultledpin, HIGH); // turn the LED on (HIGH is the voltage level) - wait(3); // wait for a second - digitalWrite(defaultledpin, LOW); // turn the LED off by making the voltage HIGH -} - - - -///////////////////////////////////////////////////////////////////////// -int GetNodeID() -{ - int TheAddress = -1; - TheAddress = ((smsbuffer[1] - 48) * 100) + ((smsbuffer[2] - 48) * 10) + (smsbuffer[3] - 48); - return TheAddress; -} - - - -///////////////////////////////////////////////////////////////////////// -bool IsAddressingNode() -{ - if (strlen(smsbuffer) > 5) - { // at least something to check - if ((smsbuffer[0] == 'N') && (smsbuffer[4] == ':') && (strchr(Numbers, smsbuffer[1]) != NULL) && (strchr(Numbers, smsbuffer[2]) != NULL) && (strchr(Numbers, smsbuffer[3]) != NULL)) - { -#ifdef MY_DEBUG - Serial.print("Message addressed to: "); - Serial.println(GetNodeID()); -#endif - if (GetNodeID() <= MAXNODEID) - return true; - else - return false; - } - else - { - return false; - } - } - else - { - return false; - } -} - - -///////////////////////////////////////////////////////////////////////// -char* GetMessageContent(char incomingsmsbuffer[MAXSMSLENGTH]) -{ - strcpy(nodemsgbuffer, ""); - for (int i = 5; i < MAXSMSLENGTH; i++) - { - nodemsgbuffer[i - 5] = incomingsmsbuffer[i]; - } - return nodemsgbuffer; -} - - -///////////////////////////////////////////////////////////////////////// -void presentation() -{ - // Send the sketch version information to the gateway and Controller - sendSketchInfo(SKETCHNAME, SKETCHVERSION); - wait(500); - // node ID is 123 - present(SMSTEXT, S_INFO); - wait(500); -} - - - - -///////////////////////////////////////////////////////////////////////// -void receive(const MyMessage & message) -{ -#ifdef MY_DEBUG - Serial.print(F("Incoming from sensor: ")); - Serial.print(message.sensor); -#endif - - - - if ((message.type == V_TEXT) and (!MsgReceived)) - { - sprintf(smsbuffer, "N%d:", message.sender); - strcat(smsbuffer, message.getString()); - strcpy(msgbuffer, message.getString()); - MsgReceived = true; - -#ifdef MY_DEBUG - Serial.print(F(", New text: ")); - Serial.print(message.getString()); -#endif - // send a copy of the received message to the controller - } - -#ifdef MY_DEBUG - Serial.println(); -#endif - -} // end: void receive() - - - -///////////////////////////////////////////////////////////////////////// -void clearSMSmemory() -{ - int8_t smsnum = fona.getNumSMS(); - while (smsnum > 0) - { - fona.deleteSMS(smsnum); - smsnum--; - } -} - - - -///////////////////////////////////////////////////////////////////////// -// the setup function runs once when you press reset or power the board -///////////////////////////////////////////////////////////////////////// -void setup() -{ - KnowMyOwner = false; - MsgReceived = false; - SMSMsg.setDestination(GATEWAY_ID); - - // initialize digital LEDpin as an output. - pinMode(defaultledpin, OUTPUT); - digitalWrite(defaultledpin, HIGH); // turn the LED on by making the voltage HIGH - -#ifdef MY_DEBUG - - Serial.println(F("SIM800L basic test")); - Serial.println(F("Initializing....(May take 3 seconds)")); - Serial.println(F("starting SIM800L")); - -#endif - - fonaSerial->begin(4800); - if (! fona.begin(*fonaSerial)) - { -#ifdef MY_DEBUG - Serial.println(F("Couldn't find SIM800L")); -#endif - while (1); - } - -#ifdef MY_DEBUG - Serial.println(F("SIM800L is OK")); -#endif - - digitalWrite(defaultledpin, LOW); // turn the LED off by making the voltage LOW - wait(250); // wait for a bit - digitalWrite(defaultledpin, HIGH); // turn the LED on by making the voltage HIGH - -#ifdef MY_DEBUG - // Print SIM card IMEI number. - char imei[15] = {0}; // MUST use a 16 character buffer for IMEI! - uint8_t imeiLen = fona.getIMEI(imei); - if (imeiLen > 0) { - Serial.print(F("SIM card IMEI: ")); Serial.println(imei); - } -#endif - - smsnum = fona.getNumSMS(); - - if (smsnum < 0) - { -#ifdef MY_DEBUG - Serial.println(F("Could not read # SMS")); -#endif - } - else - { -#ifdef MY_DEBUG - Serial.print(smsnum); - Serial.println(F(" SMS's on SIM card!")); -#endif - } - - clearSMSmemory(); - - smsnum = fona.getNumSMS(); - - if (smsnum == 0) - { -#ifdef MY_DEBUG - Serial.println(F("SMS Memory cleared")); -#endif - } - - digitalWrite(defaultledpin, LOW); // turn the LED off by making the voltage LOW - -} - -/////////////////////////////////////////////////////// -// the loop function runs over and over again forever -/////////////////////////////////////////////////////// -void loop() -{ - blipled(); - // sensor.request(SMSTEXT, V_TEXT, 0); - - wait(500); // wait for a second and proces messages - -#ifdef MY_DEBUG - Serial.print(F("Owner's number: ")); - Serial.println(myOwnersNumber); - Serial.print(F("Last received number: ")); - Serial.println(ReceivedNumber); -#endif - - smsnum = fona.getNumSMS(); - - if (smsnum < 0) - { -#ifdef MY_DEBUG - Serial.println(F("Could not read # SMS")); -#endif - } - -#ifdef MY_DEBUG - Serial.println(F("Process incoming messages")); -#endif - - if (MsgReceived && KnowMyOwner) - { - // a node sent us V_TEXT and we know the owner, so we can send an SMS - - SMSMsg.setDestination(GATEWAY_ID); - send(SMSMsg.set(smsbuffer)); - - if (fona.sendSMS(myOwnersNumber, smsbuffer)) - { - // SMS was sent to owner - MsgReceived = false; - strcpy(smsbuffer, ""); - strcpy(msgbuffer, ""); - } - else - { - // We do not know the owner, then ignore this message, we know the owner but no message was received, so just to be safe: - MsgReceived = false; - strcpy(msgbuffer, ""); - } - } - - - if (smsnum > 0) - { // we received an SMS and now need to check it - -#ifdef MY_DEBUG - Serial.print(smsnum); - Serial.println(F(" SMS received")); -#endif - - if (! fona.readSMS(smsnum, smsbuffer, MAXSMSLENGTH, &smslen)) - { // could not read SMS - -#ifdef MY_DEBUG - Serial.println(F("Failed to get SMS!")); -#endif - - } - else - { // We could read the SMS, now retreive sms to smsbuffer and number of origin - fona.getSMSSender(smsnum, ReceivedNumber, MAXNUMBERLENGTH); - -#ifdef MY_DEBUG - Serial.print(F("***** SMS #")); Serial.print(smsnum); - Serial.print(F(" (")); Serial.print(smslen); Serial.println(F(") bytes *****")); - Serial.println(smsbuffer); - Serial.print(F("from: ")); - Serial.println(ReceivedNumber); - Serial.println(F("***************************")); - Serial.print(F("Owner is known: ")); - if (KnowMyOwner) - Serial.println(F("yes")); - else - Serial.println(F("no")); - Serial.println(); -#endif - - if (!KnowMyOwner) - { // no owner, so check request for ownership - if (strcmp(smsbuffer, MYPASSWORD) == 0) - { // valid question for ownership - strcpy(smsbuffer, "OwnReq by: "); - strcat(smsbuffer, ReceivedNumber); - send(SMSMsg.set(smsbuffer)); - KnowMyOwner = true; - strcpy(myOwnersNumber, ReceivedNumber); - // from now on we can respond to owner - -#ifdef MY_DEBUG - Serial.print(F("Request for ownership by ")); - Serial.println(myOwnersNumber); -#endif - - strcpy(smsbuffer, CONFIRMOWNER); - if (fona.sendSMS(myOwnersNumber, smsbuffer)) - { // send confirmation to new owner - strcpy(smsbuffer, "Owner is informed."); - SMSMsg.setDestination(GATEWAY_ID); - send(SMSMsg.set(smsbuffer)); - -#ifdef MY_DEBUG - Serial.print(smsbuffer); - Serial.print(": "); - Serial.println(myOwnersNumber); -#endif - } - else - { // could not send confirmation to new owner - - strcpy(smsbuffer, "Owner is not informed."); - SMSMsg.setDestination(GATEWAY_ID); - send(SMSMsg.set(smsbuffer)); - - } - - - - strcpy(smsbuffer, ""); - } - else - { // no owner and no valid request, so ignore and log in controller - strcpy(smsbuffer, "Attempt by: "); - strcat(smsbuffer, ReceivedNumber); - SMSMsg.setDestination(GATEWAY_ID); - send(SMSMsg.set(smsbuffer)); - strcpy(smsbuffer, ""); - } - - } - - - if (KnowMyOwner) - { // now we can accept SMS messages but we need to check the origin of the SMS - - if (strcmp(myOwnersNumber, ReceivedNumber) == 0) - { // this is the owner talking, so handle his SMS - -#ifdef MY_DEBUG - Serial.println(); - Serial.print(F("Owner is talking: ")); - Serial.println(smsbuffer); - Serial.println(); -#endif - - if (strcmp(smsbuffer, MYRELEASEWORD) == 0) - { - - strcpy(smsbuffer, "Released by "); - strcat(smsbuffer, ReceivedNumber); - SMSMsg.setDestination(GATEWAY_ID); - send(SMSMsg.set(smsbuffer)); - - strcpy(smsbuffer, "I am released."); - if (fona.sendSMS(myOwnersNumber, smsbuffer)) - { - strcpy(smsbuffer, "Owner is informed."); - SMSMsg.setDestination(GATEWAY_ID); - send(SMSMsg.set(smsbuffer)); - } - else - { - strcpy(smsbuffer, "Owner is not informed."); - SMSMsg.setDestination(GATEWAY_ID); - send(SMSMsg.set(smsbuffer)); - } - - // clean up buffers, we are done and need to get ready for new owner request, ignore further messages - KnowMyOwner = false; - MsgReceived = false; - strcpy(myOwnersNumber, ""); - strcpy(ReceivedNumber, ""); - strcpy(smsbuffer, ""); - strcpy(msgbuffer, ""); - } - - - if (strcmp(smsbuffer, "Blip") == 0) - { // handle the command to light the defaultled. This could be anything else of course - - digitalWrite(defaultledpin, HIGH); // turn the LED on (HIGH is the voltage level) - wait(2000); // wait for two seconds - digitalWrite(defaultledpin, LOW); // turn the LED off by making the voltage LOW - - strcpy(smsbuffer, "R: Blip"); - SMSMsg.setDestination(GATEWAY_ID); - send(SMSMsg.set(smsbuffer)); - strcpy(smsbuffer, ""); - } - - - // and here we put the code to pass the message on to another node - // smsbuffer contains the first 30 characters of the SMS received. - // if a message starts with Nxxx:1234567890123456789012345 then you need to pass on the content to node Nxxx - // the node needs to be able to handle the incoming V_TEXT message - - if (IsAddressingNode()) // check if sms is in Node addressing format - { - int NodeID = GetNodeID(); - -#ifdef MY_DEBUG - - Serial.println(); - Serial.print("Message for node "); - Serial.print(NodeID); - Serial.print(" is treated: "); - Serial.println(GetMessageContent(smsbuffer)); - Serial.println(); - -#endif - -// send a copy of the incoming message to the controller - SMSMsg.setDestination(GATEWAY_ID); - send(SMSMsg.set(smsbuffer)); -// send the stripped message to the addressed node - SMSMsg.setDestination(NodeID); - SMSMsg.set(GetMessageContent(smsbuffer)); - send(SMSMsg); - - strcpy(smsbuffer, ""); - } - - - - - - // finally we mention to the controller all the SMS messages we received and did not treat. - - if (strcmp(smsbuffer, "") != 0) - { // so we still got something to do -#ifdef MY_DEBUG - Serial.println(smsbuffer); - Serial.println(); -#endif - //strcpy(smsbuffer, "Received crap from owner."); - SMSMsg.setDestination(GATEWAY_ID); - send(SMSMsg.set(smsbuffer)); - strcpy(smsbuffer, ""); - } - - } - else - { // not the owner trying to get access - strcpy(smsbuffer, "Hack by:"); - strcat(smsbuffer, ReceivedNumber); - SMSMsg.setDestination(GATEWAY_ID); - send(SMSMsg.set(smsbuffer)); -#ifdef MY_DEBUG - Serial.print(F("Hijack attempt by: ")); - Serial.println(ReceivedNumber); -#else - if (fona.sendSMS(myOwnersNumber, smsbuffer)) - { - strcpy(smsbuffer, "Owner is informed."); - SMSMsg.setDestination(GATEWAY_ID); - send(SMSMsg.set(smsbuffer)); - } - else - { - strcpy(smsbuffer, "Owner could not be informed."); - SMSMsg.setDestination(GATEWAY_ID); - send(SMSMsg.set(smsbuffer)); - } -#endif - } - - } - - } - - clearSMSmemory(); - - } - -} - - - - - - - diff --git a/libraries/MySensors/examples/SensebenderBlink/SensebenderBlink.ino b/libraries/MySensors/examples/SensebenderBlink/SensebenderBlink.ino deleted file mode 100644 index 6e005ae..0000000 --- a/libraries/MySensors/examples/SensebenderBlink/SensebenderBlink.ino +++ /dev/null @@ -1,52 +0,0 @@ -// Sensebender Micro board -// Simple blinking FW to test OTA updates - -// Enable debug prints to serial monitor -#define MY_DEBUG - -// Enable repeater feature -#define MY_REPEATER_FEATURE - -// Enable and select radio type attached -#define MY_RADIO_NRF24 -//#define MY_RADIO_RFM69 - -#include -#include - -#define SketchName "Sensebender Blink" -#define SketchVersion "20150721" -#define NODE_ID AUTO -#define CHILD_ID_COUNTER 0 - -#define LED_PIN A2 -#define BLINK_INTERVAL 500 -#define REPORT_TIME 5000L - -unsigned long lastUpdate = 0; -boolean LED_STATUS = false; - -MyMessage msgCounter(CHILD_ID_COUNTER, V_VAR1); - -void setup() { - pinMode(LED_PIN, OUTPUT); - digitalWrite(LED_PIN, LED_STATUS); -} - -void presentation() { - sendSketchInfo(SketchName, SketchVersion); - present(CHILD_ID_COUNTER, S_CUSTOM,"Millis()"); -} - -void loop() { - wait(BLINK_INTERVAL); - LED_STATUS ^= true; - digitalWrite(LED_PIN, LED_STATUS); - - if (millis()-lastUpdate > REPORT_TIME) { - send(msgCounter.set( millis() )); - lastUpdate = millis(); - } -} - - diff --git a/libraries/MySensors/examples/SensebenderMicro/SensebenderMicro.ino b/libraries/MySensors/examples/SensebenderMicro/SensebenderMicro.ino deleted file mode 100644 index 7fd9469..0000000 --- a/libraries/MySensors/examples/SensebenderMicro/SensebenderMicro.ino +++ /dev/null @@ -1,437 +0,0 @@ -/** - * The MySensors Arduino library handles the wireless radio link and protocol - * between your home built sensors/actuators and HA controller of choice. - * The sensors forms a self healing radio network with optional repeaters. Each - * repeater and gateway builds a routing tables in EEPROM which keeps track of the - * network topology allowing messages to be routed to nodes. - * - * Created by Henrik Ekblad - * Copyright (C) 2013-2015 Sensnology AB - * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors - * - * Documentation: http://www.mysensors.org - * Support Forum: http://forum.mysensors.org - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 as published by the Free Software Foundation. - * - ******************************* - * - * REVISION HISTORY - * Version 1.0 - Thomas Bowman Mørch - * - * DESCRIPTION - * Default sensor sketch for Sensebender Micro module - * Act as a temperature / humidity sensor by default. - * - * If A0 is held low while powering on, it will enter testmode, which verifies all on-board peripherals - * - * Battery voltage is as battery percentage (Internal message), and optionally as a sensor value (See defines below) - * - * - * Version 1.3 - Thomas Bowman Mørch - * Improved transmission logic, eliminating spurious transmissions (when temperatuere / humidity fluctuates 1 up and down between measurements) - * Added OTA boot mode, need to hold A1 low while applying power. (uses slightly more power as it's waiting for bootloader messages) - * - * Version 1.4 - Thomas Bowman Mørch - * - * Corrected division in the code deciding whether to transmit or not, that resulted in generating an integer. Now it's generating floats as expected. - * Simplified detection for OTA bootloader, now detecting if MY_OTA_FIRMWARE_FEATURE is defined. If this is defined sensebender automaticly waits 300mS after each transmission - * Moved Battery status messages, so they are transmitted together with normal sensor updates (but only every 60th minute) - * - */ - -// Enable debug prints to serial monitor -//#define MY_DEBUG - -// Define a static node address, remove if you want auto address assignment -//#deine MY_NODE_ID 3 - -// Enable and select radio type attached -#define MY_RADIO_NRF24 -//#define MY_RADIO_RFM69 - -// Enable to support OTA for this node (needs DualOptiBoot boot-loader to fully work) -#define MY_OTA_FIRMWARE_FEATURE - -#include -#include -#include -#include -#ifndef MY_OTA_FIRMWARE_FEATURE -#include "drivers/SPIFlash/SPIFlash.cpp" -#endif -#include -#include -#include -#include -//#include - -// Uncomment the line below, to transmit battery voltage as a normal sensor value -//#define BATT_SENSOR 199 - -#define RELEASE "1.4" - -#define AVERAGES 2 - -// Child sensor ID's -#define CHILD_ID_TEMP 1 -#define CHILD_ID_HUM 2 - -// How many milli seconds between each measurement -#define MEASURE_INTERVAL 60000 - -// How many milli seconds should we wait for OTA? -#define OTA_WAIT_PERIOD 300 - -// FORCE_TRANSMIT_INTERVAL, this number of times of wakeup, the sensor is forced to report all values to the controller -#define FORCE_TRANSMIT_INTERVAL 30 - -// When MEASURE_INTERVAL is 60000 and FORCE_TRANSMIT_INTERVAL is 30, we force a transmission every 30 minutes. -// Between the forced transmissions a tranmission will only occur if the measured value differs from the previous measurement - -// HUMI_TRANSMIT_THRESHOLD tells how much the humidity should have changed since last time it was transmitted. Likewise with -// TEMP_TRANSMIT_THRESHOLD for temperature threshold. -#define HUMI_TRANSMIT_THRESHOLD 0.5 -#define TEMP_TRANSMIT_THRESHOLD 0.5 - -// Pin definitions -#define TEST_PIN A0 -#define LED_PIN A2 -#define ATSHA204_PIN 17 // A3 - -const int sha204Pin = ATSHA204_PIN; -atsha204Class sha204(sha204Pin); - -SI7021 humiditySensor; -SPIFlash flash(8, 0x1F65); - -// Sensor messages -MyMessage msgHum(CHILD_ID_HUM, V_HUM); -MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP); - -#ifdef BATT_SENSOR -MyMessage msgBatt(BATT_SENSOR, V_VOLTAGE); -#endif - -// Global settings -int measureCount = 0; -int sendBattery = 0; -boolean isMetric = true; -boolean highfreq = true; -boolean transmission_occured = false; - -// Storage of old measurements -float lastTemperature = -100; -int lastHumidity = -100; -long lastBattery = -100; - -RunningAverage raHum(AVERAGES); - -/**************************************************** - * - * Setup code - * - ****************************************************/ -void setup() { - - pinMode(LED_PIN, OUTPUT); - digitalWrite(LED_PIN, LOW); - - Serial.begin(115200); - Serial.print(F("Sensebender Micro FW ")); - Serial.print(RELEASE); - Serial.flush(); - - // First check if we should boot into test mode - - pinMode(TEST_PIN,INPUT); - digitalWrite(TEST_PIN, HIGH); // Enable pullup - if (!digitalRead(TEST_PIN)) testMode(); - - // Make sure that ATSHA204 is not floating - pinMode(ATSHA204_PIN, INPUT); - digitalWrite(ATSHA204_PIN, HIGH); - - digitalWrite(TEST_PIN,LOW); - - digitalWrite(LED_PIN, HIGH); - - humiditySensor.begin(); - - digitalWrite(LED_PIN, LOW); - - Serial.flush(); - Serial.println(F(" - Online!")); - - isMetric = getConfig().isMetric; - Serial.print(F("isMetric: ")); Serial.println(isMetric); - raHum.clear(); - sendTempHumidityMeasurements(false); - sendBattLevel(false); - -#ifdef MY_OTA_FIRMWARE_FEATURE - Serial.println("OTA FW update enabled"); -#endif - -} - -void presentation() { - sendSketchInfo("Sensebender Micro", RELEASE); - - present(CHILD_ID_TEMP,S_TEMP); - present(CHILD_ID_HUM,S_HUM); - -#ifdef BATT_SENSOR - present(BATT_SENSOR, S_POWER); -#endif -} - - -/*********************************************** - * - * Main loop function - * - ***********************************************/ -void loop() { - - measureCount ++; - sendBattery ++; - bool forceTransmit = false; - transmission_occured = false; -#ifndef MY_OTA_FIRMWARE_FEATURE - if ((measureCount == 5) && highfreq) - { - clock_prescale_set(clock_div_8); // Switch to 1Mhz for the reminder of the sketch, save power. - highfreq = false; - } -#endif - - if (measureCount > FORCE_TRANSMIT_INTERVAL) { // force a transmission - forceTransmit = true; - measureCount = 0; - } - - sendTempHumidityMeasurements(forceTransmit); -/* if (sendBattery > 60) - { - sendBattLevel(forceTransmit); // Not needed to send battery info that often - sendBattery = 0; - }*/ -#ifdef MY_OTA_FIRMWARE_FEATURE - if (transmission_occured) { - wait(OTA_WAIT_PERIOD); - } -#endif - - sleep(MEASURE_INTERVAL); -} - - -/********************************************* - * - * Sends temperature and humidity from Si7021 sensor - * - * Parameters - * - force : Forces transmission of a value (even if it's the same as previous measurement) - * - *********************************************/ -void sendTempHumidityMeasurements(bool force) -{ - bool tx = force; - - si7021_env data = humiditySensor.getHumidityAndTemperature(); - - raHum.addValue(data.humidityPercent); - - float diffTemp = abs(lastTemperature - (isMetric ? data.celsiusHundredths : data.fahrenheitHundredths)/100.0); - float diffHum = abs(lastHumidity - raHum.getAverage()); - - Serial.print(F("TempDiff :"));Serial.println(diffTemp); - Serial.print(F("HumDiff :"));Serial.println(diffHum); - - if (isnan(diffHum)) tx = true; - if (diffTemp > TEMP_TRANSMIT_THRESHOLD) tx = true; - if (diffHum > HUMI_TRANSMIT_THRESHOLD) tx = true; - - if (tx) { - measureCount = 0; - float temperature = (isMetric ? data.celsiusHundredths : data.fahrenheitHundredths) / 100.0; - - int humidity = data.humidityPercent; - Serial.print("T: ");Serial.println(temperature); - Serial.print("H: ");Serial.println(humidity); - - send(msgTemp.set(temperature,1)); - send(msgHum.set(humidity)); - lastTemperature = temperature; - lastHumidity = humidity; - transmission_occured = true; - if (sendBattery > 60) { - sendBattLevel(true); // Not needed to send battery info that often - sendBattery = 0; - } - } -} - -/******************************************** - * - * Sends battery information (battery percentage) - * - * Parameters - * - force : Forces transmission of a value - * - *******************************************/ -void sendBattLevel(bool force) -{ - if (force) lastBattery = -1; - long vcc = readVcc(); - if (vcc != lastBattery) { - lastBattery = vcc; - -#ifdef BATT_SENSOR - float send_voltage = float(vcc)/1000.0f; - send(msgBatt.set(send_voltage,3)); -#endif - - // Calculate percentage - - vcc = vcc - 1900; // subtract 1.9V from vcc, as this is the lowest voltage we will operate at - - long percent = vcc / 14.0; - sendBatteryLevel(percent); - transmission_occured = true; - } -} - -/******************************************* - * - * Internal battery ADC measuring - * - *******************************************/ -long readVcc() { - // Read 1.1V reference against AVcc - // set the reference to Vcc and the measurement to the internal 1.1V reference - #if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) - ADMUX = _BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1); - #elif defined (__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__) - ADMUX = _BV(MUX5) | _BV(MUX0); - #elif defined (__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__) - ADcdMUX = _BV(MUX3) | _BV(MUX2); - #else - ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1); - #endif - - delay(2); // Wait for Vref to settle - ADCSRA |= _BV(ADSC); // Start conversion - while (bit_is_set(ADCSRA,ADSC)); // measuring - - uint8_t low = ADCL; // must read ADCL first - it then locks ADCH - uint8_t high = ADCH; // unlocks both - - long result = (high<<8) | low; - - result = 1125300L / result; // Calculate Vcc (in mV); 1125300 = 1.1*1023*1000 - return result; // Vcc in millivolts - -} - -/**************************************************** - * - * Verify all peripherals, and signal via the LED if any problems. - * - ****************************************************/ -void testMode() -{ - uint8_t rx_buffer[SHA204_RSP_SIZE_MAX]; - uint8_t ret_code; - byte tests = 0; - - digitalWrite(LED_PIN, HIGH); // Turn on LED. - Serial.println(F(" - TestMode")); - Serial.println(F("Testing peripherals!")); - Serial.flush(); - Serial.print(F("-> SI7021 : ")); - Serial.flush(); - - if (humiditySensor.begin()) - { - Serial.println(F("ok!")); - tests ++; - } - else - { - Serial.println(F("failed!")); - } - Serial.flush(); - - Serial.print(F("-> Flash : ")); - Serial.flush(); - if (flash.initialize()) - { - Serial.println(F("ok!")); - tests ++; - } - else - { - Serial.println(F("failed!")); - } - Serial.flush(); - - - Serial.print(F("-> SHA204 : ")); - ret_code = sha204.sha204c_wakeup(rx_buffer); - Serial.flush(); - if (ret_code != SHA204_SUCCESS) - { - Serial.print(F("Failed to wake device. Response: ")); Serial.println(ret_code, HEX); - } - Serial.flush(); - if (ret_code == SHA204_SUCCESS) - { - ret_code = sha204.getSerialNumber(rx_buffer); - if (ret_code != SHA204_SUCCESS) - { - Serial.print(F("Failed to obtain device serial number. Response: ")); Serial.println(ret_code, HEX); - } - else - { - Serial.print(F("Ok (serial : ")); - for (int i=0; i<9; i++) - { - if (rx_buffer[i] < 0x10) - { - Serial.print('0'); // Because Serial.print does not 0-pad HEX - } - Serial.print(rx_buffer[i], HEX); - } - Serial.println(")"); - tests ++; - } - - } - Serial.flush(); - - Serial.println(F("Test finished")); - - if (tests == 3) - { - Serial.println(F("Selftest ok!")); - while (1) // Blink OK pattern! - { - digitalWrite(LED_PIN, HIGH); - delay(200); - digitalWrite(LED_PIN, LOW); - delay(200); - } - } - else - { - Serial.println(F("----> Selftest failed!")); - while (1) // Blink FAILED pattern! Rappidly blinking.. - { - } - } -} - diff --git a/libraries/MySensors/examples/ServoActuator/ServoActuator.ino b/libraries/MySensors/examples/ServoActuator/ServoActuator.ino deleted file mode 100644 index 83cd718..0000000 --- a/libraries/MySensors/examples/ServoActuator/ServoActuator.ino +++ /dev/null @@ -1,106 +0,0 @@ -/** - * The MySensors Arduino library handles the wireless radio link and protocol - * between your home built sensors/actuators and HA controller of choice. - * The sensors forms a self healing radio network with optional repeaters. Each - * repeater and gateway builds a routing tables in EEPROM which keeps track of the - * network topology allowing messages to be routed to nodes. - * - * Created by Henrik Ekblad - * Copyright (C) 2013-2015 Sensnology AB - * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors - * - * Documentation: http://www.mysensors.org - * Support Forum: http://forum.mysensors.org - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 as published by the Free Software Foundation. - * - ******************************* - * - * REVISION HISTORY - * Version 1.0 - Henrik Ekblad - * Contribution by: Derek Macias - * - * DESCRIPTION - * Example showing how to create an atuator for a servo. - * Connect red to +5V, Black or brown to GND and the last cable to Digital pin 3. - * The servo consumes much power and should probably have its own powersource.' - * The arduino might spontanally restart if too much power is used (happend - * to me when servo tried to pass the extreme positions = full load). - * http://www.mysensors.org/build/servo - */ - -// Enable debug prints to serial monitor -#define MY_DEBUG - -// Enable and select radio type attached -#define MY_RADIO_NRF24 -//#define MY_RADIO_RFM69 - -#include -#include -#include - -#define SERVO_DIGITAL_OUT_PIN 3 -#define SERVO_MIN 0 // Fine tune your servos min. 0-180 -#define SERVO_MAX 180 // Fine tune your servos max. 0-180 -#define DETACH_DELAY 900 // Tune this to let your movement finish before detaching the servo -#define CHILD_ID 10 // Id of the sensor child - -MyMessage msg(CHILD_ID, V_DIMMER); -Servo myservo; // create servo object to control a servo - // a maximum of eight servo objects can be created Sensor gw(9,10); -unsigned long timeOfLastChange = 0; -bool attachedServo = false; - -void setup() -{ - // Request last servo state at startup - request(CHILD_ID, V_DIMMER); -} - -void presentation() { - // Send the sketch version information to the gateway and Controller - sendSketchInfo("Servo", "1.0"); - - // Register all sensors to gw (they will be created as child devices) - present(CHILD_ID, S_COVER); -} - -void loop() -{ - if (attachedServo && millis() - timeOfLastChange > DETACH_DELAY) { - myservo.detach(); - attachedServo = false; - } -} - -void receive(const MyMessage &message) { - myservo.attach(SERVO_DIGITAL_OUT_PIN); - attachedServo = true; - if (message.type==V_DIMMER) { // This could be M_ACK_VARIABLE or M_SET_VARIABLE - int val = message.getInt(); - myservo.write(SERVO_MAX + (SERVO_MIN-SERVO_MAX)/100 * val); // sets the servo position 0-180 - // Write some debug info - Serial.print("Servo changed. new state: "); - Serial.println(val); - } else if (message.type==V_UP) { - Serial.println("Servo UP command"); - myservo.write(SERVO_MIN); - send(msg.set(100)); - } else if (message.type==V_DOWN) { - Serial.println("Servo DOWN command"); - myservo.write(SERVO_MAX); - send(msg.set(0)); - } else if (message.type==V_STOP) { - Serial.println("Servo STOP command"); - myservo.detach(); - attachedServo = false; - - } - timeOfLastChange = millis(); -} - - - diff --git a/libraries/MySensors/examples/TimeAwareSensor/TimeAwareSensor.ino b/libraries/MySensors/examples/TimeAwareSensor/TimeAwareSensor.ino deleted file mode 100644 index 92e7d24..0000000 --- a/libraries/MySensors/examples/TimeAwareSensor/TimeAwareSensor.ino +++ /dev/null @@ -1,98 +0,0 @@ -/** - * The MySensors Arduino library handles the wireless radio link and protocol - * between your home built sensors/actuators and HA controller of choice. - * The sensors forms a self healing radio network with optional repeaters. Each - * repeater and gateway builds a routing tables in EEPROM which keeps track of the - * network topology allowing messages to be routed to nodes. - * - * Created by Henrik Ekblad - * Copyright (C) 2013-2015 Sensnology AB - * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors - * - * Documentation: http://www.mysensors.org - * Support Forum: http://forum.mysensors.org - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 as published by the Free Software Foundation. - * - ******************************* - * - * REVISION HISTORY - * Version 1.0 - Henrik Ekblad - * - * DESCRIPTION - * Example sketch showing how to request time from controller. - */ - -// Enable debug prints to serial monitor -#define MY_DEBUG - -// Enable and select radio type attached -#define MY_RADIO_NRF24 -//#define MY_RADIO_RFM69 - -#include -#include -#include - -boolean timeReceived = false; -unsigned long lastUpdate=0, lastRequest=0; - -void setup() -{ - // Request time from controller. - requestTime(); -} - -void presentation() { - // Send the sketch version information to the gateway and Controller - sendSketchInfo("Clock", "1.0"); -} - -// This is called when a new time value was received -void receiveTime(unsigned long time) { - // Ok, set incoming time - setTime(time); - timeReceived = true; -} - -void loop() -{ - unsigned long now = millis(); - - // If no time has been received yet, request it every 10 second from controller - // When time has been received, request update every hour - if ((!timeReceived && (now-lastRequest) > (10UL*1000UL)) - || (timeReceived && (now-lastRequest) > (60UL*1000UL*60UL))) { - // Request time from controller. - Serial.println("requesting time"); - requestTime(); - lastRequest = now; - } - - // Print time every second - if (timeReceived && now-lastUpdate > 1000) { - Serial.print(hour()); - printDigits(minute()); - printDigits(second()); - Serial.print(" "); - Serial.print(day()); - Serial.print(" "); - Serial.print(month()); - Serial.print(" "); - Serial.print(year()); - Serial.println(); - lastUpdate = now; - } -} - -void printDigits(int digits){ - // utility function for digital clock display: prints preceding colon and leading 0 - Serial.print(":"); - if(digits < 10) - Serial.print('0'); - Serial.print(digits); -} - - diff --git a/libraries/MySensors/examples/TouchDisplaySceneControllerSensor/ArialNumFontPlus.c b/libraries/MySensors/examples/TouchDisplaySceneControllerSensor/ArialNumFontPlus.c deleted file mode 100644 index bbe7fd1..0000000 --- a/libraries/MySensors/examples/TouchDisplaySceneControllerSensor/ArialNumFontPlus.c +++ /dev/null @@ -1,22 +0,0 @@ -// SevenSegNumFontPlus.c -// Font type : Special (SubSet) -// Font size : 32x50 pixels -// Memory usage : 2204 bytes - -#include - -const uint8_t ArialNumFontPlus[2204] PROGMEM={ -0x20,0x32,0x30,0x0B, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xF0,0x00,0x00,0x1F,0xF8,0x00,0x00,0x7F,0xFE,0x00,0x00,0xFF,0xFF,0x00,0x01,0xFF,0xFF,0x00,0x03,0xF8,0x1F,0x80,0x03,0xF0,0x0F,0xC0,0x07,0xE0,0x07,0xC0,0x07,0xC0,0x03,0xE0,0x0F,0xC0,0x03,0xE0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF0,0x1F,0x00,0x00,0xF8,0x1F,0x00,0x00,0xF8,0x1F,0x00,0x00,0xF8,0x1F,0x00,0x00,0xF8,0x3F,0x00,0x00,0xFC,0x3E,0x00,0x00,0x7C,0x3E,0x00,0x00,0x7C,0x3E,0x00,0x00,0x7C,0x3E,0x00,0x00,0x7C,0x3E,0x00,0x00,0x7C,0x3E,0x00,0x00,0x7C,0x3E,0x00,0x00,0x7C,0x3E,0x00,0x00,0x7C,0x3E,0x00,0x00,0x7C,0x3E,0x00,0x00,0x7C,0x3F,0x00,0x00,0x7C,0x1F,0x00,0x00,0xF8,0x1F,0x00,0x00,0xF8,0x1F,0x00,0x00,0xF8,0x1F,0x00,0x00,0xF8,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x03,0xE0,0x07,0xC0,0x03,0xF0,0x0F,0xC0,0x01,0xF8,0x1F,0x80,0x00,0xFF,0xFF,0x00,0x00,0xFF,0xFE,0x00,0x00,0x7F,0xFC,0x00,0x00,0x1F,0xF8,0x00,0x00,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 0 neu -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x07,0xF0,0x00,0x00,0x0F,0xF0,0x00,0x00,0x1F,0xF0,0x00,0x00,0x3F,0xF0,0x00,0x00,0x7F,0xF0,0x00,0x01,0xFF,0xF0,0x00,0x03,0xFD,0xF0,0x00,0x0F,0xF1,0xF0,0x00,0x0F,0xE1,0xF0,0x00,0x0F,0x81,0xF0,0x00,0x0F,0x01,0xF0,0x00,0x0C,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //1 neu -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xF0,0x00,0x00,0x7F,0xFE,0x00,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0xC0,0x03,0xFF,0xFF,0xE0,0x07,0xE0,0x0F,0xF0,0x0F,0xC0,0x03,0xF0,0x0F,0x80,0x01,0xF0,0x1F,0x00,0x00,0xF8,0x1F,0x00,0x00,0xF8,0x3E,0x00,0x00,0xF8,0x3E,0x00,0x00,0x7C,0x3E,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x03,0xF0,0x00,0x00,0x07,0xF0,0x00,0x00,0x0F,0xE0,0x00,0x00,0x1F,0xC0,0x00,0x00,0x3F,0x80,0x00,0x00,0x7F,0x00,0x00,0x00,0xFE,0x00,0x00,0x01,0xFC,0x00,0x00,0x03,0xF8,0x00,0x00,0x07,0xF0,0x00,0x00,0x0F,0xE0,0x00,0x00,0x1F,0xC0,0x00,0x00,0x3F,0x80,0x00,0x00,0x7F,0x00,0x00,0x00,0xFE,0x00,0x00,0x01,0xFC,0x00,0x00,0x03,0xF8,0x00,0x00,0x07,0xF0,0x00,0x00,0x07,0xE0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x0F,0x80,0x00,0x00,0x1F,0x80,0x00,0x00,0x3F,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xFC,0x7F,0xFF,0xFF,0xFC,0x7F,0xFF,0xFF,0xFC,0x7F,0xFF,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 2 neu -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xF0,0x00,0x00,0x3F,0xFC,0x00,0x00,0xFF,0xFE,0x00,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x03,0xE0,0x1F,0xC0,0x07,0xC0,0x0F,0xC0,0x07,0x80,0x07,0xE0,0x0F,0x80,0x03,0xE0,0x0F,0x00,0x03,0xE0,0x0F,0x00,0x03,0xF0,0x0F,0x00,0x01,0xF0,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x07,0xE0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x1F,0xC0,0x00,0x00,0x3F,0x80,0x00,0x07,0xFF,0x00,0x00,0x07,0xFF,0x00,0x00,0x07,0xFF,0x00,0x00,0x07,0xFF,0x80,0x00,0x00,0x1F,0xC0,0x00,0x00,0x0F,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x01,0xF0,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0xFC,0x1F,0x00,0x00,0xFC,0x1F,0x00,0x00,0xFC,0x1F,0x00,0x00,0xF8,0x1F,0x00,0x01,0xF8,0x0F,0x80,0x01,0xF8,0x0F,0x80,0x03,0xF0,0x0F,0xC0,0x07,0xF0,0x07,0xE0,0x0F,0xE0,0x03,0xFC,0x3F,0xC0,0x01,0xFF,0xFF,0x80,0x00,0xFF,0xFF,0x00,0x00,0x7F,0xFC,0x00,0x00,0x0F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 3 neu -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0xFF,0x00,0x00,0x01,0xFF,0x00,0x00,0x01,0xFF,0x00,0x00,0x03,0xFF,0x00,0x00,0x07,0xDF,0x00,0x00,0x07,0xDF,0x00,0x00,0x0F,0x9F,0x00,0x00,0x0F,0x9F,0x00,0x00,0x1F,0x1F,0x00,0x00,0x3E,0x1F,0x00,0x00,0x7E,0x1F,0x00,0x00,0x7C,0x1F,0x00,0x00,0xF8,0x1F,0x00,0x00,0xF8,0x1F,0x00,0x01,0xF0,0x1F,0x00,0x03,0xE0,0x1F,0x00,0x03,0xE0,0x1F,0x00,0x07,0xC0,0x1F,0x00,0x07,0xC0,0x1F,0x00,0x0F,0x80,0x1F,0x00,0x1F,0x80,0x1F,0x00,0x1F,0x00,0x1F,0x00,0x3E,0x00,0x1F,0x00,0x3F,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xFC,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00, //4 neu -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xF0,0x01,0xFF,0xFF,0xF0,0x01,0xFF,0xFF,0xF0,0x01,0xFF,0xFF,0xF0,0x01,0xFF,0xFF,0xF0,0x03,0xE0,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0xF0,0x00,0x0F,0x8F,0xFE,0x00,0x0F,0xBF,0xFF,0x80,0x0F,0xFF,0xFF,0xC0,0x0F,0xFF,0xFF,0xE0,0x1F,0xFF,0x07,0xF0,0x1F,0xE0,0x03,0xF0,0x1F,0xC0,0x01,0xF8,0x1F,0x00,0x00,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x3F,0x00,0x00,0xF8,0x3F,0x00,0x00,0xF8,0x3F,0x00,0x00,0xF8,0x1F,0x00,0x00,0xF0,0x1F,0x00,0x01,0xF0,0x1F,0x80,0x03,0xE0,0x0F,0xC0,0x07,0xE0,0x07,0xE0,0x1F,0xC0,0x03,0xFF,0xFF,0x80,0x03,0xFF,0xFF,0x00,0x01,0xFF,0xFE,0x00,0x00,0x7F,0xF8,0x00,0x00,0x0F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 5 neu -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xF0,0x00,0x00,0x3F,0xFE,0x00,0x00,0xFF,0xFF,0x00,0x01,0xFF,0xFF,0x80,0x03,0xFF,0xFF,0xC0,0x07,0xE0,0x07,0xE0,0x07,0xC0,0x03,0xF0,0x0F,0xC0,0x01,0xF0,0x0F,0x80,0x00,0xF8,0x1F,0x80,0x00,0xF8,0x1F,0x80,0x00,0xF8,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x03,0xF0,0x00,0x3F,0x1F,0xFC,0x00,0x3F,0x7F,0xFE,0x00,0x3F,0xFF,0xFF,0x80,0x3F,0xFF,0xFF,0xC0,0x3F,0xF8,0x0F,0xE0,0x3F,0xE0,0x03,0xF0,0x3F,0xE0,0x03,0xF0,0x3F,0xC0,0x01,0xF8,0x3F,0x80,0x00,0xF8,0x3F,0x80,0x00,0xF8,0x3F,0x00,0x00,0x7C,0x3F,0x00,0x00,0x7C,0x3F,0x00,0x00,0x7C,0x3F,0x00,0x00,0x7C,0x3F,0x00,0x00,0x7C,0x3F,0x00,0x00,0x7C,0x1F,0x00,0x00,0x7C,0x1F,0x80,0x00,0x78,0x1F,0x80,0x00,0xF8,0x1F,0x80,0x00,0xF8,0x0F,0x80,0x00,0xF8,0x0F,0xC0,0x01,0xF0,0x07,0xF0,0x03,0xF0,0x03,0xF8,0x0F,0xE0,0x01,0xFF,0xFF,0xC0,0x00,0xFF,0xFF,0x80,0x00,0x7F,0xFF,0x00,0x00,0x1F,0xFC,0x00,0x00,0x03,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 6 neu -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xFC,0x3F,0xFF,0xFF,0xFC,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0xFC,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x07,0xC0,0x00,0x00,0x0F,0x80,0x00,0x00,0x1F,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x01,0xF0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xE0,0x00,0x00,0x07,0xC0,0x00,0x00,0x07,0xC0,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x0F,0x80,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 7 neu -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xF0,0x00,0x00,0x7F,0xFE,0x00,0x00,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x80,0x03,0xF8,0x1F,0xC0,0x07,0xE0,0x07,0xE0,0x07,0xC0,0x03,0xE0,0x0F,0xC0,0x03,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x01,0xF0,0x07,0xC0,0x03,0xE0,0x07,0xC0,0x03,0xE0,0x03,0xE0,0x07,0xC0,0x01,0xF0,0x07,0x80,0x00,0xFC,0x3F,0x00,0x00,0x7F,0xFF,0x00,0x00,0x3F,0xFC,0x00,0x00,0x7F,0xFE,0x00,0x00,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0xC0,0x07,0xF0,0x0F,0xE0,0x0F,0xC0,0x03,0xF0,0x0F,0x80,0x01,0xF0,0x1F,0x80,0x01,0xF8,0x1F,0x00,0x00,0xF8,0x1F,0x00,0x00,0xF8,0x3E,0x00,0x00,0x7C,0x3E,0x00,0x00,0x7C,0x3E,0x00,0x00,0x7C,0x3E,0x00,0x00,0x7C,0x3E,0x00,0x00,0x7C,0x3E,0x00,0x00,0x7C,0x1F,0x00,0x00,0xF8,0x1F,0x00,0x00,0xF8,0x0F,0x80,0x01,0xF0,0x0F,0x80,0x03,0xF0,0x07,0xC0,0x07,0xE0,0x03,0xF0,0x0F,0xC0,0x01,0xFF,0xFF,0x80,0x00,0xFF,0xFF,0x00,0x00,0x3F,0xFC,0x00,0x00,0x0F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 8 neu -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xF0,0x00,0x00,0x3F,0xFC,0x00,0x00,0xFF,0xFF,0x00,0x01,0xFF,0xFF,0x80,0x03,0xFF,0xFF,0xC0,0x03,0xF8,0x1F,0xE0,0x07,0xE0,0x07,0xE0,0x07,0xE0,0x07,0xF0,0x0F,0xC0,0x03,0xF0,0x0F,0xC0,0x03,0xF8,0x1F,0x80,0x01,0xF8,0x1F,0x80,0x01,0xF8,0x1F,0x00,0x00,0xFC,0x1F,0x00,0x00,0xFC,0x1F,0x00,0x00,0xFC,0x1F,0x00,0x00,0xFC,0x1F,0x00,0x00,0xFC,0x1F,0x00,0x00,0xFC,0x1F,0x80,0x01,0xFC,0x1F,0x80,0x01,0xFC,0x0F,0xC0,0x03,0xFC,0x0F,0xC0,0x03,0xFC,0x07,0xE0,0x07,0xFC,0x07,0xE0,0x07,0xFC,0x03,0xF8,0x1F,0xFC,0x01,0xFF,0xFF,0xFC,0x00,0xFF,0xFF,0xFC,0x00,0xFF,0xFE,0xFC,0x00,0x7F,0xF8,0xFC,0x00,0x1F,0xE0,0xFC,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0xFC,0x00,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF0,0x1F,0x00,0x03,0xF0,0x1F,0x80,0x07,0xE0,0x0F,0xC0,0x0F,0xE0,0x0F,0xE0,0x3F,0xC0,0x07,0xFF,0xFF,0x80,0x03,0xFF,0xFF,0x00,0x01,0xFF,0xFE,0x00,0x00,0xFF,0xF8,0x00,0x00,0x3F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 9 neu -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x01,0xF0,0x00,0x00,0x03,0xF8,0x00,0x00,0x03,0xF8,0x00,0x00,0x03,0xF8,0x00,0x00,0x01,0xF0,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x01,0xF0,0x00,0x00,0x03,0xF8,0x00,0x00,0x03,0xF8,0x00,0x00,0x03,0xF8,0x00,0x00,0x01,0xF0,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // : -}; diff --git a/libraries/MySensors/examples/TouchDisplaySceneControllerSensor/TouchDisplaySceneControllerSensor.ino b/libraries/MySensors/examples/TouchDisplaySceneControllerSensor/TouchDisplaySceneControllerSensor.ino deleted file mode 100644 index 1c1a9b0..0000000 --- a/libraries/MySensors/examples/TouchDisplaySceneControllerSensor/TouchDisplaySceneControllerSensor.ino +++ /dev/null @@ -1,201 +0,0 @@ -/** - * The MySensors Arduino library handles the wireless radio link and protocol - * between your home built sensors/actuators and HA controller of choice. - * The sensors forms a self healing radio network with optional repeaters. Each - * repeater and gateway builds a routing tables in EEPROM which keeps track of the - * network topology allowing messages to be routed to nodes. - * - * Created by Henrik Ekblad - * Copyright (C) 2013-2015 Sensnology AB - * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors - * - * Documentation: http://www.mysensors.org - * Support Forum: http://forum.mysensors.org - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 as published by the Free Software Foundation. - * - ******************************* - * - * REVISION HISTORY - * Version 1.0 - Henrik Ekblad - * - * DESCRIPTION - * http://www.mysensors.org/build/scene_controller - * Touch Display Scene Controller build using a touch enabled tft display - * attached to a ATMega 2560. This example fetches time from controller and sends - * in scene commands to the controller. - * Short press sends V_SCENE_ON and long press (>0.5sec) sends V_SCENE_OFF. - * - * Henrik Ekblad - * - * This example uses: - * UTFT library: http://www.henningkarlsen.com/electronics/library.php?id=51 - * Convert your own images here: http://www.henningkarlsen.com/electronics/t_imageconverter565.php - * - * The 3v3 output on the ATMega2560 is especially bad. I had to use a step down - * on the 5V output to get solid transmissions. - * - * - * Connect radio - * ---------------------------------- - * Radio Arduino Pin - * ---------------------------------- - * GND GND - * 5V -> Step down -> 3V3 (see buying guide for help finding step-down) - * SCK 14 - * MOSI 15 - * MISO 16 - * CE 17 - * CSN 18 - * - */ - -// Enable debug prints to serial monitor -#define MY_DEBUG - -// Enable soft spi as radio has a hard time sharing spi -#define MY_SOFTSPI - -// Enable and select radio type attached -#define MY_RADIO_NRF24 -//#define MY_RADIO_RFM69 - -#include -#include -#include -#include -#include -#include -#include -#include -#include "arial_bold.c" -#include "ArialNumFontPlus.c" -#include "logo.c" - -#define CHILD_ID 1 - -int LONG_PRESS = 500; // Number of millisecons to trinnger scene off for button push -int RESEND_DEBOUNCE = 2000; // Number of millisecons interval between sending of same - // scene number again. - // This is used to avoid unwanted re-trigger when using - // a sensetive touch diplay. - -// Add your buttons here. Max is 5 if you still want time at the top. -char *buttons[] = { - (char *)"Good Morning", - (char *)"Clean Up!", - (char *)"All Lights Off", - (char *)"Music On/Off" - }; - -const int buttonCount = sizeof(buttons)/sizeof(char *); -const int padding = 10; -const int topBarHeight = 60; - -MyMessage on(CHILD_ID, V_SCENE_ON); -MyMessage off(CHILD_ID, V_SCENE_OFF); - -UTFT myGLCD(ITDB32S,38,39,40,41); -UTouch myTouch( 6, 5, 4, 3, 2); -UTFT_Buttons myButtons(&myGLCD, &myTouch); -boolean timeReceived = false; -unsigned long lastTimeUpdate=0, lastRequest=0; -char timeBuf[20]; - - -void setup() -{ - myGLCD.InitLCD(); - myGLCD.clrScr(); - myGLCD.setFont((uint8_t*)ArialNumFontPlus); - myGLCD.setColor(100, 255, 100); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawBitmap (0, 0, 60, 60, (unsigned int*)logo); - - myTouch.InitTouch(); - myTouch.setPrecision(PREC_MEDIUM); - - myButtons.setButtonColors(VGA_WHITE, VGA_GRAY, VGA_WHITE, VGA_RED, VGA_BLUE); - myButtons.setTextFont((uint8_t*)arial_bold); - int height = (myGLCD.getDisplayYSize()-topBarHeight-(padding*(buttonCount+2)))/buttonCount; - - // Add buttons - for (int i=0; i=0) { - bool longPress = millis()-now>(unsigned long)LONG_PRESS; - - if (pressedButton != lastPressedButton || now-lastPressedButtonTime > (unsigned long)RESEND_DEBOUNCE) { - if (longPress) { - send(off.set(pressedButton)); - Serial.print("Long pressed: "); - } else { - send(on.set(pressedButton)); - Serial.print("Pressed: "); - } - Serial.println(pressedButton); - lastPressedButton = pressedButton; - lastPressedButtonTime=now; - } - } - } - - // If no time has been received yet, request it every 10 second from controller - // When time has been received, request update every hour - if ((!timeReceived && now-lastRequest > (unsigned long)10*1000) - || (timeReceived && now-lastRequest > (unsigned long)60*1000*60)) { - // Request time from controller. - Serial.println("requesting time"); - requestTime(); - lastRequest = now; - } - - // Update time every second - if (timeReceived && now-lastTimeUpdate > 1000) { - printTime(); - lastTimeUpdate = now; - } -} - - - -// This is called when a new time value was received -void receiveTime(unsigned long time) { - // Ok, set incoming time - setTime(time); - timeReceived = true; -} - -void printTime() { - sprintf(timeBuf, "%02d:%02d:%02d", hour(), minute(), second()); - myGLCD.print(timeBuf, 60,7); -} - - diff --git a/libraries/MySensors/examples/TouchDisplaySceneControllerSensor/Ubuntu.c b/libraries/MySensors/examples/TouchDisplaySceneControllerSensor/Ubuntu.c deleted file mode 100644 index 4d7ce1c..0000000 --- a/libraries/MySensors/examples/TouchDisplaySceneControllerSensor/Ubuntu.c +++ /dev/null @@ -1,110 +0,0 @@ -// Ubuntu.c -// Font type : Full (95 characters) -// Font size : 24x32 pixels -// Memory usage : 9124 bytes - -#include - -const uint8_t Ubuntu[9124] PROGMEM={ -0x18,0x20,0x20,0x5F, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // -0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x3E,0x00,0x00,0x3E,0x00,0x00,0x3E,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ! -0x00,0x00,0x00,0x01,0xC0,0xE0,0x03,0xE1,0xF0,0x03,0xE1,0xF0,0x03,0xE1,0xF0,0x01,0xE0,0xF0,0x00,0xE0,0x70,0x01,0xC0,0xE0,0x03,0xC1,0xE0,0x0F,0x87,0xC0,0x0E,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // " -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x70,0x00,0x38,0x70,0x00,0x70,0xE0,0x00,0x70,0xE0,0x00,0x70,0xE0,0x00,0x70,0xE0,0x0F,0xFF,0xF8,0x0F,0xFF,0xF8,0x0F,0xFF,0xF8,0x00,0xE1,0xC0,0x00,0xE1,0xC0,0x00,0xE1,0xC0,0x01,0xC3,0x80,0x01,0xC3,0x80,0x01,0xC3,0x80,0x0F,0xFF,0xF8,0x0F,0xFF,0xF8,0x0F,0xFF,0xF8,0x03,0x87,0x00,0x03,0x87,0x00,0x03,0x87,0x00,0x03,0x87,0x00,0x07,0x0E,0x00,0x07,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // # -0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x7F,0x00,0x01,0xFF,0xC0,0x03,0xFF,0xC0,0x07,0x80,0x80,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x80,0x00,0x03,0xC0,0x00,0x03,0xF8,0x00,0x01,0xFE,0x00,0x00,0x7F,0x80,0x00,0x0F,0xC0,0x00,0x03,0xC0,0x00,0x01,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x02,0x01,0xC0,0x07,0xFF,0xC0,0x07,0xFF,0x80,0x01,0xFE,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x00,0x00, // $ -0x00,0x00,0x00,0x07,0x80,0x70,0x0F,0xC0,0xE0,0x0C,0xC0,0xE0,0x18,0x61,0xC0,0x18,0x63,0x80,0x18,0x63,0x80,0x18,0x67,0x00,0x18,0x67,0x00,0x18,0x6E,0x00,0x0C,0xDC,0x00,0x0F,0xDC,0x00,0x07,0xB8,0x00,0x00,0x3B,0xC0,0x00,0x77,0xE0,0x00,0x76,0x60,0x00,0xEC,0x30,0x01,0xCC,0x30,0x01,0xCC,0x30,0x03,0x8C,0x30,0x03,0x8C,0x30,0x07,0x0C,0x30,0x0E,0x06,0x60,0x0E,0x07,0xE0,0x1C,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // % -0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0xFF,0x00,0x01,0xFF,0x00,0x03,0xC7,0x80,0x03,0x83,0x80,0x03,0x83,0x80,0x03,0x83,0x80,0x03,0x87,0x00,0x01,0xCF,0x00,0x01,0xFE,0x00,0x00,0xFC,0x00,0x01,0xF0,0x70,0x03,0xF8,0x70,0x03,0xBC,0x70,0x07,0x1E,0x60,0x0E,0x0F,0xE0,0x0E,0x07,0xE0,0x0E,0x03,0xC0,0x0E,0x01,0xC0,0x0F,0x03,0xE0,0x07,0x8F,0xE0,0x07,0xFF,0x70,0x03,0xFE,0x70,0x00,0xF8,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // & -0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x3C,0x00,0x00,0x1E,0x00,0x00,0x0E,0x00,0x00,0x07,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ' -0x00,0x07,0x00,0x00,0x0F,0x80,0x00,0x0F,0x00,0x00,0x1E,0x00,0x00,0x3C,0x00,0x00,0x38,0x00,0x00,0x70,0x00,0x00,0x70,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0x70,0x00,0x00,0x70,0x00,0x00,0x38,0x00,0x00,0x3C,0x00,0x00,0x1E,0x00,0x00,0x0F,0x00,0x00,0x07,0x80,0x00,0x03,0x00,0x00,0x01,0x00, // ( -0x00,0x60,0x00,0x00,0xF0,0x00,0x00,0x78,0x00,0x00,0x3C,0x00,0x00,0x1E,0x00,0x00,0x0E,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x0E,0x00,0x00,0x1E,0x00,0x00,0x3C,0x00,0x00,0x78,0x00,0x00,0xF0,0x00,0x00,0x60,0x00,0x00,0x40,0x00, // ) -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x02,0x1C,0x20,0x03,0xC9,0xE0,0x07,0xFF,0xF0,0x01,0xFF,0xC0,0x00,0x1C,0x00,0x00,0x36,0x00,0x00,0x77,0x00,0x00,0xF3,0x80,0x01,0xE3,0xC0,0x00,0xE3,0x80,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // * -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x0F,0xFF,0xE0,0x0F,0xFF,0xE0,0x0F,0xFF,0xE0,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // + -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x1F,0x00,0x00,0x1F,0x00,0x00,0x1F,0x00,0x00,0x0F,0x00,0x00,0x07,0x00,0x00,0x0E,0x00,0x00,0x1C,0x00,0x00,0x78,0x00,0x00,0x70,0x00,0x00,0x00,0x00, // , -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0xFF,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // - -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x3E,0x00,0x00,0x3E,0x00,0x00,0x3E,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // . -0x00,0x01,0xC0,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x70,0x00,0x00,0x70,0x00,0x00,0x70,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x07,0x00,0x00,0x07,0x00,0x00, // / - -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x01,0xFF,0x00,0x03,0xFF,0x80,0x03,0xC7,0x80,0x07,0x83,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x30,0xE0,0x0E,0x78,0xE0,0x0E,0x78,0xE0,0x0E,0x78,0xE0,0x0E,0x30,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x83,0xC0,0x03,0xC7,0x80,0x03,0xFF,0x80,0x01,0xFF,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 0 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x7C,0x00,0x00,0xFC,0x00,0x03,0xFC,0x00,0x07,0x9C,0x00,0x02,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x03,0xFF,0xC0,0x03,0xFF,0xC0,0x03,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 1 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x00,0x03,0xFF,0x00,0x07,0xFF,0x80,0x07,0x87,0xC0,0x02,0x03,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x03,0x80,0x00,0x07,0x80,0x00,0x07,0x00,0x00,0x0E,0x00,0x00,0x1C,0x00,0x00,0x38,0x00,0x00,0x70,0x00,0x00,0xE0,0x00,0x01,0xC0,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x07,0x00,0x00,0x07,0xFF,0xE0,0x07,0xFF,0xE0,0x07,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 2 -0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFC,0x00,0x0F,0xFF,0x00,0x0F,0xFF,0x80,0x06,0x07,0x80,0x00,0x03,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x03,0xC0,0x00,0x07,0x80,0x00,0xFF,0x00,0x00,0xFF,0x00,0x00,0xFF,0x80,0x00,0x07,0xC0,0x00,0x01,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x01,0xE0,0x04,0x03,0xC0,0x0F,0xFF,0x80,0x0F,0xFF,0x00,0x03,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 3 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x0F,0x80,0x00,0x1F,0x80,0x00,0x3F,0x80,0x00,0x3B,0x80,0x00,0x73,0x80,0x00,0xF3,0x80,0x01,0xE3,0x80,0x01,0xC3,0x80,0x03,0x83,0x80,0x03,0x83,0x80,0x07,0x03,0x80,0x0F,0x03,0x80,0x0E,0x03,0x80,0x1E,0x03,0x80,0x1F,0xFF,0xF0,0x1F,0xFF,0xF0,0x1F,0xFF,0xF0,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 4 -0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0x80,0x03,0xFF,0x80,0x03,0xFF,0x80,0x03,0x00,0x00,0x03,0x00,0x00,0x03,0x00,0x00,0x03,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0xF0,0x00,0x07,0xFE,0x00,0x07,0xFF,0x00,0x00,0x1F,0x80,0x00,0x07,0x80,0x00,0x03,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x03,0xC0,0x0C,0x07,0x80,0x0F,0xFF,0x00,0x0F,0xFE,0x00,0x03,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 5 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x00,0x1F,0xC0,0x00,0x7F,0xC0,0x00,0xFC,0x00,0x01,0xE0,0x00,0x03,0xC0,0x00,0x03,0x80,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x06,0x7E,0x00,0x0F,0xFF,0x80,0x0F,0xFF,0xC0,0x0F,0x03,0xC0,0x0E,0x01,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x07,0x00,0xE0,0x07,0x01,0xC0,0x07,0xC3,0xC0,0x03,0xFF,0x80,0x01,0xFF,0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 6 -0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xE0,0x0F,0xFF,0xE0,0x0F,0xFF,0xE0,0x00,0x00,0xE0,0x00,0x01,0xC0,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x70,0x00,0x00,0x70,0x00,0x00,0x70,0x00,0x00,0x70,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 7 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x01,0xFF,0x00,0x03,0xFF,0x80,0x03,0xC7,0xC0,0x07,0x03,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x81,0xC0,0x03,0xC3,0x80,0x03,0xF7,0x00,0x01,0xFE,0x00,0x01,0xFF,0x80,0x03,0xCF,0xC0,0x07,0x03,0xC0,0x06,0x01,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0F,0x01,0xE0,0x07,0x83,0xC0,0x07,0xFF,0xC0,0x03,0xFF,0x80,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 8 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x00,0x01,0xFF,0x00,0x03,0xFF,0x80,0x07,0x87,0xC0,0x07,0x01,0xC0,0x0E,0x01,0xC0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0F,0x00,0xE0,0x07,0x81,0xE0,0x07,0xFF,0xE0,0x03,0xFF,0xE0,0x00,0xFE,0xE0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x03,0xC0,0x00,0x07,0x80,0x00,0x0F,0x00,0x00,0x7E,0x00,0x07,0xFC,0x00,0x07,0xF8,0x00,0x07,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 9 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // : -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x3C,0x00,0x00,0x1C,0x00,0x00,0x38,0x00,0x00,0x70,0x00,0x01,0xE0,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ; -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x01,0xE0,0x00,0x0F,0xE0,0x00,0x3F,0xC0,0x00,0xFE,0x00,0x03,0xF8,0x00,0x0F,0xC0,0x00,0x0F,0x00,0x00,0x0F,0xC0,0x00,0x07,0xF8,0x00,0x00,0xFE,0x00,0x00,0x3F,0xC0,0x00,0x0F,0xE0,0x00,0x01,0xE0,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // < -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xE0,0x0F,0xFF,0xE0,0x0F,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xE0,0x0F,0xFF,0xE0,0x0F,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // = -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x0F,0x00,0x00,0x0F,0xE0,0x00,0x07,0xF8,0x00,0x00,0xFE,0x00,0x00,0x3F,0x80,0x00,0x07,0xE0,0x00,0x01,0xE0,0x00,0x07,0xE0,0x00,0x3F,0xC0,0x00,0xFE,0x00,0x07,0xF8,0x00,0x0F,0xE0,0x00,0x0F,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // > -0x00,0x00,0x00,0x00,0xFE,0x00,0x03,0xFF,0x80,0x03,0xFF,0xC0,0x01,0x03,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x01,0xC0,0x00,0x03,0x80,0x00,0x07,0x00,0x00,0x0E,0x00,0x00,0x1C,0x00,0x00,0x3C,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ? - -0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0xFF,0x80,0x01,0xFF,0xC0,0x01,0xE1,0xE0,0x03,0x80,0xE0,0x03,0x80,0x70,0x07,0x00,0x70,0x07,0x00,0x70,0x07,0x07,0xF0,0x0E,0x1F,0xF0,0x0E,0x3F,0xF0,0x0E,0x3C,0x70,0x0E,0x78,0x70,0x0E,0x70,0x70,0x0E,0x70,0x70,0x0E,0x70,0x70,0x0E,0x70,0x70,0x0E,0x78,0x70,0x0E,0x38,0x70,0x07,0x3F,0xF0,0x07,0x1F,0xF0,0x07,0x07,0xE0,0x07,0x80,0x00,0x03,0xC0,0x00,0x03,0xC0,0x00,0x01,0xF0,0x00,0x00,0xFF,0xC0,0x00,0x7F,0xC0,0x00,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, // @ -0x00,0x00,0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00,0xFF,0x00,0x00,0xF7,0x00,0x00,0xE7,0x00,0x00,0xE7,0x00,0x01,0xE7,0x80,0x01,0xC3,0x80,0x01,0xC3,0x80,0x03,0xC3,0xC0,0x03,0xC1,0xC0,0x03,0x81,0xC0,0x03,0x81,0xC0,0x07,0x81,0xE0,0x07,0xFF,0xE0,0x07,0xFF,0xE0,0x07,0xFF,0xE0,0x0F,0x00,0xF0,0x0E,0x00,0x70,0x0E,0x00,0x70,0x0E,0x00,0x70,0x1E,0x00,0x78,0x1C,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // A -0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFC,0x00,0x0F,0xFF,0x00,0x0F,0xFF,0x80,0x0E,0x07,0xC0,0x0E,0x03,0xC0,0x0E,0x01,0xC0,0x0E,0x01,0xC0,0x0E,0x01,0xC0,0x0E,0x03,0x80,0x0E,0x07,0x80,0x0F,0xFF,0x00,0x0F,0xFF,0x00,0x0F,0xFF,0x80,0x0E,0x03,0xC0,0x0E,0x01,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x01,0xE0,0x0E,0x07,0xC0,0x0F,0xFF,0xC0,0x0F,0xFF,0x00,0x0F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // B -0x00,0x00,0x00,0x00,0x3F,0x80,0x00,0x7F,0xE0,0x01,0xFF,0xE0,0x03,0xE0,0x40,0x03,0xC0,0x00,0x07,0x80,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x0F,0x00,0x00,0x07,0x00,0x00,0x07,0x80,0x00,0x03,0xC0,0x00,0x03,0xE0,0x40,0x01,0xFF,0xE0,0x00,0xFF,0xE0,0x00,0x3F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // C -0x00,0x00,0x00,0x0F,0xF0,0x00,0x0F,0xFE,0x00,0x0F,0xFF,0x00,0x0E,0x0F,0x80,0x0E,0x03,0x80,0x0E,0x03,0xC0,0x0E,0x01,0xC0,0x0E,0x01,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x01,0xE0,0x0E,0x01,0xC0,0x0E,0x03,0xC0,0x0E,0x03,0x80,0x0E,0x0F,0x80,0x0F,0xFF,0x00,0x0F,0xFE,0x00,0x0F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // D -0x00,0x00,0x00,0x07,0xFF,0xC0,0x07,0xFF,0xC0,0x07,0xFF,0xC0,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0xFF,0x80,0x07,0xFF,0x80,0x07,0xFF,0x80,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0xFF,0xE0,0x07,0xFF,0xE0,0x07,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // E -0x00,0x00,0x00,0x07,0xFF,0xE0,0x07,0xFF,0xE0,0x07,0xFF,0xE0,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0xFF,0xC0,0x07,0xFF,0xC0,0x07,0xFF,0xC0,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // F -0x00,0x00,0x00,0x00,0x3F,0x80,0x00,0xFF,0xC0,0x01,0xFF,0xE0,0x03,0xE0,0xC0,0x03,0xC0,0x40,0x07,0x80,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0F,0x00,0xE0,0x07,0x00,0xE0,0x07,0x80,0xE0,0x03,0xC0,0xE0,0x03,0xE0,0xE0,0x01,0xFF,0xE0,0x00,0xFF,0xE0,0x00,0x3F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // G -0x00,0x00,0x00,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0F,0xFF,0xE0,0x0F,0xFF,0xE0,0x0F,0xFF,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // H -0x00,0x00,0x00,0x07,0xFF,0xC0,0x07,0xFF,0xC0,0x07,0xFF,0xC0,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x07,0xFF,0xC0,0x07,0xFF,0xC0,0x07,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // I -0x00,0x00,0x00,0x01,0xFF,0xC0,0x01,0xFF,0xC0,0x01,0xFF,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x04,0x03,0xC0,0x07,0x07,0x80,0x0F,0xFF,0x00,0x07,0xFE,0x00,0x01,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // J -0x00,0x00,0x00,0x0E,0x01,0xE0,0x0E,0x03,0xC0,0x0E,0x03,0x80,0x0E,0x07,0x80,0x0E,0x0F,0x00,0x0E,0x0E,0x00,0x0E,0x1C,0x00,0x0E,0x3C,0x00,0x0E,0x78,0x00,0x0E,0xF0,0x00,0x0F,0xE0,0x00,0x0F,0xE0,0x00,0x0F,0xF0,0x00,0x0E,0xF8,0x00,0x0E,0x7C,0x00,0x0E,0x3E,0x00,0x0E,0x1E,0x00,0x0E,0x0F,0x00,0x0E,0x07,0x80,0x0E,0x03,0xC0,0x0E,0x03,0xC0,0x0E,0x01,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // K -0x00,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0xFF,0xE0,0x07,0xFF,0xE0,0x07,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // L -0x00,0x00,0x00,0x03,0x00,0x60,0x03,0x80,0xF0,0x07,0x80,0xF0,0x07,0x80,0xF0,0x06,0xC1,0xB0,0x06,0xC1,0xB0,0x06,0xE3,0xB0,0x06,0x63,0x30,0x06,0x63,0x30,0x06,0x77,0x30,0x06,0x36,0x30,0x06,0x36,0x30,0x06,0x3E,0x30,0x06,0x1C,0x38,0x0E,0x1C,0x38,0x0E,0x00,0x38,0x0E,0x00,0x38,0x0E,0x00,0x38,0x0E,0x00,0x38,0x0E,0x00,0x38,0x0E,0x00,0x38,0x0E,0x00,0x38,0x0E,0x00,0x38,0x0E,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // M -0x00,0x00,0x00,0x07,0x80,0x70,0x07,0xC0,0x70,0x07,0xC0,0x70,0x07,0xE0,0x70,0x07,0xE0,0x70,0x07,0xF0,0x70,0x07,0x70,0x70,0x07,0x70,0x70,0x07,0x38,0x70,0x07,0x38,0x70,0x07,0x1C,0x70,0x07,0x1C,0x70,0x07,0x0E,0x70,0x07,0x0E,0x70,0x07,0x06,0x70,0x07,0x07,0x70,0x07,0x07,0x70,0x07,0x03,0xF0,0x07,0x03,0xF0,0x07,0x01,0xF0,0x07,0x01,0xF0,0x07,0x00,0xF0,0x07,0x00,0xF0,0x07,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // N -0x00,0x00,0x00,0x00,0x7C,0x00,0x01,0xFF,0x00,0x03,0xFF,0x80,0x07,0x83,0xC0,0x0F,0x01,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x1C,0x00,0xF0,0x1C,0x00,0x70,0x1C,0x00,0x70,0x1C,0x00,0x70,0x1C,0x00,0x70,0x1C,0x00,0x70,0x1C,0x00,0x70,0x1C,0x00,0x70,0x1C,0x00,0x70,0x1C,0x00,0xF0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0F,0x01,0xE0,0x07,0x83,0xC0,0x03,0xFF,0x80,0x01,0xFF,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // O - -0x00,0x00,0x00,0x07,0xFC,0x00,0x07,0xFF,0x00,0x07,0xFF,0x80,0x07,0x03,0xC0,0x07,0x01,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x01,0xE0,0x07,0x03,0xC0,0x07,0xFF,0x80,0x07,0xFF,0x00,0x07,0xFC,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // P -0x00,0x00,0x00,0x00,0x7C,0x00,0x01,0xFF,0x00,0x03,0xFF,0x80,0x07,0x83,0xC0,0x0F,0x01,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x1C,0x00,0xF0,0x1C,0x00,0x70,0x1C,0x00,0x70,0x1C,0x00,0x70,0x1C,0x00,0x70,0x1C,0x00,0x70,0x1C,0x00,0x70,0x1C,0x00,0x70,0x1C,0x00,0x70,0x1C,0x00,0xF0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0F,0x01,0xE0,0x07,0x83,0xC0,0x03,0xFF,0x80,0x01,0xFF,0x00,0x00,0xFE,0x00,0x00,0x38,0x00,0x00,0x3C,0x00,0x00,0x1F,0x00,0x00,0x0F,0xE0,0x00,0x07,0xE0,0x00,0x00,0xC0,0x00,0x00,0x00, // Q -0x00,0x00,0x00,0x0F,0xF8,0x00,0x0F,0xFE,0x00,0x0F,0xFF,0x00,0x0E,0x07,0x80,0x0E,0x03,0xC0,0x0E,0x01,0xC0,0x0E,0x01,0xC0,0x0E,0x01,0xC0,0x0E,0x01,0xC0,0x0E,0x01,0xC0,0x0E,0x03,0x80,0x0E,0x07,0x80,0x0F,0xFF,0x00,0x0F,0xFE,0x00,0x0F,0xFC,0x00,0x0E,0x1E,0x00,0x0E,0x0E,0x00,0x0E,0x07,0x00,0x0E,0x07,0x00,0x0E,0x03,0x80,0x0E,0x03,0x80,0x0E,0x01,0xC0,0x0E,0x01,0xC0,0x0E,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // R -0x00,0x00,0x00,0x00,0x7F,0x00,0x01,0xFF,0xC0,0x03,0xFF,0xC0,0x03,0xC0,0x80,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x80,0x00,0x03,0xE0,0x00,0x01,0xF8,0x00,0x00,0xFE,0x00,0x00,0x3F,0x80,0x00,0x0F,0xC0,0x00,0x03,0xC0,0x00,0x01,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x04,0x01,0xE0,0x0F,0x03,0xC0,0x0F,0xFF,0xC0,0x07,0xFF,0x80,0x01,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // S -0x00,0x00,0x00,0x0F,0xFF,0xE0,0x0F,0xFF,0xE0,0x0F,0xFF,0xE0,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // T -0x00,0x00,0x00,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0F,0x01,0xE0,0x07,0x01,0xC0,0x07,0x83,0xC0,0x03,0xFF,0x80,0x01,0xFF,0x00,0x00,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // U -0x00,0x00,0x00,0x1C,0x00,0x70,0x1C,0x00,0x70,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x03,0x83,0x80,0x03,0x83,0x80,0x03,0x83,0x80,0x03,0x87,0x80,0x01,0xC7,0x00,0x01,0xC7,0x00,0x01,0xC7,0x00,0x00,0xEE,0x00,0x00,0xEE,0x00,0x00,0xEE,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // V -0x00,0x00,0x00,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x38,0xE0,0x0E,0x38,0xE0,0x0E,0x38,0xE0,0x0E,0x6C,0xE0,0x0E,0x6C,0xE0,0x0E,0x6C,0xE0,0x0E,0xC6,0xE0,0x0E,0xC6,0xE0,0x0E,0xC6,0xE0,0x0F,0x83,0xE0,0x0F,0x83,0xE0,0x0F,0x83,0xE0,0x0F,0x01,0xE0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // W -0x00,0x00,0x00,0x1E,0x00,0xF0,0x0E,0x00,0xE0,0x0F,0x01,0xE0,0x07,0x01,0xC0,0x03,0x83,0x80,0x03,0x83,0x80,0x01,0xC7,0x00,0x01,0xEF,0x00,0x00,0xEE,0x00,0x00,0xFE,0x00,0x00,0x7C,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x7C,0x00,0x00,0xFE,0x00,0x00,0xEE,0x00,0x01,0xC7,0x00,0x03,0xC7,0x80,0x03,0x83,0x80,0x07,0x83,0xC0,0x07,0x01,0xC0,0x0F,0x01,0xE0,0x0E,0x00,0xE0,0x1E,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // X -0x00,0x00,0x00,0x1C,0x00,0x70,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0F,0x01,0xE0,0x07,0x01,0xC0,0x07,0x83,0xC0,0x03,0x83,0x80,0x03,0xC3,0x80,0x01,0xC7,0x00,0x01,0xEF,0x00,0x00,0xEE,0x00,0x00,0xFE,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Y -0x00,0x00,0x00,0x07,0xFF,0xE0,0x07,0xFF,0xE0,0x07,0xFF,0xE0,0x00,0x01,0xC0,0x00,0x03,0xC0,0x00,0x03,0x80,0x00,0x07,0x00,0x00,0x0F,0x00,0x00,0x0E,0x00,0x00,0x1E,0x00,0x00,0x3C,0x00,0x00,0x38,0x00,0x00,0x78,0x00,0x00,0x70,0x00,0x00,0xE0,0x00,0x01,0xE0,0x00,0x01,0xC0,0x00,0x03,0xC0,0x00,0x03,0x80,0x00,0x07,0x80,0x00,0x07,0x00,0x00,0x0F,0xFF,0xE0,0x0F,0xFF,0xE0,0x0F,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Z -0x01,0xFF,0x00,0x01,0xFF,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xFF,0x00,0x01,0xFF,0x00, // [ -0x03,0x80,0x00,0x03,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0x70,0x00,0x00,0x70,0x00,0x00,0x70,0x00,0x00,0x70,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x00,0xE0,0x00,0x00,0xE0, // -0x00,0xFF,0x80,0x00,0xFF,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0xFF,0x80,0x00,0xFF,0x80, // ] -0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0xEE,0x00,0x00,0xEE,0x00,0x01,0xC7,0x00,0x01,0xC7,0x00,0x03,0xC7,0x80,0x03,0x83,0x80,0x07,0x83,0xC0,0x07,0x01,0xC0,0x0F,0x01,0xE0,0x02,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ^ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xF8,0x3F,0xFF,0xF8,0x3F,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // _ - -0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0xFE,0x00,0x01,0xC7,0x00,0x01,0x83,0x00,0x01,0x83,0x00,0x01,0x83,0x00,0x01,0xC7,0x00,0x00,0xFE,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ` -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x01,0xFF,0x80,0x01,0xFF,0xC0,0x01,0x83,0xE0,0x00,0x01,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x7F,0xE0,0x01,0xFF,0xE0,0x03,0xFF,0xE0,0x07,0xC0,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x80,0xE0,0x03,0xFF,0xE0,0x01,0xFF,0xE0,0x00,0x7F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // a -0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x7E,0x00,0x07,0xFF,0x00,0x07,0xFF,0x80,0x07,0x83,0xC0,0x07,0x01,0xC0,0x07,0x01,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x01,0xE0,0x07,0x01,0xC0,0x07,0x07,0xC0,0x07,0xFF,0x80,0x07,0xFF,0x00,0x03,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // b -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xC0,0x00,0xFF,0xE0,0x03,0xFF,0xE0,0x03,0xE0,0x40,0x07,0x80,0x00,0x07,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x0E,0x00,0x00,0x07,0x00,0x00,0x07,0x80,0x00,0x03,0xE0,0x60,0x03,0xFF,0xE0,0x00,0xFF,0xE0,0x00,0x3F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // c -0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x7E,0xE0,0x00,0xFF,0xE0,0x01,0xFF,0xE0,0x03,0xC1,0xE0,0x03,0x80,0xE0,0x07,0x80,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x80,0xE0,0x03,0x80,0xE0,0x03,0xE0,0xE0,0x01,0xFF,0xE0,0x00,0xFF,0xE0,0x00,0x3F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // d -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x01,0xFF,0x00,0x03,0xFF,0x80,0x07,0xC3,0xC0,0x07,0x01,0xC0,0x07,0x00,0xE0,0x0E,0x00,0xE0,0x0F,0xFF,0xE0,0x0F,0xFF,0xE0,0x0F,0xFF,0xE0,0x0E,0x00,0x00,0x0E,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0xC0,0xC0,0x03,0xFF,0xC0,0x01,0xFF,0xC0,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // e -0x00,0x0F,0xC0,0x00,0x3F,0xF0,0x00,0x7F,0xF0,0x00,0x78,0x30,0x00,0xF0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x0F,0xFF,0xC0,0x0F,0xFF,0xC0,0x0F,0xFF,0xC0,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // f -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x01,0xFF,0xC0,0x03,0xFF,0xC0,0x07,0x81,0xC0,0x07,0x01,0xC0,0x0F,0x01,0xC0,0x0E,0x01,0xC0,0x0E,0x01,0xC0,0x0E,0x01,0xC0,0x0E,0x01,0xC0,0x0E,0x01,0xC0,0x0E,0x01,0xC0,0x07,0x01,0xC0,0x07,0x83,0xC0,0x03,0xFF,0xC0,0x01,0xFF,0xC0,0x00,0xFD,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x00,0x03,0xC0,0x06,0x07,0x80,0x07,0xFF,0x80,0x07,0xFF,0x00,0x03,0xFC,0x00,0x00,0x00,0x00, // g -0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0xFC,0x00,0x07,0xFF,0x00,0x07,0xFF,0x80,0x07,0x07,0x80,0x07,0x03,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // h -0x00,0x00,0x00,0x00,0x60,0x00,0x00,0xF0,0x00,0x00,0xF0,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xF0,0x00,0x0F,0xF0,0x00,0x0F,0xF0,0x00,0x00,0x70,0x00,0x00,0x70,0x00,0x00,0x70,0x00,0x00,0x70,0x00,0x00,0x70,0x00,0x00,0x70,0x00,0x00,0x70,0x00,0x00,0x70,0x00,0x00,0x70,0x00,0x00,0x70,0x00,0x00,0x70,0x00,0x00,0x78,0x20,0x00,0x3F,0xE0,0x00,0x3F,0xE0,0x00,0x0F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // i -0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x0F,0x00,0x00,0x0F,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0x80,0x03,0xFF,0x80,0x03,0xFF,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x06,0x0F,0x00,0x0F,0xFF,0x00,0x0F,0xFE,0x00,0x03,0xF8,0x00, // j -0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x01,0xE0,0x07,0x03,0xC0,0x07,0x07,0x80,0x07,0x0F,0x00,0x07,0x1E,0x00,0x07,0x3C,0x00,0x07,0x78,0x00,0x07,0xF0,0x00,0x07,0xE0,0x00,0x07,0xF0,0x00,0x07,0x78,0x00,0x07,0x1C,0x00,0x07,0x0F,0x00,0x07,0x07,0x00,0x07,0x03,0x80,0x07,0x03,0xC0,0x07,0x01,0xE0,0x07,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // k -0x07,0xF8,0x00,0x07,0xF8,0x00,0x07,0xF8,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x38,0x00,0x00,0x3C,0x10,0x00,0x1F,0xF0,0x00,0x1F,0xF0,0x00,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // l -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xE3,0xC0,0x0F,0xFF,0xE0,0x0F,0xFF,0xE0,0x0E,0x3C,0xF0,0x0E,0x1C,0x70,0x0E,0x1C,0x70,0x0E,0x1C,0x70,0x0E,0x1C,0x70,0x0E,0x1C,0x70,0x0E,0x1C,0x70,0x0E,0x1C,0x70,0x0E,0x00,0x70,0x0E,0x00,0x70,0x0E,0x00,0x70,0x0E,0x00,0x70,0x0E,0x00,0x70,0x0E,0x00,0x70,0x0E,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // m -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x03,0xFF,0x80,0x03,0xFF,0xC0,0x03,0x83,0xC0,0x03,0x81,0xE0,0x03,0x80,0xE0,0x03,0x80,0xE0,0x03,0x80,0xE0,0x03,0x80,0xE0,0x03,0x80,0xE0,0x03,0x80,0xE0,0x03,0x80,0xE0,0x03,0x80,0xE0,0x03,0x80,0xE0,0x03,0x80,0xE0,0x03,0x80,0xE0,0x03,0x80,0xE0,0x03,0x80,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // n -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x01,0xFF,0x00,0x03,0xFF,0x80,0x07,0x83,0xC0,0x07,0x01,0xC0,0x0F,0x01,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x07,0x01,0xE0,0x07,0x01,0xC0,0x07,0x83,0xC0,0x03,0xFF,0x80,0x01,0xFF,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // o - -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFC,0x00,0x07,0xFF,0x00,0x07,0xFF,0x80,0x07,0x07,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x01,0xE0,0x07,0x01,0xC0,0x07,0x83,0xC0,0x07,0xFF,0x80,0x07,0xFF,0x00,0x07,0x7C,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00, // p -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x80,0x00,0xFF,0xE0,0x01,0xFF,0xE0,0x03,0xE0,0xE0,0x03,0x80,0xE0,0x03,0x80,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x80,0xE0,0x03,0x80,0xE0,0x03,0xC1,0xE0,0x01,0xFF,0xE0,0x00,0xFF,0xE0,0x00,0x3E,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0, // q -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xC0,0x07,0xFF,0xC0,0x07,0xFF,0xC0,0x07,0x80,0x80,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // r -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x01,0xFF,0x80,0x03,0xFF,0x80,0x07,0x81,0x80,0x07,0x00,0x00,0x07,0x00,0x00,0x07,0xC0,0x00,0x03,0xF0,0x00,0x01,0xFE,0x00,0x00,0x7F,0x00,0x00,0x1F,0x80,0x00,0x03,0xC0,0x00,0x01,0xC0,0x00,0x01,0xC0,0x06,0x03,0xC0,0x07,0xFF,0x80,0x07,0xFF,0x80,0x01,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // s -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x0F,0xFF,0xE0,0x0F,0xFF,0xE0,0x0F,0xFF,0xE0,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xF0,0x20,0x00,0x7F,0xE0,0x00,0x7F,0xE0,0x00,0x1F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // t -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x81,0xC0,0x03,0xC1,0xC0,0x03,0xFF,0xC0,0x01,0xFF,0xC0,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // u -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x70,0x1E,0x00,0xF0,0x0E,0x00,0xE0,0x0E,0x00,0xE0,0x0F,0x01,0xE0,0x07,0x01,0xC0,0x07,0x01,0xC0,0x07,0x83,0xC0,0x03,0x83,0x80,0x03,0x83,0x80,0x03,0xC7,0x00,0x01,0xC7,0x00,0x01,0xEF,0x00,0x00,0xEE,0x00,0x00,0xFE,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // v -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x70,0x1C,0x00,0x70,0x1C,0x00,0x70,0x1C,0x00,0x70,0x1C,0x10,0x70,0x0C,0x38,0xE0,0x0E,0x38,0xE0,0x0E,0x38,0xE0,0x0E,0x28,0xE0,0x0E,0x6C,0xE0,0x0E,0x6C,0xE0,0x06,0x44,0xC0,0x06,0xC6,0xC0,0x06,0xC7,0xC0,0x07,0x87,0xC0,0x07,0x83,0xC0,0x07,0x83,0x80,0x03,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // w -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x01,0xE0,0x0F,0x03,0xC0,0x07,0x03,0x80,0x03,0x87,0x80,0x03,0xCF,0x00,0x01,0xEE,0x00,0x00,0xFC,0x00,0x00,0x7C,0x00,0x00,0x78,0x00,0x00,0x7C,0x00,0x00,0xFE,0x00,0x01,0xEE,0x00,0x01,0xC7,0x00,0x03,0xC3,0x80,0x07,0x83,0xC0,0x0F,0x01,0xC0,0x0E,0x01,0xE0,0x1E,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // x -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x70,0x0F,0x00,0xF0,0x07,0x00,0xE0,0x07,0x00,0xE0,0x07,0x80,0xE0,0x03,0x81,0xE0,0x03,0x81,0xC0,0x03,0xC1,0xC0,0x01,0xC3,0xC0,0x01,0xC3,0x80,0x01,0xE3,0x80,0x00,0xE7,0x80,0x00,0xF7,0x80,0x00,0x77,0x00,0x00,0x7F,0x00,0x00,0x3E,0x00,0x00,0x3E,0x00,0x00,0x1E,0x00,0x00,0x3C,0x00,0x00,0x3C,0x00,0x00,0x78,0x00,0x0F,0xF0,0x00,0x0F,0xF0,0x00,0x0F,0xC0,0x00, // y -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xC0,0x07,0xFF,0xC0,0x07,0xFF,0xC0,0x00,0x03,0x80,0x00,0x07,0x80,0x00,0x0F,0x00,0x00,0x1E,0x00,0x00,0x1C,0x00,0x00,0x38,0x00,0x00,0x78,0x00,0x00,0xF0,0x00,0x00,0xE0,0x00,0x01,0xE0,0x00,0x03,0xC0,0x00,0x03,0x80,0x00,0x07,0xFF,0xC0,0x07,0xFF,0xC0,0x07,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // z -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x01,0xC0,0x00,0x0F,0x80,0x00,0x0F,0x80,0x00,0x01,0xC0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0xE0,0x00,0x00,0x70,0x00,0x00,0x7F,0x80,0x00,0x1F,0x80, // { -0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00,0x00,0x1C,0x00, // | -0x00,0xFC,0x00,0x00,0xFF,0x00,0x00,0x07,0x00,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x01,0xC0,0x00,0x00,0xF8,0x00,0x00,0xF8,0x00,0x01,0xC0,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x03,0x80,0x00,0x07,0x00,0x00,0xFF,0x00,0x00,0xFC,0x00, // } -0x00,0x00,0x00,0x01,0xE0,0x20,0x03,0xF0,0x30,0x07,0xFC,0x70,0x0E,0x3F,0xE0,0x0C,0x0F,0xC0,0x04,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ~ -}; diff --git a/libraries/MySensors/examples/TouchDisplaySceneControllerSensor/arial_bold.c b/libraries/MySensors/examples/TouchDisplaySceneControllerSensor/arial_bold.c deleted file mode 100644 index e8107e9..0000000 --- a/libraries/MySensors/examples/TouchDisplaySceneControllerSensor/arial_bold.c +++ /dev/null @@ -1,111 +0,0 @@ -// arial_bold.c -// Font type : Full (95 characters) -// Font size : 16x16 pixels -// Memory usage : 3044 bytes -// Submitted by : MBWK - -#include - -const uint8_t arial_bold[3044] PROGMEM={ -0x10,0x10,0x20,0x5F, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // -0x00,0x00,0x00,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00, // ! -0x00,0x00,0x00,0x00,0x06,0x60,0x06,0x60,0x06,0x60,0x06,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // " -0x00,0x00,0x00,0x00,0x03,0x60,0x03,0x60,0x06,0xC0,0x3F,0xF0,0x3F,0xF0,0x06,0xC0,0x0D,0x80,0x3F,0xF0,0x3F,0xF0,0x0D,0x80,0x1B,0x00,0x1B,0x00,0x00,0x00,0x00,0x00, // # -0x00,0x00,0x01,0x00,0x03,0x80,0x07,0xC0,0x0D,0x60,0x0D,0x00,0x0F,0x00,0x07,0x80,0x03,0xC0,0x01,0xE0,0x0D,0x60,0x0D,0x60,0x07,0xC0,0x03,0x80,0x01,0x00,0x00,0x00, // $ -0x00,0x00,0x00,0x00,0x3C,0x18,0x66,0x30,0x66,0x30,0x66,0x60,0x66,0xC0,0x3C,0xC0,0x01,0x9E,0x01,0xB3,0x03,0x33,0x03,0x33,0x06,0x33,0x0C,0x1E,0x00,0x00,0x00,0x00, // % -0x00,0x00,0x00,0x00,0x07,0xC0,0x0F,0xE0,0x0C,0x60,0x0C,0x60,0x07,0xC0,0x07,0x80,0x0D,0x90,0x19,0xD8,0x18,0xF0,0x18,0x78,0x0F,0xFC,0x07,0x88,0x00,0x00,0x00,0x00, // & -0x00,0x00,0x00,0x00,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ' -0x00,0x00,0x01,0x80,0x03,0x00,0x03,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x03,0x00,0x03,0x00,0x01,0x80,0x00,0x00,0x00,0x00, // ( -0x00,0x00,0x06,0x00,0x03,0x00,0x03,0x00,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x03,0x00,0x03,0x00,0x06,0x00,0x00,0x00,0x00,0x00, // ) -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x03,0x80,0x33,0x98,0x3F,0xF8,0x07,0xC0,0x07,0xC0,0x0E,0xE0,0x1C,0x70,0x04,0x40,0x00,0x00,0x00,0x00,0x00,0x00, // * -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x07,0xF8,0x07,0xF8,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, // + -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x03,0x00,0x01,0x00,0x01,0x00,0x02,0x00,0x00,0x00, // , -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xE0,0x03,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // - -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // . -0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x60,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00, // / - -0x00,0x00,0x00,0x00,0x03,0xC0,0x07,0xE0,0x0E,0x70,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0E,0x70,0x07,0xE0,0x03,0xC0,0x00,0x00,0x00,0x00, // 0 -0x00,0x00,0x00,0x00,0x01,0x80,0x03,0x80,0x07,0x80,0x0D,0x80,0x09,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x00,0x00,0x00,0x00, // 1 -0x00,0x00,0x00,0x00,0x03,0xC0,0x07,0xE0,0x0E,0x30,0x0C,0x30,0x00,0x30,0x00,0x60,0x00,0xE0,0x01,0xC0,0x03,0x80,0x06,0x00,0x0F,0xF0,0x0F,0xF0,0x00,0x00,0x00,0x00, // 2 -0x00,0x00,0x00,0x00,0x03,0xE0,0x07,0xF0,0x0E,0x30,0x00,0x30,0x01,0xE0,0x01,0xE0,0x00,0x70,0x00,0x30,0x0C,0x30,0x0E,0x70,0x07,0xE0,0x03,0xC0,0x00,0x00,0x00,0x00, // 3 -0x00,0x00,0x00,0x00,0x00,0x60,0x00,0xE0,0x00,0xE0,0x01,0xE0,0x03,0x60,0x03,0x60,0x06,0x60,0x0C,0x60,0x0F,0xF0,0x0F,0xF0,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00, // 4 -0x00,0x00,0x00,0x00,0x07,0xE0,0x07,0xE0,0x06,0x00,0x0C,0x00,0x0F,0xC0,0x0F,0xE0,0x0C,0x70,0x00,0x30,0x0C,0x30,0x0E,0x70,0x07,0xE0,0x03,0xC0,0x00,0x00,0x00,0x00, // 5 -0x00,0x00,0x00,0x00,0x03,0xE0,0x07,0xF0,0x06,0x30,0x0C,0x00,0x0D,0xC0,0x0F,0xE0,0x0E,0x70,0x0C,0x30,0x0C,0x30,0x06,0x30,0x07,0xE0,0x03,0xC0,0x00,0x00,0x00,0x00, // 6 -0x00,0x00,0x00,0x00,0x0F,0xF0,0x0F,0xF0,0x00,0x60,0x00,0xC0,0x00,0xC0,0x01,0x80,0x01,0x80,0x01,0x80,0x03,0x80,0x03,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00, // 7 -0x00,0x00,0x00,0x00,0x03,0xC0,0x07,0xE0,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x07,0xE0,0x07,0xE0,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x07,0xE0,0x03,0xC0,0x00,0x00,0x00,0x00, // 8 -0x00,0x00,0x00,0x00,0x03,0xC0,0x07,0xE0,0x0C,0x60,0x0C,0x30,0x0C,0x30,0x0E,0x70,0x07,0xF0,0x03,0xB0,0x00,0x30,0x0C,0x60,0x0F,0xE0,0x07,0xC0,0x00,0x00,0x00,0x00, // 9 -0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // : -0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x01,0x80,0x00,0x80,0x00,0x80,0x01,0x00,0x00,0x00, // ; -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0xE0,0x03,0xC0,0x0F,0x00,0x1C,0x00,0x0F,0x00,0x03,0xC0,0x00,0xE0,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00, // < -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xF0,0x1F,0xF0,0x00,0x00,0x00,0x00,0x1F,0xF0,0x1F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // = -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x0E,0x00,0x07,0x80,0x01,0xE0,0x00,0x70,0x01,0xE0,0x07,0x80,0x0E,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // > -0x00,0x00,0x00,0x00,0x03,0xC0,0x07,0xE0,0x0E,0x30,0x0C,0x30,0x00,0x70,0x00,0xE0,0x01,0xC0,0x01,0x80,0x01,0x80,0x00,0x00,0x01,0x80,0x01,0x80,0x00,0x00,0x00,0x00, // ? - -0x00,0x00,0x07,0xC0,0x0C,0x30,0x13,0x78,0x17,0xE8,0x2C,0xC8,0x2C,0xC8,0x2C,0xC8,0x2F,0xD0,0x26,0xE0,0x10,0x08,0x08,0x10,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00, // @ -0x00,0x00,0x00,0x00,0x03,0x80,0x03,0x80,0x06,0xC0,0x06,0xC0,0x06,0xC0,0x0C,0x60,0x0C,0x60,0x0F,0xE0,0x1F,0xF0,0x18,0x30,0x18,0x30,0x30,0x18,0x00,0x00,0x00,0x00, // A -0x00,0x00,0x00,0x00,0x1F,0xE0,0x1F,0xF0,0x18,0x30,0x18,0x30,0x18,0x30,0x1F,0xE0,0x1F,0xF0,0x18,0x18,0x18,0x18,0x18,0x18,0x1F,0xF0,0x1F,0xE0,0x00,0x00,0x00,0x00, // B -0x00,0x00,0x00,0x00,0x03,0xE0,0x0F,0xF0,0x0C,0x38,0x1C,0x10,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x1C,0x10,0x0C,0x38,0x0F,0xF0,0x03,0xE0,0x00,0x00,0x00,0x00, // C -0x00,0x00,0x00,0x00,0x1F,0xC0,0x1F,0xF0,0x18,0x30,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x30,0x1F,0xF0,0x1F,0xC0,0x00,0x00,0x00,0x00, // D -0x00,0x00,0x00,0x00,0x0F,0xF8,0x0F,0xF8,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0F,0xF8,0x0F,0xF8,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0F,0xF8,0x0F,0xF8,0x00,0x00,0x00,0x00, // E -0x00,0x00,0x00,0x00,0x0F,0xF0,0x0F,0xF0,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0F,0xE0,0x0F,0xE0,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x00,0x00,0x00,0x00, // F -0x00,0x00,0x00,0x00,0x07,0xE0,0x1F,0xF0,0x18,0x38,0x38,0x10,0x30,0x00,0x30,0x00,0x30,0xF8,0x30,0xF8,0x38,0x18,0x18,0x38,0x1F,0xF8,0x07,0xE0,0x00,0x00,0x00,0x00, // G -0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1F,0xF8,0x1F,0xF8,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00, // H -0x00,0x00,0x00,0x00,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x00,0x00,0x00,0x00, // I -0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x30,0x0C,0x30,0x0E,0x70,0x07,0xE0,0x03,0xC0,0x00,0x00,0x00,0x00, // J -0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x30,0x18,0x60,0x18,0xC0,0x19,0x80,0x1B,0xC0,0x1E,0xC0,0x1C,0x60,0x18,0x70,0x18,0x30,0x18,0x18,0x18,0x18,0x00,0x00,0x00,0x00, // K -0x00,0x00,0x00,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0F,0xF0,0x0F,0xF0,0x00,0x00,0x00,0x00, // L -0x00,0x00,0x00,0x00,0x38,0x38,0x38,0x38,0x3C,0x78,0x3C,0x78,0x34,0x58,0x36,0xD8,0x36,0xD8,0x36,0xD8,0x33,0x98,0x33,0x98,0x33,0x98,0x31,0x18,0x00,0x00,0x00,0x00, // M -0x00,0x00,0x00,0x00,0x18,0x18,0x1C,0x18,0x1E,0x18,0x1E,0x18,0x1B,0x18,0x19,0x98,0x19,0x98,0x18,0xD8,0x18,0x78,0x18,0x78,0x18,0x38,0x18,0x18,0x00,0x00,0x00,0x00, // N -0x00,0x00,0x00,0x00,0x07,0xC0,0x1F,0xF0,0x18,0x30,0x30,0x18,0x30,0x18,0x30,0x18,0x30,0x18,0x30,0x18,0x30,0x18,0x18,0x30,0x1F,0xF0,0x07,0xC0,0x00,0x00,0x00,0x00, // O - -0x00,0x00,0x00,0x00,0x0F,0xE0,0x0F,0xF0,0x0C,0x38,0x0C,0x18,0x0C,0x38,0x0F,0xF0,0x0F,0xE0,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x00,0x00,0x00,0x00, // P -0x00,0x00,0x00,0x00,0x07,0xC0,0x1F,0xF0,0x18,0x30,0x30,0x18,0x30,0x18,0x30,0x18,0x30,0x18,0x30,0x18,0x31,0xB8,0x18,0xF0,0x1F,0xF0,0x07,0xB0,0x00,0x18,0x00,0x00, // Q -0x00,0x00,0x00,0x00,0x1F,0xE0,0x1F,0xF0,0x18,0x38,0x18,0x18,0x18,0x38,0x1F,0xF0,0x1F,0xC0,0x18,0xE0,0x18,0x70,0x18,0x30,0x18,0x38,0x18,0x1C,0x00,0x00,0x00,0x00, // R -0x00,0x00,0x00,0x00,0x03,0xE0,0x07,0xF0,0x0E,0x38,0x0C,0x18,0x0F,0x00,0x07,0xE0,0x01,0xF0,0x00,0x38,0x0C,0x18,0x0E,0x38,0x07,0xF0,0x03,0xE0,0x00,0x00,0x00,0x00, // S -0x00,0x00,0x00,0x00,0x1F,0xF8,0x1F,0xF8,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x00,0x00,0x00,0x00, // T -0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1C,0x38,0x0F,0xF0,0x07,0xE0,0x00,0x00,0x00,0x00, // U -0x00,0x00,0x00,0x00,0x30,0x18,0x18,0x30,0x18,0x30,0x18,0x30,0x0C,0x60,0x0C,0x60,0x0E,0xE0,0x06,0xC0,0x06,0xC0,0x03,0x80,0x03,0x80,0x03,0x80,0x00,0x00,0x00,0x00, // V -0x00,0x00,0x00,0x00,0x31,0xC6,0x31,0xC6,0x31,0xC6,0x1B,0x6C,0x1B,0x6C,0x1B,0x6C,0x1B,0x6C,0x1B,0x6C,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x00,0x00,0x00,0x00, // W -0x00,0x00,0x00,0x00,0x18,0x30,0x1C,0x70,0x0C,0x60,0x06,0xC0,0x07,0xC0,0x03,0x80,0x03,0x80,0x07,0xC0,0x06,0xC0,0x0C,0x60,0x1C,0x70,0x18,0x30,0x00,0x00,0x00,0x00, // X -0x00,0x00,0x00,0x00,0x18,0x18,0x1C,0x38,0x0C,0x30,0x06,0x60,0x06,0x60,0x03,0xC0,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x00,0x00,0x00,0x00, // Y -0x00,0x00,0x00,0x00,0x07,0xF8,0x07,0xF8,0x00,0x30,0x00,0x60,0x00,0xE0,0x00,0xC0,0x01,0x80,0x03,0x80,0x03,0x00,0x06,0x00,0x0F,0xF8,0x0F,0xF8,0x00,0x00,0x00,0x00, // Z -0x00,0x00,0x03,0xC0,0x03,0xC0,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0xC0,0x03,0xC0,0x00,0x00, // [ -0x00,0x00,0x00,0x00,0x03,0x00,0x03,0x00,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0x60,0x00,0x60,0x00,0x00,0x00,0x00, // -0x00,0x00,0x03,0xC0,0x03,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x03,0xC0,0x03,0xC0,0x00,0x00, // ] -0x00,0x00,0x01,0x80,0x03,0xC0,0x03,0xC0,0x06,0x60,0x06,0x60,0x06,0x60,0x0C,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ^ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x00,0x00, // _ - -0x00,0x00,0x00,0x00,0x01,0x80,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ` -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xC0,0x0F,0xE0,0x0C,0x60,0x01,0xE0,0x07,0xE0,0x0E,0x60,0x0C,0x60,0x0F,0xE0,0x07,0xB0,0x00,0x00,0x00,0x00,0x00,0x00, // a -0x00,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0D,0xC0,0x0F,0xE0,0x0E,0x70,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0E,0x70,0x0F,0xE0,0x0D,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, // b -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x07,0xE0,0x0E,0x60,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0E,0x60,0x07,0xE0,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, // c -0x00,0x00,0x00,0x30,0x00,0x30,0x00,0x30,0x03,0xB0,0x07,0xF0,0x0E,0x70,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0E,0x70,0x07,0xF0,0x03,0xB0,0x00,0x00,0x00,0x00,0x00,0x00, // d -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x07,0xC0,0x0C,0x60,0x0F,0xE0,0x0F,0xE0,0x0C,0x00,0x0E,0x60,0x07,0xC0,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00, // e -0x00,0x00,0x03,0xC0,0x07,0xC0,0x06,0x00,0x0F,0x80,0x0F,0x80,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // f -0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x60,0x0F,0xE0,0x1C,0xE0,0x18,0x60,0x18,0x60,0x18,0x60,0x1C,0xE0,0x0F,0xE0,0x07,0x60,0x18,0x60,0x1F,0xE0,0x0F,0xC0,0x00,0x00, // g -0x00,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0D,0xE0,0x0F,0xF0,0x0E,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x00,0x00,0x00,0x00,0x00,0x00, // h -0x00,0x00,0x00,0x00,0x01,0x80,0x01,0x80,0x00,0x00,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00, // i -0x00,0x00,0x00,0x00,0x01,0x80,0x01,0x80,0x00,0x00,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x07,0x80,0x07,0x00, // j -0x00,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x00,0x0C,0x60,0x0C,0xC0,0x0D,0x80,0x0F,0x80,0x0F,0xC0,0x0E,0xC0,0x0C,0xC0,0x0C,0x60,0x0C,0x60,0x00,0x00,0x00,0x00,0x00,0x00, // k -0x00,0x00,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00, // l -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x37,0x38,0x3F,0xFC,0x39,0xCC,0x31,0x8C,0x31,0x8C,0x31,0x8C,0x31,0x8C,0x31,0x8C,0x31,0x8C,0x00,0x00,0x00,0x00,0x00,0x00, // m -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0D,0xE0,0x0F,0xF0,0x0E,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x00,0x00,0x00,0x00,0x00,0x00, // n -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x07,0xE0,0x0E,0x70,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0E,0x70,0x07,0xE0,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, // o - -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0D,0xC0,0x0F,0xE0,0x0E,0x70,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0E,0x70,0x0F,0xE0,0x0D,0xC0,0x0C,0x00,0x0C,0x00,0x0C,0x00, // p -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xB0,0x07,0xF0,0x0E,0x70,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0E,0x70,0x07,0xF0,0x03,0xB0,0x00,0x30,0x00,0x30,0x00,0x30, // q -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x70,0x03,0xF0,0x03,0x80,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // r -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xC0,0x0F,0xE0,0x0C,0x60,0x0F,0x00,0x07,0xC0,0x00,0xE0,0x0C,0x60,0x0F,0xE0,0x07,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, // s -0x00,0x00,0x01,0x00,0x03,0x00,0x03,0x00,0x07,0xC0,0x07,0xC0,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0xC0,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, // t -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x70,0x0F,0xF0,0x07,0xB0,0x00,0x00,0x00,0x00,0x00,0x00, // u -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x30,0x06,0x30,0x06,0x30,0x03,0x60,0x03,0x60,0x03,0x60,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00, // v -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x31,0xC6,0x31,0xC6,0x19,0xCC,0x1B,0x6C,0x1B,0x6C,0x1B,0x6C,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x00,0x00,0x00,0x00,0x00,0x00, // w -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x30,0x07,0x70,0x03,0x60,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x03,0x60,0x07,0x70,0x06,0x30,0x00,0x00,0x00,0x00,0x00,0x00, // x -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x18,0x0C,0x18,0x06,0x30,0x06,0x30,0x03,0x60,0x03,0x60,0x03,0xE0,0x01,0xC0,0x01,0xC0,0x01,0x80,0x07,0x80,0x07,0x00, // y -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xF8,0x03,0xF8,0x00,0x30,0x00,0x70,0x00,0xE0,0x01,0xC0,0x01,0x80,0x03,0xF8,0x03,0xF8,0x00,0x00,0x00,0x00,0x00,0x00, // z -0x01,0xC0,0x03,0xC0,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x0E,0x00,0x0E,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0x00,0x03,0xC0,0x01,0xC0,0x00,0x00, // { -0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80, // | -0x03,0x80,0x03,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0x70,0x00,0x70,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x00,0xC0,0x03,0xC0,0x03,0x80,0x00,0x00, // } -0x00,0x00,0x00,0x00,0x07,0x88,0x0F,0xF8,0x08,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ~ -}; diff --git a/libraries/MySensors/examples/TouchDisplaySceneControllerSensor/logo.c b/libraries/MySensors/examples/TouchDisplaySceneControllerSensor/logo.c deleted file mode 100644 index 116321b..0000000 --- a/libraries/MySensors/examples/TouchDisplaySceneControllerSensor/logo.c +++ /dev/null @@ -1,235 +0,0 @@ -// Generated by : ImageConverter 565 Online -// Generated from : top.png -// Time generated : Tue, 30 Sep 14 23:16:51 +0200 (Server timezone: CET) -// Image Size : 60x60 pixels -// Memory usage : 7200 bytes - -#include - -const unsigned short logo[3600] PROGMEM={ -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0010 (16) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0020 (32) pixels -0x08E4, 0x28A3, 0x89A7, 0x71C7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0030 (48) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0040 (64) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0050 (80) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xAD55, 0x18C3, 0x0082, 0x4944, 0x5A08, 0x8147, 0xBB0D, 0x5A69, // 0x0060 (96) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0070 (112) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0080 (128) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x52A0, 0x3180, 0x0000, 0x52AA, 0x2945, // 0x0090 (144) pixels -0x2965, 0x0000, 0x0000, 0x0000, 0x18E3, 0x0021, 0x4144, 0x69C6, 0x6924, 0xAA49, 0xB3AD, 0x00E2, 0x0000, 0x0000, 0x0000, 0x0000, // 0x00A0 (160) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x00B0 (176) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x00C0 (192) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2104, 0x0861, 0x2924, 0x0000, 0x0000, 0x00C2, // 0x00D0 (208) pixels -0x1862, 0x4924, 0x4924, 0x9965, 0xCB4A, 0xE48D, 0x9329, 0x0004, 0x6A69, 0x51A5, 0x2125, 0x0000, 0x5000, 0x0000, 0x0000, 0x0000, // 0x00E0 (224) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x00F0 (240) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0100 (256) pixels -0x0000, 0x1002, 0x1924, 0x41A4, 0x3124, 0x0000, 0x0000, 0x4A69, 0x2924, 0x0000, 0x0000, 0x4125, 0x38E4, 0x5983, 0x9A46, 0xE40A, // 0x0110 (272) pixels -0xFCCD, 0xF4CE, 0x50E5, 0x6226, 0xBBAC, 0xAAEB, 0x4904, 0x0000, 0x4104, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0120 (288) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0130 (304) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2124, 0x10C3, 0x0000, 0x0000, 0x2800, 0x41A5, 0x9309, // 0x0140 (320) pixels -0x8288, 0x00E5, 0x4A49, 0x73AE, 0x31A6, 0x1800, 0x59C7, 0x71E7, 0x2100, 0x8266, 0xE40B, 0xFCAC, 0xFC8C, 0xDC8F, 0x5187, 0xA387, // 0x0150 (336) pixels -0xABA9, 0x9249, 0x58C0, 0x0000, 0x0000, 0x8410, 0x2104, 0x10A2, 0x2965, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0160 (352) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0170 (368) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0944, 0x2062, 0x5165, 0x5903, 0x00A4, 0x0165, 0x8A67, 0xAB28, 0x7267, 0x29E8, 0x7B0C, // 0x0180 (384) pixels -0x6185, 0x8207, 0xC3AC, 0x6A04, 0x0140, 0xC36A, 0xFDEC, 0xF5AC, 0xFD30, 0xCC51, 0x70C5, 0xC469, 0xEC8D, 0x89E9, 0x0000, 0x5269, // 0x0190 (400) pixels -0x20C3, 0x0861, 0x0841, 0x18A2, 0x39E7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x01A0 (416) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x01B0 (432) pixels -0x5000, 0x0000, 0x71A5, 0x9A88, 0xAAA8, 0xC2C9, 0xA248, 0x9A26, 0xCA87, 0xCAC8, 0x58C0, 0x69C5, 0xC30B, 0xD3AC, 0xDC4A, 0x51A2, // 0x01C0 (448) pixels -0x5A65, 0xEC6B, 0xFDCB, 0xFE0E, 0xFD0F, 0xEBF1, 0xB3EB, 0xED6E, 0xEC10, 0x61C7, 0x0123, 0x0021, 0x0082, 0x10C3, 0x3186, 0x0000, // 0x01D0 (464) pixels -0x0000, 0x6180, 0x5000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x01E0 (480) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xF800, 0x0000, 0xFFF0, 0x5943, // 0x01F0 (496) pixels -0xA226, 0xD369, 0xEB4A, 0xE289, 0xE26A, 0xEB0E, 0x9AAA, 0x5042, 0xDBAC, 0xEC8C, 0xDC29, 0x7A45, 0xCC4A, 0xFB4C, 0xFD8D, 0xFDF0, // 0x0200 (512) pixels -0xF510, 0xFD8F, 0xF5CF, 0xFE31, 0xCC31, 0x0000, 0x3801, 0x4143, 0x59A6, 0x4165, 0x0082, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0210 (528) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0220 (544) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4000, 0x0000, 0x0041, 0x9986, 0xC2E8, 0xDB88, 0xF44A, // 0x0230 (560) pixels -0xDBCB, 0xEBCD, 0xD44D, 0x41C5, 0xB308, 0xEC0B, 0xF46C, 0xE40D, 0xD38A, 0xEC2D, 0xFEAE, 0xFEF2, 0xFDD2, 0xFE51, 0xFD52, 0xFCB1, // 0x0240 (576) pixels -0xEC50, 0xCBEE, 0xB42A, 0xA2C6, 0x8985, 0x79A6, 0x89A6, 0xB1E6, 0xA1C6, 0x5924, 0x4986, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0250 (592) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0260 (608) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0040, 0x6125, 0xE3A9, 0xF4EB, 0xF5AC, 0xDD49, 0xE5CB, 0xFE6E, 0xC44E, // 0x0270 (624) pixels -0x9B8A, 0xE4CD, 0xFD70, 0xFDB1, 0xCCCE, 0xF62E, 0xFE8D, 0xFE50, 0xFE56, 0xFD97, 0xF4B6, 0xF3F0, 0xFD2F, 0xFE50, 0xF5D1, 0xDC10, // 0x0280 (640) pixels -0xB289, 0xC269, 0xCA68, 0xEB6C, 0xDC2F, 0xA2C9, 0x2062, 0x1945, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0290 (656) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x02A0 (672) pixels -0x0000, 0x0000, 0x0000, 0x00E3, 0x3904, 0xB1C6, 0xE34C, 0xEC2C, 0xE4AB, 0xCD2B, 0xF64C, 0xFE70, 0xFE4F, 0xEE4E, 0xFED2, 0xFED2, // 0x02B0 (688) pixels -0xFEB2, 0xFE33, 0xFDD3, 0xFE74, 0xF535, 0xCB11, 0xEB32, 0xFCF2, 0xFDF1, 0xF574, 0xFE13, 0xFE52, 0xBC4B, 0x8226, 0x6945, 0x6A28, // 0x02C0 (704) pixels -0x3228, 0x2124, 0x1904, 0x51C7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x02D0 (720) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x10A2, // 0x02E0 (736) pixels -0x0861, 0x91C5, 0xDA4A, 0xEAAB, 0xF3D1, 0xED12, 0xD591, 0xC50D, 0xA3E9, 0xB50C, 0xEE92, 0xB4EE, 0x7329, 0x82E8, 0xC572, 0xEDF3, // 0x02F0 (752) pixels -0xB3ED, 0x3800, 0xA3CF, 0xFEF6, 0xFED0, 0xFEB4, 0xFEF3, 0xF6CF, 0xEEAE, 0xBD2A, 0x0120, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0300 (768) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0310 (784) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1001, 0x39C7, 0x8227, 0xE2AA, 0xDB0C, // 0x0320 (800) pixels -0xE4B3, 0xCD11, 0x83EA, 0x5286, 0x52AA, 0x7BEF, 0x2940, 0x3A2A, 0x5AEB, 0x73CF, 0x52AA, 0x3945, 0x1184, 0x6B2B, 0xACF1, 0xB54F, // 0x0330 (816) pixels -0xF733, 0xFF51, 0xFF32, 0xFF55, 0xFF33, 0xF696, 0xCC93, 0x624A, 0x0120, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0340 (832) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0350 (848) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6248, 0x9249, 0xCB2A, 0xABEC, 0x8C2B, 0x5AE6, 0x10C3, 0x5269, // 0x0360 (864) pixels -0xA4F3, 0xD637, 0x9C90, 0xAD33, 0xAD12, 0xE6FA, 0xC5B5, 0x6AC9, 0x83CE, 0xBD53, 0xCDD5, 0x9450, 0x6B47, 0xCD91, 0xFEB4, 0xEED4, // 0x0370 (880) pixels -0x9490, 0x736E, 0xCCD5, 0xCC94, 0x7B2D, 0x0000, 0xFC10, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0380 (896) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0390 (912) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x6A8A, 0x8B0A, 0x9C2B, 0x7BCA, 0x3163, 0x526B, 0x1904, 0x736C, 0xE698, 0xD658, 0xD658, 0xD616, // 0x03A0 (928) pixels -0xF719, 0xFF5B, 0xF71A, 0xEED8, 0xD5F5, 0xEEFA, 0xE6B8, 0xA4F3, 0x29A8, 0x0000, 0xAC31, 0xEE36, 0x9C2E, 0x0000, 0x4145, 0xAB70, // 0x03B0 (944) pixels -0xC4B4, 0x93F0, 0x0000, 0x0000, 0x4008, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x03C0 (960) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x03D0 (976) pixels -0x8B6B, 0x7B6A, 0x1124, 0x0000, 0x0000, 0x41E6, 0x0002, 0xB512, 0xFF7B, 0xFF9C, 0xFF9C, 0xFFDD, 0xFF9C, 0xFFBD, 0xFFFF, 0xFF9C, // 0x03E0 (992) pixels -0xFF5B, 0xFFBD, 0xFF9C, 0xF71A, 0x9CB1, 0x0000, 0x0000, 0xACB2, 0xE6B6, 0x4A68, 0x0000, 0x0144, 0x738E, 0x6B4D, 0x0000, 0x0000, // 0x03F0 (1008) pixels -0x500A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0400 (1024) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2145, 0x3144, 0x0002, 0x0000, 0x0000, // 0x0410 (1040) pixels -0x0000, 0x39C7, 0x0083, 0xC594, 0xEED9, 0xEEB8, 0xEEFA, 0xC5F7, 0xEEFA, 0xFFDD, 0xDEFB, 0xA4F2, 0xEE97, 0xF6D8, 0xEEF9, 0xFF7B, // 0x0420 (1056) pixels -0xDE56, 0x41C6, 0x0000, 0x0000, 0x9491, 0x7BCE, 0x0000, 0x6209, 0x0000, 0x0000, 0x6A49, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0430 (1072) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0440 (1088) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2965, 0x0000, 0xAD12, // 0x0450 (1104) pixels -0xCE17, 0x534E, 0x02B0, 0x7472, 0xF73A, 0xFF7B, 0xF71A, 0xA4F2, 0x02AE, 0x4B6F, 0x9C91, 0xFF5B, 0xF6D9, 0x838C, 0x0000, 0x0000, // 0x0460 (1120) pixels -0x0000, 0x0001, 0x2124, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0470 (1136) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0480 (1152) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x8400, 0x5000, 0x8410, 0x0000, 0xB4D3, 0x2965, 0x3985, 0xA4D1, 0xFFDF, 0xCEDC, 0x4413, 0xDEFA, // 0x0490 (1168) pixels -0xFF9C, 0xEED9, 0xFF5A, 0xFF5A, 0x8D36, 0xBE59, 0xFFDE, 0xFF7B, 0xFF19, 0x8BEE, 0x0000, 0x0000, 0x0000, 0x632C, 0x0005, 0x0000, // 0x04A0 (1184) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x04B0 (1200) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x04C0 (1216) pixels -0x0000, 0x0000, 0x8410, 0x0000, 0x7BCF, 0x2966, 0x5247, 0xBD95, 0xFFDE, 0xFF9C, 0xF73A, 0xFF7B, 0xF719, 0xCE17, 0xF75C, 0xFFDE, // 0x04D0 (1232) pixels -0xFF7C, 0xFF5A, 0xFFDE, 0xFF3A, 0xFF5A, 0xACF1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x04E0 (1248) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x04F0 (1264) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8410, 0x0000, // 0x0500 (1280) pixels -0x8C51, 0x2966, 0x62A9, 0x9CB2, 0xE6B9, 0xEEB8, 0xFF5B, 0xFF9C, 0xEEB8, 0xD637, 0xFF9C, 0xFFBD, 0xFF7B, 0xFF5B, 0xFF5B, 0xFF19, // 0x0510 (1296) pixels -0xFF5A, 0xC574, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0520 (1312) pixels -0x0000, 0x0000, 0x5000, 0x52AA, 0x8000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0530 (1328) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8410, 0x0000, 0xACF3, 0x3186, 0x5AA9, 0x940E, // 0x0540 (1344) pixels -0x9C90, 0xD616, 0xEEF9, 0xFF7B, 0xDE78, 0xB533, 0xE697, 0xFF39, 0xFF5A, 0xFF5B, 0xFF3A, 0xFF5B, 0xFF5A, 0xC593, 0x0000, 0x0000, // 0x0550 (1360) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0560 (1376) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0570 (1392) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2125, 0x5248, 0xA490, 0xC5B5, 0xEED9, 0xF73A, 0xF71A, // 0x0580 (1408) pixels -0xACF2, 0xBD74, 0xB533, 0xF71A, 0xFF9C, 0xFF3B, 0xFF7C, 0xFF9C, 0xFF9C, 0xB512, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0590 (1424) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x05A0 (1440) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x05B0 (1456) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2125, 0x41E7, 0xA4B1, 0xBD95, 0xE698, 0xF71A, 0xFF7B, 0xEEB8, 0xFF3A, 0xF6F9, 0xFFBD, // 0x05C0 (1472) pixels -0xEEB9, 0xAC2F, 0xE71B, 0xFFBD, 0xFF9C, 0xB532, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x05D0 (1488) pixels -0x0000, 0x0000, 0x0000, 0x4208, 0x2965, 0x5248, 0xB512, 0xE676, 0xA46F, 0x0000, 0xFFF0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x05E0 (1504) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x05F0 (1520) pixels -0x0000, 0x4208, 0x0000, 0xA490, 0xFF7C, 0xAD54, 0x91E6, 0xFF3B, 0xFFBC, 0xFF5A, 0xFF7B, 0xFFDD, 0xDC90, 0xB450, 0xF75B, 0xFF3A, // 0x0600 (1536) pixels -0xFF9B, 0xA4D1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0610 (1552) pixels -0x4A28, 0xC573, 0xFF7B, 0xFF5A, 0x7B4B, 0x0000, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x52AA, 0x0000, 0x0000, // 0x0620 (1568) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4208, 0x0000, 0x52AA, 0x1904, 0x62C9, // 0x0630 (1584) pixels -0xFF5B, 0xE6BA, 0x5800, 0xDC0E, 0xFF1B, 0xFF7B, 0xFFBD, 0xF617, 0xB940, 0xD617, 0xFF5A, 0xFF19, 0xFF7B, 0x7B6C, 0x0000, 0x0000, // 0x0640 (1600) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5000, 0x0000, 0x08C4, 0x6B0A, 0x942F, 0xF6F9, 0xFF7A, 0xC574, // 0x0650 (1616) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0660 (1632) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8410, 0x0000, 0x738E, 0x4A49, 0x08A3, 0xCDB4, 0xFF7B, 0x9CB1, 0x9000, // 0x0670 (1648) pixels -0xC267, 0xA3AD, 0xB34C, 0xA8E0, 0xBD14, 0xF71A, 0xFF39, 0xFF9B, 0xE698, 0x0000, 0x0000, 0x52AA, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0680 (1664) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x4200, 0x0000, 0x1904, 0x6AEA, 0x83AC, 0xC573, 0x8BEE, 0x0000, 0x52AA, 0x0000, 0x0000, 0x0000, // 0x0690 (1680) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0004, 0x4229, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x06A0 (1696) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x4208, 0x0000, 0x5AAA, 0x2146, 0x83CD, 0xFF19, 0xFF19, 0xBD53, 0x9BEE, 0x9BAD, 0xACD3, 0xC658, // 0x06B0 (1712) pixels -0xF73B, 0xFF5A, 0xFF5A, 0xF73A, 0x630C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x06C0 (1728) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00A7, // 0x06D0 (1744) pixels -0x4A28, 0x4A48, 0x428B, 0x0000, 0x4208, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x06E0 (1760) pixels -0x0000, 0x0000, 0x0000, 0x4228, 0x3186, 0xCDF6, 0xFF7B, 0xFF7B, 0xF71A, 0xF73A, 0xFF9C, 0xFF7C, 0xFF3A, 0xFF3A, 0xFF9C, 0x9471, // 0x06F0 (1776) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2104, // 0x0700 (1792) pixels -0x2104, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4208, 0x0000, 0x0000, 0xACD1, 0xE677, 0x836C, 0x0000, // 0x0710 (1808) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8410, 0x0000, 0x8C51, // 0x0720 (1824) pixels -0x2945, 0x39C6, 0x9C90, 0xE6B9, 0xFF9C, 0xFF5A, 0xFF19, 0xFF3A, 0xFF7B, 0xFFDD, 0xB5B6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0730 (1840) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x39C7, 0x18C3, 0x3186, 0x0000, 0x0000, 0x0000, // 0x0740 (1856) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFF0, 0x10E4, 0xB512, 0xFF9B, 0xE6B8, 0x0002, 0x0000, 0x8410, 0x0000, 0x0000, // 0x0750 (1872) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0180, 0x0000, 0x52AA, 0x10E3, 0x0000, 0x83AD, // 0x0760 (1888) pixels -0xE698, 0xFF19, 0xFF39, 0xEED8, 0xD658, 0x9492, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0770 (1904) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18E3, 0x18E3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0780 (1920) pixels -0x0000, 0x0000, 0xAD55, 0x2145, 0x9C4F, 0xBD32, 0x9450, 0x31A7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0790 (1936) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x52AA, 0x0000, 0x0000, 0x8C31, 0xB576, 0x41E7, 0x5AA9, 0x5A68, 0x8C0F, 0x8C0F, 0x5ACA, // 0x07A0 (1952) pixels -0x4A6A, 0xB532, 0x8BCD, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x07B0 (1968) pixels -0x0000, 0x0000, 0x18C3, 0x2945, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2965, // 0x07C0 (1984) pixels -0x18C3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x07D0 (2000) pixels -0x0000, 0x52AA, 0x0000, 0x1003, 0xCE1A, 0xEF1D, 0x62EC, 0x7B8C, 0xA4B1, 0x9C70, 0xB512, 0xB532, 0xD616, 0xF6D8, 0x6B0B, 0x0000, // 0x07E0 (2016) pixels -0x3165, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18E3, 0x18E3, 0x0000, // 0x07F0 (2032) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xA451, 0x2945, 0x18E3, // 0x0800 (2048) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9E73, 0x0000, // 0x0810 (2064) pixels -0x9493, 0xF77E, 0xCE39, 0x4A48, 0xCDF6, 0xC5B5, 0xEED9, 0xE6B8, 0xFF3A, 0x942F, 0x73AE, 0x8430, 0x39C7, 0x0000, 0x0000, 0x0000, // 0x0820 (2080) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2124, 0x18E3, 0x8410, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0830 (2096) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8410, 0x18E3, 0x18E3, 0x4A69, 0x0000, 0x0000, // 0x0840 (2112) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8410, 0x0000, 0x4268, 0x5A8C, 0x0003, 0xB557, 0xFFDF, 0xA555, // 0x0850 (2128) pixels -0xA4B1, 0xDE57, 0xEEB8, 0xFFBC, 0xB554, 0xA534, 0xB595, 0xB576, 0x7BD0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0860 (2144) pixels -0x0000, 0x0000, 0x4208, 0x18C3, 0x18E3, 0x31A6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0870 (2160) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x52AA, 0x0000, 0x0000, 0x2124, 0x18C3, 0x2104, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0880 (2176) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x4208, 0x0000, 0x4A68, 0x526B, 0x7B50, 0x62AD, 0xDEBC, 0xFFFF, 0x8430, 0xB554, 0xFF7B, 0xE6B9, // 0x0890 (2192) pixels -0x636E, 0xF7BE, 0x8C71, 0xDE9B, 0xCE1A, 0x1063, 0x0100, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x39E7, 0x18E3, 0x18E3, 0x2104, // 0x08A0 (2208) pixels -0x8410, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x08B0 (2224) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3186, 0x18C3, 0x2104, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x08C0 (2240) pixels -0x4208, 0x0000, 0x4A49, 0x4A0A, 0xACF7, 0x7B70, 0xA514, 0xFFFF, 0xF79E, 0x9491, 0xE6B8, 0x83EF, 0xDEDB, 0xE71C, 0x8410, 0xFFFF, // 0x08D0 (2256) pixels -0xF77E, 0xA4D5, 0x0000, 0x0000, 0x0000, 0x0000, 0x3186, 0x2104, 0x18E3, 0x18E3, 0x39C7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x08E0 (2272) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x08F0 (2288) pixels -0x0000, 0x0000, 0x0000, 0x18C3, 0x2104, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x31C6, 0x734E, // 0x0900 (2304) pixels -0xB537, 0xACB6, 0x5AAB, 0xE71C, 0xFFFF, 0xCE59, 0x0000, 0x9CD3, 0xFFFF, 0xA535, 0xBDF7, 0xFFFF, 0xF79E, 0xE6DD, 0xC5D8, 0x4228, // 0x0910 (2320) pixels -0x0000, 0x3186, 0x18E3, 0x2104, 0x4208, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0920 (2336) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4A49, // 0x0930 (2352) pixels -0x10A2, 0x18C3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3166, 0x9453, 0xBD58, 0xB518, 0x83B1, 0xAD75, // 0x0940 (2368) pixels -0xD6BA, 0x2125, 0x3186, 0x736E, 0xB596, 0x7BF0, 0xE73C, 0xFFFF, 0xF77E, 0xF79E, 0xF79E, 0xC5F8, 0x10A1, 0x1082, 0x8410, 0x0000, // 0x0950 (2384) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0960 (2400) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x52AA, 0x18E3, 0x10A2, 0x18C3, // 0x0970 (2416) pixels -0x18C3, 0x0861, 0x0861, 0x0000, 0x0000, 0x2985, 0x41E8, 0xA4D5, 0xACF7, 0xC5D9, 0xE6DC, 0x6B4D, 0x62ED, 0xA4D4, 0x9452, 0xC5B9, // 0x0980 (2432) pixels -0x522A, 0x8430, 0xFFFF, 0xFFBF, 0xF77E, 0xF7BE, 0xF77E, 0xE6DD, 0x9CD4, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0990 (2448) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x09A0 (2464) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2104, 0x18E3, 0x18E3, 0x18C3, 0x18C3, 0x2945, // 0x09B0 (2480) pixels -0x39C7, 0x3186, 0x62CC, 0x9C54, 0x9C35, 0xD63A, 0xF75E, 0xA534, 0x83D0, 0xC5D8, 0x9CD3, 0xE6DD, 0x7B70, 0xB5B6, 0xFFFF, 0xEF5E, // 0x09C0 (2496) pixels -0xF77E, 0xFFBF, 0xF77E, 0xE6FD, 0xBD98, 0x39A7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x09D0 (2512) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x09E0 (2528) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4A49, 0x5AAC, 0x8392, // 0x09F0 (2544) pixels -0xB537, 0xCE1A, 0xE6FC, 0xF7BE, 0xDEDB, 0xD69A, 0x8C71, 0xFFFF, 0xEF7D, 0xEF7D, 0xFFFF, 0xEF5E, 0xF77E, 0xFFDF, 0xF79E, 0xF77E, // 0x0A00 (2560) pixels -0xD65B, 0x7B70, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0A10 (2576) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0A20 (2592) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4208, 0x5A4B, 0xA495, 0xD67B, 0xC599, 0xDEBC, 0xFFFF, // 0x0A30 (2608) pixels -0xFFBF, 0xE71C, 0x8C71, 0xE73C, 0xB5B6, 0xEF7D, 0xFFFF, 0xEF5E, 0xF77E, 0xFFFF, 0xFFDF, 0xF79E, 0xEF5E, 0xC5B9, 0x4A49, 0x0000, // 0x0A40 (2624) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0A50 (2640) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0A60 (2656) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x39E7, 0x4A2A, 0xACF6, 0xE6FC, 0xD63A, 0xE71D, 0xFFFF, 0xF79E, 0xEF3D, 0x9CD3, 0xD69A, // 0x0A70 (2672) pixels -0xBDF7, 0xFFDE, 0xFFDF, 0xF77E, 0xF79E, 0xFFDF, 0xFFFF, 0xFFBF, 0xF7BF, 0xEF1D, 0xAD15, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0A80 (2688) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0A90 (2704) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0AA0 (2720) pixels -0x0000, 0x2965, 0x62CC, 0xACD6, 0xEF3D, 0xE6DC, 0xE71D, 0xFFFF, 0xF7BF, 0xF75E, 0x9CF3, 0xDEDB, 0xFFDF, 0xE73C, 0xFFDF, 0xF7BE, // 0x0AB0 (2736) pixels -0xF7BF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF5E, 0xD65A, 0x41E8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0AC0 (2752) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0AD0 (2768) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1922, 0x734F, 0xB4F7, // 0x0AE0 (2784) pixels -0xEF5E, 0xE6FC, 0xEF3D, 0xEF5D, 0xF79E, 0xF79E, 0xB5B6, 0xBDF7, 0xC638, 0xC638, 0xFFFF, 0xFFDF, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0AF0 (2800) pixels -0xFFFF, 0xFFDF, 0xEF1D, 0x9452, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0B00 (2816) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0B10 (2832) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2144, 0x736F, 0xBD78, 0xEF5E, 0xDEBC, 0xEF3D, 0xE6FC, // 0x0B20 (2848) pixels -0xF7BF, 0xF79E, 0xD69A, 0x9492, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFDF, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF79F, 0xC5D9, // 0x0B30 (2864) pixels -0x2144, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0B40 (2880) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0B50 (2896) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x31A6, 0x7B8F, 0xB537, 0xE6DC, 0xE71D, 0xF79E, 0xE6FD, 0xFFDF, 0xFFFF, 0xEF7D, 0x9492, // 0x0B60 (2912) pixels -0xE71C, 0x738E, 0xEF7D, 0xFFDF, 0xFFBF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xD67B, 0x62ED, 0x0000, 0x8410, 0x0000, // 0x0B70 (2928) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0B80 (2944) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0B90 (2960) pixels -0x0000, 0x39C7, 0x83F0, 0xACF7, 0xD65B, 0xF79E, 0xFFDF, 0xE6FC, 0xFFDF, 0xFFFF, 0xFFDF, 0x8C71, 0xE71C, 0xE71C, 0xFFFF, 0xFFDF, // 0x0BA0 (2976) pixels -0xFFBF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDE7B, 0x8BD2, 0x0000, 0x630C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0BB0 (2992) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0BC0 (3008) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x39C7, 0x8C31, 0xACD6, // 0x0BD0 (3024) pixels -0xD65B, 0xF79E, 0xFFDF, 0xE6FD, 0xFFDF, 0xEF5E, 0xEF1D, 0x83F0, 0xE73C, 0xFFFF, 0xEF5D, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0BE0 (3040) pixels -0xFFFF, 0xFFFF, 0xDE9C, 0xD65B, 0x8430, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0BF0 (3056) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0C00 (3072) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x52AA, 0x0000, 0x31A6, 0x8C31, 0x9C74, 0xDE9B, 0xFFDF, 0xFFDF, 0xEF1D, // 0x0C10 (3088) pixels -0xF79E, 0xEF5E, 0xE6FD, 0x9493, 0xCE79, 0xD6BA, 0xBDD7, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF77E, 0xBD78, 0x9472, // 0x0C20 (3104) pixels -0x4A4C, 0x524B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0C30 (3120) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0C40 (3136) pixels -0x0000, 0x0000, 0x0000, 0x4208, 0x0000, 0x3166, 0x73AE, 0x9C74, 0xE6DC, 0xFFDF, 0xF79E, 0xF79E, 0xF79E, 0xF79E, 0xE6DC, 0xC618, // 0x0C50 (3152) pixels -0x9492, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF3D, 0xDE9C, 0xACD6, 0x6ACD, 0x3ACF, 0x9D9A, 0x7C94, 0x0000, 0x0000, // 0x0C60 (3168) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0C70 (3184) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0C80 (3200) pixels -0x0000, 0x2945, 0x4A8B, 0xA4F5, 0xF77E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFBF, 0xFFDF, 0x8C51, 0xBDD8, 0xC5DA, 0xBDB9, // 0x0C90 (3216) pixels -0xCE3A, 0xC5F9, 0x9C74, 0x622D, 0x3806, 0x2106, 0x3BF4, 0x7DBB, 0xAEBE, 0x8578, 0x0000, 0x0000, 0x4208, 0x0000, 0x0000, 0x0000, // 0x0CA0 (3232) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0CB0 (3248) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x52AA, 0x0000, 0x420A, 0x11CB, 0x632F, // 0x0CC0 (3264) pixels -0x9CB5, 0xB597, 0xCE79, 0xD6BA, 0xD6BB, 0xAD77, 0xB5B7, 0xAD96, 0x6B30, 0x0809, 0x300C, 0x280C, 0x3009, 0x0003, 0x0000, 0x00A3, // 0x0CD0 (3280) pixels -0x332F, 0x7D99, 0x8E1C, 0x8E1B, 0x9E7D, 0x95FB, 0x2986, 0x0000, 0xFFFF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0CE0 (3296) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0CF0 (3312) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x001F, 0x0000, 0x82B5, 0x398D, 0x18CC, 0x0170, 0x00B0, 0x000C, 0x100A, // 0x0D00 (3328) pixels -0x180B, 0x000A, 0x0009, 0x0009, 0x380B, 0x518D, 0x48CC, 0x484B, 0x49AD, 0x3BF5, 0x5CF8, 0x6539, 0x7DDC, 0xBEDD, 0xCF1D, 0x759B, // 0x0D10 (3344) pixels -0x9E7C, 0xA67D, 0x3AAC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0D20 (3360) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0D30 (3376) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x000A, 0x0000, 0x398C, 0x314B, 0x3A32, 0x53B7, 0x53B6, 0x42D4, 0x4314, 0x5375, 0x63B5, 0x6395, // 0x0D40 (3392) pixels -0x4252, 0x496E, 0x4AF2, 0x5436, 0x5CD9, 0x5D5B, 0x8DFC, 0x9E7D, 0xAE9D, 0xBEDD, 0xCEFD, 0x5D5A, 0xA67C, 0xA69D, 0x5390, 0x0000, // 0x0D50 (3408) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0D60 (3424) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0D70 (3440) pixels -0x4208, 0x0000, 0x318A, 0x292A, 0x30ED, 0x52F4, 0x53B7, 0x4BF7, 0x5438, 0x5458, 0x5C17, 0x5376, 0x4B36, 0x6CD9, 0x5D5A, 0x75DB, // 0x0D80 (3456) pixels -0x85FC, 0x963C, 0xA67C, 0xA67C, 0x9E5C, 0xA67C, 0x8DFB, 0x5D5A, 0xA67C, 0xBEFE, 0x74B5, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0D90 (3472) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0DA0 (3488) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x02AA, 0x0000, 0x31C9, 0x292A, // 0x0DB0 (3504) pixels -0x394D, 0x4212, 0x4315, 0x43B6, 0x5CB9, 0x4B96, 0x5BB6, 0x7458, 0x6C58, 0x755A, 0x5D5A, 0x85DB, 0xAE9D, 0x9E5C, 0xBEDD, 0xAE9D, // 0x0DC0 (3520) pixels -0x963C, 0x9E5C, 0x75BB, 0x657B, 0xBEBD, 0xB6DE, 0x74F7, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0DD0 (3536) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0DE0 (3552) pixels -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2108, 0x396E, 0x41D0, 0x42D4, 0x3356, // 0x0DF0 (3568) pixels -0x3BF7, 0x43B7, 0x53D7, 0x5C99, 0x5417, 0x651A, 0x5D5A, 0x7DBB, 0x85FB, 0x8E1C, 0x9E5C, 0x8E1C, 0x85FB, 0x963C, 0x961C, 0x7DDB, // 0x0E00 (3584) pixels -0xD73E, 0xAEBD, 0x8517, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0E10 (3600) pixels -}; diff --git a/libraries/MySensors/examples/WeatherStationSensor/WeatherStationSensor.ino b/libraries/MySensors/examples/WeatherStationSensor/WeatherStationSensor.ino deleted file mode 100644 index ed19ee9..0000000 --- a/libraries/MySensors/examples/WeatherStationSensor/WeatherStationSensor.ino +++ /dev/null @@ -1,522 +0,0 @@ -/** -* The MySensors Arduino library handles the wireless radio link and protocol -* between your home built sensors/actuators and HA controller of choice. -* The sensors forms a self healing radio network with optional repeaters. Each -* repeater and gateway builds a routing tables in EEPROM which keeps track of the -* network topology allowing messages to be routed to nodes. -* -* Created by Henrik Ekblad -* Copyright (C) 2013-2015 Sensnology AB -* Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors -* -* Documentation: http://www.mysensors.org -* Support Forum: http://forum.mysensors.org -* -* This program is free software; you can redistribute it and/or -* modify it under the terms of the GNU General Public License -* version 2 as published by the Free Software Foundation. -* -******************************* -* -* REVISION HISTORY -* Version 1.0 - Henrik Ekblad -* -* DESCRIPTION -* Weather station sensor example using BMP085 and DHT-11 or DHT-22 module -* http://www.mysensors.org/build/pressure -* http://www.mysensors.org/build/humidity -* -* WIRING -* DHT Sensor -* PIN2 D3 Arduino -* 10k resistor between PIN1 and PIN2 -* -* BMP Sensor -* SCL A5 Arduino -* SDA A4 Arduino -*/ - -// Enable debug prints to serial monitor -//#define MY_DEBUG - -// Enable and select radio type attached -#define MY_RADIO_NRF24 -//#define MY_RADIO_RFM69 - -#include -#include - -#include -#include - -#include - -// Set this to true if you want to send values altough the values did not change. -// This is only recommended when not running on batteries. -const bool SEND_ALWAYS = true; - -// Adapt this constant: set it to the altitude above sealevel at your home location. -const float SEALEVEL = 688; // meters above sealevel - -// Constant for the world wide average pressure -const float SEALEVEL_PRESSURE = 1013.25; - -// ---------------------------------------------------------------------------- -// Child sensor ids -#define CHILD_ID_BARO 0 -#define CHILD_ID_TEMP1 1 -#define CHILD_ID_HUM 2 -#define CHILD_ID_TEMP2 3 - -// ---------------------------------------------------------------------------- -// DHT-11/22 -#define HUMIDITY_SENSOR_DIGITAL_PIN 3 - -DHT dht; -float lastTemp; -float lastHum; -boolean metric = true; -MyMessage msgHum(CHILD_ID_HUM, V_HUM); -MyMessage msgTemp(CHILD_ID_TEMP2, V_TEMP); - -// ---------------------------------------------------------------------------- -// BMP085 -unsigned long SLEEP_TIME1 = 30000; // 1 minute required for forecast algorithm -unsigned long SLEEP_TIME2 = 30000; // 1 minute required for forecast algorithm - -Adafruit_BMP085 bmp = Adafruit_BMP085(); // Digital Pressure Sensor - - -/* -DP/Dt explanation -0 = "Stable Weather Pattern" -1 = "Slowly rising Good Weather", "Clear/Sunny " -2 = "Slowly falling L-Pressure ", "Cloudy/Rain " -3 = "Quickly rising H-Press", "Not Stable" -4 = "Quickly falling L-Press", "Thunderstorm" -5 = "Unknown (More Time needed) -*/ - -const char *weatherStrings[] = { "stable", "sunny", "cloudy", "unstable", "thunderstorm", "unknown" }; -enum FORECAST -{ - STABLE = 0, // Stable weather - SUNNY = 1, // Slowly rising HP stable good weather - CLOUDY = 2, // Slowly falling Low Pressure System, stable rainy weather - UNSTABLE = 3, // Quickly rising HP, not stable weather - THUNDERSTORM = 4, // Quickly falling LP, Thunderstorm, not stable - UNKNOWN = 5 // Unknown, more time needed -}; - -const char *situationStrings[] = { "very low", "low", "normal", "high", "very high" }; -enum WEATHER_SITUATION -{ - VERY_LOW_PRESSURE = 0, // p > -7.5hPa - LOW_PRESSURE = 1, // p > -2.5hPa - NORMAL_PRESSURE = 2, // p < +/-2.5hPa - HIGH_PRESSURE = 3, // p > +2.5hPa - VERY_HIGH_PRESSURE = 4, // p > +7.5hPa -}; - -float lastPressure = -1; -float lastPressureTemp = -1; -int lastForecast = -1; -int lastSituation = NORMAL_PRESSURE; - -const int LAST_SAMPLES_COUNT = 5; -float lastPressureSamples[LAST_SAMPLES_COUNT]; - -// get kPa/h be dividing hPa by 10 -#define CONVERSION_FACTOR (1.0/10.0) - -int minuteCount = 0; -bool firstRound = true; - -// average value is used in forecast algorithm. -float pressureAvg; -// average after 2 hours is used as reference value for the next iteration. -float pressureAvg2; -float dP_dt; - -MyMessage tempMsg(CHILD_ID_TEMP1, V_TEMP); -MyMessage pressureMsg(CHILD_ID_BARO, V_PRESSURE); -MyMessage forecastMsg(CHILD_ID_BARO, V_FORECAST); -MyMessage situationMsg(CHILD_ID_BARO, V_VAR1); -MyMessage forecastMsg2(CHILD_ID_BARO, V_VAR2); - - -void initPressureSensor() -{ - if (!bmp.begin()) - { - Serial.println(F("Could not find a valid BMP085 sensor, check wiring!")); - while (1) {} - } -} - -void initHumiditySensor() -{ - dht.setup(HUMIDITY_SENSOR_DIGITAL_PIN); -} - -void setup() -{ - initPressureSensor(); - initHumiditySensor(); - metric = getConfig().isMetric; -} - -void presentation() -{ - sendSketchInfo("Weather Station Sensor", "1.0"); - - present(CHILD_ID_BARO, S_BARO); - present(CHILD_ID_TEMP1, S_TEMP); - present(CHILD_ID_HUM, S_HUM); - present(CHILD_ID_TEMP2, S_TEMP); -} - -int getWeatherSituation(float pressure) -{ - int situation = NORMAL_PRESSURE; - - float delta = pressure - SEALEVEL_PRESSURE; - if (delta > 7.5) - { - situation = VERY_HIGH_PRESSURE; - } - else if (delta > 2.5) - { - situation = HIGH_PRESSURE; - } - else if (delta < -7.5) - { - situation = VERY_LOW_PRESSURE; - } - else if (delta < -2.5) - { - situation = LOW_PRESSURE; - } - else - { - situation = NORMAL_PRESSURE; - } - - return situation; -} - -// The BMP provides a temperature value, too! -bool updatePressureSensor() -{ - bool changed = false; - - //sealevel pressure p0 from absolute pressure. - float pressure = bmp.readSealevelPressure(SEALEVEL) / 100.0; - float temperature = bmp.readTemperature(); - if (!metric) - { - // Convert to fahrenheit - temperature = temperature * 9.0 / 5.0 + 32.0; - } - - int forecast = sample(pressure); - int situation = getWeatherSituation(pressure); - - - if (SEND_ALWAYS || (temperature != lastPressureTemp)) - { - changed = true; - lastPressureTemp = temperature; - #ifdef MY_DEBUG - Serial.print(F("Temperature = ")); - Serial.print(temperature); - Serial.println(metric ? F(" *C") : F(" *F")); - #endif - if (!send(tempMsg.set(lastPressureTemp, 1))) - { - lastPressureTemp = -1.0; - } - } - - if (SEND_ALWAYS || (pressure != lastPressure)) - { - changed = true; - lastPressure = pressure; - #ifdef MY_DEBUG - Serial.print(F("sealevel Pressure = ")); - Serial.print(pressure); - Serial.println(F(" hPa")); - #endif - if (!send(pressureMsg.set(lastPressure, 1))) - { - lastPressure = -1.0; - } - } - - if (SEND_ALWAYS || (forecast != lastForecast)) - { - changed = true; - lastForecast = forecast; - #ifdef MY_DEBUG - Serial.print(F("Forecast = ")); - Serial.println(weatherStrings[forecast]); - #endif - if (send(forecastMsg.set(weatherStrings[lastForecast]))) - { - if (!send(forecastMsg2.set(lastForecast))) - { - } - } - else - { - lastForecast = -1.0; - } - } - - if (SEND_ALWAYS || (situation != lastSituation)) - { - changed = true; - lastSituation = situation; - #ifdef MY_DEBUG - Serial.print(F("Situation = ")); - Serial.println(situationStrings[situation]); - #endif - if (!send(situationMsg.set(lastSituation, 0))) - { - lastSituation = -1.0; - } - } - - - return changed; -} - -// The dht provides a temperature, too! -bool updateHumiditySensor() -{ - bool changed = false; - - float temperature = dht.getTemperature(); - float humidity = dht.getHumidity(); - - if (!isnan(temperature)) - { - if (SEND_ALWAYS || (temperature != lastTemp)) - { - lastTemp = temperature; - if (!metric) - { - temperature = dht.toFahrenheit(temperature); - } - - changed = true; - #ifdef MY_DEBUG - Serial.print(F("T: ")); - Serial.println(temperature); - #endif - if (!send(msgTemp.set(temperature, 1))) - { - lastTemp = -1.0; - } - } - } - else - { - Serial.println(F("Failed reading temperature from DHT")); - } - - - if (!isnan(humidity)) - { - if (SEND_ALWAYS || (humidity != lastHum)) - { - lastHum = humidity; - changed = true; - #ifdef MY_DEBUG - Serial.print(F("H: ")); - Serial.println(humidity); - #endif - if (!send(msgHum.set(lastHum, 1))) - { - lastHum = -1.0; - } - } - } - else - { - Serial.println(F("Failed reading humidity from DHT")); - } - - return changed; -} - -void loop() -{ - updatePressureSensor(); - sleep(SLEEP_TIME1); - updateHumiditySensor(); - sleep(SLEEP_TIME2); -} - - -float getLastPressureSamplesAverage() -{ - float lastPressureSamplesAverage = 0; - for (int i = 0; i < LAST_SAMPLES_COUNT; i++) - { - lastPressureSamplesAverage += lastPressureSamples[i]; - } - - lastPressureSamplesAverage /= LAST_SAMPLES_COUNT; - - // Uncomment when dubugging - //Serial.print(F("### 5min-Average:")); - //Serial.print(lastPressureSamplesAverage); - //Serial.println(F(" hPa")); - - return lastPressureSamplesAverage; -} - - - -// Algorithm found here -// http://www.freescale.com/files/sensors/doc/app_note/AN3914.pdf -// Pressure in hPa --> forecast done by calculating kPa/h -int sample(float pressure) -{ - // Calculate the average of the last n minutes. - int index = minuteCount % LAST_SAMPLES_COUNT; - lastPressureSamples[index] = pressure; - - minuteCount++; - if (minuteCount > 185) - { - minuteCount = 6; - } - - if (minuteCount == 5) - { - pressureAvg = getLastPressureSamplesAverage(); - } - else if (minuteCount == 35) - { - float lastPressureAvg = getLastPressureSamplesAverage(); - float change = (lastPressureAvg - pressureAvg) * CONVERSION_FACTOR; - if (firstRound) // first time initial 3 hour - { - dP_dt = change * 2; // note this is for t = 0.5hour - } - else - { - dP_dt = change / 1.5; // divide by 1.5 as this is the difference in time from 0 value. - } - } - else if (minuteCount == 65) - { - float lastPressureAvg = getLastPressureSamplesAverage(); - float change = (lastPressureAvg - pressureAvg) * CONVERSION_FACTOR; - if (firstRound) //first time initial 3 hour - { - dP_dt = change; //note this is for t = 1 hour - } - else - { - dP_dt = change / 2; //divide by 2 as this is the difference in time from 0 value - } - } - else if (minuteCount == 95) - { - float lastPressureAvg = getLastPressureSamplesAverage(); - float change = (lastPressureAvg - pressureAvg) * CONVERSION_FACTOR; - if (firstRound) // first time initial 3 hour - { - dP_dt = change / 1.5; // note this is for t = 1.5 hour - } - else - { - dP_dt = change / 2.5; // divide by 2.5 as this is the difference in time from 0 value - } - } - else if (minuteCount == 125) - { - float lastPressureAvg = getLastPressureSamplesAverage(); - pressureAvg2 = lastPressureAvg; // store for later use. - float change = (lastPressureAvg - pressureAvg) * CONVERSION_FACTOR; - if (firstRound) // first time initial 3 hour - { - dP_dt = change / 2; // note this is for t = 2 hour - } - else - { - dP_dt = change / 3; // divide by 3 as this is the difference in time from 0 value - } - } - else if (minuteCount == 155) - { - float lastPressureAvg = getLastPressureSamplesAverage(); - float change = (lastPressureAvg - pressureAvg) * CONVERSION_FACTOR; - if (firstRound) // first time initial 3 hour - { - dP_dt = change / 2.5; // note this is for t = 2.5 hour - } - else - { - dP_dt = change / 3.5; // divide by 3.5 as this is the difference in time from 0 value - } - } - else if (minuteCount == 185) - { - float lastPressureAvg = getLastPressureSamplesAverage(); - float change = (lastPressureAvg - pressureAvg) * CONVERSION_FACTOR; - if (firstRound) // first time initial 3 hour - { - dP_dt = change / 3; // note this is for t = 3 hour - } - else - { - dP_dt = change / 4; // divide by 4 as this is the difference in time from 0 value - } - pressureAvg = pressureAvg2; // Equating the pressure at 0 to the pressure at 2 hour after 3 hours have past. - firstRound = false; // flag to let you know that this is on the past 3 hour mark. Initialized to 0 outside main loop. - } - - int forecast = UNKNOWN; - if (minuteCount < 35 && firstRound) //if time is less than 35 min on the first 3 hour interval. - { - forecast = UNKNOWN; - } - else if (dP_dt < (-0.25)) - { - forecast = THUNDERSTORM; - } - else if (dP_dt > 0.25) - { - forecast = UNSTABLE; - } - else if ((dP_dt > (-0.25)) && (dP_dt < (-0.05))) - { - forecast = CLOUDY; - } - else if ((dP_dt > 0.05) && (dP_dt < 0.25)) - { - forecast = SUNNY; - } - else if ((dP_dt >(-0.05)) && (dP_dt < 0.05)) - { - forecast = STABLE; - } - else - { - forecast = UNKNOWN; - } - - // Uncomment when dubugging - // Serial.print(F("Forecast at minute ")); - // Serial.print(minuteCount); - // Serial.print(F(" dP/dt = ")); - // Serial.print(dP_dt); - // Serial.print(F("kPa/h --> ")); - // Serial.println(weatherStrings[forecast]); - - return forecast; -} diff --git a/libraries/NewPing/NewPing.cpp b/libraries/NewPing/NewPing.cpp deleted file mode 100644 index b66bd6c..0000000 --- a/libraries/NewPing/NewPing.cpp +++ /dev/null @@ -1,231 +0,0 @@ -// --------------------------------------------------------------------------- -// Created by Tim Eckel - teckel@leethost.com -// Copyright 2012 License: GNU GPL v3 http://www.gnu.org/licenses/gpl-3.0.html -// -// See "NewPing.h" for purpose, syntax, version history, links, and more. -// --------------------------------------------------------------------------- - -#include "NewPing.h" - - -// --------------------------------------------------------------------------- -// NewPing constructor -// --------------------------------------------------------------------------- - -NewPing::NewPing(uint8_t trigger_pin, uint8_t echo_pin, int max_cm_distance) { - _triggerBit = digitalPinToBitMask(trigger_pin); // Get the port register bitmask for the trigger pin. - _echoBit = digitalPinToBitMask(echo_pin); // Get the port register bitmask for the echo pin. - - _triggerOutput = portOutputRegister(digitalPinToPort(trigger_pin)); // Get the output port register for the trigger pin. - _echoInput = portInputRegister(digitalPinToPort(echo_pin)); // Get the input port register for the echo pin. - - _triggerMode = (uint8_t *) portModeRegister(digitalPinToPort(trigger_pin)); // Get the port mode register for the trigger pin. - - _maxEchoTime = min(max_cm_distance, MAX_SENSOR_DISTANCE) * US_ROUNDTRIP_CM + (US_ROUNDTRIP_CM / 2); // Calculate the maximum distance in uS. - -#if DISABLE_ONE_PIN == true - *_triggerMode |= _triggerBit; // Set trigger pin to output. -#endif -} - - -// --------------------------------------------------------------------------- -// Standard ping methods -// --------------------------------------------------------------------------- - -unsigned int NewPing::ping() { - if (!ping_trigger()) return NO_ECHO; // Trigger a ping, if it returns false, return NO_ECHO to the calling function. - while (*_echoInput & _echoBit) // Wait for the ping echo. - if (micros() > _max_time) return NO_ECHO; // Stop the loop and return NO_ECHO (false) if we're beyond the set maximum distance. - return (micros() - (_max_time - _maxEchoTime) - 5); // Calculate ping time, 5uS of overhead. -} - - -unsigned int NewPing::ping_in() { - unsigned int echoTime = NewPing::ping(); // Calls the ping method and returns with the ping echo distance in uS. - return NewPingConvert(echoTime, US_ROUNDTRIP_IN); // Convert uS to inches. -} - - -unsigned int NewPing::ping_cm() { - unsigned int echoTime = NewPing::ping(); // Calls the ping method and returns with the ping echo distance in uS. - return NewPingConvert(echoTime, US_ROUNDTRIP_CM); // Convert uS to centimeters. -} - - -unsigned int NewPing::ping_median(uint8_t it) { - unsigned int uS[it], last; - uint8_t j, i = 0; - uS[0] = NO_ECHO; - while (i < it) { - last = ping(); // Send ping. - if (last == NO_ECHO) { // Ping out of range. - it--; // Skip, don't include as part of median. - last = _maxEchoTime; // Adjust "last" variable so delay is correct length. - } else { // Ping in range, include as part of median. - if (i > 0) { // Don't start sort till second ping. - for (j = i; j > 0 && uS[j - 1] < last; j--) // Insertion sort loop. - uS[j] = uS[j - 1]; // Shift ping array to correct position for sort insertion. - } else j = 0; // First ping is starting point for sort. - uS[j] = last; // Add last ping to array in sorted position. - i++; // Move to next ping. - } - if (i < it) delay(PING_MEDIAN_DELAY - (last >> 10)); // Millisecond delay between pings. - } - return (uS[it >> 1]); // Return the ping distance median. -} - - -// --------------------------------------------------------------------------- -// Standard ping method support functions (not called directly) -// --------------------------------------------------------------------------- - -boolean NewPing::ping_trigger() { -#if DISABLE_ONE_PIN != true - *_triggerMode |= _triggerBit; // Set trigger pin to output. -#endif - *_triggerOutput &= ~_triggerBit; // Set the trigger pin low, should already be low, but this will make sure it is. - delayMicroseconds(4); // Wait for pin to go low, testing shows it needs 4uS to work every time. - *_triggerOutput |= _triggerBit; // Set trigger pin high, this tells the sensor to send out a ping. - delayMicroseconds(10); // Wait long enough for the sensor to realize the trigger pin is high. Sensor specs say to wait 10uS. - *_triggerOutput &= ~_triggerBit; // Set trigger pin back to low. -#if DISABLE_ONE_PIN != true - *_triggerMode &= ~_triggerBit; // Set trigger pin to input (when using one Arduino pin this is technically setting the echo pin to input as both are tied to the same Arduino pin). -#endif - - _max_time = micros() + MAX_SENSOR_DELAY; // Set a timeout for the ping to trigger. - while (*_echoInput & _echoBit && micros() <= _max_time) {} // Wait for echo pin to clear. - while (!(*_echoInput & _echoBit)) // Wait for ping to start. - if (micros() > _max_time) return false; // Something went wrong, abort. - - _max_time = micros() + _maxEchoTime; // Ping started, set the timeout. - return true; // Ping started successfully. -} - - -// --------------------------------------------------------------------------- -// Timer interrupt ping methods (won't work with ATmega8 and ATmega128) -// --------------------------------------------------------------------------- - -void NewPing::ping_timer(void (*userFunc)(void)) { - if (!ping_trigger()) return; // Trigger a ping, if it returns false, return without starting the echo timer. - timer_us(ECHO_TIMER_FREQ, userFunc); // Set ping echo timer check every ECHO_TIMER_FREQ uS. -} - - -boolean NewPing::check_timer() { - if (micros() > _max_time) { // Outside the timeout limit. - timer_stop(); // Disable timer interrupt - return false; // Cancel ping timer. - } - - if (!(*_echoInput & _echoBit)) { // Ping echo received. - timer_stop(); // Disable timer interrupt - ping_result = (micros() - (_max_time - _maxEchoTime) - 13); // Calculate ping time, 13uS of overhead. - return true; // Return ping echo true. - } - - return false; // Return false because there's no ping echo yet. -} - - -// --------------------------------------------------------------------------- -// Timer2/Timer4 interrupt methods (can be used for non-ultrasonic needs) -// --------------------------------------------------------------------------- - -// Variables used for timer functions -void (*intFunc)(); -void (*intFunc2)(); -unsigned long _ms_cnt_reset; -volatile unsigned long _ms_cnt; - - -void NewPing::timer_us(unsigned int frequency, void (*userFunc)(void)) { - timer_setup(); // Configure the timer interrupt. - intFunc = userFunc; // User's function to call when there's a timer event. - -#if defined (__AVR_ATmega32U4__) // Use Timer4 for ATmega32U4 (Teensy/Leonardo). - OCR4C = min((frequency>>2) - 1, 255); // Every count is 4uS, so divide by 4 (bitwise shift right 2) subtract one, then make sure we don't go over 255 limit. - TIMSK4 = (1<>2) - 1, 255); // Every count is 4uS, so divide by 4 (bitwise shift right 2) subtract one, then make sure we don't go over 255 limit. - TIMSK2 |= (1<= 100 - #include -#else - #include - #include -#endif - -#include -#include - -// Shoudln't need to changed these values unless you have a specific need to do so. -#define MAX_SENSOR_DISTANCE 500 // Maximum sensor distance can be as high as 500cm, no reason to wait for ping longer than sound takes to travel this distance and back. -#define US_ROUNDTRIP_IN 146 // Microseconds (uS) it takes sound to travel round-trip 1 inch (2 inches total), uses integer to save compiled code space. -#define US_ROUNDTRIP_CM 57 // Microseconds (uS) it takes sound to travel round-trip 1cm (2cm total), uses integer to save compiled code space. -#define DISABLE_ONE_PIN false // Set to "true" to save up to 26 bytes of compiled code space if you're not using one pin sensor connections. - -// Probably shoudln't change these values unless you really know what you're doing. -#define NO_ECHO 0 // Value returned if there's no ping echo within the specified MAX_SENSOR_DISTANCE or max_cm_distance. -#define MAX_SENSOR_DELAY 18000 // Maximum uS it takes for sensor to start the ping (SRF06 is the highest measured, just under 18ms). -#define ECHO_TIMER_FREQ 24 // Frequency to check for a ping echo (every 24uS is about 0.4cm accuracy). -#define PING_MEDIAN_DELAY 29 // Millisecond delay between pings in the ping_median method. - -// Conversion from uS to distance (round result to nearest cm or inch). -#define NewPingConvert(echoTime, conversionFactor) (max((echoTime + conversionFactor / 2) / conversionFactor, (echoTime ? 1 : 0))) - - -class NewPing { - public: - NewPing(uint8_t trigger_pin, uint8_t echo_pin, int max_cm_distance = MAX_SENSOR_DISTANCE); - unsigned int ping(); - unsigned int ping_in(); - unsigned int ping_cm(); - unsigned int ping_median(uint8_t it = 5); - unsigned int convert_in(unsigned int echoTime); - unsigned int convert_cm(unsigned int echoTime); - void ping_timer(void (*userFunc)(void)); - boolean check_timer(); - unsigned long ping_result; - static void timer_us(unsigned int frequency, void (*userFunc)(void)); - static void timer_ms(unsigned long frequency, void (*userFunc)(void)); - static void timer_stop(); - private: - boolean ping_trigger(); - boolean ping_wait_timer(); - uint8_t _triggerBit; - uint8_t _echoBit; - volatile uint8_t *_triggerOutput; - volatile uint8_t *_triggerMode; - volatile uint8_t *_echoInput; - unsigned int _maxEchoTime; - unsigned long _max_time; - static void timer_setup(); - static void timer_ms_cntdwn(); -}; - - -#endif \ No newline at end of file diff --git a/libraries/NewPing/examples/NewPing15Sensors/NewPing15Sensors.pde b/libraries/NewPing/examples/NewPing15Sensors/NewPing15Sensors.pde deleted file mode 100644 index 8354059..0000000 --- a/libraries/NewPing/examples/NewPing15Sensors/NewPing15Sensors.pde +++ /dev/null @@ -1,74 +0,0 @@ -// --------------------------------------------------------------------------- -// This example code was used to successfully communicate with 15 ultrasonic sensors. You can adjust -// the number of sensors in your project by changing SONAR_NUM and the number of NewPing objects in the -// "sonar" array. You also need to change the pins for each sensor for the NewPing objects. Each sensor -// is pinged at 33ms intervals. So, one cycle of all sensors takes 495ms (33 * 15 = 495ms). The results -// are sent to the "oneSensorCycle" function which currently just displays the distance data. Your project -// would normally process the sensor results in this function (for example, decide if a robot needs to -// turn and call the turn function). Keep in mind this example is event-driven. Your complete sketch needs -// to be written so there's no "delay" commands and the loop() cycles at faster than a 33ms rate. If other -// processes take longer than 33ms, you'll need to increase PING_INTERVAL so it doesn't get behind. -// --------------------------------------------------------------------------- -#include - -#define SONAR_NUM 15 // Number or sensors. -#define MAX_DISTANCE 200 // Maximum distance (in cm) to ping. -#define PING_INTERVAL 33 // Milliseconds between sensor pings (29ms is about the min to avoid cross-sensor echo). - -unsigned long pingTimer[SONAR_NUM]; // Holds the times when the next ping should happen for each sensor. -unsigned int cm[SONAR_NUM]; // Where the ping distances are stored. -uint8_t currentSensor = 0; // Keeps track of which sensor is active. - -NewPing sonar[SONAR_NUM] = { // Sensor object array. - NewPing(41, 42, MAX_DISTANCE), // Each sensor's trigger pin, echo pin, and max distance to ping. - NewPing(43, 44, MAX_DISTANCE), - NewPing(45, 20, MAX_DISTANCE), - NewPing(21, 22, MAX_DISTANCE), - NewPing(23, 24, MAX_DISTANCE), - NewPing(25, 26, MAX_DISTANCE), - NewPing(27, 28, MAX_DISTANCE), - NewPing(29, 30, MAX_DISTANCE), - NewPing(31, 32, MAX_DISTANCE), - NewPing(34, 33, MAX_DISTANCE), - NewPing(35, 36, MAX_DISTANCE), - NewPing(37, 38, MAX_DISTANCE), - NewPing(39, 40, MAX_DISTANCE), - NewPing(50, 51, MAX_DISTANCE), - NewPing(52, 53, MAX_DISTANCE) -}; - -void setup() { - Serial.begin(115200); - pingTimer[0] = millis() + 75; // First ping starts at 75ms, gives time for the Arduino to chill before starting. - for (uint8_t i = 1; i < SONAR_NUM; i++) // Set the starting time for each sensor. - pingTimer[i] = pingTimer[i - 1] + PING_INTERVAL; -} - -void loop() { - for (uint8_t i = 0; i < SONAR_NUM; i++) { // Loop through all the sensors. - if (millis() >= pingTimer[i]) { // Is it this sensor's time to ping? - pingTimer[i] += PING_INTERVAL * SONAR_NUM; // Set next time this sensor will be pinged. - if (i == 0 && currentSensor == SONAR_NUM - 1) oneSensorCycle(); // Sensor ping cycle complete, do something with the results. - sonar[currentSensor].timer_stop(); // Make sure previous timer is canceled before starting a new ping (insurance). - currentSensor = i; // Sensor being accessed. - cm[currentSensor] = 0; // Make distance zero in case there's no ping echo for this sensor. - sonar[currentSensor].ping_timer(echoCheck); // Do the ping (processing continues, interrupt will call echoCheck to look for echo). - } - } - // The rest of your code would go here. -} - -void echoCheck() { // If ping received, set the sensor distance to array. - if (sonar[currentSensor].check_timer()) - cm[currentSensor] = sonar[currentSensor].ping_result / US_ROUNDTRIP_CM; -} - -void oneSensorCycle() { // Sensor ping cycle complete, do something with the results. - for (uint8_t i = 0; i < SONAR_NUM; i++) { - Serial.print(i); - Serial.print("="); - Serial.print(cm[i]); - Serial.print("cm "); - } - Serial.println(); -} \ No newline at end of file diff --git a/libraries/NewPing/examples/NewPingEventTimer/NewPingEventTimer.pde b/libraries/NewPing/examples/NewPingEventTimer/NewPingEventTimer.pde deleted file mode 100644 index a469c37..0000000 --- a/libraries/NewPing/examples/NewPingEventTimer/NewPingEventTimer.pde +++ /dev/null @@ -1,46 +0,0 @@ -// --------------------------------------------------------------------------- -// This example shows how to use NewPing's ping_timer method which uses the Timer2 interrupt to get the -// ping time. The advantage of using this method over the standard ping method is that it permits a more -// event-driven sketch which allows you to appear to do two things at once. An example would be to ping -// an ultrasonic sensor for a possible collision while at the same time navigating. This allows a -// properly developed sketch to multitask. Be aware that because the ping_timer method uses Timer2, -// other features or libraries that also use Timer2 would be effected. For example, the PWM function on -// pins 3 & 11 on Arduino Uno (pins 9 and 11 on Arduino Mega) and the Tone library. Note, only the PWM -// functionality of the pins is lost (as they use Timer2 to do PWM), the pins are still available to use. -// NOTE: For Teensy/Leonardo (ATmega32U4) the library uses Timer4 instead of Timer2. -// --------------------------------------------------------------------------- -#include - -#define TRIGGER_PIN 12 // Arduino pin tied to trigger pin on ping sensor. -#define ECHO_PIN 11 // Arduino pin tied to echo pin on ping sensor. -#define MAX_DISTANCE 200 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm. - -NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance. - -unsigned int pingSpeed = 50; // How frequently are we going to send out a ping (in milliseconds). 50ms would be 20 times a second. -unsigned long pingTimer; // Holds the next ping time. - -void setup() { - Serial.begin(115200); // Open serial monitor at 115200 baud to see ping results. - pingTimer = millis(); // Start now. -} - -void loop() { - // Notice how there's no delays in this sketch to allow you to do other processing in-line while doing distance pings. - if (millis() >= pingTimer) { // pingSpeed milliseconds since last ping, do another ping. - pingTimer += pingSpeed; // Set the next ping time. - sonar.ping_timer(echoCheck); // Send out the ping, calls "echoCheck" function every 24uS where you can check the ping status. - } - // Do other stuff here, really. Think of it as multi-tasking. -} - -void echoCheck() { // Timer2 interrupt calls this function every 24uS where you can check the ping status. - // Don't do anything here! - if (sonar.check_timer()) { // This is how you check to see if the ping was received. - // Here's where you can add code. - Serial.print("Ping: "); - Serial.print(sonar.ping_result / US_ROUNDTRIP_CM); // Ping returned, uS result in ping_result, convert to cm with US_ROUNDTRIP_CM. - Serial.println("cm"); - } - // Don't do anything here! -} \ No newline at end of file diff --git a/libraries/NewPing/examples/NewPingExample/NewPingExample.ino b/libraries/NewPing/examples/NewPingExample/NewPingExample.ino deleted file mode 100644 index a37f5e9..0000000 --- a/libraries/NewPing/examples/NewPingExample/NewPingExample.ino +++ /dev/null @@ -1,23 +0,0 @@ -// --------------------------------------------------------------------------- -// Example NewPing library sketch that does a ping about 20 times per second. -// --------------------------------------------------------------------------- - -#include - -#define TRIGGER_PIN 12 // Arduino pin tied to trigger pin on the ultrasonic sensor. -#define ECHO_PIN 11 // Arduino pin tied to echo pin on the ultrasonic sensor. -#define MAX_DISTANCE 200 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm. - -NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance. - -void setup() { - Serial.begin(115200); // Open serial monitor at 115200 baud to see ping results. -} - -void loop() { - delay(50); // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings. - unsigned int uS = sonar.ping(); // Send ping, get ping time in microseconds (uS). - Serial.print("Ping: "); - Serial.print(uS / US_ROUNDTRIP_CM); // Convert ping time to distance in cm and print result (0 = outside set distance range) - Serial.println("cm"); -} diff --git a/libraries/NewPing/examples/TimerExample/TimerExample.pde b/libraries/NewPing/examples/TimerExample/TimerExample.pde deleted file mode 100644 index 35e1db2..0000000 --- a/libraries/NewPing/examples/TimerExample/TimerExample.pde +++ /dev/null @@ -1,25 +0,0 @@ -// --------------------------------------------------------------------------- -// While the NewPing library's primary goal is to interface with ultrasonic sensors, interfacing with -// the Timer2 interrupt was a result of creating an interrupt-based ping method. Since these Timer2 -// interrupt methods were built, the library may as well provide the functionality to use these methods -// in your sketches. This shows how simple it is (no ultrasonic sensor required). Keep in mind that -// these methods use Timer2, as does NewPing's ping_timer method for using ultrasonic sensors. You -// can't use ping_timer at the same time you're using timer_ms or timer_us as all use the same timer. -// --------------------------------------------------------------------------- - -#include - -#define LED_PIN 13 // Pin with LED attached. - -void setup() { - pinMode(LED_PIN, OUTPUT); - NewPing::timer_ms(500, toggleLED); // Create a Timer2 interrupt that calls toggleLED in your sketch once every 500 milliseconds. -} - -void loop() { - // Do anything here, the Timer2 interrupt will take care of the flashing LED without your intervention. -} - -void toggleLED() { - digitalWrite(LED_PIN, !digitalRead(LED_PIN)); // Toggle the LED. -} \ No newline at end of file diff --git a/libraries/NewPing/keywords.txt b/libraries/NewPing/keywords.txt deleted file mode 100644 index ff7805b..0000000 --- a/libraries/NewPing/keywords.txt +++ /dev/null @@ -1,29 +0,0 @@ -################################### -# Syntax Coloring Map For NewPing -################################### - -################################### -# Datatypes (KEYWORD1) -################################### - -NewPing KEYWORD1 - -################################### -# Methods and Functions (KEYWORD2) -################################### - -ping KEYWORD2 -ping_in KEYWORD2 -ping_cm KEYWORD2 -ping_median KEYWORD2 -ping_timer KEYWORD2 -check_timer KEYWORD2 -timer_us KEYWORD2 -timer_ms KEYWORD2 -timer_stop KEYWORD2 -convert_in KEYWORD2 -convert_cm KEYWORD2 - -################################### -# Constants (LITERAL1) -################################### diff --git a/libraries/NewRemoteSwitch/NewRemoteReceiver.cpp b/libraries/NewRemoteSwitch/NewRemoteReceiver.cpp deleted file mode 100644 index b4e9ce6..0000000 --- a/libraries/NewRemoteSwitch/NewRemoteReceiver.cpp +++ /dev/null @@ -1,318 +0,0 @@ -/* - * NewRemoteSwitch library v1.1.0 (20130601) made by Randy Simons http://randysimons.nl/ - * See NewRemoteReceiver.h for details. - * - * License: GPLv3. See license.txt - */ - -#include "NewRemoteReceiver.h" - - -/************ -* NewRemoteReceiver - -Protocol. (Copied from Wieltje, http://www.circuitsonline.net/forum/view/message/1181410#1181410, -but with slightly different timings, as measured on my device.) - _ _ -'0': | |_| |_____ (T,T,T,5T) - _ _ -'1': | |_____| |_ (T,5T,T,T) - _ _ -dim: | |_| |_ (T,T,T,T) - -T = short period of ~260µs. However, this code tries -to figure out the correct period - -A full frame looks like this: - -- start pulse: 1T high, 10.44T low -- 26 bit: Address -- 1 bit: group bit -- 1 bit: on/off/[dim] -- 4 bit: unit -- [4 bit: dim level. Only present of [dim] is chosen] -- stop pulse: 1T high, 40T low - -************/ - -int8_t NewRemoteReceiver::_interrupt; -volatile short NewRemoteReceiver::_state; -byte NewRemoteReceiver::_minRepeats; -NewRemoteReceiverCallBack NewRemoteReceiver::_callback; -boolean NewRemoteReceiver::_inCallback = false; -boolean NewRemoteReceiver::_enabled = false; - -void NewRemoteReceiver::init(int8_t interrupt, byte minRepeats, NewRemoteReceiverCallBack callback) { - _interrupt = interrupt; - _minRepeats = minRepeats; - _callback = callback; - - enable(); - if (_interrupt >= 0) { - attachInterrupt(_interrupt, interruptHandler, CHANGE); - } -} - -void NewRemoteReceiver::enable() { - _state = -1; - _enabled = true; -} - -void NewRemoteReceiver::disable() { - _enabled = false; -} - -void NewRemoteReceiver::deinit() { - _enabled = false; - if (_interrupt >= 0) { - detachInterrupt(_interrupt); - } -} - -void NewRemoteReceiver::interruptHandler() { - // This method is written as compact code to keep it fast. While breaking up this method into more - // methods would certainly increase the readability, it would also be much slower to execute. - // Making calls to other methods is quite expensive on AVR. As These interrupt handlers are called - // many times a second, calling other methods should be kept to a minimum. - - if (!_enabled) { - return; - } - - static byte receivedBit; // Contains "bit" currently receiving - static NewRemoteCode receivedCode; // Contains received code - static NewRemoteCode previousCode; // Contains previous received code - static byte repeats = 0; // The number of times the an identical code is received in a row. - static unsigned long edgeTimeStamp[3] = {0, }; // Timestamp of edges - static unsigned int min1Period, max1Period, min5Period, max5Period; - static bool skip; - - // Filter out too short pulses. This method works as a low pass filter. - edgeTimeStamp[1] = edgeTimeStamp[2]; - edgeTimeStamp[2] = micros(); - - if (skip) { - skip = false; - return; - } - - if (_state >= 0 && edgeTimeStamp[2]-edgeTimeStamp[1] < min1Period) { - // Last edge was too short. - // Skip this edge, and the next too. - skip = true; - return; - } - - unsigned int duration = edgeTimeStamp[1] - edgeTimeStamp[0]; - edgeTimeStamp[0] = edgeTimeStamp[1]; - - // Note that if state>=0, duration is always >= 1 period. - - if (_state == -1) { - // wait for the long low part of a stop bit. - // Stopbit: 1T high, 40T low - // By default 1T is 260µs, but for maximum compatibility go as low as 120µs - if (duration > 4800) { // =40*120µs, minimal time between two edges before decoding starts. - // Sync signal received.. Preparing for decoding - repeats = 0; - - receivedCode.period = duration / 40; // Measured signal is 40T, so 1T (period) is measured signal / 40. - - // Allow for large error-margin. ElCheapo-hardware :( - min1Period = receivedCode.period * 3 / 10; // Lower limit for 1 period is 0.3 times measured period; high signals can "linger" a bit sometimes, making low signals quite short. - max1Period = receivedCode.period * 3; // Upper limit for 1 period is 3 times measured period - min5Period = receivedCode.period * 3; // Lower limit for 5 periods is 3 times measured period - max5Period = receivedCode.period * 8; // Upper limit for 5 periods is 8 times measured period - } - else { - return; - } - } else if (_state == 0) { // Verify start bit part 1 of 2 - // Duration must be ~1T - if (duration > max1Period) { - _state = -1; - return; - } - // Start-bit passed. Do some clean-up. - receivedCode.address = receivedCode.unit = receivedCode.dimLevel = 0; - } else if (_state == 1) { // Verify start bit part 2 of 2 - // Duration must be ~10.44T - if (duration < 7 * receivedCode.period || duration > 15 * receivedCode.period) { - _state = -1; - return; - } - } else if (_state < 148) { // state 146 is first edge of stop-sequence. All bits before that adhere to default protocol, with exception of dim-bit - receivedBit <<= 1; - - // One bit consists out of 4 bit parts. - // bit part durations can ONLY be 1 or 5 periods. - if (duration <= max1Period) { - receivedBit &= B1110; // Clear LSB of receivedBit - } else if (duration >= min5Period && duration <= max5Period) { - receivedBit |= B1; // Set LSB of receivedBit - } else if ( - // Check if duration matches the second part of stopbit (duration must be ~40T), and ... - (duration >= 20 * receivedCode.period && duration <= 80 * receivedCode.period) && - // if first part op stopbit was a short signal (short signal yielded a 0 as second bit in receivedBit), and ... - ((receivedBit & B10) == B00) && - // we are in a state in which a stopbit is actually valid, only then ... - (_state == 147 || _state == 131) ) { - // If a dim-level was present... - if (_state == 147) { - // ... test if it was an "on" signal ... - if (receivedCode.switchType == NewRemoteCode::on) { - // ... set the appropriate switch type - receivedCode.switchType = NewRemoteCode::on_with_dim; - } else { - // ... otherwise it was wrong (e.g. off-signal with dim) - _state = -1; - return; - } - } - - // a valid signal was found! - if ( - receivedCode.address != previousCode.address || - receivedCode.unit != previousCode.unit || - receivedCode.dimLevel != previousCode.dimLevel || - receivedCode.groupBit != previousCode.groupBit || - receivedCode.switchType != previousCode.switchType - ) { // memcmp isn't deemed safe - repeats=0; - previousCode = receivedCode; - } - - repeats++; - - if (repeats>=_minRepeats) { - if (!_inCallback) { - _inCallback = true; - (_callback)(receivedCode); - _inCallback = false; - } - // Reset after callback. - _state=-1; - return; - } - - // Reset for next round - _state=0; // no need to wait for another sync-bit! - return; - } - else { // Otherwise the entire sequence is invalid - _state = -1; - return; - } - - if (_state % 4 == 1) { // Last bit part? Note: this is the short version of "if ( (_state-2) % 4 == 3 )" - // There are 3 valid options for receivedBit: - // 0, indicated by short short short long == B0001. - // 1, short long shot short == B0100. - // dim, short shot short shot == B0000. - // Everything else: inconsistent data, trash the whole sequence. - - - if (_state < 106) { - // States 2 - 105 are address bit states - - receivedCode.address <<= 1; - - // Decode bit. Only 4 LSB's of receivedBit are used; trim the rest. - switch (receivedBit & B1111) { - case B0001: // Bit "0" received. - // receivedCode.address |= 0; But let's not do that, as it is wasteful. - break; - case B0100: // Bit "1" received. - receivedCode.address |= 1; - break; - default: // Bit was invalid. Abort. - _state = -1; - return; - } - } else if (_state < 110) { - // States 106 - 109 are group bit states. - switch (receivedBit & B1111) { - case B0001: // Bit "0" received. - receivedCode.groupBit = false; - break; - case B0100: // Bit "1" received. - receivedCode.groupBit = true; - break; - default: // Bit was invalid. Abort. - _state = -1; - return; - } - } else if (_state < 114) { - // States 110 - 113 are switch bit states. - switch (receivedBit & B1111) { - case B0001: // Bit "0" received. - receivedCode.switchType = NewRemoteCode::off; - break; - case B0100: // Bit "1" received. Note: this might turn out to be a on_with_dim signal. - receivedCode.switchType = NewRemoteCode::on; - break; - case B0000: // Bit "dim" received. - receivedCode.switchType = NewRemoteCode::dim; - break; - default: // Bit was invalid. Abort. - _state = -1; - return; - } - } else if (_state < 130){ - // States 114 - 129 are unit bit states. - receivedCode.unit <<= 1; - - // Decode bit. - switch (receivedBit & B1111) { - case B0001: // Bit "0" received. - // receivedCode.unit |= 0; But let's not do that, as it is wasteful. - break; - case B0100: // Bit "1" received. - receivedCode.unit |= 1; - break; - default: // Bit was invalid. Abort. - _state = -1; - return; - } - - } else if (_state < 146) { - // States 130 - 145 are dim bit states. - // If switchType == 0 these are never present. - // If switchType == 2 these are always present. - // If switchType == 1 these are or are not present, depending on the revision of the transmitter. - - receivedCode.dimLevel <<= 1; - - // Decode bit. - switch (receivedBit & B1111) { - case B0001: // Bit "0" received. - // receivedCode.dimLevel |= 0; But let's not do that, as it is wasteful. - break; - case B0100: // Bit "1" received. - receivedCode.dimLevel |= 1; - break; - default: // Bit was invalid. Abort. - _state = -1; - return; - } - } - } - } - - _state++; - return; -} - -boolean NewRemoteReceiver::isReceiving(int waitMillis) { - unsigned long startTime=millis(); - - int waited; // Signed int! - do { - if (_state >= 34) { // Abort if a significant part of a code (start pulse + 8 bits) has been received - return true; - } - waited = (millis()-startTime); - } while(waited>=0 && waited <= waitMillis); // Yes, clock wraps every 50 days. And then you'd have to wait for a looooong time. - - return false; -} diff --git a/libraries/NewRemoteSwitch/NewRemoteReceiver.h b/libraries/NewRemoteSwitch/NewRemoteReceiver.h deleted file mode 100644 index eaa5a45..0000000 --- a/libraries/NewRemoteSwitch/NewRemoteReceiver.h +++ /dev/null @@ -1,107 +0,0 @@ -/* - * NewRemoteSwitch library v1.1.0 (20130601) made by Randy Simons http://randysimons.nl/ - * - * License: GPLv3. See license.txt - */ - -#ifndef NewRemoteReceiver_h -#define NewRemoteReceiver_h - -#include - -struct NewRemoteCode { - enum SwitchType { - off = 0, - on = 1, - dim = 2, - on_with_dim = 3 - }; - - unsigned int period; // Detected duration in microseconds of 1T in the received signal - unsigned long address; // Address of received code. [0..2^26-1] - boolean groupBit; // Group bit set or not - SwitchType switchType; // off, on, dim, on_with_dim. - byte unit; // Unit code of received code [0..15] - byte dimLevel; // Dim level [0..15] iff switchType == 2 -}; - -typedef void (*NewRemoteReceiverCallBack)(NewRemoteCode); - -/** -* See RemoteSwitch for introduction. -* -* NewRemoteReceiver decodes the signal received from a 433MHz-receiver, like the "KlikAanKlikUit"-system -* as well as the signal sent by the RemoteSwtich class. When a correct signal is received, -* a user-defined callback function is called. -* -* Note that in the callback function, the interrupts are still disabled. You can enabled them, if needed. -* A call to the callback must be finished before NewRemoteReceiver will call the callback function again, thus -* there is no re-entrant problem. -* -* When sending your own code using NewRemoteSwich, disable() the receiver first. -* -* This is a pure static class, for simplicity and to limit memory-use. -*/ - -class NewRemoteReceiver { - public: - /** - * Initializes the decoder. - * - * If interrupt >= 0, init will register pin to this library. - * If interrupt < 0, no interrupt is registered. In that case, you have to call interruptHandler() - * yourself whenever the output of the receiver changes, or you can use InterruptChain. - * - * @param interrupt The interrupt as is used by Arduino's attachInterrupt function. See attachInterrupt for details. - If < 0, you must call interruptHandler() yourself. - * @param minRepeats The number of times the same code must be received in a row before the callback is calles - * @param callback Pointer to a callback function, with signature void (*func)(NewRemoteCode) - */ - static void init(int8_t interrupt, byte minRepeats, NewRemoteReceiverCallBack callback); - - /** - * Enable decoding. No need to call enable() after init(). - */ - static void enable(); - - /** - * Disable decoding. You can re-enable decoding by calling enable(); - */ - static void disable(); - - /** - * Deinitializes the decoder. Disables decoding and detaches the interrupt handler. If you want to - * re-enable decoding, call init() again. - */ - static void deinit(); - - /** - * Tells wether a signal is being received. If a compatible signal is detected within the time out, isReceiving returns true. - * Since it makes no sense to transmit while another transmitter is active, it's best to wait for isReceiving() to false. - * By default it waits for 150ms, in which a (relative slow) KaKu signal can be broadcasted three times. - * - * Note: isReceiving() depends on interrupts enabled. Thus, when disabled()'ed, or when interrupts are disabled (as is - * the case in the callback), isReceiving() will not work properly. - * - * @param waitMillis number of milliseconds to monitor for signal. - * @return boolean If after waitMillis no signal was being processed, returns false. If before expiration a signal was being processed, returns true. - */ - static boolean isReceiving(int waitMillis = 150); - - /** - * Called every time the signal level changes (high to low or vice versa). Usually called by interrupt. - */ - static void interruptHandler(); - - private: - - static int8_t _interrupt; // Radio input interrupt - volatile static short _state; // State of decoding process. - static byte _minRepeats; - static NewRemoteReceiverCallBack _callback; - static boolean _inCallback; // When true, the callback function is being executed; prevents re-entrance. - static boolean _enabled; // If true, monitoring and decoding is enabled. If false, interruptHandler will return immediately. - -}; - -#endif diff --git a/libraries/NewRemoteSwitch/NewRemoteTransmitter.cpp b/libraries/NewRemoteSwitch/NewRemoteTransmitter.cpp deleted file mode 100644 index 7220901..0000000 --- a/libraries/NewRemoteSwitch/NewRemoteTransmitter.cpp +++ /dev/null @@ -1,134 +0,0 @@ -/* - * NewRemoteSwitch library v1.1.0 (20130601) made by Randy Simons http://randysimons.nl/ - * See NewRemoteTransmitter.h for details. - * - * License: GPLv3. See license.txt - */ - -#include "NewRemoteTransmitter.h" - - -NewRemoteTransmitter::NewRemoteTransmitter(unsigned long address, byte pin, unsigned int periodusec, byte repeats) { - _address = address; - _pin = pin; - _periodusec = periodusec; - _repeats = (1 << repeats) - 1; // I.e. _repeats = 2^repeats - 1 - - pinMode(_pin, OUTPUT); -} - -void NewRemoteTransmitter::sendGroup(boolean switchOn) { - for (int8_t i = _repeats; i >= 0; i--) { - _sendStartPulse(); - - _sendAddress(); - - // Do send group bit - _sendBit(true); - - // Switch on | off - _sendBit(switchOn); - - // No unit. Is this actually ignored?.. - _sendUnit(0); - - _sendStopPulse(); - } -} - -void NewRemoteTransmitter::sendUnit(byte unit, boolean switchOn) { - for (int8_t i = _repeats; i >= 0; i--) { - _sendStartPulse(); - - _sendAddress(); - - // No group bit - _sendBit(false); - - // Switch on | off - _sendBit(switchOn); - - _sendUnit(unit); - - _sendStopPulse(); - } -} - -void NewRemoteTransmitter::sendDim(byte unit, byte dimLevel) { - for (int8_t i = _repeats; i >= 0; i--) { - _sendStartPulse(); - - _sendAddress(); - - // No group bit - _sendBit(false); - - // Switch type 'dim' - digitalWrite(_pin, HIGH); - delayMicroseconds(_periodusec); - digitalWrite(_pin, LOW); - delayMicroseconds(_periodusec); - digitalWrite(_pin, HIGH); - delayMicroseconds(_periodusec); - digitalWrite(_pin, LOW); - delayMicroseconds(_periodusec); - - _sendUnit(unit); - - for (int8_t j=3; j>=0; j--) { - _sendBit(dimLevel & 1<> 1)); // Actually 10.5T insteat of 10.44T. Close enough. -} - -void NewRemoteTransmitter::_sendAddress() { - for (int8_t i=25; i>=0; i--) { - _sendBit((_address >> i) & 1); - } -} - -void NewRemoteTransmitter::_sendUnit(byte unit) { - for (int8_t i=3; i>=0; i--) { - _sendBit(unit & 1< - -/** -* NewRemoteTransmitter provides a generic class for simulation of common RF remote controls, like the A-series -* 'Klik aan Klik uit'-system (http://www.klikaanklikuit.nl/), used to remotely switch lights etc. -* -* This class is meant for new-style remotes, usually accompanied by receivers with "code learning" -* capabilities. For other remotes, use the RemoteTransmitter class. -* -* Hardware required for this library: a 433MHz/434MHz SAW oscillator transmitter, e.g. -* http://www.sparkfun.com/products/10534 -* http://www.conrad.nl/goto/?product=130428 -* -* Notes: -* - I measured the period length with an oscilloscope, using a A-series KAKU transmitter. Other devices -* or manufacturers may use other period length. Use the ShowReceivedCodeNewRemote example to find the -* period length for your devices. -* - You can copy the address of your "real" remotes, so you won't have to learn new codes into the receivers. -* In effect this duplicates a remote. But you can also pick a random number in the range 0..2^26-1. -*/ -class NewRemoteTransmitter { - public: - /** - * Constructor. - * - * To obtain the correct period length, use the ShowReceivedCodeNewRemote example, or you - * can use an oscilloscope. - * - * @param address Address of this transmitter [0..2^26-1] Duplicate the address of your hardware, or choose a random number. - * @param pin Output pin on Arduino to which the transmitter is connected - * @param periodusec Duration of one period, in microseconds. One bit takes 8 periods (but only 4 for 'dim' signal). - * @param repeats [0..8] The 2log-Number of times the signal is repeated. The actual number of repeats will be 2^repeats. 2 would be bare minimum, 4 seems robust, 8 is maximum (and overkill). - */ - NewRemoteTransmitter(unsigned long address, byte pin, unsigned int periodusec = 260, byte repeats = 4); - - /** - * Send on/off command to the address group. - * - * @param switchOn True to send "on" signal, false to send "off" signal. - */ - void sendGroup(boolean switchOn); - - /** - * Send on/off command to an unit on the current address. - * - * @param unit [0..15] target unit. - * @param switchOn True to send "on" signal, false to send "off" signal. - */ - void sendUnit(byte unit, boolean switchOn); - - /** - * Send dim value to an unit on the current address. - * - * @param unit [0..15] target unit. - * @param dimLevel [0..15] Dim level. 0 for off, 15 for brightest level. - */ - void sendDim(byte unit, byte dimLevel); - - protected: - unsigned long _address; // Address of this transmitter. - byte _pin; // Transmitter output pin - unsigned int _periodusec; // Oscillator period in microseconds - byte _repeats; // Number over repetitions of one telegram - - /** - * Transmits start-pulse - */ - void _sendStartPulse(); - - /** - * Transmits address part - */ - void _sendAddress(); - - /** - * Transmits unit part. - * - * @param unit [0-15] target unit. - */ - void _sendUnit(byte unit); - - /** - * Transmits stop pulse. - */ - void _sendStopPulse(); - - /** - * Transmits a single bit. - * - * @param isBitOne True, to send '1', false to send '0'. - */ - void _sendBit(boolean isBitOne); -}; -#endif diff --git a/libraries/NewRemoteSwitch/README.TXT b/libraries/NewRemoteSwitch/README.TXT deleted file mode 100644 index a1b05f4..0000000 --- a/libraries/NewRemoteSwitch/README.TXT +++ /dev/null @@ -1,48 +0,0 @@ -NewRemoteSwitch library v1.1.0 (BETA) for Arduino 1.0 -Made by Randy Simons http://randysimons.nl/ - -This library provides an easy class for Arduino, to send and receive signals -used by some common "new style" 433MHz remote control switches. - -There are two styles of remote: - - "old style", which uses switches or a dial to set the house code. Use the - RemoteSwitch library instead. - - "new style", which use a button on the receivers to "learn" a signal. Use - this library. - -License: GPLv3. See ./NewRemoteSwitch/license.txt - -Latest source and wiki: https://bitbucket.org/fuzzillogic/433mhzforarduino - - -Installation of library: - - Make sure Arduino is closed - - Copy the directory NewRemoteSwitch to the Arduino library directory (usually - /libraries/) - See http://arduino.cc/en/Guide/Libraries for detailed instructions. - -Default installation demo: - - Connect the data-out-pin of a 433MHz receiver to digital pin 2. See photo. - (Note: your hardware may have a different pin configuration!) - - Start Arduino, and open the example: File -> Examples -> NewRemoteSwitch -> - ShowReceivedCode or ShowReceivedCodeNewRemote. - - Compile, upload and run - - Open serial monitor in Arduino (115200 baud) - - Press buttons on a 433MHz-remote, and watch the serial monitor - - -Changelog: -NewRemoteSwitch library v1.1.0 (20130601) for Arduino 1.0 - - BUGFIX: in many occasions, when receiving a dim-level, the code was rejected - even if the signal was correct. - - Support decoding A-series transmitters which transmit a dim-level in - combination with an on-signal, instead of a dim-signal. - - Uses NewRemodeCode::on, ::off, ::dim, ::on_with_dim instead of 0, 1, 2 and 3, - for better readability. This change is backwards compatible. - - Updated examples to use the new NewRemodeCode::on, ::off, ::dim and - ::on_with_dim notation. - - Reduced memory usage (Flash, RAM) - -NewRemoteSwitch library v1.0.0 (20121229) for Arduino 1.0 - - Support for receiving A-series Klik-aan-klik-uit remote. (NewRemoteReceiver) - - With examples to test and demonstrate. diff --git a/libraries/NewRemoteSwitch/docs/hardware setup.jpg b/libraries/NewRemoteSwitch/docs/hardware setup.jpg deleted file mode 100644 index bea017e..0000000 Binary files a/libraries/NewRemoteSwitch/docs/hardware setup.jpg and /dev/null differ diff --git a/libraries/NewRemoteSwitch/docs/new kaku protocol.txt b/libraries/NewRemoteSwitch/docs/new kaku protocol.txt deleted file mode 100644 index c84ca8c..0000000 --- a/libraries/NewRemoteSwitch/docs/new kaku protocol.txt +++ /dev/null @@ -1,23 +0,0 @@ -= Protocol of klikaanklikuit A-series devices = - -Copied from Wieltje, http://www.circuitsonline.net/forum/view/message/1181410#1181410, -but with slightly different timings, as measured on my device. - _ _ -'0': | |_| |_____ (T,T,T,5T) - _ _ -'1': | |_____| |_ (T,5T,T,T) - _ _ -'dim': | |_| |_ (T,T,T,T) - -T = short period of ~260µs. Use the ShowReceivedCodeNewRemote example to find the -actual period length for your devices. - -A full frame looks like this: - -- start pulse: 1T high, 10.44T low -- 26 bit: Address -- 1 bit: group bit -- 1 bit: on/off/[dim] -- 4 bit: unit -- [4 bit: dim level. Only present of [dim] is chosen] -- stop pulse: 1T high, 40T low \ No newline at end of file diff --git a/libraries/NewRemoteSwitch/examples/LearnCode/LearnCode.ino b/libraries/NewRemoteSwitch/examples/LearnCode/LearnCode.ino deleted file mode 100644 index 9a2c907..0000000 --- a/libraries/NewRemoteSwitch/examples/LearnCode/LearnCode.ino +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Demo for RF remote switch receiver. - * This example is for the new KaKu / Home Easy type of remotes! - * - * For details, see NewRemoteReceiver.h! - * - * With this sketch you can control a LED connected to digital pin 13, - * after the sketch learned the code. After start, the LED starts to blink, - * until a valid code has been received. The led stops blinking. Now you - * can control the LED with the remote. - * - * Note: only unit-switches are supported in this sketch, no group or dim. - * - * Set-up: connect the receiver to digital pin 2 and a LED to digital pin 13. - */ - -#include - -boolean codeLearned = false; -unsigned long learnedAddress; -byte learnedUnit; - -void setup() { - // LED-pin as output - pinMode(13, OUTPUT); - - // Init a new receiver on interrupt pin 0, minimal 2 identical repeats, and callback set to processCode. - NewRemoteReceiver::init(0, 2, processCode); -} - -void loop() { - // Blink led until a code has been learned - if (!codeLearned) { - digitalWrite(13, HIGH); - delay(500); - digitalWrite(13, LOW); - delay(500); - } -} - -// Callback function is called only when a valid code is received. -void processCode(NewRemoteCode receivedCode) { - // A code has been received. - // Do we already know the code? - if (!codeLearned) { - // No! Let's learn the received code. - learnedAddress = receivedCode.address; - learnedUnit = receivedCode.unit; - codeLearned = true; - } else { - // Yes! - // Is the received code identical to the learned code? - if (receivedCode.address == learnedAddress && receivedCode.unit == learnedUnit) { - // Yes! - // Switch the LED off if the received code was "off". - // Anything else (on, dim, on_with_dim) will switch the LED on. - if (receivedCode.switchType == NewRemoteCode::off) { - digitalWrite(13, LOW); - } else { - digitalWrite(13, HIGH); - } - } - } -} diff --git a/libraries/NewRemoteSwitch/examples/LightShow/LightShow.ino b/libraries/NewRemoteSwitch/examples/LightShow/LightShow.ino deleted file mode 100644 index 14f8639..0000000 --- a/libraries/NewRemoteSwitch/examples/LightShow/LightShow.ino +++ /dev/null @@ -1,55 +0,0 @@ -/** - * Demo for RF remote switch receiver. - * For details, see NewRemoteReceiver.h! - * - * Connect the transmitter to digital pin 11. - * - * This sketch demonstrates the use of the NewRemoteTransmitter class. - * - * When run, this sketch switches some pre-defined devices on and off in a loop. - * - * NOTE: the actual receivers have the address and group numbers in this example - * are only for demonstration! If you want to duplicate an existing remote, please - * try the "retransmitter"-example instead. - * - * To use this actual example, you'd need to "learn" the used code in the receivers - * This sketch is unsuited for that. - * - */ - -#include - -// Create a transmitter on address 123, using digital pin 11 to transmit, -// with a period duration of 260ms (default), repeating the transmitted -// code 2^3=8 times. -NewRemoteTransmitter transmitter(123, 11, 260, 3); - -void setup() { -} - -void loop() { - // Switch unit 2 off - transmitter.sendUnit(2, false); - - // Switch all devices in the group off - transmitter.sendGroup(false); - - // Set unit 1 to dim-level 3 (range 0-15) - transmitter.sendDim(1, 3); - - // Wait 5 seconds - delay(5000); - - - // Switch unit 2 on - transmitter.sendUnit(2, true); - - // Switch all devices in the group on - transmitter.sendGroup(true); - - // Set unit 1 to dim-level 15, full brightness. - transmitter.sendDim(1, 15); - - // Wait 5 seconds - delay(5000); -} diff --git a/libraries/NewRemoteSwitch/examples/Retransmitter/Retransmitter.ino b/libraries/NewRemoteSwitch/examples/Retransmitter/Retransmitter.ino deleted file mode 100644 index 6266273..0000000 --- a/libraries/NewRemoteSwitch/examples/Retransmitter/Retransmitter.ino +++ /dev/null @@ -1,53 +0,0 @@ -/* -* Demo for RF remote switch receiver. - * For details, see NewRemoteReceiver.h! - * - * Connect the transmitter to digital pin 11, and the receiver to digital pin 2. - * - * When run, this sketch waits for a valid code from a new-style the receiver, - * decodes it, and retransmits it after 5 seconds. - */ - -#include -#include - -void setup() { - // See example ShowReceivedCode for info on this - NewRemoteReceiver::init(0, 2, retransmitter); -} - -void loop() { -} - -void retransmitter(NewRemoteCode receivedCode) { - // Disable the receiver; otherwise it might pick up the retransmit as well. - NewRemoteReceiver::disable(); - - // Need interrupts for delay() - interrupts(); - - // Wait 5 seconds before sending. - delay(5000); - - // Create a new transmitter with the received address and period, use digital pin 11 as output pin - - NewRemoteTransmitter transmitter(receivedCode.address, 11, receivedCode.period); - - if (receivedCode.switchType == NewRemoteCode::dim) { - // Dimmer signal received - transmitter.sendDim(receivedCode.unit, receivedCode.dimLevel); - } else { - // On/Off signal received - bool isOn = receivedCode.switchType == NewRemoteCode::on || receivedCode.switchType == NewRemoteCode::on_with_dim; - - if (receivedCode.groupBit) { - // Send to the group - transmitter.sendGroup(isOn); - } else { - // Send to a single unit - transmitter.sendUnit(receivedCode.unit, isOn); - } - } - - NewRemoteReceiver::enable(); -} diff --git a/libraries/NewRemoteSwitch/examples/ShowReceivedCode/ShowReceivedCode.ino b/libraries/NewRemoteSwitch/examples/ShowReceivedCode/ShowReceivedCode.ino deleted file mode 100644 index 14d8228..0000000 --- a/libraries/NewRemoteSwitch/examples/ShowReceivedCode/ShowReceivedCode.ino +++ /dev/null @@ -1,65 +0,0 @@ -/* -* Demo for RF remote switch receiver. -* This example is for the new KaKu / Home Easy type of remotes! - -* For details, see NewRemoteReceiver.h! -* -* This sketch shows the received signals on the serial port. -* Connect the receiver to digital pin 2. -*/ - -#include - -void setup() { - Serial.begin(115200); - - // Initialize receiver on interrupt 0 (= digital pin 2), calls the callback "showCode" - // after 2 identical codes have been received in a row. (thus, keep the button pressed - // for a moment) - // - // See the interrupt-parameter of attachInterrupt for possible values (and pins) - // to connect the receiver. - NewRemoteReceiver::init(0, 2, showCode); -} - -void loop() { -} - -// Callback function is called only when a valid code is received. -void showCode(NewRemoteCode receivedCode) { - // Note: interrupts are disabled. You can re-enable them if needed. - - // Print the received code. - Serial.print("Addr "); - Serial.print(receivedCode.address); - - if (receivedCode.groupBit) { - Serial.print(" group"); - } else { - Serial.print(" unit "); - Serial.print(receivedCode.unit); - } - - switch (receivedCode.switchType) { - case NewRemoteCode::off: - Serial.print(" off"); - break; - case NewRemoteCode::on: - Serial.print(" on"); - break; - case NewRemoteCode::dim: - Serial.print(" dim level "); - Serial.print(receivedCode.dimLevel); - break; - case NewRemoteCode::on_with_dim: - Serial.print(" on with dim level "); - Serial.print(receivedCode.dimLevel); - break; - } - - Serial.print(", period: "); - Serial.print(receivedCode.period); - Serial.println("us."); -} - - diff --git a/libraries/NewRemoteSwitch/keywords.txt b/libraries/NewRemoteSwitch/keywords.txt deleted file mode 100644 index 876ece8..0000000 --- a/libraries/NewRemoteSwitch/keywords.txt +++ /dev/null @@ -1,11 +0,0 @@ -NewRemoteReceiver KEYWORD1 -NewRemoteCode KEYWORD1 -isReceiving KEYWORD2 -init KEYWORD2 -enable KEYWORD2 -disable KEYWORD2 -deinit KEYWORD2 -NewRemoteTransmitter KEYWORD1 -sendGroup KEYWORD2 -sendUnit KEYWORD2 -sendDim KEYWORD2 \ No newline at end of file diff --git a/libraries/NewRemoteSwitch/license.txt b/libraries/NewRemoteSwitch/license.txt deleted file mode 100644 index 94a9ed0..0000000 --- a/libraries/NewRemoteSwitch/license.txt +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/libraries/OneWire/OneWire.cpp b/libraries/OneWire/OneWire.cpp deleted file mode 100644 index 631813f..0000000 --- a/libraries/OneWire/OneWire.cpp +++ /dev/null @@ -1,557 +0,0 @@ -/* -Copyright (c) 2007, Jim Studt (original old version - many contributors since) - -The latest version of this library may be found at: - http://www.pjrc.com/teensy/td_libs_OneWire.html - -OneWire has been maintained by Paul Stoffregen (paul@pjrc.com) since -January 2010. At the time, it was in need of many bug fixes, but had -been abandoned the original author (Jim Studt). None of the known -contributors were interested in maintaining OneWire. Paul typically -works on OneWire every 6 to 12 months. Patches usually wait that -long. If anyone is interested in more actively maintaining OneWire, -please contact Paul. - -Version 2.2: - Teensy 3.0 compatibility, Paul Stoffregen, paul@pjrc.com - Arduino Due compatibility, http://arduino.cc/forum/index.php?topic=141030 - Fix DS18B20 example negative temperature - Fix DS18B20 example's low res modes, Ken Butcher - Improve reset timing, Mark Tillotson - Add const qualifiers, Bertrik Sikken - Add initial value input to crc16, Bertrik Sikken - Add target_search() function, Scott Roberts - -Version 2.1: - Arduino 1.0 compatibility, Paul Stoffregen - Improve temperature example, Paul Stoffregen - DS250x_PROM example, Guillermo Lovato - PIC32 (chipKit) compatibility, Jason Dangel, dangel.jason AT gmail.com - Improvements from Glenn Trewitt: - - crc16() now works - - check_crc16() does all of calculation/checking work. - - Added read_bytes() and write_bytes(), to reduce tedious loops. - - Added ds2408 example. - Delete very old, out-of-date readme file (info is here) - -Version 2.0: Modifications by Paul Stoffregen, January 2010: -http://www.pjrc.com/teensy/td_libs_OneWire.html - Search fix from Robin James - http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1238032295/27#27 - Use direct optimized I/O in all cases - Disable interrupts during timing critical sections - (this solves many random communication errors) - Disable interrupts during read-modify-write I/O - Reduce RAM consumption by eliminating unnecessary - variables and trimming many to 8 bits - Optimize both crc8 - table version moved to flash - -Modified to work with larger numbers of devices - avoids loop. -Tested in Arduino 11 alpha with 12 sensors. -26 Sept 2008 -- Robin James -http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1238032295/27#27 - -Updated to work with arduino-0008 and to include skip() as of -2007/07/06. --RJL20 - -Modified to calculate the 8-bit CRC directly, avoiding the need for -the 256-byte lookup table to be loaded in RAM. Tested in arduino-0010 --- Tom Pollard, Jan 23, 2008 - -Jim Studt's original library was modified by Josh Larios. - -Tom Pollard, pollard@alum.mit.edu, contributed around May 20, 2008 - -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. - -Much of the code was inspired by Derek Yerger's code, though I don't -think much of that remains. In any event that was.. - (copyleft) 2006 by Derek Yerger - Free to distribute freely. - -The CRC code was excerpted and inspired by the Dallas Semiconductor -sample code bearing this copyright. -//--------------------------------------------------------------------------- -// Copyright (C) 2000 Dallas Semiconductor Corporation, All Rights Reserved. -// -// 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 DALLAS SEMICONDUCTOR 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. -// -// Except as contained in this notice, the name of Dallas Semiconductor -// shall not be used except as stated in the Dallas Semiconductor -// Branding Policy. -//-------------------------------------------------------------------------- -*/ - -#include "OneWire.h" - - -OneWire::OneWire(uint8_t pin) -{ - pinMode(pin, INPUT); - bitmask = PIN_TO_BITMASK(pin); - baseReg = PIN_TO_BASEREG(pin); -#if ONEWIRE_SEARCH - reset_search(); -#endif -} - - -// Perform the onewire reset function. We will wait up to 250uS for -// the bus to come high, if it doesn't then it is broken or shorted -// and we return a 0; -// -// Returns 1 if a device asserted a presence pulse, 0 otherwise. -// -uint8_t OneWire::reset(void) -{ - IO_REG_TYPE mask = bitmask; - volatile IO_REG_TYPE *reg IO_REG_ASM = baseReg; - uint8_t r; - uint8_t retries = 125; - - noInterrupts(); - DIRECT_MODE_INPUT(reg, mask); - interrupts(); - // wait until the wire is high... just in case - do { - if (--retries == 0) return 0; - delayMicroseconds(2); - } while ( !DIRECT_READ(reg, mask)); - - noInterrupts(); - DIRECT_WRITE_LOW(reg, mask); - DIRECT_MODE_OUTPUT(reg, mask); // drive output low - interrupts(); - delayMicroseconds(480); - noInterrupts(); - DIRECT_MODE_INPUT(reg, mask); // allow it to float - delayMicroseconds(70); - r = !DIRECT_READ(reg, mask); - interrupts(); - delayMicroseconds(410); - return r; -} - -// -// Write a bit. Port and bit is used to cut lookup time and provide -// more certain timing. -// -void OneWire::write_bit(uint8_t v) -{ - IO_REG_TYPE mask=bitmask; - volatile IO_REG_TYPE *reg IO_REG_ASM = baseReg; - - if (v & 1) { - noInterrupts(); - DIRECT_WRITE_LOW(reg, mask); - DIRECT_MODE_OUTPUT(reg, mask); // drive output low - delayMicroseconds(10); - DIRECT_WRITE_HIGH(reg, mask); // drive output high - interrupts(); - delayMicroseconds(55); - } else { - noInterrupts(); - DIRECT_WRITE_LOW(reg, mask); - DIRECT_MODE_OUTPUT(reg, mask); // drive output low - delayMicroseconds(65); - DIRECT_WRITE_HIGH(reg, mask); // drive output high - interrupts(); - delayMicroseconds(5); - } -} - -// -// Read a bit. Port and bit is used to cut lookup time and provide -// more certain timing. -// -uint8_t OneWire::read_bit(void) -{ - IO_REG_TYPE mask=bitmask; - volatile IO_REG_TYPE *reg IO_REG_ASM = baseReg; - uint8_t r; - - noInterrupts(); - DIRECT_MODE_OUTPUT(reg, mask); - DIRECT_WRITE_LOW(reg, mask); - delayMicroseconds(3); - DIRECT_MODE_INPUT(reg, mask); // let pin float, pull up will raise - delayMicroseconds(10); - r = DIRECT_READ(reg, mask); - interrupts(); - delayMicroseconds(53); - return r; -} - -// -// Write a byte. The writing code uses the active drivers to raise the -// pin high, if you need power after the write (e.g. DS18S20 in -// parasite power mode) then set 'power' to 1, otherwise the pin will -// go tri-state at the end of the write to avoid heating in a short or -// other mishap. -// -void OneWire::write(uint8_t v, uint8_t power /* = 0 */) { - uint8_t bitMask; - - for (bitMask = 0x01; bitMask; bitMask <<= 1) { - OneWire::write_bit( (bitMask & v)?1:0); - } - if ( !power) { - noInterrupts(); - DIRECT_MODE_INPUT(baseReg, bitmask); - DIRECT_WRITE_LOW(baseReg, bitmask); - interrupts(); - } -} - -void OneWire::write_bytes(const uint8_t *buf, uint16_t count, bool power /* = 0 */) { - for (uint16_t i = 0 ; i < count ; i++) - write(buf[i]); - if (!power) { - noInterrupts(); - DIRECT_MODE_INPUT(baseReg, bitmask); - DIRECT_WRITE_LOW(baseReg, bitmask); - interrupts(); - } -} - -// -// Read a byte -// -uint8_t OneWire::read() { - uint8_t bitMask; - uint8_t r = 0; - - for (bitMask = 0x01; bitMask; bitMask <<= 1) { - if ( OneWire::read_bit()) r |= bitMask; - } - return r; -} - -void OneWire::read_bytes(uint8_t *buf, uint16_t count) { - for (uint16_t i = 0 ; i < count ; i++) - buf[i] = read(); -} - -// -// Do a ROM select -// -void OneWire::select(const uint8_t rom[8]) -{ - uint8_t i; - - write(0x55); // Choose ROM - - for (i = 0; i < 8; i++) write(rom[i]); -} - -// -// Do a ROM skip -// -void OneWire::skip() -{ - write(0xCC); // Skip ROM -} - -void OneWire::depower() -{ - noInterrupts(); - DIRECT_MODE_INPUT(baseReg, bitmask); - interrupts(); -} - -#if ONEWIRE_SEARCH - -// -// You need to use this function to start a search again from the beginning. -// You do not need to do it for the first search, though you could. -// -void OneWire::reset_search() -{ - // reset the search state - LastDiscrepancy = 0; - LastDeviceFlag = FALSE; - LastFamilyDiscrepancy = 0; - for(int i = 7; ; i--) { - ROM_NO[i] = 0; - if ( i == 0) break; - } -} - -// Setup the search to find the device type 'family_code' on the next call -// to search(*newAddr) if it is present. -// -void OneWire::target_search(uint8_t family_code) -{ - // set the search state to find SearchFamily type devices - ROM_NO[0] = family_code; - for (uint8_t i = 1; i < 8; i++) - ROM_NO[i] = 0; - LastDiscrepancy = 64; - LastFamilyDiscrepancy = 0; - LastDeviceFlag = FALSE; -} - -// -// Perform a search. If this function returns a '1' then it has -// enumerated the next device and you may retrieve the ROM from the -// OneWire::address variable. If there are no devices, no further -// devices, or something horrible happens in the middle of the -// enumeration then a 0 is returned. If a new device is found then -// its address is copied to newAddr. Use OneWire::reset_search() to -// start over. -// -// --- Replaced by the one from the Dallas Semiconductor web site --- -//-------------------------------------------------------------------------- -// Perform the 1-Wire Search Algorithm on the 1-Wire bus using the existing -// search state. -// Return TRUE : device found, ROM number in ROM_NO buffer -// FALSE : device not found, end of search -// -uint8_t OneWire::search(uint8_t *newAddr) -{ - uint8_t id_bit_number; - uint8_t last_zero, rom_byte_number, search_result; - uint8_t id_bit, cmp_id_bit; - - unsigned char rom_byte_mask, search_direction; - - // initialize for search - id_bit_number = 1; - last_zero = 0; - rom_byte_number = 0; - rom_byte_mask = 1; - search_result = 0; - - // if the last call was not the last one - if (!LastDeviceFlag) - { - // 1-Wire reset - if (!reset()) - { - // reset the search - LastDiscrepancy = 0; - LastDeviceFlag = FALSE; - LastFamilyDiscrepancy = 0; - return FALSE; - } - - // issue the search command - write(0xF0); - - // loop to do the search - do - { - // read a bit and its complement - id_bit = read_bit(); - cmp_id_bit = read_bit(); - - // check for no devices on 1-wire - if ((id_bit == 1) && (cmp_id_bit == 1)) - break; - else - { - // all devices coupled have 0 or 1 - if (id_bit != cmp_id_bit) - search_direction = id_bit; // bit write value for search - else - { - // if this discrepancy if before the Last Discrepancy - // on a previous next then pick the same as last time - if (id_bit_number < LastDiscrepancy) - search_direction = ((ROM_NO[rom_byte_number] & rom_byte_mask) > 0); - else - // if equal to last pick 1, if not then pick 0 - search_direction = (id_bit_number == LastDiscrepancy); - - // if 0 was picked then record its position in LastZero - if (search_direction == 0) - { - last_zero = id_bit_number; - - // check for Last discrepancy in family - if (last_zero < 9) - LastFamilyDiscrepancy = last_zero; - } - } - - // set or clear the bit in the ROM byte rom_byte_number - // with mask rom_byte_mask - if (search_direction == 1) - ROM_NO[rom_byte_number] |= rom_byte_mask; - else - ROM_NO[rom_byte_number] &= ~rom_byte_mask; - - // serial number search direction write bit - write_bit(search_direction); - - // increment the byte counter id_bit_number - // and shift the mask rom_byte_mask - id_bit_number++; - rom_byte_mask <<= 1; - - // if the mask is 0 then go to new SerialNum byte rom_byte_number and reset mask - if (rom_byte_mask == 0) - { - rom_byte_number++; - rom_byte_mask = 1; - } - } - } - while(rom_byte_number < 8); // loop until through all ROM bytes 0-7 - - // if the search was successful then - if (!(id_bit_number < 65)) - { - // search successful so set LastDiscrepancy,LastDeviceFlag,search_result - LastDiscrepancy = last_zero; - - // check for last device - if (LastDiscrepancy == 0) - LastDeviceFlag = TRUE; - - search_result = TRUE; - } - } - - // if no device found then reset counters so next 'search' will be like a first - if (!search_result || !ROM_NO[0]) - { - LastDiscrepancy = 0; - LastDeviceFlag = FALSE; - LastFamilyDiscrepancy = 0; - search_result = FALSE; - } - for (int i = 0; i < 8; i++) newAddr[i] = ROM_NO[i]; - return search_result; - } - -#endif - -#if ONEWIRE_CRC -// The 1-Wire CRC scheme is described in Maxim Application Note 27: -// "Understanding and Using Cyclic Redundancy Checks with Maxim iButton Products" -// - -#if ONEWIRE_CRC8_TABLE -// This table comes from Dallas sample code where it is freely reusable, -// though Copyright (C) 2000 Dallas Semiconductor Corporation -static const uint8_t PROGMEM dscrc_table[] = { - 0, 94,188,226, 97, 63,221,131,194,156,126, 32,163,253, 31, 65, - 157,195, 33,127,252,162, 64, 30, 95, 1,227,189, 62, 96,130,220, - 35,125,159,193, 66, 28,254,160,225,191, 93, 3,128,222, 60, 98, - 190,224, 2, 92,223,129, 99, 61,124, 34,192,158, 29, 67,161,255, - 70, 24,250,164, 39,121,155,197,132,218, 56,102,229,187, 89, 7, - 219,133,103, 57,186,228, 6, 88, 25, 71,165,251,120, 38,196,154, - 101, 59,217,135, 4, 90,184,230,167,249, 27, 69,198,152,122, 36, - 248,166, 68, 26,153,199, 37,123, 58,100,134,216, 91, 5,231,185, - 140,210, 48,110,237,179, 81, 15, 78, 16,242,172, 47,113,147,205, - 17, 79,173,243,112, 46,204,146,211,141,111, 49,178,236, 14, 80, - 175,241, 19, 77,206,144,114, 44,109, 51,209,143, 12, 82,176,238, - 50,108,142,208, 83, 13,239,177,240,174, 76, 18,145,207, 45,115, - 202,148,118, 40,171,245, 23, 73, 8, 86,180,234,105, 55,213,139, - 87, 9,235,181, 54,104,138,212,149,203, 41,119,244,170, 72, 22, - 233,183, 85, 11,136,214, 52,106, 43,117,151,201, 74, 20,246,168, - 116, 42,200,150, 21, 75,169,247,182,232, 10, 84,215,137,107, 53}; - -// -// Compute a Dallas Semiconductor 8 bit CRC. These show up in the ROM -// and the registers. (note: this might better be done without to -// table, it would probably be smaller and certainly fast enough -// compared to all those delayMicrosecond() calls. But I got -// confused, so I use this table from the examples.) -// -uint8_t OneWire::crc8(const uint8_t *addr, uint8_t len) -{ - uint8_t crc = 0; - - while (len--) { - crc = pgm_read_byte(dscrc_table + (crc ^ *addr++)); - } - return crc; -} -#else -// -// Compute a Dallas Semiconductor 8 bit CRC directly. -// this is much slower, but much smaller, than the lookup table. -// -uint8_t OneWire::crc8(const uint8_t *addr, uint8_t len) -{ - uint8_t crc = 0; - - while (len--) { - uint8_t inbyte = *addr++; - for (uint8_t i = 8; i; i--) { - uint8_t mix = (crc ^ inbyte) & 0x01; - crc >>= 1; - if (mix) crc ^= 0x8C; - inbyte >>= 1; - } - } - return crc; -} -#endif - -#if ONEWIRE_CRC16 -bool OneWire::check_crc16(const uint8_t* input, uint16_t len, const uint8_t* inverted_crc, uint16_t crc) -{ - crc = ~crc16(input, len, crc); - return (crc & 0xFF) == inverted_crc[0] && (crc >> 8) == inverted_crc[1]; -} - -uint16_t OneWire::crc16(const uint8_t* input, uint16_t len, uint16_t crc) -{ - static const uint8_t oddparity[16] = - { 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0 }; - - for (uint16_t i = 0 ; i < len ; i++) { - // Even though we're just copying a byte from the input, - // we'll be doing 16-bit computation with it. - uint16_t cdata = input[i]; - cdata = (cdata ^ crc) & 0xff; - crc >>= 8; - - if (oddparity[cdata & 0x0F] ^ oddparity[cdata >> 4]) - crc ^= 0xC001; - - cdata <<= 6; - crc ^= cdata; - cdata <<= 1; - crc ^= cdata; - } - return crc; -} -#endif - -#endif diff --git a/libraries/OneWire/OneWire.h b/libraries/OneWire/OneWire.h deleted file mode 100644 index 916c529..0000000 --- a/libraries/OneWire/OneWire.h +++ /dev/null @@ -1,229 +0,0 @@ -#ifndef OneWire_h -#define OneWire_h - -#include - -#if ARDUINO >= 100 -#include "Arduino.h" // for delayMicroseconds, digitalPinToBitMask, etc -#else -#include "WProgram.h" // for delayMicroseconds -#include "pins_arduino.h" // for digitalPinToBitMask, etc -#endif - -// You can exclude certain features from OneWire. In theory, this -// might save some space. In practice, the compiler automatically -// removes unused code (technically, the linker, using -fdata-sections -// and -ffunction-sections when compiling, and Wl,--gc-sections -// when linking), so most of these will not result in any code size -// reduction. Well, unless you try to use the missing features -// and redesign your program to not need them! ONEWIRE_CRC8_TABLE -// is the exception, because it selects a fast but large algorithm -// or a small but slow algorithm. - -// you can exclude onewire_search by defining that to 0 -#ifndef ONEWIRE_SEARCH -#define ONEWIRE_SEARCH 1 -#endif - -// You can exclude CRC checks altogether by defining this to 0 -#ifndef ONEWIRE_CRC -#define ONEWIRE_CRC 1 -#endif - -// Select the table-lookup method of computing the 8-bit CRC -// by setting this to 1. The lookup table enlarges code size by -// about 250 bytes. It does NOT consume RAM (but did in very -// old versions of OneWire). If you disable this, a slower -// but very compact algorithm is used. -#ifndef ONEWIRE_CRC8_TABLE -#define ONEWIRE_CRC8_TABLE 1 -#endif - -// You can allow 16-bit CRC checks by defining this to 1 -// (Note that ONEWIRE_CRC must also be 1.) -#ifndef ONEWIRE_CRC16 -#define ONEWIRE_CRC16 1 -#endif - -#define FALSE 0 -#define TRUE 1 - -// Platform specific I/O definitions - -#if defined(__AVR__) -#define PIN_TO_BASEREG(pin) (portInputRegister(digitalPinToPort(pin))) -#define PIN_TO_BITMASK(pin) (digitalPinToBitMask(pin)) -#define IO_REG_TYPE uint8_t -#define IO_REG_ASM asm("r30") -#define DIRECT_READ(base, mask) (((*(base)) & (mask)) ? 1 : 0) -#define DIRECT_MODE_INPUT(base, mask) ((*((base)+1)) &= ~(mask)) -#define DIRECT_MODE_OUTPUT(base, mask) ((*((base)+1)) |= (mask)) -#define DIRECT_WRITE_LOW(base, mask) ((*((base)+2)) &= ~(mask)) -#define DIRECT_WRITE_HIGH(base, mask) ((*((base)+2)) |= (mask)) - -#elif defined(__MK20DX128__) -#define PIN_TO_BASEREG(pin) (portOutputRegister(pin)) -#define PIN_TO_BITMASK(pin) (1) -#define IO_REG_TYPE uint8_t -#define IO_REG_ASM -#define DIRECT_READ(base, mask) (*((base)+512)) -#define DIRECT_MODE_INPUT(base, mask) (*((base)+640) = 0) -#define DIRECT_MODE_OUTPUT(base, mask) (*((base)+640) = 1) -#define DIRECT_WRITE_LOW(base, mask) (*((base)+256) = 1) -#define DIRECT_WRITE_HIGH(base, mask) (*((base)+128) = 1) - -#elif defined(__SAM3X8E__) -// Arduino 1.5.1 may have a bug in delayMicroseconds() on Arduino Due. -// http://arduino.cc/forum/index.php/topic,141030.msg1076268.html#msg1076268 -// If you have trouble with OneWire on Arduino Due, please check the -// status of delayMicroseconds() before reporting a bug in OneWire! -#define PIN_TO_BASEREG(pin) (&(digitalPinToPort(pin)->PIO_PER)) -#define PIN_TO_BITMASK(pin) (digitalPinToBitMask(pin)) -#define IO_REG_TYPE uint32_t -#define IO_REG_ASM -#define DIRECT_READ(base, mask) (((*((base)+15)) & (mask)) ? 1 : 0) -#define DIRECT_MODE_INPUT(base, mask) ((*((base)+5)) = (mask)) -#define DIRECT_MODE_OUTPUT(base, mask) ((*((base)+4)) = (mask)) -#define DIRECT_WRITE_LOW(base, mask) ((*((base)+13)) = (mask)) -#define DIRECT_WRITE_HIGH(base, mask) ((*((base)+12)) = (mask)) -#ifndef PROGMEM -#define PROGMEM -#endif -#ifndef pgm_read_byte -#define pgm_read_byte(addr) (*(const uint8_t *)(addr)) -#endif - -#elif defined(__PIC32MX__) -#define PIN_TO_BASEREG(pin) (portModeRegister(digitalPinToPort(pin))) -#define PIN_TO_BITMASK(pin) (digitalPinToBitMask(pin)) -#define IO_REG_TYPE uint32_t -#define IO_REG_ASM -#define DIRECT_READ(base, mask) (((*(base+4)) & (mask)) ? 1 : 0) //PORTX + 0x10 -#define DIRECT_MODE_INPUT(base, mask) ((*(base+2)) = (mask)) //TRISXSET + 0x08 -#define DIRECT_MODE_OUTPUT(base, mask) ((*(base+1)) = (mask)) //TRISXCLR + 0x04 -#define DIRECT_WRITE_LOW(base, mask) ((*(base+8+1)) = (mask)) //LATXCLR + 0x24 -#define DIRECT_WRITE_HIGH(base, mask) ((*(base+8+2)) = (mask)) //LATXSET + 0x28 - -#else -#error "Please define I/O register types here" -#endif - - -class OneWire -{ - private: - IO_REG_TYPE bitmask; - volatile IO_REG_TYPE *baseReg; - -#if ONEWIRE_SEARCH - // global search state - unsigned char ROM_NO[8]; - uint8_t LastDiscrepancy; - uint8_t LastFamilyDiscrepancy; - uint8_t LastDeviceFlag; -#endif - - public: - OneWire( uint8_t pin); - - // Perform a 1-Wire reset cycle. Returns 1 if a device responds - // with a presence pulse. Returns 0 if there is no device or the - // bus is shorted or otherwise held low for more than 250uS - uint8_t reset(void); - - // Issue a 1-Wire rom select command, you do the reset first. - void select(const uint8_t rom[8]); - - // Issue a 1-Wire rom skip command, to address all on bus. - void skip(void); - - // Write a byte. If 'power' is one then the wire is held high at - // the end for parasitically powered devices. You are responsible - // for eventually depowering it by calling depower() or doing - // another read or write. - void write(uint8_t v, uint8_t power = 0); - - void write_bytes(const uint8_t *buf, uint16_t count, bool power = 0); - - // Read a byte. - uint8_t read(void); - - void read_bytes(uint8_t *buf, uint16_t count); - - // Write a bit. The bus is always left powered at the end, see - // note in write() about that. - void write_bit(uint8_t v); - - // Read a bit. - uint8_t read_bit(void); - - // Stop forcing power onto the bus. You only need to do this if - // you used the 'power' flag to write() or used a write_bit() call - // and aren't about to do another read or write. You would rather - // not leave this powered if you don't have to, just in case - // someone shorts your bus. - void depower(void); - -#if ONEWIRE_SEARCH - // Clear the search state so that if will start from the beginning again. - void reset_search(); - - // Setup the search to find the device type 'family_code' on the next call - // to search(*newAddr) if it is present. - void target_search(uint8_t family_code); - - // Look for the next device. Returns 1 if a new address has been - // returned. A zero might mean that the bus is shorted, there are - // no devices, or you have already retrieved all of them. It - // might be a good idea to check the CRC to make sure you didn't - // get garbage. The order is deterministic. You will always get - // the same devices in the same order. - uint8_t search(uint8_t *newAddr); -#endif - -#if ONEWIRE_CRC - // Compute a Dallas Semiconductor 8 bit CRC, these are used in the - // ROM and scratchpad registers. - static uint8_t crc8(const uint8_t *addr, uint8_t len); - -#if ONEWIRE_CRC16 - // Compute the 1-Wire CRC16 and compare it against the received CRC. - // Example usage (reading a DS2408): - // // Put everything in a buffer so we can compute the CRC easily. - // uint8_t buf[13]; - // buf[0] = 0xF0; // Read PIO Registers - // buf[1] = 0x88; // LSB address - // buf[2] = 0x00; // MSB address - // WriteBytes(net, buf, 3); // Write 3 cmd bytes - // ReadBytes(net, buf+3, 10); // Read 6 data bytes, 2 0xFF, 2 CRC16 - // if (!CheckCRC16(buf, 11, &buf[11])) { - // // Handle error. - // } - // - // @param input - Array of bytes to checksum. - // @param len - How many bytes to use. - // @param inverted_crc - The two CRC16 bytes in the received data. - // This should just point into the received data, - // *not* at a 16-bit integer. - // @param crc - The crc starting value (optional) - // @return True, iff the CRC matches. - static bool check_crc16(const uint8_t* input, uint16_t len, const uint8_t* inverted_crc, uint16_t crc = 0); - - // Compute a Dallas Semiconductor 16 bit CRC. This is required to check - // the integrity of data received from many 1-Wire devices. Note that the - // CRC computed here is *not* what you'll get from the 1-Wire network, - // for two reasons: - // 1) The CRC is transmitted bitwise inverted. - // 2) Depending on the endian-ness of your processor, the binary - // representation of the two-byte return value may have a different - // byte order than the two bytes you get from 1-Wire. - // @param input - Array of bytes to checksum. - // @param len - How many bytes to use. - // @param crc - The crc starting value (optional) - // @return The CRC16, as defined by Dallas Semiconductor. - static uint16_t crc16(const uint8_t* input, uint16_t len, uint16_t crc = 0); -#endif -#endif -}; - -#endif diff --git a/libraries/OneWire/examples/DS18x20_Temperature/DS18x20_Temperature.pde b/libraries/OneWire/examples/DS18x20_Temperature/DS18x20_Temperature.pde deleted file mode 100644 index 68ca194..0000000 --- a/libraries/OneWire/examples/DS18x20_Temperature/DS18x20_Temperature.pde +++ /dev/null @@ -1,112 +0,0 @@ -#include - -// OneWire DS18S20, DS18B20, DS1822 Temperature Example -// -// http://www.pjrc.com/teensy/td_libs_OneWire.html -// -// The DallasTemperature library can do all this work for you! -// http://milesburton.com/Dallas_Temperature_Control_Library - -OneWire ds(10); // on pin 10 (a 4.7K resistor is necessary) - -void setup(void) { - Serial.begin(9600); -} - -void loop(void) { - byte i; - byte present = 0; - byte type_s; - byte data[12]; - byte addr[8]; - float celsius, fahrenheit; - - if ( !ds.search(addr)) { - Serial.println("No more addresses."); - Serial.println(); - ds.reset_search(); - delay(250); - return; - } - - Serial.print("ROM ="); - for( i = 0; i < 8; i++) { - Serial.write(' '); - Serial.print(addr[i], HEX); - } - - if (OneWire::crc8(addr, 7) != addr[7]) { - Serial.println("CRC is not valid!"); - return; - } - Serial.println(); - - // the first ROM byte indicates which chip - switch (addr[0]) { - case 0x10: - Serial.println(" Chip = DS18S20"); // or old DS1820 - type_s = 1; - break; - case 0x28: - Serial.println(" Chip = DS18B20"); - type_s = 0; - break; - case 0x22: - Serial.println(" Chip = DS1822"); - type_s = 0; - break; - default: - Serial.println("Device is not a DS18x20 family device."); - return; - } - - ds.reset(); - ds.select(addr); - ds.write(0x44, 1); // start conversion, with parasite power on at the end - - delay(1000); // maybe 750ms is enough, maybe not - // we might do a ds.depower() here, but the reset will take care of it. - - present = ds.reset(); - ds.select(addr); - ds.write(0xBE); // Read Scratchpad - - Serial.print(" Data = "); - Serial.print(present, HEX); - Serial.print(" "); - for ( i = 0; i < 9; i++) { // we need 9 bytes - data[i] = ds.read(); - Serial.print(data[i], HEX); - Serial.print(" "); - } - Serial.print(" CRC="); - Serial.print(OneWire::crc8(data, 8), HEX); - Serial.println(); - - // Convert the data to actual temperature - // because the result is a 16 bit signed integer, it should - // be stored to an "int16_t" type, which is always 16 bits - // even when compiled on a 32 bit processor. - int16_t raw = (data[1] << 8) | data[0]; - if (type_s) { - raw = raw << 3; // 9 bit resolution default - if (data[7] == 0x10) { - // "count remain" gives full 12 bit resolution - raw = (raw & 0xFFF0) + 12 - data[6]; - } - } else { - byte cfg = (data[4] & 0x60); - // at lower res, the low bits are undefined, so let's zero them - if (cfg == 0x00) raw = raw & ~7; // 9 bit resolution, 93.75 ms - else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms - else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms - //// default is 12 bit resolution, 750 ms conversion time - } - celsius = (float)raw / 16.0; - fahrenheit = celsius * 1.8 + 32.0; - Serial.print(" Temperature = "); - Serial.print(celsius); - Serial.print(" Celsius, "); - Serial.print(fahrenheit); - Serial.println(" Fahrenheit"); -} diff --git a/libraries/OneWire/examples/DS2408_Switch/DS2408_Switch.pde b/libraries/OneWire/examples/DS2408_Switch/DS2408_Switch.pde deleted file mode 100644 index d171f9b..0000000 --- a/libraries/OneWire/examples/DS2408_Switch/DS2408_Switch.pde +++ /dev/null @@ -1,77 +0,0 @@ -#include - -/* - * DS2408 8-Channel Addressable Switch - * - * Writte by Glenn Trewitt, glenn at trewitt dot org - * - * Some notes about the DS2408: - * - Unlike most input/output ports, the DS2408 doesn't have mode bits to - * set whether the pins are input or output. If you issue a read command, - * they're inputs. If you write to them, they're outputs. - * - For reading from a switch, you should use 10K pull-up resisters. - */ - -void PrintBytes(uint8_t* addr, uint8_t count, bool newline=0) { - for (uint8_t i = 0; i < count; i++) { - Serial.print(addr[i]>>4, HEX); - Serial.print(addr[i]&0x0f, HEX); - } - if (newline) - Serial.println(); -} - -void ReadAndReport(OneWire* net, uint8_t* addr) { - Serial.print(" Reading DS2408 "); - PrintBytes(addr, 8); - Serial.println(); - - uint8_t buf[13]; // Put everything in the buffer so we can compute CRC easily. - buf[0] = 0xF0; // Read PIO Registers - buf[1] = 0x88; // LSB address - buf[2] = 0x00; // MSB address - net->write_bytes(buf, 3); - net->read_bytes(buf+3, 10); // 3 cmd bytes, 6 data bytes, 2 0xFF, 2 CRC16 - net->reset(); - - if (!OneWire::check_crc16(buf, 11, &buf[11])) { - Serial.print("CRC failure in DS2408 at "); - PrintBytes(addr, 8, true); - return; - } - Serial.print(" DS2408 data = "); - // First 3 bytes contain command, register address. - Serial.println(buf[3], BIN); -} - -OneWire net(10); // on pin 10 - -void setup(void) { - Serial.begin(9600); -} - -void loop(void) { - byte i; - byte present = 0; - byte addr[8]; - - if (!net.search(addr)) { - Serial.print("No more addresses.\n"); - net.reset_search(); - delay(1000); - return; - } - - if (OneWire::crc8(addr, 7) != addr[7]) { - Serial.print("CRC is not valid!\n"); - return; - } - - if (addr[0] != 0x29) { - PrintBytes(addr, 8); - Serial.print(" is not a DS2408.\n"); - return; - } - - ReadAndReport(&net, addr); -} diff --git a/libraries/OneWire/examples/DS250x_PROM/DS250x_PROM.pde b/libraries/OneWire/examples/DS250x_PROM/DS250x_PROM.pde deleted file mode 100644 index a85b1c2..0000000 --- a/libraries/OneWire/examples/DS250x_PROM/DS250x_PROM.pde +++ /dev/null @@ -1,90 +0,0 @@ -/* -DS250x add-only programmable memory reader w/SKIP ROM. - - The DS250x is a 512/1024bit add-only PROM(you can add data but cannot change the old one) that's used mainly for device identification purposes - like serial number, mfgr data, unique identifiers, etc. It uses the Maxim 1-wire bus. - - This sketch will use the SKIP ROM function that skips the 1-Wire search phase since we only have one device connected in the bus on digital pin 6. - If more than one device is connected to the bus, it will fail. - Sketch will not verify if device connected is from the DS250x family since the skip rom function effectively skips the family-id byte readout. - thus it is possible to run this sketch with any Maxim OneWire device in which case the command CRC will most likely fail. - Sketch will only read the first page of memory(32bits) starting from the lower address(0000h), if more than 1 device is present, then use the sketch with search functions. - Remember to put a 4.7K pullup resistor between pin 6 and +Vcc - - To change the range or ammount of data to read, simply change the data array size, LSB/MSB addresses and for loop iterations - - This example code is in the public domain and is provided AS-IS. - - Built with Arduino 0022 and PJRC OneWire 2.0 library http://www.pjrc.com/teensy/td_libs_OneWire.html - - created by Guillermo Lovato - march/2011 - - */ - -#include -OneWire ds(6); // OneWire bus on digital pin 6 -void setup() { - Serial.begin (9600); -} - -void loop() { - byte i; // This is for the for loops - boolean present; // device present var - byte data[32]; // container for the data from device - byte leemem[3] = { // array with the commands to initiate a read, DS250x devices expect 3 bytes to start a read: command,LSB&MSB adresses - 0xF0 , 0x00 , 0x00 }; // 0xF0 is the Read Data command, followed by 00h 00h as starting address(the beginning, 0000h) - byte ccrc; // Variable to store the command CRC - byte ccrc_calc; - - present = ds.reset(); // OneWire bus reset, always needed to start operation on the bus, returns a 1/TRUE if there's a device present. - ds.skip(); // Skip ROM search - - if (present == TRUE){ // We only try to read the data if there's a device present - Serial.println("DS250x device present"); - ds.write(leemem[0],1); // Read data command, leave ghost power on - ds.write(leemem[1],1); // LSB starting address, leave ghost power on - ds.write(leemem[2],1); // MSB starting address, leave ghost power on - - ccrc = ds.read(); // DS250x generates a CRC for the command we sent, we assign a read slot and store it's value - ccrc_calc = OneWire::crc8(leemem, 3); // We calculate the CRC of the commands we sent using the library function and store it - - if ( ccrc_calc != ccrc) { // Then we compare it to the value the ds250x calculated, if it fails, we print debug messages and abort - Serial.println("Invalid command CRC!"); - Serial.print("Calculated CRC:"); - Serial.println(ccrc_calc,HEX); // HEX makes it easier to observe and compare - Serial.print("DS250x readback CRC:"); - Serial.println(ccrc,HEX); - return; // Since CRC failed, we abort the rest of the loop and start over - } - Serial.println("Data is: "); // For the printout of the data - for ( i = 0; i < 32; i++) { // Now it's time to read the PROM data itself, each page is 32 bytes so we need 32 read commands - data[i] = ds.read(); // we store each read byte to a different position in the data array - Serial.print(data[i]); // printout in ASCII - Serial.print(" "); // blank space - } - Serial.println(); - delay(5000); // Delay so we don't saturate the serial output - } - else { // Nothing is connected in the bus - Serial.println("Nothing connected"); - delay(3000); - } -} - - - - - - - - - - - - - - - - - diff --git a/libraries/OneWire/keywords.txt b/libraries/OneWire/keywords.txt deleted file mode 100644 index bee5d90..0000000 --- a/libraries/OneWire/keywords.txt +++ /dev/null @@ -1,38 +0,0 @@ -####################################### -# Syntax Coloring Map For OneWire -####################################### - -####################################### -# Datatypes (KEYWORD1) -####################################### - -OneWire KEYWORD1 - -####################################### -# Methods and Functions (KEYWORD2) -####################################### - -reset KEYWORD2 -write_bit KEYWORD2 -read_bit KEYWORD2 -write KEYWORD2 -write_bytes KEYWORD2 -read KEYWORD2 -read_bytes KEYWORD2 -select KEYWORD2 -skip KEYWORD2 -depower KEYWORD2 -reset_search KEYWORD2 -search KEYWORD2 -crc8 KEYWORD2 -crc16 KEYWORD2 -check_crc16 KEYWORD2 - -####################################### -# Instances (KEYWORD2) -####################################### - - -####################################### -# Constants (LITERAL1) -####################################### diff --git a/libraries/Oregon/INSTALL.txt b/libraries/Oregon/INSTALL.txt deleted file mode 100644 index b64b460..0000000 --- a/libraries/Oregon/INSTALL.txt +++ /dev/null @@ -1,9 +0,0 @@ -With git: -1) git clone https://github.com/Mickaelh51/Arduino-Oregon-Library.git Oregon -2) Put the "Oregon" folder in your Arduino "libraries" folder. - -Direct download: -1) Download https://github.com/Mickaelh51/Arduino-Oregon-Library/archive/master.zip -2) Extract master.zip -3) rename folder: mv Arduino-Oregon-Library-master Oregon -4) Put the "Oregon" folder in your Arduino "libraries" folder. diff --git a/libraries/Oregon/LICENSE.md b/libraries/Oregon/LICENSE.md deleted file mode 100644 index d58ea55..0000000 --- a/libraries/Oregon/LICENSE.md +++ /dev/null @@ -1,9 +0,0 @@ -##The MIT License (MIT) - -####Copyright (c) 2015: Mickael Hubert, Dominique Pierre, Olivier Lebrun - -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. diff --git a/libraries/Oregon/README.md b/libraries/Oregon/README.md deleted file mode 100644 index 1cf45fc..0000000 --- a/libraries/Oregon/README.md +++ /dev/null @@ -1,65 +0,0 @@ -# Arduino Oregon Library: -##Tested Hardware: -- Arduino UNO -- 433Mhz receiver (connected on digital pin 2) -- Oregon sensors THGR228N - -## Example without MySensors: -Serial output: -``` -Brute Hexadecimal data from sensor: -1A2D10E2711860043CDA -Oregon ID: 226 Hexadecimal: E2 -Sensor ID: 226 has been find in position EEPROM: 0 -Oregon model: THGR228N -Oregon channel: 1 -Oregon temperature: 18.70 -Oregon humidity: 46 -Oregon battery level: 90 - ----- - -Brute Hexadecimal data from sensor: -1A2D10B4201340052F43 -Oregon ID: 180 Hexadecimal: B4 -Sensor ID: 180 has been find in position EEPROM: 1 -Oregon model: THGR228N -Oregon channel: 1 -Oregon temperature: 13.20 -Oregon humidity: 54 -Oregon battery level: 90 -``` - -## Example with MySensors library (www.mysensors.org): -Serial output: -``` -Brute Hexadecimal data from sensor: -1A2D10E2711860043CDA -Oregon ID: 226 Hexadecimal: E2 -Sensor ID: 226 has been find in position EEPROM: 0 -Oregon model: THGR228N -Oregon channel: 1 -Oregon temperature: 18.70 -send: 10-10-0-0 s=0,c=1,t=0,pt=7,l=5,sg=0,st=ok:18.7 -Oregon humidity: 46 -send: 10-10-0-0 s=0,c=1,t=1,pt=7,l=5,sg=0,st=ok:46.0 -Oregon battery level: 90 -send: 10-10-0-0 s=0,c=1,t=24,pt=7,l=5,sg=0,st=ok:90.0 - ----- - -Brute Hexadecimal data from sensor: -1A2D10B4201340052F43 -Oregon ID: 180 Hexadecimal: B4 -Sensor ID: 180 has been find in position EEPROM: 1 -Oregon model: THGR228N -Oregon channel: 1 -Oregon temperature: 13.20 -send: 10-10-0-0 s=1,c=1,t=0,pt=7,l=5,sg=0,st=ok:13.2 -Oregon humidity: 54 -send: 10-10-0-0 s=1,c=1,t=1,pt=7,l=5,sg=0,st=ok:54.0 -Oregon battery level: 90 -send: 10-10-0-0 s=1,c=1,t=24,pt=7,l=5,sg=0,st=ok:90.0 -``` -## Result on OpenHAB controller (With MySensors) -![Logo](http://i.imgur.com/Tsne6yv.png) diff --git a/libraries/Oregon/examples/MySensors_example/MySensors_example.ino b/libraries/Oregon/examples/MySensors_example/MySensors_example.ino deleted file mode 100644 index 86d27af..0000000 --- a/libraries/Oregon/examples/MySensors_example/MySensors_example.ino +++ /dev/null @@ -1,126 +0,0 @@ -/** - * The MySensors Arduino library handles the wireless radio link and protocol - * between your home built sensors/actuators and HA controller of choice. - * The sensors forms a self healing radio network with optional repeaters. Each - * repeater and gateway builds a routing tables in EEPROM which keeps track of the - * network topology allowing messages to be routed to nodes. - * - * Created by Henrik Ekblad - * Copyright (C) 2013-2015 Sensnology AB - * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors - * - * Documentation: http://www.mysensors.org - * Support Forum: http://forum.mysensors.org - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * version 2 as published by the Free Software Foundation. - * - ******************************* - * - * REVISION HISTORY - * WARNING: I use MySensors V1.6.0 (dev branch) (https://github.com/mysensors/Arduino/tree/development/libraries) - * - * Version 1.0 - Hubert Mickael (https://github.com/Mickaelh51) - * - Clean ino code - * - Add MY_DEBUG mode in library - * Version 0.2 (Beta 2) - Hubert Mickael (https://github.com/Mickaelh51) - * - Auto detect Oregon 433Mhz - * - Add battery level - * - etc ... - * Version 0.1 (Beta 1) - Hubert Mickael (https://github.com/Mickaelh51) - * - ******************************* - * DESCRIPTION - * This sketch provides an example how to implement a humidity/temperature from Oregon sensor. - * - Oregon sensor's battery level - * - Oregon sensor's id - * - Oregon sensor's type - * - Oregon sensor's channel - * - Oregon sensor's temperature - * - Oregon sensor's humidity - * - * MySensors gateway <=======> Arduino UNO <-- (PIN 2) --> 433Mhz receiver <=============> Oregon sensors - */ - -// Enable debug prints -#define MY_DEBUG - -#define MY_NODE_ID 10 - -// Enable and select radio type attached -#define MY_RADIO_NRF24 -//#define MY_RADIO_RFM69 - -#include -#include -#include - -//Define pin where is 433Mhz receiver (here, pin 2) -#define MHZ_RECEIVER_PIN 2 -//Define maximum Oregon sensors (here, 3 differents sensors) -#define COUNT_OREGON_SENSORS 3 - -#define CHILD_ID_HUM 0 -#define CHILD_ID_TEMP 1 -#define CHILD_ID_BAT 2 - -MyMessage msgHum(CHILD_ID_HUM, V_HUM); -MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP); -MyMessage msgBat(CHILD_ID_BAT, V_VAR1); - -void setup () -{ - - Serial.println("Setup started"); - - //Setup received data - attachInterrupt(digitalPinToInterrupt(MHZ_RECEIVER_PIN), ext_int_1, CHANGE); - - Serial.println("Setup completed"); -} - -void presentation() -{ - // Send the Sketch Version Information to the Gateway - sendSketchInfo("Oregon Sensor", "1.0"); - - // Present all sensors to controller - for (int i=0; i (https://github.com/Mickaelh51) - * - Clean ino code - * - Add MY_DEBUG mode in library - * Version 0.2 (Beta 2) - Hubert Mickael (https://github.com/Mickaelh51) - * - Auto detect Oregon 433Mhz - * - Add battery level - * - etc ... - * Version 0.1 (Beta 1) - Hubert Mickael (https://github.com/Mickaelh51) - * - ******************************* - * DESCRIPTION - * This sketch provides an example how to implement a humidity/temperature from Oregon sensor. - * - Oregon sensor's battery level - * - Oregon sensor's id - * - Oregon sensor's type - * - Oregon sensor's channel - * - Oregon sensor's temperature - * - Oregon sensor's humidity - * - * Arduino UNO <-- (PIN 2) --> 433Mhz receiver <=============> Oregon sensors - */ - -// Enable debug prints -#define MY_DEBUG - -#include -#include -#include - -//Define pin where is 433Mhz receiver (here, pin 2) -#define MHZ_RECEIVER_PIN 2 -//Define maximum Oregon sensors (here, 3 differents sensors) -#define COUNT_OREGON_SENSORS 3 - -void setup () -{ - - Serial.println("Setup started"); - - //Setup received data - attachInterrupt(digitalPinToInterrupt(MHZ_RECEIVER_PIN), ext_int_1, CHANGE); - - Serial.println("Setup completed"); -} - - -void loop () { - //------------------------------------------ - //Start process new data from Oregon sensors - //------------------------------------------ - cli(); - word p = pulse; - pulse = 0; - sei(); - if (p != 0) - { - if (orscV2.nextPulse(p)) - { - //Decode Hex Data once - const byte* DataDecoded = DataToDecoder(orscV2); - //Find or save Oregon sensors's ID - int SensorID = FindSensor(id(DataDecoded),COUNT_OREGON_SENSORS); - - // just for DEBUG - OregonType(DataDecoded); - channel(DataDecoded); - temperature(DataDecoded); - humidity(DataDecoded); - battery(DataDecoded); - } - - } -} diff --git a/libraries/Oregon/keywords.txt b/libraries/Oregon/keywords.txt deleted file mode 100644 index 35abd36..0000000 --- a/libraries/Oregon/keywords.txt +++ /dev/null @@ -1,45 +0,0 @@ -####################################### -# Syntax Coloring Map For Oregon -# Created by Mickael Hubert -####################################### - -####################################### -# Datatypes (KEYWORD1) -####################################### - -DecodeOOK KEYWORD1 -OregonDecoderV2 KEYWORD1 - -####################################### -# Methods and Functions (KEYWORD2) -####################################### - -nextPulse KEYWORD2 -isDone KEYWORD2 -getData KEYWORD2 -resetDecoder KEYWORD2 -gotBit KEYWORD2 -manchester KEYWORD2 -alignTail KEYWORD2 -reverseBits KEYWORD2 -reverseNibbles KEYWORD2 -done KEYWORD2 -decode KEYWORD2 -ext_int_1 KEYWORD2 -temperature KEYWORD2 -humidity KEYWORD2 -battery KEYWORD2 -id KEYWORD2 -channel KEYWORD2 -OregonType KEYWORD2 -DataToDecoder KEYWORD2 -FindSensor KEYWORD2 - -####################################### -# Instances (KEYWORD2) -####################################### - - -####################################### -# Constants (LITERAL1) -####################################### diff --git a/libraries/Oregon/library.json b/libraries/Oregon/library.json deleted file mode 100644 index 3959090..0000000 --- a/libraries/Oregon/library.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "Oregon", - "keywords": "Oregon, 433Mhz, temperature, humidity, battery, THN132N, THGR228N, MySensors", - "description": "This sketch provides an example how to implement a humidity/temperature from Oregon sensor.", - "repository": - { - "type": "git", - "url": "https://github.com/Mickaelh51/Arduino-Oregon-Library.git" - }, - "authors": - [ - { - "name": "Mickael Hubert", - "email": "github@winlux.fr", - "url": "https://github.com/Mickaelh51", - "maintainer": true - }, - { - "name": "Olivier Lebrun" - }, - { - "name": "Dominique Pierre" - } - ], - "dependencies": - { - "name": "MySensor", - "authors": "Henrik Ekblad", - "frameworks": "arduino" - }, - "frameworks": "arduino", - "platforms": "atmelavr" -} diff --git a/libraries/Oregon/library.properties b/libraries/Oregon/library.properties deleted file mode 100644 index e2ca4bb..0000000 --- a/libraries/Oregon/library.properties +++ /dev/null @@ -1,9 +0,0 @@ -name=Oregon -version=1.0.0 -author=Mickael Hubert, Dominique Pierre, Olivier Lebrun -maintainer=Mickael Hubert -sentence=Decode data from Oregon sensors. -paragraph=This sketch provides an example how to implement a humidity/temperature from Oregon sensor (433Mhz).
Ex: Arduino UNO -- (PIN 2) --> 433Mhz receiver ====> Oregon sensors
-category=Sensors -url=https://github.com/Mickaelh51/Arduino-Oregon-Library -architectures=* diff --git a/libraries/Oregon/src/Oregon.h b/libraries/Oregon/src/Oregon.h deleted file mode 100644 index fbf1c0c..0000000 --- a/libraries/Oregon/src/Oregon.h +++ /dev/null @@ -1,347 +0,0 @@ -// Oregon V2 decoder modified for MySensors compatibility - Mickael Hubert -// Oregon V2 decoder modified - Olivier Lebrun -// Oregon V2 decoder added - Dominique Pierre -// New code to decode OOK signals from weather sensors, etc. -// 2010-04-11 http://opensource.org/licenses/mit-license.php -// $Id: ookDecoder.pde 5331 2010-04-17 10:45:17Z jcw $ - -#ifndef Oregon_h -#define Oregon_h -#include "Arduino.h" - -/*-------------------------- -Class DecodeOOK ---------------------------*/ -class DecodeOOK -{ -protected: - byte total_bits, bits, flip, state, pos, data[25]; - - virtual char decode (word width) =0; - -public: - - enum { UNKNOWN, T0, T1, T2, T3, OK, DONE }; - - DecodeOOK () { resetDecoder(); } - - bool nextPulse (word width) { - if (state != DONE) - - switch (decode(width)) { - case -1: resetDecoder(); break; - case 1: done(); break; - } - return isDone(); - } - - bool isDone () const { return state == DONE; } - - const byte* getData (byte& count) const { - count = pos; - return data; - } - - void resetDecoder () { - total_bits = bits = pos = flip = 0; - state = UNKNOWN; - } - - // add one bit to the packet data buffer - - virtual void gotBit (char value) { - total_bits++; - byte *ptr = data + pos; - *ptr = (*ptr >> 1) | (value << 7); - - if (++bits >= 8) { - bits = 0; - if (++pos >= sizeof data) { - resetDecoder(); - return; - } - } - state = OK; - } - - // store a bit using Manchester encoding - void manchester (char value) { - flip ^= value; // manchester code, long pulse flips the bit - gotBit(flip); - } - - // move bits to the front so that all the bits are aligned to the end - void alignTail (byte max =0) { - // align bits - if (bits != 0) { - data[pos] >>= 8 - bits; - for (byte i = 0; i < pos; ++i) - data[i] = (data[i] >> bits) | (data[i+1] << (8 - bits)); - bits = 0; - } - // optionally shift bytes down if there are too many of 'em - if (max > 0 && pos > max) { - byte n = pos - max; - pos = max; - for (byte i = 0; i < pos; ++i) - data[i] = data[i+n]; - } - } - - void reverseBits () { - for (byte i = 0; i < pos; ++i) { - byte b = data[i]; - for (byte j = 0; j < 8; ++j) { - data[i] = (data[i] << 1) | (b & 1); - b >>= 1; - } - } - } - - void reverseNibbles () { - for (byte i = 0; i < pos; ++i) - data[i] = (data[i] << 4) | (data[i] >> 4); - } - - void done () { - while (bits) - gotBit(0); // padding - state = DONE; - } -}; - -/*-------------------------- -Class OregonDecoderV2 ---------------------------*/ -class OregonDecoderV2 : public DecodeOOK { - public: - - OregonDecoderV2() {} - - // add one bit to the packet data buffer - virtual void gotBit (char value) { - if(!(total_bits & 0x01)) - { - data[pos] = (data[pos] >> 1) | (value ? 0x80 : 00); - } - total_bits++; - pos = total_bits >> 4; - if (pos >= sizeof data) { - //Serial.println("sizeof data"); - resetDecoder(); - return; - } - state = OK; - } - - virtual char decode (word width) { - if (200 <= width && width < 1200) { - //Serial.println(width); - byte w = width >= 700; - - switch (state) { - case UNKNOWN: - if (w != 0) { - // Long pulse - ++flip; - } else if (w == 0 && 24 <= flip) { - // Short pulse, start bit - flip = 0; - state = T0; - } else { - // Reset decoder - return -1; - } - break; - case OK: - if (w == 0) { - // Short pulse - state = T0; - } else { - // Long pulse - manchester(1); - } - break; - case T0: - if (w == 0) { - // Second short pulse - manchester(0); - } else { - // Reset decoder - return -1; - } - break; - } - } else if (width >= 2500 && pos >= 8) { - return 1; - } else { - return -1; - } - return 0; - } -}; - -/*-------------------------- -Manipulation functions ---------------------------*/ -OregonDecoderV2 orscV2; - -volatile word pulse; - -void ext_int_1(void) -{ - static word last; - // determine the pulse length in microseconds, for either polarity - pulse = micros() - last; - last += pulse; -} - -float temperature(const byte* data) -{ - int sign = (data[6]&0x8) ? -1 : 1; - float temp = ((data[5]&0xF0) >> 4)*10 + (data[5]&0xF) + (float)(((data[4]&0xF0) >> 4) / 10.0); - float result = sign * temp; - #ifdef MY_DEBUG - Serial.println("Oregon temperature: " + String(result)); - #endif - return sign * temp; -} - - -byte humidity(const byte* data) -{ - byte humidity = (data[7]&0xF) * 10 + ((data[6]&0xF0) >> 4); - #ifdef MY_DEBUG - Serial.println("Oregon humidity: " + String(humidity)); - #endif - return (humidity); -} - -//10 => battery lovel is LOW -//90 => battery level is HIGH -byte battery(const byte* data) -{ - byte BatteryLevel = (data[4] & 0x4) ? 10 : 90; - #ifdef MY_DEBUG - Serial.println("Oregon battery level: " + String(BatteryLevel)); - #endif - return BatteryLevel; -} - -//Find id from Oregon Sensors -byte id(const byte* data) -{ - #ifdef MY_DEBUG - Serial.print("Oregon ID: " + String(data[3]) + " Hexadecimal: "); - Serial.println(data[3],HEX); - #endif - return (data[3]); -} - -//Find Channel from Oregon Sensors -byte channel(const byte* data) -{ - byte channel; - switch (data[2]) - { - case 0x10: - channel = 1; - break; - case 0x20: - channel = 2; - break; - case 0x40: - channel = 3; - break; - default: - channel = 0; - break; - } - #ifdef MY_DEBUG - Serial.println("Oregon channel: " + String(channel)); - #endif - return channel; -} - -// Detect type of sensor module -const char* OregonType (const byte* data) -{ - const char* Model; - if(data[0] == 0xEA && data[1] == 0x4C) - { - Model = "THN132N"; - } - else if(data[0] == 0x1A && data[1] == 0x2D) - { - Model = "THGR228N"; - } - else - { - Model = "UNKNOWN"; - } - #ifdef MY_DEBUG - Serial.println("Oregon model: " + String(Model)); - #endif - - return Model; -} - -// Decode data once -const byte* DataToDecoder (class DecodeOOK& decoder) -{ - byte pos; - const byte* data = decoder.getData(pos); - #ifdef MY_DEBUG - Serial.println("Brute Hexadecimal data from sensor: "); - for (byte i = 0; i < pos; ++i) { - Serial.print(data[i] >> 4, HEX); - Serial.print(data[i] & 0x0F, HEX); - } - Serial.println(' '); - #endif - decoder.resetDecoder(); - return data; -} - -int FindSensor (const int id, int maxsensor) -{ - int EepromId=0; - for (int i=0; ifunc) - -PN532::PN532(PN532Interface &interface) -{ - _interface = &interface; -} - -/**************************************************************************/ -/*! - @brief Setups the HW -*/ -/**************************************************************************/ -void PN532::begin() -{ - HAL(begin)(); - HAL(wakeup)(); -} - -/**************************************************************************/ -/*! - @brief Prints a hexadecimal value in plain characters - - @param data Pointer to the uint8_t data - @param numBytes Data length in bytes -*/ -/**************************************************************************/ -void PN532::PrintHex(const uint8_t *data, const uint32_t numBytes) -{ - (void)data; - for (uint8_t i = 0; i < numBytes; i++) { - DMSG("0x"); - DMSG_HEX(data[i]); - } - DMSG("\n"); -} - -/**************************************************************************/ -/*! - @brief Prints a hexadecimal value in plain characters, along with - the char equivalents in the following format - - 00 00 00 00 00 00 ...... - - @param data Pointer to the data - @param numBytes Data length in bytes -*/ -/**************************************************************************/ -void PN532::PrintHexChar(const uint8_t *data, const uint32_t numBytes) -{ - for (uint8_t i = 0; i < numBytes; i++) { - DMSG_HEX(data[i]); - } - DMSG(" "); - for (uint8_t i = 0; i < numBytes; i++) { - uint8_t c = data[i]; - if (c <= 0x1f || c > 0x7f) { - DMSG('.'); - } else { - DMSG((char)c); - } - } - -} - -/**************************************************************************/ -/*! - @brief Checks the firmware version of the PN5xx chip - - @returns The chip's firmware version and ID -*/ -/**************************************************************************/ -uint32_t PN532::getFirmwareVersion(void) -{ - uint32_t response; - - pn532_packetbuffer[0] = PN532_COMMAND_GETFIRMWAREVERSION; - - if (HAL(writeCommand)(pn532_packetbuffer, 1)) { - return 0; - } - - // read data packet - int16_t status = HAL(readResponse)(pn532_packetbuffer, sizeof(pn532_packetbuffer)); - if (0 > status) { - return 0; - } - - response = pn532_packetbuffer[0]; - response <<= 8; - response |= pn532_packetbuffer[1]; - response <<= 8; - response |= pn532_packetbuffer[2]; - response <<= 8; - response |= pn532_packetbuffer[3]; - - return response; -} - - -/**************************************************************************/ -/*! - Writes an 8-bit value that sets the state of the PN532's GPIO pins - - @warning This function is provided exclusively for board testing and - is dangerous since it will throw an error if any pin other - than the ones marked "Can be used as GPIO" are modified! All - pins that can not be used as GPIO should ALWAYS be left high - (value = 1) or the system will become unstable and a HW reset - will be required to recover the PN532. - - pinState[0] = P30 Can be used as GPIO - pinState[1] = P31 Can be used as GPIO - pinState[2] = P32 *** RESERVED (Must be 1!) *** - pinState[3] = P33 Can be used as GPIO - pinState[4] = P34 *** RESERVED (Must be 1!) *** - pinState[5] = P35 Can be used as GPIO - - @returns 1 if everything executed properly, 0 for an error -*/ -/**************************************************************************/ -bool PN532::writeGPIO(uint8_t pinstate) -{ - // Make sure pinstate does not try to toggle P32 or P34 - pinstate |= (1 << PN532_GPIO_P32) | (1 << PN532_GPIO_P34); - - // Fill command buffer - pn532_packetbuffer[0] = PN532_COMMAND_WRITEGPIO; - pn532_packetbuffer[1] = PN532_GPIO_VALIDATIONBIT | pinstate; // P3 Pins - pn532_packetbuffer[2] = 0x00; // P7 GPIO Pins (not used ... taken by I2C) - - DMSG("Writing P3 GPIO: "); - DMSG_HEX(pn532_packetbuffer[1]); - DMSG("\n"); - - // Send the WRITEGPIO command (0x0E) - if (HAL(writeCommand)(pn532_packetbuffer, 3)) - return 0; - - return (0 < HAL(readResponse)(pn532_packetbuffer, sizeof(pn532_packetbuffer))); -} - -/**************************************************************************/ -/*! - Reads the state of the PN532's GPIO pins - - @returns An 8-bit value containing the pin state where: - - pinState[0] = P30 - pinState[1] = P31 - pinState[2] = P32 - pinState[3] = P33 - pinState[4] = P34 - pinState[5] = P35 -*/ -/**************************************************************************/ -uint8_t PN532::readGPIO(void) -{ - pn532_packetbuffer[0] = PN532_COMMAND_READGPIO; - - // Send the READGPIO command (0x0C) - if (HAL(writeCommand)(pn532_packetbuffer, 1)) - return 0x0; - - HAL(readResponse)(pn532_packetbuffer, sizeof(pn532_packetbuffer)); - - /* READGPIO response without prefix and suffix should be in the following format: - - byte Description - ------------- ------------------------------------------ - b0 P3 GPIO Pins - b1 P7 GPIO Pins (not used ... taken by I2C) - b2 Interface Mode Pins (not used ... bus select pins) - */ - - - DMSG("P3 GPIO: "); DMSG_HEX(pn532_packetbuffer[7]); - DMSG("P7 GPIO: "); DMSG_HEX(pn532_packetbuffer[8]); - DMSG("I0I1 GPIO: "); DMSG_HEX(pn532_packetbuffer[9]); - DMSG("\n"); - - return pn532_packetbuffer[0]; -} - -/**************************************************************************/ -/*! - @brief Configures the SAM (Secure Access Module) -*/ -/**************************************************************************/ -bool PN532::SAMConfig(void) -{ - pn532_packetbuffer[0] = PN532_COMMAND_SAMCONFIGURATION; - pn532_packetbuffer[1] = 0x01; // normal mode; - pn532_packetbuffer[2] = 0x14; // timeout 50ms * 20 = 1 second - pn532_packetbuffer[3] = 0x01; // use IRQ pin! - - DMSG("SAMConfig\n"); - - if (HAL(writeCommand)(pn532_packetbuffer, 4)) - return false; - - return (0 < HAL(readResponse)(pn532_packetbuffer, sizeof(pn532_packetbuffer))); -} - -/**************************************************************************/ -/*! - Sets the MxRtyPassiveActivation uint8_t of the RFConfiguration register - - @param maxRetries 0xFF to wait forever, 0x00..0xFE to timeout - after mxRetries - - @returns 1 if everything executed properly, 0 for an error -*/ -/**************************************************************************/ -bool PN532::setPassiveActivationRetries(uint8_t maxRetries) -{ - pn532_packetbuffer[0] = PN532_COMMAND_RFCONFIGURATION; - pn532_packetbuffer[1] = 5; // Config item 5 (MaxRetries) - pn532_packetbuffer[2] = 0xFF; // MxRtyATR (default = 0xFF) - pn532_packetbuffer[3] = 0x01; // MxRtyPSL (default = 0x01) - pn532_packetbuffer[4] = maxRetries; - - if (HAL(writeCommand)(pn532_packetbuffer, 5)) - return 0x0; // no ACK - - return (0 < HAL(readResponse)(pn532_packetbuffer, sizeof(pn532_packetbuffer))); -} - -/***** ISO14443A Commands ******/ - -/**************************************************************************/ -/*! - Waits for an ISO14443A target to enter the field - - @param cardBaudRate Baud rate of the card - @param uid Pointer to the array that will be populated - with the card's UID (up to 7 bytes) - @param uidLength Pointer to the variable that will hold the - length of the card's UID. - - @returns 1 if everything executed properly, 0 for an error -*/ -/**************************************************************************/ -bool PN532::readPassiveTargetID(uint8_t cardbaudrate, uint8_t *uid, uint8_t *uidLength, uint16_t timeout) -{ - pn532_packetbuffer[0] = PN532_COMMAND_INLISTPASSIVETARGET; - pn532_packetbuffer[1] = 1; // max 1 cards at once (we can set this to 2 later) - pn532_packetbuffer[2] = cardbaudrate; - - if (HAL(writeCommand)(pn532_packetbuffer, 3)) { - return 0x0; // command failed - } - - // read data packet - if (HAL(readResponse)(pn532_packetbuffer, sizeof(pn532_packetbuffer), timeout) < 0) { - return 0x0; - } - - // check some basic stuff - /* ISO14443A card response should be in the following format: - - byte Description - ------------- ------------------------------------------ - b0 Tags Found - b1 Tag Number (only one used in this example) - b2..3 SENS_RES - b4 SEL_RES - b5 NFCID Length - b6..NFCIDLen NFCID - */ - - if (pn532_packetbuffer[0] != 1) - return 0; - - uint16_t sens_res = pn532_packetbuffer[2]; - sens_res <<= 8; - sens_res |= pn532_packetbuffer[3]; - - DMSG("ATQA: 0x"); DMSG_HEX(sens_res); - DMSG("SAK: 0x"); DMSG_HEX(pn532_packetbuffer[4]); - DMSG("\n"); - - /* Card appears to be Mifare Classic */ - *uidLength = pn532_packetbuffer[5]; - - for (uint8_t i = 0; i < pn532_packetbuffer[5]; i++) { - uid[i] = pn532_packetbuffer[6 + i]; - } - - return 1; -} - - -/***** Mifare Classic Functions ******/ - -/**************************************************************************/ -/*! - Indicates whether the specified block number is the first block - in the sector (block 0 relative to the current sector) -*/ -/**************************************************************************/ -bool PN532::mifareclassic_IsFirstBlock (uint32_t uiBlock) -{ - // Test if we are in the small or big sectors - if (uiBlock < 128) - return ((uiBlock) % 4 == 0); - else - return ((uiBlock) % 16 == 0); -} - -/**************************************************************************/ -/*! - Indicates whether the specified block number is the sector trailer -*/ -/**************************************************************************/ -bool PN532::mifareclassic_IsTrailerBlock (uint32_t uiBlock) -{ - // Test if we are in the small or big sectors - if (uiBlock < 128) - return ((uiBlock + 1) % 4 == 0); - else - return ((uiBlock + 1) % 16 == 0); -} - -/**************************************************************************/ -/*! - Tries to authenticate a block of memory on a MIFARE card using the - INDATAEXCHANGE command. See section 7.3.8 of the PN532 User Manual - for more information on sending MIFARE and other commands. - - @param uid Pointer to a byte array containing the card UID - @param uidLen The length (in bytes) of the card's UID (Should - be 4 for MIFARE Classic) - @param blockNumber The block number to authenticate. (0..63 for - 1KB cards, and 0..255 for 4KB cards). - @param keyNumber Which key type to use during authentication - (0 = MIFARE_CMD_AUTH_A, 1 = MIFARE_CMD_AUTH_B) - @param keyData Pointer to a byte array containing the 6 bytes - key value - - @returns 1 if everything executed properly, 0 for an error -*/ -/**************************************************************************/ -uint8_t PN532::mifareclassic_AuthenticateBlock (uint8_t *uid, uint8_t uidLen, uint32_t blockNumber, uint8_t keyNumber, uint8_t *keyData) -{ - uint8_t i; - - // Hang on to the key and uid data - memcpy (_key, keyData, 6); - memcpy (_uid, uid, uidLen); - _uidLen = uidLen; - - // Prepare the authentication command // - pn532_packetbuffer[0] = PN532_COMMAND_INDATAEXCHANGE; /* Data Exchange Header */ - pn532_packetbuffer[1] = 1; /* Max card numbers */ - pn532_packetbuffer[2] = (keyNumber) ? MIFARE_CMD_AUTH_B : MIFARE_CMD_AUTH_A; - pn532_packetbuffer[3] = blockNumber; /* Block Number (1K = 0..63, 4K = 0..255 */ - memcpy (pn532_packetbuffer + 4, _key, 6); - for (i = 0; i < _uidLen; i++) { - pn532_packetbuffer[10 + i] = _uid[i]; /* 4 bytes card ID */ - } - - if (HAL(writeCommand)(pn532_packetbuffer, 10 + _uidLen)) - return 0; - - // Read the response packet - HAL(readResponse)(pn532_packetbuffer, sizeof(pn532_packetbuffer)); - - // Check if the response is valid and we are authenticated??? - // for an auth success it should be bytes 5-7: 0xD5 0x41 0x00 - // Mifare auth error is technically byte 7: 0x14 but anything other and 0x00 is not good - if (pn532_packetbuffer[0] != 0x00) { - DMSG("Authentification failed\n"); - return 0; - } - - return 1; -} - -/**************************************************************************/ -/*! - Tries to read an entire 16-bytes data block at the specified block - address. - - @param blockNumber The block number to authenticate. (0..63 for - 1KB cards, and 0..255 for 4KB cards). - @param data Pointer to the byte array that will hold the - retrieved data (if any) - - @returns 1 if everything executed properly, 0 for an error -*/ -/**************************************************************************/ -uint8_t PN532::mifareclassic_ReadDataBlock (uint8_t blockNumber, uint8_t *data) -{ - DMSG("Trying to read 16 bytes from block "); - DMSG_INT(blockNumber); - - /* Prepare the command */ - pn532_packetbuffer[0] = PN532_COMMAND_INDATAEXCHANGE; - pn532_packetbuffer[1] = 1; /* Card number */ - pn532_packetbuffer[2] = MIFARE_CMD_READ; /* Mifare Read command = 0x30 */ - pn532_packetbuffer[3] = blockNumber; /* Block Number (0..63 for 1K, 0..255 for 4K) */ - - /* Send the command */ - if (HAL(writeCommand)(pn532_packetbuffer, 4)) { - return 0; - } - - /* Read the response packet */ - HAL(readResponse)(pn532_packetbuffer, sizeof(pn532_packetbuffer)); - - /* If byte 8 isn't 0x00 we probably have an error */ - if (pn532_packetbuffer[0] != 0x00) { - return 0; - } - - /* Copy the 16 data bytes to the output buffer */ - /* Block content starts at byte 9 of a valid response */ - memcpy (data, pn532_packetbuffer + 1, 16); - - return 1; -} - -/**************************************************************************/ -/*! - Tries to write an entire 16-bytes data block at the specified block - address. - - @param blockNumber The block number to authenticate. (0..63 for - 1KB cards, and 0..255 for 4KB cards). - @param data The byte array that contains the data to write. - - @returns 1 if everything executed properly, 0 for an error -*/ -/**************************************************************************/ -uint8_t PN532::mifareclassic_WriteDataBlock (uint8_t blockNumber, uint8_t *data) -{ - /* Prepare the first command */ - pn532_packetbuffer[0] = PN532_COMMAND_INDATAEXCHANGE; - pn532_packetbuffer[1] = 1; /* Card number */ - pn532_packetbuffer[2] = MIFARE_CMD_WRITE; /* Mifare Write command = 0xA0 */ - pn532_packetbuffer[3] = blockNumber; /* Block Number (0..63 for 1K, 0..255 for 4K) */ - memcpy (pn532_packetbuffer + 4, data, 16); /* Data Payload */ - - /* Send the command */ - if (HAL(writeCommand)(pn532_packetbuffer, 20)) { - return 0; - } - - /* Read the response packet */ - return (0 < HAL(readResponse)(pn532_packetbuffer, sizeof(pn532_packetbuffer))); -} - -/**************************************************************************/ -/*! - Formats a Mifare Classic card to store NDEF Records - - @returns 1 if everything executed properly, 0 for an error -*/ -/**************************************************************************/ -uint8_t PN532::mifareclassic_FormatNDEF (void) -{ - uint8_t sectorbuffer1[16] = {0x14, 0x01, 0x03, 0xE1, 0x03, 0xE1, 0x03, 0xE1, 0x03, 0xE1, 0x03, 0xE1, 0x03, 0xE1, 0x03, 0xE1}; - uint8_t sectorbuffer2[16] = {0x03, 0xE1, 0x03, 0xE1, 0x03, 0xE1, 0x03, 0xE1, 0x03, 0xE1, 0x03, 0xE1, 0x03, 0xE1, 0x03, 0xE1}; - uint8_t sectorbuffer3[16] = {0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0x78, 0x77, 0x88, 0xC1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; - - // Note 0xA0 0xA1 0xA2 0xA3 0xA4 0xA5 must be used for key A - // for the MAD sector in NDEF records (sector 0) - - // Write block 1 and 2 to the card - if (!(mifareclassic_WriteDataBlock (1, sectorbuffer1))) - return 0; - if (!(mifareclassic_WriteDataBlock (2, sectorbuffer2))) - return 0; - // Write key A and access rights card - if (!(mifareclassic_WriteDataBlock (3, sectorbuffer3))) - return 0; - - // Seems that everything was OK (?!) - return 1; -} - -/**************************************************************************/ -/*! - Writes an NDEF URI Record to the specified sector (1..15) - - Note that this function assumes that the Mifare Classic card is - already formatted to work as an "NFC Forum Tag" and uses a MAD1 - file system. You can use the NXP TagWriter app on Android to - properly format cards for this. - - @param sectorNumber The sector that the URI record should be written - to (can be 1..15 for a 1K card) - @param uriIdentifier The uri identifier code (0 = none, 0x01 = - "http://www.", etc.) - @param url The uri text to write (max 38 characters). - - @returns 1 if everything executed properly, 0 for an error -*/ -/**************************************************************************/ -uint8_t PN532::mifareclassic_WriteNDEFURI (uint8_t sectorNumber, uint8_t uriIdentifier, const char *url) -{ - // Figure out how long the string is - uint8_t len = strlen(url); - - // Make sure we're within a 1K limit for the sector number - if ((sectorNumber < 1) || (sectorNumber > 15)) - return 0; - - // Make sure the URI payload is between 1 and 38 chars - if ((len < 1) || (len > 38)) - return 0; - - // Note 0xD3 0xF7 0xD3 0xF7 0xD3 0xF7 must be used for key A - // in NDEF records - - // Setup the sector buffer (w/pre-formatted TLV wrapper and NDEF message) - uint8_t sectorbuffer1[16] = {0x00, 0x00, 0x03, (uint8_t)(len + 5), 0xD1, 0x01, (uint8_t)(len + 1), 0x55, uriIdentifier, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - uint8_t sectorbuffer2[16] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - uint8_t sectorbuffer3[16] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - uint8_t sectorbuffer4[16] = {0xD3, 0xF7, 0xD3, 0xF7, 0xD3, 0xF7, 0x7F, 0x07, 0x88, 0x40, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; - if (len <= 6) { - // Unlikely we'll get a url this short, but why not ... - memcpy (sectorbuffer1 + 9, url, len); - sectorbuffer1[len + 9] = 0xFE; - } else if (len == 7) { - // 0xFE needs to be wrapped around to next block - memcpy (sectorbuffer1 + 9, url, len); - sectorbuffer2[0] = 0xFE; - } else if ((len > 7) || (len <= 22)) { - // Url fits in two blocks - memcpy (sectorbuffer1 + 9, url, 7); - memcpy (sectorbuffer2, url + 7, len - 7); - sectorbuffer2[len - 7] = 0xFE; - } else if (len == 23) { - // 0xFE needs to be wrapped around to final block - memcpy (sectorbuffer1 + 9, url, 7); - memcpy (sectorbuffer2, url + 7, len - 7); - sectorbuffer3[0] = 0xFE; - } else { - // Url fits in three blocks - memcpy (sectorbuffer1 + 9, url, 7); - memcpy (sectorbuffer2, url + 7, 16); - memcpy (sectorbuffer3, url + 23, len - 24); - sectorbuffer3[len - 22] = 0xFE; - } - - // Now write all three blocks back to the card - if (!(mifareclassic_WriteDataBlock (sectorNumber * 4, sectorbuffer1))) - return 0; - if (!(mifareclassic_WriteDataBlock ((sectorNumber * 4) + 1, sectorbuffer2))) - return 0; - if (!(mifareclassic_WriteDataBlock ((sectorNumber * 4) + 2, sectorbuffer3))) - return 0; - if (!(mifareclassic_WriteDataBlock ((sectorNumber * 4) + 3, sectorbuffer4))) - return 0; - - // Seems that everything was OK (?!) - return 1; -} - -/***** Mifare Ultralight Functions ******/ - -/**************************************************************************/ -/*! - Tries to read an entire 4-bytes page at the specified address. - - @param page The page number (0..63 in most cases) - @param buffer Pointer to the byte array that will hold the - retrieved data (if any) -*/ -/**************************************************************************/ -uint8_t PN532::mifareultralight_ReadPage (uint8_t page, uint8_t *buffer) -{ - if (page >= 64) { - DMSG("Page value out of range\n"); - return 0; - } - - /* Prepare the command */ - pn532_packetbuffer[0] = PN532_COMMAND_INDATAEXCHANGE; - pn532_packetbuffer[1] = 1; /* Card number */ - pn532_packetbuffer[2] = MIFARE_CMD_READ; /* Mifare Read command = 0x30 */ - pn532_packetbuffer[3] = page; /* Page Number (0..63 in most cases) */ - - /* Send the command */ - if (HAL(writeCommand)(pn532_packetbuffer, 4)) { - return 0; - } - - /* Read the response packet */ - HAL(readResponse)(pn532_packetbuffer, sizeof(pn532_packetbuffer)); - - /* If byte 8 isn't 0x00 we probably have an error */ - if (pn532_packetbuffer[0] == 0x00) { - /* Copy the 4 data bytes to the output buffer */ - /* Block content starts at byte 9 of a valid response */ - /* Note that the command actually reads 16 bytes or 4 */ - /* pages at a time ... we simply discard the last 12 */ - /* bytes */ - memcpy (buffer, pn532_packetbuffer + 1, 4); - } else { - return 0; - } - - // Return OK signal - return 1; -} - -/**************************************************************************/ -/*! - @brief Exchanges an APDU with the currently inlisted peer - - @param send Pointer to data to send - @param sendLength Length of the data to send - @param response Pointer to response data - @param responseLength Pointer to the response data length -*/ -/**************************************************************************/ -bool PN532::inDataExchange(uint8_t *send, uint8_t sendLength, uint8_t *response, uint8_t *responseLength) -{ - uint8_t i; - (void)i; - - pn532_packetbuffer[0] = 0x40; // PN532_COMMAND_INDATAEXCHANGE; - pn532_packetbuffer[1] = inListedTag; - - if (HAL(writeCommand)(pn532_packetbuffer, 2, send, sendLength)) { - return false; - } - - int16_t status = HAL(readResponse)(response, *responseLength, 1000); - if (status < 0) { - return false; - } - - if ((response[0] & 0x3f) != 0) { - DMSG("Status code indicates an error\n"); - return false; - } - - uint8_t length = status; - length -= 1; - - if (length > *responseLength) { - length = *responseLength; // silent truncation... - } - - for (uint8_t i = 0; i < length; i++) { - response[i] = response[i + 1]; - } - *responseLength = length; - - return true; -} - -/**************************************************************************/ -/*! - @brief 'InLists' a passive target. PN532 acting as reader/initiator, - peer acting as card/responder. -*/ -/**************************************************************************/ -bool PN532::inListPassiveTarget() -{ - pn532_packetbuffer[0] = PN532_COMMAND_INLISTPASSIVETARGET; - pn532_packetbuffer[1] = 1; - pn532_packetbuffer[2] = 0; - - DMSG("inList passive target\n"); - - if (HAL(writeCommand)(pn532_packetbuffer, 3)) { - return false; - } - - int16_t status = HAL(readResponse)(pn532_packetbuffer, sizeof(pn532_packetbuffer), 30000); - if (status < 0) { - return false; - } - - if (pn532_packetbuffer[0] != 1) { - return false; - } - - inListedTag = pn532_packetbuffer[1]; - - return true; -} - -/** - * Peer to Peer - */ -int8_t PN532::tgInitAsTarget(uint16_t timeout) -{ - const uint8_t command[] = { - PN532_COMMAND_TGINITASTARGET, - 0, - 0x00, 0x00, //SENS_RES - 0x00, 0x00, 0x00, //NFCID1 - 0x40, //SEL_RES - - 0x01, 0xFE, 0x0F, 0xBB, 0xBA, 0xA6, 0xC9, 0x89, // POL_RES - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xFF, 0xFF, - - 0x01, 0xFE, 0x0F, 0xBB, 0xBA, 0xA6, 0xC9, 0x89, 0x00, 0x00, //NFCID3t: Change this to desired value - - 0x06, 0x46, 0x66, 0x6D, 0x01, 0x01, 0x10, 0x00// LLCP magic number and version parameter - }; - - int8_t status = HAL(writeCommand)(command, sizeof(command)); - if (status < 0) { - return -1; - } - - status = HAL(readResponse)(pn532_packetbuffer, sizeof(pn532_packetbuffer), timeout); - if (status > 0) { - return 1; - } else if (PN532_TIMEOUT == status) { - return 0; - } else { - return -2; - } -} - -int16_t PN532::tgGetData(uint8_t *buf, uint8_t len) -{ - buf[0] = PN532_COMMAND_TGGETDATA; - - if (HAL(writeCommand)(buf, 1)) { - return -1; - } - - int16_t status = HAL(readResponse)(buf, len, 3000); - if (0 >= status) { - return status; - } - - uint16_t length = status - 1; - - - if (buf[0] != 0) { - DMSG("status is not ok\n"); - return -5; - } - - for (uint8_t i = 0; i < length; i++) { - buf[i] = buf[i + 1]; - } - - return length; -} - -bool PN532::tgSetData(const uint8_t *header, uint8_t hlen, const uint8_t *body, uint8_t blen) -{ - if (hlen > (sizeof(pn532_packetbuffer) - 1)) { - return false; - } - - for (int8_t i = hlen - 1; i >= 0; i--){ - pn532_packetbuffer[i + 1] = header[i]; - } - pn532_packetbuffer[0] = PN532_COMMAND_TGSETDATA; - - if (HAL(writeCommand)(pn532_packetbuffer, hlen + 1, body, blen)) { - return false; - } - - if (0 > HAL(readResponse)(pn532_packetbuffer, sizeof(pn532_packetbuffer), 3000)) { - return false; - } - - if (0 != pn532_packetbuffer[0]) { - return false; - } - - return true; -} diff --git a/libraries/PN532/PN532.h b/libraries/PN532/PN532.h deleted file mode 100644 index a6e729c..0000000 --- a/libraries/PN532/PN532.h +++ /dev/null @@ -1,190 +0,0 @@ -/**************************************************************************/ -/*! - @file PN532.h - @author Adafruit Industries & Seeed Studio - @license BSD (see license.txt) - - - @section HISTORY - v1.5 - Modified to work with I2C and SPI - - v1.3 - Modified to work with I2C - - v1.1 - Added full command list - - Added 'verbose' mode flag to constructor to toggle debug output - - Changed readPassiveTargetID() to return variable length values - -*/ -/**************************************************************************/ - -#ifndef PN532_h -#define PN532_h - -#if ARDUINO >= 100 -#include "Arduino.h" -#else -#include "WProgram.h" -#endif - -#include "PN532Interface.h" - - -// PN532 Commands -#define PN532_COMMAND_DIAGNOSE (0x00) -#define PN532_COMMAND_GETFIRMWAREVERSION (0x02) -#define PN532_COMMAND_GETGENERALSTATUS (0x04) -#define PN532_COMMAND_READREGISTER (0x06) -#define PN532_COMMAND_WRITEREGISTER (0x08) -#define PN532_COMMAND_READGPIO (0x0C) -#define PN532_COMMAND_WRITEGPIO (0x0E) -#define PN532_COMMAND_SETSERIALBAUDRATE (0x10) -#define PN532_COMMAND_SETPARAMETERS (0x12) -#define PN532_COMMAND_SAMCONFIGURATION (0x14) -#define PN532_COMMAND_POWERDOWN (0x16) -#define PN532_COMMAND_RFCONFIGURATION (0x32) -#define PN532_COMMAND_RFREGULATIONTEST (0x58) -#define PN532_COMMAND_INJUMPFORDEP (0x56) -#define PN532_COMMAND_INJUMPFORPSL (0x46) -#define PN532_COMMAND_INLISTPASSIVETARGET (0x4A) -#define PN532_COMMAND_INATR (0x50) -#define PN532_COMMAND_INPSL (0x4E) -#define PN532_COMMAND_INDATAEXCHANGE (0x40) -#define PN532_COMMAND_INCOMMUNICATETHRU (0x42) -#define PN532_COMMAND_INDESELECT (0x44) -#define PN532_COMMAND_INRELEASE (0x52) -#define PN532_COMMAND_INSELECT (0x54) -#define PN532_COMMAND_INAUTOPOLL (0x60) -#define PN532_COMMAND_TGINITASTARGET (0x8C) -#define PN532_COMMAND_TGSETGENERALBYTES (0x92) -#define PN532_COMMAND_TGGETDATA (0x86) -#define PN532_COMMAND_TGSETDATA (0x8E) -#define PN532_COMMAND_TGSETMETADATA (0x94) -#define PN532_COMMAND_TGGETINITIATORCOMMAND (0x88) -#define PN532_COMMAND_TGRESPONSETOINITIATOR (0x90) -#define PN532_COMMAND_TGGETTARGETSTATUS (0x8A) - -#define PN532_RESPONSE_INDATAEXCHANGE (0x41) -#define PN532_RESPONSE_INLISTPASSIVETARGET (0x4B) - - -#define PN532_MIFARE_ISO14443A (0x00) - -// Mifare Commands -#define MIFARE_CMD_AUTH_A (0x60) -#define MIFARE_CMD_AUTH_B (0x61) -#define MIFARE_CMD_READ (0x30) -#define MIFARE_CMD_WRITE (0xA0) -#define MIFARE_CMD_TRANSFER (0xB0) -#define MIFARE_CMD_DECREMENT (0xC0) -#define MIFARE_CMD_INCREMENT (0xC1) -#define MIFARE_CMD_STORE (0xC2) - -// Prefixes for NDEF Records (to identify record type) -#define NDEF_URIPREFIX_NONE (0x00) -#define NDEF_URIPREFIX_HTTP_WWWDOT (0x01) -#define NDEF_URIPREFIX_HTTPS_WWWDOT (0x02) -#define NDEF_URIPREFIX_HTTP (0x03) -#define NDEF_URIPREFIX_HTTPS (0x04) -#define NDEF_URIPREFIX_TEL (0x05) -#define NDEF_URIPREFIX_MAILTO (0x06) -#define NDEF_URIPREFIX_FTP_ANONAT (0x07) -#define NDEF_URIPREFIX_FTP_FTPDOT (0x08) -#define NDEF_URIPREFIX_FTPS (0x09) -#define NDEF_URIPREFIX_SFTP (0x0A) -#define NDEF_URIPREFIX_SMB (0x0B) -#define NDEF_URIPREFIX_NFS (0x0C) -#define NDEF_URIPREFIX_FTP (0x0D) -#define NDEF_URIPREFIX_DAV (0x0E) -#define NDEF_URIPREFIX_NEWS (0x0F) -#define NDEF_URIPREFIX_TELNET (0x10) -#define NDEF_URIPREFIX_IMAP (0x11) -#define NDEF_URIPREFIX_RTSP (0x12) -#define NDEF_URIPREFIX_URN (0x13) -#define NDEF_URIPREFIX_POP (0x14) -#define NDEF_URIPREFIX_SIP (0x15) -#define NDEF_URIPREFIX_SIPS (0x16) -#define NDEF_URIPREFIX_TFTP (0x17) -#define NDEF_URIPREFIX_BTSPP (0x18) -#define NDEF_URIPREFIX_BTL2CAP (0x19) -#define NDEF_URIPREFIX_BTGOEP (0x1A) -#define NDEF_URIPREFIX_TCPOBEX (0x1B) -#define NDEF_URIPREFIX_IRDAOBEX (0x1C) -#define NDEF_URIPREFIX_FILE (0x1D) -#define NDEF_URIPREFIX_URN_EPC_ID (0x1E) -#define NDEF_URIPREFIX_URN_EPC_TAG (0x1F) -#define NDEF_URIPREFIX_URN_EPC_PAT (0x20) -#define NDEF_URIPREFIX_URN_EPC_RAW (0x21) -#define NDEF_URIPREFIX_URN_EPC (0x22) -#define NDEF_URIPREFIX_URN_NFC (0x23) - -#define PN532_GPIO_VALIDATIONBIT (0x80) -#define PN532_GPIO_P30 (0) -#define PN532_GPIO_P31 (1) -#define PN532_GPIO_P32 (2) -#define PN532_GPIO_P33 (3) -#define PN532_GPIO_P34 (4) -#define PN532_GPIO_P35 (5) - -class PN532 -{ -public: - PN532(PN532Interface &interface); - - void begin(void); - - // Generic PN532 functions - bool SAMConfig(void); - uint32_t getFirmwareVersion(void); - bool writeGPIO(uint8_t pinstate); - uint8_t readGPIO(void); - bool setPassiveActivationRetries(uint8_t maxRetries); - - /** - * @brief Init PN532 as a target - * @param timeout max time to wait, 0 means no timeout - * @return > 0 success - * = 0 timeout - * < 0 failed - */ - int8_t tgInitAsTarget(uint16_t timeout = 0); - int16_t tgGetData(uint8_t *buf, uint8_t len); - bool tgSetData(const uint8_t *header, uint8_t hlen, const uint8_t *body = 0, uint8_t blen = 0); - - // ISO14443A functions - bool inListPassiveTarget(); - bool readPassiveTargetID(uint8_t cardbaudrate, uint8_t *uid, uint8_t *uidLength, uint16_t timeout = 1000); - bool inDataExchange(uint8_t *send, uint8_t sendLength, uint8_t *response, uint8_t *responseLength); - - // Mifare Classic functions - bool mifareclassic_IsFirstBlock (uint32_t uiBlock); - bool mifareclassic_IsTrailerBlock (uint32_t uiBlock); - uint8_t mifareclassic_AuthenticateBlock (uint8_t *uid, uint8_t uidLen, uint32_t blockNumber, uint8_t keyNumber, uint8_t *keyData); - uint8_t mifareclassic_ReadDataBlock (uint8_t blockNumber, uint8_t *data); - uint8_t mifareclassic_WriteDataBlock (uint8_t blockNumber, uint8_t *data); - uint8_t mifareclassic_FormatNDEF (void); - uint8_t mifareclassic_WriteNDEFURI (uint8_t sectorNumber, uint8_t uriIdentifier, const char *url); - - // Mifare Ultralight functions - uint8_t mifareultralight_ReadPage (uint8_t page, uint8_t *buffer); - - // Help functions to display formatted text - static void PrintHex(const uint8_t *data, const uint32_t numBytes); - static void PrintHexChar(const uint8_t *pbtData, const uint32_t numBytes); - - uint8_t *getBuffer(uint8_t *len) { - *len = sizeof(pn532_packetbuffer) - 4; - return pn532_packetbuffer; - }; - -private: - uint8_t _uid[7]; // ISO14443A uid - uint8_t _uidLen; // uid len - uint8_t _key[6]; // Mifare Classic key - uint8_t inListedTag; // Tg number of inlisted tag. - - uint8_t pn532_packetbuffer[64]; - - PN532Interface *_interface; -}; - -#endif diff --git a/libraries/PN532/PN532Interface.h b/libraries/PN532/PN532Interface.h deleted file mode 100644 index 6b6d399..0000000 --- a/libraries/PN532/PN532Interface.h +++ /dev/null @@ -1,56 +0,0 @@ - - -#ifndef __PN532_INTERFACE_H__ -#define __PN532_INTERFACE_H__ - -#if ARDUINO >= 100 -#include "Arduino.h" -#else -#include "WProgram.h" -#endif - -#define PN532_PREAMBLE (0x00) -#define PN532_STARTCODE1 (0x00) -#define PN532_STARTCODE2 (0xFF) -#define PN532_POSTAMBLE (0x00) - -#define PN532_HOSTTOPN532 (0xD4) -#define PN532_PN532TOHOST (0xD5) - -#define PN532_ACK_WAIT_TIME (10) // ms, timeout of waiting for ACK - -#define PN532_INVALID_ACK (-1) -#define PN532_TIMEOUT (-2) -#define PN532_INVALID_FRAME (-3) -#define PN532_NO_SPACE (-4) - -class PN532Interface -{ -public: - virtual void begin() = 0; - virtual void wakeup() = 0; - - /** - * @brief write a command and check ack - * @param header packet header - * @param hlen length of header - * @param body packet body - * @param blen length of body - * @return 0 success - * not 0 failed - */ - virtual int8_t writeCommand(const uint8_t *header, uint8_t hlen, const uint8_t *body = 0, uint8_t blen = 0) = 0; - - /** - * @brief read the response of a command, strip prefix and suffix - * @param buf to contain the response data - * @param len lenght to read - * @param timeout max time to wait, 0 means no timeout - * @return >=0 length of response without prefix and suffix - * <0 failed to read response - */ - virtual int16_t readResponse(uint8_t buf[], uint8_t len, uint16_t timeout = 1000) = 0; -}; - -#endif - diff --git a/libraries/PN532/PN532_debug.h b/libraries/PN532/PN532_debug.h deleted file mode 100644 index 8daf550..0000000 --- a/libraries/PN532/PN532_debug.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef __DEBUG_H__ -#define __DEBUG_H__ - -//#define DEBUG - -#ifdef DEBUG -#define DMSG(args...) Serial.print(args) -#define DMSG_STR(str) Serial.println(str) -#define DMSG_HEX(num) Serial.print(' '); Serial.print(num, HEX) -#define DMSG_INT(num) Serial.print(' '); Serial.print(num) -#else -#define DMSG(args...) -#define DMSG_STR(str) -#define DMSG_HEX(num) -#define DMSG_INT(num) -#endif - -#endif diff --git a/libraries/PN532/README.md b/libraries/PN532/README.md deleted file mode 100644 index a2f5ff9..0000000 --- a/libraries/PN532/README.md +++ /dev/null @@ -1,29 +0,0 @@ -## NFC library for Arduino - -This is an Arduino library for PN532 to use NFC technology. It's based on -[Adafruit_NFCShield_I2C](http://goo.gl/pk3FdB) -and improved by [Seeed Studio](http://goo.gl/zh1iQh). -It works with: - -+ [Elechouse NFC Module](http://goo.gl/i0EQgd) -+ [NFC Shield](http://goo.gl/Cac2OH) -+ [Xadow NFC](http://goo.gl/qBZMt0) -+ [PN532 NFC/RFID controller breakout board](http://goo.gl/tby9Sw) - -### Features -+ Support I2C, SPI and HSU of PN532 -+ Read/write Mifare Classic Card -+ Works with [Don's NDEF Library](http://goo.gl/jDjsXl) -+ Support Peer to Peer communication(exchange data with android 4.0+) -+ Support [mbed platform](http://goo.gl/kGPovZ) - -### Getting Started -1. Download [zip file](http://goo.gl/F6beRM) and -extract the 4 folders(PN532, PN532_SPI, PN532_I2C and PN532_HSU) into Arduino's libraries. -2. Downlaod [Don's NDEF library](http://goo.gl/ewxeAe) and extract it intro Arduino's libraries. -3. Follow the examples of the two libraries. - - -### To do -+ Card emulation - diff --git a/libraries/PN532/examples/iso14443a_uid/iso14443a_uid.ino b/libraries/PN532/examples/iso14443a_uid/iso14443a_uid.ino deleted file mode 100644 index abf9ff8..0000000 --- a/libraries/PN532/examples/iso14443a_uid/iso14443a_uid.ino +++ /dev/null @@ -1,92 +0,0 @@ -/**************************************************************************/ -/*! - This example will attempt to connect to an ISO14443A - card or tag and retrieve some basic information about it - that can be used to determine what type of card it is. - - Note that you need the baud rate to be 115200 because we need to print - out the data and read from the card at the same time! - - -*/ -/**************************************************************************/ - -// choose to SPI or I2C or HSU -#if 0 - #include - #include - #include "PN532.h" - - PN532_SPI pn532spi(SPI, 10); - PN532 nfc(pn532spi); -#elif 0 - #include - #include - - PN532_HSU pn532hsu(Serial1); - PN532 nfc(pn532hsu); -#else - #include - #include - #include - - PN532_I2C pn532i2c(Wire); - PN532 nfc(pn532i2c); -#endif - -void setup(void) { - Serial.begin(115200); - Serial.println("Hello!"); - - nfc.begin(); - - uint32_t versiondata = nfc.getFirmwareVersion(); - if (! versiondata) { - Serial.print("Didn't find PN53x board"); - while (1); // halt - } - - // Got ok data, print it out! - Serial.print("Found chip PN5"); Serial.println((versiondata>>24) & 0xFF, HEX); - Serial.print("Firmware ver. "); Serial.print((versiondata>>16) & 0xFF, DEC); - Serial.print('.'); Serial.println((versiondata>>8) & 0xFF, DEC); - - // Set the max number of retry attempts to read from a card - // This prevents us from waiting forever for a card, which is - // the default behaviour of the PN532. - nfc.setPassiveActivationRetries(0xFF); - - // configure board to read RFID tags - nfc.SAMConfig(); - - Serial.println("Waiting for an ISO14443A card"); -} - -void loop(void) { - boolean success; - uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; // Buffer to store the returned UID - uint8_t uidLength; // Length of the UID (4 or 7 bytes depending on ISO14443A card type) - - // Wait for an ISO14443A type cards (Mifare, etc.). When one is found - // 'uid' will be populated with the UID, and uidLength will indicate - // if the uid is 4 bytes (Mifare Classic) or 7 bytes (Mifare Ultralight) - success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, &uid[0], &uidLength); - - if (success) { - Serial.println("Found a card!"); - Serial.print("UID Length: ");Serial.print(uidLength, DEC);Serial.println(" bytes"); - Serial.print("UID Value: "); - for (uint8_t i=0; i < uidLength; i++) - { - Serial.print(" 0x");Serial.print(uid[i], HEX); - } - Serial.println(""); - // Wait 1 second before continuing - delay(1000); - } - else - { - // PN532 probably timed out waiting for a card - Serial.println("Timed out waiting for a card"); - } -} diff --git a/libraries/PN532/examples/mifareclassic_formatndef/mifareclassic_formatndef.ino b/libraries/PN532/examples/mifareclassic_formatndef/mifareclassic_formatndef.ino deleted file mode 100644 index 786fa86..0000000 --- a/libraries/PN532/examples/mifareclassic_formatndef/mifareclassic_formatndef.ino +++ /dev/null @@ -1,180 +0,0 @@ -/**************************************************************************/ -/*! - This example attempts to format a clean Mifare Classic 1K card as - an NFC Forum tag (to store NDEF messages that can be read by any - NFC enabled Android phone, etc.) - - Note that you need the baud rate to be 115200 because we need to print - out the data and read from the card at the same time! -*/ -/**************************************************************************/ - -// choose to SPI or I2C or HSU -#if 0 - #include - #include - #include "PN532.h" - - PN532SPI pn532spi(SPI, 10); - PN532 nfc(pn532spi); -#elif 0 - #include - #include - - PN532_HSU pn532hsu(Serial1); - PN532 nfc(pn532hsu); -#else - #include - #include - #include - - PN532_I2C pn532i2c(Wire); - PN532 nfc(pn532i2c); -#endif - -/* - We can encode many different kinds of pointers to the card, - from a URL, to an Email address, to a phone number, and many more - check the library header .h file to see the large # of supported - prefixes! -*/ -// For a http://www. url: -const char * url = "elechouse.com"; -uint8_t ndefprefix = NDEF_URIPREFIX_HTTP_WWWDOT; - -// for an email address -//const char * url = "mail@example.com"; -//uint8_t ndefprefix = NDEF_URIPREFIX_MAILTO; - -// for a phone number -//const char * url = "+1 212 555 1212"; -//uint8_t ndefprefix = NDEF_URIPREFIX_TEL; - - -void setup(void) { - Serial.begin(115200); - Serial.println("Looking for PN532..."); - - nfc.begin(); - - uint32_t versiondata = nfc.getFirmwareVersion(); - if (! versiondata) { - Serial.print("Didn't find PN53x board"); - while (1); // halt - } - - // Got ok data, print it out! - Serial.print("Found chip PN5"); Serial.println((versiondata>>24) & 0xFF, HEX); - Serial.print("Firmware ver. "); Serial.print((versiondata>>16) & 0xFF, DEC); - Serial.print('.'); Serial.println((versiondata>>8) & 0xFF, DEC); - - // configure board to read RFID tags - nfc.SAMConfig(); -} - -void loop(void) { - uint8_t success; // Flag to check if there was an error with the PN532 - uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; // Buffer to store the returned UID - uint8_t uidLength; // Length of the UID (4 or 7 bytes depending on ISO14443A card type) - bool authenticated = false; // Flag to indicate if the sector is authenticated - - // Use the default key - uint8_t keya[6] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; - - Serial.println(""); - Serial.println("PLEASE NOTE: Formatting your card for NDEF records will change the"); - Serial.println("authentication keys. To reformat your NDEF tag as a clean Mifare"); - Serial.println("Classic tag, use the mifareclassic_ndeftoclassic example!"); - Serial.println(""); - Serial.println("Place your Mifare Classic card on the reader to format with NDEF"); - Serial.println("and press any key to continue ..."); - // Wait for user input before proceeding - while (!Serial.available()); - // a key was pressed1 - while (Serial.available()) Serial.read(); - - // Wait for an ISO14443A type card (Mifare, etc.). When one is found - // 'uid' will be populated with the UID, and uidLength will indicate - // if the uid is 4 bytes (Mifare Classic) or 7 bytes (Mifare Ultralight) - success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength); - - if (success) - { - // Display some basic information about the card - Serial.println("Found an ISO14443A card"); - Serial.print(" UID Length: ");Serial.print(uidLength, DEC);Serial.println(" bytes"); - Serial.print(" UID Value: "); - nfc.PrintHex(uid, uidLength); - Serial.println(""); - - // Make sure this is a Mifare Classic card - if (uidLength != 4) - { - Serial.println("Ooops ... this doesn't seem to be a Mifare Classic card!"); - return; - } - - // We probably have a Mifare Classic card ... - Serial.println("Seems to be a Mifare Classic card (4 byte UID)"); - - // Try to format the card for NDEF data - success = nfc.mifareclassic_AuthenticateBlock (uid, uidLength, 0, 0, keya); - if (!success) - { - Serial.println("Unable to authenticate block 0 to enable card formatting!"); - return; - } - success = nfc.mifareclassic_FormatNDEF(); - if (!success) - { - Serial.println("Unable to format the card for NDEF"); - return; - } - - Serial.println("Card has been formatted for NDEF data using MAD1"); - - // Try to authenticate block 4 (first block of sector 1) using our key - success = nfc.mifareclassic_AuthenticateBlock (uid, uidLength, 4, 0, keya); - - // Make sure the authentification process didn't fail - if (!success) - { - Serial.println("Authentication failed."); - return; - } - - // Try to write a URL - Serial.println("Writing URI to sector 1 as an NDEF Message"); - - // Authenticated seems to have worked - // Try to write an NDEF record to sector 1 - // Use 0x01 for the URI Identifier Code to prepend "http://www." - // to the url (and save some space). For information on URI ID Codes - // see http://www.ladyada.net/wiki/private/articlestaging/nfc/ndef - if (strlen(url) > 38) - { - // The length is also checked in the WriteNDEFURI function, but lets - // warn users here just in case they change the value and it's bigger - // than it should be - Serial.println("URI is too long ... must be less than 38 characters long"); - return; - } - - // URI is within size limits ... write it to the card and report success/failure - success = nfc.mifareclassic_WriteNDEFURI(1, ndefprefix, url); - if (success) - { - Serial.println("NDEF URI Record written to sector 1"); - } - else - { - Serial.println("NDEF Record creation failed! :("); - } - } - - // Wait a bit before trying again - Serial.println("\n\nDone!"); - delay(1000); - Serial.flush(); - while(Serial.available()) Serial.read(); -} \ No newline at end of file diff --git a/libraries/PN532/examples/mifareclassic_memdump/mifareclassic_memdump.ino b/libraries/PN532/examples/mifareclassic_memdump/mifareclassic_memdump.ino deleted file mode 100644 index 684fa66..0000000 --- a/libraries/PN532/examples/mifareclassic_memdump/mifareclassic_memdump.ino +++ /dev/null @@ -1,168 +0,0 @@ -/**************************************************************************/ -/*! - This example attempts to dump the contents of a Mifare Classic 1K card - - Note that you need the baud rate to be 115200 because we need to print - out the data and read from the card at the same time! -*/ -/**************************************************************************/ - -// choose to SPI or I2C or HSU -#if 0 - #include - #include - #include "PN532.h" - - PN532SPI pn532spi(SPI, 10); - PN532 nfc(pn532spi); -#elif 0 - #include - #include - - PN532_HSU pn532hsu(Serial1); - PN532 nfc(pn532hsu); -#else - #include - #include - #include - - PN532_I2C pn532i2c(Wire); - PN532 nfc(pn532i2c); -#endif - -void setup(void) { - // has to be fast to dump the entire memory contents! - Serial.begin(115200); - Serial.println("Looking for PN532..."); - - nfc.begin(); - - uint32_t versiondata = nfc.getFirmwareVersion(); - if (! versiondata) { - Serial.print("Didn't find PN53x board"); - while (1); // halt - } - // Got ok data, print it out! - Serial.print("Found chip PN5"); Serial.println((versiondata>>24) & 0xFF, HEX); - Serial.print("Firmware ver. "); Serial.print((versiondata>>16) & 0xFF, DEC); - Serial.print('.'); Serial.println((versiondata>>8) & 0xFF, DEC); - - // configure board to read RFID tags - nfc.SAMConfig(); - - Serial.println("Waiting for an ISO14443A Card ..."); -} - - -void loop(void) { - uint8_t success; // Flag to check if there was an error with the PN532 - uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; // Buffer to store the returned UID - uint8_t uidLength; // Length of the UID (4 or 7 bytes depending on ISO14443A card type) - uint8_t currentblock; // Counter to keep track of which block we're on - bool authenticated = false; // Flag to indicate if the sector is authenticated - uint8_t data[16]; // Array to store block data during reads - - // Keyb on NDEF and Mifare Classic should be the same - uint8_t keyuniversal[6] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; - - // Wait for an ISO14443A type cards (Mifare, etc.). When one is found - // 'uid' will be populated with the UID, and uidLength will indicate - // if the uid is 4 bytes (Mifare Classic) or 7 bytes (Mifare Ultralight) - success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength); - - if (success) { - // Display some basic information about the card - Serial.println("Found an ISO14443A card"); - Serial.print(" UID Length: ");Serial.print(uidLength, DEC);Serial.println(" bytes"); - Serial.print(" UID Value: "); - nfc.PrintHex(uid, uidLength); - Serial.println(""); - - if (uidLength == 4) - { - // We probably have a Mifare Classic card ... - Serial.println("Seems to be a Mifare Classic card (4 byte UID)"); - - // Now we try to go through all 16 sectors (each having 4 blocks) - // authenticating each sector, and then dumping the blocks - for (currentblock = 0; currentblock < 64; currentblock++) - { - // Check if this is a new block so that we can reauthenticate - if (nfc.mifareclassic_IsFirstBlock(currentblock)) authenticated = false; - - // If the sector hasn't been authenticated, do so first - if (!authenticated) - { - // Starting of a new sector ... try to to authenticate - Serial.print("------------------------Sector ");Serial.print(currentblock/4, DEC);Serial.println("-------------------------"); - if (currentblock == 0) - { - // This will be 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF for Mifare Classic (non-NDEF!) - // or 0xA0 0xA1 0xA2 0xA3 0xA4 0xA5 for NDEF formatted cards using key a, - // but keyb should be the same for both (0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) - success = nfc.mifareclassic_AuthenticateBlock (uid, uidLength, currentblock, 1, keyuniversal); - } - else - { - // This will be 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF for Mifare Classic (non-NDEF!) - // or 0xD3 0xF7 0xD3 0xF7 0xD3 0xF7 for NDEF formatted cards using key a, - // but keyb should be the same for both (0xFF 0xFF 0xFF 0xFF 0xFF 0xFF) - success = nfc.mifareclassic_AuthenticateBlock (uid, uidLength, currentblock, 1, keyuniversal); - } - if (success) - { - authenticated = true; - } - else - { - Serial.println("Authentication error"); - } - } - // If we're still not authenticated just skip the block - if (!authenticated) - { - Serial.print("Block ");Serial.print(currentblock, DEC);Serial.println(" unable to authenticate"); - } - else - { - // Authenticated ... we should be able to read the block now - // Dump the data into the 'data' array - success = nfc.mifareclassic_ReadDataBlock(currentblock, data); - if (success) - { - // Read successful - Serial.print("Block ");Serial.print(currentblock, DEC); - if (currentblock < 10) - { - Serial.print(" "); - } - else - { - Serial.print(" "); - } - // Dump the raw data - nfc.PrintHexChar(data, 16); - } - else - { - // Oops ... something happened - Serial.print("Block ");Serial.print(currentblock, DEC); - Serial.println(" unable to read this block"); - } - } - } - } - else - { - Serial.println("Ooops ... this doesn't seem to be a Mifare Classic card!"); - } - } - // Wait a bit before trying again - Serial.println("\n\nSend a character to run the mem dumper again!"); - Serial.flush(); - while (!Serial.available()); - while (Serial.available()) { - Serial.read(); - } - Serial.flush(); -} \ No newline at end of file diff --git a/libraries/PN532/examples/mifareclassic_ndeftoclassic/mifareclassic_ndeftoclassic.ino b/libraries/PN532/examples/mifareclassic_ndeftoclassic/mifareclassic_ndeftoclassic.ino deleted file mode 100644 index 76f707c..0000000 --- a/libraries/PN532/examples/mifareclassic_ndeftoclassic/mifareclassic_ndeftoclassic.ino +++ /dev/null @@ -1,186 +0,0 @@ -/**************************************************************************/ -/*! - This examples attempts to take a Mifare Classic 1K card that has been - formatted for NDEF messages using mifareclassic_formatndef, and resets - the authentication keys back to the Mifare Classic defaults -*/ -/**************************************************************************/ - -// choose to SPI or I2C or HSU -#if 0 - #include - #include - #include "PN532.h" - - PN532SPI pn532spi(SPI, 10); - PN532 nfc(pn532spi); -#elif 0 - #include - #include - - PN532_HSU pn532hsu(Serial1); - PN532 nfc(pn532hsu); -#else - #include - #include - #include - - PN532_I2C pn532i2c(Wire); - PN532 nfc(pn532i2c); -#endif - - -#define NR_SHORTSECTOR (32) // Number of short sectors on Mifare 1K/4K -#define NR_LONGSECTOR (8) // Number of long sectors on Mifare 4K -#define NR_BLOCK_OF_SHORTSECTOR (4) // Number of blocks in a short sector -#define NR_BLOCK_OF_LONGSECTOR (16) // Number of blocks in a long sector - -// Determine the sector trailer block based on sector number -#define BLOCK_NUMBER_OF_SECTOR_TRAILER(sector) (((sector)>24) & 0xFF, HEX); - Serial.print("Firmware ver. "); Serial.print((versiondata>>16) & 0xFF, DEC); - Serial.print('.'); Serial.println((versiondata>>8) & 0xFF, DEC); - - // configure board to read RFID tags - nfc.SAMConfig(); -} - -void loop(void) { - uint8_t success; // Flag to check if there was an error with the PN532 - uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; // Buffer to store the returned UID - uint8_t uidLength; // Length of the UID (4 or 7 bytes depending on ISO14443A card type) - bool authenticated = false; // Flag to indicate if the sector is authenticated - uint8_t blockBuffer[16]; // Buffer to store block contents - uint8_t blankAccessBits[3] = { 0xff, 0x07, 0x80 }; - uint8_t idx = 0; - uint8_t numOfSector = 16; // Assume Mifare Classic 1K for now (16 4-block sectors) - - Serial.println("Place your NDEF formatted Mifare Classic 1K card on the reader"); - Serial.println("and press any key to continue ..."); - - // Wait for user input before proceeding - while (!Serial.available()); - while (Serial.available()) Serial.read(); - - // Wait for an ISO14443A type card (Mifare, etc.). When one is found - // 'uid' will be populated with the UID, and uidLength will indicate - // if the uid is 4 bytes (Mifare Classic) or 7 bytes (Mifare Ultralight) - success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength); - - if (success) - { - // We seem to have a tag ... - // Display some basic information about it - Serial.println("Found an ISO14443A card/tag"); - Serial.print(" UID Length: ");Serial.print(uidLength, DEC);Serial.println(" bytes"); - Serial.print(" UID Value: "); - nfc.PrintHex(uid, uidLength); - Serial.println(""); - - // Make sure this is a Mifare Classic card - if (uidLength != 4) - { - Serial.println("Ooops ... this doesn't seem to be a Mifare Classic card!"); - return; - } - - Serial.println("Seems to be a Mifare Classic card (4 byte UID)"); - Serial.println(""); - Serial.println("Reformatting card for Mifare Classic (please don't touch it!) ... "); - - // Now run through the card sector by sector - for (idx = 0; idx < numOfSector; idx++) - { - // Step 1: Authenticate the current sector using key B 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF - success = nfc.mifareclassic_AuthenticateBlock (uid, uidLength, BLOCK_NUMBER_OF_SECTOR_TRAILER(idx), 1, (uint8_t *)KEY_DEFAULT_KEYAB); - if (!success) - { - Serial.print("Authentication failed for sector "); Serial.println(numOfSector); - return; - } - - // Step 2: Write to the other blocks - if (idx == 16) - { - memset(blockBuffer, 0, sizeof(blockBuffer)); - if (!(nfc.mifareclassic_WriteDataBlock((BLOCK_NUMBER_OF_SECTOR_TRAILER(idx)) - 3, blockBuffer))) - { - Serial.print("Unable to write to sector "); Serial.println(numOfSector); - return; - } - } - if ((idx == 0) || (idx == 16)) - { - memset(blockBuffer, 0, sizeof(blockBuffer)); - if (!(nfc.mifareclassic_WriteDataBlock((BLOCK_NUMBER_OF_SECTOR_TRAILER(idx)) - 2, blockBuffer))) - { - Serial.print("Unable to write to sector "); Serial.println(numOfSector); - return; - } - } - else - { - memset(blockBuffer, 0, sizeof(blockBuffer)); - if (!(nfc.mifareclassic_WriteDataBlock((BLOCK_NUMBER_OF_SECTOR_TRAILER(idx)) - 3, blockBuffer))) - { - Serial.print("Unable to write to sector "); Serial.println(numOfSector); - return; - } - if (!(nfc.mifareclassic_WriteDataBlock((BLOCK_NUMBER_OF_SECTOR_TRAILER(idx)) - 2, blockBuffer))) - { - Serial.print("Unable to write to sector "); Serial.println(numOfSector); - return; - } - } - memset(blockBuffer, 0, sizeof(blockBuffer)); - if (!(nfc.mifareclassic_WriteDataBlock((BLOCK_NUMBER_OF_SECTOR_TRAILER(idx)) - 1, blockBuffer))) - { - Serial.print("Unable to write to sector "); Serial.println(numOfSector); - return; - } - - // Step 3: Reset both keys to 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF - memcpy(blockBuffer, KEY_DEFAULT_KEYAB, sizeof(KEY_DEFAULT_KEYAB)); - memcpy(blockBuffer + 6, blankAccessBits, sizeof(blankAccessBits)); - blockBuffer[9] = 0x69; - memcpy(blockBuffer + 10, KEY_DEFAULT_KEYAB, sizeof(KEY_DEFAULT_KEYAB)); - - // Step 4: Write the trailer block - if (!(nfc.mifareclassic_WriteDataBlock((BLOCK_NUMBER_OF_SECTOR_TRAILER(idx)), blockBuffer))) - { - Serial.print("Unable to write trailer block of sector "); Serial.println(numOfSector); - return; - } - } - } - - // Wait a bit before trying again - Serial.println("\n\nDone!"); - delay(1000); - Serial.flush(); - while(Serial.available()) Serial.read(); -} \ No newline at end of file diff --git a/libraries/PN532/examples/mifareclassic_updatendef/mifareclassic_updatendef.ino b/libraries/PN532/examples/mifareclassic_updatendef/mifareclassic_updatendef.ino deleted file mode 100644 index 7589a18..0000000 --- a/libraries/PN532/examples/mifareclassic_updatendef/mifareclassic_updatendef.ino +++ /dev/null @@ -1,158 +0,0 @@ -/**************************************************************************/ -/*! - Updates a sector that is already formatted for NDEF (using - mifareclassic_formatndef.pde for example), inserting a new url -*/ -/**************************************************************************/ - -// choose to SPI or I2C or HSU -#if 0 - #include - #include - #include "PN532.h" - - PN532SPI pn532spi(SPI, 10); - PN532 nfc(pn532spi); -#elif 0 - #include - #include - - PN532_HSU pn532hsu(Serial1); - PN532 nfc(pn532hsu); -#else - #include - #include - #include - - PN532_I2C pn532i2c(Wire); - PN532 nfc(pn532i2c); -#endif - - -/* - We can encode many different kinds of pointers to the card, - from a URL, to an Email address, to a phone number, and many more - check the library header .h file to see the large # of supported - prefixes! -*/ -// For a http://www. url: -const char * url = "elechouse.com"; -uint8_t ndefprefix = NDEF_URIPREFIX_HTTP_WWWDOT; - -// for an email address -//const char * url = "sevice@elechouse.com"; -//uint8_t ndefprefix = NDEF_URIPREFIX_MAILTO; - -// for a phone number -//const char * url = "+1 212 555 1212"; -//uint8_t ndefprefix = NDEF_URIPREFIX_TEL; - - -void setup(void) { - Serial.begin(115200); - Serial.println("Looking for PN532..."); - - nfc.begin(); - - uint32_t versiondata = nfc.getFirmwareVersion(); - if (! versiondata) { - Serial.print("Didn't find PN53x board"); - while (1); // halt - } - - // Got ok data, print it out! - Serial.print("Found chip PN5"); Serial.println((versiondata>>24) & 0xFF, HEX); - Serial.print("Firmware ver. "); Serial.print((versiondata>>16) & 0xFF, DEC); - Serial.print('.'); Serial.println((versiondata>>8) & 0xFF, DEC); - - // configure board to read RFID tags - nfc.SAMConfig(); -} - -void loop(void) { - uint8_t success; // Flag to check if there was an error with the PN532 - uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; // Buffer to store the returned UID - uint8_t uidLength; // Length of the UID (4 or 7 bytes depending on ISO14443A card type) - bool authenticated = false; // Flag to indicate if the sector is authenticated - - // Use the default NDEF keys (these would have have set by mifareclassic_formatndef.pde!) - uint8_t keya[6] = { 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5 }; - uint8_t keyb[6] = { 0xD3, 0xF7, 0xD3, 0xF7, 0xD3, 0xF7 }; - - Serial.println("Place your NDEF formatted Mifare Classic card on the reader to update the"); - Serial.println("NDEF record and press any key to continue ..."); - // Wait for user input before proceeding - while (!Serial.available()); - // a key was pressed1 - while (Serial.available()) Serial.read(); - - // Wait for an ISO14443A type card (Mifare, etc.). When one is found - // 'uid' will be populated with the UID, and uidLength will indicate - // if the uid is 4 bytes (Mifare Classic) or 7 bytes (Mifare Ultralight) - success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength); - - if (success) - { - // Display some basic information about the card - Serial.println("Found an ISO14443A card"); - Serial.print(" UID Length: ");Serial.print(uidLength, DEC);Serial.println(" bytes"); - Serial.print(" UID Value: "); - nfc.PrintHex(uid, uidLength); - Serial.println(""); - - // Make sure this is a Mifare Classic card - if (uidLength != 4) - { - Serial.println("Ooops ... this doesn't seem to be a Mifare Classic card!"); - return; - } - - // We probably have a Mifare Classic card ... - Serial.println("Seems to be a Mifare Classic card (4 byte UID)"); - - // Check if this is an NDEF card (using first block of sector 1 from mifareclassic_formatndef.pde) - // Must authenticate on the first key using 0xD3 0xF7 0xD3 0xF7 0xD3 0xF7 - success = nfc.mifareclassic_AuthenticateBlock (uid, uidLength, 4, 0, keyb); - if (!success) - { - Serial.println("Unable to authenticate block 4 ... is this card NDEF formatted?"); - return; - } - - Serial.println("Authentication succeeded (seems to be an NDEF/NFC Forum tag) ..."); - - // Authenticated seems to have worked - // Try to write an NDEF record to sector 1 - // Use 0x01 for the URI Identifier Code to prepend "http://www." - // to the url (and save some space). For information on URI ID Codes - // see http://www.ladyada.net/wiki/private/articlestaging/nfc/ndef - if (strlen(url) > 38) - { - // The length is also checked in the WriteNDEFURI function, but lets - // warn users here just in case they change the value and it's bigger - // than it should be - Serial.println("URI is too long ... must be less than 38 characters!"); - return; - } - - Serial.println("Updating sector 1 with URI as NDEF Message"); - - // URI is within size limits ... write it to the card and report success/failure - success = nfc.mifareclassic_WriteNDEFURI(1, ndefprefix, url); - if (success) - { - Serial.println("NDEF URI Record written to sector 1"); - Serial.println(""); - } - else - { - Serial.println("NDEF Record creation failed! :("); - } - } - - // Wait a bit before trying again - Serial.println("\n\nDone!"); - delay(1000); - Serial.flush(); - while(Serial.available()) Serial.read(); -} diff --git a/libraries/PN532/examples/p2p_raw/p2p_raw.ino b/libraries/PN532/examples/p2p_raw/p2p_raw.ino deleted file mode 100644 index f03b813..0000000 --- a/libraries/PN532/examples/p2p_raw/p2p_raw.ino +++ /dev/null @@ -1,51 +0,0 @@ -// snep_test.ino -// send a SNEP message to adnroid and get a message from android - -#include "SPI.h" -#include "PN532_SPI.h" -#include "llcp.h" -#include "snep.h" - -PN532_SPI pn532spi(SPI, 10); -SNEP nfc(pn532spi); - -void setup() -{ - Serial.begin(115200); - Serial.println("-------Peer to Peer--------"); -} - -uint8_t message[] = { -0xD2, 0xA, 0xB, 0x74,0x65, 0x78, 0x74, 0x2F, 0x70, 0x6C, -0x61, 0x69, 0x6E, 0x68, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x77, -0x6F, 0x72, 0x6C, 0x64}; - -uint8_t buf[128]; - -void loop() -{ - - nfc.write(message, sizeof(message)); - delay(3000); - - int16_t len = nfc.read(buf, sizeof(buf)); - if (len > 0) { - Serial.println("get a SNEP message:"); - for (uint8_t i = 0; i < len; i++) { - Serial.print(buf[i], HEX); - Serial.print(' '); - } - Serial.print('\n'); - for (uint8_t i = 0; i < len; i++) { - char c = buf[i]; - if (c <= 0x1f || c > 0x7f) { - Serial.print('.'); - } else { - Serial.print(c); - } - } - Serial.print('\n'); - } - delay(3000); -} - diff --git a/libraries/PN532/examples/p2p_with_ndef_library/p2p_with_ndef_library.ino b/libraries/PN532/examples/p2p_with_ndef_library/p2p_with_ndef_library.ino deleted file mode 100644 index f3e9c1f..0000000 --- a/libraries/PN532/examples/p2p_with_ndef_library/p2p_with_ndef_library.ino +++ /dev/null @@ -1,56 +0,0 @@ -// send a NDEF message to adnroid or get a NDEF message -// -// note: [NDEF library](https://github.com/Don/NDEF) is needed. - -#include "SPI.h" -#include "PN532_SPI.h" -#include "snep.h" -#include "NdefMessage.h" - -PN532_SPI pn532spi(SPI, 10); -SNEP nfc(pn532spi); -uint8_t ndefBuf[128]; - -void setup() -{ - Serial.begin(115200); - Serial.println("-------Peer to Peer--------"); -} - -void loop() -{ -#if 1 - Serial.println("Send a message to Android"); - NdefMessage message = NdefMessage(); - message.addUriRecord("http://www.seeedstudio.com"); - int messageSize = message.getEncodedSize(); - if (messageSize > sizeof(ndefBuf)) { - Serial.println("ndefBuf is too small"); - while (1) { - } - - } - - message.encode(ndefBuf); - if (0 >= nfc.write(ndefBuf, messageSize)) { - Serial.println("Failed"); - } else { - Serial.println("Success"); - } - - delay(3000); -#else - // it seems there are some issues to use NdefMessage to decode the received data from Android - Serial.println("Get a message from Android"); - int msgSize = nfc.read(ndefBuf, sizeof(ndefBuf)); - if (msgSize > 0) { - NdefMessage msg = NdefMessage(ndefBuf, msgSize); - msg.print(); - Serial.println("\nSuccess"); - } else { - Serial.println("failed"); - } - delay(3000); -#endif -} - diff --git a/libraries/PN532/examples/readMifare/readMifare.ino b/libraries/PN532/examples/readMifare/readMifare.ino deleted file mode 100644 index 0c9347c..0000000 --- a/libraries/PN532/examples/readMifare/readMifare.ino +++ /dev/null @@ -1,161 +0,0 @@ -/**************************************************************************/ -/*! - This example will wait for any ISO14443A card or tag, and - depending on the size of the UID will attempt to read from it. - - If the card has a 4-byte UID it is probably a Mifare - Classic card, and the following steps are taken: - - - Authenticate block 4 (the first block of Sector 1) using - the default KEYA of 0XFF 0XFF 0XFF 0XFF 0XFF 0XFF - - If authentication succeeds, we can then read any of the - 4 blocks in that sector (though only block 4 is read here) - - If the card has a 7-byte UID it is probably a Mifare - Ultralight card, and the 4 byte pages can be read directly. - Page 4 is read by default since this is the first 'general- - purpose' page on the tags. - -*/ -/**************************************************************************/ - -// choose to SPI or I2C or HSU -#if 0 - #include - #include - #include "PN532.h" - - PN532SPI pn532spi(SPI, 10); - PN532 nfc(pn532spi); -#elif 0 - #include - #include - - PN532_HSU pn532hsu(Serial1); - PN532 nfc(pn532hsu); -#else - #include - #include - #include - - PN532_I2C pn532i2c(Wire); - PN532 nfc(pn532i2c); -#endif - - -void setup(void) { - Serial.begin(115200); - Serial.println("Hello!"); - - nfc.begin(); - - uint32_t versiondata = nfc.getFirmwareVersion(); - if (! versiondata) { - Serial.print("Didn't find PN53x board"); - while (1); // halt - } - // Got ok data, print it out! - Serial.print("Found chip PN5"); Serial.println((versiondata>>24) & 0xFF, HEX); - Serial.print("Firmware ver. "); Serial.print((versiondata>>16) & 0xFF, DEC); - Serial.print('.'); Serial.println((versiondata>>8) & 0xFF, DEC); - - // configure board to read RFID tags - nfc.SAMConfig(); - - Serial.println("Waiting for an ISO14443A Card ..."); -} - - -void loop(void) { - uint8_t success; - uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; // Buffer to store the returned UID - uint8_t uidLength; // Length of the UID (4 or 7 bytes depending on ISO14443A card type) - - // Wait for an ISO14443A type cards (Mifare, etc.). When one is found - // 'uid' will be populated with the UID, and uidLength will indicate - // if the uid is 4 bytes (Mifare Classic) or 7 bytes (Mifare Ultralight) - success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength); - - if (success) { - // Display some basic information about the card - Serial.println("Found an ISO14443A card"); - Serial.print(" UID Length: ");Serial.print(uidLength, DEC);Serial.println(" bytes"); - Serial.print(" UID Value: "); - nfc.PrintHex(uid, uidLength); - Serial.println(""); - - if (uidLength == 4) - { - // We probably have a Mifare Classic card ... - Serial.println("Seems to be a Mifare Classic card (4 byte UID)"); - - // Now we need to try to authenticate it for read/write access - // Try with the factory default KeyA: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF - Serial.println("Trying to authenticate block 4 with default KEYA value"); - uint8_t keya[6] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; - - // Start with block 4 (the first block of sector 1) since sector 0 - // contains the manufacturer data and it's probably better just - // to leave it alone unless you know what you're doing - success = nfc.mifareclassic_AuthenticateBlock(uid, uidLength, 4, 0, keya); - - if (success) - { - Serial.println("Sector 1 (Blocks 4..7) has been authenticated"); - uint8_t data[16]; - - // If you want to write something to block 4 to test with, uncomment - // the following line and this text should be read back in a minute - // data = { 'a', 'd', 'a', 'f', 'r', 'u', 'i', 't', '.', 'c', 'o', 'm', 0, 0, 0, 0}; - // success = nfc.mifareclassic_WriteDataBlock (4, data); - - // Try to read the contents of block 4 - success = nfc.mifareclassic_ReadDataBlock(4, data); - - if (success) - { - // Data seems to have been read ... spit it out - Serial.println("Reading Block 4:"); - nfc.PrintHexChar(data, 16); - Serial.println(""); - - // Wait a bit before reading the card again - delay(1000); - } - else - { - Serial.println("Ooops ... unable to read the requested block. Try another key?"); - } - } - else - { - Serial.println("Ooops ... authentication failed: Try another key?"); - } - } - - if (uidLength == 7) - { - // We probably have a Mifare Ultralight card ... - Serial.println("Seems to be a Mifare Ultralight tag (7 byte UID)"); - - // Try to read the first general-purpose user page (#4) - Serial.println("Reading page 4"); - uint8_t data[32]; - success = nfc.mifareultralight_ReadPage (4, data); - if (success) - { - // Data seems to have been read ... spit it out - nfc.PrintHexChar(data, 4); - Serial.println(""); - - // Wait a bit before reading the card again - delay(1000); - } - else - { - Serial.println("Ooops ... unable to read the requested page!?"); - } - } - } -} - diff --git a/libraries/PN532/license.txt b/libraries/PN532/license.txt deleted file mode 100644 index 09c45e1..0000000 --- a/libraries/PN532/license.txt +++ /dev/null @@ -1,27 +0,0 @@ -Software License Agreement (BSD License) - -Copyright (c) 2012, Adafruit Industries -Copyright (c) 2013, Seeed Technology Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: -1. Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in the -documentation and/or other materials provided with the distribution. -3. Neither the name of the copyright holders nor the -names of its contributors may be used to endorse or promote products -derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/libraries/PN532/llcp.cpp b/libraries/PN532/llcp.cpp deleted file mode 100644 index 68da733..0000000 --- a/libraries/PN532/llcp.cpp +++ /dev/null @@ -1,282 +0,0 @@ - -#include "llcp.h" -#include "PN532_debug.h" - -// LLCP PDU Type Values -#define PDU_SYMM 0x00 -#define PDU_PAX 0x01 -#define PDU_CONNECT 0x04 -#define PDU_DISC 0x05 -#define PDU_CC 0x06 -#define PDU_DM 0x07 -#define PDU_I 0x0c -#define PDU_RR 0x0d - -uint8_t LLCP::SYMM_PDU[2] = {0, 0}; - -inline uint8_t getPType(const uint8_t *buf) -{ - return ((buf[0] & 0x3) << 2) + (buf[1] >> 6); -} - -inline uint8_t getSSAP(const uint8_t *buf) -{ - return buf[1] & 0x3f; -} - -inline uint8_t getDSAP(const uint8_t *buf) -{ - return buf[0] >> 2; -} - -int8_t LLCP::activate(uint16_t timeout) -{ - return link.activateAsTarget(timeout); -} - -int8_t LLCP::waitForConnection(uint16_t timeout) -{ - uint8_t type; - (void)timeout; - - sequence = 0; - - // Get CONNECT PDU - DMSG("wait for a CONNECT PDU\n"); - do { - if (2 > link.read(headerBuf, headerBufLen)) { - return -1; - } - - type = getPType(headerBuf); - if (PDU_CONNECT == type) { - break; - } else if (PDU_SYMM == type) { - if (!link.write(SYMM_PDU, sizeof(SYMM_PDU))) { - return -2; - } - } else { - return -3; - } - - } while (1); - - // Put CC PDU - DMSG("put a CC(Connection Complete) PDU to response the CONNECT PDU\n"); - ssap = getDSAP(headerBuf); - dsap = getSSAP(headerBuf); - headerBuf[0] = (dsap << 2) + ((PDU_CC >> 2) & 0x3); - headerBuf[1] = ((PDU_CC & 0x3) << 6) + ssap; - if (!link.write(headerBuf, 2)) { - return -2; - } - - return 1; -} - -int8_t LLCP::waitForDisconnection(uint16_t timeout) -{ - uint8_t type; - (void)timeout; - - // Get DISC PDU - DMSG("wait for a DISC PDU\n"); - do { - if (2 > link.read(headerBuf, headerBufLen)) { - return -1; - } - - type = getPType(headerBuf); - if (PDU_DISC == type) { - break; - } else if (PDU_SYMM == type) { - if (!link.write(SYMM_PDU, sizeof(SYMM_PDU))) { - return -2; - } - } else { - return -3; - } - - } while (1); - - // Put DM PDU - DMSG("put a DM(Disconnect Mode) PDU to response the DISC PDU\n"); - // ssap = getDSAP(headerBuf); - // dsap = getSSAP(headerBuf); - headerBuf[0] = (dsap << 2) + (PDU_DM >> 2); - headerBuf[1] = ((PDU_DM & 0x3) << 6) + ssap; - if (!link.write(headerBuf, 2)) { - return -2; - } - - return 1; -} - -int8_t LLCP::connect(uint16_t timeout) -{ - uint8_t type; - (void)timeout; - - sequence = 0; - - // try to get a SYMM PDU - if (2 > link.read(headerBuf, headerBufLen)) { - return -1; - } - type = getPType(headerBuf); - if (PDU_SYMM != type) { - return -1; - } - - dsap = LLCP_DEFAULT_DSAP; - ssap = LLCP_DEFAULT_SSAP; - - // put a CONNECT PDU - headerBuf[0] = (LLCP_DEFAULT_DSAP << 2) + (PDU_CONNECT >> 2); - headerBuf[1] = ((PDU_CONNECT & 0x03) << 6) + LLCP_DEFAULT_SSAP; - if (!link.write(headerBuf, 2)) { - return -2; - } - - // wait for a CC PDU - DMSG("wait for a CC PDU\n"); - do { - if (2 > link.read(headerBuf, headerBufLen)) { - return -1; - } - - type = getPType(headerBuf); - if (PDU_CC == type) { - break; - } else if (PDU_SYMM == type) { - if (!link.write(SYMM_PDU, sizeof(SYMM_PDU))) { - return -2; - } - } else { - return -3; - } - - } while (1); - - if (!link.write(SYMM_PDU, sizeof(SYMM_PDU))) { - return -2; - } - - return 1; -} - -int8_t LLCP::disconnect(uint16_t timeout) -{ - uint8_t type; - (void)timeout; - - // try to get a SYMM PDU - if (2 > link.read(headerBuf, headerBufLen)) { - return -1; - } - type = getPType(headerBuf); - if (PDU_SYMM != type) { - return -1; - } - - // put a DISC PDU - headerBuf[0] = (LLCP_DEFAULT_DSAP << 2) + (PDU_DISC >> 2); - headerBuf[1] = ((PDU_DISC & 0x03) << 6) + LLCP_DEFAULT_SSAP; - if (!link.write(headerBuf, 2)) { - return -2; - } - - // wait for a DM PDU - DMSG("wait for a DM PDU\n"); - do { - if (2 > link.read(headerBuf, headerBufLen)) { - return -1; - } - - type = getPType(headerBuf); - if (PDU_CC == type) { - break; - } else if (PDU_DM == type) { - if (!link.write(SYMM_PDU, sizeof(SYMM_PDU))) { - return -2; - } - } else { - return -3; - } - - } while (1); - - return 1; -} - -bool LLCP::write(const uint8_t *header, uint8_t hlen, const uint8_t *body, uint8_t blen) -{ - uint8_t buf[3]; - - if (2 != link.read(buf, sizeof(buf))) { - return false; - } - - if (headerBufLen < (hlen + 3)) { - return false; - } - - for (int8_t i = hlen - 1; i >= 0; i--) { - headerBuf[i + 3] = header[i]; - } - - headerBuf[0] = (dsap << 2) + (PDU_I >> 2); - headerBuf[1] = ((PDU_I & 0x3) << 6) + ssap; - headerBuf[2] = sequence; // sequence - if (!link.write(headerBuf, 3 + hlen, body, blen)) { - return false; - } - - sequence++; - - return true; -} - -int16_t LLCP::read(uint8_t *buf, uint8_t length) -{ - uint8_t type; - uint16_t status; - - // Get INFO PDU - do { - status = link.read(buf, length); - if (2 > status) { - return -1; - } - - type = getPType(buf); - if (PDU_I == type) { - break; - } else if (PDU_SYMM == type) { - if (!link.write(SYMM_PDU, sizeof(SYMM_PDU))) { - return -2; - } - } else { - return -3; - } - - } while (1); - - uint8_t len = status - 3; - ssap = getDSAP(buf); - dsap = getSSAP(buf); - buf[0] = (dsap << 2) + (PDU_RR >> 2); - buf[1] = ((PDU_RR & 0x3) << 6) + ssap; - buf[2] = 0x01; // sequence - if (!link.write(buf, 3)) { - return -2; - } - - for (uint8_t i = 0; i < len; i++) { - buf[i] = buf[i + 3]; - } - - sequence++; - - return len; -} diff --git a/libraries/PN532/llcp.h b/libraries/PN532/llcp.h deleted file mode 100644 index d857ad6..0000000 --- a/libraries/PN532/llcp.h +++ /dev/null @@ -1,72 +0,0 @@ - -#ifndef __LLCP_H__ -#define __LLCP_H__ - -#include "mac_link.h" - -#define LLCP_DEFAULT_TIMEOUT 20000 -#define LLCP_DEFAULT_DSAP 0x04 -#define LLCP_DEFAULT_SSAP 0x20 - -class LLCP { -public: - LLCP(PN532Interface &interface) : link(interface) { - headerBuf = link.getHeaderBuffer(&headerBufLen); - sequence = 0; - }; - - /** - * @brief Actiave PN532 as a target - * @param timeout max time to wait, 0 means no timeout - * @return > 0 success - * = 0 timeout - * < 0 failed - */ - int8_t activate(uint16_t timeout = 0); - - int8_t waitForConnection(uint16_t timeout = LLCP_DEFAULT_TIMEOUT); - - int8_t waitForDisconnection(uint16_t timeout = LLCP_DEFAULT_TIMEOUT); - - int8_t connect(uint16_t timeout = LLCP_DEFAULT_TIMEOUT); - - int8_t disconnect(uint16_t timeout = LLCP_DEFAULT_TIMEOUT); - - /** - * @brief write a packet, the packet should be less than (255 - 2) bytes - * @param header packet header - * @param hlen length of header - * @param body packet body - * @param blen length of body - * @return true success - * false failed - */ - bool write(const uint8_t *header, uint8_t hlen, const uint8_t *body = 0, uint8_t blen = 0); - - /** - * @brief read a packet, the packet will be less than (255 - 2) bytes - * @param buf the buffer to contain the packet - * @param len lenght of the buffer - * @return >=0 length of the packet - * <0 failed - */ - int16_t read(uint8_t *buf, uint8_t len); - - uint8_t *getHeaderBuffer(uint8_t *len) { - uint8_t *buf = link.getHeaderBuffer(len); - len -= 3; // I PDU header has 3 bytes - return buf; - }; - -private: - MACLink link; - uint8_t ssap; - uint8_t dsap; - uint8_t *headerBuf; - uint8_t headerBufLen; - uint8_t sequence; - - static uint8_t SYMM_PDU[2]; -}; - -#endif // __LLCP_H__ diff --git a/libraries/PN532/mac_link.cpp b/libraries/PN532/mac_link.cpp deleted file mode 100644 index 75aca8e..0000000 --- a/libraries/PN532/mac_link.cpp +++ /dev/null @@ -1,20 +0,0 @@ - -#include "mac_link.h" -#include "PN532_debug.h" - -int8_t MACLink::activateAsTarget(uint16_t timeout) -{ - pn532.begin(); - pn532.SAMConfig(); - return pn532.tgInitAsTarget(timeout); -} - -bool MACLink::write(const uint8_t *header, uint8_t hlen, const uint8_t *body, uint8_t blen) -{ - return pn532.tgSetData(header, hlen, body, blen); -} - -int16_t MACLink::read(uint8_t *buf, uint8_t len) -{ - return pn532.tgGetData(buf, len); -} diff --git a/libraries/PN532/mac_link.h b/libraries/PN532/mac_link.h deleted file mode 100644 index 1575c04..0000000 --- a/libraries/PN532/mac_link.h +++ /dev/null @@ -1,51 +0,0 @@ - - -#ifndef __MAC_LINK_H__ -#define __MAC_LINK_H__ - -#include "PN532.h" - -class MACLink { -public: - MACLink(PN532Interface &interface) : pn532(interface) { - - }; - - /** - * @brief Activate PN532 as a target - * @param timeout max time to wait, 0 means no timeout - * @return > 0 success - * = 0 timeout - * < 0 failed - */ - int8_t activateAsTarget(uint16_t timeout = 0); - - /** - * @brief write a PDU packet, the packet should be less than (255 - 2) bytes - * @param header packet header - * @param hlen length of header - * @param body packet body - * @param blen length of body - * @return true success - * false failed - */ - bool write(const uint8_t *header, uint8_t hlen, const uint8_t *body = 0, uint8_t blen = 0); - - /** - * @brief read a PDU packet, the packet will be less than (255 - 2) bytes - * @param buf the buffer to contain the PDU packet - * @param len lenght of the buffer - * @return >=0 length of the PDU packet - * <0 failed - */ - int16_t read(uint8_t *buf, uint8_t len); - - uint8_t *getHeaderBuffer(uint8_t *len) { - return pn532.getBuffer(len); - }; - -private: - PN532 pn532; -}; - -#endif // __MAC_LINK_H__ diff --git a/libraries/PN532/snep.cpp b/libraries/PN532/snep.cpp deleted file mode 100644 index f690878..0000000 --- a/libraries/PN532/snep.cpp +++ /dev/null @@ -1,102 +0,0 @@ - -#include "snep.h" -#include "PN532_debug.h" - -int8_t SNEP::write(const uint8_t *buf, uint8_t len, uint16_t timeout) -{ - if (0 >= llcp.activate(timeout)) { - DMSG("failed to activate PN532 as a target\n"); - return -1; - } - - if (0 >= llcp.connect(timeout)) { - DMSG("failed to set up a connection\n"); - return -2; - } - - // response a success SNEP message - headerBuf[0] = SNEP_DEFAULT_VERSION; - headerBuf[1] = SNEP_REQUEST_PUT; - headerBuf[2] = 0; - headerBuf[3] = 0; - headerBuf[4] = 0; - headerBuf[5] = len; - if (0 >= llcp.write(headerBuf, 6, buf, len)) { - return -3; - } - - if (6 > llcp.read(headerBuf, headerBufLen)) { - return -4; - } - - // check SNEP version - if (SNEP_DEFAULT_VERSION != headerBuf[0]) { - DMSG("The received SNEP message's major version is different\n"); - // To-do: send Unsupported Version response - return -4; - } - - // expect a put request - if (SNEP_RESPONSE_SUCCESS != headerBuf[1]) { - DMSG("Expect a success response\n"); - return -4; - } - - llcp.disconnect(timeout); - - return 1; -} - -int16_t SNEP::read(uint8_t *buf, uint8_t len, uint16_t timeout) -{ - if (0 >= llcp.activate(timeout)) { - DMSG("failed to activate PN532 as a target\n"); - return -1; - } - - if (0 >= llcp.waitForConnection(timeout)) { - DMSG("failed to set up a connection\n"); - return -2; - } - - uint16_t status = llcp.read(buf, len); - if (6 > status) { - return -3; - } - - - // check SNEP version - if (SNEP_DEFAULT_VERSION != buf[0]) { - DMSG("The received SNEP message's major version is different\n"); - // To-do: send Unsupported Version response - return -4; - } - - // expect a put request - if (SNEP_REQUEST_PUT != buf[1]) { - DMSG("Expect a put request\n"); - return -4; - } - - // check message's length - uint32_t length = ((uint32_t)buf[2] << 24) + ((uint32_t)buf[3] << 16) + (buf[4] << 8) + buf[5]; - // length should not be more than 244 (header + body < 255, header = 6 + 3 + 2) - if (length > (status - 6)) { - DMSG("The SNEP message is too large\n"); - return -4; - } - for (uint8_t i = 0; i < length; i++) { - buf[i] = buf[i + 6]; - } - - // response a success SNEP message - headerBuf[0] = SNEP_DEFAULT_VERSION; - headerBuf[1] = SNEP_RESPONSE_SUCCESS; - headerBuf[2] = 0; - headerBuf[3] = 0; - headerBuf[4] = 0; - headerBuf[5] = 0; - llcp.write(headerBuf, 6); - - return length; -} diff --git a/libraries/PN532/snep.h b/libraries/PN532/snep.h deleted file mode 100644 index 1a51696..0000000 --- a/libraries/PN532/snep.h +++ /dev/null @@ -1,49 +0,0 @@ - - -#ifndef __SNEP_H__ -#define __SNEP_H__ - -#include "llcp.h" - -#define SNEP_DEFAULT_VERSION 0x10 // Major: 1, Minor: 0 - -#define SNEP_REQUEST_PUT 0x02 -#define SNEP_REQUEST_GET 0x01 - -#define SNEP_RESPONSE_SUCCESS 0x81 -#define SNEP_RESPONSE_REJECT 0xFF - -class SNEP { -public: - SNEP(PN532Interface &interface) : llcp(interface) { - headerBuf = llcp.getHeaderBuffer(&headerBufLen); - }; - - /** - * @brief write a SNEP packet, the packet should be less than (255 - 2 - 3) bytes - * @param buf the buffer to contain the packet - * @param len lenght of the buffer - * @param timeout max time to wait, 0 means no timeout - * @return >0 success - * =0 timeout - * <0 failed - */ - int8_t write(const uint8_t *buf, uint8_t len, uint16_t timeout = 0); - - /** - * @brief read a SNEP packet, the packet will be less than (255 - 2 - 3) bytes - * @param buf the buffer to contain the packet - * @param len lenght of the buffer - * @param timeout max time to wait, 0 means no timeout - * @return >=0 length of the packet - * <0 failed - */ - int16_t read(uint8_t *buf, uint8_t len, uint16_t timeout = 0); - -private: - LLCP llcp; - uint8_t *headerBuf; - uint8_t headerBufLen; -}; - -#endif // __SNEP_H__ diff --git a/libraries/PN532_I2C/PN532_I2C.cpp b/libraries/PN532_I2C/PN532_I2C.cpp deleted file mode 100644 index aca507b..0000000 --- a/libraries/PN532_I2C/PN532_I2C.cpp +++ /dev/null @@ -1,180 +0,0 @@ - -#include "PN532_I2C.h" -#include "PN532_debug.h" - -#define PN532_I2C_ADDRESS (0x48 >> 1) - - -PN532_I2C::PN532_I2C(TwoWire &wire) -{ - _wire = &wire; - command = 0; -} - -void PN532_I2C::begin() -{ - _wire->begin(); -} - -void PN532_I2C::wakeup() -{ - _wire->beginTransmission(PN532_I2C_ADDRESS); // I2C start - delay(20); - _wire->endTransmission(); // I2C end -} - -int8_t PN532_I2C::writeCommand(const uint8_t *header, uint8_t hlen, const uint8_t *body, uint8_t blen) -{ - command = header[0]; - _wire->beginTransmission(PN532_I2C_ADDRESS); - - write(PN532_PREAMBLE); - write(PN532_STARTCODE1); - write(PN532_STARTCODE2); - - uint8_t length = hlen + blen + 1; // length of data field: TFI + DATA - write(length); - write(~length + 1); // checksum of length - - write(PN532_HOSTTOPN532); - uint8_t sum = PN532_HOSTTOPN532; // sum of TFI + DATA - - DMSG("write: "); - - for (uint8_t i = 0; i < hlen; i++) { - if (write(header[i])) { - sum += header[i]; - - DMSG_HEX(header[i]); - } else { - DMSG("\nToo many data to send, I2C doesn't support such a big packet\n"); // I2C max packet: 32 bytes - return PN532_INVALID_FRAME; - } - } - - for (uint8_t i = 0; i < blen; i++) { - if (write(body[i])) { - sum += body[i]; - - DMSG_HEX(body[i]); - } else { - DMSG("\nToo many data to send, I2C doesn't support such a big packet\n"); // I2C max packet: 32 bytes - return PN532_INVALID_FRAME; - } - } - - uint8_t checksum = ~sum + 1; // checksum of TFI + DATA - write(checksum); - write(PN532_POSTAMBLE); - - _wire->endTransmission(); - - DMSG('\n'); - - return readAckFrame(); -} - -int16_t PN532_I2C::readResponse(uint8_t buf[], uint8_t len, uint16_t timeout) -{ - uint16_t time = 0; - - do { - if (_wire->requestFrom(PN532_I2C_ADDRESS, len + 2)) { - if (read() & 1) { // check first byte --- status - break; // PN532 is ready - } - } - - delay(1); - time++; - if ((0 != timeout) && (time > timeout)) { - return -1; - } - } while (1); - - if (0x00 != read() || // PREAMBLE - 0x00 != read() || // STARTCODE1 - 0xFF != read() // STARTCODE2 - ) { - - return PN532_INVALID_FRAME; - } - - uint8_t length = read(); - if (0 != (uint8_t)(length + read())) { // checksum of length - return PN532_INVALID_FRAME; - } - - uint8_t cmd = command + 1; // response command - if (PN532_PN532TOHOST != read() || (cmd) != read()) { - return PN532_INVALID_FRAME; - } - - length -= 2; - if (length > len) { - return PN532_NO_SPACE; // not enough space - } - - DMSG("read: "); - DMSG_HEX(cmd); - - uint8_t sum = PN532_PN532TOHOST + cmd; - for (uint8_t i = 0; i < length; i++) { - buf[i] = read(); - sum += buf[i]; - - DMSG_HEX(buf[i]); - } - DMSG('\n'); - - uint8_t checksum = read(); - if (0 != (uint8_t)(sum + checksum)) { - DMSG("checksum is not ok\n"); - return PN532_INVALID_FRAME; - } - read(); // POSTAMBLE - - return length; -} - -int8_t PN532_I2C::readAckFrame() -{ - const uint8_t PN532_ACK[] = {0, 0, 0xFF, 0, 0xFF, 0}; - uint8_t ackBuf[sizeof(PN532_ACK)]; - - DMSG("wait for ack at : "); - DMSG(millis()); - DMSG('\n'); - - uint16_t time = 0; - do { - if (_wire->requestFrom(PN532_I2C_ADDRESS, sizeof(PN532_ACK) + 1)) { - if (read() & 1) { // check first byte --- status - break; // PN532 is ready - } - } - - delay(1); - time++; - if (time > PN532_ACK_WAIT_TIME) { - DMSG("Time out when waiting for ACK\n"); - return PN532_TIMEOUT; - } - } while (1); - - DMSG("ready at : "); - DMSG(millis()); - DMSG('\n'); - - - for (uint8_t i = 0; i < sizeof(PN532_ACK); i++) { - ackBuf[i] = read(); - } - - if (memcmp(ackBuf, PN532_ACK, sizeof(PN532_ACK))) { - DMSG("Invalid ACK\n"); - return PN532_INVALID_ACK; - } - - return 0; -} diff --git a/libraries/PN532_I2C/PN532_I2C.h b/libraries/PN532_I2C/PN532_I2C.h deleted file mode 100644 index 287a8e8..0000000 --- a/libraries/PN532_I2C/PN532_I2C.h +++ /dev/null @@ -1,40 +0,0 @@ - -#ifndef __PN532_I2C_H__ -#define __PN532_I2C_H__ - -#include -#include "PN532Interface.h" - -class PN532_I2C : public PN532Interface { -public: - PN532_I2C(TwoWire &wire); - - void begin(); - void wakeup(); - virtual int8_t writeCommand(const uint8_t *header, uint8_t hlen, const uint8_t *body = 0, uint8_t blen = 0); - int16_t readResponse(uint8_t buf[], uint8_t len, uint16_t timeout); - -private: - TwoWire* _wire; - uint8_t command; - - int8_t readAckFrame(); - - inline uint8_t write(uint8_t data) { - #if ARDUINO >= 100 - return _wire->write(data); - #else - return _wire->send(data); - #endif - } - - inline uint8_t read() { - #if ARDUINO >= 100 - return _wire->read(); - #else - return _wire->receive(); - #endif - } -}; - -#endif diff --git a/libraries/PWF_AS3935_Lightning_Sensor/PWF_Lightning_Sensor.txt b/libraries/PWF_AS3935_Lightning_Sensor/PWF_Lightning_Sensor.txt deleted file mode 100644 index ed26e7e..0000000 --- a/libraries/PWF_AS3935_Lightning_Sensor/PWF_Lightning_Sensor.txt +++ /dev/null @@ -1,10 +0,0 @@ -Notes from AS3935 datasheet: -Register Map: Page 11, detailed version on Page 12 - -Max clock freq for SPI = 2MHz - -SPI command Structure: Page14 -To activate this SPI, the CS has to be set to low. A SPI command consists of two bytes serial command and the data are sampled on the falling -edge of SCLK (CPHA=1). The next table shows command structure, from the MSB (B15) to LSB (B0). The command stream has to be sent to -the SPI from the MSB (B15) to the LSB (B0). - diff --git a/libraries/PWF_AS3935_Lightning_Sensor/PWFusion_AS3935.cpp b/libraries/PWF_AS3935_Lightning_Sensor/PWFusion_AS3935.cpp deleted file mode 100644 index b512121..0000000 --- a/libraries/PWF_AS3935_Lightning_Sensor/PWFusion_AS3935.cpp +++ /dev/null @@ -1,414 +0,0 @@ -/*************************************************************************** -* File Name: PWFusion_AS3935.h -* Processor/Platform: Arduino Uno R3 (tested) -* Development Environment: Arduino 1.0.5 -* -* Designed for use with with Playing With Fusion AS3935 Lightning Sensor -* Breakout: SEN-39001. -* -* SEN-39001 (universal applications) -* ---> http://www.playingwithfusion.com/productview.php?pdid=22 -* -* Copyright © 2014 Playing With Fusion, Inc. -* SOFTWARE LICENSE AGREEMENT: This code is released under the MIT License. -* -* 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. -* ************************************************************************** -* REVISION HISTORY: -* Author Date Comments -* J. Steinlage 2014Aug20 Original version -* -* Playing With Fusion, Inc. invests time and resources developing open-source -* code. Please support Playing With Fusion and continued open-source -* development by buying products from Playing With Fusion! -* -* ************************************************************************** -* ADDITIONAL NOTES: -* This file contains functions to interface with the AS3935 Franklin -* Lightning Sensor manufactured by AMS. Originally designed for application -* on the Arduino Uno platform. -**************************************************************************/ -#include "PWFusion_AS3935.h" - -PWF_AS3935::PWF_AS3935(int8_t CSx, int8_t IRQx, int8_t SIx) -{ - _cs = CSx; - _si = SIx; - _irq = IRQx; - - // initalize the chip select pins - pinMode(_cs, OUTPUT); - pinMode(_si, OUTPUT); - pinMode(_irq, INPUT); - - digitalWrite(_cs, HIGH); // set pin high to initialize/clear SPI bus - digitalWrite(_si, LOW); // set pin low for SPI mode - -} - -uint8_t PWF_AS3935::_sing_reg_read(uint8_t RegAdd) -{ - digitalWrite(_cs, LOW); // set pin low to start talking to IC - // next pack command byte, send AS3935.... structure is shown below - // MODE Register Address/Direct Cmd - // B15-14 B13------------------8 - // 15 is always 0; B14, 0: Write/Direct Command, 1: Read - SPI.transfer((RegAdd & 0x3F) | 0x40); // simple write, nothing to read back - uint8_t RegData = SPI.transfer(0x00); // read register data from IC - digitalWrite(_cs, HIGH); // set pin high to end SPI session - - return RegData; -} - -void PWF_AS3935::_sing_reg_write(uint8_t RegAdd, uint8_t DataMask, uint8_t RegData) -{ - (void)DataMask; - // Configure and write the updated register value - digitalWrite(_cs, LOW); // set pin low to start talking to IC - // next pack command byte, send AS3935.... structure is shown below - // MODE Register Address/Direct Cmd - // B15-14 B13------------------8 - // 15 is always 0; B14, 0: Write/Direct Command, 1: Read - SPI.transfer((RegAdd & 0x3F)); // simple write, nothing to read back - SPI.transfer(RegData); // write register data to IC - digitalWrite(_cs, HIGH); // set pin high to end SPI session -} - -void PWF_AS3935::AS3935_DefInit() -{ - _AS3935_Reset(); // reset registers to default -} - -void PWF_AS3935::_AS3935_Reset() -{ - // run PRESET_DEFAULT Direct Command to set all registers in default state - digitalWrite(_cs, LOW); // begin transfer - SPI.transfer(0x3C); // send first byte (write, PRESET_DEFAULT register) - SPI.transfer(0x96); // send second byte (direct command) - digitalWrite(_cs, HIGH); // end transfer - delay(2); // wait 2ms to complete -} - -void PWF_AS3935::_CalRCO() -{ - // run ALIB_RCO Direct Command to cal internal RCO - digitalWrite(_cs, LOW); // begin transfer - SPI.transfer(0x3D); // send first byte (write, CALIB_RCO register) - SPI.transfer(0x96); // send second byte (direct command) - digitalWrite(_cs, HIGH); // end transfer - delay(3); // wait 3ms to complete -} - -void PWF_AS3935::AS3935_PowerUp(void) -{ - // power-up sequence based on datasheet, pg 23/27 - // register 0x00, PWD bit: 0 (clears PWD) - _sing_reg_write(0x00, 0x01, 0x00); - _CalRCO(); // run RCO cal cmd - _sing_reg_write(0x08, 0x20, 0x20); // set DISP_SRCO to 1 - delay(2); - _sing_reg_write(0x08, 0x20, 0x00); // set DISP_SRCO to 0 - -} - -void PWF_AS3935::AS3935_PowerDown(void) -{ - // register 0x00, PWD bit: 0 (sets PWD) - _sing_reg_write(0x00, 0x01, 0x01); - Serial.println("AS3935 powered down"); -} - -void PWF_AS3935::AS3935_DisturberEn(void) -{ - // register 0x03, PWD bit: 5 (sets MASK_DIST) - _sing_reg_write(0x03, 0x20, 0x00); - Serial.println("disturber detection enabled"); -} - -void PWF_AS3935::AS3935_DisturberDis(void) -{ - // register 0x03, PWD bit: 5 (sets MASK_DIST) - _sing_reg_write(0x03, 0x20, 0x20); -} - -void PWF_AS3935::AS3935_SetIRQ_Output_Source(uint8_t irq_select) -{ - // set interrupt source - what to displlay on IRQ pin - // reg 0x08, bits 5 (TRCO), 6 (SRCO), 7 (LCO) - // only one should be set at once, I think - // 0 = NONE, 1 = TRCO, 2 = SRCO, 3 = LCO - - if(1 == irq_select) - { - _sing_reg_write(0x08, 0xE0, 0x20); // set only TRCO bit - } - else if(2 == irq_select) - { - _sing_reg_write(0x08, 0xE0, 0x40); // set only SRCO bit - } - else if(3 == irq_select) - { - _sing_reg_write(0x08, 0xE0, 0x80); // set only LCO bit - } - else // assume 0 - { - _sing_reg_write(0x08, 0xE0, 0x00); // clear IRQ pin display bits - } - -} - -void PWF_AS3935::AS3935_SetTuningCaps(uint8_t cap_val) -{ - // Assume only numbers divisible by 8 (because that's all the chip supports) - if(120 < cap_val) // cap_value out of range, assume highest capacitance - { - _sing_reg_write(0x08, 0x0F, 0x0F); // set capacitance bits to maximum - } - else - { - _sing_reg_write(0x08, 0x0F, (cap_val>>3)); // set capacitance bits - } - Serial.print("capacitance set to 8x"); - Serial.println((_sing_reg_read(0x08) & 0x0F)); -} - -uint8_t PWF_AS3935::AS3935_GetInterruptSrc(void) -{ - // definition of interrupt data on table 18 of datasheet - // for this function: - // 0 = unknown src, 1 = lightning detected, 2 = disturber, 3 = Noise level too high - delay(10); // wait 10ms before reading (2ms per pg 22 of datasheet) - uint8_t int_src = (_sing_reg_read(0x03) & 0x0F); // read register, get rid of non-interrupt data - if(0x08 == int_src) - { - return 1; // lightning caused interrupt - } - else if(0x04 == int_src) - { - return 2; // disturber detected - } - else if(0x01 == int_src) - { - return 3; // Noise level too high - } - else{return 0;} // interrupt result not expected - -} - -uint8_t PWF_AS3935::AS3935_GetLightningDistKm(void) -{ - uint8_t strike_dist = (_sing_reg_read(0x07) & 0x3F); // read register, get rid of non-distance data - return strike_dist; -} - -uint32_t PWF_AS3935::AS3935_GetStrikeEnergyRaw(void) -{ - uint32_t nrgy_raw = ((_sing_reg_read(0x06) & 0x1F) << 8); // MMSB, shift 8 bits left, make room for MSB - nrgy_raw |= _sing_reg_read(0x05); // read MSB - nrgy_raw <<= 8; // shift 8 bits left, make room for LSB - nrgy_raw |= _sing_reg_read(0x04); // read LSB, add to others - - return nrgy_raw; -} - -uint8_t PWF_AS3935::AS3935_SetMinStrikes(uint8_t min_strk) -{ - // This function sets min strikes to the closest available number, rounding to the floor, - // where necessary, then returns the physical value that was set. Options are 1, 5, 9 or 16 strikes. - // see pg 22 of the datasheet for more info (#strikes in 17 min) - if(5 > min_strk) - { - _sing_reg_write(0x02, 0x30, 0x00); - return 1; - } - else if(9 > min_strk) - { - _sing_reg_write(0x02, 0x30, 0x10); - return 5; - } - else if(16 > min_strk) - { - _sing_reg_write(0x02, 0x30, 0x20); - return 9; - } - else - { - _sing_reg_write(0x02, 0x30, 0x30); - return 16; - } -} - -void PWF_AS3935::AS3935_SetIndoors(void) -{ - // AFE settings addres 0x00, bits 5:1 (10010, based on datasheet, pg 19, table 15) - // this is the default setting at power-up (AS3935 datasheet, table 9) - _sing_reg_write(0x00, 0x3E, 0x24); - Serial.println("set up for indoor operation"); -} - -void PWF_AS3935::AS3935_SetOutdoors(void) -{ - // AFE settings addres 0x00, bits 5:1 (01110, based on datasheet, pg 19, table 15) - _sing_reg_write(0x00, 0x3E, 0x1C); - Serial.println("set up for outdoor operation"); -} - -void PWF_AS3935::AS3935_ClearStatistics(void) -{ - // clear is accomplished by toggling CL_STAT bit 'high-low-high' (then set low to move on) - _sing_reg_write(0x02, 0x40, 0x40); // high - _sing_reg_write(0x02, 0x40, 0x00); // low - _sing_reg_write(0x02, 0x40, 0x40); // high -} - -uint8_t PWF_AS3935::AS3935_GetNoiseFloorLvl(void) -{ - // NF settings addres 0x01, bits 6:4 - // default setting of 010 at startup (datasheet, table 9) - uint8_t reg_raw = _sing_reg_read(0x01); // read register 0x01 - return ((reg_raw & 0x70)>>4); // should return value from 0-7, see table 16 for info -} - -void PWF_AS3935::AS3935_SetNoiseFloorLvl(uint8_t nf_sel) -{ - // NF settings addres 0x01, bits 6:4 - // default setting of 010 at startup (datasheet, table 9) - if(7 >= nf_sel) // nf_sel within expected range - { - _sing_reg_write(0x01, 0x70, ((nf_sel & 0x07)<<4)); - } - else - { // out of range, set to default (power-up value 010) - _sing_reg_write(0x01, 0x70, 0x20); - } -} - -uint8_t PWF_AS3935::AS3935_GetWatchdogThreshold(void) -{ - // This function is used to read WDTH. It is used to increase robustness to disturbers, - // though will make detection less efficient (see page 19, Fig 20 of datasheet) - // WDTH register: add 0x01, bits 3:0 - // default value of 0001 - // values should only be between 0x00 and 0x0F (0 and 7) - uint8_t reg_raw = _sing_reg_read(0x01); - return (reg_raw & 0x0F); -} - -void PWF_AS3935::AS3935_SetWatchdogThreshold(uint8_t wdth) -{ - // This function is used to modify WDTH. It is used to increase robustness to disturbers, - // though will make detection less efficient (see page 19, Fig 20 of datasheet) - // WDTH register: add 0x01, bits 3:0 - // default value of 0001 - // values should only be between 0x00 and 0x0F (0 and 7) - _sing_reg_write(0x01, 0x0F, (wdth & 0x0F)); -} - -uint8_t PWF_AS3935::AS3935_GetSpikeRejection(void) -{ - // This function is used to read SREJ (spike rejection). Similar to the Watchdog threshold, - // it is used to make the system more robust to disturbers, though will make general detection - // less efficient (see page 20-21, especially Fig 21 of datasheet) - // SREJ register: add 0x02, bits 3:0 - // default value of 0010 - // values should only be between 0x00 and 0x0F (0 and 7) - uint8_t reg_raw = _sing_reg_read(0x02); - return (reg_raw & 0x0F); -} - -void PWF_AS3935::AS3935_SetSpikeRejection(uint8_t srej) -{ - // This function is used to modify SREJ (spike rejection). Similar to the Watchdog threshold, - // it is used to make the system more robust to disturbers, though will make general detection - // less efficient (see page 20-21, especially Fig 21 of datasheet) - // WDTH register: add 0x02, bits 3:0 - // default value of 0010 - // values should only be between 0x00 and 0x0F (0 and 7) - _sing_reg_write(0x02, 0x0F, (srej & 0x0F)); -} - -void PWF_AS3935::AS3935_SetLCO_FDIV(uint8_t fdiv) -{ - // This function sets LCO_FDIV register. This is useful in the tuning of the antenna - // LCO_FDIV register: add 0x03, bits 7:6 - // default value: 00 - // set 0, 1, 2 or 3 for ratios of 16, 32, 64 and 128, respectively. - // See pg 23, Table 20 for more info. - _sing_reg_write(0x03, 0xC0, ((fdiv & 0x03) << 5)); -} - -void PWF_AS3935::AS3935_PrintAllRegs(void) -{ - Serial.print("Reg 0x00: "); - Serial.println(_sing_reg_read(0x00)); - Serial.print("Reg 0x01: "); - Serial.println(_sing_reg_read(0x01)); - Serial.print("Reg 0x02: "); - Serial.println(_sing_reg_read(0x02)); - Serial.print("Reg 0x03: "); - Serial.println(_sing_reg_read(0x03)); - Serial.print("Reg 0x04: "); - Serial.println(_sing_reg_read(0x04)); - Serial.print("Reg 0x05: "); - Serial.println(_sing_reg_read(0x05)); - Serial.print("Reg 0x06: "); - Serial.println(_sing_reg_read(0x06)); - Serial.print("Reg 0x07: "); - Serial.println(_sing_reg_read(0x07)); - Serial.print("Reg 0x08: "); - Serial.println(_sing_reg_read(0x08)); - uint32_t nrgy_val = AS3935_GetStrikeEnergyRaw(); - Serial.println(nrgy_val); -} - -void PWF_AS3935::AS3935_ManualCal(uint8_t capacitance, uint8_t location, uint8_t disturber) -{ - // start by powering up - AS3935_PowerUp(); - - // indoors/outdoors next... - if(1 == location) // set outdoors if 1 - { - AS3935_SetOutdoors(); - } - else // set indoors if anything but 1 - { - AS3935_SetIndoors(); - } - - // disturber cal - if(0 == disturber) // disabled if 0 - { - AS3935_DisturberDis(); - } - else // enabled if anything but 0 - { - AS3935_DisturberEn(); - } - - AS3935_SetIRQ_Output_Source(0); - - delay(500); - // capacitance first... directly write value here - AS3935_SetTuningCaps(capacitance); - - Serial.println("AS3935 manual cal complete"); -} -// a nice function would be to read the last 'x' strike data values.... - diff --git a/libraries/PWF_AS3935_Lightning_Sensor/PWFusion_AS3935.h b/libraries/PWF_AS3935_Lightning_Sensor/PWFusion_AS3935.h deleted file mode 100644 index e226e35..0000000 --- a/libraries/PWF_AS3935_Lightning_Sensor/PWFusion_AS3935.h +++ /dev/null @@ -1,96 +0,0 @@ -/*************************************************************************** -* File Name: PWFusion_AS3935.h -* Processor/Platform: Arduino Uno R3 (tested) -* Development Environment: Arduino 1.0.5 -* -* Designed for use with with Playing With Fusion AS3935 Lightning Sensor -* Breakout: SEN-39001. -* -* SEN-39001 (universal applications) -* ---> http://www.playingwithfusion.com/productview.php?pdid=22 -* -* Copyright � 2014 Playing With Fusion, Inc. -* SOFTWARE LICENSE AGREEMENT: This code is released under the MIT License. -* -* 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. -* ************************************************************************** -* REVISION HISTORY: -* Author Date Comments -* J. Steinlage 2014Aug20 Original version -* -* Playing With Fusion, Inc. invests time and resources developing open-source -* code. Please support Playing With Fusion and continued open-source -* development by buying products from Playing With Fusion! -* -* ************************************************************************** -* ADDITIONAL NOTES: -* This file contains functions to interface with the AS3935 Franklin -* Lightning Sensor manufactured by AMS. Originally designed for application -* on the Arduino Uno platform. -**************************************************************************/ -#ifndef PWF_AS3935_h -#define PWF_AS3935_h - -#include "Arduino.h" -#include "avr/pgmspace.h" -#include "util/delay.h" -#include "stdlib.h" -#include - -class PWF_AS3935 -{ - public: - PWF_AS3935(int8_t CSx, int8_t IRQx, int8_t SIx); - void AS3935_ManualCal(uint8_t capacitance, uint8_t location, uint8_t disturber); - void AS3935_DefInit(void); - void AS3935_PowerUp(void); - void AS3935_PowerDown(void); - void AS3935_DisturberEn(void); - void AS3935_DisturberDis(void); - void AS3935_SetIRQ_Output_Source(uint8_t irq_select); - void AS3935_SetTuningCaps(uint8_t cap_val); - uint8_t AS3935_GetInterruptSrc(void); - uint8_t AS3935_GetLightningDistKm(void); - uint32_t AS3935_GetStrikeEnergyRaw(void); - uint8_t AS3935_SetMinStrikes(uint8_t min_strk); - void AS3935_ClearStatistics(void); - void AS3935_SetIndoors(void); - void AS3935_SetOutdoors(void); - uint8_t AS3935_GetNoiseFloorLvl(void); - void AS3935_SetNoiseFloorLvl(uint8_t nf_sel); - uint8_t AS3935_GetWatchdogThreshold(void); - void AS3935_SetWatchdogThreshold(uint8_t wdth); - uint8_t AS3935_GetSpikeRejection(void); - void AS3935_SetSpikeRejection(uint8_t srej); - void AS3935_SetLCO_FDIV(uint8_t fdiv); - void AS3935_PrintAllRegs(void); - - private: - int8_t _cs, _irq, _si; - uint8_t _sing_reg_read(uint8_t RegAdd); - void _sing_reg_write(uint8_t RegAdd, uint8_t DataMask, uint8_t RegData); - void _AS3935_Reset(void); - void _CalRCO(void); -}; - -#endif - - - - diff --git a/libraries/PinChangeInt/Examples/ByteBuffer/ByteBuffer.cpp b/libraries/PinChangeInt/Examples/ByteBuffer/ByteBuffer.cpp deleted file mode 100644 index db49dce..0000000 --- a/libraries/PinChangeInt/Examples/ByteBuffer/ByteBuffer.cpp +++ /dev/null @@ -1,272 +0,0 @@ -/* - ByteBuffer.cpp - A circular buffer implementation for Arduino - Created by Sigurdur Orn, July 19, 2010. - siggi@mit.edu - Updated by GreyGnome (aka Mike Schwager) Thu Feb 23 17:25:14 CST 2012 - added the putString() method and the fillError variable. - added the checkError() and resetError() methods. The checkError() method resets the fillError variable - to false as a side effect. - added the ByteBuffer(unsigned int buf_size) constructor. - added the init() method, and had the constructor call it automagically. - Also made the capacity, position, length, and fillError variables volatile, for safe use by interrupts. - */ - -#include "ByteBuffer.h" - -void ByteBuffer::init(){ - ByteBuffer::init(DEFAULTBUFSIZE); -} - -void ByteBuffer::init(unsigned int buf_length){ - data = (byte*)malloc(sizeof(byte)*buf_length); - capacity = buf_length; - position = 0; - length = 0; - fillError=false; -} - -void ByteBuffer::deAllocate(){ - free(data); -} - -void ByteBuffer::clear(){ - position = 0; - length = 0; -} - -void ByteBuffer::resetError(){ - fillError=false; -} - -boolean ByteBuffer::checkError(){ - /* - if (fillError) { - Serial.print("E: checkError: length "); - Serial.println(length, DEC); - } - */ - - boolean result=fillError; - fillError=false; - return(result); -} - -int ByteBuffer::getSize(){ - return length; -} - -int ByteBuffer::getCapacity(){ - return capacity; -} - -byte ByteBuffer::peek(unsigned int index){ - byte b = data[(position+index)%capacity]; - return b; -} - -uint8_t ByteBuffer::put(byte in){ - if(length < capacity){ - // save data byte at end of buffer - data[(position+length) % capacity] = in; - // increment the length - length++; - return 1; - } - // return failure - //Serial.print("E: put: "); - //Serial.println(length, DEC); - fillError=true; - return 0; -} - - -uint8_t ByteBuffer::putString(char *in){ - uint8_t count=0; - char *inString; - - inString=in; - uint8_t oldSREG = SREG; cli(); - while(length <= capacity){ - if (length == capacity) { - fillError=true; - return count; - } - // save data byte at end of buffer - data[(position+length) % capacity] = *inString; - // increment the length - length++; - inString++; - count++; - if (*inString == 0) { - if (count==0) fillError=true; // Serial.println("E: putString"); }; - SREG = oldSREG; // Restore register; reenables interrupts - return count; - } - } - SREG = oldSREG; // Restore register; reenables interrupts - return count; -} - -uint8_t ByteBuffer::putInFront(byte in){ - uint8_t oldSREG = SREG; cli(); - if(length < capacity){ - // save data byte at end of buffer - if( position == 0 ) - position = capacity-1; - else - position = (position-1)%capacity; - data[position] = in; - // increment the length - length++; - SREG = oldSREG; // Restore register; reenables interrupts - return 1; - } - // return failure - //Serial.println("E: putInFront"); - fillError=true; - SREG = oldSREG; // Restore register; reenables interrupts - return 0; -} - -byte ByteBuffer::get(){ - uint8_t oldSREG = SREG; cli(); - byte b = 0; - - if(length > 0){ - b = data[position]; - // move index down and decrement length - position = (position+1)%capacity; - length--; - } - SREG = oldSREG; // Restore register; reenables interrupts - return b; -} - -byte ByteBuffer::getFromBack(){ - byte b = 0; - if(length > 0){ - uint8_t oldSREG = SREG; cli(); - b = data[(position+length-1)%capacity]; - length--; - SREG = oldSREG; // Restore register; reenables interrupts - } - - return b; -} - -// -// Ints -// - -void ByteBuffer::putIntInFront(int in){ - byte *pointer = (byte *)∈ - putInFront(pointer[0]); - putInFront(pointer[1]); -} - -void ByteBuffer::putInt(int in){ - byte *pointer = (byte *)∈ - put(pointer[1]); - put(pointer[0]); -} - - -int ByteBuffer::getInt(){ - int ret; - byte *pointer = (byte *)&ret; - pointer[1] = get(); - pointer[0] = get(); - return ret; -} - -int ByteBuffer::getIntFromBack(){ - int ret; - byte *pointer = (byte *)&ret; - pointer[0] = getFromBack(); - pointer[1] = getFromBack(); - return ret; -} - -// -// Longs -// - -void ByteBuffer::putLongInFront(long in){ - byte *pointer = (byte *)∈ - putInFront(pointer[0]); - putInFront(pointer[1]); - putInFront(pointer[2]); - putInFront(pointer[3]); -} - -void ByteBuffer::putLong(long in){ - byte *pointer = (byte *)∈ - put(pointer[3]); - put(pointer[2]); - put(pointer[1]); - put(pointer[0]); -} - - -long ByteBuffer::getLong(){ - long ret; - byte *pointer = (byte *)&ret; - pointer[3] = get(); - pointer[2] = get(); - pointer[1] = get(); - pointer[0] = get(); - return ret; -} - -long ByteBuffer::getLongFromBack(){ - long ret; - byte *pointer = (byte *)&ret; - pointer[0] = getFromBack(); - pointer[1] = getFromBack(); - pointer[2] = getFromBack(); - pointer[3] = getFromBack(); - return ret; -} - - -// -// Floats -// - -void ByteBuffer::putFloatInFront(float in){ - byte *pointer = (byte *)∈ - putInFront(pointer[0]); - putInFront(pointer[1]); - putInFront(pointer[2]); - putInFront(pointer[3]); -} - -void ByteBuffer::putFloat(float in){ - byte *pointer = (byte *)∈ - put(pointer[3]); - put(pointer[2]); - put(pointer[1]); - put(pointer[0]); -} - -float ByteBuffer::getFloat(){ - float ret; - byte *pointer = (byte *)&ret; - pointer[3] = get(); - pointer[2] = get(); - pointer[1] = get(); - pointer[0] = get(); - return ret; -} - -float ByteBuffer::getFloatFromBack(){ - float ret; - byte *pointer = (byte *)&ret; - pointer[0] = getFromBack(); - pointer[1] = getFromBack(); - pointer[2] = getFromBack(); - pointer[3] = getFromBack(); - return ret; -} - - diff --git a/libraries/PinChangeInt/Examples/ByteBuffer/ByteBuffer.h b/libraries/PinChangeInt/Examples/ByteBuffer/ByteBuffer.h deleted file mode 100644 index 8916e58..0000000 --- a/libraries/PinChangeInt/Examples/ByteBuffer/ByteBuffer.h +++ /dev/null @@ -1,104 +0,0 @@ -/* - ByteBuffer.h - A circular buffer implementation for Arduino - Created by Sigurdur Orn, July 19, 2010. siggi@mit.edu - Updated by GreyGnome (aka Mike Schwager) Thu Feb 23 17:25:14 CST 2012 - added the putString() method and the fillError variable. - added the checkError() and resetError() methods. The checkError() method resets the fillError variable - to false as a side effect. - added the ByteBuffer(unsigned int buf_size) constructor. - added the init() method, and had the constructor call it automagically. - protected certain sections of the code with cli()/sei() calls, for safe use by interrupts. - Also made the capacity, position, length, and fillError variables volatile, for safe use by interrupts. - */ - -#ifndef ByteBuffer_h -#define ByteBuffer_h - -#if defined(ARDUINO) && ARDUINO >= 100 - #include -#else - #include -#endif -//#include - -#define DEFAULTBUFSIZE 32 -class ByteBuffer -{ -public: - ByteBuffer() { - init(); - }; - ByteBuffer(unsigned int buf_size) { - init(buf_size); - }; - - // This method initializes the datastore of the buffer to a certain size. - void init(unsigned int buf_size); - - // This method initializes the datastore of the buffer to the default size. - void init(); - - // This method resets the buffer into an original state (with no data) - void clear(); - - // This method resets the fillError variable to false. - void resetError(); - - // This method tells you if your buffer overflowed at some time since the last - // check. The error state will be reset to false. - boolean checkError(); - - // This releases resources for this buffer, after this has been called the buffer should NOT be used - void deAllocate(); - - // Returns how much space is used in the buffer - int getSize(); - - // Returns the maximum capacity of the buffer - int getCapacity(); - - // This method returns the byte that is located at index in the buffer but doesn't modify the buffer like the get methods (doesn't remove the retured byte from the buffer) - byte peek(unsigned int index); - - // - // Put methods, either a regular put in back or put in front - // - uint8_t putInFront(byte in); - uint8_t put(byte in); - uint8_t putString(char *in); - - void putIntInFront(int in); - void putInt(int in); - - void putLongInFront(long in); - void putLong(long in); - - void putFloatInFront(float in); - void putFloat(float in); - - // - // Get methods, either a regular get from front or from back - // - byte get(); - byte getFromBack(); - - int getInt(); - int getIntFromBack(); - - long getLong(); - long getLongFromBack(); - - float getFloat(); - float getFloatFromBack(); - -private: - byte* data; - - volatile unsigned int capacity; - volatile unsigned int position; - volatile unsigned int length; - volatile boolean fillError; -}; - -#endif - diff --git a/libraries/PinChangeInt/Examples/GetPSTR/GetPSTR.h b/libraries/PinChangeInt/Examples/GetPSTR/GetPSTR.h deleted file mode 100644 index aaab06a..0000000 --- a/libraries/PinChangeInt/Examples/GetPSTR/GetPSTR.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef INCLUDE_GETPSTR -#define INCLUDE_GETPSTR - -#if defined(ARDUINO) && ARDUINO >= 100 - #include -#else - #include "pins_arduino.h" - #include "WProgram.h" - #include "wiring.h" -#endif - -#define getPSTR(s) pgmStrToRAM(PSTR(s)) - -char *_pstr_to_print; -char *pgmStrToRAM(PROGMEM char *theString) { - free(_pstr_to_print); - _pstr_to_print=(char *) malloc(strlen_P(theString)); - strcpy_P(_pstr_to_print, theString); - return (_pstr_to_print); -} -#endif diff --git a/libraries/PinChangeInt/Examples/PinChangeIntExample/PinChangeIntExample.pde b/libraries/PinChangeInt/Examples/PinChangeIntExample/PinChangeIntExample.pde deleted file mode 100644 index 2f254d4..0000000 --- a/libraries/PinChangeInt/Examples/PinChangeIntExample/PinChangeIntExample.pde +++ /dev/null @@ -1,77 +0,0 @@ -// PinChangeIntExample, version 1.1 Sun Jan 15 06:24:19 CST 2012 -// See the Wiki at http://code.google.com/p/arduino-pinchangeint/wiki for more information. -//-------- define these in your sketch, if applicable ---------------------------------------------------------- -// You can reduce the memory footprint of this handler by declaring that there will be no pin change interrupts -// on any one or two of the three ports. If only a single port remains, the handler will be declared inline -// reducing the size and latency of the handler. -//#define NO_PORTB_PINCHANGES // to indicate that port b will not be used for pin change interrupts -//#define NO_PORTC_PINCHANGES // to indicate that port c will not be used for pin change interrupts -// #define NO_PORTD_PINCHANGES // to indicate that port d will not be used for pin change interrupts -// if there is only one PCInt vector in use the code can be inlined -// reducing latency and code size -// define DISABLE_PCINT_MULTI_SERVICE below to limit the handler to servicing a single interrupt per invocation. -// #define DISABLE_PCINT_MULTI_SERVICE -//-------- define the above in your sketch, if applicable ------------------------------------------------------ -#include - -// This example demonstrates a configuration of 3 interrupting pins and 2 interrupt functions. -// All interrupts are serviced immediately, but one of the pins (pin 4) will show you immediately -// on the Terminal. The other function connected to 2 pins sets an array member that is queried in loop(). -// You can then query the array at your leisure. -// This makes loop timing non-critical. - -// Add more Pins at your leisure. -// For the Analog Input pins used as digital input pins, and you can use 14, 15, 16, etc. -// or you can use A0, A1, A2, etc. (the Arduino code comes with #define's -// for the Analog Input pins and will properly recognize e.g., pinMode(A0, INPUT); -#define PIN1 2 -#define PIN2 3 -#define PIN3 4 - -uint8_t latest_interrupted_pin; -uint8_t interrupt_count[20]={0}; // 20 possible arduino pins -void quicfunc() { - latest_interrupted_pin=PCintPort::arduinoPin; - interrupt_count[latest_interrupted_pin]++; -}; - -// You can assign any number of functions to any number of pins. -// How cool is that? -void pin3func() { - Serial.print("Pin "); Serial.print(PIN3, DEC); Serial.println("!"); -} - -void setup() { - pinMode(PIN1, INPUT); digitalWrite(PIN1, HIGH); - PCintPort::attachInterrupt(PIN1, &quicfunc, FALLING); // add more attachInterrupt code as required - pinMode(PIN2, INPUT); digitalWrite(PIN2, HIGH); - PCintPort::attachInterrupt(PIN2, &quicfunc, FALLING); - pinMode(PIN3, INPUT); digitalWrite(PIN3, HIGH); - PCintPort::attachInterrupt(PIN3, &pin3func, CHANGE); - Serial.begin(115200); - Serial.println("---------------------------------------"); -} - -uint8_t i; -void loop() { - uint8_t count; - Serial.print("."); - delay(1000); - for (i=0; i < 20; i++) { - if (interrupt_count[i] != 0) { - count=interrupt_count[i]; - interrupt_count[i]=0; - Serial.print("Count for pin "); - if (i < 14) { - Serial.print("D"); - Serial.print(i, DEC); - } else { - Serial.print("A"); - Serial.print(i-14, DEC); - } - Serial.print(" is "); - Serial.println(count, DEC); - } - } -} - diff --git a/libraries/PinChangeInt/Examples/PinChangeIntSpeedTest/PinChangeIntSpeedTest.pde b/libraries/PinChangeInt/Examples/PinChangeIntSpeedTest/PinChangeIntSpeedTest.pde deleted file mode 100644 index f0ac0f2..0000000 --- a/libraries/PinChangeInt/Examples/PinChangeIntSpeedTest/PinChangeIntSpeedTest.pde +++ /dev/null @@ -1,265 +0,0 @@ -// PinChangeIntSpeedTest by GreyGnome aka Mike Schwager. Version numbers here refer to this sketch. -// Version 1.0 - initial version -// Version 1.1 - added code to test digitalRead() -// Version 1.2 - added new comments for the #define's for the NO_PORTx_PINCHANGES. -// Version 1.3 - includes cbiface.h with ooPinChangeInt, rather than cb.h -// Version 1.4 - testing version 2.10Beta with robtillaart's optimization -// Also added a #define/#undef INLINE_PCINTFUNC for inlining of the function called by the interrupt. -// Default: #undef for using the function as per usual. Changed PCIVERSION so that -// ooPinChangeInt starts at 1000 instead of 200. Modified the "Start" message to show "Start..", pause -// for 1 second, show "*\n" (where \n is a newline), pause for 1 second, then run the test. -// Version 1.4 - made this compatible with version 1.5 of PinChangeInt -// Version 1.5 - modified it to use #define OOPCIVERSION for ooPinChangeInt - -// This version number is for ooPinChangeInt -//#define OOPCIVERSION 1030 -#ifndef OOPCIVERSION -#define PCIVERSION 217 // 110 if using PinChangeInt-1.1, 120 for version 1.2 - // 1000 for ooPinChangeIntversion 1.00, 1001 for ooPinChangeInt version 1.01, etc. -#endif - -//-------- define these in your sketch, if applicable ---------------------------------------------------------- -// You can reduce the memory footprint of this handler by declaring that there will be no pin change interrupts -// on any one or two of the three ports. If only a single port remains, the handler will be declared inline -// reducing the size and latency of the handler. -#undef NO_PORTB_PINCHANGES // to indicate that port b will not be used for pin change interrupts -#undef NO_PORTC_PINCHANGES // to indicate that port c will not be used for pin change interrupts -// #define NO_PORTD_PINCHANGES // to indicate that port d will not be used for pin change interrupts -// You can reduce the code size by 20-50 bytes, and you can speed up the interrupt routine -// slightly by declaring that you don't care if the static variables PCintPort::pinState and/or -// PCintPort::arduinoPin are set and made available to your interrupt routine. -// #define NO_PIN_STATE // to indicate that you don't need the pinState -// #define NO_PIN_NUMBER // to indicate that you don't need the arduinoPin -// if there is only one PCInt vector in use the code can be inlined -// reducing latency and code size -// define DISABLE_PCINT_MULTI_SERVICE below to limit the handler to servicing a single interrupt per invocation. -//#define DISABLE_PCINT_MULTI_SERVICE -//-------- define the above in your sketch, if applicable ------------------------------------------------------ -#if defined(OOPCIVERSION) - #define LIBRARYUNDERTEST "ooPinChangeInt" - #include - #if PCIVERSION == 1001 - #include - #else - #include - #endif -#else - #define LIBRARYUNDERTEST "PinChangeInt" - #include -#endif - -#define SERIALSTUFF // undef to take out all serial statements. Default: #define for measuring time. -#undef MEMTEST // undef to take out memory tests. Default: #undef for measuring time. -#undef INLINE_PCINTFUNC // define to inline the function called from the interrupt. This should have no effect, - // because the compiler will store the registers upon calling the interrupt routine, just - // like calling a function. Still, we test all assumptions. -//----------------------- -// NOTE: BECAUSE OF COLLISIONS in these libraries, you CANNOT have both libraries: PinChangeInt -// and ooPinChangeInt in the libraries directory at the same time. That said, under UNIX-y operating -// systems, it's easy to move the library directory to a name such as "PinChangeInt-1.3", which the -// Arduino will not recognize, and then create a symbolic link when you want to use a library. Such as: -// cd ~/Documents/Arduino/libaries -// mv PinChangeInt PinChangeInt-1.30 -// mv ooPinChangeInt ooPinChangeInt-1.00 -// ln -s PinChangeInt-1.30 PinChangeInt - -#undef FLASH // to flash LED on pin 13 during test - -#ifdef MEMTEST -#include -#endif - -#define TEST 6 - -#if TEST == 1 -#define PTEST 2 // pin to trigger interrupt. pins 0 and 1 are used -#define PLOW 2 // by Serial, so steer clear of them! -#define PHIGH 2 // Interrupts are attached to these pins - -#elif TEST == 2 // see the #if TEST == 2 || TEST == 3 code, below -#define PTEST 2 -#define PLOW 2 -#define PHIGH 2 // need to attachInterrupt to 5 in the code - -#elif TEST == 3 // see the #if TEST == 2 || TEST == 3 code, below -#define PTEST 5 -#define PLOW 2 -#define PHIGH 2 // need to attachInterrupt to 5 in the code - -#elif TEST == 4 -#define PTEST 2 -#define PLOW 2 -#define PHIGH 5 - -#elif TEST == 5 -#define PTEST 3 -#define PLOW 2 -#define PHIGH 5 - -#elif TEST == 6 -#define PTEST 4 -#define PLOW 2 -#define PHIGH 5 - -#elif TEST == 7 -#define PTEST 5 -#define PLOW 2 -#define PHIGH 5 -#endif - -uint8_t qf0; - -#ifdef INLINE_PCINTFUNC -#define INLINE_PCINTFUNC inline -#else -#define INLINE_PCINTFUNC -#endif -INLINE_PCINTFUNC void quicfunc(); -void quicfunc() { - qf0=TCNT0; -} - -#if defined(OOPCIVERSION) -class speedy : public CallBackInterface -{ - public: - uint8_t id; - static uint8_t var0; - speedy () { id=0; }; - speedy (uint8_t _i): id(_i) {}; - - void cbmethod() { - speedy::var0=TCNT0; - //Serial.print("Speedy method "); // debugging - //Serial.println(id, DEC); - }; -}; -uint8_t speedy::var0=0; -#endif - -volatile uint8_t *led_port; -volatile uint8_t *pinT_OP; -volatile uint8_t *pinT_IP; -uint8_t led_mask, not_led_mask; -uint8_t pinT_M, not_pinT_M; -volatile uint8_t pintest, pinIntLow, pinIntHigh; -uint8_t totalpins; -#if defined(OOPCIVERSION) -speedy speedster[8]={speedy(0), speedy(1), speedy(2), speedy(3), speedy(4), speedy(5), speedy(6), speedy(7) }; -#endif -#ifdef MEMTEST -int freemem; -#endif - -int i=0; - -#define PINLED 13 -void setup() -{ -#ifdef SERIALSTUFF - Serial.begin(115200); Serial.println("---------------------------------------"); -#endif // SERIALSTUFF - // set up ports for trigger - pinMode(0, OUTPUT); digitalWrite(0, HIGH); - pinMode(1, OUTPUT); digitalWrite(1, HIGH); - pinMode(2, OUTPUT); digitalWrite(2, HIGH); - pinMode(3, OUTPUT); digitalWrite(3, HIGH); - pinMode(4, OUTPUT); digitalWrite(4, HIGH); - pinMode(5, OUTPUT); digitalWrite(5, HIGH); - pinMode(6, OUTPUT); digitalWrite(6, HIGH); - pinMode(7, OUTPUT); digitalWrite(7, HIGH); -#ifdef FLASH - led_port=portOutputRegister(digitalPinToPort(PINLED)); - led_mask=digitalPinToBitMask(PINLED); - not_led_mask=led_mask^0xFF; - pinMode(PINLED, OUTPUT); digitalWrite(PINLED, LOW); -#endif - // ***************************************************************************** - // set up ports for output ************ PIN TO TEST IS GIVEN HERE ************** - // ***************************************************************************** - pintest=PTEST; - pinIntLow=PLOW; pinIntHigh=PHIGH; // Interrupts are attached to these pins - // ***************************************************************************** - // ***************************************************************************** - pinT_OP=portOutputRegister(digitalPinToPort(pintest)); // output port - pinT_IP=portInputRegister(digitalPinToPort(pintest)); // input port - pinT_M=digitalPinToBitMask(pintest); // mask - not_pinT_M=pinT_M^0xFF; // not-mask - *pinT_OP|=pinT_M; - for (i=pinIntLow; i <= pinIntHigh; i++) { -#if defined(OOPCIVERSION) - PCintPort::attachInterrupt(i, &speedster[i], CHANGE); // C++ technique; v1.3 or better -#endif -#if defined(PCIVERSION) - PCintPort::attachInterrupt((uint8_t) i, &quicfunc, CHANGE); // C technique; v1.2 or earlier -#endif - } -#if TEST == 2 || TEST == 3 - i=5; totalpins=2; -#if defined(OOPCIVERSION) - PCintPort::attachInterrupt(i, &speedster[i], CHANGE); // C++ technique; v1.3 or better -#endif -#if defined(PCIVERSION) - PCintPort::attachInterrupt(i, &quicfunc, CHANGE); // C technique; v1.2 or earlier -#endif -#else - totalpins=pinIntHigh - pinIntLow + 1; -#endif - i=0; -} // end setup() - -uint8_t k=0; -unsigned long milliStart, milliEnd, elapsed; -void loop() { - k=0; - *pinT_OP|=pinT_M; // pintest to 1 -#ifdef SERIALSTUFF - Serial.print(LIBRARYUNDERTEST); Serial.print(" "); - Serial.print("TEST: "); Serial.print(TEST, DEC); Serial.print(" "); -#ifndef MEMTEST - Serial.print("test pin mask: "); Serial.print(pinT_M, HEX); - Serial.print(". Total of "); Serial.print(totalpins, DEC); Serial.println(" pins enabled."); -#endif -#ifdef MEMTEST - freemem=freeMemory(); Serial.print("Free memory: "); Serial.println(freemem, DEC); -#endif -#endif - delay(1000); - Serial.print("Start.."); - delay(1000); Serial.print("*"); - #ifdef FLASH - *led_port|=led_mask; - #endif - milliStart=millis(); - while (k < 10) { - i=0; - while (i < 10000) { - *pinT_OP&=not_pinT_M; // pintest to 0 ****************************** 16.8 us - *pinT_OP|=pinT_M; // pintest to 1 ****************************** ...to get here - i++; - } - k++; - } - milliEnd=millis(); - #ifdef FLASH - *led_port&=not_led_mask; - #endif - elapsed=milliEnd-milliStart; - #ifndef MEMTEST - Serial.print(" Elapsed: "); - Serial.println(elapsed, DEC); - #endif - #ifdef SERIALSTUFF - Serial.print("Interrupted pin: "); - #if defined(OOPCIVERSION) - Serial.println(speedster[pintest].id, DEC); - #else - Serial.println(PCintPort::arduinoPin, DEC); - #endif -#ifdef MEMTEST - freemem=freeMemory(); Serial.print("END-Free memory: "); Serial.println(freemem, DEC); -#endif -#endif - delay(500); -} - diff --git a/libraries/PinChangeInt/Examples/PinChangeIntTest/PinChangeIntTest.pde b/libraries/PinChangeInt/Examples/PinChangeIntTest/PinChangeIntTest.pde deleted file mode 100644 index c8df127..0000000 --- a/libraries/PinChangeInt/Examples/PinChangeIntTest/PinChangeIntTest.pde +++ /dev/null @@ -1,344 +0,0 @@ -// PinChangeIntTest -// version 1.0 Wed Feb 15 07:25:09 CST 2012 -// Version 1.1 Fri Jun 22 19:10:50 CDT 2012 minor tweaks to eliminate compiler warnings. Also, there were bugfixes in ByteBuffer. -// I had some "cli()" without "sei()" in there. -// See the Wiki at http://code.google.com/p/arduino-pinchangeint/wiki for more information. -// This sketch requires the ByteBuffer library, which is found in the PinChangeInt zipfile. -//-------- define these in your sketch, if applicable ---------------------------------------------------------- -//-------- This must go ahead of the #include statement -------------------------------------------------------- -// You can reduce the memory footprint of this handler by declaring that there will be no pin change interrupts -// on any one or two of the three ports. If only a single port remains, the handler will be declared inline -// reducing the size and latency of the handler. -// #define NO_PORTB_PINCHANGES // to indicate that port b will not be used for pin change interrupts -// #define NO_PORTC_PINCHANGES // to indicate that port c will not be used for pin change interrupts -// #define NO_PORTD_PINCHANGES // to indicate that port d will not be used for pin change interrupts -// You can reduce the code size by 20-50 bytes, and you can speed up the interrupt routine -// slightly by declaring that you don't care if the static variables PCintPort::pinState and/or -// PCintPort::arduinoPin are set and made available to your interrupt routine. -// #define NO_PIN_STATE // to indicate that you don't need the pinState -// #define NO_PIN_NUMBER // to indicate that you don't need the arduinoPin -// if there is only one PCInt vector in use the code can be inlined -// reducing latency and code size -// define DISABLE_PCINT_MULTI_SERVICE below to limit the handler to servicing a single interrupt per invocation. -// #define DISABLE_PCINT_MULTI_SERVICE -// The following is intended for testing purposes. If defined, then a variable PCintPort::pinMode can be read -// in your interrupt subroutine. It is not defined by default: -// #define PINMODE -//-------- define the above in your sketch, if applicable ------------------------------------------------------ -#define PINMODE -#define FLASH -#include -#include - -// This example demonstrates a configuration of 6 interrupting pins and 3 interrupt functions. -// A variety of interrupting pins have been chosen, so as to test all PORTs on the Arduino. -// The pins are as follows: -#define tPIN1 2 // port D -#define tPIN2 3 -#define tPIN3 11 // Port B -#define tPIN4 12 -#define tPIN5 A3 // Port C, also can be given as "17" -#define tPIN6 A4 // starts and stops the count -// All pins send interrupts. Arduino pins 2 and A4 (tPIN1,6) interrupt on FALLING. -// Arduino pins 3 and 12 (tPIN2,4) interrupt on RISING. -// Arduino pins 11 and A3 (tPIN5) interrupts on CHANGE. -// quicfunc0 is attached to Arduino pins 2, 3, 11, and 12 (tPIN1-4) -// quicfunc1 is attached to Arduino pin A3 (tPIN5) -// quicfunc2 is attached to Arduino pin A4 (tPIN6). -// NOTE: -// For the Analog Input pins used as digital input pins, you can use numbers such as 14, 15, 16, etc. -// or you can use A0, A1, A2, etc. (the Arduino code comes with #define's for the Analog Input pin -// names and will properly recognize e.g., pinMode(A0, INPUT)); - -// HOW IT WORKS -// The interrupt on Arduino pin A4 (tPIN6) will, when triggered, start the counting of interrupts. -// The array interrupt_count0[20] is updated in the interrupts; each cell keeps track of the number -// of interrupts on one of the 20 available interrupt pins on the Arduino. Every second in the main -// loop the array is scanned and registered interrupts are reported for all pins interrupted since -// the previous second. If no interrupts, the output is quiet. - -// tPIN6 is special. Not only does it start the counting of the interrups, but it turns on and off -// interrupts on pins 2, 11, and A3/17 (tPIN1, tPIN3, tPIN5). All pins start by interrupting, but after -// the count is turned on and then turned off, the 3 pins are detached from interrupts. -// Everytime thereafter when the count is turned off the 3 pins are detached. They are reattached -// when turned on. - -// Output is copied to a buffer, because we can't do a Serial.print() statement in an interrupt -// routine. The main loop checks for entries in the buffer and prints them if found. -// Output looks like this: -// -F- - an interrupt triggered by a falling signal occurred. -// +R+ - an interrupt triggered by a rising signal occurred. -// *C* - an interrupt triggered by a change in signal occurred. -// f#p#-P# - f# shows the interrupt subroutine that was called: 0, 1, or 2 -// - p# shows the pin number that triggered the interrupt -// - P# shows the port that this pin number is attached to. 2 is PORTB, 3 is PORTC, 4 is PORTD - -// HOW TO CONNECT -// Each pin gets a momentary contact switch connected to it. One side of the switch should connect -// to ground. The other side of the switch connects to the Arduino pin. For my purposes, I am using -// two rotary encoders. Each encoder contains 3 switches. But 6 regular pushbuttons would work, too. - -/* WHAT TO LOOK FOR - Output is sent to the serial line, so the Arduino IDE's serial terminal should be opened. - Upon startup, press tPINS1-5. You will see output like this: --F-f0p2-P4 (counting off) -..*C*f0p11-P2 (counting off) -+R+f0p3-P4 (counting off) - This shows that - 1. an interrupt was triggered on a falling signal (*F*). It called (f0) function 0, which is quicfunc0. - The triggering pin was (p2) Arduuino pin 2, which is on (P4) Port 4 (PORTD). Counting of this interrupt is - off, so you will not see any output from the main loop. - 2. Two dots appeared. Dots came from iterations of loop(), so these 2 dots show that the two interrupts happened 2 seconds apart. - 3. an interrupt was triggered on a change in signal (*C*). It called quicfunc0, from Arduino pin 11, on Port 2 (PORTB). - The interrupt was not counted. - 4. an interrupt was triggered on a rising signal (+R+). It called quicfunc0, from Arduino pin 3, on Purt 4 (PORTD). - The pin should have started out at the high level, so likely the signal fell during onother interrupt, and now - the rise has been caught. - - Now press the button attached to tPIN6 (in our case, A4 or D18). You will see something like this: --F-START! f2p18-P3 -.Count for pin A4 is 1 - This shows that - 1. The counting machanism (START!) was triggered by a folling signal (-F-) on pin 18 (p18) which is in Port 3 (P3) (which == PORTC) and - function f2 was called (f2). - 2. A dot appeared, which came from loop() because a second passed. - 3. The count for p18 or A4 was displayed. - - Now you will see messages for all the pins that you manipulate, for example: -*C*f0p11-P2 -+R+f0p3-P4 -*C*f0p11-P2 -+R+f0p3-P4 -*C*f0p11-P2 -.Count for pin D3 is 6 -Count for pin D11 is 9 -.+R+f0p3-P4 --F-f0p2-P4 -.Count for pin D2 is 1 -Count for pin D3 is 1 - These codes reflect the interrupts, as described above. This output will take place until you press tPIN6: --F-f2: STOP! Counting off. -Interrupt OFF on tPIN1 (2) tPIN3 (11) tPIN5 (17) - Then you will see output like this: -.....................+R+f0p12-P2 (counting off) -.+R+f0p12-P2 (counting off) -+R+f0p12-P2 (counting off) -+R+f0p12-P2 (counting off) - and tPIN1, tPIN3, and tPIN5 will not trigger interrupts. -*/ -// NOTES -// Output overwrites: -// It's possible during moderately fast interrupts to see your print output get garbled; eg, -// +R+f0p12-P2 (+R+f0p12-P2 (counting +R+f0p12-P2 (cou+R+f0p12-P+R+f0p12 -// This is because the print of the buffer takes place inside a while loop, and it can -// be interrupted and new data inserted into the buffer at a midpoint of the buffer's text. -// Just by spinning my rotary encoders I can readily generate over 200 interrupts per second -// on a pin, which is easily fast enough to overrun Serial output at 115,200 bps. -// The lesson here? ...Interrupts are tricky, and interrupt service routines should be fast. -// Just sayin'. - -// Pins: -// We want to use pins from each of ports B, C and D. So choose wisely. Ports are shown in -// this diagram of the ATmega328P chip. PD0 means "Port D, pin 0". PC3 means "Port C, Pin 3", -// PB2 means "Port B, pin 2" and so on. The corresponding Arduino pins are in parentheses. -// So PB2 is Arduino pin D 10, for example. -/* - +-\/-+ - PC6 1| |28 PC5 (AI 5) - (D 0) PD0 2| |27 PC4 (AI 4) - (D 1) PD1 3| |26 PC3 (AI 3) - (D 2) PD2 4| |25 PC2 (AI 2) - PWM+ (D 3) PD3 5| |24 PC1 (AI 1) - (D 4) PD4 6| |23 PC0 (AI 0) - VCC 7| |22 GND - GND 8| |21 AREF - PB6 9| |20 AVCC - PB7 10| |19 PB5 (D 13) - PWM+ (D 5) PD5 11| |18 PB4 (D 12) - PWM+ (D 6) PD6 12| |17 PB3 (D 11) PWM - (D 7) PD7 13| |16 PB2 (D 10) PWM - (D 8) PB0 14| |15 PB1 (D 9) PWM - +----+ -*/ - -uint8_t pins[6]={ tPIN1, tPIN2, tPIN3, tPIN4, tPIN5, tPIN6 }; -uint8_t ports[6]={ 0, 0, 0, 0, 0, 0 }; - -uint8_t latest_interrupted_pin; -uint8_t interrupt_count[20]={0}; // 20 possible arduino pins -uint8_t port; -uint8_t mode; - -ByteBuffer printBuffer(80); -char charArray[16]; -char numBuffer[4] = { 0, 0, 0, 0 }; -uint8_t printFull=0; - -volatile boolean start=0; -volatile boolean initial=true; -long begintime=0; -long now=0; - -void uint8ToString(char *outString, uint8_t number) { - uint8_t hundreds=0; - uint8_t tens=0; - uint8_t ones=0; - - while (number >= 100 ) { - hundreds++; - number-=100; - } - while (number >= 10 ) { - tens++; - number-=10; - } - ones=number; - ones+=48; - if (hundreds > 0) { hundreds+=48; tens+=48; outString[0]=hundreds; outString[1]=tens; outString[2]=ones; outString[3]=0; } - else if (tens > 0) { tens+=48; outString[0]=tens; outString[1]=ones; outString[2]=0; } - else { outString[0]=ones; outString[1]=0; }; -} - -void showMode() { - switch (mode) { - case FALLING: - printBuffer.putString((char *) "-F-"); - break; - case RISING: - printBuffer.putString((char *) "+R+"); - break; - case CHANGE: - printBuffer.putString((char *) "*C*"); - break; - } -} - -void quicfunc0() { - latest_interrupted_pin=PCintPort::arduinoPin; - mode=PCintPort::pinmode; - showMode(); - if (start==1) { - interrupt_count[latest_interrupted_pin]++; - } - uint8ToString(numBuffer, latest_interrupted_pin); - printBuffer.putString((char *) "f0p"); printBuffer.putString(numBuffer); printBuffer.putString((char *) "-P"); - uint8ToString(numBuffer, digitalPinToPort(latest_interrupted_pin)); - printBuffer.putString(numBuffer); - if (start !=1) printBuffer.putString((char *) " (counting off)"); - printBuffer.putString((char *) "\n"); -}; - -void quicfunc1() { - latest_interrupted_pin=PCintPort::arduinoPin; - mode=PCintPort::pinmode; - showMode(); - if (start==1) { - interrupt_count[latest_interrupted_pin]++; - } - uint8ToString(numBuffer, latest_interrupted_pin); - printBuffer.putString((char *) "f1p"); printBuffer.putString(numBuffer); printBuffer.putString((char *) "-P"); - uint8ToString(numBuffer, digitalPinToPort(latest_interrupted_pin)); - printBuffer.putString(numBuffer); - if (start !=1) printBuffer.putString((char *) " (counting off)"); - printBuffer.putString((char *) "\n"); -}; - -void quicfunc2() { - latest_interrupted_pin=PCintPort::arduinoPin; - mode=PCintPort::pinmode; - showMode(); - if (start == 1) { - printBuffer.putString((char *) "f2: STOP! Counting off.\n"); - printBuffer.putString((char *) "Interrupt OFF on tPIN1 ("); uint8ToString(numBuffer, tPIN1), printBuffer.putString(numBuffer); - printBuffer.putString((char *) ") tPIN3 (");uint8ToString(numBuffer, tPIN3), printBuffer.putString(numBuffer); - printBuffer.putString((char *) ") tPIN5 (");uint8ToString(numBuffer, tPIN5), printBuffer.putString(numBuffer); - printBuffer.putString((char *) ")\n"); - PCintPort::detachInterrupt(tPIN1); PCintPort::detachInterrupt(tPIN3); PCintPort::detachInterrupt(tPIN5); - start=0; - } else { - start=1; - interrupt_count[latest_interrupted_pin]++; - printBuffer.putString((char *) "START! f2p"); - uint8ToString(numBuffer, latest_interrupted_pin); - printBuffer.putString(numBuffer); printBuffer.putString((char *) "-P"); - uint8ToString(numBuffer, digitalPinToPort(latest_interrupted_pin)); - printBuffer.putString(numBuffer); printBuffer.putString((char *) "\n"); - if (! initial) { - PCintPort::attachInterrupt(tPIN1, &quicfunc0, FALLING); - PCintPort::attachInterrupt(tPIN3, &quicfunc0, CHANGE); - PCintPort::attachInterrupt(tPIN5, &quicfunc1, CHANGE); - } else { - initial=false; - } - } -}; - -uint8_t i; -void setup() { - Serial.begin(115200); - delay(250); - Serial.println("Test"); - delay(500); - for (i=0; i < 7; i++) { - pinMode(pins[i], INPUT); digitalWrite(pins[i], HIGH); - ports[i]=digitalPinToPort(pins[i]); - switch (pins[i]) { - case tPIN1: - PCintPort::attachInterrupt(pins[i], &quicfunc0, FALLING); - break; - case tPIN3: - PCintPort::attachInterrupt(pins[i], &quicfunc0, CHANGE); - break; - case tPIN2: - case tPIN4: - PCintPort::attachInterrupt(pins[i], &quicfunc0, RISING); - break; - case tPIN5: - PCintPort::attachInterrupt(pins[i], &quicfunc1, CHANGE); - break; - case tPIN6: - PCintPort::attachInterrupt(pins[i], &quicfunc2, FALLING); - break; - } - } - //Serial.println(printBuffer.getCapacity(), DEC); - //Serial.println("*---------------------------------------*"); - Serial.print("*---*"); - delay(250); - begintime=millis(); -} - -void loop() { - now=millis(); - uint8_t count; - char outChar; - // uint8_t bufsize; - //if (printBuffer.getSize() != 0) { Serial.print("SZ:"); Serial.println (printBuffer.getSize(), DEC); }; - //bufsize=printBuffer.getSize(); - //if (bufsize > 0) { Serial.print("S:"); Serial.println(bufsize); } - while ((outChar=(char)printBuffer.get()) != 0) Serial.print(outChar); - if ((now - begintime) > 1000) { - Serial.print("."); - if (printBuffer.checkError()) { - Serial.println("NOTICE: Some output lost due to filled buffer."); - } - for (i=0; i < 20; i++) { - if (interrupt_count[i] != 0) { - count=interrupt_count[i]; - interrupt_count[i]=0; - Serial.print("Count for pin "); - if (i < 14) { - Serial.print("D"); - Serial.print(i, DEC); - } else { - Serial.print("A"); - Serial.print(i-14, DEC); - } - Serial.print(" is "); - Serial.println(count, DEC); - } - } - begintime=millis(); - } -} - diff --git a/libraries/PinChangeInt/Examples/PinChangeIntTest2/PinChangeIntTest2.ino b/libraries/PinChangeInt/Examples/PinChangeIntTest2/PinChangeIntTest2.ino deleted file mode 100644 index aec34c4..0000000 --- a/libraries/PinChangeInt/Examples/PinChangeIntTest2/PinChangeIntTest2.ino +++ /dev/null @@ -1,275 +0,0 @@ -//#define DISABLE_PCINT_MULTI_SERVICE -#define PINMODE -#define FLASH -#include -#include -#include - -// This example demonstrates a configuration of 6 interrupting pins and 3 interrupt functions. -// A variety of interrupting pins have been chosen, so as to test all PORTs on the Arduino. -// The pins are as follows: -#define tPIN1 2 // port D -#define tPIN2 3 -#define tPIN3 11 // Port B -#define tPIN4 12 -#define tPIN5 A3 // Port C, also can be given as "17" -#define tPIN6 A4 // starts and stops the count - -uint8_t pins[6]={ tPIN1, tPIN2, tPIN3, tPIN4, tPIN5, tPIN6 }; -uint8_t ports[6]={ 0, 0, 0, 0, 0, 0 }; - -uint8_t latest_interrupted_pin; -uint8_t interrupt_count[20]={0}; // 20 possible arduino pins -uint8_t port; -uint8_t mode; - -ByteBuffer printBuffer(200); -char charArray[16]; -char numBuffer[5] = { 0, 0, 0, 0, 0 }; -uint8_t printFull=0; - -volatile boolean start=0; -volatile boolean initial=true; -long begintime=0; -long now=0; - -void uint8ToHexString(char *outString, uint8_t theByte) { - outString[0]='0'; outString[1]='x'; - uint8_t hinybble=theByte>>4; - uint8_t lonybble=theByte & 0x0F; - if (hinybble < 0x0a) outString[2]=hinybble+48; - else outString[2]=hinybble+55; - if (lonybble < 0x0a) outString[3]=lonybble+48; - else outString[3]=lonybble+55; - outString[4]=0; -} - -void uint8ToString(char *outString, uint8_t number) { - uint8_t hundreds=0; - uint8_t tens=0; - uint8_t ones=0; - - while (number >= 100 ) { - hundreds++; - number-=100; - } - while (number >= 10 ) { - tens++; - number-=10; - } - ones=number; - ones+=48; - if (hundreds > 0) { hundreds+=48; tens+=48; outString[0]=hundreds; outString[1]=tens; outString[2]=ones; outString[3]=0; } - else if (tens > 0) { tens+=48; outString[0]=tens; outString[1]=ones; outString[2]=0; } - else { outString[0]=ones; outString[1]=0; }; -} - -void showMode() { - switch (mode) { - case FALLING: - printBuffer.putString(getPSTR("-F-")); - break; - case RISING: - printBuffer.putString(getPSTR("+R+")); - break; - case CHANGE: - printBuffer.putString(getPSTR("*C*")); - break; - } -} - -/* -void quicfunc0() { - latest_interrupted_pin=PCintPort::arduinoPin; - mode=PCintPort::pinmode; - showMode(); - if (start==1) { - interrupt_count[latest_interrupted_pin]++; - } - uint8ToString(numBuffer, latest_interrupted_pin); - printBuffer.putString((char *) "f0p"); printBuffer.putString(numBuffer); printBuffer.putString((char *) "-P"); - uint8ToString(numBuffer, digitalPinToPort(latest_interrupted_pin)); - printBuffer.putString(numBuffer); - if (start !=1) printBuffer.putString(getPSTR(" no count")); - printBuffer.putString((char *) "\n"); -}; - -void quicfunc1() { - latest_interrupted_pin=PCintPort::arduinoPin; - mode=PCintPort::pinmode; - showMode(); - if (start==1) { - interrupt_count[latest_interrupted_pin]++; - } - uint8ToString(numBuffer, latest_interrupted_pin); - printBuffer.putString(getPSTR("f1p")); printBuffer.putString(numBuffer); printBuffer.putString((char *) "-P"); - uint8ToString(numBuffer, digitalPinToPort(latest_interrupted_pin)); - printBuffer.putString(numBuffer); - if (start !=1) printBuffer.putString(getPSTR(" (counting off)")); - printBuffer.putString((char *) "\n"); -}; -*/ - -void quicfunc2() { - //*led_port|=led_mask; - //*led_port&=not_led_mask; // 2 micros to here (ie, 2 micros used to push registers and call subroutine) - latest_interrupted_pin=PCintPort::arduinoPin; - mode=PCintPort::pinmode; - showMode(); - *led_port|=led_mask; // 73 micros to get here from above. Used in "Rigol Timing Example" - *led_port&=not_led_mask; - //uint8ToString(numBuffer, PCintPort::s_count); printBuffer.putString(numBuffer); - *led_port|=led_mask; // 73 micros to get here from above. Second pulse in "Rigol Timing Example" - *led_port&=not_led_mask; - printBuffer.putString(getPSTR(" f2: P"));/* - uint8ToHexString(numBuffer, *portInputRegister(3)); printBuffer.putString(numBuffer);// C port - printBuffer.putString(getPSTR(" pin:")); uint8ToString(numBuffer, latest_interrupted_pin); printBuffer.putString(numBuffer); - printBuffer.putString(getPSTR(" c")); uint8ToHexString(numBuffer, PCintPort::curr); printBuffer.putString(numBuffer); - printBuffer.putString(getPSTR(" l")); uint8ToHexString(numBuffer, PCintPort::s_lastPinView); printBuffer.putString(numBuffer); - printBuffer.putString(getPSTR(" r")); uint8ToHexString(numBuffer, PCintPort::s_portRisingPins); printBuffer.putString(numBuffer); - printBuffer.putString(getPSTR(" f")); uint8ToHexString(numBuffer, PCintPort::s_portFallingPins); printBuffer.putString(numBuffer); - printBuffer.putString(getPSTR(" m")); uint8ToHexString(numBuffer, PCintPort::s_pmask); printBuffer.putString(numBuffer); - printBuffer.putString(getPSTR(" P")); printBuffer.put(PCintPort::s_PORT); printBuffer.putString("\r\n"); - printBuffer.putString(getPSTR("cp")); uint8ToHexString(numBuffer, PCintPort::s_changedPins); printBuffer.putString(numBuffer); - printBuffer.putString(getPSTR(" cXORlpv")); uint8ToHexString(numBuffer, PCintPort::s_currXORlastPinView); printBuffer.putString(numBuffer); - printBuffer.putString(getPSTR(" rp_nCurr")); uint8ToHexString(numBuffer, PCintPort::s_portRisingPins_nCurr); printBuffer.putString(numBuffer); - printBuffer.putString(getPSTR(" fp_nNCurr")); uint8ToHexString(numBuffer, PCintPort::s_portFallingPins_nNCurr); printBuffer.putString(numBuffer); - */printBuffer.putString("\r\n"); - if (PCintPort::pcint_multi > 0) { - printBuffer.putString("MULTI!\n"); PCintPort::pcint_multi=0; - } - if (PCintPort::PCIFRbug > 0) { printBuffer.putString("ERROR: BUG- PCIFR should be reset!"); PCintPort::PCIFRbug=0; } - //s_registers, if it existed, could be used to keep a running queue of the latest interrupts that have - //been serviced by the PCint(). But generally I don't think it's necessary for debugging at this point (famous last words?) - /*if (PCintPort::s_count > 2) { - for (uint8_t i=0; i < PCintPort::s_count; i++) { - uint8ToHexString(numBuffer, PCintPort::s_registers[i]); printBuffer.putString(numBuffer); printBuffer.putString(" "); - } - } - PCintPort::s_count=0;*/ - /* - if (start == 1) { - printBuffer.putString(getPSTR("STOP Count off\n")); - printBuffer.putString(getPSTR("Intr OFF: (")); uint8ToString(numBuffer, tPIN1), printBuffer.putString(numBuffer); - printBuffer.putString((char *) " "); uint8ToString(numBuffer, tPIN3), printBuffer.putString(numBuffer); - printBuffer.putString((char *) " "); uint8ToString(numBuffer, tPIN5), printBuffer.putString(numBuffer); - printBuffer.putString((char *) ")\n"); - PCintPort::detachInterrupt(tPIN1); PCintPort::detachInterrupt(tPIN3); PCintPort::detachInterrupt(tPIN5); - start=0; - } else { - start=1; - interrupt_count[latest_interrupted_pin]++; - printBuffer.putString(getPSTR("START! p")); - uint8ToString(numBuffer, latest_interrupted_pin); - printBuffer.putString(numBuffer); printBuffer.putString((char *) "-P"); - // MIKE put the REAL PORT HERE - uint8ToString(numBuffer, digitalPinToPort(latest_interrupted_pin)); - printBuffer.putString(numBuffer); printBuffer.putString((char *) "\n"); - if (! initial) { - PCintPort::attachInterrupt(tPIN1, &quicfunc0, FALLING); - PCintPort::attachInterrupt(tPIN3, &quicfunc0, CHANGE); - PCintPort::attachInterrupt(tPIN5, &quicfunc1, CHANGE); - } else { - initial=false; - } - }*/ -}; - -uint8_t i; -char hexBuffer[5]; -void setup() { - int8_t returncode=1; - Serial.begin(115200); - Serial.println("Test"); - delay(500); - for (i=5; i < 6; i++) { - pinMode(pins[i], INPUT); digitalWrite(pins[i], HIGH); - ports[i]=digitalPinToPort(pins[i]); - switch (pins[i]) { - /*case tPIN1: - #if PCINT_VERSION > 2100 - returncode=PCintPort::attachInterrupt(pins[i], &quicfunc0, FALLING); - #else - PCintPort::attachInterrupt(pins[i], &quicfunc0, FALLING); - #endif - Serial.println(getPSTR("FIRST FAILURE OK.")); - break; - case tPIN3: - #if PCINT_VERSION > 2100 - returncode=PCintPort::attachInterrupt(pins[i], &quicfunc0, CHANGE); - #else - PCintPort::attachInterrupt(pins[i], &quicfunc0, CHANGE); - #endif - break; - case tPIN2: - case tPIN4: - #if PCINT_VERSION > 2100 - returncode=PCintPort::attachInterrupt(pins[i], &quicfunc0, RISING); - #else - PCintPort::attachInterrupt(pins[i], &quicfunc0, RISING); - #endif - break; - case tPIN5: - #if PCINT_VERSION > 2100 - returncode=PCintPort::attachInterrupt(pins[i], &quicfunc1, CHANGE); - #else - PCintPort::attachInterrupt(pins[i], &quicfunc1, CHANGE); - #endif - break;*/ - case tPIN6: - #if PCINT_VERSION > 2100 - returncode=PCintPort::attachInterrupt(pins[i], &quicfunc2, FALLING); - #else - PCintPort::attachInterrupt(pins[i], &quicfunc2, FALLING); - #endif - break; - } - #if PCINT_VERSION > 2100 - Serial.print(getPSTR("setup(): Interrupt attach ")); - if (returncode != 1) Serial.print(getPSTR("unsuccessful ")); - else Serial.print(getPSTR("GOOD ")); - Serial.print(pins[i], DEC); - Serial.print(getPSTR(":pin, code: ")); Serial.println(returncode, DEC); - #endif - } - //Serial.println(printBuffer.getCapacity(), DEC); - //Serial.println("*---------------------------------------*"); - Serial.print("*---*"); - delay(250); - begintime=millis(); -} - -void loop() { - now=millis(); - uint8_t count; - char outChar; - // uint8_t bufsize; - //if (printBuffer.getSize() != 0) { Serial.print("SZ:"); Serial.println (printBuffer.getSize(), DEC); }; - //bufsize=printBuffer.getSize(); - //if (bufsize > 0) { Serial.print("S:"); Serial.println(bufsize); } - while ((outChar=(char)printBuffer.get()) != 0) Serial.print(outChar); - if ((now - begintime) > 1000) { - Serial.print("."); - if (printBuffer.checkError()) { - Serial.println(getPSTR("!Some output lost due to full buffer!")); - } - for (i=0; i < 20; i++) { - if (interrupt_count[i] != 0) { - count=interrupt_count[i]; - interrupt_count[i]=0; - Serial.print(getPSTR("Count for pin ")); - if (i < 14) { - Serial.print("D"); - Serial.print(i, DEC); - } else { - Serial.print("A"); - Serial.print(i-14, DEC); - } - Serial.print(" is "); - Serial.println(count, DEC); - } - } - begintime=millis(); - } -} - diff --git a/libraries/PinChangeInt/PinChangeInt.h b/libraries/PinChangeInt/PinChangeInt.h deleted file mode 100644 index 6ccd1df..0000000 --- a/libraries/PinChangeInt/PinChangeInt.h +++ /dev/null @@ -1,624 +0,0 @@ -// We use 4-character tabstops, so IN VIM: :set ts=4 and :set sw=4 -// ...that's: ESCAPE key, colon key, then "s-e-t SPACE key t-s-=-4" -// -/* - * This is the PinChangeInt library for the Arduino. - - See google code project for latest, bugs and info http://code.google.com/p/arduino-pinchangeint/ - For more information Refer to avr-gcc header files, arduino source and atmega datasheet. - - This library was inspired by and derived from "johnboiles" (it seems) - PCInt Arduino Playground example here: http://www.arduino.cc/playground/Main/PcInt - If you are the original author, please let us know at the google code page - - It provides an extension to the interrupt support for arduino by - adding pin change interrupts, giving a way for users to have - interrupts drive off of any pin. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - (the file gpl.txt is included with the library's zip package) -*/ -//-------- define these in your sketch, if applicable ---------------------------------------------------------- -//-------- These must go in your sketch ahead of the #include statement ----------------------- -// You can reduce the memory footprint of this handler by declaring that there will be no pin change interrupts -// on any one or two of the three ports. If only a single port remains, the handler will be declared inline -// reducing the size and latency of the handler. -// #define NO_PORTB_PINCHANGES // to indicate that port b will not be used for pin change interrupts -// #define NO_PORTC_PINCHANGES // to indicate that port c will not be used for pin change interrupts -// #define NO_PORTD_PINCHANGES // to indicate that port d will not be used for pin change interrupts -// --- Mega support --- -// #define NO_PORTB_PINCHANGES // to indicate that port b will not be used for pin change interrupts -// #define NO_PORTJ_PINCHANGES // to indicate that port c will not be used for pin change interrupts -// #define NO_PORTK_PINCHANGES // to indicate that port d will not be used for pin change interrupts -// In the Mega, there is no Port C, no Port D. Instead, you get Port J and Port K. Port B remains. -// Port J, however, is practically useless because there is only 1 pin available for interrupts. Most -// of the Port J pins are not even connected to a header connection. // "Mega Support" notes -// --- Sanguino, Mioduino support --- -// #define NO_PORTA_PINCHANGES // to indicate that port a will not be used for pin change interrupts -// -------------------- -// -// Other preprocessor directives... -// You can reduce the code size by 20-50 bytes, and you can speed up the interrupt routine -// slightly by declaring that you don't care if the static variables PCintPort::pinState and/or -// PCintPort::arduinoPin are set and made available to your interrupt routine. -// #define NO_PIN_STATE // to indicate that you don't need the pinState -// #define NO_PIN_NUMBER // to indicate that you don't need the arduinoPin -// #define DISABLE_PCINT_MULTI_SERVICE // to limit the handler to servicing a single interrupt per invocation. -// #define GET_PCINT_VERSION // to enable the uint16_t getPCIintVersion () function. -// The following is intended for testing purposes. If defined, then a whole host of static variables can be read -// in your interrupt subroutine. It is not defined by default, and you DO NOT want to define this in -// Production code!: -// #define PINMODE -//-------- define the above in your sketch, if applicable ------------------------------------------------------ - -/* - PinChangeInt.h - ---- VERSIONS --- (NOTE TO SELF: Update the PCINT_VERSION define, below) ----------------- -Version 2.19 (beta) Tue Nov 20 07:33:37 CST 2012 -Version 2.17 (beta) Sat Nov 17 09:46:50 CST 2012 -Version 2.11 (beta) Mon Nov 12 09:33:06 CST 2012 - - Version 2.01 (beta) Thu Jun 28 12:35:48 CDT 2012 - - Version 1.72 Wed Mar 14 18:57:55 CDT 2012 - - Version 1.71beta Sat Mar 10 12:57:05 CST 2012 - - Version 1.6beta Fri Feb 10 08:48:35 CST 2012 - - Version 1.51 Sun Feb 5 23:28:02 CST 2012 - - Version 1.5 Thu Feb 2 18:09:49 CST 2012 - - Version 1.4 Tue Jan 10 09:41:14 CST 2012 - - Version 1.3 Sat Dec 3 22:56:20 CST 2011 - - Version 1.2 Sat Dec 3 Sat Dec 3 09:15:52 CST 2011 - - Version 1.1 Sat Dec 3 00:06:03 CST 2011 - */ - -#ifndef PinChangeInt_h -#define PinChangeInt_h - -#define PCINT_VERSION 2190 // This number MUST agree with the version number, above. - -#include "stddef.h" - -// Thanks to Maurice Beelen, nms277, Akesson Karlpetter, and Orly Andico for these fixes. -#if defined(ARDUINO) && ARDUINO >= 100 - #include - #include - #include // cby and sbi defined here -#else - #include - #include - #ifndef LIBCALL_PINCHANGEINT - #include "../cppfix/cppfix.h" - #endif -#endif - - -#undef DEBUG - -/* -* Theory: all IO pins on Atmega168 are covered by Pin Change Interrupts. -* The PCINT corresponding to the pin must be enabled and masked, and -* an ISR routine provided. Since PCINTs are per port, not per pin, the ISR -* must use some logic to actually implement a per-pin interrupt service. -*/ - -/* Pin to interrupt map: -* D0-D7 = PCINT 16-23 = PCIR2 = PD = PCIE2 = pcmsk2 -* D8-D13 = PCINT 0-5 = PCIR0 = PB = PCIE0 = pcmsk0 -* A0-A5 (D14-D19) = PCINT 8-13 = PCIR1 = PC = PCIE1 = pcmsk1 -*/ - -#undef INLINE_PCINT -#define INLINE_PCINT -// Thanks to cserveny...@gmail.com for MEGA support! -#if defined __AVR_ATmega2560__ || defined __AVR_ATmega1280__ || defined __AVR_ATmega1281__ || defined __AVR_ATmega2561__ || defined __AVR_ATmega640__ - #define __USE_PORT_JK - // Mega does not have PORTA, C or D - #define NO_PORTA_PINCHANGES - #define NO_PORTC_PINCHANGES - #define NO_PORTD_PINCHANGES - #if ((defined(NO_PORTB_PINCHANGES) && defined(NO_PORTJ_PINCHANGES)) || \ - (defined(NO_PORTJ_PINCHANGES) && defined(NO_PORTK_PINCHANGES)) || \ - (defined(NO_PORTK_PINCHANGES) && defined(NO_PORTB_PINCHANGES))) - #define INLINE_PCINT inline - #endif -#else - #if defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644__) - #ifndef NO_PORTA_PINCHANGES - #define __USE_PORT_A - #endif - #else - #define NO_PORTA_PINCHANGES - #endif - // if defined only D .OR. only C .OR. only B .OR. only A, then inline it - #if ( (defined(NO_PORTA_PINCHANGES) && defined(NO_PORTB_PINCHANGES) && defined(NO_PORTC_PINCHANGES)) || \ - (defined(NO_PORTA_PINCHANGES) && defined(NO_PORTB_PINCHANGES) && defined(NO_PORTD_PINCHANGES)) || \ - (defined(NO_PORTA_PINCHANGES) && defined(NO_PORTC_PINCHANGES) && defined(NO_PORTD_PINCHANGES)) || \ - (defined(NO_PORTB_PINCHANGES) && defined(NO_PORTC_PINCHANGES) && defined(NO_PORTD_PINCHANGES)) ) - #define INLINE_PCINT inline - #endif -#endif - -// Provide drop in compatibility with johnboiles PCInt project at -// http://www.arduino.cc/playground/Main/PcInt -#define PCdetachInterrupt(pin) PCintPort::detachInterrupt(pin) -#define PCattachInterrupt(pin,userFunc,mode) PCintPort::attachInterrupt(pin, userFunc,mode) -#define PCgetArduinoPin() PCintPort::getArduinoPin() - - -typedef void (*PCIntvoidFuncPtr)(void); - -class PCintPort { -public: - PCintPort(int index,int pcindex, volatile uint8_t& maskReg) : - portInputReg(*portInputRegister(index)), - portPCMask(maskReg), - PCICRbit(1 << pcindex), - portRisingPins(0), - portFallingPins(0), - firstPin(NULL) -#ifdef PINMODE - ,intrCount(0) -#endif - { - #ifdef FLASH - ledsetup(); - #endif - } - volatile uint8_t& portInputReg; - static int8_t attachInterrupt(uint8_t pin, PCIntvoidFuncPtr userFunc, int mode); - static void detachInterrupt(uint8_t pin); - INLINE_PCINT void PCint(); - static volatile uint8_t curr; - #ifndef NO_PIN_NUMBER - static volatile uint8_t arduinoPin; - #endif - #ifndef NO_PIN_STATE - static volatile uint8_t pinState; - #endif - #ifdef PINMODE - static volatile uint8_t pinmode; - static volatile uint8_t s_portRisingPins; - static volatile uint8_t s_portFallingPins; - static volatile uint8_t s_lastPinView; - static volatile uint8_t s_pmask; - static volatile char s_PORT; - static volatile uint8_t s_changedPins; - static volatile uint8_t s_portRisingPins_nCurr; - static volatile uint8_t s_portFallingPins_nNCurr; - static volatile uint8_t s_currXORlastPinView; - volatile uint8_t intrCount; - static volatile uint8_t s_count; - static volatile uint8_t pcint_multi; - static volatile uint8_t PCIFRbug; - #endif - #ifdef FLASH - static void ledsetup(void); - #endif - -protected: - class PCintPin { - public: - PCintPin() : - PCintFunc((PCIntvoidFuncPtr)NULL), - mode(0) {} - PCIntvoidFuncPtr PCintFunc; - uint8_t mode; - uint8_t mask; - uint8_t arduinoPin; - PCintPin* next; - }; - void enable(PCintPin* pin, PCIntvoidFuncPtr userFunc, uint8_t mode); - int8_t addPin(uint8_t arduinoPin,PCIntvoidFuncPtr userFunc, uint8_t mode); - volatile uint8_t& portPCMask; - const uint8_t PCICRbit; - volatile uint8_t portRisingPins; - volatile uint8_t portFallingPins; - volatile uint8_t lastPinView; - PCintPin* firstPin; - PCintPin thePin; -}; - -#ifndef LIBCALL_PINCHANGEINT // LIBCALL_PINCHANGEINT *********************************************** -volatile uint8_t PCintPort::curr=0; -#ifndef NO_PIN_NUMBER -volatile uint8_t PCintPort::arduinoPin=0; -#endif -#ifndef NO_PIN_STATE -volatile uint8_t PCintPort::pinState=0; -#endif -#ifdef PINMODE -volatile uint8_t PCintPort::pinmode=0; -volatile uint8_t PCintPort::s_portRisingPins=0; -volatile uint8_t PCintPort::s_portFallingPins=0; -volatile uint8_t PCintPort::s_lastPinView=0; -volatile uint8_t PCintPort::s_pmask=0; -volatile char PCintPort::s_PORT='x'; -volatile uint8_t PCintPort::s_changedPins=0; -volatile uint8_t PCintPort::s_portRisingPins_nCurr=0; -volatile uint8_t PCintPort::s_portFallingPins_nNCurr=0; -volatile uint8_t PCintPort::s_currXORlastPinView=0; -volatile uint8_t PCintPort::s_count=0; -volatile uint8_t PCintPort::pcint_multi=0; -volatile uint8_t PCintPort::PCIFRbug=0; -#endif - -#ifdef FLASH -#define PINLED 13 -volatile uint8_t *led_port; -uint8_t led_mask; -uint8_t not_led_mask; -boolean ledsetup_run=false; -void PCintPort::ledsetup(void) { - if (! ledsetup_run) { - led_port=portOutputRegister(digitalPinToPort(PINLED)); - led_mask=digitalPinToBitMask(PINLED); - not_led_mask=led_mask^0xFF; - pinMode(PINLED, OUTPUT); digitalWrite(PINLED, LOW); - ledsetup_run=true; - } -}; -#endif - - -// ATMEGA 644 -// -#if defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644__) // Sanguino, Mosquino uino bobino bonanafannafofino, me my momino... - -#ifndef NO_PORTA_PINCHANGES -PCintPort portA=PCintPort(1, 0,PCMSK0); // port PB==2 (from Arduino.h, Arduino version 1.0) -#endif -#ifndef NO_PORTB_PINCHANGES -PCintPort portB=PCintPort(2, 1,PCMSK1); // port PB==2 (from Arduino.h, Arduino version 1.0) -#endif -#ifndef NO_PORTC_PINCHANGES -PCintPort portC=PCintPort(3, 2,PCMSK2); // port PC==3 (also in pins_arduino.c, Arduino version 022) -#endif -#ifndef NO_PORTD_PINCHANGES -PCintPort portD=PCintPort(4, 3,PCMSK3); // port PD==4 -#endif - -#else // others - -#ifndef NO_PORTB_PINCHANGES -PCintPort portB=PCintPort(2, 0,PCMSK0); // port PB==2 (from Arduino.h, Arduino version 1.0) -#endif -#ifndef NO_PORTC_PINCHANGES // note: no PORTC on MEGA -PCintPort portC=PCintPort(3, 1,PCMSK1); // port PC==3 (also in pins_arduino.c, Arduino version 022) -#endif -#ifndef NO_PORTD_PINCHANGES // note: no PORTD on MEGA -PCintPort portD=PCintPort(4, 2,PCMSK2); // port PD==4 -#endif - -#endif // defined __AVR_ATmega644__ - -#ifdef __USE_PORT_JK -#ifndef NO_PORTJ_PINCHANGES -PCintPort portJ=PCintPort(10,1,PCMSK1); // port PJ==10 -#endif -#ifndef NO_PORTK_PINCHANGES -PCintPort portK=PCintPort(11,2,PCMSK2); // port PK==11 -#endif -#endif // USE_PORT_JK - -static PCintPort *lookupPortNumToPort( int portNum ) { - PCintPort *port = NULL; - - switch (portNum) { -#ifndef NO_PORTA_PINCHANGES - case 1: - port=&portA; - break; -#endif -#ifndef NO_PORTB_PINCHANGES - case 2: - port=&portB; - break; -#endif -#ifndef NO_PORTC_PINCHANGES - case 3: - port=&portC; - break; -#endif -#ifndef NO_PORTD_PINCHANGES - case 4: - port=&portD; - break; -#endif -#ifdef __USE_PORT_JK - -#ifndef NO_PORTJ_PINCHANGES - case 10: - port=&portJ; - break; -#endif - -#ifndef NO_PORTK_PINCHANGES - case 11: - port=&portK; - break; -#endif - -#endif - } - - return port; -} - - -void PCintPort::enable(PCintPin* p, PCIntvoidFuncPtr userFunc, uint8_t mode) { - // Enable the pin for interrupts by adding to the PCMSKx register. - // ...The final steps; at this point the interrupt is enabled on this pin. - p->mode=mode; - p->PCintFunc=userFunc; - portPCMask |= p->mask; - if ((p->mode == RISING) || (p->mode == CHANGE)) portRisingPins |= p->mask; - if ((p->mode == FALLING) || (p->mode == CHANGE)) portFallingPins |= p->mask; - PCICR |= PCICRbit; -} - -int8_t PCintPort::addPin(uint8_t arduinoPin, PCIntvoidFuncPtr userFunc, uint8_t mode) -{ - PCintPin* tmp; - - // Add to linked list, starting with firstPin. If pin already exists, just enable. - if (firstPin != NULL) { - tmp=firstPin; - do { - if (tmp->arduinoPin == arduinoPin) { enable(tmp, userFunc, mode); return(0); } - if (tmp->next == NULL) break; - tmp=tmp->next; - } while (true); - } - - // Create pin p: fill in the data. NOTE: MySensors only support one pin due to size constraints - // TODO: Figure out a better way to solve this without relying on new/malloc - PCintPin* p = &thePin; //PCintPin* p=new PCintPin; - if (p == NULL) return(-1); - p->arduinoPin=arduinoPin; - p->mode = mode; - p->next=NULL; - p->mask = digitalPinToBitMask(arduinoPin); // the mask - - if (firstPin == NULL) firstPin=p; - else tmp->next=p; - -#ifdef DEBUG - Serial.print("addPin. pin given: "); Serial.print(arduinoPin, DEC); - int addr = (int) p; - Serial.print(" instance addr: "); Serial.println(addr, HEX); - Serial.print("userFunc addr: "); Serial.println((int)p->PCintFunc, HEX); -#endif - - enable(p, userFunc, mode); -#ifdef DEBUG - Serial.print("addPin. pin given: "); Serial.print(arduinoPin, DEC), Serial.print (" pin stored: "); - int addr = (int) p; - Serial.print(" instance addr: "); Serial.println(addr, HEX); -#endif - return(1); -} - -/* - * attach an interrupt to a specific pin using pin change interrupts. - */ -int8_t PCintPort::attachInterrupt(uint8_t arduinoPin, PCIntvoidFuncPtr userFunc, int mode) -{ - PCintPort *port; - uint8_t portNum = digitalPinToPort(arduinoPin); - if ((portNum == NOT_A_PORT) || (userFunc == NULL)) return(-1); - - port=lookupPortNumToPort(portNum); - // Added by GreyGnome... must set the initial value of lastPinView for it to be correct on the 1st interrupt. - // ...but even then, how do you define "correct"? Ultimately, the user must specify (not provisioned for yet). - port->lastPinView=port->portInputReg; - -#ifdef DEBUG - Serial.print("attachInterrupt FUNC: "); Serial.println(arduinoPin, DEC); -#endif - // map pin to PCIR register - return(port->addPin(arduinoPin,userFunc,mode)); -} - -void PCintPort::detachInterrupt(uint8_t arduinoPin) -{ - PCintPort *port; - PCintPin* current; - uint8_t mask; -#ifdef DEBUG - Serial.print("detachInterrupt: "); Serial.println(arduinoPin, DEC); -#endif - uint8_t portNum = digitalPinToPort(arduinoPin); - if (portNum == NOT_A_PORT) return; - port=lookupPortNumToPort(portNum); - mask=digitalPinToBitMask(arduinoPin); - current=port->firstPin; - //PCintPin* prev=NULL; - while (current) { - if (current->mask == mask) { // found the target - uint8_t oldSREG = SREG; - cli(); // disable interrupts - port->portPCMask &= ~mask; // disable the mask entry. - if (port->portPCMask == 0) PCICR &= ~(port->PCICRbit); - port->portRisingPins &= ~current->mask; port->portFallingPins &= ~current->mask; - // Link the previous' next to the found next. Then remove the found. - //if (prev != NULL) prev->next=current->next; // linked list skips over current. - //else firstPin=current->next; // at the first pin; save the new first pin - SREG = oldSREG; // Restore register; reenables interrupts - return; - } - //prev=current; - current=current->next; - } -} - -// common code for isr handler. "port" is the PCINT number. -// there isn't really a good way to back-map ports and masks to pins. -void PCintPort::PCint() { - uint8_t thisChangedPin; //MIKE - (void)thisChangedPin; - - #ifdef FLASH - if (*led_port & led_mask) *led_port&=not_led_mask; - else *led_port|=led_mask; - #endif - #ifndef DISABLE_PCINT_MULTI_SERVICE - uint8_t pcifr; - while (true) { - #endif - // get the pin states for the indicated port. - #ifdef PINMODE - PCintPort::s_lastPinView=lastPinView; - intrCount++; - PCintPort::s_count=intrCount; - #endif - // OLD v. 2.01 technique: Test 1: 3163; Test 7: 3993 - // From robtillaart online: ------------ (starting v. 2.11beta) - // uint8_t changedPins = PCintPort::curr ^ lastPinView; - // lastPinView = PCintPort::curr; - // uint8_t fastMask = changedPins & ((portRisingPins & PCintPort::curr ) | ( portFallingPins & ~PCintPort::curr )); - // NEW v. 2.11 technique: Test 1: 3270 Test 7: 3987 - // ------------------------------------- - // was: uint8_t changedPins = PCintPort::curr ^ lastPinView; - // makes test 6 of the PinChangeIntSpeedTest go from 3867 to 3923. Not good. - uint8_t changedPins = (PCintPort::curr ^ lastPinView) & - ((portRisingPins & PCintPort::curr ) | ( portFallingPins & ~PCintPort::curr )); - - #ifdef PINMODE - PCintPort::s_currXORlastPinView=PCintPort::curr ^ lastPinView; - PCintPort::s_portRisingPins_nCurr=portRisingPins & PCintPort::curr; - PCintPort::s_portFallingPins_nNCurr=portFallingPins & ~PCintPort::curr; - #endif - lastPinView = PCintPort::curr; - - PCintPin* p = firstPin; - while (p) { - // Trigger interrupt if the bit is high and it's set to trigger on mode RISING or CHANGE - // Trigger interrupt if the bit is low and it's set to trigger on mode FALLING or CHANGE - thisChangedPin=p->mask & changedPins; // PinChangeIntSpeedTest makes this 3673... weird. But GOOD!!! - if (p->mask & changedPins) { - #ifndef NO_PIN_STATE - PCintPort::pinState=PCintPort::curr & p->mask ? HIGH : LOW; - #endif - #ifndef NO_PIN_NUMBER - PCintPort::arduinoPin=p->arduinoPin; - #endif - #ifdef PINMODE - PCintPort::pinmode=p->mode; - PCintPort::s_portRisingPins=portRisingPins; - PCintPort::s_portFallingPins=portFallingPins; - PCintPort::s_pmask=p->mask; - PCintPort::s_changedPins=changedPins; - #endif - p->PCintFunc(); - } - p=p->next; - } - #ifndef DISABLE_PCINT_MULTI_SERVICE - pcifr = PCIFR & PCICRbit; - if (pcifr == 0) break; - PCIFR |= PCICRbit; - #ifdef PINMODE - PCintPort::pcint_multi++; - if (PCIFR & PCICRbit) PCintPort::PCIFRbug=1; // PCIFR & PCICRbit should ALWAYS be 0 here! - #endif - PCintPort::curr=portInputReg; - } - #endif -} - -#ifndef NO_PORTA_PINCHANGES -ISR(PCINT0_vect) { - #ifdef PINMODE - PCintPort::s_PORT='A'; - #endif - PCintPort::curr = portA.portInputReg; - portA.PCint(); -} -#define PORTBVECT PCINT1_vect -#define PORTCVECT PCINT2_vect -#define PORTDVECT PCINT3_vect -#else -#define PORTBVECT PCINT0_vect -#define PORTCVECT PCINT1_vect -#define PORTDVECT PCINT2_vect -#endif - -#ifndef NO_PORTB_PINCHANGES -ISR(PORTBVECT) { - #ifdef PINMODE - PCintPort::s_PORT='B'; - #endif - PCintPort::curr = portB.portInputReg; - portB.PCint(); -} -#endif - -#ifndef NO_PORTC_PINCHANGES -ISR(PORTCVECT) { - #ifdef PINMODE - PCintPort::s_PORT='C'; - #endif - PCintPort::curr = portC.portInputReg; - portC.PCint(); -} -#endif - -#ifndef NO_PORTD_PINCHANGES -ISR(PORTDVECT){ - #ifdef PINMODE - PCintPort::s_PORT='D'; - #endif - PCintPort::curr = portD.portInputReg; - portD.PCint(); -} -#endif - -#ifdef __USE_PORT_JK -#ifndef NO_PORTJ_PINCHANGES -ISR(PCINT1_vect) { - #ifdef PINMODE - PCintPort::s_PORT='J'; - #endif - PCintPort::curr = portJ.portInputReg; - portJ.PCint(); -} -#endif - -#ifndef NO_PORTK_PINCHANGES -ISR(PCINT2_vect){ - #ifdef PINMODE - PCintPort::s_PORT='K'; - #endif - PCintPort::curr = portK.portInputReg; - portK.PCint(); -} -#endif - -#endif // __USE_PORT_JK - -#ifdef GET_PCINT_VERSION -uint16_t getPCIntVersion () { - return ((uint16_t) PCINT_VERSION); -} -#endif // GET_PCINT_VERSION -#endif // #ifndef LIBCALL_PINCHANGEINT ************************************************************* -#endif // #ifndef PinChangeInt_h ******************************************************************* diff --git a/libraries/PinChangeInt/RELEASE_NOTES b/libraries/PinChangeInt/RELEASE_NOTES deleted file mode 100644 index 635e4f8..0000000 --- a/libraries/PinChangeInt/RELEASE_NOTES +++ /dev/null @@ -1,332 +0,0 @@ -****************************************************************************** - - PinChangeInt - ---- RELEASE NOTES --- - -Version 2.19 (beta) Tue Nov 20 07:33:37 CST 2012 -SANGUINO SUPPORT! ...And Mioduino! -...The ATmega644 chip is so cool, how can I not? 4 full ports of Pin Change Interrupt bliss! 32 i/o pins! 64k Flash! 4k RAM! Well I wish I had one. That said, Sanguino users, PLEASE send in your bug or bliss reports! Your interrupt-loving brethren and sistren are depending on you, so I can assure everyone that my changes work on that platform. Thanks. - -Modified the addPin() method to save 12 bytes; thanks again robtilllart! - if (firstPin != NULL) { - tmp=firstPin; - do { - if (tmp->arduinoPin == arduinoPin) { enable(tmp, userFunc, mode); return(0); } - if (tmp->next == NULL) break; - tmp=tmp->next; - } while (true); - } -Also changed the goto in the PCint() loop to be a while/break combination. No change to -code speed, but it looks better and passes the cleanliness "gut check". - -Includes PinChangeIntTest 1.5 sketch. - -...Ooops! Forgot the GetPSTR library, needed for the PinChangeIntTest code! Now it's included. -****************************************************************************** -Version 2.17 (beta) Sat Nov 17 09:46:50 CST 2012 -Another bugfix in the PCINT_MULTI_SERVICE section. I was using sbi(PCIFR, PCICRbit); -I didn't realize that was for I/O ports, and not ATmega registers. -But according to "deprecated.h", -"These macros became obsolete, as reading and writing IO ports can - be done by simply using the IO port name in an expression, and all - bit manipulation (including those on IO ports) can be done using - generic C bit manipulation operators." -So now I do: - PCIFR |= PCICRbit; -****************************************************************************** -Version 2.15 (beta) Sat Nov 17 01:17:44 CST 2012 -Fixed it so that attachInterrupt() will now follow your changes to the user function, -as well as the mode. detachInterrupt() still does not delete the PCintPin object but -at least you can detach and reattach at will, using different modes (RISING, FALLING, -CHANGE) and different functions as you wish. - -****************************************************************************** -Version 2.13 (beta) Mon Nov 12 09:33:06 CST 2012 -SIGNIFICANT BUGFIX release! Significant changes: -1. PCintPort::curr bug. Interrupts that occur rapidly will likely not get serviced properly by PCint(). -2. PCint() interrupt handler optimization. -3. PCIFR port bit set bug fix. -4. Many static variables added for debugging; used only when #define PINMODE is on. -5. detachInterrupt() no longer does a delete(), since that wasn't working anyway. When you detachInterrupt(), the PORT just disables interrupts for that pin; the PCintPin object remains in memory and in the linked list of pins (possibly slowing down your interrupts a couple of micros). You can reenable a detached interrupt- but you must do it within the PinChangeInt library (would anyone ever enable an interrupt on a pin, then disable it, then have need to reenable it but not using the library?). -6. attachInterrupt() now returns a uint8_t value: 1 on successful attach, 0 on successful attach but using an already-enabled pin, and -1 if the new() operator failed to create a PCintPin object. -Also, modified these release notes. - -Details: - -Uncovered a nasty bug, thanks to robtillaart on the Arduino Forums and Andre' Franken who posted to the PinChangeInt groups. This bug was introduced by me when I assigned PCintPort::curr early in the interrupt handler: -ISR(PCINT0_vect) { - PCintPort::curr = portB.portInputReg; - portB.PCint(); -} -Later, in the interrupt handler PCint(), we loop as long as PCIFR indicates a new interrupt wants to be triggered, provided DISABLE_PCINT_MULTI_SERVICE is not defined (it is not by default): -#ifndef DISABLE_PCINT_MULTI_SERVICE - pcifr = PCIFR & PCICRbit; - PCIFR = pcifr; // clear the interrupt if we will process it (no effect if bit is zero) -} while(pcifr); -#endif -...Well. Problem is, if a pin pops up and causes the PCIFR to change, we have to reread the port and look at how it is now! I wasn't doing that before, so if a new interrupt appeared while I was still servicing the old one, odd behavior would take place. For example, an interrupt would register but then the userFunc would not be called upon to service it. The code needs to be: - pcifr = PCIFR & PCICRbit; - PCIFR = pcifr; // clear the interrupt if we will process it (no effect if bit is zero) - PCintPort::curr=portInputReg; // ...Fixed in 2.11beta. -} while(pcifr); - -Also, made the interrupt handler even faster with an optimization from robtillaart to take out the checks for changed pins from the while() loop that steps through the pins: -uint8_t changedPins = (PCintPort::curr ^ lastPinView) & - ((portRisingPins & PCintPort::curr ) | ( portFallingPins & ~PCintPort::curr )); - -...This speedup is offset by more changes in the PCint() handler, which now looks like the following; there are two bug fixes: ----------------------------- -FIX 1: sbi(PCIFR, PCICRbit); -FIX 2: ...the aforementioned PCintPort::curr=portInputReg; -Here's the new code: ----------------------------- - #ifndef DISABLE_PCINT_MULTI_SERVICE - pcifr = PCIFR & PCICRbit; - if (pcifr) { - //if (PCIFR & PCICRbit) { // believe it or not, this adds .6 micros - sbi(PCIFR, PCICRbit); // This was a BUG: PCIFR = pcifr ...And here is the fix. - #ifdef PINMODE - PCintPort::pcint_multi++; - if (PCIFR & PCICRbit) PCintPort::PCIFRbug=1; // PCIFR & PCICRbit should ALWAYS be 0 here! - #endif - PCintPort::curr=portInputReg; // ...Fixed in 2.11beta. - goto loop; // A goto!!! Don't want to look at the portInputReg gratuitously, so the while() will not do. - } - #endif - -Also I added a lot of variables for debugging when PINMODE is defined, for routing out nasty bugs. I may need them in the future... :-( - -Finally, I am not putting newlines in this commentary so I can make it easier to paste online. - -****************************************************************************** -Version 2.11 (beta) Mon Nov 12 09:33:06 CST 2012 -See version 2.13 (beta) above. No change other than tidying up the release notes. -****************************************************************************** - Version 2.01 (beta) Thu Jun 28 12:35:48 CDT 2012 - ...Wow, Version 2! What? Why? - Modified the way that the pin is tested inside the interrupt subroutine (ISR) PCintPort::PCint(), - to make the interrupt quicker and slightly reduce the memory footprint. The interrupt's time is - reduced by 2 microseconds or about 7%. Instead of using the mode variable, two bitmasks are maintained - for each port. One bitmask contains all the pins that are configured to work on RISING signals, the other - on FALLING signals. A pin configured to work on CHANGE signals will appear in both bitmasks of the port. - Then, the test for a change goes like this: - if (thisChangedPin) { - if ((thisChangedPin & portRisingPins & PCintPort::curr ) || - (thisChangedPin & portFallingPins & ~PCintPort::curr )) { - where portRisingPins is the bitmask for the pins configured to interrupt on RISING signals, and - portFallingPins is the bitmask for the pins configured to interrupt on FALLING signals. Each port includes - these two bitmask variables. - - This is a significant change to some core functionality to the library, and it saves an appreciable amount - of time (2 out of 36 or so micros). Hence, the 2.00 designation. - - Tue Jun 26 12:42:20 CDT 2012 - I was officially given permission to use the PCint library: - - Re: PCint library - « Sent to: GreyGnome on: Today at 08:10:33 AM » - « You have forwarded or responded to this message. » - Quote Reply Remove - HI, - Yeah, I wrote the original PCint library. It was a bit of a hack and the new one has better features. - I intended the code to be freely usable. Didn't really think about a license. Feel free to use it in - your code: I hereby grant you permission. - - I'll investigate the MIT license, and see if it is appropriate. - Chris J. Kiick - Robot builder and all around geek. - - Version 1.81 (beta) Tue Jun 19 07:29:08 CDT 2012 - Created the getPCIntVersion function, and its associated GET_PCINT_VERSION preprocessor macro. The version - is a 16-bit int, therefore versions are represented as a 4-digit integer. 1810, then, is the first beta - release of 1.81x series. 1811 would be a bugfix of 1.810. 1820 would be the production release. - - Reversed the order of this list, so the most recent notes come first. - - Made some variables "volatile", because they are changed in the interrupt code. Thanks, Tony Cappellini! - - Added support for the Arduino Mega! Thanks to cserveny...@gmail.com! - NOTE: I don't have a Mega, so I rely on you to give me error (or working) reports! - To sum it up for the Mega: No Port C, no Port D. Instead, you get Port J and Port K. Port B remains. - Port J, however, is practically useless because there is only 1 pin available for interrupts. - Most of the Port J pins are not even connected to a header connector. Caveat Programmer. - - Created a function to report the version of this code. Put this #define ahead of the #include of this file, - in your sketch: - #define GET_PCINT_VERSION - Then you can call - uint16_t getPCIntVersion (); - and it will return a 16-bit integer representation of the version of this library. That is, version 1.73beta - will be reported as "1730". 1.74, then, will return "1740". And so on, for whatever version of the library - this happens to be. The odd number in the 10's position will indicate a beta version, as per usual, and the - number in the 1s place will indicate the beta revision (bugs may necessitate a 1.731, 1.732, etc.). - - Here are some of his notes based on his changes: - Mega and friends are using port B, J and K for interrupts. B is working without any modifications. - - J is mostly useless, because of the hardware UART. I was not able to get pin change notifications from - the TX pin (14), so only 15 left. All other (PORT J) pins are not connected on the Arduino boards. - - K controls Arduino pin A8-A15, working fine. - - 328/168 boards use C and D. So in case the lib is compiled with Mega target, the C and D will be - disabled. Also you cannot see port J/K with other targets. For J and K new flags introduced: - NO_PORTJ_PINCHANGES and NO_PORTK_PINCHANGES. - Maybe we should have PORTJ_PINCHANGES to enable PJ, because they will be most likely unused. - - Enjoy! - - Note: To remain consistent, I have not included PORTJ_PINCHANGES. All ports behave the same, - no matter how trivial those ports may seem... no surprises... - - Version 1.72 Wed Mar 14 18:57:55 CDT 2012 - Release. - - Version 1.71beta Sat Mar 10 12:57:05 CST 2012 - Code reordering: Starting in version 1.3 of this library, I put the code that enables - interrupts for the given pin, and the code that enables Pin Change Interrupts, ahead of actually - setting the user's function for the pin. Thus in the small interval between turning on the - interrupts and actually creating a valid link to an interrupt handler, it is possible to get an - interrupt. At that point the value of the pointer is 0, so this means that the Arduino - will start over again from memory location 0- just as if you'd pressed the reset button. Oops! - - I corrected it so the code now operates in the proper order. - (EDITORIAL NOTE: If you want to really learn something, teach it!) - - Minor code clean-up: All references to PCintPort::curr are now explicit. This changes the compiled - hex code not one whit. I just sleep better at night. - - Numbering: Changed the numbering scheme. Beta versions will end with an odd number in the hundredths - place- because they may be odd- and continue to be marked "beta". I'll just sleep better at night. :-) - - Version 1.70beta Mon Feb 27 07:20:42 CST 2012 - Happy Birthday to me! Happy Birthday tooooo meee! Happy Birthday, Dear Meeeeee-eeeee! - Happy Birthday to me! - - Yes, it is on this auspicious occasion of mine (and Elizabeth Taylor's [R.I.P.]) birthday that I - humbly submit to you, gracious Arduino PinChangeInt user, version 1.70beta of the PinChangeInt - library. I hope you enjoy it. - - New in this release: - The PinChangeIntTest sketch was created, which can be found in the Examples directory. It exercises: - * Two interrupting pins, one on each of the Arduino's PORTs. - * detachInterrupt() (and subsequent attachInterrupt()s). - Hopefully this will help avoid the embarrassing bugs that I have heretofore missed. - - As well, it has come to this author's (GreyGnome) attention that the Serial class in Arduino 1.0 - uses an interrupt that, if you attempt to print from an interrupt (which is what I was doing in my - tests) can easily lock up the Arduino. So I have taken SigurðurOrn's excellent ByteBuffer library - and modified it for my own nefarious purposes. (see http://siggiorn.com/?p=460). The zipfile - comes complete with the ByteBuffer library; see the ByteBuffer/ByteBuffer.h file for a list of - changes, and see the PinChangeIntTest sketch for a usage scenario. Now the (interrupt-less and) - relatively fast operation of filling a circular buffer is used in the interrupt routines. The buffer - is then printed from loop(). - - The library has been modified so it can be used in other libraries, such as my AdaEncoder library - (http://code.google.com/p/adaencoder/). When #include'd by another library you should #define - the LIBCALL_PINCHANGEINT macro. For example: - #ifndef PinChangeInt_h - #define LIBCALL_PINCHANGEINT - #include "../PinChangeInt/PinChangeInt.h" - #endif - This is necessary because the IDE compiles both your sketch and the .cpp file of your library, and - the .h file is included in both places. But since the .h file actually contains the code, any variable - or function definitions would occur twice and cause compilation errors- unless #ifdef'ed out. - - Version 1.6beta Fri Feb 10 08:48:35 CST 2012 - Set the value of the current register settings, first thing in each ISR; e.g., - ISR(PCINT0_vect) { - PCintPort::curr = portB.portInputReg; // version 1.6 - ... - ...instead of at the beginning of the PCintPort::PCint() static method. This means that the port is read - closer to the beginning of the interrupt, and may be slightly more accurate- only by a couple of microseconds, - really, but it's a cheap win. - - Fixed a bug- a BUG!- in the attachInterrupt() and detachInterrupt() methods. I didn't have breaks in my - switch statements! Augh! What am I, a (UNIX) shell programmer? ...Uh, generally, yes... - - Added the PINMODE define and the PCintPort::pinmode variable. - - Version 1.51 Sun Feb 5 23:28:02 CST 2012 - Crap, a bug! Changed line 392 from this: - PCintPort::pinState=curr & changedPins ? HIGH : LOW; - to this: - PCintPort::pinState=curr & p->mask ? HIGH : LOW; - Also added a few lines of (commented-out) debug code. - - Version 1.5 Thu Feb 2 18:09:49 CST 2012 - Added the PCintPort::pinState static variable to allow the programmer to query the state of the pin - at the time of interrupt. - Added two new #defines, NO_PIN_STATE and NO_PIN_NUMBER so as to reduce the code size by 20-50 bytes, - and to speed up the interrupt routine slightly by declaring that you don't care if the static variables - PCintPort::pinState and/or PCintPort::arduinoPin are set and made available to your interrupt routine. - // #define NO_PIN_STATE // to indicate that you don't need the pinState - // #define NO_PIN_NUMBER // to indicate that you don't need the arduinoPin - - Version 1.4 Tue Jan 10 09:41:14 CST 2012 - All the code has been moved into this .h file, so as to allow #define's to work from the user's - sketch. Thanks to Paul Stoffregen from pjrc.com for the inspiration! (Check out his website for - some nice [lots more memory] Arduino-like boards at really good prices. ...This has been an unsolicited - plug. Now back to our regular programming. ...Hehe, "programming", get it?) - - As a result, we no longer use the PinChangeIntConfig.h file. The user must #define things in his/her - sketch. Which is better anyway. - - Removed the pcIntPorts[] array, which created all the ports by default no matter what. Now, only - those ports (PCintPort objects) that you need will get created if you use the NO_PORTx_PINCHANGES #defines. - This saves flash memory, and actually we get a bit of a memory savings anyway even if all the ports are - left enabled. - - The attachInterrupt and detachInterrupt routines were modified to handle the new PCintPort objects. - - Version 1.3 Sat Dec 3 22:56:20 CST 2011 - Significant internal changes: - Tested and modified to work with Arduino 1.0. - - Modified to use the new() operator and symbolic links instead of creating a pre-populated - PCintPins[]. Renamed some variables to simplify or make their meaning more obvious (IMHO anyway). - Modified the PCintPort::PCint() code (ie, the interrupt code) to loop over a linked-list. For - those who love arrays, I have left some code in there that should work to loop over an array - instead. But it is commented out in the release version. - - For Arduino versions prior to 1.0: The new() operator requires the cppfix.h library, which is - included with this package. For Arduino 1.0 and above: new.h comes with the distribution, and - that is #included. - - Version 1.2 Sat Dec 3 Sat Dec 3 09:15:52 CST 2011 - Modified Thu Sep 8 07:33:17 CDT 2011 by GreyGnome. Fixes a bug with the initial port - value. Now it sets the initial value to be the state of the port at the time of - attachInterrupt(). The line is port.PCintLast=port.portInputReg; in attachInterrupt(). - See GreyGnome comment, below. - - Added the "arduinoPin" variable, so the user's function will know exactly which pin on - the Arduino was triggered. - - Version 1.1 Sat Dec 3 00:06:03 CST 2011 - ...updated to fix the "delPin" function as per "pekka"'s bug report. Thanks! - - ---- ^^^ VERSIONS ^^^ (NOTE TO SELF: Update the PCINT_VERSION define, below) ------------- - - See google code project for latest, bugs and info http://code.google.com/p/arduino-pinchangeint/ - For more information Refer to avr-gcc header files, arduino source and atmega datasheet. - - This library was inspired by and derived from "johnboiles" (it seems) - PCInt Arduino Playground example here: http://www.arduino.cc/playground/Main/PcInt - If you are the original author, please let us know at the google code page - - It provides an extension to the interrupt support for arduino by - adding pin change interrupts, giving a way for users to have - interrupts drive off of any pin. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . diff --git a/libraries/PinChangeInt/gpl.txt b/libraries/PinChangeInt/gpl.txt deleted file mode 100644 index 94a9ed0..0000000 --- a/libraries/PinChangeInt/gpl.txt +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/libraries/PinChangeInt/keywords.txt b/libraries/PinChangeInt/keywords.txt deleted file mode 100644 index 24e1cec..0000000 --- a/libraries/PinChangeInt/keywords.txt +++ /dev/null @@ -1,10 +0,0 @@ -# LITERAL1 specifies constants - -# KEYWORD1 specifies datatypes and C/C++ keywords -pinState KEYWORD1 PinState -arduinoPin KEYWORD1 ArduinoPin -PCintPort KEYWORD1 PCInterruptPort - -# KEYWORD2 specifies methods and functions -attachInterrupt KEYWORD2 AttachInterrupt -detachInterrupt KEYWORD2 DetachInterrupt diff --git a/libraries/PubSubClient/.gitignore b/libraries/PubSubClient/.gitignore deleted file mode 100644 index 1c3ba18..0000000 --- a/libraries/PubSubClient/.gitignore +++ /dev/null @@ -1 +0,0 @@ -tests/bin diff --git a/libraries/PubSubClient/.travis.yml b/libraries/PubSubClient/.travis.yml deleted file mode 100644 index e7b28cb..0000000 --- a/libraries/PubSubClient/.travis.yml +++ /dev/null @@ -1,7 +0,0 @@ -sudo: false -language: cpp -compiler: - - g++ -script: cd tests && make && make test -os: - - linux diff --git a/libraries/PubSubClient/CHANGES.txt b/libraries/PubSubClient/CHANGES.txt deleted file mode 100755 index 8c8bef6..0000000 --- a/libraries/PubSubClient/CHANGES.txt +++ /dev/null @@ -1,68 +0,0 @@ -2.4 - * Add MQTT_SOCKET_TIMEOUT to prevent it blocking indefinitely - whilst waiting for inbound data - * Fixed return code when publishing >256 bytes - -2.3 - * Add publish(topic,payload,retained) function - -2.2 - * Change code layout to match Arduino Library reqs - -2.1 - * Add MAX_TRANSFER_SIZE def to chunk messages if needed - * Reject topic/payloads that exceed MQTT_MAX_PACKET_SIZE - -2.0 - * Add (and default to) MQTT 3.1.1 support - * Fix PROGMEM handling for Intel Galileo/ESP8266 - * Add overloaded constructors for convenience - * Add chainable setters for server/callback/client/stream - * Add state function to return connack return code - -1.9 - * Do not split MQTT packets over multiple calls to _client->write() - * API change: All constructors now require an instance of Client - to be passed in. - * Fixed example to match 1.8 api changes - dpslwk - * Added username/password support - WilHall - * Added publish_P - publishes messages from PROGMEM - jobytaffey - -1.8 - * KeepAlive interval is configurable in PubSubClient.h - * Maximum packet size is configurable in PubSubClient.h - * API change: Return boolean rather than int from various functions - * API change: Length parameter in message callback changed - from int to unsigned int - * Various internal tidy-ups around types -1.7 - * Improved keepalive handling - * Updated to the Arduino-1.0 API -1.6 - * Added the ability to publish a retained message - -1.5 - * Added default constructor - * Fixed compile error when used with arduino-0021 or later - -1.4 - * Fixed connection lost handling - -1.3 - * Fixed packet reading bug in PubSubClient.readPacket - -1.2 - * Fixed compile error when used with arduino-0016 or later - - -1.1 - * Reduced size of library - * Added support for Will messages - * Clarified licensing - see LICENSE.txt - - -1.0 - * Only Quality of Service (QOS) 0 messaging is supported - * The maximum message size, including header, is 128 bytes - * The keepalive interval is set to 30 seconds - * No support for Will messages diff --git a/libraries/PubSubClient/LICENSE.txt b/libraries/PubSubClient/LICENSE.txt deleted file mode 100755 index 217df35..0000000 --- a/libraries/PubSubClient/LICENSE.txt +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2008-2015 Nicholas O'Leary - -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. diff --git a/libraries/PubSubClient/README.md b/libraries/PubSubClient/README.md deleted file mode 100644 index 8317691..0000000 --- a/libraries/PubSubClient/README.md +++ /dev/null @@ -1,47 +0,0 @@ -# Arduino Client for MQTT - -This library provides a client for doing simple publish/subscribe messaging with -a server that supports MQTT. - -## Examples - -The library comes with a number of example sketches. See File > Examples > PubSubClient -within the Arduino application. - -Full API documentation is available here: http://pubsubclient.knolleary.net - -## Limitations - - - It can only publish QoS 0 messages. It can subscribe at QoS 0 or QoS 1. - - The maximum message size, including header, is **128 bytes** by default. This - is configurable via `MQTT_MAX_PACKET_SIZE` in `PubSubClient.h`. - - The keepalive interval is set to 15 seconds by default. This is configurable - via `MQTT_KEEPALIVE` in `PubSubClient.h`. - - The client uses MQTT 3.1.1 by default. It can be changed to use MQTT 3.1 by - changing value of `MQTT_VERSION` in `PubSubClient.h`. - - -## Compatible Hardware - -The library uses the Arduino Ethernet Client api for interacting with the -underlying network hardware. This means it Just Works with a growing number of -boards and shields, including: - - - Arduino Ethernet - - Arduino Ethernet Shield - - Arduino YUN – use the included `YunClient` in place of `EthernetClient`, and - be sure to do a `Bridge.begin()` first - - Arduino WiFi Shield - if you want to send packets > 90 bytes with this shield, - enable the `MQTT_MAX_TRANSFER_SIZE` define in `PubSubClient.h`. - - Sparkfun WiFly Shield – [library](https://github.com/dpslwk/WiFly) - - TI CC3000 WiFi - [library](https://github.com/sparkfun/SFE_CC3000_Library) - - Intel Galileo/Edison - - ESP8266 - -The library cannot currently be used with hardware based on the ENC28J60 chip – -such as the Nanode or the Nuelectronics Ethernet Shield. For those, there is an -[alternative library](https://github.com/njh/NanodeMQTT) available. - -## License - -This code is released under the MIT License. diff --git a/libraries/PubSubClient/examples/mqtt_auth/mqtt_auth.ino b/libraries/PubSubClient/examples/mqtt_auth/mqtt_auth.ino deleted file mode 100755 index e9f7b18..0000000 --- a/libraries/PubSubClient/examples/mqtt_auth/mqtt_auth.ino +++ /dev/null @@ -1,43 +0,0 @@ -/* - Basic MQTT example with Authentication - - - connects to an MQTT server, providing username - and password - - publishes "hello world" to the topic "outTopic" - - subscribes to the topic "inTopic" -*/ - -#include -#include -#include - -// Update these with values suitable for your network. -byte mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED }; -IPAddress ip(172, 16, 0, 100); -IPAddress server(172, 16, 0, 2); - -void callback(char* topic, byte* payload, unsigned int length) { - // handle message arrived -} - -EthernetClient ethClient; -PubSubClient client(server, 1883, callback, ethClient); - -void setup() -{ - Ethernet.begin(mac, ip); - // Note - the default maximum packet size is 128 bytes. If the - // combined length of clientId, username and password exceed this, - // you will need to increase the value of MQTT_MAX_PACKET_SIZE in - // PubSubClient.h - - if (client.connect("arduinoClient", "testuser", "testpass")) { - client.publish("outTopic","hello world"); - client.subscribe("inTopic"); - } -} - -void loop() -{ - client.loop(); -} diff --git a/libraries/PubSubClient/examples/mqtt_basic/mqtt_basic.ino b/libraries/PubSubClient/examples/mqtt_basic/mqtt_basic.ino deleted file mode 100755 index f545ade..0000000 --- a/libraries/PubSubClient/examples/mqtt_basic/mqtt_basic.ino +++ /dev/null @@ -1,77 +0,0 @@ -/* - Basic MQTT example - - This sketch demonstrates the basic capabilities of the library. - It connects to an MQTT server then: - - publishes "hello world" to the topic "outTopic" - - subscribes to the topic "inTopic", printing out any messages - it receives. NB - it assumes the received payloads are strings not binary - - It will reconnect to the server if the connection is lost using a blocking - reconnect function. See the 'mqtt_reconnect_nonblocking' example for how to - achieve the same result without blocking the main loop. - -*/ - -#include -#include -#include - -// Update these with values suitable for your network. -byte mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED }; -IPAddress ip(172, 16, 0, 100); -IPAddress server(172, 16, 0, 2); - -void callback(char* topic, byte* payload, unsigned int length) { - Serial.print("Message arrived ["); - Serial.print(topic); - Serial.print("] "); - for (int i=0;i Preferences -> Additional Boards Manager URLs": - http://arduino.esp8266.com/stable/package_esp8266com_index.json - - Open the "Tools -> Board -> Board Manager" and click install for the ESP8266" - - Select your ESP8266 in "Tools -> Board" - -*/ - -#include -#include - -// Update these with values suitable for your network. - -const char* ssid = "........"; -const char* password = "........"; -const char* mqtt_server = "broker.mqtt-dashboard.com"; - -WiFiClient espClient; -PubSubClient client(espClient); -long lastMsg = 0; -char msg[50]; -int value = 0; - -void setup_wifi() { - - delay(10); - // We start by connecting to a WiFi network - Serial.println(); - Serial.print("Connecting to "); - Serial.println(ssid); - - WiFi.begin(ssid, password); - - while (WiFi.status() != WL_CONNECTED) { - delay(500); - Serial.print("."); - } - - Serial.println(""); - Serial.println("WiFi connected"); - Serial.println("IP address: "); - Serial.println(WiFi.localIP()); -} - -void callback(char* topic, byte* payload, unsigned int length) { - Serial.print("Message arrived ["); - Serial.print(topic); - Serial.print("] "); - for (int i = 0; i < length; i++) { - Serial.print((char)payload[i]); - } - Serial.println(); - - // Switch on the LED if an 1 was received as first character - if ((char)payload[0] == '1') { - digitalWrite(BUILTIN_LED, LOW); // Turn the LED on (Note that LOW is the voltage level - // but actually the LED is on; this is because - // it is acive low on the ESP-01) - } else { - digitalWrite(BUILTIN_LED, HIGH); // Turn the LED off by making the voltage HIGH - } - -} - -void reconnect() { - // Loop until we're reconnected - while (!client.connected()) { - Serial.print("Attempting MQTT connection..."); - // Attempt to connect - if (client.connect("ESP8266Client")) { - Serial.println("connected"); - // Once connected, publish an announcement... - client.publish("outTopic", "hello world"); - // ... and resubscribe - client.subscribe("inTopic"); - } else { - Serial.print("failed, rc="); - Serial.print(client.state()); - Serial.println(" try again in 5 seconds"); - // Wait 5 seconds before retrying - delay(5000); - } - } -} - -void setup() { - pinMode(BUILTIN_LED, OUTPUT); // Initialize the BUILTIN_LED pin as an output - Serial.begin(115200); - setup_wifi(); - client.setServer(mqtt_server, 1883); - client.setCallback(callback); -} - -void loop() { - - if (!client.connected()) { - reconnect(); - } - client.loop(); - - long now = millis(); - if (now - lastMsg > 2000) { - lastMsg = now; - ++value; - snprintf (msg, 75, "hello world #%ld", value); - Serial.print("Publish message: "); - Serial.println(msg); - client.publish("outTopic", msg); - } -} diff --git a/libraries/PubSubClient/examples/mqtt_publish_in_callback/mqtt_publish_in_callback.ino b/libraries/PubSubClient/examples/mqtt_publish_in_callback/mqtt_publish_in_callback.ino deleted file mode 100755 index 42afb2a..0000000 --- a/libraries/PubSubClient/examples/mqtt_publish_in_callback/mqtt_publish_in_callback.ino +++ /dev/null @@ -1,60 +0,0 @@ -/* - Publishing in the callback - - - connects to an MQTT server - - subscribes to the topic "inTopic" - - when a message is received, republishes it to "outTopic" - - This example shows how to publish messages within the - callback function. The callback function header needs to - be declared before the PubSubClient constructor and the - actual callback defined afterwards. - This ensures the client reference in the callback function - is valid. - -*/ - -#include -#include -#include - -// Update these with values suitable for your network. -byte mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED }; -IPAddress ip(172, 16, 0, 100); -IPAddress server(172, 16, 0, 2); - -// Callback function header -void callback(char* topic, byte* payload, unsigned int length); - -EthernetClient ethClient; -PubSubClient client(server, 1883, callback, ethClient); - -// Callback function -void callback(char* topic, byte* payload, unsigned int length) { - // In order to republish this payload, a copy must be made - // as the orignal payload buffer will be overwritten whilst - // constructing the PUBLISH packet. - - // Allocate the correct amount of memory for the payload copy - byte* p = (byte*)malloc(length); - // Copy the payload to the new buffer - memcpy(p,payload,length); - client.publish("outTopic", p, length); - // Free the memory - free(p); -} - -void setup() -{ - - Ethernet.begin(mac, ip); - if (client.connect("arduinoClient")) { - client.publish("outTopic","hello world"); - client.subscribe("inTopic"); - } -} - -void loop() -{ - client.loop(); -} diff --git a/libraries/PubSubClient/examples/mqtt_reconnect_nonblocking/mqtt_reconnect_nonblocking.ino b/libraries/PubSubClient/examples/mqtt_reconnect_nonblocking/mqtt_reconnect_nonblocking.ino deleted file mode 100644 index 080b739..0000000 --- a/libraries/PubSubClient/examples/mqtt_reconnect_nonblocking/mqtt_reconnect_nonblocking.ino +++ /dev/null @@ -1,67 +0,0 @@ -/* - Reconnecting MQTT example - non-blocking - - This sketch demonstrates how to keep the client connected - using a non-blocking reconnect function. If the client loses - its connection, it attempts to reconnect every 5 seconds - without blocking the main loop. - -*/ - -#include -#include -#include - -// Update these with values suitable for your hardware/network. -byte mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED }; -IPAddress ip(172, 16, 0, 100); -IPAddress server(172, 16, 0, 2); - -void callback(char* topic, byte* payload, unsigned int length) { - // handle message arrived -} - -EthernetClient ethClient; -PubSubClient client(ethClient); - -long lastReconnectAttempt = 0; - -boolean reconnect() { - if (client.connect("arduinoClient")) { - // Once connected, publish an announcement... - client.publish("outTopic","hello world"); - // ... and resubscribe - client.subscribe("inTopic"); - } - return client.connected(); -} - -void setup() -{ - client.setServer(server, 1883); - client.setCallback(callback); - - Ethernet.begin(mac, ip); - delay(1500); - lastReconnectAttempt = 0; -} - - -void loop() -{ - if (!client.connected()) { - long now = millis(); - if (now - lastReconnectAttempt > 5000) { - lastReconnectAttempt = now; - // Attempt to reconnect - if (reconnect()) { - lastReconnectAttempt = 0; - } - } - } else { - // Client connected - - client.loop(); - } - -} diff --git a/libraries/PubSubClient/examples/mqtt_stream/mqtt_stream.ino b/libraries/PubSubClient/examples/mqtt_stream/mqtt_stream.ino deleted file mode 100755 index 67c2287..0000000 --- a/libraries/PubSubClient/examples/mqtt_stream/mqtt_stream.ino +++ /dev/null @@ -1,57 +0,0 @@ -/* - Example of using a Stream object to store the message payload - - Uses SRAM library: https://github.com/ennui2342/arduino-sram - but could use any Stream based class such as SD - - - connects to an MQTT server - - publishes "hello world" to the topic "outTopic" - - subscribes to the topic "inTopic" -*/ - -#include -#include -#include -#include - -// Update these with values suitable for your network. -byte mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED }; -IPAddress ip(172, 16, 0, 100); -IPAddress server(172, 16, 0, 2); - -SRAM sram(4, SRAM_1024); - -void callback(char* topic, byte* payload, unsigned int length) { - sram.seek(1); - - // do something with the message - for(uint8_t i=0; i -maintainer=Nick O'Leary -sentence=A client library for MQTT messaging. -paragraph=MQTT is a lightweight messaging protocol ideal for small devices. This library allows you to send and receive MQTT messages. It supports the latest MQTT 3.1.1 protocol and can be configured to use the older MQTT 3.1 if needed. It supports all Arduino Ethernet Client compatible hardware, including the Intel Galileo/Edison, ESP8266 and TI CC3000. -category=Communication -url=http://pubsubclient.knolleary.net -architectures=* diff --git a/libraries/PubSubClient/src/PubSubClient.cpp b/libraries/PubSubClient/src/PubSubClient.cpp deleted file mode 100644 index e66c9e0..0000000 --- a/libraries/PubSubClient/src/PubSubClient.cpp +++ /dev/null @@ -1,591 +0,0 @@ -/* - PubSubClient.cpp - A simple client for MQTT. - Nick O'Leary - http://knolleary.net -*/ - -#include "PubSubClient.h" -#include "Arduino.h" - -PubSubClient::PubSubClient() { - this->_state = MQTT_DISCONNECTED; - this->_client = NULL; - this->stream = NULL; - setCallback(NULL); -} - -PubSubClient::PubSubClient(Client& client) { - this->_state = MQTT_DISCONNECTED; - setClient(client); - this->stream = NULL; -} - -PubSubClient::PubSubClient(IPAddress addr, uint16_t port, Client& client) { - this->_state = MQTT_DISCONNECTED; - setServer(addr, port); - setClient(client); - this->stream = NULL; -} -PubSubClient::PubSubClient(IPAddress addr, uint16_t port, Client& client, Stream& stream) { - this->_state = MQTT_DISCONNECTED; - setServer(addr,port); - setClient(client); - setStream(stream); -} -PubSubClient::PubSubClient(IPAddress addr, uint16_t port, MQTT_CALLBACK_SIGNATURE, Client& client) { - this->_state = MQTT_DISCONNECTED; - setServer(addr, port); - setCallback(callback); - setClient(client); - this->stream = NULL; -} -PubSubClient::PubSubClient(IPAddress addr, uint16_t port, MQTT_CALLBACK_SIGNATURE, Client& client, Stream& stream) { - this->_state = MQTT_DISCONNECTED; - setServer(addr,port); - setCallback(callback); - setClient(client); - setStream(stream); -} - -PubSubClient::PubSubClient(uint8_t *ip, uint16_t port, Client& client) { - this->_state = MQTT_DISCONNECTED; - setServer(ip, port); - setClient(client); - this->stream = NULL; -} -PubSubClient::PubSubClient(uint8_t *ip, uint16_t port, Client& client, Stream& stream) { - this->_state = MQTT_DISCONNECTED; - setServer(ip,port); - setClient(client); - setStream(stream); -} -PubSubClient::PubSubClient(uint8_t *ip, uint16_t port, MQTT_CALLBACK_SIGNATURE, Client& client) { - this->_state = MQTT_DISCONNECTED; - setServer(ip, port); - setCallback(callback); - setClient(client); - this->stream = NULL; -} -PubSubClient::PubSubClient(uint8_t *ip, uint16_t port, MQTT_CALLBACK_SIGNATURE, Client& client, Stream& stream) { - this->_state = MQTT_DISCONNECTED; - setServer(ip,port); - setCallback(callback); - setClient(client); - setStream(stream); -} - -PubSubClient::PubSubClient(const char* domain, uint16_t port, Client& client) { - this->_state = MQTT_DISCONNECTED; - setServer(domain,port); - setClient(client); - this->stream = NULL; -} -PubSubClient::PubSubClient(const char* domain, uint16_t port, Client& client, Stream& stream) { - this->_state = MQTT_DISCONNECTED; - setServer(domain,port); - setClient(client); - setStream(stream); -} -PubSubClient::PubSubClient(const char* domain, uint16_t port, MQTT_CALLBACK_SIGNATURE, Client& client) { - this->_state = MQTT_DISCONNECTED; - setServer(domain,port); - setCallback(callback); - setClient(client); - this->stream = NULL; -} -PubSubClient::PubSubClient(const char* domain, uint16_t port, MQTT_CALLBACK_SIGNATURE, Client& client, Stream& stream) { - this->_state = MQTT_DISCONNECTED; - setServer(domain,port); - setCallback(callback); - setClient(client); - setStream(stream); -} - -boolean PubSubClient::connect(const char *id) { - return connect(id,NULL,NULL,0,0,0,0); -} - -boolean PubSubClient::connect(const char *id, const char *user, const char *pass) { - return connect(id,user,pass,0,0,0,0); -} - -boolean PubSubClient::connect(const char *id, const char* willTopic, uint8_t willQos, boolean willRetain, const char* willMessage) { - return connect(id,NULL,NULL,willTopic,willQos,willRetain,willMessage); -} - -boolean PubSubClient::connect(const char *id, const char *user, const char *pass, const char* willTopic, uint8_t willQos, boolean willRetain, const char* willMessage) { - if (!connected()) { - int result = 0; - - if (domain != NULL) { - result = _client->connect(this->domain, this->port); - } else { - result = _client->connect(this->ip, this->port); - } - if (result == 1) { - nextMsgId = 1; - // Leave room in the buffer for header and variable length field - uint16_t length = 5; - unsigned int j; - -#if MQTT_VERSION == MQTT_VERSION_3_1 - uint8_t d[9] = {0x00,0x06,'M','Q','I','s','d','p', MQTT_VERSION}; -#define MQTT_HEADER_VERSION_LENGTH 9 -#elif MQTT_VERSION == MQTT_VERSION_3_1_1 - uint8_t d[7] = {0x00,0x04,'M','Q','T','T',MQTT_VERSION}; -#define MQTT_HEADER_VERSION_LENGTH 7 -#endif - for (j = 0;j>1); - } - } - - buffer[length++] = v; - - buffer[length++] = ((MQTT_KEEPALIVE) >> 8); - buffer[length++] = ((MQTT_KEEPALIVE) & 0xFF); - length = writeString(id,buffer,length); - if (willTopic) { - length = writeString(willTopic,buffer,length); - length = writeString(willMessage,buffer,length); - } - - if(user != NULL) { - length = writeString(user,buffer,length); - if(pass != NULL) { - length = writeString(pass,buffer,length); - } - } - - write(MQTTCONNECT,buffer,length-5); - - lastInActivity = lastOutActivity = millis(); - - while (!_client->available()) { - unsigned long t = millis(); - if (t-lastInActivity >= ((int32_t) MQTT_SOCKET_TIMEOUT*1000UL)) { - _state = MQTT_CONNECTION_TIMEOUT; - _client->stop(); - return false; - } - } - uint8_t llen; - uint16_t len = readPacket(&llen); - - if (len == 4) { - if (buffer[3] == 0) { - lastInActivity = millis(); - pingOutstanding = false; - _state = MQTT_CONNECTED; - return true; - } else { - _state = buffer[3]; - } - } - _client->stop(); - } else { - _state = MQTT_CONNECT_FAILED; - } - return false; - } - return true; -} - -// reads a byte into result -boolean PubSubClient::readByte(uint8_t * result) { - uint32_t previousMillis = millis(); - while(!_client->available()) { - uint32_t currentMillis = millis(); - if(currentMillis - previousMillis >= ((int32_t) MQTT_SOCKET_TIMEOUT * 1000)){ - return false; - } - } - *result = _client->read(); - return true; -} - -// reads a byte into result[*index] and increments index -boolean PubSubClient::readByte(uint8_t * result, uint16_t * index){ - uint16_t current_index = *index; - uint8_t * write_address = &(result[current_index]); - if(readByte(write_address)){ - *index = current_index + 1; - return true; - } - return false; -} - -uint16_t PubSubClient::readPacket(uint8_t* lengthLength) { - uint16_t len = 0; - if(!readByte(buffer, &len)) return 0; - bool isPublish = (buffer[0]&0xF0) == MQTTPUBLISH; - uint32_t multiplier = 1; - uint16_t length = 0; - uint8_t digit = 0; - uint16_t skip = 0; - uint8_t start = 0; - - do { - if(!readByte(&digit)) return 0; - buffer[len++] = digit; - length += (digit & 127) * multiplier; - multiplier *= 128; - } while ((digit & 128) != 0); - *lengthLength = len-1; - - if (isPublish) { - // Read in topic length to calculate bytes to skip over for Stream writing - if(!readByte(buffer, &len)) return 0; - if(!readByte(buffer, &len)) return 0; - skip = (buffer[*lengthLength+1]<<8)+buffer[*lengthLength+2]; - start = 2; - if (buffer[0]&MQTTQOS1) { - // skip message id - skip += 2; - } - } - - for (uint16_t i = start;istream) { - if (isPublish && len-*lengthLength-2>skip) { - this->stream->write(digit); - } - } - if (len < MQTT_MAX_PACKET_SIZE) { - buffer[len] = digit; - } - len++; - } - - if (!this->stream && len > MQTT_MAX_PACKET_SIZE) { - len = 0; // This will cause the packet to be ignored. - } - - return len; -} - -boolean PubSubClient::loop() { - if (connected()) { - unsigned long t = millis(); - if ((t - lastInActivity > MQTT_KEEPALIVE*1000UL) || (t - lastOutActivity > MQTT_KEEPALIVE*1000UL)) { - if (pingOutstanding) { - this->_state = MQTT_CONNECTION_TIMEOUT; - _client->stop(); - return false; - } else { - buffer[0] = MQTTPINGREQ; - buffer[1] = 0; - _client->write(buffer,2); - lastOutActivity = t; - lastInActivity = t; - pingOutstanding = true; - } - } - if (_client->available()) { - uint8_t llen; - uint16_t len = readPacket(&llen); - uint16_t msgId = 0; - uint8_t *payload; - if (len > 0) { - lastInActivity = t; - uint8_t type = buffer[0]&0xF0; - if (type == MQTTPUBLISH) { - if (callback) { - uint16_t tl = (buffer[llen+1]<<8)+buffer[llen+2]; - char topic[tl+1]; - for (uint16_t i=0;i0 - if ((buffer[0]&0x06) == MQTTQOS1) { - msgId = (buffer[llen+3+tl]<<8)+buffer[llen+3+tl+1]; - payload = buffer+llen+3+tl+2; - callback(topic,payload,len-llen-3-tl-2); - - buffer[0] = MQTTPUBACK; - buffer[1] = 2; - buffer[2] = (msgId >> 8); - buffer[3] = (msgId & 0xFF); - _client->write(buffer,4); - lastOutActivity = t; - - } else { - payload = buffer+llen+3+tl; - callback(topic,payload,len-llen-3-tl); - } - } - } else if (type == MQTTPINGREQ) { - buffer[0] = MQTTPINGRESP; - buffer[1] = 0; - _client->write(buffer,2); - } else if (type == MQTTPINGRESP) { - pingOutstanding = false; - } - } - } - return true; - } - return false; -} - -boolean PubSubClient::publish(const char* topic, const char* payload) { - return publish(topic,(const uint8_t*)payload,strlen(payload),false); -} - -boolean PubSubClient::publish(const char* topic, const char* payload, boolean retained) { - return publish(topic,(const uint8_t*)payload,strlen(payload),retained); -} - -boolean PubSubClient::publish(const char* topic, const uint8_t* payload, unsigned int plength) { - return publish(topic, payload, plength, false); -} - -boolean PubSubClient::publish(const char* topic, const uint8_t* payload, unsigned int plength, boolean retained) { - if (connected()) { - if (MQTT_MAX_PACKET_SIZE < 5 + 2+strlen(topic) + plength) { - // Too long - return false; - } - // Leave room in the buffer for header and variable length field - uint16_t length = 5; - length = writeString(topic,buffer,length); - uint16_t i; - for (i=0;i 0) { - digit |= 0x80; - } - buffer[pos++] = digit; - llen++; - } while(len>0); - - pos = writeString(topic,buffer,pos); - - rc += _client->write(buffer,pos); - - for (i=0;iwrite((char)pgm_read_byte_near(payload + i)); - } - - lastOutActivity = millis(); - - return rc == tlen + 4 + plength; -} - -boolean PubSubClient::write(uint8_t header, uint8_t* buf, uint16_t length) { - uint8_t lenBuf[4]; - uint8_t llen = 0; - uint8_t digit; - uint8_t pos = 0; - uint16_t rc; - uint16_t len = length; - do { - digit = len % 128; - len = len / 128; - if (len > 0) { - digit |= 0x80; - } - lenBuf[pos++] = digit; - llen++; - } while(len>0); - - buf[4-llen] = header; - for (int i=0;i 0) && result) { - bytesToWrite = (bytesRemaining > MQTT_MAX_TRANSFER_SIZE)?MQTT_MAX_TRANSFER_SIZE:bytesRemaining; - rc = _client->write(writeBuf,bytesToWrite); - result = (rc == bytesToWrite); - bytesRemaining -= rc; - writeBuf += rc; - } - return result; -#else - rc = _client->write(buf+(4-llen),length+1+llen); - lastOutActivity = millis(); - return (rc == 1+llen+length); -#endif -} - -boolean PubSubClient::subscribe(const char* topic) { - return subscribe(topic, 0); -} - -boolean PubSubClient::subscribe(const char* topic, uint8_t qos) { - // original: if (qos < 0 || qos > 1) { (qos is uint8_t, hence qos < 0 impossible, tekka) - if (qos > 1) { - return false; - } - if (MQTT_MAX_PACKET_SIZE < 9 + strlen(topic)) { - // Too long - return false; - } - if (connected()) { - // Leave room in the buffer for header and variable length field - uint16_t length = 5; - nextMsgId++; - if (nextMsgId == 0) { - nextMsgId = 1; - } - buffer[length++] = (nextMsgId >> 8); - buffer[length++] = (nextMsgId & 0xFF); - length = writeString((char*)topic, buffer,length); - buffer[length++] = qos; - return write(MQTTSUBSCRIBE|MQTTQOS1,buffer,length-5); - } - return false; -} - -boolean PubSubClient::unsubscribe(const char* topic) { - if (MQTT_MAX_PACKET_SIZE < 9 + strlen(topic)) { - // Too long - return false; - } - if (connected()) { - uint16_t length = 5; - nextMsgId++; - if (nextMsgId == 0) { - nextMsgId = 1; - } - buffer[length++] = (nextMsgId >> 8); - buffer[length++] = (nextMsgId & 0xFF); - length = writeString(topic, buffer,length); - return write(MQTTUNSUBSCRIBE|MQTTQOS1,buffer,length-5); - } - return false; -} - -void PubSubClient::disconnect() { - buffer[0] = MQTTDISCONNECT; - buffer[1] = 0; - _client->write(buffer,2); - _state = MQTT_DISCONNECTED; - _client->stop(); - lastInActivity = lastOutActivity = millis(); -} - -uint16_t PubSubClient::writeString(const char* string, uint8_t* buf, uint16_t pos) { - const char* idp = string; - uint16_t i = 0; - pos += 2; - while (*idp) { - buf[pos++] = *idp++; - i++; - } - buf[pos-i-2] = (i >> 8); - buf[pos-i-1] = (i & 0xFF); - return pos; -} - - -boolean PubSubClient::connected() { - boolean rc; - if (_client == NULL ) { - rc = false; - } else { - rc = (int)_client->connected(); - if (!rc) { - if (this->_state == MQTT_CONNECTED) { - this->_state = MQTT_CONNECTION_LOST; - _client->flush(); - _client->stop(); - } - } - } - return rc; -} - -PubSubClient& PubSubClient::setServer(uint8_t * ip, uint16_t port) { - IPAddress addr(ip[0],ip[1],ip[2],ip[3]); - return setServer(addr,port); -} - -PubSubClient& PubSubClient::setServer(IPAddress ip, uint16_t port) { - this->ip = ip; - this->port = port; - this->domain = NULL; - return *this; -} - -PubSubClient& PubSubClient::setServer(const char * domain, uint16_t port) { - this->domain = domain; - this->port = port; - return *this; -} - -PubSubClient& PubSubClient::setCallback(MQTT_CALLBACK_SIGNATURE) { - this->callback = callback; - return *this; -} - -PubSubClient& PubSubClient::setClient(Client& client){ - this->_client = &client; - return *this; -} - -PubSubClient& PubSubClient::setStream(Stream& stream){ - this->stream = &stream; - return *this; -} - -int PubSubClient::state() { - return this->_state; -} diff --git a/libraries/PubSubClient/src/PubSubClient.h b/libraries/PubSubClient/src/PubSubClient.h deleted file mode 100644 index 90ad8ae..0000000 --- a/libraries/PubSubClient/src/PubSubClient.h +++ /dev/null @@ -1,145 +0,0 @@ -/* - PubSubClient.h - A simple client for MQTT. - Nick O'Leary - http://knolleary.net -*/ - -#ifndef PubSubClient_h -#define PubSubClient_h - -#include -#include "IPAddress.h" -#include "Client.h" -#include "Stream.h" - -#define MQTT_VERSION_3_1 3 -#define MQTT_VERSION_3_1_1 4 - -// MQTT_VERSION : Pick the version -//#define MQTT_VERSION MQTT_VERSION_3_1 -#ifndef MQTT_VERSION -#define MQTT_VERSION MQTT_VERSION_3_1_1 -#endif - -// MQTT_MAX_PACKET_SIZE : Maximum packet size -#ifndef MQTT_MAX_PACKET_SIZE -#define MQTT_MAX_PACKET_SIZE 128 -#endif - -// MQTT_KEEPALIVE : keepAlive interval in Seconds -#ifndef MQTT_KEEPALIVE -#define MQTT_KEEPALIVE 15 -#endif - -// MQTT_SOCKET_TIMEOUT: socket timeout interval in Seconds -#ifndef MQTT_SOCKET_TIMEOUT -#define MQTT_SOCKET_TIMEOUT 15 -#endif - -// MQTT_MAX_TRANSFER_SIZE : limit how much data is passed to the network client -// in each write call. Needed for the Arduino Wifi Shield. Leave undefined to -// pass the entire MQTT packet in each write call. -//#define MQTT_MAX_TRANSFER_SIZE 80 - -// Possible values for client.state() -#define MQTT_CONNECTION_TIMEOUT -4 -#define MQTT_CONNECTION_LOST -3 -#define MQTT_CONNECT_FAILED -2 -#define MQTT_DISCONNECTED -1 -#define MQTT_CONNECTED 0 -#define MQTT_CONNECT_BAD_PROTOCOL 1 -#define MQTT_CONNECT_BAD_CLIENT_ID 2 -#define MQTT_CONNECT_UNAVAILABLE 3 -#define MQTT_CONNECT_BAD_CREDENTIALS 4 -#define MQTT_CONNECT_UNAUTHORIZED 5 - -#define MQTTCONNECT 1 << 4 // Client request to connect to Server -#define MQTTCONNACK 2 << 4 // Connect Acknowledgment -#define MQTTPUBLISH 3 << 4 // Publish message -#define MQTTPUBACK 4 << 4 // Publish Acknowledgment -#define MQTTPUBREC 5 << 4 // Publish Received (assured delivery part 1) -#define MQTTPUBREL 6 << 4 // Publish Release (assured delivery part 2) -#define MQTTPUBCOMP 7 << 4 // Publish Complete (assured delivery part 3) -#define MQTTSUBSCRIBE 8 << 4 // Client Subscribe request -#define MQTTSUBACK 9 << 4 // Subscribe Acknowledgment -#define MQTTUNSUBSCRIBE 10 << 4 // Client Unsubscribe request -#define MQTTUNSUBACK 11 << 4 // Unsubscribe Acknowledgment -#define MQTTPINGREQ 12 << 4 // PING Request -#define MQTTPINGRESP 13 << 4 // PING Response -#define MQTTDISCONNECT 14 << 4 // Client is Disconnecting -#define MQTTReserved 15 << 4 // Reserved - -#define MQTTQOS0 (0 << 1) -#define MQTTQOS1 (1 << 1) -#define MQTTQOS2 (2 << 1) - -#ifdef ESP8266 -#include -#define MQTT_CALLBACK_SIGNATURE std::function callback -#else -#define MQTT_CALLBACK_SIGNATURE void (*callback)(char*, uint8_t*, unsigned int) -#endif - -/** PubSubClient class */ -class PubSubClient { -private: - Client* _client; - uint8_t buffer[MQTT_MAX_PACKET_SIZE]; - uint16_t nextMsgId; - unsigned long lastOutActivity; - unsigned long lastInActivity; - bool pingOutstanding; - MQTT_CALLBACK_SIGNATURE; - uint16_t readPacket(uint8_t*); - boolean readByte(uint8_t * result); - boolean readByte(uint8_t * result, uint16_t * index); - boolean write(uint8_t header, uint8_t* buf, uint16_t length); - uint16_t writeString(const char* string, uint8_t* buf, uint16_t pos); - IPAddress ip; - const char* domain; - uint16_t port; - Stream* stream; - int _state; -public: - PubSubClient(); //!< PubSubClient - PubSubClient(Client& client); //!< PubSubClient - PubSubClient(IPAddress, uint16_t, Client& client); //!< PubSubClient - PubSubClient(IPAddress, uint16_t, Client& client, Stream&); //!< PubSubClient - PubSubClient(IPAddress, uint16_t, MQTT_CALLBACK_SIGNATURE,Client& client); //!< PubSubClient - PubSubClient(IPAddress, uint16_t, MQTT_CALLBACK_SIGNATURE,Client& client, Stream&); //!< PubSubClient - PubSubClient(uint8_t *, uint16_t, Client& client); //!< PubSubClient - PubSubClient(uint8_t *, uint16_t, Client& client, Stream&); //!< PubSubClient - PubSubClient(uint8_t *, uint16_t, MQTT_CALLBACK_SIGNATURE,Client& client); //!< PubSubClient - PubSubClient(uint8_t *, uint16_t, MQTT_CALLBACK_SIGNATURE,Client& client, Stream&); //!< PubSubClient - PubSubClient(const char*, uint16_t, Client& client); //!< PubSubClient - PubSubClient(const char*, uint16_t, Client& client, Stream&); //!< PubSubClient - PubSubClient(const char*, uint16_t, MQTT_CALLBACK_SIGNATURE,Client& client); //!< PubSubClient - PubSubClient(const char*, uint16_t, MQTT_CALLBACK_SIGNATURE,Client& client, Stream&); //!< PubSubClient - - PubSubClient& setServer(IPAddress ip, uint16_t port); //!< setServer - PubSubClient& setServer(uint8_t * ip, uint16_t port); //!< setServer - PubSubClient& setServer(const char * domain, uint16_t port); //!< setServer - PubSubClient& setCallback(MQTT_CALLBACK_SIGNATURE); //!< setCallback - PubSubClient& setClient(Client& client); //!< setClient - PubSubClient& setStream(Stream& stream); //!< setStream - - boolean connect(const char* id); //!< connect - boolean connect(const char* id, const char* user, const char* pass); //!< connect - boolean connect(const char* id, const char* willTopic, uint8_t willQos, boolean willRetain, const char* willMessage); //!< connect - boolean connect(const char* id, const char* user, const char* pass, const char* willTopic, uint8_t willQos, boolean willRetain, const char* willMessage); //!< connect - void disconnect(); //!< disconnect - boolean publish(const char* topic, const char* payload); //!< publish - boolean publish(const char* topic, const char* payload, boolean retained); //!< publish - boolean publish(const char* topic, const uint8_t * payload, unsigned int plength); //!< publish - boolean publish(const char* topic, const uint8_t * payload, unsigned int plength, boolean retained); //!< publish - boolean publish_P(const char* topic, const uint8_t * payload, unsigned int plength, boolean retained); //!< publish_P - boolean subscribe(const char* topic); //!< subscribe - boolean subscribe(const char* topic, uint8_t qos); //!< subscribe - boolean unsubscribe(const char* topic); //!< unsubscribe - boolean loop(); //!< loop - boolean connected(); //!< connected - int state(); //!< state -}; - - -#endif diff --git a/libraries/PubSubClient/tests/.gitignore b/libraries/PubSubClient/tests/.gitignore deleted file mode 100644 index 215de78..0000000 --- a/libraries/PubSubClient/tests/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -.build -tmpbin -logs -*.pyc diff --git a/libraries/PubSubClient/tests/Makefile b/libraries/PubSubClient/tests/Makefile deleted file mode 100644 index 1f71636..0000000 --- a/libraries/PubSubClient/tests/Makefile +++ /dev/null @@ -1,25 +0,0 @@ -SRC_PATH=./src -OUT_PATH=./bin -TEST_SRC=$(wildcard ${SRC_PATH}/*_spec.cpp) -TEST_BIN= $(TEST_SRC:${SRC_PATH}/%.cpp=${OUT_PATH}/%) -VPATH=${SRC_PATH} -SHIM_FILES=${SRC_PATH}/lib/*.cpp -PSC_FILE=../src/PubSubClient.cpp -CC=g++ -CFLAGS=-I${SRC_PATH}/lib -I../src - -all: $(TEST_BIN) - -${OUT_PATH}/%: ${SRC_PATH}/%.cpp ${PSC_FILE} ${SHIM_FILES} - mkdir -p ${OUT_PATH} - ${CC} ${CFLAGS} $^ -o $@ - -clean: - @rm -rf ${OUT_PATH} - -test: - @bin/connect_spec - @bin/publish_spec - @bin/receive_spec - @bin/subscribe_spec - @bin/keepalive_spec diff --git a/libraries/PubSubClient/tests/README.md b/libraries/PubSubClient/tests/README.md deleted file mode 100644 index e5700a6..0000000 --- a/libraries/PubSubClient/tests/README.md +++ /dev/null @@ -1,93 +0,0 @@ -# Arduino Client for MQTT Test Suite - -This is a regression test suite for the `PubSubClient` library. - -There are two parts: - - - Tests that can be compiled and run on any machine - - Tests that build the example sketches using the Arduino IDE - - -It is a work-in-progress and is subject to complete refactoring as the whim takes -me. - - -## Local tests - -These are a set of executables that can be run to test specific areas of functionality. -They do not require a real Arduino to be attached, nor the use of the Arduino IDE. - -The tests include a set of mock files to stub out the parts of the Arduino environment the library -depends on. - -### Dependencies - - - g++ - -### Running - -Build the tests using the provided `Makefile`: - - $ make - -This will create a set of executables in `./bin/`. Run each of these executables to test the corresponding functionality. - -*Note:* the `connect_spec` and `keepalive_spec` tests involve testing keepalive timers so naturally take a few minutes to run through. - -## Arduino tests - -*Note:* INO Tool doesn't currently play nicely with Arduino 1.5. This has broken this test suite. - -Without a suitable arduino plugged in, the test suite will only check the -example sketches compile cleanly against the library. - -With an arduino plugged in, each sketch that has a corresponding python -test case is built, uploaded and then the tests run. - -### Dependencies - - - Python 2.7+ - - [INO Tool](http://inotool.org/) - this provides command-line build/upload of Arduino sketches - -### Running - -The test suite _does not_ run an MQTT server - it is assumed to be running already. - - $ python testsuite.py - -A summary of activity is printed to the console. More comprehensive logs are written -to the `logs` directory. - -### What it does - -For each sketch in the library's `examples` directory, e.g. `mqtt_basic.ino`, the suite looks for a matching test case -`testcases/mqtt_basic.py`. - -The test case must follow these conventions: - - sub-class `unittest.TestCase` - - provide the class methods `setUpClass` and `tearDownClass` (TODO: make this optional) - - all test method names begin with `test_` - -The suite will call the `setUpClass` method _before_ uploading the sketch. This -allows any test setup to be performed before the sketch runs - such as connecting -a client and subscribing to topics. - - -### Settings - -The file `testcases/settings.py` is used to config the test environment. - - - `server_ip` - the IP address of the broker the client should connect to (the broker port is assumed to be 1883). - - `arduino_ip` - the IP address the arduino should use (when not testing DHCP). - -Before each sketch is compiled, these values are automatically substituted in. To -do this, the suite looks for lines that _start_ with the following: - - byte server[] = { - byte ip[] = { - -and replaces them with the appropriate values. - - - - diff --git a/libraries/PubSubClient/tests/src/connect_spec.cpp b/libraries/PubSubClient/tests/src/connect_spec.cpp deleted file mode 100644 index 69f1864..0000000 --- a/libraries/PubSubClient/tests/src/connect_spec.cpp +++ /dev/null @@ -1,256 +0,0 @@ -#include "PubSubClient.h" -#include "ShimClient.h" -#include "Buffer.h" -#include "BDDTest.h" -#include "trace.h" - - -byte server[] = { 172, 16, 0, 2 }; - -void callback(char* topic, byte* payload, unsigned int length) { - // handle message arrived -} - - -int test_connect_fails_no_network() { - IT("fails to connect if underlying client doesn't connect"); - ShimClient shimClient; - shimClient.setAllowConnect(false); - PubSubClient client(server, 1883, callback, shimClient); - int rc = client.connect((char*)"client_test1"); - IS_FALSE(rc); - int state = client.state(); - IS_TRUE(state == MQTT_CONNECT_FAILED); - END_IT -} - -int test_connect_fails_on_no_response() { - IT("fails to connect if no response received after 15 seconds"); - ShimClient shimClient; - shimClient.setAllowConnect(true); - PubSubClient client(server, 1883, callback, shimClient); - int rc = client.connect((char*)"client_test1"); - IS_FALSE(rc); - int state = client.state(); - IS_TRUE(state == MQTT_CONNECTION_TIMEOUT); - END_IT -} - -int test_connect_properly_formatted() { - IT("sends a properly formatted connect packet and succeeds"); - ShimClient shimClient; - - shimClient.setAllowConnect(true); - byte expectServer[] = { 172, 16, 0, 2 }; - shimClient.expectConnect(expectServer,1883); - byte connect[] = {0x10,0x18,0x0,0x4,0x4d,0x51,0x54,0x54,0x4,0x2,0x0,0xf,0x0,0xc,0x63,0x6c,0x69,0x65,0x6e,0x74,0x5f,0x74,0x65,0x73,0x74,0x31}; - byte connack[] = { 0x20, 0x02, 0x00, 0x00 }; - - shimClient.expect(connect,26); - shimClient.respond(connack,4); - - PubSubClient client(server, 1883, callback, shimClient); - int state = client.state(); - IS_TRUE(state == MQTT_DISCONNECTED); - - int rc = client.connect((char*)"client_test1"); - IS_TRUE(rc); - IS_FALSE(shimClient.error()); - - state = client.state(); - IS_TRUE(state == MQTT_CONNECTED); - - END_IT -} - -int test_connect_properly_formatted_hostname() { - IT("accepts a hostname"); - ShimClient shimClient; - - shimClient.setAllowConnect(true); - shimClient.expectConnect((char* const)"localhost",1883); - byte connack[] = { 0x20, 0x02, 0x00, 0x00 }; - shimClient.respond(connack,4); - - PubSubClient client((char* const)"localhost", 1883, callback, shimClient); - int rc = client.connect((char*)"client_test1"); - IS_TRUE(rc); - IS_FALSE(shimClient.error()); - - END_IT -} - - -int test_connect_fails_on_bad_rc() { - IT("fails to connect if a bad return code is received"); - ShimClient shimClient; - shimClient.setAllowConnect(true); - byte connack[] = { 0x20, 0x02, 0x00, 0x01 }; - shimClient.respond(connack,4); - - PubSubClient client(server, 1883, callback, shimClient); - int rc = client.connect((char*)"client_test1"); - IS_FALSE(rc); - - int state = client.state(); - IS_TRUE(state == 0x01); - - END_IT -} - -int test_connect_accepts_username_password() { - IT("accepts a username and password"); - ShimClient shimClient; - shimClient.setAllowConnect(true); - - byte connect[] = { 0x10,0x24,0x0,0x4,0x4d,0x51,0x54,0x54,0x4,0xc2,0x0,0xf,0x0,0xc,0x63,0x6c,0x69,0x65,0x6e,0x74,0x5f,0x74,0x65,0x73,0x74,0x31,0x0,0x4,0x75,0x73,0x65,0x72,0x0,0x4,0x70,0x61,0x73,0x73}; - byte connack[] = { 0x20, 0x02, 0x00, 0x00 }; - shimClient.expect(connect,0x26); - shimClient.respond(connack,4); - - PubSubClient client(server, 1883, callback, shimClient); - int rc = client.connect((char*)"client_test1",(char*)"user",(char*)"pass"); - IS_TRUE(rc); - IS_FALSE(shimClient.error()); - - END_IT -} - -int test_connect_accepts_username_no_password() { - IT("accepts a username but no password"); - ShimClient shimClient; - shimClient.setAllowConnect(true); - - byte connect[] = { 0x10,0x1e,0x0,0x4,0x4d,0x51,0x54,0x54,0x4,0x82,0x0,0xf,0x0,0xc,0x63,0x6c,0x69,0x65,0x6e,0x74,0x5f,0x74,0x65,0x73,0x74,0x31,0x0,0x4,0x75,0x73,0x65,0x72}; - byte connack[] = { 0x20, 0x02, 0x00, 0x00 }; - shimClient.expect(connect,0x20); - shimClient.respond(connack,4); - - PubSubClient client(server, 1883, callback, shimClient); - int rc = client.connect((char*)"client_test1",(char*)"user",0); - IS_TRUE(rc); - IS_FALSE(shimClient.error()); - - END_IT -} - -int test_connect_ignores_password_no_username() { - IT("ignores a password but no username"); - ShimClient shimClient; - shimClient.setAllowConnect(true); - - byte connect[] = {0x10,0x18,0x0,0x4,0x4d,0x51,0x54,0x54,0x4,0x2,0x0,0xf,0x0,0xc,0x63,0x6c,0x69,0x65,0x6e,0x74,0x5f,0x74,0x65,0x73,0x74,0x31}; - byte connack[] = { 0x20, 0x02, 0x00, 0x00 }; - shimClient.expect(connect,26); - shimClient.respond(connack,4); - - PubSubClient client(server, 1883, callback, shimClient); - int rc = client.connect((char*)"client_test1",0,(char*)"pass"); - IS_TRUE(rc); - IS_FALSE(shimClient.error()); - - END_IT -} - -int test_connect_with_will() { - IT("accepts a will"); - ShimClient shimClient; - shimClient.setAllowConnect(true); - - byte connect[] = {0x10,0x30,0x0,0x4,0x4d,0x51,0x54,0x54,0x4,0xe,0x0,0xf,0x0,0xc,0x63,0x6c,0x69,0x65,0x6e,0x74,0x5f,0x74,0x65,0x73,0x74,0x31,0x0,0x9,0x77,0x69,0x6c,0x6c,0x54,0x6f,0x70,0x69,0x63,0x0,0xb,0x77,0x69,0x6c,0x6c,0x4d,0x65,0x73,0x73,0x61,0x67,0x65}; - byte connack[] = { 0x20, 0x02, 0x00, 0x00 }; - shimClient.expect(connect,0x32); - shimClient.respond(connack,4); - - PubSubClient client(server, 1883, callback, shimClient); - int rc = client.connect((char*)"client_test1",(char*)"willTopic",1,0,(char*)"willMessage"); - IS_TRUE(rc); - IS_FALSE(shimClient.error()); - - END_IT -} - -int test_connect_with_will_username_password() { - IT("accepts a will, username and password"); - ShimClient shimClient; - shimClient.setAllowConnect(true); - - byte connect[] = {0x10,0x40,0x0,0x4,0x4d,0x51,0x54,0x54,0x4,0xce,0x0,0xf,0x0,0xc,0x63,0x6c,0x69,0x65,0x6e,0x74,0x5f,0x74,0x65,0x73,0x74,0x31,0x0,0x9,0x77,0x69,0x6c,0x6c,0x54,0x6f,0x70,0x69,0x63,0x0,0xb,0x77,0x69,0x6c,0x6c,0x4d,0x65,0x73,0x73,0x61,0x67,0x65,0x0,0x4,0x75,0x73,0x65,0x72,0x0,0x8,0x70,0x61,0x73,0x73,0x77,0x6f,0x72,0x64}; - byte connack[] = { 0x20, 0x02, 0x00, 0x00 }; - shimClient.expect(connect,0x42); - shimClient.respond(connack,4); - - PubSubClient client(server, 1883, callback, shimClient); - int rc = client.connect((char*)"client_test1",(char*)"user",(char*)"password",(char*)"willTopic",1,0,(char*)"willMessage"); - IS_TRUE(rc); - IS_FALSE(shimClient.error()); - - END_IT -} - -int test_connect_disconnect_connect() { - IT("connects, disconnects and connects again"); - ShimClient shimClient; - - shimClient.setAllowConnect(true); - byte expectServer[] = { 172, 16, 0, 2 }; - shimClient.expectConnect(expectServer,1883); - byte connect[] = {0x10,0x18,0x0,0x4,0x4d,0x51,0x54,0x54,0x4,0x2,0x0,0xf,0x0,0xc,0x63,0x6c,0x69,0x65,0x6e,0x74,0x5f,0x74,0x65,0x73,0x74,0x31}; - byte connack[] = { 0x20, 0x02, 0x00, 0x00 }; - - shimClient.expect(connect,26); - shimClient.respond(connack,4); - - PubSubClient client(server, 1883, callback, shimClient); - - int state = client.state(); - IS_TRUE(state == MQTT_DISCONNECTED); - - int rc = client.connect((char*)"client_test1"); - IS_TRUE(rc); - IS_FALSE(shimClient.error()); - - state = client.state(); - IS_TRUE(state == MQTT_CONNECTED); - - byte disconnect[] = {0xE0,0x00}; - shimClient.expect(disconnect,2); - - client.disconnect(); - - IS_FALSE(client.connected()); - IS_FALSE(shimClient.connected()); - IS_FALSE(shimClient.error()); - - state = client.state(); - IS_TRUE(state == MQTT_DISCONNECTED); - - shimClient.expect(connect,28); - shimClient.respond(connack,4); - rc = client.connect((char*)"client_test1"); - IS_TRUE(rc); - IS_FALSE(shimClient.error()); - state = client.state(); - IS_TRUE(state == MQTT_CONNECTED); - - END_IT -} - -int main() -{ - SUITE("Connect"); - test_connect_fails_no_network(); - test_connect_fails_on_no_response(); - - test_connect_properly_formatted(); - test_connect_accepts_username_password(); - test_connect_fails_on_bad_rc(); - test_connect_properly_formatted_hostname(); - - test_connect_accepts_username_no_password(); - test_connect_ignores_password_no_username(); - test_connect_with_will(); - test_connect_with_will_username_password(); - test_connect_disconnect_connect(); - FINISH -} diff --git a/libraries/PubSubClient/tests/src/keepalive_spec.cpp b/libraries/PubSubClient/tests/src/keepalive_spec.cpp deleted file mode 100644 index ea643cf..0000000 --- a/libraries/PubSubClient/tests/src/keepalive_spec.cpp +++ /dev/null @@ -1,185 +0,0 @@ -#include "PubSubClient.h" -#include "ShimClient.h" -#include "Buffer.h" -#include "BDDTest.h" -#include "trace.h" -#include - -byte server[] = { 172, 16, 0, 2 }; - -void callback(char* topic, byte* payload, unsigned int length) { - // handle message arrived -} - - -int test_keepalive_pings_idle() { - IT("keeps an idle connection alive (takes 1 minute)"); - - ShimClient shimClient; - shimClient.setAllowConnect(true); - - byte connack[] = { 0x20, 0x02, 0x00, 0x00 }; - shimClient.respond(connack,4); - - PubSubClient client(server, 1883, callback, shimClient); - int rc = client.connect((char*)"client_test1"); - IS_TRUE(rc); - - byte pingreq[] = { 0xC0,0x0 }; - shimClient.expect(pingreq,2); - byte pingresp[] = { 0xD0,0x0 }; - shimClient.respond(pingresp,2); - - for (int i = 0; i < 50; i++) { - sleep(1); - if ( i == 15 || i == 31 || i == 47) { - shimClient.expect(pingreq,2); - shimClient.respond(pingresp,2); - } - rc = client.loop(); - IS_TRUE(rc); - } - - IS_FALSE(shimClient.error()); - - END_IT -} - -int test_keepalive_pings_with_outbound_qos0() { - IT("keeps a connection alive that only sends qos0 (takes 1 minute)"); - - ShimClient shimClient; - shimClient.setAllowConnect(true); - - byte connack[] = { 0x20, 0x02, 0x00, 0x00 }; - shimClient.respond(connack,4); - - PubSubClient client(server, 1883, callback, shimClient); - int rc = client.connect((char*)"client_test1"); - IS_TRUE(rc); - - byte publish[] = {0x30,0xe,0x0,0x5,0x74,0x6f,0x70,0x69,0x63,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64}; - - for (int i = 0; i < 50; i++) { - TRACE(i<<":"); - shimClient.expect(publish,16); - rc = client.publish((char*)"topic",(char*)"payload"); - IS_TRUE(rc); - IS_FALSE(shimClient.error()); - sleep(1); - if ( i == 15 || i == 31 || i == 47) { - byte pingreq[] = { 0xC0,0x0 }; - shimClient.expect(pingreq,2); - byte pingresp[] = { 0xD0,0x0 }; - shimClient.respond(pingresp,2); - } - rc = client.loop(); - IS_TRUE(rc); - IS_FALSE(shimClient.error()); - } - - END_IT -} - -int test_keepalive_pings_with_inbound_qos0() { - IT("keeps a connection alive that only receives qos0 (takes 1 minute)"); - - ShimClient shimClient; - shimClient.setAllowConnect(true); - - byte connack[] = { 0x20, 0x02, 0x00, 0x00 }; - shimClient.respond(connack,4); - - PubSubClient client(server, 1883, callback, shimClient); - int rc = client.connect((char*)"client_test1"); - IS_TRUE(rc); - - byte publish[] = {0x30,0xe,0x0,0x5,0x74,0x6f,0x70,0x69,0x63,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64}; - - for (int i = 0; i < 50; i++) { - TRACE(i<<":"); - sleep(1); - if ( i == 15 || i == 31 || i == 47) { - byte pingreq[] = { 0xC0,0x0 }; - shimClient.expect(pingreq,2); - byte pingresp[] = { 0xD0,0x0 }; - shimClient.respond(pingresp,2); - } - shimClient.respond(publish,16); - rc = client.loop(); - IS_TRUE(rc); - IS_FALSE(shimClient.error()); - } - - END_IT -} - -int test_keepalive_no_pings_inbound_qos1() { - IT("does not send pings for connections with inbound qos1 (takes 1 minute)"); - - ShimClient shimClient; - shimClient.setAllowConnect(true); - - byte connack[] = { 0x20, 0x02, 0x00, 0x00 }; - shimClient.respond(connack,4); - - PubSubClient client(server, 1883, callback, shimClient); - int rc = client.connect((char*)"client_test1"); - IS_TRUE(rc); - - byte publish[] = {0x32,0x10,0x0,0x5,0x74,0x6f,0x70,0x69,0x63,0x12,0x34,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64}; - byte puback[] = {0x40,0x2,0x12,0x34}; - - for (int i = 0; i < 50; i++) { - shimClient.respond(publish,18); - shimClient.expect(puback,4); - sleep(1); - rc = client.loop(); - IS_TRUE(rc); - IS_FALSE(shimClient.error()); - } - - END_IT -} - -int test_keepalive_disconnects_hung() { - IT("disconnects a hung connection (takes 30 seconds)"); - - ShimClient shimClient; - shimClient.setAllowConnect(true); - - byte connack[] = { 0x20, 0x02, 0x00, 0x00 }; - shimClient.respond(connack,4); - - PubSubClient client(server, 1883, callback, shimClient); - int rc = client.connect((char*)"client_test1"); - IS_TRUE(rc); - - byte pingreq[] = { 0xC0,0x0 }; - shimClient.expect(pingreq,2); - - for (int i = 0; i < 32; i++) { - sleep(1); - rc = client.loop(); - } - IS_FALSE(rc); - - int state = client.state(); - IS_TRUE(state == MQTT_CONNECTION_TIMEOUT); - - IS_FALSE(shimClient.error()); - - END_IT -} - -int main() -{ - SUITE("Keep-alive"); - test_keepalive_pings_idle(); - test_keepalive_pings_with_outbound_qos0(); - test_keepalive_pings_with_inbound_qos0(); - test_keepalive_no_pings_inbound_qos1(); - test_keepalive_disconnects_hung(); - - FINISH -} diff --git a/libraries/PubSubClient/tests/src/lib/Arduino.h b/libraries/PubSubClient/tests/src/lib/Arduino.h deleted file mode 100644 index c675280..0000000 --- a/libraries/PubSubClient/tests/src/lib/Arduino.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef Arduino_h -#define Arduino_h - -#include -#include -#include -#include - - -extern "C"{ - typedef uint8_t byte ; - typedef uint8_t boolean ; - - /* sketch */ - extern void setup( void ) ; - extern void loop( void ) ; - uint32_t millis( void ); -} - -#define PROGMEM -#define pgm_read_byte_near(x) *(x) - -#endif // Arduino_h diff --git a/libraries/PubSubClient/tests/src/lib/BDDTest.cpp b/libraries/PubSubClient/tests/src/lib/BDDTest.cpp deleted file mode 100644 index a72bf65..0000000 --- a/libraries/PubSubClient/tests/src/lib/BDDTest.cpp +++ /dev/null @@ -1,50 +0,0 @@ -#include "BDDTest.h" -#include "trace.h" -#include -#include -#include -#include - -int testCount = 0; -int testPasses = 0; -const char* testDescription; - -std::list failureList; - -void bddtest_suite(const char* name) { - LOG(name << "\n"); -} - -int bddtest_test(const char* file, int line, const char* assertion, int result) { - if (!result) { - LOG("✗\n"); - std::ostringstream os; - os << " ! "<::iterator it = failureList.begin(); it != failureList.end(); it++) { - LOG("\n"); - LOG(*it); - LOG("\n"); - } - - LOG(std::dec << testPasses << "/" << testCount << " tests passed\n\n"); - if (testPasses == testCount) { - return 0; - } - return 1; -} diff --git a/libraries/PubSubClient/tests/src/lib/BDDTest.h b/libraries/PubSubClient/tests/src/lib/BDDTest.h deleted file mode 100644 index 1197fdd..0000000 --- a/libraries/PubSubClient/tests/src/lib/BDDTest.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef bddtest_h -#define bddtest_h - -void bddtest_suite(const char* name); -int bddtest_test(const char*, int, const char*, int); -void bddtest_start(const char*); -void bddtest_end(); -int bddtest_summary(); - -#define SUITE(x) { bddtest_suite(x); } -#define TEST(x) { if (!bddtest_test(__FILE__, __LINE__, #x, (x))) return false; } - -#define IT(x) { bddtest_start(x); } -#define END_IT { bddtest_end();return true;} - -#define FINISH { return bddtest_summary(); } - -#define IS_TRUE(x) TEST(x) -#define IS_FALSE(x) TEST(!(x)) -#define IS_EQUAL(x,y) TEST(x==y) -#define IS_NOT_EQUAL(x,y) TEST(x!=y) - -#endif diff --git a/libraries/PubSubClient/tests/src/lib/Buffer.cpp b/libraries/PubSubClient/tests/src/lib/Buffer.cpp deleted file mode 100644 index 59a2fbb..0000000 --- a/libraries/PubSubClient/tests/src/lib/Buffer.cpp +++ /dev/null @@ -1,30 +0,0 @@ -#include "Buffer.h" -#include "Arduino.h" - -Buffer::Buffer() { -} - -Buffer::Buffer(uint8_t* buf, size_t size) { - this->add(buf,size); -} -bool Buffer::available() { - return this->pos < this->length; -} - -uint8_t Buffer::next() { - if (this->available()) { - return this->buffer[this->pos++]; - } - return 0; -} - -void Buffer::reset() { - this->pos = 0; -} - -void Buffer::add(uint8_t* buf, size_t size) { - uint16_t i = 0; - for (;ibuffer[this->length++] = buf[i]; - } -} diff --git a/libraries/PubSubClient/tests/src/lib/Buffer.h b/libraries/PubSubClient/tests/src/lib/Buffer.h deleted file mode 100644 index e05d38e..0000000 --- a/libraries/PubSubClient/tests/src/lib/Buffer.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef buffer_h -#define buffer_h - -#include "Arduino.h" - -/** Buffer class */ -class Buffer { -private: - uint8_t buffer[1024]; - uint16_t pos; - uint16_t length; - -public: - Buffer(); //!< Buffer - Buffer(uint8_t* buf, size_t size); //!< Buffer - - virtual bool available(); //!< available - virtual uint8_t next(); //!< next - virtual void reset(); //!< reset - - virtual void add(uint8_t* buf, size_t size); //!< add -}; - -#endif diff --git a/libraries/PubSubClient/tests/src/lib/Client.h b/libraries/PubSubClient/tests/src/lib/Client.h deleted file mode 100644 index 29d53b8..0000000 --- a/libraries/PubSubClient/tests/src/lib/Client.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef client_h -#define client_h -#include "IPAddress.h" - -/** Client class */ -class Client { -public: - virtual int connect(IPAddress ip, uint16_t port) =0; //!< connect - virtual int connect(const char *host, uint16_t port) =0; //!< connect - virtual size_t write(uint8_t) =0; //!< write - virtual size_t write(const uint8_t *buf, size_t size) =0; //!< write - virtual int available() = 0; //!< available - virtual int read() = 0; //!< read - virtual int read(uint8_t *buf, size_t size) = 0; //!< read - virtual int peek() = 0; //!< peek - virtual void flush() = 0; //!< flush - virtual void stop() = 0; //!< stop - virtual uint8_t connected() = 0; //!< connected - virtual operator bool() = 0; //!< bool operator -}; - -#endif diff --git a/libraries/PubSubClient/tests/src/lib/IPAddress.cpp b/libraries/PubSubClient/tests/src/lib/IPAddress.cpp deleted file mode 100644 index 610ff4c..0000000 --- a/libraries/PubSubClient/tests/src/lib/IPAddress.cpp +++ /dev/null @@ -1,44 +0,0 @@ - -#include -#include - -IPAddress::IPAddress() -{ - memset(_address, 0, sizeof(_address)); -} - -IPAddress::IPAddress(uint8_t first_octet, uint8_t second_octet, uint8_t third_octet, uint8_t fourth_octet) -{ - _address[0] = first_octet; - _address[1] = second_octet; - _address[2] = third_octet; - _address[3] = fourth_octet; -} - -IPAddress::IPAddress(uint32_t address) -{ - memcpy(_address, &address, sizeof(_address)); -} - -IPAddress::IPAddress(const uint8_t *address) -{ - memcpy(_address, address, sizeof(_address)); -} - -IPAddress& IPAddress::operator=(const uint8_t *address) -{ - memcpy(_address, address, sizeof(_address)); - return *this; -} - -IPAddress& IPAddress::operator=(uint32_t address) -{ - memcpy(_address, (const uint8_t *)&address, sizeof(_address)); - return *this; -} - -bool IPAddress::operator==(const uint8_t* addr) -{ - return memcmp(addr, _address, sizeof(_address)) == 0; -} - diff --git a/libraries/PubSubClient/tests/src/lib/IPAddress.h b/libraries/PubSubClient/tests/src/lib/IPAddress.h deleted file mode 100644 index 3871074..0000000 --- a/libraries/PubSubClient/tests/src/lib/IPAddress.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - * - * MIT License: - * Copyright (c) 2011 Adrian McEwen - * 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. - * - * adrianm@mcqn.com 1/1/2011 - */ - -#ifndef IPAddress_h -#define IPAddress_h - - -// A class to make it easier to handle and pass around IP addresses - -/** IPAddress class */ -class IPAddress { -private: - uint8_t _address[4]; // IPv4 address - // Access the raw byte array containing the address. Because this returns a pointer - // to the internal structure rather than a copy of the address this function should only - // be used when you know that the usage of the returned uint8_t* will be transient and not - // stored. - uint8_t* raw_address() { return _address; }; - -public: - // Constructors - IPAddress(); //!< IPAddress - IPAddress(uint8_t first_octet, uint8_t second_octet, uint8_t third_octet, uint8_t fourth_octet); //!< IPAddress - IPAddress(uint32_t address); //!< IPAddress - IPAddress(const uint8_t *address); //!< IPAddress - - // Overloaded cast operator to allow IPAddress objects to be used where a pointer - // to a four-byte uint8_t array is expected - /** @brief operator overload */ - operator uint32_t() { return *((uint32_t*)_address); }; - /** @brief operator overload */ - bool operator==(const IPAddress& addr) { return (*((uint32_t*)_address)) == (*((uint32_t*)addr._address)); }; - /** @brief operator overload */ - bool operator==(const uint8_t* addr); - - // Overloaded index operator to allow getting and setting individual octets of the address - /** @brief operator overload */ - uint8_t operator[](int index) const { return _address[index]; }; - /** @brief operator overload */ - uint8_t& operator[](int index) { return _address[index]; }; - - // Overloaded copy operators to allow initialisation of IPAddress objects from other types - /** @brief operator overload */ - IPAddress& operator=(const uint8_t *address); - /** @brief operator overload */ - IPAddress& operator=(uint32_t address); - - - friend class EthernetClass; - friend class UDP; - friend class Client; - friend class Server; - friend class DhcpClass; - friend class DNSClient; -}; - - -#endif diff --git a/libraries/PubSubClient/tests/src/lib/ShimClient.cpp b/libraries/PubSubClient/tests/src/lib/ShimClient.cpp deleted file mode 100644 index f70115f..0000000 --- a/libraries/PubSubClient/tests/src/lib/ShimClient.cpp +++ /dev/null @@ -1,153 +0,0 @@ -#include "ShimClient.h" -#include "trace.h" -#include -#include -#include - -extern "C" { - uint32_t millis(void) { - return time(0)*1000; - } -} - -ShimClient::ShimClient() { - this->responseBuffer = new Buffer(); - this->expectBuffer = new Buffer(); - this->_allowConnect = true; - this->_connected = false; - this->_error = false; - this->expectAnything = true; - this->_received = 0; - this->_expectedPort = 0; -} - -int ShimClient::connect(IPAddress ip, uint16_t port) { - if (this->_allowConnect) { - this->_connected = true; - } - if (this->_expectedPort !=0) { - // if (memcmp(ip,this->_expectedIP,4) != 0) { - // TRACE( "ip mismatch\n"); - // this->_error = true; - // } - if (port != this->_expectedPort) { - TRACE( "port mismatch\n"); - this->_error = true; - } - } - return this->_connected; -} -int ShimClient::connect(const char *host, uint16_t port) { - if (this->_allowConnect) { - this->_connected = true; - } - if (this->_expectedPort !=0) { - if (strcmp(host,this->_expectedHost) != 0) { - TRACE( "host mismatch\n"); - this->_error = true; - } - if (port != this->_expectedPort) { - TRACE( "port mismatch\n"); - this->_error = true; - } - - } - return this->_connected; -} -size_t ShimClient::write(uint8_t b) { - this->_received += 1; - TRACE(std::hex << (unsigned int)b); - if (!this->expectAnything) { - if (this->expectBuffer->available()) { - uint8_t expected = this->expectBuffer->next(); - if (expected != b) { - this->_error = true; - TRACE("!=" << (unsigned int)expected); - } - } else { - this->_error = true; - } - } - TRACE("\n"<< std::dec); - return 1; -} -size_t ShimClient::write(const uint8_t *buf, size_t size) { - this->_received += size; - TRACE( "[" << std::dec << (unsigned int)(size) << "] "); - uint16_t i=0; - for (;i0) { - TRACE(":"); - } - TRACE(std::hex << (unsigned int)(buf[i])); - - if (!this->expectAnything) { - if (this->expectBuffer->available()) { - uint8_t expected = this->expectBuffer->next(); - if (expected != buf[i]) { - this->_error = true; - TRACE("!=" << (unsigned int)expected); - } - } else { - this->_error = true; - } - } - } - TRACE("\n"<responseBuffer->available(); -} -int ShimClient::read() { return this->responseBuffer->next(); } -int ShimClient::read(uint8_t *buf, size_t size) { - uint16_t i = 0; - for (;iread(); - } - return size; -} -int ShimClient::peek() { return 0; } -void ShimClient::flush() {} -void ShimClient::stop() { - this->setConnected(false); -} -uint8_t ShimClient::connected() { return this->_connected; } -ShimClient::operator bool() { return true; } - - -ShimClient* ShimClient::respond(uint8_t *buf, size_t size) { - this->responseBuffer->add(buf,size); - return this; -} - -ShimClient* ShimClient::expect(uint8_t *buf, size_t size) { - this->expectAnything = false; - this->expectBuffer->add(buf,size); - return this; -} - -void ShimClient::setConnected(bool b) { - this->_connected = b; -} -void ShimClient::setAllowConnect(bool b) { - this->_allowConnect = b; -} - -bool ShimClient::error() { - return this->_error; -} - -uint16_t ShimClient::received() { - return this->_received; -} - -void ShimClient::expectConnect(IPAddress ip, uint16_t port) { - this->_expectedIP = ip; - this->_expectedPort = port; -} - -void ShimClient::expectConnect(const char *host, uint16_t port) { - this->_expectedHost = host; - this->_expectedPort = port; -} diff --git a/libraries/PubSubClient/tests/src/lib/ShimClient.h b/libraries/PubSubClient/tests/src/lib/ShimClient.h deleted file mode 100644 index ea87bae..0000000 --- a/libraries/PubSubClient/tests/src/lib/ShimClient.h +++ /dev/null @@ -1,52 +0,0 @@ -#ifndef shimclient_h -#define shimclient_h - -#include "Arduino.h" -#include "Client.h" -#include "IPAddress.h" -#include "Buffer.h" - - -/** ShimClient class */ -class ShimClient : public Client { -private: - Buffer* responseBuffer; - Buffer* expectBuffer; - bool _allowConnect; - bool _connected; - bool expectAnything; - bool _error; - uint16_t _received; - IPAddress _expectedIP; - uint16_t _expectedPort; - const char* _expectedHost; - -public: - ShimClient(); - virtual int connect(IPAddress ip, uint16_t port); //!< connect - virtual int connect(const char *host, uint16_t port); //!< connect - virtual size_t write(uint8_t); //!< write - virtual size_t write(const uint8_t *buf, size_t size); //!< write - virtual int available(); //!< available - virtual int read(); //!< read - virtual int read(uint8_t *buf, size_t size); //!< read - virtual int peek(); //!< peek - virtual void flush(); //!< flush - virtual void stop(); //!< stop - virtual uint8_t connected(); //!< connected - virtual operator bool(); //!< bool operator - - virtual ShimClient* respond(uint8_t *buf, size_t size); //!< respond - virtual ShimClient* expect(uint8_t *buf, size_t size); //!< expect - - virtual void expectConnect(IPAddress ip, uint16_t port); //!< expectConnect - virtual void expectConnect(const char *host, uint16_t port); //!< expectConnect - - virtual uint16_t received(); //!< received - virtual bool error(); //!< error - - virtual void setAllowConnect(bool b); //!< setAllowConnect - virtual void setConnected(bool b); //!< setConnected -}; - -#endif diff --git a/libraries/PubSubClient/tests/src/lib/Stream.cpp b/libraries/PubSubClient/tests/src/lib/Stream.cpp deleted file mode 100644 index b0ecbb4..0000000 --- a/libraries/PubSubClient/tests/src/lib/Stream.cpp +++ /dev/null @@ -1,39 +0,0 @@ -#include "Stream.h" -#include "trace.h" -#include -#include - -Stream::Stream() { - this->expectBuffer = new Buffer(); - this->_error = false; - this->_written = 0; -} - -size_t Stream::write(uint8_t b) { - this->_written++; - TRACE(std::hex << (unsigned int)b); - if (this->expectBuffer->available()) { - uint8_t expected = this->expectBuffer->next(); - if (expected != b) { - this->_error = true; - TRACE("!=" << (unsigned int)expected); - } - } else { - this->_error = true; - } - TRACE("\n"<< std::dec); - return 1; -} - - -bool Stream::error() { - return this->_error; -} - -void Stream::expect(uint8_t *buf, size_t size) { - this->expectBuffer->add(buf,size); -} - -uint16_t Stream::length() { - return this->_written; -} diff --git a/libraries/PubSubClient/tests/src/lib/Stream.h b/libraries/PubSubClient/tests/src/lib/Stream.h deleted file mode 100644 index ad57313..0000000 --- a/libraries/PubSubClient/tests/src/lib/Stream.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef Stream_h -#define Stream_h - -#include "Arduino.h" -#include "Buffer.h" - -/** Stream class */ -class Stream { -private: - Buffer* expectBuffer; - bool _error; - uint16_t _written; - -public: - Stream(); - virtual size_t write(uint8_t); //!< write - - virtual bool error(); //!< error - virtual void expect(uint8_t *buf, size_t size); //!< expect - virtual uint16_t length(); //!< length -}; - -#endif diff --git a/libraries/PubSubClient/tests/src/lib/trace.h b/libraries/PubSubClient/tests/src/lib/trace.h deleted file mode 100644 index 42eb991..0000000 --- a/libraries/PubSubClient/tests/src/lib/trace.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef trace_h -#define trace_h -#include - -#include - -#define LOG(x) {std::cout << x << std::flush; } -#define TRACE(x) {if (getenv("TRACE")) { std::cout << x << std::flush; }} - -#endif diff --git a/libraries/PubSubClient/tests/src/publish_spec.cpp b/libraries/PubSubClient/tests/src/publish_spec.cpp deleted file mode 100644 index 232df0d..0000000 --- a/libraries/PubSubClient/tests/src/publish_spec.cpp +++ /dev/null @@ -1,190 +0,0 @@ -#include "PubSubClient.h" -#include "ShimClient.h" -#include "Buffer.h" -#include "BDDTest.h" -#include "trace.h" - - -byte server[] = { 172, 16, 0, 2 }; - -void callback(char* topic, byte* payload, unsigned int length) { - // handle message arrived -} - -int test_publish() { - IT("publishes a null-terminated string"); - ShimClient shimClient; - shimClient.setAllowConnect(true); - - byte connack[] = { 0x20, 0x02, 0x00, 0x00 }; - shimClient.respond(connack,4); - - PubSubClient client(server, 1883, callback, shimClient); - int rc = client.connect((char*)"client_test1"); - IS_TRUE(rc); - - byte publish[] = {0x30,0xe,0x0,0x5,0x74,0x6f,0x70,0x69,0x63,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64}; - shimClient.expect(publish,16); - - rc = client.publish((char*)"topic",(char*)"payload"); - IS_TRUE(rc); - - IS_FALSE(shimClient.error()); - - END_IT -} - - -int test_publish_bytes() { - IT("publishes a byte array"); - ShimClient shimClient; - shimClient.setAllowConnect(true); - - byte payload[] = { 0x01,0x02,0x03,0x0,0x05 }; - int length = 5; - - byte connack[] = { 0x20, 0x02, 0x00, 0x00 }; - shimClient.respond(connack,4); - - PubSubClient client(server, 1883, callback, shimClient); - int rc = client.connect((char*)"client_test1"); - IS_TRUE(rc); - - byte publish[] = {0x30,0xc,0x0,0x5,0x74,0x6f,0x70,0x69,0x63,0x1,0x2,0x3,0x0,0x5}; - shimClient.expect(publish,14); - - rc = client.publish((char*)"topic",payload,length); - IS_TRUE(rc); - - IS_FALSE(shimClient.error()); - - END_IT -} - - -int test_publish_retained() { - IT("publishes retained - 1"); - ShimClient shimClient; - shimClient.setAllowConnect(true); - - byte payload[] = { 0x01,0x02,0x03,0x0,0x05 }; - int length = 5; - - byte connack[] = { 0x20, 0x02, 0x00, 0x00 }; - shimClient.respond(connack,4); - - PubSubClient client(server, 1883, callback, shimClient); - int rc = client.connect((char*)"client_test1"); - IS_TRUE(rc); - - byte publish[] = {0x31,0xc,0x0,0x5,0x74,0x6f,0x70,0x69,0x63,0x1,0x2,0x3,0x0,0x5}; - shimClient.expect(publish,14); - - rc = client.publish((char*)"topic",payload,length,true); - IS_TRUE(rc); - - IS_FALSE(shimClient.error()); - - END_IT -} - -int test_publish_retained_2() { - IT("publishes retained - 2"); - ShimClient shimClient; - shimClient.setAllowConnect(true); - - byte connack[] = { 0x20, 0x02, 0x00, 0x00 }; - shimClient.respond(connack,4); - - PubSubClient client(server, 1883, callback, shimClient); - int rc = client.connect((char*)"client_test1"); - IS_TRUE(rc); - - byte publish[] = {0x31,0xc,0x0,0x5,0x74,0x6f,0x70,0x69,0x63,'A','B','C','D','E'}; - shimClient.expect(publish,14); - - rc = client.publish((char*)"topic",(char*)"ABCDE",true); - IS_TRUE(rc); - - IS_FALSE(shimClient.error()); - - END_IT -} - -int test_publish_not_connected() { - IT("publish fails when not connected"); - ShimClient shimClient; - - PubSubClient client(server, 1883, callback, shimClient); - - int rc = client.publish((char*)"topic",(char*)"payload"); - IS_FALSE(rc); - - IS_FALSE(shimClient.error()); - - END_IT -} - -int test_publish_too_long() { - IT("publish fails when topic/payload are too long"); - ShimClient shimClient; - shimClient.setAllowConnect(true); - - byte connack[] = { 0x20, 0x02, 0x00, 0x00 }; - shimClient.respond(connack,4); - - PubSubClient client(server, 1883, callback, shimClient); - int rc = client.connect((char*)"client_test1"); - IS_TRUE(rc); - - // 0 1 2 3 4 5 6 7 8 9 0 1 2 - rc = client.publish((char*)"topic",(char*)"123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"); - IS_FALSE(rc); - - IS_FALSE(shimClient.error()); - - END_IT -} - -int test_publish_P() { - IT("publishes using PROGMEM"); - ShimClient shimClient; - shimClient.setAllowConnect(true); - - byte payload[] = { 0x01,0x02,0x03,0x0,0x05 }; - int length = 5; - - byte connack[] = { 0x20, 0x02, 0x00, 0x00 }; - shimClient.respond(connack,4); - - PubSubClient client(server, 1883, callback, shimClient); - int rc = client.connect((char*)"client_test1"); - IS_TRUE(rc); - - byte publish[] = {0x31,0xc,0x0,0x5,0x74,0x6f,0x70,0x69,0x63,0x1,0x2,0x3,0x0,0x5}; - shimClient.expect(publish,14); - - rc = client.publish_P((char*)"topic",payload,length,true); - IS_TRUE(rc); - - IS_FALSE(shimClient.error()); - - END_IT -} - - - - -int main() -{ - SUITE("Publish"); - test_publish(); - test_publish_bytes(); - test_publish_retained(); - test_publish_retained_2(); - test_publish_not_connected(); - test_publish_too_long(); - test_publish_P(); - - FINISH -} diff --git a/libraries/PubSubClient/tests/src/receive_spec.cpp b/libraries/PubSubClient/tests/src/receive_spec.cpp deleted file mode 100644 index 54a62ee..0000000 --- a/libraries/PubSubClient/tests/src/receive_spec.cpp +++ /dev/null @@ -1,249 +0,0 @@ -#include "PubSubClient.h" -#include "ShimClient.h" -#include "Buffer.h" -#include "BDDTest.h" -#include "trace.h" - - -byte server[] = { 172, 16, 0, 2 }; - -bool callback_called = false; -char lastTopic[1024]; -char lastPayload[1024]; -unsigned int lastLength; - -void reset_callback() { - callback_called = false; - lastTopic[0] = '\0'; - lastPayload[0] = '\0'; - lastLength = 0; -} - -void callback(char* topic, byte* payload, unsigned int length) { - callback_called = true; - strcpy(lastTopic,topic); - memcpy(lastPayload,payload,length); - lastLength = length; -} - -int test_receive_callback() { - IT("receives a callback message"); - reset_callback(); - - ShimClient shimClient; - shimClient.setAllowConnect(true); - - byte connack[] = { 0x20, 0x02, 0x00, 0x00 }; - shimClient.respond(connack,4); - - PubSubClient client(server, 1883, callback, shimClient); - int rc = client.connect((char*)"client_test1"); - IS_TRUE(rc); - - byte publish[] = {0x30,0xe,0x0,0x5,0x74,0x6f,0x70,0x69,0x63,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64}; - shimClient.respond(publish,16); - - rc = client.loop(); - - IS_TRUE(rc); - - IS_TRUE(callback_called); - IS_TRUE(strcmp(lastTopic,"topic")==0); - IS_TRUE(memcmp(lastPayload,"payload",7)==0); - IS_TRUE(lastLength == 7); - - IS_FALSE(shimClient.error()); - - END_IT -} - -int test_receive_stream() { - IT("receives a streamed callback message"); - reset_callback(); - - Stream stream; - stream.expect((uint8_t*)"payload",7); - - ShimClient shimClient; - shimClient.setAllowConnect(true); - - byte connack[] = { 0x20, 0x02, 0x00, 0x00 }; - shimClient.respond(connack,4); - - PubSubClient client(server, 1883, callback, shimClient, stream); - int rc = client.connect((char*)"client_test1"); - IS_TRUE(rc); - - byte publish[] = {0x30,0xe,0x0,0x5,0x74,0x6f,0x70,0x69,0x63,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64}; - shimClient.respond(publish,16); - - rc = client.loop(); - - IS_TRUE(rc); - - IS_TRUE(callback_called); - IS_TRUE(strcmp(lastTopic,"topic")==0); - IS_TRUE(lastLength == 7); - - IS_FALSE(stream.error()); - IS_FALSE(shimClient.error()); - - END_IT -} - -int test_receive_max_sized_message() { - IT("receives an max-sized message"); - reset_callback(); - - ShimClient shimClient; - shimClient.setAllowConnect(true); - - byte connack[] = { 0x20, 0x02, 0x00, 0x00 }; - shimClient.respond(connack,4); - - PubSubClient client(server, 1883, callback, shimClient); - int rc = client.connect((char*)"client_test1"); - IS_TRUE(rc); - - int length = MQTT_MAX_PACKET_SIZE; - byte publish[] = {0x30,length-2,0x0,0x5,0x74,0x6f,0x70,0x69,0x63,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64}; - byte bigPublish[length]; - memset(bigPublish,'A',length); - bigPublish[length] = 'B'; - memcpy(bigPublish,publish,16); - shimClient.respond(bigPublish,length); - - rc = client.loop(); - - IS_TRUE(rc); - - IS_TRUE(callback_called); - IS_TRUE(strcmp(lastTopic,"topic")==0); - IS_TRUE(lastLength == length-9); - IS_TRUE(memcmp(lastPayload,bigPublish+9,lastLength)==0); - - IS_FALSE(shimClient.error()); - - END_IT -} - -int test_receive_oversized_message() { - IT("drops an oversized message"); - reset_callback(); - - ShimClient shimClient; - shimClient.setAllowConnect(true); - - byte connack[] = { 0x20, 0x02, 0x00, 0x00 }; - shimClient.respond(connack,4); - - PubSubClient client(server, 1883, callback, shimClient); - int rc = client.connect((char*)"client_test1"); - IS_TRUE(rc); - - int length = MQTT_MAX_PACKET_SIZE+1; - byte publish[] = {0x30,length-2,0x0,0x5,0x74,0x6f,0x70,0x69,0x63,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64}; - byte bigPublish[length]; - memset(bigPublish,'A',length); - bigPublish[length] = 'B'; - memcpy(bigPublish,publish,16); - shimClient.respond(bigPublish,length); - - rc = client.loop(); - - IS_TRUE(rc); - - IS_FALSE(callback_called); - - IS_FALSE(shimClient.error()); - - END_IT -} - -int test_receive_oversized_stream_message() { - IT("drops an oversized message"); - reset_callback(); - - Stream stream; - - ShimClient shimClient; - shimClient.setAllowConnect(true); - - byte connack[] = { 0x20, 0x02, 0x00, 0x00 }; - shimClient.respond(connack,4); - - PubSubClient client(server, 1883, callback, shimClient, stream); - int rc = client.connect((char*)"client_test1"); - IS_TRUE(rc); - - int length = MQTT_MAX_PACKET_SIZE+1; - byte publish[] = {0x30,length-2,0x0,0x5,0x74,0x6f,0x70,0x69,0x63,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64}; - - byte bigPublish[length]; - memset(bigPublish,'A',length); - bigPublish[length] = 'B'; - memcpy(bigPublish,publish,16); - - shimClient.respond(bigPublish,length); - stream.expect(bigPublish+9,length-9); - - rc = client.loop(); - - IS_TRUE(rc); - - IS_TRUE(callback_called); - IS_TRUE(strcmp(lastTopic,"topic")==0); - IS_TRUE(lastLength == length-9); - - IS_FALSE(stream.error()); - IS_FALSE(shimClient.error()); - - END_IT -} - -int test_receive_qos1() { - IT("receives a qos1 message"); - reset_callback(); - - ShimClient shimClient; - shimClient.setAllowConnect(true); - - byte connack[] = { 0x20, 0x02, 0x00, 0x00 }; - shimClient.respond(connack,4); - - PubSubClient client(server, 1883, callback, shimClient); - int rc = client.connect((char*)"client_test1"); - IS_TRUE(rc); - - byte publish[] = {0x32,0x10,0x0,0x5,0x74,0x6f,0x70,0x69,0x63,0x12,0x34,0x70,0x61,0x79,0x6c,0x6f,0x61,0x64}; - shimClient.respond(publish,18); - - byte puback[] = {0x40,0x2,0x12,0x34}; - shimClient.expect(puback,4); - - rc = client.loop(); - - IS_TRUE(rc); - - IS_TRUE(callback_called); - IS_TRUE(strcmp(lastTopic,"topic")==0); - IS_TRUE(memcmp(lastPayload,"payload",7)==0); - IS_TRUE(lastLength == 7); - - IS_FALSE(shimClient.error()); - - END_IT -} - -int main() -{ - SUITE("Receive"); - test_receive_callback(); - test_receive_stream(); - test_receive_max_sized_message(); - test_receive_oversized_message(); - test_receive_oversized_stream_message(); - test_receive_qos1(); - - FINISH -} diff --git a/libraries/PubSubClient/tests/src/subscribe_spec.cpp b/libraries/PubSubClient/tests/src/subscribe_spec.cpp deleted file mode 100644 index a419823..0000000 --- a/libraries/PubSubClient/tests/src/subscribe_spec.cpp +++ /dev/null @@ -1,177 +0,0 @@ -#include "PubSubClient.h" -#include "ShimClient.h" -#include "Buffer.h" -#include "BDDTest.h" -#include "trace.h" - - -byte server[] = { 172, 16, 0, 2 }; - -void callback(char* topic, byte* payload, unsigned int length) { - // handle message arrived -} - -int test_subscribe_no_qos() { - IT("subscribe without qos defaults to 0"); - ShimClient shimClient; - shimClient.setAllowConnect(true); - - byte connack[] = { 0x20, 0x02, 0x00, 0x00 }; - shimClient.respond(connack,4); - - PubSubClient client(server, 1883, callback, shimClient); - int rc = client.connect((char*)"client_test1"); - IS_TRUE(rc); - - byte subscribe[] = { 0x82,0xa,0x0,0x2,0x0,0x5,0x74,0x6f,0x70,0x69,0x63,0x0 }; - shimClient.expect(subscribe,12); - byte suback[] = { 0x90,0x3,0x0,0x2,0x0 }; - shimClient.respond(suback,5); - - rc = client.subscribe((char*)"topic"); - IS_TRUE(rc); - - IS_FALSE(shimClient.error()); - - END_IT -} - -int test_subscribe_qos_1() { - IT("subscribes qos 1"); - ShimClient shimClient; - shimClient.setAllowConnect(true); - - byte connack[] = { 0x20, 0x02, 0x00, 0x00 }; - shimClient.respond(connack,4); - - PubSubClient client(server, 1883, callback, shimClient); - int rc = client.connect((char*)"client_test1"); - IS_TRUE(rc); - - byte subscribe[] = { 0x82,0xa,0x0,0x2,0x0,0x5,0x74,0x6f,0x70,0x69,0x63,0x1 }; - shimClient.expect(subscribe,12); - byte suback[] = { 0x90,0x3,0x0,0x2,0x1 }; - shimClient.respond(suback,5); - - rc = client.subscribe((char*)"topic",1); - IS_TRUE(rc); - - IS_FALSE(shimClient.error()); - - END_IT -} - -int test_subscribe_not_connected() { - IT("subscribe fails when not connected"); - ShimClient shimClient; - - PubSubClient client(server, 1883, callback, shimClient); - - int rc = client.subscribe((char*)"topic"); - IS_FALSE(rc); - - IS_FALSE(shimClient.error()); - - END_IT -} - -int test_subscribe_invalid_qos() { - IT("subscribe fails with invalid qos values"); - ShimClient shimClient; - shimClient.setAllowConnect(true); - - byte connack[] = { 0x20, 0x02, 0x00, 0x00 }; - shimClient.respond(connack,4); - - PubSubClient client(server, 1883, callback, shimClient); - int rc = client.connect((char*)"client_test1"); - IS_TRUE(rc); - - rc = client.subscribe((char*)"topic",2); - IS_FALSE(rc); - rc = client.subscribe((char*)"topic",254); - IS_FALSE(rc); - - IS_FALSE(shimClient.error()); - - END_IT -} - -int test_subscribe_too_long() { - IT("subscribe fails with too long topic"); - ShimClient shimClient; - shimClient.setAllowConnect(true); - - byte connack[] = { 0x20, 0x02, 0x00, 0x00 }; - shimClient.respond(connack,4); - - PubSubClient client(server, 1883, callback, shimClient); - int rc = client.connect((char*)"client_test1"); - IS_TRUE(rc); - - // max length should be allowed - // 0 1 2 3 4 5 6 7 8 9 0 1 2 - rc = client.subscribe((char*)"12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"); - IS_TRUE(rc); - - // 0 1 2 3 4 5 6 7 8 9 0 1 2 - rc = client.subscribe((char*)"123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"); - IS_FALSE(rc); - - IS_FALSE(shimClient.error()); - - END_IT -} - - -int test_unsubscribe() { - IT("unsubscribes"); - ShimClient shimClient; - shimClient.setAllowConnect(true); - - byte connack[] = { 0x20, 0x02, 0x00, 0x00 }; - shimClient.respond(connack,4); - - PubSubClient client(server, 1883, callback, shimClient); - int rc = client.connect((char*)"client_test1"); - IS_TRUE(rc); - - byte unsubscribe[] = { 0xA2,0x9,0x0,0x2,0x0,0x5,0x74,0x6f,0x70,0x69,0x63 }; - shimClient.expect(unsubscribe,12); - byte unsuback[] = { 0xB0,0x2,0x0,0x2 }; - shimClient.respond(unsuback,4); - - rc = client.unsubscribe((char*)"topic"); - IS_TRUE(rc); - - IS_FALSE(shimClient.error()); - - END_IT -} - -int test_unsubscribe_not_connected() { - IT("unsubscribe fails when not connected"); - ShimClient shimClient; - - PubSubClient client(server, 1883, callback, shimClient); - - int rc = client.unsubscribe((char*)"topic"); - IS_FALSE(rc); - - IS_FALSE(shimClient.error()); - - END_IT -} - -int main() -{ - SUITE("Subscribe"); - test_subscribe_no_qos(); - test_subscribe_qos_1(); - test_subscribe_not_connected(); - test_subscribe_invalid_qos(); - test_subscribe_too_long(); - test_unsubscribe(); - test_unsubscribe_not_connected(); - FINISH -} diff --git a/libraries/PubSubClient/tests/testcases/__init__.py b/libraries/PubSubClient/tests/testcases/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/libraries/PubSubClient/tests/testcases/mqtt_basic.py b/libraries/PubSubClient/tests/testcases/mqtt_basic.py deleted file mode 100644 index 1b0cc65..0000000 --- a/libraries/PubSubClient/tests/testcases/mqtt_basic.py +++ /dev/null @@ -1,43 +0,0 @@ -import unittest -import settings - -import time -import mosquitto - -import serial - -def on_message(mosq, obj, msg): - obj.message_queue.append(msg) - -class mqtt_basic(unittest.TestCase): - - message_queue = [] - - @classmethod - def setUpClass(self): - self.client = mosquitto.Mosquitto("pubsubclient_ut", clean_session=True,obj=self) - self.client.connect(settings.server_ip) - self.client.on_message = on_message - self.client.subscribe("outTopic",0) - - @classmethod - def tearDownClass(self): - self.client.disconnect() - - def test_one(self): - i=30 - while len(self.message_queue) == 0 and i > 0: - self.client.loop() - time.sleep(0.5) - i -= 1 - self.assertTrue(i>0, "message receive timed-out") - self.assertEqual(len(self.message_queue), 1, "unexpected number of messages received") - msg = self.message_queue[0] - self.assertEqual(msg.mid,0,"message id not 0") - self.assertEqual(msg.topic,"outTopic","message topic incorrect") - self.assertEqual(msg.payload,"hello world") - self.assertEqual(msg.qos,0,"message qos not 0") - self.assertEqual(msg.retain,False,"message retain flag incorrect") - - - diff --git a/libraries/PubSubClient/tests/testcases/mqtt_publish_in_callback.py b/libraries/PubSubClient/tests/testcases/mqtt_publish_in_callback.py deleted file mode 100644 index 7989f7f..0000000 --- a/libraries/PubSubClient/tests/testcases/mqtt_publish_in_callback.py +++ /dev/null @@ -1,64 +0,0 @@ -import unittest -import settings - -import time -import mosquitto - -import serial - -def on_message(mosq, obj, msg): - obj.message_queue.append(msg) - -class mqtt_publish_in_callback(unittest.TestCase): - - message_queue = [] - - @classmethod - def setUpClass(self): - self.client = mosquitto.Mosquitto("pubsubclient_ut", clean_session=True,obj=self) - self.client.connect(settings.server_ip) - self.client.on_message = on_message - self.client.subscribe("outTopic",0) - - @classmethod - def tearDownClass(self): - self.client.disconnect() - - def test_connect(self): - i=30 - while len(self.message_queue) == 0 and i > 0: - self.client.loop() - time.sleep(0.5) - i -= 1 - self.assertTrue(i>0, "message receive timed-out") - self.assertEqual(len(self.message_queue), 1, "unexpected number of messages received") - msg = self.message_queue.pop(0) - self.assertEqual(msg.mid,0,"message id not 0") - self.assertEqual(msg.topic,"outTopic","message topic incorrect") - self.assertEqual(msg.payload,"hello world") - self.assertEqual(msg.qos,0,"message qos not 0") - self.assertEqual(msg.retain,False,"message retain flag incorrect") - - - def test_publish(self): - self.assertEqual(len(self.message_queue), 0, "message queue not empty") - payload = "abcdefghij" - self.client.publish("inTopic",payload) - - i=30 - while len(self.message_queue) == 0 and i > 0: - self.client.loop() - time.sleep(0.5) - i -= 1 - - self.assertTrue(i>0, "message receive timed-out") - self.assertEqual(len(self.message_queue), 1, "unexpected number of messages received") - msg = self.message_queue.pop(0) - self.assertEqual(msg.mid,0,"message id not 0") - self.assertEqual(msg.topic,"outTopic","message topic incorrect") - self.assertEqual(msg.payload,payload) - self.assertEqual(msg.qos,0,"message qos not 0") - self.assertEqual(msg.retain,False,"message retain flag incorrect") - - - diff --git a/libraries/PubSubClient/tests/testcases/settings.py b/libraries/PubSubClient/tests/testcases/settings.py deleted file mode 100644 index 4ad8719..0000000 --- a/libraries/PubSubClient/tests/testcases/settings.py +++ /dev/null @@ -1,2 +0,0 @@ -server_ip = "172.16.0.2" -arduino_ip = "172.16.0.100" diff --git a/libraries/PubSubClient/tests/testsuite.py b/libraries/PubSubClient/tests/testsuite.py deleted file mode 100644 index 0a8e70d..0000000 --- a/libraries/PubSubClient/tests/testsuite.py +++ /dev/null @@ -1,179 +0,0 @@ -#!/usr/bin/env python -import os -import os.path -import sys -import shutil -from subprocess import call -import importlib -import unittest -import re - -from testcases import settings - -class Workspace(object): - - def __init__(self): - self.root_dir = os.getcwd() - self.build_dir = os.path.join(self.root_dir,"tmpbin"); - self.log_dir = os.path.join(self.root_dir,"logs"); - self.tests_dir = os.path.join(self.root_dir,"testcases"); - self.examples_dir = os.path.join(self.root_dir,"../PubSubClient/examples") - self.examples = [] - self.tests = [] - if not os.path.isdir("../PubSubClient"): - raise Exception("Cannot find PubSubClient library") - try: - import ino - except: - raise Exception("ino tool not installed") - - def init(self): - if os.path.isdir(self.build_dir): - shutil.rmtree(self.build_dir) - os.mkdir(self.build_dir) - if os.path.isdir(self.log_dir): - shutil.rmtree(self.log_dir) - os.mkdir(self.log_dir) - - os.chdir(self.build_dir) - call(["ino","init"]) - - shutil.copytree("../../PubSubClient","lib/PubSubClient") - - filenames = [] - for root, dirs, files in os.walk(self.examples_dir): - filenames += [os.path.join(root,f) for f in files if f.endswith(".ino")] - filenames.sort() - for e in filenames: - self.examples.append(Sketch(self,e)) - - filenames = [] - for root, dirs, files in os.walk(self.tests_dir): - filenames += [os.path.join(root,f) for f in files if f.endswith(".ino")] - filenames.sort() - for e in filenames: - self.tests.append(Sketch(self,e)) - - def clean(self): - shutil.rmtree(self.build_dir) - -class Sketch(object): - def __init__(self,wksp,fn): - self.w = wksp - self.filename = fn - self.basename = os.path.basename(self.filename) - self.build_log = os.path.join(self.w.log_dir,"%s.log"%(os.path.basename(self.filename),)) - self.build_err_log = os.path.join(self.w.log_dir,"%s.err.log"%(os.path.basename(self.filename),)) - self.build_upload_log = os.path.join(self.w.log_dir,"%s.upload.log"%(os.path.basename(self.filename),)) - - def build(self): - sys.stdout.write(" Build: ") - sys.stdout.flush() - - # Copy sketch over, replacing IP addresses as necessary - fin = open(self.filename,"r") - lines = fin.readlines() - fin.close() - fout = open(os.path.join(self.w.build_dir,"src","sketch.ino"),"w") - for l in lines: - if re.match(r"^byte server\[\] = {",l): - fout.write("byte server[] = { %s };\n"%(settings.server_ip.replace(".",", "),)) - elif re.match(r"^byte ip\[\] = {",l): - fout.write("byte ip[] = { %s };\n"%(settings.arduino_ip.replace(".",", "),)) - else: - fout.write(l) - fout.flush() - fout.close() - - # Run build - fout = open(self.build_log, "w") - ferr = open(self.build_err_log, "w") - rc = call(["ino","build"],stdout=fout,stderr=ferr) - fout.close() - ferr.close() - if rc == 0: - sys.stdout.write("pass") - sys.stdout.write("\n") - return True - else: - sys.stdout.write("fail") - sys.stdout.write("\n") - with open(self.build_err_log) as f: - for line in f: - print " ",line, - return False - - def upload(self): - sys.stdout.write(" Upload: ") - sys.stdout.flush() - fout = open(self.build_upload_log, "w") - rc = call(["ino","upload"],stdout=fout,stderr=fout) - fout.close() - if rc == 0: - sys.stdout.write("pass") - sys.stdout.write("\n") - return True - else: - sys.stdout.write("fail") - sys.stdout.write("\n") - with open(self.build_upload_log) as f: - for line in f: - print " ",line, - return False - - - def test(self): - # import the matching test case, if it exists - try: - basename = os.path.basename(self.filename)[:-4] - i = importlib.import_module("testcases."+basename) - except: - sys.stdout.write(" Test: no tests found") - sys.stdout.write("\n") - return - c = getattr(i,basename) - - testmethods = [m for m in dir(c) if m.startswith("test_")] - testmethods.sort() - tests = [] - for m in testmethods: - tests.append(c(m)) - - result = unittest.TestResult() - c.setUpClass() - if self.upload(): - sys.stdout.write(" Test: ") - sys.stdout.flush() - for t in tests: - t.run(result) - print "%d/%d"%(result.testsRun-len(result.failures)-len(result.errors),result.testsRun) - if not result.wasSuccessful(): - if len(result.failures) > 0: - for f in result.failures: - print "-- %s"%(str(f[0]),) - print f[1] - if len(result.errors) > 0: - print " Errors:" - for f in result.errors: - print "-- %s"%(str(f[0]),) - print f[1] - c.tearDownClass() - -if __name__ == '__main__': - run_tests = True - - w = Workspace() - w.init() - - for e in w.examples: - print "--------------------------------------" - print "[%s]"%(e.basename,) - if e.build() and run_tests: - e.test() - for e in w.tests: - print "--------------------------------------" - print "[%s]"%(e.basename,) - if e.build() and run_tests: - e.test() - - w.clean() diff --git a/libraries/RemoteSensor/README.TXT b/libraries/RemoteSensor/README.TXT deleted file mode 100644 index 38444a5..0000000 --- a/libraries/RemoteSensor/README.TXT +++ /dev/null @@ -1,62 +0,0 @@ -RemoteSensor library v1.0.1 (20120213) for Arduino 1.0 -Made by Randy Simons http://randysimons.nl/ - -This library provides an easy class for Arduino, to send and receive signals -used by some common weather stations using remote 433MHz sensors, like those -made by Cresta. -E.g. http://www.cresta.nl/index.php?Itemid=2&option=com_zoo&view=item&category_id=32&item_id=281&lang=en - -Cresta is just a brandname. The original OEM seems to be Hideki Electronics. -There are other brands which use the same hardware and / or protocol. As far -as I know these include Mebus, Irox, Honeywell, Cresta and RST. - -This software is based on the work of Oopsje. See docs/CrestaProtocol.pdf - -See SensorTransmitter.h and SensorReciver.h for details! - -License: GPLv3. See ./RemoteSensor/license.txt - -Latest source and wiki: https://bitbucket.org/fuzzillogic/433mhzforarduino - - -Installation of library: - - Make sure Arduino is closed - - Copy the directory RemoteSensor to the Arduino library directory (usually - /libraries/) - See http://arduino.cc/en/Guide/Libraries for detailed instructions. - -Default installation sender & demo: - - Connect tha data-in-pin of a 433MHz transmitter to digital pin 11. See - docs/hardware setup.jpg. - (Note: your hardware may have a different pin configuration!) - - Start Arduino, and open the example: File -> Examples -> RemoteSensor -> - ThermoHygroTransmitter - - Alter addresses/devices to reflect your own setup. Otherwise nothing will - happen. - - Compile, upload and run! - -Default installation receiver & demo: - - Connect the data-out-pin of a 433MHz receiver to digital pin 2. See photo. - (Note: your hardware may have a different pin configuration!) - - Start Arduino, and open the example: File -> Examples -> RemoteSensor -> - ThermoHygroReceiver - - Compile, upload and run - - Open serial monitor in Arduino (115200 baud) - - Wait for your 433MHz-sensor to transmit (less than 1 minute), and watch the - serial monitor - - -Changelog: -RemoteSensor library v1.0.2 (20130601) for Arduino 1.0 - - Reduced memory usage (Flash, RAM). Because of this, a small backwards - incompatibility is introduced: The last parameter of - SensorReceiver::decodeThermoHygro now is a byte instead of short. - - Dropped support for Arduino pre-1.0 - -RemoteSensor library v1.0.1 (20120213) for Arduino 0022/1.0 - - Ignore obviously too short or too long signals in SensorReceiver, for better - recognition rate. - - Support for Arduino 1.0. - -RemoteSensor library v1.0.0 (20110919) for Arduino 0022 - - Initial version \ No newline at end of file diff --git a/libraries/RemoteSensor/SensorReceiver.cpp b/libraries/RemoteSensor/SensorReceiver.cpp deleted file mode 100644 index cde2b6f..0000000 --- a/libraries/RemoteSensor/SensorReceiver.cpp +++ /dev/null @@ -1,221 +0,0 @@ -/* - * RemoteSensor library v1.0.2 (20130601) for Arduino 1.0 - * - * This library encodes, encrypts en transmits data to - * remote weather stations made by Hideki Electronics.. - * - * Copyright 20112-2013 by Randy Simons http://randysimons.nl/ - * - * Parts of this code based on Oopsje's CrestaProtocol.pdf, for which - * I thank him very much! - * - * License: GPLv3. See license.txt - */ - -#include - -byte SensorReceiver::halfBit = 0; -word SensorReceiver::clockTime; -boolean SensorReceiver::isOne; -unsigned long SensorReceiver::lastChange=0; -SensorReceiverCallback SensorReceiver::callback; -byte SensorReceiver::data[14]; -byte SensorReceiver::packageLength; -word SensorReceiver::duration; -boolean SensorReceiver::enabled; - -void SensorReceiver::init(int8_t interrupt, SensorReceiverCallback callbackIn) { - callback = callbackIn; - - enable(); - - if (interrupt >= 0) { - attachInterrupt(interrupt, interruptHandler, CHANGE); - } -} - -void SensorReceiver::interruptHandler() { - if (!enabled) { - return; - } - - /* I'll follow CrestaProtocol documentation here. However, I suspect it is inaccurate at some points: - * - there is no stop-bit after every byte. Instead, there's a start-bit (0) before every byte. - * - Conversely, there is no start-bit "1" before every byte. - * - An up-flank is 0, down-flank is 1, at least with both my receivers. - * - * However, since the first start-bit 0 is hard to distinguish given the current clock-detecting - * algorithm, I pretend there *is* a stop-bit 0 instead of start-bit. However, this means the - * last stop-bit of a package must be ignored, as it simply isn't there. - * - * This manchester decoder is based on the principle that short edges indicate the current bit is the - * same as previous bit, and that long edge indicate that the current bit is the complement of the - * previous bit. - */ - - static byte halfBitCounter = 255; - unsigned long currentTime=micros(); - duration=currentTime-lastChange; // Duration = Time between edges - - lastChange=currentTime; - - if (halfBit==0) { - // Automatic clock detection. One clock-period is half the duration of the first edge. - clockTime = duration >> 1; - - // Some sanity checking, very short (<200us) or very long (>1000us) signals are ignored. - if (clockTime < 200 || clockTime > 1000) { - return; - } - isOne = true; - } - else { - // Edge is not too long, nor too short? - if (duration < (clockTime >> 1) || duration > (clockTime << 1) + clockTime) { // read as: duration < 0.5 * clockTime || duration > 3 * clockTime - // Fail. Abort. - reset(); - return; - } - - // Only process every second half bit, i.e. every whole bit. - if (halfBit & 1) { - byte currentByte = halfBit / 18; - byte currentBit = (halfBit >> 1) % 9; // nine bits in a byte. - - if (currentBit < 8) { - if (isOne) { - // Set current bit of current byte - data[currentByte] |= 1 << currentBit; - } - else { - // Reset current bit of current byte - data[currentByte] &= ~(1 << currentBit); - } - } - else { - // Ninth bit must be 0 - if (isOne) { - // Bit is 1. Fail. Abort. - reset(); - return; - } - } - - if (halfBit == 17) { // First byte has been received - // First data byte must be x75. - if (data[0] != 0x75) { - reset(); - return; - } - } - else if (halfBit == 53) { // Third byte has been received - // Obtain the length of the data - byte decodedByte = data[2]^(data[2]<<1); - packageLength = (decodedByte >> 1) & 0x1f; - - // Do some checking to see if we should proceed - if (packageLength < 6 || packageLength > 11) { - reset(); - return; - } - - halfBitCounter = (packageLength + 3) * 9 * 2 - 2 - 1; // 9 bits per byte, 2 edges per bit, minus last stop-bit (see comment above) - } - - // Done? - if (halfBit >= halfBitCounter) { - if (halfBit == halfBitCounter) { - // Yes! Decrypt and call the callback - if (decryptAndCheck()) { - (callback)(data); - } - } - - // reset - halfBit = 0; - return; - } - } - - // Edge is long? - if (duration > clockTime + (clockTime >> 1)) { // read as: duration > 1.5 * clockTime - // Long edge. - isOne = !isOne; - // Long edge takes 2 halfbits - halfBit++; - } - } - - halfBit++; - return; -} - -void SensorReceiver::reset() { - halfBit = 1; - clockTime = duration >> 1; - isOne = true; -} - -boolean SensorReceiver::decryptAndCheck() { - byte cs1,cs2,i; - - cs1=0; - cs2=0; - for (i=1; i>1); - if (b&1) - c^=0x5f; - if (c&1) - b^=0x5f; - - return b^(c>>1); -} - -void SensorReceiver::enable() { - halfBit = 0; - enabled = true; -} - -void SensorReceiver::disable() { - enabled = false; -} - -void SensorReceiver::decodeThermoHygro(byte *data, byte &channel, byte &randomId, int &temp, byte &humidity) { - channel = data[1] >> 5; - - // Internally channel 4 is used for the other sensor types (rain, uv, anemo). - // Therefore, if channel is decoded 5 or 6, the real value set on the device itself is 4 resp 5. - if (channel >= 5) { - channel--; - } - - randomId = data[1] & 0x1f; - - temp = 100 * (data[5] & 0x0f) + 10 * (data[4] >> 4) + (data[4] & 0x0f); - // temp is negative? - if (!(data[5] & 0x80)) { - temp = -temp; - } - - humidity = 10 * (data[6] >> 4) + (data[6] & 0x0f); -} \ No newline at end of file diff --git a/libraries/RemoteSensor/SensorReceiver.h b/libraries/RemoteSensor/SensorReceiver.h deleted file mode 100644 index f68603c..0000000 --- a/libraries/RemoteSensor/SensorReceiver.h +++ /dev/null @@ -1,107 +0,0 @@ -/* - * RemoteSensor library v1.0.2 (20130601) for Arduino 1.0 - * - * This library receives, decodes, decrypts and receives data of - * remote weather sensors made by Hideki Electronics. - * - * Copyright 2011-2013 by Randy Simons http://randysimons.nl/ - * - * Parts of this code based on Oopsje's CrestaProtocol.pdf, for which - * I thank him very much! - * - * For more details about the data format, see CrestaProtocol.pdf - * - * License: GPLv3. See license.txt - */ - -#ifndef SensorReceiver_h -#define SensorReceiver_h - -#include - -typedef void (*SensorReceiverCallback)(byte *); // pointer to data - -/** - * Generic class for receiving and decoding 433MHz remote weather sensors as made by Cresta. - * E.g. http://www.cresta.nl/index.php?Itemid=2&option=com_zoo&view=item&category_id=32&item_id=281&lang=en - * - * Cresta is just a brandname. The original OEM seems to be Hideki Electronics. There are - * other brands which use the same hardware and / or protocol. As far as I know these include - * Mebus, Irox, Honeywell, Cresta and RST. - * - * - * This class should be able to receive all sensor types: thermo/hygro, rain, uv, anemo. - * However, only thermo/hygro is tested and has special support. - * - * Hardware required for this library: - * A 433MHz/434MHz SAW receiver, e.g. http://www.sparkfun.com/products/10532 - */ -class SensorReceiver { - public: - /** - * Initializes the receiver. When a valid data package has been received, the callback is called - * with a pointer to the validated and decrypted data. For more details about the data format, - * see CrestaProtocol.pdf - * - * For the thermo/hygro-sensor, you can use decodeThermoHygro() for easy decoding the data. - * - * If interrupt >= 0, init will register pin to this library. - * If interrupt < 0, no interrupt is registered. In that case, you have to call interruptHandler() - * yourself whenever the output of the receiver changes, or you can use InterruptChain. - * - * @param interrupt The interrupt as is used by Arduino's attachInterrupt function. See attachInterrupt for details. - If < 0, you must call interruptHandler() yourself. - * @param callbackIn Pointer to a callback function, with signature void (*func)(byte *, byte). - * First parameter is the decoded data, the second the length of the package in bytes, including checksums. - * - */ - static void init(int8_t interrupt, SensorReceiverCallback callbackIn); - - /** - * Decodes data of a Thermo Hygro sensor. Note that the unit of the temp is in dec-degree, or degrees times 10. - * Thus, a value of temp of 235 is actually 23.5 degrees. - */ - static void decodeThermoHygro(byte *data, byte &channel, byte &randomId, int &temp, byte &humidity); - - /** - * Enable decoding. No need to call enable() after init(). - */ - static void enable(); - - /** - * Disable decoding. You can re-enable decoding by calling enable(); - */ - static void disable(); - - /** - * interruptHandler is called on every change in the input signal. If SensorReceiver::init is called - * with interrupt <0, you have to call interruptHandler() yourself. (Or use InterruptChain) - */ - static void interruptHandler(); - - private: - /** - * Quasi-reset. Called when the current edge is too long or short. - * reset "promotes" the current edge as being the first edge of a new sequence. - */ - static void reset(); - - /** - * Internal functions, based on CrestaProtocol.pdf - */ - static boolean decryptAndCheck(); - static byte secondCheck(byte b); - - static byte halfBit; // 9 bytes of 9 bits each, 2 edges per bit = 162 halfbits for thermo/hygro - static word clockTime; // Measured duration of half a period, i.e. the the duration of a short edge. - static boolean isOne; // true if the the last bit is a logic 1. - static unsigned long lastChange; // Timestamp of previous edge - static SensorReceiverCallback callback; // Pointer to callback function, which is called after valid package has been received - static byte packageLength; - static word duration; // Duration of current edge. - static boolean enabled; // If true, monitoring and decoding is enabled. If false, interruptHandler will return immediately. - - static byte data[14]; // Maximum number of bytes used by Cresta -}; - -#endif \ No newline at end of file diff --git a/libraries/RemoteSensor/SensorTransmitter.cpp b/libraries/RemoteSensor/SensorTransmitter.cpp deleted file mode 100644 index e2675d8..0000000 --- a/libraries/RemoteSensor/SensorTransmitter.cpp +++ /dev/null @@ -1,166 +0,0 @@ -/* - * RemoteSensor library v1.0.2 (20130601) for Arduino 1.0 - * - * This library encodes, encrypts en transmits data to - * remote weather stations made by Hideki Electronics.. - * - * Copyright 2011-2013 by Randy Simons http://randysimons.nl/ - * - * Parts of this code based on Oopsje's CrestaProtocol.pdf, for which - * I thank him very much! - * - * License: GPLv3. See license.txt - */ - -#include - - - -/******************* - * Sensor base class - ******************/ - -SensorTransmitter::SensorTransmitter(byte transmitterPin, byte randomId) { - _transmitterPin = transmitterPin; - _randomId = randomId; - - pinMode(_transmitterPin, OUTPUT); -} - -/* Encrypt data byte to send to station */ -byte SensorTransmitter::encryptByte(byte b) { - byte a; - for(a=0; b; b<<=1) { - a^=b; - } - return a; -} - -/* The second checksum. Input is OldChecksum^NewByte */ -byte SensorTransmitter::secondCheck(byte b) { - byte c; - if (b&0x80) { - b^=0x95; - } - c = b^(b>>1); - if (b&1) { - c^=0x5f; - } - if (c&1) { - b^=0x5f; - } - return b^(c>>1); -} - -/* Example to encrypt a package for sending, - Input: Buffer holds the unencrypted data. - Returns the number of bytes to send, - Buffer now holds data ready for sending. - */ -byte SensorTransmitter::encryptAndAddCheck(byte *buffer) { - byte cs1,cs2,count,i; - - count=(buffer[2]>>1) & 0x1f; - cs1=0; - cs2=0; - for(i=1; i>=1; - } - } -} - -/* Send bytes (prepared by “encryptAndAddCheckâ€�) and pause at the end. */ -void SensorTransmitter::sendManchesterPackage(byte transmitterPin, byte *data, byte cnt) { - byte i; - - for (i=0; i0x40; temp+=0x40) { /* Sends 3 packages */ - memcpy(buffer, data, ((data[2] >> 1) & 0x1f) + 1); - - buffer[3] = temp; - - count = encryptAndAddCheck(buffer); /* Encrypt, add checksum bytes */ - sendManchesterPackage(transmitterPin, buffer,count); /* Send the package */ - - delay(30); - } -} - - -/************************************ - * Thermo / Hygro sensor transmitter - ***********************************/ - -ThermoHygroTransmitter::ThermoHygroTransmitter(byte transmitterPin, byte randomId, byte channel) : SensorTransmitter(transmitterPin, randomId) { - _channel = channel; -} - -void ThermoHygroTransmitter::sendTempHumi(int temperature, byte humidity) { - byte buffer[10]; - - // Note: temperature is 10x the actual temperature! So, 23.5 degrees is passed as 235. - - buffer[0] = 0x75; /* Header byte */ - buffer[1] = (_channel << 5) | _randomId ; /* Thermo-hygro at channel 1 (see table1)*/ - buffer[2] = 0xce; /* Package size byte for th-sensor */ - - if ( temperature < 0 ) { - buffer[5] = 0x4 << 4; // High nibble is 0x4 for sub zero temperatures... - temperature = -temperature; // Make temperature positive - } else { - buffer[5] = 0xc << 4; // ...0xc for positive - } - - // Note: temperature is now always positive! - buffer[4] = (((temperature % 100) / 10 ) << 4) | // the "3" from 23.5 - (temperature % 10); // the "5" from 23.5 - buffer[5] |= (temperature / 100); // the "2" from 23.5 - - buffer[6] = ((humidity / 10) << 4) | (humidity % 10); // BCD encoded - - buffer[7]=0xff; /* Comfort flag */ - - sendPackage(_transmitterPin, buffer); -} - diff --git a/libraries/RemoteSensor/SensorTransmitter.h b/libraries/RemoteSensor/SensorTransmitter.h deleted file mode 100644 index 6a5141a..0000000 --- a/libraries/RemoteSensor/SensorTransmitter.h +++ /dev/null @@ -1,111 +0,0 @@ -/* - * RemoteSensor library v1.0.2 (20130601) for Arduino 1.0 - * - * This library encodes, encrypts en transmits data to - * remote weather stations made by Hideki Electronics.. - * - * Copyright 2011-2013 by Randy Simons http://randysimons.nl/ - * - * Parts of this code based on Oopsje's CrestaProtocol.pdf, for which - * I thank him very much! - * - * License: GPLv3. See license.txt - */ - -#ifndef SensorTransmitter_h -#define SensorTransmitter_h - -#include - -/** - * SensorTransmitter provides a generic class to simulate Cresta weather sensors, for use - * with Cresta weather stations. - * E.g. http://www.cresta.nl/index.php?Itemid=2&option=com_zoo&view=item&category_id=32&item_id=281&lang=en - * - * Cresta is just a brand name. The original OEM seems to be Hideki Electronics. There are - * other brands which use the same hardware and / or protocol. As far as I know these include - * Mebus, Irox, Honeywell, Cresta and RST. - * - * Hardware required for this library: a 433MHz/434MHz SAW oscillator transmitter, e.g. - * http://www.sparkfun.com/products/10534 - * http://www.conrad.nl/goto/?product=130428 - */ -class SensorTransmitter { - public: - /** - * Initializes the transmitter. About the random id: "A sensor selects a random value - * in the range of column 1 when it is reset. It keeps the same ID until it is reset again." - * You can leave it at 0 for most purposes - * The transmitter pin is set in OUTPUT mode; you don't have to do this yourself. - * - * @param transmitterPin Arduino-pin connected to the 433MHz transmitter - * @param randomId A "random" value in the range [0..31] - */ - SensorTransmitter(byte transmitterPin, byte randomId); - - /** - * Sends a raw sensor package. Before transmitting, the data is encrypted and checksums are - * added. The buffer of the data doesn't need to have room for the checksums, as the data is - * copied internally to a new buffer which is always large enough. - * However, the data must be valid! - * - * The data is transmitted 3 times. - * - * Note that this is a static method. - * - * @param transmitterPin Arduino-pin connected to the 433MHz transmitter - * @param data Pointer to data to transmit - */ - static void sendPackage(byte transmitterPin, byte *data); - - protected: - byte _transmitterPin; - byte _randomId; - - private: - /** - * Sends data as manchester encoded stream - */ - static void sendManchesterPackage(byte transmitterPin, byte *data, byte cnt); - - /** - * Sends a single byte as manchester encoded stream - */ - static void sendManchesterByte(byte transmitterPin, byte b); - - /** - * Encryption and checksum - */ - static byte encryptAndAddCheck(byte *buffer); - static byte secondCheck(byte b); - static byte encryptByte(byte b); -}; - -class ThermoHygroTransmitter : public SensorTransmitter { - public: - /** - * Mimics a Thermo / Hygro sensor. The channel of this device can be 1..5, but note - * that only the more expensive receivers can use channels 4 and 5. However, for use - * in conjunction with SensorReceiver this is of no concern. - * - * @param transmitterPin Arduino-pin connected to the 433MHz transmitter - * @param randomId A "random" value in the range [0..31] - * @channel The channel of this sensor, range [1..5] - * @see SensorTransmitter::SensorTransmitter (constructor) - */ - ThermoHygroTransmitter(byte transmitterPin, byte randomId, byte channel); - - /** - * Sends temperature and humidity. - * - * @param temperature 10x the actual temperature. You want to send 23,5 degrees, then temperature should be 235. - * @param humidty Humidity in percentage-points REL. Thus, for 34% REH humidity should be 34. - */ - void sendTempHumi(int temperature, byte humidity); - - private: - byte _channel; // Note: internally, the channels for the thermo/hygro-sensor are mapped as follow: - // 1=>1, 2=>2, 3=>3, 4=>5, 5=>6. - // This because interally the rain sensor, UV sensor and anemometer are on channel 4. -}; -#endif \ No newline at end of file diff --git a/libraries/RemoteSensor/docs/Cresta weather station wx580m.jpg b/libraries/RemoteSensor/docs/Cresta weather station wx580m.jpg deleted file mode 100644 index 9038110..0000000 Binary files a/libraries/RemoteSensor/docs/Cresta weather station wx580m.jpg and /dev/null differ diff --git a/libraries/RemoteSensor/docs/CrestaProtocol.pdf b/libraries/RemoteSensor/docs/CrestaProtocol.pdf deleted file mode 100644 index 405e53b..0000000 Binary files a/libraries/RemoteSensor/docs/CrestaProtocol.pdf and /dev/null differ diff --git a/libraries/RemoteSensor/docs/hardware setup.jpg b/libraries/RemoteSensor/docs/hardware setup.jpg deleted file mode 100644 index bea017e..0000000 Binary files a/libraries/RemoteSensor/docs/hardware setup.jpg and /dev/null differ diff --git a/libraries/RemoteSensor/examples/Repeater/Repeater.ino b/libraries/RemoteSensor/examples/Repeater/Repeater.ino deleted file mode 100644 index 1c38105..0000000 --- a/libraries/RemoteSensor/examples/Repeater/Repeater.ino +++ /dev/null @@ -1,54 +0,0 @@ -/* - * This sketch simply repeats data received from remote weather sensors made by Cresta. - * - * Setup: - * - connect digital output of a 433MHz receiver to digital pin 2 of Arduino. - * - connect transmitter input of a 433MHz transmitter to digital pin 11 - * - An LED on pin 13 will tell you if and when a signal has been received and transmitted. - */ - -#include -#include - -#define LED_PIN 13 -#define TRANSMITTER_PIN 11 - -void setup() { - pinMode(LED_PIN, OUTPUT); - - // Since we're not instantiating SensorTransmitter, but only use the static methods of SensorTransmitter, - // the pin mode must be set manually. - pinMode(TRANSMITTER_PIN, OUTPUT); - - // When no signal has been received, the LED is lit. - digitalWrite(LED_PIN, HIGH); - - // Init the receiver on interrupt pin 0 (digital pin 2). - // Set the callback to function "retransmit", which is called - // whenever valid sensor data has been received. - SensorReceiver::init(0, retransmit); -} - -void loop() { -} - -void retransmit(byte *data) { - // Data received - - // Wait a second after a receiving. There's little point for decoding and sending the same signal multiple times. - SensorReceiver::disable(); - interrupts(); // delay() requires that interrupts are enabled - delay(1000); - - // Flash LED when transmitting. - digitalWrite(LED_PIN, HIGH); - - // Transmit signal. Note: this is a static method, no object required! - SensorTransmitter::sendPackage(TRANSMITTER_PIN, data); - - digitalWrite(LED_PIN, LOW); - - noInterrupts(); - SensorReceiver::enable(); -} - diff --git a/libraries/RemoteSensor/examples/ThermoHygroReceiver/ThermoHygroReceiver.ino b/libraries/RemoteSensor/examples/ThermoHygroReceiver/ThermoHygroReceiver.ino deleted file mode 100644 index 645b073..0000000 --- a/libraries/RemoteSensor/examples/ThermoHygroReceiver/ThermoHygroReceiver.ino +++ /dev/null @@ -1,54 +0,0 @@ -/* - * This sketch receives and decodes data from a 433MHz thermo/hygro weather sensor. - * The received data (temperature, humidity, channel) is echo - * - * Setup: - * - Connect digital output of a 433MHz receiver to digital pin 2 of Arduino - * - Enable the serial monitor at 115200 baud. - * - */ - -#include - -void setup() { - Serial.begin(115200); - - // Init the receiver on interrupt pin 0 (digital pin 2). - // Set the callback to function "showTempHumi", which is called - // whenever valid sensor data has been received. - SensorReceiver::init(0, showTempHumi); -} - -void loop() { - // Empty! However, you can do other stuff here if you like. -} - -void showTempHumi(byte *data) { - // is data a ThermoHygro-device? - if ((data[3] & 0x1f) == 0x1e) { - // Yes! - - byte channel, randomId; - int temp; - byte humidity; - - // Decode the data - SensorReceiver::decodeThermoHygro(data, channel, randomId, temp, humidity); - - // Print temperature. Note: temp is 10x the actual temperature! - Serial.print("Temperature: "); - Serial.print(temp / 10); // units - Serial.print('.'); - Serial.print(temp % 10); // decimal - - // Print humidity - Serial.print(" deg, Humidity: "); - Serial.print(humidity); - Serial.print("% REL"); - - // Print channel - Serial.print(", Channel: "); - Serial.println(channel, DEC); - } -} - diff --git a/libraries/RemoteSensor/examples/ThermoHygroTransmitter/ThermoHygroTransmitter.ino b/libraries/RemoteSensor/examples/ThermoHygroTransmitter/ThermoHygroTransmitter.ino deleted file mode 100644 index f0505a0..0000000 --- a/libraries/RemoteSensor/examples/ThermoHygroTransmitter/ThermoHygroTransmitter.ino +++ /dev/null @@ -1,28 +0,0 @@ -/* - * This sketch sends (bogus) thermo / hygro data to a remote weather sensors made by Cresta. - * - * Setup: - * - connect transmitter input of a 433MHz transmitter to digital pin 11 - * - On the weather station, activate the "scan" function for channel 1. - */ - - #include - - // Initializes a ThermoHygroTransmitter on pin 11, with "random" ID 0, on channel 1. - ThermoHygroTransmitter transmitter(11, 0, 1); - - void setup() { - } - - void loop() { - // Displays temperatures from -10 degrees Celsius to +20, - // and humidity from 10% REL to 40% REL, with increments of 2 - for (int i = -10; i<=20; i+=2) { - // Temperatures are passed at 10 times the real value, - // to avoid using floating point math. - transmitter.sendTempHumi(i * 10, i + 20); - - // Wait two seconds before sending next. - delay(2000); - } - } diff --git a/libraries/RemoteSensor/keywords.txt b/libraries/RemoteSensor/keywords.txt deleted file mode 100644 index a2cbaf4..0000000 --- a/libraries/RemoteSensor/keywords.txt +++ /dev/null @@ -1,9 +0,0 @@ -SensorReceiver KEYWORD1 -init KEYWORD2 -decodeThermoHygro KEYWORD2 -enable KEYWORD2 -disable KEYWORD2 -interruptHandler KEYWORD2 -SensorTransmitter KEYWORD1 -sendPackage KEYWORD2 -ThermoHygroTransmitter KEYWORD1 \ No newline at end of file diff --git a/libraries/RemoteSensor/license.txt b/libraries/RemoteSensor/license.txt deleted file mode 100644 index 94a9ed0..0000000 --- a/libraries/RemoteSensor/license.txt +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/libraries/RemoteSwitch/README.TXT b/libraries/RemoteSwitch/README.TXT deleted file mode 100644 index 02aaccf..0000000 --- a/libraries/RemoteSwitch/README.TXT +++ /dev/null @@ -1,81 +0,0 @@ -RemoteSwitch library v2.3.0 (20121229) for Arduino 1.0 -Made by Randy Simons http://randysimons.nl/ - -This library provides an easy class for Arduino, to send and receive signals -used by some common "old style" 433MHz remote control switches. - -There are two styles of remote: - - "old style", which uses switches or a dial to set the house code. Use this - library. - - "new style", which use a button on the receivers to "learn" a signal. Use - the NewRemoteSwitch library instead. - -See RemoteTransmitter.h and RemoteReceiver.h for details! - -License: GPLv3. See ./RemoteSwitch/license.txt - -Latest source and wiki: https://bitbucket.org/fuzzillogic/433mhzforarduino - - -Installation of library: - - Make sure Arduino is closed - - Copy the directory RemoteSwitch to the Arduino library directory (usually - /libraries/) - See http://arduino.cc/en/Guide/Libraries for detailed instructions. - -Default installation sender & demo: - - Connect tha data-in-pin of a 433MHz transmitter to digital pin 11. See - docs/hardware setup.jpg. - (Note: your hardware may have a different pin configuration!) - - Start Arduino, and open the example: File -> Examples -> RemoteSwitch -> - LightShow - - Alter addresses/devices to reflect your own setup. Otherwise nothing will - happen. - - Compile, upload and run! - -Default installation receiver & demo: - - Connect the data-out-pin of a 433MHz receiver to digital pin 2. See photo. - (Note: your hardware may have a different pin configuration!) - - Start Arduino, and open the example: File -> Examples -> RemoteSwitch -> - ShowReceivedCode or ShowReceivedCodeNewKaku, depending on your remote. - - Compile, upload and run - - Open serial monitor in Arduino (115200 baud) - - Press buttons on a 433MHz-remote, and watch the serial monitor - -Notes: - - These transmitters often use the PT2262 IC, or equivalent. For details about - the waveforms used by these remotes, the datasheet of the PT2262 is provided. - Page 4 and 5 will be of most interest. - - -Changelog: -RemoteSwitch library v2.3.0 (20121229) for Arduino 1.0 - - Improved reception quality by filtering too short pulses. - - Dropped pre-v1.0 Arduino support. - - Added RemoteReceiver::deinit() - -RemoteSwitch library v2.2.1 (20120314) for Arduino 0022/1.0 - - Fixed Elro code, it caused memory corruption. - - Renamed old-style .pde files to new-style .ino - -RemoteSwitch library v2.2.0 (20120213) for Arduino 0022/1.0 - - Added support for Elro switches (http://www.elro.eu/en/m/products/category/home_automation/home_control) - (untested; I don't have these kind of devices) - - Allowed the number of repeated signals transmitted by RemoteTransmitter to be - changed. - - By default, 16 instead of 8 repeats are sent. - - Support for Arduino 1.0. - - Added Datasheet PT2262, which (or equivalent) is often used in the transmitters. - - RemoteReceiver::isReceiving timeout changed to 150ms; 100ms was too short. - -RemoteSwitch library v2.1.1 (20110920) for Arduino 0022 - - Improved RemoteReceiver::isReceiving - -RemoteSwitch library v2.1.0 (20110919) for Arduino 0022 - - Changed classnames from *Switch to *Transmitter - - Added RemoteTransmitter::sendCode. See example "retransmitter". - - RemoteReceiver::interruptHandler() is now public, for use with InterruptChain - -RemoteSwitch library v2.0.0 (20100130) for Arduino 0017 - - Complete rewrite; can now receive and decode signals directly from - the receiver's digital out. \ No newline at end of file diff --git a/libraries/RemoteSwitch/RemoteReceiver.cpp b/libraries/RemoteSwitch/RemoteReceiver.cpp deleted file mode 100644 index fe5421f..0000000 --- a/libraries/RemoteSwitch/RemoteReceiver.cpp +++ /dev/null @@ -1,193 +0,0 @@ -/* - * RemoteSwitch library v2.3.0 (20121229) made by Randy Simons http://randysimons.nl/ - * See RemoteReceiver.h for details. - * - * License: GPLv3. See license.txt - */ - -#include "RemoteReceiver.h" - - -/************ -* RemoteReceiver -************/ - -int8_t RemoteReceiver::_interrupt; -volatile int8_t RemoteReceiver::_state; -byte RemoteReceiver::_minRepeats; -RemoteReceiverCallBack RemoteReceiver::_callback; -boolean RemoteReceiver::_inCallback = false; -boolean RemoteReceiver::_enabled = false; - -void RemoteReceiver::init(int8_t interrupt, byte minRepeats, RemoteReceiverCallBack callback) { - _interrupt = interrupt; - _minRepeats = minRepeats; - _callback = callback; - - enable(); - if (_interrupt >= 0) { - attachInterrupt(_interrupt, interruptHandler, CHANGE); - } -} - -void RemoteReceiver::enable() { - _state = -1; - _enabled = true; -} - -void RemoteReceiver::disable() { - _enabled = false; -} - -void RemoteReceiver::deinit() { - _enabled = false; - if (_interrupt >= 0) { - detachInterrupt(_interrupt); - } -} - -void RemoteReceiver::interruptHandler() { - if (!_enabled) { - return; - } - - static unsigned int period; // Calculated duration of 1 period - static byte receivedBit; // Contains "bit" currently receiving - static unsigned long receivedCode; // Contains received code - static unsigned long previousCode; // Contains previous received code - static byte repeats = 0; // The number of times the an identical code is received in a row. - static unsigned long edgeTimeStamp[3] = {0, }; // Timestamp of edges - static unsigned int min1Period, max1Period, min3Period, max3Period; - static bool skip; - - // Filter out too short pulses. This method works as a low pass filter. - edgeTimeStamp[1] = edgeTimeStamp[2]; - edgeTimeStamp[2] = micros(); - - if (skip) { - skip = false; - return; - } - - if (_state >= 0 && edgeTimeStamp[2]-edgeTimeStamp[1] < min1Period) { - // Last edge was too short. - // Skip this edge, and the next too. - skip = true; - return; - } - - unsigned int duration = edgeTimeStamp[1] - edgeTimeStamp[0]; - edgeTimeStamp[0] = edgeTimeStamp[1]; - - // Note that if state>=0, duration is always >= 1 period. - - if (_state==-1) { // Waiting for sync-signal - if (duration>3720) { // =31*120 minimal time between two edges before decoding starts. - // Sync signal received.. Preparing for decoding - period=duration/31; - receivedCode=previousCode=repeats=0; - - // Allow for large error-margin. ElCheapo-hardware :( - min1Period=period*4/10; // Avoid floating point math; saves memory. - max1Period=period*16/10; - min3Period=period*23/10; - max3Period=period*37/10; - } - else { - return; - } - } else if (_state<48) { // Decoding message - receivedBit <<= 1; - - // bit part durations can ONLY be 1 or 3 periods. - if (duration<=max1Period) { - receivedBit &= B1110; // Clear LSB of receivedBit - } - else if (duration>=min3Period && duration<=max3Period) { - receivedBit |= B1; // Set LSB of receivedBit - } - else { // Otherwise the entire sequence is invalid - _state=-1; - return; - } - - if ((_state%4)==3) { // Last bit part? - // Shift - receivedCode*=3; - - // Only 4 LSB's are used; trim the rest. - switch (receivedBit & B1111) { - case B0101: // short long short long == B0101 - // bit "0" received - receivedCode+=0; // I hope the optimizer handles this ;) - break; - case B1010: // long short long short == B1010 - // bit "1" received - receivedCode+=1; - break; - case B0110: // short long long short - // bit "f" received - receivedCode+=2; - break; - default: - // Bit was rubbish. Abort. - _state=-1; - return; - } - } - } else if (_state==48) { // Waiting for sync bit part 1 - // Must be 1 period. - if (duration>max1Period) { - _state=-1; - return; - } - } else { // Waiting for sync bit part 2 - // Must be 31 periods. - if (durationperiod*36) { - _state=-1; - return; - } - - // receivedCode is a valid code! - - if (receivedCode!=previousCode) { - repeats=0; - previousCode=receivedCode; - } - - repeats++; - - if (repeats>=_minRepeats) { - if (!_inCallback) { - _inCallback = true; - (_callback)(receivedCode, period); - _inCallback = false; - } - // Reset after callback. - _state=-1; - return; - } - - // Reset for next round - receivedCode = 0; - _state=0; // no need to wait for another sync-bit! - return; - } - - _state++; - return; -} - -boolean RemoteReceiver::isReceiving(int waitMillis) { - unsigned long startTime=millis(); - - int waited; // Signed int! - do { - if (_state == 48) { // Abort if a valid code has been received in the mean time - return true; - } - waited = (millis()-startTime); - } while(waited>=0 && waited <= waitMillis); // Yes, clock wraps every 50 days. And then you'd have to wait for a looooong time. - - return false; -} diff --git a/libraries/RemoteSwitch/RemoteReceiver.h b/libraries/RemoteSwitch/RemoteReceiver.h deleted file mode 100644 index f965d9e..0000000 --- a/libraries/RemoteSwitch/RemoteReceiver.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - * RemoteSwitch library v2.3.0 (20121229) made by Randy Simons http://randysimons.nl/ - * - * License: GPLv3. See license.txt - */ - -#ifndef RemoteReceiver_h -#define RemoteReceiver_h - -#include - -typedef void (*RemoteReceiverCallBack)(unsigned long, unsigned int); - -/** -* See RemoteSwitch for introduction. -* -* RemoteReceiver decodes the signal received from a 433MHz-receiver, like the "KlikAanKlikUit"-system -* as well as the signal sent by the RemoteSwtich class. When a correct signal is received, -* a user-defined callback function is called. -* -* Note that in the callback function, the interrupts are still disabled. You can enabled them, if needed. -* A call to the callback must b finished before RemoteReceiver will call the callback function again, thus -* there is no re-entrant problem. -* -* When sending your own code using RemoteSwich, disable() the receiver first. -* -* This is a pure static class, for simplicity and to limit memory-use. -*/ - -class RemoteReceiver { - public: - /** - * Initializes the decoder. - * - * If interrupt >= 0, init will register pin to this library. - * If interrupt < 0, no interrupt is registered. In that case, you have to call interruptHandler() - * yourself whenever the output of the receiver changes, or you can use InterruptChain. - * - * @param interrupt The interrupt as is used by Arduino's attachInterrupt function. See attachInterrupt for details. - If < 0, you must call interruptHandler() yourself. - * @param minRepeats The number of times the same code must be received in a row before the callback is calles - * @param callback Pointer to a callback function, with signature void (*func)(unsigned long, unsigned int). First parameter is the decoded data, the second the period of the timing. - */ - static void init(int8_t interrupt, byte minRepeats, RemoteReceiverCallBack callback); - - /** - * Enable decoding. No need to call enable() after init(). - */ - static void enable(); - - /** - * Disable decoding. You can re-enable decoding by calling enable(); - */ - static void disable(); - - /** - * Deinitializes the decoder. Disables decoding and detaches the interrupt handler. If you want to - * re-enable decoding, call init() again. - */ - static void deinit(); - - /** - * Tells wether a signal is being received. If a compatible signal is detected within the time out, isReceiving returns true. - * Since it makes no sense to transmit while another transmitter is active, it's best to wait for isReceiving() to false. - * By default it waits for 150ms, in which a (relative slow) KaKu signal can be broadcasted three times. - * - * Note: isReceiving() depends on interrupts enabled. Thus, when disabled()'ed, or when interrupts are disabled (as is - * the case in the callback), isReceiving() will not work properly. - * - * @param waitMillis number of milliseconds to monitor for signal. - * @return boolean If after waitMillis no signal was being processed, returns false. If before expiration a signal was being processed, returns true. - */ - static boolean isReceiving(int waitMillis = 150); - - static void interruptHandler(); - - private: - - static int8_t _interrupt; // Radio input interrupt - volatile static int8_t _state; // State of decoding process. There are 49 states, 1 for "waiting for signal" and 48 for decoding the 48 edges in a valid code. - static byte _minRepeats; - static RemoteReceiverCallBack _callback; - static boolean _inCallback; // When true, the callback function is being executed; prevents re-entrance. - static boolean _enabled; // If true, monitoring and decoding is enabled. If false, interruptHandler will return immediately. - -}; - -#endif diff --git a/libraries/RemoteSwitch/RemoteTransmitter.cpp b/libraries/RemoteSwitch/RemoteTransmitter.cpp deleted file mode 100644 index 648b5a8..0000000 --- a/libraries/RemoteSwitch/RemoteTransmitter.cpp +++ /dev/null @@ -1,306 +0,0 @@ -/* - * RemoteSwitch library v2.3.0 (20121229) made by Randy Simons http://randysimons.nl/ - * See RemoteTransmitter.h for details. - * - * License: GPLv3. See license.txt - */ - -#include "RemoteTransmitter.h" - - -/************ -* RemoteTransmitter -************/ - -RemoteTransmitter::RemoteTransmitter(byte pin, unsigned int periodusec, byte repeats) { - _pin=pin; - _periodusec=periodusec; - _repeats=repeats; - - pinMode(_pin, OUTPUT); -} - -unsigned long RemoteTransmitter::encodeTelegram(byte trits[]) { - unsigned long data = 0; - - // Encode data - for (byte i=0;i<12;i++) { - data*=3; - data+=trits[i]; - } - - // Encode period duration - data |= (unsigned long)_periodusec << 23; - - // Encode repeats - data |= (unsigned long)_repeats << 20; - - return data; -} - -void RemoteTransmitter::sendTelegram(byte trits[]) { - sendTelegram(encodeTelegram(trits),_pin); -} - -/** -* Format data: -* pppppppp|prrrdddd|dddddddd|dddddddd (32 bit) -* p = perioud (9 bit unsigned int -* r = repeats as 2log. Thus, if r = 3, then signal is sent 2^3=8 times -* d = data -*/ -void RemoteTransmitter::sendTelegram(unsigned long data, byte pin) { - unsigned int periodusec = (unsigned long)data >> 23; - byte repeats = ((unsigned long)data >> 20) & B111; - - sendCode(pin, data, periodusec, repeats); -} - -void RemoteTransmitter::sendCode(byte pin, unsigned long code, unsigned int periodusec, byte repeats) { - code &= 0xfffff; // Truncate to 20 bit ; - // Convert the base3-code to base4, to avoid lengthy calculations when transmitting.. Messes op timings. - // Also note this swaps endianess in the process. The MSB must be transmitted first, but is converted to - // LSB here. This is easier when actually transmitting later on. - unsigned long dataBase4 = 0; - - for (byte i=0; i<12; i++) { - dataBase4<<=2; - dataBase4|=(code%3); - code/=3; - } - - repeats = 1 << (repeats & B111); // repeats := 2^repeats; - - for (byte j=0;j>=2; - } - - // Send termination/synchronization-signal. Total length: 32 periods - digitalWrite(pin, HIGH); - delayMicroseconds(periodusec); - digitalWrite(pin, LOW); - delayMicroseconds(periodusec*31); - } -} - -boolean RemoteTransmitter::isSameCode(unsigned long encodedTelegram, unsigned long receivedData) { - return (receivedData==(encodedTelegram & 0xFFFFF)); // compare the 20 LSB's -} - - -/************ -* ActionTransmitter -************/ - -ActionTransmitter::ActionTransmitter(byte pin, unsigned int periodusec, byte repeats) : RemoteTransmitter(pin,periodusec,repeats) { - // Call constructor -} - - -void ActionTransmitter::sendSignal(byte systemCode, char device, boolean on) { - sendTelegram(getTelegram(systemCode,device,on), _pin); -} - -unsigned long ActionTransmitter::getTelegram(byte systemCode, char device, boolean on) { - byte trits[12]; - - device-=65; - - for (byte i=0; i<5; i++) { - // Trits 0-4 contain address (2^5=32 addresses) - trits[i]=(systemCode & 1)?1:2; - systemCode>>=1; - - // Trits 5-9 contain device. Only one trit has value 0, others have 2 (float)! - trits[i+5]=(i==device?0:2); - } - - // Switch on or off - trits[10]=(!on?0:2); - trits[11]=(on?0:2); - - return encodeTelegram(trits); -} - -/************ -* BlokkerTransmitter -************/ - -BlokkerTransmitter::BlokkerTransmitter(byte pin, unsigned int periodusec, byte repeats) : RemoteTransmitter(pin,periodusec,repeats) { - // Call constructor -} - - -void BlokkerTransmitter::sendSignal(byte device, boolean on) { - sendTelegram(getTelegram(device,on), _pin); -} - -unsigned long BlokkerTransmitter::getTelegram(byte device, boolean on) { - byte trits[12]={0}; - - device--; - - for (byte i=1; i<4; i++) { - // Trits 1-3 contain device - trits[i]=(device & 1)?0:1; - device>>=1; - } - - // Switch on or off - trits[8]=(on?1:0); - - return encodeTelegram(trits); -} - -/************ -* KaKuTransmitter -************/ - -KaKuTransmitter::KaKuTransmitter(byte pin, unsigned int periodusec, byte repeats) : RemoteTransmitter(pin,periodusec,repeats) { - // Call constructor -} - -void KaKuTransmitter::sendSignal(char address, byte device, boolean on) { - sendTelegram(getTelegram(address, device, on), _pin); -} - -unsigned long KaKuTransmitter::getTelegram(char address, byte device, boolean on) { - byte trits[12]; - - address-=65; - device-=1; - - for (byte i=0; i<4; i++) { - // Trits 0-3 contain address (2^4 = 16 addresses) - trits[i]=(address & 1)?2:0; - address>>=1; - - // Trits 4-8 contain device (2^4 = 16 addresses) - trits[i+4]=(device & 1)?2:0; - device>>=1; - } - - // Trits 8-10 seem to be fixed - trits[8]=0; - trits[9]=2; - trits[10]=2; - - // Switch on or off - trits[11]=(on?2:0); - - return encodeTelegram(trits); -} - -void KaKuTransmitter::sendSignal(char address, byte group, byte device, boolean on) { - (void)device; - sendTelegram(getTelegram(address, group, on), _pin); -} - -unsigned long KaKuTransmitter::getTelegram(char address, byte group, byte device, boolean on) { - byte trits[12], i; - - address-=65; - group-=1; - device-=1; - - // Address. M3E Pin A0-A3 - for (i=0; i<4; i++) { - // Trits 0-3 contain address (2^4 = 16 addresses) - trits[i]=(address & 1)?2:0; - address>>=1; - } - - // Device. M3E Pin A4-A5 - for (; i<6; i++) { - trits[i]=(device & 1)?2:0; - device>>=1; - } - - // Group. M3E Pin A6-A7 - for (; i<8; i++) { - trits[i]=(group & 1)?2:0; - group>>=1; - } - - // Trits 8-10 are be fixed. M3E Pin A8/D0-A10/D2 - trits[8]=0; - trits[9]=2; - trits[10]=2; - - // Switch on or off, M3E Pin A11/D3 - trits[11]=(on?2:0); - - return encodeTelegram(trits); -} - - -/************ -* ElroTransmitter -************/ - -ElroTransmitter::ElroTransmitter(byte pin, unsigned int periodusec, byte repeats) : RemoteTransmitter(pin, periodusec, repeats) { - //Call constructor -} - -void ElroTransmitter::sendSignal(byte systemCode, char device, boolean on) { - sendTelegram(getTelegram(systemCode, device, on), _pin); -} - -unsigned long ElroTransmitter::getTelegram(byte systemCode, char device, boolean on) { - byte trits[12]; - - device-=65; - - for (byte i=0; i<5; i++) { - //trits 0-4 contain address (2^5=32 addresses) - trits[i]=(systemCode & 1)?0:2; - systemCode>>=1; - - //trits 5-9 contain device. Only one trit has value 0, others have 2 (float)! - trits[i+5]=(i==device?0:2); - } - - //switch on or off - trits[10]=(on?0:2); - trits[11]=(!on?0:2); - - return encodeTelegram(trits); -} diff --git a/libraries/RemoteSwitch/RemoteTransmitter.h b/libraries/RemoteSwitch/RemoteTransmitter.h deleted file mode 100644 index 4916e6c..0000000 --- a/libraries/RemoteSwitch/RemoteTransmitter.h +++ /dev/null @@ -1,249 +0,0 @@ -/* - * RemoteSwitch library v2.3.0 (20121229) made by Randy Simons http://randysimons.nl/ - * - * License: GPLv3. See license.txt - */ - -#ifndef RemoteTransmitter_h -#define RemoteTransmitter_h - -#include - -/** -* RemoteTransmitter provides a generic class for simulation of common RF remote controls, like the 'Klik aan Klik uit'-system -* (http://www.klikaanklikuit.nl/), used to remotely switch lights etc. -* -* Many of these remotes seem to use a 433MHz SAW resonator and one of these chips: LP801B, HX2262, PT2262, M3E. -* Datasheet for the HX2262/PT2262 ICs: -* http://www.princeton.com.tw/downloadprocess/downloadfile.asp?mydownload=PT2262_1.pdf -* -* Hardware required for this library: a 433MHz/434MHz SAW oscillator transmitter, e.g. -* http://www.sparkfun.com/products/10534 -* http://www.conrad.nl/goto/?product=130428 -* -* Notes: -* - Since these chips use (and send!) tri-state inputs (low, high and floating) I use 'trits' instead of 'bits', -* when appropriate. -* - I measured the period lengths with a scope. Thus: they work for my remotes, but may fail for yours... -* A better way would be to calculate the 'target'-timings using the datasheets and the resistor-values on the remotes. -*/ -class RemoteTransmitter { - public: - /** - * Constructor. - * - * To obtain the correct period length, an oscilloscope is convenient, but you can also read the - * datasheet of the transmitter, measure the resistor for the oscillator and calculate the frequency. - * - * @param pin output pin on Arduino to which the transmitter is connected - * @param periodusec [0..511] Duration of one period, in microseconds. A trit is 6 periods. - * @param repeats [0..7] The 2log-Number of times the signal is repeated. The actual number of repeats will be 2^repeats. 2 would be bare minimum, 4 seems robust. - */ - RemoteTransmitter(byte pin, unsigned int periodusec, byte repeats); - - /** - * Encodes the data base on the current object and the given trits. The data can be reused, e.g. - * for use with the static version of sendTelegram, so you won't need to instantiate costly objects! - * - * @return The data suited for use with RemoteTransmitter::sendTelegram. - */ - unsigned long encodeTelegram(byte trits[]); - - /** - * Send a telegram, including synchronization-part. - * - * @param trits Array of size 12. "trits" should be either 0, 1 or 2, where 2 indicates "float" - */ - void sendTelegram(byte trits[]); - - /** - * Send a telegram, including synchronization-part. The data-param encodes the period duration, number of repeats and the actual data. - * Note: static method, which allows for use in low-mem situations. - * - * Format data: - * pppppppp|prrrdddd|dddddddd|dddddddd (32 bit) - * p = period (9 bit unsigned integer) - * r = repeats as 2log. Thus, if r = 3, then signal is sent 2^3=8 times - * d = data - * - * @param data data, period and repeats. - * @param pin Pin number of the transmitter. - */ - static void sendTelegram(unsigned long data, byte pin); - - /** - * The complement of RemoteReceiver. Send a telegram with specified code as data. - * - * Note: static method, which allows for use in low-mem situations. - * - * @param pin output pin on Arduino to which the transmitter is connected - * @param periodusec [0..511] Duration of one period, in microseconds. A trit is 6 periods. - * @param repeats [0..7] The 2log-Number of times the signal is repeated. The actual number of repeats will be 2^repeats. 2 would be bare minimum, 4 seems robust. - * @param code The code to transmit. Note: only the first 20 bits are used, the rest is ignored. Also see sendTelegram. - */ - static void sendCode(byte pin, unsigned long code, unsigned int periodusec, byte repeats); - - /** - * Compares the data received with RemoteReceive with the data obtained by one of the getTelegram-functions. - * Period duration and repetitions are ignored by this function; only the data-payload is compared. - * - * @return true, if the codes are identical (the 20 least significant bits match) - */ - static boolean isSameCode(unsigned long encodedTelegram, unsigned long receivedData); - - protected: - byte _pin; // Transmitter output pin - unsigned int _periodusec; // Oscillator period in microseconds - byte _repeats; // Number over repetitions of one telegram -}; - -/** -* ActionTransmitter simulates a remote, as sold in the Dutch 'Action' stores. But there are many similar systems on the market. -* If your remote has setting for 5 address bits, and can control 5 devices on or off, then you can try to use the ActionTransmitter. -* Otherwise you may have luck with the ElroTransmitter, which is similar. -*/ -class ActionTransmitter: RemoteTransmitter { - public: - /** - * Constructor - * - * @param pin output pin on Arduino to which the transmitter is connected - * @param periodsec Duration of one period, in microseconds. Default is 190usec - * @param repeats [0..7] The 2log-Number of times the signal is repeated. - * @see RemoteTransmitter - */ - ActionTransmitter(byte pin, unsigned int periodusec=190, byte repeats=4); - - /** - * Send a on or off signal to a device. - * - * @param systemCode 5-bit address (dip switches in remote). Range [0..31] - * @param device Device to switch. Range: [A..E] (case sensitive!) - * @param on True, to switch on. False to switch off, - */ - void sendSignal(byte systemCode, char device, boolean on); - - /** - * Generates the telegram (data) which can be used for RemoteTransmitter::sendTelegram. - * See sendSignal for details on the parameters - * - * @return Encoded data, including repeats and period duration. - */ - unsigned long getTelegram(byte systemCode, char device, boolean on); -}; - -/** -* BlokkerTransmitter simulates a remote, as sold in the Dutch 'Blokker' stores. But there are many similar systems on the market. -* These remotes have 4 on, 4 off buttons and a switch to switch between device 1-4 and 5-8. No further configuration -* possible. -*/ -class BlokkerTransmitter: RemoteTransmitter { - public: - /** - * Constructor - * - * @param pin output pin on Arduino to which the transmitter is connected - * @param periodsec Duration of one period, in microseconds. Default is 307usec - * @param repeats [0..7] The 2log-Number of times the signal is repeated. - * @see RemoteTransmitter - */ - BlokkerTransmitter(byte pin, unsigned int periodusec=230, byte repeats=4); - - /** - * Send a on or off signal to a device. - * - * @param device Device to switch. Range: [1..8] - * @param on True, to switch on. False to switch off, - */ - void sendSignal(byte device, boolean on); - - /** - * @see RemoteTransmitter::getTelegram - */ - unsigned long getTelegram(byte device, boolean on); -}; - -/** -* KaKuTransmitter simulates a KlikAanKlikUit-remote, but there are many clones. -* If your transmitter has a address dial with the characters A till P, you can try this class. -*/ -class KaKuTransmitter: RemoteTransmitter { - public: - /** - * Constructor - * - * @param pin output pin on Arduino to which the transmitter is connected - * @param periodsec Duration of one period, in microseconds. Default is 375usec - * @param repeats [0..7] The 2log-Number of times the signal is repeated. - * @see RemoteTransmitter - */ - KaKuTransmitter(byte pin, unsigned int periodusec=375, byte repeats=4); - - /** - * Send a on or off signal to a device. - * - * @param address address (dial switches in remote). Range [A..P] (case sensitive!) - * @param group Group to switch. Range: [1..4] - * @param device Device to switch. Range: [1..4] - * @param on True, to switch on. False to switch off, - */ - void sendSignal(char address, byte group, byte device, boolean on); - - /** - * Send a on or off signal to a device. - * - * @param address address (dip switches in remote). Range [A..P] (case sensitive!) - * @param device device (dial switches in remote). Range [1..16] - * @param on True, to switch on. False to switch off, - */ - void sendSignal(char address, byte device, boolean on); - - /** - * @see RemoteTransmitter::getTelegram - */ - unsigned long getTelegram(char address, byte group, byte device, boolean on); - - /** - * @see RemoteTransmitter::getTelegram - */ - unsigned long getTelegram(char address, byte device, boolean on); -}; - -/** -* ElroTransmitter simulates remotes of the Elro "Home Control" series -* see http://www.elro.eu/en/m/products/category/home_automation/home_control -* There are are many similar systems on the market. If your remote has setting for 5 address bits, and can control -* 4 devices on or off, then you can try to use the ElroTransmitter. Otherwise you may have luck with the -* ActionTransmitter, which is similar. -*/ -class ElroTransmitter: RemoteTransmitter { - public: - /** - * Constructor - * - * @param pin output pin on Arduino to which the transmitter is connected - * @param periodsec Duration of one period, in microseconds. Default is 320usec - * @param repeats [0..7] The 2log-Number of times the signal is repeated. - * @see RemoteSwitch - */ - ElroTransmitter(byte pin, unsigned int periodusec=320, byte repeats=4); - - /** - * Send a on or off signal to a device. - * - * @param systemCode 5-bit address (dip switches in remote). Range [0..31] - * @param device Device to switch. Range: [A..D] (case sensitive!) - * @param on True, to switch on. False to switch off, - */ - void sendSignal(byte systemCode, char device, boolean on); - - /** - * Generates the telegram (data) which can be used for RemoteSwitch::sendTelegram. - * See sendSignal for details on the parameters - * - * @return Encoded data, including repeats and period duration. - */ - unsigned long getTelegram(byte systemCode, char device, boolean on); -}; - -#endif diff --git a/libraries/RemoteSwitch/docs/Datasheet PT2262 (encoder for transmitter).pdf b/libraries/RemoteSwitch/docs/Datasheet PT2262 (encoder for transmitter).pdf deleted file mode 100644 index f5d2770..0000000 Binary files a/libraries/RemoteSwitch/docs/Datasheet PT2262 (encoder for transmitter).pdf and /dev/null differ diff --git a/libraries/RemoteSwitch/docs/hardware setup.jpg b/libraries/RemoteSwitch/docs/hardware setup.jpg deleted file mode 100644 index bea017e..0000000 Binary files a/libraries/RemoteSwitch/docs/hardware setup.jpg and /dev/null differ diff --git a/libraries/RemoteSwitch/examples/LightShow/LightShow.ino b/libraries/RemoteSwitch/examples/LightShow/LightShow.ino deleted file mode 100644 index f52f969..0000000 --- a/libraries/RemoteSwitch/examples/LightShow/LightShow.ino +++ /dev/null @@ -1,63 +0,0 @@ -/* -* Demo for RF remote switch transmitter. -* For details, see RemoteTransmitter.h! -* -* This sketch switches some devices on and off in a loop. -* -* Setup: -* - Connect a 433MHz transmitter to digital pin 11. -*/ - -#include - -// Intantiate a new ActionTransmitter remote, use pin 11 -ActionTransmitter actionTransmitter(11); - -// Intantiate a new KaKuTransmitter remote, also use pin 11 (same transmitter!) -KaKuTransmitter kaKuTransmitter(11); - -// Intantiate a new Blokker remote, also use pin 11 (same transmitter!) -BlokkerTransmitter blokkerTransmitter(11); - -// Intantiate a new Elro remote, also use pin 11 (same transmitter!) -ElroTransmitter elroTransmitter(11); - - -void setup() { -} - -void loop() { - // Switch off KaKu-device 10 on address M - kaKuTransmitter.sendSignal('M',10,false); - - // Switch on Action-device B on system code 1. - actionTransmitter.sendSignal(1,'B',true); - - // Switch on Blokker-device 7. - blokkerTransmitter.sendSignal(7,true); - - // Switch on Elro-device C on system code 1. - elroTransmitter.sendSignal(1,'C',true); - - - // Wait 2 seconds - delay(2000); - - - - // Switch on KaKu-device 2 of group 3 on address M (which is the same as device 10 on address M!) - kaKuTransmitter.sendSignal('M',3,2,true); - - // Switch off Action-device B on system code 1. - actionTransmitter.sendSignal(1,'B',false); - - // Switch off Blokker-device 7. - blokkerTransmitter.sendSignal(7,false); - - // Switch off Elro-device C on system code 1. - elroTransmitter.sendSignal(1,'C',false); - - - // Wait 4 seconds - delay(4000); -} diff --git a/libraries/RemoteSwitch/examples/RemoteTranslator/RemoteTranslator.ino b/libraries/RemoteSwitch/examples/RemoteTranslator/RemoteTranslator.ino deleted file mode 100644 index d29eed6..0000000 --- a/libraries/RemoteSwitch/examples/RemoteTranslator/RemoteTranslator.ino +++ /dev/null @@ -1,58 +0,0 @@ -/* -* Demo for RF remote switch receiver. -* For details, see RemoteReceiver.h! -* -* This sketch "translates" an Action-remote to a Blokker-remote. -* When the A-On-button of the Action-remote is pressed, the Blokker-devices -* 5, 6 and 7 are switched on. The A-Off-button switches the devices off again. -* -* Connect the transmitter to digital pin 11, and the receiver to digital pin 2. -*/ - -#include -#include - -ActionTransmitter actionTransmitter(11); -BlokkerTransmitter blokkerTransmitter(11); - -// Prepare the code for switch A (system code 1) on and off, for easy comparision later. -unsigned long actionAOn = actionTransmitter.getTelegram(1,'A',true); -unsigned long actionAOff = actionTransmitter.getTelegram(1,'A',false); - -void setup() { - // See example Show_received_code for info on this - RemoteReceiver::init(0, 3, translateCode); -} - -void loop() { -} - -// Callback function is called only when a valid code is received. -void translateCode(unsigned long receivedCode, unsigned int period) { - // Enabled interrupts, so RemoteReceiver::isReceiving() can be used. - interrupts(); - - // Compare the signals - if (RemoteTransmitter::isSameCode(actionAOn, receivedCode)) { - // A-On-button pressed! - - // Wait for a free ether - while(RemoteReceiver::isReceiving()); - - // Switch devices on - blokkerTransmitter.sendSignal(5,true); - blokkerTransmitter.sendSignal(6,true); - blokkerTransmitter.sendSignal(7,true); - - } else if (RemoteTransmitter::isSameCode(actionAOff, receivedCode)) { - // A-Off-button pressed! - - // Wait for a free ether - while(RemoteReceiver::isReceiving()); - - // Switch devices off - blokkerTransmitter.sendSignal(5,false); - blokkerTransmitter.sendSignal(6,false); - blokkerTransmitter.sendSignal(7,false); - } -} diff --git a/libraries/RemoteSwitch/examples/Retransmitter/Retransmitter.ino b/libraries/RemoteSwitch/examples/Retransmitter/Retransmitter.ino deleted file mode 100644 index 3263785..0000000 --- a/libraries/RemoteSwitch/examples/Retransmitter/Retransmitter.ino +++ /dev/null @@ -1,40 +0,0 @@ -/* -* Demo for RF remote switch receiver. -* For details, see RemoteReceiver.h! -* -* This sketch demonstrates how to use the static version of -* RemoteReceiver::sendCode, which can be used in low-memory -* situations. -* -* Connect the transmitter to digital pin 11, and the receiver to digital pin 2. -* -* When run, this sketch waits for a valid code from the receiver, decodes it, -* and retransmits it after 5 seconds. -*/ - -#include -#include - -void setup() { - // See example Show_received_code for info on this - RemoteReceiver::init(0, 3, retransmitter); -} - -void loop() { -} - -void retransmitter(unsigned long receivedCode, unsigned int period) { - // Disable the receiver; otherwise it might pick up the retransmit as well. - RemoteReceiver::disable(); - - // Need interrupts for delay() - interrupts(); - - // Wait 5 seconds before sending. - delay(5000); - - // Retransmit the signal 8 times ( == 2^3) on pin 11. Note: no object was created! - RemoteTransmitter::sendCode(11, receivedCode, period, 3); - - RemoteReceiver::enable(); -} diff --git a/libraries/RemoteSwitch/examples/ShowReceivedCode/ShowReceivedCode.ino b/libraries/RemoteSwitch/examples/ShowReceivedCode/ShowReceivedCode.ino deleted file mode 100644 index eb3cebf..0000000 --- a/libraries/RemoteSwitch/examples/ShowReceivedCode/ShowReceivedCode.ino +++ /dev/null @@ -1,38 +0,0 @@ -/* -* Demo for RF remote switch receiver. -* For details, see RemoteReceiver.h! -* -* This sketch shows the received signals on the serial port. -* Connect the receiver to digital pin 2. -*/ - -#include - -void setup() { - Serial.begin(115200); - - // Initialize receiver on interrupt 0 (= digital pin 2), calls the callback "showCode" - // after 3 identical codes have been received in a row. (thus, keep the button pressed - // for a moment) - // - // See the interrupt-parameter of attachInterrupt for possible values (and pins) - // to connect the receiver. - RemoteReceiver::init(0, 3, showCode); -} - -void loop() { -} - -// Callback function is called only when a valid code is received. -void showCode(unsigned long receivedCode, unsigned int period) { - // Note: interrupts are disabled. You can re-enable them if needed. - - // Print the received code. - Serial.print("Code: "); - Serial.print(receivedCode); - Serial.print(", period duration: "); - Serial.print(period); - Serial.println("us."); -} - - diff --git a/libraries/RemoteSwitch/keywords.txt b/libraries/RemoteSwitch/keywords.txt deleted file mode 100644 index ece29b0..0000000 --- a/libraries/RemoteSwitch/keywords.txt +++ /dev/null @@ -1,15 +0,0 @@ -RemoteTransmitter KEYWORD1 -ActionTransmitter KEYWORD1 -BlokkerTransmitter KEYWORD1 -KaKuTransmitter KEYWORD1 -ElroTransmitter KEYWORD1 -sendTelegram KEYWORD2 -sendCode KEYWORD2 -sendSignal KEYWORD2 -isSameCode KEYWORD2 -RemoteReceiver KEYWORD1 -init KEYWORD2 -enable KEYWORD2 -disable KEYWORD2 -deinit KEYWORD2 -isReceiving KEYWORD2 \ No newline at end of file diff --git a/libraries/RemoteSwitch/license.txt b/libraries/RemoteSwitch/license.txt deleted file mode 100644 index 94a9ed0..0000000 --- a/libraries/RemoteSwitch/license.txt +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/libraries/RunningAverage/RunningAverage.cpp b/libraries/RunningAverage/RunningAverage.cpp deleted file mode 100644 index ae26b8b..0000000 --- a/libraries/RunningAverage/RunningAverage.cpp +++ /dev/null @@ -1,101 +0,0 @@ -// -// FILE: RunningAverage.cpp -// AUTHOR: Rob Tillaart -// VERSION: 0.2.08 -// DATE: 2015-apr-10 -// PURPOSE: RunningAverage library for Arduino -// -// The library stores N individual values in a circular buffer, -// to calculate the running average. -// -// HISTORY: -// 0.1.00 - 2011-01-30 initial version -// 0.1.01 - 2011-02-28 fixed missing destructor in .h -// 0.2.00 - 2012-??-?? Yuval Naveh added trimValue (found on web) -// http://stromputer.googlecode.com/svn-history/r74/trunk/Arduino/Libraries/RunningAverage/RunningAverage.cpp -// 0.2.01 - 2012-11-21 refactored -// 0.2.02 - 2012-12-30 refactored trimValue -> fillValue -// 0.2.03 - 2013-11-31 getElement -// 0.2.04 - 2014-07-03 added memory protection -// 0.2.05 - 2014-12-16 changed float -> double -// 0.2.06 - 2015-03-07 all size uint8_t -// 0.2.07 - 2015-03-16 added getMin() and getMax() functions (Eric Mulder) -// 0.2.08 - 2015-04-10 refactored getMin() and getMax() implementation -// -// Released to the public domain -// - -#include "RunningAverage.h" -#include - -RunningAverage::RunningAverage(uint8_t size) -{ - _size = size; - _ar = (double*) malloc(_size * sizeof(double)); - if (_ar == NULL) _size = 0; - clear(); -} - -RunningAverage::~RunningAverage() -{ - if (_ar != NULL) free(_ar); -} - -// resets all counters -void RunningAverage::clear() -{ - _cnt = 0; - _idx = 0; - _sum = 0.0; - _min = NAN; - _max = NAN; - for (uint8_t i = 0; i < _size; i++) - { - _ar[i] = 0.0; // keeps addValue simple - } -} - -// adds a new value to the data-set -void RunningAverage::addValue(double value) -{ - if (_ar == NULL) return; // allocation error - _sum -= _ar[_idx]; - _ar[_idx] = value; - _sum += _ar[_idx]; - _idx++; - if (_idx == _size) _idx = 0; // faster than % - // handle min max - if (_cnt == 0) _min = _max = value; - else if (value < _min) _min = value; - else if (value > _max) _max = value; - // update count as last otherwise if( _cnt == 0) above will fail - if (_cnt < _size) _cnt++; -} - -// returns the average of the data-set added sofar -double RunningAverage::getAverage() -{ - if (_cnt == 0) return NAN; - return _sum / _cnt; -} - -// returns the value of an element if exist, NAN otherwise -double RunningAverage::getElement(uint8_t idx) -{ - if (idx >=_cnt ) return NAN; - return _ar[idx]; -} - -// fill the average with a value -// the param number determines how often value is added (weight) -// number should preferably be between 1 and size -void RunningAverage::fillValue(double value, uint8_t number) -{ - clear(); // TODO conditional? if (clr) clear(); - - for (uint8_t i = 0; i < number; i++) - { - addValue(value); - } -} -// END OF FILE \ No newline at end of file diff --git a/libraries/RunningAverage/RunningAverage.h b/libraries/RunningAverage/RunningAverage.h deleted file mode 100644 index c17240a..0000000 --- a/libraries/RunningAverage/RunningAverage.h +++ /dev/null @@ -1,56 +0,0 @@ -// -// FILE: RunningAverage.h -// AUTHOR: Rob dot Tillaart at gmail dot com -// VERSION: 0.2.08 -// DATE: 2015-apr-10 -// PURPOSE: RunningAverage library for Arduino -// URL: http://arduino.cc/playground/Main/RunningAverage -// HISTORY: See RunningAverage.cpp -// -// Released to the public domain -// -// backwards compatibility -// clr() clear() -// add(x) addValue(x) -// avg() getAverage() - -#ifndef RunningAverage_h -#define RunningAverage_h - -#define RUNNINGAVERAGE_LIB_VERSION "0.2.08" - -#include "Arduino.h" - -class RunningAverage -{ -public: - RunningAverage(void); - RunningAverage(uint8_t); - ~RunningAverage(); - - void clear(); - void addValue(double); - void fillValue(double, uint8_t); - - double getAverage(); - // returns lowest value added to the data-set since last clear - double getMin() { return _min; }; - // returns highest value added to the data-set since last clear - double getMax() { return _max; }; - - double getElement(uint8_t idx); - uint8_t getSize() { return _size; } - uint8_t getCount() { return _cnt; } - -protected: - uint8_t _size; - uint8_t _cnt; - uint8_t _idx; - double _sum; - double * _ar; - double _min; - double _max; -}; - -#endif -// END OF FILE \ No newline at end of file diff --git a/libraries/RunningAverage/examples/fillValue/fillValue.ino b/libraries/RunningAverage/examples/fillValue/fillValue.ino deleted file mode 100644 index aaf8900..0000000 --- a/libraries/RunningAverage/examples/fillValue/fillValue.ino +++ /dev/null @@ -1,38 +0,0 @@ -// -// FILE: fillValue.pde -// AUTHOR: Rob Tillaart -// DATE: 2012-12-30 -// -// PUPROSE: show working of fillValue -// - -#include "RunningAverage.h" - -RunningAverage myRA(10); -int samples = 0; - -void setup(void) -{ - Serial.begin(115200); - Serial.print("Demo RunningAverage lib - fillValue "); - Serial.print("Version: "); - Serial.println(RUNNINGAVERAGE_LIB_VERSION); - - myRA.fillValue(100,5); -} - -void loop(void) -{ - long rn = random(0, 100); - myRA.addValue(rn/100.0); - samples++; - Serial.print("Running Average: "); - Serial.println(myRA.getAverage(), 4); - - if (samples == 300) - { - samples = 0; - myRA.fillValue(100, 10); - } - delay(100); -} \ No newline at end of file diff --git a/libraries/RunningAverage/examples/ra_MinMaxTest/ra_MinMaxTest.ino b/libraries/RunningAverage/examples/ra_MinMaxTest/ra_MinMaxTest.ino deleted file mode 100644 index 437251a..0000000 --- a/libraries/RunningAverage/examples/ra_MinMaxTest/ra_MinMaxTest.ino +++ /dev/null @@ -1,46 +0,0 @@ -// -// FILE: runningAverageMinMaxTest.ino -// AUTHOR: Rob Tillaart -// VERSION: 0.1.00 -// DATE: 2015-apr-10 -// -// PUPROSE: demo -// - -#include "RunningAverage.h" - -RunningAverage myRA(10); -int samples = 0; - -void setup(void) -{ - Serial.begin(115200); - Serial.println("\nDemo runningAverageMinMaxTest"); - Serial.print("Version: "); - Serial.println(RUNNINGAVERAGE_LIB_VERSION); - myRA.clear(); // explicitly start clean - - Serial.println("\nCNT\tMIN\tAVG\tMAX"); -} - -void loop(void) -{ - long rn = random(0, 1000); - myRA.addValue(rn * 0.001); - samples++; - Serial.print(samples); - Serial.print("\t"); - Serial.print(myRA.getMin(), 3); - Serial.print("\t"); - Serial.print(myRA.getAverage(), 3); - Serial.print("\t"); - Serial.println(myRA.getMax(), 3); - - if (samples == 100) - { - samples = 0; - myRA.clear(); - Serial.println("\nCNT\tMIN\tAVG\tMAX"); - } - delay(10); -} diff --git a/libraries/RunningAverage/examples/ra_hour/ra_hour.ino b/libraries/RunningAverage/examples/ra_hour/ra_hour.ino deleted file mode 100644 index 09d9214..0000000 --- a/libraries/RunningAverage/examples/ra_hour/ra_hour.ino +++ /dev/null @@ -1,40 +0,0 @@ -// -// FILE: runningAverageHour.pde -// AUTHOR: Rob Tillaart -// DATE: 2012-12-30 -// -// PUPROSE: show working of runningAverage per hour -// in 2 steps - last minute + last hour -// 3 or more steps also possible -// - -#include "RunningAverage.h" - -RunningAverage raMinute(60); -RunningAverage raHour(60); - -int samples = 0; - -void setup(void) -{ - Serial.begin(115200); - Serial.println("Demo RunningAverage lib - average per minute & hour"); - Serial.print("Version: "); - Serial.println(RUNNINGAVERAGE_LIB_VERSION); - raHour.clear(); - raMinute.clear(); -} - -void loop(void) -{ - long rn = random(0, 100); - raMinute.addValue(rn); - samples++; - - if (samples % 60 == 0) raHour.addValue(raMinute.getAverage()); - - Serial.print(" raMinute: "); - Serial.print(raMinute.getAverage(), 4); - Serial.print(" raHour: "); - Serial.println(raHour.getAverage(), 4); -} \ No newline at end of file diff --git a/libraries/RunningAverage/examples/ra_test/ra_test.ino b/libraries/RunningAverage/examples/ra_test/ra_test.ino deleted file mode 100644 index 146112e..0000000 --- a/libraries/RunningAverage/examples/ra_test/ra_test.ino +++ /dev/null @@ -1,40 +0,0 @@ -// -// FILE: runningAverageTest.pde -// AUTHOR: Rob Tillaart -// VERSION: 0.1.01 -// DATE: 2012-12-30 -// -// PUPROSE: show working of runningAverage -// - -#include "RunningAverage.h" - -RunningAverage myRA(10); -int samples = 0; - -void setup(void) -{ - Serial.begin(115200); - Serial.println("Demo RunningAverage lib"); - Serial.print("Version: "); - Serial.println(RUNNINGAVERAGE_LIB_VERSION); - myRA.clear(); // explicitly start clean -} - -void loop(void) -{ - long rn = random(0, 1000); - myRA.addValue(rn * 0.001); - samples++; - Serial.print(samples); - Serial.print("\t Running Average: "); - Serial.println(myRA.getAverage(), 3); - - if (samples == 300) - { - samples = 0; - myRA.clear(); - Serial.println(); - } - delay(10); -} \ No newline at end of file diff --git a/libraries/RunningAverage/keywords.txt b/libraries/RunningAverage/keywords.txt deleted file mode 100644 index 3bac631..0000000 --- a/libraries/RunningAverage/keywords.txt +++ /dev/null @@ -1,32 +0,0 @@ -####################################### -# Syntax Coloring Map For RunningAverage -####################################### - -####################################### -# Datatypes (KEYWORD1) -####################################### - -RunningAverage KEYWORD1 - -####################################### -# Methods and Functions (KEYWORD2) -####################################### - -clear KEYWORD2 -addValue KEYWORD2 -getAverage KEYWORD2 -getMin KEYWORD2 -getMax KEYWORD2 -fillValue KEYWORD2 -getElement KEYWORD2 -getSize KEYWORD2 -getCount KEYWORD2 - -####################################### -# Instances (KEYWORD2) -####################################### - - -####################################### -# Constants (LITERAL1) -####################################### \ No newline at end of file diff --git a/libraries/SFE_BMP180/SFE_BMP180.cpp b/libraries/SFE_BMP180/SFE_BMP180.cpp deleted file mode 100644 index 4383fc5..0000000 --- a/libraries/SFE_BMP180/SFE_BMP180.cpp +++ /dev/null @@ -1,387 +0,0 @@ -/* - SFE_BMP180.cpp - Bosch BMP180 pressure sensor library for the Arduino microcontroller - Mike Grusin, SparkFun Electronics - - Uses floating-point equations from the Weather Station Data Logger project - http://wmrx00.sourceforge.net/ - http://wmrx00.sourceforge.net/Arduino/BMP085-Calcs.pdf - - Forked from BMP085 library by M.Grusin - - version 1.0 2013/09/20 initial version - - Our example code uses the "beerware" license. You can do anything - you like with this code. No really, anything. If you find it useful, - buy me a (root) beer someday. -*/ - -#include -#include -#include -#include - - -SFE_BMP180::SFE_BMP180() -// Base library type -{ -} - - -char SFE_BMP180::begin() -// Initialize library for subsequent pressure measurements -{ - double c3,c4,b1; - - // Start up the Arduino's "wire" (I2C) library: - - Wire.begin(); - - // The BMP180 includes factory calibration data stored on the device. - // Each device has different numbers, these must be retrieved and - // used in the calculations when taking pressure measurements. - - // Retrieve calibration data from device: - - if (readInt(0xAA,AC1) && - readInt(0xAC,AC2) && - readInt(0xAE,AC3) && - readUInt(0xB0,AC4) && - readUInt(0xB2,AC5) && - readUInt(0xB4,AC6) && - readInt(0xB6,VB1) && - readInt(0xB8,VB2) && - readInt(0xBA,MB) && - readInt(0xBC,MC) && - readInt(0xBE,MD)) - { - - // All reads completed successfully! - - // If you need to check your math using known numbers, - // you can uncomment one of these examples. - // (The correct results are commented in the below functions.) - - // Example from Bosch datasheet - // AC1 = 408; AC2 = -72; AC3 = -14383; AC4 = 32741; AC5 = 32757; AC6 = 23153; - // B1 = 6190; B2 = 4; MB = -32768; MC = -8711; MD = 2868; - - // Example from http://wmrx00.sourceforge.net/Arduino/BMP180-Calcs.pdf - // AC1 = 7911; AC2 = -934; AC3 = -14306; AC4 = 31567; AC5 = 25671; AC6 = 18974; - // VB1 = 5498; VB2 = 46; MB = -32768; MC = -11075; MD = 2432; - - /* - Serial.print("AC1: "); Serial.println(AC1); - Serial.print("AC2: "); Serial.println(AC2); - Serial.print("AC3: "); Serial.println(AC3); - Serial.print("AC4: "); Serial.println(AC4); - Serial.print("AC5: "); Serial.println(AC5); - Serial.print("AC6: "); Serial.println(AC6); - Serial.print("VB1: "); Serial.println(VB1); - Serial.print("VB2: "); Serial.println(VB2); - Serial.print("MB: "); Serial.println(MB); - Serial.print("MC: "); Serial.println(MC); - Serial.print("MD: "); Serial.println(MD); - */ - - // Compute floating-point polynominals: - - c3 = 160.0 * pow(2,-15) * AC3; - c4 = pow(10,-3) * pow(2,-15) * AC4; - b1 = pow(160,2) * pow(2,-30) * VB1; - c5 = (pow(2,-15) / 160) * AC5; - c6 = AC6; - mc = (pow(2,11) / pow(160,2)) * MC; - md = MD / 160.0; - x0 = AC1; - x1 = 160.0 * pow(2,-13) * AC2; - x2 = pow(160,2) * pow(2,-25) * VB2; - y0 = c4 * pow(2,15); - y1 = c4 * c3; - y2 = c4 * b1; - p0 = (3791.0 - 8.0) / 1600.0; - p1 = 1.0 - 7357.0 * pow(2,-20); - p2 = 3038.0 * 100.0 * pow(2,-36); - - /* - Serial.println(); - Serial.print("c3: "); Serial.println(c3); - Serial.print("c4: "); Serial.println(c4); - Serial.print("c5: "); Serial.println(c5); - Serial.print("c6: "); Serial.println(c6); - Serial.print("b1: "); Serial.println(b1); - Serial.print("mc: "); Serial.println(mc); - Serial.print("md: "); Serial.println(md); - Serial.print("x0: "); Serial.println(x0); - Serial.print("x1: "); Serial.println(x1); - Serial.print("x2: "); Serial.println(x2); - Serial.print("y0: "); Serial.println(y0); - Serial.print("y1: "); Serial.println(y1); - Serial.print("y2: "); Serial.println(y2); - Serial.print("p0: "); Serial.println(p0); - Serial.print("p1: "); Serial.println(p1); - Serial.print("p2: "); Serial.println(p2); - */ - - // Success! - return(1); - } - else - { - // Error reading calibration data; bad component or connection? - return(0); - } -} - - -char SFE_BMP180::readInt(char address, int &value) -// Read a signed integer (two bytes) from device -// address: register to start reading (plus subsequent register) -// value: external variable to store data (function modifies value) -{ - unsigned char data[2]; - - data[0] = address; - if (readBytes(data,2)) - { - value = (((int)data[0]<<8)|(int)data[1]); - //if (*value & 0x8000) *value |= 0xFFFF0000; // sign extend if negative - return(1); - } - value = 0; - return(0); -} - - -char SFE_BMP180::readUInt(char address, unsigned int &value) -// Read an unsigned integer (two bytes) from device -// address: register to start reading (plus subsequent register) -// value: external variable to store data (function modifies value) -{ - unsigned char data[2]; - - data[0] = address; - if (readBytes(data,2)) - { - value = (((unsigned int)data[0]<<8)|(unsigned int)data[1]); - return(1); - } - value = 0; - return(0); -} - - -char SFE_BMP180::readBytes(unsigned char *values, char length) -// Read an array of bytes from device -// values: external array to hold data. Put starting register in values[0]. -// length: number of bytes to read -{ - char x; - - Wire.beginTransmission(BMP180_ADDR); - Wire.write(values[0]); - _error = Wire.endTransmission(); - if (_error == 0) - { - Wire.requestFrom(BMP180_ADDR,length); - while(Wire.available() != length) ; // wait until bytes are ready - for(x=0;x= 100 -#include "Arduino.h" -#else -#include "WProgram.h" -#endif - -class SFE_BMP180 -{ - public: - SFE_BMP180(); // base type - - char begin(); - // call pressure.begin() to initialize BMP180 before use - // returns 1 if success, 0 if failure (bad component or I2C bus shorted?) - - char startTemperature(void); - // command BMP180 to start a temperature measurement - // returns (number of ms to wait) for success, 0 for fail - - char getTemperature(double &T); - // return temperature measurement from previous startTemperature command - // places returned value in T variable (deg C) - // returns 1 for success, 0 for fail - - char startPressure(char oversampling); - // command BMP180 to start a pressure measurement - // oversampling: 0 - 3 for oversampling value - // returns (number of ms to wait) for success, 0 for fail - - char getPressure(double &P, double &T); - // return absolute pressure measurement from previous startPressure command - // note: requires previous temperature measurement in variable T - // places returned value in P variable (mbar) - // returns 1 for success, 0 for fail - - double sealevel(double P, double A); - // convert absolute pressure to sea-level pressure (as used in weather data) - // P: absolute pressure (mbar) - // A: current altitude (meters) - // returns sealevel pressure in mbar - - double altitude(double P, double P0); - // convert absolute pressure to altitude (given baseline pressure; sea-level, runway, etc.) - // P: absolute pressure (mbar) - // P0: fixed baseline pressure (mbar) - // returns signed altitude in meters - - char getError(void); - // If any library command fails, you can retrieve an extended - // error code using this command. Errors are from the wire library: - // 0 = Success - // 1 = Data too long to fit in transmit buffer - // 2 = Received NACK on transmit of address - // 3 = Received NACK on transmit of data - // 4 = Other error - - private: - - char readInt(char address, int &value); - // read an signed int (16 bits) from a BMP180 register - // address: BMP180 register address - // value: external signed int for returned value (16 bits) - // returns 1 for success, 0 for fail, with result in value - - char readUInt(char address, unsigned int &value); - // read an unsigned int (16 bits) from a BMP180 register - // address: BMP180 register address - // value: external unsigned int for returned value (16 bits) - // returns 1 for success, 0 for fail, with result in value - - char readBytes(unsigned char *values, char length); - // read a number of bytes from a BMP180 register - // values: array of char with register address in first location [0] - // length: number of bytes to read back - // returns 1 for success, 0 for fail, with read bytes in values[] array - - char writeBytes(unsigned char *values, char length); - // write a number of bytes to a BMP180 register (and consecutive subsequent registers) - // values: array of char with register address in first location [0] - // length: number of bytes to write - // returns 1 for success, 0 for fail - - int AC1,AC2,AC3,VB1,VB2,MB,MC,MD; - unsigned int AC4,AC5,AC6; - double c5,c6,mc,md,x0,x1,x2,y0,y1,y2,p0,p1,p2; - char _error; -}; - -#define BMP180_ADDR 0x77 // 7-bit address - -#define BMP180_REG_CONTROL 0xF4 -#define BMP180_REG_RESULT 0xF6 - -#define BMP180_COMMAND_TEMPERATURE 0x2E -#define BMP180_COMMAND_PRESSURE0 0x34 -#define BMP180_COMMAND_PRESSURE1 0x74 -#define BMP180_COMMAND_PRESSURE2 0xB4 -#define BMP180_COMMAND_PRESSURE3 0xF4 - -#endif diff --git a/libraries/SFE_BMP180/examples/BMP180_altitude_example/BMP180_altitude_example.ino b/libraries/SFE_BMP180/examples/BMP180_altitude_example/BMP180_altitude_example.ino deleted file mode 100644 index fdb8358..0000000 --- a/libraries/SFE_BMP180/examples/BMP180_altitude_example/BMP180_altitude_example.ino +++ /dev/null @@ -1,168 +0,0 @@ -/* SFE_BMP180 altitude example sketch - -This sketch shows how to use the Bosch BMP180 pressure sensor -as an altimiter. -https://www.sparkfun.com/products/11824 - -Like most pressure sensors, the BMP180 measures absolute pressure. -Since absolute pressure varies with altitude, you can use the pressure -to determine your altitude. - -Because pressure also varies with weather, you must first take a pressure -reading at a known baseline altitude. Then you can measure variations -from that pressure - -Hardware connections: - -- (GND) to GND -+ (VDD) to 3.3V - -(WARNING: do not connect + to 5V or the sensor will be damaged!) - -You will also need to connect the I2C pins (SCL and SDA) to your -Arduino. The pins are different on different Arduinos: - -Any Arduino pins labeled: SDA SCL -Uno, Redboard, Pro: A4 A5 -Mega2560, Due: 20 21 -Leonardo: 2 3 - -Leave the IO (VDDIO) pin unconnected. This pin is for connecting -the BMP180 to systems with lower logic levels such as 1.8V - -Have fun! -Your friends at SparkFun. - -The SFE_BMP180 library uses floating-point equations developed by the -Weather Station Data Logger project: http://wmrx00.sourceforge.net/ - -Our example code uses the "beerware" license. You can do anything -you like with this code. No really, anything. If you find it useful, -buy me a beer someday. - -V10 Mike Grusin, SparkFun Electronics 10/24/2013 -*/ - -// Your sketch must #include this library, and the Wire library. -// (Wire is a standard library included with Arduino.): - -#include -#include - -// You will need to create an SFE_BMP180 object, here called "pressure": - -SFE_BMP180 pressure; - -double baseline; // baseline pressure - -void setup() -{ - Serial.begin(9600); - Serial.println("REBOOT"); - - // Initialize the sensor (it is important to get calibration values stored on the device). - - if (pressure.begin()) - Serial.println("BMP180 init success"); - else - { - // Oops, something went wrong, this is usually a connection problem, - // see the comments at the top of this sketch for the proper connections. - - Serial.println("BMP180 init fail (disconnected?)\n\n"); - while(1); // Pause forever. - } - - // Get the baseline pressure: - - baseline = getPressure(); - - Serial.print("baseline pressure: "); - Serial.print(baseline); - Serial.println(" mb"); -} - -void loop() -{ - double a,P; - - // Get a new pressure reading: - - P = getPressure(); - - // Show the relative altitude difference between - // the new reading and the baseline reading: - - a = pressure.altitude(P,baseline); - - Serial.print("relative altitude: "); - if (a >= 0.0) Serial.print(" "); // add a space for positive numbers - Serial.print(a,1); - Serial.print(" meters, "); - if (a >= 0.0) Serial.print(" "); // add a space for positive numbers - Serial.print(a*3.28084,0); - Serial.println(" feet"); - - delay(500); -} - - -double getPressure() -{ - char status; - double T,P,p0,a; - - // You must first get a temperature measurement to perform a pressure reading. - - // Start a temperature measurement: - // If request is successful, the number of ms to wait is returned. - // If request is unsuccessful, 0 is returned. - - status = pressure.startTemperature(); - if (status != 0) - { - // Wait for the measurement to complete: - - delay(status); - - // Retrieve the completed temperature measurement: - // Note that the measurement is stored in the variable T. - // Use '&T' to provide the address of T to the function. - // Function returns 1 if successful, 0 if failure. - - status = pressure.getTemperature(T); - if (status != 0) - { - // Start a pressure measurement: - // The parameter is the oversampling setting, from 0 to 3 (highest res, longest wait). - // If request is successful, the number of ms to wait is returned. - // If request is unsuccessful, 0 is returned. - - status = pressure.startPressure(3); - if (status != 0) - { - // Wait for the measurement to complete: - delay(status); - - // Retrieve the completed pressure measurement: - // Note that the measurement is stored in the variable P. - // Use '&P' to provide the address of P. - // Note also that the function requires the previous temperature measurement (T). - // (If temperature is stable, you can do one temperature measurement for a number of pressure measurements.) - // Function returns 1 if successful, 0 if failure. - - status = pressure.getPressure(P,T); - if (status != 0) - { - return(P); - } - else Serial.println("error retrieving pressure measurement\n"); - } - else Serial.println("error starting pressure measurement\n"); - } - else Serial.println("error retrieving temperature measurement\n"); - } - else Serial.println("error starting temperature measurement\n"); -} - - - diff --git a/libraries/SFE_BMP180/examples/SFE_BMP180_example/SFE_BMP180_example.ino b/libraries/SFE_BMP180/examples/SFE_BMP180_example/SFE_BMP180_example.ino deleted file mode 100644 index a43c905..0000000 --- a/libraries/SFE_BMP180/examples/SFE_BMP180_example/SFE_BMP180_example.ino +++ /dev/null @@ -1,200 +0,0 @@ -/* SFE_BMP180 library example sketch - -This sketch shows how to use the SFE_BMP180 library to read the -Bosch BMP180 barometric pressure sensor. -https://www.sparkfun.com/products/11824 - -Like most pressure sensors, the BMP180 measures absolute pressure. -This is the actual ambient pressure seen by the device, which will -vary with both altitude and weather. - -Before taking a pressure reading you must take a temparture reading. -This is done with startTemperature() and getTemperature(). -The result is in degrees C. - -Once you have a temperature reading, you can take a pressure reading. -This is done with startPressure() and getPressure(). -The result is in millibar (mb) aka hectopascals (hPa). - -If you'll be monitoring weather patterns, you will probably want to -remove the effects of altitude. This will produce readings that can -be compared to the published pressure readings from other locations. -To do this, use the sealevel() function. You will need to provide -the known altitude at which the pressure was measured. - -If you want to measure altitude, you will need to know the pressure -at a baseline altitude. This can be average sealevel pressure, or -a previous pressure reading at your altitude, in which case -subsequent altitude readings will be + or - the initial baseline. -This is done with the altitude() function. - -Hardware connections: - -- (GND) to GND -+ (VDD) to 3.3V - -(WARNING: do not connect + to 5V or the sensor will be damaged!) - -You will also need to connect the I2C pins (SCL and SDA) to your -Arduino. The pins are different on different Arduinos: - -Any Arduino pins labeled: SDA SCL -Uno, Redboard, Pro: A4 A5 -Mega2560, Due: 20 21 -Leonardo: 2 3 - -Leave the IO (VDDIO) pin unconnected. This pin is for connecting -the BMP180 to systems with lower logic levels such as 1.8V - -Have fun! -Your friends at SparkFun. - -The SFE_BMP180 library uses floating-point equations developed by the -Weather Station Data Logger project: http://wmrx00.sourceforge.net/ - -Our example code uses the "beerware" license. You can do anything -you like with this code. No really, anything. If you find it useful, -buy me a beer someday. - -V10 Mike Grusin, SparkFun Electronics 10/24/2013 -*/ - -// Your sketch must #include this library, and the Wire library. -// (Wire is a standard library included with Arduino.): - -#include -#include - -// You will need to create an SFE_BMP180 object, here called "pressure": - -SFE_BMP180 pressure; - -#define ALTITUDE 1655.0 // Altitude of SparkFun's HQ in Boulder, CO. in meters - -void setup() -{ - Serial.begin(9600); - Serial.println("REBOOT"); - - // Initialize the sensor (it is important to get calibration values stored on the device). - - if (pressure.begin()) - Serial.println("BMP180 init success"); - else - { - // Oops, something went wrong, this is usually a connection problem, - // see the comments at the top of this sketch for the proper connections. - - Serial.println("BMP180 init fail\n\n"); - while(1); // Pause forever. - } -} - -void loop() -{ - char status; - double T,P,p0,a; - - // Loop here getting pressure readings every 10 seconds. - - // If you want sea-level-compensated pressure, as used in weather reports, - // you will need to know the altitude at which your measurements are taken. - // We're using a constant called ALTITUDE in this sketch: - - Serial.println(); - Serial.print("provided altitude: "); - Serial.print(ALTITUDE,0); - Serial.print(" meters, "); - Serial.print(ALTITUDE*3.28084,0); - Serial.println(" feet"); - - // If you want to measure altitude, and not pressure, you will instead need - // to provide a known baseline pressure. This is shown at the end of the sketch. - - // You must first get a temperature measurement to perform a pressure reading. - - // Start a temperature measurement: - // If request is successful, the number of ms to wait is returned. - // If request is unsuccessful, 0 is returned. - - status = pressure.startTemperature(); - if (status != 0) - { - // Wait for the measurement to complete: - delay(status); - - // Retrieve the completed temperature measurement: - // Note that the measurement is stored in the variable T. - // Function returns 1 if successful, 0 if failure. - - status = pressure.getTemperature(T); - if (status != 0) - { - // Print out the measurement: - Serial.print("temperature: "); - Serial.print(T,2); - Serial.print(" deg C, "); - Serial.print((9.0/5.0)*T+32.0,2); - Serial.println(" deg F"); - - // Start a pressure measurement: - // The parameter is the oversampling setting, from 0 to 3 (highest res, longest wait). - // If request is successful, the number of ms to wait is returned. - // If request is unsuccessful, 0 is returned. - - status = pressure.startPressure(3); - if (status != 0) - { - // Wait for the measurement to complete: - delay(status); - - // Retrieve the completed pressure measurement: - // Note that the measurement is stored in the variable P. - // Note also that the function requires the previous temperature measurement (T). - // (If temperature is stable, you can do one temperature measurement for a number of pressure measurements.) - // Function returns 1 if successful, 0 if failure. - - status = pressure.getPressure(P,T); - if (status != 0) - { - // Print out the measurement: - Serial.print("absolute pressure: "); - Serial.print(P,2); - Serial.print(" mb, "); - Serial.print(P*0.0295333727,2); - Serial.println(" inHg"); - - // The pressure sensor returns abolute pressure, which varies with altitude. - // To remove the effects of altitude, use the sealevel function and your current altitude. - // This number is commonly used in weather reports. - // Parameters: P = absolute pressure in mb, ALTITUDE = current altitude in m. - // Result: p0 = sea-level compensated pressure in mb - - p0 = pressure.sealevel(P,ALTITUDE); // we're at 1655 meters (Boulder, CO) - Serial.print("relative (sea-level) pressure: "); - Serial.print(p0,2); - Serial.print(" mb, "); - Serial.print(p0*0.0295333727,2); - Serial.println(" inHg"); - - // On the other hand, if you want to determine your altitude from the pressure reading, - // use the altitude function along with a baseline pressure (sea-level or other). - // Parameters: P = absolute pressure in mb, p0 = baseline pressure in mb. - // Result: a = altitude in m. - - a = pressure.altitude(P,p0); - Serial.print("computed altitude: "); - Serial.print(a,0); - Serial.print(" meters, "); - Serial.print(a*3.28084,0); - Serial.println(" feet"); - } - else Serial.println("error retrieving pressure measurement\n"); - } - else Serial.println("error starting pressure measurement\n"); - } - else Serial.println("error retrieving temperature measurement\n"); - } - else Serial.println("error starting temperature measurement\n"); - - delay(5000); // Pause for 5 seconds. -} diff --git a/libraries/SFE_BMP180/keywords.txt b/libraries/SFE_BMP180/keywords.txt deleted file mode 100644 index 664167d..0000000 --- a/libraries/SFE_BMP180/keywords.txt +++ /dev/null @@ -1,27 +0,0 @@ -####################################### -# Syntax Coloring Map for SFE_BMP180 -####################################### - -####################################### -# Datatypes (KEYWORD1) -####################################### - -SFE_BMP180 KEYWORD1 - -####################################### -# Methods and Functions (KEYWORD2) -####################################### - -begin KEYWORD2 -startTemperature KEYWORD2 -getTemperature KEYWORD2 -startPressure KEYWORD2 -getPressure KEYWORD2 -sealevel KEYWORD2 -altitude KEYWORD2 - -####################################### -# Constants (LITERAL1) -####################################### - -BMP180_ADDR LITERAL1 \ No newline at end of file diff --git a/libraries/SI7021/LICENSE b/libraries/SI7021/LICENSE deleted file mode 100644 index d7f1051..0000000 --- a/libraries/SI7021/LICENSE +++ /dev/null @@ -1,339 +0,0 @@ -GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - {description} - Copyright (C) {year} {fullname} - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - {signature of Ty Coon}, 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/libraries/SI7021/README.md b/libraries/SI7021/README.md deleted file mode 100644 index 38f42bf..0000000 --- a/libraries/SI7021/README.md +++ /dev/null @@ -1,4 +0,0 @@ -SI7021 -====== - -Arduino library for SI7020 and SI7021 environmental sensors diff --git a/libraries/SI7021/SI7021.cpp b/libraries/SI7021/SI7021.cpp deleted file mode 100644 index c51ab6b..0000000 --- a/libraries/SI7021/SI7021.cpp +++ /dev/null @@ -1,135 +0,0 @@ -/* -Copyright 2014 Marcus Sorensen - -This program is licensed under the GNU GPL v2 -*/ -#include "Arduino.h" -#include "SI7021.h" -#include - -#define I2C_ADDR 0x40 - -// I2C commands -byte RH_READ[] = { 0xE5 }; -byte TEMP_READ[] = { 0xE3 }; -byte POST_RH_TEMP_READ[] = { 0xE0 }; -byte RESET[] = { 0xFE }; -byte USER1_READ[] = { 0xE7 }; -byte USER1_WRITE[] = { 0xE6 }; -byte SERIAL1_READ[] = { 0xFA, 0x0F }; -byte SERIAL2_READ[] = { 0xFC, 0xC9 }; - -bool _si_exists = false; - -SI7021::SI7021() { -} - -bool SI7021::begin() { - Wire.begin(); - Wire.beginTransmission(I2C_ADDR); - if (Wire.endTransmission() == 0) { - _si_exists = true; - } - return _si_exists; -} - -bool SI7021::sensorExists() { - return _si_exists; -} - -int SI7021::getFahrenheitHundredths() { - unsigned int c = getCelsiusHundredths(); - return (1.8 * c) + 3200; -} - -int SI7021::getCelsiusHundredths() { - byte tempbytes[2]; - _command(TEMP_READ, tempbytes); - long tempraw = (long)tempbytes[0] << 8 | tempbytes[1]; - return ((17572 * tempraw) >> 16) - 4685; -} - -int SI7021::_getCelsiusPostHumidity() { - byte tempbytes[2]; - _command(POST_RH_TEMP_READ, tempbytes); - long tempraw = (long)tempbytes[0] << 8 | tempbytes[1]; - return ((17572 * tempraw) >> 16) - 4685; -} - - -unsigned int SI7021::getHumidityPercent() { - byte humbytes[2]; - _command(RH_READ, humbytes); - long humraw = (long)humbytes[0] << 8 | humbytes[1]; - return ((125 * humraw) >> 16) - 6; -} - -unsigned int SI7021::getHumidityBasisPoints() { - byte humbytes[2]; - _command(RH_READ, humbytes); - long humraw = (long)humbytes[0] << 8 | humbytes[1]; - return ((12500 * humraw) >> 16) - 600; -} - -void SI7021::_command(byte * cmd, byte * buf ) { - _writeReg(cmd, sizeof cmd); - _readReg(buf, sizeof buf); -} - -void SI7021::_writeReg(byte * reg, int reglen) { - Wire.beginTransmission(I2C_ADDR); - for(int i = 0; i < reglen; i++) { - reg += i; - Wire.write(*reg); - } - Wire.endTransmission(); -} - -int SI7021::_readReg(byte * reg, int reglen) { - Wire.requestFrom(I2C_ADDR, reglen); - while(Wire.available() < reglen) { - } - for(int i = 0; i < reglen; i++) { - reg[i] = Wire.read(); - } - return 1; -} - -//note this has crc bytes embedded, per datasheet, so provide 12 byte buf -int SI7021::getSerialBytes(byte * buf) { - _writeReg(SERIAL1_READ, sizeof SERIAL1_READ); - _readReg(buf, 6); - - _writeReg(SERIAL2_READ, sizeof SERIAL2_READ); - _readReg(buf + 6, 6); - - // could verify crc here and return only the 8 bytes that matter - return 1; -} - -int SI7021::getDeviceId() { - byte serial[12]; - getSerialBytes(serial); - int id = serial[6]; - return id; -} - -void SI7021::setHeater(bool on) { - byte userbyte; - if (on) { - userbyte = 0x3E; - } else { - userbyte = 0x3A; - } - byte userwrite[] = {USER1_WRITE[0], userbyte}; - _writeReg(userwrite, sizeof userwrite); -} - -// get humidity, then get temperature reading from humidity measurement -struct si7021_env SI7021::getHumidityAndTemperature() { - si7021_env ret = {0, 0, 0}; - ret.humidityPercent = getHumidityPercent(); - ret.celsiusHundredths = _getCelsiusPostHumidity(); - ret.fahrenheitHundredths = (1.8 * ret.celsiusHundredths) + 3200; - return ret; -} diff --git a/libraries/SI7021/SI7021.h b/libraries/SI7021/SI7021.h deleted file mode 100644 index d577900..0000000 --- a/libraries/SI7021/SI7021.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - Copyright 2014 Marcus Sorensen - -This program is licensed under the GNU GPL v2 -*/ -#ifndef si7021_h -#define si7021_h - -#if (ARDUINO >= 100) - #include "Arduino.h" -#else - #include "WProgram.h" -#endif - -#ifdef __AVR_ATtiny85__ - #include "TinyWireM.h" - #define Wire TinyWireM -#else - #include - #include -#endif - -typedef struct si7021_env { - int celsiusHundredths; - int fahrenheitHundredths; - unsigned int humidityPercent; -} si7021_env; - -class SI7021 -{ - public: - SI7021(); - bool begin(); - bool sensorExists(); - int getFahrenheitHundredths(); - int getCelsiusHundredths(); - unsigned int getHumidityPercent(); - unsigned int getHumidityBasisPoints(); - struct si7021_env getHumidityAndTemperature(); - int getSerialBytes(byte * buf); - int getDeviceId(); - void setHeater(bool on); - private: - void _command(byte * cmd, byte * buf ); - void _writeReg(byte * reg, int reglen); - int _readReg(byte * reg, int reglen); - int _getCelsiusPostHumidity(); -}; - -#endif - diff --git a/libraries/SI7021/examples/readsensor/readsensor.ino b/libraries/SI7021/examples/readsensor/readsensor.ino deleted file mode 100644 index 95194cf..0000000 --- a/libraries/SI7021/examples/readsensor/readsensor.ino +++ /dev/null @@ -1,80 +0,0 @@ -#include -#include - - -SI7021 sensor; -int led1 = 3; -int led2 = 4; - -void setup() { - pinMode(led1, OUTPUT); - pinMode(led2, OUTPUT); - sensor.begin(); -} - - -void loop() { - - // temperature is an integer in hundredths - int temperature = sensor.getCelsiusHundredths(); - temperature = temperature / 100; - for (int i = 0; i < temperature; i++) { - pulse(led1); - } - - delay(5000); - - // humidity is an integer representing percent - int humidity = sensor.getHumidityPercent(); - for (int i = 0; i < humidity; i++) { - pulse(led2); - } - - delay(5000); - - // this driver should work for SI7020 and SI7021, this returns 20 or 21 - int deviceid = sensor.getDeviceId(); - for (int i = 0; i < deviceid; i++) { - pulse(led1); - } - delay(5000); - - // enable internal heater for testing - sensor.setHeater(true); - delay(20000); - sensor.setHeater(false); - - // see if heater changed temperature - int temperature = sensor.getCelsiusHundredths(); - temperature = temperature / 100; - for (int i = 0; i < temperature; i++) { - pulse(led2); - } - - //cool down - delay(20000); - - // get humidity and temperature in one shot, saves power because sensor takes temperature when doing humidity anyway - si7021_env data = sensor.getHumidityAndTemperature(); - for (int i = 0; i < data.celsiusHundredths/100; i++) { - pulse(led1); - } - for (int i = 0; i < data.humidityPercent; i++) { - pulse(led2); - } - delay(5000); -} - -void pulse(int pin) { - // software pwm, flash light for ~1 second with short duty cycle - for (int i = 0; i < 20; i++) { - digitalWrite(pin, HIGH); - delay(1); - digitalWrite(pin,LOW); - delay(9); - } - digitalWrite(pin,LOW); - delay(300); -} - - diff --git a/libraries/SPIFlash/README.md b/libraries/SPIFlash/README.md deleted file mode 100644 index 63a1cac..0000000 --- a/libraries/SPIFlash/README.md +++ /dev/null @@ -1,24 +0,0 @@ -SPIFlash -======== -Arduino/Moteino library for read/write access to SPI flash memory chips. -This works with 256byte/page SPI flash memory such as the 4MBIT W25X40CLSNIG used on (Moteinos)[www.moteino.com] for data storage and wireless programming. -
-For instance a 4MBit (512Kbyte) flash chip will have 2048 pages: 256*2048 = 524288 bytes (512Kbytes). -
Minimal modifications should allow chips that have different page size to work. -
DEPENDS ON: Arduino *SPI library*. -
-This library was primarily developed to enable **safe** wireless programming on Moteino nodes and Moteino based applications such as the SwitchMote. This has been documented at [lowpowerlab](http://lowpowerlab.com/blog/category/moteino/wireless-programming/). [Dualoptiboot](https://github.com/LowPowerLab/DualOptiboot) (all Moteinos come with it) and [WirelessProgramming library](https://github.com/LowPowerLab/WirelessProgramming) are required to be able to wirelessly re-flash a remote Moteino. - -###Installation -Copy the content of this library in the "Arduino/libraries/SPIFlash" folder. -
-To find your Arduino folder go to File>Preferences in the Arduino IDE. -
-See [this tutorial](http://learn.adafruit.com/arduino-tips-tricks-and-techniques/arduino-libraries) on Arduino libraries. - -###License -Copyright (c) 2013 by Felix Rusu -
-This library is free software; you can redistribute it and/or modify it under the terms of either the GNU General Public License version 2 or the GNU Lesser General Public License version 2.1, both as published by the Free Software Foundation. -
-This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. diff --git a/libraries/SPIFlash/SPIFlash.cpp b/libraries/SPIFlash/SPIFlash.cpp deleted file mode 100644 index bad4cdf..0000000 --- a/libraries/SPIFlash/SPIFlash.cpp +++ /dev/null @@ -1,274 +0,0 @@ -/* - * Copyright (c) 2013 by Felix Rusu - * SPI Flash memory library for arduino/moteino. - * This works with 256byte/page SPI flash memory - * For instance a 4MBit (512Kbyte) flash chip will have 2048 pages: 256*2048 = 524288 bytes (512Kbytes) - * Minimal modifications should allow chips that have different page size but modifications - * DEPENDS ON: Arduino SPI library - * - * Updated Jan. 5, 2015, TomWS1, modified writeBytes to allow blocks > 256 bytes and handle page misalignment. - * Updated Feb. 26, 2015 TomWS1, added support for SPI Transactions (Arduino 1.5.8 and above) - * - * This file is free software; you can redistribute it and/or modify - * it under the terms of either the GNU General Public License version 2 - * or the GNU Lesser General Public License version 2.1, both as - * published by the Free Software Foundation. - */ - -#include - -byte SPIFlash::UNIQUEID[8]; - -/// IMPORTANT: NAND FLASH memory requires erase before write, because -/// it can only transition from 1s to 0s and only the erase command can reset all 0s to 1s -/// See http://en.wikipedia.org/wiki/Flash_memory -/// The smallest range that can be erased is a sector (4K, 32K, 64K); there is also a chip erase command - -/// Constructor. JedecID is optional but recommended, since this will ensure that the device is present and has a valid response -/// get this from the datasheet of your flash chip -/// Example for Atmel-Adesto 4Mbit AT25DF041A: 0x1F44 (page 27: http://www.adestotech.com/sites/default/files/datasheets/doc3668.pdf) -/// Example for Winbond 4Mbit W25X40CL: 0xEF30 (page 14: http://www.winbond.com/NR/rdonlyres/6E25084C-0BFE-4B25-903D-AE10221A0929/0/W25X40CL.pdf) -SPIFlash::SPIFlash(uint8_t slaveSelectPin, uint16_t jedecID) { - _slaveSelectPin = slaveSelectPin; - _jedecID = jedecID; -} - -/// Select the flash chip -void SPIFlash::select() { - //save current SPI settings -#ifndef SPI_HAS_TRANSACTION - _SREG = SREG; - noInterrupts(); -#endif - _SPCR = SPCR; - _SPSR = SPSR; - -#ifdef SPI_HAS_TRANSACTION - SPI.beginTransaction(_settings); -#else - // set FLASH SPI settings - SPI.setDataMode(SPI_MODE0); - SPI.setBitOrder(MSBFIRST); - SPI.setClockDivider(SPI_CLOCK_DIV4); // decided to slow down from DIV2 after SPI stalling in some instances, especially visible on mega1284p when RFM69 and FLASH chip both present -#endif - digitalWrite(_slaveSelectPin, LOW); -} - -/// UNselect the flash chip -void SPIFlash::unselect() { - digitalWrite(_slaveSelectPin, HIGH); - //restore SPI settings to what they were before talking to the FLASH chip -#ifdef SPI_HAS_TRANSACTION - SPI.endTransaction(); -#else - SREG = _SREG; // restore interrupts IFF they were enabled -#endif - SPCR = _SPCR; - SPSR = _SPSR; -} - -/// setup SPI, read device ID etc... -boolean SPIFlash::initialize() -{ - _SPCR = SPCR; - _SPSR = SPSR; - digitalWrite(_slaveSelectPin, HIGH); - pinMode(_slaveSelectPin, OUTPUT); - SPI.begin(); - _settings = SPISettings(4000000, MSBFIRST, SPI_MODE0); - unselect(); - wakeup(); - - if (_jedecID == 0 || readDeviceId() == _jedecID) { - command(SPIFLASH_STATUSWRITE, true); // Write Status Register - SPI.transfer(0); // Global Unprotect - unselect(); - return true; - } - return false; -} - -/// Get the manufacturer and device ID bytes (as a short word) -word SPIFlash::readDeviceId() -{ -#if defined(__AVR_ATmega32U4__) // Arduino Leonardo, MoteinoLeo - command(SPIFLASH_IDREAD); // Read JEDEC ID -#else - select(); - SPI.transfer(SPIFLASH_IDREAD); -#endif - word jedecid = SPI.transfer(0) << 8; - jedecid |= SPI.transfer(0); - unselect(); - return jedecid; -} - -/// Get the 64 bit unique identifier, stores it in UNIQUEID[8]. Only needs to be called once, ie after initialize -/// Returns the byte pointer to the UNIQUEID byte array -/// Read UNIQUEID like this: -/// flash.readUniqueId(); for (byte i=0;i<8;i++) { Serial.print(flash.UNIQUEID[i], HEX); Serial.print(' '); } -/// or like this: -/// flash.readUniqueId(); byte* MAC = flash.readUniqueId(); for (byte i=0;i<8;i++) { Serial.print(MAC[i], HEX); Serial.print(' '); } -byte* SPIFlash::readUniqueId() -{ - command(SPIFLASH_MACREAD); - SPI.transfer(0); - SPI.transfer(0); - SPI.transfer(0); - SPI.transfer(0); - for (byte i=0;i<8;i++) - UNIQUEID[i] = SPI.transfer(0); - unselect(); - return UNIQUEID; -} - -/// read 1 byte from flash memory -byte SPIFlash::readByte(long addr) { - command(SPIFLASH_ARRAYREADLOWFREQ); - SPI.transfer(addr >> 16); - SPI.transfer(addr >> 8); - SPI.transfer(addr); - byte result = SPI.transfer(0); - unselect(); - return result; -} - -/// read unlimited # of bytes -void SPIFlash::readBytes(long addr, void* buf, word len) { - command(SPIFLASH_ARRAYREAD); - SPI.transfer(addr >> 16); - SPI.transfer(addr >> 8); - SPI.transfer(addr); - SPI.transfer(0); //"dont care" - for (word i = 0; i < len; ++i) - ((byte*) buf)[i] = SPI.transfer(0); - unselect(); -} - -/// Send a command to the flash chip, pass TRUE for isWrite when its a write command -void SPIFlash::command(byte cmd, boolean isWrite){ -#if defined(__AVR_ATmega32U4__) // Arduino Leonardo, MoteinoLeo - DDRB |= B00000001; // Make sure the SS pin (PB0 - used by RFM12B on MoteinoLeo R1) is set as output HIGH! - PORTB |= B00000001; -#endif - if (isWrite) - { - command(SPIFLASH_WRITEENABLE); // Write Enable - unselect(); - } - //wait for any write/erase to complete - // a time limit cannot really be added here without it being a very large safe limit - // that is because some chips can take several seconds to carry out a chip erase or other similar multi block or entire-chip operations - // a recommended alternative to such situations where chip can be or not be present is to add a 10k or similar weak pulldown on the - // open drain MISO input which can read noise/static and hence return a non 0 status byte, causing the while() to hang when a flash chip is not present - while(busy()); - select(); - SPI.transfer(cmd); -} - -/// check if the chip is busy erasing/writing -boolean SPIFlash::busy() -{ - /* - select(); - SPI.transfer(SPIFLASH_STATUSREAD); - byte status = SPI.transfer(0); - unselect(); - return status & 1; - */ - return readStatus() & 1; -} - -/// return the STATUS register -byte SPIFlash::readStatus() -{ - select(); - SPI.transfer(SPIFLASH_STATUSREAD); - byte status = SPI.transfer(0); - unselect(); - return status; -} - - -/// Write 1 byte to flash memory -/// WARNING: you can only write to previously erased memory locations (see datasheet) -/// use the block erase commands to first clear memory (write 0xFFs) -void SPIFlash::writeByte(long addr, uint8_t byt) { - command(SPIFLASH_BYTEPAGEPROGRAM, true); // Byte/Page Program - SPI.transfer(addr >> 16); - SPI.transfer(addr >> 8); - SPI.transfer(addr); - SPI.transfer(byt); - unselect(); -} - -/// write multiple bytes to flash memory (up to 64K) -/// WARNING: you can only write to previously erased memory locations (see datasheet) -/// use the block erase commands to first clear memory (write 0xFFs) -/// This version handles both page alignment and data blocks larger than 256 bytes. -/// -void SPIFlash::writeBytes(long addr, const void* buf, uint16_t len) { - uint16_t n; - uint16_t maxBytes = 256-(addr%256); // force the first set of bytes to stay within the first page - uint16_t offset = 0; - while (len>0) - { - n = (len<=maxBytes) ? len : maxBytes; - command(SPIFLASH_BYTEPAGEPROGRAM, true); // Byte/Page Program - SPI.transfer(addr >> 16); - SPI.transfer(addr >> 8); - SPI.transfer(addr); - for (uint16_t i = 0; i < n; i++) - SPI.transfer(((byte*) buf)[offset + i]); - unselect(); - addr+=n; // adjust the addresses and remaining bytes by what we've just transferred. - offset +=n; - len -= n; - maxBytes = 256; // now we can do up to 256 bytes per loop - } -} - - -/// erase entire flash memory array -/// may take several seconds depending on size, but is non blocking -/// so you may wait for this to complete using busy() or continue doing -/// other things and later check if the chip is done with busy() -/// note that any command will first wait for chip to become available using busy() -/// so no need to do that twice -void SPIFlash::chipErase() { - command(SPIFLASH_CHIPERASE, true); - unselect(); -} - -/// erase a 4Kbyte block -void SPIFlash::blockErase4K(long addr) { - command(SPIFLASH_BLOCKERASE_4K, true); // Block Erase - SPI.transfer(addr >> 16); - SPI.transfer(addr >> 8); - SPI.transfer(addr); - unselect(); -} - -/// erase a 32Kbyte block -void SPIFlash::blockErase32K(long addr) { - command(SPIFLASH_BLOCKERASE_32K, true); // Block Erase - SPI.transfer(addr >> 16); - SPI.transfer(addr >> 8); - SPI.transfer(addr); - unselect(); -} - -void SPIFlash::sleep() { - command(SPIFLASH_SLEEP); - unselect(); -} - -void SPIFlash::wakeup() { - command(SPIFLASH_WAKE); - unselect(); -} - -/// cleanup -void SPIFlash::end() { - SPI.end(); -} \ No newline at end of file diff --git a/libraries/SPIFlash/SPIFlash.h b/libraries/SPIFlash/SPIFlash.h deleted file mode 100644 index 8f530b7..0000000 --- a/libraries/SPIFlash/SPIFlash.h +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright (c) 2013 by Felix Rusu - * SPI Flash memory library for arduino/moteino. - * This works with 256uint8_t/page SPI flash memory - * For instance a 4MBit (512Kuint8_t) flash chip will have 2048 pages: 256*2048 = 524288 uint8_ts (512Kuint8_ts) - * Minimal modifications should allow chips that have different page size but modifications - * DEPENDS ON: Arduino SPI library - * - * Updated Feb. 26, 2015 TomWS1, added support for SPI Transactions (Arduino 1.5.8 and above) - * - * This file is free software; you can redistribute it and/or modify - * it under the terms of either the GNU General Public License version 2 - * or the GNU Lesser General Public License version 2.1, both as - * published by the Free Software Foundation. - */ - -#ifndef _SPIFLASH_H_ -#define _SPIFLASH_H_ - -#if ARDUINO >= 100 -#include -#else -#include -#include "pins_arduino.h" -#endif - -#include - -/// IMPORTANT: NAND FLASH memory requires erase before write, because -/// it can only transition from 1s to 0s and only the erase command can reset all 0s to 1s -/// See http://en.wikipedia.org/wiki/Flash_memory -/// The smallest range that can be erased is a sector (4K, 32K, 64K); there is also a chip erase command - -/// Standard SPI flash commands -/// Assuming the WP pin is pulled up (to disable hardware write protection) -/// To use any write commands the WEL bit in the status register must be set to 1. -/// This is accomplished by sending a 0x06 command before any such write/erase command. -/// The WEL bit in the status register resets to the logical “0” state after a -/// device power-up or reset. In addition, the WEL bit will be reset to the logical “0” state automatically under the following conditions: -/// • Write Disable operation completes successfully -/// • Write Status Register operation completes successfully or aborts -/// • Protect Sector operation completes successfully or aborts -/// • Unprotect Sector operation completes successfully or aborts -/// • Byte/Page Program operation completes successfully or aborts -/// • Sequential Program Mode reaches highest unprotected memory location -/// • Sequential Program Mode reaches the end of the memory array -/// • Sequential Program Mode aborts -/// • Block Erase operation completes successfully or aborts -/// • Chip Erase operation completes successfully or aborts -/// • Hold condition aborts -#define SPIFLASH_WRITEENABLE 0x06 // write enable -#define SPIFLASH_WRITEDISABLE 0x04 // write disable - -#define SPIFLASH_BLOCKERASE_4K 0x20 // erase one 4K block of flash memory -#define SPIFLASH_BLOCKERASE_32K 0x52 // erase one 32K block of flash memory -#define SPIFLASH_BLOCKERASE_64K 0xD8 // erase one 64K block of flash memory -#define SPIFLASH_CHIPERASE 0x60 // chip erase (may take several seconds depending on size) - // but no actual need to wait for completion (instead need to check the status register BUSY bit) -#define SPIFLASH_STATUSREAD 0x05 // read status register -#define SPIFLASH_STATUSWRITE 0x01 // write status register -#define SPIFLASH_ARRAYREAD 0x0B // read array (fast, need to add 1 dummy uint8_t after 3 address uint8_ts) -#define SPIFLASH_ARRAYREADLOWFREQ 0x03 // read array (low frequency) - -#define SPIFLASH_SLEEP 0xB9 // deep power down -#define SPIFLASH_WAKE 0xAB // deep power wake up -#define SPIFLASH_BYTEPAGEPROGRAM 0x02 // write (1 to 256uint8_ts) -#define SPIFLASH_IDREAD 0x9F // read JEDEC manufacturer and device ID (2 uint8_ts, specific uint8_ts for each manufacturer and device) - // Example for Atmel-Adesto 4Mbit AT25DF041A: 0x1F44 (page 27: http://www.adestotech.com/sites/default/files/datasheets/doc3668.pdf) - // Example for Winbond 4Mbit W25X40CL: 0xEF30 (page 14: http://www.winbond.com/NR/rdonlyres/6E25084C-0BFE-4B25-903D-AE10221A0929/0/W25X40CL.pdf) -#define SPIFLASH_MACREAD 0x4B // read unique ID number (MAC) - -class SPIFlash { -public: - static uint8_t UNIQUEID[8]; - SPIFlash(uint8_t slaveSelectPin, uint16_t jedecID=0); - boolean initialize(); - void command(uint8_t cmd, boolean isWrite=false); - uint8_t readStatus(); - uint8_t readByte(long addr); - void readBytes(long addr, void* buf, word len); - void writeByte(long addr, uint8_t byt); - void writeBytes(long addr, const void* buf, uint16_t len); - boolean busy(); - void chipErase(); - void blockErase4K(long address); - void blockErase32K(long address); - word readDeviceId(); - uint8_t* readUniqueId(); - - void sleep(); - void wakeup(); - void end(); -protected: - void select(); - void unselect(); - uint8_t _slaveSelectPin; - uint16_t _jedecID; - uint8_t _SPCR; - uint8_t _SPSR; - uint8_t _SREG; - -#ifdef SPI_HAS_TRANSACTION - SPISettings _settings; -#endif - -}; - -#endif \ No newline at end of file diff --git a/libraries/SPIFlash/examples/SPIFlash_ReadWrite/SPIFlash_ReadWrite.ino b/libraries/SPIFlash/examples/SPIFlash_ReadWrite/SPIFlash_ReadWrite.ino deleted file mode 100644 index dd8d0e8..0000000 --- a/libraries/SPIFlash/examples/SPIFlash_ReadWrite/SPIFlash_ReadWrite.ino +++ /dev/null @@ -1,116 +0,0 @@ -// ********************************************************************************** -// This sketch is an example of using the SPIFlash library with a Moteino -// that has an onboard SPI Flash chip. This sketch listens to a few serial commands -// Hence type the following commands to interact with the SPI flash memory array: -// - 'd' dumps the first 256bytes of the flash chip to screen -// - 'e' erases the entire memory chip -// - 'i' print manufacturer/device ID -// - [0-9] writes a random byte to addresses [0-9] (either 0xAA or 0xBB) -// Get the SPIFlash library from here: https://github.com/LowPowerLab/SPIFlash -// ********************************************************************************** -// Copyright Felix Rusu, LowPowerLab.com -// Library and code by Felix Rusu - felix@lowpowerlab.com -// ********************************************************************************** -// License -// ********************************************************************************** -// This program is free software; you can redistribute it -// and/or modify it under the terms of the GNU General -// Public License as published by the Free Software -// Foundation; either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will -// be useful, but WITHOUT ANY WARRANTY; without even the -// implied warranty of MERCHANTABILITY or FITNESS FOR A -// PARTICULAR PURPOSE. See the GNU General Public -// License for more details. -// -// You should have received a copy of the GNU General -// Public License along with this program. -// If not, see . -// -// Licence can be viewed at -// http://www.gnu.org/licenses/gpl-3.0.txt -// -// Please maintain this license information along with authorship -// and copyright notices in any redistribution of this code -// ********************************************************************************** - - -#include //get it here: https://github.com/LowPowerLab/SPIFlash -#include - -#define SERIAL_BAUD 115200 -char input = 0; -long lastPeriod = -1; - -#ifdef __AVR_ATmega1284P__ - #define LED 15 // Moteino MEGAs have LEDs on D15 - #define FLASH_SS 23 // and FLASH SS on D23 -#else - #define LED 9 // Moteinos have LEDs on D9 - #define FLASH_SS 8 // and FLASH SS on D8 -#endif - -////////////////////////////////////////// -// flash(SPI_CS, MANUFACTURER_ID) -// SPI_CS - CS pin attached to SPI flash chip (8 in case of Moteino) -// MANUFACTURER_ID - OPTIONAL, 0x1F44 for adesto(ex atmel) 4mbit flash -// 0xEF30 for windbond 4mbit flash -////////////////////////////////////////// -SPIFlash flash(FLASH_SS, 0xEF30); - -void setup(){ - Serial.begin(SERIAL_BAUD); - Serial.print("Start..."); - - if (flash.initialize()) - Serial.println("Init OK!"); - else - Serial.println("Init FAIL!"); -} - -void loop(){ - // Handle serial input (to allow basic DEBUGGING of FLASH chip) - // ie: display first 256 bytes in FLASH, erase chip, write bytes at first 10 positions, etc - if (Serial.available() > 0) { - input = Serial.read(); - if (input == 'd') //d=dump flash area - { - Serial.println("Flash content:"); - int counter = 0; - - while(counter<=256){ - Serial.print(flash.readByte(counter++), HEX); - Serial.print('.'); - } - - Serial.println(); - } - else if (input == 'e') - { - Serial.print("Erasing Flash chip ... "); - flash.chipErase(); - while(flash.busy()); - Serial.println("DONE"); - } - else if (input == 'i') - { - Serial.print("DeviceID: "); - Serial.println(flash.readDeviceId(), HEX); - } - else if (input >= 48 && input <= 57) //0-9 - { - Serial.print("\nWriteByte("); Serial.print(input); Serial.print(")"); - flash.writeByte(input-48, millis()%2 ? 0xaa : 0xbb); - } - } - - // Periodically blink the onboard LED while listening for serial commands - if ((int)(millis()/500) > lastPeriod) - { - lastPeriod++; - pinMode(9, OUTPUT); - digitalWrite(9, lastPeriod%2); - } -} \ No newline at end of file diff --git a/libraries/SPIFlash/keywords.txt b/libraries/SPIFlash/keywords.txt deleted file mode 100644 index 652da98..0000000 --- a/libraries/SPIFlash/keywords.txt +++ /dev/null @@ -1,18 +0,0 @@ -SPIFlash KEYWORD1 -initialize KEYWORD2 -command KEYWORD2 -readStatus KEYWORD2 -readByte KEYWORD2 -readBytes KEYWORD2 -writeByte KEYWORD2 -writeBytes KEYWORD2 -flashBusy KEYWORD2 -chipErase KEYWORD2 -blockErase4K KEYWORD2 -blockErase32K KEYWORD2 -readDeviceId KEYWORD2 -readUniqueId KEYWORD2 -UNIQUEID KEYWORD2 -sleep KEYWORD2 -wakeup KEYWORD2 -end KEYWORD2 \ No newline at end of file diff --git a/libraries/SPIFlash/library.json b/libraries/SPIFlash/library.json deleted file mode 100644 index b199318..0000000 --- a/libraries/SPIFlash/library.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "SPIFlash", - "keywords": "flash, spi", - "description": "Library for read/write access to SPI flash memory chips", - "repository": - { - "type": "git", - "url": "https://github.com/LowPowerLab/SPIFlash.git" - }, - "frameworks": "arduino", - "platforms": "atmelavr" -} diff --git a/libraries/SimpleTimer/README.markdown b/libraries/SimpleTimer/README.markdown deleted file mode 100644 index 19aa6be..0000000 --- a/libraries/SimpleTimer/README.markdown +++ /dev/null @@ -1,34 +0,0 @@ -## SimpleTimer - A timer library for Arduino. - -### Uploader -Derek Chafin -Jun 16, 2012 -info...@gmail.com - -###Disclaimer -I am pushing this library to github because I like git better than I like the Windows clipboard. - -For reference this library can also be found at http://playground.arduino.cc/Code/SimpleTimer. - -### Original Author -Marcello Romani -mrom...@ottotecnica.com -Copyright (c) 2010 OTTOTECNICA Italy - -### License - GNU LGPL 2.1+ -This library is free software; you can redistribute it -and/or modify it under the terms of the GNU Lesser -General Public License as published by the Free Software -Foundation; either version 2.1 of the License, or (at -your option) any later version. - -This library is distributed in the hope that it will -be useful, but WITHOUT ANY WARRANTY; without even the -implied warranty of MERCHANTABILITY or FITNESS FOR A -PARTICULAR PURPOSE. See the GNU Lesser General Public -License for more details. - -You should have received a copy of the GNU Lesser -General Public License along with this library; if not, -write to the Free Software Foundation, Inc., -51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA \ No newline at end of file diff --git a/libraries/SimpleTimer/SimpleTimer.cpp b/libraries/SimpleTimer/SimpleTimer.cpp deleted file mode 100644 index 5a88acb..0000000 --- a/libraries/SimpleTimer/SimpleTimer.cpp +++ /dev/null @@ -1,224 +0,0 @@ -/* - * SimpleTimer.cpp - * - * SimpleTimer - A timer library for Arduino. - * Author: mromani@ottotecnica.com - * Copyright (c) 2010 OTTOTECNICA Italy - * - * This library is free software; you can redistribute it - * and/or modify it under the terms of the GNU Lesser - * General Public License as published by the Free Software - * Foundation; either version 2.1 of the License, or (at - * your option) any later version. - * - * This library is distributed in the hope that it will - * be useful, but WITHOUT ANY WARRANTY; without even the - * implied warranty of MERCHANTABILITY or FITNESS FOR A - * PARTICULAR PURPOSE. See the GNU Lesser General Public - * License for more details. - * - * You should have received a copy of the GNU Lesser - * General Public License along with this library; if not, - * write to the Free Software Foundation, Inc., - * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - -#include "SimpleTimer.h" - - -SimpleTimer::SimpleTimer() { - unsigned long current_millis = millis(); - - for (int i = 0; i < MAX_TIMERS; i++) { - enabled[i] = false; - callbacks[i] = 0; // if the callback pointer is zero, the slot is free, i.e. doesn't "contain" any timer - prev_millis[i] = current_millis; - numRuns[i] = 0; - } - - numTimers = 0; -} - - -void SimpleTimer::run() { - int i; - unsigned long current_millis; - - // get current time - current_millis = millis(); - - for (i = 0; i < MAX_TIMERS; i++) { - - toBeCalled[i] = DEFCALL_DONTRUN; - - // no callback == no timer, i.e. jump over empty slots - if (callbacks[i]) { - - // is it time to process this timer ? - if (current_millis - prev_millis[i] >= delays[i]) { - - // update time - prev_millis[i] = current_millis; - - // check if the timer callback has to be executed - if (enabled[i]) { - - // "run forever" timers must always be executed - if (maxNumRuns[i] == RUN_FOREVER) { - toBeCalled[i] = DEFCALL_RUNONLY; - } - // other timers get executed the specified number of times - else if (numRuns[i] < maxNumRuns[i]) { - toBeCalled[i] = DEFCALL_RUNONLY; - numRuns[i]++; - - // after the last run, delete the timer - if (numRuns[i] >= maxNumRuns[i]) { - toBeCalled[i] = DEFCALL_RUNANDDEL; - } - } - } - } - } - } - - for (i = 0; i < MAX_TIMERS; i++) { - switch(toBeCalled[i]) { - case DEFCALL_DONTRUN: - break; - - case DEFCALL_RUNONLY: - (*callbacks[i])(); - break; - - case DEFCALL_RUNANDDEL: - (*callbacks[i])(); - deleteTimer(i); - break; - } - } -} - - -// find the first available slot -// return -1 if none found -int SimpleTimer::findFirstFreeSlot() { - int i; - - // all slots are used - if (numTimers >= MAX_TIMERS) { - return -1; - } - - // return the first slot with no callback (i.e. free) - for (i = 0; i < MAX_TIMERS; i++) { - if (callbacks[i] == 0) { - return i; - } - } - - // we should never reach this point... - return -1; -} - - -int SimpleTimer::setTimer(long d, timer_callback f, int n) { - int freeTimer; - - freeTimer = findFirstFreeSlot(); - if (freeTimer < 0) { - return -1; - } - - delays[freeTimer] = d; - callbacks[freeTimer] = f; - maxNumRuns[freeTimer] = n; - enabled[freeTimer] = true; - prev_millis[freeTimer] = millis(); - - numTimers++; - - return freeTimer; -} - - -int SimpleTimer::setInterval(long d, timer_callback f) { - return setTimer(d, f, RUN_FOREVER); -} - - -int SimpleTimer::setTimeout(long d, timer_callback f) { - return setTimer(d, f, RUN_ONCE); -} - - -void SimpleTimer::deleteTimer(int numTimer) { - if (numTimer >= MAX_TIMERS) { - return; - } - - // nothing to delete if no timers are in use - if (numTimers == 0) { - return; - } - - callbacks[numTimer] = 0; - enabled[numTimer] = false; - delays[numTimer] = 0; - numRuns[numTimer] = 0; - - // update number of timers - numTimers--; -} - - -// function contributed by code@rowansimms.com -void SimpleTimer::restartTimer(int numTimer) { - if (numTimer >= MAX_TIMERS) { - return; - } - - prev_millis[numTimer] = millis(); -} - - -boolean SimpleTimer::isEnabled(int numTimer) { - if (numTimer >= MAX_TIMERS) { - return false; - } - - return enabled[numTimer]; -} - - -void SimpleTimer::enable(int numTimer) { - if (numTimer >= MAX_TIMERS) { - return; - } - - enabled[numTimer] = true; -} - - -void SimpleTimer::disable(int numTimer) { - if (numTimer >= MAX_TIMERS) { - return; - } - - enabled[numTimer] = false; -} - - -void SimpleTimer::toggle(int numTimer) { - if (numTimer >= MAX_TIMERS) { - return; - } - - enabled[numTimer] = !enabled[numTimer]; -} - - -int SimpleTimer::getNumTimers() { - return numTimers; -} diff --git a/libraries/SimpleTimer/SimpleTimer.h b/libraries/SimpleTimer/SimpleTimer.h deleted file mode 100644 index 4ed39b5..0000000 --- a/libraries/SimpleTimer/SimpleTimer.h +++ /dev/null @@ -1,124 +0,0 @@ -/* - * SimpleTimer.h - * - * SimpleTimer - A timer library for Arduino. - * Author: mromani@ottotecnica.com - * Copyright (c) 2010 OTTOTECNICA Italy - * - * This library is free software; you can redistribute it - * and/or modify it under the terms of the GNU Lesser - * General Public License as published by the Free Software - * Foundation; either version 2.1 of the License, or (at - * your option) any later version. - * - * This library is distributed in the hope that it will - * be useful, but WITHOUT ANY WARRANTY; without even the - * implied warranty of MERCHANTABILITY or FITNESS FOR A - * PARTICULAR PURPOSE. See the GNU Lesser General Public - * License for more details. - * - * You should have received a copy of the GNU Lesser - * General Public License along with this library; if not, - * write to the Free Software Foundation, Inc., - * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - - -#ifndef SIMPLETIMER_H -#define SIMPLETIMER_H - -#if defined(ARDUINO) && ARDUINO >= 100 -#include -#else -#include -#endif - -typedef void (*timer_callback)(void); - -class SimpleTimer { - -public: - // maximum number of timers - const static int MAX_TIMERS = 10; - - // setTimer() constants - const static int RUN_FOREVER = 0; - const static int RUN_ONCE = 1; - - // constructor - SimpleTimer(); - - // this function must be called inside loop() - void run(); - - // call function f every d milliseconds - int setInterval(long d, timer_callback f); - - // call function f once after d milliseconds - int setTimeout(long d, timer_callback f); - - // call function f every d milliseconds for n times - int setTimer(long d, timer_callback f, int n); - - // destroy the specified timer - void deleteTimer(int numTimer); - - // restart the specified timer - void restartTimer(int numTimer); - - // returns true if the specified timer is enabled - boolean isEnabled(int numTimer); - - // enables the specified timer - void enable(int numTimer); - - // disables the specified timer - void disable(int numTimer); - - // enables the specified timer if it's currently disabled, - // and vice-versa - void toggle(int numTimer); - - // returns the number of used timers - int getNumTimers(); - - // returns the number of available timers - int getNumAvailableTimers() { return MAX_TIMERS - numTimers; }; - -private: - // deferred call constants - const static int DEFCALL_DONTRUN = 0; // don't call the callback function - const static int DEFCALL_RUNONLY = 1; // call the callback function but don't delete the timer - const static int DEFCALL_RUNANDDEL = 2; // call the callback function and delete the timer - - // find the first available slot - int findFirstFreeSlot(); - - // value returned by the millis() function - // in the previous run() call - unsigned long prev_millis[MAX_TIMERS]; - - // pointers to the callback functions - timer_callback callbacks[MAX_TIMERS]; - - // delay values - long delays[MAX_TIMERS]; - - // number of runs to be executed for each timer - int maxNumRuns[MAX_TIMERS]; - - // number of executed runs for each timer - int numRuns[MAX_TIMERS]; - - // which timers are enabled - boolean enabled[MAX_TIMERS]; - - // deferred function call (sort of) - N.B.: this array is only used in run() - int toBeCalled[MAX_TIMERS]; - - // actual number of timers in use - int numTimers; -}; - -#endif diff --git a/libraries/SimpleTimer/keywords.txt b/libraries/SimpleTimer/keywords.txt deleted file mode 100644 index c9643fe..0000000 --- a/libraries/SimpleTimer/keywords.txt +++ /dev/null @@ -1,32 +0,0 @@ -####################################### -# Syntax Coloring Map -####################################### - -####################################### -# Datatypes (KEYWORD1) -####################################### - -SimpleTimer KEYWORD1 - -####################################### -# Methods and Functions (KEYWORD2) -####################################### -run KEYWORD2 -setInterval KEYWORD2 -setTimeout KEYWORD2 -setTimer KEYWORD2 -deleteTimer KEYWORD2 -restartTimer KEYWORD2 -isEnabled KEYWORD2 -enable KEYWORD2 -disable KEYWORD2 -toggle KEYWORD2 -getNumTimers KEYWORD2 -getNumAvailableTimers KEYWORD2 - -####################################### -# Constants (LITERAL1) -####################################### -MAX_TIMERS LITERAL1 -RUN_ONCE LITERAL1 -RUN_FOREVER LITERAL1 diff --git a/libraries/Time/DateStrings.cpp b/libraries/Time/DateStrings.cpp deleted file mode 100644 index a0eef9d..0000000 --- a/libraries/Time/DateStrings.cpp +++ /dev/null @@ -1,80 +0,0 @@ -/* DateStrings.cpp - * Definitions for date strings for use with the Time library - * - * No memory is consumed in the sketch if your code does not call any of the string methods - * You can change the text of the strings, make sure the short strings are each exactly 3 characters - * the long strings can be any length up to the constant dt_MAX_STRING_LEN defined in Time.h - * - */ - -#include -#include "Time.h" - -// the short strings for each day or month must be exactly dt_SHORT_STR_LEN -#define dt_SHORT_STR_LEN 3 // the length of short strings - -static char buffer[dt_MAX_STRING_LEN+1]; // must be big enough for longest string and the terminating null - -const char monthStr1[] PROGMEM = "January"; -const char monthStr2[] PROGMEM = "February"; -const char monthStr3[] PROGMEM = "March"; -const char monthStr4[] PROGMEM = "April"; -const char monthStr5[] PROGMEM = "May"; -const char monthStr6[] PROGMEM = "June"; -const char monthStr7[] PROGMEM = "July"; -const char monthStr8[] PROGMEM = "August"; -const char monthStr9[] PROGMEM = "September"; -const char monthStr10[] PROGMEM = "October"; -const char monthStr11[] PROGMEM = "November"; -const char monthStr12[] PROGMEM = "December"; - -PGM_P const monthNames_P[] PROGMEM = -{ - "",monthStr1,monthStr2,monthStr3,monthStr4,monthStr5,monthStr6, - monthStr7,monthStr8,monthStr9,monthStr10,monthStr11,monthStr12 -}; - -const char monthShortNames_P[] PROGMEM = "ErrJanFebMarAprMayJunJulAugSepOctNovDec"; - -const char dayStr0[] PROGMEM = "Err"; -const char dayStr1[] PROGMEM = "Sunday"; -const char dayStr2[] PROGMEM = "Monday"; -const char dayStr3[] PROGMEM = "Tuesday"; -const char dayStr4[] PROGMEM = "Wednesday"; -const char dayStr5[] PROGMEM = "Thursday"; -const char dayStr6[] PROGMEM = "Friday"; -const char dayStr7[] PROGMEM = "Saturday"; - -PGM_P const dayNames_P[] PROGMEM = { dayStr0,dayStr1,dayStr2,dayStr3,dayStr4,dayStr5,dayStr6,dayStr7}; -const char dayShortNames_P[] PROGMEM = "ErrSunMonTueWedThrFriSat"; - -/* functions to return date strings */ - -char* monthStr(uint8_t month) -{ - strcpy_P(buffer, (PGM_P)pgm_read_word(&(monthNames_P[month]))); - return buffer; -} - -char* monthShortStr(uint8_t month) -{ - for (int i=0; i < dt_SHORT_STR_LEN; i++) - buffer[i] = pgm_read_byte(&(monthShortNames_P[i+ (month*dt_SHORT_STR_LEN)])); - buffer[dt_SHORT_STR_LEN] = 0; - return buffer; -} - -char* dayStr(uint8_t day) -{ - strcpy_P(buffer, (PGM_P)pgm_read_word(&(dayNames_P[day]))); - return buffer; -} - -char* dayShortStr(uint8_t day) -{ - uint8_t index = day*dt_SHORT_STR_LEN; - for (int i=0; i < dt_SHORT_STR_LEN; i++) - buffer[i] = pgm_read_byte(&(dayShortNames_P[index + i])); - buffer[dt_SHORT_STR_LEN] = 0; - return buffer; -} diff --git a/libraries/Time/Examples/Processing/SyncArduinoClock/SyncArduinoClock.pde b/libraries/Time/Examples/Processing/SyncArduinoClock/SyncArduinoClock.pde deleted file mode 100644 index 4c74d4b..0000000 --- a/libraries/Time/Examples/Processing/SyncArduinoClock/SyncArduinoClock.pde +++ /dev/null @@ -1,70 +0,0 @@ -/** - * SyncArduinoClock. - * - * portIndex must be set to the port connected to the Arduino - * - * The current time is sent in response to request message from Arduino - * or by clicking the display window - * - * The time message is 11 ASCII text characters; a header (the letter 'T') - * followed by the ten digit system time (unix time) - */ - - -import processing.serial.*; - -public static final short portIndex = 1; // select the com port, 0 is the first port -public static final char TIME_HEADER = 'T'; //header byte for arduino serial time message -public static final char TIME_REQUEST = 7; // ASCII bell character -public static final char LF = 10; // ASCII linefeed -public static final char CR = 13; // ASCII linefeed -Serial myPort; // Create object from Serial class - -void setup() { - size(200, 200); - println(Serial.list()); - println(" Connecting to -> " + Serial.list()[portIndex]); - myPort = new Serial(this,Serial.list()[portIndex], 9600); -} - -void draw() -{ - if ( myPort.available() > 0) { // If data is available, - char val = char(myPort.read()); // read it and store it in val - if(val == TIME_REQUEST){ - long t = getTimeNow(); - sendTimeMessage(TIME_HEADER, t); - } - else - { - if(val == LF) - ; //igonore - else if(val == CR) - println(); - else - print(val); // echo everying but time request - } - } -} - -void mousePressed() { - sendTimeMessage( TIME_HEADER, getTimeNow()); -} - - -void sendTimeMessage(char header, long time) { - String timeStr = String.valueOf(time); - myPort.write(header); // send header and time to arduino - myPort.write(timeStr); -} - -long getTimeNow(){ - // java time is in ms, we want secs - GregorianCalendar cal = new GregorianCalendar(); - cal.setTime(new Date()); - int tzo = cal.get(Calendar.ZONE_OFFSET); - int dst = cal.get(Calendar.DST_OFFSET); - long now = (cal.getTimeInMillis() / 1000) ; - now = now + (tzo/1000) + (dst/1000); - return now; -} diff --git a/libraries/Time/Examples/Processing/SyncArduinoClock/readme.txt b/libraries/Time/Examples/Processing/SyncArduinoClock/readme.txt deleted file mode 100644 index 985bd80..0000000 --- a/libraries/Time/Examples/Processing/SyncArduinoClock/readme.txt +++ /dev/null @@ -1,9 +0,0 @@ -SyncArduinoClock is a Processing sketch that responds to Arduino requests for -time synchronization messages. - -The portIndex must be set the Serial port connected to Arduino. - -Download TimeSerial.pde onto Arduino and you should see the time -message displayed when you run SyncArduinoClock in Processing. -The Arduino time is set from the time on your computer through the -Processing sketch. \ No newline at end of file diff --git a/libraries/Time/Examples/TimeGPS/TimeGPS.pde b/libraries/Time/Examples/TimeGPS/TimeGPS.pde deleted file mode 100644 index 1c7b25e..0000000 --- a/libraries/Time/Examples/TimeGPS/TimeGPS.pde +++ /dev/null @@ -1,82 +0,0 @@ -/* - * TimeGPS.pde - * example code illustrating time synced from a GPS - * - */ - -#include -#include //http://arduiniana.org/libraries/TinyGPS/ -#include //http://arduiniana.org/libraries/newsoftserial/ -// GPS and NewSoftSerial libraries are the work of Mikal Hart - -TinyGPS gps; -NewSoftSerial serial_gps = NewSoftSerial(3, 2); // receive on pin 3 - -const int offset = 1; // offset hours from gps time (UTC) -time_t prevDisplay = 0; // when the digital clock was displayed - -void setup() -{ - Serial.begin(9600); - serial_gps.begin(4800); - Serial.println("Waiting for GPS time ... "); - setSyncProvider(gpsTimeSync); -} - -void loop() -{ - while (serial_gps.available()) - { - gps.encode(serial_gps.read()); // process gps messages - } - if(timeStatus()!= timeNotSet) - { - if( now() != prevDisplay) //update the display only if the time has changed - { - prevDisplay = now(); - digitalClockDisplay(); - } - } -} - -void digitalClockDisplay(){ - // digital clock display of the time - Serial.print(hour()); - printDigits(minute()); - printDigits(second()); - Serial.print(" "); - Serial.print(day()); - Serial.print(" "); - Serial.print(month()); - Serial.print(" "); - Serial.print(year()); - Serial.println(); -} - -void printDigits(int digits){ - // utility function for digital clock display: prints preceding colon and leading 0 - Serial.print(":"); - if(digits < 10) - Serial.print('0'); - Serial.print(digits); -} - -time_t gpsTimeSync(){ - // returns time if avail from gps, else returns 0 - unsigned long fix_age = 0 ; - gps.get_datetime(NULL,NULL, &fix_age); - unsigned long time_since_last_fix; - if(fix_age < 1000) - return gpsTimeToArduinoTime(); // return time only if updated recently by gps - return 0; -} - -time_t gpsTimeToArduinoTime(){ - // returns time_t from gps date and time with the given offset hours - tmElements_t tm; - int year; - gps.crack_datetime(&year, &tm.Month, &tm.Day, &tm.Hour, &tm.Minute, &tm.Second, NULL, NULL); - tm.Year = year - 1970; - time_t time = makeTime(tm); - return time + (offset * SECS_PER_HOUR); -} diff --git a/libraries/Time/Examples/TimeNTP/TimeNTP.pde b/libraries/Time/Examples/TimeNTP/TimeNTP.pde deleted file mode 100644 index ff9311a..0000000 --- a/libraries/Time/Examples/TimeNTP/TimeNTP.pde +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Time_NTP.pde - * Example showing time sync to NTP time source - * - * This sketch uses the Ethenet library with the user contributed UdpBytewise extension - */ - -#include -#include -#include // UDP library from: bjoern@cs.stanford.edu 12/30/2008 -#if UDP_TX_PACKET_MAX_SIZE <64 || UDP_RX_PACKET_MAX_SIZE < 64 -#error : UDP packet size to small - modify UdpBytewise.h to set buffers to 64 bytes -#endif -/* - * - * You may need to modify the UdpBytewise.h library to allow enough space in the buffers for the NTP packets. - * Open up UdpBytewse.h and set the following buffers to 64 bytes: - * #define UDP_TX_PACKET_MAX_SIZE 64 - * #define UDP_RX_PACKET_MAX_SIZE 64 - */ - - -byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; -byte ip[] = { 192, 168, 1, 44 }; // set the IP address to an unused address on your network - -byte SNTP_server_IP[] = { 192, 43, 244, 18}; // time.nist.gov -//byte SNTP_server_IP[] = { 130,149,17,21}; // ntps1-0.cs.tu-berlin.de -//byte SNTP_server_IP[] = { 192,53,103,108}; // ptbtime1.ptb.de - - -time_t prevDisplay = 0; // when the digital clock was displayed -const long timeZoneOffset = 0L; // set this to the offset in seconds to your local time; - -void setup() -{ - Serial.begin(9600); - Ethernet.begin(mac,ip); - Serial.println("waiting for sync"); - setSyncProvider(getNtpTime); - while(timeStatus()== timeNotSet) - ; // wait until the time is set by the sync provider -} - -void loop() -{ - if( now() != prevDisplay) //update the display only if the time has changed - { - prevDisplay = now(); - digitalClockDisplay(); - } -} - -void digitalClockDisplay(){ - // digital clock display of the time - Serial.print(hour()); - printDigits(minute()); - printDigits(second()); - Serial.print(" "); - Serial.print(day()); - Serial.print(" "); - Serial.print(month()); - Serial.print(" "); - Serial.print(year()); - Serial.println(); -} - -void printDigits(int digits){ - // utility function for digital clock display: prints preceding colon and leading 0 - Serial.print(":"); - if(digits < 10) - Serial.print('0'); - Serial.print(digits); -} - -/*-------- NTP code ----------*/ - -unsigned long getNtpTime() -{ - sendNTPpacket(SNTP_server_IP); - delay(1000); - if ( UdpBytewise.available() ) { - for(int i=0; i < 40; i++) - UdpBytewise.read(); // ignore every field except the time - const unsigned long seventy_years = 2208988800UL + timeZoneOffset; - return getUlong() - seventy_years; - } - return 0; // return 0 if unable to get the time -} - -unsigned long sendNTPpacket(byte *address) -{ - UdpBytewise.begin(123); - UdpBytewise.beginPacket(address, 123); - UdpBytewise.write(B11100011); // LI, Version, Mode - UdpBytewise.write(0); // Stratum - UdpBytewise.write(6); // Polling Interval - UdpBytewise.write(0xEC); // Peer Clock Precision - write_n(0, 8); // Root Delay & Root Dispersion - UdpBytewise.write(49); - UdpBytewise.write(0x4E); - UdpBytewise.write(49); - UdpBytewise.write(52); - write_n(0, 32); //Reference and time stamps - UdpBytewise.endPacket(); -} - -unsigned long getUlong() -{ - unsigned long ulong = (unsigned long)UdpBytewise.read() << 24; - ulong |= (unsigned long)UdpBytewise.read() << 16; - ulong |= (unsigned long)UdpBytewise.read() << 8; - ulong |= (unsigned long)UdpBytewise.read(); - return ulong; -} - -void write_n(int what, int how_many) -{ - for( int i = 0; i < how_many; i++ ) - UdpBytewise.write(what); -} diff --git a/libraries/Time/Examples/TimeRTC/TimeRTC.pde b/libraries/Time/Examples/TimeRTC/TimeRTC.pde deleted file mode 100644 index 0e37c51..0000000 --- a/libraries/Time/Examples/TimeRTC/TimeRTC.pde +++ /dev/null @@ -1,47 +0,0 @@ -/* - * TimeRTC.pde - * example code illustrating Time library with Real Time Clock. - * - */ - -#include -#include -#include // a basic DS1307 library that returns time as a time_t - -void setup() { - Serial.begin(9600); - setSyncProvider(RTC.get); // the function to get the time from the RTC - if(timeStatus()!= timeSet) - Serial.println("Unable to sync with the RTC"); - else - Serial.println("RTC has set the system time"); -} - -void loop() -{ - digitalClockDisplay(); - delay(1000); -} - -void digitalClockDisplay(){ - // digital clock display of the time - Serial.print(hour()); - printDigits(minute()); - printDigits(second()); - Serial.print(" "); - Serial.print(day()); - Serial.print(" "); - Serial.print(month()); - Serial.print(" "); - Serial.print(year()); - Serial.println(); -} - -void printDigits(int digits){ - // utility function for digital clock display: prints preceding colon and leading 0 - Serial.print(":"); - if(digits < 10) - Serial.print('0'); - Serial.print(digits); -} - diff --git a/libraries/Time/Examples/TimeRTCLog/TimeRTCLog.pde b/libraries/Time/Examples/TimeRTCLog/TimeRTCLog.pde deleted file mode 100644 index b8297b6..0000000 --- a/libraries/Time/Examples/TimeRTCLog/TimeRTCLog.pde +++ /dev/null @@ -1,106 +0,0 @@ -/* - * TimeRTCLogger.pde - * example code illustrating adding and subtracting Time. - * - * this sketch logs pin state change events - * the time of the event and time since the previous event is calculated and sent to the serial port. - */ - -#include -#include -#include // a basic DS1307 library that returns time as a time_t - -const int nbrInputPins = 6; // monitor 6 digital pins -const int inputPins[nbrInputPins] = {2,3,4,5,6,7}; // pins to monitor -boolean state[nbrInputPins] ; // the state of the monitored pins -time_t prevEventTime[nbrInputPins] ; // the time of the previous event - -void setup() { - Serial.begin(9600); - setSyncProvider(RTC.get); // the function to sync the time from the RTC - for(int i=0; i < nbrInputPins; i++){ - pinMode( inputPins[i], INPUT); - // digitalWrite( inputPins[i], HIGH); // uncomment these lines if - // state[i] = HIGH; // pull-up resistors are wanted - } -} - -void loop() -{ - for(int i=0; i < nbrInputPins; i++) - { - boolean val = digitalRead(inputPins[i]); - if(val != state[i]) - { - time_t duration = 0; // the time since the previous event - state[i] = val; - time_t timeNow = now(); - if(prevEventTime[i] > 0) - // if this was not the first state change, calculate the time from the previous change - duration = duration = timeNow - prevEventTime[i]; - logEvent(inputPins[i], val, timeNow, duration ); // log the event - prevEventTime[i] = timeNow; // store the time for this event - } - } -} - -void logEvent( int pin, boolean state, time_t timeNow, time_t duration) -{ - Serial.print("Pin "); - Serial.print(pin); - if( state == HIGH) - Serial.print(" went High at "); - else - Serial.print(" went Low at "); - showTime(timeNow); - if(duration > 0){ - // only display duration if greater than 0 - Serial.print(", Duration was "); - showDuration(duration); - } - Serial.println(); -} - - -void showTime(time_t t){ - // display the given time - Serial.print(hour(t)); - printDigits(minute(t)); - printDigits(second(t)); - Serial.print(" "); - Serial.print(day(t)); - Serial.print(" "); - Serial.print(month(t)); - Serial.print(" "); - Serial.print(year(t)); -} - -void printDigits(int digits){ - // utility function for digital clock display: prints preceding colon and leading 0 - Serial.print(":"); - if(digits < 10) - Serial.print('0'); - Serial.print(digits); -} - -void showDuration(time_t duration){ -// prints the duration in days, hours, minutes and seconds - if(duration >= SECS_PER_DAY){ - Serial.print(duration / SECS_PER_DAY); - Serial.print(" day(s) "); - duration = duration % SECS_PER_DAY; - } - if(duration >= SECS_PER_HOUR){ - Serial.print(duration / SECS_PER_HOUR); - Serial.print(" hour(s) "); - duration = duration % SECS_PER_HOUR; - } - if(duration >= SECS_PER_MIN){ - Serial.print(duration / SECS_PER_MIN); - Serial.print(" minute(s) "); - duration = duration % SECS_PER_MIN; - } - Serial.print(duration); - Serial.print(" second(s) "); -} - diff --git a/libraries/Time/Examples/TimeRTCSet/TimeRTCSet.pde b/libraries/Time/Examples/TimeRTCSet/TimeRTCSet.pde deleted file mode 100644 index e798164..0000000 --- a/libraries/Time/Examples/TimeRTCSet/TimeRTCSet.pde +++ /dev/null @@ -1,82 +0,0 @@ -/* - * TimeRTCSet.pde - * example code illustrating Time library with Real Time Clock. - * - * RTC clock is set in response to serial port time message - * A Processing example sketch to set the time is inclided in the download - */ - -#include -#include -#include // a basic DS1307 library that returns time as a time_t - - -void setup() { - Serial.begin(9600); - setSyncProvider(RTC.get); // the function to get the time from the RTC - if(timeStatus()!= timeSet) - Serial.println("Unable to sync with the RTC"); - else - Serial.println("RTC has set the system time"); -} - -void loop() -{ - if(Serial.available()) - { - time_t t = processSyncMessage(); - if(t >0) - { - RTC.set(t); // set the RTC and the system time to the received value - setTime(t); - } - } - digitalClockDisplay(); - delay(1000); -} - -void digitalClockDisplay(){ - // digital clock display of the time - Serial.print(hour()); - printDigits(minute()); - printDigits(second()); - Serial.print(" "); - Serial.print(day()); - Serial.print(" "); - Serial.print(month()); - Serial.print(" "); - Serial.print(year()); - Serial.println(); -} - -void printDigits(int digits){ - // utility function for digital clock display: prints preceding colon and leading 0 - Serial.print(":"); - if(digits < 10) - Serial.print('0'); - Serial.print(digits); -} - -/* code to process time sync messages from the serial port */ -#define TIME_MSG_LEN 11 // time sync to PC is HEADER followed by unix time_t as ten ascii digits -#define TIME_HEADER 'T' // Header tag for serial time sync message - -time_t processSyncMessage() { - // return the time if a valid sync message is received on the serial port. - while(Serial.available() >= TIME_MSG_LEN ){ // time message consists of a header and ten ascii digits - char c = Serial.read() ; - Serial.print(c); - if( c == TIME_HEADER ) { - time_t pctime = 0; - for(int i=0; i < TIME_MSG_LEN -1; i++){ - c = Serial.read(); - if( c >= '0' && c <= '9'){ - pctime = (10 * pctime) + (c - '0') ; // convert digits to a number - } - } - return pctime; - } - } - return 0; -} - diff --git a/libraries/Time/Examples/TimeSerial/TimeSerial.pde b/libraries/Time/Examples/TimeSerial/TimeSerial.pde deleted file mode 100644 index 382c598..0000000 --- a/libraries/Time/Examples/TimeSerial/TimeSerial.pde +++ /dev/null @@ -1,82 +0,0 @@ -/* - * TimeSerial.pde - * example code illustrating Time library set through serial port messages. - * - * Messages consist of the letter T followed by ten digit time (as seconds since Jan 1 1970) - * you can send the text on the next line using Serial Monitor to set the clock to noon Jan 1 2010 - T1262347200 - * - * A Processing example sketch to automatically send the messages is inclided in the download - */ - -#include - -#define TIME_MSG_LEN 11 // time sync to PC is HEADER followed by unix time_t as ten ascii digits -#define TIME_HEADER 'T' // Header tag for serial time sync message -#define TIME_REQUEST 7 // ASCII bell character requests a time sync message - -void setup() { - Serial.begin(9600); - setSyncProvider( requestSync); //set function to call when sync required - Serial.println("Waiting for sync message"); -} - -void loop(){ - if(Serial.available() ) - { - processSyncMessage(); - } - if(timeStatus()!= timeNotSet) - { - digitalWrite(13,timeStatus() == timeSet); // on if synced, off if needs refresh - digitalClockDisplay(); - } - delay(1000); -} - -void digitalClockDisplay(){ - // digital clock display of the time - Serial.print(hour()); - printDigits(minute()); - printDigits(second()); - Serial.print(" "); - Serial.print(day()); - Serial.print(" "); - Serial.print(month()); - Serial.print(" "); - Serial.print(year()); - Serial.println(); -} - -void printDigits(int digits){ - // utility function for digital clock display: prints preceding colon and leading 0 - Serial.print(":"); - if(digits < 10) - Serial.print('0'); - Serial.print(digits); -} - -void processSyncMessage() { - // if time sync available from serial port, update time and return true - while(Serial.available() >= TIME_MSG_LEN ){ // time message consists of a header and ten ascii digits - char c = Serial.read() ; - Serial.print(c); - if( c == TIME_HEADER ) { - time_t pctime = 0; - for(int i=0; i < TIME_MSG_LEN -1; i++){ - c = Serial.read(); - if( c >= '0' && c <= '9'){ - pctime = (10 * pctime) + (c - '0') ; // convert digits to a number - } - } - setTime(pctime); // Sync Arduino clock to the time received on the serial port - } - } -} - -time_t requestSync() -{ - Serial.print(TIME_REQUEST,BYTE); - return 0; // the time will be sent later in response to serial mesg -} - diff --git a/libraries/Time/Examples/TimeSerialDateStrings/TimeSerialDateStrings.pde b/libraries/Time/Examples/TimeSerialDateStrings/TimeSerialDateStrings.pde deleted file mode 100644 index 62eac10..0000000 --- a/libraries/Time/Examples/TimeSerialDateStrings/TimeSerialDateStrings.pde +++ /dev/null @@ -1,80 +0,0 @@ -/* - * TimeSerialDateStrings.pde - * example code illustrating Time library date strings - * - * This sketch adds date string functionality to TimeSerial.pde - * - */ - -#include - -#define TIME_MSG_LEN 11 // time sync to PC is HEADER followed by unix time_t as ten ascii digits -#define TIME_HEADER 'T' // Header tag for serial time sync message -#define TIME_REQUEST 7 // ASCII bell character requests a time sync message - -void setup() { - Serial.begin(9600); - setSyncProvider( requestSync); //set function to call when sync required - Serial.println("Waiting for sync message"); -} - -void loop(){ - if(Serial.available() ) - { - processSyncMessage(); - } - if(timeStatus()!= timeNotSet) - { - digitalClockDisplay(); - } - delay(1000); -} - -void digitalClockDisplay(){ - // digital clock display of the time - Serial.print(hour()); - printDigits(minute()); - printDigits(second()); - Serial.print(" "); - Serial.print(dayStr(weekday())); - Serial.print(" "); - Serial.print(day()); - Serial.print(" "); - Serial.print(monthShortStr(month())); - Serial.print(" "); - Serial.print(year()); - Serial.println(); -} - -void printDigits(int digits){ - // utility function for digital clock display: prints preceding colon and leading 0 - Serial.print(":"); - if(digits < 10) - Serial.print('0'); - Serial.print(digits); -} - -void processSyncMessage() { - // if time sync available from serial port, update time and return true - while(Serial.available() >= TIME_MSG_LEN ){ // time message consists of a header and ten ascii digits - char c = Serial.read() ; - Serial.print(c); - if( c == TIME_HEADER ) { - time_t pctime = 0; - for(int i=0; i < TIME_MSG_LEN -1; i++){ - c = Serial.read(); - if( c >= '0' && c <= '9'){ - pctime = (10 * pctime) + (c - '0') ; // convert digits to a number - } - } - setTime(pctime); // Sync Arduino clock to the time received on the serial port - } - } -} - -time_t requestSync() -{ - Serial.print(TIME_REQUEST,BYTE); - return 0; // the time will be sent later in response to serial mesg -} - diff --git a/libraries/Time/Readme.txt b/libraries/Time/Readme.txt deleted file mode 100644 index 06d82f1..0000000 --- a/libraries/Time/Readme.txt +++ /dev/null @@ -1,131 +0,0 @@ -Readme file for Arduino Time Library - -Time is a library that provides timekeeping functionality for Arduino. - -The code is derived from the Playground DateTime library but is updated -to provide an API that is more flexable and easier to use. - -A primary goal was to enable date and time functionality that can be used with -a variety of external time sources with minimum differences required in sketch logic. - -Example sketches illustrate how similar sketch code can be used with: a Real Time Clock, -internet NTP time service, GPS time data, and Serial time messages from a computer -for time synchronization. - -The functions available in the library include: - -hour(); // the hour now (0-23) -minute(); // the minute now (0-59) -second(); // the second now (0-59) -day(); // the day now (1-31) -weekday(); // day of the week, Sunday is day 0 -month(); // the month now (1-12) -year(); // the full four digit year: (2009, 2010 etc) - -there are also functions to return the hour in 12 hour format -hourFormat12(); // the hour now in 12 hour format -isAM(); // returns true if time now is AM -isPM(); // returns true if time now is PM - -now(); // returns the current time as seconds since Jan 1 1970 - -The time and date functions can take an optional parameter for the time. This prevents -errors if the time rolls over between elements. For example, if a new minute begins -between getting the minute and second, the values will be inconsistent. Using the -following functions eliminates this probglem - time_t t = now(); // store the current time in time variable t - hour(t); // returns the hour for the given time t - minute(t); // returns the minute for the given time t - second(t); // returns the second for the given time t - day(t); // the day for the given time t - weekday(t); // day of the week for the given time t - month(t); // the month for the given time t - year(t); // the year for the given time t - - -Functions for managing the timer services are: -setTime(t); // set the system time to the give time t -setTime(hr,min,sec,day,mnth,yr); // alternative to above, yr is 2 or 4 digit yr (2010 or 10 sets year to 2010) -adjustTime(adjustment); // adjust system time by adding the adjustment value - -timeStatus(); // indicates if time has been set and recently synchronized - // returns one of the following enumerations: - timeNotSet // the time has never been set, the clock started at Jan 1 1970 - timeNeedsSync // the time had been set but a sync attempt did not succeed - timeSet // the time is set and is synced -Time and Date values are not valid if the status is timeNotSet. Otherwise values can be used but -the returned time may have drifted if the status is timeNeedsSync. - -setSyncProvider(getTimeFunction); // set the external time provider -setSyncInterval(interval); // set the number of seconds between re-sync - - -There are many convenience macros in the time.h file for time constants and conversion of time units. - -To use the library, copy the download to the Library directory. - -The Time directory contains the Time library and some example sketches -illustrating how the library can be used with various time sources: - -- TimeSerial.pde shows Arduino as a clock without external hardware. - It is synchronized by time messages sent over the serial port. - A companion Processing sketch will automatically provide these messages - if it is running and connected to the Arduino serial port. - -- TimeSerialDateStrings.pde adds day and month name strings to the sketch above - Short (3 character) and long strings are available to print the days of - the week and names of the months. - -- TimeRTC uses a DS1307 real time clock to provide time synchronization. - A basic RTC library named DS1307RTC is included in the download. - To run this sketch the DS1307RTC library must be installed. - -- TimeRTCSet is similar to the above and adds the ability to set the Real Time Clock - -- TimeRTCLog demonstrates how to calculate the difference between times. - It is a vary simple logger application that monitors events on digtial pins - and prints (to the serial port) the time of an event and the time period since the previous event. - -- TimeNTP uses the Arduino Ethernet shield to access time using the internet NTP time service. - The NTP protocol uses UDP and the UdpBytewise library is required, see: - http://bitbucket.org/bjoern/arduino_osc/src/14667490521f/libraries/Ethernet/ - --TimeGPS gets time from a GPS - This requires the TinyGPS and NewSoftSerial libraries from Mikal Hart: - http://arduiniana.org/libraries/TinyGPS and http://arduiniana.org/libraries/newsoftserial/ - -Differences between this code and the playground DateTime library -although the Time library is based on the DateTime codebase, the API has changed. -Changes in the Time library API: -- time elements are functions returning int (they are variables in DateTime) -- Years start from 1970 -- days of the week and months start from 1 (they start from 0 in DateTime) -- DateStrings do not require a seperate library -- time elements can be accessed non-atomically (in DateTime they are always atomic) -- function added to automatically sync time with extrnal source -- localTime and maketime parameters changed, localTime renamed to breakTime - -Technical notes: - -Internal system time is based on the standard Unix time_t. -The value is the number of seconds since Jan 1 1970. -System time begins at zero when the sketch starts. - -The internal time can be automatically synchronized at regular intervals to an external time source. -This is enabled by calling the setSyncProvider(provider) function - the provider argument is -the address of a function that returns the current time as a time_t. -See the sketches in the examples directory for usage. - -The default interval for re-syncing the time is 5 minutes but can be changed by calling the -setSyncInterval( interval) method to set the number of seconds between re-sync attempts. - -The Time library defines a structure for holding time elements that is a compact version of the C tm structure. -All the members of the Arduino tm structure are bytes and the year is offset from 1970. -Convenience macros provide conversion to and from the Arduino format. - -Low level functions to convert between system time and individual time elements are provided: - breakTime( time, &tm); // break time_t into elements stored in tm struct - makeTime( &tm); // return time_t from elements stored in tm struct - -The DS1307RTC library included in the download provides an example of how a time provider -can use the low level functions to interface with the Time library. \ No newline at end of file diff --git a/libraries/Time/Time.cpp b/libraries/Time/Time.cpp deleted file mode 100644 index 86bdcd5..0000000 --- a/libraries/Time/Time.cpp +++ /dev/null @@ -1,307 +0,0 @@ -/* - time.c - low level time and date functions - Copyright (c) Michael Margolis 2009 - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - 6 Jan 2010 - initial release - 12 Feb 2010 - fixed leap year calculation error - 1 Nov 2010 - fixed setTime bug (thanks to Korman for this) -*/ - -#if ARDUINO >= 100 -#include -#else -#include -#endif - -#include "Time.h" - -static tmElements_t tm; // a cache of time elements -static time_t cacheTime; // the time the cache was updated -static time_t syncInterval = 300; // time sync will be attempted after this many seconds - -void refreshCache( time_t t){ - if( t != cacheTime) - { - breakTime(t, tm); - cacheTime = t; - } -} - -int hour() { // the hour now - return hour(now()); -} - -int hour(time_t t) { // the hour for the given time - refreshCache(t); - return tm.Hour; -} - -int hourFormat12() { // the hour now in 12 hour format - return hourFormat12(now()); -} - -int hourFormat12(time_t t) { // the hour for the given time in 12 hour format - refreshCache(t); - if( tm.Hour == 0 ) - return 12; // 12 midnight - else if( tm.Hour > 12) - return tm.Hour - 12 ; - else - return tm.Hour ; -} - -uint8_t isAM() { // returns true if time now is AM - return !isPM(now()); -} - -uint8_t isAM(time_t t) { // returns true if given time is AM - return !isPM(t); -} - -uint8_t isPM() { // returns true if PM - return isPM(now()); -} - -uint8_t isPM(time_t t) { // returns true if PM - return (hour(t) >= 12); -} - -int minute() { - return minute(now()); -} - -int minute(time_t t) { // the minute for the given time - refreshCache(t); - return tm.Minute; -} - -int second() { - return second(now()); -} - -int second(time_t t) { // the second for the given time - refreshCache(t); - return tm.Second; -} - -int day(){ - return(day(now())); -} - -int day(time_t t) { // the day for the given time (0-6) - refreshCache(t); - return tm.Day; -} - -int weekday() { // Sunday is day 1 - return weekday(now()); -} - -int weekday(time_t t) { - refreshCache(t); - return tm.Wday; -} - -int month(){ - return month(now()); -} - -int month(time_t t) { // the month for the given time - refreshCache(t); - return tm.Month; -} - -int year() { // as in Processing, the full four digit year: (2009, 2010 etc) - return year(now()); -} - -int year(time_t t) { // the year for the given time - refreshCache(t); - return tmYearToCalendar(tm.Year); -} - -/*============================================================================*/ -/* functions to convert to and from system time */ -/* These are for interfacing with time serivces and are not normally needed in a sketch */ - -// leap year calulator expects year argument as years offset from 1970 -#define LEAP_YEAR(Y) ( ((1970+Y)>0) && !((1970+Y)%4) && ( ((1970+Y)%100) || !((1970+Y)%400) ) ) - -static const uint8_t monthDays[]={31,28,31,30,31,30,31,31,30,31,30,31}; // API starts months from 1, this array starts from 0 - -void breakTime(time_t time, tmElements_t &tm){ -// break the given time_t into time components -// this is a more compact version of the C library localtime function -// note that year is offset from 1970 !!! - - uint8_t year; - uint8_t month, monthLength; - unsigned long days; - - tm.Second = time % 60; - time /= 60; // now it is minutes - tm.Minute = time % 60; - time /= 60; // now it is hours - tm.Hour = time % 24; - time /= 24; // now it is days - tm.Wday = ((time + 4) % 7) + 1; // Sunday is day 1 - - year = 0; - days = 0; - while((unsigned)(days += (LEAP_YEAR(year) ? 366 : 365)) <= time) { - year++; - } - tm.Year = year; // year is offset from 1970 - - days -= LEAP_YEAR(year) ? 366 : 365; - time -= days; // now it is days in this year, starting at 0 - - days=0; - month=0; - monthLength=0; - for (month=0; month<12; month++) { - if (month==1) { // february - if (LEAP_YEAR(year)) { - monthLength=29; - } else { - monthLength=28; - } - } else { - monthLength = monthDays[month]; - } - - if (time >= monthLength) { - time -= monthLength; - } else { - break; - } - } - tm.Month = month + 1; // jan is month 1 - tm.Day = time + 1; // day of month -} - -time_t makeTime(tmElements_t &tm){ -// assemble time elements into time_t -// note year argument is offset from 1970 (see macros in time.h to convert to other formats) -// previous version used full four digit year (or digits since 2000),i.e. 2009 was 2009 or 9 - - int i; - time_t seconds; - - // seconds from 1970 till 1 jan 00:00:00 of the given year - seconds= tm.Year*(SECS_PER_DAY * 365); - for (i = 0; i < tm.Year; i++) { - if (LEAP_YEAR(i)) { - seconds += SECS_PER_DAY; // add extra days for leap years - } - } - - // add days for this year, months start from 1 - for (i = 1; i < tm.Month; i++) { - if ( (i == 2) && LEAP_YEAR(tm.Year)) { - seconds += SECS_PER_DAY * 29; - } else { - seconds += SECS_PER_DAY * monthDays[i-1]; //monthDay array starts from 0 - } - } - seconds+= (tm.Day-1) * SECS_PER_DAY; - seconds+= tm.Hour * SECS_PER_HOUR; - seconds+= tm.Minute * SECS_PER_MIN; - seconds+= tm.Second; - return seconds; -} -/*=====================================================*/ -/* Low level system time functions */ - -static time_t sysTime = 0; -static time_t prevMillis = 0; -static time_t nextSyncTime = 0; -static timeStatus_t Status = timeNotSet; - -getExternalTime getTimePtr; // pointer to external sync function -//setExternalTime setTimePtr; // not used in this version - -#ifdef TIME_DRIFT_INFO // define this to get drift data -time_t sysUnsyncedTime = 0; // the time sysTime unadjusted by sync -#endif - - -time_t now(){ - while( millis() - prevMillis >= 1000){ - sysTime++; - prevMillis += 1000; -#ifdef TIME_DRIFT_INFO - sysUnsyncedTime++; // this can be compared to the synced time to measure long term drift -#endif - } - if(nextSyncTime <= sysTime){ - if(getTimePtr != 0){ - time_t t = getTimePtr(); - if( t != 0) - setTime(t); - else - Status = (Status == timeNotSet) ? timeNotSet : timeNeedsSync; - } - } - return sysTime; -} - -void setTime(time_t t){ -#ifdef TIME_DRIFT_INFO - if(sysUnsyncedTime == 0) - sysUnsyncedTime = t; // store the time of the first call to set a valid Time -#endif - - sysTime = t; - nextSyncTime = t + syncInterval; - Status = timeSet; - prevMillis = millis(); // restart counting from now (thanks to Korman for this fix) -} - -void setTime(int hr,int min,int sec,int dy, int mnth, int yr){ - // year can be given as full four digit year or two digts (2010 or 10 for 2010); - //it is converted to years since 1970 - if( yr > 99) - yr = yr - 1970; - else - yr += 30; - tm.Year = yr; - tm.Month = mnth; - tm.Day = dy; - tm.Hour = hr; - tm.Minute = min; - tm.Second = sec; - setTime(makeTime(tm)); -} - -void adjustTime(long adjustment){ - sysTime += adjustment; -} - -timeStatus_t timeStatus(){ // indicates if time has been set and recently synchronized - return Status; -} - -void setSyncProvider( getExternalTime getTimeFunction){ - getTimePtr = getTimeFunction; - nextSyncTime = sysTime; - now(); // this will sync the clock -} - -void setSyncInterval(time_t interval){ // set the number of seconds between re-sync - syncInterval = interval; -} \ No newline at end of file diff --git a/libraries/Time/Time.h b/libraries/Time/Time.h deleted file mode 100644 index e54f3b0..0000000 --- a/libraries/Time/Time.h +++ /dev/null @@ -1,126 +0,0 @@ -/* - time.h - low level time and date functions -*/ - -/* - July 3 2011 - fixed elapsedSecsThisWeek macro (thanks Vincent Valdy for this) - - fixed daysToTime_t macro (thanks maniacbug) -*/ - -#ifndef _Time_h -#define _Time_h - -#include - -typedef unsigned long time_t; - -typedef enum {timeNotSet, timeNeedsSync, timeSet -} timeStatus_t ; - -typedef enum { - dowInvalid, dowSunday, dowMonday, dowTuesday, dowWednesday, dowThursday, dowFriday, dowSaturday -} timeDayOfWeek_t; - -typedef enum { - tmSecond, tmMinute, tmHour, tmWday, tmDay,tmMonth, tmYear, tmNbrFields -} tmByteFields; - -typedef struct { - uint8_t Second; - uint8_t Minute; - uint8_t Hour; - uint8_t Wday; // day of week, sunday is day 1 - uint8_t Day; - uint8_t Month; - uint8_t Year; // offset from 1970; -} tmElements_t, TimeElements, *tmElementsPtr_t; - -//convenience macros to convert to and from tm years -#define tmYearToCalendar(Y) ((Y) + 1970) // full four digit year -#define CalendarYrToTm(Y) ((Y) - 1970) -#define tmYearToY2k(Y) ((Y) - 30) // offset is from 2000 -#define y2kYearToTm(Y) ((Y) + 30) - -typedef time_t(*getExternalTime)(); -//typedef void (*setExternalTime)(const time_t); // not used in this version - - -/*==============================================================================*/ -/* Useful Constants */ -#define SECS_PER_MIN (60UL) -#define SECS_PER_HOUR (3600UL) -#define SECS_PER_DAY (SECS_PER_HOUR * 24UL) -#define DAYS_PER_WEEK (7UL) -#define SECS_PER_WEEK (SECS_PER_DAY * DAYS_PER_WEEK) -#define SECS_PER_YEAR (SECS_PER_WEEK * 52UL) -#define SECS_YR_2000 (946684800UL) // the time at the start of y2k - -/* Useful Macros for getting elapsed time */ -#define numberOfSeconds(_time_) (_time_ % SECS_PER_MIN) -#define numberOfMinutes(_time_) ((_time_ / SECS_PER_MIN) % SECS_PER_MIN) -#define numberOfHours(_time_) (( _time_% SECS_PER_DAY) / SECS_PER_HOUR) -#define dayOfWeek(_time_) ((( _time_ / SECS_PER_DAY + 4) % DAYS_PER_WEEK)+1) // 1 = Sunday -#define elapsedDays(_time_) ( _time_ / SECS_PER_DAY) // this is number of days since Jan 1 1970 -#define elapsedSecsToday(_time_) (_time_ % SECS_PER_DAY) // the number of seconds since last midnight -// The following macros are used in calculating alarms and assume the clock is set to a date later than Jan 1 1971 -// Always set the correct time before settting alarms -#define previousMidnight(_time_) (( _time_ / SECS_PER_DAY) * SECS_PER_DAY) // time at the start of the given day -#define nextMidnight(_time_) ( previousMidnight(_time_) + SECS_PER_DAY ) // time at the end of the given day -#define elapsedSecsThisWeek(_time_) (elapsedSecsToday(_time_) + ((dayOfWeek(_time_)-1) * SECS_PER_DAY) ) // note that week starts on day 1 -#define previousSunday(_time_) (_time_ - elapsedSecsThisWeek(_time_)) // time at the start of the week for the given time -#define nextSunday(_time_) ( previousSunday(_time_)+SECS_PER_WEEK) // time at the end of the week for the given time - - -/* Useful Macros for converting elapsed time to a time_t */ -#define minutesToTime_t ((M)) ( (M) * SECS_PER_MIN) -#define hoursToTime_t ((H)) ( (H) * SECS_PER_HOUR) -#define daysToTime_t ((D)) ( (D) * SECS_PER_DAY) // fixed on Jul 22 2011 -#define weeksToTime_t ((W)) ( (W) * SECS_PER_WEEK) - -/*============================================================================*/ -/* time and date functions */ -int hour(); // the hour now -int hour(time_t t); // the hour for the given time -int hourFormat12(); // the hour now in 12 hour format -int hourFormat12(time_t t); // the hour for the given time in 12 hour format -uint8_t isAM(); // returns true if time now is AM -uint8_t isAM(time_t t); // returns true the given time is AM -uint8_t isPM(); // returns true if time now is PM -uint8_t isPM(time_t t); // returns true the given time is PM -int minute(); // the minute now -int minute(time_t t); // the minute for the given time -int second(); // the second now -int second(time_t t); // the second for the given time -int day(); // the day now -int day(time_t t); // the day for the given time -int weekday(); // the weekday now (Sunday is day 1) -int weekday(time_t t); // the weekday for the given time -int month(); // the month now (Jan is month 1) -int month(time_t t); // the month for the given time -int year(); // the full four digit year: (2009, 2010 etc) -int year(time_t t); // the year for the given time - -time_t now(); // return the current time as seconds since Jan 1 1970 -void setTime(time_t t); -void setTime(int hr,int min,int sec,int day, int month, int yr); -void adjustTime(long adjustment); - -/* date strings */ -#define dt_MAX_STRING_LEN 9 // length of longest date string (excluding terminating null) -char* monthStr(uint8_t month); -char* dayStr(uint8_t day); -char* monthShortStr(uint8_t month); -char* dayShortStr(uint8_t day); - -/* time sync functions */ -timeStatus_t timeStatus(); // indicates if time has been set and recently synchronized -void setSyncProvider( getExternalTime getTimeFunction); // identify the external time provider -void setSyncInterval(time_t interval); // set the number of seconds between re-sync - -/* low level functions to convert to and from system time */ -void breakTime(time_t time, tmElements_t &tm); // break time_t into elements -time_t makeTime(tmElements_t &tm); // convert time elements into time_t - - -#endif /* _Time_h */ - diff --git a/libraries/Time/keywords.txt b/libraries/Time/keywords.txt deleted file mode 100644 index f921672..0000000 --- a/libraries/Time/keywords.txt +++ /dev/null @@ -1,33 +0,0 @@ -####################################### -# Syntax Coloring Map For Time -####################################### - -####################################### -# Datatypes (KEYWORD1) -####################################### -time_t KEYWORD1 -####################################### -# Methods and Functions (KEYWORD2) -####################################### -now KEYWORD2 -second KEYWORD2 -minute KEYWORD2 -hour KEYWORD2 -day KEYWORD2 -month KEYWORD2 -year KEYWORD2 -isAM KEYWORD2 -isPM KEYWORD2 -weekday KEYWORD2 -setTime KEYWORD2 -adjustTime KEYWORD2 -setSyncProvider KEYWORD2 -setSyncInteval KEYWORD2 -timeStatus KEYWORD2 -####################################### -# Instances (KEYWORD2) -####################################### - -####################################### -# Constants (LITERAL1) -####################################### diff --git a/libraries/Timer/Event.cpp b/libraries/Timer/Event.cpp deleted file mode 100644 index 6ef838d..0000000 --- a/libraries/Timer/Event.cpp +++ /dev/null @@ -1,65 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301, USA. - */ - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * - Code by Simon Monk - http://www.simonmonk.org -* * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -// For Arduino 1.0 and earlier -#if defined(ARDUINO) && ARDUINO >= 100 -#include "Arduino.h" -#else -#include "WProgram.h" -#endif - -#include "Event.h" - -Event::Event(void) -{ - eventType = EVENT_NONE; -} - -void Event::update(void) -{ - unsigned long now = millis(); - update(now); -} - -void Event::update(unsigned long now) -{ - if (now - lastEventTime >= period) - { - switch (eventType) - { - case EVENT_EVERY: - (*callback)(); - break; - - case EVENT_OSCILLATE: - pinState = ! pinState; - digitalWrite(pin, pinState); - break; - } - lastEventTime = now; - count++; - } - if (repeatCount > -1 && count >= repeatCount) - { - eventType = EVENT_NONE; - } -} diff --git a/libraries/Timer/Event.h b/libraries/Timer/Event.h deleted file mode 100644 index 2f64d3f..0000000 --- a/libraries/Timer/Event.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301, USA. - */ - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * - Code by Simon Monk - http://www.simonmonk.org -* * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -#ifndef Event_h -#define Event_h - -#include - -#define EVENT_NONE 0 -#define EVENT_EVERY 1 -#define EVENT_OSCILLATE 2 - -class Event -{ - -public: - Event(void); - void update(void); - void update(unsigned long now); - int8_t eventType; - unsigned long period; - int repeatCount; - uint8_t pin; - uint8_t pinState; - void (*callback)(void); - unsigned long lastEventTime; - int count; -}; - -#endif diff --git a/libraries/Timer/ReadMe.txt b/libraries/Timer/ReadMe.txt deleted file mode 100644 index 5b08895..0000000 --- a/libraries/Timer/ReadMe.txt +++ /dev/null @@ -1,29 +0,0 @@ -1.0 by Simon Monk -Library as downloaded 02Feb2012 22:55 UTC from http://srmonk.blogspot.com/2012/01/arduino-timer-library.html - -1.1 by Jack Christensen -Changed data types of variables and functions: - o event types and indexes changed from int to int8_t. - o periods and durations changed from lon to unsigned long. - o update() and stop() functions typed as void, since they return nothing. - o pin numbers and pin values changed from int to uint8_t, this agrees with digitalWrite(). - o added return values to Timer::pulse() and Timer::oscillate(uint8_t, unsigned long, uint8_t). - o changed test in Event::update() to use subtraction to avoid rollover issues. - o Updated keywords.txt file to include all functions. - -1.2 by Damian Philipp - o Added a range check to Timer::stop() to avoid memory corruption. - o Added constants to : - - NO_TIMER_AVAILABLE: Signals that while an event was to be queued, no free timer could be found. - - TIMER_NOT_AN_EVENT: Can be used to flag a variable that *might* contain a timer ID as - *not* containing a timer ID - o Replaced a bunch of magic numbers in by the above constants - o Added several comments - o Added Timer::pulseImmediate(). pulseImmediate sets the pin to the specified value for the given - duration. After the duration, the pin is set to !value. - -1.3 by Jack Christensen - o Added "blink2" example illustrating flashing two LEDs at different rates. - o 19Oct2013: This is the last v1.x release. It will continue to be available on GitHub - as a branch named v1.3. Future development will continue with Sandy Walsh's v2.0 which - can pass context (timer ID, etc.) to the callback functions. \ No newline at end of file diff --git a/libraries/Timer/Timer.cpp b/libraries/Timer/Timer.cpp deleted file mode 100644 index 9c8b889..0000000 --- a/libraries/Timer/Timer.cpp +++ /dev/null @@ -1,138 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301, USA. - */ - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * - Code by Simon Monk - http://www.simonmonk.org -* * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -// For Arduino 1.0 and earlier -#if defined(ARDUINO) && ARDUINO >= 100 -#include "Arduino.h" -#else -#include "WProgram.h" -#endif - -#include "Timer.h" - -Timer::Timer(void) -{ -} - -int8_t Timer::every(unsigned long period, void (*callback)(), int repeatCount) -{ - int8_t i = findFreeEventIndex(); - if (i == -1) return -1; - - _events[i].eventType = EVENT_EVERY; - _events[i].period = period; - _events[i].repeatCount = repeatCount; - _events[i].callback = callback; - _events[i].lastEventTime = millis(); - _events[i].count = 0; - return i; -} - -int8_t Timer::every(unsigned long period, void (*callback)()) -{ - return every(period, callback, -1); // - means forever -} - -int8_t Timer::after(unsigned long period, void (*callback)()) -{ - return every(period, callback, 1); -} - -int8_t Timer::oscillate(uint8_t pin, unsigned long period, uint8_t startingValue, int repeatCount) -{ - int8_t i = findFreeEventIndex(); - if (i == NO_TIMER_AVAILABLE) return NO_TIMER_AVAILABLE; - - _events[i].eventType = EVENT_OSCILLATE; - _events[i].pin = pin; - _events[i].period = period; - _events[i].pinState = startingValue; - digitalWrite(pin, startingValue); - _events[i].repeatCount = repeatCount * 2; // full cycles not transitions - _events[i].lastEventTime = millis(); - _events[i].count = 0; - return i; -} - -int8_t Timer::oscillate(uint8_t pin, unsigned long period, uint8_t startingValue) -{ - return oscillate(pin, period, startingValue, -1); // forever -} - -/** - * This method will generate a pulse of !startingValue, occuring period after the - * call of this method and lasting for period. The Pin will be left in !startingValue. - */ -int8_t Timer::pulse(uint8_t pin, unsigned long period, uint8_t startingValue) -{ - return oscillate(pin, period, startingValue, 1); // once -} - -/** - * This method will generate a pulse of startingValue, starting immediately and of - * length period. The pin will be left in the !startingValue state - */ -int8_t Timer::pulseImmediate(uint8_t pin, unsigned long period, uint8_t pulseValue) -{ - int8_t id(oscillate(pin, period, pulseValue, 1)); - // now fix the repeat count - if (id >= 0 && id < MAX_NUMBER_OF_EVENTS) { - _events[id].repeatCount = 1; - } - return id; -} - - -void Timer::stop(int8_t id) -{ - if (id >= 0 && id < MAX_NUMBER_OF_EVENTS) { - _events[id].eventType = EVENT_NONE; - } -} - -void Timer::update(void) -{ - unsigned long now = millis(); - update(now); -} - -void Timer::update(unsigned long now) -{ - for (int8_t i = 0; i < MAX_NUMBER_OF_EVENTS; i++) - { - if (_events[i].eventType != EVENT_NONE) - { - _events[i].update(now); - } - } -} -int8_t Timer::findFreeEventIndex(void) -{ - for (int8_t i = 0; i < MAX_NUMBER_OF_EVENTS; i++) - { - if (_events[i].eventType == EVENT_NONE) - { - return i; - } - } - return NO_TIMER_AVAILABLE; -} diff --git a/libraries/Timer/Timer.h b/libraries/Timer/Timer.h deleted file mode 100644 index dd5ce93..0000000 --- a/libraries/Timer/Timer.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301, USA. - */ - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * - Code by Simon Monk - http://www.simonmonk.org -* * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -#ifndef Timer_h -#define Timer_h - -#include -#include "Event.h" - -#define MAX_NUMBER_OF_EVENTS (10) - -#define TIMER_NOT_AN_EVENT (-2) -#define NO_TIMER_AVAILABLE (-1) - -class Timer -{ - -public: - Timer(void); - - int8_t every(unsigned long period, void (*callback)(void)); - int8_t every(unsigned long period, void (*callback)(void), int repeatCount); - int8_t after(unsigned long duration, void (*callback)(void)); - int8_t oscillate(uint8_t pin, unsigned long period, uint8_t startingValue); - int8_t oscillate(uint8_t pin, unsigned long period, uint8_t startingValue, int repeatCount); - - /** - * This method will generate a pulse of !startingValue, occuring period after the - * call of this method and lasting for period. The Pin will be left in !startingValue. - */ - int8_t pulse(uint8_t pin, unsigned long period, uint8_t startingValue); - - /** - * This method will generate a pulse of pulseValue, starting immediately and of - * length period. The pin will be left in the !pulseValue state - */ - int8_t pulseImmediate(uint8_t pin, unsigned long period, uint8_t pulseValue); - void stop(int8_t id); - void update(void); - void update(unsigned long now); - -protected: - Event _events[MAX_NUMBER_OF_EVENTS]; - int8_t findFreeEventIndex(void); - -}; - -#endif diff --git a/libraries/Timer/examples/blink2/blink2.ino b/libraries/Timer/examples/blink2/blink2.ino deleted file mode 100644 index e9080a4..0000000 --- a/libraries/Timer/examples/blink2/blink2.ino +++ /dev/null @@ -1,29 +0,0 @@ -//Flash two LEDs at different rates using Simon Monk's Timer library -//http://www.doctormonk.com/2012/01/arduino-timer-library.html -// -//Jack Christensen 30Sep2013 -// -//Beerware license: Free for any and all purposes, but if you find it -//useful AND we actually meet someday, you can buy me a beer! - -#include "Timer.h" //http://github.com/JChristensen/Timer - -const int LED1 = 8; //connect one LED to this pin (with appropriate current-limiting resistor of course) -const int LED2 = 9; //connect another LED to this pin (don't forget the resistor) -const unsigned long PERIOD1 = 1000; //one second -const unsigned long PERIOD2 = 10000; //ten seconds -Timer t; //instantiate the timer object - -void setup(void) -{ - pinMode(LED1, OUTPUT); - pinMode(LED2, OUTPUT); - t.oscillate(LED1, PERIOD1, HIGH); - t.oscillate(LED2, PERIOD2, HIGH); -} - -void loop(void) -{ - t.update(); -} - diff --git a/libraries/Timer/examples/kitchen_sink/kitchen_sink.pde b/libraries/Timer/examples/kitchen_sink/kitchen_sink.pde deleted file mode 100644 index 991bcb4..0000000 --- a/libraries/Timer/examples/kitchen_sink/kitchen_sink.pde +++ /dev/null @@ -1,42 +0,0 @@ -#include "Timer.h" - -Timer t; - -int ledEvent; - -void setup() -{ - Serial.begin(9600); - int tickEvent = t.every(2000, doSomething); - Serial.print("2 second tick started id="); - Serial.println(tickEvent); - - pinMode(13, OUTPUT); - ledEvent = t.oscillate(13, 50, HIGH); - Serial.print("LED event started id="); - Serial.println(ledEvent); - - int afterEvent = t.after(10000, doAfter); - Serial.print("After event started id="); - Serial.println(afterEvent); - -} - -void loop() -{ - t.update(); -} - -void doSomething() -{ - Serial.print("2 second tick: millis()="); - Serial.println(millis()); -} - - -void doAfter() -{ - Serial.println("stop the led event"); - t.stop(ledEvent); - t.oscillate(13, 500, HIGH, 5); -} diff --git a/libraries/Timer/examples/pin_high_10_mins/pin_high_10_mins.pde b/libraries/Timer/examples/pin_high_10_mins/pin_high_10_mins.pde deleted file mode 100644 index 3700d48..0000000 --- a/libraries/Timer/examples/pin_high_10_mins/pin_high_10_mins.pde +++ /dev/null @@ -1,17 +0,0 @@ -#include "Timer.h" - -Timer t; -int pin = 13; - -void setup() -{ - pinMode(pin, OUTPUT); - t.pulse(pin, 10 * 1000, HIGH); // 10 seconds - // t.pulse(pin, 10 * 60 * 1000, HIGH); // 10 minutes -} - -void loop() -{ - t.update(); -} - diff --git a/libraries/Timer/examples/read_A0_flashLED/read_A0_flashLED.pde b/libraries/Timer/examples/read_A0_flashLED/read_A0_flashLED.pde deleted file mode 100644 index e103e37..0000000 --- a/libraries/Timer/examples/read_A0_flashLED/read_A0_flashLED.pde +++ /dev/null @@ -1,22 +0,0 @@ -#include "Timer.h" - -Timer t; -int pin = 13; - -void setup() -{ - Serial.begin(9600); - pinMode(pin, OUTPUT); - t.oscillate(pin, 100, LOW); - t.every(1000, takeReading); -} - -void loop() -{ - t.update(); -} - -void takeReading() -{ - Serial.println(analogRead(0)); -} diff --git a/libraries/Timer/keywords.txt b/libraries/Timer/keywords.txt deleted file mode 100644 index a5107b8..0000000 --- a/libraries/Timer/keywords.txt +++ /dev/null @@ -1,31 +0,0 @@ -####################################### -# Syntax Coloring Map For Timer Library -####################################### - -####################################### -# Datatypes (KEYWORD1) -####################################### - -Timer KEYWORD1 -Event KEYWORD1 - -####################################### -# Methods and Functions (KEYWORD2) -####################################### - -every KEYWORD2 -after KEYWORD2 -oscillate KEYWORD2 -pulse KEYWORD2 -pulseImmediate KEYWORD2 -stop KEYWORD2 -update KEYWORD2 -findFreeEventIndex KEYWORD2 - -####################################### -# Instances (KEYWORD2) -####################################### - -####################################### -# Constants (LITERAL1) -####################################### diff --git a/libraries/TinyGPSPlus/TinyGPS++.cpp b/libraries/TinyGPSPlus/TinyGPS++.cpp deleted file mode 100644 index ec23467..0000000 --- a/libraries/TinyGPSPlus/TinyGPS++.cpp +++ /dev/null @@ -1,501 +0,0 @@ -/* -TinyGPS++ - a small GPS library for Arduino providing universal NMEA parsing -Based on work by and "distanceBetween" and "courseTo" courtesy of Maarten Lamers. -Suggestion to add satellites, courseTo(), and cardinal() by Matt Monson. -Location precision improvements suggested by Wayne Holder. -Copyright (C) 2008-2013 Mikal Hart -All rights reserved. - -This library is free software; you can redistribute it and/or -modify it under the terms of the GNU Lesser General Public -License as published by the Free Software Foundation; either -version 2.1 of the License, or (at your option) any later version. - -This library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public -License along with this library; if not, write to the Free Software -Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#include "TinyGPS++.h" - -#include -#include -#include - -#define _GPRMCterm "GPRMC" -#define _GPGGAterm "GPGGA" - -TinyGPSPlus::TinyGPSPlus() - : parity(0) - , isChecksumTerm(false) - , curSentenceType(GPS_SENTENCE_OTHER) - , curTermNumber(0) - , curTermOffset(0) - , sentenceHasFix(false) - , customElts(0) - , customCandidates(0) - , encodedCharCount(0) - , sentencesWithFixCount(0) - , failedChecksumCount(0) - , passedChecksumCount(0) -{ - term[0] = '\0'; -} - -// -// public methods -// - -bool TinyGPSPlus::encode(char c) -{ - ++encodedCharCount; - - switch(c) - { - case ',': // term terminators - parity ^= (uint8_t)c; - case '\r': - case '\n': - case '*': - { - bool isValidSentence = false; - if (curTermOffset < sizeof(term)) - { - term[curTermOffset] = 0; - isValidSentence = endOfTermHandler(); - } - ++curTermNumber; - curTermOffset = 0; - isChecksumTerm = c == '*'; - return isValidSentence; - } - break; - - case '$': // sentence begin - curTermNumber = curTermOffset = 0; - parity = 0; - curSentenceType = GPS_SENTENCE_OTHER; - isChecksumTerm = false; - sentenceHasFix = false; - return false; - - default: // ordinary characters - if (curTermOffset < sizeof(term) - 1) - term[curTermOffset++] = c; - if (!isChecksumTerm) - parity ^= c; - return false; - } - - return false; -} - -// -// internal utilities -// -int TinyGPSPlus::fromHex(char a) -{ - if (a >= 'A' && a <= 'F') - return a - 'A' + 10; - else if (a >= 'a' && a <= 'f') - return a - 'a' + 10; - else - return a - '0'; -} - -// static -// Parse a (potentially negative) number with up to 2 decimal digits -xxxx.yy -int32_t TinyGPSPlus::parseDecimal(const char *term) -{ - bool negative = *term == '-'; - if (negative) ++term; - int32_t ret = 100 * (int32_t)atol(term); - while (isdigit(*term)) ++term; - if (*term == '.' && isdigit(term[1])) - { - ret += 10 * (term[1] - '0'); - if (isdigit(term[2])) - ret += term[2] - '0'; - } - return negative ? -ret : ret; -} - -// static -// Parse degrees in that funny NMEA format DDMM.MMMM -void TinyGPSPlus::parseDegrees(const char *term, RawDegrees °) -{ - uint32_t leftOfDecimal = (uint32_t)atol(term); - uint16_t minutes = (uint16_t)(leftOfDecimal % 100); - uint32_t multiplier = 10000000UL; - uint32_t tenMillionthsOfMinutes = minutes * multiplier; - - deg.deg = (int16_t)(leftOfDecimal / 100); - - while (isdigit(*term)) - ++term; - - if (*term == '.') - while (isdigit(*++term)) - { - multiplier /= 10; - tenMillionthsOfMinutes += (*term - '0') * multiplier; - } - - deg.billionths = (5 * tenMillionthsOfMinutes + 1) / 3; - deg.negative = false; -} - -#define COMBINE(sentence_type, term_number) (((unsigned)(sentence_type) << 5) | term_number) - -// Processes a just-completed term -// Returns true if new sentence has just passed checksum test and is validated -bool TinyGPSPlus::endOfTermHandler() -{ - // If it's the checksum term, and the checksum checks out, commit - if (isChecksumTerm) - { - byte checksum = 16 * fromHex(term[0]) + fromHex(term[1]); - if (checksum == parity) - { - passedChecksumCount++; - if (sentenceHasFix) - ++sentencesWithFixCount; - - switch(curSentenceType) - { - case GPS_SENTENCE_GPRMC: - date.commit(); - time.commit(); - if (sentenceHasFix) - { - location.commit(); - speed.commit(); - course.commit(); - } - break; - case GPS_SENTENCE_GPGGA: - time.commit(); - if (sentenceHasFix) - { - location.commit(); - altitude.commit(); - } - satellites.commit(); - hdop.commit(); - break; - } - - // Commit all custom listeners of this sentence type - for (TinyGPSCustom *p = customCandidates; p != NULL && strcmp(p->sentenceName, customCandidates->sentenceName) == 0; p = p->next) - p->commit(); - return true; - } - - else - { - ++failedChecksumCount; - } - - return false; - } - - // the first term determines the sentence type - if (curTermNumber == 0) - { - if (!strcmp(term, _GPRMCterm)) - curSentenceType = GPS_SENTENCE_GPRMC; - else if (!strcmp(term, _GPGGAterm)) - curSentenceType = GPS_SENTENCE_GPGGA; - else - curSentenceType = GPS_SENTENCE_OTHER; - - // Any custom candidates of this sentence type? - for (customCandidates = customElts; customCandidates != NULL && strcmp(customCandidates->sentenceName, term) < 0; customCandidates = customCandidates->next); - if (customCandidates != NULL && strcmp(customCandidates->sentenceName, term) > 0) - customCandidates = NULL; - - return false; - } - - if (curSentenceType != GPS_SENTENCE_OTHER && term[0]) - switch(COMBINE(curSentenceType, curTermNumber)) - { - case COMBINE(GPS_SENTENCE_GPRMC, 1): // Time in both sentences - case COMBINE(GPS_SENTENCE_GPGGA, 1): - time.setTime(term); - break; - case COMBINE(GPS_SENTENCE_GPRMC, 2): // GPRMC validity - sentenceHasFix = term[0] == 'A'; - break; - case COMBINE(GPS_SENTENCE_GPRMC, 3): // Latitude - case COMBINE(GPS_SENTENCE_GPGGA, 2): - location.setLatitude(term); - break; - case COMBINE(GPS_SENTENCE_GPRMC, 4): // N/S - case COMBINE(GPS_SENTENCE_GPGGA, 3): - location.rawNewLatData.negative = term[0] == 'S'; - break; - case COMBINE(GPS_SENTENCE_GPRMC, 5): // Longitude - case COMBINE(GPS_SENTENCE_GPGGA, 4): - location.setLongitude(term); - break; - case COMBINE(GPS_SENTENCE_GPRMC, 6): // E/W - case COMBINE(GPS_SENTENCE_GPGGA, 5): - location.rawNewLngData.negative = term[0] == 'W'; - break; - case COMBINE(GPS_SENTENCE_GPRMC, 7): // Speed (GPRMC) - speed.set(term); - break; - case COMBINE(GPS_SENTENCE_GPRMC, 8): // Course (GPRMC) - course.set(term); - break; - case COMBINE(GPS_SENTENCE_GPRMC, 9): // Date (GPRMC) - date.setDate(term); - break; - case COMBINE(GPS_SENTENCE_GPGGA, 6): // Fix data (GPGGA) - sentenceHasFix = term[0] > '0'; - break; - case COMBINE(GPS_SENTENCE_GPGGA, 7): // Satellites used (GPGGA) - satellites.set(term); - break; - case COMBINE(GPS_SENTENCE_GPGGA, 8): // HDOP - hdop.set(term); - break; - case COMBINE(GPS_SENTENCE_GPGGA, 9): // Altitude (GPGGA) - altitude.set(term); - break; - } - - // Set custom values as needed - for (TinyGPSCustom *p = customCandidates; p != NULL && strcmp(p->sentenceName, customCandidates->sentenceName) == 0 && p->termNumber <= curTermNumber; p = p->next) - if (p->termNumber == curTermNumber) - p->set(term); - - return false; -} - -/* static */ -double TinyGPSPlus::distanceBetween(double lat1, double long1, double lat2, double long2) -{ - // returns distance in meters between two positions, both specified - // as signed decimal-degrees latitude and longitude. Uses great-circle - // distance computation for hypothetical sphere of radius 6372795 meters. - // Because Earth is no exact sphere, rounding errors may be up to 0.5%. - // Courtesy of Maarten Lamers - double delta = radians(long1-long2); - double sdlong = sin(delta); - double cdlong = cos(delta); - lat1 = radians(lat1); - lat2 = radians(lat2); - double slat1 = sin(lat1); - double clat1 = cos(lat1); - double slat2 = sin(lat2); - double clat2 = cos(lat2); - delta = (clat1 * slat2) - (slat1 * clat2 * cdlong); - delta = sq(delta); - delta += sq(clat2 * sdlong); - delta = sqrt(delta); - double denom = (slat1 * slat2) + (clat1 * clat2 * cdlong); - delta = atan2(delta, denom); - return delta * 6372795; -} - -double TinyGPSPlus::courseTo(double lat1, double long1, double lat2, double long2) -{ - // returns course in degrees (North=0, West=270) from position 1 to position 2, - // both specified as signed decimal-degrees latitude and longitude. - // Because Earth is no exact sphere, calculated course may be off by a tiny fraction. - // Courtesy of Maarten Lamers - double dlon = radians(long2-long1); - lat1 = radians(lat1); - lat2 = radians(lat2); - double a1 = sin(dlon) * cos(lat2); - double a2 = sin(lat1) * cos(lat2) * cos(dlon); - a2 = cos(lat1) * sin(lat2) - a2; - a2 = atan2(a1, a2); - if (a2 < 0.0) - { - a2 += TWO_PI; - } - return degrees(a2); -} - -const char *TinyGPSPlus::cardinal(double course) -{ - static const char* directions[] = {"N", "NNE", "NE", "ENE", "E", "ESE", "SE", "SSE", "S", "SSW", "SW", "WSW", "W", "WNW", "NW", "NNW"}; - int direction = (int)((course + 11.25f) / 22.5f); - return directions[direction % 16]; -} - -void TinyGPSLocation::commit() -{ - rawLatData = rawNewLatData; - rawLngData = rawNewLngData; - lastCommitTime = millis(); - valid = updated = true; -} - -void TinyGPSLocation::setLatitude(const char *term) -{ - TinyGPSPlus::parseDegrees(term, rawNewLatData); -} - -void TinyGPSLocation::setLongitude(const char *term) -{ - TinyGPSPlus::parseDegrees(term, rawNewLngData); -} - -double TinyGPSLocation::lat() -{ - updated = false; - double ret = rawLatData.deg + rawLatData.billionths / 1000000000.0; - return rawLatData.negative ? -ret : ret; -} - -double TinyGPSLocation::lng() -{ - updated = false; - double ret = rawLngData.deg + rawLngData.billionths / 1000000000.0; - return rawLngData.negative ? -ret : ret; -} - -void TinyGPSDate::commit() -{ - date = newDate; - lastCommitTime = millis(); - valid = updated = true; -} - -void TinyGPSTime::commit() -{ - time = newTime; - lastCommitTime = millis(); - valid = updated = true; -} - -void TinyGPSTime::setTime(const char *term) -{ - newTime = (uint32_t)TinyGPSPlus::parseDecimal(term); -} - -void TinyGPSDate::setDate(const char *term) -{ - newDate = atol(term); -} - -uint16_t TinyGPSDate::year() -{ - updated = false; - uint16_t year = date % 100; - return year + 2000; -} - -uint8_t TinyGPSDate::month() -{ - updated = false; - return (date / 100) % 100; -} - -uint8_t TinyGPSDate::day() -{ - updated = false; - return date / 10000; -} - -uint8_t TinyGPSTime::hour() -{ - updated = false; - return time / 1000000; -} - -uint8_t TinyGPSTime::minute() -{ - updated = false; - return (time / 10000) % 100; -} - -uint8_t TinyGPSTime::second() -{ - updated = false; - return (time / 100) % 100; -} - -uint8_t TinyGPSTime::centisecond() -{ - updated = false; - return time % 100; -} - -void TinyGPSDecimal::commit() -{ - val = newval; - lastCommitTime = millis(); - valid = updated = true; -} - -void TinyGPSDecimal::set(const char *term) -{ - newval = TinyGPSPlus::parseDecimal(term); -} - -void TinyGPSInteger::commit() -{ - val = newval; - lastCommitTime = millis(); - valid = updated = true; -} - -void TinyGPSInteger::set(const char *term) -{ - newval = atol(term); -} - -TinyGPSCustom::TinyGPSCustom(TinyGPSPlus &gps, const char *_sentenceName, int _termNumber) -{ - begin(gps, _sentenceName, _termNumber); -} - -void TinyGPSCustom::begin(TinyGPSPlus &gps, const char *_sentenceName, int _termNumber) -{ - lastCommitTime = 0; - updated = valid = false; - sentenceName = _sentenceName; - termNumber = _termNumber; - memset(stagingBuffer, '\0', sizeof(stagingBuffer)); - memset(buffer, '\0', sizeof(buffer)); - - // Insert this item into the GPS tree - gps.insertCustom(this, _sentenceName, _termNumber); -} - -void TinyGPSCustom::commit() -{ - strcpy(this->buffer, this->stagingBuffer); - lastCommitTime = millis(); - valid = updated = true; -} - -void TinyGPSCustom::set(const char *term) -{ - strncpy(this->stagingBuffer, term, sizeof(this->stagingBuffer)); -} - -void TinyGPSPlus::insertCustom(TinyGPSCustom *pElt, const char *sentenceName, int termNumber) -{ - TinyGPSCustom **ppelt; - - for (ppelt = &this->customElts; *ppelt != NULL; ppelt = &(*ppelt)->next) - { - int cmp = strcmp(sentenceName, (*ppelt)->sentenceName); - if (cmp < 0 || (cmp == 0 && termNumber < (*ppelt)->termNumber)) - break; - } - - pElt->next = *ppelt; - *ppelt = pElt; -} diff --git a/libraries/TinyGPSPlus/TinyGPS++.h b/libraries/TinyGPSPlus/TinyGPS++.h deleted file mode 100644 index b4221f4..0000000 --- a/libraries/TinyGPSPlus/TinyGPS++.h +++ /dev/null @@ -1,273 +0,0 @@ -/* -TinyGPS++ - a small GPS library for Arduino providing universal NMEA parsing -Based on work by and "distanceBetween" and "courseTo" courtesy of Maarten Lamers. -Suggestion to add satellites, courseTo(), and cardinal() by Matt Monson. -Location precision improvements suggested by Wayne Holder. -Copyright (C) 2008-2013 Mikal Hart -All rights reserved. - -This library is free software; you can redistribute it and/or -modify it under the terms of the GNU Lesser General Public -License as published by the Free Software Foundation; either -version 2.1 of the License, or (at your option) any later version. - -This library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public -License along with this library; if not, write to the Free Software -Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#ifndef __TinyGPSPlus_h -#define __TinyGPSPlus_h - -#if defined(ARDUINO) && ARDUINO >= 100 -#include "Arduino.h" -#else -#include "WProgram.h" -#endif -#include - -#define _GPS_VERSION "0.92" // software version of this library -#define _GPS_MPH_PER_KNOT 1.15077945 -#define _GPS_MPS_PER_KNOT 0.51444444 -#define _GPS_KMPH_PER_KNOT 1.852 -#define _GPS_MILES_PER_METER 0.00062137112 -#define _GPS_KM_PER_METER 0.001 -#define _GPS_FEET_PER_METER 3.2808399 -#define _GPS_MAX_FIELD_SIZE 15 - -struct RawDegrees -{ - uint16_t deg; - uint32_t billionths; - bool negative; -public: - RawDegrees() : deg(0), billionths(0), negative(false) - {} -}; - -struct TinyGPSLocation -{ - friend class TinyGPSPlus; -public: - bool isValid() const { return valid; } - bool isUpdated() const { return updated; } - uint32_t age() const { return valid ? millis() - lastCommitTime : (uint32_t)ULONG_MAX; } - const RawDegrees &rawLat() { updated = false; return rawLatData; } - const RawDegrees &rawLng() { updated = false; return rawLngData; } - double lat(); - double lng(); - - TinyGPSLocation() : valid(false), updated(false) - {} - -private: - bool valid, updated; - RawDegrees rawLatData, rawLngData, rawNewLatData, rawNewLngData; - uint32_t lastCommitTime; - void commit(); - void setLatitude(const char *term); - void setLongitude(const char *term); -}; - -struct TinyGPSDate -{ - friend class TinyGPSPlus; -public: - bool isValid() const { return valid; } - bool isUpdated() const { return updated; } - uint32_t age() const { return valid ? millis() - lastCommitTime : (uint32_t)ULONG_MAX; } - - uint32_t value() { updated = false; return date; } - uint16_t year(); - uint8_t month(); - uint8_t day(); - - TinyGPSDate() : valid(false), updated(false), date(0) - {} - -private: - bool valid, updated; - uint32_t date, newDate; - uint32_t lastCommitTime; - void commit(); - void setDate(const char *term); -}; - -struct TinyGPSTime -{ - friend class TinyGPSPlus; -public: - bool isValid() const { return valid; } - bool isUpdated() const { return updated; } - uint32_t age() const { return valid ? millis() - lastCommitTime : (uint32_t)ULONG_MAX; } - - uint32_t value() { updated = false; return time; } - uint8_t hour(); - uint8_t minute(); - uint8_t second(); - uint8_t centisecond(); - - TinyGPSTime() : valid(false), updated(false), time(0) - {} - -private: - bool valid, updated; - uint32_t time, newTime; - uint32_t lastCommitTime; - void commit(); - void setTime(const char *term); -}; - -struct TinyGPSDecimal -{ - friend class TinyGPSPlus; -public: - bool isValid() const { return valid; } - bool isUpdated() const { return updated; } - uint32_t age() const { return valid ? millis() - lastCommitTime : (uint32_t)ULONG_MAX; } - int32_t value() { updated = false; return val; } - - TinyGPSDecimal() : valid(false), updated(false), val(0) - {} - -private: - bool valid, updated; - uint32_t lastCommitTime; - int32_t val, newval; - void commit(); - void set(const char *term); -}; - -struct TinyGPSInteger -{ - friend class TinyGPSPlus; -public: - bool isValid() const { return valid; } - bool isUpdated() const { return updated; } - uint32_t age() const { return valid ? millis() - lastCommitTime : (uint32_t)ULONG_MAX; } - uint32_t value() { updated = false; return val; } - - TinyGPSInteger() : valid(false), updated(false), val(0) - {} - -private: - bool valid, updated; - uint32_t lastCommitTime; - uint32_t val, newval; - void commit(); - void set(const char *term); -}; - -struct TinyGPSSpeed : TinyGPSDecimal -{ - double knots() { return value() / 100.0; } - double mph() { return _GPS_MPH_PER_KNOT * value() / 100.0; } - double mps() { return _GPS_MPS_PER_KNOT * value() / 100.0; } - double kmph() { return _GPS_KMPH_PER_KNOT * value() / 100.0; } -}; - -struct TinyGPSCourse : public TinyGPSDecimal -{ - double deg() { return value() / 100.0; } -}; - -struct TinyGPSAltitude : TinyGPSDecimal -{ - double meters() { return value() / 100.0; } - double miles() { return _GPS_MILES_PER_METER * value() / 100.0; } - double kilometers() { return _GPS_KM_PER_METER * value() / 100.0; } - double feet() { return _GPS_FEET_PER_METER * value() / 100.0; } -}; - -class TinyGPSPlus; -class TinyGPSCustom -{ -public: - TinyGPSCustom() {}; - TinyGPSCustom(TinyGPSPlus &gps, const char *sentenceName, int termNumber); - void begin(TinyGPSPlus &gps, const char *_sentenceName, int _termNumber); - - bool isUpdated() const { return updated; } - bool isValid() const { return valid; } - uint32_t age() const { return valid ? millis() - lastCommitTime : (uint32_t)ULONG_MAX; } - const char *value() { updated = false; return buffer; } - -private: - void commit(); - void set(const char *term); - - char stagingBuffer[_GPS_MAX_FIELD_SIZE + 1]; - char buffer[_GPS_MAX_FIELD_SIZE + 1]; - unsigned long lastCommitTime; - bool valid, updated; - const char *sentenceName; - int termNumber; - friend class TinyGPSPlus; - TinyGPSCustom *next; -}; - -class TinyGPSPlus -{ -public: - TinyGPSPlus(); - bool encode(char c); // process one character received from GPS - TinyGPSPlus &operator << (char c) {encode(c); return *this;} - - TinyGPSLocation location; - TinyGPSDate date; - TinyGPSTime time; - TinyGPSSpeed speed; - TinyGPSCourse course; - TinyGPSAltitude altitude; - TinyGPSInteger satellites; - TinyGPSDecimal hdop; - - static const char *libraryVersion() { return _GPS_VERSION; } - - static double distanceBetween(double lat1, double long1, double lat2, double long2); - static double courseTo(double lat1, double long1, double lat2, double long2); - static const char *cardinal(double course); - - static int32_t parseDecimal(const char *term); - static void parseDegrees(const char *term, RawDegrees °); - - uint32_t charsProcessed() const { return encodedCharCount; } - uint32_t sentencesWithFix() const { return sentencesWithFixCount; } - uint32_t failedChecksum() const { return failedChecksumCount; } - uint32_t passedChecksum() const { return passedChecksumCount; } - -private: - enum {GPS_SENTENCE_GPGGA, GPS_SENTENCE_GPRMC, GPS_SENTENCE_OTHER}; - - // parsing state variables - uint8_t parity; - bool isChecksumTerm; - char term[_GPS_MAX_FIELD_SIZE]; - uint8_t curSentenceType; - uint8_t curTermNumber; - uint8_t curTermOffset; - bool sentenceHasFix; - - // custom element support - friend class TinyGPSCustom; - TinyGPSCustom *customElts; - TinyGPSCustom *customCandidates; - void insertCustom(TinyGPSCustom *pElt, const char *sentenceName, int index); - - // statistics - uint32_t encodedCharCount; - uint32_t sentencesWithFixCount; - uint32_t failedChecksumCount; - uint32_t passedChecksumCount; - - // internal utilities - int fromHex(char a); - bool endOfTermHandler(); -}; - -#endif // def(__TinyGPSPlus_h) diff --git a/libraries/TinyGPSPlus/examples/BasicExample/BasicExample.ino b/libraries/TinyGPSPlus/examples/BasicExample/BasicExample.ino deleted file mode 100644 index da62825..0000000 --- a/libraries/TinyGPSPlus/examples/BasicExample/BasicExample.ino +++ /dev/null @@ -1,91 +0,0 @@ -#include -/* - This sample sketch should be the first you try out when you are testing a TinyGPS++ - (TinyGPSPlus) installation. In normal use, you feed TinyGPS++ objects characters from - a serial NMEA GPS device, but this example uses static strings for simplicity. -*/ - -// A sample NMEA stream. -const char *gpsStream = - "$GPRMC,045103.000,A,3014.1984,N,09749.2872,W,0.67,161.46,030913,,,A*7C\r\n" - "$GPGGA,045104.000,3014.1985,N,09749.2873,W,1,09,1.2,211.6,M,-22.5,M,,0000*62\r\n" - "$GPRMC,045200.000,A,3014.3820,N,09748.9514,W,36.88,65.02,030913,,,A*77\r\n" - "$GPGGA,045201.000,3014.3864,N,09748.9411,W,1,10,1.2,200.8,M,-22.5,M,,0000*6C\r\n" - "$GPRMC,045251.000,A,3014.4275,N,09749.0626,W,0.51,217.94,030913,,,A*7D\r\n" - "$GPGGA,045252.000,3014.4273,N,09749.0628,W,1,09,1.3,206.9,M,-22.5,M,,0000*6F\r\n"; - -// The TinyGPS++ object -TinyGPSPlus gps; - -void setup() -{ - Serial.begin(115200); - - Serial.println(F("BasicExample.ino")); - Serial.println(F("Basic demonstration of TinyGPS++ (no device needed)")); - Serial.print(F("Testing TinyGPS++ library v. ")); Serial.println(TinyGPSPlus::libraryVersion()); - Serial.println(F("by Mikal Hart")); - Serial.println(); - - while (*gpsStream) - if (gps.encode(*gpsStream++)) - displayInfo(); - - Serial.println(); - Serial.println(F("Done.")); -} - -void loop() -{ -} - -void displayInfo() -{ - Serial.print(F("Location: ")); - if (gps.location.isValid()) - { - Serial.print(gps.location.lat(), 6); - Serial.print(F(",")); - Serial.print(gps.location.lng(), 6); - } - else - { - Serial.print(F("INVALID")); - } - - Serial.print(F(" Date/Time: ")); - if (gps.date.isValid()) - { - Serial.print(gps.date.month()); - Serial.print(F("/")); - Serial.print(gps.date.day()); - Serial.print(F("/")); - Serial.print(gps.date.year()); - } - else - { - Serial.print(F("INVALID")); - } - - Serial.print(F(" ")); - if (gps.time.isValid()) - { - if (gps.time.hour() < 10) Serial.print(F("0")); - Serial.print(gps.time.hour()); - Serial.print(F(":")); - if (gps.time.minute() < 10) Serial.print(F("0")); - Serial.print(gps.time.minute()); - Serial.print(F(":")); - if (gps.time.second() < 10) Serial.print(F("0")); - Serial.print(gps.time.second()); - Serial.print(F(".")); - if (gps.time.centisecond() < 10) Serial.print(F("0")); - Serial.print(gps.time.centisecond()); - } - else - { - Serial.print(F("INVALID")); - } - - Serial.println(); -} diff --git a/libraries/TinyGPSPlus/examples/DeviceExample/DeviceExample.ino b/libraries/TinyGPSPlus/examples/DeviceExample/DeviceExample.ino deleted file mode 100644 index 489c30b..0000000 --- a/libraries/TinyGPSPlus/examples/DeviceExample/DeviceExample.ino +++ /dev/null @@ -1,92 +0,0 @@ -#include -#include -/* - This sample sketch demonstrates the normal use of a TinyGPS++ (TinyGPSPlus) object. - It requires the use of SoftwareSerial, and assumes that you have a - 4800-baud serial GPS device hooked up on pins 4(rx) and 3(tx). -*/ -static const int RXPin = 4, TXPin = 3; -static const uint32_t GPSBaud = 4800; - -// The TinyGPS++ object -TinyGPSPlus gps; - -// The serial connection to the GPS device -SoftwareSerial ss(RXPin, TXPin); - -void setup() -{ - Serial.begin(115200); - ss.begin(GPSBaud); - - Serial.println(F("DeviceExample.ino")); - Serial.println(F("A simple demonstration of TinyGPS++ with an attached GPS module")); - Serial.print(F("Testing TinyGPS++ library v. ")); Serial.println(TinyGPSPlus::libraryVersion()); - Serial.println(F("by Mikal Hart")); - Serial.println(); -} - -void loop() -{ - // This sketch displays information every time a new sentence is correctly encoded. - while (ss.available() > 0) - if (gps.encode(ss.read())) - displayInfo(); - - if (millis() > 5000 && gps.charsProcessed() < 10) - { - Serial.println(F("No GPS detected: check wiring.")); - while(true); - } -} - -void displayInfo() -{ - Serial.print(F("Location: ")); - if (gps.location.isValid()) - { - Serial.print(gps.location.lat(), 6); - Serial.print(F(",")); - Serial.print(gps.location.lng(), 6); - } - else - { - Serial.print(F("INVALID")); - } - - Serial.print(F(" Date/Time: ")); - if (gps.date.isValid()) - { - Serial.print(gps.date.month()); - Serial.print(F("/")); - Serial.print(gps.date.day()); - Serial.print(F("/")); - Serial.print(gps.date.year()); - } - else - { - Serial.print(F("INVALID")); - } - - Serial.print(F(" ")); - if (gps.time.isValid()) - { - if (gps.time.hour() < 10) Serial.print(F("0")); - Serial.print(gps.time.hour()); - Serial.print(F(":")); - if (gps.time.minute() < 10) Serial.print(F("0")); - Serial.print(gps.time.minute()); - Serial.print(F(":")); - if (gps.time.second() < 10) Serial.print(F("0")); - Serial.print(gps.time.second()); - Serial.print(F(".")); - if (gps.time.centisecond() < 10) Serial.print(F("0")); - Serial.print(gps.time.centisecond()); - } - else - { - Serial.print(F("INVALID")); - } - - Serial.println(); -} diff --git a/libraries/TinyGPSPlus/examples/FullExample/FullExample.ino b/libraries/TinyGPSPlus/examples/FullExample/FullExample.ino deleted file mode 100644 index 5a997fa..0000000 --- a/libraries/TinyGPSPlus/examples/FullExample/FullExample.ino +++ /dev/null @@ -1,159 +0,0 @@ -#include -#include -/* - This sample code demonstrates the normal use of a TinyGPS++ (TinyGPSPlus) object. - It requires the use of SoftwareSerial, and assumes that you have a - 4800-baud serial GPS device hooked up on pins 4(rx) and 3(tx). -*/ -static const int RXPin = 7, TXPin = 2; -static const uint32_t GPSBaud = 9600; - -// The TinyGPS++ object -TinyGPSPlus gps; - -// The serial connection to the GPS device -SoftwareSerial ss(RXPin, TXPin); - -void setup() -{ - Serial.begin(115200); - ss.begin(GPSBaud); - - Serial.println(F("FullExample.ino")); - Serial.println(F("An extensive example of many interesting TinyGPS++ features")); - Serial.print(F("Testing TinyGPS++ library v. ")); Serial.println(TinyGPSPlus::libraryVersion()); - Serial.println(F("by Mikal Hart")); - Serial.println(); - Serial.println(F("Sats HDOP Latitude Longitude Fix Date Time Date Alt Course Speed Card Distance Course Card Chars Sentences Checksum")); - Serial.println(F(" (deg) (deg) Age Age (m) --- from GPS ---- ---- to London ---- RX RX Fail")); - Serial.println(F("---------------------------------------------------------------------------------------------------------------------------------------")); -} - -void loop() -{ - static const double LONDON_LAT = 51.508131, LONDON_LON = -0.128002; - - printInt(gps.satellites.value(), gps.satellites.isValid(), 5); - printInt(gps.hdop.value(), gps.hdop.isValid(), 5); - printFloat(gps.location.lat(), gps.location.isValid(), 11, 6); - printFloat(gps.location.lng(), gps.location.isValid(), 12, 6); - printInt(gps.location.age(), gps.location.isValid(), 5); - printDateTime(gps.date, gps.time); - printFloat(gps.altitude.meters(), gps.altitude.isValid(), 7, 2); - printFloat(gps.course.deg(), gps.course.isValid(), 7, 2); - printFloat(gps.speed.kmph(), gps.speed.isValid(), 6, 2); - printStr(gps.course.isValid() ? TinyGPSPlus::cardinal(gps.course.value()) : "*** ", 6); - - unsigned long distanceKmToLondon = - (unsigned long)TinyGPSPlus::distanceBetween( - gps.location.lat(), - gps.location.lng(), - LONDON_LAT, - LONDON_LON) / 1000; - printInt(distanceKmToLondon, gps.location.isValid(), 9); - - double courseToLondon = - TinyGPSPlus::courseTo( - gps.location.lat(), - gps.location.lng(), - LONDON_LAT, - LONDON_LON); - - printFloat(courseToLondon, gps.location.isValid(), 7, 2); - - const char *cardinalToLondon = TinyGPSPlus::cardinal(courseToLondon); - - printStr(gps.location.isValid() ? cardinalToLondon : "*** ", 6); - - printInt(gps.charsProcessed(), true, 6); - printInt(gps.sentencesWithFix(), true, 10); - printInt(gps.failedChecksum(), true, 9); - Serial.println(); - - smartDelay(1000); - - if (millis() > 5000 && gps.charsProcessed() < 10) - Serial.println(F("No GPS data received: check wiring")); -} - -// This custom version of delay() ensures that the gps object -// is being "fed". -void smartDelay(unsigned long ms) -{ - unsigned long start = millis(); - do - { - while (ss.available()) - gps.encode(ss.read()); - } while (millis() - start < ms); -} - -void printFloat(float val, bool valid, int len, int prec) -{ - if (!valid) - { - while (len-- > 1) - Serial.print('*'); - Serial.print(' '); - } - else - { - Serial.print(val, prec); - int vi = abs((int)val); - int flen = prec + (val < 0.0 ? 2 : 1); // . and - - flen += vi >= 1000 ? 4 : vi >= 100 ? 3 : vi >= 10 ? 2 : 1; - for (int i=flen; i 0) - sz[len-1] = ' '; - Serial.print(sz); - smartDelay(0); -} - -void printDateTime(TinyGPSDate &d, TinyGPSTime &t) -{ - if (!d.isValid()) - { - Serial.print(F("********** ")); - } - else - { - char sz[32]; - sprintf(sz, "%02d/%02d/%02d ", d.month(), d.day(), d.year()); - Serial.print(sz); - } - - if (!t.isValid()) - { - Serial.print(F("******** ")); - } - else - { - char sz[32]; - sprintf(sz, "%02d:%02d:%02d ", t.hour(), t.minute(), t.second()); - Serial.print(sz); - } - - printInt(d.age(), d.isValid(), 5); - smartDelay(0); -} - -void printStr(const char *str, int len) -{ - int slen = strlen(str); - for (int i=0; i -#include -/* - This sample code demonstrates just about every built-in operation of TinyGPS++ (TinyGPSPlus). - It requires the use of SoftwareSerial, and assumes that you have a - 4800-baud serial GPS device hooked up on pins 4(rx) and 3(tx). -*/ -static const int RXPin = 4, TXPin = 3; -static const uint32_t GPSBaud = 4800; - -// The TinyGPS++ object -TinyGPSPlus gps; - -// The serial connection to the GPS device -SoftwareSerial ss(RXPin, TXPin); - -// For stats that happen every 5 seconds -unsigned long last = 0UL; - -void setup() -{ - Serial.begin(115200); - ss.begin(GPSBaud); - - Serial.println(F("KitchenSink.ino")); - Serial.println(F("Demonstrating nearly every feature of TinyGPS++")); - Serial.print(F("Testing TinyGPS++ library v. ")); Serial.println(TinyGPSPlus::libraryVersion()); - Serial.println(F("by Mikal Hart")); - Serial.println(); -} - -void loop() -{ - // Dispatch incoming characters - while (ss.available() > 0) - gps.encode(ss.read()); - - if (gps.location.isUpdated()) - { - Serial.print(F("LOCATION Fix Age=")); - Serial.print(gps.location.age()); - Serial.print(F("ms Raw Lat=")); - Serial.print(gps.location.rawLat().negative ? "-" : "+"); - Serial.print(gps.location.rawLat().deg); - Serial.print("[+"); - Serial.print(gps.location.rawLat().billionths); - Serial.print(F(" billionths], Raw Long=")); - Serial.print(gps.location.rawLng().negative ? "-" : "+"); - Serial.print(gps.location.rawLng().deg); - Serial.print("[+"); - Serial.print(gps.location.rawLng().billionths); - Serial.print(F(" billionths], Lat=")); - Serial.print(gps.location.lat(), 6); - Serial.print(F(" Long=")); - Serial.println(gps.location.lng(), 6); - } - - else if (gps.date.isUpdated()) - { - Serial.print(F("DATE Fix Age=")); - Serial.print(gps.date.age()); - Serial.print(F("ms Raw=")); - Serial.print(gps.date.value()); - Serial.print(F(" Year=")); - Serial.print(gps.date.year()); - Serial.print(F(" Month=")); - Serial.print(gps.date.month()); - Serial.print(F(" Day=")); - Serial.println(gps.date.day()); - } - - else if (gps.time.isUpdated()) - { - Serial.print(F("TIME Fix Age=")); - Serial.print(gps.time.age()); - Serial.print(F("ms Raw=")); - Serial.print(gps.time.value()); - Serial.print(F(" Hour=")); - Serial.print(gps.time.hour()); - Serial.print(F(" Minute=")); - Serial.print(gps.time.minute()); - Serial.print(F(" Second=")); - Serial.print(gps.time.second()); - Serial.print(F(" Hundredths=")); - Serial.println(gps.time.centisecond()); - } - - else if (gps.speed.isUpdated()) - { - Serial.print(F("SPEED Fix Age=")); - Serial.print(gps.speed.age()); - Serial.print(F("ms Raw=")); - Serial.print(gps.speed.value()); - Serial.print(F(" Knots=")); - Serial.print(gps.speed.knots()); - Serial.print(F(" MPH=")); - Serial.print(gps.speed.mph()); - Serial.print(F(" m/s=")); - Serial.print(gps.speed.mps()); - Serial.print(F(" km/h=")); - Serial.println(gps.speed.kmph()); - } - - else if (gps.course.isUpdated()) - { - Serial.print(F("COURSE Fix Age=")); - Serial.print(gps.course.age()); - Serial.print(F("ms Raw=")); - Serial.print(gps.course.value()); - Serial.print(F(" Deg=")); - Serial.println(gps.course.deg()); - } - - else if (gps.altitude.isUpdated()) - { - Serial.print(F("ALTITUDE Fix Age=")); - Serial.print(gps.altitude.age()); - Serial.print(F("ms Raw=")); - Serial.print(gps.altitude.value()); - Serial.print(F(" Meters=")); - Serial.print(gps.altitude.meters()); - Serial.print(F(" Miles=")); - Serial.print(gps.altitude.miles()); - Serial.print(F(" KM=")); - Serial.print(gps.altitude.kilometers()); - Serial.print(F(" Feet=")); - Serial.println(gps.altitude.feet()); - } - - else if (gps.satellites.isUpdated()) - { - Serial.print(F("SATELLITES Fix Age=")); - Serial.print(gps.satellites.age()); - Serial.print(F("ms Value=")); - Serial.println(gps.satellites.value()); - } - - else if (gps.hdop.isUpdated()) - { - Serial.print(F("HDOP Fix Age=")); - Serial.print(gps.hdop.age()); - Serial.print(F("ms Value=")); - Serial.println(gps.hdop.value()); - } - - else if (millis() - last > 5000) - { - Serial.println(); - if (gps.location.isValid()) - { - static const double LONDON_LAT = 51.508131, LONDON_LON = -0.128002; - double distanceToLondon = - TinyGPSPlus::distanceBetween( - gps.location.lat(), - gps.location.lng(), - LONDON_LAT, - LONDON_LON); - double courseToLondon = - TinyGPSPlus::courseTo( - gps.location.lat(), - gps.location.lng(), - LONDON_LAT, - LONDON_LON); - - Serial.print(F("LONDON Distance=")); - Serial.print(distanceToLondon/1000, 6); - Serial.print(F(" km Course-to=")); - Serial.print(courseToLondon, 6); - Serial.print(F(" degrees [")); - Serial.print(TinyGPSPlus::cardinal(courseToLondon)); - Serial.println(F("]")); - } - - Serial.print(F("DIAGS Chars=")); - Serial.print(gps.charsProcessed()); - Serial.print(F(" Sentences-with-Fix=")); - Serial.print(gps.sentencesWithFix()); - Serial.print(F(" Failed-checksum=")); - Serial.print(gps.failedChecksum()); - Serial.print(F(" Passed-checksum=")); - Serial.println(gps.passedChecksum()); - - if (gps.charsProcessed() < 10) - Serial.println(F("WARNING: No GPS data. Check wiring.")); - - last = millis(); - Serial.println(); - } -} \ No newline at end of file diff --git a/libraries/TinyGPSPlus/examples/SatElevTracker/SatElevTracker.ino b/libraries/TinyGPSPlus/examples/SatElevTracker/SatElevTracker.ino deleted file mode 100644 index afc6d8a..0000000 --- a/libraries/TinyGPSPlus/examples/SatElevTracker/SatElevTracker.ino +++ /dev/null @@ -1,150 +0,0 @@ -#include -#include -/* - This sample code tracks satellite elevations using TinyGPSCustom objects. - - Satellite numbers and elevations are not normally tracked by TinyGPS++, but - by using TinyGPSCustom we get around this. - - It requires the use of SoftwareSerial and assumes that you have a - 4800-baud serial GPS device hooked up on pins 4(RX) and 3(TX). -*/ -static const int RXPin = 4, TXPin = 3; -static const uint32_t GPSBaud = 4800; -static const int MAX_SATELLITES = 40; -static const int PAGE_LENGTH = 40; - -// The TinyGPS++ object -TinyGPSPlus gps; - -// The serial connection to the GPS device -SoftwareSerial ss(RXPin, TXPin); - -TinyGPSCustom totalGPGSVMessages(gps, "GPGSV", 1); // $GPGSV sentence, first element -TinyGPSCustom messageNumber(gps, "GPGSV", 2); // $GPGSV sentence, second element -TinyGPSCustom satNumber[4]; // to be initialized later -TinyGPSCustom elevation[4]; -bool anyChanges = false; -unsigned long linecount = 0; - -struct -{ - int elevation; - bool active; -} sats[MAX_SATELLITES]; - -void setup() -{ - Serial.begin(115200); - ss.begin(GPSBaud); - - Serial.println(F("SatElevTracker.ino")); - Serial.println(F("Displays GPS satellite elevations as they change")); - Serial.print(F("Testing TinyGPS++ library v. ")); Serial.println(TinyGPSPlus::libraryVersion()); - Serial.println(F("by Mikal Hart")); - Serial.println(); - - // Initialize all the uninitialized TinyGPSCustom objects - for (int i=0; i<4; ++i) - { - satNumber[i].begin(gps, "GPGSV", 4 + 4 * i); // offsets 4, 8, 12, 16 - elevation[i].begin(gps, "GPGSV", 5 + 4 * i); // offsets 5, 9, 13, 17 - } -} - -void loop() -{ - // Dispatch incoming characters - if (ss.available() > 0) - { - gps.encode(ss.read()); - - if (totalGPGSVMessages.isUpdated()) - { - for (int i=0; i<4; ++i) - { - int no = atoi(satNumber[i].value()); - if (no >= 1 && no <= MAX_SATELLITES) - { - int elev = atoi(elevation[i].value()); - sats[no-1].active = true; - if (sats[no-1].elevation != elev) - { - sats[no-1].elevation = elev; - anyChanges = true; - } - } - } - - int totalMessages = atoi(totalGPGSVMessages.value()); - int currentMessage = atoi(messageNumber.value()); - if (totalMessages == currentMessage && anyChanges) - { - if (linecount++ % PAGE_LENGTH == 0) - printHeader(); - TimePrint(); - for (int i=0; i -#include -/* - This sample code demonstrates how to use an array of TinyGPSCustom objects - to monitor all the visible satellites. - - Satellite numbers, elevation, azimuth, and signal-to-noise ratio are not - normally tracked by TinyGPS++, but by using TinyGPSCustom we get around this. - - The simple code also demonstrates how to use arrays of TinyGPSCustom objects, - each monitoring a different field of the $GPGSV sentence. - - It requires the use of SoftwareSerial, and assumes that you have a - 4800-baud serial GPS device hooked up on pins 4(RX) and 3(TX). -*/ -static const int RXPin = 4, TXPin = 3; -static const uint32_t GPSBaud = 4800; - -// The TinyGPS++ object -TinyGPSPlus gps; - -// The serial connection to the GPS device -SoftwareSerial ss(RXPin, TXPin); - -/* - From http://aprs.gids.nl/nmea/: - - $GPGSV - - GPS Satellites in view - - eg. $GPGSV,3,1,11,03,03,111,00,04,15,270,00,06,01,010,00,13,06,292,00*74 - $GPGSV,3,2,11,14,25,170,00,16,57,208,39,18,67,296,40,19,40,246,00*74 - $GPGSV,3,3,11,22,42,067,42,24,14,311,43,27,05,244,00,,,,*4D - - 1 = Total number of messages of this type in this cycle - 2 = Message number - 3 = Total number of SVs in view - 4 = SV PRN number - 5 = Elevation in degrees, 90 maximum - 6 = Azimuth, degrees from true north, 000 to 359 - 7 = SNR, 00-99 dB (null when not tracking) - 8-11 = Information about second SV, same as field 4-7 - 12-15= Information about third SV, same as field 4-7 - 16-19= Information about fourth SV, same as field 4-7 -*/ - -static const int MAX_SATELLITES = 40; - -TinyGPSCustom totalGPGSVMessages(gps, "GPGSV", 1); // $GPGSV sentence, first element -TinyGPSCustom messageNumber(gps, "GPGSV", 2); // $GPGSV sentence, second element -TinyGPSCustom satsInView(gps, "GPGSV", 3); // $GPGSV sentence, third element -TinyGPSCustom satNumber[4]; // to be initialized later -TinyGPSCustom elevation[4]; -TinyGPSCustom azimuth[4]; -TinyGPSCustom snr[4]; - -struct -{ - bool active; - int elevation; - int azimuth; - int snr; -} sats[MAX_SATELLITES]; - -void setup() -{ - Serial.begin(115200); - ss.begin(GPSBaud); - - Serial.println(F("SatelliteTracker.ino")); - Serial.println(F("Monitoring satellite location and signal strength using TinyGPSCustom")); - Serial.print(F("Testing TinyGPS++ library v. ")); Serial.println(TinyGPSPlus::libraryVersion()); - Serial.println(F("by Mikal Hart")); - Serial.println(); - - // Initialize all the uninitialized TinyGPSCustom objects - for (int i=0; i<4; ++i) - { - satNumber[i].begin(gps, "GPGSV", 4 + 4 * i); // offsets 4, 8, 12, 16 - elevation[i].begin(gps, "GPGSV", 5 + 4 * i); // offsets 5, 9, 13, 17 - azimuth[i].begin( gps, "GPGSV", 6 + 4 * i); // offsets 6, 10, 14, 18 - snr[i].begin( gps, "GPGSV", 7 + 4 * i); // offsets 7, 11, 15, 19 - } -} - -void loop() -{ - // Dispatch incoming characters - if (ss.available() > 0) - { - gps.encode(ss.read()); - if (totalGPGSVMessages.isUpdated()) - { - for (int i=0; i<4; ++i) - { - int no = atoi(satNumber[i].value()); - // Serial.print(F("SatNumber is ")); Serial.println(no); - if (no >= 1 && no <= MAX_SATELLITES) - { - sats[no-1].elevation = atoi(elevation[i].value()); - sats[no-1].azimuth = atoi(azimuth[i].value()); - sats[no-1].snr = atoi(snr[i].value()); - sats[no-1].active = true; - } - } - - int totalMessages = atoi(totalGPGSVMessages.value()); - int currentMessage = atoi(messageNumber.value()); - if (totalMessages == currentMessage) - { - Serial.print(F("Sats=")); Serial.print(gps.satellites.value()); - Serial.print(F(" Nums=")); - for (int i=0; i -#include - -/* - This sample demonstrates TinyGPS++'s capacity for extracting custom - fields from any NMEA sentence. TinyGPS++ has built-in facilities for - extracting latitude, longitude, altitude, etc., from the $GPGLL and - $GPRMC sentences. But with the TinyGPSCustom type, you can extract - other NMEA fields, even from non-standard NMEA sentences. - - It requires the use of SoftwareSerial, and assumes that you have a - 4800-baud serial GPS device hooked up on pins 4(RX) and 3(TX). -*/ -static const int RXPin = 4, TXPin = 3; -static const uint32_t GPSBaud = 4800; - -// The TinyGPS++ object -TinyGPSPlus gps; - -// The serial connection to the GPS device -SoftwareSerial ss(RXPin, TXPin); - -/* - By declaring TinyGPSCustom objects like this, we announce that we - are interested in the 15th, 16th, and 17th fields in the $GPGSA - sentence, respectively the PDOP (F("positional dilution of precision")), - HDOP (F("horizontal...")), and VDOP (F("vertical...")). - - (Counting starts with the field immediately following the sentence name, - i.e. $GPGSA. For more information on NMEA sentences, consult your - GPS module's documentation and/or http://aprs.gids.nl/nmea/.) - - If your GPS module doesn't support the $GPGSA sentence, then you - won't get any output from this program. -*/ - -TinyGPSCustom pdop(gps, "GPGSA", 15); // $GPGSA sentence, 15th element -TinyGPSCustom hdop(gps, "GPGSA", 16); // $GPGSA sentence, 16th element -TinyGPSCustom vdop(gps, "GPGSA", 17); // $GPGSA sentence, 17th element - -void setup() -{ - Serial.begin(115200); - ss.begin(GPSBaud); - - Serial.println(F("UsingCustomFields.ino")); - Serial.println(F("Demonstrating how to extract any NMEA field using TinyGPSCustom")); - Serial.print(F("Testing TinyGPS++ library v. ")); Serial.println(TinyGPSPlus::libraryVersion()); - Serial.println(F("by Mikal Hart")); - Serial.println(); -} - -void loop() -{ - // Every time anything is updated, print everything. - if (gps.altitude.isUpdated() || gps.satellites.isUpdated() || - pdop.isUpdated() || hdop.isUpdated() || vdop.isUpdated()) - { - Serial.print(F("ALT=")); Serial.print(gps.altitude.meters()); - Serial.print(F(" PDOP=")); Serial.print(pdop.value()); - Serial.print(F(" HDOP=")); Serial.print(hdop.value()); - Serial.print(F(" VDOP=")); Serial.print(vdop.value()); - Serial.print(F(" SATS=")); Serial.println(gps.satellites.value()); - } - - while (ss.available() > 0) - gps.encode(ss.read()); -} - diff --git a/libraries/TinyGPSPlus/keywords.txt b/libraries/TinyGPSPlus/keywords.txt deleted file mode 100644 index 0d23d49..0000000 --- a/libraries/TinyGPSPlus/keywords.txt +++ /dev/null @@ -1,73 +0,0 @@ -####################################### -# Syntax Coloring Map for TinyGPS++ -####################################### - -####################################### -# Datatypes (KEYWORD1) -####################################### - -TinyGPSPlus KEYWORD1 -TinyGPSLocation KEYWORD1 -TinyGPSDate KEYWORD1 -TinyGPSTime KEYWORD1 -TinyGPSSpeed KEYWORD1 -TinyGPSCourse KEYWORD1 -TinyGPSAltitude KEYWORD1 -TinyGPSInteger KEYWORD1 -TinyGPSDecimal KEYWORD1 -TinyGPSCustom KEYWORD1 - -####################################### -# Methods and Functions (KEYWORD2) -####################################### - -encode KEYWORD2 -location KEYWORD2 -date KEYWORD2 -time KEYWORD2 -speed KEYWORD2 -course KEYWORD2 -altitude KEYWORD2 -satellites KEYWORD2 -hdop KEYWORD2 -libraryVersion KEYWORD2 -distanceBetween KEYWORD2 -courseTo KEYWORD2 -cardinal KEYWORD2 -charsProcessed KEYWORD2 -sentencesWithFix KEYWORD2 -failedChecksum KEYWORD2 -passedChecksum KEYWORD2 -isValid KEYWORD2 -isUpdated KEYWORD2 -age KEYWORD2 -rawLatDegrees KEYWORD2 -rawLngDegrees KEYWORD2 -rawLatBillionths KEYWORD2 -rawLngBillionths KEYWORD2 -lat KEYWORD2 -lng KEYWORD2 -isUpdatedDate KEYWORD2 -isUpdatedTime KEYWORD2 -year KEYWORD2 -month KEYWORD2 -day KEYWORD2 -hour KEYWORD2 -minute KEYWORD2 -second KEYWORD2 -centisecond KEYWORD2 -value KEYWORD2 -knots KEYWORD2 -mph KEYWORD2 -mps KEYWORD2 -kmph KEYWORD2 -deg KEYWORD2 -meters KEYWORD2 -miles KEYWORD2 -kilometers KEYWORD2 -feet KEYWORD2 - -####################################### -# Constants (LITERAL1) -####################################### - diff --git a/libraries/UIPEthernet/Dhcp.cpp b/libraries/UIPEthernet/Dhcp.cpp deleted file mode 100644 index d34e8e2..0000000 --- a/libraries/UIPEthernet/Dhcp.cpp +++ /dev/null @@ -1,478 +0,0 @@ -// DHCP Library v0.3 - April 25, 2009 -// Author: Jordan Terrell - blog.jordanterrell.com - -#include -#include -#include "Dhcp.h" -#include "Arduino.h" -#include "utility/util.h" - -int DhcpClass::beginWithDHCP(uint8_t *mac, unsigned long timeout, unsigned long responseTimeout) -{ - _dhcpLeaseTime=0; - _dhcpT1=0; - _dhcpT2=0; - _lastCheck=0; - _timeout = timeout; - _responseTimeout = responseTimeout; - - // zero out _dhcpMacAddr - memset(_dhcpMacAddr, 0, 6); - reset_DHCP_lease(); - - memcpy((void*)_dhcpMacAddr, (void*)mac, 6); - _dhcp_state = STATE_DHCP_START; - return request_DHCP_lease(); -} - -void DhcpClass::reset_DHCP_lease(){ - // zero out _dhcpSubnetMask, _dhcpGatewayIp, _dhcpLocalIp, _dhcpDhcpServerIp, _dhcpDnsServerIp - memset(_dhcpLocalIp, 0, 20); -} - -//return:0 on error, 1 if request is sent and response is received -int DhcpClass::request_DHCP_lease(){ - - uint8_t messageType = 0; - - - - // Pick an initial transaction ID - _dhcpTransactionId = random(1UL, 2000UL); - _dhcpInitialTransactionId = _dhcpTransactionId; - - _dhcpUdpSocket.stop(); - if (_dhcpUdpSocket.begin(DHCP_CLIENT_PORT) == 0) - { - // Couldn't get a socket - return 0; - } - - presend_DHCP(); - - int result = 0; - - unsigned long startTime = millis(); - - while(_dhcp_state != STATE_DHCP_LEASED) - { - if(_dhcp_state == STATE_DHCP_START) - { - _dhcpTransactionId++; - - send_DHCP_MESSAGE(DHCP_DISCOVER, ((millis() - startTime) / 1000)); - _dhcp_state = STATE_DHCP_DISCOVER; - } - else if(_dhcp_state == STATE_DHCP_REREQUEST){ - _dhcpTransactionId++; - send_DHCP_MESSAGE(DHCP_REQUEST, ((millis() - startTime)/1000)); - _dhcp_state = STATE_DHCP_REQUEST; - } - else if(_dhcp_state == STATE_DHCP_DISCOVER) - { - uint32_t respId; - messageType = parseDHCPResponse(_responseTimeout, respId); - if(messageType == DHCP_OFFER) - { - // We'll use the transaction ID that the offer came with, - // rather than the one we were up to - _dhcpTransactionId = respId; - send_DHCP_MESSAGE(DHCP_REQUEST, ((millis() - startTime) / 1000)); - _dhcp_state = STATE_DHCP_REQUEST; - } - } - else if(_dhcp_state == STATE_DHCP_REQUEST) - { - uint32_t respId; - messageType = parseDHCPResponse(_responseTimeout, respId); - if(messageType == DHCP_ACK) - { - _dhcp_state = STATE_DHCP_LEASED; - result = 1; - //use default lease time if we didn't get it - if(_dhcpLeaseTime == 0){ - _dhcpLeaseTime = DEFAULT_LEASE; - } - //calculate T1 & T2 if we didn't get it - if(_dhcpT1 == 0){ - //T1 should be 50% of _dhcpLeaseTime - _dhcpT1 = _dhcpLeaseTime >> 1; - } - if(_dhcpT2 == 0){ - //T2 should be 87.5% (7/8ths) of _dhcpLeaseTime - _dhcpT2 = _dhcpT1 << 1; - } - _renewInSec = _dhcpT1; - _rebindInSec = _dhcpT2; - } - else if(messageType == DHCP_NAK) - _dhcp_state = STATE_DHCP_START; - } - - if(messageType == 255) - { - messageType = 0; - _dhcp_state = STATE_DHCP_START; - } - - if(result != 1 && ((millis() - startTime) > _timeout)) - break; - } - - // We're done with the socket now - _dhcpUdpSocket.stop(); - _dhcpTransactionId++; - - return result; -} - -void DhcpClass::presend_DHCP() -{ -} - -void DhcpClass::send_DHCP_MESSAGE(uint8_t messageType, uint16_t secondsElapsed) -{ - uint8_t buffer[32]; - memset(buffer, 0, 32); - IPAddress dest_addr( 255, 255, 255, 255 ); // Broadcast address - - if (-1 == _dhcpUdpSocket.beginPacket(dest_addr, DHCP_SERVER_PORT)) - { - // FIXME Need to return errors - return; - } - - buffer[0] = DHCP_BOOTREQUEST; // op - buffer[1] = DHCP_HTYPE10MB; // htype - buffer[2] = DHCP_HLENETHERNET; // hlen - buffer[3] = DHCP_HOPS; // hops - - // xid - unsigned long xid = htonl(_dhcpTransactionId); - memcpy(buffer + 4, &(xid), 4); - - // 8, 9 - seconds elapsed - buffer[8] = ((secondsElapsed & 0xff00) >> 8); - buffer[9] = (secondsElapsed & 0x00ff); - - // flags - unsigned short flags = htons(DHCP_FLAGSBROADCAST); - memcpy(buffer + 10, &(flags), 2); - - // ciaddr: already zeroed - // yiaddr: already zeroed - // siaddr: already zeroed - // giaddr: already zeroed - - //put data in W5100 transmit buffer - _dhcpUdpSocket.write(buffer, 28); - - memset(buffer, 0, 32); // clear local buffer - - memcpy(buffer, _dhcpMacAddr, 6); // chaddr - - //put data in W5100 transmit buffer - _dhcpUdpSocket.write(buffer, 16); - - memset(buffer, 0, 32); // clear local buffer - - // leave zeroed out for sname && file - // put in W5100 transmit buffer x 6 (192 bytes) - - for(int i = 0; i < 6; i++) { - _dhcpUdpSocket.write(buffer, 32); - } - - // OPT - Magic Cookie - buffer[0] = (uint8_t)((MAGIC_COOKIE >> 24)& 0xFF); - buffer[1] = (uint8_t)((MAGIC_COOKIE >> 16)& 0xFF); - buffer[2] = (uint8_t)((MAGIC_COOKIE >> 8)& 0xFF); - buffer[3] = (uint8_t)(MAGIC_COOKIE& 0xFF); - - // OPT - message type - buffer[4] = dhcpMessageType; - buffer[5] = 0x01; - buffer[6] = messageType; //DHCP_REQUEST; - - // OPT - client identifier - buffer[7] = dhcpClientIdentifier; - buffer[8] = 0x07; - buffer[9] = 0x01; - memcpy(buffer + 10, _dhcpMacAddr, 6); - - // OPT - host name - buffer[16] = hostName; - buffer[17] = strlen(HOST_NAME) + 6; // length of hostname + last 3 bytes of mac address - strcpy((char*)&(buffer[18]), HOST_NAME); - - printByte((char*)&(buffer[24]), _dhcpMacAddr[3]); - printByte((char*)&(buffer[26]), _dhcpMacAddr[4]); - printByte((char*)&(buffer[28]), _dhcpMacAddr[5]); - - //put data in W5100 transmit buffer - _dhcpUdpSocket.write(buffer, 30); - - if(messageType == DHCP_REQUEST) - { - buffer[0] = dhcpRequestedIPaddr; - buffer[1] = 0x04; - buffer[2] = _dhcpLocalIp[0]; - buffer[3] = _dhcpLocalIp[1]; - buffer[4] = _dhcpLocalIp[2]; - buffer[5] = _dhcpLocalIp[3]; - - buffer[6] = dhcpServerIdentifier; - buffer[7] = 0x04; - buffer[8] = _dhcpDhcpServerIp[0]; - buffer[9] = _dhcpDhcpServerIp[1]; - buffer[10] = _dhcpDhcpServerIp[2]; - buffer[11] = _dhcpDhcpServerIp[3]; - - //put data in W5100 transmit buffer - _dhcpUdpSocket.write(buffer, 12); - } - - buffer[0] = dhcpParamRequest; - buffer[1] = 0x06; - buffer[2] = subnetMask; - buffer[3] = routersOnSubnet; - buffer[4] = dns; - buffer[5] = domainName; - buffer[6] = dhcpT1value; - buffer[7] = dhcpT2value; - buffer[8] = endOption; - - //put data in W5100 transmit buffer - _dhcpUdpSocket.write(buffer, 9); - - _dhcpUdpSocket.endPacket(); -} - -uint8_t DhcpClass::parseDHCPResponse(unsigned long responseTimeout, uint32_t& transactionId) -{ - uint8_t type = 0; - uint8_t opt_len = 0; - - unsigned long startTime = millis(); - - while(_dhcpUdpSocket.parsePacket() <= 0) - { - if((millis() - startTime) > responseTimeout) - { - return 255; - } - delay(50); - } - // start reading in the packet - RIP_MSG_FIXED fixedMsg; - _dhcpUdpSocket.read((uint8_t*)&fixedMsg, sizeof(RIP_MSG_FIXED)); - - if(fixedMsg.op == DHCP_BOOTREPLY && _dhcpUdpSocket.remotePort() == DHCP_SERVER_PORT) - { - transactionId = ntohl(fixedMsg.xid); - if(memcmp(fixedMsg.chaddr, _dhcpMacAddr, 6) != 0 || (transactionId < _dhcpInitialTransactionId) || (transactionId > _dhcpTransactionId)) - { - // Need to read the rest of the packet here regardless - _dhcpUdpSocket.flush(); - return 0; - } - - memcpy(_dhcpLocalIp, fixedMsg.yiaddr, 4); - - // Skip to the option part - // Doing this a byte at a time so we don't have to put a big buffer - // on the stack (as we don't have lots of memory lying around) - for (int i =0; i < (240 - (int)sizeof(RIP_MSG_FIXED)); i++) - { - _dhcpUdpSocket.read(); // we don't care about the returned byte - } - - while (_dhcpUdpSocket.available() > 0) - { - switch (_dhcpUdpSocket.read()) - { - case endOption : - break; - - case padOption : - break; - - case dhcpMessageType : - opt_len = _dhcpUdpSocket.read(); - type = _dhcpUdpSocket.read(); - break; - - case subnetMask : - opt_len = _dhcpUdpSocket.read(); - _dhcpUdpSocket.read(_dhcpSubnetMask, 4); - break; - - case routersOnSubnet : - opt_len = _dhcpUdpSocket.read(); - _dhcpUdpSocket.read(_dhcpGatewayIp, 4); - for (int i = 0; i < opt_len-4; i++) - { - _dhcpUdpSocket.read(); - } - break; - - case dns : - opt_len = _dhcpUdpSocket.read(); - _dhcpUdpSocket.read(_dhcpDnsServerIp, 4); - for (int i = 0; i < opt_len-4; i++) - { - _dhcpUdpSocket.read(); - } - break; - - case dhcpServerIdentifier : - opt_len = _dhcpUdpSocket.read(); - if( *((uint32_t*)_dhcpDhcpServerIp) == 0 || - IPAddress(_dhcpDhcpServerIp) == _dhcpUdpSocket.remoteIP() ) - { - _dhcpUdpSocket.read(_dhcpDhcpServerIp, sizeof(_dhcpDhcpServerIp)); - } - else - { - // Skip over the rest of this option - while (opt_len--) - { - _dhcpUdpSocket.read(); - } - } - break; - - case dhcpT1value : - opt_len = _dhcpUdpSocket.read(); - _dhcpUdpSocket.read((uint8_t*)&_dhcpT1, sizeof(_dhcpT1)); - _dhcpT1 = ntohl(_dhcpT1); - break; - - case dhcpT2value : - opt_len = _dhcpUdpSocket.read(); - _dhcpUdpSocket.read((uint8_t*)&_dhcpT2, sizeof(_dhcpT2)); - _dhcpT2 = ntohl(_dhcpT2); - break; - - case dhcpIPaddrLeaseTime : - opt_len = _dhcpUdpSocket.read(); - _dhcpUdpSocket.read((uint8_t*)&_dhcpLeaseTime, sizeof(_dhcpLeaseTime)); - _dhcpLeaseTime = ntohl(_dhcpLeaseTime); - _renewInSec = _dhcpLeaseTime; - break; - - default : - opt_len = _dhcpUdpSocket.read(); - // Skip over the rest of this option - while (opt_len--) - { - _dhcpUdpSocket.read(); - } - break; - } - } - } - - // Need to skip to end of the packet regardless here - _dhcpUdpSocket.flush(); - - return type; -} - - -/* - returns: - 0/DHCP_CHECK_NONE: nothing happened - 1/DHCP_CHECK_RENEW_FAIL: renew failed - 2/DHCP_CHECK_RENEW_OK: renew success - 3/DHCP_CHECK_REBIND_FAIL: rebind fail - 4/DHCP_CHECK_REBIND_OK: rebind success -*/ -int DhcpClass::checkLease(){ - //this uses a signed / unsigned trick to deal with millis overflow - unsigned long now = millis(); - signed long snow = (long)now; - int rc=DHCP_CHECK_NONE; - if (_lastCheck != 0){ - signed long factor; - //calc how many ms past the timeout we are - factor = snow - (long)_secTimeout; - //if on or passed the timeout, reduce the counters - if ( factor >= 0 ){ - //next timeout should be now plus 1000 ms minus parts of second in factor - _secTimeout = snow + 1000 - factor % 1000; - //how many seconds late are we, minimum 1 - factor = factor / 1000 +1; - - //reduce the counters by that mouch - //if we can assume that the cycle time (factor) is fairly constant - //and if the remainder is less than cycle time * 2 - //do it early instead of late - if(_renewInSec < factor*2 ) - _renewInSec = 0; - else - _renewInSec -= factor; - - if(_rebindInSec < factor*2 ) - _rebindInSec = 0; - else - _rebindInSec -= factor; - } - - //if we have a lease but should renew, do it - if (_dhcp_state == STATE_DHCP_LEASED && _renewInSec <=0){ - _dhcp_state = STATE_DHCP_REREQUEST; - rc = 1 + request_DHCP_lease(); - } - - //if we have a lease or is renewing but should bind, do it - if( (_dhcp_state == STATE_DHCP_LEASED || _dhcp_state == STATE_DHCP_START) && _rebindInSec <=0){ - //this should basically restart completely - _dhcp_state = STATE_DHCP_START; - reset_DHCP_lease(); - rc = 3 + request_DHCP_lease(); - } - } - else{ - _secTimeout = snow + 1000; - } - - _lastCheck = now; - return rc; -} - -IPAddress DhcpClass::getLocalIp() -{ - return IPAddress(_dhcpLocalIp); -} - -IPAddress DhcpClass::getSubnetMask() -{ - return IPAddress(_dhcpSubnetMask); -} - -IPAddress DhcpClass::getGatewayIp() -{ - return IPAddress(_dhcpGatewayIp); -} - -IPAddress DhcpClass::getDhcpServerIp() -{ - return IPAddress(_dhcpDhcpServerIp); -} - -IPAddress DhcpClass::getDnsServerIp() -{ - return IPAddress(_dhcpDnsServerIp); -} - -void DhcpClass::printByte(char * buf, uint8_t n ) { - char *str = &buf[1]; - buf[0]='0'; - do { - unsigned long m = n; - n /= 16; - char c = m - 16 * n; - *str-- = c < 10 ? c + '0' : c + 'A' - 10; - } while(n); -} diff --git a/libraries/UIPEthernet/Dhcp.h b/libraries/UIPEthernet/Dhcp.h deleted file mode 100644 index 01405d7..0000000 --- a/libraries/UIPEthernet/Dhcp.h +++ /dev/null @@ -1,178 +0,0 @@ -// DHCP Library v0.3 - April 25, 2009 -// Author: Jordan Terrell - blog.jordanterrell.com - -#ifndef Dhcp_h -#define Dhcp_h - -#include "UIPUdp.h" - -/* DHCP state machine. */ -#define STATE_DHCP_START 0 -#define STATE_DHCP_DISCOVER 1 -#define STATE_DHCP_REQUEST 2 -#define STATE_DHCP_LEASED 3 -#define STATE_DHCP_REREQUEST 4 -#define STATE_DHCP_RELEASE 5 - -#define DHCP_FLAGSBROADCAST 0x8000 - -/* UDP port numbers for DHCP */ -#define DHCP_SERVER_PORT 67 /* from server to client */ -#define DHCP_CLIENT_PORT 68 /* from client to server */ - -/* DHCP message OP code */ -#define DHCP_BOOTREQUEST 1 -#define DHCP_BOOTREPLY 2 - -/* DHCP message type */ -#define DHCP_DISCOVER 1 -#define DHCP_OFFER 2 -#define DHCP_REQUEST 3 -#define DHCP_DECLINE 4 -#define DHCP_ACK 5 -#define DHCP_NAK 6 -#define DHCP_RELEASE 7 -#define DHCP_INFORM 8 - -#define DHCP_HTYPE10MB 1 -#define DHCP_HTYPE100MB 2 - -#define DHCP_HLENETHERNET 6 -#define DHCP_HOPS 0 -#define DHCP_SECS 0 - -#define MAGIC_COOKIE 0x63825363 -#define MAX_DHCP_OPT 16 - -#define HOST_NAME "ENC28J" -#define DEFAULT_LEASE (900) //default lease time in seconds - -#define DHCP_CHECK_NONE (0) -#define DHCP_CHECK_RENEW_FAIL (1) -#define DHCP_CHECK_RENEW_OK (2) -#define DHCP_CHECK_REBIND_FAIL (3) -#define DHCP_CHECK_REBIND_OK (4) - -enum -{ - padOption = 0, - subnetMask = 1, - timerOffset = 2, - routersOnSubnet = 3, - /* timeServer = 4, - nameServer = 5,*/ - dns = 6, - /*logServer = 7, - cookieServer = 8, - lprServer = 9, - impressServer = 10, - resourceLocationServer = 11,*/ - hostName = 12, - /*bootFileSize = 13, - meritDumpFile = 14,*/ - domainName = 15, - /*swapServer = 16, - rootPath = 17, - extentionsPath = 18, - IPforwarding = 19, - nonLocalSourceRouting = 20, - policyFilter = 21, - maxDgramReasmSize = 22, - defaultIPTTL = 23, - pathMTUagingTimeout = 24, - pathMTUplateauTable = 25, - ifMTU = 26, - allSubnetsLocal = 27, - broadcastAddr = 28, - performMaskDiscovery = 29, - maskSupplier = 30, - performRouterDiscovery = 31, - routerSolicitationAddr = 32, - staticRoute = 33, - trailerEncapsulation = 34, - arpCacheTimeout = 35, - ethernetEncapsulation = 36, - tcpDefaultTTL = 37, - tcpKeepaliveInterval = 38, - tcpKeepaliveGarbage = 39, - nisDomainName = 40, - nisServers = 41, - ntpServers = 42, - vendorSpecificInfo = 43, - netBIOSnameServer = 44, - netBIOSdgramDistServer = 45, - netBIOSnodeType = 46, - netBIOSscope = 47, - xFontServer = 48, - xDisplayManager = 49,*/ - dhcpRequestedIPaddr = 50, - dhcpIPaddrLeaseTime = 51, - /*dhcpOptionOverload = 52,*/ - dhcpMessageType = 53, - dhcpServerIdentifier = 54, - dhcpParamRequest = 55, - /*dhcpMsg = 56, - dhcpMaxMsgSize = 57,*/ - dhcpT1value = 58, - dhcpT2value = 59, - /*dhcpClassIdentifier = 60,*/ - dhcpClientIdentifier = 61, - endOption = 255 -}; - -typedef struct _RIP_MSG_FIXED -{ - uint8_t op; - uint8_t htype; - uint8_t hlen; - uint8_t hops; - uint32_t xid; - uint16_t secs; - uint16_t flags; - uint8_t ciaddr[4]; - uint8_t yiaddr[4]; - uint8_t siaddr[4]; - uint8_t giaddr[4]; - uint8_t chaddr[6]; -}RIP_MSG_FIXED; - -class DhcpClass { -private: - uint32_t _dhcpInitialTransactionId; - uint32_t _dhcpTransactionId; - uint8_t _dhcpMacAddr[6]; - uint8_t _dhcpLocalIp[4]; - uint8_t _dhcpSubnetMask[4]; - uint8_t _dhcpGatewayIp[4]; - uint8_t _dhcpDhcpServerIp[4]; - uint8_t _dhcpDnsServerIp[4]; - uint32_t _dhcpLeaseTime; - uint32_t _dhcpT1, _dhcpT2; - signed long _renewInSec; - signed long _rebindInSec; - signed long _lastCheck; - unsigned long _timeout; - unsigned long _responseTimeout; - unsigned long _secTimeout; - uint8_t _dhcp_state; - UIPUDP _dhcpUdpSocket; - - int request_DHCP_lease(); - void reset_DHCP_lease(); - void presend_DHCP(); - void send_DHCP_MESSAGE(uint8_t, uint16_t); - void printByte(char *, uint8_t); - - uint8_t parseDHCPResponse(unsigned long responseTimeout, uint32_t& transactionId); -public: - IPAddress getLocalIp(); - IPAddress getSubnetMask(); - IPAddress getGatewayIp(); - IPAddress getDhcpServerIp(); - IPAddress getDnsServerIp(); - - int beginWithDHCP(uint8_t *, unsigned long timeout = 60000, unsigned long responseTimeout = 4000); - int checkLease(); -}; - -#endif diff --git a/libraries/UIPEthernet/Dns.cpp b/libraries/UIPEthernet/Dns.cpp deleted file mode 100644 index 2b97fb7..0000000 --- a/libraries/UIPEthernet/Dns.cpp +++ /dev/null @@ -1,422 +0,0 @@ -// Arduino DNS client for Enc28J60-based Ethernet shield -// (c) Copyright 2009-2010 MCQN Ltd. -// Released under Apache License, version 2.0 - -#include "Udp.h" -#include "utility/util.h" - -#include "Dns.h" -#include -//#include -#include "Arduino.h" - - -#define SOCKET_NONE 255 -// Various flags and header field values for a DNS message -#define UDP_HEADER_SIZE 8 -#define DNS_HEADER_SIZE 12 -#define TTL_SIZE 4 -#define QUERY_FLAG (0) -#define RESPONSE_FLAG (1<<15) -#define QUERY_RESPONSE_MASK (1<<15) -#define OPCODE_STANDARD_QUERY (0) -#define OPCODE_INVERSE_QUERY (1<<11) -#define OPCODE_STATUS_REQUEST (2<<11) -#define OPCODE_MASK (15<<11) -#define AUTHORITATIVE_FLAG (1<<10) -#define TRUNCATION_FLAG (1<<9) -#define RECURSION_DESIRED_FLAG (1<<8) -#define RECURSION_AVAILABLE_FLAG (1<<7) -#define RESP_NO_ERROR (0) -#define RESP_FORMAT_ERROR (1) -#define RESP_SERVER_FAILURE (2) -#define RESP_NAME_ERROR (3) -#define RESP_NOT_IMPLEMENTED (4) -#define RESP_REFUSED (5) -#define RESP_MASK (15) -#define TYPE_A (0x0001) -#define CLASS_IN (0x0001) -#define LABEL_COMPRESSION_MASK (0xC0) -// Port number that DNS servers listen on -#define DNS_PORT 53 - -// Possible return codes from ProcessResponse -#define SUCCESS 1 -#define TIMED_OUT -1 -#define INVALID_SERVER -2 -#define TRUNCATED -3 -#define INVALID_RESPONSE -4 - -void DNSClient::begin(const IPAddress& aDNSServer) -{ - iDNSServer = aDNSServer; - iRequestId = 0; -} - - -int DNSClient::inet_aton(const char* aIPAddrString, IPAddress& aResult) -{ - // See if we've been given a valid IP address - const char* p =aIPAddrString; - while (*p && - ( (*p == '.') || (*p >= '0') || (*p <= '9') )) - { - p++; - } - - if (*p == '\0') - { - // It's looking promising, we haven't found any invalid characters - p = aIPAddrString; - int segment =0; - int segmentValue =0; - while (*p && (segment < 4)) - { - if (*p == '.') - { - // We've reached the end of a segment - if (segmentValue > 255) - { - // You can't have IP address segments that don't fit in a byte - return 0; - } - else - { - aResult[segment] = (byte)segmentValue; - segment++; - segmentValue = 0; - } - } - else - { - // Next digit - segmentValue = (segmentValue*10)+(*p - '0'); - } - p++; - } - // We've reached the end of address, but there'll still be the last - // segment to deal with - if ((segmentValue > 255) || (segment > 3)) - { - // You can't have IP address segments that don't fit in a byte, - // or more than four segments - return 0; - } - else - { - aResult[segment] = (byte)segmentValue; - return 1; - } - } - else - { - return 0; - } -} - -int DNSClient::getHostByName(const char* aHostname, IPAddress& aResult) -{ - int ret =0; - - // See if it's a numeric IP address - if (inet_aton(aHostname, aResult)) - { - // It is, our work here is done - return 1; - } - - // Check we've got a valid DNS server to use - if (iDNSServer == INADDR_NONE) - { - return INVALID_SERVER; - } - - // Find a socket to use - if (iUdp.begin(1024+(millis() & 0xF)) == 1) - { - // Try up to three times - int retries = 0; -// while ((retries < 3) && (ret <= 0)) - { - // Send DNS request - ret = iUdp.beginPacket(iDNSServer, DNS_PORT); - if (ret != 0) - { - // Now output the request data - ret = BuildRequest(aHostname); - if (ret != 0) - { - // And finally send the request - ret = iUdp.endPacket(); - if (ret != 0) - { - // Now wait for a response - int wait_retries = 0; - ret = TIMED_OUT; - while ((wait_retries < 3) && (ret == TIMED_OUT)) - { - ret = ProcessResponse(5000, aResult); - wait_retries++; - } - } - } - } - retries++; - } - - // We're done with the socket now - iUdp.stop(); - } - - return ret; -} - -uint16_t DNSClient::BuildRequest(const char* aName) -{ - // Build header - // 1 1 1 1 1 1 - // 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 - // +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ - // | ID | - // +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ - // |QR| Opcode |AA|TC|RD|RA| Z | RCODE | - // +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ - // | QDCOUNT | - // +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ - // | ANCOUNT | - // +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ - // | NSCOUNT | - // +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ - // | ARCOUNT | - // +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ - // As we only support one request at a time at present, we can simplify - // some of this header - iRequestId = millis(); // generate a random ID - uint16_t twoByteBuffer; - - // FIXME We should also check that there's enough space available to write to, rather - // FIXME than assume there's enough space (as the code does at present) - iUdp.write((uint8_t*)&iRequestId, sizeof(iRequestId)); - - twoByteBuffer = htons(QUERY_FLAG | OPCODE_STANDARD_QUERY | RECURSION_DESIRED_FLAG); - iUdp.write((uint8_t*)&twoByteBuffer, sizeof(twoByteBuffer)); - - twoByteBuffer = htons(1); // One question record - iUdp.write((uint8_t*)&twoByteBuffer, sizeof(twoByteBuffer)); - - twoByteBuffer = 0; // Zero answer records - iUdp.write((uint8_t*)&twoByteBuffer, sizeof(twoByteBuffer)); - - iUdp.write((uint8_t*)&twoByteBuffer, sizeof(twoByteBuffer)); - // and zero additional records - iUdp.write((uint8_t*)&twoByteBuffer, sizeof(twoByteBuffer)); - - // Build question - const char* start =aName; - const char* end =start; - uint8_t len; - // Run through the name being requested - while (*end) - { - // Find out how long this section of the name is - end = start; - while (*end && (*end != '.') ) - { - end++; - } - - if (end-start > 0) - { - // Write out the size of this section - len = end-start; - iUdp.write(&len, sizeof(len)); - // And then write out the section - iUdp.write((uint8_t*)start, end-start); - } - start = end+1; - } - - // We've got to the end of the question name, so - // terminate it with a zero-length section - len = 0; - iUdp.write(&len, sizeof(len)); - // Finally the type and class of question - twoByteBuffer = htons(TYPE_A); - iUdp.write((uint8_t*)&twoByteBuffer, sizeof(twoByteBuffer)); - - twoByteBuffer = htons(CLASS_IN); // Internet class of question - iUdp.write((uint8_t*)&twoByteBuffer, sizeof(twoByteBuffer)); - // Success! Everything buffered okay - return 1; -} - - -uint16_t DNSClient::ProcessResponse(uint16_t aTimeout, IPAddress& aAddress) -{ - uint32_t startTime = millis(); - - // Wait for a response packet - while(iUdp.parsePacket() <= 0) - { - if((millis() - startTime) > aTimeout) - return TIMED_OUT; - delay(50); - } - - // We've had a reply! - // Read the UDP header - uint8_t header[DNS_HEADER_SIZE]; // Enough space to reuse for the DNS header - // Check that it's a response from the right server and the right port - if ( (iDNSServer != iUdp.remoteIP()) || - (iUdp.remotePort() != DNS_PORT) ) - { - // It's not from who we expected - return INVALID_SERVER; - } - - // Read through the rest of the response - if (iUdp.available() < DNS_HEADER_SIZE) - { - return TRUNCATED; - } - iUdp.read(header, DNS_HEADER_SIZE); - - uint16_t header_flags = htons(*((uint16_t*)&header[2])); - // Check that it's a response to this request - if ( ( iRequestId != (*((uint16_t*)&header[0])) ) || - ((header_flags & QUERY_RESPONSE_MASK) != (uint16_t)RESPONSE_FLAG) ) - { - // Mark the entire packet as read - iUdp.flush(); - return INVALID_RESPONSE; - } - // Check for any errors in the response (or in our request) - // although we don't do anything to get round these - if ( (header_flags & TRUNCATION_FLAG) || (header_flags & RESP_MASK) ) - { - // Mark the entire packet as read - iUdp.flush(); - return -5; //INVALID_RESPONSE; - } - - // And make sure we've got (at least) one answer - uint16_t answerCount = htons(*((uint16_t*)&header[6])); - if (answerCount == 0 ) - { - // Mark the entire packet as read - iUdp.flush(); - return -6; //INVALID_RESPONSE; - } - - // Skip over any questions - for (uint16_t i =0; i < htons(*((uint16_t*)&header[4])); i++) - { - // Skip over the name - uint8_t len; - do - { - iUdp.read(&len, sizeof(len)); - if (len > 0) - { - // Don't need to actually read the data out for the string, just - // advance ptr to beyond it - while(len--) - { - iUdp.read(); // we don't care about the returned byte - } - } - } while (len != 0); - - // Now jump over the type and class - for (int i =0; i < 4; i++) - { - iUdp.read(); // we don't care about the returned byte - } - } - - // Now we're up to the bit we're interested in, the answer - // There might be more than one answer (although we'll just use the first - // type A answer) and some authority and additional resource records but - // we're going to ignore all of them. - - for (uint16_t i =0; i < answerCount; i++) - { - // Skip the name - uint8_t len; - do - { - iUdp.read(&len, sizeof(len)); - if ((len & LABEL_COMPRESSION_MASK) == 0) - { - // It's just a normal label - if (len > 0) - { - // And it's got a length - // Don't need to actually read the data out for the string, - // just advance ptr to beyond it - while(len--) - { - iUdp.read(); // we don't care about the returned byte - } - } - } - else - { - // This is a pointer to a somewhere else in the message for the - // rest of the name. We don't care about the name, and RFC1035 - // says that a name is either a sequence of labels ended with a - // 0 length octet or a pointer or a sequence of labels ending in - // a pointer. Either way, when we get here we're at the end of - // the name - // Skip over the pointer - iUdp.read(); // we don't care about the returned byte - // And set len so that we drop out of the name loop - len = 0; - } - } while (len != 0); - - // Check the type and class - uint16_t answerType; - uint16_t answerClass; - iUdp.read((uint8_t*)&answerType, sizeof(answerType)); - iUdp.read((uint8_t*)&answerClass, sizeof(answerClass)); - - // Ignore the Time-To-Live as we don't do any caching - for (int i =0; i < TTL_SIZE; i++) - { - iUdp.read(); // we don't care about the returned byte - } - - // And read out the length of this answer - // Don't need header_flags anymore, so we can reuse it here - iUdp.read((uint8_t*)&header_flags, sizeof(header_flags)); - - if ( (htons(answerType) == TYPE_A) && (htons(answerClass) == CLASS_IN) ) - { - if (htons(header_flags) != 4) - { - // It's a weird size - // Mark the entire packet as read - iUdp.flush(); - return -9;//INVALID_RESPONSE; - } - iUdp.read(aAddress.raw_address(), 4); - return SUCCESS; - } - else - { - // This isn't an answer type we're after, move onto the next one - for (uint16_t i =0; i < htons(header_flags); i++) - { - iUdp.read(); // we don't care about the returned byte - } - } - } - - // Mark the entire packet as read - iUdp.flush(); - - // If we get here then we haven't found an answer - return -10;//INVALID_RESPONSE; -} - diff --git a/libraries/UIPEthernet/Dns.h b/libraries/UIPEthernet/Dns.h deleted file mode 100644 index 4913ca8..0000000 --- a/libraries/UIPEthernet/Dns.h +++ /dev/null @@ -1,41 +0,0 @@ -// Arduino DNS client for Enc28J60-based Ethernet shield -// (c) Copyright 2009-2010 MCQN Ltd. -// Released under Apache License, version 2.0 - -#ifndef DNSClient_h -#define DNSClient_h - -#include - -class DNSClient -{ -public: - // ctor - void begin(const IPAddress& aDNSServer); - - /** Convert a numeric IP address string into a four-byte IP address. - @param aIPAddrString IP address to convert - @param aResult IPAddress structure to store the returned IP address - @result 1 if aIPAddrString was successfully converted to an IP address, - else error code - */ - int inet_aton(const char *aIPAddrString, IPAddress& aResult); - - /** Resolve the given hostname to an IP address. - @param aHostname Name to be resolved - @param aResult IPAddress structure to store the returned IP address - @result 1 if aIPAddrString was successfully converted to an IP address, - else error code - */ - int getHostByName(const char* aHostname, IPAddress& aResult); - -protected: - uint16_t BuildRequest(const char* aName); - uint16_t ProcessResponse(uint16_t aTimeout, IPAddress& aAddress); - - IPAddress iDNSServer; - uint16_t iRequestId; - UIPUDP iUdp; -}; - -#endif diff --git a/libraries/UIPEthernet/README b/libraries/UIPEthernet/README deleted file mode 100644 index 321b334..0000000 --- a/libraries/UIPEthernet/README +++ /dev/null @@ -1,227 +0,0 @@ -This is UIPEthernet version 1.09 - -An plugin-replacement of the stock Arduino Ethernet library for ENC28J60 shields and breakout boards. Full support for persistent (streaming) TCP-connections and UDP (Client and Server each), ARP, ICMP, DHCP and DNS. -Just include 'UIPEthernet.h' instead of 'Ethernet.h' and use all your code written for the stock Arduino Ethernet lib! - -UIPEthernet is written as a wrapper around the mature uIP Stack by Adam Dunkels, which provides the low-level implementation for all supported protocols. To overcome the memory-constrains (a 'regular' uIP-application does all processing in RAM) the ENC28J60 internal memory is used for all stream buffers (in and out). Only 400-600 Bytes of Arduinos RAM are used (depending on the number of concurrently open connections). As of Flash-memory a ATmega368-based Arduino is the minimum requirenment. - -This library is written by Norbert Truchsess - -uIP was written by Adam Dunkels of the Networked Embedded Systems group at the Swedish Institute of Computer Science. - -This library was inspired by the SerialIP implementation by Adam Nielsen , actually I took this code as a starting point, but in the latest versions there are very few lines left. - -Installation ------------- - -To install the libraries, you need to place them into your "libraries" folder. You can find it within your Arduino IDE distribution within the "hardware" folder. - - C:\> cd [path to Arduino distribution]\libraries - C:\> git clone https://github.com/ntruchsess/arduino_uip UIPEthernet - -Be sure to restart the IDE if it was running. - -On a Mac, you will want to create a folder named "libraries" in in the "Documents" -> "Arduino" folder within your home directory. Clone the project there (and restart the IDE, if it was running during this process). - - $ cd ~/Documents/Arduino/libraries - $ git clone https://github.com/ntruchsess/arduino_uip UIPEthernet - -Or you download the zipped version of the library from https://github.com/ntruchsess/arduino_uip/releases, and copy the contained directory UIPEthernet to [path to Arduino distribution]\libraries\UIPEthernet. - -If you are running Arduino-IDE 1.5.x use release-version 1.59 or checkout branch 'Arduino_1.5.x' - -Additional information can be found on the Arduino website: http://www.arduino.cc/en/Hacking/Libraries - -Documentation -------------- - -For more information visit: - - - UIPEthernet Repository on github: - https://github.com/ntruchsess/arduino_uip - - - Arduino Ethernet library description - http://arduino.cc/en/Reference/Ethernet - (Arduino_uip uses the same API as that, just include "UIPEthernet.h", "UIPClient.h", "UIPServer.h" and "UIPUDP.h" instead of the stock "Ethernet.h", "EthernetClient.h", "EthernetServer.h " and "EthernetUDP.h") - - - uIP API reference: - http://www.sics.se/~adam/uip/uip-1.0-refman/ - - - Arduino forums - http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl - - - uIP homepage: - http://www.sics.se/~adam/uip/index.php/Main_Page - -Licenses -------------- - -UIPEthernet.h -UIPEthernet.cpp -UIPServer.h -UIPServer.cpp -UIPClient.h -UIPClient.cpp -UIPUdp.h -UIPUdp.cpp -utility/mempool.h -utility/mempool.cpp - -Copyright (c) 2013 Norbert Truchsess -All rights reserved. - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . - --------------- - -utility/enc28j60.h - -Author : Pascal Stang (c)2005 -Modified by Norbert Truchsess -Copyright: GPL V2 - --------------- - -utility/Enc28J60Network.h -utility/Enc28J60Network.cpp - -Copyright (c) 2013 Norbert Truchsess -All rights reserved. - -inspired and based on enc28j60.c file from the AVRlib library by Pascal Stang. - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . - --------------- - -utility/uip.c -utility/uip_arp.h -utility/uip_arp.c -utility/uip_arch.h -utility/uip.h -utility/uipopt.h - -Copyright (c) 2001-2003, Adam Dunkels , . -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -3. Neither the name of the Institute nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -SUCH DAMAGE. - --------------- - -uip-conf.h -utility/uip-neighbor.h -utility/uip-neighbor.c -utility/uip_timer.h -utility/uip_timer.c -utility/uip_clock.h - -Author Adam Dunkels Adam Dunkels , -Copyright (c) 2004,2006, Swedish Institute of Computer Science. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -3. Neither the name of the Institute nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -SUCH DAMAGE. - --------------- - -Dhcp.h -Dhcp.cpp - -DHCP Library v0.3 - April 25, 2009 -Author: Jordan Terrell - blog.jordanterrell.com -- as included in Arduinos stock Ethernet-library, no special licence mentioned here - --------------- - -Dns.h -Dns.cpp - -(c) Copyright 2009-2010 MCQN Ltd. -Released under Apache License, version 2.0 - --------------- - -clock-arch.h -clock-arch.c - -Copyright (c) 2010 Adam Nielsen -All rights reserved. - -This library is free software; you can redistribute it and/or -modify it under the terms of the GNU Lesser General Public -License as published by the Free Software Foundation; either -version 2.1 of the License, or (at your option) any later version. - -This library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public -License along with this library; if not, write to the Free Software -Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA diff --git a/libraries/UIPEthernet/UIPClient.cpp b/libraries/UIPEthernet/UIPClient.cpp deleted file mode 100644 index d199cfe..0000000 --- a/libraries/UIPEthernet/UIPClient.cpp +++ /dev/null @@ -1,583 +0,0 @@ -/* - UIPClient.cpp - Arduino implementation of a uIP wrapper class. - Copyright (c) 2013 Norbert Truchsess - All rights reserved. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - */ - -extern "C" -{ -#import "utility/uip-conf.h" -#import "utility/uip.h" -#import "utility/uip_arp.h" -#import "string.h" -} -#include "UIPEthernet.h" -#include "UIPClient.h" -#include "Dns.h" - -#ifdef UIPETHERNET_DEBUG_CLIENT -#include "HardwareSerial.h" -#endif - -#define UIP_TCP_PHYH_LEN UIP_LLH_LEN+UIP_IPTCPH_LEN - -uip_userdata_t UIPClient::all_data[UIP_CONNS]; - -UIPClient::UIPClient() : - data(NULL) -{ -} - -UIPClient::UIPClient(uip_userdata_t* conn_data) : - data(conn_data) -{ -} - -int -UIPClient::connect(IPAddress ip, uint16_t port) -{ - stop(); - uip_ipaddr_t ipaddr; - uip_ip_addr(ipaddr, ip); - struct uip_conn* conn = uip_connect(&ipaddr, htons(port)); - if (conn) - { -#if UIP_CONNECT_TIMEOUT > 0 - int32_t timeout = millis() + 1000 * UIP_CONNECT_TIMEOUT; -#endif - while((conn->tcpstateflags & UIP_TS_MASK) != UIP_CLOSED) - { - UIPEthernetClass::tick(); - if ((conn->tcpstateflags & UIP_TS_MASK) == UIP_ESTABLISHED) - { - data = (uip_userdata_t*) conn->appstate; -#ifdef UIPETHERNET_DEBUG_CLIENT - Serial.print(F("connected, state: ")); - Serial.print(data->state); - Serial.print(F(", first packet in: ")); - Serial.println(data->packets_in[0]); -#endif - return 1; - } -#if UIP_CONNECT_TIMEOUT > 0 - if (((int32_t)(millis() - timeout)) > 0) - { - conn->tcpstateflags = UIP_CLOSED; - break; - } -#endif - } - } - return 0; -} - -int -UIPClient::connect(const char *host, uint16_t port) -{ - // Look up the host first - int ret = 0; -#if UIP_UDP - DNSClient dns; - IPAddress remote_addr; - - dns.begin(UIPEthernetClass::_dnsServerAddress); - ret = dns.getHostByName(host, remote_addr); - if (ret == 1) { - return connect(remote_addr, port); - } -#endif - return ret; -} - -void -UIPClient::stop() -{ - if (data && data->state) - { -#ifdef UIPETHERNET_DEBUG_CLIENT - Serial.println(F("before stop(), with data")); - _dumpAllData(); -#endif - _flushBlocks(&data->packets_in[0]); - if (data->state & UIP_CLIENT_REMOTECLOSED) - { - data->state = 0; - } - else - { - data->state |= UIP_CLIENT_CLOSE; - } -#ifdef UIPETHERNET_DEBUG_CLIENT - Serial.println(F("after stop()")); - _dumpAllData(); -#endif - } -#ifdef UIPETHERNET_DEBUG_CLIENT - else - { - Serial.println(F("stop(), data: NULL")); - } -#endif - data = NULL; - UIPEthernetClass::tick(); -} - -uint8_t -UIPClient::connected() -{ - return (data && (data->packets_in[0] != NOBLOCK || (data->state & UIP_CLIENT_CONNECTED))) ? 1 : 0; -} - -bool -UIPClient::operator==(const UIPClient& rhs) -{ - return data && rhs.data && (data == rhs.data); -} - -UIPClient::operator bool() -{ - UIPEthernetClass::tick(); - return data && (!(data->state & UIP_CLIENT_REMOTECLOSED) || data->packets_in[0] != NOBLOCK); -} - -size_t -UIPClient::write(uint8_t c) -{ - return _write(data, &c, 1); -} - -size_t -UIPClient::write(const uint8_t *buf, size_t size) -{ - return _write(data, buf, size); -} - -size_t -UIPClient::_write(uip_userdata_t* u, const uint8_t *buf, size_t size) -{ - int remain = size; - uint16_t written; -#if UIP_ATTEMPTS_ON_WRITE > 0 - uint16_t attempts = UIP_ATTEMPTS_ON_WRITE; -#endif - repeat: - UIPEthernetClass::tick(); - if (u && !(u->state & (UIP_CLIENT_CLOSE | UIP_CLIENT_REMOTECLOSED))) - { - uint8_t p = _currentBlock(&u->packets_out[0]); - if (u->packets_out[p] == NOBLOCK) - { -newpacket: - u->packets_out[p] = Enc28J60Network::allocBlock(UIP_SOCKET_DATALEN); - if (u->packets_out[p] == NOBLOCK) - { -#if UIP_ATTEMPTS_ON_WRITE > 0 - if ((--attempts)>0) -#endif -#if UIP_ATTEMPTS_ON_WRITE != 0 - goto repeat; -#endif - goto ready; - } - u->out_pos = 0; - } -#ifdef UIPETHERNET_DEBUG_CLIENT - Serial.print(F("UIPClient.write: writePacket(")); - Serial.print(u->packets_out[p]); - Serial.print(F(") pos: ")); - Serial.print(u->out_pos); - Serial.print(F(", buf[")); - Serial.print(size-remain); - Serial.print(F("-")); - Serial.print(remain); - Serial.print(F("]: '")); - Serial.write((uint8_t*)buf+size-remain,remain); - Serial.println(F("'")); -#endif - written = Enc28J60Network::writePacket(u->packets_out[p],u->out_pos,(uint8_t*)buf+size-remain,remain); - remain -= written; - u->out_pos+=written; - if (remain > 0) - { - if (p == UIP_SOCKET_NUMPACKETS-1) - { -#if UIP_ATTEMPTS_ON_WRITE > 0 - if ((--attempts)>0) -#endif -#if UIP_ATTEMPTS_ON_WRITE != 0 - goto repeat; -#endif - goto ready; - } - p++; - goto newpacket; - } -ready: -#if UIP_CLIENT_TIMER >= 0 - u->timer = millis()+UIP_CLIENT_TIMER; -#endif - return size-remain; - } - return -1; -} - -int -UIPClient::available() -{ - if (*this) - return _available(data); - return 0; -} - -int -UIPClient::_available(uip_userdata_t *u) -{ - int len = 0; - for (uint8_t i = 0; i < UIP_SOCKET_NUMPACKETS; i++) - { - len += Enc28J60Network::blockSize(u->packets_in[i]); - } - return len; -} - -int -UIPClient::read(uint8_t *buf, size_t size) -{ - if (*this) - { - uint16_t remain = size; - if (data->packets_in[0] == NOBLOCK) - return 0; - uint16_t read; - do - { - read = Enc28J60Network::readPacket(data->packets_in[0],0,buf+size-remain,remain); - if (read == Enc28J60Network::blockSize(data->packets_in[0])) - { - remain -= read; - _eatBlock(&data->packets_in[0]); - if (uip_stopped(&uip_conns[data->state & UIP_CLIENT_SOCKETS]) && !(data->state & (UIP_CLIENT_CLOSE | UIP_CLIENT_REMOTECLOSED))) - data->state |= UIP_CLIENT_RESTART; - if (data->packets_in[0] == NOBLOCK) - { - if (data->state & UIP_CLIENT_REMOTECLOSED) - { - data->state = 0; - data = NULL; - } - return size-remain; - } - } - else - { - Enc28J60Network::resizeBlock(data->packets_in[0],read); - break; - } - } - while(remain > 0); - return size; - } - return -1; -} - -int -UIPClient::read() -{ - uint8_t c; - if (read(&c,1) < 0) - return -1; - return c; -} - -int -UIPClient::peek() -{ - if (*this) - { - if (data->packets_in[0] != NOBLOCK) - { - uint8_t c; - Enc28J60Network::readPacket(data->packets_in[0],0,&c,1); - return c; - } - } - return -1; -} - -void -UIPClient::flush() -{ - if (*this) - { - _flushBlocks(&data->packets_in[0]); - } -} - -void -uipclient_appcall(void) -{ - uint16_t send_len = 0; - uip_userdata_t *u = (uip_userdata_t*)uip_conn->appstate; - if (!u && uip_connected()) - { -#ifdef UIPETHERNET_DEBUG_CLIENT - Serial.println(F("UIPClient uip_connected")); - UIPClient::_dumpAllData(); -#endif - u = (uip_userdata_t*) UIPClient::_allocateData(); - if (u) - { - uip_conn->appstate = u; -#ifdef UIPETHERNET_DEBUG_CLIENT - Serial.print(F("UIPClient allocated state: ")); - Serial.println(u->state,BIN); -#endif - } -#ifdef UIPETHERNET_DEBUG_CLIENT - else - Serial.println(F("UIPClient allocation failed")); -#endif - } - if (u) - { - if (uip_newdata()) - { -#ifdef UIPETHERNET_DEBUG_CLIENT - Serial.print(F("UIPClient uip_newdata, uip_len:")); - Serial.println(uip_len); -#endif - if (uip_len && !(u->state & (UIP_CLIENT_CLOSE | UIP_CLIENT_REMOTECLOSED))) - { - for (uint8_t i=0; i < UIP_SOCKET_NUMPACKETS; i++) - { - if (u->packets_in[i] == NOBLOCK) - { - u->packets_in[i] = Enc28J60Network::allocBlock(uip_len); - if (u->packets_in[i] != NOBLOCK) - { - Enc28J60Network::copyPacket(u->packets_in[i],0,UIPEthernetClass::in_packet,((uint8_t*)uip_appdata)-uip_buf,uip_len); - if (i == UIP_SOCKET_NUMPACKETS-1) - uip_stop(); - goto finish_newdata; - } - } - } - UIPEthernetClass::packetstate &= ~UIPETHERNET_FREEPACKET; - uip_stop(); - } - } -finish_newdata: - if (u->state & UIP_CLIENT_RESTART) - { - u->state &= ~UIP_CLIENT_RESTART; - uip_restart(); - } - // If the connection has been closed, save received but unread data. - if (uip_closed() || uip_timedout()) - { -#ifdef UIPETHERNET_DEBUG_CLIENT - Serial.println(F("UIPClient uip_closed")); - UIPClient::_dumpAllData(); -#endif - // drop outgoing packets not sent yet: - UIPClient::_flushBlocks(&u->packets_out[0]); - if (u->packets_in[0] != NOBLOCK) - { - ((uip_userdata_closed_t *)u)->lport = uip_conn->lport; - u->state |= UIP_CLIENT_REMOTECLOSED; - } - else - u->state = 0; - // disassociate appdata. -#ifdef UIPETHERNET_DEBUG_CLIENT - Serial.println(F("after UIPClient uip_closed")); - UIPClient::_dumpAllData(); -#endif - uip_conn->appstate = NULL; - goto finish; - } - if (uip_acked()) - { -#ifdef UIPETHERNET_DEBUG_CLIENT - Serial.println(F("UIPClient uip_acked")); -#endif - UIPClient::_eatBlock(&u->packets_out[0]); - } - if (uip_poll() || uip_rexmit()) - { -#ifdef UIPETHERNET_DEBUG_CLIENT - //Serial.println(F("UIPClient uip_poll")); -#endif - if (u->packets_out[0] != NOBLOCK) - { - if (u->packets_out[1] == NOBLOCK) - { - send_len = u->out_pos; - if (send_len > 0) - { - Enc28J60Network::resizeBlock(u->packets_out[0],0,send_len); - } - } - else - send_len = Enc28J60Network::blockSize(u->packets_out[0]); - if (send_len > 0) - { - UIPEthernetClass::uip_hdrlen = ((uint8_t*)uip_appdata)-uip_buf; - UIPEthernetClass::uip_packet = Enc28J60Network::allocBlock(UIPEthernetClass::uip_hdrlen+send_len); - if (UIPEthernetClass::uip_packet != NOBLOCK) - { - Enc28J60Network::copyPacket(UIPEthernetClass::uip_packet,UIPEthernetClass::uip_hdrlen,u->packets_out[0],0,send_len); - UIPEthernetClass::packetstate |= UIPETHERNET_SENDPACKET; - } - } - goto finish; - } - } - // don't close connection unless all outgoing packets are sent - if (u->state & UIP_CLIENT_CLOSE) - { -#ifdef UIPETHERNET_DEBUG_CLIENT - Serial.println(F("UIPClient state UIP_CLIENT_CLOSE")); - UIPClient::_dumpAllData(); -#endif - if (u->packets_out[0] == NOBLOCK) - { - u->state = 0; - uip_conn->appstate = NULL; - uip_close(); -#ifdef UIPETHERNET_DEBUG_CLIENT - Serial.println(F("no blocks out -> free userdata")); - UIPClient::_dumpAllData(); -#endif - } - else - { - uip_stop(); -#ifdef UIPETHERNET_DEBUG_CLIENT - Serial.println(F("blocks outstanding transfer -> uip_stop()")); -#endif - } - } - } - finish: - uip_send(uip_appdata,send_len); - uip_len = send_len; -} - -uip_userdata_t * -UIPClient::_allocateData() -{ - for ( uint8_t sock = 0; sock < UIP_CONNS; sock++ ) - { - uip_userdata_t* data = &UIPClient::all_data[sock]; - if (!data->state) - { - data->state = sock | UIP_CLIENT_CONNECTED; - memset(&data->packets_in[0],0,sizeof(uip_userdata_t)-sizeof(data->state)); - return data; - } - } - return NULL; -} - -uint8_t -UIPClient::_currentBlock(memhandle* block) -{ - for (uint8_t i = 1; i < UIP_SOCKET_NUMPACKETS; i++) - { - if (block[i] == NOBLOCK) - return i-1; - } - return UIP_SOCKET_NUMPACKETS-1; -} - -void -UIPClient::_eatBlock(memhandle* block) -{ -#ifdef UIPETHERNET_DEBUG_CLIENT - memhandle* start = block; - Serial.print(F("eatblock(")); - Serial.print(*block); - Serial.print(F("): ")); - for (uint8_t i = 0; i < UIP_SOCKET_NUMPACKETS; i++) - { - Serial.print(start[i]); - Serial.print(F(" ")); - } - Serial.print(F("-> ")); -#endif - Enc28J60Network::freeBlock(block[0]); - for (uint8_t i = 0; i < UIP_SOCKET_NUMPACKETS-1; i++) - { - block[i] = block[i+1]; - } - block[UIP_SOCKET_NUMPACKETS-1] = NOBLOCK; -#ifdef UIPETHERNET_DEBUG_CLIENT - for (uint8_t i = 0; i < UIP_SOCKET_NUMPACKETS; i++) - { - Serial.print(start[i]); - Serial.print(F(" ")); - } - Serial.println(); -#endif -} - -void -UIPClient::_flushBlocks(memhandle* block) -{ - for (uint8_t i = 0; i < UIP_SOCKET_NUMPACKETS; i++) - { - Enc28J60Network::freeBlock(block[i]); - block[i] = NOBLOCK; - } -} - -#ifdef UIPETHERNET_DEBUG_CLIENT -void -UIPClient::_dumpAllData() { - for (uint8_t i=0; i < UIP_CONNS; i++) - { - Serial.print(F("UIPClient::all_data[")); - Serial.print(i); - Serial.print(F("], state:")); - Serial.println(all_data[i].state, BIN); - Serial.print(F("packets_in: ")); - for (uint8_t j=0; j < UIP_SOCKET_NUMPACKETS; j++) - { - Serial.print(all_data[i].packets_in[j]); - Serial.print(F(" ")); - } - Serial.println(); - if (all_data[i].state & UIP_CLIENT_REMOTECLOSED) - { - Serial.print(F("state remote closed, local port: ")); - Serial.println(htons(((uip_userdata_closed_t *)(&all_data[i]))->lport)); - } - else - { - Serial.print(F("packets_out: ")); - for (uint8_t j=0; j < UIP_SOCKET_NUMPACKETS; j++) - { - Serial.print(all_data[i].packets_out[j]); - Serial.print(F(" ")); - } - Serial.println(); - Serial.print(F("out_pos: ")); - Serial.println(all_data[i].out_pos); - } - } -} -#endif diff --git a/libraries/UIPEthernet/UIPClient.h b/libraries/UIPEthernet/UIPClient.h deleted file mode 100644 index 6c0c006..0000000 --- a/libraries/UIPEthernet/UIPClient.h +++ /dev/null @@ -1,112 +0,0 @@ -/* - UIPClient.h - Arduino implementation of a uIP wrapper class. - Copyright (c) 2013 Norbert Truchsess - All rights reserved. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - */ - -#ifndef UIPCLIENT_H -#define UIPCLIENT_H - -#include "ethernet_comp.h" -#include "Print.h" -#import "Client.h" -#import "utility/mempool.h" - -extern "C" { - #import "utility/uip.h" -} - -#define UIP_SOCKET_DATALEN UIP_TCP_MSS -//#define UIP_SOCKET_NUMPACKETS UIP_RECEIVE_WINDOW/UIP_TCP_MSS+1 -#ifndef UIP_SOCKET_NUMPACKETS -#define UIP_SOCKET_NUMPACKETS 5 -#endif - -#define UIP_CLIENT_CONNECTED 0x10 -#define UIP_CLIENT_CLOSE 0x20 -#define UIP_CLIENT_REMOTECLOSED 0x40 -#define UIP_CLIENT_RESTART 0x80 -#define UIP_CLIENT_STATEFLAGS (UIP_CLIENT_CONNECTED | UIP_CLIENT_CLOSE | UIP_CLIENT_REMOTECLOSED | UIP_CLIENT_RESTART) -#define UIP_CLIENT_SOCKETS ~UIP_CLIENT_STATEFLAGS - -typedef uint8_t uip_socket_ptr; - -typedef struct { - uint8_t state; - memhandle packets_in[UIP_SOCKET_NUMPACKETS]; - uint16_t lport; /**< The local TCP port, in network byte order. */ -} uip_userdata_closed_t; - -typedef struct { - uint8_t state; - memhandle packets_in[UIP_SOCKET_NUMPACKETS]; - memhandle packets_out[UIP_SOCKET_NUMPACKETS]; - memaddress out_pos; -#if UIP_CLIENT_TIMER >= 0 - unsigned long timer; -#endif -} uip_userdata_t; - -class UIPClient : public Client { - -public: - UIPClient(); - int connect(IPAddress ip, uint16_t port); - int connect(const char *host, uint16_t port); - int read(uint8_t *buf, size_t size); - void stop(); - uint8_t connected(); - operator bool(); - virtual bool operator==(const EthernetClient&); - virtual bool operator!=(const EthernetClient& rhs) { return !this->operator==(rhs); }; - - size_t write(uint8_t); - size_t write(const uint8_t *buf, size_t size); - int available(); - int read(); - int peek(); - void flush(); - - using Print::write; - -private: - UIPClient(struct uip_conn *_conn); - UIPClient(uip_userdata_t* conn_data); - - uip_userdata_t* data; - - static uip_userdata_t all_data[UIP_CONNS]; - static uip_userdata_t* _allocateData(); - - static size_t _write(uip_userdata_t *,const uint8_t *buf, size_t size); - static int _available(uip_userdata_t *); - - static uint8_t _currentBlock(memhandle* blocks); - static void _eatBlock(memhandle* blocks); - static void _flushBlocks(memhandle* blocks); - -#ifdef UIPETHERNET_DEBUG_CLIENT - static void _dumpAllData(); -#endif - - friend class UIPEthernetClass; - friend class UIPServer; - - friend void uipclient_appcall(void); - -}; - -#endif diff --git a/libraries/UIPEthernet/UIPEthernet.cpp b/libraries/UIPEthernet/UIPEthernet.cpp deleted file mode 100644 index 91ec70a..0000000 --- a/libraries/UIPEthernet/UIPEthernet.cpp +++ /dev/null @@ -1,485 +0,0 @@ -/* - UIPEthernet.cpp - Arduino implementation of a uIP wrapper class. - Copyright (c) 2013 Norbert Truchsess - All rights reserved. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - */ - -#include -#include "UIPEthernet.h" -#include "utility/Enc28J60Network.h" - -#if(defined UIPETHERNET_DEBUG || defined UIPETHERNET_DEBUG_CHKSUM) -#include "HardwareSerial.h" -#endif - -#include "UIPUdp.h" - -extern "C" -{ -#include "utility/uip-conf.h" -#include "utility/uip.h" -#include "utility/uip_arp.h" -#include "utility/uip_timer.h" -} - -#define ETH_HDR ((struct uip_eth_hdr *)&uip_buf[0]) - -memhandle UIPEthernetClass::in_packet(NOBLOCK); -memhandle UIPEthernetClass::uip_packet(NOBLOCK); -uint8_t UIPEthernetClass::uip_hdrlen(0); -uint8_t UIPEthernetClass::packetstate(0); - -IPAddress UIPEthernetClass::_dnsServerAddress; -DhcpClass* UIPEthernetClass::_dhcp(NULL); - -unsigned long UIPEthernetClass::periodic_timer; - -// Because uIP isn't encapsulated within a class we have to use global -// variables, so we can only have one TCP/IP stack per program. - -UIPEthernetClass::UIPEthernetClass() -{ -} - -#if UIP_UDP -int -UIPEthernetClass::begin(const uint8_t* mac) -{ - static DhcpClass s_dhcp; - _dhcp = &s_dhcp; - - // Initialise the basic info - init(mac); - - // Now try to get our config info from a DHCP server - int ret = _dhcp->beginWithDHCP((uint8_t*)mac); - if(ret == 1) - { - // We've successfully found a DHCP server and got our configuration info, so set things - // accordingly - configure(_dhcp->getLocalIp(),_dhcp->getDnsServerIp(),_dhcp->getGatewayIp(),_dhcp->getSubnetMask()); - } - return ret; -} -#endif - -void -UIPEthernetClass::begin(const uint8_t* mac, IPAddress ip) -{ - IPAddress dns = ip; - dns[3] = 1; - begin(mac, ip, dns); -} - -void -UIPEthernetClass::begin(const uint8_t* mac, IPAddress ip, IPAddress dns) -{ - IPAddress gateway = ip; - gateway[3] = 1; - begin(mac, ip, dns, gateway); -} - -void -UIPEthernetClass::begin(const uint8_t* mac, IPAddress ip, IPAddress dns, IPAddress gateway) -{ - IPAddress subnet(255, 255, 255, 0); - begin(mac, ip, dns, gateway, subnet); -} - -void -UIPEthernetClass::begin(const uint8_t* mac, IPAddress ip, IPAddress dns, IPAddress gateway, IPAddress subnet) -{ - init(mac); - configure(ip,dns,gateway,subnet); -} - -int UIPEthernetClass::maintain(){ - tick(); - int rc = DHCP_CHECK_NONE; -#if UIP_UDP - if(_dhcp != NULL){ - //we have a pointer to dhcp, use it - rc = _dhcp->checkLease(); - switch ( rc ){ - case DHCP_CHECK_NONE: - //nothing done - break; - case DHCP_CHECK_RENEW_OK: - case DHCP_CHECK_REBIND_OK: - //we might have got a new IP. - configure(_dhcp->getLocalIp(),_dhcp->getDnsServerIp(),_dhcp->getGatewayIp(),_dhcp->getSubnetMask()); - break; - default: - //this is actually a error, it will retry though - break; - } - } - return rc; -#endif -} - -IPAddress UIPEthernetClass::localIP() -{ - IPAddress ret; - uip_ipaddr_t a; - uip_gethostaddr(a); - return ip_addr_uip(a); -} - -IPAddress UIPEthernetClass::subnetMask() -{ - IPAddress ret; - uip_ipaddr_t a; - uip_getnetmask(a); - return ip_addr_uip(a); -} - -IPAddress UIPEthernetClass::gatewayIP() -{ - IPAddress ret; - uip_ipaddr_t a; - uip_getdraddr(a); - return ip_addr_uip(a); -} - -IPAddress UIPEthernetClass::dnsServerIP() -{ - return _dnsServerAddress; -} - -void -UIPEthernetClass::tick() -{ - if (in_packet == NOBLOCK) - { - in_packet = Enc28J60Network::receivePacket(); -#ifdef UIPETHERNET_DEBUG - if (in_packet != NOBLOCK) - { - Serial.print(F("--------------\nreceivePacket: ")); - Serial.println(in_packet); - } -#endif - } - if (in_packet != NOBLOCK) - { - packetstate = UIPETHERNET_FREEPACKET; - uip_len = Enc28J60Network::blockSize(in_packet); - if (uip_len > 0) - { - Enc28J60Network::readPacket(in_packet,0,(uint8_t*)uip_buf,UIP_BUFSIZE); - if (ETH_HDR ->type == HTONS(UIP_ETHTYPE_IP)) - { - uip_packet = in_packet; //required for upper_layer_checksum of in_packet! -#ifdef UIPETHERNET_DEBUG - Serial.print(F("readPacket type IP, uip_len: ")); - Serial.println(uip_len); -#endif - uip_arp_ipin(); - uip_input(); - if (uip_len > 0) - { - uip_arp_out(); - network_send(); - } - } - else if (ETH_HDR ->type == HTONS(UIP_ETHTYPE_ARP)) - { -#ifdef UIPETHERNET_DEBUG - Serial.print(F("readPacket type ARP, uip_len: ")); - Serial.println(uip_len); -#endif - uip_arp_arpin(); - if (uip_len > 0) - { - network_send(); - } - } - } - if (in_packet != NOBLOCK && (packetstate & UIPETHERNET_FREEPACKET)) - { -#ifdef UIPETHERNET_DEBUG - Serial.print(F("freeing packet: ")); - Serial.println(in_packet); -#endif - Enc28J60Network::freePacket(); - in_packet = NOBLOCK; - } - } - - unsigned long now = millis(); - -#if UIP_CLIENT_TIMER >= 0 - boolean periodic = (long)( now - periodic_timer ) >= 0; - for (int i = 0; i < UIP_CONNS; i++) - { -#else - if ((long)( now - periodic_timer ) >= 0) - { - periodic_timer = now + UIP_PERIODIC_TIMER; - - for (int i = 0; i < UIP_CONNS; i++) - { -#endif - uip_conn = &uip_conns[i]; -#if UIP_CLIENT_TIMER >= 0 - if (periodic) - { -#endif - uip_process(UIP_TIMER); -#if UIP_CLIENT_TIMER >= 0 - } - else - { - if ((long)( now - ((uip_userdata_t*)uip_conn->appstate)->timer) >= 0) - uip_process(UIP_POLL_REQUEST); - else - continue; - } -#endif - // If the above function invocation resulted in data that - // should be sent out on the Enc28J60Network, the global variable - // uip_len is set to a value > 0. - if (uip_len > 0) - { - uip_arp_out(); - network_send(); - } - } -#if UIP_CLIENT_TIMER >= 0 - if (periodic) - { - periodic_timer = now + UIP_PERIODIC_TIMER; -#endif -#if UIP_UDP - for (int i = 0; i < UIP_UDP_CONNS; i++) - { - uip_udp_periodic(i); - // If the above function invocation resulted in data that - // should be sent out on the Enc28J60Network, the global variable - // uip_len is set to a value > 0. */ - if (uip_len > 0) - { - UIPUDP::_send((uip_udp_userdata_t *)(uip_udp_conns[i].appstate)); - } - } -#endif /* UIP_UDP */ - } -} - -boolean UIPEthernetClass::network_send() -{ - if (packetstate & UIPETHERNET_SENDPACKET) - { -#ifdef UIPETHERNET_DEBUG - Serial.print(F("Enc28J60Network_send uip_packet: ")); - Serial.print(uip_packet); - Serial.print(F(", hdrlen: ")); - Serial.println(uip_hdrlen); -#endif - Enc28J60Network::writePacket(uip_packet,0,uip_buf,uip_hdrlen); - packetstate &= ~ UIPETHERNET_SENDPACKET; - goto sendandfree; - } - uip_packet = Enc28J60Network::allocBlock(uip_len); - if (uip_packet != NOBLOCK) - { -#ifdef UIPETHERNET_DEBUG - Serial.print(F("Enc28J60Network_send uip_buf (uip_len): ")); - Serial.print(uip_len); - Serial.print(F(", packet: ")); - Serial.println(uip_packet); -#endif - Enc28J60Network::writePacket(uip_packet,0,uip_buf,uip_len); - goto sendandfree; - } - return false; -sendandfree: - Enc28J60Network::sendPacket(uip_packet); - Enc28J60Network::freeBlock(uip_packet); - uip_packet = NOBLOCK; - return true; -} - -void UIPEthernetClass::init(const uint8_t* mac) { - periodic_timer = millis() + UIP_PERIODIC_TIMER; - - Enc28J60Network::init((uint8_t*)mac); - uip_seteth_addr(mac); - - uip_init(); - uip_arp_init(); -} - -void UIPEthernetClass::configure(IPAddress ip, IPAddress dns, IPAddress gateway, IPAddress subnet) { - uip_ipaddr_t ipaddr; - - uip_ip_addr(ipaddr, ip); - uip_sethostaddr(ipaddr); - - uip_ip_addr(ipaddr, gateway); - uip_setdraddr(ipaddr); - - uip_ip_addr(ipaddr, subnet); - uip_setnetmask(ipaddr); - - _dnsServerAddress = dns; -} - -UIPEthernetClass UIPEthernet; - -/*---------------------------------------------------------------------------*/ -uint16_t -UIPEthernetClass::chksum(uint16_t sum, const uint8_t *data, uint16_t len) -{ - uint16_t t; - const uint8_t *dataptr; - const uint8_t *last_byte; - - dataptr = data; - last_byte = data + len - 1; - - while(dataptr < last_byte) { /* At least two more bytes */ - t = (dataptr[0] << 8) + dataptr[1]; - sum += t; - if(sum < t) { - sum++; /* carry */ - } - dataptr += 2; - } - - if(dataptr == last_byte) { - t = (dataptr[0] << 8) + 0; - sum += t; - if(sum < t) { - sum++; /* carry */ - } - } - - /* Return sum in host byte order. */ - return sum; -} - -/*---------------------------------------------------------------------------*/ - -uint16_t -UIPEthernetClass::ipchksum(void) -{ - uint16_t sum; - - sum = chksum(0, &uip_buf[UIP_LLH_LEN], UIP_IPH_LEN); - return (sum == 0) ? 0xffff : htons(sum); -} - -/*---------------------------------------------------------------------------*/ -uint16_t -#if UIP_UDP -UIPEthernetClass::upper_layer_chksum(uint8_t proto) -#else -uip_tcpchksum(void) -#endif -{ - uint16_t upper_layer_len; - uint16_t sum; - -#if UIP_CONF_IPV6 - upper_layer_len = (((u16_t)(BUF->len[0]) << 8) + BUF->len[1]); -#else /* UIP_CONF_IPV6 */ - upper_layer_len = (((u16_t)(BUF->len[0]) << 8) + BUF->len[1]) - UIP_IPH_LEN; -#endif /* UIP_CONF_IPV6 */ - - /* First sum pseudoheader. */ - - /* IP protocol and length fields. This addition cannot carry. */ -#if UIP_UDP - sum = upper_layer_len + proto; -#else - sum = upper_layer_len + UIP_PROTO_TCP; -#endif - /* Sum IP source and destination addresses. */ - sum = UIPEthernetClass::chksum(sum, (u8_t *)&BUF->srcipaddr[0], 2 * sizeof(uip_ipaddr_t)); - - uint8_t upper_layer_memlen; -#if UIP_UDP - switch(proto) - { -// case UIP_PROTO_ICMP: -// case UIP_PROTO_ICMP6: -// upper_layer_memlen = upper_layer_len; -// break; - case UIP_PROTO_UDP: - upper_layer_memlen = UIP_UDPH_LEN; - break; - default: -// case UIP_PROTO_TCP: -#endif - upper_layer_memlen = (BUF->tcpoffset >> 4) << 2; -#if UIP_UDP - break; - } -#endif - sum = UIPEthernetClass::chksum(sum, &uip_buf[UIP_IPH_LEN + UIP_LLH_LEN], upper_layer_memlen); -#ifdef UIPETHERNET_DEBUG_CHKSUM - Serial.print(F("chksum uip_buf[")); - Serial.print(UIP_IPH_LEN + UIP_LLH_LEN); - Serial.print(F("-")); - Serial.print(UIP_IPH_LEN + UIP_LLH_LEN + upper_layer_memlen); - Serial.print(F("]: ")); - Serial.println(htons(sum),HEX); -#endif - if (upper_layer_memlen < upper_layer_len) - { - sum = Enc28J60Network::chksum( - sum, - UIPEthernetClass::uip_packet, - UIP_IPH_LEN + UIP_LLH_LEN + upper_layer_memlen, - upper_layer_len - upper_layer_memlen - ); -#ifdef UIPETHERNET_DEBUG_CHKSUM - Serial.print(F("chksum uip_packet(")); - Serial.print(uip_packet); - Serial.print(F(")[")); - Serial.print(UIP_IPH_LEN + UIP_LLH_LEN + upper_layer_memlen); - Serial.print(F("-")); - Serial.print(UIP_IPH_LEN + UIP_LLH_LEN + upper_layer_len); - Serial.print(F("]: ")); - Serial.println(htons(sum),HEX); -#endif - } - return (sum == 0) ? 0xffff : htons(sum); -} - -uint16_t -uip_ipchksum(void) -{ - return UIPEthernet.ipchksum(); -} - -#if UIP_UDP -uint16_t -uip_tcpchksum(void) -{ - uint16_t sum = UIPEthernet.upper_layer_chksum(UIP_PROTO_TCP); - return sum; -} - -uint16_t -uip_udpchksum(void) -{ - uint16_t sum = UIPEthernet.upper_layer_chksum(UIP_PROTO_UDP); - return sum; -} -#endif diff --git a/libraries/UIPEthernet/UIPEthernet.h b/libraries/UIPEthernet/UIPEthernet.h deleted file mode 100644 index c68d578..0000000 --- a/libraries/UIPEthernet/UIPEthernet.h +++ /dev/null @@ -1,127 +0,0 @@ -/* - UIPEthernet.h - Arduino implementation of a uIP wrapper class. - Copyright (c) 2013 Norbert Truchsess - All rights reserved. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - */ - -#ifndef UIPETHERNET_H -#define UIPETHERNET_H - -//#define UIPETHERNET_DEBUG -//#define UIPETHERNET_DEBUG_CHKSUM -//#define UIPETHERNET_DEBUG_UDP -//#define UIPETHERNET_DEBUG_CLIENT - -#include "ethernet_comp.h" -#include -#include "Dhcp.h" -#include "IPAddress.h" -#include "utility/Enc28J60Network.h" -#include "UIPClient.h" -#include "UIPServer.h" -#include "UIPUdp.h" - -extern "C" -{ -#include "utility/uip_timer.h" -#include "utility/uip.h" -} - -#define UIPETHERNET_FREEPACKET 1 -#define UIPETHERNET_SENDPACKET 2 -#define UIPETHERNET_BUFFERREAD 4 - -#define uip_ip_addr(addr, ip) do { \ - ((u16_t *)(addr))[0] = HTONS(((ip[0]) << 8) | (ip[1])); \ - ((u16_t *)(addr))[1] = HTONS(((ip[2]) << 8) | (ip[3])); \ - } while(0) - -#define ip_addr_uip(a) IPAddress(a[0] & 0xFF, a[0] >> 8 , a[1] & 0xFF, a[1] >> 8) //TODO this is not IPV6 capable - -#define uip_seteth_addr(eaddr) do {uip_ethaddr.addr[0] = eaddr[0]; \ - uip_ethaddr.addr[1] = eaddr[1];\ - uip_ethaddr.addr[2] = eaddr[2];\ - uip_ethaddr.addr[3] = eaddr[3];\ - uip_ethaddr.addr[4] = eaddr[4];\ - uip_ethaddr.addr[5] = eaddr[5];} while(0) - -#define BUF ((struct uip_tcpip_hdr *)&uip_buf[UIP_LLH_LEN]) - -class UIPEthernetClass -{ -public: - UIPEthernetClass(); - - int begin(const uint8_t* mac); - void begin(const uint8_t* mac, IPAddress ip); - void begin(const uint8_t* mac, IPAddress ip, IPAddress dns); - void begin(const uint8_t* mac, IPAddress ip, IPAddress dns, IPAddress gateway); - void begin(const uint8_t* mac, IPAddress ip, IPAddress dns, IPAddress gateway, IPAddress subnet); - - // maintain() must be called at regular intervals to process the incoming serial - // data and issue IP events to the sketch. It does not return until all IP - // events have been processed. Renews dhcp-lease if required. - int maintain(); - - IPAddress localIP(); - IPAddress subnetMask(); - IPAddress gatewayIP(); - IPAddress dnsServerIP(); - -private: - static memhandle in_packet; - static memhandle uip_packet; - static uint8_t uip_hdrlen; - static uint8_t packetstate; - - static IPAddress _dnsServerAddress; - static DhcpClass* _dhcp; - - static unsigned long periodic_timer; - - static void init(const uint8_t* mac); - static void configure(IPAddress ip, IPAddress dns, IPAddress gateway, IPAddress subnet); - - static void tick(); - - static boolean network_send(); - - friend class UIPServer; - - friend class UIPClient; - - friend class UIPUDP; - - static uint16_t chksum(uint16_t sum, const uint8_t* data, uint16_t len); - static uint16_t ipchksum(void); -#if UIP_UDP - static uint16_t upper_layer_chksum(uint8_t proto); -#endif - friend uint16_t uip_ipchksum(void); - friend uint16_t uip_tcpchksum(void); - friend uint16_t uip_udpchksum(void); - - friend void uipclient_appcall(void); - friend void uipudp_appcall(void); - -#if UIP_CONF_IPV6 - uint16_t uip_icmp6chksum(void); -#endif /* UIP_CONF_IPV6 */ -}; - -extern UIPEthernetClass UIPEthernet; - -#endif diff --git a/libraries/UIPEthernet/UIPServer.cpp b/libraries/UIPEthernet/UIPServer.cpp deleted file mode 100644 index 21c7ef5..0000000 --- a/libraries/UIPEthernet/UIPServer.cpp +++ /dev/null @@ -1,63 +0,0 @@ -/* - UIPServer.cpp - Arduino implementation of a uIP wrapper class. - Copyright (c) 2013 Norbert Truchsess - All rights reserved. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - */ -#include "UIPEthernet.h" -#include "UIPServer.h" -extern "C" { - #include "utility/uip-conf.h" -} - -UIPServer::UIPServer(uint16_t port) : _port(htons(port)) -{ -} - -UIPClient UIPServer::available() -{ - UIPEthernetClass::tick(); - for ( uip_userdata_t* data = &UIPClient::all_data[0]; data < &UIPClient::all_data[UIP_CONNS]; data++ ) - { - if (data->packets_in[0] != NOBLOCK - && (((data->state & UIP_CLIENT_CONNECTED) && uip_conns[data->state & UIP_CLIENT_SOCKETS].lport ==_port) - || ((data->state & UIP_CLIENT_REMOTECLOSED) && ((uip_userdata_closed_t *)data)->lport == _port))) - return UIPClient(data); - } - return UIPClient(); -} - -void UIPServer::begin() -{ - uip_listen(_port); - UIPEthernetClass::tick(); -} - -size_t UIPServer::write(uint8_t c) -{ - return write(&c,1); -} - -size_t UIPServer::write(const uint8_t *buf, size_t size) -{ - size_t ret = 0; - for ( uip_userdata_t* data = &UIPClient::all_data[0]; data < &UIPClient::all_data[UIP_CONNS]; data++ ) - { - if ((data->state & UIP_CLIENT_CONNECTED) && uip_conns[data->state & UIP_CLIENT_SOCKETS].lport ==_port) - ret += UIPClient::_write(data,buf,size); - } - return ret; -} - diff --git a/libraries/UIPEthernet/UIPServer.h b/libraries/UIPEthernet/UIPServer.h deleted file mode 100644 index 0cc0619..0000000 --- a/libraries/UIPEthernet/UIPServer.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - UIPServer.h - Arduino implementation of a uIP wrapper class. - Copyright (c) 2013 Norbert Truchsess - All rights reserved. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - */ -#ifndef UIPSERVER_H -#define UIPSERVER_H - -#include "ethernet_comp.h" -#import "Server.h" -#import "UIPClient.h" - -class UIPServer : public Server { - -public: - UIPServer(uint16_t); - UIPClient available(); - void begin(); - size_t write(uint8_t); - size_t write(const uint8_t *buf, size_t size); - using Print::write; - -private: - uint16_t _port; -}; - -#endif diff --git a/libraries/UIPEthernet/UIPUdp.cpp b/libraries/UIPEthernet/UIPUdp.cpp deleted file mode 100644 index 3deb2c4..0000000 --- a/libraries/UIPEthernet/UIPUdp.cpp +++ /dev/null @@ -1,383 +0,0 @@ -/* - UIPUdp.cpp - Arduino implementation of a uIP wrapper class. - Copyright (c) 2013 Norbert Truchsess - All rights reserved. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - */ - -#include "UIPEthernet.h" -#include "UIPUdp.h" -#include "Dns.h" - -#ifdef UIPETHERNET_DEBUG_UDP -#include "HardwareSerial.h" -#endif - -extern "C" { -#include "utility/uip-conf.h" -#include "utility/uip.h" -#include "utility/uip_arp.h" -} - -#if UIP_UDP -#define UIP_ARPHDRSIZE 42 -#define UDPBUF ((struct uip_udpip_hdr *)&uip_buf[UIP_LLH_LEN]) - -// Constructor -UIPUDP::UIPUDP() : - _uip_udp_conn(NULL) -{ - memset(&appdata,0,sizeof(appdata)); -} - -// initialize, start listening on specified port. Returns 1 if successful, 0 if there are no sockets available to use -uint8_t -UIPUDP::begin(uint16_t port) -{ - if (!_uip_udp_conn) - { - _uip_udp_conn = uip_udp_new(NULL, 0); - } - if (_uip_udp_conn) - { - uip_udp_bind(_uip_udp_conn,htons(port)); - _uip_udp_conn->appstate = &appdata; - return 1; - } - return 0; -} - -// Finish with the UDP socket -void -UIPUDP::stop() -{ - if (_uip_udp_conn) - { - uip_udp_remove(_uip_udp_conn); - _uip_udp_conn->appstate = NULL; - _uip_udp_conn=NULL; - Enc28J60Network::freeBlock(appdata.packet_in); - Enc28J60Network::freeBlock(appdata.packet_next); - Enc28J60Network::freeBlock(appdata.packet_out); - memset(&appdata,0,sizeof(appdata)); - } -} - -// Sending UDP packets - -// Start building up a packet to send to the remote host specific in ip and port -// Returns 1 if successful, 0 if there was a problem with the supplied IP address or port -int -UIPUDP::beginPacket(IPAddress ip, uint16_t port) -{ - UIPEthernetClass::tick(); - if (ip && port) - { - uip_ipaddr_t ripaddr; - uip_ip_addr(&ripaddr, ip); -#ifdef UIPETHERNET_DEBUG_UDP - Serial.print(F("udp beginPacket, ")); -#endif - if (_uip_udp_conn) - { - _uip_udp_conn->rport = htons(port); - uip_ipaddr_copy(_uip_udp_conn->ripaddr, &ripaddr); - } - else - { - _uip_udp_conn = uip_udp_new(&ripaddr,htons(port)); - if (_uip_udp_conn) - { -#ifdef UIPETHERNET_DEBUG_UDP - Serial.print(F("new connection, ")); -#endif - _uip_udp_conn->appstate = &appdata; - } - else - { -#ifdef UIPETHERNET_DEBUG_UDP - Serial.println(F("failed to allocate new connection")); -#endif - return 0; - } - } -#ifdef UIPETHERNET_DEBUG_UDP - Serial.print(F("rip: ")); - Serial.print(ip); - Serial.print(F(", port: ")); - Serial.println(port); -#endif - } - if (_uip_udp_conn) - { - if (appdata.packet_out == NOBLOCK) - { - appdata.packet_out = Enc28J60Network::allocBlock(UIP_UDP_MAXPACKETSIZE); - appdata.out_pos = UIP_UDP_PHYH_LEN; - if (appdata.packet_out != NOBLOCK) - return 1; -#ifdef UIPETHERNET_DEBUG_UDP - else - Serial.println(F("failed to allocate memory for packet")); -#endif - } -#ifdef UIPETHERNET_DEBUG_UDP - else - Serial.println(F("previous packet on that connection not sent yet")); -#endif - } - return 0; -} - -// Start building up a packet to send to the remote host specific in host and port -// Returns 1 if successful, 0 if there was a problem resolving the hostname or port -int -UIPUDP::beginPacket(const char *host, uint16_t port) -{ - // Look up the host first - int ret = 0; - DNSClient dns; - IPAddress remote_addr; - - dns.begin(UIPEthernet.dnsServerIP()); - ret = dns.getHostByName(host, remote_addr); - if (ret == 1) { - return beginPacket(remote_addr, port); - } else { - return ret; - } -} - -// Finish off this packet and send it -// Returns 1 if the packet was sent successfully, 0 if there was an error -int -UIPUDP::endPacket() -{ - if (_uip_udp_conn && appdata.packet_out != NOBLOCK) - { - appdata.send = true; - Enc28J60Network::resizeBlock(appdata.packet_out,0,appdata.out_pos); - uip_udp_periodic_conn(_uip_udp_conn); - if (uip_len > 0) - { - _send(&appdata); - return 1; - } - } - return 0; -} - -// Write a single byte into the packet -size_t -UIPUDP::write(uint8_t c) -{ - return write(&c,1); -} - -// Write size bytes from buffer into the packet -size_t -UIPUDP::write(const uint8_t *buffer, size_t size) -{ - if (appdata.packet_out != NOBLOCK) - { - size_t ret = Enc28J60Network::writePacket(appdata.packet_out,appdata.out_pos,(uint8_t*)buffer,size); - appdata.out_pos += ret; - return ret; - } - return 0; -} - -// Start processing the next available incoming packet -// Returns the size of the packet in bytes, or 0 if no packets are available -int -UIPUDP::parsePacket() -{ - UIPEthernetClass::tick(); -#ifdef UIPETHERNET_DEBUG_UDP - if (appdata.packet_in != NOBLOCK) - { - Serial.print(F("udp parsePacket freeing previous packet: ")); - Serial.println(appdata.packet_in); - } -#endif - Enc28J60Network::freeBlock(appdata.packet_in); - - appdata.packet_in = appdata.packet_next; - appdata.packet_next = NOBLOCK; - -#ifdef UIPETHERNET_DEBUG_UDP - if (appdata.packet_in != NOBLOCK) - { - Serial.print(F("udp parsePacket received packet: ")); - Serial.print(appdata.packet_in); - } -#endif - int size = Enc28J60Network::blockSize(appdata.packet_in); -#ifdef UIPETHERNET_DEBUG_UDP - if (appdata.packet_in != NOBLOCK) - { - Serial.print(F(", size: ")); - Serial.println(size); - } -#endif - return size; -} - -// Number of bytes remaining in the current packet -int -UIPUDP::available() -{ - UIPEthernetClass::tick(); - return Enc28J60Network::blockSize(appdata.packet_in); -} - -// Read a single byte from the current packet -int -UIPUDP::read() -{ - unsigned char c; - if (read(&c,1) > 0) - { - return c; - } - return -1; -} - -// Read up to len bytes from the current packet and place them into buffer -// Returns the number of bytes read, or 0 if none are available -int -UIPUDP::read(unsigned char* buffer, size_t len) -{ - UIPEthernetClass::tick(); - if (appdata.packet_in != NOBLOCK) - { - memaddress read = Enc28J60Network::readPacket(appdata.packet_in,0,buffer,len); - if (read == Enc28J60Network::blockSize(appdata.packet_in)) - { - Enc28J60Network::freeBlock(appdata.packet_in); - appdata.packet_in = NOBLOCK; - } - else - Enc28J60Network::resizeBlock(appdata.packet_in,read); - return read; - } - return 0; -} - -// Return the next byte from the current packet without moving on to the next byte -int -UIPUDP::peek() -{ - UIPEthernetClass::tick(); - if (appdata.packet_in != NOBLOCK) - { - unsigned char c; - if (Enc28J60Network::readPacket(appdata.packet_in,0,&c,1) == 1) - return c; - } - return -1; -} - -// Finish reading the current packet -void -UIPUDP::flush() -{ - UIPEthernetClass::tick(); - Enc28J60Network::freeBlock(appdata.packet_in); - appdata.packet_in = NOBLOCK; -} - -// Return the IP address of the host who sent the current incoming packet -IPAddress -UIPUDP::remoteIP() -{ - return _uip_udp_conn ? ip_addr_uip(_uip_udp_conn->ripaddr) : IPAddress(); -} - -// Return the port of the host who sent the current incoming packet -uint16_t -UIPUDP::remotePort() -{ - return _uip_udp_conn ? ntohs(_uip_udp_conn->rport) : 0; -} - -// uIP callback function - -void -uipudp_appcall(void) { - if (uip_udp_userdata_t *data = (uip_udp_userdata_t *)(uip_udp_conn->appstate)) - { - if (uip_newdata()) - { - if (data->packet_next == NOBLOCK) - { - uip_udp_conn->rport = UDPBUF->srcport; - uip_ipaddr_copy(uip_udp_conn->ripaddr,UDPBUF->srcipaddr); - data->packet_next = Enc28J60Network::allocBlock(ntohs(UDPBUF->udplen)-UIP_UDPH_LEN); - //if we are unable to allocate memory the packet is dropped. udp doesn't guarantee packet delivery - if (data->packet_next != NOBLOCK) - { - //discard Linklevel and IP and udp-header and any trailing bytes: - Enc28J60Network::copyPacket(data->packet_next,0,UIPEthernetClass::in_packet,UIP_UDP_PHYH_LEN,Enc28J60Network::blockSize(data->packet_next)); - #ifdef UIPETHERNET_DEBUG_UDP - Serial.print(F("udp, uip_newdata received packet: ")); - Serial.print(data->packet_next); - Serial.print(F(", size: ")); - Serial.println(Enc28J60Network::blockSize(data->packet_next)); - #endif - } - } - } - if (uip_poll() && data->send) - { - //set uip_slen (uip private) by calling uip_udp_send -#ifdef UIPETHERNET_DEBUG_UDP - Serial.print(F("udp, uip_poll preparing packet to send: ")); - Serial.print(data->packet_out); - Serial.print(F(", size: ")); - Serial.println(Enc28J60Network::blockSize(data->packet_out)); -#endif - UIPEthernetClass::uip_packet = data->packet_out; - UIPEthernetClass::uip_hdrlen = UIP_UDP_PHYH_LEN; - uip_udp_send(data->out_pos - (UIP_UDP_PHYH_LEN)); - } - } -} - -void -UIPUDP::_send(uip_udp_userdata_t *data) { - uip_arp_out(); //add arp - if (uip_len == UIP_ARPHDRSIZE) - { - UIPEthernetClass::uip_packet = NOBLOCK; - UIPEthernetClass::packetstate &= ~UIPETHERNET_SENDPACKET; -#ifdef UIPETHERNET_DEBUG_UDP - Serial.println(F("udp, uip_poll results in ARP-packet")); -#endif - } - else - //arp found ethaddr for ip (otherwise packet is replaced by arp-request) - { - data->send = false; - data->packet_out = NOBLOCK; - UIPEthernetClass::packetstate |= UIPETHERNET_SENDPACKET; -#ifdef UIPETHERNET_DEBUG_UDP - Serial.print(F("udp, uip_packet to send: ")); - Serial.println(UIPEthernetClass::uip_packet); -#endif - } - UIPEthernetClass::network_send(); -} -#endif diff --git a/libraries/UIPEthernet/UIPUdp.h b/libraries/UIPEthernet/UIPUdp.h deleted file mode 100644 index b007a3c..0000000 --- a/libraries/UIPEthernet/UIPUdp.h +++ /dev/null @@ -1,126 +0,0 @@ -/* - UIPUdp.h - Arduino implementation of a uIP wrapper class. - Copyright (c) 2013 Norbert Truchsess - All rights reserved. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - */ - -#ifndef UIPUDP_H -#define UIPUDP_H - -#include "ethernet_comp.h" -#include "Arduino.h" -#include -#include "utility/mempool.h" -extern "C" { - #include "utility/uip.h" -} - -#define UIP_UDP_MAXDATALEN 1500 -#define UIP_UDP_PHYH_LEN UIP_LLH_LEN+UIP_IPUDPH_LEN -#define UIP_UDP_MAXPACKETSIZE UIP_UDP_MAXDATALEN+UIP_UDP_PHYH_LEN - -typedef struct { - memaddress out_pos; - memhandle packet_next; - memhandle packet_in; - memhandle packet_out; - boolean send; -} uip_udp_userdata_t; - -class UIPUDP : public UDP -{ - -private: - struct uip_udp_conn *_uip_udp_conn; - - uip_udp_userdata_t appdata; - -public: - UIPUDP(); // Constructor - uint8_t - begin(uint16_t);// initialize, start listening on specified port. Returns 1 if successful, 0 if there are no sockets available to use - void - stop(); // Finish with the UDP socket - - // Sending UDP packets - - // Start building up a packet to send to the remote host specific in ip and port - // Returns 1 if successful, 0 if there was a problem with the supplied IP address or port - int - beginPacket(IPAddress ip, uint16_t port); - // Start building up a packet to send to the remote host specific in host and port - // Returns 1 if successful, 0 if there was a problem resolving the hostname or port - int - beginPacket(const char *host, uint16_t port); - // Finish off this packet and send it - // Returns 1 if the packet was sent successfully, 0 if there was an error - int - endPacket(); - // Write a single byte into the packet - size_t - write(uint8_t); - // Write size bytes from buffer into the packet - size_t - write(const uint8_t *buffer, size_t size); - - using Print::write; - - // Start processing the next available incoming packet - // Returns the size of the packet in bytes, or 0 if no packets are available - int - parsePacket(); - // Number of bytes remaining in the current packet - int - available(); - // Read a single byte from the current packet - int - read(); - // Read up to len bytes from the current packet and place them into buffer - // Returns the number of bytes read, or 0 if none are available - int - read(unsigned char* buffer, size_t len); - // Read up to len characters from the current packet and place them into buffer - // Returns the number of characters read, or 0 if none are available - int - read(char* buffer, size_t len) - { - return read((unsigned char*) buffer, len); - } - ; - // Return the next byte from the current packet without moving on to the next byte - int - peek(); - void - flush(); // Finish reading the current packet - - // Return the IP address of the host who sent the current incoming packet - IPAddress - remoteIP(); - - // Return the port of the host who sent the current incoming packet - uint16_t - remotePort(); - -private: - - friend void uipudp_appcall(void); - - friend class UIPEthernetClass; - static void _send(uip_udp_userdata_t *data); - -}; - -#endif diff --git a/libraries/UIPEthernet/ethernet_comp.h b/libraries/UIPEthernet/ethernet_comp.h deleted file mode 100644 index 4cec2ab..0000000 --- a/libraries/UIPEthernet/ethernet_comp.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef ETHERNET_COMP_H -#define ETHERNET_COMP_H - -#define Ethernet UIPEthernet -#define EthernetClient UIPClient -#define EthernetServer UIPServer -#define EthernetUDP UIPUDP - -#endif diff --git a/libraries/UIPEthernet/examples/AdvancedChatServer/AdvancedChatServer.ino b/libraries/UIPEthernet/examples/AdvancedChatServer/AdvancedChatServer.ino deleted file mode 100644 index bc2f094..0000000 --- a/libraries/UIPEthernet/examples/AdvancedChatServer/AdvancedChatServer.ino +++ /dev/null @@ -1,104 +0,0 @@ -/* - Advanced Chat Server - - A simple server that distributes any incoming messages to all - connected clients but the client the message comes from. - To use telnet to your device's IP address and type. - You can see the client's input in the serial monitor as well. - Using an Arduino Wiznet Ethernet shield. - - Circuit: - * Ethernet shield attached to pins 10, 11, 12, 13 - * Analog inputs attached to pins A0 through A5 (optional) - - created 18 Dec 2009 - by David A. Mellis - modified 9 Apr 2012 - by Tom Igoe - redesigned to make use of operator== 25 Nov 2013 - by Norbert Truchsess - - */ - -#include - -// Enter a MAC address and IP address for your controller below. -// The IP address will be dependent on your local network. - -byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; -IPAddress ip(192,168,0,6); - -// telnet defaults to port 23 -EthernetServer server(23); - -EthernetClient clients[4]; - -void setup() { - // initialize the ethernet device - Ethernet.begin(mac, ip); - // start listening for clients - server.begin(); - // Open serial communications and wait for port to open: - Serial.begin(9600); - while (!Serial) { - ; // wait for serial port to connect. Needed for Leonardo only - } - - - Serial.print("Chat server address:"); - Serial.println(Ethernet.localIP()); -} - -void loop() { - // wait for a new client: - EthernetClient client = server.available(); - - if (client) { - - boolean newClient = true; - for (byte i=0;i<4;i++) { - //check whether this client refers to the same socket as one of the existing instances: - if (clients[i]==client) { - newClient = false; - break; - } - } - - if (newClient) { - //check which of the existing clients can be overridden: - for (byte i=0;i<4;i++) { - if (!clients[i] && clients[i]!=client) { - clients[i] = client; - // clead out the input buffer: - client.flush(); - // clead out the input buffer: - client.flush(); - Serial.println("We have a new client"); - client.println("Hello, client!"); - client.print("my IP: "); - client.println(Ethernet.localIP()); - break; - } - } - } - - if (client.available() > 0) { - // read the bytes incoming from the client: - char thisChar = client.read(); - // echo the bytes back to all other connected clients: - for (byte i=0;i<4;i++) { - if (clients[i] && clients[i]!=client) { - clients[i].write(thisChar); - } - } - // echo the bytes to the server as well: - Serial.write(thisChar); - } - } - for (byte i=0;i<4;i++) { - if (!(clients[i].connected())) { - // client.stop() invalidates the internal socket-descriptor, so next use of == will allways return false; - clients[i].stop(); - } - } -} diff --git a/libraries/UIPEthernet/examples/EchoServer/EchoServer.ino b/libraries/UIPEthernet/examples/EchoServer/EchoServer.ino deleted file mode 100644 index 62d66e4..0000000 --- a/libraries/UIPEthernet/examples/EchoServer/EchoServer.ino +++ /dev/null @@ -1,58 +0,0 @@ -/* - * UIPEthernet EchoServer example. - * - * UIPEthernet is a TCP/IP stack that can be used with a enc28j60 based - * Ethernet-shield. - * - * UIPEthernet uses the fine uIP stack by Adam Dunkels - * - * ----------------- - * - * This Hello World example sets up a server at 192.168.1.6 on port 1000. - * Telnet here to access the service. The uIP stack will also respond to - * pings to test if you have successfully established a TCP connection to - * the Arduino. - * - * This example was based upon uIP hello-world by Adam Dunkels - * Ported to the Arduino IDE by Adam Nielsen - * Adaption to Enc28J60 by Norbert Truchsess - */ - -#include -// The connection_data struct needs to be defined in an external file. -#include -#include - -EthernetServer server = EthernetServer(1000); - -void setup() -{ - Serial.begin(9600); - - uint8_t mac[6] = {0x00,0x01,0x02,0x03,0x04,0x05}; - IPAddress myIP(192,168,0,6); - - Ethernet.begin(mac,myIP); - - server.begin(); -} - -void loop() -{ - size_t size; - - if (EthernetClient client = server.available()) - { - if (client) - { - while((size = client.available()) > 0) - { - uint8_t* msg = (uint8_t*)malloc(size); - size = client.read(msg,size); - Serial.write(msg,size); - client.write(msg,size); - free(msg); - } - } - } -} diff --git a/libraries/UIPEthernet/examples/TcpClient/TcpClient.ino b/libraries/UIPEthernet/examples/TcpClient/TcpClient.ino deleted file mode 100644 index dca685c..0000000 --- a/libraries/UIPEthernet/examples/TcpClient/TcpClient.ino +++ /dev/null @@ -1,76 +0,0 @@ -/* - * UIPEthernet TcpClient example. - * - * UIPEthernet is a TCP/IP stack that can be used with a enc28j60 based - * Ethernet-shield. - * - * UIPEthernet uses the fine uIP stack by Adam Dunkels - * - * ----------------- - * - * This TcpClient example gets its local ip-address via dhcp and sets - * up a tcp socket-connection to 192.168.0.1 port 5000 every 5 Seconds. - * After sending a message it waits for a response. After receiving the - * response the client disconnects and tries to reconnect after 5 seconds. - * - * Copyright (C) 2013 by Norbert Truchsess - */ - -#include - -EthernetClient client; -signed long next; - -void setup() { - - Serial.begin(9600); - - uint8_t mac[6] = {0x00,0x01,0x02,0x03,0x04,0x05}; - Ethernet.begin(mac); - - Serial.print("localIP: "); - Serial.println(Ethernet.localIP()); - Serial.print("subnetMask: "); - Serial.println(Ethernet.subnetMask()); - Serial.print("gatewayIP: "); - Serial.println(Ethernet.gatewayIP()); - Serial.print("dnsServerIP: "); - Serial.println(Ethernet.dnsServerIP()); - - next = 0; -} - -void loop() { - - if (((signed long)(millis() - next)) > 0) - { - next = millis() + 5000; - Serial.println("Client connect"); - // replace hostname with name of machine running tcpserver.pl -// if (client.connect("server.local",5000)) - if (client.connect(IPAddress(192,168,0,1),5000)) - { - Serial.println("Client connected"); - client.println("DATA from Client"); - while(client.available()==0) - { - if (next - millis() < 0) - goto close; - } - int size; - while((size = client.available()) > 0) - { - uint8_t* msg = (uint8_t*)malloc(size); - size = client.read(msg,size); - Serial.write(msg,size); - free(msg); - } -close: - //disconnect client - Serial.println("Client disconnect"); - client.stop(); - } - else - Serial.println("Client connect failed"); - } -} diff --git a/libraries/UIPEthernet/examples/TcpServer/TcpServer.ino b/libraries/UIPEthernet/examples/TcpServer/TcpServer.ino deleted file mode 100644 index 10512ec..0000000 --- a/libraries/UIPEthernet/examples/TcpServer/TcpServer.ino +++ /dev/null @@ -1,53 +0,0 @@ -/* - * UIPEthernet EchoServer example. - * - * UIPEthernet is a TCP/IP stack that can be used with a enc28j60 based - * Ethernet-shield. - * - * UIPEthernet uses the fine uIP stack by Adam Dunkels - * - * ----------------- - * - * This Hello World example sets up a server at 192.168.1.6 on port 1000. - * Telnet here to access the service. The uIP stack will also respond to - * pings to test if you have successfully established a TCP connection to - * the Arduino. - * - * This example was based upon uIP hello-world by Adam Dunkels - * Ported to the Arduino IDE by Adam Nielsen - * Adaption to Enc28J60 by Norbert Truchsess - */ - -#include - -EthernetServer server = EthernetServer(1000); - -void setup() -{ - Serial.begin(9600); - - uint8_t mac[6] = {0x00,0x01,0x02,0x03,0x04,0x05}; - IPAddress myIP(192,168,0,6); - - Ethernet.begin(mac,myIP); - - server.begin(); -} - -void loop() -{ - size_t size; - - if (EthernetClient client = server.available()) - { - while((size = client.available()) > 0) - { - uint8_t* msg = (uint8_t*)malloc(size); - size = client.read(msg,size); - Serial.write(msg,size); - free(msg); - } - client.println("DATA from Server!"); - client.stop(); - } -} diff --git a/libraries/UIPEthernet/examples/UdpClient/UdpClient.ino b/libraries/UIPEthernet/examples/UdpClient/UdpClient.ino deleted file mode 100644 index aad56b4..0000000 --- a/libraries/UIPEthernet/examples/UdpClient/UdpClient.ino +++ /dev/null @@ -1,93 +0,0 @@ -/* - * UIPEthernet UdpClient example. - * - * UIPEthernet is a TCP/IP stack that can be used with a enc28j60 based - * Ethernet-shield. - * - * UIPEthernet uses the fine uIP stack by Adam Dunkels - * - * ----------------- - * - * This UdpClient example tries to send a packet via udp to 192.168.0.1 - * on port 5000 every 5 seconds. After successfully sending the packet it - * waits for up to 5 seconds for a response on the local port that has been - * implicitly opened when sending the packet. - * - * Copyright (C) 2013 by Norbert Truchsess (norbert.truchsess@t-online.de) - */ - -#include - -EthernetUDP udp; -unsigned long next; - -void setup() { - - Serial.begin(9600); - - uint8_t mac[6] = {0x00,0x01,0x02,0x03,0x04,0x05}; - - Ethernet.begin(mac,IPAddress(192,168,0,6)); - - next = millis()+5000; -} - -void loop() { - - int success; - int len = 0; - - if (((signed long)(millis()-next))>0) - { - do - { - success = udp.beginPacket(IPAddress(192,168,0,1),5000); - Serial.print("beginPacket: "); - Serial.println(success ? "success" : "failed"); - //beginPacket fails if remote ethaddr is unknown. In this case an - //arp-request is send out first and beginPacket succeeds as soon - //the arp-response is received. - } - while (!success && ((signed long)(millis()-next))<0); - if (!success ) - goto stop; - - success = udp.write("hello world from arduino"); - - Serial.print("bytes written: "); - Serial.println(success); - - success = udp.endPacket(); - - Serial.print("endPacket: "); - Serial.println(success ? "success" : "failed"); - - do - { - //check for new udp-packet: - success = udp.parsePacket(); - } - while (!success && ((signed long)(millis()-next))<0); - if (!success ) - goto stop; - - Serial.print("received: '"); - do - { - int c = udp.read(); - Serial.write(c); - len++; - } - while ((success = udp.available())>0); - Serial.print("', "); - Serial.print(len); - Serial.println(" bytes"); - - //finish reading this packet: - udp.flush(); - - stop: - udp.stop(); - next = millis()+5000; - } -} diff --git a/libraries/UIPEthernet/examples/UdpServer/UdpServer.ino b/libraries/UIPEthernet/examples/UdpServer/UdpServer.ino deleted file mode 100644 index 3b12d75..0000000 --- a/libraries/UIPEthernet/examples/UdpServer/UdpServer.ino +++ /dev/null @@ -1,88 +0,0 @@ -/* - * UIPEthernet UdpServer example. - * - * UIPEthernet is a TCP/IP stack that can be used with a enc28j60 based - * Ethernet-shield. - * - * UIPEthernet uses the fine uIP stack by Adam Dunkels - * - * ----------------- - * - * This UdpServer example sets up a udp-server at 192.168.0.6 on port 5000. - * send packet via upd to test - * - * Copyright (C) 2013 by Norbert Truchsess (norbert.truchsess@t-online.de) - */ - -#include - -EthernetUDP udp; - -void setup() { - - Serial.begin(9600); - - uint8_t mac[6] = {0x00,0x01,0x02,0x03,0x04,0x05}; - - Ethernet.begin(mac,IPAddress(192,168,0,6)); - - int success = udp.begin(5000); - - Serial.print("initialize: "); - Serial.println(success ? "success" : "failed"); - -} - -void loop() { - - //check for new udp-packet: - int size = udp.parsePacket(); - if (size > 0) { - do - { - char* msg = (char*)malloc(size+1); - int len = udp.read(msg,size+1); - msg[len]=0; - Serial.print("received: '"); - Serial.print(msg); - free(msg); - } - while ((size = udp.available())>0); - //finish reading this packet: - udp.flush(); - Serial.println("'"); - int success; - do - { - Serial.print("remote ip: "); - Serial.println(udp.remoteIP()); - Serial.print("remote port: "); - Serial.println(udp.remotePort()); - //send new packet back to ip/port of client. This also - //configures the current connection to ignore packets from - //other clients! - success = udp.beginPacket(udp.remoteIP(),udp.remotePort()); - Serial.print("beginPacket: "); - Serial.println(success ? "success" : "failed"); - //beginPacket fails if remote ethaddr is unknown. In this case an - //arp-request is send out first and beginPacket succeeds as soon - //the arp-response is received. - } - while (!success); - - success = udp.println("hello world from arduino"); - - Serial.print("bytes written: "); - Serial.println(success); - - success = udp.endPacket(); - - Serial.print("endPacket: "); - Serial.println(success ? "success" : "failed"); - - udp.stop(); - //restart with new connection to receive packets from other clients - Serial.print("restart connection: "); - Serial.println (udp.begin(5000) ? "success" : "failed"); - } -} diff --git a/libraries/UIPEthernet/keywords.txt b/libraries/UIPEthernet/keywords.txt deleted file mode 100644 index 83ff854..0000000 --- a/libraries/UIPEthernet/keywords.txt +++ /dev/null @@ -1,58 +0,0 @@ -####################################### -# Syntax Coloring Map for SerialIP -####################################### - -####################################### -# Datatypes (KEYWORD1) -####################################### - -UIPEthernet KEYWORD1 -UIPServer KEYWORD1 -UIPClient KEYWORD1 - -####################################### -# Methods and Functions (KEYWORD2) -####################################### -PSOCK_BEGIN KEYWORD2 -PSOCK_CLOSE KEYWORD2 -PSOCK_END KEYWORD2 -PSOCK_EXIT KEYWORD2 -PSOCK_INIT KEYWORD2 -PSOCK_READBUF KEYWORD2 -PSOCK_READTO KEYWORD2 -PSOCK_SEND KEYWORD2 -PSOCK_SEND_STR KEYWORD2 - -uip_listen KEYWORD2 -uip_unlisten KEYWORD2 -uip_connect KEYWORD2 -uip_outstanding KEYWORD2 -uip_send KEYWORD2 -uip_datalen KEYWORD2 -uip_close KEYWORD2 -uip_abort KEYWORD2 -uip_stop KEYWORD2 -uip_stopped KEYWORD2 -uip_restart KEYWORD2 -uip_acked KEYWORD2 -uip_connected KEYWORD2 -uip_closed KEYWORD2 -uip_aborted KEYWORD2 -uip_timedout KEYWORD2 -uip_rexmit KEYWORD2 -uip_poll KEYWORD2 -uip_initialmss KEYWORD2 -uip_mss KEYWORD2 -uip_ipaddr KEYWORD2 -uip_ipaddr_maskcmp KEYWORD2 -uip_ipaddr_mask KEYWORD2 -HTONS KEYWORD2 -htons KEYWORD2 - -use_device KEYWORD2 -set_uip_callback KEYWORD2 -set_gateway KEYWORD2 - -####################################### -# Constants (LITERAL1) -####################################### diff --git a/libraries/UIPEthernet/library.properties b/libraries/UIPEthernet/library.properties deleted file mode 100644 index 16488e6..0000000 --- a/libraries/UIPEthernet/library.properties +++ /dev/null @@ -1,11 +0,0 @@ -name=UIPEthernet -author=ntruchsess -email=Norbert Truchsess -sentence=Ethernet library for ENC28J60 -paragraph=implements the same API as stock Ethernet-lib. Just replace the include of Ethernet.h with UIPEthernet.h -url=https://github.com/ntruchsess/arduino_uip -category=Communication -architectures=avr -version=1.04 -dependencies= -core-dependencies=arduino (>=1.5.0) diff --git a/libraries/UIPEthernet/tests/perl/tcpclient.pl b/libraries/UIPEthernet/tests/perl/tcpclient.pl deleted file mode 100644 index e6884dc..0000000 --- a/libraries/UIPEthernet/tests/perl/tcpclient.pl +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/perl -#tcpclient.pl - -use IO::Socket::INET; - -# flush after every write -$| = 1; - -my ($socket,$client_socket); - -# creating object interface of IO::Socket::INET modules which internally creates -# socket, binds and connects to the TCP server running on the specific port. -$socket = new IO::Socket::INET ( -PeerHost => '192.168.0.6', -PeerPort => '1000', -Proto => 'tcp', -) or die "ERROR in Socket Creation : $!\n"; - -print "TCP Connection Success.\n"; - -# write on the socket to server. -$data = "DATA from Client"; -print $socket "$data\n"; -# we can also send the data through IO::Socket::INET module, -# $socket->send($data); - -# read the socket data sent by server. -$data = <$socket>; -# we can also read from socket through recv() in IO::Socket::INET -# $socket->recv($data,1024); -print "Received from Server : $data\n"; - -sleep (10); -$socket->close(); \ No newline at end of file diff --git a/libraries/UIPEthernet/tests/perl/tcpserver.pl b/libraries/UIPEthernet/tests/perl/tcpserver.pl deleted file mode 100644 index 17405a3..0000000 --- a/libraries/UIPEthernet/tests/perl/tcpserver.pl +++ /dev/null @@ -1,53 +0,0 @@ -#!/usr/bin/perl -#tcpserver.pl - -use IO::Socket::INET; - -# flush after every write -$| = 1; - -my ($socket,$client_socket); -my ($peeraddress,$peerport); - -# creating object interface of IO::Socket::INET modules which internally does -# socket creation, binding and listening at the specified port address. -$socket = new IO::Socket::INET ( -LocalHost => '192.168.0.1', -LocalPort => '5000', -Proto => 'tcp', -Listen => 5, -Reuse => 1 -) or die "ERROR in Socket Creation : $!\n"; - -print "SERVER Waiting for client connection on port 5000\n"; - -while(1) -{ - # waiting for new client connection. - $client_socket = $socket->accept(); - - # get the host and port number of newly connected client. - $peer_address = $client_socket->peerhost(); - $peer_port = $client_socket->peerport(); - - print "Accepted New Client Connection From : $peer_address, $peer_port\n "; - - # read operation on the newly accepted client - $data = <$client_socket>; - # we can also read from socket through recv() in IO::Socket::INET - # $client_socket->recv($data,1024); - print "Received from Client : $data\n"; - - # write operation on the newly accepted client. - $data = "DATA from Server"; - print $client_socket "$data\n"; - # we can also send the data through IO::Socket::INET module, - # $client_socket->send($data); - - sleep(1); - - $client_socket->close(); -} - -$socket->close(); - diff --git a/libraries/UIPEthernet/tests/perl/udpclient.pl b/libraries/UIPEthernet/tests/perl/udpclient.pl deleted file mode 100644 index bc9e6a2..0000000 --- a/libraries/UIPEthernet/tests/perl/udpclient.pl +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/perl -#udpclient.pl - -use IO::Socket::INET; - -# flush after every write -$| = 1; - -my ($socket,$data); - -# We call IO::Socket::INET->new() to create the UDP Socket -# and bind with the PeerAddr. -$socket = new IO::Socket::INET ( -PeerAddr => '192.168.0.6:5000', -Proto => 'udp' -) or die "ERROR in Socket Creation : $!\n"; -#send operation -$data = "data from client"; -$socket->send($data); - -#read operation -$data = <$socket>; -print "Data received from socket : $data\n "; - -sleep(10); -$socket->close(); diff --git a/libraries/UIPEthernet/tests/perl/udpserver.pl b/libraries/UIPEthernet/tests/perl/udpserver.pl deleted file mode 100644 index e728a46..0000000 --- a/libraries/UIPEthernet/tests/perl/udpserver.pl +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/perl -#udpserver.pl - -use IO::Socket::INET; - -# flush after every write -$| = 1; - -my ($socket,$received_data); -my ($peeraddress,$peerport); - -# we call IO::Socket::INET->new() to create the UDP Socket and bound -# to specific port number mentioned in LocalPort and there is no need to provide -# LocalAddr explicitly as in TCPServer. -$socket = new IO::Socket::INET ( -LocalPort => '5000', -Proto => 'udp', -) or die "ERROR in Socket Creation : $!\n"; - -while(1) -{ -# read operation on the socket -$socket->recv($recieved_data,1024); - -#get the peerhost and peerport at which the recent data received. -$peer_address = $socket->peerhost(); -$peer_port = $socket->peerport(); -print "($peer_address , $peer_port) said : $recieved_data\n"; - -#send the data to the client at which the read/write operations done recently. -$data = "data from server\n"; - -$socket->send($data); - -print $socket "$data"; - -} - -$socket->close(); - diff --git a/libraries/UIPEthernet/utility/Enc28J60Network.cpp b/libraries/UIPEthernet/utility/Enc28J60Network.cpp deleted file mode 100644 index c7c66fb..0000000 --- a/libraries/UIPEthernet/utility/Enc28J60Network.cpp +++ /dev/null @@ -1,612 +0,0 @@ -/* - Enc28J60NetworkClass.h - UIPEthernet network driver for Microchip ENC28J60 Ethernet Interface. - - Copyright (c) 2013 Norbert Truchsess - All rights reserved. - - based on enc28j60.c file from the AVRlib library by Pascal Stang. - For AVRlib See http://www.procyonengineering.com/ - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - */ - -#include "Enc28J60Network.h" -#include "Arduino.h" - -extern "C" { -#include -#include "enc28j60.h" -#include "uip.h" -} - -#ifdef ENC28J60DEBUG -#include "HardwareSerial.h" -#endif - -// set CS to 0 = active -#define CSACTIVE digitalWrite(ENC28J60_CONTROL_CS, LOW) -// set CS to 1 = passive -#define CSPASSIVE digitalWrite(ENC28J60_CONTROL_CS, HIGH) -// -#define waitspi() while(!(SPSR&(1< ip checksum for theses bytes=f7f9 - // in binary these poitions are:11 0000 0011 1111 - // This is hex 303F->EPMM0=0x3f,EPMM1=0x30 - //TODO define specific pattern to receive dhcp-broadcast packages instead of setting ERFCON_BCEN! - writeReg(ERXFCON, ERXFCON_UCEN|ERXFCON_CRCEN|ERXFCON_PMEN|ERXFCON_BCEN); - writeRegPair(EPMM0, 0x303f); - writeRegPair(EPMCSL, 0xf7f9); - // - // - // do bank 2 stuff - // enable MAC receive - // and bring MAC out of reset (writes 0x00 to MACON2) - writeRegPair(MACON1, MACON1_MARXEN|MACON1_TXPAUS|MACON1_RXPAUS); - // enable automatic padding to 60bytes and CRC operations - writeOp(ENC28J60_BIT_FIELD_SET, MACON3, MACON3_PADCFG0|MACON3_TXCRCEN|MACON3_FRMLNEN); - // set inter-frame gap (non-back-to-back) - writeRegPair(MAIPGL, 0x0C12); - // set inter-frame gap (back-to-back) - writeReg(MABBIPG, 0x12); - // Set the maximum packet size which the controller will accept - // Do not send packets longer than MAX_FRAMELEN: - writeRegPair(MAMXFLL, MAX_FRAMELEN); - // do bank 3 stuff - // write MAC address - // NOTE: MAC address in ENC28J60 is byte-backward - writeReg(MAADR5, macaddr[0]); - writeReg(MAADR4, macaddr[1]); - writeReg(MAADR3, macaddr[2]); - writeReg(MAADR2, macaddr[3]); - writeReg(MAADR1, macaddr[4]); - writeReg(MAADR0, macaddr[5]); - // no loopback of transmitted frames - phyWrite(PHCON2, PHCON2_HDLDIS); - // switch to bank 0 - setBank(ECON1); - // enable interrutps - writeOp(ENC28J60_BIT_FIELD_SET, EIE, EIE_INTIE|EIE_PKTIE); - // enable packet reception - writeOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_RXEN); - //Configure leds - phyWrite(PHLCON,0x476); -} - -memhandle -Enc28J60Network::receivePacket() -{ - uint8_t rxstat; - uint16_t len; - // check if a packet has been received and buffered - //if( !(readReg(EIR) & EIR_PKTIF) ){ - // The above does not work. See Rev. B4 Silicon Errata point 6. - if (readReg(EPKTCNT) != 0) - { - uint16_t readPtr = nextPacketPtr+6 > RXSTOP_INIT ? nextPacketPtr+6-RXSTOP_INIT+RXSTART_INIT : nextPacketPtr+6; - // Set the read pointer to the start of the received packet - writeRegPair(ERDPTL, nextPacketPtr); - // read the next packet pointer - nextPacketPtr = readOp(ENC28J60_READ_BUF_MEM, 0); - nextPacketPtr |= readOp(ENC28J60_READ_BUF_MEM, 0) << 8; - // read the packet length (see datasheet page 43) - len = readOp(ENC28J60_READ_BUF_MEM, 0); - len |= readOp(ENC28J60_READ_BUF_MEM, 0) << 8; - len -= 4; //remove the CRC count - // read the receive status (see datasheet page 43) - rxstat = readOp(ENC28J60_READ_BUF_MEM, 0); - //rxstat |= readOp(ENC28J60_READ_BUF_MEM, 0) << 8; -#ifdef ENC28J60DEBUG - Serial.print("receivePacket ["); - Serial.print(readPtr,HEX); - Serial.print("-"); - Serial.print((readPtr+len) % (RXSTOP_INIT+1),HEX); - Serial.print("], next: "); - Serial.print(nextPacketPtr,HEX); - Serial.print(", stat: "); - Serial.print(rxstat,HEX); - Serial.print(", count: "); - Serial.print(readReg(EPKTCNT)); - Serial.print(" -> "); - Serial.println((rxstat & 0x80)!=0 ? "OK" : "failed"); -#endif - // decrement the packet counter indicate we are done with this packet - writeOp(ENC28J60_BIT_FIELD_SET, ECON2, ECON2_PKTDEC); - // check CRC and symbol errors (see datasheet page 44, table 7-3): - // The ERXFCON.CRCEN is set by default. Normally we should not - // need to check this. - if ((rxstat & 0x80) != 0) - { - receivePkt.begin = readPtr; - receivePkt.size = len; - return UIP_RECEIVEBUFFERHANDLE; - } - // Move the RX read pointer to the start of the next received packet - // This frees the memory we just read out - setERXRDPT(); - } - return (NOBLOCK); -} - -void -Enc28J60Network::setERXRDPT() -{ - writeRegPair(ERXRDPTL, nextPacketPtr == RXSTART_INIT ? RXSTOP_INIT : nextPacketPtr-1); -} - -memaddress -Enc28J60Network::blockSize(memhandle handle) -{ - return handle == NOBLOCK ? 0 : handle == UIP_RECEIVEBUFFERHANDLE ? receivePkt.size : blocks[handle].size; -} - -void -Enc28J60Network::sendPacket(memhandle handle) -{ - memblock *packet = &blocks[handle]; - uint16_t start = packet->begin-1; - uint16_t end = start + packet->size; - - // backup data at control-byte position - uint8_t data = readByte(start); - // write control-byte (if not 0 anyway) - if (data) - writeByte(start, 0); - -#ifdef ENC28J60DEBUG - Serial.print("sendPacket("); - Serial.print(handle); - Serial.print(") ["); - Serial.print(start,HEX); - Serial.print("-"); - Serial.print(end,HEX); - Serial.print("]: "); - for (uint16_t i=start; i<=end; i++) - { - Serial.print(readByte(i),HEX); - Serial.print(" "); - } - Serial.println(); -#endif - - // TX start - writeRegPair(ETXSTL, start); - // Set the TXND pointer to correspond to the packet size given - writeRegPair(ETXNDL, end); - // send the contents of the transmit buffer onto the network - writeOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_TXRTS); - // Reset the transmit logic problem. See Rev. B4 Silicon Errata point 12. - if( (readReg(EIR) & EIR_TXERIF) ) - { - writeOp(ENC28J60_BIT_FIELD_CLR, ECON1, ECON1_TXRTS); - } - - //restore data on control-byte position - if (data) - writeByte(start, data); -} - -uint16_t -Enc28J60Network::setReadPtr(memhandle handle, memaddress position, uint16_t len) -{ - memblock *packet = handle == UIP_RECEIVEBUFFERHANDLE ? &receivePkt : &blocks[handle]; - memaddress start = handle == UIP_RECEIVEBUFFERHANDLE && packet->begin + position > RXSTOP_INIT ? packet->begin + position-RXSTOP_INIT+RXSTART_INIT : packet->begin + position; - - writeRegPair(ERDPTL, start); - - if (len > packet->size - position) - len = packet->size - position; - return len; -} - -uint16_t -Enc28J60Network::readPacket(memhandle handle, memaddress position, uint8_t* buffer, uint16_t len) -{ - len = setReadPtr(handle, position, len); - readBuffer(len, buffer); - return len; -} - -uint16_t -Enc28J60Network::writePacket(memhandle handle, memaddress position, uint8_t* buffer, uint16_t len) -{ - memblock *packet = &blocks[handle]; - uint16_t start = packet->begin + position; - - writeRegPair(EWRPTL, start); - - if (len > packet->size - position) - len = packet->size - position; - writeBuffer(len, buffer); - return len; -} - -uint8_t Enc28J60Network::readByte(uint16_t addr) -{ - writeRegPair(ERDPTL, addr); - - CSACTIVE; - // issue read command - SPDR = ENC28J60_READ_BUF_MEM; - waitspi(); - // read data - SPDR = 0x00; - waitspi(); - CSPASSIVE; - return (SPDR); -} - -void Enc28J60Network::writeByte(uint16_t addr, uint8_t data) -{ - writeRegPair(EWRPTL, addr); - - CSACTIVE; - // issue write command - SPDR = ENC28J60_WRITE_BUF_MEM; - waitspi(); - // write data - SPDR = data; - waitspi(); - CSPASSIVE; -} - -void -Enc28J60Network::copyPacket(memhandle dest_pkt, memaddress dest_pos, memhandle src_pkt, memaddress src_pos, uint16_t len) -{ - memblock *dest = &blocks[dest_pkt]; - memblock *src = src_pkt == UIP_RECEIVEBUFFERHANDLE ? &receivePkt : &blocks[src_pkt]; - memaddress start = src_pkt == UIP_RECEIVEBUFFERHANDLE && src->begin + src_pos > RXSTOP_INIT ? src->begin + src_pos-RXSTOP_INIT+RXSTART_INIT : src->begin + src_pos; - enc28J60_mempool_block_move_callback(dest->begin+dest_pos,start,len); - // Move the RX read pointer to the start of the next received packet - // This frees the memory we just read out - setERXRDPT(); -} - -void -enc28J60_mempool_block_move_callback(memaddress dest, memaddress src, memaddress len) -{ -//void -//Enc28J60Network::memblock_mv_cb(uint16_t dest, uint16_t src, uint16_t len) -//{ - //as ENC28J60 DMA is unable to copy single bytes: - if (len == 1) - { - Enc28J60Network::writeByte(dest,Enc28J60Network::readByte(src)); - } - else - { - // calculate address of last byte - len += src - 1; - - /* 1. Appropriately program the EDMAST, EDMAND - and EDMADST register pairs. The EDMAST - registers should point to the first byte to copy - from, the EDMAND registers should point to the - last byte to copy and the EDMADST registers - should point to the first byte in the destination - range. The destination range will always be - linear, never wrapping at any values except from - 8191 to 0 (the 8-Kbyte memory boundary). - Extreme care should be taken when - programming the start and end pointers to - prevent a never ending DMA operation which - would overwrite the entire 8-Kbyte buffer. - */ - Enc28J60Network::writeRegPair(EDMASTL, src); - Enc28J60Network::writeRegPair(EDMADSTL, dest); - - if ((src <= RXSTOP_INIT)&& (len > RXSTOP_INIT))len -= (RXSTOP_INIT-RXSTART_INIT); - Enc28J60Network::writeRegPair(EDMANDL, len); - - /* - 2. If an interrupt at the end of the copy process is - desired, set EIE.DMAIE and EIE.INTIE and - clear EIR.DMAIF. - - 3. Verify that ECON1.CSUMEN is clear. */ - Enc28J60Network::writeOp(ENC28J60_BIT_FIELD_CLR, ECON1, ECON1_CSUMEN); - - /* 4. Start the DMA copy by setting ECON1.DMAST. */ - Enc28J60Network::writeOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_DMAST); - - // wait until runnig DMA is completed - while (Enc28J60Network::readOp(ENC28J60_READ_CTRL_REG, ECON1) & ECON1_DMAST); - } -} - -void -Enc28J60Network::freePacket() -{ - setERXRDPT(); -} - -uint8_t -Enc28J60Network::readOp(uint8_t op, uint8_t address) -{ - CSACTIVE; - // issue read command - SPDR = op | (address & ADDR_MASK); - waitspi(); - // read data - SPDR = 0x00; - waitspi(); - // do dummy read if needed (for mac and mii, see datasheet page 29) - if(address & 0x80) - { - SPDR = 0x00; - waitspi(); - } - // release CS - CSPASSIVE; - return(SPDR); -} - -void -Enc28J60Network::writeOp(uint8_t op, uint8_t address, uint8_t data) -{ - CSACTIVE; - // issue write command - SPDR = op | (address & ADDR_MASK); - waitspi(); - // write data - SPDR = data; - waitspi(); - CSPASSIVE; -} - -void -Enc28J60Network::readBuffer(uint16_t len, uint8_t* data) -{ - CSACTIVE; - // issue read command - SPDR = ENC28J60_READ_BUF_MEM; - waitspi(); - while(len) - { - len--; - // read data - SPDR = 0x00; - waitspi(); - *data = SPDR; - data++; - } - //*data='\0'; - CSPASSIVE; -} - -void -Enc28J60Network::writeBuffer(uint16_t len, uint8_t* data) -{ - CSACTIVE; - // issue write command - SPDR = ENC28J60_WRITE_BUF_MEM; - waitspi(); - while(len) - { - len--; - // write data - SPDR = *data; - data++; - waitspi(); - } - CSPASSIVE; -} - -void -Enc28J60Network::setBank(uint8_t address) -{ - // set the bank (if needed) - if((address & BANK_MASK) != bank) - { - // set the bank - writeOp(ENC28J60_BIT_FIELD_CLR, ECON1, (ECON1_BSEL1|ECON1_BSEL0)); - writeOp(ENC28J60_BIT_FIELD_SET, ECON1, (address & BANK_MASK)>>5); - bank = (address & BANK_MASK); - } -} - -uint8_t -Enc28J60Network::readReg(uint8_t address) -{ - // set the bank - setBank(address); - // do the read - return readOp(ENC28J60_READ_CTRL_REG, address); -} - -void -Enc28J60Network::writeReg(uint8_t address, uint8_t data) -{ - // set the bank - setBank(address); - // do the write - writeOp(ENC28J60_WRITE_CTRL_REG, address, data); -} - -void -Enc28J60Network::writeRegPair(uint8_t address, uint16_t data) -{ - // set the bank - setBank(address); - // do the write - writeOp(ENC28J60_WRITE_CTRL_REG, address, (data&0xFF)); - writeOp(ENC28J60_WRITE_CTRL_REG, address+1, (data) >> 8); -} - -void -Enc28J60Network::phyWrite(uint8_t address, uint16_t data) -{ - // set the PHY register address - writeReg(MIREGADR, address); - // write the PHY data - writeRegPair(MIWRL, data); - // wait until the PHY write completes - while(readReg(MISTAT) & MISTAT_BUSY){ - delayMicroseconds(15); - } -} - -uint16_t -Enc28J60Network::phyRead(uint8_t address) -{ - writeReg(MIREGADR,address); - writeReg(MICMD, MICMD_MIIRD); - // wait until the PHY read completes - while(readReg(MISTAT) & MISTAT_BUSY){ - delayMicroseconds(15); - } //and MIRDH - writeReg(MICMD, 0); - return (readReg(MIRDL) | readReg(MIRDH) << 8); -} - -void -Enc28J60Network::clkout(uint8_t clk) -{ - //setup clkout: 2 is 12.5MHz: - writeReg(ECOCON, clk & 0x7); -} - -// read the revision of the chip: -uint8_t -Enc28J60Network::getrev(void) -{ - return(readReg(EREVID)); -} - -uint16_t -Enc28J60Network::chksum(uint16_t sum, memhandle handle, memaddress pos, uint16_t len) -{ - uint16_t t; - len = setReadPtr(handle, pos, len)-1; - CSACTIVE; - // issue read command - SPDR = ENC28J60_READ_BUF_MEM; - waitspi(); - uint16_t i; - for (i = 0; i < len; i+=2) - { - // read data - SPDR = 0x00; - waitspi(); - t = SPDR << 8; - SPDR = 0x00; - waitspi(); - t += SPDR; - sum += t; - if(sum < t) { - sum++; /* carry */ - } - } - if(i == len) { - SPDR = 0x00; - waitspi(); - t = (SPDR << 8) + 0; - sum += t; - if(sum < t) { - sum++; /* carry */ - } - } - CSPASSIVE; - - /* Return sum in host byte order. */ - return sum; -} - -void -Enc28J60Network::powerOff() -{ - writeOp(ENC28J60_BIT_FIELD_CLR, ECON1, ECON1_RXEN); - delay(50); - writeOp(ENC28J60_BIT_FIELD_SET, ECON2, ECON2_VRPS); - delay(50); - writeOp(ENC28J60_BIT_FIELD_SET, ECON2, ECON2_PWRSV); -} - -void -Enc28J60Network::powerOn() -{ - writeOp(ENC28J60_BIT_FIELD_CLR, ECON2, ECON2_PWRSV); - delay(50); - writeOp(ENC28J60_BIT_FIELD_SET, ECON1, ECON1_RXEN); - delay(50); -} - -bool -Enc28J60Network::linkStatus() -{ - return (phyRead(PHSTAT2) & 0x0400) > 0; -} - -Enc28J60Network Enc28J60; diff --git a/libraries/UIPEthernet/utility/Enc28J60Network.h b/libraries/UIPEthernet/utility/Enc28J60Network.h deleted file mode 100644 index 7346e47..0000000 --- a/libraries/UIPEthernet/utility/Enc28J60Network.h +++ /dev/null @@ -1,91 +0,0 @@ -/* - Enc28J60NetworkClass.h - UIPEthernet network driver for Microchip ENC28J60 Ethernet Interface. - - Copyright (c) 2013 Norbert Truchsess - All rights reserved. - - inspired by enc28j60.c file from the AVRlib library by Pascal Stang. - For AVRlib See http://www.procyonengineering.com/ - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - */ - -#ifndef Enc28J60Network_H_ -#define Enc28J60Network_H_ - -#include "mempool.h" - -#define ENC28J60_CONTROL_CS SS -#define SPI_MOSI MOSI -#define SPI_MISO MISO -#define SPI_SCK SCK -#define SPI_SS SS - -#define UIP_RECEIVEBUFFERHANDLE 0xff - -//#define ENC28J60DEBUG - -/* - * Empfangen von ip-header, arp etc... - * wenn tcp/udp -> tcp/udp-callback -> assign new packet to connection - */ - -class Enc28J60Network : public MemoryPool -{ - -private: - static uint16_t nextPacketPtr; - static uint8_t bank; - - static struct memblock receivePkt; - - static uint8_t readOp(uint8_t op, uint8_t address); - static void writeOp(uint8_t op, uint8_t address, uint8_t data); - static uint16_t setReadPtr(memhandle handle, memaddress position, uint16_t len); - static void setERXRDPT(); - static void readBuffer(uint16_t len, uint8_t* data); - static void writeBuffer(uint16_t len, uint8_t* data); - static uint8_t readByte(uint16_t addr); - static void writeByte(uint16_t addr, uint8_t data); - static void setBank(uint8_t address); - static uint8_t readReg(uint8_t address); - static void writeReg(uint8_t address, uint8_t data); - static void writeRegPair(uint8_t address, uint16_t data); - static void phyWrite(uint8_t address, uint16_t data); - static uint16_t phyRead(uint8_t address); - static void clkout(uint8_t clk); - - friend void enc28J60_mempool_block_move_callback(memaddress,memaddress,memaddress); - -public: - - uint8_t getrev(void); - void powerOn(); - void powerOff(); - bool linkStatus(); - - static void init(uint8_t* macaddr); - static memhandle receivePacket(); - static void freePacket(); - static memaddress blockSize(memhandle handle); - static void sendPacket(memhandle handle); - static uint16_t readPacket(memhandle handle, memaddress position, uint8_t* buffer, uint16_t len); - static uint16_t writePacket(memhandle handle, memaddress position, uint8_t* buffer, uint16_t len); - static void copyPacket(memhandle dest, memaddress dest_pos, memhandle src, memaddress src_pos, uint16_t len); - static uint16_t chksum(uint16_t sum, memhandle handle, memaddress pos, uint16_t len); -}; - -extern Enc28J60Network Enc28J60; -#endif /* Enc28J60NetworkClass_H_ */ diff --git a/libraries/UIPEthernet/utility/clock-arch.c b/libraries/UIPEthernet/utility/clock-arch.c deleted file mode 100644 index 13b886d..0000000 --- a/libraries/UIPEthernet/utility/clock-arch.c +++ /dev/null @@ -1,28 +0,0 @@ -/* - clock-arch.c - Arduino implementation of uIP clock device. - Copyright (c) 2010 Adam Nielsen - All rights reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include -#include "clock-arch.h" - -clock_time_t -clock_time(void) -{ - return (clock_time_t) millis(); -} diff --git a/libraries/UIPEthernet/utility/clock-arch.h b/libraries/UIPEthernet/utility/clock-arch.h deleted file mode 100644 index d7a828b..0000000 --- a/libraries/UIPEthernet/utility/clock-arch.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - clock-arch.h - Arduino implementation of uIP clock device. - Copyright (c) 2010 Adam Nielsen - All rights reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef clock_h_ -#define clock_h_ - -typedef unsigned long clock_time_t; -#define CLOCK_CONF_SECOND 1000 - -#endif diff --git a/libraries/UIPEthernet/utility/enc28j60.h b/libraries/UIPEthernet/utility/enc28j60.h deleted file mode 100644 index 3a45c59..0000000 --- a/libraries/UIPEthernet/utility/enc28j60.h +++ /dev/null @@ -1,257 +0,0 @@ -/***************************************************************************** -* -* Title : Microchip ENC28J60 Ethernet Interface Driver -* Author : Pascal Stang (c)2005 -* Modified by Norbert Truchsess -* Copyright: GPL V2 -* -*This driver provides initialization and transmit/receive -*functions for the Microchip ENC28J60 10Mb Ethernet Controller and PHY. -*This chip is novel in that it is a full MAC+PHY interface all in a 28-pin -*chip, using an SPI interface to the host processor. -* -* -*****************************************************************************/ - -#ifndef ENC28J60_H -#define ENC28J60_H -#include - -// ENC28J60 Control Registers -// Control register definitions are a combination of address, -// bank number, and Ethernet/MAC/PHY indicator bits. -// - Register address (bits 0-4) -// - Bank number (bits 5-6) -// - MAC/PHY indicator (bit 7) -#define ADDR_MASK 0x1F -#define BANK_MASK 0x60 -#define SPRD_MASK 0x80 -// All-bank registers -#define EIE 0x1B -#define EIR 0x1C -#define ESTAT 0x1D -#define ECON2 0x1E -#define ECON1 0x1F -// Bank 0 registers -#define ERDPTL (0x00|0x00) -#define ERDPTH (0x01|0x00) -#define EWRPTL (0x02|0x00) -#define EWRPTH (0x03|0x00) -#define ETXSTL (0x04|0x00) -#define ETXSTH (0x05|0x00) -#define ETXNDL (0x06|0x00) -#define ETXNDH (0x07|0x00) -#define ERXSTL (0x08|0x00) -#define ERXSTH (0x09|0x00) -#define ERXNDL (0x0A|0x00) -#define ERXNDH (0x0B|0x00) -#define ERXRDPTL (0x0C|0x00) -#define ERXRDPTH (0x0D|0x00) -#define ERXWRPTL (0x0E|0x00) -#define ERXWRPTH (0x0F|0x00) -#define EDMASTL (0x10|0x00) -#define EDMASTH (0x11|0x00) -#define EDMANDL (0x12|0x00) -#define EDMANDH (0x13|0x00) -#define EDMADSTL (0x14|0x00) -#define EDMADSTH (0x15|0x00) -#define EDMACSL (0x16|0x00) -#define EDMACSH (0x17|0x00) -// Bank 1 registers -#define EHT0 (0x00|0x20) -#define EHT1 (0x01|0x20) -#define EHT2 (0x02|0x20) -#define EHT3 (0x03|0x20) -#define EHT4 (0x04|0x20) -#define EHT5 (0x05|0x20) -#define EHT6 (0x06|0x20) -#define EHT7 (0x07|0x20) -#define EPMM0 (0x08|0x20) -#define EPMM1 (0x09|0x20) -#define EPMM2 (0x0A|0x20) -#define EPMM3 (0x0B|0x20) -#define EPMM4 (0x0C|0x20) -#define EPMM5 (0x0D|0x20) -#define EPMM6 (0x0E|0x20) -#define EPMM7 (0x0F|0x20) -#define EPMCSL (0x10|0x20) -#define EPMCSH (0x11|0x20) -#define EPMOL (0x14|0x20) -#define EPMOH (0x15|0x20) -#define EWOLIE (0x16|0x20) -#define EWOLIR (0x17|0x20) -#define ERXFCON (0x18|0x20) -#define EPKTCNT (0x19|0x20) -// Bank 2 registers -#define MACON1 (0x00|0x40|0x80) -#define MACON2 (0x01|0x40|0x80) -#define MACON3 (0x02|0x40|0x80) -#define MACON4 (0x03|0x40|0x80) -#define MABBIPG (0x04|0x40|0x80) -#define MAIPGL (0x06|0x40|0x80) -#define MAIPGH (0x07|0x40|0x80) -#define MACLCON1 (0x08|0x40|0x80) -#define MACLCON2 (0x09|0x40|0x80) -#define MAMXFLL (0x0A|0x40|0x80) -#define MAMXFLH (0x0B|0x40|0x80) -#define MAPHSUP (0x0D|0x40|0x80) -#define MICON (0x11|0x40|0x80) -#define MICMD (0x12|0x40|0x80) -#define MIREGADR (0x14|0x40|0x80) -#define MIWRL (0x16|0x40|0x80) -#define MIWRH (0x17|0x40|0x80) -#define MIRDL (0x18|0x40|0x80) -#define MIRDH (0x19|0x40|0x80) -// Bank 3 registers -#define MAADR1 (0x00|0x60|0x80) -#define MAADR0 (0x01|0x60|0x80) -#define MAADR3 (0x02|0x60|0x80) -#define MAADR2 (0x03|0x60|0x80) -#define MAADR5 (0x04|0x60|0x80) -#define MAADR4 (0x05|0x60|0x80) -#define EBSTSD (0x06|0x60) -#define EBSTCON (0x07|0x60) -#define EBSTCSL (0x08|0x60) -#define EBSTCSH (0x09|0x60) -#define MISTAT (0x0A|0x60|0x80) -#define EREVID (0x12|0x60) -#define ECOCON (0x15|0x60) -#define EFLOCON (0x17|0x60) -#define EPAUSL (0x18|0x60) -#define EPAUSH (0x19|0x60) -// PHY registers -#define PHCON1 0x00 -#define PHSTAT1 0x01 -#define PHHID1 0x02 -#define PHHID2 0x03 -#define PHCON2 0x10 -#define PHSTAT2 0x11 -#define PHIE 0x12 -#define PHIR 0x13 -#define PHLCON 0x14 - -// ENC28J60 ERXFCON Register Bit Definitions -#define ERXFCON_UCEN 0x80 -#define ERXFCON_ANDOR 0x40 -#define ERXFCON_CRCEN 0x20 -#define ERXFCON_PMEN 0x10 -#define ERXFCON_MPEN 0x08 -#define ERXFCON_HTEN 0x04 -#define ERXFCON_MCEN 0x02 -#define ERXFCON_BCEN 0x01 -// ENC28J60 EIE Register Bit Definitions -#define EIE_INTIE 0x80 -#define EIE_PKTIE 0x40 -#define EIE_DMAIE 0x20 -#define EIE_LINKIE 0x10 -#define EIE_TXIE 0x08 -#define EIE_WOLIE 0x04 -#define EIE_TXERIE 0x02 -#define EIE_RXERIE 0x01 -// ENC28J60 EIR Register Bit Definitions -#define EIR_PKTIF 0x40 -#define EIR_DMAIF 0x20 -#define EIR_LINKIF 0x10 -#define EIR_TXIF 0x08 -#define EIR_WOLIF 0x04 -#define EIR_TXERIF 0x02 -#define EIR_RXERIF 0x01 -// ENC28J60 ESTAT Register Bit Definitions -#define ESTAT_INT 0x80 -#define ESTAT_LATECOL 0x10 -#define ESTAT_RXBUSY 0x04 -#define ESTAT_TXABRT 0x02 -#define ESTAT_CLKRDY 0x01 -// ENC28J60 ECON2 Register Bit Definitions -#define ECON2_AUTOINC 0x80 -#define ECON2_PKTDEC 0x40 -#define ECON2_PWRSV 0x20 -#define ECON2_VRPS 0x08 -// ENC28J60 ECON1 Register Bit Definitions -#define ECON1_TXRST 0x80 -#define ECON1_RXRST 0x40 -#define ECON1_DMAST 0x20 -#define ECON1_CSUMEN 0x10 -#define ECON1_TXRTS 0x08 -#define ECON1_RXEN 0x04 -#define ECON1_BSEL1 0x02 -#define ECON1_BSEL0 0x01 -// ENC28J60 MACON1 Register Bit Definitions -#define MACON1_LOOPBK 0x10 -#define MACON1_TXPAUS 0x08 -#define MACON1_RXPAUS 0x04 -#define MACON1_PASSALL 0x02 -#define MACON1_MARXEN 0x01 -// ENC28J60 MACON2 Register Bit Definitions -#define MACON2_MARST 0x80 -#define MACON2_RNDRST 0x40 -#define MACON2_MARXRST 0x08 -#define MACON2_RFUNRST 0x04 -#define MACON2_MATXRST 0x02 -#define MACON2_TFUNRST 0x01 -// ENC28J60 MACON3 Register Bit Definitions -#define MACON3_PADCFG2 0x80 -#define MACON3_PADCFG1 0x40 -#define MACON3_PADCFG0 0x20 -#define MACON3_TXCRCEN 0x10 -#define MACON3_PHDRLEN 0x08 -#define MACON3_HFRMLEN 0x04 -#define MACON3_FRMLNEN 0x02 -#define MACON3_FULDPX 0x01 -// ENC28J60 MICMD Register Bit Definitions -#define MICMD_MIISCAN 0x02 -#define MICMD_MIIRD 0x01 -// ENC28J60 MISTAT Register Bit Definitions -#define MISTAT_NVALID 0x04 -#define MISTAT_SCAN 0x02 -#define MISTAT_BUSY 0x01 -// ENC28J60 PHY PHCON1 Register Bit Definitions -#define PHCON1_PRST 0x8000 -#define PHCON1_PLOOPBK 0x4000 -#define PHCON1_PPWRSV 0x0800 -#define PHCON1_PDPXMD 0x0100 -// ENC28J60 PHY PHSTAT1 Register Bit Definitions -#define PHSTAT1_PFDPX 0x1000 -#define PHSTAT1_PHDPX 0x0800 -#define PHSTAT1_LLSTAT 0x0004 -#define PHSTAT1_JBSTAT 0x0002 -// ENC28J60 PHY PHCON2 Register Bit Definitions -#define PHCON2_FRCLINK 0x4000 -#define PHCON2_TXDIS 0x2000 -#define PHCON2_JABBER 0x0400 -#define PHCON2_HDLDIS 0x0100 - -// ENC28J60 Packet Control Byte Bit Definitions -#define PKTCTRL_PHUGEEN 0x08 -#define PKTCTRL_PPADEN 0x04 -#define PKTCTRL_PCRCEN 0x02 -#define PKTCTRL_POVERRIDE 0x01 - -// SPI operation codes -#define ENC28J60_READ_CTRL_REG 0x00 -#define ENC28J60_READ_BUF_MEM 0x3A -#define ENC28J60_WRITE_CTRL_REG 0x40 -#define ENC28J60_WRITE_BUF_MEM 0x7A -#define ENC28J60_BIT_FIELD_SET 0x80 -#define ENC28J60_BIT_FIELD_CLR 0xA0 -#define ENC28J60_SOFT_RESET 0xFF - - -// The RXSTART_INIT should be zero. See Rev. B4 Silicon Errata -// buffer boundaries applied to internal 8K ram -// the entire available packet buffer space is allocated -// -// start with recbuf at 0/ -#define RXSTART_INIT 0x0 -// receive buffer end. make sure this is an odd value ( See Rev. B1,B4,B5,B7 Silicon Errata 'Memory (Ethernet Buffer)') -#define RXSTOP_INIT (0x1FFF-0x1800) -// start TX buffer RXSTOP_INIT+1 -#define TXSTART_INIT (RXSTOP_INIT+1) -// stp TX buffer at end of mem -#define TXSTOP_INIT 0x1FFF -// -// max frame length which the conroller will accept: -#define MAX_FRAMELEN 1500 // (note: maximum ethernet frame length would be 1518) -//#define MAX_FRAMELEN 600 - -#endif diff --git a/libraries/UIPEthernet/utility/mempool.cpp b/libraries/UIPEthernet/utility/mempool.cpp deleted file mode 100644 index c2f7abf..0000000 --- a/libraries/UIPEthernet/utility/mempool.cpp +++ /dev/null @@ -1,168 +0,0 @@ -/* - mempool.cpp - sleek implementation of a memory pool - Copyright (c) 2013 Norbert Truchsess - All rights reserved. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - */ - -#include "mempool.h" -#include - -#define POOLOFFSET 1 - -struct memblock MemoryPool::blocks[MEMPOOL_NUM_MEMBLOCKS+1]; - -void -MemoryPool::init() -{ - memset(&blocks[0], 0, sizeof(blocks)); - blocks[POOLSTART].begin = MEMPOOL_STARTADDRESS; - blocks[POOLSTART].size = 0; - blocks[POOLSTART].nextblock = NOBLOCK; -} - -memhandle -MemoryPool::allocBlock(memaddress size) -{ - memblock* best = NULL; - memhandle cur = POOLSTART; - memblock* block = &blocks[POOLSTART]; - memaddress bestsize = MEMPOOL_SIZE + 1; - - do - { - memhandle next = block->nextblock; - memaddress freesize = ( next == NOBLOCK ? blocks[POOLSTART].begin + MEMPOOL_SIZE : blocks[next].begin) - block->begin - block->size; - if (freesize == size) - { - best = &blocks[cur]; - goto found; - } - if (freesize > size && freesize < bestsize) - { - bestsize = freesize; - best = &blocks[cur]; - } - if (next == NOBLOCK) - { - if (best) - goto found; - else - goto collect; - } - block = &blocks[next]; - cur = next; - } - while (true); - - collect: - { - cur = POOLSTART; - block = &blocks[POOLSTART]; - memhandle next; - while ((next = block->nextblock) != NOBLOCK) - { - memaddress dest = block->begin + block->size; - memblock* nextblock = &blocks[next]; - memaddress* src = &nextblock->begin; - if (dest != *src) - { -#ifdef MEMPOOL_MEMBLOCK_MV - MEMPOOL_MEMBLOCK_MV(dest,*src,nextblock->size); -#endif - *src = dest; - } - block = nextblock; - } - if (blocks[POOLSTART].begin + MEMPOOL_SIZE - block->begin - block->size >= size) - best = block; - else - goto notfound; - } - - found: - { - block = &blocks[POOLOFFSET]; - for (cur = POOLOFFSET; cur < MEMPOOL_NUM_MEMBLOCKS + POOLOFFSET; cur++) - { - if (block->size) - { - block++; - continue; - } - memaddress address = best->begin + best->size; -#ifdef MEMBLOCK_ALLOC - MEMBLOCK_ALLOC(address,size); -#endif - block->begin = address; - block->size = size; - block->nextblock = best->nextblock; - best->nextblock = cur; - return cur; - } - } - - notfound: return NOBLOCK; -} - -void -MemoryPool::freeBlock(memhandle handle) -{ - if (handle == NOBLOCK) - return; - memblock *b = &blocks[POOLSTART]; - - do - { - memhandle next = b->nextblock; - if (next == handle) - { - memblock *f = &blocks[next]; -#ifdef MEMBLOCK_FREE - MEMBLOCK_FREE(f->begin,f->size); -#endif - b->nextblock = f->nextblock; - f->size = 0; - f->nextblock = NOBLOCK; - return; - } - if (next == NOBLOCK) - return; - b = &blocks[next]; - } - while (true); -} - -void -MemoryPool::resizeBlock(memhandle handle, memaddress position) -{ - memblock * block = &blocks[handle]; - block->begin += position; - block->size -= position; -} - -void -MemoryPool::resizeBlock(memhandle handle, memaddress position, memaddress size) -{ - memblock * block = &blocks[handle]; - block->begin += position; - block->size = size; -} - -memaddress -MemoryPool::blockSize(memhandle handle) -{ - return blocks[handle].size; -} diff --git a/libraries/UIPEthernet/utility/mempool.h b/libraries/UIPEthernet/utility/mempool.h deleted file mode 100644 index 2a1db21..0000000 --- a/libraries/UIPEthernet/utility/mempool.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - mempool.h - sleek implementation of a memory pool - Copyright (c) 2013 Norbert Truchsess - All rights reserved. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - */ - -#ifndef MEMPOOL_H -#define MEMPOOL_H - -#include - -#define POOLSTART 0 -#define NOBLOCK 0 - -#include "mempool_conf.h" - -struct memblock -{ - memaddress begin; - memaddress size; - memhandle nextblock; -}; - -class MemoryPool -{ -#ifdef MEMPOOLTEST_H - friend class MemoryPoolTest; -#endif - -protected: - static struct memblock blocks[MEMPOOL_NUM_MEMBLOCKS+1]; - -public: - static void init(); - static memhandle allocBlock(memaddress); - static void freeBlock(memhandle); - static void resizeBlock(memhandle handle, memaddress position); - static void resizeBlock(memhandle handle, memaddress position, memaddress size); - static memaddress blockSize(memhandle); -}; -#endif diff --git a/libraries/UIPEthernet/utility/mempool_conf.h b/libraries/UIPEthernet/utility/mempool_conf.h deleted file mode 100644 index 9615f92..0000000 --- a/libraries/UIPEthernet/utility/mempool_conf.h +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef MEMPOOLCONF_H -#define MEMPOOLCONF_H -#include "uipethernet-conf.h" -extern "C" { - #include "uipopt.h" - #include "enc28j60.h" -} -#include - -typedef uint16_t memaddress; -typedef uint8_t memhandle; - -#if UIP_SOCKET_NUMPACKETS and UIP_CONNS -#define NUM_TCP_MEMBLOCKS (UIP_SOCKET_NUMPACKETS*2)*UIP_CONNS -#else -#define NUM_TCP_MEMBLOCKS 0 -#endif - -#if UIP_UDP and UIP_UDP_CONNS -#define NUM_UDP_MEMBLOCKS 3*UIP_UDP_CONNS -#else -#define NUM_UDP_MEMBLOCKS 0 -#endif - -#define MEMPOOL_NUM_MEMBLOCKS (NUM_TCP_MEMBLOCKS+NUM_UDP_MEMBLOCKS) - -#define MEMPOOL_STARTADDRESS TXSTART_INIT+1 -#define MEMPOOL_SIZE TXSTOP_INIT-TXSTART_INIT - -void enc28J60_mempool_block_move_callback(memaddress,memaddress,memaddress); - -#define MEMPOOL_MEMBLOCK_MV(dest,src,size) enc28J60_mempool_block_move_callback(dest,src,size) - -#endif diff --git a/libraries/UIPEthernet/utility/uip-conf.h b/libraries/UIPEthernet/utility/uip-conf.h deleted file mode 100644 index 814aeb9..0000000 --- a/libraries/UIPEthernet/utility/uip-conf.h +++ /dev/null @@ -1,185 +0,0 @@ -/** - * UIPEthernet Project-specific configuration options - * Copyright (c) 2013 Norbert Truchsess - * @{ - * - * uIP has a number of configuration options that can be overridden - * for each project. These are kept in a project-specific uip-conf.h - * file and all configuration names have the prefix UIP_CONF. - */ - -/* - * Copyright (c) 2006, Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * This file is part of the uIP TCP/IP stack - * - */ - -#ifndef __UIP_CONF_H__ -#define __UIP_CONF_H__ - -#include -#include "uipethernet-conf.h" - -/** - * 8 bit datatype - * - * This typedef defines the 8-bit type used throughout uIP. - * - * \hideinitializer - */ -typedef uint8_t u8_t; - -/** - * 16 bit datatype - * - * This typedef defines the 16-bit type used throughout uIP. - * - * \hideinitializer - */ -typedef uint16_t u16_t; - -/** - * Statistics datatype - * - * This typedef defines the dataype used for keeping statistics in - * uIP. - * - * \hideinitializer - */ -typedef unsigned short uip_stats_t; - -/** - * Maximum number of TCP connections. - * (see uipethernet-conf.h) - * \hideinitializer - * - * #define UIP_CONF_MAX_CONNECTIONS 4 - */ - -/** - * Maximum number of listening TCP ports. - * - * \hideinitializer - */ -#define UIP_CONF_MAX_LISTENPORTS 4 - -/** - * uIP buffer size. - * - * \hideinitializer - */ -#define UIP_CONF_BUFFER_SIZE 98 -//#define UIP_CONF_BUFFER_SIZE 118 - -/** - * The TCP maximum segment size. - * - * This is should not be to set to more than - * UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN. - */ - -#define UIP_CONF_TCP_MSS 512 - -/** - * The size of the advertised receiver's window. - * - * Should be set low (i.e., to the size of the uip_buf buffer) is the - * application is slow to process incoming data, or high (32768 bytes) - * if the application processes data quickly. - * - * \hideinitializer - */ -#define UIP_CONF_RECEIVE_WINDOW 512 - -/** - * CPU byte order. - * - * \hideinitializer - */ -#define UIP_CONF_BYTE_ORDER LITTLE_ENDIAN - -/** - * Logging on or off - * - * \hideinitializer - */ -#define UIP_CONF_LOGGING 0 - -/** - * UDP support on or off - * (see uipethernet-conf.h) - * \hideinitializer - * - * #define UIP_CONF_UDP 1 - * - * #define UIP_CONF_UDP_CONNS 4 - */ - -/** - * UDP checksums on or off - * - * \hideinitializer - */ -#define UIP_CONF_UDP_CHECKSUMS 1 - -/** - * UDP Broadcast (receive) on or off - * (see uipethernet-conf.h) - * \hideinitializer - * #define UIP_CONF_BROADCAST 1 - */ - - -/** - * uIP statistics on or off - * - * \hideinitializer - */ -#define UIP_CONF_STATISTICS 0 - -// SLIP -//#define UIP_CONF_LLH_LEN 0 - -typedef void* uip_tcp_appstate_t; - -void uipclient_appcall(void); - -#define UIP_APPCALL uipclient_appcall - -typedef void* uip_udp_appstate_t; - -void uipudp_appcall(void); - -#define UIP_UDP_APPCALL uipudp_appcall - -#define CC_REGISTER_ARG register - -#define UIP_ARCH_CHKSUM 1 - -#endif /* __UIP_CONF_H__ */ diff --git a/libraries/UIPEthernet/utility/uip.c b/libraries/UIPEthernet/utility/uip.c deleted file mode 100644 index 84ea8c3..0000000 --- a/libraries/UIPEthernet/utility/uip.c +++ /dev/null @@ -1,1897 +0,0 @@ -#define DEBUG_PRINTF(...) /*printf(__VA_ARGS__)*/ - -/** - * \defgroup uip The uIP TCP/IP stack - * @{ - * - * uIP is an implementation of the TCP/IP protocol stack intended for - * small 8-bit and 16-bit microcontrollers. - * - * uIP provides the necessary protocols for Internet communication, - * with a very small code footprint and RAM requirements - the uIP - * code size is on the order of a few kilobytes and RAM usage is on - * the order of a few hundred bytes. - */ - -/** - * \file - * The uIP TCP/IP stack code. - * \author Adam Dunkels - */ - -/* - * Copyright (c) 2001-2003, Adam Dunkels. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This file is part of the uIP TCP/IP stack. - * - * $Id: uip.c,v 1.65 2006/06/11 21:46:39 adam Exp $ - * - */ - -/* - * uIP is a small implementation of the IP, UDP and TCP protocols (as - * well as some basic ICMP stuff). The implementation couples the IP, - * UDP, TCP and the application layers very tightly. To keep the size - * of the compiled code down, this code frequently uses the goto - * statement. While it would be possible to break the uip_process() - * function into many smaller functions, this would increase the code - * size because of the overhead of parameter passing and the fact that - * the optimier would not be as efficient. - * - * The principle is that we have a small buffer, called the uip_buf, - * in which the device driver puts an incoming packet. The TCP/IP - * stack parses the headers in the packet, and calls the - * application. If the remote host has sent data to the application, - * this data is present in the uip_buf and the application read the - * data from there. It is up to the application to put this data into - * a byte stream if needed. The application will not be fed with data - * that is out of sequence. - * - * If the application whishes to send data to the peer, it should put - * its data into the uip_buf. The uip_appdata pointer points to the - * first available byte. The TCP/IP stack will calculate the - * checksums, and fill in the necessary header fields and finally send - * the packet back to the peer. -*/ - -#include "uip.h" -#include "uipopt.h" -#include "uip_arch.h" - -#if UIP_CONF_IPV6 -#include "uip-neighbor.h" -#endif /* UIP_CONF_IPV6 */ - -#include - -/*---------------------------------------------------------------------------*/ -/* Variable definitions. */ - - -/* The IP address of this host. If it is defined to be fixed (by - setting UIP_FIXEDADDR to 1 in uipopt.h), the address is set - here. Otherwise, the address */ -#if UIP_FIXEDADDR > 0 -const uip_ipaddr_t uip_hostaddr = - {HTONS((UIP_IPADDR0 << 8) | UIP_IPADDR1), - HTONS((UIP_IPADDR2 << 8) | UIP_IPADDR3)}; -const uip_ipaddr_t uip_draddr = - {HTONS((UIP_DRIPADDR0 << 8) | UIP_DRIPADDR1), - HTONS((UIP_DRIPADDR2 << 8) | UIP_DRIPADDR3)}; -const uip_ipaddr_t uip_netmask = - {HTONS((UIP_NETMASK0 << 8) | UIP_NETMASK1), - HTONS((UIP_NETMASK2 << 8) | UIP_NETMASK3)}; -#else -uip_ipaddr_t uip_hostaddr, uip_draddr, uip_netmask; -#endif /* UIP_FIXEDADDR */ - -static const uip_ipaddr_t all_ones_addr = -#if UIP_CONF_IPV6 - {0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff}; -#else /* UIP_CONF_IPV6 */ - {0xffff,0xffff}; -#endif /* UIP_CONF_IPV6 */ -static const uip_ipaddr_t all_zeroes_addr = -#if UIP_CONF_IPV6 - {0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000}; -#else /* UIP_CONF_IPV6 */ - {0x0000,0x0000}; -#endif /* UIP_CONF_IPV6 */ - - -#if UIP_FIXEDETHADDR -const struct uip_eth_addr uip_ethaddr = {{UIP_ETHADDR0, - UIP_ETHADDR1, - UIP_ETHADDR2, - UIP_ETHADDR3, - UIP_ETHADDR4, - UIP_ETHADDR5}}; -#else -struct uip_eth_addr uip_ethaddr = {{0,0,0,0,0,0}}; -#endif - -#ifndef UIP_CONF_EXTERNAL_BUFFER -u8_t uip_buf[UIP_BUFSIZE + 2]; /* The packet buffer that contains - incoming packets. */ -#endif /* UIP_CONF_EXTERNAL_BUFFER */ - -void *uip_appdata; /* The uip_appdata pointer points to - application data. */ -void *uip_sappdata; /* The uip_appdata pointer points to - the application data which is to - be sent. */ -#if UIP_URGDATA > 0 -void *uip_urgdata; /* The uip_urgdata pointer points to - urgent data (out-of-band data), if - present. */ -u16_t uip_urglen, uip_surglen; -#endif /* UIP_URGDATA > 0 */ - -u16_t uip_len, uip_slen; - /* The uip_len is either 8 or 16 bits, - depending on the maximum packet - size. */ - -u8_t uip_flags; /* The uip_flags variable is used for - communication between the TCP/IP stack - and the application program. */ -struct uip_conn *uip_conn; /* uip_conn always points to the current - connection. */ - -struct uip_conn uip_conns[UIP_CONNS]; - /* The uip_conns array holds all TCP - connections. */ -u16_t uip_listenports[UIP_LISTENPORTS]; - /* The uip_listenports list all currently - listning ports. */ -#if UIP_UDP -struct uip_udp_conn *uip_udp_conn; -struct uip_udp_conn uip_udp_conns[UIP_UDP_CONNS]; -#endif /* UIP_UDP */ - -static u16_t ipid; /* Ths ipid variable is an increasing - number that is used for the IP ID - field. */ - -void uip_setipid(u16_t id) { ipid = id; } - -static u8_t iss[4]; /* The iss variable is used for the TCP - initial sequence number. */ - -#if UIP_ACTIVE_OPEN -static u16_t lastport; /* Keeps track of the last port used for - a new connection. */ -#endif /* UIP_ACTIVE_OPEN */ - -/* Temporary variables. */ -u8_t uip_acc32[4]; -static u8_t c, opt; -static u16_t tmp16; - -/* Structures and definitions. */ -#define TCP_FIN 0x01 -#define TCP_SYN 0x02 -#define TCP_RST 0x04 -#define TCP_PSH 0x08 -#define TCP_ACK 0x10 -#define TCP_URG 0x20 -#define TCP_CTL 0x3f - -#define TCP_OPT_END 0 /* End of TCP options list */ -#define TCP_OPT_NOOP 1 /* "No-operation" TCP option */ -#define TCP_OPT_MSS 2 /* Maximum segment size TCP option */ - -#define TCP_OPT_MSS_LEN 4 /* Length of TCP MSS option. */ - -#define ICMP_ECHO_REPLY 0 -#define ICMP_ECHO 8 - -#define ICMP6_ECHO_REPLY 129 -#define ICMP6_ECHO 128 -#define ICMP6_NEIGHBOR_SOLICITATION 135 -#define ICMP6_NEIGHBOR_ADVERTISEMENT 136 - -#define ICMP6_FLAG_S (1 << 6) - -#define ICMP6_OPTION_SOURCE_LINK_ADDRESS 1 -#define ICMP6_OPTION_TARGET_LINK_ADDRESS 2 - - -/* Macros. */ -#define BUF ((struct uip_tcpip_hdr *)&uip_buf[UIP_LLH_LEN]) -#define FBUF ((struct uip_tcpip_hdr *)&uip_reassbuf[0]) -#define ICMPBUF ((struct uip_icmpip_hdr *)&uip_buf[UIP_LLH_LEN]) -#define UDPBUF ((struct uip_udpip_hdr *)&uip_buf[UIP_LLH_LEN]) - - -#if UIP_STATISTICS == 1 -struct uip_stats uip_stat; -#define UIP_STAT(s) s -#else -#define UIP_STAT(s) -#endif /* UIP_STATISTICS == 1 */ - -#if UIP_LOGGING == 1 -#include -void uip_log(char *msg); -#define UIP_LOG(m) uip_log(m) -#else -#define UIP_LOG(m) -#endif /* UIP_LOGGING == 1 */ - -#if ! UIP_ARCH_ADD32 -void -uip_add32(u8_t *op32, u16_t op16) -{ - uip_acc32[3] = op32[3] + (op16 & 0xff); - uip_acc32[2] = op32[2] + (op16 >> 8); - uip_acc32[1] = op32[1]; - uip_acc32[0] = op32[0]; - - if(uip_acc32[2] < (op16 >> 8)) { - ++uip_acc32[1]; - if(uip_acc32[1] == 0) { - ++uip_acc32[0]; - } - } - - - if(uip_acc32[3] < (op16 & 0xff)) { - ++uip_acc32[2]; - if(uip_acc32[2] == 0) { - ++uip_acc32[1]; - if(uip_acc32[1] == 0) { - ++uip_acc32[0]; - } - } - } -} - -#endif /* UIP_ARCH_ADD32 */ - -#if ! UIP_ARCH_CHKSUM -/*---------------------------------------------------------------------------*/ -static u16_t -chksum(u16_t sum, const u8_t *data, u16_t len) -{ - u16_t t; - const u8_t *dataptr; - const u8_t *last_byte; - - dataptr = data; - last_byte = data + len - 1; - - while(dataptr < last_byte) { /* At least two more bytes */ - t = (dataptr[0] << 8) + dataptr[1]; - sum += t; - if(sum < t) { - sum++; /* carry */ - } - dataptr += 2; - } - - if(dataptr == last_byte) { - t = (dataptr[0] << 8) + 0; - sum += t; - if(sum < t) { - sum++; /* carry */ - } - } - - /* Return sum in host byte order. */ - return sum; -} -/*---------------------------------------------------------------------------*/ -u16_t -uip_chksum(u16_t *data, u16_t len) -{ - return htons(chksum(0, (u8_t *)data, len)); -} -/*---------------------------------------------------------------------------*/ -#ifndef UIP_ARCH_IPCHKSUM -u16_t -uip_ipchksum(void) -{ - u16_t sum; - - sum = chksum(0, &uip_buf[UIP_LLH_LEN], UIP_IPH_LEN); - DEBUG_PRINTF("uip_ipchksum: sum 0x%04x\n", sum); - return (sum == 0) ? 0xffff : htons(sum); -} -#endif -/*---------------------------------------------------------------------------*/ -static u16_t -upper_layer_chksum(u8_t proto) -{ - u16_t upper_layer_len; - u16_t sum; - -#if UIP_CONF_IPV6 - upper_layer_len = (((u16_t)(BUF->len[0]) << 8) + BUF->len[1]); -#else /* UIP_CONF_IPV6 */ - upper_layer_len = (((u16_t)(BUF->len[0]) << 8) + BUF->len[1]) - UIP_IPH_LEN; -#endif /* UIP_CONF_IPV6 */ - - /* First sum pseudoheader. */ - - /* IP protocol and length fields. This addition cannot carry. */ - sum = upper_layer_len + proto; - /* Sum IP source and destination addresses. */ - sum = chksum(sum, (u8_t *)&BUF->srcipaddr[0], 2 * sizeof(uip_ipaddr_t)); - - /* Sum TCP header and data. */ - sum = chksum(sum, &uip_buf[UIP_IPH_LEN + UIP_LLH_LEN], - upper_layer_len); - - return (sum == 0) ? 0xffff : htons(sum); -} -/*---------------------------------------------------------------------------*/ -#if UIP_CONF_IPV6 -u16_t -uip_icmp6chksum(void) -{ - return upper_layer_chksum(UIP_PROTO_ICMP6); - -} -#endif /* UIP_CONF_IPV6 */ -/*---------------------------------------------------------------------------*/ -u16_t -uip_tcpchksum(void) -{ - return upper_layer_chksum(UIP_PROTO_TCP); -} -/*---------------------------------------------------------------------------*/ -#if UIP_UDP_CHECKSUMS -u16_t -uip_udpchksum(void) -{ - return upper_layer_chksum(UIP_PROTO_UDP); -} -#endif /* UIP_UDP_CHECKSUMS */ -#endif /* UIP_ARCH_CHKSUM */ -/*---------------------------------------------------------------------------*/ -void -uip_init(void) -{ - for(c = 0; c < UIP_LISTENPORTS; ++c) { - uip_listenports[c] = 0; - } - for(c = 0; c < UIP_CONNS; ++c) { - uip_conns[c].tcpstateflags = UIP_CLOSED; - } -#if UIP_ACTIVE_OPEN - lastport = 1024; -#endif /* UIP_ACTIVE_OPEN */ - -#if UIP_UDP - for(c = 0; c < UIP_UDP_CONNS; ++c) { - uip_udp_conns[c].lport = 0; - } -#endif /* UIP_UDP */ - - - /* IPv4 initialization. */ -#if UIP_FIXEDADDR == 0 - /* uip_hostaddr[0] = uip_hostaddr[1] = 0;*/ -#endif /* UIP_FIXEDADDR */ - -} -/*---------------------------------------------------------------------------*/ -#if UIP_ACTIVE_OPEN -struct uip_conn * -uip_connect(uip_ipaddr_t *ripaddr, u16_t rport) -{ - register struct uip_conn *conn, *cconn; - - /* Find an unused local port. */ - again: - ++lastport; - - if(lastport >= 32000) { - lastport = 4096; - } - - /* Check if this port is already in use, and if so try to find - another one. */ - for(c = 0; c < UIP_CONNS; ++c) { - conn = &uip_conns[c]; - if(conn->tcpstateflags != UIP_CLOSED && - conn->lport == htons(lastport)) { - goto again; - } - } - - conn = 0; - for(c = 0; c < UIP_CONNS; ++c) { - cconn = &uip_conns[c]; - if(cconn->tcpstateflags == UIP_CLOSED) { - conn = cconn; - break; - } - if(cconn->tcpstateflags == UIP_TIME_WAIT) { - if(conn == 0 || - cconn->timer > conn->timer) { - conn = cconn; - } - } - } - - if(conn == 0) { - return 0; - } - - conn->tcpstateflags = UIP_SYN_SENT; - - conn->snd_nxt[0] = iss[0]; - conn->snd_nxt[1] = iss[1]; - conn->snd_nxt[2] = iss[2]; - conn->snd_nxt[3] = iss[3]; - - conn->initialmss = conn->mss = UIP_TCP_MSS; - - conn->len = 1; /* TCP length of the SYN is one. */ - conn->nrtx = 0; - conn->timer = 1; /* Send the SYN next time around. */ - conn->rto = UIP_RTO; - conn->sa = 0; - conn->sv = 16; /* Initial value of the RTT variance. */ - conn->lport = htons(lastport); - conn->rport = rport; - uip_ipaddr_copy(&conn->ripaddr, ripaddr); - - return conn; -} -#endif /* UIP_ACTIVE_OPEN */ -/*---------------------------------------------------------------------------*/ -#if UIP_UDP -struct uip_udp_conn * -uip_udp_new(uip_ipaddr_t *ripaddr, u16_t rport) -{ - register struct uip_udp_conn *conn; - - /* Find an unused local port. */ - again: - ++lastport; - - if(lastport >= 32000) { - lastport = 4096; - } - - for(c = 0; c < UIP_UDP_CONNS; ++c) { - if(uip_udp_conns[c].lport == htons(lastport)) { - goto again; - } - } - - - conn = 0; - for(c = 0; c < UIP_UDP_CONNS; ++c) { - if(uip_udp_conns[c].lport == 0) { - conn = &uip_udp_conns[c]; - break; - } - } - - if(conn == 0) { - return 0; - } - - conn->lport = HTONS(lastport); - conn->rport = rport; - if(ripaddr == NULL) { - memset(conn->ripaddr, 0, sizeof(uip_ipaddr_t)); - } else { - uip_ipaddr_copy(&conn->ripaddr, ripaddr); - } - conn->ttl = UIP_TTL; - - return conn; -} -#endif /* UIP_UDP */ -/*---------------------------------------------------------------------------*/ -void -uip_unlisten(u16_t port) -{ - for(c = 0; c < UIP_LISTENPORTS; ++c) { - if(uip_listenports[c] == port) { - uip_listenports[c] = 0; - return; - } - } -} -/*---------------------------------------------------------------------------*/ -void -uip_listen(u16_t port) -{ - for(c = 0; c < UIP_LISTENPORTS; ++c) { - if(uip_listenports[c] == 0) { - uip_listenports[c] = port; - return; - } - } -} -/*---------------------------------------------------------------------------*/ -/* XXX: IP fragment reassembly: not well-tested. */ - -#if UIP_REASSEMBLY && !UIP_CONF_IPV6 -#define UIP_REASS_BUFSIZE (UIP_BUFSIZE - UIP_LLH_LEN) -static u8_t uip_reassbuf[UIP_REASS_BUFSIZE]; -static u8_t uip_reassbitmap[UIP_REASS_BUFSIZE / (8 * 8)]; -static const u8_t bitmap_bits[8] = {0xff, 0x7f, 0x3f, 0x1f, - 0x0f, 0x07, 0x03, 0x01}; -static u16_t uip_reasslen; -static u8_t uip_reassflags; -#define UIP_REASS_FLAG_LASTFRAG 0x01 -static u8_t uip_reasstmr; - -#define IP_MF 0x20 - -static u8_t -uip_reass(void) -{ - u16_t offset, len; - u16_t i; - - /* If ip_reasstmr is zero, no packet is present in the buffer, so we - write the IP header of the fragment into the reassembly - buffer. The timer is updated with the maximum age. */ - if(uip_reasstmr == 0) { - memcpy(uip_reassbuf, &BUF->vhl, UIP_IPH_LEN); - uip_reasstmr = UIP_REASS_MAXAGE; - uip_reassflags = 0; - /* Clear the bitmap. */ - memset(uip_reassbitmap, 0, sizeof(uip_reassbitmap)); - } - - /* Check if the incoming fragment matches the one currently present - in the reasembly buffer. If so, we proceed with copying the - fragment into the buffer. */ - if(BUF->srcipaddr[0] == FBUF->srcipaddr[0] && - BUF->srcipaddr[1] == FBUF->srcipaddr[1] && - BUF->destipaddr[0] == FBUF->destipaddr[0] && - BUF->destipaddr[1] == FBUF->destipaddr[1] && - BUF->ipid[0] == FBUF->ipid[0] && - BUF->ipid[1] == FBUF->ipid[1]) { - - len = (BUF->len[0] << 8) + BUF->len[1] - (BUF->vhl & 0x0f) * 4; - offset = (((BUF->ipoffset[0] & 0x3f) << 8) + BUF->ipoffset[1]) * 8; - - /* If the offset or the offset + fragment length overflows the - reassembly buffer, we discard the entire packet. */ - if(offset > UIP_REASS_BUFSIZE || - offset + len > UIP_REASS_BUFSIZE) { - uip_reasstmr = 0; - goto nullreturn; - } - - /* Copy the fragment into the reassembly buffer, at the right - offset. */ - memcpy(&uip_reassbuf[UIP_IPH_LEN + offset], - (char *)BUF + (int)((BUF->vhl & 0x0f) * 4), - len); - - /* Update the bitmap. */ - if(offset / (8 * 8) == (offset + len) / (8 * 8)) { - /* If the two endpoints are in the same byte, we only update - that byte. */ - - uip_reassbitmap[offset / (8 * 8)] |= - bitmap_bits[(offset / 8 ) & 7] & - ~bitmap_bits[((offset + len) / 8 ) & 7]; - } else { - /* If the two endpoints are in different bytes, we update the - bytes in the endpoints and fill the stuff inbetween with - 0xff. */ - uip_reassbitmap[offset / (8 * 8)] |= - bitmap_bits[(offset / 8 ) & 7]; - for(i = 1 + offset / (8 * 8); i < (offset + len) / (8 * 8); ++i) { - uip_reassbitmap[i] = 0xff; - } - uip_reassbitmap[(offset + len) / (8 * 8)] |= - ~bitmap_bits[((offset + len) / 8 ) & 7]; - } - - /* If this fragment has the More Fragments flag set to zero, we - know that this is the last fragment, so we can calculate the - size of the entire packet. We also set the - IP_REASS_FLAG_LASTFRAG flag to indicate that we have received - the final fragment. */ - - if((BUF->ipoffset[0] & IP_MF) == 0) { - uip_reassflags |= UIP_REASS_FLAG_LASTFRAG; - uip_reasslen = offset + len; - } - - /* Finally, we check if we have a full packet in the buffer. We do - this by checking if we have the last fragment and if all bits - in the bitmap are set. */ - if(uip_reassflags & UIP_REASS_FLAG_LASTFRAG) { - /* Check all bytes up to and including all but the last byte in - the bitmap. */ - for(i = 0; i < uip_reasslen / (8 * 8) - 1; ++i) { - if(uip_reassbitmap[i] != 0xff) { - goto nullreturn; - } - } - /* Check the last byte in the bitmap. It should contain just the - right amount of bits. */ - if(uip_reassbitmap[uip_reasslen / (8 * 8)] != - (u8_t)~bitmap_bits[uip_reasslen / 8 & 7]) { - goto nullreturn; - } - - /* If we have come this far, we have a full packet in the - buffer, so we allocate a pbuf and copy the packet into it. We - also reset the timer. */ - uip_reasstmr = 0; - memcpy(BUF, FBUF, uip_reasslen); - - /* Pretend to be a "normal" (i.e., not fragmented) IP packet - from now on. */ - BUF->ipoffset[0] = BUF->ipoffset[1] = 0; - BUF->len[0] = uip_reasslen >> 8; - BUF->len[1] = uip_reasslen & 0xff; - BUF->ipchksum = 0; - BUF->ipchksum = ~(uip_ipchksum()); - - return uip_reasslen; - } - } - - nullreturn: - return 0; -} -#endif /* UIP_REASSEMBLY */ -/*---------------------------------------------------------------------------*/ -static void -uip_add_rcv_nxt(u16_t n) -{ - uip_add32(uip_conn->rcv_nxt, n); - uip_conn->rcv_nxt[0] = uip_acc32[0]; - uip_conn->rcv_nxt[1] = uip_acc32[1]; - uip_conn->rcv_nxt[2] = uip_acc32[2]; - uip_conn->rcv_nxt[3] = uip_acc32[3]; -} -/*---------------------------------------------------------------------------*/ -void -uip_process(u8_t flag) -{ - register struct uip_conn *uip_connr = uip_conn; - -#if UIP_UDP - if(flag == UIP_UDP_SEND_CONN) { - goto udp_send; - } -#endif /* UIP_UDP */ - - uip_sappdata = uip_appdata = &uip_buf[UIP_IPTCPH_LEN + UIP_LLH_LEN]; - - /* Check if we were invoked because of a poll request for a - particular connection. */ - if(flag == UIP_POLL_REQUEST) { - if((uip_connr->tcpstateflags & UIP_TS_MASK) == UIP_ESTABLISHED && - !uip_outstanding(uip_connr)) { - uip_flags = UIP_POLL; - UIP_APPCALL(); - goto appsend; - } - goto drop; - - /* Check if we were invoked because of the perodic timer fireing. */ - } else if(flag == UIP_TIMER) { -#if UIP_REASSEMBLY - if(uip_reasstmr != 0) { - --uip_reasstmr; - } -#endif /* UIP_REASSEMBLY */ - /* Increase the initial sequence number. */ - if(++iss[3] == 0) { - if(++iss[2] == 0) { - if(++iss[1] == 0) { - ++iss[0]; - } - } - } - - /* Reset the length variables. */ - uip_len = 0; - uip_slen = 0; - - /* Check if the connection is in a state in which we simply wait - for the connection to time out. If so, we increase the - connection's timer and remove the connection if it times - out. */ - if(uip_connr->tcpstateflags == UIP_TIME_WAIT || - uip_connr->tcpstateflags == UIP_FIN_WAIT_2) { - ++(uip_connr->timer); - if(uip_connr->timer == UIP_TIME_WAIT_TIMEOUT) { - uip_connr->tcpstateflags = UIP_CLOSED; - } - } else if(uip_connr->tcpstateflags != UIP_CLOSED) { - /* If the connection has outstanding data, we increase the - connection's timer and see if it has reached the RTO value - in which case we retransmit. */ - if(uip_outstanding(uip_connr)) { - if(uip_connr->timer-- == 0) { - if(uip_connr->nrtx == UIP_MAXRTX || - ((uip_connr->tcpstateflags == UIP_SYN_SENT || - uip_connr->tcpstateflags == UIP_SYN_RCVD) && - uip_connr->nrtx == UIP_MAXSYNRTX)) { - uip_connr->tcpstateflags = UIP_CLOSED; - - /* We call UIP_APPCALL() with uip_flags set to - UIP_TIMEDOUT to inform the application that the - connection has timed out. */ - uip_flags = UIP_TIMEDOUT; - UIP_APPCALL(); - - /* We also send a reset packet to the remote host. */ - BUF->flags = TCP_RST | TCP_ACK; - goto tcp_send_nodata; - } - - /* Exponential backoff. */ - uip_connr->timer = UIP_RTO << (uip_connr->nrtx > 4? - 4: - uip_connr->nrtx); - ++(uip_connr->nrtx); - - /* Ok, so we need to retransmit. We do this differently - depending on which state we are in. In ESTABLISHED, we - call upon the application so that it may prepare the - data for the retransmit. In SYN_RCVD, we resend the - SYNACK that we sent earlier and in LAST_ACK we have to - retransmit our FINACK. */ - UIP_STAT(++uip_stat.tcp.rexmit); - switch(uip_connr->tcpstateflags & UIP_TS_MASK) { - case UIP_SYN_RCVD: - /* In the SYN_RCVD state, we should retransmit our - SYNACK. */ - goto tcp_send_synack; - -#if UIP_ACTIVE_OPEN - case UIP_SYN_SENT: - /* In the SYN_SENT state, we retransmit out SYN. */ - BUF->flags = 0; - goto tcp_send_syn; -#endif /* UIP_ACTIVE_OPEN */ - - case UIP_ESTABLISHED: - /* In the ESTABLISHED state, we call upon the application - to do the actual retransmit after which we jump into - the code for sending out the packet (the apprexmit - label). */ - uip_flags = UIP_REXMIT; - UIP_APPCALL(); - goto apprexmit; - - case UIP_FIN_WAIT_1: - case UIP_CLOSING: - case UIP_LAST_ACK: - /* In all these states we should retransmit a FINACK. */ - goto tcp_send_finack; - - } - } - } else if((uip_connr->tcpstateflags & UIP_TS_MASK) == UIP_ESTABLISHED) { - /* If there was no need for a retransmission, we poll the - application for new data. */ - uip_flags = UIP_POLL; - UIP_APPCALL(); - goto appsend; - } - } - goto drop; - } -#if UIP_UDP - if(flag == UIP_UDP_TIMER) { - if(uip_udp_conn->lport != 0) { - uip_conn = NULL; - uip_sappdata = uip_appdata = &uip_buf[UIP_LLH_LEN + UIP_IPUDPH_LEN]; - uip_len = uip_slen = 0; - uip_flags = UIP_POLL; - UIP_UDP_APPCALL(); - goto udp_send; - } else { - goto drop; - } - } -#endif - - /* This is where the input processing starts. */ - UIP_STAT(++uip_stat.ip.recv); - - /* Start of IP input header processing code. */ - -#if UIP_CONF_IPV6 - /* Check validity of the IP header. */ - if((BUF->vtc & 0xf0) != 0x60) { /* IP version and header length. */ - UIP_STAT(++uip_stat.ip.drop); - UIP_STAT(++uip_stat.ip.vhlerr); - UIP_LOG("ipv6: invalid version."); - goto drop; - } -#else /* UIP_CONF_IPV6 */ - /* Check validity of the IP header. */ - if(BUF->vhl != 0x45) { /* IP version and header length. */ - UIP_STAT(++uip_stat.ip.drop); - UIP_STAT(++uip_stat.ip.vhlerr); - UIP_LOG("ip: invalid version or header length."); - goto drop; - } -#endif /* UIP_CONF_IPV6 */ - - /* Check the size of the packet. If the size reported to us in - uip_len is smaller the size reported in the IP header, we assume - that the packet has been corrupted in transit. If the size of - uip_len is larger than the size reported in the IP packet header, - the packet has been padded and we set uip_len to the correct - value.. */ - - if((BUF->len[0] << 8) + BUF->len[1] <= uip_len) { - uip_len = (BUF->len[0] << 8) + BUF->len[1]; -#if UIP_CONF_IPV6 - uip_len += 40; /* The length reported in the IPv6 header is the - length of the payload that follows the - header. However, uIP uses the uip_len variable - for holding the size of the entire packet, - including the IP header. For IPv4 this is not a - problem as the length field in the IPv4 header - contains the length of the entire packet. But - for IPv6 we need to add the size of the IPv6 - header (40 bytes). */ -#endif /* UIP_CONF_IPV6 */ - } else { - UIP_LOG("ip: packet shorter than reported in IP header."); - goto drop; - } - -#if !UIP_CONF_IPV6 - /* Check the fragment flag. */ - if((BUF->ipoffset[0] & 0x3f) != 0 || - BUF->ipoffset[1] != 0) { -#if UIP_REASSEMBLY - uip_len = uip_reass(); - if(uip_len == 0) { - goto drop; - } -#else /* UIP_REASSEMBLY */ - UIP_STAT(++uip_stat.ip.drop); - UIP_STAT(++uip_stat.ip.fragerr); - UIP_LOG("ip: fragment dropped."); - goto drop; -#endif /* UIP_REASSEMBLY */ - } -#endif /* UIP_CONF_IPV6 */ - - if(uip_ipaddr_cmp(uip_hostaddr, all_zeroes_addr)) { - /* If we are configured to use ping IP address configuration and - hasn't been assigned an IP address yet, we accept all ICMP - packets. */ -#if UIP_PINGADDRCONF && !UIP_CONF_IPV6 - if(BUF->proto == UIP_PROTO_ICMP) { - UIP_LOG("ip: possible ping config packet received."); - goto icmp_input; - } else { - UIP_LOG("ip: packet dropped since no address assigned."); - goto drop; - } -#endif /* UIP_PINGADDRCONF */ - - } else { - /* If IP broadcast support is configured, we check for a broadcast - UDP packet, which may be destined to us. */ -#if UIP_BROADCAST - DEBUG_PRINTF("UDP IP checksum 0x%04x\n", uip_ipchksum()); - if(BUF->proto == UIP_PROTO_UDP && - uip_ipaddr_cmp(BUF->destipaddr, all_ones_addr) - /*&& - uip_ipchksum() == 0xffff*/) { - goto udp_input; - } -#endif /* UIP_BROADCAST */ - - /* Check if the packet is destined for our IP address. */ -#if !UIP_CONF_IPV6 - if(!uip_ipaddr_cmp(BUF->destipaddr, uip_hostaddr)) { - UIP_STAT(++uip_stat.ip.drop); - goto drop; - } -#else /* UIP_CONF_IPV6 */ - /* For IPv6, packet reception is a little trickier as we need to - make sure that we listen to certain multicast addresses (all - hosts multicast address, and the solicited-node multicast - address) as well. However, we will cheat here and accept all - multicast packets that are sent to the ff02::/16 addresses. */ - if(!uip_ipaddr_cmp(BUF->destipaddr, uip_hostaddr) && - BUF->destipaddr[0] != HTONS(0xff02)) { - UIP_STAT(++uip_stat.ip.drop); - goto drop; - } -#endif /* UIP_CONF_IPV6 */ - } - -#if !UIP_CONF_IPV6 - if(uip_ipchksum() != 0xffff) { /* Compute and check the IP header - checksum. */ - UIP_STAT(++uip_stat.ip.drop); - UIP_STAT(++uip_stat.ip.chkerr); - UIP_LOG("ip: bad checksum."); - goto drop; - } -#endif /* UIP_CONF_IPV6 */ - - if(BUF->proto == UIP_PROTO_TCP) { /* Check for TCP packet. If so, - proceed with TCP input - processing. */ - goto tcp_input; - } - -#if UIP_UDP - if(BUF->proto == UIP_PROTO_UDP) { - goto udp_input; - } -#endif /* UIP_UDP */ - -#if !UIP_CONF_IPV6 - /* ICMPv4 processing code follows. */ - if(BUF->proto != UIP_PROTO_ICMP) { /* We only allow ICMP packets from - here. */ - UIP_STAT(++uip_stat.ip.drop); - UIP_STAT(++uip_stat.ip.protoerr); - UIP_LOG("ip: neither tcp nor icmp."); - goto drop; - } - -#if UIP_PINGADDRCONF - icmp_input: -#endif /* UIP_PINGADDRCONF */ - UIP_STAT(++uip_stat.icmp.recv); - - /* ICMP echo (i.e., ping) processing. This is simple, we only change - the ICMP type from ECHO to ECHO_REPLY and adjust the ICMP - checksum before we return the packet. */ - if(ICMPBUF->type != ICMP_ECHO) { - UIP_STAT(++uip_stat.icmp.drop); - UIP_STAT(++uip_stat.icmp.typeerr); - UIP_LOG("icmp: not icmp echo."); - goto drop; - } - - /* If we are configured to use ping IP address assignment, we use - the destination IP address of this ping packet and assign it to - ourself. */ -#if UIP_PINGADDRCONF - if((uip_hostaddr[0] | uip_hostaddr[1]) == 0) { - uip_hostaddr[0] = BUF->destipaddr[0]; - uip_hostaddr[1] = BUF->destipaddr[1]; - } -#endif /* UIP_PINGADDRCONF */ - - ICMPBUF->type = ICMP_ECHO_REPLY; - - if(ICMPBUF->icmpchksum >= HTONS(0xffff - (ICMP_ECHO << 8))) { - ICMPBUF->icmpchksum += HTONS(ICMP_ECHO << 8) + 1; - } else { - ICMPBUF->icmpchksum += HTONS(ICMP_ECHO << 8); - } - - /* Swap IP addresses. */ - uip_ipaddr_copy(BUF->destipaddr, BUF->srcipaddr); - uip_ipaddr_copy(BUF->srcipaddr, uip_hostaddr); - - UIP_STAT(++uip_stat.icmp.sent); - goto send; - - /* End of IPv4 input header processing code. */ -#else /* !UIP_CONF_IPV6 */ - - /* This is IPv6 ICMPv6 processing code. */ - DEBUG_PRINTF("icmp6_input: length %d\n", uip_len); - - if(BUF->proto != UIP_PROTO_ICMP6) { /* We only allow ICMPv6 packets from - here. */ - UIP_STAT(++uip_stat.ip.drop); - UIP_STAT(++uip_stat.ip.protoerr); - UIP_LOG("ip: neither tcp nor icmp6."); - goto drop; - } - - UIP_STAT(++uip_stat.icmp.recv); - - /* If we get a neighbor solicitation for our address we should send - a neighbor advertisement message back. */ - if(ICMPBUF->type == ICMP6_NEIGHBOR_SOLICITATION) { - if(uip_ipaddr_cmp(ICMPBUF->icmp6data, uip_hostaddr)) { - - if(ICMPBUF->options[0] == ICMP6_OPTION_SOURCE_LINK_ADDRESS) { - /* Save the sender's address in our neighbor list. */ - uip_neighbor_add(ICMPBUF->srcipaddr, &(ICMPBUF->options[2])); - } - - /* We should now send a neighbor advertisement back to where the - neighbor solicication came from. */ - ICMPBUF->type = ICMP6_NEIGHBOR_ADVERTISEMENT; - ICMPBUF->flags = ICMP6_FLAG_S; /* Solicited flag. */ - - ICMPBUF->reserved1 = ICMPBUF->reserved2 = ICMPBUF->reserved3 = 0; - - uip_ipaddr_copy(ICMPBUF->destipaddr, ICMPBUF->srcipaddr); - uip_ipaddr_copy(ICMPBUF->srcipaddr, uip_hostaddr); - ICMPBUF->options[0] = ICMP6_OPTION_TARGET_LINK_ADDRESS; - ICMPBUF->options[1] = 1; /* Options length, 1 = 8 bytes. */ - memcpy(&(ICMPBUF->options[2]), &uip_ethaddr, sizeof(uip_ethaddr)); - ICMPBUF->icmpchksum = 0; - ICMPBUF->icmpchksum = ~uip_icmp6chksum(); - goto send; - - } - goto drop; - } else if(ICMPBUF->type == ICMP6_ECHO) { - /* ICMP echo (i.e., ping) processing. This is simple, we only - change the ICMP type from ECHO to ECHO_REPLY and update the - ICMP checksum before we return the packet. */ - - ICMPBUF->type = ICMP6_ECHO_REPLY; - - uip_ipaddr_copy(BUF->destipaddr, BUF->srcipaddr); - uip_ipaddr_copy(BUF->srcipaddr, uip_hostaddr); - ICMPBUF->icmpchksum = 0; - ICMPBUF->icmpchksum = ~uip_icmp6chksum(); - - UIP_STAT(++uip_stat.icmp.sent); - goto send; - } else { - DEBUG_PRINTF("Unknown icmp6 message type %d\n", ICMPBUF->type); - UIP_STAT(++uip_stat.icmp.drop); - UIP_STAT(++uip_stat.icmp.typeerr); - UIP_LOG("icmp: unknown ICMP message."); - goto drop; - } - - /* End of IPv6 ICMP processing. */ - -#endif /* !UIP_CONF_IPV6 */ - -#if UIP_UDP - /* UDP input processing. */ - udp_input: - /* UDP processing is really just a hack. We don't do anything to the - UDP/IP headers, but let the UDP application do all the hard - work. If the application sets uip_slen, it has a packet to - send. */ -#if UIP_UDP_CHECKSUMS - uip_len = uip_len - UIP_IPUDPH_LEN; - uip_appdata = &uip_buf[UIP_LLH_LEN + UIP_IPUDPH_LEN]; - if(UDPBUF->udpchksum != 0 && uip_udpchksum() != 0xffff) { - UIP_STAT(++uip_stat.udp.drop); - UIP_STAT(++uip_stat.udp.chkerr); - UIP_LOG("udp: bad checksum."); - goto drop; - } -#else /* UIP_UDP_CHECKSUMS */ - uip_len = uip_len - UIP_IPUDPH_LEN; -#endif /* UIP_UDP_CHECKSUMS */ - - /* Demultiplex this UDP packet between the UDP "connections". */ - for(uip_udp_conn = &uip_udp_conns[0]; - uip_udp_conn < &uip_udp_conns[UIP_UDP_CONNS]; - ++uip_udp_conn) { - /* If the local UDP port is non-zero, the connection is considered - to be used. If so, the local port number is checked against the - destination port number in the received packet. If the two port - numbers match, the remote port number is checked if the - connection is bound to a remote port. Finally, if the - connection is bound to a remote IP address, the source IP - address of the packet is checked. */ - if(uip_udp_conn->lport != 0 && - UDPBUF->destport == uip_udp_conn->lport && - (uip_udp_conn->rport == 0 || - UDPBUF->srcport == uip_udp_conn->rport) && - (uip_ipaddr_cmp(uip_udp_conn->ripaddr, all_zeroes_addr) || - uip_ipaddr_cmp(uip_udp_conn->ripaddr, all_ones_addr) || - uip_ipaddr_cmp(BUF->srcipaddr, uip_udp_conn->ripaddr))) { - goto udp_found; - } - } - UIP_LOG("udp: no matching connection found"); - goto drop; - - udp_found: - uip_conn = NULL; - uip_flags = UIP_NEWDATA; - uip_sappdata = uip_appdata = &uip_buf[UIP_LLH_LEN + UIP_IPUDPH_LEN]; - uip_slen = 0; - UIP_UDP_APPCALL(); - udp_send: - if(uip_slen == 0) { - goto drop; - } - uip_len = uip_slen + UIP_IPUDPH_LEN; - -#if UIP_CONF_IPV6 - /* For IPv6, the IP length field does not include the IPv6 IP header - length. */ - BUF->len[0] = ((uip_len - UIP_IPH_LEN) >> 8); - BUF->len[1] = ((uip_len - UIP_IPH_LEN) & 0xff); -#else /* UIP_CONF_IPV6 */ - BUF->len[0] = (uip_len >> 8); - BUF->len[1] = (uip_len & 0xff); -#endif /* UIP_CONF_IPV6 */ - - BUF->ttl = uip_udp_conn->ttl; - BUF->proto = UIP_PROTO_UDP; - - UDPBUF->udplen = HTONS(uip_slen + UIP_UDPH_LEN); - UDPBUF->udpchksum = 0; - - BUF->srcport = uip_udp_conn->lport; - BUF->destport = uip_udp_conn->rport; - - uip_ipaddr_copy(BUF->srcipaddr, uip_hostaddr); - uip_ipaddr_copy(BUF->destipaddr, uip_udp_conn->ripaddr); - - uip_appdata = &uip_buf[UIP_LLH_LEN + UIP_IPTCPH_LEN]; - -#if UIP_UDP_CHECKSUMS - /* Calculate UDP checksum. */ - UDPBUF->udpchksum = ~(uip_udpchksum()); - if(UDPBUF->udpchksum == 0) { - UDPBUF->udpchksum = 0xffff; - } -#endif /* UIP_UDP_CHECKSUMS */ - - goto ip_send_nolen; -#endif /* UIP_UDP */ - - /* TCP input processing. */ - tcp_input: - UIP_STAT(++uip_stat.tcp.recv); - - /* Start of TCP input header processing code. */ - - if(uip_tcpchksum() != 0xffff) { /* Compute and check the TCP - checksum. */ - UIP_STAT(++uip_stat.tcp.drop); - UIP_STAT(++uip_stat.tcp.chkerr); - UIP_LOG("tcp: bad checksum."); - goto drop; - } - - - /* Demultiplex this segment. */ - /* First check any active connections. */ - for(uip_connr = &uip_conns[0]; uip_connr <= &uip_conns[UIP_CONNS - 1]; - ++uip_connr) { - if(uip_connr->tcpstateflags != UIP_CLOSED && - BUF->destport == uip_connr->lport && - BUF->srcport == uip_connr->rport && - uip_ipaddr_cmp(BUF->srcipaddr, uip_connr->ripaddr)) { - goto found; - } - } - - /* If we didn't find and active connection that expected the packet, - either this packet is an old duplicate, or this is a SYN packet - destined for a connection in LISTEN. If the SYN flag isn't set, - it is an old packet and we send a RST. */ - if((BUF->flags & TCP_CTL) != TCP_SYN) { - goto reset; - } - - tmp16 = BUF->destport; - /* Next, check listening connections. */ - for(c = 0; c < UIP_LISTENPORTS; ++c) { - if(tmp16 == uip_listenports[c]) - goto found_listen; - } - - /* No matching connection found, so we send a RST packet. */ - UIP_STAT(++uip_stat.tcp.synrst); - reset: - - /* We do not send resets in response to resets. */ - if(BUF->flags & TCP_RST) { - goto drop; - } - - UIP_STAT(++uip_stat.tcp.rst); - - BUF->flags = TCP_RST | TCP_ACK; - uip_len = UIP_IPTCPH_LEN; - BUF->tcpoffset = 5 << 4; - - /* Flip the seqno and ackno fields in the TCP header. */ - c = BUF->seqno[3]; - BUF->seqno[3] = BUF->ackno[3]; - BUF->ackno[3] = c; - - c = BUF->seqno[2]; - BUF->seqno[2] = BUF->ackno[2]; - BUF->ackno[2] = c; - - c = BUF->seqno[1]; - BUF->seqno[1] = BUF->ackno[1]; - BUF->ackno[1] = c; - - c = BUF->seqno[0]; - BUF->seqno[0] = BUF->ackno[0]; - BUF->ackno[0] = c; - - /* We also have to increase the sequence number we are - acknowledging. If the least significant byte overflowed, we need - to propagate the carry to the other bytes as well. */ - if(++BUF->ackno[3] == 0) { - if(++BUF->ackno[2] == 0) { - if(++BUF->ackno[1] == 0) { - ++BUF->ackno[0]; - } - } - } - - /* Swap port numbers. */ - tmp16 = BUF->srcport; - BUF->srcport = BUF->destport; - BUF->destport = tmp16; - - /* Swap IP addresses. */ - uip_ipaddr_copy(BUF->destipaddr, BUF->srcipaddr); - uip_ipaddr_copy(BUF->srcipaddr, uip_hostaddr); - - /* And send out the RST packet! */ - goto tcp_send_noconn; - - /* This label will be jumped to if we matched the incoming packet - with a connection in LISTEN. In that case, we should create a new - connection and send a SYNACK in return. */ - found_listen: - /* First we check if there are any connections avaliable. Unused - connections are kept in the same table as used connections, but - unused ones have the tcpstate set to CLOSED. Also, connections in - TIME_WAIT are kept track of and we'll use the oldest one if no - CLOSED connections are found. Thanks to Eddie C. Dost for a very - nice algorithm for the TIME_WAIT search. */ - uip_connr = 0; - for(c = 0; c < UIP_CONNS; ++c) { - if(uip_conns[c].tcpstateflags == UIP_CLOSED) { - uip_connr = &uip_conns[c]; - break; - } - if(uip_conns[c].tcpstateflags == UIP_TIME_WAIT) { - if(uip_connr == 0 || - uip_conns[c].timer > uip_connr->timer) { - uip_connr = &uip_conns[c]; - } - } - } - - if(uip_connr == 0) { - /* All connections are used already, we drop packet and hope that - the remote end will retransmit the packet at a time when we - have more spare connections. */ - UIP_STAT(++uip_stat.tcp.syndrop); - UIP_LOG("tcp: found no unused connections."); - goto drop; - } - uip_conn = uip_connr; - - /* Fill in the necessary fields for the new connection. */ - uip_connr->rto = uip_connr->timer = UIP_RTO; - uip_connr->sa = 0; - uip_connr->sv = 4; - uip_connr->nrtx = 0; - uip_connr->lport = BUF->destport; - uip_connr->rport = BUF->srcport; - uip_ipaddr_copy(uip_connr->ripaddr, BUF->srcipaddr); - uip_connr->tcpstateflags = UIP_SYN_RCVD; - - uip_connr->snd_nxt[0] = iss[0]; - uip_connr->snd_nxt[1] = iss[1]; - uip_connr->snd_nxt[2] = iss[2]; - uip_connr->snd_nxt[3] = iss[3]; - uip_connr->len = 1; - - /* rcv_nxt should be the seqno from the incoming packet + 1. */ - uip_connr->rcv_nxt[3] = BUF->seqno[3]; - uip_connr->rcv_nxt[2] = BUF->seqno[2]; - uip_connr->rcv_nxt[1] = BUF->seqno[1]; - uip_connr->rcv_nxt[0] = BUF->seqno[0]; - uip_add_rcv_nxt(1); - - /* Parse the TCP MSS option, if present. */ - if((BUF->tcpoffset & 0xf0) > 0x50) { - for(c = 0; c < ((BUF->tcpoffset >> 4) - 5) << 2 ;) { - opt = uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + c]; - if(opt == TCP_OPT_END) { - /* End of options. */ - break; - } else if(opt == TCP_OPT_NOOP) { - ++c; - /* NOP option. */ - } else if(opt == TCP_OPT_MSS && - uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c] == TCP_OPT_MSS_LEN) { - /* An MSS option with the right option length. */ - tmp16 = ((u16_t)uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 2 + c] << 8) | - (u16_t)uip_buf[UIP_IPTCPH_LEN + UIP_LLH_LEN + 3 + c]; - uip_connr->initialmss = uip_connr->mss = - tmp16 > UIP_TCP_MSS? UIP_TCP_MSS: tmp16; - - /* And we are done processing options. */ - break; - } else { - /* All other options have a length field, so that we easily - can skip past them. */ - if(uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c] == 0) { - /* If the length field is zero, the options are malformed - and we don't process them further. */ - break; - } - c += uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c]; - } - } - } - - /* Our response will be a SYNACK. */ -#if UIP_ACTIVE_OPEN - tcp_send_synack: - BUF->flags = TCP_ACK; - - tcp_send_syn: - BUF->flags |= TCP_SYN; -#else /* UIP_ACTIVE_OPEN */ - tcp_send_synack: - BUF->flags = TCP_SYN | TCP_ACK; -#endif /* UIP_ACTIVE_OPEN */ - - /* We send out the TCP Maximum Segment Size option with our - SYNACK. */ - BUF->optdata[0] = TCP_OPT_MSS; - BUF->optdata[1] = TCP_OPT_MSS_LEN; - BUF->optdata[2] = (UIP_TCP_MSS) / 256; - BUF->optdata[3] = (UIP_TCP_MSS) & 255; - uip_len = UIP_IPTCPH_LEN + TCP_OPT_MSS_LEN; - BUF->tcpoffset = ((UIP_TCPH_LEN + TCP_OPT_MSS_LEN) / 4) << 4; - goto tcp_send; - - /* This label will be jumped to if we found an active connection. */ - found: - uip_conn = uip_connr; - uip_flags = 0; - /* We do a very naive form of TCP reset processing; we just accept - any RST and kill our connection. We should in fact check if the - sequence number of this reset is wihtin our advertised window - before we accept the reset. */ - if(BUF->flags & TCP_RST) { - uip_connr->tcpstateflags = UIP_CLOSED; - UIP_LOG("tcp: got reset, aborting connection."); - uip_flags = UIP_ABORT; - UIP_APPCALL(); - goto drop; - } - /* Calculated the length of the data, if the application has sent - any data to us. */ - c = (BUF->tcpoffset >> 4) << 2; - /* uip_len will contain the length of the actual TCP data. This is - calculated by subtracing the length of the TCP header (in - c) and the length of the IP header (20 bytes). */ - uip_len = uip_len - c - UIP_IPH_LEN; - - /* First, check if the sequence number of the incoming packet is - what we're expecting next. If not, we send out an ACK with the - correct numbers in. */ - if(!(((uip_connr->tcpstateflags & UIP_TS_MASK) == UIP_SYN_SENT) && - ((BUF->flags & TCP_CTL) == (TCP_SYN | TCP_ACK)))) { - if((uip_len > 0 || ((BUF->flags & (TCP_SYN | TCP_FIN)) != 0)) && - (BUF->seqno[0] != uip_connr->rcv_nxt[0] || - BUF->seqno[1] != uip_connr->rcv_nxt[1] || - BUF->seqno[2] != uip_connr->rcv_nxt[2] || - BUF->seqno[3] != uip_connr->rcv_nxt[3])) { - goto tcp_send_ack; - } - } - - /* Next, check if the incoming segment acknowledges any outstanding - data. If so, we update the sequence number, reset the length of - the outstanding data, calculate RTT estimations, and reset the - retransmission timer. */ - if((BUF->flags & TCP_ACK) && uip_outstanding(uip_connr)) { - uip_add32(uip_connr->snd_nxt, uip_connr->len); - - if(BUF->ackno[0] == uip_acc32[0] && - BUF->ackno[1] == uip_acc32[1] && - BUF->ackno[2] == uip_acc32[2] && - BUF->ackno[3] == uip_acc32[3]) { - /* Update sequence number. */ - uip_connr->snd_nxt[0] = uip_acc32[0]; - uip_connr->snd_nxt[1] = uip_acc32[1]; - uip_connr->snd_nxt[2] = uip_acc32[2]; - uip_connr->snd_nxt[3] = uip_acc32[3]; - - - /* Do RTT estimation, unless we have done retransmissions. */ - if(uip_connr->nrtx == 0) { - signed char m; - m = uip_connr->rto - uip_connr->timer; - /* This is taken directly from VJs original code in his paper */ - m = m - (uip_connr->sa >> 3); - uip_connr->sa += m; - if(m < 0) { - m = -m; - } - m = m - (uip_connr->sv >> 2); - uip_connr->sv += m; - uip_connr->rto = (uip_connr->sa >> 3) + uip_connr->sv; - - } - /* Set the acknowledged flag. */ - uip_flags = UIP_ACKDATA; - /* Reset the retransmission timer. */ - uip_connr->timer = uip_connr->rto; - - /* Reset length of outstanding data. */ - uip_connr->len = 0; - } - - } - - /* Do different things depending on in what state the connection is. */ - switch(uip_connr->tcpstateflags & UIP_TS_MASK) { - /* CLOSED and LISTEN are not handled here. CLOSE_WAIT is not - implemented, since we force the application to close when the - peer sends a FIN (hence the application goes directly from - ESTABLISHED to LAST_ACK). */ - case UIP_SYN_RCVD: - /* In SYN_RCVD we have sent out a SYNACK in response to a SYN, and - we are waiting for an ACK that acknowledges the data we sent - out the last time. Therefore, we want to have the UIP_ACKDATA - flag set. If so, we enter the ESTABLISHED state. */ - if(uip_flags & UIP_ACKDATA) { - uip_connr->tcpstateflags = UIP_ESTABLISHED; - uip_flags = UIP_CONNECTED; - uip_connr->len = 0; - if(uip_len > 0) { - uip_flags |= UIP_NEWDATA; - uip_add_rcv_nxt(uip_len); - } - uip_slen = 0; - UIP_APPCALL(); - goto appsend; - } - goto drop; -#if UIP_ACTIVE_OPEN - case UIP_SYN_SENT: - /* In SYN_SENT, we wait for a SYNACK that is sent in response to - our SYN. The rcv_nxt is set to sequence number in the SYNACK - plus one, and we send an ACK. We move into the ESTABLISHED - state. */ - if((uip_flags & UIP_ACKDATA) && - (BUF->flags & TCP_CTL) == (TCP_SYN | TCP_ACK)) { - - /* Parse the TCP MSS option, if present. */ - if((BUF->tcpoffset & 0xf0) > 0x50) { - for(c = 0; c < ((BUF->tcpoffset >> 4) - 5) << 2 ;) { - opt = uip_buf[UIP_IPTCPH_LEN + UIP_LLH_LEN + c]; - if(opt == TCP_OPT_END) { - /* End of options. */ - break; - } else if(opt == TCP_OPT_NOOP) { - ++c; - /* NOP option. */ - } else if(opt == TCP_OPT_MSS && - uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c] == TCP_OPT_MSS_LEN) { - /* An MSS option with the right option length. */ - tmp16 = (uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 2 + c] << 8) | - uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 3 + c]; - uip_connr->initialmss = - uip_connr->mss = tmp16 > UIP_TCP_MSS? UIP_TCP_MSS: tmp16; - - /* And we are done processing options. */ - break; - } else { - /* All other options have a length field, so that we easily - can skip past them. */ - if(uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c] == 0) { - /* If the length field is zero, the options are malformed - and we don't process them further. */ - break; - } - c += uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN + 1 + c]; - } - } - } - uip_connr->tcpstateflags = UIP_ESTABLISHED; - uip_connr->rcv_nxt[0] = BUF->seqno[0]; - uip_connr->rcv_nxt[1] = BUF->seqno[1]; - uip_connr->rcv_nxt[2] = BUF->seqno[2]; - uip_connr->rcv_nxt[3] = BUF->seqno[3]; - uip_add_rcv_nxt(1); - uip_flags = UIP_CONNECTED | UIP_NEWDATA; - uip_connr->len = 0; - uip_len = 0; - uip_slen = 0; - UIP_APPCALL(); - goto appsend; - } - /* Inform the application that the connection failed */ - uip_flags = UIP_ABORT; - UIP_APPCALL(); - /* The connection is closed after we send the RST */ - uip_conn->tcpstateflags = UIP_CLOSED; - goto reset; -#endif /* UIP_ACTIVE_OPEN */ - - case UIP_ESTABLISHED: - /* In the ESTABLISHED state, we call upon the application to feed - data into the uip_buf. If the UIP_ACKDATA flag is set, the - application should put new data into the buffer, otherwise we are - retransmitting an old segment, and the application should put that - data into the buffer. - - If the incoming packet is a FIN, we should close the connection on - this side as well, and we send out a FIN and enter the LAST_ACK - state. We require that there is no outstanding data; otherwise the - sequence numbers will be screwed up. */ - - if(BUF->flags & TCP_FIN && !(uip_connr->tcpstateflags & UIP_STOPPED)) { - if(uip_outstanding(uip_connr)) { - goto drop; - } - uip_add_rcv_nxt(1 + uip_len); - uip_flags |= UIP_CLOSE; - if(uip_len > 0) { - uip_flags |= UIP_NEWDATA; - } - UIP_APPCALL(); - uip_connr->len = 1; - uip_connr->tcpstateflags = UIP_LAST_ACK; - uip_connr->nrtx = 0; - tcp_send_finack: - BUF->flags = TCP_FIN | TCP_ACK; - goto tcp_send_nodata; - } - - /* Check the URG flag. If this is set, the segment carries urgent - data that we must pass to the application. */ - if((BUF->flags & TCP_URG) != 0) { -#if UIP_URGDATA > 0 - uip_urglen = (BUF->urgp[0] << 8) | BUF->urgp[1]; - if(uip_urglen > uip_len) { - /* There is more urgent data in the next segment to come. */ - uip_urglen = uip_len; - } - uip_add_rcv_nxt(uip_urglen); - uip_len -= uip_urglen; - uip_urgdata = uip_appdata; - uip_appdata += uip_urglen; - } else { - uip_urglen = 0; -#else /* UIP_URGDATA > 0 */ - uip_appdata = ((char *)uip_appdata) + ((BUF->urgp[0] << 8) | BUF->urgp[1]); - uip_len -= (BUF->urgp[0] << 8) | BUF->urgp[1]; -#endif /* UIP_URGDATA > 0 */ - } - - /* If uip_len > 0 we have TCP data in the packet, and we flag this - by setting the UIP_NEWDATA flag and update the sequence number - we acknowledge. If the application has stopped the dataflow - using uip_stop(), we must not accept any data packets from the - remote host. */ - if(uip_len > 0 && !(uip_connr->tcpstateflags & UIP_STOPPED)) { - uip_flags |= UIP_NEWDATA; - uip_add_rcv_nxt(uip_len); - } - - /* Check if the available buffer space advertised by the other end - is smaller than the initial MSS for this connection. If so, we - set the current MSS to the window size to ensure that the - application does not send more data than the other end can - handle. - - If the remote host advertises a zero window, we set the MSS to - the initial MSS so that the application will send an entire MSS - of data. This data will not be acknowledged by the receiver, - and the application will retransmit it. This is called the - "persistent timer" and uses the retransmission mechanim. - */ - tmp16 = ((u16_t)BUF->wnd[0] << 8) + (u16_t)BUF->wnd[1]; - if(tmp16 > uip_connr->initialmss || - tmp16 == 0) { - tmp16 = uip_connr->initialmss; - } - uip_connr->mss = tmp16; - - /* If this packet constitutes an ACK for outstanding data (flagged - by the UIP_ACKDATA flag, we should call the application since it - might want to send more data. If the incoming packet had data - from the peer (as flagged by the UIP_NEWDATA flag), the - application must also be notified. - - When the application is called, the global variable uip_len - contains the length of the incoming data. The application can - access the incoming data through the global pointer - uip_appdata, which usually points UIP_IPTCPH_LEN + UIP_LLH_LEN - bytes into the uip_buf array. - - If the application wishes to send any data, this data should be - put into the uip_appdata and the length of the data should be - put into uip_len. If the application don't have any data to - send, uip_len must be set to 0. */ - if(uip_flags & (UIP_NEWDATA | UIP_ACKDATA)) { - uip_slen = 0; - UIP_APPCALL(); - - appsend: - - if(uip_flags & UIP_ABORT) { - uip_slen = 0; - uip_connr->tcpstateflags = UIP_CLOSED; - BUF->flags = TCP_RST | TCP_ACK; - goto tcp_send_nodata; - } - - if(uip_flags & UIP_CLOSE) { - uip_slen = 0; - uip_connr->len = 1; - uip_connr->tcpstateflags = UIP_FIN_WAIT_1; - uip_connr->nrtx = 0; - BUF->flags = TCP_FIN | TCP_ACK; - goto tcp_send_nodata; - } - - /* If uip_slen > 0, the application has data to be sent. */ - if(uip_slen > 0) { - - /* If the connection has acknowledged data, the contents of - the ->len variable should be discarded. */ - if((uip_flags & UIP_ACKDATA) != 0) { - uip_connr->len = 0; - } - - /* If the ->len variable is non-zero the connection has - already data in transit and cannot send anymore right - now. */ - if(uip_connr->len == 0) { - - /* The application cannot send more than what is allowed by - the mss (the minumum of the MSS and the available - window). */ - if(uip_slen > uip_connr->mss) { - uip_slen = uip_connr->mss; - } - - /* Remember how much data we send out now so that we know - when everything has been acknowledged. */ - uip_connr->len = uip_slen; - } else { - - /* If the application already had unacknowledged data, we - make sure that the application does not send (i.e., - retransmit) out more than it previously sent out. */ - uip_slen = uip_connr->len; - } - } - uip_connr->nrtx = 0; - apprexmit: - uip_appdata = uip_sappdata; - - /* If the application has data to be sent, or if the incoming - packet had new data in it, we must send out a packet. */ - if(uip_slen > 0 && uip_connr->len > 0) { - /* Add the length of the IP and TCP headers. */ - uip_len = uip_connr->len + UIP_TCPIP_HLEN; - /* We always set the ACK flag in response packets. */ - BUF->flags = TCP_ACK | TCP_PSH; - /* Send the packet. */ - goto tcp_send_noopts; - } - /* If there is no data to send, just send out a pure ACK if - there is newdata. */ - if(uip_flags & UIP_NEWDATA) { - uip_len = UIP_TCPIP_HLEN; - BUF->flags = TCP_ACK; - goto tcp_send_noopts; - } - } - goto drop; - case UIP_LAST_ACK: - /* We can close this connection if the peer has acknowledged our - FIN. This is indicated by the UIP_ACKDATA flag. */ - if(uip_flags & UIP_ACKDATA) { - uip_connr->tcpstateflags = UIP_CLOSED; - uip_flags = UIP_CLOSE; - UIP_APPCALL(); - } - break; - - case UIP_FIN_WAIT_1: - /* The application has closed the connection, but the remote host - hasn't closed its end yet. Thus we do nothing but wait for a - FIN from the other side. */ - if(uip_len > 0) { - uip_add_rcv_nxt(uip_len); - } - if(BUF->flags & TCP_FIN) { - if(uip_flags & UIP_ACKDATA) { - uip_connr->tcpstateflags = UIP_TIME_WAIT; - uip_connr->timer = 0; - uip_connr->len = 0; - } else { - uip_connr->tcpstateflags = UIP_CLOSING; - } - uip_add_rcv_nxt(1); - uip_flags = UIP_CLOSE; - UIP_APPCALL(); - goto tcp_send_ack; - } else if(uip_flags & UIP_ACKDATA) { - uip_connr->tcpstateflags = UIP_FIN_WAIT_2; - uip_connr->len = 0; - goto drop; - } - if(uip_len > 0) { - goto tcp_send_ack; - } - goto drop; - - case UIP_FIN_WAIT_2: - if(uip_len > 0) { - uip_add_rcv_nxt(uip_len); - } - if(BUF->flags & TCP_FIN) { - uip_connr->tcpstateflags = UIP_TIME_WAIT; - uip_connr->timer = 0; - uip_add_rcv_nxt(1); - uip_flags = UIP_CLOSE; - UIP_APPCALL(); - goto tcp_send_ack; - } - if(uip_len > 0) { - goto tcp_send_ack; - } - goto drop; - - case UIP_TIME_WAIT: - goto tcp_send_ack; - - case UIP_CLOSING: - if(uip_flags & UIP_ACKDATA) { - uip_connr->tcpstateflags = UIP_TIME_WAIT; - uip_connr->timer = 0; - } - } - goto drop; - - - /* We jump here when we are ready to send the packet, and just want - to set the appropriate TCP sequence numbers in the TCP header. */ - tcp_send_ack: - BUF->flags = TCP_ACK; - tcp_send_nodata: - uip_len = UIP_IPTCPH_LEN; - tcp_send_noopts: - BUF->tcpoffset = (UIP_TCPH_LEN / 4) << 4; - tcp_send: - /* We're done with the input processing. We are now ready to send a - reply. Our job is to fill in all the fields of the TCP and IP - headers before calculating the checksum and finally send the - packet. */ - BUF->ackno[0] = uip_connr->rcv_nxt[0]; - BUF->ackno[1] = uip_connr->rcv_nxt[1]; - BUF->ackno[2] = uip_connr->rcv_nxt[2]; - BUF->ackno[3] = uip_connr->rcv_nxt[3]; - - BUF->seqno[0] = uip_connr->snd_nxt[0]; - BUF->seqno[1] = uip_connr->snd_nxt[1]; - BUF->seqno[2] = uip_connr->snd_nxt[2]; - BUF->seqno[3] = uip_connr->snd_nxt[3]; - - BUF->proto = UIP_PROTO_TCP; - - BUF->srcport = uip_connr->lport; - BUF->destport = uip_connr->rport; - - uip_ipaddr_copy(BUF->srcipaddr, uip_hostaddr); - uip_ipaddr_copy(BUF->destipaddr, uip_connr->ripaddr); - - if(uip_connr->tcpstateflags & UIP_STOPPED) { - /* If the connection has issued uip_stop(), we advertise a zero - window so that the remote host will stop sending data. */ - BUF->wnd[0] = BUF->wnd[1] = 0; - } else { - BUF->wnd[0] = ((UIP_RECEIVE_WINDOW) >> 8); - BUF->wnd[1] = ((UIP_RECEIVE_WINDOW) & 0xff); - } - - tcp_send_noconn: - BUF->ttl = UIP_TTL; -#if UIP_CONF_IPV6 - /* For IPv6, the IP length field does not include the IPv6 IP header - length. */ - BUF->len[0] = ((uip_len - UIP_IPH_LEN) >> 8); - BUF->len[1] = ((uip_len - UIP_IPH_LEN) & 0xff); -#else /* UIP_CONF_IPV6 */ - BUF->len[0] = (uip_len >> 8); - BUF->len[1] = (uip_len & 0xff); -#endif /* UIP_CONF_IPV6 */ - - BUF->urgp[0] = BUF->urgp[1] = 0; - - /* Calculate TCP checksum. */ - BUF->tcpchksum = 0; - BUF->tcpchksum = ~(uip_tcpchksum()); - - ip_send_nolen: - -#if UIP_CONF_IPV6 - BUF->vtc = 0x60; - BUF->tcflow = 0x00; - BUF->flow = 0x00; -#else /* UIP_CONF_IPV6 */ - BUF->vhl = 0x45; - BUF->tos = 0; - BUF->ipoffset[0] = BUF->ipoffset[1] = 0; - ++ipid; - BUF->ipid[0] = ipid >> 8; - BUF->ipid[1] = ipid & 0xff; - /* Calculate IP checksum. */ - BUF->ipchksum = 0; - BUF->ipchksum = ~(uip_ipchksum()); - DEBUG_PRINTF("uip ip_send_nolen: chkecum 0x%04x\n", uip_ipchksum()); -#endif /* UIP_CONF_IPV6 */ - - UIP_STAT(++uip_stat.tcp.sent); - send: - DEBUG_PRINTF("Sending packet with length %d (%d)\n", uip_len, - (BUF->len[0] << 8) | BUF->len[1]); - - UIP_STAT(++uip_stat.ip.sent); - /* Return and let the caller do the actual transmission. */ - uip_flags = 0; - return; - drop: - uip_len = 0; - uip_flags = 0; - return; -} -/*---------------------------------------------------------------------------*/ -u16_t -htons(u16_t val) -{ - return HTONS(val); -} -/*---------------------------------------------------------------------------*/ -void -uip_send(const void *data, int len) -{ - uip_slen = len; - if(len > 0) { - if(data != uip_sappdata) { - memcpy(uip_sappdata, (data), uip_slen); - } - } -} -/** @} */ diff --git a/libraries/UIPEthernet/utility/uip.h b/libraries/UIPEthernet/utility/uip.h deleted file mode 100644 index 4fc0452..0000000 --- a/libraries/UIPEthernet/utility/uip.h +++ /dev/null @@ -1,1601 +0,0 @@ - -/** - * \addtogroup uip - * @{ - */ - -/** - * \file - * Header file for the uIP TCP/IP stack. - * \author Adam Dunkels - * - * The uIP TCP/IP stack header file contains definitions for a number - * of C macros that are used by uIP programs as well as internal uIP - * structures, TCP/IP header structures and function declarations. - * - */ - - -/* - * Copyright (c) 2001-2003, Adam Dunkels. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This file is part of the uIP TCP/IP stack. - * - * $Id: uip.h,v 1.40 2006/06/08 07:12:07 adam Exp $ - * - */ - -#ifndef __UIP_H__ -#define __UIP_H__ - -#include "uipopt.h" - -/** - * Repressentation of an IP address. - * - */ -typedef u16_t uip_ip4addr_t[2]; -typedef u16_t uip_ip6addr_t[8]; -#if UIP_CONF_IPV6 -typedef uip_ip6addr_t uip_ipaddr_t; -#else /* UIP_CONF_IPV6 */ -typedef uip_ip4addr_t uip_ipaddr_t; -#endif /* UIP_CONF_IPV6 */ - -/*---------------------------------------------------------------------------*/ -/* First, the functions that should be called from the - * system. Initialization, the periodic timer and incoming packets are - * handled by the following three functions. - */ - -/** - * \defgroup uipconffunc uIP configuration functions - * @{ - * - * The uIP configuration functions are used for setting run-time - * parameters in uIP such as IP addresses. - */ - -/** - * Set the IP address of this host. - * - * The IP address is represented as a 4-byte array where the first - * octet of the IP address is put in the first member of the 4-byte - * array. - * - * Example: - \code - - uip_ipaddr_t addr; - - uip_ipaddr(&addr, 192,168,1,2); - uip_sethostaddr(&addr); - - \endcode - * \param addr A pointer to an IP address of type uip_ipaddr_t; - * - * \sa uip_ipaddr() - * - * \hideinitializer - */ -#define uip_sethostaddr(addr) uip_ipaddr_copy(uip_hostaddr, (addr)) - -/** - * Get the IP address of this host. - * - * The IP address is represented as a 4-byte array where the first - * octet of the IP address is put in the first member of the 4-byte - * array. - * - * Example: - \code - uip_ipaddr_t hostaddr; - - uip_gethostaddr(&hostaddr); - \endcode - * \param addr A pointer to a uip_ipaddr_t variable that will be - * filled in with the currently configured IP address. - * - * \hideinitializer - */ -#define uip_gethostaddr(addr) uip_ipaddr_copy((addr), uip_hostaddr) - -/** - * Set the default router's IP address. - * - * \param addr A pointer to a uip_ipaddr_t variable containing the IP - * address of the default router. - * - * \sa uip_ipaddr() - * - * \hideinitializer - */ -#define uip_setdraddr(addr) uip_ipaddr_copy(uip_draddr, (addr)) - -/** - * Set the netmask. - * - * \param addr A pointer to a uip_ipaddr_t variable containing the IP - * address of the netmask. - * - * \sa uip_ipaddr() - * - * \hideinitializer - */ -#define uip_setnetmask(addr) uip_ipaddr_copy(uip_netmask, (addr)) - - -/** - * Get the default router's IP address. - * - * \param addr A pointer to a uip_ipaddr_t variable that will be - * filled in with the IP address of the default router. - * - * \hideinitializer - */ -#define uip_getdraddr(addr) uip_ipaddr_copy((addr), uip_draddr) - -/** - * Get the netmask. - * - * \param addr A pointer to a uip_ipaddr_t variable that will be - * filled in with the value of the netmask. - * - * \hideinitializer - */ -#define uip_getnetmask(addr) uip_ipaddr_copy((addr), uip_netmask) - -/** @} */ - -/** - * \defgroup uipinit uIP initialization functions - * @{ - * - * The uIP initialization functions are used for booting uIP. - */ - -/** - * uIP initialization function. - * - * This function should be called at boot up to initilize the uIP - * TCP/IP stack. - */ -void uip_init(void); - -/** - * uIP initialization function. - * - * This function may be used at boot time to set the initial ip_id. - */ -void uip_setipid(u16_t id); - -/** @} */ - -/** - * \defgroup uipdevfunc uIP device driver functions - * @{ - * - * These functions are used by a network device driver for interacting - * with uIP. - */ - -/** - * Process an incoming packet. - * - * This function should be called when the device driver has received - * a packet from the network. The packet from the device driver must - * be present in the uip_buf buffer, and the length of the packet - * should be placed in the uip_len variable. - * - * When the function returns, there may be an outbound packet placed - * in the uip_buf packet buffer. If so, the uip_len variable is set to - * the length of the packet. If no packet is to be sent out, the - * uip_len variable is set to 0. - * - * The usual way of calling the function is presented by the source - * code below. - \code - uip_len = devicedriver_poll(); - if(uip_len > 0) { - uip_input(); - if(uip_len > 0) { - devicedriver_send(); - } - } - \endcode - * - * \note If you are writing a uIP device driver that needs ARP - * (Address Resolution Protocol), e.g., when running uIP over - * Ethernet, you will need to call the uIP ARP code before calling - * this function: - \code - #define BUF ((struct uip_eth_hdr *)&uip_buf[0]) - uip_len = ethernet_devicedrver_poll(); - if(uip_len > 0) { - if(BUF->type == HTONS(UIP_ETHTYPE_IP)) { - uip_arp_ipin(); - uip_input(); - if(uip_len > 0) { - uip_arp_out(); - ethernet_devicedriver_send(); - } - } else if(BUF->type == HTONS(UIP_ETHTYPE_ARP)) { - uip_arp_arpin(); - if(uip_len > 0) { - ethernet_devicedriver_send(); - } - } - \endcode - * - * \hideinitializer - */ -#define uip_input() uip_process(UIP_DATA) - -/** - * Periodic processing for a connection identified by its number. - * - * This function does the necessary periodic processing (timers, - * polling) for a uIP TCP conneciton, and should be called when the - * periodic uIP timer goes off. It should be called for every - * connection, regardless of whether they are open of closed. - * - * When the function returns, it may have an outbound packet waiting - * for service in the uIP packet buffer, and if so the uip_len - * variable is set to a value larger than zero. The device driver - * should be called to send out the packet. - * - * The ususal way of calling the function is through a for() loop like - * this: - \code - for(i = 0; i < UIP_CONNS; ++i) { - uip_periodic(i); - if(uip_len > 0) { - devicedriver_send(); - } - } - \endcode - * - * \note If you are writing a uIP device driver that needs ARP - * (Address Resolution Protocol), e.g., when running uIP over - * Ethernet, you will need to call the uip_arp_out() function before - * calling the device driver: - \code - for(i = 0; i < UIP_CONNS; ++i) { - uip_periodic(i); - if(uip_len > 0) { - uip_arp_out(); - ethernet_devicedriver_send(); - } - } - \endcode - * - * \param conn The number of the connection which is to be periodically polled. - * - * \hideinitializer - */ -#define uip_periodic(conn) do { uip_conn = &uip_conns[conn]; \ - uip_process(UIP_TIMER); } while (0) - -/** - * - * - */ -#define uip_conn_active(conn) (uip_conns[conn].tcpstateflags != UIP_CLOSED) - -/** - * Perform periodic processing for a connection identified by a pointer - * to its structure. - * - * Same as uip_periodic() but takes a pointer to the actual uip_conn - * struct instead of an integer as its argument. This function can be - * used to force periodic processing of a specific connection. - * - * \param conn A pointer to the uip_conn struct for the connection to - * be processed. - * - * \hideinitializer - */ -#define uip_periodic_conn(conn) do { uip_conn = conn; \ - uip_process(UIP_TIMER); } while (0) - -/** - * Reuqest that a particular connection should be polled. - * - * Similar to uip_periodic_conn() but does not perform any timer - * processing. The application is polled for new data. - * - * \param conn A pointer to the uip_conn struct for the connection to - * be processed. - * - * \hideinitializer - */ -#define uip_poll_conn(conn) do { uip_conn = conn; \ - uip_process(UIP_POLL_REQUEST); } while (0) - - -#if UIP_UDP -/** - * Periodic processing for a UDP connection identified by its number. - * - * This function is essentially the same as uip_periodic(), but for - * UDP connections. It is called in a similar fashion as the - * uip_periodic() function: - \code - for(i = 0; i < UIP_UDP_CONNS; i++) { - uip_udp_periodic(i); - if(uip_len > 0) { - devicedriver_send(); - } - } - \endcode - * - * \note As for the uip_periodic() function, special care has to be - * taken when using uIP together with ARP and Ethernet: - \code - for(i = 0; i < UIP_UDP_CONNS; i++) { - uip_udp_periodic(i); - if(uip_len > 0) { - uip_arp_out(); - ethernet_devicedriver_send(); - } - } - \endcode - * - * \param conn The number of the UDP connection to be processed. - * - * \hideinitializer - */ -#define uip_udp_periodic(conn) do { uip_udp_conn = &uip_udp_conns[conn]; \ - uip_process(UIP_UDP_TIMER); } while (0) - -/** - * Periodic processing for a UDP connection identified by a pointer to - * its structure. - * - * Same as uip_udp_periodic() but takes a pointer to the actual - * uip_conn struct instead of an integer as its argument. This - * function can be used to force periodic processing of a specific - * connection. - * - * \param conn A pointer to the uip_udp_conn struct for the connection - * to be processed. - * - * \hideinitializer - */ -#define uip_udp_periodic_conn(conn) do { uip_udp_conn = conn; \ - uip_process(UIP_UDP_TIMER); } while (0) - - -#endif /* UIP_UDP */ - -/** - * The uIP packet buffer. - * - * The uip_buf array is used to hold incoming and outgoing - * packets. The device driver should place incoming data into this - * buffer. When sending data, the device driver should read the link - * level headers and the TCP/IP headers from this buffer. The size of - * the link level headers is configured by the UIP_LLH_LEN define. - * - * \note The application data need not be placed in this buffer, so - * the device driver must read it from the place pointed to by the - * uip_appdata pointer as illustrated by the following example: - \code - void - devicedriver_send(void) - { - hwsend(&uip_buf[0], UIP_LLH_LEN); - if(uip_len <= UIP_LLH_LEN + UIP_TCPIP_HLEN) { - hwsend(&uip_buf[UIP_LLH_LEN], uip_len - UIP_LLH_LEN); - } else { - hwsend(&uip_buf[UIP_LLH_LEN], UIP_TCPIP_HLEN); - hwsend(uip_appdata, uip_len - UIP_TCPIP_HLEN - UIP_LLH_LEN); - } - } - \endcode - */ -extern u8_t uip_buf[UIP_BUFSIZE+2]; - -/** @} */ - -/*---------------------------------------------------------------------------*/ -/* Functions that are used by the uIP application program. Opening and - * closing connections, sending and receiving data, etc. is all - * handled by the functions below. -*/ -/** - * \defgroup uipappfunc uIP application functions - * @{ - * - * Functions used by an application running of top of uIP. - */ - -/** - * Start listening to the specified port. - * - * \note Since this function expects the port number in network byte - * order, a conversion using HTONS() or htons() is necessary. - * - \code - uip_listen(HTONS(80)); - \endcode - * - * \param port A 16-bit port number in network byte order. - */ -void uip_listen(u16_t port); - -/** - * Stop listening to the specified port. - * - * \note Since this function expects the port number in network byte - * order, a conversion using HTONS() or htons() is necessary. - * - \code - uip_unlisten(HTONS(80)); - \endcode - * - * \param port A 16-bit port number in network byte order. - */ -void uip_unlisten(u16_t port); - -/** - * Connect to a remote host using TCP. - * - * This function is used to start a new connection to the specified - * port on the specied host. It allocates a new connection identifier, - * sets the connection to the SYN_SENT state and sets the - * retransmission timer to 0. This will cause a TCP SYN segment to be - * sent out the next time this connection is periodically processed, - * which usually is done within 0.5 seconds after the call to - * uip_connect(). - * - * \note This function is avaliable only if support for active open - * has been configured by defining UIP_ACTIVE_OPEN to 1 in uipopt.h. - * - * \note Since this function requires the port number to be in network - * byte order, a conversion using HTONS() or htons() is necessary. - * - \code - uip_ipaddr_t ipaddr; - - uip_ipaddr(&ipaddr, 192,168,1,2); - uip_connect(&ipaddr, HTONS(80)); - \endcode - * - * \param ripaddr The IP address of the remote hot. - * - * \param port A 16-bit port number in network byte order. - * - * \return A pointer to the uIP connection identifier for the new connection, - * or NULL if no connection could be allocated. - * - */ -struct uip_conn *uip_connect(uip_ipaddr_t *ripaddr, u16_t port); - - - -/** - * \internal - * - * Check if a connection has outstanding (i.e., unacknowledged) data. - * - * \param conn A pointer to the uip_conn structure for the connection. - * - * \hideinitializer - */ -#define uip_outstanding(conn) ((conn)->len) - -/** - * Send data on the current connection. - * - * This function is used to send out a single segment of TCP - * data. Only applications that have been invoked by uIP for event - * processing can send data. - * - * The amount of data that actually is sent out after a call to this - * funcion is determined by the maximum amount of data TCP allows. uIP - * will automatically crop the data so that only the appropriate - * amount of data is sent. The function uip_mss() can be used to query - * uIP for the amount of data that actually will be sent. - * - * \note This function does not guarantee that the sent data will - * arrive at the destination. If the data is lost in the network, the - * application will be invoked with the uip_rexmit() event being - * set. The application will then have to resend the data using this - * function. - * - * \param data A pointer to the data which is to be sent. - * - * \param len The maximum amount of data bytes to be sent. - * - * \hideinitializer - */ -void uip_send(const void *data, int len); - -/** - * The length of any incoming data that is currently avaliable (if avaliable) - * in the uip_appdata buffer. - * - * The test function uip_data() must first be used to check if there - * is any data available at all. - * - * \hideinitializer - */ -/*void uip_datalen(void);*/ -#define uip_datalen() uip_len - -/** - * The length of any out-of-band data (urgent data) that has arrived - * on the connection. - * - * \note The configuration parameter UIP_URGDATA must be set for this - * function to be enabled. - * - * \hideinitializer - */ -#define uip_urgdatalen() uip_urglen - -/** - * Close the current connection. - * - * This function will close the current connection in a nice way. - * - * \hideinitializer - */ -#define uip_close() (uip_flags = UIP_CLOSE) - -/** - * Abort the current connection. - * - * This function will abort (reset) the current connection, and is - * usually used when an error has occured that prevents using the - * uip_close() function. - * - * \hideinitializer - */ -#define uip_abort() (uip_flags = UIP_ABORT) - -/** - * Tell the sending host to stop sending data. - * - * This function will close our receiver's window so that we stop - * receiving data for the current connection. - * - * \hideinitializer - */ -#define uip_stop() (uip_conn->tcpstateflags |= UIP_STOPPED) - -/** - * Find out if the current connection has been previously stopped with - * uip_stop(). - * - * \hideinitializer - */ -#define uip_stopped(conn) ((conn)->tcpstateflags & UIP_STOPPED) - -/** - * Restart the current connection, if is has previously been stopped - * with uip_stop(). - * - * This function will open the receiver's window again so that we - * start receiving data for the current connection. - * - * \hideinitializer - */ -#define uip_restart() do { uip_flags |= UIP_NEWDATA; \ - uip_conn->tcpstateflags &= ~UIP_STOPPED; \ - } while(0) - - -/* uIP tests that can be made to determine in what state the current - connection is, and what the application function should do. */ - -/** - * Is the current connection a UDP connection? - * - * This function checks whether the current connection is a UDP connection. - * - * \hideinitializer - * - */ -#define uip_udpconnection() (uip_conn == NULL) - -/** - * Is new incoming data available? - * - * Will reduce to non-zero if there is new data for the application - * present at the uip_appdata pointer. The size of the data is - * avaliable through the uip_len variable. - * - * \hideinitializer - */ -#define uip_newdata() (uip_flags & UIP_NEWDATA) - -/** - * Has previously sent data been acknowledged? - * - * Will reduce to non-zero if the previously sent data has been - * acknowledged by the remote host. This means that the application - * can send new data. - * - * \hideinitializer - */ -#define uip_acked() (uip_flags & UIP_ACKDATA) - -/** - * Has the connection just been connected? - * - * Reduces to non-zero if the current connection has been connected to - * a remote host. This will happen both if the connection has been - * actively opened (with uip_connect()) or passively opened (with - * uip_listen()). - * - * \hideinitializer - */ -#define uip_connected() (uip_flags & UIP_CONNECTED) - -/** - * Has the connection been closed by the other end? - * - * Is non-zero if the connection has been closed by the remote - * host. The application may then do the necessary clean-ups. - * - * \hideinitializer - */ -#define uip_closed() (uip_flags & UIP_CLOSE) - -/** - * Has the connection been aborted by the other end? - * - * Non-zero if the current connection has been aborted (reset) by the - * remote host. - * - * \hideinitializer - */ -#define uip_aborted() (uip_flags & UIP_ABORT) - -/** - * Has the connection timed out? - * - * Non-zero if the current connection has been aborted due to too many - * retransmissions. - * - * \hideinitializer - */ -#define uip_timedout() (uip_flags & UIP_TIMEDOUT) - -/** - * Do we need to retransmit previously data? - * - * Reduces to non-zero if the previously sent data has been lost in - * the network, and the application should retransmit it. The - * application should send the exact same data as it did the last - * time, using the uip_send() function. - * - * \hideinitializer - */ -#define uip_rexmit() (uip_flags & UIP_REXMIT) - -/** - * Is the connection being polled by uIP? - * - * Is non-zero if the reason the application is invoked is that the - * current connection has been idle for a while and should be - * polled. - * - * The polling event can be used for sending data without having to - * wait for the remote host to send data. - * - * \hideinitializer - */ -#define uip_poll() (uip_flags & UIP_POLL) - -/** - * Get the initial maxium segment size (MSS) of the current - * connection. - * - * \hideinitializer - */ -#define uip_initialmss() (uip_conn->initialmss) - -/** - * Get the current maxium segment size that can be sent on the current - * connection. - * - * The current maxiumum segment size that can be sent on the - * connection is computed from the receiver's window and the MSS of - * the connection (which also is available by calling - * uip_initialmss()). - * - * \hideinitializer - */ -#define uip_mss() (uip_conn->mss) - -/** - * Set up a new UDP connection. - * - * This function sets up a new UDP connection. The function will - * automatically allocate an unused local port for the new - * connection. However, another port can be chosen by using the - * uip_udp_bind() call, after the uip_udp_new() function has been - * called. - * - * Example: - \code - uip_ipaddr_t addr; - struct uip_udp_conn *c; - - uip_ipaddr(&addr, 192,168,2,1); - c = uip_udp_new(&addr, HTONS(12345)); - if(c != NULL) { - uip_udp_bind(c, HTONS(12344)); - } - \endcode - * \param ripaddr The IP address of the remote host. - * - * \param rport The remote port number in network byte order. - * - * \return The uip_udp_conn structure for the new connection or NULL - * if no connection could be allocated. - */ -struct uip_udp_conn *uip_udp_new(uip_ipaddr_t *ripaddr, u16_t rport); - -/** - * Removed a UDP connection. - * - * \param conn A pointer to the uip_udp_conn structure for the connection. - * - * \hideinitializer - */ -#define uip_udp_remove(conn) (conn)->lport = 0 - -/** - * Bind a UDP connection to a local port. - * - * \param conn A pointer to the uip_udp_conn structure for the - * connection. - * - * \param port The local port number, in network byte order. - * - * \hideinitializer - */ -#define uip_udp_bind(conn, port) (conn)->lport = port - -/** - * Send a UDP datagram of length len on the current connection. - * - * This function can only be called in response to a UDP event (poll - * or newdata). The data must be present in the uip_buf buffer, at the - * place pointed to by the uip_appdata pointer. - * - * \param len The length of the data in the uip_buf buffer. - * - * \hideinitializer - */ -#define uip_udp_send(len) uip_send((char *)uip_appdata, len) - -/** @} */ - -/* uIP convenience and converting functions. */ - -/** - * \defgroup uipconvfunc uIP conversion functions - * @{ - * - * These functions can be used for converting between different data - * formats used by uIP. - */ - -/** - * Construct an IP address from four bytes. - * - * This function constructs an IP address of the type that uIP handles - * internally from four bytes. The function is handy for specifying IP - * addresses to use with e.g. the uip_connect() function. - * - * Example: - \code - uip_ipaddr_t ipaddr; - struct uip_conn *c; - - uip_ipaddr(&ipaddr, 192,168,1,2); - c = uip_connect(&ipaddr, HTONS(80)); - \endcode - * - * \param addr A pointer to a uip_ipaddr_t variable that will be - * filled in with the IP address. - * - * \param addr0 The first octet of the IP address. - * \param addr1 The second octet of the IP address. - * \param addr2 The third octet of the IP address. - * \param addr3 The forth octet of the IP address. - * - * \hideinitializer - */ -#define uip_ipaddr(addr, addr0,addr1,addr2,addr3) do { \ - ((u16_t *)(addr))[0] = HTONS(((addr0) << 8) | (addr1)); \ - ((u16_t *)(addr))[1] = HTONS(((addr2) << 8) | (addr3)); \ - } while(0) - -/** - * Construct an IPv6 address from eight 16-bit words. - * - * This function constructs an IPv6 address. - * - * \hideinitializer - */ -#define uip_ip6addr(addr, addr0,addr1,addr2,addr3,addr4,addr5,addr6,addr7) do { \ - ((u16_t *)(addr))[0] = HTONS((addr0)); \ - ((u16_t *)(addr))[1] = HTONS((addr1)); \ - ((u16_t *)(addr))[2] = HTONS((addr2)); \ - ((u16_t *)(addr))[3] = HTONS((addr3)); \ - ((u16_t *)(addr))[4] = HTONS((addr4)); \ - ((u16_t *)(addr))[5] = HTONS((addr5)); \ - ((u16_t *)(addr))[6] = HTONS((addr6)); \ - ((u16_t *)(addr))[7] = HTONS((addr7)); \ - } while(0) - -/** - * Copy an IP address to another IP address. - * - * Copies an IP address from one place to another. - * - * Example: - \code - uip_ipaddr_t ipaddr1, ipaddr2; - - uip_ipaddr(&ipaddr1, 192,16,1,2); - uip_ipaddr_copy(&ipaddr2, &ipaddr1); - \endcode - * - * \param dest The destination for the copy. - * \param src The source from where to copy. - * - * \hideinitializer - */ -#if !UIP_CONF_IPV6 -#define uip_ipaddr_copy(dest, src) do { \ - ((u16_t *)dest)[0] = ((u16_t *)src)[0]; \ - ((u16_t *)dest)[1] = ((u16_t *)src)[1]; \ - } while(0) -#else /* !UIP_CONF_IPV6 */ -#define uip_ipaddr_copy(dest, src) memcpy(dest, src, sizeof(uip_ip6addr_t)) -#endif /* !UIP_CONF_IPV6 */ - -/** - * Compare two IP addresses - * - * Compares two IP addresses. - * - * Example: - \code - uip_ipaddr_t ipaddr1, ipaddr2; - - uip_ipaddr(&ipaddr1, 192,16,1,2); - if(uip_ipaddr_cmp(&ipaddr2, &ipaddr1)) { - printf("They are the same"); - } - \endcode - * - * \param addr1 The first IP address. - * \param addr2 The second IP address. - * - * \hideinitializer - */ -#if !UIP_CONF_IPV6 -#define uip_ipaddr_cmp(addr1, addr2) (((u16_t *)addr1)[0] == ((u16_t *)addr2)[0] && \ - ((u16_t *)addr1)[1] == ((u16_t *)addr2)[1]) -#else /* !UIP_CONF_IPV6 */ -#define uip_ipaddr_cmp(addr1, addr2) (memcmp(addr1, addr2, sizeof(uip_ip6addr_t)) == 0) -#endif /* !UIP_CONF_IPV6 */ - -/** - * Compare two IP addresses with netmasks - * - * Compares two IP addresses with netmasks. The masks are used to mask - * out the bits that are to be compared. - * - * Example: - \code - uip_ipaddr_t ipaddr1, ipaddr2, mask; - - uip_ipaddr(&mask, 255,255,255,0); - uip_ipaddr(&ipaddr1, 192,16,1,2); - uip_ipaddr(&ipaddr2, 192,16,1,3); - if(uip_ipaddr_maskcmp(&ipaddr1, &ipaddr2, &mask)) { - printf("They are the same"); - } - \endcode - * - * \param addr1 The first IP address. - * \param addr2 The second IP address. - * \param mask The netmask. - * - * \hideinitializer - */ -#define uip_ipaddr_maskcmp(addr1, addr2, mask) \ - (((((u16_t *)addr1)[0] & ((u16_t *)mask)[0]) == \ - (((u16_t *)addr2)[0] & ((u16_t *)mask)[0])) && \ - ((((u16_t *)addr1)[1] & ((u16_t *)mask)[1]) == \ - (((u16_t *)addr2)[1] & ((u16_t *)mask)[1]))) - - -/** - * Mask out the network part of an IP address. - * - * Masks out the network part of an IP address, given the address and - * the netmask. - * - * Example: - \code - uip_ipaddr_t ipaddr1, ipaddr2, netmask; - - uip_ipaddr(&ipaddr1, 192,16,1,2); - uip_ipaddr(&netmask, 255,255,255,0); - uip_ipaddr_mask(&ipaddr2, &ipaddr1, &netmask); - \endcode - * - * In the example above, the variable "ipaddr2" will contain the IP - * address 192.168.1.0. - * - * \param dest Where the result is to be placed. - * \param src The IP address. - * \param mask The netmask. - * - * \hideinitializer - */ -#define uip_ipaddr_mask(dest, src, mask) do { \ - ((u16_t *)dest)[0] = ((u16_t *)src)[0] & ((u16_t *)mask)[0]; \ - ((u16_t *)dest)[1] = ((u16_t *)src)[1] & ((u16_t *)mask)[1]; \ - } while(0) - -/** - * Pick the first octet of an IP address. - * - * Picks out the first octet of an IP address. - * - * Example: - \code - uip_ipaddr_t ipaddr; - u8_t octet; - - uip_ipaddr(&ipaddr, 1,2,3,4); - octet = uip_ipaddr1(&ipaddr); - \endcode - * - * In the example above, the variable "octet" will contain the value 1. - * - * \hideinitializer - */ -#define uip_ipaddr1(addr) (htons(((u16_t *)(addr))[0]) >> 8) - -/** - * Pick the second octet of an IP address. - * - * Picks out the second octet of an IP address. - * - * Example: - \code - uip_ipaddr_t ipaddr; - u8_t octet; - - uip_ipaddr(&ipaddr, 1,2,3,4); - octet = uip_ipaddr2(&ipaddr); - \endcode - * - * In the example above, the variable "octet" will contain the value 2. - * - * \hideinitializer - */ -#define uip_ipaddr2(addr) (htons(((u16_t *)(addr))[0]) & 0xff) - -/** - * Pick the third octet of an IP address. - * - * Picks out the third octet of an IP address. - * - * Example: - \code - uip_ipaddr_t ipaddr; - u8_t octet; - - uip_ipaddr(&ipaddr, 1,2,3,4); - octet = uip_ipaddr3(&ipaddr); - \endcode - * - * In the example above, the variable "octet" will contain the value 3. - * - * \hideinitializer - */ -#define uip_ipaddr3(addr) (htons(((u16_t *)(addr))[1]) >> 8) - -/** - * Pick the fourth octet of an IP address. - * - * Picks out the fourth octet of an IP address. - * - * Example: - \code - uip_ipaddr_t ipaddr; - u8_t octet; - - uip_ipaddr(&ipaddr, 1,2,3,4); - octet = uip_ipaddr4(&ipaddr); - \endcode - * - * In the example above, the variable "octet" will contain the value 4. - * - * \hideinitializer - */ -#define uip_ipaddr4(addr) (htons(((u16_t *)(addr))[1]) & 0xff) - -/** - * Convert 16-bit quantity from host byte order to network byte order. - * - * This macro is primarily used for converting constants from host - * byte order to network byte order. For converting variables to - * network byte order, use the htons() function instead. - * - * \hideinitializer - */ -#ifndef HTONS -# if UIP_BYTE_ORDER == UIP_BIG_ENDIAN -# define HTONS(n) (n) -# else /* UIP_BYTE_ORDER == UIP_BIG_ENDIAN */ -# define HTONS(n) (u16_t)((((u16_t) (n)) << 8) | (((u16_t) (n)) >> 8)) -# endif /* UIP_BYTE_ORDER == UIP_BIG_ENDIAN */ -#else -#error "HTONS already defined!" -#endif /* HTONS */ - -/** - * Convert 16-bit quantity from host byte order to network byte order. - * - * This function is primarily used for converting variables from host - * byte order to network byte order. For converting constants to - * network byte order, use the HTONS() macro instead. - */ -#ifndef htons -u16_t htons(u16_t val); -#endif /* htons */ -#ifndef ntohs -#define ntohs htons -#endif - -/** @} */ - -/** - * Pointer to the application data in the packet buffer. - * - * This pointer points to the application data when the application is - * called. If the application wishes to send data, the application may - * use this space to write the data into before calling uip_send(). - */ -extern void *uip_appdata; - -#if UIP_URGDATA > 0 -/* u8_t *uip_urgdata: - * - * This pointer points to any urgent data that has been received. Only - * present if compiled with support for urgent data (UIP_URGDATA). - */ -extern void *uip_urgdata; -#endif /* UIP_URGDATA > 0 */ - - -/** - * \defgroup uipdrivervars Variables used in uIP device drivers - * @{ - * - * uIP has a few global variables that are used in device drivers for - * uIP. - */ - -/** - * The length of the packet in the uip_buf buffer. - * - * The global variable uip_len holds the length of the packet in the - * uip_buf buffer. - * - * When the network device driver calls the uIP input function, - * uip_len should be set to the length of the packet in the uip_buf - * buffer. - * - * When sending packets, the device driver should use the contents of - * the uip_len variable to determine the length of the outgoing - * packet. - * - */ -extern u16_t uip_len; - -/** @} */ - -#if UIP_URGDATA > 0 -extern u16_t uip_urglen, uip_surglen; -#endif /* UIP_URGDATA > 0 */ - - -/** - * Representation of a uIP TCP connection. - * - * The uip_conn structure is used for identifying a connection. All - * but one field in the structure are to be considered read-only by an - * application. The only exception is the appstate field whos purpose - * is to let the application store application-specific state (e.g., - * file pointers) for the connection. The type of this field is - * configured in the "uipopt.h" header file. - */ -struct uip_conn { - uip_ipaddr_t ripaddr; /**< The IP address of the remote host. */ - - u16_t lport; /**< The local TCP port, in network byte order. */ - u16_t rport; /**< The local remote TCP port, in network byte - order. */ - - u8_t rcv_nxt[4]; /**< The sequence number that we expect to - receive next. */ - u8_t snd_nxt[4]; /**< The sequence number that was last sent by - us. */ - u16_t len; /**< Length of the data that was previously sent. */ - u16_t mss; /**< Current maximum segment size for the - connection. */ - u16_t initialmss; /**< Initial maximum segment size for the - connection. */ - u8_t sa; /**< Retransmission time-out calculation state - variable. */ - u8_t sv; /**< Retransmission time-out calculation state - variable. */ - u8_t rto; /**< Retransmission time-out. */ - u8_t tcpstateflags; /**< TCP state and flags. */ - u8_t timer; /**< The retransmission timer. */ - u8_t nrtx; /**< The number of retransmissions for the last - segment sent. */ - - /** The application state. */ - uip_tcp_appstate_t appstate; -}; - - -/** - * Pointer to the current TCP connection. - * - * The uip_conn pointer can be used to access the current TCP - * connection. - */ -extern struct uip_conn *uip_conn; -/* The array containing all uIP connections. */ -extern struct uip_conn uip_conns[UIP_CONNS]; -/** - * \addtogroup uiparch - * @{ - */ - -/** - * 4-byte array used for the 32-bit sequence number calculations. - */ -extern u8_t uip_acc32[4]; - -/** @} */ - - -#if UIP_UDP -/** - * Representation of a uIP UDP connection. - */ -struct uip_udp_conn { - uip_ipaddr_t ripaddr; /**< The IP address of the remote peer. */ - u16_t lport; /**< The local port number in network byte order. */ - u16_t rport; /**< The remote port number in network byte order. */ - u8_t ttl; /**< Default time-to-live. */ - - /** The application state. */ - uip_udp_appstate_t appstate; -}; - -/** - * The current UDP connection. - */ -extern struct uip_udp_conn *uip_udp_conn; -extern struct uip_udp_conn uip_udp_conns[UIP_UDP_CONNS]; -#endif /* UIP_UDP */ - -/** - * The structure holding the TCP/IP statistics that are gathered if - * UIP_STATISTICS is set to 1. - * - */ -struct uip_stats { - struct { - uip_stats_t drop; /**< Number of dropped packets at the IP - layer. */ - uip_stats_t recv; /**< Number of received packets at the IP - layer. */ - uip_stats_t sent; /**< Number of sent packets at the IP - layer. */ - uip_stats_t vhlerr; /**< Number of packets dropped due to wrong - IP version or header length. */ - uip_stats_t hblenerr; /**< Number of packets dropped due to wrong - IP length, high byte. */ - uip_stats_t lblenerr; /**< Number of packets dropped due to wrong - IP length, low byte. */ - uip_stats_t fragerr; /**< Number of packets dropped since they - were IP fragments. */ - uip_stats_t chkerr; /**< Number of packets dropped due to IP - checksum errors. */ - uip_stats_t protoerr; /**< Number of packets dropped since they - were neither ICMP, UDP nor TCP. */ - } ip; /**< IP statistics. */ - struct { - uip_stats_t drop; /**< Number of dropped ICMP packets. */ - uip_stats_t recv; /**< Number of received ICMP packets. */ - uip_stats_t sent; /**< Number of sent ICMP packets. */ - uip_stats_t typeerr; /**< Number of ICMP packets with a wrong - type. */ - } icmp; /**< ICMP statistics. */ - struct { - uip_stats_t drop; /**< Number of dropped TCP segments. */ - uip_stats_t recv; /**< Number of recived TCP segments. */ - uip_stats_t sent; /**< Number of sent TCP segments. */ - uip_stats_t chkerr; /**< Number of TCP segments with a bad - checksum. */ - uip_stats_t ackerr; /**< Number of TCP segments with a bad ACK - number. */ - uip_stats_t rst; /**< Number of recevied TCP RST (reset) segments. */ - uip_stats_t rexmit; /**< Number of retransmitted TCP segments. */ - uip_stats_t syndrop; /**< Number of dropped SYNs due to too few - connections was avaliable. */ - uip_stats_t synrst; /**< Number of SYNs for closed ports, - triggering a RST. */ - } tcp; /**< TCP statistics. */ -#if UIP_UDP - struct { - uip_stats_t drop; /**< Number of dropped UDP segments. */ - uip_stats_t recv; /**< Number of recived UDP segments. */ - uip_stats_t sent; /**< Number of sent UDP segments. */ - uip_stats_t chkerr; /**< Number of UDP segments with a bad - checksum. */ - } udp; /**< UDP statistics. */ -#endif /* UIP_UDP */ -}; - -/** - * The uIP TCP/IP statistics. - * - * This is the variable in which the uIP TCP/IP statistics are gathered. - */ -extern struct uip_stats uip_stat; - - -/*---------------------------------------------------------------------------*/ -/* All the stuff below this point is internal to uIP and should not be - * used directly by an application or by a device driver. - */ -/*---------------------------------------------------------------------------*/ -/* u8_t uip_flags: - * - * When the application is called, uip_flags will contain the flags - * that are defined in this file. Please read below for more - * infomation. - */ -extern u8_t uip_flags; - -/* The following flags may be set in the global variable uip_flags - before calling the application callback. The UIP_ACKDATA, - UIP_NEWDATA, and UIP_CLOSE flags may both be set at the same time, - whereas the others are mutualy exclusive. Note that these flags - should *NOT* be accessed directly, but only through the uIP - functions/macros. */ - -#define UIP_ACKDATA 1 /* Signifies that the outstanding data was - acked and the application should send - out new data instead of retransmitting - the last data. */ -#define UIP_NEWDATA 2 /* Flags the fact that the peer has sent - us new data. */ -#define UIP_REXMIT 4 /* Tells the application to retransmit the - data that was last sent. */ -#define UIP_POLL 8 /* Used for polling the application, to - check if the application has data that - it wants to send. */ -#define UIP_CLOSE 16 /* The remote host has closed the - connection, thus the connection has - gone away. Or the application signals - that it wants to close the - connection. */ -#define UIP_ABORT 32 /* The remote host has aborted the - connection, thus the connection has - gone away. Or the application signals - that it wants to abort the - connection. */ -#define UIP_CONNECTED 64 /* We have got a connection from a remote - host and have set up a new connection - for it, or an active connection has - been successfully established. */ - -#define UIP_TIMEDOUT 128 /* The connection has been aborted due to - too many retransmissions. */ - -/* uip_process(flag): - * - * The actual uIP function which does all the work. - */ -void uip_process(u8_t flag); - -/* The following flags are passed as an argument to the uip_process() - function. They are used to distinguish between the two cases where - uip_process() is called. It can be called either because we have - incoming data that should be processed, or because the periodic - timer has fired. These values are never used directly, but only in - the macrose defined in this file. */ - -#define UIP_DATA 1 /* Tells uIP that there is incoming - data in the uip_buf buffer. The - length of the data is stored in the - global variable uip_len. */ -#define UIP_TIMER 2 /* Tells uIP that the periodic timer - has fired. */ -#define UIP_POLL_REQUEST 3 /* Tells uIP that a connection should - be polled. */ -#define UIP_UDP_SEND_CONN 4 /* Tells uIP that a UDP datagram - should be constructed in the - uip_buf buffer. */ -#if UIP_UDP -#define UIP_UDP_TIMER 5 -#endif /* UIP_UDP */ - -/* The TCP states used in the uip_conn->tcpstateflags. */ -#define UIP_CLOSED 0 -#define UIP_SYN_RCVD 1 -#define UIP_SYN_SENT 2 -#define UIP_ESTABLISHED 3 -#define UIP_FIN_WAIT_1 4 -#define UIP_FIN_WAIT_2 5 -#define UIP_CLOSING 6 -#define UIP_TIME_WAIT 7 -#define UIP_LAST_ACK 8 -#define UIP_TS_MASK 15 - -#define UIP_STOPPED 16 - -/* The TCP and IP headers. */ -struct uip_tcpip_hdr { -#if UIP_CONF_IPV6 - /* IPv6 header. */ - u8_t vtc, - tcflow; - u16_t flow; - u8_t len[2]; - u8_t proto, ttl; - uip_ip6addr_t srcipaddr, destipaddr; -#else /* UIP_CONF_IPV6 */ - /* IPv4 header. */ - u8_t vhl, - tos, - len[2], - ipid[2], - ipoffset[2], - ttl, - proto; - u16_t ipchksum; - u16_t srcipaddr[2], - destipaddr[2]; -#endif /* UIP_CONF_IPV6 */ - - /* TCP header. */ - u16_t srcport, - destport; - u8_t seqno[4], - ackno[4], - tcpoffset, - flags, - wnd[2]; - u16_t tcpchksum; - u8_t urgp[2]; - u8_t optdata[4]; -}; - -/* The ICMP and IP headers. */ -struct uip_icmpip_hdr { -#if UIP_CONF_IPV6 - /* IPv6 header. */ - u8_t vtc, - tcf; - u16_t flow; - u8_t len[2]; - u8_t proto, ttl; - uip_ip6addr_t srcipaddr, destipaddr; -#else /* UIP_CONF_IPV6 */ - /* IPv4 header. */ - u8_t vhl, - tos, - len[2], - ipid[2], - ipoffset[2], - ttl, - proto; - u16_t ipchksum; - u16_t srcipaddr[2], - destipaddr[2]; -#endif /* UIP_CONF_IPV6 */ - - /* ICMP (echo) header. */ - u8_t type, icode; - u16_t icmpchksum; -#if !UIP_CONF_IPV6 - u16_t id, seqno; -#else /* !UIP_CONF_IPV6 */ - u8_t flags, reserved1, reserved2, reserved3; - u8_t icmp6data[16]; - u8_t options[1]; -#endif /* !UIP_CONF_IPV6 */ -}; - - -/* The UDP and IP headers. */ -struct uip_udpip_hdr { -#if UIP_CONF_IPV6 - /* IPv6 header. */ - u8_t vtc, - tcf; - u16_t flow; - u8_t len[2]; - u8_t proto, ttl; - uip_ip6addr_t srcipaddr, destipaddr; -#else /* UIP_CONF_IPV6 */ - /* IP header. */ - u8_t vhl, - tos, - len[2], - ipid[2], - ipoffset[2], - ttl, - proto; - u16_t ipchksum; - u16_t srcipaddr[2], - destipaddr[2]; -#endif /* UIP_CONF_IPV6 */ - - /* UDP header. */ - u16_t srcport, - destport; - u16_t udplen; - u16_t udpchksum; -}; - - - -/** - * The buffer size available for user data in the \ref uip_buf buffer. - * - * This macro holds the available size for user data in the \ref - * uip_buf buffer. The macro is intended to be used for checking - * bounds of available user data. - * - * Example: - \code - snprintf(uip_appdata, UIP_APPDATA_SIZE, "%u\n", i); - \endcode - * - * \hideinitializer - */ -#define UIP_APPDATA_SIZE (UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN) - - -#define UIP_PROTO_ICMP 1 -#define UIP_PROTO_TCP 6 -#define UIP_PROTO_UDP 17 -#define UIP_PROTO_ICMP6 58 - -/* Header sizes. */ -#if UIP_CONF_IPV6 -#define UIP_IPH_LEN 40 -#else /* UIP_CONF_IPV6 */ -#define UIP_IPH_LEN 20 /* Size of IP header */ -#endif /* UIP_CONF_IPV6 */ -#define UIP_UDPH_LEN 8 /* Size of UDP header */ -#define UIP_TCPH_LEN 20 /* Size of TCP header */ -#define UIP_IPUDPH_LEN (UIP_UDPH_LEN + UIP_IPH_LEN) /* Size of IP + - UDP - header */ -#define UIP_IPTCPH_LEN (UIP_TCPH_LEN + UIP_IPH_LEN) /* Size of IP + - TCP - header */ -#define UIP_TCPIP_HLEN UIP_IPTCPH_LEN - - -#if UIP_FIXEDADDR -extern const uip_ipaddr_t uip_hostaddr, uip_netmask, uip_draddr; -#else /* UIP_FIXEDADDR */ -extern uip_ipaddr_t uip_hostaddr, uip_netmask, uip_draddr; -#endif /* UIP_FIXEDADDR */ - - - -/** - * Representation of a 48-bit Ethernet address. - */ -struct uip_eth_addr { - u8_t addr[6]; -}; - -/** - * Calculate the Internet checksum over a buffer. - * - * The Internet checksum is the one's complement of the one's - * complement sum of all 16-bit words in the buffer. - * - * See RFC1071. - * - * \param buf A pointer to the buffer over which the checksum is to be - * computed. - * - * \param len The length of the buffer over which the checksum is to - * be computed. - * - * \return The Internet checksum of the buffer. - */ -u16_t uip_chksum(u16_t *buf, u16_t len); - -/** - * Calculate the IP header checksum of the packet header in uip_buf. - * - * The IP header checksum is the Internet checksum of the 20 bytes of - * the IP header. - * - * \return The IP header checksum of the IP header in the uip_buf - * buffer. - */ -u16_t uip_ipchksum(void); - -/** - * Calculate the TCP checksum of the packet in uip_buf and uip_appdata. - * - * The TCP checksum is the Internet checksum of data contents of the - * TCP segment, and a pseudo-header as defined in RFC793. - * - * \return The TCP checksum of the TCP segment in uip_buf and pointed - * to by uip_appdata. - */ -u16_t uip_tcpchksum(void); - -/** - * Calculate the UDP checksum of the packet in uip_buf and uip_appdata. - * - * The UDP checksum is the Internet checksum of data contents of the - * UDP segment, and a pseudo-header as defined in RFC768. - * - * \return The UDP checksum of the UDP segment in uip_buf and pointed - * to by uip_appdata. - */ -u16_t uip_udpchksum(void); - - -#endif /* __UIP_H__ */ - - -/** @} */ diff --git a/libraries/UIPEthernet/utility/uip_arch.h b/libraries/UIPEthernet/utility/uip_arch.h deleted file mode 100644 index 71fd84b..0000000 --- a/libraries/UIPEthernet/utility/uip_arch.h +++ /dev/null @@ -1,138 +0,0 @@ -/** - * \addtogroup uip - * {@ - */ - -/** - * \defgroup uiparch Architecture specific uIP functions - * @{ - * - * The functions in the architecture specific module implement the IP - * check sum and 32-bit additions. - * - * The IP checksum calculation is the most computationally expensive - * operation in the TCP/IP stack and it therefore pays off to - * implement this in efficient assembler. The purpose of the uip-arch - * module is to let the checksum functions to be implemented in - * architecture specific assembler. - * - */ - -/** - * \file - * Declarations of architecture specific functions. - * \author Adam Dunkels - */ - -/* - * Copyright (c) 2001, Adam Dunkels. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This file is part of the uIP TCP/IP stack. - * - * $Id: uip_arch.h,v 1.2 2006/06/07 09:15:19 adam Exp $ - * - */ - -#ifndef __UIP_ARCH_H__ -#define __UIP_ARCH_H__ - -#include "uip.h" - -/** - * Carry out a 32-bit addition. - * - * Because not all architectures for which uIP is intended has native - * 32-bit arithmetic, uIP uses an external C function for doing the - * required 32-bit additions in the TCP protocol processing. This - * function should add the two arguments and place the result in the - * global variable uip_acc32. - * - * \note The 32-bit integer pointed to by the op32 parameter and the - * result in the uip_acc32 variable are in network byte order (big - * endian). - * - * \param op32 A pointer to a 4-byte array representing a 32-bit - * integer in network byte order (big endian). - * - * \param op16 A 16-bit integer in host byte order. - */ -void uip_add32(u8_t *op32, u16_t op16); - -/** - * Calculate the Internet checksum over a buffer. - * - * The Internet checksum is the one's complement of the one's - * complement sum of all 16-bit words in the buffer. - * - * See RFC1071. - * - * \note This function is not called in the current version of uIP, - * but future versions might make use of it. - * - * \param buf A pointer to the buffer over which the checksum is to be - * computed. - * - * \param len The length of the buffer over which the checksum is to - * be computed. - * - * \return The Internet checksum of the buffer. - */ -u16_t uip_chksum(u16_t *buf, u16_t len); - -/** - * Calculate the IP header checksum of the packet header in uip_buf. - * - * The IP header checksum is the Internet checksum of the 20 bytes of - * the IP header. - * - * \return The IP header checksum of the IP header in the uip_buf - * buffer. - */ -u16_t uip_ipchksum(void); - -/** - * Calculate the TCP checksum of the packet in uip_buf and uip_appdata. - * - * The TCP checksum is the Internet checksum of data contents of the - * TCP segment, and a pseudo-header as defined in RFC793. - * - * \note The uip_appdata pointer that points to the packet data may - * point anywhere in memory, so it is not possible to simply calculate - * the Internet checksum of the contents of the uip_buf buffer. - * - * \return The TCP checksum of the TCP segment in uip_buf and pointed - * to by uip_appdata. - */ -u16_t uip_tcpchksum(void); - -u16_t uip_udpchksum(void); - -/** @} */ -/** @} */ - -#endif /* __UIP_ARCH_H__ */ diff --git a/libraries/UIPEthernet/utility/uip_arp.c b/libraries/UIPEthernet/utility/uip_arp.c deleted file mode 100644 index 44ca7c4..0000000 --- a/libraries/UIPEthernet/utility/uip_arp.c +++ /dev/null @@ -1,423 +0,0 @@ -/** - * \addtogroup uip - * @{ - */ - -/** - * \defgroup uiparp uIP Address Resolution Protocol - * @{ - * - * The Address Resolution Protocol ARP is used for mapping between IP - * addresses and link level addresses such as the Ethernet MAC - * addresses. ARP uses broadcast queries to ask for the link level - * address of a known IP address and the host which is configured with - * the IP address for which the query was meant, will respond with its - * link level address. - * - * \note This ARP implementation only supports Ethernet. - */ - -/** - * \file - * Implementation of the ARP Address Resolution Protocol. - * \author Adam Dunkels - * - */ - -/* - * Copyright (c) 2001-2003, Adam Dunkels. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This file is part of the uIP TCP/IP stack. - * - * $Id: uip_arp.c,v 1.8 2006/06/02 23:36:21 adam Exp $ - * - */ - - -#include "uip_arp.h" - -#include - -struct arp_hdr { - struct uip_eth_hdr ethhdr; - u16_t hwtype; - u16_t protocol; - u8_t hwlen; - u8_t protolen; - u16_t opcode; - struct uip_eth_addr shwaddr; - u16_t sipaddr[2]; - struct uip_eth_addr dhwaddr; - u16_t dipaddr[2]; -}; - -struct ethip_hdr { - struct uip_eth_hdr ethhdr; - /* IP header. */ - u8_t vhl, - tos, - len[2], - ipid[2], - ipoffset[2], - ttl, - proto; - u16_t ipchksum; - u16_t srcipaddr[2], - destipaddr[2]; -}; - -#define ARP_REQUEST 1 -#define ARP_REPLY 2 - -#define ARP_HWTYPE_ETH 1 - -struct arp_entry { - u16_t ipaddr[2]; - struct uip_eth_addr ethaddr; - u8_t time; -}; - -static const struct uip_eth_addr broadcast_ethaddr = - {{0xff,0xff,0xff,0xff,0xff,0xff}}; -static const u16_t broadcast_ipaddr[2] = {0xffff,0xffff}; - -static struct arp_entry arp_table[UIP_ARPTAB_SIZE]; -static u16_t ipaddr[2]; -static u8_t i, c; - -static u8_t arptime; -static u8_t tmpage; - -#define BUF ((struct arp_hdr *)&uip_buf[0]) -#define IPBUF ((struct ethip_hdr *)&uip_buf[0]) -/*-----------------------------------------------------------------------------------*/ -/** - * Initialize the ARP module. - * - */ -/*-----------------------------------------------------------------------------------*/ -void -uip_arp_init(void) -{ - for(i = 0; i < UIP_ARPTAB_SIZE; ++i) { - memset(arp_table[i].ipaddr, 0, 4); - } -} -/*-----------------------------------------------------------------------------------*/ -/** - * Periodic ARP processing function. - * - * This function performs periodic timer processing in the ARP module - * and should be called at regular intervals. The recommended interval - * is 10 seconds between the calls. - * - */ -/*-----------------------------------------------------------------------------------*/ -void -uip_arp_timer(void) -{ - struct arp_entry *tabptr; - - ++arptime; - for(i = 0; i < UIP_ARPTAB_SIZE; ++i) { - tabptr = &arp_table[i]; - if((tabptr->ipaddr[0] | tabptr->ipaddr[1]) != 0 && - arptime - tabptr->time >= UIP_ARP_MAXAGE) { - memset(tabptr->ipaddr, 0, 4); - } - } - -} -/*-----------------------------------------------------------------------------------*/ -static void -uip_arp_update(u16_t *ipaddr, struct uip_eth_addr *ethaddr) -{ - register struct arp_entry *tabptr; - /* Walk through the ARP mapping table and try to find an entry to - update. If none is found, the IP -> MAC address mapping is - inserted in the ARP table. */ - for(i = 0; i < UIP_ARPTAB_SIZE; ++i) { - - tabptr = &arp_table[i]; - /* Only check those entries that are actually in use. */ - if(tabptr->ipaddr[0] != 0 && - tabptr->ipaddr[1] != 0) { - - /* Check if the source IP address of the incoming packet matches - the IP address in this ARP table entry. */ - if(ipaddr[0] == tabptr->ipaddr[0] && - ipaddr[1] == tabptr->ipaddr[1]) { - - /* An old entry found, update this and return. */ - memcpy(tabptr->ethaddr.addr, ethaddr->addr, 6); - tabptr->time = arptime; - - return; - } - } - } - - /* If we get here, no existing ARP table entry was found, so we - create one. */ - - /* First, we try to find an unused entry in the ARP table. */ - for(i = 0; i < UIP_ARPTAB_SIZE; ++i) { - tabptr = &arp_table[i]; - if(tabptr->ipaddr[0] == 0 && - tabptr->ipaddr[1] == 0) { - break; - } - } - - /* If no unused entry is found, we try to find the oldest entry and - throw it away. */ - if(i == UIP_ARPTAB_SIZE) { - tmpage = 0; - c = 0; - for(i = 0; i < UIP_ARPTAB_SIZE; ++i) { - tabptr = &arp_table[i]; - if(arptime - tabptr->time > tmpage) { - tmpage = arptime - tabptr->time; - c = i; - } - } - i = c; - tabptr = &arp_table[i]; - } - - /* Now, i is the ARP table entry which we will fill with the new - information. */ - memcpy(tabptr->ipaddr, ipaddr, 4); - memcpy(tabptr->ethaddr.addr, ethaddr->addr, 6); - tabptr->time = arptime; -} -/*-----------------------------------------------------------------------------------*/ -/** - * ARP processing for incoming IP packets - * - * This function should be called by the device driver when an IP - * packet has been received. The function will check if the address is - * in the ARP cache, and if so the ARP cache entry will be - * refreshed. If no ARP cache entry was found, a new one is created. - * - * This function expects an IP packet with a prepended Ethernet header - * in the uip_buf[] buffer, and the length of the packet in the global - * variable uip_len. - */ -/*-----------------------------------------------------------------------------------*/ -//#if 0 -void -uip_arp_ipin(void) -{ - uip_len -= sizeof(struct uip_eth_hdr); - - /* Only insert/update an entry if the source IP address of the - incoming IP packet comes from a host on the local network. */ - if((IPBUF->srcipaddr[0] & uip_netmask[0]) != - (uip_hostaddr[0] & uip_netmask[0])) { - return; - } - if((IPBUF->srcipaddr[1] & uip_netmask[1]) != - (uip_hostaddr[1] & uip_netmask[1])) { - return; - } - uip_arp_update(IPBUF->srcipaddr, &(IPBUF->ethhdr.src)); - - return; -} -//#endif /* 0 */ -/*-----------------------------------------------------------------------------------*/ -/** - * ARP processing for incoming ARP packets. - * - * This function should be called by the device driver when an ARP - * packet has been received. The function will act differently - * depending on the ARP packet type: if it is a reply for a request - * that we previously sent out, the ARP cache will be filled in with - * the values from the ARP reply. If the incoming ARP packet is an ARP - * request for our IP address, an ARP reply packet is created and put - * into the uip_buf[] buffer. - * - * When the function returns, the value of the global variable uip_len - * indicates whether the device driver should send out a packet or - * not. If uip_len is zero, no packet should be sent. If uip_len is - * non-zero, it contains the length of the outbound packet that is - * present in the uip_buf[] buffer. - * - * This function expects an ARP packet with a prepended Ethernet - * header in the uip_buf[] buffer, and the length of the packet in the - * global variable uip_len. - */ -/*-----------------------------------------------------------------------------------*/ -void -uip_arp_arpin(void) -{ - - if(uip_len < sizeof(struct arp_hdr)) { - uip_len = 0; - return; - } - uip_len = 0; - - switch(BUF->opcode) { - case HTONS(ARP_REQUEST): - /* ARP request. If it asked for our address, we send out a - reply. */ - if(uip_ipaddr_cmp(BUF->dipaddr, uip_hostaddr)) { - /* First, we register the one who made the request in our ARP - table, since it is likely that we will do more communication - with this host in the future. */ - uip_arp_update(BUF->sipaddr, &BUF->shwaddr); - - /* The reply opcode is 2. */ - BUF->opcode = HTONS(2); - - memcpy(BUF->dhwaddr.addr, BUF->shwaddr.addr, 6); - memcpy(BUF->shwaddr.addr, uip_ethaddr.addr, 6); - memcpy(BUF->ethhdr.src.addr, uip_ethaddr.addr, 6); - memcpy(BUF->ethhdr.dest.addr, BUF->dhwaddr.addr, 6); - - BUF->dipaddr[0] = BUF->sipaddr[0]; - BUF->dipaddr[1] = BUF->sipaddr[1]; - BUF->sipaddr[0] = uip_hostaddr[0]; - BUF->sipaddr[1] = uip_hostaddr[1]; - - BUF->ethhdr.type = HTONS(UIP_ETHTYPE_ARP); - uip_len = sizeof(struct arp_hdr); - } - break; - case HTONS(ARP_REPLY): - /* ARP reply. We insert or update the ARP table if it was meant - for us. */ - if(uip_ipaddr_cmp(BUF->dipaddr, uip_hostaddr)) { - uip_arp_update(BUF->sipaddr, &BUF->shwaddr); - } - break; - } - - return; -} -/*-----------------------------------------------------------------------------------*/ -/** - * Prepend Ethernet header to an outbound IP packet and see if we need - * to send out an ARP request. - * - * This function should be called before sending out an IP packet. The - * function checks the destination IP address of the IP packet to see - * what Ethernet MAC address that should be used as a destination MAC - * address on the Ethernet. - * - * If the destination IP address is in the local network (determined - * by logical ANDing of netmask and our IP address), the function - * checks the ARP cache to see if an entry for the destination IP - * address is found. If so, an Ethernet header is prepended and the - * function returns. If no ARP cache entry is found for the - * destination IP address, the packet in the uip_buf[] is replaced by - * an ARP request packet for the IP address. The IP packet is dropped - * and it is assumed that they higher level protocols (e.g., TCP) - * eventually will retransmit the dropped packet. - * - * If the destination IP address is not on the local network, the IP - * address of the default router is used instead. - * - * When the function returns, a packet is present in the uip_buf[] - * buffer, and the length of the packet is in the global variable - * uip_len. - */ -/*-----------------------------------------------------------------------------------*/ -void -uip_arp_out(void) -{ - struct arp_entry *tabptr; - - /* Find the destination IP address in the ARP table and construct - the Ethernet header. If the destination IP addres isn't on the - local network, we use the default router's IP address instead. - - If not ARP table entry is found, we overwrite the original IP - packet with an ARP request for the IP address. */ - - /* First check if destination is a local broadcast. */ - if(uip_ipaddr_cmp(IPBUF->destipaddr, broadcast_ipaddr)) { - memcpy(IPBUF->ethhdr.dest.addr, broadcast_ethaddr.addr, 6); - } else { - /* Check if the destination address is on the local network. */ - if(!uip_ipaddr_maskcmp(IPBUF->destipaddr, uip_hostaddr, uip_netmask)) { - /* Destination address was not on the local network, so we need to - use the default router's IP address instead of the destination - address when determining the MAC address. */ - uip_ipaddr_copy(ipaddr, uip_draddr); - } else { - /* Else, we use the destination IP address. */ - uip_ipaddr_copy(ipaddr, IPBUF->destipaddr); - } - - for(i = 0; i < UIP_ARPTAB_SIZE; ++i) { - tabptr = &arp_table[i]; - if(uip_ipaddr_cmp(ipaddr, tabptr->ipaddr)) { - break; - } - } - - if(i == UIP_ARPTAB_SIZE) { - /* The destination address was not in our ARP table, so we - overwrite the IP packet with an ARP request. */ - - memset(BUF->ethhdr.dest.addr, 0xff, 6); - memset(BUF->dhwaddr.addr, 0x00, 6); - memcpy(BUF->ethhdr.src.addr, uip_ethaddr.addr, 6); - memcpy(BUF->shwaddr.addr, uip_ethaddr.addr, 6); - - uip_ipaddr_copy(BUF->dipaddr, ipaddr); - uip_ipaddr_copy(BUF->sipaddr, uip_hostaddr); - BUF->opcode = HTONS(ARP_REQUEST); /* ARP request. */ - BUF->hwtype = HTONS(ARP_HWTYPE_ETH); - BUF->protocol = HTONS(UIP_ETHTYPE_IP); - BUF->hwlen = 6; - BUF->protolen = 4; - BUF->ethhdr.type = HTONS(UIP_ETHTYPE_ARP); - - uip_appdata = &uip_buf[UIP_TCPIP_HLEN + UIP_LLH_LEN]; - - uip_len = sizeof(struct arp_hdr); - return; - } - - /* Build an ethernet header. */ - memcpy(IPBUF->ethhdr.dest.addr, tabptr->ethaddr.addr, 6); - } - memcpy(IPBUF->ethhdr.src.addr, uip_ethaddr.addr, 6); - - IPBUF->ethhdr.type = HTONS(UIP_ETHTYPE_IP); - - uip_len += sizeof(struct uip_eth_hdr); -} -/*-----------------------------------------------------------------------------------*/ - -/** @} */ -/** @} */ diff --git a/libraries/UIPEthernet/utility/uip_arp.h b/libraries/UIPEthernet/utility/uip_arp.h deleted file mode 100644 index ef93054..0000000 --- a/libraries/UIPEthernet/utility/uip_arp.h +++ /dev/null @@ -1,144 +0,0 @@ -/** - * \addtogroup uip - * @{ - */ - -/** - * \addtogroup uiparp - * @{ - */ - -/** - * \file - * Macros and definitions for the ARP module. - * \author Adam Dunkels - */ - - -/* - * Copyright (c) 2001-2003, Adam Dunkels. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This file is part of the uIP TCP/IP stack. - * - * $Id: uip_arp.h,v 1.5 2006/06/11 21:46:39 adam Exp $ - * - */ - -#ifndef __UIP_ARP_H__ -#define __UIP_ARP_H__ - -#include "uip.h" - - -extern struct uip_eth_addr uip_ethaddr; - -/** - * The Ethernet header. - */ -struct uip_eth_hdr { - struct uip_eth_addr dest; - struct uip_eth_addr src; - u16_t type; -}; - -#define UIP_ETHTYPE_ARP 0x0806 -#define UIP_ETHTYPE_IP 0x0800 -#define UIP_ETHTYPE_IP6 0x86dd - - -/* The uip_arp_init() function must be called before any of the other - ARP functions. */ -void uip_arp_init(void); - -/* The uip_arp_ipin() function should be called whenever an IP packet - arrives from the Ethernet. This function refreshes the ARP table or - inserts a new mapping if none exists. The function assumes that an - IP packet with an Ethernet header is present in the uip_buf buffer - and that the length of the packet is in the uip_len variable. */ -void uip_arp_ipin(void); -//#define uip_arp_ipin() - -/* The uip_arp_arpin() should be called when an ARP packet is received - by the Ethernet driver. This function also assumes that the - Ethernet frame is present in the uip_buf buffer. When the - uip_arp_arpin() function returns, the contents of the uip_buf - buffer should be sent out on the Ethernet if the uip_len variable - is > 0. */ -void uip_arp_arpin(void); - -/* The uip_arp_out() function should be called when an IP packet - should be sent out on the Ethernet. This function creates an - Ethernet header before the IP header in the uip_buf buffer. The - Ethernet header will have the correct Ethernet MAC destination - address filled in if an ARP table entry for the destination IP - address (or the IP address of the default router) is present. If no - such table entry is found, the IP packet is overwritten with an ARP - request and we rely on TCP to retransmit the packet that was - overwritten. In any case, the uip_len variable holds the length of - the Ethernet frame that should be transmitted. */ -void uip_arp_out(void); - -/* The uip_arp_timer() function should be called every ten seconds. It - is responsible for flushing old entries in the ARP table. */ -void uip_arp_timer(void); - -/** @} */ - -/** - * \addtogroup uipconffunc - * @{ - */ - - -/** - * Specifiy the Ethernet MAC address. - * - * The ARP code needs to know the MAC address of the Ethernet card in - * order to be able to respond to ARP queries and to generate working - * Ethernet headers. - * - * \note This macro only specifies the Ethernet MAC address to the ARP - * code. It cannot be used to change the MAC address of the Ethernet - * card. - * - * \param eaddr A pointer to a struct uip_eth_addr containing the - * Ethernet MAC address of the Ethernet card. - * - * \hideinitializer - */ -#define uip_setethaddr(eaddr) do {uip_ethaddr.addr[0] = eaddr.addr[0]; \ - uip_ethaddr.addr[1] = eaddr.addr[1];\ - uip_ethaddr.addr[2] = eaddr.addr[2];\ - uip_ethaddr.addr[3] = eaddr.addr[3];\ - uip_ethaddr.addr[4] = eaddr.addr[4];\ - uip_ethaddr.addr[5] = eaddr.addr[5];} while(0) - -/** @} */ -/** @} */ - -#endif /* __UIP_ARP_H__ */ diff --git a/libraries/UIPEthernet/utility/uip_clock.h b/libraries/UIPEthernet/utility/uip_clock.h deleted file mode 100644 index 6dd72be..0000000 --- a/libraries/UIPEthernet/utility/uip_clock.h +++ /dev/null @@ -1,88 +0,0 @@ -/** - * \defgroup clock Clock interface - * - * The clock interface is the interface between the \ref timer "timer library" - * and the platform specific clock functionality. The clock - * interface must be implemented for each platform that uses the \ref - * timer "timer library". - * - * The clock interface does only one this: it measures time. The clock - * interface provides a macro, CLOCK_SECOND, which corresponds to one - * second of system time. - * - * \sa \ref timer "Timer library" - * - * @{ - */ - -/* - * Copyright (c) 2004, Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * This file is part of the uIP TCP/IP stack - * - * Author: Adam Dunkels - * - * $Id: clock.h,v 1.3 2006/06/11 21:46:39 adam Exp $ - */ -#ifndef __UIP_CLOCK_H__ -#define __UIP_CLOCK_H__ - -#include "clock-arch.h" - -/** - * Initialize the clock library. - * - * This function initializes the clock library and should be called - * from the main() function of the system. - * - */ -void uip_clock_init(void); - -/** - * Get the current clock time. - * - * This function returns the current system clock time. - * - * \return The current clock time, measured in system ticks. - */ -clock_time_t clock_time(void); - -/** - * A second, measured in system clock time. - * - * \hideinitializer - */ -#ifdef CLOCK_CONF_SECOND -#define CLOCK_SECOND CLOCK_CONF_SECOND -#else -#define CLOCK_SECOND (clock_time_t)32 -#endif - -#endif /* __CLOCK_H__ */ - -/** @} */ diff --git a/libraries/UIPEthernet/utility/uip_debug.cpp b/libraries/UIPEthernet/utility/uip_debug.cpp deleted file mode 100644 index 444bd0e..0000000 --- a/libraries/UIPEthernet/utility/uip_debug.cpp +++ /dev/null @@ -1,170 +0,0 @@ -#include -#include -#include -#include -extern "C" { - #import "utility/uip.h" -} - -struct uip_conn con[UIP_CONNS]; - -void -UIPDebug::uip_debug_printconns() -{ - for(uint8_t i=0;iripaddr,rhs->ripaddr)) - { - Serial.print(" ripaddr: "); - uip_debug_printbytes((const uint8_t *)lhs->ripaddr,4); - Serial.print(" -> "); - uip_debug_printbytes((const uint8_t *)rhs->ripaddr,4); - Serial.println(); - uip_ipaddr_copy(lhs->ripaddr,rhs->ripaddr); - changed = true; - } - if (lhs->lport != rhs->lport) - { - Serial.print(" lport: "); - Serial.print(htons(lhs->lport)); - Serial.print(" -> "); - Serial.println(htons(rhs->lport)); - lhs->lport = rhs->lport; - changed = true; - } - if (lhs->rport != rhs->rport) - { - Serial.print(" rport: "); - Serial.print(htons(lhs->rport)); - Serial.print(" -> "); - Serial.println(htons(rhs->rport)); - lhs->rport = rhs->rport; - changed = true; - } - if ((uint32_t)lhs->rcv_nxt[0] != (uint32_t)rhs->rcv_nxt[0]) - { - Serial.print(" rcv_nxt: "); - uip_debug_printbytes(lhs->rcv_nxt,4); - Serial.print(" -> "); - uip_debug_printbytes(rhs->rcv_nxt,4); - *((uint32_t *)&lhs->rcv_nxt[0]) = (uint32_t)rhs->rcv_nxt[0]; - Serial.println(); - changed = true; - } - if ((uint32_t)lhs->snd_nxt[0] != (uint32_t)rhs->snd_nxt[0]) - { - Serial.print(" snd_nxt: "); - uip_debug_printbytes(lhs->snd_nxt,4); - Serial.print(" -> "); - uip_debug_printbytes(rhs->snd_nxt,4); - *((uint32_t *)&lhs->snd_nxt[0]) = (uint32_t)rhs->snd_nxt[0]; - Serial.println(); - changed = true; - } - if (lhs->len != rhs->len) - { - Serial.print(" len: "); - Serial.print(lhs->len); - Serial.print(" -> "); - Serial.println(rhs->len); - lhs->len = rhs->len; - changed = true; - } - if (lhs->mss != rhs->mss) - { - Serial.print(" mss: "); - Serial.print(lhs->mss); - Serial.print(" -> "); - Serial.println(rhs->mss); - lhs->mss = rhs->mss; - changed = true; - } - if (lhs->initialmss != rhs->initialmss) - { - Serial.print(" initialmss: "); - Serial.print(lhs->initialmss); - Serial.print(" -> "); - Serial.println(rhs->initialmss); - lhs->initialmss = rhs->initialmss; - changed = true; - } - if (lhs->sa != rhs->sa) - { - Serial.print(" sa: "); - Serial.print(lhs->sa); - Serial.print(" -> "); - Serial.println(rhs->sa); - lhs->sa = rhs->sa; - changed = true; - } - if (lhs->sv != rhs->sv) - { - Serial.print(" sv: "); - Serial.print(lhs->sv); - Serial.print(" -> "); - Serial.println(rhs->sv); - lhs->sv = rhs->sv; - changed = true; - } - if (lhs->rto != rhs->rto) - { - Serial.print(" rto: "); - Serial.print(lhs->rto); - Serial.print(" -> "); - Serial.println(rhs->rto); - lhs->rto = rhs->rto; - changed = true; - } - if (lhs->tcpstateflags != rhs->tcpstateflags) - { - Serial.print(" tcpstateflags: "); - Serial.print(lhs->tcpstateflags); - Serial.print(" -> "); - Serial.println(rhs->tcpstateflags); - lhs->tcpstateflags = rhs->tcpstateflags; - changed = true; - } - if (lhs->timer != rhs->timer) - { - Serial.print(" timer: "); - Serial.print(lhs->timer); - Serial.print(" -> "); - Serial.println(rhs->timer); - lhs->timer = rhs->timer; - changed = true; - } - if (lhs->nrtx != rhs->nrtx) - { - Serial.print(" nrtx: "); - Serial.print(lhs->nrtx); - Serial.print(" -> "); - Serial.println(rhs->nrtx); - lhs->nrtx = rhs->nrtx; - changed = true; - } - return changed; -} - -void -UIPDebug::uip_debug_printbytes(const uint8_t *data, uint8_t len) -{ - for(uint8_t i=0;i - */ - -/* - * Copyright (c) 2004, Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * This file is part of the uIP TCP/IP stack - * - * Author: Adam Dunkels - * - * $Id: timer.c,v 1.2 2006/06/12 08:00:30 adam Exp $ - */ - -#include "uip_clock.h" -#include "uip_timer.h" - -/*---------------------------------------------------------------------------*/ -/** - * Set a timer. - * - * This function is used to set a timer for a time sometime in the - * future. The function timer_expired() will evaluate to true after - * the timer has expired. - * - * \param t A pointer to the timer - * \param interval The interval before the timer expires. - * - */ -void -uip_timer_set(struct uip_timer *t, clock_time_t interval) -{ - t->interval = interval; - t->start = clock_time(); -} -/*---------------------------------------------------------------------------*/ -/** - * Reset the timer with the same interval. - * - * This function resets the timer with the same interval that was - * given to the timer_set() function. The start point of the interval - * is the exact time that the timer last expired. Therefore, this - * function will cause the timer to be stable over time, unlike the - * timer_rester() function. - * - * \param t A pointer to the timer. - * - * \sa timer_restart() - */ -void -uip_timer_reset(struct uip_timer *t) -{ - t->start += t->interval; -} -/*---------------------------------------------------------------------------*/ -/** - * Restart the timer from the current point in time - * - * This function restarts a timer with the same interval that was - * given to the timer_set() function. The timer will start at the - * current time. - * - * \note A periodic timer will drift if this function is used to reset - * it. For preioric timers, use the timer_reset() function instead. - * - * \param t A pointer to the timer. - * - * \sa timer_reset() - */ -void -uip_timer_restart(struct uip_timer *t) -{ - t->start = clock_time(); -} -/*---------------------------------------------------------------------------*/ -/** - * Check if a timer has expired. - * - * This function tests if a timer has expired and returns true or - * false depending on its status. - * - * \param t A pointer to the timer - * - * \return Non-zero if the timer has expired, zero otherwise. - * - */ -int -uip_timer_expired(struct uip_timer *t) -{ - return (clock_time_t)(clock_time() - t->start) >= (clock_time_t)t->interval; -} -/*---------------------------------------------------------------------------*/ - -/** @} */ diff --git a/libraries/UIPEthernet/utility/uip_timer.h b/libraries/UIPEthernet/utility/uip_timer.h deleted file mode 100644 index f260349..0000000 --- a/libraries/UIPEthernet/utility/uip_timer.h +++ /dev/null @@ -1,86 +0,0 @@ -/** - * \defgroup timer Timer library - * - * The timer library provides functions for setting, resetting and - * restarting timers, and for checking if a timer has expired. An - * application must "manually" check if its timers have expired; this - * is not done automatically. - * - * A timer is declared as a \c struct \c timer and all access to the - * timer is made by a pointer to the declared timer. - * - * \note The timer library uses the \ref clock "Clock library" to - * measure time. Intervals should be specified in the format used by - * the clock library. - * - * @{ - */ - - -/** - * \file - * Timer library header file. - * \author - * Adam Dunkels - */ - -/* - * Copyright (c) 2004, Swedish Institute of Computer Science. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the Institute nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * This file is part of the uIP TCP/IP stack - * - * Author: Adam Dunkels - * - * $Id: timer.h,v 1.3 2006/06/11 21:46:39 adam Exp $ - */ -#ifndef __UIP_TIMER_H__ -#define __UIP_TIMER_H__ - -#include "uip_clock.h" - -/** - * A timer. - * - * This structure is used for declaring a timer. The timer must be set - * with timer_set() before it can be used. - * - * \hideinitializer - */ -struct uip_timer { - clock_time_t start; - clock_time_t interval; -}; - -void uip_timer_set(struct uip_timer *t, clock_time_t interval); -void uip_timer_reset(struct uip_timer *t); -void uip_timer_restart(struct uip_timer *t); -int uip_timer_expired(struct uip_timer *t); - -#endif /* __UIP_TIMER_H__ */ - -/** @} */ diff --git a/libraries/UIPEthernet/utility/uipethernet-conf.h b/libraries/UIPEthernet/utility/uipethernet-conf.h deleted file mode 100644 index b9c8d73..0000000 --- a/libraries/UIPEthernet/utility/uipethernet-conf.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef UIPETHERNET_CONF_H -#define UIPETHERNET_CONF_H - -/* for TCP */ -#define UIP_SOCKET_NUMPACKETS 5 -#define UIP_CONF_MAX_CONNECTIONS 1 - -/* for UDP - * set UIP_CONF_UDP to 0 to disable UDP (saves aprox. 5kb flash) */ -#define UIP_CONF_UDP 0 -#define UIP_CONF_BROADCAST 1 -#define UIP_CONF_UDP_CONNS 4 - -/* number of attempts on write before returning number of bytes sent so far - * set to -1 to block until connection is closed by timeout */ -#define UIP_ATTEMPTS_ON_WRITE -1 - -/* timeout after which UIPClient::connect gives up. The timeout is specified in seconds. - * if set to a number <= 0 connect will timeout when uIP does (which might be longer than you expect...) */ -#define UIP_CONNECT_TIMEOUT -1 - -/* periodic timer for uip (in ms) */ -#define UIP_PERIODIC_TIMER 250 - -/* timer to poll client for data after last write (in ms) - * set to -1 to disable fast polling and rely on periodic only (saves 100 bytes flash) */ -#define UIP_CLIENT_TIMER 10 - -#endif diff --git a/libraries/UIPEthernet/utility/uipopt.h b/libraries/UIPEthernet/utility/uipopt.h deleted file mode 100644 index 42badf8..0000000 --- a/libraries/UIPEthernet/utility/uipopt.h +++ /dev/null @@ -1,543 +0,0 @@ -/** - * \defgroup uipopt Configuration options for uIP - * @{ - * - * uIP is configured using the per-project configuration file - * uipopt.h. This file contains all compile-time options for uIP and - * should be tweaked to match each specific project. The uIP - * distribution contains a documented example "uipopt.h" that can be - * copied and modified for each project. - * - * \note Most of the configuration options in the uipopt.h should not - * be changed, but rather the per-project uip-conf.h file. - */ - -/** - * \file - * Configuration options for uIP. - * \author Adam Dunkels - * - * This file is used for tweaking various configuration options for - * uIP. You should make a copy of this file into one of your project's - * directories instead of editing this example "uipopt.h" file that - * comes with the uIP distribution. - */ - -/* - * Copyright (c) 2001-2003, Adam Dunkels. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote - * products derived from this software without specific prior - * written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * This file is part of the uIP TCP/IP stack. - * - * $Id: uipopt.h,v 1.4 2006/06/12 08:00:31 adam Exp $ - * - */ - -#ifndef __UIPOPT_H__ -#define __UIPOPT_H__ - -#ifndef UIP_LITTLE_ENDIAN -#define UIP_LITTLE_ENDIAN 3412 -#endif /* UIP_LITTLE_ENDIAN */ -#ifndef UIP_BIG_ENDIAN -#define UIP_BIG_ENDIAN 1234 -#endif /* UIP_BIG_ENDIAN */ - -#include "uip-conf.h" - -/*------------------------------------------------------------------------------*/ - -/** - * \name Static configuration options - * @{ - * - * These configuration options can be used for setting the IP address - * settings statically, but only if UIP_FIXEDADDR is set to 1. The - * configuration options for a specific node includes IP address, - * netmask and default router as well as the Ethernet address. The - * netmask, default router and Ethernet address are appliciable only - * if uIP should be run over Ethernet. - * - * All of these should be changed to suit your project. -*/ - -/** - * Determines if uIP should use a fixed IP address or not. - * - * If uIP should use a fixed IP address, the settings are set in the - * uipopt.h file. If not, the macros uip_sethostaddr(), - * uip_setdraddr() and uip_setnetmask() should be used instead. - * - * \hideinitializer - */ -#define UIP_FIXEDADDR 0 - -/** - * Ping IP address asignment. - * - * uIP uses a "ping" packets for setting its own IP address if this - * option is set. If so, uIP will start with an empty IP address and - * the destination IP address of the first incoming "ping" (ICMP echo) - * packet will be used for setting the hosts IP address. - * - * \note This works only if UIP_FIXEDADDR is 0. - * - * \hideinitializer - */ -#ifdef UIP_CONF_PINGADDRCONF -#define UIP_PINGADDRCONF UIP_CONF_PINGADDRCONF -#else /* UIP_CONF_PINGADDRCONF */ -#define UIP_PINGADDRCONF 0 -#endif /* UIP_CONF_PINGADDRCONF */ - - -/** - * Specifies if the uIP ARP module should be compiled with a fixed - * Ethernet MAC address or not. - * - * If this configuration option is 0, the macro uip_setethaddr() can - * be used to specify the Ethernet address at run-time. - * - * \hideinitializer - */ -#define UIP_FIXEDETHADDR 0 - -/** @} */ -/*------------------------------------------------------------------------------*/ -/** - * \name IP configuration options - * @{ - * - */ -/** - * The IP TTL (time to live) of IP packets sent by uIP. - * - * This should normally not be changed. - */ -#define UIP_TTL 64 - -/** - * Turn on support for IP packet reassembly. - * - * uIP supports reassembly of fragmented IP packets. This features - * requires an additonal amount of RAM to hold the reassembly buffer - * and the reassembly code size is approximately 700 bytes. The - * reassembly buffer is of the same size as the uip_buf buffer - * (configured by UIP_BUFSIZE). - * - * \note IP packet reassembly is not heavily tested. - * - * \hideinitializer - */ -#define UIP_REASSEMBLY 0 - -/** - * The maximum time an IP fragment should wait in the reassembly - * buffer before it is dropped. - * - */ -#define UIP_REASS_MAXAGE 40 - -/** @} */ - -/*------------------------------------------------------------------------------*/ -/** - * \name UDP configuration options - * @{ - */ - -/** - * Toggles wether UDP support should be compiled in or not. - * - * \hideinitializer - */ -#ifdef UIP_CONF_UDP -#define UIP_UDP UIP_CONF_UDP -#else /* UIP_CONF_UDP */ -#define UIP_UDP 0 -#endif /* UIP_CONF_UDP */ - -/** - * Toggles if UDP checksums should be used or not. - * - * \note Support for UDP checksums is currently not included in uIP, - * so this option has no function. - * - * \hideinitializer - */ -#ifdef UIP_CONF_UDP_CHECKSUMS -#define UIP_UDP_CHECKSUMS UIP_CONF_UDP_CHECKSUMS -#else -#define UIP_UDP_CHECKSUMS 0 -#endif - -/** - * The maximum amount of concurrent UDP connections. - * - * \hideinitializer - */ -#ifdef UIP_CONF_UDP_CONNS -#define UIP_UDP_CONNS UIP_CONF_UDP_CONNS -#else /* UIP_CONF_UDP_CONNS */ -#define UIP_UDP_CONNS 10 -#endif /* UIP_CONF_UDP_CONNS */ - -/** - * The name of the function that should be called when UDP datagrams arrive. - * - * \hideinitializer - */ - - -/** @} */ -/*------------------------------------------------------------------------------*/ -/** - * \name TCP configuration options - * @{ - */ - -/** - * Determines if support for opening connections from uIP should be - * compiled in. - * - * If the applications that are running on top of uIP for this project - * do not need to open outgoing TCP connections, this configration - * option can be turned off to reduce the code size of uIP. - * - * \hideinitializer - */ -#define UIP_ACTIVE_OPEN 1 - -/** - * The maximum number of simultaneously open TCP connections. - * - * Since the TCP connections are statically allocated, turning this - * configuration knob down results in less RAM used. Each TCP - * connection requires approximatly 30 bytes of memory. - * - * \hideinitializer - */ -#ifndef UIP_CONF_MAX_CONNECTIONS -#define UIP_CONNS 10 -#else /* UIP_CONF_MAX_CONNECTIONS */ -#define UIP_CONNS UIP_CONF_MAX_CONNECTIONS -#endif /* UIP_CONF_MAX_CONNECTIONS */ - - -/** - * The maximum number of simultaneously listening TCP ports. - * - * Each listening TCP port requires 2 bytes of memory. - * - * \hideinitializer - */ -#ifndef UIP_CONF_MAX_LISTENPORTS -#define UIP_LISTENPORTS 20 -#else /* UIP_CONF_MAX_LISTENPORTS */ -#define UIP_LISTENPORTS UIP_CONF_MAX_LISTENPORTS -#endif /* UIP_CONF_MAX_LISTENPORTS */ - -/** - * Determines if support for TCP urgent data notification should be - * compiled in. - * - * Urgent data (out-of-band data) is a rarely used TCP feature that - * very seldom would be required. - * - * \hideinitializer - */ -#define UIP_URGDATA 0 - -/** - * The initial retransmission timeout counted in timer pulses. - * - * This should not be changed. - */ -#define UIP_RTO 3 - -/** - * The maximum number of times a segment should be retransmitted - * before the connection should be aborted. - * - * This should not be changed. - */ -#define UIP_MAXRTX 8 - -/** - * The maximum number of times a SYN segment should be retransmitted - * before a connection request should be deemed to have been - * unsuccessful. - * - * This should not need to be changed. - */ -#define UIP_MAXSYNRTX 5 - -/** - * The TCP maximum segment size. - * - * This is should not be to set to more than - * UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN. - */ -#ifndef UIP_CONF_TCP_MSS -#define UIP_TCP_MSS (UIP_BUFSIZE - UIP_LLH_LEN - UIP_TCPIP_HLEN) -#else -#define UIP_TCP_MSS UIP_CONF_TCP_MSS -#endif - -/** - * The size of the advertised receiver's window. - * - * Should be set low (i.e., to the size of the uip_buf buffer) is the - * application is slow to process incoming data, or high (32768 bytes) - * if the application processes data quickly. - * - * \hideinitializer - */ -#ifndef UIP_CONF_RECEIVE_WINDOW -#define UIP_RECEIVE_WINDOW UIP_TCP_MSS -#else -#define UIP_RECEIVE_WINDOW UIP_CONF_RECEIVE_WINDOW -#endif - -/** - * How long a connection should stay in the TIME_WAIT state. - * - * This configiration option has no real implication, and it should be - * left untouched. - */ -#define UIP_TIME_WAIT_TIMEOUT 120 - - -/** @} */ -/*------------------------------------------------------------------------------*/ -/** - * \name ARP configuration options - * @{ - */ - -/** - * The size of the ARP table. - * - * This option should be set to a larger value if this uIP node will - * have many connections from the local network. - * - * \hideinitializer - */ -#ifdef UIP_CONF_ARPTAB_SIZE -#define UIP_ARPTAB_SIZE UIP_CONF_ARPTAB_SIZE -#else -#define UIP_ARPTAB_SIZE 8 -#endif - -/** - * The maxium age of ARP table entries measured in 10ths of seconds. - * - * An UIP_ARP_MAXAGE of 120 corresponds to 20 minutes (BSD - * default). - */ -#define UIP_ARP_MAXAGE 120 - -/** @} */ - -/*------------------------------------------------------------------------------*/ - -/** - * \name General configuration options - * @{ - */ - -/** - * The size of the uIP packet buffer. - * - * The uIP packet buffer should not be smaller than 60 bytes, and does - * not need to be larger than 1500 bytes. Lower size results in lower - * TCP throughput, larger size results in higher TCP throughput. - * - * \hideinitializer - */ -#ifndef UIP_CONF_BUFFER_SIZE -#define UIP_BUFSIZE 400 -#else /* UIP_CONF_BUFFER_SIZE */ -#define UIP_BUFSIZE UIP_CONF_BUFFER_SIZE -#endif /* UIP_CONF_BUFFER_SIZE */ - - -/** - * Determines if statistics support should be compiled in. - * - * The statistics is useful for debugging and to show the user. - * - * \hideinitializer - */ -#ifndef UIP_CONF_STATISTICS -#define UIP_STATISTICS 0 -#else /* UIP_CONF_STATISTICS */ -#define UIP_STATISTICS UIP_CONF_STATISTICS -#endif /* UIP_CONF_STATISTICS */ - -/** - * Determines if logging of certain events should be compiled in. - * - * This is useful mostly for debugging. The function uip_log() - * must be implemented to suit the architecture of the project, if - * logging is turned on. - * - * \hideinitializer - */ -#ifndef UIP_CONF_LOGGING -#define UIP_LOGGING 0 -#else /* UIP_CONF_LOGGING */ -#define UIP_LOGGING UIP_CONF_LOGGING -#endif /* UIP_CONF_LOGGING */ - -/** - * Broadcast support. - * - * This flag configures IP broadcast support. This is useful only - * together with UDP. - * - * \hideinitializer - * - */ -#if UIP_UDP && UIP_CONF_BROADCAST -#define UIP_BROADCAST UIP_CONF_BROADCAST -#else /* UIP_CONF_BROADCAST */ -#define UIP_BROADCAST 0 -#endif /* UIP_CONF_BROADCAST */ - -/** - * Print out a uIP log message. - * - * This function must be implemented by the module that uses uIP, and - * is called by uIP whenever a log message is generated. - */ -void uip_log(char *msg); - -/** - * The link level header length. - * - * This is the offset into the uip_buf where the IP header can be - * found. For Ethernet, this should be set to 14. For SLIP, this - * should be set to 0. - * - * \hideinitializer - */ -#ifdef UIP_CONF_LLH_LEN -#define UIP_LLH_LEN UIP_CONF_LLH_LEN -#else /* UIP_CONF_LLH_LEN */ -#define UIP_LLH_LEN 14 -#endif /* UIP_CONF_LLH_LEN */ - -/** @} */ -/*------------------------------------------------------------------------------*/ -/** - * \name CPU architecture configuration - * @{ - * - * The CPU architecture configuration is where the endianess of the - * CPU on which uIP is to be run is specified. Most CPUs today are - * little endian, and the most notable exception are the Motorolas - * which are big endian. The BYTE_ORDER macro should be changed to - * reflect the CPU architecture on which uIP is to be run. - */ - -/** - * The byte order of the CPU architecture on which uIP is to be run. - * - * This option can be either BIG_ENDIAN (Motorola byte order) or - * LITTLE_ENDIAN (Intel byte order). - * - * \hideinitializer - */ -#ifdef UIP_CONF_BYTE_ORDER -#define UIP_BYTE_ORDER UIP_CONF_BYTE_ORDER -#else /* UIP_CONF_BYTE_ORDER */ -#define UIP_BYTE_ORDER UIP_LITTLE_ENDIAN -#endif /* UIP_CONF_BYTE_ORDER */ - -/** @} */ -/*------------------------------------------------------------------------------*/ - -/** - * \name Appication specific configurations - * @{ - * - * An uIP application is implemented using a single application - * function that is called by uIP whenever a TCP/IP event occurs. The - * name of this function must be registered with uIP at compile time - * using the UIP_APPCALL definition. - * - * uIP applications can store the application state within the - * uip_conn structure by specifying the type of the application - * structure by typedef:ing the type uip_tcp_appstate_t and uip_udp_appstate_t. - * - * The file containing the definitions must be included in the - * uipopt.h file. - * - * The following example illustrates how this can look. - \code - -void httpd_appcall(void); -#define UIP_APPCALL httpd_appcall - -struct httpd_state { - u8_t state; - u16_t count; - char *dataptr; - char *script; -}; -typedef struct httpd_state uip_tcp_appstate_t - \endcode - */ - -/** - * \var #define UIP_APPCALL - * - * The name of the application function that uIP should call in - * response to TCP/IP events. - * - */ - -/** - * \var typedef uip_tcp_appstate_t - * - * The type of the application state that is to be stored in the - * uip_conn structure. This usually is typedef:ed to a struct holding - * application state information. - */ - -/** - * \var typedef uip_udp_appstate_t - * - * The type of the application state that is to be stored in the - * uip_conn structure. This usually is typedef:ed to a struct holding - * application state information. - */ -/** @} */ -/** @} */ - -#endif /* __UIPOPT_H__ */ diff --git a/libraries/UIPEthernet/utility/util.h b/libraries/UIPEthernet/utility/util.h deleted file mode 100644 index 5042e82..0000000 --- a/libraries/UIPEthernet/utility/util.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef UTIL_H -#define UTIL_H - -#define htons(x) ( ((x)<<8) | (((x)>>8)&0xFF) ) -#define ntohs(x) htons(x) - -#define htonl(x) ( ((x)<<24 & 0xFF000000UL) | \ - ((x)<< 8 & 0x00FF0000UL) | \ - ((x)>> 8 & 0x0000FF00UL) | \ - ((x)>>24 & 0x000000FFUL) ) -#define ntohl(x) htonl(x) - -#endif diff --git a/libraries/UTFT/DefaultFonts.c b/libraries/UTFT/DefaultFonts.c deleted file mode 100644 index bc11d95..0000000 --- a/libraries/UTFT/DefaultFonts.c +++ /dev/null @@ -1,246 +0,0 @@ -// DO NOT ADD YOUR OWN FONTS TO THIS FILE -// If you want to use your own fonts you should just drop the font .c file into your sketch folder. -// ------------------------------------------------------------------------------------------------ - -#if defined(__AVR__) - #include - #define fontdatatype const uint8_t -#elif defined(__PIC32MX__) - #define PROGMEM - #define fontdatatype const unsigned char -#elif defined(__arm__) - #define PROGMEM - #define fontdatatype const unsigned char -#endif - -// SmallFont.c -// Font Size : 8x12 -// Memory usage : 1144 bytes -// # characters : 95 - -fontdatatype SmallFont[1144] PROGMEM={ -0x08,0x0C,0x20,0x5F, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // -0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x20,0x00,0x00, // ! -0x00,0x28,0x50,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // " -0x00,0x00,0x28,0x28,0xFC,0x28,0x50,0xFC,0x50,0x50,0x00,0x00, // # -0x00,0x20,0x78,0xA8,0xA0,0x60,0x30,0x28,0xA8,0xF0,0x20,0x00, // $ -0x00,0x00,0x48,0xA8,0xB0,0x50,0x28,0x34,0x54,0x48,0x00,0x00, // % -0x00,0x00,0x20,0x50,0x50,0x78,0xA8,0xA8,0x90,0x6C,0x00,0x00, // & -0x00,0x40,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ' -0x00,0x04,0x08,0x10,0x10,0x10,0x10,0x10,0x10,0x08,0x04,0x00, // ( -0x00,0x40,0x20,0x10,0x10,0x10,0x10,0x10,0x10,0x20,0x40,0x00, // ) -0x00,0x00,0x00,0x20,0xA8,0x70,0x70,0xA8,0x20,0x00,0x00,0x00, // * -0x00,0x00,0x20,0x20,0x20,0xF8,0x20,0x20,0x20,0x00,0x00,0x00, // + -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x80, // , -0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00, // - -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00, // . -0x00,0x08,0x10,0x10,0x10,0x20,0x20,0x40,0x40,0x40,0x80,0x00, // / -0x00,0x00,0x70,0x88,0x88,0x88,0x88,0x88,0x88,0x70,0x00,0x00, // 0 -0x00,0x00,0x20,0x60,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00, // 1 -0x00,0x00,0x70,0x88,0x88,0x10,0x20,0x40,0x80,0xF8,0x00,0x00, // 2 -0x00,0x00,0x70,0x88,0x08,0x30,0x08,0x08,0x88,0x70,0x00,0x00, // 3 -0x00,0x00,0x10,0x30,0x50,0x50,0x90,0x78,0x10,0x18,0x00,0x00, // 4 -0x00,0x00,0xF8,0x80,0x80,0xF0,0x08,0x08,0x88,0x70,0x00,0x00, // 5 -0x00,0x00,0x70,0x90,0x80,0xF0,0x88,0x88,0x88,0x70,0x00,0x00, // 6 -0x00,0x00,0xF8,0x90,0x10,0x20,0x20,0x20,0x20,0x20,0x00,0x00, // 7 -0x00,0x00,0x70,0x88,0x88,0x70,0x88,0x88,0x88,0x70,0x00,0x00, // 8 -0x00,0x00,0x70,0x88,0x88,0x88,0x78,0x08,0x48,0x70,0x00,0x00, // 9 -0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x20,0x00,0x00, // : -0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x20,0x00, // ; -0x00,0x04,0x08,0x10,0x20,0x40,0x20,0x10,0x08,0x04,0x00,0x00, // < -0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0xF8,0x00,0x00,0x00,0x00, // = -0x00,0x40,0x20,0x10,0x08,0x04,0x08,0x10,0x20,0x40,0x00,0x00, // > -0x00,0x00,0x70,0x88,0x88,0x10,0x20,0x20,0x00,0x20,0x00,0x00, // ? -0x00,0x00,0x70,0x88,0x98,0xA8,0xA8,0xB8,0x80,0x78,0x00,0x00, // @ -0x00,0x00,0x20,0x20,0x30,0x50,0x50,0x78,0x48,0xCC,0x00,0x00, // A -0x00,0x00,0xF0,0x48,0x48,0x70,0x48,0x48,0x48,0xF0,0x00,0x00, // B -0x00,0x00,0x78,0x88,0x80,0x80,0x80,0x80,0x88,0x70,0x00,0x00, // C -0x00,0x00,0xF0,0x48,0x48,0x48,0x48,0x48,0x48,0xF0,0x00,0x00, // D -0x00,0x00,0xF8,0x48,0x50,0x70,0x50,0x40,0x48,0xF8,0x00,0x00, // E -0x00,0x00,0xF8,0x48,0x50,0x70,0x50,0x40,0x40,0xE0,0x00,0x00, // F -0x00,0x00,0x38,0x48,0x80,0x80,0x9C,0x88,0x48,0x30,0x00,0x00, // G -0x00,0x00,0xCC,0x48,0x48,0x78,0x48,0x48,0x48,0xCC,0x00,0x00, // H -0x00,0x00,0xF8,0x20,0x20,0x20,0x20,0x20,0x20,0xF8,0x00,0x00, // I -0x00,0x00,0x7C,0x10,0x10,0x10,0x10,0x10,0x10,0x90,0xE0,0x00, // J -0x00,0x00,0xEC,0x48,0x50,0x60,0x50,0x50,0x48,0xEC,0x00,0x00, // K -0x00,0x00,0xE0,0x40,0x40,0x40,0x40,0x40,0x44,0xFC,0x00,0x00, // L -0x00,0x00,0xD8,0xD8,0xD8,0xD8,0xA8,0xA8,0xA8,0xA8,0x00,0x00, // M -0x00,0x00,0xDC,0x48,0x68,0x68,0x58,0x58,0x48,0xE8,0x00,0x00, // N -0x00,0x00,0x70,0x88,0x88,0x88,0x88,0x88,0x88,0x70,0x00,0x00, // O -0x00,0x00,0xF0,0x48,0x48,0x70,0x40,0x40,0x40,0xE0,0x00,0x00, // P -0x00,0x00,0x70,0x88,0x88,0x88,0x88,0xE8,0x98,0x70,0x18,0x00, // Q -0x00,0x00,0xF0,0x48,0x48,0x70,0x50,0x48,0x48,0xEC,0x00,0x00, // R -0x00,0x00,0x78,0x88,0x80,0x60,0x10,0x08,0x88,0xF0,0x00,0x00, // S -0x00,0x00,0xF8,0xA8,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00, // T -0x00,0x00,0xCC,0x48,0x48,0x48,0x48,0x48,0x48,0x30,0x00,0x00, // U -0x00,0x00,0xCC,0x48,0x48,0x50,0x50,0x30,0x20,0x20,0x00,0x00, // V -0x00,0x00,0xA8,0xA8,0xA8,0x70,0x50,0x50,0x50,0x50,0x00,0x00, // W -0x00,0x00,0xD8,0x50,0x50,0x20,0x20,0x50,0x50,0xD8,0x00,0x00, // X -0x00,0x00,0xD8,0x50,0x50,0x20,0x20,0x20,0x20,0x70,0x00,0x00, // Y -0x00,0x00,0xF8,0x90,0x10,0x20,0x20,0x40,0x48,0xF8,0x00,0x00, // Z -0x00,0x38,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x38,0x00, // [ -0x00,0x40,0x40,0x40,0x20,0x20,0x10,0x10,0x10,0x08,0x00,0x00, // -0x00,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x70,0x00, // ] -0x00,0x20,0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ^ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC, // _ -0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ' -0x00,0x00,0x00,0x00,0x00,0x30,0x48,0x38,0x48,0x3C,0x00,0x00, // a -0x00,0x00,0xC0,0x40,0x40,0x70,0x48,0x48,0x48,0x70,0x00,0x00, // b -0x00,0x00,0x00,0x00,0x00,0x38,0x48,0x40,0x40,0x38,0x00,0x00, // c -0x00,0x00,0x18,0x08,0x08,0x38,0x48,0x48,0x48,0x3C,0x00,0x00, // d -0x00,0x00,0x00,0x00,0x00,0x30,0x48,0x78,0x40,0x38,0x00,0x00, // e -0x00,0x00,0x1C,0x20,0x20,0x78,0x20,0x20,0x20,0x78,0x00,0x00, // f -0x00,0x00,0x00,0x00,0x00,0x3C,0x48,0x30,0x40,0x78,0x44,0x38, // g -0x00,0x00,0xC0,0x40,0x40,0x70,0x48,0x48,0x48,0xEC,0x00,0x00, // h -0x00,0x00,0x20,0x00,0x00,0x60,0x20,0x20,0x20,0x70,0x00,0x00, // i -0x00,0x00,0x10,0x00,0x00,0x30,0x10,0x10,0x10,0x10,0x10,0xE0, // j -0x00,0x00,0xC0,0x40,0x40,0x5C,0x50,0x70,0x48,0xEC,0x00,0x00, // k -0x00,0x00,0xE0,0x20,0x20,0x20,0x20,0x20,0x20,0xF8,0x00,0x00, // l -0x00,0x00,0x00,0x00,0x00,0xF0,0xA8,0xA8,0xA8,0xA8,0x00,0x00, // m -0x00,0x00,0x00,0x00,0x00,0xF0,0x48,0x48,0x48,0xEC,0x00,0x00, // n -0x00,0x00,0x00,0x00,0x00,0x30,0x48,0x48,0x48,0x30,0x00,0x00, // o -0x00,0x00,0x00,0x00,0x00,0xF0,0x48,0x48,0x48,0x70,0x40,0xE0, // p -0x00,0x00,0x00,0x00,0x00,0x38,0x48,0x48,0x48,0x38,0x08,0x1C, // q -0x00,0x00,0x00,0x00,0x00,0xD8,0x60,0x40,0x40,0xE0,0x00,0x00, // r -0x00,0x00,0x00,0x00,0x00,0x78,0x40,0x30,0x08,0x78,0x00,0x00, // s -0x00,0x00,0x00,0x20,0x20,0x70,0x20,0x20,0x20,0x18,0x00,0x00, // t -0x00,0x00,0x00,0x00,0x00,0xD8,0x48,0x48,0x48,0x3C,0x00,0x00, // u -0x00,0x00,0x00,0x00,0x00,0xEC,0x48,0x50,0x30,0x20,0x00,0x00, // v -0x00,0x00,0x00,0x00,0x00,0xA8,0xA8,0x70,0x50,0x50,0x00,0x00, // w -0x00,0x00,0x00,0x00,0x00,0xD8,0x50,0x20,0x50,0xD8,0x00,0x00, // x -0x00,0x00,0x00,0x00,0x00,0xEC,0x48,0x50,0x30,0x20,0x20,0xC0, // y -0x00,0x00,0x00,0x00,0x00,0x78,0x10,0x20,0x20,0x78,0x00,0x00, // z -0x00,0x18,0x10,0x10,0x10,0x20,0x10,0x10,0x10,0x10,0x18,0x00, // { -0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, // | -0x00,0x60,0x20,0x20,0x20,0x10,0x20,0x20,0x20,0x20,0x60,0x00, // } -0x40,0xA4,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ~ -}; - -// BigFont.c (C)2010 by Henning Karlsen -// Font Size : 16x16 -// Memory usage : 3044 bytes -// # characters : 95 - -fontdatatype BigFont[3044] PROGMEM={ -0x10,0x10,0x20,0x5F, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // -0x00,0x00,0x00,0x00,0x07,0x00,0x0F,0x80,0x0F,0x80,0x0F,0x80,0x0F,0x80,0x0F,0x80,0x07,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x00,0x00, // ! -0x00,0x00,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x06,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // " -0x00,0x00,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x7F,0xFE,0x7F,0xFE,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x7F,0xFE,0x7F,0xFE,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x00,0x00, // # -0x00,0x00,0x02,0x40,0x02,0x40,0x0F,0xF8,0x1F,0xF8,0x1A,0x40,0x1A,0x40,0x1F,0xF0,0x0F,0xF8,0x02,0x58,0x02,0x58,0x1F,0xF8,0x1F,0xF0,0x02,0x40,0x02,0x40,0x00,0x00, // $ -0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x10,0x0E,0x30,0x0E,0x70,0x00,0xE0,0x01,0xC0,0x03,0x80,0x07,0x00,0x0E,0x70,0x0C,0x70,0x08,0x70,0x00,0x00,0x00,0x00,0x00,0x00, // % -0x00,0x00,0x00,0x00,0x0F,0x00,0x19,0x80,0x19,0x80,0x19,0x80,0x0F,0x00,0x0F,0x08,0x0F,0x98,0x19,0xF8,0x18,0xF0,0x18,0xE0,0x19,0xF0,0x0F,0x98,0x00,0x00,0x00,0x00, // & -0x00,0x00,0x00,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ' -0x00,0x00,0x00,0x00,0x00,0xF0,0x01,0xC0,0x03,0x80,0x07,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x07,0x00,0x03,0x80,0x01,0xC0,0x00,0xF0,0x00,0x00,0x00,0x00, // ( -0x00,0x00,0x00,0x00,0x0F,0x00,0x03,0x80,0x01,0xC0,0x00,0xE0,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0xE0,0x01,0xC0,0x03,0x80,0x0F,0x00,0x00,0x00,0x00,0x00, // ) -0x00,0x00,0x00,0x00,0x01,0x80,0x11,0x88,0x09,0x90,0x07,0xE0,0x07,0xE0,0x3F,0xFC,0x3F,0xFC,0x07,0xE0,0x07,0xE0,0x09,0x90,0x11,0x88,0x01,0x80,0x00,0x00,0x00,0x00, // * -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x01,0x80,0x01,0x80,0x0F,0xF0,0x0F,0xF0,0x01,0x80,0x01,0x80,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // + -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x0E,0x00,0x00,0x00, // , -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xF8,0x1F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // - -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x00,0x00,0x00,0x00, // , -0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x06,0x00,0x0E,0x00,0x1C,0x00,0x38,0x00,0x70,0x00,0xE0,0x01,0xC0,0x03,0x80,0x07,0x00,0x0E,0x00,0x1C,0x00,0x00,0x00,0x00,0x00, // / - -0x00,0x00,0x00,0x00,0x0F,0xF0,0x1C,0x38,0x1C,0x78,0x1C,0xF8,0x1C,0xF8,0x1D,0xB8,0x1D,0xB8,0x1F,0x38,0x1F,0x38,0x1E,0x38,0x1C,0x38,0x0F,0xF0,0x00,0x00,0x00,0x00, // 0 -0x00,0x00,0x00,0x00,0x01,0x80,0x01,0x80,0x03,0x80,0x1F,0x80,0x1F,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x1F,0xF0,0x00,0x00,0x00,0x00, // 1 -0x00,0x00,0x00,0x00,0x0F,0xE0,0x1C,0x70,0x1C,0x38,0x00,0x38,0x00,0x70,0x00,0xE0,0x01,0xC0,0x03,0x80,0x07,0x00,0x0E,0x38,0x1C,0x38,0x1F,0xF8,0x00,0x00,0x00,0x00, // 2 -0x00,0x00,0x00,0x00,0x0F,0xE0,0x1C,0x70,0x1C,0x38,0x00,0x38,0x00,0x70,0x03,0xC0,0x03,0xC0,0x00,0x70,0x00,0x38,0x1C,0x38,0x1C,0x70,0x0F,0xE0,0x00,0x00,0x00,0x00, // 3 -0x00,0x00,0x00,0x00,0x00,0xE0,0x01,0xE0,0x03,0xE0,0x06,0xE0,0x0C,0xE0,0x18,0xE0,0x1F,0xF8,0x1F,0xF8,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x03,0xF8,0x00,0x00,0x00,0x00, // 4 -0x00,0x00,0x00,0x00,0x1F,0xF8,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1F,0xE0,0x1F,0xF0,0x00,0x78,0x00,0x38,0x1C,0x38,0x1C,0x70,0x0F,0xE0,0x00,0x00,0x00,0x00, // 5 -0x00,0x00,0x00,0x00,0x03,0xE0,0x07,0x00,0x0E,0x00,0x1C,0x00,0x1C,0x00,0x1F,0xF0,0x1F,0xF8,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x0F,0xF0,0x00,0x00,0x00,0x00, // 6 -0x00,0x00,0x00,0x00,0x1F,0xFC,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x00,0x1C,0x00,0x38,0x00,0x70,0x00,0xE0,0x01,0xC0,0x03,0x80,0x03,0x80,0x03,0x80,0x00,0x00,0x00,0x00, // 7 -0x00,0x00,0x00,0x00,0x0F,0xF0,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1F,0x38,0x07,0xE0,0x07,0xE0,0x1C,0xF8,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x0F,0xF0,0x00,0x00,0x00,0x00, // 8 -0x00,0x00,0x00,0x00,0x0F,0xF0,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1F,0xF8,0x0F,0xF8,0x00,0x38,0x00,0x38,0x00,0x70,0x00,0xE0,0x07,0xC0,0x00,0x00,0x00,0x00, // 9 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x03,0x80,0x03,0x80,0x00,0x00,0x00,0x00,0x03,0x80,0x03,0x80,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // : -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x03,0x80,0x03,0x80,0x00,0x00,0x00,0x00,0x03,0x80,0x03,0x80,0x03,0x80,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ; -0x00,0x00,0x00,0x70,0x00,0xE0,0x01,0xC0,0x03,0x80,0x07,0x00,0x0E,0x00,0x1C,0x00,0x1C,0x00,0x0E,0x00,0x07,0x00,0x03,0x80,0x01,0xC0,0x00,0xE0,0x00,0x70,0x00,0x00, // < -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFC,0x3F,0xFC,0x00,0x00,0x00,0x00,0x3F,0xFC,0x3F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // = -0x00,0x00,0x1C,0x00,0x0E,0x00,0x07,0x00,0x03,0x80,0x01,0xC0,0x00,0xE0,0x00,0x70,0x00,0x70,0x00,0xE0,0x01,0xC0,0x03,0x80,0x07,0x00,0x0E,0x00,0x1C,0x00,0x00,0x00, // > -0x00,0x00,0x03,0xC0,0x0F,0xF0,0x1E,0x78,0x18,0x38,0x00,0x38,0x00,0x70,0x00,0xE0,0x01,0xC0,0x01,0xC0,0x00,0x00,0x00,0x00,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x00,0x00, // ? - -0x00,0x00,0x0F,0xF8,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0xFC,0x1C,0xFC,0x1C,0xFC,0x1C,0xFC,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1F,0xF0,0x07,0xF8,0x00,0x00, // @ -0x00,0x00,0x00,0x00,0x03,0xC0,0x07,0xE0,0x0E,0x70,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1F,0xF8,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x00,0x00,0x00,0x00, // A -0x00,0x00,0x00,0x00,0x1F,0xF0,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0F,0xF0,0x0F,0xF0,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x1F,0xF0,0x00,0x00,0x00,0x00, // B -0x00,0x00,0x00,0x00,0x07,0xF0,0x0E,0x38,0x1C,0x38,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x38,0x0E,0x38,0x07,0xF0,0x00,0x00,0x00,0x00, // C -0x00,0x00,0x00,0x00,0x1F,0xE0,0x0E,0x70,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x70,0x1F,0xE0,0x00,0x00,0x00,0x00, // D -0x00,0x00,0x00,0x00,0x1F,0xF8,0x0E,0x18,0x0E,0x08,0x0E,0x00,0x0E,0x30,0x0F,0xF0,0x0F,0xF0,0x0E,0x30,0x0E,0x00,0x0E,0x08,0x0E,0x18,0x1F,0xF8,0x00,0x00,0x00,0x00, // E -0x00,0x00,0x00,0x00,0x1F,0xF8,0x0E,0x18,0x0E,0x08,0x0E,0x00,0x0E,0x30,0x0F,0xF0,0x0F,0xF0,0x0E,0x30,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x1F,0x00,0x00,0x00,0x00,0x00, // F -0x00,0x00,0x00,0x00,0x07,0xF0,0x0E,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0xF8,0x1C,0x38,0x1C,0x38,0x0E,0x38,0x07,0xF8,0x00,0x00,0x00,0x00, // G -0x00,0x00,0x00,0x00,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1F,0xF0,0x1F,0xF0,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x00,0x00,0x00,0x00, // H -0x00,0x00,0x00,0x00,0x0F,0xE0,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x0F,0xE0,0x00,0x00,0x00,0x00, // I -0x00,0x00,0x00,0x00,0x01,0xFC,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x38,0x70,0x38,0x70,0x38,0x70,0x38,0x70,0x0F,0xE0,0x00,0x00,0x00,0x00, // J -0x00,0x00,0x00,0x00,0x1E,0x38,0x0E,0x38,0x0E,0x70,0x0E,0xE0,0x0F,0xC0,0x0F,0x80,0x0F,0x80,0x0F,0xC0,0x0E,0xE0,0x0E,0x70,0x0E,0x38,0x1E,0x38,0x00,0x00,0x00,0x00, // K -0x00,0x00,0x00,0x00,0x1F,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x08,0x0E,0x18,0x0E,0x38,0x1F,0xF8,0x00,0x00,0x00,0x00, // L -0x00,0x00,0x00,0x00,0x1C,0x1C,0x1E,0x3C,0x1F,0x7C,0x1F,0xFC,0x1F,0xFC,0x1D,0xDC,0x1C,0x9C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x00,0x00,0x00,0x00, // M -0x00,0x00,0x00,0x00,0x1C,0x1C,0x1C,0x1C,0x1E,0x1C,0x1F,0x1C,0x1F,0x9C,0x1D,0xDC,0x1C,0xFC,0x1C,0x7C,0x1C,0x3C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x00,0x00,0x00,0x00, // N -0x00,0x00,0x00,0x00,0x03,0xE0,0x07,0xF0,0x0E,0x38,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x0E,0x38,0x07,0xF0,0x03,0xE0,0x00,0x00,0x00,0x00, // O - -0x00,0x00,0x00,0x00,0x1F,0xF0,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0F,0xF0,0x0F,0xF0,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x1F,0x00,0x00,0x00,0x00,0x00, // P -0x00,0x00,0x00,0x00,0x03,0xE0,0x0F,0x78,0x0E,0x38,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x7C,0x1C,0xFC,0x0F,0xF8,0x0F,0xF8,0x00,0x38,0x00,0xFC,0x00,0x00, // Q -0x00,0x00,0x00,0x00,0x1F,0xF0,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0F,0xF0,0x0F,0xF0,0x0E,0x70,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x1E,0x38,0x00,0x00,0x00,0x00, // R -0x00,0x00,0x00,0x00,0x0F,0xF0,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x00,0x0F,0xE0,0x07,0xF0,0x00,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x0F,0xF0,0x00,0x00,0x00,0x00, // S -0x00,0x00,0x00,0x00,0x1F,0xFC,0x19,0xCC,0x11,0xC4,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x07,0xF0,0x00,0x00,0x00,0x00, // T -0x00,0x00,0x00,0x00,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x0F,0xE0,0x00,0x00,0x00,0x00, // U -0x00,0x00,0x00,0x00,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x0E,0xE0,0x07,0xC0,0x03,0x80,0x00,0x00,0x00,0x00, // V -0x00,0x00,0x00,0x00,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x9C,0x1C,0x9C,0x1C,0x9C,0x0F,0xF8,0x0F,0xF8,0x07,0x70,0x07,0x70,0x00,0x00,0x00,0x00, // W -0x00,0x00,0x00,0x00,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x0E,0xE0,0x07,0xC0,0x03,0x80,0x03,0x80,0x07,0xC0,0x0E,0xE0,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x00,0x00,0x00,0x00, // X -0x00,0x00,0x00,0x00,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x0E,0xE0,0x07,0xC0,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x0F,0xE0,0x00,0x00,0x00,0x00, // Y -0x00,0x00,0x00,0x00,0x1F,0xF8,0x1C,0x38,0x18,0x38,0x10,0x70,0x00,0xE0,0x01,0xC0,0x03,0x80,0x07,0x00,0x0E,0x08,0x1C,0x18,0x1C,0x38,0x1F,0xF8,0x00,0x00,0x00,0x00, // Z -0x00,0x00,0x00,0x00,0x07,0xF0,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0xF0,0x00,0x00,0x00,0x00, // [ -0x00,0x00,0x00,0x00,0x10,0x00,0x18,0x00,0x1C,0x00,0x0E,0x00,0x07,0x00,0x03,0x80,0x01,0xC0,0x00,0xE0,0x00,0x70,0x00,0x38,0x00,0x1C,0x00,0x07,0x00,0x00,0x00,0x00, // -0x00,0x00,0x00,0x00,0x07,0xF0,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x07,0xF0,0x00,0x00,0x00,0x00, // ] -0x00,0x00,0x01,0x80,0x03,0xC0,0x07,0xE0,0x0E,0x70,0x1C,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ^ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0x7F,0xFF, // _ - -0x00,0x00,0x00,0x00,0x1C,0x00,0x1C,0x00,0x07,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ' -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xE0,0x00,0x70,0x00,0x70,0x0F,0xF0,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x0F,0xD8,0x00,0x00,0x00,0x00, // a -0x00,0x00,0x00,0x00,0x1E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0F,0xF0,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x1B,0xF0,0x00,0x00,0x00,0x00, // b -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xE0,0x1C,0x70,0x1C,0x70,0x1C,0x00,0x1C,0x00,0x1C,0x70,0x1C,0x70,0x0F,0xE0,0x00,0x00,0x00,0x00, // c -0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x70,0x00,0x70,0x00,0x70,0x0F,0xF0,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x0F,0xD8,0x00,0x00,0x00,0x00, // d -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xE0,0x1C,0x70,0x1C,0x70,0x1F,0xF0,0x1C,0x00,0x1C,0x70,0x1C,0x70,0x0F,0xE0,0x00,0x00,0x00,0x00, // e -0x00,0x00,0x00,0x00,0x03,0xE0,0x07,0x70,0x07,0x70,0x07,0x00,0x07,0x00,0x1F,0xE0,0x1F,0xE0,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x1F,0xC0,0x00,0x00,0x00,0x00, // f -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xD8,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x0F,0xF0,0x07,0xF0,0x00,0x70,0x1C,0x70,0x0F,0xE0, // g -0x00,0x00,0x00,0x00,0x1E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0xF0,0x0F,0x38,0x0F,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x1E,0x38,0x00,0x00,0x00,0x00, // h -0x00,0x00,0x00,0x00,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x00,0x00,0x0F,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x0F,0xF8,0x00,0x00,0x00,0x00, // i -0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x00,0x03,0xF0,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x1C,0x70,0x0C,0xF0,0x07,0xE0, // j -0x00,0x00,0x00,0x00,0x1E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x38,0x0E,0x70,0x0E,0xE0,0x0F,0xC0,0x0E,0xE0,0x0E,0x70,0x0E,0x38,0x1E,0x38,0x00,0x00,0x00,0x00, // k -0x00,0x00,0x00,0x00,0x0F,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x0F,0xF8,0x00,0x00,0x00,0x00, // l -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xF8,0x1C,0x9C,0x1C,0x9C,0x1C,0x9C,0x1C,0x9C,0x1C,0x9C,0x1C,0x9C,0x1C,0x9C,0x00,0x00,0x00,0x00, // m -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xE0,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x00,0x00,0x00,0x00, // n -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xE0,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x0F,0xE0,0x00,0x00,0x00,0x00, // o - -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1B,0xF0,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0F,0xF0,0x0E,0x00,0x0E,0x00,0x1F,0x00, // p -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xB0,0x38,0xE0,0x38,0xE0,0x38,0xE0,0x38,0xE0,0x38,0xE0,0x1F,0xE0,0x00,0xE0,0x00,0xE0,0x01,0xF0, // q -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0xF0,0x0F,0xF8,0x0F,0x38,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x1F,0x00,0x00,0x00,0x00,0x00, // r -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xE0,0x1C,0x30,0x1C,0x30,0x0F,0x80,0x03,0xE0,0x18,0x70,0x18,0x70,0x0F,0xE0,0x00,0x00,0x00,0x00, // s -0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x03,0x00,0x07,0x00,0x1F,0xF0,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x70,0x07,0x70,0x03,0xE0,0x00,0x00,0x00,0x00, // t -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x0F,0xD8,0x00,0x00,0x00,0x00, // u -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x0E,0xE0,0x07,0xC0,0x03,0x80,0x00,0x00,0x00,0x00, // v -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x9C,0x1C,0x9C,0x0F,0xF8,0x07,0x70,0x07,0x70,0x00,0x00,0x00,0x00, // w -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0xE0,0x1C,0xE0,0x0F,0xC0,0x07,0x80,0x07,0x80,0x0F,0xC0,0x1C,0xE0,0x1C,0xE0,0x00,0x00,0x00,0x00, // x -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x07,0xF0,0x03,0xE0,0x00,0xE0,0x01,0xC0,0x1F,0x80, // y -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xE0,0x18,0xE0,0x11,0xC0,0x03,0x80,0x07,0x00,0x0E,0x20,0x1C,0x60,0x1F,0xE0,0x00,0x00,0x00,0x00, // z -0x00,0x00,0x00,0x00,0x01,0xF8,0x03,0x80,0x03,0x80,0x03,0x80,0x07,0x00,0x1C,0x00,0x1C,0x00,0x07,0x00,0x03,0x80,0x03,0x80,0x03,0x80,0x01,0xF8,0x00,0x00,0x00,0x00, // { -0x00,0x00,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x00,0x00, // | -0x00,0x00,0x00,0x00,0x1F,0x80,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x00,0xE0,0x00,0x38,0x00,0x38,0x00,0xE0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x1F,0x80,0x00,0x00,0x00,0x00, // } -0x00,0x00,0x00,0x00,0x1F,0x1C,0x3B,0x9C,0x39,0xDC,0x38,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 // ~ -}; - -// SevenSegNumFont.c -// Font Size : 32x50 -// Memory usage : 2004 bytes -// # characters : 10 - -fontdatatype SevenSegNumFont[2004] PROGMEM={ -0x20,0x32,0x30,0x0A, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x60,0x0C,0xFF,0xFE,0xF0,0x1E,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3E,0x00,0x00,0x78,0x38,0x00,0x00,0x18,0x20,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x38,0x00,0x00,0x18,0x3E,0x00,0x00,0x78,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x1E,0x00,0x00,0xF0,0x0C,0xFF,0xFE,0x60,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x00,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 0 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0xF0,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x78,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 1 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x60,0x00,0xFF,0xFE,0xF0,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x00,0x78,0x01,0xFF,0xFE,0x18,0x03,0xFF,0xFF,0x88,0x0F,0xFF,0xFF,0xE0,0x27,0xFF,0xFF,0xC0,0x39,0xFF,0xFF,0x00,0x3E,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x0C,0xFF,0xFE,0x00,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x00,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 2 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x60,0x00,0xFF,0xFE,0xF0,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x00,0x78,0x01,0xFF,0xFE,0x18,0x03,0xFF,0xFF,0x88,0x0F,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xC0,0x01,0xFF,0xFF,0x18,0x00,0x00,0x00,0x78,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x00,0xF0,0x00,0xFF,0xFE,0x60,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x00,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 3 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x0C,0x00,0x00,0xF0,0x1E,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3E,0x00,0x00,0x78,0x39,0xFF,0xFE,0x18,0x23,0xFF,0xFF,0x88,0x0F,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xC0,0x01,0xFF,0xFF,0x18,0x00,0x00,0x00,0x78,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 4 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x00,0x0C,0xFF,0xFE,0x00,0x1E,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0x39,0xFF,0xFE,0x00,0x23,0xFF,0xFF,0x80,0x0F,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xC0,0x01,0xFF,0xFF,0x18,0x00,0x00,0x00,0x78,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x00,0xF0,0x00,0xFF,0xFE,0x60,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x00,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 5 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x00,0x0C,0xFF,0xFE,0x00,0x1E,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0x39,0xFF,0xFE,0x00,0x23,0xFF,0xFF,0x80,0x0F,0xFF,0xFF,0xE0,0x27,0xFF,0xFF,0xC0,0x39,0xFF,0xFF,0x18,0x3E,0x00,0x00,0x78,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x1E,0x00,0x00,0xF0,0x0C,0xFF,0xFE,0x60,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x00,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 6 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x60,0x00,0xFF,0xFE,0xF0,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x78,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 7 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x60,0x0C,0xFF,0xFE,0xF0,0x1E,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3E,0x00,0x00,0x78,0x39,0xFF,0xFE,0x18,0x23,0xFF,0xFF,0x88,0x0F,0xFF,0xFF,0xE0,0x27,0xFF,0xFF,0xC0,0x39,0xFF,0xFF,0x18,0x3E,0x00,0x00,0x78,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x1E,0x00,0x00,0xF0,0x0C,0xFF,0xFE,0x60,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x00,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 8 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x60,0x0C,0xFF,0xFE,0xF0,0x1E,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3E,0x00,0x00,0x78,0x39,0xFF,0xFE,0x18,0x23,0xFF,0xFF,0x88,0x0F,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0xC0,0x01,0xFF,0xFF,0x18,0x00,0x00,0x00,0x78,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x00,0xF0,0x00,0xFF,0xFE,0x60,0x01,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x00,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 9 -}; diff --git a/libraries/UTFT/License - CC BY-NC-SA 3.0 - Legal.pdf b/libraries/UTFT/License - CC BY-NC-SA 3.0 - Legal.pdf deleted file mode 100644 index ed326c9..0000000 Binary files a/libraries/UTFT/License - CC BY-NC-SA 3.0 - Legal.pdf and /dev/null differ diff --git a/libraries/UTFT/License - CC BY-NC-SA 3.0 - Summary.pdf b/libraries/UTFT/License - CC BY-NC-SA 3.0 - Summary.pdf deleted file mode 100644 index b35e677..0000000 Binary files a/libraries/UTFT/License - CC BY-NC-SA 3.0 - Summary.pdf and /dev/null differ diff --git a/libraries/UTFT/Tools/ImageConverter565.exe b/libraries/UTFT/Tools/ImageConverter565.exe deleted file mode 100644 index cca5c39..0000000 Binary files a/libraries/UTFT/Tools/ImageConverter565.exe and /dev/null differ diff --git a/libraries/UTFT/Tools/ImgConv.exe b/libraries/UTFT/Tools/ImgConv.exe deleted file mode 100644 index 229ae8b..0000000 Binary files a/libraries/UTFT/Tools/ImgConv.exe and /dev/null differ diff --git a/libraries/UTFT/Tools/Online-tool - ImageConverter 565.url b/libraries/UTFT/Tools/Online-tool - ImageConverter 565.url deleted file mode 100644 index e41696b..0000000 --- a/libraries/UTFT/Tools/Online-tool - ImageConverter 565.url +++ /dev/null @@ -1,7 +0,0 @@ -[InternetShortcut] -URL=http://www.henningkarlsen.com/electronics/t_imageconverter565.php -IDList= -IconFile=http://www.henningkarlsen.com/favicon.ico -IconIndex=1 -[{000214A0-0000-0000-C000-000000000046}] -Prop3=19,2 diff --git a/libraries/UTFT/UTFT.cpp b/libraries/UTFT/UTFT.cpp deleted file mode 100644 index 17da918..0000000 --- a/libraries/UTFT/UTFT.cpp +++ /dev/null @@ -1,1335 +0,0 @@ -/* - UTFT.cpp - Arduino/chipKit library support for Color TFT LCD Boards - Copyright (C)2010-2014 Henning Karlsen. All right reserved - - This library is the continuation of my ITDB02_Graph, ITDB02_Graph16 - and RGB_GLCD libraries for Arduino and chipKit. As the number of - supported display modules and controllers started to increase I felt - it was time to make a single, universal library as it will be much - easier to maintain in the future. - - Basic functionality of this library was origianlly based on the - demo-code provided by ITead studio (for the ITDB02 modules) and - NKC Electronics (for the RGB GLCD module/shield). - - This library supports a number of 8bit, 16bit and serial graphic - displays, and will work with both Arduino and chipKit boards. For a - full list of tested display modules and controllers, see the - document UTFT_Supported_display_modules_&_controllers.pdf. - - When using 8bit and 16bit display modules there are some - requirements you must adhere to. These requirements can be found - in the document UTFT_Requirements.pdf. - There are no special requirements when using serial displays. - - You can always find the latest version of the library at - http://electronics.henningkarlsen.com/ - - If you make any modifications or improvements to the code, I would - appreciate that you share the code with me so that I might include - it in the next release. I can be contacted through - http://electronics.henningkarlsen.com/contact.php. - - This library is free software; you can redistribute it and/or - modify it under the terms of the CC BY-NC-SA 3.0 license. - Please see the included documents for further information. - - Commercial use of this library requires you to buy a license that - will allow commercial use. This includes using the library, - modified or not, as a tool to sell products. - - The license applies to all part of the library including the - examples and tools supplied with the library. -*/ - -#include "UTFT.h" -#include - -// Include hardware-specific functions for the correct MCU -#if defined(__AVR__) - #include - #include "hardware/avr/HW_AVR.h" - #if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) - #include "hardware/avr/HW_ATmega1280.h" - #elif defined(__AVR_ATmega328P__) - #include "hardware/avr/HW_ATmega328P.h" - #elif defined(__AVR_ATmega32U4__) - #include "hardware/avr/HW_ATmega32U4.h" - #elif defined(__AVR_ATmega168__) - #error "ATmega168 MCUs are not supported because they have too little flash memory!" - #elif defined(__AVR_ATmega1284P__) - #include "hardware/avr/HW_ATmega1284P.h" - #else - #error "Unsupported AVR MCU!" - #endif -#elif defined(__PIC32MX__) - #include "hardware/pic32/HW_PIC32.h" - #if defined(__32MX320F128H__) - #pragma message("Compiling for chipKIT UNO32 (PIC32MX320F128H)") - #include "hardware/pic32/HW_PIC32MX320F128H.h" - #elif defined(__32MX340F512H__) - #pragma message("Compiling for chipKIT uC32 (PIC32MX340F512H)") - #include "hardware/pic32/HW_PIC32MX340F512H.h" - #elif defined(__32MX795F512L__) - #pragma message("Compiling for chipKIT MAX32 (PIC32MX795F512L)") - #include "hardware/pic32/HW_PIC32MX795F512L.h" - #else - #error "Unsupported PIC32 MCU!" - #endif -#elif defined(__arm__) - #include "hardware/arm/HW_ARM.h" - #if defined(__SAM3X8E__) - #pragma message("Compiling for Arduino Due (AT91SAM3X8E)...") - #include "hardware/arm/HW_SAM3X8E.h" - #elif defined(__MK20DX128__) || defined(__MK20DX256__) - #pragma message("Compiling for Teensy 3.x (MK20DX128VLH7 / MK20DX256VLH7)...") - #include "hardware/arm/HW_MX20DX256.h" - #else - #error "Unsupported ARM MCU!" - #endif -#endif -#include "memorysaver.h" - -UTFT::UTFT() -{ -} - -UTFT::UTFT(byte model, int RS, int WR, int CS, int RST, int SER) -{ - word dsx[] = {239, 239, 239, 239, 239, 239, 175, 175, 239, 127, 127, 239, 271, 479, 239, 239, 239, 239, 239, 239, 479, 319, 239, 175, 127, 239, 239, 319, 319, 799, 127}; - word dsy[] = {319, 399, 319, 319, 319, 319, 219, 219, 399, 159, 127, 319, 479, 799, 319, 319, 319, 319, 319, 319, 799, 479, 319, 219, 159, 319, 319, 479, 479, 479, 159}; - byte dtm[] = {16, 16, 16, 8, 8, 16, 8, SERIAL_4PIN, 16, SERIAL_5PIN, SERIAL_5PIN, 16, 16, 16, 8, 16, LATCHED_16, 8, 16, 8, 16, 16, 16, 8, SERIAL_5PIN, SERIAL_5PIN, SERIAL_4PIN, 16, 16, 16, SERIAL_5PIN}; - - disp_x_size = dsx[model]; - disp_y_size = dsy[model]; - display_transfer_mode = dtm[model]; - display_model = model; - - __p1 = RS; - __p2 = WR; - __p3 = CS; - __p4 = RST; - __p5 = SER; - - if (display_transfer_mode == SERIAL_4PIN) - { - display_transfer_mode=1; - display_serial_mode=SERIAL_4PIN; - } - if (display_transfer_mode == SERIAL_5PIN) - { - display_transfer_mode=1; - display_serial_mode=SERIAL_5PIN; - } - - if (display_transfer_mode!=1) - { - _set_direction_registers(display_transfer_mode); - P_RS = portOutputRegister(digitalPinToPort(RS)); - B_RS = digitalPinToBitMask(RS); - P_WR = portOutputRegister(digitalPinToPort(WR)); - B_WR = digitalPinToBitMask(WR); - P_CS = portOutputRegister(digitalPinToPort(CS)); - B_CS = digitalPinToBitMask(CS); - P_RST = portOutputRegister(digitalPinToPort(RST)); - B_RST = digitalPinToBitMask(RST); - if (display_transfer_mode==LATCHED_16) - { - P_ALE = portOutputRegister(digitalPinToPort(SER)); - B_ALE = digitalPinToBitMask(SER); - cbi(P_ALE, B_ALE); - pinMode(8,OUTPUT); - digitalWrite(8, LOW); - } - } - else - { - P_SDA = portOutputRegister(digitalPinToPort(RS)); - B_SDA = digitalPinToBitMask(RS); - P_SCL = portOutputRegister(digitalPinToPort(WR)); - B_SCL = digitalPinToBitMask(WR); - P_CS = portOutputRegister(digitalPinToPort(CS)); - B_CS = digitalPinToBitMask(CS); - if (RST != NOTINUSE) - { - P_RST = portOutputRegister(digitalPinToPort(RST)); - B_RST = digitalPinToBitMask(RST); - } - if (display_serial_mode!=SERIAL_4PIN) - { - P_RS = portOutputRegister(digitalPinToPort(SER)); - B_RS = digitalPinToBitMask(SER); - } - } -} - -void UTFT::LCD_Write_COM(char VL) -{ - if (display_transfer_mode!=1) - { - cbi(P_RS, B_RS); - LCD_Writ_Bus(0x00,VL,display_transfer_mode); - } - else - LCD_Writ_Bus(0x00,VL,display_transfer_mode); -} - -void UTFT::LCD_Write_DATA(char VH,char VL) -{ - if (display_transfer_mode!=1) - { - sbi(P_RS, B_RS); - LCD_Writ_Bus(VH,VL,display_transfer_mode); - } - else - { - LCD_Writ_Bus(0x01,VH,display_transfer_mode); - LCD_Writ_Bus(0x01,VL,display_transfer_mode); - } -} - -void UTFT::LCD_Write_DATA(char VL) -{ - if (display_transfer_mode!=1) - { - sbi(P_RS, B_RS); - LCD_Writ_Bus(0x00,VL,display_transfer_mode); - } - else - LCD_Writ_Bus(0x01,VL,display_transfer_mode); -} - -void UTFT::LCD_Write_COM_DATA(char com1,int dat1) -{ - LCD_Write_COM(com1); - LCD_Write_DATA(dat1>>8,dat1); -} - -void UTFT::InitLCD(byte orientation) -{ - orient=orientation; - _hw_special_init(); - - pinMode(__p1,OUTPUT); - pinMode(__p2,OUTPUT); - pinMode(__p3,OUTPUT); - if (__p4 != NOTINUSE) - pinMode(__p4,OUTPUT); - if ((display_transfer_mode==LATCHED_16) or ((display_transfer_mode==1) and (display_serial_mode==SERIAL_5PIN))) - pinMode(__p5,OUTPUT); - if (display_transfer_mode!=1) - _set_direction_registers(display_transfer_mode); - - sbi(P_RST, B_RST); - delay(5); - cbi(P_RST, B_RST); - delay(15); - sbi(P_RST, B_RST); - delay(15); - - cbi(P_CS, B_CS); - - switch(display_model) - { -#ifndef DISABLE_HX8347A - #include "tft_drivers/hx8347a/initlcd.h" -#endif -#ifndef DISABLE_ILI9327 - #include "tft_drivers/ili9327/initlcd.h" -#endif -#ifndef DISABLE_SSD1289 - #include "tft_drivers/ssd1289/initlcd.h" -#endif -#ifndef DISABLE_ILI9325C - #include "tft_drivers/ili9325c/initlcd.h" -#endif -#ifndef DISABLE_ILI9325D - #include "tft_drivers/ili9325d/default/initlcd.h" -#endif -#ifndef DISABLE_ILI9325D_ALT - #include "tft_drivers/ili9325d/alt/initlcd.h" -#endif -#ifndef DISABLE_HX8340B_8 - #include "tft_drivers/hx8340b/8/initlcd.h" -#endif -#ifndef DISABLE_HX8340B_S - #include "tft_drivers/hx8340b/s/initlcd.h" -#endif -#ifndef DISABLE_ST7735 - #include "tft_drivers/st7735/initlcd.h" -#endif -#ifndef DISABLE_PCF8833 - #include "tft_drivers/pcf8833/initlcd.h" -#endif -#ifndef DISABLE_S1D19122 - #include "tft_drivers/s1d19122/initlcd.h" -#endif -#ifndef DISABLE_HX8352A - #include "tft_drivers/hx8352a/initlcd.h" -#endif -#ifndef DISABLE_SSD1963_480 - #include "tft_drivers/ssd1963/480/initlcd.h" -#endif -#ifndef DISABLE_SSD1963_800 - #include "tft_drivers/ssd1963/800/initlcd.h" -#endif -#ifndef DISABLE_SSD1963_800_ALT - #include "tft_drivers/ssd1963/800alt/initlcd.h" -#endif -#ifndef DISABLE_S6D1121 - #include "tft_drivers/s6d1121/initlcd.h" -#endif -#ifndef DISABLE_ILI9320 - #include "tft_drivers/ili9320/initlcd.h" -#endif -#ifndef DISABLE_ILI9481 - #include "tft_drivers/ili9481/initlcd.h" -#endif -#ifndef DISABLE_S6D0164 - #include "tft_drivers/s6d0164/initlcd.h" -#endif -#ifndef DISABLE_ST7735S - #include "tft_drivers/st7735s/initlcd.h" -#endif -#ifndef DISABLE_ILI9341_S4P - #include "tft_drivers/ili9341/s4p/initlcd.h" -#endif -#ifndef DISABLE_ILI9341_S5P - #include "tft_drivers/ili9341/s5p/initlcd.h" -#endif -#ifndef DISABLE_R61581 - #include "tft_drivers/r61581/initlcd.h" -#endif -#ifndef DISABLE_ILI9486 - #include "tft_drivers/ili9486/initlcd.h" -#endif -#ifndef DISABLE_CPLD - #include "tft_drivers/cpld/initlcd.h" -#endif -#ifndef DISABLE_HX8353C - #include "tft_drivers/hx8353c/initlcd.h" -#endif - } - - sbi (P_CS, B_CS); - - setColor(255, 255, 255); - setBackColor(0, 0, 0); - cfont.font=0; - _transparent = false; -} - -void UTFT::setXY(word x1, word y1, word x2, word y2) -{ - if (orient==LANDSCAPE) - { - swap(word, x1, y1); - swap(word, x2, y2) - y1=disp_y_size-y1; - y2=disp_y_size-y2; - swap(word, y1, y2) - } - - switch(display_model) - { -#ifndef DISABLE_HX8347A - #include "tft_drivers/hx8347a/setxy.h" -#endif -#ifndef DISABLE_HX8352A - #include "tft_drivers/hx8352a/setxy.h" -#endif -#ifndef DISABLE_ILI9327 - #include "tft_drivers/ili9327/setxy.h" -#endif -#ifndef DISABLE_SSD1289 - #include "tft_drivers/ssd1289/setxy.h" -#endif -#ifndef DISABLE_ILI9325C - #include "tft_drivers/ili9325c/setxy.h" -#endif -#ifndef DISABLE_ILI9325D - #include "tft_drivers/ili9325d/default/setxy.h" -#endif -#ifndef DISABLE_ILI9325D_ALT - #include "tft_drivers/ili9325d/alt/setxy.h" -#endif -#ifndef DISABLE_HX8340B_8 - #include "tft_drivers/hx8340b/8/setxy.h" -#endif -#ifndef DISABLE_HX8340B_S - #include "tft_drivers/hx8340b/s/setxy.h" -#endif -#ifndef DISABLE_ST7735 - #include "tft_drivers/st7735/setxy.h" -#endif -#ifndef DISABLE_S1D19122 - #include "tft_drivers/s1d19122/setxy.h" -#endif -#ifndef DISABLE_PCF8833 - #include "tft_drivers/pcf8833/setxy.h" -#endif -#ifndef DISABLE_SSD1963_480 - #include "tft_drivers/ssd1963/480/setxy.h" -#endif -#ifndef DISABLE_SSD1963_800 - #include "tft_drivers/ssd1963/800/setxy.h" -#endif -#ifndef DISABLE_SSD1963_800_ALT - #include "tft_drivers/ssd1963/800alt/setxy.h" -#endif -#ifndef DISABLE_S6D1121 - #include "tft_drivers/s6d1121/setxy.h" -#endif -#ifndef DISABLE_ILI9320 - #include "tft_drivers/ili9320/setxy.h" -#endif -#ifndef DISABLE_ILI9481 - #include "tft_drivers/ili9481/setxy.h" -#endif -#ifndef DISABLE_S6D0164 - #include "tft_drivers/s6d0164/setxy.h" -#endif -#ifndef DISABLE_ST7735S - #include "tft_drivers/st7735s/setxy.h" -#endif -#ifndef DISABLE_ILI9341_S4P - #include "tft_drivers/ili9341/s4p/setxy.h" -#endif -#ifndef DISABLE_ILI9341_S5P - #include "tft_drivers/ili9341/s5p/setxy.h" -#endif -#ifndef DISABLE_R61581 - #include "tft_drivers/r61581/setxy.h" -#endif -#ifndef DISABLE_ILI9486 - #include "tft_drivers/ili9486/setxy.h" -#endif -#ifndef DISABLE_CPLD - #include "tft_drivers/cpld/setxy.h" -#endif -#ifndef DISABLE_HX8353C - #include "tft_drivers/hx8353c/setxy.h" -#endif - } -} - -void UTFT::clrXY() -{ - if (orient==PORTRAIT) - setXY(0,0,disp_x_size,disp_y_size); - else - setXY(0,0,disp_y_size,disp_x_size); -} - -void UTFT::drawRect(int x1, int y1, int x2, int y2) -{ - if (x1>x2) - { - swap(int, x1, x2); - } - if (y1>y2) - { - swap(int, y1, y2); - } - - drawHLine(x1, y1, x2-x1); - drawHLine(x1, y2, x2-x1); - drawVLine(x1, y1, y2-y1); - drawVLine(x2, y1, y2-y1); -} - -void UTFT::drawRoundRect(int x1, int y1, int x2, int y2) -{ - if (x1>x2) - { - swap(int, x1, x2); - } - if (y1>y2) - { - swap(int, y1, y2); - } - if ((x2-x1)>4 && (y2-y1)>4) - { - drawPixel(x1+1,y1+1); - drawPixel(x2-1,y1+1); - drawPixel(x1+1,y2-1); - drawPixel(x2-1,y2-1); - drawHLine(x1+2, y1, x2-x1-4); - drawHLine(x1+2, y2, x2-x1-4); - drawVLine(x1, y1+2, y2-y1-4); - drawVLine(x2, y1+2, y2-y1-4); - } -} - -void UTFT::fillRect(int x1, int y1, int x2, int y2) -{ - if (x1>x2) - { - swap(int, x1, x2); - } - if (y1>y2) - { - swap(int, y1, y2); - } - if (display_transfer_mode==16) - { - cbi(P_CS, B_CS); - setXY(x1, y1, x2, y2); - sbi(P_RS, B_RS); - _fast_fill_16(fch,fcl,((long(x2-x1)+1)*(long(y2-y1)+1))); - sbi(P_CS, B_CS); - } - else if ((display_transfer_mode==8) and (fch==fcl)) - { - cbi(P_CS, B_CS); - setXY(x1, y1, x2, y2); - sbi(P_RS, B_RS); - _fast_fill_8(fch,((long(x2-x1)+1)*(long(y2-y1)+1))); - sbi(P_CS, B_CS); - } - else - { - if (orient==PORTRAIT) - { - for (int i=0; i<((y2-y1)/2)+1; i++) - { - drawHLine(x1, y1+i, x2-x1); - drawHLine(x1, y2-i, x2-x1); - } - } - else - { - for (int i=0; i<((x2-x1)/2)+1; i++) - { - drawVLine(x1+i, y1, y2-y1); - drawVLine(x2-i, y1, y2-y1); - } - } - } -} - -void UTFT::fillRoundRect(int x1, int y1, int x2, int y2) -{ - if (x1>x2) - { - swap(int, x1, x2); - } - if (y1>y2) - { - swap(int, y1, y2); - } - - if ((x2-x1)>4 && (y2-y1)>4) - { - for (int i=0; i<((y2-y1)/2)+1; i++) - { - switch(i) - { - case 0: - drawHLine(x1+2, y1+i, x2-x1-4); - drawHLine(x1+2, y2-i, x2-x1-4); - break; - case 1: - drawHLine(x1+1, y1+i, x2-x1-2); - drawHLine(x1+1, y2-i, x2-x1-2); - break; - default: - drawHLine(x1, y1+i, x2-x1); - drawHLine(x1, y2-i, x2-x1); - } - } - } -} - -void UTFT::drawCircle(int x, int y, int radius) -{ - int f = 1 - radius; - int ddF_x = 1; - int ddF_y = -2 * radius; - int x1 = 0; - int y1 = radius; - - cbi(P_CS, B_CS); - setXY(x, y + radius, x, y + radius); - LCD_Write_DATA(fch,fcl); - setXY(x, y - radius, x, y - radius); - LCD_Write_DATA(fch,fcl); - setXY(x + radius, y, x + radius, y); - LCD_Write_DATA(fch,fcl); - setXY(x - radius, y, x - radius, y); - LCD_Write_DATA(fch,fcl); - - while(x1 < y1) - { - if(f >= 0) - { - y1--; - ddF_y += 2; - f += ddF_y; - } - x1++; - ddF_x += 2; - f += ddF_x; - setXY(x + x1, y + y1, x + x1, y + y1); - LCD_Write_DATA(fch,fcl); - setXY(x - x1, y + y1, x - x1, y + y1); - LCD_Write_DATA(fch,fcl); - setXY(x + x1, y - y1, x + x1, y - y1); - LCD_Write_DATA(fch,fcl); - setXY(x - x1, y - y1, x - x1, y - y1); - LCD_Write_DATA(fch,fcl); - setXY(x + y1, y + x1, x + y1, y + x1); - LCD_Write_DATA(fch,fcl); - setXY(x - y1, y + x1, x - y1, y + x1); - LCD_Write_DATA(fch,fcl); - setXY(x + y1, y - x1, x + y1, y - x1); - LCD_Write_DATA(fch,fcl); - setXY(x - y1, y - x1, x - y1, y - x1); - LCD_Write_DATA(fch,fcl); - } - sbi(P_CS, B_CS); - clrXY(); -} - -void UTFT::fillCircle(int x, int y, int radius) -{ - for(int y1=-radius; y1<=0; y1++) - for(int x1=-radius; x1<=0; x1++) - if(x1*x1+y1*y1 <= radius*radius) - { - drawHLine(x+x1, y+y1, 2*(-x1)); - drawHLine(x+x1, y-y1, 2*(-x1)); - break; - } -} - -void UTFT::clrScr() -{ - long i; - - cbi(P_CS, B_CS); - clrXY(); - if (display_transfer_mode!=1) - sbi(P_RS, B_RS); - if (display_transfer_mode==16) - _fast_fill_16(0,0,((disp_x_size+1)*(disp_y_size+1))); - else if (display_transfer_mode==8) - _fast_fill_8(0,((disp_x_size+1)*(disp_y_size+1))); - else - { - for (i=0; i<((disp_x_size+1)*(disp_y_size+1)); i++) - { - if (display_transfer_mode!=1) - LCD_Writ_Bus(0,0,display_transfer_mode); - else - { - LCD_Writ_Bus(1,0,display_transfer_mode); - LCD_Writ_Bus(1,0,display_transfer_mode); - } - } - } - sbi(P_CS, B_CS); -} - -void UTFT::fillScr(byte r, byte g, byte b) -{ - word color = ((r&248)<<8 | (g&252)<<3 | (b&248)>>3); - fillScr(color); -} - -void UTFT::fillScr(word color) -{ - long i; - char ch, cl; - - ch=byte(color>>8); - cl=byte(color & 0xFF); - - cbi(P_CS, B_CS); - clrXY(); - if (display_transfer_mode!=1) - sbi(P_RS, B_RS); - if (display_transfer_mode==16) - _fast_fill_16(ch,cl,((disp_x_size+1)*(disp_y_size+1))); - else if ((display_transfer_mode==8) and (ch==cl)) - _fast_fill_8(ch,((disp_x_size+1)*(disp_y_size+1))); - else - { - for (i=0; i<((disp_x_size+1)*(disp_y_size+1)); i++) - { - if (display_transfer_mode!=1) - LCD_Writ_Bus(ch,cl,display_transfer_mode); - else - { - LCD_Writ_Bus(1,ch,display_transfer_mode); - LCD_Writ_Bus(1,cl,display_transfer_mode); - } - } - } - sbi(P_CS, B_CS); -} - -void UTFT::setColor(byte r, byte g, byte b) -{ - fch=((r&248)|g>>5); - fcl=((g&28)<<3|b>>3); -} - -void UTFT::setColor(word color) -{ - fch=byte(color>>8); - fcl=byte(color & 0xFF); -} - -word UTFT::getColor() -{ - return (fch<<8) | fcl; -} - -void UTFT::setBackColor(byte r, byte g, byte b) -{ - bch=((r&248)|g>>5); - bcl=((g&28)<<3|b>>3); - _transparent=false; -} - -void UTFT::setBackColor(uint32_t color) -{ - if (color==VGA_TRANSPARENT) - _transparent=true; - else - { - bch=byte(color>>8); - bcl=byte(color & 0xFF); - _transparent=false; - } -} - -word UTFT::getBackColor() -{ - return (bch<<8) | bcl; -} - -void UTFT::setPixel(word color) -{ - LCD_Write_DATA((color>>8),(color&0xFF)); // rrrrrggggggbbbbb -} - -void UTFT::drawPixel(int x, int y) -{ - cbi(P_CS, B_CS); - setXY(x, y, x, y); - setPixel((fch<<8)|fcl); - sbi(P_CS, B_CS); - clrXY(); -} - -void UTFT::drawLine(int x1, int y1, int x2, int y2) -{ - if (y1==y2) - drawHLine(x1, y1, x2-x1); - else if (x1==x2) - drawVLine(x1, y1, y2-y1); - else - { - unsigned int dx = (x2 > x1 ? x2 - x1 : x1 - x2); - short xstep = x2 > x1 ? 1 : -1; - unsigned int dy = (y2 > y1 ? y2 - y1 : y1 - y2); - short ystep = y2 > y1 ? 1 : -1; - int col = x1, row = y1; - - cbi(P_CS, B_CS); - if (dx < dy) - { - int t = - (dy >> 1); - while (true) - { - setXY (col, row, col, row); - LCD_Write_DATA (fch, fcl); - if (row == y2) - return; - row += ystep; - t += dx; - if (t >= 0) - { - col += xstep; - t -= dy; - } - } - } - else - { - int t = - (dx >> 1); - while (true) - { - setXY (col, row, col, row); - LCD_Write_DATA (fch, fcl); - if (col == x2) - return; - col += xstep; - t += dy; - if (t >= 0) - { - row += ystep; - t -= dx; - } - } - } - sbi(P_CS, B_CS); - } - clrXY(); -} - -void UTFT::drawHLine(int x, int y, int l) -{ - if (l<0) - { - l = -l; - x -= l; - } - cbi(P_CS, B_CS); - setXY(x, y, x+l, y); - if (display_transfer_mode == 16) - { - sbi(P_RS, B_RS); - _fast_fill_16(fch,fcl,l); - } - else if ((display_transfer_mode==8) and (fch==fcl)) - { - sbi(P_RS, B_RS); - _fast_fill_8(fch,l); - } - else - { - for (int i=0; i=0; zz--) - { - ch=pgm_read_byte(&cfont.font[temp+zz]); - for(i=0;i<8;i++) - { - if((ch&(1<0) - { - buf[c]=48+(num % 10); - c++; - num=(num-(num % 10))/10; - } - buf[c]=0; - - if (neg) - { - st[0]=45; - } - - if (length>(c+neg)) - { - for (int i=0; i<(length-c-neg); i++) - { - st[i+neg]=filler; - f++; - } - } - - for (int i=0; i5) - dec=5; - - if (num<0) - neg = true; - - _convert_float(st, num, length, dec); - - if (divider != '.') - { - for (unsigned int i=0; i>8,col & 0xff); - } - sbi(P_CS, B_CS); - } - else - { - cbi(P_CS, B_CS); - for (ty=0; ty=0; tx--) - { - col=pgm_read_word(&data[(ty*sx)+tx]); - LCD_Write_DATA(col>>8,col & 0xff); - } - } - sbi(P_CS, B_CS); - } - } - else - { - if (orient==PORTRAIT) - { - cbi(P_CS, B_CS); - for (ty=0; ty>8,col & 0xff); - } - } - sbi(P_CS, B_CS); - } - else - { - cbi(P_CS, B_CS); - for (ty=0; ty=0; tx--) - { - col=pgm_read_word(&data[(ty*sx)+tx]); - for (tsx=0; tsx>8,col & 0xff); - } - } - } - sbi(P_CS, B_CS); - } - } - clrXY(); -} - -void UTFT::drawBitmap(int x, int y, int sx, int sy, bitmapdatatype data, int deg, int rox, int roy) -{ - unsigned int col; - int tx, ty, newx, newy; - double radian; - radian=deg*0.0175; - - if (deg==0) - drawBitmap(x, y, sx, sy, data); - else - { - cbi(P_CS, B_CS); - for (ty=0; ty>8,col & 0xff); - } - sbi(P_CS, B_CS); - } - clrXY(); -} - -void UTFT::lcdOff() -{ - cbi(P_CS, B_CS); - switch (display_model) - { - case PCF8833: - LCD_Write_COM(0x28); - break; - case CPLD: - LCD_Write_COM_DATA(0x01,0x0000); - LCD_Write_COM(0x0F); - break; - } - sbi(P_CS, B_CS); -} - -void UTFT::lcdOn() -{ - cbi(P_CS, B_CS); - switch (display_model) - { - case PCF8833: - LCD_Write_COM(0x29); - break; - case CPLD: - LCD_Write_COM_DATA(0x01,0x0010); - LCD_Write_COM(0x0F); - break; - } - sbi(P_CS, B_CS); -} - -void UTFT::setContrast(char c) -{ - cbi(P_CS, B_CS); - switch (display_model) - { - case PCF8833: - if (c>64) c=64; - LCD_Write_COM(0x25); - LCD_Write_DATA(c); - break; - } - sbi(P_CS, B_CS); -} - -int UTFT::getDisplayXSize() -{ - if (orient==PORTRAIT) - return disp_x_size+1; - else - return disp_y_size+1; -} - -int UTFT::getDisplayYSize() -{ - if (orient==PORTRAIT) - return disp_y_size+1; - else - return disp_x_size+1; -} - -void UTFT::setBrightness(byte br) -{ - cbi(P_CS, B_CS); - switch (display_model) - { - case CPLD: - if (br>16) br=16; - LCD_Write_COM_DATA(0x01,br); - LCD_Write_COM(0x0F); - break; - } - sbi(P_CS, B_CS); -} - -void UTFT::setDisplayPage(byte page) -{ - cbi(P_CS, B_CS); - switch (display_model) - { - case CPLD: - if (page>7) page=7; - LCD_Write_COM_DATA(0x04,page); - LCD_Write_COM(0x0F); - break; - } - sbi(P_CS, B_CS); -} - -void UTFT::setWritePage(byte page) -{ - cbi(P_CS, B_CS); - switch (display_model) - { - case CPLD: - if (page>7) page=7; - LCD_Write_COM_DATA(0x05,page); - LCD_Write_COM(0x0F); - break; - } - sbi(P_CS, B_CS); -} diff --git a/libraries/UTFT/UTFT.h b/libraries/UTFT/UTFT.h deleted file mode 100644 index c863311..0000000 --- a/libraries/UTFT/UTFT.h +++ /dev/null @@ -1,275 +0,0 @@ -/* - UTFT.h - Arduino/chipKit library support for Color TFT LCD Boards - Copyright (C)2010-2014 Henning Karlsen. All right reserved - - This library is the continuation of my ITDB02_Graph, ITDB02_Graph16 - and RGB_GLCD libraries for Arduino and chipKit. As the number of - supported display modules and controllers started to increase I felt - it was time to make a single, universal library as it will be much - easier to maintain in the future. - - Basic functionality of this library was origianlly based on the - demo-code provided by ITead studio (for the ITDB02 modules) and - NKC Electronics (for the RGB GLCD module/shield). - - This library supports a number of 8bit, 16bit and serial graphic - displays, and will work with both Arduino and chipKit boards. For a - full list of tested display modules and controllers, see the - document UTFT_Supported_display_modules_&_controllers.pdf. - - When using 8bit and 16bit display modules there are some - requirements you must adhere to. These requirements can be found - in the document UTFT_Requirements.pdf. - There are no special requirements when using serial displays. - - You can always find the latest version of the library at - http://electronics.henningkarlsen.com/ - - If you make any modifications or improvements to the code, I would - appreciate that you share the code with me so that I might include - it in the next release. I can be contacted through - http://electronics.henningkarlsen.com/contact.php. - - This library is free software; you can redistribute it and/or - modify it under the terms of the CC BY-NC-SA 3.0 license. - Please see the included documents for further information. - - Commercial use of this library requires you to buy a license that - will allow commercial use. This includes using the library, - modified or not, as a tool to sell products. - - The license applies to all part of the library including the - examples and tools supplied with the library. -*/ - -#ifndef UTFT_h -#define UTFT_h - -#define UTFT_VERSION 278 - -#define LEFT 0 -#define RIGHT 9999 -#define CENTER 9998 - -#define PORTRAIT 0 -#define LANDSCAPE 1 - -#define HX8347A 0 -#define ILI9327 1 -#define SSD1289 2 -#define ILI9325C 3 -#define ILI9325D_8 4 -#define ILI9325D_16 5 -#define HX8340B_8 6 -#define HX8340B_S 7 -#define HX8352A 8 -#define ST7735 9 -#define PCF8833 10 -#define S1D19122 11 -#define SSD1963_480 12 -#define SSD1963_800 13 -#define S6D1121_8 14 -#define S6D1121_16 15 -#define SSD1289LATCHED 16 -#define ILI9320_8 17 -#define ILI9320_16 18 -#define SSD1289_8 19 -#define SSD1963_800ALT 20 -#define ILI9481 21 -#define ILI9325D_16ALT 22 -#define S6D0164 23 -#define ST7735S 24 -#define ILI9341_S5P 25 -#define ILI9341_S4P 26 -#define R61581 27 -#define ILI9486 28 -#define CPLD 29 -#define HX8353C 30 - -#define ITDB32 0 // HX8347-A (16bit) -#define ITDB32WC 1 // ILI9327 (16bit) -#define TFT01_32W 1 // ILI9327 (16bit) -#define ITDB32S 2 // SSD1289 (16bit) -#define TFT01_32 2 // SSD1289 (16bit) -#define CTE32 2 // SSD1289 (16bit) -#define GEEE32 2 // SSD1289 (16bit) -#define ITDB24 3 // ILI9325C (8bit) -#define ITDB24D 4 // ILI9325D (8bit) -#define ITDB24DWOT 4 // ILI9325D (8bit) -#define ITDB28 4 // ILI9325D (8bit) -#define TFT01_24_8 4 // ILI9325D (8bit) -#define DMTFT24104 4 // ILI9325D (8bit) -#define DMTFT28103 4 // ILI9325D (8bit) -#define TFT01_24_16 5 // ILI9325D (16bit) -#define ITDB22 6 // HX8340-B (8bit) -#define GEEE22 6 // HX8340-B (8bit) -#define ITDB22SP 7 // HX8340-B (Serial 4Pin) -#define ITDB32WD 8 // HX8352-A (16bit) -#define TFT01_32WD 8 // HX8352-A (16bit) -#define CTE32W 8 // HX8352-A (16bit) -#define ITDB18SP 9 // ST7735 (Serial 5Pin) -#define LPH9135 10 // PCF8833 (Serial 5Pin) -#define ITDB25H 11 // S1D19122 (16bit) -#define ITDB43 12 // SSD1963 (16bit) 480x272 -#define TFT01_43 12 // SSD1963 (16bit) 480x272 -#define ITDB50 13 // SSD1963 (16bit) 800x480 -#define TFT01_50 13 // SSD1963 (16bit) 800x480 -#define CTE50 13 // SSD1963 (16bit) 800x480 -#define EHOUSE50 13 // SSD1963 (16bit) 800x480 -#define ITDB24E_8 14 // S6D1121 (8bit) -#define TFT01_24R2 14 // S6D1121 (8bit) -#define ITDB24E_16 15 // S6D1121 (16bit) -#define INFINIT32 16 // SSD1289 (Latched 16bit) -- Legacy, will be removed later -#define ELEE32_REVA 16 // SSD1289 (Latched 16bit) -#define GEEE24 17 // ILI9320 (8bit) -#define GEEE28 18 // ILI9320 (16bit) -#define ELEE32_REVB 19 // SSD1289 (8bit) -#define TFT01_70 20 // SSD1963 (16bit) 800x480 Alternative Init -#define CTE70 20 // SSD1963 (16bit) 800x480 Alternative Init -#define EHOUSE70 20 // SSD1963 (16bit) 800x480 Alternative Init -#define CTE32HR 21 // ILI9481 (16bit) -#define CTE28 22 // ILI9325D (16bit) Alternative Init -#define TFT01_28 22 // ILI9325D (16bit) Alternative Init -#define CTE22 23 // S6D0164 (8bit) -#define TFT01_22 23 // S6D0164 (8bit) -#define DMTFT22102 23 // S6D0164 (8bit) -#define TFT01_18SP 24 // ST7735S (Serial 5Pin) -#define TFT01_22SP 25 // ILI9341 (Serial 5Pin) -#define DMTFT28105 25 // ILI9341 (Serial 5Pin) -#define MI0283QT9 26 // ILI9341 (Serial 4Pin) -#define CTE35IPS 27 // R61581 (16bit) -#define CTE40 28 // ILI9486 (16bit) -#define EHOUSE50CPLD 29 // CPLD (16bit) -#define CTE50CPLD 29 // CPLD (16bit) -#define CTE70CPLD 29 // CPLD (16bit) -#define DMTFT18101 30 // HX8353C (Serial 5Pin) - - -#define SERIAL_4PIN 4 -#define SERIAL_5PIN 5 -#define LATCHED_16 17 - -#define NOTINUSE 255 - -//********************************* -// COLORS -//********************************* -// VGA color palette -#define VGA_BLACK 0x0000 -#define VGA_WHITE 0xFFFF -#define VGA_RED 0xF800 -#define VGA_GREEN 0x0400 -#define VGA_BLUE 0x001F -#define VGA_SILVER 0xC618 -#define VGA_GRAY 0x8410 -#define VGA_MAROON 0x8000 -#define VGA_YELLOW 0xFFE0 -#define VGA_OLIVE 0x8400 -#define VGA_LIME 0x07E0 -#define VGA_AQUA 0x07FF -#define VGA_TEAL 0x0410 -#define VGA_NAVY 0x0010 -#define VGA_FUCHSIA 0xF81F -#define VGA_PURPLE 0x8010 -#define VGA_TRANSPARENT 0xFFFFFFFF - -#if defined(__AVR__) - #include "Arduino.h" - #include "hardware/avr/HW_AVR_defines.h" -#elif defined(__PIC32MX__) - #include "WProgram.h" - #include "hardware/pic32/HW_PIC32_defines.h" -#elif defined(__arm__) - #include "Arduino.h" - #include "hardware/arm/HW_ARM_defines.h" -#endif - -struct _current_font -{ - uint8_t* font; - uint8_t x_size; - uint8_t y_size; - uint8_t offset; - uint8_t numchars; -}; - -class UTFT -{ - public: - UTFT(); - UTFT(byte model, int RS, int WR, int CS, int RST, int SER=0); - void InitLCD(byte orientation=LANDSCAPE); - void clrScr(); - void drawPixel(int x, int y); - void drawLine(int x1, int y1, int x2, int y2); - void fillScr(byte r, byte g, byte b); - void fillScr(word color); - void drawRect(int x1, int y1, int x2, int y2); - void drawRoundRect(int x1, int y1, int x2, int y2); - void fillRect(int x1, int y1, int x2, int y2); - void fillRoundRect(int x1, int y1, int x2, int y2); - void drawCircle(int x, int y, int radius); - void fillCircle(int x, int y, int radius); - void setColor(byte r, byte g, byte b); - void setColor(word color); - word getColor(); - void setBackColor(byte r, byte g, byte b); - void setBackColor(uint32_t color); - word getBackColor(); - void print(char *st, int x, int y, int deg=0); - void print(String st, int x, int y, int deg=0); - void printNumI(long num, int x, int y, int length=0, char filler=' '); - void printNumF(double num, byte dec, int x, int y, char divider='.', int length=0, char filler=' '); - void setFont(uint8_t* font); - uint8_t* getFont(); - uint8_t getFontXsize(); - uint8_t getFontYsize(); - void drawBitmap(int x, int y, int sx, int sy, bitmapdatatype data, int scale=1); - void drawBitmap(int x, int y, int sx, int sy, bitmapdatatype data, int deg, int rox, int roy); - void lcdOff(); - void lcdOn(); - void setContrast(char c); - int getDisplayXSize(); - int getDisplayYSize(); - void setBrightness(byte br); - void setDisplayPage(byte page); - void setWritePage(byte page); - -/* - The functions and variables below should not normally be used. - They have been left publicly available for use in add-on libraries - that might need access to the lower level functions of UTFT. - - Please note that these functions and variables are not documented - and I do not provide support on how to use them. -*/ - byte fch, fcl, bch, bcl; - byte orient; - long disp_x_size, disp_y_size; - byte display_model, display_transfer_mode, display_serial_mode; - regtype *P_RS, *P_WR, *P_CS, *P_RST, *P_SDA, *P_SCL, *P_ALE; - regsize B_RS, B_WR, B_CS, B_RST, B_SDA, B_SCL, B_ALE; - byte __p1, __p2, __p3, __p4, __p5; - _current_font cfont; - boolean _transparent; - - void LCD_Writ_Bus(char VH,char VL, byte mode); - void LCD_Write_COM(char VL); - void LCD_Write_DATA(char VH,char VL); - void LCD_Write_DATA(char VL); - void LCD_Write_COM_DATA(char com1,int dat1); - void _hw_special_init(); - void setPixel(word color); - void drawHLine(int x, int y, int l); - void drawVLine(int x, int y, int l); - void printChar(byte c, int x, int y); - void setXY(word x1, word y1, word x2, word y2); - void clrXY(); - void rotateChar(byte c, int x, int y, int pos, int deg); - void _set_direction_registers(byte mode); - void _fast_fill_16(int ch, int cl, long pix); - void _fast_fill_8(int ch, long pix); - void _convert_float(char *buf, double num, int width, byte prec); -}; - -#endif \ No newline at end of file diff --git a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap/UTFT_Bitmap.ino b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap/UTFT_Bitmap.ino deleted file mode 100644 index 1f3ef33..0000000 --- a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap/UTFT_Bitmap.ino +++ /dev/null @@ -1,66 +0,0 @@ -// UTFT_Bitmap (C)2014 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of the drawBitmap()-function. -// -// This demo was made to work on the 320x240 modules. -// Any other size displays may cause strange behaviour. -// -// This program requires the UTFT library. -// - -#include - -// Declare which fonts we will be using -extern uint8_t SmallFont[]; - -// Set the pins to the correct ones for your development shield -// ------------------------------------------------------------ -// Standard Arduino Mega/Due shield : ,38,39,40,41 -// CTE TFT LCD/SD Shield for Arduino Due : ,25,26,27,28 -// Teensy 3.x TFT Test Board : ,23,22, 3, 4 -// ElecHouse TFT LCD/SD Shield for Arduino Due : ,22,23,31,33 -// -// Remember to change the model parameter to suit your display module! -UTFT myGLCD(ITDB32S,38,39,40,41); - -extern unsigned short info[0x400]; -extern unsigned short icon[0x400]; -extern unsigned short tux[0x400]; - -void setup() -{ - myGLCD.InitLCD(); - myGLCD.setFont(SmallFont); -} - -void loop() -{ - myGLCD.fillScr(255, 255, 255); - myGLCD.setColor(255, 255, 255); - myGLCD.print(" *** A 10 by 7 grid of a 32x32 icon *** ", CENTER, 228); - for (int x=0; x<10; x++) - for (int y=0; y<7; y++) - myGLCD.drawBitmap (x*32, y*32, 32, 32, info); - - delay(5000); - - myGLCD.fillScr(255, 255, 255); - myGLCD.setColor(255, 255, 255); - myGLCD.print(" Two different icons in scale 1 to 4 ", CENTER, 228); - int x=0; - for (int s=0; s<4; s++) - { - x+=(s*32); - myGLCD.drawBitmap (x, 0, 32, 32, tux, s+1); - } - x=0; - for (int s=4; s>0; s--) - { - myGLCD.drawBitmap (x, 224-(s*32), 32, 32, icon, s); - x+=(s*32); - } - - delay(5000); -} - diff --git a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap/icon.c b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap/icon.c deleted file mode 100644 index 9cb97a1..0000000 --- a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap/icon.c +++ /dev/null @@ -1,71 +0,0 @@ -// Generated by : ImageConverter 565 v1.0 -// Generated from: taskmgr.png -// Time generated: 11.10.2010 22:51:23 -// Size : 2 048 Bytes - -const unsigned short icon[0x400] ={ -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF7D, 0xCE79, 0xBDD7, 0xAD75, // 0x0010 (16) -0xAD55, 0xAD75, 0xBDF7, 0xD6BA, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0020 (32) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xC638, 0x9492, 0x8C51, 0x9492, 0xA514, 0xA534, // 0x0030 (48) -0xA534, 0xA534, 0x9CF3, 0x8C71, 0x8430, 0x9CD3, 0xD69A, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0040 (64) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xCE59, 0x8410, 0x9492, 0xB5B6, 0xC618, 0xBDD7, 0xAD75, 0xA514, // 0x0050 (80) -0xA514, 0xA4F4, 0xAD55, 0xB5B6, 0xBDD7, 0xAD55, 0x8430, 0x8C71, 0xDEFB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0060 (96) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0x9CD3, 0x8430, 0xBDF7, 0xC618, 0xAD75, 0x94F2, 0x8CF1, 0x84B0, 0x8CD1, // 0x0070 (112) -0x9612, 0x8CB1, 0x7C6F, 0x7C8F, 0x8490, 0xA533, 0xBDF7, 0xB596, 0x7BEF, 0xB596, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0080 (128) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0x8430, 0x9CF3, 0xCE39, 0xA514, 0x94B2, 0x9E93, 0x94F2, 0x8CD1, 0x8CB1, 0x9D12, // 0x0090 (144) -0x9F74, 0x9D52, 0x8450, 0x7C8F, 0x73AE, 0x740E, 0x73CE, 0x9CD3, 0xC638, 0x8C51, 0x9CD3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00A0 (160) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0x8430, 0xA534, 0xBDF7, 0x8CB1, 0x8C31, 0x9DB3, 0xA735, 0x9D13, 0x8CB1, 0x8C71, 0x9D13, // 0x00B0 (176) -0xB756, 0xA5D4, 0x8C71, 0x8490, 0x8390, 0x7C70, 0x73EE, 0x6B4D, 0x8450, 0xBDF7, 0x8C71, 0x9CF3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00C0 (192) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x94B2, 0x9CF3, 0xBDD7, 0x8490, 0x8CF1, 0x9D72, 0xA694, 0xAE94, 0x9DD3, 0xA593, 0xA553, 0x9592, // 0x00D0 (208) -0x9672, 0x75CE, 0x5BAA, 0x64EB, 0x5D8C, 0x5BCA, 0x4B69, 0x634C, 0x748D, 0x7C4F, 0xBE18, 0x8430, 0xB5B6, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00E0 (224) -0xFFFF, 0xFFFF, 0xFFFF, 0xC618, 0x8410, 0xBDF7, 0x8410, 0x83F0, 0x94F2, 0x9613, 0x9D13, 0xAE55, 0x9D12, 0x750E, 0x55CB, 0x4BC8, // 0x00F0 (240) -0x4447, 0x3BC6, 0x4B67, 0x44E8, 0x3CE8, 0x3325, 0x20E2, 0x2B45, 0x43E7, 0x3946, 0x732D, 0xC5F8, 0x7BCF, 0xE71C, 0xFFFF, 0xFFFF, // 0x0100 (256) -0xFFFF, 0xFFFF, 0xF7BE, 0x7BEF, 0xBDB6, 0x9533, 0x8D71, 0x9552, 0x9E73, 0x9DD3, 0x94B2, 0x6D6D, 0x4BA8, 0x44A8, 0x55EA, 0x5D2A, // 0x0110 (272) -0x43E7, 0x4327, 0x46CA, 0x4B87, 0x42C6, 0x4E0A, 0x4D09, 0x4468, 0x4548, 0x3386, 0x2B25, 0x7C6F, 0xAD35, 0x9492, 0xFFFF, 0xFFFF, // 0x0120 (288) -0xFFDF, 0xFFFF, 0xBDD7, 0x8C71, 0xAD75, 0x8CF0, 0x8D71, 0x8D51, 0x9DF3, 0x740E, 0x21C4, 0x33E5, 0x558A, 0x554A, 0x650A, 0x566B, // 0x0130 (304) -0x43E7, 0x21C3, 0x3345, 0x2283, 0x1962, 0x3C87, 0x3386, 0x2163, 0x3345, 0x3346, 0x33A6, 0x32C6, 0x9CB3, 0x7BEF, 0xDEDB, 0xFFFF, // 0x0140 (320) -0xFFFF, 0xFFFF, 0x8430, 0xAD75, 0x8C31, 0x7C0F, 0x7BCF, 0x83F0, 0x636B, 0x0000, 0x0000, 0x4387, 0x462A, 0x4B27, 0x4B88, 0x4E8B, // 0x0150 (336) -0x42E6, 0x0000, 0x0020, 0x0100, 0x0000, 0x1121, 0x0040, 0x0000, 0x0941, 0x0000, 0x0020, 0x00E0, 0x5AAB, 0x94B2, 0x9CD3, 0xFFFF, // 0x0160 (352) -0xFFFF, 0xE71C, 0x8410, 0xB596, 0x7BEF, 0x7C6F, 0x84B0, 0x5B6B, 0x09E1, 0x0901, 0x1161, 0x3C06, 0x3D89, 0x32C5, 0x43E7, 0x470B, // 0x0170 (368) -0x4BC7, 0x0961, 0x11E2, 0x1282, 0x0961, 0x1262, 0x09E2, 0x0961, 0x12A2, 0x0961, 0x09C2, 0x0A01, 0x29E5, 0xA514, 0x7BEF, 0xFFDF, // 0x0180 (384) -0xFFFF, 0xBDD7, 0x9472, 0xA514, 0x6B4D, 0x7C6F, 0x634C, 0x0040, 0x0981, 0x0060, 0x00E0, 0x11E2, 0x10A1, 0x09C1, 0x19E3, 0x2B25, // 0x0190 (400) -0x22A3, 0x0060, 0x0120, 0x09E1, 0x0060, 0x09E1, 0x0120, 0x0060, 0x0A21, 0x0060, 0x0100, 0x01A0, 0x0040, 0x9CD3, 0x7BEF, 0xDEDB, // 0x01A0 (416) -0xFFFF, 0xA514, 0x9CF3, 0xB596, 0x73AE, 0x7C0F, 0x2945, 0x10A2, 0x2184, 0x18C3, 0x1923, 0x2184, 0x18C3, 0x21A4, 0x2964, 0x2905, // 0x01B0 (432) -0x2A25, 0x2104, 0x2965, 0x2A05, 0x2104, 0x2A05, 0x2985, 0x2104, 0x2A25, 0x2104, 0x2164, 0x29C4, 0x3166, 0xB5B6, 0x8410, 0xC618, // 0x01C0 (448) -0xFFFF, 0x9492, 0xA514, 0xDEDB, 0xC618, 0xA514, 0x8C51, 0x94B2, 0x9CB3, 0x9CF3, 0xA514, 0xA534, 0xAD75, 0xAD75, 0xB596, 0xB5D6, // 0x01D0 (464) -0xBDB7, 0xBDF7, 0xBDF7, 0xBDF7, 0xC618, 0xC5F8, 0xC5F8, 0xBDF7, 0xBDD7, 0xBDD7, 0xB5B6, 0xB596, 0xC638, 0xDEFB, 0x8430, 0xB596, // 0x01E0 (480) -0xFFFF, 0x8C51, 0x9CF3, 0xE73C, 0xDEFB, 0xD69A, 0xD6BA, 0xD6BA, 0xDEDB, 0xDEDB, 0xDEFB, 0xDF1B, 0xE71C, 0xE73C, 0xE73C, 0xE73C, // 0x01F0 (496) -0xEF5D, 0xEF5D, 0xEF5D, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xDEFB, 0xE71C, 0x8C51, 0xAD75, // 0x0200 (512) -0xFFFF, 0x8C71, 0x9CD3, 0xDEFB, 0xAD75, 0x9492, 0x9CD3, 0xA4F3, 0xA514, 0xAD55, 0xAD75, 0xB596, 0xBDB6, 0xBDD7, 0xC5F7, 0xC618, // 0x0210 (528) -0xC638, 0xCE59, 0xCE59, 0xCE79, 0xD679, 0xD679, 0xCE79, 0xCE59, 0xCE59, 0xC638, 0xC618, 0xBDF7, 0xCE79, 0xE71C, 0x8C51, 0xB596, // 0x0220 (544) -0xFFFF, 0x9CD3, 0x9492, 0xAD55, 0x2965, 0x2104, 0x2124, 0x2145, 0x1945, 0x2165, 0x2165, 0x2186, 0x2186, 0x29A6, 0x29A6, 0x31C7, // 0x0230 (560) -0x39C7, 0x31E7, 0x31E7, 0x31E7, 0x3208, 0x3208, 0x31E7, 0x31E7, 0x29E7, 0x31C7, 0x39C7, 0x31A6, 0x4A49, 0xBDF7, 0x8C51, 0xBDF7, // 0x0240 (576) -0xFFFF, 0xB5B6, 0x8430, 0x7BEF, 0x0000, 0x0000, 0x0000, 0x2000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3800, 0x2000, // 0x0250 (592) -0x0000, 0x3000, 0x3800, 0x3000, 0x3800, 0x3800, 0x3800, 0x3000, 0x3800, 0x0800, 0x0000, 0x0000, 0x0000, 0xA514, 0x8430, 0xD6BA, // 0x0260 (608) -0xFFFF, 0xDEDB, 0x7BCF, 0x8430, 0x0020, 0x0000, 0x0000, 0x8000, 0xC800, 0xC000, 0xC800, 0xC820, 0xC820, 0xC820, 0xD020, 0x9800, // 0x0270 (624) -0x0000, 0xB820, 0xD020, 0xD020, 0xD020, 0xD020, 0xD020, 0xC820, 0xD020, 0x4800, 0x0000, 0x0000, 0x2144, 0xAD75, 0x8410, 0xF7BE, // 0x0280 (640) -0xFFFF, 0xFFFF, 0x7BEF, 0x8C71, 0x2945, 0x0000, 0x0000, 0x6800, 0xA800, 0xA800, 0xA800, 0xA800, 0xA800, 0xA800, 0xB000, 0x8000, // 0x0290 (656) -0x0000, 0x9800, 0xB000, 0xB000, 0xB000, 0xB000, 0xB000, 0xB000, 0xB000, 0x4000, 0x0000, 0x0000, 0x632C, 0xA534, 0x94B2, 0xFFFF, // 0x02A0 (672) -0xFFDF, 0xFFFF, 0xAD75, 0x73AE, 0x632C, 0x0000, 0x0000, 0x6920, 0xA9E0, 0xA1C0, 0xA9E0, 0xA9E0, 0xA9E0, 0xA9E0, 0xA9E0, 0x7960, // 0x02B0 (688) -0x0000, 0x99C0, 0xB200, 0xA9E0, 0xB200, 0xB200, 0xB1E0, 0xA9E0, 0xB200, 0x40C0, 0x0000, 0x1082, 0xAD75, 0x8410, 0xD69A, 0xFFFF, // 0x02C0 (704) -0xFFFF, 0xFFFF, 0xF79E, 0x630C, 0x8C51, 0x2965, 0x0000, 0x7400, 0xB620, 0xAE00, 0xB620, 0xB640, 0xB640, 0xB620, 0xB660, 0x84A0, // 0x02D0 (720) -0x0000, 0xA5A0, 0xBE60, 0xB660, 0xBE60, 0xBE60, 0xB660, 0xB640, 0xBE80, 0x4260, 0x0000, 0x6B6D, 0xAD75, 0x8430, 0xFFFF, 0xFFFF, // 0x02E0 (736) -0xFFFF, 0xFFDF, 0xFFFF, 0xB5B6, 0x632C, 0x8410, 0x0021, 0x7360, 0xBD40, 0xB520, 0xBD40, 0xBD60, 0xBD60, 0xBD40, 0xC580, 0x8C00, // 0x02F0 (752) -0x0000, 0xACE0, 0xC580, 0xC580, 0xC580, 0xC580, 0xC580, 0xBD60, 0xC5A0, 0x39C0, 0x2126, 0xBDF7, 0x73AE, 0xD6BA, 0xFFFF, 0xFFFF, // 0x0300 (768) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x7BEF, 0x7BEF, 0x630D, 0x4AE1, 0x6D21, 0x6D01, 0x6D21, 0x6D41, 0x6D41, 0x6D41, 0x6D61, 0x53E1, // 0x0310 (784) -0x0000, 0x64C1, 0x7562, 0x6D62, 0x6D62, 0x6D62, 0x6D62, 0x6D42, 0x6D41, 0x4263, 0xA515, 0x8C51, 0xA534, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0320 (800) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF79E, 0x6B4D, 0x8410, 0x636E, 0x04A6, 0x05E5, 0x05C5, 0x0585, 0x0585, 0x0586, 0x05A6, 0x0424, // 0x0330 (816) -0x0000, 0x0505, 0x05C6, 0x05A6, 0x05A6, 0x05C7, 0x0606, 0x0606, 0x1CE9, 0xA535, 0x9492, 0x8C71, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0340 (832) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF7D, 0x6B4D, 0x83EF, 0x9411, 0x3A47, 0x0403, 0x0584, 0x05A4, 0x0585, 0x0585, 0x0404, // 0x0350 (848) -0x0000, 0x04E5, 0x05A5, 0x05A5, 0x05C5, 0x0584, 0x1405, 0x634B, 0xBD76, 0x8C51, 0x8C51, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0360 (864) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0x8410, 0x6B6D, 0x9CB3, 0x7C6F, 0x3CA9, 0x0BE4, 0x0443, 0x0504, 0x03C2, // 0x0370 (880) -0x0000, 0x0483, 0x0504, 0x0444, 0x1426, 0x552D, 0xA554, 0xB576, 0x73CE, 0x9CF3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0380 (896) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xB5B6, 0x6B4D, 0x7BAF, 0x9432, 0x8BD1, 0x6BCE, 0x4C6B, 0x3C09, // 0x0390 (912) -0x3186, 0x3C8A, 0x5C8C, 0x8430, 0xA493, 0xACD4, 0x8410, 0x7BEF, 0xCE79, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03A0 (928) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0xAD75, 0x7BEF, 0x73AE, 0x83F0, 0x8C11, 0x9431, // 0x03B0 (944) -0x9492, 0x9452, 0x9432, 0x8430, 0x7BEF, 0x8450, 0xBDF7, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03C0 (960) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEFB, 0xBDD7, 0xA534, 0x94D3, // 0x03D0 (976) -0x94B2, 0x9CF3, 0xA554, 0xC618, 0xE73C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03E0 (992) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03F0 (1008) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0400 (1024) -}; diff --git a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap/info.c b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap/info.c deleted file mode 100644 index 312bee1..0000000 --- a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap/info.c +++ /dev/null @@ -1,71 +0,0 @@ -// Generated by : ImageConverter 565 v1.0 -// Generated from: info.png -// Time generated: 11.10.2010 22:27:55 -// Size : 2 048 Bytes - -const unsigned short info[0x400] ={ -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0010 (16) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0020 (32) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF9F, 0xC69D, 0x95BB, 0x7D1A, 0x6CB9, // 0x0030 (48) -0x6499, 0x74F9, 0x8D7A, 0xB63C, 0xE73E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0040 (64) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xAE1C, 0x4C18, 0x2B56, 0x3397, 0x4C38, 0x64B9, 0x751A, // 0x0050 (80) -0x7D3A, 0x6CD9, 0x5458, 0x3BD7, 0x2B56, 0x3BB7, 0x855A, 0xE77E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0060 (96) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xA5FB, 0x2B56, 0x2B77, 0x751A, 0xB67C, 0xD73E, 0xE75E, 0xE77E, 0xE77E, // 0x0070 (112) -0xE77E, 0xE77E, 0xE75E, 0xDF3E, 0xC6DD, 0x8D9B, 0x43D7, 0x1B16, 0x74D9, 0xF7BF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0080 (128) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF9F, 0x4C18, 0x1AF6, 0x855A, 0xCEFE, 0xD71E, 0xCEFD, 0xC6DD, 0xC6BD, 0xC6BD, 0xBEBD, // 0x0090 (144) -0xC6BD, 0xBEBD, 0xC6BD, 0xC6DD, 0xC6DD, 0xD71E, 0xD71E, 0xA61C, 0x33B7, 0x2316, 0xBE7C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00A0 (160) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDF3E, 0x2336, 0x3BD7, 0xBE9D, 0xC6DD, 0xBE9D, 0xBE9D, 0xBE9D, 0xBEBD, 0xBE9D, 0xCEFD, 0xEF9F, // 0x00B0 (176) -0xEF9F, 0xD73E, 0xBE9D, 0xBEBD, 0xBE9D, 0xBE9D, 0xB69D, 0xC6BD, 0xCEDD, 0x6CFA, 0x0295, 0x9DBB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00C0 (192) -0xFFFF, 0xFFFF, 0xFFFF, 0xE75E, 0x1AF6, 0x4C58, 0xBEBD, 0xB67D, 0xAE5C, 0xB67D, 0xB67D, 0xB69D, 0xB67D, 0xBEBD, 0xF7DF, 0xFFFF, // 0x00D0 (208) -0xFFFF, 0xFFFF, 0xCF1E, 0xB67D, 0xB67D, 0xB67D, 0xB67D, 0xAE5C, 0xAE5C, 0xC6BD, 0x857B, 0x0295, 0xA5DB, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00E0 (224) -0xFFFF, 0xFFFF, 0xFFDF, 0x3BB7, 0x33D8, 0xB67D, 0xA63C, 0xA63C, 0xAE5C, 0xAE5D, 0xAE5D, 0xAE7D, 0xA65D, 0xC6DD, 0xFFFF, 0xFFFF, // 0x00F0 (240) -0xFFDF, 0xFFFF, 0xDF5E, 0xA65D, 0xAE7D, 0xAE5D, 0xAE5D, 0xAE5C, 0xA63C, 0xA61C, 0xB67D, 0x753A, 0x0295, 0xCEBC, 0xFFFF, 0xFFFF, // 0x0100 (256) -0xF7DF, 0xFFFF, 0x957A, 0x12F6, 0x9E1C, 0x9E1C, 0x9E1C, 0x9E1C, 0xA63C, 0xA63C, 0xA63D, 0xA63D, 0xA65D, 0x9DFC, 0xDF3E, 0xFFFF, // 0x0110 (272) -0xFFFF, 0xFFDF, 0xA61C, 0xA65D, 0xA65D, 0xA63D, 0xA63C, 0xA63C, 0x9E1C, 0x9E1C, 0x9DFC, 0xAE3C, 0x3C18, 0x3396, 0xFFDF, 0xFFFF, // 0x0120 (288) -0xFFFF, 0xF79F, 0x2336, 0x64DA, 0x9DFC, 0x95DC, 0x95FC, 0x95FC, 0x9E1C, 0x9E1C, 0x9E3D, 0x9E3D, 0x9E3D, 0x9E3D, 0x7D3B, 0xA63C, // 0x0130 (304) -0xB6BD, 0x8DBB, 0x8DFC, 0xA65D, 0x9E3D, 0x9E3D, 0x9E1C, 0x9E1C, 0x95FC, 0x95FC, 0x95DC, 0x95DC, 0x8DBB, 0x0AF6, 0xA5DA, 0xFFFF, // 0x0140 (320) -0xFFFF, 0xA5FB, 0x1337, 0x8DBB, 0x8DBB, 0x8DBC, 0x8DDC, 0x95FC, 0x95FC, 0x961C, 0x961D, 0x963D, 0x9E3D, 0x963D, 0xA67D, 0xB6BD, // 0x0150 (336) -0xB6BD, 0xAE7D, 0x9E3D, 0x9E3D, 0x961D, 0x961D, 0x961C, 0x95FC, 0x95FC, 0x8DDC, 0x8DDC, 0x859B, 0x95DC, 0x3C18, 0x4BD7, 0xFFFF, // 0x0160 (352) -0xFFFF, 0x6499, 0x33F8, 0x8DBB, 0x859B, 0x85BC, 0x85BC, 0x8DDC, 0x8DFC, 0x8DFD, 0x8E1D, 0x961D, 0x961D, 0x9E3D, 0xF7BF, 0xFFFF, // 0x0170 (368) -0xFFFF, 0xFFFF, 0xA67D, 0x8E1D, 0x961D, 0x8E1D, 0x8DFD, 0x8DFC, 0x8DDC, 0x85BC, 0x85BC, 0x859B, 0x859B, 0x5CDA, 0x2336, 0xE71C, // 0x0180 (384) -0xFFFF, 0x43F8, 0x4C79, 0x859B, 0x7D7B, 0x7D9C, 0x85BC, 0x85DC, 0x85DC, 0x8DFD, 0x8DFD, 0x8E1D, 0x8E1D, 0xA67E, 0xFFFF, 0xFFFF, // 0x0190 (400) -0xFFFF, 0xFFFF, 0xBEDE, 0x85FD, 0x8E1D, 0x8DFD, 0x8DFD, 0x85DC, 0x85DC, 0x85BC, 0x7D9C, 0x7D7B, 0x7D7B, 0x753B, 0x1B36, 0xBE5A, // 0x01A0 (416) -0xFFBE, 0x3BF8, 0x3419, 0x6D1B, 0x757B, 0x7D9C, 0x7D9C, 0x7DBC, 0x7DDD, 0x85FD, 0x85FD, 0x861D, 0x861D, 0x9E7E, 0xFFFF, 0xFFFF, // 0x01B0 (432) -0xFFFF, 0xFFFF, 0xB6DE, 0x85FD, 0x8E1D, 0x85FD, 0x85FD, 0x7DDD, 0x7DBC, 0x7D9C, 0x7D9C, 0x757B, 0x6D3B, 0x4C9A, 0x1337, 0xADD9, // 0x01C0 (448) -0xFFBE, 0x4418, 0x23B9, 0x3439, 0x4CBA, 0x653B, 0x759C, 0x7DBD, 0x7DDD, 0x7DFD, 0x861D, 0x861E, 0x861E, 0x9E7E, 0xFFFF, 0xFFFF, // 0x01D0 (464) -0xFFFF, 0xFFFF, 0xB6DE, 0x7E1E, 0x861E, 0x85FD, 0x7DFD, 0x7DDD, 0x7DBD, 0x759C, 0x653B, 0x4CDB, 0x3439, 0x2BF9, 0x1337, 0xA5B9, // 0x01E0 (480) -0xFF9E, 0x4C39, 0x2BF9, 0x345A, 0x3C7A, 0x3C9B, 0x4CFC, 0x5D5C, 0x659D, 0x75DD, 0x7DFE, 0x861E, 0x7E3E, 0x969F, 0xFFFF, 0xFFFF, // 0x01F0 (496) -0xFFFF, 0xFFFF, 0xB6FF, 0x7E1E, 0x863E, 0x7DFE, 0x75DD, 0x6D9D, 0x5D5C, 0x4CFC, 0x3C9B, 0x347A, 0x345A, 0x343A, 0x1B78, 0xA5B9, // 0x0200 (512) -0xF79E, 0x4418, 0x2C3A, 0x3C7A, 0x449B, 0x44DB, 0x4CFC, 0x4D3C, 0x555D, 0x5D7D, 0x65BE, 0x6DFE, 0x6DFF, 0x867F, 0xFFFF, 0xFFFF, // 0x0210 (528) -0xFFFF, 0xFFFF, 0xA6DF, 0x65FF, 0x6DFE, 0x65BE, 0x5D9E, 0x555D, 0x4D3C, 0x4CFC, 0x44DB, 0x44BB, 0x3C7A, 0x345A, 0x1B78, 0xA599, // 0x0220 (544) -0xFFDE, 0x43D8, 0x345A, 0x3C9A, 0x44DB, 0x4CFC, 0x4D3C, 0x555D, 0x5D9D, 0x5DBE, 0x65DE, 0x6DFF, 0x661F, 0x867F, 0xFFFF, 0xFFFF, // 0x0230 (560) -0xFFFF, 0xFFFF, 0xA6DF, 0x65FF, 0x6DFF, 0x65DE, 0x5DBE, 0x5D9D, 0x555D, 0x4D3C, 0x4CFC, 0x44DB, 0x3C7A, 0x3C9B, 0x1B57, 0xADB9, // 0x0240 (576) -0xFFFF, 0x4BD7, 0x2C1A, 0x44DB, 0x44DB, 0x4D1C, 0x555D, 0x5D7D, 0x5DBE, 0x65DE, 0x6E1F, 0x6E3F, 0x765F, 0x96BF, 0xFFFF, 0xFFFF, // 0x0250 (592) -0xFFFF, 0xFFFF, 0xAEFF, 0x6E3F, 0x763F, 0x6E1F, 0x65DE, 0x5DBE, 0x5D7D, 0x555D, 0x4D1C, 0x44DC, 0x3C9B, 0x44DC, 0x1AD5, 0xC639, // 0x0260 (608) -0xFFFF, 0x84D8, 0x1317, 0x5D7D, 0x44DB, 0x553C, 0x557D, 0x5D9E, 0x65DE, 0x65FF, 0x6E3F, 0x7E5F, 0x7E7F, 0x9EDF, 0xFFFF, 0xFFFF, // 0x0270 (624) -0xFFFF, 0xFFFF, 0xB73F, 0x7E7F, 0x7E5F, 0x6E3F, 0x65FF, 0x65DE, 0x5D9E, 0x557D, 0x553C, 0x44DC, 0x4D1C, 0x345B, 0x22B4, 0xE71B, // 0x0280 (640) -0xFFFF, 0xD6BC, 0x0234, 0x4CFC, 0x5D7D, 0x4D3C, 0x5D9D, 0x5DBE, 0x65FF, 0x6E3F, 0x765F, 0x867F, 0x8EBF, 0xA6DF, 0xFFFF, 0xFFFF, // 0x0290 (656) -0xFFFF, 0xFFFF, 0xB71F, 0x8EBF, 0x869F, 0x765F, 0x6E3F, 0x65FF, 0x5DBE, 0x5D7D, 0x553D, 0x4D1C, 0x65BE, 0x0AB7, 0x6C15, 0xFFBE, // 0x02A0 (672) -0xFFFF, 0xFFFF, 0x53B6, 0x0296, 0x75FE, 0x5D9D, 0x557D, 0x65DE, 0x6E1F, 0x763F, 0x7E7F, 0x8EBF, 0x9EFF, 0x96BE, 0xAE3C, 0xE77E, // 0x02B0 (688) -0xEF9E, 0xC69D, 0x967E, 0x9EFF, 0x8EBF, 0x7E7F, 0x763F, 0x6E1F, 0x65DE, 0x5D9E, 0x555D, 0x761E, 0x341A, 0x1294, 0xBE18, 0xFFFF, // 0x02C0 (704) -0xFFFF, 0xFFFF, 0xCE9B, 0x0A13, 0x2378, 0x7E5F, 0x6E1E, 0x5DBE, 0x6E1F, 0x7E5F, 0x869F, 0x96DF, 0x9EFF, 0xAF5F, 0x9E9E, 0x8DFC, // 0x02D0 (720) -0x8E1C, 0x967D, 0xAF3F, 0xA6FF, 0x96DF, 0x869F, 0x7E5F, 0x6E1F, 0x5DBE, 0x65DE, 0x7E5F, 0x4CBB, 0x0AB5, 0x7454, 0xEF5C, 0xFFFF, // 0x02E0 (736) -0xFFFF, 0xFFFF, 0xFFFF, 0x8D17, 0x01D3, 0x23B9, 0x7E3E, 0x8E9F, 0x763F, 0x765F, 0x8E9F, 0x9EDF, 0xA71F, 0xB75F, 0xC7BF, 0xCFDF, // 0x02F0 (752) -0xCFDF, 0xC7BF, 0xB75F, 0xA71F, 0x9EDF, 0x8E9F, 0x765F, 0x6E1F, 0x867F, 0x8E7F, 0x4CBB, 0x1317, 0x4BB4, 0xD679, 0xFFFF, 0xFFFF, // 0x0300 (768) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFBD, 0x7476, 0x0214, 0x1B78, 0x659D, 0x9EDF, 0x9EFF, 0x96DF, 0x9EFF, 0xAF1F, 0xB75F, 0xC79F, 0xD7DF, // 0x0310 (784) -0xD7DF, 0xC79F, 0xB75F, 0xAF1F, 0x9EDF, 0x96DF, 0x96DF, 0x9EFF, 0x7E1E, 0x3C5A, 0x1B77, 0x43B5, 0xBDD6, 0xF7BE, 0xFFFF, 0xFFFF, // 0x0320 (800) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF77D, 0x7CB6, 0x12B4, 0x1337, 0x449B, 0x7DFD, 0xA6FF, 0xB75F, 0xBF7F, 0xC79F, 0xCFBF, 0xD7FF, // 0x0330 (816) -0xD7FF, 0xCFBF, 0xC79F, 0xBF7F, 0xB77F, 0xAF1F, 0x8E5E, 0x551B, 0x3419, 0x2BD7, 0x5415, 0xB5B6, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0340 (832) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF79D, 0xA577, 0x3B75, 0x1B36, 0x2BD9, 0x4CBB, 0x759D, 0x965E, 0xAEDF, 0xBF3F, 0xC77F, // 0x0350 (848) -0xC77F, 0xBF3F, 0xB6FF, 0x9E7F, 0x7DDD, 0x5D1C, 0x447A, 0x3C59, 0x4437, 0x7474, 0xC617, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0360 (864) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDE, 0xD699, 0x84D5, 0x43D5, 0x33B7, 0x3418, 0x4C7A, 0x5CFC, 0x753D, 0x857E, // 0x0370 (880) -0x859E, 0x755D, 0x653C, 0x5CFB, 0x4CDA, 0x4CB9, 0x5497, 0x6C95, 0xA555, 0xDEDA, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0380 (896) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF79D, 0xCE79, 0x9D56, 0x7495, 0x5C56, 0x4C77, 0x4C97, 0x4CB8, // 0x0390 (912) -0x54D8, 0x5CD8, 0x5CF8, 0x64D7, 0x74D6, 0x8CF5, 0xAD96, 0xD699, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03A0 (928) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFBE, 0xEF1B, 0xD679, 0xBDF7, 0xAD96, 0xA576, // 0x03B0 (944) -0xA576, 0xAD76, 0xB5B6, 0xC5F7, 0xD679, 0xEF3C, 0xFFDE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03C0 (960) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFBE, // 0x03D0 (976) -0xF7BE, 0xF7BE, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03E0 (992) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03F0 (1008) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0400 (1024) -}; diff --git a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap/tux.c b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap/tux.c deleted file mode 100644 index 69a04a1..0000000 --- a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap/tux.c +++ /dev/null @@ -1,71 +0,0 @@ -// Generated by : ImageConverter 565 v1.0 -// Generated from: tux.png -// Time generated: 11.10.2010 22:51:32 -// Size : 2 048 Bytes - -const unsigned short tux[0x400] ={ -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE73C, 0x9CD3, 0x9CF3, 0xA514, // 0x0010 (16) -0x9CF3, 0x8C51, 0xAD75, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0020 (32) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF7D, 0x5AEB, 0x7BEF, 0x9CD3, 0x94B2, // 0x0030 (48) -0x94B2, 0x94B2, 0x4228, 0x7BEF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0040 (64) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x9CF3, 0x18E3, 0x630C, 0x4A49, 0x4A69, // 0x0050 (80) -0x4A69, 0x528A, 0x4A49, 0x0000, 0xC638, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0060 (96) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x6B6D, 0x0000, 0x0020, 0x10A2, 0x1082, // 0x0070 (112) -0x0841, 0x0841, 0x0841, 0x0000, 0x630C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0080 (128) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x528A, 0x4228, 0x8410, 0x0000, 0x0861, // 0x0090 (144) -0xAD55, 0xBDD7, 0x10A2, 0x0000, 0x2945, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00A0 (160) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x5ACB, 0x8C71, 0xE75D, 0x2126, 0x528B, // 0x00B0 (176) -0xE75D, 0xDEDB, 0x7BCF, 0x0000, 0x18E3, 0xE73C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00C0 (192) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x6B6D, 0x4A4A, 0x6B2A, 0x8BE7, 0xA48A, // 0x00D0 (208) -0x6B09, 0x4A8A, 0x8431, 0x0000, 0x2104, 0xE73C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00E0 (224) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x6B6E, 0x5204, 0xDE6A, 0xFFF7, 0xFFF8, // 0x00F0 (240) -0xD5AC, 0xBCAA, 0x5A66, 0x0000, 0x1082, 0xDEFB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0100 (256) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x8C10, 0xC540, 0xFFED, 0xFF2C, 0xFEEC, // 0x0110 (272) -0xFECC, 0xFE66, 0x8260, 0x0000, 0x0000, 0xB596, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0120 (288) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x94B3, 0x9C25, 0xFF20, 0xFE40, 0xFDA0, // 0x0130 (304) -0xFCC0, 0xF524, 0x836A, 0x0000, 0x0000, 0x630C, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0140 (320) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x630C, 0x94B4, 0xFF13, 0xFD83, 0xF523, // 0x0150 (336) -0xE5CF, 0xF79E, 0xE71D, 0x0861, 0x0000, 0x0861, 0xDEDB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0160 (352) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xCE59, 0x0841, 0xD69A, 0xFFFF, 0xFF7D, 0xF77D, // 0x0170 (368) -0xFFFF, 0xFFFF, 0xFFFF, 0x73AE, 0x0000, 0x0000, 0x4A69, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0180 (384) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF79E, 0x10A2, 0x8410, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, // 0x0190 (400) -0xFFFF, 0xFFDF, 0xFFFF, 0xCE59, 0x0000, 0x0000, 0x0000, 0x9492, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01A0 (416) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x52AA, 0x0020, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01B0 (432) -0xFFDF, 0xFFDF, 0xF7BE, 0xFFDF, 0x3186, 0x0000, 0x0020, 0x0841, 0xCE79, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01C0 (448) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xC638, 0x0000, 0x52AA, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFDF, // 0x01D0 (464) -0xFFDF, 0xF7BE, 0xF79E, 0xFFFF, 0x9CF3, 0x0000, 0x0841, 0x0000, 0x39E7, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01E0 (480) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x5ACB, 0x0000, 0xBDF7, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFDF, 0xFFDF, // 0x01F0 (496) -0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0x3186, 0x0000, 0x0861, 0x0000, 0xAD55, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0200 (512) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE73C, 0x0861, 0x4A49, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, // 0x0210 (528) -0xF7BE, 0xF79E, 0xEF7D, 0xEF5D, 0xFFDF, 0x8410, 0x0000, 0x1082, 0x0000, 0x39E7, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0220 (544) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x94B2, 0x0000, 0xB596, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, // 0x0230 (560) -0xF79E, 0xEF7D, 0xEF7D, 0xE73C, 0xF79E, 0xAD55, 0x0861, 0x10A2, 0x0861, 0x0841, 0xCE59, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0240 (576) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF79E, 0x3185, 0x10A2, 0xE71C, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF79E, // 0x0250 (592) -0xEF7D, 0xEF7D, 0xEF5D, 0xE73C, 0xEF5D, 0xBDF7, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x8C71, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0260 (608) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x94B2, 0x0000, 0x39E7, 0xF7BE, 0xFFFF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF79E, 0xEF7D, // 0x0270 (624) -0xEF7D, 0xEF5D, 0xE73C, 0xE71C, 0xE71C, 0xC618, 0x18E3, 0x10A2, 0x10A2, 0x0020, 0x6B4D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0280 (640) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x8C51, 0x38E0, 0x4A27, 0xFFFF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF79E, 0xEF7D, 0xEF7D, // 0x0290 (656) -0xEF5D, 0xE73C, 0xE71C, 0xDEFB, 0xDF1D, 0xBDF8, 0x39C7, 0x5ACB, 0x528A, 0x10A3, 0x738F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02A0 (672) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDD6C, 0xFE2B, 0xBC45, 0xA513, 0xFFFF, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF5D, // 0x02B0 (688) -0xE73C, 0xE71C, 0xDEFB, 0xD6DC, 0xDD8E, 0xB3E4, 0x2124, 0x2965, 0x2945, 0x20C1, 0xB511, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02C0 (704) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF77C, 0xE5CF, 0xF60B, 0xFF9B, 0xFF54, 0x8B02, 0x7BF0, 0xFFDF, 0xF79E, 0xEF5D, 0xEF5D, 0xE73C, // 0x02D0 (720) -0xE71C, 0xDEFB, 0xDEDB, 0xCE7A, 0xED89, 0xDDAD, 0x0842, 0x0000, 0x0000, 0xAC69, 0xDD6B, 0xEFBF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02E0 (736) -0xFFFF, 0xFFFF, 0xFFBE, 0xE5CB, 0xEDC9, 0xFE4B, 0xFF14, 0xFEF3, 0xFF35, 0xFE8D, 0x51C1, 0x634E, 0xE73C, 0xEF5D, 0xE73C, 0xE71C, // 0x02F0 (752) -0xDEFB, 0xDEDB, 0xD6DB, 0xCE59, 0xE58B, 0xFF98, 0xBD4F, 0x8B88, 0xCD90, 0xFFB7, 0xCCE8, 0xE73D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0300 (768) -0xFFFF, 0xFFFF, 0xEF3B, 0xF583, 0xFF30, 0xFF11, 0xFECF, 0xFEEF, 0xFECF, 0xFF30, 0xDD46, 0x2903, 0x6B8E, 0xEF7D, 0xE71C, 0xDEFB, // 0x0310 (784) -0xDEDB, 0xD6BA, 0xD69A, 0xCE59, 0xE5AA, 0xFF11, 0xFF53, 0xFF73, 0xFF33, 0xFF12, 0xFE6C, 0xDDAD, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0320 (800) -0xFFFF, 0xFFFF, 0xF79E, 0xEDC5, 0xFECB, 0xFECC, 0xFECC, 0xFEEC, 0xFECB, 0xFECC, 0xFEEA, 0x9BE5, 0x8432, 0xE73C, 0xDEDB, 0xDEDB, // 0x0330 (816) -0xD6BA, 0xD69A, 0xDEDB, 0xA4F3, 0xD547, 0xFF2E, 0xFECD, 0xFECE, 0xFEEE, 0xFEEE, 0xFF10, 0xFEAB, 0xE5A8, 0xEF7D, 0xFFFF, 0xFFFF, // 0x0340 (832) -0xFFFF, 0xFFFF, 0xF79E, 0xF603, 0xFEA2, 0xFEC7, 0xFEC7, 0xFEA4, 0xFE81, 0xFE61, 0xFEA4, 0xFE43, 0xDE33, 0xE75E, 0xE71C, 0xDEFB, // 0x0350 (848) -0xDEDB, 0xCE58, 0x8C72, 0x5247, 0xEDE4, 0xFF0A, 0xFECA, 0xFEC9, 0xFE84, 0xFE83, 0xFEE7, 0xFEA3, 0xB443, 0xD69B, 0xFFFF, 0xFFFF, // 0x0360 (864) -0xFFFF, 0xFFFF, 0xF75B, 0xFE60, 0xFF00, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEE0, 0xE5C1, 0x9492, 0xA514, 0x9CD3, // 0x0370 (880) -0x8410, 0x630B, 0x4229, 0x6AE8, 0xFE80, 0xFEC1, 0xFEC1, 0xFEA0, 0xFEA0, 0xFEE0, 0xDD80, 0x9BE8, 0xB597, 0xFFDF, 0xFFFF, 0xFFFF, // 0x0380 (896) -0xFFFF, 0xFFFF, 0xF79E, 0xD589, 0xE600, 0xFEA0, 0xFF00, 0xFF40, 0xFF40, 0xFF00, 0xFF00, 0xFF20, 0xFEC0, 0x5267, 0x4229, 0x4A48, // 0x0390 (912) -0x4A49, 0x5289, 0x424A, 0x7B46, 0xFF20, 0xFEE0, 0xFEE0, 0xFF20, 0xFEE0, 0xB4A5, 0x9C92, 0xDEFD, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03A0 (928) -0xFFFF, 0xFFFF, 0xFFFF, 0xE71D, 0xBDB6, 0xB530, 0xBD0B, 0xCD65, 0xEE60, 0xFF40, 0xFFA0, 0xFF80, 0xBD03, 0x8410, 0xA514, 0xA534, // 0x03B0 (944) -0xAD75, 0xB596, 0xA555, 0x9C8F, 0xF6C0, 0xFFA0, 0xFFA0, 0xF6E0, 0xA449, 0xB5B8, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03C0 (960) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF7F, 0xD69C, 0xBD95, 0xBD4C, 0xCDC6, 0xB4E8, 0xAD35, 0xF7BF, 0xFFFF, 0xFFFF, // 0x03D0 (976) -0xFFFF, 0xFFFF, 0xFFFF, 0xF7BF, 0xCDD0, 0xCDC6, 0xCDA7, 0xA48D, 0xCE7B, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03E0 (992) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDF1F, 0xB59A, 0xBDDA, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, // 0x03F0 (1008) -0xFFFF, 0xFFDF, 0xFFDF, 0xFFFF, 0xEF7F, 0xB59A, 0xAD59, 0xDF1D, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0400 (1024) -}; diff --git a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap_128x128/UTFT_Bitmap_128x128.ino b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap_128x128/UTFT_Bitmap_128x128.ino deleted file mode 100644 index 3cc269e..0000000 --- a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap_128x128/UTFT_Bitmap_128x128.ino +++ /dev/null @@ -1,49 +0,0 @@ -// UTFT_Bitmap_128x128 (C)2013 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of the drawBitmap()-function. -// -// This demo was made to work on the 128x128 modules. -// Any other size displays may cause strange behaviour. -// -// This program requires the UTFT library. -// - -#include - -UTFT myGLCD(LPH9135,6,5,2,3,4); // Remember to change the model parameter to suit your display module! - -extern unsigned short icon1[0x400]; -extern unsigned short icon2[0x400]; -extern unsigned short tux[0x1000]; - -void setup() -{ - myGLCD.InitLCD(PORTRAIT); -} - -void loop() -{ -// Draw a 4 by 4 grid of a 32x32 icon. - myGLCD.fillScr(255, 255, 255); - for (int x=0; x<4; x++) - for (int y=0; y<4; y++) - myGLCD.drawBitmap (x*32, y*32, 32, 32, icon1); - - delay(5000); - -// Draw a 64x64 icon in double size. - myGLCD.fillScr(255, 255, 255); - myGLCD.drawBitmap (0, 0, 64, 64, tux, 2); - - delay(5000); - -// Draw a 2 by 2 grid of a 32x32 icon in double size. - myGLCD.fillScr(255, 255, 255); - for (int x=0; x<2; x++) - for (int y=0; y<2; y++) - myGLCD.drawBitmap (x*64, y*64, 32, 32, icon2, 2); - - delay(5000); -} - diff --git a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap_128x128/icon1.c b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap_128x128/icon1.c deleted file mode 100644 index b9c2c97..0000000 --- a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap_128x128/icon1.c +++ /dev/null @@ -1,72 +0,0 @@ -// Generated by : ImageConverter 565 v1.0 -// Generated from: exit.png -// Time generated: 14.10.2010 21:53:03 -// Dimensions : 32x32 pixels -// Size : 2 048 Bytes - -const unsigned short icon1[0x400] ={ -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF1C, 0xE618, 0xE638, 0xE638, 0xE638, 0xE659, 0xE659, 0xE659, 0xE659, 0xE659, 0xE679, 0xE679, // 0x0010 (16) -0xE679, 0xE679, 0xE679, 0xE679, 0xEE79, 0xEE9A, 0xEE9A, 0xEE9A, 0xEE9A, 0xEE9A, 0xE638, 0xEEBA, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0020 (32) -0xFFFF, 0xFFFF, 0xFFFF, 0xD555, 0xCCD3, 0xDDB6, 0xDDD7, 0xDDF7, 0xDDF7, 0xDE18, 0xE618, 0xE638, 0xE638, 0xE659, 0xE679, 0xE679, // 0x0030 (48) -0xEE9A, 0xEE9A, 0xEEBA, 0xEEBA, 0xEEBA, 0xEEDB, 0xEEDB, 0xEEFB, 0xEEFB, 0xEEFB, 0xEEFB, 0xE659, 0xD575, 0xF77D, 0xFFFF, 0xFFFF, // 0x0040 (64) -0xFFDF, 0xFFFF, 0xD534, 0xC471, 0xD575, 0xCCF3, 0xCCD3, 0xCCD3, 0xCCF3, 0xCCF3, 0xD4F3, 0xD514, 0xD514, 0xD514, 0xD534, 0xDD55, // 0x0050 (80) -0xDD55, 0xDD55, 0xDD55, 0xDD75, 0xDD75, 0xDD75, 0xDD96, 0xDD96, 0xDD96, 0xDDB6, 0xDDD7, 0xEE79, 0xEEBA, 0xD534, 0xFFBE, 0xFFFF, // 0x0060 (96) -0xFFFF, 0xEEDB, 0xB38E, 0xC4B2, 0xBC30, 0xC451, 0xC471, 0xC471, 0xCC71, 0xCC92, 0xCC92, 0xCC92, 0xCCB2, 0xD4B2, 0xD4B2, 0xCC71, // 0x0070 (112) -0xCC71, 0xD4D3, 0xD4F3, 0xDCF3, 0xDCF3, 0xDD14, 0xDD14, 0xDD14, 0xDD34, 0xDD34, 0xDD34, 0xDD14, 0xE5D7, 0xDD96, 0xDDF7, 0xFFFF, // 0x0080 (128) -0xFFFF, 0xC4F3, 0xAB2C, 0xC430, 0xC410, 0xC430, 0xC430, 0xC430, 0xCC51, 0xCC51, 0xCC51, 0xCC71, 0xCC71, 0xD471, 0xCC71, 0xD5F7, // 0x0090 (144) -0xD5F7, 0xCC92, 0xDCB2, 0xDCD3, 0xDCD3, 0xDCD3, 0xDCD3, 0xDCF3, 0xDCF3, 0xDD14, 0xDD14, 0xDD34, 0xDD14, 0xDD34, 0xC492, 0xFFFF, // 0x00A0 (160) -0xFFFF, 0xB3EF, 0x9A28, 0xC430, 0xBBCF, 0xC3EF, 0xC3EF, 0xC3EF, 0xC410, 0xCC10, 0xCC10, 0xCC30, 0xCC51, 0xCBEF, 0xE638, 0xFFFF, // 0x00B0 (176) -0xFFFF, 0xE659, 0xD430, 0xDC92, 0xDC92, 0xDC92, 0xDCB2, 0xDCB2, 0xDCB2, 0xDCD3, 0xDCD3, 0xDCD3, 0xE514, 0xD410, 0xAB0C, 0xF7FF, // 0x00C0 (192) -0xFFFF, 0xABCF, 0x9165, 0xC3EF, 0xBB8E, 0xBBAE, 0xC3AE, 0xC3CF, 0xC3CF, 0xCBCF, 0xCBEF, 0xCC10, 0xCC10, 0xCBAE, 0xEE9A, 0xFFFF, // 0x00D0 (208) -0xFFFF, 0xF6DB, 0xD410, 0xDC71, 0xDC71, 0xDC71, 0xDC71, 0xDC71, 0xDC71, 0xE492, 0xE492, 0xE492, 0xE4F3, 0xCB2C, 0xA249, 0xF7FF, // 0x00E0 (224) -0xFFFF, 0xABCF, 0x88C3, 0xC3AE, 0xBB4D, 0xBB6D, 0xC36D, 0xC38E, 0xC38E, 0xCBAE, 0xC36D, 0xC34D, 0xCBCF, 0xCB8E, 0xEE59, 0xFFFF, // 0x00F0 (240) -0xFFFF, 0xF6BA, 0xDBCF, 0xD3CF, 0xCBAE, 0xD3CF, 0xE430, 0xE430, 0xE451, 0xE451, 0xE451, 0xE451, 0xECD3, 0xCAAA, 0xA208, 0xF7FF, // 0x0100 (256) -0xFFFF, 0xABCF, 0x8061, 0xBB6D, 0xBB2C, 0xBB2C, 0xC34D, 0xC34D, 0xCB4D, 0xBB0C, 0xC492, 0xCD14, 0xC38E, 0xCB2C, 0xEE59, 0xFFFF, // 0x0110 (272) -0xFFFF, 0xF6BA, 0xD36D, 0xD575, 0xE6DB, 0xDDB6, 0xD3AE, 0xE3EF, 0xE410, 0xE410, 0xE430, 0xE410, 0xECB2, 0xC986, 0xA208, 0xF7FF, // 0x0120 (288) -0xFFFF, 0xB3EF, 0x8041, 0xBB0C, 0xBAEB, 0xBAEB, 0xC30C, 0xC30C, 0xBACB, 0xD5B6, 0xFFFF, 0xFFFF, 0xEE79, 0xCACB, 0xEE59, 0xFFFF, // 0x0130 (304) -0xFFFF, 0xF679, 0xDBEF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEEBA, 0xD3CF, 0xE3AE, 0xE3EF, 0xE3CF, 0xEC10, 0xEB6D, 0xC000, 0xA249, 0xF7FF, // 0x0140 (320) -0xFFFF, 0xB3EF, 0x8020, 0xBACB, 0xBAAA, 0xBAAA, 0xC2EB, 0xBA8A, 0xD596, 0xFFFF, 0xFFDF, 0xFFFF, 0xF73C, 0xCAAA, 0xEE38, 0xFFFF, // 0x0150 (336) -0xFFFF, 0xF679, 0xDB4D, 0xFF7D, 0xFFFF, 0xFFDF, 0xFFFF, 0xEEDB, 0xDB6D, 0xEB8E, 0xEBAE, 0xEB8E, 0xE0A2, 0xC800, 0xAA49, 0xF7FF, // 0x0160 (352) -0xFFFF, 0xB3EF, 0x8000, 0xB28A, 0xBA69, 0xBA8A, 0xBA49, 0xCC30, 0xFFFF, 0xFFDF, 0xFFFF, 0xFF5D, 0xDBCF, 0xCA69, 0xEE18, 0xFFFF, // 0x0170 (368) -0xFFFF, 0xF679, 0xDAAA, 0xE3AE, 0xF6BA, 0xFFFF, 0xFFDF, 0xFFFF, 0xE5D7, 0xE30C, 0xEB8E, 0xE0E3, 0xE000, 0xC800, 0xAA49, 0xF7FF, // 0x0180 (384) -0xFFFF, 0xB3EF, 0x8800, 0xB249, 0xBA49, 0xBA49, 0xBA49, 0xEF1C, 0xFFFF, 0xFFFF, 0xFF7D, 0xD32C, 0xCA69, 0xD249, 0xEDF7, 0xFFFF, // 0x0190 (400) -0xFFFF, 0xF659, 0xDAAA, 0xE2CB, 0xE2EB, 0xFEBA, 0xFFFF, 0xFFDF, 0xFFDF, 0xE3CF, 0xE103, 0xE000, 0xE081, 0xD000, 0xAA69, 0xF7FF, // 0x01A0 (416) -0xFFFF, 0xB3EF, 0x8800, 0xB228, 0xBA08, 0xB9A6, 0xCBAE, 0xFFFF, 0xFFDF, 0xFFFF, 0xDC30, 0xC9E7, 0xD28A, 0xCA08, 0xF618, 0xFFFF, // 0x01B0 (432) -0xFFFF, 0xF679, 0xDA49, 0xE2CB, 0xE28A, 0xEB6D, 0xFFBE, 0xFFDF, 0xFFFF, 0xEC92, 0xE000, 0xE0A2, 0xE0C2, 0xD040, 0xAA89, 0xF7FF, // 0x01C0 (448) -0xFFFF, 0xB3EF, 0x8800, 0xB1E7, 0xB9E7, 0xB165, 0xDD55, 0xFFFF, 0xFFFF, 0xF71C, 0xCA08, 0xCA08, 0xD228, 0xD1E7, 0xE430, 0xFFDF, // 0x01D0 (464) -0xFFDF, 0xEC51, 0xDA08, 0xE28A, 0xE28A, 0xE228, 0xF618, 0xFFFF, 0xFFFF, 0xF679, 0xE081, 0xE0C2, 0xE903, 0xD081, 0xAA89, 0xF7FF, // 0x01E0 (480) -0xFFFF, 0xBBEF, 0x9000, 0xB1A6, 0xB986, 0xB145, 0xEE38, 0xFFFF, 0xFFFF, 0xED96, 0xC165, 0xC9E7, 0xD1E7, 0xD1E7, 0xD1C7, 0xDACB, // 0x01F0 (496) -0xE2EB, 0xD9E7, 0xE228, 0xE228, 0xEA69, 0xE9E7, 0xF40F, 0xFFFF, 0xFFFF, 0xFF5D, 0xE144, 0xE8E2, 0xE943, 0xD8C1, 0xAA8A, 0xF7FF, // 0x0200 (512) -0xFFFF, 0xBC10, 0x9000, 0xB165, 0xB145, 0xB924, 0xEE9A, 0xFFFF, 0xFFFF, 0xE514, 0xC124, 0xC9A6, 0xD1A6, 0xD1A6, 0xD1C7, 0xD9A6, // 0x0210 (528) -0xD9A6, 0xE1E7, 0xE208, 0xE208, 0xE9A6, 0xE041, 0xEA8A, 0xFFFF, 0xFFFF, 0xFF9E, 0xE9C6, 0xE902, 0xE984, 0xD902, 0xAAAA, 0xF7FF, // 0x0220 (544) -0xFFFF, 0xC410, 0x9000, 0xB124, 0xB124, 0xB0C3, 0xEE18, 0xFFFF, 0xFFFF, 0xE575, 0xC0E3, 0xC986, 0xD165, 0xD165, 0xD986, 0xD9A6, // 0x0230 (560) -0xD9A6, 0xE1A6, 0xE165, 0xE082, 0xE020, 0xE000, 0xEB4C, 0xFFFF, 0xFFFF, 0xFF7D, 0xE9A5, 0xE943, 0xE9A5, 0xD923, 0xAAAA, 0xF7FF, // 0x0240 (576) -0xFFFF, 0xC410, 0x9800, 0xB0E3, 0xB0E3, 0xB061, 0xE4F3, 0xFFFF, 0xFFFF, 0xF6FB, 0xC104, 0xC924, 0xD145, 0xD145, 0xD945, 0xD945, // 0x0250 (592) -0xD8E3, 0xD861, 0xD800, 0xE000, 0xE061, 0xE000, 0xED34, 0xFFFF, 0xFFFF, 0xFE9A, 0xE923, 0xE984, 0xE9C5, 0xE163, 0xAAAA, 0xF7FF, // 0x0260 (608) -0xFFFF, 0xC410, 0xA000, 0xB0A2, 0xB0A2, 0xB041, 0xCACB, 0xFFFF, 0xFFDF, 0xFFFF, 0xD34D, 0xC841, 0xD104, 0xD0A2, 0xD061, 0xD000, // 0x0270 (624) -0xD800, 0xD800, 0xE000, 0xE041, 0xE000, 0xD965, 0xFF9E, 0xFFDF, 0xFFFF, 0xF4D2, 0xE8E2, 0xE9A5, 0xE9E5, 0xE183, 0xAAAA, 0xF7FF, // 0x0280 (640) -0xFFFF, 0xCC10, 0xA000, 0xA861, 0xB061, 0xB061, 0xB882, 0xF6DB, 0xFFFF, 0xFFDF, 0xF75D, 0xC124, 0xC800, 0xD000, 0xD000, 0xD800, // 0x0290 (656) -0xD800, 0xE000, 0xE020, 0xE000, 0xD861, 0xF638, 0xFFFF, 0xFFDF, 0xFFDF, 0xEA68, 0xE943, 0xE9C5, 0xEA06, 0xE1A4, 0xB2CA, 0xF7FF, // 0x02A0 (672) -0xFFFF, 0xCC10, 0xA000, 0xA820, 0xB000, 0xB000, 0xB000, 0xCA49, 0xFFFF, 0xFFDF, 0xFFFF, 0xF71C, 0xCA08, 0xC800, 0xD000, 0xD800, // 0x02B0 (688) -0xD800, 0xD800, 0xD800, 0xD944, 0xEE18, 0xFFFF, 0xFFBE, 0xFFFF, 0xF4F2, 0xE902, 0xE9A5, 0xE9C5, 0xEA06, 0xE9A4, 0xB2CA, 0xF7FF, // 0x02C0 (704) -0xFFFF, 0xD410, 0xA800, 0xA800, 0xB000, 0xB000, 0xB800, 0xB800, 0xDC10, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xED96, 0xDAEB, 0xD1A6, // 0x02D0 (720) -0xD965, 0xDA69, 0xECD3, 0xFF9E, 0xFFFF, 0xFFBE, 0xFFFF, 0xFE17, 0xE923, 0xE964, 0xE9A5, 0xE9C5, 0xEA26, 0xE9C4, 0xBACA, 0xF7FF, // 0x02E0 (736) -0xF7FF, 0xD410, 0xA800, 0xA800, 0xB000, 0xB000, 0xB800, 0xB800, 0xB800, 0xE3EF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02F0 (752) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF5B6, 0xE923, 0xE923, 0xE984, 0xE9A5, 0xE9E5, 0xEA26, 0xE9C5, 0xBACA, 0xF7FF, // 0x0300 (768) -0xF7FF, 0xDC10, 0xB000, 0xA800, 0xB000, 0xB000, 0xB800, 0xB800, 0xC000, 0xC000, 0xD228, 0xF638, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0310 (784) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFEFB, 0xF3AE, 0xE0C1, 0xE903, 0xE964, 0xE984, 0xE9A5, 0xE9E5, 0xEA26, 0xE9E5, 0xC2CA, 0xF7DF, // 0x0320 (800) -0xF7FF, 0xDC51, 0xB800, 0xA800, 0xB000, 0xB000, 0xB800, 0xB800, 0xC000, 0xC000, 0xC000, 0xC800, 0xD9E7, 0xEC30, 0xF5D7, 0xFE9A, // 0x0330 (816) -0xFEBA, 0xF618, 0xF4D3, 0xEACB, 0xE0E2, 0xE040, 0xE903, 0xE943, 0xE943, 0xE984, 0xE9A5, 0xE9E5, 0xEA26, 0xEA05, 0xC30C, 0xF7DF, // 0x0340 (832) -0xFFFF, 0xD575, 0xD104, 0xA820, 0xB000, 0xB800, 0xB800, 0xC000, 0xC000, 0xC000, 0xC820, 0xC800, 0xD000, 0xD000, 0xD800, 0xD800, // 0x0350 (848) -0xE000, 0xE000, 0xE000, 0xE000, 0xE0A1, 0xE0E3, 0xE903, 0xE943, 0xE964, 0xE984, 0xE9C5, 0xE9C5, 0xF226, 0xE227, 0xBC10, 0xF7FF, // 0x0360 (864) -0xFFFF, 0xDF3C, 0xCAAA, 0xD186, 0xB082, 0xB000, 0xB800, 0xB800, 0xB800, 0xC000, 0xC000, 0xC800, 0xC800, 0xD000, 0xD000, 0xD800, // 0x0370 (880) -0xD800, 0xE000, 0xE020, 0xE040, 0xE061, 0xE0A1, 0xE0C2, 0xE102, 0xE123, 0xE943, 0xE984, 0xEA26, 0xFB0A, 0xBA08, 0xCE38, 0xFFFF, // 0x0380 (896) -0xFFFF, 0xFFDF, 0xBDD7, 0xCA69, 0xE248, 0xD207, 0xD1C6, 0xD1C6, 0xD9C7, 0xD9C7, 0xE1C7, 0xE1C7, 0xE1C7, 0xE9C7, 0xE9C7, 0xE9C7, // 0x0390 (912) -0xF1C6, 0xF1C7, 0xF1E7, 0xF207, 0xF228, 0xF248, 0xF269, 0xF289, 0xF2A9, 0xF2CA, 0xFB0A, 0xF2EA, 0xC207, 0xACB3, 0xF7BE, 0xFFFF, // 0x03A0 (928) -0xFFFF, 0xFFFF, 0xF7BE, 0xBDF7, 0xAB8E, 0xC2EB, 0xC2EB, 0xC30B, 0xC30B, 0xC30B, 0xC30B, 0xC30B, 0xC30B, 0xC30B, 0xCB0B, 0xCAEB, // 0x03B0 (944) -0xCAEB, 0xCACA, 0xCACA, 0xCAAA, 0xCAAA, 0xCA8A, 0xCA69, 0xC269, 0xC269, 0xC289, 0xBA69, 0xA2CB, 0xAD34, 0xEF7D, 0xFFFF, 0xFFFF, // 0x03C0 (960) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xDF3C, 0xBE39, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, // 0x03D0 (976) -0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xBE38, 0xD71C, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03E0 (992) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03F0 (1008) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0400 (1024) -}; diff --git a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap_128x128/icon2.c b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap_128x128/icon2.c deleted file mode 100644 index 9b843cc..0000000 --- a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap_128x128/icon2.c +++ /dev/null @@ -1,72 +0,0 @@ -// Generated by : ImageConverter 565 v1.0 -// Generated from: video.png -// Time generated: 14.10.2010 21:53:17 -// Dimensions : 32x32 pixels -// Size : 2 048 Bytes - -const unsigned short icon2[0x400] ={ -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0010 (16) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0020 (32) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE71C, 0xB5B6, 0x94B2, 0x8C71, // 0x0030 (48) -0x9492, 0xA534, 0xD6BA, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0040 (64) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF5D, 0x9CF3, 0x73AE, 0x6B6D, 0x73AE, 0x7BCF, // 0x0050 (80) -0x7BEF, 0x7BCF, 0x7BEF, 0xA534, 0xEF7D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0060 (96) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xC638, 0x7BCF, 0x6B6D, 0x738E, 0x7BCF, 0x8C71, 0x9492, // 0x0070 (112) -0x9492, 0x9492, 0x9492, 0x8C51, 0x8C71, 0xDEDB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0080 (128) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xB596, 0x738E, 0x738E, 0x73AE, 0x6B4D, 0x8410, 0x9CF3, 0x9CF3, // 0x0090 (144) -0x9CF3, 0x9CF3, 0x9CF3, 0x9CF3, 0x94B2, 0x7BEF, 0xDEDB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00A0 (160) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xB596, 0x738E, 0x7BEF, 0x8410, 0x632C, 0x4A69, 0x9492, 0xAD75, 0xAD55, // 0x00B0 (176) -0xAD55, 0xAD55, 0xAD55, 0xA534, 0xAD55, 0x9492, 0x8430, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00C0 (192) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xBDF7, 0x7BCF, 0x8430, 0x7BCF, 0x6B4D, 0x528A, 0x6B6D, 0xB5B6, 0xB5B6, 0xB5B6, // 0x00D0 (208) -0xB5B6, 0xB596, 0xB596, 0xAD75, 0xAD75, 0xAD55, 0x8410, 0xB5B6, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00E0 (224) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEDB, 0x7BEF, 0x9CD3, 0xA514, 0x5AEB, 0x630C, 0x6B4D, 0x9492, 0xC638, 0xC618, 0xC618, // 0x00F0 (240) -0xBDF7, 0xBDF7, 0xC618, 0xB5B6, 0xB5B6, 0xB596, 0x9492, 0x8C51, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0100 (256) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0x8C71, 0x94B2, 0xAD55, 0xB5B6, 0x738E, 0x6B4D, 0x632C, 0xB596, 0xD69A, 0xCE59, 0xCE59, // 0x0110 (272) -0xCE79, 0xCE59, 0x6B6D, 0x9492, 0xB5B6, 0xBDF7, 0x9CF3, 0x8430, 0xD69A, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0120 (288) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xB5B6, 0x8C51, 0xAD55, 0xB5B6, 0xCE79, 0x8C51, 0x630C, 0x8C51, 0xCE79, 0xD6BA, 0xD69A, 0xDEDB, // 0x0130 (304) -0xBDD7, 0x8C51, 0x4228, 0x2965, 0xAD55, 0xC638, 0xA534, 0x8430, 0xB5B6, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0140 (320) -0xFFFF, 0xFFFF, 0xFFFF, 0xEF5D, 0x8C51, 0xA514, 0xB5B6, 0xC618, 0xD6BA, 0xB5B6, 0xB596, 0xE71C, 0xDEFB, 0xDEFB, 0xE71C, 0xAD55, // 0x0150 (336) -0x738E, 0x7BEF, 0x5AEB, 0x2945, 0xC638, 0xCE59, 0xA534, 0x9492, 0xA534, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0160 (352) -0xFFFF, 0xFFFF, 0xFFFF, 0xB596, 0x94B2, 0xB5B6, 0xC618, 0xCE79, 0xD6BA, 0xE73C, 0xEF7D, 0xE73C, 0xEF5D, 0xE73C, 0x9CF3, 0x738E, // 0x0170 (368) -0x7BCF, 0x8430, 0x6B6D, 0x2965, 0xB596, 0xD69A, 0xAD55, 0x94B2, 0x9CD3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0180 (384) -0xFFFF, 0xFFFF, 0xF79E, 0x9492, 0x9CF3, 0xB5B6, 0xD69A, 0xDEFB, 0xE71C, 0xE73C, 0x6B6D, 0x528A, 0xDEDB, 0xEF5D, 0x7BEF, 0x8430, // 0x0190 (400) -0x7BEF, 0x8C51, 0x7BCF, 0x2104, 0xB596, 0xD6BA, 0xAD55, 0x9CD3, 0x9CF3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE73C, 0xE6FC, // 0x01A0 (416) -0xFFDF, 0xFFFF, 0xCE59, 0x9492, 0x9492, 0x6B4D, 0x7BCF, 0xBDD7, 0xF7BE, 0xA514, 0x4A49, 0x528A, 0xC638, 0xEF7D, 0x7BEF, 0x7BEF, // 0x01B0 (432) -0x7BEF, 0x8430, 0x5AEB, 0x10A2, 0xC618, 0xD69A, 0xAD55, 0x94B2, 0xA514, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xCE5A, 0x8BF2, // 0x01C0 (448) -0xFFFF, 0xFFFF, 0xAD55, 0x94B2, 0x8C51, 0x5AEB, 0x632C, 0xBDD7, 0xE73C, 0x630C, 0x632C, 0xBDF7, 0xFFDF, 0xEF5D, 0xBDD7, 0xB5B6, // 0x01D0 (464) -0xAD75, 0xAD75, 0x8C51, 0x738E, 0xD69A, 0xCE59, 0xB596, 0x8C51, 0xB5B6, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xCE39, 0x7350, // 0x01E0 (480) -0xFFFF, 0xF79E, 0x94B2, 0x94B2, 0x7BCF, 0x5AEB, 0x738E, 0xD6BA, 0xD69A, 0x2104, 0x6B6D, 0xF79E, 0xF79E, 0xF79E, 0xF7BE, 0xF79E, // 0x01F0 (496) -0xEF7D, 0xEF5D, 0xE73C, 0xE73C, 0xDEFB, 0xBDF7, 0xBDF7, 0x7BEF, 0xD69A, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xAD36, 0x7350, // 0x0200 (512) -0xFFFF, 0xDEDB, 0x8C51, 0x94B2, 0x738E, 0x632C, 0x73AE, 0xCE79, 0xF7BE, 0x7BEF, 0xA514, 0xF7BE, 0xF79E, 0xEF7D, 0xEF7D, 0xEF5D, // 0x0210 (528) -0xE73C, 0xE71C, 0xDEFB, 0xDEDB, 0xDEDB, 0xBDD7, 0xBDF7, 0x73AE, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0x9C75, 0x736F, // 0x0220 (544) -0xFFFF, 0xCE59, 0x8430, 0x94B2, 0x6B4D, 0x6B4D, 0xB596, 0xE73C, 0xEF7D, 0xFFFF, 0xFFFF, 0xF7BE, 0xF79E, 0xEF7D, 0xEF7D, 0xEF5D, // 0x0230 (560) -0xE73C, 0xE73C, 0xDEFB, 0xDEFB, 0xD6BA, 0xC618, 0xAD55, 0x8C71, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEDB, 0x6AEF, 0x9492, // 0x0240 (576) -0xFFFF, 0xBDF7, 0x8430, 0x8C71, 0x6B6D, 0xB596, 0xE71C, 0xE73C, 0xEF5D, 0xE73C, 0xBDF7, 0xCE59, 0xF7BE, 0xEF7D, 0xEF7D, 0xEF5D, // 0x0250 (592) -0xE73C, 0xE71C, 0xDEFB, 0xDEFB, 0xC638, 0xD69A, 0x8410, 0xC618, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0x9474, 0x6B0E, 0xCE59, // 0x0260 (608) -0xFFFF, 0xB5B6, 0x8410, 0x9492, 0xBDD7, 0xD6BA, 0xD6BA, 0xE71C, 0xE73C, 0x8C71, 0x6B4D, 0xA514, 0xF7BE, 0xEF5D, 0xEF5D, 0xE73C, // 0x0270 (624) -0xE73C, 0xE71C, 0xDEFB, 0xDEDB, 0xCE59, 0xC618, 0x7BCF, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xC5F9, 0x7B51, 0x7BEF, 0xFFFF, // 0x0280 (640) -0xFFFF, 0xB596, 0x8C71, 0xAD75, 0xBDF7, 0xCE59, 0xD69A, 0xE71C, 0xCE79, 0x8410, 0x8410, 0x9CD3, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, // 0x0290 (656) -0xE71C, 0xDEFB, 0xDEFB, 0xCE59, 0xDEDB, 0x8C71, 0xAD75, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEBB, 0x83B2, 0x630C, 0xE73C, 0xFFFF, // 0x02A0 (672) -0xFFFF, 0xB5B6, 0x9492, 0xAD55, 0xBDD7, 0xC638, 0xCE79, 0xDEFB, 0xB596, 0x73AE, 0x8410, 0x8410, 0xDEDB, 0xE73C, 0xE71C, 0xE71C, // 0x02B0 (688) -0xDEFB, 0xDEFB, 0xD6BA, 0xCE59, 0xC618, 0x738E, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEDC, 0x8C14, 0x5ACC, 0xC658, 0xFFFF, 0xFFFF, // 0x02C0 (704) -0xFFFF, 0xC638, 0x8C51, 0xA534, 0xB5B6, 0xBDF7, 0xCE59, 0xD6BA, 0x94B2, 0x738E, 0x8410, 0x8430, 0xCE59, 0xE73C, 0xDEFB, 0xDEFB, // 0x02D0 (720) -0xDEDB, 0xDEFB, 0xBDF7, 0xDEDB, 0x73AE, 0xC618, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEDC, 0x8BD2, 0x5ACC, 0xBDD6, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02E0 (736) -0xFFFF, 0xDEDB, 0x8C51, 0xA514, 0xAD75, 0xBDD7, 0xC638, 0xC618, 0x73AE, 0x7BCF, 0x8410, 0x5ACB, 0x8C51, 0xE73C, 0xDEDB, 0xD6BA, // 0x02F0 (752) -0xDEFB, 0xBDD7, 0xD69A, 0x8C71, 0x8C51, 0xFFFF, 0xFFFF, 0xFFDE, 0xCE5A, 0x7B71, 0x62ED, 0xBDF7, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0300 (768) -0xFFFF, 0xF7BE, 0x94B2, 0x94B2, 0xA534, 0xB596, 0xBDF7, 0xB596, 0x6B6D, 0x4208, 0x2945, 0x18C3, 0x6B6D, 0xDEFB, 0xD69A, 0xDEDB, // 0x0310 (784) -0xB5B6, 0xC618, 0x9CF3, 0x6B4D, 0xFFDE, 0xFFFF, 0xEF5D, 0xAD37, 0x62EE, 0x6B4D, 0xCE79, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0320 (800) -0xFFDF, 0xFFFF, 0xBDF7, 0x8C51, 0xA514, 0xAD55, 0xB596, 0xBDD7, 0xA514, 0x738E, 0xA514, 0xB5B6, 0xCE59, 0xD69A, 0xDEDB, 0xB596, // 0x0330 (816) -0xBDF7, 0xA534, 0x6B4C, 0xEF5D, 0xF79E, 0xBDB8, 0x7370, 0x5AAC, 0x8C71, 0xEF7D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0340 (832) -0xFFFF, 0xFFFF, 0xF79E, 0x94B2, 0x94B2, 0xA534, 0xAD55, 0xB5B6, 0xA534, 0xBDD7, 0xD69A, 0xCE59, 0xCE79, 0xCE59, 0xA534, 0x8430, // 0x0350 (848) -0x738E, 0x3186, 0x7BB0, 0x8C33, 0x7370, 0x62ED, 0x8410, 0xCE59, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0360 (864) -0xFFFF, 0xFFFF, 0xFFFF, 0xDEFB, 0x8C71, 0x9CD3, 0xAD55, 0xB596, 0xBDD7, 0xBDD7, 0xBDF7, 0xC618, 0xB5B6, 0xA534, 0xA534, 0x632C, // 0x0370 (880) -0x6B6D, 0xB5B6, 0xAD76, 0xAD76, 0xBE17, 0xE71B, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0380 (896) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEFB, 0x94B2, 0x8C51, 0x94B2, 0xA534, 0xAD55, 0xAD55, 0x9CD3, 0x8C71, 0x73AE, 0x632C, 0xA534, // 0x0390 (912) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03A0 (928) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0xCE59, 0xA514, 0x8430, 0x7BCF, 0x738E, 0x73AE, 0x8410, 0xA534, 0xEF7D, 0xFFFF, // 0x03B0 (944) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03C0 (960) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0xE73C, 0xE71C, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03D0 (976) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03E0 (992) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, // 0x03F0 (1008) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0400 (1024) -}; diff --git a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap_128x128/tux.c b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap_128x128/tux.c deleted file mode 100644 index 7fefd80..0000000 --- a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Bitmap_128x128/tux.c +++ /dev/null @@ -1,264 +0,0 @@ -// Generated by : ImageConverter 565 v1.0 -// Generated from: tux_64x64.png -// Time generated: 14.10.2010 21:56:38 -// Dimensions : 64x64 pixels -// Size : 8 192 Bytes - -const unsigned short tux[0x1000] ={ -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0010 (16) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xCE79, 0x9CF3, 0x7BCF, 0x738E, 0x738E, // 0x0020 (32) -0x6B6D, 0x94B2, 0xCE79, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0030 (48) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0040 (64) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0050 (80) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xCE79, 0x6B4D, 0x5ACB, 0x8410, 0x9CF3, 0x9CF3, 0x9CF3, // 0x0060 (96) -0x9CD3, 0x73AE, 0x4208, 0x5ACB, 0xCE79, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0070 (112) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0080 (128) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0090 (144) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xA514, 0x3186, 0x8C51, 0xBDF7, 0xC618, 0xBDF7, 0xBDF7, 0xBDF7, // 0x00A0 (160) -0xBDF7, 0xC618, 0xBDD7, 0x738E, 0x18C3, 0x8C51, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00B0 (176) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00C0 (192) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00D0 (208) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xBDD7, 0x10A2, 0x8C71, 0x9CF3, 0x8C71, 0x8C71, 0x8C71, 0x8C71, 0x8C71, // 0x00E0 (224) -0x8C71, 0x8C51, 0x8C51, 0x9CF3, 0x73AE, 0x0000, 0x7BEF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00F0 (240) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0100 (256) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0110 (272) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0x2945, 0x31A6, 0x7BCF, 0x6B4D, 0x6B6D, 0x6B6D, 0x6B6D, 0x6B6D, 0x6B6D, // 0x0120 (288) -0x6B6D, 0x6B6D, 0x6B6D, 0x6B4D, 0x73AE, 0x2124, 0x0000, 0xAD55, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0130 (304) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0140 (320) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0150 (336) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xC638, 0x0000, 0x31A6, 0x52AA, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, // 0x0160 (352) -0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x528A, 0x2104, 0x0000, 0x2965, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0170 (368) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0180 (384) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0190 (400) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x8C71, 0x0000, 0x1082, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, // 0x01A0 (416) -0x3186, 0x3186, 0x3186, 0x3186, 0x2965, 0x0020, 0x0000, 0x0000, 0x9CF3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01B0 (432) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01C0 (448) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01D0 (464) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x630C, 0x0000, 0x0000, 0x0861, 0x18C3, 0x10A2, 0x10A2, 0x10A2, 0x10A2, 0x18C3, // 0x01E0 (480) -0x1082, 0x0841, 0x1082, 0x10A2, 0x0020, 0x0000, 0x0000, 0x0000, 0x528A, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01F0 (496) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0200 (512) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0210 (528) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x4A49, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0220 (544) -0x0861, 0x3186, 0x18C3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2104, 0xD6BA, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0230 (560) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0240 (576) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0250 (592) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x39C7, 0x0000, 0x3186, 0xAD75, 0x8C51, 0x0841, 0x0000, 0x0000, 0x0000, 0x4208, // 0x0260 (608) -0xD6BA, 0xFFDF, 0xE71C, 0x630C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0xAD75, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0270 (624) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0280 (640) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0290 (656) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x39C7, 0x0000, 0xCE59, 0xFFFF, 0xFFFF, 0x94B2, 0x0000, 0x0000, 0x10A2, 0xE73C, // 0x02A0 (672) -0xFFFF, 0xFFFF, 0xFFFF, 0xEF7D, 0x2124, 0x0000, 0x0000, 0x0000, 0x0000, 0x94B2, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02B0 (688) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02C0 (704) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02D0 (720) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x2965, 0x18E3, 0xDEDB, 0x7BCF, 0xAD75, 0xEF5D, 0x2944, 0x0000, 0x5ACA, 0xFFFF, // 0x02E0 (736) -0xAD55, 0x94B2, 0xAD55, 0xF7BE, 0x8410, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C51, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02F0 (752) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0300 (768) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0310 (784) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x39E7, 0x2945, 0xA514, 0x9CF3, 0x8C71, 0xD6BB, 0x39C9, 0x0000, 0x632E, 0xF7DF, // 0x0320 (800) -0x7BEF, 0xAD54, 0x7BEF, 0xBDF7, 0xB596, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C71, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0330 (816) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0340 (832) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0350 (848) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x4A49, 0x18C3, 0x9492, 0x39E7, 0x3187, 0xA48F, 0x8323, 0x5A00, 0x93A6, 0xCDD5, // 0x0360 (864) -0x4209, 0x4249, 0x2965, 0x9CD2, 0xB575, 0x0000, 0x0000, 0x0000, 0x0000, 0x9492, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0370 (880) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0380 (896) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0390 (912) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x5ACB, 0x0000, 0x9D14, 0x2905, 0x6A40, 0xE643, 0xFFAE, 0xFFF3, 0xFF70, 0xDD86, // 0x03A0 (928) -0x7240, 0x1840, 0x18C3, 0xC65A, 0x73CF, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C51, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03B0 (944) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03C0 (960) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03D0 (976) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x738E, 0x0000, 0x5A6A, 0xD566, 0xFF66, 0xFFF8, 0xFFFD, 0xFFDC, 0xFFFD, 0xFFFA, // 0x03E0 (992) -0xFF0E, 0xE566, 0xC464, 0xC4CC, 0x2103, 0x0000, 0x0000, 0x0000, 0x0000, 0x6B6D, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03F0 (1008) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0400 (1024) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0410 (1040) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x7BEF, 0x0800, 0xB440, 0xFFC6, 0xFFF3, 0xFFB4, 0xFFB2, 0xFF92, 0xFF72, 0xFF53, // 0x0420 (1056) -0xFF55, 0xFF75, 0xFEF0, 0xF542, 0x8240, 0x0000, 0x0000, 0x0000, 0x0000, 0x4228, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0430 (1072) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0440 (1088) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0450 (1104) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x8432, 0x4140, 0xFFE2, 0xFFEB, 0xFFAC, 0xFF8B, 0xFF4C, 0xFF2C, 0xFEEC, 0xFECB, // 0x0460 (1120) -0xFE6A, 0xFE08, 0xFDA7, 0xFDC3, 0xA320, 0x0000, 0x0000, 0x0000, 0x0000, 0x18E3, 0xD69A, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0470 (1136) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0480 (1152) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0490 (1168) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x9D14, 0x28A0, 0xF6E0, 0xFFE1, 0xFF43, 0xFF04, 0xFEC4, 0xFE84, 0xFE23, 0xFDE1, // 0x04A0 (1184) -0xFD60, 0xFD20, 0xFD20, 0xFD20, 0x7241, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9CF3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x04B0 (1200) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x04C0 (1216) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x04D0 (1232) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xB5B6, 0x0000, 0xC4A9, 0xFEC0, 0xFF00, 0xFEA0, 0xFE40, 0xFE00, 0xFDA0, 0xFD60, // 0x04E0 (1248) -0xFD40, 0xFD20, 0xEC80, 0xDCC7, 0x8C0F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x52AA, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x04F0 (1264) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0500 (1280) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0510 (1296) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xAD75, 0x0000, 0xD69B, 0xF631, 0xF5C0, 0xFE80, 0xFE00, 0xFDC0, 0xFD60, 0xFD40, // 0x0520 (1312) -0xFCC0, 0xDC86, 0xCD93, 0xE73D, 0xE71C, 0x0861, 0x0000, 0x0000, 0x0000, 0x0000, 0x0861, 0xC618, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0530 (1328) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0540 (1344) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0550 (1360) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x632C, 0x0000, 0xD6BA, 0xFFFF, 0xF5F1, 0xFD40, 0xFD80, 0xFD20, 0xFCE0, 0xECA3, // 0x0560 (1376) -0xDD6F, 0xE6FC, 0xFFFF, 0xFFFF, 0xFFFF, 0x632C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5ACB, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0570 (1392) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0580 (1408) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0590 (1424) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xDEDB, 0x0861, 0x0000, 0xD69A, 0xFFFF, 0xFFFF, 0xFED8, 0xF631, 0xF610, 0xE5F2, 0xE6B9, // 0x05A0 (1440) -0xF7BF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xE71C, 0x10A2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0xB5B6, 0xFFFF, 0xFFFF, 0xFFFF, // 0x05B0 (1456) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x05C0 (1472) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x05D0 (1488) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0x39E7, 0x0000, 0x4228, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7FF, 0xF7DF, 0xFFFF, // 0x05E0 (1504) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x73AE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3186, 0xEF7D, 0xFFFF, 0xFFFF, // 0x05F0 (1520) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0600 (1536) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0610 (1552) -0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x738E, 0x0000, 0x18C3, 0xDEFB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0620 (1568) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFFF, 0xCE59, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6B4D, 0xFFFF, 0xFFFF, // 0x0630 (1584) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0640 (1600) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0650 (1616) -0xFFFF, 0xFFDF, 0xFFFF, 0xA514, 0x0000, 0x0000, 0x9CD3, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0660 (1632) -0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0x2965, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xAD55, 0xFFFF, // 0x0670 (1648) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0680 (1664) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0690 (1680) -0xFFDF, 0xFFFF, 0xD69A, 0x0861, 0x0000, 0x2945, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x06A0 (1696) -0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xFFFF, 0x7BCF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18C3, 0xD6BA, // 0x06B0 (1712) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x06C0 (1728) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x06D0 (1744) -0xFFFF, 0xFFDF, 0x39C7, 0x0000, 0x0000, 0x8430, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x06E0 (1760) -0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xFFFF, 0xCE79, 0x0841, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4228, // 0x06F0 (1776) -0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0700 (1792) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, // 0x0710 (1808) -0xFFFF, 0x94B2, 0x0000, 0x0020, 0x0020, 0xCE79, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, // 0x0720 (1824) -0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xFFDF, 0x4A69, 0x0000, 0x0841, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, // 0x0730 (1840) -0x8C71, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0740 (1856) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0750 (1872) -0xEF7D, 0x2104, 0x0020, 0x0000, 0x3186, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, // 0x0760 (1888) -0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xFFFF, 0xB5B6, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0000, // 0x0770 (1904) -0x10A2, 0xD6BA, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0780 (1920) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, // 0x0790 (1936) -0x8C71, 0x0000, 0x0861, 0x0000, 0x7BCF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, // 0x07A0 (1952) -0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xFFDF, 0x528A, 0x0000, 0x0841, 0x0020, 0x0020, 0x0020, 0x0020, // 0x07B0 (1968) -0x0000, 0x630C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x07C0 (1984) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, // 0x07D0 (2000) -0x3186, 0x0000, 0x0841, 0x10A2, 0xE71C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, // 0x07E0 (2016) -0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xF79E, 0xEF5D, 0xF7BE, 0xBDD7, 0x0841, 0x0861, 0x0841, 0x0841, 0x0841, 0x0020, // 0x07F0 (2032) -0x0020, 0x1082, 0xC638, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0800 (2048) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xBDD7, // 0x0810 (2064) -0x0020, 0x1082, 0x0000, 0x7BEF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, // 0x0820 (2080) -0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF7D, 0x4208, 0x0020, 0x0861, 0x0861, 0x0841, 0x0841, // 0x0830 (2096) -0x0841, 0x0000, 0x630C, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0840 (2112) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x6B4D, // 0x0850 (2128) -0x0000, 0x0861, 0x2104, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, // 0x0860 (2144) -0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xE73C, 0xF7BE, 0x8430, 0x0000, 0x1082, 0x0861, 0x0861, 0x0861, // 0x0870 (2160) -0x0861, 0x0020, 0x18C3, 0xCE79, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0880 (2176) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF5D, 0x2124, // 0x0890 (2192) -0x0861, 0x0020, 0x8410, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, // 0x08A0 (2208) -0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xEF7D, 0xB5B6, 0x0861, 0x1082, 0x1082, 0x0861, 0x0861, // 0x08B0 (2224) -0x0861, 0x0861, 0x0000, 0x8430, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x08C0 (2240) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xA514, 0x0020, // 0x08D0 (2256) -0x10A2, 0x1082, 0xD69A, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, // 0x08E0 (2272) -0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xEF5D, 0xCE79, 0x2124, 0x1082, 0x10A2, 0x1082, 0x1082, // 0x08F0 (2288) -0x0861, 0x1082, 0x0000, 0x4208, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0900 (2304) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0x4208, 0x0861, // 0x0910 (2320) -0x1082, 0x31A6, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, // 0x0920 (2336) -0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEDB, 0x39C7, 0x1082, 0x10A2, 0x10A2, 0x1082, // 0x0930 (2352) -0x1082, 0x1082, 0x0841, 0x18C3, 0xC618, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0940 (2368) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xA534, 0x0841, 0x18C3, // 0x0950 (2384) -0x0841, 0x630C, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, // 0x0960 (2400) -0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xDEFB, 0xE73C, 0x4A49, 0x0861, 0x18C3, 0x10A2, 0x10A2, // 0x0970 (2416) -0x10A2, 0x1082, 0x1082, 0x0841, 0x9CD3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0980 (2432) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF7D, 0x3186, 0x1082, 0x18E3, // 0x0990 (2448) -0x0861, 0x94B2, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, // 0x09A0 (2464) -0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEDB, 0xE73C, 0x4A69, 0x1082, 0x18E3, 0x18C3, 0x10A2, // 0x09B0 (2480) -0x10A2, 0x10A2, 0x10A2, 0x0020, 0x73AE, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x09C0 (2496) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x94B2, 0x0841, 0x18E3, 0x18E3, // 0x09D0 (2512) -0x0861, 0xAD75, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, // 0x09E0 (2528) -0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEFB, 0xDEDB, 0xE73C, 0x52AA, 0x10A2, 0x2104, 0x18E3, 0x18C3, // 0x09F0 (2544) -0x18C3, 0x18C3, 0x10A2, 0x0841, 0x630C, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0A00 (2560) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x632C, 0x0861, 0x18E4, 0x18E4, // 0x0A10 (2576) -0x1082, 0xC638, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, // 0x0A20 (2592) -0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEFB, 0xDEFB, 0xD6BA, 0xE71C, 0x6B4D, 0x10A2, 0x18C3, 0x18C3, 0x10A2, // 0x0A30 (2608) -0x10A2, 0x10A2, 0x18C3, 0x0861, 0x5AEB, 0xE73C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0A40 (2624) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x8410, 0x0862, 0x3143, 0x2924, // 0x0A50 (2640) -0x0882, 0xBDD7, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, // 0x0A60 (2656) -0xEF5D, 0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, 0xDEDB, 0xE73C, 0x630C, 0x2103, 0x4A69, 0x632C, 0x6B4D, // 0x0A70 (2672) -0x528A, 0x2965, 0x18C3, 0x1081, 0x738E, 0xE73C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0A80 (2688) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xB596, 0x7A40, 0xECA0, 0xCC00, // 0x0A90 (2704) -0x3941, 0xA535, 0xFFFF, 0xF7BE, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, // 0x0AA0 (2720) -0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEFB, 0xDEFB, 0xDEFB, 0xD6DB, 0xCE38, 0xC618, 0x4A48, 0x4A49, 0x6B6D, 0x6B4D, 0x6B4D, // 0x0AB0 (2736) -0x6B4D, 0x630C, 0x3186, 0x18E4, 0x9492, 0xEF7D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0AC0 (2752) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xC488, 0xFD41, 0xFE6D, 0xFE6A, // 0x0AD0 (2768) -0xDC60, 0x5A25, 0xB5D8, 0xFFFF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, // 0x0AE0 (2784) -0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, 0xD6BB, 0xBCAB, 0xD462, 0xD462, 0x49E4, 0x10C3, 0x18C3, 0x18C3, 0x18C3, // 0x0AF0 (2800) -0x18C3, 0x18E3, 0x10A3, 0x49C4, 0xB575, 0xF7BF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0B00 (2816) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xCD70, 0xECA0, 0xFF14, 0xFF9B, 0xFF7B, // 0x0B10 (2832) -0xFECF, 0xC3A0, 0x3143, 0x9CF3, 0xFFFF, 0xF7BE, 0xF79E, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, // 0x0B20 (2848) -0xE73C, 0xE71C, 0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, 0xDEFB, 0xC617, 0xDC60, 0xFD60, 0xFD20, 0x3120, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0B30 (2864) -0x0000, 0x0000, 0x3900, 0xE460, 0xB46A, 0xEF9F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0B40 (2880) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xD5F4, 0xDC20, 0xFE8E, 0xFF59, 0xFF36, 0xFF36, // 0x0B50 (2896) -0xFF59, 0xFE6B, 0xA300, 0x18E4, 0x8410, 0xFFBE, 0xF7BE, 0xEF7D, 0xF79E, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE73C, // 0x0B60 (2912) -0xE71C, 0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, 0xDEBA, 0xDEFB, 0xC5B5, 0xE4A1, 0xFEF2, 0xF716, 0x3164, 0x18E4, 0x2103, 0x1082, 0x1082, // 0x0B70 (2928) -0x0021, 0x1061, 0xD5D0, 0xFE27, 0xB3E3, 0xCE9B, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0B80 (2944) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF77D, 0xE697, 0xDDAF, 0xD4C8, 0xE480, 0xFE29, 0xFF36, 0xFF15, 0xFF35, 0xFF15, // 0x0B90 (2960) -0xFF15, 0xFF36, 0xFDA5, 0x6A42, 0x1905, 0x6B4C, 0xE73C, 0xFFDF, 0xEF5D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE73C, 0xE71C, // 0x0BA0 (2976) -0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, 0xDEDB, 0xD6BA, 0xDEDB, 0xBDB5, 0xE4C3, 0xFF56, 0xFFDB, 0xAD10, 0x10A2, 0x10C3, 0x18E4, 0x1082, // 0x0BB0 (2992) -0x2922, 0xC5B1, 0xFFDC, 0xFED1, 0xB3A2, 0xBE19, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0BC0 (3008) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE6B8, 0xD484, 0xE4C0, 0xF584, 0xFE28, 0xFECF, 0xFF14, 0xFF13, 0xFF13, 0xFF13, 0xFF13, // 0x0BD0 (3024) -0xFF13, 0xFF14, 0xFEF0, 0xDC80, 0x41C5, 0x2945, 0x5269, 0xCE59, 0xF7BE, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xE71C, // 0x0BE0 (3040) -0xDEFB, 0xDEFB, 0xDEDB, 0xDEDB, 0xD6BA, 0xD69A, 0xD6DB, 0xBD95, 0xE4E2, 0xFF33, 0xFF36, 0xFF97, 0xDDF1, 0x8B66, 0x7AE4, 0x9BC7, // 0x0BF0 (3056) -0xEEB2, 0xFF97, 0xFF37, 0xFEF0, 0xC3E0, 0xB5B7, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0C00 (3072) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xD52B, 0xFD60, 0xFECD, 0xFF33, 0xFF13, 0xFF12, 0xFEF1, 0xFEF1, 0xFEF1, 0xFEF1, 0xFEF1, // 0x0C10 (3088) -0xFEF1, 0xFEF1, 0xFF12, 0xFE69, 0x9B41, 0x31A8, 0x31A6, 0x39E7, 0xB5B6, 0xF79E, 0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEFB, // 0x0C20 (3104) -0xDEFB, 0xDEDB, 0xDEDB, 0xD6BA, 0xD6BA, 0xD699, 0xD6BA, 0xBD94, 0xE502, 0xFF12, 0xFF15, 0xFEF4, 0xFF55, 0xFF95, 0xFF54, 0xFF95, // 0x0C30 (3120) -0xFF35, 0xFEF4, 0xFF14, 0xFF14, 0xF5A4, 0xB426, 0xE75E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0C40 (3136) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xD54C, 0xFDA0, 0xFECE, 0xFEF0, 0xFECF, 0xFEEF, 0xFEEF, 0xFEF0, 0xFEEF, 0xFEF0, 0xFEF0, // 0x0C50 (3152) -0xFEF0, 0xFEEF, 0xFEF0, 0xFEEF, 0xF582, 0x6244, 0x39E8, 0x39C6, 0x528A, 0xE71C, 0xE73C, 0xE71C, 0xE71C, 0xE71C, 0xDEFB, 0xDEFB, // 0x0C60 (3168) -0xDEDB, 0xDEDB, 0xD6BA, 0xD6BA, 0xD69A, 0xCE79, 0xCE9A, 0xBD94, 0xE522, 0xFF10, 0xFEF2, 0xFEF2, 0xFEF2, 0xFEF2, 0xFEF2, 0xFEF2, // 0x0C70 (3184) -0xFEF2, 0xFF12, 0xFEF2, 0xFEF2, 0xFF12, 0xED85, 0xBC68, 0xE73D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0C80 (3200) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xD5B0, 0xF580, 0xFECB, 0xFEEE, 0xFECD, 0xFEEE, 0xFEEE, 0xFEEE, 0xFEEE, 0xFEEE, 0xFEEE, // 0x0C90 (3216) -0xFEEE, 0xFEEE, 0xFECD, 0xFECE, 0xFECA, 0xCC60, 0x41C7, 0x39C7, 0x4228, 0xCE79, 0xEF5D, 0xE71C, 0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, // 0x0CA0 (3232) -0xDEDB, 0xD6BA, 0xD6BA, 0xD69A, 0xCE79, 0xCE59, 0xCE9A, 0xBD73, 0xED42, 0xFF0F, 0xFEF0, 0xFEF0, 0xFEF0, 0xFEF0, 0xFEF0, 0xFEF0, // 0x0CB0 (3248) -0xFEF0, 0xFEF0, 0xFEF0, 0xFEF0, 0xFEF0, 0xFF31, 0xF628, 0xC4A7, 0xDE57, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0CC0 (3264) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDE13, 0xF560, 0xFEC9, 0xFECD, 0xFECC, 0xFECC, 0xFECC, 0xFECC, 0xFECC, 0xFECC, 0xFECC, // 0x0CD0 (3280) -0xFEEC, 0xFEEC, 0xFECC, 0xFECC, 0xFEED, 0xFE44, 0x9323, 0x52CC, 0x73AE, 0xD69A, 0xE73C, 0xDEFB, 0xDEFB, 0xDEFB, 0xDEDB, 0xDEDB, // 0x0CE0 (3296) -0xD6BA, 0xD6BA, 0xD69A, 0xCE79, 0xCE59, 0xD69A, 0xB5D8, 0x7B28, 0xF5A2, 0xFF0F, 0xFECE, 0xFEEE, 0xFEEE, 0xFEEE, 0xFEEE, 0xFEEE, // 0x0CF0 (3312) -0xFEEE, 0xFEEE, 0xFEEE, 0xFEEE, 0xFEEE, 0xFECD, 0xFF10, 0xFEA9, 0xCC60, 0xD615, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0D00 (3328) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDE55, 0xED80, 0xFEA4, 0xFECA, 0xFECA, 0xFECA, 0xFECA, 0xFECA, 0xFECA, 0xFECA, 0xFEC9, // 0x0D10 (3344) -0xFEA7, 0xFEA6, 0xFEA8, 0xFEC9, 0xFECB, 0xFEEA, 0xEDA2, 0xB4F0, 0xCE9A, 0xDEFB, 0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, 0xDEDB, 0xD6BA, // 0x0D20 (3360) -0xD6BA, 0xD69A, 0xCE79, 0xCE79, 0xD6BA, 0xB596, 0x4A8B, 0x72A4, 0xFE45, 0xFEEC, 0xFECC, 0xFEEC, 0xFEEC, 0xFEEC, 0xFEEC, 0xFEEC, // 0x0D30 (3376) -0xFEEC, 0xFECB, 0xFECB, 0xFEEC, 0xFEEC, 0xFEEC, 0xFECC, 0xFEA5, 0xFDE0, 0xAC8B, 0xE75E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0D40 (3392) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE632, 0xF5E0, 0xFE80, 0xFE82, 0xFEC7, 0xFEC8, 0xFEC8, 0xFEC8, 0xFEC7, 0xFEA4, 0xFE61, // 0x0D50 (3408) -0xFE60, 0xFE60, 0xFE60, 0xFE61, 0xFE83, 0xFEA6, 0xFEA3, 0xDD22, 0xD658, 0xE75D, 0xDEDB, 0xDEDB, 0xDEDB, 0xD6BA, 0xD6BA, 0xD69A, // 0x0D60 (3424) -0xD69A, 0xD69A, 0xD6BA, 0xCE59, 0x9492, 0x5289, 0x39E9, 0x9B84, 0xFEA3, 0xFEEB, 0xFEEA, 0xFEEA, 0xFEEA, 0xFEEA, 0xFEEA, 0xFEC8, // 0x0D70 (3440) -0xFE84, 0xFE61, 0xFE61, 0xFEA5, 0xFEC9, 0xFEA7, 0xFEA2, 0xFE80, 0xBC41, 0x8C0F, 0xE71C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0D80 (3456) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDDCE, 0xFE40, 0xFEA0, 0xFE80, 0xFE80, 0xFEA2, 0xFEA2, 0xFEA2, 0xFEA0, 0xFE80, 0xFE80, // 0x0D90 (3472) -0xFEA0, 0xFEA0, 0xFEA0, 0xFE80, 0xFE80, 0xFE80, 0xFE80, 0xFE80, 0xCCE5, 0xD69A, 0xE73C, 0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, 0xDEDB, // 0x0DA0 (3488) -0xD69A, 0xBDF7, 0x9CD3, 0x630C, 0x4228, 0x4A69, 0x422A, 0xB423, 0xFEC0, 0xFEA5, 0xFEE7, 0xFEC7, 0xFEC7, 0xFEC6, 0xFEA3, 0xFE80, // 0x0DB0 (3504) -0xFE80, 0xFE80, 0xFE80, 0xFE60, 0xFEA0, 0xFEC0, 0xEDC0, 0xA3A4, 0x732C, 0xAD96, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0DC0 (3520) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE5A8, 0xFEC0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0DD0 (3536) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEE0, 0xF640, 0x93A8, 0x8C72, 0xA534, 0xAD75, 0xA534, 0x9CF3, 0x8C51, // 0x0DE0 (3552) -0x738E, 0x5ACB, 0x4A49, 0x4A69, 0x528A, 0x4A8A, 0x5249, 0xD502, 0xFEE0, 0xFEA0, 0xFEC0, 0xFEC1, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, // 0x0DF0 (3568) -0xFEA0, 0xFEA0, 0xFEA0, 0xFEE0, 0xFE60, 0xC482, 0x7B09, 0x7BD0, 0xB5B7, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0E00 (3584) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDD8A, 0xFEC0, 0xFF20, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, // 0x0E10 (3600) -0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEC0, 0xFF20, 0xAC02, 0x4209, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, // 0x0E20 (3616) -0x528A, 0x528A, 0x52AA, 0x52AA, 0x528A, 0x4A8A, 0x5A69, 0xE5C1, 0xFF00, 0xFEC0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, // 0x0E30 (3632) -0xFEC0, 0xFEE0, 0xFF00, 0xE561, 0x9367, 0x736E, 0x9D14, 0xD6BA, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0E40 (3648) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xD617, 0xCCC5, 0xF620, 0xFEE0, 0xFF40, 0xFF40, 0xFF40, 0xFF20, 0xFF00, 0xFF00, 0xFF00, // 0x0E50 (3664) -0xFF00, 0xFF00, 0xFF00, 0xFF00, 0xFF00, 0xFF00, 0xFF00, 0xFF00, 0xFF40, 0xB483, 0x4A8B, 0x5ACA, 0x5ACB, 0x5ACB, 0x5ACB, 0x5ACB, // 0x0E60 (3680) -0x5ACB, 0x52AA, 0x52AA, 0x52AA, 0x52AA, 0x4A8A, 0x6289, 0xEE20, 0xFF20, 0xFEE0, 0xFF00, 0xFF00, 0xFF00, 0xFF00, 0xFF00, 0xFEE0, // 0x0E70 (3696) -0xFF20, 0xFEC0, 0xBC64, 0x732B, 0x8C72, 0xCE58, 0xEF7D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0E80 (3712) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF7E, 0xB576, 0x93EE, 0xA408, 0xC4A5, 0xDD63, 0xF641, 0xFEC0, 0xFF40, 0xFF80, 0xFF60, // 0x0E90 (3728) -0xFF40, 0xFF20, 0xFF20, 0xFF40, 0xFF40, 0xFF40, 0xFF20, 0xFF20, 0xFF80, 0xAC03, 0x4A6B, 0x5ACA, 0x5ACB, 0x5ACB, 0x5AEB, 0x5AEB, // 0x0EA0 (3744) -0x5AEB, 0x630C, 0x630C, 0x630C, 0x5AEB, 0x52CB, 0x5A69, 0xE5E1, 0xFF60, 0xFF20, 0xFF20, 0xFF20, 0xFF20, 0xFF20, 0xFF20, 0xFF60, // 0x0EB0 (3760) -0xF640, 0xA3A7, 0x738F, 0xAD96, 0xE71C, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0EC0 (3776) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF79E, 0xD6DB, 0xB5B8, 0x9CD4, 0x9431, 0x93EE, 0x9C0A, 0xB467, 0xD544, 0xF660, // 0x0ED0 (3792) -0xFF60, 0xFFA0, 0xFF80, 0xFF60, 0xFF40, 0xFF40, 0xFF60, 0xFFA0, 0xD521, 0x730A, 0x73CF, 0x8C71, 0x9CD3, 0x9CF3, 0xA514, 0xA534, // 0x0EE0 (3808) -0xAD55, 0xB596, 0xB5B6, 0xB596, 0xAD55, 0x9CF3, 0x83F0, 0xCD04, 0xFFA0, 0xFF40, 0xFF40, 0xFF40, 0xFF40, 0xFF40, 0xFFA0, 0xF621, // 0x0EF0 (3824) -0x8B49, 0x8431, 0xCE58, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F00 (3840) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xF79E, 0xE73C, 0xD6BB, 0xBE19, 0xA556, 0x9472, 0x9C0D, // 0x0F10 (3856) -0xB447, 0xDD82, 0xFEE0, 0xFFA0, 0xFFC0, 0xFFC0, 0xFF80, 0xC4C2, 0x730C, 0x9CF4, 0xD69A, 0xEF5D, 0xEF7D, 0xF79E, 0xF79E, 0xF7BE, // 0x0F20 (3872) -0xF7BE, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xEF7D, 0xDF1C, 0xC530, 0xF620, 0xFFC0, 0xFFC0, 0xFFC0, 0xFFC0, 0xFF80, 0xE5A2, 0x834A, // 0x0F30 (3888) -0x8C93, 0xDEDA, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F40 (3904) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDE, 0xEF7D, 0xD6BB, // 0x0F50 (3920) -0xAD77, 0x9452, 0x9BEB, 0xB466, 0xC524, 0xC543, 0xA3E5, 0x734D, 0xAD76, 0xEF5C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F60 (3936) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDF1C, 0xACB0, 0xBCA6, 0xD544, 0xCD64, 0xCD05, 0xAC07, 0x7B6D, 0x9CF4, // 0x0F70 (3952) -0xE6FB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F80 (3968) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F90 (3984) -0xFFDE, 0xE75D, 0xC65A, 0xA536, 0x9493, 0x8C53, 0x94B4, 0xBE18, 0xEF7D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0FA0 (4000) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xDEFC, 0xAD57, 0x9493, 0x8C73, 0x8C73, 0x94D4, 0xBE18, 0xEF5D, // 0x0FB0 (4016) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0FC0 (4032) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0FD0 (4048) -0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0xEF5C, 0xE73C, 0xEF5C, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0FE0 (4064) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0xEF5C, 0xE73C, 0xEF5C, 0xEF7D, 0xFFDE, 0xFFFF, // 0x0FF0 (4080) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x1000 (4096) -}; diff --git a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_CPLD_PageSwitching/UTFT_CPLD_PageSwitching.ino b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_CPLD_PageSwitching/UTFT_CPLD_PageSwitching.ino deleted file mode 100644 index 8cee78e..0000000 --- a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_CPLD_PageSwitching/UTFT_CPLD_PageSwitching.ino +++ /dev/null @@ -1,93 +0,0 @@ -// UTFT_CPLD_PageSwitching (C)2014 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of page switching on CPLD-based display modules.. -// -// This demo was made for modules with a screen resolution -// of 800x480 pixels. -// -// This program requires the UTFT library. -// -// NOTE: The display will be black for a short while during the start -// - -#include - -// Declare which fonts we will be using -extern uint8_t BigFont[]; -extern uint8_t SevenSegNumFont[]; - -// Set the pins to the correct ones for your development shield -// ------------------------------------------------------------ -// Standard Arduino Mega/Due shield : ,38,39,40,41 -// CTE TFT LCD/SD Shield for Arduino Due : ,25,26,27,28 -// Teensy 3.x TFT Test Board : ,23,22, 3, 4 -// ElecHouse TFT LCD/SD Shield for Arduino Due : ,22,23,31,33 -// -// Remember to change the model parameter to suit your display module! -UTFT myGLCD(EHOUSE50CPLD,22,23,31,33); - -void setup() -{ - myGLCD.InitLCD(); -} - -void loop() -{ - myGLCD.setBackColor(VGA_TRANSPARENT); - - myGLCD.setBrightness(0); - for (byte pg=0; pg<8; pg++) - { - myGLCD.setWritePage(pg); - myGLCD.clrScr(); - for (int ln=0; ln<480; ln+=2) - { - switch (pg) - { - case 0: - myGLCD.setColor(ln/2, 0, 0); - break; - case 1: - myGLCD.setColor(0, ln/2, 0); - break; - case 2: - myGLCD.setColor(0, 0, ln/2); - break; - case 3: - myGLCD.setColor(ln/4, ln/2, 0); - break; - case 4: - myGLCD.setColor(0, ln/2, ln/2); - break; - case 5: - myGLCD.setColor(ln/2, 0, ln/2); - break; - case 6: - myGLCD.setColor(ln/2, ln/2, 0); - break; - case 7: - myGLCD.setColor(0, ln/2, ln/4); - break; - } - myGLCD.drawLine(0, ln, 799, ln); - myGLCD.drawLine(0, ln+1, 799, ln+1); - } - myGLCD.setColor(VGA_WHITE); - myGLCD.setFont(BigFont); - myGLCD.print("This is page:", CENTER, 200); - myGLCD.setFont(SevenSegNumFont); - myGLCD.printNumI(pg, CENTER, 240); - } - myGLCD.setBrightness(16); - - while(1) - { - for (byte pg=0; pg<8; pg++) - { - myGLCD.setDisplayPage(pg); - delay(500); - } - } -} - diff --git a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_128x128_Serial/UTFT_Demo_128x128_Serial.ino b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_128x128_Serial/UTFT_Demo_128x128_Serial.ino deleted file mode 100644 index de371d9..0000000 --- a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_128x128_Serial/UTFT_Demo_128x128_Serial.ino +++ /dev/null @@ -1,335 +0,0 @@ -// UTFT_Demo_128x128_Serial (C)2013 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of how to use most of the functions -// of the library with a supported display modules. -// -// This demo was made to work on the 128x128 modules. -// Any other size displays may cause strange behaviour. -// -// This program requires the UTFT library. -// - -#include - -// Declare which fonts we will be using -extern uint8_t SmallFont[]; - -// Declare an instance of the class -UTFT myGLCD(LPH9135,6,5,2,3,4); // Remember to change the model parameter to suit your display module! - -void setup() -{ - randomSeed(analogRead(0)); - -// Setup the LCD - myGLCD.InitLCD(PORTRAIT); - myGLCD.setFont(SmallFont); -} - -void loop() -{ - byte buf[126]; - int x, x2; - int y, y2; - int r; - -// Clear the screen and draw the frame - myGLCD.clrScr(); - myGLCD.setContrast(64); - - myGLCD.setColor(255, 0, 0); - myGLCD.fillRect(0,0,127,12); - myGLCD.setColor(64, 64, 64); - myGLCD.fillRect(0,117,127,127); - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255,0,0); - myGLCD.print("Universal TFT", CENTER, 0); - myGLCD.setBackColor(64,64,64); - myGLCD.setColor(255,255,0); - myGLCD.print("H.Karlsen", LEFT, 116); - myGLCD.print("(C)2013", RIGHT, 116); - myGLCD.setColor(0,255,0); - myGLCD.drawRect(0,13,127,116); - -// Draw crosshairs - myGLCD.setColor(0,0,255); - myGLCD.drawLine(63,14,63,115); - myGLCD.drawLine(1,63,126,63); - for (int i=3; i<128; i+=10) - myGLCD.drawLine(i, 61, i, 65); - for (int i=14; i<118; i+=10) - myGLCD.drawLine(61, i, 65, i); - -// Draw sin-, cos- and tan-lines - myGLCD.setColor(0,255,255); - myGLCD.setBackColor(0,0,0); - myGLCD.print("Sin", 2, 14); - for (int i=1; i<126; i++) - { - myGLCD.drawPixel(i,63+(sin(((i*2.85)*3.14)/180)*45)); - } - - myGLCD.setColor(255,0,0); - myGLCD.print("Cos", 2, 26); - for (int i=1; i<126; i++) - { - myGLCD.drawPixel(i,63+(cos(((i*2.85)*3.14)/180)*45)); - } - - myGLCD.setColor(255,255,0); - myGLCD.print("Tan", 2, 38); - for (int i=1; i<126; i++) - { - myGLCD.drawPixel(i,63+(tan(((i*2.85)*3.14)/180))); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,126,115); - myGLCD.setColor(0,0,255); - myGLCD.drawLine(63,14,63,115); - myGLCD.drawLine(1,63,126,63); - -// Draw a moving sinewave - x=1; - for (int i=1; i<3654; i++) - { - x++; - if (x==127) - x=1; - if (i>127) - { - if ((x==63)||(buf[x-1]==63)) - myGLCD.setColor(0,0,255); - else - myGLCD.setColor(0,0,0); - myGLCD.drawPixel(x,buf[x-1]); - } - myGLCD.setColor(0,255,255); - y=63+(sin(((i*1.3)*3.14)/180)*45); - myGLCD.drawPixel(x,y); - buf[x-1]=y; - delay(1); - } - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,126,115); - -// Draw some filled rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRect(10+(i*10),10+(i*10), 60+(i*10), 60+(i*10)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,126,115); - -// Draw some filled, rounded rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRoundRect(70-(i*10),10+(i*10), 120-(i*10), 60+(i*10)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,126,115); - -// Draw some filled circles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillCircle(30+(i*10),35+(i*10), 25); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,126,115); - - // Draw some lines in a pattern - myGLCD.setColor (255,0,0); - for (int i=11; i<115; i+=3) - { - myGLCD.drawLine(1, i, i-10, 115); - } - myGLCD.setColor (255,0,0); - for (int i=112; i>14; i-=3) - { - myGLCD.drawLine(126, i, i+14, 14); - } - myGLCD.setColor (0,255,255); - for (int i=115; i>14; i-=3) - { - myGLCD.drawLine(1, i, 116-i, 14); - } - myGLCD.setColor (0,255,255); - for (int i=14; i<115; i+=3) - { - myGLCD.drawLine(126, i, 140-i, 115); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,126,115); - -// Draw some random circles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=22+random(85); - y=35+random(59); - r=random(20); - myGLCD.drawCircle(x, y, r); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,126,115); - -// Draw some random rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(124); - y=15+random(101); - x2=2+random(124); - y2=15+random(101); - myGLCD.drawRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,126,115); - -// Draw some random rounded rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(124); - y=15+random(101); - x2=2+random(124); - y2=15+random(101); - myGLCD.drawRoundRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,126,115); - -// Draw some random lines - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(124); - y=15+random(101); - x2=2+random(124); - y2=15+random(101); - myGLCD.drawLine(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,126,115); - -// Draw some random pixels - for (int i=0; i<5000; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - myGLCD.drawPixel(2+random(124), 15+random(101)); - } - - delay (2000); - -// Set up the "Finished"-screen - myGLCD.setContrast(0); - myGLCD.fillScr(0,0,255); - myGLCD.setColor(255,0,0); - myGLCD.fillRoundRect(2, 40, 125, 88); - - myGLCD.setColor(255,255,255); - myGLCD.setBackColor(255,0,0); - myGLCD.print("That's it!", CENTER, 46); - myGLCD.print("Restarting in a", CENTER, 66); - myGLCD.print("few seconds...", CENTER, 76); - - myGLCD.setColor(0,0,0); - myGLCD.setBackColor(0,0,255); - myGLCD.print("Runtime: (msecs)", CENTER, 108); - myGLCD.printNumI(millis(), CENTER, 118); - - myGLCD.setContrast(64); - - delay (10000); - -// Fade screen to black - for (int i=64; i>0; i--) - { - myGLCD.setContrast(i); - delay(100); - } -} - - diff --git a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_160x128_Serial/UTFT_Demo_160x128_Serial.ino b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_160x128_Serial/UTFT_Demo_160x128_Serial.ino deleted file mode 100644 index 5ff7106..0000000 --- a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_160x128_Serial/UTFT_Demo_160x128_Serial.ino +++ /dev/null @@ -1,328 +0,0 @@ -// UTFT_Demo_160x128_Serial (C)2014 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of how to use most of the functions -// of the library with a supported display modules. -// -// This demo was made for modules with a screen resolution -// of 160x128 pixels. -// -// This program requires the UTFT library. -// - -#include - -// Declare which fonts we will be using -extern uint8_t SmallFont[]; - -// Usage: myGLCD(, SDA, SCL, CS, RST[, RS]); -// -// When using the DM-TFT18-101 and shield from DisplayModule you should use the following: -// UTFT myGLCD(DMTFT18101,2,3,4,6,5); -// -UTFT myGLCD(ITDB18SP,19,18,0,16,17); // Remember to change the model parameter to suit your display module! - -void setup() -{ - randomSeed(analogRead(0)); - -// Setup the LCD - myGLCD.InitLCD(); - myGLCD.setFont(SmallFont); -} - -void loop() -{ - int buf[158]; - int x, x2; - int y, y2; - int r; - -// Clear the screen and draw the frame - myGLCD.clrScr(); - - myGLCD.setColor(255, 0, 0); - myGLCD.fillRect(0, 0, 159, 13); - myGLCD.setColor(64, 64, 64); - myGLCD.fillRect(0, 114, 159, 127); - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("Universal TFT Lib.", CENTER, 1); - myGLCD.setBackColor(64, 64, 64); - myGLCD.setColor(255,255,0); - myGLCD.print("H.Karlsen", LEFT, 114); - myGLCD.print("(C)2014", RIGHT, 114); - - myGLCD.setColor(0, 0, 255); - myGLCD.drawRect(0, 13, 159, 113); - -// Draw crosshairs - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(79, 14, 79, 113); - myGLCD.drawLine(1, 63, 158, 63); - - for (int i=9; i<150; i+=10) - myGLCD.drawLine(i, 61, i, 65); - for (int i=19; i<110; i+=10) - myGLCD.drawLine(77, i, 81, i); - -// Draw sin-, cos- and tan-lines - myGLCD.setColor(0,255,255); - myGLCD.print("Sin", 5, 15); - for (int i=1; i<158; i++) - { - myGLCD.drawPixel(i,63+(sin(((i*2.27)*3.14)/180)*40)); - } - - myGLCD.setColor(255,0,0); - myGLCD.print("Cos", 5, 27); - for (int i=1; i<158; i++) - { - myGLCD.drawPixel(i,63+(cos(((i*2.27)*3.14)/180)*40)); - } - - myGLCD.setColor(255,255,0); - myGLCD.print("Tan", 5, 39); - for (int i=1; i<158; i++) - { - myGLCD.drawPixel(i,63+(tan(((i*2.27)*3.14)/180))); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,158,113); - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(79, 14, 79, 113); - myGLCD.drawLine(1, 63, 158, 63); - -// Draw a moving sinewave - x=1; - for (int i=1; i<(158*20); i++) - { - x++; - if (x==159) - x=1; - if (i>159) - { - if ((x==79)||(buf[x-1]==63)) - myGLCD.setColor(0,0,255); - else - myGLCD.setColor(0,0,0); - myGLCD.drawPixel(x,buf[x-1]); - } - myGLCD.setColor(0,255,255); - y=63+(sin(((i*2.5)*3.14)/180)*(40-(i / 100))); - myGLCD.drawPixel(x,y); - buf[x-1]=y; - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,158,113); - -// Draw some filled rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRect(39+(i*10), 23+(i*10), 59+(i*10), 43+(i*10)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,158,113); - -// Draw some filled, rounded rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRoundRect(99-(i*10), 23+(i*10), 119-(i*10), 43+(i*10)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,158,113); - -// Draw some filled circles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillCircle(49+(i*10),33+(i*10), 15); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,158,113); - -// Draw some lines in a pattern - myGLCD.setColor (255,0,0); - for (int i=14; i<113; i+=5) - { - myGLCD.drawLine(1, i, (i*1.44)-10, 112); - } - myGLCD.setColor (255,0,0); - for (int i=112; i>15; i-=5) - { - myGLCD.drawLine(158, i, (i*1.44)-12, 14); - } - myGLCD.setColor (0,255,255); - for (int i=112; i>15; i-=5) - { - myGLCD.drawLine(1, i, 172-(i*1.44), 14); - } - myGLCD.setColor (0,255,255); - for (int i=15; i<112; i+=5) - { - myGLCD.drawLine(158, i, 171-(i*1.44), 112); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,158,113); - -// Draw some random circles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=22+random(116); - y=35+random(57); - r=random(20); - myGLCD.drawCircle(x, y, r); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,158,113); - -// Draw some random rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(156); - y=16+random(95); - x2=2+random(156); - y2=16+random(95); - myGLCD.drawRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,158,113); - -// Draw some random rounded rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(156); - y=16+random(95); - x2=2+random(156); - y2=16+random(95); - myGLCD.drawRoundRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,158,113); - - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(156); - y=16+random(95); - x2=2+random(156); - y2=16+random(95); - myGLCD.drawLine(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,158,113); - - for (int i=0; i<5000; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - myGLCD.drawPixel(2+random(156), 16+random(95)); - } - - delay(2000); - - myGLCD.fillScr(0, 0, 255); - myGLCD.setColor(255, 0, 0); - myGLCD.fillRoundRect(10, 17, 149, 72); - - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("That's it!", CENTER, 20); - myGLCD.print("Restarting in a", CENTER, 45); - myGLCD.print("few seconds...", CENTER, 57); - - myGLCD.setColor(0, 255, 0); - myGLCD.setBackColor(0, 0, 255); - myGLCD.print("Runtime: (msecs)", CENTER, 103); - myGLCD.printNumI(millis(), CENTER, 115); - - delay (10000); -} - diff --git a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_220x176/UTFT_Demo_220x176.ino b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_220x176/UTFT_Demo_220x176.ino deleted file mode 100644 index b6b3ab2..0000000 --- a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_220x176/UTFT_Demo_220x176.ino +++ /dev/null @@ -1,330 +0,0 @@ -// UTFT_Demo_220x176 (C)2014 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of how to use most of the functions -// of the library with a supported display modules. -// -// This demo was made for modules with a screen resolution -// of 220x176 pixels. -// -// This program requires the UTFT library. -// - -#include - -// Declare which fonts we will be using -extern uint8_t SmallFont[]; - -// Set the pins to the correct ones for your development shield -// ------------------------------------------------------------ -// Standard Arduino Mega/Due shield : ,38,39,40,41 -// CTE TFT LCD/SD Shield for Arduino Due : ,25,26,27,28 -// Teensy 3.x TFT Test Board : ,23,22, 3, 4 -// ElecHouse TFT LCD/SD Shield for Arduino Due : ,22,23,31,33 -// -// Remember to change the model parameter to suit your display module! -UTFT myGLCD(ITDB22,38,39,40,41); - -void setup() -{ - randomSeed(analogRead(0)); - -// Setup the LCD - myGLCD.InitLCD(); - myGLCD.setFont(SmallFont); -} - -void loop() -{ - int buf[218]; - int x, x2; - int y, y2; - int r; - -// Clear the screen and draw the frame - myGLCD.clrScr(); - - myGLCD.setColor(255, 0, 0); - myGLCD.fillRect(0, 0, 219, 13); - myGLCD.setColor(64, 64, 64); - myGLCD.fillRect(0, 162, 219, 175); - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("** Universal TFT Library **", CENTER, 1); - myGLCD.setBackColor(64, 64, 64); - myGLCD.setColor(255,255,0); - myGLCD.print("> elec.henningkarlsen.com <", CENTER, 163); - - myGLCD.setColor(0, 0, 255); - myGLCD.drawRect(0, 14, 219, 161); - -// Draw crosshairs - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(109, 15, 109, 160); - myGLCD.drawLine(1, 88, 218, 88); - - for (int i=9; i<210; i+=10) - myGLCD.drawLine(i, 86, i, 90); - for (int i=19; i<155; i+=10) - myGLCD.drawLine(107, i, 111, i); - -// Draw sin-, cos- and tan-lines - myGLCD.setColor(0,255,255); - myGLCD.print("Sin", 5, 15); - for (int i=1; i<218; i++) - { - myGLCD.drawPixel(i,88+(sin(((i*1.65)*3.14)/180)*70)); - } - - myGLCD.setColor(255,0,0); - myGLCD.print("Cos", 5, 27); - for (int i=1; i<218; i++) - { - myGLCD.drawPixel(i,88+(cos(((i*1.65)*3.14)/180)*70)); - } - - myGLCD.setColor(255,255,0); - myGLCD.print("Tan", 5, 39); - for (int i=1; i<218; i++) - { - myGLCD.drawPixel(i,88+(tan(((i*1.65)*3.14)/180))); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(109, 15, 109, 160); - myGLCD.drawLine(1, 88, 218, 88); - -// Draw a moving sinewave - x=1; - for (int i=1; i<(218*20); i++) - { - x++; - if (x==219) - x=1; - if (i>219) - { - if ((x==109)||(buf[x-1]==88)) - myGLCD.setColor(0,0,255); - else - myGLCD.setColor(0,0,0); - myGLCD.drawPixel(x,buf[x-1]); - } - myGLCD.setColor(0,255,255); - y=88+(sin(((i*1.6)*3.14)/180)*(65-(i / 100))); - myGLCD.drawPixel(x,y); - buf[x-1]=y; - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - -// Draw some filled rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRect(44+(i*15), 23+(i*15), 88+(i*15), 63+(i*15)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - -// Draw some filled, rounded rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRoundRect(132-(i*15), 23+(i*15), 172-(i*15), 63+(i*15)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - -// Draw some filled circles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillCircle(64+(i*15),43+(i*15), 20); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - -// Draw some lines in a pattern - myGLCD.setColor (255,0,0); - for (int i=15; i<160; i+=5) - { - myGLCD.drawLine(1, i, (i*1.44)-10, 160); - } - myGLCD.setColor (255,0,0); - for (int i=160; i>15; i-=5) - { - myGLCD.drawLine(218, i, (i*1.44)-12, 15); - } - myGLCD.setColor (0,255,255); - for (int i=160; i>15; i-=5) - { - myGLCD.drawLine(1, i, 232-(i*1.44), 15); - } - myGLCD.setColor (0,255,255); - for (int i=15; i<160; i+=5) - { - myGLCD.drawLine(218, i, 231-(i*1.44), 160); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - -// Draw some random circles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=22+random(176); - y=35+random(105); - r=random(20); - myGLCD.drawCircle(x, y, r); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - -// Draw some random rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(216); - y=16+random(143); - x2=2+random(216); - y2=16+random(143); - myGLCD.drawRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - -// Draw some random rounded rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(216); - y=16+random(143); - x2=2+random(216); - y2=16+random(143); - myGLCD.drawRoundRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(216); - y=16+random(143); - x2=2+random(216); - y2=16+random(143); - myGLCD.drawLine(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - - for (int i=0; i<10000; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - myGLCD.drawPixel(2+random(216), 16+random(143)); - } - - delay(2000); - - myGLCD.fillScr(0, 0, 255); - myGLCD.setColor(255, 0, 0); - myGLCD.fillRoundRect(40, 57, 179, 119); - - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("That's it!", CENTER, 62); - myGLCD.print("Restarting in a", CENTER, 88); - myGLCD.print("few seconds...", CENTER, 101); - - myGLCD.setColor(0, 255, 0); - myGLCD.setBackColor(0, 0, 255); - myGLCD.print("Runtime: (msecs)", CENTER, 146); - myGLCD.printNumI(millis(), CENTER, 161); - - delay (10000); -} - diff --git a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_220x176_Serial/UTFT_Demo_220x176_Serial.ino b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_220x176_Serial/UTFT_Demo_220x176_Serial.ino deleted file mode 100644 index 7ed75ac..0000000 --- a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_220x176_Serial/UTFT_Demo_220x176_Serial.ino +++ /dev/null @@ -1,323 +0,0 @@ -// UTFT_Demo_220x176_Serial (C)2014 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of how to use most of the functions -// of the library with a supported display modules. -// -// This demo was made for serial modules with a screen resolution -// of 220x176 pixels. -// -// This program requires the UTFT library. -// - -#include - -// Declare which fonts we will be using -extern uint8_t SmallFont[]; - -// Usage: myGLCD(, SDA, SCL, CS, RST[, RS]); -UTFT myGLCD(ITDB22SP,19,18,0,16); // Remember to change the model parameter to suit your display module! - -void setup() -{ - randomSeed(analogRead(0)); - -// Setup the LCD - myGLCD.InitLCD(); - myGLCD.setFont(SmallFont); -} - -void loop() -{ - int buf[218]; - int x, x2; - int y, y2; - int r; - -// Clear the screen and draw the frame - myGLCD.clrScr(); - - myGLCD.setColor(255, 0, 0); - myGLCD.fillRect(0, 0, 219, 13); - myGLCD.setColor(64, 64, 64); - myGLCD.fillRect(0, 162, 219, 175); - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("** Universal TFT Library **", CENTER, 1); - myGLCD.setBackColor(64, 64, 64); - myGLCD.setColor(255,255,0); - myGLCD.print("> elec.henningkarlsen.com <", CENTER, 163); - - myGLCD.setColor(0, 0, 255); - myGLCD.drawRect(0, 14, 219, 161); - -// Draw crosshairs - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(109, 15, 109, 160); - myGLCD.drawLine(1, 88, 218, 88); - - for (int i=9; i<210; i+=10) - myGLCD.drawLine(i, 86, i, 90); - for (int i=19; i<155; i+=10) - myGLCD.drawLine(107, i, 111, i); - -// Draw sin-, cos- and tan-lines - myGLCD.setColor(0,255,255); - myGLCD.print("Sin", 5, 15); - for (int i=1; i<218; i++) - { - myGLCD.drawPixel(i,88+(sin(((i*1.65)*3.14)/180)*70)); - } - - myGLCD.setColor(255,0,0); - myGLCD.print("Cos", 5, 27); - for (int i=1; i<218; i++) - { - myGLCD.drawPixel(i,88+(cos(((i*1.65)*3.14)/180)*70)); - } - - myGLCD.setColor(255,255,0); - myGLCD.print("Tan", 5, 39); - for (int i=1; i<218; i++) - { - myGLCD.drawPixel(i,88+(tan(((i*1.65)*3.14)/180))); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(109, 15, 109, 160); - myGLCD.drawLine(1, 88, 218, 88); - -// Draw a moving sinewave - x=1; - for (int i=1; i<(218*20); i++) - { - x++; - if (x==219) - x=1; - if (i>219) - { - if ((x==109)||(buf[x-1]==88)) - myGLCD.setColor(0,0,255); - else - myGLCD.setColor(0,0,0); - myGLCD.drawPixel(x,buf[x-1]); - } - myGLCD.setColor(0,255,255); - y=88+(sin(((i*1.6)*3.14)/180)*(65-(i / 100))); - myGLCD.drawPixel(x,y); - buf[x-1]=y; - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - -// Draw some filled rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRect(44+(i*15), 23+(i*15), 88+(i*15), 63+(i*15)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - -// Draw some filled, rounded rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRoundRect(132-(i*15), 23+(i*15), 172-(i*15), 63+(i*15)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - -// Draw some filled circles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillCircle(64+(i*15),43+(i*15), 20); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - -// Draw some lines in a pattern - myGLCD.setColor (255,0,0); - for (int i=15; i<160; i+=5) - { - myGLCD.drawLine(1, i, (i*1.44)-10, 160); - } - myGLCD.setColor (255,0,0); - for (int i=160; i>15; i-=5) - { - myGLCD.drawLine(218, i, (i*1.44)-12, 15); - } - myGLCD.setColor (0,255,255); - for (int i=160; i>15; i-=5) - { - myGLCD.drawLine(1, i, 232-(i*1.44), 15); - } - myGLCD.setColor (0,255,255); - for (int i=15; i<160; i+=5) - { - myGLCD.drawLine(218, i, 231-(i*1.44), 160); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,161); - -// Draw some random circles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=22+random(176); - y=35+random(105); - r=random(20); - myGLCD.drawCircle(x, y, r); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - -// Draw some random rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(216); - y=16+random(143); - x2=2+random(216); - y2=16+random(143); - myGLCD.drawRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - -// Draw some random rounded rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(216); - y=16+random(143); - x2=2+random(216); - y2=16+random(143); - myGLCD.drawRoundRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(216); - y=16+random(143); - x2=2+random(216); - y2=16+random(143); - myGLCD.drawLine(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - - for (int i=0; i<10000; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - myGLCD.drawPixel(2+random(216), 16+random(143)); - } - - delay(2000); - - myGLCD.fillScr(0, 0, 255); - myGLCD.setColor(255, 0, 0); - myGLCD.fillRoundRect(40, 57, 179, 119); - - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("That's it!", CENTER, 62); - myGLCD.print("Restarting in a", CENTER, 88); - myGLCD.print("few seconds...", CENTER, 101); - - myGLCD.setColor(0, 255, 0); - myGLCD.setBackColor(0, 0, 255); - myGLCD.print("Runtime: (msecs)", CENTER, 146); - myGLCD.printNumI(millis(), CENTER, 161); - - delay (10000); -} - diff --git a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_320x240/UTFT_Demo_320x240.ino b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_320x240/UTFT_Demo_320x240.ino deleted file mode 100644 index ce458f3..0000000 --- a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_320x240/UTFT_Demo_320x240.ino +++ /dev/null @@ -1,329 +0,0 @@ -// UTFT_Demo_320x240 (C)2014 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of how to use most of the functions -// of the library with a supported display modules. -// -// This demo was made for modules with a screen resolution -// of 320x240 pixels. -// -// This program requires the UTFT library. -// - -#include - -// Declare which fonts we will be using -extern uint8_t SmallFont[]; - -// Set the pins to the correct ones for your development shield -// ------------------------------------------------------------ -// Standard Arduino Mega/Due shield : ,38,39,40,41 -// CTE TFT LCD/SD Shield for Arduino Due : ,25,26,27,28 -// Teensy 3.x TFT Test Board : ,23,22, 3, 4 -// ElecHouse TFT LCD/SD Shield for Arduino Due : ,22,23,31,33 -// -// Remember to change the model parameter to suit your display module! -UTFT myGLCD(ITDB32S,38,39,40,41); - -void setup() -{ - randomSeed(analogRead(0)); - -// Setup the LCD - myGLCD.InitLCD(); - myGLCD.setFont(SmallFont); -} - -void loop() -{ - int buf[318]; - int x, x2; - int y, y2; - int r; - -// Clear the screen and draw the frame - myGLCD.clrScr(); - - myGLCD.setColor(255, 0, 0); - myGLCD.fillRect(0, 0, 319, 13); - myGLCD.setColor(64, 64, 64); - myGLCD.fillRect(0, 226, 319, 239); - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("* Universal Color TFT Display Library *", CENTER, 1); - myGLCD.setBackColor(64, 64, 64); - myGLCD.setColor(255,255,0); - myGLCD.print("", CENTER, 227); - - myGLCD.setColor(0, 0, 255); - myGLCD.drawRect(0, 14, 319, 225); - -// Draw crosshairs - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(159, 15, 159, 224); - myGLCD.drawLine(1, 119, 318, 119); - for (int i=9; i<310; i+=10) - myGLCD.drawLine(i, 117, i, 121); - for (int i=19; i<220; i+=10) - myGLCD.drawLine(157, i, 161, i); - -// Draw sin-, cos- and tan-lines - myGLCD.setColor(0,255,255); - myGLCD.print("Sin", 5, 15); - for (int i=1; i<318; i++) - { - myGLCD.drawPixel(i,119+(sin(((i*1.13)*3.14)/180)*95)); - } - - myGLCD.setColor(255,0,0); - myGLCD.print("Cos", 5, 27); - for (int i=1; i<318; i++) - { - myGLCD.drawPixel(i,119+(cos(((i*1.13)*3.14)/180)*95)); - } - - myGLCD.setColor(255,255,0); - myGLCD.print("Tan", 5, 39); - for (int i=1; i<318; i++) - { - myGLCD.drawPixel(i,119+(tan(((i*1.13)*3.14)/180))); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(159, 15, 159, 224); - myGLCD.drawLine(1, 119, 318, 119); - -// Draw a moving sinewave - x=1; - for (int i=1; i<(318*20); i++) - { - x++; - if (x==319) - x=1; - if (i>319) - { - if ((x==159)||(buf[x-1]==119)) - myGLCD.setColor(0,0,255); - else - myGLCD.setColor(0,0,0); - myGLCD.drawPixel(x,buf[x-1]); - } - myGLCD.setColor(0,255,255); - y=119+(sin(((i*1.1)*3.14)/180)*(90-(i / 100))); - myGLCD.drawPixel(x,y); - buf[x-1]=y; - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - -// Draw some filled rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRect(70+(i*20), 30+(i*20), 130+(i*20), 90+(i*20)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - -// Draw some filled, rounded rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRoundRect(190-(i*20), 30+(i*20), 250-(i*20), 90+(i*20)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - -// Draw some filled circles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillCircle(100+(i*20),60+(i*20), 30); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - -// Draw some lines in a pattern - myGLCD.setColor (255,0,0); - for (int i=15; i<224; i+=5) - { - myGLCD.drawLine(1, i, (i*1.44)-10, 224); - } - myGLCD.setColor (255,0,0); - for (int i=224; i>15; i-=5) - { - myGLCD.drawLine(318, i, (i*1.44)-11, 15); - } - myGLCD.setColor (0,255,255); - for (int i=224; i>15; i-=5) - { - myGLCD.drawLine(1, i, 331-(i*1.44), 15); - } - myGLCD.setColor (0,255,255); - for (int i=15; i<224; i+=5) - { - myGLCD.drawLine(318, i, 330-(i*1.44), 224); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - -// Draw some random circles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=32+random(256); - y=45+random(146); - r=random(30); - myGLCD.drawCircle(x, y, r); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - -// Draw some random rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(316); - y=16+random(207); - x2=2+random(316); - y2=16+random(207); - myGLCD.drawRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - -// Draw some random rounded rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(316); - y=16+random(207); - x2=2+random(316); - y2=16+random(207); - myGLCD.drawRoundRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(316); - y=16+random(209); - x2=2+random(316); - y2=16+random(209); - myGLCD.drawLine(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - - for (int i=0; i<10000; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - myGLCD.drawPixel(2+random(316), 16+random(209)); - } - - delay(2000); - - myGLCD.fillScr(0, 0, 255); - myGLCD.setColor(255, 0, 0); - myGLCD.fillRoundRect(80, 70, 239, 169); - - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("That's it!", CENTER, 93); - myGLCD.print("Restarting in a", CENTER, 119); - myGLCD.print("few seconds...", CENTER, 132); - - myGLCD.setColor(0, 255, 0); - myGLCD.setBackColor(0, 0, 255); - myGLCD.print("Runtime: (msecs)", CENTER, 210); - myGLCD.printNumI(millis(), CENTER, 225); - - delay (10000); -} - diff --git a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_320x240_Serial/UTFT_Demo_320x240_Serial.ino b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_320x240_Serial/UTFT_Demo_320x240_Serial.ino deleted file mode 100644 index 19da792..0000000 --- a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_320x240_Serial/UTFT_Demo_320x240_Serial.ino +++ /dev/null @@ -1,343 +0,0 @@ -// UTFT_Demo_320x240_Serial (C)2014 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of how to use most of the functions -// of the library with a supported display modules. -// -// This demo was made for modules with a screen resolution -// of 320x240 pixels. -// -// This program requires the UTFT library. -// -// ******************************************************************** -// * IMPORTANT: Read the comments in the setup() function when * -// * using the DisplayModule DM-TFT28-105. * -// ******************************************************************** -// - -#include - -// Declare which fonts we will be using -extern uint8_t SmallFont[]; - -// Usage: myGLCD(, SDA, SCL, CS, RST[, RS]); -//UTFT myGLCD(TFT01_22SP,9,8,12,11,10); // ElecFreaks TFT01-2.2SP -UTFT myGLCD(DMTFT28105,MOSI,SCK,10,NOTINUSE,9); // DisplayModule DM-TFT28-105 - -void setup() -{ -// DisplayModule -// ------------- -// The following 4 lines are needed for the DM-TFT28-105 display -// module to set the SS/CS pins for the other devices connected -// to the Arduino SPI pins. If you are using any other display -// module these lines should be commented out. -// ------------------------------------------------------------- - pinMode(10,OUTPUT); digitalWrite(10,HIGH); // TFT SS/CE - pinMode(8, OUTPUT); digitalWrite(8, HIGH); // SD card SS/CE - pinMode(6, OUTPUT); digitalWrite(6, HIGH); // Flash chip SS/CE - pinMode(4, OUTPUT); digitalWrite(4, HIGH); // Touch controller SS/CE -// ------------------------------------------------------------- - - -// Just get some random numbers - randomSeed(analogRead(0)); - -// Setup the LCD - myGLCD.InitLCD(); - myGLCD.setFont(SmallFont); -} - -void loop() -{ - int buf[318]; - int x, x2; - int y, y2; - int r; - -// Clear the screen and draw the frame - myGLCD.clrScr(); - - myGLCD.setColor(255, 0, 0); - myGLCD.fillRect(0, 0, 319, 13); - myGLCD.setColor(64, 64, 64); - myGLCD.fillRect(0, 226, 319, 239); - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("* Universal Color TFT Display Library *", CENTER, 1); - myGLCD.setBackColor(64, 64, 64); - myGLCD.setColor(255,255,0); - myGLCD.print("", CENTER, 227); - - myGLCD.setColor(0, 0, 255); - myGLCD.drawRect(0, 14, 319, 225); - -// Draw crosshairs - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(159, 15, 159, 224); - myGLCD.drawLine(1, 119, 318, 119); - for (int i=9; i<310; i+=10) - myGLCD.drawLine(i, 117, i, 121); - for (int i=19; i<220; i+=10) - myGLCD.drawLine(157, i, 161, i); - -// Draw sin-, cos- and tan-lines - myGLCD.setColor(0,255,255); - myGLCD.print("Sin", 5, 15); - for (int i=1; i<318; i++) - { - myGLCD.drawPixel(i,119+(sin(((i*1.13)*3.14)/180)*95)); - } - - myGLCD.setColor(255,0,0); - myGLCD.print("Cos", 5, 27); - for (int i=1; i<318; i++) - { - myGLCD.drawPixel(i,119+(cos(((i*1.13)*3.14)/180)*95)); - } - - myGLCD.setColor(255,255,0); - myGLCD.print("Tan", 5, 39); - for (int i=1; i<318; i++) - { - myGLCD.drawPixel(i,119+(tan(((i*1.13)*3.14)/180))); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(159, 15, 159, 224); - myGLCD.drawLine(1, 119, 318, 119); - -// Draw a moving sinewave - x=1; - for (int i=1; i<(318*20); i++) - { - x++; - if (x==319) - x=1; - if (i>319) - { - if ((x==159)||(buf[x-1]==119)) - myGLCD.setColor(0,0,255); - else - myGLCD.setColor(0,0,0); - myGLCD.drawPixel(x,buf[x-1]); - } - myGLCD.setColor(0,255,255); - y=119+(sin(((i*1.1)*3.14)/180)*(90-(i / 100))); - myGLCD.drawPixel(x,y); - buf[x-1]=y; - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - -// Draw some filled rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRect(70+(i*20), 30+(i*20), 130+(i*20), 90+(i*20)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - -// Draw some filled, rounded rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRoundRect(190-(i*20), 30+(i*20), 250-(i*20), 90+(i*20)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - -// Draw some filled circles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillCircle(100+(i*20),60+(i*20), 30); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - -// Draw some lines in a pattern - myGLCD.setColor (255,0,0); - for (int i=15; i<224; i+=5) - { - myGLCD.drawLine(1, i, (i*1.44)-10, 224); - } - myGLCD.setColor (255,0,0); - for (int i=224; i>15; i-=5) - { - myGLCD.drawLine(318, i, (i*1.44)-11, 15); - } - myGLCD.setColor (0,255,255); - for (int i=224; i>15; i-=5) - { - myGLCD.drawLine(1, i, 331-(i*1.44), 15); - } - myGLCD.setColor (0,255,255); - for (int i=15; i<224; i+=5) - { - myGLCD.drawLine(318, i, 330-(i*1.44), 224); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - -// Draw some random circles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=32+random(256); - y=45+random(146); - r=random(30); - myGLCD.drawCircle(x, y, r); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - -// Draw some random rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(316); - y=16+random(207); - x2=2+random(316); - y2=16+random(207); - myGLCD.drawRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - -// Draw some random rounded rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(316); - y=16+random(207); - x2=2+random(316); - y2=16+random(207); - myGLCD.drawRoundRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(316); - y=16+random(209); - x2=2+random(316); - y2=16+random(209); - myGLCD.drawLine(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - - for (int i=0; i<10000; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - myGLCD.drawPixel(2+random(316), 16+random(209)); - } - - delay(2000); - - myGLCD.fillScr(0, 0, 255); - myGLCD.setColor(255, 0, 0); - myGLCD.fillRoundRect(80, 70, 239, 169); - - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("That's it!", CENTER, 93); - myGLCD.print("Restarting in a", CENTER, 119); - myGLCD.print("few seconds...", CENTER, 132); - - myGLCD.setColor(0, 255, 0); - myGLCD.setBackColor(0, 0, 255); - myGLCD.print("Runtime: (msecs)", CENTER, 210); - myGLCD.printNumI(millis(), CENTER, 225); - - delay (10000); -} - diff --git a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_400x240/UTFT_Demo_400x240.ino b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_400x240/UTFT_Demo_400x240.ino deleted file mode 100644 index 078902c..0000000 --- a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_400x240/UTFT_Demo_400x240.ino +++ /dev/null @@ -1,331 +0,0 @@ -// UTFT_Demo_400x240 (C)2014 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of how to use most of the functions -// of the library with a supported display modules. -// -// This demo was made for modules with a screen resolution -// of 400x240 pixels. -// -// This program requires the UTFT library. -// - -#include - -// Declare which fonts we will be using -extern uint8_t SmallFont[]; - -// Set the pins to the correct ones for your development shield -// ------------------------------------------------------------ -// Standard Arduino Mega/Due shield : ,38,39,40,41 -// CTE TFT LCD/SD Shield for Arduino Due : ,25,26,27,28 -// Teensy 3.x TFT Test Board : ,23,22, 3, 4 -// ElecHouse TFT LCD/SD Shield for Arduino Due : ,22,23,31,33 -// -// Remember to change the model parameter to suit your display module! -UTFT myGLCD(ITDB32WD,38,39,40,41); - -void setup() -{ - randomSeed(analogRead(0)); - -// Setup the LCD - myGLCD.InitLCD(); - myGLCD.setFont(SmallFont); -} - -void loop() -{ - int buf[398]; - int x, x2; - int y, y2; - int r; - -// Clear the screen and draw the frame - myGLCD.clrScr(); - - myGLCD.setColor(255, 0, 0); - myGLCD.fillRect(0, 0, 399, 13); - myGLCD.setColor(64, 64, 64); - myGLCD.fillRect(0, 226, 399, 239); - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("*** Universal Color TFT Display Library ***", CENTER, 1); - myGLCD.setBackColor(64, 64, 64); - myGLCD.setColor(255,255,0); - myGLCD.print("< http://electronics.henningkarlsen.com >", CENTER, 227); - - myGLCD.setColor(0, 0, 255); - myGLCD.drawRect(0, 14, 399, 225); - -// Draw crosshairs - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(199, 15, 199, 224); - myGLCD.drawLine(1, 119, 398, 119); - for (int i=9; i<390; i+=10) - myGLCD.drawLine(i, 117, i, 121); - for (int i=19; i<220; i+=10) - myGLCD.drawLine(197, i, 201, i); - -// Draw sin-, cos- and tan-lines - myGLCD.setColor(0,255,255); - myGLCD.print("Sin", 5, 15); - for (int i=1; i<398; i++) - { - myGLCD.drawPixel(i,119+(sin(((i*0.9)*3.14)/180)*95)); - } - - myGLCD.setColor(255,0,0); - myGLCD.print("Cos", 5, 27); - for (int i=1; i<398; i++) - { - myGLCD.drawPixel(i,119+(cos(((i*0.9)*3.14)/180)*95)); - } - - myGLCD.setColor(255,255,0); - myGLCD.print("Tan", 5, 39); - for (int i=1; i<398; i++) - { - y=119+(tan(((i*0.9)*3.14)/180)); - if ((y>15) && (y<224)) - myGLCD.drawPixel(i,y); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,398,224); - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(199, 15, 199, 224); - myGLCD.drawLine(1, 119, 398, 119); - -// Draw a moving sinewave - x=1; - for (int i=1; i<(398*20); i++) - { - x++; - if (x==399) - x=1; - if (i>399) - { - if ((x==199)||(buf[x-1]==119)) - myGLCD.setColor(0,0,255); - else - myGLCD.setColor(0,0,0); - myGLCD.drawPixel(x,buf[x-1]); - } - myGLCD.setColor(0,255,255); - y=119+(sin(((i)*3.14)/180)*(90-(i / 100))); - myGLCD.drawPixel(x,y); - buf[x-1]=y; - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,398,224); - -// Draw some filled rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRect(110+(i*20), 30+(i*20), 170+(i*20), 90+(i*20)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,398,224); - -// Draw some filled, rounded rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRoundRect(230-(i*20), 30+(i*20), 290-(i*20), 90+(i*20)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,398,224); - -// Draw some filled circles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillCircle(110+(i*30),60+(i*20), 30); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,398,224); - -// Draw some lines in a pattern - myGLCD.setColor (255,0,0); - for (int i=15; i<224; i+=5) - { - myGLCD.drawLine(1, i, (i*1.77)-10, 224); - } - myGLCD.setColor (255,0,0); - for (int i=224; i>15; i-=5) - { - myGLCD.drawLine(398, i, (i*1.77)-11, 15); - } - myGLCD.setColor (0,255,255); - for (int i=224; i>15; i-=5) - { - myGLCD.drawLine(1, i, 411-(i*1.77), 15); - } - myGLCD.setColor (0,255,255); - for (int i=15; i<224; i+=5) - { - myGLCD.drawLine(398, i, 410-(i*1.77), 224); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,398,224); - -// Draw some random circles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=32+random(336); - y=45+random(146); - r=random(30); - myGLCD.drawCircle(x, y, r); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,398,224); - -// Draw some random rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(396); - y=16+random(207); - x2=2+random(396); - y2=16+random(207); - myGLCD.drawRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,398,224); - -// Draw some random rounded rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(396); - y=16+random(207); - x2=2+random(396); - y2=16+random(207); - myGLCD.drawRoundRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,398,224); - - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(396); - y=16+random(209); - x2=2+random(396); - y2=16+random(209); - myGLCD.drawLine(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,398,224); - - for (int i=0; i<10000; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - myGLCD.drawPixel(2+random(396), 16+random(209)); - } - - delay(2000); - - myGLCD.fillScr(0, 0, 255); - myGLCD.setColor(255, 0, 0); - myGLCD.fillRoundRect(120, 70, 279, 169); - - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("That's it!", CENTER, 93); - myGLCD.print("Restarting in a", CENTER, 119); - myGLCD.print("few seconds...", CENTER, 132); - - myGLCD.setColor(0, 255, 0); - myGLCD.setBackColor(0, 0, 255); - myGLCD.print("Runtime: (msecs)", CENTER, 210); - myGLCD.printNumI(millis(), CENTER, 225); - - delay (10000); -} - diff --git a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_480x272/UTFT_Demo_480x272.ino b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_480x272/UTFT_Demo_480x272.ino deleted file mode 100644 index 41c1973..0000000 --- a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_480x272/UTFT_Demo_480x272.ino +++ /dev/null @@ -1,328 +0,0 @@ -// UTFT_Demo_480x272 (C)2014 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of how to use most of the functions -// of the library with a supported display modules. -// -// This demo was made for modules with a screen resolution -// of 480x272 pixels. -// -// This program requires the UTFT library. -// - -#include - -// Declare which fonts we will be using -extern uint8_t SmallFont[]; - -// Set the pins to the correct ones for your development shield -// ------------------------------------------------------------ -// Standard Arduino Mega/Due shield : ,38,39,40,41 -// CTE TFT LCD/SD Shield for Arduino Due : ,25,26,27,28 -// Teensy 3.x TFT Test Board : ,23,22, 3, 4 -// ElecHouse TFT LCD/SD Shield for Arduino Due : ,22,23,31,33 -// -// Remember to change the model parameter to suit your display module! -UTFT myGLCD(ITDB43,38,39,40,41); - -void setup() -{ - randomSeed(analogRead(0)); - -// Setup the LCD - myGLCD.InitLCD(); - myGLCD.setFont(SmallFont); -} - -void loop() -{ - int buf[478]; - int x, x2; - int y, y2; - int r; - -// Clear the screen and draw the frame - myGLCD.clrScr(); - - myGLCD.setColor(255, 0, 0); - myGLCD.fillRect(0, 0, 479, 13); - myGLCD.setColor(64, 64, 64); - myGLCD.fillRect(0, 258, 479, 271); - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("* Universal Color TFT Display Library *", CENTER, 1); - myGLCD.setBackColor(64, 64, 64); - myGLCD.setColor(255,255,0); - myGLCD.print("", CENTER, 259); - - myGLCD.setColor(0, 0, 255); - myGLCD.drawRect(0, 14, 479, 257); - -// Draw crosshairs - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(239, 15, 239, 256); - myGLCD.drawLine(1, 135, 478, 135); - for (int i=9; i<470; i+=10) - myGLCD.drawLine(i, 133, i, 138); - for (int i=15; i<256; i+=10) - myGLCD.drawLine(237, i, 241, i); - -// Draw sin-, cos- and tan-lines - myGLCD.setColor(0,255,255); - myGLCD.print("Sin", 5, 15); - for (int i=1; i<478; i++) - { - myGLCD.drawPixel(i,135+(sin(((i*1.13)*3.14)/180)*95)); - } - - myGLCD.setColor(255,0,0); - myGLCD.print("Cos", 5, 27); - for (int i=1; i<478; i++) - { - myGLCD.drawPixel(i,135+(cos(((i*1.13)*3.14)/180)*95)); - } - - myGLCD.setColor(255,255,0); - myGLCD.print("Tan", 5, 39); - for (int i=1; i<478; i++) - { - myGLCD.drawPixel(i,135+(tan(((i*1.13)*3.14)/180))); - } - - delay(2000); - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,256); - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(239, 15, 239, 256); - myGLCD.drawLine(1, 135, 478, 135); - -// Draw a moving sinewave - x=1; - for (int i=1; i<(478*20); i++) - { - x++; - if (x==479) - x=1; - if (i>479) - { - if ((x==239)||(buf[x-1]==135)) - myGLCD.setColor(0,0,255); - else - myGLCD.setColor(0,0,0); - myGLCD.drawPixel(x,buf[x-1]); - } - myGLCD.setColor(0,255,255); - y=135+(sin(((i*1.65)*3.14)/180)*(90-(i / 100))); - myGLCD.drawPixel(x,y); - buf[x-1]=y; - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,256); - -// Draw some filled rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRect(150+(i*20), 46+(i*20), 210+(i*20), 106+(i*20)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,256); - -// Draw some filled, rounded rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRoundRect(330-(i*20), 46+(i*20), 270-(i*20), 106+(i*20)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,256); - -// Draw some filled circles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillCircle(180+(i*20),75+(i*20), 30); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,256); - -// Draw some lines in a pattern - myGLCD.setColor (255,0,0); - for (int i=15; i<256; i+=5) - { - myGLCD.drawLine(1, i, (i*1.88)-10, 256); - } - myGLCD.setColor (255,0,0); - for (int i=256; i>15; i-=5) - { - myGLCD.drawLine(478, i, (i*1.88)-11, 15); - } - myGLCD.setColor (0,255,255); - for (int i=256; i>15; i-=5) - { - myGLCD.drawLine(1, i, 491-(i*1.88), 15); - } - myGLCD.setColor (0,255,255); - for (int i=15; i<256; i+=5) - { - myGLCD.drawLine(478, i, 490-(i*1.88), 256); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,256); - -// Draw some random circles - for (int i=0; i<150; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=32+random(416); - y=45+random(178); - r=random(30); - myGLCD.drawCircle(x, y, r); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,256); - -// Draw some random rectangles - for (int i=0; i<150; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(476); - y=16+random(239); - x2=2+random(476); - y2=16+random(239); - myGLCD.drawRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,256); - -// Draw some random rounded rectangles - for (int i=0; i<150; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(476); - y=16+random(239); - x2=2+random(476); - y2=16+random(239); - myGLCD.drawRoundRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,256); - - for (int i=0; i<150; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(476); - y=16+random(239); - x2=2+random(476); - y2=16+random(239); - myGLCD.drawLine(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,256); - - for (int i=0; i<10000; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - myGLCD.drawPixel(2+random(476), 16+random(239)); - } - - delay(2000); - - myGLCD.fillScr(0, 0, 255); - myGLCD.setColor(255, 0, 0); - myGLCD.fillRoundRect(160, 70, 319, 169); - - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("That's it!", CENTER, 93); - myGLCD.print("Restarting in a", CENTER, 119); - myGLCD.print("few seconds...", CENTER, 132); - - myGLCD.setColor(0, 255, 0); - myGLCD.setBackColor(0, 0, 255); - myGLCD.print("Runtime: (msecs)", CENTER, 243); - myGLCD.printNumI(millis(), CENTER, 258); - - delay (10000); -} - diff --git a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_480x320/UTFT_Demo_480x320.ino b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_480x320/UTFT_Demo_480x320.ino deleted file mode 100644 index 6746a93..0000000 --- a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_480x320/UTFT_Demo_480x320.ino +++ /dev/null @@ -1,329 +0,0 @@ -// UTFT_Demo_480x320 (C)2014 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of how to use most of the functions -// of the library with a supported display modules. -// -// This demo was made for modules with a screen resolution -// of 480x320 pixels. -// -// This program requires the UTFT library. -// - -#include - -// Declare which fonts we will be using -extern uint8_t SmallFont[]; - -// Set the pins to the correct ones for your development shield -// ------------------------------------------------------------ -// Standard Arduino Mega/Due shield : ,38,39,40,41 -// CTE TFT LCD/SD Shield for Arduino Due : ,25,26,27,28 -// Teensy 3.x TFT Test Board : ,23,22, 3, 4 -// ElecHouse TFT LCD/SD Shield for Arduino Due : ,22,23,31,33 -// -// Remember to change the model parameter to suit your display module! -UTFT myGLCD(CTE32HR,25,26,27,28); - -void setup() -{ - randomSeed(analogRead(0)); - -// Setup the LCD - myGLCD.InitLCD(); - myGLCD.setFont(SmallFont); -} - -void loop() -{ - int buf[478]; - int x, x2; - int y, y2; - int r; - -// Clear the screen and draw the frame - myGLCD.clrScr(); - - myGLCD.setColor(255, 0, 0); - myGLCD.fillRect(0, 0, 479, 13); - myGLCD.setColor(64, 64, 64); - myGLCD.fillRect(0, 306, 479, 319); - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("* Universal Color TFT Display Library *", CENTER, 1); - myGLCD.setBackColor(64, 64, 64); - myGLCD.setColor(255,255,0); - myGLCD.print("", CENTER, 307); - - myGLCD.setColor(0, 0, 255); - myGLCD.drawRect(0, 14, 479, 305); - -// Draw crosshairs - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(239, 15, 239, 304); - myGLCD.drawLine(1, 159, 478, 159); - for (int i=9; i<470; i+=10) - myGLCD.drawLine(i, 157, i, 161); - for (int i=19; i<220; i+=10) - myGLCD.drawLine(237, i, 241, i); - -// Draw sin-, cos- and tan-lines - myGLCD.setColor(0,255,255); - myGLCD.print("Sin", 5, 15); - for (int i=1; i<478; i++) - { - myGLCD.drawPixel(i,159+(sin(((i*1.13)*3.14)/180)*95)); - } - - myGLCD.setColor(255,0,0); - myGLCD.print("Cos", 5, 27); - for (int i=1; i<478; i++) - { - myGLCD.drawPixel(i,159+(cos(((i*1.13)*3.14)/180)*95)); - } - - myGLCD.setColor(255,255,0); - myGLCD.print("Tan", 5, 39); - for (int i=1; i<478; i++) - { - myGLCD.drawPixel(i,159+(tan(((i*1.13)*3.14)/180))); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,304); - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(239, 15, 239, 304); - myGLCD.drawLine(1, 159, 478, 159); - -// Draw a moving sinewave - x=1; - for (int i=1; i<(478*15); i++) - { - x++; - if (x==479) - x=1; - if (i>479) - { - if ((x==239)||(buf[x-1]==159)) - myGLCD.setColor(0,0,255); - else - myGLCD.setColor(0,0,0); - myGLCD.drawPixel(x,buf[x-1]); - } - myGLCD.setColor(0,255,255); - y=159+(sin(((i*0.7)*3.14)/180)*(90-(i / 100))); - myGLCD.drawPixel(x,y); - buf[x-1]=y; - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,304); - -// Draw some filled rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRect(150+(i*20), 70+(i*20), 210+(i*20), 130+(i*20)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,304); - -// Draw some filled, rounded rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRoundRect(270-(i*20), 70+(i*20), 330-(i*20), 130+(i*20)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,304); - -// Draw some filled circles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillCircle(180+(i*20),100+(i*20), 30); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,304); - -// Draw some lines in a pattern - myGLCD.setColor (255,0,0); - for (int i=15; i<304; i+=5) - { - myGLCD.drawLine(1, i, (i*1.6)-10, 304); - } - myGLCD.setColor (255,0,0); - for (int i=304; i>15; i-=5) - { - myGLCD.drawLine(478, i, (i*1.6)-11, 15); - } - myGLCD.setColor (0,255,255); - for (int i=304; i>15; i-=5) - { - myGLCD.drawLine(1, i, 491-(i*1.6), 15); - } - myGLCD.setColor (0,255,255); - for (int i=15; i<304; i+=5) - { - myGLCD.drawLine(478, i, 490-(i*1.6), 304); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,304); - -// Draw some random circles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=32+random(416); - y=45+random(226); - r=random(30); - myGLCD.drawCircle(x, y, r); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,304); - -// Draw some random rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(476); - y=16+random(289); - x2=2+random(476); - y2=16+random(289); - myGLCD.drawRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,304); - -// Draw some random rounded rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(476); - y=16+random(289); - x2=2+random(476); - y2=16+random(289); - myGLCD.drawRoundRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,304); - - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(476); - y=16+random(289); - x2=2+random(476); - y2=16+random(289); - myGLCD.drawLine(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,304); - - for (int i=0; i<10000; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - myGLCD.drawPixel(2+random(476), 16+random(289)); - } - - delay(2000); - - myGLCD.fillScr(0, 0, 255); - myGLCD.setColor(255, 0, 0); - myGLCD.fillRoundRect(160, 70, 319, 169); - - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("That's it!", CENTER, 93); - myGLCD.print("Restarting in a", CENTER, 119); - myGLCD.print("few seconds...", CENTER, 132); - - myGLCD.setColor(0, 255, 0); - myGLCD.setBackColor(0, 0, 255); - myGLCD.print("Runtime: (msecs)", CENTER, 290); - myGLCD.printNumI(millis(), CENTER, 305); - - delay (10000); -} - diff --git a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_800x480/UTFT_Demo_800x480.ino b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_800x480/UTFT_Demo_800x480.ino deleted file mode 100644 index 293bc00..0000000 --- a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Demo_800x480/UTFT_Demo_800x480.ino +++ /dev/null @@ -1,288 +0,0 @@ -// UTFT_Demo_800x480 (C)2014 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of how to use most of the functions -// of the library with a supported display modules. -// -// This demo was made for modules with a screen resolution -// of 800x480 pixels. -// -// This program requires the UTFT library. -// - -#include - -// Declare which fonts we will be using -extern uint8_t SmallFont[]; - -// Set the pins to the correct ones for your development shield -// ------------------------------------------------------------ -// Standard Arduino Mega/Due shield : ,38,39,40,41 -// CTE TFT LCD/SD Shield for Arduino Due : ,25,26,27,28 -// Teensy 3.x TFT Test Board : ,23,22, 3, 4 -// ElecHouse TFT LCD/SD Shield for Arduino Due : ,22,23,31,33 -// -// Remember to change the model parameter to suit your display module! -UTFT myGLCD(ITDB50,38,39,40,41); - -void setup() -{ - randomSeed(analogRead(0)); - -// Setup the LCD - myGLCD.InitLCD(); - myGLCD.setFont(SmallFont); -} - -void loop() -{ - int buf[798]; - int x, x2; - int y, y2; - int r; - -// Clear the screen and draw the frame - myGLCD.clrScr(); - - myGLCD.setColor(255, 0, 0); - myGLCD.fillRect(0, 0, 799, 13); - myGLCD.setColor(64, 64, 64); - myGLCD.fillRect(0, 466, 799, 479); - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("* Universal Color TFT Display Library *", CENTER, 1); - myGLCD.setBackColor(64, 64, 64); - myGLCD.setColor(255,255,0); - myGLCD.print("", CENTER, 467); - - myGLCD.setColor(0, 0, 255); - myGLCD.drawRect(0, 14, 799, 465); - -// Draw crosshairs - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(399, 15, 399, 464); - myGLCD.drawLine(1, 239, 798, 239); - for (int i=9; i<790; i+=10) - myGLCD.drawLine(i, 237, i, 242); - for (int i=19; i<470; i+=10) - myGLCD.drawLine(397, i, 402, i); - -// Draw sin-, cos- and tan-lines - myGLCD.setColor(0,255,255); - myGLCD.print("Sin", 5, 15); - for (int i=1; i<798; i++) - { - myGLCD.drawPixel(i,239+(sin(((i*1.13)*3.14)/180)*200)); - } - - myGLCD.setColor(255,0,0); - myGLCD.print("Cos", 5, 27); - for (int i=1; i<798; i++) - { - myGLCD.drawPixel(i,239+(cos(((i*1.13)*3.14)/180)*200)); - } - - myGLCD.setColor(255,255,0); - myGLCD.print("Tan", 5, 39); - for (int i=1; i<798; i++) - { - myGLCD.drawPixel(i,239+(tan(((i*0.9)*3.14)/180))); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,798,464); - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(399, 15, 399, 464); - myGLCD.drawLine(1, 239, 798, 239); - -// Draw a moving sinewave - x=1; - for (int i=1; i<(798*20); i++) - { - x++; - if (x==799) - x=1; - if (i>799) - { - if ((x==399)||(buf[x-1]==239)) - myGLCD.setColor(0,0,255); - else - myGLCD.setColor(0,0,0); - myGLCD.drawPixel(x,buf[x-1]); - } - myGLCD.setColor(0,255,255); - y=239+(sin(((i*1.65)*3.14)/180)*(200-(i / 100))); - myGLCD.drawPixel(x,y); - buf[x-1]=y; - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,798,464); - -// Draw some random filled rectangles - for (int i=0; i<50; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(746); - y=16+random(397); - x2=x+50; - y2=y+50; - myGLCD.fillRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,798,464); - -// Draw some random filled, rounded rectangles - for (int i=0; i<50; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(746); - y=16+random(397); - x2=x+50; - y2=y+50; - myGLCD.fillRoundRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,798,464); - -// Draw some random filled circles - for (int i=0; i<50; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=27+random(746); - y=41+random(397); - myGLCD.fillCircle(x, y, 25); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,798,464); - -// Draw some lines in a pattern - myGLCD.setColor (255,0,0); - for (int i=15; i<463; i+=5) - { - myGLCD.drawLine(1, i, (i*1.66)-10, 463); - } - myGLCD.setColor (255,0,0); - for (int i=463; i>15; i-=5) - { - myGLCD.drawLine(798, i, (i*1.66)+30, 15); - } - myGLCD.setColor (0,255,255); - for (int i=463; i>15; i-=5) - { - myGLCD.drawLine(1, i, 770-(i*1.66), 15); - } - myGLCD.setColor (0,255,255); - for (int i=15; i<463; i+=5) - { - myGLCD.drawLine(798, i, 810-(i*1.66), 463); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,798,464); - -// Draw some random circles - for (int i=0; i<250; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=32+random(736); - y=45+random(386); - r=random(30); - myGLCD.drawCircle(x, y, r); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,798,464); - -// Draw some random rectangles - for (int i=0; i<250; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(796); - y=16+random(447); - x2=2+random(796); - y2=16+random(447); - myGLCD.drawRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,798,464); - -// Draw some random rounded rectangles - for (int i=0; i<250; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(796); - y=16+random(447); - x2=2+random(796); - y2=16+random(447); - myGLCD.drawRoundRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,798,464); - - for (int i=0; i<250; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(796); - y=16+random(447); - x2=2+random(796); - y2=16+random(447); - myGLCD.drawLine(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,798,464); - - for (int i=0; i<10000; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - myGLCD.drawPixel(2+random(796), 16+random(447)); - } - - delay(2000); - - myGLCD.fillScr(0, 0, 255); - myGLCD.setColor(255, 0, 0); - myGLCD.fillRoundRect(320, 190, 479, 289); - - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("That's it!", CENTER, 213); - myGLCD.print("Restarting in a", CENTER, 239); - myGLCD.print("few seconds...", CENTER, 252); - - myGLCD.setColor(0, 255, 0); - myGLCD.setBackColor(0, 0, 255); - myGLCD.print("Runtime: (msecs)", CENTER, 450); - myGLCD.printNumI(millis(), CENTER, 465); - - delay (10000); -} - diff --git a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Rotate_Bitmap/UTFT_Rotate_Bitmap.ino b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Rotate_Bitmap/UTFT_Rotate_Bitmap.ino deleted file mode 100644 index 9f2a83f..0000000 --- a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Rotate_Bitmap/UTFT_Rotate_Bitmap.ino +++ /dev/null @@ -1,37 +0,0 @@ -// UTFT_Rotate_Bitmap (C)2014 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of the drawBitmap()-function. -// -// This program requires the UTFT library. -// - -#include - -// Set the pins to the correct ones for your development shield -// ------------------------------------------------------------ -// Standard Arduino Mega/Due shield : ,38,39,40,41 -// CTE TFT LCD/SD Shield for Arduino Due : ,25,26,27,28 -// Teensy 3.x TFT Test Board : ,23,22, 3, 4 -// ElecHouse TFT LCD/SD Shield for Arduino Due : ,22,23,31,33 -// -// Remember to change the model parameter to suit your display module! -UTFT myGLCD(ITDB32S,38,39,40,41); - -extern unsigned short biohazard[0x1000]; - -void setup() -{ - myGLCD.InitLCD(LANDSCAPE); - myGLCD.fillScr(255, 255, 255); - myGLCD.setColor(0, 0, 0); -} - -void loop() -{ - for (int i=0; i<360; i+=5) - { - myGLCD.drawBitmap (10, 10, 64, 64, biohazard, i, 32, 32); - } -} - diff --git a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Rotate_Bitmap/biohazard.c b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Rotate_Bitmap/biohazard.c deleted file mode 100644 index ca1348d..0000000 --- a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Rotate_Bitmap/biohazard.c +++ /dev/null @@ -1,264 +0,0 @@ -// Generated by : ImageConverter 565 v1.0 -// Generated from: biohazard1_L.png -// Time generated: 12.06.2011 00:23:59 -// Dimensions : 64x64 pixels -// Size : 8 192 Bytes - -const unsigned short biohazard[0x1000] ={ -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0010 (16) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF7D, 0xC638, 0x9492, 0x6B4D, 0x4228, 0x2945, 0x2124, 0x18C3, 0x1082, // 0x0020 (32) -0x1082, 0x10A2, 0x18C3, 0x2124, 0x2965, 0x4A49, 0x6B6D, 0x9CD3, 0xCE79, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0030 (48) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0040 (64) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0050 (80) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0xBDD7, 0x6B6D, 0x2965, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0060 (96) -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0x31A6, 0x73AE, 0xC618, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0070 (112) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0080 (128) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0090 (144) -0xFFFF, 0xFFFF, 0xE73C, 0x8C71, 0x3186, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x0020, 0x0020, 0x0000, 0x0000, // 0x00A0 (160) -0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x4207, 0x9CF3, 0xF79E, 0xFFFF, // 0x00B0 (176) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00C0 (192) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00D0 (208) -0xEF7D, 0x8C51, 0x2104, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x00E0 (224) -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x2965, 0x9CD3, // 0x00F0 (240) -0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0100 (256) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xAD75, // 0x0110 (272) -0x2965, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 0x0020, 0x2901, 0x5241, 0x7B41, 0x9C02, 0xACA2, 0xBD02, // 0x0120 (288) -0xC521, 0xBD02, 0xACA2, 0x9C22, 0x7B41, 0x5241, 0x2901, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0130 (304) -0x39E7, 0xC618, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0140 (320) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xEF5D, 0x630C, 0x0000, // 0x0150 (336) -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x41C1, 0x93E1, 0xD5A1, 0xFEA1, 0xFF01, 0xFF20, 0xFF20, 0xFF20, 0xFF00, // 0x0160 (352) -0xFF00, 0xFF00, 0xFF20, 0xFF20, 0xFF20, 0xFF01, 0xFEA1, 0xD5A1, 0x93E1, 0x49E1, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0170 (368) -0x0000, 0x0841, 0x7BEF, 0xF7BE, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0180 (384) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xC638, 0x2965, 0x0000, 0x0000, // 0x0190 (400) -0x0000, 0x0000, 0x0000, 0x0000, 0x18A0, 0x7B41, 0xD5A1, 0xFF01, 0xFF20, 0xFEE0, 0xFEC0, 0xFEA0, 0xF680, 0xF680, 0xFEA0, 0xFEA0, // 0x01A0 (416) -0xFEA0, 0xFEA0, 0xFEA0, 0xF680, 0xF680, 0xFEA0, 0xFEC0, 0xFF00, 0xFF20, 0xFF01, 0xD5A1, 0x7B41, 0x1880, 0x0000, 0x0000, 0x0000, // 0x01B0 (432) -0x0000, 0x0000, 0x0000, 0x4208, 0xDEDB, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01C0 (448) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xAD55, 0x1082, 0x0000, 0x0000, 0x0000, // 0x01D0 (464) -0x0000, 0x0000, 0x0840, 0x7B62, 0xEE41, 0xFF21, 0xFEE0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFF20, 0xFF20, 0xFEA1, 0xFEC0, // 0x01E0 (480) -0xFEC0, 0xFEC0, 0xFEA1, 0xFF00, 0xFF20, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEE0, 0xFF21, 0xEE41, 0x7B62, 0x0840, 0x0000, // 0x01F0 (496) -0x0000, 0x0000, 0x0000, 0x0000, 0x18E3, 0xC618, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0200 (512) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x94B2, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0210 (528) -0x0000, 0x5201, 0xDDE1, 0xFF21, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFF40, 0xF6A1, 0xB4C1, 0x7322, 0xA441, 0xFEE0, // 0x0220 (544) -0xFEA0, 0xFEE0, 0xA461, 0x7322, 0xACA1, 0xF681, 0xFF40, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFF21, 0xDDE2, 0x4A01, // 0x0230 (560) -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1082, 0xB596, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0240 (576) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x9492, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0820, // 0x0250 (592) -0x9402, 0xFF01, 0xFEE0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEE0, 0xFF01, 0x9401, 0x3961, 0x7341, 0xCD81, 0xF680, 0xFEC0, // 0x0260 (608) -0xFEA0, 0xFEC0, 0xF681, 0xCD81, 0x7B61, 0x3961, 0x8BE1, 0xFEE1, 0xFEE0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEE0, 0xFF01, // 0x0270 (624) -0x9402, 0x0820, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0xB596, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0280 (640) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xA534, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x20C0, 0xCD61, // 0x0290 (656) -0xFF40, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFF01, 0xE621, 0x39A1, 0x20E1, 0xCD81, 0xFF40, 0xFEE0, 0xFEC0, 0xFEC0, // 0x02A0 (672) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEE0, 0xFF41, 0xCDC1, 0x2901, 0x3961, 0xDE01, 0xFF00, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEA0, // 0x02B0 (688) -0xFF21, 0xC561, 0x18A1, 0x0000, 0x0000, 0x0000, 0x0000, 0x1082, 0xC618, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02C0 (704) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xC618, 0x0861, 0x0000, 0x0000, 0x0000, 0x0000, 0x3121, 0xDE01, 0xFF00, // 0x02D0 (720) -0xFE80, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF01, 0xD5A2, 0x18A0, 0x20E0, 0xF682, 0xFF01, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, // 0x02E0 (736) -0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFF00, 0xF6A1, 0x2920, 0x1080, 0xCDA2, 0xFF01, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x02F0 (752) -0xFE80, 0xFF00, 0xDE01, 0x2921, 0x0000, 0x0000, 0x0000, 0x0000, 0x18E3, 0xDEDB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0300 (768) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE73C, 0x2124, 0x0000, 0x0000, 0x0000, 0x0000, 0x2921, 0xEE41, 0xFF00, 0xFEA0, // 0x0310 (784) -0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEE0, 0xDE02, 0x18A1, 0x0840, 0xDDE1, 0xFF00, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEC0, // 0x0320 (800) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEE0, 0xE621, 0x0860, 0x1880, 0xD5E2, 0xFEE0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0330 (816) -0xFEA0, 0xFEA0, 0xFF00, 0xE641, 0x2921, 0x0000, 0x0000, 0x0000, 0x0000, 0x4208, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0340 (832) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x5ACB, 0x0000, 0x0000, 0x0000, 0x0000, 0x18C0, 0xDE21, 0xFF00, 0xFEA0, 0xFEC0, // 0x0350 (848) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC1, 0x39A1, 0x0000, 0x8382, 0xFF21, 0xFE80, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0360 (864) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFE80, 0xFF20, 0x8BC1, 0x0000, 0x3161, 0xF6A1, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0370 (880) -0xFEC0, 0xFEC0, 0xFEA0, 0xFF00, 0xDE01, 0x18A0, 0x0000, 0x0000, 0x0000, 0x0000, 0x7BCF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0380 (896) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xA534, 0x0000, 0x0000, 0x0000, 0x0000, 0x0820, 0xCD61, 0xFF00, 0xFEA0, 0xFEC0, 0xFEC0, // 0x0390 (912) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF21, 0x93E1, 0x0000, 0x1060, 0xDE01, 0xFEE0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x03A0 (928) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEE0, 0xE621, 0x1080, 0x0000, 0x8BA1, 0xFF20, 0xFEA0, 0xFEC0, 0xFEC0, // 0x03B0 (944) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF00, 0xCD61, 0x0820, 0x0000, 0x0000, 0x0000, 0x0021, 0xBDF7, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03C0 (960) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF5D, 0x2104, 0x0000, 0x0000, 0x0000, 0x0000, 0x9402, 0xFF41, 0xFE80, 0xFEA0, 0xFEC0, 0xFEC0, // 0x03D0 (976) -0xFEC0, 0xFEC0, 0xFEA0, 0xFEC0, 0xF681, 0x20E0, 0x0000, 0x41A1, 0xFEE1, 0xFEA0, 0xFEA1, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x03E0 (992) -0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFF01, 0x49E1, 0x0000, 0x18A1, 0xEE41, 0xFEC0, 0xFEA0, 0xFEC0, // 0x03F0 (1008) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFE80, 0xFF41, 0x9402, 0x0000, 0x0000, 0x0000, 0x0000, 0x39C7, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0400 (1024) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x7BCF, 0x0000, 0x0000, 0x0000, 0x0000, 0x4A01, 0xFF01, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0410 (1040) -0xFEC0, 0xFEC0, 0xFEA0, 0xFF20, 0xA461, 0x0000, 0x0000, 0x6AC1, 0xFF21, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, // 0x0420 (1056) -0xFEE0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFE80, 0xFF20, 0x7300, 0x0000, 0x0000, 0x9C21, 0xFF20, 0xFEA0, 0xFEC0, // 0x0430 (1072) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFF01, 0x49E1, 0x0000, 0x0000, 0x0000, 0x0000, 0x9CD3, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0440 (1088) -0xFFFF, 0xFFFF, 0xFFFF, 0xDEFB, 0x10A2, 0x0000, 0x0000, 0x0000, 0x0840, 0xDDE1, 0xFEE0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0450 (1104) -0xFEA0, 0xFEA0, 0xFEA0, 0xFF20, 0x6261, 0x0000, 0x0000, 0x7300, 0xFF21, 0xF6A0, 0xFEA0, 0xFEE0, 0xFF20, 0xFF00, 0xFEA1, 0xEE42, // 0x0460 (1120) -0xE602, 0xEE42, 0xFEA1, 0xFF00, 0xFF20, 0xFEE0, 0xFEA0, 0xF681, 0xFF40, 0x8360, 0x0000, 0x0000, 0x5241, 0xFF01, 0xFEA0, 0xFEA0, // 0x0470 (1136) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF00, 0xDDC1, 0x0840, 0x0000, 0x0000, 0x0000, 0x2945, 0xEF7D, 0xFFFF, 0xFFFF, // 0x0480 (1152) -0xFFFF, 0xFFDF, 0xFFFF, 0x7BEF, 0x0000, 0x0000, 0x0000, 0x0000, 0x7B42, 0xFF21, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0490 (1168) -0xFEC0, 0xFEA0, 0xFEC0, 0xFEA0, 0x2900, 0x0000, 0x0000, 0x6AE0, 0xFF21, 0xFEC0, 0xFF01, 0xDE01, 0x9C01, 0x5241, 0x2921, 0x18A1, // 0x04A0 (1184) -0x1061, 0x1881, 0x2921, 0x5241, 0x9C02, 0xDDE1, 0xFF21, 0xFEC0, 0xFF20, 0x7321, 0x0000, 0x0000, 0x20E0, 0xF681, 0xFEC0, 0xFEA0, // 0x04B0 (1200) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF21, 0x7B41, 0x0000, 0x0000, 0x0000, 0x0000, 0x9CD3, 0xFFFF, 0xFFDF, // 0x04C0 (1216) -0xFFDF, 0xFFFF, 0xEF7D, 0x2104, 0x0000, 0x0000, 0x0000, 0x1080, 0xEE41, 0xFEE0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x04D0 (1232) -0xFEC0, 0xFEA0, 0xFEC0, 0xEE21, 0x1060, 0x0000, 0x0000, 0x41C1, 0xFF21, 0xDDE1, 0x6AC1, 0x0860, 0x0000, 0x0000, 0x0000, 0x0000, // 0x04E0 (1248) -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0860, 0x62C1, 0xDDC1, 0xFF41, 0x49E1, 0x0000, 0x0000, 0x0840, 0xE601, 0xFEE0, 0xFEA0, // 0x04F0 (1264) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEC0, 0xEE41, 0x1080, 0x0000, 0x0000, 0x0000, 0x39C7, 0xF7BE, 0xFFFF, // 0x0500 (1280) -0xFFDF, 0xFFFF, 0xA534, 0x0000, 0x0000, 0x0000, 0x0000, 0x7B21, 0xFF21, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0510 (1296) -0xFEA0, 0xFEA0, 0xFEE0, 0xE602, 0x0841, 0x0000, 0x0000, 0x1080, 0xACC2, 0x1060, 0x0000, 0x0000, 0x0000, 0x0020, 0x2920, 0x4A01, // 0x0520 (1312) -0x5241, 0x4A01, 0x3140, 0x0821, 0x0000, 0x0000, 0x0000, 0x0860, 0xACA2, 0x18A0, 0x0000, 0x0000, 0x0820, 0xDDE2, 0xFEE0, 0xFEA0, // 0x0530 (1328) -0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFE80, 0xFF21, 0x7321, 0x0000, 0x0000, 0x0000, 0x0020, 0xC618, 0xFFFF, // 0x0540 (1344) -0xFFFF, 0xFFFF, 0x52AA, 0x0000, 0x0020, 0x0000, 0x0820, 0xDDA1, 0xFEE0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0550 (1360) -0xFEC0, 0xFEA0, 0xFEE0, 0xE621, 0x1060, 0x0000, 0x0000, 0x0000, 0x6AE2, 0x20C1, 0x0000, 0x20E1, 0x8BA2, 0xD5A1, 0xFEA1, 0xFF00, // 0x0560 (1376) -0xFF01, 0xFF00, 0xFEC1, 0xD5C1, 0x8BC2, 0x2901, 0x0000, 0x18A1, 0x7302, 0x0000, 0x0000, 0x0000, 0x0840, 0xDE01, 0xFEE0, 0xFEA0, // 0x0570 (1392) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEE0, 0xD5A1, 0x0020, 0x0000, 0x0000, 0x0000, 0x738E, 0xFFFF, // 0x0580 (1408) -0xFFFF, 0xE71C, 0x18C3, 0x0000, 0x0020, 0x0000, 0x49C1, 0xFF01, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0590 (1424) -0xFEA0, 0xFEA0, 0xFEC0, 0xF661, 0x18A0, 0x0000, 0x0000, 0x0000, 0x2101, 0x8363, 0x7321, 0xEE81, 0xFF21, 0xFEE0, 0xFEC0, 0xFEA0, // 0x05A0 (1440) -0xFEA0, 0xFEA0, 0xFEC0, 0xFEE0, 0xFF20, 0xF681, 0x7B41, 0x8362, 0x2921, 0x0000, 0x0000, 0x0000, 0x1080, 0xEE41, 0xFEC0, 0xFEA0, // 0x05B0 (1456) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFF01, 0x41C1, 0x0000, 0x0020, 0x0000, 0x3186, 0xF79E, // 0x05C0 (1472) -0xFFFF, 0xAD75, 0x0000, 0x0000, 0x0020, 0x0000, 0x93E1, 0xFF20, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEC0, // 0x05D0 (1488) -0xFEC0, 0xFEA0, 0xFEA0, 0xFF41, 0x5221, 0x0000, 0x0000, 0x0000, 0x0000, 0x41C1, 0xFF01, 0xFF00, 0xF660, 0xFEA0, 0xFEA0, 0xFEC0, // 0x05E0 (1504) -0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xF660, 0xFF00, 0xFF22, 0x49E1, 0x0000, 0x0000, 0x0000, 0x0000, 0x49E1, 0xFF40, 0xFEA0, 0xFEA0, // 0x05F0 (1520) -0xFEA1, 0xFEC0, 0xFEA1, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF20, 0x93E1, 0x0000, 0x0020, 0x0000, 0x0020, 0xC638, // 0x0600 (1536) -0xFFFF, 0x73AE, 0x0000, 0x0000, 0x0000, 0x0020, 0xD5A1, 0xFF00, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA1, 0xFEA0, // 0x0610 (1552) -0xFEA1, 0xFF20, 0xFEC1, 0xD5C1, 0x5220, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0x3981, 0xE622, 0xFF20, 0xFEC0, 0xFEA0, 0xFEA0, // 0x0620 (1568) -0xFEC0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFF21, 0xE621, 0x41C1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x49E0, 0xCDA2, 0xFEA1, 0xFF20, // 0x0630 (1584) -0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF00, 0xD5A1, 0x0020, 0x0000, 0x0000, 0x0000, 0x9492, // 0x0640 (1600) -0xFFFF, 0x4A49, 0x0000, 0x0020, 0x0000, 0x2901, 0xFEA1, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEE0, // 0x0650 (1616) -0xFEE1, 0xA461, 0x3981, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1881, 0x93E1, 0xE622, 0xFF01, 0xFF00, // 0x0660 (1632) -0xFEA0, 0xFF00, 0xFF21, 0xEE41, 0x9401, 0x18A1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3141, 0x9C21, // 0x0670 (1648) -0xFEC1, 0xFEE0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEC0, 0xFEA1, 0x2901, 0x0000, 0x0020, 0x0000, 0x632C, // 0x0680 (1664) -0xE71C, 0x2124, 0x0000, 0x0020, 0x0000, 0x5241, 0xFF01, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFF00, 0xD5C1, // 0x0690 (1680) -0x41C1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1081, 0x4A01, 0xAC81, // 0x06A0 (1696) -0xFF21, 0xB4C1, 0x5221, 0x1081, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x06B0 (1712) -0x3981, 0xCD81, 0xFF21, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF01, 0x5221, 0x0000, 0x0020, 0x0000, 0x4228, // 0x06C0 (1728) -0xBDF7, 0x18C3, 0x0000, 0x0020, 0x0000, 0x7B41, 0xFF20, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFF20, 0xBD02, 0x1060, // 0x06D0 (1744) -0x0000, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5201, // 0x06E0 (1760) -0xFFC0, 0x5A41, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, // 0x06F0 (1776) -0x0000, 0x0840, 0xACA1, 0xFF21, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF20, 0x7B41, 0x0000, 0x0020, 0x0000, 0x2945, // 0x0700 (1792) -0x94B2, 0x0861, 0x0000, 0x0000, 0x0000, 0x9C02, 0xFF20, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF00, 0xBD22, 0x0820, 0x0000, // 0x0710 (1808) -0x0820, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1881, 0xAC81, // 0x0720 (1824) -0xFF20, 0xB4A1, 0x18A1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0730 (1840) -0x0020, 0x0000, 0x0000, 0xB4C2, 0xFF00, 0xFE80, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF20, 0x9C02, 0x0000, 0x0020, 0x0000, 0x2104, // 0x0740 (1856) -0x73AE, 0x0841, 0x0000, 0x0000, 0x0000, 0xACA2, 0xFF20, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEE0, 0xE622, 0x18A1, 0x0000, 0x0000, // 0x0750 (1872) -0x0000, 0x1080, 0x5221, 0x6B03, 0x6AE2, 0x6AE3, 0x4A01, 0x1080, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1061, 0xCD82, 0xFF20, // 0x0760 (1888) -0xFE80, 0xFF20, 0xD5C2, 0x1881, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1080, 0x5241, 0x6AE3, 0x6AE2, 0x6AE3, 0x5A62, 0x18C0, // 0x0770 (1904) -0x0000, 0x0000, 0x0000, 0x1060, 0xDDE2, 0xFEE0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFF20, 0xACA2, 0x0000, 0x0000, 0x0000, 0x10A2, // 0x0780 (1920) -0x52AA, 0x0000, 0x0000, 0x0000, 0x0000, 0xBD02, 0xFF00, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF01, 0x5A61, 0x0000, 0x0000, 0x18A0, // 0x0790 (1936) -0x9401, 0xEE61, 0xFEE2, 0x49E2, 0x18A1, 0x62A1, 0xFF41, 0xE621, 0x8BC2, 0x1880, 0x0000, 0x0820, 0x0000, 0x7B21, 0xFF40, 0xFE80, // 0x07A0 (1952) -0xFEC0, 0xFE80, 0xFF40, 0x8381, 0x0000, 0x0820, 0x0000, 0x1080, 0x8BE2, 0xEE41, 0xFF41, 0x62A2, 0x10A1, 0x3982, 0xFEC2, 0xF6A1, // 0x07B0 (1968) -0xA462, 0x2101, 0x0000, 0x0000, 0x49E1, 0xFF01, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF00, 0xBD02, 0x0000, 0x0000, 0x0000, 0x1082, // 0x07C0 (1984) -0x528A, 0x0000, 0x0000, 0x0000, 0x0000, 0xC521, 0xFF00, 0xFEA0, 0xFEC0, 0xFEA0, 0xFF00, 0xCD41, 0x0000, 0x0000, 0x49C1, 0xE642, // 0x07D0 (2000) -0xFF21, 0xFEE0, 0xEE42, 0x1081, 0x0000, 0x41A0, 0xFEE0, 0xFEC0, 0xFF40, 0xE621, 0x41A1, 0x0000, 0x0000, 0x93E1, 0xFF20, 0xFEA0, // 0x07E0 (2016) -0xFEA0, 0xFEA0, 0xFF20, 0x9C22, 0x0000, 0x0000, 0x3981, 0xDE01, 0xFF21, 0xFEC0, 0xFEE1, 0x49E1, 0x0000, 0x0840, 0xE602, 0xFEC0, // 0x07F0 (2032) -0xFF20, 0xEE81, 0x5A61, 0x0000, 0x0000, 0xBCE1, 0xFF00, 0xFEA0, 0xFEC0, 0xFEA0, 0xFF00, 0xC521, 0x0000, 0x0000, 0x0000, 0x1082, // 0x0800 (2048) -0x52AA, 0x0000, 0x0000, 0x0000, 0x0000, 0xBD02, 0xFF00, 0xFEA0, 0xFEA0, 0xFEA0, 0xFF20, 0x6AC1, 0x0000, 0x49E1, 0xFEE2, 0xFEE0, // 0x0810 (2064) -0xFE80, 0xFEC0, 0xF682, 0x20E1, 0x0000, 0x39A0, 0xFEE0, 0xFEA0, 0xFE80, 0xFEE0, 0xF6A2, 0x41A1, 0x3961, 0xDDC1, 0xFF00, 0xFE80, // 0x0820 (2080) -0xFEA0, 0xFEA0, 0xFF00, 0xE601, 0x41C1, 0x3981, 0xF682, 0xFF00, 0xFE80, 0xFEA0, 0xFF00, 0x41C1, 0x0000, 0x20C1, 0xF661, 0xFEC0, // 0x0830 (2096) -0xF6A0, 0xFEC0, 0xFF01, 0x6261, 0x0000, 0x5A41, 0xFF01, 0xFEA0, 0xFEC0, 0xFEA0, 0xFF00, 0xBD02, 0x0000, 0x0000, 0x0000, 0x1082, // 0x0840 (2112) -0x738E, 0x0841, 0x0000, 0x0000, 0x0000, 0xACA2, 0xFF20, 0xFEA0, 0xFEA0, 0xFEC0, 0xF681, 0x18A0, 0x1080, 0xEE41, 0xFEE0, 0xFEA0, // 0x0850 (2128) -0xFEC0, 0xFEA0, 0xFEE1, 0x3980, 0x0000, 0x20C0, 0xF662, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEE0, 0xF681, 0xFEE1, 0xFF01, 0xDDC1, 0xFF21, // 0x0860 (2144) -0xFF20, 0xFF21, 0xDDC1, 0xFEC1, 0xFF01, 0xF661, 0xFEE0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEA1, 0x2900, 0x0000, 0x3140, 0xFEA1, 0xFEA0, // 0x0870 (2160) -0xFEA0, 0xFEA0, 0xFEC0, 0xF6A1, 0x2101, 0x0840, 0xEE41, 0xFEE0, 0xFEA0, 0xFEA0, 0xFF20, 0xAC82, 0x0000, 0x0000, 0x0000, 0x10A2, // 0x0880 (2176) -0x9492, 0x0861, 0x0000, 0x0000, 0x0000, 0x9C02, 0xFF20, 0xFEA0, 0xFEA0, 0xFF00, 0xD582, 0x0000, 0x93C1, 0xFF40, 0xFE80, 0xFEC0, // 0x0890 (2192) -0xFEC0, 0xFEA0, 0xFF21, 0x6AC1, 0x0000, 0x0000, 0xCD41, 0xFF00, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEE0, 0xDDE1, 0x41A1, 0x0860, 0x6AC1, // 0x08A0 (2208) -0x93E1, 0x6AE1, 0x0841, 0x3161, 0xD5C1, 0xFEE0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFF00, 0xCD61, 0x0000, 0x0000, 0x5A81, 0xFF21, 0xFEA0, // 0x08B0 (2224) -0xFEC0, 0xFEC0, 0xFEA0, 0xFF20, 0xAC81, 0x0000, 0xC521, 0xFF00, 0xFEA0, 0xFEA0, 0xFF20, 0x9C02, 0x0000, 0x0020, 0x0000, 0x2104, // 0x08C0 (2240) -0xB5B6, 0x10A2, 0x0000, 0x0020, 0x0000, 0x7B41, 0xFF20, 0xFEA0, 0xFEA0, 0xFF20, 0xAC80, 0x0820, 0xEE41, 0xFEC0, 0xFEA0, 0xFEC0, // 0x08D0 (2256) -0xFEC0, 0xFEA0, 0xFF00, 0xAC81, 0x0000, 0x0000, 0x7301, 0xFF20, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEE0, 0xD5C1, 0x0000, 0x0000, 0x0000, // 0x08E0 (2272) -0x0000, 0x0000, 0x0000, 0x0000, 0xD561, 0xFEE0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFF41, 0x7B42, 0x0000, 0x0000, 0xA442, 0xFF21, 0xFEA0, // 0x08F0 (2288) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA1, 0x1080, 0x9C00, 0xFF40, 0xFEA0, 0xFEA0, 0xFF20, 0x7B41, 0x0000, 0x0020, 0x0000, 0x2124, // 0x0900 (2304) -0xDEFB, 0x2104, 0x0000, 0x0020, 0x0000, 0x5221, 0xFF01, 0xFEA0, 0xFEA0, 0xFF40, 0x93C0, 0x3961, 0xFF21, 0xFEA0, 0xFEC0, 0xFEC0, // 0x0910 (2320) -0xFEC0, 0xFEA0, 0xFEC0, 0xEE61, 0x1881, 0x0000, 0x1080, 0xEE21, 0xFEE0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFF01, 0x41C1, 0x0000, 0x0020, // 0x0920 (2336) -0x0000, 0x0020, 0x0000, 0x3961, 0xFEE1, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEC0, 0xEE61, 0x18A1, 0x0000, 0x1060, 0xE621, 0xFEC0, 0xFEA0, // 0x0930 (2352) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF21, 0x4A01, 0x8361, 0xFF40, 0xFEA0, 0xFEA0, 0xFF01, 0x5221, 0x0000, 0x0020, 0x0000, 0x4208, // 0x0940 (2368) -0xFFDF, 0x4208, 0x0000, 0x0000, 0x0000, 0x2901, 0xFEA1, 0xFEC0, 0xFEA0, 0xFF40, 0x93C0, 0x5A60, 0xFF41, 0xFEA0, 0xFEC0, 0xFEC0, // 0x0950 (2384) -0xFEA0, 0xFEC0, 0xFEA0, 0xFF21, 0x7B41, 0x0000, 0x0000, 0x6281, 0xFF21, 0xFEA0, 0xFEA0, 0xFEA0, 0xFF21, 0x62A1, 0x0000, 0x0000, // 0x0960 (2400) -0x0000, 0x0000, 0x0000, 0x5A41, 0xFF01, 0xFEA0, 0xFEA0, 0xF680, 0xFF41, 0x6AC1, 0x0000, 0x0000, 0x7301, 0xFF21, 0xFEA0, 0xFEA0, // 0x0970 (2416) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF40, 0x6AE1, 0x8361, 0xFF40, 0xFEA0, 0xFEC0, 0xFEA1, 0x2901, 0x0000, 0x0020, 0x0000, 0x630C, // 0x0980 (2432) -0xFFFF, 0x6B6D, 0x0000, 0x0020, 0x0000, 0x0020, 0xD5A1, 0xFF00, 0xFEA0, 0xFF20, 0xA461, 0x6AC0, 0xFF40, 0xFEA0, 0xFEC0, 0xFEC0, // 0x0990 (2448) -0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xEE61, 0x18C0, 0x0000, 0x0000, 0x93E2, 0xFF41, 0xFEA0, 0xFE80, 0xFF20, 0x6AE1, 0x0000, 0x0000, // 0x09A0 (2464) -0x0000, 0x0000, 0x0000, 0x62A1, 0xFF21, 0xFE80, 0xFEA0, 0xFF40, 0x9C22, 0x0000, 0x0000, 0x1881, 0xE641, 0xFEC0, 0xFEC0, 0xFEC0, // 0x09B0 (2480) -0xFEA0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF40, 0x7B61, 0x9C00, 0xFF40, 0xFE80, 0xFF00, 0xD581, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C51, // 0x09C0 (2496) -0xFFFF, 0xA534, 0x0000, 0x0000, 0x0000, 0x0000, 0x93E1, 0xFF20, 0xFE80, 0xFF00, 0xC541, 0x72E1, 0xFF20, 0xFEA0, 0xFEC0, 0xFEC0, // 0x09D0 (2512) -0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFF00, 0xB4C1, 0x0000, 0x0020, 0x0000, 0x93E1, 0xFF21, 0xFEC0, 0xFF01, 0x5A81, 0x0000, 0x0000, // 0x09E0 (2528) -0x0000, 0x0000, 0x0000, 0x5222, 0xFF01, 0xFEC0, 0xFF21, 0x9C01, 0x0000, 0x0020, 0x0000, 0xAC81, 0xFF01, 0xFEA0, 0xFEA0, 0xFEC0, // 0x09F0 (2544) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF20, 0x7B40, 0xBD01, 0xFF20, 0xF680, 0xFF20, 0x93C1, 0x0000, 0x0020, 0x0000, 0x0000, 0xBDF7, // 0x0A00 (2560) -0xFFFF, 0xDEDB, 0x1082, 0x0000, 0x0000, 0x0000, 0x41C1, 0xFF01, 0xFEA0, 0xFEC0, 0xF660, 0x6AC2, 0xF6A1, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0A10 (2576) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF21, 0x8BA1, 0x0000, 0x0000, 0x0000, 0x6281, 0xDE21, 0xFF01, 0x3161, 0x0000, 0x0000, // 0x0A20 (2592) -0x0000, 0x0000, 0x0000, 0x2921, 0xFEE1, 0xE641, 0x62A1, 0x0000, 0x0000, 0x0000, 0x8381, 0xFF21, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0A30 (2608) -0xFEC0, 0xFEC0, 0xFEA0, 0xFEC0, 0xFEC1, 0x6AC2, 0xE621, 0xFEE0, 0xFEA0, 0xFF01, 0x41C1, 0x0000, 0x0020, 0x0000, 0x2124, 0xEF5D, // 0x0A40 (2624) -0xFFFF, 0xFFFF, 0x4A49, 0x0000, 0x0000, 0x0000, 0x0020, 0xD5A1, 0xFEE0, 0xFEA0, 0xFEC0, 0xCD41, 0xF660, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0A50 (2640) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFF21, 0x8BC1, 0x0000, 0x0000, 0x0000, 0x1060, 0xA442, 0x0860, 0x0000, 0x0000, // 0x0A60 (2656) -0x0000, 0x0000, 0x0000, 0x0820, 0xA442, 0x18A0, 0x0000, 0x0000, 0x0000, 0x8381, 0xFF21, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0A70 (2672) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFE80, 0xCD62, 0xFEC0, 0xFEA1, 0xFEE0, 0xD5A1, 0x0020, 0x0000, 0x0000, 0x0000, 0x630C, 0xFFFF, // 0x0A80 (2688) -0xFFDF, 0xFFFF, 0x94B2, 0x0000, 0x0000, 0x0000, 0x0000, 0x7321, 0xFF21, 0xFEA0, 0xFEA0, 0xFEE0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEC0, // 0x0A90 (2704) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFF21, 0xB4C1, 0x20E1, 0x0000, 0x3161, 0x62A2, 0x0000, 0x0000, 0x0000, // 0x0AA0 (2720) -0x0000, 0x0000, 0x0000, 0x0000, 0x5A82, 0x39A1, 0x0000, 0x20C1, 0xAC82, 0xFF21, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0AB0 (2736) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEC0, 0xFEE0, 0xFEA0, 0xFEA0, 0xFF21, 0x7321, 0x0000, 0x0000, 0x0000, 0x0000, 0xB596, 0xFFFF, // 0x0AC0 (2752) -0xFFDF, 0xFFFF, 0xE73C, 0x18C3, 0x0000, 0x0000, 0x0000, 0x1080, 0xEE41, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA1, 0xFF00, 0xFEE0, 0xFEA0, // 0x0AD0 (2768) -0xFEC0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFF00, 0xEE41, 0x83C1, 0x8BA3, 0x1081, 0x0000, 0x0000, 0x0000, // 0x0AE0 (2784) -0x0000, 0x0000, 0x0000, 0x0000, 0x1060, 0x8383, 0x83A1, 0xEE41, 0xFF00, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, // 0x0AF0 (2800) -0xFEC0, 0xFEA0, 0xFEC0, 0xFF00, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xEE21, 0x1080, 0x0000, 0x0000, 0x0000, 0x2945, 0xEF7D, 0xFFFF, // 0x0B00 (2816) -0xFFFF, 0xFFFF, 0xFFFF, 0x6B4D, 0x0000, 0x0000, 0x0000, 0x0000, 0x7B41, 0xFF21, 0xFEA0, 0xFEA0, 0xFF00, 0xB482, 0xD5C1, 0xFF20, // 0x0B10 (2832) -0xFE80, 0xFEA0, 0xFEA0, 0xFEA1, 0xFEA0, 0xFEC0, 0xFEA1, 0xFEA0, 0xF680, 0xFF20, 0xF6A2, 0x3121, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0B20 (2848) -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x20E1, 0xEE62, 0xFF40, 0xF680, 0xFEA0, 0xFEA1, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, // 0x0B30 (2864) -0xF681, 0xFF20, 0xE601, 0xAC62, 0xFF00, 0xFEA0, 0xFE80, 0xFF21, 0x7B41, 0x0000, 0x0000, 0x0000, 0x0000, 0x8410, 0xFFFF, 0xFFFF, // 0x0B40 (2880) -0xFFFF, 0xFFDF, 0xFFFF, 0xD69A, 0x0841, 0x0000, 0x0000, 0x0000, 0x0840, 0xDDC1, 0xFEE0, 0xFEA0, 0xFEE1, 0xD5A1, 0x5221, 0xBD21, // 0x0B50 (2896) -0xFF41, 0xFF00, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA1, 0xFEC0, 0xFF00, 0xFF21, 0xCD61, 0x20E1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, // 0x0B60 (2912) -0x7322, 0x0840, 0x0000, 0x0000, 0x0000, 0x0000, 0x18A1, 0xBD22, 0xFF21, 0xFF00, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEE0, // 0x0B70 (2928) -0xFF40, 0xC561, 0x5221, 0xCD81, 0xFEE0, 0xFE81, 0xFEE0, 0xDDC1, 0x0840, 0x0000, 0x0000, 0x0000, 0x18E3, 0xE71C, 0xFFFF, 0xFFFF, // 0x0B80 (2944) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x632C, 0x0000, 0x0000, 0x0000, 0x0000, 0x49E1, 0xFF01, 0xFEA0, 0xFEA0, 0xFF00, 0xDE01, 0x4181, // 0x0B90 (2960) -0x5A81, 0xD581, 0xFEE1, 0xFF20, 0xFF20, 0xFF01, 0xFEC1, 0xD582, 0x6AE1, 0x0020, 0x0000, 0x0020, 0x0000, 0x0000, 0x1060, 0xACA2, // 0x0BA0 (2976) -0xFF61, 0xBD21, 0x18A1, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, 0x62A2, 0xCD62, 0xFEA1, 0xFF01, 0xFF20, 0xFF20, 0xFEE1, 0xD5C1, // 0x0BB0 (2992) -0x62C1, 0x3981, 0xD5C1, 0xFF21, 0xFEA0, 0xFEA0, 0xFF01, 0x49E1, 0x0000, 0x0000, 0x0000, 0x0000, 0x7BEF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0BC0 (3008) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEDB, 0x1082, 0x0000, 0x0000, 0x0000, 0x0000, 0x93E2, 0xFF40, 0xFE80, 0xFE80, 0xFEE0, 0xFEC1, // 0x0BD0 (3024) -0x6B01, 0x1061, 0x18C1, 0x4A00, 0x5AA0, 0x5240, 0x3141, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4A01, 0xDDC1, 0xFF20, // 0x0BE0 (3040) -0xFE80, 0xFF00, 0xE602, 0x5A41, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2921, 0x5220, 0x5AA0, 0x4A00, 0x20E1, 0x1060, // 0x0BF0 (3056) -0x6AE1, 0xF6A1, 0xFEE0, 0xFEA1, 0xFEA0, 0xFF41, 0x93E1, 0x0000, 0x0000, 0x0000, 0x0000, 0x2124, 0xE71C, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0C00 (3072) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x8C71, 0x0000, 0x0000, 0x0000, 0x0000, 0x0820, 0xCD61, 0xFF00, 0xFEA0, 0xFEA0, 0xFEC0, // 0x0C10 (3088) -0xFF41, 0xDDE1, 0x6B01, 0x18C1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18A0, 0x5A61, 0xBCE2, 0xFF01, 0xFEE0, 0xFEA0, // 0x0C20 (3104) -0xFEC0, 0xFEA0, 0xFEE0, 0xFF01, 0xC541, 0x6281, 0x20C1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18C1, 0x6AE1, 0xDDC1, // 0x0C30 (3120) -0xFF41, 0xFEC0, 0xFEA0, 0xFEA0, 0xFF01, 0xC541, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0xA514, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0C40 (3136) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0x4208, 0x0000, 0x0000, 0x0000, 0x0000, 0x18A1, 0xDE01, 0xFF00, 0xFE80, 0xFEC0, // 0x0C50 (3152) -0xFEA0, 0xFEE0, 0xFF20, 0xFEC1, 0xD5A2, 0xAC82, 0x9401, 0x93E1, 0x9C42, 0xC522, 0xEE41, 0xFF01, 0xFF00, 0xFEA0, 0xFEA0, 0xFEC0, // 0x0C60 (3168) -0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFF00, 0xFF21, 0xF661, 0xC542, 0xA462, 0x93E1, 0x9C01, 0xB4A2, 0xD5A1, 0xFEC1, 0xFF20, 0xFEE0, // 0x0C70 (3184) -0xFEA0, 0xFEC0, 0xFE80, 0xFF00, 0xDE01, 0x18A1, 0x0000, 0x0000, 0x0000, 0x0000, 0x52AA, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0C80 (3200) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xD6BA, 0x10A2, 0x0000, 0x0000, 0x0000, 0x0000, 0x2921, 0xE641, 0xFF00, 0xFE80, // 0x0C90 (3216) -0xFEC0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFF00, 0xFF20, 0xFF20, 0xFF20, 0xFF20, 0xFF00, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0CA0 (3232) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFF00, 0xFF20, 0xFF20, 0xFF20, 0xFF20, 0xFF00, 0xFEC0, 0xFEA0, 0xFEA0, // 0x0CB0 (3248) -0xFEA0, 0xFE80, 0xFF00, 0xE641, 0x2901, 0x0000, 0x0000, 0x0000, 0x0000, 0x2124, 0xE71C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0CC0 (3264) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xAD55, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2901, 0xDE01, 0xFF00, // 0x0CD0 (3280) -0xFE80, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0CE0 (3296) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEA0, // 0x0CF0 (3312) -0xFE80, 0xFF00, 0xDE01, 0x2900, 0x0000, 0x0000, 0x0000, 0x0000, 0x0861, 0xBDD7, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0D00 (3328) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x8430, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18A1, 0xC561, // 0x0D10 (3344) -0xFF21, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0D20 (3360) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, // 0x0D30 (3376) -0xFF41, 0xC561, 0x18A1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9CD3, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0D40 (3392) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x73AE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0820, // 0x0D50 (3408) -0x9402, 0xFF01, 0xFEE0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0D60 (3424) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEE0, 0xFF01, // 0x0D70 (3440) -0x9402, 0x0820, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C51, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0D80 (3456) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x73AE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0D90 (3472) -0x0000, 0x4A01, 0xDDC1, 0xFF41, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0DA0 (3488) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFF21, 0xD5C1, 0x4A01, // 0x0DB0 (3504) -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C51, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0DC0 (3520) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x8430, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0DD0 (3536) -0x0000, 0x0000, 0x0840, 0x7B61, 0xE641, 0xFF21, 0xFEE0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0DE0 (3552) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEE0, 0xFF21, 0xE621, 0x7B42, 0x0840, 0x0000, // 0x0DF0 (3568) -0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0x9492, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0E00 (3584) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xAD55, 0x10A2, 0x0000, 0x0000, // 0x0E10 (3600) -0x0000, 0x0000, 0x0000, 0x0000, 0x1880, 0x7B21, 0xD5A1, 0xFF01, 0xFF20, 0xFF00, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, // 0x0E20 (3616) -0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFF00, 0xFF20, 0xFF01, 0xD5A1, 0x7321, 0x1880, 0x0000, 0x0000, 0x0000, // 0x0E30 (3632) -0x0000, 0x0000, 0x0000, 0x18E3, 0xAD75, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0E40 (3648) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xD69A, 0x4228, 0x0000, // 0x0E50 (3664) -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x41C1, 0x93E1, 0xD5A1, 0xFEA1, 0xFF01, 0xFF20, 0xFF20, 0xFF20, 0xFF00, // 0x0E60 (3680) -0xFF00, 0xFF00, 0xFF20, 0xFF20, 0xFF20, 0xFF01, 0xFEA1, 0xD5A1, 0x93E1, 0x41C1, 0x0020, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, // 0x0E70 (3696) -0x0000, 0x0000, 0x528A, 0xD6BA, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0E80 (3712) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFDF, 0x8C71, // 0x0E90 (3728) -0x10A2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2901, 0x5221, 0x7B41, 0x9402, 0xAC82, 0xBCE2, // 0x0EA0 (3744) -0xC521, 0xBCE2, 0xAC82, 0x9401, 0x7B41, 0x5221, 0x2901, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0EB0 (3760) -0x18E3, 0x94B2, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0EC0 (3776) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0ED0 (3792) -0xD6BA, 0x632C, 0x0841, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0EE0 (3808) -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x10A2, 0x738E, // 0x0EF0 (3824) -0xDEFB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F00 (3840) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F10 (3856) -0xFFFF, 0xFFFF, 0xCE79, 0x6B4D, 0x18C3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0000, 0x0000, // 0x0F20 (3872) -0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2104, 0x738E, 0xD69A, 0xFFFF, // 0x0F30 (3888) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F40 (3904) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F50 (3920) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE71C, 0x94B2, 0x4A49, 0x1082, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0F60 (3936) -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18C3, 0x4A69, 0x9CD3, 0xE73C, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F70 (3952) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F80 (3968) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F90 (3984) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEDB, 0xA534, 0x6B6D, 0x4208, 0x2104, 0x18C3, 0x0861, 0x0841, 0x0000, // 0x0FA0 (4000) -0x0000, 0x0000, 0x0841, 0x0861, 0x18C3, 0x2124, 0x4228, 0x6B6D, 0xA534, 0xDEDB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0FB0 (4016) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0FC0 (4032) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0FD0 (4048) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEDB, 0xB5B6, 0x9492, 0x6B6D, 0x4A49, // 0x0FE0 (4064) -0x4228, 0x4A49, 0x6B6D, 0x8C51, 0xAD75, 0xDEDB, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0FF0 (4080) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x1000 (4096) -}; diff --git a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Textrotation_Demo/UTFT_Textrotation_Demo.ino b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Textrotation_Demo/UTFT_Textrotation_Demo.ino deleted file mode 100644 index 3e25649..0000000 --- a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_Textrotation_Demo/UTFT_Textrotation_Demo.ino +++ /dev/null @@ -1,52 +0,0 @@ -// UTFT_Textrotation_Demo (C)2014 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of the textrotation-functions. -// -// This demo was made for modules with a screen resolution -// of 320x240 pixels. -// -// This program requires the UTFT library. -// - -#include - -// Declare which fonts we will be using -extern uint8_t BigFont[]; -extern uint8_t SevenSegNumFont[]; - -// Set the pins to the correct ones for your development shield -// ------------------------------------------------------------ -// Standard Arduino Mega/Due shield : ,38,39,40,41 -// CTE TFT LCD/SD Shield for Arduino Due : ,25,26,27,28 -// Teensy 3.x TFT Test Board : ,23,22, 3, 4 -// ElecHouse TFT LCD/SD Shield for Arduino Due : ,22,23,31,33 -// -// Remember to change the model parameter to suit your display module! -UTFT myGLCD(ITDB32S,38,39,40,41); - -void setup() -{ - myGLCD.InitLCD(); - myGLCD.clrScr(); - myGLCD.setFont(BigFont); -} - -void loop() -{ - myGLCD.print("Text rotation", 0, 0); - myGLCD.setColor(0, 0, 255); - myGLCD.print("0 degrees", 0, 16, 0); - myGLCD.print("90 degrees", 319, 0, 90); - myGLCD.print("180 degrees", 319, 239, 180); - myGLCD.print("270 degrees", 0, 239, 270); - - myGLCD.setFont(SevenSegNumFont); - myGLCD.setColor(0, 255, 0); - myGLCD.print("45", 90, 100, 45); - myGLCD.print("90", 200, 50, 90); - myGLCD.print("180", 300, 200, 180); - - while (true) {}; -} - diff --git a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_ViewFont/UTFT_ViewFont.ino b/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_ViewFont/UTFT_ViewFont.ino deleted file mode 100644 index 7a99d20..0000000 --- a/libraries/UTFT/examples/Arduino (ARM) + Teensy/UTFT_ViewFont/UTFT_ViewFont.ino +++ /dev/null @@ -1,59 +0,0 @@ -// UTFT_ViewFont (C)2014 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of the included fonts. -// -// This demo was made for modules with a screen resolution -// of 320x240 pixels. -// -// This program requires the UTFT library. -// - -#include - -// Declare which fonts we will be using -extern uint8_t SmallFont[]; -extern uint8_t BigFont[]; -extern uint8_t SevenSegNumFont[]; - -// Set the pins to the correct ones for your development shield -// ------------------------------------------------------------ -// Standard Arduino Mega/Due shield : ,38,39,40,41 -// CTE TFT LCD/SD Shield for Arduino Due : ,25,26,27,28 -// Teensy 3.x TFT Test Board : ,23,22, 3, 4 -// ElecHouse TFT LCD/SD Shield for Arduino Due : ,22,23,31,33 -// -// Remember to change the model parameter to suit your display module! -UTFT myGLCD(ITDB32S,38,39,40,41); - -void setup() -{ - myGLCD.InitLCD(); - - myGLCD.clrScr(); -} - -void loop() -{ - myGLCD.setColor(0, 255, 0); - myGLCD.setBackColor(0, 0, 0); - - myGLCD.setFont(BigFont); - myGLCD.print(" !\"#$%&'()*+,-./", CENTER, 0); - myGLCD.print("0123456789:;<=>?", CENTER, 16); - myGLCD.print("@ABCDEFGHIJKLMNO", CENTER, 32); - myGLCD.print("PQRSTUVWXYZ[\\]^_", CENTER, 48); - myGLCD.print("`abcdefghijklmno", CENTER, 64); - myGLCD.print("pqrstuvwxyz{|}~ ", CENTER, 80); - - myGLCD.setFont(SmallFont); - myGLCD.print(" !\"#$%&'()*+,-./0123456789:;<=>?", CENTER, 120); - myGLCD.print("@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_", CENTER, 132); - myGLCD.print("`abcdefghijklmnopqrstuvwxyz{|}~ ", CENTER, 144); - - myGLCD.setFont(SevenSegNumFont); - myGLCD.print("0123456789", CENTER, 190); - - while(1) {}; -} - diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap/UTFT_Bitmap.ino b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap/UTFT_Bitmap.ino deleted file mode 100644 index 3eefe88..0000000 --- a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap/UTFT_Bitmap.ino +++ /dev/null @@ -1,71 +0,0 @@ -// UTFT_Bitmap (C)2014 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of the drawBitmap()-function. -// -// This demo was made to work on the 320x240 modules. -// Any other size displays may cause strange behaviour. -// -// This program requires the UTFT library. -// - -#include -#include - -// Declare which fonts we will be using -extern uint8_t SmallFont[]; - -// Set the pins to the correct ones for your development shield -// ------------------------------------------------------------ -// Arduino Uno / 2009: -// ------------------- -// Standard Arduino Uno/2009 shield : ,A5,A4,A3,A2 -// DisplayModule Arduino Uno TFT shield : ,A5,A4,A3,A2 -// -// Arduino Mega: -// ------------------- -// Standard Arduino Mega/Due shield : ,38,39,40,41 -// CTE TFT LCD/SD Shield for Arduino Mega : ,38,39,40,41 -// -// Remember to change the model parameter to suit your display module! -UTFT myGLCD(ITDB32S,38,39,40,41); - -extern unsigned int info[0x400]; -extern unsigned int icon[0x400]; -extern unsigned int tux[0x400]; - -void setup() -{ - myGLCD.InitLCD(); - myGLCD.setFont(SmallFont); -} - -void loop() -{ - myGLCD.fillScr(255, 255, 255); - myGLCD.setColor(255, 255, 255); - myGLCD.print(" *** A 10 by 7 grid of a 32x32 icon *** ", CENTER, 228); - for (int x=0; x<10; x++) - for (int y=0; y<7; y++) - myGLCD.drawBitmap (x*32, y*32, 32, 32, info); - - delay(5000); - - myGLCD.fillScr(255, 255, 255); - myGLCD.setColor(255, 255, 255); - myGLCD.print(" Two different icons in scale 1 to 4 ", CENTER, 228); - int x=0; - for (int s=0; s<4; s++) - { - x+=(s*32); - myGLCD.drawBitmap (x, 0, 32, 32, tux, s+1); - } - x=0; - for (int s=4; s>0; s--) - { - myGLCD.drawBitmap (x, 224-(s*32), 32, 32, icon, s); - x+=(s*32); - } - - delay(5000); -} diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap/icon.c b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap/icon.c deleted file mode 100644 index 374dd09..0000000 --- a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap/icon.c +++ /dev/null @@ -1,73 +0,0 @@ -// Generated by : ImageConverter 565 v1.0 -// Generated from: taskmgr.png -// Time generated: 11.10.2010 22:51:23 -// Size : 2 048 Bytes - -#include - -const unsigned short icon[0x400] PROGMEM ={ -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF7D, 0xCE79, 0xBDD7, 0xAD75, // 0x0010 (16) -0xAD55, 0xAD75, 0xBDF7, 0xD6BA, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0020 (32) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xC638, 0x9492, 0x8C51, 0x9492, 0xA514, 0xA534, // 0x0030 (48) -0xA534, 0xA534, 0x9CF3, 0x8C71, 0x8430, 0x9CD3, 0xD69A, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0040 (64) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xCE59, 0x8410, 0x9492, 0xB5B6, 0xC618, 0xBDD7, 0xAD75, 0xA514, // 0x0050 (80) -0xA514, 0xA4F4, 0xAD55, 0xB5B6, 0xBDD7, 0xAD55, 0x8430, 0x8C71, 0xDEFB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0060 (96) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0x9CD3, 0x8430, 0xBDF7, 0xC618, 0xAD75, 0x94F2, 0x8CF1, 0x84B0, 0x8CD1, // 0x0070 (112) -0x9612, 0x8CB1, 0x7C6F, 0x7C8F, 0x8490, 0xA533, 0xBDF7, 0xB596, 0x7BEF, 0xB596, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0080 (128) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0x8430, 0x9CF3, 0xCE39, 0xA514, 0x94B2, 0x9E93, 0x94F2, 0x8CD1, 0x8CB1, 0x9D12, // 0x0090 (144) -0x9F74, 0x9D52, 0x8450, 0x7C8F, 0x73AE, 0x740E, 0x73CE, 0x9CD3, 0xC638, 0x8C51, 0x9CD3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00A0 (160) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0x8430, 0xA534, 0xBDF7, 0x8CB1, 0x8C31, 0x9DB3, 0xA735, 0x9D13, 0x8CB1, 0x8C71, 0x9D13, // 0x00B0 (176) -0xB756, 0xA5D4, 0x8C71, 0x8490, 0x8390, 0x7C70, 0x73EE, 0x6B4D, 0x8450, 0xBDF7, 0x8C71, 0x9CF3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00C0 (192) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x94B2, 0x9CF3, 0xBDD7, 0x8490, 0x8CF1, 0x9D72, 0xA694, 0xAE94, 0x9DD3, 0xA593, 0xA553, 0x9592, // 0x00D0 (208) -0x9672, 0x75CE, 0x5BAA, 0x64EB, 0x5D8C, 0x5BCA, 0x4B69, 0x634C, 0x748D, 0x7C4F, 0xBE18, 0x8430, 0xB5B6, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00E0 (224) -0xFFFF, 0xFFFF, 0xFFFF, 0xC618, 0x8410, 0xBDF7, 0x8410, 0x83F0, 0x94F2, 0x9613, 0x9D13, 0xAE55, 0x9D12, 0x750E, 0x55CB, 0x4BC8, // 0x00F0 (240) -0x4447, 0x3BC6, 0x4B67, 0x44E8, 0x3CE8, 0x3325, 0x20E2, 0x2B45, 0x43E7, 0x3946, 0x732D, 0xC5F8, 0x7BCF, 0xE71C, 0xFFFF, 0xFFFF, // 0x0100 (256) -0xFFFF, 0xFFFF, 0xF7BE, 0x7BEF, 0xBDB6, 0x9533, 0x8D71, 0x9552, 0x9E73, 0x9DD3, 0x94B2, 0x6D6D, 0x4BA8, 0x44A8, 0x55EA, 0x5D2A, // 0x0110 (272) -0x43E7, 0x4327, 0x46CA, 0x4B87, 0x42C6, 0x4E0A, 0x4D09, 0x4468, 0x4548, 0x3386, 0x2B25, 0x7C6F, 0xAD35, 0x9492, 0xFFFF, 0xFFFF, // 0x0120 (288) -0xFFDF, 0xFFFF, 0xBDD7, 0x8C71, 0xAD75, 0x8CF0, 0x8D71, 0x8D51, 0x9DF3, 0x740E, 0x21C4, 0x33E5, 0x558A, 0x554A, 0x650A, 0x566B, // 0x0130 (304) -0x43E7, 0x21C3, 0x3345, 0x2283, 0x1962, 0x3C87, 0x3386, 0x2163, 0x3345, 0x3346, 0x33A6, 0x32C6, 0x9CB3, 0x7BEF, 0xDEDB, 0xFFFF, // 0x0140 (320) -0xFFFF, 0xFFFF, 0x8430, 0xAD75, 0x8C31, 0x7C0F, 0x7BCF, 0x83F0, 0x636B, 0x0000, 0x0000, 0x4387, 0x462A, 0x4B27, 0x4B88, 0x4E8B, // 0x0150 (336) -0x42E6, 0x0000, 0x0020, 0x0100, 0x0000, 0x1121, 0x0040, 0x0000, 0x0941, 0x0000, 0x0020, 0x00E0, 0x5AAB, 0x94B2, 0x9CD3, 0xFFFF, // 0x0160 (352) -0xFFFF, 0xE71C, 0x8410, 0xB596, 0x7BEF, 0x7C6F, 0x84B0, 0x5B6B, 0x09E1, 0x0901, 0x1161, 0x3C06, 0x3D89, 0x32C5, 0x43E7, 0x470B, // 0x0170 (368) -0x4BC7, 0x0961, 0x11E2, 0x1282, 0x0961, 0x1262, 0x09E2, 0x0961, 0x12A2, 0x0961, 0x09C2, 0x0A01, 0x29E5, 0xA514, 0x7BEF, 0xFFDF, // 0x0180 (384) -0xFFFF, 0xBDD7, 0x9472, 0xA514, 0x6B4D, 0x7C6F, 0x634C, 0x0040, 0x0981, 0x0060, 0x00E0, 0x11E2, 0x10A1, 0x09C1, 0x19E3, 0x2B25, // 0x0190 (400) -0x22A3, 0x0060, 0x0120, 0x09E1, 0x0060, 0x09E1, 0x0120, 0x0060, 0x0A21, 0x0060, 0x0100, 0x01A0, 0x0040, 0x9CD3, 0x7BEF, 0xDEDB, // 0x01A0 (416) -0xFFFF, 0xA514, 0x9CF3, 0xB596, 0x73AE, 0x7C0F, 0x2945, 0x10A2, 0x2184, 0x18C3, 0x1923, 0x2184, 0x18C3, 0x21A4, 0x2964, 0x2905, // 0x01B0 (432) -0x2A25, 0x2104, 0x2965, 0x2A05, 0x2104, 0x2A05, 0x2985, 0x2104, 0x2A25, 0x2104, 0x2164, 0x29C4, 0x3166, 0xB5B6, 0x8410, 0xC618, // 0x01C0 (448) -0xFFFF, 0x9492, 0xA514, 0xDEDB, 0xC618, 0xA514, 0x8C51, 0x94B2, 0x9CB3, 0x9CF3, 0xA514, 0xA534, 0xAD75, 0xAD75, 0xB596, 0xB5D6, // 0x01D0 (464) -0xBDB7, 0xBDF7, 0xBDF7, 0xBDF7, 0xC618, 0xC5F8, 0xC5F8, 0xBDF7, 0xBDD7, 0xBDD7, 0xB5B6, 0xB596, 0xC638, 0xDEFB, 0x8430, 0xB596, // 0x01E0 (480) -0xFFFF, 0x8C51, 0x9CF3, 0xE73C, 0xDEFB, 0xD69A, 0xD6BA, 0xD6BA, 0xDEDB, 0xDEDB, 0xDEFB, 0xDF1B, 0xE71C, 0xE73C, 0xE73C, 0xE73C, // 0x01F0 (496) -0xEF5D, 0xEF5D, 0xEF5D, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xDEFB, 0xE71C, 0x8C51, 0xAD75, // 0x0200 (512) -0xFFFF, 0x8C71, 0x9CD3, 0xDEFB, 0xAD75, 0x9492, 0x9CD3, 0xA4F3, 0xA514, 0xAD55, 0xAD75, 0xB596, 0xBDB6, 0xBDD7, 0xC5F7, 0xC618, // 0x0210 (528) -0xC638, 0xCE59, 0xCE59, 0xCE79, 0xD679, 0xD679, 0xCE79, 0xCE59, 0xCE59, 0xC638, 0xC618, 0xBDF7, 0xCE79, 0xE71C, 0x8C51, 0xB596, // 0x0220 (544) -0xFFFF, 0x9CD3, 0x9492, 0xAD55, 0x2965, 0x2104, 0x2124, 0x2145, 0x1945, 0x2165, 0x2165, 0x2186, 0x2186, 0x29A6, 0x29A6, 0x31C7, // 0x0230 (560) -0x39C7, 0x31E7, 0x31E7, 0x31E7, 0x3208, 0x3208, 0x31E7, 0x31E7, 0x29E7, 0x31C7, 0x39C7, 0x31A6, 0x4A49, 0xBDF7, 0x8C51, 0xBDF7, // 0x0240 (576) -0xFFFF, 0xB5B6, 0x8430, 0x7BEF, 0x0000, 0x0000, 0x0000, 0x2000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3800, 0x2000, // 0x0250 (592) -0x0000, 0x3000, 0x3800, 0x3000, 0x3800, 0x3800, 0x3800, 0x3000, 0x3800, 0x0800, 0x0000, 0x0000, 0x0000, 0xA514, 0x8430, 0xD6BA, // 0x0260 (608) -0xFFFF, 0xDEDB, 0x7BCF, 0x8430, 0x0020, 0x0000, 0x0000, 0x8000, 0xC800, 0xC000, 0xC800, 0xC820, 0xC820, 0xC820, 0xD020, 0x9800, // 0x0270 (624) -0x0000, 0xB820, 0xD020, 0xD020, 0xD020, 0xD020, 0xD020, 0xC820, 0xD020, 0x4800, 0x0000, 0x0000, 0x2144, 0xAD75, 0x8410, 0xF7BE, // 0x0280 (640) -0xFFFF, 0xFFFF, 0x7BEF, 0x8C71, 0x2945, 0x0000, 0x0000, 0x6800, 0xA800, 0xA800, 0xA800, 0xA800, 0xA800, 0xA800, 0xB000, 0x8000, // 0x0290 (656) -0x0000, 0x9800, 0xB000, 0xB000, 0xB000, 0xB000, 0xB000, 0xB000, 0xB000, 0x4000, 0x0000, 0x0000, 0x632C, 0xA534, 0x94B2, 0xFFFF, // 0x02A0 (672) -0xFFDF, 0xFFFF, 0xAD75, 0x73AE, 0x632C, 0x0000, 0x0000, 0x6920, 0xA9E0, 0xA1C0, 0xA9E0, 0xA9E0, 0xA9E0, 0xA9E0, 0xA9E0, 0x7960, // 0x02B0 (688) -0x0000, 0x99C0, 0xB200, 0xA9E0, 0xB200, 0xB200, 0xB1E0, 0xA9E0, 0xB200, 0x40C0, 0x0000, 0x1082, 0xAD75, 0x8410, 0xD69A, 0xFFFF, // 0x02C0 (704) -0xFFFF, 0xFFFF, 0xF79E, 0x630C, 0x8C51, 0x2965, 0x0000, 0x7400, 0xB620, 0xAE00, 0xB620, 0xB640, 0xB640, 0xB620, 0xB660, 0x84A0, // 0x02D0 (720) -0x0000, 0xA5A0, 0xBE60, 0xB660, 0xBE60, 0xBE60, 0xB660, 0xB640, 0xBE80, 0x4260, 0x0000, 0x6B6D, 0xAD75, 0x8430, 0xFFFF, 0xFFFF, // 0x02E0 (736) -0xFFFF, 0xFFDF, 0xFFFF, 0xB5B6, 0x632C, 0x8410, 0x0021, 0x7360, 0xBD40, 0xB520, 0xBD40, 0xBD60, 0xBD60, 0xBD40, 0xC580, 0x8C00, // 0x02F0 (752) -0x0000, 0xACE0, 0xC580, 0xC580, 0xC580, 0xC580, 0xC580, 0xBD60, 0xC5A0, 0x39C0, 0x2126, 0xBDF7, 0x73AE, 0xD6BA, 0xFFFF, 0xFFFF, // 0x0300 (768) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x7BEF, 0x7BEF, 0x630D, 0x4AE1, 0x6D21, 0x6D01, 0x6D21, 0x6D41, 0x6D41, 0x6D41, 0x6D61, 0x53E1, // 0x0310 (784) -0x0000, 0x64C1, 0x7562, 0x6D62, 0x6D62, 0x6D62, 0x6D62, 0x6D42, 0x6D41, 0x4263, 0xA515, 0x8C51, 0xA534, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0320 (800) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF79E, 0x6B4D, 0x8410, 0x636E, 0x04A6, 0x05E5, 0x05C5, 0x0585, 0x0585, 0x0586, 0x05A6, 0x0424, // 0x0330 (816) -0x0000, 0x0505, 0x05C6, 0x05A6, 0x05A6, 0x05C7, 0x0606, 0x0606, 0x1CE9, 0xA535, 0x9492, 0x8C71, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0340 (832) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF7D, 0x6B4D, 0x83EF, 0x9411, 0x3A47, 0x0403, 0x0584, 0x05A4, 0x0585, 0x0585, 0x0404, // 0x0350 (848) -0x0000, 0x04E5, 0x05A5, 0x05A5, 0x05C5, 0x0584, 0x1405, 0x634B, 0xBD76, 0x8C51, 0x8C51, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0360 (864) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0x8410, 0x6B6D, 0x9CB3, 0x7C6F, 0x3CA9, 0x0BE4, 0x0443, 0x0504, 0x03C2, // 0x0370 (880) -0x0000, 0x0483, 0x0504, 0x0444, 0x1426, 0x552D, 0xA554, 0xB576, 0x73CE, 0x9CF3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0380 (896) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xB5B6, 0x6B4D, 0x7BAF, 0x9432, 0x8BD1, 0x6BCE, 0x4C6B, 0x3C09, // 0x0390 (912) -0x3186, 0x3C8A, 0x5C8C, 0x8430, 0xA493, 0xACD4, 0x8410, 0x7BEF, 0xCE79, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03A0 (928) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0xAD75, 0x7BEF, 0x73AE, 0x83F0, 0x8C11, 0x9431, // 0x03B0 (944) -0x9492, 0x9452, 0x9432, 0x8430, 0x7BEF, 0x8450, 0xBDF7, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03C0 (960) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEFB, 0xBDD7, 0xA534, 0x94D3, // 0x03D0 (976) -0x94B2, 0x9CF3, 0xA554, 0xC618, 0xE73C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03E0 (992) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03F0 (1008) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0400 (1024) -}; diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap/info.c b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap/info.c deleted file mode 100644 index a0a04ee..0000000 --- a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap/info.c +++ /dev/null @@ -1,73 +0,0 @@ -// Generated by : ImageConverter 565 v1.0 -// Generated from: info.png -// Time generated: 11.10.2010 22:27:55 -// Size : 2 048 Bytes - -#include - -const unsigned short info[0x400] PROGMEM ={ -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0010 (16) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0020 (32) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF9F, 0xC69D, 0x95BB, 0x7D1A, 0x6CB9, // 0x0030 (48) -0x6499, 0x74F9, 0x8D7A, 0xB63C, 0xE73E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0040 (64) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xAE1C, 0x4C18, 0x2B56, 0x3397, 0x4C38, 0x64B9, 0x751A, // 0x0050 (80) -0x7D3A, 0x6CD9, 0x5458, 0x3BD7, 0x2B56, 0x3BB7, 0x855A, 0xE77E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0060 (96) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xA5FB, 0x2B56, 0x2B77, 0x751A, 0xB67C, 0xD73E, 0xE75E, 0xE77E, 0xE77E, // 0x0070 (112) -0xE77E, 0xE77E, 0xE75E, 0xDF3E, 0xC6DD, 0x8D9B, 0x43D7, 0x1B16, 0x74D9, 0xF7BF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0080 (128) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF9F, 0x4C18, 0x1AF6, 0x855A, 0xCEFE, 0xD71E, 0xCEFD, 0xC6DD, 0xC6BD, 0xC6BD, 0xBEBD, // 0x0090 (144) -0xC6BD, 0xBEBD, 0xC6BD, 0xC6DD, 0xC6DD, 0xD71E, 0xD71E, 0xA61C, 0x33B7, 0x2316, 0xBE7C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00A0 (160) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDF3E, 0x2336, 0x3BD7, 0xBE9D, 0xC6DD, 0xBE9D, 0xBE9D, 0xBE9D, 0xBEBD, 0xBE9D, 0xCEFD, 0xEF9F, // 0x00B0 (176) -0xEF9F, 0xD73E, 0xBE9D, 0xBEBD, 0xBE9D, 0xBE9D, 0xB69D, 0xC6BD, 0xCEDD, 0x6CFA, 0x0295, 0x9DBB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00C0 (192) -0xFFFF, 0xFFFF, 0xFFFF, 0xE75E, 0x1AF6, 0x4C58, 0xBEBD, 0xB67D, 0xAE5C, 0xB67D, 0xB67D, 0xB69D, 0xB67D, 0xBEBD, 0xF7DF, 0xFFFF, // 0x00D0 (208) -0xFFFF, 0xFFFF, 0xCF1E, 0xB67D, 0xB67D, 0xB67D, 0xB67D, 0xAE5C, 0xAE5C, 0xC6BD, 0x857B, 0x0295, 0xA5DB, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00E0 (224) -0xFFFF, 0xFFFF, 0xFFDF, 0x3BB7, 0x33D8, 0xB67D, 0xA63C, 0xA63C, 0xAE5C, 0xAE5D, 0xAE5D, 0xAE7D, 0xA65D, 0xC6DD, 0xFFFF, 0xFFFF, // 0x00F0 (240) -0xFFDF, 0xFFFF, 0xDF5E, 0xA65D, 0xAE7D, 0xAE5D, 0xAE5D, 0xAE5C, 0xA63C, 0xA61C, 0xB67D, 0x753A, 0x0295, 0xCEBC, 0xFFFF, 0xFFFF, // 0x0100 (256) -0xF7DF, 0xFFFF, 0x957A, 0x12F6, 0x9E1C, 0x9E1C, 0x9E1C, 0x9E1C, 0xA63C, 0xA63C, 0xA63D, 0xA63D, 0xA65D, 0x9DFC, 0xDF3E, 0xFFFF, // 0x0110 (272) -0xFFFF, 0xFFDF, 0xA61C, 0xA65D, 0xA65D, 0xA63D, 0xA63C, 0xA63C, 0x9E1C, 0x9E1C, 0x9DFC, 0xAE3C, 0x3C18, 0x3396, 0xFFDF, 0xFFFF, // 0x0120 (288) -0xFFFF, 0xF79F, 0x2336, 0x64DA, 0x9DFC, 0x95DC, 0x95FC, 0x95FC, 0x9E1C, 0x9E1C, 0x9E3D, 0x9E3D, 0x9E3D, 0x9E3D, 0x7D3B, 0xA63C, // 0x0130 (304) -0xB6BD, 0x8DBB, 0x8DFC, 0xA65D, 0x9E3D, 0x9E3D, 0x9E1C, 0x9E1C, 0x95FC, 0x95FC, 0x95DC, 0x95DC, 0x8DBB, 0x0AF6, 0xA5DA, 0xFFFF, // 0x0140 (320) -0xFFFF, 0xA5FB, 0x1337, 0x8DBB, 0x8DBB, 0x8DBC, 0x8DDC, 0x95FC, 0x95FC, 0x961C, 0x961D, 0x963D, 0x9E3D, 0x963D, 0xA67D, 0xB6BD, // 0x0150 (336) -0xB6BD, 0xAE7D, 0x9E3D, 0x9E3D, 0x961D, 0x961D, 0x961C, 0x95FC, 0x95FC, 0x8DDC, 0x8DDC, 0x859B, 0x95DC, 0x3C18, 0x4BD7, 0xFFFF, // 0x0160 (352) -0xFFFF, 0x6499, 0x33F8, 0x8DBB, 0x859B, 0x85BC, 0x85BC, 0x8DDC, 0x8DFC, 0x8DFD, 0x8E1D, 0x961D, 0x961D, 0x9E3D, 0xF7BF, 0xFFFF, // 0x0170 (368) -0xFFFF, 0xFFFF, 0xA67D, 0x8E1D, 0x961D, 0x8E1D, 0x8DFD, 0x8DFC, 0x8DDC, 0x85BC, 0x85BC, 0x859B, 0x859B, 0x5CDA, 0x2336, 0xE71C, // 0x0180 (384) -0xFFFF, 0x43F8, 0x4C79, 0x859B, 0x7D7B, 0x7D9C, 0x85BC, 0x85DC, 0x85DC, 0x8DFD, 0x8DFD, 0x8E1D, 0x8E1D, 0xA67E, 0xFFFF, 0xFFFF, // 0x0190 (400) -0xFFFF, 0xFFFF, 0xBEDE, 0x85FD, 0x8E1D, 0x8DFD, 0x8DFD, 0x85DC, 0x85DC, 0x85BC, 0x7D9C, 0x7D7B, 0x7D7B, 0x753B, 0x1B36, 0xBE5A, // 0x01A0 (416) -0xFFBE, 0x3BF8, 0x3419, 0x6D1B, 0x757B, 0x7D9C, 0x7D9C, 0x7DBC, 0x7DDD, 0x85FD, 0x85FD, 0x861D, 0x861D, 0x9E7E, 0xFFFF, 0xFFFF, // 0x01B0 (432) -0xFFFF, 0xFFFF, 0xB6DE, 0x85FD, 0x8E1D, 0x85FD, 0x85FD, 0x7DDD, 0x7DBC, 0x7D9C, 0x7D9C, 0x757B, 0x6D3B, 0x4C9A, 0x1337, 0xADD9, // 0x01C0 (448) -0xFFBE, 0x4418, 0x23B9, 0x3439, 0x4CBA, 0x653B, 0x759C, 0x7DBD, 0x7DDD, 0x7DFD, 0x861D, 0x861E, 0x861E, 0x9E7E, 0xFFFF, 0xFFFF, // 0x01D0 (464) -0xFFFF, 0xFFFF, 0xB6DE, 0x7E1E, 0x861E, 0x85FD, 0x7DFD, 0x7DDD, 0x7DBD, 0x759C, 0x653B, 0x4CDB, 0x3439, 0x2BF9, 0x1337, 0xA5B9, // 0x01E0 (480) -0xFF9E, 0x4C39, 0x2BF9, 0x345A, 0x3C7A, 0x3C9B, 0x4CFC, 0x5D5C, 0x659D, 0x75DD, 0x7DFE, 0x861E, 0x7E3E, 0x969F, 0xFFFF, 0xFFFF, // 0x01F0 (496) -0xFFFF, 0xFFFF, 0xB6FF, 0x7E1E, 0x863E, 0x7DFE, 0x75DD, 0x6D9D, 0x5D5C, 0x4CFC, 0x3C9B, 0x347A, 0x345A, 0x343A, 0x1B78, 0xA5B9, // 0x0200 (512) -0xF79E, 0x4418, 0x2C3A, 0x3C7A, 0x449B, 0x44DB, 0x4CFC, 0x4D3C, 0x555D, 0x5D7D, 0x65BE, 0x6DFE, 0x6DFF, 0x867F, 0xFFFF, 0xFFFF, // 0x0210 (528) -0xFFFF, 0xFFFF, 0xA6DF, 0x65FF, 0x6DFE, 0x65BE, 0x5D9E, 0x555D, 0x4D3C, 0x4CFC, 0x44DB, 0x44BB, 0x3C7A, 0x345A, 0x1B78, 0xA599, // 0x0220 (544) -0xFFDE, 0x43D8, 0x345A, 0x3C9A, 0x44DB, 0x4CFC, 0x4D3C, 0x555D, 0x5D9D, 0x5DBE, 0x65DE, 0x6DFF, 0x661F, 0x867F, 0xFFFF, 0xFFFF, // 0x0230 (560) -0xFFFF, 0xFFFF, 0xA6DF, 0x65FF, 0x6DFF, 0x65DE, 0x5DBE, 0x5D9D, 0x555D, 0x4D3C, 0x4CFC, 0x44DB, 0x3C7A, 0x3C9B, 0x1B57, 0xADB9, // 0x0240 (576) -0xFFFF, 0x4BD7, 0x2C1A, 0x44DB, 0x44DB, 0x4D1C, 0x555D, 0x5D7D, 0x5DBE, 0x65DE, 0x6E1F, 0x6E3F, 0x765F, 0x96BF, 0xFFFF, 0xFFFF, // 0x0250 (592) -0xFFFF, 0xFFFF, 0xAEFF, 0x6E3F, 0x763F, 0x6E1F, 0x65DE, 0x5DBE, 0x5D7D, 0x555D, 0x4D1C, 0x44DC, 0x3C9B, 0x44DC, 0x1AD5, 0xC639, // 0x0260 (608) -0xFFFF, 0x84D8, 0x1317, 0x5D7D, 0x44DB, 0x553C, 0x557D, 0x5D9E, 0x65DE, 0x65FF, 0x6E3F, 0x7E5F, 0x7E7F, 0x9EDF, 0xFFFF, 0xFFFF, // 0x0270 (624) -0xFFFF, 0xFFFF, 0xB73F, 0x7E7F, 0x7E5F, 0x6E3F, 0x65FF, 0x65DE, 0x5D9E, 0x557D, 0x553C, 0x44DC, 0x4D1C, 0x345B, 0x22B4, 0xE71B, // 0x0280 (640) -0xFFFF, 0xD6BC, 0x0234, 0x4CFC, 0x5D7D, 0x4D3C, 0x5D9D, 0x5DBE, 0x65FF, 0x6E3F, 0x765F, 0x867F, 0x8EBF, 0xA6DF, 0xFFFF, 0xFFFF, // 0x0290 (656) -0xFFFF, 0xFFFF, 0xB71F, 0x8EBF, 0x869F, 0x765F, 0x6E3F, 0x65FF, 0x5DBE, 0x5D7D, 0x553D, 0x4D1C, 0x65BE, 0x0AB7, 0x6C15, 0xFFBE, // 0x02A0 (672) -0xFFFF, 0xFFFF, 0x53B6, 0x0296, 0x75FE, 0x5D9D, 0x557D, 0x65DE, 0x6E1F, 0x763F, 0x7E7F, 0x8EBF, 0x9EFF, 0x96BE, 0xAE3C, 0xE77E, // 0x02B0 (688) -0xEF9E, 0xC69D, 0x967E, 0x9EFF, 0x8EBF, 0x7E7F, 0x763F, 0x6E1F, 0x65DE, 0x5D9E, 0x555D, 0x761E, 0x341A, 0x1294, 0xBE18, 0xFFFF, // 0x02C0 (704) -0xFFFF, 0xFFFF, 0xCE9B, 0x0A13, 0x2378, 0x7E5F, 0x6E1E, 0x5DBE, 0x6E1F, 0x7E5F, 0x869F, 0x96DF, 0x9EFF, 0xAF5F, 0x9E9E, 0x8DFC, // 0x02D0 (720) -0x8E1C, 0x967D, 0xAF3F, 0xA6FF, 0x96DF, 0x869F, 0x7E5F, 0x6E1F, 0x5DBE, 0x65DE, 0x7E5F, 0x4CBB, 0x0AB5, 0x7454, 0xEF5C, 0xFFFF, // 0x02E0 (736) -0xFFFF, 0xFFFF, 0xFFFF, 0x8D17, 0x01D3, 0x23B9, 0x7E3E, 0x8E9F, 0x763F, 0x765F, 0x8E9F, 0x9EDF, 0xA71F, 0xB75F, 0xC7BF, 0xCFDF, // 0x02F0 (752) -0xCFDF, 0xC7BF, 0xB75F, 0xA71F, 0x9EDF, 0x8E9F, 0x765F, 0x6E1F, 0x867F, 0x8E7F, 0x4CBB, 0x1317, 0x4BB4, 0xD679, 0xFFFF, 0xFFFF, // 0x0300 (768) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFBD, 0x7476, 0x0214, 0x1B78, 0x659D, 0x9EDF, 0x9EFF, 0x96DF, 0x9EFF, 0xAF1F, 0xB75F, 0xC79F, 0xD7DF, // 0x0310 (784) -0xD7DF, 0xC79F, 0xB75F, 0xAF1F, 0x9EDF, 0x96DF, 0x96DF, 0x9EFF, 0x7E1E, 0x3C5A, 0x1B77, 0x43B5, 0xBDD6, 0xF7BE, 0xFFFF, 0xFFFF, // 0x0320 (800) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF77D, 0x7CB6, 0x12B4, 0x1337, 0x449B, 0x7DFD, 0xA6FF, 0xB75F, 0xBF7F, 0xC79F, 0xCFBF, 0xD7FF, // 0x0330 (816) -0xD7FF, 0xCFBF, 0xC79F, 0xBF7F, 0xB77F, 0xAF1F, 0x8E5E, 0x551B, 0x3419, 0x2BD7, 0x5415, 0xB5B6, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0340 (832) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF79D, 0xA577, 0x3B75, 0x1B36, 0x2BD9, 0x4CBB, 0x759D, 0x965E, 0xAEDF, 0xBF3F, 0xC77F, // 0x0350 (848) -0xC77F, 0xBF3F, 0xB6FF, 0x9E7F, 0x7DDD, 0x5D1C, 0x447A, 0x3C59, 0x4437, 0x7474, 0xC617, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0360 (864) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDE, 0xD699, 0x84D5, 0x43D5, 0x33B7, 0x3418, 0x4C7A, 0x5CFC, 0x753D, 0x857E, // 0x0370 (880) -0x859E, 0x755D, 0x653C, 0x5CFB, 0x4CDA, 0x4CB9, 0x5497, 0x6C95, 0xA555, 0xDEDA, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0380 (896) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF79D, 0xCE79, 0x9D56, 0x7495, 0x5C56, 0x4C77, 0x4C97, 0x4CB8, // 0x0390 (912) -0x54D8, 0x5CD8, 0x5CF8, 0x64D7, 0x74D6, 0x8CF5, 0xAD96, 0xD699, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03A0 (928) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFBE, 0xEF1B, 0xD679, 0xBDF7, 0xAD96, 0xA576, // 0x03B0 (944) -0xA576, 0xAD76, 0xB5B6, 0xC5F7, 0xD679, 0xEF3C, 0xFFDE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03C0 (960) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFBE, // 0x03D0 (976) -0xF7BE, 0xF7BE, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03E0 (992) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03F0 (1008) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0400 (1024) -}; diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap/tux.c b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap/tux.c deleted file mode 100644 index 3babe53..0000000 --- a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap/tux.c +++ /dev/null @@ -1,73 +0,0 @@ -// Generated by : ImageConverter 565 v1.0 -// Generated from: tux.png -// Time generated: 11.10.2010 22:51:32 -// Size : 2 048 Bytes - -#include - -const unsigned short tux[0x400] PROGMEM ={ -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE73C, 0x9CD3, 0x9CF3, 0xA514, // 0x0010 (16) -0x9CF3, 0x8C51, 0xAD75, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0020 (32) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF7D, 0x5AEB, 0x7BEF, 0x9CD3, 0x94B2, // 0x0030 (48) -0x94B2, 0x94B2, 0x4228, 0x7BEF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0040 (64) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x9CF3, 0x18E3, 0x630C, 0x4A49, 0x4A69, // 0x0050 (80) -0x4A69, 0x528A, 0x4A49, 0x0000, 0xC638, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0060 (96) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x6B6D, 0x0000, 0x0020, 0x10A2, 0x1082, // 0x0070 (112) -0x0841, 0x0841, 0x0841, 0x0000, 0x630C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0080 (128) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x528A, 0x4228, 0x8410, 0x0000, 0x0861, // 0x0090 (144) -0xAD55, 0xBDD7, 0x10A2, 0x0000, 0x2945, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00A0 (160) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x5ACB, 0x8C71, 0xE75D, 0x2126, 0x528B, // 0x00B0 (176) -0xE75D, 0xDEDB, 0x7BCF, 0x0000, 0x18E3, 0xE73C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00C0 (192) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x6B6D, 0x4A4A, 0x6B2A, 0x8BE7, 0xA48A, // 0x00D0 (208) -0x6B09, 0x4A8A, 0x8431, 0x0000, 0x2104, 0xE73C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00E0 (224) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x6B6E, 0x5204, 0xDE6A, 0xFFF7, 0xFFF8, // 0x00F0 (240) -0xD5AC, 0xBCAA, 0x5A66, 0x0000, 0x1082, 0xDEFB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0100 (256) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x8C10, 0xC540, 0xFFED, 0xFF2C, 0xFEEC, // 0x0110 (272) -0xFECC, 0xFE66, 0x8260, 0x0000, 0x0000, 0xB596, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0120 (288) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x94B3, 0x9C25, 0xFF20, 0xFE40, 0xFDA0, // 0x0130 (304) -0xFCC0, 0xF524, 0x836A, 0x0000, 0x0000, 0x630C, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0140 (320) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x630C, 0x94B4, 0xFF13, 0xFD83, 0xF523, // 0x0150 (336) -0xE5CF, 0xF79E, 0xE71D, 0x0861, 0x0000, 0x0861, 0xDEDB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0160 (352) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xCE59, 0x0841, 0xD69A, 0xFFFF, 0xFF7D, 0xF77D, // 0x0170 (368) -0xFFFF, 0xFFFF, 0xFFFF, 0x73AE, 0x0000, 0x0000, 0x4A69, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0180 (384) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF79E, 0x10A2, 0x8410, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, // 0x0190 (400) -0xFFFF, 0xFFDF, 0xFFFF, 0xCE59, 0x0000, 0x0000, 0x0000, 0x9492, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01A0 (416) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x52AA, 0x0020, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01B0 (432) -0xFFDF, 0xFFDF, 0xF7BE, 0xFFDF, 0x3186, 0x0000, 0x0020, 0x0841, 0xCE79, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01C0 (448) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xC638, 0x0000, 0x52AA, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFDF, // 0x01D0 (464) -0xFFDF, 0xF7BE, 0xF79E, 0xFFFF, 0x9CF3, 0x0000, 0x0841, 0x0000, 0x39E7, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01E0 (480) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x5ACB, 0x0000, 0xBDF7, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFDF, 0xFFDF, // 0x01F0 (496) -0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0x3186, 0x0000, 0x0861, 0x0000, 0xAD55, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0200 (512) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE73C, 0x0861, 0x4A49, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, // 0x0210 (528) -0xF7BE, 0xF79E, 0xEF7D, 0xEF5D, 0xFFDF, 0x8410, 0x0000, 0x1082, 0x0000, 0x39E7, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0220 (544) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x94B2, 0x0000, 0xB596, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, // 0x0230 (560) -0xF79E, 0xEF7D, 0xEF7D, 0xE73C, 0xF79E, 0xAD55, 0x0861, 0x10A2, 0x0861, 0x0841, 0xCE59, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0240 (576) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF79E, 0x3185, 0x10A2, 0xE71C, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF79E, // 0x0250 (592) -0xEF7D, 0xEF7D, 0xEF5D, 0xE73C, 0xEF5D, 0xBDF7, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x8C71, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0260 (608) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x94B2, 0x0000, 0x39E7, 0xF7BE, 0xFFFF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF79E, 0xEF7D, // 0x0270 (624) -0xEF7D, 0xEF5D, 0xE73C, 0xE71C, 0xE71C, 0xC618, 0x18E3, 0x10A2, 0x10A2, 0x0020, 0x6B4D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0280 (640) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x8C51, 0x38E0, 0x4A27, 0xFFFF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF79E, 0xEF7D, 0xEF7D, // 0x0290 (656) -0xEF5D, 0xE73C, 0xE71C, 0xDEFB, 0xDF1D, 0xBDF8, 0x39C7, 0x5ACB, 0x528A, 0x10A3, 0x738F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02A0 (672) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDD6C, 0xFE2B, 0xBC45, 0xA513, 0xFFFF, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF5D, // 0x02B0 (688) -0xE73C, 0xE71C, 0xDEFB, 0xD6DC, 0xDD8E, 0xB3E4, 0x2124, 0x2965, 0x2945, 0x20C1, 0xB511, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02C0 (704) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF77C, 0xE5CF, 0xF60B, 0xFF9B, 0xFF54, 0x8B02, 0x7BF0, 0xFFDF, 0xF79E, 0xEF5D, 0xEF5D, 0xE73C, // 0x02D0 (720) -0xE71C, 0xDEFB, 0xDEDB, 0xCE7A, 0xED89, 0xDDAD, 0x0842, 0x0000, 0x0000, 0xAC69, 0xDD6B, 0xEFBF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02E0 (736) -0xFFFF, 0xFFFF, 0xFFBE, 0xE5CB, 0xEDC9, 0xFE4B, 0xFF14, 0xFEF3, 0xFF35, 0xFE8D, 0x51C1, 0x634E, 0xE73C, 0xEF5D, 0xE73C, 0xE71C, // 0x02F0 (752) -0xDEFB, 0xDEDB, 0xD6DB, 0xCE59, 0xE58B, 0xFF98, 0xBD4F, 0x8B88, 0xCD90, 0xFFB7, 0xCCE8, 0xE73D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0300 (768) -0xFFFF, 0xFFFF, 0xEF3B, 0xF583, 0xFF30, 0xFF11, 0xFECF, 0xFEEF, 0xFECF, 0xFF30, 0xDD46, 0x2903, 0x6B8E, 0xEF7D, 0xE71C, 0xDEFB, // 0x0310 (784) -0xDEDB, 0xD6BA, 0xD69A, 0xCE59, 0xE5AA, 0xFF11, 0xFF53, 0xFF73, 0xFF33, 0xFF12, 0xFE6C, 0xDDAD, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0320 (800) -0xFFFF, 0xFFFF, 0xF79E, 0xEDC5, 0xFECB, 0xFECC, 0xFECC, 0xFEEC, 0xFECB, 0xFECC, 0xFEEA, 0x9BE5, 0x8432, 0xE73C, 0xDEDB, 0xDEDB, // 0x0330 (816) -0xD6BA, 0xD69A, 0xDEDB, 0xA4F3, 0xD547, 0xFF2E, 0xFECD, 0xFECE, 0xFEEE, 0xFEEE, 0xFF10, 0xFEAB, 0xE5A8, 0xEF7D, 0xFFFF, 0xFFFF, // 0x0340 (832) -0xFFFF, 0xFFFF, 0xF79E, 0xF603, 0xFEA2, 0xFEC7, 0xFEC7, 0xFEA4, 0xFE81, 0xFE61, 0xFEA4, 0xFE43, 0xDE33, 0xE75E, 0xE71C, 0xDEFB, // 0x0350 (848) -0xDEDB, 0xCE58, 0x8C72, 0x5247, 0xEDE4, 0xFF0A, 0xFECA, 0xFEC9, 0xFE84, 0xFE83, 0xFEE7, 0xFEA3, 0xB443, 0xD69B, 0xFFFF, 0xFFFF, // 0x0360 (864) -0xFFFF, 0xFFFF, 0xF75B, 0xFE60, 0xFF00, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEE0, 0xE5C1, 0x9492, 0xA514, 0x9CD3, // 0x0370 (880) -0x8410, 0x630B, 0x4229, 0x6AE8, 0xFE80, 0xFEC1, 0xFEC1, 0xFEA0, 0xFEA0, 0xFEE0, 0xDD80, 0x9BE8, 0xB597, 0xFFDF, 0xFFFF, 0xFFFF, // 0x0380 (896) -0xFFFF, 0xFFFF, 0xF79E, 0xD589, 0xE600, 0xFEA0, 0xFF00, 0xFF40, 0xFF40, 0xFF00, 0xFF00, 0xFF20, 0xFEC0, 0x5267, 0x4229, 0x4A48, // 0x0390 (912) -0x4A49, 0x5289, 0x424A, 0x7B46, 0xFF20, 0xFEE0, 0xFEE0, 0xFF20, 0xFEE0, 0xB4A5, 0x9C92, 0xDEFD, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03A0 (928) -0xFFFF, 0xFFFF, 0xFFFF, 0xE71D, 0xBDB6, 0xB530, 0xBD0B, 0xCD65, 0xEE60, 0xFF40, 0xFFA0, 0xFF80, 0xBD03, 0x8410, 0xA514, 0xA534, // 0x03B0 (944) -0xAD75, 0xB596, 0xA555, 0x9C8F, 0xF6C0, 0xFFA0, 0xFFA0, 0xF6E0, 0xA449, 0xB5B8, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03C0 (960) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF7F, 0xD69C, 0xBD95, 0xBD4C, 0xCDC6, 0xB4E8, 0xAD35, 0xF7BF, 0xFFFF, 0xFFFF, // 0x03D0 (976) -0xFFFF, 0xFFFF, 0xFFFF, 0xF7BF, 0xCDD0, 0xCDC6, 0xCDA7, 0xA48D, 0xCE7B, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03E0 (992) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDF1F, 0xB59A, 0xBDDA, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, // 0x03F0 (1008) -0xFFFF, 0xFFDF, 0xFFDF, 0xFFFF, 0xEF7F, 0xB59A, 0xAD59, 0xDF1D, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0400 (1024) -}; diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap_128x128/UTFT_Bitmap_128x128.ino b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap_128x128/UTFT_Bitmap_128x128.ino deleted file mode 100644 index 1d10e99..0000000 --- a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap_128x128/UTFT_Bitmap_128x128.ino +++ /dev/null @@ -1,50 +0,0 @@ -// UTFT_Bitmap_128x128 (C)2012 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of the drawBitmap()-function. -// -// This demo was made to work on the 128x128 modules. -// Any other size displays may cause strange behaviour. -// -// This program requires the UTFT library. -// - -#include -#include - -UTFT myGLCD(LPH9135,6,5,2,3,4); // Remember to change the model parameter to suit your display module! - -extern unsigned int icon1[0x400]; -extern unsigned int icon2[0x400]; -extern unsigned int tux[0x1000]; - -void setup() -{ - myGLCD.InitLCD(PORTRAIT); -} - -void loop() -{ -// Draw a 4 by 4 grid of a 32x32 icon. - myGLCD.fillScr(255, 255, 255); - for (int x=0; x<4; x++) - for (int y=0; y<4; y++) - myGLCD.drawBitmap (x*32, y*32, 32, 32, icon1); - - delay(5000); - -// Draw a 64x64 icon in double size. - myGLCD.fillScr(255, 255, 255); - myGLCD.drawBitmap (0, 0, 64, 64, tux, 2); - - delay(5000); - -// Draw a 2 by 2 grid of a 32x32 icon in double size. - myGLCD.fillScr(255, 255, 255); - for (int x=0; x<2; x++) - for (int y=0; y<2; y++) - myGLCD.drawBitmap (x*64, y*64, 32, 32, icon2, 2); - - delay(5000); -} - diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap_128x128/icon1.c b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap_128x128/icon1.c deleted file mode 100644 index e9da278..0000000 --- a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap_128x128/icon1.c +++ /dev/null @@ -1,74 +0,0 @@ -// Generated by : ImageConverter 565 v1.0 -// Generated from: exit.png -// Time generated: 14.10.2010 21:53:03 -// Dimensions : 32x32 pixels -// Size : 2 048 Bytes - -#include - -const unsigned short icon1[0x400] PROGMEM ={ -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF1C, 0xE618, 0xE638, 0xE638, 0xE638, 0xE659, 0xE659, 0xE659, 0xE659, 0xE659, 0xE679, 0xE679, // 0x0010 (16) -0xE679, 0xE679, 0xE679, 0xE679, 0xEE79, 0xEE9A, 0xEE9A, 0xEE9A, 0xEE9A, 0xEE9A, 0xE638, 0xEEBA, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0020 (32) -0xFFFF, 0xFFFF, 0xFFFF, 0xD555, 0xCCD3, 0xDDB6, 0xDDD7, 0xDDF7, 0xDDF7, 0xDE18, 0xE618, 0xE638, 0xE638, 0xE659, 0xE679, 0xE679, // 0x0030 (48) -0xEE9A, 0xEE9A, 0xEEBA, 0xEEBA, 0xEEBA, 0xEEDB, 0xEEDB, 0xEEFB, 0xEEFB, 0xEEFB, 0xEEFB, 0xE659, 0xD575, 0xF77D, 0xFFFF, 0xFFFF, // 0x0040 (64) -0xFFDF, 0xFFFF, 0xD534, 0xC471, 0xD575, 0xCCF3, 0xCCD3, 0xCCD3, 0xCCF3, 0xCCF3, 0xD4F3, 0xD514, 0xD514, 0xD514, 0xD534, 0xDD55, // 0x0050 (80) -0xDD55, 0xDD55, 0xDD55, 0xDD75, 0xDD75, 0xDD75, 0xDD96, 0xDD96, 0xDD96, 0xDDB6, 0xDDD7, 0xEE79, 0xEEBA, 0xD534, 0xFFBE, 0xFFFF, // 0x0060 (96) -0xFFFF, 0xEEDB, 0xB38E, 0xC4B2, 0xBC30, 0xC451, 0xC471, 0xC471, 0xCC71, 0xCC92, 0xCC92, 0xCC92, 0xCCB2, 0xD4B2, 0xD4B2, 0xCC71, // 0x0070 (112) -0xCC71, 0xD4D3, 0xD4F3, 0xDCF3, 0xDCF3, 0xDD14, 0xDD14, 0xDD14, 0xDD34, 0xDD34, 0xDD34, 0xDD14, 0xE5D7, 0xDD96, 0xDDF7, 0xFFFF, // 0x0080 (128) -0xFFFF, 0xC4F3, 0xAB2C, 0xC430, 0xC410, 0xC430, 0xC430, 0xC430, 0xCC51, 0xCC51, 0xCC51, 0xCC71, 0xCC71, 0xD471, 0xCC71, 0xD5F7, // 0x0090 (144) -0xD5F7, 0xCC92, 0xDCB2, 0xDCD3, 0xDCD3, 0xDCD3, 0xDCD3, 0xDCF3, 0xDCF3, 0xDD14, 0xDD14, 0xDD34, 0xDD14, 0xDD34, 0xC492, 0xFFFF, // 0x00A0 (160) -0xFFFF, 0xB3EF, 0x9A28, 0xC430, 0xBBCF, 0xC3EF, 0xC3EF, 0xC3EF, 0xC410, 0xCC10, 0xCC10, 0xCC30, 0xCC51, 0xCBEF, 0xE638, 0xFFFF, // 0x00B0 (176) -0xFFFF, 0xE659, 0xD430, 0xDC92, 0xDC92, 0xDC92, 0xDCB2, 0xDCB2, 0xDCB2, 0xDCD3, 0xDCD3, 0xDCD3, 0xE514, 0xD410, 0xAB0C, 0xF7FF, // 0x00C0 (192) -0xFFFF, 0xABCF, 0x9165, 0xC3EF, 0xBB8E, 0xBBAE, 0xC3AE, 0xC3CF, 0xC3CF, 0xCBCF, 0xCBEF, 0xCC10, 0xCC10, 0xCBAE, 0xEE9A, 0xFFFF, // 0x00D0 (208) -0xFFFF, 0xF6DB, 0xD410, 0xDC71, 0xDC71, 0xDC71, 0xDC71, 0xDC71, 0xDC71, 0xE492, 0xE492, 0xE492, 0xE4F3, 0xCB2C, 0xA249, 0xF7FF, // 0x00E0 (224) -0xFFFF, 0xABCF, 0x88C3, 0xC3AE, 0xBB4D, 0xBB6D, 0xC36D, 0xC38E, 0xC38E, 0xCBAE, 0xC36D, 0xC34D, 0xCBCF, 0xCB8E, 0xEE59, 0xFFFF, // 0x00F0 (240) -0xFFFF, 0xF6BA, 0xDBCF, 0xD3CF, 0xCBAE, 0xD3CF, 0xE430, 0xE430, 0xE451, 0xE451, 0xE451, 0xE451, 0xECD3, 0xCAAA, 0xA208, 0xF7FF, // 0x0100 (256) -0xFFFF, 0xABCF, 0x8061, 0xBB6D, 0xBB2C, 0xBB2C, 0xC34D, 0xC34D, 0xCB4D, 0xBB0C, 0xC492, 0xCD14, 0xC38E, 0xCB2C, 0xEE59, 0xFFFF, // 0x0110 (272) -0xFFFF, 0xF6BA, 0xD36D, 0xD575, 0xE6DB, 0xDDB6, 0xD3AE, 0xE3EF, 0xE410, 0xE410, 0xE430, 0xE410, 0xECB2, 0xC986, 0xA208, 0xF7FF, // 0x0120 (288) -0xFFFF, 0xB3EF, 0x8041, 0xBB0C, 0xBAEB, 0xBAEB, 0xC30C, 0xC30C, 0xBACB, 0xD5B6, 0xFFFF, 0xFFFF, 0xEE79, 0xCACB, 0xEE59, 0xFFFF, // 0x0130 (304) -0xFFFF, 0xF679, 0xDBEF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEEBA, 0xD3CF, 0xE3AE, 0xE3EF, 0xE3CF, 0xEC10, 0xEB6D, 0xC000, 0xA249, 0xF7FF, // 0x0140 (320) -0xFFFF, 0xB3EF, 0x8020, 0xBACB, 0xBAAA, 0xBAAA, 0xC2EB, 0xBA8A, 0xD596, 0xFFFF, 0xFFDF, 0xFFFF, 0xF73C, 0xCAAA, 0xEE38, 0xFFFF, // 0x0150 (336) -0xFFFF, 0xF679, 0xDB4D, 0xFF7D, 0xFFFF, 0xFFDF, 0xFFFF, 0xEEDB, 0xDB6D, 0xEB8E, 0xEBAE, 0xEB8E, 0xE0A2, 0xC800, 0xAA49, 0xF7FF, // 0x0160 (352) -0xFFFF, 0xB3EF, 0x8000, 0xB28A, 0xBA69, 0xBA8A, 0xBA49, 0xCC30, 0xFFFF, 0xFFDF, 0xFFFF, 0xFF5D, 0xDBCF, 0xCA69, 0xEE18, 0xFFFF, // 0x0170 (368) -0xFFFF, 0xF679, 0xDAAA, 0xE3AE, 0xF6BA, 0xFFFF, 0xFFDF, 0xFFFF, 0xE5D7, 0xE30C, 0xEB8E, 0xE0E3, 0xE000, 0xC800, 0xAA49, 0xF7FF, // 0x0180 (384) -0xFFFF, 0xB3EF, 0x8800, 0xB249, 0xBA49, 0xBA49, 0xBA49, 0xEF1C, 0xFFFF, 0xFFFF, 0xFF7D, 0xD32C, 0xCA69, 0xD249, 0xEDF7, 0xFFFF, // 0x0190 (400) -0xFFFF, 0xF659, 0xDAAA, 0xE2CB, 0xE2EB, 0xFEBA, 0xFFFF, 0xFFDF, 0xFFDF, 0xE3CF, 0xE103, 0xE000, 0xE081, 0xD000, 0xAA69, 0xF7FF, // 0x01A0 (416) -0xFFFF, 0xB3EF, 0x8800, 0xB228, 0xBA08, 0xB9A6, 0xCBAE, 0xFFFF, 0xFFDF, 0xFFFF, 0xDC30, 0xC9E7, 0xD28A, 0xCA08, 0xF618, 0xFFFF, // 0x01B0 (432) -0xFFFF, 0xF679, 0xDA49, 0xE2CB, 0xE28A, 0xEB6D, 0xFFBE, 0xFFDF, 0xFFFF, 0xEC92, 0xE000, 0xE0A2, 0xE0C2, 0xD040, 0xAA89, 0xF7FF, // 0x01C0 (448) -0xFFFF, 0xB3EF, 0x8800, 0xB1E7, 0xB9E7, 0xB165, 0xDD55, 0xFFFF, 0xFFFF, 0xF71C, 0xCA08, 0xCA08, 0xD228, 0xD1E7, 0xE430, 0xFFDF, // 0x01D0 (464) -0xFFDF, 0xEC51, 0xDA08, 0xE28A, 0xE28A, 0xE228, 0xF618, 0xFFFF, 0xFFFF, 0xF679, 0xE081, 0xE0C2, 0xE903, 0xD081, 0xAA89, 0xF7FF, // 0x01E0 (480) -0xFFFF, 0xBBEF, 0x9000, 0xB1A6, 0xB986, 0xB145, 0xEE38, 0xFFFF, 0xFFFF, 0xED96, 0xC165, 0xC9E7, 0xD1E7, 0xD1E7, 0xD1C7, 0xDACB, // 0x01F0 (496) -0xE2EB, 0xD9E7, 0xE228, 0xE228, 0xEA69, 0xE9E7, 0xF40F, 0xFFFF, 0xFFFF, 0xFF5D, 0xE144, 0xE8E2, 0xE943, 0xD8C1, 0xAA8A, 0xF7FF, // 0x0200 (512) -0xFFFF, 0xBC10, 0x9000, 0xB165, 0xB145, 0xB924, 0xEE9A, 0xFFFF, 0xFFFF, 0xE514, 0xC124, 0xC9A6, 0xD1A6, 0xD1A6, 0xD1C7, 0xD9A6, // 0x0210 (528) -0xD9A6, 0xE1E7, 0xE208, 0xE208, 0xE9A6, 0xE041, 0xEA8A, 0xFFFF, 0xFFFF, 0xFF9E, 0xE9C6, 0xE902, 0xE984, 0xD902, 0xAAAA, 0xF7FF, // 0x0220 (544) -0xFFFF, 0xC410, 0x9000, 0xB124, 0xB124, 0xB0C3, 0xEE18, 0xFFFF, 0xFFFF, 0xE575, 0xC0E3, 0xC986, 0xD165, 0xD165, 0xD986, 0xD9A6, // 0x0230 (560) -0xD9A6, 0xE1A6, 0xE165, 0xE082, 0xE020, 0xE000, 0xEB4C, 0xFFFF, 0xFFFF, 0xFF7D, 0xE9A5, 0xE943, 0xE9A5, 0xD923, 0xAAAA, 0xF7FF, // 0x0240 (576) -0xFFFF, 0xC410, 0x9800, 0xB0E3, 0xB0E3, 0xB061, 0xE4F3, 0xFFFF, 0xFFFF, 0xF6FB, 0xC104, 0xC924, 0xD145, 0xD145, 0xD945, 0xD945, // 0x0250 (592) -0xD8E3, 0xD861, 0xD800, 0xE000, 0xE061, 0xE000, 0xED34, 0xFFFF, 0xFFFF, 0xFE9A, 0xE923, 0xE984, 0xE9C5, 0xE163, 0xAAAA, 0xF7FF, // 0x0260 (608) -0xFFFF, 0xC410, 0xA000, 0xB0A2, 0xB0A2, 0xB041, 0xCACB, 0xFFFF, 0xFFDF, 0xFFFF, 0xD34D, 0xC841, 0xD104, 0xD0A2, 0xD061, 0xD000, // 0x0270 (624) -0xD800, 0xD800, 0xE000, 0xE041, 0xE000, 0xD965, 0xFF9E, 0xFFDF, 0xFFFF, 0xF4D2, 0xE8E2, 0xE9A5, 0xE9E5, 0xE183, 0xAAAA, 0xF7FF, // 0x0280 (640) -0xFFFF, 0xCC10, 0xA000, 0xA861, 0xB061, 0xB061, 0xB882, 0xF6DB, 0xFFFF, 0xFFDF, 0xF75D, 0xC124, 0xC800, 0xD000, 0xD000, 0xD800, // 0x0290 (656) -0xD800, 0xE000, 0xE020, 0xE000, 0xD861, 0xF638, 0xFFFF, 0xFFDF, 0xFFDF, 0xEA68, 0xE943, 0xE9C5, 0xEA06, 0xE1A4, 0xB2CA, 0xF7FF, // 0x02A0 (672) -0xFFFF, 0xCC10, 0xA000, 0xA820, 0xB000, 0xB000, 0xB000, 0xCA49, 0xFFFF, 0xFFDF, 0xFFFF, 0xF71C, 0xCA08, 0xC800, 0xD000, 0xD800, // 0x02B0 (688) -0xD800, 0xD800, 0xD800, 0xD944, 0xEE18, 0xFFFF, 0xFFBE, 0xFFFF, 0xF4F2, 0xE902, 0xE9A5, 0xE9C5, 0xEA06, 0xE9A4, 0xB2CA, 0xF7FF, // 0x02C0 (704) -0xFFFF, 0xD410, 0xA800, 0xA800, 0xB000, 0xB000, 0xB800, 0xB800, 0xDC10, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xED96, 0xDAEB, 0xD1A6, // 0x02D0 (720) -0xD965, 0xDA69, 0xECD3, 0xFF9E, 0xFFFF, 0xFFBE, 0xFFFF, 0xFE17, 0xE923, 0xE964, 0xE9A5, 0xE9C5, 0xEA26, 0xE9C4, 0xBACA, 0xF7FF, // 0x02E0 (736) -0xF7FF, 0xD410, 0xA800, 0xA800, 0xB000, 0xB000, 0xB800, 0xB800, 0xB800, 0xE3EF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02F0 (752) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF5B6, 0xE923, 0xE923, 0xE984, 0xE9A5, 0xE9E5, 0xEA26, 0xE9C5, 0xBACA, 0xF7FF, // 0x0300 (768) -0xF7FF, 0xDC10, 0xB000, 0xA800, 0xB000, 0xB000, 0xB800, 0xB800, 0xC000, 0xC000, 0xD228, 0xF638, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0310 (784) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFEFB, 0xF3AE, 0xE0C1, 0xE903, 0xE964, 0xE984, 0xE9A5, 0xE9E5, 0xEA26, 0xE9E5, 0xC2CA, 0xF7DF, // 0x0320 (800) -0xF7FF, 0xDC51, 0xB800, 0xA800, 0xB000, 0xB000, 0xB800, 0xB800, 0xC000, 0xC000, 0xC000, 0xC800, 0xD9E7, 0xEC30, 0xF5D7, 0xFE9A, // 0x0330 (816) -0xFEBA, 0xF618, 0xF4D3, 0xEACB, 0xE0E2, 0xE040, 0xE903, 0xE943, 0xE943, 0xE984, 0xE9A5, 0xE9E5, 0xEA26, 0xEA05, 0xC30C, 0xF7DF, // 0x0340 (832) -0xFFFF, 0xD575, 0xD104, 0xA820, 0xB000, 0xB800, 0xB800, 0xC000, 0xC000, 0xC000, 0xC820, 0xC800, 0xD000, 0xD000, 0xD800, 0xD800, // 0x0350 (848) -0xE000, 0xE000, 0xE000, 0xE000, 0xE0A1, 0xE0E3, 0xE903, 0xE943, 0xE964, 0xE984, 0xE9C5, 0xE9C5, 0xF226, 0xE227, 0xBC10, 0xF7FF, // 0x0360 (864) -0xFFFF, 0xDF3C, 0xCAAA, 0xD186, 0xB082, 0xB000, 0xB800, 0xB800, 0xB800, 0xC000, 0xC000, 0xC800, 0xC800, 0xD000, 0xD000, 0xD800, // 0x0370 (880) -0xD800, 0xE000, 0xE020, 0xE040, 0xE061, 0xE0A1, 0xE0C2, 0xE102, 0xE123, 0xE943, 0xE984, 0xEA26, 0xFB0A, 0xBA08, 0xCE38, 0xFFFF, // 0x0380 (896) -0xFFFF, 0xFFDF, 0xBDD7, 0xCA69, 0xE248, 0xD207, 0xD1C6, 0xD1C6, 0xD9C7, 0xD9C7, 0xE1C7, 0xE1C7, 0xE1C7, 0xE9C7, 0xE9C7, 0xE9C7, // 0x0390 (912) -0xF1C6, 0xF1C7, 0xF1E7, 0xF207, 0xF228, 0xF248, 0xF269, 0xF289, 0xF2A9, 0xF2CA, 0xFB0A, 0xF2EA, 0xC207, 0xACB3, 0xF7BE, 0xFFFF, // 0x03A0 (928) -0xFFFF, 0xFFFF, 0xF7BE, 0xBDF7, 0xAB8E, 0xC2EB, 0xC2EB, 0xC30B, 0xC30B, 0xC30B, 0xC30B, 0xC30B, 0xC30B, 0xC30B, 0xCB0B, 0xCAEB, // 0x03B0 (944) -0xCAEB, 0xCACA, 0xCACA, 0xCAAA, 0xCAAA, 0xCA8A, 0xCA69, 0xC269, 0xC269, 0xC289, 0xBA69, 0xA2CB, 0xAD34, 0xEF7D, 0xFFFF, 0xFFFF, // 0x03C0 (960) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xDF3C, 0xBE39, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, // 0x03D0 (976) -0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xBE38, 0xD71C, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03E0 (992) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03F0 (1008) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0400 (1024) -}; diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap_128x128/icon2.c b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap_128x128/icon2.c deleted file mode 100644 index 3bcc564..0000000 --- a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap_128x128/icon2.c +++ /dev/null @@ -1,74 +0,0 @@ -// Generated by : ImageConverter 565 v1.0 -// Generated from: video.png -// Time generated: 14.10.2010 21:53:17 -// Dimensions : 32x32 pixels -// Size : 2 048 Bytes - -#include - -const unsigned short icon2[0x400] PROGMEM ={ -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0010 (16) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0020 (32) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE71C, 0xB5B6, 0x94B2, 0x8C71, // 0x0030 (48) -0x9492, 0xA534, 0xD6BA, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0040 (64) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF5D, 0x9CF3, 0x73AE, 0x6B6D, 0x73AE, 0x7BCF, // 0x0050 (80) -0x7BEF, 0x7BCF, 0x7BEF, 0xA534, 0xEF7D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0060 (96) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xC638, 0x7BCF, 0x6B6D, 0x738E, 0x7BCF, 0x8C71, 0x9492, // 0x0070 (112) -0x9492, 0x9492, 0x9492, 0x8C51, 0x8C71, 0xDEDB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0080 (128) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xB596, 0x738E, 0x738E, 0x73AE, 0x6B4D, 0x8410, 0x9CF3, 0x9CF3, // 0x0090 (144) -0x9CF3, 0x9CF3, 0x9CF3, 0x9CF3, 0x94B2, 0x7BEF, 0xDEDB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00A0 (160) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xB596, 0x738E, 0x7BEF, 0x8410, 0x632C, 0x4A69, 0x9492, 0xAD75, 0xAD55, // 0x00B0 (176) -0xAD55, 0xAD55, 0xAD55, 0xA534, 0xAD55, 0x9492, 0x8430, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00C0 (192) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xBDF7, 0x7BCF, 0x8430, 0x7BCF, 0x6B4D, 0x528A, 0x6B6D, 0xB5B6, 0xB5B6, 0xB5B6, // 0x00D0 (208) -0xB5B6, 0xB596, 0xB596, 0xAD75, 0xAD75, 0xAD55, 0x8410, 0xB5B6, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00E0 (224) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEDB, 0x7BEF, 0x9CD3, 0xA514, 0x5AEB, 0x630C, 0x6B4D, 0x9492, 0xC638, 0xC618, 0xC618, // 0x00F0 (240) -0xBDF7, 0xBDF7, 0xC618, 0xB5B6, 0xB5B6, 0xB596, 0x9492, 0x8C51, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0100 (256) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0x8C71, 0x94B2, 0xAD55, 0xB5B6, 0x738E, 0x6B4D, 0x632C, 0xB596, 0xD69A, 0xCE59, 0xCE59, // 0x0110 (272) -0xCE79, 0xCE59, 0x6B6D, 0x9492, 0xB5B6, 0xBDF7, 0x9CF3, 0x8430, 0xD69A, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0120 (288) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xB5B6, 0x8C51, 0xAD55, 0xB5B6, 0xCE79, 0x8C51, 0x630C, 0x8C51, 0xCE79, 0xD6BA, 0xD69A, 0xDEDB, // 0x0130 (304) -0xBDD7, 0x8C51, 0x4228, 0x2965, 0xAD55, 0xC638, 0xA534, 0x8430, 0xB5B6, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0140 (320) -0xFFFF, 0xFFFF, 0xFFFF, 0xEF5D, 0x8C51, 0xA514, 0xB5B6, 0xC618, 0xD6BA, 0xB5B6, 0xB596, 0xE71C, 0xDEFB, 0xDEFB, 0xE71C, 0xAD55, // 0x0150 (336) -0x738E, 0x7BEF, 0x5AEB, 0x2945, 0xC638, 0xCE59, 0xA534, 0x9492, 0xA534, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0160 (352) -0xFFFF, 0xFFFF, 0xFFFF, 0xB596, 0x94B2, 0xB5B6, 0xC618, 0xCE79, 0xD6BA, 0xE73C, 0xEF7D, 0xE73C, 0xEF5D, 0xE73C, 0x9CF3, 0x738E, // 0x0170 (368) -0x7BCF, 0x8430, 0x6B6D, 0x2965, 0xB596, 0xD69A, 0xAD55, 0x94B2, 0x9CD3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0180 (384) -0xFFFF, 0xFFFF, 0xF79E, 0x9492, 0x9CF3, 0xB5B6, 0xD69A, 0xDEFB, 0xE71C, 0xE73C, 0x6B6D, 0x528A, 0xDEDB, 0xEF5D, 0x7BEF, 0x8430, // 0x0190 (400) -0x7BEF, 0x8C51, 0x7BCF, 0x2104, 0xB596, 0xD6BA, 0xAD55, 0x9CD3, 0x9CF3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE73C, 0xE6FC, // 0x01A0 (416) -0xFFDF, 0xFFFF, 0xCE59, 0x9492, 0x9492, 0x6B4D, 0x7BCF, 0xBDD7, 0xF7BE, 0xA514, 0x4A49, 0x528A, 0xC638, 0xEF7D, 0x7BEF, 0x7BEF, // 0x01B0 (432) -0x7BEF, 0x8430, 0x5AEB, 0x10A2, 0xC618, 0xD69A, 0xAD55, 0x94B2, 0xA514, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xCE5A, 0x8BF2, // 0x01C0 (448) -0xFFFF, 0xFFFF, 0xAD55, 0x94B2, 0x8C51, 0x5AEB, 0x632C, 0xBDD7, 0xE73C, 0x630C, 0x632C, 0xBDF7, 0xFFDF, 0xEF5D, 0xBDD7, 0xB5B6, // 0x01D0 (464) -0xAD75, 0xAD75, 0x8C51, 0x738E, 0xD69A, 0xCE59, 0xB596, 0x8C51, 0xB5B6, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xCE39, 0x7350, // 0x01E0 (480) -0xFFFF, 0xF79E, 0x94B2, 0x94B2, 0x7BCF, 0x5AEB, 0x738E, 0xD6BA, 0xD69A, 0x2104, 0x6B6D, 0xF79E, 0xF79E, 0xF79E, 0xF7BE, 0xF79E, // 0x01F0 (496) -0xEF7D, 0xEF5D, 0xE73C, 0xE73C, 0xDEFB, 0xBDF7, 0xBDF7, 0x7BEF, 0xD69A, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xAD36, 0x7350, // 0x0200 (512) -0xFFFF, 0xDEDB, 0x8C51, 0x94B2, 0x738E, 0x632C, 0x73AE, 0xCE79, 0xF7BE, 0x7BEF, 0xA514, 0xF7BE, 0xF79E, 0xEF7D, 0xEF7D, 0xEF5D, // 0x0210 (528) -0xE73C, 0xE71C, 0xDEFB, 0xDEDB, 0xDEDB, 0xBDD7, 0xBDF7, 0x73AE, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0x9C75, 0x736F, // 0x0220 (544) -0xFFFF, 0xCE59, 0x8430, 0x94B2, 0x6B4D, 0x6B4D, 0xB596, 0xE73C, 0xEF7D, 0xFFFF, 0xFFFF, 0xF7BE, 0xF79E, 0xEF7D, 0xEF7D, 0xEF5D, // 0x0230 (560) -0xE73C, 0xE73C, 0xDEFB, 0xDEFB, 0xD6BA, 0xC618, 0xAD55, 0x8C71, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEDB, 0x6AEF, 0x9492, // 0x0240 (576) -0xFFFF, 0xBDF7, 0x8430, 0x8C71, 0x6B6D, 0xB596, 0xE71C, 0xE73C, 0xEF5D, 0xE73C, 0xBDF7, 0xCE59, 0xF7BE, 0xEF7D, 0xEF7D, 0xEF5D, // 0x0250 (592) -0xE73C, 0xE71C, 0xDEFB, 0xDEFB, 0xC638, 0xD69A, 0x8410, 0xC618, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0x9474, 0x6B0E, 0xCE59, // 0x0260 (608) -0xFFFF, 0xB5B6, 0x8410, 0x9492, 0xBDD7, 0xD6BA, 0xD6BA, 0xE71C, 0xE73C, 0x8C71, 0x6B4D, 0xA514, 0xF7BE, 0xEF5D, 0xEF5D, 0xE73C, // 0x0270 (624) -0xE73C, 0xE71C, 0xDEFB, 0xDEDB, 0xCE59, 0xC618, 0x7BCF, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xC5F9, 0x7B51, 0x7BEF, 0xFFFF, // 0x0280 (640) -0xFFFF, 0xB596, 0x8C71, 0xAD75, 0xBDF7, 0xCE59, 0xD69A, 0xE71C, 0xCE79, 0x8410, 0x8410, 0x9CD3, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, // 0x0290 (656) -0xE71C, 0xDEFB, 0xDEFB, 0xCE59, 0xDEDB, 0x8C71, 0xAD75, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEBB, 0x83B2, 0x630C, 0xE73C, 0xFFFF, // 0x02A0 (672) -0xFFFF, 0xB5B6, 0x9492, 0xAD55, 0xBDD7, 0xC638, 0xCE79, 0xDEFB, 0xB596, 0x73AE, 0x8410, 0x8410, 0xDEDB, 0xE73C, 0xE71C, 0xE71C, // 0x02B0 (688) -0xDEFB, 0xDEFB, 0xD6BA, 0xCE59, 0xC618, 0x738E, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEDC, 0x8C14, 0x5ACC, 0xC658, 0xFFFF, 0xFFFF, // 0x02C0 (704) -0xFFFF, 0xC638, 0x8C51, 0xA534, 0xB5B6, 0xBDF7, 0xCE59, 0xD6BA, 0x94B2, 0x738E, 0x8410, 0x8430, 0xCE59, 0xE73C, 0xDEFB, 0xDEFB, // 0x02D0 (720) -0xDEDB, 0xDEFB, 0xBDF7, 0xDEDB, 0x73AE, 0xC618, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEDC, 0x8BD2, 0x5ACC, 0xBDD6, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02E0 (736) -0xFFFF, 0xDEDB, 0x8C51, 0xA514, 0xAD75, 0xBDD7, 0xC638, 0xC618, 0x73AE, 0x7BCF, 0x8410, 0x5ACB, 0x8C51, 0xE73C, 0xDEDB, 0xD6BA, // 0x02F0 (752) -0xDEFB, 0xBDD7, 0xD69A, 0x8C71, 0x8C51, 0xFFFF, 0xFFFF, 0xFFDE, 0xCE5A, 0x7B71, 0x62ED, 0xBDF7, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0300 (768) -0xFFFF, 0xF7BE, 0x94B2, 0x94B2, 0xA534, 0xB596, 0xBDF7, 0xB596, 0x6B6D, 0x4208, 0x2945, 0x18C3, 0x6B6D, 0xDEFB, 0xD69A, 0xDEDB, // 0x0310 (784) -0xB5B6, 0xC618, 0x9CF3, 0x6B4D, 0xFFDE, 0xFFFF, 0xEF5D, 0xAD37, 0x62EE, 0x6B4D, 0xCE79, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0320 (800) -0xFFDF, 0xFFFF, 0xBDF7, 0x8C51, 0xA514, 0xAD55, 0xB596, 0xBDD7, 0xA514, 0x738E, 0xA514, 0xB5B6, 0xCE59, 0xD69A, 0xDEDB, 0xB596, // 0x0330 (816) -0xBDF7, 0xA534, 0x6B4C, 0xEF5D, 0xF79E, 0xBDB8, 0x7370, 0x5AAC, 0x8C71, 0xEF7D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0340 (832) -0xFFFF, 0xFFFF, 0xF79E, 0x94B2, 0x94B2, 0xA534, 0xAD55, 0xB5B6, 0xA534, 0xBDD7, 0xD69A, 0xCE59, 0xCE79, 0xCE59, 0xA534, 0x8430, // 0x0350 (848) -0x738E, 0x3186, 0x7BB0, 0x8C33, 0x7370, 0x62ED, 0x8410, 0xCE59, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0360 (864) -0xFFFF, 0xFFFF, 0xFFFF, 0xDEFB, 0x8C71, 0x9CD3, 0xAD55, 0xB596, 0xBDD7, 0xBDD7, 0xBDF7, 0xC618, 0xB5B6, 0xA534, 0xA534, 0x632C, // 0x0370 (880) -0x6B6D, 0xB5B6, 0xAD76, 0xAD76, 0xBE17, 0xE71B, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0380 (896) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEFB, 0x94B2, 0x8C51, 0x94B2, 0xA534, 0xAD55, 0xAD55, 0x9CD3, 0x8C71, 0x73AE, 0x632C, 0xA534, // 0x0390 (912) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03A0 (928) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0xCE59, 0xA514, 0x8430, 0x7BCF, 0x738E, 0x73AE, 0x8410, 0xA534, 0xEF7D, 0xFFFF, // 0x03B0 (944) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03C0 (960) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0xE73C, 0xE71C, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03D0 (976) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03E0 (992) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, // 0x03F0 (1008) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0400 (1024) -}; diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap_128x128/tux.c b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap_128x128/tux.c deleted file mode 100644 index 6c2e1e4..0000000 --- a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Bitmap_128x128/tux.c +++ /dev/null @@ -1,266 +0,0 @@ -// Generated by : ImageConverter 565 v1.0 -// Generated from: tux_64x64.png -// Time generated: 14.10.2010 21:56:38 -// Dimensions : 64x64 pixels -// Size : 8 192 Bytes - -#include - -const unsigned short tux[0x1000] PROGMEM ={ -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0010 (16) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xCE79, 0x9CF3, 0x7BCF, 0x738E, 0x738E, // 0x0020 (32) -0x6B6D, 0x94B2, 0xCE79, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0030 (48) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0040 (64) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0050 (80) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xCE79, 0x6B4D, 0x5ACB, 0x8410, 0x9CF3, 0x9CF3, 0x9CF3, // 0x0060 (96) -0x9CD3, 0x73AE, 0x4208, 0x5ACB, 0xCE79, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0070 (112) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0080 (128) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0090 (144) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xA514, 0x3186, 0x8C51, 0xBDF7, 0xC618, 0xBDF7, 0xBDF7, 0xBDF7, // 0x00A0 (160) -0xBDF7, 0xC618, 0xBDD7, 0x738E, 0x18C3, 0x8C51, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00B0 (176) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00C0 (192) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00D0 (208) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xBDD7, 0x10A2, 0x8C71, 0x9CF3, 0x8C71, 0x8C71, 0x8C71, 0x8C71, 0x8C71, // 0x00E0 (224) -0x8C71, 0x8C51, 0x8C51, 0x9CF3, 0x73AE, 0x0000, 0x7BEF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00F0 (240) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0100 (256) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0110 (272) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0x2945, 0x31A6, 0x7BCF, 0x6B4D, 0x6B6D, 0x6B6D, 0x6B6D, 0x6B6D, 0x6B6D, // 0x0120 (288) -0x6B6D, 0x6B6D, 0x6B6D, 0x6B4D, 0x73AE, 0x2124, 0x0000, 0xAD55, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0130 (304) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0140 (320) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0150 (336) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xC638, 0x0000, 0x31A6, 0x52AA, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, // 0x0160 (352) -0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x528A, 0x2104, 0x0000, 0x2965, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0170 (368) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0180 (384) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0190 (400) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x8C71, 0x0000, 0x1082, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, // 0x01A0 (416) -0x3186, 0x3186, 0x3186, 0x3186, 0x2965, 0x0020, 0x0000, 0x0000, 0x9CF3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01B0 (432) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01C0 (448) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01D0 (464) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x630C, 0x0000, 0x0000, 0x0861, 0x18C3, 0x10A2, 0x10A2, 0x10A2, 0x10A2, 0x18C3, // 0x01E0 (480) -0x1082, 0x0841, 0x1082, 0x10A2, 0x0020, 0x0000, 0x0000, 0x0000, 0x528A, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01F0 (496) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0200 (512) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0210 (528) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x4A49, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0220 (544) -0x0861, 0x3186, 0x18C3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2104, 0xD6BA, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0230 (560) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0240 (576) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0250 (592) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x39C7, 0x0000, 0x3186, 0xAD75, 0x8C51, 0x0841, 0x0000, 0x0000, 0x0000, 0x4208, // 0x0260 (608) -0xD6BA, 0xFFDF, 0xE71C, 0x630C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0xAD75, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0270 (624) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0280 (640) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0290 (656) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x39C7, 0x0000, 0xCE59, 0xFFFF, 0xFFFF, 0x94B2, 0x0000, 0x0000, 0x10A2, 0xE73C, // 0x02A0 (672) -0xFFFF, 0xFFFF, 0xFFFF, 0xEF7D, 0x2124, 0x0000, 0x0000, 0x0000, 0x0000, 0x94B2, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02B0 (688) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02C0 (704) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02D0 (720) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x2965, 0x18E3, 0xDEDB, 0x7BCF, 0xAD75, 0xEF5D, 0x2944, 0x0000, 0x5ACA, 0xFFFF, // 0x02E0 (736) -0xAD55, 0x94B2, 0xAD55, 0xF7BE, 0x8410, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C51, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02F0 (752) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0300 (768) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0310 (784) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x39E7, 0x2945, 0xA514, 0x9CF3, 0x8C71, 0xD6BB, 0x39C9, 0x0000, 0x632E, 0xF7DF, // 0x0320 (800) -0x7BEF, 0xAD54, 0x7BEF, 0xBDF7, 0xB596, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C71, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0330 (816) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0340 (832) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0350 (848) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x4A49, 0x18C3, 0x9492, 0x39E7, 0x3187, 0xA48F, 0x8323, 0x5A00, 0x93A6, 0xCDD5, // 0x0360 (864) -0x4209, 0x4249, 0x2965, 0x9CD2, 0xB575, 0x0000, 0x0000, 0x0000, 0x0000, 0x9492, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0370 (880) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0380 (896) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0390 (912) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x5ACB, 0x0000, 0x9D14, 0x2905, 0x6A40, 0xE643, 0xFFAE, 0xFFF3, 0xFF70, 0xDD86, // 0x03A0 (928) -0x7240, 0x1840, 0x18C3, 0xC65A, 0x73CF, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C51, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03B0 (944) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03C0 (960) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03D0 (976) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x738E, 0x0000, 0x5A6A, 0xD566, 0xFF66, 0xFFF8, 0xFFFD, 0xFFDC, 0xFFFD, 0xFFFA, // 0x03E0 (992) -0xFF0E, 0xE566, 0xC464, 0xC4CC, 0x2103, 0x0000, 0x0000, 0x0000, 0x0000, 0x6B6D, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03F0 (1008) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0400 (1024) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0410 (1040) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x7BEF, 0x0800, 0xB440, 0xFFC6, 0xFFF3, 0xFFB4, 0xFFB2, 0xFF92, 0xFF72, 0xFF53, // 0x0420 (1056) -0xFF55, 0xFF75, 0xFEF0, 0xF542, 0x8240, 0x0000, 0x0000, 0x0000, 0x0000, 0x4228, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0430 (1072) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0440 (1088) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0450 (1104) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x8432, 0x4140, 0xFFE2, 0xFFEB, 0xFFAC, 0xFF8B, 0xFF4C, 0xFF2C, 0xFEEC, 0xFECB, // 0x0460 (1120) -0xFE6A, 0xFE08, 0xFDA7, 0xFDC3, 0xA320, 0x0000, 0x0000, 0x0000, 0x0000, 0x18E3, 0xD69A, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0470 (1136) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0480 (1152) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0490 (1168) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x9D14, 0x28A0, 0xF6E0, 0xFFE1, 0xFF43, 0xFF04, 0xFEC4, 0xFE84, 0xFE23, 0xFDE1, // 0x04A0 (1184) -0xFD60, 0xFD20, 0xFD20, 0xFD20, 0x7241, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9CF3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x04B0 (1200) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x04C0 (1216) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x04D0 (1232) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xB5B6, 0x0000, 0xC4A9, 0xFEC0, 0xFF00, 0xFEA0, 0xFE40, 0xFE00, 0xFDA0, 0xFD60, // 0x04E0 (1248) -0xFD40, 0xFD20, 0xEC80, 0xDCC7, 0x8C0F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x52AA, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x04F0 (1264) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0500 (1280) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0510 (1296) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xAD75, 0x0000, 0xD69B, 0xF631, 0xF5C0, 0xFE80, 0xFE00, 0xFDC0, 0xFD60, 0xFD40, // 0x0520 (1312) -0xFCC0, 0xDC86, 0xCD93, 0xE73D, 0xE71C, 0x0861, 0x0000, 0x0000, 0x0000, 0x0000, 0x0861, 0xC618, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0530 (1328) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0540 (1344) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0550 (1360) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x632C, 0x0000, 0xD6BA, 0xFFFF, 0xF5F1, 0xFD40, 0xFD80, 0xFD20, 0xFCE0, 0xECA3, // 0x0560 (1376) -0xDD6F, 0xE6FC, 0xFFFF, 0xFFFF, 0xFFFF, 0x632C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5ACB, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0570 (1392) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0580 (1408) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0590 (1424) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xDEDB, 0x0861, 0x0000, 0xD69A, 0xFFFF, 0xFFFF, 0xFED8, 0xF631, 0xF610, 0xE5F2, 0xE6B9, // 0x05A0 (1440) -0xF7BF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xE71C, 0x10A2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0xB5B6, 0xFFFF, 0xFFFF, 0xFFFF, // 0x05B0 (1456) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x05C0 (1472) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x05D0 (1488) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0x39E7, 0x0000, 0x4228, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7FF, 0xF7DF, 0xFFFF, // 0x05E0 (1504) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x73AE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3186, 0xEF7D, 0xFFFF, 0xFFFF, // 0x05F0 (1520) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0600 (1536) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0610 (1552) -0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x738E, 0x0000, 0x18C3, 0xDEFB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0620 (1568) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFFF, 0xCE59, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6B4D, 0xFFFF, 0xFFFF, // 0x0630 (1584) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0640 (1600) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0650 (1616) -0xFFFF, 0xFFDF, 0xFFFF, 0xA514, 0x0000, 0x0000, 0x9CD3, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0660 (1632) -0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0x2965, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xAD55, 0xFFFF, // 0x0670 (1648) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0680 (1664) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0690 (1680) -0xFFDF, 0xFFFF, 0xD69A, 0x0861, 0x0000, 0x2945, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x06A0 (1696) -0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xFFFF, 0x7BCF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18C3, 0xD6BA, // 0x06B0 (1712) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x06C0 (1728) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x06D0 (1744) -0xFFFF, 0xFFDF, 0x39C7, 0x0000, 0x0000, 0x8430, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x06E0 (1760) -0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xFFFF, 0xCE79, 0x0841, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4228, // 0x06F0 (1776) -0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0700 (1792) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, // 0x0710 (1808) -0xFFFF, 0x94B2, 0x0000, 0x0020, 0x0020, 0xCE79, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, // 0x0720 (1824) -0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xFFDF, 0x4A69, 0x0000, 0x0841, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, // 0x0730 (1840) -0x8C71, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0740 (1856) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0750 (1872) -0xEF7D, 0x2104, 0x0020, 0x0000, 0x3186, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, // 0x0760 (1888) -0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xFFFF, 0xB5B6, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0000, // 0x0770 (1904) -0x10A2, 0xD6BA, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0780 (1920) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, // 0x0790 (1936) -0x8C71, 0x0000, 0x0861, 0x0000, 0x7BCF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, // 0x07A0 (1952) -0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xFFDF, 0x528A, 0x0000, 0x0841, 0x0020, 0x0020, 0x0020, 0x0020, // 0x07B0 (1968) -0x0000, 0x630C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x07C0 (1984) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, // 0x07D0 (2000) -0x3186, 0x0000, 0x0841, 0x10A2, 0xE71C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, // 0x07E0 (2016) -0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xF79E, 0xEF5D, 0xF7BE, 0xBDD7, 0x0841, 0x0861, 0x0841, 0x0841, 0x0841, 0x0020, // 0x07F0 (2032) -0x0020, 0x1082, 0xC638, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0800 (2048) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xBDD7, // 0x0810 (2064) -0x0020, 0x1082, 0x0000, 0x7BEF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, // 0x0820 (2080) -0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF7D, 0x4208, 0x0020, 0x0861, 0x0861, 0x0841, 0x0841, // 0x0830 (2096) -0x0841, 0x0000, 0x630C, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0840 (2112) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x6B4D, // 0x0850 (2128) -0x0000, 0x0861, 0x2104, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, // 0x0860 (2144) -0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xE73C, 0xF7BE, 0x8430, 0x0000, 0x1082, 0x0861, 0x0861, 0x0861, // 0x0870 (2160) -0x0861, 0x0020, 0x18C3, 0xCE79, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0880 (2176) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF5D, 0x2124, // 0x0890 (2192) -0x0861, 0x0020, 0x8410, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, // 0x08A0 (2208) -0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xEF7D, 0xB5B6, 0x0861, 0x1082, 0x1082, 0x0861, 0x0861, // 0x08B0 (2224) -0x0861, 0x0861, 0x0000, 0x8430, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x08C0 (2240) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xA514, 0x0020, // 0x08D0 (2256) -0x10A2, 0x1082, 0xD69A, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, // 0x08E0 (2272) -0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xEF5D, 0xCE79, 0x2124, 0x1082, 0x10A2, 0x1082, 0x1082, // 0x08F0 (2288) -0x0861, 0x1082, 0x0000, 0x4208, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0900 (2304) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0x4208, 0x0861, // 0x0910 (2320) -0x1082, 0x31A6, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, // 0x0920 (2336) -0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEDB, 0x39C7, 0x1082, 0x10A2, 0x10A2, 0x1082, // 0x0930 (2352) -0x1082, 0x1082, 0x0841, 0x18C3, 0xC618, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0940 (2368) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xA534, 0x0841, 0x18C3, // 0x0950 (2384) -0x0841, 0x630C, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, // 0x0960 (2400) -0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xDEFB, 0xE73C, 0x4A49, 0x0861, 0x18C3, 0x10A2, 0x10A2, // 0x0970 (2416) -0x10A2, 0x1082, 0x1082, 0x0841, 0x9CD3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0980 (2432) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF7D, 0x3186, 0x1082, 0x18E3, // 0x0990 (2448) -0x0861, 0x94B2, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, // 0x09A0 (2464) -0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEDB, 0xE73C, 0x4A69, 0x1082, 0x18E3, 0x18C3, 0x10A2, // 0x09B0 (2480) -0x10A2, 0x10A2, 0x10A2, 0x0020, 0x73AE, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x09C0 (2496) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x94B2, 0x0841, 0x18E3, 0x18E3, // 0x09D0 (2512) -0x0861, 0xAD75, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, // 0x09E0 (2528) -0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEFB, 0xDEDB, 0xE73C, 0x52AA, 0x10A2, 0x2104, 0x18E3, 0x18C3, // 0x09F0 (2544) -0x18C3, 0x18C3, 0x10A2, 0x0841, 0x630C, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0A00 (2560) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x632C, 0x0861, 0x18E4, 0x18E4, // 0x0A10 (2576) -0x1082, 0xC638, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, // 0x0A20 (2592) -0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEFB, 0xDEFB, 0xD6BA, 0xE71C, 0x6B4D, 0x10A2, 0x18C3, 0x18C3, 0x10A2, // 0x0A30 (2608) -0x10A2, 0x10A2, 0x18C3, 0x0861, 0x5AEB, 0xE73C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0A40 (2624) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x8410, 0x0862, 0x3143, 0x2924, // 0x0A50 (2640) -0x0882, 0xBDD7, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, // 0x0A60 (2656) -0xEF5D, 0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, 0xDEDB, 0xE73C, 0x630C, 0x2103, 0x4A69, 0x632C, 0x6B4D, // 0x0A70 (2672) -0x528A, 0x2965, 0x18C3, 0x1081, 0x738E, 0xE73C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0A80 (2688) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xB596, 0x7A40, 0xECA0, 0xCC00, // 0x0A90 (2704) -0x3941, 0xA535, 0xFFFF, 0xF7BE, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, // 0x0AA0 (2720) -0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEFB, 0xDEFB, 0xDEFB, 0xD6DB, 0xCE38, 0xC618, 0x4A48, 0x4A49, 0x6B6D, 0x6B4D, 0x6B4D, // 0x0AB0 (2736) -0x6B4D, 0x630C, 0x3186, 0x18E4, 0x9492, 0xEF7D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0AC0 (2752) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xC488, 0xFD41, 0xFE6D, 0xFE6A, // 0x0AD0 (2768) -0xDC60, 0x5A25, 0xB5D8, 0xFFFF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, // 0x0AE0 (2784) -0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, 0xD6BB, 0xBCAB, 0xD462, 0xD462, 0x49E4, 0x10C3, 0x18C3, 0x18C3, 0x18C3, // 0x0AF0 (2800) -0x18C3, 0x18E3, 0x10A3, 0x49C4, 0xB575, 0xF7BF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0B00 (2816) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xCD70, 0xECA0, 0xFF14, 0xFF9B, 0xFF7B, // 0x0B10 (2832) -0xFECF, 0xC3A0, 0x3143, 0x9CF3, 0xFFFF, 0xF7BE, 0xF79E, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, // 0x0B20 (2848) -0xE73C, 0xE71C, 0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, 0xDEFB, 0xC617, 0xDC60, 0xFD60, 0xFD20, 0x3120, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0B30 (2864) -0x0000, 0x0000, 0x3900, 0xE460, 0xB46A, 0xEF9F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0B40 (2880) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xD5F4, 0xDC20, 0xFE8E, 0xFF59, 0xFF36, 0xFF36, // 0x0B50 (2896) -0xFF59, 0xFE6B, 0xA300, 0x18E4, 0x8410, 0xFFBE, 0xF7BE, 0xEF7D, 0xF79E, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE73C, // 0x0B60 (2912) -0xE71C, 0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, 0xDEBA, 0xDEFB, 0xC5B5, 0xE4A1, 0xFEF2, 0xF716, 0x3164, 0x18E4, 0x2103, 0x1082, 0x1082, // 0x0B70 (2928) -0x0021, 0x1061, 0xD5D0, 0xFE27, 0xB3E3, 0xCE9B, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0B80 (2944) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF77D, 0xE697, 0xDDAF, 0xD4C8, 0xE480, 0xFE29, 0xFF36, 0xFF15, 0xFF35, 0xFF15, // 0x0B90 (2960) -0xFF15, 0xFF36, 0xFDA5, 0x6A42, 0x1905, 0x6B4C, 0xE73C, 0xFFDF, 0xEF5D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE73C, 0xE71C, // 0x0BA0 (2976) -0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, 0xDEDB, 0xD6BA, 0xDEDB, 0xBDB5, 0xE4C3, 0xFF56, 0xFFDB, 0xAD10, 0x10A2, 0x10C3, 0x18E4, 0x1082, // 0x0BB0 (2992) -0x2922, 0xC5B1, 0xFFDC, 0xFED1, 0xB3A2, 0xBE19, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0BC0 (3008) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE6B8, 0xD484, 0xE4C0, 0xF584, 0xFE28, 0xFECF, 0xFF14, 0xFF13, 0xFF13, 0xFF13, 0xFF13, // 0x0BD0 (3024) -0xFF13, 0xFF14, 0xFEF0, 0xDC80, 0x41C5, 0x2945, 0x5269, 0xCE59, 0xF7BE, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xE71C, // 0x0BE0 (3040) -0xDEFB, 0xDEFB, 0xDEDB, 0xDEDB, 0xD6BA, 0xD69A, 0xD6DB, 0xBD95, 0xE4E2, 0xFF33, 0xFF36, 0xFF97, 0xDDF1, 0x8B66, 0x7AE4, 0x9BC7, // 0x0BF0 (3056) -0xEEB2, 0xFF97, 0xFF37, 0xFEF0, 0xC3E0, 0xB5B7, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0C00 (3072) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xD52B, 0xFD60, 0xFECD, 0xFF33, 0xFF13, 0xFF12, 0xFEF1, 0xFEF1, 0xFEF1, 0xFEF1, 0xFEF1, // 0x0C10 (3088) -0xFEF1, 0xFEF1, 0xFF12, 0xFE69, 0x9B41, 0x31A8, 0x31A6, 0x39E7, 0xB5B6, 0xF79E, 0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEFB, // 0x0C20 (3104) -0xDEFB, 0xDEDB, 0xDEDB, 0xD6BA, 0xD6BA, 0xD699, 0xD6BA, 0xBD94, 0xE502, 0xFF12, 0xFF15, 0xFEF4, 0xFF55, 0xFF95, 0xFF54, 0xFF95, // 0x0C30 (3120) -0xFF35, 0xFEF4, 0xFF14, 0xFF14, 0xF5A4, 0xB426, 0xE75E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0C40 (3136) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xD54C, 0xFDA0, 0xFECE, 0xFEF0, 0xFECF, 0xFEEF, 0xFEEF, 0xFEF0, 0xFEEF, 0xFEF0, 0xFEF0, // 0x0C50 (3152) -0xFEF0, 0xFEEF, 0xFEF0, 0xFEEF, 0xF582, 0x6244, 0x39E8, 0x39C6, 0x528A, 0xE71C, 0xE73C, 0xE71C, 0xE71C, 0xE71C, 0xDEFB, 0xDEFB, // 0x0C60 (3168) -0xDEDB, 0xDEDB, 0xD6BA, 0xD6BA, 0xD69A, 0xCE79, 0xCE9A, 0xBD94, 0xE522, 0xFF10, 0xFEF2, 0xFEF2, 0xFEF2, 0xFEF2, 0xFEF2, 0xFEF2, // 0x0C70 (3184) -0xFEF2, 0xFF12, 0xFEF2, 0xFEF2, 0xFF12, 0xED85, 0xBC68, 0xE73D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0C80 (3200) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xD5B0, 0xF580, 0xFECB, 0xFEEE, 0xFECD, 0xFEEE, 0xFEEE, 0xFEEE, 0xFEEE, 0xFEEE, 0xFEEE, // 0x0C90 (3216) -0xFEEE, 0xFEEE, 0xFECD, 0xFECE, 0xFECA, 0xCC60, 0x41C7, 0x39C7, 0x4228, 0xCE79, 0xEF5D, 0xE71C, 0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, // 0x0CA0 (3232) -0xDEDB, 0xD6BA, 0xD6BA, 0xD69A, 0xCE79, 0xCE59, 0xCE9A, 0xBD73, 0xED42, 0xFF0F, 0xFEF0, 0xFEF0, 0xFEF0, 0xFEF0, 0xFEF0, 0xFEF0, // 0x0CB0 (3248) -0xFEF0, 0xFEF0, 0xFEF0, 0xFEF0, 0xFEF0, 0xFF31, 0xF628, 0xC4A7, 0xDE57, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0CC0 (3264) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDE13, 0xF560, 0xFEC9, 0xFECD, 0xFECC, 0xFECC, 0xFECC, 0xFECC, 0xFECC, 0xFECC, 0xFECC, // 0x0CD0 (3280) -0xFEEC, 0xFEEC, 0xFECC, 0xFECC, 0xFEED, 0xFE44, 0x9323, 0x52CC, 0x73AE, 0xD69A, 0xE73C, 0xDEFB, 0xDEFB, 0xDEFB, 0xDEDB, 0xDEDB, // 0x0CE0 (3296) -0xD6BA, 0xD6BA, 0xD69A, 0xCE79, 0xCE59, 0xD69A, 0xB5D8, 0x7B28, 0xF5A2, 0xFF0F, 0xFECE, 0xFEEE, 0xFEEE, 0xFEEE, 0xFEEE, 0xFEEE, // 0x0CF0 (3312) -0xFEEE, 0xFEEE, 0xFEEE, 0xFEEE, 0xFEEE, 0xFECD, 0xFF10, 0xFEA9, 0xCC60, 0xD615, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0D00 (3328) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDE55, 0xED80, 0xFEA4, 0xFECA, 0xFECA, 0xFECA, 0xFECA, 0xFECA, 0xFECA, 0xFECA, 0xFEC9, // 0x0D10 (3344) -0xFEA7, 0xFEA6, 0xFEA8, 0xFEC9, 0xFECB, 0xFEEA, 0xEDA2, 0xB4F0, 0xCE9A, 0xDEFB, 0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, 0xDEDB, 0xD6BA, // 0x0D20 (3360) -0xD6BA, 0xD69A, 0xCE79, 0xCE79, 0xD6BA, 0xB596, 0x4A8B, 0x72A4, 0xFE45, 0xFEEC, 0xFECC, 0xFEEC, 0xFEEC, 0xFEEC, 0xFEEC, 0xFEEC, // 0x0D30 (3376) -0xFEEC, 0xFECB, 0xFECB, 0xFEEC, 0xFEEC, 0xFEEC, 0xFECC, 0xFEA5, 0xFDE0, 0xAC8B, 0xE75E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0D40 (3392) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE632, 0xF5E0, 0xFE80, 0xFE82, 0xFEC7, 0xFEC8, 0xFEC8, 0xFEC8, 0xFEC7, 0xFEA4, 0xFE61, // 0x0D50 (3408) -0xFE60, 0xFE60, 0xFE60, 0xFE61, 0xFE83, 0xFEA6, 0xFEA3, 0xDD22, 0xD658, 0xE75D, 0xDEDB, 0xDEDB, 0xDEDB, 0xD6BA, 0xD6BA, 0xD69A, // 0x0D60 (3424) -0xD69A, 0xD69A, 0xD6BA, 0xCE59, 0x9492, 0x5289, 0x39E9, 0x9B84, 0xFEA3, 0xFEEB, 0xFEEA, 0xFEEA, 0xFEEA, 0xFEEA, 0xFEEA, 0xFEC8, // 0x0D70 (3440) -0xFE84, 0xFE61, 0xFE61, 0xFEA5, 0xFEC9, 0xFEA7, 0xFEA2, 0xFE80, 0xBC41, 0x8C0F, 0xE71C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0D80 (3456) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDDCE, 0xFE40, 0xFEA0, 0xFE80, 0xFE80, 0xFEA2, 0xFEA2, 0xFEA2, 0xFEA0, 0xFE80, 0xFE80, // 0x0D90 (3472) -0xFEA0, 0xFEA0, 0xFEA0, 0xFE80, 0xFE80, 0xFE80, 0xFE80, 0xFE80, 0xCCE5, 0xD69A, 0xE73C, 0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, 0xDEDB, // 0x0DA0 (3488) -0xD69A, 0xBDF7, 0x9CD3, 0x630C, 0x4228, 0x4A69, 0x422A, 0xB423, 0xFEC0, 0xFEA5, 0xFEE7, 0xFEC7, 0xFEC7, 0xFEC6, 0xFEA3, 0xFE80, // 0x0DB0 (3504) -0xFE80, 0xFE80, 0xFE80, 0xFE60, 0xFEA0, 0xFEC0, 0xEDC0, 0xA3A4, 0x732C, 0xAD96, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0DC0 (3520) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE5A8, 0xFEC0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0DD0 (3536) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEE0, 0xF640, 0x93A8, 0x8C72, 0xA534, 0xAD75, 0xA534, 0x9CF3, 0x8C51, // 0x0DE0 (3552) -0x738E, 0x5ACB, 0x4A49, 0x4A69, 0x528A, 0x4A8A, 0x5249, 0xD502, 0xFEE0, 0xFEA0, 0xFEC0, 0xFEC1, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, // 0x0DF0 (3568) -0xFEA0, 0xFEA0, 0xFEA0, 0xFEE0, 0xFE60, 0xC482, 0x7B09, 0x7BD0, 0xB5B7, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0E00 (3584) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDD8A, 0xFEC0, 0xFF20, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, // 0x0E10 (3600) -0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEC0, 0xFF20, 0xAC02, 0x4209, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, // 0x0E20 (3616) -0x528A, 0x528A, 0x52AA, 0x52AA, 0x528A, 0x4A8A, 0x5A69, 0xE5C1, 0xFF00, 0xFEC0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, // 0x0E30 (3632) -0xFEC0, 0xFEE0, 0xFF00, 0xE561, 0x9367, 0x736E, 0x9D14, 0xD6BA, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0E40 (3648) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xD617, 0xCCC5, 0xF620, 0xFEE0, 0xFF40, 0xFF40, 0xFF40, 0xFF20, 0xFF00, 0xFF00, 0xFF00, // 0x0E50 (3664) -0xFF00, 0xFF00, 0xFF00, 0xFF00, 0xFF00, 0xFF00, 0xFF00, 0xFF00, 0xFF40, 0xB483, 0x4A8B, 0x5ACA, 0x5ACB, 0x5ACB, 0x5ACB, 0x5ACB, // 0x0E60 (3680) -0x5ACB, 0x52AA, 0x52AA, 0x52AA, 0x52AA, 0x4A8A, 0x6289, 0xEE20, 0xFF20, 0xFEE0, 0xFF00, 0xFF00, 0xFF00, 0xFF00, 0xFF00, 0xFEE0, // 0x0E70 (3696) -0xFF20, 0xFEC0, 0xBC64, 0x732B, 0x8C72, 0xCE58, 0xEF7D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0E80 (3712) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF7E, 0xB576, 0x93EE, 0xA408, 0xC4A5, 0xDD63, 0xF641, 0xFEC0, 0xFF40, 0xFF80, 0xFF60, // 0x0E90 (3728) -0xFF40, 0xFF20, 0xFF20, 0xFF40, 0xFF40, 0xFF40, 0xFF20, 0xFF20, 0xFF80, 0xAC03, 0x4A6B, 0x5ACA, 0x5ACB, 0x5ACB, 0x5AEB, 0x5AEB, // 0x0EA0 (3744) -0x5AEB, 0x630C, 0x630C, 0x630C, 0x5AEB, 0x52CB, 0x5A69, 0xE5E1, 0xFF60, 0xFF20, 0xFF20, 0xFF20, 0xFF20, 0xFF20, 0xFF20, 0xFF60, // 0x0EB0 (3760) -0xF640, 0xA3A7, 0x738F, 0xAD96, 0xE71C, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0EC0 (3776) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF79E, 0xD6DB, 0xB5B8, 0x9CD4, 0x9431, 0x93EE, 0x9C0A, 0xB467, 0xD544, 0xF660, // 0x0ED0 (3792) -0xFF60, 0xFFA0, 0xFF80, 0xFF60, 0xFF40, 0xFF40, 0xFF60, 0xFFA0, 0xD521, 0x730A, 0x73CF, 0x8C71, 0x9CD3, 0x9CF3, 0xA514, 0xA534, // 0x0EE0 (3808) -0xAD55, 0xB596, 0xB5B6, 0xB596, 0xAD55, 0x9CF3, 0x83F0, 0xCD04, 0xFFA0, 0xFF40, 0xFF40, 0xFF40, 0xFF40, 0xFF40, 0xFFA0, 0xF621, // 0x0EF0 (3824) -0x8B49, 0x8431, 0xCE58, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F00 (3840) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xF79E, 0xE73C, 0xD6BB, 0xBE19, 0xA556, 0x9472, 0x9C0D, // 0x0F10 (3856) -0xB447, 0xDD82, 0xFEE0, 0xFFA0, 0xFFC0, 0xFFC0, 0xFF80, 0xC4C2, 0x730C, 0x9CF4, 0xD69A, 0xEF5D, 0xEF7D, 0xF79E, 0xF79E, 0xF7BE, // 0x0F20 (3872) -0xF7BE, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xEF7D, 0xDF1C, 0xC530, 0xF620, 0xFFC0, 0xFFC0, 0xFFC0, 0xFFC0, 0xFF80, 0xE5A2, 0x834A, // 0x0F30 (3888) -0x8C93, 0xDEDA, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F40 (3904) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDE, 0xEF7D, 0xD6BB, // 0x0F50 (3920) -0xAD77, 0x9452, 0x9BEB, 0xB466, 0xC524, 0xC543, 0xA3E5, 0x734D, 0xAD76, 0xEF5C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F60 (3936) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDF1C, 0xACB0, 0xBCA6, 0xD544, 0xCD64, 0xCD05, 0xAC07, 0x7B6D, 0x9CF4, // 0x0F70 (3952) -0xE6FB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F80 (3968) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F90 (3984) -0xFFDE, 0xE75D, 0xC65A, 0xA536, 0x9493, 0x8C53, 0x94B4, 0xBE18, 0xEF7D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0FA0 (4000) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xDEFC, 0xAD57, 0x9493, 0x8C73, 0x8C73, 0x94D4, 0xBE18, 0xEF5D, // 0x0FB0 (4016) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0FC0 (4032) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0FD0 (4048) -0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0xEF5C, 0xE73C, 0xEF5C, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0FE0 (4064) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0xEF5C, 0xE73C, 0xEF5C, 0xEF7D, 0xFFDE, 0xFFFF, // 0x0FF0 (4080) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x1000 (4096) -}; diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_CPLD_PageSwitching/UTFT_CPLD_PageSwitching.ino b/libraries/UTFT/examples/Arduino (AVR)/UTFT_CPLD_PageSwitching/UTFT_CPLD_PageSwitching.ino deleted file mode 100644 index b3967a8..0000000 --- a/libraries/UTFT/examples/Arduino (AVR)/UTFT_CPLD_PageSwitching/UTFT_CPLD_PageSwitching.ino +++ /dev/null @@ -1,93 +0,0 @@ -// UTFT_CPLD_PageSwitching (C)2014 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of page switching on CPLD-based display modules.. -// -// This demo was made for modules with a screen resolution -// of 800x480 pixels. -// -// This program requires the UTFT library. -// -// NOTE: The display will be black for 10-15 seconds during the start -// - -#include - -// Declare which fonts we will be using -extern uint8_t BigFont[]; -extern uint8_t SevenSegNumFont[]; - -// Set the pins to the correct ones for your development shield -// ------------------------------------------------------------ -// Arduino Mega: -// ------------------- -// Standard Arduino Mega/Due shield : ,38,39,40,41 -// CTE TFT LCD/SD Shield for Arduino Mega : ,38,39,40,41 -// -// Remember to change the model parameter to suit your display module! -UTFT myGLCD(CPLD,38,39,40,41); - -void setup() -{ - myGLCD.InitLCD(); -} - -void loop() -{ - myGLCD.setBackColor(VGA_TRANSPARENT); - - myGLCD.setBrightness(0); - for (byte pg=0; pg<8; pg++) - { - myGLCD.setWritePage(pg); - myGLCD.clrScr(); - for (int ln=0; ln<480; ln+=2) - { - switch (pg) - { - case 0: - myGLCD.setColor(ln/2, 0, 0); - break; - case 1: - myGLCD.setColor(0, ln/2, 0); - break; - case 2: - myGLCD.setColor(0, 0, ln/2); - break; - case 3: - myGLCD.setColor(ln/4, ln/2, 0); - break; - case 4: - myGLCD.setColor(0, ln/2, ln/2); - break; - case 5: - myGLCD.setColor(ln/2, 0, ln/2); - break; - case 6: - myGLCD.setColor(ln/2, ln/2, 0); - break; - case 7: - myGLCD.setColor(0, ln/2, ln/4); - break; - } - myGLCD.drawLine(0, ln, 799, ln); - myGLCD.drawLine(0, ln+1, 799, ln+1); - } - myGLCD.setColor(VGA_WHITE); - myGLCD.setFont(BigFont); - myGLCD.print("This is page:", CENTER, 200); - myGLCD.setFont(SevenSegNumFont); - myGLCD.printNumI(pg, CENTER, 240); - } - myGLCD.setBrightness(16); - - while(1) - { - for (byte pg=0; pg<8; pg++) - { - myGLCD.setDisplayPage(pg); - delay(500); - } - } -} - diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_128x128_Serial/UTFT_Demo_128x128_Serial.ino b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_128x128_Serial/UTFT_Demo_128x128_Serial.ino deleted file mode 100644 index 45a97e6..0000000 --- a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_128x128_Serial/UTFT_Demo_128x128_Serial.ino +++ /dev/null @@ -1,335 +0,0 @@ -// UTFT_Demo_128x128_Serial (C)2012 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of how to use most of the functions -// of the library with a supported display modules. -// -// This demo was made to work on the 128x128 modules. -// Any other size displays may cause strange behaviour. -// -// This program requires the UTFT library. -// - -#include - -// Declare which fonts we will be using -extern uint8_t SmallFont[]; - -// Declare an instance of the class -UTFT myGLCD(LPH9135,6,5,2,3,4); // Remember to change the model parameter to suit your display module! - -void setup() -{ - randomSeed(analogRead(0)); - -// Setup the LCD - myGLCD.InitLCD(PORTRAIT); - myGLCD.setFont(SmallFont); -} - -void loop() -{ - byte buf[126]; - int x, x2; - int y, y2; - int r; - -// Clear the screen and draw the frame - myGLCD.clrScr(); - myGLCD.setContrast(64); - - myGLCD.setColor(255, 0, 0); - myGLCD.fillRect(0,0,127,12); - myGLCD.setColor(64, 64, 64); - myGLCD.fillRect(0,117,127,127); - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255,0,0); - myGLCD.print("Universal TFT", CENTER, 0); - myGLCD.setBackColor(64,64,64); - myGLCD.setColor(255,255,0); - myGLCD.print("H.Karlsen", LEFT, 116); - myGLCD.print("(C)2012", RIGHT, 116); - myGLCD.setColor(0,255,0); - myGLCD.drawRect(0,13,127,116); - -// Draw crosshairs - myGLCD.setColor(0,0,255); - myGLCD.drawLine(63,14,63,115); - myGLCD.drawLine(1,63,126,63); - for (int i=3; i<128; i+=10) - myGLCD.drawLine(i, 61, i, 65); - for (int i=14; i<118; i+=10) - myGLCD.drawLine(61, i, 65, i); - -// Draw sin-, cos- and tan-lines - myGLCD.setColor(0,255,255); - myGLCD.setBackColor(0,0,0); - myGLCD.print("Sin", 2, 14); - for (int i=1; i<126; i++) - { - myGLCD.drawPixel(i,63+(sin(((i*2.85)*3.14)/180)*45)); - } - - myGLCD.setColor(255,0,0); - myGLCD.print("Cos", 2, 26); - for (int i=1; i<126; i++) - { - myGLCD.drawPixel(i,63+(cos(((i*2.85)*3.14)/180)*45)); - } - - myGLCD.setColor(255,255,0); - myGLCD.print("Tan", 2, 38); - for (int i=1; i<126; i++) - { - myGLCD.drawPixel(i,63+(tan(((i*2.85)*3.14)/180))); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,126,115); - myGLCD.setColor(0,0,255); - myGLCD.drawLine(63,14,63,115); - myGLCD.drawLine(1,63,126,63); - -// Draw a moving sinewave - x=1; - for (int i=1; i<3654; i++) - { - x++; - if (x==127) - x=1; - if (i>127) - { - if ((x==63)||(buf[x-1]==63)) - myGLCD.setColor(0,0,255); - else - myGLCD.setColor(0,0,0); - myGLCD.drawPixel(x,buf[x-1]); - } - myGLCD.setColor(0,255,255); - y=63+(sin(((i*1.3)*3.14)/180)*45); - myGLCD.drawPixel(x,y); - buf[x-1]=y; -// delay(3); - } - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,126,115); - -// Draw some filled rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRect(10+(i*10),10+(i*10), 60+(i*10), 60+(i*10)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,126,115); - -// Draw some filled, rounded rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRoundRect(70-(i*10),10+(i*10), 120-(i*10), 60+(i*10)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,126,115); - -// Draw some filled circles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillCircle(30+(i*10),35+(i*10), 25); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,126,115); - - // Draw some lines in a pattern - myGLCD.setColor (255,0,0); - for (int i=11; i<115; i+=3) - { - myGLCD.drawLine(1, i, i-10, 115); - } - myGLCD.setColor (255,0,0); - for (int i=112; i>14; i-=3) - { - myGLCD.drawLine(126, i, i+14, 14); - } - myGLCD.setColor (0,255,255); - for (int i=115; i>14; i-=3) - { - myGLCD.drawLine(1, i, 116-i, 14); - } - myGLCD.setColor (0,255,255); - for (int i=14; i<115; i+=3) - { - myGLCD.drawLine(126, i, 140-i, 115); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,126,115); - -// Draw some random circles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=22+random(85); - y=35+random(59); - r=random(20); - myGLCD.drawCircle(x, y, r); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,126,115); - -// Draw some random rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(124); - y=15+random(101); - x2=2+random(124); - y2=15+random(101); - myGLCD.drawRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,126,115); - -// Draw some random rounded rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(124); - y=15+random(101); - x2=2+random(124); - y2=15+random(101); - myGLCD.drawRoundRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,126,115); - -// Draw some random lines - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(124); - y=15+random(101); - x2=2+random(124); - y2=15+random(101); - myGLCD.drawLine(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,126,115); - -// Draw some random pixels - for (int i=0; i<5000; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - myGLCD.drawPixel(2+random(124), 15+random(101)); - } - - delay (2000); - -// Set up the "Finished"-screen - myGLCD.setContrast(0); - myGLCD.fillScr(0,0,255); - myGLCD.setColor(255,0,0); - myGLCD.fillRoundRect(2, 40, 125, 88); - - myGLCD.setColor(255,255,255); - myGLCD.setBackColor(255,0,0); - myGLCD.print("That's it!", CENTER, 46); - myGLCD.print("Restarting in a", CENTER, 66); - myGLCD.print("few seconds...", CENTER, 76); - - myGLCD.setColor(0,0,0); - myGLCD.setBackColor(0,0,255); - myGLCD.print("Runtime: (msecs)", CENTER, 108); - myGLCD.printNumI(millis(), CENTER, 118); - - myGLCD.setContrast(64); - - delay (10000); - -// Fade screen to black - for (int i=64; i>0; i--) - { - myGLCD.setContrast(i); - delay(100); - } -} - - diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_160x128_Serial/UTFT_Demo_160x128_Serial.ino b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_160x128_Serial/UTFT_Demo_160x128_Serial.ino deleted file mode 100644 index 365b716..0000000 --- a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_160x128_Serial/UTFT_Demo_160x128_Serial.ino +++ /dev/null @@ -1,328 +0,0 @@ -// UTFT_Demo_160x128_Serial (C)2014 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of how to use most of the functions -// of the library with a supported display modules. -// -// This demo was made for modules with a screen resolution -// of 160x128 pixels. -// -// This program requires the UTFT library. -// - -#include - -// Declare which fonts we will be using -extern uint8_t SmallFont[]; - -// Usage: myGLCD(, SDA, SCL, CS, RST[, RS]); -// -// When using the DM-TFT18-101 and shield from DisplayModule you should use the following: -// UTFT myGLCD(DMTFT18101,2,3,4,6,5); -// -UTFT myGLCD(ITDB18SP,11,10,9,12,8); // Remember to change the model parameter to suit your display module! - -void setup() -{ - randomSeed(analogRead(0)); - -// Setup the LCD - myGLCD.InitLCD(); - myGLCD.setFont(SmallFont); -} - -void loop() -{ - int buf[158]; - int x, x2; - int y, y2; - int r; - -// Clear the screen and draw the frame - myGLCD.clrScr(); - - myGLCD.setColor(255, 0, 0); - myGLCD.fillRect(0, 0, 159, 13); - myGLCD.setColor(64, 64, 64); - myGLCD.fillRect(0, 114, 159, 127); - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("Universal TFT Lib.", CENTER, 1); - myGLCD.setBackColor(64, 64, 64); - myGLCD.setColor(255,255,0); - myGLCD.print("H.Karlsen", LEFT, 114); - myGLCD.print("(C)2014", RIGHT, 114); - - myGLCD.setColor(0, 0, 255); - myGLCD.drawRect(0, 13, 159, 113); - -// Draw crosshairs - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(79, 14, 79, 113); - myGLCD.drawLine(1, 63, 158, 63); - - for (int i=9; i<150; i+=10) - myGLCD.drawLine(i, 61, i, 65); - for (int i=19; i<110; i+=10) - myGLCD.drawLine(77, i, 81, i); - -// Draw sin-, cos- and tan-lines - myGLCD.setColor(0,255,255); - myGLCD.print("Sin", 5, 15); - for (int i=1; i<158; i++) - { - myGLCD.drawPixel(i,63+(sin(((i*2.27)*3.14)/180)*40)); - } - - myGLCD.setColor(255,0,0); - myGLCD.print("Cos", 5, 27); - for (int i=1; i<158; i++) - { - myGLCD.drawPixel(i,63+(cos(((i*2.27)*3.14)/180)*40)); - } - - myGLCD.setColor(255,255,0); - myGLCD.print("Tan", 5, 39); - for (int i=1; i<158; i++) - { - myGLCD.drawPixel(i,63+(tan(((i*2.27)*3.14)/180))); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,158,113); - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(79, 14, 79, 113); - myGLCD.drawLine(1, 63, 158, 63); - -// Draw a moving sinewave - x=1; - for (int i=1; i<(158*20); i++) - { - x++; - if (x==159) - x=1; - if (i>159) - { - if ((x==79)||(buf[x-1]==63)) - myGLCD.setColor(0,0,255); - else - myGLCD.setColor(0,0,0); - myGLCD.drawPixel(x,buf[x-1]); - } - myGLCD.setColor(0,255,255); - y=63+(sin(((i*2.5)*3.14)/180)*(40-(i / 100))); - myGLCD.drawPixel(x,y); - buf[x-1]=y; - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,158,113); - -// Draw some filled rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRect(39+(i*10), 23+(i*10), 59+(i*10), 43+(i*10)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,158,113); - -// Draw some filled, rounded rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRoundRect(99-(i*10), 23+(i*10), 119-(i*10), 43+(i*10)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,158,113); - -// Draw some filled circles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillCircle(49+(i*10),33+(i*10), 15); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,158,113); - -// Draw some lines in a pattern - myGLCD.setColor (255,0,0); - for (int i=14; i<113; i+=5) - { - myGLCD.drawLine(1, i, (i*1.44)-10, 112); - } - myGLCD.setColor (255,0,0); - for (int i=112; i>15; i-=5) - { - myGLCD.drawLine(158, i, (i*1.44)-12, 14); - } - myGLCD.setColor (0,255,255); - for (int i=112; i>15; i-=5) - { - myGLCD.drawLine(1, i, 172-(i*1.44), 14); - } - myGLCD.setColor (0,255,255); - for (int i=15; i<112; i+=5) - { - myGLCD.drawLine(158, i, 171-(i*1.44), 112); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,158,113); - -// Draw some random circles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=22+random(116); - y=35+random(57); - r=random(20); - myGLCD.drawCircle(x, y, r); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,158,113); - -// Draw some random rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(156); - y=16+random(95); - x2=2+random(156); - y2=16+random(95); - myGLCD.drawRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,158,113); - -// Draw some random rounded rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(156); - y=16+random(95); - x2=2+random(156); - y2=16+random(95); - myGLCD.drawRoundRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,158,113); - - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(156); - y=16+random(95); - x2=2+random(156); - y2=16+random(95); - myGLCD.drawLine(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,158,113); - - for (int i=0; i<5000; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - myGLCD.drawPixel(2+random(156), 16+random(95)); - } - - delay(2000); - - myGLCD.fillScr(0, 0, 255); - myGLCD.setColor(255, 0, 0); - myGLCD.fillRoundRect(10, 17, 149, 72); - - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("That's it!", CENTER, 20); - myGLCD.print("Restarting in a", CENTER, 45); - myGLCD.print("few seconds...", CENTER, 57); - - myGLCD.setColor(0, 255, 0); - myGLCD.setBackColor(0, 0, 255); - myGLCD.print("Runtime: (msecs)", CENTER, 103); - myGLCD.printNumI(millis(), CENTER, 115); - - delay (10000); -} - diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_220x176/UTFT_Demo_220x176.ino b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_220x176/UTFT_Demo_220x176.ino deleted file mode 100644 index 50e9c32..0000000 --- a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_220x176/UTFT_Demo_220x176.ino +++ /dev/null @@ -1,335 +0,0 @@ -// UTFT_Demo_220x176 (C)2014 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of how to use most of the functions -// of the library with a supported display modules. -// -// This demo was made for modules with a screen resolution -// of 220x176 pixels. -// -// This program requires the UTFT library. -// - -#include - -// Declare which fonts we will be using -extern uint8_t SmallFont[]; - -// Set the pins to the correct ones for your development shield -// ------------------------------------------------------------ -// Arduino Uno / 2009: -// ------------------- -// Standard Arduino Uno/2009 shield : ,A5,A4,A3,A2 -// DisplayModule Arduino Uno TFT shield : ,A5,A4,A3,A2 -// -// Arduino Mega: -// ------------------- -// Standard Arduino Mega/Due shield : ,38,39,40,41 -// CTE TFT LCD/SD Shield for Arduino Mega : ,38,39,40,41 -// -// Remember to change the model parameter to suit your display module! -UTFT myGLCD(ITDB22,A5,A4,A3,A2); - -void setup() -{ - randomSeed(analogRead(0)); - -// Setup the LCD - myGLCD.InitLCD(); - myGLCD.setFont(SmallFont); -} - -void loop() -{ - int buf[218]; - int x, x2; - int y, y2; - int r; - -// Clear the screen and draw the frame - myGLCD.clrScr(); - - myGLCD.setColor(255, 0, 0); - myGLCD.fillRect(0, 0, 219, 13); - myGLCD.setColor(64, 64, 64); - myGLCD.fillRect(0, 162, 219, 175); - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("** Universal TFT Library **", CENTER, 1); - myGLCD.setBackColor(64, 64, 64); - myGLCD.setColor(255,255,0); - myGLCD.print("> elec.henningkarlsen.com <", CENTER, 163); - - myGLCD.setColor(0, 0, 255); - myGLCD.drawRect(0, 14, 219, 161); - -// Draw crosshairs - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(109, 15, 109, 160); - myGLCD.drawLine(1, 88, 218, 88); - - for (int i=9; i<210; i+=10) - myGLCD.drawLine(i, 86, i, 90); - for (int i=19; i<155; i+=10) - myGLCD.drawLine(107, i, 111, i); - -// Draw sin-, cos- and tan-lines - myGLCD.setColor(0,255,255); - myGLCD.print("Sin", 5, 15); - for (int i=1; i<218; i++) - { - myGLCD.drawPixel(i,88+(sin(((i*1.65)*3.14)/180)*70)); - } - - myGLCD.setColor(255,0,0); - myGLCD.print("Cos", 5, 27); - for (int i=1; i<218; i++) - { - myGLCD.drawPixel(i,88+(cos(((i*1.65)*3.14)/180)*70)); - } - - myGLCD.setColor(255,255,0); - myGLCD.print("Tan", 5, 39); - for (int i=1; i<218; i++) - { - myGLCD.drawPixel(i,88+(tan(((i*1.65)*3.14)/180))); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(109, 15, 109, 160); - myGLCD.drawLine(1, 88, 218, 88); - -// Draw a moving sinewave - x=1; - for (int i=1; i<(218*20); i++) - { - x++; - if (x==219) - x=1; - if (i>219) - { - if ((x==109)||(buf[x-1]==88)) - myGLCD.setColor(0,0,255); - else - myGLCD.setColor(0,0,0); - myGLCD.drawPixel(x,buf[x-1]); - } - myGLCD.setColor(0,255,255); - y=88+(sin(((i*1.6)*3.14)/180)*(65-(i / 100))); - myGLCD.drawPixel(x,y); - buf[x-1]=y; - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - -// Draw some filled rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRect(44+(i*15), 23+(i*15), 88+(i*15), 63+(i*15)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - -// Draw some filled, rounded rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRoundRect(132-(i*15), 23+(i*15), 172-(i*15), 63+(i*15)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - -// Draw some filled circles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillCircle(64+(i*15),43+(i*15), 20); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - -// Draw some lines in a pattern - myGLCD.setColor (255,0,0); - for (int i=15; i<160; i+=5) - { - myGLCD.drawLine(1, i, (i*1.44)-10, 160); - } - myGLCD.setColor (255,0,0); - for (int i=160; i>15; i-=5) - { - myGLCD.drawLine(218, i, (i*1.44)-12, 15); - } - myGLCD.setColor (0,255,255); - for (int i=160; i>15; i-=5) - { - myGLCD.drawLine(1, i, 232-(i*1.44), 15); - } - myGLCD.setColor (0,255,255); - for (int i=15; i<160; i+=5) - { - myGLCD.drawLine(218, i, 231-(i*1.44), 160); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - -// Draw some random circles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=22+random(176); - y=35+random(105); - r=random(20); - myGLCD.drawCircle(x, y, r); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - -// Draw some random rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(216); - y=16+random(143); - x2=2+random(216); - y2=16+random(143); - myGLCD.drawRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - -// Draw some random rounded rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(216); - y=16+random(143); - x2=2+random(216); - y2=16+random(143); - myGLCD.drawRoundRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(216); - y=16+random(143); - x2=2+random(216); - y2=16+random(143); - myGLCD.drawLine(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - - for (int i=0; i<10000; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - myGLCD.drawPixel(2+random(216), 16+random(143)); - } - - delay(2000); - - myGLCD.fillScr(0, 0, 255); - myGLCD.setColor(255, 0, 0); - myGLCD.fillRoundRect(40, 57, 179, 119); - - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("That's it!", CENTER, 62); - myGLCD.print("Restarting in a", CENTER, 88); - myGLCD.print("few seconds...", CENTER, 101); - - myGLCD.setColor(0, 255, 0); - myGLCD.setBackColor(0, 0, 255); - myGLCD.print("Runtime: (msecs)", CENTER, 146); - myGLCD.printNumI(millis(), CENTER, 161); - - delay (10000); -} - diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_220x176_Serial/UTFT_Demo_220x176_Serial.ino b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_220x176_Serial/UTFT_Demo_220x176_Serial.ino deleted file mode 100644 index ec66344..0000000 --- a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_220x176_Serial/UTFT_Demo_220x176_Serial.ino +++ /dev/null @@ -1,322 +0,0 @@ -// UTFT_Demo_220x176_Serial (C)2012 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of how to use most of the functions -// of the library with a supported display modules. -// -// This demo was made for serial modules with a screen resolution -// of 220x176 pixels. -// -// This program requires the UTFT library. -// - -#include - -// Declare which fonts we will be using -extern uint8_t SmallFont[]; - -UTFT myGLCD(ITDB22SP,11,10,9,12); // Remember to change the model parameter to suit your display module! - -void setup() -{ - randomSeed(analogRead(0)); - -// Setup the LCD - myGLCD.InitLCD(); - myGLCD.setFont(SmallFont); -} - -void loop() -{ - int buf[218]; - int x, x2; - int y, y2; - int r; - -// Clear the screen and draw the frame - myGLCD.clrScr(); - - myGLCD.setColor(255, 0, 0); - myGLCD.fillRect(0, 0, 219, 13); - myGLCD.setColor(64, 64, 64); - myGLCD.fillRect(0, 162, 219, 175); - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("** Universal TFT Library **", CENTER, 1); - myGLCD.setBackColor(64, 64, 64); - myGLCD.setColor(255,255,0); - myGLCD.print("> elec.henningkarlsen.com <", CENTER, 163); - - myGLCD.setColor(0, 0, 255); - myGLCD.drawRect(0, 14, 219, 161); - -// Draw crosshairs - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(109, 15, 109, 160); - myGLCD.drawLine(1, 88, 218, 88); - - for (int i=9; i<210; i+=10) - myGLCD.drawLine(i, 86, i, 90); - for (int i=19; i<155; i+=10) - myGLCD.drawLine(107, i, 111, i); - -// Draw sin-, cos- and tan-lines - myGLCD.setColor(0,255,255); - myGLCD.print("Sin", 5, 15); - for (int i=1; i<218; i++) - { - myGLCD.drawPixel(i,88+(sin(((i*1.65)*3.14)/180)*70)); - } - - myGLCD.setColor(255,0,0); - myGLCD.print("Cos", 5, 27); - for (int i=1; i<218; i++) - { - myGLCD.drawPixel(i,88+(cos(((i*1.65)*3.14)/180)*70)); - } - - myGLCD.setColor(255,255,0); - myGLCD.print("Tan", 5, 39); - for (int i=1; i<218; i++) - { - myGLCD.drawPixel(i,88+(tan(((i*1.65)*3.14)/180))); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(109, 15, 109, 160); - myGLCD.drawLine(1, 88, 218, 88); - -// Draw a moving sinewave - x=1; - for (int i=1; i<(218*20); i++) - { - x++; - if (x==219) - x=1; - if (i>219) - { - if ((x==109)||(buf[x-1]==88)) - myGLCD.setColor(0,0,255); - else - myGLCD.setColor(0,0,0); - myGLCD.drawPixel(x,buf[x-1]); - } - myGLCD.setColor(0,255,255); - y=88+(sin(((i*1.6)*3.14)/180)*(65-(i / 100))); - myGLCD.drawPixel(x,y); - buf[x-1]=y; - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - -// Draw some filled rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRect(44+(i*15), 23+(i*15), 88+(i*15), 63+(i*15)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - -// Draw some filled, rounded rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRoundRect(132-(i*15), 23+(i*15), 172-(i*15), 63+(i*15)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - -// Draw some filled circles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillCircle(64+(i*15),43+(i*15), 20); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - -// Draw some lines in a pattern - myGLCD.setColor (255,0,0); - for (int i=15; i<160; i+=5) - { - myGLCD.drawLine(1, i, (i*1.44)-10, 160); - } - myGLCD.setColor (255,0,0); - for (int i=160; i>15; i-=5) - { - myGLCD.drawLine(218, i, (i*1.44)-12, 15); - } - myGLCD.setColor (0,255,255); - for (int i=160; i>15; i-=5) - { - myGLCD.drawLine(1, i, 232-(i*1.44), 15); - } - myGLCD.setColor (0,255,255); - for (int i=15; i<160; i+=5) - { - myGLCD.drawLine(218, i, 231-(i*1.44), 160); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,161); - -// Draw some random circles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=22+random(176); - y=35+random(105); - r=random(20); - myGLCD.drawCircle(x, y, r); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - -// Draw some random rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(216); - y=16+random(143); - x2=2+random(216); - y2=16+random(143); - myGLCD.drawRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - -// Draw some random rounded rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(216); - y=16+random(143); - x2=2+random(216); - y2=16+random(143); - myGLCD.drawRoundRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(216); - y=16+random(143); - x2=2+random(216); - y2=16+random(143); - myGLCD.drawLine(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - - for (int i=0; i<10000; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - myGLCD.drawPixel(2+random(216), 16+random(143)); - } - - delay(2000); - - myGLCD.fillScr(0, 0, 255); - myGLCD.setColor(255, 0, 0); - myGLCD.fillRoundRect(40, 57, 179, 119); - - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("That's it!", CENTER, 62); - myGLCD.print("Restarting in a", CENTER, 88); - myGLCD.print("few seconds...", CENTER, 101); - - myGLCD.setColor(0, 255, 0); - myGLCD.setBackColor(0, 0, 255); - myGLCD.print("Runtime: (msecs)", CENTER, 146); - myGLCD.printNumI(millis(), CENTER, 161); - - delay (10000); -} - diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_320x240/UTFT_Demo_320x240.ino b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_320x240/UTFT_Demo_320x240.ino deleted file mode 100644 index 1e51058..0000000 --- a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_320x240/UTFT_Demo_320x240.ino +++ /dev/null @@ -1,334 +0,0 @@ -// UTFT_Demo_320x240 (C)2014 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of how to use most of the functions -// of the library with a supported display modules. -// -// This demo was made for modules with a screen resolution -// of 320x240 pixels. -// -// This program requires the UTFT library. -// - -#include - -// Declare which fonts we will be using -extern uint8_t SmallFont[]; - -// Set the pins to the correct ones for your development shield -// ------------------------------------------------------------ -// Arduino Uno / 2009: -// ------------------- -// Standard Arduino Uno/2009 shield : ,A5,A4,A3,A2 -// DisplayModule Arduino Uno TFT shield : ,A5,A4,A3,A2 -// -// Arduino Mega: -// ------------------- -// Standard Arduino Mega/Due shield : ,38,39,40,41 -// CTE TFT LCD/SD Shield for Arduino Mega : ,38,39,40,41 -// -// Remember to change the model parameter to suit your display module! -UTFT myGLCD(ITDB32S,38,39,40,41); - -void setup() -{ - randomSeed(analogRead(0)); - -// Setup the LCD - myGLCD.InitLCD(); - myGLCD.setFont(SmallFont); -} - -void loop() -{ - int buf[318]; - int x, x2; - int y, y2; - int r; - -// Clear the screen and draw the frame - myGLCD.clrScr(); - - myGLCD.setColor(255, 0, 0); - myGLCD.fillRect(0, 0, 319, 13); - myGLCD.setColor(64, 64, 64); - myGLCD.fillRect(0, 226, 319, 239); - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("* Universal Color TFT Display Library *", CENTER, 1); - myGLCD.setBackColor(64, 64, 64); - myGLCD.setColor(255,255,0); - myGLCD.print("", CENTER, 227); - - myGLCD.setColor(0, 0, 255); - myGLCD.drawRect(0, 14, 319, 225); - -// Draw crosshairs - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(159, 15, 159, 224); - myGLCD.drawLine(1, 119, 318, 119); - for (int i=9; i<310; i+=10) - myGLCD.drawLine(i, 117, i, 121); - for (int i=19; i<220; i+=10) - myGLCD.drawLine(157, i, 161, i); - -// Draw sin-, cos- and tan-lines - myGLCD.setColor(0,255,255); - myGLCD.print("Sin", 5, 15); - for (int i=1; i<318; i++) - { - myGLCD.drawPixel(i,119+(sin(((i*1.13)*3.14)/180)*95)); - } - - myGLCD.setColor(255,0,0); - myGLCD.print("Cos", 5, 27); - for (int i=1; i<318; i++) - { - myGLCD.drawPixel(i,119+(cos(((i*1.13)*3.14)/180)*95)); - } - - myGLCD.setColor(255,255,0); - myGLCD.print("Tan", 5, 39); - for (int i=1; i<318; i++) - { - myGLCD.drawPixel(i,119+(tan(((i*1.13)*3.14)/180))); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(159, 15, 159, 224); - myGLCD.drawLine(1, 119, 318, 119); - -// Draw a moving sinewave - x=1; - for (int i=1; i<(318*20); i++) - { - x++; - if (x==319) - x=1; - if (i>319) - { - if ((x==159)||(buf[x-1]==119)) - myGLCD.setColor(0,0,255); - else - myGLCD.setColor(0,0,0); - myGLCD.drawPixel(x,buf[x-1]); - } - myGLCD.setColor(0,255,255); - y=119+(sin(((i*1.1)*3.14)/180)*(90-(i / 100))); - myGLCD.drawPixel(x,y); - buf[x-1]=y; - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - -// Draw some filled rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRect(70+(i*20), 30+(i*20), 130+(i*20), 90+(i*20)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - -// Draw some filled, rounded rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRoundRect(190-(i*20), 30+(i*20), 250-(i*20), 90+(i*20)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - -// Draw some filled circles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillCircle(100+(i*20),60+(i*20), 30); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - -// Draw some lines in a pattern - myGLCD.setColor (255,0,0); - for (int i=15; i<224; i+=5) - { - myGLCD.drawLine(1, i, (i*1.44)-10, 224); - } - myGLCD.setColor (255,0,0); - for (int i=224; i>15; i-=5) - { - myGLCD.drawLine(318, i, (i*1.44)-11, 15); - } - myGLCD.setColor (0,255,255); - for (int i=224; i>15; i-=5) - { - myGLCD.drawLine(1, i, 331-(i*1.44), 15); - } - myGLCD.setColor (0,255,255); - for (int i=15; i<224; i+=5) - { - myGLCD.drawLine(318, i, 330-(i*1.44), 224); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - -// Draw some random circles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=32+random(256); - y=45+random(146); - r=random(30); - myGLCD.drawCircle(x, y, r); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - -// Draw some random rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(316); - y=16+random(207); - x2=2+random(316); - y2=16+random(207); - myGLCD.drawRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - -// Draw some random rounded rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(316); - y=16+random(207); - x2=2+random(316); - y2=16+random(207); - myGLCD.drawRoundRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(316); - y=16+random(209); - x2=2+random(316); - y2=16+random(209); - myGLCD.drawLine(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - - for (int i=0; i<10000; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - myGLCD.drawPixel(2+random(316), 16+random(209)); - } - - delay(2000); - - myGLCD.fillScr(0, 0, 255); - myGLCD.setColor(255, 0, 0); - myGLCD.fillRoundRect(80, 70, 239, 169); - - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("That's it!", CENTER, 93); - myGLCD.print("Restarting in a", CENTER, 119); - myGLCD.print("few seconds...", CENTER, 132); - - myGLCD.setColor(0, 255, 0); - myGLCD.setBackColor(0, 0, 255); - myGLCD.print("Runtime: (msecs)", CENTER, 210); - myGLCD.printNumI(millis(), CENTER, 225); - - delay (10000); -} - diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_320x240_Serial/UTFT_Demo_320x240_Serial.ino b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_320x240_Serial/UTFT_Demo_320x240_Serial.ino deleted file mode 100644 index a741524..0000000 --- a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_320x240_Serial/UTFT_Demo_320x240_Serial.ino +++ /dev/null @@ -1,354 +0,0 @@ -// UTFT_Demo_320x240_Serial (C)2014 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of how to use most of the functions -// of the library with a supported display modules. -// -// This demo was made for serial modules with a screen -// resolution of 320x240 pixels. -// -// This program requires the UTFT library. -// -// ******************************************************************** -// * IMPORTANT: Read the comments in the setup() function when * -// * using the Watterott MI0283QT9 or the DisplayModule DM-TFT28-105. * -// ******************************************************************** -// - -#include - -// Declare which fonts we will be using -extern uint8_t SmallFont[]; - -// Uncomment the line for your display: -//UTFT myGLCD(TFT01_22SP,9,8,12,11,10); // ElecFreaks TFT01-2.2SP -//UTFT myGLCD(MI0283QT9,11,13,7,8); // Watterott MI0283QT9 -UTFT myGLCD(DMTFT28105,MOSI,SCK,10,NOTINUSE,9); // DisplayModule DM-TFT28-105 (Works with both Arduino Uno and Arduino Mega) - -void setup() -{ -// Watterott -// --------- -// The following two lines are needed for the MI0283QT9 display -// module to enable the backlight. If you are using any other -// display module these lines should be commented out. -// ------------------------------------------------------------- -// pinMode(9, OUTPUT); -// digitalWrite(9, HIGH); -// ------------------------------------------------------------- - -// DisplayModule -// ------------- -// The following 4 lines are needed for the DM-TFT28-105 display -// module to set the SS/CS pins for the other devices connected -// to the Arduino SPI pins. If you are using any other display -// module these lines should be commented out. -// ------------------------------------------------------------- - pinMode(10,OUTPUT); digitalWrite(10,HIGH); // TFT SS/CE - pinMode(8, OUTPUT); digitalWrite(8, HIGH); // SD card SS/CE - pinMode(6, OUTPUT); digitalWrite(6, HIGH); // Flash chip SS/CE - pinMode(4, OUTPUT); digitalWrite(4, HIGH); // Touch controller SS/CE -// ------------------------------------------------------------- - - -// Just get some random numbers - randomSeed(analogRead(0)); - -// Setup the LCD - myGLCD.InitLCD(); - myGLCD.setFont(SmallFont); - -} - -void loop() -{ - int buf[318]; - int x, x2; - int y, y2; - int r; - -// Clear the screen and draw the frame - myGLCD.clrScr(); - - myGLCD.setColor(255, 0, 0); - myGLCD.fillRect(0, 0, 319, 13); - myGLCD.setColor(64, 64, 64); - myGLCD.fillRect(0, 226, 319, 239); - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("* Universal Color TFT Display Library *", CENTER, 1); - myGLCD.setBackColor(64, 64, 64); - myGLCD.setColor(255,255,0); - myGLCD.print("", CENTER, 227); - - myGLCD.setColor(0, 0, 255); - myGLCD.drawRect(0, 14, 319, 225); - -// Draw crosshairs - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(159, 15, 159, 224); - myGLCD.drawLine(1, 119, 318, 119); - for (int i=9; i<310; i+=10) - myGLCD.drawLine(i, 117, i, 121); - for (int i=19; i<220; i+=10) - myGLCD.drawLine(157, i, 161, i); - -// Draw sin-, cos- and tan-lines - myGLCD.setColor(0,255,255); - myGLCD.print("Sin", 5, 15); - for (int i=1; i<318; i++) - { - myGLCD.drawPixel(i,119+(sin(((i*1.13)*3.14)/180)*95)); - } - - myGLCD.setColor(255,0,0); - myGLCD.print("Cos", 5, 27); - for (int i=1; i<318; i++) - { - myGLCD.drawPixel(i,119+(cos(((i*1.13)*3.14)/180)*95)); - } - - myGLCD.setColor(255,255,0); - myGLCD.print("Tan", 5, 39); - for (int i=1; i<318; i++) - { - myGLCD.drawPixel(i,119+(tan(((i*1.13)*3.14)/180))); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(159, 15, 159, 224); - myGLCD.drawLine(1, 119, 318, 119); - -// Draw a moving sinewave - x=1; - for (int i=1; i<(318*20); i++) - { - x++; - if (x==319) - x=1; - if (i>319) - { - if ((x==159)||(buf[x-1]==119)) - myGLCD.setColor(0,0,255); - else - myGLCD.setColor(0,0,0); - myGLCD.drawPixel(x,buf[x-1]); - } - myGLCD.setColor(0,255,255); - y=119+(sin(((i*1.1)*3.14)/180)*(90-(i / 100))); - myGLCD.drawPixel(x,y); - buf[x-1]=y; - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - -// Draw some filled rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRect(70+(i*20), 30+(i*20), 130+(i*20), 90+(i*20)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - -// Draw some filled, rounded rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRoundRect(190-(i*20), 30+(i*20), 250-(i*20), 90+(i*20)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - -// Draw some filled circles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillCircle(100+(i*20),60+(i*20), 30); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - -// Draw some lines in a pattern - myGLCD.setColor (255,0,0); - for (int i=15; i<224; i+=5) - { - myGLCD.drawLine(1, i, (i*1.44)-10, 224); - } - myGLCD.setColor (255,0,0); - for (int i=224; i>15; i-=5) - { - myGLCD.drawLine(318, i, (i*1.44)-11, 15); - } - myGLCD.setColor (0,255,255); - for (int i=224; i>15; i-=5) - { - myGLCD.drawLine(1, i, 331-(i*1.44), 15); - } - myGLCD.setColor (0,255,255); - for (int i=15; i<224; i+=5) - { - myGLCD.drawLine(318, i, 330-(i*1.44), 224); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - -// Draw some random circles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=32+random(256); - y=45+random(146); - r=random(30); - myGLCD.drawCircle(x, y, r); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - -// Draw some random rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(316); - y=16+random(207); - x2=2+random(316); - y2=16+random(207); - myGLCD.drawRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - -// Draw some random rounded rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(316); - y=16+random(207); - x2=2+random(316); - y2=16+random(207); - myGLCD.drawRoundRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(316); - y=16+random(209); - x2=2+random(316); - y2=16+random(209); - myGLCD.drawLine(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - - for (int i=0; i<10000; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - myGLCD.drawPixel(2+random(316), 16+random(209)); - } - - delay(2000); - - myGLCD.fillScr(0, 0, 255); - myGLCD.setColor(255, 0, 0); - myGLCD.fillRoundRect(80, 70, 239, 169); - - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("That's it!", CENTER, 93); - myGLCD.print("Restarting in a", CENTER, 119); - myGLCD.print("few seconds...", CENTER, 132); - - myGLCD.setColor(0, 255, 0); - myGLCD.setBackColor(0, 0, 255); - myGLCD.print("Runtime: (msecs)", CENTER, 210); - myGLCD.printNumI(millis(), CENTER, 225); - - delay (10000); -} \ No newline at end of file diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_400x240/UTFT_Demo_400x240.ino b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_400x240/UTFT_Demo_400x240.ino deleted file mode 100644 index 93538ce..0000000 --- a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_400x240/UTFT_Demo_400x240.ino +++ /dev/null @@ -1,336 +0,0 @@ -// UTFT_Demo_400x240 (C)2014 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of how to use most of the functions -// of the library with a supported display modules. -// -// This demo was made for modules with a screen resolution -// of 400x240 pixels. -// -// This program requires the UTFT library. -// - -#include - -// Declare which fonts we will be using -extern uint8_t SmallFont[]; - -// Set the pins to the correct ones for your development shield -// ------------------------------------------------------------ -// Arduino Uno / 2009: -// ------------------- -// Standard Arduino Uno/2009 shield : ,A5,A4,A3,A2 -// DisplayModule Arduino Uno TFT shield : ,A5,A4,A3,A2 -// -// Arduino Mega: -// ------------------- -// Standard Arduino Mega/Due shield : ,38,39,40,41 -// CTE TFT LCD/SD Shield for Arduino Mega : ,38,39,40,41 -// -// Remember to change the model parameter to suit your display module! -UTFT myGLCD(ITDB32WD,38,39,40,41); - -void setup() -{ - randomSeed(analogRead(0)); - -// Setup the LCD - myGLCD.InitLCD(); - myGLCD.setFont(SmallFont); -} - -void loop() -{ - int buf[398]; - int x, x2; - int y, y2; - int r; - -// Clear the screen and draw the frame - myGLCD.clrScr(); - - myGLCD.setColor(255, 0, 0); - myGLCD.fillRect(0, 0, 399, 13); - myGLCD.setColor(64, 64, 64); - myGLCD.fillRect(0, 226, 399, 239); - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("*** Universal Color TFT Display Library ***", CENTER, 1); - myGLCD.setBackColor(64, 64, 64); - myGLCD.setColor(255,255,0); - myGLCD.print("< http://electronics.henningkarlsen.com >", CENTER, 227); - - myGLCD.setColor(0, 0, 255); - myGLCD.drawRect(0, 14, 399, 225); - -// Draw crosshairs - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(199, 15, 199, 224); - myGLCD.drawLine(1, 119, 398, 119); - for (int i=9; i<390; i+=10) - myGLCD.drawLine(i, 117, i, 121); - for (int i=19; i<220; i+=10) - myGLCD.drawLine(197, i, 201, i); - -// Draw sin-, cos- and tan-lines - myGLCD.setColor(0,255,255); - myGLCD.print("Sin", 5, 15); - for (int i=1; i<398; i++) - { - myGLCD.drawPixel(i,119+(sin(((i*0.9)*3.14)/180)*95)); - } - - myGLCD.setColor(255,0,0); - myGLCD.print("Cos", 5, 27); - for (int i=1; i<398; i++) - { - myGLCD.drawPixel(i,119+(cos(((i*0.9)*3.14)/180)*95)); - } - - myGLCD.setColor(255,255,0); - myGLCD.print("Tan", 5, 39); - for (int i=1; i<398; i++) - { - y=119+(tan(((i*0.9)*3.14)/180)); - if ((y>15) && (y<224)) - myGLCD.drawPixel(i,y); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,398,224); - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(199, 15, 199, 224); - myGLCD.drawLine(1, 119, 398, 119); - -// Draw a moving sinewave - x=1; - for (int i=1; i<(398*20); i++) - { - x++; - if (x==399) - x=1; - if (i>399) - { - if ((x==199)||(buf[x-1]==119)) - myGLCD.setColor(0,0,255); - else - myGLCD.setColor(0,0,0); - myGLCD.drawPixel(x,buf[x-1]); - } - myGLCD.setColor(0,255,255); - y=119+(sin(((i)*3.14)/180)*(90-(i / 100))); - myGLCD.drawPixel(x,y); - buf[x-1]=y; - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,398,224); - -// Draw some filled rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRect(110+(i*20), 30+(i*20), 170+(i*20), 90+(i*20)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,398,224); - -// Draw some filled, rounded rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRoundRect(230-(i*20), 30+(i*20), 290-(i*20), 90+(i*20)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,398,224); - -// Draw some filled circles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillCircle(110+(i*30),60+(i*20), 30); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,398,224); - -// Draw some lines in a pattern - myGLCD.setColor (255,0,0); - for (int i=15; i<224; i+=5) - { - myGLCD.drawLine(1, i, (i*1.77)-10, 224); - } - myGLCD.setColor (255,0,0); - for (int i=224; i>15; i-=5) - { - myGLCD.drawLine(398, i, (i*1.77)-11, 15); - } - myGLCD.setColor (0,255,255); - for (int i=224; i>15; i-=5) - { - myGLCD.drawLine(1, i, 411-(i*1.77), 15); - } - myGLCD.setColor (0,255,255); - for (int i=15; i<224; i+=5) - { - myGLCD.drawLine(398, i, 410-(i*1.77), 224); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,398,224); - -// Draw some random circles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=32+random(336); - y=45+random(146); - r=random(30); - myGLCD.drawCircle(x, y, r); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,398,224); - -// Draw some random rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(396); - y=16+random(207); - x2=2+random(396); - y2=16+random(207); - myGLCD.drawRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,398,224); - -// Draw some random rounded rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(396); - y=16+random(207); - x2=2+random(396); - y2=16+random(207); - myGLCD.drawRoundRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,398,224); - - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(396); - y=16+random(209); - x2=2+random(396); - y2=16+random(209); - myGLCD.drawLine(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,398,224); - - for (int i=0; i<10000; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - myGLCD.drawPixel(2+random(396), 16+random(209)); - } - - delay(2000); - - myGLCD.fillScr(0, 0, 255); - myGLCD.setColor(255, 0, 0); - myGLCD.fillRoundRect(120, 70, 279, 169); - - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("That's it!", CENTER, 93); - myGLCD.print("Restarting in a", CENTER, 119); - myGLCD.print("few seconds...", CENTER, 132); - - myGLCD.setColor(0, 255, 0); - myGLCD.setBackColor(0, 0, 255); - myGLCD.print("Runtime: (msecs)", CENTER, 210); - myGLCD.printNumI(millis(), CENTER, 225); - - delay (10000); -} - diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_480x272/UTFT_Demo_480x272.ino b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_480x272/UTFT_Demo_480x272.ino deleted file mode 100644 index 93d8395..0000000 --- a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_480x272/UTFT_Demo_480x272.ino +++ /dev/null @@ -1,333 +0,0 @@ -// UTFT_Demo_480x272 (C)2014 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of how to use most of the functions -// of the library with a supported display modules. -// -// This demo was made for modules with a screen resolution -// of 480x272 pixels. -// -// This program requires the UTFT library. -// - -#include - -// Declare which fonts we will be using -extern uint8_t SmallFont[]; - -// Set the pins to the correct ones for your development shield -// ------------------------------------------------------------ -// Arduino Uno / 2009: -// ------------------- -// Standard Arduino Uno/2009 shield : ,A5,A4,A3,A2 -// DisplayModule Arduino Uno TFT shield : ,A5,A4,A3,A2 -// -// Arduino Mega: -// ------------------- -// Standard Arduino Mega/Due shield : ,38,39,40,41 -// CTE TFT LCD/SD Shield for Arduino Mega : ,38,39,40,41 -// -// Remember to change the model parameter to suit your display module! -UTFT myGLCD(ITDB43,38,39,40,41); - -void setup() -{ - randomSeed(analogRead(0)); - -// Setup the LCD - myGLCD.InitLCD(); - myGLCD.setFont(SmallFont); -} - -void loop() -{ - int buf[478]; - int x, x2; - int y, y2; - int r; - -// Clear the screen and draw the frame - myGLCD.clrScr(); - - myGLCD.setColor(255, 0, 0); - myGLCD.fillRect(0, 0, 479, 13); - myGLCD.setColor(64, 64, 64); - myGLCD.fillRect(0, 258, 479, 271); - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("* Universal Color TFT Display Library *", CENTER, 1); - myGLCD.setBackColor(64, 64, 64); - myGLCD.setColor(255,255,0); - myGLCD.print("", CENTER, 259); - - myGLCD.setColor(0, 0, 255); - myGLCD.drawRect(0, 14, 479, 257); - -// Draw crosshairs - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(239, 15, 239, 256); - myGLCD.drawLine(1, 135, 478, 135); - for (int i=9; i<470; i+=10) - myGLCD.drawLine(i, 133, i, 138); - for (int i=15; i<256; i+=10) - myGLCD.drawLine(237, i, 241, i); - -// Draw sin-, cos- and tan-lines - myGLCD.setColor(0,255,255); - myGLCD.print("Sin", 5, 15); - for (int i=1; i<478; i++) - { - myGLCD.drawPixel(i,135+(sin(((i*1.13)*3.14)/180)*95)); - } - - myGLCD.setColor(255,0,0); - myGLCD.print("Cos", 5, 27); - for (int i=1; i<478; i++) - { - myGLCD.drawPixel(i,135+(cos(((i*1.13)*3.14)/180)*95)); - } - - myGLCD.setColor(255,255,0); - myGLCD.print("Tan", 5, 39); - for (int i=1; i<478; i++) - { - myGLCD.drawPixel(i,135+(tan(((i*1.13)*3.14)/180))); - } - - delay(2000); - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,256); - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(239, 15, 239, 256); - myGLCD.drawLine(1, 135, 478, 135); - -// Draw a moving sinewave - x=1; - for (int i=1; i<(478*20); i++) - { - x++; - if (x==479) - x=1; - if (i>479) - { - if ((x==239)||(buf[x-1]==135)) - myGLCD.setColor(0,0,255); - else - myGLCD.setColor(0,0,0); - myGLCD.drawPixel(x,buf[x-1]); - } - myGLCD.setColor(0,255,255); - y=135+(sin(((i*1.65)*3.14)/180)*(90-(i / 100))); - myGLCD.drawPixel(x,y); - buf[x-1]=y; - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,256); - -// Draw some filled rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRect(150+(i*20), 46+(i*20), 210+(i*20), 106+(i*20)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,256); - -// Draw some filled, rounded rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRoundRect(330-(i*20), 46+(i*20), 270-(i*20), 106+(i*20)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,256); - -// Draw some filled circles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillCircle(180+(i*20),75+(i*20), 30); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,256); - -// Draw some lines in a pattern - myGLCD.setColor (255,0,0); - for (int i=15; i<256; i+=5) - { - myGLCD.drawLine(1, i, (i*1.88)-10, 256); - } - myGLCD.setColor (255,0,0); - for (int i=256; i>15; i-=5) - { - myGLCD.drawLine(478, i, (i*1.88)-11, 15); - } - myGLCD.setColor (0,255,255); - for (int i=256; i>15; i-=5) - { - myGLCD.drawLine(1, i, 491-(i*1.88), 15); - } - myGLCD.setColor (0,255,255); - for (int i=15; i<256; i+=5) - { - myGLCD.drawLine(478, i, 490-(i*1.88), 256); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,256); - -// Draw some random circles - for (int i=0; i<150; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=32+random(416); - y=45+random(178); - r=random(30); - myGLCD.drawCircle(x, y, r); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,256); - -// Draw some random rectangles - for (int i=0; i<150; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(476); - y=16+random(239); - x2=2+random(476); - y2=16+random(239); - myGLCD.drawRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,256); - -// Draw some random rounded rectangles - for (int i=0; i<150; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(476); - y=16+random(239); - x2=2+random(476); - y2=16+random(239); - myGLCD.drawRoundRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,256); - - for (int i=0; i<150; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(476); - y=16+random(239); - x2=2+random(476); - y2=16+random(239); - myGLCD.drawLine(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,256); - - for (int i=0; i<10000; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - myGLCD.drawPixel(2+random(476), 16+random(239)); - } - - delay(2000); - - myGLCD.fillScr(0, 0, 255); - myGLCD.setColor(255, 0, 0); - myGLCD.fillRoundRect(160, 70, 319, 169); - - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("That's it!", CENTER, 93); - myGLCD.print("Restarting in a", CENTER, 119); - myGLCD.print("few seconds...", CENTER, 132); - - myGLCD.setColor(0, 255, 0); - myGLCD.setBackColor(0, 0, 255); - myGLCD.print("Runtime: (msecs)", CENTER, 243); - myGLCD.printNumI(millis(), CENTER, 258); - - delay (10000); -} - diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_480x320/UTFT_Demo_480x320.ino b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_480x320/UTFT_Demo_480x320.ino deleted file mode 100644 index da718c3..0000000 --- a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_480x320/UTFT_Demo_480x320.ino +++ /dev/null @@ -1,334 +0,0 @@ -// UTFT_Demo_480x320 (C)2014 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of how to use most of the functions -// of the library with a supported display modules. -// -// This demo was made for modules with a screen resolution -// of 480x320 pixels. -// -// This program requires the UTFT library. -// - -#include - -// Declare which fonts we will be using -extern uint8_t SmallFont[]; - -// Set the pins to the correct ones for your development shield -// ------------------------------------------------------------ -// Arduino Uno / 2009: -// ------------------- -// Standard Arduino Uno/2009 shield : ,A5,A4,A3,A2 -// DisplayModule Arduino Uno TFT shield : ,A5,A4,A3,A2 -// -// Arduino Mega: -// ------------------- -// Standard Arduino Mega/Due shield : ,38,39,40,41 -// CTE TFT LCD/SD Shield for Arduino Mega : ,38,39,40,41 -// -// Remember to change the model parameter to suit your display module! -UTFT myGLCD(CTE32HR,38,39,40,41); - -void setup() -{ - randomSeed(analogRead(0)); - -// Setup the LCD - myGLCD.InitLCD(); - myGLCD.setFont(SmallFont); -} - -void loop() -{ - int buf[478]; - int x, x2; - int y, y2; - int r; - -// Clear the screen and draw the frame - myGLCD.clrScr(); - - myGLCD.setColor(255, 0, 0); - myGLCD.fillRect(0, 0, 479, 13); - myGLCD.setColor(64, 64, 64); - myGLCD.fillRect(0, 306, 479, 319); - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("* Universal Color TFT Display Library *", CENTER, 1); - myGLCD.setBackColor(64, 64, 64); - myGLCD.setColor(255,255,0); - myGLCD.print("", CENTER, 307); - - myGLCD.setColor(0, 0, 255); - myGLCD.drawRect(0, 14, 479, 305); - -// Draw crosshairs - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(239, 15, 239, 304); - myGLCD.drawLine(1, 159, 478, 159); - for (int i=9; i<470; i+=10) - myGLCD.drawLine(i, 157, i, 161); - for (int i=19; i<220; i+=10) - myGLCD.drawLine(237, i, 241, i); - -// Draw sin-, cos- and tan-lines - myGLCD.setColor(0,255,255); - myGLCD.print("Sin", 5, 15); - for (int i=1; i<478; i++) - { - myGLCD.drawPixel(i,159+(sin(((i*1.13)*3.14)/180)*95)); - } - - myGLCD.setColor(255,0,0); - myGLCD.print("Cos", 5, 27); - for (int i=1; i<478; i++) - { - myGLCD.drawPixel(i,159+(cos(((i*1.13)*3.14)/180)*95)); - } - - myGLCD.setColor(255,255,0); - myGLCD.print("Tan", 5, 39); - for (int i=1; i<478; i++) - { - myGLCD.drawPixel(i,159+(tan(((i*1.13)*3.14)/180))); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,304); - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(239, 15, 239, 304); - myGLCD.drawLine(1, 159, 478, 159); - -// Draw a moving sinewave - x=1; - for (int i=1; i<(478*15); i++) - { - x++; - if (x==479) - x=1; - if (i>479) - { - if ((x==239)||(buf[x-1]==159)) - myGLCD.setColor(0,0,255); - else - myGLCD.setColor(0,0,0); - myGLCD.drawPixel(x,buf[x-1]); - } - myGLCD.setColor(0,255,255); - y=159+(sin(((i*0.7)*3.14)/180)*(90-(i / 100))); - myGLCD.drawPixel(x,y); - buf[x-1]=y; - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,304); - -// Draw some filled rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRect(150+(i*20), 70+(i*20), 210+(i*20), 130+(i*20)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,304); - -// Draw some filled, rounded rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRoundRect(270-(i*20), 70+(i*20), 330-(i*20), 130+(i*20)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,304); - -// Draw some filled circles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillCircle(180+(i*20),100+(i*20), 30); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,304); - -// Draw some lines in a pattern - myGLCD.setColor (255,0,0); - for (int i=15; i<304; i+=5) - { - myGLCD.drawLine(1, i, (i*1.6)-10, 304); - } - myGLCD.setColor (255,0,0); - for (int i=304; i>15; i-=5) - { - myGLCD.drawLine(478, i, (i*1.6)-11, 15); - } - myGLCD.setColor (0,255,255); - for (int i=304; i>15; i-=5) - { - myGLCD.drawLine(1, i, 491-(i*1.6), 15); - } - myGLCD.setColor (0,255,255); - for (int i=15; i<304; i+=5) - { - myGLCD.drawLine(478, i, 490-(i*1.6), 304); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,304); - -// Draw some random circles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=32+random(416); - y=45+random(226); - r=random(30); - myGLCD.drawCircle(x, y, r); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,304); - -// Draw some random rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(476); - y=16+random(289); - x2=2+random(476); - y2=16+random(289); - myGLCD.drawRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,304); - -// Draw some random rounded rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(476); - y=16+random(289); - x2=2+random(476); - y2=16+random(289); - myGLCD.drawRoundRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,304); - - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(476); - y=16+random(289); - x2=2+random(476); - y2=16+random(289); - myGLCD.drawLine(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,304); - - for (int i=0; i<10000; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - myGLCD.drawPixel(2+random(476), 16+random(289)); - } - - delay(2000); - - myGLCD.fillScr(0, 0, 255); - myGLCD.setColor(255, 0, 0); - myGLCD.fillRoundRect(160, 70, 319, 169); - - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("That's it!", CENTER, 93); - myGLCD.print("Restarting in a", CENTER, 119); - myGLCD.print("few seconds...", CENTER, 132); - - myGLCD.setColor(0, 255, 0); - myGLCD.setBackColor(0, 0, 255); - myGLCD.print("Runtime: (msecs)", CENTER, 290); - myGLCD.printNumI(millis(), CENTER, 305); - - delay (10000); -} - diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_800x480/UTFT_Demo_800x480.ino b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_800x480/UTFT_Demo_800x480.ino deleted file mode 100644 index 363b71a..0000000 --- a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Demo_800x480/UTFT_Demo_800x480.ino +++ /dev/null @@ -1,293 +0,0 @@ -// UTFT_Demo_800x480 (C)2014 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of how to use most of the functions -// of the library with a supported display modules. -// -// This demo was made for modules with a screen resolution -// of 800x480 pixels. -// -// This program requires the UTFT library. -// - -#include - -// Declare which fonts we will be using -extern uint8_t SmallFont[]; - -// Set the pins to the correct ones for your development shield -// ------------------------------------------------------------ -// Arduino Uno / 2009: -// ------------------- -// Standard Arduino Uno/2009 shield : ,A5,A4,A3,A2 -// DisplayModule Arduino Uno TFT shield : ,A5,A4,A3,A2 -// -// Arduino Mega: -// ------------------- -// Standard Arduino Mega/Due shield : ,38,39,40,41 -// CTE TFT LCD/SD Shield for Arduino Mega : ,38,39,40,41 -// -// Remember to change the model parameter to suit your display module! -UTFT myGLCD(ITDB50,38,39,40,41); - -void setup() -{ - randomSeed(analogRead(0)); - -// Setup the LCD - myGLCD.InitLCD(); - myGLCD.setFont(SmallFont); -} - -void loop() -{ - int buf[798]; - int x, x2; - int y, y2; - int r; - -// Clear the screen and draw the frame - myGLCD.clrScr(); - - myGLCD.setColor(255, 0, 0); - myGLCD.fillRect(0, 0, 799, 13); - myGLCD.setColor(64, 64, 64); - myGLCD.fillRect(0, 466, 799, 479); - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("* Universal Color TFT Display Library *", CENTER, 1); - myGLCD.setBackColor(64, 64, 64); - myGLCD.setColor(255,255,0); - myGLCD.print("", CENTER, 467); - - myGLCD.setColor(0, 0, 255); - myGLCD.drawRect(0, 14, 799, 465); - -// Draw crosshairs - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(399, 15, 399, 464); - myGLCD.drawLine(1, 239, 798, 239); - for (int i=9; i<790; i+=10) - myGLCD.drawLine(i, 237, i, 242); - for (int i=19; i<470; i+=10) - myGLCD.drawLine(397, i, 402, i); - -// Draw sin-, cos- and tan-lines - myGLCD.setColor(0,255,255); - myGLCD.print("Sin", 5, 15); - for (int i=1; i<798; i++) - { - myGLCD.drawPixel(i,239+(sin(((i*1.13)*3.14)/180)*200)); - } - - myGLCD.setColor(255,0,0); - myGLCD.print("Cos", 5, 27); - for (int i=1; i<798; i++) - { - myGLCD.drawPixel(i,239+(cos(((i*1.13)*3.14)/180)*200)); - } - - myGLCD.setColor(255,255,0); - myGLCD.print("Tan", 5, 39); - for (int i=1; i<798; i++) - { - myGLCD.drawPixel(i,239+(tan(((i*0.9)*3.14)/180))); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,798,464); - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(399, 15, 399, 464); - myGLCD.drawLine(1, 239, 798, 239); - -// Draw a moving sinewave - x=1; - for (int i=1; i<(798*20); i++) - { - x++; - if (x==799) - x=1; - if (i>799) - { - if ((x==399)||(buf[x-1]==239)) - myGLCD.setColor(0,0,255); - else - myGLCD.setColor(0,0,0); - myGLCD.drawPixel(x,buf[x-1]); - } - myGLCD.setColor(0,255,255); - y=239+(sin(((i*1.65)*3.14)/180)*(200-(i / 100))); - myGLCD.drawPixel(x,y); - buf[x-1]=y; - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,798,464); - -// Draw some random filled rectangles - for (int i=0; i<50; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(746); - y=16+random(397); - x2=x+50; - y2=y+50; - myGLCD.fillRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,798,464); - -// Draw some random filled, rounded rectangles - for (int i=0; i<50; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(746); - y=16+random(397); - x2=x+50; - y2=y+50; - myGLCD.fillRoundRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,798,464); - -// Draw some random filled circles - for (int i=0; i<50; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=27+random(746); - y=41+random(397); - myGLCD.fillCircle(x, y, 25); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,798,464); - -// Draw some lines in a pattern - myGLCD.setColor (255,0,0); - for (int i=15; i<463; i+=5) - { - myGLCD.drawLine(1, i, (i*1.66)-10, 463); - } - myGLCD.setColor (255,0,0); - for (int i=463; i>15; i-=5) - { - myGLCD.drawLine(798, i, (i*1.66)+30, 15); - } - myGLCD.setColor (0,255,255); - for (int i=463; i>15; i-=5) - { - myGLCD.drawLine(1, i, 770-(i*1.66), 15); - } - myGLCD.setColor (0,255,255); - for (int i=15; i<463; i+=5) - { - myGLCD.drawLine(798, i, 810-(i*1.66), 463); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,798,464); - -// Draw some random circles - for (int i=0; i<250; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=32+random(736); - y=45+random(386); - r=random(30); - myGLCD.drawCircle(x, y, r); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,798,464); - -// Draw some random rectangles - for (int i=0; i<250; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(796); - y=16+random(447); - x2=2+random(796); - y2=16+random(447); - myGLCD.drawRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,798,464); - -// Draw some random rounded rectangles - for (int i=0; i<250; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(796); - y=16+random(447); - x2=2+random(796); - y2=16+random(447); - myGLCD.drawRoundRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,798,464); - - for (int i=0; i<250; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(796); - y=16+random(447); - x2=2+random(796); - y2=16+random(447); - myGLCD.drawLine(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,798,464); - - for (int i=0; i<10000; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - myGLCD.drawPixel(2+random(796), 16+random(447)); - } - - delay(2000); - - myGLCD.fillScr(0, 0, 255); - myGLCD.setColor(255, 0, 0); - myGLCD.fillRoundRect(320, 190, 479, 289); - - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("That's it!", CENTER, 213); - myGLCD.print("Restarting in a", CENTER, 239); - myGLCD.print("few seconds...", CENTER, 252); - - myGLCD.setColor(0, 255, 0); - myGLCD.setBackColor(0, 0, 255); - myGLCD.print("Runtime: (msecs)", CENTER, 450); - myGLCD.printNumI(millis(), CENTER, 465); - - delay (10000); -} - diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Leonardo_Demo_320x240/UTFT_Leonardo_Demo_320x240.ino b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Leonardo_Demo_320x240/UTFT_Leonardo_Demo_320x240.ino deleted file mode 100644 index 4e8a9d1..0000000 --- a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Leonardo_Demo_320x240/UTFT_Leonardo_Demo_320x240.ino +++ /dev/null @@ -1,252 +0,0 @@ -// UTFT_Leonardo_Demo_320x240 (C)2013 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a reduced demo of how to use some of the functions -// of the library with a supported display modules on an Arduino Leonardo. -// -// It has been reduced in size to fit in the limited flash memory of -// the Leonardo. It has not been tested on all display modules so -// some modules may still produce too large binares. -// -// This demo was made for modules with a screen resolution -// of 320x240 pixels. -// -// This program requires the UTFT library. -// - -#include - -// Declare which fonts we will be using -extern uint8_t SmallFont[]; - -UTFT myGLCD(ITDB24E_8,A5,A4,A3,A2); // Remember to change the model parameter to suit your display module! - -void setup() -{ - randomSeed(analogRead(0)); - -// Setup the LCD - myGLCD.InitLCD(); - myGLCD.setFont(SmallFont); -} - -void loop() -{ - int buf[318]; - int x, x2; - int y, y2; - int r; - -// Clear the screen and draw the frame - myGLCD.clrScr(); - - myGLCD.setColor(255, 0, 0); - myGLCD.fillRect(0, 0, 319, 13); - myGLCD.setColor(64, 64, 64); - myGLCD.fillRect(0, 226, 319, 239); - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("* Universal Color TFT Display Library *", CENTER, 1); - myGLCD.setBackColor(64, 64, 64); - myGLCD.setColor(255,255,0); - myGLCD.print("", CENTER, 227); - - myGLCD.setColor(0, 0, 255); - myGLCD.drawRect(0, 14, 319, 225); - -// Draw crosshairs - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(159, 15, 159, 224); - myGLCD.drawLine(1, 119, 318, 119); - for (int i=9; i<310; i+=10) - myGLCD.drawLine(i, 117, i, 121); - for (int i=19; i<220; i+=10) - myGLCD.drawLine(157, i, 161, i); - -// Draw sin-, cos- and tan-lines - myGLCD.setColor(0,255,255); - myGLCD.print("Sin", 5, 15); - for (int i=1; i<318; i++) - { - myGLCD.drawPixel(i,119+(sin(((i*1.13)*3.14)/180)*95)); - } - - myGLCD.setColor(255,0,0); - myGLCD.print("Cos", 5, 27); - for (int i=1; i<318; i++) - { - myGLCD.drawPixel(i,119+(cos(((i*1.13)*3.14)/180)*95)); - } - - myGLCD.setColor(255,255,0); - myGLCD.print("Tan", 5, 39); - for (int i=1; i<318; i++) - { - myGLCD.drawPixel(i,119+(tan(((i*1.13)*3.14)/180))); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(159, 15, 159, 224); - myGLCD.drawLine(1, 119, 318, 119); - -// Draw a moving sinewave - x=1; - for (int i=1; i<(318*20); i++) - { - x++; - if (x==319) - x=1; - if (i>319) - { - if ((x==159)||(buf[x-1]==119)) - myGLCD.setColor(0,0,255); - else - myGLCD.setColor(0,0,0); - myGLCD.drawPixel(x,buf[x-1]); - } - myGLCD.setColor(0,255,255); - y=119+(sin(((i*1.1)*3.14)/180)*(90-(i / 100))); - myGLCD.drawPixel(x,y); - buf[x-1]=y; - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - -// Draw some filled rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRect(70+(i*20), 30+(i*20), 130+(i*20), 90+(i*20)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - -// Draw some filled, rounded rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRoundRect(190-(i*20), 30+(i*20), 250-(i*20), 90+(i*20)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - -// Draw some filled circles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillCircle(100+(i*20),60+(i*20), 30); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - -// Draw some lines in a pattern - myGLCD.setColor (255,0,0); - for (int i=15; i<224; i+=5) - { - myGLCD.drawLine(1, i, (i*1.44)-10, 224); - } - myGLCD.setColor (255,0,0); - for (int i=224; i>15; i-=5) - { - myGLCD.drawLine(318, i, (i*1.44)-11, 15); - } - myGLCD.setColor (0,255,255); - for (int i=224; i>15; i-=5) - { - myGLCD.drawLine(1, i, 331-(i*1.44), 15); - } - myGLCD.setColor (0,255,255); - for (int i=15; i<224; i+=5) - { - myGLCD.drawLine(318, i, 330-(i*1.44), 224); - } - - delay(2000); - - myGLCD.fillScr(0, 0, 255); - myGLCD.setColor(255, 0, 0); - myGLCD.fillRoundRect(80, 70, 239, 169); - - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("That's it!", CENTER, 93); - myGLCD.print("Restarting in a", CENTER, 119); - myGLCD.print("few seconds...", CENTER, 132); - - myGLCD.setColor(0, 255, 0); - myGLCD.setBackColor(0, 0, 255); - myGLCD.print("Runtime: (msecs)", CENTER, 210); - myGLCD.printNumI(millis(), CENTER, 225); - - delay (10000); -} - diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Rotate_Bitmap/UTFT_Rotate_Bitmap.ino b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Rotate_Bitmap/UTFT_Rotate_Bitmap.ino deleted file mode 100644 index ccb55f6..0000000 --- a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Rotate_Bitmap/UTFT_Rotate_Bitmap.ino +++ /dev/null @@ -1,43 +0,0 @@ -// UTFT_Rotate_Bitmap (C)2014 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of the drawBitmap()-function. -// -// This program requires the UTFT library. -// - -#include -#include - -// Set the pins to the correct ones for your development shield -// ------------------------------------------------------------ -// Arduino Uno / 2009: -// ------------------- -// Standard Arduino Uno/2009 shield : ,A5,A4,A3,A2 -// DisplayModule Arduino Uno TFT shield : ,A5,A4,A3,A2 -// -// Arduino Mega: -// ------------------- -// Standard Arduino Mega/Due shield : ,38,39,40,41 -// CTE TFT LCD/SD Shield for Arduino Mega : ,38,39,40,41 -// -// Remember to change the model parameter to suit your display module! -UTFT myGLCD(ITDB32S,38,39,40,41); - -extern unsigned int tux[0x400]; - -void setup() -{ - myGLCD.InitLCD(LANDSCAPE); - myGLCD.fillScr(255, 255, 255); - myGLCD.setColor(0, 0, 0); -} - -void loop() -{ - for (int i=0; i<360; i+=5) - { - myGLCD.drawBitmap (10, 10, 32, 32, tux, i, 16, 16); - } -} - diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Rotate_Bitmap/tux.c b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Rotate_Bitmap/tux.c deleted file mode 100644 index 3babe53..0000000 --- a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Rotate_Bitmap/tux.c +++ /dev/null @@ -1,73 +0,0 @@ -// Generated by : ImageConverter 565 v1.0 -// Generated from: tux.png -// Time generated: 11.10.2010 22:51:32 -// Size : 2 048 Bytes - -#include - -const unsigned short tux[0x400] PROGMEM ={ -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE73C, 0x9CD3, 0x9CF3, 0xA514, // 0x0010 (16) -0x9CF3, 0x8C51, 0xAD75, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0020 (32) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF7D, 0x5AEB, 0x7BEF, 0x9CD3, 0x94B2, // 0x0030 (48) -0x94B2, 0x94B2, 0x4228, 0x7BEF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0040 (64) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x9CF3, 0x18E3, 0x630C, 0x4A49, 0x4A69, // 0x0050 (80) -0x4A69, 0x528A, 0x4A49, 0x0000, 0xC638, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0060 (96) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x6B6D, 0x0000, 0x0020, 0x10A2, 0x1082, // 0x0070 (112) -0x0841, 0x0841, 0x0841, 0x0000, 0x630C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0080 (128) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x528A, 0x4228, 0x8410, 0x0000, 0x0861, // 0x0090 (144) -0xAD55, 0xBDD7, 0x10A2, 0x0000, 0x2945, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00A0 (160) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x5ACB, 0x8C71, 0xE75D, 0x2126, 0x528B, // 0x00B0 (176) -0xE75D, 0xDEDB, 0x7BCF, 0x0000, 0x18E3, 0xE73C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00C0 (192) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x6B6D, 0x4A4A, 0x6B2A, 0x8BE7, 0xA48A, // 0x00D0 (208) -0x6B09, 0x4A8A, 0x8431, 0x0000, 0x2104, 0xE73C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00E0 (224) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x6B6E, 0x5204, 0xDE6A, 0xFFF7, 0xFFF8, // 0x00F0 (240) -0xD5AC, 0xBCAA, 0x5A66, 0x0000, 0x1082, 0xDEFB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0100 (256) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x8C10, 0xC540, 0xFFED, 0xFF2C, 0xFEEC, // 0x0110 (272) -0xFECC, 0xFE66, 0x8260, 0x0000, 0x0000, 0xB596, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0120 (288) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x94B3, 0x9C25, 0xFF20, 0xFE40, 0xFDA0, // 0x0130 (304) -0xFCC0, 0xF524, 0x836A, 0x0000, 0x0000, 0x630C, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0140 (320) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x630C, 0x94B4, 0xFF13, 0xFD83, 0xF523, // 0x0150 (336) -0xE5CF, 0xF79E, 0xE71D, 0x0861, 0x0000, 0x0861, 0xDEDB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0160 (352) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xCE59, 0x0841, 0xD69A, 0xFFFF, 0xFF7D, 0xF77D, // 0x0170 (368) -0xFFFF, 0xFFFF, 0xFFFF, 0x73AE, 0x0000, 0x0000, 0x4A69, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0180 (384) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF79E, 0x10A2, 0x8410, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, // 0x0190 (400) -0xFFFF, 0xFFDF, 0xFFFF, 0xCE59, 0x0000, 0x0000, 0x0000, 0x9492, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01A0 (416) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x52AA, 0x0020, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01B0 (432) -0xFFDF, 0xFFDF, 0xF7BE, 0xFFDF, 0x3186, 0x0000, 0x0020, 0x0841, 0xCE79, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01C0 (448) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xC638, 0x0000, 0x52AA, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFDF, // 0x01D0 (464) -0xFFDF, 0xF7BE, 0xF79E, 0xFFFF, 0x9CF3, 0x0000, 0x0841, 0x0000, 0x39E7, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01E0 (480) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x5ACB, 0x0000, 0xBDF7, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFDF, 0xFFDF, // 0x01F0 (496) -0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0x3186, 0x0000, 0x0861, 0x0000, 0xAD55, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0200 (512) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE73C, 0x0861, 0x4A49, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, // 0x0210 (528) -0xF7BE, 0xF79E, 0xEF7D, 0xEF5D, 0xFFDF, 0x8410, 0x0000, 0x1082, 0x0000, 0x39E7, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0220 (544) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x94B2, 0x0000, 0xB596, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, // 0x0230 (560) -0xF79E, 0xEF7D, 0xEF7D, 0xE73C, 0xF79E, 0xAD55, 0x0861, 0x10A2, 0x0861, 0x0841, 0xCE59, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0240 (576) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF79E, 0x3185, 0x10A2, 0xE71C, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF79E, // 0x0250 (592) -0xEF7D, 0xEF7D, 0xEF5D, 0xE73C, 0xEF5D, 0xBDF7, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x8C71, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0260 (608) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x94B2, 0x0000, 0x39E7, 0xF7BE, 0xFFFF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF79E, 0xEF7D, // 0x0270 (624) -0xEF7D, 0xEF5D, 0xE73C, 0xE71C, 0xE71C, 0xC618, 0x18E3, 0x10A2, 0x10A2, 0x0020, 0x6B4D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0280 (640) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x8C51, 0x38E0, 0x4A27, 0xFFFF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF79E, 0xEF7D, 0xEF7D, // 0x0290 (656) -0xEF5D, 0xE73C, 0xE71C, 0xDEFB, 0xDF1D, 0xBDF8, 0x39C7, 0x5ACB, 0x528A, 0x10A3, 0x738F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02A0 (672) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDD6C, 0xFE2B, 0xBC45, 0xA513, 0xFFFF, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF5D, // 0x02B0 (688) -0xE73C, 0xE71C, 0xDEFB, 0xD6DC, 0xDD8E, 0xB3E4, 0x2124, 0x2965, 0x2945, 0x20C1, 0xB511, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02C0 (704) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF77C, 0xE5CF, 0xF60B, 0xFF9B, 0xFF54, 0x8B02, 0x7BF0, 0xFFDF, 0xF79E, 0xEF5D, 0xEF5D, 0xE73C, // 0x02D0 (720) -0xE71C, 0xDEFB, 0xDEDB, 0xCE7A, 0xED89, 0xDDAD, 0x0842, 0x0000, 0x0000, 0xAC69, 0xDD6B, 0xEFBF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02E0 (736) -0xFFFF, 0xFFFF, 0xFFBE, 0xE5CB, 0xEDC9, 0xFE4B, 0xFF14, 0xFEF3, 0xFF35, 0xFE8D, 0x51C1, 0x634E, 0xE73C, 0xEF5D, 0xE73C, 0xE71C, // 0x02F0 (752) -0xDEFB, 0xDEDB, 0xD6DB, 0xCE59, 0xE58B, 0xFF98, 0xBD4F, 0x8B88, 0xCD90, 0xFFB7, 0xCCE8, 0xE73D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0300 (768) -0xFFFF, 0xFFFF, 0xEF3B, 0xF583, 0xFF30, 0xFF11, 0xFECF, 0xFEEF, 0xFECF, 0xFF30, 0xDD46, 0x2903, 0x6B8E, 0xEF7D, 0xE71C, 0xDEFB, // 0x0310 (784) -0xDEDB, 0xD6BA, 0xD69A, 0xCE59, 0xE5AA, 0xFF11, 0xFF53, 0xFF73, 0xFF33, 0xFF12, 0xFE6C, 0xDDAD, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0320 (800) -0xFFFF, 0xFFFF, 0xF79E, 0xEDC5, 0xFECB, 0xFECC, 0xFECC, 0xFEEC, 0xFECB, 0xFECC, 0xFEEA, 0x9BE5, 0x8432, 0xE73C, 0xDEDB, 0xDEDB, // 0x0330 (816) -0xD6BA, 0xD69A, 0xDEDB, 0xA4F3, 0xD547, 0xFF2E, 0xFECD, 0xFECE, 0xFEEE, 0xFEEE, 0xFF10, 0xFEAB, 0xE5A8, 0xEF7D, 0xFFFF, 0xFFFF, // 0x0340 (832) -0xFFFF, 0xFFFF, 0xF79E, 0xF603, 0xFEA2, 0xFEC7, 0xFEC7, 0xFEA4, 0xFE81, 0xFE61, 0xFEA4, 0xFE43, 0xDE33, 0xE75E, 0xE71C, 0xDEFB, // 0x0350 (848) -0xDEDB, 0xCE58, 0x8C72, 0x5247, 0xEDE4, 0xFF0A, 0xFECA, 0xFEC9, 0xFE84, 0xFE83, 0xFEE7, 0xFEA3, 0xB443, 0xD69B, 0xFFFF, 0xFFFF, // 0x0360 (864) -0xFFFF, 0xFFFF, 0xF75B, 0xFE60, 0xFF00, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEE0, 0xE5C1, 0x9492, 0xA514, 0x9CD3, // 0x0370 (880) -0x8410, 0x630B, 0x4229, 0x6AE8, 0xFE80, 0xFEC1, 0xFEC1, 0xFEA0, 0xFEA0, 0xFEE0, 0xDD80, 0x9BE8, 0xB597, 0xFFDF, 0xFFFF, 0xFFFF, // 0x0380 (896) -0xFFFF, 0xFFFF, 0xF79E, 0xD589, 0xE600, 0xFEA0, 0xFF00, 0xFF40, 0xFF40, 0xFF00, 0xFF00, 0xFF20, 0xFEC0, 0x5267, 0x4229, 0x4A48, // 0x0390 (912) -0x4A49, 0x5289, 0x424A, 0x7B46, 0xFF20, 0xFEE0, 0xFEE0, 0xFF20, 0xFEE0, 0xB4A5, 0x9C92, 0xDEFD, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03A0 (928) -0xFFFF, 0xFFFF, 0xFFFF, 0xE71D, 0xBDB6, 0xB530, 0xBD0B, 0xCD65, 0xEE60, 0xFF40, 0xFFA0, 0xFF80, 0xBD03, 0x8410, 0xA514, 0xA534, // 0x03B0 (944) -0xAD75, 0xB596, 0xA555, 0x9C8F, 0xF6C0, 0xFFA0, 0xFFA0, 0xF6E0, 0xA449, 0xB5B8, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03C0 (960) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF7F, 0xD69C, 0xBD95, 0xBD4C, 0xCDC6, 0xB4E8, 0xAD35, 0xF7BF, 0xFFFF, 0xFFFF, // 0x03D0 (976) -0xFFFF, 0xFFFF, 0xFFFF, 0xF7BF, 0xCDD0, 0xCDC6, 0xCDA7, 0xA48D, 0xCE7B, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03E0 (992) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDF1F, 0xB59A, 0xBDDA, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, // 0x03F0 (1008) -0xFFFF, 0xFFDF, 0xFFDF, 0xFFFF, 0xEF7F, 0xB59A, 0xAD59, 0xDF1D, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0400 (1024) -}; diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Textrotation_Demo/UTFT_Textrotation_Demo.ino b/libraries/UTFT/examples/Arduino (AVR)/UTFT_Textrotation_Demo/UTFT_Textrotation_Demo.ino deleted file mode 100644 index 81ce558..0000000 --- a/libraries/UTFT/examples/Arduino (AVR)/UTFT_Textrotation_Demo/UTFT_Textrotation_Demo.ino +++ /dev/null @@ -1,57 +0,0 @@ -// UTFT_Textrotation_Demo (C)2014 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of the textrotation-functions. -// -// This demo was made for modules with a screen resolution -// of 320x240 pixels. -// -// This program requires the UTFT library. -// - -#include - -// Declare which fonts we will be using -extern uint8_t BigFont[]; -extern uint8_t SevenSegNumFont[]; - -// Set the pins to the correct ones for your development shield -// ------------------------------------------------------------ -// Arduino Uno / 2009: -// ------------------- -// Standard Arduino Uno/2009 shield : ,A5,A4,A3,A2 -// DisplayModule Arduino Uno TFT shield : ,A5,A4,A3,A2 -// -// Arduino Mega: -// ------------------- -// Standard Arduino Mega/Due shield : ,38,39,40,41 -// CTE TFT LCD/SD Shield for Arduino Mega : ,38,39,40,41 -// -// Remember to change the model parameter to suit your display module! -UTFT myGLCD(ITDB32S,38,39,40,41); - -void setup() -{ - myGLCD.InitLCD(); - myGLCD.clrScr(); - myGLCD.setFont(BigFont); -} - -void loop() -{ - myGLCD.print("Text rotation", 0, 0); - myGLCD.setColor(0, 0, 255); - myGLCD.print("0 degrees", 0, 16, 0); - myGLCD.print("90 degrees", 319, 0, 90); - myGLCD.print("180 degrees", 319, 239, 180); - myGLCD.print("270 degrees", 0, 239, 270); - - myGLCD.setFont(SevenSegNumFont); - myGLCD.setColor(0, 255, 0); - myGLCD.print("45", 90, 100, 45); - myGLCD.print("90", 200, 50, 90); - myGLCD.print("180", 300, 200, 180); - - while (true) {}; -} - diff --git a/libraries/UTFT/examples/Arduino (AVR)/UTFT_ViewFont/UTFT_ViewFont.ino b/libraries/UTFT/examples/Arduino (AVR)/UTFT_ViewFont/UTFT_ViewFont.ino deleted file mode 100644 index 4a16428..0000000 --- a/libraries/UTFT/examples/Arduino (AVR)/UTFT_ViewFont/UTFT_ViewFont.ino +++ /dev/null @@ -1,64 +0,0 @@ -// UTFT_ViewFont (C)2014 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of the included fonts. -// -// This demo was made for modules with a screen resolution -// of 320x240 pixels. -// -// This program requires the UTFT library. -// - -#include - -// Declare which fonts we will be using -extern uint8_t SmallFont[]; -extern uint8_t BigFont[]; -extern uint8_t SevenSegNumFont[]; - -// Set the pins to the correct ones for your development shield -// ------------------------------------------------------------ -// Arduino Uno / 2009: -// ------------------- -// Standard Arduino Uno/2009 shield : ,A5,A4,A3,A2 -// DisplayModule Arduino Uno TFT shield : ,A5,A4,A3,A2 -// -// Arduino Mega: -// ------------------- -// Standard Arduino Mega/Due shield : ,38,39,40,41 -// CTE TFT LCD/SD Shield for Arduino Mega : ,38,39,40,41 -// -// Remember to change the model parameter to suit your display module! -UTFT myGLCD(ITDB32S,38,39,40,41); - -void setup() -{ - myGLCD.InitLCD(); - - myGLCD.clrScr(); -} - -void loop() -{ - myGLCD.setColor(0, 255, 0); - myGLCD.setBackColor(0, 0, 0); - - myGLCD.setFont(BigFont); - myGLCD.print(" !\"#$%&'()*+,-./", CENTER, 0); - myGLCD.print("0123456789:;<=>?", CENTER, 16); - myGLCD.print("@ABCDEFGHIJKLMNO", CENTER, 32); - myGLCD.print("PQRSTUVWXYZ[\\]^_", CENTER, 48); - myGLCD.print("`abcdefghijklmno", CENTER, 64); - myGLCD.print("pqrstuvwxyz{|}~ ", CENTER, 80); - - myGLCD.setFont(SmallFont); - myGLCD.print(" !\"#$%&'()*+,-./0123456789:;<=>?", CENTER, 120); - myGLCD.print("@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_", CENTER, 132); - myGLCD.print("`abcdefghijklmnopqrstuvwxyz{|}~ ", CENTER, 144); - - myGLCD.setFont(SevenSegNumFont); - myGLCD.print("0123456789", CENTER, 190); - - while(1) {}; -} - diff --git a/libraries/UTFT/examples/chipKit/UTFT_Bitmap/UTFT_Bitmap.pde b/libraries/UTFT/examples/chipKit/UTFT_Bitmap/UTFT_Bitmap.pde deleted file mode 100644 index b28e8fc..0000000 --- a/libraries/UTFT/examples/chipKit/UTFT_Bitmap/UTFT_Bitmap.pde +++ /dev/null @@ -1,65 +0,0 @@ -// UTFT_Bitmap (C)2014 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of the drawBitmap()-function. -// -// This demo was made to work on the 320x240 modules. -// Any other size displays may cause strange behaviour. -// -// This program requires the UTFT library. -// - -#include - -// Declare which fonts we will be using -extern uint8_t SmallFont[]; - -// Set the pins to the correct ones for your development shield -// ------------------------------------------------------------ -// My chipKit Uno32/uC32 shield : ,38,39,40,41 -// My chipKit Max32 shield : ,82,83,84,85 -// AquaLEDSource All in One Super Screw Shield : ,82,83,84,85 -// -// Remember to change the model parameter to suit your display module! -UTFT myGLCD(ITDB32S,82,83,84,85); - -extern unsigned short info[0x400]; -extern unsigned short icon[0x400]; -extern unsigned short tux[0x400]; - -void setup() -{ - myGLCD.InitLCD(); - myGLCD.setFont(SmallFont); -} - -void loop() -{ - myGLCD.fillScr(255, 255, 255); - myGLCD.setColor(255, 255, 255); - myGLCD.print(" *** A 10 by 7 grid of a 32x32 icon *** ", CENTER, 228); - for (int x=0; x<10; x++) - for (int y=0; y<7; y++) - myGLCD.drawBitmap (x*32, y*32, 32, 32, info); - - delay(5000); - - myGLCD.fillScr(255, 255, 255); - myGLCD.setColor(255, 255, 255); - myGLCD.print(" Two different icons in scale 1 to 4 ", CENTER, 228); - int x=0; - for (int s=0; s<4; s++) - { - x+=(s*32); - myGLCD.drawBitmap (x, 0, 32, 32, tux, s+1); - } - x=0; - for (int s=4; s>0; s--) - { - myGLCD.drawBitmap (x, 224-(s*32), 32, 32, icon, s); - x+=(s*32); - } - - delay(5000); -} - diff --git a/libraries/UTFT/examples/chipKit/UTFT_Bitmap/icon.c b/libraries/UTFT/examples/chipKit/UTFT_Bitmap/icon.c deleted file mode 100644 index 9cb97a1..0000000 --- a/libraries/UTFT/examples/chipKit/UTFT_Bitmap/icon.c +++ /dev/null @@ -1,71 +0,0 @@ -// Generated by : ImageConverter 565 v1.0 -// Generated from: taskmgr.png -// Time generated: 11.10.2010 22:51:23 -// Size : 2 048 Bytes - -const unsigned short icon[0x400] ={ -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF7D, 0xCE79, 0xBDD7, 0xAD75, // 0x0010 (16) -0xAD55, 0xAD75, 0xBDF7, 0xD6BA, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0020 (32) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xC638, 0x9492, 0x8C51, 0x9492, 0xA514, 0xA534, // 0x0030 (48) -0xA534, 0xA534, 0x9CF3, 0x8C71, 0x8430, 0x9CD3, 0xD69A, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0040 (64) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xCE59, 0x8410, 0x9492, 0xB5B6, 0xC618, 0xBDD7, 0xAD75, 0xA514, // 0x0050 (80) -0xA514, 0xA4F4, 0xAD55, 0xB5B6, 0xBDD7, 0xAD55, 0x8430, 0x8C71, 0xDEFB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0060 (96) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0x9CD3, 0x8430, 0xBDF7, 0xC618, 0xAD75, 0x94F2, 0x8CF1, 0x84B0, 0x8CD1, // 0x0070 (112) -0x9612, 0x8CB1, 0x7C6F, 0x7C8F, 0x8490, 0xA533, 0xBDF7, 0xB596, 0x7BEF, 0xB596, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0080 (128) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0x8430, 0x9CF3, 0xCE39, 0xA514, 0x94B2, 0x9E93, 0x94F2, 0x8CD1, 0x8CB1, 0x9D12, // 0x0090 (144) -0x9F74, 0x9D52, 0x8450, 0x7C8F, 0x73AE, 0x740E, 0x73CE, 0x9CD3, 0xC638, 0x8C51, 0x9CD3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00A0 (160) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0x8430, 0xA534, 0xBDF7, 0x8CB1, 0x8C31, 0x9DB3, 0xA735, 0x9D13, 0x8CB1, 0x8C71, 0x9D13, // 0x00B0 (176) -0xB756, 0xA5D4, 0x8C71, 0x8490, 0x8390, 0x7C70, 0x73EE, 0x6B4D, 0x8450, 0xBDF7, 0x8C71, 0x9CF3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00C0 (192) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x94B2, 0x9CF3, 0xBDD7, 0x8490, 0x8CF1, 0x9D72, 0xA694, 0xAE94, 0x9DD3, 0xA593, 0xA553, 0x9592, // 0x00D0 (208) -0x9672, 0x75CE, 0x5BAA, 0x64EB, 0x5D8C, 0x5BCA, 0x4B69, 0x634C, 0x748D, 0x7C4F, 0xBE18, 0x8430, 0xB5B6, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00E0 (224) -0xFFFF, 0xFFFF, 0xFFFF, 0xC618, 0x8410, 0xBDF7, 0x8410, 0x83F0, 0x94F2, 0x9613, 0x9D13, 0xAE55, 0x9D12, 0x750E, 0x55CB, 0x4BC8, // 0x00F0 (240) -0x4447, 0x3BC6, 0x4B67, 0x44E8, 0x3CE8, 0x3325, 0x20E2, 0x2B45, 0x43E7, 0x3946, 0x732D, 0xC5F8, 0x7BCF, 0xE71C, 0xFFFF, 0xFFFF, // 0x0100 (256) -0xFFFF, 0xFFFF, 0xF7BE, 0x7BEF, 0xBDB6, 0x9533, 0x8D71, 0x9552, 0x9E73, 0x9DD3, 0x94B2, 0x6D6D, 0x4BA8, 0x44A8, 0x55EA, 0x5D2A, // 0x0110 (272) -0x43E7, 0x4327, 0x46CA, 0x4B87, 0x42C6, 0x4E0A, 0x4D09, 0x4468, 0x4548, 0x3386, 0x2B25, 0x7C6F, 0xAD35, 0x9492, 0xFFFF, 0xFFFF, // 0x0120 (288) -0xFFDF, 0xFFFF, 0xBDD7, 0x8C71, 0xAD75, 0x8CF0, 0x8D71, 0x8D51, 0x9DF3, 0x740E, 0x21C4, 0x33E5, 0x558A, 0x554A, 0x650A, 0x566B, // 0x0130 (304) -0x43E7, 0x21C3, 0x3345, 0x2283, 0x1962, 0x3C87, 0x3386, 0x2163, 0x3345, 0x3346, 0x33A6, 0x32C6, 0x9CB3, 0x7BEF, 0xDEDB, 0xFFFF, // 0x0140 (320) -0xFFFF, 0xFFFF, 0x8430, 0xAD75, 0x8C31, 0x7C0F, 0x7BCF, 0x83F0, 0x636B, 0x0000, 0x0000, 0x4387, 0x462A, 0x4B27, 0x4B88, 0x4E8B, // 0x0150 (336) -0x42E6, 0x0000, 0x0020, 0x0100, 0x0000, 0x1121, 0x0040, 0x0000, 0x0941, 0x0000, 0x0020, 0x00E0, 0x5AAB, 0x94B2, 0x9CD3, 0xFFFF, // 0x0160 (352) -0xFFFF, 0xE71C, 0x8410, 0xB596, 0x7BEF, 0x7C6F, 0x84B0, 0x5B6B, 0x09E1, 0x0901, 0x1161, 0x3C06, 0x3D89, 0x32C5, 0x43E7, 0x470B, // 0x0170 (368) -0x4BC7, 0x0961, 0x11E2, 0x1282, 0x0961, 0x1262, 0x09E2, 0x0961, 0x12A2, 0x0961, 0x09C2, 0x0A01, 0x29E5, 0xA514, 0x7BEF, 0xFFDF, // 0x0180 (384) -0xFFFF, 0xBDD7, 0x9472, 0xA514, 0x6B4D, 0x7C6F, 0x634C, 0x0040, 0x0981, 0x0060, 0x00E0, 0x11E2, 0x10A1, 0x09C1, 0x19E3, 0x2B25, // 0x0190 (400) -0x22A3, 0x0060, 0x0120, 0x09E1, 0x0060, 0x09E1, 0x0120, 0x0060, 0x0A21, 0x0060, 0x0100, 0x01A0, 0x0040, 0x9CD3, 0x7BEF, 0xDEDB, // 0x01A0 (416) -0xFFFF, 0xA514, 0x9CF3, 0xB596, 0x73AE, 0x7C0F, 0x2945, 0x10A2, 0x2184, 0x18C3, 0x1923, 0x2184, 0x18C3, 0x21A4, 0x2964, 0x2905, // 0x01B0 (432) -0x2A25, 0x2104, 0x2965, 0x2A05, 0x2104, 0x2A05, 0x2985, 0x2104, 0x2A25, 0x2104, 0x2164, 0x29C4, 0x3166, 0xB5B6, 0x8410, 0xC618, // 0x01C0 (448) -0xFFFF, 0x9492, 0xA514, 0xDEDB, 0xC618, 0xA514, 0x8C51, 0x94B2, 0x9CB3, 0x9CF3, 0xA514, 0xA534, 0xAD75, 0xAD75, 0xB596, 0xB5D6, // 0x01D0 (464) -0xBDB7, 0xBDF7, 0xBDF7, 0xBDF7, 0xC618, 0xC5F8, 0xC5F8, 0xBDF7, 0xBDD7, 0xBDD7, 0xB5B6, 0xB596, 0xC638, 0xDEFB, 0x8430, 0xB596, // 0x01E0 (480) -0xFFFF, 0x8C51, 0x9CF3, 0xE73C, 0xDEFB, 0xD69A, 0xD6BA, 0xD6BA, 0xDEDB, 0xDEDB, 0xDEFB, 0xDF1B, 0xE71C, 0xE73C, 0xE73C, 0xE73C, // 0x01F0 (496) -0xEF5D, 0xEF5D, 0xEF5D, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xDEFB, 0xE71C, 0x8C51, 0xAD75, // 0x0200 (512) -0xFFFF, 0x8C71, 0x9CD3, 0xDEFB, 0xAD75, 0x9492, 0x9CD3, 0xA4F3, 0xA514, 0xAD55, 0xAD75, 0xB596, 0xBDB6, 0xBDD7, 0xC5F7, 0xC618, // 0x0210 (528) -0xC638, 0xCE59, 0xCE59, 0xCE79, 0xD679, 0xD679, 0xCE79, 0xCE59, 0xCE59, 0xC638, 0xC618, 0xBDF7, 0xCE79, 0xE71C, 0x8C51, 0xB596, // 0x0220 (544) -0xFFFF, 0x9CD3, 0x9492, 0xAD55, 0x2965, 0x2104, 0x2124, 0x2145, 0x1945, 0x2165, 0x2165, 0x2186, 0x2186, 0x29A6, 0x29A6, 0x31C7, // 0x0230 (560) -0x39C7, 0x31E7, 0x31E7, 0x31E7, 0x3208, 0x3208, 0x31E7, 0x31E7, 0x29E7, 0x31C7, 0x39C7, 0x31A6, 0x4A49, 0xBDF7, 0x8C51, 0xBDF7, // 0x0240 (576) -0xFFFF, 0xB5B6, 0x8430, 0x7BEF, 0x0000, 0x0000, 0x0000, 0x2000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3000, 0x3800, 0x2000, // 0x0250 (592) -0x0000, 0x3000, 0x3800, 0x3000, 0x3800, 0x3800, 0x3800, 0x3000, 0x3800, 0x0800, 0x0000, 0x0000, 0x0000, 0xA514, 0x8430, 0xD6BA, // 0x0260 (608) -0xFFFF, 0xDEDB, 0x7BCF, 0x8430, 0x0020, 0x0000, 0x0000, 0x8000, 0xC800, 0xC000, 0xC800, 0xC820, 0xC820, 0xC820, 0xD020, 0x9800, // 0x0270 (624) -0x0000, 0xB820, 0xD020, 0xD020, 0xD020, 0xD020, 0xD020, 0xC820, 0xD020, 0x4800, 0x0000, 0x0000, 0x2144, 0xAD75, 0x8410, 0xF7BE, // 0x0280 (640) -0xFFFF, 0xFFFF, 0x7BEF, 0x8C71, 0x2945, 0x0000, 0x0000, 0x6800, 0xA800, 0xA800, 0xA800, 0xA800, 0xA800, 0xA800, 0xB000, 0x8000, // 0x0290 (656) -0x0000, 0x9800, 0xB000, 0xB000, 0xB000, 0xB000, 0xB000, 0xB000, 0xB000, 0x4000, 0x0000, 0x0000, 0x632C, 0xA534, 0x94B2, 0xFFFF, // 0x02A0 (672) -0xFFDF, 0xFFFF, 0xAD75, 0x73AE, 0x632C, 0x0000, 0x0000, 0x6920, 0xA9E0, 0xA1C0, 0xA9E0, 0xA9E0, 0xA9E0, 0xA9E0, 0xA9E0, 0x7960, // 0x02B0 (688) -0x0000, 0x99C0, 0xB200, 0xA9E0, 0xB200, 0xB200, 0xB1E0, 0xA9E0, 0xB200, 0x40C0, 0x0000, 0x1082, 0xAD75, 0x8410, 0xD69A, 0xFFFF, // 0x02C0 (704) -0xFFFF, 0xFFFF, 0xF79E, 0x630C, 0x8C51, 0x2965, 0x0000, 0x7400, 0xB620, 0xAE00, 0xB620, 0xB640, 0xB640, 0xB620, 0xB660, 0x84A0, // 0x02D0 (720) -0x0000, 0xA5A0, 0xBE60, 0xB660, 0xBE60, 0xBE60, 0xB660, 0xB640, 0xBE80, 0x4260, 0x0000, 0x6B6D, 0xAD75, 0x8430, 0xFFFF, 0xFFFF, // 0x02E0 (736) -0xFFFF, 0xFFDF, 0xFFFF, 0xB5B6, 0x632C, 0x8410, 0x0021, 0x7360, 0xBD40, 0xB520, 0xBD40, 0xBD60, 0xBD60, 0xBD40, 0xC580, 0x8C00, // 0x02F0 (752) -0x0000, 0xACE0, 0xC580, 0xC580, 0xC580, 0xC580, 0xC580, 0xBD60, 0xC5A0, 0x39C0, 0x2126, 0xBDF7, 0x73AE, 0xD6BA, 0xFFFF, 0xFFFF, // 0x0300 (768) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x7BEF, 0x7BEF, 0x630D, 0x4AE1, 0x6D21, 0x6D01, 0x6D21, 0x6D41, 0x6D41, 0x6D41, 0x6D61, 0x53E1, // 0x0310 (784) -0x0000, 0x64C1, 0x7562, 0x6D62, 0x6D62, 0x6D62, 0x6D62, 0x6D42, 0x6D41, 0x4263, 0xA515, 0x8C51, 0xA534, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0320 (800) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF79E, 0x6B4D, 0x8410, 0x636E, 0x04A6, 0x05E5, 0x05C5, 0x0585, 0x0585, 0x0586, 0x05A6, 0x0424, // 0x0330 (816) -0x0000, 0x0505, 0x05C6, 0x05A6, 0x05A6, 0x05C7, 0x0606, 0x0606, 0x1CE9, 0xA535, 0x9492, 0x8C71, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0340 (832) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF7D, 0x6B4D, 0x83EF, 0x9411, 0x3A47, 0x0403, 0x0584, 0x05A4, 0x0585, 0x0585, 0x0404, // 0x0350 (848) -0x0000, 0x04E5, 0x05A5, 0x05A5, 0x05C5, 0x0584, 0x1405, 0x634B, 0xBD76, 0x8C51, 0x8C51, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0360 (864) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0x8410, 0x6B6D, 0x9CB3, 0x7C6F, 0x3CA9, 0x0BE4, 0x0443, 0x0504, 0x03C2, // 0x0370 (880) -0x0000, 0x0483, 0x0504, 0x0444, 0x1426, 0x552D, 0xA554, 0xB576, 0x73CE, 0x9CF3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0380 (896) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xB5B6, 0x6B4D, 0x7BAF, 0x9432, 0x8BD1, 0x6BCE, 0x4C6B, 0x3C09, // 0x0390 (912) -0x3186, 0x3C8A, 0x5C8C, 0x8430, 0xA493, 0xACD4, 0x8410, 0x7BEF, 0xCE79, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03A0 (928) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0xAD75, 0x7BEF, 0x73AE, 0x83F0, 0x8C11, 0x9431, // 0x03B0 (944) -0x9492, 0x9452, 0x9432, 0x8430, 0x7BEF, 0x8450, 0xBDF7, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03C0 (960) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEFB, 0xBDD7, 0xA534, 0x94D3, // 0x03D0 (976) -0x94B2, 0x9CF3, 0xA554, 0xC618, 0xE73C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03E0 (992) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03F0 (1008) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0400 (1024) -}; diff --git a/libraries/UTFT/examples/chipKit/UTFT_Bitmap/info.c b/libraries/UTFT/examples/chipKit/UTFT_Bitmap/info.c deleted file mode 100644 index 312bee1..0000000 --- a/libraries/UTFT/examples/chipKit/UTFT_Bitmap/info.c +++ /dev/null @@ -1,71 +0,0 @@ -// Generated by : ImageConverter 565 v1.0 -// Generated from: info.png -// Time generated: 11.10.2010 22:27:55 -// Size : 2 048 Bytes - -const unsigned short info[0x400] ={ -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0010 (16) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0020 (32) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF9F, 0xC69D, 0x95BB, 0x7D1A, 0x6CB9, // 0x0030 (48) -0x6499, 0x74F9, 0x8D7A, 0xB63C, 0xE73E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0040 (64) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xAE1C, 0x4C18, 0x2B56, 0x3397, 0x4C38, 0x64B9, 0x751A, // 0x0050 (80) -0x7D3A, 0x6CD9, 0x5458, 0x3BD7, 0x2B56, 0x3BB7, 0x855A, 0xE77E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0060 (96) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xA5FB, 0x2B56, 0x2B77, 0x751A, 0xB67C, 0xD73E, 0xE75E, 0xE77E, 0xE77E, // 0x0070 (112) -0xE77E, 0xE77E, 0xE75E, 0xDF3E, 0xC6DD, 0x8D9B, 0x43D7, 0x1B16, 0x74D9, 0xF7BF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0080 (128) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF9F, 0x4C18, 0x1AF6, 0x855A, 0xCEFE, 0xD71E, 0xCEFD, 0xC6DD, 0xC6BD, 0xC6BD, 0xBEBD, // 0x0090 (144) -0xC6BD, 0xBEBD, 0xC6BD, 0xC6DD, 0xC6DD, 0xD71E, 0xD71E, 0xA61C, 0x33B7, 0x2316, 0xBE7C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00A0 (160) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDF3E, 0x2336, 0x3BD7, 0xBE9D, 0xC6DD, 0xBE9D, 0xBE9D, 0xBE9D, 0xBEBD, 0xBE9D, 0xCEFD, 0xEF9F, // 0x00B0 (176) -0xEF9F, 0xD73E, 0xBE9D, 0xBEBD, 0xBE9D, 0xBE9D, 0xB69D, 0xC6BD, 0xCEDD, 0x6CFA, 0x0295, 0x9DBB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00C0 (192) -0xFFFF, 0xFFFF, 0xFFFF, 0xE75E, 0x1AF6, 0x4C58, 0xBEBD, 0xB67D, 0xAE5C, 0xB67D, 0xB67D, 0xB69D, 0xB67D, 0xBEBD, 0xF7DF, 0xFFFF, // 0x00D0 (208) -0xFFFF, 0xFFFF, 0xCF1E, 0xB67D, 0xB67D, 0xB67D, 0xB67D, 0xAE5C, 0xAE5C, 0xC6BD, 0x857B, 0x0295, 0xA5DB, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00E0 (224) -0xFFFF, 0xFFFF, 0xFFDF, 0x3BB7, 0x33D8, 0xB67D, 0xA63C, 0xA63C, 0xAE5C, 0xAE5D, 0xAE5D, 0xAE7D, 0xA65D, 0xC6DD, 0xFFFF, 0xFFFF, // 0x00F0 (240) -0xFFDF, 0xFFFF, 0xDF5E, 0xA65D, 0xAE7D, 0xAE5D, 0xAE5D, 0xAE5C, 0xA63C, 0xA61C, 0xB67D, 0x753A, 0x0295, 0xCEBC, 0xFFFF, 0xFFFF, // 0x0100 (256) -0xF7DF, 0xFFFF, 0x957A, 0x12F6, 0x9E1C, 0x9E1C, 0x9E1C, 0x9E1C, 0xA63C, 0xA63C, 0xA63D, 0xA63D, 0xA65D, 0x9DFC, 0xDF3E, 0xFFFF, // 0x0110 (272) -0xFFFF, 0xFFDF, 0xA61C, 0xA65D, 0xA65D, 0xA63D, 0xA63C, 0xA63C, 0x9E1C, 0x9E1C, 0x9DFC, 0xAE3C, 0x3C18, 0x3396, 0xFFDF, 0xFFFF, // 0x0120 (288) -0xFFFF, 0xF79F, 0x2336, 0x64DA, 0x9DFC, 0x95DC, 0x95FC, 0x95FC, 0x9E1C, 0x9E1C, 0x9E3D, 0x9E3D, 0x9E3D, 0x9E3D, 0x7D3B, 0xA63C, // 0x0130 (304) -0xB6BD, 0x8DBB, 0x8DFC, 0xA65D, 0x9E3D, 0x9E3D, 0x9E1C, 0x9E1C, 0x95FC, 0x95FC, 0x95DC, 0x95DC, 0x8DBB, 0x0AF6, 0xA5DA, 0xFFFF, // 0x0140 (320) -0xFFFF, 0xA5FB, 0x1337, 0x8DBB, 0x8DBB, 0x8DBC, 0x8DDC, 0x95FC, 0x95FC, 0x961C, 0x961D, 0x963D, 0x9E3D, 0x963D, 0xA67D, 0xB6BD, // 0x0150 (336) -0xB6BD, 0xAE7D, 0x9E3D, 0x9E3D, 0x961D, 0x961D, 0x961C, 0x95FC, 0x95FC, 0x8DDC, 0x8DDC, 0x859B, 0x95DC, 0x3C18, 0x4BD7, 0xFFFF, // 0x0160 (352) -0xFFFF, 0x6499, 0x33F8, 0x8DBB, 0x859B, 0x85BC, 0x85BC, 0x8DDC, 0x8DFC, 0x8DFD, 0x8E1D, 0x961D, 0x961D, 0x9E3D, 0xF7BF, 0xFFFF, // 0x0170 (368) -0xFFFF, 0xFFFF, 0xA67D, 0x8E1D, 0x961D, 0x8E1D, 0x8DFD, 0x8DFC, 0x8DDC, 0x85BC, 0x85BC, 0x859B, 0x859B, 0x5CDA, 0x2336, 0xE71C, // 0x0180 (384) -0xFFFF, 0x43F8, 0x4C79, 0x859B, 0x7D7B, 0x7D9C, 0x85BC, 0x85DC, 0x85DC, 0x8DFD, 0x8DFD, 0x8E1D, 0x8E1D, 0xA67E, 0xFFFF, 0xFFFF, // 0x0190 (400) -0xFFFF, 0xFFFF, 0xBEDE, 0x85FD, 0x8E1D, 0x8DFD, 0x8DFD, 0x85DC, 0x85DC, 0x85BC, 0x7D9C, 0x7D7B, 0x7D7B, 0x753B, 0x1B36, 0xBE5A, // 0x01A0 (416) -0xFFBE, 0x3BF8, 0x3419, 0x6D1B, 0x757B, 0x7D9C, 0x7D9C, 0x7DBC, 0x7DDD, 0x85FD, 0x85FD, 0x861D, 0x861D, 0x9E7E, 0xFFFF, 0xFFFF, // 0x01B0 (432) -0xFFFF, 0xFFFF, 0xB6DE, 0x85FD, 0x8E1D, 0x85FD, 0x85FD, 0x7DDD, 0x7DBC, 0x7D9C, 0x7D9C, 0x757B, 0x6D3B, 0x4C9A, 0x1337, 0xADD9, // 0x01C0 (448) -0xFFBE, 0x4418, 0x23B9, 0x3439, 0x4CBA, 0x653B, 0x759C, 0x7DBD, 0x7DDD, 0x7DFD, 0x861D, 0x861E, 0x861E, 0x9E7E, 0xFFFF, 0xFFFF, // 0x01D0 (464) -0xFFFF, 0xFFFF, 0xB6DE, 0x7E1E, 0x861E, 0x85FD, 0x7DFD, 0x7DDD, 0x7DBD, 0x759C, 0x653B, 0x4CDB, 0x3439, 0x2BF9, 0x1337, 0xA5B9, // 0x01E0 (480) -0xFF9E, 0x4C39, 0x2BF9, 0x345A, 0x3C7A, 0x3C9B, 0x4CFC, 0x5D5C, 0x659D, 0x75DD, 0x7DFE, 0x861E, 0x7E3E, 0x969F, 0xFFFF, 0xFFFF, // 0x01F0 (496) -0xFFFF, 0xFFFF, 0xB6FF, 0x7E1E, 0x863E, 0x7DFE, 0x75DD, 0x6D9D, 0x5D5C, 0x4CFC, 0x3C9B, 0x347A, 0x345A, 0x343A, 0x1B78, 0xA5B9, // 0x0200 (512) -0xF79E, 0x4418, 0x2C3A, 0x3C7A, 0x449B, 0x44DB, 0x4CFC, 0x4D3C, 0x555D, 0x5D7D, 0x65BE, 0x6DFE, 0x6DFF, 0x867F, 0xFFFF, 0xFFFF, // 0x0210 (528) -0xFFFF, 0xFFFF, 0xA6DF, 0x65FF, 0x6DFE, 0x65BE, 0x5D9E, 0x555D, 0x4D3C, 0x4CFC, 0x44DB, 0x44BB, 0x3C7A, 0x345A, 0x1B78, 0xA599, // 0x0220 (544) -0xFFDE, 0x43D8, 0x345A, 0x3C9A, 0x44DB, 0x4CFC, 0x4D3C, 0x555D, 0x5D9D, 0x5DBE, 0x65DE, 0x6DFF, 0x661F, 0x867F, 0xFFFF, 0xFFFF, // 0x0230 (560) -0xFFFF, 0xFFFF, 0xA6DF, 0x65FF, 0x6DFF, 0x65DE, 0x5DBE, 0x5D9D, 0x555D, 0x4D3C, 0x4CFC, 0x44DB, 0x3C7A, 0x3C9B, 0x1B57, 0xADB9, // 0x0240 (576) -0xFFFF, 0x4BD7, 0x2C1A, 0x44DB, 0x44DB, 0x4D1C, 0x555D, 0x5D7D, 0x5DBE, 0x65DE, 0x6E1F, 0x6E3F, 0x765F, 0x96BF, 0xFFFF, 0xFFFF, // 0x0250 (592) -0xFFFF, 0xFFFF, 0xAEFF, 0x6E3F, 0x763F, 0x6E1F, 0x65DE, 0x5DBE, 0x5D7D, 0x555D, 0x4D1C, 0x44DC, 0x3C9B, 0x44DC, 0x1AD5, 0xC639, // 0x0260 (608) -0xFFFF, 0x84D8, 0x1317, 0x5D7D, 0x44DB, 0x553C, 0x557D, 0x5D9E, 0x65DE, 0x65FF, 0x6E3F, 0x7E5F, 0x7E7F, 0x9EDF, 0xFFFF, 0xFFFF, // 0x0270 (624) -0xFFFF, 0xFFFF, 0xB73F, 0x7E7F, 0x7E5F, 0x6E3F, 0x65FF, 0x65DE, 0x5D9E, 0x557D, 0x553C, 0x44DC, 0x4D1C, 0x345B, 0x22B4, 0xE71B, // 0x0280 (640) -0xFFFF, 0xD6BC, 0x0234, 0x4CFC, 0x5D7D, 0x4D3C, 0x5D9D, 0x5DBE, 0x65FF, 0x6E3F, 0x765F, 0x867F, 0x8EBF, 0xA6DF, 0xFFFF, 0xFFFF, // 0x0290 (656) -0xFFFF, 0xFFFF, 0xB71F, 0x8EBF, 0x869F, 0x765F, 0x6E3F, 0x65FF, 0x5DBE, 0x5D7D, 0x553D, 0x4D1C, 0x65BE, 0x0AB7, 0x6C15, 0xFFBE, // 0x02A0 (672) -0xFFFF, 0xFFFF, 0x53B6, 0x0296, 0x75FE, 0x5D9D, 0x557D, 0x65DE, 0x6E1F, 0x763F, 0x7E7F, 0x8EBF, 0x9EFF, 0x96BE, 0xAE3C, 0xE77E, // 0x02B0 (688) -0xEF9E, 0xC69D, 0x967E, 0x9EFF, 0x8EBF, 0x7E7F, 0x763F, 0x6E1F, 0x65DE, 0x5D9E, 0x555D, 0x761E, 0x341A, 0x1294, 0xBE18, 0xFFFF, // 0x02C0 (704) -0xFFFF, 0xFFFF, 0xCE9B, 0x0A13, 0x2378, 0x7E5F, 0x6E1E, 0x5DBE, 0x6E1F, 0x7E5F, 0x869F, 0x96DF, 0x9EFF, 0xAF5F, 0x9E9E, 0x8DFC, // 0x02D0 (720) -0x8E1C, 0x967D, 0xAF3F, 0xA6FF, 0x96DF, 0x869F, 0x7E5F, 0x6E1F, 0x5DBE, 0x65DE, 0x7E5F, 0x4CBB, 0x0AB5, 0x7454, 0xEF5C, 0xFFFF, // 0x02E0 (736) -0xFFFF, 0xFFFF, 0xFFFF, 0x8D17, 0x01D3, 0x23B9, 0x7E3E, 0x8E9F, 0x763F, 0x765F, 0x8E9F, 0x9EDF, 0xA71F, 0xB75F, 0xC7BF, 0xCFDF, // 0x02F0 (752) -0xCFDF, 0xC7BF, 0xB75F, 0xA71F, 0x9EDF, 0x8E9F, 0x765F, 0x6E1F, 0x867F, 0x8E7F, 0x4CBB, 0x1317, 0x4BB4, 0xD679, 0xFFFF, 0xFFFF, // 0x0300 (768) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFBD, 0x7476, 0x0214, 0x1B78, 0x659D, 0x9EDF, 0x9EFF, 0x96DF, 0x9EFF, 0xAF1F, 0xB75F, 0xC79F, 0xD7DF, // 0x0310 (784) -0xD7DF, 0xC79F, 0xB75F, 0xAF1F, 0x9EDF, 0x96DF, 0x96DF, 0x9EFF, 0x7E1E, 0x3C5A, 0x1B77, 0x43B5, 0xBDD6, 0xF7BE, 0xFFFF, 0xFFFF, // 0x0320 (800) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF77D, 0x7CB6, 0x12B4, 0x1337, 0x449B, 0x7DFD, 0xA6FF, 0xB75F, 0xBF7F, 0xC79F, 0xCFBF, 0xD7FF, // 0x0330 (816) -0xD7FF, 0xCFBF, 0xC79F, 0xBF7F, 0xB77F, 0xAF1F, 0x8E5E, 0x551B, 0x3419, 0x2BD7, 0x5415, 0xB5B6, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0340 (832) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF79D, 0xA577, 0x3B75, 0x1B36, 0x2BD9, 0x4CBB, 0x759D, 0x965E, 0xAEDF, 0xBF3F, 0xC77F, // 0x0350 (848) -0xC77F, 0xBF3F, 0xB6FF, 0x9E7F, 0x7DDD, 0x5D1C, 0x447A, 0x3C59, 0x4437, 0x7474, 0xC617, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0360 (864) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDE, 0xD699, 0x84D5, 0x43D5, 0x33B7, 0x3418, 0x4C7A, 0x5CFC, 0x753D, 0x857E, // 0x0370 (880) -0x859E, 0x755D, 0x653C, 0x5CFB, 0x4CDA, 0x4CB9, 0x5497, 0x6C95, 0xA555, 0xDEDA, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0380 (896) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF79D, 0xCE79, 0x9D56, 0x7495, 0x5C56, 0x4C77, 0x4C97, 0x4CB8, // 0x0390 (912) -0x54D8, 0x5CD8, 0x5CF8, 0x64D7, 0x74D6, 0x8CF5, 0xAD96, 0xD699, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03A0 (928) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFBE, 0xEF1B, 0xD679, 0xBDF7, 0xAD96, 0xA576, // 0x03B0 (944) -0xA576, 0xAD76, 0xB5B6, 0xC5F7, 0xD679, 0xEF3C, 0xFFDE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03C0 (960) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFBE, // 0x03D0 (976) -0xF7BE, 0xF7BE, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03E0 (992) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03F0 (1008) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0400 (1024) -}; diff --git a/libraries/UTFT/examples/chipKit/UTFT_Bitmap/tux.c b/libraries/UTFT/examples/chipKit/UTFT_Bitmap/tux.c deleted file mode 100644 index 69a04a1..0000000 --- a/libraries/UTFT/examples/chipKit/UTFT_Bitmap/tux.c +++ /dev/null @@ -1,71 +0,0 @@ -// Generated by : ImageConverter 565 v1.0 -// Generated from: tux.png -// Time generated: 11.10.2010 22:51:32 -// Size : 2 048 Bytes - -const unsigned short tux[0x400] ={ -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE73C, 0x9CD3, 0x9CF3, 0xA514, // 0x0010 (16) -0x9CF3, 0x8C51, 0xAD75, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0020 (32) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF7D, 0x5AEB, 0x7BEF, 0x9CD3, 0x94B2, // 0x0030 (48) -0x94B2, 0x94B2, 0x4228, 0x7BEF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0040 (64) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x9CF3, 0x18E3, 0x630C, 0x4A49, 0x4A69, // 0x0050 (80) -0x4A69, 0x528A, 0x4A49, 0x0000, 0xC638, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0060 (96) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x6B6D, 0x0000, 0x0020, 0x10A2, 0x1082, // 0x0070 (112) -0x0841, 0x0841, 0x0841, 0x0000, 0x630C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0080 (128) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x528A, 0x4228, 0x8410, 0x0000, 0x0861, // 0x0090 (144) -0xAD55, 0xBDD7, 0x10A2, 0x0000, 0x2945, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00A0 (160) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x5ACB, 0x8C71, 0xE75D, 0x2126, 0x528B, // 0x00B0 (176) -0xE75D, 0xDEDB, 0x7BCF, 0x0000, 0x18E3, 0xE73C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00C0 (192) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x6B6D, 0x4A4A, 0x6B2A, 0x8BE7, 0xA48A, // 0x00D0 (208) -0x6B09, 0x4A8A, 0x8431, 0x0000, 0x2104, 0xE73C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00E0 (224) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x6B6E, 0x5204, 0xDE6A, 0xFFF7, 0xFFF8, // 0x00F0 (240) -0xD5AC, 0xBCAA, 0x5A66, 0x0000, 0x1082, 0xDEFB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0100 (256) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x8C10, 0xC540, 0xFFED, 0xFF2C, 0xFEEC, // 0x0110 (272) -0xFECC, 0xFE66, 0x8260, 0x0000, 0x0000, 0xB596, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0120 (288) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x94B3, 0x9C25, 0xFF20, 0xFE40, 0xFDA0, // 0x0130 (304) -0xFCC0, 0xF524, 0x836A, 0x0000, 0x0000, 0x630C, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0140 (320) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x630C, 0x94B4, 0xFF13, 0xFD83, 0xF523, // 0x0150 (336) -0xE5CF, 0xF79E, 0xE71D, 0x0861, 0x0000, 0x0861, 0xDEDB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0160 (352) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xCE59, 0x0841, 0xD69A, 0xFFFF, 0xFF7D, 0xF77D, // 0x0170 (368) -0xFFFF, 0xFFFF, 0xFFFF, 0x73AE, 0x0000, 0x0000, 0x4A69, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0180 (384) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF79E, 0x10A2, 0x8410, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, // 0x0190 (400) -0xFFFF, 0xFFDF, 0xFFFF, 0xCE59, 0x0000, 0x0000, 0x0000, 0x9492, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01A0 (416) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x52AA, 0x0020, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01B0 (432) -0xFFDF, 0xFFDF, 0xF7BE, 0xFFDF, 0x3186, 0x0000, 0x0020, 0x0841, 0xCE79, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01C0 (448) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xC638, 0x0000, 0x52AA, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFDF, // 0x01D0 (464) -0xFFDF, 0xF7BE, 0xF79E, 0xFFFF, 0x9CF3, 0x0000, 0x0841, 0x0000, 0x39E7, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01E0 (480) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x5ACB, 0x0000, 0xBDF7, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFDF, 0xFFDF, // 0x01F0 (496) -0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0x3186, 0x0000, 0x0861, 0x0000, 0xAD55, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0200 (512) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE73C, 0x0861, 0x4A49, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, // 0x0210 (528) -0xF7BE, 0xF79E, 0xEF7D, 0xEF5D, 0xFFDF, 0x8410, 0x0000, 0x1082, 0x0000, 0x39E7, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0220 (544) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x94B2, 0x0000, 0xB596, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, // 0x0230 (560) -0xF79E, 0xEF7D, 0xEF7D, 0xE73C, 0xF79E, 0xAD55, 0x0861, 0x10A2, 0x0861, 0x0841, 0xCE59, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0240 (576) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF79E, 0x3185, 0x10A2, 0xE71C, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF79E, // 0x0250 (592) -0xEF7D, 0xEF7D, 0xEF5D, 0xE73C, 0xEF5D, 0xBDF7, 0x18C3, 0x18C3, 0x18C3, 0x0000, 0x8C71, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0260 (608) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x94B2, 0x0000, 0x39E7, 0xF7BE, 0xFFFF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF79E, 0xEF7D, // 0x0270 (624) -0xEF7D, 0xEF5D, 0xE73C, 0xE71C, 0xE71C, 0xC618, 0x18E3, 0x10A2, 0x10A2, 0x0020, 0x6B4D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0280 (640) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x8C51, 0x38E0, 0x4A27, 0xFFFF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF79E, 0xEF7D, 0xEF7D, // 0x0290 (656) -0xEF5D, 0xE73C, 0xE71C, 0xDEFB, 0xDF1D, 0xBDF8, 0x39C7, 0x5ACB, 0x528A, 0x10A3, 0x738F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02A0 (672) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDD6C, 0xFE2B, 0xBC45, 0xA513, 0xFFFF, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF5D, // 0x02B0 (688) -0xE73C, 0xE71C, 0xDEFB, 0xD6DC, 0xDD8E, 0xB3E4, 0x2124, 0x2965, 0x2945, 0x20C1, 0xB511, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02C0 (704) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF77C, 0xE5CF, 0xF60B, 0xFF9B, 0xFF54, 0x8B02, 0x7BF0, 0xFFDF, 0xF79E, 0xEF5D, 0xEF5D, 0xE73C, // 0x02D0 (720) -0xE71C, 0xDEFB, 0xDEDB, 0xCE7A, 0xED89, 0xDDAD, 0x0842, 0x0000, 0x0000, 0xAC69, 0xDD6B, 0xEFBF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02E0 (736) -0xFFFF, 0xFFFF, 0xFFBE, 0xE5CB, 0xEDC9, 0xFE4B, 0xFF14, 0xFEF3, 0xFF35, 0xFE8D, 0x51C1, 0x634E, 0xE73C, 0xEF5D, 0xE73C, 0xE71C, // 0x02F0 (752) -0xDEFB, 0xDEDB, 0xD6DB, 0xCE59, 0xE58B, 0xFF98, 0xBD4F, 0x8B88, 0xCD90, 0xFFB7, 0xCCE8, 0xE73D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0300 (768) -0xFFFF, 0xFFFF, 0xEF3B, 0xF583, 0xFF30, 0xFF11, 0xFECF, 0xFEEF, 0xFECF, 0xFF30, 0xDD46, 0x2903, 0x6B8E, 0xEF7D, 0xE71C, 0xDEFB, // 0x0310 (784) -0xDEDB, 0xD6BA, 0xD69A, 0xCE59, 0xE5AA, 0xFF11, 0xFF53, 0xFF73, 0xFF33, 0xFF12, 0xFE6C, 0xDDAD, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0320 (800) -0xFFFF, 0xFFFF, 0xF79E, 0xEDC5, 0xFECB, 0xFECC, 0xFECC, 0xFEEC, 0xFECB, 0xFECC, 0xFEEA, 0x9BE5, 0x8432, 0xE73C, 0xDEDB, 0xDEDB, // 0x0330 (816) -0xD6BA, 0xD69A, 0xDEDB, 0xA4F3, 0xD547, 0xFF2E, 0xFECD, 0xFECE, 0xFEEE, 0xFEEE, 0xFF10, 0xFEAB, 0xE5A8, 0xEF7D, 0xFFFF, 0xFFFF, // 0x0340 (832) -0xFFFF, 0xFFFF, 0xF79E, 0xF603, 0xFEA2, 0xFEC7, 0xFEC7, 0xFEA4, 0xFE81, 0xFE61, 0xFEA4, 0xFE43, 0xDE33, 0xE75E, 0xE71C, 0xDEFB, // 0x0350 (848) -0xDEDB, 0xCE58, 0x8C72, 0x5247, 0xEDE4, 0xFF0A, 0xFECA, 0xFEC9, 0xFE84, 0xFE83, 0xFEE7, 0xFEA3, 0xB443, 0xD69B, 0xFFFF, 0xFFFF, // 0x0360 (864) -0xFFFF, 0xFFFF, 0xF75B, 0xFE60, 0xFF00, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEE0, 0xE5C1, 0x9492, 0xA514, 0x9CD3, // 0x0370 (880) -0x8410, 0x630B, 0x4229, 0x6AE8, 0xFE80, 0xFEC1, 0xFEC1, 0xFEA0, 0xFEA0, 0xFEE0, 0xDD80, 0x9BE8, 0xB597, 0xFFDF, 0xFFFF, 0xFFFF, // 0x0380 (896) -0xFFFF, 0xFFFF, 0xF79E, 0xD589, 0xE600, 0xFEA0, 0xFF00, 0xFF40, 0xFF40, 0xFF00, 0xFF00, 0xFF20, 0xFEC0, 0x5267, 0x4229, 0x4A48, // 0x0390 (912) -0x4A49, 0x5289, 0x424A, 0x7B46, 0xFF20, 0xFEE0, 0xFEE0, 0xFF20, 0xFEE0, 0xB4A5, 0x9C92, 0xDEFD, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03A0 (928) -0xFFFF, 0xFFFF, 0xFFFF, 0xE71D, 0xBDB6, 0xB530, 0xBD0B, 0xCD65, 0xEE60, 0xFF40, 0xFFA0, 0xFF80, 0xBD03, 0x8410, 0xA514, 0xA534, // 0x03B0 (944) -0xAD75, 0xB596, 0xA555, 0x9C8F, 0xF6C0, 0xFFA0, 0xFFA0, 0xF6E0, 0xA449, 0xB5B8, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03C0 (960) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF7F, 0xD69C, 0xBD95, 0xBD4C, 0xCDC6, 0xB4E8, 0xAD35, 0xF7BF, 0xFFFF, 0xFFFF, // 0x03D0 (976) -0xFFFF, 0xFFFF, 0xFFFF, 0xF7BF, 0xCDD0, 0xCDC6, 0xCDA7, 0xA48D, 0xCE7B, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03E0 (992) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDF1F, 0xB59A, 0xBDDA, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, // 0x03F0 (1008) -0xFFFF, 0xFFDF, 0xFFDF, 0xFFFF, 0xEF7F, 0xB59A, 0xAD59, 0xDF1D, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0400 (1024) -}; diff --git a/libraries/UTFT/examples/chipKit/UTFT_Bitmap_128x128/UTFT_Bitmap_128x128.pde b/libraries/UTFT/examples/chipKit/UTFT_Bitmap_128x128/UTFT_Bitmap_128x128.pde deleted file mode 100644 index 85f0573..0000000 --- a/libraries/UTFT/examples/chipKit/UTFT_Bitmap_128x128/UTFT_Bitmap_128x128.pde +++ /dev/null @@ -1,49 +0,0 @@ -// UTFT_Bitmap_128x128 (C)2012 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of the drawBitmap()-function. -// -// This demo was made to work on the 128x128 modules. -// Any other size displays may cause strange behaviour. -// -// This program requires the UTFT library. -// - -#include - -UTFT myGLCD(LPH9135,6,5,2,3,4); // Remember to change the model parameter to suit your display module! - -extern unsigned short icon1[0x400]; -extern unsigned short icon2[0x400]; -extern unsigned short tux[0x1000]; - -void setup() -{ - myGLCD.InitLCD(PORTRAIT); -} - -void loop() -{ -// Draw a 4 by 4 grid of a 32x32 icon. - myGLCD.fillScr(255, 255, 255); - for (int x=0; x<4; x++) - for (int y=0; y<4; y++) - myGLCD.drawBitmap (x*32, y*32, 32, 32, icon1); - - delay(5000); - -// Draw a 64x64 icon in double size. - myGLCD.fillScr(255, 255, 255); - myGLCD.drawBitmap (0, 0, 64, 64, tux, 2); - - delay(5000); - -// Draw a 2 by 2 grid of a 32x32 icon in double size. - myGLCD.fillScr(255, 255, 255); - for (int x=0; x<2; x++) - for (int y=0; y<2; y++) - myGLCD.drawBitmap (x*64, y*64, 32, 32, icon2, 2); - - delay(5000); -} - diff --git a/libraries/UTFT/examples/chipKit/UTFT_Bitmap_128x128/icon1.c b/libraries/UTFT/examples/chipKit/UTFT_Bitmap_128x128/icon1.c deleted file mode 100644 index b9c2c97..0000000 --- a/libraries/UTFT/examples/chipKit/UTFT_Bitmap_128x128/icon1.c +++ /dev/null @@ -1,72 +0,0 @@ -// Generated by : ImageConverter 565 v1.0 -// Generated from: exit.png -// Time generated: 14.10.2010 21:53:03 -// Dimensions : 32x32 pixels -// Size : 2 048 Bytes - -const unsigned short icon1[0x400] ={ -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF1C, 0xE618, 0xE638, 0xE638, 0xE638, 0xE659, 0xE659, 0xE659, 0xE659, 0xE659, 0xE679, 0xE679, // 0x0010 (16) -0xE679, 0xE679, 0xE679, 0xE679, 0xEE79, 0xEE9A, 0xEE9A, 0xEE9A, 0xEE9A, 0xEE9A, 0xE638, 0xEEBA, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0020 (32) -0xFFFF, 0xFFFF, 0xFFFF, 0xD555, 0xCCD3, 0xDDB6, 0xDDD7, 0xDDF7, 0xDDF7, 0xDE18, 0xE618, 0xE638, 0xE638, 0xE659, 0xE679, 0xE679, // 0x0030 (48) -0xEE9A, 0xEE9A, 0xEEBA, 0xEEBA, 0xEEBA, 0xEEDB, 0xEEDB, 0xEEFB, 0xEEFB, 0xEEFB, 0xEEFB, 0xE659, 0xD575, 0xF77D, 0xFFFF, 0xFFFF, // 0x0040 (64) -0xFFDF, 0xFFFF, 0xD534, 0xC471, 0xD575, 0xCCF3, 0xCCD3, 0xCCD3, 0xCCF3, 0xCCF3, 0xD4F3, 0xD514, 0xD514, 0xD514, 0xD534, 0xDD55, // 0x0050 (80) -0xDD55, 0xDD55, 0xDD55, 0xDD75, 0xDD75, 0xDD75, 0xDD96, 0xDD96, 0xDD96, 0xDDB6, 0xDDD7, 0xEE79, 0xEEBA, 0xD534, 0xFFBE, 0xFFFF, // 0x0060 (96) -0xFFFF, 0xEEDB, 0xB38E, 0xC4B2, 0xBC30, 0xC451, 0xC471, 0xC471, 0xCC71, 0xCC92, 0xCC92, 0xCC92, 0xCCB2, 0xD4B2, 0xD4B2, 0xCC71, // 0x0070 (112) -0xCC71, 0xD4D3, 0xD4F3, 0xDCF3, 0xDCF3, 0xDD14, 0xDD14, 0xDD14, 0xDD34, 0xDD34, 0xDD34, 0xDD14, 0xE5D7, 0xDD96, 0xDDF7, 0xFFFF, // 0x0080 (128) -0xFFFF, 0xC4F3, 0xAB2C, 0xC430, 0xC410, 0xC430, 0xC430, 0xC430, 0xCC51, 0xCC51, 0xCC51, 0xCC71, 0xCC71, 0xD471, 0xCC71, 0xD5F7, // 0x0090 (144) -0xD5F7, 0xCC92, 0xDCB2, 0xDCD3, 0xDCD3, 0xDCD3, 0xDCD3, 0xDCF3, 0xDCF3, 0xDD14, 0xDD14, 0xDD34, 0xDD14, 0xDD34, 0xC492, 0xFFFF, // 0x00A0 (160) -0xFFFF, 0xB3EF, 0x9A28, 0xC430, 0xBBCF, 0xC3EF, 0xC3EF, 0xC3EF, 0xC410, 0xCC10, 0xCC10, 0xCC30, 0xCC51, 0xCBEF, 0xE638, 0xFFFF, // 0x00B0 (176) -0xFFFF, 0xE659, 0xD430, 0xDC92, 0xDC92, 0xDC92, 0xDCB2, 0xDCB2, 0xDCB2, 0xDCD3, 0xDCD3, 0xDCD3, 0xE514, 0xD410, 0xAB0C, 0xF7FF, // 0x00C0 (192) -0xFFFF, 0xABCF, 0x9165, 0xC3EF, 0xBB8E, 0xBBAE, 0xC3AE, 0xC3CF, 0xC3CF, 0xCBCF, 0xCBEF, 0xCC10, 0xCC10, 0xCBAE, 0xEE9A, 0xFFFF, // 0x00D0 (208) -0xFFFF, 0xF6DB, 0xD410, 0xDC71, 0xDC71, 0xDC71, 0xDC71, 0xDC71, 0xDC71, 0xE492, 0xE492, 0xE492, 0xE4F3, 0xCB2C, 0xA249, 0xF7FF, // 0x00E0 (224) -0xFFFF, 0xABCF, 0x88C3, 0xC3AE, 0xBB4D, 0xBB6D, 0xC36D, 0xC38E, 0xC38E, 0xCBAE, 0xC36D, 0xC34D, 0xCBCF, 0xCB8E, 0xEE59, 0xFFFF, // 0x00F0 (240) -0xFFFF, 0xF6BA, 0xDBCF, 0xD3CF, 0xCBAE, 0xD3CF, 0xE430, 0xE430, 0xE451, 0xE451, 0xE451, 0xE451, 0xECD3, 0xCAAA, 0xA208, 0xF7FF, // 0x0100 (256) -0xFFFF, 0xABCF, 0x8061, 0xBB6D, 0xBB2C, 0xBB2C, 0xC34D, 0xC34D, 0xCB4D, 0xBB0C, 0xC492, 0xCD14, 0xC38E, 0xCB2C, 0xEE59, 0xFFFF, // 0x0110 (272) -0xFFFF, 0xF6BA, 0xD36D, 0xD575, 0xE6DB, 0xDDB6, 0xD3AE, 0xE3EF, 0xE410, 0xE410, 0xE430, 0xE410, 0xECB2, 0xC986, 0xA208, 0xF7FF, // 0x0120 (288) -0xFFFF, 0xB3EF, 0x8041, 0xBB0C, 0xBAEB, 0xBAEB, 0xC30C, 0xC30C, 0xBACB, 0xD5B6, 0xFFFF, 0xFFFF, 0xEE79, 0xCACB, 0xEE59, 0xFFFF, // 0x0130 (304) -0xFFFF, 0xF679, 0xDBEF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEEBA, 0xD3CF, 0xE3AE, 0xE3EF, 0xE3CF, 0xEC10, 0xEB6D, 0xC000, 0xA249, 0xF7FF, // 0x0140 (320) -0xFFFF, 0xB3EF, 0x8020, 0xBACB, 0xBAAA, 0xBAAA, 0xC2EB, 0xBA8A, 0xD596, 0xFFFF, 0xFFDF, 0xFFFF, 0xF73C, 0xCAAA, 0xEE38, 0xFFFF, // 0x0150 (336) -0xFFFF, 0xF679, 0xDB4D, 0xFF7D, 0xFFFF, 0xFFDF, 0xFFFF, 0xEEDB, 0xDB6D, 0xEB8E, 0xEBAE, 0xEB8E, 0xE0A2, 0xC800, 0xAA49, 0xF7FF, // 0x0160 (352) -0xFFFF, 0xB3EF, 0x8000, 0xB28A, 0xBA69, 0xBA8A, 0xBA49, 0xCC30, 0xFFFF, 0xFFDF, 0xFFFF, 0xFF5D, 0xDBCF, 0xCA69, 0xEE18, 0xFFFF, // 0x0170 (368) -0xFFFF, 0xF679, 0xDAAA, 0xE3AE, 0xF6BA, 0xFFFF, 0xFFDF, 0xFFFF, 0xE5D7, 0xE30C, 0xEB8E, 0xE0E3, 0xE000, 0xC800, 0xAA49, 0xF7FF, // 0x0180 (384) -0xFFFF, 0xB3EF, 0x8800, 0xB249, 0xBA49, 0xBA49, 0xBA49, 0xEF1C, 0xFFFF, 0xFFFF, 0xFF7D, 0xD32C, 0xCA69, 0xD249, 0xEDF7, 0xFFFF, // 0x0190 (400) -0xFFFF, 0xF659, 0xDAAA, 0xE2CB, 0xE2EB, 0xFEBA, 0xFFFF, 0xFFDF, 0xFFDF, 0xE3CF, 0xE103, 0xE000, 0xE081, 0xD000, 0xAA69, 0xF7FF, // 0x01A0 (416) -0xFFFF, 0xB3EF, 0x8800, 0xB228, 0xBA08, 0xB9A6, 0xCBAE, 0xFFFF, 0xFFDF, 0xFFFF, 0xDC30, 0xC9E7, 0xD28A, 0xCA08, 0xF618, 0xFFFF, // 0x01B0 (432) -0xFFFF, 0xF679, 0xDA49, 0xE2CB, 0xE28A, 0xEB6D, 0xFFBE, 0xFFDF, 0xFFFF, 0xEC92, 0xE000, 0xE0A2, 0xE0C2, 0xD040, 0xAA89, 0xF7FF, // 0x01C0 (448) -0xFFFF, 0xB3EF, 0x8800, 0xB1E7, 0xB9E7, 0xB165, 0xDD55, 0xFFFF, 0xFFFF, 0xF71C, 0xCA08, 0xCA08, 0xD228, 0xD1E7, 0xE430, 0xFFDF, // 0x01D0 (464) -0xFFDF, 0xEC51, 0xDA08, 0xE28A, 0xE28A, 0xE228, 0xF618, 0xFFFF, 0xFFFF, 0xF679, 0xE081, 0xE0C2, 0xE903, 0xD081, 0xAA89, 0xF7FF, // 0x01E0 (480) -0xFFFF, 0xBBEF, 0x9000, 0xB1A6, 0xB986, 0xB145, 0xEE38, 0xFFFF, 0xFFFF, 0xED96, 0xC165, 0xC9E7, 0xD1E7, 0xD1E7, 0xD1C7, 0xDACB, // 0x01F0 (496) -0xE2EB, 0xD9E7, 0xE228, 0xE228, 0xEA69, 0xE9E7, 0xF40F, 0xFFFF, 0xFFFF, 0xFF5D, 0xE144, 0xE8E2, 0xE943, 0xD8C1, 0xAA8A, 0xF7FF, // 0x0200 (512) -0xFFFF, 0xBC10, 0x9000, 0xB165, 0xB145, 0xB924, 0xEE9A, 0xFFFF, 0xFFFF, 0xE514, 0xC124, 0xC9A6, 0xD1A6, 0xD1A6, 0xD1C7, 0xD9A6, // 0x0210 (528) -0xD9A6, 0xE1E7, 0xE208, 0xE208, 0xE9A6, 0xE041, 0xEA8A, 0xFFFF, 0xFFFF, 0xFF9E, 0xE9C6, 0xE902, 0xE984, 0xD902, 0xAAAA, 0xF7FF, // 0x0220 (544) -0xFFFF, 0xC410, 0x9000, 0xB124, 0xB124, 0xB0C3, 0xEE18, 0xFFFF, 0xFFFF, 0xE575, 0xC0E3, 0xC986, 0xD165, 0xD165, 0xD986, 0xD9A6, // 0x0230 (560) -0xD9A6, 0xE1A6, 0xE165, 0xE082, 0xE020, 0xE000, 0xEB4C, 0xFFFF, 0xFFFF, 0xFF7D, 0xE9A5, 0xE943, 0xE9A5, 0xD923, 0xAAAA, 0xF7FF, // 0x0240 (576) -0xFFFF, 0xC410, 0x9800, 0xB0E3, 0xB0E3, 0xB061, 0xE4F3, 0xFFFF, 0xFFFF, 0xF6FB, 0xC104, 0xC924, 0xD145, 0xD145, 0xD945, 0xD945, // 0x0250 (592) -0xD8E3, 0xD861, 0xD800, 0xE000, 0xE061, 0xE000, 0xED34, 0xFFFF, 0xFFFF, 0xFE9A, 0xE923, 0xE984, 0xE9C5, 0xE163, 0xAAAA, 0xF7FF, // 0x0260 (608) -0xFFFF, 0xC410, 0xA000, 0xB0A2, 0xB0A2, 0xB041, 0xCACB, 0xFFFF, 0xFFDF, 0xFFFF, 0xD34D, 0xC841, 0xD104, 0xD0A2, 0xD061, 0xD000, // 0x0270 (624) -0xD800, 0xD800, 0xE000, 0xE041, 0xE000, 0xD965, 0xFF9E, 0xFFDF, 0xFFFF, 0xF4D2, 0xE8E2, 0xE9A5, 0xE9E5, 0xE183, 0xAAAA, 0xF7FF, // 0x0280 (640) -0xFFFF, 0xCC10, 0xA000, 0xA861, 0xB061, 0xB061, 0xB882, 0xF6DB, 0xFFFF, 0xFFDF, 0xF75D, 0xC124, 0xC800, 0xD000, 0xD000, 0xD800, // 0x0290 (656) -0xD800, 0xE000, 0xE020, 0xE000, 0xD861, 0xF638, 0xFFFF, 0xFFDF, 0xFFDF, 0xEA68, 0xE943, 0xE9C5, 0xEA06, 0xE1A4, 0xB2CA, 0xF7FF, // 0x02A0 (672) -0xFFFF, 0xCC10, 0xA000, 0xA820, 0xB000, 0xB000, 0xB000, 0xCA49, 0xFFFF, 0xFFDF, 0xFFFF, 0xF71C, 0xCA08, 0xC800, 0xD000, 0xD800, // 0x02B0 (688) -0xD800, 0xD800, 0xD800, 0xD944, 0xEE18, 0xFFFF, 0xFFBE, 0xFFFF, 0xF4F2, 0xE902, 0xE9A5, 0xE9C5, 0xEA06, 0xE9A4, 0xB2CA, 0xF7FF, // 0x02C0 (704) -0xFFFF, 0xD410, 0xA800, 0xA800, 0xB000, 0xB000, 0xB800, 0xB800, 0xDC10, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xED96, 0xDAEB, 0xD1A6, // 0x02D0 (720) -0xD965, 0xDA69, 0xECD3, 0xFF9E, 0xFFFF, 0xFFBE, 0xFFFF, 0xFE17, 0xE923, 0xE964, 0xE9A5, 0xE9C5, 0xEA26, 0xE9C4, 0xBACA, 0xF7FF, // 0x02E0 (736) -0xF7FF, 0xD410, 0xA800, 0xA800, 0xB000, 0xB000, 0xB800, 0xB800, 0xB800, 0xE3EF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02F0 (752) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF5B6, 0xE923, 0xE923, 0xE984, 0xE9A5, 0xE9E5, 0xEA26, 0xE9C5, 0xBACA, 0xF7FF, // 0x0300 (768) -0xF7FF, 0xDC10, 0xB000, 0xA800, 0xB000, 0xB000, 0xB800, 0xB800, 0xC000, 0xC000, 0xD228, 0xF638, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0310 (784) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFEFB, 0xF3AE, 0xE0C1, 0xE903, 0xE964, 0xE984, 0xE9A5, 0xE9E5, 0xEA26, 0xE9E5, 0xC2CA, 0xF7DF, // 0x0320 (800) -0xF7FF, 0xDC51, 0xB800, 0xA800, 0xB000, 0xB000, 0xB800, 0xB800, 0xC000, 0xC000, 0xC000, 0xC800, 0xD9E7, 0xEC30, 0xF5D7, 0xFE9A, // 0x0330 (816) -0xFEBA, 0xF618, 0xF4D3, 0xEACB, 0xE0E2, 0xE040, 0xE903, 0xE943, 0xE943, 0xE984, 0xE9A5, 0xE9E5, 0xEA26, 0xEA05, 0xC30C, 0xF7DF, // 0x0340 (832) -0xFFFF, 0xD575, 0xD104, 0xA820, 0xB000, 0xB800, 0xB800, 0xC000, 0xC000, 0xC000, 0xC820, 0xC800, 0xD000, 0xD000, 0xD800, 0xD800, // 0x0350 (848) -0xE000, 0xE000, 0xE000, 0xE000, 0xE0A1, 0xE0E3, 0xE903, 0xE943, 0xE964, 0xE984, 0xE9C5, 0xE9C5, 0xF226, 0xE227, 0xBC10, 0xF7FF, // 0x0360 (864) -0xFFFF, 0xDF3C, 0xCAAA, 0xD186, 0xB082, 0xB000, 0xB800, 0xB800, 0xB800, 0xC000, 0xC000, 0xC800, 0xC800, 0xD000, 0xD000, 0xD800, // 0x0370 (880) -0xD800, 0xE000, 0xE020, 0xE040, 0xE061, 0xE0A1, 0xE0C2, 0xE102, 0xE123, 0xE943, 0xE984, 0xEA26, 0xFB0A, 0xBA08, 0xCE38, 0xFFFF, // 0x0380 (896) -0xFFFF, 0xFFDF, 0xBDD7, 0xCA69, 0xE248, 0xD207, 0xD1C6, 0xD1C6, 0xD9C7, 0xD9C7, 0xE1C7, 0xE1C7, 0xE1C7, 0xE9C7, 0xE9C7, 0xE9C7, // 0x0390 (912) -0xF1C6, 0xF1C7, 0xF1E7, 0xF207, 0xF228, 0xF248, 0xF269, 0xF289, 0xF2A9, 0xF2CA, 0xFB0A, 0xF2EA, 0xC207, 0xACB3, 0xF7BE, 0xFFFF, // 0x03A0 (928) -0xFFFF, 0xFFFF, 0xF7BE, 0xBDF7, 0xAB8E, 0xC2EB, 0xC2EB, 0xC30B, 0xC30B, 0xC30B, 0xC30B, 0xC30B, 0xC30B, 0xC30B, 0xCB0B, 0xCAEB, // 0x03B0 (944) -0xCAEB, 0xCACA, 0xCACA, 0xCAAA, 0xCAAA, 0xCA8A, 0xCA69, 0xC269, 0xC269, 0xC289, 0xBA69, 0xA2CB, 0xAD34, 0xEF7D, 0xFFFF, 0xFFFF, // 0x03C0 (960) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xDF3C, 0xBE39, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, // 0x03D0 (976) -0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xB5F7, 0xBE38, 0xD71C, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03E0 (992) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03F0 (1008) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0400 (1024) -}; diff --git a/libraries/UTFT/examples/chipKit/UTFT_Bitmap_128x128/icon2.c b/libraries/UTFT/examples/chipKit/UTFT_Bitmap_128x128/icon2.c deleted file mode 100644 index 9b843cc..0000000 --- a/libraries/UTFT/examples/chipKit/UTFT_Bitmap_128x128/icon2.c +++ /dev/null @@ -1,72 +0,0 @@ -// Generated by : ImageConverter 565 v1.0 -// Generated from: video.png -// Time generated: 14.10.2010 21:53:17 -// Dimensions : 32x32 pixels -// Size : 2 048 Bytes - -const unsigned short icon2[0x400] ={ -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0010 (16) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0020 (32) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE71C, 0xB5B6, 0x94B2, 0x8C71, // 0x0030 (48) -0x9492, 0xA534, 0xD6BA, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0040 (64) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF5D, 0x9CF3, 0x73AE, 0x6B6D, 0x73AE, 0x7BCF, // 0x0050 (80) -0x7BEF, 0x7BCF, 0x7BEF, 0xA534, 0xEF7D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0060 (96) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xC638, 0x7BCF, 0x6B6D, 0x738E, 0x7BCF, 0x8C71, 0x9492, // 0x0070 (112) -0x9492, 0x9492, 0x9492, 0x8C51, 0x8C71, 0xDEDB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0080 (128) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xB596, 0x738E, 0x738E, 0x73AE, 0x6B4D, 0x8410, 0x9CF3, 0x9CF3, // 0x0090 (144) -0x9CF3, 0x9CF3, 0x9CF3, 0x9CF3, 0x94B2, 0x7BEF, 0xDEDB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00A0 (160) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xB596, 0x738E, 0x7BEF, 0x8410, 0x632C, 0x4A69, 0x9492, 0xAD75, 0xAD55, // 0x00B0 (176) -0xAD55, 0xAD55, 0xAD55, 0xA534, 0xAD55, 0x9492, 0x8430, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00C0 (192) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xBDF7, 0x7BCF, 0x8430, 0x7BCF, 0x6B4D, 0x528A, 0x6B6D, 0xB5B6, 0xB5B6, 0xB5B6, // 0x00D0 (208) -0xB5B6, 0xB596, 0xB596, 0xAD75, 0xAD75, 0xAD55, 0x8410, 0xB5B6, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00E0 (224) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEDB, 0x7BEF, 0x9CD3, 0xA514, 0x5AEB, 0x630C, 0x6B4D, 0x9492, 0xC638, 0xC618, 0xC618, // 0x00F0 (240) -0xBDF7, 0xBDF7, 0xC618, 0xB5B6, 0xB5B6, 0xB596, 0x9492, 0x8C51, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0100 (256) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0x8C71, 0x94B2, 0xAD55, 0xB5B6, 0x738E, 0x6B4D, 0x632C, 0xB596, 0xD69A, 0xCE59, 0xCE59, // 0x0110 (272) -0xCE79, 0xCE59, 0x6B6D, 0x9492, 0xB5B6, 0xBDF7, 0x9CF3, 0x8430, 0xD69A, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0120 (288) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xB5B6, 0x8C51, 0xAD55, 0xB5B6, 0xCE79, 0x8C51, 0x630C, 0x8C51, 0xCE79, 0xD6BA, 0xD69A, 0xDEDB, // 0x0130 (304) -0xBDD7, 0x8C51, 0x4228, 0x2965, 0xAD55, 0xC638, 0xA534, 0x8430, 0xB5B6, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0140 (320) -0xFFFF, 0xFFFF, 0xFFFF, 0xEF5D, 0x8C51, 0xA514, 0xB5B6, 0xC618, 0xD6BA, 0xB5B6, 0xB596, 0xE71C, 0xDEFB, 0xDEFB, 0xE71C, 0xAD55, // 0x0150 (336) -0x738E, 0x7BEF, 0x5AEB, 0x2945, 0xC638, 0xCE59, 0xA534, 0x9492, 0xA534, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0160 (352) -0xFFFF, 0xFFFF, 0xFFFF, 0xB596, 0x94B2, 0xB5B6, 0xC618, 0xCE79, 0xD6BA, 0xE73C, 0xEF7D, 0xE73C, 0xEF5D, 0xE73C, 0x9CF3, 0x738E, // 0x0170 (368) -0x7BCF, 0x8430, 0x6B6D, 0x2965, 0xB596, 0xD69A, 0xAD55, 0x94B2, 0x9CD3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0180 (384) -0xFFFF, 0xFFFF, 0xF79E, 0x9492, 0x9CF3, 0xB5B6, 0xD69A, 0xDEFB, 0xE71C, 0xE73C, 0x6B6D, 0x528A, 0xDEDB, 0xEF5D, 0x7BEF, 0x8430, // 0x0190 (400) -0x7BEF, 0x8C51, 0x7BCF, 0x2104, 0xB596, 0xD6BA, 0xAD55, 0x9CD3, 0x9CF3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE73C, 0xE6FC, // 0x01A0 (416) -0xFFDF, 0xFFFF, 0xCE59, 0x9492, 0x9492, 0x6B4D, 0x7BCF, 0xBDD7, 0xF7BE, 0xA514, 0x4A49, 0x528A, 0xC638, 0xEF7D, 0x7BEF, 0x7BEF, // 0x01B0 (432) -0x7BEF, 0x8430, 0x5AEB, 0x10A2, 0xC618, 0xD69A, 0xAD55, 0x94B2, 0xA514, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xCE5A, 0x8BF2, // 0x01C0 (448) -0xFFFF, 0xFFFF, 0xAD55, 0x94B2, 0x8C51, 0x5AEB, 0x632C, 0xBDD7, 0xE73C, 0x630C, 0x632C, 0xBDF7, 0xFFDF, 0xEF5D, 0xBDD7, 0xB5B6, // 0x01D0 (464) -0xAD75, 0xAD75, 0x8C51, 0x738E, 0xD69A, 0xCE59, 0xB596, 0x8C51, 0xB5B6, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xCE39, 0x7350, // 0x01E0 (480) -0xFFFF, 0xF79E, 0x94B2, 0x94B2, 0x7BCF, 0x5AEB, 0x738E, 0xD6BA, 0xD69A, 0x2104, 0x6B6D, 0xF79E, 0xF79E, 0xF79E, 0xF7BE, 0xF79E, // 0x01F0 (496) -0xEF7D, 0xEF5D, 0xE73C, 0xE73C, 0xDEFB, 0xBDF7, 0xBDF7, 0x7BEF, 0xD69A, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xAD36, 0x7350, // 0x0200 (512) -0xFFFF, 0xDEDB, 0x8C51, 0x94B2, 0x738E, 0x632C, 0x73AE, 0xCE79, 0xF7BE, 0x7BEF, 0xA514, 0xF7BE, 0xF79E, 0xEF7D, 0xEF7D, 0xEF5D, // 0x0210 (528) -0xE73C, 0xE71C, 0xDEFB, 0xDEDB, 0xDEDB, 0xBDD7, 0xBDF7, 0x73AE, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0x9C75, 0x736F, // 0x0220 (544) -0xFFFF, 0xCE59, 0x8430, 0x94B2, 0x6B4D, 0x6B4D, 0xB596, 0xE73C, 0xEF7D, 0xFFFF, 0xFFFF, 0xF7BE, 0xF79E, 0xEF7D, 0xEF7D, 0xEF5D, // 0x0230 (560) -0xE73C, 0xE73C, 0xDEFB, 0xDEFB, 0xD6BA, 0xC618, 0xAD55, 0x8C71, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEDB, 0x6AEF, 0x9492, // 0x0240 (576) -0xFFFF, 0xBDF7, 0x8430, 0x8C71, 0x6B6D, 0xB596, 0xE71C, 0xE73C, 0xEF5D, 0xE73C, 0xBDF7, 0xCE59, 0xF7BE, 0xEF7D, 0xEF7D, 0xEF5D, // 0x0250 (592) -0xE73C, 0xE71C, 0xDEFB, 0xDEFB, 0xC638, 0xD69A, 0x8410, 0xC618, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0x9474, 0x6B0E, 0xCE59, // 0x0260 (608) -0xFFFF, 0xB5B6, 0x8410, 0x9492, 0xBDD7, 0xD6BA, 0xD6BA, 0xE71C, 0xE73C, 0x8C71, 0x6B4D, 0xA514, 0xF7BE, 0xEF5D, 0xEF5D, 0xE73C, // 0x0270 (624) -0xE73C, 0xE71C, 0xDEFB, 0xDEDB, 0xCE59, 0xC618, 0x7BCF, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xC5F9, 0x7B51, 0x7BEF, 0xFFFF, // 0x0280 (640) -0xFFFF, 0xB596, 0x8C71, 0xAD75, 0xBDF7, 0xCE59, 0xD69A, 0xE71C, 0xCE79, 0x8410, 0x8410, 0x9CD3, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, // 0x0290 (656) -0xE71C, 0xDEFB, 0xDEFB, 0xCE59, 0xDEDB, 0x8C71, 0xAD75, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEBB, 0x83B2, 0x630C, 0xE73C, 0xFFFF, // 0x02A0 (672) -0xFFFF, 0xB5B6, 0x9492, 0xAD55, 0xBDD7, 0xC638, 0xCE79, 0xDEFB, 0xB596, 0x73AE, 0x8410, 0x8410, 0xDEDB, 0xE73C, 0xE71C, 0xE71C, // 0x02B0 (688) -0xDEFB, 0xDEFB, 0xD6BA, 0xCE59, 0xC618, 0x738E, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEDC, 0x8C14, 0x5ACC, 0xC658, 0xFFFF, 0xFFFF, // 0x02C0 (704) -0xFFFF, 0xC638, 0x8C51, 0xA534, 0xB5B6, 0xBDF7, 0xCE59, 0xD6BA, 0x94B2, 0x738E, 0x8410, 0x8430, 0xCE59, 0xE73C, 0xDEFB, 0xDEFB, // 0x02D0 (720) -0xDEDB, 0xDEFB, 0xBDF7, 0xDEDB, 0x73AE, 0xC618, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEDC, 0x8BD2, 0x5ACC, 0xBDD6, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02E0 (736) -0xFFFF, 0xDEDB, 0x8C51, 0xA514, 0xAD75, 0xBDD7, 0xC638, 0xC618, 0x73AE, 0x7BCF, 0x8410, 0x5ACB, 0x8C51, 0xE73C, 0xDEDB, 0xD6BA, // 0x02F0 (752) -0xDEFB, 0xBDD7, 0xD69A, 0x8C71, 0x8C51, 0xFFFF, 0xFFFF, 0xFFDE, 0xCE5A, 0x7B71, 0x62ED, 0xBDF7, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0300 (768) -0xFFFF, 0xF7BE, 0x94B2, 0x94B2, 0xA534, 0xB596, 0xBDF7, 0xB596, 0x6B6D, 0x4208, 0x2945, 0x18C3, 0x6B6D, 0xDEFB, 0xD69A, 0xDEDB, // 0x0310 (784) -0xB5B6, 0xC618, 0x9CF3, 0x6B4D, 0xFFDE, 0xFFFF, 0xEF5D, 0xAD37, 0x62EE, 0x6B4D, 0xCE79, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0320 (800) -0xFFDF, 0xFFFF, 0xBDF7, 0x8C51, 0xA514, 0xAD55, 0xB596, 0xBDD7, 0xA514, 0x738E, 0xA514, 0xB5B6, 0xCE59, 0xD69A, 0xDEDB, 0xB596, // 0x0330 (816) -0xBDF7, 0xA534, 0x6B4C, 0xEF5D, 0xF79E, 0xBDB8, 0x7370, 0x5AAC, 0x8C71, 0xEF7D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0340 (832) -0xFFFF, 0xFFFF, 0xF79E, 0x94B2, 0x94B2, 0xA534, 0xAD55, 0xB5B6, 0xA534, 0xBDD7, 0xD69A, 0xCE59, 0xCE79, 0xCE59, 0xA534, 0x8430, // 0x0350 (848) -0x738E, 0x3186, 0x7BB0, 0x8C33, 0x7370, 0x62ED, 0x8410, 0xCE59, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0360 (864) -0xFFFF, 0xFFFF, 0xFFFF, 0xDEFB, 0x8C71, 0x9CD3, 0xAD55, 0xB596, 0xBDD7, 0xBDD7, 0xBDF7, 0xC618, 0xB5B6, 0xA534, 0xA534, 0x632C, // 0x0370 (880) -0x6B6D, 0xB5B6, 0xAD76, 0xAD76, 0xBE17, 0xE71B, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0380 (896) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEFB, 0x94B2, 0x8C51, 0x94B2, 0xA534, 0xAD55, 0xAD55, 0x9CD3, 0x8C71, 0x73AE, 0x632C, 0xA534, // 0x0390 (912) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03A0 (928) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0xCE59, 0xA514, 0x8430, 0x7BCF, 0x738E, 0x73AE, 0x8410, 0xA534, 0xEF7D, 0xFFFF, // 0x03B0 (944) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03C0 (960) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0xE73C, 0xE71C, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03D0 (976) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03E0 (992) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, // 0x03F0 (1008) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0400 (1024) -}; diff --git a/libraries/UTFT/examples/chipKit/UTFT_Bitmap_128x128/tux.c b/libraries/UTFT/examples/chipKit/UTFT_Bitmap_128x128/tux.c deleted file mode 100644 index 7fefd80..0000000 --- a/libraries/UTFT/examples/chipKit/UTFT_Bitmap_128x128/tux.c +++ /dev/null @@ -1,264 +0,0 @@ -// Generated by : ImageConverter 565 v1.0 -// Generated from: tux_64x64.png -// Time generated: 14.10.2010 21:56:38 -// Dimensions : 64x64 pixels -// Size : 8 192 Bytes - -const unsigned short tux[0x1000] ={ -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0010 (16) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xCE79, 0x9CF3, 0x7BCF, 0x738E, 0x738E, // 0x0020 (32) -0x6B6D, 0x94B2, 0xCE79, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0030 (48) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0040 (64) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0050 (80) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xCE79, 0x6B4D, 0x5ACB, 0x8410, 0x9CF3, 0x9CF3, 0x9CF3, // 0x0060 (96) -0x9CD3, 0x73AE, 0x4208, 0x5ACB, 0xCE79, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0070 (112) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0080 (128) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0090 (144) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xA514, 0x3186, 0x8C51, 0xBDF7, 0xC618, 0xBDF7, 0xBDF7, 0xBDF7, // 0x00A0 (160) -0xBDF7, 0xC618, 0xBDD7, 0x738E, 0x18C3, 0x8C51, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00B0 (176) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00C0 (192) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00D0 (208) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xBDD7, 0x10A2, 0x8C71, 0x9CF3, 0x8C71, 0x8C71, 0x8C71, 0x8C71, 0x8C71, // 0x00E0 (224) -0x8C71, 0x8C51, 0x8C51, 0x9CF3, 0x73AE, 0x0000, 0x7BEF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00F0 (240) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0100 (256) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0110 (272) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0x2945, 0x31A6, 0x7BCF, 0x6B4D, 0x6B6D, 0x6B6D, 0x6B6D, 0x6B6D, 0x6B6D, // 0x0120 (288) -0x6B6D, 0x6B6D, 0x6B6D, 0x6B4D, 0x73AE, 0x2124, 0x0000, 0xAD55, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0130 (304) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0140 (320) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0150 (336) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xC638, 0x0000, 0x31A6, 0x52AA, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, // 0x0160 (352) -0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x528A, 0x2104, 0x0000, 0x2965, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0170 (368) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0180 (384) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0190 (400) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x8C71, 0x0000, 0x1082, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, 0x3186, // 0x01A0 (416) -0x3186, 0x3186, 0x3186, 0x3186, 0x2965, 0x0020, 0x0000, 0x0000, 0x9CF3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01B0 (432) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01C0 (448) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01D0 (464) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x630C, 0x0000, 0x0000, 0x0861, 0x18C3, 0x10A2, 0x10A2, 0x10A2, 0x10A2, 0x18C3, // 0x01E0 (480) -0x1082, 0x0841, 0x1082, 0x10A2, 0x0020, 0x0000, 0x0000, 0x0000, 0x528A, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01F0 (496) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0200 (512) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0210 (528) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x4A49, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0220 (544) -0x0861, 0x3186, 0x18C3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2104, 0xD6BA, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0230 (560) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0240 (576) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0250 (592) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x39C7, 0x0000, 0x3186, 0xAD75, 0x8C51, 0x0841, 0x0000, 0x0000, 0x0000, 0x4208, // 0x0260 (608) -0xD6BA, 0xFFDF, 0xE71C, 0x630C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0xAD75, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0270 (624) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0280 (640) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0290 (656) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x39C7, 0x0000, 0xCE59, 0xFFFF, 0xFFFF, 0x94B2, 0x0000, 0x0000, 0x10A2, 0xE73C, // 0x02A0 (672) -0xFFFF, 0xFFFF, 0xFFFF, 0xEF7D, 0x2124, 0x0000, 0x0000, 0x0000, 0x0000, 0x94B2, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02B0 (688) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02C0 (704) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02D0 (720) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x2965, 0x18E3, 0xDEDB, 0x7BCF, 0xAD75, 0xEF5D, 0x2944, 0x0000, 0x5ACA, 0xFFFF, // 0x02E0 (736) -0xAD55, 0x94B2, 0xAD55, 0xF7BE, 0x8410, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C51, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02F0 (752) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0300 (768) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0310 (784) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x39E7, 0x2945, 0xA514, 0x9CF3, 0x8C71, 0xD6BB, 0x39C9, 0x0000, 0x632E, 0xF7DF, // 0x0320 (800) -0x7BEF, 0xAD54, 0x7BEF, 0xBDF7, 0xB596, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C71, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0330 (816) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0340 (832) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0350 (848) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x4A49, 0x18C3, 0x9492, 0x39E7, 0x3187, 0xA48F, 0x8323, 0x5A00, 0x93A6, 0xCDD5, // 0x0360 (864) -0x4209, 0x4249, 0x2965, 0x9CD2, 0xB575, 0x0000, 0x0000, 0x0000, 0x0000, 0x9492, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0370 (880) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0380 (896) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0390 (912) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x5ACB, 0x0000, 0x9D14, 0x2905, 0x6A40, 0xE643, 0xFFAE, 0xFFF3, 0xFF70, 0xDD86, // 0x03A0 (928) -0x7240, 0x1840, 0x18C3, 0xC65A, 0x73CF, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C51, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03B0 (944) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03C0 (960) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03D0 (976) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x738E, 0x0000, 0x5A6A, 0xD566, 0xFF66, 0xFFF8, 0xFFFD, 0xFFDC, 0xFFFD, 0xFFFA, // 0x03E0 (992) -0xFF0E, 0xE566, 0xC464, 0xC4CC, 0x2103, 0x0000, 0x0000, 0x0000, 0x0000, 0x6B6D, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03F0 (1008) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0400 (1024) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0410 (1040) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x7BEF, 0x0800, 0xB440, 0xFFC6, 0xFFF3, 0xFFB4, 0xFFB2, 0xFF92, 0xFF72, 0xFF53, // 0x0420 (1056) -0xFF55, 0xFF75, 0xFEF0, 0xF542, 0x8240, 0x0000, 0x0000, 0x0000, 0x0000, 0x4228, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0430 (1072) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0440 (1088) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0450 (1104) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x8432, 0x4140, 0xFFE2, 0xFFEB, 0xFFAC, 0xFF8B, 0xFF4C, 0xFF2C, 0xFEEC, 0xFECB, // 0x0460 (1120) -0xFE6A, 0xFE08, 0xFDA7, 0xFDC3, 0xA320, 0x0000, 0x0000, 0x0000, 0x0000, 0x18E3, 0xD69A, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0470 (1136) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0480 (1152) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0490 (1168) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x9D14, 0x28A0, 0xF6E0, 0xFFE1, 0xFF43, 0xFF04, 0xFEC4, 0xFE84, 0xFE23, 0xFDE1, // 0x04A0 (1184) -0xFD60, 0xFD20, 0xFD20, 0xFD20, 0x7241, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9CF3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x04B0 (1200) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x04C0 (1216) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x04D0 (1232) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xB5B6, 0x0000, 0xC4A9, 0xFEC0, 0xFF00, 0xFEA0, 0xFE40, 0xFE00, 0xFDA0, 0xFD60, // 0x04E0 (1248) -0xFD40, 0xFD20, 0xEC80, 0xDCC7, 0x8C0F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x52AA, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x04F0 (1264) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0500 (1280) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0510 (1296) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xAD75, 0x0000, 0xD69B, 0xF631, 0xF5C0, 0xFE80, 0xFE00, 0xFDC0, 0xFD60, 0xFD40, // 0x0520 (1312) -0xFCC0, 0xDC86, 0xCD93, 0xE73D, 0xE71C, 0x0861, 0x0000, 0x0000, 0x0000, 0x0000, 0x0861, 0xC618, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0530 (1328) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0540 (1344) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0550 (1360) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x632C, 0x0000, 0xD6BA, 0xFFFF, 0xF5F1, 0xFD40, 0xFD80, 0xFD20, 0xFCE0, 0xECA3, // 0x0560 (1376) -0xDD6F, 0xE6FC, 0xFFFF, 0xFFFF, 0xFFFF, 0x632C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5ACB, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0570 (1392) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0580 (1408) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0590 (1424) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xDEDB, 0x0861, 0x0000, 0xD69A, 0xFFFF, 0xFFFF, 0xFED8, 0xF631, 0xF610, 0xE5F2, 0xE6B9, // 0x05A0 (1440) -0xF7BF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xE71C, 0x10A2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0xB5B6, 0xFFFF, 0xFFFF, 0xFFFF, // 0x05B0 (1456) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x05C0 (1472) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x05D0 (1488) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0x39E7, 0x0000, 0x4228, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7FF, 0xF7DF, 0xFFFF, // 0x05E0 (1504) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x73AE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3186, 0xEF7D, 0xFFFF, 0xFFFF, // 0x05F0 (1520) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0600 (1536) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0610 (1552) -0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x738E, 0x0000, 0x18C3, 0xDEFB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0620 (1568) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFFF, 0xCE59, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x6B4D, 0xFFFF, 0xFFFF, // 0x0630 (1584) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0640 (1600) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0650 (1616) -0xFFFF, 0xFFDF, 0xFFFF, 0xA514, 0x0000, 0x0000, 0x9CD3, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0660 (1632) -0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0x2965, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xAD55, 0xFFFF, // 0x0670 (1648) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0680 (1664) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0690 (1680) -0xFFDF, 0xFFFF, 0xD69A, 0x0861, 0x0000, 0x2945, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x06A0 (1696) -0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xFFFF, 0x7BCF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18C3, 0xD6BA, // 0x06B0 (1712) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x06C0 (1728) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x06D0 (1744) -0xFFFF, 0xFFDF, 0x39C7, 0x0000, 0x0000, 0x8430, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x06E0 (1760) -0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xFFFF, 0xCE79, 0x0841, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4228, // 0x06F0 (1776) -0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0700 (1792) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, // 0x0710 (1808) -0xFFFF, 0x94B2, 0x0000, 0x0020, 0x0020, 0xCE79, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, // 0x0720 (1824) -0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xFFDF, 0x4A69, 0x0000, 0x0841, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, // 0x0730 (1840) -0x8C71, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0740 (1856) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0750 (1872) -0xEF7D, 0x2104, 0x0020, 0x0000, 0x3186, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, // 0x0760 (1888) -0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xFFFF, 0xB5B6, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0000, // 0x0770 (1904) -0x10A2, 0xD6BA, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0780 (1920) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, // 0x0790 (1936) -0x8C71, 0x0000, 0x0861, 0x0000, 0x7BCF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, // 0x07A0 (1952) -0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xFFDF, 0x528A, 0x0000, 0x0841, 0x0020, 0x0020, 0x0020, 0x0020, // 0x07B0 (1968) -0x0000, 0x630C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x07C0 (1984) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, // 0x07D0 (2000) -0x3186, 0x0000, 0x0841, 0x10A2, 0xE71C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, // 0x07E0 (2016) -0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xF79E, 0xEF5D, 0xF7BE, 0xBDD7, 0x0841, 0x0861, 0x0841, 0x0841, 0x0841, 0x0020, // 0x07F0 (2032) -0x0020, 0x1082, 0xC638, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0800 (2048) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xBDD7, // 0x0810 (2064) -0x0020, 0x1082, 0x0000, 0x7BEF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, // 0x0820 (2080) -0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF7D, 0x4208, 0x0020, 0x0861, 0x0861, 0x0841, 0x0841, // 0x0830 (2096) -0x0841, 0x0000, 0x630C, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0840 (2112) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x6B4D, // 0x0850 (2128) -0x0000, 0x0861, 0x2104, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, // 0x0860 (2144) -0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xE73C, 0xF7BE, 0x8430, 0x0000, 0x1082, 0x0861, 0x0861, 0x0861, // 0x0870 (2160) -0x0861, 0x0020, 0x18C3, 0xCE79, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0880 (2176) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF5D, 0x2124, // 0x0890 (2192) -0x0861, 0x0020, 0x8410, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, // 0x08A0 (2208) -0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xEF7D, 0xB5B6, 0x0861, 0x1082, 0x1082, 0x0861, 0x0861, // 0x08B0 (2224) -0x0861, 0x0861, 0x0000, 0x8430, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x08C0 (2240) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xA514, 0x0020, // 0x08D0 (2256) -0x10A2, 0x1082, 0xD69A, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, // 0x08E0 (2272) -0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xEF5D, 0xCE79, 0x2124, 0x1082, 0x10A2, 0x1082, 0x1082, // 0x08F0 (2288) -0x0861, 0x1082, 0x0000, 0x4208, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0900 (2304) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0x4208, 0x0861, // 0x0910 (2320) -0x1082, 0x31A6, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, // 0x0920 (2336) -0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEDB, 0x39C7, 0x1082, 0x10A2, 0x10A2, 0x1082, // 0x0930 (2352) -0x1082, 0x1082, 0x0841, 0x18C3, 0xC618, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0940 (2368) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xA534, 0x0841, 0x18C3, // 0x0950 (2384) -0x0841, 0x630C, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, // 0x0960 (2400) -0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xDEFB, 0xE73C, 0x4A49, 0x0861, 0x18C3, 0x10A2, 0x10A2, // 0x0970 (2416) -0x10A2, 0x1082, 0x1082, 0x0841, 0x9CD3, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0980 (2432) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF7D, 0x3186, 0x1082, 0x18E3, // 0x0990 (2448) -0x0861, 0x94B2, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, // 0x09A0 (2464) -0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEDB, 0xE73C, 0x4A69, 0x1082, 0x18E3, 0x18C3, 0x10A2, // 0x09B0 (2480) -0x10A2, 0x10A2, 0x10A2, 0x0020, 0x73AE, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x09C0 (2496) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x94B2, 0x0841, 0x18E3, 0x18E3, // 0x09D0 (2512) -0x0861, 0xAD75, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, // 0x09E0 (2528) -0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEFB, 0xDEDB, 0xE73C, 0x52AA, 0x10A2, 0x2104, 0x18E3, 0x18C3, // 0x09F0 (2544) -0x18C3, 0x18C3, 0x10A2, 0x0841, 0x630C, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0A00 (2560) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x632C, 0x0861, 0x18E4, 0x18E4, // 0x0A10 (2576) -0x1082, 0xC638, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, // 0x0A20 (2592) -0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEFB, 0xDEFB, 0xD6BA, 0xE71C, 0x6B4D, 0x10A2, 0x18C3, 0x18C3, 0x10A2, // 0x0A30 (2608) -0x10A2, 0x10A2, 0x18C3, 0x0861, 0x5AEB, 0xE73C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0A40 (2624) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x8410, 0x0862, 0x3143, 0x2924, // 0x0A50 (2640) -0x0882, 0xBDD7, 0xFFFF, 0xFFDF, 0xFFDF, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, // 0x0A60 (2656) -0xEF5D, 0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, 0xDEDB, 0xE73C, 0x630C, 0x2103, 0x4A69, 0x632C, 0x6B4D, // 0x0A70 (2672) -0x528A, 0x2965, 0x18C3, 0x1081, 0x738E, 0xE73C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0A80 (2688) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xB596, 0x7A40, 0xECA0, 0xCC00, // 0x0A90 (2704) -0x3941, 0xA535, 0xFFFF, 0xF7BE, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, // 0x0AA0 (2720) -0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEFB, 0xDEFB, 0xDEFB, 0xD6DB, 0xCE38, 0xC618, 0x4A48, 0x4A49, 0x6B6D, 0x6B4D, 0x6B4D, // 0x0AB0 (2736) -0x6B4D, 0x630C, 0x3186, 0x18E4, 0x9492, 0xEF7D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0AC0 (2752) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xC488, 0xFD41, 0xFE6D, 0xFE6A, // 0x0AD0 (2768) -0xDC60, 0x5A25, 0xB5D8, 0xFFFF, 0xF7BE, 0xF7BE, 0xF7BE, 0xF79E, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, // 0x0AE0 (2784) -0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, 0xD6BB, 0xBCAB, 0xD462, 0xD462, 0x49E4, 0x10C3, 0x18C3, 0x18C3, 0x18C3, // 0x0AF0 (2800) -0x18C3, 0x18E3, 0x10A3, 0x49C4, 0xB575, 0xF7BF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0B00 (2816) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xCD70, 0xECA0, 0xFF14, 0xFF9B, 0xFF7B, // 0x0B10 (2832) -0xFECF, 0xC3A0, 0x3143, 0x9CF3, 0xFFFF, 0xF7BE, 0xF79E, 0xF79E, 0xF79E, 0xEF7D, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, // 0x0B20 (2848) -0xE73C, 0xE71C, 0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, 0xDEFB, 0xC617, 0xDC60, 0xFD60, 0xFD20, 0x3120, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0B30 (2864) -0x0000, 0x0000, 0x3900, 0xE460, 0xB46A, 0xEF9F, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0B40 (2880) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xD5F4, 0xDC20, 0xFE8E, 0xFF59, 0xFF36, 0xFF36, // 0x0B50 (2896) -0xFF59, 0xFE6B, 0xA300, 0x18E4, 0x8410, 0xFFBE, 0xF7BE, 0xEF7D, 0xF79E, 0xEF7D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE73C, // 0x0B60 (2912) -0xE71C, 0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, 0xDEBA, 0xDEFB, 0xC5B5, 0xE4A1, 0xFEF2, 0xF716, 0x3164, 0x18E4, 0x2103, 0x1082, 0x1082, // 0x0B70 (2928) -0x0021, 0x1061, 0xD5D0, 0xFE27, 0xB3E3, 0xCE9B, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0B80 (2944) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF77D, 0xE697, 0xDDAF, 0xD4C8, 0xE480, 0xFE29, 0xFF36, 0xFF15, 0xFF35, 0xFF15, // 0x0B90 (2960) -0xFF15, 0xFF36, 0xFDA5, 0x6A42, 0x1905, 0x6B4C, 0xE73C, 0xFFDF, 0xEF5D, 0xEF7D, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE73C, 0xE71C, // 0x0BA0 (2976) -0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, 0xDEDB, 0xD6BA, 0xDEDB, 0xBDB5, 0xE4C3, 0xFF56, 0xFFDB, 0xAD10, 0x10A2, 0x10C3, 0x18E4, 0x1082, // 0x0BB0 (2992) -0x2922, 0xC5B1, 0xFFDC, 0xFED1, 0xB3A2, 0xBE19, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0BC0 (3008) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE6B8, 0xD484, 0xE4C0, 0xF584, 0xFE28, 0xFECF, 0xFF14, 0xFF13, 0xFF13, 0xFF13, 0xFF13, // 0x0BD0 (3024) -0xFF13, 0xFF14, 0xFEF0, 0xDC80, 0x41C5, 0x2945, 0x5269, 0xCE59, 0xF7BE, 0xEF5D, 0xEF5D, 0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xE71C, // 0x0BE0 (3040) -0xDEFB, 0xDEFB, 0xDEDB, 0xDEDB, 0xD6BA, 0xD69A, 0xD6DB, 0xBD95, 0xE4E2, 0xFF33, 0xFF36, 0xFF97, 0xDDF1, 0x8B66, 0x7AE4, 0x9BC7, // 0x0BF0 (3056) -0xEEB2, 0xFF97, 0xFF37, 0xFEF0, 0xC3E0, 0xB5B7, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0C00 (3072) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xD52B, 0xFD60, 0xFECD, 0xFF33, 0xFF13, 0xFF12, 0xFEF1, 0xFEF1, 0xFEF1, 0xFEF1, 0xFEF1, // 0x0C10 (3088) -0xFEF1, 0xFEF1, 0xFF12, 0xFE69, 0x9B41, 0x31A8, 0x31A6, 0x39E7, 0xB5B6, 0xF79E, 0xE73C, 0xE73C, 0xE73C, 0xE71C, 0xE71C, 0xDEFB, // 0x0C20 (3104) -0xDEFB, 0xDEDB, 0xDEDB, 0xD6BA, 0xD6BA, 0xD699, 0xD6BA, 0xBD94, 0xE502, 0xFF12, 0xFF15, 0xFEF4, 0xFF55, 0xFF95, 0xFF54, 0xFF95, // 0x0C30 (3120) -0xFF35, 0xFEF4, 0xFF14, 0xFF14, 0xF5A4, 0xB426, 0xE75E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0C40 (3136) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xD54C, 0xFDA0, 0xFECE, 0xFEF0, 0xFECF, 0xFEEF, 0xFEEF, 0xFEF0, 0xFEEF, 0xFEF0, 0xFEF0, // 0x0C50 (3152) -0xFEF0, 0xFEEF, 0xFEF0, 0xFEEF, 0xF582, 0x6244, 0x39E8, 0x39C6, 0x528A, 0xE71C, 0xE73C, 0xE71C, 0xE71C, 0xE71C, 0xDEFB, 0xDEFB, // 0x0C60 (3168) -0xDEDB, 0xDEDB, 0xD6BA, 0xD6BA, 0xD69A, 0xCE79, 0xCE9A, 0xBD94, 0xE522, 0xFF10, 0xFEF2, 0xFEF2, 0xFEF2, 0xFEF2, 0xFEF2, 0xFEF2, // 0x0C70 (3184) -0xFEF2, 0xFF12, 0xFEF2, 0xFEF2, 0xFF12, 0xED85, 0xBC68, 0xE73D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0C80 (3200) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xD5B0, 0xF580, 0xFECB, 0xFEEE, 0xFECD, 0xFEEE, 0xFEEE, 0xFEEE, 0xFEEE, 0xFEEE, 0xFEEE, // 0x0C90 (3216) -0xFEEE, 0xFEEE, 0xFECD, 0xFECE, 0xFECA, 0xCC60, 0x41C7, 0x39C7, 0x4228, 0xCE79, 0xEF5D, 0xE71C, 0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, // 0x0CA0 (3232) -0xDEDB, 0xD6BA, 0xD6BA, 0xD69A, 0xCE79, 0xCE59, 0xCE9A, 0xBD73, 0xED42, 0xFF0F, 0xFEF0, 0xFEF0, 0xFEF0, 0xFEF0, 0xFEF0, 0xFEF0, // 0x0CB0 (3248) -0xFEF0, 0xFEF0, 0xFEF0, 0xFEF0, 0xFEF0, 0xFF31, 0xF628, 0xC4A7, 0xDE57, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0CC0 (3264) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDE13, 0xF560, 0xFEC9, 0xFECD, 0xFECC, 0xFECC, 0xFECC, 0xFECC, 0xFECC, 0xFECC, 0xFECC, // 0x0CD0 (3280) -0xFEEC, 0xFEEC, 0xFECC, 0xFECC, 0xFEED, 0xFE44, 0x9323, 0x52CC, 0x73AE, 0xD69A, 0xE73C, 0xDEFB, 0xDEFB, 0xDEFB, 0xDEDB, 0xDEDB, // 0x0CE0 (3296) -0xD6BA, 0xD6BA, 0xD69A, 0xCE79, 0xCE59, 0xD69A, 0xB5D8, 0x7B28, 0xF5A2, 0xFF0F, 0xFECE, 0xFEEE, 0xFEEE, 0xFEEE, 0xFEEE, 0xFEEE, // 0x0CF0 (3312) -0xFEEE, 0xFEEE, 0xFEEE, 0xFEEE, 0xFEEE, 0xFECD, 0xFF10, 0xFEA9, 0xCC60, 0xD615, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0D00 (3328) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDE55, 0xED80, 0xFEA4, 0xFECA, 0xFECA, 0xFECA, 0xFECA, 0xFECA, 0xFECA, 0xFECA, 0xFEC9, // 0x0D10 (3344) -0xFEA7, 0xFEA6, 0xFEA8, 0xFEC9, 0xFECB, 0xFEEA, 0xEDA2, 0xB4F0, 0xCE9A, 0xDEFB, 0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, 0xDEDB, 0xD6BA, // 0x0D20 (3360) -0xD6BA, 0xD69A, 0xCE79, 0xCE79, 0xD6BA, 0xB596, 0x4A8B, 0x72A4, 0xFE45, 0xFEEC, 0xFECC, 0xFEEC, 0xFEEC, 0xFEEC, 0xFEEC, 0xFEEC, // 0x0D30 (3376) -0xFEEC, 0xFECB, 0xFECB, 0xFEEC, 0xFEEC, 0xFEEC, 0xFECC, 0xFEA5, 0xFDE0, 0xAC8B, 0xE75E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0D40 (3392) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE632, 0xF5E0, 0xFE80, 0xFE82, 0xFEC7, 0xFEC8, 0xFEC8, 0xFEC8, 0xFEC7, 0xFEA4, 0xFE61, // 0x0D50 (3408) -0xFE60, 0xFE60, 0xFE60, 0xFE61, 0xFE83, 0xFEA6, 0xFEA3, 0xDD22, 0xD658, 0xE75D, 0xDEDB, 0xDEDB, 0xDEDB, 0xD6BA, 0xD6BA, 0xD69A, // 0x0D60 (3424) -0xD69A, 0xD69A, 0xD6BA, 0xCE59, 0x9492, 0x5289, 0x39E9, 0x9B84, 0xFEA3, 0xFEEB, 0xFEEA, 0xFEEA, 0xFEEA, 0xFEEA, 0xFEEA, 0xFEC8, // 0x0D70 (3440) -0xFE84, 0xFE61, 0xFE61, 0xFEA5, 0xFEC9, 0xFEA7, 0xFEA2, 0xFE80, 0xBC41, 0x8C0F, 0xE71C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0D80 (3456) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDDCE, 0xFE40, 0xFEA0, 0xFE80, 0xFE80, 0xFEA2, 0xFEA2, 0xFEA2, 0xFEA0, 0xFE80, 0xFE80, // 0x0D90 (3472) -0xFEA0, 0xFEA0, 0xFEA0, 0xFE80, 0xFE80, 0xFE80, 0xFE80, 0xFE80, 0xCCE5, 0xD69A, 0xE73C, 0xE71C, 0xDEFB, 0xDEFB, 0xDEDB, 0xDEDB, // 0x0DA0 (3488) -0xD69A, 0xBDF7, 0x9CD3, 0x630C, 0x4228, 0x4A69, 0x422A, 0xB423, 0xFEC0, 0xFEA5, 0xFEE7, 0xFEC7, 0xFEC7, 0xFEC6, 0xFEA3, 0xFE80, // 0x0DB0 (3504) -0xFE80, 0xFE80, 0xFE80, 0xFE60, 0xFEA0, 0xFEC0, 0xEDC0, 0xA3A4, 0x732C, 0xAD96, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0DC0 (3520) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE5A8, 0xFEC0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0DD0 (3536) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEE0, 0xF640, 0x93A8, 0x8C72, 0xA534, 0xAD75, 0xA534, 0x9CF3, 0x8C51, // 0x0DE0 (3552) -0x738E, 0x5ACB, 0x4A49, 0x4A69, 0x528A, 0x4A8A, 0x5249, 0xD502, 0xFEE0, 0xFEA0, 0xFEC0, 0xFEC1, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, // 0x0DF0 (3568) -0xFEA0, 0xFEA0, 0xFEA0, 0xFEE0, 0xFE60, 0xC482, 0x7B09, 0x7BD0, 0xB5B7, 0xEF5D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0E00 (3584) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDD8A, 0xFEC0, 0xFF20, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, // 0x0E10 (3600) -0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEC0, 0xFF20, 0xAC02, 0x4209, 0x4A69, 0x4A69, 0x4A69, 0x4A69, 0x4A69, // 0x0E20 (3616) -0x528A, 0x528A, 0x52AA, 0x52AA, 0x528A, 0x4A8A, 0x5A69, 0xE5C1, 0xFF00, 0xFEC0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, 0xFEE0, // 0x0E30 (3632) -0xFEC0, 0xFEE0, 0xFF00, 0xE561, 0x9367, 0x736E, 0x9D14, 0xD6BA, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0E40 (3648) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xD617, 0xCCC5, 0xF620, 0xFEE0, 0xFF40, 0xFF40, 0xFF40, 0xFF20, 0xFF00, 0xFF00, 0xFF00, // 0x0E50 (3664) -0xFF00, 0xFF00, 0xFF00, 0xFF00, 0xFF00, 0xFF00, 0xFF00, 0xFF00, 0xFF40, 0xB483, 0x4A8B, 0x5ACA, 0x5ACB, 0x5ACB, 0x5ACB, 0x5ACB, // 0x0E60 (3680) -0x5ACB, 0x52AA, 0x52AA, 0x52AA, 0x52AA, 0x4A8A, 0x6289, 0xEE20, 0xFF20, 0xFEE0, 0xFF00, 0xFF00, 0xFF00, 0xFF00, 0xFF00, 0xFEE0, // 0x0E70 (3696) -0xFF20, 0xFEC0, 0xBC64, 0x732B, 0x8C72, 0xCE58, 0xEF7D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0E80 (3712) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF7E, 0xB576, 0x93EE, 0xA408, 0xC4A5, 0xDD63, 0xF641, 0xFEC0, 0xFF40, 0xFF80, 0xFF60, // 0x0E90 (3728) -0xFF40, 0xFF20, 0xFF20, 0xFF40, 0xFF40, 0xFF40, 0xFF20, 0xFF20, 0xFF80, 0xAC03, 0x4A6B, 0x5ACA, 0x5ACB, 0x5ACB, 0x5AEB, 0x5AEB, // 0x0EA0 (3744) -0x5AEB, 0x630C, 0x630C, 0x630C, 0x5AEB, 0x52CB, 0x5A69, 0xE5E1, 0xFF60, 0xFF20, 0xFF20, 0xFF20, 0xFF20, 0xFF20, 0xFF20, 0xFF60, // 0x0EB0 (3760) -0xF640, 0xA3A7, 0x738F, 0xAD96, 0xE71C, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0EC0 (3776) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF79E, 0xD6DB, 0xB5B8, 0x9CD4, 0x9431, 0x93EE, 0x9C0A, 0xB467, 0xD544, 0xF660, // 0x0ED0 (3792) -0xFF60, 0xFFA0, 0xFF80, 0xFF60, 0xFF40, 0xFF40, 0xFF60, 0xFFA0, 0xD521, 0x730A, 0x73CF, 0x8C71, 0x9CD3, 0x9CF3, 0xA514, 0xA534, // 0x0EE0 (3808) -0xAD55, 0xB596, 0xB5B6, 0xB596, 0xAD55, 0x9CF3, 0x83F0, 0xCD04, 0xFFA0, 0xFF40, 0xFF40, 0xFF40, 0xFF40, 0xFF40, 0xFFA0, 0xF621, // 0x0EF0 (3824) -0x8B49, 0x8431, 0xCE58, 0xF79E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F00 (3840) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xF79E, 0xE73C, 0xD6BB, 0xBE19, 0xA556, 0x9472, 0x9C0D, // 0x0F10 (3856) -0xB447, 0xDD82, 0xFEE0, 0xFFA0, 0xFFC0, 0xFFC0, 0xFF80, 0xC4C2, 0x730C, 0x9CF4, 0xD69A, 0xEF5D, 0xEF7D, 0xF79E, 0xF79E, 0xF7BE, // 0x0F20 (3872) -0xF7BE, 0xFFDF, 0xFFDF, 0xF7BE, 0xF7BE, 0xEF7D, 0xDF1C, 0xC530, 0xF620, 0xFFC0, 0xFFC0, 0xFFC0, 0xFFC0, 0xFF80, 0xE5A2, 0x834A, // 0x0F30 (3888) -0x8C93, 0xDEDA, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F40 (3904) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDE, 0xEF7D, 0xD6BB, // 0x0F50 (3920) -0xAD77, 0x9452, 0x9BEB, 0xB466, 0xC524, 0xC543, 0xA3E5, 0x734D, 0xAD76, 0xEF5C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F60 (3936) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDF1C, 0xACB0, 0xBCA6, 0xD544, 0xCD64, 0xCD05, 0xAC07, 0x7B6D, 0x9CF4, // 0x0F70 (3952) -0xE6FB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F80 (3968) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F90 (3984) -0xFFDE, 0xE75D, 0xC65A, 0xA536, 0x9493, 0x8C53, 0x94B4, 0xBE18, 0xEF7D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0FA0 (4000) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xDEFC, 0xAD57, 0x9493, 0x8C73, 0x8C73, 0x94D4, 0xBE18, 0xEF5D, // 0x0FB0 (4016) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0FC0 (4032) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0FD0 (4048) -0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0xEF5C, 0xE73C, 0xEF5C, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0FE0 (4064) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0xEF5C, 0xE73C, 0xEF5C, 0xEF7D, 0xFFDE, 0xFFFF, // 0x0FF0 (4080) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x1000 (4096) -}; diff --git a/libraries/UTFT/examples/chipKit/UTFT_Demo_128x128_Serial/UTFT_Demo_128x128_Serial.pde b/libraries/UTFT/examples/chipKit/UTFT_Demo_128x128_Serial/UTFT_Demo_128x128_Serial.pde deleted file mode 100644 index 45a97e6..0000000 --- a/libraries/UTFT/examples/chipKit/UTFT_Demo_128x128_Serial/UTFT_Demo_128x128_Serial.pde +++ /dev/null @@ -1,335 +0,0 @@ -// UTFT_Demo_128x128_Serial (C)2012 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of how to use most of the functions -// of the library with a supported display modules. -// -// This demo was made to work on the 128x128 modules. -// Any other size displays may cause strange behaviour. -// -// This program requires the UTFT library. -// - -#include - -// Declare which fonts we will be using -extern uint8_t SmallFont[]; - -// Declare an instance of the class -UTFT myGLCD(LPH9135,6,5,2,3,4); // Remember to change the model parameter to suit your display module! - -void setup() -{ - randomSeed(analogRead(0)); - -// Setup the LCD - myGLCD.InitLCD(PORTRAIT); - myGLCD.setFont(SmallFont); -} - -void loop() -{ - byte buf[126]; - int x, x2; - int y, y2; - int r; - -// Clear the screen and draw the frame - myGLCD.clrScr(); - myGLCD.setContrast(64); - - myGLCD.setColor(255, 0, 0); - myGLCD.fillRect(0,0,127,12); - myGLCD.setColor(64, 64, 64); - myGLCD.fillRect(0,117,127,127); - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255,0,0); - myGLCD.print("Universal TFT", CENTER, 0); - myGLCD.setBackColor(64,64,64); - myGLCD.setColor(255,255,0); - myGLCD.print("H.Karlsen", LEFT, 116); - myGLCD.print("(C)2012", RIGHT, 116); - myGLCD.setColor(0,255,0); - myGLCD.drawRect(0,13,127,116); - -// Draw crosshairs - myGLCD.setColor(0,0,255); - myGLCD.drawLine(63,14,63,115); - myGLCD.drawLine(1,63,126,63); - for (int i=3; i<128; i+=10) - myGLCD.drawLine(i, 61, i, 65); - for (int i=14; i<118; i+=10) - myGLCD.drawLine(61, i, 65, i); - -// Draw sin-, cos- and tan-lines - myGLCD.setColor(0,255,255); - myGLCD.setBackColor(0,0,0); - myGLCD.print("Sin", 2, 14); - for (int i=1; i<126; i++) - { - myGLCD.drawPixel(i,63+(sin(((i*2.85)*3.14)/180)*45)); - } - - myGLCD.setColor(255,0,0); - myGLCD.print("Cos", 2, 26); - for (int i=1; i<126; i++) - { - myGLCD.drawPixel(i,63+(cos(((i*2.85)*3.14)/180)*45)); - } - - myGLCD.setColor(255,255,0); - myGLCD.print("Tan", 2, 38); - for (int i=1; i<126; i++) - { - myGLCD.drawPixel(i,63+(tan(((i*2.85)*3.14)/180))); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,126,115); - myGLCD.setColor(0,0,255); - myGLCD.drawLine(63,14,63,115); - myGLCD.drawLine(1,63,126,63); - -// Draw a moving sinewave - x=1; - for (int i=1; i<3654; i++) - { - x++; - if (x==127) - x=1; - if (i>127) - { - if ((x==63)||(buf[x-1]==63)) - myGLCD.setColor(0,0,255); - else - myGLCD.setColor(0,0,0); - myGLCD.drawPixel(x,buf[x-1]); - } - myGLCD.setColor(0,255,255); - y=63+(sin(((i*1.3)*3.14)/180)*45); - myGLCD.drawPixel(x,y); - buf[x-1]=y; -// delay(3); - } - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,126,115); - -// Draw some filled rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRect(10+(i*10),10+(i*10), 60+(i*10), 60+(i*10)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,126,115); - -// Draw some filled, rounded rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRoundRect(70-(i*10),10+(i*10), 120-(i*10), 60+(i*10)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,126,115); - -// Draw some filled circles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillCircle(30+(i*10),35+(i*10), 25); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,126,115); - - // Draw some lines in a pattern - myGLCD.setColor (255,0,0); - for (int i=11; i<115; i+=3) - { - myGLCD.drawLine(1, i, i-10, 115); - } - myGLCD.setColor (255,0,0); - for (int i=112; i>14; i-=3) - { - myGLCD.drawLine(126, i, i+14, 14); - } - myGLCD.setColor (0,255,255); - for (int i=115; i>14; i-=3) - { - myGLCD.drawLine(1, i, 116-i, 14); - } - myGLCD.setColor (0,255,255); - for (int i=14; i<115; i+=3) - { - myGLCD.drawLine(126, i, 140-i, 115); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,126,115); - -// Draw some random circles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=22+random(85); - y=35+random(59); - r=random(20); - myGLCD.drawCircle(x, y, r); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,126,115); - -// Draw some random rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(124); - y=15+random(101); - x2=2+random(124); - y2=15+random(101); - myGLCD.drawRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,126,115); - -// Draw some random rounded rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(124); - y=15+random(101); - x2=2+random(124); - y2=15+random(101); - myGLCD.drawRoundRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,126,115); - -// Draw some random lines - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(124); - y=15+random(101); - x2=2+random(124); - y2=15+random(101); - myGLCD.drawLine(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,126,115); - -// Draw some random pixels - for (int i=0; i<5000; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - myGLCD.drawPixel(2+random(124), 15+random(101)); - } - - delay (2000); - -// Set up the "Finished"-screen - myGLCD.setContrast(0); - myGLCD.fillScr(0,0,255); - myGLCD.setColor(255,0,0); - myGLCD.fillRoundRect(2, 40, 125, 88); - - myGLCD.setColor(255,255,255); - myGLCD.setBackColor(255,0,0); - myGLCD.print("That's it!", CENTER, 46); - myGLCD.print("Restarting in a", CENTER, 66); - myGLCD.print("few seconds...", CENTER, 76); - - myGLCD.setColor(0,0,0); - myGLCD.setBackColor(0,0,255); - myGLCD.print("Runtime: (msecs)", CENTER, 108); - myGLCD.printNumI(millis(), CENTER, 118); - - myGLCD.setContrast(64); - - delay (10000); - -// Fade screen to black - for (int i=64; i>0; i--) - { - myGLCD.setContrast(i); - delay(100); - } -} - - diff --git a/libraries/UTFT/examples/chipKit/UTFT_Demo_160x128_Serial/UTFT_Demo_160x128_Serial.pde b/libraries/UTFT/examples/chipKit/UTFT_Demo_160x128_Serial/UTFT_Demo_160x128_Serial.pde deleted file mode 100644 index 365b716..0000000 --- a/libraries/UTFT/examples/chipKit/UTFT_Demo_160x128_Serial/UTFT_Demo_160x128_Serial.pde +++ /dev/null @@ -1,328 +0,0 @@ -// UTFT_Demo_160x128_Serial (C)2014 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of how to use most of the functions -// of the library with a supported display modules. -// -// This demo was made for modules with a screen resolution -// of 160x128 pixels. -// -// This program requires the UTFT library. -// - -#include - -// Declare which fonts we will be using -extern uint8_t SmallFont[]; - -// Usage: myGLCD(, SDA, SCL, CS, RST[, RS]); -// -// When using the DM-TFT18-101 and shield from DisplayModule you should use the following: -// UTFT myGLCD(DMTFT18101,2,3,4,6,5); -// -UTFT myGLCD(ITDB18SP,11,10,9,12,8); // Remember to change the model parameter to suit your display module! - -void setup() -{ - randomSeed(analogRead(0)); - -// Setup the LCD - myGLCD.InitLCD(); - myGLCD.setFont(SmallFont); -} - -void loop() -{ - int buf[158]; - int x, x2; - int y, y2; - int r; - -// Clear the screen and draw the frame - myGLCD.clrScr(); - - myGLCD.setColor(255, 0, 0); - myGLCD.fillRect(0, 0, 159, 13); - myGLCD.setColor(64, 64, 64); - myGLCD.fillRect(0, 114, 159, 127); - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("Universal TFT Lib.", CENTER, 1); - myGLCD.setBackColor(64, 64, 64); - myGLCD.setColor(255,255,0); - myGLCD.print("H.Karlsen", LEFT, 114); - myGLCD.print("(C)2014", RIGHT, 114); - - myGLCD.setColor(0, 0, 255); - myGLCD.drawRect(0, 13, 159, 113); - -// Draw crosshairs - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(79, 14, 79, 113); - myGLCD.drawLine(1, 63, 158, 63); - - for (int i=9; i<150; i+=10) - myGLCD.drawLine(i, 61, i, 65); - for (int i=19; i<110; i+=10) - myGLCD.drawLine(77, i, 81, i); - -// Draw sin-, cos- and tan-lines - myGLCD.setColor(0,255,255); - myGLCD.print("Sin", 5, 15); - for (int i=1; i<158; i++) - { - myGLCD.drawPixel(i,63+(sin(((i*2.27)*3.14)/180)*40)); - } - - myGLCD.setColor(255,0,0); - myGLCD.print("Cos", 5, 27); - for (int i=1; i<158; i++) - { - myGLCD.drawPixel(i,63+(cos(((i*2.27)*3.14)/180)*40)); - } - - myGLCD.setColor(255,255,0); - myGLCD.print("Tan", 5, 39); - for (int i=1; i<158; i++) - { - myGLCD.drawPixel(i,63+(tan(((i*2.27)*3.14)/180))); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,158,113); - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(79, 14, 79, 113); - myGLCD.drawLine(1, 63, 158, 63); - -// Draw a moving sinewave - x=1; - for (int i=1; i<(158*20); i++) - { - x++; - if (x==159) - x=1; - if (i>159) - { - if ((x==79)||(buf[x-1]==63)) - myGLCD.setColor(0,0,255); - else - myGLCD.setColor(0,0,0); - myGLCD.drawPixel(x,buf[x-1]); - } - myGLCD.setColor(0,255,255); - y=63+(sin(((i*2.5)*3.14)/180)*(40-(i / 100))); - myGLCD.drawPixel(x,y); - buf[x-1]=y; - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,158,113); - -// Draw some filled rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRect(39+(i*10), 23+(i*10), 59+(i*10), 43+(i*10)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,158,113); - -// Draw some filled, rounded rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRoundRect(99-(i*10), 23+(i*10), 119-(i*10), 43+(i*10)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,158,113); - -// Draw some filled circles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillCircle(49+(i*10),33+(i*10), 15); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,158,113); - -// Draw some lines in a pattern - myGLCD.setColor (255,0,0); - for (int i=14; i<113; i+=5) - { - myGLCD.drawLine(1, i, (i*1.44)-10, 112); - } - myGLCD.setColor (255,0,0); - for (int i=112; i>15; i-=5) - { - myGLCD.drawLine(158, i, (i*1.44)-12, 14); - } - myGLCD.setColor (0,255,255); - for (int i=112; i>15; i-=5) - { - myGLCD.drawLine(1, i, 172-(i*1.44), 14); - } - myGLCD.setColor (0,255,255); - for (int i=15; i<112; i+=5) - { - myGLCD.drawLine(158, i, 171-(i*1.44), 112); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,158,113); - -// Draw some random circles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=22+random(116); - y=35+random(57); - r=random(20); - myGLCD.drawCircle(x, y, r); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,158,113); - -// Draw some random rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(156); - y=16+random(95); - x2=2+random(156); - y2=16+random(95); - myGLCD.drawRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,158,113); - -// Draw some random rounded rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(156); - y=16+random(95); - x2=2+random(156); - y2=16+random(95); - myGLCD.drawRoundRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,158,113); - - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(156); - y=16+random(95); - x2=2+random(156); - y2=16+random(95); - myGLCD.drawLine(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,14,158,113); - - for (int i=0; i<5000; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - myGLCD.drawPixel(2+random(156), 16+random(95)); - } - - delay(2000); - - myGLCD.fillScr(0, 0, 255); - myGLCD.setColor(255, 0, 0); - myGLCD.fillRoundRect(10, 17, 149, 72); - - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("That's it!", CENTER, 20); - myGLCD.print("Restarting in a", CENTER, 45); - myGLCD.print("few seconds...", CENTER, 57); - - myGLCD.setColor(0, 255, 0); - myGLCD.setBackColor(0, 0, 255); - myGLCD.print("Runtime: (msecs)", CENTER, 103); - myGLCD.printNumI(millis(), CENTER, 115); - - delay (10000); -} - diff --git a/libraries/UTFT/examples/chipKit/UTFT_Demo_220x176/UTFT_Demo_220x176.pde b/libraries/UTFT/examples/chipKit/UTFT_Demo_220x176/UTFT_Demo_220x176.pde deleted file mode 100644 index d82506e..0000000 --- a/libraries/UTFT/examples/chipKit/UTFT_Demo_220x176/UTFT_Demo_220x176.pde +++ /dev/null @@ -1,329 +0,0 @@ -// UTFT_Demo_220x176 (C)2014 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of how to use most of the functions -// of the library with a supported display modules. -// -// This demo was made for modules with a screen resolution -// of 220x176 pixels. -// -// This program requires the UTFT library. -// - -#include - -// Declare which fonts we will be using -extern uint8_t SmallFont[]; - -// Set the pins to the correct ones for your development shield -// ------------------------------------------------------------ -// My chipKit Uno32/uC32 shield : ,38,39,40,41 -// My chipKit Max32 shield : ,82,83,84,85 -// AquaLEDSource All in One Super Screw Shield : ,82,83,84,85 -// -// Remember to change the model parameter to suit your display module! -UTFT myGLCD(ITDB22,82,83,84,85); - -void setup() -{ - randomSeed(analogRead(0)); - -// Setup the LCD - myGLCD.InitLCD(); - myGLCD.setFont(SmallFont); -} - -void loop() -{ - int buf[218]; - int x, x2; - int y, y2; - int r; - -// Clear the screen and draw the frame - myGLCD.clrScr(); - - myGLCD.setColor(255, 0, 0); - myGLCD.fillRect(0, 0, 219, 13); - myGLCD.setColor(64, 64, 64); - myGLCD.fillRect(0, 162, 219, 175); - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("** Universal TFT Library **", CENTER, 1); - myGLCD.setBackColor(64, 64, 64); - myGLCD.setColor(255,255,0); - myGLCD.print("> elec.henningkarlsen.com <", CENTER, 163); - - myGLCD.setColor(0, 0, 255); - myGLCD.drawRect(0, 14, 219, 161); - -// Draw crosshairs - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(109, 15, 109, 160); - myGLCD.drawLine(1, 88, 218, 88); - - for (int i=9; i<210; i+=10) - myGLCD.drawLine(i, 86, i, 90); - for (int i=19; i<155; i+=10) - myGLCD.drawLine(107, i, 111, i); - -// Draw sin-, cos- and tan-lines - myGLCD.setColor(0,255,255); - myGLCD.print("Sin", 5, 15); - for (int i=1; i<218; i++) - { - myGLCD.drawPixel(i,88+(sin(((i*1.65)*3.14)/180)*70)); - } - - myGLCD.setColor(255,0,0); - myGLCD.print("Cos", 5, 27); - for (int i=1; i<218; i++) - { - myGLCD.drawPixel(i,88+(cos(((i*1.65)*3.14)/180)*70)); - } - - myGLCD.setColor(255,255,0); - myGLCD.print("Tan", 5, 39); - for (int i=1; i<218; i++) - { - myGLCD.drawPixel(i,88+(tan(((i*1.65)*3.14)/180))); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(109, 15, 109, 160); - myGLCD.drawLine(1, 88, 218, 88); - -// Draw a moving sinewave - x=1; - for (int i=1; i<(218*20); i++) - { - x++; - if (x==219) - x=1; - if (i>219) - { - if ((x==109)||(buf[x-1]==88)) - myGLCD.setColor(0,0,255); - else - myGLCD.setColor(0,0,0); - myGLCD.drawPixel(x,buf[x-1]); - } - myGLCD.setColor(0,255,255); - y=88+(sin(((i*1.6)*3.14)/180)*(65-(i / 100))); - myGLCD.drawPixel(x,y); - buf[x-1]=y; - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - -// Draw some filled rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRect(44+(i*15), 23+(i*15), 88+(i*15), 63+(i*15)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - -// Draw some filled, rounded rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRoundRect(132-(i*15), 23+(i*15), 172-(i*15), 63+(i*15)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - -// Draw some filled circles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillCircle(64+(i*15),43+(i*15), 20); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - -// Draw some lines in a pattern - myGLCD.setColor (255,0,0); - for (int i=15; i<160; i+=5) - { - myGLCD.drawLine(1, i, (i*1.44)-10, 160); - } - myGLCD.setColor (255,0,0); - for (int i=160; i>15; i-=5) - { - myGLCD.drawLine(218, i, (i*1.44)-12, 15); - } - myGLCD.setColor (0,255,255); - for (int i=160; i>15; i-=5) - { - myGLCD.drawLine(1, i, 232-(i*1.44), 15); - } - myGLCD.setColor (0,255,255); - for (int i=15; i<160; i+=5) - { - myGLCD.drawLine(218, i, 231-(i*1.44), 160); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - -// Draw some random circles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=22+random(176); - y=35+random(105); - r=random(20); - myGLCD.drawCircle(x, y, r); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - -// Draw some random rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(216); - y=16+random(143); - x2=2+random(216); - y2=16+random(143); - myGLCD.drawRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - -// Draw some random rounded rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(216); - y=16+random(143); - x2=2+random(216); - y2=16+random(143); - myGLCD.drawRoundRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(216); - y=16+random(143); - x2=2+random(216); - y2=16+random(143); - myGLCD.drawLine(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - - for (int i=0; i<10000; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - myGLCD.drawPixel(2+random(216), 16+random(143)); - } - - delay(2000); - - myGLCD.fillScr(0, 0, 255); - myGLCD.setColor(255, 0, 0); - myGLCD.fillRoundRect(40, 57, 179, 119); - - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("That's it!", CENTER, 62); - myGLCD.print("Restarting in a", CENTER, 88); - myGLCD.print("few seconds...", CENTER, 101); - - myGLCD.setColor(0, 255, 0); - myGLCD.setBackColor(0, 0, 255); - myGLCD.print("Runtime: (msecs)", CENTER, 146); - myGLCD.printNumI(millis(), CENTER, 161); - - delay (10000); -} - diff --git a/libraries/UTFT/examples/chipKit/UTFT_Demo_220x176_Serial/UTFT_Demo_220x176_Serial.pde b/libraries/UTFT/examples/chipKit/UTFT_Demo_220x176_Serial/UTFT_Demo_220x176_Serial.pde deleted file mode 100644 index ec66344..0000000 --- a/libraries/UTFT/examples/chipKit/UTFT_Demo_220x176_Serial/UTFT_Demo_220x176_Serial.pde +++ /dev/null @@ -1,322 +0,0 @@ -// UTFT_Demo_220x176_Serial (C)2012 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of how to use most of the functions -// of the library with a supported display modules. -// -// This demo was made for serial modules with a screen resolution -// of 220x176 pixels. -// -// This program requires the UTFT library. -// - -#include - -// Declare which fonts we will be using -extern uint8_t SmallFont[]; - -UTFT myGLCD(ITDB22SP,11,10,9,12); // Remember to change the model parameter to suit your display module! - -void setup() -{ - randomSeed(analogRead(0)); - -// Setup the LCD - myGLCD.InitLCD(); - myGLCD.setFont(SmallFont); -} - -void loop() -{ - int buf[218]; - int x, x2; - int y, y2; - int r; - -// Clear the screen and draw the frame - myGLCD.clrScr(); - - myGLCD.setColor(255, 0, 0); - myGLCD.fillRect(0, 0, 219, 13); - myGLCD.setColor(64, 64, 64); - myGLCD.fillRect(0, 162, 219, 175); - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("** Universal TFT Library **", CENTER, 1); - myGLCD.setBackColor(64, 64, 64); - myGLCD.setColor(255,255,0); - myGLCD.print("> elec.henningkarlsen.com <", CENTER, 163); - - myGLCD.setColor(0, 0, 255); - myGLCD.drawRect(0, 14, 219, 161); - -// Draw crosshairs - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(109, 15, 109, 160); - myGLCD.drawLine(1, 88, 218, 88); - - for (int i=9; i<210; i+=10) - myGLCD.drawLine(i, 86, i, 90); - for (int i=19; i<155; i+=10) - myGLCD.drawLine(107, i, 111, i); - -// Draw sin-, cos- and tan-lines - myGLCD.setColor(0,255,255); - myGLCD.print("Sin", 5, 15); - for (int i=1; i<218; i++) - { - myGLCD.drawPixel(i,88+(sin(((i*1.65)*3.14)/180)*70)); - } - - myGLCD.setColor(255,0,0); - myGLCD.print("Cos", 5, 27); - for (int i=1; i<218; i++) - { - myGLCD.drawPixel(i,88+(cos(((i*1.65)*3.14)/180)*70)); - } - - myGLCD.setColor(255,255,0); - myGLCD.print("Tan", 5, 39); - for (int i=1; i<218; i++) - { - myGLCD.drawPixel(i,88+(tan(((i*1.65)*3.14)/180))); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(109, 15, 109, 160); - myGLCD.drawLine(1, 88, 218, 88); - -// Draw a moving sinewave - x=1; - for (int i=1; i<(218*20); i++) - { - x++; - if (x==219) - x=1; - if (i>219) - { - if ((x==109)||(buf[x-1]==88)) - myGLCD.setColor(0,0,255); - else - myGLCD.setColor(0,0,0); - myGLCD.drawPixel(x,buf[x-1]); - } - myGLCD.setColor(0,255,255); - y=88+(sin(((i*1.6)*3.14)/180)*(65-(i / 100))); - myGLCD.drawPixel(x,y); - buf[x-1]=y; - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - -// Draw some filled rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRect(44+(i*15), 23+(i*15), 88+(i*15), 63+(i*15)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - -// Draw some filled, rounded rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRoundRect(132-(i*15), 23+(i*15), 172-(i*15), 63+(i*15)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - -// Draw some filled circles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillCircle(64+(i*15),43+(i*15), 20); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - -// Draw some lines in a pattern - myGLCD.setColor (255,0,0); - for (int i=15; i<160; i+=5) - { - myGLCD.drawLine(1, i, (i*1.44)-10, 160); - } - myGLCD.setColor (255,0,0); - for (int i=160; i>15; i-=5) - { - myGLCD.drawLine(218, i, (i*1.44)-12, 15); - } - myGLCD.setColor (0,255,255); - for (int i=160; i>15; i-=5) - { - myGLCD.drawLine(1, i, 232-(i*1.44), 15); - } - myGLCD.setColor (0,255,255); - for (int i=15; i<160; i+=5) - { - myGLCD.drawLine(218, i, 231-(i*1.44), 160); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,161); - -// Draw some random circles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=22+random(176); - y=35+random(105); - r=random(20); - myGLCD.drawCircle(x, y, r); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - -// Draw some random rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(216); - y=16+random(143); - x2=2+random(216); - y2=16+random(143); - myGLCD.drawRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - -// Draw some random rounded rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(216); - y=16+random(143); - x2=2+random(216); - y2=16+random(143); - myGLCD.drawRoundRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(216); - y=16+random(143); - x2=2+random(216); - y2=16+random(143); - myGLCD.drawLine(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,218,160); - - for (int i=0; i<10000; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - myGLCD.drawPixel(2+random(216), 16+random(143)); - } - - delay(2000); - - myGLCD.fillScr(0, 0, 255); - myGLCD.setColor(255, 0, 0); - myGLCD.fillRoundRect(40, 57, 179, 119); - - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("That's it!", CENTER, 62); - myGLCD.print("Restarting in a", CENTER, 88); - myGLCD.print("few seconds...", CENTER, 101); - - myGLCD.setColor(0, 255, 0); - myGLCD.setBackColor(0, 0, 255); - myGLCD.print("Runtime: (msecs)", CENTER, 146); - myGLCD.printNumI(millis(), CENTER, 161); - - delay (10000); -} - diff --git a/libraries/UTFT/examples/chipKit/UTFT_Demo_320x240/UTFT_Demo_320x240.pde b/libraries/UTFT/examples/chipKit/UTFT_Demo_320x240/UTFT_Demo_320x240.pde deleted file mode 100644 index d849855..0000000 --- a/libraries/UTFT/examples/chipKit/UTFT_Demo_320x240/UTFT_Demo_320x240.pde +++ /dev/null @@ -1,328 +0,0 @@ -// UTFT_Demo_320x240 (C)2014 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of how to use most of the functions -// of the library with a supported display modules. -// -// This demo was made for modules with a screen resolution -// of 320x240 pixels. -// -// This program requires the UTFT library. -// - -#include - -// Declare which fonts we will be using -extern uint8_t SmallFont[]; - -// Set the pins to the correct ones for your development shield -// ------------------------------------------------------------ -// My chipKit Uno32/uC32 shield : ,38,39,40,41 -// My chipKit Max32 shield : ,82,83,84,85 -// AquaLEDSource All in One Super Screw Shield : ,82,83,84,85 -// -// Remember to change the model parameter to suit your display module! -UTFT myGLCD(ITDB32S,82,83,84,85); - -void setup() -{ - randomSeed(analogRead(0)); - -// Setup the LCD - myGLCD.InitLCD(); - myGLCD.setFont(SmallFont); -} - -void loop() -{ - int buf[318]; - int x, x2; - int y, y2; - int r; - -// Clear the screen and draw the frame - myGLCD.clrScr(); - - myGLCD.setColor(255, 0, 0); - myGLCD.fillRect(0, 0, 319, 13); - myGLCD.setColor(64, 64, 64); - myGLCD.fillRect(0, 226, 319, 239); - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("* Universal Color TFT Display Library *", CENTER, 1); - myGLCD.setBackColor(64, 64, 64); - myGLCD.setColor(255,255,0); - myGLCD.print("", CENTER, 227); - - myGLCD.setColor(0, 0, 255); - myGLCD.drawRect(0, 14, 319, 225); - -// Draw crosshairs - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(159, 15, 159, 224); - myGLCD.drawLine(1, 119, 318, 119); - for (int i=9; i<310; i+=10) - myGLCD.drawLine(i, 117, i, 121); - for (int i=19; i<220; i+=10) - myGLCD.drawLine(157, i, 161, i); - -// Draw sin-, cos- and tan-lines - myGLCD.setColor(0,255,255); - myGLCD.print("Sin", 5, 15); - for (int i=1; i<318; i++) - { - myGLCD.drawPixel(i,119+(sin(((i*1.13)*3.14)/180)*95)); - } - - myGLCD.setColor(255,0,0); - myGLCD.print("Cos", 5, 27); - for (int i=1; i<318; i++) - { - myGLCD.drawPixel(i,119+(cos(((i*1.13)*3.14)/180)*95)); - } - - myGLCD.setColor(255,255,0); - myGLCD.print("Tan", 5, 39); - for (int i=1; i<318; i++) - { - myGLCD.drawPixel(i,119+(tan(((i*1.13)*3.14)/180))); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(159, 15, 159, 224); - myGLCD.drawLine(1, 119, 318, 119); - -// Draw a moving sinewave - x=1; - for (int i=1; i<(318*20); i++) - { - x++; - if (x==319) - x=1; - if (i>319) - { - if ((x==159)||(buf[x-1]==119)) - myGLCD.setColor(0,0,255); - else - myGLCD.setColor(0,0,0); - myGLCD.drawPixel(x,buf[x-1]); - } - myGLCD.setColor(0,255,255); - y=119+(sin(((i*1.1)*3.14)/180)*(90-(i / 100))); - myGLCD.drawPixel(x,y); - buf[x-1]=y; - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - -// Draw some filled rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRect(70+(i*20), 30+(i*20), 130+(i*20), 90+(i*20)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - -// Draw some filled, rounded rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRoundRect(190-(i*20), 30+(i*20), 250-(i*20), 90+(i*20)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - -// Draw some filled circles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillCircle(100+(i*20),60+(i*20), 30); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - -// Draw some lines in a pattern - myGLCD.setColor (255,0,0); - for (int i=15; i<224; i+=5) - { - myGLCD.drawLine(1, i, (i*1.44)-10, 224); - } - myGLCD.setColor (255,0,0); - for (int i=224; i>15; i-=5) - { - myGLCD.drawLine(318, i, (i*1.44)-11, 15); - } - myGLCD.setColor (0,255,255); - for (int i=224; i>15; i-=5) - { - myGLCD.drawLine(1, i, 331-(i*1.44), 15); - } - myGLCD.setColor (0,255,255); - for (int i=15; i<224; i+=5) - { - myGLCD.drawLine(318, i, 330-(i*1.44), 224); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - -// Draw some random circles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=32+random(256); - y=45+random(146); - r=random(30); - myGLCD.drawCircle(x, y, r); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - -// Draw some random rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(316); - y=16+random(207); - x2=2+random(316); - y2=16+random(207); - myGLCD.drawRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - -// Draw some random rounded rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(316); - y=16+random(207); - x2=2+random(316); - y2=16+random(207); - myGLCD.drawRoundRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(316); - y=16+random(209); - x2=2+random(316); - y2=16+random(209); - myGLCD.drawLine(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - - for (int i=0; i<10000; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - myGLCD.drawPixel(2+random(316), 16+random(209)); - } - - delay(2000); - - myGLCD.fillScr(0, 0, 255); - myGLCD.setColor(255, 0, 0); - myGLCD.fillRoundRect(80, 70, 239, 169); - - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("That's it!", CENTER, 93); - myGLCD.print("Restarting in a", CENTER, 119); - myGLCD.print("few seconds...", CENTER, 132); - - myGLCD.setColor(0, 255, 0); - myGLCD.setBackColor(0, 0, 255); - myGLCD.print("Runtime: (msecs)", CENTER, 210); - myGLCD.printNumI(millis(), CENTER, 225); - - delay (10000); -} - diff --git a/libraries/UTFT/examples/chipKit/UTFT_Demo_320x240_Serial/UTFT_Demo_320x240_Serial.pde b/libraries/UTFT/examples/chipKit/UTFT_Demo_320x240_Serial/UTFT_Demo_320x240_Serial.pde deleted file mode 100644 index 8342994..0000000 --- a/libraries/UTFT/examples/chipKit/UTFT_Demo_320x240_Serial/UTFT_Demo_320x240_Serial.pde +++ /dev/null @@ -1,323 +0,0 @@ -// UTFT_Demo_320x240_Serial (C)2014 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of how to use most of the functions -// of the library with a supported display modules. -// -// This demo was made for modules with a screen resolution -// of 320x240 pixels. -// -// This program requires the UTFT library. -// - -#include - -// Declare which fonts we will be using -extern uint8_t SmallFont[]; - -// Usage: myGLCD(, SDA, SCL, CS, RST[, RS]); -UTFT myGLCD(TFT01_22SP,9,8,12,11,10); // Remember to change the model parameter to suit your display module! - -void setup() -{ -// Just get some random numbers - randomSeed(analogRead(0)); - -// Setup the LCD - myGLCD.InitLCD(); - myGLCD.setFont(SmallFont); -} - -void loop() -{ - int buf[318]; - int x, x2; - int y, y2; - int r; - -// Clear the screen and draw the frame - myGLCD.clrScr(); - - myGLCD.setColor(255, 0, 0); - myGLCD.fillRect(0, 0, 319, 13); - myGLCD.setColor(64, 64, 64); - myGLCD.fillRect(0, 226, 319, 239); - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("* Universal Color TFT Display Library *", CENTER, 1); - myGLCD.setBackColor(64, 64, 64); - myGLCD.setColor(255,255,0); - myGLCD.print("", CENTER, 227); - - myGLCD.setColor(0, 0, 255); - myGLCD.drawRect(0, 14, 319, 225); - -// Draw crosshairs - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(159, 15, 159, 224); - myGLCD.drawLine(1, 119, 318, 119); - for (int i=9; i<310; i+=10) - myGLCD.drawLine(i, 117, i, 121); - for (int i=19; i<220; i+=10) - myGLCD.drawLine(157, i, 161, i); - -// Draw sin-, cos- and tan-lines - myGLCD.setColor(0,255,255); - myGLCD.print("Sin", 5, 15); - for (int i=1; i<318; i++) - { - myGLCD.drawPixel(i,119+(sin(((i*1.13)*3.14)/180)*95)); - } - - myGLCD.setColor(255,0,0); - myGLCD.print("Cos", 5, 27); - for (int i=1; i<318; i++) - { - myGLCD.drawPixel(i,119+(cos(((i*1.13)*3.14)/180)*95)); - } - - myGLCD.setColor(255,255,0); - myGLCD.print("Tan", 5, 39); - for (int i=1; i<318; i++) - { - myGLCD.drawPixel(i,119+(tan(((i*1.13)*3.14)/180))); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(159, 15, 159, 224); - myGLCD.drawLine(1, 119, 318, 119); - -// Draw a moving sinewave - x=1; - for (int i=1; i<(318*20); i++) - { - x++; - if (x==319) - x=1; - if (i>319) - { - if ((x==159)||(buf[x-1]==119)) - myGLCD.setColor(0,0,255); - else - myGLCD.setColor(0,0,0); - myGLCD.drawPixel(x,buf[x-1]); - } - myGLCD.setColor(0,255,255); - y=119+(sin(((i*1.1)*3.14)/180)*(90-(i / 100))); - myGLCD.drawPixel(x,y); - buf[x-1]=y; - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - -// Draw some filled rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRect(70+(i*20), 30+(i*20), 130+(i*20), 90+(i*20)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - -// Draw some filled, rounded rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRoundRect(190-(i*20), 30+(i*20), 250-(i*20), 90+(i*20)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - -// Draw some filled circles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillCircle(100+(i*20),60+(i*20), 30); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - -// Draw some lines in a pattern - myGLCD.setColor (255,0,0); - for (int i=15; i<224; i+=5) - { - myGLCD.drawLine(1, i, (i*1.44)-10, 224); - } - myGLCD.setColor (255,0,0); - for (int i=224; i>15; i-=5) - { - myGLCD.drawLine(318, i, (i*1.44)-11, 15); - } - myGLCD.setColor (0,255,255); - for (int i=224; i>15; i-=5) - { - myGLCD.drawLine(1, i, 331-(i*1.44), 15); - } - myGLCD.setColor (0,255,255); - for (int i=15; i<224; i+=5) - { - myGLCD.drawLine(318, i, 330-(i*1.44), 224); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - -// Draw some random circles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=32+random(256); - y=45+random(146); - r=random(30); - myGLCD.drawCircle(x, y, r); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - -// Draw some random rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(316); - y=16+random(207); - x2=2+random(316); - y2=16+random(207); - myGLCD.drawRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - -// Draw some random rounded rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(316); - y=16+random(207); - x2=2+random(316); - y2=16+random(207); - myGLCD.drawRoundRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(316); - y=16+random(209); - x2=2+random(316); - y2=16+random(209); - myGLCD.drawLine(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,318,224); - - for (int i=0; i<10000; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - myGLCD.drawPixel(2+random(316), 16+random(209)); - } - - delay(2000); - - myGLCD.fillScr(0, 0, 255); - myGLCD.setColor(255, 0, 0); - myGLCD.fillRoundRect(80, 70, 239, 169); - - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("That's it!", CENTER, 93); - myGLCD.print("Restarting in a", CENTER, 119); - myGLCD.print("few seconds...", CENTER, 132); - - myGLCD.setColor(0, 255, 0); - myGLCD.setBackColor(0, 0, 255); - myGLCD.print("Runtime: (msecs)", CENTER, 210); - myGLCD.printNumI(millis(), CENTER, 225); - - delay (10000); -} - diff --git a/libraries/UTFT/examples/chipKit/UTFT_Demo_400x240/UTFT_Demo_400x240.pde b/libraries/UTFT/examples/chipKit/UTFT_Demo_400x240/UTFT_Demo_400x240.pde deleted file mode 100644 index 0745538..0000000 --- a/libraries/UTFT/examples/chipKit/UTFT_Demo_400x240/UTFT_Demo_400x240.pde +++ /dev/null @@ -1,330 +0,0 @@ -// UTFT_Demo_400x240 (C)2014 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of how to use most of the functions -// of the library with a supported display modules. -// -// This demo was made for modules with a screen resolution -// of 400x240 pixels. -// -// This program requires the UTFT library. -// - -#include - -// Declare which fonts we will be using -extern uint8_t SmallFont[]; - -// Set the pins to the correct ones for your development shield -// ------------------------------------------------------------ -// My chipKit Uno32/uC32 shield : ,38,39,40,41 -// My chipKit Max32 shield : ,82,83,84,85 -// AquaLEDSource All in One Super Screw Shield : ,82,83,84,85 -// -// Remember to change the model parameter to suit your display module! -UTFT myGLCD(ITDB32WD,82,83,84,85); - -void setup() -{ - randomSeed(analogRead(0)); - -// Setup the LCD - myGLCD.InitLCD(); - myGLCD.setFont(SmallFont); -} - -void loop() -{ - int buf[398]; - int x, x2; - int y, y2; - int r; - -// Clear the screen and draw the frame - myGLCD.clrScr(); - - myGLCD.setColor(255, 0, 0); - myGLCD.fillRect(0, 0, 399, 13); - myGLCD.setColor(64, 64, 64); - myGLCD.fillRect(0, 226, 399, 239); - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("*** Universal Color TFT Display Library ***", CENTER, 1); - myGLCD.setBackColor(64, 64, 64); - myGLCD.setColor(255,255,0); - myGLCD.print("< http://electronics.henningkarlsen.com >", CENTER, 227); - - myGLCD.setColor(0, 0, 255); - myGLCD.drawRect(0, 14, 399, 225); - -// Draw crosshairs - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(199, 15, 199, 224); - myGLCD.drawLine(1, 119, 398, 119); - for (int i=9; i<390; i+=10) - myGLCD.drawLine(i, 117, i, 121); - for (int i=19; i<220; i+=10) - myGLCD.drawLine(197, i, 201, i); - -// Draw sin-, cos- and tan-lines - myGLCD.setColor(0,255,255); - myGLCD.print("Sin", 5, 15); - for (int i=1; i<398; i++) - { - myGLCD.drawPixel(i,119+(sin(((i*0.9)*3.14)/180)*95)); - } - - myGLCD.setColor(255,0,0); - myGLCD.print("Cos", 5, 27); - for (int i=1; i<398; i++) - { - myGLCD.drawPixel(i,119+(cos(((i*0.9)*3.14)/180)*95)); - } - - myGLCD.setColor(255,255,0); - myGLCD.print("Tan", 5, 39); - for (int i=1; i<398; i++) - { - y=119+(tan(((i*0.9)*3.14)/180)); - if ((y>15) && (y<224)) - myGLCD.drawPixel(i,y); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,398,224); - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(199, 15, 199, 224); - myGLCD.drawLine(1, 119, 398, 119); - -// Draw a moving sinewave - x=1; - for (int i=1; i<(398*20); i++) - { - x++; - if (x==399) - x=1; - if (i>399) - { - if ((x==199)||(buf[x-1]==119)) - myGLCD.setColor(0,0,255); - else - myGLCD.setColor(0,0,0); - myGLCD.drawPixel(x,buf[x-1]); - } - myGLCD.setColor(0,255,255); - y=119+(sin(((i)*3.14)/180)*(90-(i / 100))); - myGLCD.drawPixel(x,y); - buf[x-1]=y; - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,398,224); - -// Draw some filled rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRect(110+(i*20), 30+(i*20), 170+(i*20), 90+(i*20)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,398,224); - -// Draw some filled, rounded rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRoundRect(230-(i*20), 30+(i*20), 290-(i*20), 90+(i*20)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,398,224); - -// Draw some filled circles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillCircle(110+(i*30),60+(i*20), 30); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,398,224); - -// Draw some lines in a pattern - myGLCD.setColor (255,0,0); - for (int i=15; i<224; i+=5) - { - myGLCD.drawLine(1, i, (i*1.77)-10, 224); - } - myGLCD.setColor (255,0,0); - for (int i=224; i>15; i-=5) - { - myGLCD.drawLine(398, i, (i*1.77)-11, 15); - } - myGLCD.setColor (0,255,255); - for (int i=224; i>15; i-=5) - { - myGLCD.drawLine(1, i, 411-(i*1.77), 15); - } - myGLCD.setColor (0,255,255); - for (int i=15; i<224; i+=5) - { - myGLCD.drawLine(398, i, 410-(i*1.77), 224); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,398,224); - -// Draw some random circles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=32+random(336); - y=45+random(146); - r=random(30); - myGLCD.drawCircle(x, y, r); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,398,224); - -// Draw some random rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(396); - y=16+random(207); - x2=2+random(396); - y2=16+random(207); - myGLCD.drawRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,398,224); - -// Draw some random rounded rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(396); - y=16+random(207); - x2=2+random(396); - y2=16+random(207); - myGLCD.drawRoundRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,398,224); - - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(396); - y=16+random(209); - x2=2+random(396); - y2=16+random(209); - myGLCD.drawLine(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,398,224); - - for (int i=0; i<10000; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - myGLCD.drawPixel(2+random(396), 16+random(209)); - } - - delay(2000); - - myGLCD.fillScr(0, 0, 255); - myGLCD.setColor(255, 0, 0); - myGLCD.fillRoundRect(120, 70, 279, 169); - - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("That's it!", CENTER, 93); - myGLCD.print("Restarting in a", CENTER, 119); - myGLCD.print("few seconds...", CENTER, 132); - - myGLCD.setColor(0, 255, 0); - myGLCD.setBackColor(0, 0, 255); - myGLCD.print("Runtime: (msecs)", CENTER, 210); - myGLCD.printNumI(millis(), CENTER, 225); - - delay (10000); -} - diff --git a/libraries/UTFT/examples/chipKit/UTFT_Demo_480x272/UTFT_Demo_480x272.pde b/libraries/UTFT/examples/chipKit/UTFT_Demo_480x272/UTFT_Demo_480x272.pde deleted file mode 100644 index ae2b2f6..0000000 --- a/libraries/UTFT/examples/chipKit/UTFT_Demo_480x272/UTFT_Demo_480x272.pde +++ /dev/null @@ -1,327 +0,0 @@ -// UTFT_Demo_480x272 (C)2014 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of how to use most of the functions -// of the library with a supported display modules. -// -// This demo was made for modules with a screen resolution -// of 480x272 pixels. -// -// This program requires the UTFT library. -// - -#include - -// Declare which fonts we will be using -extern uint8_t SmallFont[]; - -// Set the pins to the correct ones for your development shield -// ------------------------------------------------------------ -// My chipKit Uno32/uC32 shield : ,38,39,40,41 -// My chipKit Max32 shield : ,82,83,84,85 -// AquaLEDSource All in One Super Screw Shield : ,82,83,84,85 -// -// Remember to change the model parameter to suit your display module! -UTFT myGLCD(ITDB43,82,83,84,85); - -void setup() -{ - randomSeed(analogRead(0)); - -// Setup the LCD - myGLCD.InitLCD(); - myGLCD.setFont(SmallFont); -} - -void loop() -{ - int buf[478]; - int x, x2; - int y, y2; - int r; - -// Clear the screen and draw the frame - myGLCD.clrScr(); - - myGLCD.setColor(255, 0, 0); - myGLCD.fillRect(0, 0, 479, 13); - myGLCD.setColor(64, 64, 64); - myGLCD.fillRect(0, 258, 479, 271); - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("* Universal Color TFT Display Library *", CENTER, 1); - myGLCD.setBackColor(64, 64, 64); - myGLCD.setColor(255,255,0); - myGLCD.print("", CENTER, 259); - - myGLCD.setColor(0, 0, 255); - myGLCD.drawRect(0, 14, 479, 257); - -// Draw crosshairs - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(239, 15, 239, 256); - myGLCD.drawLine(1, 135, 478, 135); - for (int i=9; i<470; i+=10) - myGLCD.drawLine(i, 133, i, 138); - for (int i=15; i<256; i+=10) - myGLCD.drawLine(237, i, 241, i); - -// Draw sin-, cos- and tan-lines - myGLCD.setColor(0,255,255); - myGLCD.print("Sin", 5, 15); - for (int i=1; i<478; i++) - { - myGLCD.drawPixel(i,135+(sin(((i*1.13)*3.14)/180)*95)); - } - - myGLCD.setColor(255,0,0); - myGLCD.print("Cos", 5, 27); - for (int i=1; i<478; i++) - { - myGLCD.drawPixel(i,135+(cos(((i*1.13)*3.14)/180)*95)); - } - - myGLCD.setColor(255,255,0); - myGLCD.print("Tan", 5, 39); - for (int i=1; i<478; i++) - { - myGLCD.drawPixel(i,135+(tan(((i*1.13)*3.14)/180))); - } - - delay(2000); - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,257); - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(239, 15, 239, 256); - myGLCD.drawLine(1, 135, 478, 135); - -// Draw a moving sinewave - x=1; - for (int i=1; i<(478*20); i++) - { - x++; - if (x==479) - x=1; - if (i>479) - { - if ((x==239)||(buf[x-1]==135)) - myGLCD.setColor(0,0,255); - else - myGLCD.setColor(0,0,0); - myGLCD.drawPixel(x,buf[x-1]); - } - myGLCD.setColor(0,255,255); - y=135+(sin(((i*1.65)*3.14)/180)*(90-(i / 100))); - myGLCD.drawPixel(x,y); - buf[x-1]=y; - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,257); - -// Draw some filled rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRect(150+(i*20), 46+(i*20), 210+(i*20), 106+(i*20)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,257); - -// Draw some filled, rounded rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRoundRect(330-(i*20), 46+(i*20), 270-(i*20), 106+(i*20)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,257); - -// Draw some filled circles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillCircle(180+(i*20),75+(i*20), 30); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,257); - -// Draw some lines in a pattern - myGLCD.setColor (255,0,0); - for (int i=15; i<256; i+=5) - { - myGLCD.drawLine(1, i, (i*1.88)-10, 256); - } - myGLCD.setColor (255,0,0); - for (int i=256; i>15; i-=5) - { - myGLCD.drawLine(478, i, (i*1.88)-11, 15); - } - myGLCD.setColor (0,255,255); - for (int i=256; i>15; i-=5) - { - myGLCD.drawLine(1, i, 491-(i*1.88), 15); - } - myGLCD.setColor (0,255,255); - for (int i=15; i<256; i+=5) - { - myGLCD.drawLine(478, i, 490-(i*1.88), 256); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,257); - -// Draw some random circles - for (int i=0; i<150; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=32+random(416); - y=45+random(178); - r=random(30); - myGLCD.drawCircle(x, y, r); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,257); - -// Draw some random rectangles - for (int i=0; i<150; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(476); - y=16+random(239); - x2=2+random(476); - y2=16+random(239); - myGLCD.drawRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,257); - -// Draw some random rounded rectangles - for (int i=0; i<150; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(476); - y=16+random(239); - x2=2+random(476); - y2=16+random(239); - myGLCD.drawRoundRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,257); - - for (int i=0; i<150; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(476); - y=16+random(239); - x2=2+random(476); - y2=16+random(239); - myGLCD.drawLine(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,257); - - for (int i=0; i<10000; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - myGLCD.drawPixel(2+random(476), 16+random(239)); - } - - delay(2000); - - myGLCD.fillScr(0, 0, 255); - myGLCD.setColor(255, 0, 0); - myGLCD.fillRoundRect(160, 70, 319, 169); - - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("That's it!", CENTER, 93); - myGLCD.print("Restarting in a", CENTER, 119); - myGLCD.print("few seconds...", CENTER, 132); - - myGLCD.setColor(0, 255, 0); - myGLCD.setBackColor(0, 0, 255); - myGLCD.print("Runtime: (msecs)", CENTER, 243); - myGLCD.printNumI(millis(), CENTER, 258); - - delay (10000); -} - diff --git a/libraries/UTFT/examples/chipKit/UTFT_Demo_480x320/UTFT_Demo_480x320.pde b/libraries/UTFT/examples/chipKit/UTFT_Demo_480x320/UTFT_Demo_480x320.pde deleted file mode 100644 index 8d3401c..0000000 --- a/libraries/UTFT/examples/chipKit/UTFT_Demo_480x320/UTFT_Demo_480x320.pde +++ /dev/null @@ -1,328 +0,0 @@ -// UTFT_Demo_480x320 (C)2014 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of how to use most of the functions -// of the library with a supported display modules. -// -// This demo was made for modules with a screen resolution -// of 480x320 pixels. -// -// This program requires the UTFT library. -// - -#include - -// Declare which fonts we will be using -extern uint8_t SmallFont[]; - -// Set the pins to the correct ones for your development shield -// ------------------------------------------------------------ -// My chipKit Uno32/uC32 shield : ,38,39,40,41 -// My chipKit Max32 shield : ,82,83,84,85 -// AquaLEDSource All in One Super Screw Shield : ,82,83,84,85 -// -// Remember to change the model parameter to suit your display module! -UTFT myGLCD(CTE32HR,82,83,84,85); - -void setup() -{ - randomSeed(analogRead(0)); - -// Setup the LCD - myGLCD.InitLCD(); - myGLCD.setFont(SmallFont); -} - -void loop() -{ - int buf[478]; - int x, x2; - int y, y2; - int r; - -// Clear the screen and draw the frame - myGLCD.clrScr(); - - myGLCD.setColor(255, 0, 0); - myGLCD.fillRect(0, 0, 479, 13); - myGLCD.setColor(64, 64, 64); - myGLCD.fillRect(0, 306, 479, 319); - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("* Universal Color TFT Display Library *", CENTER, 1); - myGLCD.setBackColor(64, 64, 64); - myGLCD.setColor(255,255,0); - myGLCD.print("", CENTER, 307); - - myGLCD.setColor(0, 0, 255); - myGLCD.drawRect(0, 14, 479, 305); - -// Draw crosshairs - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(239, 15, 239, 304); - myGLCD.drawLine(1, 159, 478, 159); - for (int i=9; i<470; i+=10) - myGLCD.drawLine(i, 157, i, 161); - for (int i=19; i<220; i+=10) - myGLCD.drawLine(237, i, 241, i); - -// Draw sin-, cos- and tan-lines - myGLCD.setColor(0,255,255); - myGLCD.print("Sin", 5, 15); - for (int i=1; i<478; i++) - { - myGLCD.drawPixel(i,159+(sin(((i*1.13)*3.14)/180)*95)); - } - - myGLCD.setColor(255,0,0); - myGLCD.print("Cos", 5, 27); - for (int i=1; i<478; i++) - { - myGLCD.drawPixel(i,159+(cos(((i*1.13)*3.14)/180)*95)); - } - - myGLCD.setColor(255,255,0); - myGLCD.print("Tan", 5, 39); - for (int i=1; i<478; i++) - { - myGLCD.drawPixel(i,159+(tan(((i*1.13)*3.14)/180))); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,304); - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(239, 15, 239, 304); - myGLCD.drawLine(1, 159, 478, 159); - -// Draw a moving sinewave - x=1; - for (int i=1; i<(478*15); i++) - { - x++; - if (x==479) - x=1; - if (i>479) - { - if ((x==239)||(buf[x-1]==159)) - myGLCD.setColor(0,0,255); - else - myGLCD.setColor(0,0,0); - myGLCD.drawPixel(x,buf[x-1]); - } - myGLCD.setColor(0,255,255); - y=159+(sin(((i*0.7)*3.14)/180)*(90-(i / 100))); - myGLCD.drawPixel(x,y); - buf[x-1]=y; - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,304); - -// Draw some filled rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRect(150+(i*20), 70+(i*20), 210+(i*20), 130+(i*20)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,304); - -// Draw some filled, rounded rectangles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillRoundRect(270-(i*20), 70+(i*20), 330-(i*20), 130+(i*20)); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,304); - -// Draw some filled circles - for (int i=1; i<6; i++) - { - switch (i) - { - case 1: - myGLCD.setColor(255,0,255); - break; - case 2: - myGLCD.setColor(255,0,0); - break; - case 3: - myGLCD.setColor(0,255,0); - break; - case 4: - myGLCD.setColor(0,0,255); - break; - case 5: - myGLCD.setColor(255,255,0); - break; - } - myGLCD.fillCircle(180+(i*20),100+(i*20), 30); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,304); - -// Draw some lines in a pattern - myGLCD.setColor (255,0,0); - for (int i=15; i<304; i+=5) - { - myGLCD.drawLine(1, i, (i*1.6)-10, 304); - } - myGLCD.setColor (255,0,0); - for (int i=304; i>15; i-=5) - { - myGLCD.drawLine(478, i, (i*1.6)-11, 15); - } - myGLCD.setColor (0,255,255); - for (int i=304; i>15; i-=5) - { - myGLCD.drawLine(1, i, 491-(i*1.6), 15); - } - myGLCD.setColor (0,255,255); - for (int i=15; i<304; i+=5) - { - myGLCD.drawLine(478, i, 490-(i*1.6), 304); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,304); - -// Draw some random circles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=32+random(416); - y=45+random(226); - r=random(30); - myGLCD.drawCircle(x, y, r); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,304); - -// Draw some random rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(476); - y=16+random(289); - x2=2+random(476); - y2=16+random(289); - myGLCD.drawRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,304); - -// Draw some random rounded rectangles - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(476); - y=16+random(289); - x2=2+random(476); - y2=16+random(289); - myGLCD.drawRoundRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,304); - - for (int i=0; i<100; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(476); - y=16+random(289); - x2=2+random(476); - y2=16+random(289); - myGLCD.drawLine(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,478,304); - - for (int i=0; i<10000; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - myGLCD.drawPixel(2+random(476), 16+random(289)); - } - - delay(2000); - - myGLCD.fillScr(0, 0, 255); - myGLCD.setColor(255, 0, 0); - myGLCD.fillRoundRect(160, 70, 319, 169); - - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("That's it!", CENTER, 93); - myGLCD.print("Restarting in a", CENTER, 119); - myGLCD.print("few seconds...", CENTER, 132); - - myGLCD.setColor(0, 255, 0); - myGLCD.setBackColor(0, 0, 255); - myGLCD.print("Runtime: (msecs)", CENTER, 290); - myGLCD.printNumI(millis(), CENTER, 305); - - delay (10000); -} - diff --git a/libraries/UTFT/examples/chipKit/UTFT_Demo_800x480/UTFT_Demo_800x480.pde b/libraries/UTFT/examples/chipKit/UTFT_Demo_800x480/UTFT_Demo_800x480.pde deleted file mode 100644 index e12bf71..0000000 --- a/libraries/UTFT/examples/chipKit/UTFT_Demo_800x480/UTFT_Demo_800x480.pde +++ /dev/null @@ -1,287 +0,0 @@ -// UTFT_Demo_800x480 (C)2014 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of how to use most of the functions -// of the library with a supported display modules. -// -// This demo was made for modules with a screen resolution -// of 800x480 pixels. -// -// This program requires the UTFT library. -// - -#include - -// Declare which fonts we will be using -extern uint8_t SmallFont[]; - -// Set the pins to the correct ones for your development shield -// ------------------------------------------------------------ -// My chipKit Uno32/uC32 shield : ,38,39,40,41 -// My chipKit Max32 shield : ,82,83,84,85 -// AquaLEDSource All in One Super Screw Shield : ,82,83,84,85 -// -// Remember to change the model parameter to suit your display module! -UTFT myGLCD(ITDB50,82,83,84,85); - -void setup() -{ - randomSeed(analogRead(0)); - -// Setup the LCD - myGLCD.InitLCD(); - myGLCD.setFont(SmallFont); -} - -void loop() -{ - int buf[798]; - int x, x2; - int y, y2; - int r; - -// Clear the screen and draw the frame - myGLCD.clrScr(); - - myGLCD.setColor(255, 0, 0); - myGLCD.fillRect(0, 0, 799, 13); - myGLCD.setColor(64, 64, 64); - myGLCD.fillRect(0, 466, 799, 479); - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("* Universal Color TFT Display Library *", CENTER, 1); - myGLCD.setBackColor(64, 64, 64); - myGLCD.setColor(255,255,0); - myGLCD.print("", CENTER, 467); - - myGLCD.setColor(0, 0, 255); - myGLCD.drawRect(0, 14, 799, 465); - -// Draw crosshairs - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(399, 15, 399, 464); - myGLCD.drawLine(1, 239, 798, 239); - for (int i=9; i<790; i+=10) - myGLCD.drawLine(i, 237, i, 242); - for (int i=19; i<470; i+=10) - myGLCD.drawLine(397, i, 402, i); - -// Draw sin-, cos- and tan-lines - myGLCD.setColor(0,255,255); - myGLCD.print("Sin", 5, 15); - for (int i=1; i<798; i++) - { - myGLCD.drawPixel(i,239+(sin(((i*1.13)*3.14)/180)*200)); - } - - myGLCD.setColor(255,0,0); - myGLCD.print("Cos", 5, 27); - for (int i=1; i<798; i++) - { - myGLCD.drawPixel(i,239+(cos(((i*1.13)*3.14)/180)*200)); - } - - myGLCD.setColor(255,255,0); - myGLCD.print("Tan", 5, 39); - for (int i=1; i<798; i++) - { - myGLCD.drawPixel(i,239+(tan(((i*0.9)*3.14)/180))); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,798,464); - myGLCD.setColor(0, 0, 255); - myGLCD.setBackColor(0, 0, 0); - myGLCD.drawLine(399, 15, 399, 464); - myGLCD.drawLine(1, 239, 798, 239); - -// Draw a moving sinewave - x=1; - for (int i=1; i<(798*20); i++) - { - x++; - if (x==799) - x=1; - if (i>799) - { - if ((x==399)||(buf[x-1]==239)) - myGLCD.setColor(0,0,255); - else - myGLCD.setColor(0,0,0); - myGLCD.drawPixel(x,buf[x-1]); - } - myGLCD.setColor(0,255,255); - y=239+(sin(((i*1.65)*3.14)/180)*(200-(i / 100))); - myGLCD.drawPixel(x,y); - buf[x-1]=y; - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,798,464); - -// Draw some random filled rectangles - for (int i=0; i<50; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(746); - y=16+random(397); - x2=x+50; - y2=y+50; - myGLCD.fillRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,798,464); - -// Draw some random filled, rounded rectangles - for (int i=0; i<50; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(746); - y=16+random(397); - x2=x+50; - y2=y+50; - myGLCD.fillRoundRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,798,464); - -// Draw some random filled circles - for (int i=0; i<50; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=27+random(746); - y=41+random(397); - myGLCD.fillCircle(x, y, 25); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,798,464); - -// Draw some lines in a pattern - myGLCD.setColor (255,0,0); - for (int i=15; i<463; i+=5) - { - myGLCD.drawLine(1, i, (i*1.66)-10, 463); - } - myGLCD.setColor (255,0,0); - for (int i=463; i>15; i-=5) - { - myGLCD.drawLine(798, i, (i*1.66)+30, 15); - } - myGLCD.setColor (0,255,255); - for (int i=463; i>15; i-=5) - { - myGLCD.drawLine(1, i, 770-(i*1.66), 15); - } - myGLCD.setColor (0,255,255); - for (int i=15; i<463; i+=5) - { - myGLCD.drawLine(798, i, 810-(i*1.66), 463); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,798,464); - -// Draw some random circles - for (int i=0; i<250; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=32+random(736); - y=45+random(386); - r=random(30); - myGLCD.drawCircle(x, y, r); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,798,464); - -// Draw some random rectangles - for (int i=0; i<250; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(796); - y=16+random(447); - x2=2+random(796); - y2=16+random(447); - myGLCD.drawRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,798,464); - -// Draw some random rounded rectangles - for (int i=0; i<250; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(796); - y=16+random(447); - x2=2+random(796); - y2=16+random(447); - myGLCD.drawRoundRect(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,798,464); - - for (int i=0; i<250; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - x=2+random(796); - y=16+random(447); - x2=2+random(796); - y2=16+random(447); - myGLCD.drawLine(x, y, x2, y2); - } - - delay(2000); - - myGLCD.setColor(0,0,0); - myGLCD.fillRect(1,15,798,464); - - for (int i=0; i<10000; i++) - { - myGLCD.setColor(random(255), random(255), random(255)); - myGLCD.drawPixel(2+random(796), 16+random(447)); - } - - delay(2000); - - myGLCD.fillScr(0, 0, 255); - myGLCD.setColor(255, 0, 0); - myGLCD.fillRoundRect(320, 190, 479, 289); - - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("That's it!", CENTER, 213); - myGLCD.print("Restarting in a", CENTER, 239); - myGLCD.print("few seconds...", CENTER, 252); - - myGLCD.setColor(0, 255, 0); - myGLCD.setBackColor(0, 0, 255); - myGLCD.print("Runtime: (msecs)", CENTER, 450); - myGLCD.printNumI(millis(), CENTER, 465); - - delay (10000); -} - diff --git a/libraries/UTFT/examples/chipKit/UTFT_Rotate_Bitmap/UTFT_Rotate_Bitmap.pde b/libraries/UTFT/examples/chipKit/UTFT_Rotate_Bitmap/UTFT_Rotate_Bitmap.pde deleted file mode 100644 index 0d3453a..0000000 --- a/libraries/UTFT/examples/chipKit/UTFT_Rotate_Bitmap/UTFT_Rotate_Bitmap.pde +++ /dev/null @@ -1,36 +0,0 @@ -// UTFT_Rotate_Bitmap (C)2014 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of the drawBitmap()-function. -// -// This program requires the UTFT library. -// - -#include - -// Set the pins to the correct ones for your development shield -// ------------------------------------------------------------ -// My chipKit Uno32/uC32 shield : ,38,39,40,41 -// My chipKit Max32 shield : ,82,83,84,85 -// AquaLEDSource All in One Super Screw Shield : ,82,83,84,85 -// -// Remember to change the model parameter to suit your display module! -UTFT myGLCD(ITDB32S,82,83,84,85); - -extern unsigned short biohazard[0x1000]; - -void setup() -{ - myGLCD.InitLCD(LANDSCAPE); - myGLCD.fillScr(255, 255, 255); - myGLCD.setColor(0, 0, 0); -} - -void loop() -{ - for (int i=0; i<360; i+=5) - { - myGLCD.drawBitmap (10, 10, 64, 64, biohazard, i, 32, 32); - } -} - diff --git a/libraries/UTFT/examples/chipKit/UTFT_Rotate_Bitmap/biohazard.c b/libraries/UTFT/examples/chipKit/UTFT_Rotate_Bitmap/biohazard.c deleted file mode 100644 index ca1348d..0000000 --- a/libraries/UTFT/examples/chipKit/UTFT_Rotate_Bitmap/biohazard.c +++ /dev/null @@ -1,264 +0,0 @@ -// Generated by : ImageConverter 565 v1.0 -// Generated from: biohazard1_L.png -// Time generated: 12.06.2011 00:23:59 -// Dimensions : 64x64 pixels -// Size : 8 192 Bytes - -const unsigned short biohazard[0x1000] ={ -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0010 (16) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF7D, 0xC638, 0x9492, 0x6B4D, 0x4228, 0x2945, 0x2124, 0x18C3, 0x1082, // 0x0020 (32) -0x1082, 0x10A2, 0x18C3, 0x2124, 0x2965, 0x4A49, 0x6B6D, 0x9CD3, 0xCE79, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0030 (48) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0040 (64) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0050 (80) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0xBDD7, 0x6B6D, 0x2965, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0060 (96) -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0x31A6, 0x73AE, 0xC618, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0070 (112) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0080 (128) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0090 (144) -0xFFFF, 0xFFFF, 0xE73C, 0x8C71, 0x3186, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x0020, 0x0020, 0x0000, 0x0000, // 0x00A0 (160) -0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x4207, 0x9CF3, 0xF79E, 0xFFFF, // 0x00B0 (176) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00C0 (192) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x00D0 (208) -0xEF7D, 0x8C51, 0x2104, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x00E0 (224) -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x2965, 0x9CD3, // 0x00F0 (240) -0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0100 (256) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xAD75, // 0x0110 (272) -0x2965, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 0x0020, 0x2901, 0x5241, 0x7B41, 0x9C02, 0xACA2, 0xBD02, // 0x0120 (288) -0xC521, 0xBD02, 0xACA2, 0x9C22, 0x7B41, 0x5241, 0x2901, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0130 (304) -0x39E7, 0xC618, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0140 (320) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xEF5D, 0x630C, 0x0000, // 0x0150 (336) -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x41C1, 0x93E1, 0xD5A1, 0xFEA1, 0xFF01, 0xFF20, 0xFF20, 0xFF20, 0xFF00, // 0x0160 (352) -0xFF00, 0xFF00, 0xFF20, 0xFF20, 0xFF20, 0xFF01, 0xFEA1, 0xD5A1, 0x93E1, 0x49E1, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0170 (368) -0x0000, 0x0841, 0x7BEF, 0xF7BE, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0180 (384) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xC638, 0x2965, 0x0000, 0x0000, // 0x0190 (400) -0x0000, 0x0000, 0x0000, 0x0000, 0x18A0, 0x7B41, 0xD5A1, 0xFF01, 0xFF20, 0xFEE0, 0xFEC0, 0xFEA0, 0xF680, 0xF680, 0xFEA0, 0xFEA0, // 0x01A0 (416) -0xFEA0, 0xFEA0, 0xFEA0, 0xF680, 0xF680, 0xFEA0, 0xFEC0, 0xFF00, 0xFF20, 0xFF01, 0xD5A1, 0x7B41, 0x1880, 0x0000, 0x0000, 0x0000, // 0x01B0 (432) -0x0000, 0x0000, 0x0000, 0x4208, 0xDEDB, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x01C0 (448) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xAD55, 0x1082, 0x0000, 0x0000, 0x0000, // 0x01D0 (464) -0x0000, 0x0000, 0x0840, 0x7B62, 0xEE41, 0xFF21, 0xFEE0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFF20, 0xFF20, 0xFEA1, 0xFEC0, // 0x01E0 (480) -0xFEC0, 0xFEC0, 0xFEA1, 0xFF00, 0xFF20, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEE0, 0xFF21, 0xEE41, 0x7B62, 0x0840, 0x0000, // 0x01F0 (496) -0x0000, 0x0000, 0x0000, 0x0000, 0x18E3, 0xC618, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0200 (512) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x94B2, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0210 (528) -0x0000, 0x5201, 0xDDE1, 0xFF21, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFF40, 0xF6A1, 0xB4C1, 0x7322, 0xA441, 0xFEE0, // 0x0220 (544) -0xFEA0, 0xFEE0, 0xA461, 0x7322, 0xACA1, 0xF681, 0xFF40, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFF21, 0xDDE2, 0x4A01, // 0x0230 (560) -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1082, 0xB596, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0240 (576) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x9492, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0820, // 0x0250 (592) -0x9402, 0xFF01, 0xFEE0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEE0, 0xFF01, 0x9401, 0x3961, 0x7341, 0xCD81, 0xF680, 0xFEC0, // 0x0260 (608) -0xFEA0, 0xFEC0, 0xF681, 0xCD81, 0x7B61, 0x3961, 0x8BE1, 0xFEE1, 0xFEE0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEE0, 0xFF01, // 0x0270 (624) -0x9402, 0x0820, 0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0xB596, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0280 (640) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xA534, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x20C0, 0xCD61, // 0x0290 (656) -0xFF40, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFF01, 0xE621, 0x39A1, 0x20E1, 0xCD81, 0xFF40, 0xFEE0, 0xFEC0, 0xFEC0, // 0x02A0 (672) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEE0, 0xFF41, 0xCDC1, 0x2901, 0x3961, 0xDE01, 0xFF00, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEA0, // 0x02B0 (688) -0xFF21, 0xC561, 0x18A1, 0x0000, 0x0000, 0x0000, 0x0000, 0x1082, 0xC618, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02C0 (704) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xC618, 0x0861, 0x0000, 0x0000, 0x0000, 0x0000, 0x3121, 0xDE01, 0xFF00, // 0x02D0 (720) -0xFE80, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF01, 0xD5A2, 0x18A0, 0x20E0, 0xF682, 0xFF01, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, // 0x02E0 (736) -0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFF00, 0xF6A1, 0x2920, 0x1080, 0xCDA2, 0xFF01, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x02F0 (752) -0xFE80, 0xFF00, 0xDE01, 0x2921, 0x0000, 0x0000, 0x0000, 0x0000, 0x18E3, 0xDEDB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0300 (768) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE73C, 0x2124, 0x0000, 0x0000, 0x0000, 0x0000, 0x2921, 0xEE41, 0xFF00, 0xFEA0, // 0x0310 (784) -0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEE0, 0xDE02, 0x18A1, 0x0840, 0xDDE1, 0xFF00, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEC0, // 0x0320 (800) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEE0, 0xE621, 0x0860, 0x1880, 0xD5E2, 0xFEE0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0330 (816) -0xFEA0, 0xFEA0, 0xFF00, 0xE641, 0x2921, 0x0000, 0x0000, 0x0000, 0x0000, 0x4208, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0340 (832) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x5ACB, 0x0000, 0x0000, 0x0000, 0x0000, 0x18C0, 0xDE21, 0xFF00, 0xFEA0, 0xFEC0, // 0x0350 (848) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC1, 0x39A1, 0x0000, 0x8382, 0xFF21, 0xFE80, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0360 (864) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFE80, 0xFF20, 0x8BC1, 0x0000, 0x3161, 0xF6A1, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0370 (880) -0xFEC0, 0xFEC0, 0xFEA0, 0xFF00, 0xDE01, 0x18A0, 0x0000, 0x0000, 0x0000, 0x0000, 0x7BCF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0380 (896) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xA534, 0x0000, 0x0000, 0x0000, 0x0000, 0x0820, 0xCD61, 0xFF00, 0xFEA0, 0xFEC0, 0xFEC0, // 0x0390 (912) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF21, 0x93E1, 0x0000, 0x1060, 0xDE01, 0xFEE0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x03A0 (928) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEE0, 0xE621, 0x1080, 0x0000, 0x8BA1, 0xFF20, 0xFEA0, 0xFEC0, 0xFEC0, // 0x03B0 (944) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF00, 0xCD61, 0x0820, 0x0000, 0x0000, 0x0000, 0x0021, 0xBDF7, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x03C0 (960) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF5D, 0x2104, 0x0000, 0x0000, 0x0000, 0x0000, 0x9402, 0xFF41, 0xFE80, 0xFEA0, 0xFEC0, 0xFEC0, // 0x03D0 (976) -0xFEC0, 0xFEC0, 0xFEA0, 0xFEC0, 0xF681, 0x20E0, 0x0000, 0x41A1, 0xFEE1, 0xFEA0, 0xFEA1, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x03E0 (992) -0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFF01, 0x49E1, 0x0000, 0x18A1, 0xEE41, 0xFEC0, 0xFEA0, 0xFEC0, // 0x03F0 (1008) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFE80, 0xFF41, 0x9402, 0x0000, 0x0000, 0x0000, 0x0000, 0x39C7, 0xF7BE, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0400 (1024) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x7BCF, 0x0000, 0x0000, 0x0000, 0x0000, 0x4A01, 0xFF01, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0410 (1040) -0xFEC0, 0xFEC0, 0xFEA0, 0xFF20, 0xA461, 0x0000, 0x0000, 0x6AC1, 0xFF21, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, // 0x0420 (1056) -0xFEE0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFE80, 0xFF20, 0x7300, 0x0000, 0x0000, 0x9C21, 0xFF20, 0xFEA0, 0xFEC0, // 0x0430 (1072) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFF01, 0x49E1, 0x0000, 0x0000, 0x0000, 0x0000, 0x9CD3, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0440 (1088) -0xFFFF, 0xFFFF, 0xFFFF, 0xDEFB, 0x10A2, 0x0000, 0x0000, 0x0000, 0x0840, 0xDDE1, 0xFEE0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0450 (1104) -0xFEA0, 0xFEA0, 0xFEA0, 0xFF20, 0x6261, 0x0000, 0x0000, 0x7300, 0xFF21, 0xF6A0, 0xFEA0, 0xFEE0, 0xFF20, 0xFF00, 0xFEA1, 0xEE42, // 0x0460 (1120) -0xE602, 0xEE42, 0xFEA1, 0xFF00, 0xFF20, 0xFEE0, 0xFEA0, 0xF681, 0xFF40, 0x8360, 0x0000, 0x0000, 0x5241, 0xFF01, 0xFEA0, 0xFEA0, // 0x0470 (1136) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF00, 0xDDC1, 0x0840, 0x0000, 0x0000, 0x0000, 0x2945, 0xEF7D, 0xFFFF, 0xFFFF, // 0x0480 (1152) -0xFFFF, 0xFFDF, 0xFFFF, 0x7BEF, 0x0000, 0x0000, 0x0000, 0x0000, 0x7B42, 0xFF21, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0490 (1168) -0xFEC0, 0xFEA0, 0xFEC0, 0xFEA0, 0x2900, 0x0000, 0x0000, 0x6AE0, 0xFF21, 0xFEC0, 0xFF01, 0xDE01, 0x9C01, 0x5241, 0x2921, 0x18A1, // 0x04A0 (1184) -0x1061, 0x1881, 0x2921, 0x5241, 0x9C02, 0xDDE1, 0xFF21, 0xFEC0, 0xFF20, 0x7321, 0x0000, 0x0000, 0x20E0, 0xF681, 0xFEC0, 0xFEA0, // 0x04B0 (1200) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF21, 0x7B41, 0x0000, 0x0000, 0x0000, 0x0000, 0x9CD3, 0xFFFF, 0xFFDF, // 0x04C0 (1216) -0xFFDF, 0xFFFF, 0xEF7D, 0x2104, 0x0000, 0x0000, 0x0000, 0x1080, 0xEE41, 0xFEE0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x04D0 (1232) -0xFEC0, 0xFEA0, 0xFEC0, 0xEE21, 0x1060, 0x0000, 0x0000, 0x41C1, 0xFF21, 0xDDE1, 0x6AC1, 0x0860, 0x0000, 0x0000, 0x0000, 0x0000, // 0x04E0 (1248) -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0860, 0x62C1, 0xDDC1, 0xFF41, 0x49E1, 0x0000, 0x0000, 0x0840, 0xE601, 0xFEE0, 0xFEA0, // 0x04F0 (1264) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEC0, 0xEE41, 0x1080, 0x0000, 0x0000, 0x0000, 0x39C7, 0xF7BE, 0xFFFF, // 0x0500 (1280) -0xFFDF, 0xFFFF, 0xA534, 0x0000, 0x0000, 0x0000, 0x0000, 0x7B21, 0xFF21, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0510 (1296) -0xFEA0, 0xFEA0, 0xFEE0, 0xE602, 0x0841, 0x0000, 0x0000, 0x1080, 0xACC2, 0x1060, 0x0000, 0x0000, 0x0000, 0x0020, 0x2920, 0x4A01, // 0x0520 (1312) -0x5241, 0x4A01, 0x3140, 0x0821, 0x0000, 0x0000, 0x0000, 0x0860, 0xACA2, 0x18A0, 0x0000, 0x0000, 0x0820, 0xDDE2, 0xFEE0, 0xFEA0, // 0x0530 (1328) -0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFE80, 0xFF21, 0x7321, 0x0000, 0x0000, 0x0000, 0x0020, 0xC618, 0xFFFF, // 0x0540 (1344) -0xFFFF, 0xFFFF, 0x52AA, 0x0000, 0x0020, 0x0000, 0x0820, 0xDDA1, 0xFEE0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0550 (1360) -0xFEC0, 0xFEA0, 0xFEE0, 0xE621, 0x1060, 0x0000, 0x0000, 0x0000, 0x6AE2, 0x20C1, 0x0000, 0x20E1, 0x8BA2, 0xD5A1, 0xFEA1, 0xFF00, // 0x0560 (1376) -0xFF01, 0xFF00, 0xFEC1, 0xD5C1, 0x8BC2, 0x2901, 0x0000, 0x18A1, 0x7302, 0x0000, 0x0000, 0x0000, 0x0840, 0xDE01, 0xFEE0, 0xFEA0, // 0x0570 (1392) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEE0, 0xD5A1, 0x0020, 0x0000, 0x0000, 0x0000, 0x738E, 0xFFFF, // 0x0580 (1408) -0xFFFF, 0xE71C, 0x18C3, 0x0000, 0x0020, 0x0000, 0x49C1, 0xFF01, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0590 (1424) -0xFEA0, 0xFEA0, 0xFEC0, 0xF661, 0x18A0, 0x0000, 0x0000, 0x0000, 0x2101, 0x8363, 0x7321, 0xEE81, 0xFF21, 0xFEE0, 0xFEC0, 0xFEA0, // 0x05A0 (1440) -0xFEA0, 0xFEA0, 0xFEC0, 0xFEE0, 0xFF20, 0xF681, 0x7B41, 0x8362, 0x2921, 0x0000, 0x0000, 0x0000, 0x1080, 0xEE41, 0xFEC0, 0xFEA0, // 0x05B0 (1456) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFF01, 0x41C1, 0x0000, 0x0020, 0x0000, 0x3186, 0xF79E, // 0x05C0 (1472) -0xFFFF, 0xAD75, 0x0000, 0x0000, 0x0020, 0x0000, 0x93E1, 0xFF20, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEC0, // 0x05D0 (1488) -0xFEC0, 0xFEA0, 0xFEA0, 0xFF41, 0x5221, 0x0000, 0x0000, 0x0000, 0x0000, 0x41C1, 0xFF01, 0xFF00, 0xF660, 0xFEA0, 0xFEA0, 0xFEC0, // 0x05E0 (1504) -0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xF660, 0xFF00, 0xFF22, 0x49E1, 0x0000, 0x0000, 0x0000, 0x0000, 0x49E1, 0xFF40, 0xFEA0, 0xFEA0, // 0x05F0 (1520) -0xFEA1, 0xFEC0, 0xFEA1, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF20, 0x93E1, 0x0000, 0x0020, 0x0000, 0x0020, 0xC638, // 0x0600 (1536) -0xFFFF, 0x73AE, 0x0000, 0x0000, 0x0000, 0x0020, 0xD5A1, 0xFF00, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA1, 0xFEA0, // 0x0610 (1552) -0xFEA1, 0xFF20, 0xFEC1, 0xD5C1, 0x5220, 0x0000, 0x0000, 0x0000, 0x0020, 0x0000, 0x3981, 0xE622, 0xFF20, 0xFEC0, 0xFEA0, 0xFEA0, // 0x0620 (1568) -0xFEC0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFF21, 0xE621, 0x41C1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x49E0, 0xCDA2, 0xFEA1, 0xFF20, // 0x0630 (1584) -0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF00, 0xD5A1, 0x0020, 0x0000, 0x0000, 0x0000, 0x9492, // 0x0640 (1600) -0xFFFF, 0x4A49, 0x0000, 0x0020, 0x0000, 0x2901, 0xFEA1, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEE0, // 0x0650 (1616) -0xFEE1, 0xA461, 0x3981, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1881, 0x93E1, 0xE622, 0xFF01, 0xFF00, // 0x0660 (1632) -0xFEA0, 0xFF00, 0xFF21, 0xEE41, 0x9401, 0x18A1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3141, 0x9C21, // 0x0670 (1648) -0xFEC1, 0xFEE0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEC0, 0xFEA1, 0x2901, 0x0000, 0x0020, 0x0000, 0x632C, // 0x0680 (1664) -0xE71C, 0x2124, 0x0000, 0x0020, 0x0000, 0x5241, 0xFF01, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFF00, 0xD5C1, // 0x0690 (1680) -0x41C1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1081, 0x4A01, 0xAC81, // 0x06A0 (1696) -0xFF21, 0xB4C1, 0x5221, 0x1081, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x06B0 (1712) -0x3981, 0xCD81, 0xFF21, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF01, 0x5221, 0x0000, 0x0020, 0x0000, 0x4228, // 0x06C0 (1728) -0xBDF7, 0x18C3, 0x0000, 0x0020, 0x0000, 0x7B41, 0xFF20, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFF20, 0xBD02, 0x1060, // 0x06D0 (1744) -0x0000, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x5201, // 0x06E0 (1760) -0xFFC0, 0x5A41, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, // 0x06F0 (1776) -0x0000, 0x0840, 0xACA1, 0xFF21, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF20, 0x7B41, 0x0000, 0x0020, 0x0000, 0x2945, // 0x0700 (1792) -0x94B2, 0x0861, 0x0000, 0x0000, 0x0000, 0x9C02, 0xFF20, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF00, 0xBD22, 0x0820, 0x0000, // 0x0710 (1808) -0x0820, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1881, 0xAC81, // 0x0720 (1824) -0xFF20, 0xB4A1, 0x18A1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0730 (1840) -0x0020, 0x0000, 0x0000, 0xB4C2, 0xFF00, 0xFE80, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF20, 0x9C02, 0x0000, 0x0020, 0x0000, 0x2104, // 0x0740 (1856) -0x73AE, 0x0841, 0x0000, 0x0000, 0x0000, 0xACA2, 0xFF20, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEE0, 0xE622, 0x18A1, 0x0000, 0x0000, // 0x0750 (1872) -0x0000, 0x1080, 0x5221, 0x6B03, 0x6AE2, 0x6AE3, 0x4A01, 0x1080, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1061, 0xCD82, 0xFF20, // 0x0760 (1888) -0xFE80, 0xFF20, 0xD5C2, 0x1881, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1080, 0x5241, 0x6AE3, 0x6AE2, 0x6AE3, 0x5A62, 0x18C0, // 0x0770 (1904) -0x0000, 0x0000, 0x0000, 0x1060, 0xDDE2, 0xFEE0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFF20, 0xACA2, 0x0000, 0x0000, 0x0000, 0x10A2, // 0x0780 (1920) -0x52AA, 0x0000, 0x0000, 0x0000, 0x0000, 0xBD02, 0xFF00, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF01, 0x5A61, 0x0000, 0x0000, 0x18A0, // 0x0790 (1936) -0x9401, 0xEE61, 0xFEE2, 0x49E2, 0x18A1, 0x62A1, 0xFF41, 0xE621, 0x8BC2, 0x1880, 0x0000, 0x0820, 0x0000, 0x7B21, 0xFF40, 0xFE80, // 0x07A0 (1952) -0xFEC0, 0xFE80, 0xFF40, 0x8381, 0x0000, 0x0820, 0x0000, 0x1080, 0x8BE2, 0xEE41, 0xFF41, 0x62A2, 0x10A1, 0x3982, 0xFEC2, 0xF6A1, // 0x07B0 (1968) -0xA462, 0x2101, 0x0000, 0x0000, 0x49E1, 0xFF01, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF00, 0xBD02, 0x0000, 0x0000, 0x0000, 0x1082, // 0x07C0 (1984) -0x528A, 0x0000, 0x0000, 0x0000, 0x0000, 0xC521, 0xFF00, 0xFEA0, 0xFEC0, 0xFEA0, 0xFF00, 0xCD41, 0x0000, 0x0000, 0x49C1, 0xE642, // 0x07D0 (2000) -0xFF21, 0xFEE0, 0xEE42, 0x1081, 0x0000, 0x41A0, 0xFEE0, 0xFEC0, 0xFF40, 0xE621, 0x41A1, 0x0000, 0x0000, 0x93E1, 0xFF20, 0xFEA0, // 0x07E0 (2016) -0xFEA0, 0xFEA0, 0xFF20, 0x9C22, 0x0000, 0x0000, 0x3981, 0xDE01, 0xFF21, 0xFEC0, 0xFEE1, 0x49E1, 0x0000, 0x0840, 0xE602, 0xFEC0, // 0x07F0 (2032) -0xFF20, 0xEE81, 0x5A61, 0x0000, 0x0000, 0xBCE1, 0xFF00, 0xFEA0, 0xFEC0, 0xFEA0, 0xFF00, 0xC521, 0x0000, 0x0000, 0x0000, 0x1082, // 0x0800 (2048) -0x52AA, 0x0000, 0x0000, 0x0000, 0x0000, 0xBD02, 0xFF00, 0xFEA0, 0xFEA0, 0xFEA0, 0xFF20, 0x6AC1, 0x0000, 0x49E1, 0xFEE2, 0xFEE0, // 0x0810 (2064) -0xFE80, 0xFEC0, 0xF682, 0x20E1, 0x0000, 0x39A0, 0xFEE0, 0xFEA0, 0xFE80, 0xFEE0, 0xF6A2, 0x41A1, 0x3961, 0xDDC1, 0xFF00, 0xFE80, // 0x0820 (2080) -0xFEA0, 0xFEA0, 0xFF00, 0xE601, 0x41C1, 0x3981, 0xF682, 0xFF00, 0xFE80, 0xFEA0, 0xFF00, 0x41C1, 0x0000, 0x20C1, 0xF661, 0xFEC0, // 0x0830 (2096) -0xF6A0, 0xFEC0, 0xFF01, 0x6261, 0x0000, 0x5A41, 0xFF01, 0xFEA0, 0xFEC0, 0xFEA0, 0xFF00, 0xBD02, 0x0000, 0x0000, 0x0000, 0x1082, // 0x0840 (2112) -0x738E, 0x0841, 0x0000, 0x0000, 0x0000, 0xACA2, 0xFF20, 0xFEA0, 0xFEA0, 0xFEC0, 0xF681, 0x18A0, 0x1080, 0xEE41, 0xFEE0, 0xFEA0, // 0x0850 (2128) -0xFEC0, 0xFEA0, 0xFEE1, 0x3980, 0x0000, 0x20C0, 0xF662, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEE0, 0xF681, 0xFEE1, 0xFF01, 0xDDC1, 0xFF21, // 0x0860 (2144) -0xFF20, 0xFF21, 0xDDC1, 0xFEC1, 0xFF01, 0xF661, 0xFEE0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEA1, 0x2900, 0x0000, 0x3140, 0xFEA1, 0xFEA0, // 0x0870 (2160) -0xFEA0, 0xFEA0, 0xFEC0, 0xF6A1, 0x2101, 0x0840, 0xEE41, 0xFEE0, 0xFEA0, 0xFEA0, 0xFF20, 0xAC82, 0x0000, 0x0000, 0x0000, 0x10A2, // 0x0880 (2176) -0x9492, 0x0861, 0x0000, 0x0000, 0x0000, 0x9C02, 0xFF20, 0xFEA0, 0xFEA0, 0xFF00, 0xD582, 0x0000, 0x93C1, 0xFF40, 0xFE80, 0xFEC0, // 0x0890 (2192) -0xFEC0, 0xFEA0, 0xFF21, 0x6AC1, 0x0000, 0x0000, 0xCD41, 0xFF00, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEE0, 0xDDE1, 0x41A1, 0x0860, 0x6AC1, // 0x08A0 (2208) -0x93E1, 0x6AE1, 0x0841, 0x3161, 0xD5C1, 0xFEE0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFF00, 0xCD61, 0x0000, 0x0000, 0x5A81, 0xFF21, 0xFEA0, // 0x08B0 (2224) -0xFEC0, 0xFEC0, 0xFEA0, 0xFF20, 0xAC81, 0x0000, 0xC521, 0xFF00, 0xFEA0, 0xFEA0, 0xFF20, 0x9C02, 0x0000, 0x0020, 0x0000, 0x2104, // 0x08C0 (2240) -0xB5B6, 0x10A2, 0x0000, 0x0020, 0x0000, 0x7B41, 0xFF20, 0xFEA0, 0xFEA0, 0xFF20, 0xAC80, 0x0820, 0xEE41, 0xFEC0, 0xFEA0, 0xFEC0, // 0x08D0 (2256) -0xFEC0, 0xFEA0, 0xFF00, 0xAC81, 0x0000, 0x0000, 0x7301, 0xFF20, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEE0, 0xD5C1, 0x0000, 0x0000, 0x0000, // 0x08E0 (2272) -0x0000, 0x0000, 0x0000, 0x0000, 0xD561, 0xFEE0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFF41, 0x7B42, 0x0000, 0x0000, 0xA442, 0xFF21, 0xFEA0, // 0x08F0 (2288) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA1, 0x1080, 0x9C00, 0xFF40, 0xFEA0, 0xFEA0, 0xFF20, 0x7B41, 0x0000, 0x0020, 0x0000, 0x2124, // 0x0900 (2304) -0xDEFB, 0x2104, 0x0000, 0x0020, 0x0000, 0x5221, 0xFF01, 0xFEA0, 0xFEA0, 0xFF40, 0x93C0, 0x3961, 0xFF21, 0xFEA0, 0xFEC0, 0xFEC0, // 0x0910 (2320) -0xFEC0, 0xFEA0, 0xFEC0, 0xEE61, 0x1881, 0x0000, 0x1080, 0xEE21, 0xFEE0, 0xFEA0, 0xFEC0, 0xFEA0, 0xFF01, 0x41C1, 0x0000, 0x0020, // 0x0920 (2336) -0x0000, 0x0020, 0x0000, 0x3961, 0xFEE1, 0xFEA0, 0xFEC0, 0xFEA0, 0xFEC0, 0xEE61, 0x18A1, 0x0000, 0x1060, 0xE621, 0xFEC0, 0xFEA0, // 0x0930 (2352) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF21, 0x4A01, 0x8361, 0xFF40, 0xFEA0, 0xFEA0, 0xFF01, 0x5221, 0x0000, 0x0020, 0x0000, 0x4208, // 0x0940 (2368) -0xFFDF, 0x4208, 0x0000, 0x0000, 0x0000, 0x2901, 0xFEA1, 0xFEC0, 0xFEA0, 0xFF40, 0x93C0, 0x5A60, 0xFF41, 0xFEA0, 0xFEC0, 0xFEC0, // 0x0950 (2384) -0xFEA0, 0xFEC0, 0xFEA0, 0xFF21, 0x7B41, 0x0000, 0x0000, 0x6281, 0xFF21, 0xFEA0, 0xFEA0, 0xFEA0, 0xFF21, 0x62A1, 0x0000, 0x0000, // 0x0960 (2400) -0x0000, 0x0000, 0x0000, 0x5A41, 0xFF01, 0xFEA0, 0xFEA0, 0xF680, 0xFF41, 0x6AC1, 0x0000, 0x0000, 0x7301, 0xFF21, 0xFEA0, 0xFEA0, // 0x0970 (2416) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF40, 0x6AE1, 0x8361, 0xFF40, 0xFEA0, 0xFEC0, 0xFEA1, 0x2901, 0x0000, 0x0020, 0x0000, 0x630C, // 0x0980 (2432) -0xFFFF, 0x6B6D, 0x0000, 0x0020, 0x0000, 0x0020, 0xD5A1, 0xFF00, 0xFEA0, 0xFF20, 0xA461, 0x6AC0, 0xFF40, 0xFEA0, 0xFEC0, 0xFEC0, // 0x0990 (2448) -0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xEE61, 0x18C0, 0x0000, 0x0000, 0x93E2, 0xFF41, 0xFEA0, 0xFE80, 0xFF20, 0x6AE1, 0x0000, 0x0000, // 0x09A0 (2464) -0x0000, 0x0000, 0x0000, 0x62A1, 0xFF21, 0xFE80, 0xFEA0, 0xFF40, 0x9C22, 0x0000, 0x0000, 0x1881, 0xE641, 0xFEC0, 0xFEC0, 0xFEC0, // 0x09B0 (2480) -0xFEA0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF40, 0x7B61, 0x9C00, 0xFF40, 0xFE80, 0xFF00, 0xD581, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C51, // 0x09C0 (2496) -0xFFFF, 0xA534, 0x0000, 0x0000, 0x0000, 0x0000, 0x93E1, 0xFF20, 0xFE80, 0xFF00, 0xC541, 0x72E1, 0xFF20, 0xFEA0, 0xFEC0, 0xFEC0, // 0x09D0 (2512) -0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFF00, 0xB4C1, 0x0000, 0x0020, 0x0000, 0x93E1, 0xFF21, 0xFEC0, 0xFF01, 0x5A81, 0x0000, 0x0000, // 0x09E0 (2528) -0x0000, 0x0000, 0x0000, 0x5222, 0xFF01, 0xFEC0, 0xFF21, 0x9C01, 0x0000, 0x0020, 0x0000, 0xAC81, 0xFF01, 0xFEA0, 0xFEA0, 0xFEC0, // 0x09F0 (2544) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF20, 0x7B40, 0xBD01, 0xFF20, 0xF680, 0xFF20, 0x93C1, 0x0000, 0x0020, 0x0000, 0x0000, 0xBDF7, // 0x0A00 (2560) -0xFFFF, 0xDEDB, 0x1082, 0x0000, 0x0000, 0x0000, 0x41C1, 0xFF01, 0xFEA0, 0xFEC0, 0xF660, 0x6AC2, 0xF6A1, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0A10 (2576) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFF21, 0x8BA1, 0x0000, 0x0000, 0x0000, 0x6281, 0xDE21, 0xFF01, 0x3161, 0x0000, 0x0000, // 0x0A20 (2592) -0x0000, 0x0000, 0x0000, 0x2921, 0xFEE1, 0xE641, 0x62A1, 0x0000, 0x0000, 0x0000, 0x8381, 0xFF21, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0A30 (2608) -0xFEC0, 0xFEC0, 0xFEA0, 0xFEC0, 0xFEC1, 0x6AC2, 0xE621, 0xFEE0, 0xFEA0, 0xFF01, 0x41C1, 0x0000, 0x0020, 0x0000, 0x2124, 0xEF5D, // 0x0A40 (2624) -0xFFFF, 0xFFFF, 0x4A49, 0x0000, 0x0000, 0x0000, 0x0020, 0xD5A1, 0xFEE0, 0xFEA0, 0xFEC0, 0xCD41, 0xF660, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0A50 (2640) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFF21, 0x8BC1, 0x0000, 0x0000, 0x0000, 0x1060, 0xA442, 0x0860, 0x0000, 0x0000, // 0x0A60 (2656) -0x0000, 0x0000, 0x0000, 0x0820, 0xA442, 0x18A0, 0x0000, 0x0000, 0x0000, 0x8381, 0xFF21, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0A70 (2672) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFE80, 0xCD62, 0xFEC0, 0xFEA1, 0xFEE0, 0xD5A1, 0x0020, 0x0000, 0x0000, 0x0000, 0x630C, 0xFFFF, // 0x0A80 (2688) -0xFFDF, 0xFFFF, 0x94B2, 0x0000, 0x0000, 0x0000, 0x0000, 0x7321, 0xFF21, 0xFEA0, 0xFEA0, 0xFEE0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEC0, // 0x0A90 (2704) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFF21, 0xB4C1, 0x20E1, 0x0000, 0x3161, 0x62A2, 0x0000, 0x0000, 0x0000, // 0x0AA0 (2720) -0x0000, 0x0000, 0x0000, 0x0000, 0x5A82, 0x39A1, 0x0000, 0x20C1, 0xAC82, 0xFF21, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0AB0 (2736) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEC0, 0xFEE0, 0xFEA0, 0xFEA0, 0xFF21, 0x7321, 0x0000, 0x0000, 0x0000, 0x0000, 0xB596, 0xFFFF, // 0x0AC0 (2752) -0xFFDF, 0xFFFF, 0xE73C, 0x18C3, 0x0000, 0x0000, 0x0000, 0x1080, 0xEE41, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA1, 0xFF00, 0xFEE0, 0xFEA0, // 0x0AD0 (2768) -0xFEC0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFF00, 0xEE41, 0x83C1, 0x8BA3, 0x1081, 0x0000, 0x0000, 0x0000, // 0x0AE0 (2784) -0x0000, 0x0000, 0x0000, 0x0000, 0x1060, 0x8383, 0x83A1, 0xEE41, 0xFF00, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, // 0x0AF0 (2800) -0xFEC0, 0xFEA0, 0xFEC0, 0xFF00, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xEE21, 0x1080, 0x0000, 0x0000, 0x0000, 0x2945, 0xEF7D, 0xFFFF, // 0x0B00 (2816) -0xFFFF, 0xFFFF, 0xFFFF, 0x6B4D, 0x0000, 0x0000, 0x0000, 0x0000, 0x7B41, 0xFF21, 0xFEA0, 0xFEA0, 0xFF00, 0xB482, 0xD5C1, 0xFF20, // 0x0B10 (2832) -0xFE80, 0xFEA0, 0xFEA0, 0xFEA1, 0xFEA0, 0xFEC0, 0xFEA1, 0xFEA0, 0xF680, 0xFF20, 0xF6A2, 0x3121, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0B20 (2848) -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x20E1, 0xEE62, 0xFF40, 0xF680, 0xFEA0, 0xFEA1, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, // 0x0B30 (2864) -0xF681, 0xFF20, 0xE601, 0xAC62, 0xFF00, 0xFEA0, 0xFE80, 0xFF21, 0x7B41, 0x0000, 0x0000, 0x0000, 0x0000, 0x8410, 0xFFFF, 0xFFFF, // 0x0B40 (2880) -0xFFFF, 0xFFDF, 0xFFFF, 0xD69A, 0x0841, 0x0000, 0x0000, 0x0000, 0x0840, 0xDDC1, 0xFEE0, 0xFEA0, 0xFEE1, 0xD5A1, 0x5221, 0xBD21, // 0x0B50 (2896) -0xFF41, 0xFF00, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA1, 0xFEC0, 0xFF00, 0xFF21, 0xCD61, 0x20E1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, // 0x0B60 (2912) -0x7322, 0x0840, 0x0000, 0x0000, 0x0000, 0x0000, 0x18A1, 0xBD22, 0xFF21, 0xFF00, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEE0, // 0x0B70 (2928) -0xFF40, 0xC561, 0x5221, 0xCD81, 0xFEE0, 0xFE81, 0xFEE0, 0xDDC1, 0x0840, 0x0000, 0x0000, 0x0000, 0x18E3, 0xE71C, 0xFFFF, 0xFFFF, // 0x0B80 (2944) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x632C, 0x0000, 0x0000, 0x0000, 0x0000, 0x49E1, 0xFF01, 0xFEA0, 0xFEA0, 0xFF00, 0xDE01, 0x4181, // 0x0B90 (2960) -0x5A81, 0xD581, 0xFEE1, 0xFF20, 0xFF20, 0xFF01, 0xFEC1, 0xD582, 0x6AE1, 0x0020, 0x0000, 0x0020, 0x0000, 0x0000, 0x1060, 0xACA2, // 0x0BA0 (2976) -0xFF61, 0xBD21, 0x18A1, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, 0x62A2, 0xCD62, 0xFEA1, 0xFF01, 0xFF20, 0xFF20, 0xFEE1, 0xD5C1, // 0x0BB0 (2992) -0x62C1, 0x3981, 0xD5C1, 0xFF21, 0xFEA0, 0xFEA0, 0xFF01, 0x49E1, 0x0000, 0x0000, 0x0000, 0x0000, 0x7BEF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0BC0 (3008) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEDB, 0x1082, 0x0000, 0x0000, 0x0000, 0x0000, 0x93E2, 0xFF40, 0xFE80, 0xFE80, 0xFEE0, 0xFEC1, // 0x0BD0 (3024) -0x6B01, 0x1061, 0x18C1, 0x4A00, 0x5AA0, 0x5240, 0x3141, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4A01, 0xDDC1, 0xFF20, // 0x0BE0 (3040) -0xFE80, 0xFF00, 0xE602, 0x5A41, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2921, 0x5220, 0x5AA0, 0x4A00, 0x20E1, 0x1060, // 0x0BF0 (3056) -0x6AE1, 0xF6A1, 0xFEE0, 0xFEA1, 0xFEA0, 0xFF41, 0x93E1, 0x0000, 0x0000, 0x0000, 0x0000, 0x2124, 0xE71C, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0C00 (3072) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x8C71, 0x0000, 0x0000, 0x0000, 0x0000, 0x0820, 0xCD61, 0xFF00, 0xFEA0, 0xFEA0, 0xFEC0, // 0x0C10 (3088) -0xFF41, 0xDDE1, 0x6B01, 0x18C1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18A0, 0x5A61, 0xBCE2, 0xFF01, 0xFEE0, 0xFEA0, // 0x0C20 (3104) -0xFEC0, 0xFEA0, 0xFEE0, 0xFF01, 0xC541, 0x6281, 0x20C1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18C1, 0x6AE1, 0xDDC1, // 0x0C30 (3120) -0xFF41, 0xFEC0, 0xFEA0, 0xFEA0, 0xFF01, 0xC541, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0xA514, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0C40 (3136) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7BE, 0x4208, 0x0000, 0x0000, 0x0000, 0x0000, 0x18A1, 0xDE01, 0xFF00, 0xFE80, 0xFEC0, // 0x0C50 (3152) -0xFEA0, 0xFEE0, 0xFF20, 0xFEC1, 0xD5A2, 0xAC82, 0x9401, 0x93E1, 0x9C42, 0xC522, 0xEE41, 0xFF01, 0xFF00, 0xFEA0, 0xFEA0, 0xFEC0, // 0x0C60 (3168) -0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFF00, 0xFF21, 0xF661, 0xC542, 0xA462, 0x93E1, 0x9C01, 0xB4A2, 0xD5A1, 0xFEC1, 0xFF20, 0xFEE0, // 0x0C70 (3184) -0xFEA0, 0xFEC0, 0xFE80, 0xFF00, 0xDE01, 0x18A1, 0x0000, 0x0000, 0x0000, 0x0000, 0x52AA, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0C80 (3200) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xD6BA, 0x10A2, 0x0000, 0x0000, 0x0000, 0x0000, 0x2921, 0xE641, 0xFF00, 0xFE80, // 0x0C90 (3216) -0xFEC0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFF00, 0xFF20, 0xFF20, 0xFF20, 0xFF20, 0xFF00, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0CA0 (3232) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFF00, 0xFF20, 0xFF20, 0xFF20, 0xFF20, 0xFF00, 0xFEC0, 0xFEA0, 0xFEA0, // 0x0CB0 (3248) -0xFEA0, 0xFE80, 0xFF00, 0xE641, 0x2901, 0x0000, 0x0000, 0x0000, 0x0000, 0x2124, 0xE71C, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0CC0 (3264) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xAD55, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2901, 0xDE01, 0xFF00, // 0x0CD0 (3280) -0xFE80, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0CE0 (3296) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEA0, // 0x0CF0 (3312) -0xFE80, 0xFF00, 0xDE01, 0x2900, 0x0000, 0x0000, 0x0000, 0x0000, 0x0861, 0xBDD7, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0D00 (3328) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0x8430, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18A1, 0xC561, // 0x0D10 (3344) -0xFF21, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0D20 (3360) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, // 0x0D30 (3376) -0xFF41, 0xC561, 0x18A1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x9CD3, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0D40 (3392) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x73AE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0820, // 0x0D50 (3408) -0x9402, 0xFF01, 0xFEE0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0D60 (3424) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEE0, 0xFF01, // 0x0D70 (3440) -0x9402, 0x0820, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C51, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0D80 (3456) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x73AE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0D90 (3472) -0x0000, 0x4A01, 0xDDC1, 0xFF41, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0DA0 (3488) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFF21, 0xD5C1, 0x4A01, // 0x0DB0 (3504) -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x8C51, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0DC0 (3520) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x8430, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0DD0 (3536) -0x0000, 0x0000, 0x0840, 0x7B61, 0xE641, 0xFF21, 0xFEE0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, // 0x0DE0 (3552) -0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEE0, 0xFF21, 0xE621, 0x7B42, 0x0840, 0x0000, // 0x0DF0 (3568) -0x0000, 0x0000, 0x0000, 0x0000, 0x0841, 0x9492, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0E00 (3584) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xAD55, 0x10A2, 0x0000, 0x0000, // 0x0E10 (3600) -0x0000, 0x0000, 0x0000, 0x0000, 0x1880, 0x7B21, 0xD5A1, 0xFF01, 0xFF20, 0xFF00, 0xFEC0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, // 0x0E20 (3616) -0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEA0, 0xFEC0, 0xFF00, 0xFF20, 0xFF01, 0xD5A1, 0x7321, 0x1880, 0x0000, 0x0000, 0x0000, // 0x0E30 (3632) -0x0000, 0x0000, 0x0000, 0x18E3, 0xAD75, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0E40 (3648) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xD69A, 0x4228, 0x0000, // 0x0E50 (3664) -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x41C1, 0x93E1, 0xD5A1, 0xFEA1, 0xFF01, 0xFF20, 0xFF20, 0xFF20, 0xFF00, // 0x0E60 (3680) -0xFF00, 0xFF00, 0xFF20, 0xFF20, 0xFF20, 0xFF01, 0xFEA1, 0xD5A1, 0x93E1, 0x41C1, 0x0020, 0x0000, 0x0000, 0x0020, 0x0000, 0x0000, // 0x0E70 (3696) -0x0000, 0x0000, 0x528A, 0xD6BA, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0E80 (3712) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFDF, 0x8C71, // 0x0E90 (3728) -0x10A2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2901, 0x5221, 0x7B41, 0x9402, 0xAC82, 0xBCE2, // 0x0EA0 (3744) -0xC521, 0xBCE2, 0xAC82, 0x9401, 0x7B41, 0x5221, 0x2901, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0EB0 (3760) -0x18E3, 0x94B2, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0EC0 (3776) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0ED0 (3792) -0xD6BA, 0x632C, 0x0841, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0EE0 (3808) -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x10A2, 0x738E, // 0x0EF0 (3824) -0xDEFB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F00 (3840) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F10 (3856) -0xFFFF, 0xFFFF, 0xCE79, 0x6B4D, 0x18C3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0000, 0x0000, // 0x0F20 (3872) -0x0000, 0x0000, 0x0000, 0x0020, 0x0020, 0x0020, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2104, 0x738E, 0xD69A, 0xFFFF, // 0x0F30 (3888) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F40 (3904) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F50 (3920) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE71C, 0x94B2, 0x4A49, 0x1082, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0F60 (3936) -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18C3, 0x4A69, 0x9CD3, 0xE73C, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F70 (3952) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F80 (3968) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0F90 (3984) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEDB, 0xA534, 0x6B6D, 0x4208, 0x2104, 0x18C3, 0x0861, 0x0841, 0x0000, // 0x0FA0 (4000) -0x0000, 0x0000, 0x0841, 0x0861, 0x18C3, 0x2124, 0x4228, 0x6B6D, 0xA534, 0xDEDB, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0FB0 (4016) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0FC0 (4032) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0FD0 (4048) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xDEDB, 0xB5B6, 0x9492, 0x6B6D, 0x4A49, // 0x0FE0 (4064) -0x4228, 0x4A49, 0x6B6D, 0x8C51, 0xAD75, 0xDEDB, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0FF0 (4080) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x1000 (4096) -}; diff --git a/libraries/UTFT/examples/chipKit/UTFT_Textrotation_Demo/UTFT_Textrotation_Demo.pde b/libraries/UTFT/examples/chipKit/UTFT_Textrotation_Demo/UTFT_Textrotation_Demo.pde deleted file mode 100644 index f9db69a..0000000 --- a/libraries/UTFT/examples/chipKit/UTFT_Textrotation_Demo/UTFT_Textrotation_Demo.pde +++ /dev/null @@ -1,51 +0,0 @@ -// UTFT_Textrotation_Demo (C)2014 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of the textrotation-functions. -// -// This demo was made for modules with a screen resolution -// of 320x240 pixels. -// -// This program requires the UTFT library. -// - -#include - -// Declare which fonts we will be using -extern uint8_t BigFont[]; -extern uint8_t SevenSegNumFont[]; - -// Set the pins to the correct ones for your development shield -// ------------------------------------------------------------ -// My chipKit Uno32/uC32 shield : ,38,39,40,41 -// My chipKit Max32 shield : ,82,83,84,85 -// AquaLEDSource All in One Super Screw Shield : ,82,83,84,85 -// -// Remember to change the model parameter to suit your display module! -UTFT myGLCD(ITDB32S,82,83,84,85); - -void setup() -{ - myGLCD.InitLCD(); - myGLCD.clrScr(); - myGLCD.setFont(BigFont); -} - -void loop() -{ - myGLCD.print("Text rotation", 0, 0); - myGLCD.setColor(0, 0, 255); - myGLCD.print("0 degrees", 0, 16, 0); - myGLCD.print("90 degrees", 319, 0, 90); - myGLCD.print("180 degrees", 319, 239, 180); - myGLCD.print("270 degrees", 0, 239, 270); - - myGLCD.setFont(SevenSegNumFont); - myGLCD.setColor(0, 255, 0); - myGLCD.print("45", 90, 100, 45); - myGLCD.print("90", 200, 50, 90); - myGLCD.print("180", 300, 200, 180); - - while (true) {}; -} - diff --git a/libraries/UTFT/examples/chipKit/UTFT_ViewFont/UTFT_ViewFont.pde b/libraries/UTFT/examples/chipKit/UTFT_ViewFont/UTFT_ViewFont.pde deleted file mode 100644 index bd9fa5f..0000000 --- a/libraries/UTFT/examples/chipKit/UTFT_ViewFont/UTFT_ViewFont.pde +++ /dev/null @@ -1,58 +0,0 @@ -// UTFT_ViewFont (C)2014 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a demo of the included fonts. -// -// This demo was made for modules with a screen resolution -// of 320x240 pixels. -// -// This program requires the UTFT library. -// - -#include - -// Declare which fonts we will be using -extern uint8_t SmallFont[]; -extern uint8_t BigFont[]; -extern uint8_t SevenSegNumFont[]; - -// Set the pins to the correct ones for your development shield -// ------------------------------------------------------------ -// My chipKit Uno32/uC32 shield : ,38,39,40,41 -// My chipKit Max32 shield : ,82,83,84,85 -// AquaLEDSource All in One Super Screw Shield : ,82,83,84,85 -// -// Remember to change the model parameter to suit your display module! -UTFT myGLCD(ITDB32S,82,83,84,85); - -void setup() -{ - myGLCD.InitLCD(); - - myGLCD.clrScr(); -} - -void loop() -{ - myGLCD.setColor(0, 255, 0); - myGLCD.setBackColor(0, 0, 0); - - myGLCD.setFont(BigFont); - myGLCD.print(" !\"#$%&'()*+,-./", CENTER, 0); - myGLCD.print("0123456789:;<=>?", CENTER, 16); - myGLCD.print("@ABCDEFGHIJKLMNO", CENTER, 32); - myGLCD.print("PQRSTUVWXYZ[\\]^_", CENTER, 48); - myGLCD.print("`abcdefghijklmno", CENTER, 64); - myGLCD.print("pqrstuvwxyz{|}~ ", CENTER, 80); - - myGLCD.setFont(SmallFont); - myGLCD.print(" !\"#$%&'()*+,-./0123456789:;<=>?", CENTER, 120); - myGLCD.print("@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_", CENTER, 132); - myGLCD.print("`abcdefghijklmnopqrstuvwxyz{|}~ ", CENTER, 144); - - myGLCD.setFont(SevenSegNumFont); - myGLCD.print("0123456789", CENTER, 190); - - while(1) {}; -} - diff --git a/libraries/UTFT/hardware/arm/HW_ARM.h b/libraries/UTFT/hardware/arm/HW_ARM.h deleted file mode 100644 index c71a5ff..0000000 --- a/libraries/UTFT/hardware/arm/HW_ARM.h +++ /dev/null @@ -1,7 +0,0 @@ -void UTFT::_convert_float(char *buf, double num, int width, byte prec) -{ - char format[10]; - - sprintf(format, "%%%i.%if", width, prec); - sprintf(buf, format, num); -} diff --git a/libraries/UTFT/hardware/arm/HW_ARM_defines.h b/libraries/UTFT/hardware/arm/HW_ARM_defines.h deleted file mode 100644 index 2881e17..0000000 --- a/libraries/UTFT/hardware/arm/HW_ARM_defines.h +++ /dev/null @@ -1,40 +0,0 @@ -// CTE TFT LCD/SD Shield for Arduino Due -// ------------------------------------- -// Uncomment the following line if you are using this shield -//#define CTE_DUE_SHIELD 1 -// -// For this shield: RS=25, WR=26, CS=27, RST=28 -//******************************************************************** - -// ElecHouse TFT LCD/SD Shield for Arduino Due -// ------------------------------------- -// Uncomment the following line if you are using this shield -//#define EHOUSE_DUE_SHIELD 1 -// -// For this shield: RS=22, WR=23, CS=31, RST=33 -//******************************************************************** - -// *** Hardwarespecific defines *** -#define cbi(reg, bitmask) *reg &= ~bitmask -#define sbi(reg, bitmask) *reg |= bitmask -#define pulse_high(reg, bitmask) sbi(reg, bitmask); cbi(reg, bitmask); -#define pulse_low(reg, bitmask) cbi(reg, bitmask); sbi(reg, bitmask); - -#define cport(port, data) port &= data -#define sport(port, data) port |= data - -#define swap(type, i, j) {type t = i; i = j; j = t;} - -#define fontbyte(x) cfont.font[x] - -#define pgm_read_word(data) *data -#define pgm_read_byte(data) *data -#define bitmapdatatype unsigned short* - -#if defined(TEENSYDUINO) && TEENSYDUINO >= 117 - #define regtype volatile uint8_t - #define regsize uint8_t -#else - #define regtype volatile uint32_t - #define regsize uint32_t -#endif diff --git a/libraries/UTFT/hardware/arm/HW_MX20DX256.h b/libraries/UTFT/hardware/arm/HW_MX20DX256.h deleted file mode 100644 index 93df980..0000000 --- a/libraries/UTFT/hardware/arm/HW_MX20DX256.h +++ /dev/null @@ -1,188 +0,0 @@ -/** - * - * This file is a modified version of the HW_Teensy3.h created by Paul Stoffregen. - * - * Teensy 3.x pin definitions created by Dawnmist - * http://forum.pjrc.com/threads/18002-Teensy-3-0-driving-an-SSD1289-with-utft?p=34719&viewfull=1#post34719 - * - * This file only supports the B and D ports as defined by Dawnmist for 8-bit and 16-bit display modules. - * Serial display modules are also supported. - * - * NOTE: This file has only been tested on a Teensy 3.1 - * -**/ - -// *** Hardware specific functions *** -void UTFT::_hw_special_init() -{ -} - -void UTFT::LCD_Writ_Bus(char VH,char VL, byte mode) -{ - switch (mode) - { - case 1: - if (display_serial_mode==SERIAL_4PIN) - { - if (VH==1) - sbi(P_SDA, B_SDA); - else - cbi(P_SDA, B_SDA); - pulse_low(P_SCL, B_SCL); - } - else - { - if (VH==1) - sbi(P_RS, B_RS); - else - cbi(P_RS, B_RS); - } - - if (VL & 0x80) - sbi(P_SDA, B_SDA); - else - cbi(P_SDA, B_SDA); - pulse_low(P_SCL, B_SCL); - if (VL & 0x40) - sbi(P_SDA, B_SDA); - else - cbi(P_SDA, B_SDA); - pulse_low(P_SCL, B_SCL); - if (VL & 0x20) - sbi(P_SDA, B_SDA); - else - cbi(P_SDA, B_SDA); - pulse_low(P_SCL, B_SCL); - if (VL & 0x10) - sbi(P_SDA, B_SDA); - else - cbi(P_SDA, B_SDA); - pulse_low(P_SCL, B_SCL); - if (VL & 0x08) - sbi(P_SDA, B_SDA); - else - cbi(P_SDA, B_SDA); - pulse_low(P_SCL, B_SCL); - if (VL & 0x04) - sbi(P_SDA, B_SDA); - else - cbi(P_SDA, B_SDA); - pulse_low(P_SCL, B_SCL); - if (VL & 0x02) - sbi(P_SDA, B_SDA); - else - cbi(P_SDA, B_SDA); - pulse_low(P_SCL, B_SCL); - if (VL & 0x01) - sbi(P_SDA, B_SDA); - else - cbi(P_SDA, B_SDA); - pulse_low(P_SCL, B_SCL); - break; - case 8: - *(volatile uint8_t *)(&GPIOD_PDOR) = VH; - pulse_low(P_WR, B_WR); - *(volatile uint8_t *)(&GPIOD_PDOR) = VL; - pulse_low(P_WR, B_WR); - break; - case 16: - *(volatile uint8_t *)(&GPIOD_PDOR) = VH; - GPIOB_PCOR = 0x000F000F; // clear data lines B0-3,B16-19 - GPIOB_PSOR = (0x0F & VL) | ((VL >> 4) << 16); // set data lines 0-3,16-19 if set in cl - pulse_low(P_WR, B_WR); - break; - } -} - -void UTFT::_set_direction_registers(byte mode) -{ - GPIOD_PDDR |= 0xFF; - PORTD_PCR0 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); - PORTD_PCR1 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); - PORTD_PCR2 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); - PORTD_PCR3 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); - PORTD_PCR4 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); - PORTD_PCR5 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); - PORTD_PCR6 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); - PORTD_PCR7 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); - - if (mode == 16) - { - GPIOB_PDDR |= 0x000F000F; - PORTB_PCR0 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); - PORTB_PCR1 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); - PORTB_PCR2 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); - PORTB_PCR3 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); - PORTB_PCR16 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); - PORTB_PCR17 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); - PORTB_PCR18 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); - PORTB_PCR19 = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); - } -} -void UTFT::_fast_fill_16(int ch, int cl, long pix) -{ - long blocks; - - *(volatile uint8_t *)(&GPIOD_PDOR) = ch; - GPIOB_PCOR = 0x000F000F; // clear data lines B0-3,B16-19 - GPIOB_PSOR = (0x0F & cl) | ((cl >> 4) << 16); // set data lines 0-3,16-19 if set in cl - - blocks = pix/16; - for (int i=0; i>3) | ((VH & 0x80)>>1); - pulse_low(P_WR, B_WR); - - REG_PIOA_CODR=0x0000C000; - REG_PIOD_CODR=0x0000064F; - REG_PIOA_SODR=(VL & 0x06)<<13; - (VL & 0x01) ? REG_PIOB_SODR = 0x4000000 : REG_PIOB_CODR = 0x4000000; - REG_PIOD_SODR=((VL & 0x78)>>3) | ((VL & 0x80)>>1); - pulse_low(P_WR, B_WR); -#endif - break; - case 16: -#if defined(CTE_DUE_SHIELD) - REG_PIOC_CODR=0xFF1FE; - REG_PIOC_SODR=(VL<<1) & 0x1FE; - REG_PIOC_SODR=(VH<<12) & 0xFF000; -#elif defined(EHOUSE_DUE_SHIELD) - PIOC->PIO_ODSR = ((PIOC->PIO_ODSR&(~0x000FF3FC)) | ((((uint32_t)VL)<<2) | (((uint32_t)VH)<<12))); -#else - REG_PIOA_CODR=0x0000C080; - REG_PIOC_CODR=0x0000003E; - REG_PIOD_CODR=0x0000064F; - REG_PIOA_SODR=((VH & 0x06)<<13) | ((VL & 0x40)<<1); - (VH & 0x01) ? REG_PIOB_SODR = 0x4000000 : REG_PIOB_CODR = 0x4000000; - REG_PIOC_SODR=((VL & 0x01)<<5) | ((VL & 0x02)<<3) | ((VL & 0x04)<<1) | ((VL & 0x08)>>1) | ((VL & 0x10)>>3); - REG_PIOD_SODR=((VH & 0x78)>>3) | ((VH & 0x80)>>1) | ((VL & 0x20)<<5) | ((VL & 0x80)<<2); -#endif - pulse_low(P_WR, B_WR); - break; - case LATCHED_16: - asm("nop"); // Mode is unsupported - break; - } -} - -void UTFT::_set_direction_registers(byte mode) -{ - if (mode!=LATCHED_16) - { -#if defined(CTE_DUE_SHIELD) - if (mode==16) - { - REG_PIOC_OER=0x000FF1FE; - } - else - REG_PIOC_OER=0x000FF000; -#elif defined(EHOUSE_DUE_SHIELD) - if (mode==16) - { - REG_PIOC_OER=0x000FF3FC; - REG_PIOC_OWER=0x000FF3FC; - } - else - REG_PIOC_OER=0x000FF000; -#else - REG_PIOA_OER=0x0000c000; //PA14,PA15 enable - REG_PIOB_OER=0x04000000; //PB26 enable - REG_PIOD_OER=0x0000064f; //PD0-3,PD6,PD9-10 enable - if (mode==16) - { - REG_PIOA_OER=0x00000080; //PA7 enable - REG_PIOC_OER=0x0000003e; //PC1 - PC5 enable - } -#endif - } - else - { - asm("nop"); // Mode is unsupported - } -} - -void UTFT::_fast_fill_16(int ch, int cl, long pix) -{ - long blocks; - -#if defined(CTE_DUE_SHIELD) - REG_PIOC_CODR=0xFF1FE; - REG_PIOC_SODR=(cl<<1) & 0x1FE; - REG_PIOC_SODR=(ch<<12) & 0xFF000; -#elif defined(EHOUSE_DUE_SHIELD) - PIOC->PIO_ODSR = ((PIOC->PIO_ODSR&(~0x000FF3FC)) | ((((uint32_t)cl)<<2) | (((uint32_t)ch)<<12))); -#else - REG_PIOA_CODR=0x0000C080; - REG_PIOC_CODR=0x0000003E; - REG_PIOD_CODR=0x0000064F; - REG_PIOA_SODR=((ch & 0x06)<<13) | ((cl & 0x40)<<1); - (ch & 0x01) ? REG_PIOB_SODR = 0x4000000 : REG_PIOB_CODR = 0x4000000; - REG_PIOC_SODR=((cl & 0x01)<<5) | ((cl & 0x02)<<3) | ((cl & 0x04)<<1) | ((cl & 0x08)>>1) | ((cl & 0x10)>>3); - REG_PIOD_SODR=((ch & 0x78)>>3) | ((ch & 0x80)>>1) | ((cl & 0x20)<<5) | ((cl & 0x80)<<2); -#endif - - blocks = pix/16; - for (int i=0; i>3) | ((ch & 0x80)>>1); -#endif - - blocks = pix/16; - for (int i=0; i>3; - PORTE &= ~0x3B; - PORTE |= (VH & 0x03) + ((VH & 0x0C)<<2) + ((VH & 0x20)>>2); - pulse_low(P_WR, B_WR); - PORTG &= ~0x20; - PORTG |= (VL & 0x10)<<1; - PORTH &= ~0x18; - PORTH |= (VL & 0xC0)>>3; - PORTE &= ~0x3B; - PORTE |= (VL & 0x03) + ((VL & 0x0C)<<2) + ((VL & 0x20)>>2); - pulse_low(P_WR, B_WR); -#else - PORTA = VH; - pulse_low(P_WR, B_WR); - PORTA = VL; - pulse_low(P_WR, B_WR); -#endif - break; - case 16: - PORTA = VH; - PORTC = VL; - pulse_low(P_WR, B_WR); - break; - case LATCHED_16: - PORTG &= ~0x20; - PORTG |= (VH & 0x10)<<1; - PORTH &= ~0x18; - PORTH |= (VH & 0xC0)>>3; - PORTE &= ~0x3B; - PORTE |= (VH & 0x03) + ((VH & 0x0C)<<2) + ((VH & 0x20)>>2); - cbi(P_ALE, B_ALE); - pulse_high(P_ALE, B_ALE); - cbi(P_CS, B_CS); - PORTG &= ~0x20; - PORTG |= (VL & 0x10)<<1; - PORTH &= ~0x18; - PORTH |= (VL & 0xC0)>>3; - PORTE &= ~0x3B; - PORTE |= (VL & 0x03) + ((VL & 0x0C)<<2) + ((VL & 0x20)>>2); - pulse_low(P_WR, B_WR); - sbi(P_CS, B_CS); - break; - } -} - -void UTFT::_set_direction_registers(byte mode) -{ -#if defined(USE_UNO_SHIELD_ON_MEGA) - DDRH = 0x18; - DDRG = 0x20; - DDRE = 0x3B; -#else - if (mode!=LATCHED_16) - { - DDRA = 0xFF; - if (mode==16) - DDRC = 0xFF; - } - else - { - DDRH = 0x18; - DDRG = 0x20; - DDRE = 0x3B; - } -#endif -} - -void UTFT::_fast_fill_16(int ch, int cl, long pix) -{ -#if defined(USE_UNO_SHIELD_ON_MEGA) - if (ch==cl) - _fast_fill_8(ch, pix); - else - { - for (int i=0; i>3; - PORTE &= ~0x3B; - PORTE |= (ch & 0x03) + ((ch & 0x0C)<<2) + ((ch & 0x20)>>2); - pulse_low(P_WR, B_WR); - PORTG &= ~0x20; - PORTG |= (cl & 0x10)<<1; - PORTH &= ~0x18; - PORTH |= (cl & 0xC0)>>3; - PORTE &= ~0x3B; - PORTE |= (cl & 0x03) + ((cl & 0x0C)<<2) + ((cl & 0x20)>>2); - pulse_low(P_WR, B_WR); - } - } -#else - long blocks; - - PORTA = ch; - PORTC = cl; - - blocks = pix/16; - for (int i=0; i>3; - PORTE &= ~0x3B; - PORTE |= (ch & 0x03) + ((ch & 0x0C)<<2) + ((ch & 0x20)>>2); -#else - PORTA = ch; -#endif - - blocks = pix/16; - for (int i=0; i>4); - pulse_low(P_WR, B_WR); - cport (PORTD, 0xF0); - sport (PORTD, (VL & 0x0F)); - cport (PORTB, 0xF0); - sport (PORTB, (VL & 0xF0)>>4); - pulse_low(P_WR, B_WR); - break; - case 16: - cport (PORTD, 0x90); - sport (PORTD, (VH & 0x0F) | ((VL & 0x03)<<5)); - PORTB = ((VH & 0xF0)>>4) | ((VL & 0x3C)<<2); - cport (PORTA, 0x3F); - sport (PORTA, ((VL & 0x40)<<1) | ((VL & 0x80)>>1)); - pulse_low(P_WR, B_WR); - break; - case LATCHED_16: - cport (PORTD, 0xF0); - sport (PORTD, (VH & 0x0F)); - cport (PORTB, 0xF0); - sport (PORTB, (VH & 0xF0)>>4); - cbi(P_ALE, B_ALE); - pulse_high(P_ALE, B_ALE); - cbi(P_CS, B_CS); - cport (PORTD, 0xF0); - sport (PORTD, (VL & 0x0F)); - cport (PORTB, 0xF0); - sport (PORTB, (VL & 0xF0)>>4); - pulse_low(P_WR, B_WR); - sbi(P_CS, B_CS); - break; - } -} - -void UTFT::_set_direction_registers(byte mode) -{ - DDRB |= 0x0F; - DDRD |= 0x0F; - if (mode==16) - { - DDRB = 0xFF; - DDRD |= 0x6F; - DDRA |= 0xC0; - } - -} - -void UTFT::_fast_fill_16(int ch, int cl, long pix) -{ - long blocks; - - cport (PORTD, 0x90); - sport (PORTD, (ch & 0x0F) | ((cl & 0x03)<<5)); - PORTB = ((ch & 0xF0)>>4) | ((cl & 0x3C)<<2); - cport (PORTA, 0x3F); - sport (PORTA, ((cl & 0x40)<<1) | ((cl & 0x80)>>1)); - - blocks = pix/16; - for (int i=0; i>4); - - blocks = pix/16; - for (int i=0; i>6) & 0x03); - PORTB = VL & 0x3F; - pulse_low(P_WR, B_WR); - break; - case LATCHED_16: - PORTD = VH; - cbi(P_ALE, B_ALE); - pulse_high(P_ALE, B_ALE); - cbi(P_CS, B_CS); - PORTD = VL; - pulse_low(P_WR, B_WR); - sbi(P_CS, B_CS); - break; - } -} - -void UTFT::_set_direction_registers(byte mode) -{ - DDRD = 0xFF; - if (mode==16) - { - DDRB |= 0x3F; - DDRC |= 0x03; - } - -} - -void UTFT::_fast_fill_16(int ch, int cl, long pix) -{ - long blocks; - - PORTD = ch; - cport(PORTC, 0xFC); - sport(PORTC, (cl>>6) & 0x03); - PORTB = cl & 0x3F; - - blocks = pix/16; - for (int i=0; i>3) + ((VH & 0x04)>>1) + ((VH & 0x03)<<2); - PORTE += ((VH & 0x80)>>1); - pulse_low(P_WR, B_WR); - - cport(PORTC, 0xBF); - cport(PORTD, 0x60); - cport(PORTE, 0xBF); - PORTC += ((VL & 0x20)<<1); - PORTD += ((VL & 0x40)<<1) + (VL & 0x10) + ((VL & 0x08)>>3) + ((VL & 0x04)>>1) + ((VL & 0x03)<<2); - PORTE += ((VL & 0x80)>>1); - pulse_low(P_WR, B_WR); - break; - case 16: - cport(PORTB, 0x0F); - cport(PORTC, 0x3F); - cport(PORTD, 0x20); - cport(PORTE, 0xBF); - cport(PORTF, 0x3F); - - PORTB |= ((VL & 0x0F)<<4); - PORTC |= ((VL & 0x20)<<2) + ((VH & 0x20)<<1); - PORTD |= ((VH & 0x40)<<1) + (VH & 0x10) + ((VH & 0x08)>>3) + ((VH & 0x04)>>1) + ((VH & 0x03)<<2) + ((VL & 0x10)<<2); - PORTE |= ((VH & 0x80)>>1); - PORTF |= ((VL & 0x80)>>1) + ((VL & 0x40)<<1); - - pulse_low(P_WR, B_WR); - break; - case LATCHED_16: - cport(PORTC, 0xBF); - cport(PORTD, 0x60); - cport(PORTE, 0xBF); - PORTC += ((VH & 0x20)<<1); - PORTD += ((VH & 0x40)<<1) + (VH & 0x10) + ((VH & 0x08)>>3) + ((VH & 0x04)>>1) + ((VH & 0x03)<<2); - PORTE += ((VH & 0x80)>>1); - cbi(P_ALE, B_ALE); - pulse_high(P_ALE, B_ALE); - cbi(P_CS, B_CS); - cport(PORTC, 0xBF); - cport(PORTD, 0x60); - cport(PORTE, 0xBF); - PORTC += ((VL & 0x20)<<1); - PORTD += ((VL & 0x40)<<1) + (VL & 0x10) + ((VL & 0x08)>>3) + ((VL & 0x04)>>1) + ((VL & 0x03)<<2); - PORTE += ((VL & 0x80)>>1); - pulse_low(P_WR, B_WR); - sbi(P_CS, B_CS); - break; - } -} - -void UTFT::_set_direction_registers(byte mode) -{ - switch (mode) - { - case 8: - case LATCHED_16: - DDRC |= 0x40; - DDRD |= 0x9F; - DDRE |= 0x40; - break; - case 16: - DDRB |= 0xF0; - DDRC |= 0xC0; - DDRD |= 0xDF; - DDRE |= 0x40; - DDRF |= 0xC0; - break; - } -} - -void UTFT::_fast_fill_16(int ch, int cl, long pix) -{ - long blocks; - - cport(PORTB, 0x0F); - cport(PORTC, 0x3F); - cport(PORTD, 0x20); - cport(PORTE, 0xBF); - cport(PORTF, 0x3F); - - PORTB |= ((cl & 0x0F)<<4); - PORTC |= ((cl & 0x20)<<2) + ((ch & 0x20)<<1); - PORTD |= ((ch & 0x40)<<1) + (ch & 0x10) + ((ch & 0x08)>>3) + ((ch & 0x04)>>1) + ((ch & 0x03)<<2) + ((cl & 0x10)<<2); - PORTE |= ((ch & 0x80)>>1); - PORTF |= ((cl & 0x80)>>1) + ((cl & 0x40)<<1); - - blocks = pix/16; - for (int i=0; i>3) + ((ch & 0x04)>>1) + ((ch & 0x03)<<2); - PORTE |= ((ch & 0x80)>>1); - - blocks = pix/16; - for (int i=0; i>8); - LCD_Write_DATA(x1); - LCD_Write_DATA(x2>>8); - LCD_Write_DATA(x2); - LCD_Write_COM(0x2b); - LCD_Write_DATA(y1>>8); - LCD_Write_DATA(y1); - LCD_Write_DATA(y2>>8); - LCD_Write_DATA(y2); - LCD_Write_COM(0x2c); - break; diff --git a/libraries/UTFT/tft_drivers/hx8347a/initlcd.h b/libraries/UTFT/tft_drivers/hx8347a/initlcd.h deleted file mode 100644 index 76bf08e..0000000 --- a/libraries/UTFT/tft_drivers/hx8347a/initlcd.h +++ /dev/null @@ -1,88 +0,0 @@ -case HX8347A: - LCD_Write_COM_DATA(0x46,0x00A4); - LCD_Write_COM_DATA(0x47,0x0053); - LCD_Write_COM_DATA(0x48,0x0000); - LCD_Write_COM_DATA(0x49,0x0044); - LCD_Write_COM_DATA(0x4a,0x0004); - LCD_Write_COM_DATA(0x4b,0x0067); - LCD_Write_COM_DATA(0x4c,0x0033); - LCD_Write_COM_DATA(0x4d,0x0077); - LCD_Write_COM_DATA(0x4e,0x0012); - LCD_Write_COM_DATA(0x4f,0x004C); - LCD_Write_COM_DATA(0x50,0x0046); - LCD_Write_COM_DATA(0x51,0x0044); - - //240x320 window setting - LCD_Write_COM_DATA(0x02,0x0000); // Column address start2 - LCD_Write_COM_DATA(0x03,0x0000); // Column address start1 - LCD_Write_COM_DATA(0x04,0x0000); // Column address end2 - LCD_Write_COM_DATA(0x05,0x00ef); // Column address end1 - LCD_Write_COM_DATA(0x06,0x0000); // Row address start2 - LCD_Write_COM_DATA(0x07,0x0000); // Row address start1 - LCD_Write_COM_DATA(0x08,0x0001); // Row address end2 - LCD_Write_COM_DATA(0x09,0x003f); // Row address end1 - - // Display Setting - LCD_Write_COM_DATA(0x01,0x0006); // IDMON=0, INVON=1, NORON=1, PTLON=0 - LCD_Write_COM_DATA(0x16,0x00C8); // MY=0, MX=0, MV=0, ML=1, BGR=0, TEON=0 0048 - LCD_Write_COM_DATA(0x23,0x0095); // N_DC=1001 0101 - LCD_Write_COM_DATA(0x24,0x0095); // PI_DC=1001 0101 - LCD_Write_COM_DATA(0x25,0x00FF); // I_DC=1111 1111 - - LCD_Write_COM_DATA(0x27,0x0002); // N_BP=0000 0010 - LCD_Write_COM_DATA(0x28,0x0002); // N_FP=0000 0010 - LCD_Write_COM_DATA(0x29,0x0002); // PI_BP=0000 0010 - LCD_Write_COM_DATA(0x2a,0x0002); // PI_FP=0000 0010 - LCD_Write_COM_DATA(0x2C,0x0002); // I_BP=0000 0010 - LCD_Write_COM_DATA(0x2d,0x0002); // I_FP=0000 0010 - - LCD_Write_COM_DATA(0x3a,0x0001); // N_RTN=0000, N_NW=001 0001 - LCD_Write_COM_DATA(0x3b,0x0000); // P_RTN=0000, P_NW=001 - LCD_Write_COM_DATA(0x3c,0x00f0); // I_RTN=1111, I_NW=000 - LCD_Write_COM_DATA(0x3d,0x0000); // DIV=00 - delay(1); - LCD_Write_COM_DATA(0x35,0x0038); // EQS=38h - LCD_Write_COM_DATA(0x36,0x0078); // EQP=78h - LCD_Write_COM_DATA(0x3E,0x0038); // SON=38h - LCD_Write_COM_DATA(0x40,0x000F); // GDON=0Fh - LCD_Write_COM_DATA(0x41,0x00F0); // GDOFF - - // Power Supply Setting - LCD_Write_COM_DATA(0x19,0x0049); // CADJ=0100, CUADJ=100, OSD_EN=1 ,60Hz - LCD_Write_COM_DATA(0x93,0x000F); // RADJ=1111, 100% - delay(1); - LCD_Write_COM_DATA(0x20,0x0040); // BT=0100 - LCD_Write_COM_DATA(0x1D,0x0007); // VC1=111 0007 - LCD_Write_COM_DATA(0x1E,0x0000); // VC3=000 - LCD_Write_COM_DATA(0x1F,0x0004); // VRH=0011 - - //VCOM SETTING - LCD_Write_COM_DATA(0x44,0x004D); // VCM=101 0000 4D - LCD_Write_COM_DATA(0x45,0x000E); // VDV=1 0001 0011 - delay(1); - LCD_Write_COM_DATA(0x1C,0x0004); // AP=100 - delay(2); - - LCD_Write_COM_DATA(0x1B,0x0018); // GASENB=0, PON=0, DK=1, XDK=0, VLCD_TRI=0, STB=0 - delay(1); - LCD_Write_COM_DATA(0x1B,0x0010); // GASENB=0, PON=1, DK=0, XDK=0, VLCD_TRI=0, STB=0 - delay(1); - LCD_Write_COM_DATA(0x43,0x0080); //set VCOMG=1 - delay(2); - - // Display ON Setting - LCD_Write_COM_DATA(0x90,0x007F); // SAP=0111 1111 - LCD_Write_COM_DATA(0x26,0x0004); //GON=0, DTE=0, D=01 - delay(1); - LCD_Write_COM_DATA(0x26,0x0024); //GON=1, DTE=0, D=01 - LCD_Write_COM_DATA(0x26,0x002C); //GON=1, DTE=0, D=11 - delay(1); - LCD_Write_COM_DATA(0x26,0x003C); //GON=1, DTE=1, D=11 - - // INTERNAL REGISTER SETTING - LCD_Write_COM_DATA(0x57,0x0002); // TEST_Mode=1: into TEST mode - LCD_Write_COM_DATA(0x95,0x0001); // SET DISPLAY CLOCK AND PUMPING CLOCK TO SYNCHRONIZE - LCD_Write_COM_DATA(0x57,0x0000); // TEST_Mode=0: exit TEST mode - //LCD_Write_COM_DATA(0x21,0x0000); - LCD_Write_COM(0x22); - break; diff --git a/libraries/UTFT/tft_drivers/hx8347a/setxy.h b/libraries/UTFT/tft_drivers/hx8347a/setxy.h deleted file mode 100644 index bf82d6b..0000000 --- a/libraries/UTFT/tft_drivers/hx8347a/setxy.h +++ /dev/null @@ -1,11 +0,0 @@ -case HX8347A: - LCD_Write_COM_DATA(0x02,x1>>8); - LCD_Write_COM_DATA(0x03,x1); - LCD_Write_COM_DATA(0x04,x2>>8); - LCD_Write_COM_DATA(0x05,x2); - LCD_Write_COM_DATA(0x06,y1>>8); - LCD_Write_COM_DATA(0x07,y1); - LCD_Write_COM_DATA(0x08,y2>>8); - LCD_Write_COM_DATA(0x09,y2); - LCD_Write_COM(0x22); - break; diff --git a/libraries/UTFT/tft_drivers/hx8352a/initlcd.h b/libraries/UTFT/tft_drivers/hx8352a/initlcd.h deleted file mode 100644 index 5645bbe..0000000 --- a/libraries/UTFT/tft_drivers/hx8352a/initlcd.h +++ /dev/null @@ -1,131 +0,0 @@ -case HX8352A: - LCD_Write_COM(0x83); - LCD_Write_DATA(0x02); //TESTM=1 - - LCD_Write_COM(0x85); - LCD_Write_DATA(0x03); //VDC_SEL=011 - LCD_Write_COM(0x8B); - LCD_Write_DATA(0x01); - LCD_Write_COM(0x8C); - LCD_Write_DATA(0x93); //STBA[7]=1,STBA[5:4]=01,STBA[1:0]=11 - - LCD_Write_COM(0x91); - LCD_Write_DATA(0x01); //DCDC_SYNC=1 - - LCD_Write_COM(0x83); - LCD_Write_DATA(0x00); //TESTM=0 - //Gamma Setting - - LCD_Write_COM(0x3E); - LCD_Write_DATA(0xB0); - LCD_Write_COM(0x3F); - LCD_Write_DATA(0x03); - LCD_Write_COM(0x40); - LCD_Write_DATA(0x10); - LCD_Write_COM(0x41); - LCD_Write_DATA(0x56); - LCD_Write_COM(0x42); - LCD_Write_DATA(0x13); - LCD_Write_COM(0x43); - LCD_Write_DATA(0x46); - LCD_Write_COM(0x44); - LCD_Write_DATA(0x23); - LCD_Write_COM(0x45); - LCD_Write_DATA(0x76); - LCD_Write_COM(0x46); - LCD_Write_DATA(0x00); - LCD_Write_COM(0x47); - LCD_Write_DATA(0x5E); - LCD_Write_COM(0x48); - LCD_Write_DATA(0x4F); - LCD_Write_COM(0x49); - LCD_Write_DATA(0x40); - //**********Power On sequence************ - - LCD_Write_COM(0x17); - LCD_Write_DATA(0x91); - - LCD_Write_COM(0x2B); - LCD_Write_DATA(0xF9); - delay(10); - - LCD_Write_COM(0x1B); - LCD_Write_DATA(0x14); - - LCD_Write_COM(0x1A); - LCD_Write_DATA(0x11); - - LCD_Write_COM(0x1C); - LCD_Write_DATA(0x06); - - LCD_Write_COM(0x1F); - LCD_Write_DATA(0x42); - delay(20); - - LCD_Write_COM(0x19); - LCD_Write_DATA(0x0A); - - LCD_Write_COM(0x19); - LCD_Write_DATA(0x1A); - delay(40); - - - LCD_Write_COM(0x19); - LCD_Write_DATA(0x12); - delay(40); - - LCD_Write_COM(0x1E); - LCD_Write_DATA(0x27); - delay(100); - - - //**********DISPLAY ON SETTING*********** - - LCD_Write_COM(0x24); - LCD_Write_DATA(0x60); - - LCD_Write_COM(0x3D); - LCD_Write_DATA(0x40); - - LCD_Write_COM(0x34); - LCD_Write_DATA(0x38); - - LCD_Write_COM(0x35); - LCD_Write_DATA(0x38); - - LCD_Write_COM(0x24); - LCD_Write_DATA(0x38); - delay(40); - - LCD_Write_COM(0x24); - LCD_Write_DATA(0x3C); - - LCD_Write_COM(0x16); - LCD_Write_DATA(0x1C); - - LCD_Write_COM(0x01); - LCD_Write_DATA(0x06); - - LCD_Write_COM(0x55); - LCD_Write_DATA(0x00); - - LCD_Write_COM(0x02); - LCD_Write_DATA(0x00); - LCD_Write_COM(0x03); - LCD_Write_DATA(0x00); - LCD_Write_COM(0x04); - LCD_Write_DATA(0x00); - LCD_Write_COM(0x05); - LCD_Write_DATA(0xef); - - LCD_Write_COM(0x06); - LCD_Write_DATA(0x00); - LCD_Write_COM(0x07); - LCD_Write_DATA(0x00); - LCD_Write_COM(0x08); - LCD_Write_DATA(0x01); - LCD_Write_COM(0x09); - LCD_Write_DATA(0x8f); - - LCD_Write_COM(0x22); - break; diff --git a/libraries/UTFT/tft_drivers/hx8352a/setxy.h b/libraries/UTFT/tft_drivers/hx8352a/setxy.h deleted file mode 100644 index 225fe65..0000000 --- a/libraries/UTFT/tft_drivers/hx8352a/setxy.h +++ /dev/null @@ -1,11 +0,0 @@ -case HX8352A: - LCD_Write_COM_DATA(0x02,x1>>8); - LCD_Write_COM_DATA(0x03,x1); - LCD_Write_COM_DATA(0x04,x2>>8); - LCD_Write_COM_DATA(0x05,x2); - LCD_Write_COM_DATA(0x06,y1>>8); - LCD_Write_COM_DATA(0x07,y1); - LCD_Write_COM_DATA(0x08,y2>>8); - LCD_Write_COM_DATA(0x09,y2); - LCD_Write_COM(0x22); - break; diff --git a/libraries/UTFT/tft_drivers/hx8353c/initlcd.h b/libraries/UTFT/tft_drivers/hx8353c/initlcd.h deleted file mode 100644 index 70b6f29..0000000 --- a/libraries/UTFT/tft_drivers/hx8353c/initlcd.h +++ /dev/null @@ -1,69 +0,0 @@ -case HX8353C: - LCD_Write_COM(0xB9);//SETEXTC - LCD_Write_DATA(0xFF); - LCD_Write_DATA(0x83); - LCD_Write_DATA(0x53); - - LCD_Write_COM(0xB0);//RADJ - LCD_Write_DATA(0x3C); - LCD_Write_DATA(0x01); - - LCD_Write_COM(0xB6);//VCOM - LCD_Write_DATA(0x94); - LCD_Write_DATA(0x6C); - LCD_Write_DATA(0x50); - - LCD_Write_COM(0xB1);//PWR - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x01); - LCD_Write_DATA(0x1B); - LCD_Write_DATA(0x03); - LCD_Write_DATA(0x01); - LCD_Write_DATA(0x08); - LCD_Write_DATA(0x77); - LCD_Write_DATA(0x89); - - LCD_Write_COM(0xE0); //Gamma setting for tpo Panel - LCD_Write_DATA(0x50); - LCD_Write_DATA(0x77); - LCD_Write_DATA(0x40); - LCD_Write_DATA(0x08); - LCD_Write_DATA(0xBF); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x03); - LCD_Write_DATA(0x0F); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x01); - LCD_Write_DATA(0x73); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x72); - LCD_Write_DATA(0x03); - LCD_Write_DATA(0xB0); - LCD_Write_DATA(0x0F); - LCD_Write_DATA(0x08); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x0F); - - LCD_Write_COM(0x3A); - LCD_Write_DATA(0x05); //05 - LCD_Write_COM(0x36); - LCD_Write_DATA(0xC0); //83 //0B - - LCD_Write_COM(0x11); // SLPOUT - delay(150); - - LCD_Write_COM(0x29); // display on - - delay(150); - LCD_Write_COM(0x2D); //Look up table - - for(int j=0;j<32;j++) - { LCD_Write_DATA(2*j); } //Red - for(int j=0;j<64;j++) - { LCD_Write_DATA(1*j); } //Green - for(int j=0;j<32;j++) - { LCD_Write_DATA(2*j); } //Blue - - LCD_Write_COM(0x2c); - delay(150); - break; diff --git a/libraries/UTFT/tft_drivers/hx8353c/setxy.h b/libraries/UTFT/tft_drivers/hx8353c/setxy.h deleted file mode 100644 index a654657..0000000 --- a/libraries/UTFT/tft_drivers/hx8353c/setxy.h +++ /dev/null @@ -1,13 +0,0 @@ -case HX8353C: - LCD_Write_COM(0x2a); - LCD_Write_DATA(x1>>8); - LCD_Write_DATA(x1); - LCD_Write_DATA(x2>>8); - LCD_Write_DATA(x2); - LCD_Write_COM(0x2b); - LCD_Write_DATA(y1>>8); - LCD_Write_DATA(y1); - LCD_Write_DATA(y2>>8); - LCD_Write_DATA(y2); - LCD_Write_COM(0x2c); - break; diff --git a/libraries/UTFT/tft_drivers/ili9320/initlcd.h b/libraries/UTFT/tft_drivers/ili9320/initlcd.h deleted file mode 100644 index a49f118..0000000 --- a/libraries/UTFT/tft_drivers/ili9320/initlcd.h +++ /dev/null @@ -1,67 +0,0 @@ -case ILI9320_8: -case ILI9320_16: - LCD_Write_COM_DATA(0xe5, 0x8000); - LCD_Write_COM_DATA(0x00, 0x0001); - LCD_Write_COM_DATA(0x01, 0x0100); - LCD_Write_COM_DATA(0x02, 0x0700); - LCD_Write_COM_DATA(0x03, 0x1030); - LCD_Write_COM_DATA(0x04, 0x0000); - LCD_Write_COM_DATA(0x08, 0x0202); - LCD_Write_COM_DATA(0x09, 0x0000); - LCD_Write_COM_DATA(0x0A, 0x0000); - LCD_Write_COM_DATA(0x0C, 0x0000); - LCD_Write_COM_DATA(0x0D, 0x0000); - LCD_Write_COM_DATA(0x0F, 0x0000); - //-----Power On sequence----------------------- - LCD_Write_COM_DATA(0x10, 0x0000); - LCD_Write_COM_DATA(0x11, 0x0007); - LCD_Write_COM_DATA(0x12, 0x0000); - LCD_Write_COM_DATA(0x13, 0x0000); - delay(50); - LCD_Write_COM_DATA(0x10, 0x17B0); - LCD_Write_COM_DATA(0x11, 0x0007); - delay(10); - LCD_Write_COM_DATA(0x12, 0x013A); - delay(10); - LCD_Write_COM_DATA(0x13, 0x1A00); - LCD_Write_COM_DATA(0x29, 0x000c); - delay(10); - //-----Gamma control----------------------- - LCD_Write_COM_DATA(0x30, 0x0000); - LCD_Write_COM_DATA(0x31, 0x0505); - LCD_Write_COM_DATA(0x32, 0x0004); - LCD_Write_COM_DATA(0x35, 0x0006); - LCD_Write_COM_DATA(0x36, 0x0707); - LCD_Write_COM_DATA(0x37, 0x0105); - LCD_Write_COM_DATA(0x38, 0x0002); - LCD_Write_COM_DATA(0x39, 0x0707); - LCD_Write_COM_DATA(0x3C, 0x0704); - LCD_Write_COM_DATA(0x3D, 0x0807); - //-----Set RAM area----------------------- - LCD_Write_COM_DATA(0x50, 0x0000); - LCD_Write_COM_DATA(0x51, 0x00EF); - LCD_Write_COM_DATA(0x52, 0x0000); - LCD_Write_COM_DATA(0x53, 0x013F); - LCD_Write_COM_DATA(0x60, 0x2700); - LCD_Write_COM_DATA(0x61, 0x0001); - LCD_Write_COM_DATA(0x6A, 0x0000); - LCD_Write_COM_DATA(0x21, 0x0000); - LCD_Write_COM_DATA(0x20, 0x0000); - //-----Partial Display Control------------ - LCD_Write_COM_DATA(0x80, 0x0000); - LCD_Write_COM_DATA(0x81, 0x0000); - LCD_Write_COM_DATA(0x82, 0x0000); - LCD_Write_COM_DATA(0x83, 0x0000); - LCD_Write_COM_DATA(0x84, 0x0000); - LCD_Write_COM_DATA(0x85, 0x0000); - //-----Panel Control---------------------- - LCD_Write_COM_DATA(0x90, 0x0010); - LCD_Write_COM_DATA(0x92, 0x0000); - LCD_Write_COM_DATA(0x93, 0x0003); - LCD_Write_COM_DATA(0x95, 0x0110); - LCD_Write_COM_DATA(0x97, 0x0000); - LCD_Write_COM_DATA(0x98, 0x0000); - //-----Display on----------------------- - LCD_Write_COM_DATA(0x07, 0x0173); - delay(50); - break; diff --git a/libraries/UTFT/tft_drivers/ili9320/setxy.h b/libraries/UTFT/tft_drivers/ili9320/setxy.h deleted file mode 100644 index d54564f..0000000 --- a/libraries/UTFT/tft_drivers/ili9320/setxy.h +++ /dev/null @@ -1,10 +0,0 @@ -case ILI9320_8: -case ILI9320_16: - LCD_Write_COM_DATA(0x20,x1); - LCD_Write_COM_DATA(0x21,y1); - LCD_Write_COM_DATA(0x50,x1); - LCD_Write_COM_DATA(0x52,y1); - LCD_Write_COM_DATA(0x51,x2); - LCD_Write_COM_DATA(0x53,y2); - LCD_Write_COM(0x22); - break; diff --git a/libraries/UTFT/tft_drivers/ili9325c/initlcd.h b/libraries/UTFT/tft_drivers/ili9325c/initlcd.h deleted file mode 100644 index 23fba46..0000000 --- a/libraries/UTFT/tft_drivers/ili9325c/initlcd.h +++ /dev/null @@ -1,61 +0,0 @@ -case ILI9325C: - LCD_Write_COM_DATA(0xE5, 0x78F0); // set SRAM internal timing - LCD_Write_COM_DATA(0x01, 0x0100); // set Driver Output Control - LCD_Write_COM_DATA(0x02, 0x0700); // set 1 line inversion - LCD_Write_COM_DATA(0x03, 0x1030); // set GRAM write direction and BGR=1. - LCD_Write_COM_DATA(0x04, 0x0000); // Resize register - LCD_Write_COM_DATA(0x08, 0x0207); // set the back porch and front porch - LCD_Write_COM_DATA(0x09, 0x0000); // set non-display area refresh cycle ISC[3:0] - LCD_Write_COM_DATA(0x0A, 0x0000); // FMARK function - LCD_Write_COM_DATA(0x0C, 0x0000); // RGB interface setting - LCD_Write_COM_DATA(0x0D, 0x0000); // Frame marker Position - LCD_Write_COM_DATA(0x0F, 0x0000); // RGB interface polarity - //*************Power On sequence ****************// - LCD_Write_COM_DATA(0x10, 0x0000); // SAP, BT[3:0], AP, DSTB, SLP, STB - LCD_Write_COM_DATA(0x11, 0x0007); // DC1[2:0], DC0[2:0], VC[2:0] - LCD_Write_COM_DATA(0x12, 0x0000); // VREG1OUT voltage - LCD_Write_COM_DATA(0x13, 0x0000); // VDV[4:0] for VCOM amplitude - LCD_Write_COM_DATA(0x07, 0x0001); - delay(200); // Dis-charge capacitor power voltage - LCD_Write_COM_DATA(0x10, 0x1090); // SAP, BT[3:0], AP, DSTB, SLP, STB - LCD_Write_COM_DATA(0x11, 0x0227); // Set DC1[2:0], DC0[2:0], VC[2:0] - delay(50); // Delay 50ms - LCD_Write_COM_DATA(0x12, 0x001F); // 0012 - delay(50); // Delay 50ms - LCD_Write_COM_DATA(0x13, 0x1500); // VDV[4:0] for VCOM amplitude - LCD_Write_COM_DATA(0x29, 0x0027); // 04 VCM[5:0] for VCOMH - LCD_Write_COM_DATA(0x2B, 0x000D); // Set Frame Rate - delay(50); // Delay 50ms - LCD_Write_COM_DATA(0x20, 0x0000); // GRAM horizontal Address - LCD_Write_COM_DATA(0x21, 0x0000); // GRAM Vertical Address - // ----------- Adjust the Gamma Curve ----------// - LCD_Write_COM_DATA(0x30, 0x0000); - LCD_Write_COM_DATA(0x31, 0x0707); - LCD_Write_COM_DATA(0x32, 0x0307); - LCD_Write_COM_DATA(0x35, 0x0200); - LCD_Write_COM_DATA(0x36, 0x0008); - LCD_Write_COM_DATA(0x37, 0x0004); - LCD_Write_COM_DATA(0x38, 0x0000); - LCD_Write_COM_DATA(0x39, 0x0707); - LCD_Write_COM_DATA(0x3C, 0x0002); - LCD_Write_COM_DATA(0x3D, 0x1D04); - //------------------ Set GRAM area ---------------// - LCD_Write_COM_DATA(0x50, 0x0000); // Horizontal GRAM Start Address - LCD_Write_COM_DATA(0x51, 0x00EF); // Horizontal GRAM End Address - LCD_Write_COM_DATA(0x52, 0x0000); // Vertical GRAM Start Address - LCD_Write_COM_DATA(0x53, 0x013F); // Vertical GRAM Start Address - LCD_Write_COM_DATA(0x60, 0xA700); // Gate Scan Line - LCD_Write_COM_DATA(0x61, 0x0001); // NDL,VLE, REV - LCD_Write_COM_DATA(0x6A, 0x0000); // set scrolling line - //-------------- Partial Display Control ---------// - LCD_Write_COM_DATA(0x80, 0x0000); - LCD_Write_COM_DATA(0x81, 0x0000); - LCD_Write_COM_DATA(0x82, 0x0000); - LCD_Write_COM_DATA(0x83, 0x0000); - LCD_Write_COM_DATA(0x84, 0x0000); - LCD_Write_COM_DATA(0x85, 0x0000); - //-------------- Panel Control -------------------// - LCD_Write_COM_DATA(0x90, 0x0010); - LCD_Write_COM_DATA(0x92, 0x0600); - LCD_Write_COM_DATA(0x07, 0x0133); // 262K color and display ON - break; diff --git a/libraries/UTFT/tft_drivers/ili9325c/setxy.h b/libraries/UTFT/tft_drivers/ili9325c/setxy.h deleted file mode 100644 index 6e7428d..0000000 --- a/libraries/UTFT/tft_drivers/ili9325c/setxy.h +++ /dev/null @@ -1,9 +0,0 @@ -case ILI9325C: - LCD_Write_COM_DATA(0x20,x1); - LCD_Write_COM_DATA(0x21,y1); - LCD_Write_COM_DATA(0x50,x1); - LCD_Write_COM_DATA(0x52,y1); - LCD_Write_COM_DATA(0x51,x2); - LCD_Write_COM_DATA(0x53,y2); - LCD_Write_COM(0x22); - break; diff --git a/libraries/UTFT/tft_drivers/ili9325d/alt/initlcd.h b/libraries/UTFT/tft_drivers/ili9325d/alt/initlcd.h deleted file mode 100644 index fa52c8d..0000000 --- a/libraries/UTFT/tft_drivers/ili9325d/alt/initlcd.h +++ /dev/null @@ -1,61 +0,0 @@ -case ILI9325D_16ALT: - LCD_Write_COM_DATA(0xE5, 0x78F0); // set SRAM internal timing - LCD_Write_COM_DATA(0x01, 0x0100); // set Driver Output Control - LCD_Write_COM_DATA(0x02, 0x0700); // set 1 line inversion - LCD_Write_COM_DATA(0x03, 0x1030); // set GRAM write direction and BGR=1. - LCD_Write_COM_DATA(0x04, 0x0000); // Resize register - LCD_Write_COM_DATA(0x08, 0x0207); // set the back porch and front porch - LCD_Write_COM_DATA(0x09, 0x0000); // set non-display area refresh cycle ISC[3:0] - LCD_Write_COM_DATA(0x0A, 0x0000); // FMARK function - LCD_Write_COM_DATA(0x0C, 0x0000); // RGB interface setting - LCD_Write_COM_DATA(0x0D, 0x0000); // Frame marker Position - LCD_Write_COM_DATA(0x0F, 0x0000); // RGB interface polarity - //*************Power On sequence ****************// - LCD_Write_COM_DATA(0x10, 0x0000); // SAP, BT[3:0], AP, DSTB, SLP, STB - LCD_Write_COM_DATA(0x11, 0x0007); // DC1[2:0], DC0[2:0], VC[2:0] - LCD_Write_COM_DATA(0x12, 0x0000); // VREG1OUT voltage - LCD_Write_COM_DATA(0x13, 0x0000); // VDV[4:0] for VCOM amplitude - LCD_Write_COM_DATA(0x07, 0x0001); - delay(200); // Dis-charge capacitor power voltage - LCD_Write_COM_DATA(0x10, 0x1590); // SAP, BT[3:0], AP, DSTB, SLP, STB - LCD_Write_COM_DATA(0x11, 0x0227); // Set DC1[2:0], DC0[2:0], VC[2:0] - delay(50); // Delay 50ms - LCD_Write_COM_DATA(0x12, 0x009C); // 0012 - delay(50); // Delay 50ms - LCD_Write_COM_DATA(0x13, 0x1900); // VDV[4:0] for VCOM amplitude - LCD_Write_COM_DATA(0x29, 0x0023); // 04 VCM[5:0] for VCOMH - LCD_Write_COM_DATA(0x2B, 0x000E); // Set Frame Rate - delay(50); // Delay 50ms - LCD_Write_COM_DATA(0x20, 0x0000); // GRAM horizontal Address - LCD_Write_COM_DATA(0x21, 0x0000); // GRAM Vertical Address - // ----------- Adjust the Gamma Curve ----------// - LCD_Write_COM_DATA(0x30, 0x0000); - LCD_Write_COM_DATA(0x31, 0x0404); - LCD_Write_COM_DATA(0x32, 0x0003); - LCD_Write_COM_DATA(0x35, 0x0405); - LCD_Write_COM_DATA(0x36, 0x0808); - LCD_Write_COM_DATA(0x37, 0x0407); - LCD_Write_COM_DATA(0x38, 0x0303); - LCD_Write_COM_DATA(0x39, 0x0707); - LCD_Write_COM_DATA(0x3C, 0x0504); - LCD_Write_COM_DATA(0x3D, 0x0808); - //------------------ Set GRAM area ---------------// - LCD_Write_COM_DATA(0x50, 0x0000); // Horizontal GRAM Start Address - LCD_Write_COM_DATA(0x51, 0x00EF); // Horizontal GRAM End Address - LCD_Write_COM_DATA(0x52, 0x0000); // Vertical GRAM Start Address - LCD_Write_COM_DATA(0x53, 0x013F); // Vertical GRAM Start Address - LCD_Write_COM_DATA(0x60, 0xA700); // Gate Scan Line - LCD_Write_COM_DATA(0x61, 0x0001); // NDL,VLE, REV - LCD_Write_COM_DATA(0x6A, 0x0000); // set scrolling line - //-------------- Partial Display Control ---------// - LCD_Write_COM_DATA(0x80, 0x0000); - LCD_Write_COM_DATA(0x81, 0x0000); - LCD_Write_COM_DATA(0x82, 0x0000); - LCD_Write_COM_DATA(0x83, 0x0000); - LCD_Write_COM_DATA(0x84, 0x0000); - LCD_Write_COM_DATA(0x85, 0x0000); - //-------------- Panel Control -------------------// - LCD_Write_COM_DATA(0x90, 0x0010); - LCD_Write_COM_DATA(0x92, 0x0000); - LCD_Write_COM_DATA(0x07, 0x0133); // 262K color and display ON - break; diff --git a/libraries/UTFT/tft_drivers/ili9325d/alt/setxy.h b/libraries/UTFT/tft_drivers/ili9325d/alt/setxy.h deleted file mode 100644 index 95361e0..0000000 --- a/libraries/UTFT/tft_drivers/ili9325d/alt/setxy.h +++ /dev/null @@ -1,9 +0,0 @@ -case ILI9325D_16ALT: - LCD_Write_COM_DATA(0x20,x1); - LCD_Write_COM_DATA(0x21,y1); - LCD_Write_COM_DATA(0x50,x1); - LCD_Write_COM_DATA(0x52,y1); - LCD_Write_COM_DATA(0x51,x2); - LCD_Write_COM_DATA(0x53,y2); - LCD_Write_COM(0x22); - break; diff --git a/libraries/UTFT/tft_drivers/ili9325d/default/initlcd.h b/libraries/UTFT/tft_drivers/ili9325d/default/initlcd.h deleted file mode 100644 index 6ecb6e2..0000000 --- a/libraries/UTFT/tft_drivers/ili9325d/default/initlcd.h +++ /dev/null @@ -1,62 +0,0 @@ -case ILI9325D_8: -case ILI9325D_16: - LCD_Write_COM_DATA(0xE5, 0x78F0); // set SRAM internal timing - LCD_Write_COM_DATA(0x01, 0x0100); // set Driver Output Control - LCD_Write_COM_DATA(0x02, 0x0200); // set 1 line inversion - LCD_Write_COM_DATA(0x03, 0x1030); // set GRAM write direction and BGR=1. - LCD_Write_COM_DATA(0x04, 0x0000); // Resize register - LCD_Write_COM_DATA(0x08, 0x0207); // set the back porch and front porch - LCD_Write_COM_DATA(0x09, 0x0000); // set non-display area refresh cycle ISC[3:0] - LCD_Write_COM_DATA(0x0A, 0x0000); // FMARK function - LCD_Write_COM_DATA(0x0C, 0x0000); // RGB interface setting - LCD_Write_COM_DATA(0x0D, 0x0000); // Frame marker Position - LCD_Write_COM_DATA(0x0F, 0x0000); // RGB interface polarity - //*************Power On sequence ****************// - LCD_Write_COM_DATA(0x10, 0x0000); // SAP, BT[3:0], AP, DSTB, SLP, STB - LCD_Write_COM_DATA(0x11, 0x0007); // DC1[2:0], DC0[2:0], VC[2:0] - LCD_Write_COM_DATA(0x12, 0x0000); // VREG1OUT voltage - LCD_Write_COM_DATA(0x13, 0x0000); // VDV[4:0] for VCOM amplitude - LCD_Write_COM_DATA(0x07, 0x0001); - delay(200); // Dis-charge capacitor power voltage - LCD_Write_COM_DATA(0x10, 0x1690); // SAP, BT[3:0], AP, DSTB, SLP, STB - LCD_Write_COM_DATA(0x11, 0x0227); // Set DC1[2:0], DC0[2:0], VC[2:0] - delay(50); // Delay 50ms - LCD_Write_COM_DATA(0x12, 0x000D); // 0012 - delay(50); // Delay 50ms - LCD_Write_COM_DATA(0x13, 0x1200); // VDV[4:0] for VCOM amplitude - LCD_Write_COM_DATA(0x29, 0x000A); // 04 VCM[5:0] for VCOMH - LCD_Write_COM_DATA(0x2B, 0x000D); // Set Frame Rate - delay(50); // Delay 50ms - LCD_Write_COM_DATA(0x20, 0x0000); // GRAM horizontal Address - LCD_Write_COM_DATA(0x21, 0x0000); // GRAM Vertical Address - // ----------- Adjust the Gamma Curve ----------// - LCD_Write_COM_DATA(0x30, 0x0000); - LCD_Write_COM_DATA(0x31, 0x0404); - LCD_Write_COM_DATA(0x32, 0x0003); - LCD_Write_COM_DATA(0x35, 0x0405); - LCD_Write_COM_DATA(0x36, 0x0808); - LCD_Write_COM_DATA(0x37, 0x0407); - LCD_Write_COM_DATA(0x38, 0x0303); - LCD_Write_COM_DATA(0x39, 0x0707); - LCD_Write_COM_DATA(0x3C, 0x0504); - LCD_Write_COM_DATA(0x3D, 0x0808); - //------------------ Set GRAM area ---------------// - LCD_Write_COM_DATA(0x50, 0x0000); // Horizontal GRAM Start Address - LCD_Write_COM_DATA(0x51, 0x00EF); // Horizontal GRAM End Address - LCD_Write_COM_DATA(0x52, 0x0000); // Vertical GRAM Start Address - LCD_Write_COM_DATA(0x53, 0x013F); // Vertical GRAM Start Address - LCD_Write_COM_DATA(0x60, 0xA700); // Gate Scan Line - LCD_Write_COM_DATA(0x61, 0x0001); // NDL,VLE, REV - LCD_Write_COM_DATA(0x6A, 0x0000); // set scrolling line - //-------------- Partial Display Control ---------// - LCD_Write_COM_DATA(0x80, 0x0000); - LCD_Write_COM_DATA(0x81, 0x0000); - LCD_Write_COM_DATA(0x82, 0x0000); - LCD_Write_COM_DATA(0x83, 0x0000); - LCD_Write_COM_DATA(0x84, 0x0000); - LCD_Write_COM_DATA(0x85, 0x0000); - //-------------- Panel Control -------------------// - LCD_Write_COM_DATA(0x90, 0x0010); - LCD_Write_COM_DATA(0x92, 0x0000); - LCD_Write_COM_DATA(0x07, 0x0133); // 262K color and display ON - break; diff --git a/libraries/UTFT/tft_drivers/ili9325d/default/setxy.h b/libraries/UTFT/tft_drivers/ili9325d/default/setxy.h deleted file mode 100644 index f5fdd94..0000000 --- a/libraries/UTFT/tft_drivers/ili9325d/default/setxy.h +++ /dev/null @@ -1,10 +0,0 @@ -case ILI9325D_8: -case ILI9325D_16: - LCD_Write_COM_DATA(0x20,x1); - LCD_Write_COM_DATA(0x21,y1); - LCD_Write_COM_DATA(0x50,x1); - LCD_Write_COM_DATA(0x52,y1); - LCD_Write_COM_DATA(0x51,x2); - LCD_Write_COM_DATA(0x53,y2); - LCD_Write_COM(0x22); - break; diff --git a/libraries/UTFT/tft_drivers/ili9327/initlcd.h b/libraries/UTFT/tft_drivers/ili9327/initlcd.h deleted file mode 100644 index 451806b..0000000 --- a/libraries/UTFT/tft_drivers/ili9327/initlcd.h +++ /dev/null @@ -1,63 +0,0 @@ -case ILI9327: - LCD_Write_COM(0xE9); - LCD_Write_DATA(0x00,0x20); - LCD_Write_COM(0x11); //Exit Sleep - delay(100); - LCD_Write_COM(0xD1); - LCD_Write_DATA(0x00,0x00); - LCD_Write_DATA(0x00,0x71); - LCD_Write_DATA(0x00,0x19); - LCD_Write_COM(0xD0); - LCD_Write_DATA(0x00,0x07); - LCD_Write_DATA(0x00,0x01); - LCD_Write_DATA(0x00,0x08); - LCD_Write_COM(0x36); - LCD_Write_DATA(0x00,0x48); - LCD_Write_COM(0x3A); - LCD_Write_DATA(0x00,0x05); - LCD_Write_COM(0xC1); - LCD_Write_DATA(0x00,0x10); - LCD_Write_DATA(0x00,0x10); - LCD_Write_DATA(0x00,0x02); - LCD_Write_DATA(0x00,0x02); - LCD_Write_COM(0xC0); //Set Default Gamma - LCD_Write_DATA(0x00,0x00); - LCD_Write_DATA(0x00,0x35); - LCD_Write_DATA(0x00,0x00); - LCD_Write_DATA(0x00,0x00); - LCD_Write_DATA(0x00,0x01); - LCD_Write_DATA(0x00,0x02); - LCD_Write_COM(0xC5); //Set frame rate - LCD_Write_DATA(0x00,0x04); - LCD_Write_COM(0xD2); //power setting - LCD_Write_DATA(0x00,0x01); - LCD_Write_DATA(0x00,0x44); - LCD_Write_COM(0xC8); //Set Gamma - LCD_Write_DATA(0x00,0x04); - LCD_Write_DATA(0x00,0x67); - LCD_Write_DATA(0x00,0x35); - LCD_Write_DATA(0x00,0x04); - LCD_Write_DATA(0x00,0x08); - LCD_Write_DATA(0x00,0x06); - LCD_Write_DATA(0x00,0x24); - LCD_Write_DATA(0x00,0x01); - LCD_Write_DATA(0x00,0x37); - LCD_Write_DATA(0x00,0x40); - LCD_Write_DATA(0x00,0x03); - LCD_Write_DATA(0x00,0x10); - LCD_Write_DATA(0x00,0x08); - LCD_Write_DATA(0x00,0x80); - LCD_Write_DATA(0x00,0x00); - LCD_Write_COM(0x2A); - LCD_Write_DATA(0x00,0x00); - LCD_Write_DATA(0x00,0x00); - LCD_Write_DATA(0x00,0x00); - LCD_Write_DATA(0x00,0xeF); - LCD_Write_COM(0x2B); - LCD_Write_DATA(0x00,0x00); - LCD_Write_DATA(0x00,0x00); - LCD_Write_DATA(0x00,0x01); - LCD_Write_DATA(0x00,0x8F); - LCD_Write_COM(0x29); //display on - LCD_Write_COM(0x2C); //display on - break; diff --git a/libraries/UTFT/tft_drivers/ili9327/setxy.h b/libraries/UTFT/tft_drivers/ili9327/setxy.h deleted file mode 100644 index 6390c65..0000000 --- a/libraries/UTFT/tft_drivers/ili9327/setxy.h +++ /dev/null @@ -1,13 +0,0 @@ -case ILI9327: - LCD_Write_COM(0x2a); - LCD_Write_DATA(0x00,x1>>8); - LCD_Write_DATA(0x00,x1); - LCD_Write_DATA(0x00,x2>>8); - LCD_Write_DATA(0x00,x2); - LCD_Write_COM(0x2b); - LCD_Write_DATA(0x00,y1>>8); - LCD_Write_DATA(0x00,y1); - LCD_Write_DATA(0x00,y2>>8); - LCD_Write_DATA(0x00,y2); - LCD_Write_COM(0x2c); - break; diff --git a/libraries/UTFT/tft_drivers/ili9341/s4p/initlcd.h b/libraries/UTFT/tft_drivers/ili9341/s4p/initlcd.h deleted file mode 100644 index 0a5a082..0000000 --- a/libraries/UTFT/tft_drivers/ili9341/s4p/initlcd.h +++ /dev/null @@ -1,58 +0,0 @@ -case ILI9341_S4P: - LCD_Write_COM(0x11);//sleep out - delay(20); - //LCD_Write_COM(0x01); //reset - //delay(15); - LCD_Write_COM(0x28); //display off - delay(5); - LCD_Write_COM(0xCF); //power control b - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x83); //83 81 AA - LCD_Write_DATA(0x30); - LCD_Write_COM(0xED); //power on seq control - LCD_Write_DATA(0x64); //64 67 - LCD_Write_DATA(0x03); - LCD_Write_DATA(0x12); - LCD_Write_DATA(0x81); - LCD_Write_COM(0xE8); //timing control a - LCD_Write_DATA(0x85); - LCD_Write_DATA(0x01); - LCD_Write_DATA(0x79); //79 78 - LCD_Write_COM(0xCB); //power control a - LCD_Write_DATA(0x39); - LCD_Write_DATA(0X2C); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x34); - LCD_Write_DATA(0x02); - LCD_Write_COM(0xF7); //pump ratio control - LCD_Write_DATA(0x20); - LCD_Write_COM(0xEA); //timing control b - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x00); - LCD_Write_COM(0xC0); //power control 2 - LCD_Write_DATA(0x26); //26 25 - LCD_Write_COM(0xC1); //power control 2 - LCD_Write_DATA(0x11); - LCD_Write_COM(0xC5); //vcom control 1 - LCD_Write_DATA(0x35); - LCD_Write_DATA(0x3E); - LCD_Write_COM(0xC7); //vcom control 2 - LCD_Write_DATA(0xBE); //BE 94 - LCD_Write_COM(0xB1); //frame control - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x1B); //1B 70 - LCD_Write_COM(0xB6); //display control - LCD_Write_DATA(0x0A); - LCD_Write_DATA(0x82); - LCD_Write_DATA(0x27); - LCD_Write_DATA(0x00); - LCD_Write_COM(0xB7); //emtry mode - LCD_Write_DATA(0x07); - LCD_Write_COM(0x3A); //pixel format - LCD_Write_DATA(0x55); //16bit - LCD_Write_COM(0x36); //mem access - LCD_Write_DATA((1<<3)|(1<<6)); - //LCD_Write_DATA((1<<3)|(1<<7)); //rotate 180 - LCD_Write_COM(0x29); //display on - delay(5); - break; diff --git a/libraries/UTFT/tft_drivers/ili9341/s4p/setxy.h b/libraries/UTFT/tft_drivers/ili9341/s4p/setxy.h deleted file mode 100644 index 08ac212..0000000 --- a/libraries/UTFT/tft_drivers/ili9341/s4p/setxy.h +++ /dev/null @@ -1,13 +0,0 @@ -case ILI9341_S4P: - LCD_Write_COM(0x2A); //column - LCD_Write_DATA(x1>>8); - LCD_Write_DATA(x1); - LCD_Write_DATA(x2>>8); - LCD_Write_DATA(x2); - LCD_Write_COM(0x2B); //page - LCD_Write_DATA(y1>>8); - LCD_Write_DATA(y1); - LCD_Write_DATA(y2>>8); - LCD_Write_DATA(y2); - LCD_Write_COM(0x2C); //write - break; diff --git a/libraries/UTFT/tft_drivers/ili9341/s5p/initlcd.h b/libraries/UTFT/tft_drivers/ili9341/s5p/initlcd.h deleted file mode 100644 index 7afa6f6..0000000 --- a/libraries/UTFT/tft_drivers/ili9341/s5p/initlcd.h +++ /dev/null @@ -1,105 +0,0 @@ -case ILI9341_S5P: - LCD_Write_COM(0xCB); - LCD_Write_DATA(0x39); - LCD_Write_DATA(0x2C); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x34); - LCD_Write_DATA(0x02); - - LCD_Write_COM(0xCF); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0XC1); - LCD_Write_DATA(0X30); - - LCD_Write_COM(0xE8); - LCD_Write_DATA(0x85); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x78); - - LCD_Write_COM(0xEA); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x00); - - LCD_Write_COM(0xED); - LCD_Write_DATA(0x64); - LCD_Write_DATA(0x03); - LCD_Write_DATA(0X12); - LCD_Write_DATA(0X81); - - LCD_Write_COM(0xF7); - LCD_Write_DATA(0x20); - - LCD_Write_COM(0xC0); //Power control - LCD_Write_DATA(0x23); //VRH[5:0] - - LCD_Write_COM(0xC1); //Power control - LCD_Write_DATA(0x10); //SAP[2:0];BT[3:0] - - LCD_Write_COM(0xC5); //VCM control - LCD_Write_DATA(0x3e); //Contrast - LCD_Write_DATA(0x28); - - LCD_Write_COM(0xC7); //VCM control2 - LCD_Write_DATA(0x86); //-- - - LCD_Write_COM(0x36); // Memory Access Control - LCD_Write_DATA(0x48); - - LCD_Write_COM(0x3A); - LCD_Write_DATA(0x55); - - LCD_Write_COM(0xB1); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x18); - - LCD_Write_COM(0xB6); // Display Function Control - LCD_Write_DATA(0x08); - LCD_Write_DATA(0x82); - LCD_Write_DATA(0x27); -/* - LCD_Write_COM(0xF2); // 3Gamma Function Disable - LCD_Write_DATA(0x00); - - LCD_Write_COM(0x26); //Gamma curve selected - LCD_Write_DATA(0x01); - - LCD_Write_COM(0xE0); //Set Gamma - LCD_Write_DATA(0x0F); - LCD_Write_DATA(0x31); - LCD_Write_DATA(0x2B); - LCD_Write_DATA(0x0C); - LCD_Write_DATA(0x0E); - LCD_Write_DATA(0x08); - LCD_Write_DATA(0x4E); - LCD_Write_DATA(0xF1); - LCD_Write_DATA(0x37); - LCD_Write_DATA(0x07); - LCD_Write_DATA(0x10); - LCD_Write_DATA(0x03); - LCD_Write_DATA(0x0E); - LCD_Write_DATA(0x09); - LCD_Write_DATA(0x00); - - LCD_Write_COM(0XE1); //Set Gamma - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x0E); - LCD_Write_DATA(0x14); - LCD_Write_DATA(0x03); - LCD_Write_DATA(0x11); - LCD_Write_DATA(0x07); - LCD_Write_DATA(0x31); - LCD_Write_DATA(0xC1); - LCD_Write_DATA(0x48); - LCD_Write_DATA(0x08); - LCD_Write_DATA(0x0F); - LCD_Write_DATA(0x0C); - LCD_Write_DATA(0x31); - LCD_Write_DATA(0x36); - LCD_Write_DATA(0x0F); -*/ - LCD_Write_COM(0x11); //Exit Sleep - delay(120); - - LCD_Write_COM(0x29); //Display on - LCD_Write_COM(0x2c); - break; diff --git a/libraries/UTFT/tft_drivers/ili9341/s5p/setxy.h b/libraries/UTFT/tft_drivers/ili9341/s5p/setxy.h deleted file mode 100644 index 965f21d..0000000 --- a/libraries/UTFT/tft_drivers/ili9341/s5p/setxy.h +++ /dev/null @@ -1,13 +0,0 @@ -case ILI9341_S5P: - LCD_Write_COM(0x2a); - LCD_Write_DATA(x1>>8); - LCD_Write_DATA(x1); - LCD_Write_DATA(x2>>8); - LCD_Write_DATA(x2); - LCD_Write_COM(0x2b); - LCD_Write_DATA(y1>>8); - LCD_Write_DATA(y1); - LCD_Write_DATA(y2>>8); - LCD_Write_DATA(y2); - LCD_Write_COM(0x2c); - break; diff --git a/libraries/UTFT/tft_drivers/ili9481/initlcd.h b/libraries/UTFT/tft_drivers/ili9481/initlcd.h deleted file mode 100644 index 74260ed..0000000 --- a/libraries/UTFT/tft_drivers/ili9481/initlcd.h +++ /dev/null @@ -1,62 +0,0 @@ -case ILI9481: - LCD_Write_COM(0x11); - delay(20); - LCD_Write_COM(0xD0); - LCD_Write_DATA(0x07); - LCD_Write_DATA(0x42); - LCD_Write_DATA(0x18); - - LCD_Write_COM(0xD1); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x07); - LCD_Write_DATA(0x10); - - LCD_Write_COM(0xD2); - LCD_Write_DATA(0x01); - LCD_Write_DATA(0x02); - - LCD_Write_COM(0xC0); - LCD_Write_DATA(0x10); - LCD_Write_DATA(0x3B); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x02); - LCD_Write_DATA(0x11); - - LCD_Write_COM(0xC5); - LCD_Write_DATA(0x03); - - LCD_Write_COM(0xC8); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x32); - LCD_Write_DATA(0x36); - LCD_Write_DATA(0x45); - LCD_Write_DATA(0x06); - LCD_Write_DATA(0x16); - LCD_Write_DATA(0x37); - LCD_Write_DATA(0x75); - LCD_Write_DATA(0x77); - LCD_Write_DATA(0x54); - LCD_Write_DATA(0x0C); - LCD_Write_DATA(0x00); - - LCD_Write_COM(0x36); - LCD_Write_DATA(0x0A); - - - LCD_Write_COM(0x3A); - LCD_Write_DATA(0x55); - - LCD_Write_COM(0x2A); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x01); - LCD_Write_DATA(0x3F); - - LCD_Write_COM(0x2B); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x01); - LCD_Write_DATA(0xE0); - delay(120); - LCD_Write_COM(0x29); - break; diff --git a/libraries/UTFT/tft_drivers/ili9481/setxy.h b/libraries/UTFT/tft_drivers/ili9481/setxy.h deleted file mode 100644 index e3e7ce2..0000000 --- a/libraries/UTFT/tft_drivers/ili9481/setxy.h +++ /dev/null @@ -1,13 +0,0 @@ -case ILI9481: - LCD_Write_COM(0x2a); - LCD_Write_DATA(x1>>8); - LCD_Write_DATA(x1); - LCD_Write_DATA(x2>>8); - LCD_Write_DATA(x2); - LCD_Write_COM(0x2b); - LCD_Write_DATA(y1>>8); - LCD_Write_DATA(y1); - LCD_Write_DATA(y2>>8); - LCD_Write_DATA(y2); - LCD_Write_COM(0x2c); - break; diff --git a/libraries/UTFT/tft_drivers/ili9486/initlcd.h b/libraries/UTFT/tft_drivers/ili9486/initlcd.h deleted file mode 100644 index b67b0ed..0000000 --- a/libraries/UTFT/tft_drivers/ili9486/initlcd.h +++ /dev/null @@ -1,105 +0,0 @@ -case ILI9486: - LCD_Write_COM(0x11); // Sleep OUT - delay(50); - - LCD_Write_COM(0xF2); // ????? - LCD_Write_DATA(0x1C); - LCD_Write_DATA(0xA3); - LCD_Write_DATA(0x32); - LCD_Write_DATA(0x02); - LCD_Write_DATA(0xb2); - LCD_Write_DATA(0x12); - LCD_Write_DATA(0xFF); - LCD_Write_DATA(0x12); - LCD_Write_DATA(0x00); - - LCD_Write_COM(0xF1); // ????? - LCD_Write_DATA(0x36); - LCD_Write_DATA(0xA4); - - LCD_Write_COM(0xF8); // ????? - LCD_Write_DATA(0x21); - LCD_Write_DATA(0x04); - - LCD_Write_COM(0xF9); // ????? - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x08); - - LCD_Write_COM(0xC0); // Power Control 1 - LCD_Write_DATA(0x0d); - LCD_Write_DATA(0x0d); - - LCD_Write_COM(0xC1); // Power Control 2 - LCD_Write_DATA(0x43); - LCD_Write_DATA(0x00); - - LCD_Write_COM(0xC2); // Power Control 3 - LCD_Write_DATA(0x00); - - LCD_Write_COM(0xC5); // VCOM Control - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x48); - - LCD_Write_COM(0xB6); // Display Function Control - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x22); // 0x42 = Rotate display 180 deg. - LCD_Write_DATA(0x3B); - - LCD_Write_COM(0xE0); // PGAMCTRL (Positive Gamma Control) - LCD_Write_DATA(0x0f); - LCD_Write_DATA(0x24); - LCD_Write_DATA(0x1c); - LCD_Write_DATA(0x0a); - LCD_Write_DATA(0x0f); - LCD_Write_DATA(0x08); - LCD_Write_DATA(0x43); - LCD_Write_DATA(0x88); - LCD_Write_DATA(0x32); - LCD_Write_DATA(0x0f); - LCD_Write_DATA(0x10); - LCD_Write_DATA(0x06); - LCD_Write_DATA(0x0f); - LCD_Write_DATA(0x07); - LCD_Write_DATA(0x00); - - LCD_Write_COM(0xE1); // NGAMCTRL (Negative Gamma Control) - LCD_Write_DATA(0x0F); - LCD_Write_DATA(0x38); - LCD_Write_DATA(0x30); - LCD_Write_DATA(0x09); - LCD_Write_DATA(0x0f); - LCD_Write_DATA(0x0f); - LCD_Write_DATA(0x4e); - LCD_Write_DATA(0x77); - LCD_Write_DATA(0x3c); - LCD_Write_DATA(0x07); - LCD_Write_DATA(0x10); - LCD_Write_DATA(0x05); - LCD_Write_DATA(0x23); - LCD_Write_DATA(0x1b); - LCD_Write_DATA(0x00); - - LCD_Write_COM(0x20); // Display Inversion OFF - LCD_Write_DATA(0x00);//C8 - - LCD_Write_COM(0x36); // Memory Access Control - LCD_Write_DATA(0x0A); - - LCD_Write_COM(0x3A); // Interface Pixel Format - LCD_Write_DATA(0x55); - - LCD_Write_COM(0x2A); // Column Addess Set - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x01); - LCD_Write_DATA(0xDF); - - LCD_Write_COM(0x002B); // Page Address Set - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x01); - LCD_Write_DATA(0x3f); - delay(50); - LCD_Write_COM(0x0029); // Display ON - LCD_Write_COM(0x002C); // Memory Write - break; diff --git a/libraries/UTFT/tft_drivers/ili9486/setxy.h b/libraries/UTFT/tft_drivers/ili9486/setxy.h deleted file mode 100644 index df5beb3..0000000 --- a/libraries/UTFT/tft_drivers/ili9486/setxy.h +++ /dev/null @@ -1,13 +0,0 @@ -case ILI9486: - LCD_Write_COM(0x2a); - LCD_Write_DATA(x1>>8); - LCD_Write_DATA(x1); - LCD_Write_DATA(x2>>8); - LCD_Write_DATA(x2); - LCD_Write_COM(0x2b); - LCD_Write_DATA(y1>>8); - LCD_Write_DATA(y1); - LCD_Write_DATA(y2>>8); - LCD_Write_DATA(y2); - LCD_Write_COM(0x2c); - break; diff --git a/libraries/UTFT/tft_drivers/pcf8833/initlcd.h b/libraries/UTFT/tft_drivers/pcf8833/initlcd.h deleted file mode 100644 index 685f855..0000000 --- a/libraries/UTFT/tft_drivers/pcf8833/initlcd.h +++ /dev/null @@ -1,30 +0,0 @@ -case PCF8833: - LCD_Write_COM(0x01); - LCD_Write_COM(0x25); - LCD_Write_DATA(0x40); - LCD_Write_COM(0x11); - delay(10); - LCD_Write_COM(0x20); - LCD_Write_COM(0x38); - LCD_Write_COM(0x29); - LCD_Write_COM(0x13); - LCD_Write_COM(0x36); - LCD_Write_DATA(0x60); - LCD_Write_COM(0x3A); - LCD_Write_DATA(0x05); - LCD_Write_COM(0x2A); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x7F); - LCD_Write_COM(0xB4); - LCD_Write_DATA(0x03); - LCD_Write_DATA(0x08); - LCD_Write_DATA(0x0b); - LCD_Write_DATA(0x0e); - LCD_Write_COM(0xBA); - LCD_Write_DATA(0x07); - LCD_Write_DATA(0x0D); - LCD_Write_COM(0x2B); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x7F); - LCD_Write_COM(0x2C); - break; diff --git a/libraries/UTFT/tft_drivers/pcf8833/setxy.h b/libraries/UTFT/tft_drivers/pcf8833/setxy.h deleted file mode 100644 index 34dd38c..0000000 --- a/libraries/UTFT/tft_drivers/pcf8833/setxy.h +++ /dev/null @@ -1,9 +0,0 @@ -case PCF8833: - LCD_Write_COM(0x2a); - LCD_Write_DATA(x1); - LCD_Write_DATA(x2); - LCD_Write_COM(0x2b); - LCD_Write_DATA(y1); - LCD_Write_DATA(y2); - LCD_Write_COM(0x2c); - break; diff --git a/libraries/UTFT/tft_drivers/r61581/initlcd.h b/libraries/UTFT/tft_drivers/r61581/initlcd.h deleted file mode 100644 index 6208485..0000000 --- a/libraries/UTFT/tft_drivers/r61581/initlcd.h +++ /dev/null @@ -1,110 +0,0 @@ -case R61581: - LCD_Write_COM(0xB0); - LCD_Write_DATA(0x1E); - - LCD_Write_COM(0xB0); - LCD_Write_DATA(0x00); - - LCD_Write_COM(0xB3); - LCD_Write_DATA(0x02); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x10); - - LCD_Write_COM(0xB4); - LCD_Write_DATA(0x00);//0X10 - -// LCD_Write_COM(0xB9); //PWM Settings for Brightness Control -// LCD_Write_DATA(0x01);// Disabled by default. -// LCD_Write_DATA(0xFF); //0xFF = Max brightness -// LCD_Write_DATA(0xFF); -// LCD_Write_DATA(0x18); - - LCD_Write_COM(0xC0); - LCD_Write_DATA(0x03); - LCD_Write_DATA(0x3B);// - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x01); - LCD_Write_DATA(0x00);//NW - LCD_Write_DATA(0x43); - - LCD_Write_COM(0xC1); - LCD_Write_DATA(0x08); - LCD_Write_DATA(0x15);//CLOCK - LCD_Write_DATA(0x08); - LCD_Write_DATA(0x08); - - LCD_Write_COM(0xC4); - LCD_Write_DATA(0x15); - LCD_Write_DATA(0x03); - LCD_Write_DATA(0x03); - LCD_Write_DATA(0x01); - - LCD_Write_COM(0xC6); - LCD_Write_DATA(0x02); - - LCD_Write_COM(0xC8); - LCD_Write_DATA(0x0c); - LCD_Write_DATA(0x05); - LCD_Write_DATA(0x0A);//0X12 - LCD_Write_DATA(0x6B);//0x7D - LCD_Write_DATA(0x04); - LCD_Write_DATA(0x06);//0x08 - LCD_Write_DATA(0x15);//0x0A - LCD_Write_DATA(0x10); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x60);//0x23 - - LCD_Write_COM(0x36); - LCD_Write_DATA(0x0A); - - LCD_Write_COM(0x0C); - LCD_Write_DATA(0x55); - - LCD_Write_COM(0x3A); - LCD_Write_DATA(0x55); - - LCD_Write_COM(0x38); - - LCD_Write_COM(0xD0); - LCD_Write_DATA(0x07); - LCD_Write_DATA(0x07);//VCI1 - LCD_Write_DATA(0x14);//VRH 0x1D - LCD_Write_DATA(0xA2);//BT 0x06 - - LCD_Write_COM(0xD1); - LCD_Write_DATA(0x03); - LCD_Write_DATA(0x5A);//VCM 0x5A - LCD_Write_DATA(0x10);//VDV - - LCD_Write_COM(0xD2); - LCD_Write_DATA(0x03); - LCD_Write_DATA(0x04);//0x24 - LCD_Write_DATA(0x04); - - LCD_Write_COM(0x11); - delay(150); - - LCD_Write_COM(0x2A); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x01); - LCD_Write_DATA(0xDF);//320 - - LCD_Write_COM(0x2B); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x01); - LCD_Write_DATA(0x3F);//480 - - - delay(100); - - LCD_Write_COM(0x29); - delay(30); - - LCD_Write_COM(0x2C); - delay(30); - break; diff --git a/libraries/UTFT/tft_drivers/r61581/setxy.h b/libraries/UTFT/tft_drivers/r61581/setxy.h deleted file mode 100644 index 29f356b..0000000 --- a/libraries/UTFT/tft_drivers/r61581/setxy.h +++ /dev/null @@ -1,13 +0,0 @@ -case R61581: - LCD_Write_COM(0x2a); - LCD_Write_DATA(x1>>8); - LCD_Write_DATA(x1); - LCD_Write_DATA(x2>>8); - LCD_Write_DATA(x2); - LCD_Write_COM(0x2b); - LCD_Write_DATA(y1>>8); - LCD_Write_DATA(y1); - LCD_Write_DATA(y2>>8); - LCD_Write_DATA(y2); - LCD_Write_COM(0x2c); - break; diff --git a/libraries/UTFT/tft_drivers/s1d19122/initlcd.h b/libraries/UTFT/tft_drivers/s1d19122/initlcd.h deleted file mode 100644 index 33f2c65..0000000 --- a/libraries/UTFT/tft_drivers/s1d19122/initlcd.h +++ /dev/null @@ -1,183 +0,0 @@ -case S1D19122: - //************* Start Initial Sequence **********// - - int i,R,G,B; - LCD_Write_COM(0x11); - LCD_Write_COM(0x13); - LCD_Write_COM(0x29); - - //-------------- Display Control ---------// - LCD_Write_COM(0xB0); - - LCD_Write_DATA(0x05); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0xF0); - LCD_Write_DATA(0x0A); - LCD_Write_DATA(0x41); - LCD_Write_DATA(0x02); - LCD_Write_DATA(0x0A); - LCD_Write_DATA(0x30); - LCD_Write_DATA(0x31); - LCD_Write_DATA(0x36); - LCD_Write_DATA(0x37); - LCD_Write_DATA(0x40); - LCD_Write_DATA(0x02); - LCD_Write_DATA(0x3F); - LCD_Write_DATA(0x40); - LCD_Write_DATA(0x02); - LCD_Write_DATA(0x81); - LCD_Write_DATA(0x04); - LCD_Write_DATA(0x05); - LCD_Write_DATA(0x64); - - // ----------- Gamma Curve Set3 Postive----------// - LCD_Write_COM(0xFC); - - LCD_Write_DATA(0x88); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x10); - LCD_Write_DATA(0x01); - LCD_Write_DATA(0x01); - LCD_Write_DATA(0x10); - LCD_Write_DATA(0x42); - LCD_Write_DATA(0x42); - LCD_Write_DATA(0x22); - LCD_Write_DATA(0x11); - LCD_Write_DATA(0x11); - LCD_Write_DATA(0x22); - LCD_Write_DATA(0x99); - LCD_Write_DATA(0xAA); - LCD_Write_DATA(0xAA); - LCD_Write_DATA(0xAA); - LCD_Write_DATA(0xBB); - LCD_Write_DATA(0xBB); - LCD_Write_DATA(0xAA); - LCD_Write_DATA(0x33); - LCD_Write_DATA(0x33); - LCD_Write_DATA(0x11); - LCD_Write_DATA(0x01); - LCD_Write_DATA(0x01); - LCD_Write_DATA(0x01); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0xC0); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x00); - - // ----------- Gamma Curve Set3 Negative----------// - LCD_Write_COM(0xFD); - - LCD_Write_DATA(0x88); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x10); - LCD_Write_DATA(0x01); - LCD_Write_DATA(0x01); - LCD_Write_DATA(0x10); - LCD_Write_DATA(0x42); - LCD_Write_DATA(0x42); - LCD_Write_DATA(0x22); - LCD_Write_DATA(0x11); - LCD_Write_DATA(0x11); - LCD_Write_DATA(0x22); - LCD_Write_DATA(0x99); - LCD_Write_DATA(0xAA); - LCD_Write_DATA(0xAA); - LCD_Write_DATA(0xAA); - LCD_Write_DATA(0xBB); - LCD_Write_DATA(0xBB); - LCD_Write_DATA(0xAA); - LCD_Write_DATA(0x33); - LCD_Write_DATA(0x33); - LCD_Write_DATA(0x11); - LCD_Write_DATA(0x01); - LCD_Write_DATA(0x01); - LCD_Write_DATA(0x01); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x03); - - // ----------- EVRSER Regulator Voltage Setting---------// - LCD_Write_COM(0xBE); - - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x15); - LCD_Write_DATA(0x16); - LCD_Write_DATA(0x08); - LCD_Write_DATA(0x09); - LCD_Write_DATA(0x15); - LCD_Write_DATA(0x10); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x00); - - // -----------Module Definiton Setting---------// - LCD_Write_COM(0xC0); - - LCD_Write_DATA(0x0E); - LCD_Write_DATA(0x01); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x00); - - // -----------PWRDEF Power Ability Ddfinition----------// - LCD_Write_COM(0xC1); - - LCD_Write_DATA(0x2F); - LCD_Write_DATA(0x23); - LCD_Write_DATA(0xB4); - LCD_Write_DATA(0xFF); - LCD_Write_DATA(0x24); - LCD_Write_DATA(0x03); - LCD_Write_DATA(0x20); - LCD_Write_DATA(0x02); - LCD_Write_DATA(0x02); - LCD_Write_DATA(0x02); - LCD_Write_DATA(0x20); - LCD_Write_DATA(0x20); - LCD_Write_DATA(0x00); - - // -----------Other Setting----------// - LCD_Write_COM(0xC2); - LCD_Write_DATA(0x03); - LCD_Write_COM(0x26); - LCD_Write_DATA(0x08); - LCD_Write_COM(0x35); - - LCD_Write_COM(0x36); - LCD_Write_DATA(0x64); - LCD_Write_COM(0x3A); - LCD_Write_DATA(0x05); - LCD_Write_COM(0x2A); - LCD_Write_DATA(0x01,0x3f); - LCD_Write_COM(0x2B); - LCD_Write_DATA(0xEF); - LCD_Write_COM(0x2c); - - // -----------RGB Setting----------// - LCD_Write_COM(0x2D); - R=0; - G=0; - B=0; - - for(i=0;i<32;i++) - { - LCD_Write_DATA(R); - R=R+2; - } - for(i=0;i<64;i++) - { - LCD_Write_DATA(G); - G=G+1; - } - for(i=0;i<32;i++) - { - LCD_Write_DATA(B); - B=B+2; - } - break; diff --git a/libraries/UTFT/tft_drivers/s1d19122/setxy.h b/libraries/UTFT/tft_drivers/s1d19122/setxy.h deleted file mode 100644 index d88c733..0000000 --- a/libraries/UTFT/tft_drivers/s1d19122/setxy.h +++ /dev/null @@ -1,13 +0,0 @@ -case S1D19122: - LCD_Write_COM(0x2a); - LCD_Write_DATA(x1>>8); - LCD_Write_DATA(x1); - LCD_Write_DATA(x2>>8); - LCD_Write_DATA(x2); - LCD_Write_COM(0x2b); - LCD_Write_DATA(y1>>8); - LCD_Write_DATA(y1); - LCD_Write_DATA(y2>>8); - LCD_Write_DATA(y2); - LCD_Write_COM(0x2c); - break; diff --git a/libraries/UTFT/tft_drivers/s6d0164/initlcd.h b/libraries/UTFT/tft_drivers/s6d0164/initlcd.h deleted file mode 100644 index 7b2716b..0000000 --- a/libraries/UTFT/tft_drivers/s6d0164/initlcd.h +++ /dev/null @@ -1,44 +0,0 @@ -case S6D0164: - LCD_Write_COM_DATA(0x11,0x001A); - LCD_Write_COM_DATA(0x12,0x3121); - LCD_Write_COM_DATA(0x13,0x006C); - LCD_Write_COM_DATA(0x14,0x4249); - - LCD_Write_COM_DATA(0x10,0x0800); - delay(10); - LCD_Write_COM_DATA(0x11,0x011A); - delay(10); - LCD_Write_COM_DATA(0x11,0x031A); - delay(10); - LCD_Write_COM_DATA(0x11,0x071A); - delay(10); - LCD_Write_COM_DATA(0x11,0x0F1A); - delay(10); - LCD_Write_COM_DATA(0x11,0x0F3A); - delay(30); - - LCD_Write_COM_DATA(0x01,0x011C); - LCD_Write_COM_DATA(0x02,0x0100); - LCD_Write_COM_DATA(0x03,0x1030); - LCD_Write_COM_DATA(0x07,0x0000); - LCD_Write_COM_DATA(0x08,0x0808); - LCD_Write_COM_DATA(0x0B,0x1100); - LCD_Write_COM_DATA(0x0C,0x0000); - - LCD_Write_COM_DATA(0x0F,0x1401); - LCD_Write_COM_DATA(0x15,0x0000); - LCD_Write_COM_DATA(0x20,0x0000); - LCD_Write_COM_DATA(0x21,0x0000); - - - LCD_Write_COM_DATA(0x36,0x00AF); - LCD_Write_COM_DATA(0x37,0x0000); - LCD_Write_COM_DATA(0x38,0x00DB); - LCD_Write_COM_DATA(0x39,0x0000); - - LCD_Write_COM_DATA(0x0F,0x0B01); - LCD_Write_COM_DATA(0x07,0x0016); - LCD_Write_COM_DATA(0x07,0x0017); - - LCD_Write_COM(0x22); - break; diff --git a/libraries/UTFT/tft_drivers/s6d0164/setxy.h b/libraries/UTFT/tft_drivers/s6d0164/setxy.h deleted file mode 100644 index 6e5d5e9..0000000 --- a/libraries/UTFT/tft_drivers/s6d0164/setxy.h +++ /dev/null @@ -1,9 +0,0 @@ -case S6D0164: - LCD_Write_COM_DATA(0x36,x2); - LCD_Write_COM_DATA(0x37,x1); - LCD_Write_COM_DATA(0x38,y2); - LCD_Write_COM_DATA(0x39,y1); - LCD_Write_COM_DATA(0x20,x1); - LCD_Write_COM_DATA(0x21,y1); - LCD_Write_COM(0x22); - break; diff --git a/libraries/UTFT/tft_drivers/s6d1121/initlcd.h b/libraries/UTFT/tft_drivers/s6d1121/initlcd.h deleted file mode 100644 index c8d80e6..0000000 --- a/libraries/UTFT/tft_drivers/s6d1121/initlcd.h +++ /dev/null @@ -1,47 +0,0 @@ -case S6D1121_8: -case S6D1121_16: - LCD_Write_COM_DATA(0x11,0x2004); - LCD_Write_COM_DATA(0x13,0xCC00); - LCD_Write_COM_DATA(0x15,0x2600); - LCD_Write_COM_DATA(0x14,0x252A); - LCD_Write_COM_DATA(0x12,0x0033); - LCD_Write_COM_DATA(0x13,0xCC04); - LCD_Write_COM_DATA(0x13,0xCC06); - LCD_Write_COM_DATA(0x13,0xCC4F); - LCD_Write_COM_DATA(0x13,0x674F); - LCD_Write_COM_DATA(0x11,0x2003); - LCD_Write_COM_DATA(0x30,0x2609); - LCD_Write_COM_DATA(0x31,0x242C); - LCD_Write_COM_DATA(0x32,0x1F23); - LCD_Write_COM_DATA(0x33,0x2425); - LCD_Write_COM_DATA(0x34,0x2226); - LCD_Write_COM_DATA(0x35,0x2523); - LCD_Write_COM_DATA(0x36,0x1C1A); - LCD_Write_COM_DATA(0x37,0x131D); - LCD_Write_COM_DATA(0x38,0x0B11); - LCD_Write_COM_DATA(0x39,0x1210); - LCD_Write_COM_DATA(0x3A,0x1315); - LCD_Write_COM_DATA(0x3B,0x3619); - LCD_Write_COM_DATA(0x3C,0x0D00); - LCD_Write_COM_DATA(0x3D,0x000D); - LCD_Write_COM_DATA(0x16,0x0007); - LCD_Write_COM_DATA(0x02,0x0013); - LCD_Write_COM_DATA(0x03,0x0003); - LCD_Write_COM_DATA(0x01,0x0127); - LCD_Write_COM_DATA(0x08,0x0303); - LCD_Write_COM_DATA(0x0A,0x000B); - LCD_Write_COM_DATA(0x0B,0x0003); - LCD_Write_COM_DATA(0x0C,0x0000); - LCD_Write_COM_DATA(0x41,0x0000); - LCD_Write_COM_DATA(0x50,0x0000); - LCD_Write_COM_DATA(0x60,0x0005); - LCD_Write_COM_DATA(0x70,0x000B); - LCD_Write_COM_DATA(0x71,0x0000); - LCD_Write_COM_DATA(0x78,0x0000); - LCD_Write_COM_DATA(0x7A,0x0000); - LCD_Write_COM_DATA(0x79,0x0007); - LCD_Write_COM_DATA(0x07,0x0051); - LCD_Write_COM_DATA(0x07,0x0053); - LCD_Write_COM_DATA(0x79,0x0000); - LCD_Write_COM(0x22); - break; diff --git a/libraries/UTFT/tft_drivers/s6d1121/setxy.h b/libraries/UTFT/tft_drivers/s6d1121/setxy.h deleted file mode 100644 index c2f5a1f..0000000 --- a/libraries/UTFT/tft_drivers/s6d1121/setxy.h +++ /dev/null @@ -1,9 +0,0 @@ -case S6D1121_8: -case S6D1121_16: - LCD_Write_COM_DATA(0x46,(x2 << 8) | x1); - LCD_Write_COM_DATA(0x47,y2); - LCD_Write_COM_DATA(0x48,y1); - LCD_Write_COM_DATA(0x20,x1); - LCD_Write_COM_DATA(0x21,y1); - LCD_Write_COM(0x22); - break; diff --git a/libraries/UTFT/tft_drivers/ssd1289/initlcd.h b/libraries/UTFT/tft_drivers/ssd1289/initlcd.h deleted file mode 100644 index 0d63d92..0000000 --- a/libraries/UTFT/tft_drivers/ssd1289/initlcd.h +++ /dev/null @@ -1,46 +0,0 @@ -case SSD1289: -case SSD1289_8: -case SSD1289LATCHED: - LCD_Write_COM_DATA(0x00,0x0001); - LCD_Write_COM_DATA(0x03,0xA8A4); - LCD_Write_COM_DATA(0x0C,0x0000); - LCD_Write_COM_DATA(0x0D,0x080C); - LCD_Write_COM_DATA(0x0E,0x2B00); - LCD_Write_COM_DATA(0x1E,0x00B7); - LCD_Write_COM_DATA(0x01,0x2B3F); - LCD_Write_COM_DATA(0x02,0x0600); - LCD_Write_COM_DATA(0x10,0x0000); - LCD_Write_COM_DATA(0x11,0x6070); - LCD_Write_COM_DATA(0x05,0x0000); - LCD_Write_COM_DATA(0x06,0x0000); - LCD_Write_COM_DATA(0x16,0xEF1C); - LCD_Write_COM_DATA(0x17,0x0003); - LCD_Write_COM_DATA(0x07,0x0233); - LCD_Write_COM_DATA(0x0B,0x0000); - LCD_Write_COM_DATA(0x0F,0x0000); - LCD_Write_COM_DATA(0x41,0x0000); - LCD_Write_COM_DATA(0x42,0x0000); - LCD_Write_COM_DATA(0x48,0x0000); - LCD_Write_COM_DATA(0x49,0x013F); - LCD_Write_COM_DATA(0x4A,0x0000); - LCD_Write_COM_DATA(0x4B,0x0000); - LCD_Write_COM_DATA(0x44,0xEF00); - LCD_Write_COM_DATA(0x45,0x0000); - LCD_Write_COM_DATA(0x46,0x013F); - LCD_Write_COM_DATA(0x30,0x0707); - LCD_Write_COM_DATA(0x31,0x0204); - LCD_Write_COM_DATA(0x32,0x0204); - LCD_Write_COM_DATA(0x33,0x0502); - LCD_Write_COM_DATA(0x34,0x0507); - LCD_Write_COM_DATA(0x35,0x0204); - LCD_Write_COM_DATA(0x36,0x0204); - LCD_Write_COM_DATA(0x37,0x0502); - LCD_Write_COM_DATA(0x3A,0x0302); - LCD_Write_COM_DATA(0x3B,0x0302); - LCD_Write_COM_DATA(0x23,0x0000); - LCD_Write_COM_DATA(0x24,0x0000); - LCD_Write_COM_DATA(0x25,0x8000); - LCD_Write_COM_DATA(0x4f,0x0000); - LCD_Write_COM_DATA(0x4e,0x0000); - LCD_Write_COM(0x22); - break; diff --git a/libraries/UTFT/tft_drivers/ssd1289/setxy.h b/libraries/UTFT/tft_drivers/ssd1289/setxy.h deleted file mode 100644 index 28b0efd..0000000 --- a/libraries/UTFT/tft_drivers/ssd1289/setxy.h +++ /dev/null @@ -1,10 +0,0 @@ -case SSD1289: -case SSD1289_8: -case SSD1289LATCHED: - LCD_Write_COM_DATA(0x44,(x2<<8)+x1); - LCD_Write_COM_DATA(0x45,y1); - LCD_Write_COM_DATA(0x46,y2); - LCD_Write_COM_DATA(0x4e,x1); - LCD_Write_COM_DATA(0x4f,y1); - LCD_Write_COM(0x22); - break; diff --git a/libraries/UTFT/tft_drivers/ssd1963/480/initlcd.h b/libraries/UTFT/tft_drivers/ssd1963/480/initlcd.h deleted file mode 100644 index a051795..0000000 --- a/libraries/UTFT/tft_drivers/ssd1963/480/initlcd.h +++ /dev/null @@ -1,78 +0,0 @@ -case SSD1963_480: - LCD_Write_COM(0xE2); //PLL multiplier, set PLL clock to 120M - LCD_Write_DATA(0x23); //N=0x36 for 6.5M, 0x23 for 10M crystal - LCD_Write_DATA(0x02); - LCD_Write_DATA(0x54); - LCD_Write_COM(0xE0); // PLL enable - LCD_Write_DATA(0x01); - delay(10); - LCD_Write_COM(0xE0); - LCD_Write_DATA(0x03); - delay(10); - LCD_Write_COM(0x01); // software reset - delay(100); - LCD_Write_COM(0xE6); //PLL setting for PCLK, depends on resolution - LCD_Write_DATA(0x01); - LCD_Write_DATA(0x1F); - LCD_Write_DATA(0xFF); - - LCD_Write_COM(0xB0); //LCD SPECIFICATION - LCD_Write_DATA(0x20); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x01); //Set HDP 479 - LCD_Write_DATA(0xDF); - LCD_Write_DATA(0x01); //Set VDP 271 - LCD_Write_DATA(0x0F); - LCD_Write_DATA(0x00); - - LCD_Write_COM(0xB4); //HSYNC - LCD_Write_DATA(0x02); //Set HT 531 - LCD_Write_DATA(0x13); - LCD_Write_DATA(0x00); //Set HPS 8 - LCD_Write_DATA(0x08); - LCD_Write_DATA(0x2B); //Set HPW 43 - LCD_Write_DATA(0x00); //Set LPS 2 - LCD_Write_DATA(0x02); - LCD_Write_DATA(0x00); - - LCD_Write_COM(0xB6); //VSYNC - LCD_Write_DATA(0x01); //Set VT 288 - LCD_Write_DATA(0x20); - LCD_Write_DATA(0x00); //Set VPS 4 - LCD_Write_DATA(0x04); - LCD_Write_DATA(0x0c); //Set VPW 12 - LCD_Write_DATA(0x00); //Set FPS 2 - LCD_Write_DATA(0x02); - - LCD_Write_COM(0xBA); - LCD_Write_DATA(0x0F); //GPIO[3:0] out 1 - - LCD_Write_COM(0xB8); - LCD_Write_DATA(0x07); //GPIO3=input, GPIO[2:0]=output - LCD_Write_DATA(0x01); //GPIO0 normal - - LCD_Write_COM(0x36); //rotation - LCD_Write_DATA(0x22); - - LCD_Write_COM(0xF0); //pixel data interface - LCD_Write_DATA(0x03); - - - delay(1); - - setXY(0, 0, 479, 271); - LCD_Write_COM(0x29); //display on - - LCD_Write_COM(0xBE); //set PWM for B/L - LCD_Write_DATA(0x06); - LCD_Write_DATA(0xf0); - LCD_Write_DATA(0x01); - LCD_Write_DATA(0xf0); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x00); - - LCD_Write_COM(0xd0); - LCD_Write_DATA(0x0d); - - LCD_Write_COM(0x2C); - break; diff --git a/libraries/UTFT/tft_drivers/ssd1963/480/setxy.h b/libraries/UTFT/tft_drivers/ssd1963/480/setxy.h deleted file mode 100644 index e2b9297..0000000 --- a/libraries/UTFT/tft_drivers/ssd1963/480/setxy.h +++ /dev/null @@ -1,15 +0,0 @@ -case SSD1963_480: - swap(word, x1, y1); - swap(word, x2, y2); - LCD_Write_COM(0x2a); - LCD_Write_DATA(x1>>8); - LCD_Write_DATA(x1); - LCD_Write_DATA(x2>>8); - LCD_Write_DATA(x2); - LCD_Write_COM(0x2b); - LCD_Write_DATA(y1>>8); - LCD_Write_DATA(y1); - LCD_Write_DATA(y2>>8); - LCD_Write_DATA(y2); - LCD_Write_COM(0x2c); - break; diff --git a/libraries/UTFT/tft_drivers/ssd1963/800/initlcd.h b/libraries/UTFT/tft_drivers/ssd1963/800/initlcd.h deleted file mode 100644 index 722286d..0000000 --- a/libraries/UTFT/tft_drivers/ssd1963/800/initlcd.h +++ /dev/null @@ -1,78 +0,0 @@ -case SSD1963_800: - LCD_Write_COM(0xE2); //PLL multiplier, set PLL clock to 120M - LCD_Write_DATA(0x1E); //N=0x36 for 6.5M, 0x23 for 10M crystal - LCD_Write_DATA(0x02); - LCD_Write_DATA(0x54); - LCD_Write_COM(0xE0); // PLL enable - LCD_Write_DATA(0x01); - delay(10); - LCD_Write_COM(0xE0); - LCD_Write_DATA(0x03); - delay(10); - LCD_Write_COM(0x01); // software reset - delay(100); - LCD_Write_COM(0xE6); //PLL setting for PCLK, depends on resolution - LCD_Write_DATA(0x03); - LCD_Write_DATA(0xFF); - LCD_Write_DATA(0xFF); - - LCD_Write_COM(0xB0); //LCD SPECIFICATION - LCD_Write_DATA(0x24); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x03); //Set HDP 799 - LCD_Write_DATA(0x1F); - LCD_Write_DATA(0x01); //Set VDP 479 - LCD_Write_DATA(0xDF); - LCD_Write_DATA(0x00); - - LCD_Write_COM(0xB4); //HSYNC - LCD_Write_DATA(0x03); //Set HT 928 - LCD_Write_DATA(0xA0); - LCD_Write_DATA(0x00); //Set HPS 46 - LCD_Write_DATA(0x2E); - LCD_Write_DATA(0x30); //Set HPW 48 - LCD_Write_DATA(0x00); //Set LPS 15 - LCD_Write_DATA(0x0F); - LCD_Write_DATA(0x00); - - LCD_Write_COM(0xB6); //VSYNC - LCD_Write_DATA(0x02); //Set VT 525 - LCD_Write_DATA(0x0D); - LCD_Write_DATA(0x00); //Set VPS 16 - LCD_Write_DATA(0x10); - LCD_Write_DATA(0x10); //Set VPW 16 - LCD_Write_DATA(0x00); //Set FPS 8 - LCD_Write_DATA(0x08); - - LCD_Write_COM(0xBA); - LCD_Write_DATA(0x0F); //GPIO[3:0] out 1 - - LCD_Write_COM(0xB8); - LCD_Write_DATA(0x07); //GPIO3=input, GPIO[2:0]=output - LCD_Write_DATA(0x01); //GPIO0 normal - - LCD_Write_COM(0x36); //rotation - LCD_Write_DATA(0x22); - - LCD_Write_COM(0xF0); //pixel data interface - LCD_Write_DATA(0x03); - - - delay(1); - - setXY(0, 0, 799, 479); - LCD_Write_COM(0x29); //display on - - LCD_Write_COM(0xBE); //set PWM for B/L - LCD_Write_DATA(0x06); - LCD_Write_DATA(0xf0); - LCD_Write_DATA(0x01); - LCD_Write_DATA(0xf0); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x00); - - LCD_Write_COM(0xd0); - LCD_Write_DATA(0x0d); - - LCD_Write_COM(0x2C); - break; diff --git a/libraries/UTFT/tft_drivers/ssd1963/800/setxy.h b/libraries/UTFT/tft_drivers/ssd1963/800/setxy.h deleted file mode 100644 index 1b2fed7..0000000 --- a/libraries/UTFT/tft_drivers/ssd1963/800/setxy.h +++ /dev/null @@ -1,15 +0,0 @@ -case SSD1963_800: - swap(word, x1, y1); - swap(word, x2, y2); - LCD_Write_COM(0x2a); - LCD_Write_DATA(x1>>8); - LCD_Write_DATA(x1); - LCD_Write_DATA(x2>>8); - LCD_Write_DATA(x2); - LCD_Write_COM(0x2b); - LCD_Write_DATA(y1>>8); - LCD_Write_DATA(y1); - LCD_Write_DATA(y2>>8); - LCD_Write_DATA(y2); - LCD_Write_COM(0x2c); - break; diff --git a/libraries/UTFT/tft_drivers/ssd1963/800alt/initlcd.h b/libraries/UTFT/tft_drivers/ssd1963/800alt/initlcd.h deleted file mode 100644 index a0cbecc..0000000 --- a/libraries/UTFT/tft_drivers/ssd1963/800alt/initlcd.h +++ /dev/null @@ -1,78 +0,0 @@ -case SSD1963_800ALT: - LCD_Write_COM(0xE2); //PLL multiplier, set PLL clock to 120M - LCD_Write_DATA(0x23); //N=0x36 for 6.5M, 0x23 for 10M crystal - LCD_Write_DATA(0x02); - LCD_Write_DATA(0x04); - LCD_Write_COM(0xE0); // PLL enable - LCD_Write_DATA(0x01); - delay(10); - LCD_Write_COM(0xE0); - LCD_Write_DATA(0x03); - delay(10); - LCD_Write_COM(0x01); // software reset - delay(100); - LCD_Write_COM(0xE6); //PLL setting for PCLK, depends on resolution - LCD_Write_DATA(0x04); - LCD_Write_DATA(0x93); - LCD_Write_DATA(0xE0); - - LCD_Write_COM(0xB0); //LCD SPECIFICATION - LCD_Write_DATA(0x00); // 0x24 - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x03); //Set HDP 799 - LCD_Write_DATA(0x1F); - LCD_Write_DATA(0x01); //Set VDP 479 - LCD_Write_DATA(0xDF); - LCD_Write_DATA(0x00); - - LCD_Write_COM(0xB4); //HSYNC - LCD_Write_DATA(0x03); //Set HT 928 - LCD_Write_DATA(0xA0); - LCD_Write_DATA(0x00); //Set HPS 46 - LCD_Write_DATA(0x2E); - LCD_Write_DATA(0x30); //Set HPW 48 - LCD_Write_DATA(0x00); //Set LPS 15 - LCD_Write_DATA(0x0F); - LCD_Write_DATA(0x00); - - LCD_Write_COM(0xB6); //VSYNC - LCD_Write_DATA(0x02); //Set VT 525 - LCD_Write_DATA(0x0D); - LCD_Write_DATA(0x00); //Set VPS 16 - LCD_Write_DATA(0x10); - LCD_Write_DATA(0x10); //Set VPW 16 - LCD_Write_DATA(0x00); //Set FPS 8 - LCD_Write_DATA(0x08); - - LCD_Write_COM(0xBA); - LCD_Write_DATA(0x05); //GPIO[3:0] out 1 - - LCD_Write_COM(0xB8); - LCD_Write_DATA(0x07); //GPIO3=input, GPIO[2:0]=output - LCD_Write_DATA(0x01); //GPIO0 normal - - LCD_Write_COM(0x36); //rotation - LCD_Write_DATA(0x22); // -- Set to 0x21 to rotate 180 degrees - - LCD_Write_COM(0xF0); //pixel data interface - LCD_Write_DATA(0x03); - - - delay(10); - - setXY(0, 0, 799, 479); - LCD_Write_COM(0x29); //display on - - LCD_Write_COM(0xBE); //set PWM for B/L - LCD_Write_DATA(0x06); - LCD_Write_DATA(0xF0); - LCD_Write_DATA(0x01); - LCD_Write_DATA(0xF0); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x00); - - LCD_Write_COM(0xD0); - LCD_Write_DATA(0x0D); - - LCD_Write_COM(0x2C); - break; diff --git a/libraries/UTFT/tft_drivers/ssd1963/800alt/setxy.h b/libraries/UTFT/tft_drivers/ssd1963/800alt/setxy.h deleted file mode 100644 index 7e6a81d..0000000 --- a/libraries/UTFT/tft_drivers/ssd1963/800alt/setxy.h +++ /dev/null @@ -1,15 +0,0 @@ -case SSD1963_800ALT: - swap(word, x1, y1); - swap(word, x2, y2); - LCD_Write_COM(0x2a); - LCD_Write_DATA(x1>>8); - LCD_Write_DATA(x1); - LCD_Write_DATA(x2>>8); - LCD_Write_DATA(x2); - LCD_Write_COM(0x2b); - LCD_Write_DATA(y1>>8); - LCD_Write_DATA(y1); - LCD_Write_DATA(y2>>8); - LCD_Write_DATA(y2); - LCD_Write_COM(0x2c); - break; diff --git a/libraries/UTFT/tft_drivers/st7735/initlcd.h b/libraries/UTFT/tft_drivers/st7735/initlcd.h deleted file mode 100644 index 63439c7..0000000 --- a/libraries/UTFT/tft_drivers/st7735/initlcd.h +++ /dev/null @@ -1,104 +0,0 @@ -case ST7735: - LCD_Write_COM(0x11);//Sleep exit - delay(12); - - //ST7735R Frame Rate - LCD_Write_COM(0xB1); - LCD_Write_DATA(0x01); - LCD_Write_DATA(0x2C); - LCD_Write_DATA(0x2D); - LCD_Write_COM(0xB2); - LCD_Write_DATA(0x01); - LCD_Write_DATA(0x2C); - LCD_Write_DATA(0x2D); - LCD_Write_COM(0xB3); - LCD_Write_DATA(0x01); - LCD_Write_DATA(0x2C); - LCD_Write_DATA(0x2D); - LCD_Write_DATA(0x01); - LCD_Write_DATA(0x2C); - LCD_Write_DATA(0x2D); - - LCD_Write_COM(0xB4); //Column inversion - LCD_Write_DATA(0x07); - - //ST7735R Power Sequence - LCD_Write_COM(0xC0); - LCD_Write_DATA(0xA2); - LCD_Write_DATA(0x02); - LCD_Write_DATA(0x84); - LCD_Write_COM(0xC1); - LCD_Write_DATA(0xC5); - LCD_Write_COM(0xC2); - LCD_Write_DATA(0x0A); - LCD_Write_DATA(0x00); - LCD_Write_COM(0xC3); - LCD_Write_DATA(0x8A); - LCD_Write_DATA(0x2A); - LCD_Write_COM(0xC4); - LCD_Write_DATA(0x8A); - LCD_Write_DATA(0xEE); - - LCD_Write_COM(0xC5); //VCOM - LCD_Write_DATA(0x0E); - - LCD_Write_COM(0x36); //MX, MY, RGB mode - LCD_Write_DATA(0xC8); - - //ST7735R Gamma Sequence - LCD_Write_COM(0xe0); - LCD_Write_DATA(0x0f); - LCD_Write_DATA(0x1a); - LCD_Write_DATA(0x0f); - LCD_Write_DATA(0x18); - LCD_Write_DATA(0x2f); - LCD_Write_DATA(0x28); - LCD_Write_DATA(0x20); - LCD_Write_DATA(0x22); - LCD_Write_DATA(0x1f); - LCD_Write_DATA(0x1b); - LCD_Write_DATA(0x23); - LCD_Write_DATA(0x37); - LCD_Write_DATA(0x00); - - LCD_Write_DATA(0x07); - LCD_Write_DATA(0x02); - LCD_Write_DATA(0x10); - LCD_Write_COM(0xe1); - LCD_Write_DATA(0x0f); - LCD_Write_DATA(0x1b); - LCD_Write_DATA(0x0f); - LCD_Write_DATA(0x17); - LCD_Write_DATA(0x33); - LCD_Write_DATA(0x2c); - LCD_Write_DATA(0x29); - LCD_Write_DATA(0x2e); - LCD_Write_DATA(0x30); - LCD_Write_DATA(0x30); - LCD_Write_DATA(0x39); - LCD_Write_DATA(0x3f); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x07); - LCD_Write_DATA(0x03); - LCD_Write_DATA(0x10); - - LCD_Write_COM(0x2a); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x7f); - LCD_Write_COM(0x2b); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x9f); - - LCD_Write_COM(0xF0); //Enable test command - LCD_Write_DATA(0x01); - LCD_Write_COM(0xF6); //Disable ram power save mode - LCD_Write_DATA(0x00); - - LCD_Write_COM(0x3A); //65k mode - LCD_Write_DATA(0x05); - LCD_Write_COM(0x29);//Display on - break; diff --git a/libraries/UTFT/tft_drivers/st7735/setxy.h b/libraries/UTFT/tft_drivers/st7735/setxy.h deleted file mode 100644 index ff38181..0000000 --- a/libraries/UTFT/tft_drivers/st7735/setxy.h +++ /dev/null @@ -1,13 +0,0 @@ -case ST7735: - LCD_Write_COM(0x2a); - LCD_Write_DATA(x1>>8); - LCD_Write_DATA(x1); - LCD_Write_DATA(x2>>8); - LCD_Write_DATA(x2); - LCD_Write_COM(0x2b); - LCD_Write_DATA(y1>>8); - LCD_Write_DATA(y1); - LCD_Write_DATA(y2>>8); - LCD_Write_DATA(y2); - LCD_Write_COM(0x2c); - break; diff --git a/libraries/UTFT/tft_drivers/st7735s/initlcd.h b/libraries/UTFT/tft_drivers/st7735s/initlcd.h deleted file mode 100644 index d28296d..0000000 --- a/libraries/UTFT/tft_drivers/st7735s/initlcd.h +++ /dev/null @@ -1,98 +0,0 @@ -case ST7735S: - LCD_Write_COM(0x11);//Sleep exit - delay(120); - - //ST7735R Frame Rate - LCD_Write_COM(0xB1); - LCD_Write_DATA(0x05); - LCD_Write_DATA(0x3C); - LCD_Write_DATA(0x3C); - LCD_Write_COM(0xB2); - LCD_Write_DATA(0x05); - LCD_Write_DATA(0x3C); - LCD_Write_DATA(0x3C); - LCD_Write_COM(0xB3); - LCD_Write_DATA(0x05); - LCD_Write_DATA(0x3C); - LCD_Write_DATA(0x3C); - LCD_Write_DATA(0x05); - LCD_Write_DATA(0x3C); - LCD_Write_DATA(0x3C); - - LCD_Write_COM(0xB4); //Column inversion - LCD_Write_DATA(0x03); - - //ST7735R Power Sequence - LCD_Write_COM(0xC0); - LCD_Write_DATA(0x28); - LCD_Write_DATA(0x08); - LCD_Write_DATA(0x04); - LCD_Write_COM(0xC1); - LCD_Write_DATA(0xC0); - LCD_Write_COM(0xC2); - LCD_Write_DATA(0x0D); - LCD_Write_DATA(0x00); - LCD_Write_COM(0xC3); - LCD_Write_DATA(0x8D); - LCD_Write_DATA(0x2A); - LCD_Write_COM(0xC4); - LCD_Write_DATA(0x8D); - LCD_Write_DATA(0xEE); - - LCD_Write_COM(0xC5); //VCOM - LCD_Write_DATA(0x1A); - - LCD_Write_COM(0x36); //MX, MY, RGB mode - LCD_Write_DATA(0xC0); - - //ST7735R Gamma Sequence - LCD_Write_COM(0xE0); - LCD_Write_DATA(0x03); - LCD_Write_DATA(0x22); - LCD_Write_DATA(0x07); - LCD_Write_DATA(0x0A); - LCD_Write_DATA(0x2E); - LCD_Write_DATA(0x30); - LCD_Write_DATA(0x25); - LCD_Write_DATA(0x2A); - LCD_Write_DATA(0x28); - LCD_Write_DATA(0x26); - LCD_Write_DATA(0x2E); - LCD_Write_DATA(0x3A); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x01); - LCD_Write_DATA(0x03); - LCD_Write_DATA(0x13); - LCD_Write_COM(0xE1); - LCD_Write_DATA(0x04); - LCD_Write_DATA(0x16); - LCD_Write_DATA(0x06); - LCD_Write_DATA(0x0D); - LCD_Write_DATA(0x2D); - LCD_Write_DATA(0x26); - LCD_Write_DATA(0x23); - LCD_Write_DATA(0x27); - LCD_Write_DATA(0x27); - LCD_Write_DATA(0x25); - LCD_Write_DATA(0x2D); - LCD_Write_DATA(0x3B); - LCD_Write_DATA(0x00); - LCD_Write_DATA(0x01); - LCD_Write_DATA(0x04); - LCD_Write_DATA(0x13); - - //LCD_Write_COM(0x2A); - //LCD_Write_DATA(0x00); - //LCD_Write_DATA(0x00); - //LCD_Write_DATA(0x00); - //LCD_Write_DATA(0x7F); - //LCD_Write_COM(0x2B); - //LCD_Write_DATA(0x00); - //LCD_Write_DATA(0x00); - //LCD_Write_DATA(0x00); - //LCD_Write_DATA(0x9F); - - LCD_Write_COM(0x3A); //65k mode - LCD_Write_DATA(0x05); - LCD_Write_COM(0x29);//Display on - break; diff --git a/libraries/UTFT/tft_drivers/st7735s/setxy.h b/libraries/UTFT/tft_drivers/st7735s/setxy.h deleted file mode 100644 index b7a1c64..0000000 --- a/libraries/UTFT/tft_drivers/st7735s/setxy.h +++ /dev/null @@ -1,13 +0,0 @@ -case ST7735S: - LCD_Write_COM(0x2a); - LCD_Write_DATA(x1>>8); - LCD_Write_DATA(x1); - LCD_Write_DATA(x2>>8); - LCD_Write_DATA(x2); - LCD_Write_COM(0x2b); - LCD_Write_DATA(y1>>8); - LCD_Write_DATA(y1); - LCD_Write_DATA(y2>>8); - LCD_Write_DATA(y2); - LCD_Write_COM(0x2c); - break; diff --git a/libraries/UTFT/version.txt b/libraries/UTFT/version.txt deleted file mode 100644 index cbef4b4..0000000 --- a/libraries/UTFT/version.txt +++ /dev/null @@ -1,65 +0,0 @@ -Version: - 1.0 12 Feb 2012 - initial release - 1.1 09 Apr 2012 - added support for more display modules - added support for String objects to print() - fixed a bug in printNumF() - added optional minimum length and filler character to pintNumI() and printNumF() - added option to disable unneeded controller chip code to minimize memory use - 1.2 14 Apr 2012 - added support for more display modules - added getDisplayXSize() and getDisplayYSize() - 1.3 03 Jun 2012 - added support for more display modules - fixed a bug in the ITDB02-25H init - 2.0 21 Jan 2013 - added support for Arduino Due and Arduino Leonardo - added support for the "AquaLEDSource All in One Super Screw Shield" on chipKit Max32 - added support for more display modules - fixed a bug in printNumF() - optimized drawLine() - optimized 16bit data transfer - optimized some 8bit data transfer - added option to use pre-defined RGB565 values with setColor(), setBackColor() and fillScr() - added functions getColor(), getBackColor(), getFont(), getFontXsize() and getFontYsize() - added 16 VGA standard colors as pre-defined color literal - rearranged the manual to keep related functions grouped together - 2.01 05 Feb 2013 - fixed a bug that only shows up on linux-based systems - 2.1 29 Mar 2013 - added support for Electronics Lees 3.2" display shield Rev B on Arduinos - fixed a bug that only shows up on some linux-based systems - added built-in support for using display shields designed for Arduino Uno on Arduino Mega - changed license to CC BY-NC-SA 3.0 - 2.2 01 May 2013 - added support for ElecFreaks TFT01-5.0 and TFT01-7.0 - added support for chipKit uC32 - restructured files slightly - 2.3 08 May 2013 - added support for transparent text background - fixed a bug in printNumF() - 2.4 11 May 2013 - added basic support for multiple display modules from Coldtears - 2.41 12 May 2013 - made some changes to facilitate the use of add-on libraries - 2.42 17 Jun 2013 - fixed a small bug in drawBitmap() - fixed a bug in the 16-bit Arduino Due driver - 2.5 25 Jul 2013 - fixed a bug where some lines were 1 pixel too short - fixed a bug in the init code for 7" modules that were only visible in portrait mode - added basic support for more display modules from Coldtears - updated ImageConverter565 to v2.0 - added ImgConv v1.0 - Command line image converter - added manual for image converters - fixed some omissions in memorysaver.h - 2.51 02 Aug 2013 - updated ImageConverter565 to v2.1 - fixed a typo in the tools manual name - 2.6 07 Sep 2013 - added support for 4 more ElecFreaks display modules - added support for Watterott electronics MI0283QT-9A display module - fixed a bug in the "Arduino (ARM)/UTFT_Demo_480x272" example - 2.7 03 Nov 2013 - added support Bobuino (ATmega1284P) - optimized Arduino Due driver slightly - 2.71 06 Dec 2013 - added support for ElecFreaks TFT01-4.3 - added support for Coldtears 3.5" and 4.0" modules - minor changes to the library constructor - removed unused variables - 2.72 12 Dec 2013 - added support for ElecFreaks TFT-2.4 v1.2 - 2.73 16 Feb 2014 - added support for Teensy 3.x Boards - added support for three display modules from ElecHouse - minor bugfixes - added three new functions for CPLD-based displays - 2.74 20 Feb 2014 - fixed a bug in the serial driver - 2.75 28 Mar 2014 - added support for Coldtears 5" and 7" CPLD modules - 2.76 04 May 2014 - added support for several display modules from DisplayModule - 2.77 24 May 2014 - fixed a bug with the ElecHouse 7" display and shield combination - 2.78 08 Sep 2014 - fixed compatibility-issues with Arduino 1.5.7 - diff --git a/libraries/UTFT_Buttons/License - CC BY-NC-SA 3.0 - Legal.pdf b/libraries/UTFT_Buttons/License - CC BY-NC-SA 3.0 - Legal.pdf deleted file mode 100644 index ed326c9..0000000 Binary files a/libraries/UTFT_Buttons/License - CC BY-NC-SA 3.0 - Legal.pdf and /dev/null differ diff --git a/libraries/UTFT_Buttons/License - CC BY-NC-SA 3.0 - Summary.pdf b/libraries/UTFT_Buttons/License - CC BY-NC-SA 3.0 - Summary.pdf deleted file mode 100644 index b35e677..0000000 Binary files a/libraries/UTFT_Buttons/License - CC BY-NC-SA 3.0 - Summary.pdf and /dev/null differ diff --git a/libraries/UTFT_Buttons/UTFT_Buttons.cpp b/libraries/UTFT_Buttons/UTFT_Buttons.cpp deleted file mode 100644 index 11345e1..0000000 --- a/libraries/UTFT_Buttons/UTFT_Buttons.cpp +++ /dev/null @@ -1,269 +0,0 @@ -/* - UTFT_Buttons.cpp - Add-on Library for UTFT: Buttons - Copyright (C)2013 Henning Karlsen. All right reserved - - This library adds simple but easy to use buttons to extend the use - of the UTFT and UTouch libraries. - - You can always find the latest version of the library at - http://electronics.henningkarlsen.com/ - - If you make any modifications or improvements to the code, I would - appreciate that you share the code with me so that I might include - it in the next release. I can be contacted through - http://electronics.henningkarlsen.com/contact.php. - - This library is free software; you can redistribute it and/or - modify it under the terms of the CC BY-NC-SA 3.0 license. - Please see the included documents for further information. -*/ - -#include "UTFT_Buttons.h" -#include -#include - -UTFT_Buttons::UTFT_Buttons(UTFT *ptrUTFT, UTouch *ptrUTouch) -{ - _UTFT = ptrUTFT; - _UTouch = ptrUTouch; - deleteAllButtons(); - _color_text = VGA_WHITE; - _color_text_inactive = VGA_GRAY; - _color_background = VGA_BLUE; - _color_border = VGA_WHITE; - _color_hilite = VGA_RED; - _font_text = NULL; - _font_symbol = NULL; -} - -int UTFT_Buttons::addButton(uint16_t x, uint16_t y, uint16_t width, uint16_t height, char *label, uint16_t flags) -{ - int btcnt = 0; - - while (((buttons[btcnt].flags & BUTTON_UNUSED) == 0) and (btcntgetFont();; - word _current_color = _UTFT->getColor(); - word _current_back = _UTFT->getBackColor(); - - if (buttons[buttonID].flags & BUTTON_BITMAP) - { - _UTFT->drawBitmap(buttons[buttonID].pos_x, buttons[buttonID].pos_y, buttons[buttonID].width, buttons[buttonID].height, buttons[buttonID].data); - if (!(buttons[buttonID].flags & BUTTON_NO_BORDER)) - { - if ((buttons[buttonID].flags & BUTTON_DISABLED)) - _UTFT->setColor(_color_text_inactive); - else - _UTFT->setColor(_color_border); - _UTFT->drawRect(buttons[buttonID].pos_x, buttons[buttonID].pos_y, buttons[buttonID].pos_x+buttons[buttonID].width, buttons[buttonID].pos_y+buttons[buttonID].height); - } - } - else - { - _UTFT->setColor(_color_background); - _UTFT->fillRoundRect(buttons[buttonID].pos_x, buttons[buttonID].pos_y, buttons[buttonID].pos_x+buttons[buttonID].width, buttons[buttonID].pos_y+buttons[buttonID].height); - _UTFT->setColor(_color_border); - _UTFT->drawRoundRect(buttons[buttonID].pos_x, buttons[buttonID].pos_y, buttons[buttonID].pos_x+buttons[buttonID].width, buttons[buttonID].pos_y+buttons[buttonID].height); - if (buttons[buttonID].flags & BUTTON_DISABLED) - _UTFT->setColor(_color_text_inactive); - else - _UTFT->setColor(_color_text); - if (buttons[buttonID].flags & BUTTON_SYMBOL) - { - _UTFT->setFont(_font_symbol); - text_x = (buttons[buttonID].width/2) - (_UTFT->getFontXsize()/2) + buttons[buttonID].pos_x; - text_y = (buttons[buttonID].height/2) - (_UTFT->getFontYsize()/2) + buttons[buttonID].pos_y; - } - else - { - _UTFT->setFont(_font_text); - text_x = ((buttons[buttonID].width/2) - ((strlen(buttons[buttonID].label) * _UTFT->getFontXsize())/2)) + buttons[buttonID].pos_x; - text_y = (buttons[buttonID].height/2) - (_UTFT->getFontYsize()/2) + buttons[buttonID].pos_y; - } - _UTFT->setBackColor(_color_background); - _UTFT->print(buttons[buttonID].label, text_x, text_y); - if ((buttons[buttonID].flags & BUTTON_SYMBOL) and (buttons[buttonID].flags & BUTTON_SYMBOL_REP_3X)) - { - _UTFT->print(buttons[buttonID].label, text_x-_UTFT->getFontXsize(), text_y); - _UTFT->print(buttons[buttonID].label, text_x+_UTFT->getFontXsize(), text_y); - } - } - _UTFT->setFont(_font_current); - _UTFT->setColor(_current_color); - _UTFT->setBackColor(_current_back); -} - -void UTFT_Buttons::enableButton(int buttonID, boolean redraw) -{ - if (!(buttons[buttonID].flags & BUTTON_UNUSED)) - { - buttons[buttonID].flags = buttons[buttonID].flags & ~BUTTON_DISABLED; - if (redraw) - drawButton(buttonID); - } -} - -void UTFT_Buttons::disableButton(int buttonID, boolean redraw) -{ - if (!(buttons[buttonID].flags & BUTTON_UNUSED)) - { - buttons[buttonID].flags = buttons[buttonID].flags | BUTTON_DISABLED; - if (redraw) - drawButton(buttonID); - } -} - -void UTFT_Buttons::relabelButton(int buttonID, char *label, boolean redraw) -{ - if (!(buttons[buttonID].flags & BUTTON_UNUSED)) - { - buttons[buttonID].label = label; - if (redraw) - drawButton(buttonID); - } -} - -boolean UTFT_Buttons::buttonEnabled(int buttonID) -{ - return !(buttons[buttonID].flags & BUTTON_DISABLED); -} - -void UTFT_Buttons::deleteButton(int buttonID) -{ - if (!(buttons[buttonID].flags & BUTTON_UNUSED)) - buttons[buttonID].flags = BUTTON_UNUSED; -} - -void UTFT_Buttons::deleteAllButtons() -{ - for (int i=0;idataAvailable() == true) - { - _UTouch->read(); - int result = -1; - int touch_x = _UTouch->getX(); - int touch_y = _UTouch->getY(); - word _current_color = _UTFT->getColor(); - - for (int i=0;i= (int)buttons[i].pos_x) and (touch_x <= (int)(buttons[i].pos_x + buttons[i].width)) and (touch_y >= (int)buttons[i].pos_y) and (touch_y <= (int)(buttons[i].pos_y + buttons[i].height))) - result = i; - } - } - if (result != -1) - { - if (!(buttons[result].flags & BUTTON_NO_BORDER)) - { - _UTFT->setColor(_color_hilite); - if (buttons[result].flags & BUTTON_BITMAP) - _UTFT->drawRect(buttons[result].pos_x, buttons[result].pos_y, buttons[result].pos_x+buttons[result].width, buttons[result].pos_y+buttons[result].height); - else - _UTFT->drawRoundRect(buttons[result].pos_x, buttons[result].pos_y, buttons[result].pos_x+buttons[result].width, buttons[result].pos_y+buttons[result].height); - } - } - - while (_UTouch->dataAvailable() == true) {}; - - if (result != -1) - { - if (!(buttons[result].flags & BUTTON_NO_BORDER)) - { - _UTFT->setColor(_color_border); - if (buttons[result].flags & BUTTON_BITMAP) - _UTFT->drawRect(buttons[result].pos_x, buttons[result].pos_y, buttons[result].pos_x+buttons[result].width, buttons[result].pos_y+buttons[result].height); - else - _UTFT->drawRoundRect(buttons[result].pos_x, buttons[result].pos_y, buttons[result].pos_x+buttons[result].width, buttons[result].pos_y+buttons[result].height); - } - } - - _UTFT->setColor(_current_color); - return result; - } - else - return -1; -} - -void UTFT_Buttons::setTextFont(uint8_t* font) -{ - _font_text = font; -} - -void UTFT_Buttons::setSymbolFont(uint8_t* font) -{ - _font_symbol = font; -} - -void UTFT_Buttons::setButtonColors(word atxt, word iatxt, word brd, word brdhi, word back) -{ - _color_text = atxt; - _color_text_inactive = iatxt; - _color_background = back; - _color_border = brd; - _color_hilite = brdhi; -} diff --git a/libraries/UTFT_Buttons/UTFT_Buttons.h b/libraries/UTFT_Buttons/UTFT_Buttons.h deleted file mode 100644 index 678c847..0000000 --- a/libraries/UTFT_Buttons/UTFT_Buttons.h +++ /dev/null @@ -1,84 +0,0 @@ -/* - UTFT_Buttons.h - Add-on Library for UTFT: Buttons - Copyright (C)2013 Henning Karlsen. All right reserved - - This library adds simple but easy to use buttons to extend the use - of the UTFT and UTouch libraries. - - You can always find the latest version of the library at - http://electronics.henningkarlsen.com/ - - If you make any modifications or improvements to the code, I would - appreciate that you share the code with me so that I might include - it in the next release. I can be contacted through - http://electronics.henningkarlsen.com/contact.php. - - This library is free software; you can redistribute it and/or - modify it under the terms of the CC BY-NC-SA 3.0 license. - Please see the included documents for further information. -*/ - -#ifndef UTFT_Buttons_h -#define UTFT_Buttons_h - -#if defined(__AVR__) - #include "Arduino.h" -#elif defined(__PIC32MX__) - #include "WProgram.h" -#elif defined(__arm__) - #include "Arduino.h" -#endif - -#include -#include -#if ((!defined(UTFT_VERSION)) || (UTFT_VERSION<241)) - #error : You will need UTFT v2.41 or higher to use this add-on library... -#endif - -#define MAX_BUTTONS 20 // Maximum number of buttons available at one time - -// Define presets for button status -#define BUTTON_DISABLED 0x0001 -#define BUTTON_SYMBOL 0x0002 -#define BUTTON_SYMBOL_REP_3X 0x0004 -#define BUTTON_BITMAP 0x0008 -#define BUTTON_NO_BORDER 0x0010 -#define BUTTON_UNUSED 0x8000 - -typedef struct -{ - uint16_t pos_x, pos_y, width, height; - uint16_t flags; - char *label; - bitmapdatatype data; -} button_type; - -class UTFT_Buttons -{ - public: - UTFT_Buttons(UTFT *ptrUTFT, UTouch *ptrUTouch); - - int addButton(uint16_t x, uint16_t y, uint16_t width, uint16_t height, char *label, uint16_t flags=0); - int addButton(uint16_t x, uint16_t y, uint16_t width, uint16_t height, bitmapdatatype data, uint16_t flags=0); - void drawButtons(); - void drawButton(int buttonID); - void enableButton(int buttonID, boolean redraw=false); - void disableButton(int buttonID, boolean redraw=false); - void relabelButton(int buttonID, char *label, boolean redraw=false); - boolean buttonEnabled(int buttonID); - void deleteButton(int buttonID); - void deleteAllButtons(); - int checkButtons(); - void setTextFont(uint8_t* font); - void setSymbolFont(uint8_t* font); - void setButtonColors(word atxt, word iatxt, word brd, word brdhi, word back); - - protected: - UTFT *_UTFT; - UTouch *_UTouch; - button_type buttons[MAX_BUTTONS]; - word _color_text, _color_text_inactive, _color_background, _color_border, _color_hilite; - uint8_t *_font_text, *_font_symbol; -}; - -#endif diff --git a/libraries/UTFT_Buttons/examples/UTFT_Buttons_Bitmap_Demo/UTFT_Buttons_Bitmap_Demo.ino b/libraries/UTFT_Buttons/examples/UTFT_Buttons_Bitmap_Demo/UTFT_Buttons_Bitmap_Demo.ino deleted file mode 100644 index f778f0d..0000000 --- a/libraries/UTFT_Buttons/examples/UTFT_Buttons_Bitmap_Demo/UTFT_Buttons_Bitmap_Demo.ino +++ /dev/null @@ -1,130 +0,0 @@ -// UTFT_Buttons_Bitmap_Demo (C)2013 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// A small demo to demonstrate the use of some of the -// functions of the UTFT_Buttons add-on library. -// -// This demo was made for modules with a screen resolution -// of 320x240 pixels, but should work on larger screens as -// well. -// -// This demo will not work on Arduino 2009/Uno/Leonardo -// due to the size of the images. -// -// This program requires both the UTFT and UTouch libraries -// in addition to the UTFT_Buttons add-on library. -// - -// This code block is only needed to support multiple -// MCU architectures in a single sketch. -#if defined(__AVR__) - #define imagedatatype unsigned int -#elif defined(__PIC32MX__) - #define imagedatatype unsigned short -#elif defined(__arm__) - #define imagedatatype unsigned short -#endif -// End of multi-architecture block - -#include -#include -#include - -// Declare which fonts we will be using -extern uint8_t BigFont[]; - -// Declare which bitmaps we will be using -extern imagedatatype cat[]; -extern imagedatatype dog[]; -extern imagedatatype bird[]; -extern imagedatatype monkey[]; - -// Set up UTFT... -// Set the pins to the correct ones for your development board -// ----------------------------------------------------------- -// Standard Arduino 2009/Uno/Leonardo shield : NOT SUPPORTED DUE TO LACK OF MEMORY -// Standard Arduino Mega/Due shield : ,38,39,40,41 -// CTE TFT LCD/SD Shield for Arduino Due : ,25,26,27,28 -// Standard chipKit Uno32/uC32 : ,34,35,36,37 -// Standard chipKit Max32 : ,82,83,84,85 -// AquaLEDSource All in One Super Screw Shield : ,82,83,84,85 -// -// Remember to change the model parameter to suit your display module! -UTFT myGLCD(ITDB32S,38,39,40,41); - -// Set up UTouch... -// Set the pins to the correct ones for your development board -// ----------------------------------------------------------- -// Standard Arduino 2009/Uno/Leonardo shield : NOT SUPPORTED DUE TO LACK OF MEMORY -// Standard Arduino Mega/Due shield : 6,5,4,3,2 -// CTE TFT LCD/SD Shield for Arduino Due : 6,5,4,3,2 -// Standard chipKit Uno32/uC32 : 20,21,22,23,24 -// Standard chipKit Max32 : 62,63,64,65,66 -// AquaLEDSource All in One Super Screw Shield : 62,63,64,65,66 -UTouch myTouch(6,5,4,3,2); - -// Finally we set up UTFT_Buttons :) -UTFT_Buttons myButtons(&myGLCD, &myTouch); - -void setup() -{ - myGLCD.InitLCD(); - myGLCD.clrScr(); - myGLCD.setFont(BigFont); - - myTouch.InitTouch(); - myTouch.setPrecision(PREC_MEDIUM); - - myButtons.setTextFont(BigFont); -} - -void loop() -{ - int but1, but2, but3, but4, but5, pressed_button; - - but1 = myButtons.addButton( 10, 10, 80, 60, cat); - but2 = myButtons.addButton( 120, 10, 80, 60, dog); - but3 = myButtons.addButton( 10, 80, 80, 60, bird); - but4 = myButtons.addButton( 120, 80, 80, 60, monkey, BUTTON_NO_BORDER); - but5 = myButtons.addButton( 10, 150, 190, 30, "Disable Dog"); - myButtons.drawButtons(); - - myGLCD.print("You pressed:", 10, 200); - myGLCD.setColor(VGA_BLACK); - myGLCD.setBackColor(VGA_WHITE); - myGLCD.print("None ", 10, 220); - - while(1) - { - if (myTouch.dataAvailable() == true) - { - pressed_button = myButtons.checkButtons(); - - if (pressed_button==but5) - if (myButtons.buttonEnabled(but2)) - { - myButtons.disableButton(but2); - myButtons.relabelButton(but5, "Enable Dog", true); - myButtons.drawButton(but2); - } - else - { - myButtons.enableButton(but2); - myButtons.relabelButton(but5, "Disable Dog", true); - myButtons.drawButton(but2); - } - - if (pressed_button==but1) - myGLCD.print("Cat ", 10, 220); - if (pressed_button==but2) - myGLCD.print("Dog ", 10, 220); - if (pressed_button==but3) - myGLCD.print("Bird ", 10, 220); - if (pressed_button==but4) - myGLCD.print("Monkey ", 10, 220); - if (pressed_button==-1) - myGLCD.print("None ", 10, 220); - } - } -} - diff --git a/libraries/UTFT_Buttons/examples/UTFT_Buttons_Bitmap_Demo/bird.c b/libraries/UTFT_Buttons/examples/UTFT_Buttons_Bitmap_Demo/bird.c deleted file mode 100644 index ec21c18..0000000 --- a/libraries/UTFT_Buttons/examples/UTFT_Buttons_Bitmap_Demo/bird.c +++ /dev/null @@ -1,314 +0,0 @@ -// Generated by : ImageConverter 565 v1.2 -// Dimensions : 80x60 pixels -// Size : 9 600 Bytes - -#if defined(__AVR__) - #include -#elif defined(__PIC32MX__) - #define PROGMEM -#elif defined(__arm__) - #define PROGMEM -#endif - -const unsigned short bird[0x12C0] PROGMEM ={ -0x71A0, 0x6980, 0x7A20, 0xAB61, 0xDC82, 0xECC1, 0xF4C0, 0xECE1, 0xED03, 0xD4C5, 0x9BA5, 0x7AC2, 0x9320, 0xBC22, 0xC421, 0xBBE0, // 0x0010 (16) -0xB3E0, 0xA3A1, 0x7A81, 0x5180, 0x4140, 0x51A1, 0x6A82, 0x8303, 0x7281, 0x61A0, 0x5980, 0x5961, 0x5101, 0x5901, 0x5921, 0x6140, // 0x0020 (32) -0x69E0, 0x92E1, 0xAB42, 0xAB00, 0xAB60, 0xBBE3, 0xAB62, 0x8A40, 0x8A20, 0xB382, 0xE504, 0xF583, 0xF561, 0xD4A0, 0xABA0, 0xA361, // 0x0030 (48) -0xBBA1, 0xC381, 0xB320, 0xA320, 0x9B41, 0x8B01, 0x82E1, 0x7AA2, 0x7264, 0x6A43, 0x6A20, 0x82A0, 0xAB80, 0xBBE1, 0xAB61, 0x8A80, // 0x0040 (64) -0x71E0, 0x61C1, 0x6A01, 0x7262, 0x6A81, 0x62C1, 0x62E1, 0x6B02, 0x7322, 0x6B22, 0x62C1, 0x5260, 0x4A61, 0x4A62, 0x4A42, 0x4A02, // 0x0050 (80) -0x6160, 0x6160, 0x71E0, 0x9B21, 0xD441, 0xE4A1, 0xECC1, 0xE4C2, 0xE4E3, 0xD4C5, 0xAC06, 0x8B23, 0xA381, 0xC442, 0xC421, 0xBBA0, // 0x0060 (96) -0xBB80, 0xAB40, 0x7AA1, 0x51C0, 0x3140, 0x4161, 0x5A21, 0x7262, 0x7241, 0x61A0, 0x5940, 0x5120, 0x48E0, 0x48E0, 0x5120, 0x61A0, // 0x0070 (112) -0x7A60, 0x9B20, 0xAB41, 0x9AE0, 0xAB60, 0xC443, 0xB3E2, 0x8AC0, 0x92A0, 0xBBC2, 0xE503, 0xF563, 0xE541, 0xCC80, 0x9BA0, 0x9B60, // 0x0080 (128) -0xAB80, 0xB380, 0xAB40, 0x9B21, 0x8B01, 0x82E1, 0x7AC2, 0x7AC3, 0x7263, 0x7262, 0x7240, 0x8AA0, 0xB360, 0xCC22, 0xCC02, 0xB341, // 0x0090 (144) -0x9A40, 0x89A0, 0x79C0, 0x71E0, 0x6241, 0x62A1, 0x6301, 0x6321, 0x6B41, 0x6B41, 0x6301, 0x5281, 0x4241, 0x4A43, 0x4A24, 0x4A04, // 0x00A0 (160) -0x59A1, 0x59A1, 0x6A00, 0x9301, 0xC421, 0xD481, 0xD461, 0xD462, 0xD4A4, 0xCCC5, 0xB445, 0x9B62, 0xABA1, 0xC483, 0xC441, 0xA360, // 0x00B0 (176) -0x92C0, 0x9B01, 0x82E2, 0x5A20, 0x3980, 0x3961, 0x49C3, 0x5A05, 0x6A24, 0x61E2, 0x59A2, 0x5141, 0x4920, 0x4920, 0x5160, 0x69C0, // 0x00C0 (192) -0x8AA0, 0x9B20, 0x9B00, 0x92A0, 0xAB80, 0xC483, 0xB423, 0x9320, 0x8AE0, 0xB3C2, 0xDCE3, 0xE523, 0xD4E2, 0xB441, 0x8BA0, 0x8340, // 0x00D0 (208) -0xA380, 0xB3C1, 0xB3C2, 0x9B42, 0x82E1, 0x72A2, 0x7AC2, 0x7AE3, 0x7AA3, 0x7A82, 0x7A81, 0x8AA0, 0xAB20, 0xD401, 0xDC61, 0xD3C0, // 0x00E0 (224) -0xC280, 0xA9A0, 0x9140, 0x8180, 0x71E1, 0x6A81, 0x62E1, 0x6320, 0x6320, 0x6B41, 0x6302, 0x5261, 0x4201, 0x4A03, 0x4A25, 0x4A05, // 0x00F0 (240) -0x59E3, 0x59C2, 0x61E1, 0x82A1, 0xABC1, 0xBC01, 0xBBE1, 0xBBE3, 0xC424, 0xC465, 0xBC25, 0xA361, 0xA360, 0xBC44, 0xB422, 0x8B00, // 0x0100 (256) -0x7280, 0x7282, 0x7A83, 0x61E3, 0x5162, 0x4121, 0x4160, 0x51E2, 0x6221, 0x6A02, 0x61A2, 0x5122, 0x4902, 0x5101, 0x5980, 0x7200, // 0x0110 (272) -0x8A81, 0x9281, 0x8A60, 0x92A0, 0xB3C1, 0xC483, 0xAC03, 0x8B21, 0x8AE0, 0xABC3, 0xD4A4, 0xDCC4, 0xBC43, 0x9381, 0x7B21, 0x7B00, // 0x0120 (288) -0x9340, 0xABC1, 0xB3E2, 0x9B41, 0x7AA1, 0x6A82, 0x72A3, 0x7AC4, 0x7AA3, 0x7A82, 0x7A81, 0x8280, 0x9AC0, 0xBBA1, 0xDC42, 0xDBC1, // 0x0130 (304) -0xCA80, 0xB180, 0x9900, 0x9141, 0x89C2, 0x7A42, 0x6AA0, 0x62A0, 0x6300, 0x6301, 0x62C2, 0x5242, 0x49E2, 0x4A03, 0x5A24, 0x5A25, // 0x0140 (320) -0x59E1, 0x51A0, 0x59C0, 0x7280, 0x9B60, 0xA3A0, 0xAB81, 0xABA3, 0xABC4, 0xABE4, 0xAC04, 0xA382, 0x9321, 0x9BA3, 0x9362, 0x6A80, // 0x0150 (336) -0x51C0, 0x5A01, 0x6222, 0x59E3, 0x49A2, 0x3121, 0x3141, 0x5203, 0x6284, 0x6223, 0x51C2, 0x4181, 0x4981, 0x4960, 0x5940, 0x79A1, // 0x0160 (352) -0x81E1, 0x8A21, 0x8A40, 0x9AE0, 0xBC01, 0xBC42, 0x9BA2, 0x8B21, 0x9322, 0xB3E4, 0xD4A4, 0xCC83, 0xAC02, 0x8B41, 0x7AC2, 0x7281, // 0x0170 (368) -0x82C0, 0xA360, 0xB3C1, 0x9B40, 0x7AA0, 0x7261, 0x7A83, 0x82C4, 0x8283, 0x7A62, 0x7281, 0x7AA1, 0x8AA0, 0xA321, 0xC3A2, 0xCB82, // 0x0180 (384) -0xB261, 0xA160, 0xA100, 0xA121, 0x99A2, 0x9222, 0x8261, 0x6A60, 0x62A1, 0x5A82, 0x5242, 0x5202, 0x5202, 0x6202, 0x6A23, 0x7223, // 0x0190 (400) -0x69E0, 0x61E0, 0x6A40, 0x7AE0, 0x8B81, 0x9380, 0x9B61, 0xA383, 0x9B63, 0x9323, 0x9B63, 0x9363, 0x82E1, 0x7281, 0x6241, 0x51E0, // 0x01A0 (416) -0x41C0, 0x39A1, 0x4A03, 0x49E4, 0x39A3, 0x4289, 0x5452, 0x5538, 0x4D9C, 0x3CF9, 0x3C33, 0x3B4D, 0x4286, 0x41A1, 0x4140, 0x5960, // 0x01B0 (432) -0x71C0, 0x9261, 0x9AE0, 0xAB40, 0xBC01, 0xB401, 0x9361, 0x8302, 0x9364, 0xAC25, 0xC483, 0xC4A2, 0xBC62, 0xABC2, 0x9342, 0x82A1, // 0x01C0 (448) -0x8AA0, 0x9B20, 0xB381, 0x9B20, 0x7A80, 0x7260, 0x8282, 0x8AC4, 0x8A83, 0x8262, 0x7281, 0x7A81, 0x7A80, 0x92C0, 0xB322, 0xBB22, // 0x01D0 (464) -0xAA41, 0x9980, 0xA121, 0xA942, 0xA982, 0xA202, 0x8A41, 0x7241, 0x6A42, 0x5A22, 0x51E2, 0x5A02, 0x6A22, 0x7242, 0x8221, 0x8A22, // 0x01E0 (480) -0x8A80, 0x92C0, 0x8B60, 0x93C1, 0x8BA0, 0x8B60, 0x9B60, 0xABC3, 0x9383, 0x7AC1, 0x7AC2, 0x7AE3, 0x6A81, 0x5200, 0x49A1, 0x4182, // 0x01F0 (496) -0x3962, 0x39A3, 0x3182, 0x3248, 0x4C55, 0x3D1C, 0x149E, 0x047F, 0x0C5D, 0x043C, 0x04BE, 0x153E, 0x255D, 0x3497, 0x4B0B, 0x51C2, // 0x0200 (512) -0x82A2, 0xA342, 0xB361, 0xAB60, 0xABA1, 0x9B41, 0x7AC2, 0x72A3, 0x8B66, 0x9BE6, 0xA403, 0xB422, 0xC463, 0xC463, 0xB402, 0xA361, // 0x0210 (528) -0x9B20, 0xA361, 0xB382, 0x9AE0, 0x7A40, 0x7A20, 0x8280, 0x9AE2, 0x9AC2, 0x9281, 0x7A61, 0x7A81, 0x7A80, 0x8AA0, 0xAAE2, 0xBB02, // 0x0220 (544) -0xB281, 0xA9E0, 0xB182, 0xB162, 0xA982, 0xA203, 0x8A42, 0x7221, 0x6222, 0x5A22, 0x6202, 0x6A21, 0x7A61, 0x8A61, 0x9241, 0x9221, // 0x0230 (560) -0xB360, 0xB3E1, 0xB462, 0xA441, 0x83A0, 0x8360, 0xA3E1, 0xBC64, 0xA3E4, 0x7AE1, 0x6A61, 0x6A82, 0x5A41, 0x49E1, 0x4182, 0x4163, // 0x0240 (576) -0x4142, 0x3143, 0x322A, 0x43B5, 0x2C3B, 0x0BDC, 0x03BD, 0x039D, 0x03BC, 0x03DC, 0x0C3E, 0x043E, 0x0C7E, 0x253F, 0x359D, 0x5515, // 0x0250 (592) -0x8C29, 0xBC25, 0xB3A2, 0xA300, 0x9302, 0x7A62, 0x6A02, 0x6A64, 0x8368, 0x8BA7, 0x8343, 0x9341, 0xB3E2, 0xC443, 0xC462, 0xB401, // 0x0260 (608) -0xB3E2, 0xB3C3, 0xBBA3, 0xA2E1, 0x7A20, 0x7A20, 0x92A0, 0xAB42, 0xBB63, 0xB323, 0x8AC2, 0x7A61, 0x7A60, 0x8A80, 0xAAC1, 0xC302, // 0x0270 (624) -0xCB02, 0xC261, 0xC1C2, 0xB162, 0xA181, 0x99E2, 0x8242, 0x6A22, 0x5A22, 0x6243, 0x6A62, 0x7A61, 0x8A80, 0x9281, 0x9A42, 0x9A02, // 0x0280 (640) -0xCC40, 0xD4A1, 0xBC61, 0x9BC0, 0x8380, 0x8380, 0xAC41, 0xD505, 0xC4A3, 0x9361, 0x6261, 0x5A22, 0x6222, 0x59E2, 0x49C3, 0x41E3, // 0x0290 (656) -0x39A0, 0x2A06, 0x33F7, 0x139B, 0x02FA, 0x0B1B, 0x0ADB, 0x0AFB, 0x0AD9, 0x02D9, 0x0B9C, 0x03DC, 0x047C, 0x04BC, 0x04BF, 0x155F, // 0x02A0 (672) -0x2DDE, 0x5DD9, 0x7C8F, 0x7B25, 0x7261, 0x6A20, 0x51E2, 0x62A4, 0x8BA6, 0x9BE6, 0x93A4, 0x8B41, 0x9B80, 0xB3E0, 0xB402, 0xABE3, // 0x02B0 (688) -0xA3C4, 0xABE5, 0xA3A3, 0x92E0, 0x8220, 0x8A00, 0xAAE0, 0xCBE2, 0xD442, 0xB3A1, 0x8B00, 0x82E1, 0x92E1, 0xA301, 0xAB01, 0xC321, // 0x02C0 (704) -0xCB62, 0xCB02, 0xC262, 0xA9C1, 0x99C1, 0x91C2, 0x79E3, 0x69C2, 0x71E1, 0x7A41, 0x82A0, 0x8280, 0x8A80, 0x92A2, 0x9261, 0x8A00, // 0x02D0 (720) -0xDCA0, 0xD4A1, 0xAC00, 0x8B60, 0x7B20, 0x7B40, 0xAC21, 0xDD45, 0xD504, 0xA381, 0x7281, 0x6A63, 0x6A43, 0x6243, 0x6264, 0x4A04, // 0x02E0 (736) -0x4226, 0x53B1, 0x2359, 0x029A, 0x0258, 0x0216, 0x0215, 0x0215, 0x0277, 0x02B8, 0x031B, 0x0B9D, 0x039C, 0x041D, 0x0C5D, 0x045C, // 0x02F0 (752) -0x0CBD, 0x151D, 0x2DBC, 0x4DB8, 0x53AB, 0x4203, 0x4A24, 0x7B06, 0xAC07, 0xC465, 0xBC41, 0xB420, 0xA3E1, 0x9BC2, 0x9BC3, 0x9342, // 0x0300 (768) -0x9343, 0x9B43, 0x9321, 0x8AA0, 0x7A40, 0x8A60, 0xB360, 0xD442, 0xDC82, 0xBBC0, 0x9B20, 0x9B21, 0xB3A2, 0xBBA2, 0xBB61, 0xBB40, // 0x0310 (784) -0xCB80, 0xCB61, 0xC301, 0xB261, 0xA201, 0x89E2, 0x71E2, 0x69C2, 0x71E1, 0x8262, 0x82C0, 0x7AA0, 0x7A60, 0x8261, 0x8A21, 0x81C0, // 0x0320 (800) -0xE4C1, 0xCC61, 0x9360, 0x72C0, 0x6AC0, 0x7B00, 0xAC00, 0xDD24, 0xDD04, 0xB3E1, 0x8B01, 0x7AC3, 0x7AA4, 0x7AA4, 0x7284, 0x6286, // 0x0330 (816) -0x532C, 0x4BD4, 0x12B7, 0x0237, 0x0192, 0x0191, 0x01B2, 0x0214, 0x0296, 0x1319, 0x0B19, 0x0B7A, 0x0B7A, 0x0B9A, 0x039A, 0x03FB, // 0x0340 (832) -0x047D, 0x04FE, 0x04FD, 0x157D, 0x3E1E, 0x4D16, 0x5329, 0x9386, 0xCC66, 0xDCA4, 0xD4A1, 0xD4C0, 0xC460, 0xB3E0, 0xA3A1, 0x9301, // 0x0350 (848) -0x8AC2, 0x8AE2, 0x9301, 0x82A0, 0x7A60, 0x92E0, 0xC401, 0xDC81, 0xDC81, 0xBBA0, 0xA300, 0xAB40, 0xC422, 0xD422, 0xC381, 0xBB20, // 0x0360 (864) -0xC380, 0xCBA0, 0xCBA2, 0xBB42, 0xAAE1, 0x9A81, 0x8241, 0x7201, 0x7A21, 0x8282, 0x7AC1, 0x72A0, 0x7260, 0x7240, 0x7A21, 0x79E0, // 0x0370 (880) -0xE482, 0xBBE1, 0x7AC0, 0x5A40, 0x6260, 0x7AE0, 0xABC0, 0xD4C3, 0xDCE3, 0xBC01, 0x9B41, 0x8AE2, 0x8B04, 0x82E4, 0x7263, 0x6286, // 0x0380 (896) -0x5B6E, 0x2AD1, 0x0A33, 0x01D3, 0x0191, 0x012F, 0x0191, 0x01B2, 0x1235, 0x0235, 0x0298, 0x02F9, 0x033B, 0x03DD, 0x03FD, 0x041D, // 0x0390 (912) -0x0C7C, 0x049C, 0x049D, 0x04FE, 0x0D5E, 0x35BD, 0x5599, 0x7CD0, 0xC4C7, 0xDC61, 0xE4A1, 0xED01, 0xE4E0, 0xCC60, 0xABC0, 0x9320, // 0x03A0 (928) -0x8AC2, 0x9B03, 0xA363, 0xA321, 0x9AE0, 0xAB60, 0xD460, 0xE4C0, 0xD460, 0xB360, 0x9AC0, 0xA320, 0xC401, 0xCC01, 0xBB41, 0xB2E0, // 0x03B0 (944) -0xBB21, 0xC381, 0xC3C2, 0xC3C1, 0xBBC1, 0xB3A1, 0x9B41, 0x92E1, 0x82A1, 0x82A1, 0x72C1, 0x6AC1, 0x6AA0, 0x6A80, 0x7280, 0x7A60, // 0x03C0 (960) -0xD442, 0xAB40, 0x6A40, 0x51E0, 0x6240, 0x72A0, 0x9B40, 0xC422, 0xD4A3, 0xC422, 0x9B21, 0x8AE2, 0x82E3, 0x7AC4, 0x7AE4, 0x5A64, // 0x03D0 (976) -0x7C2E, 0x5BF0, 0x018A, 0x012B, 0x00C9, 0x00C8, 0x00E6, 0x1168, 0x0149, 0x01CE, 0x02B5, 0x0319, 0x039B, 0x0C5D, 0x0C7C, 0x043B, // 0x03E0 (992) -0x047C, 0x049D, 0x049D, 0x049D, 0x0CDD, 0x049B, 0x0C9A, 0x55DA, 0x8D6F, 0xB4C7, 0xDCA2, 0xF4C2, 0xECC2, 0xD482, 0xAC22, 0x9361, // 0x03F0 (1008) -0x92E2, 0xAB43, 0xC3E3, 0xCBE2, 0xC3A0, 0xCBE0, 0xE480, 0xECC0, 0xD460, 0xB380, 0x92C0, 0x9AE0, 0xB380, 0xC381, 0xB300, 0xB2C1, // 0x0400 (1024) -0xBAC2, 0xC343, 0xC3A2, 0xBBC1, 0xC401, 0xCC41, 0xBC21, 0xABC1, 0x9B40, 0x8300, 0x7300, 0x6B00, 0x6AE0, 0x6AA0, 0x6AC0, 0x72E1, // 0x0410 (1040) -0xCC02, 0xA300, 0x7220, 0x61E0, 0x6240, 0x6A40, 0x8280, 0xAB81, 0xC423, 0xAB60, 0x92E1, 0x8AA2, 0x9345, 0x7AE5, 0x6285, 0x8C0D, // 0x0420 (1056) -0xAD75, 0x530D, 0x0083, 0x0042, 0x1083, 0x1082, 0x18E2, 0x0061, 0x00E6, 0x124F, 0x0AF6, 0x039B, 0x0BFC, 0x03FC, 0x03FB, 0x0C1B, // 0x0430 (1072) -0x0C3B, 0x0C7C, 0x047B, 0x049C, 0x0C9B, 0x1CFC, 0x153D, 0x1D1B, 0x3D7A, 0x7574, 0xACE9, 0xDCC4, 0xF4C2, 0xEC61, 0xCC62, 0xAB80, // 0x0440 (1088) -0xA301, 0xB382, 0xD403, 0xE442, 0xE441, 0xEC81, 0xF4C0, 0xECC1, 0xDC81, 0xB3C0, 0x9B00, 0x92C0, 0xA300, 0xB321, 0xB2E1, 0xB2C1, // 0x0450 (1104) -0xBB23, 0xC3A4, 0xC3C2, 0xBBA0, 0xC3E1, 0xD462, 0xD482, 0xC441, 0xABE0, 0x9BA0, 0x8B80, 0x83A0, 0x8360, 0x7300, 0x72E0, 0x6AC1, // 0x0460 (1120) -0xCC22, 0xB380, 0x8AA0, 0x7220, 0x6A20, 0x6A00, 0x7A20, 0xA301, 0xAB61, 0xA301, 0x8A81, 0x8AA3, 0x8283, 0x7AC6, 0x840D, 0x8450, // 0x0470 (1136) -0x52AB, 0x7C30, 0x846F, 0x4AC8, 0x10C0, 0x10E2, 0x0904, 0x0147, 0x11ED, 0x0A71, 0x02F4, 0x03B8, 0x03D9, 0x0378, 0x0BFA, 0x0C1A, // 0x0480 (1152) -0x147B, 0x0C5A, 0x0C7A, 0x0C5A, 0x0439, 0x047A, 0x0499, 0x0CBA, 0x1CDA, 0x455B, 0x5D97, 0x9591, 0xD527, 0xECA1, 0xDC82, 0xC3E1, // 0x0490 (1168) -0xBBC1, 0xCC02, 0xDC42, 0xEC82, 0xECA1, 0xEC81, 0xECA1, 0xECC1, 0xE4A1, 0xCC40, 0xB3A0, 0xA300, 0xAAE0, 0xB2E1, 0xB2C2, 0xBB23, // 0x04A0 (1184) -0xC3C4, 0xCC45, 0xCC83, 0xC401, 0xCBC1, 0xD422, 0xD482, 0xCC82, 0xBC40, 0xAC00, 0x9BE0, 0xA400, 0xA3E0, 0x9BA0, 0x8341, 0x72E0, // 0x04B0 (1200) -0xDC82, 0xCC21, 0xAB40, 0x8240, 0x6A00, 0x6A00, 0x8240, 0xA302, 0xAB63, 0x92A0, 0x8A42, 0x8243, 0x8A84, 0x8308, 0x73AD, 0x7C72, // 0x04C0 (1216) -0x9D35, 0x9534, 0x9574, 0x7450, 0x0966, 0x0168, 0x01CD, 0x0251, 0x0274, 0x0AF6, 0x0B98, 0x0399, 0x141C, 0x039A, 0x03FA, 0x0C7C, // 0x04D0 (1232) -0x047C, 0x049C, 0x04BD, 0x049C, 0x047A, 0x14DB, 0x14DC, 0x0C9A, 0x14B9, 0x253A, 0x3D9C, 0x55BA, 0x7DB6, 0x9D4F, 0xCCC5, 0xE481, // 0x04E0 (1248) -0xDC82, 0xDC82, 0xECA2, 0xECA2, 0xE4A1, 0xE461, 0xE461, 0xECA1, 0xECC1, 0xE4A0, 0xD440, 0xBB80, 0xBB00, 0xBAE2, 0xB303, 0xBB84, // 0x04F0 (1264) -0xC405, 0xD4C6, 0xDD25, 0xD482, 0xCC01, 0xD401, 0xD461, 0xD482, 0xC462, 0xB401, 0xABC1, 0xABC1, 0xBC02, 0xBC22, 0x9BC1, 0x8340, // 0x0500 (1280) -0xE4A1, 0xDC61, 0xBBC1, 0x92C0, 0x71E0, 0x71E0, 0x9260, 0xAB02, 0xAB42, 0x9AE0, 0x9280, 0x9AA0, 0x92C2, 0x8AA3, 0x82A6, 0x72C9, // 0x0510 (1296) -0x5ACA, 0x21A6, 0x2186, 0x1188, 0x016B, 0x01F1, 0x0A98, 0x0AFB, 0x0B39, 0x0B59, 0x0B98, 0x0398, 0x0376, 0x043A, 0x047B, 0x0CBC, // 0x0520 (1312) -0x0C59, 0x0BF7, 0x03F7, 0x0438, 0x047A, 0x0CBA, 0x14FA, 0x1498, 0x24D7, 0x34F8, 0x3D3B, 0x4DBD, 0x457B, 0x54D4, 0xA50E, 0xD4E8, // 0x0530 (1328) -0xDCE3, 0xE4C1, 0xECE3, 0xEC82, 0xE481, 0xDC60, 0xDC60, 0xE4C0, 0xE4C0, 0xE4A1, 0xE461, 0xD401, 0xB340, 0xA321, 0xB364, 0xABA4, // 0x0540 (1344) -0xA404, 0xC4C5, 0xE505, 0xE4C3, 0xD440, 0xC400, 0xCC41, 0xD483, 0xD483, 0xCC63, 0xAC03, 0x9381, 0x9BA2, 0xB463, 0xBC42, 0xABC0, // 0x0550 (1360) -0xE4A1, 0xDCA2, 0xBC23, 0x92E1, 0x7200, 0x71E0, 0x9260, 0xAB01, 0xAB21, 0xA2E0, 0xAAE0, 0xB300, 0xB322, 0xAB23, 0x9AE4, 0x7A85, // 0x0560 (1376) -0x6B29, 0x29E6, 0x0127, 0x09CD, 0x0A31, 0x0213, 0x0276, 0x0B18, 0x0337, 0x0378, 0x0378, 0x0399, 0x0BFA, 0x145B, 0x0C7A, 0x14BB, // 0x0570 (1392) -0x0C37, 0x0C58, 0x0479, 0x0CFB, 0x253C, 0x24DB, 0x24FA, 0x2D1B, 0x2D1A, 0x2CFA, 0x2CFA, 0x355A, 0x45BA, 0x3557, 0x3D55, 0x6D50, // 0x0580 (1408) -0xB4E6, 0xDCC2, 0xE4C3, 0xECC3, 0xDC21, 0xE421, 0xEC61, 0xE460, 0xDCA1, 0xDC60, 0xDC00, 0xD3C0, 0xBB61, 0xAB63, 0x9BC4, 0x8B83, // 0x0590 (1424) -0x8B42, 0xB404, 0xDCE4, 0xE503, 0xCC81, 0xBBE0, 0xBC00, 0xCC83, 0xD4A3, 0xD483, 0xBC42, 0x9B80, 0x9320, 0xA3A2, 0xBC22, 0xC421, // 0x05A0 (1440) -0xDC81, 0xD4A3, 0xB403, 0x8AC0, 0x61C0, 0x69C0, 0x9260, 0xAAE1, 0xAAE0, 0xB300, 0xC320, 0xC340, 0xCBA1, 0xD3E3, 0xC384, 0x9AC3, // 0x05B0 (1456) -0x7B28, 0x4AAB, 0x018C, 0x01F2, 0x0A54, 0x0255, 0x02B7, 0x0B38, 0x0BF8, 0x03B7, 0x0BF9, 0x0C1B, 0x0C3B, 0x147C, 0x14DB, 0x14BA, // 0x05C0 (1472) -0x0C9B, 0x14DC, 0x0CDC, 0x1CDC, 0x34DC, 0x3CBB, 0x34BB, 0x3CDB, 0x5D1B, 0x5CFA, 0x4CD8, 0x3435, 0x3455, 0x34B6, 0x1497, 0x3CB4, // 0x05D0 (1488) -0x948A, 0xC444, 0xE483, 0xE482, 0xDC62, 0xCBE0, 0xDC01, 0xEC61, 0xEC60, 0xE420, 0xCBC0, 0xBB81, 0xBB80, 0xB3C2, 0x9BE4, 0x8322, // 0x05E0 (1504) -0x7AC2, 0xA383, 0xCCA3, 0xDD23, 0xC4A1, 0xA3A0, 0xA3A0, 0xBC22, 0xCCA2, 0xD4A2, 0xCC83, 0xB3C1, 0x9AE0, 0xA301, 0xBBA1, 0xCC43, // 0x05F0 (1520) -0xD461, 0xCC42, 0xA3A1, 0x7240, 0x5980, 0x69C0, 0x9260, 0xAAC0, 0xAAE0, 0xBB20, 0xC340, 0xCB40, 0xCB80, 0xDC22, 0xDC03, 0xB344, // 0x0600 (1536) -0x8B6A, 0x6370, 0x1231, 0x0255, 0x0275, 0x0296, 0x0339, 0x0BDA, 0x0C9C, 0x045A, 0x0C79, 0x0C79, 0x0438, 0x0479, 0x0CDA, 0x0499, // 0x0610 (1552) -0x0CDB, 0x0C9A, 0x0C99, 0x1CBA, 0x1C99, 0x1458, 0x0C99, 0x24F9, 0x3CF8, 0x44B6, 0x2C56, 0x2416, 0x2C77, 0x2477, 0x1437, 0x4519, // 0x0620 (1568) -0x7D75, 0x9CCD, 0xC485, 0xE4C3, 0xD441, 0xC3E0, 0xD3E1, 0xE462, 0xE4A1, 0xDC60, 0xCBC0, 0xBB21, 0xB321, 0xBBA4, 0xB3E3, 0x9B41, // 0x0630 (1584) -0x8AC1, 0x9B42, 0xBC42, 0xC4E2, 0xA461, 0x8360, 0x8320, 0x9B82, 0xBC02, 0xCC43, 0xCC63, 0xC402, 0xAB21, 0xA2C0, 0xB320, 0xC3C2, // 0x0640 (1600) -0xDC61, 0xCC21, 0x9B61, 0x7240, 0x59A0, 0x7200, 0x9AA0, 0xB300, 0xBB60, 0xC360, 0xCB60, 0xC340, 0xC360, 0xD401, 0xDC23, 0xB3A5, // 0x0650 (1616) -0x83ED, 0x5414, 0x1336, 0x0317, 0x0338, 0x0BDA, 0x0C7D, 0x0CBD, 0x04DC, 0x04DC, 0x0C7A, 0x0438, 0x0417, 0x0458, 0x0479, 0x0459, // 0x0660 (1632) -0x0477, 0x0CB9, 0x0CBB, 0x047B, 0x045A, 0x0459, 0x0478, 0x0477, 0x0496, 0x0CB7, 0x1C57, 0x2416, 0x4D19, 0x44F8, 0x2477, 0x24D9, // 0x0670 (1648) -0x255B, 0x5DB7, 0xB4C8, 0xDCA2, 0xCC22, 0xB3A1, 0xC402, 0xD462, 0xD4E2, 0xDCA2, 0xD3A2, 0xC2C1, 0xBAA2, 0xC323, 0xC3C2, 0xB3A0, // 0x0680 (1664) -0x9B20, 0x9341, 0x9BA0, 0xA401, 0x8BA0, 0x6B00, 0x6AC0, 0x82E2, 0x9B43, 0xB384, 0xC404, 0xCC04, 0xBB82, 0xAAE0, 0xAAE0, 0xB342, // 0x0690 (1680) -0xDC61, 0xCC21, 0x9B61, 0x7240, 0x61C0, 0x7220, 0xAAE0, 0xCBA1, 0xD3C1, 0xD3C0, 0xD3A1, 0xC360, 0xC3A0, 0xD402, 0xD403, 0xA3A6, // 0x06A0 (1696) -0x6C4F, 0x3C76, 0x1419, 0x03FB, 0x043C, 0x151F, 0x0D5F, 0x051E, 0x04FC, 0x04DC, 0x14BC, 0x0C19, 0x03D7, 0x1439, 0x0C18, 0x03D6, // 0x06B0 (1712) -0x03B5, 0x03B6, 0x03BA, 0x03DB, 0x0C3B, 0x041A, 0x03D8, 0x0C59, 0x049A, 0x0C37, 0x2C15, 0x2B72, 0x43F3, 0x3BF3, 0x3475, 0x1435, // 0x06C0 (1728) -0x0499, 0x3559, 0x8DD3, 0xACEA, 0xBC44, 0xC3E2, 0xC423, 0xCC64, 0xDCA3, 0xE483, 0xD3E3, 0xC322, 0xBAA0, 0xBAE0, 0xC3A1, 0xC3E1, // 0x06D0 (1744) -0xA3A0, 0x9340, 0x8B00, 0x8320, 0x7300, 0x62A0, 0x6A80, 0x7281, 0x8282, 0x92C2, 0xAB63, 0xC3C3, 0xC3A2, 0xB320, 0xAAC0, 0xAB01, // 0x06E0 (1760) -0xDC41, 0xC3E1, 0x9320, 0x7260, 0x6200, 0x7A40, 0xB320, 0xE402, 0xE400, 0xDBE0, 0xCB80, 0xC360, 0xCBC0, 0xD422, 0xCBE2, 0x9B85, // 0x06F0 (1776) -0x6450, 0x23F6, 0x0C1A, 0x049D, 0x04FF, 0x055F, 0x051D, 0x0D3E, 0x0D1C, 0x0CDC, 0x1CFE, 0x043B, 0x03D8, 0x0C38, 0x0BF7, 0x0374, // 0x0700 (1792) -0x0332, 0x0B73, 0x1375, 0x0B34, 0x0B54, 0x1374, 0x0B53, 0x0B54, 0x03B6, 0x13D5, 0x3475, 0x23D3, 0x0B94, 0x1C36, 0x34B7, 0x23F3, // 0x0710 (1808) -0x022C, 0x130F, 0x3D78, 0x7657, 0x9C47, 0xBBA2, 0xC3E4, 0xD446, 0xD485, 0xDC84, 0xD442, 0xCBC1, 0xBB21, 0xBB00, 0xC381, 0xC401, // 0x0720 (1824) -0xB401, 0x9B60, 0x8B00, 0x82C0, 0x72A0, 0x6AA0, 0x7AC0, 0x82C1, 0x8261, 0x8A61, 0x9AC0, 0xB342, 0xC381, 0xBB20, 0xAAA0, 0xA281, // 0x0730 (1840) -0xCC00, 0xB380, 0x8B00, 0x7280, 0x6A20, 0x8260, 0xBB40, 0xEC21, 0xEC61, 0xE400, 0xD380, 0xCB60, 0xD3E1, 0xDC43, 0xCBE2, 0x9B65, // 0x0740 (1856) -0x63F2, 0x2BD7, 0x13FA, 0x047C, 0x053E, 0x055F, 0x051E, 0x0D1E, 0x0CDD, 0x14FE, 0x1D5F, 0x045B, 0x0479, 0x0C99, 0x0417, 0x0BF6, // 0x0750 (1872) -0x0352, 0x0373, 0x03D4, 0x0372, 0x02CD, 0x0AAC, 0x1AED, 0x1B0E, 0x0B11, 0x0B52, 0x13B0, 0x1BF2, 0x03B4, 0x13F5, 0x2370, 0x4BD1, // 0x0760 (1888) -0x534F, 0x4B4F, 0x33AF, 0x6DB6, 0xA615, 0x8C4A, 0xAC25, 0xCC85, 0xD484, 0xD463, 0xCC61, 0xCC41, 0xBBC2, 0xBB41, 0xC381, 0xCC02, // 0x0770 (1904) -0xC421, 0xABA0, 0x9321, 0x8AC1, 0x7AA0, 0x7AC0, 0x8B41, 0x9B63, 0x9B42, 0x92E1, 0x92C0, 0xAB21, 0xC362, 0xC322, 0xAAA1, 0xA261, // 0x0780 (1920) -0xA382, 0x9AE0, 0x9280, 0x8A60, 0x7260, 0x8280, 0xAB60, 0xDC21, 0xF442, 0xEBE0, 0xCB80, 0xC3A0, 0xD400, 0xDC62, 0xD423, 0x9BA6, // 0x0790 (1936) -0x5C52, 0x1BF7, 0x0419, 0x151E, 0x0D1D, 0x0D3D, 0x0D1E, 0x0D3E, 0x04DD, 0x0CFD, 0x155D, 0x0439, 0x03B7, 0x13B8, 0x0B77, 0x1398, // 0x07A0 (1952) -0x1396, 0x0B12, 0x1331, 0x024C, 0x1A6B, 0x120A, 0x1A6D, 0x1AD0, 0x0AD1, 0x0B53, 0x0353, 0x0393, 0x0331, 0x02CE, 0x230F, 0x4B6F, // 0x07B0 (1968) -0x6BCE, 0x8C4F, 0x7BED, 0x4B2B, 0x5D77, 0x9EDB, 0x9CCC, 0xBCA7, 0xC4A4, 0xBC62, 0xBC61, 0xCC82, 0xCC41, 0xCBC1, 0xCBA1, 0xD3E2, // 0x07C0 (1984) -0xD422, 0xC3E1, 0xA360, 0x8B00, 0x82A0, 0x8AA0, 0xA300, 0xBB82, 0xCBC2, 0xC3C2, 0xAB40, 0xA320, 0xB3A1, 0xBBA2, 0xBB22, 0xB2A1, // 0x07D0 (2000) -0x92E0, 0x9AE0, 0x9AE0, 0x92A0, 0x7240, 0x7240, 0xA320, 0xD401, 0xEC61, 0xE400, 0xC380, 0xBB80, 0xCBE1, 0xDC63, 0xD443, 0x9B84, // 0x07E0 (2016) -0x63AB, 0x3C32, 0x0C79, 0x0D3F, 0x0D1E, 0x0D1E, 0x049C, 0x049C, 0x0CBD, 0x14FD, 0x151E, 0x047B, 0x03F8, 0x0316, 0x0B58, 0x0293, // 0x07F0 (2032) -0x022F, 0x01CB, 0x0A2B, 0x01A9, 0x026C, 0x02CE, 0x0310, 0x0B52, 0x0B73, 0x0353, 0x03B4, 0x0BB3, 0x1330, 0x01EB, 0x02AD, 0x2B8F, // 0x0800 (2048) -0x19C6, 0x0903, 0x0082, 0x0083, 0x0925, 0x53D0, 0x8DFA, 0x84D1, 0xB446, 0xBBC0, 0xAC40, 0xB4E2, 0xB4C3, 0xBC63, 0xC402, 0xCBE1, // 0x0810 (2064) -0xD441, 0xCC21, 0xB3C1, 0x9B00, 0x8280, 0x8260, 0x92C0, 0xB381, 0xCC22, 0xD462, 0xC3E2, 0xAB60, 0xAB61, 0xBBC3, 0xC3E3, 0xBB61, // 0x0820 (2080) -0xA300, 0xAB80, 0xB382, 0x92E1, 0x7220, 0x7220, 0xA320, 0xD421, 0xEC81, 0xDC20, 0xBB80, 0xAB20, 0xBB81, 0xCC03, 0xCC03, 0xA362, // 0x0830 (2096) -0x6B23, 0x540C, 0x2CF9, 0x0D1E, 0x04BD, 0x04BD, 0x0CDE, 0x0C7D, 0x045C, 0x14BD, 0x0CDD, 0x043A, 0x0335, 0x1397, 0x0295, 0x0274, // 0x0840 (2112) -0x0272, 0x0291, 0x02D2, 0x0312, 0x0B72, 0x1BF3, 0x0B71, 0x1392, 0x0BB2, 0x022C, 0x026E, 0x1352, 0x0BB5, 0x0395, 0x0373, 0x13B3, // 0x0850 (2128) -0x1B2F, 0x01A8, 0x1987, 0x2987, 0x2147, 0x0907, 0x2330, 0x7DD6, 0x94CB, 0x9C03, 0xB444, 0xC463, 0xCCC1, 0xC4A0, 0xBC20, 0xBBC0, // 0x0860 (2144) -0xD440, 0xDC62, 0xD421, 0xAB60, 0x8AA0, 0x7A60, 0x8280, 0x9301, 0xB3C0, 0xD462, 0xD462, 0xBBA0, 0x9B00, 0xAB42, 0xBC02, 0xBC02, // 0x0870 (2160) -0xBBE0, 0xC442, 0xBBE3, 0x92C0, 0x6A00, 0x7A40, 0xAB40, 0xD421, 0xE481, 0xDC20, 0xBB80, 0xAB00, 0xB301, 0xC342, 0xC362, 0xB321, // 0x0880 (2176) -0x8AC1, 0x6348, 0x3CD7, 0x0C9B, 0x045A, 0x043A, 0x0C7D, 0x0C7D, 0x14DE, 0x043B, 0x0CBC, 0x0419, 0x0292, 0x12F4, 0x0AD4, 0x02D5, // 0x0890 (2192) -0x0316, 0x0377, 0x0B55, 0x1334, 0x1B32, 0x128E, 0x228C, 0x0187, 0x126A, 0x234F, 0x0AAF, 0x026F, 0x0313, 0x03D6, 0x03B6, 0x13B6, // 0x08A0 (2208) -0x2C14, 0x2B4F, 0x2A08, 0x5B0C, 0x6BAE, 0x6BCE, 0x5BED, 0x8552, 0x9E16, 0x950F, 0xBCC5, 0xDD02, 0xDD01, 0xD481, 0xBC00, 0xBBC0, // 0x08B0 (2224) -0xD400, 0xE482, 0xE461, 0xC3A0, 0x9B00, 0x8280, 0x7241, 0x7A60, 0x9B20, 0xC401, 0xDCA2, 0xC422, 0x9B00, 0x8AA0, 0x9B80, 0xB443, // 0x08C0 (2240) -0xD4A1, 0xD4C3, 0xB403, 0x8AC0, 0x7A40, 0x92E0, 0xBBC1, 0xDC61, 0xE481, 0xDC40, 0xCBA1, 0xBB20, 0xBAC0, 0xBAC1, 0xC2C1, 0xBAC1, // 0x08D0 (2256) -0xAAC3, 0x7AE8, 0x4434, 0x1458, 0x1459, 0x03F8, 0x0377, 0x03FA, 0x0C7B, 0x14BC, 0x0459, 0x1459, 0x0AF3, 0x022F, 0x12F1, 0x12F1, // 0x08E0 (2272) -0x128F, 0x0A6E, 0x0A6D, 0x0A0C, 0x11CB, 0x0948, 0x0986, 0x2A29, 0x10E5, 0x2A2A, 0x1B6F, 0x0330, 0x028F, 0x0AF2, 0x0BB4, 0x0BB4, // 0x08F0 (2288) -0x13D4, 0x0ACE, 0x0165, 0x1123, 0x10C1, 0x2122, 0x39C4, 0x1184, 0x1B8F, 0x7617, 0xBDCD, 0xCD25, 0xBD01, 0xC4E1, 0xC402, 0xCBA2, // 0x0900 (2304) -0xDC22, 0xE482, 0xE481, 0xCBE0, 0xAB40, 0x92E0, 0x7A82, 0x7A41, 0x8AC0, 0xAB81, 0xCC42, 0xCC22, 0xA321, 0x7200, 0x7A60, 0x9BA3, // 0x0910 (2320) -0xDD02, 0xD4C3, 0xABE2, 0x8AC0, 0x8AC0, 0xAB81, 0xD442, 0xE4A2, 0xEC81, 0xDC40, 0xD3E0, 0xCB60, 0xC321, 0xC2C1, 0xBA60, 0xBA61, // 0x0920 (2336) -0xC2C3, 0x9B07, 0x63D0, 0x3415, 0x0BF7, 0x0C18, 0x0335, 0x0376, 0x0395, 0x0C18, 0x0479, 0x0C79, 0x1BD7, 0x024F, 0x020B, 0x1A6B, // 0x0930 (2352) -0x0965, 0x19C6, 0x32CC, 0x228B, 0x01E7, 0x22CB, 0x19C8, 0x0926, 0x2ACB, 0x0186, 0x0126, 0x2AEE, 0x1371, 0x0352, 0x03B4, 0x03B4, // 0x0940 (2368) -0x0BD4, 0x0B11, 0x1ACE, 0x32AD, 0x19C8, 0x1125, 0x08A1, 0x00C2, 0x00C5, 0x1AEE, 0x55B8, 0x7E34, 0xBD47, 0xD4A0, 0xD480, 0xCC40, // 0x0950 (2384) -0xDC41, 0xDC62, 0xDC82, 0xCC20, 0xB3A0, 0xAB61, 0x9B22, 0x92E2, 0x8AC0, 0x9B01, 0xABA2, 0xBBE3, 0xAB43, 0x7A20, 0x69E0, 0x82C3, // 0x0960 (2400) -0xDCE1, 0xCC81, 0xA381, 0x8AE0, 0x9B41, 0xC402, 0xDC61, 0xECA1, 0xE480, 0xDC40, 0xD400, 0xCBC0, 0xCB80, 0xC300, 0xBA81, 0xBA82, // 0x0970 (2416) -0xC302, 0xAB45, 0x8369, 0x5BD0, 0x1374, 0x03D7, 0x03B7, 0x0B96, 0x0334, 0x0B96, 0x0418, 0x0C59, 0x1458, 0x1393, 0x0126, 0x11C8, // 0x0980 (2432) -0x1A29, 0x0145, 0x1A28, 0x4BAE, 0x334D, 0x22CC, 0x2B2C, 0x0A07, 0x09E7, 0x436E, 0x1A09, 0x11E9, 0x1ACC, 0x130E, 0x1392, 0x1372, // 0x0990 (2448) -0x3B70, 0x4370, 0x3391, 0x232F, 0x338F, 0x3B6E, 0x4B2D, 0x3209, 0x2166, 0x0107, 0x0395, 0x355A, 0x7615, 0x9D8C, 0xC4C4, 0xD460, // 0x09A0 (2464) -0xD461, 0xCC41, 0xCC61, 0xC441, 0xC401, 0xC422, 0xC443, 0xBBE3, 0x9301, 0x82A0, 0x8280, 0x9AE2, 0x9AE2, 0x8220, 0x69A0, 0x7202, // 0x09B0 (2480) -0xDCA0, 0xC440, 0xA361, 0x9321, 0xB3C2, 0xD483, 0xE4A1, 0xE480, 0xE460, 0xDC40, 0xD420, 0xCBE0, 0xC3A0, 0xC340, 0xB2A2, 0xBAE3, // 0x09C0 (2496) -0xCBC3, 0xBBC4, 0x9B04, 0x7B6B, 0x2BD3, 0x0376, 0x03B8, 0x13F9, 0x0B36, 0x0B35, 0x0BF7, 0x03F7, 0x03D5, 0x2436, 0x22EE, 0x00C5, // 0x09D0 (2512) -0x01A8, 0x1A6B, 0x11A7, 0x1986, 0x530C, 0x63CE, 0x43AE, 0x43CE, 0x1269, 0x1A69, 0x53AE, 0x3AAA, 0x31E7, 0x3A08, 0x3289, 0x42C9, // 0x09E0 (2528) -0x6B48, 0x7348, 0x7B48, 0x6B4A, 0x434D, 0x2B4E, 0x3390, 0x22AC, 0x1165, 0x0965, 0x024B, 0x1C16, 0x149B, 0x34D9, 0x84EF, 0xB4C8, // 0x09F0 (2544) -0xCCA3, 0xC420, 0xBC21, 0xBC42, 0xC442, 0xDCA3, 0xE504, 0xD4C3, 0xABE3, 0x82A0, 0x7200, 0x7A21, 0x8A41, 0x8200, 0x69A0, 0x69E2, // 0x0A00 (2560) -0xD4A1, 0xC420, 0xB380, 0xBBA0, 0xD462, 0xDCA3, 0xD461, 0xD440, 0xD480, 0xD4A1, 0xCC21, 0xBBA0, 0xBB81, 0xB341, 0xB321, 0xC3A3, // 0x0A10 (2576) -0xE484, 0xDC43, 0xC382, 0x8AE4, 0x5B6C, 0x3392, 0x0354, 0x0BD7, 0x0355, 0x0334, 0x0395, 0x0BD6, 0x03B6, 0x0BF7, 0x1BF6, 0x026F, // 0x0A20 (2592) -0x00A5, 0x00A3, 0x0965, 0x0123, 0x1103, 0x4AA9, 0x5B4C, 0x530B, 0x3A68, 0x3A47, 0x3A06, 0x39C5, 0x39C4, 0x4205, 0x4245, 0x4246, // 0x0A30 (2608) -0x52A8, 0x62E9, 0x6AE8, 0x7309, 0x7B28, 0x6AE8, 0x3A68, 0x2A8A, 0x126B, 0x0168, 0x0128, 0x23B4, 0x0C18, 0x0419, 0x14DB, 0x3CF7, // 0x0A40 (2624) -0x8D0E, 0xAC67, 0xA3C1, 0xB3A0, 0xC421, 0xD4C2, 0xE543, 0xE524, 0xC442, 0x9B40, 0x7220, 0x61E0, 0x7221, 0x71E1, 0x61C0, 0x6A01, // 0x0A50 (2640) -0xC440, 0xBC00, 0xBBE0, 0xCC41, 0xDCC3, 0xD482, 0xC3E0, 0xBBC0, 0xD480, 0xDCA1, 0xC421, 0xAB60, 0xAB40, 0xAB61, 0xBBC2, 0xD463, // 0x0A60 (2656) -0xF503, 0xF503, 0xCBE3, 0xA344, 0x72C5, 0x532B, 0x1B51, 0x0334, 0x0B34, 0x02F4, 0x0397, 0x0375, 0x0BD5, 0x13F6, 0x0395, 0x1374, // 0x0A70 (2672) -0x1AD0, 0x0169, 0x00A2, 0x00A1, 0x08A0, 0x3184, 0x41C6, 0x41C7, 0x3165, 0x3185, 0x52C9, 0x52A8, 0x3A05, 0x39C4, 0x5205, 0x49E5, // 0x0A80 (2688) -0x4A47, 0x4A67, 0x5289, 0x5ACA, 0x5AC9, 0x62C9, 0x6B09, 0x41E5, 0x18E2, 0x1145, 0x016A, 0x12F3, 0x0BD9, 0x03DA, 0x03DA, 0x14BC, // 0x0A90 (2704) -0x24BA, 0x5D58, 0x6C6C, 0x6B22, 0x9360, 0xC482, 0xE503, 0xE503, 0xD4C3, 0xABA1, 0x7AC1, 0x6A61, 0x6221, 0x6201, 0x5A02, 0x51E2, // 0x0AA0 (2720) -0xB400, 0xB3C0, 0xCC20, 0xDCC2, 0xE502, 0xCC61, 0xB3C0, 0xB3A0, 0xCC60, 0xD481, 0xC401, 0xA320, 0x9B40, 0xB3C1, 0xCC62, 0xED23, // 0x0AB0 (2736) -0xFDA2, 0xFD82, 0xDC62, 0xB321, 0x8240, 0x5245, 0x2B4F, 0x0B12, 0x0A70, 0x0A71, 0x1334, 0x0B54, 0x0393, 0x13F5, 0x0332, 0x0353, // 0x0AC0 (2752) -0x1BD5, 0x0AF0, 0x01A8, 0x0924, 0x1102, 0x08C1, 0x2165, 0x2986, 0x2144, 0x1924, 0x3ACA, 0x3B0B, 0x32CA, 0x2A48, 0x4227, 0x4206, // 0x0AD0 (2768) -0x4226, 0x39E5, 0x4205, 0x4226, 0x3A06, 0x31C5, 0x4205, 0x4A87, 0x39E5, 0x29A6, 0x0107, 0x09ED, 0x0270, 0x02B3, 0x0B56, 0x03B7, // 0x0AE0 (2784) -0x14DB, 0x2D1A, 0x54D5, 0x642D, 0x73A5, 0xA422, 0xD4C2, 0xECC1, 0xE481, 0xCBE0, 0x9B00, 0x7A80, 0x7A60, 0x6A21, 0x61E1, 0x59E2, // 0x0AF0 (2800) -0xA360, 0xAB80, 0xCC20, 0xE4C2, 0xDCE2, 0xC440, 0xB3C0, 0xBBE0, 0xD460, 0xDC81, 0xC3E0, 0xAB40, 0xABA0, 0xC441, 0xDCC1, 0xF562, // 0x0B00 (2816) -0xFDE2, 0xF5A2, 0xE4A2, 0xB361, 0x7A61, 0x4A03, 0x434C, 0x336F, 0x1AAE, 0x0A2E, 0x01ED, 0x024E, 0x028F, 0x02D0, 0x026D, 0x0B30, // 0x0B10 (2832) -0x0BD3, 0x0351, 0x026D, 0x0168, 0x09C9, 0x09A8, 0x0125, 0x0145, 0x1164, 0x19A5, 0x32EA, 0x3B4C, 0x330C, 0x2A8A, 0x3227, 0x3A27, // 0x0B20 (2848) -0x4228, 0x4A29, 0x4207, 0x4A07, 0x5248, 0x4207, 0x2122, 0x2102, 0x31C5, 0x3A49, 0x0106, 0x0169, 0x09ED, 0x020F, 0x0271, 0x0335, // 0x0B30 (2864) -0x03B9, 0x0CBD, 0x1D3C, 0x34F8, 0x4412, 0x638C, 0x9BE7, 0xCC85, 0xDCE2, 0xCC60, 0xABA0, 0x8B00, 0x72A0, 0x6260, 0x5A60, 0x6260, // 0x0B40 (2880) -0x9300, 0xA360, 0xCC21, 0xDCA2, 0xD4A1, 0xCC40, 0xBC00, 0xC421, 0xDC81, 0xE481, 0xD400, 0xC3E0, 0xCC40, 0xDCC1, 0xED00, 0xFD41, // 0x0B50 (2896) -0xFDC2, 0xF583, 0xD4A3, 0xABC3, 0x72A3, 0x5203, 0x5A85, 0x5B29, 0x2B0C, 0x026C, 0x026D, 0x022D, 0x022D, 0x020C, 0x128D, 0x028D, // 0x0B60 (2912) -0x0B4F, 0x0B70, 0x024D, 0x026F, 0x0290, 0x0A8F, 0x022B, 0x0A09, 0x0965, 0x0944, 0x19E5, 0x3247, 0x3A88, 0x42A9, 0x4AA9, 0x3A27, // 0x0B70 (2928) -0x31E6, 0x3A48, 0x3A28, 0x4268, 0x4227, 0x52A8, 0x5AE8, 0x3A05, 0x29C4, 0x2184, 0x0903, 0x1165, 0x0965, 0x11E6, 0x1A06, 0x1A26, // 0x0B80 (2944) -0x330C, 0x2370, 0x0C78, 0x151C, 0x2D1A, 0x2C14, 0x332E, 0x4ACA, 0x83EA, 0xA468, 0xAC03, 0x9320, 0x7AC0, 0x6A80, 0x5A80, 0x5AA0, // 0x0B90 (2960) -0x9B20, 0xB3A1, 0xCC21, 0xD461, 0xD460, 0xCC40, 0xC420, 0xCC41, 0xE481, 0xDC60, 0xD420, 0xD440, 0xE4C1, 0xE4E1, 0xECE0, 0xFD20, // 0x0BA0 (2976) -0xFD62, 0xED22, 0xD482, 0xABA2, 0x82E2, 0x6A21, 0x6200, 0x6283, 0x4B08, 0x3B4B, 0x12ED, 0x020C, 0x026E, 0x0A8E, 0x0A4C, 0x0A2A, // 0x0BB0 (2992) -0x12AC, 0x0A6C, 0x020C, 0x0A8F, 0x0290, 0x0AD1, 0x0AB0, 0x0A6E, 0x09EB, 0x0188, 0x0125, 0x0924, 0x19A6, 0x21E7, 0x326A, 0x2A28, // 0x0BC0 (3008) -0x3227, 0x3A47, 0x3A07, 0x3A07, 0x5227, 0x49E6, 0x5227, 0x5A68, 0x5227, 0x5205, 0x6A44, 0x9B66, 0xAB63, 0xB381, 0xBBC0, 0xC401, // 0x0BD0 (3024) -0xBBA2, 0x8B22, 0x4B23, 0x2B46, 0x33AB, 0x5471, 0x5454, 0x4392, 0x330D, 0x4B2B, 0x8389, 0x9387, 0x7AC3, 0x7240, 0x7280, 0x6AA0, // 0x0BE0 (3040) -0xB380, 0xBBE1, 0xCC21, 0xCC00, 0xCC20, 0xD440, 0xCC20, 0xD440, 0xDC80, 0xD460, 0xD440, 0xD480, 0xDCC0, 0xDCA0, 0xDCA0, 0xE4E1, // 0x0BF0 (3056) -0xED02, 0xE4C2, 0xD441, 0xAB41, 0x8AE3, 0x7262, 0x7242, 0x7283, 0x72C3, 0x7346, 0x5349, 0x2ACA, 0x024A, 0x020B, 0x01C8, 0x0A09, // 0x0C00 (3072) -0x0A2A, 0x126B, 0x0A6B, 0x0A6C, 0x0A6C, 0x020C, 0x0A6D, 0x01EB, 0x01EA, 0x09C9, 0x0187, 0x00E4, 0x00C3, 0x00E2, 0x1984, 0x2A06, // 0x0C10 (3088) -0x2A67, 0x11E6, 0x2A48, 0x3248, 0x3228, 0x3207, 0x3A27, 0x4247, 0x4226, 0x49E4, 0x59A1, 0x92A3, 0xBB82, 0xBB40, 0xCBC0, 0xCC02, // 0x0C20 (3104) -0xB3A2, 0x9301, 0x7260, 0x6200, 0x6A00, 0x7260, 0x8305, 0x942C, 0x742F, 0x4B2C, 0x3AA8, 0x5349, 0x73EA, 0x6B05, 0x5A60, 0x6A80, // 0x0C30 (3120) -0xC3E0, 0xD442, 0xD441, 0xCC20, 0xD460, 0xDC80, 0xDC60, 0xDC61, 0xD480, 0xD460, 0xCC60, 0xD480, 0xD4A0, 0xCC40, 0xC420, 0xD480, // 0x0C40 (3136) -0xE4C0, 0xDC81, 0xB3A1, 0x9323, 0x72A3, 0x7284, 0x7A84, 0x92E4, 0xAB64, 0xABA5, 0x8B43, 0x5AE4, 0x2AC8, 0x0A69, 0x0209, 0x01E9, // 0x0C50 (3152) -0x022B, 0x028C, 0x0AAC, 0x0A6A, 0x1A4A, 0x1A29, 0x0186, 0x09C6, 0x0183, 0x0963, 0x1123, 0x18E2, 0x20E0, 0x6283, 0x8B22, 0x9300, // 0x0C60 (3168) -0x8AE2, 0x82C3, 0x5A23, 0x4A46, 0x3269, 0x2A49, 0x3206, 0x31C4, 0x3A26, 0x4206, 0x41C5, 0x4983, 0x8A63, 0xAAA2, 0xBB43, 0xC3A4, // 0x0C70 (3184) -0xA381, 0x82C0, 0x8240, 0x8202, 0x79A0, 0x81E0, 0x9AA0, 0xAB81, 0xAC25, 0xA468, 0x7388, 0x52E7, 0x6326, 0x62C4, 0x6220, 0x6A40, // 0x0C80 (3200) -0xD460, 0xDCA0, 0xDCC0, 0xDCC0, 0xE4A0, 0xF4C1, 0xECE1, 0xE4A0, 0xDC80, 0xD440, 0xDC60, 0xDC81, 0xD4A0, 0xC420, 0xC3E0, 0xCC60, // 0x0C90 (3216) -0xD4C2, 0xC442, 0xA341, 0x8280, 0x7A62, 0x82C3, 0xA363, 0xB3C3, 0xC403, 0xC444, 0xB3C3, 0x7AC2, 0x10A0, 0x00E2, 0x09A6, 0x1A8A, // 0x0CA0 (3232) -0x1A69, 0x1248, 0x0A27, 0x01C6, 0x01C7, 0x01C7, 0x01A7, 0x19E7, 0x21C5, 0x1943, 0x08C2, 0x10C2, 0x2941, 0x7B67, 0x93A2, 0x9B20, // 0x0CB0 (3248) -0x92A0, 0x9A80, 0x9A82, 0x8A83, 0x6A63, 0x5223, 0x39E3, 0x29A2, 0x19A3, 0x2183, 0x31A6, 0x3965, 0x4103, 0x69E3, 0xA303, 0xBB63, // 0x0CC0 (3264) -0xAB03, 0x9A62, 0x9242, 0x9222, 0x8200, 0x8A20, 0x9AE0, 0xAB60, 0xBBE1, 0xBBE1, 0xABC1, 0x8B41, 0x6AE1, 0x6AC3, 0x6AA3, 0x6243, // 0x0CD0 (3280) -0xDCA0, 0xE4E0, 0xE500, 0xE500, 0xF500, 0xFD01, 0xF501, 0xECE0, 0xE480, 0xDC60, 0xDC80, 0xE4A0, 0xDCE1, 0xD4A0, 0xD460, 0xDCA0, // 0x0CE0 (3296) -0xDCC0, 0xBC00, 0x9B01, 0x7A41, 0x7A62, 0x9B43, 0xC423, 0xDCA2, 0xD481, 0xD4A4, 0xC488, 0x51A0, 0x0840, 0x0081, 0x0081, 0x0903, // 0x0CF0 (3312) -0x29E6, 0x21E6, 0x2227, 0x09A5, 0x0144, 0x01E6, 0x01A5, 0x01C5, 0x1206, 0x09A5, 0x00E3, 0x1944, 0x2921, 0x59E1, 0x9300, 0xA300, // 0x0D00 (3328) -0xAB00, 0xA281, 0x9A21, 0x9A43, 0x9284, 0x8AC5, 0x7AC4, 0x6A83, 0x6283, 0x5A63, 0x5A64, 0x5225, 0x41A3, 0x4161, 0x6A41, 0xA365, // 0x0D10 (3344) -0xA303, 0x9A83, 0x9A62, 0x9242, 0x9261, 0x9AC1, 0xB381, 0xC401, 0xC3E0, 0xAB80, 0x9320, 0x7AA0, 0x6260, 0x6282, 0x6AA3, 0x6A83, // 0x0D20 (3360) -0xDCE0, 0xE500, 0xE520, 0xED00, 0xF520, 0xFD00, 0xF500, 0xF4E0, 0xE4A0, 0xE480, 0xDC80, 0xE4C0, 0xE501, 0xE521, 0xDCE0, 0xE500, // 0x0D30 (3376) -0xDCC1, 0xBBC0, 0x8AC2, 0x6A21, 0x7AA1, 0xABA3, 0xDCA2, 0xF522, 0xED23, 0xC484, 0x6202, 0x41C5, 0x2965, 0x3A08, 0x4208, 0x1081, // 0x0D40 (3392) -0x0060, 0x1901, 0x3960, 0x8387, 0x6AC3, 0x6B24, 0x52A3, 0x3A22, 0x42A6, 0x1100, 0x3941, 0x7223, 0x7200, 0x8A80, 0x9B20, 0xC402, // 0x0D50 (3408) -0xC3A2, 0xAAE1, 0x9A41, 0x9282, 0x8AE3, 0x8B24, 0x8B03, 0x8AC1, 0x9280, 0x8A40, 0x8A01, 0x8A23, 0x8244, 0x6A03, 0x7262, 0x9344, // 0x0D60 (3424) -0xAB84, 0xAB03, 0x9A82, 0x9241, 0x9260, 0xAB21, 0xC3E1, 0xD462, 0xCC41, 0xAB80, 0x8AC0, 0x6A40, 0x5A00, 0x5A00, 0x6220, 0x6A40, // 0x0D70 (3440) -0xDCE0, 0xE520, 0xE500, 0xECE0, 0xF520, 0xFD00, 0xF4E0, 0xF4E0, 0xECC0, 0xE480, 0xD460, 0xD480, 0xE4E0, 0xED21, 0xED20, 0xE501, // 0x0D80 (3456) -0xDC82, 0xB381, 0x8282, 0x7221, 0x82C1, 0xB403, 0xE4E3, 0xF544, 0xED87, 0x6220, 0x6B2A, 0x8451, 0x3A69, 0x5B2D, 0x7C10, 0x5ACB, // 0x0D90 (3472) -0x18A3, 0x1020, 0x38E0, 0x9B86, 0xA363, 0xB381, 0xD440, 0xE4E3, 0xBC44, 0x48E0, 0x9AA1, 0x9220, 0x89C0, 0xA2A1, 0xC3C1, 0xD463, // 0x0DA0 (3488) -0xC3E2, 0xAB20, 0x9AA1, 0x9AE2, 0x9B43, 0x9B43, 0x9B02, 0x9AC1, 0xA2C1, 0xA260, 0xA200, 0x99E0, 0x9A01, 0xA282, 0xB303, 0xC3A3, // 0x0DB0 (3504) -0xC423, 0xBBC2, 0xA2C1, 0x8A00, 0x9220, 0xA2A1, 0xB361, 0xC3E2, 0xC422, 0xB3A1, 0x8B01, 0x7260, 0x6220, 0x6A40, 0x72A0, 0x7AA0, // 0x0DC0 (3520) -0xDCE0, 0xE500, 0xED00, 0xECE0, 0xF520, 0xFD20, 0xF4E0, 0xECE0, 0xE4C0, 0xDC80, 0xCC20, 0xCC20, 0xDC80, 0xECE0, 0xED00, 0xECE1, // 0x0DD0 (3536) -0xDC21, 0xBB41, 0x9261, 0x8A21, 0x9AC1, 0xC3E3, 0xED03, 0xF545, 0xD4E7, 0x6A82, 0xA553, 0x7C31, 0x636D, 0x740F, 0x73EF, 0x6B6D, // 0x0DE0 (3552) -0x2143, 0x1080, 0x5243, 0x6A62, 0x6A21, 0x92E2, 0xC380, 0xE4A5, 0x8240, 0x79E0, 0xAB23, 0x9220, 0x9240, 0xAB01, 0xD420, 0xDC40, // 0x0DF0 (3568) -0xC380, 0xAAA0, 0xAA60, 0xBB03, 0xC3A4, 0xBBA4, 0xB342, 0xAAE1, 0xAAA0, 0xAA60, 0xAA60, 0xAA81, 0xAAC1, 0xAB00, 0xBB60, 0xCC21, // 0x0E00 (3584) -0xDCC1, 0xC440, 0xA320, 0x9220, 0x91E1, 0x9A22, 0xA282, 0xB302, 0xAB61, 0x9B41, 0x82E0, 0x6A60, 0x6220, 0x6A60, 0x7AE0, 0x8B20, // 0x0E10 (3600) -0xDCC0, 0xE500, 0xED00, 0xED00, 0xF520, 0xF540, 0xECE0, 0xE4C0, 0xDCA0, 0xD460, 0xBC00, 0xBC00, 0xD460, 0xE4A1, 0xECE0, 0xECC1, // 0x0E20 (3616) -0xE420, 0xCB20, 0xB221, 0xA1E1, 0xAA61, 0xD3A2, 0xF4E2, 0xF543, 0xE506, 0x8B24, 0xAD32, 0x8431, 0x7BEF, 0x94B1, 0x8CB0, 0x6BCD, // 0x0E30 (3632) -0x31C7, 0x1903, 0x4A24, 0x49C2, 0x49A0, 0x6A41, 0x9B42, 0xB3C4, 0x5920, 0xAB65, 0x9AC1, 0x9A60, 0x9A80, 0xB342, 0xC3E1, 0xCBC1, // 0x0E40 (3648) -0xB2C0, 0xA240, 0xAA20, 0xC323, 0xD425, 0xDC64, 0xCBA2, 0xBAE0, 0xB280, 0xB240, 0xB220, 0xB2A1, 0xBB82, 0xB3A1, 0xB3C0, 0xCCA1, // 0x0E50 (3664) -0xDD01, 0xCC80, 0xAB40, 0x9220, 0x91C2, 0x99C3, 0x9A02, 0xA262, 0x92C1, 0x8AE0, 0x72E0, 0x6A80, 0x6260, 0x6A60, 0x7AE0, 0x8B81, // 0x0E60 (3680) -0xDCC0, 0xE4E1, 0xED00, 0xF500, 0xF520, 0xF541, 0xED01, 0xE4C0, 0xD4A0, 0xC460, 0xB400, 0xBC00, 0xCC40, 0xE480, 0xECA0, 0xEC81, // 0x0E70 (3696) -0xE401, 0xD2E0, 0xB9E1, 0xA981, 0xAA00, 0xCB41, 0xECA1, 0xF501, 0xECE3, 0xC486, 0xB531, 0x8C51, 0x8C70, 0x9CD1, 0x9CD1, 0x73CE, // 0x0E80 (3712) -0x4207, 0x31A5, 0x4A46, 0x3182, 0x39C2, 0x5A03, 0x82E5, 0x6120, 0x8220, 0xA302, 0x9280, 0x92A0, 0x92C0, 0xA321, 0xC3C1, 0xB340, // 0x0E90 (3728) -0x9AE0, 0x9A80, 0xA261, 0xBB02, 0xDC24, 0xECA5, 0xE423, 0xCB21, 0xAA40, 0xAA60, 0xB280, 0xB302, 0xBB82, 0xB3A1, 0xB3C0, 0xCC61, // 0x0EA0 (3744) -0xDCC1, 0xCC40, 0xAB40, 0x9240, 0x99E2, 0xA1E3, 0xA203, 0x9222, 0x8240, 0x7280, 0x6A80, 0x6280, 0x6260, 0x6240, 0x72A0, 0x8361, // 0x0EB0 (3760) -0xD4A0, 0xDCC0, 0xECE0, 0xECE0, 0xE4E0, 0xE500, 0xE500, 0xDCC0, 0xCC80, 0xC460, 0xAC00, 0xB400, 0xCC40, 0xDC40, 0xE460, 0xE441, // 0x0EC0 (3776) -0xDBA2, 0xC2A2, 0xB1C2, 0xA161, 0xA1E0, 0xC341, 0xE482, 0xF4E2, 0xE4A1, 0xC444, 0xBD91, 0xAD95, 0x94D1, 0xB5D6, 0xA535, 0x8432, // 0x0ED0 (3792) -0x738F, 0x3186, 0x5268, 0x49E4, 0x3981, 0x49E3, 0x3984, 0x3101, 0x82E3, 0x8280, 0x8AA0, 0x92C0, 0x9AE0, 0xA321, 0xAB41, 0xB322, // 0x0EE0 (3808) -0xAB01, 0xB2E1, 0xAAC1, 0xB2E1, 0xBBC2, 0xDCA5, 0xDC64, 0xCB83, 0xAA60, 0xAA20, 0xB261, 0xBB02, 0xB362, 0xABA1, 0xABE1, 0xB401, // 0x0EF0 (3824) -0xCC41, 0xC3E1, 0xAB21, 0x9A60, 0xA222, 0xAA23, 0xA202, 0x9201, 0x8261, 0x72A1, 0x62A0, 0x5AA0, 0x5A60, 0x5A60, 0x6AC0, 0x8342, // 0x0F00 (3840) -0xC420, 0xCC60, 0xDCA0, 0xE4C0, 0xDCA0, 0xDCA0, 0xD4C0, 0xCCA0, 0xC480, 0xB460, 0xB420, 0xB400, 0xCC20, 0xDC40, 0xE440, 0xE401, // 0x0F10 (3856) -0xC361, 0xAAA1, 0x9200, 0x8A00, 0x8A60, 0xAB41, 0xCC61, 0xDCE2, 0xD481, 0xABA2, 0xBD0F, 0xC5F7, 0x9CB3, 0x94B2, 0xA533, 0x9471, // 0x0F20 (3872) -0x8C2F, 0x31A6, 0x29A5, 0x3A07, 0x2943, 0x3984, 0x2902, 0x3100, 0x8AC5, 0x9282, 0x9AC2, 0xAB22, 0xBB21, 0xBB20, 0xC380, 0xCBE1, // 0x0F30 (3888) -0xCBE1, 0xCBC0, 0xBB81, 0xAB00, 0xAB00, 0xCBC3, 0xDC23, 0xCBC1, 0xB2C0, 0xB280, 0xB2C1, 0xB2C2, 0xA2E3, 0xA323, 0xA383, 0xA3A2, // 0x0F40 (3904) -0xABA2, 0xABA2, 0x9B02, 0x9AE2, 0xAB22, 0xA2E2, 0x9A82, 0x9241, 0x8A81, 0x82E1, 0x7300, 0x62E0, 0x5AA0, 0x5A80, 0x7300, 0x8BC0, // 0x0F50 (3920) -0xA380, 0xB3E0, 0xCC61, 0xD461, 0xC420, 0xC420, 0xCC60, 0xCC80, 0xC480, 0xBC40, 0xB420, 0xB400, 0xCC00, 0xDC41, 0xDC00, 0xD3A1, // 0x0F60 (3936) -0xBB01, 0xAA60, 0x9A21, 0x9221, 0x8A60, 0x9B21, 0xBC21, 0xC481, 0xC421, 0x9B21, 0x940A, 0xB574, 0xAD54, 0x9492, 0xA513, 0x840F, // 0x0F70 (3952) -0x738D, 0x2124, 0x31C6, 0x4228, 0x20E3, 0x3144, 0x18A1, 0x3921, 0x9325, 0xA322, 0xAB62, 0xBBA2, 0xCBC1, 0xCBC1, 0xD421, 0xD461, // 0x0F80 (3968) -0xDCA1, 0xD481, 0xC401, 0xAB40, 0x9AC0, 0xAB21, 0xC3C1, 0xCBE1, 0xCB81, 0xC361, 0xBB22, 0xAAA1, 0x9261, 0x92A2, 0x9303, 0x9B42, // 0x0F90 (3984) -0x9B21, 0xA341, 0x9B21, 0xAB63, 0xBBE4, 0xBBA3, 0xA302, 0x9281, 0x92E1, 0x9B82, 0x93C1, 0x8360, 0x7300, 0x72E0, 0x8360, 0x9C01, // 0x0FA0 (4000) -0x8320, 0x9360, 0xABE1, 0xB3E1, 0xAB80, 0xB3A0, 0xBC20, 0xC440, 0xBC60, 0xB440, 0xAC00, 0xB3E0, 0xC400, 0xD421, 0xD3C1, 0xC320, // 0x0FB0 (4016) -0xAA80, 0xA241, 0x9221, 0x8A20, 0x8A80, 0x9320, 0x9BC0, 0xAC01, 0x9B81, 0x7A80, 0x6AC6, 0xAD52, 0xC5F6, 0xA513, 0xA533, 0xAD74, // 0x0FC0 (4032) -0xBE18, 0x634D, 0x5AEB, 0x2986, 0x10A2, 0x18C2, 0x39C6, 0x6AE8, 0xA384, 0xB3A2, 0xBBE2, 0xC401, 0xD441, 0xD461, 0xDC80, 0xE4C1, // 0x0FD0 (4048) -0xE500, 0xDCE1, 0xC441, 0xAB40, 0x9280, 0x9AC0, 0xBB81, 0xD443, 0xDC64, 0xDC64, 0xD423, 0xB341, 0x9280, 0x8A41, 0x8262, 0x8AA2, // 0x0FE0 (4064) -0x92E1, 0x9B01, 0xAB42, 0xBBE4, 0xD485, 0xCC64, 0xB3A2, 0x9B00, 0x9B40, 0xABE2, 0xB462, 0xAC01, 0x9360, 0x9360, 0x93E0, 0xA461, // 0x0FF0 (4080) -0x7300, 0x7B20, 0x8B40, 0x9340, 0x9320, 0x9B60, 0xB400, 0xBC60, 0xBC60, 0xAC40, 0xA3E0, 0xA3C0, 0xBBC0, 0xCBE1, 0xC381, 0xB2C0, // 0x1000 (4096) -0x9A40, 0x9241, 0x8A21, 0x8220, 0x8260, 0x82E0, 0x8361, 0x83A1, 0x8301, 0x6A81, 0x5223, 0x9CAF, 0xC5F6, 0xB5B6, 0xA534, 0xAD95, // 0x1010 (4112) -0xA554, 0x5B0C, 0x2104, 0x2945, 0x31A6, 0x2965, 0x738D, 0x7348, 0xA3C4, 0xC402, 0xC422, 0xCC41, 0xD480, 0xD480, 0xD460, 0xE4C0, // 0x1020 (4128) -0xE500, 0xDCE0, 0xCC40, 0xAB20, 0x9A80, 0xA2A0, 0xBB81, 0xD443, 0xE4A3, 0xECE4, 0xE503, 0xCC62, 0xAB41, 0x8A60, 0x7A20, 0x8261, // 0x1030 (4144) -0x8AC0, 0x9B00, 0xB362, 0xCC23, 0xDCC4, 0xD4C3, 0xBC42, 0xA3A0, 0xA3A0, 0xB400, 0xC461, 0xCC61, 0xBC00, 0xABC0, 0xA420, 0xAC80, // 0x1040 (4160) -0x6300, 0x6B00, 0x7B00, 0x82E0, 0x82E0, 0x9360, 0xAC21, 0xB461, 0xAC40, 0xA420, 0x93C0, 0x9360, 0xA360, 0xB381, 0xAB21, 0x9A80, // 0x1050 (4176) -0x8A40, 0x8241, 0x8241, 0x7A20, 0x7A60, 0x7AC0, 0x7321, 0x7341, 0x6AE2, 0x6283, 0x4A02, 0x8C0D, 0xCE17, 0xAD55, 0xAD75, 0xAD75, // 0x1060 (4192) -0x3A07, 0x18E3, 0x4228, 0x630B, 0x39E7, 0x4228, 0x8C4F, 0x6AA5, 0xABE4, 0xC423, 0xCC43, 0xD463, 0xD4A2, 0xD480, 0xD440, 0xDC81, // 0x1070 (4208) -0xECE0, 0xE4C1, 0xCBE0, 0xAAC0, 0x9A40, 0xA281, 0xBB41, 0xCC02, 0xD462, 0xE4C2, 0xE522, 0xE4E1, 0xC441, 0xA360, 0x92C0, 0x8AA0, // 0x1080 (4224) -0x8AC0, 0x9B01, 0xB382, 0xCC23, 0xD4A3, 0xD4C2, 0xBCA1, 0xAC20, 0xA3E0, 0xABE0, 0xC440, 0xD481, 0xCC80, 0xC440, 0xB460, 0xB460, // 0x1090 (4240) -0x6B00, 0x6B00, 0x8320, 0x8320, 0x8300, 0x9360, 0xA401, 0xAC21, 0x9C00, 0x93C0, 0x8360, 0x7B00, 0x8B00, 0x9B20, 0x9B00, 0x8A80, // 0x10A0 (4256) -0x8280, 0x8281, 0x8260, 0x8240, 0x8A40, 0x8AC0, 0x7B20, 0x6B00, 0x62A2, 0x5A62, 0x5A64, 0x8BEC, 0xC5F6, 0xBDB7, 0x9CB2, 0x5ACB, // 0x10B0 (4272) -0x52CA, 0x6B6D, 0x7BCD, 0x630B, 0x2124, 0x6B6C, 0x736A, 0x6A84, 0xABC5, 0xBBE3, 0xCC44, 0xDCA4, 0xDCC3, 0xD481, 0xD421, 0xD421, // 0x10C0 (4288) -0xDC82, 0xDC62, 0xBB80, 0xA280, 0x9200, 0xA281, 0xB322, 0xC3A2, 0xC401, 0xD481, 0xDD01, 0xE521, 0xD4C2, 0xC441, 0xB3A0, 0xA320, // 0x10D0 (4304) -0x92E0, 0x9B20, 0xB3A2, 0xC402, 0xCC62, 0xCCA2, 0xBCA1, 0xAC60, 0xA420, 0xA400, 0xB420, 0xC460, 0xCC81, 0xCCA1, 0xC481, 0xB420, // 0x10E0 (4320) -0x72E0, 0x7AE0, 0x8B20, 0x9320, 0x9320, 0x9B40, 0xA3A1, 0x9BA1, 0x8B60, 0x8360, 0x7320, 0x72C0, 0x7AA0, 0x9300, 0x9B00, 0x8AC0, // 0x10F0 (4336) -0x82C0, 0x82A0, 0x8A60, 0x9240, 0xA240, 0xA2C0, 0x8B20, 0x72E0, 0x6260, 0x6AC4, 0x5A83, 0x942C, 0xCE37, 0xC5F7, 0x7BCE, 0x73AD, // 0x1100 (4352) -0xB575, 0x9471, 0x842F, 0x5AEA, 0x4A48, 0x736C, 0x5243, 0x7B04, 0x9B64, 0xA363, 0xC3E4, 0xE4A5, 0xE4C3, 0xD481, 0xCC21, 0xC3E1, // 0x1110 (4368) -0xC402, 0xBBC2, 0xA320, 0x8A60, 0x8220, 0x8A41, 0x9AC1, 0xA321, 0xAB41, 0xBC01, 0xD4A2, 0xDD02, 0xD4C2, 0xCC61, 0xC420, 0xB3C0, // 0x1120 (4384) -0xA360, 0x9B41, 0xAB82, 0xB3A1, 0xBBE0, 0xC461, 0xBCA0, 0xAC60, 0xA440, 0x9C00, 0x9BC0, 0xA3E0, 0xB420, 0xC481, 0xC461, 0xB3E0, // 0x1130 (4400) -0x7A81, 0x82A0, 0x92E0, 0x9B00, 0x9300, 0x9B21, 0x9B61, 0x9341, 0x8300, 0x7B01, 0x72E1, 0x6AA0, 0x7AA0, 0x92E0, 0x9B20, 0x9B20, // 0x1140 (4416) -0x8AE0, 0x8AA0, 0x9A60, 0xA240, 0xB220, 0xBAA0, 0x9B20, 0x7AC0, 0x6A80, 0x6AA2, 0x6283, 0xA4CE, 0xC5F6, 0xC638, 0xA533, 0xAD74, // 0x1150 (4432) -0xBDB6, 0xA4F3, 0x8C70, 0x5289, 0x39C6, 0x5246, 0x6283, 0x8303, 0x82C2, 0x92C2, 0xBBA3, 0xDC84, 0xE4C2, 0xDCA1, 0xCC41, 0xB3C0, // 0x1160 (4448) -0x9B60, 0x9300, 0x82A0, 0x7A40, 0x7A40, 0x8241, 0x8A81, 0x92A1, 0x92C0, 0xA341, 0xBC22, 0xCC82, 0xC420, 0xBBE0, 0xC420, 0xC441, // 0x1170 (4464) -0xABC1, 0xA361, 0xA341, 0xA320, 0xAB60, 0xBC21, 0xBC80, 0xAC60, 0x9C40, 0x93E0, 0x8B80, 0x8B60, 0xA3C0, 0xB420, 0xBC00, 0xABC0, // 0x1180 (4480) -0x8A40, 0x8220, 0x8A60, 0x92C1, 0x92E1, 0x92E2, 0x8303, 0x8303, 0x7AC3, 0x72C2, 0x6AA1, 0x6A80, 0x7AA0, 0x9300, 0xA341, 0xA321, // 0x1190 (4496) -0x92E1, 0x9AA1, 0xA220, 0xB1E0, 0xB220, 0xBA81, 0xAAC1, 0x8AA0, 0x7260, 0x6A82, 0x62A5, 0xAD51, 0xBDD5, 0xBDF6, 0xB5D6, 0xA514, // 0x11A0 (4512) -0xBDF7, 0xCE59, 0x8C50, 0x5A88, 0x6A47, 0x7A45, 0x8243, 0x8A62, 0x8241, 0x8A61, 0xAB04, 0xCBE5, 0xD463, 0xCC62, 0xC402, 0xAB81, // 0x11B0 (4528) -0x8B21, 0x72E1, 0x62C0, 0x62A0, 0x6AA1, 0x72C2, 0x7AA1, 0x82A0, 0x8280, 0x92A0, 0xAB22, 0xB363, 0xA321, 0x9B00, 0xAB80, 0xC422, // 0x11C0 (4544) -0xBBC1, 0xAB61, 0x9300, 0x8AE0, 0x9B40, 0xB420, 0xBC81, 0xAC40, 0xA420, 0x9BE0, 0x9360, 0x9320, 0xA3A0, 0xB420, 0xB421, 0xA3A0, // 0x11D0 (4560) -0x8221, 0x8200, 0x8240, 0x8A81, 0x92A1, 0x8AA1, 0x82A2, 0x7AC3, 0x72A3, 0x72A3, 0x6AA2, 0x7281, 0x7AA0, 0x92E1, 0xA301, 0xA2E1, // 0x11E0 (4576) -0x9AC1, 0xA281, 0xAA01, 0xB1C0, 0xB1C0, 0xB221, 0xA261, 0x9260, 0x7241, 0x6A42, 0x62A6, 0x9C8F, 0xAD53, 0xBDD6, 0xB575, 0xA513, // 0x11F0 (4592) -0xC638, 0xBDD6, 0xA513, 0x62A9, 0x7287, 0x7A25, 0x8243, 0x8222, 0x8201, 0x8221, 0x9A83, 0xB343, 0xB3A2, 0xBBC2, 0xB3C3, 0xA383, // 0x1200 (4608) -0x8362, 0x6B21, 0x62E0, 0x5AC0, 0x6AC1, 0x72C2, 0x7AC1, 0x82C1, 0x8280, 0x8A60, 0x9280, 0x9280, 0x8260, 0x7A40, 0x92E0, 0xAB81, // 0x1210 (4624) -0xB3A2, 0xAB41, 0x92C0, 0x8AA0, 0x9B40, 0xBC21, 0xBC61, 0xB400, 0xA3E0, 0xA3C0, 0x9B80, 0xABA0, 0xB420, 0xC441, 0xB421, 0xA3A0, // 0x1220 (4640) -0x8A01, 0x8200, 0x8220, 0x8A61, 0x8A61, 0x8A62, 0x7A82, 0x7283, 0x7A83, 0x7283, 0x72A3, 0x7AA2, 0x8281, 0x92A1, 0x9AC1, 0x9AC1, // 0x1230 (4656) -0x9AA2, 0xA282, 0xB202, 0xB181, 0xB160, 0xA9A1, 0xA201, 0x9222, 0x7A23, 0x6A23, 0x7B08, 0x8BCD, 0x83CE, 0xBDB6, 0xBDB6, 0xA4F3, // 0x1240 (4672) -0xBDF6, 0xB5B6, 0xC637, 0x940E, 0x7AA7, 0x7A23, 0x8222, 0x8A22, 0x81E2, 0x81C2, 0x9222, 0x9A83, 0x9AC2, 0x9AE2, 0x9B23, 0x9364, // 0x1250 (4688) -0x8363, 0x6B22, 0x5B00, 0x5AE0, 0x6AE1, 0x72E1, 0x82E1, 0x8AE2, 0x92E1, 0x92A1, 0x8A60, 0x8220, 0x7200, 0x69E0, 0x7A40, 0x92E1, // 0x1260 (4704) -0xAB62, 0xA321, 0x8A80, 0x8260, 0xA320, 0xBC01, 0xC441, 0xB3E0, 0xB3E0, 0xB3E1, 0xABC1, 0xBBE1, 0xCC62, 0xC441, 0xB400, 0xB3E0, // 0x1270 (4720) -0x8A01, 0x81E1, 0x8221, 0x8A61, 0x8A62, 0x8262, 0x7A63, 0x7263, 0x7264, 0x7A63, 0x7A83, 0x8283, 0x8A82, 0x92A2, 0x9AA2, 0xA2A2, // 0x1280 (4736) -0x9AA2, 0xAA62, 0xB202, 0xB161, 0xA920, 0xA941, 0xA1C2, 0x9203, 0x7A23, 0x61E3, 0x6A87, 0xB4F2, 0x9470, 0x9CD2, 0xBDB6, 0x9CB2, // 0x1290 (4752) -0xBDD6, 0xBDD6, 0xC618, 0xACB1, 0x7A85, 0x8222, 0x8A22, 0x8A02, 0x81C2, 0x89C2, 0x9222, 0x9242, 0x8A62, 0x8A83, 0x8AC3, 0x8B24, // 0x12A0 (4768) -0x7343, 0x6321, 0x5B21, 0x5B00, 0x6AE1, 0x7AE1, 0x82E1, 0x92E1, 0xA322, 0x9B02, 0x8A81, 0x7A41, 0x7221, 0x6201, 0x6A00, 0x8281, // 0x12B0 (4784) -0x9B21, 0x9B01, 0x8A80, 0x8260, 0xA320, 0xBBE2, 0xC401, 0xBBE0, 0xBC01, 0xBC01, 0xB3C1, 0xBBE1, 0xCC42, 0xC421, 0xB3E1, 0xB401, // 0x12C0 (4800) -}; diff --git a/libraries/UTFT_Buttons/examples/UTFT_Buttons_Bitmap_Demo/cat.c b/libraries/UTFT_Buttons/examples/UTFT_Buttons_Bitmap_Demo/cat.c deleted file mode 100644 index bfc86c0..0000000 --- a/libraries/UTFT_Buttons/examples/UTFT_Buttons_Bitmap_Demo/cat.c +++ /dev/null @@ -1,314 +0,0 @@ -// Generated by : ImageConverter 565 v1.2 -// Dimensions : 80x60 pixels -// Size : 9 600 Bytes - -#if defined(__AVR__) - #include -#elif defined(__PIC32MX__) - #define PROGMEM -#elif defined(__arm__) - #define PROGMEM -#endif - -const unsigned short cat[0x12C0] PROGMEM ={ -0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0820, 0x0800, 0x0000, 0x0820, 0x1062, 0x0820, // 0x0010 (16) -0x0800, 0x28E3, 0x3144, 0x2903, 0x20A1, 0x1040, 0x0820, 0x0820, 0x1041, 0x20C3, 0x20E3, 0x1862, 0x1882, 0x1882, 0x18C2, 0x0840, // 0x0020 (32) -0x1000, 0x3103, 0x3103, 0x41C6, 0x6289, 0x5A68, 0x3144, 0x2081, 0x6289, 0x944F, 0x732A, 0x8BCD, 0x8BCD, 0x940E, 0x9C4F, 0x8BAC, // 0x0030 (48) -0x49E5, 0x4184, 0x6AEA, 0x5A68, 0x3964, 0x2903, 0x0800, 0x0800, 0x0800, 0x1881, 0x1041, 0x1882, 0x20A2, 0x20A2, 0x20A2, 0x20C2, // 0x0040 (64) -0x28C1, 0x28C1, 0x28E2, 0x28C2, 0x28C2, 0x28A2, 0x2082, 0x2082, 0x28C2, 0x28C2, 0x2903, 0x2903, 0x28E2, 0x2903, 0x2923, 0x2923, // 0x0050 (80) -0x0820, 0x0821, 0x0820, 0x0800, 0x0800, 0x0820, 0x0800, 0x0800, 0x0800, 0x0820, 0x0820, 0x0800, 0x0820, 0x0820, 0x94B2, 0xB575, // 0x0060 (96) -0x734D, 0x4186, 0x41C6, 0x5248, 0x6AEA, 0x5247, 0x3984, 0x3964, 0x3103, 0x20C2, 0x3124, 0x3144, 0x20C2, 0x1881, 0x3144, 0x39A5, // 0x0070 (112) -0x3944, 0x49C6, 0x5227, 0x83AD, 0x9C70, 0x7B6C, 0x732B, 0x6289, 0xACF2, 0xBD53, 0x9C4F, 0x6AC9, 0x732A, 0x5A67, 0xA490, 0xA4B0, // 0x0080 (128) -0x5A47, 0x2080, 0x3964, 0x5227, 0x6ACA, 0x734C, 0x3144, 0x1000, 0x1020, 0x1881, 0x1020, 0x1861, 0x1840, 0x3103, 0x28E2, 0x2081, // 0x0090 (144) -0x28C2, 0x1880, 0x2081, 0x28C2, 0x28E2, 0x20A1, 0x1881, 0x20A2, 0x20A2, 0x20C2, 0x28E2, 0x28E2, 0x20E2, 0x2903, 0x2923, 0x2903, // 0x00A0 (160) -0x0821, 0x0821, 0x0800, 0x0000, 0x0800, 0x0820, 0x0800, 0x0000, 0x0820, 0x0821, 0x0800, 0x0000, 0x0000, 0x0000, 0x4A28, 0xBDB6, // 0x00B0 (176) -0xE6FB, 0xD638, 0xACF3, 0x7B4C, 0x4A07, 0x6288, 0x7B4B, 0x7B4B, 0x7B6C, 0x6AA9, 0x4185, 0x4185, 0x49E6, 0x49C6, 0x5A68, 0x734B, // 0x00C0 (192) -0x6AEA, 0x6AC9, 0x734B, 0x9C70, 0x8C0F, 0x7B6C, 0x7B6C, 0x9C90, 0xD617, 0xAD12, 0x6289, 0x6ACA, 0x732B, 0x3984, 0x9C50, 0xCDD6, // 0x00D0 (208) -0x5A68, 0x2902, 0x5227, 0x732B, 0x944F, 0xA491, 0x7B4C, 0x28E3, 0x4185, 0x4185, 0x28C2, 0x1840, 0x1020, 0x28C2, 0x2081, 0x2081, // 0x00E0 (224) -0x1881, 0x20A2, 0x1881, 0x1861, 0x20A2, 0x20A1, 0x2081, 0x20A2, 0x28E2, 0x2903, 0x28E2, 0x28E2, 0x28E3, 0x28E2, 0x2903, 0x2903, // 0x00F0 (240) -0x0820, 0x0820, 0x0000, 0x0000, 0x0000, 0x0820, 0x0800, 0x0000, 0x0000, 0x0820, 0x0000, 0x0820, 0x0000, 0x0820, 0x0841, 0x18A3, // 0x0100 (256) -0x630C, 0xBDD7, 0xDE99, 0xE6DB, 0xBDB5, 0x9C71, 0x7B4C, 0x6AA9, 0x6AEA, 0x6ACA, 0x5A68, 0x41A5, 0x5227, 0x940E, 0x9C90, 0x83CD, // 0x0110 (272) -0x732A, 0x838C, 0x9C70, 0xACD1, 0x8BEE, 0x7B6C, 0x940F, 0xB533, 0xE699, 0xB533, 0x5A68, 0x734C, 0x62A9, 0x49E6, 0xACF2, 0xD657, // 0x0120 (288) -0x83AD, 0x5248, 0x5227, 0x62A9, 0xA4D2, 0xACF2, 0x8BCE, 0x6289, 0x5207, 0x5207, 0x5A68, 0x49C6, 0x28E2, 0x1840, 0x2081, 0x2081, // 0x0130 (304) -0x20A2, 0x20A2, 0x20A2, 0x28E3, 0x28E2, 0x20C2, 0x20C2, 0x20C2, 0x20C2, 0x3123, 0x3123, 0x3103, 0x2903, 0x20A2, 0x20E3, 0x28E3, // 0x0140 (320) -0x0820, 0x0000, 0x0000, 0x0000, 0x0000, 0x0820, 0x0820, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0821, // 0x0150 (336) -0x3186, 0x6B6E, 0x94B3, 0xC5F8, 0xDEBB, 0xEF1C, 0xDE9A, 0xC5B6, 0xA4B2, 0x9C71, 0x9C70, 0xA4B1, 0x942F, 0x9C90, 0x9C90, 0x7B6C, // 0x0160 (352) -0x7B6B, 0x9C6F, 0xACF1, 0xACD1, 0x7B8C, 0x734B, 0x83CD, 0xBD54, 0xCDF6, 0xCDD6, 0x734C, 0x8C0F, 0x49E6, 0x5A89, 0xBD75, 0xD658, // 0x0170 (368) -0x83AD, 0x734B, 0x62C9, 0x7B6C, 0xACD1, 0xACD1, 0x93EE, 0x6268, 0x51E6, 0x83AD, 0x9C4F, 0x72EA, 0x5A27, 0x49A5, 0x5207, 0x41A6, // 0x0180 (384) -0x3945, 0x20C3, 0x2082, 0x20A2, 0x2081, 0x28E2, 0x3144, 0x28E2, 0x3985, 0x3144, 0x28E3, 0x20C3, 0x20E3, 0x1040, 0x1040, 0x20C2, // 0x0190 (400) -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0820, 0x0000, 0x0000, 0x0000, 0x0820, 0x0800, 0x0000, // 0x01A0 (416) -0x18C3, 0x736E, 0x8C72, 0xAD36, 0xC619, 0xD67B, 0xD69B, 0xE6FC, 0xEF3D, 0xEEFC, 0xE71B, 0xE6B9, 0xCE37, 0xBD74, 0x940E, 0x838C, // 0x01B0 (432) -0x940E, 0xA4B0, 0xA4B0, 0x942E, 0x6288, 0x5A47, 0xA4B1, 0x7B6C, 0x942F, 0xCDD6, 0x8BEE, 0x9C70, 0x6AEA, 0x9C70, 0x942F, 0xA491, // 0x01C0 (448) -0xA4B1, 0x62A9, 0x6AC9, 0x83AD, 0xACB1, 0xACB1, 0x93EE, 0x62A8, 0x72C9, 0x8BAD, 0xA470, 0xA470, 0x942F, 0x7B6C, 0x730B, 0x5207, // 0x01D0 (464) -0x3124, 0x20A2, 0x1040, 0x1881, 0x3964, 0x5247, 0x62C9, 0x62A9, 0x49E7, 0x5A69, 0x8C10, 0xAD14, 0xC5D7, 0xACF4, 0x5A89, 0x20E3, // 0x01E0 (480) -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0800, 0x0841, // 0x01F0 (496) -0x0820, 0x6B2D, 0xA4F5, 0xB597, 0xC63A, 0xD67C, 0xD69C, 0xCE7B, 0xCE39, 0xCE79, 0xD699, 0xD678, 0xBD95, 0xA4B1, 0x8BCD, 0x7B2A, // 0x0200 (512) -0x9C6F, 0xACF1, 0x9C4F, 0x6AC9, 0x41A5, 0x7B6C, 0xA491, 0x5227, 0x7B4B, 0xC5B5, 0xACD2, 0x83AD, 0x9C4F, 0xC5B5, 0x5A68, 0x5A47, // 0x0210 (528) -0xACD2, 0x836C, 0x51E6, 0x6AA9, 0xA46F, 0xACB0, 0x9C4E, 0x7B2A, 0x836B, 0x93EE, 0xA490, 0xBD53, 0xCDD5, 0xACB1, 0x732B, 0x49E6, // 0x0220 (544) -0x28E2, 0x1020, 0x0800, 0x2902, 0x5247, 0x5A88, 0x62A9, 0x734D, 0xA4D3, 0xDE7A, 0xDEBB, 0xDEBB, 0xCE18, 0xAD14, 0x9CD2, 0x4207, // 0x0230 (560) -0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0820, 0x0000, 0x0800, 0x0000, 0x0800, // 0x0240 (576) -0x0800, 0x41C7, 0xAD35, 0xB577, 0xC61A, 0xBDD9, 0xBE1A, 0xC63A, 0xC619, 0xBDF8, 0xD699, 0xD658, 0xB533, 0xA470, 0x9C0E, 0x8BAD, // 0x0250 (592) -0x8BAD, 0xA490, 0x9C70, 0x730A, 0x6AE9, 0xACF2, 0xACF2, 0x8BEE, 0x838C, 0xCDF6, 0x9C70, 0x9C4F, 0xC574, 0xB4F2, 0x72EA, 0x7B4C, // 0x0260 (608) -0xB533, 0xACF2, 0x5206, 0x7B4B, 0x9C4F, 0xB4D1, 0x9C4F, 0x940E, 0x93CD, 0x9C0E, 0xACB0, 0xB513, 0xCDF6, 0xD617, 0xC5D5, 0xBD95, // 0x0270 (624) -0x8BEE, 0x6289, 0x6288, 0x7B8C, 0x8C0E, 0xA4B1, 0xC5B5, 0xDE9A, 0xD65A, 0xC5B8, 0xB556, 0x9CB4, 0x7BAF, 0x630C, 0x6B4C, 0x3185, // 0x0280 (640) -0x0000, 0x0800, 0x0820, 0x0820, 0x0800, 0x0800, 0x0800, 0x0820, 0x0800, 0x0800, 0x0820, 0x0820, 0x0800, 0x0000, 0x0800, 0x0820, // 0x0290 (656) -0x1060, 0x1041, 0x8BF1, 0xCE1A, 0xB598, 0xC61A, 0xCE5B, 0xCE3A, 0xD67B, 0xCE39, 0xDE79, 0xC5B5, 0xA4B0, 0x942E, 0x7B6B, 0x838C, // 0x02A0 (672) -0x836C, 0x940E, 0xB513, 0x9450, 0x9430, 0xCDF7, 0xD658, 0xA4B1, 0x8BAD, 0xACB1, 0x9C2E, 0xAC90, 0xBD73, 0x7B4C, 0x944F, 0xC5D6, // 0x02B0 (688) -0xCDD6, 0xBD13, 0x8BAD, 0x93EE, 0xA490, 0xACB1, 0xB4D1, 0xA42E, 0x9BED, 0xA40D, 0x9BED, 0xAC6F, 0xCD94, 0xDE99, 0xDEBA, 0xE6DB, // 0x02C0 (704) -0xE6DB, 0xE6DB, 0xDE9A, 0xCE39, 0xDE7A, 0xE6BC, 0xCE3A, 0xC5F9, 0xBDB8, 0xA515, 0x9452, 0x734E, 0x62EC, 0x9CB3, 0x734D, 0x20C3, // 0x02D0 (720) -0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0800, 0x0820, 0x0820, 0x0800, 0x0800, 0x0820, 0x0820, 0x0800, 0x0800, 0x0820, 0x1020, // 0x02E0 (736) -0x1861, 0x1041, 0x522A, 0xD67C, 0xC61A, 0xCE5B, 0xD67B, 0xDEDD, 0xDEBC, 0xD67A, 0xC5D7, 0xBD74, 0xA4B0, 0x83AC, 0x6AC9, 0x5A27, // 0x02F0 (752) -0x6288, 0xA490, 0xAD12, 0x940F, 0x9C70, 0xCDD7, 0xE6DA, 0xB4F2, 0x93EE, 0x8BAD, 0x836C, 0x942E, 0xACD1, 0x7B6C, 0xC5B5, 0xE6DA, // 0x0300 (768) -0xDE37, 0xACD2, 0x8BCD, 0x9C90, 0xA4D2, 0x838D, 0x838C, 0x940E, 0x9BED, 0x93CC, 0x93AC, 0x9C2E, 0xBD53, 0xDE78, 0xDE99, 0xC5F8, // 0x0310 (784) -0xC5D7, 0xBDB7, 0xC5D7, 0xD65A, 0xCE3A, 0xCE19, 0xCE5A, 0xCE1A, 0xB577, 0x9CD4, 0x9CB4, 0x9CB3, 0xBD97, 0xAD35, 0x3986, 0x28E4, // 0x0320 (800) -0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x1040, // 0x0330 (816) -0x1061, 0x1061, 0x3186, 0xCE1A, 0xDEDC, 0xCE3A, 0xDEDD, 0xE6FD, 0xD65A, 0xC5B7, 0xB554, 0xB513, 0xACF1, 0x83AC, 0x51E6, 0x3102, // 0x0340 (832) -0x5A47, 0xB533, 0xACD2, 0x4A07, 0x8C0F, 0xD638, 0xE6DA, 0xC5B5, 0x8BEE, 0x838C, 0x9C4F, 0x9C4F, 0x9C70, 0x9C90, 0xE6D9, 0xEEFA, // 0x0350 (848) -0xCDF6, 0x838C, 0x732B, 0xACF2, 0xACF2, 0x6AEA, 0x49E6, 0x7B0A, 0x8BAC, 0x9C0E, 0xA42F, 0xA44F, 0xACF2, 0xCDD6, 0xC5F7, 0xB555, // 0x0360 (864) -0xB576, 0xC5F8, 0xCE39, 0xD67B, 0xD67B, 0xD69B, 0xD69C, 0xCE5B, 0xC5FA, 0xB598, 0xBDB8, 0xCE19, 0xD67A, 0x6B0C, 0x18A2, 0x28E3, // 0x0370 (880) -0x1020, 0x0820, 0x0820, 0x0820, 0x0820, 0x1020, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x1020, // 0x0380 (896) -0x1040, 0x1061, 0x2904, 0xB576, 0xDEDC, 0xC61A, 0xDEBC, 0xE6FD, 0xCE18, 0xB534, 0xBD74, 0xB512, 0xA4B1, 0x836C, 0x5A48, 0x5A48, // 0x0390 (912) -0x4164, 0xACD2, 0xBD54, 0x3985, 0x83CE, 0xE6DA, 0xFF9D, 0xD657, 0xBD53, 0xACD1, 0xB532, 0xBD53, 0xBD73, 0xD637, 0xEF3B, 0xEEFA, // 0x03A0 (928) -0xAD12, 0x41C5, 0x62C9, 0xC595, 0xC5B5, 0x6AC9, 0x3122, 0x51E5, 0x72C9, 0x9BED, 0xAC90, 0xA490, 0xB512, 0xCDB5, 0xC5B6, 0xBD96, // 0x03B0 (944) -0xC5D7, 0xCE5A, 0xD69B, 0xCE3A, 0xC63A, 0xC61A, 0xC5FA, 0xCE7B, 0xCE3A, 0xCE3A, 0xD67B, 0xEF1D, 0xB596, 0x3145, 0x3124, 0x20E3, // 0x03C0 (960) -0x0820, 0x0800, 0x0800, 0x0820, 0x1020, 0x1020, 0x1020, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, 0x0820, // 0x03D0 (976) -0x1061, 0x0840, 0x20E3, 0xA4F4, 0xEF5E, 0xBDB8, 0xBD97, 0xDE9B, 0xDE79, 0xB513, 0xACF2, 0xACF2, 0xA491, 0x8BCE, 0x93EE, 0xA491, // 0x03E0 (992) -0x940F, 0x8BCE, 0xC5D6, 0x7B6C, 0x9450, 0xEF3C, 0xFF9D, 0xE6B9, 0xDE57, 0xD616, 0xC594, 0xD616, 0xDE78, 0xE6FA, 0xFFBD, 0xEF1A, // 0x03F0 (1008) -0x942F, 0x3984, 0x838C, 0xCDF6, 0x7B4B, 0x4163, 0x4163, 0x4984, 0x5205, 0x8BAC, 0xBCF1, 0xBCF1, 0xBCF2, 0xC533, 0xC574, 0xCDD6, // 0x0400 (1024) -0xD679, 0xD69A, 0xDEBB, 0xD69B, 0xD67B, 0xCE5B, 0xC5F9, 0xBDD9, 0xCE5B, 0xDE9C, 0xDEDC, 0xDEDC, 0x62CB, 0x18A2, 0x28E3, 0x20E2, // 0x0410 (1040) -0x0820, 0x0820, 0x0820, 0x1021, 0x1041, 0x1041, 0x1041, 0x1041, 0x1021, 0x1021, 0x1021, 0x1041, 0x1041, 0x1021, 0x1021, 0x1021, // 0x0420 (1056) -0x1040, 0x1061, 0x1061, 0x4A28, 0xE6DC, 0xE6BC, 0xD67A, 0xD619, 0xC5D6, 0xBD53, 0xB533, 0xACD1, 0xA491, 0xBD54, 0xB554, 0xB513, // 0x0430 (1072) -0xC5B5, 0xBD95, 0xDE99, 0xBD75, 0xC5D6, 0xFF9D, 0xF79D, 0xDEB9, 0xD637, 0xDE98, 0xDE77, 0xDE77, 0xDE98, 0xEF1B, 0xFFDE, 0xE71B, // 0x0440 (1088) -0x9450, 0x6AEA, 0xD616, 0x9C70, 0x6AC9, 0x838C, 0x9C4F, 0x8BAC, 0x834B, 0x9C0D, 0xBD11, 0xBD32, 0xC532, 0xC533, 0xBD12, 0xB4F2, // 0x0450 (1104) -0xB554, 0xDE9A, 0xEF3D, 0xF75E, 0xEF3E, 0xE6DD, 0xD65B, 0xC5D9, 0xC5F9, 0xDE9B, 0xEF3E, 0xCE39, 0x39A6, 0x2904, 0x28E3, 0x2903, // 0x0460 (1120) -0x1040, 0x1040, 0x1040, 0x1041, 0x1041, 0x1041, 0x1041, 0x1041, 0x1041, 0x1041, 0x1041, 0x1041, 0x1041, 0x1041, 0x1041, 0x1041, // 0x0470 (1136) -0x1040, 0x1881, 0x1061, 0x2924, 0xBD96, 0xE6BC, 0xD639, 0xC5B6, 0xBD54, 0xBD53, 0xC594, 0xB512, 0xB4F3, 0xCDF7, 0xDE99, 0xE6B9, // 0x0480 (1152) -0xD658, 0xD658, 0xF77D, 0xFFBE, 0xEF3C, 0xFFBE, 0xF79D, 0xDEB9, 0xDE78, 0xE6B9, 0xE6D9, 0xD657, 0xDE98, 0xF75C, 0xFFDE, 0xF77D, // 0x0490 (1168) -0xBDD6, 0xCE37, 0xE6DA, 0xCDF6, 0xD617, 0xC594, 0xBD53, 0xB512, 0xACD1, 0xACD1, 0xBD33, 0xBD33, 0xC573, 0xC553, 0xBCF1, 0xACB1, // 0x04A0 (1184) -0xBD54, 0xD637, 0xDEBA, 0xEEFB, 0xE6DB, 0xC5D8, 0xB556, 0xB557, 0xCE1A, 0xDE9B, 0xDEBB, 0x8C10, 0x3145, 0x3144, 0x2903, 0x20C2, // 0x04B0 (1200) -0x1041, 0x1041, 0x1041, 0x1040, 0x1040, 0x1040, 0x1040, 0x1040, 0x1040, 0x1041, 0x1041, 0x1041, 0x1040, 0x1040, 0x1041, 0x1041, // 0x04C0 (1216) -0x1061, 0x1040, 0x18A2, 0x20C2, 0x9451, 0xE6DC, 0xC5D8, 0xA492, 0xB513, 0xCDD5, 0xBD73, 0xA490, 0xBD75, 0xCDF7, 0xD637, 0x9450, // 0x04D0 (1232) -0x41C6, 0x5269, 0x736D, 0xBDD6, 0xFFDE, 0xFFFF, 0xF79D, 0xCE58, 0xD678, 0xEEFA, 0xE6B9, 0xD637, 0xDE99, 0xF77C, 0xFFFF, 0xFFBE, // 0x04E0 (1248) -0xFFDF, 0xE6FB, 0xBDB6, 0xBD75, 0xBD95, 0xE6B9, 0xDE78, 0xD637, 0xC5D5, 0xBD54, 0xB512, 0xACD2, 0xC594, 0xCD94, 0xB511, 0xB4F1, // 0x04F0 (1264) -0xBD33, 0xB513, 0xD637, 0xE6BA, 0xCDF7, 0xB535, 0xB576, 0xD639, 0xD67A, 0xEF1D, 0xCE39, 0x41E8, 0x2904, 0x3144, 0x2102, 0x2943, // 0x0500 (1280) -0x0820, 0x1041, 0x1041, 0x1040, 0x1040, 0x1041, 0x1040, 0x0820, 0x1040, 0x1041, 0x1041, 0x1040, 0x1040, 0x1040, 0x1041, 0x1041, // 0x0510 (1296) -0x1061, 0x1881, 0x20C2, 0x20E2, 0x6B0B, 0xC5B5, 0x9C4F, 0x9C4F, 0xACB0, 0xB4D1, 0xC553, 0xC595, 0xBD54, 0xBD54, 0xACF2, 0x4A28, // 0x0520 (1312) -0x3A08, 0x2165, 0x2966, 0x39E8, 0x94B2, 0xFFFF, 0xFFBD, 0xDEB9, 0xDEB9, 0xE6F9, 0xE6FA, 0xD657, 0xE6FA, 0xFFDE, 0xFFDE, 0xFFFF, // 0x0530 (1328) -0x9CD3, 0x4A69, 0x41E7, 0x41E7, 0x4207, 0x5A8A, 0xBD95, 0xE6DA, 0xDE57, 0xCDD5, 0xBD52, 0xB511, 0xCDB4, 0xCDB4, 0xC594, 0xC594, // 0x0540 (1344) -0xC532, 0xA44F, 0xB4F2, 0xD638, 0xC5D7, 0xC5F8, 0xD69B, 0xDEFC, 0xE6FC, 0xEF5D, 0x7B8E, 0x20E3, 0x18A2, 0x2903, 0x2944, 0x2944, // 0x0550 (1360) -0x1040, 0x1041, 0x1061, 0x1041, 0x1041, 0x1061, 0x1061, 0x1041, 0x1041, 0x1041, 0x1041, 0x1061, 0x1041, 0x1040, 0x1041, 0x1061, // 0x0560 (1376) -0x1882, 0x20C2, 0x20E3, 0x2902, 0x39A5, 0x838C, 0x83AC, 0x940E, 0x93ED, 0x93CD, 0x8BAC, 0x8BAD, 0x9C50, 0xCE37, 0xB574, 0x632C, // 0x0570 (1392) -0x29C7, 0x0062, 0x08C3, 0x4A8B, 0x634D, 0xE71C, 0xFFFF, 0xDEDA, 0xDE99, 0xE6DA, 0xE6D9, 0xDEB9, 0xEF5C, 0xFFDE, 0xFFFF, 0xCE59, // 0x0580 (1408) -0x632D, 0x4A6A, 0x10C3, 0x18E4, 0x632C, 0x5AAA, 0x5269, 0xB574, 0xCDF6, 0xB533, 0xCDD5, 0xCDB5, 0xC573, 0xBD53, 0xC574, 0xB4F1, // 0x0590 (1424) -0xB4D0, 0x9BED, 0x7B4B, 0xA4B1, 0xC5D7, 0xC5D7, 0xCE39, 0xD67B, 0xDEBB, 0xBD97, 0x41C7, 0x1040, 0x1881, 0x20E3, 0x3144, 0x3144, // 0x05A0 (1440) -0x1061, 0x1061, 0x1061, 0x1061, 0x1881, 0x1881, 0x1881, 0x1881, 0x1061, 0x1061, 0x1061, 0x1881, 0x1881, 0x1061, 0x1061, 0x1881, // 0x05B0 (1456) -0x20C2, 0x20C2, 0x20E2, 0x3144, 0x6289, 0x83AC, 0x8BAC, 0x93CD, 0x6267, 0x2060, 0x3943, 0x6AA9, 0xCDF6, 0xFF7D, 0x840F, 0x4A69, // 0x05C0 (1472) -0x08A3, 0x0084, 0x4ACC, 0x73F0, 0x5B0D, 0xAD56, 0xFFFF, 0xEF3C, 0xDEDA, 0xE6FB, 0xE6DA, 0xE6DA, 0xF79D, 0xFFFF, 0xEF5D, 0x8410, // 0x05D0 (1488) -0x6BAF, 0x08A4, 0x29A7, 0x31E9, 0x1925, 0x8C92, 0x5269, 0x9C92, 0xBD74, 0x83AD, 0x8BEE, 0xB512, 0xCDB5, 0xCD94, 0xC574, 0xC553, // 0x05E0 (1504) -0xBD11, 0xB4D1, 0x8B8C, 0x836C, 0xACF3, 0xC5D7, 0xCE18, 0xD659, 0xC5D7, 0xAD34, 0x5249, 0x1881, 0x20A2, 0x3144, 0x3164, 0x41C6, // 0x05F0 (1520) -0x1881, 0x1881, 0x1881, 0x1882, 0x18A2, 0x1882, 0x1882, 0x18A2, 0x1882, 0x1881, 0x1881, 0x18A2, 0x18A2, 0x1882, 0x1881, 0x1881, // 0x0600 (1536) -0x20A2, 0x20E3, 0x2903, 0x3964, 0x6AEA, 0x838C, 0x8BAC, 0x72C9, 0x3922, 0x5A27, 0x72C9, 0x7B4C, 0xE6DA, 0xFF9D, 0x630B, 0x4A69, // 0x0610 (1552) -0x2166, 0x10E5, 0x2167, 0x5B2D, 0x6B8F, 0x7BF0, 0xF7BF, 0xF77D, 0xE71B, 0xE6DA, 0xE6FA, 0xEF3C, 0xFFFF, 0xFF9E, 0x7B8E, 0x4209, // 0x0620 (1568) -0x6B8F, 0x00A4, 0x3A2A, 0x426B, 0x2187, 0x8452, 0x528A, 0xB555, 0xF77D, 0xB533, 0x730A, 0x5A27, 0x6268, 0x7B4B, 0x940F, 0xB4D1, // 0x0630 (1584) -0xC553, 0xB4B0, 0xAC90, 0x8BAD, 0x940F, 0xCDD6, 0xCDF7, 0xB555, 0x9C92, 0x6AEB, 0x3165, 0x3985, 0x39A5, 0x41C6, 0x41E6, 0x3164, // 0x0640 (1600) -0x18A2, 0x18A1, 0x18A1, 0x18A2, 0x18A2, 0x18A1, 0x1881, 0x18A2, 0x18A2, 0x18A2, 0x18A1, 0x18A1, 0x18A2, 0x18A2, 0x1881, 0x1881, // 0x0650 (1616) -0x18A1, 0x20C2, 0x28E2, 0x3964, 0x5206, 0x6AC9, 0x7B4B, 0x4184, 0x4984, 0x72C9, 0x6AA9, 0x72EB, 0xC5B5, 0xFF9D, 0xC5D6, 0x4A69, // 0x0660 (1632) -0x3A08, 0x3A09, 0x5ACC, 0x73AF, 0x526A, 0x3986, 0xAD14, 0xE6DA, 0xDEB9, 0xCDF6, 0xEEFA, 0xEEDA, 0xEEFA, 0xA4B1, 0x4A07, 0x39A7, // 0x0670 (1648) -0x634E, 0x426B, 0x1105, 0x2146, 0x5B4D, 0x6B6E, 0x4A49, 0xDEDB, 0xFFBE, 0xDE58, 0x940F, 0x7B2B, 0x5A27, 0x3102, 0x28E2, 0x49C6, // 0x0680 (1664) -0x72E9, 0x836C, 0x93EE, 0x8BAD, 0x8BCE, 0xC574, 0xACB2, 0x6ACA, 0x4A07, 0x2904, 0x39A6, 0x5249, 0x5268, 0x5A69, 0x41C6, 0x3964, // 0x0690 (1680) -0x20C2, 0x20C2, 0x20C2, 0x20C2, 0x20C2, 0x18A1, 0x18A1, 0x18A1, 0x18A1, 0x18A1, 0x18A1, 0x1881, 0x18A1, 0x18A1, 0x18A1, 0x1881, // 0x06A0 (1696) -0x1881, 0x20C2, 0x2923, 0x3985, 0x49E6, 0x5227, 0x3103, 0x3964, 0x7B2B, 0x4184, 0x49C6, 0x51E6, 0x732B, 0xBD74, 0xF75C, 0xF73B, // 0x06B0 (1712) -0xDE99, 0xE6FB, 0xFF9D, 0xF73C, 0x732C, 0x41A5, 0x83AD, 0xC594, 0xCDB5, 0xC5B4, 0xD616, 0xC594, 0x730A, 0x3923, 0x51E6, 0x83CE, // 0x06C0 (1728) -0xB5B6, 0xA535, 0x8431, 0x73AF, 0x73AE, 0x6B6D, 0xCE38, 0xFFBE, 0xF73B, 0xACB1, 0x6288, 0x7B4B, 0xA491, 0x940F, 0x5207, 0x1860, // 0x06D0 (1744) -0x28A1, 0x4165, 0x6AA9, 0x838D, 0x730B, 0xACD2, 0xCDD6, 0x7B6D, 0x1861, 0x20C2, 0x3185, 0x5269, 0x62EA, 0x62EA, 0x41E6, 0x2902, // 0x06E0 (1760) -0x20E2, 0x20E2, 0x20E2, 0x20E2, 0x20E2, 0x20C2, 0x20C2, 0x20C2, 0x20C2, 0x20C2, 0x20C2, 0x20C2, 0x20A2, 0x20C2, 0x20C2, 0x20C2, // 0x06F0 (1776) -0x2903, 0x2902, 0x2903, 0x3144, 0x5228, 0x4A27, 0x1040, 0x5A89, 0xBD75, 0x838D, 0x5227, 0x836C, 0x7B6C, 0x7B4B, 0x9C4F, 0xC594, // 0x0700 (1792) -0xD657, 0xDE98, 0xD617, 0xB4F2, 0x6268, 0x8B8C, 0x8BAD, 0xB512, 0xB4D1, 0xB4F1, 0xBD32, 0xA44F, 0x6288, 0x3943, 0x51E6, 0xCDB5, // 0x0710 (1808) -0xFFFE, 0xFFFE, 0xFFDE, 0xF77D, 0xEF1B, 0xF73C, 0xEF1A, 0xDE78, 0xA490, 0x5A47, 0x6AC9, 0x836C, 0x62A8, 0x732B, 0x9450, 0x732B, // 0x0720 (1824) -0x3144, 0x3104, 0x4A07, 0x838D, 0x7B4B, 0x8BCE, 0xB533, 0x9C91, 0x41A6, 0x1040, 0x2924, 0x4A48, 0x5AA9, 0x62EA, 0x5247, 0x3164, // 0x0730 (1840) -0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x28E3, 0x2903, 0x20E2, 0x20E2, 0x20E2, 0x20E2, 0x20C2, 0x20E2, 0x2923, // 0x0740 (1856) -0x3123, 0x3143, 0x3964, 0x3164, 0x2923, 0x18A2, 0x1881, 0x5A8A, 0xB554, 0x8BEF, 0x41A5, 0x6268, 0x836C, 0x838C, 0x834A, 0xA46F, // 0x0750 (1872) -0xB512, 0xA490, 0x836C, 0x7B2B, 0xACD1, 0xC594, 0xA42E, 0xB4B0, 0xA44E, 0xACB0, 0xACAF, 0xB4F1, 0x9C2E, 0x72EA, 0x49C5, 0x7B4C, // 0x0760 (1888) -0xBD73, 0xDE57, 0xDE78, 0xD657, 0xD637, 0xBD74, 0xACD1, 0xA470, 0x9C4F, 0x9C4F, 0xA470, 0x7B4B, 0x7B6B, 0x7B6C, 0x9C91, 0xCE38, // 0x0770 (1904) -0x83EF, 0x5228, 0x5228, 0x730B, 0x7B6C, 0x838D, 0x8BEE, 0xA4B1, 0x6B2B, 0x3165, 0x3165, 0x3185, 0x3165, 0x5248, 0x5A89, 0x39A5, // 0x0780 (1920) -0x2903, 0x2923, 0x2923, 0x2923, 0x2903, 0x2923, 0x2923, 0x2923, 0x2923, 0x2923, 0x2923, 0x2923, 0x2903, 0x2903, 0x2903, 0x2903, // 0x0790 (1936) -0x3144, 0x3123, 0x3985, 0x4A08, 0x3165, 0x3144, 0x5A8A, 0xB554, 0x8C0F, 0x49C6, 0x5207, 0x5227, 0x6ACA, 0x732B, 0xAD12, 0xE6B9, // 0x07A0 (1952) -0xBD94, 0x5227, 0x5207, 0xB554, 0xEF1B, 0xACF2, 0x7B4C, 0x838D, 0x8BCE, 0x8BCE, 0x83CD, 0x944F, 0xCE36, 0xE697, 0xACD0, 0x6267, // 0x07B0 (1968) -0x6268, 0xA490, 0xC574, 0xBD53, 0xBD53, 0xB4D1, 0xA470, 0x8BCD, 0x8BAD, 0x836C, 0x6288, 0x732B, 0xBD54, 0xE6B9, 0xE6DA, 0xE6FB, // 0x07C0 (1984) -0xCE17, 0x6AEC, 0x3985, 0x3986, 0x41C6, 0x62A9, 0x7B6C, 0x9450, 0x7B8D, 0x5248, 0x4A07, 0x4A48, 0x4207, 0x3185, 0x3164, 0x2943, // 0x07D0 (2000) -0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x20E2, 0x20E2, // 0x07E0 (2016) -0x3123, 0x41A6, 0x4A28, 0x5269, 0x4A28, 0x5269, 0x9451, 0xB554, 0xB554, 0x838D, 0x6ACA, 0x7B6C, 0x62A9, 0x9450, 0xD658, 0xE6B9, // 0x07F0 (2032) -0xD678, 0xC5D6, 0xBD95, 0xD678, 0xFFDE, 0x9430, 0x4185, 0x6248, 0x72EA, 0x5A48, 0x4A06, 0x5247, 0xD657, 0xFF9C, 0xE678, 0x72EA, // 0x0800 (2048) -0x49A5, 0x6ACA, 0xCDF6, 0xD5F6, 0xC595, 0xB533, 0xACD1, 0xACB1, 0xA470, 0x9C2F, 0x6AEA, 0x6AEA, 0x8BEE, 0x9C50, 0xACF3, 0xDE9A, // 0x0810 (2064) -0xEF1C, 0xB575, 0x5A8A, 0x3985, 0x3985, 0x3124, 0x4A07, 0x734C, 0x734C, 0x5AAA, 0x6B4C, 0x62EB, 0x3185, 0x10A1, 0x20E2, 0x3185, // 0x0820 (2080) -0x2903, 0x2923, 0x2923, 0x2923, 0x2903, 0x2923, 0x2923, 0x2923, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x28E3, 0x28E3, // 0x0830 (2096) -0x2923, 0x3985, 0x4A28, 0x5A89, 0x5269, 0x5AAA, 0xA4B2, 0x9430, 0x734C, 0x9C91, 0x8BEE, 0x734C, 0x9450, 0xBD75, 0xD679, 0xE6FB, // 0x0840 (2112) -0xEF3C, 0xEF5C, 0xFFFE, 0xFFBE, 0xFFFE, 0xD659, 0x3965, 0x5A28, 0x5A49, 0x5228, 0x5227, 0x8C0F, 0xFF7C, 0xFF7D, 0xDE38, 0xEEBA, // 0x0850 (2128) -0xDE78, 0xC5B6, 0xC5B6, 0xEF1B, 0xE6B9, 0xC5B6, 0xACF2, 0x8BEE, 0x7B4C, 0x732B, 0x6AEA, 0x6AEA, 0x62CA, 0x6B0B, 0x9C70, 0xDE79, // 0x0860 (2144) -0xE6DB, 0xE6FC, 0xB575, 0x6AEB, 0x41C6, 0x41A6, 0x5A69, 0x83CE, 0x5AAA, 0x5269, 0x6B2C, 0x4A49, 0x2123, 0x18A2, 0x3164, 0x4A28, // 0x0870 (2160) -0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2923, 0x2903, 0x2903, 0x2923, 0x2923, 0x2903, 0x2903, 0x2923, // 0x0880 (2176) -0x3144, 0x3985, 0x5269, 0x6B2C, 0x736D, 0x7BAE, 0x83CE, 0x5A89, 0x5269, 0x734C, 0x9C71, 0x8BEF, 0x83CE, 0xB554, 0xD638, 0xD679, // 0x0890 (2192) -0xE6DB, 0xE71C, 0xF79D, 0xFFDE, 0xFFDE, 0xFFBE, 0x9C71, 0x49C7, 0x4186, 0x49C7, 0x9451, 0xFF9D, 0xFFFF, 0xFFDE, 0xFFFF, 0xDEBA, // 0x08A0 (2208) -0xDEBA, 0xF75C, 0xE6FB, 0xDEBA, 0xEF3C, 0xE6DB, 0xCDD6, 0xC5D6, 0xB534, 0x734C, 0x6AEB, 0xAD13, 0xC5D6, 0xAD13, 0x9C91, 0x9450, // 0x08B0 (2224) -0xC5F7, 0xDEBB, 0xE6FB, 0xD638, 0xA4D3, 0x732C, 0x7B8D, 0x8BEF, 0x6B2C, 0x5AAA, 0x6B2C, 0x6B2C, 0x5289, 0x2965, 0x2944, 0x41E6, // 0x08C0 (2240) -0x28E3, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2903, 0x2923, 0x2923, // 0x08D0 (2256) -0x3164, 0x3965, 0x41C6, 0x62CA, 0x736D, 0x62EB, 0x41E7, 0x41C7, 0x3145, 0x3986, 0x62CB, 0x9450, 0x9C71, 0xB535, 0xB555, 0xBDB6, // 0x08E0 (2272) -0xE6BB, 0xEF3D, 0xF79E, 0xF77D, 0xEF5D, 0xEEFC, 0xDE79, 0x93F0, 0x4165, 0x8BCF, 0xDEBA, 0xF77D, 0xF7DE, 0xFFFF, 0xF7DE, 0xE73C, // 0x08F0 (2288) -0xE6FB, 0xEF1C, 0xE6DB, 0xE6FB, 0xDEBA, 0xD679, 0xCE18, 0xBD96, 0xC5B6, 0xC5B6, 0xC5B6, 0xDE79, 0xBD74, 0x6B0B, 0x49E7, 0x41A6, // 0x0900 (2304) -0x734C, 0xB575, 0xDE9A, 0xCDF7, 0xACF3, 0x9410, 0x83CF, 0x6B2C, 0x5269, 0x62CB, 0x7BCF, 0x8C30, 0x7BCE, 0x5ACB, 0x5289, 0x4207, // 0x0910 (2320) -0x20E2, 0x20E2, 0x20E2, 0x20E2, 0x2103, 0x2103, 0x2903, 0x2903, 0x2103, 0x2903, 0x2903, 0x2903, 0x2903, 0x2103, 0x2903, 0x2923, // 0x0920 (2336) -0x3144, 0x4A07, 0x5289, 0x5A89, 0x52A9, 0x5269, 0x39A6, 0x20C2, 0x20E3, 0x4A28, 0x734C, 0x8BEF, 0x83CF, 0x9431, 0xB555, 0xB556, // 0x0930 (2352) -0xCDF8, 0xE6DB, 0xEF3C, 0xEF5D, 0xDEDA, 0xD658, 0xDE38, 0xC575, 0x51C7, 0xB4D3, 0xE679, 0xE6DA, 0xEF3C, 0xF7BD, 0xF7DE, 0xE75C, // 0x0940 (2368) -0xE71B, 0xF77D, 0xE6FB, 0xCE17, 0xCE38, 0xCE38, 0xCE18, 0xA4B2, 0xA4D3, 0xBD96, 0xB555, 0xAD14, 0x8C10, 0x5A8A, 0x41A6, 0x2924, // 0x0950 (2384) -0x3965, 0x62AA, 0x838E, 0x8C0F, 0x8C0F, 0x83AE, 0x83CE, 0x734D, 0x6B0C, 0x6B2C, 0x83EF, 0x9492, 0x8C51, 0x83EF, 0x7BCE, 0x62EB, // 0x0960 (2400) -0x2103, 0x2103, 0x20E2, 0x2103, 0x20E2, 0x20E2, 0x20E2, 0x20E2, 0x20E2, 0x20E2, 0x2903, 0x2103, 0x20E2, 0x20E2, 0x20E2, 0x2903, // 0x0970 (2416) -0x3164, 0x41C6, 0x5268, 0x5AA9, 0x5269, 0x5289, 0x5AAA, 0x4A48, 0x5AAA, 0x736D, 0x7BAE, 0xACF3, 0xCDF8, 0xCDF8, 0xC5F8, 0xBD97, // 0x0980 (2432) -0xA493, 0xB535, 0xCE38, 0xDE9A, 0xC5F7, 0xACD3, 0x8B8E, 0x6A29, 0x38A2, 0x59A6, 0x93AF, 0xC554, 0xDE59, 0xEEFB, 0xF75D, 0xEF3C, // 0x0990 (2448) -0xF73C, 0xE6DA, 0xCE18, 0xD659, 0xD659, 0xCE38, 0xCE18, 0xD679, 0xD659, 0xC5D7, 0xB575, 0xC5B7, 0xAD34, 0x8C0F, 0x62EB, 0x5249, // 0x09A0 (2464) -0x4A07, 0x41A5, 0x4A07, 0x49E7, 0x6ACA, 0x9410, 0x7B6D, 0x62CB, 0x62CB, 0x734D, 0x83F0, 0x8C31, 0x8C31, 0x8C51, 0x7BAE, 0x5A89, // 0x09B0 (2480) -0x3164, 0x3164, 0x2944, 0x2944, 0x2923, 0x2103, 0x2103, 0x2103, 0x20E2, 0x2103, 0x2103, 0x2102, 0x20E2, 0x20E2, 0x2103, 0x2923, // 0x09C0 (2496) -0x3164, 0x39A5, 0x4A27, 0x5248, 0x39A5, 0x3185, 0x4A48, 0x83CE, 0x736D, 0x6B0B, 0x9451, 0xAD34, 0xCE18, 0xE6BB, 0xEF5D, 0xDEBB, // 0x09D0 (2512) -0xB535, 0x9451, 0x83EF, 0x83EF, 0x5228, 0x28C2, 0x2841, 0x3041, 0x48E3, 0x4062, 0x3841, 0x4924, 0x7269, 0x9BEF, 0xC534, 0xC596, // 0x09E0 (2528) -0xAD13, 0x8C0F, 0x6B0B, 0x5269, 0xA4F3, 0xDE9A, 0xE6FB, 0xF77D, 0xFF9E, 0xF75D, 0xF75D, 0xEF1C, 0xDE7A, 0xCDF8, 0xA4F3, 0x8C0F, // 0x09F0 (2544) -0x734C, 0x62A9, 0x5A69, 0x730B, 0x83AD, 0x7B6D, 0x5A69, 0x5A69, 0x39A6, 0x6B0C, 0x8410, 0x9472, 0x9492, 0x8C30, 0x6AEC, 0x62AB, // 0x0A00 (2560) -0x3144, 0x3164, 0x3164, 0x3144, 0x3144, 0x3144, 0x3144, 0x3144, 0x3143, 0x3144, 0x2923, 0x3143, 0x3143, 0x2903, 0x2903, 0x2923, // 0x0A10 (2576) -0x3185, 0x41E7, 0x4A48, 0x4A48, 0x3185, 0x20C2, 0x3185, 0x4A49, 0x62EB, 0x6B2D, 0x526A, 0x8C51, 0xB556, 0xD67A, 0xF75D, 0xF73D, // 0x0A20 (2592) -0xDE7B, 0xB515, 0x83EE, 0x41E6, 0x1020, 0x1820, 0x38A2, 0x82AA, 0x9B2B, 0x7A07, 0x6124, 0x6104, 0x58A3, 0x6124, 0x5964, 0x61C5, // 0x0A30 (2608) -0x6A48, 0x59E7, 0x4186, 0x734D, 0xC5F8, 0xF7BF, 0xF7DF, 0xF7DF, 0xFFDF, 0xFFDE, 0xFF9D, 0xEEFB, 0xCE17, 0xB514, 0x9451, 0x732D, // 0x0A40 (2624) -0x62CB, 0x6AEB, 0x6B0B, 0x83AE, 0x83CE, 0x4A07, 0x20E2, 0x2103, 0x2944, 0x62EB, 0x7BCF, 0x8410, 0x7BAE, 0x6B4D, 0x734C, 0x62CA, // 0x0A50 (2640) -0x3164, 0x2944, 0x2923, 0x2923, 0x2923, 0x3144, 0x3164, 0x3164, 0x3164, 0x3164, 0x3143, 0x3164, 0x3985, 0x3144, 0x2923, 0x2903, // 0x0A60 (2656) -0x3164, 0x4207, 0x4A48, 0x4A48, 0x2944, 0x18A2, 0x18A2, 0x39C7, 0x6B2C, 0x8C31, 0x83D0, 0x83D0, 0x8C11, 0xB535, 0xCE39, 0xEF3D, // 0x0A70 (2672) -0xEF3E, 0xDEDC, 0xCE38, 0xAD13, 0x41C7, 0x1821, 0x61E7, 0xD534, 0xD554, 0xDD75, 0xC4D3, 0xABF0, 0xB3CF, 0xAB6D, 0x7248, 0x6A27, // 0x0A80 (2688) -0x51A5, 0x5207, 0x83AE, 0xD638, 0xFFFF, 0xFFDF, 0xF7BE, 0xF7BE, 0xF79D, 0xEF3C, 0xD658, 0xB554, 0x9450, 0x734D, 0x7B8E, 0x9451, // 0x0A90 (2704) -0x9C92, 0x9C71, 0x83CF, 0x62AA, 0x4A07, 0x3964, 0x3144, 0x2923, 0x3185, 0x5269, 0x738E, 0x630C, 0x5AAA, 0x62EB, 0x5A89, 0x5268, // 0x0AA0 (2720) -0x5289, 0x4A28, 0x41E7, 0x39A6, 0x3185, 0x3144, 0x2924, 0x2924, 0x2923, 0x2923, 0x2924, 0x2944, 0x2944, 0x2923, 0x2944, 0x3144, // 0x0AB0 (2736) -0x41E7, 0x4A28, 0x5289, 0x5269, 0x4A48, 0x2924, 0x18A2, 0x3986, 0x7B8F, 0x9C93, 0xB556, 0x9452, 0x7BAF, 0x7B8F, 0xACF4, 0xCE59, // 0x0AC0 (2752) -0xE73D, 0xE75D, 0xEF5D, 0xFFDF, 0xC597, 0x28C3, 0x7ACB, 0xDD96, 0xD575, 0xE5F8, 0xF679, 0xEDF8, 0xD534, 0xC471, 0xD554, 0x8B2C, // 0x0AD0 (2768) -0x4144, 0x6289, 0xC5D6, 0xFF9D, 0xFFBE, 0xF79E, 0xF79E, 0xE71B, 0xDE99, 0xC5B6, 0x9CB1, 0x7B8D, 0x734C, 0x734C, 0x7B8D, 0x9C92, // 0x0AE0 (2784) -0xAD14, 0xA4D3, 0x736D, 0x5AAA, 0x5248, 0x41C6, 0x41E6, 0x3165, 0x2944, 0x5269, 0x5ACB, 0x4A28, 0x41C6, 0x4A27, 0x4A07, 0x4A07, // 0x0AF0 (2800) -0x7BAE, 0x736D, 0x6B2C, 0x630B, 0x5ACB, 0x5AAA, 0x52A9, 0x5AAA, 0x4A68, 0x4A28, 0x4207, 0x41E7, 0x39C6, 0x39A6, 0x39A6, 0x31A5, // 0x0B00 (2816) -0x39C6, 0x4A27, 0x5AA9, 0x62EA, 0x5289, 0x3165, 0x3165, 0x6B0C, 0xA4F4, 0xAD35, 0xBD97, 0xAD15, 0x9431, 0x83CF, 0x83EF, 0x8C51, // 0x0B10 (2832) -0xB596, 0xDEFC, 0xEF7E, 0xF79F, 0xFFBF, 0x6AAB, 0x8B6D, 0xCD34, 0xD534, 0xEE18, 0xF659, 0xE5B7, 0xD4F2, 0xCCD2, 0x934D, 0x4145, // 0x0B20 (2848) -0x49C7, 0xAD13, 0xF77D, 0xFFDF, 0xF79E, 0xFF9E, 0xEEFC, 0xCE18, 0x9C92, 0x7B8E, 0x6ACA, 0x730B, 0x8BEF, 0x9451, 0x8C30, 0x7B6E, // 0x0B30 (2864) -0x6B0C, 0x5AAA, 0x5269, 0x41E7, 0x4A07, 0x5A89, 0x5268, 0x5249, 0x5269, 0x62CB, 0x5AAA, 0x62EB, 0x5289, 0x4A27, 0x4A27, 0x41E6, // 0x0B40 (2880) -0x738E, 0x738E, 0x736D, 0x736D, 0x6B4D, 0x736D, 0x738E, 0x7BCF, 0x738E, 0x736D, 0x736D, 0x738D, 0x736D, 0x6B4C, 0x630B, 0x62EB, // 0x0B50 (2896) -0x52A9, 0x4A48, 0x5289, 0x4A48, 0x5269, 0x39C7, 0x6B4D, 0x9CD3, 0xB535, 0xA4D4, 0xACF5, 0x8C11, 0x8BF0, 0x6B2D, 0x6B0C, 0x734D, // 0x0B60 (2912) -0x7B8E, 0xACF4, 0xE6BB, 0xF75E, 0xFFDF, 0xC5B6, 0x8B4C, 0xC4B2, 0xC492, 0xDD35, 0xE535, 0xDCF4, 0xCC91, 0xB3EE, 0x38C2, 0x3905, // 0x0B70 (2928) -0x9CB2, 0xF79E, 0xFFDF, 0xFFBE, 0xF77E, 0xE6DB, 0xC5D7, 0x9431, 0x83AE, 0x838E, 0x9C72, 0xA492, 0xAD14, 0xB534, 0x8C30, 0x5269, // 0x0B80 (2944) -0x3986, 0x3165, 0x41C7, 0x3985, 0x3164, 0x5228, 0x4A27, 0x39A6, 0x4A48, 0x7B8E, 0x83EF, 0x6B2C, 0x5289, 0x4A07, 0x3164, 0x41C5, // 0x0B90 (2960) -0x738E, 0x73AE, 0x73AE, 0x738E, 0x6B6D, 0x6B6E, 0x738E, 0x7BCF, 0x73AF, 0x738E, 0x7BEF, 0x8410, 0x7BCF, 0x73AE, 0x6B6D, 0x6B4C, // 0x0BA0 (2976) -0x632B, 0x5ACA, 0x4A48, 0x52AA, 0x5289, 0x6B4D, 0x8C51, 0xA4F4, 0xACF5, 0xA4F4, 0x8BF1, 0x7B8F, 0x734E, 0x83CF, 0xA4D3, 0xB555, // 0x0BB0 (2992) -0xB515, 0xB515, 0x9CB3, 0xD659, 0xEF3D, 0xEF1C, 0x938E, 0xDD95, 0xCCD2, 0xCC92, 0xD4B2, 0xD492, 0xF5B6, 0x71E7, 0x4124, 0xA4B2, // 0x0BC0 (3008) -0xFFBF, 0xFFBF, 0xF77E, 0xF75D, 0xDE9A, 0xAD14, 0x9430, 0x8C10, 0xACD3, 0xACF3, 0xB555, 0xB534, 0x9451, 0x5A8A, 0x5A6A, 0x5249, // 0x0BD0 (3024) -0x3165, 0x3165, 0x3124, 0x4A07, 0x5248, 0x2903, 0x1061, 0x2904, 0x4A49, 0x6B4D, 0x7BCF, 0x6B2C, 0x5269, 0x3185, 0x2103, 0x5248, // 0x0BE0 (3040) -0x738E, 0x7BAF, 0x7BAF, 0x7B8E, 0x738E, 0x738E, 0x738F, 0x7BAF, 0x7BAF, 0x734E, 0x738E, 0x7BCF, 0x7BCF, 0x7BAF, 0x6B4D, 0x630C, // 0x0BF0 (3056) -0x5AEB, 0x5ACA, 0x5269, 0x4207, 0x41E7, 0x630C, 0x9492, 0xAD35, 0xBD77, 0xB536, 0xA4D4, 0xAD15, 0xACF4, 0x83CF, 0x9C92, 0xB555, // 0x0C00 (3072) -0xCDF8, 0xC5B7, 0x8C10, 0x83EF, 0xC5F8, 0xF73E, 0x72CB, 0x7A8A, 0xB42F, 0xBC70, 0xC471, 0xC4B2, 0xABCF, 0x5145, 0x51E7, 0xDEBA, // 0x0C10 (3088) -0xFFBF, 0xF77E, 0xD69A, 0xA4B3, 0x8C10, 0x83CF, 0x7B8D, 0x8C0F, 0x9C91, 0x9C91, 0x9471, 0x8C0F, 0x6B2C, 0x5248, 0x5248, 0x5A69, // 0x0C20 (3104) -0x41E7, 0x3985, 0x49E6, 0x41C6, 0x3123, 0x28E2, 0x28E3, 0x41E7, 0x62EB, 0x736D, 0x8C72, 0x83F0, 0x528A, 0x41E7, 0x5289, 0x6B2B, // 0x0C30 (3120) -0x738E, 0x7BAF, 0x7BAF, 0x738F, 0x736E, 0x738E, 0x738E, 0x736E, 0x736E, 0x6B2D, 0x736E, 0x7B8F, 0x738E, 0x736E, 0x630C, 0x5ACB, // 0x0C40 (3136) -0x52AA, 0x4A68, 0x4227, 0x31A6, 0x39A6, 0x6B2C, 0x9492, 0xAD15, 0xC5B8, 0xC5B8, 0xB556, 0x9452, 0xA4B3, 0x9C92, 0x6B0C, 0x734D, // 0x0C50 (3152) -0x9CD3, 0xC618, 0x94B2, 0x5ACB, 0x630D, 0xCDD8, 0xDE19, 0x7AAB, 0x59C5, 0x6A26, 0x830A, 0x61E6, 0x61E7, 0x7ACB, 0xBD55, 0xFF9E, // 0x0C60 (3168) -0xF77D, 0xDE9A, 0xA4F3, 0x7BAE, 0x736D, 0x7B8D, 0x732B, 0x5227, 0x5248, 0x5268, 0x4207, 0x5A89, 0x6B2B, 0x8C0F, 0x8BEE, 0x5AA9, // 0x0C70 (3184) -0x4A07, 0x5A68, 0x732B, 0x83AD, 0x732B, 0x41A5, 0x20E2, 0x5269, 0x6B4D, 0x7BAF, 0x8C52, 0x7BCF, 0x6B4D, 0x5ACA, 0x5ACA, 0x630B, // 0x0C80 (3200) -0x736E, 0x738F, 0x73AF, 0x738E, 0x738F, 0x7BD0, 0x7BD0, 0x738F, 0x73AF, 0x736E, 0x738F, 0x6B6E, 0x6B6D, 0x738E, 0x632C, 0x630C, // 0x0C90 (3216) -0x52AA, 0x4A69, 0x39C7, 0x3165, 0x3165, 0x5A8A, 0x9472, 0xBD76, 0xC5D8, 0xBD97, 0xA4B3, 0x8C10, 0x9431, 0x9C92, 0x7B6D, 0x6B0C, // 0x0CA0 (3232) -0xB555, 0xCE38, 0xC5F7, 0x9471, 0x5A8A, 0x7B6E, 0xE6BB, 0xEEDC, 0xC598, 0xACF5, 0xA4D3, 0xB534, 0xCE38, 0xE6FB, 0xFFBF, 0xE6DB, // 0x0CB0 (3248) -0xBD55, 0x940F, 0x732C, 0x7B6D, 0x732C, 0x730C, 0x6289, 0x3944, 0x3964, 0x5227, 0x62A9, 0x7B8C, 0x944F, 0x7B8D, 0x5A68, 0x5228, // 0x0CC0 (3264) -0x6B0C, 0x7BAE, 0x8C0F, 0x83CE, 0x62A9, 0x5227, 0x4207, 0x62CB, 0x6B2D, 0x83F0, 0x9472, 0x7B8F, 0x4A28, 0x41C6, 0x5247, 0x4A06, // 0x0CD0 (3280) -0x7BCF, 0x738F, 0x738E, 0x73AF, 0x7BAF, 0x7BD0, 0x83F1, 0x83F1, 0x8411, 0x7BD0, 0x83F0, 0x7BD0, 0x7BCF, 0x7BCF, 0x6B6D, 0x632C, // 0x0CE0 (3296) -0x5B0B, 0x52A9, 0x4207, 0x2923, 0x2923, 0x18A2, 0x62EB, 0xA4D3, 0x9C92, 0x7B8E, 0x7B8F, 0xBD76, 0xACF4, 0xB555, 0xB535, 0xA4B2, // 0x0CF0 (3312) -0x9C71, 0x9C71, 0xBD95, 0xC5D7, 0xA4B3, 0x732C, 0x83AF, 0xD618, 0xEEFC, 0xEEDB, 0xEF1C, 0xE6DB, 0xEEFC, 0xDE9A, 0xB534, 0x8C30, // 0x0D00 (3328) -0x6AEB, 0x62A9, 0x732C, 0x83CE, 0x83AE, 0x6AEB, 0x62AA, 0x62A9, 0x62A9, 0x8BCE, 0x83CE, 0x9C70, 0x83CE, 0x6AEB, 0x6AEB, 0x9430, // 0x0D10 (3344) -0xAD34, 0xB575, 0xA4D3, 0x8BEF, 0x83AD, 0x6B0B, 0x5A89, 0x734C, 0x738E, 0x83F0, 0x83F0, 0x630C, 0x5249, 0x41C6, 0x41C5, 0x5227, // 0x0D20 (3360) -0x8411, 0x7BD0, 0x73AF, 0x7BD0, 0x7BF0, 0x7BD0, 0x7BF0, 0x83F1, 0x7BF0, 0x7BD0, 0x83F0, 0x8411, 0x8410, 0x8410, 0x7BAF, 0x738E, // 0x0D30 (3376) -0x632C, 0x52A9, 0x4207, 0x39C6, 0x2923, 0x18A1, 0x4A27, 0x734C, 0x7B8D, 0x83AE, 0xA4B2, 0xACF4, 0xBD76, 0xC5B7, 0xC5B7, 0xBD55, // 0x0D40 (3392) -0xA4D2, 0x838D, 0x9430, 0xACD3, 0xACD3, 0x8BEF, 0x5A68, 0x838D, 0xAD13, 0xCDF7, 0xD659, 0xCDF8, 0xBD76, 0x83AF, 0x41C6, 0x5A89, // 0x0D50 (3408) -0x6AEB, 0x83AD, 0xA4B2, 0xAD13, 0xAD14, 0x9C71, 0x83EF, 0x7BAE, 0x9450, 0xB534, 0xB534, 0x9410, 0x730C, 0x838E, 0xACF4, 0xC5D7, // 0x0D60 (3424) -0xCE18, 0xBD96, 0x9C71, 0x8C0F, 0x9CB1, 0x734C, 0x5289, 0x734C, 0x7BAF, 0x7BCF, 0x630C, 0x526A, 0x41E7, 0x41C6, 0x5268, 0x5267, // 0x0D70 (3440) -0x8431, 0x8411, 0x83F1, 0x83F1, 0x83F1, 0x8411, 0x8411, 0x83F1, 0x83F1, 0x7BF0, 0x8411, 0x8411, 0x7BF0, 0x7BF0, 0x7BCF, 0x7BCF, // 0x0D80 (3456) -0x6B6E, 0x5AEB, 0x4208, 0x5249, 0x62EB, 0x6AEB, 0x83CE, 0x9450, 0xA4B2, 0x9C71, 0x9450, 0x9C51, 0xB535, 0xC5B8, 0xCDF8, 0xBD35, // 0x0D90 (3472) -0x8BEF, 0x836D, 0x6269, 0x5A48, 0x940F, 0x9C50, 0x7B8C, 0x5A68, 0x41E6, 0x6B0A, 0x6AEB, 0x6AEB, 0x6ACB, 0x5A49, 0x5228, 0x734C, // 0x0DA0 (3488) -0x9C92, 0xB535, 0xC5B7, 0xD639, 0xD638, 0xC5D7, 0xBD95, 0xBD75, 0xB533, 0xA4D2, 0x83CE, 0x7B6D, 0x83CE, 0x8BCF, 0xC596, 0xCDF8, // 0x0DB0 (3504) -0xB555, 0x8C10, 0x62CB, 0x6AEB, 0x7B8D, 0x5228, 0x41E7, 0x62CB, 0x7BAE, 0x7BCF, 0x4A29, 0x2104, 0x20C2, 0x3144, 0x5247, 0x5268, // 0x0DC0 (3520) -0x8411, 0x8411, 0x83F1, 0x7BF1, 0x7BF1, 0x8411, 0x8C52, 0x8C32, 0x8C52, 0x8C32, 0x8C52, 0x8C52, 0x8431, 0x8411, 0x8411, 0x7BF0, // 0x0DD0 (3536) -0x7BD0, 0x738F, 0x7BB0, 0x9CB4, 0xBDB8, 0xBD77, 0xA4D4, 0x9C92, 0x7B6D, 0x5248, 0x62AA, 0x7B4D, 0xACF3, 0xBD96, 0xD639, 0xC597, // 0x0DE0 (3552) -0xACB3, 0x8BAE, 0x6ACA, 0x5227, 0x5A47, 0x9C2F, 0x942F, 0x41A5, 0x41C6, 0x5248, 0x3984, 0x3964, 0x5A48, 0x6AEA, 0x838E, 0x9C51, // 0x0DF0 (3568) -0xC5B8, 0xCDF9, 0xD65A, 0xE6BC, 0xDE9A, 0xDE7A, 0xC5B7, 0xB555, 0xAD13, 0x83CE, 0x62CA, 0x7B6D, 0x9C91, 0xBD95, 0xB554, 0x9430, // 0x0E00 (3584) -0x7B6E, 0x62CB, 0x5A8A, 0x62AA, 0x4A07, 0x1861, 0x2924, 0x6B0C, 0x7BCF, 0x736D, 0x5AAA, 0x3165, 0x20E3, 0x2923, 0x3144, 0x3985, // 0x0E10 (3600) -0x8C32, 0x8411, 0x8411, 0x8411, 0x83F1, 0x8411, 0x8431, 0x8C32, 0x8C52, 0x8C32, 0x8C52, 0x9473, 0x9493, 0x9473, 0x8C52, 0x8432, // 0x0E20 (3616) -0x8C32, 0x9473, 0xAD57, 0xC5F9, 0xCE1A, 0xCDF9, 0x9C93, 0x62CC, 0x3145, 0x0820, 0x3124, 0x5248, 0x62CA, 0x83CF, 0xBD96, 0xDE7A, // 0x0E30 (3632) -0xCDF8, 0xB514, 0x942F, 0x7B6C, 0x7B6B, 0x7B6B, 0x41A6, 0x49E7, 0x6ACA, 0x5227, 0x5A47, 0x730A, 0x83AD, 0x9450, 0xACF3, 0xB535, // 0x0E40 (3648) -0xC5D8, 0xC5B8, 0xDE9B, 0xDE7A, 0xDE5A, 0xD659, 0xB514, 0x838E, 0x838D, 0x83AD, 0x734C, 0x8BEF, 0x9450, 0xA4B2, 0xACF3, 0x9C71, // 0x0E50 (3664) -0xA4D3, 0xACF3, 0xA4B2, 0x83CF, 0x4A28, 0x1861, 0x3985, 0x83CF, 0x83EF, 0x5269, 0x39A6, 0x3986, 0x2944, 0x3145, 0x39A5, 0x41E6, // 0x0E60 (3680) -0x8C72, 0x8C52, 0x8C52, 0x8C32, 0x8411, 0x83F1, 0x83F1, 0x7BF0, 0x83F1, 0x8411, 0x8C32, 0x8C52, 0x8C73, 0x9473, 0x9473, 0x8C52, // 0x0E70 (3696) -0x8C51, 0x8411, 0x7BD0, 0x736F, 0xA4D5, 0xC5D9, 0xC5F9, 0xA4F5, 0x62AB, 0x5249, 0x28E3, 0x1040, 0x2904, 0x5269, 0xBD76, 0xE6BB, // 0x0E80 (3712) -0xEF1C, 0xDEBA, 0xBD95, 0xA491, 0x9C71, 0x732B, 0x5A68, 0x49C6, 0x730B, 0x6AA9, 0x732B, 0x8BCE, 0x9C71, 0xAD14, 0xB535, 0xAD14, // 0x0E90 (3728) -0xBD76, 0xACF4, 0xB535, 0xBD76, 0xB534, 0xA492, 0x9C30, 0x732C, 0x6AEB, 0x8BEF, 0x9430, 0x8BCE, 0x9C71, 0x8C10, 0x8C11, 0x9C72, // 0x0EA0 (3744) -0x8C30, 0x83EF, 0x83AE, 0x7B8D, 0x732C, 0x5A69, 0x62EB, 0x83EF, 0x9CD2, 0x738D, 0x4A28, 0x5AAA, 0x6B0B, 0x62CA, 0x6B0B, 0x7B6D, // 0x0EB0 (3760) -0x8411, 0x8411, 0x8411, 0x8411, 0x7BF0, 0x7BF0, 0x7BD0, 0x73AF, 0x73AF, 0x7BF0, 0x8411, 0x8411, 0x8411, 0x8C52, 0x9473, 0x9492, // 0x0EC0 (3776) -0x94B2, 0x5AEB, 0x3186, 0x4209, 0x6B2E, 0xAD15, 0xD65A, 0xD65A, 0xD659, 0x8C30, 0x2904, 0x20E3, 0x20C3, 0x62CB, 0xB535, 0xD659, // 0x0ED0 (3792) -0xDEBA, 0xEF5D, 0xE6FC, 0xD639, 0xAD14, 0xA491, 0x8BCE, 0x7B4B, 0x838C, 0x836D, 0x83AE, 0x8BEF, 0x8C10, 0xACF4, 0xB575, 0xACF3, // 0x0EE0 (3808) -0x9C91, 0x940F, 0x838D, 0xA4B2, 0x9C50, 0x83AE, 0x9C50, 0x940F, 0x93EF, 0x838D, 0x8BEF, 0x9430, 0xA4B3, 0xACF5, 0xC5F9, 0xC5B8, // 0x0EF0 (3824) -0x732C, 0x3985, 0x41A6, 0x7B8D, 0x9C91, 0x7B6D, 0x6B0C, 0x7B8D, 0x8C50, 0x7BAE, 0x6B2C, 0x83EF, 0x9451, 0x9C71, 0xA4B2, 0xA4D3, // 0x0F00 (3840) -0x83F1, 0x83F1, 0x7BF0, 0x83F1, 0x83F1, 0x7BF0, 0x7BD0, 0x7BB0, 0x7BB0, 0x7BD0, 0x8411, 0x8C52, 0x9473, 0x8C53, 0x9474, 0x9494, // 0x0F10 (3856) -0x8C52, 0x738F, 0x5ACC, 0x4209, 0x41E8, 0x5AAB, 0x9452, 0xBDB7, 0xD639, 0x8BF0, 0x49E7, 0x18A2, 0x1061, 0x41C7, 0x62AA, 0xA4B2, // 0x0F20 (3872) -0xDEBB, 0xEEFD, 0xE6BB, 0xE6FC, 0xBD76, 0x8C10, 0x9CB2, 0xA4B2, 0xBD75, 0xC5D6, 0xB555, 0xBD76, 0xC5B7, 0xCE19, 0xD65B, 0xCE19, // 0x0F30 (3888) -0xC5B7, 0xC5D7, 0xAD14, 0xB555, 0xBD75, 0xB575, 0xBD96, 0xA4B2, 0x83CF, 0x83AF, 0x9CB3, 0x9472, 0xA4F4, 0xB556, 0xAD35, 0xB576, // 0x0F40 (3904) -0x8C11, 0x5A8B, 0x62EB, 0x9451, 0x9450, 0x7B8D, 0x62CA, 0x83CF, 0xAD13, 0x83F0, 0x83AF, 0x9451, 0x9452, 0x9472, 0x9CD3, 0x9C93, // 0x0F50 (3920) -0x8411, 0x8C32, 0x8C32, 0x8C32, 0x8431, 0x8411, 0x8411, 0x83F0, 0x7BF0, 0x8411, 0x8412, 0x8C32, 0x9494, 0x9473, 0xA4D5, 0xAD16, // 0x0F60 (3936) -0xAD56, 0xBDD8, 0xC619, 0xB5B7, 0x8C31, 0x526A, 0x5A8B, 0x7BAF, 0xB576, 0xC5F8, 0x9451, 0x49E8, 0x18A2, 0x0820, 0x3165, 0x7B8E, // 0x0F70 (3952) -0xACF4, 0xB555, 0xD639, 0xDEBB, 0xCDF8, 0xB555, 0xA4D4, 0xACD4, 0xBD76, 0xCE18, 0xD65A, 0xD65A, 0xD65A, 0xDE9B, 0xDEBB, 0xDE7A, // 0x0F80 (3968) -0xE6BB, 0xDE9B, 0xD659, 0xC5D7, 0xD639, 0xBD96, 0xAD14, 0x9451, 0x9451, 0xA4D4, 0x9CB3, 0x9C72, 0x8C11, 0x736E, 0x6B2D, 0x6B0D, // 0x0F90 (3984) -0x8C31, 0x9C93, 0x8C51, 0x83EF, 0x734C, 0x5A89, 0x6B0B, 0x8C30, 0xBD96, 0xA4D3, 0x8C31, 0x9472, 0x9CB3, 0x9CB3, 0x9CD3, 0x9CD3, // 0x0FA0 (4000) -0x83F1, 0x8431, 0x8C31, 0x8411, 0x8411, 0x8411, 0x8411, 0x7BF0, 0x8411, 0x7BD0, 0x8C32, 0x8411, 0x9473, 0x9C93, 0x9C94, 0xBD98, // 0x0FB0 (4016) -0xC63A, 0xD67B, 0xDEDC, 0xE71D, 0xDEDC, 0xA515, 0x4A29, 0x2946, 0x4A08, 0x7BCF, 0xA4D3, 0x9CB2, 0x528A, 0x20C3, 0x18A3, 0x2925, // 0x0FC0 (4032) -0x41E7, 0x7BAE, 0xA4D3, 0xA4B3, 0x9C93, 0xC5B8, 0xACF5, 0xB557, 0xBD77, 0xBD57, 0xC5D9, 0xCE19, 0xD65A, 0xD67A, 0xDEBA, 0xCE39, // 0x0FD0 (4048) -0xCE19, 0xC5D8, 0xB535, 0xA4B3, 0xA4B3, 0x9451, 0x9C92, 0xA4D3, 0xA4D4, 0xACD4, 0x734E, 0x6AEC, 0x7B8F, 0x9C93, 0xA4B3, 0x7B6E, // 0x0FE0 (4064) -0x630C, 0x736E, 0x62EC, 0x5AAB, 0x5289, 0x62EB, 0x62CA, 0x6B0B, 0x8C30, 0x8C10, 0x9C92, 0xACF4, 0x9C93, 0x9452, 0x9CB3, 0xA4B3, // 0x0FF0 (4080) -0x7BCF, 0x7BD0, 0x7BD0, 0x7BAF, 0x7BCF, 0x7BD0, 0x7BD0, 0x7BAF, 0x73AF, 0x7BCF, 0x7BD0, 0x8411, 0x9493, 0xA4D4, 0xAD36, 0xC5D9, // 0x1000 (4096) -0xD67B, 0xD69B, 0xDEDC, 0xDEDC, 0xE6FC, 0xE71D, 0x9492, 0x3186, 0x0000, 0x0821, 0x526A, 0x9472, 0x9CB3, 0x6B2D, 0x6B4D, 0x734E, // 0x1010 (4112) -0x6B2D, 0xA4B3, 0x8C31, 0x6B2D, 0x6B0D, 0x9C73, 0x9C73, 0xBD98, 0xC5F9, 0xBD98, 0xC5D9, 0xBDB8, 0xCE19, 0xCE3A, 0xCE39, 0xBD97, // 0x1020 (4128) -0xB556, 0xAD36, 0x8C11, 0x734E, 0xAD14, 0xCDF8, 0xC5B6, 0xA4D3, 0x9451, 0xB534, 0xD659, 0x9C72, 0x41C7, 0x3986, 0xA4D3, 0xCE39, // 0x1030 (4144) -0xB556, 0x9472, 0x5249, 0x18C3, 0x41C7, 0x62CB, 0x4A28, 0x41C7, 0x3966, 0x7B8E, 0xACF4, 0xACF4, 0x9CB3, 0x9C93, 0xA4D4, 0xAD14, // 0x1040 (4160) -0x7BCF, 0x73AF, 0x738E, 0x738F, 0x7BAF, 0x7BCF, 0x7BCF, 0x73AF, 0x738F, 0x7BCF, 0x7BAF, 0x8411, 0x9493, 0x8C52, 0x7BAF, 0x5A8B, // 0x1050 (4176) -0x62ED, 0xA515, 0xCE5A, 0xE6FD, 0xDEDC, 0xE71D, 0xEF5D, 0xCE59, 0x6B2D, 0x3166, 0x18C3, 0x4A49, 0x8C31, 0x9CD4, 0xB576, 0xA4F5, // 0x1060 (4192) -0xAD15, 0xDE9B, 0xCE19, 0x8C11, 0x7BAF, 0x7B8F, 0x83F0, 0x9472, 0xA4D4, 0xA4D4, 0xBDD8, 0xC5F9, 0xCE5A, 0xC61A, 0xBDB9, 0xC5F9, // 0x1070 (4208) -0xAD36, 0x8C31, 0x8C31, 0xB535, 0x9451, 0xA4B2, 0xCE17, 0xACF3, 0x7B6D, 0x628A, 0x8C10, 0xCE18, 0xBD75, 0x4A28, 0x39A6, 0x9CD3, // 0x1080 (4224) -0xC5D8, 0xCE39, 0x9451, 0x734D, 0x736D, 0x6B4D, 0x4A08, 0x62CB, 0x39A7, 0x83AF, 0xACF4, 0xAD15, 0xACF4, 0xAD15, 0xAD15, 0xAD15, // 0x1090 (4240) -0x83F0, 0x7BAF, 0x738E, 0x73AF, 0x7BCF, 0x7BCF, 0x73AF, 0x738E, 0x7BD0, 0x7BD0, 0x8C52, 0x8431, 0x8411, 0x62CC, 0x39A7, 0x1883, // 0x10A0 (4256) -0x0000, 0x1082, 0x4A29, 0x9CF4, 0xCE7A, 0xDEDC, 0xEF3D, 0xE71D, 0xD6BB, 0xA514, 0x39E8, 0x0842, 0x18A3, 0x4A29, 0x630C, 0x8C31, // 0x10B0 (4272) -0xC619, 0xDE7C, 0xDEDC, 0xC5D9, 0xAD56, 0x9473, 0x8C52, 0x8C52, 0xA4F4, 0xAD15, 0xBDB8, 0xD65B, 0xC61A, 0xBDB9, 0xCE1A, 0xBD78, // 0x10C0 (4288) -0x9472, 0x7B8F, 0xBD96, 0x9451, 0x83CE, 0xBD75, 0xBD54, 0x942F, 0x9C71, 0xACF3, 0x62EB, 0x62AA, 0xBD95, 0xB575, 0x5269, 0x5ACB, // 0x10D0 (4304) -0x9CB3, 0xBDF8, 0xC618, 0x7BAF, 0x4A08, 0x62EC, 0x8C31, 0xA4F4, 0xAD15, 0xAD15, 0xB536, 0xB536, 0xACF5, 0xA4D4, 0xAD15, 0xB535, // 0x10E0 (4320) -0x83F0, 0x83F0, 0x7BCF, 0x7BAF, 0x73AF, 0x73AF, 0x738E, 0x736E, 0x7BB0, 0x8C32, 0x9473, 0x9452, 0x8410, 0x6B0D, 0x7B8F, 0x83F0, // 0x10F0 (4336) -0x3185, 0x0000, 0x0000, 0x0841, 0x31A6, 0x62EC, 0x7BD0, 0xBDD8, 0xD69B, 0xD67B, 0x7BF0, 0x0842, 0x0000, 0x0000, 0x0861, 0x62EC, // 0x1100 (4352) -0x8C31, 0xAD36, 0xD69B, 0xD69C, 0xBDB9, 0xA516, 0x9494, 0x9CB5, 0xA4F6, 0xB578, 0xC5D9, 0xD69C, 0xC5D9, 0xC5D9, 0xBDB8, 0x7B90, // 0x1110 (4368) -0x6AED, 0xA4F4, 0xBD96, 0x9C92, 0x83AE, 0x8BEE, 0x9C50, 0x9C91, 0x9C71, 0x9C51, 0xC5D7, 0x9C72, 0x5269, 0x6B0C, 0x8C51, 0x528A, // 0x1120 (4384) -0x6B4D, 0x8411, 0xAD35, 0x8C31, 0x526A, 0x83F0, 0xA4D4, 0xAD15, 0xB535, 0xB557, 0xB536, 0xAD16, 0xB537, 0xB536, 0xAD36, 0xB536, // 0x1130 (4400) -0x83CF, 0x83F0, 0x83F0, 0x7BAF, 0x738E, 0x736E, 0x738F, 0x738F, 0x7BD0, 0x8C31, 0x9473, 0x9472, 0x9CB3, 0xB556, 0xB576, 0xCE39, // 0x1140 (4416) -0xAD33, 0x4207, 0x20C2, 0x0000, 0x0000, 0x0000, 0x0001, 0x39A8, 0xAD56, 0xD6BC, 0xA515, 0x3187, 0x1062, 0x0820, 0x0020, 0x10A2, // 0x1150 (4432) -0x2925, 0x4A6A, 0x9493, 0xB5B8, 0xB578, 0x8C33, 0x7BD2, 0x9CB6, 0xB579, 0xB579, 0xBDB9, 0xCE1A, 0xBD98, 0xBD97, 0x8C11, 0x6B0C, // 0x1160 (4448) -0x6B2D, 0xACF4, 0xBD76, 0xB534, 0x9C71, 0x9C71, 0xA4D2, 0xACF3, 0x9C71, 0x83AE, 0xA4B2, 0xD639, 0xC5D7, 0x7B8F, 0x62EC, 0x8C51, // 0x1170 (4464) -0x528B, 0x6B2D, 0x6B0D, 0x7B8F, 0x9472, 0xACF4, 0xACF4, 0xAD15, 0xB556, 0xAD16, 0xB536, 0xB557, 0xAD16, 0xACF6, 0xB557, 0xB536, // 0x1180 (4480) -0x8410, 0x83F0, 0x8410, 0x7BF0, 0x7BAF, 0x7BAF, 0x738F, 0x738F, 0x83D0, 0x83F1, 0x83D0, 0x9CD3, 0xAD35, 0xB576, 0xB576, 0xC5F8, // 0x1190 (4496) -0xBDD6, 0x8C50, 0x2945, 0x0841, 0x0000, 0x0000, 0x0000, 0x0000, 0x738F, 0xDEFC, 0xB597, 0x7BD0, 0x41E9, 0x0000, 0x0000, 0x0000, // 0x11A0 (4512) -0x0821, 0x20E4, 0x4209, 0x9492, 0x94B3, 0x4A6A, 0x31C8, 0x6B4E, 0x8C73, 0x9CF5, 0x9CD4, 0xA515, 0xAD36, 0x83D0, 0x62EC, 0x9451, // 0x11B0 (4528) -0xAD13, 0xA4D2, 0x9C71, 0xA4B1, 0xB513, 0xC595, 0xBD74, 0xACD2, 0x8C0F, 0x9450, 0xA4F3, 0xACF3, 0xD67A, 0xE6BC, 0x9C93, 0x9CB4, // 0x11C0 (4544) -0x9C72, 0x5AAB, 0x62AB, 0x83F0, 0xA4D4, 0xB556, 0xB556, 0xB556, 0xB535, 0xB535, 0xAD15, 0xB536, 0xAD15, 0xAD15, 0xAD15, 0xAD16, // 0x11D0 (4560) -0x8431, 0x83F0, 0x7BF0, 0x7BF0, 0x83F0, 0x8410, 0x7BD0, 0x73AF, 0x8C11, 0x8C11, 0x630C, 0x6B2D, 0x8411, 0x8C11, 0x734E, 0x8C51, // 0x11E0 (4576) -0xBD96, 0xBDB6, 0x8C51, 0x5AAB, 0x3186, 0x0841, 0x0000, 0x0000, 0x528A, 0xCE5A, 0xB5B8, 0xAD57, 0x738F, 0x1062, 0x0820, 0x0000, // 0x11F0 (4592) -0x0841, 0x2924, 0x3186, 0x5ACB, 0x5ACB, 0x1062, 0x2966, 0x3187, 0x4209, 0x5AEC, 0x630D, 0x83F1, 0x7BAF, 0x4A08, 0x83F0, 0xAD14, // 0x1200 (4608) -0xB533, 0xB554, 0xB554, 0xB533, 0xA491, 0x9C50, 0x942F, 0xB533, 0xBD33, 0xB513, 0xACF3, 0xBD75, 0xC5D7, 0xCE19, 0xC5F9, 0x9473, // 0x1210 (4624) -0x9452, 0x6B2D, 0x734E, 0x9452, 0xACF4, 0xB556, 0xBD77, 0xBD77, 0xBD77, 0xBD56, 0xB556, 0xB556, 0xAD16, 0xB536, 0xB536, 0xB556, // 0x1220 (4640) -0x8410, 0x7BF0, 0x7BF0, 0x83F0, 0x83F0, 0x83F0, 0x7BD0, 0x7BD0, 0x9452, 0x9CB4, 0x9493, 0x6B4E, 0x39A7, 0x39A7, 0x41E8, 0x4A49, // 0x1230 (4656) -0x734D, 0x83EF, 0xA4F3, 0xBD96, 0xB555, 0x5AAB, 0x0020, 0x0000, 0x39C7, 0xC5F9, 0xC61A, 0xCE5B, 0x9494, 0x2925, 0x1082, 0x1061, // 0x1240 (4672) -0x1061, 0x18C2, 0x2944, 0x2103, 0x39A6, 0x526A, 0x632D, 0x6B6E, 0x736E, 0x62EC, 0x6B2D, 0x736E, 0x736E, 0x736D, 0x9C92, 0xA4B2, // 0x1250 (4688) -0x9C70, 0x83AC, 0x942F, 0x9C4F, 0x838C, 0x942F, 0x8BCD, 0x8BCD, 0x9C2F, 0x8BCE, 0x83CD, 0xA4B1, 0xB555, 0xB555, 0xCDF8, 0xA4F4, // 0x1260 (4704) -0x8C31, 0x8BF1, 0x9452, 0xA4D4, 0xA4D4, 0xAD15, 0xBD77, 0xBD97, 0xBD77, 0xBD77, 0xB556, 0xB536, 0xACF5, 0xAD16, 0xB536, 0xB556, // 0x1270 (4720) -0x8411, 0x8411, 0x8411, 0x8411, 0x83F1, 0x7BD0, 0x7BD0, 0x8C31, 0x9473, 0xB576, 0xB576, 0xB576, 0x62EC, 0x39A7, 0x7BAF, 0x9C92, // 0x1280 (4736) -0x83CF, 0x83CF, 0x9CB3, 0xB556, 0xC619, 0xA4D4, 0x10A3, 0x0000, 0x39C8, 0xC5F9, 0xD67C, 0xCE7B, 0x9CB4, 0x31A7, 0x20E3, 0x18C2, // 0x1290 (4752) -0x1061, 0x2103, 0x0840, 0x18C2, 0x5269, 0x8430, 0xA514, 0xAD35, 0xA515, 0xA4F4, 0xA515, 0x9472, 0x8C10, 0xA4D3, 0xAD34, 0xAD13, // 0x12A0 (4768) -0x9C70, 0x9C4F, 0x940E, 0x836C, 0x93EE, 0xB4F2, 0x836C, 0x6AC9, 0x730A, 0x940E, 0x940F, 0x838D, 0xACD3, 0xBD75, 0xBD76, 0xA4B3, // 0x12B0 (4784) -0x9432, 0xA4B4, 0xAD16, 0xB557, 0xAD15, 0xAD15, 0xBD97, 0xC5B8, 0xC5D8, 0xC5D8, 0xBD98, 0xB557, 0xAD15, 0xB556, 0xBD77, 0xBD77, // 0x12C0 (4800) -}; diff --git a/libraries/UTFT_Buttons/examples/UTFT_Buttons_Bitmap_Demo/dog.c b/libraries/UTFT_Buttons/examples/UTFT_Buttons_Bitmap_Demo/dog.c deleted file mode 100644 index 2c25dbe..0000000 --- a/libraries/UTFT_Buttons/examples/UTFT_Buttons_Bitmap_Demo/dog.c +++ /dev/null @@ -1,314 +0,0 @@ -// Generated by : ImageConverter 565 v1.2 -// Dimensions : 80x60 pixels -// Size : 9 600 Bytes - -#if defined(__AVR__) - #include -#elif defined(__PIC32MX__) - #define PROGMEM -#elif defined(__arm__) - #define PROGMEM -#endif - -const unsigned short dog[0x12C0] PROGMEM ={ -0x2B2C, 0x232C, 0x232C, 0x234C, 0x236D, 0x2B6D, 0x2B8D, 0x2B8D, 0x2BAE, 0x33AE, 0x33AE, 0x33CE, 0x33CF, 0x33CF, 0x33EF, 0x33EF, // 0x0010 (16) -0x3C10, 0x3C10, 0x3C10, 0x3C30, 0x3C30, 0x3C30, 0x3C30, 0x3C30, 0x3C10, 0x3C11, 0x3C11, 0x3C11, 0x3C11, 0x3411, 0x33F1, 0x3C11, // 0x0020 (32) -0x3BF1, 0x3BF1, 0x3BD0, 0x3BF1, 0x33F0, 0x3C11, 0x3C11, 0x3411, 0x3411, 0x3411, 0x3410, 0x3411, 0x3C11, 0x3BF1, 0x3BD0, 0x3BD1, // 0x0030 (48) -0x33D0, 0x2BD0, 0x33D0, 0x33D0, 0x2B90, 0x2B90, 0x2B90, 0x236F, 0x236F, 0x1B4F, 0x1B4F, 0x1B2F, 0x1B0F, 0x1AEF, 0x1AEF, 0x1AEF, // 0x0040 (64) -0x12EE, 0x12ED, 0x12CD, 0x12CD, 0x0ACC, 0x0AAC, 0x0AAC, 0x0A8B, 0x0A8B, 0x028B, 0x026B, 0x024A, 0x024A, 0x022A, 0x0229, 0x0229, // 0x0050 (80) -0x2B4D, 0x2B2C, 0x2B4D, 0x2B6D, 0x2B6D, 0x2B8D, 0x2BAE, 0x2BAE, 0x33AE, 0x33AE, 0x33CE, 0x33CF, 0x33CF, 0x33EF, 0x33EF, 0x3C0F, // 0x0060 (96) -0x3C10, 0x3C10, 0x3C30, 0x3C30, 0x3C30, 0x3C30, 0x3C30, 0x3C30, 0x3C31, 0x3C31, 0x3C11, 0x3C11, 0x3C31, 0x3C32, 0x3C32, 0x3411, // 0x0070 (112) -0x2C31, 0x2C51, 0x2C31, 0x3452, 0x3411, 0x3411, 0x3411, 0x3C31, 0x3C11, 0x3C32, 0x3431, 0x3411, 0x3411, 0x3411, 0x3411, 0x3C11, // 0x0080 (128) -0x3C11, 0x33F1, 0x33D0, 0x33D0, 0x2BB0, 0x2BB0, 0x2BB0, 0x2B90, 0x236F, 0x236F, 0x234F, 0x1B4F, 0x1B2F, 0x1B0F, 0x1B0E, 0x1AEE, // 0x0090 (144) -0x12EE, 0x12ED, 0x12ED, 0x12CD, 0x12CD, 0x0ACC, 0x0AAC, 0x0A8C, 0x0A8B, 0x0A8B, 0x026B, 0x026B, 0x024A, 0x024A, 0x022A, 0x022A, // 0x00A0 (160) -0x2B4D, 0x2B4D, 0x2B6D, 0x2B6D, 0x2B8D, 0x2B8E, 0x2BAE, 0x33AE, 0x33AE, 0x33CE, 0x33CF, 0x33CF, 0x33EF, 0x3BEF, 0x3C0F, 0x3C10, // 0x00B0 (176) -0x3C30, 0x3C30, 0x3C30, 0x3C30, 0x3C30, 0x3C50, 0x3C51, 0x3C51, 0x3C31, 0x3C51, 0x3C51, 0x3C32, 0x3C31, 0x3C31, 0x3C32, 0x3C32, // 0x00C0 (192) -0x3C52, 0x3452, 0x3411, 0x3C32, 0x3C32, 0x4412, 0x4412, 0x43F1, 0x3BF1, 0x4412, 0x3C31, 0x3C31, 0x3C52, 0x3C32, 0x3C11, 0x3C11, // 0x00D0 (208) -0x3C11, 0x3BF1, 0x3BF1, 0x3BF1, 0x33D1, 0x33D0, 0x3390, 0x2B90, 0x2B90, 0x2B6F, 0x236F, 0x234F, 0x234F, 0x1B2E, 0x1B0E, 0x1B0E, // 0x00E0 (224) -0x1B0E, 0x130E, 0x12ED, 0x12ED, 0x12ED, 0x12CD, 0x0ACC, 0x0AAC, 0x0A8C, 0x0A8C, 0x0A8C, 0x026B, 0x026B, 0x024A, 0x024A, 0x022A, // 0x00F0 (240) -0x2B4D, 0x2B4D, 0x2B6D, 0x2B8D, 0x2B8D, 0x2B8E, 0x33AE, 0x33AE, 0x33CE, 0x33CF, 0x33CF, 0x3BEF, 0x3BEF, 0x3C0F, 0x3C30, 0x3C30, // 0x0100 (256) -0x3C30, 0x3C30, 0x3C30, 0x4450, 0x3C51, 0x4451, 0x3C51, 0x3C51, 0x3C51, 0x3C51, 0x3C51, 0x4472, 0x4472, 0x3C52, 0x3C32, 0x4452, // 0x0110 (272) -0x4412, 0x4C32, 0x4412, 0x4412, 0x4412, 0x4412, 0x4432, 0x3C11, 0x3C31, 0x3C51, 0x3C51, 0x3C31, 0x3C31, 0x3C31, 0x3C11, 0x4431, // 0x0120 (288) -0x3C11, 0x3C11, 0x3411, 0x33F1, 0x33F1, 0x33D1, 0x33D1, 0x33D1, 0x2B90, 0x2B90, 0x2B70, 0x234F, 0x234F, 0x234E, 0x1B2E, 0x1B0E, // 0x0130 (304) -0x1B0E, 0x1B0E, 0x12EE, 0x12ED, 0x12ED, 0x12ED, 0x12CD, 0x12CC, 0x0AAC, 0x0AAC, 0x0A8C, 0x0A8B, 0x026B, 0x026B, 0x024A, 0x024A, // 0x0140 (320) -0x336D, 0x2B6D, 0x2B6D, 0x2B8D, 0x2B8E, 0x2BAE, 0x33AE, 0x33CE, 0x33CE, 0x33CF, 0x3BEF, 0x3BEF, 0x3C0F, 0x3C10, 0x3C30, 0x3C30, // 0x0150 (336) -0x3C30, 0x4450, 0x4450, 0x4450, 0x4451, 0x4451, 0x4471, 0x4471, 0x4472, 0x4472, 0x4452, 0x3C52, 0x3C31, 0x3C31, 0x4452, 0x4472, // 0x0160 (352) -0x4472, 0x4472, 0x3C51, 0x3C31, 0x3C31, 0x3C10, 0x3C31, 0x4451, 0x3C30, 0x3C30, 0x3C0F, 0x3C10, 0x4451, 0x4C71, 0x4450, 0x3C10, // 0x0170 (368) -0x4451, 0x3C31, 0x3C31, 0x3C11, 0x3411, 0x33F1, 0x2BD1, 0x2BB1, 0x2BB1, 0x2B90, 0x2B70, 0x2B70, 0x2B4F, 0x234F, 0x232F, 0x1B2E, // 0x0180 (384) -0x1B2E, 0x1B0E, 0x1B0E, 0x1AEE, 0x12EE, 0x12ED, 0x12CD, 0x12CD, 0x0AAC, 0x0AAC, 0x0A8C, 0x0A8B, 0x0A8B, 0x026B, 0x024A, 0x024A, // 0x0190 (400) -0x336D, 0x2B6D, 0x2B6D, 0x2B8D, 0x2B8E, 0x2BAE, 0x33CE, 0x33CE, 0x33CE, 0x33CF, 0x3BEF, 0x3C0F, 0x3C10, 0x3C30, 0x3C30, 0x3C30, // 0x01A0 (416) -0x4450, 0x4450, 0x4451, 0x4451, 0x4471, 0x4471, 0x4472, 0x4472, 0x4472, 0x4472, 0x4472, 0x4472, 0x4C72, 0x4C92, 0x4C72, 0x4472, // 0x01B0 (432) -0x3C71, 0x3C50, 0x3C50, 0x5492, 0x7555, 0x8DD7, 0xAE9A, 0xBF1C, 0xBF1C, 0xB69A, 0xA618, 0xA618, 0xBEFB, 0xC75D, 0xAE79, 0x8575, // 0x01C0 (448) -0x5451, 0x4C11, 0x4410, 0x4411, 0x3C11, 0x3411, 0x3411, 0x33D1, 0x2BB0, 0x3391, 0x2B70, 0x2B70, 0x2B70, 0x2B50, 0x234F, 0x232F, // 0x01D0 (464) -0x1B2E, 0x1B2E, 0x1B0E, 0x1B0E, 0x1B0E, 0x12ED, 0x12ED, 0x12ED, 0x12CC, 0x0AAC, 0x0AAC, 0x0A8B, 0x0A8B, 0x0A8B, 0x026B, 0x024A, // 0x01E0 (480) -0x2B6D, 0x2B6D, 0x2B6D, 0x2B8D, 0x2BAE, 0x2BAE, 0x33CE, 0x33CE, 0x33CF, 0x33EF, 0x3BEF, 0x3C0F, 0x3C30, 0x3C30, 0x3C50, 0x3C50, // 0x01F0 (496) -0x4451, 0x4451, 0x4451, 0x4471, 0x4471, 0x4471, 0x4472, 0x4472, 0x4C92, 0x4492, 0x4472, 0x4C72, 0x4C72, 0x4452, 0x4431, 0x4C10, // 0x0200 (512) -0x5C71, 0x8555, 0xAE99, 0xD77D, 0xF7FF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7FF, // 0x0210 (528) -0xD75D, 0x9DF8, 0x6CD3, 0x5410, 0x43D0, 0x4411, 0x3C11, 0x2BB0, 0x33D1, 0x33B1, 0x2B90, 0x2B70, 0x2B70, 0x2B70, 0x234F, 0x234F, // 0x0220 (544) -0x234E, 0x1B2E, 0x1B2E, 0x1B2E, 0x1B0E, 0x1B0D, 0x12ED, 0x12ED, 0x12CC, 0x12CC, 0x12AC, 0x0AAC, 0x0A8B, 0x0A8B, 0x0A6B, 0x026A, // 0x0230 (560) -0x2B6D, 0x2B6D, 0x2B6D, 0x2B8D, 0x2BAE, 0x33CE, 0x33CE, 0x33CE, 0x33EF, 0x33EF, 0x3C0F, 0x3C10, 0x3C30, 0x3C30, 0x3C50, 0x3C50, // 0x0240 (576) -0x3C51, 0x4451, 0x4451, 0x4471, 0x4472, 0x4472, 0x4492, 0x4492, 0x4492, 0x4C72, 0x4C92, 0x4C72, 0x4451, 0x5492, 0x7DD7, 0xAF1C, // 0x0250 (592) -0xDF9E, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFDE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, // 0x0260 (608) -0xFFFF, 0xF7FF, 0xEFFF, 0xC71C, 0x7514, 0x43F0, 0x3BF0, 0x4411, 0x33D1, 0x33B1, 0x33B0, 0x2B90, 0x2B90, 0x236F, 0x236F, 0x234F, // 0x0270 (624) -0x1B4E, 0x1B2E, 0x1B2E, 0x1B2E, 0x1B0E, 0x1B0E, 0x1B0D, 0x1B0D, 0x12ED, 0x12CC, 0x12CC, 0x12AC, 0x0AAB, 0x0A8B, 0x0A8B, 0x0A6A, // 0x0280 (640) -0x2B8D, 0x2B6D, 0x2B8D, 0x2BAE, 0x2BAE, 0x2BCE, 0x2BEE, 0x2BEE, 0x33EF, 0x33EF, 0x3C0F, 0x3C0F, 0x3C30, 0x3C30, 0x3C50, 0x4450, // 0x0290 (656) -0x4471, 0x4450, 0x4471, 0x4492, 0x4472, 0x4472, 0x4C72, 0x4C72, 0x4472, 0x44B3, 0x3C72, 0x4492, 0x5492, 0xAE59, 0xFFFF, 0xFFFF, // 0x02A0 (672) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFE, 0xFFFF, 0xFFFE, 0xFFFF, 0xFFFF, 0xFFFF, // 0x02B0 (688) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xEF9E, 0xD6DB, 0xCF1C, 0xA659, 0x64D3, 0x3BF0, 0x2BAF, 0x2BD0, 0x2B8F, 0x2B6F, 0x2B4F, 0x232F, // 0x02C0 (704) -0x232F, 0x1B2F, 0x1B2E, 0x1B2E, 0x1B2E, 0x1B2D, 0x1B0D, 0x1B0D, 0x1B0C, 0x1AEC, 0x1ACB, 0x12AB, 0x12AB, 0x0AAA, 0x0AAA, 0x0A8A, // 0x02D0 (720) -0x2B6E, 0x2B6D, 0x2B8E, 0x2BAE, 0x2BAE, 0x2BCE, 0x2BCE, 0x2BCE, 0x33EF, 0x33EF, 0x3C0F, 0x3C0F, 0x3C30, 0x3C30, 0x3C50, 0x3C50, // 0x02E0 (736) -0x3C2F, 0x4471, 0x4471, 0x4492, 0x4C92, 0x4CB2, 0x4CB2, 0x4C71, 0x5CB2, 0x64F4, 0x7D56, 0xA65A, 0xD79E, 0xF7FF, 0xF7FE, 0xFFDE, // 0x02F0 (752) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFE, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0300 (768) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xF7FF, 0xF7FF, 0xD79E, 0xAE7A, 0x6CF4, 0x4BF1, 0x338F, 0x338F, 0x2B6F, 0x2B6F, // 0x0310 (784) -0x236F, 0x1B0E, 0x1B2E, 0x1B2E, 0x1B0D, 0x234D, 0x1B0C, 0x1B0C, 0x1B0C, 0x1B0B, 0x1AEB, 0x1ACB, 0x12CB, 0x12AA, 0x0AAA, 0x0A8A, // 0x0320 (800) -0x2B8E, 0x2B6E, 0x2B8E, 0x2BAE, 0x2BAE, 0x2BCF, 0x2BCF, 0x2BCF, 0x33EF, 0x3410, 0x3410, 0x3C10, 0x3C10, 0x3C30, 0x3C50, 0x3C51, // 0x0330 (816) -0x4491, 0x3C50, 0x4491, 0x4491, 0x4CB2, 0x4470, 0x5470, 0x85D6, 0xC75C, 0xE7BF, 0xF7FF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFE, 0xFFFF, // 0x0340 (832) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x0350 (848) -0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xE7DF, 0xA5F8, 0x5410, 0x3BAF, 0x2B6E, 0x236E, // 0x0360 (864) -0x1B0D, 0x2B6E, 0x234E, 0x1B2D, 0x234D, 0x1B2C, 0x232C, 0x232C, 0x230B, 0x230B, 0x22EB, 0x1AEB, 0x1ACA, 0x1ACA, 0x12CA, 0x12A9, // 0x0370 (880) -0x2B8E, 0x2B6E, 0x2B8E, 0x2BAF, 0x2BAF, 0x2BAF, 0x2BCF, 0x2BCF, 0x33EF, 0x33F0, 0x3410, 0x3C10, 0x3C10, 0x3C30, 0x3C30, 0x4451, // 0x0380 (896) -0x4451, 0x4471, 0x4491, 0x4491, 0x4C91, 0x6D13, 0xAE99, 0xEFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDE, // 0x0390 (912) -0xFFFF, 0xFFFF, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFDD, 0xFFDE, 0xFFFF, // 0x03A0 (928) -0xFFFF, 0xFFDF, 0xFFFF, 0xFFFE, 0xFFFE, 0xFFDE, 0xFFFE, 0xFFFF, 0xFFDF, 0xFFFF, 0xFFFF, 0xF7FF, 0xC71C, 0x74F4, 0x3BAE, 0x338E, // 0x03B0 (944) -0x338E, 0x232D, 0x236D, 0x234D, 0x234C, 0x234C, 0x1B2B, 0x232C, 0x232B, 0x230B, 0x230A, 0x22EA, 0x1AEA, 0x1ACA, 0x12C9, 0x12A9, // 0x03C0 (960) -0x2B8E, 0x2B6E, 0x2B8E, 0x2BAE, 0x2BAF, 0x2BAF, 0x2BCF, 0x2BCF, 0x33EF, 0x33EF, 0x3C0F, 0x3C10, 0x3C10, 0x3C30, 0x3C50, 0x4450, // 0x03D0 (976) -0x4430, 0x4C71, 0x4C71, 0x5471, 0x9E38, 0xE7FF, 0xEFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFDE, 0xFFDE, 0xFFFF, // 0x03E0 (992) -0xFFFE, 0xFFFE, 0xFFDD, 0xF7DC, 0xFFFC, 0xFFFC, 0xFFDD, 0xFFDD, 0xFFFE, 0xFFFE, 0xFFFD, 0xF7DC, 0xF7DC, 0xF7BC, 0xF7DC, 0xFFDD, // 0x03F0 (1008) -0xFFDE, 0xFFFF, 0xFFDE, 0xFFDE, 0xFFFE, 0xEF7C, 0xD6B8, 0xF7BD, 0xFFFE, 0xFFDE, 0xFFFF, 0xFFFF, 0xF7FF, 0xE7DF, 0x95B6, 0x438E, // 0x0400 (1024) -0x334C, 0x336D, 0x2B4C, 0x2B4C, 0x234C, 0x234C, 0x234B, 0x232B, 0x232A, 0x232A, 0x230A, 0x230A, 0x2309, 0x1AE9, 0x1AC9, 0x12C8, // 0x0410 (1040) -0x338E, 0x2B8D, 0x2B8D, 0x2BAE, 0x2BAE, 0x2BCE, 0x2BCF, 0x33CF, 0x33EF, 0x33EF, 0x3C0F, 0x3C0F, 0x3C2F, 0x4430, 0x4450, 0x4450, // 0x0420 (1056) -0x4C70, 0x4C30, 0x8554, 0xDF7D, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFE, 0xFFFD, 0xE73A, 0xDED9, 0xF79C, 0xF7BD, 0xF7DE, // 0x0430 (1072) -0xFFDE, 0xFFFD, 0xF7BC, 0xEF7A, 0xF79A, 0xF7DB, 0xF7BB, 0xF77B, 0xF79C, 0xFFDC, 0xF7BC, 0xEF5A, 0xEF7A, 0xF79A, 0xF79A, 0xF79B, // 0x0440 (1088) -0xFF9C, 0xFFDE, 0xFFFE, 0xF7DD, 0xF7FD, 0xE77B, 0x9D32, 0xAD93, 0xFFFD, 0xFFFE, 0xFFFE, 0xFFFF, 0xF7DE, 0xFFFF, 0xEFFF, 0x9595, // 0x0450 (1104) -0x3B6D, 0x334C, 0x338C, 0x2B4B, 0x2B4B, 0x234B, 0x2B8B, 0x234A, 0x234A, 0x232A, 0x2329, 0x2329, 0x2309, 0x2308, 0x1AE8, 0x1AE8, // 0x0460 (1120) -0x33AE, 0x338D, 0x2BAD, 0x33AD, 0x2BCE, 0x2BCE, 0x33EE, 0x33EE, 0x340F, 0x3C0F, 0x3C0F, 0x3C2F, 0x442F, 0x444F, 0x444F, 0x444F, // 0x0470 (1136) -0x4C2F, 0x8DB5, 0xD77C, 0xFFFF, 0xFFFF, 0xFFDE, 0xFFFF, 0xFFFF, 0xFFFE, 0xFFFD, 0xDEF8, 0x9CAF, 0xAD51, 0xEF5A, 0xEFBC, 0xEFBC, // 0x0480 (1152) -0xFFDD, 0xFFFD, 0xF7BB, 0xEF79, 0xEF79, 0xEF79, 0xEF59, 0xEF7A, 0xEF5A, 0xEF7B, 0xEF5A, 0xE718, 0xE738, 0xE738, 0xE758, 0xEF59, // 0x0490 (1168) -0xEF7B, 0xF79C, 0xFFFD, 0xFFFD, 0xF7DD, 0xF7DD, 0xBE16, 0x8C6F, 0xE71A, 0xFFFE, 0xFFDE, 0xFFDE, 0xF79D, 0xFFFE, 0xFFFF, 0xF7FF, // 0x04A0 (1184) -0x9E16, 0x438C, 0x3B8B, 0x336B, 0x336A, 0x2B6A, 0x2B6A, 0x2B49, 0x2B49, 0x2B49, 0x2B28, 0x2B28, 0x2B28, 0x2308, 0x2307, 0x22E7, // 0x04B0 (1200) -0x3BCE, 0x33AD, 0x33AD, 0x33CE, 0x33CE, 0x33EE, 0x33EE, 0x340E, 0x3C0E, 0x3C0F, 0x3C2E, 0x442F, 0x444F, 0x444F, 0x446F, 0x4C4E, // 0x04C0 (1216) -0x95F5, 0xE7FE, 0xF7FE, 0xF7FD, 0xFFFE, 0xFFDE, 0xFFDE, 0xFFDE, 0xFF9C, 0xFFDC, 0xB592, 0x6B48, 0xAD71, 0xE718, 0xE739, 0xF79B, // 0x04D0 (1232) -0xF7BD, 0xFFBD, 0xF79B, 0xEF79, 0xE738, 0xDED6, 0xDED7, 0xEF5A, 0xEF5A, 0xEF3A, 0xE719, 0xDEF8, 0xE718, 0xDED6, 0xDED7, 0xE718, // 0x04E0 (1248) -0xDF19, 0xE75A, 0xF7BC, 0xFFDD, 0xFFDD, 0xFFBD, 0xE71A, 0x8C4F, 0xAD33, 0xFFDE, 0xFFFE, 0xFFDE, 0xEF5C, 0xF7BD, 0xFFFE, 0xFFFE, // 0x04F0 (1264) -0xEFFF, 0xB6F9, 0x438B, 0x3B6A, 0x3B8A, 0x3369, 0x3369, 0x3369, 0x2B48, 0x2B48, 0x2B48, 0x2B27, 0x2B27, 0x2B27, 0x2306, 0x2306, // 0x0500 (1280) -0x3BCD, 0x33CD, 0x33CD, 0x33ED, 0x3BED, 0x3C0D, 0x3C0D, 0x3C2D, 0x3C2D, 0x3C4D, 0x3C6D, 0x446E, 0x4C6E, 0x4C4E, 0x5C4F, 0xAE37, // 0x0510 (1296) -0xFFFF, 0xFFDE, 0xFFFD, 0xF7DD, 0xF7BC, 0xF7BC, 0xFFDC, 0xF77B, 0xF779, 0xE738, 0x94AE, 0x6B69, 0xB5B3, 0xDEF9, 0xDF39, 0xE77A, // 0x0520 (1312) -0xEF7A, 0xEF7A, 0xE718, 0xDED6, 0xCE75, 0xD6B6, 0xCE75, 0xDED7, 0xEF7A, 0xEF7A, 0xDEF8, 0xDED8, 0xD6B7, 0xCE55, 0xCE54, 0xD695, // 0x0530 (1328) -0xD6B6, 0xD6F7, 0xE739, 0xEF7B, 0xF7DC, 0xEFBC, 0xD6FA, 0x8C6F, 0x8C4D, 0xE6F8, 0xFFFE, 0xFFFE, 0xFFDE, 0xE73B, 0xFFDD, 0xFFDE, // 0x0540 (1344) -0xFFDF, 0xFFFF, 0xA5F5, 0x4B8A, 0x3B89, 0x3BC9, 0x3388, 0x3388, 0x3388, 0x3368, 0x2B68, 0x2B67, 0x2B47, 0x2B46, 0x2B25, 0x2B25, // 0x0550 (1360) -0x3BEC, 0x3BEC, 0x3BEC, 0x3C0C, 0x3C0D, 0x3C0D, 0x442D, 0x444D, 0x4C8D, 0x444D, 0x448D, 0x4C8E, 0x546E, 0x6CD0, 0xC73A, 0xF7FF, // 0x0560 (1376) -0xF7FE, 0xFFFE, 0xFFFD, 0xEF7B, 0xEF7B, 0xFFDC, 0xEF7A, 0xE719, 0xEF59, 0xD695, 0x840B, 0x736A, 0xBDD3, 0xD6D8, 0xDF18, 0xE77A, // 0x0570 (1392) -0xEF9A, 0xDF18, 0xDF17, 0xD6B5, 0xC633, 0xCE54, 0xBE13, 0xCE54, 0xCE96, 0xDF18, 0xD6D7, 0xD6B7, 0xC634, 0xBDF3, 0xBDF2, 0xBDF3, // 0x0580 (1408) -0xC634, 0xCE76, 0xCE97, 0xD6B8, 0xE77B, 0xE77B, 0xD6F9, 0x94D1, 0x6329, 0xC615, 0xFFDD, 0xF7BD, 0xFFFE, 0xEF9C, 0xDEFA, 0xFFDD, // 0x0590 (1424) -0xFFFF, 0xF7DE, 0xF7FE, 0x8D91, 0x43C9, 0x3BC8, 0x3BC7, 0x3BA7, 0x3387, 0x3387, 0x3387, 0x3367, 0x3366, 0x2B45, 0x2B45, 0x2B24, // 0x05A0 (1440) -0x440C, 0x440B, 0x440B, 0x440C, 0x442C, 0x442C, 0x444C, 0x4C4C, 0x444B, 0x4CAD, 0x4C6C, 0x546D, 0x5C6D, 0xBF19, 0xF7FE, 0xF7FE, // 0x05B0 (1456) -0xFFFE, 0xFFBD, 0xF79B, 0xEF7A, 0xF79B, 0xF79B, 0xE6F8, 0xEF39, 0xEF58, 0xC613, 0x7369, 0x738A, 0xB5B3, 0xD6B7, 0xDEF8, 0xD6F7, // 0x05C0 (1472) -0xD6D6, 0xCE95, 0xCE95, 0xCE94, 0xC632, 0xC633, 0xBE12, 0xB5B1, 0xC654, 0xCE75, 0xCE75, 0xCE96, 0xBE14, 0xB591, 0xB5B1, 0xBDD2, // 0x05D0 (1488) -0xC634, 0xCE76, 0xCE97, 0xCE97, 0xDF19, 0xDF3A, 0xDF3A, 0xB5D5, 0x6B8A, 0xA510, 0xF7BC, 0xFFFE, 0xDF1A, 0xE73B, 0xD6D9, 0xE73B, // 0x05E0 (1504) -0xFFDD, 0xF7DD, 0xEFFD, 0x95D2, 0x43A8, 0x43E7, 0x3BE7, 0x3BA6, 0x3BA6, 0x3BA6, 0x33A6, 0x3385, 0x3385, 0x3364, 0x3344, 0x3343, // 0x05F0 (1520) -0x4C2B, 0x4C0B, 0x442B, 0x442B, 0x444B, 0x446B, 0x4C6B, 0x4C8C, 0x4C8B, 0x54AC, 0x54CC, 0x5C8C, 0x7D30, 0xE7FC, 0xF7FD, 0xFFBC, // 0x0600 (1536) -0xF79C, 0xF77B, 0xDEF8, 0xE718, 0xEF59, 0xE719, 0xE6F8, 0xF779, 0xEF38, 0xBDD2, 0x6B48, 0x840C, 0xC614, 0xD6D7, 0xDF18, 0xCEB6, // 0x0610 (1552) -0xC675, 0xC654, 0xC633, 0xBE12, 0xBDF1, 0xBDD1, 0xBE12, 0xB5B1, 0xBDF2, 0xBE13, 0xBE13, 0xBDF3, 0xAD91, 0xAD71, 0xB5B1, 0xB5B1, // 0x0620 (1568) -0xB5F3, 0xC655, 0xCE76, 0xC656, 0xC677, 0xCED9, 0xD6F9, 0xADB4, 0x6349, 0x8C6D, 0xDEF9, 0xFFFE, 0xD6D9, 0xCEB8, 0xCE97, 0xCE77, // 0x0630 (1584) -0xDF1A, 0xDF1A, 0xE7DB, 0x852F, 0x4BE8, 0x4C07, 0x3BC5, 0x43E6, 0x43C5, 0x43C5, 0x3BA5, 0x3BA5, 0x3BA4, 0x3B83, 0x3B63, 0x3362, // 0x0640 (1600) -0x544B, 0x4C4A, 0x4C4A, 0x4C6B, 0x4C8B, 0x4C8B, 0x4C8B, 0x54AB, 0x54CB, 0x4C8A, 0x54CB, 0x5CAC, 0x7D0E, 0xCF37, 0xEFBB, 0xE739, // 0x0650 (1616) -0xE6F8, 0xDED7, 0xD675, 0xDED7, 0xDED7, 0xD696, 0xE6F8, 0xF779, 0xE6F7, 0xB570, 0x6307, 0x948D, 0xCE75, 0xD6D7, 0xD6D7, 0xCE96, // 0x0660 (1632) -0xC654, 0xC654, 0xC653, 0xBDF2, 0xB5B1, 0xB5B1, 0xB5D2, 0xB5D2, 0xAD91, 0xAD91, 0xADB2, 0xAD71, 0x9D10, 0xA530, 0xAD71, 0xAD71, // 0x0670 (1648) -0x9D30, 0xB5D3, 0xC635, 0xD6B8, 0xCEB8, 0xCED9, 0xCED8, 0xBE36, 0x5AE7, 0x7BEB, 0xC656, 0xF7BD, 0xDF3A, 0xC677, 0xBE15, 0xBDF5, // 0x0680 (1664) -0xC636, 0xC656, 0xE7FB, 0x8DB0, 0x4BE7, 0x4C06, 0x4405, 0x4C05, 0x43E5, 0x43C4, 0x43C4, 0x43C4, 0x3BA4, 0x3BA3, 0x3B82, 0x3B62, // 0x0690 (1680) -0x546A, 0x546A, 0x4C6A, 0x4C8A, 0x4CAA, 0x4CAA, 0x54AA, 0x54CA, 0x54EA, 0x54EA, 0x54CA, 0x64EB, 0x6CCC, 0xBEF5, 0xE778, 0xC634, // 0x06A0 (1696) -0xD675, 0xCE34, 0xCE54, 0xD695, 0xCE75, 0xD696, 0xDED7, 0xEF79, 0xDEB6, 0xA50F, 0x6327, 0x94AE, 0xC655, 0xCE96, 0xC675, 0xC654, // 0x06B0 (1712) -0xC654, 0xC654, 0xCE75, 0xBDD3, 0xB5B2, 0xC614, 0xB591, 0xAD50, 0xAD70, 0xA550, 0xAD71, 0xAD71, 0xA530, 0x9D10, 0xA510, 0x9CCF, // 0x06C0 (1728) -0x94EF, 0x9CEF, 0x9CF0, 0xC615, 0xDF39, 0xE77B, 0xCED9, 0xBE36, 0x73CB, 0x73CB, 0xBE15, 0xF7BC, 0xDF5B, 0xBE57, 0xB5F4, 0xADB3, // 0x06D0 (1744) -0xAD93, 0xB5F4, 0xD778, 0x95CF, 0x4BE6, 0x4C26, 0x4C25, 0x4C04, 0x4BE4, 0x4BE4, 0x43E4, 0x43C4, 0x43C3, 0x43A3, 0x3BA2, 0x3B82, // 0x06E0 (1760) -0x5C89, 0x5489, 0x5489, 0x54A9, 0x54A9, 0x54A9, 0x5CC9, 0x5CC9, 0x5CE9, 0x5CE9, 0x5CE9, 0x64EA, 0x74EB, 0xAE51, 0xD736, 0xBE12, // 0x06F0 (1776) -0xBDD2, 0xC613, 0xCE34, 0xC5F2, 0xC634, 0xD6B6, 0xE718, 0xE718, 0xD6B6, 0x9CCE, 0x6B68, 0x9CCF, 0xBDF4, 0xC656, 0xC696, 0xCE96, // 0x0700 (1792) -0xD6F6, 0xCE75, 0xBDF3, 0xAD71, 0xA530, 0xB5B2, 0xAD71, 0x9CCE, 0x9CEE, 0xA52F, 0xAD91, 0xA52F, 0x9D0F, 0x9D0F, 0x94AE, 0x7BEB, // 0x0710 (1808) -0x6BA9, 0x6B8A, 0x7BEC, 0x9CF0, 0xC636, 0xDF3A, 0xE77B, 0xCE97, 0x846D, 0x738A, 0xB593, 0xEF7B, 0xE75B, 0xC677, 0xA593, 0xA552, // 0x0720 (1824) -0x9D11, 0xA591, 0xC715, 0x74EB, 0x5446, 0x5445, 0x4C03, 0x5424, 0x4C03, 0x4C03, 0x4C03, 0x4BE3, 0x43E3, 0x43C3, 0x43A2, 0x43A2, // 0x0730 (1840) -0x5CA8, 0x5C88, 0x5488, 0x5CA8, 0x5CC8, 0x5CC8, 0x5CC8, 0x64E8, 0x5D08, 0x6509, 0x5CE8, 0x6D0A, 0x6CEA, 0x95CE, 0xD735, 0xADB0, // 0x0740 (1856) -0xAD70, 0xBDB2, 0xB591, 0xB591, 0xC613, 0xCE55, 0xE718, 0xDF18, 0xD695, 0x8C4C, 0x6B48, 0x9CCF, 0xB5D3, 0xC655, 0xD6D7, 0xE759, // 0x0750 (1872) -0xD6F7, 0xC634, 0xA530, 0xA530, 0x94AE, 0x9CAE, 0xA52F, 0x9CEE, 0x94CD, 0xA50F, 0xAD90, 0xA52F, 0x94EE, 0x8C8D, 0x842C, 0x73AA, // 0x0760 (1888) -0x6348, 0x4A65, 0x6B29, 0x946E, 0xA532, 0xB5F5, 0xD6F9, 0xCE97, 0x94CF, 0x6349, 0xA552, 0xEF7C, 0xDF3A, 0xC677, 0xAD93, 0x9D11, // 0x0770 (1904) -0x8CCF, 0xADD1, 0x9DF0, 0x6468, 0x5466, 0x5444, 0x5443, 0x5443, 0x5423, 0x5423, 0x4C03, 0x4C03, 0x43E3, 0x43E3, 0x43C2, 0x43A2, // 0x0780 (1920) -0x5CA7, 0x5CA7, 0x5CA7, 0x5CC8, 0x5CC8, 0x64C8, 0x64E8, 0x64E8, 0x6508, 0x64E7, 0x6D08, 0x6D28, 0x6D09, 0x7D6B, 0xA691, 0xAE71, // 0x0790 (1936) -0xA54F, 0xA50E, 0xA52F, 0xB571, 0xBDD3, 0xD676, 0xDED8, 0xE718, 0xC633, 0x7388, 0x6B68, 0x9D0F, 0xBE14, 0xCEB7, 0xE75A, 0xDF39, // 0x07A0 (1952) -0xC654, 0xA52F, 0x8C4C, 0x73A9, 0x73A8, 0x840A, 0x8C8C, 0x948D, 0x94AD, 0xA510, 0xAD91, 0xAD71, 0xA531, 0x8C6E, 0x8C2C, 0x7389, // 0x07B0 (1968) -0x52A6, 0x18E0, 0x2103, 0x39E7, 0x7BEE, 0xAD74, 0xA553, 0xB5D3, 0x8CAC, 0x52C5, 0x842C, 0xDEF9, 0xF7BE, 0xD69A, 0xA553, 0x8CEF, // 0x07C0 (1984) -0x8D2E, 0xAE71, 0x74EA, 0x5C46, 0x5C65, 0x5C64, 0x5443, 0x5C63, 0x5443, 0x5423, 0x5423, 0x4C03, 0x4BE3, 0x4BC3, 0x43C2, 0x43A2, // 0x07D0 (2000) -0x64C6, 0x64C6, 0x64C7, 0x64C7, 0x64E7, 0x64E7, 0x6507, 0x6507, 0x6507, 0x6D27, 0x6D27, 0x6D27, 0x6D28, 0x7528, 0x8DCC, 0xAE70, // 0x07E0 (2016) -0xB5D0, 0x94AC, 0xA52E, 0xA52F, 0xB592, 0xDEB7, 0xE719, 0xDED7, 0xBDD2, 0x6326, 0x6B67, 0xA52F, 0xC675, 0xD6F8, 0xD718, 0xBE15, // 0x07F0 (2032) -0xA552, 0x8C6E, 0x5AE8, 0x41E3, 0x62E7, 0x6B48, 0x842B, 0x948D, 0x9D0F, 0xAD71, 0xB5D3, 0xB5B2, 0xAD92, 0xA530, 0x9CCE, 0x7BCB, // 0x0800 (2048) -0x2962, 0x0840, 0x1081, 0x0000, 0x0860, 0x2984, 0x8C90, 0x9D10, 0x7C2A, 0x4AA4, 0x5B27, 0xBDF4, 0xF7BD, 0xE73B, 0xA552, 0x8CCE, // 0x0810 (2064) -0x9DF0, 0x856C, 0x6487, 0x5C66, 0x5C65, 0x5C64, 0x5C84, 0x5443, 0x5443, 0x5443, 0x5423, 0x4C03, 0x4BE3, 0x4BE3, 0x4BC2, 0x43A1, // 0x0820 (2080) -0x64E5, 0x64C5, 0x64C5, 0x64E6, 0x64E6, 0x6506, 0x6D06, 0x6D26, 0x6D26, 0x6D46, 0x6D46, 0x6D46, 0x7547, 0x7547, 0x7527, 0x960C, // 0x0830 (2096) -0xB650, 0xA56E, 0x94CC, 0x9CED, 0xB5B2, 0xDED7, 0xEF39, 0xDED7, 0xA50F, 0x5AE5, 0x73A8, 0x9D0E, 0xB5D2, 0xC655, 0xA551, 0x9D11, // 0x0840 (2112) -0x842E, 0x39E6, 0x18C1, 0x1060, 0x3162, 0x5265, 0x83CB, 0xA4F0, 0xAD31, 0xBDD3, 0xC635, 0xC635, 0xB5D3, 0xAD92, 0xA571, 0x9CF0, // 0x0850 (2128) -0x52A7, 0x1080, 0x0020, 0x0000, 0x0860, 0x4A87, 0xA552, 0x9D10, 0x844B, 0x52E5, 0x5B07, 0x9CF0, 0xE73A, 0xF7BC, 0xADD3, 0x9D90, // 0x0860 (2144) -0x95CD, 0x64A7, 0x6485, 0x64A5, 0x64A4, 0x5C63, 0x5CA4, 0x5C63, 0x5463, 0x5444, 0x5423, 0x5403, 0x4BE3, 0x4BE2, 0x4BC1, 0x4BA1, // 0x0870 (2160) -0x6CE5, 0x6CC5, 0x6CC5, 0x6CE5, 0x6D05, 0x6D06, 0x6D25, 0x6D45, 0x7546, 0x6D45, 0x7565, 0x7565, 0x7565, 0x7D87, 0x7546, 0x8568, // 0x0880 (2176) -0x95AB, 0xB62F, 0x9D4C, 0x9D4D, 0xBE12, 0xD696, 0xE718, 0xD676, 0x8C6C, 0x5AC5, 0x73A8, 0x8C6C, 0x9D0F, 0xA530, 0x94CE, 0x4225, // 0x0890 (2192) -0x0860, 0x0020, 0x0020, 0x18C0, 0x18A0, 0x39A3, 0x8C2D, 0xBDB3, 0xBDF4, 0xCE56, 0xCE98, 0xD6F9, 0xCED8, 0xC698, 0xBE36, 0xADB4, // 0x08A0 (2208) -0x94D0, 0x3A06, 0x2984, 0x31A5, 0x52C8, 0x8C8F, 0xA572, 0x9D10, 0x844B, 0x5B27, 0x7C0B, 0x9D10, 0xB5D3, 0xF7FC, 0xC6B6, 0x9DB0, // 0x08B0 (2224) -0x74E8, 0x64A5, 0x6CE5, 0x64A5, 0x64A4, 0x5C84, 0x5C84, 0x5C84, 0x5C64, 0x5C64, 0x5423, 0x5423, 0x5402, 0x4BE2, 0x4BC1, 0x4BC1, // 0x08C0 (2240) -0x6CE5, 0x6CC4, 0x6CE5, 0x6CE5, 0x7506, 0x7526, 0x7546, 0x7546, 0x7565, 0x7545, 0x7D65, 0x7565, 0x7545, 0x7D65, 0x7D86, 0x7D67, // 0x08D0 (2256) -0x8548, 0x9DCB, 0xB62E, 0xA5AD, 0xBE11, 0xDED6, 0xDEB6, 0xBDB2, 0x842B, 0x6B46, 0x73A8, 0x844B, 0x9D0E, 0xAD70, 0xBDF2, 0x73AA, // 0x08E0 (2272) -0x1921, 0x0860, 0x0000, 0x18A0, 0x2941, 0x734A, 0xAD52, 0xBDD4, 0xDEF9, 0xE75B, 0xE73C, 0xE77D, 0xE77D, 0xEF9E, 0xDF3C, 0xCEB9, // 0x08F0 (2288) -0xD6B8, 0x94D1, 0x73CD, 0x6BAC, 0x846E, 0x9D30, 0x9D51, 0xA571, 0x848D, 0x6369, 0x8C8E, 0xC676, 0x950F, 0xD738, 0xD758, 0x850D, // 0x0900 (2304) -0x64A6, 0x6D05, 0x64E5, 0x5CA4, 0x64A4, 0x64A4, 0x5C84, 0x5C84, 0x5C64, 0x5C64, 0x5C23, 0x5423, 0x5403, 0x53E2, 0x53C2, 0x4BC1, // 0x0910 (2320) -0x74E5, 0x74E5, 0x74E5, 0x74E5, 0x7526, 0x7526, 0x7546, 0x7546, 0x7546, 0x7D66, 0x7D66, 0x7D66, 0x7D86, 0x7D65, 0x85A6, 0x85A6, // 0x0920 (2336) -0x85A7, 0x8D88, 0x9DEB, 0xAE0D, 0xBE30, 0xDEF5, 0xBDD2, 0xA4EE, 0x842A, 0x7BC8, 0x7C09, 0x8C8C, 0x9D2F, 0xADB1, 0xAD90, 0xADB1, // 0x0930 (2352) -0x844D, 0x52A7, 0x52A6, 0x52A6, 0x6B49, 0xAD72, 0xD677, 0xE73A, 0xF79D, 0xF7DE, 0xF7DF, 0xF7BF, 0xEF9F, 0xF7BF, 0xF7BF, 0xF7DE, // 0x0940 (2368) -0xEF9C, 0xD6B8, 0xA593, 0x9511, 0x9510, 0xA591, 0xA571, 0x9D71, 0x8CEF, 0x6BCB, 0x9510, 0xDF79, 0x8D2E, 0xA5F0, 0xDFD8, 0x7D0B, // 0x0950 (2384) -0x6CC6, 0x6D05, 0x64C4, 0x64C5, 0x64C5, 0x64A5, 0x6484, 0x6484, 0x6464, 0x5C64, 0x5C23, 0x5C23, 0x5C03, 0x53E2, 0x53C2, 0x53C2, // 0x0960 (2400) -0x74E5, 0x74E5, 0x7505, 0x7506, 0x7526, 0x7D46, 0x7D46, 0x7D46, 0x7D66, 0x7D67, 0x7D66, 0x8586, 0x85A7, 0x8586, 0x85A5, 0x85A6, // 0x0970 (2416) -0x7D85, 0x85C7, 0x8D87, 0xAE2C, 0xBE50, 0xBE31, 0xA50E, 0xA50E, 0x94AC, 0x844A, 0x73E8, 0x844A, 0xA56F, 0xADB1, 0xB5D1, 0x9D2F, // 0x0980 (2432) -0xA530, 0x9CCF, 0x842C, 0x8C4D, 0xB5D3, 0xD697, 0xE73A, 0xF7BD, 0xF7BE, 0xF7DF, 0xF7DF, 0xF7FF, 0xFFFF, 0xFFDF, 0xF7BE, 0xFFFF, // 0x0990 (2448) -0xEFBD, 0xE73B, 0xD6FA, 0xB5D5, 0xA572, 0xA572, 0xA592, 0x9D72, 0x848E, 0x7C2D, 0xA5D3, 0xD758, 0x8D2C, 0x856B, 0xC753, 0x854A, // 0x09A0 (2464) -0x6D06, 0x6CE5, 0x6CC5, 0x6CE5, 0x6CC5, 0x64A5, 0x6484, 0x6484, 0x6464, 0x6444, 0x5C23, 0x5C23, 0x5C03, 0x53E3, 0x53C3, 0x53C3, // 0x09B0 (2480) -0x7505, 0x7505, 0x7525, 0x7D26, 0x7D26, 0x7D46, 0x7D46, 0x7D67, 0x8587, 0x8587, 0x8587, 0x85A7, 0x8586, 0x85C6, 0x8DC6, 0x8DC6, // 0x09C0 (2496) -0x85E6, 0x8DE6, 0x8DC7, 0x9589, 0xBE6F, 0xB5CF, 0xAD6F, 0xBDD1, 0x9D0D, 0x8CAB, 0x7C29, 0x846B, 0xA56F, 0xADD1, 0xADB1, 0xA570, // 0x09D0 (2512) -0xA52F, 0xA50F, 0x9CEF, 0xAD71, 0xC655, 0xD6B7, 0xE75B, 0xF7DD, 0xF7DE, 0xF7FF, 0xF7FF, 0xF7DF, 0xFFFF, 0xFFFF, 0xFFBE, 0xFFDE, // 0x09E0 (2528) -0xFFDF, 0xF7BE, 0xDF3C, 0xCE99, 0xADD5, 0xADB4, 0xADD4, 0xA593, 0x84AF, 0x7C6E, 0xB655, 0xDFB9, 0x8D8B, 0x7D28, 0x7D28, 0x7528, // 0x09F0 (2544) -0x7527, 0x7506, 0x6CE6, 0x64A5, 0x6CA5, 0x6CA5, 0x6484, 0x6484, 0x6464, 0x6464, 0x5C43, 0x5C23, 0x5C03, 0x5BE3, 0x53C3, 0x53C3, // 0x0A00 (2560) -0x7D06, 0x7D06, 0x7D07, 0x8527, 0x8547, 0x8547, 0x8567, 0x8567, 0x8DA8, 0x8DA8, 0x8DA8, 0x8DA8, 0x8DA7, 0x8DC8, 0x95C7, 0x95C8, // 0x0A10 (2576) -0x95E8, 0x8DC8, 0x95E8, 0x95A9, 0xB68F, 0xDF96, 0xE7B9, 0xBE14, 0xA590, 0x9D2E, 0x8CAB, 0x94CC, 0x9D4E, 0xA590, 0xADD2, 0xB5D2, // 0x0A20 (2592) -0xA570, 0xAD50, 0xAD71, 0xC614, 0xCE76, 0xDF19, 0xEF9C, 0xF7DD, 0xEFBD, 0xEF9D, 0xF7FE, 0xF7DE, 0xE77D, 0xEF9D, 0xF7DE, 0xEFBE, // 0x0A30 (2608) -0xE75D, 0xF7DF, 0xE77D, 0xC678, 0xB615, 0xB614, 0xB635, 0x9D93, 0x84EF, 0x8D0F, 0xC6D8, 0xCF57, 0x8D6A, 0x7D47, 0x7527, 0x7506, // 0x0A40 (2624) -0x6D06, 0x6D06, 0x6CE5, 0x6CE5, 0x6CC5, 0x6CA5, 0x6484, 0x6465, 0x6465, 0x6465, 0x6445, 0x6424, 0x6404, 0x5BE4, 0x5BC3, 0x53C2, // 0x0A50 (2640) -0x7D27, 0x7D07, 0x7D07, 0x7D27, 0x8547, 0x8568, 0x8D88, 0x8D88, 0x8DA8, 0x8DA8, 0x8DC8, 0x95C8, 0x95C8, 0x95C8, 0x95E8, 0x95E8, // 0x0A60 (2656) -0x95E8, 0x95E8, 0x95C8, 0x95CA, 0xBE71, 0xF7FA, 0xEFDA, 0xCE96, 0xADB0, 0xA56F, 0x9D2E, 0xA54F, 0xA58F, 0xA590, 0xB5F2, 0xB613, // 0x0A70 (2672) -0xB5D2, 0xB5B2, 0xB5F3, 0xB5F3, 0xD6B7, 0xE75A, 0xDF19, 0xDEFA, 0xDF1A, 0xDEFA, 0xADD5, 0x9D33, 0x8C91, 0x94F2, 0xADB5, 0xC658, // 0x0A80 (2688) -0xDF3C, 0xEF7D, 0xEFBE, 0xCEDA, 0xA5B3, 0xBE76, 0xB615, 0xA5D4, 0x8D10, 0xA5D3, 0xCF59, 0xBED5, 0x8D8A, 0x7D27, 0x7D47, 0x7D47, // 0x0A90 (2704) -0x7527, 0x6D06, 0x6CE5, 0x6CC5, 0x6CC5, 0x6CA5, 0x6CA5, 0x6C85, 0x6C85, 0x6C65, 0x6C65, 0x6445, 0x6424, 0x5C04, 0x5BE3, 0x5BC3, // 0x0AA0 (2720) -0x8528, 0x8528, 0x8507, 0x8527, 0x8548, 0x8D68, 0x8D88, 0x8DA9, 0x8DA8, 0x8DA8, 0x95C8, 0x95C8, 0x95C8, 0x95E8, 0x95E8, 0x95E8, // 0x0AB0 (2736) -0x95E7, 0x95E8, 0x95C9, 0xAE4E, 0xE7D9, 0xF7FD, 0xF7DC, 0xCE95, 0xB5D1, 0xADB0, 0xAD70, 0xA54F, 0x9D4E, 0xA58F, 0xB612, 0xBE54, // 0x0AC0 (2752) -0xC654, 0xC654, 0xB5F2, 0xBE14, 0xCEB6, 0xDF39, 0xDF19, 0xD6F9, 0xB5F5, 0x7C0F, 0x5B0B, 0x5B2B, 0x636C, 0x73AD, 0x73EE, 0x8C91, // 0x0AD0 (2768) -0xBE16, 0xD6FA, 0xEFDE, 0xE79D, 0xBE56, 0xB615, 0xADF5, 0xADF5, 0x9D92, 0xC6D7, 0xE7DB, 0xC6F5, 0x95AB, 0x7D48, 0x7D47, 0x7527, // 0x0AE0 (2784) -0x7527, 0x6D06, 0x6CE5, 0x6CC5, 0x6CC5, 0x6CA5, 0x6CA5, 0x6CA5, 0x6C85, 0x6C65, 0x6C45, 0x6445, 0x6425, 0x6424, 0x6404, 0x5BE3, // 0x0AF0 (2800) -0x8528, 0x8528, 0x8528, 0x8548, 0x8D69, 0x8D69, 0x8D69, 0x8D89, 0x8DA9, 0x95A9, 0x95C9, 0x95C9, 0x95C8, 0x95E9, 0x95E8, 0x9E08, // 0x0B00 (2816) -0x9E08, 0x9DC8, 0x9DEC, 0xDF97, 0xFFFD, 0xFFFF, 0xF7DC, 0xD6D7, 0xB5F2, 0xADB0, 0xA570, 0xA570, 0x9D4F, 0xA590, 0xB612, 0xBE53, // 0x0B10 (2832) -0xBE53, 0xBE13, 0xBE13, 0xBE34, 0xDF18, 0xDF39, 0xE77A, 0xCE77, 0x94B0, 0x6B6C, 0x632B, 0x5289, 0x4A68, 0x4A68, 0x52A9, 0x7BEE, // 0x0B20 (2848) -0x73ED, 0xBE37, 0xDF5C, 0xE79D, 0xCF19, 0xB636, 0xB636, 0xA5D4, 0xAE14, 0xCF38, 0xDFB9, 0xC714, 0x95AB, 0x8569, 0x7D67, 0x7547, // 0x0B30 (2864) -0x7527, 0x6D06, 0x6CE5, 0x6CC5, 0x6CC5, 0x6CA5, 0x6CA5, 0x74A6, 0x6C85, 0x6C66, 0x6C65, 0x6C46, 0x6C45, 0x6C25, 0x6404, 0x63E4, // 0x0B40 (2880) -0x8528, 0x8528, 0x8529, 0x8D49, 0x8D49, 0x8D49, 0x8D69, 0x8D69, 0x8D89, 0x9589, 0x95A9, 0x95C9, 0x95E9, 0x95E9, 0x9DE9, 0x9DE9, // 0x0B50 (2896) -0x95C8, 0x9DCB, 0xCF15, 0xFFFD, 0xF7FE, 0xFFFF, 0xF7FD, 0xE739, 0xBE33, 0xAD90, 0xA54E, 0xA58F, 0xA590, 0xA591, 0xADF1, 0xB612, // 0x0B60 (2912) -0xBE12, 0xB5D2, 0xC654, 0xD6D7, 0xDEF8, 0xD6D8, 0xC656, 0xBDF5, 0x630A, 0x5289, 0x2102, 0x0840, 0x0820, 0x0800, 0x0820, 0x39C6, // 0x0B70 (2928) -0x634B, 0xA594, 0xC679, 0xE77D, 0xDF7B, 0xCEF9, 0xBE97, 0xADF4, 0xBE96, 0xCF17, 0xC715, 0xAE70, 0x8D8A, 0x8568, 0x7D48, 0x7D47, // 0x0B80 (2944) -0x6D27, 0x6CE7, 0x6CE6, 0x6CC5, 0x6CC5, 0x6CA5, 0x74A5, 0x74A6, 0x7486, 0x7466, 0x7466, 0x7466, 0x7466, 0x6C46, 0x6C25, 0x6405, // 0x0B90 (2960) -0x8508, 0x8508, 0x8D29, 0x8D29, 0x8D49, 0x8D49, 0x8D49, 0x8D69, 0x9589, 0x9589, 0x95A9, 0x9DCA, 0x95C9, 0x9DE9, 0x95E9, 0x95C9, // 0x0BA0 (2976) -0x9DAB, 0xCED3, 0xF7FD, 0xFFFF, 0xFFFF, 0xFFFE, 0xFFFD, 0xDF19, 0xC674, 0xB5D1, 0xA56E, 0x9D2D, 0x952F, 0xA570, 0xA5B1, 0xADD1, // 0x0BB0 (2992) -0xBE13, 0xC655, 0xD6D7, 0xD6D7, 0xD6D7, 0xB5D4, 0xB5B4, 0xB5B4, 0x738C, 0x3185, 0x0820, 0x0000, 0x0000, 0x0000, 0x0000, 0x18C2, // 0x0BC0 (3008) -0x5B4B, 0x9512, 0xADD6, 0xD71C, 0xDF9C, 0xC6F9, 0xC6F8, 0xAE35, 0xBEB6, 0xC6F5, 0xB6D2, 0x9DED, 0x95CB, 0x8589, 0x7D68, 0x7D48, // 0x0BD0 (3024) -0x7527, 0x6CE7, 0x64C6, 0x64A6, 0x6CA6, 0x6CC6, 0x74A6, 0x74A7, 0x7486, 0x7487, 0x7467, 0x7467, 0x7467, 0x7446, 0x6C26, 0x6C05, // 0x0BE0 (3040) -0x84E8, 0x84E8, 0x8508, 0x8D29, 0x8D29, 0x8D49, 0x8D4A, 0x8D4A, 0x956A, 0x958A, 0x95AA, 0x95CA, 0x95C9, 0x95C9, 0x95E9, 0x9DCB, // 0x0BF0 (3056) -0xC6D3, 0xFFFD, 0xFFFF, 0xFFFF, 0xFFDE, 0xFFFE, 0xF7DB, 0xDF18, 0xCE95, 0xBE32, 0xADAF, 0x94EC, 0x8CAC, 0x950E, 0x9D4F, 0xA5B1, // 0x0C00 (3072) -0xB5F2, 0xCEB6, 0xCE96, 0xCEB6, 0xC676, 0xB5D4, 0xAD93, 0x94F1, 0x73AD, 0x1902, 0x0040, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, // 0x0C10 (3088) -0x4288, 0x8490, 0x9D55, 0xBE59, 0xD75B, 0xC6D8, 0xC6F8, 0xB675, 0xBED5, 0xB692, 0xAE90, 0x9DEC, 0x95EB, 0x8DAA, 0x8589, 0x7D68, // 0x0C20 (3104) -0x7528, 0x6CE7, 0x64A6, 0x64A6, 0x6CA6, 0x74C6, 0x74C7, 0x7CC7, 0x7CA7, 0x7C87, 0x7C87, 0x7C88, 0x7C68, 0x7447, 0x6C27, 0x6C26, // 0x0C30 (3120) -0x84E8, 0x84E8, 0x8508, 0x8D29, 0x8D49, 0x8D49, 0x8D29, 0x8D29, 0x8D49, 0x956A, 0x958A, 0x9589, 0x95A9, 0x95CA, 0x9E0A, 0xA60D, // 0x0C40 (3136) -0xEFFA, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xF7DD, 0xF7BB, 0xDF17, 0xCE94, 0xBE32, 0xB5D0, 0xA56E, 0x94ED, 0x84AC, 0x8CCD, 0xA591, // 0x0C50 (3152) -0xADF3, 0xADD3, 0xBE54, 0xC6B7, 0xBE76, 0xA593, 0x9511, 0x8CD1, 0x5B2B, 0x31A5, 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0881, // 0x0C60 (3168) -0x4268, 0x742F, 0x9D35, 0xB639, 0xCF3A, 0xCF39, 0xAE34, 0xC6F6, 0xCF57, 0xAE71, 0xA64E, 0x9E0C, 0x8D8A, 0x8569, 0x7D48, 0x7528, // 0x0C70 (3184) -0x6CE7, 0x64C7, 0x64A6, 0x64A6, 0x6CC6, 0x74C7, 0x7CC7, 0x7CC7, 0x7CC8, 0x7CA8, 0x7CA8, 0x7CA8, 0x7C88, 0x7468, 0x7447, 0x7447, // 0x0C80 (3200) -0x7CC7, 0x7CC7, 0x84E8, 0x8D08, 0x8D29, 0x9529, 0x8D09, 0x8D09, 0x8D29, 0x954A, 0x956A, 0x9569, 0x95A9, 0x95A9, 0x958C, 0xC6B3, // 0x0C90 (3216) -0xFFFD, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFDD, 0xF7BC, 0xEF5A, 0xDEF7, 0xC653, 0xBE12, 0xB5D0, 0xA56F, 0x94EC, 0x8CAC, 0x846B, 0x8CCD, // 0x0CA0 (3232) -0xADD1, 0x8D0F, 0xA591, 0xBE75, 0xB614, 0x9D72, 0x8CD0, 0x846F, 0x5B0A, 0x31A5, 0x0880, 0x0000, 0x0000, 0x0020, 0x0000, 0x18C1, // 0x0CB0 (3248) -0x4226, 0x638B, 0x8CB1, 0xB617, 0xD75B, 0xC6B8, 0xB657, 0xE7DB, 0xD757, 0xAE50, 0xA60C, 0x9DEA, 0x8D89, 0x8569, 0x7507, 0x74E7, // 0x0CC0 (3264) -0x6CE7, 0x6CA6, 0x64A6, 0x6CA7, 0x74C7, 0x7CC8, 0x7CC8, 0x84C8, 0x84C9, 0x84A9, 0x84A9, 0x84A9, 0x84A9, 0x7C89, 0x7C89, 0x7C68, // 0x0CD0 (3280) -0x7CA7, 0x7CA7, 0x7CC7, 0x84E8, 0x8CE9, 0x8CE9, 0x8CE9, 0x8CE9, 0x8D09, 0x8D2A, 0x8D4A, 0x8D49, 0x8D69, 0x956A, 0xA5EE, 0xE798, // 0x0CE0 (3296) -0xFFFE, 0xFFFF, 0xFFFF, 0xFFFE, 0xF7BD, 0xEF7B, 0xDF18, 0xD6B6, 0xC654, 0xB5D1, 0xA56F, 0xADD0, 0x9D2E, 0x846B, 0x846B, 0x846B, // 0x0CF0 (3312) -0x94EE, 0x952F, 0x6BEA, 0xADD2, 0xBE34, 0x9D31, 0x848F, 0x73CD, 0x52C8, 0x2984, 0x0880, 0x0860, 0x0020, 0x0840, 0x18C1, 0x18E1, // 0x0D00 (3328) -0x29C3, 0x5B29, 0x7C4F, 0xB5F6, 0xCEF9, 0xC6B9, 0xDF9C, 0xF7FD, 0xE7D9, 0xBEB2, 0x9DCC, 0x95A9, 0x8548, 0x7507, 0x6CE7, 0x6CE7, // 0x0D10 (3344) -0x6CC7, 0x6CA7, 0x6C86, 0x6CA7, 0x74C8, 0x7CC8, 0x7CC8, 0x84E9, 0x84C9, 0x84A9, 0x84A9, 0x84A9, 0x84A9, 0x8489, 0x7C89, 0x7C69, // 0x0D20 (3360) -0x7C87, 0x7C87, 0x7CA8, 0x84C9, 0x8CE9, 0x8CC9, 0x8CC9, 0x8CE9, 0x8D09, 0x8D09, 0x8D29, 0x8D4A, 0x956A, 0x958B, 0xB651, 0xF7FB, // 0x0D30 (3376) -0xFFFE, 0xFFFF, 0xFFFF, 0xFFFE, 0xF7BC, 0xEF7A, 0xE738, 0xDEF7, 0xD6B5, 0xBE12, 0xADB0, 0xA54F, 0xA54E, 0x94ED, 0x848B, 0x846B, // 0x0D40 (3392) -0x848C, 0x94EE, 0x8CCE, 0x846D, 0xAD91, 0xA571, 0x7C2D, 0x634A, 0x4A87, 0x31C4, 0x18E1, 0x1901, 0x0860, 0x0020, 0x18C1, 0x18E1, // 0x0D50 (3408) -0x29C3, 0x4286, 0x740D, 0xADD4, 0xC697, 0xD73A, 0xF7FE, 0xF7FE, 0xF7FB, 0xCF15, 0x9DEC, 0x95AA, 0x8548, 0x6CE6, 0x6CE6, 0x64A5, // 0x0D60 (3424) -0x6486, 0x6C87, 0x6C87, 0x74A7, 0x74A8, 0x7CC8, 0x84C9, 0x84E9, 0x84C9, 0x84A9, 0x84A9, 0x84AA, 0x84A9, 0x8489, 0x848A, 0x7C69, // 0x0D70 (3440) -0x7446, 0x7466, 0x7C87, 0x84A8, 0x84A9, 0x84A9, 0x84A8, 0x84C8, 0x84E9, 0x84E9, 0x8D09, 0x8D2A, 0x954A, 0x954C, 0xC694, 0xF7FC, // 0x0D80 (3456) -0xFFFE, 0xFFFF, 0xFFDE, 0xEF9C, 0xE73A, 0xDF18, 0xDF17, 0xD6F6, 0xC653, 0xBE12, 0xADB0, 0x94CC, 0x94CC, 0x94ED, 0x8C8B, 0x844A, // 0x0D90 (3472) -0x7C2A, 0x7C0A, 0x94EE, 0x8C8D, 0x7C4B, 0x8CAD, 0x844C, 0x52C6, 0x4285, 0x2982, 0x08A0, 0x0880, 0x0080, 0x08A0, 0x1901, 0x31E4, // 0x0DA0 (3488) -0x42A6, 0x6C0B, 0x9D71, 0xA593, 0xB615, 0xE75B, 0xF7FE, 0xFFFF, 0xF7FC, 0xD736, 0x9DAC, 0x8528, 0x74E6, 0x64A5, 0x64A5, 0x6485, // 0x0DB0 (3504) -0x6466, 0x6C67, 0x6C87, 0x7487, 0x74A8, 0x7CA8, 0x84C8, 0x84C9, 0x84C9, 0x84A9, 0x8489, 0x8489, 0x8489, 0x848A, 0x846A, 0x7C49, // 0x0DC0 (3520) -0x6C25, 0x7446, 0x7466, 0x7C87, 0x8488, 0x8488, 0x84A8, 0x8CC8, 0x8D09, 0x8D09, 0x8D4A, 0x8D2A, 0x8D09, 0x952C, 0xDF58, 0xFFFD, // 0x0DD0 (3536) -0xFFFE, 0xFFFF, 0xF7DD, 0xE75A, 0xDF18, 0xDF17, 0xDEF7, 0xD6B6, 0xCE94, 0xB5D1, 0x94EE, 0x846C, 0x7C2A, 0x7C2B, 0x8CAC, 0x844A, // 0x0DE0 (3552) -0x6BC8, 0x6BE8, 0x6BC8, 0x848B, 0x7C2A, 0x7C2A, 0x94ED, 0x7C6B, 0x63A8, 0x5306, 0x42A5, 0x4264, 0x42A5, 0x4AC6, 0x4AC6, 0x6BCA, // 0x0DF0 (3568) -0x84CE, 0xA5B2, 0x9D71, 0x9510, 0xB614, 0xE75A, 0xF7DE, 0xF7DE, 0xFFFD, 0xD737, 0xA5ED, 0x7D07, 0x6CC5, 0x6464, 0x5C43, 0x5C24, // 0x0E00 (3584) -0x6446, 0x6C47, 0x6C67, 0x7487, 0x7487, 0x7CA8, 0x7CA8, 0x7CA8, 0x7CA8, 0x7C68, 0x7C68, 0x7C69, 0x7C69, 0x7C69, 0x7C49, 0x7C29, // 0x0E10 (3600) -0x7446, 0x7446, 0x7C66, 0x7C67, 0x8468, 0x8488, 0x84C8, 0x8CE8, 0x8D29, 0x9529, 0x954A, 0x8D0A, 0x8D0A, 0xADD0, 0xF7FB, 0xFFFE, // 0x0E20 (3616) -0xFFFF, 0xFFFE, 0xEFBC, 0xE75A, 0xDF18, 0xDF18, 0xD6F6, 0xCE95, 0xB5B1, 0x9D0F, 0x94CE, 0x94EE, 0x94AD, 0x8C8C, 0x8CAC, 0x844A, // 0x0E30 (3632) -0x7409, 0x6BC7, 0x63A7, 0x5B66, 0x6BC7, 0x6366, 0x6BC8, 0x846A, 0x8CCC, 0x84AB, 0x742A, 0x6BC9, 0x6388, 0x63A9, 0x742B, 0x8CEE, // 0x0E40 (3648) -0x8CEF, 0x84AE, 0x848E, 0x9510, 0xADB2, 0xD6D8, 0xF7FE, 0xF7FF, 0xE79B, 0xBE94, 0x958B, 0x7CE6, 0x6CA5, 0x6464, 0x5C23, 0x6445, // 0x0E50 (3664) -0x6446, 0x6C47, 0x6C67, 0x7467, 0x7487, 0x7487, 0x7487, 0x7C67, 0x7C67, 0x7447, 0x7C47, 0x7C48, 0x7C48, 0x7C49, 0x7C29, 0x7408, // 0x0E60 (3680) -0x7C87, 0x7C87, 0x7C67, 0x7C67, 0x8488, 0x8488, 0x84C8, 0x8CE9, 0x8D29, 0x8D09, 0x8D0A, 0x8D0A, 0x9D6D, 0xD6F5, 0xFFFE, 0xFFFF, // 0x0E70 (3696) -0xF7FF, 0xF7DE, 0xEF7C, 0xDF19, 0xD6D7, 0xCEB6, 0xC674, 0xBE13, 0xBDF3, 0xB5B2, 0xB5D2, 0xA571, 0x94EE, 0x94CE, 0x8C8C, 0x846B, // 0x0E80 (3712) -0x73C8, 0x6366, 0x6B87, 0x6366, 0x5B25, 0x5304, 0x5B05, 0x6346, 0x6BA7, 0x73C8, 0x73E9, 0x7C4B, 0x7C4B, 0x7C4C, 0x7C4C, 0x7C2C, // 0x0E90 (3728) -0x848E, 0x7C4E, 0x8CEF, 0x9D30, 0xA571, 0xC696, 0xE77B, 0xE77C, 0xEFFC, 0xBEB4, 0x8D6B, 0x74C6, 0x6C84, 0x6443, 0x5C03, 0x6424, // 0x0EA0 (3744) -0x6425, 0x6C47, 0x6C46, 0x6C66, 0x6C46, 0x7446, 0x6C45, 0x7445, 0x7425, 0x6C26, 0x7426, 0x7427, 0x7407, 0x7408, 0x73E8, 0x6BC8, // 0x0EB0 (3760) -0x8CE9, 0x84C9, 0x84A8, 0x84A9, 0x8CA9, 0x8CA9, 0x8CC9, 0x8CE9, 0x8D2A, 0x8D2A, 0x8D0A, 0x952B, 0xADCF, 0xF7FA, 0xFFFF, 0xFFDF, // 0x0EC0 (3776) -0xF7BE, 0xEFBD, 0xE77B, 0xD6F9, 0xCE96, 0xC674, 0xC654, 0xC634, 0xBE13, 0xADB2, 0xA551, 0x9D30, 0x844C, 0x8CAD, 0x94CD, 0x7C0A, // 0x0ED0 (3792) -0x6346, 0x73C9, 0x6BA7, 0x6346, 0x6325, 0x6346, 0x6366, 0x5AE4, 0x52C4, 0x5AE5, 0x5B05, 0x6347, 0x6389, 0x6BAA, 0x6BCA, 0x740C, // 0x0EE0 (3808) -0x848F, 0x9511, 0x9D31, 0x9D50, 0xB5F3, 0xC696, 0xCED9, 0xE77C, 0xE7BB, 0xB673, 0x854A, 0x6CA5, 0x6463, 0x6443, 0x6423, 0x6404, // 0x0EF0 (3824) -0x6425, 0x6C26, 0x6C46, 0x6C46, 0x6C25, 0x6C25, 0x6C24, 0x6C04, 0x6C04, 0x6C05, 0x7406, 0x7406, 0x6BE7, 0x6BC7, 0x6BC7, 0x63A6, // 0x0F00 (3840) -0x952A, 0x950A, 0x8D09, 0x8D09, 0x8D29, 0x8D0A, 0x8D09, 0x8D09, 0x952A, 0x954A, 0x9529, 0x950B, 0xCEB6, 0xFFFF, 0xF7FE, 0xF7DE, // 0x0F10 (3856) -0xEFBD, 0xE79C, 0xE75B, 0xDF5A, 0xD718, 0xCEB6, 0xC654, 0xC654, 0xB5D2, 0xA570, 0x9D2F, 0x9D2F, 0x94EE, 0x8CCD, 0x848C, 0x6388, // 0x0F20 (3872) -0x6BA8, 0x73E9, 0x6367, 0x6367, 0x6346, 0x6B87, 0x5B06, 0x5AE5, 0x6326, 0x6326, 0x6347, 0x6368, 0x6388, 0x73CA, 0x740B, 0x7C4C, // 0x0F30 (3888) -0x848D, 0x94F0, 0xA592, 0xADF4, 0xBE36, 0xCED9, 0xDF3C, 0xE7BD, 0xD759, 0xAE10, 0x8D4A, 0x6C85, 0x6C65, 0x6445, 0x6424, 0x6425, // 0x0F40 (3904) -0x6406, 0x6407, 0x6C26, 0x6C45, 0x6C24, 0x6C23, 0x6403, 0x6C03, 0x6C04, 0x6C05, 0x6BE6, 0x63C6, 0x63A6, 0x63A5, 0x63A5, 0x6385, // 0x0F50 (3920) -0x952A, 0x950A, 0x9529, 0x954A, 0x954A, 0x952A, 0x9529, 0x954A, 0x9D6B, 0x952A, 0x950A, 0xB610, 0xEFBB, 0xFFFF, 0xF7FE, 0xEFDE, // 0x0F60 (3936) -0xE77C, 0xE79C, 0xE75B, 0xD6F8, 0xC696, 0xBE34, 0xB5D2, 0xAD91, 0xA570, 0xA54F, 0x9D2F, 0x9D2F, 0x94EE, 0x8CCD, 0x846C, 0x73EA, // 0x0F70 (3952) -0x73E9, 0x73E9, 0x6347, 0x5B26, 0x5B26, 0x6326, 0x6326, 0x5B05, 0x6347, 0x6347, 0x6347, 0x6348, 0x6388, 0x6BC9, 0x740B, 0x7C2C, // 0x0F80 (3968) -0x846D, 0x84AE, 0x8CF0, 0xA572, 0xB615, 0xCED9, 0xD73B, 0xE79D, 0xD738, 0xA5F0, 0x8D4A, 0x74A6, 0x6C86, 0x6C65, 0x6445, 0x6405, // 0x0F90 (3984) -0x6406, 0x6406, 0x6C26, 0x6425, 0x6403, 0x6402, 0x63E2, 0x63E3, 0x6C04, 0x6BE5, 0x63C5, 0x63A5, 0x6385, 0x5B65, 0x5B64, 0x5B64, // 0x0FA0 (4000) -0x952A, 0x952A, 0x952A, 0x9D4A, 0x954A, 0x952A, 0x952A, 0x954A, 0x9D4B, 0x9D4C, 0x9D4C, 0xD716, 0xFFFD, 0xF7FE, 0xF7DE, 0xEFBD, // 0x0FB0 (4016) -0xE79D, 0xDF5B, 0xD6D9, 0xCE97, 0xCE96, 0xCE96, 0xBE34, 0xADB2, 0x9D2F, 0x9D0F, 0x9D2F, 0x9D0F, 0x950F, 0x94EE, 0x846C, 0x740A, // 0x0FC0 (4032) -0x73EA, 0x73EA, 0x5B47, 0x52E6, 0x52C5, 0x5B06, 0x6B68, 0x6306, 0x5B06, 0x5AE6, 0x52E5, 0x5AE6, 0x6347, 0x6B89, 0x740B, 0x7C4C, // 0x0FD0 (4048) -0x84AE, 0x8CEF, 0x9510, 0x9D72, 0xADD4, 0xBE56, 0xCEFA, 0xEFFD, 0xCF37, 0x958D, 0x8509, 0x74C6, 0x74A6, 0x6C66, 0x6C46, 0x6426, // 0x0FE0 (4064) -0x6406, 0x63E5, 0x6405, 0x63E4, 0x63E3, 0x63E2, 0x63C2, 0x63E3, 0x63E4, 0x63C4, 0x63A4, 0x5B84, 0x5B64, 0x5B64, 0x5B43, 0x5342, // 0x0FF0 (4080) -0x950A, 0x950A, 0x9529, 0x954A, 0x954A, 0x8D0A, 0x8D09, 0x8D0A, 0x952B, 0x9D4C, 0xADD0, 0xF7DB, 0xFFFE, 0xF7BE, 0xEFBD, 0xEF9D, // 0x1000 (4096) -0xE77C, 0xE77B, 0xDF5A, 0xD6F8, 0xC696, 0xBE14, 0xB5D2, 0xAD91, 0x9D0F, 0x94EE, 0x94EF, 0x94EE, 0x94CE, 0x94EF, 0x8C8D, 0x7C2B, // 0x1010 (4112) -0x7C4B, 0x6BC9, 0x6348, 0x6347, 0x5B06, 0x5AE6, 0x6B88, 0x6B88, 0x6327, 0x5B06, 0x5B07, 0x5B07, 0x6348, 0x6368, 0x73EA, 0x7C4C, // 0x1020 (4128) -0x846D, 0x8CCF, 0x9D51, 0xA5B2, 0xADF4, 0xB636, 0xCED9, 0xEFDD, 0xD777, 0x8D2C, 0x7CC7, 0x74C6, 0x74A7, 0x6446, 0x6446, 0x6C26, // 0x1030 (4144) -0x63E6, 0x63E5, 0x63E4, 0x5BE4, 0x63C3, 0x63E3, 0x63C2, 0x63E3, 0x63C3, 0x63A3, 0x5B83, 0x5B63, 0x5B63, 0x5B63, 0x5342, 0x5322, // 0x1040 (4160) -0x94E9, 0x94E9, 0x9509, 0x952A, 0x952A, 0x8D0A, 0x84C9, 0x84C9, 0x950B, 0x950D, 0xC695, 0xFFFD, 0xF7FE, 0xEFBE, 0xEF9D, 0xEF9D, // 0x1050 (4176) -0xE77C, 0xDF5B, 0xDF19, 0xCEB7, 0xBE34, 0xB5D3, 0xADB2, 0xADB2, 0xA550, 0x94CE, 0x94CE, 0x8CAE, 0x846D, 0x846D, 0x846C, 0x7C4C, // 0x1060 (4192) -0x7C4C, 0x6BCA, 0x6BAA, 0x6B89, 0x6368, 0x6347, 0x6B89, 0x6BA9, 0x6B89, 0x6B68, 0x6B68, 0x6368, 0x6B89, 0x6BA9, 0x73EB, 0x7C2C, // 0x1070 (4208) -0x846D, 0x8CCF, 0x9510, 0x9D51, 0xA593, 0xB615, 0xCEFA, 0xF7FE, 0xDFD9, 0x8D4C, 0x7CC7, 0x7CE7, 0x74A7, 0x6C46, 0x6426, 0x6C27, // 0x1080 (4224) -0x6405, 0x5BE5, 0x63E4, 0x5BC3, 0x63C3, 0x63E3, 0x63E3, 0x63E4, 0x63C3, 0x5BA3, 0x5B83, 0x5B63, 0x5B63, 0x5B63, 0x5342, 0x5322, // 0x1090 (4240) -0x8CA9, 0x8CA9, 0x8D09, 0x952A, 0x954B, 0x8D2A, 0x8CEA, 0x84CA, 0x8CEA, 0xA58F, 0xEFBB, 0xF7FF, 0xF7DE, 0xEFBE, 0xE79D, 0xE77C, // 0x10A0 (4256) -0xD719, 0xCEB8, 0xBE56, 0xB614, 0xB613, 0xB613, 0xB5D2, 0xAD90, 0xA52F, 0x8C8D, 0x846C, 0x846D, 0x844C, 0x7C2C, 0x7C4C, 0x846C, // 0x10B0 (4272) -0x740B, 0x73EB, 0x7C0B, 0x6BA9, 0x6BA9, 0x73CA, 0x73CA, 0x6B89, 0x6BA9, 0x6B89, 0x6B89, 0x6B89, 0x6BCA, 0x73EB, 0x740B, 0x7C0C, // 0x10C0 (4288) -0x740B, 0x846D, 0x8CCE, 0x9510, 0x9D72, 0xB615, 0xCED9, 0xEFDD, 0xE7DA, 0x956D, 0x7D09, 0x7CE7, 0x74A7, 0x6C67, 0x6C46, 0x6426, // 0x10D0 (4304) -0x6405, 0x5BE5, 0x5BE4, 0x5BC4, 0x63E4, 0x6404, 0x63E4, 0x63E4, 0x63C3, 0x5BA3, 0x5B83, 0x5B62, 0x5B62, 0x5B62, 0x5342, 0x5321, // 0x10E0 (4320) -0x8488, 0x8CA9, 0x8CE9, 0x8D0A, 0x952B, 0x8D2B, 0x8D0B, 0x84EA, 0x84CA, 0xBE73, 0xFFFE, 0xF7FF, 0xEFBE, 0xE79D, 0xE77C, 0xD6F9, // 0x10F0 (4336) -0xCED8, 0xC697, 0xBE35, 0xADB2, 0x9D30, 0x94EE, 0x94CD, 0x8CCD, 0x9D0F, 0x9CEE, 0x8C8D, 0x844C, 0x7C4C, 0x73EB, 0x6BCA, 0x6BAA, // 0x1100 (4352) -0x740B, 0x740B, 0x73EA, 0x73CA, 0x7C0B, 0x7C0B, 0x73EA, 0x73CA, 0x6BCA, 0x6BCA, 0x6BAA, 0x6BAA, 0x6BCA, 0x73EB, 0x73EB, 0x73EB, // 0x1110 (4368) -0x73EB, 0x73EB, 0x742C, 0x848E, 0x9531, 0xB616, 0xCEDA, 0xE7BD, 0xDFBA, 0x958E, 0x8529, 0x7CE7, 0x7486, 0x6C66, 0x6446, 0x6425, // 0x1120 (4384) -0x5BE5, 0x5BC4, 0x5BE4, 0x5BC4, 0x63E4, 0x6405, 0x63E4, 0x63E4, 0x5BC3, 0x5BA3, 0x5B62, 0x5362, 0x5362, 0x5342, 0x5321, 0x4B21, // 0x1130 (4400) -0x8489, 0x8CA9, 0x8CE9, 0x8CEA, 0x8D0A, 0x8D2B, 0x8D2B, 0x850A, 0x84EB, 0xCEF5, 0xF7FE, 0xEFDF, 0xE79E, 0xE77D, 0xD73A, 0xCEB8, // 0x1140 (4416) -0xC697, 0xBE35, 0xB5D4, 0xADD3, 0xA571, 0x94EE, 0x844B, 0x7C0A, 0x7C0B, 0x94EE, 0x8CAD, 0x844C, 0x7C4C, 0x7C0B, 0x73CA, 0x6BCA, // 0x1150 (4432) -0x73CA, 0x73EA, 0x6B89, 0x6B89, 0x73EA, 0x7C0B, 0x73CA, 0x6389, 0x6B89, 0x6BCA, 0x6BCA, 0x6BAA, 0x6389, 0x6BCA, 0x6BCB, 0x73EB, // 0x1160 (4448) -0x73EB, 0x7C2C, 0x848D, 0x9510, 0x9D51, 0xADD5, 0xC699, 0xE79D, 0xDFBA, 0x958E, 0x854A, 0x7D07, 0x6C86, 0x6425, 0x6405, 0x6405, // 0x1170 (4464) -0x5BE4, 0x5BC4, 0x5BC4, 0x5BC4, 0x5BE4, 0x6405, 0x63E4, 0x63E4, 0x5BA3, 0x5B83, 0x5382, 0x5362, 0x5362, 0x5342, 0x5321, 0x4B21, // 0x1180 (4480) -0x8CAA, 0x8CCA, 0x8CEA, 0x8D0A, 0x8D0A, 0x8D0A, 0x8D0A, 0x7CAA, 0x9D71, 0xE79C, 0xE7DD, 0xE7BD, 0xE79D, 0xD71B, 0xC6D9, 0xC698, // 0x1190 (4496) -0xBE56, 0xB5F4, 0xADB3, 0x9D51, 0x9510, 0x94EF, 0x94EF, 0x846D, 0x7C2C, 0x7C2B, 0x848D, 0x846C, 0x7C2B, 0x740B, 0x7C0B, 0x6BCA, // 0x11A0 (4512) -0x6BCA, 0x6BCA, 0x6BA9, 0x6368, 0x6368, 0x6BA9, 0x6BC9, 0x6BA9, 0x6BA9, 0x6BCA, 0x6389, 0x6369, 0x6389, 0x6389, 0x6BCA, 0x6BEB, // 0x11B0 (4528) -0x7C4D, 0x7C4D, 0x84AF, 0x9511, 0xA592, 0xADF5, 0xB637, 0xCF3A, 0xDFBB, 0x9DF1, 0x852B, 0x74A7, 0x6446, 0x6405, 0x53A4, 0x5BE5, // 0x11C0 (4544) -0x53C4, 0x5BC4, 0x5BC4, 0x5BC3, 0x5BE4, 0x6405, 0x6405, 0x63E4, 0x5BA3, 0x5BA3, 0x5363, 0x5362, 0x5362, 0x5362, 0x5341, 0x4B00, // 0x11D0 (4560) -0x84AA, 0x84AA, 0x8CCA, 0x8CEA, 0x8D0A, 0x8D0A, 0x84EA, 0x7CAB, 0xBE96, 0xEFDD, 0xE7BD, 0xE79D, 0xD73B, 0xC6B9, 0xBE58, 0xB636, // 0x11E0 (4576) -0xB635, 0xADD3, 0xADD3, 0xA592, 0x94F0, 0x8CAE, 0x94CF, 0x8CCE, 0x7C2C, 0x740B, 0x7C2B, 0x7C2B, 0x7C2C, 0x740B, 0x73EB, 0x6B8A, // 0x11F0 (4592) -0x73EA, 0x73EA, 0x6BAA, 0x6B89, 0x6BA9, 0x6BCA, 0x6BA9, 0x6389, 0x6389, 0x6BA9, 0x6389, 0x6389, 0x6BAA, 0x6BAA, 0x6BEB, 0x740C, // 0x1200 (4608) -0x744D, 0x7C4D, 0x84AF, 0x8CD0, 0x8CF0, 0x9D52, 0xA5D5, 0xCEF9, 0xCF38, 0x850E, 0x74A9, 0x6C67, 0x5BE4, 0x53A4, 0x5384, 0x5364, // 0x1210 (4624) -0x5BC5, 0x5BC4, 0x5BC3, 0x5BE4, 0x63E5, 0x63E5, 0x63C3, 0x63C3, 0x5BA3, 0x5B83, 0x5363, 0x5363, 0x5342, 0x5341, 0x5341, 0x4B21, // 0x1220 (4640) -0x8469, 0x8469, 0x8489, 0x84A9, 0x84CA, 0x8CEA, 0x84EB, 0x954E, 0xD739, 0xE79D, 0xDF5C, 0xD73C, 0xCEDA, 0xBE98, 0xB657, 0xB636, // 0x1230 (4656) -0xADF4, 0x9D51, 0x9531, 0x9510, 0x94F0, 0x8CCF, 0x8CCE, 0x848D, 0x7C2B, 0x6BCA, 0x6BA9, 0x6389, 0x6BCA, 0x73CB, 0x6BAA, 0x6389, // 0x1240 (4672) -0x73EB, 0x6BCA, 0x6BAA, 0x6389, 0x6B89, 0x6BA9, 0x6BA9, 0x6BA9, 0x6369, 0x6B89, 0x6BAA, 0x6BAA, 0x6BCA, 0x6BAA, 0x6BCB, 0x740B, // 0x1250 (4688) -0x73EC, 0x742C, 0x7C6E, 0x848E, 0x84AE, 0x8D10, 0xA5B4, 0xCEF9, 0xCF38, 0x84ED, 0x6C68, 0x6406, 0x5384, 0x5344, 0x5B87, 0x5B67, // 0x1260 (4704) -0x5347, 0x5367, 0x5B67, 0x5B88, 0x63A9, 0x63A9, 0x63A8, 0x63A8, 0x6388, 0x6368, 0x5B48, 0x5B48, 0x5B47, 0x5306, 0x5B27, 0x5B68, // 0x1270 (4720) -0x7408, 0x7C28, 0x7C68, 0x7C68, 0x7C89, 0x84CA, 0x84EC, 0xADF2, 0xDF7B, 0xD73C, 0xD71C, 0xD73C, 0xC6B9, 0xBE78, 0xB636, 0xB615, // 0x1280 (4736) -0xA572, 0x94F0, 0x8CAF, 0x848E, 0x8CAE, 0x8CAF, 0x8CAE, 0x844D, 0x73EB, 0x6BAA, 0x6368, 0x5307, 0x5B48, 0x6BAA, 0x6B8A, 0x6B89, // 0x1290 (4752) -0x6BAA, 0x6BAA, 0x6389, 0x6369, 0x6348, 0x6348, 0x6B89, 0x73CA, 0x6369, 0x6B89, 0x6BAA, 0x6BAA, 0x6BEB, 0x6BAA, 0x6BAB, 0x6BCB, // 0x12A0 (4768) -0x63AA, 0x6BCB, 0x740C, 0x7C2D, 0x7C8E, 0x8D10, 0x9DB4, 0xC6F9, 0xCF38, 0x8D4E, 0x74A9, 0x63E6, 0x5B86, 0x3A83, 0x3223, 0x3A24, // 0x12B0 (4784) -0x4285, 0x4AE6, 0x4AE6, 0x4285, 0x4265, 0x4286, 0x4285, 0x4245, 0x4285, 0x4265, 0x4245, 0x4245, 0x4244, 0x3A03, 0x4225, 0x4266, // 0x12C0 (4800) -}; diff --git a/libraries/UTFT_Buttons/examples/UTFT_Buttons_Bitmap_Demo/monkey.c b/libraries/UTFT_Buttons/examples/UTFT_Buttons_Bitmap_Demo/monkey.c deleted file mode 100644 index 8374cd4..0000000 --- a/libraries/UTFT_Buttons/examples/UTFT_Buttons_Bitmap_Demo/monkey.c +++ /dev/null @@ -1,314 +0,0 @@ -// Generated by : ImageConverter 565 v1.2 -// Dimensions : 80x60 pixels -// Size : 9 600 Bytes - -#if defined(__AVR__) - #include -#elif defined(__PIC32MX__) - #define PROGMEM -#elif defined(__arm__) - #define PROGMEM -#endif - -const unsigned short monkey[0x12C0] PROGMEM ={ -0x858A, 0x858A, 0x85AA, 0x85AA, 0x8DAA, 0x8DAA, 0x8DAA, 0x8DAA, 0x8DAA, 0x8DCA, 0x8DCA, 0x8DAA, 0x8DAA, 0x95CA, 0x95CB, 0x8DAA, // 0x0010 (16) -0x8DAA, 0x8DAA, 0x8DAA, 0x95CB, 0x9DEB, 0x9E0B, 0x9DEB, 0x95EA, 0x95EA, 0x95EA, 0x95EA, 0x95EA, 0x95EA, 0x95EA, 0x95EA, 0x95EB, // 0x0020 (32) -0x95EA, 0x9DEA, 0x9E0B, 0xA62B, 0xA60A, 0x9DE9, 0x9DE9, 0x95E9, 0x95C9, 0x95E9, 0x960A, 0xA64B, 0xAE6B, 0xAE4B, 0xAE4B, 0xAE4B, // 0x0030 (48) -0xAE4B, 0xAE2A, 0xAE2A, 0xAE2A, 0xAE2A, 0xAE2A, 0xAE4B, 0xAE4B, 0xAE4B, 0xAE2B, 0xAE4B, 0xAE6B, 0xB66C, 0xB66B, 0xB66A, 0xAE6B, // 0x0040 (64) -0xB66B, 0xAE6B, 0xAE4B, 0xAE4B, 0xA62A, 0xA60A, 0xA62B, 0xAE4B, 0xAE6C, 0xAE6B, 0xAE2B, 0xA60A, 0xA60A, 0xAE4A, 0xAE6B, 0xB66B, // 0x0050 (80) -0x85AA, 0x85AA, 0x85AA, 0x85AA, 0x8DCA, 0x8DCA, 0x8DAA, 0x8DAA, 0x8DAA, 0x8DCA, 0x8DCA, 0x8DAA, 0x8DAA, 0x95CA, 0x95CB, 0x95CB, // 0x0060 (96) -0x95CA, 0x95CA, 0x95CA, 0x95EB, 0x9E0B, 0x9E0B, 0x9DEB, 0x95EA, 0x95CA, 0x95CA, 0x95C9, 0x95C9, 0x95CA, 0x95CA, 0x8DCA, 0x95CA, // 0x0070 (112) -0x95CA, 0x9DEA, 0xA62B, 0xA62B, 0xA60A, 0x9DE9, 0x95C8, 0x95C8, 0x8DA8, 0x95C8, 0x95E9, 0x9E2A, 0xA64B, 0xAE4B, 0xAE2A, 0xAE2A, // 0x0080 (128) -0xAE2A, 0xA60A, 0xAE2A, 0xAE4B, 0xAE4B, 0xAE4B, 0xAE4B, 0xAE6B, 0xAE4B, 0xAE2B, 0xAE4B, 0xAE4B, 0xB66B, 0xAE6B, 0xAE4A, 0xAE4A, // 0x0090 (144) -0xAE4A, 0xAE4A, 0xAE4A, 0xA62A, 0xA5E9, 0xA5EA, 0xA62A, 0xAE4B, 0xAE6C, 0xAE6B, 0xAE4B, 0xA62A, 0xA62A, 0xAE4B, 0xB66B, 0xB66B, // 0x00A0 (160) -0x85AB, 0x85AB, 0x85AA, 0x85AA, 0x85AA, 0x85AA, 0x85AA, 0x8DAA, 0x8DAA, 0x8DCA, 0x8DCA, 0x8DCA, 0x8DCA, 0x95CA, 0x95CA, 0x95EB, // 0x00B0 (176) -0x95EB, 0x95EB, 0x95EB, 0x9E0B, 0x9E0B, 0x9E0B, 0x9DEA, 0x95CA, 0x95EA, 0x95C9, 0x95C9, 0x8DC9, 0x8DC9, 0x8DC9, 0x8DC9, 0x95C9, // 0x00C0 (192) -0x95EA, 0x9DEA, 0xA62A, 0xA62A, 0xA62A, 0x9DE9, 0x9DC8, 0x95C8, 0x95C8, 0x9DE8, 0x9E29, 0xA64A, 0xAE4A, 0xAE4A, 0xAE4A, 0xAE2A, // 0x00D0 (208) -0xA60A, 0xA60A, 0xAE2A, 0xAE4B, 0xAE4B, 0xAE6B, 0xB66C, 0xB68C, 0xAE4B, 0xAE4B, 0xAE4B, 0xB64B, 0xB64A, 0xAE4A, 0xAE49, 0xAE4A, // 0x00E0 (224) -0xAE4A, 0xAE4A, 0xAE2A, 0xA60A, 0xA5E9, 0x9DE9, 0xA60A, 0xAE4B, 0xAE6B, 0xAE6B, 0xAE4B, 0xAE2B, 0xAE2A, 0xAE4B, 0xAE4B, 0xB66B, // 0x00F0 (240) -0x85CB, 0x85CB, 0x85CB, 0x85CB, 0x85AA, 0x858A, 0x858A, 0x858A, 0x8DAA, 0x8DCA, 0x8DCA, 0x8DCA, 0x8DCA, 0x8DCA, 0x95CA, 0x95CA, // 0x0100 (256) -0x95EA, 0x960B, 0x9E0B, 0x9E0B, 0x9E0B, 0x95EB, 0x95EA, 0x95CA, 0x95C9, 0x95C9, 0x95C9, 0x8DC9, 0x8DC9, 0x8DC9, 0x95C9, 0x95E9, // 0x0110 (272) -0x9E0A, 0xA60A, 0xA62A, 0xA62A, 0xA62A, 0x9DE9, 0x9DE9, 0x9DE9, 0x9DE8, 0x9E09, 0xA629, 0xAE49, 0xAE4A, 0xAE4A, 0xAE4A, 0xAE2A, // 0x0120 (288) -0xA60A, 0xA60A, 0xA62A, 0xAE4B, 0xAE6B, 0xB66B, 0xB68B, 0xB68B, 0xB66B, 0xB66B, 0xB66B, 0xB66A, 0xB64A, 0xB64A, 0xB649, 0xB66A, // 0x0130 (304) -0xB66A, 0xB66A, 0xAE4A, 0xAE2A, 0xA609, 0xA609, 0xAE2A, 0xAE6B, 0xAE6B, 0xAE6B, 0xAE4B, 0xAE2A, 0xA62A, 0xAE2A, 0xAE4B, 0xAE4B, // 0x0140 (320) -0x8DCB, 0x8DCB, 0x8DCB, 0x8DCB, 0x85AA, 0x858A, 0x8569, 0x8569, 0x85AA, 0x85AA, 0x8DCA, 0x8DCA, 0x8DCA, 0x8DCA, 0x8DCA, 0x95CA, // 0x0150 (336) -0x95EA, 0x9E0A, 0x9E0B, 0x9E0B, 0x9DEB, 0x95EB, 0x95CA, 0x8DA9, 0x8DA9, 0x95A9, 0x95C9, 0x95E9, 0x95E9, 0x95E9, 0x9E0A, 0x9E0A, // 0x0160 (352) -0xA62A, 0xAE2A, 0xAE4B, 0xAE4B, 0xA62A, 0xA60A, 0xA609, 0xA629, 0xA609, 0xA629, 0xAE49, 0xAE49, 0xAE49, 0xAE4A, 0xAE4A, 0xAE4A, // 0x0170 (368) -0xA62A, 0xA60A, 0xA62A, 0xAE4B, 0xAE6B, 0xB68B, 0xB68B, 0xB68B, 0xBE8B, 0xBE8B, 0xB66B, 0xB66B, 0xB66A, 0xB64A, 0xB66A, 0xB66A, // 0x0180 (384) -0xB66A, 0xB66A, 0xB64A, 0xAE4A, 0xAE2A, 0xAE2A, 0xAE4A, 0xAE6B, 0xAE6B, 0xAE4B, 0xAE2A, 0xA60A, 0xA5E9, 0xA60A, 0xAE2A, 0xAE4B, // 0x0190 (400) -0x8DCA, 0x8DCA, 0x8DCA, 0x8DCA, 0x85AA, 0x85AA, 0x858A, 0x858A, 0x85AA, 0x85AA, 0x8DAA, 0x8DCA, 0x8DCA, 0x8DAA, 0x8DC9, 0x95C9, // 0x01A0 (416) -0x95EA, 0x9E0A, 0x9E0B, 0x9E0B, 0x9DEB, 0x95EB, 0x95CA, 0x8DA9, 0x8DA9, 0x95C9, 0x9DEA, 0x9E0A, 0x9E0A, 0x9E0A, 0xA62A, 0xA62A, // 0x01B0 (432) -0xAE4A, 0xAE4A, 0xAE4A, 0xAE4B, 0xAE6B, 0xAE4B, 0xAE4A, 0xAE4A, 0xAE49, 0xAE49, 0xB649, 0xB649, 0xB669, 0xB66A, 0xB66A, 0xAE6A, // 0x01C0 (448) -0xAE2A, 0xA60A, 0xAE2A, 0xAE4A, 0xB66A, 0xB68B, 0xBE8B, 0xBE8B, 0xBE8B, 0xBE8B, 0xB68B, 0xB66B, 0xB66A, 0xB64A, 0xB66A, 0xB66A, // 0x01D0 (464) -0xB66B, 0xB66A, 0xB66A, 0xB66A, 0xAE4A, 0xAE4A, 0xAE4A, 0xAE4A, 0xAE6A, 0xAE4A, 0xAE2A, 0xA609, 0xA609, 0xAE2A, 0xAE4A, 0xAE6B, // 0x01E0 (480) -0x8DCA, 0x8DA9, 0x85A9, 0x85AA, 0x8DAA, 0x85AA, 0x85AA, 0x85AA, 0x85AA, 0x85AA, 0x85AA, 0x8DCA, 0x8DCA, 0x8DC9, 0x8DA9, 0x95C9, // 0x01F0 (496) -0x95E9, 0x9E0A, 0x9E0A, 0x9E0B, 0x9E0A, 0x9DEB, 0x9DEA, 0x95CA, 0x95EA, 0x9DEA, 0x9E0A, 0xA62A, 0xA62A, 0xA62A, 0xA62A, 0xAE4B, // 0x0200 (512) -0xAE4A, 0xAE4A, 0xAE4B, 0xAE4B, 0xAE6B, 0xAE4B, 0xAE4B, 0xAE4B, 0xB66A, 0xB64A, 0xB649, 0xB649, 0xB669, 0xAE4A, 0xAE4A, 0xAE6A, // 0x0210 (528) -0xAE4B, 0xAE4B, 0xAE4A, 0xB66A, 0xB66B, 0xBE8B, 0xBE8B, 0xBE8B, 0xBE8B, 0xBE8B, 0xBE8B, 0xB66B, 0xB66B, 0xB66B, 0xB66B, 0xB66B, // 0x0220 (544) -0xBE8B, 0xB68B, 0xB66B, 0xB66B, 0xB66A, 0xAE4A, 0xAE4A, 0xAE4A, 0xAE6A, 0xAE4A, 0xAE4A, 0xAE4A, 0xAE4A, 0xAE4A, 0xAE6A, 0xB66A, // 0x0230 (560) -0x8DC9, 0x8DA9, 0x8589, 0x8589, 0x85A9, 0x8DAA, 0x8DCA, 0x8DCA, 0x8DAA, 0x85AA, 0x8DAA, 0x8DCA, 0x8DCA, 0x8DC9, 0x8DA9, 0x95C9, // 0x0240 (576) -0x9DE9, 0x9E0A, 0xA62A, 0x9E0A, 0x9E0B, 0x9E0B, 0x9E0B, 0x9E0B, 0x9E0B, 0x9E0B, 0x9E0A, 0x9E0A, 0xA60A, 0xA62A, 0xA62A, 0xAE2A, // 0x0250 (592) -0xAE2A, 0xAE6B, 0xB66B, 0xAE4B, 0x9E0A, 0x9DEA, 0xA62A, 0xAE6B, 0xBEAB, 0xBE8A, 0xB66A, 0xBE6A, 0xB66A, 0xB66A, 0xAE6A, 0xAE6B, // 0x0260 (608) -0xB66B, 0xAE4B, 0xB66A, 0xB68B, 0xB68B, 0xBE8B, 0xBEAB, 0xBEAB, 0xBE8B, 0xBE8B, 0xBE8B, 0xBE8B, 0xB68B, 0xB66B, 0xB66B, 0xB66B, // 0x0270 (624) -0xB68B, 0xB66B, 0xB66A, 0xB66A, 0xB66A, 0xB66A, 0xAE6A, 0xB66A, 0xAE4A, 0xAE4A, 0xAE4A, 0xAE6A, 0xAE6A, 0xAE6A, 0xAE6A, 0xAE6A, // 0x0280 (640) -0x85E9, 0x85C8, 0x8589, 0x85A9, 0x8DAA, 0x8DCB, 0x95EB, 0x95EB, 0x95EA, 0x95EA, 0x95EA, 0x95EA, 0x95C9, 0x8DA9, 0x95AA, 0x95CA, // 0x0290 (656) -0x9E0A, 0x9E2A, 0x9E2A, 0xA609, 0xA60A, 0xA62B, 0xAE2C, 0xA60C, 0xA62C, 0x9DEC, 0x9E0B, 0x9E0A, 0x9E2A, 0xA609, 0xA62A, 0xAE2A, // 0x02A0 (672) -0xBE6B, 0xAE0C, 0x7CAA, 0x6C6C, 0x642C, 0x644D, 0x74AF, 0x6C6D, 0x6429, 0x8D8B, 0xBECC, 0xB66A, 0xBE4B, 0xBE4C, 0xB64B, 0xB66C, // 0x02B0 (688) -0xAE4B, 0xAE4B, 0xB68C, 0xB68C, 0xB68B, 0xB68B, 0xBE8B, 0xBEAC, 0xBE8C, 0xBE8C, 0xBE8C, 0xBE8C, 0xB68C, 0xB66C, 0xAE6C, 0xB68C, // 0x02C0 (704) -0xB68C, 0xB68C, 0xB68C, 0xB68C, 0xB68B, 0xB68B, 0xB66B, 0xB66A, 0xB66A, 0xAE4A, 0xAE49, 0xAE4A, 0xAE4A, 0xB66A, 0xB669, 0xAE49, // 0x02D0 (720) -0x85C9, 0x85A9, 0x8589, 0x85AA, 0x8DAB, 0x8DCB, 0x95EB, 0x95EB, 0x960A, 0x960A, 0x960A, 0x9609, 0x95E9, 0x95C9, 0x95C9, 0x95EA, // 0x02E0 (736) -0x960A, 0x9E0A, 0x9E2A, 0xA60A, 0xA62A, 0xA62B, 0xA62C, 0xA62D, 0xA62C, 0xA62C, 0x960B, 0x95EA, 0x9E2B, 0xA62B, 0xA60B, 0xAE4D, // 0x02F0 (752) -0x8D4B, 0x4305, 0x53A9, 0x748E, 0x746E, 0x6C0D, 0x7C8F, 0x9552, 0x7CAE, 0x640A, 0x7CCA, 0xAE8F, 0xAE6D, 0xAE6C, 0xA68B, 0xAE8C, // 0x0300 (768) -0xB68D, 0xB66D, 0xB66D, 0xB66D, 0xB68D, 0xBE8D, 0xBE8D, 0xB68C, 0xBE8D, 0xBE8D, 0xBE8D, 0xB68D, 0xB66C, 0xAE6C, 0xAE6D, 0xB66D, // 0x0310 (784) -0xB68D, 0xB68D, 0xB6AD, 0xB68C, 0xB68C, 0xB68C, 0xB66B, 0xB66B, 0xAE4A, 0xAE4A, 0xAE4A, 0xAE4A, 0xAE4A, 0xAE4A, 0xAE4A, 0xAE4A, // 0x0320 (800) -0x7DAA, 0x7D8A, 0x7D8A, 0x85AB, 0x85AB, 0x8DCC, 0x8DEC, 0x95EC, 0x960B, 0x960A, 0x9E0A, 0x9E2A, 0x9609, 0x95E9, 0x95E9, 0x95EA, // 0x0330 (816) -0x95EB, 0x9E0B, 0x9E0B, 0x9E0B, 0xA62B, 0xA64C, 0xA64D, 0xA64D, 0x9E0C, 0x9E0C, 0x95EB, 0x95EB, 0x9E2C, 0x9E0C, 0xB66F, 0x84CA, // 0x0340 (832) -0x3203, 0x6BAB, 0xAD71, 0xAD50, 0xB530, 0x940B, 0xACED, 0xAD0D, 0xAD2E, 0xBDB0, 0x846B, 0x8CCB, 0xB66E, 0xA64C, 0xAE6D, 0xAE8E, // 0x0350 (848) -0xAE4E, 0xAE6E, 0xB66E, 0xB66E, 0xB64D, 0xB66E, 0xBEAE, 0xBE8E, 0xBE8E, 0xBE8E, 0xB6AE, 0xB68E, 0xAE6E, 0xAE4D, 0xAE6D, 0xAE6D, // 0x0360 (864) -0xB68E, 0xB68E, 0xB68E, 0xB68D, 0xB68D, 0xB68C, 0xB66C, 0xB66B, 0xAE4A, 0xAE2A, 0xAE4A, 0xAE4A, 0xAE4A, 0xAE4B, 0xAE4B, 0xAE4B, // 0x0370 (880) -0x7DAA, 0x7D8A, 0x7D8A, 0x7D8B, 0x85AC, 0x85AC, 0x8DCC, 0x95EC, 0x95EC, 0x960B, 0x960B, 0x960B, 0x960B, 0x95EA, 0x95EA, 0x95EB, // 0x0380 (896) -0x95EC, 0x95EC, 0x9E0C, 0x9E2C, 0xA62C, 0xA62C, 0xA64D, 0x9E4D, 0x9E2D, 0x960C, 0x960C, 0x9E0C, 0x9E0D, 0xA62F, 0x954D, 0x29C0, // 0x0390 (912) -0x7368, 0xB50F, 0x9BE9, 0x9387, 0xA40B, 0xAC2B, 0x9BE8, 0x8345, 0x93A6, 0x8B86, 0xACCC, 0x83C8, 0x9D6C, 0xBE90, 0xBE50, 0xAE0F, // 0x03A0 (928) -0xB66F, 0xAE6F, 0xAE6F, 0xAE8F, 0xAE4E, 0xB66E, 0xB6AF, 0xB66E, 0xB68F, 0xB68F, 0xB6AF, 0xB68E, 0xAE6E, 0xAE6E, 0xA64E, 0xAE4E, // 0x03B0 (944) -0xB66F, 0xB66E, 0xB68E, 0xB68E, 0xB68E, 0xB68D, 0xB66D, 0xB66C, 0xAE4B, 0xAE2B, 0xAE2B, 0xAE4B, 0xAE4B, 0xAE4B, 0xAE4C, 0xAE4C, // 0x03C0 (960) -0x7D8A, 0x7D8B, 0x7DAB, 0x7DAB, 0x85AB, 0x85AC, 0x85CC, 0x8DCD, 0x8DED, 0x95ED, 0x95EC, 0x95EC, 0x95EC, 0x95EC, 0x95CC, 0x95CC, // 0x03D0 (976) -0x95EC, 0x95ED, 0x960D, 0x9E0C, 0x9E0C, 0x9E2D, 0x9E2D, 0x9E2D, 0x960D, 0x960D, 0x95EC, 0x95CC, 0x95CD, 0xAE31, 0x42C5, 0x2980, // 0x03E0 (992) -0x9C6C, 0x93C9, 0x8B87, 0x8347, 0x6AE7, 0x8BED, 0x7B4B, 0x62A9, 0x7308, 0x7B28, 0x6AE7, 0x7BCA, 0x42A5, 0x9D8F, 0xB671, 0xB670, // 0x03F0 (1008) -0xAE8F, 0xAE8F, 0xB68F, 0xAE8E, 0xAE6E, 0xAE6E, 0xB6AF, 0xB6AF, 0xB6AF, 0xB6AF, 0xB68F, 0xAE8F, 0xAE6E, 0xAE4E, 0xA64E, 0xA64E, // 0x0400 (1024) -0xAE4F, 0xAE6F, 0xB66F, 0xB68F, 0xB68E, 0xB68E, 0xB66D, 0xAE6D, 0xAE4C, 0xAE4C, 0xAE4C, 0xAE4C, 0xAE4C, 0xAE4C, 0xAE4C, 0xAE4C, // 0x0410 (1040) -0x7D8A, 0x7DAA, 0x7DAB, 0x7DAB, 0x7DAB, 0x7DAC, 0x85AC, 0x85CD, 0x8DEE, 0x8DEE, 0x8DED, 0x8DED, 0x8DCD, 0x8DCD, 0x8DCD, 0x8DCD, // 0x0420 (1056) -0x8DED, 0x95ED, 0x960D, 0x960D, 0x9E0D, 0x9E0D, 0x9E2D, 0x9E2E, 0x9E4E, 0x9E2E, 0x9E2E, 0x95AD, 0xA5EF, 0x84CC, 0x10E0, 0x5266, // 0x0430 (1072) -0x7B4A, 0x6A67, 0x6A87, 0x6AC7, 0x944E, 0x9470, 0x7BCF, 0x9CB2, 0x734C, 0x62A9, 0x5AA8, 0x7BAB, 0x4246, 0x4265, 0xAE10, 0xB690, // 0x0440 (1088) -0xB66F, 0xAE6F, 0xB68F, 0xAE6F, 0xAE6F, 0xB68F, 0xAE6E, 0xAE6F, 0xB68F, 0xB68F, 0xAE8F, 0xAE6E, 0xAE4E, 0xA64E, 0xAE4E, 0xAE4E, // 0x0450 (1104) -0xAE4E, 0xAE4E, 0xAE6E, 0xAE8F, 0xB68F, 0xB68F, 0xB66E, 0xAE4E, 0xAE4D, 0xAE4D, 0xAE4D, 0xAE4D, 0xA64D, 0xA64D, 0xA64D, 0xA64D, // 0x0460 (1120) -0x7DAA, 0x7DAA, 0x85AB, 0x85AB, 0x7DAB, 0x7DAB, 0x85AC, 0x85CD, 0x8DED, 0x8DED, 0x8DCD, 0x85CD, 0x8DCD, 0x8DCD, 0x8DCC, 0x8DCC, // 0x0470 (1136) -0x95EC, 0x95EC, 0x960C, 0x95ED, 0x95ED, 0x960D, 0x960E, 0x9E0E, 0x9E2F, 0x9E0E, 0x95EE, 0x95AD, 0xADF0, 0x5306, 0x10A0, 0x5AA8, // 0x0480 (1152) -0x7AEA, 0x6207, 0x72EA, 0x9C2F, 0x8BED, 0x942E, 0xA490, 0x8BCE, 0xAD13, 0xB534, 0x83AD, 0x942E, 0x62C9, 0x20A0, 0x5285, 0xAD90, // 0x0490 (1168) -0xBEB3, 0xB672, 0xB671, 0xAE50, 0xAE70, 0xB691, 0xAE4F, 0xB690, 0xAE4F, 0xAE4F, 0xAE6F, 0xAE6F, 0xAE4E, 0xAE4E, 0xAE6E, 0xAE6E, // 0x04A0 (1184) -0xAE4E, 0xAE6E, 0xAE6E, 0xAE6E, 0xB68F, 0xB68F, 0xB68F, 0xAE6E, 0xAE6E, 0xAE4E, 0xAE4E, 0xA64D, 0xA62D, 0xA64D, 0xA66D, 0xA64D, // 0x04B0 (1200) -0x7D8A, 0x85AB, 0x85AB, 0x85AB, 0x7DAB, 0x7DAB, 0x85CC, 0x85ED, 0x8DED, 0x8DED, 0x85CD, 0x85CC, 0x85AC, 0x85CB, 0x8DCB, 0x8DCB, // 0x04C0 (1216) -0x960C, 0x960C, 0x95EC, 0x95ED, 0x95ED, 0x95ED, 0x960E, 0x9E0F, 0x9E2F, 0xA650, 0x9DEE, 0x8D6D, 0x84CC, 0x2160, 0x10A0, 0x5AA7, // 0x04D0 (1232) -0x8BEB, 0x8BCB, 0xA46F, 0xB4F3, 0xAC71, 0xAC71, 0xAC71, 0xB4B3, 0xC598, 0xDE5B, 0xCDF9, 0x9C71, 0x6288, 0x3102, 0x3963, 0x4A26, // 0x04E0 (1248) -0x63AA, 0x84CD, 0xB653, 0xBEB4, 0xB673, 0xA5D0, 0x850C, 0x8D4D, 0xA5EF, 0xA62F, 0xAE6F, 0xAE6F, 0xAE6E, 0xAE6E, 0xAE6E, 0xB68F, // 0x04F0 (1264) -0xAE6E, 0xAE6E, 0xAE6E, 0xAE6E, 0xAE8F, 0xB68F, 0xB68F, 0xB66F, 0xAE6F, 0xAE4E, 0xA64E, 0xA64D, 0xA62D, 0xA64D, 0xA64D, 0xA64D, // 0x0500 (1280) -0x7D69, 0x7D8A, 0x85AB, 0x85AB, 0x85AB, 0x7D8C, 0x85AC, 0x85ED, 0x85ED, 0x85ED, 0x85CC, 0x85AC, 0x85AB, 0x85AB, 0x8DCB, 0x95EC, // 0x0510 (1296) -0x9E2B, 0x9E2B, 0xA64C, 0xA62B, 0x9E2C, 0x9E2C, 0x9E4D, 0xA66E, 0xAE8F, 0xA5EF, 0x94CE, 0x5AA8, 0x628A, 0x28E4, 0x18A1, 0x49E6, // 0x0520 (1312) -0x7B4B, 0x9BCD, 0xC490, 0xCCF2, 0xD553, 0xBCD1, 0x9BCE, 0xA3CE, 0xB410, 0xC4D3, 0xEEDA, 0xD658, 0x72CA, 0x30C3, 0x41A5, 0x5A68, // 0x0530 (1328) -0x5A48, 0x6248, 0x72EB, 0x9410, 0x8C12, 0x7391, 0x6B71, 0x6370, 0x73F1, 0x9D14, 0x9D31, 0xA58E, 0xB66E, 0xB6AD, 0xB6AE, 0xAEAE, // 0x0540 (1344) -0xAE8E, 0xAE6E, 0xAE8D, 0xAE6D, 0xB68F, 0xBE90, 0xB670, 0xB691, 0xB670, 0xAE50, 0xAE4E, 0xA64E, 0xA64D, 0xA64D, 0xA64E, 0xAE4E, // 0x0550 (1360) -0x7549, 0x7D6A, 0x85AB, 0x85AA, 0x85AB, 0x85AB, 0x85CC, 0x8DED, 0x8DED, 0x85CD, 0x85CC, 0x8DEC, 0x85AA, 0x8DCB, 0x960B, 0x960B, // 0x0560 (1376) -0xA64B, 0xAE6C, 0x9DAD, 0x8CEC, 0x7C4C, 0x6BCC, 0x742E, 0x94F2, 0x73ED, 0x52C8, 0x62C8, 0x49E4, 0x4162, 0x3901, 0x2880, 0x4983, // 0x0570 (1392) -0x72E8, 0xB48F, 0xC4D1, 0xD4F2, 0xCCD1, 0xD574, 0xE657, 0xDE17, 0xD5B5, 0xD595, 0xA470, 0xCD95, 0xA450, 0x28A1, 0x4164, 0x49E6, // 0x0580 (1408) -0x3984, 0x3143, 0x4185, 0x5207, 0x732B, 0x6AEA, 0x9450, 0x8C30, 0x8BF0, 0x9C93, 0xA4B4, 0xAD14, 0x94CF, 0x8CCD, 0x9DCE, 0xB6AF, // 0x0590 (1424) -0xB6AF, 0xAE4E, 0xB66E, 0xBEAE, 0xB66E, 0xB66E, 0xBEB0, 0xB690, 0xAE6F, 0xAE6F, 0xAE6E, 0xAE6E, 0xA64D, 0xA64D, 0xAE4E, 0xAE6E, // 0x05A0 (1440) -0x756B, 0x7D8B, 0x85AB, 0x85CA, 0x85AA, 0x85AA, 0x85CC, 0x8DED, 0x8DED, 0x8DCD, 0x8DEC, 0x8DEC, 0x8DCB, 0x8DCA, 0x9E2C, 0xA62D, // 0x05B0 (1456) -0x9DCD, 0x6BE8, 0x6349, 0x632C, 0x6B4F, 0x6B2F, 0x6B2F, 0x6B50, 0x4A2A, 0x2945, 0x3984, 0x5205, 0x5A25, 0x4962, 0x3081, 0x38C2, // 0x05C0 (1472) -0x8B29, 0xBCAF, 0x8AC9, 0x9B6C, 0xF698, 0xB4F2, 0x8C2F, 0x9470, 0xC5D5, 0xDE17, 0x5985, 0x6185, 0xAC50, 0x3902, 0x3943, 0x1060, // 0x05D0 (1488) -0x6348, 0x7BEB, 0x49E7, 0x7B2D, 0x6AAA, 0x93AE, 0x9BEE, 0x9C0E, 0xA450, 0x9C0F, 0x9BEF, 0xBD14, 0xACD3, 0x8BEF, 0x5AE9, 0x7C4B, // 0x05E0 (1504) -0xB630, 0xBE90, 0xB66E, 0xBE8E, 0xB68E, 0xB68E, 0xB68E, 0xB66E, 0xAE6E, 0xAE6E, 0xAE6E, 0xAE6D, 0xAE6D, 0xA64D, 0xAE4E, 0xAE6E, // 0x05F0 (1520) -0x7D8C, 0x7D8B, 0x7DAB, 0x85AA, 0x85AA, 0x85AA, 0x8DCC, 0x8DCC, 0x8DEC, 0x95EC, 0x8DCB, 0x8DAB, 0x9E0D, 0xA62F, 0x8D4D, 0x744B, // 0x0600 (1536) -0x6BAC, 0x632C, 0x73AE, 0x8C11, 0x83F0, 0x83D0, 0x6B2E, 0x736F, 0x736F, 0x4A29, 0x39A6, 0x20E2, 0x3963, 0x49C5, 0x30E3, 0x30C2, // 0x0610 (1552) -0x938B, 0xA3ED, 0x50E2, 0xCCD2, 0xBCF3, 0x9C10, 0xB514, 0xCDF7, 0xE6BA, 0xCDD6, 0x30A2, 0x6207, 0xB4D2, 0x28A1, 0x4144, 0x3122, // 0x0620 (1568) -0x6B69, 0x52A7, 0x5269, 0x51E9, 0x72AC, 0x93B0, 0x8B2E, 0x9BCF, 0xAC50, 0x7AE9, 0x8328, 0xC510, 0xB4AF, 0x9BEE, 0x72EB, 0x6ACA, // 0x0630 (1584) -0x7BEA, 0xADCF, 0xBE70, 0xBE8F, 0xBECF, 0xB66D, 0xB6AE, 0xB68E, 0xAE6E, 0xAE6D, 0xAE6D, 0xAE6D, 0xA64D, 0xA64D, 0xA64E, 0xAE4E, // 0x0640 (1600) -0x7D8B, 0x7D8B, 0x7D8B, 0x7D8B, 0x7D8A, 0x85AB, 0x8DCB, 0x95EC, 0x8DEB, 0x960C, 0x9E0C, 0x9E0D, 0x8D2D, 0x742B, 0x52E9, 0x6B4C, // 0x0650 (1616) -0x734D, 0x940F, 0x9C4F, 0x7B4B, 0x7B6C, 0x8BCF, 0x8BF1, 0x62AC, 0x7B90, 0x62AC, 0x4A29, 0x3165, 0x20E2, 0x3164, 0x28E1, 0x1820, // 0x0660 (1632) -0x7A88, 0xB40F, 0x6145, 0x7269, 0xDEB9, 0xF7DE, 0xE6DB, 0xCDB7, 0xDDF9, 0xEE5A, 0x726A, 0xCD56, 0xAC92, 0x28A1, 0x3964, 0x6B2B, // 0x0670 (1648) -0x6B6B, 0x10A1, 0x4A06, 0x3924, 0x72CB, 0x7AEC, 0x6AAB, 0x8B8E, 0x9C50, 0x2881, 0x3921, 0x7B08, 0x9BEA, 0xAC2C, 0x936B, 0x72A8, // 0x0680 (1664) -0x6B29, 0x7C0A, 0xC672, 0xC670, 0xBE8F, 0xB68E, 0xAE6D, 0xAE6E, 0xAE6D, 0xA64D, 0xA62D, 0xA62D, 0x9E2C, 0xA62D, 0x9E2E, 0xA62E, // 0x0690 (1680) -0x7D8B, 0x7D8B, 0x7D6B, 0x7D6B, 0x7D8B, 0x85AB, 0x8DEB, 0x8DEB, 0x9E2C, 0x9DEC, 0x9DEE, 0x8D0C, 0x6B89, 0x5AA8, 0x62CB, 0x72EC, // 0x06A0 (1696) -0x93AD, 0xB490, 0xB4CF, 0x6266, 0x49A4, 0x7B2C, 0xA472, 0x832D, 0x5A08, 0x93EF, 0x6ACA, 0x28C2, 0x20C2, 0x28E3, 0x20A1, 0x1860, // 0x06B0 (1712) -0x30E2, 0xAC71, 0xA38E, 0x7A89, 0xC554, 0xCDD6, 0xBCD3, 0xAC11, 0xB473, 0xDDF9, 0xEF1C, 0xE6DB, 0x732C, 0x28E1, 0x2922, 0x948E, // 0x06C0 (1728) -0x8C8E, 0x10C0, 0x3983, 0x49A4, 0x72CA, 0x59E7, 0x6AEA, 0x942F, 0x5228, 0x0800, 0x1820, 0x30C1, 0x8329, 0xB46D, 0xB46E, 0x82C9, // 0x06D0 (1744) -0x5A46, 0x62E8, 0x840A, 0xBE31, 0xBE70, 0xB68F, 0xB6AF, 0xAE8E, 0xAE6E, 0xA62D, 0x9E0C, 0x9DEC, 0x9DEC, 0x9E0D, 0x9E0D, 0x9E0E, // 0x06E0 (1760) -0x7DAB, 0x7D8B, 0x7D8B, 0x7D8C, 0x7DAC, 0x85CC, 0x8DEB, 0x8DEC, 0x95EC, 0x9DEE, 0x7C8B, 0x73AA, 0x736B, 0x62A9, 0x7B2B, 0x9BCD, // 0x06F0 (1776) -0xAC0E, 0x8309, 0x51A4, 0x2080, 0x2902, 0x8C0E, 0x83AC, 0x7B0A, 0x4143, 0x7B2A, 0x730A, 0x28A1, 0x2081, 0x20C2, 0x1061, 0x1861, // 0x0700 (1792) -0x1840, 0x51C6, 0xB470, 0xB44F, 0xBCD0, 0xBCF1, 0xBD12, 0xAC2F, 0xABF0, 0xCCF5, 0xDDF8, 0xC5B6, 0x4A26, 0x2982, 0x1980, 0x8D0D, // 0x0710 (1808) -0xB632, 0x29A1, 0x3141, 0x3922, 0x6227, 0x59E6, 0x6AA8, 0xA4B0, 0x4A06, 0x1020, 0x2081, 0x1840, 0x51E4, 0x832A, 0x938B, 0x7A88, // 0x0720 (1824) -0x4144, 0x5206, 0x4A24, 0x9D0D, 0xBE90, 0xB66F, 0xAE4E, 0xAE8E, 0xAE6E, 0xA62D, 0x9E0C, 0x9DEC, 0x9DEC, 0x9E0D, 0x960D, 0x960D, // 0x0730 (1840) -0x7D8B, 0x7D8B, 0x7D8B, 0x7D8C, 0x85CC, 0x85EC, 0x8E0B, 0x8E0C, 0x95EE, 0x850D, 0x5328, 0x7BAD, 0x62C9, 0x832B, 0xAC4D, 0xA42C, // 0x0740 (1856) -0x7AC7, 0x30C0, 0x1020, 0x0860, 0x29A4, 0x740D, 0x73AB, 0x62E8, 0x3102, 0x834C, 0x6A89, 0x20A1, 0x20C1, 0x2963, 0x0880, 0x0880, // 0x0750 (1872) -0x18C2, 0x18A1, 0x6A67, 0xC48F, 0xBC2D, 0xCCAF, 0xC4F0, 0xAC4E, 0x9BCE, 0xBC92, 0xDE18, 0x940F, 0x2942, 0x6BC9, 0x748A, 0x95AE, // 0x0760 (1888) -0xC6F5, 0x4AC7, 0x3143, 0x3923, 0x72A8, 0x7287, 0x6226, 0x8B8C, 0x72EA, 0x3944, 0x3122, 0x2080, 0x2080, 0x4963, 0x6226, 0x6226, // 0x0770 (1904) -0x51A6, 0x49A5, 0x39A2, 0x6B67, 0xC691, 0xB68F, 0xAE6E, 0xAE6E, 0xAE6E, 0xA62D, 0xA60C, 0x9E0C, 0x9E0C, 0x9E2C, 0x9E2C, 0x962C, // 0x0780 (1920) -0x7D8C, 0x7D8C, 0x75AA, 0x7DCB, 0x7DEB, 0x85EC, 0x8DED, 0x95CD, 0x9DAF, 0x6BA9, 0x4A44, 0x5205, 0x51C5, 0x82EA, 0xAC2E, 0x9BAC, // 0x0790 (1936) -0x49C5, 0x1020, 0x3081, 0x38A1, 0x38A1, 0x59C6, 0x836C, 0x6288, 0x3942, 0x8BAC, 0x49A7, 0x2061, 0x3142, 0x39A4, 0x18A0, 0x1080, // 0x07A0 (1952) -0x10A0, 0x1902, 0x2102, 0x6B2A, 0xA4B0, 0xBD12, 0xBCB1, 0xAC2F, 0xAC2F, 0xCD54, 0xA470, 0x41C5, 0x2141, 0x5305, 0x854B, 0xAE4F, // 0x07B0 (1968) -0xBE52, 0x6B89, 0x3982, 0x3983, 0x49E7, 0x6ACA, 0x3963, 0x5244, 0xAD6E, 0xB630, 0x8D6C, 0x9D6E, 0x5264, 0x5A24, 0x82E7, 0x7245, // 0x07C0 (1984) -0x61E5, 0x51A5, 0x3963, 0x5286, 0xB60F, 0xB68F, 0xAE6F, 0xAE6E, 0xA64D, 0xA64C, 0xA62C, 0xA62C, 0xA62C, 0xA62C, 0xA62D, 0x9E0D, // 0x07D0 (2000) -0x7D8B, 0x7D8B, 0x7DAB, 0x85CB, 0x85AB, 0x85CC, 0x8DCC, 0x95CD, 0x8D2D, 0x3203, 0x39C3, 0x3983, 0x49A4, 0x6226, 0x5183, 0x4142, // 0x07E0 (2016) -0x1880, 0x2100, 0x39C2, 0x6326, 0x844A, 0x8C4B, 0x736A, 0x5206, 0x51C5, 0x93AD, 0x4964, 0x28C1, 0x3182, 0x4A45, 0x3184, 0x18A1, // 0x07F0 (2032) -0x1840, 0x3103, 0x3102, 0x3102, 0x49E6, 0x730B, 0x940F, 0xACD2, 0xACF3, 0x7B6D, 0x49E6, 0x20C1, 0x18C0, 0x2142, 0x31C3, 0x4225, // 0x0800 (2048) -0x18E0, 0x20C0, 0x3962, 0x41A3, 0x3141, 0x4A05, 0x41C4, 0x6B08, 0xA56E, 0xB64F, 0xAE70, 0xBE91, 0x8C6A, 0x6285, 0x8B49, 0x7AA8, // 0x0810 (2064) -0x7267, 0x51C5, 0x4184, 0x3982, 0x9D2C, 0xBE8F, 0xAE4E, 0xAE6E, 0xA64D, 0xA62C, 0xA62B, 0xA60B, 0xA60B, 0xA62C, 0xA62C, 0xA62D, // 0x0820 (2080) -0x856B, 0x858B, 0x8DCB, 0x85CB, 0x85AB, 0x85CB, 0x8DAB, 0x95CE, 0x744B, 0x29C2, 0x2962, 0x3142, 0x3943, 0x5206, 0x30C0, 0x20A0, // 0x0830 (2096) -0x5B26, 0x7C89, 0x8D4A, 0xAE4D, 0xAE8D, 0x958B, 0x52E5, 0x4A05, 0x8BAD, 0x836C, 0x28C0, 0x3121, 0x4A45, 0x4225, 0x2923, 0x20A1, // 0x0840 (2112) -0x2860, 0x4122, 0x6225, 0x51C4, 0x4183, 0x3942, 0x3964, 0x5A89, 0x4A07, 0x41E6, 0x3163, 0x18A0, 0x18A0, 0x1860, 0x1000, 0x0800, // 0x0850 (2128) -0x28C3, 0x2081, 0x28E1, 0x3121, 0x3121, 0x5245, 0x62E7, 0x7BC9, 0xB60F, 0xAE2E, 0x9E0C, 0xAE4E, 0x94EB, 0x62C5, 0x7AE8, 0x7AC8, // 0x0860 (2144) -0x7267, 0x51A5, 0x4184, 0x3141, 0x6346, 0xBE70, 0xB66F, 0xAE4D, 0xAE4C, 0xA62B, 0xA62B, 0xA60B, 0xA62B, 0xA62B, 0xA62C, 0xA64C, // 0x0870 (2160) -0x8D8A, 0x858A, 0x8DAA, 0x85AA, 0x85AA, 0x85AB, 0x858B, 0x9DCE, 0x6BE9, 0x2982, 0x2942, 0x3963, 0x49C5, 0x49A5, 0x3922, 0x3181, // 0x0880 (2176) -0x8D6C, 0x9E4C, 0x9E4B, 0xA62A, 0x9E09, 0xA5CB, 0x9D4D, 0x6B49, 0x6AE9, 0x3963, 0x2101, 0x2963, 0x18C0, 0x18C1, 0x3102, 0x30C1, // 0x0890 (2192) -0x4141, 0x4982, 0x6A85, 0x7AE7, 0x8327, 0x8B69, 0x7266, 0x6225, 0x6226, 0x5A05, 0x4183, 0x28C0, 0x1880, 0x1040, 0x1881, 0x3124, // 0x08A0 (2208) -0x49C6, 0x49C5, 0x49A4, 0x3923, 0x3102, 0x28E0, 0x7388, 0xB5EF, 0xB64E, 0xAE4C, 0xAE6C, 0xAE4D, 0x94EB, 0x5264, 0x7B08, 0x7AA8, // 0x08B0 (2224) -0x6A67, 0x51C5, 0x4184, 0x3142, 0x3180, 0x9D4D, 0xBE8F, 0xAE4D, 0xAE6C, 0xAE4C, 0xA62B, 0xA60A, 0xA60A, 0xA62A, 0xA62B, 0xA62B, // 0x08C0 (2240) -0x85AA, 0x85AA, 0x7DAA, 0x7D8A, 0x7DAA, 0x85AB, 0x858B, 0x95AE, 0x4AC6, 0x20E1, 0x3122, 0x3943, 0x5A06, 0x49A5, 0x3922, 0x4203, // 0x08D0 (2256) -0x856A, 0x8DE9, 0x95E8, 0xA609, 0xADE9, 0xB62D, 0x94EC, 0x2982, 0x18C1, 0x20A1, 0x28E1, 0x1880, 0x0820, 0x1040, 0x20C1, 0x3962, // 0x08E0 (2272) -0x51C4, 0x51E3, 0x72A6, 0x7AA6, 0x82C6, 0xABCA, 0xABC9, 0x9327, 0x7A86, 0x6A25, 0x59C5, 0x3902, 0x2080, 0x20A1, 0x3963, 0x49E4, // 0x08F0 (2288) -0x49A4, 0x5206, 0x5A26, 0x51E6, 0x4143, 0x28E1, 0x20C0, 0x6B66, 0xBE8D, 0xB66B, 0xAE4B, 0xB68D, 0x9D4B, 0x4A62, 0x72E8, 0x72A8, // 0x0900 (2304) -0x6226, 0x5A06, 0x49C5, 0x3942, 0x2940, 0x6BA7, 0xBE4F, 0xAE2C, 0xAE4C, 0xA62B, 0xA62B, 0x9E0A, 0x9E0A, 0x9E0A, 0xA62A, 0xA62B, // 0x0910 (2320) -0x85A9, 0x85CA, 0x7D8A, 0x7569, 0x7D8A, 0x7D8A, 0x8DAC, 0x850B, 0x2161, 0x20E2, 0x3123, 0x4144, 0x59E5, 0x59E5, 0x4143, 0x4A24, // 0x0920 (2336) -0x954B, 0x9DEA, 0xAE29, 0xB64A, 0xB64C, 0x7C68, 0x1100, 0x18C1, 0x28E3, 0x30C2, 0x30A0, 0x38C1, 0x28C2, 0x20A1, 0x18A0, 0x2922, // 0x0930 (2352) -0x4964, 0x5184, 0x7AA8, 0x8B09, 0x82A7, 0x8AC7, 0x9B68, 0xA389, 0x82E7, 0x6A47, 0x59E6, 0x4124, 0x30A2, 0x28A2, 0x49A4, 0x72C9, // 0x0940 (2368) -0x72C9, 0x5A06, 0x5205, 0x5204, 0x51C5, 0x4143, 0x28E1, 0x1080, 0x5B25, 0xC6AF, 0xB68D, 0xB66C, 0xADCC, 0x5283, 0x6AA7, 0x6A68, // 0x0950 (2384) -0x6206, 0x5A06, 0x51C5, 0x4184, 0x3962, 0x4A43, 0xADCD, 0xB62C, 0xAE2B, 0xA60B, 0x9E0B, 0x9E0A, 0x9E0A, 0x9E0A, 0xA60A, 0x9E0A, // 0x0960 (2400) -0x85A9, 0x85AA, 0x7D6A, 0x756A, 0x7D8A, 0x858A, 0x95EC, 0x63A6, 0x10C0, 0x28E2, 0x3923, 0x49A5, 0x6246, 0x4183, 0x3962, 0x4A24, // 0x0970 (2416) -0x954B, 0xA5EA, 0xA609, 0xBE6C, 0x7C88, 0x10E0, 0x18E0, 0x3123, 0x4144, 0x4124, 0x4943, 0x4963, 0x3102, 0x2081, 0x20C1, 0x30E2, // 0x0980 (2432) -0x4143, 0x5184, 0x6A26, 0x8AC9, 0x9B6A, 0xA38A, 0x9B6A, 0x9B6A, 0x936A, 0x7AC9, 0x6227, 0x4985, 0x4164, 0x3903, 0x3903, 0x4985, // 0x0990 (2448) -0x6249, 0x6A89, 0x5A45, 0x49A3, 0x51C5, 0x4964, 0x3923, 0x28E1, 0x1060, 0x6327, 0xBE4F, 0xC690, 0x950C, 0x4202, 0x6266, 0x72A8, // 0x09A0 (2464) -0x6A47, 0x6226, 0x59E6, 0x5206, 0x41A5, 0x39C2, 0x94CA, 0xB64D, 0xA60B, 0xA60B, 0x9E0B, 0x9E0A, 0x9E0A, 0x9E0A, 0x9E0A, 0x9DEA, // 0x09B0 (2480) -0x85A9, 0x7D69, 0x7D49, 0x7D6A, 0x7D8B, 0x858B, 0x95CC, 0x3A61, 0x10C0, 0x2903, 0x28A1, 0x51A5, 0x5205, 0x4182, 0x3121, 0x52A5, // 0x09C0 (2496) -0x9DCC, 0x9E0A, 0xAE8B, 0x8D29, 0x1920, 0x20E0, 0x28E1, 0x3943, 0x4963, 0x4984, 0x49C5, 0x3963, 0x3964, 0x28C2, 0x3901, 0x4942, // 0x09D0 (2512) -0x4142, 0x6245, 0x6A65, 0x7AA6, 0x9369, 0xAC0C, 0x9B6A, 0xA3AB, 0x938B, 0x7AE8, 0x6A86, 0x51E4, 0x49C4, 0x51E5, 0x51E7, 0x51A6, // 0x09E0 (2528) -0x51A6, 0x6228, 0x6AC9, 0x5A46, 0x51A4, 0x4923, 0x4145, 0x3924, 0x2901, 0x2100, 0x39C2, 0x8C6C, 0x73C9, 0x2120, 0x5203, 0x5A04, // 0x09F0 (2544) -0x6A66, 0x6A88, 0x6A88, 0x6A89, 0x6289, 0x41C3, 0x6BA5, 0xAE0C, 0xA5EB, 0x9DEB, 0x9DEB, 0x9E0A, 0x9E0A, 0x9E0A, 0x9DEA, 0x9DEA, // 0x0A00 (2560) -0x7588, 0x7D68, 0x8569, 0x8569, 0x85A8, 0x95CB, 0x8CAB, 0x2120, 0x2101, 0x20C0, 0x3923, 0x5A06, 0x59E6, 0x49C4, 0x3101, 0x4A43, // 0x0A10 (2576) -0x9DCC, 0xA64D, 0x9D8E, 0x2961, 0x18A0, 0x28E1, 0x3922, 0x49C5, 0x4984, 0x51E6, 0x4963, 0x4122, 0x4122, 0x3901, 0x49A4, 0x4143, // 0x0A20 (2592) -0x4983, 0x59E5, 0x72A8, 0x7287, 0x8309, 0x938B, 0x8B4A, 0x8B2A, 0x8329, 0x7AC9, 0x72C9, 0x6A67, 0x51A5, 0x5A06, 0x6AC9, 0x6AC9, // 0x0A30 (2608) -0x6AC9, 0x6AA9, 0x7AEA, 0x72EA, 0x3943, 0x3943, 0x3943, 0x4184, 0x4984, 0x4985, 0x28E3, 0x2923, 0x39C5, 0x1880, 0x49C4, 0x6205, // 0x0A40 (2624) -0x72A8, 0x830A, 0x72C9, 0x6226, 0x5205, 0x5226, 0x4A04, 0xA52E, 0x9E0C, 0x95EA, 0x960A, 0x9E0A, 0x9E09, 0x9E0A, 0x9DE9, 0x9DC9, // 0x0A50 (2640) -0x6D48, 0x7549, 0x7D49, 0x8569, 0x8589, 0x95CC, 0x7409, 0x18A0, 0x20E0, 0x28E1, 0x49A5, 0x5A07, 0x51C5, 0x51C5, 0x3963, 0x4203, // 0x0A60 (2656) -0x9DCD, 0xA62F, 0x42A4, 0x0840, 0x2902, 0x28C1, 0x49C5, 0x49C5, 0x49C5, 0x51C5, 0x4143, 0x51A4, 0x51A4, 0x51A4, 0x5A05, 0x51A4, // 0x0A70 (2672) -0x4163, 0x51A4, 0x6A87, 0x72A8, 0x832A, 0x8309, 0x72A8, 0x7AC8, 0x7AC8, 0x7AC9, 0x6A88, 0x6A68, 0x51E6, 0x5A27, 0x6AA9, 0x6AA9, // 0x0A80 (2688) -0x7B0A, 0x832B, 0x834C, 0x6A68, 0x3102, 0x3943, 0x4184, 0x51E5, 0x51E5, 0x49A5, 0x3964, 0x3123, 0x18A1, 0x1020, 0x3922, 0x6226, // 0x0A90 (2704) -0x7288, 0x7AC9, 0x72A8, 0x6247, 0x5205, 0x5205, 0x49C4, 0x7BEA, 0x9DEC, 0x95CA, 0x8DC9, 0x95E9, 0x9E09, 0x9E0A, 0x9DE9, 0x95C9, // 0x0AA0 (2720) -0x6508, 0x6D49, 0x7529, 0x858B, 0x85AA, 0x95ED, 0x5B27, 0x18A0, 0x2901, 0x3123, 0x4164, 0x4965, 0x49A5, 0x51C5, 0x3963, 0x4224, // 0x0AB0 (2736) -0xADF0, 0x748A, 0x0080, 0x18A0, 0x2081, 0x3123, 0x4184, 0x49A4, 0x4984, 0x4184, 0x4984, 0x6206, 0x6226, 0x7287, 0x6A67, 0x6226, // 0x0AC0 (2752) -0x4963, 0x4983, 0x5A06, 0x6A88, 0x832A, 0x72A8, 0x5A06, 0x6226, 0x830A, 0x7B0A, 0x6A88, 0x6268, 0x5A47, 0x6247, 0x6268, 0x6268, // 0x0AD0 (2768) -0x834B, 0x93CD, 0x9C0E, 0x51C5, 0x3923, 0x4984, 0x5206, 0x6247, 0x72A8, 0x72A9, 0x49A5, 0x3964, 0x20C2, 0x1860, 0x30E1, 0x59E5, // 0x0AE0 (2784) -0x6226, 0x6A68, 0x6AA8, 0x6267, 0x5A46, 0x5205, 0x49E4, 0x6B68, 0x9DCC, 0x8DCA, 0x8D88, 0x8DA9, 0x95E9, 0x95E9, 0x95C9, 0x95A9, // 0x0AF0 (2800) -0x5CE8, 0x6509, 0x6D2A, 0x7D8C, 0x7DAB, 0x8DAD, 0x4264, 0x2101, 0x28E1, 0x3943, 0x4185, 0x51C6, 0x6247, 0x5A06, 0x3943, 0x3983, // 0x0B00 (2816) -0x73EB, 0x1920, 0x10A0, 0x2923, 0x3123, 0x3102, 0x3102, 0x3122, 0x28C1, 0x3943, 0x5A06, 0x6226, 0x72A7, 0x8309, 0x6A67, 0x6A47, // 0x0B10 (2832) -0x51C4, 0x51A4, 0x59E6, 0x6AA8, 0x834B, 0x72C9, 0x51C5, 0x51C5, 0x72CA, 0x6A88, 0x6247, 0x5A27, 0x6248, 0x6248, 0x5A27, 0x6248, // 0x0B20 (2848) -0x832A, 0x9C0E, 0x9C2F, 0x30E2, 0x4184, 0x51C5, 0x5A26, 0x6A67, 0x7AEA, 0x7AEA, 0x6A89, 0x49C6, 0x3944, 0x20A1, 0x2060, 0x51C5, // 0x0B30 (2864) -0x51C4, 0x6206, 0x5A26, 0x59E6, 0x5A47, 0x5A47, 0x5A46, 0x5AC6, 0x956B, 0x8DAA, 0x8D69, 0x8D68, 0x8D88, 0x8DA9, 0x8D89, 0x8D89, // 0x0B40 (2880) -0x5D09, 0x6509, 0x6D2B, 0x756C, 0x758B, 0x7D0B, 0x31C3, 0x3122, 0x3102, 0x3923, 0x49C5, 0x51C5, 0x49C5, 0x51C5, 0x4984, 0x3102, // 0x0B50 (2896) -0x18E0, 0x0040, 0x20C2, 0x3944, 0x4164, 0x3102, 0x28E1, 0x3122, 0x20A1, 0x2080, 0x51E5, 0x7AE9, 0x7AE8, 0x8B49, 0x8309, 0x59E5, // 0x0B60 (2912) -0x51A4, 0x49A4, 0x51E6, 0x6A88, 0x72EA, 0x6268, 0x4144, 0x4985, 0x6268, 0x51E6, 0x5A27, 0x5207, 0x6248, 0x6247, 0x5A27, 0x6A68, // 0x0B70 (2928) -0x832B, 0xA44F, 0x6AC9, 0x1860, 0x4184, 0x5A06, 0x6226, 0x6A67, 0x7AC8, 0x7AE9, 0x7B0A, 0x6248, 0x4164, 0x2081, 0x2080, 0x49C4, // 0x0B80 (2944) -0x51C5, 0x6206, 0x5A26, 0x51A4, 0x51C5, 0x5A47, 0x6287, 0x4203, 0x7CA9, 0x8DAA, 0x8D69, 0x8549, 0x8548, 0x8568, 0x8D69, 0x8D69, // 0x0B90 (2960) -0x5D08, 0x6509, 0x6D4B, 0x6D4B, 0x758B, 0x6CAA, 0x2961, 0x3143, 0x3103, 0x4164, 0x49C5, 0x51E5, 0x51E5, 0x5206, 0x49A5, 0x30E2, // 0x0BA0 (2976) -0x0820, 0x18A1, 0x3124, 0x4165, 0x3963, 0x3102, 0x4184, 0x3123, 0x20A1, 0x28C2, 0x3102, 0x7AE9, 0x9BEB, 0x9BCB, 0x938B, 0x6A46, // 0x0BB0 (2992) -0x51A4, 0x49A4, 0x5A06, 0x6A88, 0x72EA, 0x6268, 0x3944, 0x4185, 0x6AAA, 0x5207, 0x5A27, 0x5A27, 0x6A89, 0x6A88, 0x6247, 0x72A9, // 0x0BC0 (3008) -0x8B8C, 0x9BED, 0x2902, 0x1040, 0x2902, 0x51E6, 0x6246, 0x6246, 0x7287, 0x8329, 0x72C9, 0x6A68, 0x49A5, 0x28A1, 0x28A1, 0x49E5, // 0x0BD0 (3024) -0x6226, 0x5A05, 0x6246, 0x59E6, 0x4984, 0x51E6, 0x6288, 0x41E3, 0x6C07, 0x8D6A, 0x8549, 0x8528, 0x7D28, 0x8528, 0x8549, 0x8549, // 0x0BE0 (3040) -0x5D08, 0x6509, 0x6D4A, 0x6D4B, 0x758B, 0x6469, 0x2141, 0x3122, 0x3923, 0x4164, 0x4184, 0x49C4, 0x5206, 0x5206, 0x4164, 0x3103, // 0x0BF0 (3056) -0x1860, 0x28C2, 0x4185, 0x51C5, 0x4142, 0x4142, 0x5206, 0x3143, 0x28E2, 0x28C2, 0x1840, 0x6226, 0x9BEC, 0xA3EB, 0xA3EC, 0x7AA8, // 0x0C00 (3072) -0x51A4, 0x51A5, 0x6A88, 0x6A68, 0x6AC9, 0x6268, 0x4164, 0x3964, 0x6AAA, 0x6268, 0x5A27, 0x6268, 0x72C9, 0x72A9, 0x6A68, 0x832A, // 0x0C10 (3088) -0x93AC, 0x6AA8, 0x0800, 0x1060, 0x1860, 0x3943, 0x59E6, 0x59C4, 0x6226, 0x7AC8, 0x7AE9, 0x6247, 0x51C5, 0x3923, 0x1840, 0x5206, // 0x0C20 (3104) -0x6A87, 0x6226, 0x6226, 0x5A06, 0x49A5, 0x51C5, 0x5A47, 0x41E3, 0x6BE7, 0x8D4A, 0x8509, 0x8508, 0x7D08, 0x7D08, 0x8528, 0x7D28, // 0x0C30 (3120) -0x6548, 0x6D49, 0x6D6A, 0x6D6B, 0x758B, 0x6469, 0x2961, 0x3922, 0x4143, 0x4984, 0x49A4, 0x51E5, 0x49E5, 0x49C5, 0x4964, 0x3903, // 0x0C40 (3136) -0x2061, 0x3944, 0x49A5, 0x51A5, 0x4163, 0x49A4, 0x49E5, 0x4185, 0x28E3, 0x20C2, 0x1820, 0x3921, 0x8B49, 0x9BCB, 0xA40C, 0x7AA7, // 0x0C50 (3152) -0x51C4, 0x6226, 0x834B, 0x6A88, 0x6AA9, 0x6248, 0x4185, 0x3964, 0x5A68, 0x6AAA, 0x6268, 0x72C9, 0x72E9, 0x6A88, 0x6A67, 0x8B6B, // 0x0C60 (3168) -0x93AD, 0x4163, 0x0840, 0x1080, 0x1040, 0x28C1, 0x51A5, 0x5183, 0x59E4, 0x6A66, 0x72C8, 0x6A67, 0x59E6, 0x4143, 0x20A0, 0x49C4, // 0x0C70 (3184) -0x6A87, 0x72C9, 0x6AA8, 0x59E6, 0x49A5, 0x51C5, 0x51E6, 0x49E4, 0x7428, 0x958B, 0x8509, 0x8509, 0x7D28, 0x7D28, 0x8529, 0x7D28, // 0x0C80 (3200) -0x6D69, 0x7569, 0x7569, 0x7D69, 0x7DAA, 0x6C68, 0x2141, 0x3944, 0x4184, 0x49C5, 0x4984, 0x4984, 0x51C5, 0x51E6, 0x49A4, 0x3963, // 0x0C90 (3216) -0x20A1, 0x28E2, 0x49A5, 0x4964, 0x4964, 0x5A06, 0x49A5, 0x3964, 0x2102, 0x1080, 0x1060, 0x1860, 0x6267, 0x93EC, 0x938A, 0x7286, // 0x0CA0 (3232) -0x59E4, 0x7AA8, 0x832A, 0x72A9, 0x832B, 0x6228, 0x4185, 0x4164, 0x5A48, 0x6AAA, 0x6A88, 0x7AEA, 0x7B0A, 0x8B6B, 0x938B, 0xA40E, // 0x0CB0 (3248) -0x8B6C, 0x30C2, 0x1860, 0x20C1, 0x1080, 0x1080, 0x41C2, 0x5A44, 0x51A4, 0x59A5, 0x6206, 0x5A06, 0x51C4, 0x4963, 0x30C1, 0x6226, // 0x0CC0 (3264) -0x7AC9, 0x7AE9, 0x6A68, 0x51C5, 0x4984, 0x51C5, 0x51E5, 0x41E3, 0x6BC6, 0x956A, 0x854A, 0x8529, 0x8528, 0x7D28, 0x8548, 0x7D48, // 0x0CD0 (3280) -0x7569, 0x7D8A, 0x7D89, 0x7D69, 0x85AA, 0x6C68, 0x2961, 0x3984, 0x4184, 0x4164, 0x3942, 0x4984, 0x51E5, 0x51E5, 0x49C5, 0x49C5, // 0x0CE0 (3296) -0x28E2, 0x28E2, 0x4164, 0x4964, 0x59E6, 0x51C5, 0x3963, 0x2902, 0x18C1, 0x1060, 0x1040, 0x1040, 0x4163, 0x836A, 0x8B6A, 0x7AC8, // 0x0CF0 (3312) -0x9BEC, 0xB490, 0x834A, 0x832B, 0x8B8C, 0x6248, 0x49A5, 0x4164, 0x5207, 0x6AA9, 0x7B2B, 0x72C9, 0x7B0A, 0xBCD1, 0xC552, 0xB48F, // 0x0D00 (3328) -0x8B8C, 0x30E1, 0x20C0, 0x2922, 0x20C2, 0x0820, 0x28C1, 0x6267, 0x6A87, 0x59E4, 0x4983, 0x5183, 0x4162, 0x4142, 0x4122, 0x6206, // 0x0D10 (3344) -0x8309, 0x6A87, 0x59C5, 0x51A4, 0x4963, 0x51A4, 0x5A26, 0x41E3, 0x6385, 0x958B, 0x8D8A, 0x8D69, 0x8549, 0x8549, 0x8569, 0x7D48, // 0x0D20 (3360) -0x7D89, 0x85AA, 0x8589, 0x7D69, 0x85AA, 0x6C48, 0x2961, 0x4185, 0x51E5, 0x49A4, 0x4983, 0x51A4, 0x59E5, 0x59E6, 0x5A06, 0x51E6, // 0x0D30 (3376) -0x3102, 0x28C1, 0x4163, 0x5A06, 0x6227, 0x4984, 0x3102, 0x20E2, 0x1080, 0x1060, 0x20A1, 0x2060, 0x30C1, 0x72A8, 0x8B4A, 0x8309, // 0x0D40 (3392) -0xBCD0, 0xCD53, 0x93CC, 0x93CD, 0x9C2E, 0x6268, 0x5206, 0x4164, 0x5A27, 0x72EA, 0x834B, 0x72A9, 0x834B, 0xB490, 0xC511, 0xB490, // 0x0D50 (3408) -0x8B6B, 0x38E1, 0x28E0, 0x2901, 0x20C2, 0x1042, 0x1020, 0x3944, 0x5A46, 0x6A87, 0x6245, 0x59E4, 0x4983, 0x5184, 0x4984, 0x4123, // 0x0D60 (3424) -0x7288, 0x7288, 0x59E5, 0x51A4, 0x4963, 0x4983, 0x5205, 0x4203, 0x6385, 0x95AB, 0x8D8A, 0x8D8A, 0x8D69, 0x8D89, 0x8D69, 0x8548, // 0x0D70 (3440) -0x8589, 0x85AA, 0x8568, 0x7D48, 0x858A, 0x6406, 0x2961, 0x49A5, 0x49A5, 0x4163, 0x4163, 0x49A4, 0x5A26, 0x6247, 0x6A88, 0x5A27, // 0x0D80 (3456) -0x3122, 0x28E1, 0x51C5, 0x6A88, 0x51C5, 0x3103, 0x20C1, 0x1880, 0x0840, 0x1880, 0x3964, 0x30E2, 0x38E1, 0x6226, 0x8329, 0x8B4A, // 0x0D90 (3472) -0x9C0D, 0xAC8F, 0x9C0D, 0xA44F, 0xA44F, 0x72EA, 0x5A27, 0x49A5, 0x5A07, 0x7B2B, 0x7B2B, 0x72A9, 0x8B6B, 0xA40E, 0xAC4E, 0xA42E, // 0x0DA0 (3488) -0x832A, 0x3902, 0x3941, 0x3142, 0x20A2, 0x1021, 0x1041, 0x1860, 0x3123, 0x49A5, 0x5205, 0x6266, 0x6226, 0x51A4, 0x51A5, 0x59E6, // 0x0DB0 (3504) -0x59C5, 0x6A46, 0x59E5, 0x49A3, 0x4963, 0x4963, 0x49A4, 0x39C2, 0x6BE7, 0x9DCC, 0x8D89, 0x8DA9, 0x8D89, 0x8D89, 0x8D88, 0x8D68, // 0x0DC0 (3520) -0x85A9, 0x8DAA, 0x8568, 0x8548, 0x858A, 0x6427, 0x2961, 0x49A5, 0x4164, 0x4163, 0x51A4, 0x51C5, 0x49A4, 0x4984, 0x5A26, 0x5A47, // 0x0DD0 (3536) -0x3943, 0x28C1, 0x49A5, 0x49A5, 0x3123, 0x20A1, 0x18A1, 0x1060, 0x1060, 0x20C2, 0x5206, 0x4984, 0x4943, 0x6205, 0x7B09, 0x8B8B, // 0x0DE0 (3552) -0x8B6B, 0x93CC, 0x8BAC, 0xAC6F, 0xA44F, 0x7B2B, 0x51E6, 0x6247, 0x6248, 0x6AA9, 0x7B0A, 0x7AEA, 0x834B, 0xA42E, 0xA40E, 0x8B8C, // 0x0DF0 (3568) -0x72C9, 0x3923, 0x3923, 0x3102, 0x1880, 0x0820, 0x2962, 0x20E0, 0x18A0, 0x28E2, 0x3122, 0x3923, 0x4163, 0x4983, 0x4964, 0x5185, // 0x0E00 (3584) -0x51A5, 0x59C5, 0x6246, 0x6246, 0x51C4, 0x4963, 0x4183, 0x41C3, 0x6BC8, 0x9DAC, 0x95AA, 0x95C9, 0x95A9, 0x95A9, 0x8D89, 0x8D88, // 0x0E10 (3600) -0x85A9, 0x85A9, 0x8568, 0x8569, 0x858A, 0x6C47, 0x2961, 0x4184, 0x4164, 0x4163, 0x4983, 0x4963, 0x4983, 0x51C5, 0x5A46, 0x5A06, // 0x0E20 (3616) -0x3943, 0x28C1, 0x30E2, 0x28A1, 0x20C1, 0x18A1, 0x1080, 0x1080, 0x0840, 0x20C1, 0x5206, 0x59E5, 0x51A4, 0x6226, 0x7AE8, 0x8BAB, // 0x0E30 (3632) -0x836A, 0x8B6B, 0x832A, 0x93CD, 0x9C2E, 0x72C9, 0x5206, 0x7B0B, 0x6A89, 0x5A47, 0x6AA9, 0x7AEA, 0x7B0A, 0x93CD, 0x834A, 0x7B0A, // 0x0E40 (3648) -0x6A89, 0x4985, 0x3103, 0x20A1, 0x1880, 0x0860, 0x5B46, 0x6BC8, 0x3A03, 0x2121, 0x20E0, 0x3101, 0x3122, 0x3922, 0x3922, 0x4164, // 0x0E50 (3664) -0x4984, 0x51A4, 0x5A25, 0x5A25, 0x4984, 0x3902, 0x30E1, 0x3982, 0x5B26, 0x954C, 0x9E0B, 0x9DEA, 0x95C9, 0x95C9, 0x95A9, 0x8D89, // 0x0E60 (3680) -0x8589, 0x8589, 0x8568, 0x8569, 0x8569, 0x7488, 0x2982, 0x3964, 0x4164, 0x49A4, 0x49A4, 0x4163, 0x4183, 0x5206, 0x5A46, 0x51C5, // 0x0E70 (3696) -0x3102, 0x30E2, 0x28C1, 0x20C2, 0x20C1, 0x18C1, 0x0860, 0x0860, 0x0840, 0x20A0, 0x49C5, 0x59E5, 0x51A4, 0x6246, 0x72C8, 0x834A, // 0x0E80 (3712) -0x7AE8, 0x7AE9, 0x832A, 0x7B0A, 0x93CD, 0x6AA8, 0x72C9, 0x7B2B, 0x6268, 0x6A89, 0x6A88, 0x6A88, 0x7AEA, 0x834B, 0x72A8, 0x72A9, // 0x0E90 (3728) -0x5A47, 0x3944, 0x28C2, 0x28A1, 0x1880, 0x0040, 0x6BE6, 0xAE2D, 0x958B, 0x5B85, 0x31A0, 0x20E0, 0x28E0, 0x3102, 0x3102, 0x3123, // 0x0EA0 (3744) -0x4164, 0x41A4, 0x4183, 0x3942, 0x4143, 0x38E2, 0x30A1, 0x3121, 0x4A64, 0x84AA, 0xA60B, 0x9E0A, 0x9DC9, 0x9DEA, 0x95C9, 0x8DA9, // 0x0EB0 (3760) -0x7D89, 0x7D69, 0x7D68, 0x7D48, 0x7D49, 0x7CCA, 0x31A3, 0x3984, 0x4184, 0x4984, 0x4163, 0x4983, 0x4984, 0x51E5, 0x51C4, 0x4163, // 0x0EC0 (3776) -0x3102, 0x28C1, 0x28E1, 0x20C2, 0x18A1, 0x0840, 0x18E2, 0x2122, 0x1080, 0x1860, 0x4184, 0x4984, 0x4963, 0x5A05, 0x6A87, 0x72C8, // 0x0ED0 (3792) -0x6A66, 0x7287, 0x834A, 0x7AE9, 0x8B8B, 0x7B2A, 0x836C, 0x72C9, 0x6268, 0x72C9, 0x5A06, 0x6268, 0x7AEA, 0x6A88, 0x6247, 0x6288, // 0x0EE0 (3808) -0x5A06, 0x3923, 0x30E2, 0x28A1, 0x1060, 0x0880, 0x63E5, 0xA60B, 0x9E09, 0xAE4C, 0x950A, 0x5B06, 0x3163, 0x20C1, 0x20C1, 0x2902, // 0x0EF0 (3824) -0x3103, 0x3123, 0x3121, 0x3100, 0x30C1, 0x30A2, 0x3903, 0x3963, 0x39C3, 0x73E8, 0x9DCB, 0x9DE9, 0x9DE9, 0x95CA, 0x8DC9, 0x8DA9, // 0x0F00 (3840) -0x7D6C, 0x7D6B, 0x7548, 0x7569, 0x7549, 0x7CEB, 0x4A44, 0x4143, 0x49A4, 0x4183, 0x41A3, 0x5204, 0x62A6, 0x49C4, 0x4163, 0x30E2, // 0x0F10 (3856) -0x30E2, 0x20A1, 0x20C1, 0x1080, 0x0880, 0x2182, 0x3285, 0x3A45, 0x18A1, 0x2081, 0x3122, 0x3942, 0x4983, 0x59E5, 0x6225, 0x6226, // 0x0F20 (3872) -0x5A05, 0x6226, 0x72A8, 0x7AE9, 0x7B2A, 0x8B8B, 0x8B8C, 0x5A26, 0x6246, 0x7B0A, 0x5A26, 0x6267, 0x6AA9, 0x6268, 0x5A47, 0x5A47, // 0x0F30 (3888) -0x49C5, 0x3943, 0x28E1, 0x28C1, 0x1880, 0x0860, 0x6386, 0x9DEC, 0x95A9, 0x95E9, 0x9E0A, 0x9DEB, 0x8D09, 0x5B64, 0x29C0, 0x1920, // 0x0F40 (3904) -0x18E0, 0x28C2, 0x28C2, 0x28A2, 0x30A2, 0x30C2, 0x4143, 0x41A3, 0x4A44, 0x6B87, 0x8D2B, 0x9DCC, 0x95CB, 0x95C9, 0x8DA8, 0x8DA8, // 0x0F50 (3920) -0x7D6C, 0x7D8B, 0x6D48, 0x6D68, 0x6529, 0x7D2B, 0x52A6, 0x3962, 0x3983, 0x3983, 0x3982, 0x49E4, 0x49A3, 0x4163, 0x3902, 0x3902, // 0x0F60 (3936) -0x2081, 0x20A1, 0x1080, 0x0880, 0x29E3, 0x5BA8, 0x6449, 0x5BC8, 0x2100, 0x20A0, 0x3122, 0x3122, 0x4163, 0x51C5, 0x59E5, 0x59E6, // 0x0F70 (3952) -0x59E5, 0x59E5, 0x6AA8, 0x7B09, 0x836B, 0x834A, 0x832A, 0x51E5, 0x6A87, 0x7B0A, 0x6247, 0x5A06, 0x6267, 0x5A27, 0x51E6, 0x51E6, // 0x0F80 (3968) -0x4184, 0x3923, 0x30E2, 0x28A1, 0x20A1, 0x1080, 0x5304, 0x9DCC, 0x95A9, 0x95E9, 0x95C9, 0x95A9, 0xA5EB, 0xAE0D, 0x8D2B, 0x6C08, // 0x0F90 (3984) -0x4283, 0x31A1, 0x2100, 0x2900, 0x3121, 0x3161, 0x41C2, 0x4A43, 0x4AA3, 0x5BA6, 0x7CC9, 0x8D8A, 0x8DAA, 0x8589, 0x8568, 0x8568, // 0x0FA0 (4000) -0x7D4B, 0x7D6B, 0x6D69, 0x6D69, 0x6549, 0x754C, 0x4B06, 0x2942, 0x3162, 0x2901, 0x3142, 0x3922, 0x3922, 0x4164, 0x3902, 0x28C2, // 0x0FB0 (4016) -0x20A2, 0x1860, 0x10A0, 0x29C2, 0x6429, 0x8D8C, 0x858B, 0x7CEA, 0x31A1, 0x20C0, 0x3121, 0x3102, 0x3943, 0x49A5, 0x49C5, 0x49C5, // 0x0FC0 (4032) -0x49A4, 0x51A4, 0x6267, 0x72C8, 0x7B0A, 0x6A88, 0x6AA8, 0x51C4, 0x7B2A, 0x834B, 0x6AA8, 0x51E5, 0x5A26, 0x5A06, 0x51E5, 0x4164, // 0x0FD0 (4048) -0x3943, 0x3103, 0x30E2, 0x28A1, 0x20A2, 0x18C0, 0x3A42, 0x958B, 0x8568, 0x8DA8, 0x8DC9, 0x95E9, 0x9DE9, 0x9DEA, 0xA60C, 0xA5ED, // 0x0FE0 (4064) -0x9DAC, 0x8CEA, 0x6C06, 0x5B65, 0x5B44, 0x6386, 0x6C07, 0x7448, 0x7CC8, 0x7D09, 0x856A, 0x8DCA, 0x8DAA, 0x8568, 0x7D47, 0x7D48, // 0x0FF0 (4080) -0x7D6B, 0x7D8B, 0x758A, 0x758A, 0x6D6B, 0x6D0B, 0x4286, 0x2922, 0x2902, 0x28E2, 0x30C1, 0x38E2, 0x3903, 0x30C2, 0x28E2, 0x18A0, // 0x1000 (4096) -0x10A0, 0x1941, 0x3AA4, 0x5C08, 0x7D6B, 0x85AB, 0x7DCA, 0x8DAC, 0x4263, 0x28E0, 0x3102, 0x30E2, 0x3923, 0x49A5, 0x49C5, 0x41A4, // 0x1010 (4112) -0x4184, 0x4984, 0x5A06, 0x6226, 0x6226, 0x59E5, 0x6A67, 0x6267, 0x7B09, 0x834A, 0x6AA8, 0x51C4, 0x49A4, 0x49A4, 0x51C5, 0x4164, // 0x1020 (4128) -0x3122, 0x3903, 0x30E2, 0x30A2, 0x28A2, 0x20E1, 0x29E1, 0x8D2B, 0x8DCA, 0x8DA9, 0x8DC9, 0x95EA, 0x95E9, 0x9DEA, 0x9DEB, 0x9DEB, // 0x1030 (4144) -0x9E0B, 0xA64C, 0xA64C, 0x9DEB, 0x9DCB, 0xA5EC, 0xA62C, 0x9E0C, 0x9E0B, 0x95EA, 0x8DEA, 0x8DC9, 0x8589, 0x8548, 0x7D28, 0x8528, // 0x1040 (4160) -0x756B, 0x754A, 0x756A, 0x754A, 0x754B, 0x6429, 0x39C3, 0x3122, 0x3102, 0x30E1, 0x30C1, 0x30A1, 0x28A1, 0x20C1, 0x10A0, 0x1100, // 0x1050 (4176) -0x2A22, 0x53A7, 0x7D0B, 0x7D4A, 0x7D8A, 0x7DAA, 0x7DCA, 0x8DAC, 0x52C6, 0x28E1, 0x3102, 0x30E2, 0x3923, 0x4164, 0x4183, 0x4183, // 0x1060 (4192) -0x4163, 0x4984, 0x51A5, 0x49A4, 0x4984, 0x51C5, 0x6A88, 0x72C9, 0x8B8B, 0x836B, 0x6267, 0x49C4, 0x4983, 0x4983, 0x51E5, 0x4163, // 0x1070 (4208) -0x30E2, 0x3902, 0x3902, 0x30E2, 0x28A1, 0x20E1, 0x31E1, 0x84EA, 0x8D8A, 0x85A9, 0x8DAA, 0x8DCA, 0x95C9, 0x95EA, 0x95EB, 0x95EB, // 0x1080 (4224) -0x95EA, 0x9E0A, 0x9E2B, 0x9E0B, 0x9DEA, 0x9DEA, 0x960A, 0x9E0A, 0x960A, 0x95E9, 0x95E9, 0x8DC9, 0x8DA8, 0x8568, 0x8547, 0x8548, // 0x1090 (4240) -0x6D6A, 0x6D4A, 0x756B, 0x7D6B, 0x7D2B, 0x53A7, 0x31A2, 0x41A3, 0x3982, 0x39A2, 0x4A25, 0x41C4, 0x2941, 0x1900, 0x19A1, 0x4B86, // 0x10A0 (4256) -0x6CA8, 0x7D8B, 0x85CB, 0x7D8A, 0x7DAA, 0x85EB, 0x7DAA, 0x8DAC, 0x5B27, 0x20E1, 0x3122, 0x3102, 0x3902, 0x4143, 0x4143, 0x4963, // 0x10B0 (4272) -0x4163, 0x4984, 0x4184, 0x4163, 0x4163, 0x49C5, 0x6267, 0x6267, 0x8BAC, 0x7B2A, 0x51E5, 0x4984, 0x4184, 0x49A4, 0x51C5, 0x3943, // 0x10C0 (4288) -0x30E1, 0x3922, 0x3902, 0x3902, 0x28C1, 0x2101, 0x3A22, 0x84EB, 0x8DAB, 0x8589, 0x8D8A, 0x95CA, 0x95EA, 0x95CA, 0x95EB, 0x9DEB, // 0x10D0 (4304) -0xA62B, 0xA62B, 0xA62B, 0xA62B, 0x9E2B, 0x9E0B, 0x9E0B, 0x9E2B, 0x9E0A, 0x9E0A, 0x9E09, 0x95E9, 0x95C8, 0x8D88, 0x8D68, 0x8D68, // 0x10E0 (4320) -0x6549, 0x6D49, 0x7549, 0x7D4A, 0x74EA, 0x4B65, 0x3A63, 0x4AC5, 0x5B87, 0x6409, 0x4B46, 0x3A83, 0x3A63, 0x42E4, 0x7CEA, 0x858B, // 0x10F0 (4336) -0x7D8A, 0x7DAA, 0x7D89, 0x85AA, 0x8DAA, 0x8DAA, 0x85AA, 0x9DED, 0x73C9, 0x2120, 0x2941, 0x2922, 0x3122, 0x3943, 0x3923, 0x4144, // 0x1100 (4352) -0x4143, 0x4143, 0x3943, 0x3923, 0x4143, 0x4164, 0x51E5, 0x49A4, 0x5A27, 0x51E6, 0x4143, 0x3922, 0x3902, 0x4143, 0x4164, 0x3923, // 0x1110 (4368) -0x28E1, 0x3102, 0x3902, 0x3902, 0x3102, 0x2100, 0x4263, 0x954C, 0x8D8A, 0x8DAA, 0x95CA, 0x95CA, 0x95C9, 0x95CA, 0x95EA, 0x9E0B, // 0x1120 (4384) -0x9E0A, 0xA62B, 0xA62B, 0xA60B, 0x9E0B, 0x9E0B, 0xA62B, 0xA60B, 0xA62A, 0xA60A, 0x9E0A, 0x9DE9, 0x95C8, 0x8DA8, 0x8DA8, 0x8DA8, // 0x1130 (4400) -0x6D69, 0x6D89, 0x7549, 0x7D4A, 0x6D2A, 0x5407, 0x6449, 0x74CB, 0x6CEA, 0x5468, 0x43E6, 0x5448, 0x6468, 0x7D2B, 0x7D6A, 0x7D89, // 0x1140 (4416) -0x7DAA, 0x85A9, 0x8DAA, 0x95EB, 0x8D8A, 0x95CB, 0x95EA, 0x9DEC, 0x8CAB, 0x2980, 0x2960, 0x2941, 0x3142, 0x3944, 0x3923, 0x3904, // 0x1150 (4432) -0x3923, 0x3102, 0x3102, 0x3102, 0x3943, 0x3923, 0x4184, 0x3943, 0x3943, 0x3923, 0x3923, 0x3902, 0x3902, 0x3943, 0x3923, 0x3102, // 0x1160 (4448) -0x28C1, 0x28C2, 0x3102, 0x3102, 0x3122, 0x2920, 0x4282, 0x9DAC, 0x95CA, 0x95EA, 0x95CA, 0x95CA, 0x9DE9, 0x9DE9, 0x9DEA, 0x9E0A, // 0x1170 (4464) -0xA62A, 0xAE4B, 0xAE6B, 0xAE4B, 0xA64B, 0xA62B, 0xA62B, 0xA62B, 0xAE2B, 0xA60A, 0xA60A, 0x9E0A, 0x9DE9, 0x95C8, 0x8DC8, 0x95E9, // 0x1180 (4480) -0x6D69, 0x6D69, 0x6D48, 0x7569, 0x7548, 0x6D28, 0x7549, 0x756A, 0x7549, 0x6D29, 0x6508, 0x6D29, 0x6D69, 0x7569, 0x7589, 0x7D89, // 0x1190 (4496) -0x85A9, 0x8DAA, 0x95C9, 0x95C9, 0x8DCA, 0x95EB, 0x9DEC, 0xA5EC, 0x9DCC, 0x4261, 0x2900, 0x3103, 0x3923, 0x3123, 0x3103, 0x28E2, // 0x11A0 (4512) -0x28E2, 0x3102, 0x28E1, 0x28E1, 0x3102, 0x3102, 0x3122, 0x3102, 0x3102, 0x30E2, 0x28C2, 0x30E2, 0x3102, 0x3102, 0x30E2, 0x3102, // 0x11B0 (4528) -0x20C1, 0x28C1, 0x30E2, 0x3102, 0x3121, 0x2900, 0x4202, 0xADAD, 0xADEA, 0xA5E9, 0x9E09, 0x95E9, 0x9DE9, 0x9E0A, 0xA60A, 0xA62A, // 0x11C0 (4544) -0xAE4B, 0xAE4B, 0xAE4B, 0xAE4B, 0xAE4A, 0xAE4A, 0xAE4A, 0xAE2A, 0xA64A, 0xA62A, 0xA62A, 0x9E2A, 0x9DE9, 0x95E9, 0x9DE8, 0x9DC8, // 0x11D0 (4560) -0x6D69, 0x6D69, 0x6D48, 0x7569, 0x7569, 0x7569, 0x7569, 0x756A, 0x6D49, 0x6D29, 0x6509, 0x6D49, 0x7569, 0x7D89, 0x7D89, 0x7DA9, // 0x11E0 (4576) -0x85AA, 0x8DAA, 0x95C9, 0x95C9, 0x8DEA, 0x95EB, 0x9DEC, 0x9DEC, 0xA62D, 0x5B65, 0x2920, 0x3123, 0x3102, 0x28E2, 0x20C2, 0x20C1, // 0x11F0 (4592) -0x20A1, 0x28E2, 0x28E2, 0x28E2, 0x28E2, 0x28C1, 0x28E1, 0x28E1, 0x28E1, 0x28E1, 0x28C1, 0x28C2, 0x30E2, 0x30E2, 0x30E2, 0x3102, // 0x1200 (4608) -0x20A1, 0x1880, 0x28E2, 0x3102, 0x3101, 0x2900, 0x39A1, 0xA56D, 0xAE2B, 0xA629, 0x9E0A, 0x9E0A, 0x9E0A, 0xA62A, 0xA62A, 0xA64A, // 0x1210 (4624) -0xAE4B, 0xAE4B, 0xB66B, 0xAE4B, 0xAE4A, 0xAE4A, 0xAE4A, 0xAE2A, 0xA62A, 0xA60A, 0x9E2A, 0x9E0A, 0x9DE9, 0x95E9, 0x9DE8, 0x9DC8, // 0x1220 (4640) -0x6549, 0x6549, 0x6528, 0x6D49, 0x7569, 0x7569, 0x7D6A, 0x754A, 0x6D29, 0x6D09, 0x6D09, 0x7549, 0x7589, 0x7D89, 0x7DA9, 0x85A9, // 0x1230 (4656) -0x8DA9, 0x8DCA, 0x95C9, 0x95E9, 0x95EA, 0x95EB, 0x9DEC, 0x9DEC, 0xA62D, 0x7448, 0x2940, 0x3123, 0x28E2, 0x20A1, 0x1881, 0x1881, // 0x1240 (4672) -0x1880, 0x28E2, 0x2902, 0x2902, 0x28C1, 0x20A1, 0x20A1, 0x20A1, 0x20A1, 0x28A1, 0x20A1, 0x20A1, 0x28A2, 0x28C2, 0x28C2, 0x30E3, // 0x1250 (4688) -0x1881, 0x1040, 0x28C2, 0x20A1, 0x28E1, 0x2921, 0x2920, 0x8CAA, 0xB64C, 0xAE2A, 0xA62A, 0xA62A, 0xA62A, 0xA62B, 0xA62A, 0xAE4B, // 0x1260 (4704) -0xAE4B, 0xAE6B, 0xB66B, 0xAE4B, 0xAE4A, 0xAE4A, 0xAE4A, 0xAE2A, 0xA62A, 0x9E09, 0x9E09, 0x9E09, 0x9DE9, 0x95E9, 0x9DE8, 0x9DC8, // 0x1270 (4720) -0x6529, 0x6549, 0x6528, 0x6D28, 0x7549, 0x7549, 0x756A, 0x7529, 0x6D29, 0x6D09, 0x6D08, 0x7549, 0x7D69, 0x7D89, 0x85A9, 0x85A9, // 0x1280 (4736) -0x8DA9, 0x8DC9, 0x95C9, 0x95E9, 0x95EA, 0x960B, 0x95EC, 0x9DEC, 0x9E0D, 0x7C89, 0x2120, 0x3122, 0x20C1, 0x1880, 0x1881, 0x1881, // 0x1290 (4752) -0x1860, 0x28E2, 0x3102, 0x3102, 0x20C2, 0x1881, 0x1881, 0x20A1, 0x2081, 0x20A1, 0x20A1, 0x20A1, 0x20A1, 0x20A1, 0x28C2, 0x28E2, // 0x12A0 (4768) -0x1860, 0x1060, 0x20A2, 0x1860, 0x20C1, 0x3121, 0x2100, 0x73E7, 0xBE4D, 0xAE2A, 0xA62A, 0xA62A, 0xA62B, 0xA62A, 0xA62A, 0xAE2A, // 0x12B0 (4784) -0xAE4B, 0xAE4B, 0xAE4B, 0xAE4B, 0xAE4A, 0xAE4A, 0xAE4A, 0xA62A, 0xA62A, 0x9E09, 0x9DE9, 0x95E9, 0x95E9, 0x95E9, 0x9DE8, 0x95C8, // 0x12C0 (4800) -}; diff --git a/libraries/UTFT_Buttons/examples/UTFT_Buttons_Demo_320x240/UTFT_Buttons_Demo_320x240.ino b/libraries/UTFT_Buttons/examples/UTFT_Buttons_Demo_320x240/UTFT_Buttons_Demo_320x240.ino deleted file mode 100644 index 6b5cb1a..0000000 --- a/libraries/UTFT_Buttons/examples/UTFT_Buttons_Demo_320x240/UTFT_Buttons_Demo_320x240.ino +++ /dev/null @@ -1,125 +0,0 @@ -// UTFT_Buttons_Demo_320x240 (C)2013 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// A small demo to demonstrate the use of some of the -// functions of the UTFT_Buttons add-on library. -// -// This demo was made for modules with a screen resolution -// of 320x240 pixels, but should work on larger screens as -// well. -// -// This program requires both the UTFT and UTouch libraries -// in addition to the UTFT_Buttons add-on library. -// - -#include -#include -#include - -// Declare which fonts we will be using -extern uint8_t SmallFont[]; -extern uint8_t BigFont[]; -extern uint8_t Dingbats1_XL[]; - -// Set up UTFT... -// Set the pins to the correct ones for your development board -// ----------------------------------------------------------- -// Standard Arduino 2009/Uno/Leonardo shield : ,19,18,17,16 -// Standard Arduino Mega/Due shield : ,38,39,40,41 -// CTE TFT LCD/SD Shield for Arduino Due : ,25,26,27,28 -// Standard chipKit Uno32/uC32 : ,34,35,36,37 -// Standard chipKit Max32 : ,82,83,84,85 -// AquaLEDSource All in One Super Screw Shield : ,82,83,84,85 -// -// Remember to change the model parameter to suit your display module! -UTFT myGLCD(ITDB32S,38,39,40,41); - -// Set up UTouch... -// Set the pins to the correct ones for your development board -// ----------------------------------------------------------- -// Standard Arduino 2009/Uno/Leonardo shield : 15,10,14,9,8 -// Standard Arduino Mega/Due shield : 6,5,4,3,2 -// CTE TFT LCD/SD Shield for Arduino Due : 6,5,4,3,2 -// Standard chipKit Uno32/uC32 : 20,21,22,23,24 -// Standard chipKit Max32 : 62,63,64,65,66 -// AquaLEDSource All in One Super Screw Shield : 62,63,64,65,66 -UTouch myTouch(6,5,4,3,2); - -// Finally we set up UTFT_Buttons :) -UTFT_Buttons myButtons(&myGLCD, &myTouch); - -void setup() -{ - myGLCD.InitLCD(); - myGLCD.clrScr(); - myGLCD.setFont(SmallFont); - - myTouch.InitTouch(); - myTouch.setPrecision(PREC_MEDIUM); - - myButtons.setTextFont(BigFont); - myButtons.setSymbolFont(Dingbats1_XL); -} - -void loop() -{ - int but1, but2, but3, but4, butX, butY, pressed_button; - boolean default_colors = true; - - but1 = myButtons.addButton( 10, 20, 300, 30, "Button 1"); - but2 = myButtons.addButton( 10, 60, 300, 30, "Button 2"); - but3 = myButtons.addButton( 10, 100, 300, 30, "Button 3"); - but4 = myButtons.addButton( 10, 140, 300, 30, "Button 4", BUTTON_DISABLED); - butX = myButtons.addButton(279, 199, 40, 40, "a", BUTTON_SYMBOL); - butY = myButtons.addButton( 0, 199, 100, 40, "I", BUTTON_SYMBOL | BUTTON_SYMBOL_REP_3X); - myButtons.drawButtons(); - - myGLCD.print("You pressed:", 110, 205); - myGLCD.setColor(VGA_BLACK); - myGLCD.setBackColor(VGA_WHITE); - myGLCD.print("None ", 110, 220); - - while(1) - { - if (myTouch.dataAvailable() == true) - { - pressed_button = myButtons.checkButtons(); - - if (pressed_button==butX) - { - if (myButtons.buttonEnabled(but4)) - myButtons.disableButton(but4, true); - else - myButtons.enableButton(but4, true); - } - else if (pressed_button==butY) - { - if (default_colors) - { - myButtons.setButtonColors(VGA_YELLOW, VGA_RED, VGA_YELLOW, VGA_BLUE, VGA_GRAY); - myButtons.relabelButton(butY, "_"); - myButtons.drawButtons(); - default_colors=false; - } - else - { - myButtons.setButtonColors(VGA_WHITE, VGA_GRAY, VGA_WHITE, VGA_RED, VGA_BLUE); - myButtons.relabelButton(butY, "I"); - myButtons.drawButtons(); - default_colors=true; - } - } - if (pressed_button==but1) - myGLCD.print("Button 1", 110, 220); - if (pressed_button==but2) - myGLCD.print("Button 2", 110, 220); - if (pressed_button==but3) - myGLCD.print("Button 3", 110, 220); - if (pressed_button==but4) - myGLCD.print("Button 4", 110, 220); - if (pressed_button==-1) - myGLCD.print("None ", 110, 220); - } - } -} - diff --git a/libraries/UTFT_Buttons/fonts.c b/libraries/UTFT_Buttons/fonts.c deleted file mode 100644 index b189f8e..0000000 --- a/libraries/UTFT_Buttons/fonts.c +++ /dev/null @@ -1,117 +0,0 @@ -#if defined(__AVR__) - #include - #define fontdatatype const uint8_t -#elif defined(__PIC32MX__) - #define PROGMEM - #define fontdatatype const unsigned char -#elif defined(__arm__) - #define PROGMEM - #define fontdatatype const unsigned char -#endif - -// Dingbats1_XL.c -// Font type : Full (95 characters) -// Font size : 32x24 pixels -fontdatatype Dingbats1_XL[9124] PROGMEM={ -0x20,0x18,0x20,0x5F, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x1F,0x80,0x00,0x00,0x0D,0xC0,0x00,0x00,0x1E,0xE0,0x00,0x00,0x33,0x30,0x00,0x00,0x61,0x98,0x00,0x00,0xCC,0xCC,0x00,0x00,0xCC,0x6C,0x00,0x01,0x80,0x36,0x00,0x03,0x02,0x36,0x00,0x07,0x06,0x1B,0x00,0x01,0x8E,0x1B,0x00,0x00,0xF6,0x1B,0x00,0x00,0x06,0x1B,0x00,0x00,0x06,0x1B,0x00,0x00,0x06,0x1B,0x00,0x00,0x07,0xFB,0x00,0x00,0x07,0xFB,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ! -0x00,0x00,0x00,0x00,0x07,0xFF,0xFE,0x00,0x07,0xFF,0xFF,0x00,0x06,0x00,0x03,0x00,0x06,0x00,0x03,0x00,0x06,0x06,0x33,0x00,0x06,0x06,0x33,0x00,0x06,0x00,0x33,0x00,0x06,0x00,0x33,0x00,0x07,0x00,0x33,0x00,0x03,0x80,0x33,0x00,0x01,0xC0,0x33,0x00,0x00,0xFC,0x33,0x00,0x00,0x7C,0x33,0x00,0x00,0x0C,0x3F,0x00,0x00,0x0C,0x1E,0x00,0x00,0x0C,0x00,0x00,0x00,0x1B,0xFC,0x00,0x00,0x19,0x24,0x00,0x00,0x1F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // " -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x04,0x00,0x00,0xEF,0xDC,0x00,0x00,0xFF,0xFC,0x00,0x00,0xD0,0x2C,0x00,0x00,0xC0,0x0C,0x00,0x01,0x80,0x06,0x00,0x01,0x80,0x06,0x00,0x03,0x00,0x03,0x00,0x03,0x0C,0xC3,0x00,0x03,0x0C,0xC3,0x00,0x03,0x00,0x03,0x00,0x03,0x03,0x03,0x00,0x01,0x8A,0x46,0x00,0x01,0x8F,0xC6,0x00,0x00,0xE0,0x1C,0x00,0x00,0x70,0x38,0x00,0x00,0x3F,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // # -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x1E,0x00,0x03,0xF7,0xBF,0x00,0x03,0xFF,0xFF,0x00,0x03,0xF0,0x3F,0x00,0x03,0xE0,0x1F,0x00,0x01,0x80,0x06,0x00,0x01,0x9C,0x66,0x00,0x03,0x35,0xB3,0x00,0x03,0x35,0x33,0x00,0x03,0x3C,0xF3,0x00,0x03,0x7C,0x7B,0x00,0x03,0x38,0x73,0x00,0x01,0x80,0x06,0x00,0x01,0x80,0x06,0x00,0x00,0xE0,0x1C,0x00,0x00,0x70,0x38,0x00,0x00,0x3F,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // $ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xE0,0x00,0x00,0x30,0x3F,0x00,0x00,0x40,0x00,0x80,0x00,0x80,0x00,0x80,0x01,0x00,0x00,0x80,0x01,0x30,0x00,0x80,0x02,0x30,0x00,0x80,0x02,0x00,0x01,0x80,0x02,0x00,0x01,0x00,0x02,0x00,0x01,0x00,0x02,0x01,0x01,0x00,0x02,0x01,0x01,0x00,0x02,0x7F,0x01,0x00,0x02,0x41,0x01,0x00,0x02,0x41,0x02,0x00,0x02,0x41,0x02,0x00,0x01,0x38,0xFC,0x00,0x01,0x88,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // % -0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x1F,0xE0,0x00,0x00,0x3F,0xF0,0x00,0x00,0x7F,0xF8,0x00,0x00,0x7F,0xFC,0x00,0x00,0xFF,0xFC,0x00,0x00,0xFF,0xFC,0x00,0x01,0xC0,0x0E,0x00,0x01,0x9F,0xE6,0x00,0x01,0x8C,0xC6,0x00,0x01,0xCC,0xCE,0x00,0x01,0xC0,0x0E,0x00,0x01,0xCC,0xCE,0x00,0x01,0x97,0xA6,0x00,0x01,0x80,0x06,0x00,0x01,0x80,0x06,0x00,0x00,0xC0,0x0C,0x00,0x00,0xFF,0xFC,0x00,0x00,0x3F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // & -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x06,0xC0,0x03,0x00,0x04,0x40,0x02,0x80,0x06,0x40,0x02,0x40,0x0E,0x20,0x01,0x40,0x01,0x2E,0x03,0x20,0x00,0x91,0x02,0x20,0x00,0x85,0xFE,0x20,0x04,0x45,0x69,0x20,0x0C,0xC3,0x00,0x20,0x1F,0xE0,0x00,0x60,0x10,0x00,0x00,0x40,0x18,0x0E,0x99,0x80,0x0F,0xF8,0xE1,0x00,0x00,0x0F,0xBF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ' -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x38,0x00,0x00,0xFF,0xFC,0x00,0x00,0x8F,0xC6,0x00,0x01,0xBF,0xF6,0x00,0x01,0xF8,0x7E,0x00,0x01,0xE0,0x1F,0x00,0x03,0xC0,0x0F,0x00,0x03,0x80,0x07,0x00,0x03,0x8C,0xC6,0x00,0x03,0x8C,0xC7,0x00,0x03,0x80,0x07,0x00,0x03,0x83,0x07,0x00,0x03,0xC9,0x4F,0x00,0x03,0xCF,0xCF,0x00,0x03,0xC0,0x0F,0x00,0x00,0xF0,0x3C,0x00,0x00,0xFC,0xFC,0x00,0x00,0x3F,0xF0,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ( -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x0F,0xC0,0x00,0x00,0x19,0xE0,0x00,0x00,0x39,0xE0,0x00,0x00,0x5F,0xE0,0x00,0x00,0x3F,0xE0,0x00,0x00,0x17,0xE0,0x00,0x00,0x13,0xF0,0x00,0x00,0x13,0xF0,0x00,0x00,0x33,0xF8,0x00,0x00,0x23,0xF8,0x00,0x00,0x23,0xFC,0x00,0x00,0x23,0xF0,0x00,0x00,0x33,0xF0,0x00,0x00,0x1B,0xF0,0x00,0x00,0x1F,0xF0,0x00,0x00,0x21,0xF8,0x00,0x00,0x3F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ) -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0xC0,0x1F,0xFF,0xFF,0xC0,0x1F,0xFF,0xFF,0xC0,0x10,0x7F,0xFF,0xC0,0x15,0x7F,0xFD,0xC0,0x15,0xBF,0xF8,0xE0,0x0A,0xFF,0xF8,0x60,0x0F,0x3F,0xF0,0x00,0x07,0xFF,0xC0,0x00,0x01,0xFF,0x80,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // * -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x1F,0xC0,0x00,0x00,0xFF,0xE0,0x00,0x01,0xEF,0xF1,0xC0,0x03,0xEF,0xFB,0x80,0x06,0x6F,0xFF,0x00,0x0E,0x63,0xFF,0x00,0x07,0xF3,0xFB,0x80,0x03,0xEB,0xF1,0x80,0x00,0xFF,0xF0,0x40,0x00,0x1C,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // + -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x23,0x01,0x00,0x00,0xC0,0x83,0x00,0x01,0x80,0x4F,0x00,0x02,0x60,0x3F,0x00,0x06,0x60,0x3F,0x00,0x01,0x80,0x4F,0x00,0x00,0xC0,0x83,0x00,0x00,0x23,0x01,0x00,0x00,0x17,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // , -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xE0,0x00,0x00,0x67,0x98,0x00,0x00,0xF0,0x3C,0x00,0x01,0xE7,0x9E,0x00,0x03,0xEF,0xFF,0x00,0x02,0x0C,0x31,0x00,0x03,0xF8,0xDF,0x80,0x07,0xE8,0xDF,0x80,0x07,0xF8,0x1F,0x80,0x07,0xF8,0x3F,0x80,0x07,0xE8,0xFF,0x80,0x07,0x28,0xD3,0x80,0x06,0x1C,0xE1,0x80,0x02,0x17,0x21,0x00,0x02,0x1F,0xE1,0x00,0x02,0x10,0x21,0x00,0x03,0xF0,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // - -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x70,0x00,0x00,0x14,0x50,0x00,0x00,0x92,0x94,0x00,0x00,0xFA,0xBE,0x00,0x00,0xFA,0xBE,0x00,0x00,0xFB,0xBE,0x00,0x00,0x73,0x9C,0x00,0x00,0x0F,0xE0,0x00,0x00,0x07,0xC0,0x00,0x00,0x1F,0xF0,0x00,0x00,0x07,0xC0,0x00,0x00,0x1F,0xF0,0x00,0x00,0x1F,0xF0,0x00,0x00,0x07,0xC0,0x00,0x00,0x03,0x80,0x00,0x00,0x06,0xC0,0x00,0x00,0x0F,0xE0,0x00,0x00,0x0F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // . -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x0F,0xE0,0x00,0x00,0x3F,0xA0,0x00,0x00,0x7F,0xE0,0x00,0x00,0x7D,0xE0,0x00,0x00,0xF0,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0xFB,0xE0,0x00,0x00,0xFF,0xF0,0x00,0x00,0xFF,0xF8,0x00,0x00,0xFF,0xF8,0x00,0x00,0x7F,0xFC,0x00,0x00,0x7F,0xFC,0x00,0x00,0x7F,0xFC,0x00,0x00,0x77,0xFE,0x00,0x00,0x77,0xFE,0x00,0x00,0x77,0x1F,0x00,0x00,0x77,0x1C,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // / - -0x00,0x00,0x00,0x00,0x00,0x0F,0xC0,0x00,0x00,0x30,0x30,0x00,0x00,0xC0,0x0C,0x00,0x01,0x80,0xC6,0x00,0x01,0x01,0xF2,0x00,0x02,0x03,0xF1,0x00,0x02,0x07,0xA1,0x00,0x04,0x07,0x60,0x80,0x04,0x0E,0x00,0x80,0x04,0x0C,0x00,0x80,0x04,0x1C,0x00,0x80,0x04,0x1C,0x00,0x80,0x04,0x1C,0x00,0x80,0x02,0x3E,0x01,0x00,0x02,0x3A,0x01,0x00,0x01,0x14,0x02,0x00,0x00,0x24,0x06,0x00,0x00,0x20,0x0C,0x00,0x00,0x30,0x30,0x00,0x00,0x0F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 0 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,0x80,0x05,0x00,0x00,0x80,0x05,0xC0,0x00,0x80,0x07,0xFF,0xFF,0x80,0x07,0xFF,0xFF,0x80,0x04,0x00,0x00,0x80,0x04,0x00,0x00,0x80,0x04,0x00,0x00,0x80,0x04,0x00,0x00,0x80,0x04,0x00,0x00,0x80,0x04,0x00,0x00,0x80,0x04,0x00,0x00,0x80,0x07,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 1 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0xFF,0x80,0x02,0x00,0x00,0x80,0x06,0xFE,0x3E,0x80,0x06,0xFE,0x00,0x80,0x06,0x00,0x00,0x80,0x06,0xFF,0xFE,0x80,0x06,0xFE,0xFE,0x80,0x06,0x00,0x00,0x80,0x07,0xFF,0xFF,0x80,0x04,0x00,0x01,0x00,0x07,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 2 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0xC6,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x82,0x00,0x03,0xFF,0x83,0x80,0x02,0x00,0x44,0x80,0x06,0x07,0x38,0x80,0x06,0x18,0xC0,0x80,0x06,0x10,0x40,0x80,0x06,0x10,0x40,0x80,0x06,0x18,0xC0,0x80,0x06,0x07,0x00,0x80,0x07,0xFF,0xFF,0x80,0x04,0x00,0x01,0x00,0x07,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 3 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x10,0x78,0x00,0x00,0x10,0xCC,0x00,0x00,0x10,0x84,0x00,0x00,0x10,0x84,0x00,0x00,0x10,0x84,0x00,0x00,0x19,0x84,0x00,0x00,0x0F,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 4 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0xEE,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x10,0x78,0x00,0x00,0x10,0xCC,0x00,0x00,0x10,0x84,0x00,0x00,0x10,0x84,0x00,0x00,0x10,0x84,0x00,0x00,0x19,0x84,0x00,0x00,0x0F,0x04,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 5 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x47,0x10,0x00,0x00,0xCF,0x98,0x00,0x00,0xEF,0xB8,0x00,0x01,0xDF,0xDC,0x00,0x03,0xCF,0x9E,0x00,0x01,0xFF,0xFC,0x00,0x01,0xFF,0xFC,0x00,0x03,0xDF,0xDE,0x00,0x03,0xAF,0xAE,0x00,0x07,0xFF,0xFF,0x00,0x03,0xDF,0xDE,0x00,0x03,0xBF,0xEE,0x00,0x07,0x87,0x0F,0x00,0x07,0xF7,0x7F,0x00,0x08,0xE7,0x38,0x80,0x00,0xE7,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 6 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x37,0xB0,0x00,0x00,0x37,0xB0,0x00,0x00,0x3F,0xF0,0x00,0x00,0x3F,0xF0,0x00,0x00,0x3F,0xF0,0x00,0x00,0x1F,0xE0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x03,0xC3,0x0F,0x00,0x01,0xE3,0x1E,0x00,0x00,0xF3,0x3C,0x00,0x00,0x7B,0x78,0x00,0x00,0x3F,0xF0,0x00,0x00,0x1F,0xE0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x07,0x80,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 7 -0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x1F,0xC0,0x00,0x00,0x27,0x20,0x00,0x00,0x1F,0xC0,0x00,0x00,0x3F,0xE0,0x00,0x00,0x7F,0xF0,0x00,0x00,0x9F,0xC8,0x00,0x00,0x3F,0xE0,0x00,0x00,0xFF,0xF8,0x00,0x01,0xFF,0xFC,0x00,0x03,0xFF,0xFE,0x00,0x04,0x07,0x01,0x00,0x00,0x07,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 8 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x1B,0x80,0x00,0x00,0x1F,0xC0,0x00,0x00,0x1F,0xE0,0x00,0x00,0x1F,0xF0,0x00,0x00,0x3F,0xF8,0x00,0x00,0x7F,0xFC,0x00,0x00,0xFF,0xFE,0x00,0x00,0xE1,0x0E,0x00,0x00,0xE1,0x0E,0x00,0x00,0xE1,0x0E,0x00,0x00,0xFF,0xFE,0x00,0x00,0xFF,0xFE,0x00,0x00,0xE1,0x0E,0x00,0x00,0xE1,0x0E,0x00,0x00,0xE1,0x0E,0x00,0x00,0xFF,0xFE,0x00,0x00,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 9 -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFC,0x00,0x00,0x40,0x04,0x00,0x00,0x59,0xB4,0x00,0x00,0x59,0xB4,0x00,0x00,0x40,0x04,0x00,0x00,0x40,0x04,0x00,0x00,0x59,0xB4,0x00,0x00,0x59,0xB4,0x00,0x00,0x40,0x04,0x00,0x00,0x40,0x04,0x00,0x00,0x59,0xB4,0x00,0x00,0x59,0xB4,0x00,0x00,0x40,0x04,0x00,0x00,0x40,0x04,0x00,0x00,0x41,0x84,0x00,0x00,0x41,0x84,0x00,0x00,0x41,0x84,0x00,0x00,0x7F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // : -0x00,0x00,0x00,0x00,0x03,0xFF,0xE0,0x00,0x02,0x00,0x20,0x00,0x02,0xFF,0xA0,0x00,0x02,0x00,0x20,0x00,0x02,0xFF,0xA0,0x00,0x02,0x00,0x20,0x00,0x02,0xFF,0xA0,0x00,0x02,0x00,0x20,0x00,0x02,0xFF,0xA0,0x00,0x02,0x00,0x20,0x00,0x02,0xFF,0xA0,0x00,0x02,0xFF,0xA0,0x00,0x02,0x00,0x20,0x00,0x02,0xFF,0xA0,0x00,0x02,0x00,0x20,0x00,0x02,0x3E,0x20,0x00,0x02,0x3E,0x20,0x00,0x02,0x3E,0x20,0x00,0x03,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ; -0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x0F,0xC0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x0F,0xC0,0x00,0x00,0x1F,0xE0,0x00,0x00,0x7F,0xF8,0x00,0x00,0xFF,0xFC,0x00,0x01,0xFF,0xFE,0x00,0x01,0xFC,0xFE,0x00,0x01,0xF8,0x7E,0x00,0x01,0xF8,0x7E,0x00,0x01,0xF8,0x7E,0x00,0x01,0xF8,0x7E,0x00,0x01,0xF8,0x7E,0x00,0x01,0xF8,0x7E,0x00,0x01,0xF8,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // < -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFD,0xFC,0x00,0x03,0x22,0x26,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x22,0x26,0x00,0x00,0x7D,0xFC,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x08,0x42,0x00,0x03,0x18,0xC6,0x00,0x03,0x39,0xCE,0x00,0x03,0x7B,0xFE,0x00,0x03,0xFF,0xFE,0x00,0x03,0xFF,0xFE,0x00,0x03,0xFF,0xFE,0x00,0x03,0xFF,0xFE,0x00,0x03,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // = -0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x18,0x0F,0xC0,0x60,0x17,0xDF,0xEF,0xA0,0x10,0x71,0x38,0x20,0x10,0x31,0x30,0x20,0x10,0xD1,0x2C,0x20,0x1F,0x1F,0xE3,0xE0,0x00,0x1F,0xE0,0x00,0x00,0x1F,0xC0,0x00,0x00,0x1F,0xC0,0x00,0x00,0x1F,0xC0,0x00,0x00,0x1F,0xC0,0x00,0x00,0x1F,0xC0,0x00,0x00,0x1F,0xE0,0x00,0x00,0x1F,0xE0,0x00,0x00,0x1F,0xE0,0x00,0x00,0x1F,0xE0,0x00,0x00,0x1F,0xE0,0x00,0x00,0x1F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // > -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xE0,0x00,0x00,0x0C,0x60,0x00,0x00,0x09,0x20,0x00,0x00,0x09,0xA0,0x00,0x00,0x08,0x20,0x00,0x00,0x0C,0x60,0x00,0x00,0x0F,0xE0,0x00,0x00,0x7F,0xFC,0x00,0x00,0x7F,0xFC,0x00,0x00,0x7F,0xFC,0x00,0x01,0xFF,0xFF,0x00,0x01,0xFC,0x7F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x01,0xF8,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ? - -0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x0B,0xE0,0x00,0x00,0x08,0x78,0x00,0x00,0x08,0x08,0x00,0x00,0x0F,0x08,0x00,0x00,0x0B,0xE8,0x00,0x00,0x08,0x78,0x00,0x00,0x08,0x08,0x00,0x00,0x08,0x08,0x00,0x00,0x08,0x08,0x00,0x00,0x08,0x08,0x00,0x00,0x08,0x08,0x00,0x00,0x78,0x08,0x00,0x00,0xF8,0x08,0x00,0x01,0xF8,0x08,0x00,0x01,0xF0,0x78,0x00,0x01,0xE0,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF0,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // @ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x38,0x00,0x00,0x3E,0x7C,0x00,0x00,0x3E,0x7C,0x00,0x00,0x3E,0x7C,0x00,0x00,0x1C,0x38,0x00,0x01,0x00,0x00,0x00,0x01,0xCF,0xF0,0x00,0x01,0xFF,0xF0,0x00,0x01,0xFF,0xF0,0x00,0x01,0xFF,0xF0,0x00,0x01,0xCF,0xF0,0x00,0x01,0x07,0xE0,0x00,0x00,0x05,0xA0,0x00,0x00,0x0D,0xB0,0x00,0x00,0x09,0x90,0x00,0x00,0x19,0x98,0x00,0x00,0x11,0x88,0x00,0x00,0x31,0x8C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // A -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFE,0x00,0x00,0xA0,0x14,0x00,0x01,0x40,0x14,0x00,0x01,0xC0,0x18,0x00,0x01,0x40,0x18,0x00,0x01,0x40,0x28,0x00,0x01,0xFF,0xF8,0x00,0x01,0x40,0x18,0x00,0x01,0x40,0x14,0x00,0x00,0xC0,0x1C,0x00,0x00,0xA0,0x14,0x00,0x00,0xA0,0x0C,0x00,0x00,0x7F,0xFC,0x00,0x00,0xA0,0x0E,0x00,0x00,0xE0,0x0C,0x00,0x00,0xE0,0x0C,0x00,0x00,0xC0,0x14,0x00,0x01,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // B -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x01,0xF6,0x00,0x00,0x3E,0xCE,0x00,0x03,0xF9,0xF0,0x00,0x02,0x3E,0x00,0x00,0x03,0xFF,0xFE,0x00,0x03,0x1C,0xE2,0x00,0x03,0xFF,0xFE,0x00,0x00,0x7F,0xFE,0x00,0x00,0x7F,0xFE,0x00,0x00,0x7F,0xFE,0x00,0x00,0x7F,0xFE,0x00,0x00,0x7F,0xFE,0x00,0x00,0x7F,0xFE,0x00,0x00,0x7F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // C -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xE0,0x00,0x00,0x82,0x20,0x00,0x00,0x82,0x20,0x00,0x00,0xFF,0x20,0x00,0x00,0x81,0x20,0x00,0x00,0xFF,0xE0,0x00,0x00,0x8E,0x20,0x00,0x00,0xFF,0xE0,0x00,0x00,0x80,0x20,0x00,0x00,0xFF,0xE0,0x00,0x00,0x87,0x20,0x00,0x00,0x85,0xE0,0x00,0x00,0xFD,0x30,0x00,0x00,0x15,0x2E,0x00,0x00,0x6F,0x2A,0x00,0x00,0x41,0xEE,0x00,0x00,0x3C,0x3C,0x00,0x00,0x07,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // D -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x50,0x00,0x00,0x00,0x58,0x00,0x00,0x00,0x57,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x2C,0x80,0x00,0x00,0x24,0x80,0x00,0x00,0x12,0x50,0x00,0x00,0x49,0xB8,0x00,0x00,0x44,0xF0,0x00,0x00,0x43,0x5C,0x00,0x00,0xA0,0xBF,0x80,0x07,0x1D,0x7F,0x80,0x00,0xA0,0x8F,0x80,0x00,0x40,0x07,0x00,0x00,0x40,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // E -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x30,0xC0,0x00,0x00,0x20,0x40,0x00,0x00,0x40,0x23,0x00,0x00,0x40,0x26,0x00,0x00,0x40,0x26,0x00,0x00,0x40,0x2E,0x00,0x00,0x20,0x5A,0x00,0x00,0x30,0xF1,0x00,0x00,0x0F,0x19,0x00,0x00,0x05,0x1E,0x00,0x00,0x77,0x3C,0x00,0x00,0x7C,0x7C,0x00,0x00,0xFF,0xF8,0x00,0x00,0x7F,0xF0,0x00,0x00,0x1F,0xE0,0x00,0x00,0x07,0xC0,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // F -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x20,0x00,0x00,0x06,0xD8,0x00,0x00,0x04,0xC8,0x00,0x00,0x0D,0xA8,0x00,0x00,0x15,0xFC,0x00,0x00,0x65,0xA6,0x00,0x00,0xE3,0x72,0x00,0x01,0xF6,0x9C,0x00,0x03,0xFB,0x67,0x00,0x00,0xFC,0x97,0x00,0x00,0x7E,0x3F,0x00,0x00,0x3D,0xFF,0x80,0x00,0x17,0x50,0x00,0x00,0x39,0xD8,0x00,0x00,0x0E,0xC8,0x00,0x00,0x04,0xC8,0x00,0x00,0x09,0xB8,0x00,0x00,0x1B,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // G -0x00,0x00,0x00,0x00,0x00,0x10,0x18,0x00,0x00,0x10,0x10,0x00,0x04,0x08,0x20,0x00,0x02,0x0B,0xA0,0xC0,0x01,0x03,0xE1,0x00,0x00,0x83,0xF2,0x00,0x00,0x0F,0xFC,0x00,0x00,0x33,0xFE,0x00,0x08,0x61,0xFF,0x00,0x07,0x76,0x3F,0x00,0x00,0x78,0x0F,0x00,0x00,0x7C,0x0F,0x00,0x00,0x3E,0x06,0x00,0x00,0x9F,0xF8,0x00,0x01,0x0F,0xFA,0x00,0x06,0x07,0xF9,0x00,0x08,0x03,0xF8,0x80,0x00,0x1B,0xF8,0xC0,0x00,0x10,0x00,0x00,0x00,0x20,0x84,0x00,0x00,0x20,0x84,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00, // H -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x0F,0xC0,0x00,0x00,0x1F,0xE0,0x00,0x00,0x3F,0xF0,0x00,0x00,0x7F,0xF8,0x00,0x00,0x64,0x98,0x00,0x00,0x64,0x98,0x00,0x00,0x7F,0xF8,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFE,0x00,0x03,0xFF,0xFF,0x00,0x07,0xFF,0xFF,0x80,0x01,0xF7,0xBE,0x00,0x01,0xF7,0xBE,0x00,0x00,0xE3,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // I -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xF8,0x00,0x0F,0xC7,0xFC,0x00,0x01,0xFF,0xFC,0x00,0x00,0x07,0xFC,0x00,0x00,0x07,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x01,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x80,0x01,0x00,0x00,0x80,0x01,0x80,0x01,0x80,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // J -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x10,0x44,0x00,0x00,0x20,0x24,0x00,0x00,0x47,0x16,0x00,0x00,0xC8,0x9E,0x00,0x03,0x50,0x4F,0x00,0x04,0x50,0x4F,0x00,0x02,0x90,0x4F,0x00,0x07,0x88,0x87,0x80,0x07,0x87,0x1F,0x80,0x07,0xE5,0x3F,0xC0,0x0F,0xF7,0x7F,0x00,0x0F,0xF8,0xFE,0x00,0x03,0xFD,0xFC,0x00,0x00,0x7D,0xF8,0x00,0x00,0x7F,0xF0,0x00,0x00,0x7F,0xF0,0x00,0x00,0x7F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // K -0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00,0x00,0x03,0x80,0x00,0x00,0x03,0x40,0x00,0x00,0x02,0x40,0x00,0x00,0x04,0x40,0x00,0x00,0x04,0xC0,0x00,0x00,0x03,0x80,0x00,0x00,0x07,0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0x19,0xC0,0x00,0x00,0x37,0xE0,0x00,0x00,0x35,0x70,0x00,0x00,0x35,0x30,0x00,0x00,0x33,0x30,0x00,0x00,0x19,0x20,0x00,0x00,0x1C,0xE0,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0x80,0x00,0x00,0x0E,0x80,0x00,0x00,0x0E,0x80,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // L -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x80,0x00,0x00,0x01,0xC0,0x00,0x00,0x01,0xE0,0x00,0x00,0x01,0x70,0x00,0x00,0x01,0x18,0x00,0x00,0x01,0x08,0x00,0x00,0x01,0x08,0x00,0x00,0x01,0x08,0x00,0x00,0x01,0x08,0x00,0x00,0x01,0x10,0x00,0x00,0x01,0x20,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // M -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,0x80,0x04,0x00,0x00,0x80,0x04,0xFF,0xFC,0x80,0x05,0xFF,0xFE,0x80,0x05,0xFF,0x06,0x80,0x05,0xFF,0x06,0x80,0x05,0xFF,0x06,0x80,0x05,0xFF,0xF6,0x80,0x05,0xFF,0xF6,0x80,0x05,0xFF,0xF6,0x80,0x05,0xFF,0xFE,0x80,0x05,0xFF,0xFE,0x80,0x05,0xFF,0xFE,0x80,0x05,0xFF,0xFE,0x80,0x04,0x00,0x00,0x80,0x05,0x9B,0xC0,0x80,0x04,0x00,0x00,0x80,0x07,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // N -0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x01,0x80,0x00,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x20,0x00,0x00,0x03,0xFF,0xFE,0x00,0x02,0x4F,0x0E,0x00,0x02,0x4C,0xE6,0x00,0x02,0x7D,0xF6,0x00,0x02,0x4B,0xFA,0x00,0x02,0x4B,0xFA,0x00,0x02,0x7B,0xFA,0x00,0x02,0x7B,0xFA,0x00,0x02,0x7D,0xF6,0x00,0x02,0x7C,0xE6,0x00,0x02,0x7F,0x1E,0x00,0x01,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // O - -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xE0,0x00,0x00,0x16,0xD0,0x00,0x00,0x19,0x30,0x00,0x00,0x16,0xD0,0x00,0x00,0x16,0xD0,0x00,0x00,0x19,0x30,0x00,0x00,0x16,0xD0,0x00,0x00,0x3F,0xF8,0x00,0x00,0x30,0x18,0x00,0x00,0x3F,0xF8,0x00,0x00,0x3F,0xF8,0x00,0x00,0x3F,0xF8,0x00,0x00,0x2F,0xE8,0x00,0x00,0x20,0x08,0x00,0x00,0x1F,0xF0,0x00,0x00,0x03,0x80,0x00,0x00,0x03,0x80,0x00,0x00,0x0F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // P -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFC,0x00,0x07,0xFF,0xFF,0x80,0x0F,0xFF,0xFF,0xC0,0x0F,0xC0,0x0F,0xC0,0x00,0x0F,0xC0,0x00,0x0F,0x9C,0xE7,0xC0,0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x00,0x00,0x60,0x18,0x00,0x00,0xE0,0x1C,0x00,0x00,0xF0,0x3C,0x00,0x01,0xF0,0x3E,0x00,0x01,0xF8,0x7E,0x00,0x01,0xFF,0xFE,0x00,0x01,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Q -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xE0,0x00,0x00,0x3C,0x10,0x00,0x01,0xF0,0x08,0x00,0x1E,0x3C,0x04,0x00,0xFC,0x3E,0x04,0x01,0x83,0x3C,0x04,0x01,0x01,0x38,0x04,0x02,0x06,0xB0,0x04,0x7E,0x18,0xB0,0x04,0x81,0x17,0xB0,0x04,0x80,0xE8,0xB0,0x04,0xC0,0x28,0xB0,0x04,0x5F,0x98,0x80,0x04,0x20,0x48,0x80,0x04,0x10,0x04,0x80,0x38,0x08,0x03,0x83,0xC0,0x04,0x01,0x9C,0x00,0x03,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // R -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xE0,0x00,0x00,0x1C,0x10,0x00,0x01,0xE0,0x08,0x00,0x0E,0x00,0x04,0x00,0x7C,0x00,0x04,0x01,0x83,0x00,0x04,0x01,0x01,0x00,0x04,0x02,0x00,0x80,0x14,0x7E,0x00,0x80,0xE4,0x81,0x00,0x8F,0xE4,0x80,0xC0,0xBF,0xE4,0xC0,0x20,0xB1,0xC4,0x5F,0x90,0x80,0xC4,0x20,0x48,0x80,0x04,0x10,0x04,0x80,0x38,0x08,0x02,0x83,0xC0,0x04,0x01,0x9C,0x00,0x03,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // S -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xF0,0x00,0x00,0x08,0x10,0x00,0x00,0x08,0x10,0x00,0x00,0x78,0x0F,0xFE,0x00,0x40,0x00,0x02,0x00,0x40,0x00,0x02,0x00,0x41,0xFF,0xFF,0xF8,0x41,0x00,0x00,0x08,0x42,0x00,0x00,0x10,0x42,0x00,0x00,0x10,0x44,0x00,0x00,0x20,0x48,0x00,0x00,0x20,0x48,0x00,0x00,0x40,0x50,0x00,0x00,0x80,0x50,0x00,0x00,0x80,0x60,0x00,0x01,0x00,0x60,0x00,0x01,0x00,0x7F,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // T -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xE0,0x00,0x00,0x3F,0xF0,0x00,0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x00,0x07,0xFF,0xFF,0x80,0x07,0xFF,0xFF,0x80,0x07,0xFF,0xFF,0x80,0x07,0xFF,0xFF,0x80,0x07,0xFF,0xFF,0x80,0x07,0xFF,0xFF,0x80,0x07,0xFF,0xFF,0x80,0x07,0xFF,0xFF,0x80,0x07,0xFF,0xFF,0x80,0x07,0xFF,0xFF,0x80,0x07,0xFF,0xFF,0x80,0x07,0xFF,0xFF,0x80,0x07,0xFF,0xFF,0x80,0x07,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // U -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xE0,0x00,0x00,0x1F,0xF0,0x00,0x07,0x3F,0xF8,0x00,0x07,0x40,0x04,0x00,0x07,0xFF,0xFF,0xC0,0x07,0xFF,0xFF,0xC0,0x07,0xF8,0x3F,0xC0,0x07,0xF0,0x1F,0xC0,0x07,0xE0,0x0F,0xC0,0x07,0xE0,0x0F,0xC0,0x07,0xE0,0x0F,0xC0,0x07,0xE0,0x0F,0xC0,0x07,0xE0,0x0F,0xC0,0x07,0xF0,0x1F,0xC0,0x07,0xF8,0x3F,0xC0,0x07,0xFF,0xFF,0xC0,0x07,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // V -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xC0,0x00,0x00,0x30,0x30,0x00,0x00,0x40,0x08,0x00,0x00,0x83,0x04,0x00,0x01,0x03,0x02,0x00,0x01,0x03,0x02,0x00,0x02,0x03,0x01,0x00,0x02,0x03,0x01,0x00,0x02,0x03,0xF9,0x00,0x02,0x03,0xF9,0x00,0x02,0x00,0x01,0x00,0x02,0x00,0x01,0x00,0x01,0x00,0x02,0x00,0x01,0x00,0x02,0x00,0x00,0x80,0x04,0x00,0x00,0x40,0x08,0x00,0x00,0x30,0x30,0x00,0x00,0x0F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // W -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x10,0x80,0x00,0x00,0x10,0x80,0x03,0xC0,0x10,0x80,0x1F,0xE0,0x0F,0xF0,0x7F,0x00,0x00,0x3F,0xF8,0x00,0x00,0x1F,0xE0,0x00,0x00,0x1F,0xE0,0x00,0x00,0x3F,0xF8,0x00,0x0F,0xF0,0x7F,0x00,0x10,0x80,0x1F,0xC0,0x10,0x80,0x03,0xE0,0x10,0x80,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // X -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xC0,0x00,0x00,0x18,0x30,0x00,0x00,0x33,0xD8,0x00,0x00,0x2C,0x68,0x00,0x00,0x50,0x14,0x00,0x00,0x50,0x14,0x00,0x00,0x50,0x14,0x00,0x00,0x50,0x14,0x00,0x00,0xFF,0xFE,0x00,0x00,0xFF,0xFE,0x00,0x00,0xFE,0xFE,0x00,0x00,0xFC,0x7E,0x00,0x00,0xFE,0xFE,0x00,0x00,0xFE,0xFE,0x00,0x00,0x7E,0xFC,0x00,0x00,0x3F,0xF8,0x00,0x00,0x1F,0xF0,0x00,0x00,0x07,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Y -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x01,0xFC,0x00,0x00,0x03,0xFE,0x00,0x00,0x07,0xC7,0x00,0x00,0x07,0xC7,0x00,0x00,0x07,0xC7,0x00,0x00,0x07,0xFF,0x00,0x00,0x0F,0xFF,0x00,0x00,0x0F,0xFE,0x00,0x00,0x0F,0xFC,0x00,0x00,0x3F,0xF8,0x00,0x00,0x3F,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,0xFC,0x00,0x00,0x03,0xF8,0x00,0x00,0x03,0xF0,0x00,0x00,0x03,0xE0,0x00,0x00,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // Z -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xF0,0x00,0x00,0x20,0x10,0x00,0x00,0x40,0x08,0x00,0x00,0x40,0x08,0x00,0x00,0x40,0x08,0x00,0x00,0x80,0x04,0x00,0x01,0xFF,0xFF,0x00,0x03,0x9F,0xE7,0x00,0x03,0x0F,0xC3,0x00,0x03,0x0F,0xC3,0x00,0x03,0x9F,0xE7,0x00,0x03,0xFF,0xFF,0x00,0x00,0xE0,0x1C,0x00,0x00,0xE0,0x1C,0x00,0x00,0xE0,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // [ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x04,0x80,0x00,0x00,0x1F,0xE0,0x00,0x00,0x20,0x10,0x00,0x00,0x40,0x10,0x00,0x00,0x40,0x08,0x00,0x00,0x40,0x08,0x00,0x00,0x80,0x04,0x00,0x01,0xFF,0xFF,0x00,0x03,0x9F,0xE7,0x00,0x03,0x0F,0xC3,0x00,0x03,0x0F,0xC3,0x00,0x03,0x9F,0xE7,0x00,0x03,0xFF,0xFF,0x00,0x00,0xE0,0x1C,0x00,0x00,0xE0,0x1C,0x00,0x00,0xE0,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFC,0x00,0x00,0xE0,0x1C,0x00,0x01,0xE0,0x1E,0x00,0x01,0xFF,0xFE,0x00,0x01,0x00,0x02,0x00,0x01,0x00,0x02,0x00,0x01,0x00,0x02,0x00,0x01,0x00,0x02,0x00,0x01,0x00,0x02,0x00,0x01,0xFF,0xFE,0x00,0x01,0xCF,0xCE,0x00,0x01,0x87,0x86,0x00,0x01,0x87,0x86,0x00,0x01,0xCF,0xCE,0x00,0x01,0xFF,0xFE,0x00,0x00,0x70,0x38,0x00,0x00,0x70,0x38,0x00,0x00,0x70,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ] -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFC,0x00,0x00,0x7F,0xFC,0x00,0x00,0x40,0x04,0x00,0x00,0x40,0x04,0x00,0x00,0x40,0x04,0x00,0x00,0x40,0x04,0x00,0x00,0x40,0x04,0x00,0x00,0x40,0x04,0x00,0x00,0x40,0x04,0x00,0x00,0x7F,0xFC,0x00,0x00,0x47,0x8C,0x00,0x00,0x47,0x8C,0x00,0x00,0x47,0x8C,0x00,0x00,0x7F,0xFC,0x00,0x00,0x30,0x18,0x00,0x00,0x20,0x08,0x00,0x00,0x40,0x04,0x00,0x01,0x80,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ^ -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x07,0x80,0x00,0x01,0x07,0x80,0x00,0x01,0x87,0xC0,0x00,0x01,0x87,0xC0,0x00,0x01,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x80,0x01,0xFF,0xFF,0x80,0x01,0x87,0xC0,0x00,0x01,0x87,0x80,0x00,0x01,0x07,0x80,0x00,0x00,0x07,0x80,0x00,0x00,0x07,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // _ - -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xC0,0x00,0x0F,0xFF,0xC0,0x00,0x0F,0xFF,0xC0,0x00,0x0F,0xFF,0xFF,0x00,0x0F,0xFF,0xF8,0x80,0x0F,0xFF,0xF8,0x80,0x0F,0xFF,0xF8,0x80,0x0F,0xFF,0xF8,0x40,0x00,0x00,0x3F,0xC0,0x0F,0xFF,0xFF,0xC0,0x0F,0x01,0xF9,0xC0,0x0E,0xC6,0xF6,0xC0,0x0D,0xEF,0x6F,0x40,0x01,0xEF,0x0F,0x00,0x00,0xC6,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ` -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x06,0x60,0x00,0x00,0x08,0x20,0x00,0x00,0x1E,0x20,0x00,0x00,0x6E,0x40,0x00,0x00,0xB5,0x80,0x00,0x03,0x4B,0x00,0x00,0x04,0x94,0x00,0x00,0x1B,0x68,0x00,0x00,0x24,0xB0,0x00,0x00,0x5B,0x40,0x00,0x01,0xA5,0x80,0x00,0x01,0x5A,0x00,0x00,0x02,0x6C,0x00,0x00,0x04,0x50,0x00,0x00,0x0C,0xE0,0x00,0x00,0x0F,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // a -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x33,0x80,0x00,0x00,0x47,0x80,0x00,0x00,0x8E,0x63,0xF0,0x01,0x1C,0x1E,0x70,0x01,0x38,0x02,0x70,0x02,0x38,0x02,0x70,0x02,0x7B,0x02,0x70,0x04,0x7C,0x02,0x70,0x04,0x80,0x02,0x70,0x07,0x80,0x06,0x70,0x0B,0x7F,0xFB,0xF0,0x0A,0x00,0x00,0x70,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // b -0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x01,0xF8,0x00,0x00,0x03,0xF8,0x00,0x00,0x03,0xF0,0x00,0x00,0x07,0xF0,0x00,0x00,0x05,0xF0,0x00,0x00,0x0F,0x60,0x00,0x00,0x0D,0xC0,0x00,0x00,0x0F,0x60,0x00,0x00,0x0B,0xC0,0x00,0x00,0x16,0x80,0x00,0x00,0x12,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // c -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFC,0x00,0x00,0x18,0x1C,0x00,0x00,0x3F,0xE4,0x00,0x00,0x20,0x24,0x00,0x00,0x27,0x24,0x00,0x00,0x20,0x24,0x00,0x00,0x20,0x24,0x00,0x00,0x20,0x24,0x00,0x00,0x20,0x24,0x00,0x00,0x20,0x24,0x00,0x00,0x3F,0xE4,0x00,0x00,0x20,0x24,0x00,0x00,0x27,0x24,0x00,0x00,0x20,0x24,0x00,0x00,0x20,0x24,0x00,0x00,0x20,0x28,0x00,0x00,0x20,0x30,0x00,0x00,0x3F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // d -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xE0,0x00,0x00,0x20,0x10,0x00,0x00,0x20,0x10,0x00,0x00,0x30,0x50,0x00,0x00,0x2F,0xD0,0x00,0x00,0x17,0xE0,0x00,0x00,0x13,0xA0,0x00,0x00,0x0B,0x40,0x00,0x00,0x05,0x80,0x00,0x00,0x05,0x80,0x00,0x00,0x09,0x40,0x00,0x00,0x11,0x20,0x00,0x00,0x11,0x20,0x00,0x00,0x21,0x10,0x00,0x00,0x27,0x90,0x00,0x00,0x2F,0xD0,0x00,0x00,0x2F,0xD0,0x00,0x00,0x1F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // e -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFD,0xFF,0x00,0x0C,0x07,0x01,0x80,0x3C,0x02,0x01,0xE0,0x34,0x02,0x01,0x60,0x34,0x02,0x01,0x60,0x34,0x02,0x01,0x60,0x34,0x02,0x01,0x60,0x34,0x02,0x01,0x60,0x34,0x02,0x01,0x60,0x34,0x02,0x01,0x60,0x34,0x02,0x01,0x60,0x34,0x02,0x01,0x60,0x34,0x02,0x01,0x60,0x37,0xFA,0xFF,0x60,0x38,0x07,0x01,0x60,0x38,0x02,0x00,0xE0,0x3F,0xFA,0xFF,0xE0,0x00,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // f -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x00,0x80,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0x80,0x3E,0x00,0x00,0x80,0x24,0x00,0x00,0x80,0x28,0x00,0x00,0x80,0x30,0x00,0x00,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // g -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFE,0x00,0x00,0x80,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0xBF,0x82,0x00,0x00,0x80,0x02,0x00,0x00,0x80,0x02,0x00,0x00,0xBF,0xFA,0x00,0x00,0xBF,0xFA,0x00,0x00,0x80,0x02,0x00,0x00,0xBF,0xFA,0x00,0x00,0x80,0x02,0x00,0x00,0xBF,0xFA,0x00,0x00,0x80,0x02,0x00,0x00,0xBF,0xBE,0x00,0x00,0x80,0x24,0x00,0x00,0x80,0x28,0x00,0x00,0x80,0x30,0x00,0x00,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // h -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0x80,0x00,0x08,0x00,0x80,0x00,0x08,0x00,0x80,0x00,0x7F,0xFC,0x80,0x00,0x40,0x04,0x80,0x01,0xFF,0xF4,0x80,0x01,0x00,0x14,0x80,0x01,0x00,0x14,0x80,0x01,0x7F,0x94,0x80,0x01,0x00,0x14,0x80,0x01,0x7F,0x94,0x80,0x01,0x00,0x14,0x80,0x01,0x7F,0x94,0x80,0x01,0x00,0x14,0x80,0x01,0x00,0x14,0x80,0x01,0x7F,0x94,0x80,0x01,0x00,0x14,0x80,0x01,0x7F,0x97,0x80,0x01,0x00,0x14,0x00,0x01,0x7E,0x14,0x00,0x01,0x00,0x1C,0x00,0x01,0xFF,0xF0,0x00, // i -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xE0,0x08,0x00,0x00,0x20,0x08,0x00,0x03,0xA0,0x09,0xFC,0x03,0xA0,0x08,0x00,0x03,0xA0,0x09,0xFC,0x03,0xA0,0x08,0x00,0x03,0xA0,0x08,0x00,0x00,0x20,0x08,0x00,0x00,0x20,0x08,0x00,0x00,0x20,0x09,0xFF,0xF8,0x20,0x08,0x00,0x00,0x20,0x09,0xFF,0xF8,0x20,0x08,0x00,0x00,0x20,0x09,0xFF,0xF8,0x20,0x08,0x00,0x00,0x20,0x08,0x00,0x00,0x20,0x0F,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // j -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xE0,0x0C,0x00,0x00,0x60,0x0A,0x00,0x00,0xA0,0x09,0x00,0x01,0x20,0x08,0x80,0x02,0x20,0x08,0x40,0x04,0x20,0x08,0x20,0x08,0x20,0x08,0x10,0x10,0x20,0x08,0x08,0x20,0x20,0x08,0x0C,0x60,0x20,0x08,0x1A,0xB0,0x20,0x08,0x23,0x88,0x20,0x08,0x40,0x04,0x20,0x08,0x80,0x02,0x20,0x09,0x00,0x01,0x20,0x0A,0x00,0x00,0xA0,0x0C,0x00,0x00,0x60,0x0F,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // k -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFC,0x00,0x01,0xE0,0x1E,0x00,0x01,0xE0,0xDE,0x00,0x01,0xE0,0xDE,0x00,0x01,0xE0,0xDE,0x00,0x01,0xE0,0xDE,0x00,0x01,0xE0,0x1E,0x00,0x01,0xFF,0xFE,0x00,0x01,0x80,0x06,0x00,0x01,0x80,0x06,0x00,0x01,0x80,0x06,0x00,0x01,0x80,0x06,0x00,0x01,0x80,0x06,0x00,0x01,0x80,0x06,0x00,0x01,0x80,0x06,0x00,0x01,0x80,0x06,0x00,0x01,0x80,0x06,0x00,0x01,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // l -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0xFF,0x00,0x02,0x00,0x03,0x00,0x02,0x00,0x03,0x00,0x02,0x00,0x03,0x00,0x02,0x00,0x02,0x00,0x03,0xFF,0xFF,0x00,0x03,0xFF,0xFF,0x00,0x03,0xF8,0xFF,0x00,0x03,0xF0,0x7F,0x00,0x03,0xF0,0x7F,0x00,0x03,0xF0,0x7F,0x00,0x03,0xF8,0xFF,0x00,0x03,0xFF,0xFF,0x00,0x03,0xFC,0xFF,0x00,0x03,0xFC,0xFF,0x00,0x03,0xFC,0xFF,0x00,0x03,0xFC,0xFF,0x00,0x03,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // m -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,0x80,0x07,0xFF,0xFF,0x80,0x07,0xFF,0xFF,0x80,0x04,0xF8,0x7C,0x80,0x04,0x8C,0xC4,0x80,0x05,0x8C,0xC6,0x80,0x05,0x8C,0xC6,0x80,0x04,0xFC,0xFC,0x80,0x04,0xF8,0x7C,0x80,0x07,0xFF,0xFF,0x80,0x07,0xFF,0xFF,0x80,0x06,0xFF,0xFD,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // n -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xC0,0x00,0x00,0x3E,0x30,0x00,0x00,0x7E,0x08,0x00,0x00,0xFE,0x04,0x00,0x01,0x78,0x02,0x00,0x01,0xF7,0x82,0x00,0x02,0xF8,0x61,0x00,0x03,0xF0,0x31,0x00,0x03,0xE3,0x11,0x00,0x03,0xE3,0x1F,0x00,0x02,0x23,0x1F,0x00,0x02,0x10,0x3F,0x00,0x01,0x18,0x7E,0x00,0x01,0x07,0xFE,0x00,0x00,0x81,0xFC,0x00,0x00,0x41,0xF8,0x00,0x00,0x31,0xF0,0x00,0x00,0x0F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // o - -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xC0,0x00,0x00,0x31,0xF0,0x00,0x00,0x5F,0xF8,0x00,0x00,0xA7,0xFC,0x00,0x01,0xD9,0xFE,0x00,0x01,0xA7,0xFE,0x00,0x01,0xD8,0x3E,0x00,0x03,0xA0,0x1F,0x00,0x03,0xA3,0x1F,0x00,0x03,0xE3,0x1F,0x00,0x03,0xE3,0x1D,0x00,0x01,0xE0,0x2E,0x00,0x01,0xF0,0x3A,0x00,0x01,0xFF,0xEA,0x00,0x00,0xFE,0x74,0x00,0x00,0x7F,0xC8,0x00,0x00,0x3E,0x30,0x00,0x00,0x0F,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // p -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFE,0x00,0x01,0x00,0x02,0x00,0x01,0x7F,0xFE,0x00,0x01,0x40,0x06,0x00,0x01,0x40,0x06,0x00,0x01,0x40,0x06,0x00,0x01,0x40,0x06,0x00,0x01,0x40,0x06,0x00,0x01,0x40,0x06,0x00,0x01,0x40,0x06,0x00,0x01,0x7F,0xFE,0x00,0x01,0xFF,0xFE,0x00,0x01,0xFF,0xFF,0x00,0x01,0x00,0x01,0x00,0x03,0x6F,0x79,0x80,0x02,0xDF,0xBC,0x80,0x02,0x00,0x00,0x80,0x03,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // q -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xFE,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x1F,0xFF,0xFF,0xC0,0x10,0x00,0x00,0x40,0x10,0x00,0x00,0x40,0x17,0xBD,0xED,0xC0,0x10,0x00,0x00,0x40,0x17,0xBD,0xED,0xC0,0x10,0x00,0x00,0x40,0x17,0x7E,0xED,0xC0,0x10,0x00,0x00,0x40,0x10,0x00,0x00,0x40,0x1F,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // r -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xF0,0x00,0x00,0x40,0x08,0x00,0x00,0x40,0x08,0x00,0x00,0x40,0x08,0x00,0x00,0x40,0x7F,0x00,0x00,0x40,0x89,0x80,0x00,0x40,0x88,0x80,0x03,0x80,0xFF,0x80,0x00,0x00,0x80,0x80,0x00,0x00,0x80,0x80,0x00,0x00,0x80,0x80,0x00,0x00,0x80,0x80,0x00,0x00,0x80,0x80,0x00,0x00,0x80,0x80,0x00,0x00,0xC1,0x80,0x00,0x00,0x63,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // s -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0x00,0x01,0x00,0x01,0x00,0x01,0x3F,0xF9,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x09,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // t -0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x07,0xC0,0x00,0x00,0x0B,0xA0,0x00,0x00,0x0B,0xA0,0x00,0x00,0x09,0x20,0x00,0x00,0x09,0x20,0x00,0x00,0x07,0xC0,0x00,0x00,0x05,0x20,0x00,0x00,0x1A,0x20,0x00,0x00,0x13,0x10,0x00,0x00,0x12,0x90,0x00,0x00,0x1C,0x78,0x00,0x00,0x1C,0x38,0x00,0x00,0x1C,0x38,0x00,0x00,0x1C,0x38,0x00,0x00,0x1C,0x38,0x00,0x00,0x0C,0x30,0x00,0x00,0x0E,0x70,0x00,0x00,0x06,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // u -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x70,0x00,0x00,0x25,0x78,0x00,0x00,0x27,0xF8,0x00,0x00,0x1F,0xF0,0x00,0x00,0x7F,0xE0,0x00,0x00,0xFF,0x80,0x00,0x01,0xFF,0x80,0x00,0x01,0xFC,0x80,0x00,0x00,0xF2,0x40,0x00,0x00,0xE2,0x20,0x00,0x00,0x01,0x20,0x00,0x00,0x01,0x10,0x00,0x00,0x00,0x90,0x00,0x00,0x00,0x88,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // v -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x21,0x00,0x00,0x00,0x47,0x80,0x00,0x00,0x88,0x00,0x00,0x03,0x07,0x80,0x01,0xEC,0x21,0x00,0x02,0x10,0xDE,0x00,0x07,0x83,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xC8,0x00,0x00,0x07,0x90,0x00,0x00,0x02,0x10,0x00,0x00,0x01,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // w -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x1F,0x80,0x00,0x00,0x3F,0x80,0x00,0x00,0x7F,0x80,0x00,0x00,0x7F,0x00,0x00,0x00,0x7E,0x00,0x00,0x01,0xFC,0x00,0x00,0x00,0xF8,0x00,0x00,0x01,0x60,0x00,0x00,0x02,0xA0,0x00,0x00,0x05,0x00,0x00,0x00,0x0A,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0xD0,0x00,0x00,0x01,0x20,0x00,0x00,0x02,0x20,0x00,0x00,0x02,0x40,0x00,0x00,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // x -0x00,0x0F,0xFC,0x00,0x00,0x08,0x06,0x00,0x00,0x0B,0xF7,0x00,0x00,0x08,0x00,0x80,0x00,0x0B,0xFE,0x80,0x00,0x08,0x00,0x80,0x07,0xFB,0xFE,0xC0,0x06,0x48,0x00,0xC0,0x06,0x4B,0x80,0xC0,0x06,0x48,0x00,0xC0,0x06,0x5F,0xFF,0xC0,0x06,0x50,0x00,0x40,0x06,0x50,0x6F,0x40,0x06,0x50,0x6F,0x40,0x06,0x50,0x6F,0x40,0x06,0x57,0x6F,0x40,0x06,0x57,0x6F,0x40,0x06,0x57,0x6F,0x40,0x07,0xD0,0x00,0x40,0x07,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // y -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xF0,0x00,0x00,0x80,0x38,0x00,0x00,0x80,0x3C,0x00,0x00,0x80,0x3C,0x00,0x00,0x80,0x04,0x00,0x00,0x80,0x04,0x00,0x00,0x80,0x04,0x00,0x00,0x80,0x04,0x00,0x03,0xFF,0xFF,0x00,0x02,0x00,0x01,0x00,0x0F,0xFF,0xFF,0xC0,0x09,0x24,0x80,0x40,0x09,0x24,0x80,0x40,0x09,0xFF,0x80,0x40,0x08,0x00,0x00,0x40,0x08,0x00,0x00,0x40,0x0F,0xFF,0xFF,0xC0,0x03,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // z -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x7B,0xE0,0x00,0x00,0x7A,0x20,0x00,0x00,0x7A,0x20,0x00,0x00,0xFE,0x3C,0x00,0x00,0x80,0x04,0x00,0x03,0xBF,0x77,0x00,0x02,0x00,0x01,0x00,0x02,0x00,0x01,0x00,0x03,0xFF,0xFF,0x00,0x01,0xFF,0xFE,0x00,0x01,0xFF,0xFC,0x00,0x01,0xFF,0xFC,0x00,0x00,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // { -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x0D,0x80,0x00,0x00,0x1A,0xC0,0x00,0x00,0x15,0x40,0x00,0x00,0x17,0x40,0x00,0x00,0x12,0x40,0x00,0x00,0x67,0x30,0x00,0x00,0xD2,0x58,0x00,0x01,0x97,0x4C,0x00,0x02,0x17,0x42,0x00,0x02,0x12,0x42,0x00,0x02,0x18,0xC2,0x00,0x03,0xE7,0x3E,0x00,0x03,0xE7,0x3E,0x00,0x00,0x3D,0xE0,0x00,0x00,0x3D,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0xC0,0x00,0x00,0x3D,0xE0,0x00,0x00,0x0A,0x80,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00, // | -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x77,0xFF,0xC0,0x00,0x37,0xFD,0xC0,0x00,0x2F,0xF8,0x00,0x03,0xEF,0xE7,0x00,0x04,0x67,0xE8,0x80,0x08,0x93,0xD0,0x40,0x09,0x91,0xFE,0x40,0x0B,0xD0,0xFE,0x40,0x09,0x10,0x10,0x40,0x04,0x20,0x08,0x80,0x03,0xC0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // } -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x1F,0xF0,0x00,0x00,0x34,0x30,0x00,0x03,0xE4,0x4F,0x80,0x06,0x72,0x5C,0xC0,0x0C,0x5A,0x94,0x60,0x08,0xC9,0xA6,0x20,0x08,0x89,0xFE,0x20,0x08,0x08,0x20,0x20,0x0C,0x10,0x10,0x60,0x06,0x30,0x18,0xC0,0x03,0xE0,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ~ -}; diff --git a/libraries/UTFT_Buttons/hardware/arm/HW_ARM_defines.h b/libraries/UTFT_Buttons/hardware/arm/HW_ARM_defines.h deleted file mode 100644 index d97e072..0000000 --- a/libraries/UTFT_Buttons/hardware/arm/HW_ARM_defines.h +++ /dev/null @@ -1 +0,0 @@ -#define bitmapdatatype unsigned short* diff --git a/libraries/UTFT_Buttons/hardware/avr/HW_AVR_defines.h b/libraries/UTFT_Buttons/hardware/avr/HW_AVR_defines.h deleted file mode 100644 index 767d242..0000000 --- a/libraries/UTFT_Buttons/hardware/avr/HW_AVR_defines.h +++ /dev/null @@ -1 +0,0 @@ -#define bitmapdatatype unsigned int* diff --git a/libraries/UTFT_Buttons/hardware/pic32/HW_PIC32_defines.h b/libraries/UTFT_Buttons/hardware/pic32/HW_PIC32_defines.h deleted file mode 100644 index 05a1580..0000000 --- a/libraries/UTFT_Buttons/hardware/pic32/HW_PIC32_defines.h +++ /dev/null @@ -1,2 +0,0 @@ -#define bitmapdatatype unsigned short* - diff --git a/libraries/UTFT_Buttons/keywords.txt b/libraries/UTFT_Buttons/keywords.txt deleted file mode 100644 index 31c2cbf..0000000 --- a/libraries/UTFT_Buttons/keywords.txt +++ /dev/null @@ -1,22 +0,0 @@ -UTFT_Buttons KEYWORD1 - -addButton KEYWORD2 -drawButtons KEYWORD2 -drawButton KEYWORD2 -enableButton KEYWORD2 -disableButton KEYWORD2 -relabelButton KEYWORD2 -buttonEnabled KEYWORD2 -deleteButton KEYWORD2 -deleteAllButtons KEYWORD2 -checkButtons KEYWORD2 -setTextFont KEYWORD2 -setSymbolFont KEYWORD2 -setButtonColors KEYWORD2 - -BUTTON_DISABLED LITERAL1 -BUTTON_SYMBOL LITERAL1 -BUTTON_SYMBOL_REP_3X LITERAL1 -BUTTON_BITMAP LITERAL1 -BUTTON_NO_BORDER LITERAL1 -BUTTON_UNUSED LITERAL1 diff --git a/libraries/UTFT_Buttons/version.txt b/libraries/UTFT_Buttons/version.txt deleted file mode 100644 index 877994d..0000000 --- a/libraries/UTFT_Buttons/version.txt +++ /dev/null @@ -1,3 +0,0 @@ -Version: - 1.0 24 May 2013 - initial release - 1.01 08 Sep 2014 - fixed compatibility-issues with Arduino 1.5.7 diff --git a/libraries/UTouch/License - CC BY-NC-SA 3.0 - Legal.pdf b/libraries/UTouch/License - CC BY-NC-SA 3.0 - Legal.pdf deleted file mode 100644 index ed326c9..0000000 Binary files a/libraries/UTouch/License - CC BY-NC-SA 3.0 - Legal.pdf and /dev/null differ diff --git a/libraries/UTouch/License - CC BY-NC-SA 3.0 - Summary.pdf b/libraries/UTouch/License - CC BY-NC-SA 3.0 - Summary.pdf deleted file mode 100644 index b35e677..0000000 Binary files a/libraries/UTouch/License - CC BY-NC-SA 3.0 - Summary.pdf and /dev/null differ diff --git a/libraries/UTouch/UTouch.cpp b/libraries/UTouch/UTouch.cpp deleted file mode 100644 index f5aad74..0000000 --- a/libraries/UTouch/UTouch.cpp +++ /dev/null @@ -1,262 +0,0 @@ -/* - UTouch.cpp - Arduino/chipKit library support for Color TFT LCD Touch screens - Copyright (C)2010-2014 Henning Karlsen. All right reserved - - Basic functionality of this library are based on the demo-code provided by - ITead studio. You can find the latest version of the library at - http://www.henningkarlsen.com/electronics - - If you make any modifications or improvements to the code, I would appreciate - that you share the code with me so that I might include it in the next release. - I can be contacted through http://www.henningkarlsen.com/electronics/contact.php - - This library is free software; you can redistribute it and/or - modify it under the terms of the CC BY-NC-SA 3.0 license. - Please see the included documents for further information. - - Commercial use of this library requires you to buy a license that - will allow commercial use. This includes using the library, - modified or not, as a tool to sell products. - - The license applies to all part of the library including the - examples and tools supplied with the library. -*/ - -#include "UTouch.h" -#include "UTouchCD.h" - -#if defined(__AVR__) - #include "hardware/avr/HW_AVR.inc" -#elif defined(__PIC32MX__) - #include "hardware/pic32/HW_PIC32.inc" -#elif defined(__arm__) - #include "hardware/arm/HW_ARM.inc" -#endif - -UTouch::UTouch(byte tclk, byte tcs, byte din, byte dout, byte irq) -{ - T_CLK = tclk; - T_CS = tcs; - T_DIN = din; - T_DOUT = dout; - T_IRQ = irq; -} - -void UTouch::InitTouch(byte orientation) -{ - orient = orientation; - _default_orientation = CAL_S>>31; - touch_x_left = (CAL_X>>14) & 0x3FFF; - touch_x_right = CAL_X & 0x3FFF; - touch_y_top = (CAL_Y>>14) & 0x3FFF; - touch_y_bottom = CAL_Y & 0x3FFF; - disp_x_size = (CAL_S>>12) & 0x0FFF; - disp_y_size = CAL_S & 0x0FFF; - prec = 10; - - P_CLK = portOutputRegister(digitalPinToPort(T_CLK)); - B_CLK = digitalPinToBitMask(T_CLK); - P_CS = portOutputRegister(digitalPinToPort(T_CS)); - B_CS = digitalPinToBitMask(T_CS); - P_DIN = portOutputRegister(digitalPinToPort(T_DIN)); - B_DIN = digitalPinToBitMask(T_DIN); - P_DOUT = portInputRegister(digitalPinToPort(T_DOUT)); - B_DOUT = digitalPinToBitMask(T_DOUT); - P_IRQ = portInputRegister(digitalPinToPort(T_IRQ)); - B_IRQ = digitalPinToBitMask(T_IRQ); - - pinMode(T_CLK, OUTPUT); - pinMode(T_CS, OUTPUT); - pinMode(T_DIN, OUTPUT); - pinMode(T_DOUT, INPUT); - pinMode(T_IRQ, OUTPUT); - - sbi(P_CS, B_CS); - sbi(P_CLK, B_CLK); - sbi(P_DIN, B_DIN); - sbi(P_IRQ, B_IRQ); -} - -void UTouch::read() -{ - unsigned long tx=0, temp_x=0; - unsigned long ty=0, temp_y=0; - unsigned long minx=99999, maxx=0; - unsigned long miny=99999, maxy=0; - int datacount=0; - - cbi(P_CS, B_CS); - - pinMode(T_IRQ, INPUT); - for (int i=0; i0) and (temp_x<4096) and (temp_y>0) and (temp_y<4096)) - { - tx+=temp_x; - ty+=temp_y; - if (prec>5) - { - if (temp_xmaxx) - maxx=temp_x; - if (temp_ymaxy) - maxy=temp_y; - } - datacount++; - } - } - } - } - pinMode(T_IRQ, OUTPUT); - - if (prec>5) - { - tx = tx-(minx+maxx); - ty = ty-(miny+maxy); - datacount -= 2; - } - - sbi(P_CS, B_CS); - if ((datacount==(prec-2)) or (datacount==PREC_LOW)) - { - if (orient == _default_orientation) - { - TP_X=ty/datacount; - TP_Y=tx/datacount; - } - else - { - TP_X=tx/datacount; - TP_Y=ty/datacount; - } - } - else - { - TP_X=-1; - TP_Y=-1; - } -} - -bool UTouch::dataAvailable() -{ - bool avail; - pinMode(T_IRQ, INPUT); - avail = !(rbi(P_IRQ, B_IRQ)); - pinMode(T_IRQ, OUTPUT); - return avail; -} - -int16_t UTouch::getX() -{ - long c; - - if ((TP_X==-1) or (TP_Y==-1)) - return -1; - if (orient == _default_orientation) - { - c = long(long(TP_X - touch_x_left) * (disp_x_size)) / long(touch_x_right - touch_x_left); - if (c<0) - c = 0; - if (c>disp_x_size) - c = disp_x_size; - } - else - { - if (_default_orientation == PORTRAIT) - c = long(long(TP_X - touch_y_top) * (-disp_y_size)) / long(touch_y_bottom - touch_y_top) + long(disp_y_size); - else - c = long(long(TP_X - touch_y_top) * (disp_y_size)) / long(touch_y_bottom - touch_y_top); - if (c<0) - c = 0; - if (c>disp_y_size) - c = disp_y_size; - } - return c; -} - -int16_t UTouch::getY() -{ - int c; - - if ((TP_X==-1) or (TP_Y==-1)) - return -1; - if (orient == _default_orientation) - { - c = long(long(TP_Y - touch_y_top) * (disp_y_size)) / long(touch_y_bottom - touch_y_top); - if (c<0) - c = 0; - if (c>disp_y_size) - c = disp_y_size; - } - else - { - if (_default_orientation == PORTRAIT) - c = long(long(TP_Y - touch_x_left) * (disp_x_size)) / long(touch_x_right - touch_x_left); - else - c = long(long(TP_Y - touch_x_left) * (-disp_x_size)) / long(touch_x_right - touch_x_left) + long(disp_x_size); - if (c<0) - c = 0; - if (c>disp_x_size) - c = disp_x_size; - } - return c; -} - -void UTouch::setPrecision(byte precision) -{ - switch (precision) - { - case PREC_LOW: - prec=1; // DO NOT CHANGE! - break; - case PREC_MEDIUM: - prec=12; // Iterations + 2 - break; - case PREC_HI: - prec=27; // Iterations + 2 - break; - case PREC_EXTREME: - prec=102; // Iterations + 2 - break; - default: - prec=12; // Iterations + 2 - break; - } -} - -void UTouch::calibrateRead() -{ - unsigned long tx=0; - unsigned long ty=0; - - cbi(P_CS, B_CS); - - touch_WriteData(0x90); - pulse_high(P_CLK, B_CLK); - tx=touch_ReadData(); - - touch_WriteData(0xD0); - pulse_high(P_CLK, B_CLK); - ty=touch_ReadData(); - - sbi(P_CS, B_CS); - - TP_X=ty; - TP_Y=tx; -} - diff --git a/libraries/UTouch/UTouch.h b/libraries/UTouch/UTouch.h deleted file mode 100644 index a087db7..0000000 --- a/libraries/UTouch/UTouch.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - UTouch.h - Arduino/chipKit library support for Color TFT LCD Touch screens - Copyright (C)2010-2014 Henning Karlsen. All right reserved - - Basic functionality of this library are based on the demo-code provided by - ITead studio. You can find the latest version of the library at - http://www.henningkarlsen.com/electronics - - If you make any modifications or improvements to the code, I would appreciate - that you share the code with me so that I might include it in the next release. - I can be contacted through http://www.henningkarlsen.com/electronics/contact.php - - This library is free software; you can redistribute it and/or - modify it under the terms of the CC BY-NC-SA 3.0 license. - Please see the included documents for further information. - - Commercial use of this library requires you to buy a license that - will allow commercial use. This includes using the library, - modified or not, as a tool to sell products. - - The license applies to all part of the library including the - examples and tools supplied with the library. -*/ - -#ifndef UTouch_h -#define UTouch_h - -#define UTOUCH_VERSION 124 - -#if defined(__AVR__) - #include "Arduino.h" - #include "hardware/avr/HW_AVR_defines.h" -#elif defined(__PIC32MX__) - #include "WProgram.h" - #include "hardware/pic32/HW_PIC32_defines.h" -#elif defined(__arm__) - #include "Arduino.h" - #include "hardware/arm/HW_ARM_defines.h" -#endif - -#define PORTRAIT 0 -#define LANDSCAPE 1 - -#define PREC_LOW 1 -#define PREC_MEDIUM 2 -#define PREC_HI 3 -#define PREC_EXTREME 4 - -class UTouch -{ - public: - int16_t TP_X ,TP_Y; - - UTouch(byte tclk, byte tcs, byte tdin, byte dout, byte irq); - - void InitTouch(byte orientation = LANDSCAPE); - void read(); - bool dataAvailable(); - int16_t getX(); - int16_t getY(); - void setPrecision(byte precision); - - void calibrateRead(); - - private: - regtype *P_CLK, *P_CS, *P_DIN, *P_DOUT, *P_IRQ; - regsize B_CLK, B_CS, B_DIN, B_DOUT, B_IRQ; - byte T_CLK, T_CS, T_DIN, T_DOUT, T_IRQ; - long _default_orientation; - byte orient; - byte prec; - byte display_model; - long disp_x_size, disp_y_size, default_orientation; - long touch_x_left, touch_x_right, touch_y_top, touch_y_bottom; - - void touch_WriteData(byte data); - word touch_ReadData(); -}; - -#endif \ No newline at end of file diff --git a/libraries/UTouch/UTouchCD.h b/libraries/UTouch/UTouchCD.h deleted file mode 100644 index de55930..0000000 --- a/libraries/UTouch/UTouchCD.h +++ /dev/null @@ -1,21 +0,0 @@ -// UTouchCD.h -// ---------- -// -// Since there are slight deviations in all touch screens you should run a -// calibration on your display module. Run the UTouch_Calibration sketch -// that came with this library and follow the on-screen instructions to -// update this file. -// -// Remember that is you have multiple display modules they will probably -// require different calibration data so you should run the calibration -// every time you switch to another module. -// You can, of course, store calibration data for all your modules here -// and comment out the ones you dont need at the moment. -// - -// These calibration settings works with my ITDB02-3.2S. -// They MIGHT work on your display module, but you should run the -// calibration sketch anyway. -#define CAL_X 0x00378F66UL -#define CAL_Y 0x03C34155UL -#define CAL_S 0x000EF13FUL diff --git a/libraries/UTouch/examples/Arduino/UTouch_ButtonTest/UTouch_ButtonTest.ino b/libraries/UTouch/examples/Arduino/UTouch_ButtonTest/UTouch_ButtonTest.ino deleted file mode 100644 index 35b842c..0000000 --- a/libraries/UTouch/examples/Arduino/UTouch_ButtonTest/UTouch_ButtonTest.ino +++ /dev/null @@ -1,253 +0,0 @@ -// UTouch_ButtonTest (C)2010-2014 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a quick demo of how create and use buttons. -// -// This program requires the UTFT library. -// -// It is assumed that the display module is connected to an -// appropriate shield or that you know how to change the pin -// numbers in the setup. -// - -#include -#include - -// Initialize display -// ------------------ -// Set the pins to the correct ones for your development board -// ----------------------------------------------------------- -// Standard Arduino Uno/2009 Shield : ,19,18,17,16 -// Standard Arduino Mega/Due shield : ,38,39,40,41 -// CTE TFT LCD/SD Shield for Arduino Due : ,25,26,27,28 -// Teensy 3.x TFT Test Board : ,23,22, 3, 4 -// ElecHouse TFT LCD/SD Shield for Arduino Due : ,22,23,31,33 -// -// Remember to change the model parameter to suit your display module! -UTFT myGLCD(ITDB32S,38,39,40,41); - -// Initialize touchscreen -// ---------------------- -// Set the pins to the correct ones for your development board -// ----------------------------------------------------------- -// Standard Arduino Uno/2009 Shield : 15,10,14, 9, 8 -// Standard Arduino Mega/Due shield : 6, 5, 4, 3, 2 -// CTE TFT LCD/SD Shield for Arduino Due : 6, 5, 4, 3, 2 -// Teensy 3.x TFT Test Board : 26,31,27,28,29 -// ElecHouse TFT LCD/SD Shield for Arduino Due : 25,26,27,29,30 -// -UTouch myTouch( 6, 5, 4, 3, 2); - -// Declare which fonts we will be using -extern uint8_t BigFont[]; - -int x, y; -char stCurrent[20]=""; -int stCurrentLen=0; -char stLast[20]=""; - -/************************* -** Custom functions ** -*************************/ - -void drawButtons() -{ -// Draw the upper row of buttons - for (x=0; x<5; x++) - { - myGLCD.setColor(0, 0, 255); - myGLCD.fillRoundRect (10+(x*60), 10, 60+(x*60), 60); - myGLCD.setColor(255, 255, 255); - myGLCD.drawRoundRect (10+(x*60), 10, 60+(x*60), 60); - myGLCD.printNumI(x+1, 27+(x*60), 27); - } -// Draw the center row of buttons - for (x=0; x<5; x++) - { - myGLCD.setColor(0, 0, 255); - myGLCD.fillRoundRect (10+(x*60), 70, 60+(x*60), 120); - myGLCD.setColor(255, 255, 255); - myGLCD.drawRoundRect (10+(x*60), 70, 60+(x*60), 120); - if (x<4) - myGLCD.printNumI(x+6, 27+(x*60), 87); - } - myGLCD.print("0", 267, 87); -// Draw the lower row of buttons - myGLCD.setColor(0, 0, 255); - myGLCD.fillRoundRect (10, 130, 150, 180); - myGLCD.setColor(255, 255, 255); - myGLCD.drawRoundRect (10, 130, 150, 180); - myGLCD.print("Clear", 40, 147); - myGLCD.setColor(0, 0, 255); - myGLCD.fillRoundRect (160, 130, 300, 180); - myGLCD.setColor(255, 255, 255); - myGLCD.drawRoundRect (160, 130, 300, 180); - myGLCD.print("Enter", 190, 147); - myGLCD.setBackColor (0, 0, 0); -} - -void updateStr(int val) -{ - if (stCurrentLen<20) - { - stCurrent[stCurrentLen]=val; - stCurrent[stCurrentLen+1]='\0'; - stCurrentLen++; - myGLCD.setColor(0, 255, 0); - myGLCD.print(stCurrent, LEFT, 224); - } - else - { - myGLCD.setColor(255, 0, 0); - myGLCD.print("BUFFER FULL!", CENTER, 192); - delay(500); - myGLCD.print(" ", CENTER, 192); - delay(500); - myGLCD.print("BUFFER FULL!", CENTER, 192); - delay(500); - myGLCD.print(" ", CENTER, 192); - myGLCD.setColor(0, 255, 0); - } -} - -// Draw a red frame while a button is touched -void waitForIt(int x1, int y1, int x2, int y2) -{ - myGLCD.setColor(255, 0, 0); - myGLCD.drawRoundRect (x1, y1, x2, y2); - while (myTouch.dataAvailable()) - myTouch.read(); - myGLCD.setColor(255, 255, 255); - myGLCD.drawRoundRect (x1, y1, x2, y2); -} - -/************************* -** Required functions ** -*************************/ - -void setup() -{ -// Initial setup - myGLCD.InitLCD(); - myGLCD.clrScr(); - - myTouch.InitTouch(); - myTouch.setPrecision(PREC_MEDIUM); - - myGLCD.setFont(BigFont); - myGLCD.setBackColor(0, 0, 255); - drawButtons(); -} - -void loop() -{ - while (true) - { - if (myTouch.dataAvailable()) - { - myTouch.read(); - x=myTouch.getX(); - y=myTouch.getY(); - - if ((y>=10) && (y<=60)) // Upper row - { - if ((x>=10) && (x<=60)) // Button: 1 - { - waitForIt(10, 10, 60, 60); - updateStr('1'); - } - if ((x>=70) && (x<=120)) // Button: 2 - { - waitForIt(70, 10, 120, 60); - updateStr('2'); - } - if ((x>=130) && (x<=180)) // Button: 3 - { - waitForIt(130, 10, 180, 60); - updateStr('3'); - } - if ((x>=190) && (x<=240)) // Button: 4 - { - waitForIt(190, 10, 240, 60); - updateStr('4'); - } - if ((x>=250) && (x<=300)) // Button: 5 - { - waitForIt(250, 10, 300, 60); - updateStr('5'); - } - } - - if ((y>=70) && (y<=120)) // Center row - { - if ((x>=10) && (x<=60)) // Button: 6 - { - waitForIt(10, 70, 60, 120); - updateStr('6'); - } - if ((x>=70) && (x<=120)) // Button: 7 - { - waitForIt(70, 70, 120, 120); - updateStr('7'); - } - if ((x>=130) && (x<=180)) // Button: 8 - { - waitForIt(130, 70, 180, 120); - updateStr('8'); - } - if ((x>=190) && (x<=240)) // Button: 9 - { - waitForIt(190, 70, 240, 120); - updateStr('9'); - } - if ((x>=250) && (x<=300)) // Button: 0 - { - waitForIt(250, 70, 300, 120); - updateStr('0'); - } - } - - if ((y>=130) && (y<=180)) // Upper row - { - if ((x>=10) && (x<=150)) // Button: Clear - { - waitForIt(10, 130, 150, 180); - stCurrent[0]='\0'; - stCurrentLen=0; - myGLCD.setColor(0, 0, 0); - myGLCD.fillRect(0, 224, 319, 239); - } - if ((x>=160) && (x<=300)) // Button: Enter - { - waitForIt(160, 130, 300, 180); - if (stCurrentLen>0) - { - for (x=0; x -#include - -// Define the orientation of the touch screen. Further -// information can be found in the instructions. -#define TOUCH_ORIENTATION PORTRAIT - -// Initialize display -// ------------------ -// Set the pins to the correct ones for your development board -// ----------------------------------------------------------- -// Standard Arduino Uno/2009 Shield : ,19,18,17,16 -// Standard Arduino Mega/Due shield : ,38,39,40,41 -// CTE TFT LCD/SD Shield for Arduino Due : ,25,26,27,28 -// Teensy 3.x TFT Test Board : ,23,22, 3, 4 -// ElecHouse TFT LCD/SD Shield for Arduino Due : ,22,23,31,33 -// -// Remember to change the model parameter to suit your display module! -UTFT myGLCD(ITDB32S,38,39,40,41); - -// Initialize touchscreen -// ---------------------- -// Set the pins to the correct ones for your development board -// ----------------------------------------------------------- -// Standard Arduino Uno/2009 Shield : 15,10,14, 9, 8 -// Standard Arduino Mega/Due shield : 6, 5, 4, 3, 2 -// CTE TFT LCD/SD Shield for Arduino Due : 6, 5, 4, 3, 2 -// Teensy 3.x TFT Test Board : 26,31,27,28,29 -// ElecHouse TFT LCD/SD Shield for Arduino Due : 25,26,27,29,30 -// -UTouch myTouch( 6, 5, 4, 3, 2); - -// ************************************ -// DO NOT EDIT ANYTHING BELOW THIS LINE -// ************************************ - -// Declare which fonts we will be using -extern uint8_t SmallFont[]; - -uint32_t cx, cy; -uint32_t rx[8], ry[8]; -uint32_t clx, crx, cty, cby; -float px, py; -int dispx, dispy, text_y_center; -uint32_t calx, caly, cals; -char buf[13]; - -void setup() -{ - myGLCD.InitLCD(); - myGLCD.clrScr(); - myGLCD.setFont(SmallFont); - - myTouch.InitTouch(TOUCH_ORIENTATION); - dispx=myGLCD.getDisplayXSize(); - dispy=myGLCD.getDisplayYSize(); - text_y_center=(dispy/2)-6; -} - -void drawCrossHair(int x, int y) -{ - myGLCD.drawRect(x-10, y-10, x+10, y+10); - myGLCD.drawLine(x-5, y, x+5, y); - myGLCD.drawLine(x, y-5, x, y+5); -} - -void readCoordinates() -{ - int iter = 5000; - int failcount = 0; - int cnt = 0; - uint32_t tx=0; - uint32_t ty=0; - boolean OK = false; - - while (OK == false) - { - myGLCD.setColor(255, 255, 255); - myGLCD.print("* PRESS *", CENTER, text_y_center); - while (myTouch.dataAvailable() == false) {} - myGLCD.print("* HOLD! *", CENTER, text_y_center); - while ((myTouch.dataAvailable() == true) && (cnt=iter) - { - OK = true; - } - else - { - tx = 0; - ty = 0; - cnt = 0; - } - if (failcount>=10000) - fail(); - } - - cx = tx / iter; - cy = ty / iter; -} - -void calibrate(int x, int y, int i) -{ - myGLCD.setColor(255, 255, 255); - drawCrossHair(x,y); - myGLCD.setBackColor(255, 0, 0); - readCoordinates(); - myGLCD.setColor(255, 255, 255); - myGLCD.print("* RELEASE *", CENTER, text_y_center); - myGLCD.setColor(80, 80, 80); - drawCrossHair(x,y); - rx[i]=cx; - ry[i]=cy; - while (myTouch.dataAvailable() == true) {} -} - -void waitForTouch() -{ - while (myTouch.dataAvailable() == true) {} - while (myTouch.dataAvailable() == false) {} - while (myTouch.dataAvailable() == true) {} -} - -void toHex(uint32_t num) -{ - buf[0] = '0'; - buf[1] = 'x'; - buf[10] = 'U'; - buf[11] = 'L'; - buf[12] = 0; - for (int zz=9; zz>1; zz--) - { - if ((num & 0xF) > 9) - buf[zz] = (num & 0xF) + 55; - else - buf[zz] = (num & 0xF) + 48; - num=num>>4; - } -} - -void startup() -{ - myGLCD.setColor(255, 0, 0); - myGLCD.fillRect(0, 0, dispx-1, 13); - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.drawLine(0, 14, dispx-1, 14); - myGLCD.print("UTouch Calibration", CENTER, 1); - myGLCD.setBackColor(0, 0, 0); - - if (dispx==220) - { - myGLCD.print("Use a stylus or something", LEFT, 30); - myGLCD.print("similar to touch as close", LEFT, 42); - myGLCD.print("to the center of the", LEFT, 54); - myGLCD.print("highlighted crosshair as", LEFT, 66); - myGLCD.print("possible. Keep as still as", LEFT, 78); - myGLCD.print("possible and keep holding", LEFT, 90); - myGLCD.print("until the highlight is", LEFT, 102); - myGLCD.print("removed. Repeat for all", LEFT, 114); - myGLCD.print("crosshairs in sequence.", LEFT, 126); - myGLCD.print("Touch screen to continue", CENTER, 162); - } - else - { - myGLCD.print("INSTRUCTIONS", CENTER, 30); - myGLCD.print("Use a stylus or something similar to", LEFT, 50); - myGLCD.print("touch as close to the center of the", LEFT, 62); - myGLCD.print("highlighted crosshair as possible. Keep", LEFT, 74); - myGLCD.print("as still as possible and keep holding", LEFT, 86); - myGLCD.print("until the highlight is removed. Repeat", LEFT, 98); - myGLCD.print("for all crosshairs in sequence.", LEFT, 110); - - myGLCD.print("Further instructions will be displayed", LEFT, 134); - myGLCD.print("when the calibration is complete.", LEFT, 146); - - myGLCD.print("Do NOT use your finger as a calibration", LEFT, 170); - myGLCD.print("stylus or the result WILL BE imprecise.", LEFT, 182); - - myGLCD.print("Touch screen to continue", CENTER, 226); - } - - waitForTouch(); - myGLCD.clrScr(); -} - -void done() -{ - myGLCD.clrScr(); - myGLCD.setColor(255, 0, 0); - myGLCD.fillRect(0, 0, dispx-1, 13); - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.drawLine(0, 14, dispx-1, 14); - myGLCD.print("UTouch Calibration", CENTER, 1); - myGLCD.setBackColor(0, 0, 0); - - if (dispx==220) - { - myGLCD.print("To use the new calibration", LEFT, 30); - myGLCD.print("settings you must edit the", LEFT, 42); - myGLCD.setColor(160, 160, 255); - myGLCD.print("UTouchCD.h", LEFT, 54); - myGLCD.setColor(255, 255, 255); - myGLCD.print("file and change", 88, 54); - myGLCD.print("the following values. The", LEFT, 66); - myGLCD.print("values are located right", LEFT, 78); - myGLCD.print("below the opening comment.", LEFT, 90); - myGLCD.print("CAL_X", LEFT, 110); - myGLCD.print("CAL_Y", LEFT, 122); - myGLCD.print("CAL_S", LEFT, 134); - toHex(calx); - myGLCD.print(buf, 75, 110); - toHex(caly); - myGLCD.print(buf, 75, 122); - toHex(cals); - myGLCD.print(buf, 75, 134); - } - else - { - myGLCD.print("CALIBRATION COMPLETE", CENTER, 30); - myGLCD.print("To use the new calibration", LEFT, 50); - myGLCD.print("settings you must edit the", LEFT, 62); - myGLCD.setColor(160, 160, 255); - myGLCD.print("UTouchCD.h", LEFT, 74); - myGLCD.setColor(255, 255, 255); - myGLCD.print("file and change", 88, 74); - myGLCD.print("the following values.", LEFT, 86); - myGLCD.print("The values are located right", LEFT, 98); - myGLCD.print("below the opening comment in", LEFT, 110); - myGLCD.print("the file.", LEFT, 122); - myGLCD.print("CAL_X", LEFT, 150); - myGLCD.print("CAL_Y", LEFT, 162); - myGLCD.print("CAL_S", LEFT, 174); - - toHex(calx); - myGLCD.print(buf, 75, 150); - toHex(caly); - myGLCD.print(buf, 75, 162); - toHex(cals); - myGLCD.print(buf, 75, 174); - } - -} - -void fail() -{ - myGLCD.clrScr(); - myGLCD.setColor(255, 0, 0); - myGLCD.fillRect(0, 0, dispx-1, 13); - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.drawLine(0, 14, dispx-1, 14); - myGLCD.print("UTouch Calibration FAILED", CENTER, 1); - myGLCD.setBackColor(0, 0, 0); - - myGLCD.print("Unable to read the position", LEFT, 30); - myGLCD.print("of the press. This is a", LEFT, 42); - myGLCD.print("hardware issue and can", 88, 54); - myGLCD.print("not be corrected in", LEFT, 66); - myGLCD.print("software.", LEFT, 78); - - while(true) {}; -} - -void loop() -{ - startup(); - - myGLCD.setColor(80, 80, 80); - drawCrossHair(dispx-11, 10); - drawCrossHair(dispx/2, 10); - drawCrossHair(10, 10); - drawCrossHair(dispx-11, dispy/2); - drawCrossHair(10, dispy/2); - drawCrossHair(dispx-11, dispy-11); - drawCrossHair(dispx/2, dispy-11); - drawCrossHair(10, dispy-11); - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("***********", CENTER, text_y_center-12); - myGLCD.print("***********", CENTER, text_y_center+12); - - calibrate(10, 10, 0); - calibrate(10, dispy/2, 1); - calibrate(10, dispy-11, 2); - calibrate(dispx/2, 10, 3); - calibrate(dispx/2, dispy-11, 4); - calibrate(dispx-11, 10, 5); - calibrate(dispx-11, dispy/2, 6); - calibrate(dispx-11, dispy-11, 7); - - if (TOUCH_ORIENTATION == LANDSCAPE) - cals=(long(dispx-1)<<12)+(dispy-1); - else - cals=(long(dispy-1)<<12)+(dispx-1); - - if (TOUCH_ORIENTATION == PORTRAIT) - px = abs(((float(rx[2]+rx[4]+rx[7])/3)-(float(rx[0]+rx[3]+rx[5])/3))/(dispy-20)); // PORTRAIT - else - px = abs(((float(rx[5]+rx[6]+rx[7])/3)-(float(rx[0]+rx[1]+rx[2])/3))/(dispy-20)); // LANDSCAPE - - if (TOUCH_ORIENTATION == PORTRAIT) - { - clx = (((rx[0]+rx[3]+rx[5])/3)); // PORTRAIT - crx = (((rx[2]+rx[4]+rx[7])/3)); // PORTRAIT - } - else - { - clx = (((rx[0]+rx[1]+rx[2])/3)); // LANDSCAPE - crx = (((rx[5]+rx[6]+rx[7])/3)); // LANDSCAPE - } - if (clx -#include - -// Initialize display -// ------------------ -// Set the pins to the correct ones for your development board -// ----------------------------------------------------------- -// Standard Arduino Uno/2009 Shield : ,19,18,17,16 -// Standard Arduino Mega/Due shield : ,38,39,40,41 -// CTE TFT LCD/SD Shield for Arduino Due : ,25,26,27,28 -// Teensy 3.x TFT Test Board : ,23,22, 3, 4 -// ElecHouse TFT LCD/SD Shield for Arduino Due : ,22,23,31,33 -// -// Remember to change the model parameter to suit your display module! -UTFT myGLCD(ITDB32S,38,39,40,41); - -// Initialize touchscreen -// ---------------------- -// Set the pins to the correct ones for your development board -// ----------------------------------------------------------- -// Standard Arduino Uno/2009 Shield : 15,10,14, 9, 8 -// Standard Arduino Mega/Due shield : 6, 5, 4, 3, 2 -// CTE TFT LCD/SD Shield for Arduino Due : 6, 5, 4, 3, 2 -// Teensy 3.x TFT Test Board : 26,31,27,28,29 -// ElecHouse TFT LCD/SD Shield for Arduino Due : 25,26,27,29,30 -// -UTouch myTouch( 6, 5, 4, 3, 2); - -void setup() -{ - myGLCD.InitLCD(); - myGLCD.clrScr(); - - myTouch.InitTouch(); - myTouch.setPrecision(PREC_MEDIUM); -} - -void loop() -{ - long x, y; - - while (myTouch.dataAvailable() == true) - { - myTouch.read(); - x = myTouch.getX(); - y = myTouch.getY(); - if ((x!=-1) and (y!=-1)) - { - myGLCD.drawPixel (x, y); - } - } -} - diff --git a/libraries/UTouch/examples/Arduino/UTouch_QuickPaint/UTouch_QuickPaint.ino b/libraries/UTouch/examples/Arduino/UTouch_QuickPaint/UTouch_QuickPaint.ino deleted file mode 100644 index 3ff70fc..0000000 --- a/libraries/UTouch/examples/Arduino/UTouch_QuickPaint/UTouch_QuickPaint.ino +++ /dev/null @@ -1,172 +0,0 @@ -// UTouch_QuickPaint (C)2013-2014 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a quick demo of how to use the library. -// -// This program requires the UTFT library and a display -// module with at least 320x240 pixels resolution. -// -// It is assumed that the display module is connected to an -// appropriate shield or that you know how to change the pin -// numbers in the setup. -// - -#include -#include - -// Initialize display -// ------------------ -// Set the pins to the correct ones for your development board -// ----------------------------------------------------------- -// Standard Arduino Uno/2009 Shield : ,19,18,17,16 -// Standard Arduino Mega/Due shield : ,38,39,40,41 -// CTE TFT LCD/SD Shield for Arduino Due : ,25,26,27,28 -// Teensy 3.x TFT Test Board : ,23,22, 3, 4 -// ElecHouse TFT LCD/SD Shield for Arduino Due : ,22,23,31,33 -// -// Remember to change the model parameter to suit your display module! -UTFT myGLCD(ITDB32S,38,39,40,41); - -// Initialize touchscreen -// ---------------------- -// Set the pins to the correct ones for your development board -// ----------------------------------------------------------- -// Standard Arduino Uno/2009 Shield : 15,10,14, 9, 8 -// Standard Arduino Mega/Due shield : 6, 5, 4, 3, 2 -// CTE TFT LCD/SD Shield for Arduino Due : 6, 5, 4, 3, 2 -// Teensy 3.x TFT Test Board : 26,31,27,28,29 -// ElecHouse TFT LCD/SD Shield for Arduino Due : 25,26,27,29,30 -// -UTouch myTouch( 6, 5, 4, 3, 2); - -// Declare which fonts we will be using -extern uint8_t BigFont[]; - -int color = 0; -word colorlist[] = {VGA_WHITE, VGA_BLACK, VGA_RED, VGA_BLUE, VGA_GREEN, VGA_FUCHSIA, VGA_YELLOW, VGA_AQUA}; -int bsize = 4; - -void drawColorMarkerAndBrushSize(int col) -{ - myGLCD.setColor(VGA_BLACK); - myGLCD.fillRect(25, 0, 31, 239); - myGLCD.fillRect(myGLCD.getDisplayXSize()-31, 161, myGLCD.getDisplayXSize()-1, 191); - myGLCD.setColor(VGA_WHITE); - myGLCD.drawPixel(25, (col*30)+15); - for (int i=1; i<7; i++) - myGLCD.drawLine(25+i, ((col*30)+15)-i, 25+i, ((col*30)+15)+i); - - if (color==1) - myGLCD.setColor(VGA_WHITE); - else - myGLCD.setColor(colorlist[col]); - if (bsize==1) - myGLCD.drawPixel(myGLCD.getDisplayXSize()-15, 177); - else - myGLCD.fillCircle(myGLCD.getDisplayXSize()-15, 177, bsize); - - myGLCD.setColor(colorlist[col]); -} - -void setup() -{ - myGLCD.InitLCD(); - myGLCD.clrScr(); - myGLCD.setFont(BigFont); - - myTouch.InitTouch(); - myTouch.setPrecision(PREC_HI); - - myGLCD.setColor(VGA_WHITE); - myGLCD.drawLine(32,0,32,myGLCD.getDisplayYSize()-1); - myGLCD.drawLine(myGLCD.getDisplayXSize()-32,0,myGLCD.getDisplayXSize()-32,myGLCD.getDisplayYSize()-1); - myGLCD.print("C", myGLCD.getDisplayXSize()-24, 8); - myGLCD.print("L", myGLCD.getDisplayXSize()-24, 24); - myGLCD.print("E", myGLCD.getDisplayXSize()-24, 40); - myGLCD.print("A", myGLCD.getDisplayXSize()-24, 56); - myGLCD.print("R", myGLCD.getDisplayXSize()-24, 72); - myGLCD.print("+", myGLCD.getDisplayXSize()-24, 136); - myGLCD.print("-", myGLCD.getDisplayXSize()-24, 200); - myGLCD.fillRect(myGLCD.getDisplayXSize()-32,96,myGLCD.getDisplayXSize()-1,128); - myGLCD.drawLine(myGLCD.getDisplayXSize()-32,160,myGLCD.getDisplayXSize()-1,160); - myGLCD.drawLine(myGLCD.getDisplayXSize()-32,192,myGLCD.getDisplayXSize()-1,192); - myGLCD.drawLine(myGLCD.getDisplayXSize()-32,224,myGLCD.getDisplayXSize()-1,224); - for (int i=0; i<8; i++) - { - myGLCD.setColor(colorlist[i]); - myGLCD.fillRect(0, (i*30), 24, (((i+1)*30)-1)); - } - drawColorMarkerAndBrushSize(color); -} - -void loop() -{ - long x, y; - - while (myTouch.dataAvailable() == true) - { - myTouch.read(); - x = myTouch.getX(); - y = myTouch.getY(); - if ((x!=-1) and (y!=-1)) - { - if (x>(31+bsize) and (x128) and (y<160)) - { - if (bsize<7) - { - bsize++; - drawColorMarkerAndBrushSize(color); - while (myTouch.dataAvailable()) {}; - delay(50); - } - } - if ((y>160) and (y<192)) - { - bsize=4; - drawColorMarkerAndBrushSize(color); - while (myTouch.dataAvailable()) {}; - delay(50); - } - if ((y>192) and (y<224)) - { - if (bsize>1) - { - bsize--; - drawColorMarkerAndBrushSize(color); - while (myTouch.dataAvailable()) {}; - delay(50); - } - } - } - } - } - } -} - diff --git a/libraries/UTouch/examples/chipKit/UTouch_ButtonTest/UTouch_ButtonTest.pde b/libraries/UTouch/examples/chipKit/UTouch_ButtonTest/UTouch_ButtonTest.pde deleted file mode 100644 index 22ae1dd..0000000 --- a/libraries/UTouch/examples/chipKit/UTouch_ButtonTest/UTouch_ButtonTest.pde +++ /dev/null @@ -1,236 +0,0 @@ -// UTouch_ButtonTest (C)2010-2012 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a quick demo of how create and use buttons. -// -// This program requires the UTFT library. -// -// It is assumed that the display module is connected to an -// appropriate shield or that you know how to change the pin -// numbers in the setup. -// - -#include -#include - -// Declare which fonts we will be using -extern uint8_t BigFont[]; - -// Uncomment the next line for chipKit Uno32 -//UTFT myGLCD(ITDB24D,34,35,36,37); // Remember to change the model parameter to suit your display module! -//UTouch myTouch(20,21,22,23,24); - -// Uncomment the next line for chipKit Max32 -UTFT myGLCD(ITDB32S,82,83,84,85); // Remember to change the model parameter to suit your display module! -UTouch myTouch(62,63,64,65,66); - -int x, y; -char stCurrent[20]=""; -int stCurrentLen=0; -char stLast[20]=""; - -/************************* -** Custom functions ** -*************************/ - -void drawButtons() -{ -// Draw the upper row of buttons - for (x=0; x<5; x++) - { - myGLCD.setColor(0, 0, 255); - myGLCD.fillRoundRect (10+(x*60), 10, 60+(x*60), 60); - myGLCD.setColor(255, 255, 255); - myGLCD.drawRoundRect (10+(x*60), 10, 60+(x*60), 60); - myGLCD.printNumI(x+1, 27+(x*60), 27); - } -// Draw the center row of buttons - for (x=0; x<5; x++) - { - myGLCD.setColor(0, 0, 255); - myGLCD.fillRoundRect (10+(x*60), 70, 60+(x*60), 120); - myGLCD.setColor(255, 255, 255); - myGLCD.drawRoundRect (10+(x*60), 70, 60+(x*60), 120); - if (x<4) - myGLCD.printNumI(x+6, 27+(x*60), 87); - } - myGLCD.print("0", 267, 87); -// Draw the lower row of buttons - myGLCD.setColor(0, 0, 255); - myGLCD.fillRoundRect (10, 130, 150, 180); - myGLCD.setColor(255, 255, 255); - myGLCD.drawRoundRect (10, 130, 150, 180); - myGLCD.print("Clear", 40, 147); - myGLCD.setColor(0, 0, 255); - myGLCD.fillRoundRect (160, 130, 300, 180); - myGLCD.setColor(255, 255, 255); - myGLCD.drawRoundRect (160, 130, 300, 180); - myGLCD.print("Enter", 190, 147); - myGLCD.setBackColor (0, 0, 0); -} - -void updateStr(int val) -{ - if (stCurrentLen<20) - { - stCurrent[stCurrentLen]=val; - stCurrent[stCurrentLen+1]='\0'; - stCurrentLen++; - myGLCD.setColor(0, 255, 0); - myGLCD.print(stCurrent, LEFT, 224); - } - else - { - myGLCD.setColor(255, 0, 0); - myGLCD.print("BUFFER FULL!", CENTER, 192); - delay(500); - myGLCD.print(" ", CENTER, 192); - delay(500); - myGLCD.print("BUFFER FULL!", CENTER, 192); - delay(500); - myGLCD.print(" ", CENTER, 192); - myGLCD.setColor(0, 255, 0); - } -} - -// Draw a red frame while a button is touched -void waitForIt(int x1, int y1, int x2, int y2) -{ - myGLCD.setColor(255, 0, 0); - myGLCD.drawRoundRect (x1, y1, x2, y2); - while (myTouch.dataAvailable()) - myTouch.read(); - myGLCD.setColor(255, 255, 255); - myGLCD.drawRoundRect (x1, y1, x2, y2); -} - -/************************* -** Required functions ** -*************************/ - -void setup() -{ -// Initial setup - myGLCD.InitLCD(); - myGLCD.clrScr(); - - myTouch.InitTouch(); - myTouch.setPrecision(PREC_MEDIUM); - - myGLCD.setFont(BigFont); - myGLCD.setBackColor(0, 0, 255); - drawButtons(); -} - -void loop() -{ - while (true) - { - if (myTouch.dataAvailable()) - { - myTouch.read(); - x=myTouch.getX(); - y=myTouch.getY(); - - if ((y>=10) && (y<=60)) // Upper row - { - if ((x>=10) && (x<=60)) // Button: 1 - { - waitForIt(10, 10, 60, 60); - updateStr('1'); - } - if ((x>=70) && (x<=120)) // Button: 2 - { - waitForIt(70, 10, 120, 60); - updateStr('2'); - } - if ((x>=130) && (x<=180)) // Button: 3 - { - waitForIt(130, 10, 180, 60); - updateStr('3'); - } - if ((x>=190) && (x<=240)) // Button: 4 - { - waitForIt(190, 10, 240, 60); - updateStr('4'); - } - if ((x>=250) && (x<=300)) // Button: 5 - { - waitForIt(250, 10, 300, 60); - updateStr('5'); - } - } - - if ((y>=70) && (y<=120)) // Center row - { - if ((x>=10) && (x<=60)) // Button: 6 - { - waitForIt(10, 70, 60, 120); - updateStr('6'); - } - if ((x>=70) && (x<=120)) // Button: 7 - { - waitForIt(70, 70, 120, 120); - updateStr('7'); - } - if ((x>=130) && (x<=180)) // Button: 8 - { - waitForIt(130, 70, 180, 120); - updateStr('8'); - } - if ((x>=190) && (x<=240)) // Button: 9 - { - waitForIt(190, 70, 240, 120); - updateStr('9'); - } - if ((x>=250) && (x<=300)) // Button: 0 - { - waitForIt(250, 70, 300, 120); - updateStr('0'); - } - } - - if ((y>=130) && (y<=180)) // Upper row - { - if ((x>=10) && (x<=150)) // Button: Clear - { - waitForIt(10, 130, 150, 180); - stCurrent[0]='\0'; - stCurrentLen=0; - myGLCD.setColor(0, 0, 0); - myGLCD.fillRect(0, 224, 319, 239); - } - if ((x>=160) && (x<=300)) // Button: Enter - { - waitForIt(160, 130, 300, 180); - if (stCurrentLen>0) - { - for (x=0; x -#include - -// Define the orientation of the touch screen. Further -// information can be found in the instructions. -#define TOUCH_ORIENTATION PORTRAIT - -// Declare which fonts we will be using -extern uint8_t SmallFont[]; - -// Uncomment the next line for chipKit Uno32 -//UTFT myGLCD(ITDB24D,34,35,36,37); // Remember to change the model parameter to suit your display module! -//UTouch myTouch(20,21,22,23,24); - -// Uncomment the next line for chipKit Max32 -UTFT myGLCD(ITDB32S,82,83,84,85); // Remember to change the model parameter to suit your display module! -UTouch myTouch(62,63,64,65,66); - -// ************************************ -// DO NOT EDIT ANYTHING BELOW THIS LINE -// ************************************ -uint32_t cx, cy; -uint32_t rx[8], ry[8]; -uint32_t clx, crx, cty, cby; -float px, py; -int dispx, dispy, text_y_center; -uint32_t calx, caly, cals; -char buf[13]; - -void setup() -{ - myGLCD.InitLCD(); - myGLCD.clrScr(); - myGLCD.setFont(SmallFont); - - myTouch.InitTouch(TOUCH_ORIENTATION); - dispx=myGLCD.getDisplayXSize(); - dispy=myGLCD.getDisplayYSize(); - text_y_center=(dispy/2)-6; -} - -void drawCrossHair(int x, int y) -{ - myGLCD.drawRect(x-10, y-10, x+10, y+10); - myGLCD.drawLine(x-5, y, x+5, y); - myGLCD.drawLine(x, y-5, x, y+5); -} - -void readCoordinates() -{ - int iter = 5000; - int failcount = 0; - int cnt = 0; - uint32_t tx=0; - uint32_t ty=0; - boolean OK = false; - - while (OK == false) - { - myGLCD.setColor(255, 255, 255); - myGLCD.print("* PRESS *", CENTER, text_y_center); - while (myTouch.dataAvailable() == false) {} - myGLCD.print("* HOLD! *", CENTER, text_y_center); - while ((myTouch.dataAvailable() == true) && (cnt=iter) - { - OK = true; - } - else - { - tx = 0; - ty = 0; - cnt = 0; - } - if (failcount>=10000) - fail(); - } - - cx = tx / iter; - cy = ty / iter; -} - -void calibrate(int x, int y, int i) -{ - myGLCD.setColor(255, 255, 255); - drawCrossHair(x,y); - myGLCD.setBackColor(255, 0, 0); - readCoordinates(); - myGLCD.setColor(255, 255, 255); - myGLCD.print("* RELEASE *", CENTER, text_y_center); - myGLCD.setColor(80, 80, 80); - drawCrossHair(x,y); - rx[i]=cx; - ry[i]=cy; - while (myTouch.dataAvailable() == true) {} -} - -void waitForTouch() -{ - while (myTouch.dataAvailable() == true) {} - while (myTouch.dataAvailable() == false) {} - while (myTouch.dataAvailable() == true) {} -} - -void toHex(uint32_t num) -{ - buf[0] = '0'; - buf[1] = 'x'; - buf[10] = 'U'; - buf[11] = 'L'; - buf[12] = 0; - for (int zz=9; zz>1; zz--) - { - if ((num & 0xF) > 9) - buf[zz] = (num & 0xF) + 55; - else - buf[zz] = (num & 0xF) + 48; - num=num>>4; - } -} - -void startup() -{ - myGLCD.setColor(255, 0, 0); - myGLCD.fillRect(0, 0, dispx-1, 13); - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.drawLine(0, 14, dispx-1, 14); - myGLCD.print("UTouch Calibration", CENTER, 1); - myGLCD.setBackColor(0, 0, 0); - - if (dispx==220) - { - myGLCD.print("Use a stylus or something", LEFT, 30); - myGLCD.print("similar to touch as close", LEFT, 42); - myGLCD.print("to the center of the", LEFT, 54); - myGLCD.print("highlighted crosshair as", LEFT, 66); - myGLCD.print("possible. Keep as still as", LEFT, 78); - myGLCD.print("possible and keep holding", LEFT, 90); - myGLCD.print("until the highlight is", LEFT, 102); - myGLCD.print("removed. Repeat for all", LEFT, 114); - myGLCD.print("crosshairs in sequence.", LEFT, 126); - myGLCD.print("Touch screen to continue", CENTER, 162); - } - else - { - myGLCD.print("INSTRUCTIONS", CENTER, 30); - myGLCD.print("Use a stylus or something similar to", LEFT, 50); - myGLCD.print("touch as close to the center of the", LEFT, 62); - myGLCD.print("highlighted crosshair as possible. Keep", LEFT, 74); - myGLCD.print("as still as possible and keep holding", LEFT, 86); - myGLCD.print("until the highlight is removed. Repeat", LEFT, 98); - myGLCD.print("for all crosshairs in sequence.", LEFT, 110); - - myGLCD.print("Further instructions will be displayed", LEFT, 134); - myGLCD.print("when the calibration is complete.", LEFT, 146); - - myGLCD.print("Do NOT use your finger as a calibration", LEFT, 170); - myGLCD.print("stylus or the result WILL BE imprecise.", LEFT, 182); - - myGLCD.print("Touch screen to continue", CENTER, 226); - } - - waitForTouch(); - myGLCD.clrScr(); -} - -void done() -{ - myGLCD.clrScr(); - myGLCD.setColor(255, 0, 0); - myGLCD.fillRect(0, 0, dispx-1, 13); - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.drawLine(0, 14, dispx-1, 14); - myGLCD.print("UTouch Calibration", CENTER, 1); - myGLCD.setBackColor(0, 0, 0); - - if (dispx==220) - { - myGLCD.print("To use the new calibration", LEFT, 30); - myGLCD.print("settings you must edit the", LEFT, 42); - myGLCD.setColor(160, 160, 255); - myGLCD.print("UTouchCD.h", LEFT, 54); - myGLCD.setColor(255, 255, 255); - myGLCD.print("file and change", 88, 54); - myGLCD.print("the following values. The", LEFT, 66); - myGLCD.print("values are located right", LEFT, 78); - myGLCD.print("below the opening comment.", LEFT, 90); - myGLCD.print("CAL_X", LEFT, 110); - myGLCD.print("CAL_Y", LEFT, 122); - myGLCD.print("CAL_S", LEFT, 134); - toHex(calx); - myGLCD.print(buf, 75, 110); - toHex(caly); - myGLCD.print(buf, 75, 122); - toHex(cals); - myGLCD.print(buf, 75, 134); - } - else - { - myGLCD.print("CALIBRATION COMPLETE", CENTER, 30); - myGLCD.print("To use the new calibration", LEFT, 50); - myGLCD.print("settings you must edit the", LEFT, 62); - myGLCD.setColor(160, 160, 255); - myGLCD.print("UTouchCD.h", LEFT, 74); - myGLCD.setColor(255, 255, 255); - myGLCD.print("file and change", 88, 74); - myGLCD.print("the following values.", LEFT, 86); - myGLCD.print("The values are located right", LEFT, 98); - myGLCD.print("below the opening comment in", LEFT, 110); - myGLCD.print("the file.", LEFT, 122); - myGLCD.print("CAL_X", LEFT, 150); - myGLCD.print("CAL_Y", LEFT, 162); - myGLCD.print("CAL_S", LEFT, 174); - - toHex(calx); - myGLCD.print(buf, 75, 150); - toHex(caly); - myGLCD.print(buf, 75, 162); - toHex(cals); - myGLCD.print(buf, 75, 174); - } - -} - -void fail() -{ - myGLCD.clrScr(); - myGLCD.setColor(255, 0, 0); - myGLCD.fillRect(0, 0, dispx-1, 13); - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.drawLine(0, 14, dispx-1, 14); - myGLCD.print("UTouch Calibration FAILED", CENTER, 1); - myGLCD.setBackColor(0, 0, 0); - - myGLCD.print("Unable to read the position", LEFT, 30); - myGLCD.print("of the press. This is a", LEFT, 42); - myGLCD.print("hardware issue and can", 88, 54); - myGLCD.print("not be corrected in", LEFT, 66); - myGLCD.print("software.", LEFT, 78); - - while(true) {}; -} - -void loop() -{ - startup(); - - myGLCD.setColor(80, 80, 80); - drawCrossHair(dispx-11, 10); - drawCrossHair(dispx/2, 10); - drawCrossHair(10, 10); - drawCrossHair(dispx-11, dispy/2); - drawCrossHair(10, dispy/2); - drawCrossHair(dispx-11, dispy-11); - drawCrossHair(dispx/2, dispy-11); - drawCrossHair(10, dispy-11); - myGLCD.setColor(255, 255, 255); - myGLCD.setBackColor(255, 0, 0); - myGLCD.print("***********", CENTER, text_y_center-12); - myGLCD.print("***********", CENTER, text_y_center+12); - - calibrate(10, 10, 0); - calibrate(10, dispy/2, 1); - calibrate(10, dispy-11, 2); - calibrate(dispx/2, 10, 3); - calibrate(dispx/2, dispy-11, 4); - calibrate(dispx-11, 10, 5); - calibrate(dispx-11, dispy/2, 6); - calibrate(dispx-11, dispy-11, 7); - - if (TOUCH_ORIENTATION == LANDSCAPE) - cals=(long(dispx-1)<<12)+(dispy-1); - else - cals=(long(dispy-1)<<12)+(dispx-1); - - if (TOUCH_ORIENTATION == PORTRAIT) - px = abs(((float(rx[2]+rx[4]+rx[7])/3)-(float(rx[0]+rx[3]+rx[5])/3))/(dispy-20)); // PORTRAIT - else - px = abs(((float(rx[5]+rx[6]+rx[7])/3)-(float(rx[0]+rx[1]+rx[2])/3))/(dispy-20)); // LANDSCAPE - - if (TOUCH_ORIENTATION == PORTRAIT) - { - clx = (((rx[0]+rx[3]+rx[5])/3)); // PORTRAIT - crx = (((rx[2]+rx[4]+rx[7])/3)); // PORTRAIT - } - else - { - clx = (((rx[0]+rx[1]+rx[2])/3)); // LANDSCAPE - crx = (((rx[5]+rx[6]+rx[7])/3)); // LANDSCAPE - } - if (clx -#include - -// Uncomment the next line for chipKit Uno32 -//UTFT myGLCD(ITDB24D,34,35,36,37); // Remember to change the model parameter to suit your display module! -//UTouch myTouch(20,21,22,23,24); - -// Uncomment the next line for chipKit Max32 -UTFT myGLCD(ITDB32S,82,83,84,85); // Remember to change the model parameter to suit your display module! -UTouch myTouch(62,63,64,65,66); - -void setup() -{ - myGLCD.InitLCD(); - myGLCD.clrScr(); - - myTouch.InitTouch(); - myTouch.setPrecision(PREC_MEDIUM); -} - -void loop() -{ - long x, y; - - while (myTouch.dataAvailable() == true) - { - myTouch.read(); - x = myTouch.getX(); - y = myTouch.getY(); - if ((x!=-1) and (y!=-1)) - myGLCD.drawPixel (x, y); - } -} - diff --git a/libraries/UTouch/examples/chipKit/UTouch_QuickPaint/UTouch_QuickPaint.pde b/libraries/UTouch/examples/chipKit/UTouch_QuickPaint/UTouch_QuickPaint.pde deleted file mode 100644 index fa6ed09..0000000 --- a/libraries/UTouch/examples/chipKit/UTouch_QuickPaint/UTouch_QuickPaint.pde +++ /dev/null @@ -1,155 +0,0 @@ -// UTouch_QuickPaint (C)2013 Henning Karlsen -// web: http://www.henningkarlsen.com/electronics -// -// This program is a quick demo of how to use the library. -// -// This program requires the UTFT library and a display -// module with at least 320x240 pixels resolution. -// -// It is assumed that the display module is connected to an -// appropriate shield or that you know how to change the pin -// numbers in the setup. -// - -#include -#include - -// Declare which fonts we will be using -extern uint8_t BigFont[]; - -// Uncomment the next line for chipKit Uno32 -//UTFT myGLCD(ITDB24D,34,35,36,37); // Remember to change the model parameter to suit your display module! -//UTouch myTouch(20,21,22,23,24); - -// Uncomment the next line for chipKit Max32 -UTFT myGLCD(ITDB32S,82,83,84,85); // Remember to change the model parameter to suit your display module! -UTouch myTouch(62,63,64,65,66); - -int color = 0; -word colorlist[] = {VGA_WHITE, VGA_BLACK, VGA_RED, VGA_BLUE, VGA_GREEN, VGA_FUCHSIA, VGA_YELLOW, VGA_AQUA}; -int bsize = 4; - -void drawColorMarkerAndBrushSize(int col) -{ - myGLCD.setColor(VGA_BLACK); - myGLCD.fillRect(25, 0, 31, 239); - myGLCD.fillRect(myGLCD.getDisplayXSize()-31, 161, myGLCD.getDisplayXSize()-1, 191); - myGLCD.setColor(VGA_WHITE); - myGLCD.drawPixel(25, (col*30)+15); - for (int i=1; i<7; i++) - myGLCD.drawLine(25+i, ((col*30)+15)-i, 25+i, ((col*30)+15)+i); - - if (color==1) - myGLCD.setColor(VGA_WHITE); - else - myGLCD.setColor(colorlist[col]); - if (bsize==1) - myGLCD.drawPixel(myGLCD.getDisplayXSize()-15, 177); - else - myGLCD.fillCircle(myGLCD.getDisplayXSize()-15, 177, bsize); - - myGLCD.setColor(colorlist[col]); -} - -void setup() -{ - myGLCD.InitLCD(); - myGLCD.clrScr(); - myGLCD.setFont(BigFont); - - myTouch.InitTouch(); - myTouch.setPrecision(PREC_HI); - - myGLCD.setColor(VGA_WHITE); - myGLCD.drawLine(32,0,32,myGLCD.getDisplayYSize()-1); - myGLCD.drawLine(myGLCD.getDisplayXSize()-32,0,myGLCD.getDisplayXSize()-32,myGLCD.getDisplayYSize()-1); - myGLCD.print("C", myGLCD.getDisplayXSize()-24, 8); - myGLCD.print("L", myGLCD.getDisplayXSize()-24, 24); - myGLCD.print("E", myGLCD.getDisplayXSize()-24, 40); - myGLCD.print("A", myGLCD.getDisplayXSize()-24, 56); - myGLCD.print("R", myGLCD.getDisplayXSize()-24, 72); - myGLCD.print("+", myGLCD.getDisplayXSize()-24, 136); - myGLCD.print("-", myGLCD.getDisplayXSize()-24, 200); - myGLCD.fillRect(myGLCD.getDisplayXSize()-32,96,myGLCD.getDisplayXSize()-1,128); - myGLCD.drawLine(myGLCD.getDisplayXSize()-32,160,myGLCD.getDisplayXSize()-1,160); - myGLCD.drawLine(myGLCD.getDisplayXSize()-32,192,myGLCD.getDisplayXSize()-1,192); - myGLCD.drawLine(myGLCD.getDisplayXSize()-32,224,myGLCD.getDisplayXSize()-1,224); - for (int i=0; i<8; i++) - { - myGLCD.setColor(colorlist[i]); - myGLCD.fillRect(0, (i*30), 24, (((i+1)*30)-1)); - } - drawColorMarkerAndBrushSize(color); -} - -void loop() -{ - long x, y; - - while (myTouch.dataAvailable() == true) - { - myTouch.read(); - x = myTouch.getX(); - y = myTouch.getY(); - if ((x!=-1) and (y!=-1)) - { - if (x>(31+bsize) and (x128) and (y<160)) - { - if (bsize<7) - { - bsize++; - drawColorMarkerAndBrushSize(color); - while (myTouch.dataAvailable()) {}; - delay(50); - } - } - if ((y>160) and (y<192)) - { - bsize=4; - drawColorMarkerAndBrushSize(color); - while (myTouch.dataAvailable()) {}; - delay(50); - } - if ((y>192) and (y<224)) - { - if (bsize>1) - { - bsize--; - drawColorMarkerAndBrushSize(color); - while (myTouch.dataAvailable()) {}; - delay(50); - } - } - } - } - } - } -} - diff --git a/libraries/UTouch/hardware/arm/HW_ARM.inc b/libraries/UTouch/hardware/arm/HW_ARM.inc deleted file mode 100644 index 069ac43..0000000 --- a/libraries/UTouch/hardware/arm/HW_ARM.inc +++ /dev/null @@ -1,36 +0,0 @@ -// Results becomes inaccurate if direct port manipulation is used hence the use of digitalWrite() and digitalRead() - -void UTouch::touch_WriteData(byte data) -{ - byte temp; - - temp=data; - cbi(P_CLK, B_CLK); - - for(byte count=0; count<8; count++) - { - if(temp & 0x80) - digitalWrite(T_DIN, HIGH); - else - digitalWrite(T_DIN, LOW); - temp = temp << 1; - digitalWrite(T_CLK, LOW); - digitalWrite(T_CLK, HIGH); - } -} - -word UTouch::touch_ReadData() -{ - word data = 0; - - for(byte count=0; count<12; count++) - { - data <<= 1; - digitalWrite(T_CLK, HIGH); - digitalWrite(T_CLK, LOW); - if (digitalRead(T_DOUT)) - data++; - } - return(data); -} - diff --git a/libraries/UTouch/hardware/arm/HW_ARM_defines.h b/libraries/UTouch/hardware/arm/HW_ARM_defines.h deleted file mode 100644 index f5f7465..0000000 --- a/libraries/UTouch/hardware/arm/HW_ARM_defines.h +++ /dev/null @@ -1,17 +0,0 @@ -// *** Hardwarespecific defines *** -#define cbi(reg, bitmask) *reg &= ~bitmask -#define sbi(reg, bitmask) *reg |= bitmask -#define rbi(reg, bitmask) ((*reg) & bitmask) - -#define pulse_high(reg, bitmask) sbi(reg, bitmask); cbi(reg, bitmask); -#define pulse_low(reg, bitmask) cbi(reg, bitmask); sbi(reg, bitmask); - -#define swap(type, i, j) {type t = i; i = j; j = t;} - -#if defined(TEENSYDUINO) && TEENSYDUINO >= 117 - #define regtype volatile uint8_t - #define regsize uint8_t -#else - #define regtype volatile uint32_t - #define regsize uint32_t -#endif diff --git a/libraries/UTouch/hardware/avr/HW_AVR.inc b/libraries/UTouch/hardware/avr/HW_AVR.inc deleted file mode 100644 index 1450b37..0000000 --- a/libraries/UTouch/hardware/avr/HW_AVR.inc +++ /dev/null @@ -1,34 +0,0 @@ -void UTouch::touch_WriteData(byte data) -{ - byte temp; - - temp=data; - cbi(P_CLK, B_CLK); - - for(byte count=0; count<8; count++) - { - if(temp & 0x80) - sbi(P_DIN, B_DIN); - else - cbi(P_DIN, B_DIN); - temp = temp << 1; - cbi(P_CLK, B_CLK); - sbi(P_CLK, B_CLK); - } -} - -word UTouch::touch_ReadData() -{ - word data = 0; - - for(byte count=0; count<12; count++) - { - data <<= 1; - sbi(P_CLK, B_CLK); - cbi(P_CLK, B_CLK); - if (rbi(P_DOUT, B_DOUT)) - data++; - } - return(data); -} - diff --git a/libraries/UTouch/hardware/avr/HW_AVR_defines.h b/libraries/UTouch/hardware/avr/HW_AVR_defines.h deleted file mode 100644 index 318bdd1..0000000 --- a/libraries/UTouch/hardware/avr/HW_AVR_defines.h +++ /dev/null @@ -1,12 +0,0 @@ -// *** Hardwarespecific defines *** -#define cbi(reg, bitmask) *reg &= ~bitmask -#define sbi(reg, bitmask) *reg |= bitmask -#define rbi(reg, bitmask) ((*reg) & bitmask) - -#define pulse_high(reg, bitmask) sbi(reg, bitmask); cbi(reg, bitmask); -#define pulse_low(reg, bitmask) cbi(reg, bitmask); sbi(reg, bitmask); - -#define swap(type, i, j) {type t = i; i = j; j = t;} - -#define regtype volatile uint8_t -#define regsize uint8_t diff --git a/libraries/UTouch/hardware/pic32/HW_PIC32.inc b/libraries/UTouch/hardware/pic32/HW_PIC32.inc deleted file mode 100644 index 58c1724..0000000 --- a/libraries/UTouch/hardware/pic32/HW_PIC32.inc +++ /dev/null @@ -1,36 +0,0 @@ -// Direct port manipulation does not work at the moment, hence the use of digitalWrite() and digitalRead() - -void UTouch::touch_WriteData(byte data) -{ - byte temp; - - temp=data; - cbi(P_CLK, B_CLK); - - for(byte count=0; count<8; count++) - { - if(temp & 0x80) - digitalWrite(T_DIN, HIGH); - else - digitalWrite(T_DIN, LOW); - temp = temp << 1; - digitalWrite(T_CLK, LOW); - digitalWrite(T_CLK, HIGH); - } -} - -word UTouch::touch_ReadData() -{ - word data = 0; - - for(byte count=0; count<12; count++) - { - data <<= 1; - digitalWrite(T_CLK, HIGH); - digitalWrite(T_CLK, LOW); - if (digitalRead(T_DOUT)) - data++; - } - return(data); -} - diff --git a/libraries/UTouch/hardware/pic32/HW_PIC32_defines.h b/libraries/UTouch/hardware/pic32/HW_PIC32_defines.h deleted file mode 100644 index 821e561..0000000 --- a/libraries/UTouch/hardware/pic32/HW_PIC32_defines.h +++ /dev/null @@ -1,12 +0,0 @@ -// *** Hardwarespecific defines *** -#define cbi(reg, bitmask) (*(reg + 1)) = bitmask -#define sbi(reg, bitmask) (*(reg + 2)) = bitmask -#define rbi(reg, bitmask) (*(reg) & bitmask) - -#define pulse_high(reg, bitmask) sbi(reg, bitmask); cbi(reg, bitmask); -#define pulse_low(reg, bitmask) cbi(reg, bitmask); sbi(reg, bitmask); - -#define swap(type, i, j) {type t = i; i = j; j = t;} - -#define regtype volatile uint32_t -#define regsize uint16_t diff --git a/libraries/UTouch/keywords.txt b/libraries/UTouch/keywords.txt deleted file mode 100644 index a79eafe..0000000 --- a/libraries/UTouch/keywords.txt +++ /dev/null @@ -1,17 +0,0 @@ -UTouch KEYWORD1 - -InitTouch KEYWORD2 -read KEYWORD2 -dataAvailable KEYWORD2 -getX KEYWORD2 -getY KEYWORD2 -setPrecision KEYWORD2 - -PREC_LOW LITERAL1 -PREC_MEDIUM LITERAL1 -PREC_HI LITERAL1 -PREC_EXTREME LITERAL1 -PORTRAIT LITERAL1 -LANDSCAPE LITERAL1 -TP_X LITERAL1 -TP_Y LITERAL1 diff --git a/libraries/UTouch/version.txt b/libraries/UTouch/version.txt deleted file mode 100644 index 476825a..0000000 --- a/libraries/UTouch/version.txt +++ /dev/null @@ -1,18 +0,0 @@ -Version: - 1.0 1 Dec 2012 - initial release - 1.1 23 May 2013 - added support for more display modules - modified calibration to try to compensate for slight flaws in some (larger) touchscreens - changed license to CC BY-NC-SA 3.0 - 1.2 22 Sep 2013 - general optimization - fixed some issues with calibration - made modifications to reduce erroneous readings - added support for more display modules - added UTouch_QuickPaint example - 1.21 06 Dec 2013 - added support for ElecFreaks TFT01-4.3 - added support for Coldtears 3.5" and 4.0" modules - 1.22 18 Feb 2014 - added support for Teensy 3.x Boards - added support for three display modules from ElecHouse - made some modifications to improve accuracy when precision is set to medium or higher - 1.23 16 Mar 2014 - fixed a bug that were introduced in v1.22 - 1.24 05 May 2014 - added support for DisplayModule DM-TFT24-104 and DM-TFT28-103 - added support for Coldtears 5" and 7" CPLD modules diff --git a/libraries/readme.txt b/libraries/readme.txt deleted file mode 100644 index a8f1390..0000000 --- a/libraries/readme.txt +++ /dev/null @@ -1 +0,0 @@ -For information on installing libraries, see: http://arduino.cc/en/Guide/Libraries diff --git a/libraries/MySensors/library.json b/library.json similarity index 100% rename from libraries/MySensors/library.json rename to library.json diff --git a/libraries/MySensors/library.properties b/library.properties similarity index 100% rename from libraries/MySensors/library.properties rename to library.properties diff --git a/libraries/MySensors/tests/Arduino/sketches/hard_signing_no_whitelisting_full_debug/hard_signing_no_whitelisting_full_debug.ino b/tests/Arduino/sketches/hard_signing_no_whitelisting_full_debug/hard_signing_no_whitelisting_full_debug.ino similarity index 100% rename from libraries/MySensors/tests/Arduino/sketches/hard_signing_no_whitelisting_full_debug/hard_signing_no_whitelisting_full_debug.ino rename to tests/Arduino/sketches/hard_signing_no_whitelisting_full_debug/hard_signing_no_whitelisting_full_debug.ino diff --git a/libraries/MySensors/tests/Arduino/sketches/hard_signing_whitelisting_full_debug/hard_signing_whitelisting_full_debug.ino b/tests/Arduino/sketches/hard_signing_whitelisting_full_debug/hard_signing_whitelisting_full_debug.ino similarity index 100% rename from libraries/MySensors/tests/Arduino/sketches/hard_signing_whitelisting_full_debug/hard_signing_whitelisting_full_debug.ino rename to tests/Arduino/sketches/hard_signing_whitelisting_full_debug/hard_signing_whitelisting_full_debug.ino diff --git a/libraries/MySensors/tests/Arduino/sketches/hard_signing_whitelisting_full_debug_nodelock/hard_signing_whitelisting_full_debug_nodelock.ino b/tests/Arduino/sketches/hard_signing_whitelisting_full_debug_nodelock/hard_signing_whitelisting_full_debug_nodelock.ino similarity index 100% rename from libraries/MySensors/tests/Arduino/sketches/hard_signing_whitelisting_full_debug_nodelock/hard_signing_whitelisting_full_debug_nodelock.ino rename to tests/Arduino/sketches/hard_signing_whitelisting_full_debug_nodelock/hard_signing_whitelisting_full_debug_nodelock.ino diff --git a/libraries/MySensors/tests/Arduino/sketches/hard_signing_whitelisting_full_debug_nrf24_rsa/hard_signing_whitelisting_full_debug_nrf24_rsa.ino b/tests/Arduino/sketches/hard_signing_whitelisting_full_debug_nrf24_rsa/hard_signing_whitelisting_full_debug_nrf24_rsa.ino similarity index 100% rename from libraries/MySensors/tests/Arduino/sketches/hard_signing_whitelisting_full_debug_nrf24_rsa/hard_signing_whitelisting_full_debug_nrf24_rsa.ino rename to tests/Arduino/sketches/hard_signing_whitelisting_full_debug_nrf24_rsa/hard_signing_whitelisting_full_debug_nrf24_rsa.ino diff --git a/libraries/MySensors/tests/Arduino/sketches/hard_signing_whitelisting_full_debug_rfm69_rsa/hard_signing_whitelisting_full_debug_rfm69_rsa.ino b/tests/Arduino/sketches/hard_signing_whitelisting_full_debug_rfm69_rsa/hard_signing_whitelisting_full_debug_rfm69_rsa.ino similarity index 100% rename from libraries/MySensors/tests/Arduino/sketches/hard_signing_whitelisting_full_debug_rfm69_rsa/hard_signing_whitelisting_full_debug_rfm69_rsa.ino rename to tests/Arduino/sketches/hard_signing_whitelisting_full_debug_rfm69_rsa/hard_signing_whitelisting_full_debug_rfm69_rsa.ino diff --git a/libraries/MySensors/tests/Arduino/sketches/soft_signing_no_whitelisting_full_debug/soft_signing_no_whitelisting_full_debug.ino b/tests/Arduino/sketches/soft_signing_no_whitelisting_full_debug/soft_signing_no_whitelisting_full_debug.ino similarity index 100% rename from libraries/MySensors/tests/Arduino/sketches/soft_signing_no_whitelisting_full_debug/soft_signing_no_whitelisting_full_debug.ino rename to tests/Arduino/sketches/soft_signing_no_whitelisting_full_debug/soft_signing_no_whitelisting_full_debug.ino diff --git a/libraries/MySensors/tests/Arduino/sketches/soft_signing_whitelisting_full_debug/soft_signing_whitelisting_full_debug.ino b/tests/Arduino/sketches/soft_signing_whitelisting_full_debug/soft_signing_whitelisting_full_debug.ino similarity index 100% rename from libraries/MySensors/tests/Arduino/sketches/soft_signing_whitelisting_full_debug/soft_signing_whitelisting_full_debug.ino rename to tests/Arduino/sketches/soft_signing_whitelisting_full_debug/soft_signing_whitelisting_full_debug.ino