test-devcaps: works for WSD

This commit is contained in:
Alexander Pevzner
2024-05-29 23:49:30 +03:00
parent 565f3095ab
commit f82c95191b
5 changed files with 43 additions and 29 deletions
+23 -17
View File
@@ -156,22 +156,28 @@ devcaps_reset (devcaps *caps)
}
/* Dump device capabilities, for debugging
*
* The 3rd parameter, 'trace' configures the debug level
* (log_debug vs log_trace) of the generated output
*/
void
devcaps_dump (log_ctx *log, devcaps *caps)
devcaps_dump (log_ctx *log, devcaps *caps, bool trace)
{
int i;
char *buf = str_new();
void (*log_func) (log_ctx *log, const char *fmt, ...);
log_trace(log, "===== device capabilities =====");
log_trace(log, " Size units: %d DPI", caps->units);
log_trace(log, " Protocol: %s", caps->protocol);
log_func = trace ? log_trace : log_debug;
log_func(log, "===== device capabilities =====");
log_func(log, " Size units: %d DPI", caps->units);
log_func(log, " Protocol: %s", caps->protocol);
if (caps->compression_ok) {
log_trace(log, " Compression min: %d", caps->compression_range.min);
log_trace(log, " Compression max: %d", caps->compression_range.max);
log_trace(log, " Compression step: %d", caps->compression_range.quant);
log_trace(log, " Compression norm: %d", caps->compression_norm);
log_func(log, " Compression min: %d", caps->compression_range.min);
log_func(log, " Compression max: %d", caps->compression_range.max);
log_func(log, " Compression step: %d", caps->compression_range.quant);
log_func(log, " Compression norm: %d", caps->compression_norm);
}
str_trunc(buf);
@@ -184,7 +190,7 @@ devcaps_dump (log_ctx *log, devcaps *caps)
}
}
log_trace(log, " Sources: %s", buf);
log_func(log, " Sources: %s", buf);
ID_SOURCE id_src;
for (id_src = (ID_SOURCE) 0; id_src < NUM_ID_SOURCE; id_src ++) {
@@ -195,19 +201,19 @@ devcaps_dump (log_ctx *log, devcaps *caps)
continue;
}
log_trace(log, "");
log_trace(log, " %s:", id_source_sane_name(id_src));
log_func(log, "");
log_func(log, " %s:", id_source_sane_name(id_src));
math_fmt_mm(math_px2mm_res(src->min_wid_px, caps->units), xbuf);
math_fmt_mm(math_px2mm_res(src->min_hei_px, caps->units), ybuf);
log_trace(log, " Min window: %dx%d px, %sx%s mm",
log_func(log, " Min window: %dx%d px, %sx%s mm",
src->min_wid_px, src->min_hei_px, xbuf, ybuf);
math_fmt_mm(math_px2mm_res(src->max_wid_px, caps->units), xbuf);
math_fmt_mm(math_px2mm_res(src->max_hei_px, caps->units), ybuf);
log_trace(log, " Max window: %dx%d px, %sx%s mm",
log_func(log, " Max window: %dx%d px, %sx%s mm",
src->max_wid_px, src->max_hei_px, xbuf, ybuf);
if (src->flags & DEVCAPS_SOURCE_RES_DISCRETE) {
@@ -219,7 +225,7 @@ devcaps_dump (log_ctx *log, devcaps *caps)
buf = str_append_printf(buf, "%d", src->resolutions[i+1]);
}
log_trace(log, " Resolutions: %s", buf);
log_func(log, " Resolutions: %s", buf);
}
str_trunc(buf);
@@ -233,7 +239,7 @@ devcaps_dump (log_ctx *log, devcaps *caps)
}
}
log_trace(log, " Color modes: %s", buf);
log_func(log, " Color modes: %s", buf);
str_trunc(buf);
@@ -246,11 +252,11 @@ devcaps_dump (log_ctx *log, devcaps *caps)
}
}
log_trace(log, " Formats: %s", buf);
log_func(log, " Formats: %s", buf);
}
mem_free(buf);
log_trace(log, "");
log_func(log, "");
}
/* vim:ts=8:sw=4:et
+1 -1
View File
@@ -609,7 +609,7 @@ device_scanner_capabilities_callback (void *ptr, http_query *q)
goto DONE;
}
devcaps_dump(dev->log, &dev->opt.caps);
devcaps_dump(dev->log, &dev->opt.caps, true);
devopt_set_defaults(&dev->opt);
/* Update endpoint address in case of HTTP redirection */
+7 -9
View File
@@ -529,6 +529,11 @@ wsd_devcaps_parse (proto_handler_wsd *wsd,
xml_rd *xml;
bool found_configuration = false;
/* Fill "constant" part of device capabilities */
caps->units = 1000;
caps->protocol = wsd->proto.name;
caps->justification_x = caps->justification_y = ID_JUSTIFICATION_UNKNOWN;
/* Parse capabilities XML */
err = xml_rd_begin(&xml, xml_text, xml_len, wsd_ns_rd);
if (err != NULL) {
@@ -576,10 +581,6 @@ wsd_devcaps_decode (const proto_ctx *ctx, devcaps *caps)
http_data *data = http_query_get_response_data(ctx->query);
error err;
caps->units = 1000;
caps->protocol = ctx->proto->name;
caps->justification_x = caps->justification_y = ID_JUSTIFICATION_UNKNOWN;
err = wsd_devcaps_parse(wsd, caps, data->bytes, data->size);
return err;
@@ -1164,12 +1165,9 @@ wsd_test_decode_devcaps (proto_handler *proto,
const void *xml_text, size_t xms_size,
devcaps *caps)
{
(void) proto;
(void) xml_text;
(void) xms_size;
(void) caps;
proto_handler_wsd *wsd = (proto_handler_wsd*) proto;
return ERROR("not implemented");
return wsd_devcaps_parse(wsd, caps, xml_text, xms_size);
}
/* proto_handler_wsd_new creates new WSD protocol handler
+4 -1
View File
@@ -2716,9 +2716,12 @@ void
devcaps_reset (devcaps *caps);
/* Dump device capabilities, for debugging
*
* The 3rd parameter, 'trace' configures the debug level
* (log_debug vs log_trace) of the generated output
*/
void
devcaps_dump (log_ctx *log, devcaps *caps);
devcaps_dump (log_ctx *log, devcaps *caps, bool trace);
/******************** Device options ********************/
/* Scan options
+8 -1
View File
@@ -88,6 +88,11 @@ main (int argc, char **argv)
fclose(fp);
/* Initialize logging */
conf.dbg_enabled = true;
log_init();
log_configure();
/* Decode device capabilities */
memset(&caps, 0, sizeof(caps));
devcaps_init(&caps);
@@ -97,9 +102,11 @@ main (int argc, char **argv)
die("error: %s", ESTRING(err));
}
devcaps_dump(NULL, &caps, false);
/* Cleanup and exit */
proto_handler_free(proto);
free(data);
mem_free(data);
return 0;
}