summaryrefslogtreecommitdiff
path: root/util/lbplay.c
diff options
context:
space:
mode:
Diffstat (limited to 'util/lbplay.c')
-rw-r--r--util/lbplay.c113
1 files changed, 58 insertions, 55 deletions
diff --git a/util/lbplay.c b/util/lbplay.c
index 9acabaddfb..907374e9cc 100644
--- a/util/lbplay.c
+++ b/util/lbplay.c
@@ -18,40 +18,38 @@
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
+#define LB_SIZES(SUBCMD) { \
+ sizeof(((struct ec_params_lightbar *)0)->SUBCMD) \
+ + sizeof(((struct ec_params_lightbar *)0)->cmd), \
+ sizeof(((struct ec_response_lightbar *)0)->SUBCMD) }
static const struct {
uint8_t insize;
uint8_t outsize;
} lb_command_paramcount[] = {
- { sizeof(((struct ec_params_lightbar_cmd *)0)->in.dump),
- sizeof(((struct ec_params_lightbar_cmd *)0)->out.dump) },
- { sizeof(((struct ec_params_lightbar_cmd *)0)->in.off),
- sizeof(((struct ec_params_lightbar_cmd *)0)->out.off) },
- { sizeof(((struct ec_params_lightbar_cmd *)0)->in.on),
- sizeof(((struct ec_params_lightbar_cmd *)0)->out.on) },
- { sizeof(((struct ec_params_lightbar_cmd *)0)->in.init),
- sizeof(((struct ec_params_lightbar_cmd *)0)->out.init) },
- { sizeof(((struct ec_params_lightbar_cmd *)0)->in.brightness),
- sizeof(((struct ec_params_lightbar_cmd *)0)->out.brightness) },
- { sizeof(((struct ec_params_lightbar_cmd *)0)->in.seq),
- sizeof(((struct ec_params_lightbar_cmd *)0)->out.seq) },
- { sizeof(((struct ec_params_lightbar_cmd *)0)->in.reg),
- sizeof(((struct ec_params_lightbar_cmd *)0)->out.reg) },
- { sizeof(((struct ec_params_lightbar_cmd *)0)->in.rgb),
- sizeof(((struct ec_params_lightbar_cmd *)0)->out.rgb) },
- { sizeof(((struct ec_params_lightbar_cmd *)0)->in.get_seq),
- sizeof(((struct ec_params_lightbar_cmd *)0)->out.get_seq) },
- { sizeof(((struct ec_params_lightbar_cmd *)0)->in.demo),
- sizeof(((struct ec_params_lightbar_cmd *)0)->out.demo) },
+ LB_SIZES(dump),
+ LB_SIZES(off),
+ LB_SIZES(on),
+ LB_SIZES(init),
+ LB_SIZES(brightness),
+ LB_SIZES(seq),
+ LB_SIZES(reg),
+ LB_SIZES(rgb),
+ LB_SIZES(get_seq),
+ LB_SIZES(demo),
+ LB_SIZES(get_params),
+ LB_SIZES(set_params)
};
+#undef LB_SIZES
static void lb_cmd_noargs(enum lightbar_command cmd)
{
- struct ec_params_lightbar_cmd param;
- param.in.cmd = cmd;
+ struct ec_params_lightbar param;
+ struct ec_response_lightbar resp;
+ param.cmd = cmd;
ec_command(EC_CMD_LIGHTBAR_CMD, 0,
- &param, lb_command_paramcount[param.in.cmd].insize,
- &param, lb_command_paramcount[param.in.cmd].outsize);
+ &param, lb_command_paramcount[param.cmd].insize,
+ &resp, lb_command_paramcount[param.cmd].outsize);
}
inline void lightbar_off(void)
@@ -71,68 +69,73 @@ inline void lightbar_init_vals(void)
void lightbar_brightness(int newval)
{
- struct ec_params_lightbar_cmd param;
- param.in.cmd = LIGHTBAR_CMD_BRIGHTNESS;
- param.in.brightness.num = newval;
+ struct ec_params_lightbar param;
+ struct ec_response_lightbar resp;
+ param.cmd = LIGHTBAR_CMD_BRIGHTNESS;
+ param.brightness.num = newval;
ec_command(EC_CMD_LIGHTBAR_CMD, 0,
- &param, lb_command_paramcount[param.in.cmd].insize,
- &param, lb_command_paramcount[param.in.cmd].outsize);
+ &param, lb_command_paramcount[param.cmd].insize,
+ &resp, lb_command_paramcount[param.cmd].outsize);
}
void lightbar_sequence(enum lightbar_sequence num)
{
- struct ec_params_lightbar_cmd param;
- param.in.cmd = LIGHTBAR_CMD_SEQ;
- param.in.seq.num = num;
+ struct ec_params_lightbar param;
+ struct ec_response_lightbar resp;
+ param.cmd = LIGHTBAR_CMD_SEQ;
+ param.seq.num = num;
ec_command(EC_CMD_LIGHTBAR_CMD, 0,
- &param, lb_command_paramcount[param.in.cmd].insize,
- &param, lb_command_paramcount[param.in.cmd].outsize);
+ &param, lb_command_paramcount[param.cmd].insize,
+ &resp, lb_command_paramcount[param.cmd].outsize);
}
void lightbar_reg(uint8_t ctrl, uint8_t reg, uint8_t val)
{
- struct ec_params_lightbar_cmd param;
- param.in.cmd = LIGHTBAR_CMD_REG;
- param.in.reg.ctrl = ctrl;
- param.in.reg.reg = reg;
- param.in.reg.value = val;
+ struct ec_params_lightbar param;
+ struct ec_response_lightbar resp;
+ param.cmd = LIGHTBAR_CMD_REG;
+ param.reg.ctrl = ctrl;
+ param.reg.reg = reg;
+ param.reg.value = val;
ec_command(EC_CMD_LIGHTBAR_CMD, 0,
- &param, lb_command_paramcount[param.in.cmd].insize,
- &param, lb_command_paramcount[param.in.cmd].outsize);
+ &param, lb_command_paramcount[param.cmd].insize,
+ &resp, lb_command_paramcount[param.cmd].outsize);
}
void lightbar_rgb(int led, int red, int green, int blue)
{
- struct ec_params_lightbar_cmd param;
- param.in.cmd = LIGHTBAR_CMD_RGB;
- param.in.rgb.led = led;
- param.in.rgb.red = red;
- param.in.rgb.green = green;
- param.in.rgb.blue = blue;
+ struct ec_params_lightbar param;
+ struct ec_response_lightbar resp;
+ param.cmd = LIGHTBAR_CMD_RGB;
+ param.rgb.led = led;
+ param.rgb.red = red;
+ param.rgb.green = green;
+ param.rgb.blue = blue;
ec_command(EC_CMD_LIGHTBAR_CMD, 0,
- &param, lb_command_paramcount[param.in.cmd].insize,
- &param, lb_command_paramcount[param.in.cmd].outsize);
+ &param, lb_command_paramcount[param.cmd].insize,
+ &resp, lb_command_paramcount[param.cmd].outsize);
}
void wait_for_ec_to_stop(void)
{
int r;
- struct ec_params_lightbar_cmd param;
+ struct ec_params_lightbar param;
+ struct ec_response_lightbar resp;
int count = 0;
do {
usleep(100000);
- param.in.cmd = LIGHTBAR_CMD_GET_SEQ;
+ param.cmd = LIGHTBAR_CMD_GET_SEQ;
r = ec_command(EC_CMD_LIGHTBAR_CMD, 0,
&param,
- lb_command_paramcount[param.in.cmd].insize,
- &param,
- lb_command_paramcount[param.in.cmd].outsize);
+ lb_command_paramcount[param.cmd].insize,
+ &resp,
+ lb_command_paramcount[param.cmd].outsize);
if (count++ > 10) {
fprintf(stderr, "EC isn't responding\n");
exit(1);
}
- } while (r < 0 && param.out.get_seq.num != LIGHTBAR_STOP);
+ } while (r < 0 && resp.get_seq.num != LIGHTBAR_STOP);
}
int main(int argc, char **argv)