diff --git a/.gitignore b/.gitignore index e37b125..a93ed3a 100644 --- a/.gitignore +++ b/.gitignore @@ -54,4 +54,5 @@ dkms.conf build/ *.pyc __pycache__/ -.vscode/ \ No newline at end of file +.vscode/ +.command_prefix.lua \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 4e5d40b..06755b6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,7 +20,28 @@ install(TARGETS rds95 DESTINATION ${CMAKE_INSTALL_PREFIX}/bin) install(CODE " - execute_process(COMMAND ${CMAKE_COMMAND} -E copy - \"${CMAKE_CURRENT_SOURCE_DIR}/src/command.lua\" - \"$ENV{HOME}/.rds95.command.lua\") -") + # Define the paths for the source and destination files + set(PREFIX_FILE \"${CMAKE_CURRENT_SOURCE_DIR}/.command_prefix.lua\") + set(COMMAND_FILE \"${CMAKE_CURRENT_SOURCE_DIR}/src/command.lua\") + # The $ENV{HOME} variable is evaluated at install time, not configure time + set(DEST_FILE \"$ENV{HOME}/.rds95.command.lua\") + + # Check if the optional prefix file exists + if(EXISTS \${PREFIX_FILE}) + # If it exists, read the prefix and the main command file + message(STATUS \"Prefix file found. Combining with command.lua.\") + file(READ \${PREFIX_FILE} PREFIX_CONTENT) + file(READ \${COMMAND_FILE} COMMAND_CONTENT) + # Concatenate them, with the prefix content first + set(FINAL_CONTENT \"\${PREFIX_CONTENT}\n\${COMMAND_CONTENT}\") + else() + # Otherwise, just use the content of the main command file + message(STATUS \"Prefix file not found. Using command.lua directly.\") + file(READ \${COMMAND_FILE} FINAL_CONTENT) + endif() + + # Write the resulting content to the destination file + message(STATUS \"Installing command file to \${DEST_FILE}\") + file(WRITE \${DEST_FILE} \"\${FINAL_CONTENT}\") +" +) \ No newline at end of file diff --git a/plugin.lua b/plugin.lua index 8ef9209..90a0a9c 100644 --- a/plugin.lua +++ b/plugin.lua @@ -16,7 +16,7 @@ function set_rds_program_defaults() end ---@return nil function reset_rds() end ----This function is called by the C core after the script is loaded. +---This function is called by the C core after we reset data, or have no data in general ---It should be defined by the user in the script. ---@return nil function on_init() end diff --git a/src/ascii_cmd.c b/src/ascii_cmd.c index 37a8c09..7b8078b 100644 --- a/src/ascii_cmd.c +++ b/src/ascii_cmd.c @@ -199,12 +199,6 @@ static void handle_ertprun(char *arg, RDSModulator* mod, char* output) { strcpy(output, "+"); } -static void handle_grpseq(char *arg, RDSModulator* mod, char* output) { - if (arg[0] == 0) set_rds_grpseq(mod->enc, DEFAULT_GRPSQC); - else set_rds_grpseq(mod->enc, arg); - strcpy(output, "+"); -} - static void handle_eonen(char *arg, char *pattern, RDSModulator* mod, char* output) { mod->enc->data[mod->enc->program].eon[atoi(pattern)-1].enabled = atoi(arg); strcpy(output, "+"); @@ -307,7 +301,6 @@ static const command_handler_t commands_eq2[] = { static const command_handler_t commands_eq7[] = { {"RTPRUN", handle_rtprun, 6}, - {"GRPSEQ", handle_grpseq, 6}, }; static const command_handler_t commands_eq8[] = { diff --git a/src/command.lua b/src/command.lua index a008067..c859bfd 100644 --- a/src/command.lua +++ b/src/command.lua @@ -10,6 +10,15 @@ if type(data) == "string" then elseif data == "reset" then reset_rds() return "+" + elseif data == "pi" then return string.format("PI=%s\r\n", string.format("%x", get_rds_pi())) + elseif data == "pty" then return string.format("PTY=%s\r\n", string.format("%d", get_rds_pty())) + elseif data == "ecc" then return string.format("ECC=%s\r\n", string.format("%x", get_rds_ecc())) + elseif data == "slcd" then return string.format("SLCD=%s\r\n", string.format("%x", get_rds_slc_data())) + elseif data == "ct" then return string.format("CT=%s\r\n", string.format("%d", get_rds_ct())) + elseif data == "dpty" then return string.format("DPTY=%s\r\n", string.format("%d", get_rds_dpty())) + elseif data == "tp" then return string.format("TP=%s\r\n", string.format("%d", get_rds_tp())) + elseif data == "ta" then return string.format("TA=%s\r\n", string.format("%d", get_rds_ta())) + -- TODO: more end end cmd = cmd:lower() @@ -131,6 +140,12 @@ if type(data) == "string" then if not timeout then return "-" end set_rds_rt_text_timeout(timeout) return "+" + elseif cmd == "grpseq" then + set_rds_grpseq(value) + return "+" + elseif cmd == "grpseq2" then + set_rds_grpseq2(value) + return "+" else return "?" end