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@0:96794c9fc5a3, 2011-03-02 (annotated)
- 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?
User | Revision | Line number | New 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 |