#pragma once

#include <stdbool.h>

#include "stm32f030x6.h"
#include "pinning.h"

// ADC polling interval in milliseconds
#define LIGHTSENSOR_INTERVAL    250

// Resolution of the brightness output
#define LIGHTSENSOR_BITS        12
#define LIGHTSENSOR_MAX         (1 << LIGHTSENSOR_BITS)

// 'Forgetting factor' of the rolling brightness average
#define LIGHTSENSOR_LAMBDA_BITS 4

// Bounds for converting absolute to relative brightness: Consider everything
// near the minimum or maximum 0.0 or 1.0, respectively
#define LIGHTSENSOR_LOW_BOUND   ((unsigned int)(0.005 * LIGHTSENSOR_MAX))
#define LIGHTSENSOR_HIGH_BOUND  ((unsigned int)(0.9 * LIGHTSENSOR_MAX))

extern int LightSensor_RelativeBrightness;

void LightSensor_Init(void);
void LightSensor_Poll(void);