implement CharacteristicListener