SSブログ

SCO sample application [VGC-RM95S]

家族のスマホでデバイスチェンジの試験をやってみた。アプリケーション側は以下のシーケンスで問題ないようだ。

=======================================
/* SCO device open */
hDevice = CreateFile(deviceInterfaceDetailData->DevicePath, ...);

/* RFCOMM socket open */
m_socketClient = socket (AF_BT, SOCK_STREAM, BTHPROTO_RFCOMM);

sa.addressFamily = AF_BT;   
sa.serviceClassId=ServerGuid;
sa.btAddr=m_saClient.btAddr;
sa.port = SDPGetPort(btaddr, (LPGUID) &ServerGuid);

// SCO server accept address setting
DeviceIoControl(hDevice, &address, ...);

// RFCOMM client connect
connect (m_socketClient, (SOCKADDR *)&sa, sizeof(sa));

========================================

IoControl の SCO ドライバ内部では、デバイスチェンジの時に、以下のような Unregister と Register で接続要求を受け付けるアドレスを変更する。

DevCtx = GetServerDeviceContext(WdfIoQueueGetDevice(Queue));
BthSrvUnregisterScoServer(DevCtx);

BthSrvRegisterScoServer(DevCtx);

L2CAP のサンプルどおりだと起動時に ADDRESS_ANY で Register するようになっているが、SCO ではエラーになるので target_address = 0xffffffffffff; をダミーで登録するようにしてみた。

brb->BtAddress = target_address;

ドライバ内部は、本当に細かな操作が必要になってくる。ちょっと気を抜くと BSOD となってしまう。


nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

トラックバック 0

PAGE_FAULT_IN_NONPAG..selfsign_example.cmd ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。