Ticket #1184: 6200ch.c.diff
File 6200ch.c.diff, 3.3 KB (added by , 18 years ago) |
---|
-
contrib/channel_changers/6200ch.c
55 55 AVC1394_6200_OPERAND_SET 56 56 57 57 #define STARTING_NODE 1 /* skip 1394 nodes to avoid error msgs */ 58 #define STARTING_PORT 0 58 59 59 60 void usage() 60 61 { 61 fprintf(stderr, "Usage: 6200ch [-v] [-n NODE] <channel_num>\n");62 fprintf(stderr, "Usage: 6200ch [-v] [-n NODE] [-p PORT] [-o] <channel_num>\n"); 62 63 fprintf(stderr, "-v Print additional verbose output\n"); 63 64 fprintf(stderr, "-n NODE node to start device scanning on\n"); 65 fprintf(stderr, "-p PORT port/adapter to use (default:0)\n"); 66 fprintf(stderr, "-o use old method to change channels\n"); 64 67 exit(1); 65 68 } 66 69 … … 70 73 int device = -1; 71 74 int i; 72 75 int verbose = 0; 76 int old = 0; 73 77 quadlet_t cmd[2]; 74 78 int dig[3]; 75 79 int chn = 550; 76 80 77 81 /* some people experience crashes when starting on node 1 */ 78 82 int starting_node = STARTING_NODE; 83 int starting_port = STARTING_PORT; 79 84 int c; 80 85 int index; 81 86 … … 83 88 usage(); 84 89 85 90 opterr = 0; 86 while ((c = getopt(argc, argv, "vn: ")) != -1) {91 while ((c = getopt(argc, argv, "vn:p:o")) != -1) { 87 92 switch (c) { 88 93 case 'v': 89 94 verbose = 1; … … 91 96 case 'n': 92 97 starting_node = atoi(optarg); 93 98 break; 99 case 'o': 100 old = 1; 101 break; 102 case 'p': 103 starting_port = atoi(optarg); 104 break; 94 105 default: 95 106 fprintf(stderr, "incorrect command line arguments\n"); 96 107 usage(); … … 120 131 exit(1); 121 132 } 122 133 123 if (raw1394_set_port(handle, 0) < 0) {134 if (raw1394_set_port(handle, starting_port) < 0) { 124 135 perror("couldn't set port"); 125 136 raw1394_destroy_handle(handle); 126 137 exit(1); … … 169 180 exit(1); 170 181 } 171 182 172 dig[2] = (chn % 10); 173 dig[1] = (chn % 100) / 10; 174 dig[0] = (chn % 1000) / 100; 183 if (old) { 184 dig[2] = (chn % 10); 185 dig[1] = (chn % 100) / 10; 186 dig[0] = (chn % 1000) / 100; 175 187 176 if (verbose)177 178 179 188 if (verbose) 189 printf("AV/C Command: %d%d%d = Op1=0x%08X Op2=0x%08X Op3=0x%08X\n", 190 dig[0], dig[1], dig[2], 191 CTL_CMD0 | dig[0], CTL_CMD0 | dig[1], CTL_CMD0 | dig[2]); 180 192 181 for (i=0; i<3; i++) {182 183 193 for (i=0; i<3; i++) { 194 cmd[0] = CTL_CMD0 | dig[i]; 195 cmd[1] = 0x0; 184 196 185 avc1394_transaction_block(handle, device, cmd, 2, 1); 186 usleep(500000); // small delay for button to register 197 avc1394_transaction_block(handle, device, cmd, 2, 1); 198 usleep(500000); // small delay for button to register 199 } 187 200 } 188 201 202 else { 203 cmd[0] = CTL_CMD0 | 0x67; 204 cmd[1] = (0x04 << 24) | (chn << 8) | 0x000000FF; 205 cmd[2] = 0xFF << 24; 206 207 if (verbose) 208 printf("AV/C command for channel %d = 0x%08X %08X %08X\n", 209 chn, cmd[0], cmd[1], cmd[2]); 210 211 avc1394_transaction_block(handle, device, cmd, 3, 1); 212 } 213 189 214 raw1394_destroy_handle(handle); 190 215 exit(0); 191 216 }