Skip to content

Commit 11994fc

Browse files
authored
Merge pull request #3 from polarikus/dev
Dev
2 parents 5368670 + b48fd6c commit 11994fc

File tree

8 files changed

+56
-20
lines changed

8 files changed

+56
-20
lines changed

README.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
[![FAP Factory](https://fap.playmean.xyz/api/v1/polarikus/flipper-zero_bc_scanner_emulator/badge)](https://fap.playmean.xyz/polarikus/flipper-zero_bc_scanner_emulator)
1212

1313
1. Copy bc_scanner.fap file in Flipper SDCard (apps folder)
14-
2. Make "/bcscanner" folder in Flipper SDCard
14+
2. Open bc_scanner app, for creating bcscanner folder, or create a folder manually via qFlipper
1515
3. Add bar code files (.bc) in "bcscanner" folder
1616

1717
## GUI
@@ -24,11 +24,12 @@ After open app - select bar code to be emulated
2424
### Emulation
2525
1. Click "Run" Button
2626

27-
![Run](https://gitlab.idcloud.space/flipper-zero/bc_scanner_e/-/wikis/uploads/2b6144eebd5e88caa8adc5e0c7514342/Runing.png)
27+
![Run](https://user-images.githubusercontent.com/59930161/214501072-33a32970-7f1c-4f3b-b6f0-39bb4f2201ce.png)
28+
![Work](https://user-images.githubusercontent.com/59930161/214501068-ad11e74f-b501-408b-939b-8d2d7748e542.png)
2829

2930
When sending completed You will see 100% on the display:
3031

31-
![End](https://gitlab.idcloud.space/flipper-zero/bc_scanner_e/-/wikis/uploads/676d868d7c377ef9d0f42706bcd83913/EndRun.png)
32+
![End](https://user-images.githubusercontent.com/59930161/214501074-f567af0c-16d3-4287-81e6-a96ebb6a57f2.png)
3233

3334
2. If you need to resend, click "Run" again
3435
3. To exit - press the "Back" button on the flipper

bc_scanner_app_i.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include <gui/modules/widget.h>
1616
#include "views/bc_scanner_view.h"
1717

18+
#define RECORD_STORAGE "storage"
1819
#define BC_SCANNER_APP_PATH_FOLDER ANY_PATH("bcscanner")
1920
#define BC_SCANNER_APP_EXTENSION ".bc"
2021

bc_scanner_script.c

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,20 @@ struct BarCodeScript {
3434
};
3535

3636

37+
static void scan_sound()
38+
{
39+
if(furi_hal_speaker_is_mine() || furi_hal_speaker_acquire(1000)) {
40+
float frequency = 4000;
41+
furi_hal_speaker_stop();
42+
furi_hal_speaker_set_volume(100);
43+
furi_hal_speaker_start(frequency, 100);
44+
furi_delay_ms(50);
45+
furi_hal_speaker_stop();
46+
furi_hal_speaker_release();
47+
}
48+
}
49+
50+
3751
static void usb_uart_serial_init() {
3852
furi_hal_usb_unlock();
3953
Cli* cli = furi_record_open(RECORD_CLI);
@@ -105,11 +119,12 @@ static int32_t bc_scanner_worker(void* context){
105119
} else {
106120
FURI_LOG_E(WORKER_TAG, "File empty error");
107121
worker_state = BarCodeStateFileError;
108-
bc_script->st.error_line = 0;
122+
bc_script->st.error_enum = FileIsEmpty;
109123
}
110124
} else {
111125
FURI_LOG_E(WORKER_TAG, "File open error");
112126
worker_state = BarCodeStateFileError; // File open error
127+
bc_script->st.error_enum = FileOpenError;
113128
}
114129
bc_script->st.state = worker_state;
115130
}else if(worker_state == BarCodeStateIdle) { // State: ready to start
@@ -126,7 +141,8 @@ static int32_t bc_scanner_worker(void* context){
126141
FURI_LOG_I(WORKER_TAG, "SendUART_MSG");
127142
bc_script->st.state = BarCodeStateRunning;
128143
bc_script->st.line_cur = 0;
129-
furi_delay_ms(500);
144+
furi_delay_ms(450);
145+
scan_sound();
130146
while(!bc_script->is_file_end){
131147
bc_script->st.state = BarCodeStateRunning;
132148
uint16_t size = bc_script_read_file(bc_script, script_file);

bc_scanner_script.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,18 @@ typedef enum {
1818
BarCodeStateFileError,
1919
} BarCodeWorkerState;
2020

21+
typedef enum {
22+
FileIsEmpty,
23+
FileOpenError
24+
} FileError;
25+
26+
2127
typedef struct {
2228
BarCodeWorkerState state;
2329
uint16_t line_cur;
2430
uint16_t line_nb;
2531
uint32_t delay_remain;
26-
uint16_t error_line;
32+
int error_enum;
2733
char error[64];
2834
} BarCodeState;
2935

icons/Scanner_27x37.png

10.2 KB
Loading

icons/bc_12x13.png

582 Bytes
Loading

scenes/bc_scanner_scene_file_select.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@
44
static bool bc_scanner_file_select(BarCodeApp* bc_app) {
55
furi_assert(bc_app);
66

7+
Storage* storage = furi_record_open(RECORD_STORAGE);
8+
if(!storage_file_exists(storage, BC_SCANNER_APP_PATH_FOLDER)){
9+
storage_common_mkdir(storage, BC_SCANNER_APP_PATH_FOLDER);//Make Folder If dir not exist
10+
}
11+
furi_record_close(RECORD_STORAGE);
12+
713
DialogsFileBrowserOptions browser_options;
814
dialog_file_browser_set_basic_options(&browser_options, BC_SCANNER_APP_EXTENSION, &I_bc_10px);
915
browser_options.base_path = BC_SCANNER_APP_PATH_FOLDER;

views/bc_scanner_view.c

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#include "bc_scanner_view.h"
2-
#include "../bc_scanner_script.h"
2+
#include "../bc_scanner_app_i.h"
33
#include <gui/elements.h>
44
#include <assets_icons.h>
55

@@ -19,6 +19,11 @@ typedef struct {
1919
uint8_t anim_frame;
2020
} BarCodeModel;
2121

22+
static char *fileErrors[] = {
23+
"File is Empty!",
24+
"Can’t open the file"
25+
};
26+
2227

2328
static void bc_scanner_draw_callback(Canvas* canvas, void* _model) {
2429
BarCodeModel* model = _model;
@@ -30,7 +35,7 @@ static void bc_scanner_draw_callback(Canvas* canvas, void* _model) {
3035
canvas_draw_str(canvas, 2, 8, furi_string_get_cstr(disp_str));
3136
furi_string_reset(disp_str);
3237

33-
canvas_draw_icon(canvas, 22, 20, &I_UsbTree_48x22);
38+
canvas_draw_icon(canvas, 4, 22, &I_Scanner_27x37);
3439

3540
if((model->state.state == BarCodeStateIdle) || (model->state.state == BarCodeStateDone)) {
3641
elements_button_center(canvas, "Run");
@@ -39,30 +44,31 @@ static void bc_scanner_draw_callback(Canvas* canvas, void* _model) {
3944
}
4045

4146
if(model->state.state == BarCodeStateFileError) {
42-
canvas_draw_icon(canvas, 4, 22, &I_Error_18x18);
47+
canvas_draw_icon(canvas, 32, 22, &I_Error_18x18);
4348
canvas_set_font(canvas, FontPrimary);
44-
canvas_draw_str_aligned(canvas, 127, 27, AlignRight, AlignBottom, "File");
45-
canvas_draw_str_aligned(canvas, 127, 39, AlignRight, AlignBottom, "ERROR");
49+
canvas_draw_str_aligned(canvas, 127, 39, AlignRight, AlignBottom, "File ERROR");
50+
canvas_set_font(canvas, FontSecondary);
51+
canvas_draw_str_aligned(canvas, 127, 51, AlignRight, AlignBottom, fileErrors[model->state.error_enum]);
4652
} else if(model->state.state == BarCodeStateScriptError) {
47-
canvas_draw_icon(canvas, 4, 22, &I_Error_18x18);
53+
canvas_draw_icon(canvas, 32, 22, &I_Error_18x18);
4854
canvas_set_font(canvas, FontPrimary);
4955
canvas_draw_str_aligned(canvas, 127, 33, AlignRight, AlignBottom, "ERROR:");
5056
canvas_set_font(canvas, FontSecondary);
51-
furi_string_printf(disp_str, "line %u", model->state.error_line);
57+
//furi_string_printf(disp_str, "line %u", model->state.er);
5258
canvas_draw_str_aligned(
5359
canvas, 127, 46, AlignRight, AlignBottom, furi_string_get_cstr(disp_str));
5460
furi_string_reset(disp_str);
5561
canvas_draw_str_aligned(canvas, 127, 56, AlignRight, AlignBottom, model->state.error);
5662
} else if(model->state.state == BarCodeStateIdle) {
57-
canvas_draw_icon(canvas, 4, 22, &I_Smile_18x18);
63+
//canvas_draw_icon(canvas, 4, 22, &I_Smile_18x18);
5864
canvas_set_font(canvas, FontBigNumbers);
5965
canvas_draw_str_aligned(canvas, 114, 36, AlignRight, AlignBottom, "0");
6066
canvas_draw_icon(canvas, 117, 22, &I_Percent_10x14);
6167
} else if(model->state.state == BarCodeStateRunning) {
6268
if(model->anim_frame == 0) {
63-
canvas_draw_icon(canvas, 4, 19, &I_EviSmile1_18x21);
69+
canvas_draw_icon(canvas, 32, 24, &I_bc_12x13);
6470
} else {
65-
canvas_draw_icon(canvas, 4, 19, &I_EviSmile2_18x21);
71+
canvas_draw_icon(canvas, 32, 27, &I_bc_10px);
6672
}
6773
canvas_set_font(canvas, FontBigNumbers);
6874
furi_string_printf(
@@ -72,16 +78,16 @@ static void bc_scanner_draw_callback(Canvas* canvas, void* _model) {
7278
furi_string_reset(disp_str);
7379
canvas_draw_icon(canvas, 117, 22, &I_Percent_10x14);
7480
} else if(model->state.state == BarCodeStateDone) {
75-
canvas_draw_icon(canvas, 4, 19, &I_EviSmile1_18x21);
81+
//canvas_draw_icon(canvas, 4, 19, &I_EviSmile1_18x21);
7682
canvas_set_font(canvas, FontBigNumbers);
7783
canvas_draw_str_aligned(canvas, 114, 36, AlignRight, AlignBottom, "100");
7884
furi_string_reset(disp_str);
7985
canvas_draw_icon(canvas, 117, 22, &I_Percent_10x14);
8086
} else if(model->state.state == BarCodeStateDelay) {
8187
if(model->anim_frame == 0) {
82-
canvas_draw_icon(canvas, 4, 19, &I_EviWaiting1_18x21);
88+
//canvas_draw_icon(canvas, 4, 19, &I_EviWaiting1_18x21);
8389
} else {
84-
canvas_draw_icon(canvas, 4, 19, &I_EviWaiting2_18x21);
90+
//canvas_draw_icon(canvas, 4, 19, &I_EviWaiting2_18x21);
8591
}
8692
canvas_set_font(canvas, FontBigNumbers);
8793
furi_string_printf(
@@ -96,7 +102,7 @@ static void bc_scanner_draw_callback(Canvas* canvas, void* _model) {
96102
canvas, 127, 46, AlignRight, AlignBottom, furi_string_get_cstr(disp_str));
97103
furi_string_reset(disp_str);
98104
} else {
99-
canvas_draw_icon(canvas, 4, 22, &I_Clock_18x18);
105+
canvas_draw_icon(canvas, 32, 22, &I_Clock_18x18);
100106
}
101107

102108
furi_string_free(disp_str);

0 commit comments

Comments
 (0)