~ubuntu-branches/ubuntu/oneiric/bluez/oneiric-201105191013

« back to all changes in this revision

Viewing changes to tools/hcitool.c

  • Committer: Bazaar Package Importer
  • Author(s): Robert Ancell
  • Date: 2011-01-07 13:21:49 UTC
  • mfrom: (1.1.25 upstream)
  • Revision ID: james.westby@ubuntu.com-20110107132149-h5s1m62mgctaqdyu
Tags: 4.84-0ubuntu1
New upstream release

Show diffs side-by-side

added added

removed removed

Lines of Context:
66
66
        return 0;
67
67
}
68
68
 
 
69
static void helper_arg(int min_num_arg, int max_num_arg, int *argc,
 
70
                        char ***argv, const char *usage)
 
71
{
 
72
        *argc -= optind;
 
73
        /* too many arguments, but when "max_num_arg < min_num_arg" then no
 
74
                 limiting (prefer "max_num_arg=-1" to gen infinity)
 
75
        */
 
76
        if ( (*argc > max_num_arg) && (max_num_arg >= min_num_arg ) ) {
 
77
                fprintf(stderr, "%s: too many arguments (maximal: %i)\n",
 
78
                                *argv[0], max_num_arg);
 
79
                printf("%s", usage);
 
80
                exit(1);
 
81
        }
 
82
 
 
83
        /* print usage */
 
84
        if (*argc < min_num_arg) {
 
85
                fprintf(stderr, "%s: too few arguments (minimal: %i)\n",
 
86
                                *argv[0], min_num_arg);
 
87
                printf("%s", usage);
 
88
                exit(0);
 
89
        }
 
90
 
 
91
        *argv += optind;
 
92
}
 
93
 
69
94
static char *type2str(uint8_t type)
70
95
{
71
96
        switch (type) {
172
197
        case 0: /* misc */
173
198
                return "";
174
199
        case 1: /* computer */
175
 
                switch(minor) {
 
200
                switch (minor) {
176
201
                case 0:
177
202
                        return "Uncategorized";
178
203
                case 1:
190
215
                }
191
216
                break;
192
217
        case 2: /* phone */
193
 
                switch(minor) {
 
218
                switch (minor) {
194
219
                case 0:
195
220
                        return "Uncategorized";
196
221
                case 1:
210
235
        case 3: /* lan access */
211
236
                if (minor == 0)
212
237
                        return "Uncategorized";
213
 
                switch(minor / 8) {
 
238
                switch (minor / 8) {
214
239
                case 0:
215
240
                        return "Fully available";
216
241
                case 1:
230
255
                }
231
256
                break;
232
257
        case 4: /* audio/video */
233
 
                switch(minor) {
 
258
                switch (minor) {
234
259
                case 0:
235
260
                        return "Uncategorized";
236
261
                case 1:
272
297
        case 5: /* peripheral */ {
273
298
                static char cls_str[48]; cls_str[0] = 0;
274
299
 
275
 
                switch(minor & 48) {
 
300
                switch (minor & 48) {
276
301
                case 16:
277
302
                        strncpy(cls_str, "Keyboard", sizeof(cls_str));
278
303
                        break;
283
308
                        strncpy(cls_str, "Combo keyboard/pointing device", sizeof(cls_str));
284
309
                        break;
285
310
                }
286
 
                if((minor & 15) && (strlen(cls_str) > 0))
 
311
                if ((minor & 15) && (strlen(cls_str) > 0))
287
312
                        strcat(cls_str, "/");
288
313
 
289
 
                switch(minor & 15) {
 
314
                switch (minor & 15) {
290
315
                case 0:
291
316
                        break;
292
317
                case 1:
311
336
                        strncat(cls_str, "(reserved)", sizeof(cls_str) - strlen(cls_str));
312
337
                        break;
313
338
                }
314
 
                if(strlen(cls_str) > 0)
 
339
                if (strlen(cls_str) > 0)
315
340
                        return cls_str;
316
341
        }
317
342
        case 6: /* imaging */
325
350
                        return "Printer";
326
351
                break;
327
352
        case 7: /* wearable */
328
 
                switch(minor) {
 
353
                switch (minor) {
329
354
                case 1:
330
355
                        return "Wrist Watch";
331
356
                case 2:
339
364
                }
340
365
                break;
341
366
        case 8: /* toy */
342
 
                switch(minor) {
 
367
                switch (minor) {
343
368
                case 1:
344
369
                        return "Robot";
345
370
                case 2:
396
421
                        return;
397
422
                }
398
423
        }
 
424
        helper_arg(0, 0, &argc, &argv, dev_help);
399
425
 
400
426
        printf("Devices:\n");
401
427
 
466
492
                        return;
467
493
                }
468
494
        }
 
495
        helper_arg(0, 0, &argc, &argv, inq_help);
469
496
 
470
497
        printf("Inquiring ...\n");
471
498
 
581
608
                        return;
582
609
                }
583
610
        }
 
611
        helper_arg(0, 0, &argc, &argv, scan_help);
584
612
 
585
613
        if (dev_id < 0) {
586
614
                dev_id = hci_get_route(NULL);
790
818
                        return;
791
819
                }
792
820
        }
793
 
        argc -= optind;
794
 
        argv += optind;
795
 
 
796
 
        if (argc < 1) {
797
 
                printf("%s", name_help);
798
 
                return;
799
 
        }
 
821
        helper_arg(1, 1, &argc, &argv, name_help);
800
822
 
801
823
        str2ba(argv[0], &bdaddr);
802
824
 
849
871
                        return;
850
872
                }
851
873
        }
852
 
        argc -= optind;
853
 
        argv += optind;
854
 
 
855
 
        if (argc < 1) {
856
 
                printf("%s", info_help);
857
 
                return;
858
 
        }
 
874
        helper_arg(1, 1, &argc, &argv, info_help);
859
875
 
860
876
        str2ba(argv[0], &bdaddr);
861
877
 
991
1007
                        return;
992
1008
                }
993
1009
        }
 
1010
        helper_arg(0, 0, &argc, &argv, spinq_help);
994
1011
 
995
1012
        if (dev_id < 0)
996
1013
                dev_id = hci_get_route(NULL);
1031
1048
 
1032
1049
static const char *epinq_help =
1033
1050
        "Usage:\n"
1034
 
        "\tspinq\n";
 
1051
        "\tepinq\n";
1035
1052
 
1036
1053
static void cmd_epinq(int dev_id, int argc, char **argv)
1037
1054
{
1044
1061
                        return;
1045
1062
                }
1046
1063
        }
 
1064
        helper_arg(0, 0, &argc, &argv, epinq_help);
1047
1065
 
1048
1066
        if (dev_id < 0)
1049
1067
                dev_id = hci_get_route(NULL);
1092
1110
                        return;
1093
1111
                }
1094
1112
        }
1095
 
        argc -= optind;
1096
 
        argv += optind;
1097
 
 
1098
 
        if (argc < 2) {
1099
 
                printf("%s", cmd_help);
1100
 
                return;
1101
 
        }
 
1113
        helper_arg(2, -1, &argc, &argv, cmd_help);
1102
1114
 
1103
1115
        if (dev_id < 0)
1104
1116
                dev_id = hci_get_route(NULL);
1175
1187
                        return;
1176
1188
                }
1177
1189
        }
 
1190
        helper_arg(0, 0, &argc, &argv, con_help);
1178
1191
 
1179
1192
        printf("Connections:\n");
1180
1193
 
1223
1236
                        return;
1224
1237
                }
1225
1238
        }
1226
 
        argc -= optind;
1227
 
        argv += optind;
1228
 
 
1229
 
        if (argc < 1) {
1230
 
                printf("%s", cc_help);
1231
 
                return;
1232
 
        }
 
1239
        helper_arg(1, 1, &argc, &argv, cc_help);
1233
1240
 
1234
1241
        str2ba(argv[0], &bdaddr);
1235
1242
 
1279
1286
                        return;
1280
1287
                }
1281
1288
        }
1282
 
        argc -= optind;
1283
 
        argv += optind;
1284
 
 
1285
 
        if (argc < 1) {
1286
 
                printf("%s", dc_help);
1287
 
                return;
1288
 
        }
 
1289
        helper_arg(1, 2, &argc, &argv, dc_help);
1289
1290
 
1290
1291
        str2ba(argv[0], &bdaddr);
1291
1292
        reason = (argc > 1) ? atoi(argv[1]) : HCI_OE_USER_ENDED_CONNECTION;
1350
1351
                        return;
1351
1352
                }
1352
1353
        }
1353
 
        argc -= optind;
1354
 
        argv += optind;
1355
 
 
1356
 
        if (argc < 2) {
1357
 
                printf("%s", sr_help);
1358
 
                return;
1359
 
        }
 
1354
        helper_arg(2, 2, &argc, &argv, sr_help);
1360
1355
 
1361
1356
        str2ba(argv[0], &bdaddr);
1362
1357
        switch (argv[1][0]) {
1418
1413
                        return;
1419
1414
                }
1420
1415
        }
1421
 
        argc -= optind;
1422
 
        argv += optind;
1423
 
 
1424
 
        if (argc < 1) {
1425
 
                printf("%s", rssi_help);
1426
 
                return;
1427
 
        }
 
1416
        helper_arg(1, 1, &argc, &argv, rssi_help);
1428
1417
 
1429
1418
        str2ba(argv[0], &bdaddr);
1430
1419
 
1492
1481
                        return;
1493
1482
                }
1494
1483
        }
1495
 
        argc -= optind;
1496
 
        argv += optind;
1497
 
 
1498
 
        if (argc < 1) {
1499
 
                printf("%s", lq_help);
1500
 
                return;
1501
 
        }
 
1484
        helper_arg(1, 1, &argc, &argv, lq_help);
1502
1485
 
1503
1486
        str2ba(argv[0], &bdaddr);
1504
1487
 
1567
1550
                        return;
1568
1551
                }
1569
1552
        }
1570
 
        argc -= optind;
1571
 
        argv += optind;
1572
 
 
1573
 
        if (argc < 1) {
1574
 
                printf("%s", tpl_help);
1575
 
                return;
1576
 
        }
 
1553
        helper_arg(1, 2, &argc, &argv, tpl_help);
1577
1554
 
1578
1555
        str2ba(argv[0], &bdaddr);
1579
1556
        type = (argc > 1) ? atoi(argv[1]) : 0;
1644
1621
                        return;
1645
1622
                }
1646
1623
        }
1647
 
        argc -= optind;
1648
 
        argv += optind;
1649
 
 
1650
 
        if (argc < 1) {
1651
 
                printf("%s", afh_help);
1652
 
                return;
1653
 
        }
 
1624
        helper_arg(1, 1, &argc, &argv, afh_help);
1654
1625
 
1655
1626
        str2ba(argv[0], &bdaddr);
1656
1627
 
1730
1701
                        return;
1731
1702
                }
1732
1703
        }
1733
 
        argc -= optind;
1734
 
        argv += optind;
1735
 
 
1736
 
        if (argc < 2) {
1737
 
                printf("%s", cpt_help);
1738
 
                return;
1739
 
        }
 
1704
        helper_arg(2, 2, &argc, &argv, cpt_help);
1740
1705
 
1741
1706
        str2ba(argv[0], &bdaddr);
1742
1707
        hci_strtoptype(argv[1], &ptype);
1815
1780
                        return;
1816
1781
                }
1817
1782
        }
1818
 
        argc -= optind;
1819
 
        argv += optind;
1820
 
 
1821
 
        if (argc < 1) {
1822
 
                printf("%s", lp_help);
1823
 
                return;
1824
 
        }
 
1783
        helper_arg(1, 2, &argc, &argv, lp_help);
1825
1784
 
1826
1785
        str2ba(argv[0], &bdaddr);
1827
1786
 
1914
1873
                        return;
1915
1874
                }
1916
1875
        }
1917
 
        argc -= optind;
1918
 
        argv += optind;
1919
 
 
1920
 
        if (argc < 1) {
1921
 
                printf("%s", lst_help);
1922
 
                return;
1923
 
        }
 
1876
        helper_arg(1, 2, &argc, &argv, lst_help);
1924
1877
 
1925
1878
        str2ba(argv[0], &bdaddr);
1926
1879
 
2004
1957
                        return;
2005
1958
                }
2006
1959
        }
2007
 
        argc -= optind;
2008
 
        argv += optind;
2009
 
 
2010
 
        if (argc < 1) {
2011
 
                printf("%s", auth_help);
2012
 
                return;
2013
 
        }
 
1960
        helper_arg(1, 1, &argc, &argv, auth_help);
2014
1961
 
2015
1962
        str2ba(argv[0], &bdaddr);
2016
1963
 
2076
2023
                        return;
2077
2024
                }
2078
2025
        }
2079
 
        argc -= optind;
2080
 
        argv += optind;
2081
 
 
2082
 
        if (argc < 1) {
2083
 
                printf("%s", enc_help);
2084
 
                return;
2085
 
        }
 
2026
        helper_arg(1, 2, &argc, &argv, enc_help);
2086
2027
 
2087
2028
        str2ba(argv[0], &bdaddr);
2088
2029
 
2149
2090
                        return;
2150
2091
                }
2151
2092
        }
2152
 
        argc -= optind;
2153
 
        argv += optind;
2154
 
 
2155
 
        if (argc < 1) {
2156
 
                printf("%s", key_help);
2157
 
                return;
2158
 
        }
 
2093
        helper_arg(1, 1, &argc, &argv, key_help);
2159
2094
 
2160
2095
        str2ba(argv[0], &bdaddr);
2161
2096
 
2221
2156
                        return;
2222
2157
                }
2223
2158
        }
2224
 
        argc -= optind;
2225
 
        argv += optind;
2226
 
 
2227
 
        if (argc < 1) {
2228
 
                printf("%s", clkoff_help);
2229
 
                return;
2230
 
        }
 
2159
        helper_arg(1, 1, &argc, &argv, clkoff_help);
2231
2160
 
2232
2161
        str2ba(argv[0], &bdaddr);
2233
2162
 
2297
2226
                        return;
2298
2227
                }
2299
2228
        }
2300
 
        argc -= optind;
2301
 
        argv += optind;
 
2229
        helper_arg(0, 2, &argc, &argv, clock_help);
2302
2230
 
2303
2231
        if (argc > 0)
2304
2232
                str2ba(argv[0], &bdaddr);
2439
2367
                        return;
2440
2368
                }
2441
2369
        }
 
2370
        helper_arg(0, 0, &argc, &argv, lescan_help);
2442
2371
 
2443
2372
        if (dev_id < 0)
2444
2373
                dev_id = hci_get_route(NULL);
2503
2432
                        return;
2504
2433
                }
2505
2434
        }
2506
 
 
2507
 
        argc -= optind;
2508
 
        argv += optind;
2509
 
 
2510
 
        if (argc < 1) {
2511
 
                printf("%s", lecc_help);
2512
 
                return;
2513
 
        }
 
2435
        helper_arg(1, 1, &argc, &argv, lecc_help);
2514
2436
 
2515
2437
        if (dev_id < 0)
2516
2438
                dev_id = hci_get_route(NULL);
2571
2493
                        return;
2572
2494
                }
2573
2495
        }
2574
 
 
2575
 
        argc -= optind;
2576
 
        argv += optind;
2577
 
 
2578
 
        if (argc < 1) {
2579
 
                printf("%s", ledc_help);
2580
 
                return;
2581
 
        }
 
2496
        helper_arg(1, 2, &argc, &argv, ledc_help);
2582
2497
 
2583
2498
        if (dev_id < 0)
2584
2499
                dev_id = hci_get_route(NULL);
2699
2614
        }
2700
2615
 
2701
2616
        for (i = 0; command[i].cmd; i++) {
2702
 
                if (strncmp(command[i].cmd, argv[0], 3))
 
2617
                if (strncmp(command[i].cmd,
 
2618
                                argv[0], strlen(command[i].cmd)))
2703
2619
                        continue;
 
2620
 
2704
2621
                command[i].func(dev_id, argc, argv);
2705
2622
                break;
2706
2623
        }
 
2624
 
 
2625
        if (command[i].cmd == 0) {
 
2626
                fprintf(stderr, "Unknown command - \"%s\"\n", *argv);
 
2627
                exit(1);
 
2628
        }
 
2629
 
2707
2630
        return 0;
2708
2631
}