Rohm / RegisterWriter

Dependents:   kionix-kx123-hello rohm-bh1790glc-hello simple-sensor-client rohm-SensorShield-example

Fork of rohm-sensor-hal by Rohm

Revision:
12:bc2446aabbfe
Parent:
11:272713c9e118
Child:
13:3d4508874121
--- a/source/RegisterWriter.cpp	Mon Oct 03 13:47:05 2016 +0000
+++ b/source/RegisterWriter.cpp	Thu Oct 06 10:33:05 2016 +0000
@@ -67,34 +67,52 @@
     return( received_bytes );
 }
 
-void RegisterWriter::write_register(uint8_t sad, uint8_t reg, uint8_t* data, uint8_t data_len) {
-    i2c_bus.write( (int)((sad << 1) | I2C_WRITE ), (char*)&reg, (int)1, true);
-    i2c_bus.write( (int)((sad << 1) | I2C_WRITE ), (char*)data, (int)data_len, false);
+uint8_t RegisterWriter::hs_read_register(uint8_t sad, uint8_t reg, uint8_t* buf, uint8_t buf_len) {
+    set_hs_mode_for_one_command();
+    //Next read command as usual, but in highspeed
+    return read_fifo_register(sad, reg, buf, buf_len);
 }
 
-void RegisterWriter::write_register(uint8_t sad, uint8_t reg, uint8_t data) {
+bool RegisterWriter::write_register(uint8_t sad, uint8_t reg, uint8_t* data, uint8_t data_len) {
+    bool error;
+    error = i2c_bus.write( (int)((sad << 1) | I2C_WRITE ), (char*)&reg, (int)1, true);
+    error = error || i2c_bus.write( (int)((sad << 1) | I2C_WRITE ), (char*)data, (int)data_len, false);
+    return error;
+}
+
+bool RegisterWriter::write_register(uint8_t sad, uint8_t reg, uint8_t data) {
     char data_to_send[2];
+    bool error;
 
     data_to_send[0] = reg;
     data_to_send[1] = data;
-    i2c_bus.write( (int)((sad << 1) | I2C_WRITE ), &data_to_send[0], 2);
+    error = i2c_bus.write( (int)((sad << 1) | I2C_WRITE ), &data_to_send[0], 2);
+
+    return error;
 }
 
 bool RegisterWriter::change_bits(uint8_t sad, uint8_t reg, uint8_t mask, uint8_t bits){
     uint8_t value, read_bytes;
+    bool error;
     read_bytes = read_register(sad, reg, &value, 1);
     if( read_bytes != 0 ){
         value = value & ~mask;
         value = value | (bits & mask);
-        write_register(sad, reg, value);
-        return true;
+        return write_register(sad, reg, value);
         }
     else{
         //DEBUG_printf("Read before change_bits() failed.");
-        return false;
+        return true;
         }
 }
 
+void RegisterWriter::set_hs_mode_for_one_command(){
+    #define MCODE (1<<3)
+    char temp;
+    //Fullspeed mode -> highspeed mode for one command.
+    i2c_bus.write( (int)(MCODE), (char*)&temp, (int)0, true ); //Trick to write just mcode+make nack.
+    }
+
 
 #endif