PNI TCM User Manual
Page 70

PNI Sensor Corporation
DOC#1014688 r06
TCM User Manual
– July 2013
Page 65
mOut Dat a[ i ndex ++] = c ount >> 8;
mOut Dat a[ i ndex ++] = c ount & 0xFF;
/ / s t or e t he f r ame I D
mOut Dat a[ i ndex ++] = f r ameTy pe ;
/ / c opy t he dat a t o be sent
whi l e( l en- - ) mOut Dat a[ i ndex ++] = * dat a++;
/ / c omput e and add t he cr c
c r c = CRC( mOut Dat a, i ndex ) ;
mOut Dat a[ i ndex ++] = c r c >> 8 ;
mOut Dat a[ i ndex ++] = c r c & 0xFF ;
/ / Wr i t e bl ock wi l l c opy and send t he dat a out t he s er i al por t
mSer i al Por t - >Wr i t eBl ock ( mOut Dat a, i ndex ) ;
}
/ /
/ / Cal l t he f unc t i ons i n ser i al por t nec es sar y t o change t he
/ / baud r at e
/ /
v oi d CommPr ot ocol : : Set Baud( UI nt 32 baud)
{
mSer i al Por t - >Set BaudRat e( baud) ;
mSer i al Por t - >I nCl ear ( ) ;
/ / c l ear any dat a t hat was al r eady wai t i ng i n t he buf f er
}
/ /
/ / Updat e t he CRC f or t r ans mi t t ed and r ecei v ed dat a us i ng t he
/ / CCI TT 16bi t al gor i t hm ( X^ 16 + X^ 12 + X^ 5 + 1) .
/ /
UI nt 16 CommPr ot ocol : : CRC( voi d * dat a, UI nt 32 l en)
{
UI nt 8 * dat aPt r = ( UI nt 8 * ) dat a;
UI nt 32 i ndex = 0;
UI nt 16 c r c = 0;
whi l e( l en- - )
{
c r c = ( uns i gned char ) ( c r c >> 8) | ( cr c << 8) ;
c r c ^ = dat aPt r [ i ndex ++] ;
c r c ^ = ( unsi gned c har ) ( cr c & 0x f f ) >> 4;
c r c ^ = ( cr c << 8) << 4;
c r c ^ = ( ( c r c & 0xf f ) << 4) << 1;
}
r et ur n c r c ;
}
/ /
/ / Thi s i s cal l ed each t i me t hi s pr oces s get s a t ur n t o ex ec ut e.
/ /
v oi d CommPr ot ocol : : Cont r ol ( )
{
/ / I nLen r et ur ns t he number of by t es i n t he i nput buf f er of
/ / t he ser i al obj ec t t hat ar e av ai l abl e f or us t o r ead.
UI nt 32 i nLen = mSer i al Por t - >I nLen( ) ;