A feature complete driver for the PCA9952/55 LED driver from NXP.

Dependents:   PCA9955_HelloWorld

Committer:
neilt6
Date:
Fri May 30 19:00:08 2014 +0000
Revision:
13:275e5ea3dc5c
Parent:
12:2b8adb10c605
Added MBED_OPERATORS check to implementation

Who changed what in which revision?

UserRevisionLine numberNew contents of line
neilt6 0:7b3cbb5a53b8 1 /* PCA9952/55 Driver Library
neilt6 11:dbf20a128eb6 2 * Copyright (c) 2014 Neil Thiessen
neilt6 0:7b3cbb5a53b8 3 *
neilt6 0:7b3cbb5a53b8 4 * Licensed under the Apache License, Version 2.0 (the "License");
neilt6 0:7b3cbb5a53b8 5 * you may not use this file except in compliance with the License.
neilt6 0:7b3cbb5a53b8 6 * You may obtain a copy of the License at
neilt6 0:7b3cbb5a53b8 7 *
neilt6 0:7b3cbb5a53b8 8 * http://www.apache.org/licenses/LICENSE-2.0
neilt6 0:7b3cbb5a53b8 9 *
neilt6 0:7b3cbb5a53b8 10 * Unless required by applicable law or agreed to in writing, software
neilt6 0:7b3cbb5a53b8 11 * distributed under the License is distributed on an "AS IS" BASIS,
neilt6 0:7b3cbb5a53b8 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
neilt6 0:7b3cbb5a53b8 13 * See the License for the specific language governing permissions and
neilt6 0:7b3cbb5a53b8 14 * limitations under the License.
neilt6 0:7b3cbb5a53b8 15 */
neilt6 0:7b3cbb5a53b8 16
neilt6 0:7b3cbb5a53b8 17 #ifndef PCA9955_H
neilt6 0:7b3cbb5a53b8 18 #define PCA9955_H
neilt6 0:7b3cbb5a53b8 19
neilt6 0:7b3cbb5a53b8 20 #include "mbed.h"
neilt6 0:7b3cbb5a53b8 21
neilt6 0:7b3cbb5a53b8 22 /** PCA9952/55 class.
neilt6 0:7b3cbb5a53b8 23 * Used for controlling a PCA9952/55 constant current LED driver connected via I2C.
neilt6 0:7b3cbb5a53b8 24 *
neilt6 0:7b3cbb5a53b8 25 * Example:
neilt6 0:7b3cbb5a53b8 26 * @code
neilt6 0:7b3cbb5a53b8 27 * #include "mbed.h"
neilt6 0:7b3cbb5a53b8 28 * #include "PCA9955.h"
neilt6 0:7b3cbb5a53b8 29 *
neilt6 7:7dd3cc73e873 30 * //Create a PCA9955 object at the default address (ADDRESS_0)
neilt6 7:7dd3cc73e873 31 * PCA9955 driver(p28, p27);
neilt6 0:7b3cbb5a53b8 32 *
neilt6 0:7b3cbb5a53b8 33 * int main()
neilt6 0:7b3cbb5a53b8 34 * {
neilt6 0:7b3cbb5a53b8 35 * //Try to open the PCA9955
neilt6 0:7b3cbb5a53b8 36 * if (driver.open()) {
neilt6 0:7b3cbb5a53b8 37 * printf("Device detected!\n");
neilt6 0:7b3cbb5a53b8 38 *
neilt6 0:7b3cbb5a53b8 39 * //Reset the device
neilt6 0:7b3cbb5a53b8 40 * //NOTE: This might reset other I2C devices as well!
neilt6 0:7b3cbb5a53b8 41 * driver.reset();
neilt6 6:c8dc0211e18c 42 * wait_ms(5);
neilt6 0:7b3cbb5a53b8 43 *
neilt6 4:6ca7ab31c5fb 44 * //Set all of the output states to PWM mode
neilt6 0:7b3cbb5a53b8 45 * driver.allOutputStates(PCA9955::OUTPUT_PWM);
neilt6 0:7b3cbb5a53b8 46 *
neilt6 4:6ca7ab31c5fb 47 * //Set all of the output currents to maximum
neilt6 0:7b3cbb5a53b8 48 * driver.allOutputCurrents(1.0);
neilt6 0:7b3cbb5a53b8 49 *
neilt6 0:7b3cbb5a53b8 50 * while (1) {
neilt6 0:7b3cbb5a53b8 51 * //Generate a breathing effect on all of the outputs
neilt6 9:a9f91f91633b 52 * for (float i = 0.0; i < 360.0; i += 0.1)
neilt6 9:a9f91f91633b 53 * driver = 0.5 * (sinf(i * 3.14159265 / 180.0) + 1);
neilt6 0:7b3cbb5a53b8 54 * }
neilt6 0:7b3cbb5a53b8 55 * } else {
neilt6 0:7b3cbb5a53b8 56 * error("Device not detected!\n");
neilt6 0:7b3cbb5a53b8 57 * }
neilt6 0:7b3cbb5a53b8 58 * }
neilt6 0:7b3cbb5a53b8 59 * @endcode
neilt6 0:7b3cbb5a53b8 60 */
neilt6 0:7b3cbb5a53b8 61 class PCA9955
neilt6 0:7b3cbb5a53b8 62 {
neilt6 0:7b3cbb5a53b8 63 public:
neilt6 0:7b3cbb5a53b8 64 /** Represents the different I2C address possibilities for the PCA9952/55
neilt6 0:7b3cbb5a53b8 65 */
neilt6 0:7b3cbb5a53b8 66 enum Address {
neilt6 0:7b3cbb5a53b8 67 ADDRESS_0 = (0x60 << 1), /**< A[3:0] pins = 0000 */
neilt6 0:7b3cbb5a53b8 68 ADDRESS_1 = (0x61 << 1), /**< A[3:0] pins = 0001 */
neilt6 0:7b3cbb5a53b8 69 ADDRESS_2 = (0x62 << 1), /**< A[3:0] pins = 0010 */
neilt6 0:7b3cbb5a53b8 70 ADDRESS_3 = (0x63 << 1), /**< A[3:0] pins = 0011 */
neilt6 0:7b3cbb5a53b8 71 ADDRESS_4 = (0x64 << 1), /**< A[3:0] pins = 0100 */
neilt6 0:7b3cbb5a53b8 72 ADDRESS_5 = (0x65 << 1), /**< A[3:0] pins = 0101 */
neilt6 0:7b3cbb5a53b8 73 ADDRESS_6 = (0x66 << 1), /**< A[3:0] pins = 0110 */
neilt6 0:7b3cbb5a53b8 74 ADDRESS_7 = (0x67 << 1), /**< A[3:0] pins = 0111 */
neilt6 0:7b3cbb5a53b8 75 ADDRESS_8 = (0x68 << 1), /**< A[3:0] pins = 1000 (not available on PCA9952) */
neilt6 0:7b3cbb5a53b8 76 ADDRESS_9 = (0x69 << 1), /**< A[3:0] pins = 1001 (not available on PCA9952) */
neilt6 0:7b3cbb5a53b8 77 ADDRESS_10 = (0x6A << 1), /**< A[3:0] pins = 1010 (not available on PCA9952) */
neilt6 0:7b3cbb5a53b8 78 ADDRESS_11 = (0x6B << 1), /**< A[3:0] pins = 1011 (not available on PCA9952) */
neilt6 0:7b3cbb5a53b8 79 ADDRESS_12 = (0x6C << 1), /**< A[3:0] pins = 1100 (not available on PCA9952) */
neilt6 0:7b3cbb5a53b8 80 ADDRESS_13 = (0x6D << 1), /**< A[3:0] pins = 1101 (not available on PCA9952) */
neilt6 0:7b3cbb5a53b8 81 ADDRESS_14 = (0x6E << 1), /**< A[3:0] pins = 1110 (not available on PCA9952) */
neilt6 7:7dd3cc73e873 82 ADDRESS_15 = (0x6F << 1) /**< A[3:0] pins = 1111 (not available on PCA9952) */
neilt6 0:7b3cbb5a53b8 83 };
neilt6 0:7b3cbb5a53b8 84
neilt6 0:7b3cbb5a53b8 85 /** Represents the different outputs of the PCA9952/55
neilt6 0:7b3cbb5a53b8 86 */
neilt6 0:7b3cbb5a53b8 87 enum Output {
neilt6 0:7b3cbb5a53b8 88 OUTPUT_0 = 0, /**< LED output 0 */
neilt6 0:7b3cbb5a53b8 89 OUTPUT_1 = 1, /**< LED output 1 */
neilt6 0:7b3cbb5a53b8 90 OUTPUT_2 = 2, /**< LED output 2 */
neilt6 0:7b3cbb5a53b8 91 OUTPUT_3 = 3, /**< LED output 3 */
neilt6 0:7b3cbb5a53b8 92 OUTPUT_4 = 4, /**< LED output 4 */
neilt6 0:7b3cbb5a53b8 93 OUTPUT_5 = 5, /**< LED output 5 */
neilt6 0:7b3cbb5a53b8 94 OUTPUT_6 = 6, /**< LED output 6 */
neilt6 0:7b3cbb5a53b8 95 OUTPUT_7 = 7, /**< LED output 7 */
neilt6 0:7b3cbb5a53b8 96 OUTPUT_8 = 8, /**< LED output 8 */
neilt6 0:7b3cbb5a53b8 97 OUTPUT_9 = 9, /**< LED output 9 */
neilt6 0:7b3cbb5a53b8 98 OUTPUT_10 = 10, /**< LED output 10 */
neilt6 0:7b3cbb5a53b8 99 OUTPUT_11 = 11, /**< LED output 11 */
neilt6 0:7b3cbb5a53b8 100 OUTPUT_12 = 12, /**< LED output 12 */
neilt6 0:7b3cbb5a53b8 101 OUTPUT_13 = 13, /**< LED output 13 */
neilt6 0:7b3cbb5a53b8 102 OUTPUT_14 = 14, /**< LED output 14 */
neilt6 0:7b3cbb5a53b8 103 OUTPUT_15 = 15 /**< LED output 15 */
neilt6 0:7b3cbb5a53b8 104 };
neilt6 0:7b3cbb5a53b8 105
neilt6 0:7b3cbb5a53b8 106 /** Represents the power mode of the PCA9952/55
neilt6 0:7b3cbb5a53b8 107 */
neilt6 0:7b3cbb5a53b8 108 enum PowerMode {
neilt6 0:7b3cbb5a53b8 109 POWER_NORMAL, /**< Oscillator is enabled */
neilt6 0:7b3cbb5a53b8 110 POWER_SHUTDOWN /**< Oscillator is disabled */
neilt6 0:7b3cbb5a53b8 111 };
neilt6 0:7b3cbb5a53b8 112
neilt6 0:7b3cbb5a53b8 113 /** Represents the output change mode of the PCA9952/55
neilt6 0:7b3cbb5a53b8 114 */
neilt6 0:7b3cbb5a53b8 115 enum OutputChangeMode {
neilt6 0:7b3cbb5a53b8 116 OUTPUT_CHANGE_ON_STOP, /**< Outputs change on STOP command */
neilt6 0:7b3cbb5a53b8 117 OUTPUT_CHANGE_ON_ACK /**< Outputs change on ACK */
neilt6 0:7b3cbb5a53b8 118 };
neilt6 0:7b3cbb5a53b8 119
neilt6 0:7b3cbb5a53b8 120 /** Represents the group control mode of the PCA9952/55
neilt6 0:7b3cbb5a53b8 121 */
neilt6 0:7b3cbb5a53b8 122 enum GroupMode {
neilt6 0:7b3cbb5a53b8 123 GROUP_DIMMING, /**< Group control = dimming */
neilt6 0:7b3cbb5a53b8 124 GROUP_BLINKING /**< group control = blinking */
neilt6 0:7b3cbb5a53b8 125 };
neilt6 0:7b3cbb5a53b8 126
neilt6 0:7b3cbb5a53b8 127 /** Represents the individual driver output states of the PCA9952/55
neilt6 0:7b3cbb5a53b8 128 */
neilt6 0:7b3cbb5a53b8 129 enum OutputState {
neilt6 0:7b3cbb5a53b8 130 OUTPUT_OFF, /**< LED driver x is off (default power-up state) */
neilt6 0:7b3cbb5a53b8 131 OUTPUT_ON, /**< LED driver x is fully on (individual brightness and group dimming/blinking not controlled) */
neilt6 0:7b3cbb5a53b8 132 OUTPUT_PWM, /**< LED driver x individual brightness can be controlled through its PWMx register */
neilt6 0:7b3cbb5a53b8 133 OUTPUT_PWM_GRPPWM /**< LED driver x individual brightness and group dimming/blinking can be controlled through its PWMx register and the GRPPWM registers */
neilt6 0:7b3cbb5a53b8 134 };
neilt6 0:7b3cbb5a53b8 135
neilt6 0:7b3cbb5a53b8 136 /** Represents the fault test flags for the PCA9952/55
neilt6 0:7b3cbb5a53b8 137 */
neilt6 0:7b3cbb5a53b8 138 enum FaultFlags {
neilt6 0:7b3cbb5a53b8 139 FAULT_OUTPUT_0 = (1 << 0), /**< LED output 0 is either open or shorted */
neilt6 0:7b3cbb5a53b8 140 FAULT_OUTPUT_1 = (1 << 1), /**< LED output 1 is either open or shorted */
neilt6 0:7b3cbb5a53b8 141 FAULT_OUTPUT_2 = (1 << 2), /**< LED output 2 is either open or shorted */
neilt6 0:7b3cbb5a53b8 142 FAULT_OUTPUT_3 = (1 << 3), /**< LED output 3 is either open or shorted */
neilt6 0:7b3cbb5a53b8 143 FAULT_OUTPUT_4 = (1 << 4), /**< LED output 4 is either open or shorted */
neilt6 0:7b3cbb5a53b8 144 FAULT_OUTPUT_5 = (1 << 5), /**< LED output 5 is either open or shorted */
neilt6 0:7b3cbb5a53b8 145 FAULT_OUTPUT_6 = (1 << 6), /**< LED output 6 is either open or shorted */
neilt6 0:7b3cbb5a53b8 146 FAULT_OUTPUT_7 = (1 << 7), /**< LED output 7 is either open or shorted */
neilt6 0:7b3cbb5a53b8 147 FAULT_OUTPUT_8 = (1 << 8), /**< LED output 8 is either open or shorted */
neilt6 0:7b3cbb5a53b8 148 FAULT_OUTPUT_9 = (1 << 9), /**< LED output 9 is either open or shorted */
neilt6 0:7b3cbb5a53b8 149 FAULT_OUTPUT_10 = (1 << 10), /**< LED output 10 is either open or shorted */
neilt6 0:7b3cbb5a53b8 150 FAULT_OUTPUT_11 = (1 << 11), /**< LED output 11 is either open or shorted */
neilt6 0:7b3cbb5a53b8 151 FAULT_OUTPUT_12 = (1 << 12), /**< LED output 12 is either open or shorted */
neilt6 0:7b3cbb5a53b8 152 FAULT_OUTPUT_13 = (1 << 13), /**< LED output 13 is either open or shorted */
neilt6 0:7b3cbb5a53b8 153 FAULT_OUTPUT_14 = (1 << 14), /**< LED output 14 is either open or shorted */
neilt6 0:7b3cbb5a53b8 154 FAULT_OUTPUT_15 = (1 << 15) /**< LED output 15 is either open or shorted */
neilt6 0:7b3cbb5a53b8 155 };
neilt6 0:7b3cbb5a53b8 156
neilt6 7:7dd3cc73e873 157 /** The default LED All Call address
neilt6 7:7dd3cc73e873 158 */
neilt6 7:7dd3cc73e873 159 static const int ALLCALL_ADDRESS = (0x70 << 1);
neilt6 7:7dd3cc73e873 160
neilt6 7:7dd3cc73e873 161 /** The default subaddress for 16-channel LED drivers
neilt6 7:7dd3cc73e873 162 */
neilt6 7:7dd3cc73e873 163 static const int SUBCALL_ADDRESS = (0x76 << 1);
neilt6 7:7dd3cc73e873 164
neilt6 0:7b3cbb5a53b8 165 /** Create a PCA9952/55 object connected to the specified I2C pins with the specified I2C slave address
neilt6 0:7b3cbb5a53b8 166 *
neilt6 0:7b3cbb5a53b8 167 * @param sda The I2C data pin.
neilt6 0:7b3cbb5a53b8 168 * @param scl The I2C clock pin.
neilt6 0:7b3cbb5a53b8 169 * @param addr The I2C slave address (defaults to ADDRESS_0).
neilt6 10:c8c96c894ec6 170 * @param hz The I2C bus frequency (defaults to 400kHz).
neilt6 0:7b3cbb5a53b8 171 */
neilt6 10:c8c96c894ec6 172 PCA9955(PinName sda, PinName scl, Address addr = ADDRESS_0, int hz = 400000);
neilt6 0:7b3cbb5a53b8 173
neilt6 11:dbf20a128eb6 174 /** Probe for the PCA9952/55 and indicate if it's present on the bus
neilt6 0:7b3cbb5a53b8 175 *
neilt6 0:7b3cbb5a53b8 176 * @returns
neilt6 0:7b3cbb5a53b8 177 * 'true' if the device exists on the bus,
neilt6 0:7b3cbb5a53b8 178 * 'false' if the device doesn't exist on the bus.
neilt6 0:7b3cbb5a53b8 179 */
neilt6 1:016f916c5579 180 bool open();
neilt6 0:7b3cbb5a53b8 181
neilt6 11:dbf20a128eb6 182 /** Issue a General Call Reset command to reset all PCA9952/55 devices on the bus
neilt6 6:c8dc0211e18c 183 *
neilt6 6:c8dc0211e18c 184 * @note Requires a 5ms delay before issuing additional commands
neilt6 6:c8dc0211e18c 185 *
neilt6 6:c8dc0211e18c 186 * @warning This might reset other I2C devices as well
neilt6 0:7b3cbb5a53b8 187 */
neilt6 1:016f916c5579 188 void reset();
neilt6 0:7b3cbb5a53b8 189
neilt6 0:7b3cbb5a53b8 190 /** Determine whether the LED All Call address is enabled on the PCA9952/55
neilt6 0:7b3cbb5a53b8 191 *
neilt6 0:7b3cbb5a53b8 192 * @returns Whether or not the LED All Call address is enabled.
neilt6 0:7b3cbb5a53b8 193 */
neilt6 1:016f916c5579 194 bool allCallEnabled();
neilt6 0:7b3cbb5a53b8 195
neilt6 0:7b3cbb5a53b8 196 /** Set whether the LED All Call address is enabled on the PCA9952/55
neilt6 0:7b3cbb5a53b8 197 *
neilt6 0:7b3cbb5a53b8 198 * @param enabled Whether or not the LED All Call address is enabled.
neilt6 0:7b3cbb5a53b8 199 */
neilt6 0:7b3cbb5a53b8 200 void allCallEnabled(bool enabled);
neilt6 0:7b3cbb5a53b8 201
neilt6 0:7b3cbb5a53b8 202 /** Determine whether subaddress 3 is enabled on the PCA9952/55
neilt6 0:7b3cbb5a53b8 203 *
neilt6 0:7b3cbb5a53b8 204 * @returns Whether or not subaddress 3 is enabled.
neilt6 0:7b3cbb5a53b8 205 */
neilt6 1:016f916c5579 206 bool subCall3Enabled();
neilt6 0:7b3cbb5a53b8 207
neilt6 0:7b3cbb5a53b8 208 /** Set whether subaddress 3 is enabled on the PCA9952/55
neilt6 0:7b3cbb5a53b8 209 *
neilt6 0:7b3cbb5a53b8 210 * @param enabled Whether or not subaddress 3 is enabled.
neilt6 0:7b3cbb5a53b8 211 */
neilt6 0:7b3cbb5a53b8 212 void subCall3Enabled(bool enabled);
neilt6 0:7b3cbb5a53b8 213
neilt6 0:7b3cbb5a53b8 214 /** Determine whether subaddress 2 is enabled on the PCA9952/55
neilt6 0:7b3cbb5a53b8 215 *
neilt6 0:7b3cbb5a53b8 216 * @returns Whether or not subaddress 2 is enabled.
neilt6 0:7b3cbb5a53b8 217 */
neilt6 1:016f916c5579 218 bool subCall2Enabled();
neilt6 0:7b3cbb5a53b8 219
neilt6 0:7b3cbb5a53b8 220 /** Set whether subaddress 2 is enabled on the PCA9952/55
neilt6 0:7b3cbb5a53b8 221 *
neilt6 0:7b3cbb5a53b8 222 * @param enabled Whether or not subaddress 2 is enabled.
neilt6 0:7b3cbb5a53b8 223 */
neilt6 0:7b3cbb5a53b8 224 void subCall2Enabled(bool enabled);
neilt6 0:7b3cbb5a53b8 225
neilt6 0:7b3cbb5a53b8 226 /** Determine whether subaddress 1 is enabled on the PCA9952/55
neilt6 0:7b3cbb5a53b8 227 *
neilt6 0:7b3cbb5a53b8 228 * @returns Whether or not subaddress 1 is enabled.
neilt6 0:7b3cbb5a53b8 229 */
neilt6 1:016f916c5579 230 bool subCall1Enabled();
neilt6 0:7b3cbb5a53b8 231
neilt6 0:7b3cbb5a53b8 232 /** Set whether subaddress 1 is enabled on the PCA9952/55
neilt6 0:7b3cbb5a53b8 233 *
neilt6 0:7b3cbb5a53b8 234 * @param enabled Whether or not subaddress 1 is enabled.
neilt6 0:7b3cbb5a53b8 235 */
neilt6 0:7b3cbb5a53b8 236 void subCall1Enabled(bool enabled);
neilt6 0:7b3cbb5a53b8 237
neilt6 0:7b3cbb5a53b8 238 /** Get the current power mode of the PCA9952/55
neilt6 0:7b3cbb5a53b8 239 *
neilt6 0:7b3cbb5a53b8 240 * @returns The current power mode as a PowerMode enum.
neilt6 0:7b3cbb5a53b8 241 */
neilt6 1:016f916c5579 242 PCA9955::PowerMode powerMode();
neilt6 0:7b3cbb5a53b8 243
neilt6 0:7b3cbb5a53b8 244 /** Set the power mode of the PCA9952/55
neilt6 0:7b3cbb5a53b8 245 *
neilt6 0:7b3cbb5a53b8 246 * @param mode The new power mode as a PowerMode enum.
neilt6 0:7b3cbb5a53b8 247 */
neilt6 0:7b3cbb5a53b8 248 void powerMode(PowerMode mode);
neilt6 0:7b3cbb5a53b8 249
neilt6 0:7b3cbb5a53b8 250 /** Get the current output change mode of the PCA9952/55
neilt6 0:7b3cbb5a53b8 251 *
neilt6 0:7b3cbb5a53b8 252 * @returns The current output change mode as an OutputChangeMode enum.
neilt6 0:7b3cbb5a53b8 253 */
neilt6 1:016f916c5579 254 PCA9955::OutputChangeMode outputChangeMode();
neilt6 0:7b3cbb5a53b8 255
neilt6 0:7b3cbb5a53b8 256 /** Set the output change mode of the PCA9952/55
neilt6 0:7b3cbb5a53b8 257 *
neilt6 0:7b3cbb5a53b8 258 * @param mode The new output change mode as an OutputChangeMode enum.
neilt6 0:7b3cbb5a53b8 259 */
neilt6 0:7b3cbb5a53b8 260 void outputChangeMode(OutputChangeMode mode);
neilt6 0:7b3cbb5a53b8 261
neilt6 0:7b3cbb5a53b8 262 /** Get the current group control mode of the PCA9952/55
neilt6 0:7b3cbb5a53b8 263 *
neilt6 0:7b3cbb5a53b8 264 * @returns The current group control mode as a GroupMode enum.
neilt6 0:7b3cbb5a53b8 265 */
neilt6 1:016f916c5579 266 PCA9955::GroupMode groupMode();
neilt6 0:7b3cbb5a53b8 267
neilt6 0:7b3cbb5a53b8 268 /** Set the group control mode of the PCA9952/55
neilt6 0:7b3cbb5a53b8 269 *
neilt6 0:7b3cbb5a53b8 270 * @param mode The new group control mode as a GroupMode enum.
neilt6 0:7b3cbb5a53b8 271 */
neilt6 0:7b3cbb5a53b8 272 void groupMode(GroupMode mode);
neilt6 0:7b3cbb5a53b8 273
neilt6 0:7b3cbb5a53b8 274 /** Determine whether or not the PCA9952/55 is overheating
neilt6 0:7b3cbb5a53b8 275 *
neilt6 0:7b3cbb5a53b8 276 * @returns
neilt6 0:7b3cbb5a53b8 277 * 'true' if the device is currently disabled due to overheating,
neilt6 0:7b3cbb5a53b8 278 * 'false' if the device is functioning normally.
neilt6 0:7b3cbb5a53b8 279 */
neilt6 1:016f916c5579 280 bool overTemp();
neilt6 0:7b3cbb5a53b8 281
neilt6 0:7b3cbb5a53b8 282 /** Get the specified output's state
neilt6 0:7b3cbb5a53b8 283 *
neilt6 0:7b3cbb5a53b8 284 * @param output The output to check.
neilt6 0:7b3cbb5a53b8 285 *
neilt6 0:7b3cbb5a53b8 286 * @returns The output's current state as an OutputState enum.
neilt6 0:7b3cbb5a53b8 287 */
neilt6 0:7b3cbb5a53b8 288 PCA9955::OutputState outputState(Output output);
neilt6 0:7b3cbb5a53b8 289
neilt6 0:7b3cbb5a53b8 290 /** Set the specified output's state
neilt6 0:7b3cbb5a53b8 291 *
neilt6 0:7b3cbb5a53b8 292 * @param output The output to change.
neilt6 0:7b3cbb5a53b8 293 * @param state The new output state as an OutputState enum.
neilt6 0:7b3cbb5a53b8 294 */
neilt6 0:7b3cbb5a53b8 295 void outputState(Output output, OutputState state);
neilt6 0:7b3cbb5a53b8 296
neilt6 0:7b3cbb5a53b8 297 /** Get the current group control duty cycle of the PCA9952/55 in percent
neilt6 0:7b3cbb5a53b8 298 *
neilt6 0:7b3cbb5a53b8 299 * @returns The current group control duty cycle as a float (0.0 to 1.0).
neilt6 0:7b3cbb5a53b8 300 */
neilt6 1:016f916c5579 301 float groupDuty();
neilt6 0:7b3cbb5a53b8 302
neilt6 0:7b3cbb5a53b8 303 /** Set the group control duty cycle of the PCA9952/55 in percent
neilt6 0:7b3cbb5a53b8 304 *
neilt6 0:7b3cbb5a53b8 305 * @param duty The new group control duty cycle as a float (0.0 to 1.0).
neilt6 7:7dd3cc73e873 306 * @param altAddr An optional, alternate address such as a subaddress or LED All Call address (defaults to NULL).
neilt6 0:7b3cbb5a53b8 307 */
neilt6 7:7dd3cc73e873 308 void groupDuty(float duty, int altAddr = NULL);
neilt6 0:7b3cbb5a53b8 309
neilt6 0:7b3cbb5a53b8 310 /** Get the current group control duty cycle of the PCA9952/55
neilt6 0:7b3cbb5a53b8 311 *
neilt6 0:7b3cbb5a53b8 312 * @returns The current group control duty cycle as an unsigned char (0 to 255).
neilt6 0:7b3cbb5a53b8 313 */
neilt6 12:2b8adb10c605 314 char groupDuty_u8();
neilt6 0:7b3cbb5a53b8 315
neilt6 0:7b3cbb5a53b8 316 /** Set the group control duty cycle of the PCA9952/55
neilt6 0:7b3cbb5a53b8 317 *
neilt6 0:7b3cbb5a53b8 318 * @param duty The new group control duty cycle as an unsigned char (0 to 255).
neilt6 7:7dd3cc73e873 319 * @param altAddr An optional, alternate address such as a subaddress or LED All Call address (defaults to NULL).
neilt6 0:7b3cbb5a53b8 320 */
neilt6 12:2b8adb10c605 321 void groupDuty_u8(char duty, int altAddr = NULL);
neilt6 0:7b3cbb5a53b8 322
neilt6 0:7b3cbb5a53b8 323 /** Get the current group control blink period of the PCA9952/55 in seconds
neilt6 0:7b3cbb5a53b8 324 *
neilt6 0:7b3cbb5a53b8 325 * @returns The current group control blink period in seconds (0.067 to 16.8).
neilt6 0:7b3cbb5a53b8 326 */
neilt6 1:016f916c5579 327 float groupBlinkPeriod();
neilt6 0:7b3cbb5a53b8 328
neilt6 0:7b3cbb5a53b8 329 /** Set the current group control blink period of the PCA9952/55 in seconds
neilt6 0:7b3cbb5a53b8 330 *
neilt6 0:7b3cbb5a53b8 331 * @param period The new group control blink period in seconds (0.067 to 16.8).
neilt6 7:7dd3cc73e873 332 * @param altAddr An optional, alternate address such as a subaddress or LED All Call address (defaults to NULL).
neilt6 0:7b3cbb5a53b8 333 */
neilt6 7:7dd3cc73e873 334 void groupBlinkPeriod(float period, int altAddr = NULL);
neilt6 0:7b3cbb5a53b8 335
neilt6 0:7b3cbb5a53b8 336 /** Get the current group control blink period of the PCA9952/55
neilt6 0:7b3cbb5a53b8 337 *
neilt6 0:7b3cbb5a53b8 338 * @returns The current group control blink period as an unsigned char (0 to 255).
neilt6 0:7b3cbb5a53b8 339 */
neilt6 12:2b8adb10c605 340 char groupBlinkPeriod_u8();
neilt6 0:7b3cbb5a53b8 341
neilt6 0:7b3cbb5a53b8 342 /** Set the current group control blink period of the PCA9952/55
neilt6 0:7b3cbb5a53b8 343 *
neilt6 0:7b3cbb5a53b8 344 * @param period The new group control blink period as an unsigned char (0 to 255).
neilt6 7:7dd3cc73e873 345 * @param altAddr An optional, alternate address such as a subaddress or LED All Call address (defaults to NULL).
neilt6 0:7b3cbb5a53b8 346 */
neilt6 12:2b8adb10c605 347 void groupBlinkPeriod_u8(char period, int altAddr = NULL);
neilt6 0:7b3cbb5a53b8 348
neilt6 0:7b3cbb5a53b8 349 /** Get the specified output's duty cycle in percent
neilt6 0:7b3cbb5a53b8 350 *
neilt6 0:7b3cbb5a53b8 351 * @param output The output to check.
neilt6 0:7b3cbb5a53b8 352 *
neilt6 0:7b3cbb5a53b8 353 * @returns The output's current duty cycle as a float (0.0 to 1.0).
neilt6 0:7b3cbb5a53b8 354 */
neilt6 0:7b3cbb5a53b8 355 float outputDuty(Output output);
neilt6 0:7b3cbb5a53b8 356
neilt6 0:7b3cbb5a53b8 357 /** Set the specified output's duty cycle in percent
neilt6 0:7b3cbb5a53b8 358 *
neilt6 0:7b3cbb5a53b8 359 * @param output The output to change.
neilt6 0:7b3cbb5a53b8 360 * @param duty The new output duty cycle as a float (0.0 to 1.0).
neilt6 7:7dd3cc73e873 361 * @param altAddr An optional, alternate address such as a subaddress or LED All Call address (defaults to NULL).
neilt6 0:7b3cbb5a53b8 362 */
neilt6 7:7dd3cc73e873 363 void outputDuty(Output output, float duty, int altAddr = NULL);
neilt6 0:7b3cbb5a53b8 364
neilt6 0:7b3cbb5a53b8 365 /** Get the specified output's duty cycle
neilt6 0:7b3cbb5a53b8 366 *
neilt6 0:7b3cbb5a53b8 367 * @param output The output to check.
neilt6 0:7b3cbb5a53b8 368 *
neilt6 0:7b3cbb5a53b8 369 * @returns The output's current duty cycle as an unsigned char (0 to 255).
neilt6 0:7b3cbb5a53b8 370 */
neilt6 12:2b8adb10c605 371 char outputDuty_u8(Output output);
neilt6 0:7b3cbb5a53b8 372
neilt6 0:7b3cbb5a53b8 373 /** Set the specified output's duty cycle
neilt6 0:7b3cbb5a53b8 374 *
neilt6 0:7b3cbb5a53b8 375 * @param output The output to change.
neilt6 0:7b3cbb5a53b8 376 * @param duty The new output duty cycle as an unsigned char (0 to 255).
neilt6 7:7dd3cc73e873 377 * @param altAddr An optional, alternate address such as a subaddress or LED All Call address (defaults to NULL).
neilt6 0:7b3cbb5a53b8 378 */
neilt6 12:2b8adb10c605 379 void outputDuty_u8(Output output, char duty, int altAddr = NULL);
neilt6 0:7b3cbb5a53b8 380
neilt6 0:7b3cbb5a53b8 381 /** Get the specified output's current reference in percent
neilt6 0:7b3cbb5a53b8 382 *
neilt6 0:7b3cbb5a53b8 383 * @param output The output to check.
neilt6 0:7b3cbb5a53b8 384 *
neilt6 0:7b3cbb5a53b8 385 * @returns The output's current reference as a float (0.0 to 1.0).
neilt6 0:7b3cbb5a53b8 386 */
neilt6 0:7b3cbb5a53b8 387 float outputCurrent(Output output);
neilt6 0:7b3cbb5a53b8 388
neilt6 0:7b3cbb5a53b8 389 /** Set the specified output's current reference in percent
neilt6 0:7b3cbb5a53b8 390 *
neilt6 0:7b3cbb5a53b8 391 * @param output The output to change.
neilt6 0:7b3cbb5a53b8 392 * @param iref The new output current reference as a float (0.0 to 1.0).
neilt6 7:7dd3cc73e873 393 * @param altAddr An optional, alternate address such as a subaddress or LED All Call address (defaults to NULL).
neilt6 0:7b3cbb5a53b8 394 */
neilt6 7:7dd3cc73e873 395 void outputCurrent(Output output, float iref, int altAddr = NULL);
neilt6 0:7b3cbb5a53b8 396
neilt6 0:7b3cbb5a53b8 397 /** Get the specified output's current reference
neilt6 0:7b3cbb5a53b8 398 *
neilt6 0:7b3cbb5a53b8 399 * @param output The output to check.
neilt6 0:7b3cbb5a53b8 400 *
neilt6 0:7b3cbb5a53b8 401 * @returns The output's current reference as an unsigned char (0 to 255).
neilt6 0:7b3cbb5a53b8 402 */
neilt6 12:2b8adb10c605 403 char outputCurrent_u8(Output output);
neilt6 0:7b3cbb5a53b8 404
neilt6 0:7b3cbb5a53b8 405 /** Set the specified output's current reference
neilt6 0:7b3cbb5a53b8 406 *
neilt6 0:7b3cbb5a53b8 407 * @param output The output to change.
neilt6 0:7b3cbb5a53b8 408 * @param iref The new output current reference as an unsigned char (0 to 255).
neilt6 7:7dd3cc73e873 409 * @param altAddr An optional, alternate address such as a subaddress or LED All Call address (defaults to NULL).
neilt6 0:7b3cbb5a53b8 410 */
neilt6 12:2b8adb10c605 411 void outputCurrent_u8(Output output, char iref, int altAddr = NULL);
neilt6 0:7b3cbb5a53b8 412
neilt6 0:7b3cbb5a53b8 413 /** Get the turn-on delay between LEDn outputs
neilt6 0:7b3cbb5a53b8 414 *
neilt6 0:7b3cbb5a53b8 415 * @returns The turn-on delay between LEDn outputs in clocks (0 to 15 - 125ns per clock).
neilt6 0:7b3cbb5a53b8 416 */
neilt6 1:016f916c5579 417 char outputDelay();
neilt6 0:7b3cbb5a53b8 418
neilt6 0:7b3cbb5a53b8 419 /** Set the specified output's current reference
neilt6 0:7b3cbb5a53b8 420 *
neilt6 0:7b3cbb5a53b8 421 * @param clocks The turn-on delay between LEDn outputs in clocks (0 to 15 - 125ns per clock).
neilt6 7:7dd3cc73e873 422 * @param altAddr An optional, alternate address such as a subaddress or LED All Call address (defaults to NULL).
neilt6 0:7b3cbb5a53b8 423 */
neilt6 7:7dd3cc73e873 424 void outputDelay(char clocks, int altAddr = NULL);
neilt6 0:7b3cbb5a53b8 425
neilt6 0:7b3cbb5a53b8 426 /** Get subaddress 1
neilt6 0:7b3cbb5a53b8 427 *
neilt6 0:7b3cbb5a53b8 428 * @returns The current I2C subaddress 1.
neilt6 0:7b3cbb5a53b8 429 */
neilt6 1:016f916c5579 430 char subCall1Addr();
neilt6 0:7b3cbb5a53b8 431
neilt6 0:7b3cbb5a53b8 432 /** Set subaddress 1
neilt6 0:7b3cbb5a53b8 433 *
neilt6 0:7b3cbb5a53b8 434 * @param addr The new I2C subaddress 1.
neilt6 7:7dd3cc73e873 435 * @param altAddr An optional, alternate address such as a subaddress or LED All Call address (defaults to NULL).
neilt6 0:7b3cbb5a53b8 436 */
neilt6 7:7dd3cc73e873 437 void subCall1Addr(char addr, int altAddr = NULL);
neilt6 0:7b3cbb5a53b8 438
neilt6 0:7b3cbb5a53b8 439 /** Get subaddress 2
neilt6 0:7b3cbb5a53b8 440 *
neilt6 0:7b3cbb5a53b8 441 * @returns The current I2C subaddress 2.
neilt6 0:7b3cbb5a53b8 442 */
neilt6 1:016f916c5579 443 char subCall2Addr();
neilt6 0:7b3cbb5a53b8 444
neilt6 0:7b3cbb5a53b8 445 /** Set subaddress 2
neilt6 0:7b3cbb5a53b8 446 *
neilt6 0:7b3cbb5a53b8 447 * @param addr The new I2C subaddress 2.
neilt6 7:7dd3cc73e873 448 * @param altAddr An optional, alternate address such as a subaddress or LED All Call address (defaults to NULL).
neilt6 0:7b3cbb5a53b8 449 */
neilt6 7:7dd3cc73e873 450 void subCall2Addr(char addr, int altAddr = NULL);
neilt6 0:7b3cbb5a53b8 451
neilt6 0:7b3cbb5a53b8 452 /** Get subaddress 3
neilt6 0:7b3cbb5a53b8 453 *
neilt6 0:7b3cbb5a53b8 454 * @returns The current I2C subaddress 3.
neilt6 0:7b3cbb5a53b8 455 */
neilt6 1:016f916c5579 456 char subCall3Addr();
neilt6 0:7b3cbb5a53b8 457
neilt6 0:7b3cbb5a53b8 458 /** Set subaddress 3
neilt6 0:7b3cbb5a53b8 459 *
neilt6 0:7b3cbb5a53b8 460 * @param addr The new I2C subaddress 3.
neilt6 7:7dd3cc73e873 461 * @param altAddr An optional, alternate address such as a subaddress or LED All Call address (defaults to NULL).
neilt6 0:7b3cbb5a53b8 462 */
neilt6 7:7dd3cc73e873 463 void subCall3Addr(char addr, int altAddr = NULL);
neilt6 0:7b3cbb5a53b8 464
neilt6 0:7b3cbb5a53b8 465 /** Get the LED All Call address
neilt6 0:7b3cbb5a53b8 466 *
neilt6 0:7b3cbb5a53b8 467 * @returns The current LED All Call address.
neilt6 0:7b3cbb5a53b8 468 */
neilt6 1:016f916c5579 469 char allCallAddr();
neilt6 0:7b3cbb5a53b8 470
neilt6 0:7b3cbb5a53b8 471 /** Set the LED All Call address
neilt6 0:7b3cbb5a53b8 472 *
neilt6 0:7b3cbb5a53b8 473 * @param addr The new LED All Call address.
neilt6 7:7dd3cc73e873 474 * @param altAddr An optional, alternate address such as a subaddress or LED All Call address (defaults to NULL).
neilt6 0:7b3cbb5a53b8 475 */
neilt6 7:7dd3cc73e873 476 void allCallAddr(char addr, int altAddr = NULL);
neilt6 0:7b3cbb5a53b8 477
neilt6 12:2b8adb10c605 478 /** Read a range of output states into an array
neilt6 12:2b8adb10c605 479 *
neilt6 12:2b8adb10c605 480 * @param states Pointer to an array for up to 16 output states.
neilt6 12:2b8adb10c605 481 * @param start The first output to read (defaults to OUTPUT_0).
neilt6 12:2b8adb10c605 482 * @param end The last output to read (defaults to OUTPUT_15).
neilt6 12:2b8adb10c605 483 */
neilt6 12:2b8adb10c605 484 void getOutputStates(OutputState* states, Output start = OUTPUT_0, Output end = OUTPUT_15);
neilt6 12:2b8adb10c605 485
neilt6 12:2b8adb10c605 486 /** Set a range of output states from an array
neilt6 12:2b8adb10c605 487 *
neilt6 12:2b8adb10c605 488 * @param states Pointer to an array of up to 16 output states.
neilt6 12:2b8adb10c605 489 * @param start The first output to set (defaults to OUTPUT_0).
neilt6 12:2b8adb10c605 490 * @param end The last output to set (defaults to OUTPUT_15).
neilt6 12:2b8adb10c605 491 */
neilt6 12:2b8adb10c605 492 void setOutputStates(OutputState* states, Output start = OUTPUT_0, Output end = OUTPUT_15);
neilt6 12:2b8adb10c605 493
neilt6 1:016f916c5579 494 /** Set all of the output states to the same state
neilt6 0:7b3cbb5a53b8 495 *
neilt6 0:7b3cbb5a53b8 496 * @param state The new output state for all outputs.
neilt6 7:7dd3cc73e873 497 * @param altAddr An optional, alternate address such as a subaddress or LED All Call address (defaults to NULL).
neilt6 0:7b3cbb5a53b8 498 */
neilt6 7:7dd3cc73e873 499 void allOutputStates(OutputState state, int altAddr = NULL);
neilt6 0:7b3cbb5a53b8 500
neilt6 12:2b8adb10c605 501 /** Read a range of output duty cycles into an array as percents
neilt6 1:016f916c5579 502 *
neilt6 12:2b8adb10c605 503 * @param duties Pointer to an array for up to 16 duty cycles as floats (0.0 to 1.0).
neilt6 12:2b8adb10c605 504 * @param start The first output to read (defaults to OUTPUT_0).
neilt6 12:2b8adb10c605 505 * @param end The last output to read (defaults to OUTPUT_15).
neilt6 1:016f916c5579 506 */
neilt6 12:2b8adb10c605 507 void getOutputDuties(float* duties, Output start = OUTPUT_0, Output end = OUTPUT_15);
neilt6 1:016f916c5579 508
neilt6 12:2b8adb10c605 509 /** Set a range of output duty cycles from an array of percents
neilt6 8:12a800c51b35 510 *
neilt6 12:2b8adb10c605 511 * @param duties Pointer to an array of up to 16 duty cycles as floats (0.0 to 1.0).
neilt6 12:2b8adb10c605 512 * @param start The first output to set (defaults to OUTPUT_0).
neilt6 12:2b8adb10c605 513 * @param end The last output to set (defaults to OUTPUT_15).
neilt6 8:12a800c51b35 514 * @param altAddr An optional, alternate address such as a subaddress or LED All Call address (defaults to NULL).
neilt6 8:12a800c51b35 515 */
neilt6 12:2b8adb10c605 516 void setOutputDuties(float* duties, Output start = OUTPUT_0, Output end = OUTPUT_15, int altAddr = NULL);
neilt6 8:12a800c51b35 517
neilt6 1:016f916c5579 518 /** Set all of the output duty cycles to the same value in percent
neilt6 0:7b3cbb5a53b8 519 *
neilt6 0:7b3cbb5a53b8 520 * @param duty The new duty cycle for all outputs as a float (0.0 to 1.0).
neilt6 7:7dd3cc73e873 521 * @param altAddr An optional, alternate address such as a subaddress or LED All Call address (defaults to NULL).
neilt6 0:7b3cbb5a53b8 522 */
neilt6 7:7dd3cc73e873 523 void allOutputDuties(float duty, int altAddr = NULL);
neilt6 0:7b3cbb5a53b8 524
neilt6 12:2b8adb10c605 525 /** Read a range of output duty cycles into an array
neilt6 1:016f916c5579 526 *
neilt6 12:2b8adb10c605 527 * @param duties Pointer to an array for up to 16 duty cycles as unsigned chars (0 to 255).
neilt6 12:2b8adb10c605 528 * @param start The first output to read (defaults to OUTPUT_0).
neilt6 12:2b8adb10c605 529 * @param end The last output to read (defaults to OUTPUT_15).
neilt6 1:016f916c5579 530 */
neilt6 12:2b8adb10c605 531 void getOutputDuties_u8(char* duties, Output start = OUTPUT_0, Output end = OUTPUT_15);
neilt6 1:016f916c5579 532
neilt6 12:2b8adb10c605 533 /** Set a range of output duty cycles from an array
neilt6 8:12a800c51b35 534 *
neilt6 12:2b8adb10c605 535 * @param duties Pointer to any array of up to 16 duty cycles as unsigned chars (0 to 255).
neilt6 12:2b8adb10c605 536 * @param start The first output to set (defaults to OUTPUT_0).
neilt6 12:2b8adb10c605 537 * @param end The last output to set (defaults to OUTPUT_15).
neilt6 8:12a800c51b35 538 * @param altAddr An optional, alternate address such as a subaddress or LED All Call address (defaults to NULL).
neilt6 8:12a800c51b35 539 */
neilt6 12:2b8adb10c605 540 void setOutputDuties_u8(char* duties, Output start = OUTPUT_0, Output end = OUTPUT_15, int altAddr = NULL);
neilt6 8:12a800c51b35 541
neilt6 1:016f916c5579 542 /** Set all of the output duty cycles to the same value
neilt6 0:7b3cbb5a53b8 543 *
neilt6 0:7b3cbb5a53b8 544 * @param duty The new duty cycle for all outputs as an unsigned char (0 to 255).
neilt6 7:7dd3cc73e873 545 * @param altAddr An optional, alternate address such as a subaddress or LED All Call address (defaults to NULL).
neilt6 0:7b3cbb5a53b8 546 */
neilt6 12:2b8adb10c605 547 void allOutputDuties_u8(char duty, int altAddr = NULL);
neilt6 0:7b3cbb5a53b8 548
neilt6 12:2b8adb10c605 549 /** Read a range of output current references into an array as percents
neilt6 1:016f916c5579 550 *
neilt6 12:2b8adb10c605 551 * @param irefs Pointer to an array for up to 16 current references as floats (0.0 to 1.0).
neilt6 12:2b8adb10c605 552 * @param start The first output to read (defaults to OUTPUT_0).
neilt6 12:2b8adb10c605 553 * @param end The last output to read (defaults to OUTPUT_15).
neilt6 1:016f916c5579 554 */
neilt6 12:2b8adb10c605 555 void getOutputCurrents(float* irefs, Output start = OUTPUT_0, Output end = OUTPUT_15);
neilt6 1:016f916c5579 556
neilt6 12:2b8adb10c605 557 /** Set a range of output current references from an array of percents
neilt6 8:12a800c51b35 558 *
neilt6 12:2b8adb10c605 559 * @param irefs Pointer to an array of up to 16 current references as floats (0.0 to 1.0).
neilt6 12:2b8adb10c605 560 * @param start The first output to set (defaults to OUTPUT_0).
neilt6 12:2b8adb10c605 561 * @param end The last output to set (defaults to OUTPUT_15).
neilt6 8:12a800c51b35 562 * @param altAddr An optional, alternate address such as a subaddress or LED All Call address (defaults to NULL).
neilt6 8:12a800c51b35 563 */
neilt6 12:2b8adb10c605 564 void setOutputCurrents(float* irefs, Output start = OUTPUT_0, Output end = OUTPUT_15, int altAddr = NULL);
neilt6 8:12a800c51b35 565
neilt6 1:016f916c5579 566 /** Set all of the output current references to the same value in percent
neilt6 0:7b3cbb5a53b8 567 *
neilt6 0:7b3cbb5a53b8 568 * @param iref The new current reference for all outputs as a float (0.0 to 1.0).
neilt6 7:7dd3cc73e873 569 * @param altAddr An optional, alternate address such as a subaddress or LED All Call address (defaults to NULL).
neilt6 0:7b3cbb5a53b8 570 */
neilt6 7:7dd3cc73e873 571 void allOutputCurrents(float iref, int altAddr = NULL);
neilt6 0:7b3cbb5a53b8 572
neilt6 12:2b8adb10c605 573 /** Read a range of output current references into an array
neilt6 1:016f916c5579 574 *
neilt6 12:2b8adb10c605 575 * @param irefs Pointer to an array for up to 16 current references as unsigned chars (0 to 255).
neilt6 12:2b8adb10c605 576 * @param start The first output to read (defaults to OUTPUT_0).
neilt6 12:2b8adb10c605 577 * @param end The last output to read (defaults to OUTPUT_15).
neilt6 1:016f916c5579 578 */
neilt6 12:2b8adb10c605 579 void getOutputCurrents_u8(char* irefs, Output start = OUTPUT_0, Output end = OUTPUT_15);
neilt6 1:016f916c5579 580
neilt6 12:2b8adb10c605 581 /** Set a range of output current references from an array
neilt6 8:12a800c51b35 582 *
neilt6 12:2b8adb10c605 583 * @param irefs Pointer to an array of up to 16 current references as unsigned chars (0 to 255).
neilt6 12:2b8adb10c605 584 * @param start The first output to set (defaults to OUTPUT_0).
neilt6 12:2b8adb10c605 585 * @param end The last output to set (defaults to OUTPUT_15).
neilt6 8:12a800c51b35 586 * @param altAddr An optional, alternate address such as a subaddress or LED All Call address (defaults to NULL).
neilt6 8:12a800c51b35 587 */
neilt6 12:2b8adb10c605 588 void setOutputCurrents_u8(char* irefs, Output start = OUTPUT_0, Output end = OUTPUT_15, int altAddr = NULL);
neilt6 8:12a800c51b35 589
neilt6 1:016f916c5579 590 /** Set all of the output current references to the same value
neilt6 0:7b3cbb5a53b8 591 *
neilt6 0:7b3cbb5a53b8 592 * @param iref The new current reference for all outputs as an unsigned char (0 to 255).
neilt6 7:7dd3cc73e873 593 * @param altAddr An optional, alternate address such as a subaddress or LED All Call address (defaults to NULL).
neilt6 0:7b3cbb5a53b8 594 */
neilt6 12:2b8adb10c605 595 void allOutputCurrents_u8(char iref, int altAddr = NULL);
neilt6 0:7b3cbb5a53b8 596
neilt6 0:7b3cbb5a53b8 597 /** Perform a fault test on all enabled outputs
neilt6 0:7b3cbb5a53b8 598 *
neilt6 0:7b3cbb5a53b8 599 * @returns The fault test flags as FaultFlags enum values OR'd together.
neilt6 0:7b3cbb5a53b8 600 */
neilt6 1:016f916c5579 601 unsigned short faultTest();
neilt6 1:016f916c5579 602
neilt6 1:016f916c5579 603 #ifdef MBED_OPERATORS
neilt6 1:016f916c5579 604 /** A shorthand for allOutputDuties()
neilt6 1:016f916c5579 605 *
neilt6 1:016f916c5579 606 * @param value The new duty cycle for all outputs as a float (0.0 to 1.0).
neilt6 1:016f916c5579 607 */
neilt6 1:016f916c5579 608 PCA9955& operator=(float value);
neilt6 1:016f916c5579 609 #endif
neilt6 0:7b3cbb5a53b8 610
neilt6 0:7b3cbb5a53b8 611 private:
neilt6 0:7b3cbb5a53b8 612 //I2C register addresses
neilt6 0:7b3cbb5a53b8 613 enum Register {
neilt6 0:7b3cbb5a53b8 614 REG_MODE1 = 0x00,
neilt6 0:7b3cbb5a53b8 615 REG_MODE2 = 0x01,
neilt6 0:7b3cbb5a53b8 616 REG_LEDOUT0 = 0x02,
neilt6 0:7b3cbb5a53b8 617 REG_LEDOUT1 = 0x03,
neilt6 0:7b3cbb5a53b8 618 REG_LEDOUT2 = 0x04,
neilt6 0:7b3cbb5a53b8 619 REG_LEDOUT3 = 0x05,
neilt6 0:7b3cbb5a53b8 620 REG_GRPPWM = 0x08,
neilt6 0:7b3cbb5a53b8 621 REG_GRPFREQ = 0x09,
neilt6 0:7b3cbb5a53b8 622 REG_PWM0 = 0x0A,
neilt6 0:7b3cbb5a53b8 623 REG_PWM1 = 0x0B,
neilt6 0:7b3cbb5a53b8 624 REG_PWM2 = 0x0C,
neilt6 0:7b3cbb5a53b8 625 REG_PWM3 = 0x0D,
neilt6 0:7b3cbb5a53b8 626 REG_PWM4 = 0x0E,
neilt6 0:7b3cbb5a53b8 627 REG_PWM5 = 0x0F,
neilt6 0:7b3cbb5a53b8 628 REG_PWM6 = 0x10,
neilt6 0:7b3cbb5a53b8 629 REG_PWM7 = 0x11,
neilt6 0:7b3cbb5a53b8 630 REG_PWM8 = 0x12,
neilt6 0:7b3cbb5a53b8 631 REG_PWM9 = 0x13,
neilt6 0:7b3cbb5a53b8 632 REG_PWM10 = 0x14,
neilt6 0:7b3cbb5a53b8 633 REG_PWM11 = 0x15,
neilt6 0:7b3cbb5a53b8 634 REG_PWM12 = 0x16,
neilt6 0:7b3cbb5a53b8 635 REG_PWM13 = 0x17,
neilt6 0:7b3cbb5a53b8 636 REG_PWM14 = 0x18,
neilt6 0:7b3cbb5a53b8 637 REG_PWM15 = 0x19,
neilt6 0:7b3cbb5a53b8 638 REG_IREF0 = 0x22,
neilt6 0:7b3cbb5a53b8 639 REG_IREF1 = 0x23,
neilt6 0:7b3cbb5a53b8 640 REG_IREF2 = 0x24,
neilt6 0:7b3cbb5a53b8 641 REG_IREF3 = 0x25,
neilt6 0:7b3cbb5a53b8 642 REG_IREF4 = 0x26,
neilt6 0:7b3cbb5a53b8 643 REG_IREF5 = 0x27,
neilt6 0:7b3cbb5a53b8 644 REG_IREF6 = 0x28,
neilt6 0:7b3cbb5a53b8 645 REG_IREF7 = 0x29,
neilt6 0:7b3cbb5a53b8 646 REG_IREF8 = 0x2A,
neilt6 0:7b3cbb5a53b8 647 REG_IREF9 = 0x2B,
neilt6 0:7b3cbb5a53b8 648 REG_IREF10 = 0x2C,
neilt6 0:7b3cbb5a53b8 649 REG_IREF11 = 0x2D,
neilt6 0:7b3cbb5a53b8 650 REG_IREF12 = 0x2E,
neilt6 0:7b3cbb5a53b8 651 REG_IREF13 = 0x2F,
neilt6 0:7b3cbb5a53b8 652 REG_IREF14 = 0x30,
neilt6 0:7b3cbb5a53b8 653 REG_IREF15 = 0x31,
neilt6 0:7b3cbb5a53b8 654 REG_OFFSET = 0x3A,
neilt6 0:7b3cbb5a53b8 655 REG_SUBADR1 = 0x3B,
neilt6 0:7b3cbb5a53b8 656 REG_SUBADR2 = 0x3C,
neilt6 0:7b3cbb5a53b8 657 REG_SUBADR3 = 0x3D,
neilt6 0:7b3cbb5a53b8 658 REG_ALLCALLADR = 0x3E,
neilt6 0:7b3cbb5a53b8 659 REG_RESERVED1 = 0x3F,
neilt6 0:7b3cbb5a53b8 660 REG_RESERVED2 = 0x40,
neilt6 0:7b3cbb5a53b8 661 REG_RESERVED3 = 0x41,
neilt6 0:7b3cbb5a53b8 662 REG_PWMALL = 0x42,
neilt6 0:7b3cbb5a53b8 663 REG_IREFALL = 0x43,
neilt6 0:7b3cbb5a53b8 664 REG_EFLAG0 = 0x44,
neilt6 0:7b3cbb5a53b8 665 REG_EFLAG1 = 0x45,
neilt6 0:7b3cbb5a53b8 666 REG_AUTO_INC = 0x80
neilt6 0:7b3cbb5a53b8 667 };
neilt6 0:7b3cbb5a53b8 668
neilt6 0:7b3cbb5a53b8 669 //Member variables
neilt6 0:7b3cbb5a53b8 670 I2C m_I2C;
neilt6 1:016f916c5579 671 const int m_ADDR;
neilt6 0:7b3cbb5a53b8 672
neilt6 0:7b3cbb5a53b8 673 //Internal functions
neilt6 0:7b3cbb5a53b8 674 char read(char reg);
neilt6 7:7dd3cc73e873 675 void write(int addr, char reg, char data);
neilt6 0:7b3cbb5a53b8 676 void readMulti(char startReg, char* data, int length);
neilt6 7:7dd3cc73e873 677 void writeMulti(int addr, char* data, int length);
neilt6 0:7b3cbb5a53b8 678 };
neilt6 0:7b3cbb5a53b8 679
neilt6 0:7b3cbb5a53b8 680 #endif