A modern Music Player Daemon based on Rockbox open source high quality audio player
libadwaita audio rust zig deno mpris rockbox mpd
at master 135 lines 4.3 kB view raw
1/*************************************************************************** 2 * __________ __ ___. 3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___ 4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / 5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < 6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ 7 * \/ \/ \/ \/ \/ 8 * $Id$ 9 * 10 * Copyright (C) 2011 Amaury Pouly 11 * 12 * This program is free software; you can redistribute it and/or 13 * modify it under the terms of the GNU General Public License 14 * as published by the Free Software Foundation; either version 2 15 * of the License, or (at your option) any later version. 16 * 17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 18 * KIND, either express or implied. 19 * 20 ****************************************************************************/ 21#ifndef __DBPARSER__ 22#define __DBPARSER__ 23 24/** 25 * Command file parsing 26 */ 27#include "sb.h" 28#include "elf.h" 29 30enum cmd_source_type_t 31{ 32 CMD_SRC_UNK, 33 CMD_SRC_ELF, 34 CMD_SRC_BIN 35}; 36 37struct bin_param_t 38{ 39 uint32_t size; 40 void *data; 41}; 42 43struct cmd_source_t 44{ 45 char *identifier; 46 bool is_extern; 47 // <union> 48 int extern_nr; 49 char *filename; 50 // </union> 51 struct cmd_source_t *next; 52 /* for later use */ 53 enum cmd_source_type_t type; 54 bool loaded; 55 struct elf_params_t elf; 56 struct bin_param_t bin; 57}; 58 59enum cmd_inst_type_t 60{ 61 CMD_LOAD, /* load image */ 62 CMD_JUMP, /* jump at image */ 63 CMD_CALL, /* call image */ 64 CMD_LOAD_AT, /* load binary at */ 65 CMD_CALL_AT, /* call at address */ 66 CMD_JUMP_AT, /* jump at address */ 67 CMD_MODE, /* change boot mode */ 68}; 69 70struct cmd_inst_t 71{ 72 enum cmd_inst_type_t type; 73 char *identifier; 74 uint32_t argument; // for jump, call, mode 75 uint32_t addr; // for 'at' 76 struct cmd_inst_t *next; 77}; 78 79struct cmd_option_t 80{ 81 char *name; 82 bool is_string; 83 /* <union> */ 84 uint32_t val; 85 char *str; 86 /* </union> */ 87 struct cmd_option_t *next; 88}; 89 90struct cmd_section_t 91{ 92 uint32_t identifier; 93 bool is_data; 94 // <union> 95 struct cmd_inst_t *inst_list; 96 char *source_id; 97 // </union> 98 struct cmd_section_t *next; 99 struct cmd_option_t *opt_list; 100}; 101 102struct cmd_file_t 103{ 104 struct cmd_option_t *opt_list; 105 struct cmd_option_t *constant_list; /* constant are always integers */ 106 struct cmd_source_t *source_list; 107 struct cmd_section_t *section_list; 108}; 109 110typedef void (*db_color_printf)(void *u, bool err, color_t c, const char *f, ...); 111 112struct cmd_source_t *db_find_source_by_id(struct cmd_file_t *cmd_file, const char *id); 113struct cmd_option_t *db_find_option_by_id(struct cmd_option_t *opt, const char *name); 114bool db_parse_sb_version(struct sb_version_t *ver, const char *str); 115bool db_generate_sb_version(struct sb_version_t *ver, char *str, int size); 116void db_generate_default_sb_version(struct sb_version_t *ver); 117struct cmd_file_t *db_parse_file(const char *file); 118/* NOTE: db_add_{str_opt,int_opt,source,extern_source} add at the beginning of the list */ 119void db_add_str_opt(struct cmd_option_t **opt, const char *name, const char *str); 120void db_add_int_opt(struct cmd_option_t **opt, const char *name, uint32_t value); 121void db_add_source(struct cmd_file_t *cmd_file, const char *identifier, const char *filename); 122void db_add_inst_id(struct cmd_section_t *cmd_section, enum cmd_inst_type_t type, 123 const char *identifier, uint32_t argument); 124void db_add_inst_addr(struct cmd_section_t *cmd_section, enum cmd_inst_type_t type, 125 uint32_t addr, uint32_t argument); 126struct cmd_section_t *db_add_section(struct cmd_file_t *cmd_file, uint32_t identifier, bool data); 127void db_add_extern_source(struct cmd_file_t *cmd_file, const char *identifier, int extern_nr); 128bool db_generate_file(struct cmd_file_t *file, const char *filename, void *user, db_color_printf printf); 129void db_free_option_list(struct cmd_option_t *opt_list); 130void db_free(struct cmd_file_t *file); 131 132/* standard implementation: user is unused*/ 133void db_std_printf(void *user, bool error, color_t c, const char *fmt, ...); 134 135#endif /* __DBPARSER__ */