Used for Flow Graph
Node.cpp
- Committer:
- henryeherman
- Date:
- 2011-10-30
- Revision:
- 0:be00bb0372eb
File content as of revision 0:be00bb0372eb:
#include "Node.h" unsigned int crc_table[16] = { 0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac, 0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c, 0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c, 0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c }; unsigned long crc_update(unsigned long crc, unsigned int data) { char tbl_idx; tbl_idx = crc ^ (data >> (0*4)); crc = crc_table[tbl_idx & 0x0f] ^ (crc >> 4); tbl_idx = crc ^ (data >> (1*4)); crc = crc_table[tbl_idx & 0x0f] ^ (crc >> 4); return crc; } unsigned long crc_string(char *s) { unsigned long crc = ~0L; while(*s) crc = crc_update(crc, *s++); crc = ~crc; return crc; } unsigned long crc_len(char *s, unsigned int len) { unsigned long crc = ~0L; for(int idx=0;idx<len;idx++) crc = crc_update(crc, *s++); crc = ~crc; return crc; } Node::Node(unsigned int n, unsigned int k, PinName pinid) : pin(pinid) { setupInputOutput(n,k); delay=0; } Node::Node(unsigned int n, unsigned int k, PinName pinid, unsigned int delay_ms) : pin(pinid) { setupInputOutput(n,k); delay=delay_ms; } int Node::getSize() { return ksize; } char *Node::execute(char *data) { toggleHigh(); *tempbuffer=crc_len(data, nsize); for(int idx=1;idx<ksize;idx++) { *(tempbuffer+idx)=(char)crc_update(0,(*(tempbuffer+idx-1))); } wait_ms(delay); toggleLow(); return tempbuffer; } void Node::setupInputOutput(unsigned int n, unsigned int k) { nsize=n; ksize=k; data_ = (char *)malloc(nsize); tempbuffer = (char *)malloc(nsize+ksize); } void Node::toggleHigh() { pin=1; } void Node::toggleLow() { pin=0; }