Mercurial > flash_v2
annotate packages/io/serial/current/src/common/serial.c @ 20:5f5102441818 ecos-sw-1999-07-02
Merge from eCos master repository on 1999-07-02-23:17:07-BST
| author | jlarmour |
|---|---|
| date | Fri, 02 Jul 1999 15:44:37 +0000 |
| parents | 1d7f19c9e4d1 |
| children | 7a6ac9edc838 |
| rev | line source |
|---|---|
| 2 | 1 //========================================================================== |
| 2 // | |
| 3 // io/serial/common/serial.c | |
| 4 // | |
| 5 // High level serial driver | |
| 6 // | |
| 7 //========================================================================== | |
| 8 //####COPYRIGHTBEGIN#### | |
| 9 // | |
| 10 // ------------------------------------------- | |
| 11 // The contents of this file are subject to the Cygnus eCos Public License | |
| 12 // Version 1.0 (the "License"); you may not use this file except in | |
| 13 // compliance with the License. You may obtain a copy of the License at | |
| 14 // http://sourceware.cygnus.com/ecos | |
| 15 // | |
| 16 // Software distributed under the License is distributed on an "AS IS" | |
| 17 // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the | |
| 18 // License for the specific language governing rights and limitations under | |
| 19 // the License. | |
| 20 // | |
| 21 // The Original Code is eCos - Embedded Cygnus Operating System, released | |
| 22 // September 30, 1998. | |
| 23 // | |
| 24 // The Initial Developer of the Original Code is Cygnus. Portions created | |
| 25 // by Cygnus are Copyright (C) 1998,1999 Cygnus Solutions. All Rights Reserved. | |
| 26 // ------------------------------------------- | |
| 27 // | |
| 28 //####COPYRIGHTEND#### | |
| 29 //========================================================================== | |
| 30 //#####DESCRIPTIONBEGIN#### | |
| 31 // | |
| 32 // Author(s): gthomas | |
| 33 // Contributors: gthomas | |
| 34 // Date: 1999-02-04 | |
| 35 // Purpose: Top level serial driver | |
| 36 // Description: | |
| 37 // | |
| 38 //####DESCRIPTIONEND#### | |
| 39 // | |
| 40 //========================================================================== | |
| 41 | |
| 42 #include <pkgconf/io.h> | |
| 43 #include <cyg/io/io.h> | |
| 44 #include <cyg/io/devtab.h> | |
| 45 #include <cyg/io/serial.h> | |
| 46 #include <cyg/infra/diag.h> | |
| 47 | |
| 48 static Cyg_ErrNo serial_write(cyg_io_handle_t handle, const void *buf, cyg_uint32 *len); | |
| 49 static Cyg_ErrNo serial_read(cyg_io_handle_t handle, void *buf, cyg_uint32 *len); | |
| 50 static Cyg_ErrNo serial_get_config(cyg_io_handle_t handle, cyg_uint32 key, void *buf, cyg_uint32 *len); | |
| 51 static Cyg_ErrNo serial_set_config(cyg_io_handle_t handle, cyg_uint32 key, const void *buf, cyg_uint32 *len); | |
| 52 | |
| 53 DEVIO_TABLE(serial_devio, | |
| 54 serial_write, | |
| 55 serial_read, | |
| 56 serial_get_config, | |
| 57 serial_set_config | |
| 58 ); | |
| 59 | |
| 60 static void serial_init(serial_channel *chan); | |
| 61 static void serial_xmt_char(serial_channel *chan); | |
| 62 static void serial_rcv_char(serial_channel *chan, unsigned char c); | |
| 63 SERIAL_CALLBACKS(serial_callbacks, | |
| 64 serial_init, | |
| 65 serial_xmt_char, | |
| 66 serial_rcv_char); | |
| 67 | |
| 68 static void | |
| 69 serial_init(serial_channel *chan) | |
| 70 { | |
| 71 if (chan->init) return; | |
| 72 if (chan->out_cbuf.len != 0) { | |
| 73 #ifdef CYGDBG_IO_INIT | |
| 74 diag_printf("Set output buffer - buf: %x len: %d\n", chan->out_cbuf.data, chan->out_cbuf.len); | |
| 75 #endif | |
| 76 chan->out_cbuf.waiting = false; | |
| 77 chan->out_cbuf.abort = false; | |
| 78 chan->out_cbuf.pending = 0; | |
| 79 cyg_drv_mutex_init(&chan->out_cbuf.lock); | |
| 80 cyg_drv_cond_init(&chan->out_cbuf.wait, &chan->out_cbuf.lock); | |
| 81 chan->out_cbuf.low_water = chan->out_cbuf.len / 4; | |
| 82 } | |
| 83 if (chan->in_cbuf.len != 0) { | |
| 84 #ifdef CYGDBG_IO_INIT | |
| 85 diag_printf("Set input buffer - buf: %x len: %d\n", chan->in_cbuf.data, chan->in_cbuf.len); | |
| 86 #endif | |
| 87 chan->in_cbuf.waiting = false; | |
| 88 chan->in_cbuf.abort = false; | |
| 89 cyg_drv_mutex_init(&chan->in_cbuf.lock); | |
| 90 cyg_drv_cond_init(&chan->in_cbuf.wait, &chan->in_cbuf.lock); | |
| 91 } | |
| 92 chan->init = true; | |
| 93 } | |
| 94 | |
| 95 static Cyg_ErrNo | |
| 96 serial_write(cyg_io_handle_t handle, const void *_buf, cyg_uint32 *len) | |
| 97 { | |
| 98 cyg_devtab_entry_t *t = (cyg_devtab_entry_t *)handle; | |
| 99 serial_channel *chan = (serial_channel *)t->priv; | |
| 100 serial_funs *funs = chan->funs; | |
| 101 cyg_int32 size = *len; | |
| 102 cyg_uint8 *buf = (cyg_uint8 *)_buf; | |
| 103 int next; | |
| 104 cbuf_t *cbuf = &chan->out_cbuf; | |
| 105 Cyg_ErrNo res = ENOERR; | |
|
20
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
106 |
|
4
1d7f19c9e4d1
Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents:
2
diff
changeset
|
107 cbuf->abort = false; |
| 2 | 108 cyg_drv_mutex_lock(&cbuf->lock); |
| 109 if (cbuf->len == 0) { | |
| 110 // Non interrupt driven (i.e. polled) operation | |
| 111 while (size-- > 0) { | |
| 112 while ((funs->putc)(chan, *buf) == false) ; // Ignore full, keep trying | |
| 113 buf++; | |
| 114 } | |
| 115 } else { | |
| 116 cyg_drv_dsr_lock(); // Avoid race condition testing pointers | |
| 117 while (size > 0) { | |
| 118 next = cbuf->put + 1; | |
| 119 if (next == cbuf->len) next = 0; | |
| 120 if (next == cbuf->get) { | |
| 121 cbuf->waiting = true; | |
| 122 // Buffer full - wait for space | |
| 123 (funs->start_xmit)(chan); // Make sure xmit is running | |
| 124 cbuf->pending += size; // Have this much more to send [eventually] | |
| 125 cyg_drv_cond_wait(&cbuf->wait); | |
| 126 cbuf->pending -= size; | |
| 127 if (cbuf->abort) { | |
| 128 // Give up! | |
| 129 cbuf->abort = false; | |
| 130 cbuf->waiting = false; | |
| 131 res = -EINTR; | |
| 132 break; | |
| 133 } | |
| 134 } else { | |
| 135 cbuf->data[cbuf->put++] = *buf++; | |
| 136 cbuf->put = next; | |
| 137 size--; // Only count if actually sent! | |
| 138 } | |
| 139 } | |
| 140 cyg_drv_dsr_unlock(); | |
| 141 (funs->start_xmit)(chan); // Start output as necessary | |
| 142 } | |
| 143 cyg_drv_mutex_unlock(&cbuf->lock); | |
| 144 return res; | |
| 145 } | |
| 146 | |
| 147 static Cyg_ErrNo | |
| 148 serial_read(cyg_io_handle_t handle, void *_buf, cyg_uint32 *len) | |
| 149 { | |
| 150 cyg_devtab_entry_t *t = (cyg_devtab_entry_t *)handle; | |
| 151 serial_channel *chan = (serial_channel *)t->priv; | |
| 152 serial_funs *funs = chan->funs; | |
| 153 cyg_uint8 *buf = (cyg_uint8 *)_buf; | |
| 154 cyg_int32 size = 0; | |
| 155 cbuf_t *cbuf = &chan->in_cbuf; | |
| 156 Cyg_ErrNo res = ENOERR; | |
|
20
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
157 #ifdef XX_CYGDBG_DIAG_BUF |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
158 extern int enable_diag_uart; |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
159 int _enable = enable_diag_uart; |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
160 int _time, _stime; |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
161 externC cyg_tick_count_t cyg_current_time(void); |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
162 #endif // CYGDBG_DIAG_BUF |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
163 |
|
4
1d7f19c9e4d1
Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents:
2
diff
changeset
|
164 cbuf->abort = false; |
| 2 | 165 cyg_drv_mutex_lock(&cbuf->lock); |
| 166 if (cbuf->len == 0) { | |
| 167 // Non interrupt driven (i.e. polled) operation | |
| 168 while (size++ < *len) { | |
| 169 *buf++ = (funs->getc)(chan); | |
| 170 } | |
| 171 } else { | |
| 172 cyg_drv_dsr_lock(); // Avoid races | |
| 173 while (size < *len) { | |
| 174 if (cbuf->get != cbuf->put) { | |
| 175 *buf++ = cbuf->data[cbuf->get]; | |
| 176 if (++cbuf->get == cbuf->len) cbuf->get = 0; | |
| 177 size++; | |
| 178 } else { | |
| 179 cbuf->waiting = true; | |
|
20
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
180 #ifdef XX_CYGDBG_DIAG_BUF |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
181 enable_diag_uart = 0; |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
182 HAL_CLOCK_READ(&_time); |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
183 _stime = (int)cyg_current_time(); |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
184 diag_printf("READ wait - get: %d, put: %d, time: %x.%x\n", cbuf->get, cbuf->put, _stime, _time); |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
185 enable_diag_uart = _enable; |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
186 #endif // CYGDBG_DIAG_BUF |
| 2 | 187 cyg_drv_cond_wait(&cbuf->wait); |
|
20
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
188 #ifdef XX_CYGDBG_DIAG_BUF |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
189 enable_diag_uart = 0; |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
190 HAL_CLOCK_READ(&_time); |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
191 _stime = (int)cyg_current_time(); |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
192 diag_printf("READ continue - get: %d, put: %d, time: %x.%x\n", cbuf->get, cbuf->put, _stime, _time); |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
193 enable_diag_uart = _enable; |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
194 #endif // CYGDBG_DIAG_BUF |
| 2 | 195 if (cbuf->abort) { |
| 196 // Give up! | |
| 197 cbuf->abort = false; | |
| 198 cbuf->waiting = false; | |
| 199 res = -EINTR; | |
| 200 break; | |
| 201 } | |
| 202 } | |
| 203 } | |
| 204 cyg_drv_dsr_unlock(); | |
| 205 } | |
|
20
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
206 cyg_drv_isr_lock(); |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
207 #ifdef XX_CYGDBG_DIAG_BUF |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
208 enable_diag_uart = 0; |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
209 HAL_CLOCK_READ(&_time); |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
210 _stime = (int)cyg_current_time(); |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
211 diag_printf("READ done - size: %d, len: %d, time: %x.%x\n", size, *len, _stime, _time); |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
212 enable_diag_uart = _enable; |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
213 #endif // CYGDBG_DIAG_BUF |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
214 cyg_drv_isr_unlock(); |
| 2 | 215 cyg_drv_mutex_unlock(&cbuf->lock); |
| 216 return res; | |
| 217 } | |
| 218 | |
| 219 static Cyg_ErrNo | |
| 220 serial_get_config(cyg_io_handle_t handle, cyg_uint32 key, void *xbuf, cyg_uint32 *len) | |
| 221 { | |
| 222 cyg_devtab_entry_t *t = (cyg_devtab_entry_t *)handle; | |
| 223 serial_channel *chan = (serial_channel *)t->priv; | |
| 224 cyg_serial_info_t *buf = (cyg_serial_info_t *)xbuf; | |
| 225 Cyg_ErrNo res = ENOERR; | |
| 226 cbuf_t *cbuf = &chan->out_cbuf; | |
| 227 serial_funs *funs = chan->funs; | |
| 228 | |
| 229 switch (key) { | |
| 230 case CYG_IO_GET_CONFIG_SERIAL_INFO: | |
| 231 if (*len < sizeof(cyg_serial_info_t)) { | |
| 232 return -EINVAL; | |
| 233 } | |
| 234 *buf = chan->config; | |
| 235 *len = sizeof(chan->config); | |
| 236 break; | |
| 237 case CYG_IO_GET_CONFIG_SERIAL_OUTPUT_DRAIN: | |
| 238 // Wait for any pending output to complete | |
| 239 if (cbuf->len == 0) break; // Nothing to do if not buffered | |
| 240 cyg_drv_mutex_lock(&cbuf->lock); // Stop any further output processing | |
| 241 cyg_drv_dsr_lock(); | |
| 242 while (cbuf->pending || (cbuf->get != cbuf->put)) { | |
| 243 cbuf->waiting = true; | |
| 244 cyg_drv_cond_wait(&cbuf->wait); | |
| 245 } | |
| 246 cyg_drv_dsr_unlock(); | |
| 247 cyg_drv_mutex_unlock(&cbuf->lock); | |
| 248 break; | |
| 249 case CYG_IO_GET_CONFIG_SERIAL_INPUT_FLUSH: | |
| 250 // Flush any buffered input | |
| 251 cbuf = &chan->in_cbuf; | |
| 252 if (cbuf->len == 0) break; // Nothing to do if not buffered | |
| 253 cyg_drv_mutex_lock(&cbuf->lock); // Stop any further input processing | |
| 254 cyg_drv_dsr_lock(); | |
| 255 if (cbuf->waiting) { | |
| 256 cbuf->abort = true; | |
| 257 cyg_drv_cond_signal(&cbuf->wait); | |
| 258 cbuf->waiting = false; | |
| 259 } | |
| 260 cbuf->get = cbuf->put; // Flush buffered input | |
| 261 cyg_drv_dsr_unlock(); | |
| 262 cyg_drv_mutex_unlock(&cbuf->lock); | |
| 263 break; | |
| 264 case CYG_IO_GET_CONFIG_SERIAL_ABORT: | |
| 265 // Abort any outstanding I/O, including blocked reads | |
| 266 // Caution - assumed to be called from 'timeout' (i.e. DSR) code | |
| 267 cbuf = &chan->in_cbuf; | |
| 268 if (cbuf->len != 0) { | |
| 269 cbuf->abort = true; | |
| 270 cyg_drv_cond_signal(&cbuf->wait); | |
| 271 } | |
| 272 cbuf = &chan->out_cbuf; | |
| 273 if (cbuf->len != 0) { | |
| 274 cbuf->abort = true; | |
| 275 cyg_drv_cond_signal(&cbuf->wait); | |
| 276 } | |
| 277 break; | |
| 278 case CYG_IO_GET_CONFIG_SERIAL_OUTPUT_FLUSH: | |
| 279 // Throw away any pending output | |
| 280 if (cbuf->len == 0) break; // Nothing to do if not buffered | |
| 281 cyg_drv_mutex_lock(&cbuf->lock); // Stop any further output processing | |
| 282 cyg_drv_dsr_lock(); | |
| 283 if (cbuf->get != cbuf->put) { | |
| 284 cbuf->get = cbuf->put; // Empties queue! | |
| 285 (funs->stop_xmit)(chan); // Done with transmit | |
| 286 } | |
| 287 if (cbuf->waiting) { | |
| 288 cbuf->abort = true; | |
| 289 cyg_drv_cond_signal(&cbuf->wait); | |
| 290 cbuf->waiting = false; | |
| 291 } | |
| 292 cyg_drv_dsr_unlock(); | |
| 293 cyg_drv_mutex_unlock(&cbuf->lock); | |
| 294 break; | |
| 295 default: | |
| 296 res = -EINVAL; | |
| 297 } | |
| 298 return res; | |
| 299 } | |
| 300 | |
| 301 static Cyg_ErrNo | |
| 302 serial_set_config(cyg_io_handle_t handle, cyg_uint32 key, const void *xbuf, cyg_uint32 *len) | |
| 303 { | |
| 304 Cyg_ErrNo res = ENOERR; | |
| 305 cyg_devtab_entry_t *t = (cyg_devtab_entry_t *)handle; | |
| 306 serial_channel *chan = (serial_channel *)t->priv; | |
| 307 serial_funs *funs = chan->funs; | |
| 308 cyg_serial_info_t *buf = (cyg_serial_info_t *)xbuf; | |
| 309 | |
| 310 switch (key) { | |
| 311 case CYG_IO_SET_CONFIG_SERIAL_INFO: | |
| 312 if (*len != sizeof(cyg_serial_info_t)) { | |
| 313 return -EINVAL; | |
| 314 } | |
| 315 if ((funs->set_config)(chan, buf) != true) { | |
| 316 // Device is not happy with paramters or they cannot be set | |
| 317 res = -EINVAL; | |
| 318 } | |
| 319 break; | |
| 320 default: | |
| 321 res = -EINVAL; | |
| 322 } | |
| 323 return res; | |
| 324 } | |
| 325 | |
| 326 static void | |
| 327 serial_xmt_char(serial_channel *chan) | |
| 328 { | |
| 329 cbuf_t *cbuf = &chan->out_cbuf; | |
| 330 serial_funs *funs = chan->funs; | |
| 331 unsigned char c; | |
| 332 int space; | |
| 333 | |
| 334 while (cbuf->get != cbuf->put) { | |
| 335 c = cbuf->data[cbuf->get]; | |
| 336 if ((funs->putc)(chan, c)) { | |
| 337 cbuf->get++; | |
| 338 if (cbuf->get == cbuf->len) cbuf->get = 0; | |
| 339 if (cbuf->waiting) { | |
| 340 // See if there is now enough room to restart writer | |
| 341 space = (cbuf->len + cbuf->get) - cbuf->put; | |
| 342 if (space > cbuf->len) space -= cbuf->len; | |
| 343 if (space >= cbuf->low_water) { | |
| 344 cbuf->waiting = false; | |
| 345 cyg_drv_cond_broadcast(&cbuf->wait); | |
| 346 } | |
| 347 } | |
| 348 } else { | |
| 349 return; // Need to wait for more space | |
| 350 } | |
| 351 } | |
| 352 (funs->stop_xmit)(chan); // Done with transmit | |
| 353 if (cbuf->waiting) { | |
| 354 cbuf->waiting = false; | |
| 355 cyg_drv_cond_signal(&cbuf->wait); | |
| 356 } | |
| 357 } | |
| 358 | |
| 359 static void | |
| 360 serial_rcv_char(serial_channel *chan, unsigned char c) | |
| 361 { | |
| 362 cbuf_t *cbuf = &chan->in_cbuf; | |
| 363 | |
| 364 cbuf->data[cbuf->put++] = c; | |
| 365 if (cbuf->put == cbuf->len) cbuf->put = 0; | |
| 366 if (cbuf->waiting) { | |
|
20
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
367 #ifdef XX_CYGDBG_DIAG_BUF |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
368 extern int enable_diag_uart; |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
369 int _enable = enable_diag_uart; |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
370 int _time, _stime; |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
371 externC cyg_tick_count_t cyg_current_time(void); |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
372 enable_diag_uart = 0; |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
373 HAL_CLOCK_READ(&_time); |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
374 _stime = (int)cyg_current_time(); |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
375 diag_printf("Signal reader - time: %x.%x\n", _stime, _time); |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
376 enable_diag_uart = _enable; |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
377 #endif // CYGDBG_DIAG_BUF |
| 2 | 378 cbuf->waiting = false; |
| 379 cyg_drv_cond_signal(&cbuf->wait); | |
| 380 } | |
| 381 } | |
| 382 |
