Changeset 10969 for fact/FADctrl/FAD.cc


Ignore:
Timestamp:
06/10/11 08:23:22 (13 years ago)
Author:
neise
Message:
support for Firmware Version 0200
File:
1 edited

Legend:

Unmodified
Added
Removed
  • fact/FADctrl/FAD.cc

    r10913 r10969  
    3232   {"roi", &FAD::cmd_roi, true, 2, "<range> <value>", "Set ROI to for channel range to value"},
    3333   {"dac", &FAD::cmd_dac, true, 2, "<range> <value>", "Set DAC numbers in range to value"},
     34   {"execute", &FAD::cmd_execute, true, 0, "", "confirm FAD configuration settings, e.g. DAC, ROI, run#"},
    3435   {"address", &FAD::cmd_address, true, 2, "<range> <value>", "Set addresses in range to value"},
    3536   {"send", &FAD::cmd_send, true, 1, "<value>", "Send arbitrary data to board"},
     
    205206
    206207//
     208// Execute: Confirm new ROI, DAC or what ever settings
     209//
     210
     211void FAD::cmd_execute() {
     212
     213  for (unsigned int i=0; i<Boards.size(); i++) Boards[i]->Send(CMD_Execute);
     214}
     215
     216
     217//
    207218// Set run number
    208219//
    209220void FAD::cmd_runnumber() {
    210 
     221       
     222        unsigned short Buffer[4] = {0};
    211223  int Num;
    212224
     
    215227        return;
    216228  }
     229        Buffer[0] = htons(CMD_Write | ADDR_RUNNUMBER);
     230        Buffer[1] = htons( (unsigned short)( ((unsigned int)Num) >> 16 ) );
     231        Buffer[2] = htons(CMD_Write | (ADDR_RUNNUMBER + 1) );
     232        Buffer[3] = htons( (unsigned short)Num );
    217233
    218234  for (unsigned int i=0; i<Boards.size(); i++) {
    219         Boards[i]->Send(CMD_Write | ADDR_RUNNUMBER );
    220         Boards[i]->Send((unsigned short) (Num>>16));            // Write the HIGH-word first
    221         Boards[i]->Send(CMD_Write | (ADDR_RUNNUMBER+1) );
    222         Boards[i]->Send((unsigned short) Num); // now write the LOW-word
     235        Boards[i]->Send(Buffer, sizeof(Buffer));
     236        Boards[i]->Send(CMD_Execute);
    223237  }
    224238}
     
    351365  for (unsigned int i=0; i<Boards.size(); i++) {
    352366        Boards[i]->Send(Buffer, sizeof(Buffer));
     367        Boards[i]->Send(CMD_Execute);
    353368  }
    354369}
     
    380395  }
    381396
    382   // Disable triggers for all boards and wait (workaround for firmware bug) 
    383   for (unsigned int i=0; i<Boards.size(); i++) Boards[i]->Send(CMD_TRIGGERS_OFF);
    384   usleep(500000);
    385397
    386398  // Send command buffer and enable triggers again
    387399  for (unsigned int i=0; i<Boards.size(); i++) {
    388         Boards[i]->Send(Buffer, sizeof(Buffer));
    389         Boards[i]->Send(CMD_TRIGGERS_ON);
    390   }
     400        Boards[i]->Send(Buffer+R.Min*2, (R.Max-R.Min+1)*2*sizeof(unsigned short));
     401        Boards[i]->Send(CMD_Execute);
     402  }
     403
     404       
    391405}
    392406
Note: See TracChangeset for help on using the changeset viewer.