19 #define snprintf _snprintf 49 unsigned char sum = 0x00;
52 for (i = 0; i < size; ++i) {
57 return (sum & 0x3f) + 0x30;
70 const int expected_ret[],
int timeout,
71 char *receive_buffer,
int receive_buffer_max_size)
73 char *p = receive_buffer;
79 int write_size = (int)strlen(command);
82 if (n != write_size) {
95 }
else if (p && (line_number > 0)
96 && (n < (receive_buffer_max_size - filled_size))) {
104 if (line_number == 0) {
106 if (strncmp(buffer, command, write_size - 1)) {
111 char checksum = buffer[n - 1];
119 if (line_number == 1) {
129 int actual_ret = strtol(buffer, NULL, 10);
131 if (expected_ret[i] == actual_ret) {
142 return (ret < 0) ? ret : (line_number - 1);
178 long current_baudrate,
long next_baudrate)
180 enum { SS_COMMAND_SIZE = 10 };
181 char buffer[SS_COMMAND_SIZE];
185 if (current_baudrate == next_baudrate) {
191 snprintf(buffer, SS_COMMAND_SIZE,
"SS%06ld\n", next_baudrate);
215 long try_baudrate[] = { 19200, 38400, 115200 };
216 int try_times =
sizeof(try_baudrate) /
sizeof(try_baudrate[0]);
220 for (i = 0; i < try_times; ++i) {
221 if (try_baudrate[i] == baudrate) {
222 try_baudrate[i] = try_baudrate[0];
223 try_baudrate[0] = baudrate;
228 for (i = 0; i < try_times; ++i) {
229 enum { RECEIVE_BUFFER_SIZE = 4 };
231 char receive_buffer[RECEIVE_BUFFER_SIZE + 1];
238 receive_buffer, RECEIVE_BUFFER_SIZE);
240 if (!strcmp(receive_buffer,
"E")) {
256 }
else if (!strcmp(receive_buffer,
"0Ee")) {
282 }
else if (!strcmp(
"00P", receive_buffer)) {
297 char receive_buffer[RECEIVE_BUFFER_SIZE];
299 unsigned short received_bits = 0x0000;
304 receive_buffer, RECEIVE_BUFFER_SIZE);
313 for (i = 0; i < (ret - 1); ++i) {
315 if (!strncmp(p,
"DMIN:", 5)) {
317 received_bits |= 0x0001;
319 }
else if (!strncmp(p,
"DMAX:", 5)) {
321 received_bits |= 0x0002;
323 }
else if (!strncmp(p,
"ARES:", 5)) {
325 received_bits |= 0x0004;
327 }
else if (!strncmp(p,
"AMIN:", 5)) {
329 received_bits |= 0x0008;
331 }
else if (!strncmp(p,
"AMAX:", 5)) {
333 received_bits |= 0x0010;
335 }
else if (!strncmp(p,
"AFRT:", 5)) {
337 received_bits |= 0x0020;
339 }
else if (!strncmp(p,
"SCAN:", 5)) {
340 int rpm = strtol(p + 5, NULL, 10);
344 received_bits |= 0x0040;
350 if (received_bits != 0x007f) {
366 const char* p = data;
367 const char* last_p = p + size;
373 value |= *p++ - 0x30;
383 memcpy(buffer, parameter, size);
386 return strtol(buffer, NULL, 10);
391 const char echoback[])
396 if (echoback[1] ==
'S') {
400 }
else if (echoback[1] ==
'D') {
401 if ((echoback[0] ==
'G') || (echoback[0] ==
'M')) {
403 }
else if ((echoback[0] ==
'H') || (echoback[0] ==
'N')) {
406 }
else if (echoback[1] ==
'E') {
407 if ((echoback[0] ==
'G') || (echoback[0] ==
'M')) {
409 }
else if ((echoback[0] ==
'H') || (echoback[0] ==
'N')) {
426 const char echoback[])
431 if (!strcmp(
"QT", echoback)) {
435 line_length = strlen(echoback);
436 if ((line_length == 12) &&
437 ((echoback[0] ==
'G') || (echoback[0] ==
'H'))) {
440 }
else if ((line_length == 15) &&
441 ((echoback[0] ==
'M') || (echoback[0] ==
'N'))) {
449 unsigned short intensity[],
455 int multiecho_index = 0;
459 int data_size = each_size;
462 int multiecho_max_size = 1;
483 if (buffer[line_filled + n - 1] !=
491 line_filled += n - 1;
493 last_p = p + line_filled;
495 while ((last_p - p) >= data_size) {
501 if ((last_p - (p + 1)) < data_size) {
516 index = (step_filled * multiecho_max_size) + multiecho_index;
526 if (is_multiecho && (multiecho_index == 0)) {
530 for (i = 1; i < multiecho_max_size; ++i) {
531 length[index + i] = 0;
535 for (i = 1; i < multiecho_max_size; ++i) {
536 intensity[index + i] = 0;
556 line_filled -= data_size;
560 memmove(buffer, p, line_filled);
569 long *time_stamp,
unsigned long long *system_time_stamp)
575 int extended_timeout = urg->
timeout 613 if (!strncmp(buffer,
"00", 2)) {
623 return receive_data(urg, data, intensity, time_stamp, system_time_stamp);
649 if (system_time_stamp) {
685 const char *device_or_address,
long baudrate_or_port)
688 long baudrate = baudrate_or_port;
699 device_or_address, baudrate_or_port);
702 switch (connection_type) {
798 if (strcmp(buffer,
"00P")) {
803 if (strlen(p) != 5) {