250 lines
8.3 KiB
Matlab
250 lines
8.3 KiB
Matlab
function dcsample
|
|
%DCSAMPLE Example use of the DinkeyChange API in MATLAB.
|
|
|
|
% Copyright Microcosm Ltd.
|
|
|
|
% Load the correct library for this platform
|
|
switch computer()
|
|
case 'PCWIN64' % 64-bit Windows
|
|
loadlibrary('DinkeyChange64.dll', @dinkeychange64proto, 'alias', 'dinkeychange');
|
|
case 'PCWIN' % 32-bit Windows
|
|
loadlibrary('DinkeyChange.dll', @dinkeychangewin32proto, 'alias', 'dinkeychange');
|
|
case 'GLNXA64' % 64-bit Linux
|
|
loadlibrary('DinkeyChange64.so', @dinkeychange64proto, 'alias', 'dinkeychange');
|
|
case 'GLNX86' % 32-bit Linux
|
|
loadlibrary('DinkeyChange.so', @dinkeychange32proto, 'alias', 'dinkeychange');
|
|
case 'MACI64' % 64-bit Mac OS X
|
|
loadlibrary('DinkeyChange64.dylib', @dinkeychange64proto, 'alias', 'dinkeychange');
|
|
case 'MAC' % 32-bit Mac OS X
|
|
loadlibrary('DinkeyChange32.dylib', @dinkeychange32proto, 'alias', 'dinkeychange');
|
|
otherwise
|
|
disp('Error! Platform not supported!');
|
|
return
|
|
end
|
|
|
|
% Each of the functions below demonstrates different API functionality.
|
|
% Uncomment the appropriate functions to execute the examples.
|
|
% See the comments in each function for more details about the features
|
|
% that they demonstrate.
|
|
|
|
getdongleinfo('dinkeychange');
|
|
%writediagnosticfile('dinkeychange');
|
|
%applyshortupdatecode('dinkeychange');
|
|
%applystronglyencryptedupdatecode('dinkeychange');
|
|
%restorefdlite('dinkeychange');
|
|
%getmachineid('dinkeychange');
|
|
%downloadtempsoftwarekey('dinkeychange');
|
|
%downloaddemosoftwarekey('dinkeychange');
|
|
|
|
unloadlibrary('dinkeychange');
|
|
end
|
|
|
|
function getdongleinfo(libName)
|
|
% Display information about the dongles attached to this computer
|
|
|
|
% Possible values for dcgetinfo's typeMask parameter
|
|
TYPE_MASK_PRO = 1;
|
|
TYPE_MASK_FD = 2;
|
|
TYPE_MASK_ALL = bitor(TYPE_MASK_PRO, TYPE_MASK_FD);
|
|
|
|
% Possible values for dcgetinfo's modelMask parameter
|
|
MODEL_MASK_LITE = 1;
|
|
MODEL_MASK_PLUS = 2;
|
|
MODEL_MASK_NET = 4;
|
|
MODEL_MASK_ALL = bitor(bitor(MODEL_MASK_LITE, MODEL_MASK_PLUS), MODEL_MASK_NET);
|
|
MODEL_MASK_DEFAULT = bitor(MODEL_MASK_PLUS, MODEL_MASK_NET);
|
|
|
|
% Call the DinkeyChange API
|
|
[retCode, dongleArray] = dcgetinfo(libName, TYPE_MASK_ALL, MODEL_MASK_ALL, '');
|
|
|
|
% Check the return value
|
|
if (retCode ~= 0)
|
|
displayerror(retCode, 0);
|
|
return
|
|
end
|
|
|
|
for (i = 1:length(dongleArray))
|
|
disp(sprintf('%3d) Dinkey %s %s', i, dongleArray(i).type_as_string, dongleArray(i).model_as_string));
|
|
disp(sprintf(' Product code : %s', dongleArray(i).product_code));
|
|
disp(sprintf(' Dongle number: %u', dongleArray(i).dongle_number));
|
|
disp(sprintf(' Update number: %u', dongleArray(i).update_number));
|
|
disp(sprintf('\n'));
|
|
end
|
|
end
|
|
|
|
function writediagnosticfile(libName)
|
|
% Write diagnostic information about the dongles attached to this computer
|
|
% to an encrypted file.
|
|
|
|
filename = '!!!! REPLACE THIS WITH THE NAME OF THE FILE TO WRITE TO';
|
|
|
|
% Call the DinkeyChange API
|
|
retCode = dcgetdiagnosticinfo(libName, filename);
|
|
|
|
% Check the return value
|
|
if (retCode ~= 0)
|
|
displayerror(retCode, 0);
|
|
return
|
|
end
|
|
|
|
disp(['Successfully wrote diagnostic information to ' filename]);
|
|
end
|
|
|
|
function applyshortupdatecode(libName)
|
|
% Update a dongle attached to this computer using a short update code
|
|
|
|
% Call the DinkeyChange API
|
|
[retCode, confirmationCode, extErr] = dcdoupdatecodestring(libName, '!!!! REPLACE THIS WITH A VALID UPDATE CODE STRING');
|
|
|
|
% Check the return value
|
|
if (retCode ~= 0)
|
|
displayerror(retCode, extErr);
|
|
return
|
|
end
|
|
|
|
disp('Successfully updated dongle');
|
|
disp(['Confirmation code: ' sprintf('%X', confirmationCode)]);
|
|
end
|
|
|
|
function applystronglyencryptedupdatecode(libName)
|
|
% Update a dongle attached to this computer using a strongly encrypted
|
|
% update code file
|
|
|
|
% Call the DinkeyChange API
|
|
[retCode, confirmationCode, extErr] = dcdoupdatecodefromfile(libName, '!!!! REPLACE THIS WITH A VALID UPDATE CODE FILENAME');
|
|
|
|
% Check the return value
|
|
if (retCode ~= 0)
|
|
displayerror(retCode, extErr);
|
|
return
|
|
end
|
|
|
|
disp('Successfully updated dongle');
|
|
disp(['Confirmation code: ' sprintf('%X', confirmationCode)]);
|
|
end
|
|
|
|
function restorefdlite(libName)
|
|
% Restore the required hidden file on a Dinkey FD Lite dongle.
|
|
|
|
% Call the DinkeyChange API
|
|
retCode = dcrestorefdlite(libName);
|
|
|
|
% Check the return value
|
|
if (retCode ~= 0)
|
|
displayerror(retCode, 0);
|
|
return
|
|
end
|
|
|
|
disp('Successfully restored FD Lite dongle');
|
|
end
|
|
|
|
function getmachineid(libName)
|
|
% Display this computer's machine ID
|
|
|
|
% Call the DinkeyChange API
|
|
[retCode, machineId, extErr] = dcgetmachineid(libName);
|
|
|
|
% Check the return value
|
|
if (retCode ~= 0)
|
|
displayerror(retCode, extErr);
|
|
return
|
|
end
|
|
|
|
disp(['The machine ID for this computer is: ' sprintf('%X', machineId)]);
|
|
end
|
|
|
|
function downloadtempsoftwarekey(libName)
|
|
% Download and install a temporary software key on this computer
|
|
|
|
% First call the DinkeyChange API to get the machine ID
|
|
[retCode, machineId, extErr] = dcgetmachineid(libName);
|
|
|
|
% Check the return value
|
|
if (retCode ~= 0)
|
|
displayerror(retCode, extErr);
|
|
return
|
|
end
|
|
|
|
% Then call the API again to install the software key
|
|
[retCode, extErr] = dcdownloadtempsoftwarekey(libName, machineId);
|
|
|
|
% Check the return value
|
|
if (retCode ~= 0)
|
|
displayerror(retCode, extErr);
|
|
return
|
|
end
|
|
|
|
disp('The temporary software key has been succesfully installed.');
|
|
end
|
|
|
|
function downloaddemosoftwarekey(libName)
|
|
% Download and install a demo software key on this computer
|
|
|
|
% Possible values for dcdownloaddemosoftwarekey's model parameter
|
|
SWKEY_MODEL_DEFAULT = -1;
|
|
SWKEY_MODEL_PRO_LITE = 0;
|
|
SWKEY_MODEL_PRO_PLUS = 1;
|
|
SWKEY_MODEL_PRO_NET = 2;
|
|
SWKEY_MODEL_FD_LITE = 3;
|
|
SWKEY_MODEL_FD_PLUS = 4;
|
|
SWKEY_MODEL_FD_NET = 5;
|
|
|
|
% First call the DinkeyChange API to get the machine ID
|
|
[retCode, machineId, extErr] = dcgetmachineid(libName);
|
|
|
|
% Check the return value
|
|
if (retCode ~= 0)
|
|
displayerror(retCode, extErr);
|
|
return
|
|
end
|
|
|
|
% Then call the API again to install the software key
|
|
[retCode, extErr] = dcdownloaddemosoftwarekey(libName, machineId, '!!!! REPLACE THIS WITH THE PRODUCT CODE OF THE KEY', SWKEY_MODEL_DEFAULT);
|
|
|
|
% Check the return value
|
|
if (retCode ~= 0)
|
|
displayerror(retCode, extErr);
|
|
return
|
|
end
|
|
|
|
disp('The demo software key has been succesfully installed.');
|
|
end
|
|
|
|
% An example of error reporting
|
|
% Displays descriptions for some common error codes
|
|
function displayerror(retCode, extErr)
|
|
switch retCode
|
|
case 401
|
|
disp('Error! No dongles detected that meet the search criteria.');
|
|
case 409
|
|
disp('Error! The dongle detected has not been programmed by DinkeyAdd.');
|
|
case 754
|
|
disp('Error! The specified output file could not be written to.');
|
|
case 758
|
|
disp('Error! Cannot open the file specified.');
|
|
case 759
|
|
disp('Error! The file specified is not a valid update code file.');
|
|
case 762
|
|
disp('Error! The update code contains invalid characters.');
|
|
case 763
|
|
disp('Error! Invalid update code.');
|
|
case 764
|
|
disp('Error! The update code was entered incorrectly, or the update code file is corrupt.');
|
|
case 765
|
|
disp('Error! The update code does not match any dongle attached to your computer.');
|
|
case 766
|
|
disp('Error! The update number for this update code is too high. If you have more than one update code, ensure that you apply them in the correct order.');
|
|
case 767
|
|
disp('Error! You have already entered this update code.');
|
|
case 1905
|
|
disp('Error! There is no temporary software key available for download.');
|
|
case 1907
|
|
disp('Error! The temporary software key has expired. Cannot download it.');
|
|
case 1910
|
|
disp('Error! The temporary software key has already been downloaded.');
|
|
otherwise
|
|
str = sprintf('An error occurred checking the dongle. Error: %d, Extended Error: %d', retCode, extErr);
|
|
disp(str);
|
|
end
|
|
end
|