background image

26

CVS4 Component Video Switch 

27

CVS4 Component Video Switch

Source Code Example of Calculating a CRC-8 Checkcode

The following is a simple “C” program that calculates the CRC-8 of the string “TestString” and 

then prints the initial string with the calculated CRC-8 checkcode appended to it.

#include "stdio.h"

// Routine for updating the CRC-8 checkcode using a polynomial

// of: x^8 +x^6 +x^3 +x^2 + 1.

//

// To create the CRC8_POLY mask, we start by ignoring the highest

// bit (x^8) since it is assumed to always be 1 and lies outside

// our byte boundary, and doesn't affect our results.

//

// The rest of the bits of the polynomial are reversed from the

// polynomial's order. This allows us to read in each bit starting

// with bit 0 of each byte, instead of bit 7. This is done because

// the UART sends its LSB first and by doing the same we are able to

// preserve the CRC's burst error detection characteristics.

//

// So:

//    x^8 +x^6 +x^3 +x^2 + 1 = 101001101 = 14D hex

//    Ignore X^8:               01001101 =  4D hex

//    Reverse bit order:        10110010 =  B2 hex

#define  CRC8_POLY  0xB2 

 

 

// polynomial mask

#define  CRC8_INIT  0xFF 

 

 

// initial value

void crcByte( unsigned char *crc8, char cc)

{

 

unsigned char  lcrc8;   

 

// local copy of CRC-8 value

 

int  

 

 

bitcount;

 

 

lcrc8 = *crc8;  

 

 

 

// get local copy of CRC-8

 

// update CRC-8 with 8 new bits

 

lcrc8 ^= cc;   

 

 

 

// test each bit against CRC-8

 

for (bitcount = 0; bitcount < 8; b+)

 

{

 

 

// if resultant bit was a 1, shift and xor in mask

 

 

// else, just shift

 

 

if (lcrc8 & 0x01)

 

 

 

lcrc8 = ((lcrc8 >> 1) & 0x7F) ^ CRC8_POLY;

 

 

 

 

 

 

 

else

 

 

 

lcrc8 = (lcrc8 >> 1) & 0x7F;

 

}

 

*crc8 = lcrc8;  

 

 

 

// return new CRC8

}

int main( void)

{

 

char 

 

 

TestString[] = "LI 2,3";

 

unsigned char  crc8;

 

int  

 

 

index;

 

char 

 

 

token = ':';

 

crc8 = CRC8_INIT;   

 

 

// initialize checkcode

 

// CRC8 all of TestString[]

 

index = 0;

 

while (TestString[index] != 0)

 

 

crcByte( &crc8, TestString[index++]);

 

 

 

// Add the CRC-8 token character ':' to CRC-8

 

crcByte( &crc8, token);

 

// Finish with CRC8 by doing a one's compliment

 

crc8 = ~crc8;

 

// Print the results

 

printf( "%s%c%u", TestString, token, (unsigned char)crc8);

 

return (0);

}

Checksums and CRC-8’s 

(Cont’d)

Checksums and CRC-8’s 

(Cont’d)

Summary of Contents for CVS4

Page 1: ...Z E K T O R Home Theater Switches Digital Video Component Video Multichannel Audio Rev 2 07 25 2006 High Definition Component Video Switch CVS4 Supplement to the CVS4 User Guide...

Page 2: ...ttings 19 Control Settings HDS4 2 Version 20 Extended Control Settings 21 Checksums and CRC 8 s 24 Checksums and CRC 8 Checkcodes Defined 24 Differences between a Checksum and a CRC 8 Checkcode 24 Sou...

Page 3: ...n this case the value defaults to the current setting leaving the value unchanged The K I S S Continued space before the comma is optional Most commands can be queried for their current settings by su...

Page 4: ...wed before the and characters but NOT after them The checksum must immediately follow the character and a CRC 8 checkcode must immediately follow the character anything else including whitespace will...

Page 5: ...R LF Notice that in the first example a checksum was not appended to the LI command When issuing a command the checksum and CRC 8 codes are sent on a command by command basis Anytime a checksum or a C...

Page 6: ...ghout the com munication sequence First the LI CR command was issued by the controller While looking for an Acknowledgement or Error Response string an unsolicited Query Response is received indicatin...

Page 7: ...Checkcode did not match the calculated one The command will be ingnored Error 5 The number of parameters given does not match the number allowed by this command Error 6 To prevent conflicts between th...

Page 8: ...HDS4 2 there is no space after the command in the response string Note 3 For backward compatibility with the HDS4 2 this response string is sent in the Asyn chronous mode when a channel status has ch...

Page 9: ...Where dim Current DIM level setting bright Current BRIGHT level settings The intensities range from 0 Off to 44 Maximum brightness Note For backward compatibility with the HDS4 2 there is no space af...

Page 10: ...earn they are IR Cmd Description 1 Power Toggle 2 Select Input 1 3 Select Input 2 4 Select Input 3 5 Select Input 4 6 Discrete Power On 7 Discrete Power Off 8 Sequence Through Inputs Setting an ircmd...

Page 11: ...ess of any possible setup state it might be in The 0 button code is also device independent It use and value does not change between Zek tor devices like the other codes may and most likely will Query...

Page 12: ...ro keeps the CVS4 from responding to IR codes however the front panel sensor remains operational and any codes received can still be queried for by using the IR command Disabling the IR jack by settin...

Page 13: ...al Value 128 64 32 16 8 4 2 1 Bit Position 7 6 5 4 3 2 1 0 Name CTL LMO IRC IRR BTN LIN SEL PWR Factory Settings 0 0 0 0 0 0 1 1 PWR 1 Power State has changed SEL 1 Selection Input Output Mapping has...

Page 14: ...Checksum and a CRC 8 Checkcode A CRC is capable of finding many more and different types of errors than a checksum can A good description of its capability is described in the above referenced articl...

Page 15: ...detection characteristics So x 8 x 6 x 3 x 2 1 101001101 14D hex Ignore X 8 01001101 4D hex Reverse bit order 10110010 B2 hex define CRC8_POLY 0xB2 polynomial mask define CRC8_INIT 0xFF initial value...

Page 16: ...28 CVS4 Component Video Switch 29 CVS4 Component Video Switch This page left intentionaly nearly blank This page left intentionaly nearly blank...

Page 17: ...Z E K T O R Z E K T O R 12675 Danielson Ct Suite 401 Poway CA 92064 858 748 8250 www zektor com...

Reviews: