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

SPI Programming Examples
SPI Programming Manual427506-006
E-34
Example E-9: A Simple SPI Requester in TAL
END;
CALL writex (term, sline, @sp '-' @sline);
WHILE 1=1 DO ! Do forever
BEGIN
CALL get^string (in^string.data, in^string.len);
!Send a SPI message
IF err := ssinit (req^buffer, max^bufsize, my^ssid,
zspi^val^cmdhdr, spi^command) THEN
CALL display^spi^error (err, zspi^val^ssinit, 0d, true);
IF err := ssputtkn (req^buffer, zspi^tkn^comment, in^string) THEN
CALL display^spi^error (err, zspi^val^ssputtkn,
zspi^tkn^comment, true);
! Save the original buffer in case of continuation.
sav^buffer ':=' req^buffer FOR max^bufsize/2 WORDS;
SEND^IT:
IF display^spi^buffer THEN
BEGIN
sline ':=' "SPI buffer sent:" -> @sp;
CALL writex (term, sline, @sp '-' @sline);
CALL dump^buf (req^buffer);
END;
CALL write^read^server;
IF display^spi^buffer THEN
BEGIN
sline ':=' "SPI buffer received:" -> @sp;
CALL writex (term, sline, @sp '-' @sline);
CALL dump^buf (req^buffer);
END;
! Reset the buffer
buflen := max^bufsize;
IF err := ssputtkn (req^buffer, zspi^tkn^reset^buffer,
buflen) THEN
BEGIN
CALL display^spi^error (err, zspi^val^ssputtkn,
zspi^tkn^reset^buffer, false);
sline ':=' "Bad SPI buffer returned! Cannot reset the buffer." -> @sp;
CALL writex (term, sline, @sp '-' @sline);
END;
IF NOT err THEN
BEGIN
tkn^retcode := 0;
IF err := ssgettkn (req^buffer, zspi^tkn^retcode, tkn^retcode, 1) THEN
BEGIN
CALL display^spi^error (err, zspi^val^ssgettkn,
zspi^tkn^retcode, false);
sline ':=' "Bad SPI buffer returned! Missing RETCODE." -> @sp;
CALL writex (term, sline, @sp '-' @sline);
END ELSE
BEGIN
err := tkn^retcode; ! To simplify the rest of the error
checking code.
Example E-9. TAL File: A Simple SPI Requester (page 7 of 8)