public void processFrame(ArrayList<Integer> frame) {
		
		// Remove all escape characters in the array.
		for (int i = 0; i < frame.size(); i ++) {
			//System.out.println("Processing " + String.format("0b%8s",  Integer.toBinaryString((int) 0xFF & frame.get(i))).replace(' ', '0') + "");
			System.out.print(frame.get(i));
			if (frame.get(i)==ESCAPE){
				System.out.println("Escaped");
				frame.remove(i);
				i--;
			}
		}
			
		int toAdress = (int) frame.get(0) & 0xFF; // To ID
		int fromAdress = (int) frame.get(1) & 0xFF; // From ID
		int messageType = (int) frame.get(2) & 0xFF; // Message type
		int dataLength =  frame.get(3) & 0xFF; // Data length
		
		
		
		  System.out.println("to: " + toAdress + 
						 " from " + fromAdress + 
						 " Binary " + Integer.toBinaryString(fromAdress) + 
						 " type:" + messageType + 
						 " DataLength " + dataLength);
						 
		// Update attached interfaces
		if (fromAdress == ECHO){
			System.out.println("Echoed");
			System.out.println();
		}
		
		if (attachedInterfaces.containsKey(fromAdress)){
			attachedInterfaces.get(fromAdress).setData(frameBuffer.subList(4, 4+dataLength));
			attachedInterfaces.get(fromAdress).setReturnCaller(this);
			// System.out.println("Set timer " +  fromAdress);
		} else {
			 System.out.println("Key " + fromAdress +" did not exist in the " + attachedInterfaces.size() + " keys");
			
		}
		
		if ((fromAdress & TIMER) > 0 ){
			 // System.out.println("From timer.");
		}
		
		if ((fromAdress & GYRO) > 0 ) {
			// System.out.println("From gyro.");
		}
	}