2016-07-28 12 views
0

サービスレベル接続を完了した後、電話のオーディオゲートウェイとの接続を設定し、以下のようにオーディオデータを受信して​​いるハンズフリーモジュールを開発中です...ハンズフリーデバイスがスコープソケットからオーディオを受信できません

ここで
void audio_connection_setup(char *bluetooth_addr) 
{ 
    struct sockaddr_sco addr; 
    pthread_t tid; 
    int scoSock = socket(PF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_SCO); 
    memset(&addr, 0, sizeof(addr)); 
    addr.sco_family = AF_BLUETOOTH; 
    addr.sco_bdaddr = *BDADDR_ANY; 

    if (bind(scoSock, (struct sockaddr *) &addr, sizeof(addr)) < 0) 
    { 
     printf("Can't bind socket: %s (%d)",strerror(errno), errno); 
    } 
    hci_read_voice_setting(scoSock, &voice, 5000); 

    hci_write_voice_setting(scoSock, BT_VOICE_CVSD_16BIT, 5000); 

    str2ba(bluetooth_addr, &addr.sco_bdaddr); 

    if (connect(scoSock, (struct sockaddr *) &addr, sizeof(addr)) < 0) 
    { 
     printf("\nCan't connect: %s (%d)", strerror(errno), errno); 
    } 
    pthread_create(&tid, NULL, &read_data, &scoSock); 
} 

は、私はLinuxのPC上でそれを実行した場合のread_dataスレッド

gBuff[16284]; 
    void* read_data(int *scoSock) 
    { 
     int fd = *scoSock; 
     int len = -1; 
     char buff[48]; 
     int numBytesRead; 

     while (1) 
     { 
      numBytesRead = 0; 
      while(numBytesRead < 16284) 
      { 
       memset(buff, 0x0, 48); 
       len = recv(fd, buff, 48, MSG_DONTWAIT); 
       usleep(10); 
       memcpy(gBuff + numBytesRead, buff + 2, len - 2); 
       numBytesRead = numBytesRead + len - 2; 
      } 
      printf("Number of bytes received = %d errno = %d\n", numBytesRead, errno); 
      memset(gBuff, 0x0, numBytesRead); 
     } 
    } 

このコードは正常に動作しているが、私はアームボード上で実行したときのrecvシステムコールのリターンが連続ループでEAGAINをerrnoをして出てくることはありません。 PCでは、recvシステムコールはバイト数を正しく返します。この問題の原因は何でしょうか?

答えて

0

あなたのコードがPC上で実行されているときに、HCIリンク(HCI経由のHF sco)からオーディオデータを取得してPCドライバに転送することがあると思います。しかし、あなたがボードに切り替えると、ボードのハードウェアのBluetoothインターフェイスが、スーデータを転送するスループットが高いかどうか、そして最も重要なことに、scoデータがPCMインターフェイスにルーティングされたかどうかを確認する必要があるHCIに

+0

こんにちは郭明、返信いただきありがとうございます。あなたの提案によると、私はオーディオ用のPCMインターフェイスをチェックしましたが、オーディオデータを取得できませんでした。問題はBluetoothアダプタで発生していました。私はブロードコムのBluetoothアダプタを使用していました。今私はCSRのBluetoothアダプタを使用して、オーディオデータを正しく取得しています。 –

+0

大丈夫、幸運。 CSRがBCMより優れていると思われます。そうではありません。 :-) –

関連する問題