From: Michael Gernoth Date: Thu, 27 Jun 2013 08:50:03 +0000 (+0200) Subject: handle RX/TX switching and respect CCA X-Git-Url: https://git.zerfleddert.de/cgi-bin/gitweb.cgi/fhem-stuff/commitdiff_plain/54f699f34a726721c5092279b34ee216d6bcbae6?ds=inline handle RX/TX switching and respect CCA --- diff --git a/culfw/culfw-asksin-fix.diff b/culfw/culfw-asksin-fix.diff index b500222..19e6598 100644 --- a/culfw/culfw-asksin-fix.diff +++ b/culfw/culfw-asksin-fix.diff @@ -40,8 +40,15 @@ Index: clib/rf_asksin.c static void rf_asksin_reset_rx(void); void -@@ -71,12 +75,29 @@ - ccRX(); +@@ -68,15 +72,35 @@ + + my_delay_ms(4); + +- ccRX(); ++ // enable RX, but don't enable the interrupt ++ do { ++ ccStrobe(CC1100_SRX); ++ } while (cc1100_readReg(CC1100_MARCSTATE) != MARCSTATE_RX); } +// Workaround for CC1101 Errata 3 @@ -70,7 +77,7 @@ Index: clib/rf_asksin.c ccStrobe( CC1100_SRX ); } -@@ -87,13 +108,29 @@ +@@ -87,13 +111,29 @@ uint8_t dec[MAX_ASKSIN_MSG]; uint8_t rssi; uint8_t l; @@ -102,7 +109,7 @@ Index: clib/rf_asksin.c if (enc[0] >= MAX_ASKSIN_MSG) { // Something went horribly wrong, out of sync? -@@ -101,6 +138,27 @@ +@@ -101,6 +141,27 @@ return; } @@ -130,7 +137,7 @@ Index: clib/rf_asksin.c CC1100_ASSERT; cc1100_sendbyte( CC1100_READ_BURST | CC1100_RXFIFO ); -@@ -109,12 +167,19 @@ +@@ -109,12 +170,19 @@ } rssi = cc1100_sendbyte( 0 ); @@ -152,3 +159,31 @@ Index: clib/rf_asksin.c dec[0] = enc[0]; dec[1] = (~enc[1]) ^ 0x89; +@@ -182,7 +250,11 @@ + + enc[l] = dec[l] ^ dec[2]; + +- ccTX(); ++ // enable TX, wait for CCA ++ while (cc1100_readReg(CC1100_MARCSTATE) != MARCSTATE_TX) { ++ ccStrobe(CC1100_STX); ++ } ++ + if (dec[2] & (1 << 4)) { // BURST-bit set? + // According to ELV, devices get activated every 300ms, so send burst for 360ms + for(l = 0; l < 3; l++) +@@ -209,11 +281,12 @@ + ccStrobe( CC1100_SFTX ); + ccStrobe( CC1100_SIDLE ); + ccStrobe( CC1100_SNOP ); +- ccStrobe( CC1100_SRX ); + } + + if(asksin_on) { +- ccRX(); ++ do { ++ ccStrobe(CC1100_SRX); ++ } while (cc1100_readReg(CC1100_MARCSTATE) != MARCSTATE_RX); + } else { + set_txrestore(); + }