私は、Bluetooth を介して構成可能な組み込みデバイスを作成中です。私は OBEX が進むべき道であると判断しました (同様のデバイスは FTP を使用してイーサネット経由で構成可能であり、同じアプローチを使用したいと考えています)。Bluetooth接続の組み込み側が完了しました。携帯電話から組み込みシステムに写真をアップロードできるので、うまくいきます。
次に、デバイスを構成するための Windows アプリケーションを作成する作業が行われました。私は Windows アプリケーションの進化についていく必要性を感じたことがないので、おそらく MFC アプリケーションを作成することになるでしょう。
Bluetooth を実行する Windows 用の C コードを見つけるのは非常に難しいと思いますが、SourceForge のプロジェクトである OpenObex に出くわしました。私はコードをダウンロードし、ビルド手順を読み、それらを完全に無視して (cmake で作業するのは好きではありませんでした)、代わりに、ライブラリとテスト アプリケーションのすべてのソースを含む Visual C++ 2010 プロジェクトを作成しました。
このアプリケーションで最初に行うことは、接続することです。そこで、Bluetooth に関する深い知識が必要な行動に出くわし、一緒にググることができないようです。
connect() を呼び出すと、GetLastError() に 0x2750 が返されます。これは、「ホスト ダウン」を意味することがわかりました。Windows/Bluetooth の場合、これはホストが「切断モード」にあることを意味すると Google は教えてくれました。これは、私が作成したログからもわかると思います。
最初に: 組み込みシステムの bluetoothd は次のことを教えてくれます (調べる場合に備えて、私が自分で追加したログの一部):
bluetoothd[195]: src/adapter.c(7795):connected_callback() hci0 device 24:FD:52:14:C2:6B connected eir_len 12
bluetoothd[195]: src/adapter.c(808):btd_adapter_find_device() Trying to find device
bluetoothd[195]: src/device.c(4116):device_addr_type_cmp() Comparing bf:9f:27:e2:87:d0 to 6b:c2:14:52:fd:24
bluetoothd[195]: src/device.c(3736):device_create() dst 24:FD:52:14:C2:6B
bluetoothd[195]: src/device.c(3646):device_new() address 24:FD:52:14:C2:6B
bluetoothd[195]: src/device.c(3682):device_new() Creating device /org/bluez/hci0/dev_24_FD_52_14_C2_6B
bluetoothd[195]: src/adapter.c(1148):adapter_create_device() g_slist_append device 0x1228730
bluetoothd[195]: src/adapter.c(7805):connected_callback() continuing connected callback
bluetoothd[195]: src/adapter.c(7810):connected_callback() going to eir_parse
bluetoothd[195]: src/adapter.c(7816):connected_callback() set class
bluetoothd[195]: src/device.c(3821):device_set_class() /org/bluez/hci0/dev_24_FD_52_14_C2_6B 0x02010C
bluetoothd[195]: src/adapter.c(7821):connected_callback() Going to add connection
bluetoothd[195]: src/adapter.c(3960):adapter_add_connection() g_slist_append device 0x1228730
bluetoothd[195]: src/device.c(3787):btd_device_device_set_name() /org/bluez/hci0/dev_24_FD_52_14_C2_6B HCK06
この後、Windows アプリケーションが「接続に失敗しました」と判断するまでに約 1 秒かかり、その後、bluetoothd から次のように通知されます。
bluetoothd[195]: src/adapter.c(7033):new_link_key_callback() hci0 new key for 24:FD:52:14:C2:6B type 4 pin_len 0 store_hint 0
bluetoothd[195]: src/adapter.c(808):btd_adapter_find_device() Trying to find device
bluetoothd[195]: src/device.c(4116):device_addr_type_cmp() Comparing bf:9f:27:e2:87:d0 to 6b:c2:14:52:fd:24
bluetoothd[195]: src/device.c(4116):device_addr_type_cmp() Comparing 6b:c2:14:52:fd:24 to 6b:c2:14:52:fd:24
bluetoothd[195]: src/adapter.c(1228):btd_adapter_get_device() Found device 0x1228730
bluetoothd[195]: src/adapter.c(808):btd_adapter_find_device() Trying to find device
bluetoothd[195]: src/device.c(4116):device_addr_type_cmp() Comparing bf:9f:27:e2:87:d0 to 6b:c2:14:52:fd:24
bluetoothd[195]: src/device.c(4116):device_addr_type_cmp() Comparing 6b:c2:14:52:fd:24 to 6b:c2:14:52:fd:24
bluetoothd[195]: src/adapter.c(1228):btd_adapter_get_device() Found device 0x1228730
bluetoothd[195]: src/device.c(5485):device_bonding_complete() bonding (nil) status 0x00
bluetoothd[195]: src/device.c(5542):device_bonding_complete() setting timer for reverse service discovery
bluetoothd[195]: src/adapter.c(1635):resume_discovery()
bluetoothd[195]: src/device.c(4286):device_probe_profiles() Probing profiles for device 24:FD:52:14:C2:6B
bluetoothd[195]: profiles/network/connection.c:connection_register() /org/bluez/hci0/dev_24_FD_52_14_C2_6B id 4373
bluetoothd[195]: profiles/network/connection.c:create_peer() Registered interface org.bluez.Network1 on path /org/bluez/hci0/dev_24_FD_52_14_C2_6B
bluetoothd[195]: src/service.c(117):btd_service_ref() 0x123f160: ref=2
bluetoothd[195]: profiles/network/connection.c:connection_register() id 4373 registered
bluetoothd[195]: src/service.c(104):change_state() 0x123f160: device 24:FD:52:14:C2:6B profile network-panu state changed: unavailable -> disconnected (0)
bluetoothd[195]: src/device.c(2284):device_svc_resolved() /org/bluez/hci0/dev_24_FD_52_14_C2_6B err 0
「切断モード」は、組み込みデバイスから送信されたメッセージの直接の結果である可能性があります.hcidumpは、とりわけ次のことを教えてくれるからです:
< ACL data: handle 12 flags 0x00 dlen 8
L2CAP(d): cid 0x0040 len 4 [psm 3]
RFCOMM(s): *DM*: cr 1 dlci 8 pf 1 ilen 0 fcs 0xe3
タイミング的には、これは Windows クライアントが「接続に失敗しました」と判断するのと同時に発生します。
たくさんのテキスト (申し訳ありません! :) ) ですが、Windows で C から OBEX を実行する上でさらに役立つ情報があれば、本当に感謝しています。