Ticket #4924: 6200_power.diff

File 6200_power.diff, 3.2 KB (added by bmayland@…, 13 years ago)

Power toggle option

  • 6200ch.c

     
    9292
    9393void set_chan_slow(raw1394handle_t handle, int device, int verbose, int chn);
    9494void set_chan_fast(raw1394handle_t handle, int device, int verbose, int chn);
     95void set_power_fast(raw1394handle_t handle, int device, int verbose);
    9596
    9697void usage()
    9798{
     
    99100           "<channel_num>\n");
    100101   fprintf(stderr, "-v        print additional verbose output\n");
    101102   fprintf(stderr, "-s        use single packet method\n");
     103   fprintf(stderr, "-w        toggle power state\n");
    102104   fprintf(stderr, "-n NODE   node to start device scanning on (default:%i)\n",
    103105           STARTING_NODE);
    104106   fprintf(stderr, "-p PORT   port/adapter to use              (default:%i)\n",
     
    114116   int i;
    115117   int verbose = 0;
    116118   int single_packet = 0;
     119   int toggle_power = 0;
    117120   int bGUID=0;
    118121   octlet_t cli_GUID=0LL;
    119122   octlet_t node_GUID=0LL;
    120    quadlet_t cmd[2];
    121    int chn = 550;
     123   int chn = 0;
    122124
    123125   /* some people experience crashes when starting on node 1 */
    124126   int starting_node = STARTING_NODE;
    125127   int starting_port = STARTING_PORT;
    126128   int c;
    127    int index;
    128129
    129130   if (argc < 2)
    130131      usage();
    131132
    132133   opterr = 0;
    133    while ((c = getopt(argc, argv, "vsg:n:p:")) != -1)
     134   while ((c = getopt(argc, argv, "vswg:n:p:")) != -1)
    134135   {
    135136       switch (c) {
    136137       case 'v':
     
    139140       case 's':
    140141           single_packet = 1;
    141142           break;
     143       case 'w':
     144           toggle_power = 1;
     145           break;
    142146       case 'n':
    143147           starting_node = atoi(optarg);
    144148           break;
     
    157161   }
    158162
    159163   /* print out usage message if not enough arguments */
    160    if (optind != argc-1) {
     164   if (optind == argc-1) {
     165       /* the last argument is the channel number */
     166       chn = atoi(argv[optind]);
     167   } else if (!toggle_power) {
    161168       usage();
    162169   }
    163    /* the last argument is the channel number */
    164    chn = atoi(argv[optind]);
    165170
    166171#ifdef RAW1394_V_0_8
    167172   raw1394handle_t handle = raw1394_get_handle();
     
    266271        exit(1);
    267272   }
    268273
    269    if (single_packet)
    270        set_chan_fast(handle, device, verbose, chn);
    271    else
    272        set_chan_slow(handle, device, verbose, chn);
     274   if (toggle_power)
     275       set_power_fast(handle, device, verbose);
    273276
     277   if (chn) {
     278       if (single_packet)
     279           set_chan_fast(handle, device, verbose, chn);
     280       else
     281           set_chan_slow(handle, device, verbose, chn);
     282   }
     283
    274284   raw1394_destroy_handle(handle);
    275285   exit(0);
    276286}
     
    314324    avc1394_transaction_block(handle, device, cmd, 3, RETRY_COUNT_FAST);
    315325}
    316326
     327void set_power_fast(raw1394handle_t handle, int device, int verbose)
     328{
     329    quadlet_t cmd[2];
     330    quadlet_t *response;
     331
     332    cmd[0] = ((CTL_CMD0) & 0xffffff00) | AVC1394_PANEL_OPERATION_POWER;
     333    cmd[1] = 0;
     334
     335    response = avc1394_transaction_block(handle, device, cmd, 2, RETRY_COUNT_FAST);
     336
     337    if (verbose) {
     338        printf("AV/C command for power = 0x%08X\n", cmd[0]);
     339        if (NULL != response)
     340          printf("  (%x) 0x%x\n", (*response) >> 24, *response);
     341        else
     342          printf("  No response\n");
     343    }
     344}
     345
    317346/* vim: set expandtab tabstop=4 shiftwidth=4: */