3D Low Frequency Wakeup Receiver

Revision:
3:2de552c4ffbc
Parent:
2:c3435a136e50
Child:
4:10d482ca4eb1
--- a/AS3933.cpp	Wed Mar 07 15:04:16 2018 +0000
+++ b/AS3933.cpp	Wed Mar 07 16:43:51 2018 +0000
@@ -71,7 +71,7 @@
 
     // Read R0 register
     cmd[0]           =   ( AS3933_READ | AS3933_R0 );
-    mySPI_status     =   _spi.write ( &cmd[0], 1, &cmd[1], 1 );
+    mySPI_status     =   _spi.write ( &cmd[0], 1, &cmd[0], 2 );
 
     // Mask Channels 1:3
     cmd[1] &=   ~( EN_A1_MASK | EN_A2_MASK | EN_A3_MASK );
@@ -155,7 +155,7 @@
         // Read R4 register
         cmd[0]           =    ( AS3933_READ | AS3933_R4 );
         _cs              =   1;
-        mySPI_status     =    _spi.write ( &cmd[0], 1, &cmd[1], 1 );
+        mySPI_status     =    _spi.write ( &cmd[0], 1, &cmd[0], 2 );
         _cs              =   0;
 
         // Mask T_OFF
@@ -207,7 +207,7 @@
     // Read R8 register
     cmd[0]           =   ( AS3933_READ | AS3933_R8 );
     _cs              =   1;
-    mySPI_status     =   _spi.write ( &cmd[0], 1, &cmd[1], 1 );
+    mySPI_status     =   _spi.write ( &cmd[0], 1, &cmd[0], 2 );
     _cs              =   0;
 
     // Mask Artificial wakeup
@@ -254,15 +254,17 @@
  */
 AS3933::AS3933_status_t  AS3933::AS3933_ReadFalseWakeUpRegister ( AS3933_data_t* myF_WAKE )
 {
-    char    cmd   =    ( AS3933_READ | AS3933_R13 );
+    char    cmd[]   =    { ( AS3933_READ | AS3933_R13 ), 0 };
     int     mySPI_status;
 
 
     // Read R13 register
     _cs              =   1;
-    mySPI_status     =   _spi.write ( &cmd, 1, (char*)( &myF_WAKE->f_wake ), 1 );
+    mySPI_status     =   _spi.write ( &cmd[0], 1, &cmd[0], 2 );
     _cs              =   0;
-
+    
+    
+    myF_WAKE->f_wake     =   cmd[1];
 
 
 
@@ -303,7 +305,7 @@
     // Read R1 register
     cmd[0]           =   ( AS3933_READ | AS3933_R1 );
     _cs              =   1;
-    mySPI_status     =   _spi.write ( &cmd[0], 1, &cmd[1], 1 );
+    mySPI_status     =   _spi.write ( &cmd[0], 1, &cmd[0], 2 );
     _cs              =   0;
 
     // Mask Crystal oscillator
@@ -324,7 +326,7 @@
     // Read R16 register
     cmd[0]           =   ( AS3933_READ | AS3933_R16 );
     _cs              =   1;
-    mySPI_status     =   _spi.write ( &cmd[0], 1, &cmd[1], 1 );
+    mySPI_status     =   _spi.write ( &cmd[0], 1, &cmd[0], 2 );
     _cs              =   0;
 
     // Mask Clock Generator output signal
@@ -372,27 +374,27 @@
  */
 AS3933::AS3933_status_t  AS3933::AS3933_CalibrateRC_Oscillator ( void )
 {
-    char        cmd         =    0;
+    char        cmd[]       =    { 0, 0 };
     uint32_t    myTimeout   =    0;
     int         mySPI_status;
 
 
     // Start the calibration
-    cmd              =   ( AS3933_DIRECT_COMMAND | CALIB_RCO_LC );
+    cmd[0]           =   ( AS3933_DIRECT_COMMAND | CALIB_RCO_LC );
     _cs              =   1;
-    mySPI_status     =   _spi.write ( &cmd, 1, &cmd, 0 );
+    mySPI_status     =   _spi.write ( &cmd[0], 1, &cmd[0], 0 );
     _cs              =   0;
 
 
     // RC oscillator will be calibrated when RC_CAL_OK = '1' ( R14<6> )
     myTimeout        =   23232323;
     do{
-        cmd              =   ( AS3933_READ | AS3933_R14 );
+        cmd[0]           =   ( AS3933_READ | AS3933_R14 );
         _cs              =   1;
-        mySPI_status     =   _spi.write ( &cmd, 1, &cmd, 1 );
+        mySPI_status     =   _spi.write ( &cmd[0], 1, &cmd[0], 2 );
         _cs              =   0;
         myTimeout--;
-    } while ( ( ( cmd & RC_CAL_OK_MASK ) != RC_CAL_OK_HIGH ) && ( myTimeout > 0 ) );
+    } while ( ( ( cmd[1] & RC_CAL_OK_MASK ) != RC_CAL_OK_HIGH ) && ( myTimeout > 0 ) );
 
 
 
@@ -433,7 +435,7 @@
     // Read R1 register
     cmd[0]           =   ( AS3933_READ | AS3933_R1 );
     _cs              =   1;
-    mySPI_status     =   _spi.write ( &cmd[0], 1, &cmd[1], 1 );
+    mySPI_status     =   _spi.write ( &cmd[0], 1, &cmd[0], 2 );
     _cs              =   0;
 
     // Mask Antenna dumper
@@ -451,7 +453,7 @@
     // Read R4 register
     cmd[0]           =   ( AS3933_READ | AS3933_R4 );
     _cs              =   1;
-    mySPI_status     =   _spi.write ( &cmd[0], 1, &cmd[1], 1 );
+    mySPI_status     =   _spi.write ( &cmd[0], 1, &cmd[0], 2 );
     _cs              =   0;
 
     // Mask Antenna dumper resistor
@@ -502,7 +504,7 @@
     // Read R3 register
     cmd[0]           =   ( AS3933_READ | AS3933_R3 );
     _cs              =   1;
-    mySPI_status     =   _spi.write ( &cmd[0], 1, &cmd[1], 1 );
+    mySPI_status     =   _spi.write ( &cmd[0], 1, &cmd[0], 2 );
     _cs              =   0;
 
     // Mask Symbol rate
@@ -556,7 +558,7 @@
     // Read R1 register
     cmd[0]           =   ( AS3933_READ | AS3933_R1 );
     _cs              =   1;
-    mySPI_status     =   _spi.write ( &cmd[0], 1, &cmd[1], 1 );
+    mySPI_status     =   _spi.write ( &cmd[0], 1, &cmd[0], 2 );
     _cs              =   0;
 
     // Mask Data slicer absolute reference
@@ -574,7 +576,7 @@
     // Read R3 register
     cmd[0]           =   ( AS3933_READ | AS3933_R3 );
     _cs              =   1;
-    mySPI_status     =   _spi.write ( &cmd[0], 1, &cmd[1], 1 );
+    mySPI_status     =   _spi.write ( &cmd[0], 1, &cmd[0], 2 );
     _cs              =   0;
 
     // Mask Data slices time constant
@@ -626,7 +628,7 @@
     // Read R3 register
     cmd[0]           =   ( AS3933_READ | AS3933_R3 );
     _cs              =   1;
-    mySPI_status     =   _spi.write ( &cmd[0], 1, &cmd[1], 1 );
+    mySPI_status     =   _spi.write ( &cmd[0], 1, &cmd[0], 2 );
     _cs              =   0;
 
     // Mask both hysteresis edge and comparator
@@ -677,7 +679,7 @@
     // Read R4 register
     cmd[0]           =   ( AS3933_READ | AS3933_R4 );
     _cs              =   1;
-    mySPI_status     =   _spi.write ( &cmd[0], 1, &cmd[1], 1 );
+    mySPI_status     =   _spi.write ( &cmd[0], 1, &cmd[0], 2 );
     _cs              =   0;
 
     // Mask Gain reduction
@@ -728,7 +730,7 @@
     // Read R8 register
     cmd[0]           =   ( AS3933_READ | AS3933_R8 );
     _cs              =   1;
-    mySPI_status     =   _spi.write ( &cmd[0], 1, &cmd[1], 1 );
+    mySPI_status     =   _spi.write ( &cmd[0], 1, &cmd[0], 2 );
     _cs              =   0;
 
     // Mask Band selection
@@ -779,7 +781,7 @@
     // Read R2 register
     cmd[0]           =   ( AS3933_READ | AS3933_R2 );
     _cs              =   1;
-    mySPI_status     =   _spi.write ( &cmd[0], 1, &cmd[1], 1 );
+    mySPI_status     =   _spi.write ( &cmd[0], 1, &cmd[0], 2 );
     _cs              =   0;
 
     // Mask Tolerance band
@@ -830,7 +832,7 @@
     // Read R2 register
     cmd[0]           =   ( AS3933_READ | AS3933_R2 );
     _cs              =   1;
-    mySPI_status     =   _spi.write ( &cmd[0], 1, &cmd[1], 1 );
+    mySPI_status     =   _spi.write ( &cmd[0], 1, &cmd[0], 2 );
     _cs              =   0;
 
     // Mask Gain boost
@@ -882,7 +884,7 @@
     // Read R1 register
     cmd[0]           =   ( AS3933_READ | AS3933_R1 );
     _cs              =   1;
-    mySPI_status     =   _spi.write ( &cmd[0], 1, &cmd[1], 1 );
+    mySPI_status     =   _spi.write ( &cmd[0], 1, &cmd[0], 2 );
     _cs              =   0;
 
     // Mask both AGC acting only on the first carrier burst and AGC direction operating
@@ -933,7 +935,7 @@
     // Read R0 register
     cmd[0]           =   ( AS3933_READ | AS3933_R0 );
     _cs              =   1;
-    mySPI_status     =   _spi.write ( &cmd[0], 1, &cmd[1], 1 );
+    mySPI_status     =   _spi.write ( &cmd[0], 1, &cmd[0], 2 );
     _cs              =   0;
 
     // Mask Mask data on DAT pin before wakeup happens
@@ -989,7 +991,7 @@
     // Read R1 register
     cmd[0]           =   ( AS3933_READ | AS3933_R1 );
     _cs              =   1;
-    mySPI_status     =   _spi.write ( &cmd[0], 1, &cmd[1], 1 );
+    mySPI_status     =   _spi.write ( &cmd[0], 1, &cmd[0], 2 );
     _cs              =   0;
 
     // Mask both Correlator mode and Manchester decoder mode
@@ -1025,7 +1027,7 @@
     // Read R7 register
     cmd[0]           =   ( AS3933_READ | AS3933_R7 );
     _cs              =   1;
-    mySPI_status     =   _spi.write ( &cmd[0], 1, &cmd[1], 1 );
+    mySPI_status     =   _spi.write ( &cmd[0], 1, &cmd[0], 2 );
     _cs              =   0;
 
     // Mask Bit rate definition
@@ -1078,14 +1080,14 @@
     cmd[0]           =   ( AS3933_WRITE | AS3933_R5 );
     cmd[1]           =   ( myWakeUpPattern.patt2b );
     _cs              =   1;
-    mySPI_status     =    _spi.write ( &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), &cmd[0], 0 );
+    mySPI_status     =    _spi.write ( &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), &cmd[0], 1 );
     _cs              =   0;
 
     // Update PATT1B
     cmd[0]           =   ( AS3933_WRITE | AS3933_R6 );
     cmd[1]           =   ( myWakeUpPattern.patt1b );
     _cs              =   1;
-    mySPI_status     =    _spi.write ( &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), &cmd[0], 0 );
+    mySPI_status     =    _spi.write ( &cmd[0], sizeof( cmd )/sizeof( cmd[0] ), &cmd[0], 1 );
     _cs              =   0;
 
 
@@ -1119,23 +1121,25 @@
  */
 AS3933::AS3933_status_t  AS3933::AS3933_GetWakeUpPattern ( AS3933_data_t* myWakeUpPattern )
 {
-    char    cmd       =    0;
+    char    cmd[]       =    { 0, 0 };
     int     mySPI_status;
 
 
     // Read R5 register
-    cmd              =   ( AS3933_READ | AS3933_R5 );
+    cmd[0]           =   ( AS3933_READ | AS3933_R5 );
     _cs              =   1;
-    mySPI_status     =    _spi.write ( &cmd, 1, (char*)&myWakeUpPattern->patt2b, 1 );
+    mySPI_status     =    _spi.write ( &cmd[0], 1, &cmd[0], 2 );
+    _cs              =   0;
+    
+    myWakeUpPattern->patt2b  =   cmd[1];
+    
+    // Read R6 register
+    cmd[0]           =   ( AS3933_READ | AS3933_R6 );
+    _cs              =   1;
+    mySPI_status     =    _spi.write ( &cmd[0], 1, &cmd[0], 2 );
     _cs              =   0;
 
-    // Read R6 register
-    cmd              =   ( AS3933_READ | AS3933_R6 );
-    _cs              =   1;
-    mySPI_status     =    _spi.write ( &cmd, 1, (char*)&myWakeUpPattern->patt1b, 1 );
-    _cs              =   0;
-
-
+    myWakeUpPattern->patt1b  =   cmd[1];
 
 
     if ( mySPI_status == SPI_SUCCESS )
@@ -1173,7 +1177,7 @@
     // Read R7 register
     cmd[0]           =   ( AS3933_READ | AS3933_R7 );
     _cs              =   1;
-    mySPI_status     =   _spi.write ( &cmd[0], 1, &cmd[1], 1 );
+    mySPI_status     =   _spi.write ( &cmd[0], 1, &cmd[0], 2 );
     _cs              =   0;
 
     // Mask Automatic time-out
@@ -1244,7 +1248,7 @@
     // Read register
     cmd[0]           =   ( AS3933_READ | myAuxRegister );
     _cs              =   1;
-    mySPI_status     =   _spi.write ( &cmd[0], 1, &cmd[1], 1 );
+    mySPI_status     =   _spi.write ( &cmd[0], 1, &cmd[0], 2 );
     _cs              =   0;
 
     // Mask Parallel Tuning Capacitance
@@ -1338,7 +1342,7 @@
  */
 AS3933::AS3933_status_t  AS3933::AS3933_Send_DirectCommand ( AS3933_spi_direct_commands_t myDirectCommand )
 {
-    char    cmd         =    0;
+    char    cmd       =    0;
     int     mySPI_status;