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 #include 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)