Начну с того, что развиваю два андроид приложения ps402d (служба печати) и виртуальный принтер (
https://play.google.com/store/apps/details?id=ru.a...). Глубоко это в теме или нет решать Вам.
Сетевые принтеры можно разделить на те, что с IPP и более простые 9100. ( остальные варианты можно отбросить)
через директ можете считать, что статус узнать нельзя. Как вы пишите, тут нужен двух сторонний обмен данными, но вот формат такого ответа не стандартизирован. Может как один так и 3 байта. И другие придумки вендоров.
А вот IPP вещь приятная и задокументированная по RFC.
Теперь на счет оперативности статусов. Не дергают принтеры постоянно !!!!
Первый уровень пассивное прослушивание mDNS. При необходимости явный запрос сетевого ресолва запомненного ранее использованного принтера.
Из днс ответа делаются два вывода : принтер онлайн / принтер офллайн.
Следующий уровень.
Пользователь определился на какой принтер будет печатать. Можно тут уже запустить паралельный тред с опросом состояния принтера (трекинг). Из такого ответа уже получается полноценный статус принтера:
простаиваю печатаю, кончается тонер, открыта крышка, подавился бумагой.
Но такое постоянное замучивание принтера имхо излишне.
Часто перед самой печатью, принтеру посылается команда "проверь задание" (Validate-job).
Но опять же по моему, тут хватило бы просто запросить статус принтера (один раз вместо постояного потока)
Отсылается задание на печать.
Дальше логичнее трекать его состояние работы, но можно и через смену состояний принтера. (занят - простой)
На этом статусы принтера спулеру печати больше не интересны.
Пойманую ошибку автоматом ресетить тоже нет никакого резона, ее наоборот надо пользователю показать.