| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256 |
- const genericModbusService = require('../generic-modbus/service.js')
- const settingsService = require('../../store/settings-store.js')
- const themeService = require('../../store/theme-store.js')
- const transport = require('../../transport/ble-core.js')
- function getGenericOption(options, index) {
- return options[Number(index)] || options[0] || {}
- }
- function getPageState() {
- const settingsState = settingsService.getState()
- const transportState = transport.getState()
- const isPrivateProtocol = settingsState.modbusProtocolMode !== 'generic'
- return {
- ...genericModbusService.getState(),
- ...themeService.getState(),
- ...settingsState,
- connectedDevice: transportState.connectedDevice,
- isGenericProtocol: !isPrivateProtocol,
- isPrivateProtocol
- }
- }
- function resolveActiveParamView(currentView) {
- return currentView === 'genericModbusGroup' ? currentView : 'genericModbus'
- }
- function getSettingsPageState(currentData, settingsState) {
- const isPrivateProtocol = settingsState.modbusProtocolMode !== 'generic'
- return {
- ...settingsState,
- activeParamView: resolveActiveParamView(currentData.activeParamView),
- isGenericProtocol: !isPrivateProtocol,
- isPrivateProtocol
- }
- }
- function getVisiblePageState(currentData) {
- const settingsState = settingsService.getState()
- const transportState = transport.getState()
- const isPrivateProtocol = settingsState.modbusProtocolMode !== 'generic'
- const pageState = {
- ...genericModbusService.getState(),
- ...themeService.getState(),
- ...settingsState,
- connectedDevice: transportState.connectedDevice,
- isGenericProtocol: !isPrivateProtocol,
- isPrivateProtocol
- }
- return {
- ...pageState,
- activeParamView: resolveActiveParamView(currentData.activeParamView)
- }
- }
- function getTransportPageState(transportState = transport.getState()) {
- return {
- connectedDevice: transportState.connectedDevice
- }
- }
- function createGenericModbusDialogState(overrides = {}) {
- const registerType = getGenericOption(genericModbusService.REGISTER_TYPE_OPTIONS, 0)
- const dataType = getGenericOption(genericModbusService.DATA_TYPE_OPTIONS, 0)
- return {
- cancelText: '取消',
- confirmText: '确认',
- dataTypeIndex: 0,
- dataTypeText: dataType.label || '',
- groupId: '',
- groupName: '',
- mode: '',
- name: '',
- quantity: '1',
- registerIndex: -1,
- registerTypeIndex: 0,
- registerTypeText: registerType.label || '',
- remark: '',
- startAddress: '0000',
- title: '',
- textByteLength: '32',
- showTextLength: false,
- unit: '',
- visible: false,
- maxValue: '',
- minValue: '',
- addressText: '',
- displayValue: '',
- rawValueText: '',
- showDataType: false,
- showRange: false,
- showUnit: false,
- readOnly: false,
- parsedStructRegisters: [],
- structDefinition: '',
- structParsedSummary: '',
- ...overrides
- }
- }
- function createGenericGroupDialogState(group) {
- const isEdit = !!group
- const registerTypeIndex = isEdit ? (group.registerTypeIndex || 0) : 0
- const registerType = getGenericOption(genericModbusService.REGISTER_TYPE_OPTIONS, registerTypeIndex)
- return createGenericModbusDialogState({
- confirmText: isEdit ? '保存' : '确认',
- groupId: isEdit ? group.id : '',
- groupName: isEdit ? group.name : '寄存器组',
- layout: isEdit ? (group.layout || 'register') : 'register',
- mode: isEdit ? 'editGroup' : 'createGroup',
- quantity: isEdit ? String(group.quantity || 1) : '1',
- registerTypeIndex,
- registerTypeText: registerType.label || '',
- startAddress: isEdit && group.startAddressText ? group.startAddressText.replace(/^0x/i, '') : '0000',
- title: isEdit ? '编辑寄存器组' : '添加寄存器组',
- visible: true
- })
- }
- function createGenericRegisterDialogState(mode, group, register, registerIndex) {
- const isView = mode === 'viewRegister'
- const dataTypeIndex = register.dataTypeIndex || 0
- const dataType = getGenericOption(genericModbusService.DATA_TYPE_OPTIONS, dataTypeIndex)
- return createGenericModbusDialogState({
- cancelText: isView ? '关闭' : '取消',
- confirmText: isView ? '' : '保存',
- dataTypeIndex,
- dataTypeText: register.dataTypeText || dataType.label || '',
- groupId: group.id,
- groupName: group.name,
- mode,
- name: register.name,
- registerIndex,
- registerTypeIndex: group.registerTypeIndex || 0,
- remark: register.remark || '',
- startAddress: group.startAddressText ? group.startAddressText.replace(/^0x/i, '') : '0000',
- title: isView ? '寄存器信息' : '寄存器配置',
- textByteLength: String(register.textByteLength || '32'),
- showTextLength: !!register.showTextLength,
- unit: register.unit || '',
- visible: true,
- maxValue: register.maxValue || '',
- minValue: register.minValue || '',
- addressText: register.addressRangeText || register.addressText || '',
- displayValue: register.displayValue || '',
- rawValueText: register.rawValueText || '--',
- sourceMetaText: register.sourceMetaText || '',
- showDataType: !!register.showDataType,
- showRange: !!register.showRange,
- showUnit: !!register.showUnit,
- readOnly: isView
- })
- }
- function getGenericDialogDataTypeState(dialog, dataTypeOptions, dataTypeIndex) {
- const dataType = getGenericOption(dataTypeOptions, dataTypeIndex)
- const isTextType = dataType.kind === 'text'
- const showUnit = dataType.kind === 'number' && dataType.key !== 'hex'
- return {
- dataTypeIndex,
- dataTypeText: dataType.label || '',
- maxValue: isTextType ? '' : dialog.maxValue,
- minValue: isTextType ? '' : dialog.minValue,
- showRange: !isTextType,
- showTextLength: isTextType,
- showUnit,
- textByteLength: isTextType ? (dialog.textByteLength || '32') : dialog.textByteLength,
- unit: showUnit ? dialog.unit : ''
- }
- }
- function createGenericGroupConfig(dialog) {
- const registers = Array.isArray(dialog.parsedStructRegisters)
- ? dialog.parsedStructRegisters
- : []
- return {
- groupName: dialog.groupName,
- layout: registers.length ? 'struct' : (dialog.layout || 'register'),
- quantity: registers.length ? String(registers.length) : dialog.quantity,
- registerTypeIndex: dialog.registerTypeIndex,
- startAddress: dialog.startAddress,
- ...(registers.length ? {
- registers: registers.map((register) => ({
- bitOffset: register.bitOffset,
- bitWidth: register.bitWidth,
- byteStart: register.byteStart,
- dataType: register.dataType,
- isBitField: !!register.isBitField,
- isStructField: true,
- name: register.name,
- structByteLength: register.structByteLength,
- textByteLength: register.textByteLength
- }))
- } : {})
- }
- }
- function createGenericRegisterChangedData(dialog, dataTypeOptions) {
- const dataType = getGenericOption(dataTypeOptions, dialog.dataTypeIndex)
- const isTextType = dataType.kind === 'text'
- const showUnit = dataType.kind === 'number' && dataType.key !== 'hex'
- return {
- name: dialog.name,
- dataType: dataType.key,
- maxValue: isTextType ? '' : dialog.maxValue,
- minValue: isTextType ? '' : dialog.minValue,
- remark: dialog.remark,
- textByteLength: isTextType ? dialog.textByteLength : '',
- unit: showUnit ? dialog.unit : ''
- }
- }
- function findGenericGroup(groups, groupId) {
- return (groups || []).find((item) => item.id === groupId) || null
- }
- function findGenericRegister(groups, groupId, registerIndex) {
- const group = findGenericGroup(groups, groupId)
- const register = group && group.registers ? group.registers[registerIndex] : null
- return {
- group,
- register
- }
- }
- function getActiveGenericGroup(groups, groupId) {
- return findGenericGroup(groups, groupId) || null
- }
- module.exports = {
- createGenericGroupConfig,
- createGenericGroupDialogState,
- createGenericModbusDialogState,
- createGenericRegisterChangedData,
- createGenericRegisterDialogState,
- findGenericGroup,
- findGenericRegister,
- getActiveGenericGroup,
- getGenericDialogDataTypeState,
- getGenericOption,
- getPageState,
- getSettingsPageState,
- getTransportPageState,
- getVisiblePageState,
- resolveActiveParamView
- }
|