background image

12

HDMI5 Component Video Switch 

1

HDMI5 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)

Содержание HDMI5

Страница 1: ...Rev 1 06 28 2007 Digital Video Switch 1 2 3 4 5 SEL A1 A2 HDMI5 Supplement to the HDMI5 User Guide Home Theater Solutions...

Страница 2: ...el Light Intensities 16 Save Power On Default Settings 17 Query Last IR Code Received 17 Set Learnable IR Command Codes 18 Front Panel Button Emulation 19 Query Status 21 Control Settings 22 Extended...

Страница 3: ...lue 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 substituting the for...

Страница 4: ...owed 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...

Страница 5: ...CR 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...

Страница 6: ...ughout 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 indicati...

Страница 7: ...um 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 articles but...

Страница 8: ...r 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 valu...

Страница 9: ...t at writing them will return Error 6 The Front Panel Button Emulation command with button code 0 can be used to exit the Setup Mode at which point the command can be re issued without an Error 6 resp...

Страница 10: ...Restore all settings to their factory defaults There is no Response String for this command Note Any value given other than 246 will generate a range error Query Last IR Code Received This command al...

Страница 11: ...iliary Relay 1 Toggle 9 Auxiliary Relay 2 Toggle 10 Discrete Power On 11 Discrete Power Off 12 Discrete Breakaway Off 13 Sequence through inputs 14 Discrete Audio Breakaway Select 15 Discrete Video Br...

Страница 12: ...e HDMI5 Some extended button codes are Code Description 0 When Issued Exits setup modes 0 When returned by query No buttons have been pressed since last the query 100 Always toggle power like Power To...

Страница 13: ...EEPROM XS settings Reset bits indicated in settings to 0 save in EEPROM XS Back up current settings into EEPROM XS Query for current settings XS Query for current settings Response String XS settings...

Страница 14: ...urrent settings XE Query for current settings Response String XE settings Where settings is a bitmapped parameter Decimal Value 4096 2048 1024 512 256 128 64 32 16 8 4 2 1 Bit Position 12 11 10 9 8 7...

Страница 15: ...and Ref Cont d HDMI5 Command Ref Cont d Where rly_n Relay number 1 or 2 state State of relay 0 Off 1 On 2 Toggle If present settings are backed up in EEPROM Relay Settings Setup the behavior of the re...

Страница 16: ...input is set to 1 in the vid_msk or aud_msk parameter The time value given is how long a relay remains active after a input is selected that does not match a 1 bit in vid_msk or aud_msk Mode 4 Relays...

Страница 17: ...Z E K T O R 12675 Danielson Ct Suite 401 Poway CA 92064 858 748 8250 www zektor com...

Отзывы: