function cpdload(fname,devname) % cpdload(fname,devname) % % DOWNLOAD RAW DATA FROM CROSSPAD INTO A FILE % % fname is the filename to write out to (if absent, temp name is generated) % devname is the serial port, defaults to /dev/cua0 % (note: you must have read AND write permission on this device) ACK=[6]; if(nargin<2) devname='/dev/cua0'; end if(nargin<1) fname=[]; end if(isempty(fname)); fname=[tempname,'.cpd']; end fid = fopen(fname,'w'); loadassert(fid>2); % check if file open was ok sid = fopen(devname,'r+'); loadassert(fid>2); % check if port open was ok fprintf(1,'Select "Upload Ink" on Crosspad now...\n'); [dd,cc] = fread(sid,6,'uchar'); loadassert(cc==6); loadassert(dd(1)==2); dd(2:5) datlen = 2^24*dd(2)+2^16*dd(3)+2^8*dd(4)+dd(5); indat=0; % dd(6) is some kind of checksum cc=fwrite(sid,ACK,'uchar'); loadassert(cc==1); [dd,cc] = fread(sid,1,'uchar'); loadassert(cc==1); loadassert(dd==1); while(dd==1) [dd,cc] = fread(sid,4,'uchar'); loadassert(cc==4); % dd(1) and dd(2) are some kind of block number checking ll = 256*dd(3)+dd(4); % data length for this block [dd,cc] = fread(sid,ll,'uchar'); loadassert(cc==ll); loadassert(length(dd)==ll); cc=fwrite(fid,dd,'uchar'); loadassert(cc==ll); indat=indat+ll; [dd,cc] = fread(sid,1,'uchar'); loadassert(cc==1); % dd is some kind of checksum for data cc=fwrite(sid,ACK,'uchar'); loadassert(cc==1); [dd,cc] = fread(sid,1,'uchar'); loadassert(cc==1); end fclose(sid); fclose(fid); loadassert(indat==datlen); fprintf(1,'Download from Crosspad successful!\n'); fprintf(1,'Wrote %d bytes to file %s.\n',indat,fname); function loadassert(cond) if(~cond) error('Error downloading data from crosspad.'); end