Tscope5
serialport.c
Go to the documentation of this file.
1 
2 
3 
4 
5 
6 
7 #include "../include/tscope5/serialport.h"
8 #include "../include/tscope5/timer.h"
9 #include "../include/tscope5/serialport_internal.h"
10 #include "../include/tscope5/system_internal.h"
11 
12 
17 
18 
19 
20 
29 {
30  ts5_check_serialport("ts5_define_serialport_trigger_input");
31  int portnum = ts5_check_serialport2("ts5_define_serialport_trigger_input", portname);
32  ts5_log(TS5_LOGLEVEL_3, "ts5_define_serialport_trigger_input(%s)\n", portname);
33 
34  _ts5_status.timer_status.serialport_is_trigger_device = 1;
35  _ts5_status.timer_status.serialport[portnum].is_trigger_input_device = 1;
36  return portnum+1;
37 }
38 
39 
47 void ts5_simulate_serialport_trigger_input(int device, unsigned char value, double interval)
48 {
49  ts5_check_serialport("ts5_simulate_serialport_trigger_input");
50  ts5_log(TS5_LOGLEVEL_3, "ts5_simulate_serialport_trigger_input(%d,%d,%f)\n", device, value, interval);
51 
52  if (device<1 || device>_ts5_status.timer_status.num_serialport) {
53  ts5_fatal("ts5_simulate_serialport_trigger_input: device argument is %d, number of serial ports is %d\n",
54  device, _ts5_status.timer_status.num_serialport);
55  }
56 
57  _ts5_status.timer_status.serialport[device-1].simulate_trigger_input = value;
58  _ts5_status.timer_status.serialport[device-1].trigger_simulation_interval = interval;
59 }
60 
61 
70 {
71  ts5_check_serialport("ts5_define_serialport_trigger_output");
72  int portnum = ts5_check_serialport2("ts5_define_serialport_trigger_output", portname);
73  ts5_log(TS5_LOGLEVEL_3, "ts5_define_serialport_trigger_output(%s)\n", portname);
74 
75  _ts5_status.timer_status.serialport_is_trigger_device = 1;
76  _ts5_status.timer_status.serialport[portnum].is_trigger_output_device = 1;
77  return portnum+1;
78 }
79 
80 
87 void ts5_send_serialport_trigger(int device, unsigned char value)
88 {
89  ts5_check_serialport("ts5_send_serialport_trigger");
90  ts5_log(TS5_LOGLEVEL_3, "ts5_send_serialport_trigger(%d,%d)\n", device, value);
91 
92  if (device<1 || device>_ts5_status.timer_status.num_serialport) {
93  ts5_fatal("ts5_send_serialport_trigger: device argument is %d, number of serial ports is %d\n",
94  device, _ts5_status.timer_status.num_serialport);
95  }
96 
97  char serial_buff[TS5_MAX_CHAR];
98  sprintf(serial_buff, "%c", value);
99 
100  #ifdef ALLEGRO_WINDOWS
101 
102  unsigned long bytes_to_write = strlen(serial_buff);
103  unsigned long bytes_written;
104 
105  if (!WriteFile(*(_ts5_status.timer_status.serialport[device-1].port), serial_buff, bytes_to_write, &bytes_written, NULL)) {
106  ts5_fatal("ts5_send_serialport_trigger: write error 1\n");
107  }
108 
109  if (bytes_written != bytes_to_write) {
110  ts5_fatal("ts5_send_serialport_trigger: write error 2\n");
111  }
112 
113 
114  #else
115 
116  unsigned int bytes_to_write = strlen(serial_buff);
117  unsigned int bytes_written;
118 
119  bytes_written = write(*(_ts5_status.timer_status.serialport[device-1].port), serial_buff, bytes_to_write);
120 
121  if (bytes_written != bytes_to_write) {
122  ts5_fatal("ts5_send_serialport_trigger: write error\n");
123  }
124 
125 
126  #endif
127 }
128 
129 
137 TS5_SERIALPORT* ts5_get_serialport(int device)
138 {
139  ts5_check_serialport("ts5_get_serialport");
140  ts5_log(TS5_LOGLEVEL_3, "ts5_get_serialport(%d)\n", device);
141 
142  if (device < 1 || device>_ts5_status.timer_status.num_serialport) {
143  ts5_fatal("%s: device argument is %d, number of opened serial ports is %d\n", device, _ts5_status.timer_status.num_serialport);
144  }
145 
146  return _ts5_status.timer_status.serialport[device-1].port;
147 }
148 
149 
150 
152 
153