Как нелинейно изменять координаты передаваемые в ОС от конкретного устройства?
Здравствуйте, работаем над одним проектом, суть которого, в контексте данного вопрос не важна, но важно, что в этом проекте задействована работа с сенсорной панелью. И именно по вопросу взаимодействия с ней мы зашли в тупик.
Постановка задачи примерно следующая: перехват конкретной мыши (в нашем случае сенсорная панель, которая определяется, как мышь) в ОС для нелинейного изменения передаваемых в ОС координат, т.е. реализации функции калибровки искаженного изображения. При этом, важно, чтобы другие устройства, в частности, мышь, должны работать в обычном режиме.
Пробовали копать в сторону 33 прерывания - всё что нашли несколько устарело и подходит скорее для изменения передаваемых координат, но не для идентификации нужного нам устройства (сенсорной панели), да и только под DOS. По крайней мере, насколько мы это смогли понять, возможно это и ошибочное мнение, поправьте, если это так.
Желательно обойтись без совсем низкоуровневого программирования, но если его не избежать (что мы предполагаем), то подойдёт и пути через эти дебри.
Очень бы хотелось бы получить хотя бы какие-то хлебные крошки - в какую сторону копать, так как на данный момент не осталось совсем никаких мыслей.
Будем очень благодарны :)
UPD1: Проект заточен под семейства Window (начиная с 7) и Unix системы, в перспективе - Android. Но пока что идёт разработка под Windows и в тупик забрели именно там. Но за помощь с вектором движения на них (Unix и Android) тоже будем благодарны, так как, подозреваю, там некоторые проблемы будут схожи.
UPD2: Необходимость имеется именно в изменении координат, при работе с с нашей программой, но если они будут в пределах всей системы - это не критично.
Проект заточен под семейства Window (начиная с 7) и Unix системы, в перспективе - Android. Но пока что идёт разработка под Windows и в тупик забрели именно там. Но за помощь с вектором движения на них (Unix и Android) тоже будем благодарны, так как, подозреваю, там некоторые проблемы будут схожи.
Необходимость имеется именно в изменении координат, при работе с с нашей программой, но если они будут в пределах всей системы - это не критично.
Aleksiares, если в пределах вашей программы - это же элементарно.
Перехватываете событие мышинное непосредственно поступающее от API.
Модифицируйте, согласно таблице "калибровки" (или по формули или еще так как вам нужно) и отправляете дальше на обработку вашим фреймворком или что там у вас.
abmanimenja, но разве при таком варианте возможно идентифицировать конкретное устройство и применять эти изменения только при поступления координат от него, пропуская мимо обработчика другие устройства?
Что-то мне подсказывает, что вы запрягаете реализацию впереди концепции, что всегда чревато абсолютно лишними проблемами. https://www.thingsconnected.io/raspberry-pi-7-inch... - вот тут описан процесс калибровки сенсорного экрана под raspberry pi. Исходники всех утилит - доступны, если вам действительно нужно решить задачу именно так (в чём я глубоко сомневаюсь, потому что если у тачскрина нелинейные искажения, его не калибровать, а выбрасывать нужно), то разбирайтесь в принципе работы всей этой связки.
Калибровка в любой ОС делается на уровне драйвера. Если, конечно, вы не хотите вообще в обход функционала ОС работать...
Придётся написать свой драйвер для сенсорной панели, и заменить этим драйвером стандартный. Причём умудриться так, чтобы мышь продолжала использовать стандартный драйвер. Т.е. нелинейность должна считаться именно в драйвере, до того, как сформируется событие движения курсора. Потому что позже вы уже не отличите свою панель от мыши.
Это как раз программирование на довольно низком уровне.