def _read_response(self):
<EOL>res = self.stick.read(<NUM_LIT:2>, '<STR_LIT>')<EOL>if len(res) != <NUM_LIT:2>:<EOL><INDENT>self._handle_invalid_read_response(res, <NUM_LIT:2>)<EOL><DEDENT>response_len, response_status = struct.unpack('<STR_LIT>', res)<EOL>response_len -= <NUM_LIT:1> <EOL>debug_info = None<EOL>if response_status & pyhsm.defines.YSM_RESPONSE:<EOL><INDENT>debug_info = "<STR_LIT>"% (pyhsm.defines.cmd2str(response_status - pyhsm.defines.YSM_RESPONSE),response_len, response_len)<EOL><DEDENT>res = self.stick.read(response_len, debug_info)<EOL>if res:<EOL><INDENT>if response_status == self.command | pyhsm.defines.YSM_RESPONSE:<EOL><INDENT>self.executed = True<EOL>self.response_status = response_status<EOL>return self.parse_result(res)<EOL><DEDENT>else:<EOL><INDENT>reset(self.stick)<EOL>raise pyhsm.exception.YHSM_Error('<STR_LIT>')<EOL><DEDENT><DEDENT>else:<EOL><INDENT>raise pyhsm.exception.YHSM_Error('<STR_LIT>')<EOL><DEDENT>
After writing a command, read response.

@returns: Result of parse_data()

@raises pyhsm.exception.YHSM_Error: On failure to read a response to the
    command we sent in a timely fashion.