/**
 * attiny.h: interface to attiny88's RGBLED eyes prototypes
 * 2014 true
**/

#ifndef __DEVICE_ATTINY_H
#define __DEVICE_ATTINY_H



/* interface */
#define ATTINY_I2C_DEV 				I2C1
#define ATTINY_I2C_ADDR 			0x73

// write register commands, last 4 bits = data, >1 packet
#define ATTINY_CMD_EXT_CMD 			0x10 		// pkt = ext command (bit[7:4] must NOT == 0)
#define ATTINY_CMD_LED_LEVEL 		0x20 		// cmd[3:0] = led, pkt = level (0-250)
#define ATTINY_CMD_TEMP_CAL 		0x30 		// pkt = current temperature
#define ATTINY_CMD_EEPROM_READ		0x40 		// pkt = address, read 1 byte after this command
#define ATTINY_CMD_EEPROM_WRITE 	0x50 		// pkt[0] = address, pkt[1] = data

// write register commands, last 4 bits = data, immediate processing 1 packet
#define ATTINY_CMD_READ_TEMP 		0x80 		// read 1 byte after this command
#define ATTINY_CMD_READ_LIGHT 		0x90 		// cmd[3:0] = led (from 0-3), read 1 byte after this command
#define ATTINY_CMD_SLEEP 			0xF0 		// no data

// write register commands, extended
#define ATTINY_CMD_LIGHTSENSOR_SENS 0x1019 		// 2 bytes data - led, new sensitivity value

// leds
#define LED_EYES_LEFT 				0
#define LED_EYES_RIGHT 				1

// programs
#define LED_EYES_MODE_OFF 			0
#define LED_EYES_MODE_PROGRAM 		2

#define LED_EYES_PROG_COUNT 		5
#define LED_EYES_PTRN_COUNT 		0


/* prototypes */
void led_eyes_tx();
void led_eyes_set_level(uint8_t idx, uint8_t level);

void led_eyes_mode_update();
void led_eyes_set_mode(uint8_t mode); 	// used for disabling
void led_eyes_set_program(uint8_t program_idx, uint8_t init,
		uint16_t wait, uint16_t level, uint32_t offset, uint32_t settings);

uint8_t attiny_read_temp();
uint8_t attiny_read_light_level(uint8_t led_idx);

void attiny_write_light_sensitivity(uint8_t led, uint8_t sensitivity);

void attiny_sleep();



#endif /* __DEVICE_ATTINY_H */
