146 lines
3.4 KiB
Plaintext
146 lines
3.4 KiB
Plaintext
P7_SINIT(3)
|
|
===========
|
|
Thomas "Cakeisalie5" Touhey
|
|
:Email: thomas@touhey.fr
|
|
:man source: libp7
|
|
:man manual: libp7 manual
|
|
|
|
NAME
|
|
----
|
|
p7_sinit - initialize libp7 with a custom stream
|
|
|
|
SYNOPSIS
|
|
--------
|
|
[source,c]
|
|
----
|
|
#include <libp7.h>
|
|
#include <libp7/stream.h>
|
|
|
|
int p7_sinit(p7_handle_t **h, unsigned int flags,
|
|
const char *name, p7_stream_t dstream);
|
|
|
|
p7_handle_t *handle;
|
|
int err = p7_sinit(&handle, 1, 1, NULL, (p7_stream_t){
|
|
.cookie = cookie,
|
|
.read = cookie_read,
|
|
.write = cookie_write,
|
|
.close = cookie_close,
|
|
});
|
|
if (err)
|
|
printf("Couldn't initialize libp7/communication: %s\n", p7_strerror(err));
|
|
|
|
/* make miracles */
|
|
|
|
p7_exit(handle, 1);
|
|
----
|
|
|
|
WARNING
|
|
-------
|
|
Before sending a pointer to the handle, if you want libp7 to allocate it,
|
|
it must be *NULL*! Otherwise, it will try to use the existing one!
|
|
|
|
DESCRIPTION
|
|
-----------
|
|
This initialization function will, as the others (see *p7_init*(3)), create
|
|
a handle that other functions will use to communicate with the calculator. It
|
|
will also initiate communication and detect the environment. The difference with
|
|
the other initialization functions is that this one is used by the others, as
|
|
it creates a P7 Stream using the sent data.
|
|
|
|
The *p7_stream_t* structure is the following:
|
|
|
|
[source,c]
|
|
----
|
|
typedef struct {
|
|
void *cookie;
|
|
|
|
int (*read)();
|
|
int (*write)();
|
|
int (*setcomm)();
|
|
int (*close)();
|
|
} p7_stream_t;
|
|
----
|
|
|
|
The callbacks return the libp7 error, or 0 if no error has occured. They are
|
|
as follows:
|
|
|
|
_*read_::
|
|
This function implements read operations for the stream. When called,
|
|
it receives four arguments:
|
|
|
|
[source,c]
|
|
----
|
|
int read(void *cookie, unsigned char *dest, size_t size,
|
|
unsigned int timeout);
|
|
----
|
|
::
|
|
The *buf* and *size* arguments are, respectively, a buffer into which
|
|
input data can be placed and the size of that buffer. The *timeout*
|
|
argument is the timeout in milliseconds.
|
|
::
|
|
If **read* is a null pointer, then reads from the stream always return
|
|
*p7_error_noread*.
|
|
|
|
_*write_::
|
|
This function implements write operations for the stream. When called,
|
|
it receives three arguments:
|
|
|
|
[source,c]
|
|
----
|
|
int write(void *cookie, const unsigned char *data, size_t size);
|
|
----
|
|
::
|
|
The *buf* and *size* arguments are, respectively, a buffer of data to be
|
|
output to the stream and the size of that buffer.
|
|
::
|
|
If **write* is a null pointer, then outputs to the stream always return
|
|
*p7_error_nowrite*.
|
|
|
|
_*setcomm_::
|
|
This function sets communication settings. When called, it receives
|
|
four arguments:
|
|
|
|
[source,c]
|
|
----
|
|
int setcomm(void *cookie, int speed, int parity, int stopbits);
|
|
----
|
|
::
|
|
The *speed* argument is the speed of the communication in bauds per seconds.
|
|
It can be one of: *P7_B9600*, *P7_B19200*.
|
|
::
|
|
The *parity* argument is the parity of the communication.
|
|
It can be one of: *P7_PARITY_NONE*, *P7_PARITY_ODD*, *P7_PARITY_EVEN*.
|
|
::
|
|
The *stopbits* is the number of stop bits.
|
|
It can be one of: *P7_ONESTOPBIT*, *P7_TWOSTOPBITS*.
|
|
::
|
|
If **setcomm* is a null pointer, or returns an error, it will generally
|
|
just be ignored.
|
|
|
|
_*close_::
|
|
This function closes the stream. When called, it receives one argument:
|
|
|
|
[source,c]
|
|
----
|
|
int close(void *cookie);
|
|
----
|
|
::
|
|
It should not be a null pointer, and always return 0.
|
|
|
|
For the flags, see *p7_init*(3).
|
|
|
|
RETURN VALUE
|
|
------------
|
|
This function returns zero if everything went well, and the error code
|
|
otherwise.
|
|
|
|
ERRORS
|
|
------
|
|
See *p7_error*(3).
|
|
|
|
SEE ALSO
|
|
--------
|
|
*libp7*(3),
|
|
*p7_init*(3),
|
|
*p7_error*(3)
|