Changes in / [affaf2e:135486d] in mainline
- Files:
-
- 4 deleted
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
boot/Makefile.common
raffaf2e r135486d 108 108 $(USPACE_PATH)/srv/fs/ext4fs/ext4fs \ 109 109 $(USPACE_PATH)/srv/hid/remcons/remcons \ 110 $(USPACE_PATH)/srv/hid/isdv4_tablet/isdv4_tablet \111 110 $(USPACE_PATH)/srv/net/ethip/ethip \ 112 111 $(USPACE_PATH)/srv/net/inetsrv/inetsrv \ -
uspace/Makefile
raffaf2e r135486d 101 101 srv/hid/console \ 102 102 srv/hid/s3c24xx_ts \ 103 srv/hid/isdv4_tablet \104 103 srv/hid/fb \ 105 104 srv/hid/input \ -
uspace/app/sportdmp/sportdmp.c
raffaf2e r135486d 140 140 ssize_t i; 141 141 for (i = 0; i < read; i++) { 142 printf("%02hhx ", buf[i]); 142 if ((buf[i] >= 32) && (buf[i] < 128)) 143 putchar((wchar_t) buf[i]); 144 else 145 putchar('.'); 146 fflush(stdout); 143 147 } 144 fflush(stdout);145 148 } 146 149 -
uspace/drv/char/ns8250/cyclic_buffer.h
raffaf2e r135486d 36 36 #define CYCLIC_BUFFER_H_ 37 37 38 #define BUF_LEN 409638 #define BUF_LEN 256 39 39 40 40 typedef struct cyclic_buffer { -
uspace/drv/char/ns8250/ns8250.c
raffaf2e r135486d 82 82 /** Interrupt ID Register definition. */ 83 83 #define NS8250_IID_ACTIVE (1 << 0) 84 #define NS8250_IID_CAUSE_MASK 0x0e85 #define NS8250_IID_CAUSE_RXSTATUS 0x0686 84 87 85 /** FIFO Control Register definition. */ … … 181 179 /** The fibril mutex for synchronizing the access to the device. */ 182 180 fibril_mutex_t mutex; 183 /** Indicates that some data has become available */184 fibril_condvar_t input_buffer_available;185 181 /** True if device is removed. */ 186 182 bool removed; … … 242 238 { 243 239 ns8250_t *ns = NS8250(fun); 244 int ret = 0; 245 246 if (count == 0) return 0; 240 int ret = EOK; 247 241 248 242 fibril_mutex_lock(&ns->mutex); 249 while (buf_is_empty(&ns->input_buffer))250 fibril_condvar_wait(&ns->input_buffer_available, &ns->mutex);251 243 while (!buf_is_empty(&ns->input_buffer) && (size_t)ret < count) { 252 244 buf[ret] = (char)buf_pop_front(&ns->input_buffer); … … 468 460 { 469 461 /* Interrupt when data received. */ 470 pio_write_8(®s->ier, NS8250_IER_RXREADY | NS8250_IER_RXSTATUS);462 pio_write_8(®s->ier, NS8250_IER_RXREADY); 471 463 pio_write_8(®s->mcr, NS8250_MCR_DTR | NS8250_MCR_RTS 472 464 | NS8250_MCR_OUT2); … … 507 499 async_exchange_end(exch); 508 500 509 /* Read LSR to clear possible previous LSR interrupt */510 pio_read_8(&ns->regs->lsr);511 512 501 /* Enable interrupt on the serial port. */ 513 502 ns8250_port_interrupts_enable(ns->regs); … … 706 695 /* 8 bits, no parity, two stop bits. */ 707 696 ns8250_port_set_com_props(ns->regs, SERIAL_NO_PARITY, 8, 2); 708 /* 709 * Enable FIFO, clear them, with 4-byte threshold for greater 710 * reliability. 711 */ 697 /* Enable FIFO, clear them, with 14-byte threshold. */ 712 698 pio_write_8(&ns->regs->iid, NS8250_FCR_FIFOENABLE 713 | NS8250_FCR_RXFIFORESET | NS8250_FCR_TXFIFORESET 714 | NS8250_FCR_RXTRIGGERLOW );699 | NS8250_FCR_RXFIFORESET | NS8250_FCR_TXFIFORESET 700 | NS8250_FCR_RXTRIGGERLOW | NS8250_FCR_RXTRIGGERHI); 715 701 /* 716 702 * RTS/DSR set (Request to Send and Data Terminal Ready lines enabled), … … 745 731 bool cont = true; 746 732 747 fibril_mutex_lock(&ns->mutex);748 733 while (cont) { 734 fibril_mutex_lock(&ns->mutex); 735 749 736 cont = ns8250_received(regs); 750 737 if (cont) { … … 752 739 753 740 if (ns->client_connected) { 754 bool buf_was_empty = buf_is_empty(&ns->input_buffer);755 741 if (!buf_push_back(&ns->input_buffer, val)) { 756 742 ddf_msg(LVL_WARN, "Buffer overflow on " 757 743 "%s.", ns->dev->name); 758 break;759 744 } else { 760 745 ddf_msg(LVL_DEBUG2, "Character %c saved " 761 746 "to the buffer of %s.", 762 747 val, ns->dev->name); 763 if (buf_was_empty)764 fibril_condvar_broadcast(&ns->input_buffer_available);765 748 } 766 749 } 767 750 } 768 } 769 fibril_mutex_unlock(&ns->mutex); 770 fibril_yield(); 751 752 fibril_mutex_unlock(&ns->mutex); 753 fibril_yield(); 754 } 771 755 } 772 756 773 757 /** The interrupt handler. 774 758 * 775 * The serial port is initialized to interrupt when some data come or line 776 * status register changes, so the interrupt is handled by reading the incoming 777 * data and reading the line status register. 759 * The serial port is initialized to interrupt when some data come, so the 760 * interrupt is handled by reading the incomming data. 778 761 * 779 762 * @param dev The serial port device. … … 782 765 ipc_call_t *icall) 783 766 { 784 ns8250_t *ns = NS8250_FROM_DEV(dev); 785 786 uint8_t iir = pio_read_8(&ns->regs->iid); 787 if ((iir & NS8250_IID_CAUSE_MASK) == NS8250_IID_CAUSE_RXSTATUS) { 788 uint8_t lsr = pio_read_8(&ns->regs->lsr); 789 if (lsr & NS8250_LSR_OE) { 790 ddf_msg(LVL_WARN, "Overrun error on %s", ns->dev->name); 791 } 792 } 793 794 ns8250_read_from_device(ns); 767 ns8250_read_from_device(NS8250_FROM_DEV(dev)); 795 768 } 796 769 … … 838 811 839 812 fibril_mutex_initialize(&ns->mutex); 840 fibril_condvar_initialize(&ns->input_buffer_available);841 813 ns->dev = dev; 842 814 … … 1081 1053 static void ns8250_init(void) 1082 1054 { 1083 ddf_log_init(NAME, LVL_ WARN);1055 ddf_log_init(NAME, LVL_ERROR); 1084 1056 1085 1057 ns8250_dev_ops.open = &ns8250_open; -
uspace/lib/c/include/ipc/input.h
raffaf2e r135486d 46 46 INPUT_EVENT_KEY = IPC_FIRST_USER_METHOD, 47 47 INPUT_EVENT_MOVE, 48 INPUT_EVENT_ABS_MOVE,49 48 INPUT_EVENT_BUTTON 50 49 } input_notif_t; -
uspace/lib/c/include/ipc/mouseev.h
raffaf2e r135486d 47 47 typedef enum { 48 48 MOUSEEV_MOVE_EVENT = IPC_FIRST_USER_METHOD, 49 MOUSEEV_ABS_MOVE_EVENT,50 49 MOUSEEV_BUTTON_EVENT 51 50 } mouseev_notif_t; -
uspace/srv/hid/console/console.c
raffaf2e r135486d 383 383 384 384 fb_pointer_update(fb_sess, mouse.x, mouse.y, true); 385 }386 387 static void cons_mouse_abs_move(sysarg_t x, sysarg_t y,388 sysarg_t max_x, sysarg_t max_y)389 {390 if (max_x && max_y) {391 mouse.x = limit(x * xres / max_x, 0, xres);392 mouse.y = limit(y * yres / max_y, 0, yres);393 394 fb_pointer_update(fb_sess, mouse.x, mouse.y, true);395 }396 385 } 397 386 … … 514 503 async_answer_0(callid, EOK); 515 504 break; 516 case INPUT_EVENT_ABS_MOVE:517 cons_mouse_abs_move(IPC_GET_ARG1(call), IPC_GET_ARG2(call),518 IPC_GET_ARG3(call), IPC_GET_ARG4(call));519 async_answer_0(callid, EOK);520 break;521 505 case INPUT_EVENT_BUTTON: 522 506 /* Got pointer button press/release event */ -
uspace/srv/hid/input/generic/input.c
raffaf2e r135486d 191 191 } 192 192 193 /** Mouse pointer has moved in absolute mode. */194 void mouse_push_event_abs_move(mouse_dev_t *mdev, unsigned int x, unsigned int y,195 unsigned int max_x, unsigned int max_y)196 {197 if (max_x && max_y) {198 async_exch_t *exch = async_exchange_begin(client_sess);199 async_msg_4(exch, INPUT_EVENT_ABS_MOVE, x, y, max_x, max_y);200 async_exchange_end(exch);201 }202 }203 204 193 /** Mouse button has been pressed. */ 205 194 void mouse_push_event_button(mouse_dev_t *mdev, int bnum, int press) -
uspace/srv/hid/input/include/mouse.h
raffaf2e r135486d 63 63 extern void mouse_push_data(mouse_dev_t *, sysarg_t); 64 64 extern void mouse_push_event_move(mouse_dev_t *, int, int, int); 65 extern void mouse_push_event_abs_move(mouse_dev_t *, unsigned int, unsigned int,66 unsigned int, unsigned int);67 65 extern void mouse_push_event_button(mouse_dev_t *, int, int); 68 66 -
uspace/srv/hid/input/proto/mousedev.c
raffaf2e r135486d 96 96 retval = EOK; 97 97 break; 98 case MOUSEEV_ABS_MOVE_EVENT:99 mouse_push_event_abs_move(mousedev->mouse_dev,100 IPC_GET_ARG1(call), IPC_GET_ARG2(call),101 IPC_GET_ARG3(call), IPC_GET_ARG4(call));102 retval = EOK;103 break;104 98 case MOUSEEV_BUTTON_EVENT: 105 99 mouse_push_event_button(mousedev->mouse_dev,
Note:
See TracChangeset
for help on using the changeset viewer.