static jint isEnabledNative(JNIEnv *env, jobject object) { #ifdef HAVE_BLUETOOTH LOGV(__FUNCTION__); return bt_is_enabled(); #endif return -1; }
NS_IMETHODIMP BluetoothAdapter::GetPower(bool* aPower) { #if defined(MOZ_WIDGET_GONK) *aPower = bt_is_enabled(); #else *aPower = mPower; #endif return NS_OK; }
int bt_enable() { LOGV(__FUNCTION__); if (bt_is_enabled() == 1) return 0; int ret = -1; int hci_sock = -1; int attempt; if (set_bluetooth_power(1) < 0) goto out; LOGI("Starting hciattach daemon"); if (property_set("ctl.start", "hciattach") < 0) { LOGE("Failed to start hciattach"); set_bluetooth_power(0); goto out; } // Try for 10 seconds, this can only succeed once hciattach has sent the // firmware and then turned on hci device via HCIUARTSETPROTO ioctl for (attempt = 1000; attempt > 0; attempt--) { hci_sock = create_hci_sock(); if (hci_sock < 0) goto out; if (!ioctl(hci_sock, HCIDEVUP, HCI_DEV_ID)) { break; } close(hci_sock); usleep(10000); // 10 ms retry delay } if (attempt == 0) { LOGE("%s: Timeout waiting for HCI device to come up", __FUNCTION__); set_bluetooth_power(0); goto out; } LOGI("Starting bluetoothd deamon"); if (property_set("ctl.start", "bluetoothd") < 0) { LOGE("Failed to start bluetoothd"); set_bluetooth_power(0); goto out; } sleep(HCID_START_DELAY_SEC); ret = 0; out: if (hci_sock >= 0) close(hci_sock); return ret; }
int PanController::startPan() { pid_t pid; #ifdef HAVE_BLUETOOTH if (!bt_is_enabled()) { LOGE("Cannot start PAN services - Bluetooth not running"); errno = ENODEV; return -1; } #else LOGE("Cannot start PAN services - No Bluetooth support"); errno = ENODEV; return -1; #endif if (mPid) { LOGE("PAN already started"); errno = EBUSY; return -1; } if ((pid = fork()) < 0) { LOGE("fork failed (%s)", strerror(errno)); return -1; } if (!pid) { if (execl("/system/bin/pand", "/system/bin/pand", "--nodetach", "--listen", "--role", "NAP", (char *) NULL)) { LOGE("execl failed (%s)", strerror(errno)); } LOGE("Should never get here!"); return 0; } else { mPid = pid; } return 0; }