Karl Zweimüller
/
eth_comfort_test
Programm for decoding radio-signals sent by a ETH-Window-Shutter-Contact, received with a RFM12B-module
Diff: main.cpp
- Revision:
- 0:96794c9fc5a3
- Child:
- 1:fc72e0bdb693
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Mar 02 20:46:57 2011 +0000 @@ -0,0 +1,143 @@ +#include "mbed.h" + +#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 + + +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; + + pc.baud(115200); + + pc.printf("\n\rConnected to mbed\n\r"); + lcd.printf("Hello!\n"); + + init(); + + // state =start + startbit=0; + do{ + + 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; + + 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); + +} + +