PixArt Optical Track Sensor, OTS, library initial release v1.0. Supports PAT9125, PAT9126, PAT9130, PAA5101. Future to support PAT9150.
Fork of Pixart_OTS by
Pixart_OTS_Task.cpp
00001 /* PixArt Optical Finger Navigation, OFN, sensor driver. 00002 * By PixArt Imaging Inc. 00003 * Primary Engineer: Hill Chen (PixArt USA) 00004 * 00005 * License: Apache-2.0; http://www.apache.org/licenses/LICENSE-2.0 00006 */ 00007 00008 #include "Pixart_OTS_Task.h" 00009 00010 Pixart_OTS_Task_5101::Pixart_OTS_Task_5101(DigitalOut &ldp_enl_pin) 00011 : LD2LED_TH(0x700) 00012 , LED2LD_TH(0x500) 00013 , FIQ_AVG(0) 00014 , FIQt(0) 00015 , EXTLED_ON(0) 00016 , m_ldp_enl(ldp_enl_pin) 00017 { 00018 m_ldp_enl = 0; 00019 } 00020 00021 void Pixart_OTS_Task_5101::reset_task(Pixart_ComPort &com_port) 00022 { 00023 com_port.writeRegister(0x7F, 0x00); 00024 com_port.writeRegister(0x08, 0x01); 00025 } 00026 00027 void Pixart_OTS_Task_5101::pre_task(Pixart_ComPort &com_port) 00028 { 00029 com_port.writeRegister(0x5D, 0x3E); 00030 wait_ms(10); // 10ms delay 00031 com_port.writeRegister(0x5D, 0x3F); 00032 PAA5101_LD_MODE(com_port); // LD mode is default 00033 com_port.writeRegister(0x09, 0x00); // enable write protect 00034 } 00035 00036 void Pixart_OTS_Task_5101::periodic_task(Pixart_ComPort &com_port) 00037 { 00038 uint8_t loopi = 0; 00039 FIQ_AVG = 0; 00040 00041 uint8_t data_msb = com_port.readRegister(0x75); 00042 uint8_t data_lsb = com_port.readRegister(0x76); 00043 FIQ[FIQt] = ((uint16_t)(data_msb))*256 + (uint16_t)data_lsb; 00044 00045 if(FIQt==7) //every 8 sampling to decide LD/LED mode 00046 { 00047 for(loopi=0;loopi<8;loopi++) 00048 { 00049 FIQ_AVG = FIQ_AVG + FIQ[loopi]; 00050 } 00051 00052 if(EXTLED_ON == 1 && FIQ_AVG < LED2LD_TH) // Check if change to LD MODE 00053 { 00054 PAA5101_LD_MODE(com_port); 00055 wait_ms(40); // delay for light source change 00056 com_port.writeRegister(0x03,0x00); 00057 } 00058 else if(EXTLED_ON == 0 && FIQ_AVG < LD2LED_TH) // Check if change to external LED MODE 00059 { 00060 PAA5101_EXTLED_MODE(com_port); 00061 wait_ms(40); // delay for light source change 00062 com_port.writeRegister(0x03,0x00); 00063 } 00064 } 00065 FIQt = (FIQt+1) & 0x07; 00066 // LD/LED switch process END 00067 } 00068 00069 void Pixart_OTS_Task_5101::PAA5101_LD_MODE(Pixart_ComPort &com_port) 00070 { 00071 EXTLED_ON = 0; // Mode index: LD 00072 00073 com_port.writeRegister(0x7F, 0x00); // Bank0 00074 com_port.writeRegister(0x09, 0x5A); // disable write protect 00075 com_port.writeRegister(0x53, 0x01); 00076 com_port.writeRegister(0x07, 0xCC); 00077 com_port.writeRegister(0x0D, 0x05); 00078 com_port.writeRegister(0x0E, 0x05); 00079 com_port.writeRegister(0x19, 0x24); 00080 com_port.writeRegister(0x7F, 0x01); // Bank1 00081 com_port.writeRegister(0x1D, 0x18); 00082 com_port.writeRegister(0x1F, 0x12); 00083 com_port.writeRegister(0x42, 0x40); 00084 com_port.writeRegister(0x37, 0x60); 00085 com_port.writeRegister(0x43, 0x0A); 00086 com_port.writeRegister(0x7F, 0x04); // Bank4 00087 com_port.writeRegister(0x06, 0x03); 00088 com_port.writeRegister(0x7F, 0x05); // Bank5 00089 com_port.writeRegister(0x2E, 0x02); 00090 com_port.writeRegister(0x48, 0x00); 00091 com_port.writeRegister(0x3E, 0x05); 00092 com_port.writeRegister(0x7F, 0x06); // Bank6 00093 com_port.writeRegister(0x34, 0x01); 00094 com_port.writeRegister(0x7F, 0x00); // Bank0 00095 com_port.writeRegister(0x09, 0x00); // enable write protect 00096 00097 m_ldp_enl = 0; // GPIO controls PMOS to low (i.e. turn on LD power) 00098 } 00099 00100 void Pixart_OTS_Task_5101::PAA5101_EXTLED_MODE(Pixart_ComPort &com_port) 00101 { 00102 EXTLED_ON = 1; // Mode index: LED 00103 m_ldp_enl = 1; // GPIO controls PMOS to high (i.e. turn off LD power) 00104 00105 com_port.writeRegister(0x7F, 0x00); // Bank0 00106 com_port.writeRegister(0x09, 0x5A); // disable write protect 00107 com_port.writeRegister(0x07, 0x55); 00108 com_port.writeRegister(0x0D, 0x7D); 00109 com_port.writeRegister(0x0E, 0x7D); 00110 com_port.writeRegister(0x19, 0x3C); 00111 com_port.writeRegister(0x7F, 0x01); // Bank1 00112 com_port.writeRegister(0x1D, 0x00); 00113 com_port.writeRegister(0x1F, 0x00); 00114 com_port.writeRegister(0x42, 0x20); 00115 com_port.writeRegister(0x37, 0x18); 00116 com_port.writeRegister(0x43, 0x02); 00117 com_port.writeRegister(0x7F, 0x04); // Bank4 00118 com_port.writeRegister(0x06, 0x00); 00119 com_port.writeRegister(0x7F, 0x05); // Bank5 00120 com_port.writeRegister(0x2E, 0x08); 00121 com_port.writeRegister(0x48, 0x02); 00122 com_port.writeRegister(0x3E, 0x85); 00123 com_port.writeRegister(0x7F, 0x06); // Bank6 00124 com_port.writeRegister(0x34, 0x09); 00125 com_port.writeRegister(0x7F, 0x00); // Bank0 00126 com_port.writeRegister(0x53, 0x00); 00127 com_port.writeRegister(0x09, 0x00); // enable write protect 00128 }
Generated on Thu Jul 14 2022 20:52:37 by 1.7.2