add configurable i2c pins and frequency for viki
authorJim Morris <morris@wolfman.com>
Mon, 1 Jul 2013 00:32:51 +0000 (17:32 -0700)
committerJim Morris <morris@wolfman.com>
Mon, 1 Jul 2013 18:34:17 +0000 (11:34 -0700)
src/modules/utils/panel/panels/VikiLCD.cpp
src/modules/utils/panel/panels/VikiLCD.h

index 9be590f..a2ea83c 100644 (file)
@@ -35,19 +35,28 @@ You should have received a copy of the GNU General Public License along with Smo
 #define M17_BIT_B0 0x0001
 
 VikiLCD::VikiLCD() {
-    // Default values
+    // I2C com
+    int i2c_pins = THEKERNEL->config->value(panel_checksum, i2c_pins_checksum)->by_default(3)->as_number();
+    if(i2c_pins == 0){
+        this->i2c = new mbed::I2C(P0_0, P0_1);
+    }else if(i2c_pins == 1){
+        this->i2c = new mbed::I2C(P0_10, P0_11);
+    }else if(i2c_pins == 2){
+        this->i2c = new mbed::I2C(P0_19, P0_20);
+    }else{ // 3, default
+        this->i2c = new mbed::I2C(P0_27, P0_28);
+    }
+
+    this->i2c_frequency = THEKERNEL->config->value(panel_checksum, i2c_frequency_checksum)->by_default(60000)->as_number();
+    i2c->frequency(this->i2c_frequency);
+
+   // Default values
     this->i2c_address      = MCP23017_ADDRESS;
     this->displaycontrol   = 0x00;
     this->displayfunction  = LCD_4BITMODE | LCD_2LINE | LCD_5x8DOTS; // in case they forget to call begin() at least we have somethin
     this->displaymode      = 0x00;
     this->_numlines        = 4;
     
-    // I2C com
-//  this->i2c = new mbed::I2C(P0_27, P0_28);
-    this->i2c = new mbed::I2C(p9, p10); // P0_0, P0_1
-
-    i2c->frequency(60000);
-    
     // configure the pins to use
     this->encoder_a_pin.from_string(THEKERNEL->config->value( panel_checksum, encoder_a_pin_checksum)->by_default("nc")->as_string())->as_input();
 
index 0c5a11f..17fa1a3 100644 (file)
@@ -63,6 +63,8 @@ using namespace std;
 #define encoder_a_pin_checksum     CHECKSUM("encoder_a_pin")
 #define encoder_b_pin_checksum     CHECKSUM("encoder_b_pin")
 #define button_pause_pin_checksum  CHECKSUM("button_pause_pin")
+#define i2c_pins_checksum          CHECKSUM("i2c_pins")
+#define i2c_frequency_checksum     CHECKSUM("i2c_frequency")
 
 class VikiLCD : public LcdBase {
     public:
@@ -110,7 +112,7 @@ class VikiLCD : public LcdBase {
         uint8_t _numlines,_currline;
         uint16_t _backlightBits; // only for MCP23017
         mbed::I2C* i2c;
-
+        int i2c_frequency;
         Pin encoder_a_pin;
         Pin encoder_b_pin;    
         Pin button_pause_pin;