Драйвер для графического планшета на C#, нужна помощь / C# :: geek porn :: программирование :: графический планшет :: личное :: нужна помощь :: программа :: сделал сам (нарисовал сам, сфоткал сам, написал сам, придумал сам, перевел сам)

C# сделал сам программирование программа geek porn нужна помощь личное графический планшет удалённое 

Драйвер для графического планшета на C#, нужна помощь

Всем доброго дня. Решил я пару дней назад оживить вот такой старый и вполне рабочий графический планшет. Ребенку поиграться вполне сойдет.

C#,сделал сам,нарисовал сам, сфоткал сам, написал сам, придумал сам, перевел сам,программирование,программа,geek porn,нужна помощь,личное,графический планшет,удалённое

Проблема в нем в том, что драйвера существуют только под Windows 98. С горем пополам они иногда (почти никогда) работают в некоторых сборках Windows XP. Причем в x64 работает все, кроме настроек планшета, в х32 работают настройки и передвижение курсора, но нажатие на любую из кнопок приводит к синему экрану. 

На мой комп Win XP не ставится в принципе, вылетает на этапе установки. 98 - ваще не вариант=)

В общем после пары минут размышлений я пришел к выводу, что планшет должен иметь крайне простой протокол и написать программу которая будет получать с него координаты будет не сложно.


Благодаря сниферу СОМ порта вычислил, что протокол передачи данных довольно прост:

Планшет отправляет непрерывный поток данных без разделителей порциями по 5 байт. 

data0 data1 data2 data3 data4
Старшая часть координаты Х Младшая часть координаты У Старшая часть координаты У принимает значения: 
0x3f кнопка не нажата
0x40 нажата кнопка 1
0x41 нажата кнопка 2
0x42 нажата кнопки 1 и 2
Младшая часть координаты Х
Координаты:

Х=data0+data4*128

Y=data1+data2*128



Forml
- □
C0M1	V
Poit: COM1 Speed: 9600 Pairy: None Data Bits: 8 Stop Bits: One
Handshake: RequestToSend DtrEnable: Tnje
Hardware Y=802 Hardware X=1543
12	34	6	63	7
C	22	6	3F	7
?	•f	-	?	•,C#,сделал сам,нарисовал сам, сфоткал сам, написал сам, придумал сам, перевел

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

Но...

data3 в моей программе всегда равно 0x3f, при этом сниффер перехватывающий данные которые идут к моей программе от планшета показывает и другие значения, если нажму кнопку.  Free serial monitor с такими же параметрами тоже видит data3=0x40, 0x41,0x42...  

Внимание вопрос, что за хрень???

Подключение к порту делаю так:

SerialPort _serialPort = new SerialPort();

_serialPort.PortName = "COM1";

_serialPort.BaudRate = 9600;

_serialPort.DataBits = 8;

_serialPort.Handshake = (Handshake)Enum.Parse(typeof(Handshake), "RequestToSend", true);

_serialPort.DtrEnable = true;

_serialPort.DataReceived += SerialPortDataReceived;

OpenSerialPort();


Получение данных - так:

 private void SerialPortDataReceived(object sender, SerialDataReceivedEventArgs e)

        {

           

            var serialPort = (SerialPort)sender;

            var data = serialPort.ReadExisting();

//далее поиск в data как в массиве int кодов кнопок и координат.

}







Подробнее

Forml - □ C0M1 V Poit: COM1 Speed: 9600 Pairy: None Data Bits: 8 Stop Bits: One Handshake: RequestToSend DtrEnable: Tnje Hardware Y=802 Hardware X=1543 12 34 6 63 7 C 22 6 3F 7 ? •f - ? •
C#,сделал сам,нарисовал сам, сфоткал сам, написал сам, придумал сам, перевел сам,программирование,программа,geek porn,нужна помощь,личное,графический планшет,удалённое
Еще на тему
Развернуть
serialport неправильно настроен? (bitrate, parity, data bits, stop bits, flow control)?
takezi takezi 22.11.201517:51 ответить ссылка 0.1
Пробовал, даже на ходу менял все возможные комбинации указанных параметров. Благо оно на горячую меняется. Только при bitrate 9600, pairy = none, databits=8, control= RequestToSend. Только так я получаю повторяемые данные. Нажатие на кнопку при таких параметрах всегда дает один и тот же код. Потом подвигал, снова нажал на кнопку, снова тот же код. ПРи других параметрах - рандомный мусор.
Размер буфера (SerialPort.ReadBufferSize) не вмещает данные мб?
takezi takezi 22.11.201518:45 ответить ссылка 0.0
Размер буфера 2048 а данные порциями по 5 байт идут. Получается несколько сотен порций за раз. Хоть бы иногда срабатывать должно, а так за несколько минут ни разу.
Вопрос снят, написал прогу на Delphi7 он нормально при тех же параметрах порта на том же API читает.
zerabot zerabot 22.11.201518:27 ответить ссылка 0.0
Только зарегистрированные и активированные пользователи могут добавлять комментарии.
Похожие темы

Похожие посты