Reading data at 10 Khz rate

Just for curiosity i tried to read byte by byte rather than nibble by nibble but it does not read the data at all. Can anybody indicate where i am doing wrong.

const int CLOCK_PIN     =     2;
const int DATA_PIN      =     4;
const int PACKET_BITS   =     1024;
const int PREAMBLE_LEN  =     3;
const int DATA_LEN      =     ((PACKET_BITS / 8) - PREAMBLE_LEN);

enum {
    PRE_0,    PRE_1,    PRE_2,    PRE_3,    PRE_4,    PRE_5,    DATA
} states;    

byte     preamble [] = {0xCA,0xAC,0x1F};
char     hexAsciiVals[] = "0123456789ABCDEF0123456789ABCDEF";
byte     state = PRE_0;
byte     nibble;
int      nibble_count = 0;
byte     firstval;
//const char  header = "CAAC1F";

void setup() {
  pinMode(CLOCK_PIN, INPUT);
  pinMode(DATA_PIN, INPUT);
  Serial.begin(57600);
}

void loop() {

    nibble = getNibble();
    //nibble_count++;
    
    
    switch (state) {    
        case PRE_0:
//            if (nibble_count > PREAMBLE_LEN + DATA_LEN) {
//                // we've read 32 bytes and still not found a match 
//                // for the preamble so skip a clock pulse
//                while (digitalRead(CLOCK_PIN) == LOW);
//                while (digitalRead(CLOCK_PIN) == HIGH);
//                nibble_count = 0;
//            } else 
//            {
//                firstval = 12;
//                Serial.write(hexAsciiVals[firstval]);
                
                state = (nibble == preamble[0]) ? PRE_1 : PRE_0;
              //  Serial.write(hexAsciiVals[nibble]);
//            }
            break;
        
        case PRE_1:
            
           // Serial.write (hexAsciiVals[firstval]);
           // Serial.print(hexAsciiVals[12]);
           // Serial.print(hexAsciiVals[nibble]);
            state = (nibble == preamble[1]) ? PRE_2 : PRE_0;    
            //Serial.write (hexAsciiVals[nibble]);
            break;
            
        case PRE_2:
          //  Serial.print(hexAsciiVals[nibble]);
            state = (nibble == preamble[2]) ? DATA : PRE_0;
            //Serial.write (hexAsciiVals[nibble]);
            break;

//        case PRE_3:
//          //  Serial.print(hexAsciiVals[nibble]);
//            state = (nibble == preamble[3]) ? PRE_4 : PRE_0;
//        //    Serial.write (hexAsciiVals[nibble]);
//            break;
//
//        case PRE_4:
//           // Serial.print(hexAsciiVals[nibble]);
//            state = (nibble == preamble[4]) ? PRE_5 : PRE_0;
//           // Serial.write (hexAsciiVals[nibble]);
//            break;
//        
//        case PRE_5:
//           // Serial.print(hexAsciiVals[nibble]);
//    //        Serial.print(202, HEX);
//  //          Serial.print(172, HEX);
//        //    Serial.println();
//            state = (nibble == preamble[5]) ? DATA : PRE_0;
//            Serial.print("$");
//            //   nibble_count = 0;
//            break;
            
        case DATA:
           //   Serial.print("CAAC1F");
            Serial.print(nibble, HEX);
            if (nibble_count == DATA_LEN) {
                // all done, start again
                state = PRE_0;
                nibble_count = 0;
             //   Serial.print("\n");
           //     Serial.print(hexAsciiVals[12]);
                
            }
            
            nibble_count++;
            //Serial.println();
            break;
    }
    
  //  delay(10);
}

byte getNibble() {

    byte val = 0;
    
    for (byte bit_count = 0; bit_count < 8; bit_count++) {
        while (digitalRead(CLOCK_PIN) == HIGH);
        while (digitalRead(CLOCK_PIN) == LOW);
        val <<= 1;
        val |= digitalRead(DATA_PIN); 
    }
    return (val &= 0xFF);
}