Unverified Commit 7f1f4aee authored by Birte Kristina Friesel's avatar Birte Kristina Friesel
Browse files

MAX444006: Implement setAmbientConfig

parent 480c55a5
Loading
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -69,10 +69,11 @@ class MAX44006 {

		MAX44006(unsigned char const addr = 0x45) : address(addr), ambientConfig(TEMPEN) {}

		uint8_t init();
		bool init();

		uint16_t getTemperature();
		bool getLight(float *red, float *green, float *blue, float *clear, float *ir);
		bool setAmbientConfig(AmbientConfig config);
};

extern MAX44006 max44006;
+5 −3
Original line number Diff line number Diff line
@@ -365,9 +365,11 @@ int main(void)
#endif

#ifdef CONFIG_driver_max44006
	unsigned char ret;
	if ((ret = max44006.init()) != 0) {
		kout << "MAX44006 Initialization failed: " << ret << endl;
	if (!max44006.init()) {
		kout << "MAX44006 Initialization failed" << endl;
	}
	if (!max44006.setAmbientConfig(max44006.AMBPGA_11)) {
		kout << "MAX44006 setAmbientConfig failed" << endl;
	}
#endif

+20 −8
Original line number Diff line number Diff line
@@ -15,41 +15,53 @@

#include "arch.h"

uint8_t MAX44006::init()
bool MAX44006::init()
{
	txbuf[0] = interruptStatusReg;
	if (i2c.xmit(address, 1, txbuf, 1, rxbuf) != 0) {
		return 1;
		return false;
	}

	if (rxbuf[0] & ~PWRON) {
		// reset sensor
		txbuf[1] = 0x10;
		if (i2c.xmit(address, 2, txbuf, 0, rxbuf) != 0) {
			return 1;
			return false;
		}
		arch.delay_ms(200);
		if (i2c.xmit(address, 1, txbuf, 1, rxbuf) != 0) {
			return 1;
			return false;
		}
		if (rxbuf[0] & ~PWRON) {
			return 2;
			return false;
		}
	}

	txbuf[0] = ambientConfigReg;
	txbuf[1] = ambientConfig;
	if (i2c.xmit(address, 2, txbuf, 0, rxbuf) != 0) {
		return 1;
		return false;
	}

	txbuf[0] = mainConfigReg;
	txbuf[1] = MODE_10; // MODE = 10 -> Clear + RGB + IR measurement
	if (i2c.xmit(address, 2, txbuf, 0, rxbuf) != 0) {
		return 1;
		return false;
	}

	return 0;
	return true;
}

bool MAX44006::setAmbientConfig(AmbientConfig config)
{

	txbuf[0] = ambientConfigReg;
	txbuf[1] = config;
	if (i2c.xmit(address, 2, txbuf, 0, rxbuf) != 0) {
		return false;
	}
	ambientConfig = config;
	return true;
}

uint16_t MAX44006::getTemperature()