Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 0:ea8f1bb16afc, committed 2017-12-18
- Comitter:
- matsujirushi
- Date:
- Mon Dec 18 13:48:31 2017 +0900
- Child:
- 1:b3125f4faa38
- Commit message:
- 1st commit
Changed in this revision
| PAJ7620U2.cpp | Show annotated file Show diff for this revision Revisions of this file |
| PAJ7620U2.h | Show annotated file Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/PAJ7620U2.cpp Mon Dec 18 13:48:31 2017 +0900
@@ -0,0 +1,315 @@
+#include "mbed.h"
+#include "PAJ7620U2.h"
+
+bool PAJ7620U2::RegisterWrite(uint8_t address, uint8_t value)
+{
+ uint8_t sendData[2];
+ sendData[0] = address;
+ sendData[1] = value;
+ if (_I2c->write(_SlaveAddress, (const char*)sendData, sizeof(sendData), false) != 0) return false;
+
+ return true;
+}
+
+bool PAJ7620U2::RegisterWrite(uint8_t address, const uint8_t* data, int dataSize)
+{
+ uint8_t* sendData = (uint8_t*)alloca(1 + dataSize);
+ sendData[0] = address;
+ memcpy(&sendData[1], data, dataSize);
+ if (_I2c->write(_SlaveAddress, (const char*)sendData, 1 + dataSize, false) != 0) return false;
+
+ return true;
+}
+
+bool PAJ7620U2::RegisterRead(uint8_t address, uint8_t* value)
+{
+ uint8_t sendData[1];
+ sendData[0] = address;
+ if (_I2c->write(_SlaveAddress, (const char*)sendData, sizeof(sendData), true) != 0) return false;
+
+ uint8_t recvData[1];
+ if (_I2c->read(_SlaveAddress, (char*)recvData, sizeof(recvData)) != 0) return false;
+ *value = recvData[0];
+
+ return true;
+}
+
+bool PAJ7620U2::RegisterRead(uint8_t address, uint8_t* data, int dataSize)
+{
+ uint8_t sendData[1];
+ sendData[0] = address;
+ if (_I2c->write(_SlaveAddress, (const char*)sendData, sizeof(sendData), true) != 0) return false;
+
+ if (_I2c->read(_SlaveAddress, (char*)data, dataSize) != 0) return false;
+
+ return true;
+}
+
+const PAJ7620U2::RegisterAddressValue PAJ7620U2::_InitRegisterArray[] = {
+ { 0xEF, 0x00, },
+ { 0x32, 0x29, },
+ { 0x33, 0x01, },
+ { 0x34, 0x00, },
+ { 0x35, 0x01, },
+ { 0x36, 0x00, },
+ { 0x37, 0x07, },
+ { 0x38, 0x17, },
+ { 0x39, 0x06, },
+ { 0x3A, 0x12, },
+ { 0x3F, 0x00, },
+ { 0x40, 0x02, },
+ { 0x41, 0xFF, },
+ { 0x42, 0x01, },
+ { 0x46, 0x2D, },
+ { 0x47, 0x0F, },
+ { 0x48, 0x3C, },
+ { 0x49, 0x00, },
+ { 0x4A, 0x1E, },
+ { 0x4B, 0x00, },
+ { 0x4C, 0x20, },
+ { 0x4D, 0x00, },
+ { 0x4E, 0x1A, },
+ { 0x4F, 0x14, },
+ { 0x50, 0x00, },
+ { 0x51, 0x10, },
+ { 0x52, 0x00, },
+ { 0x5C, 0x02, },
+ { 0x5D, 0x00, },
+ { 0x5E, 0x10, },
+ { 0x5F, 0x3F, },
+ { 0x60, 0x27, },
+ { 0x61, 0x28, },
+ { 0x62, 0x00, },
+ { 0x63, 0x03, },
+ { 0x64, 0xF7, },
+ { 0x65, 0x03, },
+ { 0x66, 0xD9, },
+ { 0x67, 0x03, },
+ { 0x68, 0x01, },
+ { 0x69, 0xC8, },
+ { 0x6A, 0x40, },
+ { 0x6D, 0x04, },
+ { 0x6E, 0x00, },
+ { 0x6F, 0x00, },
+ { 0x70, 0x80, },
+ { 0x71, 0x00, },
+ { 0x72, 0x00, },
+ { 0x73, 0x00, },
+ { 0x74, 0xF0, },
+ { 0x75, 0x00, },
+ { 0x80, 0x42, },
+ { 0x81, 0x44, },
+ { 0x82, 0x04, },
+ { 0x83, 0x20, },
+ { 0x84, 0x20, },
+ { 0x85, 0x00, },
+ { 0x86, 0x10, },
+ { 0x87, 0x00, },
+ { 0x88, 0x05, },
+ { 0x89, 0x18, },
+ { 0x8A, 0x10, },
+ { 0x8B, 0x01, },
+ { 0x8C, 0x37, },
+ { 0x8D, 0x00, },
+ { 0x8E, 0xF0, },
+ { 0x8F, 0x81, },
+ { 0x90, 0x06, },
+ { 0x91, 0x06, },
+ { 0x92, 0x1E, },
+ { 0x93, 0x0D, },
+ { 0x94, 0x0A, },
+ { 0x95, 0x0A, },
+ { 0x96, 0x0C, },
+ { 0x97, 0x05, },
+ { 0x98, 0x0A, },
+ { 0x99, 0x41, },
+ { 0x9A, 0x14, },
+ { 0x9B, 0x0A, },
+ { 0x9C, 0x3F, },
+ { 0x9D, 0x33, },
+ { 0x9E, 0xAE, },
+ { 0x9F, 0xF9, },
+ { 0xA0, 0x48, },
+ { 0xA1, 0x13, },
+ { 0xA2, 0x10, },
+ { 0xA3, 0x08, },
+ { 0xA4, 0x30, },
+ { 0xA5, 0x19, },
+ { 0xA6, 0x10, },
+ { 0xA7, 0x08, },
+ { 0xA8, 0x24, },
+ { 0xA9, 0x04, },
+ { 0xAA, 0x1E, },
+ { 0xAB, 0x1E, },
+ { 0xCC, 0x19, },
+ { 0xCD, 0x0B, },
+ { 0xCE, 0x13, },
+ { 0xCF, 0x64, },
+ { 0xD0, 0x21, },
+ { 0xD1, 0x0F, },
+ { 0xD2, 0x88, },
+ { 0xE0, 0x01, },
+ { 0xE1, 0x04, },
+ { 0xE2, 0x41, },
+ { 0xE3, 0xD6, },
+ { 0xE4, 0x00, },
+ { 0xE5, 0x0C, },
+ { 0xE6, 0x0A, },
+ { 0xE7, 0x00, },
+ { 0xE8, 0x00, },
+ { 0xE9, 0x00, },
+ { 0xEE, 0x07, },
+ { 0xEF, 0x01, },
+ { 0x00, 0x1E, },
+ { 0x01, 0x1E, },
+ { 0x02, 0x0F, },
+ { 0x03, 0x10, },
+ { 0x04, 0x02, },
+ { 0x05, 0x00, },
+ { 0x06, 0xB0, },
+ { 0x07, 0x04, },
+ { 0x08, 0x0D, },
+ { 0x09, 0x0E, },
+ { 0x0A, 0x9C, },
+ { 0x0B, 0x04, },
+ { 0x0C, 0x05, },
+ { 0x0D, 0x0F, },
+ { 0x0E, 0x02, },
+ { 0x0F, 0x12, },
+ { 0x10, 0x02, },
+ { 0x11, 0x02, },
+ { 0x12, 0x00, },
+ { 0x13, 0x01, },
+ { 0x14, 0x05, },
+ { 0x15, 0x07, },
+ { 0x16, 0x05, },
+ { 0x17, 0x07, },
+ { 0x18, 0x01, },
+ { 0x19, 0x04, },
+ { 0x1A, 0x05, },
+ { 0x1B, 0x0C, },
+ { 0x1C, 0x2A, },
+ { 0x1D, 0x01, },
+ { 0x1E, 0x00, },
+ { 0x21, 0x00, },
+ { 0x22, 0x00, },
+ { 0x23, 0x00, },
+ { 0x25, 0x01, },
+ { 0x26, 0x00, },
+ { 0x27, 0x39, },
+ { 0x28, 0x7F, },
+ { 0x29, 0x08, },
+ { 0x30, 0x03, },
+ { 0x31, 0x00, },
+ { 0x32, 0x1A, },
+ { 0x33, 0x1A, },
+ { 0x34, 0x07, },
+ { 0x35, 0x07, },
+ { 0x36, 0x01, },
+ { 0x37, 0xFF, },
+ { 0x38, 0x36, },
+ { 0x39, 0x07, },
+ { 0x3A, 0x00, },
+ { 0x3E, 0xFF, },
+ { 0x3F, 0x00, },
+ { 0x40, 0x77, },
+ { 0x41, 0x40, },
+ { 0x42, 0x00, },
+ { 0x43, 0x30, },
+ { 0x44, 0xA0, },
+ { 0x45, 0x5C, },
+ { 0x46, 0x00, },
+ { 0x47, 0x00, },
+ { 0x48, 0x58, },
+ { 0x4A, 0x1E, },
+ { 0x4B, 0x1E, },
+ { 0x4C, 0x00, },
+ { 0x4D, 0x00, },
+ { 0x4E, 0xA0, },
+ { 0x4F, 0x80, },
+ { 0x50, 0x00, },
+ { 0x51, 0x00, },
+ { 0x52, 0x00, },
+ { 0x53, 0x00, },
+ { 0x54, 0x00, },
+ { 0x57, 0x80, },
+ { 0x59, 0x10, },
+ { 0x5A, 0x08, },
+ { 0x5B, 0x94, },
+ { 0x5C, 0xE8, },
+ { 0x5D, 0x08, },
+ { 0x5E, 0x3D, },
+ { 0x5F, 0x99, },
+ { 0x60, 0x45, },
+ { 0x61, 0x40, },
+ { 0x63, 0x2D, },
+ { 0x64, 0x02, },
+ { 0x65, 0x96, },
+ { 0x66, 0x00, },
+ { 0x67, 0x97, },
+ { 0x68, 0x01, },
+ { 0x69, 0xCD, },
+ { 0x6A, 0x01, },
+ { 0x6B, 0xB0, },
+ { 0x6C, 0x04, },
+ { 0x6D, 0x2C, },
+ { 0x6E, 0x01, },
+ { 0x6F, 0x32, },
+ { 0x71, 0x00, },
+ { 0x72, 0x01, },
+ { 0x73, 0x35, },
+ { 0x74, 0x00, },
+ { 0x75, 0x33, },
+ { 0x76, 0x31, },
+ { 0x77, 0x01, },
+ { 0x7C, 0x84, },
+ { 0x7D, 0x03, },
+ { 0x7E, 0x01, },
+};
+
+PAJ7620U2::PAJ7620U2(I2C* i2c, uint8_t slaveAddress)
+{
+ _I2c = i2c;
+ _SlaveAddress = slaveAddress;
+ _Initialized = false;
+}
+
+bool PAJ7620U2::Init()
+{
+ // Wake up.
+ Thread::wait(1);
+ RegisterWrite(0xEF, 0); // R_RegBankSel
+ Thread::wait(1);
+
+ if (!RegisterWrite(0xEF, 0)) return false; // R_RegBankSel
+
+ uint16_t partId;
+ if (!RegisterRead(0x00, (uint8_t*)&partId, sizeof(partId))) return false; // PartID
+
+ if (partId == 0x7620) {
+ for (int i = 0; i < (int)(sizeof(_InitRegisterArray) / sizeof(_InitRegisterArray[0])); i++) {
+ if (!RegisterWrite(_InitRegisterArray[i].Address, _InitRegisterArray[i].Value)) return false;
+ }
+ }
+
+ if (!RegisterWrite(0xEF, 0)) return false; // R_RegBankSel
+
+ _Initialized = true;
+
+ return true;
+}
+
+bool PAJ7620U2::GetGesture(PAJ7620U2::GestureFlag* flag)
+{
+ if (!_Initialized) return false;
+
+ uint16_t data;
+ if (!RegisterRead(0x43, (uint8_t*)&data, sizeof(data))) { // IntFlag_1, IntFlag_2
+ *flag = GESTURE_NONE;
+ return false;
+ }
+
+ *flag = (GestureFlag)data;
+
+ return true;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/PAJ7620U2.h Mon Dec 18 13:48:31 2017 +0900
@@ -0,0 +1,42 @@
+#pragma once
+
+class PAJ7620U2 {
+
+private:
+ I2C* _I2c;
+ uint8_t _SlaveAddress;
+ bool _Initialized;
+
+ struct RegisterAddressValue {
+ uint8_t Address;
+ uint8_t Value;
+ };
+ static const RegisterAddressValue _InitRegisterArray[];
+
+private:
+ bool RegisterWrite(uint8_t address, uint8_t value);
+ bool RegisterWrite(uint8_t address, const uint8_t* data, int dataSize);
+ bool RegisterRead(uint8_t address, uint8_t* value);
+ bool RegisterRead(uint8_t address, uint8_t* data, int dataSize);
+
+public:
+// enum GestureFlag : uint16_t { // [Warning] scoped enums only available with -std=c++11 or -std=gnu++11
+ enum GestureFlag {
+ GESTURE_NONE = 0x0000,
+ GESTURE_RIGHT = 0x0001,
+ GESTURE_LEFT = 0x0002,
+ GESTURE_UP = 0x0004,
+ GESTURE_DOWN = 0x0008,
+ GESTURE_FORWARD = 0x0010,
+ GESTURE_BACKWARD = 0x0020,
+ GESTURE_CLOCKWISE = 0x0040,
+ GESTURE_COUNTER_CLOCKWISE = 0x0080,
+ GESTURE_WAVE = 0x0100,
+ };
+
+public:
+ PAJ7620U2(I2C* i2c, uint8_t address);
+ bool Init();
+ bool GetGesture(GestureFlag* flag);
+
+};
\ No newline at end of file
