Changeset 489c3e7 in mainline
- Timestamp:
- 2011-03-12T11:59:52Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 69334af
- Parents:
- 6105fc0
- Location:
- uspace/drv/usbmouse
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/usbmouse/init.c
r6105fc0 r489c3e7 42 42 43 43 /** Mouse polling endpoint description for boot protocol subclass. */ 44 staticusb_endpoint_description_t poll_endpoint_description = {44 usb_endpoint_description_t poll_endpoint_description = { 45 45 .transfer_type = USB_TRANSFER_INTERRUPT, 46 46 .direction = USB_DIRECTION_IN, … … 50 50 .flags = 0 51 51 }; 52 53 /** Initialize poll pipe.54 *55 * Expects that session is already started on control pipe zero.56 *57 * @param mouse Mouse device.58 * @param my_interface Interface number.59 * @return Error code.60 */61 static int intialize_poll_pipe(usb_mouse_t *mouse, int my_interface)62 {63 assert(usb_endpoint_pipe_is_session_started(&mouse->ctrl_pipe));64 65 int rc;66 67 void *config_descriptor;68 size_t config_descriptor_size;69 70 rc = usb_request_get_full_configuration_descriptor_alloc(71 &mouse->ctrl_pipe, 0, &config_descriptor, &config_descriptor_size);72 if (rc != EOK) {73 return rc;74 }75 76 usb_endpoint_mapping_t endpoint_mapping[1] = {77 {78 .pipe = &mouse->poll_pipe,79 .description = &poll_endpoint_description,80 .interface_no = my_interface81 }82 };83 84 rc = usb_endpoint_pipe_initialize_from_configuration(endpoint_mapping,85 1, config_descriptor, config_descriptor_size, &mouse->wire);86 if (rc != EOK) {87 return rc;88 }89 90 if (!endpoint_mapping[0].present) {91 return ENOENT;92 }93 94 mouse->poll_interval_us = 1000 * endpoint_mapping[0].descriptor->poll_interval;95 96 usb_log_debug("prepared polling endpoint %d (interval %zu).\n",97 mouse->poll_pipe.endpoint_no, mouse->poll_interval_us);98 99 return EOK;100 }101 52 102 53 static void default_connection_handler(ddf_fun_t *, ipc_callid_t, ipc_call_t *); … … 143 94 * @return Error code. 144 95 */ 145 int usb_mouse_create( ddf_dev_t *dev)96 int usb_mouse_create(usb_device_t *dev) 146 97 { 147 98 usb_mouse_t *mouse = malloc(sizeof(usb_mouse_t)); … … 149 100 return ENOMEM; 150 101 } 151 mouse->dev ice= dev;102 mouse->dev = dev; 152 103 mouse->console_phone = -1; 153 104 154 105 int rc; 155 106 156 /* Initialize the backing connection. */157 rc = usb_device_connection_initialize_from_device(&mouse->wire, dev);158 if (rc != EOK) {159 goto leave;160 }161 162 /* Initialize the default control pipe. */163 rc = usb_endpoint_pipe_initialize_default_control(&mouse->ctrl_pipe,164 &mouse->wire);165 if (rc != EOK) {166 goto leave;167 }168 169 rc = usb_endpoint_pipe_start_session(&mouse->ctrl_pipe);170 if (rc != EOK) {171 goto leave;172 }173 174 rc = intialize_poll_pipe(mouse, usb_device_get_assigned_interface(dev));175 176 /* We can ignore error here. */177 usb_endpoint_pipe_end_session(&mouse->ctrl_pipe);178 179 if (rc != EOK) {180 goto leave;181 }182 183 107 /* Create DDF function. */ 184 mouse->mouse_fun = ddf_fun_create(dev , fun_exposed, "mouse");108 mouse->mouse_fun = ddf_fun_create(dev->ddf_dev, fun_exposed, "mouse"); 185 109 if (mouse->mouse_fun == NULL) { 186 110 rc = ENOMEM; -
uspace/drv/usbmouse/main.c
r6105fc0 r489c3e7 44 44 * @return Error code. 45 45 */ 46 static int usbmouse_add_device( ddf_dev_t *dev)46 static int usbmouse_add_device(usb_device_t *dev) 47 47 { 48 48 int rc = usb_mouse_create(dev); … … 52 52 return rc; 53 53 } 54 55 usb_log_debug("Polling pipe at endpoint %d.\n", dev->pipes[0].pipe->endpoint_no); 54 56 55 57 fid_t poll_fibril = fibril_create(usb_mouse_polling_fibril, dev); … … 63 65 64 66 usb_log_info("controlling new mouse (handle %llu).\n", 65 dev-> handle);67 dev->ddf_dev->handle); 66 68 67 69 return EOK; … … 69 71 70 72 /** USB mouse driver ops. */ 71 static driver_ops_t mouse_driver_ops = {73 static usb_driver_ops_t mouse_driver_ops = { 72 74 .add_device = usbmouse_add_device, 73 75 }; 74 76 77 static usb_endpoint_description_t *endpoints[] = { 78 &poll_endpoint_description, 79 NULL 80 }; 81 75 82 /** USB mouse driver. */ 76 static driver_t mouse_driver = {83 static usb_driver_t mouse_driver = { 77 84 .name = NAME, 78 .driver_ops = &mouse_driver_ops 85 .ops = &mouse_driver_ops, 86 .endpoints = endpoints 79 87 }; 80 88 … … 83 91 usb_log_enable(USB_LOG_LEVEL_DEBUG, NAME); 84 92 85 return ddf_driver_main(&mouse_driver);93 return usb_driver_main(&mouse_driver); 86 94 } 87 95 -
uspace/drv/usbmouse/mouse.c
r6105fc0 r489c3e7 51 51 { 52 52 assert(arg != NULL); 53 ddf_dev_t *dev = (ddf_dev_t *) arg;53 usb_device_t *dev = (usb_device_t *) arg; 54 54 usb_mouse_t *mouse = (usb_mouse_t *) dev->driver_data; 55 55 56 56 assert(mouse); 57 57 58 size_t buffer_size = mouse->poll_pipe.max_packet_size;58 size_t buffer_size = POLL_PIPE(dev)->max_packet_size; 59 59 60 60 if (buffer_size < 4) { … … 84 84 */ 85 85 86 rc = usb_endpoint_pipe_start_session( &mouse->poll_pipe);86 rc = usb_endpoint_pipe_start_session(POLL_PIPE(dev)); 87 87 if (rc != EOK) { 88 88 usb_log_warning("Failed to start session, will try again: %s.\n", … … 91 91 } 92 92 93 rc = usb_endpoint_pipe_read( &mouse->poll_pipe,93 rc = usb_endpoint_pipe_read(POLL_PIPE(dev), 94 94 buffer, buffer_size, &actual_size); 95 95 96 usb_endpoint_pipe_end_session( &mouse->poll_pipe);96 usb_endpoint_pipe_end_session(POLL_PIPE(dev)); 97 97 98 98 if (rc != EOK) { -
uspace/drv/usbmouse/mouse.h
r6105fc0 r489c3e7 37 37 #define USBMOUSE_MOUSE_H_ 38 38 39 #include < ddf/driver.h>39 #include <usb/devdrv.h> 40 40 #include <usb/pipes.h> 41 41 #include <time.h> … … 46 46 typedef struct { 47 47 /** Generic device container. */ 48 ddf_dev_t *device;48 usb_device_t *dev; 49 49 /** Function representing the device. */ 50 50 ddf_fun_t *mouse_fun; 51 /** Representation of connection to the device. */52 usb_device_connection_t wire;53 /** Default (zero) control pipe. */54 usb_endpoint_pipe_t ctrl_pipe;55 /** Polling (in) pipe. */56 usb_endpoint_pipe_t poll_pipe;57 51 /** Polling interval in microseconds. */ 58 52 suseconds_t poll_interval_us; … … 61 55 } usb_mouse_t; 62 56 63 int usb_mouse_create(ddf_dev_t *); 57 #define POLL_PIPE(dev) ((dev)->pipes[0].pipe) 58 59 extern usb_endpoint_description_t poll_endpoint_description; 60 61 int usb_mouse_create(usb_device_t *); 64 62 65 63 int usb_mouse_polling_fibril(void *);
Note:
See TracChangeset
for help on using the changeset viewer.