code: async def listen_notifications(self, fallback_callback=None):
          
          tasks = []
  
          async def handle_notification(notification):
              if type(notification) not in self.callbacks:
                  if not fallback_callback:
                      _LOGGER.debug("No callbacks for %s", notification)
                      # _LOGGER.debug("Existing callbacks for: %s" % self.callbacks)
                  else:
                      await fallback_callback(notification)
                  return
              for cb in self.callbacks[type(notification)]:
                  await cb(notification)
  
          for serv in self.services.values():
              tasks.append(
                  asyncio.ensure_future(
                      serv.listen_all_notifications(handle_notification)
                  )
              )
  
          try:
              print(await asyncio.gather(*tasks))
          except Exception as ex:
              # TODO: do a slightly restricted exception handling?
              # Notify about disconnect
              await handle_notification(ConnectChange(connected=False, exception=ex))
              return
docs: Listen for notifications from the device forever.
  
          Use :func:on_notification: to register what notifications to listen to.