Man, this stuff is kinda hard when the standards are ill-specified

This commit is contained in:
XANTRONIX Development 2015-07-12 02:28:31 -05:00
parent fac432cdb4
commit 17dd963f97

View file

@ -6,13 +6,13 @@ enum kiss_flags {
KISS_ESCAPE = 0x02
};
int patty_kiss_read(int fd, void *buf, size_t *len, int *channel) {
ssize_t patty_kiss_read(int fd, void *buf, size_t len, int *port) {
int flags = KISS_NONE;
size_t i, b = 0;
*channel = 0;
*port = 0;
for (i=0; i<PATTY_KISS_BUFLEN; i++) {
for (i=0; i<len; i++) {
unsigned char c = ((char *)buf)[i];
if (flags & KISS_FRAME == 0) {
@ -48,13 +48,23 @@ int patty_kiss_read(int fd, void *buf, size_t *len, int *channel) {
break;
}
/*
* Not all KISS TNCs will emit a type byte at the start of a frame
* to the host; if the low nybble has a value of zero, then presume
* the high nybble to be the radio port number from which the
* packet originated.
*/
if (c & 0x0f == 0) {
*port = (c & 0xf0) >> 4;
continue;
}
((char *)buf)[b++] = c;
}
}
*len = b + 1;
return 0;
return b + 1;
error_io:
return -1;