Remote Access Control


common.c

Go to the documentation of this file.
00001 // This file has been prepared for Doxygen automatic documentation generation.
00049 #include "common.h"
00050 
00051 
00052 
00053 void copyBytes( byte * destination, const byte * source, byte count)
00054 {
00055         // Copy to temporary variables for optimization.
00056         byte * tempDest = destination;
00057         const byte * tempSrc = source;
00058         byte tempCount = count;
00059 
00060         do {
00061                 *tempDest++ = *tempSrc++;
00062         } while( --tempCount );
00063 }
00064 
00065 
00066 
00067 void addConstant( byte * bytes, const byte * constant, byte count )
00068 {
00069         // Copy to temporary variables for optimization.
00070         byte * tempBlock = bytes;
00071         const byte * tempSource = constant;
00072         byte tempCount = count;
00073         byte tempValue;
00074 
00075         do {
00076                  // Add in GF(2), ie. XOR.
00077                 tempValue = *tempBlock ^ *tempSource++;
00078                 *tempBlock++ = tempValue;
00079         } while( --tempCount );
00080 }
00081 
00082 
00083 
00084 void addConstantFromEEPROM( byte * bytes,
00085                 const byte __eeprom * constant, byte count )
00086 {
00087         // Copy to temporary variables for optimization.
00088         byte * tempDestination = bytes;
00089         byte tempCount = count;
00090         byte tempValue;
00091         EEAR = (uint16_t) constant;
00092 
00093         do {
00094                 EECR |= (1<<EERE);
00095                 ++EEAR;
00096                 tempValue = *tempDestination ^ EEDR; // Add in GF(2), ie. XOR.
00097                 *tempDestination++ = tempValue;
00098         } while( --tempCount );
00099 }
00100 
00101 
00102 
00103 void copyBytesToEEPROM( byte __eeprom * destination,
00104                 const byte * source, byte count )
00105 {
00106         // Copy to temporary variables for optimization.
00107         const byte * tempSrc = source;
00108         byte tempCount = count;
00109         do {} while( EECR & (1<<EEPE) );
00110         EEAR = (uint16_t) destination;
00111 
00112         do {
00113                 EEDR = *tempSrc++;
00114                 EECR |= (1<<EEMPE);
00115                 EECR |= (1<<EEPE);
00116                 do {} while( EECR & (1<<EEPE) );
00117                 ++EEAR;
00118         } while( --tempCount );
00119 }
00120 
00121 
00122 
00123 void copyBytesFromEEPROM( byte * destination,
00124                 const byte __eeprom * source, byte count )
00125 {
00126         // Copy to temporary variables for optimization.
00127         byte * tempDest = destination;
00128         byte tempCount = count;
00129         EEAR = (uint16_t) source;
00130 
00131         do {
00132                 EECR |= (1<<EERE);
00133                 ++EEAR;
00134                 *tempDest++ = EEDR;
00135         } while( --tempCount );
00136 }
00137 
@DOC_TITLE@
Generated on Fri Aug 8 11:03:47 2008 for AVR411 Secure Rolling Code Algorithm (Receiver) by doxygen 1.4.7