blob: dc37f1b3cd4881a579112e4e8565fb7dd89353e6 [file] [log] [blame]
kthacker62e146c2006-04-17 15:11:35 +00001/*
2 * Copyright (c) 2004, Adam Dunkels.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. The name of the author may not be used to endorse or promote
14 * products derived from this software without specific prior
15 * written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
18 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
21 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
23 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
26 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 *
29 * This file is part of the Contiki OS
30 *
31 * $Id: slip-drv.c,v 1.1 2006/04/17 15:12:01 kthacker Exp $
32 *
33 */
34
35#include "contiki.h"
36#include "rs232dev.h"
37
38#include "packet-service.h"
39
40static void output(u8_t *hdr, u16_t hdrlen, u8_t *data, u16_t datalen);
41
42static const struct packet_service_state state =
43 {
44 PACKET_SERVICE_VERSION,
45 output
46 };
47
48EK_EVENTHANDLER(eventhandler, ev, data);
49EK_POLLHANDLER(pollhandler);
50EK_PROCESS(proc, PACKET_SERVICE_NAME ": SLIP", EK_PRIO_HIGH,
51 eventhandler, pollhandler, (void *)&state);
52
53/*---------------------------------------------------------------------------*/
54LOADER_INIT_FUNC(tapdev_service_init, arg)
55{
56 arg_free(arg);
57 ek_service_start(PACKET_SERVICE_NAME, &proc);
58}
59/*---------------------------------------------------------------------------*/
60static void
61output(u8_t *hdr, u16_t hdrlen, u8_t *data, u16_t datalen)
62{
63 rs232dev_send();
64}
65/*---------------------------------------------------------------------------*/
66EK_EVENTHANDLER(eventhandler, ev, data)
67{
68 switch(ev) {
69 case EK_EVENT_INIT:
70 case EK_EVENT_REPLACE:
71 rs232dev_init();
72 break;
73 case EK_EVENT_REQUEST_REPLACE:
74 ek_replace((struct ek_proc *)data, NULL);
75 rs232dev_unload();
76 LOADER_UNLOAD();
77 break;
78 case EK_EVENT_REQUEST_EXIT:
79 ek_exit();
80 rs232dev_unload();
81 LOADER_UNLOAD();
82 break;
83 default:
84 break;
85 }
86}
87/*---------------------------------------------------------------------------*/
88EK_POLLHANDLER(pollhandler)
89{
90 uip_len = rs232dev_poll();
91 if(uip_len > 0) {
92 tcpip_input();
93 }
94
95}
96/*---------------------------------------------------------------------------*/