summaryrefslogtreecommitdiff
path: root/peripheral/libupm/src/pca9685/pca9685.h
diff options
context:
space:
mode:
Diffstat (limited to 'peripheral/libupm/src/pca9685/pca9685.h')
-rw-r--r--peripheral/libupm/src/pca9685/pca9685.h320
1 files changed, 0 insertions, 320 deletions
diff --git a/peripheral/libupm/src/pca9685/pca9685.h b/peripheral/libupm/src/pca9685/pca9685.h
deleted file mode 100644
index d7b23cc..0000000
--- a/peripheral/libupm/src/pca9685/pca9685.h
+++ /dev/null
@@ -1,320 +0,0 @@
-/*
- * Author: Jon Trulson <jtrulson@ics.com>
- * Copyright (c) 2015 Intel Corporation.
- *
- * 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.
- */
-#pragma once
-
-#include <string>
-#include <mraa/i2c.h>
-#include <mraa/gpio.h>
-
-#define PCA9685_I2C_BUS 0
-#define PCA9685_DEFAULT_I2C_ADDR 0x60
-// internal oscillator frequency
-#define PCA9685_INTERNAL_OSC 25000000.0
-
-// This is a 'special' LED number, used to refer to the ALL_LED registers
-// that affect all LED outputs at once.
-#define PCA9685_ALL_LED 0xff
-
-namespace upm {
-
- /**
- * @brief PCA9685 PWM Controller library
- * @defgroup pca9685 libupm-pca9685
- * @ingroup adafruit i2c led motor
- */
- /**
- * @library pca9685
- * @sensor pca9685
- * @comname PCA9685 PWM Controller
- * @type led motor
- * @man adafruit
- * @web http://www.adafruit.com/products/815
- * @con i2c
- *
- * @brief API for the PCA9685 16-channel, 12-bit PWM LED Controller
- *
- * This controller is also used on the Adafruit* Motor Shield v2.3
- * board to control up to 4 DC motors, 2 stepper motors, and 2 servo
- * motors.
- *
- * This module was tested with the Adafruit Motor Shield v2.3
- *
- * @image html pca9685.jpg
- * @snippet pca9685.cxx Interesting
- */
- class PCA9685 {
- public:
-
- /**
- * PCA9685 registers
- */
- typedef enum { REG_MODE1 = 0x00,
- REG_MODE2 = 0x01,
- REG_I2C_SA1 = 0x02, // I2C subaddress 1
- REG_I2C_SA2 = 0x03,
- REG_I2C_SA3 = 0x04,
- REG_ALLCALL = 0x05, // I2C all call address
-
- // LED output PWM control
- REG_LED0_ON_L = 0x06, // LED0 ON low byte
- REG_LED0_ON_H = 0x07, // LED0 ON high byte
- REG_LED0_OFF_L = 0x08, // LED0 OFF low byte
- REG_LED0_OFF_H = 0x09, // LED0 OFF high byte
- REG_LED1_ON_L = 0x0a,
- REG_LED1_ON_H = 0x0b,
- REG_LED1_OFF_L = 0x0c,
- REG_LED1_OFF_H = 0x0d,
- REG_LED2_ON_L = 0x0e,
- REG_LED2_ON_H = 0x0f,
- REG_LED2_OFF_L = 0x10,
- REG_LED2_OFF_H = 0x11,
- REG_LED3_ON_L = 0x12,
- REG_LED3_ON_H = 0x13,
- REG_LED3_OFF_L = 0x14,
- REG_LED3_OFF_H = 0x15,
- REG_LED4_ON_L = 0x16,
- REG_LED4_ON_H = 0x17,
- REG_LED4_OFF_L = 0x18,
- REG_LED4_OFF_H = 0x19,
- REG_LED5_ON_L = 0x1a,
- REG_LED5_ON_H = 0x1b,
- REG_LED5_OFF_L = 0x1c,
- REG_LED5_OFF_H = 0x1d,
- REG_LED6_ON_L = 0x1e,
- REG_LED6_ON_H = 0x1f,
- REG_LED6_OFF_L = 0x20,
- REG_LED6_OFF_H = 0x21,
- REG_LED7_ON_L = 0x22,
- REG_LED7_ON_H = 0x23,
- REG_LED7_OFF_L = 0x24,
- REG_LED7_OFF_H = 0x25,
- REG_LED8_ON_L = 0x26,
- REG_LED8_ON_H = 0x27,
- REG_LED8_OFF_L = 0x28,
- REG_LED8_OFF_H = 0x29,
- REG_LED9_ON_L = 0x2a,
- REG_LED9_ON_H = 0x2b,
- REG_LED9_OFF_L = 0x2c,
- REG_LED9_OFF_H = 0x2d,
- REG_LED10_ON_L = 0x2e,
- REG_LED10_ON_H = 0x2f,
- REG_LED10_OFF_L = 0x30,
- REG_LED10_OFF_H = 0x31,
- REG_LED11_ON_L = 0x32,
- REG_LED11_ON_H = 0x33,
- REG_LED11_OFF_L = 0x34,
- REG_LED11_OFF_H = 0x35,
- REG_LED12_ON_L = 0x36,
- REG_LED12_ON_H = 0x37,
- REG_LED12_OFF_L = 0x38,
- REG_LED12_OFF_H = 0x39,
- REG_LED13_ON_L = 0x3a,
- REG_LED13_ON_H = 0x3b,
- REG_LED13_OFF_L = 0x3c,
- REG_LED13_OFF_H = 0x3d,
- REG_LED14_ON_L = 0x3e,
- REG_LED14_ON_H = 0x3f,
- REG_LED14_OFF_L = 0x40,
- REG_LED14_OFF_H = 0x41,
- REG_LED15_ON_L = 0x42,
- REG_LED15_ON_H = 0x43,
- REG_LED15_OFF_L = 0x44,
- REG_LED15_OFF_H = 0x45,
- // 0x46-0xf9 reserved
-
- REG_ALL_LED_ON_L = 0xfa, // write all LED ON L
- REG_ALL_LED_ON_H = 0xfb, // write all LED ON H
- REG_ALL_LED_OFF_L = 0xfc, // write all LED OFF L
- REG_ALL_LED_OFF_H = 0xfd, // write all LED OFF H
- REG_PRESCALE = 0xfe,
- REG_TESTMODE = 0xff // don't use
- } PCA9685_REG_T;
-
- /**
- * MODE1 bits
- */
- typedef enum { MODE1_ALL_CALL = 0x01, // all call status
- MODE1_SUB3 = 0x02, // subcall 3 status
- MODE1_SUB2 = 0x04, // subcall 2 status
- MODE1_SUB1 = 0x08, // subcall 1 status
- MODE1_SLEEP = 0x10, // sleep/normal mode
- MODE1_AI = 0x20, // auto-increment enable
- MODE1_EXTCLK = 0x40, // external clock enable
- MODE1_RESTART = 0x80 // restart status
- } PCA9685_MODE1_T;
-
- /**
- * MODE2 bits
- */
- typedef enum { MODE2_OUTNE0 = 0x01, // output driver enable bit 0
- MODE2_OUTNE = 0x02, // output driver enable bit 1
- MODE2_OUTDRV = 0x04, // output open-drain/totem pole
- MODE2_OCH = 0x08, // output change on STOP or ACK
- MODE2_INVRT = 0x10, // output logic state invert
- MODE2_RESERVE0 = 0x20, // reserved
- MODE2_RESERVE1 = 0x40, // reserved
- MODE2_RESERVE2 = 0x80 // reserved
- } PCA9685_MODE2_T;
-
- /**
- * PCA9685 constructor
- *
- * @param bus I2C bus to use
- * @param address Address for this device
- */
- PCA9685(int bus, uint8_t address = PCA9685_DEFAULT_I2C_ADDR, bool raw = false);
-
- /**
- * PCA9685 destructor
- */
- ~PCA9685();
-
- /**
- * Writes a byte value into a register
- *
- * @param reg Register location to write into
- * @param byte Byte to write
- * @return True if successful
- */
- bool writeByte(uint8_t reg, uint8_t byte);
-
- /**
- * Writes a word value into a register. Note: the device must have the
- * auto-increment bit set in the MODE1 register to work.
- *
- * @param reg Register location to write into
- * @param word Word to write
- * @return True if successful
- */
- bool writeWord(uint8_t reg, uint16_t word);
-
- /**
- * Reads a byte value from a register
- *
- * @param reg Register location to read from
- * @return Value in a specified register
- */
- uint8_t readByte(uint8_t reg);
-
- /**
- * Reads a word value from a register. Note: the device must have the
- * auto-increment bit set in the MODE1 register to work.
- *
- * @param reg Register location to read from
- * @return Value in a specified register
- */
- uint16_t readWord(uint8_t reg);
-
- /**
- * Puts the device in or out of the sleep mode. The device is always
- * in the sleep mode upon power-up.
- *
- * @param sleep True to put the device in the sleep mode, false to put out
- * @return True if successful
- */
- bool setModeSleep(bool sleep);
-
- /**
- * Sets or clears the FULL ON bit for a given LED
- *
- * @param led LED number; valid values are 0-15, PCA9685_ALL_LED
- * @param val True to set the bit, false to clear it
- * @return True if successful
- */
- bool ledFullOn(uint8_t led, bool val);
-
- /**
- * Sets or clears the FULL OFF bit for a given LED. If the FULL ON
- * bit is also set, FULL OFF has precedence.
- *
- * @param led LED number; valid values are 0-15, PCA9685_ALL_LED
- * @param val True to set the bit, false to clear it
- * @return True if successful
- */
- bool ledFullOff(uint8_t led, bool val);
-
- /**
- * Sets the 'LED on' time (0-4,095). See the PCA9685 datasheet for details.
- *
- * @param led LED number; valid values are 0-15, PCA9685_ALL_LED
- * @param time 12-bit value at which point the LED turns on
- * @return True if successful
- */
- bool ledOnTime(uint8_t led, uint16_t time);
-
- /**
- * Sets the 'LED off' time (0-4,095). See the PCA9685 datasheet for details.
- *
- * @param led LED number; valid values are 0-15, PCA9685_ALL_LED
- * @param time 12-bit value at which point the LED turns off
- * @return True if successful
- */
- bool ledOffTime(uint8_t led, uint16_t time);
-
- /**
- * Sets the prescale value. See the PCA9685 datasheet for
- * details. The prescale can only be set when the device is in
- * the sleep mode.
- *
- * @param prescale Prescale value
- * @return True if successful
- */
- bool setPrescale(uint8_t prescale);
-
- /**
- * Sets the prescale value based on a desired frequency in Hz. The
- * prescale can only be set when the device is in the sleep mode.
- *
- * @param hz Desired frequency in Hz
- * @param oscFreq Oscillator frequency; default is 25 MHz
- * @return True if successful
- */
- bool setPrescaleFromHz(float hz,
- float oscFreq=PCA9685_INTERNAL_OSC);
-
- /**
- * Enables or disables the restart capability of the controller
- *
- * @param enabled True to enable, false to disable
- * It is enabled by default.
- */
- void enableRestart(bool enabled) { m_restartEnabled = enabled; };
-
- private:
- /**
- * Enables the I2C register auto-increment. This needs to be enabled
- * for write/readWord() to work. The contructor enables this by
- * default.
- *
- * @param ai True to enable, false otherwise
- */
- bool enableAutoIncrement(bool ai);
-
- bool m_restartEnabled;
- mraa_i2c_context m_i2c;
- uint8_t m_addr;
- };
-}
-
-