Used for Flow Graph

Dependents:   nodedemo

Revision:
0:be00bb0372eb
--- /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;
+}