18 #include "../include/tscope5/parport.h"
19 #include "../include/tscope5/timer.h"
20 #include "../include/tscope5/parport_internal.h"
21 #include "../include/tscope5/system_internal.h"
26 typedef short (_stdcall *inbptr)(
short portaddr);
27 typedef short (_stdcall *outbptr)(
short portaddr,
short value);
31 #elif defined TS5_LINUX
60 ts5_log(TS5_LOGLEVEL_3,
"ts5_define_parport_button(%d,%d)\n", device, button);
62 if (device<1 || device>_ts5_status.timer.num_parports) {
63 ts5_fatal(
"%s: %s %d %s %d\n",
"ts5_define_parport_button",
64 "device argument is", device,
65 "number of parallel ports is",
66 _ts5_status.timer.num_parports);
69 if (_ts5_status.timer.parport[device-1].is_trigger_input_device) {
70 ts5_fatal(
"%s: %s %d %s\n",
"ts5_define_parport_button",
71 "parallel port", device,
72 "is already defined as a trigger input device");
75 if (_ts5_status.timer.parport[device-1].is_trigger_output_device) {
76 ts5_fatal(
"%s: %s %d %s\n",
"ts5_define_parport_button",
77 "parallel port", device,
78 "is already defined as a trigger output device");
82 ts5_fatal(
"%s: %s\n",
"ts5_define_parport_button",
83 "button argument is 0, response buttons are numbered from 1");
86 if (abs(button)>_ts5_status.timer.parport[device-1].num_buttons) {
87 ts5_fatal(
"%s: %s %d, %s %d is %d\n",
"ts5_define_parport_button",
88 "button argument is", button,
89 "number of parport buttons for device", device,
90 _ts5_status.timer.parport[device-1].num_buttons);
93 if (button>0 && _ts5_status.timer.parport[device-1]
94 .button_press_defined[button-1]!=0) {
95 ts5_fatal(
"%s: %s %d %s\n",
"ts5_define_parport_button",
96 "button press", button,
"is already defined");
99 if (button<0 && _ts5_status.timer.parport[device-1]
100 .button_release_defined[-button-1]!=0) {
101 ts5_fatal(
"%s: %s %d %s\n",
"ts5_define_parport_button",
102 "button release", button,
"is already defined");
105 _ts5_status.timer.parport_is_response_device = 1;
106 _ts5_status.timer.num_defined_buttons++;
107 _ts5_status.timer.num_active_buttons++;
108 _ts5_status.timer.parport[device-1].num_defined_buttons++;
109 _ts5_status.timer.parport[device-1].num_active_buttons++;
112 _ts5_status.timer.parport[device-1]
113 .button_press_defined[button-1] =
114 _ts5_status.timer.num_defined_buttons;
116 _ts5_status.timer.parport[device-1]
117 .button_press_active[button-1] =
118 _ts5_status.timer.num_defined_buttons;
121 _ts5_status.timer.parport[device-1]
122 .button_release_defined[-button-1] =
123 _ts5_status.timer.num_defined_buttons;
125 _ts5_status.timer.parport[device-1]
126 .button_release_active[-button-1] =
127 _ts5_status.timer.num_defined_buttons;
130 return _ts5_status.timer.num_defined_buttons;
142 ts5_log(TS5_LOGLEVEL_4,
"ts5_get_num_parports()\n");
144 return _ts5_status.timer.num_parports;
158 ts5_log(TS5_LOGLEVEL_4,
"ts5_get_num_parport_buttons(%d)\n", device);
160 return _ts5_status.timer.parport[device-1].num_buttons;
189 double button_debounce_time)
192 ts5_log(TS5_LOGLEVEL_4,
"ts5_set_parport_button_debounce_time(%d,%f)\n",
193 device, button_debounce_time);
195 if (device<1 || device>_ts5_status.timer.num_parports) {
196 ts5_fatal(
"%s: %s %d %s %d\n",
"ts5_set_parport_button_debounce_time",
197 "device argument is", device,
198 "number of parallel ports is",
199 _ts5_status.timer.num_parports);
202 if (button_debounce_time < 0.0) {
203 ts5_fatal(
"%s: %s (is %f)\n",
"ts5_set_parport_button_debounce_time",
204 "debounce time should be positive", button_debounce_time);
208 _ts5_status.timer.parport[device-1].button_debounce_time;
210 _ts5_status.timer.parport[device-1].button_debounce_time =
211 button_debounce_time;
213 ts5_log(TS5_LOGLEVEL_4,
"%s: %s %d to %f (was %f)\n",
214 "ts5_set_parport_button_debounce_time",
215 "set debounce time of device",
217 _ts5_status.timer.parport[device-1].button_debounce_time,
234 ts5_log(TS5_LOGLEVEL_4,
"ts5_get_parport_button_debounce_time(%d)\n",
237 if (device<1 || device>_ts5_status.timer.num_parports) {
238 ts5_fatal(
"%s: %s %d %s %d\n",
"ts5_get_parport_button_debounce_time",
239 "device argument is", device,
240 "number of parallel ports is",
241 _ts5_status.timer.num_parports);
245 return _ts5_status.timer.parport[device-1].button_debounce_time;
270 ts5_log(TS5_LOGLEVEL_3,
"ts5_define_parport_trigger_input(%d)\n", device);
272 if (device<1 || device>_ts5_status.timer.num_parports) {
273 ts5_fatal(
"%s: %s %d %s %d\n",
"ts5_define_parport_trigger_input",
274 "device argument is", device,
275 "number of parallel ports is",
276 _ts5_status.timer.num_parports);
295 ts5_log(TS5_LOGLEVEL_3,
"ts5_simulate_parport_trigger_input(%d,%d,%f)\n",
296 device, value, interval);
298 if (device<1 || device>_ts5_status.timer.num_parports) {
299 ts5_fatal(
"%s: %s %d %s %d\n",
"ts5_simulate_parport_trigger_input",
300 "device argument is", device,
301 "number of parallel ports is",
302 _ts5_status.timer.num_parports);
305 _ts5_status.timer.parport[device-1].simulate_trigger_input =
308 _ts5_status.timer.parport[device-1].trigger_simulation_interval =
324 double trigger_debounce_time)
327 ts5_log(TS5_LOGLEVEL_4,
"ts5_set_parport_trigger_debounce_time(%d,%f)\n",
328 device, trigger_debounce_time);
330 if (device<1 || device>_ts5_status.timer.num_parports) {
331 ts5_fatal(
"%s: %s %d %s %d\n",
"ts5_set_parport_trigger_debounce_time",
332 "device argument is", device,
333 "number of parallel ports is",
334 _ts5_status.timer.num_parports);
337 if (trigger_debounce_time < 0.0) {
338 ts5_fatal(
"%s: %s (is %f)\n",
"ts5_set_parport_trigger_debounce_time",
339 "debounce time should be positive", trigger_debounce_time);
342 double retval = _ts5_status.timer.parport[device-1]
343 .trigger_debounce_time;
345 _ts5_status.timer.parport[device-1].trigger_debounce_time =
346 trigger_debounce_time;
348 ts5_log(TS5_LOGLEVEL_4,
"%s: %s %d to %f (was %f)\n",
349 "ts5_set_parport_trigger_debounce_time",
350 "set debounce time of device",
351 device, _ts5_status.timer.parport[device-1]
352 .trigger_debounce_time, retval);
368 ts5_log(TS5_LOGLEVEL_4,
"ts5_get_parport_trigger_debounce_time(%d)\n",
371 if (device<1 || device>_ts5_status.timer.num_parports) {
372 ts5_fatal(
"%s: %s %d %s %d\n",
"ts5_get_parport_trigger_debounce_time",
373 "device argument is", device,
374 "number of parallel ports is",
375 _ts5_status.timer.num_parports);
378 return _ts5_status.timer.parport[device-1].trigger_debounce_time;
391 ts5_log(TS5_LOGLEVEL_3,
"ts5_send_parport_trigger(%d,%d)\n", device, value);
393 if (device<1 || device>_ts5_status.timer.num_parports) {
394 ts5_fatal(
"%s: %s %d %s %d\n",
"ts5_send_parport_trigger",
395 "device argument is", device,
396 "number of parallel ports is",
397 _ts5_status.timer.num_parports);
403 short data_register[] = {TS5_PARPORT_1_DATA,
410 outb((
short)data_register[device-1], value);
412 ts5_wait(_ts5_status.timer.parport[device-1]
413 .trigger_output_time);
415 outb((
short)data_register[device-1], 0);
417 #elif defined TS5_LINUX
418 outb(value, (
short)data_register[device-1]);
420 ts5_wait(_ts5_status.timer.parport[device-1]
421 .trigger_output_time);
423 outb(0, (
short)data_register[device-1]);
440 double trigger_output_time)
443 ts5_log(TS5_LOGLEVEL_4,
"ts5_set_parport_trigger_output_time(%d,%f)\n",
444 device, trigger_output_time);
446 if (device<1 || device>_ts5_status.timer.num_parports) {
447 ts5_fatal(
"%s: %s %d %s %d\n",
"ts5_set_parport_trigger_output_time",
448 "device argument is", device,
449 "number of parallel ports is",
450 _ts5_status.timer.num_parports);
453 if (trigger_output_time < 0.0) {
454 ts5_fatal(
"%s: %s (is %f)\n",
"ts5_set_parport_trigger_output_time",
455 "output time should be positive", trigger_output_time);
458 double retval = _ts5_status.timer.parport[device-1]
459 .trigger_output_time;
461 _ts5_status.timer.parport[device-1].trigger_output_time =
464 ts5_log(TS5_LOGLEVEL_4,
"%s: %s %d to %f (was %f)\n",
465 "ts5_set_parport_trigger_output_time",
466 "set output time of device", device,
467 _ts5_status.timer.parport[device-1].trigger_output_time,
484 ts5_log(TS5_LOGLEVEL_4,
"ts5_get_parport_trigger_output_time(%d)\n",
487 if (device<1 || device>_ts5_status.timer.num_parports) {
488 ts5_fatal(
"%s: %s %d %s %d\n",
"ts5_get_parport_trigger_output_time",
489 "device argument is", device,
490 "number of parallel ports is",
491 _ts5_status.timer.num_parports);
494 return _ts5_status.timer.parport[device-1].trigger_output_time;