Merge pull request #34 from blueue/debug

Write signature if we can confirm its existence.
diff --git a/rmi4update/firmware_image.cpp b/rmi4update/firmware_image.cpp
index e4813c5..6b0323e 100755
--- a/rmi4update/firmware_image.cpp
+++ b/rmi4update/firmware_image.cpp
@@ -55,13 +55,14 @@
 	unsigned char *content;
 	unsigned short container_id;
 	unsigned int sigature_size;
+	
+	for (ii = 0; ii < BLv7_MAX; ii++) {
+		m_signatureInfo[ii].bExisted = false;
+		m_signatureInfo[ii].size = 0;
+	}
 
 	if (m_bootloaderVersion == RMI_IMG_V10_SIGNATURE_VERSION_NUMBER) {
-		fprintf (stdout, "has signature\n");
-		for (ii = 0; ii < BLv7_MAX; ii++) {
-			m_signatureInfo[ii].bExisted = false;
-			m_signatureInfo[ii].size = 0;
-		}
+		fprintf (stdout, "has signature\n");	
 	}
 
 	m_cntrAddr = extract_long(&m_memBlock[RMI_IMG_V10_CNTR_ADDR_OFFSET]);
diff --git a/rmi4update/rmi4update.cpp b/rmi4update/rmi4update.cpp
index ec6e84b..5e1d924 100755
--- a/rmi4update/rmi4update.cpp
+++ b/rmi4update/rmi4update.cpp
@@ -355,6 +355,9 @@
 reset:
 	m_device.Reset();
 rebind:
+	if (m_bootloaderID[1] >= 10) {
+		Sleep(5000);
+	}
 	m_device.RebindDriver();
 	if(!m_device.CheckABSEvent())
 	{
@@ -874,11 +877,13 @@
 	}
 
 	if(m_device.GetDeviceType() == RMI_DEVICE_TYPE_TOUCHPAD)  {
-		// Write signature.
-		rc = WriteSignatureV7(BLv7_CORE_CODE, m_firmwareImage.GetFirmwareData(), offset);
-		if (rc != UPDATE_SUCCESS) {
-			fprintf(stderr, "%s: %s\n", __func__, update_err_to_string(rc));
-			return rc;	
+		if (m_firmwareImage.GetSignatureInfo()[BLv7_CORE_CODE].bExisted) {
+			// Write signature.
+			rc = WriteSignatureV7(BLv7_CORE_CODE, m_firmwareImage.GetFirmwareData(), offset);
+			if (rc != UPDATE_SUCCESS) {
+				fprintf(stderr, "%s: %s\n", __func__, update_err_to_string(rc));
+				return rc;	
+			}
 		}
 	}
 
@@ -1000,11 +1005,13 @@
 	}
 
 	if(m_device.GetDeviceType() == RMI_DEVICE_TYPE_TOUCHPAD)  {
-		// Write signature.
-		rc = WriteSignatureV7(BLv7_CORE_CONFIG, m_firmwareImage.GetConfigData(), offset);
-		if (rc != UPDATE_SUCCESS) {
-			fprintf(stderr, "%s: %s\n", __func__, update_err_to_string(rc));
-			return rc;	
+		if (m_firmwareImage.GetSignatureInfo()[BLv7_CORE_CONFIG].bExisted) {
+			// Write signature.
+			rc = WriteSignatureV7(BLv7_CORE_CONFIG, m_firmwareImage.GetConfigData(), offset);
+			if (rc != UPDATE_SUCCESS) {
+				fprintf(stderr, "%s: %s\n", __func__, update_err_to_string(rc));
+				return rc;	
+			}
 		}
 	}
 
@@ -1126,11 +1133,13 @@
 	}
 
 	if(m_device.GetDeviceType() == RMI_DEVICE_TYPE_TOUCHPAD)  {
-		// Write signature.
-		rc = WriteSignatureV7(BLv7_FLASH_CONFIG, m_firmwareImage.GetFlashConfigData(), offset);
-		if (rc != UPDATE_SUCCESS) {
-			fprintf(stderr, "%s: %s\n", __func__, update_err_to_string(rc));
-			return rc;	
+		if (m_firmwareImage.GetSignatureInfo()[BLv7_FLASH_CONFIG].bExisted) {
+			// Write signature.
+			rc = WriteSignatureV7(BLv7_FLASH_CONFIG, m_firmwareImage.GetFlashConfigData(), offset);
+			if (rc != UPDATE_SUCCESS) {
+				fprintf(stderr, "%s: %s\n", __func__, update_err_to_string(rc));
+				return rc;	
+			}
 		}
 	}
 
@@ -1258,11 +1267,13 @@
 	}
 
 	if(m_device.GetDeviceType() == RMI_DEVICE_TYPE_TOUCHPAD)  {
-		// Write signature.
-		rc = WriteSignatureV7(BLv7_FLD, m_firmwareImage.GetFLDData(), offset);
-		if (rc != UPDATE_SUCCESS) {
-			fprintf(stderr, "%s: %s\n", __func__, update_err_to_string(rc));
-			return rc;	
+		if (m_firmwareImage.GetSignatureInfo()[BLv7_FLD].bExisted) {
+			// Write signature.
+			rc = WriteSignatureV7(BLv7_FLD, m_firmwareImage.GetFLDData(), offset);
+			if (rc != UPDATE_SUCCESS) {
+				fprintf(stderr, "%s: %s\n", __func__, update_err_to_string(rc));
+				return rc;	
+			}
 		}
 	}