code: async def _analog_message(self, data):
          
          pin = data[0]
          value = (data[PrivateConstants.MSB] << 7) + data[PrivateConstants.LSB]
          # if self.analog_pins[pin].current_value != value:
          self.analog_pins[pin].current_value = value
  
          # append pin number, pin value, and pin type to return value and return as a list
          message = [pin, value, Constants.ANALOG]
  
          if self.analog_pins[pin].cb:
              if self.analog_pins[pin].cb_type:
                  await self.analog_pins[pin].cb(message)
              else:
                  loop = self.loop
                  loop.call_soon(self.analog_pins[pin].cb, message)
  
          # is there a latch entry for this pin?
          key = 'A' + str(pin)
          if key in self.latch_map:
              await self._check_latch_data(key, message[1])
docs: This is a private message handler method.
          It is a message handler for analog messages.
  
          :param data: message data
  
          :returns: None - but saves the data in the pins structure