/usr/share/psychtoolbox-3/PsychHardware/Daq/DaqGetAll.m is in psychtoolbox-3-common 3.0.11.20131230.dfsg1-1build1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | function data=DaqGetAll(daq)
% data=DaqGetAll(DeviceIndex)
% USB-1208FS: Retrieve all analog and digital input values. This command
% reads the value from all analog input channels and digital I/Os.
% "DeviceIndex" is a small integer, the array index specifying which HID
% device in the array returned by PsychHID('Devices') is interface 0
% of the desired USB-1208FS box.
% data.analog is a 1x16 array of the values read from the analog input
% channels.
% data.digital(1) is the value (0 to 255) read from digital port A.
% data.digital(2) is the value (0 to 255) read from digital port B.
% See also Daq, DaqFunctions, DaqPins, DaqTest, PsychHIDTest.
% 4/15/05 dgp Wrote it.
% 12/27/07 mpr added some commentary; note that so far as I know, this
% function does *not* work with the USB-1608FS. I tried
% several variations of different parts but gave up trying
% before I was able to figure out why.
% 1/13/08 mpr swept through and tried to make terminology conistent
% with that of other daq functions
AllHIDDevices = PsychHIDDAQS;
if ~isempty(strfind(AllHIDDevices(daq).product,'1608'))
Is1608=1;
else
Is1608=0;
end
ReceiveReportsErr=PsychHID('ReceiveReports',daq);
ReceiveReportsStopErr=PsychHID('ReceiveReportsStop',daq);
[TheReports,GiveMeReportsErr] = PsychHID('GiveMeReports',daq);
% err=PsychHID('SetReport',daq,2,70,uint8(70)); % GetAll
SetReportErr=PsychHID('SetReport',daq,2,70,uint8(0)); % GetAll
if SetReportErr.n
fprintf('GetAll SetReport error 0x%s. %s: %s\n',hexstr(err.n),err.name,err.description);
end
% Don't ask me... Denis is responsible for this next conditional statement --
% mpr
if 0
% The last value passed in the argument list in this next statement is
% almost certainly wrong for the 1608FS, but since this code is effectively
% commented out, I don't see any upside to fixing it.
[report,err]=PsychHID('GetReport',daq,1,70,35);
if err.n
fprintf('GetAll GetReport error 0x%s. %s: %s\n',hexstr(err.n),err.name,err.description);
data=[];
end
else
ReceiveReports2Err=PsychHID('ReceiveReports',daq);
[TheReports2,GiveMeReports2Err]=PsychHID('GiveMeReports',daq);
if GiveMeReports2Err.n
fprintf('GetAll GiveMeReports error 0x%s. %s: %s\n',hexstr(err.n),err.name,err.description);
end
report=[];
for i=1:length(TheReports2)
if TheReports2(i).report(1)==70
report=TheReports2(1).report;
end
end
end
if ~isempty(report) && report(1)==70
% 35 byte report
data.analog=zeros(1,16);
for i=1:16
data.analog(i)=report(i*2)+256*report(i*2+1);
% if sign bit is set, make it negative
if data.analog(i)>(2^16-1)
data.analog(i)=data.analog(i)-2^16;
end
end
data.digital=double(report(34:35));
else
data=[];
fprintf(['\nIf you are using a 1208FS, you should consider asking Denis Pelli if he\n' ...
'ever got this function working on that device. I never got anything sensible\n' ...
'from it on a 1608FS, but I eventually decided I would never use the function,\n' ...
'so I gave up trying. The "if 0" section of code looks like something Denis\n' ...
'tried as he worked on this function. Which suggests he might not have gotten it\n' ...
'working on the 1208FS either. If you find anything wrong in what I just wrote\n' ...
'or if you can fix this function for any device, please edit my comments and\n' ...
'update the PsychToolbox version. -- Mickey P. Rowe, 27-Dec-2007\n\n']);
if Is1608
for k=(daq-6):(daq-1)
if strcmp(AllHIDDevices(k).serialNumber,AllHIDDevices(daq).serialNumber)
err=PsychHID('ReceiveReports',k);
[ThisReport,ThisErr] = PsychHID('GiveMeReports',k);
if ~isempty(ThisReport)
fprintf('Hold the presses... I got a report from DeviceIndex %d!\n',k);
end
tmperr=PsychHID('ReceiveReportsStop',k);
end
end
end
end
ReceiveReportsStop2Err=PsychHID('ReceiveReportsStop',daq);
return
|