/** * :call-seq: * <span class="name">set_rgb</span> <span class="arguments">(r, g, b) -> integer</span> * * Set LED color to RGB. * * Return the actual number of bytes written and -1 on error. */ static VALUE rb_blink1_setRGB(VALUE self, VALUE r, VALUE g, VALUE b) { struct Blink1Instance *ins; Data_Get_Struct(self, struct Blink1Instance, ins); return INT2NUM(blink1_setRGB(ins->dev, FIX2UINT(r), FIX2UINT(g), FIX2UINT(b))); }
int main(int argc, char *argv[]) { blink1_dev fd = -1; if (argc < 2) usage(NULL); while(++argv, --argc) { int rc = 0; uint8_t step = 0; uint8_t R = 0; uint8_t G = 0; uint8_t B = 0; uint16_t T = 0; char buf[16]; memset(buf, 0, sizeof(buf)); switch(**argv) { case '/': case '.': fd = blink1_openByPath(*argv); if (blink1_error(fd)) { perror(*argv); continue; } rc = fd; break; case '=': rc = sscanf(*argv, "=%hhu,%hhu,%hhu,%hu", &R, &G, &B, &T); if (rc != 4) usage(*argv); rc = blink1_fadeToRGB(fd, T, R, G, B); break; case ':': rc = sscanf(*argv, ":%hhu,%hhu,%hhu", &R, &G, &B); if (rc != 3) usage(*argv); rc = blink1_setRGB(fd, R, G, B); break; case '@': rc = sscanf(*argv, "@%hhu:%hhu,%hhu,%hhu,%hu", &step, &R, &G, &B, &T); if (rc != 5) usage(*argv); if ((step < 0) || step > 15) usage(*argv); rc = blink1_writePatternLine(fd, T, R, G, B, step); break; case '_': rc = sscanf(*argv, "_%hu", &T); if (rc == 1) rc = blink1_fadeToRGB(fd, T, 0, 0, 0); else rc = blink1_setRGB(fd, 0, 0, 0); break; case '+': rc = sscanf(*argv, "+%hhu", &step); if (rc != 1) usage(*argv); if ((step < 0) || step > 15) usage(*argv); rc = blink1_play(fd, 1, step); break; case '-': rc = sscanf(*argv, "-%hhu", &step); if (rc != 1) step = 0; if ((step < 0) || step > 15) step = 0; rc = blink1_play(fd, 0, step); break; case '%': for(step = 0; step < 16; ++step) rc |= blink1_writePatternLine(fd, 0, 0, 0, 0, step); break; default: usage(*argv); } if (rc < 0) perror("blink1 command"); } blink1_close(fd); return 0; }