PixArt Optical Finger Navigation, OFN, demo program for A350 sensor with library. Alternative porting style in C++. Initial release v1.0.

Dependencies:   Pixart_OFN_A

Fork of OFN_A350_Demo by Hill Chen

Revision:
2:4c248212e354
Parent:
1:67d6484416a6
--- a/main.cpp	Tue Oct 30 21:14:15 2018 +0000
+++ b/main.cpp	Wed Feb 27 21:16:38 2019 +0000
@@ -1,71 +1,41 @@
-// ADBM-A350: Finger navigation chip.
-// Version: 1.1
-// Latest Revision Date: 18 July 2018
-// By PixArt Imaging Inc.
-// Primary Engineer: Vincent Yeh (PixArt USA)
+/* mbed Microcontroller Library
+ * Copyright (c) 2018 ARM Limited
+ * SPDX-License-Identifier: Apache-2.0
+ */
 
-// Copyright [2018] [Vincent Yeh]
-// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at:
-// http://www.apache.org/licenses/LICENSE-2.0
+/* ADBM-A350: Finger navigation chip.
+ * By PixArt Imaging Inc.
+ * Primary Engineer: Hill Chen (PixArt USA)
+ *
+ * License: Apache-2.0; http://www.apache.org/licenses/LICENSE-2.0
+ */
+ 
+/* Revision History
+ * V1.0: February 27, 2019
+ * First release.
+ */
 
 
-/*
-//=======================
-//Revision History
-//=======================
-Version 1.1 -- 18 July 2018
-Added apache license notice.
+#include "mbed.h"
+#include "Pixart_OFN.h"
 
-Version 1.0 -- 14 June 2018
-First release.
-*/
+Serial  pc(USBTX, USBRX);
+I2C i2c(I2C_SDA0, I2C_SCL0);
 
-#include "mbed.h"
-#include "registerArrays.h"
-//#include "I2CcommFunctions.h"
-#include "SPIcommFunctions.h"
-//Make sure you only have one of either SPIcommFunctions or I2CcommFunctions enabled. You cannot include both headers.
-
+// main() runs in its own thread in the OS
 int main()
 {
-    pc.baud(115200);                    // Set baud rate to 115200. Remember to sync serial terminal baud rate to the same value.
+    bool Result = false;
+    Pixart_OFN *m_Sensor = new Pixart_OFN(&i2c, &pc, 0.25f, Result);
+    if(Result)  pc.printf("\r\n\n %s %s initialization successfully\r\n", PRODUCT, MODEL);
+    else{       pc.printf("\r\n\n %s %s fail on initialization", PRODUCT, MODEL);
+        while (true)    ;
+    }
 
-    #ifdef SPImode
-    IO_sel = 1;                         // Set IO_select pin to be HIGH for SPI.
-    spi.format(8,3);                    // Set SPI to 8 bits with inverted polarity and phase-shifted to second edge.
-    spi.frequency(100000);             // Set frequency for SPI communication.
-    cs = 1;                             // Initialize chip select as inactive.
-    #endif
-    
-    #ifdef I2Cmode
-    IO_sel = 0;                         // Set IO_select pin to be LOW for I2C.
-    i2c.frequency(400000);              // Set frequency for I2C communication.
-    cs = 1;                             // These two pins are used to determine the device's slave ID.
-    MOSI = 1;
-    #endif
-    
-    shutdown = 0;
-    writeRegister(0x3A, 0x5A);          //Soft-reset the chip.
-    
-    pc.printf("Program START\n\r");
-    
-    pc.printf("ID Check: %2X\n\r", readRegister(0x00)); //Checks product ID to make sure communication protocol is working properly.
-    if(readRegister(0x00) != 0x88)
-    {
-        pc.printf("Communication protocol error! Terminating program.\n\r");
-        return 0;
-    }
-    
-    load(initialize, initialize_size);  //Load register settings from the "initialize" array (see registerArrays.h)
-    
-    while(1)
-    {
-        //pc.printf("MOTION bit: %2X\n\r", readRegister(0x02));   //Prints EVENT register for debugging.
-        
-        if(readRegister(0x02) & 0x80)
-        {
-            grabData();
-            printData();
-        }
+    while (true){
+#ifndef USE_CALLBACK           
+        m_Sensor->periodicCallback();
+        wait_ms(250);
+#endif        
     }
 }