Leest de waarde van een sensor binnen een maakt deze beschikbaar via internet

Dependencies:   NTPClient_NetServices mbed

Committer:
hendrikvincent
Date:
Mon Dec 02 09:01:23 2013 +0000
Revision:
0:05ccbd4f84f1
eerste programma;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hendrikvincent 0:05ccbd4f84f1 1
hendrikvincent 0:05ccbd4f84f1 2 /*
hendrikvincent 0:05ccbd4f84f1 3 Copyright (c) 2010 Donatien Garnier (donatiengar [at] gmail [dot] com)
hendrikvincent 0:05ccbd4f84f1 4
hendrikvincent 0:05ccbd4f84f1 5 Permission is hereby granted, free of charge, to any person obtaining a copy
hendrikvincent 0:05ccbd4f84f1 6 of this software and associated documentation files (the "Software"), to deal
hendrikvincent 0:05ccbd4f84f1 7 in the Software without restriction, including without limitation the rights
hendrikvincent 0:05ccbd4f84f1 8 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
hendrikvincent 0:05ccbd4f84f1 9 copies of the Software, and to permit persons to whom the Software is
hendrikvincent 0:05ccbd4f84f1 10 furnished to do so, subject to the following conditions:
hendrikvincent 0:05ccbd4f84f1 11
hendrikvincent 0:05ccbd4f84f1 12 The above copyright notice and this permission notice shall be included in
hendrikvincent 0:05ccbd4f84f1 13 all copies or substantial portions of the Software.
hendrikvincent 0:05ccbd4f84f1 14
hendrikvincent 0:05ccbd4f84f1 15 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
hendrikvincent 0:05ccbd4f84f1 16 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
hendrikvincent 0:05ccbd4f84f1 17 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
hendrikvincent 0:05ccbd4f84f1 18 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
hendrikvincent 0:05ccbd4f84f1 19 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
hendrikvincent 0:05ccbd4f84f1 20 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
hendrikvincent 0:05ccbd4f84f1 21 THE SOFTWARE.
hendrikvincent 0:05ccbd4f84f1 22 */
hendrikvincent 0:05ccbd4f84f1 23
hendrikvincent 0:05ccbd4f84f1 24 /*
hendrikvincent 0:05ccbd4f84f1 25
hendrikvincent 0:05ccbd4f84f1 26 This is a wrapper around Serial if for lwIP (acts as a serial driver)
hendrikvincent 0:05ccbd4f84f1 27
hendrikvincent 0:05ccbd4f84f1 28 See sio.h for functions to be implemented
hendrikvincent 0:05ccbd4f84f1 29
hendrikvincent 0:05ccbd4f84f1 30 sio_fd_t is a void* defined type, we use it as a SerialBuf ptr
hendrikvincent 0:05ccbd4f84f1 31
hendrikvincent 0:05ccbd4f84f1 32
hendrikvincent 0:05ccbd4f84f1 33
hendrikvincent 0:05ccbd4f84f1 34 */
hendrikvincent 0:05ccbd4f84f1 35
hendrikvincent 0:05ccbd4f84f1 36
hendrikvincent 0:05ccbd4f84f1 37 #include "netCfg.h"
hendrikvincent 0:05ccbd4f84f1 38 #if NET_PPP
hendrikvincent 0:05ccbd4f84f1 39
hendrikvincent 0:05ccbd4f84f1 40 //#define MAX_SERIAL_PORTS 8
hendrikvincent 0:05ccbd4f84f1 41
hendrikvincent 0:05ccbd4f84f1 42 #include "lwip/sio.h"
hendrikvincent 0:05ccbd4f84f1 43 #include "mbed.h"
hendrikvincent 0:05ccbd4f84f1 44 //#include "sioMgr.h"
hendrikvincent 0:05ccbd4f84f1 45 #include "drv/serial/buf/SerialBuf.h"
hendrikvincent 0:05ccbd4f84f1 46
hendrikvincent 0:05ccbd4f84f1 47 //#define __DEBUG
hendrikvincent 0:05ccbd4f84f1 48 #include "dbg/dbg.h"
hendrikvincent 0:05ccbd4f84f1 49
hendrikvincent 0:05ccbd4f84f1 50 //extern "C" {
hendrikvincent 0:05ccbd4f84f1 51
hendrikvincent 0:05ccbd4f84f1 52 /**
hendrikvincent 0:05ccbd4f84f1 53 * Opens a serial device for communication.
hendrikvincent 0:05ccbd4f84f1 54 *
hendrikvincent 0:05ccbd4f84f1 55 * @param devnum device number
hendrikvincent 0:05ccbd4f84f1 56 * @return handle to serial device if successful, NULL otherwise
hendrikvincent 0:05ccbd4f84f1 57 */
hendrikvincent 0:05ccbd4f84f1 58 sio_fd_t sio_open(u8_t devnum)
hendrikvincent 0:05ccbd4f84f1 59 {
hendrikvincent 0:05ccbd4f84f1 60 #if 0
hendrikvincent 0:05ccbd4f84f1 61 SerialBuf* pIf = SioMgr::getIf(devnum);
hendrikvincent 0:05ccbd4f84f1 62 if(pIf == NULL)
hendrikvincent 0:05ccbd4f84f1 63 return NULL;
hendrikvincent 0:05ccbd4f84f1 64
hendrikvincent 0:05ccbd4f84f1 65 //Got a SerialBuf* object
hendrikvincent 0:05ccbd4f84f1 66 //WARN: It HAS to be initialised (instanciated + attached to a Serial obj)
hendrikvincent 0:05ccbd4f84f1 67
hendrikvincent 0:05ccbd4f84f1 68 return (sio_fd_t) pIf;
hendrikvincent 0:05ccbd4f84f1 69 #endif
hendrikvincent 0:05ccbd4f84f1 70 return NULL;
hendrikvincent 0:05ccbd4f84f1 71 }
hendrikvincent 0:05ccbd4f84f1 72
hendrikvincent 0:05ccbd4f84f1 73 /**
hendrikvincent 0:05ccbd4f84f1 74 * Sends a single character to the serial device.
hendrikvincent 0:05ccbd4f84f1 75 *
hendrikvincent 0:05ccbd4f84f1 76 * @param c character to send
hendrikvincent 0:05ccbd4f84f1 77 * @param fd serial device handle
hendrikvincent 0:05ccbd4f84f1 78 *
hendrikvincent 0:05ccbd4f84f1 79 * @note This function will block until the character can be sent.
hendrikvincent 0:05ccbd4f84f1 80 */
hendrikvincent 0:05ccbd4f84f1 81 void sio_send(u8_t c, sio_fd_t fd)
hendrikvincent 0:05ccbd4f84f1 82 {
hendrikvincent 0:05ccbd4f84f1 83 SerialBuf* pIf = (SerialBuf*) fd;
hendrikvincent 0:05ccbd4f84f1 84 //while(!pIf->writeable());
hendrikvincent 0:05ccbd4f84f1 85 pIf->putc( (char) c );
hendrikvincent 0:05ccbd4f84f1 86 }
hendrikvincent 0:05ccbd4f84f1 87
hendrikvincent 0:05ccbd4f84f1 88 /**
hendrikvincent 0:05ccbd4f84f1 89 * Receives a single character from the serial device.
hendrikvincent 0:05ccbd4f84f1 90 *
hendrikvincent 0:05ccbd4f84f1 91 * @param fd serial device handle
hendrikvincent 0:05ccbd4f84f1 92 *
hendrikvincent 0:05ccbd4f84f1 93 * @note This function will block until a character is received.
hendrikvincent 0:05ccbd4f84f1 94 */
hendrikvincent 0:05ccbd4f84f1 95 u8_t sio_recv(sio_fd_t fd)
hendrikvincent 0:05ccbd4f84f1 96 {
hendrikvincent 0:05ccbd4f84f1 97 SerialBuf* pIf = (SerialBuf*) fd;
hendrikvincent 0:05ccbd4f84f1 98 pIf->setReadMode(false);
hendrikvincent 0:05ccbd4f84f1 99 while(!pIf->readable());
hendrikvincent 0:05ccbd4f84f1 100 return (u8_t) pIf->getc();
hendrikvincent 0:05ccbd4f84f1 101 }
hendrikvincent 0:05ccbd4f84f1 102
hendrikvincent 0:05ccbd4f84f1 103 /**
hendrikvincent 0:05ccbd4f84f1 104 * Reads from the serial device.
hendrikvincent 0:05ccbd4f84f1 105 *
hendrikvincent 0:05ccbd4f84f1 106 * @param fd serial device handle
hendrikvincent 0:05ccbd4f84f1 107 * @param data pointer to data buffer for receiving
hendrikvincent 0:05ccbd4f84f1 108 * @param len maximum length (in bytes) of data to receive
hendrikvincent 0:05ccbd4f84f1 109 * @return number of bytes actually received - may be 0 if aborted by sio_read_abort
hendrikvincent 0:05ccbd4f84f1 110 *
hendrikvincent 0:05ccbd4f84f1 111 * @note This function will block until data can be received. The blocking
hendrikvincent 0:05ccbd4f84f1 112 * can be cancelled by calling sio_read_abort().
hendrikvincent 0:05ccbd4f84f1 113 */
hendrikvincent 0:05ccbd4f84f1 114 static volatile bool m_abort = false;
hendrikvincent 0:05ccbd4f84f1 115 u32_t sio_read(sio_fd_t fd, u8_t *data, u32_t len)
hendrikvincent 0:05ccbd4f84f1 116 {
hendrikvincent 0:05ccbd4f84f1 117 u32_t recvd = 0; //bytes received
hendrikvincent 0:05ccbd4f84f1 118 SerialBuf* pIf = (SerialBuf*) fd;
hendrikvincent 0:05ccbd4f84f1 119 pIf->setReadMode(false);
hendrikvincent 0:05ccbd4f84f1 120 while(!m_abort && len)
hendrikvincent 0:05ccbd4f84f1 121 {
hendrikvincent 0:05ccbd4f84f1 122 while(!pIf->readable());
hendrikvincent 0:05ccbd4f84f1 123 *data = (u8_t) pIf->getc();
hendrikvincent 0:05ccbd4f84f1 124 data++;
hendrikvincent 0:05ccbd4f84f1 125 len--;
hendrikvincent 0:05ccbd4f84f1 126 recvd++;
hendrikvincent 0:05ccbd4f84f1 127 }
hendrikvincent 0:05ccbd4f84f1 128 m_abort = false;
hendrikvincent 0:05ccbd4f84f1 129 return recvd;
hendrikvincent 0:05ccbd4f84f1 130 }
hendrikvincent 0:05ccbd4f84f1 131
hendrikvincent 0:05ccbd4f84f1 132 /**
hendrikvincent 0:05ccbd4f84f1 133 * Tries to read from the serial device. Same as sio_read but returns
hendrikvincent 0:05ccbd4f84f1 134 * immediately if no data is available and never blocks.
hendrikvincent 0:05ccbd4f84f1 135 *
hendrikvincent 0:05ccbd4f84f1 136 * @param fd serial device handle
hendrikvincent 0:05ccbd4f84f1 137 * @param data pointer to data buffer for receiving
hendrikvincent 0:05ccbd4f84f1 138 * @param len maximum length (in bytes) of data to receive
hendrikvincent 0:05ccbd4f84f1 139 * @return number of bytes actually received
hendrikvincent 0:05ccbd4f84f1 140 */
hendrikvincent 0:05ccbd4f84f1 141 u32_t sio_tryread(sio_fd_t fd, u8_t *data, u32_t len)
hendrikvincent 0:05ccbd4f84f1 142 {
hendrikvincent 0:05ccbd4f84f1 143 u32_t recvd = 0; //bytes received
hendrikvincent 0:05ccbd4f84f1 144 SerialBuf* pIf = (SerialBuf*) fd;
hendrikvincent 0:05ccbd4f84f1 145 pIf->setReadMode(false);
hendrikvincent 0:05ccbd4f84f1 146 while(len)
hendrikvincent 0:05ccbd4f84f1 147 {
hendrikvincent 0:05ccbd4f84f1 148 /* if(!pIf->readable())
hendrikvincent 0:05ccbd4f84f1 149 {
hendrikvincent 0:05ccbd4f84f1 150 wait_ms(4);
hendrikvincent 0:05ccbd4f84f1 151 }*/
hendrikvincent 0:05ccbd4f84f1 152 if(!pIf->readable())
hendrikvincent 0:05ccbd4f84f1 153 {
hendrikvincent 0:05ccbd4f84f1 154 return recvd;
hendrikvincent 0:05ccbd4f84f1 155 }
hendrikvincent 0:05ccbd4f84f1 156 *data = (u8_t) pIf->getc();
hendrikvincent 0:05ccbd4f84f1 157 data++;
hendrikvincent 0:05ccbd4f84f1 158 len--;
hendrikvincent 0:05ccbd4f84f1 159 recvd++;
hendrikvincent 0:05ccbd4f84f1 160 }
hendrikvincent 0:05ccbd4f84f1 161 return recvd;
hendrikvincent 0:05ccbd4f84f1 162 }
hendrikvincent 0:05ccbd4f84f1 163
hendrikvincent 0:05ccbd4f84f1 164 /**
hendrikvincent 0:05ccbd4f84f1 165 * Writes to the serial device.
hendrikvincent 0:05ccbd4f84f1 166 *
hendrikvincent 0:05ccbd4f84f1 167 * @param fd serial device handle
hendrikvincent 0:05ccbd4f84f1 168 * @param data pointer to data to send
hendrikvincent 0:05ccbd4f84f1 169 * @param len length (in bytes) of data to send
hendrikvincent 0:05ccbd4f84f1 170 * @return number of bytes actually sent
hendrikvincent 0:05ccbd4f84f1 171 *
hendrikvincent 0:05ccbd4f84f1 172 * @note This function will block until all data can be sent.
hendrikvincent 0:05ccbd4f84f1 173 */
hendrikvincent 0:05ccbd4f84f1 174 u32_t sio_write(sio_fd_t fd, u8_t *data, u32_t len)
hendrikvincent 0:05ccbd4f84f1 175 {
hendrikvincent 0:05ccbd4f84f1 176 u32_t sent = 0; //bytes sent
hendrikvincent 0:05ccbd4f84f1 177 SerialBuf* pIf = (SerialBuf*) fd;
hendrikvincent 0:05ccbd4f84f1 178 while(len)
hendrikvincent 0:05ccbd4f84f1 179 {
hendrikvincent 0:05ccbd4f84f1 180 while(!pIf->writeable());
hendrikvincent 0:05ccbd4f84f1 181 pIf->putc(*data);
hendrikvincent 0:05ccbd4f84f1 182 data++;
hendrikvincent 0:05ccbd4f84f1 183 len--;
hendrikvincent 0:05ccbd4f84f1 184 sent++;
hendrikvincent 0:05ccbd4f84f1 185 }
hendrikvincent 0:05ccbd4f84f1 186 return sent; //Well, this is bound to be len if no interrupt mechanism
hendrikvincent 0:05ccbd4f84f1 187 }
hendrikvincent 0:05ccbd4f84f1 188
hendrikvincent 0:05ccbd4f84f1 189 /**
hendrikvincent 0:05ccbd4f84f1 190 * Aborts a blocking sio_read() call.
hendrikvincent 0:05ccbd4f84f1 191 *
hendrikvincent 0:05ccbd4f84f1 192 * @param fd serial device handle
hendrikvincent 0:05ccbd4f84f1 193 */
hendrikvincent 0:05ccbd4f84f1 194 void sio_read_abort(sio_fd_t fd)
hendrikvincent 0:05ccbd4f84f1 195 {
hendrikvincent 0:05ccbd4f84f1 196 m_abort = true;
hendrikvincent 0:05ccbd4f84f1 197 }
hendrikvincent 0:05ccbd4f84f1 198
hendrikvincent 0:05ccbd4f84f1 199 //}
hendrikvincent 0:05ccbd4f84f1 200
hendrikvincent 0:05ccbd4f84f1 201 #endif
hendrikvincent 0:05ccbd4f84f1 202