Damn Xan, you code like a BEAST O:)

This commit is contained in:
XANTRONIX Development 2015-07-14 16:45:03 +00:00
parent 4f4a898819
commit 7709abbc1c
5 changed files with 145 additions and 7 deletions

5
Makefile Normal file
View file

@ -0,0 +1,5 @@
all:
$(MAKE) -C src all
clean:
$(MAKE) -C src clean

95
configure vendored Executable file
View file

@ -0,0 +1,95 @@
#! /bin/sh
OS=`uname -s`
PREFIX=/usr/local
DEBUG=0
create_linux_config_h() {
cat <<EOF > src/config.h
#ifndef _CONFIG_H
#define _CONFIG_H
#include <endian.h>
#define PATTY_INSTALL_PREFIX "$PREFIX"
#endif /* _CONFIG_H */
EOF
}
create_darwin_config_h() {
cat <<EOF > src/config.h
#ifndef _CONFIG_H
#define _CONFIG_H
#include <architecture/byte_order.h>
#ifdef __LITTLE_ENDIAN__
#define __DO_SWAP_BYTES
#endif /* _DO_SWAP_BYTES */
#define PATTY_INSTALL_PREFIX "$PREFIX"
#endif /* _CONFIG_H */
EOF
}
create_common_build_mk() {
if [ "$DEBUG" = 1 ]; then
cat <<EOF > mk/build.mk
PREFIX = $PREFIX
CGFLAGS = -g -fno-inline
EOF
else
cat <<EOF > mk/build.mk
PREFIX = $PREFIX
CGFLAGS =
EOF
fi
}
create_linux_build_mk() {
create_common_build_mk $@
cat <<'EOF' >> mk/build.mk
LLFLAGS = -shared -Wl,-soname=$(SONAME)
SONAME_SHORT = lib$(LIBNAME).so
SONAME = $(SONAME_SHORT).$(VERSION_MAJOR)
SONAME_FULL = $(SONAME_SHORT).$(VERSION)
EOF
}
create_darwin_build_mk() {
create_common_build_mk $@
cat <<'EOF' >> mk/build.mk
LLFLAGS = -dynamiclib -current_version $(VERSION)
STATIC = lib$(LIBNAME).a
SONAME_SHORT = $(LIBNAME).dylib
SONAME = lib$(LIBNAME).$(VERSION_MAJOR).dylib
SONAME_FULL = lib$(LIBNAME).$(VERSION).dylib
EOF
}
for arg in $@; do
case $arg in
"--enable-debug")
DEBUG=1
;;
esac
done
if [ ! -d "mk" ]; then
mkdir -m 0755 mk
fi
case $OS in
Linux)
create_linux_config_h
create_linux_build_mk
;;
Darwin)
create_darwin_config_h
create_darwin_build_mk
;;
esac

View file

@ -25,8 +25,8 @@ enum patty_kiss_command {
PATTY_KISS_RETURN = 0xff PATTY_KISS_RETURN = 0xff
}; };
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 patty_kiss_write(int fd, const void *buf, size_t len, int channel); ssize_t patty_kiss_write(int fd, const void *buf, size_t len, int port);
#endif /* _PATTY_KISS_H */ #endif /* _PATTY_KISS_H */

29
src/Makefile Normal file
View file

@ -0,0 +1,29 @@
include ../mk/build.mk
INCLUDE_PATH = ../include
HEADER_SUBDIR = birch
CC = $(CROSS)cc
CFLAGS = $(CGFLAGS) -fPIC -Wall -O2 -I$(INCLUDE_PATH)
LDFLAGS =
HEADERS = kiss.h ax25.h
OBJS = kiss.o
PROGRAM =
AR = $(CROSS)ar
RANLIB = $(CROSS)ranlib
RM = /bin/rm
LN = /bin/ln
RMDIR = /bin/rmdir
INSTALL = /usr/bin/install
all: $(OBJS)
$(OBJS): %.o: %.c $(HEADERS_BUILD)
$(CC) $(CFLAGS) -c $<
clean:
$(RM) -f $(OBJS)

View file

@ -1,3 +1,8 @@
#include <sys/types.h>
#include <sys/uio.h>
#include <unistd.h>
#include <errno.h>
#include <patty/kiss.h> #include <patty/kiss.h>
enum kiss_flags { enum kiss_flags {
@ -19,7 +24,7 @@ ssize_t patty_kiss_read(int fd, void *buf, size_t len, int *port) {
for (i=0; i<len; i++) { for (i=0; i<len; i++) {
unsigned char c = ((char *)buf)[i]; unsigned char c = ((char *)buf)[i];
if (flags & KISS_FRAME == 0) { if ((flags & KISS_FRAME) == 0) {
if (c == PATTY_KISS_FEND) { if (c == PATTY_KISS_FEND) {
flags |= KISS_FRAME; flags |= KISS_FRAME;
} }
@ -60,7 +65,7 @@ ssize_t patty_kiss_read(int fd, void *buf, size_t len, int *port) {
* the high nybble to be the radio port number from which the * the high nybble to be the radio port number from which the
* packet originated. * packet originated.
*/ */
if (c & 0x0f == 0) { if ((c & 0x0f) == 0) {
*port = (c & 0xf0) >> 4; *port = (c & 0xf0) >> 4;
continue; continue;
@ -94,13 +99,12 @@ ssize_t patty_kiss_write(int fd, const void *buf, size_t len, int port) {
goto error_io; goto error_io;
} }
if (write_command(PATTY_KISS_DATA, port) < 0) { if (write_command(fd, PATTY_KISS_DATA, port) < 0) {
goto error_io; goto error_io;
} }
for (i=0; i<len; i++) { for (i=0; i<len; i++) {
unsigned char c = ((unsigned char *)buf)[i]; unsigned char c = ((unsigned char *)buf)[i];
ssize_t res = 0;
unsigned char *escape = NULL; unsigned char *escape = NULL;
switch (c) { switch (c) {
@ -114,7 +118,12 @@ ssize_t patty_kiss_write(int fd, const void *buf, size_t len, int port) {
default: { default: {
end = i; end = i;
res = write(fd, &c, 1); break;
if (write(fd, &c, 1) < 0) {
goto error_io;
}
break;
} }
} }