A streamlined version (for embedded use) of Jeff Brown's ZBar library. Visit <http://zbar.sourceforge.net> for more details.

Dependents:   BarcodeReader_F103

Committer:
hudakz
Date:
Fri Jan 10 22:06:18 2020 +0000
Revision:
1:4f5c042a2d34
Parent:
0:e33621169e44
Streamlined barcode reader library.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hudakz 0:e33621169e44 1 /*------------------------------------------------------------------------
hudakz 0:e33621169e44 2 * Copyright 2007-2009 (c) Jeff Brown <spadix@users.sourceforge.net>
hudakz 0:e33621169e44 3 *
hudakz 0:e33621169e44 4 * This file is part of the ZBar Bar Code Reader.
hudakz 0:e33621169e44 5 *
hudakz 0:e33621169e44 6 * The ZBar Bar Code Reader is free software; you can redistribute it
hudakz 0:e33621169e44 7 * and/or modify it under the terms of the GNU Lesser Public License as
hudakz 0:e33621169e44 8 * published by the Free Software Foundation; either version 2.1 of
hudakz 0:e33621169e44 9 * the License, or (at your option) any later version.
hudakz 0:e33621169e44 10 *
hudakz 0:e33621169e44 11 * The ZBar Bar Code Reader is distributed in the hope that it will be
hudakz 0:e33621169e44 12 * useful, but WITHOUT ANY WARRANTY; without even the implied warranty
hudakz 0:e33621169e44 13 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
hudakz 0:e33621169e44 14 * GNU Lesser Public License for more details.
hudakz 0:e33621169e44 15 *
hudakz 0:e33621169e44 16 * You should have received a copy of the GNU Lesser Public License
hudakz 0:e33621169e44 17 * along with the ZBar Bar Code Reader; if not, write to the Free
hudakz 0:e33621169e44 18 * Software Foundation, Inc., 51 Franklin St, Fifth Floor,
hudakz 0:e33621169e44 19 * Boston, MA 02110-1301 USA
hudakz 0:e33621169e44 20 *
hudakz 0:e33621169e44 21 * http://sourceforge.net/projects/zbar
hudakz 0:e33621169e44 22 *------------------------------------------------------------------------*/
hudakz 0:e33621169e44 23 #include <config.h>
hudakz 0:e33621169e44 24 #include <stdlib.h> /* malloc, calloc, free */
hudakz 0:e33621169e44 25
hudakz 0:e33621169e44 26 #include <stdio.h> /* snprintf */
hudakz 0:e33621169e44 27
hudakz 0:e33621169e44 28 #include <string.h> /* memset, strlen */
hudakz 0:e33621169e44 29
hudakz 0:e33621169e44 30 #include <zbar.h>
hudakz 0:e33621169e44 31 #include "decoder.h"
hudakz 0:e33621169e44 32
hudakz 0:e33621169e44 33 #if defined(DEBUG_DECODER) || defined(DEBUG_EAN) || defined(DEBUG_CODE39) || defined(DEBUG_I25) || defined \
hudakz 0:e33621169e44 34 (DEBUG_CODE128) || defined(DEBUG_QR_FINDER) || (defined(DEBUG_PDF417) && (DEBUG_PDF417 >= 4))
hudakz 0:e33621169e44 35 #define DEBUG_LEVEL 1
hudakz 0:e33621169e44 36 #endif
hudakz 0:e33621169e44 37 #include "debug.h"
hudakz 0:e33621169e44 38
hudakz 0:e33621169e44 39 /**
hudakz 0:e33621169e44 40 * @brief
hudakz 0:e33621169e44 41 * @note
hudakz 0:e33621169e44 42 * @param
hudakz 0:e33621169e44 43 * @retval
hudakz 0:e33621169e44 44 */
hudakz 0:e33621169e44 45 zbar_decoder_t* zbar_decoder_create()
hudakz 0:e33621169e44 46 {
hudakz 0:e33621169e44 47 zbar_decoder_t* dcode = calloc(1, sizeof(zbar_decoder_t));
hudakz 0:e33621169e44 48 dcode->buf_alloc = BUFFER_MIN;
hudakz 0:e33621169e44 49 dcode->buf = malloc(dcode->buf_alloc);
hudakz 0:e33621169e44 50
hudakz 0:e33621169e44 51 /* initialize default configs */
hudakz 0:e33621169e44 52 #ifdef ENABLE_EAN
hudakz 0:e33621169e44 53 dcode->ean.enable = 1;
hudakz 0:e33621169e44 54 dcode->ean.ean13_config = ((1 << ZBAR_CFG_ENABLE) | (1 << ZBAR_CFG_EMIT_CHECK));
hudakz 0:e33621169e44 55 dcode->ean.ean8_config = ((1 << ZBAR_CFG_ENABLE) | (1 << ZBAR_CFG_EMIT_CHECK));
hudakz 0:e33621169e44 56 dcode->ean.upca_config = 1 << ZBAR_CFG_EMIT_CHECK;
hudakz 0:e33621169e44 57 dcode->ean.upce_config = 1 << ZBAR_CFG_EMIT_CHECK;
hudakz 0:e33621169e44 58 dcode->ean.isbn10_config = 1 << ZBAR_CFG_EMIT_CHECK;
hudakz 0:e33621169e44 59 dcode->ean.isbn13_config = 1 << ZBAR_CFG_EMIT_CHECK;
hudakz 0:e33621169e44 60 #endif
hudakz 0:e33621169e44 61 #ifdef ENABLE_I25
hudakz 0:e33621169e44 62 dcode->i25.config = 1 << ZBAR_CFG_ENABLE;
hudakz 0:e33621169e44 63 CFG(dcode->i25, ZBAR_CFG_MIN_LEN) = 6;
hudakz 0:e33621169e44 64 #endif
hudakz 0:e33621169e44 65 #ifdef ENABLE_CODE39
hudakz 0:e33621169e44 66 dcode->code39.config = 1 << ZBAR_CFG_ENABLE;
hudakz 0:e33621169e44 67 CFG(dcode->code39, ZBAR_CFG_MIN_LEN) = 1;
hudakz 0:e33621169e44 68 #endif
hudakz 0:e33621169e44 69 #ifdef ENABLE_CODE128
hudakz 0:e33621169e44 70 dcode->code128.config = 1 << ZBAR_CFG_ENABLE;
hudakz 0:e33621169e44 71 #endif
hudakz 0:e33621169e44 72 #ifdef ENABLE_PDF417
hudakz 0:e33621169e44 73 dcode->pdf417.config = 1 << ZBAR_CFG_ENABLE;
hudakz 0:e33621169e44 74 #endif
hudakz 0:e33621169e44 75 #ifdef ENABLE_QRCODE
hudakz 0:e33621169e44 76 dcode->qrf.config = 1 << ZBAR_CFG_ENABLE;
hudakz 0:e33621169e44 77 #endif
hudakz 0:e33621169e44 78 zbar_decoder_reset(dcode);
hudakz 0:e33621169e44 79 return(dcode);
hudakz 0:e33621169e44 80 }
hudakz 0:e33621169e44 81
hudakz 0:e33621169e44 82 /**
hudakz 0:e33621169e44 83 * @brief
hudakz 0:e33621169e44 84 * @note
hudakz 0:e33621169e44 85 * @param
hudakz 0:e33621169e44 86 * @retval
hudakz 0:e33621169e44 87 */
hudakz 0:e33621169e44 88 void zbar_decoder_destroy(zbar_decoder_t* dcode)
hudakz 0:e33621169e44 89 {
hudakz 0:e33621169e44 90 if (dcode->buf)
hudakz 0:e33621169e44 91 free(dcode->buf);
hudakz 0:e33621169e44 92 free(dcode);
hudakz 0:e33621169e44 93 }
hudakz 0:e33621169e44 94
hudakz 0:e33621169e44 95 /**
hudakz 0:e33621169e44 96 * @brief
hudakz 0:e33621169e44 97 * @note
hudakz 0:e33621169e44 98 * @param
hudakz 0:e33621169e44 99 * @retval
hudakz 0:e33621169e44 100 */
hudakz 0:e33621169e44 101 void zbar_decoder_reset(zbar_decoder_t* dcode)
hudakz 0:e33621169e44 102 {
hudakz 0:e33621169e44 103 memset(dcode, 0, (long) &dcode->buf_alloc - (long)dcode);
hudakz 0:e33621169e44 104 #ifdef ENABLE_EAN
hudakz 0:e33621169e44 105 ean_reset(&dcode->ean);
hudakz 0:e33621169e44 106 #endif
hudakz 0:e33621169e44 107 #ifdef ENABLE_I25
hudakz 0:e33621169e44 108 i25_reset(&dcode->i25);
hudakz 0:e33621169e44 109 #endif
hudakz 0:e33621169e44 110 #ifdef ENABLE_CODE39
hudakz 0:e33621169e44 111 code39_reset(&dcode->code39);
hudakz 0:e33621169e44 112 #endif
hudakz 0:e33621169e44 113 #ifdef ENABLE_CODE128
hudakz 0:e33621169e44 114 code128_reset(&dcode->code128);
hudakz 0:e33621169e44 115 #endif
hudakz 0:e33621169e44 116 #ifdef ENABLE_PDF417
hudakz 0:e33621169e44 117 pdf417_reset(&dcode->pdf417);
hudakz 0:e33621169e44 118 #endif
hudakz 0:e33621169e44 119 #ifdef ENABLE_QRCODE
hudakz 0:e33621169e44 120 qr_finder_reset(&dcode->qrf);
hudakz 0:e33621169e44 121 #endif
hudakz 0:e33621169e44 122 }
hudakz 0:e33621169e44 123
hudakz 0:e33621169e44 124 /**
hudakz 0:e33621169e44 125 * @brief
hudakz 0:e33621169e44 126 * @note
hudakz 0:e33621169e44 127 * @param
hudakz 0:e33621169e44 128 * @retval
hudakz 0:e33621169e44 129 */
hudakz 0:e33621169e44 130 void zbar_decoder_new_scan(zbar_decoder_t* dcode)
hudakz 0:e33621169e44 131 {
hudakz 0:e33621169e44 132 /* soft reset decoder */
hudakz 0:e33621169e44 133
hudakz 0:e33621169e44 134 memset(dcode->w, 0, sizeof(dcode->w));
hudakz 0:e33621169e44 135 dcode->lock = 0;
hudakz 0:e33621169e44 136 dcode->idx = 0;
hudakz 0:e33621169e44 137 #ifdef ENABLE_EAN
hudakz 0:e33621169e44 138 ean_new_scan(&dcode->ean);
hudakz 0:e33621169e44 139 #endif
hudakz 0:e33621169e44 140 #ifdef ENABLE_I25
hudakz 0:e33621169e44 141 i25_reset(&dcode->i25);
hudakz 0:e33621169e44 142 #endif
hudakz 0:e33621169e44 143 #ifdef ENABLE_CODE39
hudakz 0:e33621169e44 144 code39_reset(&dcode->code39);
hudakz 0:e33621169e44 145 #endif
hudakz 0:e33621169e44 146 #ifdef ENABLE_CODE128
hudakz 0:e33621169e44 147 code128_reset(&dcode->code128);
hudakz 0:e33621169e44 148 #endif
hudakz 0:e33621169e44 149 #ifdef ENABLE_PDF417
hudakz 0:e33621169e44 150 pdf417_reset(&dcode->pdf417);
hudakz 0:e33621169e44 151 #endif
hudakz 0:e33621169e44 152 #ifdef ENABLE_QRCODE
hudakz 0:e33621169e44 153 qr_finder_reset(&dcode->qrf);
hudakz 0:e33621169e44 154 #endif
hudakz 0:e33621169e44 155 }
hudakz 0:e33621169e44 156
hudakz 0:e33621169e44 157 /**
hudakz 0:e33621169e44 158 * @brief
hudakz 0:e33621169e44 159 * @note
hudakz 0:e33621169e44 160 * @param
hudakz 0:e33621169e44 161 * @retval
hudakz 0:e33621169e44 162 */
hudakz 0:e33621169e44 163 zbar_color_t zbar_decoder_get_color(const zbar_decoder_t* dcode)
hudakz 0:e33621169e44 164 {
hudakz 0:e33621169e44 165 return(get_color(dcode));
hudakz 0:e33621169e44 166 }
hudakz 0:e33621169e44 167
hudakz 0:e33621169e44 168 /**
hudakz 0:e33621169e44 169 * @brief
hudakz 0:e33621169e44 170 * @note
hudakz 0:e33621169e44 171 * @param
hudakz 0:e33621169e44 172 * @retval
hudakz 0:e33621169e44 173 */
hudakz 0:e33621169e44 174 const char* zbar_decoder_get_data(const zbar_decoder_t* dcode)
hudakz 0:e33621169e44 175 {
hudakz 0:e33621169e44 176 return((char*)dcode->buf);
hudakz 0:e33621169e44 177 }
hudakz 0:e33621169e44 178
hudakz 0:e33621169e44 179 /**
hudakz 0:e33621169e44 180 * @brief
hudakz 0:e33621169e44 181 * @note
hudakz 0:e33621169e44 182 * @param
hudakz 0:e33621169e44 183 * @retval
hudakz 0:e33621169e44 184 */
hudakz 0:e33621169e44 185 unsigned int zbar_decoder_get_data_length(const zbar_decoder_t* dcode)
hudakz 0:e33621169e44 186 {
hudakz 0:e33621169e44 187 return(dcode->buflen);
hudakz 0:e33621169e44 188 }
hudakz 0:e33621169e44 189
hudakz 0:e33621169e44 190 /**
hudakz 0:e33621169e44 191 * @brief
hudakz 0:e33621169e44 192 * @note
hudakz 0:e33621169e44 193 * @param
hudakz 0:e33621169e44 194 * @retval
hudakz 0:e33621169e44 195 */
hudakz 0:e33621169e44 196 zbar_decoder_handler_t* zbar_decoder_set_handler(zbar_decoder_t* dcode, zbar_decoder_handler_t handler)
hudakz 0:e33621169e44 197 {
hudakz 0:e33621169e44 198 zbar_decoder_handler_t* result = dcode->handler;
hudakz 0:e33621169e44 199 dcode->handler = handler;
hudakz 0:e33621169e44 200 return(result);
hudakz 0:e33621169e44 201 }
hudakz 0:e33621169e44 202
hudakz 0:e33621169e44 203 /**
hudakz 0:e33621169e44 204 * @brief
hudakz 0:e33621169e44 205 * @note
hudakz 0:e33621169e44 206 * @param
hudakz 0:e33621169e44 207 * @retval
hudakz 0:e33621169e44 208 */
hudakz 0:e33621169e44 209 void zbar_decoder_set_userdata(zbar_decoder_t* dcode, void* userdata)
hudakz 0:e33621169e44 210 {
hudakz 0:e33621169e44 211 dcode->userdata = userdata;
hudakz 0:e33621169e44 212 }
hudakz 0:e33621169e44 213
hudakz 0:e33621169e44 214 /**
hudakz 0:e33621169e44 215 * @brief
hudakz 0:e33621169e44 216 * @note
hudakz 0:e33621169e44 217 * @param
hudakz 0:e33621169e44 218 * @retval
hudakz 0:e33621169e44 219 */
hudakz 0:e33621169e44 220 void* zbar_decoder_get_userdata(const zbar_decoder_t* dcode)
hudakz 0:e33621169e44 221 {
hudakz 0:e33621169e44 222 return(dcode->userdata);
hudakz 0:e33621169e44 223 }
hudakz 0:e33621169e44 224
hudakz 0:e33621169e44 225 /**
hudakz 0:e33621169e44 226 * @brief
hudakz 0:e33621169e44 227 * @note
hudakz 0:e33621169e44 228 * @param
hudakz 0:e33621169e44 229 * @retval
hudakz 0:e33621169e44 230 */
hudakz 0:e33621169e44 231 zbar_symbol_type_t zbar_decoder_get_type(const zbar_decoder_t* dcode)
hudakz 0:e33621169e44 232 {
hudakz 0:e33621169e44 233 return(dcode->type);
hudakz 0:e33621169e44 234 }
hudakz 0:e33621169e44 235
hudakz 0:e33621169e44 236 /**
hudakz 0:e33621169e44 237 * @brief
hudakz 0:e33621169e44 238 * @note
hudakz 0:e33621169e44 239 * @param
hudakz 0:e33621169e44 240 * @retval
hudakz 0:e33621169e44 241 */
hudakz 0:e33621169e44 242 zbar_symbol_type_t zbar_decode_width(zbar_decoder_t* dcode, unsigned w)
hudakz 0:e33621169e44 243 {
hudakz 0:e33621169e44 244 dcode->w[dcode->idx & (DECODE_WINDOW - 1)] = w;
hudakz 0:e33621169e44 245 dprintf(1, " decode[%x]: w=%d (%g)\n", dcode->idx, w, (w / 32.));
hudakz 0:e33621169e44 246
hudakz 0:e33621169e44 247 /* each decoder processes width stream in parallel */
hudakz 0:e33621169e44 248 zbar_symbol_type_t sym = dcode->type = ZBAR_NONE;
hudakz 0:e33621169e44 249
hudakz 0:e33621169e44 250 #ifdef ENABLE_EAN
hudakz 0:e33621169e44 251 if ((dcode->ean.enable) && (sym = _zbar_decode_ean(dcode)))
hudakz 0:e33621169e44 252 dcode->type = sym;
hudakz 0:e33621169e44 253 #endif
hudakz 0:e33621169e44 254 #ifdef ENABLE_CODE39
hudakz 0:e33621169e44 255 if (TEST_CFG(dcode->code39.config, ZBAR_CFG_ENABLE) && (sym = _zbar_decode_code39(dcode)) > ZBAR_PARTIAL)
hudakz 0:e33621169e44 256 dcode->type = sym;
hudakz 0:e33621169e44 257 #endif
hudakz 0:e33621169e44 258 #ifdef ENABLE_CODE128
hudakz 0:e33621169e44 259 if (TEST_CFG(dcode->code128.config, ZBAR_CFG_ENABLE) && (sym = _zbar_decode_code128(dcode)) > ZBAR_PARTIAL)
hudakz 0:e33621169e44 260 dcode->type = sym;
hudakz 0:e33621169e44 261 #endif
hudakz 0:e33621169e44 262 #ifdef ENABLE_I25
hudakz 0:e33621169e44 263 if (TEST_CFG(dcode->i25.config, ZBAR_CFG_ENABLE) && (sym = _zbar_decode_i25(dcode)) > ZBAR_PARTIAL)
hudakz 0:e33621169e44 264 dcode->type = sym;
hudakz 0:e33621169e44 265 #endif
hudakz 0:e33621169e44 266 #ifdef ENABLE_PDF417
hudakz 0:e33621169e44 267 if (TEST_CFG(dcode->pdf417.config, ZBAR_CFG_ENABLE) && (sym = _zbar_decode_pdf417(dcode)) > ZBAR_PARTIAL)
hudakz 0:e33621169e44 268 dcode->type = sym;
hudakz 0:e33621169e44 269 #endif
hudakz 0:e33621169e44 270 #ifdef ENABLE_QRCODE
hudakz 0:e33621169e44 271 if (TEST_CFG(dcode->qrf.config, ZBAR_CFG_ENABLE) && (sym = _zbar_find_qr(dcode)) > ZBAR_PARTIAL)
hudakz 0:e33621169e44 272 dcode->type = sym;
hudakz 0:e33621169e44 273 #endif
hudakz 0:e33621169e44 274 dcode->idx++;
hudakz 0:e33621169e44 275 if (dcode->type) {
hudakz 0:e33621169e44 276 if (dcode->handler)
hudakz 0:e33621169e44 277 dcode->handler(dcode);
hudakz 0:e33621169e44 278 if (dcode->lock && dcode->type > ZBAR_PARTIAL)
hudakz 0:e33621169e44 279 dcode->lock = 0;
hudakz 0:e33621169e44 280 }
hudakz 0:e33621169e44 281
hudakz 0:e33621169e44 282 return(dcode->type);
hudakz 0:e33621169e44 283 }
hudakz 0:e33621169e44 284
hudakz 0:e33621169e44 285 /**
hudakz 0:e33621169e44 286 * @brief
hudakz 0:e33621169e44 287 * @note
hudakz 0:e33621169e44 288 * @param
hudakz 0:e33621169e44 289 * @retval
hudakz 0:e33621169e44 290 */
hudakz 0:e33621169e44 291 static inline int decoder_set_config_bool(zbar_decoder_t* dcode, zbar_symbol_type_t sym, zbar_config_t cfg, int val)
hudakz 0:e33621169e44 292 {
hudakz 0:e33621169e44 293 unsigned* config = NULL;
hudakz 0:e33621169e44 294 switch (sym) {
hudakz 0:e33621169e44 295 #ifdef ENABLE_EAN
hudakz 0:e33621169e44 296
hudakz 0:e33621169e44 297 case ZBAR_EAN13:
hudakz 0:e33621169e44 298 config = &dcode->ean.ean13_config;
hudakz 0:e33621169e44 299 break;
hudakz 0:e33621169e44 300
hudakz 0:e33621169e44 301 case ZBAR_EAN8:
hudakz 0:e33621169e44 302 config = &dcode->ean.ean8_config;
hudakz 0:e33621169e44 303 break;
hudakz 0:e33621169e44 304
hudakz 0:e33621169e44 305 case ZBAR_UPCA:
hudakz 0:e33621169e44 306 config = &dcode->ean.upca_config;
hudakz 0:e33621169e44 307 break;
hudakz 0:e33621169e44 308
hudakz 0:e33621169e44 309 case ZBAR_UPCE:
hudakz 0:e33621169e44 310 config = &dcode->ean.upce_config;
hudakz 0:e33621169e44 311 break;
hudakz 0:e33621169e44 312
hudakz 0:e33621169e44 313 case ZBAR_ISBN10:
hudakz 0:e33621169e44 314 config = &dcode->ean.isbn10_config;
hudakz 0:e33621169e44 315 break;
hudakz 0:e33621169e44 316
hudakz 0:e33621169e44 317 case ZBAR_ISBN13:
hudakz 0:e33621169e44 318 config = &dcode->ean.isbn13_config;
hudakz 0:e33621169e44 319 break;
hudakz 0:e33621169e44 320 #endif
hudakz 0:e33621169e44 321 #ifdef ENABLE_I25
hudakz 0:e33621169e44 322
hudakz 0:e33621169e44 323 case ZBAR_I25:
hudakz 0:e33621169e44 324 config = &dcode->i25.config;
hudakz 0:e33621169e44 325 break;
hudakz 0:e33621169e44 326 #endif
hudakz 0:e33621169e44 327 #ifdef ENABLE_CODE39
hudakz 0:e33621169e44 328
hudakz 0:e33621169e44 329 case ZBAR_CODE39:
hudakz 0:e33621169e44 330 config = &dcode->code39.config;
hudakz 0:e33621169e44 331 break;
hudakz 0:e33621169e44 332 #endif
hudakz 0:e33621169e44 333 #ifdef ENABLE_CODE128
hudakz 0:e33621169e44 334
hudakz 0:e33621169e44 335 case ZBAR_CODE128:
hudakz 0:e33621169e44 336 config = &dcode->code128.config;
hudakz 0:e33621169e44 337 break;
hudakz 0:e33621169e44 338 #endif
hudakz 0:e33621169e44 339 #ifdef ENABLE_PDF417
hudakz 0:e33621169e44 340
hudakz 0:e33621169e44 341 case ZBAR_PDF417:
hudakz 0:e33621169e44 342 config = &dcode->pdf417.config;
hudakz 0:e33621169e44 343 break;
hudakz 0:e33621169e44 344 #endif
hudakz 0:e33621169e44 345 #ifdef ENABLE_QRCODE
hudakz 0:e33621169e44 346
hudakz 0:e33621169e44 347 case ZBAR_QRCODE:
hudakz 0:e33621169e44 348 config = &dcode->qrf.config;
hudakz 0:e33621169e44 349 break;
hudakz 0:e33621169e44 350 #endif
hudakz 0:e33621169e44 351
hudakz 0:e33621169e44 352 /* FIXME handle addons */
hudakz 0:e33621169e44 353
hudakz 0:e33621169e44 354 default:
hudakz 0:e33621169e44 355 return(1);
hudakz 0:e33621169e44 356 }
hudakz 0:e33621169e44 357
hudakz 0:e33621169e44 358 if (!config || cfg >= ZBAR_CFG_NUM)
hudakz 0:e33621169e44 359 return(1);
hudakz 0:e33621169e44 360
hudakz 0:e33621169e44 361 if (!val)
hudakz 0:e33621169e44 362 *config &= ~(1 << cfg);
hudakz 0:e33621169e44 363 else
hudakz 0:e33621169e44 364 if (val == 1)
hudakz 0:e33621169e44 365 *config |= (1 << cfg);
hudakz 0:e33621169e44 366 else
hudakz 0:e33621169e44 367 return(1);
hudakz 0:e33621169e44 368
hudakz 0:e33621169e44 369 #ifdef ENABLE_EAN
hudakz 0:e33621169e44 370 dcode->ean.enable = TEST_CFG
hudakz 0:e33621169e44 371 (
hudakz 0:e33621169e44 372 dcode->ean.ean13_config |
hudakz 0:e33621169e44 373 dcode->ean.ean8_config |
hudakz 0:e33621169e44 374 dcode->ean.upca_config |
hudakz 0:e33621169e44 375 dcode->ean.upce_config |
hudakz 0:e33621169e44 376 dcode->ean.isbn10_config |
hudakz 0:e33621169e44 377 dcode->ean.isbn13_config,
hudakz 0:e33621169e44 378 ZBAR_CFG_ENABLE
hudakz 0:e33621169e44 379 );
hudakz 0:e33621169e44 380 #endif
hudakz 0:e33621169e44 381 return(0);
hudakz 0:e33621169e44 382 }
hudakz 0:e33621169e44 383
hudakz 0:e33621169e44 384 /**
hudakz 0:e33621169e44 385 * @brief
hudakz 0:e33621169e44 386 * @note
hudakz 0:e33621169e44 387 * @param
hudakz 0:e33621169e44 388 * @retval
hudakz 0:e33621169e44 389 */
hudakz 0:e33621169e44 390 static inline int decoder_set_config_int(zbar_decoder_t* dcode, zbar_symbol_type_t sym, zbar_config_t cfg, int val)
hudakz 0:e33621169e44 391 {
hudakz 0:e33621169e44 392 switch (sym) {
hudakz 0:e33621169e44 393 #ifdef ENABLE_I25
hudakz 0:e33621169e44 394
hudakz 0:e33621169e44 395 case ZBAR_I25:
hudakz 0:e33621169e44 396 CFG(dcode->i25, cfg) = val;
hudakz 0:e33621169e44 397 break;
hudakz 0:e33621169e44 398 #endif
hudakz 0:e33621169e44 399 #ifdef ENABLE_CODE39
hudakz 0:e33621169e44 400
hudakz 0:e33621169e44 401 case ZBAR_CODE39:
hudakz 0:e33621169e44 402 CFG(dcode->code39, cfg) = val;
hudakz 0:e33621169e44 403 break;
hudakz 0:e33621169e44 404 #endif
hudakz 0:e33621169e44 405 #ifdef ENABLE_CODE128
hudakz 0:e33621169e44 406
hudakz 0:e33621169e44 407 case ZBAR_CODE128:
hudakz 0:e33621169e44 408 CFG(dcode->code128, cfg) = val;
hudakz 0:e33621169e44 409 break;
hudakz 0:e33621169e44 410 #endif
hudakz 0:e33621169e44 411 #ifdef ENABLE_PDF417
hudakz 0:e33621169e44 412
hudakz 0:e33621169e44 413 case ZBAR_PDF417:
hudakz 0:e33621169e44 414 CFG(dcode->pdf417, cfg) = val;
hudakz 0:e33621169e44 415 break;
hudakz 0:e33621169e44 416 #endif
hudakz 0:e33621169e44 417
hudakz 0:e33621169e44 418 default:
hudakz 0:e33621169e44 419 return(1);
hudakz 0:e33621169e44 420 }
hudakz 0:e33621169e44 421
hudakz 0:e33621169e44 422 return(0);
hudakz 0:e33621169e44 423 }
hudakz 0:e33621169e44 424
hudakz 0:e33621169e44 425 /**
hudakz 0:e33621169e44 426 * @brief
hudakz 0:e33621169e44 427 * @note
hudakz 0:e33621169e44 428 * @param
hudakz 0:e33621169e44 429 * @retval
hudakz 0:e33621169e44 430 */
hudakz 0:e33621169e44 431 int zbar_decoder_set_config(zbar_decoder_t* dcode, zbar_symbol_type_t sym, zbar_config_t cfg, int val)
hudakz 0:e33621169e44 432 {
hudakz 0:e33621169e44 433 if (sym == ZBAR_NONE) {
hudakz 0:e33621169e44 434 zbar_decoder_set_config(dcode, ZBAR_EAN13, cfg, val);
hudakz 0:e33621169e44 435 zbar_decoder_set_config(dcode, ZBAR_EAN8, cfg, val);
hudakz 0:e33621169e44 436 zbar_decoder_set_config(dcode, ZBAR_UPCA, cfg, val);
hudakz 0:e33621169e44 437 zbar_decoder_set_config(dcode, ZBAR_UPCE, cfg, val);
hudakz 0:e33621169e44 438 zbar_decoder_set_config(dcode, ZBAR_ISBN10, cfg, val);
hudakz 0:e33621169e44 439 zbar_decoder_set_config(dcode, ZBAR_ISBN13, cfg, val);
hudakz 0:e33621169e44 440 zbar_decoder_set_config(dcode, ZBAR_I25, cfg, val);
hudakz 0:e33621169e44 441 zbar_decoder_set_config(dcode, ZBAR_CODE39, cfg, val);
hudakz 0:e33621169e44 442 zbar_decoder_set_config(dcode, ZBAR_CODE128, cfg, val);
hudakz 0:e33621169e44 443 zbar_decoder_set_config(dcode, ZBAR_PDF417, cfg, val);
hudakz 0:e33621169e44 444 zbar_decoder_set_config(dcode, ZBAR_QRCODE, cfg, val);
hudakz 0:e33621169e44 445 return(0);
hudakz 0:e33621169e44 446 }
hudakz 0:e33621169e44 447
hudakz 0:e33621169e44 448 if (cfg >= 0 && cfg < ZBAR_CFG_NUM)
hudakz 0:e33621169e44 449 return(decoder_set_config_bool(dcode, sym, cfg, val));
hudakz 0:e33621169e44 450 else
hudakz 0:e33621169e44 451 if (cfg >= ZBAR_CFG_MIN_LEN && cfg <= ZBAR_CFG_MAX_LEN)
hudakz 0:e33621169e44 452 return(decoder_set_config_int(dcode, sym, cfg, val));
hudakz 0:e33621169e44 453 else
hudakz 0:e33621169e44 454 return(1);
hudakz 0:e33621169e44 455 }
hudakz 0:e33621169e44 456
hudakz 0:e33621169e44 457 static char* decoder_dump = NULL;
hudakz 0:e33621169e44 458 static unsigned decoder_dumplen = 0;
hudakz 0:e33621169e44 459
hudakz 0:e33621169e44 460 /**
hudakz 0:e33621169e44 461 * @brief
hudakz 0:e33621169e44 462 * @note
hudakz 0:e33621169e44 463 * @param
hudakz 0:e33621169e44 464 * @retval
hudakz 0:e33621169e44 465 */
hudakz 0:e33621169e44 466 const char* _zbar_decoder_buf_dump(unsigned char* buf, unsigned int buflen)
hudakz 0:e33621169e44 467 {
hudakz 0:e33621169e44 468 int dumplen = (buflen * 3) + 12;
hudakz 0:e33621169e44 469 if (!decoder_dump || dumplen > decoder_dumplen) {
hudakz 0:e33621169e44 470 if (decoder_dump)
hudakz 0:e33621169e44 471 free(decoder_dump);
hudakz 0:e33621169e44 472 decoder_dump = malloc(dumplen);
hudakz 0:e33621169e44 473 decoder_dumplen = dumplen;
hudakz 0:e33621169e44 474 }
hudakz 0:e33621169e44 475
hudakz 0:e33621169e44 476 char* p = decoder_dump + snprintf(decoder_dump, 12, "buf[%04x]=", (buflen > 0xffff) ? 0xffff : buflen);
hudakz 0:e33621169e44 477 int i;
hudakz 0:e33621169e44 478 for (i = 0; i < buflen; i++)
hudakz 0:e33621169e44 479 p += snprintf(p, 4, "%s%02x", (i) ? " " : "", buf[i]);
hudakz 0:e33621169e44 480 return(decoder_dump);
hudakz 0:e33621169e44 481 }