ich einen Freisprech-Modul entwickle, bei dem nach Service-Level-Verbindung abgeschlossen ich sco Verbindung mit Telefon-Audio-Gateway am Einrichten und wie unten Audiodaten empfangen ...Freisprecheinrichtung Gerät nicht in der Lage Audiodaten von sco-Buchse erhält
Hiervoid 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);
}
ist der read_data Faden
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);
}
}
Dieser Code funktioniert gut, wenn ich es auf linux-PC laufen, aber wenn ich auf Armbrett laufen die recv Systemaufruf kehrt errno EAGAIN in Endlosschleife und nie herauskommt . Auf dem PC gibt der recv-Systemaufruf die Anzahl der Bytes korrekt zurück. Was kann möglicherweise zu diesem Problem führen?
Hallo Guo Xingmin, Danke für die Antwort. Laut Ihrem Vorschlag habe ich die PCM-Schnittstelle für Audio überprüft, aber keine Audiodaten. Das Problem war mit dem Bluetooth-Adapter. Ich benutzte einen Broadcom Bluetooth Adapter. Jetzt benutze ich CSR Bluetooth Adapter und bekomme Audiodaten richtig. –
alles klar, viel Glück. scheint CSR wäre besser als BCM, nicht wahr? :-) –