sio.h 4.1 KB
Newer Older
H
hduffddybz 已提交
1 2
/*
 * Copyright (c) 2001-2004 Swedish Institute of Computer Science.
3 4 5
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification,
H
hduffddybz 已提交
6 7 8 9 10 11 12 13
 * 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
14
 *    derived from this software without specific prior written permission.
H
hduffddybz 已提交
15
 *
16 17 18 19 20 21 22 23 24
 * 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
H
hduffddybz 已提交
25 26 27 28 29 30 31 32 33 34 35 36 37 38
 * OF SUCH DAMAGE.
 *
 * This file is part of the lwIP TCP/IP stack.
 */

/*
 * This is the interface to the platform specific serial IO module
 * It needs to be implemented by those platforms which need SLIP or PPP
 */

#ifndef SIO_H
#define SIO_H

#include "lwip/arch.h"
39
#include "lwip/opt.h"
H
hduffddybz 已提交
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56

#ifdef __cplusplus
extern "C" {
#endif

/* If you want to define sio_fd_t elsewhere or differently,
   define this in your cc.h file. */
#ifndef __sio_fd_t_defined
typedef void * sio_fd_t;
#endif

/* The following functions can be defined to something else in your cc.h file
   or be implemented in your custom sio.c file. */

#ifndef sio_open
/**
 * Opens a serial device for communication.
57
 *
H
hduffddybz 已提交
58 59 60 61 62 63 64 65 66
 * @param devnum device number
 * @return handle to serial device if successful, NULL otherwise
 */
sio_fd_t sio_open(u8_t devnum);
#endif

#ifndef sio_send
/**
 * Sends a single character to the serial device.
67
 *
H
hduffddybz 已提交
68 69
 * @param c character to send
 * @param fd serial device handle
70
 *
H
hduffddybz 已提交
71 72 73 74 75 76 77 78
 * @note This function will block until the character can be sent.
 */
void sio_send(u8_t c, sio_fd_t fd);
#endif

#ifndef sio_recv
/**
 * Receives a single character from the serial device.
79
 *
H
hduffddybz 已提交
80
 * @param fd serial device handle
81
 *
H
hduffddybz 已提交
82 83 84 85 86 87 88 89
 * @note This function will block until a character is received.
 */
u8_t sio_recv(sio_fd_t fd);
#endif

#ifndef sio_read
/**
 * Reads from the serial device.
90
 *
H
hduffddybz 已提交
91 92 93 94
 * @param fd serial device handle
 * @param data pointer to data buffer for receiving
 * @param len maximum length (in bytes) of data to receive
 * @return number of bytes actually received - may be 0 if aborted by sio_read_abort
95
 *
H
hduffddybz 已提交
96 97 98 99 100 101 102 103 104 105
 * @note This function will block until data can be received. The blocking
 * can be cancelled by calling sio_read_abort().
 */
u32_t sio_read(sio_fd_t fd, u8_t *data, u32_t len);
#endif

#ifndef sio_tryread
/**
 * Tries to read from the serial device. Same as sio_read but returns
 * immediately if no data is available and never blocks.
106
 *
H
hduffddybz 已提交
107 108 109 110 111 112 113 114 115 116 117
 * @param fd serial device handle
 * @param data pointer to data buffer for receiving
 * @param len maximum length (in bytes) of data to receive
 * @return number of bytes actually received
 */
u32_t sio_tryread(sio_fd_t fd, u8_t *data, u32_t len);
#endif

#ifndef sio_write
/**
 * Writes to the serial device.
118
 *
H
hduffddybz 已提交
119 120 121 122
 * @param fd serial device handle
 * @param data pointer to data to send
 * @param len length (in bytes) of data to send
 * @return number of bytes actually sent
123
 *
H
hduffddybz 已提交
124 125 126 127 128 129 130 131
 * @note This function will block until all data can be sent.
 */
u32_t sio_write(sio_fd_t fd, u8_t *data, u32_t len);
#endif

#ifndef sio_read_abort
/**
 * Aborts a blocking sio_read() call.
132
 *
H
hduffddybz 已提交
133 134 135 136 137 138 139 140 141 142
 * @param fd serial device handle
 */
void sio_read_abort(sio_fd_t fd);
#endif

#ifdef __cplusplus
}
#endif

#endif /* SIO_H */