mirror of
https://github.com/DarkFlippers/unleashed-firmware
synced 2024-12-27 13:13:07 +00:00
148 lines
4.3 KiB
C
148 lines
4.3 KiB
C
|
#include "barcode_utils.h"
|
||
|
|
||
|
BarcodeTypeObj* barcode_type_objs[NUMBER_OF_BARCODE_TYPES] = {NULL};
|
||
|
|
||
|
void init_types() {
|
||
|
BarcodeTypeObj* upc_a = malloc(sizeof(BarcodeTypeObj));
|
||
|
upc_a->name = "UPC-A";
|
||
|
upc_a->type = UPCA;
|
||
|
upc_a->min_digits = 11;
|
||
|
upc_a->max_digits = 12;
|
||
|
upc_a->start_pos = 16;
|
||
|
barcode_type_objs[UPCA] = upc_a;
|
||
|
|
||
|
BarcodeTypeObj* ean_8 = malloc(sizeof(BarcodeTypeObj));
|
||
|
ean_8->name = "EAN-8";
|
||
|
ean_8->type = EAN8;
|
||
|
ean_8->min_digits = 7;
|
||
|
ean_8->max_digits = 8;
|
||
|
ean_8->start_pos = 32;
|
||
|
barcode_type_objs[EAN8] = ean_8;
|
||
|
|
||
|
BarcodeTypeObj* ean_13 = malloc(sizeof(BarcodeTypeObj));
|
||
|
ean_13->name = "EAN-13";
|
||
|
ean_13->type = EAN13;
|
||
|
ean_13->min_digits = 12;
|
||
|
ean_13->max_digits = 13;
|
||
|
ean_13->start_pos = 16;
|
||
|
barcode_type_objs[EAN13] = ean_13;
|
||
|
|
||
|
BarcodeTypeObj* code_39 = malloc(sizeof(BarcodeTypeObj));
|
||
|
code_39->name = "CODE-39";
|
||
|
code_39->type = CODE39;
|
||
|
code_39->min_digits = 1;
|
||
|
code_39->max_digits = -1;
|
||
|
code_39->start_pos = 0;
|
||
|
barcode_type_objs[CODE39] = code_39;
|
||
|
|
||
|
BarcodeTypeObj* code_128 = malloc(sizeof(BarcodeTypeObj));
|
||
|
code_128->name = "CODE-128";
|
||
|
code_128->type = CODE128;
|
||
|
code_128->min_digits = 1;
|
||
|
code_128->max_digits = -1;
|
||
|
code_128->start_pos = 0;
|
||
|
barcode_type_objs[CODE128] = code_128;
|
||
|
|
||
|
BarcodeTypeObj* code_128c = malloc(sizeof(BarcodeTypeObj));
|
||
|
code_128c->name = "CODE-128C";
|
||
|
code_128c->type = CODE128C;
|
||
|
code_128c->min_digits = 2;
|
||
|
code_128c->max_digits = -1;
|
||
|
code_128c->start_pos = 0;
|
||
|
barcode_type_objs[CODE128C] = code_128c;
|
||
|
|
||
|
BarcodeTypeObj* codabar = malloc(sizeof(BarcodeTypeObj));
|
||
|
codabar->name = "Codabar";
|
||
|
codabar->type = CODABAR;
|
||
|
codabar->min_digits = 1;
|
||
|
codabar->max_digits = -1;
|
||
|
codabar->start_pos = 0;
|
||
|
barcode_type_objs[CODABAR] = codabar;
|
||
|
|
||
|
BarcodeTypeObj* unknown = malloc(sizeof(BarcodeTypeObj));
|
||
|
unknown->name = "Unknown";
|
||
|
unknown->type = UNKNOWN;
|
||
|
unknown->min_digits = 0;
|
||
|
unknown->max_digits = 0;
|
||
|
unknown->start_pos = 0;
|
||
|
barcode_type_objs[UNKNOWN] = unknown;
|
||
|
}
|
||
|
|
||
|
void free_types() {
|
||
|
for(int i = 0; i < NUMBER_OF_BARCODE_TYPES; i++) {
|
||
|
free(barcode_type_objs[i]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
BarcodeTypeObj* get_type(FuriString* type_string) {
|
||
|
if(furi_string_cmp_str(type_string, "UPC-A") == 0) {
|
||
|
return barcode_type_objs[UPCA];
|
||
|
}
|
||
|
if(furi_string_cmp_str(type_string, "EAN-8") == 0) {
|
||
|
return barcode_type_objs[EAN8];
|
||
|
}
|
||
|
if(furi_string_cmp_str(type_string, "EAN-13") == 0) {
|
||
|
return barcode_type_objs[EAN13];
|
||
|
}
|
||
|
if(furi_string_cmp_str(type_string, "CODE-39") == 0) {
|
||
|
return barcode_type_objs[CODE39];
|
||
|
}
|
||
|
if(furi_string_cmp_str(type_string, "CODE-128") == 0) {
|
||
|
return barcode_type_objs[CODE128];
|
||
|
}
|
||
|
if(furi_string_cmp_str(type_string, "CODE-128C") == 0) {
|
||
|
return barcode_type_objs[CODE128C];
|
||
|
}
|
||
|
if(furi_string_cmp_str(type_string, "Codabar") == 0) {
|
||
|
return barcode_type_objs[CODABAR];
|
||
|
}
|
||
|
|
||
|
return barcode_type_objs[UNKNOWN];
|
||
|
}
|
||
|
|
||
|
const char* get_error_code_name(ErrorCode error_code) {
|
||
|
switch(error_code) {
|
||
|
case WrongNumberOfDigits:
|
||
|
return "Wrong Number Of Digits";
|
||
|
case InvalidCharacters:
|
||
|
return "Invalid Characters";
|
||
|
case UnsupportedType:
|
||
|
return "Unsupported Type";
|
||
|
case FileOpening:
|
||
|
return "File Opening Error";
|
||
|
case InvalidFileData:
|
||
|
return "Invalid File Data";
|
||
|
case MissingEncodingTable:
|
||
|
return "Missing Encoding Table";
|
||
|
case EncodingTableError:
|
||
|
return "Encoding Table Error";
|
||
|
case OKCode:
|
||
|
return "OK";
|
||
|
default:
|
||
|
return "Unknown Code";
|
||
|
};
|
||
|
}
|
||
|
|
||
|
const char* get_error_code_message(ErrorCode error_code) {
|
||
|
switch(error_code) {
|
||
|
case WrongNumberOfDigits:
|
||
|
return "Wrong # of characters";
|
||
|
case InvalidCharacters:
|
||
|
return "Invalid characters";
|
||
|
case UnsupportedType:
|
||
|
return "Unsupported barcode type";
|
||
|
case FileOpening:
|
||
|
return "Could not open file";
|
||
|
case InvalidFileData:
|
||
|
return "Invalid file data";
|
||
|
case MissingEncodingTable:
|
||
|
return "Missing encoding table";
|
||
|
case EncodingTableError:
|
||
|
return "Encoding table error";
|
||
|
case OKCode:
|
||
|
return "OK";
|
||
|
default:
|
||
|
return "Could not read barcode data";
|
||
|
};
|
||
|
}
|