3

I know how to connect bluetooth headset to Ubuntu, so I can e.g. speak with Skype remotely.

Now I have the opposite question: How to turn Ubuntu into a sophisticated headset, that can record both input and output sound streams? I lack decent sound recording capabilities in my phone (Nokia 6310i) and I hope that I can help it a little with my Notebook.

Turning on A2DP sink and source is not enough for my Notebook to be visible as a remote Headset on the phone. I guess I need to turn on some another extra bluetooth protocol (like HFP profile).


I've discovered a utility [nohands][3] that promises to do just that, but it fails to build on the Ubuntu 14.04 and looks abandoned for 4 years.

After satisfying the dependencies (at least according to the ./configure) it fails to build:

[adam:/home/Adama-docs/Adam/Adam/linux/tmp/nohands]$ make
make  all-recursive
make[1]: Entering directory `/home/Adama-docs/Adam/Adam/linux/tmp/nohands'
Making all in libhfp
make[2]: Entering directory `/home/Adama-docs/Adam/Adam/linux/tmp/nohands/libhfp'
g++ -DHAVE_CONFIG_H -I. -I.. -I../include -include config.h   -Wshadow -fno-exceptions -g -Wall -MT bt.o -MD -MP -MF .deps/bt.Tpo -c -o bt.o bt.cpp
In file included from bt.cpp:48:0:
../include/libhfp/bt.h: In member function ‘void libhfp::BtDevice::DisconnectAll()’:
../include/libhfp/bt.h:1081:50: warning: converting ‘false’ to pointer type for argument 1 of ‘void libhfp::BtDevice::__DisconnectAll(libhfp::ErrorInfo*)’ [-Wconversion-null]
  void DisconnectAll(void) { __DisconnectAll(false); }
                                                  ^
In file included from bt.cpp:42:0:
bt.cpp: In static member function ‘static int libhfp::SdpAsyncTaskHandler::SdpLookupChannel(libhfp::SdpTaskParams&)’:
bt.cpp:81:20: error: taking address of temporary [-fpermissive]
  sdp = sdp_connect(BDADDR_ANY, &htp.m_bdaddr, SDP_RETRY_IF_BUSY);
                    ^
bt.cpp: In member function ‘bool libhfp::BtHub::Start(libhfp::ErrorInfo*)’:
bt.cpp:1226:22: error: taking address of temporary [-fpermissive]
  m_sdp = sdp_connect(BDADDR_ANY, BDADDR_LOCAL, SDP_RETRY_IF_BUSY);
                      ^
bt.cpp:1226:34: error: taking address of temporary [-fpermissive]
  m_sdp = sdp_connect(BDADDR_ANY, BDADDR_LOCAL, SDP_RETRY_IF_BUSY);
                                  ^
In file included from ../include/libhfp/bt.h:31:0,
                 from bt.cpp:48:
../include/libhfp/events.h: In instantiation of ‘void libhfp::Callback<void, TA1>::operator()(TA1) [with TA1 = libhfp::SdpTask*]’:
bt.cpp:219:25:   required from here
../include/libhfp/events.h:816:13: error: ‘Invoke’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
    Invoke(ia);
             ^
../include/libhfp/events.h:816:13: note: declarations in dependent base ‘libhfp::CallbackAdapter<void, libhfp::ArgSet<libhfp::SdpTask*, libhfp::Nil, libhfp::Nil, libhfp::Nil, libhfp::Nil, libhfp::Nil> >’ are not found by unqualified lookup
../include/libhfp/events.h:816:13: note: use ‘this->Invoke’ instead
../include/libhfp/events.h: In instantiation of ‘void libhfp::Callback<void, TA1, TA2>::Register(TargT*, void (TargT::*)(TA1, TA2)) [with TargT = libhfp::SdpAsyncTaskHandler; TA1 = libhfp::SocketNotifier*; TA2 = int]’:
bt.cpp:349:27:   required from here
../include/libhfp/events.h:853:28: error: ‘RegisterDirect’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
   RegisterDirect(targp, mfp);
                            ^
../include/libhfp/events.h:853:28: note: declarations in dependent base ‘libhfp::CallbackAdapter<void, libhfp::ArgSet<libhfp::SocketNotifier*, int, libhfp::Nil, libhfp::Nil, libhfp::Nil, libhfp::Nil> >’ are not found by unqualified lookup
../include/libhfp/events.h:853:28: note: use ‘this->RegisterDirect’ instead
../include/libhfp/events.h: In instantiation of ‘void libhfp::Callback<void, TA1>::operator()(TA1) [with TA1 = libhfp::HciTask*]’:
bt.cpp:687:25:   required from here
../include/libhfp/events.h:816:13: error: ‘Invoke’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
    Invoke(ia);
             ^
../include/libhfp/events.h:816:13: note: declarations in dependent base ‘libhfp::CallbackAdapter<void, libhfp::ArgSet<libhfp::HciTask*, libhfp::Nil, libhfp::Nil, libhfp::Nil, libhfp::Nil, libhfp::Nil> >’ are not found by unqualified lookup
../include/libhfp/events.h:816:13: note: use ‘this->Invoke’ instead
../include/libhfp/events.h: In instantiation of ‘void libhfp::Callback<void, TA1>::Register(TargT*, void (TargT::*)(TA1)) [with TargT = libhfp::BtHci; TA1 = libhfp::TimerNotifier*]’:
bt.cpp:894:48:   required from here
../include/libhfp/events.h:810:28: error: ‘RegisterDirect’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
   RegisterDirect(targp, mfp);
                            ^
../include/libhfp/events.h:810:28: note: declarations in dependent base ‘libhfp::CallbackAdapter<void, libhfp::ArgSet<libhfp::TimerNotifier*, libhfp::Nil, libhfp::Nil, libhfp::Nil, libhfp::Nil, libhfp::Nil> >’ are not found by unqualified lookup
../include/libhfp/events.h:810:28: note: use ‘this->RegisterDirect’ instead
../include/libhfp/events.h: In instantiation of ‘void libhfp::Callback<void, TA1, TA2>::Register(TargT*, void (TargT::*)(TA1, TA2)) [with TargT = libhfp::BtHci; TA1 = libhfp::SocketNotifier*; TA2 = int]’:
bt.cpp:895:51:   required from here
../include/libhfp/events.h:853:28: error: ‘RegisterDirect’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
   RegisterDirect(targp, mfp);
                            ^
../include/libhfp/events.h:853:28: note: declarations in dependent base ‘libhfp::CallbackAdapter<void, libhfp::ArgSet<libhfp::SocketNotifier*, int, libhfp::Nil, libhfp::Nil, libhfp::Nil, libhfp::Nil> >’ are not found by unqualified lookup
../include/libhfp/events.h:853:28: note: use ‘this->RegisterDirect’ instead
../include/libhfp/events.h: In instantiation of ‘void libhfp::Callback<void, TA1>::Register(TargT*, void (TargT::*)(TA1)) [with TargT = libhfp::BtHub; TA1 = libhfp::TimerNotifier*]’:
bt.cpp:1142:41:   required from here
../include/libhfp/events.h:810:28: error: ‘RegisterDirect’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
   RegisterDirect(targp, mfp);
                            ^
../include/libhfp/events.h:810:28: note: declarations in dependent base ‘libhfp::CallbackAdapter<void, libhfp::ArgSet<libhfp::TimerNotifier*, libhfp::Nil, libhfp::Nil, libhfp::Nil, libhfp::Nil, libhfp::Nil> >’ are not found by unqualified lookup
../include/libhfp/events.h:810:28: note: use ‘this->RegisterDirect’ instead
../include/libhfp/events.h: In instantiation of ‘void libhfp::Callback<void, TA1, TA2>::Register(TargT*, void (TargT::*)(TA1, TA2)) [with TargT = libhfp::BtHub; TA1 = libhfp::SocketNotifier*; TA2 = int]’:
bt.cpp:1254:53:   required from here
../include/libhfp/events.h:853:28: error: ‘RegisterDirect’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
   RegisterDirect(targp, mfp);
                            ^
../include/libhfp/events.h:853:28: note: declarations in dependent base ‘libhfp::CallbackAdapter<void, libhfp::ArgSet<libhfp::SocketNotifier*, int, libhfp::Nil, libhfp::Nil, libhfp::Nil, libhfp::Nil> >’ are not found by unqualified lookup
../include/libhfp/events.h:853:28: note: use ‘this->RegisterDirect’ instead
../include/libhfp/events.h: In instantiation of ‘void libhfp::Callback<void, TA1>::operator()(TA1) [with TA1 = libhfp::ErrorInfo*]’:
bt.cpp:1415:30:   required from here
../include/libhfp/events.h:816:13: error: ‘Invoke’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
    Invoke(ia);
             ^
../include/libhfp/events.h:816:13: note: declarations in dependent base ‘libhfp::CallbackAdapter<void, libhfp::ArgSet<libhfp::ErrorInfo*, libhfp::Nil, libhfp::Nil, libhfp::Nil, libhfp::Nil, libhfp::Nil> >’ are not found by unqualified lookup
../include/libhfp/events.h:816:13: note: use ‘this->Invoke’ instead
../include/libhfp/events.h: In instantiation of ‘void libhfp::Callback<void, TA1, TA2>::operator()(TA1, TA2) [with TA1 = libhfp::BtDevice*; TA2 = libhfp::ErrorInfo*]’:
bt.cpp:1447:27:   required from here
../include/libhfp/events.h:859:13: error: ‘Invoke’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
    Invoke(ia);
             ^
../include/libhfp/events.h:859:13: note: declarations in dependent base ‘libhfp::CallbackAdapter<void, libhfp::ArgSet<libhfp::BtDevice*, libhfp::ErrorInfo*, libhfp::Nil, libhfp::Nil, libhfp::Nil, libhfp::Nil> >’ are not found by unqualified lookup
../include/libhfp/events.h:859:13: note: use ‘this->Invoke’ instead
../include/libhfp/events.h: In instantiation of ‘void libhfp::Callback<void, TA1>::Register(TargT*, void (TargT::*)(TA1)) [with TargT = libhfp::BtHub; TA1 = libhfp::HciTask*]’:
bt.cpp:1506:58:   required from here
../include/libhfp/events.h:810:28: error: ‘RegisterDirect’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
   RegisterDirect(targp, mfp);
                            ^
../include/libhfp/events.h:810:28: note: declarations in dependent base ‘libhfp::CallbackAdapter<void, libhfp::ArgSet<libhfp::HciTask*, libhfp::Nil, libhfp::Nil, libhfp::Nil, libhfp::Nil, libhfp::Nil> >’ are not found by unqualified lookup
../include/libhfp/events.h:810:28: note: use ‘this->RegisterDirect’ instead
../include/libhfp/events.h: In instantiation of ‘void libhfp::Callback<void, TA1>::operator()(TA1) [with TA1 = libhfp::BtManaged*]’:
bt.cpp:1705:31:   required from here
../include/libhfp/events.h:816:13: error: ‘Invoke’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
    Invoke(ia);
             ^
../include/libhfp/events.h:816:13: note: declarations in dependent base ‘libhfp::CallbackAdapter<void, libhfp::ArgSet<libhfp::BtManaged*, libhfp::Nil, libhfp::Nil, libhfp::Nil, libhfp::Nil, libhfp::Nil> >’ are not found by unqualified lookup
../include/libhfp/events.h:816:13: note: use ‘this->Invoke’ instead
../include/libhfp/events.h: In instantiation of ‘void libhfp::Callback<void, TA1>::Register(TargT*, void (TargT::*)(TA1)) [with TargT = libhfp::BtDevice; TA1 = libhfp::HciTask*]’:
bt.cpp:1784:65:   required from here
../include/libhfp/events.h:810:28: error: ‘RegisterDirect’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
   RegisterDirect(targp, mfp);
                            ^
../include/libhfp/events.h:810:28: note: declarations in dependent base ‘libhfp::CallbackAdapter<void, libhfp::ArgSet<libhfp::HciTask*, libhfp::Nil, libhfp::Nil, libhfp::Nil, libhfp::Nil, libhfp::Nil> >’ are not found by unqualified lookup
../include/libhfp/events.h:810:28: note: use ‘this->RegisterDirect’ instead
../include/libhfp/events.h: In instantiation of ‘void libhfp::Callback<void, TA1, TA2, TA3>::operator()(TA1, TA2, TA3) [with TA1 = libhfp::BtDevice*; TA2 = const char*; TA3 = libhfp::ErrorInfo*]’:
bt.cpp:1813:48:   required from here
../include/libhfp/events.h:903:13: error: ‘Invoke’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
    Invoke(ia);
             ^
../include/libhfp/events.h:903:13: note: declarations in dependent base ‘libhfp::CallbackAdapter<void, libhfp::ArgSet<libhfp::BtDevice*, const char*, libhfp::ErrorInfo*, libhfp::Nil, libhfp::Nil, libhfp::Nil> >’ are not found by unqualified lookup
../include/libhfp/events.h:903:13: note: use ‘this->Invoke’ instead
make[2]: *** [bt.o] Error 1
make[2]: Leaving directory `/home/Adama-docs/Adam/Adam/linux/tmp/nohands/libhfp'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/Adama-docs/Adam/Adam/linux/tmp/nohands'
make: *** [all] Error 2
Adam Ryczkowski
  • 4,403
  • 9
  • 40
  • 65

0 Answers0