/* gcc -o gain_lut gain_lut.c -lm
 *
 * for imx219, get dgain lut
 * */

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

typedef struct {
    unsigned int dgain_upper;
    unsigned int dgain_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_value.dgain_upper = (int)gain;
		gain_value.dgain_lower = (int)ceil((gain - gain_value.dgain_upper) * 256);

         //       printf("[%d, %.3lf] [%d, %d]\n",
           //             index, gain, gain_value.dgain_upper, gain_value.dgain_lower);
                printf("0x%02x%02x,\n",
                             gain_value.dgain_upper, gain_value.dgain_lower);
        }

        return 0;
}

