Controlling Machines With Thoughts: Brain-Computer Interfaces