diff --git a/plugin.lua b/plugin.lua index 122931f..7312877 100644 --- a/plugin.lua +++ b/plugin.lua @@ -314,8 +314,9 @@ function rds.ext.set_af_oda(afs) end ---@param group_version boolean ---@param aid integer ---@param data integer +---@param temp boolean ---@return integer oda_id -function ext.register_oda(group, group_version, aid, data) end +function ext.register_oda(group, group_version, aid, data, temp) end ---Unregisters an ODA, this stops the handler or AID being called/sent ---@param oda_id integer diff --git a/scripts/0-oda.lua b/scripts/0-oda.lua index d799b00..ff465f6 100644 --- a/scripts/0-oda.lua +++ b/scripts/0-oda.lua @@ -1,7 +1,7 @@ -local _ODA = { group = 0, group_version = false, aid = 0, data = 0, handler = false } +local _ODA = { group = 0, group_version = false, aid = 0, data = 0, handler = false, temp = false } -function _ODA.new(group, group_version, aid, data, handler) - local instance = { group = group or 0, group_version = group_version or false, aid = aid or 0, data = data or 0, handler = handler or false } +function _ODA.new(group, group_version, aid, data, handler, temp) + local instance = { group = group or 0, group_version = group_version or false, aid = aid or 0, data = data or 0, handler = handler or false, temp = temp or false } setmetatable(instance, { __index = _ODA }) return instance end @@ -16,11 +16,12 @@ local _RDS_ODA_pointer = 1 ---@param group_version boolean ---@param aid integer ---@param data integer +---@param temp boolean ---@return integer oda_id -function ext.register_oda(group, group_version, aid, data) +function ext.register_oda(group, group_version, aid, data, temp) if group == 14 or group == 15 or group == 2 or group == 0 then error("Group is incorrect", 2) end if (group == 10 or group == 4 or group == 1) and group_version then error("Group is incorrect", 2) end - local oda = _ODA.new(group, group_version, aid, data, false) + local oda = _ODA.new(group, group_version, aid, data, false, temp) for i = 1, #_RDS_ODAs do if _RDS_ODAs[i] == false then _RDS_ODAs[i] = oda @@ -74,6 +75,9 @@ local function get_aid() local data, aid = oda.data, oda.aid _RDS_ODA_pointer = (_RDS_ODA_pointer % #_RDS_ODAs) + 1 + + if oda.temp then _RDS_ODAs[_RDS_ODA_pointer] = false end + return true, b, data, aid end @@ -91,7 +95,7 @@ local function get_data() while checked_count < #_RDS_ODAs do local oda = _RDS_ODAs[_RDS_ODA_pointer] - if oda ~= false and type(oda.handler) == "function" then + if oda ~= false and type(oda.handler) == "function" and not oda.temp then local ok, generated, b, c, d = pcall(oda.handler) if ok and generated then _RDS_ODA_pointer = (_RDS_ODA_pointer % #_RDS_ODAs) + 1 diff --git a/scripts/1-af.lua b/scripts/1-af.lua index 268e801..fd78ad9 100644 --- a/scripts/1-af.lua +++ b/scripts/1-af.lua @@ -55,7 +55,7 @@ end local function init_af_oda() if _Af_Oda_id == nil then - _Af_Oda_id = ext.register_oda(7, false, 0x6365, 0) + _Af_Oda_id = ext.register_oda(7, false, 0x6365, 0, false) ext.set_oda_handler(_Af_Oda_id, function() local b, c, d = get_next_af_oda_group() return true, b, c, d diff --git a/scripts/1-ert.lua b/scripts/1-ert.lua index c8ef6e3..0761645 100644 --- a/scripts/1-ert.lua +++ b/scripts/1-ert.lua @@ -6,7 +6,7 @@ local USERDATA_ERT_OFFSET = 0 local function init_ert() if _Ert_oda_id == nil then - _Ert_oda_id = ext.register_oda(13, false, 0x6552, 1) + _Ert_oda_id = ext.register_oda(13, false, 0x6552, 1, false) ext.set_oda_handler(_Ert_oda_id, function () if string.byte(userdata.get_offset(USERDATA_ERT_OFFSET+258, 1)) == 1 then local new_data = userdata.get_offset(USERDATA_ERT_OFFSET, 128) diff --git a/scripts/1-rtp.lua b/scripts/1-rtp.lua index 54d2c16..fc36029 100644 --- a/scripts/1-rtp.lua +++ b/scripts/1-rtp.lua @@ -8,7 +8,7 @@ local USERDATA_RTP_OFFSET = 259 local function init_rtp() if _Rtp_oda_id == nil then - _Rtp_oda_id = ext.register_oda(11, false, 0x4BD7, 0) + _Rtp_oda_id = ext.register_oda(11, false, 0x4BD7, 0, false) ext.set_oda_handler(_Rtp_oda_id, function () local b = (_Rtp_toggle and 1 or 0) << 4 | string.byte(userdata.get_offset(USERDATA_RTP_OFFSET, 1)) << 3 local data_0 = userdata.get_offset(USERDATA_RTP_OFFSET+1, 3) @@ -31,7 +31,7 @@ end local function init_ertp() if _Ertp_oda_id == nil then - _Ertp_oda_id = ext.register_oda(12, false, 0x4BD8, 0) + _Ertp_oda_id = ext.register_oda(12, false, 0x4BD8, 0, false) ext.set_oda_handler(_Ertp_oda_id, function () local b = (_Ertp_toggle and 1 or 0) << 4 | string.byte(userdata.get_offset(USERDATA_RTP_OFFSET+7, 1)) << 3 local data_0 = userdata.get_offset(USERDATA_RTP_OFFSET+8, 3) diff --git a/scripts/98-uecp.lua b/scripts/98-uecp.lua index b04d4e9..3107132 100644 --- a/scripts/98-uecp.lua +++ b/scripts/98-uecp.lua @@ -45,29 +45,29 @@ local function dsn_helper(dsn, write) end end -mec_handlers[1] = function (data) +mec_handlers[1] = function(data) -- PI local dsn = string.byte(data, 2) local psn = string.byte(data, 3) local pi_msb = string.byte(data, 4) local pi_lsb = string.byte(data, 5) - dsn_helper(dsn, function () + dsn_helper(dsn, function() rds.set_pi((pi_msb << 8) | pi_lsb) end) return 5 end -mec_handlers[2] = function (data) +mec_handlers[2] = function(data) -- PS local dsn = string.byte(data, 2) local psn = string.byte(data, 3) local ps = string.sub(data, 4, 11) -- Static len - dsn_helper(dsn, function () + dsn_helper(dsn, function() rds.set_ps(ps) end) return 11 end -mec_handlers[0x21] = function (data) +mec_handlers[0x21] = function(data) -- LPS local dsn = string.byte(data, 2) local psn = string.byte(data, 3) @@ -77,12 +77,12 @@ mec_handlers[0x21] = function (data) local cut = string.find(lps, "\r", 1, true) if cut then lps = string.sub(lps, 1, cut - 1) end - dsn_helper(dsn, function () + dsn_helper(dsn, function() rds.set_lps(lps) end) return 4 + mel end -mec_handlers[4] = function (data) +mec_handlers[4] = function(data) -- PTYI local dsn = string.byte(data, 2) local psn = string.byte(data, 3) @@ -92,7 +92,7 @@ mec_handlers[4] = function (data) end) return 4 end -mec_handlers[3] = function (data) +mec_handlers[3] = function(data) -- TP/TA local dsn = string.byte(data, 2) local psn = string.byte(data, 3) @@ -103,7 +103,7 @@ mec_handlers[3] = function (data) end) return 4 end -mec_handlers[7] = function (data) +mec_handlers[7] = function(data) -- PTY local dsn = string.byte(data, 2) local psn = string.byte(data, 3) @@ -113,7 +113,7 @@ mec_handlers[7] = function (data) end) return 4 end -mec_handlers[0x3E] = function (data) +mec_handlers[0x3E] = function(data) -- PTYN local dsn = string.byte(data, 2) local psn = string.byte(data, 3) @@ -123,7 +123,8 @@ mec_handlers[0x3E] = function (data) end) return 11 end -mec_handlers[0x0A] = function (data) +mec_handlers[0x0A] = function(data) + -- RT local dsn = string.byte(data, 2) local psn = string.byte(data, 3) local mel = string.byte(data, 4) @@ -215,6 +216,17 @@ mec_handlers[0x1C] = function (data) return 2 end +mec_handlers[0x2D] = function (data) + -- Manufacturer + local mel = string.byte(data, 2) + local designation = string.sub(data, 3, 4) + if designation == "95" and mel > 2 then + local data = string.sub(data, 5, 4+mel) + pcall(data_handle, data) + end + return 2+mel +end + ---@param data string local function undo_byte_stuff(data) local output = {}