Example #1
0
static void
SetPort(DataFieldEnum &df, const DeviceConfig &config)
{
  switch (config.port_type) {
  case DeviceConfig::PortType::DISABLED:
  case DeviceConfig::PortType::AUTO:
  case DeviceConfig::PortType::INTERNAL:
  case DeviceConfig::PortType::TCP_LISTENER:
    break;

  case DeviceConfig::PortType::SERIAL:
    if (!df.Exists(config.path))
      AddPort(df, config.port_type, config.path);
    df.SetAsString(config.path);
    return;

  case DeviceConfig::PortType::RFCOMM:
    if (!df.Exists(config.bluetooth_mac))
      AddPort(df, DeviceConfig::PortType::RFCOMM, config.bluetooth_mac);

    df.SetAsString(config.bluetooth_mac);
    return;

  case DeviceConfig::PortType::IOIOUART:
    StaticString<16> buffer;
    buffer.UnsafeFormat(_T("%d"), config.ioio_uart_id);
    df.SetAsString(buffer);
    return;
  }

  for (unsigned i = 0; port_types[i].label != NULL; i++) {
    if (port_types[i].type == config.port_type) {
      df.SetAsString(gettext(port_types[i].label));
      break;
    }
  }
}
Example #2
0
static void
FillSerialPorts(DataFieldEnum &df, const DeviceConfig &config)
{
#if defined(HAVE_POSIX)
  DetectSerialPorts(df);
#elif defined(WIN32)
#ifdef _WIN32_WCE
  if (!DetectSerialPorts(df))
#endif
    FillDefaultSerialPorts(df);
#endif

  if (config.port_type == DeviceConfig::PortType::SERIAL) {
    if (!df.Exists(config.path))
        AddPort(df, config.port_type, config.path);

    df.SetAsString(config.path);
  }
}
Example #3
0
static void
FillAndroidBluetoothPorts(DataFieldEnum &df, const DeviceConfig &config)
{
#ifdef ANDROID
  JNIEnv *env = Java::GetEnv();
  jobjectArray bonded = BluetoothHelper::list(env);
  if (bonded == NULL)
    return;

  jsize n = env->GetArrayLength(bonded) / 2;
  for (jsize i = 0; i < n; ++i) {
    jstring address = (jstring)env->GetObjectArrayElement(bonded, i * 2);
    if (address == NULL)
      continue;

    const char *address2 = env->GetStringUTFChars(address, NULL);
    if (address2 == NULL)
      continue;

    jstring name = (jstring)env->GetObjectArrayElement(bonded, i * 2 + 1);
    const char *name2 = name != NULL
      ? env->GetStringUTFChars(name, NULL)
      : NULL;

    AddPort(df, DeviceConfig::PortType::RFCOMM, address2, name2);

    env->ReleaseStringUTFChars(address, address2);
    if (name2 != NULL)
      env->ReleaseStringUTFChars(name, name2);
  }

  env->DeleteLocalRef(bonded);

  if (config.port_type == DeviceConfig::PortType::RFCOMM &&
      !config.bluetooth_mac.empty()) {
    if (!df.Exists(config.bluetooth_mac))
      AddPort(df, DeviceConfig::PortType::RFCOMM, config.bluetooth_mac);

    df.SetAsString(config.bluetooth_mac);
  }
#endif
}
Example #4
0
static void
FillAndroidIOIOPorts(DataFieldEnum &df, const DeviceConfig &config)
{
#if defined(ANDROID) && defined(IOIOLIB)
  df.EnableItemHelp(true);

  TCHAR tempID[4];
  TCHAR tempName[15];
  for (unsigned i = 0; i < AndroidIOIOUartPort::getNumberUarts(); i++) {
    _sntprintf(tempID, sizeof(tempID), _T("%d"), i);
    _sntprintf(tempName, sizeof(tempName), _T("IOIO Uart %d"), i);
    AddPort(df, DeviceConfig::PortType::IOIOUART, tempID, tempName,
            AndroidIOIOUartPort::getPortHelp(i));
  }

  if (config.port_type == DeviceConfig::PortType::IOIOUART &&
      config.ioio_uart_id < AndroidIOIOUartPort::getNumberUarts()) {
    _sntprintf(tempID,  sizeof(tempID), _T("%d"), config.ioio_uart_id);
    df.SetAsString(tempID);
  }
#endif
}
Example #5
0
static void
SetupDeviceFields(const DeviceConfig &config,
                  WndProperty *port_field, WndProperty *speed_field,
                  WndProperty *driver_field, WndButton *setup_button)
{
#ifndef ANDROID
  static const TCHAR *const COMMPort[] = {
    _T("COM1"), _T("COM2"), _T("COM3"), _T("COM4"),
    _T("COM5"), _T("COM6"), _T("COM7"), _T("COM8"),
    _T("COM9"), _T("COM10"), _T("COM0"),
    NULL
  };

  static const TCHAR *const tSpeed[] = {
    _T("1200"), _T("2400"), _T("4800"), _T("9600"),
    _T("19200"), _T("38400"), _T("57600"), _T("115200"),
    NULL
  };
#endif

  if (port_field != NULL) {
    DataFieldEnum *dfe = (DataFieldEnum *)port_field->GetDataField();

    for (unsigned i = 0; port_types[i].label != NULL; i++) {
      dfe->addEnumText(gettext(port_types[i].label));

      if (port_types[i].type == config.port_type)
        dfe->Set(i);
    }

#ifdef ANDROID
    JNIEnv *env = Java::GetEnv();
    jobjectArray bonded = BluetoothHelper::list(env);
    if (bonded != NULL) {
      jsize n = env->GetArrayLength(bonded) / 2;
      for (jsize i = 0; i < n; ++i) {
        jstring address = (jstring)env->GetObjectArrayElement(bonded, i * 2);
        if (address == NULL)
          continue;

        const char *address2 = env->GetStringUTFChars(address, NULL);
        if (address2 == NULL)
          continue;

        jstring name = (jstring)env->GetObjectArrayElement(bonded, i * 2 + 1);
        const char *name2 = name != NULL
          ? env->GetStringUTFChars(name, NULL)
          : NULL;

        dfe->addEnumText(address2, name2);
        env->ReleaseStringUTFChars(address, address2);
        if (name2 != NULL)
          env->ReleaseStringUTFChars(name, name2);
      }

      env->DeleteLocalRef(bonded);

      if (config.port_type == DeviceConfig::RFCOMM &&
          !config.bluetooth_mac.empty()) {
        if (!dfe->Exists(config.bluetooth_mac))
          dfe->addEnumText(config.bluetooth_mac);
        dfe->SetAsString(config.bluetooth_mac);
      }
    }
#else
    dfe->addEnumTexts(COMMPort);

    switch (config.port_type) {
    case DeviceConfig::SERIAL:
      dfe->Set(config.port_index + num_port_types);
      break;

    case DeviceConfig::DISABLED:
    case DeviceConfig::RFCOMM:
    case DeviceConfig::AUTO:
    case DeviceConfig::INTERNAL:
    case DeviceConfig::TCP_LISTENER:
      break;
    }
#endif

    port_field->RefreshDisplay();
  }

  if (speed_field != NULL) {
#ifdef ANDROID
    speed_field->hide();
#else
    DataFieldEnum *dfe = (DataFieldEnum *)speed_field->GetDataField();
    dfe->addEnumTexts(tSpeed);

    dfe->Set(config.speed_index);
    speed_field->RefreshDisplay();
#endif
  }

  if (driver_field) {
    DataFieldEnum *dfe = (DataFieldEnum *)driver_field->GetDataField();

    const TCHAR *DeviceName;
    for (unsigned i = 0; (DeviceName = devRegisterGetName(i)) != NULL; i++)
      dfe->addEnumText(DeviceName);

    dfe->Sort(1);
    dfe->SetAsString(config.driver_name);

    driver_field->RefreshDisplay();
  }

  if (setup_button != NULL)
    setup_button->set_visible(config.IsVega());

  UpdateDeviceControlVisibility(*port_field, *speed_field, *driver_field);
}