# PDL_ServiceCallWithCallback

## Description

Calls a device service with a callback response function. Callback responses can be either one-time or indefinite. If indefinite, you can later stop callback responses with the PDL_UnregisterServiceCallback API.

See Accessing Services for more information and examples.

## Syntax

>     PDL_Err PDL_ServiceCallWithCallback(
>       const char *uri,
>       const char *payload,
>       PDL_ServiceCallbackFunc callback,
>       void *user,
>       PDL_bool removeAfterResponse
>     );

Argument | Description
--- | ---
uri | Service's URI (Uniform Resource Identifier). Has the form: "palm://<service name>/<service type>".
callback | Callback function for handling response.
payload | JSON (JavaScript Object Notation) style parameters. For example: "{ par1:"val1", par2:"val2", ...}" Note that, in C code, the inner double quotes would need to be escaped with a backslash ("\").
user | Can be a pointer to anything, or even used as 4-byte value. Sent back in callback invocation and can be used to uniquely identify service source.
removeAfterResponse | `PDL_TRUE` if no further callbacks after first, `PDL_FALSE` otherwise.

## Returns

>     PDL_ECONNECTION - Unable to dispatch service call.
>     PDL_NOERROR — Success.

## Example

>     PDL_bool DisplayCallback(PDL_ServiceParameters *params, void *user)
>     {
>       char result[10];
>       if (PDL_ParamExists(params, "state"))
>       {
>           PDL_GetParamString(params, "state", result, 10);
>           fprintf(stdout, "Display state =%s\n", result);
>       }
>       else
>       {
>           fprintf(stdout, "Did not get display state\n");
>       }
>       return PDL_TRUE;
>     }

>     //**
>     //** Get state of display.
>     //**
>     void GetDisplayStatus()
>     {
>       PDL_ServiceCallWithCallback(
>           "palm://com.palm.display/status",
>           "",
>           DisplayCallback,
>           NULL,
>           PDL_TRUE);
>     }

See also:

- PDL_ServiceCall
- PDL_UnregisterServiceCallback
- PDL_GetParamDouble
- PDL_GetParamInt
- PDL_GetParamString
- PDL_ParamExists