A feature complete driver for the MAX9723 headphone amplifier from Maxim.

Dependents:   MAX9723_HelloWorld

Revision:
0:99db25d6f38d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MAX9723.h	Fri May 30 19:46:37 2014 +0000
@@ -0,0 +1,156 @@
+/* MAX9723 Driver Library
+ * Copyright (c) 2014 Neil Thiessen
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MAX9723_H
+#define MAX9723_H
+
+#include "mbed.h"
+
+/** MAX9723 class.
+ *  Used for controlling a MAX9723 headphone amplifier connected via I2C (TODO: Redo Example!).
+ *
+ * Example:
+ * @code
+ * #include "mbed.h"
+ * #include "MAX9723.h"
+ *
+ * //Create a MAX9723 object at the default address (ADDRESS_0)
+ * MAX9723 amp(p28, p27);
+ *
+ * int main()
+ * {
+ *     //Try to open the MAX9723
+ *     if (amp.open()) {
+ *         printf("Device detected!\n");
+ *
+ *         //Configure the MAX9723 for no BassMax, and low gain
+ *         amp.enabled(true);
+ *         amp.bassMax(false);
+ *         amp.maxGain(false);
+ *
+ *         //Set the volume for 50%
+ *         amp = 0.50;
+ *     } else {
+ *         error("Device not detected!\n");
+ *     }
+ * }
+ * @endcode
+ */
+class MAX9723
+{
+public:
+    /** Represents the different I2C address possibilities for the MAX9723
+     */
+    enum Address {
+        ADDRESS_0 = (0x4C << 1),    /**< MAX9723A or MAX9723C */
+        ADDRESS_1 = (0x4D << 1)     /**< MAX9723B or MAX9723D */
+    };
+
+    /** Create an MAX9723 object connected to the specified I2C pins with the specified I2C slave address
+     *
+     * @param sda The I2C data pin.
+     * @param scl The I2C clock pin.
+     * @param addr The I2C slave address (defaults to ADDRESS_0).
+     * @param hz The I2C bus frequency (defaults to 400kHz).
+     */
+    MAX9723(PinName sda, PinName scl, Address addr = ADDRESS_0, int hz = 400000);
+
+    /** Probe for the MAX9723 and set it to default values if present
+     *
+     * @returns
+     *   'true' if the device exists on the bus,
+     *   'false' if the device doesn't exist on the bus.
+     */
+    bool open();
+
+    /** Determine whether or not the MAX9723 is enabled
+     *
+     * @returns
+     *   'true' if the MAX9723 is enabled,
+     *   'false' if the MAX9723 is shutdown.
+     */
+    bool enabled();
+
+    /** Set whether or not the MAX9723 is enabled
+     *
+     * @param enabled Whether or not the MAX9723 is enabled.
+     */
+    void enabled(bool enabled);
+
+    /** Determine whether or not BassMax is enabled on the MAX9723
+     *
+     * @returns
+     *   'true' if BassMax is enabled,
+     *   'false' if BassMax is disabled.
+     */
+    bool bassMax();
+
+    /** Enable or disable BassMax on the MAX9723
+     *
+     * @param enabled Whether or not BassMax is enabled.
+     */
+    void bassMax(bool enabled);
+
+    /** Determine whether or not the MAX9723 gain is set to maximum
+     *
+     * @returns
+     *   'true' if the gain is set to 0dB on MAX9723A and MAX9723B, or +6dB on MAX9723C and MAX9723D,
+     *   'false' if the gain is set to -5dB on MAX9723A and MAX9723B, or +1dB on MAX9723C and MAX9723D.
+     */
+    bool maxGain();
+
+    /** Set whether or not the MAX9723 gain is set to maximum
+     *
+     * @param max Whether or not the gain is set to maximum.
+     */
+    void maxGain(bool max);
+
+    /** Get the current volume of the MAX9723 as a percentage
+     *
+     * @returns The current volume as a percentage (0.0 to 1.0).
+     */
+    float volume();
+
+    /** Set the volume of the MAX9723 from a percentage
+     *
+     * @param volume The new volume as a percentage (0.0 to 1.0).
+     */
+    void volume(float volume);
+
+#ifdef MBED_OPERATORS
+    /** A shorthand for volume()
+     *
+     * @returns The current volume as a percentage (0.0 to 1.0).
+     */
+    operator float();
+
+    /** A shorthand for volume()
+     *
+     * @param value The new volume as a percentage (0.0 to 1.0).
+     */
+    MAX9723& operator=(float value);
+#endif
+
+private:
+    //I2C member variables
+    I2C m_I2C;
+    const int m_ADDR;
+
+    //Amplifier settings member variables
+    char m_AmpValue;
+};
+
+#endif