summaryrefslogtreecommitdiffstats
path: root/src/ql.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ql.c')
-rw-r--r--src/ql.c69
1 files changed, 55 insertions, 14 deletions
diff --git a/src/ql.c b/src/ql.c
index 31bd24b..3a94c03 100644
--- a/src/ql.c
+++ b/src/ql.c
@@ -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);
+ }
+}