#include #include #include #include "ow-functions.h" #define ITERATIONS 100000 unsigned char calcCRC8 (unsigned char *buff, int len); int main() { unsigned char writeSrc[] = {0x55, 0x10, 0x65, 0x5F, 0x8D, 0x00, 0x08, 0x00, 0x1B, 0x4E, 0x00, 0x00}; unsigned char writeDest[READ_BUFFER_LEN], readDest[READ_BUFFER_LEN]; unsigned char readSrc[] = {0x55, 0x10, 0x65, 0x5F, 0x8D, 0x00, 0x08, 0x00, 0x1B, 0xBE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; const unsigned char expRead[] = {0x55, 0x10, 0x65, 0x5F, 0x8D, 0x00, 0x08, 0x00, 0x1B, 0xBE, 0xAA, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x0C, 0x10, 0x00}; unsigned char crcInput[9] = {0xAA, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x0C, 0x10}; long i; int j; unsigned int k, crc; if (acquireAdapter() < 0) { return EXIT_FAILURE; } if (resetAdapter() < 0) { return EXIT_FAILURE; } for (i = 0; i < ITERATIONS; i++) { for (j = 0; j < 80; j++) { putchar ('-'); } putchar ('\n'); writeSrc[sizeof(writeSrc) - 2] = rand() / ((RAND_MAX >> 8) + 1); writeSrc[sizeof(writeSrc) - 1] = rand() / ((RAND_MAX >> 8) + 1); if ( blockRW (writeSrc, writeDest, sizeof(writeSrc), 1) >= 0 && blockRW (readSrc, readDest, sizeof(readSrc), 1) >= 0 ) { // Check write for (j = 0; j < sizeof(writeSrc) - 2; j++) { for (k = 0x01; k < 0x100; k <<= 1) { putchar ( (writeDest[j] & k) ? '1' : '0' ); } } putchar ('\n'); for (j = 0; j < sizeof(writeSrc) - 2; j++) { for (k = 0x01; k < 0x100; k <<= 1) { putchar ( ((writeDest[j] ^ writeSrc[j]) & k) ? '^' : ' ' ); } } putchar ('\n'); for (j = sizeof(writeSrc) - 2; j < sizeof(writeSrc); j++) { for (k = 0x01; k < 0x100; k <<= 1) { putchar ( (writeDest[j] & k) ? '1' : '0' ); } } putchar ('\n'); for (j = sizeof(writeSrc) - 2; j < sizeof(writeSrc); j++) { for (k = 0x01; k < 0x100; k <<= 1) { putchar ( ((writeDest[j] ^ writeSrc[j]) & k) ? '^' : ' ' ); } } putchar ('\n'); // Check read for (j = 0; j < sizeof(readSrc) - 9; j++) { for (k = 0x01; k < 0x100; k <<= 1) { putchar ( (readDest[j] & k) ? '1' : '0' ); } } putchar ('\n'); for (j = 0; j < sizeof(readSrc) - 9; j++) { for (k = 0x01; k < 0x100; k <<= 1) { putchar ( ((readDest[j] ^ expRead[j]) & k) ? '^' : ' ' ); } } putchar ('\n'); for (j = sizeof(readSrc) - 9; j < sizeof(readSrc) - 7; j++) { for (k = 0x01; k < 0x100; k <<= 1) { putchar ( (readDest[j] & k) ? '1' : '0' ); } } putchar ('\n'); for (j = sizeof(readSrc) - 9; j < sizeof(readSrc) - 7; j++) { for (k = 0x01; k < 0x100; k <<= 1) { putchar ( ((readDest[j] ^ expRead[j]) & k) ? '^' : ' ' ); } } putchar ('\n'); for (j = sizeof(readSrc) - 7; j < sizeof(readSrc) - 5; j++) { for (k = 0x01; k < 0x100; k <<= 1) { putchar ( (readDest[j] & k) ? '1' : '0' ); } } putchar ('\n'); for (j = sizeof(readSrc) - 7; j < sizeof(readSrc) - 5; j++) { for (k = 0x01; k < 0x100; k <<= 1) { putchar ( ((readDest[j] ^ writeSrc[j - 2]) & k) ? '^' : ' ' ); } } putchar ('\n'); for (j = sizeof(readSrc) - 5; j < sizeof(readSrc) - 1; j++) { for (k = 0x01; k < 0x100; k <<= 1) { putchar ( (readDest[j] & k) ? '1' : '0' ); } } putchar ('\n'); for (j = sizeof(readSrc) - 5; j < sizeof(readSrc) - 1; j++) { for (k = 0x01; k < 0x100; k <<= 1) { putchar ( ((readDest[j] ^ expRead[j]) & k) ? '^' : ' ' ); } } putchar ('\n'); crcInput[2] = readDest[sizeof(readSrc) - 7]; crcInput[3] = readDest[sizeof(readSrc) - 6]; crc = calcCRC8 (crcInput, 8); j = sizeof(readSrc) - 1; for (k = 0x01; k < 0x100; k <<= 1) { putchar ( (readDest[j] & k) ? '1' : '0' ); } putchar ('\n'); for (k = 0x01; k < 0x100; k <<= 1) { putchar ( ((readDest[j] ^ crc) & k) ? '^' : ' ' ); } putchar ('\n'); } } for (j = 0; j < 80; j++) { putchar ('-'); } putchar ('\n'); if (releaseAdapter() < 0) { return EXIT_FAILURE; } return 0; } unsigned char calcCRC8 (unsigned char *buff, int len) { unsigned int crc, bit, j; int i; crc = 0x00; for (i = 0; i < len; i++) { for (j = 0x01; j < 0x100; j <<= 1) { bit = ( (buff[i] & j) != 0 ) ^ (crc & 0x01); crc >>= 1; if (bit) { crc ^= 0x8C; } } } return crc; }