L3GD20 Library using FIFO and Interrupt

Fork of L3GD20_SPI by Tatsuki Fukuda

Revision:
1:2ebc045424af
Parent:
0:175bf093daa8
Child:
2:be6daa938101
--- a/L3GD20.h	Mon May 12 05:59:12 2014 +0000
+++ b/L3GD20.h	Mon May 12 07:23:09 2014 +0000
@@ -2,10 +2,29 @@
 #define MBED_SPI
 #include "mbed.h"
 #include "L3GD20_Resister.h"
-/** @file
- *
- * This is test program.
- */
+/** L3GD20(SPI) class
+*
+* This is the L3GD20 class.
+* @code
+#include "mbed.h"
+#include "L3GD20.h"
+
+Serial pc(USBTX,USBRX);//tx,rx
+L3GD20 L3GD20(p11,p12,p13,p14,p15);//miso,mosi,sck,cs,interrupt
+
+void interruption(anglerrates *val)
+{
+    printf("X:%+05d\tY:%+05d\tZ:%+05d level:%02d\r\n",(val->X),(val->Y),(val->Z),(L3GD20.FIFO.level));
+}
+int main()
+{
+    L3GD20.start(L3GD20::XYZ,&interruption);
+    while(1) {
+        sleep();
+    }
+}
+* @endcode
+*/
 class L3GD20
 {
 public:
@@ -13,8 +32,18 @@
     typedef enum {
         null=0x00,WhoAmI=0x0F,CtrlReg1=0x20,CtrlReg2=0x21,CtrlReg3=0x22,CtrlReg4=0x23,CtrlReg5=0x24,Reference=0x25,OutTemp=0x26,StatusReg=0x27,OutXL=0x28,OutXH=0x29,OutYL=0x2A,OutYH=0x2B,OutZL=0x2C,OutZH=0x2D,FIFOCtrlReg=0x2E,FIFOSrcReg=0x2F,INT1Cfg=0x30,INT1Src=0x31,INT1ThsXH=0x32,INT1ThsXL=0x33,INT1ThsYH=0x34,INT1ThsYL=0x35,INT1ThsZH=0x36,INT1ThsZL=0x37,INT1Duration=0x38,READ=0x80
     } RESISTER;
+    /** @enum DIRECTION
+    *   enable direction\n
+    *   Example...L3GD20::XY,L3GD20::XYZ
+    */
     typedef enum {
-        Y=0x1,X=0x1<<1,Z=0x1<<2,XY=X|Y,XZ=X|Z,YZ=Y|Z,XYZ=X|Y|Z
+        Y=0x1,
+        X=0x1<<1,
+        Z=0x1<<2,
+        XY=X|Y,
+        XZ=X|Z,
+        YZ=Y|Z,
+        XYZ=X|Y|Z
     } DIRECTION;
     typedef enum {
         BYPASSmode=0x0,FIFOmode,STREAMmode,STREAMtoFIFOmode,BYPASStoSTREAMmode
@@ -54,25 +83,48 @@
         int INT1_SRC;
     } _status;
 //Class method
-    /** Power_OnOff
-    *
-    * @param enable L3GD20 channel
+    /** @fn void L3GD20::start(DIRECTION enable);
+    *   Start command send to module
+    *   @param enable
     */
     void start(DIRECTION enable);
+    /** @fn void L3GD20::start(DIRECTION enable,void (*func)(anglerrates*));
+    *   Start with interrupt
+    *   @param enable L3GD20 channel
+    *   @param func user function(call by InterrtptIn)
+    */
     void start(DIRECTION enable,void (*func)(anglerrates*));
-    /** stop sampling
+    /** @fn void L3GD20::stop()
+    *    stop sampling command send
     */
     void stop();
+    /** @fn void L3GD20::sleep()
+    *    sleep command send
+    */
     void sleep();
-    //only read data and calcurate dps
+    /** @fn void L3GD20::read(anglerrates* val,DIRECTION direction)
+    *   read angler rates with direction(L3GD20::XY)\n
+    *   This is read and calcurate dps, reading value is set to class instanse
+    */
     void read(anglerrates* val,DIRECTION direction);
-    //only read temperature (I don't know meanig of this data)
+    /** @fn int L3GD20::readTemperature()
+    *   read temperature without format
+    *   (I don't know meaning of value.)
+    */
     int readTemperature();
-    //L3GD20mode change need reset(bypass) when filled FIFObuffor
-    void enableFIFO(FIFO_mode mode,FIFOstatus interrupt,const int threshold);
-    //status Update
+    /** @fn void L3GD20::enableFIFO(FIFO_mode mode,FIFOstatus interrupt,const int threshold)
+    *   @bref   L3GD20mode need to reset(to bypass mode) when filled FIFObuffor
+    *   @param mode        FIFOmode(L3GD20::BYPASSmode,FIFOmode,STREAMmode,STREAMtoFIFOmode,BYPASStoSTREAMmode)
+    *   @param interrupt   cause of interrupt(L3GD20::none,empty,watermark,overrun)
+    *   @param threshold   interruption threshold(1 to 30 vaild)
+    */
+    void enableFIFO(FIFO_mode mode,FIFOstatus interrupt,const int threshold=30);
+    /** @fn int L3GD20::updateFIFO(void)
+    *   @bref   Update FIFO status
+    *   @return FIFO buffer level
+    */
     int updateFIFO(void);
-    anglerrates _value;
+    anglerrates value;///< @brief latest angler rates
 protected:
     //write command to resister
     void write(RESISTER reg,int val);