Commit c1a41b3c authored by Daniel Friesel's avatar Daniel Friesel
Browse files

add ccs811, max44006, max44009 drivers. Not all are working.

parent 942d0d17
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
#ifndef CCS811_H
#define CCS811_H

class CCS811 {
	private:
		CCS811(const CCS811 &copy);
		unsigned char const address;
		unsigned char txbuf[3];
		unsigned char rxbuf[2];

	public:
		CCS811(unsigned char const addr) : address(addr) {}

		void init();
		short check();
};

extern CCS811 ccs811;

#endif
+21 −0
Original line number Diff line number Diff line
#ifndef LM75_H
#define LM75_H

class LM75 {
	private:
		LM75(const LM75 &copy);
		unsigned char const address;
		unsigned char txbuf[3];
		unsigned char rxbuf[2];

	public:
		LM75(unsigned char const addr) : address(addr) {}

		float getTemp();
		void setOS(unsigned char os);
		void setHyst(unsigned char hyst);
};

extern LM75 lm75;

#endif
+19 −0
Original line number Diff line number Diff line
#ifndef MAX44009_H
#define MAX44009_H

class MAX44009 {
	private:
		MAX44009(const MAX44009 &copy);
		unsigned char const address;
		unsigned char txbuf[2];
		unsigned char rxbuf[2];

	public:
		MAX44009(unsigned char const addr) : address(addr) {}

		float getLux();
};

extern MAX44009 max44009;

#endif

src/driver/ccs811.cc

0 → 100644
+29 −0
Original line number Diff line number Diff line
#include "driver/ccs811.h"
#include "driver/gpio.h"
#if defined(MULTIPASS_ARCH_HAS_I2C) && !defined(DRIVER_SOFTI2C)
#include "driver/i2c.h"
#else
#include "driver/soft_i2c.h"
#endif

#ifdef MULTIPASS_ARCH_esp8266
#define nWAKE GPIO::d5
#endif

void CCS811::init()
{
	gpio.output(nWAKE);
	gpio.write(nWAKE, 1);
}

short CCS811::check()
{
	gpio.write(nWAKE, 0);
	txbuf[0] = 0x20;
	rxbuf[0] = 0;
	i2c.xmit(address, 1, txbuf, 1, rxbuf);
	gpio.write(nWAKE, 1);
	return rxbuf[0];
}

CCS811 ccs811(0x5a);

src/driver/max44006.cc

0 → 100644
+71 −0
Original line number Diff line number Diff line
#include "driver/max44006.h"
#include "arch.h"
#if defined(MULTIPASS_ARCH_HAS_I2C) && !defined(DRIVER_SOFTI2C)
#include "driver/i2c.h"
#else
#include "driver/soft_i2c.h"
#endif

signed char MAX44006::setup()
{
	txbuf[0] = 0;
	txbuf[1] = 0;
	i2c.xmit(2, txbuf, 0, rxbuf);

	arch.delay_us(10);

	txbuf[0] = 0x01;
	txbuf[1] = 0x20;
	i2c.xmit(2, txbuf, 0, rxbuf);

	arch.delay_us(10);

	txbuf[0] = 0x02;
	txbuf[1] = 0x02;
	i2c.xmit(2, txbuf, 0, rxbuf);

	return 0;
}

void MAX44006::wakeup()
{
	txbuf[0] = 0;
	txbuf[1] = 0;
	i2c.xmit(2, txbuf, 0, rxbuf);
}

void MAX44006::sleep()
{
	txbuf[0] = 0x00;
	txbuf[1] = 0x08;

	i2c.xmit(2, txbuf, 0, rxbuf);
}

float LM75::getTemp()
{
	txbuf[0] = 0;
	rxbuf[0] = 0;
	rxbuf[1] = 0;
	i2c.xmit(address, 1, txbuf, 2, rxbuf);

	return rxbuf[0] + (rxbuf[1] / 256.0);
}

void LM75::setOS(unsigned char os)
{
	txbuf[0] = 0x03;
	txbuf[1] = os;
	txbuf[2] = 0;
	i2c.xmit(address, 3, txbuf, 0, rxbuf);
}

void LM75::setHyst(unsigned char hyst)
{
	txbuf[0] = 0x02;
	txbuf[1] = hyst;
	txbuf[2] = 0;
	i2c.xmit(address, 3, txbuf, 0, rxbuf);
}

MAX44006 max44006(0x45);
Loading