先端IT OBEX@gumstix sada 課題 • GumstixのBluetoothでアドホックネットワー クを作ろう! – 二つのGumPodが近づいたら、自動的に1曲転 送しよう! 準備1 ~インストール~ • OpenOBEXのインストール – ダウンロード • http://openobex.triq.net/downloads – 解凍(下記ディレクトリ下に配置) • $(BUILDROOT)/build_arm_nofpu/ – configure • ./configure --prefix $(BUILDROOT) /build_arm_nofpu/staging_dir/ --exec-prefix $(BUILDROOT) /build_arm_nofpu/staging_dir/ --host arm – make • Make; make install • 注意: $(BUILDROOT)のディレクトリ名は各自の 環境に合わせること 準備2 ~make~ • Makefileの編集 – 環境に合わせて下記を編集 • BUILDROOT= • 確認 – make – もし失敗した場合は下記を特にチェック • arm-linux-gcc はあるか? • OpenOBEX はただしく入っているか? • ライブラリパスに x86 用が入っていないか? 準備3 ~ディレクトリ~ • ディレクトリ作成 – upload:他人へ渡すファイル保存用 – download:他人からもらったファイル保存用 • 音楽ファイル保存 – upload ディレクトリに保存しておく 起動方法 • 起動方法 – 共に起動しておく • サーバ: – sdpd – sdptool –channel=1 add OPUSH – file_exchange –s • クライアント: – file_exchange –c 課題手順 • 作業方法 – file_exchange.c を編集する – 送受信部分は実装済み • 改良場所案 – 誰と交換? • 現在は最初に近づいた相手 – どのファイル? • 現在は upload/aaa のファイル – 何回? • 現在は一度のみで終了 関数の概要 • inquiry – Bluetoothデバイスの検索 • syncwait – 処理が終了するまで待機する • connect_client – クライアントがサーバに接続する • put_client – クライアントがサーバにファイルを転送する • connect_client_done – クライアントの処理終了時に呼ばれる • server_done – サーバの処理終了時に呼ばれる • server_request – サーバのリクエスト発生時に呼ばれる • obex_event – OBEXのイベント発生時に呼ばれる • init_obex – OBEXを初期化する • get_myaddr – 自分のBluetoothのIDを取得する • server_do – サーバが接続を待機する • main – メイン関数 注意点 • Server register error! と出力される – OSを再起動すると直ります 交換手順 • gumstixの発見 – 複数gumstixが存在する場合は・・・ • 渡すファイルの選択 OBEXを用いたBluetoothの ファイル送信手順 • • • • デバイス発見 デバイス初期化 接続 ファイル送信 デバイス発見 • デバイス発見:sdp_general_inquiry関数 – sdp_general_inquiry(ii, 20, 8, &count); デバイス初期化 • ハンドラ初期化:OBEX_Init関数 – handle = OBEX_Init(OBEX_TRANS_BLUETOOTH, obex_event, 0); • ハンドラへのコンテキスト設定: OBEX_SetUserData関数 – OBEX_SetUserData(handle, &global_context) 接続 • 接続:BtOBEX_TransportConnect関数 – BtOBEX_TransportConnect(handle, BDADDR_ANY, &bdaddr, channel) • 自分に関する情報を通知 – OBEX_ObjectNew(handle, OBEX_CMD_CONNECT)) – OBEX_ObjectAddHeader(handle, object, OBEX_HDR_WHO, hd, 6,OBEX_FL_FIT_ONE_PACKET) – OBEX_Request(handle, object); OBEXによるファイル送信 • ファイル送信 – オブジェクト生成 • object = OBEX_ObjectNew(handle, OBEX_CMD_PUT); – ファイルサイズを通知 • hd.bq4 = file_size; • OBEX_ObjectAddHeader(handle, object, OBEX_HDR_LENGTH, hd, 4, 0); – ファイル名を通知 • hd.bs = rname; • rname_size = OBEX_CharToUnicode(rname, rname, sizeof(rname)); • OBEX_ObjectAddHeader(handle, object, OBEX_HDR_NAME, hd, rname_size, 0); – ファイルの内容を通知 • hd.bs = buf; • OBEX_ObjectAddHeader(handle, object, OBEX_HDR_BODY, hd, file_size, 0); – 送信 • OBEX_Request(handle, object);
© Copyright 2025 ExpyDoc