int rcmIfSendPacketSerial(void *pkt, unsigned size) { int i; unsigned short val; // send sync bytes i = serWrite("\xa5\xa5", 2); if (i < 0) return ERR; // send size bytes val = htons(size); i = serWrite(&val, sizeof(val)); if (i < 0) return ERR; // send packet i = serWrite(pkt, size); if (i < 0) return ERR; // send CRC for serial port if (rcmIf == rcmIfSerial) { val = crc16(pkt, size); val = htons(val); if (serWrite(&val, sizeof(val)) < 0) return ERR; } return OK; }
void_t vt_raw(virtualtouch_s* vt) { dbg_function(); if ( vt->eamflags & VT_EAMF_TIME ) { sensor_s m; uint_t alpha = mm_alpha(vt->countalpha); uint_t ahpla = 1000 - mm_alpha(vt->countalpha); serWrite(vt, PROTO_READ); m.sx = serRead16(vt); m.dx = serRead16(vt); m.up = serRead16(vt); m.dw = serRead16(vt); vt->time.dx = (alpha * m.dx + ahpla * vt->time.dx)/1000; vt->time.dw = (alpha * m.dw + ahpla * vt->time.dw)/1000; vt->time.sx = (alpha * m.sx + ahpla * vt->time.sx)/1000; vt->time.up = (alpha * m.up + ahpla * vt->time.up)/1000; } else { serWrite(vt, PROTO_READ); vt->time.sx = serRead16(vt); vt->time.dx = serRead16(vt); vt->time.up = serRead16(vt); vt->time.dw = serRead16(vt); } dbg_info("time: sx(%5u) dx(%5u) up(%5u) dw(%5u)", vt->time.sx, vt->time.dx, vt->time.up, vt->time.dw); dbg_return(0); }
int serWriteLine (int fd, int flags, const char *line) { char buf[256]; int written=0; written = serWrite (fd, strlen(line), (const uint8_t *) line); if (written > 0 && (flags & 1)) serReadLine(fd, sizeof(buf), buf); return written; }
int serWriteChar (int fd, const uint8_t c) { return serWrite (fd, 1, &c); }