Fix connect accumulation; add display sinks to enum-devices
- controller_cli: drain semaphore and reset pending_cmd in do_connect so stale posts from old connection don't unblock the next command - protocol: add Proto_Display_Device_Info; extend proto_write_enum_devices_response and proto_read_enum_devices_response with display section; backward-compatible (absent in older messages) - node: handle_enum_devices snapshots active Display_Slots under mutex and includes them in the response - controller_cli: on_display callback prints display window info in enum-devices output - query_cli: updated to pass NULL on_display (no display interest) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -829,10 +829,31 @@ static void handle_enum_devices(struct Node *node,
|
||||
standalone_count++;
|
||||
}
|
||||
|
||||
struct Proto_Display_Device_Info disp_infos[MAX_DISPLAYS];
|
||||
int disp_count = 0;
|
||||
for (int i = 0; i < MAX_DISPLAYS; i++) {
|
||||
struct Display_Slot *d = &node->displays[i];
|
||||
pthread_mutex_lock(&d->mutex);
|
||||
int snap = d->allocated && d->wanted_state == DISP_OPEN;
|
||||
struct Proto_Display_Device_Info info = {
|
||||
.stream_id = d->stream_id,
|
||||
.win_x = (int16_t)d->win_x,
|
||||
.win_y = (int16_t)d->win_y,
|
||||
.win_w = (uint16_t)d->win_w,
|
||||
.win_h = (uint16_t)d->win_h,
|
||||
.scale = (uint8_t)d->scale,
|
||||
.anchor = (uint8_t)d->anchor,
|
||||
};
|
||||
pthread_mutex_unlock(&d->mutex);
|
||||
if (!snap) { continue; }
|
||||
disp_infos[disp_count++] = info;
|
||||
}
|
||||
|
||||
struct App_Error e = proto_write_enum_devices_response(conn,
|
||||
request_id, PROTO_STATUS_OK,
|
||||
mdevs, (uint16_t)node->devices.media_count,
|
||||
standalone, (uint16_t)standalone_count);
|
||||
standalone, (uint16_t)standalone_count,
|
||||
disp_infos, (uint16_t)disp_count);
|
||||
if (!APP_IS_OK(e)) { app_error_print(&e); }
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user