Changeset 64d138b in mainline for uspace/drv/bus/usb/usbdiag/main.c
- Timestamp:
- 2017-12-15T17:21:49Z (7 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 73b0773
- Parents:
- a8723748
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/drv/bus/usb/usbdiag/main.c
ra8723748 r64d138b 38 38 #include <usb/dev/driver.h> 39 39 #include <usb/diag/diag.h> 40 #include <str_error.h> 40 41 41 42 #include "usbdiag.h" … … 44 45 #define NAME "usbdiag" 45 46 46 static void usb_diag_test_impl(ipc_callid_t rid, ipc_call_t *request)47 {48 int x = IPC_GET_ARG1(*request);49 int ret = 4200 + x;50 async_answer_0(rid, ret);51 }52 53 47 static int device_add(usb_device_t *dev) 54 48 { 49 int rc; 55 50 usb_log_info("Adding device '%s'", usb_device_get_name(dev)); 56 51 57 int err; 52 usb_diag_dev_t *diag_dev; 53 if ((rc = usb_diag_dev_create(dev, &diag_dev))) { 54 usb_log_error("Failed create device: %s.\n", str_error(rc)); 55 goto err; 56 } 58 57 59 usb_diag_dev_t *diag_dev; 60 if ((err = usb_diag_dev_create(dev, &diag_dev))) 61 return err; 58 if ((rc = ddf_fun_bind(diag_dev->fun))) { 59 usb_log_error("Failed to bind DDF function: %s.\n", str_error(rc)); 60 goto err_create; 61 } 62 62 63 /* TODO: Register device in some list. */ 64 /* TODO: Register device DDF function. */ 63 if ((rc = ddf_fun_add_to_category(diag_dev->fun, USB_DIAG_CATEGORY))) { 64 usb_log_error("Failed add DDF to category '" 65 USB_DIAG_CATEGORY "': %s.\n", str_error(rc)); 66 goto err_bind; 67 } 65 68 66 69 return EOK; 70 71 err_bind: 72 ddf_fun_unbind(diag_dev->fun); 73 err_create: 74 usb_diag_dev_destroy(diag_dev); 75 err: 76 return rc; 67 77 } 68 78 69 79 static int device_remove(usb_device_t *dev) 70 80 { 81 int rc; 71 82 usb_log_info("Removing device '%s'", usb_device_get_name(dev)); 72 83 … … 74 85 75 86 /* TODO: Make sure nothing is going on with the device. */ 76 /* TODO: Unregister device DDF function. */ 77 /* TODO: Remove device from list */ 87 88 if ((rc = ddf_fun_unbind(diag_dev->fun))) { 89 usb_log_error("Failed to unbind DDF function: %s\n", str_error(rc)); 90 goto err; 91 } 78 92 79 93 usb_diag_dev_destroy(diag_dev); 80 94 81 95 return EOK; 96 97 err: 98 return rc; 82 99 } 83 100 … … 107 124 } 108 125 109 static void connection(ipc_callid_t iid, ipc_call_t *icall, void *arg)110 {111 bool cont = true;112 113 async_answer_0(iid, EOK);114 115 while (cont) {116 ipc_call_t call;117 ipc_callid_t callid = async_get_call(&call);118 119 if (!IPC_GET_IMETHOD(call))120 break;121 122 switch (IPC_GET_IMETHOD(call)) {123 case USB_DIAG_IN_TEST:124 usb_diag_test_impl(callid, &call);125 break;126 default:127 async_answer_0(callid, ENOTSUP);128 break;129 }130 }131 }132 133 static int server_fibril(void *arg)134 {135 // async_set_client_data_constructor(NULL);136 // async_set_client_data_destructor(NULL);137 async_set_fallback_port_handler(connection, NULL);138 // async_event_task_subscribe();139 // service_register();140 async_manager();141 142 /* Never reached. */143 return EOK;144 }145 146 126 /** USB diagnostic driver ops. */ 147 127 static const usb_driver_ops_t diag_driver_ops = { … … 166 146 log_init(NAME); 167 147 168 /* Start usbdiag service. */169 fid_t srv = fibril_create(server_fibril, NULL);170 if (!srv)171 return ENOMEM;172 fibril_add_ready(srv);173 174 148 return usb_driver_main(&diag_driver); 175 149 }
Note:
See TracChangeset
for help on using the changeset viewer.