Part 2 of 2. The entire code zip file can be downloaded at http://www.bishopfox.com/download/814/ if you choose. Thank you for taking the time to look at this.
//////////////////////////////////////
// Function to append the card value (bitHolder1 and bitHolder2) to the necessary array then tranlate that to
// the two chunks for the card value that will be output
void getCardValues() {
switch (bitCount) {
case 26:
// Example of full card value
// |> preamble <| |> Actual card value <|
// 000000100000000001 11 111000100000100100111000
// |> write to chunk1 <| |> write to chunk2 <|
for(int i = 19; i >= 0; i--) {
if(i == 13 || i == 2){
bitWrite(cardChunk1, i, 1); // Write preamble 1's to the 13th and 2nd bits
}
else if(i > 2) {
bitWrite(cardChunk1, i, 0); // Write preamble 0's to all other bits above 1
}
else {
bitWrite(cardChunk1, i, bitRead(bitHolder1, i + 20)); // Write remaining bits to cardChunk1 from bitHolder1
}
if(i < 20) {
bitWrite(cardChunk2, i + 4, bitRead(bitHolder1, i)); // Write the remaining bits of bitHolder1 to cardChunk2
}
if(i < 4) {
bitWrite(cardChunk2, i, bitRead(bitHolder2, i)); // Write the remaining bit of cardChunk2 with bitHolder2 bits
}
}
break;
case 27:
for(int i = 19; i >= 0; i--) {
if(i == 13 || i == 3){
bitWrite(cardChunk1, i, 1);
}
else if(i > 3) {
bitWrite(cardChunk1, i, 0);
}
else {
bitWrite(cardChunk1, i, bitRead(bitHolder1, i + 19));
}
if(i < 19) {
bitWrite(cardChunk2, i + 5, bitRead(bitHolder1, i));
}
if(i < 5) {
bitWrite(cardChunk2, i, bitRead(bitHolder2, i));
}
}
break;
case 28:
for(int i = 19; i >= 0; i--) {
if(i == 13 || i == 4){
bitWrite(cardChunk1, i, 1);
}
else if(i > 4) {
bitWrite(cardChunk1, i, 0);
}
else {
bitWrite(cardChunk1, i, bitRead(bitHolder1, i + 18));
}
if(i < 18) {
bitWrite(cardChunk2, i + 6, bitRead(bitHolder1, i));
}
if(i < 6) {
bitWrite(cardChunk2, i, bitRead(bitHolder2, i));
}
}
break;
case 29:
for(int i = 19; i >= 0; i--) {
if(i == 13 || i == 5){
bitWrite(cardChunk1, i, 1);
}
else if(i > 5) {
bitWrite(cardChunk1, i, 0);
}
else {
bitWrite(cardChunk1, i, bitRead(bitHolder1, i + 17));
}
if(i < 17) {
bitWrite(cardChunk2, i + 7, bitRead(bitHolder1, i));
}
if(i < 7) {
bitWrite(cardChunk2, i, bitRead(bitHolder2, i));
}
}
break;
case 30:
for(int i = 19; i >= 0; i--) {
if(i == 13 || i == 6){
bitWrite(cardChunk1, i, 1);
}
else if(i > 6) {
bitWrite(cardChunk1, i, 0);
}
else {
bitWrite(cardChunk1, i, bitRead(bitHolder1, i + 16));
}
if(i < 16) {
bitWrite(cardChunk2, i + 8, bitRead(bitHolder1, i));
}
if(i < 8) {
bitWrite(cardChunk2, i, bitRead(bitHolder2, i));
}
}
break;
case 31:
for(int i = 19; i >= 0; i--) {
if(i == 13 || i == 7){
bitWrite(cardChunk1, i, 1);
}
else if(i > 7) {
bitWrite(cardChunk1, i, 0);
}
else {
bitWrite(cardChunk1, i, bitRead(bitHolder1, i + 15));
}
if(i < 15) {
bitWrite(cardChunk2, i + 9, bitRead(bitHolder1, i));
}
if(i < 9) {
bitWrite(cardChunk2, i, bitRead(bitHolder2, i));
}
}
break;
case 32:
for(int i = 19; i >= 0; i--) {
if(i == 13 || i == 8){
bitWrite(cardChunk1, i, 1);
}
else if(i > 8) {
bitWrite(cardChunk1, i, 0);
}
else {
bitWrite(cardChunk1, i, bitRead(bitHolder1, i + 14));
}
if(i < 14) {
bitWrite(cardChunk2, i + 10, bitRead(bitHolder1, i));
}
if(i < 10) {
bitWrite(cardChunk2, i, bitRead(bitHolder2, i));
}
}
break;
case 33:
for(int i = 19; i >= 0; i--) {
if(i == 13 || i == 9){
bitWrite(cardChunk1, i, 1);
}
else if(i > 9) {
bitWrite(cardChunk1, i, 0);
}
else {
bitWrite(cardChunk1, i, bitRead(bitHolder1, i + 13));
}
if(i < 13) {
bitWrite(cardChunk2, i + 11, bitRead(bitHolder1, i));
}
if(i < 11) {
bitWrite(cardChunk2, i, bitRead(bitHolder2, i));
}
}
break;
case 34:
for(int i = 19; i >= 0; i--) {
if(i == 13 || i == 10){
bitWrite(cardChunk1, i, 1);
}
else if(i > 10) {
bitWrite(cardChunk1, i, 0);
}
else {
bitWrite(cardChunk1, i, bitRead(bitHolder1, i + 12));
}
if(i < 12) {
bitWrite(cardChunk2, i + 12, bitRead(bitHolder1, i));
}
if(i < 12) {
bitWrite(cardChunk2, i, bitRead(bitHolder2, i));
}
}
break;
case 35:
for(int i = 19; i >= 0; i--) {
if(i == 13 || i == 11){
bitWrite(cardChunk1, i, 1);
}
else if(i > 11) {
bitWrite(cardChunk1, i, 0);
}
else {
bitWrite(cardChunk1, i, bitRead(bitHolder1, i + 11));
}
if(i < 11) {
bitWrite(cardChunk2, i + 13, bitRead(bitHolder1, i));
}
if(i < 13) {
bitWrite(cardChunk2, i, bitRead(bitHolder2, i));
}
}
break;
case 36:
for(int i = 19; i >= 0; i--) {
if(i == 13 || i == 12){
bitWrite(cardChunk1, i, 1);
}
else if(i > 12) {
bitWrite(cardChunk1, i, 0);
}
else {
bitWrite(cardChunk1, i, bitRead(bitHolder1, i + 10));
}
if(i < 10) {
bitWrite(cardChunk2, i + 14, bitRead(bitHolder1, i));
}
if(i < 14) {
bitWrite(cardChunk2, i, bitRead(bitHolder2, i));
}
}
break;
case 37:
for(int i = 19; i >= 0; i--) {
if(i == 13){
bitWrite(cardChunk1, i, 0);
}
else {
bitWrite(cardChunk1, i, bitRead(bitHolder1, i + 9));
}
if(i < 9) {
bitWrite(cardChunk2, i + 15, bitRead(bitHolder1, i));
}
if(i < 15) {
bitWrite(cardChunk2, i, bitRead(bitHolder2, i));
}
}
break;
}
return;
}
//////////////////////////////////////
// Begin code for SD card
void writeSD() {
// open the file. note that only one file can be open at a time,
// so you have to close this one before opening another.
ofstream file(dataFile, ios::out | ios::app);
// if the file is available, write to it:
if (file) {
file << bitCount;
//file << dec << bitCount;
file << " bit card: ";
file << hex << cardChunk1;
file << hex << cardChunk2;
file << ", FC = ";
//file << facilityCode;
file << dec << facilityCode;
file << ", CC = ";
//file << cardCode;
file << dec << cardCode;
file << ", BIN: ";
for (int i = 19; i >= 0; i--) {
file << bitRead(cardChunk1, i);
}
for (int i = 23; i >= 0; i--) {
file << bitRead(cardChunk2, i);
}
file << endl;
// print to the serial port too
Serial.println("Wrote data to SD card");
}
else {
clearLCD();
LCD.print("Error writing to file");
}
}
// End code for SD card