hardware detection