for my students set_m_axes_offset

Dependencies:   X_NUCLEO_COMMON ST_INTERFACES

Dependents:   Exam_TK Exam_TK

Files at this revision

API Documentation at this revision

Comitter:
docent
Date:
Sat Feb 08 09:11:31 2020 +0000
Parent:
6:308889c4d074
Commit message:
for my students set_m_axes_offset

Changed in this revision

ST_INTERFACES.lib Show annotated file Show diff for this revision Revisions of this file
lis3mdl.h Show annotated file Show diff for this revision Revisions of this file
lis3mdl_class.cpp Show annotated file Show diff for this revision Revisions of this file
lis3mdl_class.h Show annotated file Show diff for this revision Revisions of this file
--- a/ST_INTERFACES.lib	Wed Oct 18 11:14:26 2017 +0200
+++ b/ST_INTERFACES.lib	Sat Feb 08 09:11:31 2020 +0000
@@ -1,1 +1,1 @@
-https://developer.mbed.org/teams/ST/code/ST_INTERFACES/#8f70f7159316
+https://developer.mbed.org/teams/ST/code/ST_INTERFACES/#d3c9b33b992c
--- a/lis3mdl.h	Wed Oct 18 11:14:26 2017 +0200
+++ b/lis3mdl.h	Sat Feb 08 09:11:31 2020 +0000
@@ -414,6 +414,7 @@
     uint16_t NumByteToRead);
 extern void LIS3MDL_IO_ITConfig( void );
 
+
 /**
  * @}
  */
--- a/lis3mdl_class.cpp	Wed Oct 18 11:14:26 2017 +0200
+++ b/lis3mdl_class.cpp	Sat Feb 08 09:11:31 2020 +0000
@@ -44,7 +44,7 @@
            X-CUBE-MEMS1/trunk/Drivers/BSP/Components/lis3mdl/lis3mdl.c: revision #400,
            X-CUBE-MEMS1/trunk: revision #416
 */
-
+/* my
 LIS3MDL::LIS3MDL(SPI *spi, PinName cs_pin, PinName int_pin, SPI_type_t spi_type) : 
                 _dev_spi(spi), _cs_pin(cs_pin), _int_pin(int_pin), _spi_type(spi_type)
 {
@@ -63,15 +63,15 @@
     if (_spi_type == SPI3W) LIS3MDL_Set_SpiInterface ((void *)this, LIS3MDL_SPI_3_WIRE);
     else if (_spi_type == SPI4W) LIS3MDL_Set_SpiInterface ((void *)this, LIS3MDL_SPI_4_WIRE);
 }  
-
+*/
 LIS3MDL::LIS3MDL(DevI2C *i2c, uint8_t address, PinName int_pin) :
        _dev_i2c(i2c), _address(address), _cs_pin(NC), _int_pin(int_pin)  
 {
     assert (i2c);
-    _dev_spi = NULL;
+    //_dev_spi = NULL;
 }  
 
-
+/* my
 MAGNETO_StatusTypeDef LIS3MDL::LIS3MDL_Set_SpiInterface (void *handle, LIS3MDL_SPIMode_t spimode)
 {
     uint8_t tmp=0x03;  //deft LIS3MDL_CTRL_REG3 value  
@@ -80,7 +80,7 @@
     if (LIS3MDL_IO_Write(&tmp, LIS3MDL_M_CTRL_REG3_M, 1) != MAGNETO_OK) return MAGNETO_ERROR;      
     return MAGNETO_OK;
 }
-
+*/
 /**
  * @brief  Set LIS3MDL Initialization
  * @param  LIS3MDL_Init the configuration setting for the LIS3MDL
@@ -203,7 +203,7 @@
     return MAGNETO_ERROR;
   }
   
-  pData[1] = ((((int16_t)tempReg[1]) << 8) + (int16_t)tempReg[0]);
+  pData[1] = *((int16_t*)&tempReg[0]);//((((int16_t)tempReg[1]) << 8) + (int16_t)tempReg[0]);
   
   if(LIS3MDL_IO_Read(&tempReg[0], (LIS3MDL_M_OUT_Z_L_M | LIS3MDL_I2C_MULTIPLEBYTE_CMD),
                      2) != MAGNETO_OK)
@@ -217,6 +217,50 @@
 }
 
 
+
+//my----------------------------------------------------------------------------
+MAGNETO_StatusTypeDef LIS3MDL::LIS3MDL_M_SetAxeOffset(uint8_t axe,int16_t offset)
+{
+  int16_t tmp;
+  uint8_t tmp1;
+  uint8_t tempReg = 0x00;
+  float sensitivity = 0;
+  float foffset;
+  
+  if(LIS3MDL_IO_Read(&tempReg, LIS3MDL_M_CTRL_REG2_M, 1) != MAGNETO_OK)
+  {
+    return MAGNETO_ERROR;
+  }
+  tempReg &= LIS3MDL_M_FS_MASK;
+  switch(tempReg)
+  {
+    case LIS3MDL_M_FS_4:
+      sensitivity = 0.14;
+      break;
+    case LIS3MDL_M_FS_8:
+      sensitivity = 0.29;
+      break;
+    case LIS3MDL_M_FS_12:
+      sensitivity = 0.43;
+      break;
+    case LIS3MDL_M_FS_16:
+      sensitivity = 0.58;
+      break;
+  }
+     
+  foffset=(float)offset;   
+  foffset=foffset/sensitivity;
+  tmp=floor(foffset);
+  tmp1=tmp; 
+  if(LIS3MDL_IO_Write(&tmp1, 5+2*axe, 1)!= MAGNETO_OK)
+    return MAGNETO_ERROR;
+  tmp1=tmp>>8;    
+  if(LIS3MDL_IO_Write(&tmp1, 6+2*axe, 1)!= MAGNETO_OK)
+    return MAGNETO_ERROR;      
+  return MAGNETO_OK;
+}
+
+
 /**
  * @brief Read data from LIS3MDL Magnetic sensor and calculate Magnetic in mgauss
  * @param pData the pointer where the magnetometer data are stored
--- a/lis3mdl_class.h	Wed Oct 18 11:14:26 2017 +0200
+++ b/lis3mdl_class.h	Sat Feb 08 09:11:31 2020 +0000
@@ -51,9 +51,9 @@
  */
 class LIS3MDL : public MagneticSensor {
  public:
-    enum SPI_type_t {SPI3W, SPI4W};    
+    //my enum SPI_type_t {SPI3W, SPI4W};    
     
-    LIS3MDL(SPI *spi, PinName cs_pin, PinName int_pin=NC, SPI_type_t spi_type=SPI4W);
+    //my LIS3MDL(SPI *spi, PinName cs_pin, PinName int_pin=NC, SPI_type_t spi_type=SPI4W);
         
 	/** Constructor
 	 * @param[in] i2c device I2C to be used for communication
@@ -81,15 +81,18 @@
 	virtual int get_m_axes_raw(int16_t *pData) {
 		return LIS3MDL_M_GetAxesRaw(pData);
 	}
-
+	
+    virtual int set_m_axes_offset(uint8_t axe,int16_t offset) { //my
+      return LIS3MDL_M_SetAxeOffset(axe,offset);
+    }
  protected:
 	/*** Methods ***/
 	MAGNETO_StatusTypeDef LIS3MDL_Init(MAGNETO_InitTypeDef *LIS3MDL_Init);
 	MAGNETO_StatusTypeDef LIS3MDL_Read_M_ID(uint8_t *m_id);
 	MAGNETO_StatusTypeDef LIS3MDL_M_GetAxes(int32_t *pData);
 	MAGNETO_StatusTypeDef LIS3MDL_M_GetAxesRaw(int16_t *pData);
-	MAGNETO_StatusTypeDef LIS3MDL_Set_SpiInterface (void *handle, LIS3MDL_SPIMode_t spimode);
-
+	//my MAGNETO_StatusTypeDef LIS3MDL_Set_SpiInterface (void *handle, LIS3MDL_SPIMode_t spimode);
+	MAGNETO_StatusTypeDef LIS3MDL_M_SetAxeOffset(uint8_t axe,int16_t offset);//my
 	/**
 	 * @brief  Configures LIS3MDL interrupt lines for NUCLEO boards
 	 */
@@ -118,8 +121,9 @@
 	MAGNETO_StatusTypeDef LIS3MDL_IO_Read(uint8_t* pBuffer, 
 					      uint8_t RegisterAddr, uint16_t NumByteToRead)
 	{
+/*my		
         if (_dev_spi) {
-        /* Write Reg Address */
+        // Write Reg Address 
             _dev_spi->lock();
             _cs_pin = 0;           
             if (_spi_type == SPI4W) {            
@@ -128,14 +132,15 @@
                     *(pBuffer+i) = _dev_spi->write(0x00);
                 }
             } else if (_spi_type == SPI3W){
-                /* Write RD Reg Address with RD bit*/
+                // Write RD Reg Address with RD bit
                 uint8_t TxByte = RegisterAddr | 0x80;    
                 _dev_spi->write((char *)&TxByte, 1, (char *)pBuffer, (int) NumByteToRead);
             }            
             _cs_pin = 1;
             _dev_spi->unlock(); 
             return MAGNETO_OK;
-        }            		
+        }  
+*/                  		
         if (!_dev_i2c) return MAGNETO_ERROR;			
 		int ret = _dev_i2c->i2c_read(pBuffer,
 					   _address,
@@ -158,7 +163,7 @@
 	MAGNETO_StatusTypeDef LIS3MDL_IO_Write(uint8_t* pBuffer, 
 					       uint8_t RegisterAddr, uint16_t NumByteToWrite)
 	{
-		
+/*		
         if (_dev_spi) { 
             _dev_spi->lock();
             _cs_pin = 0;
@@ -168,7 +173,7 @@
             _dev_spi->unlock();
             return MAGNETO_OK;                    
         }        
-		
+*/		
         if (!_dev_i2c) return MAGNETO_ERROR;	
 		int ret = _dev_i2c->i2c_write(pBuffer, _address, RegisterAddr, NumByteToWrite);
 		if(ret != 0) {
@@ -180,11 +185,11 @@
 	/*** Instance Variables ***/
 	/* IO Device */
 	DevI2C *_dev_i2c;
-	SPI    *_dev_spi;
+	//my SPI    *_dev_spi;
     uint8_t _address;	
     DigitalOut  _cs_pin; 
     InterruptIn _int_pin;    
-    SPI_type_t _spi_type;        
+    //my SPI_type_t _spi_type;        
 };
 
 #endif // __LIS3MDL_CLASS_H