1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
2 *
3 * Copyright (C) 2013 Richard Hughes <richard@hughsie.com>
4 *
5 * Licensed under the GNU General Public License Version 2
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20 */
21
22 /**
23 * SECTION:dtp94-enum
24 * @short_description: Types used by dtp94 and libdtp94
25 *
26 * These helper functions provide a way to marshal enumerated values to
27 * text and back again.
28 *
29 * See also: #CdClient, #CdDevice
30 */
31
32 #include "config.h"
33
34 #include <glib.h>
35
36 #include "dtp94-enum.h"
37
38 /**
39 * dtp94_rc_parse:
40 *
41 * Since: 0.1.29
42 **/
43 guint8
dtp94_rc_parse(const guint8 * data,gsize length)44 dtp94_rc_parse (const guint8 *data, gsize length)
45 {
46 gchar *endptr = NULL;
47 guint64 tmp = DTP94_RC_UNKNOWN;
48
49 /* invalid data */
50 if (length < 4 ||
51 data[0] != '<' ||
52 data[1] == '\0' ||
53 data[2] == '\0' ||
54 data[3] != '>') {
55 return tmp;
56 }
57
58 /* parse number */
59 tmp = g_ascii_strtoull ((const gchar *) data + 1, &endptr, 16);
60 if (endptr == (const gchar *) data + 1)
61 return tmp; // valid?
62 return tmp;
63 }
64
65 /**
66 * dtp94_rc_to_string:
67 *
68 * Since: 0.1.29
69 **/
70 const gchar *
dtp94_rc_to_string(guint8 value)71 dtp94_rc_to_string (guint8 value)
72 {
73 if (value == DTP94_RC_OK)
74 return "ok";
75 if (value == DTP94_RC_BAD_COMMAND)
76 return "bad-command";
77 if (value == DTP94_RC_PRM_RANGE)
78 return "prm-range";
79 if (value == DTP94_RC_MEMORY_OVERFLOW)
80 return "memory-overflow";
81 if (value == DTP94_RC_INVALID_BAUD_RATE)
82 return "invalid-baud-rate";
83 if (value == DTP94_RC_TIMEOUT)
84 return "timeout";
85 if (value == DTP94_RC_SYNTAX_ERROR)
86 return "syntax-error";
87 if (value == DTP94_RC_NO_DATA_AVAILABLE)
88 return "no-data-available";
89 if (value == DTP94_RC_MISSING_PARAMETER)
90 return "missing-parameter";
91 if (value == DTP94_RC_CALIBRATION_DENIED)
92 return "calibration-denied";
93 if (value == DTP94_RC_NEEDS_OFFSET_CAL)
94 return "needs-offset-cal";
95 if (value == DTP94_RC_NEEDS_RATIO_CAL)
96 return "needs-ratio-cal";
97 if (value == DTP94_RC_NEEDS_LUMINANCE_CAL)
98 return "needs-luminance-cal";
99 if (value == DTP94_RC_NEEDS_WHITE_POINT_CAL)
100 return "needs-white-point-cal";
101 if (value == DTP94_RC_NEEDS_BLACK_POINT_CAL)
102 return "needs-black-point-cal";
103 if (value == DTP94_RC_INVALID_READING)
104 return "invalid-reading";
105 if (value == DTP94_RC_BAD_COMP_TABLE)
106 return "bad-comp-table";
107 if (value == DTP94_RC_TOO_MUCH_LIGHT)
108 return "too-much-light";
109 if (value == DTP94_RC_NOT_ENOUGH_LIGHT)
110 return "not-enough-light";
111 if (value == DTP94_RC_BAD_SERIAL_NUMBER)
112 return "bad-serial-number";
113 if (value == DTP94_RC_NO_MODULATION)
114 return "no-modulation";
115 if (value == DTP94_RC_EEPROM_FAILURE)
116 return "eeprom-failure";
117 if (value == DTP94_RC_FLASH_WRITE_FAILURE)
118 return "flash-write-failure";
119 if (value == DTP94_RC_INST_INTERNAL_ERROR)
120 return "inst-internal-error";
121 return NULL;
122 }
123