Browse Source

Simplify port lock handling.

Georgi Chorbadzhiyski 9 years ago
parent
commit
6f3c4c27cf
4 changed files with 26 additions and 20 deletions
  1. 7
    15
      cmd.c
  2. 1
    1
      cmd.h
  3. 7
    2
      data.h
  4. 11
    2
      display.c

+ 7
- 15
cmd.c View File

166
 
166
 
167
 		case CMD_VIDEO_OUTPUT_LOCKS:
167
 		case CMD_VIDEO_OUTPUT_LOCKS:
168
 			if (valid_slot) {
168
 			if (valid_slot) {
169
-				// L is lock owned by somebody else (set from other IP address)
170
-				// O is lock owned by us (set from our IP address)
171
-				if (slot_data[0] == 'L' || slot_data[0] == 'O') {
172
-					data->outputs[slot_pos].locked = true;
173
-					if (slot_data[0] == 'L')
174
-						data->outputs[slot_pos].locked_other = true;
175
-					else
176
-						data->outputs[slot_pos].locked_other = false;
177
-				} else {
178
-					data->outputs[slot_pos].locked = false;
169
+				switch (slot_data[0]) {
170
+				case 'O': data->outputs[slot_pos].lock = PORT_LOCKED; break;
171
+				case 'L': data->outputs[slot_pos].lock = PORT_LOCKED_OTHER; break;
172
+				default : data->outputs[slot_pos].lock = PORT_UNLOCKED; break;
179
 				}
173
 				}
180
 			}
174
 			}
181
 			break;
175
 			break;
274
 			e->port_no1 = search_video_output_name(d, e->param1);
268
 			e->port_no1 = search_video_output_name(d, e->param1);
275
 			if (!e->port_no1)
269
 			if (!e->port_no1)
276
 				die("Unknown output port number/name: %s", e->param1);
270
 				die("Unknown output port number/name: %s", e->param1);
277
-			e->locked_other = d->outputs[e->port_no1 - 1].locked_other;
278
-		} else {
279
-			e->locked_other = d->outputs[e->port_no1 - 1].locked_other;
280
 		}
271
 		}
272
+		e->lock = d->outputs[e->port_no1 - 1].lock;
281
 		break;
273
 		break;
282
 	case CMD_VIDEO_OUTPUT_ROUTING:
274
 	case CMD_VIDEO_OUTPUT_ROUTING:
283
 		if (e->port_no1 == 0 || e->port_no1 > d->device.num_video_outputs) {
275
 		if (e->port_no1 == 0 || e->port_no1 > d->device.num_video_outputs) {
314
 		break;
306
 		break;
315
 	case CMD_VIDEO_OUTPUT_LOCKS:
307
 	case CMD_VIDEO_OUTPUT_LOCKS:
316
 		snprintf(buf, bufsz, "%s:\n%u %s\n\n", get_cmd_text(e->cmd),
308
 		snprintf(buf, bufsz, "%s:\n%u %s\n\n", get_cmd_text(e->cmd),
317
-			e->port_no1 - 1, e->do_lock ? "O" : (e->locked_other ? "F" : "U"));
309
+			e->port_no1 - 1, e->do_lock ? "O" : (e->lock == PORT_LOCKED_OTHER ? "F" : "U"));
318
 		break;
310
 		break;
319
 	case CMD_VIDEO_OUTPUT_ROUTING:
311
 	case CMD_VIDEO_OUTPUT_ROUTING:
320
 		snprintf(buf, bufsz, "%s:\n%u %u\n\n", get_cmd_text(e->cmd),
312
 		snprintf(buf, bufsz, "%s:\n%u %u\n\n", get_cmd_text(e->cmd),
351
 	case CMD_VIDEO_OUTPUT_LOCKS:
343
 	case CMD_VIDEO_OUTPUT_LOCKS:
352
 		printf("%s%s video output %d - \"%s\"\n",
344
 		printf("%s%s video output %d - \"%s\"\n",
353
 			prefix,
345
 			prefix,
354
-			e->do_lock ? "lock" : (e->locked_other ? "force unlock" : "unlock"),
346
+			e->do_lock ? "lock" : (e->lock == PORT_LOCKED_OTHER ? "force unlock" : "unlock"),
355
 			e->port_no1, d->outputs[e->port_no1 - 1].name
347
 			e->port_no1, d->outputs[e->port_no1 - 1].name
356
 		);
348
 		);
357
 		break;
349
 		break;

+ 1
- 1
cmd.h View File

39
 	unsigned int	port_no1;
39
 	unsigned int	port_no1;
40
 	unsigned int	port_no2;
40
 	unsigned int	port_no2;
41
 	bool			do_lock;
41
 	bool			do_lock;
42
-	bool			locked_other;
42
+	enum port_lock	lock;
43
 };
43
 };
44
 
44
 
45
 void prepare_cmd_entry(struct videohub_data *d, struct vcmd_entry *e);
45
 void prepare_cmd_entry(struct videohub_data *d, struct vcmd_entry *e);

+ 7
- 2
data.h View File

34
 	unsigned int	num_serial_ports;
34
 	unsigned int	num_serial_ports;
35
 };
35
 };
36
 
36
 
37
+enum port_lock {
38
+	PORT_UNLOCKED,
39
+	PORT_LOCKED,
40
+	PORT_LOCKED_OTHER,
41
+};
42
+
37
 struct input_desc {
43
 struct input_desc {
38
 	char			name[MAX_NAME_LEN];
44
 	char			name[MAX_NAME_LEN];
39
 	// Port statuses are supported only by Universal Videohub
45
 	// Port statuses are supported only by Universal Videohub
43
 };
49
 };
44
 
50
 
45
 struct output_desc {
51
 struct output_desc {
52
+	enum port_lock	lock;
46
 	char			name[MAX_NAME_LEN];
53
 	char			name[MAX_NAME_LEN];
47
 	unsigned int	routed_to;
54
 	unsigned int	routed_to;
48
-	bool			locked;
49
-	bool			locked_other;
50
 	char			status[8];
55
 	char			status[8];
51
 };
56
 };
52
 
57
 

+ 11
- 2
display.c View File

94
 	printf("\n");
94
 	printf("\n");
95
 }
95
 }
96
 
96
 
97
+static char port_lock_symbol(enum port_lock p) {
98
+	switch(p) {
99
+	case PORT_UNLOCKED    : return ' ';
100
+	case PORT_LOCKED      : return 'O';
101
+	case PORT_LOCKED_OTHER: return 'L';
102
+	}
103
+	return '?';
104
+}
105
+
97
 void print_device_video_outputs(struct videohub_data *d) {
106
 void print_device_video_outputs(struct videohub_data *d) {
98
 	unsigned int i, len = 68;
107
 	unsigned int i, len = 68;
99
 	if (!d->device.num_video_outputs)
108
 	if (!d->device.num_video_outputs)
105
 	for(i = 0; i < d->device.num_video_outputs; i++) {
114
 	for(i = 0; i < d->device.num_video_outputs; i++) {
106
 		printf("  | %2d | %c | %-24s | %-24s | %c |\n",
115
 		printf("  | %2d | %c | %-24s | %-24s | %c |\n",
107
 			i + 1,
116
 			i + 1,
108
-			d->outputs[i].locked ? (d->outputs[i].locked_other ? 'L' : 'O') : ' ',
117
+			port_lock_symbol(d->outputs[i].lock),
109
 			d->outputs[i].name,
118
 			d->outputs[i].name,
110
 			d->inputs[d->outputs[i].routed_to].name,
119
 			d->inputs[d->outputs[i].routed_to].name,
111
 			format_status(d->outputs[i].status)
120
 			format_status(d->outputs[i].status)
125
 	for(i = 0; i < d->device.num_video_outputs; i++)
134
 	for(i = 0; i < d->device.num_video_outputs; i++)
126
 		printf("  --vo-route %2d %2d \\\n", i + 1, d->outputs[i].routed_to + 1);
135
 		printf("  --vo-route %2d %2d \\\n", i + 1, d->outputs[i].routed_to + 1);
127
 	for(i = 0; i < d->device.num_video_outputs; i++) {
136
 	for(i = 0; i < d->device.num_video_outputs; i++) {
128
-		if (d->outputs[i].locked) {
137
+		if (d->outputs[i].lock != PORT_UNLOCKED) {
129
 			printf("  --vo-unlock %2d --vo-lock %2d%s\n", i + 1, i + 1,
138
 			printf("  --vo-unlock %2d --vo-lock %2d%s\n", i + 1, i + 1,
130
 				i + 1 < d->device.num_video_outputs ? " \\" : "");
139
 				i + 1 < d->device.num_video_outputs ? " \\" : "");
131
 		} else {
140
 		} else {

Loading…
Cancel
Save