Merge remote-tracking branch 'MaD_CaT/master'

This commit is contained in:
sasha80
2024-11-07 13:47:43 +03:00
6 changed files with 106 additions and 37 deletions

View File

@@ -134,15 +134,12 @@ func set_wordi(buf: PackedByteArray, index: int, val: int) -> void:
buf[index + 1] = (val >> 8) & 0xff
## Устанавливает бит в соответствии с маской
## [param bits] - Прежние значения бит
## [param index] - Индекс нового значения бита
## [param val] - Новое значение бита
## [param mask] - Маска изменяемых бит
func set_bit(bits, index, val, mask = 0xfffffffffffffff):
"""
:param bits: прежние значения
:param index: индекс бита
:param val: новое значение бита
:param mask:
:return:
мастер
"""
bits &= mask
if val:
bits |= 1 << index
@@ -151,12 +148,9 @@ func set_bit(bits, index, val, mask = 0xfffffffffffffff):
return (bits & mask)
## Устанавливает биты в соответствии с маской
## [param v] - Прежние значения бит
## [param a] - Новые значения бит
## [param m] - Маска изменяемых бит
func set_bits(v, a, m):
"""
Устанавливает биты в соответствии с маской
:param v: Прежние значения бит
:param a: Новые значения бит
:param m: Маска изменяемых бит
:return: Изменённые значения бит
"""
return v & a & (~m) | (~v) & a & m | v & a & m | v & (~a) & (~m)
return (~m) & v | a & m

View File

@@ -75,7 +75,6 @@ LOAD_KEMS, WRITE_FLASH_END}
# Отправка команды на запись или чтение порта
func on_wr_device(dev_number):
print_debug([id_board, dev_number])
if (state == WR_DEV_NUM_W) or (state == WR_DEV_NUM_R):
unit_ems.send_isa(unit_ems.CmdCode.WRITE_ISA, [base_addr_isa + 2, dev_number])
elif state == WRITE:
@@ -183,3 +182,10 @@ LOAD_KEMS, WRITE_FLASH_END}
else:
state = WR_DEV_NUM_W
on_wr_device(cur_dev_num)
func set_connection(o_dev, i_dev, val):
cur_dev_num = o_dev
if check_dev_number():
cur_dev.set_dot(i_dev, val)
state = WR_DEV_NUM_W
on_wr_device(cur_dev_num)

View File

@@ -7,6 +7,10 @@ const STATUS_OFFSET = { # Смещение статуса, ключ
1: 26,
2: 52 }
const KEMS_BOARD_NAME = 'КЭМС-Б'
const EMS1_BOARD_NAME = 'ЭМС-Б1'
const EMS2_BOARD_NAME = 'ЭМС-Б2'
## Таблица с данными для входов, первое значение - индекс устройства в ячейке КЭМС.
const INPUT_KEMS = [
[1 ,['УИЗП №1', 'Х7', '0.00', '0.00']],

View File

@@ -10,7 +10,7 @@ class InDev:
var state: int ## Состояние входа.
var freq: int ## Предполагаемая частота на которой работает комплекс.
var ports_data: Dictionary ## Словарь состояния портов устройства.
var tbl_row_id: int ## Индекс устройства в таблице выходов.
var tbl_row_id: int ## Индекс устройства в таблице.
var out_dots: Array ## Список выходных устройств в порядке, как в таблице и точки матрицы.
var connect_devs: Dictionary ## Список присоединённых устройств.
var board: String ## Плата в которой находится устройство.
@@ -64,9 +64,9 @@ class OutDev extends InDev:
for i in range(yemsconsts.NUM_INPUT):
btns_state[i+1] = bool((data >> i) & 1)
func set_dot(i_dev):
func set_dot(i_dev, val):
if btns_state.has(i_dev):
btns_state[i_dev] = not btns_state[i_dev]
btns_state[i_dev] = val
var data = 0
for i in range(yemsconsts.NUM_INPUT):
data = data | (int(btns_state[i+1]) << i)