/* gcc -o gain_lut gain_lut.c -lm
 *
 * for ov9782, get gain lut
 * */

#include <stdio.h>
#include <math.h>
#include <string.h>

typedef struct {
    unsigned int gain_upper;
    unsigned int gain_lower;
} IntGainValue;


double calculate_gain(int index) {
    return round(pow(2, index / 32.0) * 1000) / 1000;
}

int main() {

        IntGainValue gain_value = {0};

        for(int index = 0; index < 256; index ++) {
                double gain = calculate_gain(index);

		gain = (int)(gain * 16.0);

		gain_value.gain_upper = (int)((int)gain >> 8) & 0x1F;
		gain_value.gain_lower = (int)((int)gain) & 0x00FF;

		//[246, 206.143] [0x0712]
              //  printf("[%d, %.3lf, %.3lf] [0x%02x%02x]\n",
		//	index,gain,  gain / 16, gain_value.gain_upper, gain_value.gain_lower);
                printf("0x%02x%02x,\n",
                             gain_value.gain_upper, gain_value.gain_lower);
        }

        return 0;
}

