| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 | 
							- #include "uni_avr_rpi.h"
 
- #ifdef PAT9125
 
- #include "pat9125.h"
 
- #ifdef PAT9125_SWSPI
 
- #include "swspi.h"
 
- #endif //PAT9125_SWSPI
 
- #ifdef PAT9125_SWI2C
 
- #include "swi2c.h"
 
- #endif //PAT9125_SWI2C
 
- #ifdef PAT9125_HWI2C
 
- #include <Wire.h>
 
- #endif //PAT9125_HWI2C
 
- unsigned char pat9125_PID1 = 0;
 
- unsigned char pat9125_PID2 = 0;
 
- unsigned char pat9125_xres = 0;
 
- unsigned char pat9125_yres = 0;
 
- int pat9125_x = 0;
 
- int pat9125_y = 0;
 
- unsigned char pat9125_b = 0;
 
- unsigned char pat9125_s = 0;
 
- int pat9125_init(unsigned char xres, unsigned char yres)
 
- {
 
- #ifdef PAT9125_SWSPI
 
- 	swspi_init();
 
- #endif //PAT9125_SWSPI
 
- #ifdef PAT9125_SWI2C
 
- 	swi2c_init(PAT9125_SWI2C_SDA, PAT9125_SWI2C_SCL, PAT9125_SWI2C_CFG);
 
- #endif //PAT9125_SWI2C
 
- #ifdef PAT9125_HWI2C
 
- 	Wire.begin();
 
- #endif //PAT9125_HWI2C
 
- 	pat9125_xres = xres;
 
- 	pat9125_yres = yres;
 
- 	pat9125_PID1 = pat9125_rd_reg(PAT9125_PID1);
 
- 	pat9125_PID2 = pat9125_rd_reg(PAT9125_PID2);
 
- //	pat9125_PID1 = 0x31;
 
- //	pat9125_PID2 = 0x91;
 
- 	if ((pat9125_PID1 != 0x31) || (pat9125_PID2 != 0x91))
 
- 	{
 
- 		return 0;
 
- 	}
 
-     pat9125_wr_reg(PAT9125_RES_X, pat9125_xres);
 
-     pat9125_wr_reg(PAT9125_RES_Y, pat9125_yres);
 
- //	pat9125_wr_reg(PAT9125_ORIENTATION, 0x04 | (xinv?0x08:0) | (yinv?0x10:0)); //!? direction switching does not work
 
- 	return 1;
 
- }
 
- int pat9125_update()
 
- {
 
- 	if ((pat9125_PID1 == 0x31) && (pat9125_PID2 == 0x91))
 
- 	{
 
- 		unsigned char ucMotion = pat9125_rd_reg(PAT9125_MOTION);
 
- 		pat9125_b = pat9125_rd_reg(PAT9125_FRAME);
 
- 		pat9125_s = pat9125_rd_reg(PAT9125_SHUTTER);
 
- 		if (ucMotion & 0x80)
 
- 		{
 
- 			unsigned char ucXL = pat9125_rd_reg(PAT9125_DELTA_XL);
 
- 			unsigned char ucYL = pat9125_rd_reg(PAT9125_DELTA_YL);
 
- 			unsigned char ucXYH = pat9125_rd_reg(PAT9125_DELTA_XYH);
 
- 			int iDX = ucXL | ((ucXYH << 4) & 0xf00);
 
- 			int iDY = ucYL | ((ucXYH << 8) & 0xf00);
 
- 			if (iDX & 0x800) iDX -= 4096;
 
- 			if (iDY & 0x800) iDY -= 4096;
 
- 			pat9125_x += iDX;
 
- 			pat9125_y -= iDY; //negative number, because direction switching does not work
 
- 			return 1;
 
- 		}
 
- 	}
 
- 	return 0;
 
- }
 
- int pat9125_update_y()
 
- {
 
- 	if ((pat9125_PID1 == 0x31) && (pat9125_PID2 == 0x91))
 
- 	{
 
- 		unsigned char ucMotion = pat9125_rd_reg(PAT9125_MOTION);
 
- 		if (ucMotion & 0x80)
 
- 		{
 
- 			unsigned char ucYL = pat9125_rd_reg(PAT9125_DELTA_YL);
 
- 			unsigned char ucXYH = pat9125_rd_reg(PAT9125_DELTA_XYH);
 
- 			int iDY = ucYL | ((ucXYH << 8) & 0xf00);
 
- 			if (iDY & 0x800) iDY -= 4096;
 
- 			pat9125_y -= iDY; //negative number, because direction switching does not work
 
- 			return 1;
 
- 		}
 
- 	}
 
- 	return 0;
 
- }
 
- unsigned char pat9125_rd_reg(unsigned char addr)
 
- {
 
- 	unsigned char data = 0;
 
- #ifdef PAT9125_SWSPI
 
- 	swspi_start();
 
- 	swspi_tx(addr & 0x7f);
 
- 	data = swspi_rx();
 
- 	swspi_stop();
 
- #endif //PAT9125_SWSPI
 
- #ifdef PAT9125_SWI2C
 
- 	int iret = swi2c_readByte_A8(PAT9125_I2C_ADDR, addr, &data);
 
- #endif //PAT9125_SWI2C
 
- #ifdef PAT9125_HWI2C
 
- 	Wire.beginTransmission(PAT9125_I2C_ADDR);
 
- 	Wire.write(addr);
 
- 	Wire.endTransmission();
 
- 	if (Wire.requestFrom(PAT9125_I2C_ADDR, 1) == 1)
 
- //	if (Wire.available())
 
- 		data = Wire.read();
 
- #endif //PAT9125_HWI2C
 
- 	return data;
 
- }
 
- void pat9125_wr_reg(unsigned char addr, unsigned char data)
 
- {
 
- #ifdef PAT9125_SWSPI
 
- 	swspi_start();
 
- 	swspi_tx(addr | 0x80);
 
- 	swspi_tx(data);
 
- 	swspi_stop();
 
- #endif //PAT9125_SWSPI
 
- #ifdef PAT9125_SWI2C
 
- 	int iret = swi2c_writeByte_A8(PAT9125_I2C_ADDR, addr, &data);
 
- #endif //PAT9125_SWI2C
 
- #ifdef PAT9125_HWI2C
 
- 	Wire.beginTransmission(PAT9125_I2C_ADDR);
 
- 	Wire.write(addr);
 
- 	Wire.write(data);
 
- 	Wire.endTransmission();
 
- #endif //PAT9125_HWI2C
 
- }
 
- #endif //PAT9125
 
 
  |