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
Diff: main.cpp
- 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 } }