% test / example MATLAB program for DirectDSP® software
% shows hardware selector, opens Hypersignal program as DSP engine,
%initializes selected board, and acquires waveform file
% jhb, 29 FEB 96
load windows.con -mat % misc. constants used by DirectDSP test and
example programs
load enmgr.con -mat % Engine Manager DLL constants
load hwlib.con -mat % Hardware Library DLL constants
% initialize flags
fCanceled = FALSE; % result of hardware selector dialog
hEngine = NULL; % engine handle
hBoard = NULL; % board handle
fBoardInitialized = FALSE; % board status
ShowStat; % turn on debug status window in Engine Manager
% show hardware selector dialog box ("Hardware Manager"); returns board
designator
% string selected by user
% note: if hardware choice is fixed, then skip this call and use correct
board designator
% string in AssignBoard call below
[fSelect, BoardStr] = ShowHwSelector(NULL);
if (fSelect == IDCANCEL) % user canceled?
return;
end
% open dsp engine
hEngine = EngineOpen(DS_EO_HSM, NULL, NULL); % first try to open Hypersignal-Macro
(or Macro EX) as engine
if (hEngine == NULL)
hEngine = EngineOpen(DS_EO_HSA, NULL, NULL); % if that doesn't work, try
Hypersignal-Acoustic
if (hEngine == NULL)
errstr = ['EngineOpen failed; error code = ' num2str(GetHwLibErrStat)];
disp(errstr);
return; % abort
end
end
% assign a board handle: engine handle, board designator string, instruction set,
IO base addr, Mem base addr
hBoard = AssignBoard(hEngine, BoardStr, NULL, NULL, NULL); % NULL == use defaults
where possible
% initialize the board; make sure it's installed and responding
fBoardInitialized = InitBoard(hBoard);
if (fBoardInitialized == FALSE)
errstr = ['InitBoard failed; error code = ' num2str(GetEngErrStat(hEngine))];
disp(errstr);
if (hBoard ~= NULL)
FreeBoard(hBoard);
end
if (hEngine ~= NULL)
EngineClose(hEngine);
end
return; % abort
end
hConvInfo = AllocConvInfo; % allocate CONVINFO structure
SetConvItem(hConvInfo, DS_FILENAME, 'test');
SetConvItem(hConvInfo, DS_SAMPFREQ, 22050);
SetConvItem(hConvInfo, DS_NUMCHAN, 1);
SetConvItem(hConvInfo, DS_NUMSAMPLES, 50000);
% acquire waveform file, wait for result (synchronous operation); note
% that asynchronous operation is possible to allow continued processing
% (see the dtape.cpp source code file for an example of async operation)
AcquireWvfrmFile(hBoard, hConvInfo, DS_AWF_SYNC);
FreeConvInfo(hConvInfo); % free CONVINFO structure
% done; leave board in disabled state, clean up handles, engines
if (fBoardInitialized == TRUE)
DisableBoard(hBoard);
end
if (hBoard ~= NULL)
FreeBoard(hBoard);
end
if (hEngine ~= NULL)
EngineClose(hEngine);
end