Lines Matching defs:source

2 // Use of this source code is governed by a BSD-style license that can be
39 static void update_signals(usb_midi_source_t* source) {
41 if (source->dead) {
43 } else if (!list_is_empty(&source->completed_reads)) {
46 if (new_signals != source->signals) {
47 device_state_clr_set(source->mxdev,
48 source->signals & ~new_signals,
49 new_signals & ~source->signals);
50 source->signals = new_signals;
55 usb_midi_source_t* source = (usb_midi_source_t*)cookie;
58 usb_req_release(&source->usb, req);
62 mtx_lock(&source->mutex);
65 list_add_tail(&source->completed_reads, &req->node);
67 usb_request_queue(&source->usb, req);
69 update_signals(source);
70 mtx_unlock(&source->mutex);
74 usb_midi_source_t* source = ctx;
75 source->dead = true;
76 update_signals(source);
77 device_remove(source->mxdev);
80 static void usb_midi_source_free(usb_midi_source_t* source) {
82 while ((req = list_remove_head_type(&source->free_read_reqs, usb_request_t, node)) != NULL) {
83 usb_req_release(&source->usb, req);
85 while ((req = list_remove_head_type(&source->completed_reads, usb_request_t, node)) != NULL) {
86 usb_req_release(&source->usb, req);
88 free(source);
92 usb_midi_source_t* source = ctx;
93 usb_midi_source_free(source);
97 usb_midi_source_t* source = ctx;
100 mtx_lock(&source->mutex);
101 if (source->open) {
104 source->open = true;
110 while ((req = list_remove_head_type(&source->completed_reads, usb_request_t, node)) != NULL) {
111 usb_request_queue(&source->usb, req);
113 while ((req = list_remove_head_type(&source->free_read_reqs, usb_request_t, node)) != NULL) {
114 usb_request_queue(&source->usb, req);
116 mtx_unlock(&source->mutex);
122 usb_midi_source_t* source = ctx;
124 mtx_lock(&source->mutex);
125 source->open = false;
126 mtx_unlock(&source->mutex);
133 usb_midi_source_t* source = ctx;
135 if (source->dead) {
142 mtx_lock(&source->mutex);
144 list_node_t* node = list_peek_head(&source->completed_reads);
152 usb_req_copy_from(&source->usb, req, data, 3, 1);
154 list_remove_head(&source->completed_reads);
155 list_add_head(&source->free_read_reqs, &req->node);
156 while ((node = list_remove_head(&source->free_read_reqs)) != NULL) {
158 usb_request_queue(&source->usb, req);
162 update_signals(source);
163 mtx_unlock(&source->mutex);
196 usb_midi_source_t* source = calloc(1, sizeof(usb_midi_source_t));
197 if (!source) {
202 list_initialize(&source->free_read_reqs);
203 list_initialize(&source->completed_reads);
204 source->usb_mxdev = device;
205 memcpy(&source->usb, usb, sizeof(source->usb));
215 usb_midi_source_free(source);
220 req->cookie = source;
221 list_add_head(&source->free_read_reqs, &req->node);
225 snprintf(name, sizeof(name), "usb-midi-source-%d", index);
230 .ctx = source,
235 zx_status_t status = device_add(device, &args, &source->mxdev);
238 usb_midi_source_free(source);