]> www.fi.muni.cz Git - bike-lights.git/commitdiff
ambient.c: user-settable ambient light zone
authorJan "Yenya" Kasprzak <kas@fi.muni.cz>
Thu, 4 Jul 2013 22:59:21 +0000 (00:59 +0200)
committerJan "Yenya" Kasprzak <kas@fi.muni.cz>
Thu, 4 Jul 2013 22:59:21 +0000 (00:59 +0200)
User-settable parameter 0 is now the ambient light zone:
Value 0 means to use the ambient light sensor,
values 1 .. N_AMBIENT_ZONES represent the manually set light level.

firmware/ambient.c
firmware/buttons.c
firmware/lights.h

index caeca14a242430923ffc1ec0dfe47e4cedf00459..19b7a13cd86003bc4ec0407f9aa42ecbe287719d 100644 (file)
@@ -23,13 +23,12 @@ typedef struct {
  * Note: these have to be sorted, starting with 0, ending with 0xFFFF
  * and having small overlaps in order to provide a bit of hysteresis.
  */
-static ambient_zone_t ambient_zones[] = {
+static ambient_zone_t ambient_zones[N_AMBIENT_ZONES] = {
        { 0x0000                   , 0x0270<<AMBIENT_VAL_SHIFT }, // dark
        { 0x0260<<AMBIENT_VAL_SHIFT, 0x02e0<<AMBIENT_VAL_SHIFT }, // evening
        { 0x02d0<<AMBIENT_VAL_SHIFT, 0x0306<<AMBIENT_VAL_SHIFT }, // dawn
        { 0x0300<<AMBIENT_VAL_SHIFT, 0xffff                    }, // day
 };
-#define N_AMBIENT_ZONES (sizeof(ambient_zones)/sizeof(ambient_zones[0]))
 
 void init_ambient()
 {
@@ -108,6 +107,11 @@ void ambient_adc(uint16_t adcval)
 
        if (ambient_max < byte_val)
                ambient_max = byte_val;
+
+       // user_param ambient zone override
+       if ((byte_val = get_user_param(0)) > 0)
+               ambient_zone = byte_val - 1;
+
        if (old_zone != ambient_zone) {
 #if 0
                log_byte(0xab);
index d839e8dcdfcba73cf785cc065eebbd3e91c4a652..c3cdc52703bdb10b108aa59905beaf886dfc84ec 100644 (file)
@@ -52,7 +52,9 @@ union {
  * mode.
  */
 static unsigned char user_params[N_USER_PARAMS] = { 0, 0, 0 };
-static unsigned char user_params_max[N_USER_PARAMS] = { 3, 2, 2 };
+static unsigned char user_params_max[N_USER_PARAMS] = {
+       N_AMBIENT_ZONES+1, 2, 2
+};
 
 static unsigned char user_params_state = 0;
        /*
index 081237bc5859152793460ea4e161c043ad44b096..71051e945e6f7f21b79efb5ed359d89dc730f8b9 100644 (file)
@@ -77,6 +77,7 @@ void gpio_set(unsigned char n, unsigned char on);
 
 /* ambient.c */
 #define AMBIENT_ADC_SHIFT 0    /* 1 measurement per callback */
+#define N_AMBIENT_ZONES 4
 void init_ambient();
 void susp_ambient();
 void ambient_log_min_max();