added keyboard func implement