Майк Ламберт (mike_lambert) wrote,
Майк Ламберт
mike_lambert

Category:

Однотупочность андроидского синезуба

Я программист. И я привык, что с сетью можно работать асинхронно и в несколько потоков.
Но у гоблинов, которые писали Bluetooth API для Android какое-то другое мнение. Или просто руки из жопы. Я точно не знаю.

Преамбула, значица. В процессе работы над подсистемой Bluetooth в Killswitch было решено слать со стороны приложения пакеты, которые "играют" светодиодом на стороне BLE-брелка. Партнер допилил прошивку, записал видеотуториал, где видно, что у него и пинги ходят, и диод моргает, и все это параллельно. Через специальное приложение для ковыряния в блютус-кишочках с телефона.

И сопцна - фабула.
Беру исходники, пытаюсь туда вкрячить требуемое. Не але. Либо уведомления с пингами не приходят, либо состояние диода не пишется. Начал курить гугл и исходники API. И знатно охуел.
Все вызовы проходят через глобальную защелку, блокирующуюся грубо говоря на уровне доступа к Bluetooth-адаптеру. Ну атомарность и последовательность записи-чтения, хуемае - это понятно.
Но нюанс состоял в том, что если защелка находилась в состоянии заблокированном каким-то потоком, то вызовы других операций молча фэйлились. В лучшем случае возвращали false. retry в цикле ничего не гарантировал. Абсолютно.

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

Почему нельзя было сделать очередь запросов внутри API - я не понимаю. При том, что и диспетчерезующий поток, и блокировка, и коллбэки там уже есть.
Tags: android, killswitch, железо, просифианальное, усрат ахуй
Subscribe

Posts from This Journal “killswitch” Tag

promo mike_lambert june 26, 2017 10:09 9
Buy for 50 tokens
Берем Raspberry Pi. У меня была Model B, вы можете взять Model 2 или Model 3. Берем вайфаер TP-LINK WN-725. Берем sd-карточку минимум на 4 гб, прошиваем туда образ. Подключаем кабель к интернету, подаем питание. Всё. Никаких блокировок, и немножко анонимности - у вас теперь есть точка…
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 12 comments

Posts from This Journal “killswitch” Tag