Mercurial > nand-ecoscentric
annotate packages/io/serial/current/src/common/serial.c @ 62:7a6ac9edc838 ecos-sw-2000-01-24
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
| author | jlarmour |
|---|---|
| date | Mon, 24 Jan 2000 21:43:17 +0000 |
| parents | 5f5102441818 |
| children | c38311975d4f |
| 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 | |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
20
diff
changeset
|
53 DEVIO_TABLE(cyg_io_serial_devio, |
| 2 | 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); | |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
20
diff
changeset
|
63 SERIAL_CALLBACKS(cyg_io_serial_callbacks, |
| 2 | 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 | |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
20
diff
changeset
|
124 if (cbuf->waiting) { |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
20
diff
changeset
|
125 // Note: 'start_xmit' may have obviated the need to wait :-) |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
20
diff
changeset
|
126 cbuf->pending += size; // Have this much more to send [eventually] |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
20
diff
changeset
|
127 cyg_drv_cond_wait(&cbuf->wait); |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
20
diff
changeset
|
128 cbuf->pending -= size; |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
20
diff
changeset
|
129 } |
| 2 | 130 if (cbuf->abort) { |
| 131 // Give up! | |
| 132 cbuf->abort = false; | |
| 133 cbuf->waiting = false; | |
| 134 res = -EINTR; | |
| 135 break; | |
| 136 } | |
| 137 } else { | |
| 138 cbuf->data[cbuf->put++] = *buf++; | |
| 139 cbuf->put = next; | |
| 140 size--; // Only count if actually sent! | |
| 141 } | |
| 142 } | |
| 143 cyg_drv_dsr_unlock(); | |
| 144 (funs->start_xmit)(chan); // Start output as necessary | |
| 145 } | |
| 146 cyg_drv_mutex_unlock(&cbuf->lock); | |
| 147 return res; | |
| 148 } | |
| 149 | |
| 150 static Cyg_ErrNo | |
| 151 serial_read(cyg_io_handle_t handle, void *_buf, cyg_uint32 *len) | |
| 152 { | |
| 153 cyg_devtab_entry_t *t = (cyg_devtab_entry_t *)handle; | |
| 154 serial_channel *chan = (serial_channel *)t->priv; | |
| 155 serial_funs *funs = chan->funs; | |
| 156 cyg_uint8 *buf = (cyg_uint8 *)_buf; | |
| 157 cyg_int32 size = 0; | |
| 158 cbuf_t *cbuf = &chan->in_cbuf; | |
| 159 Cyg_ErrNo res = ENOERR; | |
|
20
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
160 #ifdef XX_CYGDBG_DIAG_BUF |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
161 extern int enable_diag_uart; |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
162 int _enable = enable_diag_uart; |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
163 int _time, _stime; |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
164 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
|
165 #endif // CYGDBG_DIAG_BUF |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
166 |
|
4
1d7f19c9e4d1
Merge from eCos master repository on 1999-05-11-21:11:10-BST
jlarmour
parents:
2
diff
changeset
|
167 cbuf->abort = false; |
| 2 | 168 cyg_drv_mutex_lock(&cbuf->lock); |
| 169 if (cbuf->len == 0) { | |
| 170 // Non interrupt driven (i.e. polled) operation | |
| 171 while (size++ < *len) { | |
| 172 *buf++ = (funs->getc)(chan); | |
| 173 } | |
| 174 } else { | |
| 175 cyg_drv_dsr_lock(); // Avoid races | |
| 176 while (size < *len) { | |
| 177 if (cbuf->get != cbuf->put) { | |
| 178 *buf++ = cbuf->data[cbuf->get]; | |
| 179 if (++cbuf->get == cbuf->len) cbuf->get = 0; | |
| 180 size++; | |
| 181 } else { | |
| 182 cbuf->waiting = true; | |
|
20
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
183 #ifdef XX_CYGDBG_DIAG_BUF |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
184 enable_diag_uart = 0; |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
185 HAL_CLOCK_READ(&_time); |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
186 _stime = (int)cyg_current_time(); |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
187 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
|
188 enable_diag_uart = _enable; |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
189 #endif // CYGDBG_DIAG_BUF |
| 2 | 190 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
|
191 #ifdef XX_CYGDBG_DIAG_BUF |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
192 enable_diag_uart = 0; |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
193 HAL_CLOCK_READ(&_time); |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
194 _stime = (int)cyg_current_time(); |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
195 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
|
196 enable_diag_uart = _enable; |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
197 #endif // CYGDBG_DIAG_BUF |
| 2 | 198 if (cbuf->abort) { |
| 199 // Give up! | |
| 200 cbuf->abort = false; | |
| 201 cbuf->waiting = false; | |
| 202 res = -EINTR; | |
| 203 break; | |
| 204 } | |
| 205 } | |
| 206 } | |
| 207 cyg_drv_dsr_unlock(); | |
| 208 } | |
|
20
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
209 cyg_drv_isr_lock(); |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
210 #ifdef XX_CYGDBG_DIAG_BUF |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
211 enable_diag_uart = 0; |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
212 HAL_CLOCK_READ(&_time); |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
213 _stime = (int)cyg_current_time(); |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
214 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
|
215 enable_diag_uart = _enable; |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
216 #endif // CYGDBG_DIAG_BUF |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
217 cyg_drv_isr_unlock(); |
| 2 | 218 cyg_drv_mutex_unlock(&cbuf->lock); |
| 219 return res; | |
| 220 } | |
| 221 | |
| 222 static Cyg_ErrNo | |
| 223 serial_get_config(cyg_io_handle_t handle, cyg_uint32 key, void *xbuf, cyg_uint32 *len) | |
| 224 { | |
| 225 cyg_devtab_entry_t *t = (cyg_devtab_entry_t *)handle; | |
| 226 serial_channel *chan = (serial_channel *)t->priv; | |
| 227 cyg_serial_info_t *buf = (cyg_serial_info_t *)xbuf; | |
| 228 Cyg_ErrNo res = ENOERR; | |
| 229 cbuf_t *cbuf = &chan->out_cbuf; | |
| 230 serial_funs *funs = chan->funs; | |
| 231 | |
| 232 switch (key) { | |
| 233 case CYG_IO_GET_CONFIG_SERIAL_INFO: | |
| 234 if (*len < sizeof(cyg_serial_info_t)) { | |
| 235 return -EINVAL; | |
| 236 } | |
| 237 *buf = chan->config; | |
| 238 *len = sizeof(chan->config); | |
| 239 break; | |
| 240 case CYG_IO_GET_CONFIG_SERIAL_OUTPUT_DRAIN: | |
| 241 // Wait for any pending output to complete | |
| 242 if (cbuf->len == 0) break; // Nothing to do if not buffered | |
| 243 cyg_drv_mutex_lock(&cbuf->lock); // Stop any further output processing | |
| 244 cyg_drv_dsr_lock(); | |
| 245 while (cbuf->pending || (cbuf->get != cbuf->put)) { | |
| 246 cbuf->waiting = true; | |
| 247 cyg_drv_cond_wait(&cbuf->wait); | |
| 248 } | |
| 249 cyg_drv_dsr_unlock(); | |
| 250 cyg_drv_mutex_unlock(&cbuf->lock); | |
| 251 break; | |
| 252 case CYG_IO_GET_CONFIG_SERIAL_INPUT_FLUSH: | |
| 253 // Flush any buffered input | |
| 254 cbuf = &chan->in_cbuf; | |
| 255 if (cbuf->len == 0) break; // Nothing to do if not buffered | |
| 256 cyg_drv_mutex_lock(&cbuf->lock); // Stop any further input processing | |
| 257 cyg_drv_dsr_lock(); | |
| 258 if (cbuf->waiting) { | |
| 259 cbuf->abort = true; | |
| 260 cyg_drv_cond_signal(&cbuf->wait); | |
| 261 cbuf->waiting = false; | |
| 262 } | |
| 263 cbuf->get = cbuf->put; // Flush buffered input | |
| 264 cyg_drv_dsr_unlock(); | |
| 265 cyg_drv_mutex_unlock(&cbuf->lock); | |
| 266 break; | |
| 267 case CYG_IO_GET_CONFIG_SERIAL_ABORT: | |
| 268 // Abort any outstanding I/O, including blocked reads | |
| 269 // Caution - assumed to be called from 'timeout' (i.e. DSR) code | |
| 270 cbuf = &chan->in_cbuf; | |
| 271 if (cbuf->len != 0) { | |
| 272 cbuf->abort = true; | |
| 273 cyg_drv_cond_signal(&cbuf->wait); | |
| 274 } | |
| 275 cbuf = &chan->out_cbuf; | |
| 276 if (cbuf->len != 0) { | |
| 277 cbuf->abort = true; | |
| 278 cyg_drv_cond_signal(&cbuf->wait); | |
| 279 } | |
| 280 break; | |
| 281 case CYG_IO_GET_CONFIG_SERIAL_OUTPUT_FLUSH: | |
| 282 // Throw away any pending output | |
| 283 if (cbuf->len == 0) break; // Nothing to do if not buffered | |
| 284 cyg_drv_mutex_lock(&cbuf->lock); // Stop any further output processing | |
| 285 cyg_drv_dsr_lock(); | |
| 286 if (cbuf->get != cbuf->put) { | |
| 287 cbuf->get = cbuf->put; // Empties queue! | |
| 288 (funs->stop_xmit)(chan); // Done with transmit | |
| 289 } | |
| 290 if (cbuf->waiting) { | |
| 291 cbuf->abort = true; | |
| 292 cyg_drv_cond_signal(&cbuf->wait); | |
| 293 cbuf->waiting = false; | |
| 294 } | |
| 295 cyg_drv_dsr_unlock(); | |
| 296 cyg_drv_mutex_unlock(&cbuf->lock); | |
| 297 break; | |
| 298 default: | |
| 299 res = -EINVAL; | |
| 300 } | |
| 301 return res; | |
| 302 } | |
| 303 | |
| 304 static Cyg_ErrNo | |
| 305 serial_set_config(cyg_io_handle_t handle, cyg_uint32 key, const void *xbuf, cyg_uint32 *len) | |
| 306 { | |
| 307 Cyg_ErrNo res = ENOERR; | |
| 308 cyg_devtab_entry_t *t = (cyg_devtab_entry_t *)handle; | |
| 309 serial_channel *chan = (serial_channel *)t->priv; | |
| 310 serial_funs *funs = chan->funs; | |
| 311 cyg_serial_info_t *buf = (cyg_serial_info_t *)xbuf; | |
| 312 | |
| 313 switch (key) { | |
| 314 case CYG_IO_SET_CONFIG_SERIAL_INFO: | |
| 315 if (*len != sizeof(cyg_serial_info_t)) { | |
| 316 return -EINVAL; | |
| 317 } | |
| 318 if ((funs->set_config)(chan, buf) != true) { | |
| 319 // Device is not happy with paramters or they cannot be set | |
| 320 res = -EINVAL; | |
| 321 } | |
| 322 break; | |
| 323 default: | |
| 324 res = -EINVAL; | |
| 325 } | |
| 326 return res; | |
| 327 } | |
| 328 | |
| 329 static void | |
| 330 serial_xmt_char(serial_channel *chan) | |
| 331 { | |
| 332 cbuf_t *cbuf = &chan->out_cbuf; | |
| 333 serial_funs *funs = chan->funs; | |
| 334 unsigned char c; | |
| 335 int space; | |
| 336 | |
| 337 while (cbuf->get != cbuf->put) { | |
| 338 c = cbuf->data[cbuf->get]; | |
| 339 if ((funs->putc)(chan, c)) { | |
| 340 cbuf->get++; | |
| 341 if (cbuf->get == cbuf->len) cbuf->get = 0; | |
| 342 if (cbuf->waiting) { | |
| 343 // See if there is now enough room to restart writer | |
| 344 space = (cbuf->len + cbuf->get) - cbuf->put; | |
| 345 if (space > cbuf->len) space -= cbuf->len; | |
| 346 if (space >= cbuf->low_water) { | |
| 347 cbuf->waiting = false; | |
| 348 cyg_drv_cond_broadcast(&cbuf->wait); | |
| 349 } | |
| 350 } | |
| 351 } else { | |
| 352 return; // Need to wait for more space | |
| 353 } | |
| 354 } | |
| 355 (funs->stop_xmit)(chan); // Done with transmit | |
| 356 if (cbuf->waiting) { | |
| 357 cbuf->waiting = false; | |
| 358 cyg_drv_cond_signal(&cbuf->wait); | |
| 359 } | |
| 360 } | |
| 361 | |
| 362 static void | |
| 363 serial_rcv_char(serial_channel *chan, unsigned char c) | |
| 364 { | |
| 365 cbuf_t *cbuf = &chan->in_cbuf; | |
| 366 | |
| 367 cbuf->data[cbuf->put++] = c; | |
| 368 if (cbuf->put == cbuf->len) cbuf->put = 0; | |
| 369 if (cbuf->waiting) { | |
|
20
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
370 #ifdef XX_CYGDBG_DIAG_BUF |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
371 extern int enable_diag_uart; |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
372 int _enable = enable_diag_uart; |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
373 int _time, _stime; |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
374 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
|
375 enable_diag_uart = 0; |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
376 HAL_CLOCK_READ(&_time); |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
377 _stime = (int)cyg_current_time(); |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
378 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
|
379 enable_diag_uart = _enable; |
|
5f5102441818
Merge from eCos master repository on 1999-07-02-23:17:07-BST
jlarmour
parents:
4
diff
changeset
|
380 #endif // CYGDBG_DIAG_BUF |
| 2 | 381 cbuf->waiting = false; |
| 382 cyg_drv_cond_signal(&cbuf->wait); | |
| 383 } | |
| 384 } | |
| 385 |
