CAPS Universe documentation  1.0.4
All you need to know to be successful
libcapsdriver-local.h
Go to the documentation of this file.
1/*
2 * SPDX-License-Identifier: GPL-2.0-or-later
3 *
4 * (c) 2022 Juergen Borleis <projects@caps-printing.org>
5 *
6 * This library is free software; you can redistribute it and/or modify it under
7 * the terms of the GNU General Public License as published by the Free
8 * Software Foundation; either version 2 of the License, or (at your option)
9 * any later version.
10 */
11#include <unistd.h>
12#include <fcntl.h>
13#include <errno.h>
14
15#include <libcapsbase.h>
16#include <libcapsraster-api.h>
17
18#include "libcapsdriver.h"
19
29#ifdef DEBUG
30# define caps_print_debug(fmt, ...) caps_print_debug_template(fmt, ##__VA_ARGS__)
31#else
32# define caps_print_debug(fmt, ...)
33#endif
34
35#ifdef DSO_HIDDEN
36# define DSO_VISIBLE __attribute__ ((visibility("default")))
37#else
38# define DSO_VISIBLE
39#endif /* DSO_HIDDEN */
40
41#ifndef ARRAY_SIZE
42# define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0]))
43#endif
44
45#ifdef ENABLE_NLS
46
47# ifndef PACKAGE
48# error "Missing 'PACKAGE' macro: include 'config.h' first"
49# endif /* PACKAGE */
50
51# define _(string) dgettext(PACKAGE, string)
52# include <libintl.h>
53
54#else /* ENABLE_NLS */
55
56# define _(string) (string)
57
58#endif /* ENABLE_NLS */
59
60#define NLS_(string) (string)
61
62#define MAX(a,b) ((a) > (b) ? a : b)
63
72static __const inline unsigned DOTS_TO_BYTES(unsigned dots)
73{
74 return (dots + 7) / 8;
75}
76
84static __const inline size_t DOTS_TO_INDEX(size_t dots)
85{
86 return dots / 8;
87}
88
119};
120
124struct caps_drv {
126 const struct caps_generic_driver *cb;
127 void *cb_data;
131 unsigned prn_status;
139 const struct caps_rstr_page_desc *page;
142
143 /* the following data is valid only while processing a job */
145 unsigned job_status_set:1;
147 /* colour format emulation support */
151 unsigned line_stride;
152};
153
154/* Just to hide the implementation */
155static inline bool job_final_state_already_set(const struct caps_drv *cdrv)
156{
157 return cdrv->job_status_set;
158}
159
165int caps_drv_jobs_loop(struct caps_drv *drvi, const char *filename, const char *params) __nonnull((1));
166int caps_drv_page_loop(struct caps_drv *drvi) __nonnull();
167int caps_drv_printer_check(struct caps_drv *drvi) __nonnull(); // internal only
168int caps_drv_global_stream_io(struct caps_drv *drvi) __nonnull(); // internal only
169void caps_drv_printer_tweak_status(struct caps_drv *drvi) __nonnull(); // internal only
170
171void caps_drv_shutdown(struct caps_pp_handle *instance) __nonnull();
172void caps_drv_start_up_state(struct caps_pp_handle *instance) __nonnull();
173void caps_drv_idle(struct caps_pp_handle *instance) __nonnull();
174void caps_drv_power_saving(struct caps_pp_handle *instance) __nonnull();
175void caps_drv_printing(struct caps_pp_handle *instance) __nonnull();
176void caps_drv_out_of_paper(struct caps_pp_handle *instance) __nonnull();
177void caps_drv_error(struct caps_pp_handle *instance) __nonnull();
178
179void caps_drv_job_start(struct caps_drv *cdrv) __nonnull();
180void caps_drv_job_completed(struct caps_drv *cdrv) __nonnull();
181void caps_drv_job_stopped(struct caps_drv *cdrv) __nonnull();
182void caps_drv_job_aborted(struct caps_drv *cdrv, enum caps_printing_job_reason reason, const char *message) __nonnull((1));
183
184void caps_drv_emulation_stop(struct caps_drv *cdrv) __nonnull();
187
188/* internal dithering support */
189
191
193void ht_put(struct drv_halftone_converter *ht) __nonnull();
194int ht_grey_line_add(struct drv_halftone_converter *ht, unsigned cnt, const struct caps_dot_grey raw[cnt]) __nonnull((1));
197unsigned ht_monochrome_line_get(struct drv_halftone_converter *ht, enum caps_colour_format cf, unsigned cnt, struct caps_dot_monochrome ln[cnt]) __nonnull();
210static inline int fd_is_valid(int fd)
211{
212 errno = 0;
213 return fcntl(fd, F_GETFD) != -1 || errno != EBADF;
214}
#define __const
Definition: libcapsbase.h:130
#define __returns_nonnull
Definition: libcapsbase.h:141
#define __nonnull(params)
Definition: libcapsbase.h:84
caps_colour_format
Dot colour format definition.
Definition: libcapsbase.h:375
caps_printing_job_reason
The more detailed state description a printing job can be in.
Definition: libcapsppcommon.h:268
Basic API for everything else of the CAPS universe.
void caps_drv_printing(struct caps_pp_handle *instance)
Definition: device-status.c:67
int ht_grey_line_add(struct drv_halftone_converter *ht, unsigned cnt, const struct caps_dot_grey raw[cnt])
Definition: halftone-processing.c:727
void caps_drv_power_saving(struct caps_pp_handle *instance)
Definition: device-status.c:57
int caps_drv_jobs_loop(struct caps_drv *drvi, const char *filename, const char *params)
Definition: job-loop.c:209
void caps_drv_job_aborted(struct caps_drv *cdrv, enum caps_printing_job_reason reason, const char *message)
Definition: job-status.c:70
unsigned ht_monochrome_line_get(struct drv_halftone_converter *ht, enum caps_colour_format cf, unsigned cnt, struct caps_dot_monochrome ln[cnt])
Definition: halftone-processing.c:900
void caps_drv_shutdown(struct caps_pp_handle *instance)
Definition: device-status.c:27
int caps_drv_global_stream_io(struct caps_drv *drvi)
Definition: device-io.c:113
void caps_drv_out_of_paper(struct caps_pp_handle *instance)
Definition: device-status.c:77
void caps_drv_job_start(struct caps_drv *cdrv)
Definition: job-status.c:26
void caps_drv_idle(struct caps_pp_handle *instance)
Definition: device-status.c:47
void caps_drv_start_up_state(struct caps_pp_handle *instance)
Definition: device-status.c:37
int ht_drain(struct drv_halftone_converter *ht)
Definition: halftone-processing.c:805
static int fd_is_valid(int fd)
Definition: libcapsdriver-local.h:210
int ht_emptyline_add(struct drv_halftone_converter *ht)
Definition: halftone-processing.c:781
int caps_drv_emulation_setup(struct caps_drv *cdrv)
Definition: emulation-and-restore.c:626
int caps_drv_print_medium_default_post_setup(struct caps_drv *cdrv)
Definition: libcapsdriver.c:458
static bool job_final_state_already_set(const struct caps_drv *cdrv)
Definition: libcapsdriver-local.h:155
void caps_drv_error(struct caps_pp_handle *instance)
Definition: device-status.c:87
void caps_drv_job_completed(struct caps_drv *cdrv)
Definition: job-status.c:37
halftone_type
Declaration of some internal dithering/halftone algorithms.
Definition: libcapsdriver-local.h:95
@ HT_METHOD_SI2
Definition: libcapsdriver-local.h:117
@ HT_METHOD_SI3
Definition: libcapsdriver-local.h:118
@ HT_METHOD_FLS
Definition: libcapsdriver-local.h:106
@ HT_METHOD_NONE
Definition: libcapsdriver-local.h:96
@ HT_METHOD_ST
Definition: libcapsdriver-local.h:113
@ HT_METHOD_SI1
Definition: libcapsdriver-local.h:116
@ HT_METHOD_JJN
Definition: libcapsdriver-local.h:110
@ HT_METHOD_BU
Definition: libcapsdriver-local.h:115
@ HT_METHOD_AV
Definition: libcapsdriver-local.h:97
@ HT_METHOD_ORDERED
Definition: libcapsdriver-local.h:101
@ HT_METHOG_AT
Definition: libcapsdriver-local.h:114
void caps_drv_job_stopped(struct caps_drv *cdrv)
Definition: job-status.c:59
void caps_drv_emulation_stop(struct caps_drv *cdrv)
Definition: emulation-and-restore.c:481
int caps_drv_page_loop(struct caps_drv *drvi)
Definition: page-loop.c:100
int caps_drv_printer_check(struct caps_drv *drvi)
Definition: device-monitor.c:686
void caps_drv_printer_tweak_status(struct caps_drv *drvi)
Definition: device-monitor.c:235
void ht_put(struct drv_halftone_converter *ht)
Definition: halftone-processing.c:200
struct drv_halftone_converter * ht_get(enum halftone_type t, unsigned cnt)
Definition: halftone-processing.c:127
static const char * filename
Definition: libcapsdriver.c:525
static const char * params
Definition: libcapsdriver.c:525
Generic printer driver specific API to simplify drivers.
caps_drv_prn_tweaks
Definition: libcapsdriver.h:44
API declaration to render documents page by page.
#define DOTS_TO_BYTES(x)
Definition: samsung-spl2-series.h:46
#define DOTS_TO_INDEX(x)
Definition: samsung-spl2-series.h:47
One byte per component, one component per dot.
Definition: libcapsbase.h:400
1 bit per component, 8 dots per byte, MSbit is on the left (bit 7).
Definition: libcapsbase.h:388
libcapsdriver internal data collection
Definition: libcapsdriver-local.h:124
const struct caps_generic_driver * cb
Definition: libcapsdriver-local.h:126
struct caps_rstr_page page_setup
Definition: libcapsdriver-local.h:140
enum caps_drv_prn_tweaks prn_tweaks
Definition: libcapsdriver-local.h:132
unsigned prn_status
Definition: libcapsdriver-local.h:131
unsigned line_stride
Definition: libcapsdriver-local.h:151
struct caps_rasterizer * rstr
Definition: libcapsdriver-local.h:138
enum caps_colour_format emulate
Definition: libcapsdriver-local.h:149
unsigned busy_due_to_printing
Definition: libcapsdriver-local.h:136
struct caps_pp_handle * pc
Definition: libcapsdriver-local.h:125
int prn_desc
Definition: libcapsdriver-local.h:130
struct caps_rstr_raster raster_desc
Definition: libcapsdriver-local.h:141
unsigned job_status_set
Definition: libcapsdriver-local.h:145
struct caps_dot_monochrome * mono_buf
Definition: libcapsdriver-local.h:150
void * cb_data
Definition: libcapsdriver-local.h:127
struct caps_pp_document_desc * job_data
Definition: libcapsdriver-local.h:144
FILE * prn_stream
Definition: libcapsdriver-local.h:129
struct caps_ppd_base printer_desc
Definition: libcapsdriver-local.h:134
const struct caps_rstr_page_desc * page
Definition: libcapsdriver-local.h:139
enum halftone_type ht_method
Definition: libcapsdriver-local.h:148
Printer Driver Callback declaration.
Definition: libcapsdriver.h:253
Definition: libcapsprovider-local.h:107
Definition: libcapsprovider-local.h:82
Basic description of common features a printing device/printing driver can provide.
Definition: libcapsppd.h:322
Declare the externally transparent structure for internal use.
Definition: libcapsraster-local.h:423
Definition: libcapsraster-api.h:297
Physical print medium description.
Definition: libcapsraster-api.h:360
Definition: libcapsraster-api.h:504
Monochrome halftone processing.
Definition: halftone-processing.c:103
unsigned cnt
Definition: halftone-processing.c:107