util.is_int

This commit is contained in:
Mikayla Fischler 2022-06-05 16:51:38 -04:00
parent 1c819779c7
commit 0bc0decbf2
3 changed files with 19 additions and 10 deletions

View File

@ -25,7 +25,7 @@ local imatrix_rtu = require("rtu.dev.imatrix_rtu")
local turbine_rtu = require("rtu.dev.turbine_rtu")
local turbinev_rtu = require("rtu.dev.turbinev_rtu")
local RTU_VERSION = "beta-v0.7.8"
local RTU_VERSION = "beta-v0.7.9"
local rtu_t = types.rtu_t
@ -121,7 +121,7 @@ local function configure()
local io_reactor = rtu_redstone[entry_idx].for_reactor
-- CHECK: reactor ID must be >= to 1
if type(io_reactor) ~= "number" or io_reactor <= 0 or io_reactor ~= math.floor(io_reactor) then
if (not util.is_int(io_reactor)) or (io_reactor <= 0) then
println(util.c("configure> redstone entry #", entry_idx, " : ", io_reactor, " isn't an integer >= 1"))
return false
end
@ -244,13 +244,13 @@ local function configure()
end
-- CHECK: index is an integer >= 1
if type(index) ~= "number" or index <= 0 or index ~= math.floor(index) then
if (not util.is_int(index)) or (index <= 0) then
println(util.c("configure> device entry #", i, ": index ", index, " isn't an integer >= 1"))
return false
end
-- CHECK: reactor is an integer >= 1
if type(for_reactor) ~= "number" or for_reactor <= 0 or for_reactor ~= math.floor(for_reactor) then
if (not util.is_int(for_reactor)) or (for_reactor <= 0) then
println(util.c("configure> device entry #", i, ": reactor ", for_reactor, " isn't an integer >= 1"))
return false
end

View File

@ -2,6 +2,8 @@
-- Redstone I/O
--
local util = require("scada-common.util")
local rsio = {}
----------------------
@ -101,7 +103,7 @@ function rsio.to_string(channel)
"R_PLC_TIMEOUT"
}
if type(channel) == "number" and channel > 0 and channel <= #names then
if util.is_int(channel) and channel > 0 and channel <= #names then
return names[channel]
else
return ""
@ -184,7 +186,7 @@ function rsio.get_io_mode(channel)
IO_MODE.DIGITAL_OUT -- R_PLC_TIMEOUT
}
if type(channel) == "number" and channel > 0 and channel <= #modes then
if util.is_int(channel) and channel > 0 and channel <= #modes then
return modes[channel]
else
return IO_MODE.ANALOG_IN
@ -201,7 +203,7 @@ local RS_SIDES = rs.getSides()
---@param channel RS_IO
---@return boolean valid
function rsio.is_valid_channel(channel)
return (type(channel) == "number") and (channel > 0) and (channel <= RS_IO.R_PLC_TIMEOUT)
return util.is_int(channel) and (channel > 0) and (channel <= RS_IO.R_PLC_TIMEOUT)
end
-- check if a side is valid
@ -220,7 +222,7 @@ end
---@param color integer
---@return boolean valid
function rsio.is_color(color)
return (type(color) == "number") and (color > 0) and (_B_AND(color, (color - 1)) == 0);
return util.is_int(color) and (color > 0) and (_B_AND(color, (color - 1)) == 0);
end
-----------------
@ -243,7 +245,7 @@ end
---@param level IO_LVL
---@return boolean
function rsio.digital_write(channel, level)
if type(channel) ~= "number" or channel < RS_IO.F_ALARM or channel > RS_IO.R_PLC_TIMEOUT then
if (not util.is_int(channel)) or (channel < RS_IO.F_ALARM) or (channel > RS_IO.R_PLC_TIMEOUT) then
return false
else
return RS_DIO_MAP[channel]._f(level)
@ -255,7 +257,7 @@ end
---@param level IO_LVL
---@return boolean
function rsio.digital_is_active(channel, level)
if type(channel) ~= "number" or channel > RS_IO.R_ENABLE then
if (not util.is_int(channel)) or (channel > RS_IO.R_ENABLE) then
return false
else
return RS_DIO_MAP[channel]._f(level)

View File

@ -79,6 +79,13 @@ end
-- MATH --
-- is a value an integer
---@param x any value
---@return boolean if the number is an integer
function util.is_int(x)
return type(x) == "number" and x == math.floor(x)
end
-- round a number to an integer
---@return integer rounded
function util.round(x)