Dear bluez developer! /*bluetooth kernel hci_conn.c */ 382 void hci_conn_enter_active_mode(struct hci_conn *conn) 383 { 384 struct hci_dev *hdev = conn->hdev; 385 386 BT_DBG("conn %p mode %d", conn, conn->mode); 387 388 if (test_bit(HCI_RAW, &hdev->flags)) 389 return; 390 391 if (conn->mode != HCI_CM_SNIFF || !conn->power_save) 392 goto timer; 393 394 if (!test_and_set_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend)) { 395 struct hci_cp_exit_sniff_mode cp; 396 cp.handle = __cpu_to_le16(conn->handle); 397 hci_send_cmd(hdev, OGF_LINK_POLICY, 398 OCF_EXIT_SNIFF_MODE, sizeof(cp), &cp); 399 } 400 401 timer: 402 if (hdev->idle_timeout > 0) 403 mod_timer(&conn->idle_timer, 404 jiffies + msecs_to_jiffies(hdev->idle_timeout)); 405 } 406 If possible, could you explain why this code checks !conn->power_save var.? Without this , if conn->mode==HCI_CM_SNIFF , we simply exit sniff mode,"OCF_EXIT_SNIFF_MODE". As far as I understood, whenever conn->mode is HCI_CM_SNIFF conn->power_save is 0. The reason is that hci_mode_change_evt() set conn->power_save as "0" when conn->mode !=HCI_CM_ACTIVE. Consequently we don't need to check that variable. Regards Chanyeol. -- To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html