Как передать музыку на bluetooth колонку с linux-устройства, используя средства C/C++?

Есть задача написать управление блютуз-колонкой под линукс(raspberry pi). Колонка должна проигрывать музыку и по команде с монитора переключать её. Изучив вопрос, пришел к следующему порядку действий:

  1. Нужно по шестибайтному адресу найти нужное устройство
  2. Запросить у устройства службы и характеристики
  3. Произвести запись в соответствующую службу по её uuid

(Основные источники тут и тут, хотя конечно отсмотрел я куда больше материала и по другим источникам). Естественно я так же посмотрел как это устроено в linux (тут и тут).

Немного изучив вопрос пришел к выводу, что делать всё с нуля будет слишком долго и нашел несколько готовых библиотек(как пример эта или эта).

Используя эти библиотеки, без всяких проблем мне удалось пройти по первым двум пунктам, а вот с третьим возникает проблема. Из того что я вижу, обе данные библиотеки предлагают побайтовую запись в службы.

// SimpleBle

int main() {
    auto adapter_optional = Utils::getAdapter();

    if (!adapter_optional.has_value()) {
        return EXIT_FAILURE;
    }

    auto adapter = adapter_optional.value();

    std::vector<SimpleBLE::Peripheral> peripherals;

....

 std::string contents;
    std::cout << "Please write the contents to be sent: ";
    std::cin >> contents;

    if (!selection.has_value()) {
        return EXIT_FAILURE;
    }

    peripheral.write_request(uuids[selection.value()].first,  uuids[selection.value()].second, contents);

    peripheral.disconnect();
    return EXIT_SUCCESS;
}
// blinc

void binc_characteristic_write(Characteristic *characteristic, const GByteArray *byteArray, WriteType writeType);

Значит ли это, что необходимо вначале скопировать весь аудиофайл в массив байтов? Если да, то каким образом это лучше сделать? Как обычно делают подобные приложения? Может быть я всё усложняю или не понял чего-то и мне следует что-то ещё почитать, в таком случае, пожалуйста укажите в каком направлении двигаться.


Ответы (0 шт):