summaryrefslogtreecommitdiff
path: root/slip
diff options
context:
space:
mode:
authorJeffrey Armstrong <jeffrey.armstrong@approximatrix.com>2016-08-25 15:14:24 -0400
committerJeffrey Armstrong <jeffrey.armstrong@approximatrix.com>2016-08-25 15:14:24 -0400
commit84de937689bcb35ea3ddae55d9c74dc23463f79c (patch)
treecddc948933f9e0ee0a3f1b4caeaea5eb93bfcc98 /slip
downloaduIP-FOSSIL-84de937689bcb35ea3ddae55d9c74dc23463f79c.tar.gz
uIP-FOSSIL-84de937689bcb35ea3ddae55d9c74dc23463f79c.zip
Initial commit of original code
Diffstat (limited to 'slip')
-rw-r--r--slip/slipdev.c208
-rw-r--r--slip/slipdev.h88
-rw-r--r--slip/slipfos.c119
-rw-r--r--slip/slipfos.h50
4 files changed, 465 insertions, 0 deletions
diff --git a/slip/slipdev.c b/slip/slipdev.c
new file mode 100644
index 0000000..166da57
--- /dev/null
+++ b/slip/slipdev.c
@@ -0,0 +1,208 @@
+/**
+ * \addtogroup uip
+ * @{
+ */
+
+/**
+ * \defgroup slip Serial Line IP (SLIP) protocol
+ * @{
+ *
+ * The SLIP protocol is a very simple way to transmit IP packets over
+ * a serial line. It does not provide any framing or error control,
+ * and is therefore not very widely used today.
+ *
+ * This SLIP implementation requires two functions for accessing the
+ * serial device: slipdev_char_poll() and slipdev_char_put(). These
+ * must be implemented specifically for the system on which the SLIP
+ * protocol is to be run.
+ */
+
+/**
+ * \file
+ * SLIP protocol implementation
+ * \author Adam Dunkels <adam@dunkels.com>
+ */
+
+/*
+ * Copyright (c) 2001, Adam Dunkels.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote
+ * products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This file is part of the uIP TCP/IP stack.
+ *
+ * $Id: slipdev.c,v 1.1 2006/06/17 22:41:18 adamdunkels Exp $
+ *
+ */
+
+/*
+ * This is a generic implementation of the SLIP protocol over an RS232
+ * (serial) device.
+ *
+ * Huge thanks to Ullrich von Bassewitz <uz@cc65.org> of cc65 fame for
+ * and endless supply of bugfixes, insightsful comments and
+ * suggestions, and improvements to this code!
+ */
+
+#include "uip.h"
+#include "uip-fw.h"
+#include "slipdev.h"
+#include <string.h> /* For memcpy() */
+
+#define SLIP_END 0300
+#define SLIP_ESC 0333
+#define SLIP_ESC_END 0334
+#define SLIP_ESC_ESC 0335
+
+static u8_t slip_buf[UIP_BUFSIZE];
+
+static u16_t len, tmplen;
+static u8_t lastc;
+
+/*-----------------------------------------------------------------------------------*/
+/**
+ * Send the packet in the uip_buf and uip_appdata buffers using the
+ * SLIP protocol.
+ *
+ * The first 40 bytes of the packet (the IP and TCP headers) are read
+ * from the uip_buf buffer, and the following bytes (the application
+ * data) are read from the uip_appdata buffer.
+ *
+ * \return This function will always return UIP_FW_OK.
+ */
+/*-----------------------------------------------------------------------------------*/
+u8_t
+slipdev_send(void)
+{
+ u16_t i;
+ u8_t *ptr;
+ u8_t c;
+
+ slipdev_char_put(SLIP_END);
+
+ ptr = &uip_buf[UIP_LLH_LEN];
+ for(i = 0; i < uip_len; ++i) {
+ if(i == UIP_TCPIP_HLEN) {
+ ptr = (char *)uip_appdata;
+ }
+ c = *ptr++;
+ switch(c) {
+ case SLIP_END:
+ slipdev_char_put(SLIP_ESC);
+ slipdev_char_put(SLIP_ESC_END);
+ break;
+ case SLIP_ESC:
+ slipdev_char_put(SLIP_ESC);
+ slipdev_char_put(SLIP_ESC_ESC);
+ break;
+ default:
+ slipdev_char_put(c);
+ break;
+ }
+ }
+ slipdev_char_put(SLIP_END);
+
+ return UIP_FW_OK;
+}
+/*-----------------------------------------------------------------------------------*/
+/**
+ * Poll the SLIP device for an available packet.
+ *
+ * This function will poll the SLIP device to see if a packet is
+ * available. It uses a buffer in which all avaliable bytes from the
+ * RS232 interface are read into. When a full packet has been read
+ * into the buffer, the packet is copied into the uip_buf buffer and
+ * the length of the packet is returned.
+ *
+ * \return The length of the packet placed in the uip_buf buffer, or
+ * zero if no packet is available.
+ */
+/*-----------------------------------------------------------------------------------*/
+u16_t
+slipdev_poll(void)
+{
+ u8_t c;
+
+ while(slipdev_char_poll(&c)) {
+ switch(c) {
+ case SLIP_ESC:
+ lastc = c;
+ break;
+
+ case SLIP_END:
+ lastc = c;
+ /* End marker found, we copy our input buffer to the uip_buf
+ buffer and return the size of the packet we copied. */
+ memcpy(&uip_buf[UIP_LLH_LEN], slip_buf, len);
+ tmplen = len;
+ len = 0;
+ return tmplen;
+
+ default:
+ if(lastc == SLIP_ESC) {
+ lastc = c;
+ /* Previous read byte was an escape byte, so this byte will be
+ interpreted differently from others. */
+ switch(c) {
+ case SLIP_ESC_END:
+ c = SLIP_END;
+ break;
+ case SLIP_ESC_ESC:
+ c = SLIP_ESC;
+ break;
+ }
+ } else {
+ lastc = c;
+ }
+
+ slip_buf[len] = c;
+ ++len;
+
+ if(len > UIP_BUFSIZE) {
+ len = 0;
+ }
+
+ break;
+ }
+ }
+ return 0;
+}
+/*-----------------------------------------------------------------------------------*/
+/**
+ * Initialize the SLIP module.
+ *
+ * This function does not initialize the underlying RS232 device, but
+ * only the SLIP part.
+ */
+/*-----------------------------------------------------------------------------------*/
+void
+slipdev_init(void)
+{
+ lastc = len = 0;
+}
+/*-----------------------------------------------------------------------------------*/
+
+/** @} */
+/** @} */
diff --git a/slip/slipdev.h b/slip/slipdev.h
new file mode 100644
index 0000000..f41699c
--- /dev/null
+++ b/slip/slipdev.h
@@ -0,0 +1,88 @@
+/**
+ * \addtogroup slip
+ * @{
+ */
+
+/**
+ * \file
+ * SLIP header file.
+ * \author Adam Dunkels <adam@dunkels.com>
+ */
+
+/*
+ * Copyright (c) 2001, Adam Dunkels.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote
+ * products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This file is part of the uIP TCP/IP stack.
+ *
+ * $Id: slipdev.h,v 1.1 2006/06/17 22:41:18 adamdunkels Exp $
+ *
+ */
+
+#ifndef __SLIPDEV_H__
+#define __SLIPDEV_H__
+
+#include "uip.h"
+
+/**
+ * Put a character on the serial device.
+ *
+ * This function is used by the SLIP implementation to put a character
+ * on the serial device. It must be implemented specifically for the
+ * system on which the SLIP implementation is to be run.
+ *
+ * \param c The character to be put on the serial device.
+ */
+void slipdev_char_put(u8_t c);
+
+/**
+ * Poll the serial device for a character.
+ *
+ * This function is used by the SLIP implementation to poll the serial
+ * device for a character. It must be implemented specifically for the
+ * system on which the SLIP implementation is to be run.
+ *
+ * The function should return immediately regardless if a character is
+ * available or not. If a character is available it should be placed
+ * at the memory location pointed to by the pointer supplied by the
+ * arguement c.
+ *
+ * \param c A pointer to a byte that is filled in by the function with
+ * the received character, if available.
+ *
+ * \retval 0 If no character is available.
+ * \retval Non-zero If a character is available.
+ */
+u8_t slipdev_char_poll(u8_t *c);
+
+void slipdev_init(void);
+u8_t slipdev_send(void);
+u16_t slipdev_poll(void);
+
+#endif /* __SLIPDEV_H__ */
+
+/** @} */
diff --git a/slip/slipfos.c b/slip/slipfos.c
new file mode 100644
index 0000000..eb8e775
--- /dev/null
+++ b/slip/slipfos.c
@@ -0,0 +1,119 @@
+/* FOSSIL SLIP interface for uip
+ Implements slipdev_char_poll and slipdev_char_put */
+
+/*
+ * Copyright (c) 2005, 2009 Jeffrey Armstrong
+ * All rights reserved.
+ *
+* Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote
+ * products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This file is part of the uIP TCP/IP stack - MS-DOS FOSSIL port.
+ *
+ * Author: Jeffrey Armstrong <jeff@rainbow-100.com>
+ *
+ */
+
+#include <stdio.h>
+#include "uip.h"
+#include "fossil.h"
+#include "slipfos.h"
+
+#define DEFAULT_BAUD 9600
+
+int slipdev_char_poll_2()
+{
+unsigned char in;
+int return_val;
+
+ if(F_Peek_Check()) {
+
+ in = Get_Raw();
+
+#ifdef DEBUG_FOSSIL
+ printf("Actual poll value = %d\n",in);
+#endif
+
+ return_val = (int)in;
+
+ } else {
+ return_val = -1;
+ }
+ return return_val;
+
+}
+
+u8_t slipdev_char_poll(u8_t *c)
+{
+unsigned char in;
+u8_t return_val;
+
+ /* if(F_Peek() && F_Get_Status(CK_DCD)) { */
+
+ if(F_Peek_Check()) {
+
+ in = Get_Raw();
+
+#ifdef DEBUG_FOSSIL
+ printf("Actual poll value = %d\n",in);
+#endif
+
+ *c = (u8_t)in;
+ return_val = (u8_t)1;
+
+ } else {
+ return_val = (u8_t)0;
+ }
+ return return_val;
+}
+
+void slipdev_char_put(u8_t c)
+{
+ F_Send_Char(TRANSMIT, (unsigned char)c);
+}
+
+int slip_fossil_init(int desired_port, int speed)
+{
+ port = desired_port;
+
+ printf("SLIP FOSSIL Settings - Port: %d Speed: %d\n",port,speed);
+
+ if(!F_Init()) {
+ printf("FOSSIL initialization failed\n");
+ return -1;
+ }
+ if (!F_Set_Baud(speed)) {
+ printf("FOSSIL baud set failed\n");
+ return -2;
+ }
+ /*Fl_Ctrl(TXONXOFF); */
+
+ /* slattach uses hardware flow control */
+ Fl_Ctrl(CTSRTS);
+
+ F_Dtr(TRUE);
+ printf("DTR has been raised!\n");
+
+ return 1;
+}
diff --git a/slip/slipfos.h b/slip/slipfos.h
new file mode 100644
index 0000000..1167745
--- /dev/null
+++ b/slip/slipfos.h
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2005, 2009 Jeffrey Armstrong
+ * All rights reserved.
+ *
+* Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote
+ * products derived from this software without specific prior
+ * written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This file is part of the uIP TCP/IP stack - MS-DOS FOSSIL port.
+ *
+ * Author: Jeffrey Armstrong <jeff@rainbow-100.com>
+ *
+ */
+
+#ifndef __SLIP_FOSSIL_HEADERS_
+#define __SLIP_FOSSIL_HEADERS_
+
+#include "uip.h"
+
+/* int debug_mode;
+ * unsigned char flow_control;
+ * int line_speed;
+ */
+
+int slip_fossil_init(int desired_port, int speed);
+void slipdev_char_put(u8_t c);
+u8_t slipdev_char_poll(u8_t *c);
+int slipdev_char_poll_2();
+
+#endif /* __SLIP_FOSSIL_HEADERS_ */