namespace upm {
+/**
+ * @brief C++ API for Jhd1313m1 i2c controller for HD44780 based displays with
+ * an RGB backlight such as the Grove RGB i2c LCD display
+ *
+ * The Jhd1313m1 has two i2c addreses, one belongs to a controller very similar
+ * to the upm::Lcm1602 LCD driver which controls the HD44780 based display and the
+ * other controls solely the backlight. This module was tested with the Seed
+ * [Grove LCD RGB Backlight v2.0 display]
+ * (http://www.seeedstudio.com/depot/Grove-LCD-RGB-Backlight-p-1643.html?cPath=34_36)
+ *
+ * @snippet rgb-lcd.cxx Interesting
+ * @image html grovergblcd.jpeg
+ */
class Jhd1313m1 : public I2CLcd {
public:
- Jhd1313m1 (int bus, int lcdAddress, int rgbAddress);
- ~Jhd1313m1 ();
- mraa_result_t write (std::string msg);
- mraa_result_t setCursor (int row, int column);
- mraa_result_t clear ();
- mraa_result_t home ();
+ /**
+ * Jhd1313m1 constructor
+ *
+ * @param bus i2c bus to use
+ * @param address the slave address the lcd is registered on
+ * @param address the slave address the rgb backlight is on
+ */
+ Jhd1313m1(int bus, int lcdAddress, int rgbAddress);
+ /**
+ * Jhd1313m1 destructor
+ */
+ ~Jhd1313m1();
+ /**
+ * Make the LCD scroll text
+ *
+ * @param direction, true is typical scrolling to the right
+ * @return Result of operation
+ */
+ mraa_result_t scroll (bool direction);
+ /**
+ * Set the color of the backlight
+ *
+ * @param r 0-255 value for red
+ * @param g 0-255 value for green
+ * @param b 0-255 value for blue
+ * @return Result of operation
+ */
+ mraa_result_t setColor(uint8_t r, uint8_t g, uint8_t b);
+ /**
+ * Write a string to LCD
+ *
+ * @param msg The std::string to write to display, note only ascii
+ * chars are supported
+ * @return Result of operation
+ */
+ mraa_result_t write(std::string msg);
+ /**
+ * Set cursor to a coordinate
+ *
+ * @param row The row to set cursor to
+ * @param column The column to set cursor to
+ * @return Result of operation
+ */
+ mraa_result_t setCursor(int row, int column);
+ /**
+ * Clear display from characters
+ *
+ * @return Result of operatio
+ */
+ mraa_result_t clear();
+ /**
+ * Return to coordinate 0,0
+ *
+ * @return Result of operation
+ */
+ mraa_result_t home();
private:
int m_rgb_address;