Esempio n. 1
0
/**
 * :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)));
}
Esempio n. 2
0
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;
}