From cf1cf187b921b6ad5d3c92418945bc90e61e82ec Mon Sep 17 00:00:00 2001
From: Mark Watkins <jedimark@users.sourceforge.net>
Date: Wed, 20 Aug 2014 14:11:01 +1000
Subject: [PATCH] More CMS50F durations stuffs

---
 sleepyhead/SleepLib/loader_plugins/cms50f37_loader.cpp | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/sleepyhead/SleepLib/loader_plugins/cms50f37_loader.cpp b/sleepyhead/SleepLib/loader_plugins/cms50f37_loader.cpp
index 18205b36..9114e315 100644
--- a/sleepyhead/SleepLib/loader_plugins/cms50f37_loader.cpp
+++ b/sleepyhead/SleepLib/loader_plugins/cms50f37_loader.cpp
@@ -383,13 +383,11 @@ void CMS50F37Loader::processBytes(QByteArray bytes)
 
             // COMMAND_GET_SESSION_DURATION
         case 0x08: // 8,80,80,80,a4,81,80,80  // 00, 00, 24, 01, 00, 00
-            for (int i = 2, msb = buffer.at(idx+1); i < len; i++, msb>>= 1) {
-                buffer[idx+i] = (buffer[idx+i] & 0x7f) | (msb & 0x01 ? 0x80 : 0);
-            }
 
-            // duration
-            duration = buffer.at(idx+4) | (buffer.at(idx+5) << 8)
-                    | (buffer.at(idx+6) << 16);
+            duration = ((buffer.at(idx+1) & 0x4) << 5);
+            duration |= buffer.at(idx+4);
+            duration |= (buffer.at(idx+5) | ((buffer.at(idx+1) & 0x8) << 4)) << 8;
+            duration |= (buffer.at(idx+6) | ((buffer.at(idx+1) & 0x16) << 4)) << 16;
             break;
 
             // COMMAND_GET_SESSION_COUNT