Programm for decoding radio-signals sent by a ETH-Window-Shutter-Contact, received with a RFM12B-module

Dependencies:   TextLCD mbed

Revision:
1:fc72e0bdb693
Parent:
0:96794c9fc5a3
--- a/main.cpp	Wed Mar 02 20:46:57 2011 +0000
+++ b/main.cpp	Thu Apr 07 19:54:09 2011 +0000
@@ -2,141 +2,63 @@
 
 #include "TextLCD.h"
 
-TextLCD lcd(p30, p29, p28, p27, p26, p25, TextLCD::LCD16x2); // rs, e, d0-d3
-
 #include "eth_comfort.h"
 #include "rfm.h"
 #include "rfm12b.h"
 
-rfm12b rfm12b_spi(p11, p12, p13, p14, p18); // mosi, miso, sclk, cs, rxdata
+/*!
+ * \file       main.cpp
+ * \brief      Show the messages from ETH-Radio-Shutters on serial port and lcd
+ * \author     Karl Zweimüller
+ */
 
+TextLCD lcd(p30, p29, p28, p27, p26, p25, TextLCD::LCD16x2); // rs, e, d0-d3
+
+eth_comfort eth_comf(p11, p12, p13, p14, p18, LED4); // mosi, miso, sclk, cs, rxdata, rxled
 
 Serial pc(USBTX, USBRX); // tx, rx
 
 // mbed LEDs
+/*
 DigitalOut led1(LED1);
 DigitalOut led2(LED2);
 DigitalOut led3(LED3);
 DigitalOut led4(LED4);
-
-
-
-//---------------------------------------------------------------------
-
-void init(void)
-{
-
-  
-      rbyte=0;
-      bit_cnt=0;
-      buffer_cnt=0;
-
-      decode=0;
-      
-      pack_ok=0;           // this will be set by ISR, when byte was received
-      
-    
-      // init the eth_receiver
-      eth_init();
-      
-      // Interrupt on every bit-change
-      rfm12b_spi.attachISR(&ISR);
-      
-      // Init the RFM12B
-      rfm12b_spi.RFM_init();
-      
-}
+*/
 
 //---------------------------------------------------------------------
 //
 //---------------------------------------------------------------------
 
-int main()
-{
-uint8_t blocklength=0;
-unsigned int i,j=0,k;
-unsigned long timeout=0;
-unsigned long tick=0;
-uint16_t crc, swapped;
-bool  crc_ok = false;
+int main() {
+
+    eth_message message;
 
-  pc.baud(115200);
-
-  pc.printf("\n\rConnected to mbed\n\r");
-  lcd.printf("Hello!\n");
+    pc.baud(115200);
 
-  init();
-  
-                                                               // state =start
-  startbit=0;
-  do{
+    pc.printf("\n\rConnected to mbed\n\r");
+    lcd.printf("Hello!\n");
 
-      if (pack_ok==1){
-            timeout=0;
-            pack_ok=0;
-            j=0;
-      };
-      if(timeout<10000){
-            timeout++;
-      }
-      else if(timeout==10000){
-                  if(buffer_cnt>8){
-                        if     (buf[2]==0x10) blocklength=10;
-                        else if(buf[2]==0x20) blocklength=9;
-                        else                  blocklength=99;
-                        j=0;
-                        crc_ok = false;
-                        for(i=0;i<=buffer_cnt;i++){
-                              pc.printf("%02X ",buf[i]);
-                              j++;
-                              if(j==blocklength){
-                                    //check crc
-                                    if(blocklength==9){
-                                       crc=0xbdb7;
-                                       for(k=0;k<7;k++){                           // crc over first 7 byte
-                                           crc=calcCRC16r(buf[k],crc,0x8408);
-                                       }
-                                       //swap the two crc-bytes
-                                       swapped = ((crc >> 8) & 0xff) | ((crc << 8) & 0xff00);
-                                       pc.printf("CRC: %04X ",swapped);
-                                       if (((buf[7]<<8) | buf[8]) == swapped) crc_ok = true;
-                                       else crc_ok = false;
-                                       pc.printf("%s", (crc_ok==true) ? "OK" : "Not OK");
-                                       if (crc_ok) {
-                                          pc.printf("\n\rCounter: %02X\n\r",buf[1]);
-                                          pc.printf(    " Dev-ID: %02X %02X %02X\n\r",buf[3],buf[4],buf[5]);
-                                          //pc.printf(    "Battery: %s\n\r", (buf[6]&0x80 != 0x00) ? "WEAK" : "GOOD");
-                                          pc.printf(    "Window : %s\n\r\n\r", (buf[6]&0x01 != 0x00) ? "OPEN" : "CLOSE");
-                                          lcd.cls();
-                                          lcd.printf("#:%02X ID: %02X%02X%02X\n",buf[1],buf[3],buf[4],buf[5]);
-                                          lcd.printf("Window : %s\n", (buf[6]&0x01 != 0x00) ? "OPEN" : "CLOSE");
-                                       }
-                                    }
-                                    pc.printf("\n\r");
-                              }
-                         }
-                        
-                        
-                        //start receive from beginning
-                        buffer_cnt=0;
-                        bit_cnt=0;
-                        timeout++;
-                        startbit=0;
-                        state=0;
+    do {
+        // anything new?
+        if (eth_comf.readable()) {
+            // read the new message and display
+            message = eth_comf.getMessage();
+            pc.printf("\n\rCounter: %02X\n\r",message.cnt);
+            pc.printf(    " Dev-ID: %06X\n\r",message.adr);
+            pc.printf(    "    cmd: %0X\n\r",message.cmd);
+            //pc.printf(    "cmd&0x80: %0X\n\r",message.cmd&0x80);
+            // why doesn't work the following??????????????
+            //pc.printf(    "Battery: ");
+            //if (message.cmd&0x80 == 0x00) pc.printf("GOOD\n\r"); else pc.printf("WEAK\n\r");
 
-                        pc.printf("\n\r-----------------------------\n\r");
-                        for(i=0;i<1023;i++)buf[i]=0;
-                  };
-                  timeout = 0;
-      };
-      tick++;
-     //delay_ms(100);
-     if(tick>=2000000){
-            tick=0;
-            led1= !led1;
-            led3=0;               // reset receive-led
-      };
-}while(1==1);
+            pc.printf(    "Window : %s\n\r\n\r", (message.cmd&0x01 != 0x00) ? "OPEN" : "CLOSE");
+            lcd.cls();
+            lcd.printf("#:%02X ID: %06X\n",message.cnt,message.adr);
+            lcd.printf("Window : %s\n", (message.cmd&0x01 != 0x00) ? "OPEN" : "CLOSE");
+            pc.printf("\n\r");
+        }
+    } while (1==1);
 
 }