- Global _caps_helper_return_directory_fd (const char *default_path, const char *environment_var)
- The file descriptor is opened for read only, which might be not helpful.
- Global _caps_pp_get_priorized_option (const struct caps_inif_table *option_table, const char *section, const char *name)
- Why didn't work the first approach (with "level" = NULL)?
- Global _hl_hbp_mode_medium (FILE *prn, struct hl_job_options *j)
- If j->media_type contains 'ENV', we switch to HBP_ENVELOP_MODE, else to HBP_NORMAL_MODE
- Global _hl_hbp_mode_temperature (FILE *prn, struct hl_job_options *j)
- If j->media_type contains 'THICK'/'ENVTHICK', "THICK2" or "TRANSPARENCY", we switch to HBP_THICK_TYPE, HBP_THICKER_TYPE or HBP_TRANSPARENCY else to HBP_REGULAR_TYPE
- Global adapt_string (const char *param, const char **keyword, const char **value, size_t *keyword_sz)
- How to return a free parameter (without '-' or '–')?
- Page Brother HL Laser Printer Driver Development
- Relation of POWERSAVE and AUTOSLEEP to active, idling and sleep.
- Page Brother QL Label Printers User Manual
- Please drop me a note, if you know other QL printers which provide this feature as well.
- Global c3_line_data_append (struct cm3_line *cline, uint8_t byte)
- This functions is always the same in all encoding methods
- Global c3_line_delta_overflow_append (struct cm3_line *cline, unsigned value)
- Same function like in hl_c1030_overflow_append()
- Page Callback job_start()
Job status updating in case of a failure.
We need to distinguish a bad job from a bad behaviour of the software, e.g just skip the job versus terminating the driver
- Class caps_arg_parser_list
- Mention when to use different values than
stderr and/or stdout for the errorout and out members.
- Global caps_cl_error_messages_catch (struct caps_cl_handle *instance, char **ptr, size_t *size)
- What about more than one error message at the same time?
- Module caps_client_printer_api
From name to ID, what are the IDs?
- Global caps_drv_doc_page_size_get (struct caps_drv *cdrv)
- Would it be useful - if available - to switch to a different print medium? Or strictly follow the user's selection? Example: Document with mixed page sizes (A4 / A3), user has selected A4. When printing,the driver could use the available A3 medium if the document's current page is of this format. And use the A4 for all other pages. I think, this would be an unexpected driver behaviour.
- Global caps_drv_emulation_setup (struct caps_drv *cdrv)
- Think about to free the raw raster, when the emulated raster has been created. This might conflict with printing more than one copies of the current page!
- Global caps_drv_print_medium_default_setup (struct caps_drv *cdrv)
- Add info what info will be set and used.
- Global caps_drv_print_medium_margins_set (struct caps_drv *cdrv, struct caps_area margins)
Add images for the results when fittopage is used
Add link to the printing parameter
- Global caps_drv_print_medium_size_set (struct caps_drv *cdrv, struct caps_rect page_size)
Add images for the results when fittopage is used
Add link to the printing parameter
- Global caps_drv_printer_check (struct caps_drv *drvi)
According to the kernel documentation, the 'LPCAREFUL' feature is enabled by default. This would mean, we receive an error, if we send some data to the printer while it is in error state.
Add more state to this routine. At power up (initialization phase) of the printer it reports a printer in "power down" mode. Which isn't true.
When a print job is done (from the driver's point of view) it reports the printer is in "power down" mode again, since it seems not printing at this time (but reports it is still busy).
- Global caps_drv_printer_open (struct caps_drv *cdrv, const char *dev_node)
- Comment is outdated!
- Global caps_drv_printer_tweak_status (struct caps_drv *drvi)
- Error handling!
- Global caps_helper_file_name_validate (const char *file_name)
Could be a global function for other modules to validate filenames at their "border"
The max length of a filename depends on the underlying filesystem
- Class caps_job_progression
- Add timestamp
- Global caps_kv_cleanup (struct caps_kv_table *kvt)
run-time check
needs locking!!!!
- Global caps_kv_duplicate (struct caps_kv_table *dst, const struct caps_kv_table *src)
source table needs locking!!!!
run-time check
run-time check
- Global caps_kv_init (struct caps_kv_table *kvt)
- run-time check
- Global caps_kv_key_value_add (struct caps_kv_table *kvt, const char *key, const char *value)
run-time check
run-time check
needs locking!!!!
- Global caps_kv_keys_value_get (const struct caps_kv_table *kvt, const char *key)
run-time check
run-time check
- Global caps_kv_keys_value_set (struct caps_kv_table *kvt, const char *key, const char *val)
run-time check
run-time check
needs locking!!!!
- Global caps_kv_raw_entry_get (const struct caps_kv_table *kvt, size_t entry, const char **key, const char **val)
run-time check
run-time check
run-time check
- Global caps_pp_instance_runtime_param_get (struct caps_pp_handle *instance, const char *section, const char *name)
- Add link to a section explaining what run-time configuration means
- Global caps_pp_job_parameter_get (struct caps_pp_document_desc *job)
- Add info how to deal with these parameters, and what happens with them until the job starts to be processed by the driver
- Class caps_ppd_option
- The "const char *" is useless, due to strdup()!
- Global caps_ppd_paper_leading_edges
- Refer struct caps_rstr_page and the line directions.
- Global caps_prn_check_printer (const struct usb_printer *prn, struct caps_inif_table *db)
- Print at info level the device specific INI file including its path and the content of this file? This would be helpful for the user (else the documentation is very complicated).
- Global caps_prn_create_run_time_database (char *devices_database_path)
- The open() and chown() operation must be atomic (or should?)!
- Global caps_prn_exec (const char *executable, const char *descr_ini, const char *param_dir, const char *options)
Replace the process's name by the printer driver from the journald point of view. Else, the printer driver is still 'caps-printer' in the journal.
Clean up the environment and use execve() to launch the driver executable
- Global caps_prn_get_printer_device_database_locked (struct caps_inif_table *db)
- Check if CAPS Printer Device Database Directory exists and output a useful error message if not
- Global caps_prn_get_printer_device_description (const struct caps_inif_table *db, const char *section, struct caps_prn_printer_description *desc)
We do support nothing else than USB printers, yet
This functionname should show we work with the persistent printer database -> run-time database
Error handling. Print correct missing entry if any!
- Global caps_prn_get_useful_default_name (const struct usb_printer *prn)
- None of the returned strings should embed a whitespace!
- Global caps_prn_print_verbose_printer_message (const struct usb_printer *prn)
Use the libusb DEVICE ID database ("/usr/share/misc/usb.ids") to output better Vendor and Device information.
Check what the tool 'usb_printerid' is
Avoid duplicate code, refer caps_prn_print_verbose_printer_message() in caps-printer.c
- Module caps_raster_ipp_parameter
- It makes sense as well if the document is larger and should be printed differently than centered!
- Global caps_rstr_predictive_size_get (struct caps_rasterizer *rstr, struct caps_rect size, struct caps_rect *psize)
- Do the calculation of the missed edge on the printer parameters
- Global caps_si_error_messages_catch (struct caps_si_handle *h, char **ptr, size_t *size)
- What about more than one error message at the same time?
- Global caps_user_class
- Add references to the corresponding INI files runtime_configuration_class_merge_in()
- Global check_one_edge (double has, double expected)
- The margin might be a candidate to be defined in an INI file?
- Global CL_INTRODUCTION_METHOD
- missing provider methods job control: cancel a job
- Global client_signal_dispatch (DBusConnection *connection, DBusMessage *message, void *data)
- Who needs to free the
message ?
- Global COMPRESS_SAMPLE_SIZE
Find out why 1024 fails so badly.
1025 looked good, because of a bug in the test reference routine. It was as bad as 1024.
- Global coord_job_data_get (struct coord_comm *instance, caps_identifier pr_id, caps_identifier job_id, int *job_fh, char **job_params)
- pr_id is redundant due to a job ID is already assigned to one printer
- Global coord_job_mark_finished (struct coord_comm *instance, caps_identifier pr_id, caps_identifier job_id)
- pr_id is redundant due to a job ID is already assigned to one printer
- Global coord_job_progress_report (struct coord_comm *instance, caps_identifier pr_id, caps_identifier job_id, const struct caps_job_progression *prog)
- pr_id is redundant due to a job ID is already assigned to one printer
- Global coord_job_state_set (struct coord_comm *instance, caps_identifier pr_id, caps_identifier job_id, enum caps_printing_job_state state_id, enum caps_printing_job_reason state_reason_id, const char *state_message)
- pr_id is redundant due to a job ID is already assigned to one printer
- Global coord_printer_id_create (struct coord_comm *instance, caps_identifier *pr_id)
- rename it -> printing_provider_id or similar
- Global create_invisible_temp_file_standard (int *file)
- If the unlink (e.g. hiding) fails: should it be an error?
- Global create_worker_thread (void *param)
- Fix exit() usage in create_worker_thread()
- Global dbus_bus_type_detect (void)
- Move this documentation to a global section.
- Global dbus_client_send_job_change_notifier (DBusConnection *connection, caps_identifier pr_id, caps_identifier job_id, const struct object_state_job *jstate, const struct object_progression_job *jprog)
- Assemble a notifier message with only required members to limit its size.
- Global dbus_commit_printing_job (DBusConnection *connection, DBusMessage *message, struct caps_coordinator *database)
- What happens to the jobfh, if it isn't used due to an error?
- Global dbus_coordinator_loop (void *handle, volatile sig_atomic_t *quit)
- If 10 seconds no printing provider is connected, terminate this loop
- Global dbus_get_printers_info_dispatch (DBusConnection *connection, DBusMessage *message, struct caps_coordinator *database)
- Deal with the fact, the printer in question doesn't exist (anymore)
- Global dbus_get_printers_PPD_dispatch (DBusConnection *connection, DBusMessage *message, struct caps_coordinator *database)
- How to return a real error value? And how to return an invalid file handle?
- Global dentry_merge_to_left (struct dlist_entry *left, struct dlist_entry *right)
- Create the dentry_merge_to_right() counterpart
- Global distribute_client_messages (DBusConnection *connection, DBusMessage *message, struct caps_coordinator *database)
- Mark the connection as invalid: it seems the client cannot really communicate with us
- Global dlist_create (size_t length, const uint8_t line[length], const uint8_t ref[length])
- If the equality of both lines are a repeating pattern, it's maybe better to change its type into a DLIST_REP type
- Global dlist_overview (size_t length, const uint8_t line[length], const uint8_t ref[length])
- DLIST_EQ and DLIST_REP edits can overlap
- Global dlist_repeat (struct dlist_anchor *anchor, size_t length, const uint8_t line[length], size_t begin)
- Refer repeating_pattern_check_ahead()
- Global drv_spl2_cb_fill (struct band_info *bi, struct caps_drv *drvi, unsigned band_no)
Consider the non-printable offset at the left medium edge (depending on the format, line size and resolution!)
Consider the max. line length (depending on the resolution)
- Global drv_spl2_line_create (size_t dcnt, uint8_t dst[dcnt], size_t scnt, const uint8_t src[scnt], size_t skip)
- Printing real smaller media (A5 for example), needs a different approach, because the print head still requires 4960 dots, but the real content must be centered in the line in this case.
- Global drv_spl2_page_header_write (struct spl2_drv *info, struct caps_drv *drvi, FILE *outstream)
Try to handle the copy feature of this printer. Is it relevant? Is it true, the printer's firmware supports it?
The members .pwidth and .plength carries always the real medium size in dots of the page, but always at 300 DPI (in the original Samsung driver).
- Global drv_spl2_pjl_header_create (FILE *prn_stream, const struct spl2_drv *info)
What is the difference between "PAPERTYPE = OFF" and a real setting?
Do we need to send the powersave time again and again? Or is it somehow persistent? Same for the altitude setting.
- Global dump_ini_table (FILE *file, const struct caps_inif_table *dst)
- dump_ini_table(): add error handling for fprintf().
- Global empty_line (size_t dots_per_line, void *buf, enum caps_colour_format cf)
- Should be optimzed and only wiped out if not already done. Lines at high resolutions can be large! But the driver can modify the data, it is free to do so!
- Global fd_is_valid (int fd)
If the driver was started from within the template service unit, fcntl() always returns a valid file descriptor, even if the printer is already gone.
If the driver was started from within the template service unit, fcntl() always returns a valid file descriptor, even if the printer is already gone.
- Global fraction (double no)
- can lrint() be used here instead?
- Global get_and_output_printers_status (struct caps_cl_handle *instance, const char *printer_device)
- Deal with the -ENODEV return value
- Global get_color_model_name (enum caps_ppd_color_formats cf)
- change to index variant, refer predictable_numerical_value_*()
- Module global_provider_job_api
Add more info how to deal with a job, what print parameters are aso.
- File halftone-processing.c
- The used algorithms are for square dots. If horizontal and vertical resolutions are equal, this is correct. But not, if both resolutions differ (1200 DPI x 600 DPI for example). Dealing with this use case is still a TODO.
- Global hl10_media_type_selections []
- Fill with really supported paper types on the HL10 series.
- Global hl11_media_type_selections []
- Fill with really supported paper types on the HL11 series.
- Global hl12_media_type_selections []
- Fill with really supported paper types on the HL12 series.
- Global hl14_media_type_selections []
- Fill with really supported paper types on the HL14 series.
- Global hl16_media_type_selections []
- Fill with really supported paper types on the HL16 series.
- Global hl18_media_type_selections []
- Fill with really supported paper types on the HL18 series.
- Global hl1_printer_setup (struct hl1_drv *t1)
Test, if these settings are valid as long as the printer is online, or if a PCL "\eE" reset command resets these settings as well (and thus, they must be repeated again and again).
Have the HL1 series the same power management like the HL2 family has?
- Global hl2_printer_setup (struct hl2_drv *t1)
Test, if these settings are valid as long as the printer is online, or if a PCL "\eE" reset command resets these settings as well (and thus, they must be repeated again and again).
Have the HL1 series the same power management like the HL2 family has?
- Global hl_c1027_sequence_append (struct cm1027_line *c, const uint16_t *pattern, size_t cnt)
- Do we need to keep the pattern as is? Or do we need to honor the endianess here as well?
- Global hl_econo_mode_selections []
- What do the numbers mean?
- Global hl_encoding_repeat_byte (unsigned count, unsigned data)
- What does a count == 0 mean?
- Global hl_encoding_repeat_word (unsigned count)
- What does count == 0x00 mean?
- Global hl_encoding_vertical (unsigned count)
- What does count == 0x00 mean?
- Global hl_pjl_media_management (FILE *prn, const struct hl_job_options *j)
What about INTRAY*SIZE instead of PAPER ?
What about the media source? SOURCETRAY (AUTO, MPTRAY, TRAY1 …)
What about the manual feed medium size? MPTRAYSIZE
- Global hl_supported_tray_formats []
- Check it against the HL-1xxx printer manuals
- Global ht_drain (struct drv_halftone_converter *ht)
- Better '0' for "read a dithered line…" and -ENODATA for "finished"?
- Global ipp_crop_fit (struct document_desc *job, const char *value)
Maybe ipp_page_fit_negative() can be re-used here
What is the user's expectation if he sets crop-to-fit=false ?
- Global ipp_get_orientation_value (struct document_desc *job, const char *value)
- How is it really meant?
- Global ipp_get_page_range_value (struct document_desc *job, const char *string)
Sorting the list might be a really bad idea! Think of manually double sided printing! In this case you need to setup the intended order! Provide a INI file option to select the user's choice
the string can also be of the form: 1-4,7,9-12
- Global ipp_get_resolution_value (struct document_desc *job, const char *value)
- Is it worth to support values like '300 x 600 DPI'?
- Global ipp_page_fit_negative (struct document_desc *job, const char *value)
- Are 'nofitplot' and 'nofit-to-page' are meant the same?
- Global ipp_scale_fit (struct document_desc *job, const char *value)
Maybe ipp_page_fit_positive() can be re-used here
What is the user's expectation if he sets scale-to-fit=false ?
- Global is_fd_valid (int fd)
- If the driver was started from within the template service unit, fcntl() always returns a valid file descriptor, even if the printer is already gone.
- Global job_page_count_calculate (struct document_desc *job, unsigned pgs)
- Honor duplex print which is differently ("pages" versus "media")
- Global layer []
Add docs for the caps_user_class symbols and the corresponding INI file, link it to enum caps_user_class documentation and vice versa.
CAPS_CLSS_COORDINATOR and CAPS_CLSS_SERVICE aren't used here!'
Add docs for the caps_user_class symbols and the corresponding INI file, link it to enum caps_user_class documentation and vice versa.
- Global LENGTH_OF_DESCRIPTION
- How long can be a 'description'?
- Global LENGTH_OF_VALUE
- How long can be a 'value'? -> multi line!
- File libcapsppd-scanner.c
Handle hex characters (e.g. "<[\t :digit:abcdefABCDEF]+>")
"Newlines may occur and should be ignored, except in translation strings,
where they are illegal."
Handle "*?" keywords
- Global LINES_IN_ONE_BAND
- It seems there are printers which only support 64 lines
- Global list_ini_files_in_dir (const char *dir, struct dirent ***e, size_t *cnt)
Grump when the directory is empty
Be able to say what kind of INI files where expected in the directory. Currently the error message is for the base INI files the same than for the printer's INI files!
- Global lp_average (struct drv_halftone_converter *ht)
- Can make use of vector processing as well.
- Global lp_jjndiffusion_lr (struct drv_halftone_converter *ht)
- Distribute the skipped error at both borders.
- Global lp_jjndiffusion_rl (struct drv_halftone_converter *ht)
- Distribute the skipped error at both borders.
- Global MAX_UNCOMPRESSED_BYTES
- It seems there are printers which only support 64 bytes
- Global medium_format_name_and_size_adapt (struct caps_rstr_page_desc *pg_desc)
- How does the rasterizer interact, if its reported values get modified this way?
- Global ml1640_driver_job_finish (struct caps_drv *drvi, void *d)
- Called as well if the current job should be terminated! Keep track of the printer state!
- Global ml1640_driver_job_setup (struct caps_drv *drvi, void *d)
Up to a width of 204 mm there is no real margin required since the OPC drum covers the full width
Letter (216 mm) has a hard left margin of about 6 mm
A4 (210 mm) has a hard left margin of about 3 mm. No! 6 mm as well Everything starts with an offset of 6 mm, but the start position moves with the SPL_*_TYPE sent to the printer. E.g. with SPL_LETTER_TYPE the start moves about 3 mm to left compared to SPL_DINA4_TYPE, but still 6 mm away from the left Letter paper egde. Same for SPL_DINA4_TYPE. Thus, there is no full compensation possible for media wider than about 204 mm, but for smaller media this offset can be compensated.
4960 dots per line are always required! And the content must always be in the horizontal center. All other dots must be off. Thus, we cannot use the libcapsrster/libcapsdriver capability, since they can align smaller pages on a larger medium differently.
- Global mupdf_init (struct caps_rasterizer *rstr)
Antialiasing settings should follow INI file setting.
What are the limits of muPDF (regarding caps_rstr_page_limits)?
- Global mupdf_page_get_next (struct caps_rasterizer *rstr)
- Ask libpaper for the medium format name and report its exact size instead (already done in the main library after calling this function)
- Global output_printers_ppd (struct caps_cl_handle *instance, const char *printer_device, const char *printer_ppd)
- Deal with the -ENODEV return value
- Global page_auto_rotation_fit (struct internal_adaption *i, const struct caps_rstr_page *medium)
- Create some images to explain
- Global page_auto_rotation_straight (struct internal_adaption *i, const struct caps_rstr_page *medium)
- Create some images to explain
- Global page_rotation_guess (struct internal_adaption *i, const struct caps_rstr_page *medium, unsigned fit)
- Do we need to honor fit_to_page or fit_to_imageable_area here?
- Global page_rotation_on_orientation (struct internal_adaption *i, const struct caps_rstr_page *medium, enum caps_rstr_orientation orient)
- Do we need to honor fit_to_page or fit_to_imageable_area here?
- Global page_setup (struct document_desc *job, struct raster_adapt_preparation *setup, const struct caps_rstr_page *page)
- Deal with fidelity
- Global par_threads_autodetection (unsigned tcnt)
- move to libcapsdriver!
- Global parse_ini_file (FILE *file, struct caps_inif_table *dst, const char *level, int(*entry)(struct caps_inif_table *dst, const char *level, const char *section, const char *key, const char *val))
Add support for boolean parameters (e.g. keywords without an rvalue)
Remove size restrictions for line length and name length
- Global parsers_parameter_output (const struct caps_arg_parser_list *plist)
Beautify the output
Sort the output. Options first, parameters second
- Global pc_client_printer_list_get (struct caps_coordinator *database, caps_identifier **list, unsigned *cnt)
- should be of type 'size_t'
- Global pc_provider_job_get (struct caps_coordinator *database, unsigned property, caps_identifier pr_id, caps_identifier job_id, int *fh, const char **parameter)
- It seems a bad idea to unqueue a job in two steps, instead of one in an atomic manner. pc_provider_job_id_prepare() and pc_provider_job_get() races with pc_client_job_cancel()
- Global pc_provider_job_id_prepare (struct caps_coordinator *database, unsigned property, caps_identifier pr_id)
- It seems a bad idea to unqueue a job in two steps, instead of one in an atomic manner. pc_provider_job_id_prepare() and pc_provider_job_get() races with pc_client_job_cancel()
- Global ppd_fonts (struct caps_printing_device_info *cpdi)
- This is still a 'to be done'
- Global ppd_paper_single_tray (struct caps_printing_device_info *cpdi, const char *default_format, const struct caps_ppd_media_size *coverage)
- first charactor of default_format in uppercase (TODO)
- Global ppd_paper_sizes (struct caps_printing_device_info *cpdi)
PageSize selects the paper tray as well (if known)
PageRegion should be used in conjunction with the manual feed, it does not select any paper tray
DefaultPageRegion can be "Unknown"
ImageableArea depends on portrait or landscape paper entry
DefaultImageableArea can be "Unknown"
MediaType optional, how to define?
default_format shoud contain a string with the first character in uppercase
- Global ppd_printer_base (struct caps_printing_device_info *cpdi, const struct caps_ppd_device_info *prod_info)
- Limit
*ShortNickName to 31 chars
- Global print_printer_provider_info (struct caps_cl_handle *instance, caps_identifier printer_id)
- Deal with the -ENODEV return value
- Global print_rpc_failure (struct caps_cl_handle *instance, DBusMessage *message, const DBusError *error)
- Since an invalid printer ID is a regular use case (and no error), we should suppress a corresponding error message here. A return value of -ENODEV could help the caller to make the correct decisions. Refer dbus_report_unknown_pr_id() for the error message in this case.
- Page Printer Drivers (Admin, Developer)
- This info is outdated regarding libcapsraster versus libcapsdriver
- Global printer_job_get_next_available (const struct caps_printer *printer)
ensure the order of processing (first come, first serve)
Check here, if a different job is still in printing state. This would be a failure.
- Global printer_mime_types_clean (struct caps_printer *printer)
Same features like free_mime_types() in libcapsprovider.c
A copy function for the MIME types can be found in copy_mime_types() in libcapsprovider as well.
- Global printer_setup_ppd_info (struct caps_pp_handle *instance)
- It's unclear about the permissions this file should have. We will forward it to clients and there is only exactly one file in the filesystem.
- Global process_job_parameter (struct document_desc *job, const char *pparams)
- Do some more sanity checks
- Global provider_signal_dispatch (DBusConnection *connection, DBusMessage *message, void *data)
- Related to dbus_message_new_method_call()?
- File ql-dither.c
- Fix the algorithm, due to required clipping! Refer halftone support in libcapsdriver.
- File ql5-series.c
- In case the printer signals an error (via USB status), the driver should read from the printer device's filehandle.
- Global ql_driver_data_send (struct ql_drv *t, size_t count, const void *data, int flush) __wur
- Write a printer emulator instead.
- Global ql_next_colour_line_read (struct ql8_drv *t1, struct halftone_converter *cnv_black, struct halftone_converter *cnv_red)
- The input raster can be smaller than the required line width. In this case the labels are smaller (for example) and the raster must be right aligned.
- Global ql_notification_disable (struct ql_drv *t)
- But it would be useful to have a back channel!
- Global ql_page_header_generate (struct ql_drv *t, int first_page) __wur
Deal with QL_FAST_PRINT/QL_QUALITY_PRINT for monochrome use case
Do the QL_QUALITY_PRINT and QL_HIGH_RESOLUTION bits depend on each other?
Deal with auto cut setting and when to cut (and if the printer has a cutter). To make it simple: only "cut at end" and "cut each" should be supported
- Global quantize_grey_pixel (const struct halftone_converter *cnv, signed int v)
- Ensure the returned value fits into a 'signed short'
- Class raster_adapt_preparation
- This structure should replace the caps_rstr_page parameter for the rasterizer's mupdf_page_rasterize() call
- Global read_ppd_file (struct caps_ppd_options_table *pot, struct ppd_file *ppd_d)
- Count the various line terminations only once per line
- Global read_quoted_string (struct ppd_file *ppd_d, int quote)
Should a '\n' be part of the resulting string or be skipped?
Fix line counting here!
- Global runtime_configuration_apply_init (const struct caps_inif_table *runtime_config)
- Remove the priority handling from here and implement it in libcapsdriver instead.
- Global runtime_configuration_class_merge_in (struct caps_inif_table *runtime_config, enum caps_user_class clss)
Currently the already collected configuration gets removed if it fails to merge the class INI content
The error message needs more details: Why/What/What now?
Currently the already collected configuration gets removed if it fails to merge the class INI content
The error message needs more details: Why/What/What now?
- Global runtime_configuration_package_merge_in (struct caps_inif_table *runtime_config, const char *package)
Currently the already collected configuration gets removed if it fails to merge the package's INI content
The error message needs more details: Why/What/What now?
Currently the already collected configuration gets removed if it fails to merge the package's INI content
The error message needs more details: Why/What/What now?
- Page Samsung SPL2 Laser Printer Driver Development
- Does it make a difference regarding printing, if the printer gets a PJL command of the form
SET PAPERTYPE=OFF instead of a corresponding format name?
- File samsung-spl2-ml-1640-2240.c
- Cancel the current job, if a paper jam happens and 'jam_recovery' is set to 'true'!
- File samsung-spl2-mono-algo-0x11.c
Count zero bits in all bands of a paper to calculate the print coverage
Check https://en.wikipedia.org/wiki/Burrows%E2%80%93Wheeler_transform for a better algorithm.
- Global samsung_ml1640_printable_margins
Defining custom media is a way here to define individual margins per medium.
If the loaded medium is defined (e.g. no different selection in the PPD possible) the margins should be adapted here as well
- Global samsung_spl2_adapt_jam_recovery (struct caps_drv *drvi, struct spl2_drv *info)
- Generic function for all ML printers and thus, can be moved to samsung-spl2-series.c?
- Global samsung_spl2_adapt_paper_name (struct caps_drv *drvi)
- If Letter or A4 is selected in a static manner via INI file, it would be possible to adapt the margins according to the selected format and the strange mechanical behavior of the printer device.
- Global samsung_spl2_adapt_paper_type (struct caps_drv *drvi)
- If the user does not set any paper type in the INI files, a regular paper type list will be part of the PPD, to let the user select one of it.
- Global samsung_spl2_adapt_resolution (struct caps_drv *drvi, struct spl2_drv *info)
- This function is generic to all ML printers and can be moved to samsung-spl2-series.c
- Global scale_with_aspect_ratio (struct internal_adaption *i, int rotation)
- Think about predicable rounding the scale values.
- Global setup_watches (struct caps_cl_handle *instance)
How does it really work?
https://stackoverflow.com/questions/9378593/dbuswatch-and-dbustimeout-examples
- File si-common.c
- This is a copy of a file from the caps-printing-coordinator. Find a better solution
- Global simplex_simple (struct document_desc *job)
- Can be replaced by simplex_collating_next_page() with rstr_print_state::copies_to_be_done == '1' when tests for this feature are available.
- Global simplex_with_copies (struct document_desc *job)
- Keep the raster for each copy
- Global sort_range_list (struct caps_var_table *tab)
- It is a really bad idea to sort this list! Keep it as is for manual duplex print.
- Global spread_options (char *options, size_t *cnt)
- spread_options() still needs to sort out invalid options for the printer driver
- Global state_message_translate (struct caps_pp_handle *instance, const char *string)
- Add a list of common shared messages. Refer caps_pp_state_update() and caps_pp_job_state_update()
- Page The Idea behind libcapsppd
- Add example.
- Page USB Printer Driver Start
- Give a hint, where to find the corresponding INI file to adapt these
name and location settings.
- Class usb_printer
- This is an import from libcapsusb.h. It should have its own namespace her
- Page User's Manual
- How to get the CAPS Printer Device Parameter Directory of a specific printer? Should be in a library!
- Global whitespace_less (const char *string)
- Find an optimized way from the str* family of functions
- Global worker_thread (void *p)
- glibc-2.36 comes with a new function to set the mask when creating a thread. Make use of it.