Initial commit
diff --git a/rmi4update/rmi4update.h b/rmi4update/rmi4update.h
new file mode 100644
index 0000000..e59f2f6
--- /dev/null
+++ b/rmi4update/rmi4update.h
@@ -0,0 +1,58 @@
+//===========================================================================
+// Copyright (c) 2012 - 2014 Synaptics Incorporated. All rights reserved.
+//===========================================================================
+
+#ifndef _RMI4UPDATE_H_
+#define _RMI4UPDATE_H_
+
+#include "rmidevice.h"
+#include "firmware_image.h"
+
+#define RMI_BOOTLOADER_ID_SIZE 2
+
+class RMI4Update
+{
+public:
+ RMI4Update(RMIDevice & device, FirmwareImage & firmwareImage) : m_device(device),
+ m_firmwareImage(firmwareImage)
+ {}
+ int UpdateFirmware(bool force = false);
+
+private:
+ int FindUpdateFunctions();
+ int ReadF34Queries();
+ int ReadF34Controls();
+ int WriteBootloaderID();
+ int EnterFlashProgramming();
+ int WriteBlocks(unsigned char *block, unsigned short count, unsigned char cmd);
+ int WaitForIdle(int timeout_ms);
+ int GetFirmwareSize() { return m_blockSize * m_fwBlockCount; }
+ int GetConfigSize() { return m_blockSize * m_configBlockCount; }
+
+private:
+ RMIDevice & m_device;
+ FirmwareImage & m_firmwareImage;
+
+ RMIFunction m_f01;
+ RMIFunction m_f34;
+
+ unsigned char m_deviceStatus;
+ unsigned char m_bootloaderID[RMI_BOOTLOADER_ID_SIZE];
+
+ /* F34 Controls */
+ unsigned char m_f34Command;
+ unsigned char m_f34Status;
+ bool m_programEnabled;
+
+ /* F34 Query */
+ bool m_hasNewRegmap;
+ bool m_unlocked;
+ bool m_hasConfigID;
+ unsigned short m_blockSize;
+ unsigned short m_fwBlockCount;
+ unsigned short m_configBlockCount;
+
+ unsigned short m_f34StatusAddr;
+};
+
+#endif // _RMI4UPDATE_H_