Exemplo n.º 1
0
// encode loaded data to machester + header
void RfidHidTagData::encode() {
	byte dataCopy[DATA_BUF_LEN];
	int lengthCopy;
	
	memcpy(dataCopy, data, length); // store original data to temp buffer
	lengthCopy = length;			// store length
	
	clear();
	insertBit(0);	// header 3 x 0 + 3 x 1
	insertBit(0);
	insertBit(0);
	insertBit(1);
	insertBit(1);
	insertBit(1);
	
	for(int i = 0; i < lengthCopy; i++) {
		if( dataCopy[i] == 1 ) {
			insertBit( 1 );
			insertBit( 0 );
		} else {
			insertBit( 0 );
			insertBit( 1 );
		}			
	}
}
Exemplo n.º 2
0
// load data
void RfidHidTagData::loadHex(byte data[]) {
  int i,j;
  
  clear();
  
  for(j = 4; j >= 0; j--)
    insertBit( (data[0] & (0x01 << j) ? 1 : 0) );
    
  for(i = 1; i <= 5; i++) {
    for(j = 7; j >= 0; j--)
      insertBit( (data[i] & (0x01 << j) ? 1 : 0) );
  }
}
Exemplo n.º 3
0
// Stvara stablo valica s bitovima
void insertBit(node ** tree, int duljinaNiz, int duljinaAbecede, char *abeceda,
		char *niz) {

	int imaNula = 0;
	int i = 0;
	int j = 0;
	int znakPrveAbecede = 0;
	int brojac = 0;
	int brojacNula = 0;
	char pomocni[2];
	char *bitovi =
			duljinaNiz % 8 ?
					(char *) malloc(duljinaNiz / 8 + 1) :
					(char *) malloc(duljinaNiz / 8);
	char *sljedeciPodniz1 = NULL, *sljedeciPodniz2 = NULL;
	char *prvaAbeceda = (char *) malloc(duljinaAbecede / 2);
	char *drugaAbeceda = (char *) malloc(duljinaAbecede - duljinaAbecede / 2);

	// Inicijaliziraj
	memset(prvaAbeceda, '\0', sizeof(char) * ((duljinaAbecede / 2) - 1));
	memset(drugaAbeceda, '\0',
			sizeof(char) * ((duljinaAbecede - duljinaAbecede / 2) - 1));

	// Napravi prvu abecedu
	for (i = 0; i < duljinaAbecede / 2; i++) {
		prvaAbeceda[i] = abeceda[i];
		brojac++;
	}

	// Napravi drugu abecedu
	for (i = 0; i < duljinaAbecede - duljinaAbecede / 2; i++) {
		drugaAbeceda[i] = abeceda[i + duljinaAbecede / 2];
	}

	for (i = 0; i < duljinaNiz; i++) {
		for (j = 0; j < brojac; j++) {
			if (*(niz + i) == prvaAbeceda[j]) {
				imaNula++;
			}
		}
	}

	// Napravi dva podniza i oba inicijaliziraj
	sljedeciPodniz1 = (char *) malloc(imaNula + 1);
	memset(sljedeciPodniz1, '\0', sizeof(char) * (imaNula));

	sljedeciPodniz2 = (char *) malloc(duljinaNiz - imaNula + 1);
	memset(sljedeciPodniz2, '\0', sizeof(char) * (duljinaNiz - imaNula));

	// Napravi bitove za cvor
	for (i = 0; i < duljinaNiz; i++) {
		for (j = 0; j < brojac; j++) {
			if (*(niz + i) == prvaAbeceda[j]) {
				znakPrveAbecede = 1;
			}
		}
		pomocni[0] = *(niz + i);
		// Znak pripada prvoj abecedi
		if (znakPrveAbecede == 1) {
			*(bitovi + i / 8) = setBit(i, 0);
			strncat(sljedeciPodniz1, pomocni, 1);
			brojacNula++;
		}
		// Znak pripada drugoj abecedi
		else {
			*(bitovi + i / 8) = setBit(i, 1);
			strncat(sljedeciPodniz2, pomocni, 1);
		}
		znakPrveAbecede = 0;
	}
	// Napravi novi cvor
	if (*tree == NULL) {
		*tree = NoviCvor(bitovi);
	}
	// Pozovi rekurziju
	if (duljinaAbecede > 2) {
		if (duljinaAbecede - duljinaAbecede / 2 > 1) {
			insertBit(&((*tree)->right), duljinaNiz - brojacNula,
					duljinaAbecede - duljinaAbecede / 2, drugaAbeceda,
					sljedeciPodniz2);
		}
		if (duljinaAbecede / 2 > 1) {
			insertBit(&((*tree)->left), brojacNula, duljinaAbecede / 2,
					prvaAbeceda, sljedeciPodniz1);
		}
	}
	// Oslobodi memoriju
	free(prvaAbeceda);
	free(drugaAbeceda);
	free(sljedeciPodniz1);
	free(sljedeciPodniz2);
}