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,16 +166,10 @@ bool parse_command(struct videohub_data *data, char *cmd) {
166 166
 
167 167
 		case CMD_VIDEO_OUTPUT_LOCKS:
168 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 175
 			break;
@@ -274,10 +268,8 @@ void prepare_cmd_entry(struct videohub_data *d, struct vcmd_entry *e) {
274 268
 			e->port_no1 = search_video_output_name(d, e->param1);
275 269
 			if (!e->port_no1)
276 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 273
 		break;
282 274
 	case CMD_VIDEO_OUTPUT_ROUTING:
283 275
 		if (e->port_no1 == 0 || e->port_no1 > d->device.num_video_outputs) {
@@ -314,7 +306,7 @@ void format_cmd_text(struct vcmd_entry *e, char *buf, unsigned int bufsz) {
314 306
 		break;
315 307
 	case CMD_VIDEO_OUTPUT_LOCKS:
316 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 310
 		break;
319 311
 	case CMD_VIDEO_OUTPUT_ROUTING:
320 312
 		snprintf(buf, bufsz, "%s:\n%u %u\n\n", get_cmd_text(e->cmd),
@@ -351,7 +343,7 @@ void show_cmd(struct videohub_data *d, struct vcmd_entry *e) {
351 343
 	case CMD_VIDEO_OUTPUT_LOCKS:
352 344
 		printf("%s%s video output %d - \"%s\"\n",
353 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 347
 			e->port_no1, d->outputs[e->port_no1 - 1].name
356 348
 		);
357 349
 		break;

+ 1
- 1
cmd.h View File

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

+ 7
- 2
data.h View File

@@ -34,6 +34,12 @@ struct device_desc {
34 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 43
 struct input_desc {
38 44
 	char			name[MAX_NAME_LEN];
39 45
 	// Port statuses are supported only by Universal Videohub
@@ -43,10 +49,9 @@ struct input_desc {
43 49
 };
44 50
 
45 51
 struct output_desc {
52
+	enum port_lock	lock;
46 53
 	char			name[MAX_NAME_LEN];
47 54
 	unsigned int	routed_to;
48
-	bool			locked;
49
-	bool			locked_other;
50 55
 	char			status[8];
51 56
 };
52 57
 

+ 11
- 2
display.c View File

@@ -94,6 +94,15 @@ void print_device_video_inputs(struct videohub_data *d) {
94 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 106
 void print_device_video_outputs(struct videohub_data *d) {
98 107
 	unsigned int i, len = 68;
99 108
 	if (!d->device.num_video_outputs)
@@ -105,7 +114,7 @@ void print_device_video_outputs(struct videohub_data *d) {
105 114
 	for(i = 0; i < d->device.num_video_outputs; i++) {
106 115
 		printf("  | %2d | %c | %-24s | %-24s | %c |\n",
107 116
 			i + 1,
108
-			d->outputs[i].locked ? (d->outputs[i].locked_other ? 'L' : 'O') : ' ',
117
+			port_lock_symbol(d->outputs[i].lock),
109 118
 			d->outputs[i].name,
110 119
 			d->inputs[d->outputs[i].routed_to].name,
111 120
 			format_status(d->outputs[i].status)
@@ -125,7 +134,7 @@ void print_device_backup(struct videohub_data *d) {
125 134
 	for(i = 0; i < d->device.num_video_outputs; i++)
126 135
 		printf("  --vo-route %2d %2d \\\n", i + 1, d->outputs[i].routed_to + 1);
127 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 138
 			printf("  --vo-unlock %2d --vo-lock %2d%s\n", i + 1, i + 1,
130 139
 				i + 1 < d->device.num_video_outputs ? " \\" : "");
131 140
 		} else {

Loading…
Cancel
Save