def send_script_sync(self, conn_id, data, progress_callback):
        """Asynchronously send a a script to this IOTile device

        Args:
            conn_id (int): A unique identifier that will refer to this connection
            data (string): the script to send to the device
            progress_callback (callable): A function to be called with status on our progress, called as:
                progress_callback(done_count, total_count)

        Returns:
            dict: a dict with the following two entries set
                'success': a bool indicating whether we received a response to our attempted RPC
                'failure_reason': a string with the reason for the failure if success == False
        """

        done = threading.Event()
        result = {}

        def send_script_done(conn_id, adapter_id, status, reason):
            result['success'] = status
            result['failure_reason'] = reason

            done.set()

        self.send_script_async(conn_id, data, progress_callback, send_script_done)
        done.wait()

        return result