Used for Flow Graph
Revision 0:be00bb0372eb, committed 2011-10-30
- Comitter:
- henryeherman
- Date:
- Sun Oct 30 11:29:10 2011 +0000
- Commit message:
- For 202A
Changed in this revision
Node.cpp | Show annotated file Show diff for this revision Revisions of this file |
Node.h | Show annotated file Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Node.cpp Sun Oct 30 11:29:10 2011 +0000 @@ -0,0 +1,75 @@ +#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; +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Node.h Sun Oct 30 11:29:10 2011 +0000 @@ -0,0 +1,22 @@ +#ifndef NODE_H +#define NODE_H +#include "mbed.h" + +class Node { + public: + Node(unsigned int n, unsigned int k, PinName pinid); + Node(unsigned int n, unsigned int k, PinName pinid, unsigned int delay_ms); + char *execute(char *data ); + int getSize(); + private: + void setupInputOutput(unsigned int, unsigned int); + unsigned int ksize; + unsigned int nsize; + DigitalOut pin; + void toggleHigh(); + void toggleLow(); + char *data_; + unsigned int delay; + char *tempbuffer; +}; +#endif