Karl Zweimüller
/
eth_comfort_test
Programm for decoding radio-signals sent by a ETH-Window-Shutter-Contact, received with a RFM12B-module
main.cpp
- Committer:
- charly
- Date:
- 2011-03-02
- Revision:
- 0:96794c9fc5a3
- Child:
- 1:fc72e0bdb693
File content as of revision 0:96794c9fc5a3:
#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); }