SMBus
smbus
module implements SMBus communication protocol.
SMBus is available since Gateway version 2.2.
SMBus client can be dangerous if used improperly. Do not use SMBus client on random addresses. Anyway, it is of little use unless you have good knowledge of the chip you're working with and an idea of what you are looking for.
smbus.open()
-- @param bus_number integer I²C bus number
-- @return table SMBus client
function smbus.open(bus_number)
end
Creates new SMBus client
instance with the given I²C bus number. The bus_number
is number in /dev
file name. For example, I²C bus i2c-2
has bus number 2.
Example
local bus = smbus.open(2)
bus
Object
bus:read_byte_reg()
-- @param addr integer 7-bits device address
-- @param reg integer 1-byte register number
-- @return integer, string 1-byte value and error string
function bus:read_byte_reg(addr, reg)
end
Reads a single byte from a designated register. When read fails, error
will contain a non-nil string. If read succeeds error
will be nil.
Example
local value, error = bus:read_byte_reg(0x5A, 0xAF)
if error then
enapter.log('read byte failed: '..error, 'error')
else
enapter.log('read byte: '..value)
end
bus:write_byte_reg()
-- @param addr integer 7-bits device address
-- @param reg integer 1-byte register number
-- @param value integer, 1-byte value
-- @return string error
function bus:write_byte_reg(addr, reg, value)
end
Writes a single byte to a designated register. When write fails, error
will contain a non-nil string. If write succeeds error
will be nil.
Example
local error = bus:write_byte_reg(0x5A, 0xAF, 0xBA)
if error then
enapter.log('write byte failed: '..error, 'error')
end
bus:read_word_reg()
-- @param addr integer 7-bits device address
-- @param reg integer 1-byte register number
-- @return integer, string 2-bytes word value and error string
function bus:read_word_reg(addr, reg)
end
Reads a 2-bytes word from a designated register. When read fails, error
will contain a non-nil string. If read succeeds error
will be nil.
Example
local value, error = bus:read_word_reg(0x5A, 0xBF)
if error then
enapter.log('read word failed: '..error, 'error')
else
enapter.log('read word '..value)
end
bus:write_word_reg()
-- @param addr integer 7-bits device address
-- @param reg integer 1-byte register number
-- @param value integer 2-bytes word value
-- @return string error
function bus:write_word_reg(addr, reg, value)
end
Writes a 2-bytes word to a designated register. When write fails, error
will contain a non-nil string. If write succeeds error
will be nil.
Example
local error = bus:write_word_reg(0x5A, 0xBF, 0xABDC)
if error then
enapter.log('write word failed: '..error, 'error')
end
bus:read_block_data_reg()
-- @param addr integer 7-bits device address
-- @param reg integer 1-byte register number
-- @return table, string array of 1-byte integer values and error string
function bus:read_block_data_reg(addr, reg)
end
Reads a data from a designated SMBus register. When read fails, error
will contain a non-nil string. If read succeeds error
will be nil.
Example
local values, error = bus:read_block_data_reg(0x5A, 0xCF)
if error then
enapter.log('read block data failed: '..error, 'error')
else
enapter.log('read block data: '..inspect(values))
end
bus:write_block_data_reg()
-- @param addr integer 7-bits device address
-- @param reg integer 1-byte register number
-- @param values table array of 1-byte integer values
-- @return string error
function bus:write_block_data_reg(addr, reg, values)
end
Writes a data to a designated SMBus register. When write fails, error
will contain a non-nil string. If write succeeds error
will be nil.
Length of the values
should be up to 32.
Example
local error = bus:write_block_data_reg(0x5A, 0xCF, {0x00, 0xF1, 0xF3, 0xF9, 0x00})
if error then
enapter.log('write block data failed: '..error, 'error')
end
bus:read_i2c_block_data_reg()
-- @param addr integer 7-bits device address
-- @param reg integer 1-byte register number
-- @param max_len integer maximum size of a data
-- @return table, string array of 1-byte integer values and error string
function bus:read_i2c_block_data_reg(addr, reg, max_len)
end
Reads a bytes block from a start register. When read fails, error
will contain a non-nil string. If read succeeds error
will be nil.
The max_len
should be a positive and less or equal 32.
Example
local values, error = bus:read_i2c_block_data_reg(0x5A, 0xDF, 12)
if error then
enapter.log('read I²C block data failed: '..error, 'error')
else
enapter.log('read I²C block data: '..inspect(values))
end
bus:write_i2c_block_data_reg()
-- @param addr integer 7-bits device address
-- @param reg integer 1-byte register number
-- @param values table array of 1-byte integer values
-- @return string error
function bus:write_i2c_block_data_reg(addr, reg, values)
end
Writes bytes block to a device from a start register. When write fails, error
will contain a non-nil string. If write succeeds error
will be nil.
Length of the values
should be up to 32.
Example
local error = bus:write_i2c_block_data_reg(0x5A, 0xDF, {0xBB, 0xBA, 0xFA})
if error then
enapter.log('write I²C block data failed: '..error, 'error')
end
bus:close()
-- @return string error
function bus:close()
end
Closes the connection to the remote device. When close fails, error
will contain a non-nil string. If close succeeds error
will be nil.
Example
error = bus:close()
if error then
enapter.log('close failed: '..error, 'error')
end