瀏覽代碼

improved AC bits read; improved cli output

develop
Robin Thoni 7 年之前
父節點
當前提交
97311119f5
共有 2 個檔案被更改,包括 33 行新增22 行删除
  1. 16
    11
      cli/Interface/MainClass.cpp
  2. 17
    11
      src/Business/FreeFareTagBusiness.cpp

+ 16
- 11
cli/Interface/MainClass.cpp 查看文件

128
         for (int b = 0; b < 3; ++b) {
128
         for (int b = 0; b < 3; ++b) {
129
             std::cout << (sector.hasBlock(b) ? StringUtils::rawToHuman(sector.getBlock(b)) : std::string(32, '-')) << std::endl;
129
             std::cout << (sector.hasBlock(b) ? StringUtils::rawToHuman(sector.getBlock(b)) : std::string(32, '-')) << std::endl;
130
         }
130
         }
131
-        std::cout << (sector.hasKeyA() ? StringUtils::rawToHuman(sector.getKeyA()) : std::string(12, '-')) << " "
132
-            << (sector.hasAccessBits() ? StringUtils::rawToHuman(sector.getAccessBits()) : std::string(8, '-'))  << " "
133
-            << (sector.hasKeyB() ? StringUtils::rawToHuman(sector.getKeyB()) : std::string(12, '-')) << std::endl;
131
+        std::cout << "" << (sector.hasKeyA() ? StringUtils::rawToHuman(sector.getKeyA()) : std::string(12, '-'))
132
+        << (sector.hasAccessBits() ? StringUtils::rawToHuman(sector.getAccessBits()) : std::string(8, '-'))
133
+        << (sector.hasKeyB() ? StringUtils::rawToHuman(sector.getKeyB()) : std::string(12, '-')) << std::endl;
134
+
135
+
136
+        std::cout << "+Trailer key A: " << (sector.hasKeyA() ? StringUtils::rawToHuman(sector.getKeyA()) : std::string(12, '-'))
137
+            << "\t AC bits: " << (sector.hasAccessBits() ? StringUtils::rawToHuman(sector.getAccessBits()) : std::string(8, '-'))
138
+            << "\t key B: " << (sector.hasKeyB() ? StringUtils::rawToHuman(sector.getKeyB()) : std::string(12, '-')) << std::endl;
134
         AccessBitsDbo accessBitsDbo = sector.getAccessBitsDbo();
139
         AccessBitsDbo accessBitsDbo = sector.getAccessBitsDbo();
135
         for (int b = 0; b < 3; ++b) {
140
         for (int b = 0; b < 3; ++b) {
136
             std::cout << "+Block: " << b << " ";
141
             std::cout << "+Block: " << b << " ";
145
 void MainClass::printBlockAccessBits(const AccessBitsDbo &accessBits, int block)
150
 void MainClass::printBlockAccessBits(const AccessBitsDbo &accessBits, int block)
146
 {
151
 {
147
     std::cout << "read: " << (accessBits.canKeyAReadBlock(block) ? "A" : "") << (accessBits.canKeyBReadBlock(block) ? "B" : "");
152
     std::cout << "read: " << (accessBits.canKeyAReadBlock(block) ? "A" : "") << (accessBits.canKeyBReadBlock(block) ? "B" : "");
148
-    std::cout << " write: " << (accessBits.canKeyAWriteBlock(block) ? "A" : "") << (accessBits.canKeyBWriteBlock(block) ? "B" : "");
149
-    std::cout << " increment: " << (accessBits.canKeyAIncrementBlock(block) ? "A" : "") << (accessBits.canKeyBIncrementBlock(block) ? "B" : "");
150
-    std::cout << " decrement: " << (accessBits.canKeyADecrementBlock(block) ? "A" : "") << (accessBits.canKeyBDecrementBlock(block) ? "B" : "") << std::endl;
153
+    std::cout << "\t write: " << (accessBits.canKeyAWriteBlock(block) ? "A" : "") << (accessBits.canKeyBWriteBlock(block) ? "B" : "");
154
+    std::cout << "\t increment: " << (accessBits.canKeyAIncrementBlock(block) ? "A" : "") << (accessBits.canKeyBIncrementBlock(block) ? "B" : "");
155
+    std::cout << "\t decrement: " << (accessBits.canKeyADecrementBlock(block) ? "A" : "") << (accessBits.canKeyBDecrementBlock(block) ? "B" : "") << std::endl;
151
 }
156
 }
152
 
157
 
153
 void MainClass::printTrailerAccessBits(const AccessBitsDbo &accessBits)
158
 void MainClass::printTrailerAccessBits(const AccessBitsDbo &accessBits)
154
 {
159
 {
155
     std::cout << "key A read: " << (accessBits.canKeyAReadKeyATrailer() ? "A" : "") << (accessBits.canKeyBReadKeyATrailer() ? "B" : "");
160
     std::cout << "key A read: " << (accessBits.canKeyAReadKeyATrailer() ? "A" : "") << (accessBits.canKeyBReadKeyATrailer() ? "B" : "");
156
-    std::cout << " key A write: " << (accessBits.canKeyAWriteKeyATrailer() ? "A" : "") << (accessBits.canKeyBWriteKeyATrailer() ? "B" : "");
161
+    std::cout << "\t key A write: " << (accessBits.canKeyAWriteKeyATrailer() ? "A" : "") << (accessBits.canKeyBWriteKeyATrailer() ? "B" : "");
157
 
162
 
158
-    std::cout << " AC bits read: " << (accessBits.canKeyAReadAccessBitsTrailer() ? "A" : "") << (accessBits.canKeyBReadAccessBitsTrailer() ? "B" : "");
159
-    std::cout << " AC bits write: " << (accessBits.canKeyAWriteAccessBitsTrailer() ? "A" : "") << (accessBits.canKeyBWriteAccessBitsTrailer() ? "B" : "");
163
+    std::cout << "\t AC bits read: " << (accessBits.canKeyAReadAccessBitsTrailer() ? "A" : "") << (accessBits.canKeyBReadAccessBitsTrailer() ? "B" : "");
164
+    std::cout << "\t AC bits write: " << (accessBits.canKeyAWriteAccessBitsTrailer() ? "A" : "") << (accessBits.canKeyBWriteAccessBitsTrailer() ? "B" : "");
160
 
165
 
161
-    std::cout << " key B read: " << (accessBits.canKeyAReadKeyBTrailer() ? "A" : "") << (accessBits.canKeyBReadKeyBTrailer() ? "B" : "");
162
-    std::cout << " key B write: " << (accessBits.canKeyAWriteKeyBTrailer() ? "A" : "") << (accessBits.canKeyBWriteKeyBTrailer() ? "B" : "") << std::endl;;
166
+    std::cout << "\t key B read: " << (accessBits.canKeyAReadKeyBTrailer() ? "A" : "") << (accessBits.canKeyBReadKeyBTrailer() ? "B" : "");
167
+    std::cout << "\t key B write: " << (accessBits.canKeyAWriteKeyBTrailer() ? "A" : "") << (accessBits.canKeyBWriteKeyBTrailer() ? "B" : "") << std::endl;;
163
 }
168
 }
164
 
169
 
165
 void MainClass::printPercent(int done, int total)
170
 void MainClass::printPercent(int done, int total)

+ 17
- 11
src/Business/FreeFareTagBusiness.cpp 查看文件

111
             if (!blockKey.second.empty()) {
111
             if (!blockKey.second.empty()) {
112
                 auto blockResult = readBlock(s, b, blockKey.second, MFC_KEY_B);
112
                 auto blockResult = readBlock(s, b, blockKey.second, MFC_KEY_B);
113
                 if (blockResult) {
113
                 if (blockResult) {
114
-                    data = blockResult.getData();
114
+                    if (data.empty()) {
115
+                        data = blockResult.getData();
116
+                    }
115
                     keyB = true;
117
                     keyB = true;
116
                 }
118
                 }
117
             }
119
             }
122
         }
124
         }
123
         int b = sectorKeys.size() - 1;
125
         int b = sectorKeys.size() - 1;
124
         auto blockKey = sectorKeys[b];
126
         auto blockKey = sectorKeys[b];
125
-        std::string data = "";
127
+        std::string dataA = "";
128
+        std::string dataB = "";
126
         if (!blockKey.first.empty()) {
129
         if (!blockKey.first.empty()) {
127
             auto blockResult = readBlock(s, b, blockKey.first, MFC_KEY_A);
130
             auto blockResult = readBlock(s, b, blockKey.first, MFC_KEY_A);
128
             if (blockResult) {
131
             if (blockResult) {
129
-                data = blockResult.getData();
132
+                dataA = blockResult.getData();
130
                 keyA = true;
133
                 keyA = true;
131
             }
134
             }
132
         }
135
         }
133
         if (!blockKey.second.empty()) {
136
         if (!blockKey.second.empty()) {
134
             auto blockResult = readBlock(s, b, blockKey.second, MFC_KEY_B);
137
             auto blockResult = readBlock(s, b, blockKey.second, MFC_KEY_B);
135
             if (blockResult) {
138
             if (blockResult) {
136
-                data = blockResult.getData();
139
+                dataB = blockResult.getData();
137
                 keyB = true;
140
                 keyB = true;
138
             }
141
             }
139
         }
142
         }
140
-        sector.setBlock(b, data);
141
-        AccessBitsDbo accessBitsDbo = sector.getAccessBitsDbo();
142
         if (cb != 0) {
143
         if (cb != 0) {
143
             cb((s * sectorKeys.size()) + b + 1, keys.size() * sectorKeys.size());
144
             cb((s * sectorKeys.size()) + b + 1, keys.size() * sectorKeys.size());
144
         }
145
         }
145
 
146
 
147
+        sector.setBlock(b, dataA);
148
+        AccessBitsDbo accessBitsDboA = sector.getAccessBitsDbo();
149
+        sector.setBlock(b, dataB);
150
+        AccessBitsDbo accessBitsDboB = sector.getAccessBitsDbo();
146
         sector.setKeyA(keyA ? blockKey.first : "");
151
         sector.setKeyA(keyA ? blockKey.first : "");
147
         sector.setKeyB(keyB ? blockKey.second : "");
152
         sector.setKeyB(keyB ? blockKey.second : "");
153
+
148
         std::string accessBits;
154
         std::string accessBits;
149
-        if (!data.empty())
150
-        {
151
-            if ((keyA && accessBitsDbo.canKeyAReadAccessBitsTrailer()) || (keyB && accessBitsDbo.canKeyBReadAccessBitsTrailer())) {
152
-                accessBits = accessBitsDbo.getBits();
153
-            }
155
+        if (keyA && accessBitsDboA.canKeyAReadAccessBitsTrailer()) {
156
+            accessBits = accessBitsDboA.getBits();
157
+        }
158
+        else if (keyB && accessBitsDboB.canKeyBReadAccessBitsTrailer()) {
159
+            accessBits = accessBitsDboB.getBits();
154
         }
160
         }
155
         sector.setAccessBits(accessBits);
161
         sector.setAccessBits(accessBits);
156
 
162
 

Loading…
取消
儲存