#include "stdafx.h"
#include "videocap.h"


void defaultCamState(CamState *state){
 
  state->frame_rate = FRAMERATE_15;
  state->auto_exposure = 128;
  state->brightness = 128;
  state->gain = 12;
  state->gamma = 128;
  state->hue = 128;
  state->saturation = 128;
  state->sharpness = 32;
  state->shutter = 2542; // equals 1/500 second;
  state->white_balance = 524416;
  state->white_balance_auto = false;
  state->shutter_auto = false; 
  state->gain_auto = false;
  state->trigger_mode_on = true;			
}

int mygetline(FILE *fp, char *line) {
	// return next line skipping #comment and blank lines
	// NULL return indicates EOF

	while (1) {	

		if( fgets( line, 128, fp ) == NULL) {
			// error or EOF
			// printf( "mygetLine: error reading file %s\n", filename);
			return (0);
		}

		// skip #comment lines and blank lines
		char * cp;
		cp = strchr(line, '#');
		int len = strlen(line);	//blank line?
		if ((cp == 0) && (len > 1)) return (1);
	}
}



int readCameraConfigFile(char *filename, CamState * state) {

	FILE * fp = fopen(filename, "r");
	if (fp == 0) {
		fprintf(stderr, "Can't open camera configuration file: %s\n", filename);
		exit(1);
	}
	defaultCamState(state);
	// initialize state with resonable defaults 

	// TODO:
	// * Frame Rate;
	// * turn on or off of auto_exp.
	// * 
	char line[128];
	while (mygetline(fp, line)) {

		// check for supported keyword match
		char parameter[64];
		int value;
		sscanf(line, "%s %d", parameter, &value);

		if (!strcmp(parameter,"white_balance")) {
			// read two value arguments U,V
			int u, v;
			sscanf(line, "%s %d %d", parameter, &u, &v);	
			printf("CAMERA FILE: %s %d %d (0x%x)\n",parameter, u, v, (u<<12) + v);
			state->white_balance = (u<< 12) + v;
		} else printf("CAMERA FILE: %s %d\n",parameter, value);

		if (!strcmp(parameter, "frame_rate")) {
		  if (value >=30) 
		    state->frame_rate = FRAMERATE_30;
		  else if (value >=15)
		    state->frame_rate = FRAMERATE_15;
		  else if (value >=7)
		    state->frame_rate = FRAMERATE_7;
		  else state->frame_rate = FRAMERATE_3;
		} else if (!strcmp(parameter,"auto_exposure")) {
			state->auto_exposure = value;

		} else if (!strcmp(parameter,"brightness")) {
			state->brightness = value;

		} else if (!strcmp(parameter,"gain")) {
			state->gain = value;
			
		} else if (!strcmp(parameter,"gamma")) {
			state->gamma = value;

		} else if (!strcmp(parameter,"hue")) {
			state->hue = value;

		} else if (!strcmp(parameter,"saturation")) {
			state->saturation = value;

		} else if (!strcmp(parameter,"sharpness")) {
			state->sharpness = value;

		} else if (!strcmp(parameter,"shutter")) {
			state->shutter = value;

		} else  if (!strcmp(parameter,"white_balance_auto")) {
			if (value) state->white_balance_auto = true;
			else state->white_balance_auto = false;

		} else if (!strcmp(parameter,"shutter_auto")) {
			if (value) state->shutter_auto = true;
			else state->shutter_auto = false; 

		} else if (!strcmp(parameter,"gain_auto")) {
			if (value) state->gain_auto = true;
			else state->gain_auto = false;

		} else if (!strcmp(parameter,"trigger_mode_on")) {
			if (value) state->trigger_mode_on = true;
			else state->trigger_mode_on = false;
		}
	}	//end of while

	fclose(fp);
	return 0;
}
