Ejemplo n.º 1
0
bool frame::checksumIsValid() const { //mengembalikan true bila checksum benar
    assert(formatIsValid());
    unsigned int STXpos=5;
    unsigned int ETXpos;
    for (ETXpos=STXpos; bytes[ETXpos]!=ETX; ETXpos++) {}
    return checkChecksum(getChecksum(),bytes.substr(0,ETXpos+1));
}
Ejemplo n.º 2
0
 void KCartridge::load(const std::string & filename)
 {
     loadFile(filename);
     if(size() < sizeof(header_t))
     {
         if(size() > 0)
         {
             delete[] rom;
             rom = nullptr;
             rom_size = 0;
         }
         
         throw std::runtime_error("Cart: File corrupted.");
     }
     
     /* Checke header-struct packing... */
     assert(header().checksum == (*this)[0x014D]);
     
     lg::info(TAG, "Loaded Cartridge %s\n", std::string(header().title, 0x0F).c_str());
     lg::info(TAG, "Loaded Cartridge size: %u\n", size());
     lg::debug(TAG, "Cartridge Type: %u\n", header().cart_type);
     
     /* Überprüfe die header-checksum */
     checkChecksum();
 }
Ejemplo n.º 3
0
		Ref<Result> UPCEANReader::decodeRow(int rowNumber, Ref<BitArray> row, int startGuardRange[]){
			
			std::string tmpResultString;
			std::string& tmpResultStringRef = tmpResultString;
			int endStart;
			try {
				endStart = decodeMiddle(row, startGuardRange, 2 /*reference findGuardPattern*/ , tmpResultStringRef);
			} catch (ReaderException re) {
				if (startGuardRange!=NULL) {
					delete [] startGuardRange;
					startGuardRange = NULL;
				}
				throw re;
			}
			
			int* endRange = decodeEnd(row, endStart);
						
#pragma mark QuietZone needs some change
			// Make sure there is a quiet zone at least as big as the end pattern after the barcode. The
			// spec might want more whitespace, but in practice this is the maximum we can count on.
//			int end = endRange[1];
//			int quietEnd = end + (end - endRange[0]);
//			if (quietEnd >= row->getSize() || !row->isRange(end, quietEnd, false)) {
//				throw ReaderException("Quiet zone asserrt fail.");
//			}
			
			if (!checkChecksum(tmpResultString)) {
				if (startGuardRange!=NULL) {
					delete [] startGuardRange;
					startGuardRange = NULL;
				}
				if (endRange!=NULL) {
					delete [] endRange;
					endRange = NULL;
				}
				throw ReaderException("Checksum fail.");
			}
			
			Ref<String> resultString(new String(tmpResultString));
			
			float left = (float) (startGuardRange[1] + startGuardRange[0]) / 2.0f;
			float right = (float) (endRange[1] + endRange[0]) / 2.0f;
			
			std::vector< Ref<ResultPoint> > resultPoints(2);
			Ref<OneDResultPoint> resultPoint1(new OneDResultPoint(left, (float) rowNumber));
			Ref<OneDResultPoint> resultPoint2(new OneDResultPoint(right, (float) rowNumber));
			resultPoints[0] = resultPoint1;
			resultPoints[1] = resultPoint2;
			
			ArrayRef<unsigned char> resultBytes(1);
			
			if (startGuardRange!=NULL) {
				delete [] startGuardRange;
				startGuardRange = NULL;
			}
			if (endRange!=NULL) {
				delete [] endRange;
				endRange = NULL;
			}
			
			Ref<Result> res(new Result(resultString, resultBytes, resultPoints, getBarcodeFormat()));
			return res;
		}