Ejemplo n.º 1
0
Archivo: fk_rgb.c Proyecto: roblabla/RT
t_rgba					color_moy(unsigned int n, ...)
{
	va_list ap;
	unsigned int len;
	t_rgba		newcolor;

	len = n;
	ft_bzero(&newcolor, sizeof(t_rgba));
	if (len <= 0)
		return ((t_rgba){0, 0, 0, 0});
	va_start(ap, n);
	newcolor = color_cpy(va_arg(ap, t_rgba));
	while (len > 0)
		newcolor = color_sum(newcolor, va_arg(ap, t_rgba));
	va_end(ap);
	return (color_div(newcolor, n));
}
Ejemplo n.º 2
0
static void command_run(struct watch *w, uint8_t events)
{
	union {
		char buf[256];
		enum command cmd;
		struct command_color cmd_color;
		struct command_color_mask cmd_color_mask;
		struct command_sequence cmd_seq;
	} cmdbuf;

	ssize_t z = recv(Command_sock, cmdbuf.buf, sizeof(cmdbuf), 0);
	if (z < 0)
	{
		fprintf(stderr, "command recv: %m\n");
		return;
	}
#define CHECK_LEN(T) \
	if (z < sizeof(cmdbuf.T)) \
	{ \
		fprintf(stderr, "command len: %zd for %s\n", z, #T); \
		return; \
	}
	CHECK_LEN(cmd);
	enum color c;
	color_t ct = {};
	enum led led;
	if (z >= sizeof(cmdbuf.cmd_color))
	{
		color_cpy(ct, cmdbuf.cmd_color.color);
		if ((led = cmdbuf.cmd_color.led) >= LED_COUNT)
			return;
	}
	switch (cmdbuf.cmd)
	{
		case COMMAND_NULL:
			break;

		case COMMAND_COLOR_SET:
			if (z >= sizeof(cmdbuf.cmd_color_mask))
				for_color (c)
					ct[c] = (ct[c] & cmdbuf.cmd_color_mask.mask[c]) | (Command_color[led][c] & ~cmdbuf.cmd_color_mask.mask[c]);
			command_color_set(ct, led);
			break;

		case COMMAND_COLOR_ADD:
			CHECK_LEN(cmd_color);
			for_color (c)
				ct[c] = Command_color[led][c] + ct[c];
			command_color_set(ct, led);
			break;

		case COMMAND_COLOR_SUB:
			CHECK_LEN(cmd_color);
			for_color (c)
				ct[c] = Command_color[led][c] - ct[c];
			command_color_set(ct, led);
			break;

		case COMMAND_SEQUENCE:
			command_sequence(cmdbuf.cmd_seq.seq, (z - offsetof(struct command_sequence, seq))/sizeof(*cmdbuf.cmd_seq.seq), led);
			break;
	}
#undef CHECK_LEN
}
Ejemplo n.º 3
0
static void command_color_set(color_t s, enum led led)
{
	base_rm(Command_color[led], led);
	color_cpy(Command_color[led], s);
	base_add(Command_color[led], led);
}