Как я могу отправить больше байтов с помощью Bluez L2CAP? - PullRequest
0 голосов
/ 16 июня 2020

У меня есть следующий код, который подключается к другой машине с помощью BlueZ и отправляет пакеты:

struct sockaddr_l2 addr = { 0 };
    int s, status;
    char dest[18] = "DC:FB:48:6B:BF:0B";

    int socket1;

    int32_t value = 0;

    // allocate a socket
    socket1 = socket(AF_BLUETOOTH, SOCK_SEQPACKET, BTPROTO_L2CAP);


    // set the connection parameters (who to connect to)
    addr.l2_family = AF_BLUETOOTH;
    addr.l2_psm = htobs(0x1001);

    str2ba( dest, &addr.l2_bdaddr );
    status = connect(socket1, (struct sockaddr *)&addr, sizeof(addr));
    while( status != 0)
    {
        status = connect(socket1, (struct sockaddr *)&addr, sizeof(addr));
        std::cout << "Waiting for DC:FB:48:6B:BF:0B" << std::endl;
        sleep(2);
    }

    while (true)
    {
        double data[512] = {0.0};
        memset(data, 0, 512);
        status = write(socket1, data, 512);
     }

Как вы видите, я просто отправляю 512 байт, и другая машина их считывает нормально. Однако, когда я пытаюсь увеличить до 1000 байтов, другая машина больше не может принимать байты и просто ничего не делает.

Как я могу отправить больше байтов в этом случае? Я использую Linux CentOS 8.

1 Ответ

0 голосов
/ 16 июня 2020

По умолчанию максимальная скорость передачи L2CAP составляет 672 байта. Я бы порекомендовал вам попробовать установить максимальную единицу передачи на ваше требуемое значение.

Посмотрите «4.3.1 Максимальная единица передачи» здесь .

...