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

Dependencies:   TextLCD mbed

Committer:
charly
Date:
Wed Mar 02 20:46:57 2011 +0000
Revision:
0:96794c9fc5a3
Child:
1:fc72e0bdb693
Initial pre-beta version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
charly 0:96794c9fc5a3 1 #include "mbed.h"
charly 0:96794c9fc5a3 2
charly 0:96794c9fc5a3 3 #include "TextLCD.h"
charly 0:96794c9fc5a3 4
charly 0:96794c9fc5a3 5 TextLCD lcd(p30, p29, p28, p27, p26, p25, TextLCD::LCD16x2); // rs, e, d0-d3
charly 0:96794c9fc5a3 6
charly 0:96794c9fc5a3 7 #include "eth_comfort.h"
charly 0:96794c9fc5a3 8 #include "rfm.h"
charly 0:96794c9fc5a3 9 #include "rfm12b.h"
charly 0:96794c9fc5a3 10
charly 0:96794c9fc5a3 11 rfm12b rfm12b_spi(p11, p12, p13, p14, p18); // mosi, miso, sclk, cs, rxdata
charly 0:96794c9fc5a3 12
charly 0:96794c9fc5a3 13
charly 0:96794c9fc5a3 14 Serial pc(USBTX, USBRX); // tx, rx
charly 0:96794c9fc5a3 15
charly 0:96794c9fc5a3 16 // mbed LEDs
charly 0:96794c9fc5a3 17 DigitalOut led1(LED1);
charly 0:96794c9fc5a3 18 DigitalOut led2(LED2);
charly 0:96794c9fc5a3 19 DigitalOut led3(LED3);
charly 0:96794c9fc5a3 20 DigitalOut led4(LED4);
charly 0:96794c9fc5a3 21
charly 0:96794c9fc5a3 22
charly 0:96794c9fc5a3 23
charly 0:96794c9fc5a3 24 //---------------------------------------------------------------------
charly 0:96794c9fc5a3 25
charly 0:96794c9fc5a3 26 void init(void)
charly 0:96794c9fc5a3 27 {
charly 0:96794c9fc5a3 28
charly 0:96794c9fc5a3 29
charly 0:96794c9fc5a3 30 rbyte=0;
charly 0:96794c9fc5a3 31 bit_cnt=0;
charly 0:96794c9fc5a3 32 buffer_cnt=0;
charly 0:96794c9fc5a3 33
charly 0:96794c9fc5a3 34 decode=0;
charly 0:96794c9fc5a3 35
charly 0:96794c9fc5a3 36 pack_ok=0; // this will be set by ISR, when byte was received
charly 0:96794c9fc5a3 37
charly 0:96794c9fc5a3 38
charly 0:96794c9fc5a3 39 // init the eth_receiver
charly 0:96794c9fc5a3 40 eth_init();
charly 0:96794c9fc5a3 41
charly 0:96794c9fc5a3 42 // Interrupt on every bit-change
charly 0:96794c9fc5a3 43 rfm12b_spi.attachISR(&ISR);
charly 0:96794c9fc5a3 44
charly 0:96794c9fc5a3 45 // Init the RFM12B
charly 0:96794c9fc5a3 46 rfm12b_spi.RFM_init();
charly 0:96794c9fc5a3 47
charly 0:96794c9fc5a3 48 }
charly 0:96794c9fc5a3 49
charly 0:96794c9fc5a3 50 //---------------------------------------------------------------------
charly 0:96794c9fc5a3 51 //
charly 0:96794c9fc5a3 52 //---------------------------------------------------------------------
charly 0:96794c9fc5a3 53
charly 0:96794c9fc5a3 54 int main()
charly 0:96794c9fc5a3 55 {
charly 0:96794c9fc5a3 56 uint8_t blocklength=0;
charly 0:96794c9fc5a3 57 unsigned int i,j=0,k;
charly 0:96794c9fc5a3 58 unsigned long timeout=0;
charly 0:96794c9fc5a3 59 unsigned long tick=0;
charly 0:96794c9fc5a3 60 uint16_t crc, swapped;
charly 0:96794c9fc5a3 61 bool crc_ok = false;
charly 0:96794c9fc5a3 62
charly 0:96794c9fc5a3 63 pc.baud(115200);
charly 0:96794c9fc5a3 64
charly 0:96794c9fc5a3 65 pc.printf("\n\rConnected to mbed\n\r");
charly 0:96794c9fc5a3 66 lcd.printf("Hello!\n");
charly 0:96794c9fc5a3 67
charly 0:96794c9fc5a3 68 init();
charly 0:96794c9fc5a3 69
charly 0:96794c9fc5a3 70 // state =start
charly 0:96794c9fc5a3 71 startbit=0;
charly 0:96794c9fc5a3 72 do{
charly 0:96794c9fc5a3 73
charly 0:96794c9fc5a3 74 if (pack_ok==1){
charly 0:96794c9fc5a3 75 timeout=0;
charly 0:96794c9fc5a3 76 pack_ok=0;
charly 0:96794c9fc5a3 77 j=0;
charly 0:96794c9fc5a3 78 };
charly 0:96794c9fc5a3 79 if(timeout<10000){
charly 0:96794c9fc5a3 80 timeout++;
charly 0:96794c9fc5a3 81 }
charly 0:96794c9fc5a3 82 else if(timeout==10000){
charly 0:96794c9fc5a3 83 if(buffer_cnt>8){
charly 0:96794c9fc5a3 84 if (buf[2]==0x10) blocklength=10;
charly 0:96794c9fc5a3 85 else if(buf[2]==0x20) blocklength=9;
charly 0:96794c9fc5a3 86 else blocklength=99;
charly 0:96794c9fc5a3 87 j=0;
charly 0:96794c9fc5a3 88 crc_ok = false;
charly 0:96794c9fc5a3 89 for(i=0;i<=buffer_cnt;i++){
charly 0:96794c9fc5a3 90 pc.printf("%02X ",buf[i]);
charly 0:96794c9fc5a3 91 j++;
charly 0:96794c9fc5a3 92 if(j==blocklength){
charly 0:96794c9fc5a3 93 //check crc
charly 0:96794c9fc5a3 94 if(blocklength==9){
charly 0:96794c9fc5a3 95 crc=0xbdb7;
charly 0:96794c9fc5a3 96 for(k=0;k<7;k++){ // crc over first 7 byte
charly 0:96794c9fc5a3 97 crc=calcCRC16r(buf[k],crc,0x8408);
charly 0:96794c9fc5a3 98 }
charly 0:96794c9fc5a3 99 //swap the two crc-bytes
charly 0:96794c9fc5a3 100 swapped = ((crc >> 8) & 0xff) | ((crc << 8) & 0xff00);
charly 0:96794c9fc5a3 101 pc.printf("CRC: %04X ",swapped);
charly 0:96794c9fc5a3 102 if (((buf[7]<<8) | buf[8]) == swapped) crc_ok = true;
charly 0:96794c9fc5a3 103 else crc_ok = false;
charly 0:96794c9fc5a3 104 pc.printf("%s", (crc_ok==true) ? "OK" : "Not OK");
charly 0:96794c9fc5a3 105 if (crc_ok) {
charly 0:96794c9fc5a3 106 pc.printf("\n\rCounter: %02X\n\r",buf[1]);
charly 0:96794c9fc5a3 107 pc.printf( " Dev-ID: %02X %02X %02X\n\r",buf[3],buf[4],buf[5]);
charly 0:96794c9fc5a3 108 //pc.printf( "Battery: %s\n\r", (buf[6]&0x80 != 0x00) ? "WEAK" : "GOOD");
charly 0:96794c9fc5a3 109 pc.printf( "Window : %s\n\r\n\r", (buf[6]&0x01 != 0x00) ? "OPEN" : "CLOSE");
charly 0:96794c9fc5a3 110 lcd.cls();
charly 0:96794c9fc5a3 111 lcd.printf("#:%02X ID: %02X%02X%02X\n",buf[1],buf[3],buf[4],buf[5]);
charly 0:96794c9fc5a3 112 lcd.printf("Window : %s\n", (buf[6]&0x01 != 0x00) ? "OPEN" : "CLOSE");
charly 0:96794c9fc5a3 113 }
charly 0:96794c9fc5a3 114 }
charly 0:96794c9fc5a3 115 pc.printf("\n\r");
charly 0:96794c9fc5a3 116 }
charly 0:96794c9fc5a3 117 }
charly 0:96794c9fc5a3 118
charly 0:96794c9fc5a3 119
charly 0:96794c9fc5a3 120 //start receive from beginning
charly 0:96794c9fc5a3 121 buffer_cnt=0;
charly 0:96794c9fc5a3 122 bit_cnt=0;
charly 0:96794c9fc5a3 123 timeout++;
charly 0:96794c9fc5a3 124 startbit=0;
charly 0:96794c9fc5a3 125 state=0;
charly 0:96794c9fc5a3 126
charly 0:96794c9fc5a3 127 pc.printf("\n\r-----------------------------\n\r");
charly 0:96794c9fc5a3 128 for(i=0;i<1023;i++)buf[i]=0;
charly 0:96794c9fc5a3 129 };
charly 0:96794c9fc5a3 130 timeout = 0;
charly 0:96794c9fc5a3 131 };
charly 0:96794c9fc5a3 132 tick++;
charly 0:96794c9fc5a3 133 //delay_ms(100);
charly 0:96794c9fc5a3 134 if(tick>=2000000){
charly 0:96794c9fc5a3 135 tick=0;
charly 0:96794c9fc5a3 136 led1= !led1;
charly 0:96794c9fc5a3 137 led3=0; // reset receive-led
charly 0:96794c9fc5a3 138 };
charly 0:96794c9fc5a3 139 }while(1==1);
charly 0:96794c9fc5a3 140
charly 0:96794c9fc5a3 141 }
charly 0:96794c9fc5a3 142
charly 0:96794c9fc5a3 143