Changeset 7ddc2c7 in mainline for kernel/generic/src
- Timestamp:
- 2014-03-17T15:00:13Z (11 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 9df6b0f
- Parents:
- e1fc679a
- Location:
- kernel/generic/src/console
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/console/chardev.c
re1fc679a r7ddc2c7 94 94 { 95 95 if (atomic_get(&haltstate)) { 96 /* If we are here, we are hopefully on the processor that 96 /* 97 * If we are here, we are hopefully on the processor that 97 98 * issued the 'halt' command, so proceed to read the character 98 99 * directly from input … … 115 116 waitq_sleep(&indev->wq); 116 117 irq_spinlock_lock(&indev->lock, true); 117 wchar_t ch = indev->buffer[(indev->index - indev->counter) % INDEV_BUFLEN]; 118 wchar_t ch = indev->buffer[(indev->index - indev->counter) % 119 INDEV_BUFLEN]; 118 120 indev->counter--; 119 121 irq_spinlock_unlock(&indev->lock, true); 120 122 121 123 return ch; 124 } 125 126 /** Signal out-of-band condition 127 * 128 * @param indev Input character device. 129 * @param signal Out-of-band condition to signal. 130 * 131 */ 132 void indev_signal(indev_t *indev, indev_signal_t signal) 133 { 134 if ((indev != NULL) && (indev->op != NULL) && 135 (indev->op->signal != NULL)) 136 indev->op->signal(indev, signal); 122 137 } 123 138 -
kernel/generic/src/console/console.c
re1fc679a r7ddc2c7 84 84 static outdev_t stdout_source; 85 85 86 static void stdin_signal(indev_t *, indev_signal_t); 87 86 88 static indev_operations_t stdin_ops = { 87 .poll = NULL 89 .poll = NULL, 90 .signal = stdin_signal 88 91 }; 89 92 90 93 static void stdout_write(outdev_t *, wchar_t); 91 94 static void stdout_redraw(outdev_t *); 95 static void stdout_scroll_up(outdev_t *); 96 static void stdout_scroll_down(outdev_t *); 92 97 93 98 static outdev_operations_t stdout_ops = { 94 99 .write = stdout_write, 95 .redraw = stdout_redraw 100 .redraw = stdout_redraw, 101 .scroll_up = stdout_scroll_up, 102 .scroll_down = stdout_scroll_down 96 103 }; 97 104 … … 113 120 } 114 121 122 static void stdin_signal(indev_t *indev, indev_signal_t signal) 123 { 124 switch (signal) { 125 case INDEV_SIGNAL_SCROLL_UP: 126 if (stdout != NULL) 127 stdout_scroll_up(stdout); 128 break; 129 case INDEV_SIGNAL_SCROLL_DOWN: 130 if (stdout != NULL) 131 stdout_scroll_down(stdout); 132 break; 133 } 134 } 135 115 136 void stdout_wire(outdev_t *outdev) 116 137 { … … 136 157 if ((sink) && (sink->op->redraw)) 137 158 sink->op->redraw(sink); 159 } 160 } 161 162 static void stdout_scroll_up(outdev_t *dev) 163 { 164 list_foreach(dev->list, link, outdev_t, sink) { 165 if ((sink) && (sink->op->scroll_up)) 166 sink->op->scroll_up(sink); 167 } 168 } 169 170 static void stdout_scroll_down(outdev_t *dev) 171 { 172 list_foreach(dev->list, link, outdev_t, sink) { 173 if ((sink) && (sink->op->scroll_down)) 174 sink->op->scroll_down(sink); 138 175 } 139 176 } … … 229 266 } 230 267 } 268 231 269 if (chr_encode(ch, buf, &offset, buflen - 1) == EOK) { 232 270 putchar(ch); … … 264 302 265 303 /** Flush characters that are stored in the output buffer 266 * 304 * 267 305 */ 268 306 void kio_flush(void) … … 294 332 295 333 /** Put a character into the output buffer. 296 * 334 * 297 335 * The caller is required to hold kio_lock 298 336 */
Note:
See TracChangeset
for help on using the changeset viewer.