【发布时间】:2020-12-08 14:44:47
【问题描述】:
我在 Ada 中有一个从触摸屏输入读取的程序。代码很旧,我没有触摸屏了。我想用鼠标输入来代替触摸屏代码。用 C 语言编写函数并将其导入 Ada 代码会更简单吗?下面的代码是触摸屏代码。
HIL_NAME : STRING (1.. 10) := "/dev/touch";
procedure READ (X, Y : out INTEGER) is
type BYTE is new INTEGER range 0 .. 255;
for BYTE'SIZE use 8;
package IN_IO is new SEQUENTIAL_IO (BYTE);
use IN_IO;
type DATA_TYPE is array (2 .. 9) of BYTE;
HIL_FILE : IN_IO.FILE_TYPE;
COUNT : BYTE;
DATA : DATA_TYPE;
begin
IN_IO.OPEN (HIL_FILE, IN_FILE, HIL_NAME); -- open the touchscreen
loop
IN_IO.READ (HIL_FILE, COUNT); -- read the incoming record size
-- read the incoming record
for I in INTEGER range 2 .. BYTE'POS (COUNT) loop
IN_IO.READ (HIL_FILE, DATA (I));
end loop;
-- is this a fingerdown? overkill test.
if ((COUNT = 9) and (DATA (6) = 2#01000010#) and (DATA (9) = 142)) then
X := BYTE'POS (DATA (7)); -- pick out coordinates
Y := BYTE'POS (DATA (8));
IN_IO.CLOSE (HIL_FILE); -- close touchscreen to flush buffer
return; -- return to caller
end if;
end loop;
end READ;
【问题讨论】:
-
我认为关键部分是了解如何将触摸屏数据编码到文件中(名称包含在 HIL_NAME 字符串中)——这是一种非常不寻常的方法!用 C 编写函数无济于事......
-
@Zerte 我认为您可以从分配到 X 和 Y(READ 的输出)进行逆向工程,并使用左键作为“手指向下”测试。
-
我猜,下一个问题是要知道最终的
"/dev/mouse"(而不是"/dev/touch")是如何工作的。