<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 async def encoder_config(self, pin_a, pin_b, cb=None, cb_type=None, hall_encoder=False):
 """ This command enables the rotary encoder support and will enable encoder reporting. This command is not part of StandardFirmata. For 2 pin + ground encoders, FirmataPlus is required to be used for 2 pin rotary encoder, and for hell effect wheel encoder support, FirmataPlusRB is required. Encoder data is retrieved by performing a digital_read from pin a (encoder pin_a). When using 2 hall effect sensors (e.g. 2 wheel robot) specify pin_a for 1st encoder and pin_b for 2nd encoder. :param pin_a: Encoder pin 1. :param pin_b: Encoder pin 2. :param cb: callback function to report encoder changes :param cb_type: Constants.CB_TYPE_DIRECT = direct call or Constants.CB_TYPE_ASYNCIO = asyncio coroutine :param hall_encoder: wheel hall_encoder - set to True to select hall encoder support support. :returns: No return value """

        # checked when encoder data is returned
        self.hall_encoder = hall_encoder
        data = [pin_a, pin_b]
        if cb:
            self.digital_pins[pin_a].cb = cb
        if cb_type:
            self.digital_pins[pin_a].cb_type = cb_type

        await self._send_sysex(PrivateConstants.ENCODER_CONFIG, data)