SPI Programming Manual (G06.24+, H06.03+, J06.03+)

SPI Programming Examples
SPI Programming Manual427506-006
E-59
Example E-12: A Simple SPI Server in C
/* determine if this is a valid SPI message */
if ((l_err = verify_msg (spi_buffer_size)))
{
error_response (l_err);
return;
}
/* get the spi_command from the request buffer */
if ((err = SSGETTKN (req_buffer, ZSPI_TKN_COMMAND, (char *) &spi_command)))
{
display_spi_error (err, ZSPI_VAL_SSGETTKN,
ZSPI_TKN_COMMAND, true);
}
if ((l_err = validate_tokens()))
{
error_response (l_err);
return;
}
/* Security checks on the command/user could be done here. */
build_hdr_response ();
source_idx = 1;
dest_idx = 1;
tkn_count = 1;
/* Start Data list only if (ZSPI_TKN_MAXRESP is not = 0 */
if (max_resp)
{
if (err = SSPUTTKN (res_buffer, ZSPI_TKN_DATALIST))
display_spi_error (err, ZSPI_VAL_SSPUTTKN,
ZSPI_TKN_DATALIST, true);
}
l_start_idx = 0;
/* Check for CONTEXT token. */
if (context_count)
{
/* Here the CONTEXT token was sent. Copy the passed context. */
out_string.len = the_context.con_string.len;
memcpy (out_string.data, the_context.con_string.data,
out_string.len);
l_start_idx = the_context.index;
}
/* Now perform the spi_command */
tkn_retcode = ZSPI_ERR_OK;
switch (spi_command)
{
case ZSPI_CMD_GETVERSION :
/* Put SERVER BANNER token in response buffer */
if ((err = SSPUTTKN (res_buffer, ZSPI_TKN_SERVER_BANNER,
(char *) &server_banner)))
display_spi_error (err, ZSPI_VAL_SSPUTTKN,
ZSPI_TKN_SERVER_BANNER, true);
break;
Example E-12. C File: A Simple SPI Server (page 5 of 12)