background image

MAS7.1 Supplemental Guide, Rev 1.1, 9/28/07

31

K.I.S.S.™

 

 Keep It Simple Serial

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.

You can download this source code at: 

http://www.zektor.com/downloads/crc8tst.c

#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
}

Содержание MAS7.1

Страница 1: ...Home Theater Solutions RS 232 Serial Protocol Reference MAS7 1...

Страница 2: ...t Learnable IR Code 14 LI Front Panel Light Intensities and Mode 14 MCS Multi Channel Split 15 MZ Mute 16 P Power Control 16 PSM Primary Secondary Mapping 16 Q Query Status 17 QZ Query for Zone Inform...

Страница 3: ...cable The MAS7 1 can also be used with any USB to RS 232 conversion cable these are all typically straight through cables Be sure to install any drivers that come with the USB to RS 232 cable you are...

Страница 4: ...modes if you send a command and don t get a response in 100ms something s wrong with the connection There are three different types of responses Acknowledgements Errors and Query Strings The Acknowled...

Страница 5: ...e when the power is tog gled See Master Slave and Asynchronous Modes of Operation on page 27 Checksums and CRC8 s You can optionally append a checksum or a CRC8 checkcode to the end of any serial comm...

Страница 6: ...these commands a Zektor universal driver can be more easily written Table of MAS7 1 Commands U Command Description Comments x P p Power control p power state 0 off 1 on toggle x SZ 1 n Set zone to in...

Страница 7: ...A number between 1 and 3 indicating which primary button you re pressing If the Sync LED is lit the both the primary and secondary LEDs will change if it is not lit only the primary LEDs will change...

Страница 8: ...S7 1 for its current state use the as the only parameter and the MAS7 1 will respond with a followed by the command with the current settings as parameters To read the power on state of the MAS7 1 P C...

Страница 9: ...ror 5 Too many or too few parameters 6 Device busy cannot process command 7 Buffer overflow And some more detailed descriptions of their meanings Error 1 The command given was not recognized as a MAS7...

Страница 10: ...ry tight control over the MAS7 1 By disabling the front panel see XS Control Settings on page 21 and by then processing the front panel button presses of the MAS7 1 the user can redefine the operation...

Страница 11: ...ut it will be ignored if the MAS7 1 is not in a setup mode By issuing 0 codes the MAS7 1 can be returned to a known state regardless of any possible setup state it might be in The 0 button code is als...

Страница 12: ...o prefix is used all channels will be set to the given delay The nn is a variable and indicates the delay time in milliseconds Not all parameters have to be present and they do not have to appear in a...

Страница 13: ...for every IR code detected by the front panel IR sensor or IR jack if enabled regardless as to whether the IR code detected was used to control the MAS7 1 The uses for this command are two fold 1 The...

Страница 14: ...that the MAS7 1 is able to learn they are IRCmd Description 1 Toggle Power 2 Select Input 1 3 Select Input 2 4 Select Input 3 5 Select Input S1 6 Select Input S2 7 Select Input S3 8 Toggle SYNC 9 Dis...

Страница 15: ...L Left stereo audio connector R Right stereo audio connector This command uses a bitmapped parameter See Using Bitmapped Parameters on page 24 Each bit represents the mapping for one connector as def...

Страница 16: ...hich channel is being muted If no pre fix is used all channels will be affected The m is a variable and indicates the mute setting 0 Not muted 1 Muted Not all parameters have to be present and they do...

Страница 17: ...EEPROM would be PSM 6 If the settings are changed but the suffix is not used the new settings will not be restored after a power fail ure The suffix is used to backup the new settings in EEPROM which...

Страница 18: ...s breakaway_opt_x A variable number of breakaway options This command is used to determine the number of inputs zones and the different breakaway options available to a device Its response string is s...

Страница 19: ...OM To save the new LI settings you can issue the LI command with just a LI Or you can use the SS command to save all unsaved data which will include the LI setting SS 2 The SS command is also used to...

Страница 20: ...return SZ 1 M2 A3 D1 H2 V Version Query Query for the current firmware version of the MAS7 1 V Request version string V Request version string Response String V MAS7 1 firmware_ver firmware_serial_num...

Страница 21: ...anged FPC 1 Front panel settings have changed PSM 1 Primary secondary mappings have changed This command uses a bitmapped parameter see Using Bitmapped Parameters on page 24 The parameter is a Backup...

Страница 22: ...trol Settings will also backup the Transmit Enable Settings see XE Transmit Enable Settings on page 20 The IR control IRE and the IR jack IRS work differently when disabled Disabling IR control by set...

Страница 23: ...erpreted as P 1 When a command has more than one parameter the parameters are separated by either whitespace s or a comma or both whitespace s and a comma for instance LI 3 3 80 CR or LI 3 3 80 CR wil...

Страница 24: ...set those two bits and reset all the others would be XS 9 CR Individual bits of a bitmapped parameter can be set or reset without affecting the other bits by prefixing the bit mapped parameter with a...

Страница 25: ...e ESC character can be issued to clear the buffer and reset any checksum or CRC 8 checkcode calculations This is useful when communications with the Zektor device is being initialized and the state of...

Страница 26: ...er to use a single rou tine to issue a command and check for an Acknowledgement or an Error Response String whether or not the command queries for a response An example of an error response IL CR Sent...

Страница 27: ...here is a Query Status command available to the control ler that return the status state of the device as a bitmap of flags indicating which states have changed and need querying This allows the contr...

Страница 28: ...ceived One approach would be to write a Get Response routine that handles all Query Response internally by looking for the character and only passing through non query responses By using such a routin...

Страница 29: ...nding more and different types of errors than a checksum can A good description of its capability is described in the above referenced articles but a simple example show some of the differences Here s...

Страница 30: ...calculated checksum appended to it You can download this source code at http www zektor com downloads ckstst c include stdio h int main void char TestString LI 3 2 80 unsigned char cksum int index ch...

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

Страница 32: ...ng LI 3 2 80 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 chara...

Отзывы: