// RGBPWM rgb2pwm( RGB rgbVals, RGBPWM pwmVals );
// function to determine on/off states of R/G/B lights using 
// pulse width modulation. rgbVals are each checked against the
// counter to determine whether the corresponding pwmVals are 
// turned on. On each call the counter is incremented and if 
// counterMax is reached the counter is reset to 0. 
//
// uses structures:
// typedef struct {
// 	unsigned char r = 0;
// 	unsigned char g = 0;
// 	unsigned char b = 0;
// } RGB;
//
// typedef struct {
//	unsigned char rOn;
//	unsigned char gOn;
//	unsigned char bOn;
//	unsigned char counter;
//	unsigned char counterMAX;
// } RGBPWM;
//
// written by Sean Montgomery 2008/09

// #include "hue2rgb.h"
#include "rgb2pwm.h"

RGBPWM rgb2pwm( RGB rgbVals, RGBPWM pwmVals ) {
	pwmVals.rOn = 0;
	pwmVals.gOn = 0;
	pwmVals.bOn = 0;
	pwmVals.counter++;
	
	if (pwmVals.counter == pwmVals.counterMAX) {pwmVals.counter=0;}

	if (rgbVals.r>pwmVals.counter){
		pwmVals.rOn = 1;
	} else {
		if (rgbVals.r + rgbVals.g>pwmVals.counter){
			pwmVals.gOn = 1;
		} else {
			if (rgbVals.r + rgbVals.g + rgbVals.b>pwmVals.counter){
				pwmVals.bOn = 1;			
			}
		}
	}
	return pwmVals;
}

RGBPWM initRGBPWM( RGBPWM pwmVals, unsigned char counterMax ) {
	pwmVals.rOn = 0;
	pwmVals.gOn = 0;
	pwmVals.bOn = 0;
	pwmVals.counter = 0;
	pwmVals.counterMAX = counterMax;
	return pwmVals;
}

