cueOS  2.4
cueOS - Universal Show Control OS for ARM
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
QLSF_manager.c
1/***============================================================================================================================
2 * Depedencies inclusion
3 * Necessary dependencies should be declared here. Header file should contain as little dependecies declarations as possible
4 *=============================================================================================================================*/
5
6#include "QLSF_manager.h"
7#include "fs.h"
8#include "DMX512_engine.h"
9
10
11static QLFS_manager_s QLFS_manager;
12
13
14/***============================================================================================================================
15 * Private functions definitions
16 * These functions are only accessible from within the file's scope
17 *=============================================================================================================================*/
18
29static DMX512_engine_err_e _QLFS_manager_load_header(FIL *config_file){
30
32 uint16_t buf[QLFS_HEADER_SIZE];
33 UINT br;
34
35 f_lseek(config_file, 0);
36
37 if(f_read(config_file, buf, QLFS_HEADER_SIZE * sizeof(uint16_t), &br) == FR_OK){
39 QLFS_manager.scene_count = buf[QLFS_HEADER_SCENE_CNT_INDEX];
40 QLFS_manager.chaser_count = buf[QLFS_HEADER_CHASE_CNT_INDEX];
41 }else{
42 err = 0;
43 }
44
45 return err;
46
47}
48
55static DMX512_engine_err_e _QLFS_manager_load_patch(FIL *config_file){
56
57 DMX512_engine_err_e err = 0;
58
59 for(int i=0; i< QLFS_manager.fixture_count; i++){
60
61 uint16_t patch_buf[QLFS_PATCH_DATA_SIZE];
62 UINT br;
63
64 if(f_read(config_file, patch_buf, QLFS_PATCH_DATA_SIZE * sizeof(uint16_t), &br) != FR_OK){
65 }else if(br < QLFS_PATCH_DATA_SIZE){
66 }else{
67 uint16_t id = patch_buf[QLFS_PATCH_CHUNK_ID_INDEX];
68 uint16_t addr = patch_buf[QLFS_PATCH_CHUNK_ADDR_INDEX];
69 uint16_t chn = patch_buf[QLFS_PATCH_CHUNK_CHN_INDEX];
70 if(DMX512_engine_patch_add(id, addr, chn) != DMX512_ENGINE_OK){
71 err = 0;
72 break;
73 }else{
74 err = DMX512_ENGINE_OK;
75 }
76 }
77
78 }
79
80 return err;
81
82}
83
90static DMX512_engine_err_e _QLFS_manager_load_scenes(FIL *config_file){
91
93
94 for(uint16_t i=0; i<QLFS_manager.scene_count; i++){
95
96 uint16_t header[QLFS_SCENE_HEADER_SIZE];
97
98 f_read(config_file, header, QLFS_SCENE_HEADER_SIZE * sizeof(uint16_t), NULL);
99
100 uint16_t scene_id = header[QLFS_SCENE_ID_INDEX];
101 uint16_t preset_count = header[QLFS_SCENE_FIXTURE_PRESET_CNT_INDEX];
102 uint16_t fadein_time = header[QLFS_SCENE_FADEIN_TIME_INDEX];
103 uint16_t fadeout_time = header[QLFS_SCENE_FADEOUT_TIME_INDEX];
104
105 DMX512_engine_scene_add(scene_id, fadein_time, fadeout_time);
106
107 for(uint16_t j=0; j<preset_count;j++){
108
109 uint16_t preset_header[QLFS_FIXTURE_PRESET_HEADER_SIZE];
110
111 f_read(config_file, preset_header, QLFS_FIXTURE_PRESET_HEADER_SIZE * sizeof(uint16_t), NULL);
112
113 uint16_t fixture_id = preset_header[QLFS_FIXTURE_PRESET_ID_INDEX];
114 uint16_t ch_count = preset_header[QLFS_FIXTURE_PRESET_CHANNEL_CNT_INDEX];
115
116 uint16_t channels[ch_count];
117 uint8_t values[ch_count];
118
119 f_read(config_file, channels, ch_count * sizeof(uint16_t), NULL);
120 f_read(config_file, values, ch_count * sizeof(uint8_t), NULL);
121
122 err = DMX512_engine_scene_add_preset(scene_id, fixture_id, ch_count, channels, values);
123
124 if(err != DMX512_ENGINE_OK){break;}
125
126 }
127
128 if(err != DMX512_ENGINE_OK){break;}
129
130 }
131
132 return err;
133}
134
141//TODO: check for errors here
142static DMX512_engine_err_e _QLFS_manager_load_chasers(FIL *config_file){
143
145
146// for(uint16_t i=0; i<QLFS_manager.chaser_count; i++){
147//
148// uint16_t chaser_header[QLFS_CHASER_HEADER_SIZE];
149//
150// f_read(config_file, chaser_header, QLFS_CHASER_HEADER_SIZE * sizeof(uint16_t), NULL);
151//
152// uint16_t chaser_id = chaser_header[QLFS_CHASER_ID_INDEX];
153// uint16_t chaser_dir = chaser_header[QLFS_CHASER_DIR_MODE_INDEX];
154// uint16_t chaser_mode = chaser_header[QLFS_CHASER_RUN_MODE_INDEX];
155// uint16_t step_count = chaser_header[QLFS_CHASER_STEP_COUNT_INDEX];
156// DMX512_chaser_s chaser = DMX512_chaser_new(chaser_id, chaser_mode, chaser_dir);
157//
158// for(uint16_t j=0; j<step_count; j++){
159//
160// uint16_t step_buffer[4];
161//
162// f_read(config_file, step_buffer, 4 * sizeof(uint16_t), NULL);
163//
164// uint16_t scene_id = step_buffer[QLFS_STEP_ID_INDEX];
165// uint16_t fadein = step_buffer[QLFS_STEP_FADEIN_INDEX];
166// uint16_t fadeout = step_buffer[QLFS_STEP_FADEOUT_INDEX];
167// uint16_t hold = step_buffer[QLFS_STEP_HOLD_INDEX];
168//
171//
172// //if((err = DMX512_chaser_add_step(&chaser, step)) != DMX512_ENGINE_OK ){ break; }
174//
175// }
176//
178//
179// }
180
181
182 return err;
183
184}
185
186
187/***============================================================================================================================
188 * Public functions definitions
189 * These functions can be accessed outside of the file's scope
190 * @see QLFS_manager.h for declarations
191 *=============================================================================================================================*/
192
199DMX512_engine_err_e QLFS_manager_load(TCHAR *config_file_path){
200
202
203 DMX512_engine_err_e err = 0;
204 FIL config_file;
205
206 //TODO: handle error cases. reset engine on parse error.
208 }else if(f_open(&config_file, config_file_path, FA_OPEN_ALWAYS | FA_READ ) != FR_OK){
209 }else if(_QLFS_manager_load_header(&config_file) != DMX512_ENGINE_OK){
210 }else if(_QLFS_manager_load_patch(&config_file) != DMX512_ENGINE_OK){
211 }else if(_QLFS_manager_load_scenes(&config_file) != DMX512_ENGINE_OK){
212 }else if(_QLFS_manager_load_chasers(&config_file) != DMX512_ENGINE_OK){
213 }else{
214 err = DMX512_ENGINE_OK;
215 f_close(&config_file);
216 }
217
218 return err;
219}
DMX512_engine_err_e
DMX512 engine error index constants.
Definition: DMX512_defs.h:24
@ DMX512_ENGINE_OK
Definition: DMX512_defs.h:25
DMX512_engine_err_e DMX512_engine_scene_add_preset(uint16_t scene_id, uint16_t fixture_id, uint16_t channel_count, uint16_t *channels, uint8_t *values)
Wrapper for "DMX512_scene_pool_add" function. Provides context to the specified function using DMX512...
DMX512_engine_err_e DMX512_engine_patch_add(uint16_t fixture_id, uint16_t address, uint16_t ch_count)
Wrapper for "DMX512_fixture_pool_add" function. Provides context to the specified function using DMX5...
void DMX512_engine_reset(void)
DMX512_engine_err_e DMX512_engine_scene_add(uint16_t scene_id, uint16_t fadein_time, uint16_t fadeout_time)
Wrapper for "DMX512_scene_pool_add" function. Provides context to the specified function using DMX512...
#define QLFS_PATCH_DATA_SIZE
Definition: QLSF_manager.h:16
#define QLFS_SCENE_HEADER_SIZE
Definition: QLSF_manager.h:17
#define QLFS_HEADER_SIZE
Definition: QLSF_manager.h:15
#define QLFS_FIXTURE_PRESET_HEADER_SIZE
Definition: QLSF_manager.h:18
@ QLFS_HEADER_PATCH_CNT_INDEX
Definition: QLSF_manager.h:32
@ QLFS_HEADER_SCENE_CNT_INDEX
Definition: QLSF_manager.h:33
@ QLFS_HEADER_CHASE_CNT_INDEX
Definition: QLSF_manager.h:34
@ QLFS_FIXTURE_PRESET_CHANNEL_CNT_INDEX
Definition: QLSF_manager.h:71
@ QLFS_FIXTURE_PRESET_ID_INDEX
Definition: QLSF_manager.h:70
@ QLFS_PATCH_CHUNK_CHN_INDEX
Definition: QLSF_manager.h:47
@ QLFS_PATCH_CHUNK_ADDR_INDEX
Definition: QLSF_manager.h:46
@ QLFS_PATCH_CHUNK_ID_INDEX
Definition: QLSF_manager.h:45
@ QLFS_SCENE_FIXTURE_PRESET_CNT_INDEX
Definition: QLSF_manager.h:58
@ QLFS_SCENE_FADEOUT_TIME_INDEX
Definition: QLSF_manager.h:60
@ QLFS_SCENE_ID_INDEX
Definition: QLSF_manager.h:57
@ QLFS_SCENE_FADEIN_TIME_INDEX
Definition: QLSF_manager.h:59
fs_mount_status_e fs_get_mount_status(void)
Returns the file system's current state.
Definition: fs.c:61
@ FS_MOUNTED
Definition: fs.h:50
QLFS_manager structure object.
Definition: QLSF_manager.h:104
uint16_t fixture_count
Definition: QLSF_manager.h:105
uint16_t scene_count
Definition: QLSF_manager.h:106
uint16_t chaser_count
Definition: QLSF_manager.h:107