Организовать что-то типа пакетного обмена с фиксированной длиной пакета -самое безгеморройное в реализации. Несколько полей в пакете выделить под команду, флаги, контрольную сумму. Остальное - данные... Принял пакет, выгреб его из буфера, обработал запрос, ответил пакетом. Данные с дивайса можно слать вообще асинхронно...