/* Copyright 2012 The Chromium OS Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */
/* Ask the EC to set the lightbar state to reflect the CPU activity */

#ifndef __CROS_EC_LIGHTBAR_H
#define __CROS_EC_LIGHTBAR_H

/****************************************************************************/
/* Internal stuff */

/* Define the types of sequences */
#define LBMSG(state) LIGHTBAR_##state
#include "lightbar_msg_list.h"
enum lightbar_sequence {
	LIGHTBAR_MSG_LIST
	LIGHTBAR_NUM_SEQUENCES
};
#undef LBMSG

/* Bytecode field constants */
enum lb_color {
	LB_COL_RED,
	LB_COL_GREEN,
	LB_COL_BLUE,
	LB_COL_ALL
};

enum lb_control {
	LB_CONT_COLOR0,
	LB_CONT_COLOR1,
	LB_CONT_PHASE,
	LB_CONT_MAX
};

#ifdef CONFIG_ALS_LIGHTBAR_DIMMING
/*
 * For dimming the lightbar in the dark, we define an array to
 * describe the expected colors:
 * if luminosity is more than 'lux_up', the color defined will be used.
 * if luminosity is more than 'lux_down', we will look at the next band.
 * The last entry must have lux == 0.
 * Defining brightness is not enough to prevent washed color in low
 * lux setting.
 */
struct lb_brightness_def {
	uint16_t lux_up;
	uint16_t lux_down;
	struct rgb_s color[4];
};

extern const struct lb_brightness_def lb_brightness_levels[];
extern const unsigned lb_brightness_levels_count;
#endif

/* Request a preset sequence from the lightbar task. */
void lightbar_sequence_f(enum lightbar_sequence num, const char *f);
#define lightbar_sequence(A) lightbar_sequence_f(A, __func__)

/****************************************************************************/
/* External stuff */

/* These are used for demo purposes */
#define DEMO_MODE_DEFAULT 0
extern void demo_battery_level(int inc);
extern void demo_is_charging(int ischarge);
extern void demo_brightness(int inc);
extern void demo_tap(void);
#endif  /* __CROS_EC_LIGHTBAR_H */
