/** Set indicator led pattern via libhybris
 *
 * @param r     red intensity 0 ... 255
 * @param g     green intensity 0 ... 255
 * @param b     blue intensity 0 ... 255
 * @param ms_on milliseconds to keep the led on, or 0 for no flashing
 * @param ms_on milliseconds to keep the led off, or 0 for no flashing
 *
 * @return true on success, false on failure
 */
bool
hybris_device_indicator_set_pattern(int r, int g, int b, int ms_on, int ms_off)
{
  bool ack = false;

  if( !hybris_device_indicator_init() ) {
    goto cleanup;
  }

  r = clamp_to_range(0, 255, r);
  g = clamp_to_range(0, 255, g);
  b = clamp_to_range(0, 255, b);

  ms_on  = clamp_to_range(0, 60000, ms_on);
  ms_off = clamp_to_range(0, 60000, ms_off);

  if( ms_on < 50 || ms_off < 50 ) {
    ms_on = ms_off = 0;
  }

  struct light_state_t lst;

  memset(&lst, 0, sizeof lst);

  lst.color          = (0xff << 24) | (r << 16) | (g << 8) | (b << 0);
  lst.brightnessMode = BRIGHTNESS_MODE_USER;

  if( ms_on > 0 && ms_off > 0 ) {
    lst.flashMode    = LIGHT_FLASH_HARDWARE;
    lst.flashOnMS    = ms_on;
    lst.flashOffMS   = ms_off;
  }
  else {
    lst.flashMode    = LIGHT_FLASH_NONE;
    lst.flashOnMS    = 0;
    lst.flashOffMS   = 0;
  }

  if( hybris_device_indicator_handle->set_light(hybris_device_indicator_handle, &lst) < 0 ) {
    goto cleanup;
  }

  ack = true;

cleanup:

  mce_log(LL_DEBUG, "pattern(%d,%d,%d,%d,%d) -> %s",
          r,g,b, ms_on, ms_off , ack ? "success" : "failure");

  return ack;
}
Exemplo n.º 2
0
static int _rfic_fpga_set_gain_stage(struct bladerf *dev,
                                     bladerf_channel ch,
                                     char const *stage,
                                     int gain)
{
    struct bladerf_range const *range = NULL;
    int64_t val;

    if ((BLADERF_CHANNEL_IS_TX(ch) && strcmp(stage, "dsa") != 0) ||
        (!BLADERF_CHANNEL_IS_TX(ch) && strcmp(stage, "full") != 0)) {
        log_error("%s: unknown gain stage '%s'\n", __FUNCTION__, stage);
        return BLADERF_ERR_INVAL;
    }

    CHECK_STATUS(dev->board->get_gain_stage_range(dev, ch, stage, &range));

    if (BLADERF_CHANNEL_IS_TX(ch) && gain < -89) {
        val = -89750;
    } else {
        val = __scale_int64(range, clamp_to_range(range, gain));
    }

    if (BLADERF_CHANNEL_IS_TX(ch)) {
        val = -val;
    }

    return _rfic_cmd_write(dev, ch, BLADERF_RFIC_COMMAND_GAIN, (uint64_t)val);
}
/** Set display keypad brightness via libhybris
 *
 * @param level 0=off ... 255=maximum brightness
 *
 * @return true on success, false on failure
 */
bool
hybris_device_keypad_set_brightness(int level)
{
  bool ack = false;

  if( !hybris_device_keypad_init() ) {
    goto cleanup;
  }

  unsigned lev = clamp_to_range(0, 255, level);

  struct light_state_t lst;

  memset(&lst, 0, sizeof lst);

  lst.color          = (0xff << 24) | (lev << 16) | (lev << 8) | (lev << 0);
  lst.flashMode      = LIGHT_FLASH_NONE;
  lst.flashOnMS      = 0;
  lst.flashOffMS     = 0;
  lst.brightnessMode = BRIGHTNESS_MODE_USER;

  if( hybris_device_keypad_handle->set_light(hybris_device_keypad_handle, &lst) < 0 ) {
    goto cleanup;
  }

  ack = true;

cleanup:

  mce_log(LL_DEBUG, "brightness(%d) -> %s",
          level, ack ? "success" : "failure");

  return ack;
}