#define CC_NUM_READ 16
-#define CC_BUF 1024
+/*
+ * AltOS has different buffer sizes for in/out packets
+ */
+#define CC_IN_BUF 256
+#define CC_OUT_BUF 64
#define DEFAULT_TTY "/dev/ttyACM0"
struct cc_read {
struct cc_usb {
int fd;
- uint8_t in_buf[CC_BUF];
+ uint8_t in_buf[CC_IN_BUF];
int in_count;
- uint8_t out_buf[CC_BUF];
+ uint8_t out_buf[CC_OUT_BUF];
int out_count;
struct cc_read read_buf[CC_NUM_READ];
int read_count;
uint8_t h, l;
int in_pos;
int read_pos;
-
+
in_pos = 0;
read_pos = 0;
while (read_pos < cc->read_count && in_pos < cc->in_count) {
/*
* Skip to next hex character
*/
- while (in_pos < cc->in_count &&
+ while (in_pos < cc->in_count &&
cc_hex_nibble(cc->in_buf[in_pos]) == NOT_HEX)
in_pos++;
/*
if (--cc->read_buf[read_pos].len <= 0)
read_pos++;
}
-
+
/* Move remaining bytes to the start of the input buffer */
if (in_pos) {
memmove(cc->in_buf, cc->in_buf + in_pos,
else
timeout = 0;
fds.events = 0;
- if (cc->in_count < CC_BUF)
+ if (cc->in_count < CC_IN_BUF)
fds.events |= POLLIN;
if (cc->out_count)
fds.events |= POLLOUT;
}
if (fds.revents & POLLIN) {
ret = read(cc->fd, cc->in_buf + cc->in_count,
- CC_BUF - cc->in_count);
+ CC_IN_BUF - cc->in_count);
if (ret > 0) {
cc_usb_dbg(24, cc->in_buf + cc->in_count, ret);
cc->in_count += ret;
cc_handle_in(cc);
- }
+ } else if (ret < 0)
+ perror("read");
}
if (fds.revents & POLLOUT) {
ret = write(cc->fd, cc->out_buf,
cc->out_buf + ret,
cc->out_count - ret);
cc->out_count -= ret;
- }
+ } else if (ret < 0)
+ perror("write");
}
}
}
char buf[1024], *b;
va_list ap;
int ret, this_time;
-
+
/* sprintf to a local buffer */
va_start(ap, format);
ret = vsnprintf(buf, sizeof(buf), format, ap);
b = buf;
while (ret > 0) {
this_time = ret;
- if (this_time > CC_BUF - cc->out_count)
- this_time = CC_BUF - cc->out_count;
+ if (this_time > CC_OUT_BUF - cc->out_count)
+ this_time = CC_OUT_BUF - cc->out_count;
memcpy(cc->out_buf + cc->out_count, b, this_time);
cc->out_count += this_time;
ret -= this_time;
b += this_time;
- while (cc->out_count >= CC_BUF)
+ while (cc->out_count >= CC_OUT_BUF)
cc_usb_sync(cc);
}
}
{
int this_len;
int ret = len;
-
+
while (len) {
this_len = len;
if (this_len > 8)
{
struct cc_usb *cc;
struct termios termios;
-
+
if (!tty)
tty = DEFAULT_TTY;
cc = calloc (sizeof (struct cc_usb), 1);
close (cc->fd);
free (cc);
}
-