unleashed-firmware/applications/external/barcode_gen/barcode_utils.c
2023-07-06 02:26:56 +03:00

147 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";
};
}