diff options
Diffstat (limited to 'src/ql.c')
| -rw-r--r-- | src/ql.c | 69 |
1 files changed, 55 insertions, 14 deletions
@@ -128,7 +128,7 @@ bool ql_request_status(ql_ctx_t ctx) return full_write(ctx, status_req); } -bool ql_read_status(ql_ctx_t ctx, ql_status_t * status) +bool ql_read_status(ql_ctx_t ctx, ql_status_t *status) { int retval; fd_set rfds; @@ -200,7 +200,7 @@ bool ql_set_margin(ql_ctx_t ctx, uint16_t dots) return full_write(ctx, cmd); } -bool ql_needs_mode_switch(const ql_status_t * status) +bool ql_needs_mode_switch(const ql_status_t *status) { switch (status->model_code) { case '3': @@ -223,8 +223,8 @@ bool ql_switch_to_raster_mode(ql_ctx_t ctx) return full_write(ctx, cmd); } -static void pack_column(uint8_t * out, uint16_t bytes, uint16_t colno, - const ql_raster_image_t * img, uint8_t black_below_v) +static void pack_column(uint8_t *out, uint16_t bytes, uint16_t colno, + const ql_raster_image_t *img, uint8_t black_below_v) { for (unsigned n = 0; n < bytes; ++n, ++out) { *out = 0; @@ -239,8 +239,8 @@ static void pack_column(uint8_t * out, uint16_t bytes, uint16_t colno, //fprintf(stderr,"\n"); } -bool ql_print_raster_image(ql_ctx_t ctx, const ql_status_t * status, - const ql_raster_image_t * img, const ql_print_cfg_t * cfg) +bool ql_print_raster_image(ql_ctx_t ctx, const ql_status_t *status, + const ql_raster_image_t *img, const ql_print_cfg_t *cfg) { unsigned dn = 90; // default raster transmission block size (720 pixels) if (status->model_code == 'P' || status->model_code == '4') @@ -274,7 +274,7 @@ bool ql_print_raster_image(ql_ctx_t ctx, const ql_status_t * status, return full_write(ctx, done); } -const char *ql_decode_model(const ql_status_t * status) +const char *ql_decode_model(const ql_status_t *status) { switch (status->model_code) { case '1': @@ -307,7 +307,7 @@ const char *ql_decode_model(const ql_status_t * status) } } -const char *ql_decode_mode(const ql_status_t * status) +const char *ql_decode_mode(const ql_status_t *status) { if (status->mode & QL_MODE_AUTOCUT) return "auto-cut"; @@ -315,7 +315,7 @@ const char *ql_decode_mode(const ql_status_t * status) return "no-auto-cut"; } -const char *ql_decode_errors(const ql_status_t * status) +const char *ql_decode_errors(const ql_status_t *status) { typedef struct { uint16_t bit; @@ -362,7 +362,7 @@ const char *ql_decode_errors(const ql_status_t * status) return (buf[0] == 0) ? "none" : buf; } -const char *ql_decode_media_type(const ql_status_t * status) +const char *ql_decode_media_type(const ql_status_t *status) { switch (status->media_type) { case QL_MEDIA_TYPE_NO_MEDIA: @@ -382,11 +382,8 @@ const char *ql_decode_media_type(const ql_status_t * status) } } -void ql_decode_print_status(FILE * f, const ql_status_t * status, unsigned flags) +static void ql_decode_print_status_human(FILE *f, const ql_status_t *status, unsigned flags) { - if (!status) - return; - const char *fmt_s = "%17s: %s\n"; const char *fmt_u = "%17s: %u\n"; if (flags & QL_DECODE_MODEL) @@ -402,3 +399,47 @@ void ql_decode_print_status(FILE * f, const ql_status_t * status, unsigned flags fprintf(f, fmt_u, "Media length (mm)", status->media_length_mm); } } + +static void ql_decode_print_status_json(FILE *f, const ql_print_json_t *json_ctx, + const ql_status_t *status, unsigned flags) +{ + if (!status) + return; + + const char *fmt_s = "\t\"%s\": \"%s\",\n"; + const char *fmt_u = "\t\"%s\": %u,\n"; + bool status_ok = true; + fprintf(f, "{\n"); + fprintf(f, fmt_s, "printer", ql_json_escape(json_ctx->printer)); + if (flags & QL_DECODE_MODEL) + fprintf(f, fmt_s, "model", ql_decode_model(status)); + if (flags & QL_DECODE_MODE) + fprintf(f, fmt_s, "mode", ql_decode_mode(status)); + if (flags & QL_DECODE_ERROR) { + const char *errors = ql_decode_errors(status); + + if (strcmp(errors, "none") != 0) + status_ok = false; + fprintf(f, fmt_s, "errors", ql_decode_errors(status)); + } + if (flags & QL_DECODE_MEDIA) { + fprintf(f, fmt_s, "media_type", ql_decode_media_type(status)); + fprintf(f, fmt_u, "media_width_mm", status->media_width_mm); + if (status->media_type != QL_MEDIA_TYPE_CONTINUOUS) + fprintf(f, fmt_u, "media_length_mm", status->media_length_mm); + } + fprintf(f, "\t\"status\": \"%s\"\n}\n", status_ok ? "ok" : "error"); +} + +void ql_decode_print_status(FILE *f, const ql_status_t *status, + const ql_print_json_t *json_ctx, unsigned flags) +{ + if (!status) + return; + + if (json_ctx->output_json) { + ql_decode_print_status_json(f, json_ctx, status, flags); + } else { + ql_decode_print_status_human(f, status, flags); + } +} |
