230 lines
5.4 KiB
Python
230 lines
5.4 KiB
Python
"""Shared constants for protocol, validation, transport, and GUI defaults."""
|
|
|
|
# ---- Transport / timing
|
|
|
|
BAUDRATE = 115200
|
|
SERIAL_TIMEOUT_SEC = 1.0
|
|
WAIT_AFTER_SEND_SEC = 0.15
|
|
|
|
GUI_POLL_INTERVAL_MS = 150
|
|
GUI_STATUS_INTERVAL_MS = 1000
|
|
|
|
# ---- Packet sizes
|
|
|
|
GET_DATA_TOTAL_LENGTH = 30
|
|
SEND_PARAMS_TOTAL_LENGTH = 30
|
|
SHORT_CONTROL_TOTAL_LENGTH = 10
|
|
WAVE_DATA_TOTAL_LENGTH = 30
|
|
PROFILE_SAVE_CONTROL_TOTAL_LENGTH = 30
|
|
PROFILE_SAVE_DATA_TOTAL_LENGTH = 30
|
|
SHORT_COMMAND_LENGTH = 2
|
|
STATUS_RESPONSE_LENGTH = 2
|
|
|
|
# ---- Supported firmware commands
|
|
|
|
CMD_DECODE_ENABLE = 0x1111
|
|
CMD_DEFAULT_ENABLE = 0x2222
|
|
CMD_TRANS_ENABLE = 0x4444
|
|
CMD_STATE = 0x6666
|
|
CMD_PROFILE_SAVE_CONTROL = 0x7777
|
|
CMD_AD9102_CONTROL = 0x8888
|
|
CMD_AD9833_CONTROL = 0x9999
|
|
CMD_DS1809_CONTROL = 0xAAAA
|
|
CMD_STM32_DAC_CONTROL = 0xBBBB
|
|
CMD_AD9102_WAVE_CONTROL = 0xCCCC
|
|
CMD_AD9102_WAVE_DATA = 0xDDDD
|
|
CMD_PROFILE_SAVE_DATA = 0xEEEE
|
|
|
|
# ---- Setup-word bit layout from firmware app_decode_work_packet()
|
|
|
|
SETUP_WORK_ENABLED = 1 << 0
|
|
SETUP_SUPPLY_5V1_ENABLED = 1 << 1
|
|
SETUP_SUPPLY_5V2_ENABLED = 1 << 2
|
|
SETUP_LASER1_ENABLED = 1 << 3
|
|
SETUP_LASER2_ENABLED = 1 << 4
|
|
SETUP_REFERENCE1_ENABLED = 1 << 5
|
|
SETUP_REFERENCE2_ENABLED = 1 << 6
|
|
SETUP_TEC1_ENABLED = 1 << 7
|
|
SETUP_TEC2_ENABLED = 1 << 8
|
|
SETUP_TEMP_SENSOR1_ENABLED = 1 << 9
|
|
SETUP_TEMP_SENSOR2_ENABLED = 1 << 10
|
|
SETUP_PID1_FROM_HOST = 1 << 12
|
|
SETUP_PID2_FROM_HOST = 1 << 13
|
|
|
|
DEFAULT_SETUP_WORD = (
|
|
SETUP_WORK_ENABLED
|
|
| SETUP_SUPPLY_5V1_ENABLED
|
|
| SETUP_SUPPLY_5V2_ENABLED
|
|
| SETUP_LASER1_ENABLED
|
|
| SETUP_LASER2_ENABLED
|
|
| SETUP_REFERENCE1_ENABLED
|
|
| SETUP_REFERENCE2_ENABLED
|
|
| SETUP_TEC1_ENABLED
|
|
| SETUP_TEC2_ENABLED
|
|
| SETUP_TEMP_SENSOR1_ENABLED
|
|
| SETUP_TEMP_SENSOR2_ENABLED
|
|
| SETUP_PID1_FROM_HOST
|
|
| SETUP_PID2_FROM_HOST
|
|
)
|
|
|
|
# ---- Status-byte flags from firmware app_types.h
|
|
|
|
STATUS_FLAG_SD_ERROR = 0x01
|
|
STATUS_FLAG_UART_ERROR = 0x02
|
|
STATUS_FLAG_UART_DECODE_ERROR = 0x04
|
|
STATUS_FLAG_TEC1_ERROR = 0x08
|
|
STATUS_FLAG_TEC2_ERROR = 0x10
|
|
STATUS_FLAG_DEFAULT_ERROR = 0x20
|
|
STATUS_FLAG_AD9102_ERROR = 0x80
|
|
|
|
STATUS_DESCRIPTIONS = {
|
|
STATUS_FLAG_SD_ERROR: "SD card read/write error.",
|
|
STATUS_FLAG_UART_ERROR: "UART framing or header error.",
|
|
STATUS_FLAG_UART_DECODE_ERROR: "Command payload validation error.",
|
|
STATUS_FLAG_TEC1_ERROR: "Laser 1 TEC driver overheat.",
|
|
STATUS_FLAG_TEC2_ERROR: "Laser 2 TEC driver overheat.",
|
|
STATUS_FLAG_DEFAULT_ERROR: "Device reset/default handling error.",
|
|
STATUS_FLAG_AD9102_ERROR: "AD9102 configuration or waveform error.",
|
|
}
|
|
|
|
# ---- Peripheral control flags from firmware app_types.h
|
|
|
|
AD9102_FLAG_ENABLE = 0x0001
|
|
AD9102_FLAG_TRIANGLE = 0x0002
|
|
AD9102_FLAG_SRAM = 0x0004
|
|
AD9102_FLAG_SRAM_FORMAT_ALT = 0x0008
|
|
|
|
AD9833_FLAG_ENABLE = 0x0001
|
|
AD9833_FLAG_TRIANGLE = 0x0002
|
|
|
|
DS1809_FLAG_INCREMENT = 0x0001
|
|
DS1809_FLAG_DECREMENT = 0x0002
|
|
|
|
STM32_DAC_FLAG_ENABLE = 0x0001
|
|
|
|
AD9102_WAVE_OPCODE_BEGIN = 0x0001
|
|
AD9102_WAVE_OPCODE_COMMIT = 0x0002
|
|
AD9102_WAVE_OPCODE_CANCEL = 0x0003
|
|
|
|
PROFILE_SAVE_OPCODE_BEGIN = 0x0001
|
|
PROFILE_SAVE_OPCODE_COMMIT = 0x0002
|
|
PROFILE_SAVE_OPCODE_CANCEL = 0x0003
|
|
|
|
PROFILE_SAVE_SECTION_PROFILE_TEXT = 0x0001
|
|
PROFILE_SAVE_SECTION_WAVEFORM_TEXT = 0x0002
|
|
|
|
# ---- Physical constants from the existing conversion formulas
|
|
|
|
VREF = 2.5
|
|
|
|
R1 = 10000
|
|
R2 = 2200
|
|
R3 = 27000
|
|
R4 = 30000
|
|
R5 = 27000
|
|
R6 = 56000
|
|
|
|
RREF = 30
|
|
|
|
R7 = 22000
|
|
R8 = 22000
|
|
R9 = 5100
|
|
R10 = 180000
|
|
|
|
BETA_INTERNAL = 3900
|
|
BETA_EXTERNAL = 3455
|
|
T0_K = 298
|
|
R0 = 10000
|
|
|
|
ADC_BITS_16 = 65535
|
|
ADC_BITS_12 = 4095
|
|
|
|
U3V3_COEFF = 1.221e-3
|
|
U5V_COEFF = 1.8315e-3
|
|
U7V_COEFF = 6.72e-3
|
|
|
|
# ---- Validation limits
|
|
|
|
TEMP_MIN_C = 15.0
|
|
TEMP_MAX_C = 40.0
|
|
|
|
CURRENT_MIN_MA = 15.0
|
|
CURRENT_MAX_MA = 60.0
|
|
|
|
AD9102_SAW_STEP_MIN = 1
|
|
AD9102_SAW_STEP_MAX = 63
|
|
AD9102_PAT_BASE_MIN = 0
|
|
AD9102_PAT_BASE_MAX = 15
|
|
AD9102_PAT_PERIOD_MIN = 0
|
|
AD9102_PAT_PERIOD_MAX = 65535
|
|
AD9102_SRAM_SAMPLE_MIN = 2
|
|
AD9102_SRAM_SAMPLE_MAX = 4096
|
|
AD9102_SRAM_HOLD_MIN = 0
|
|
AD9102_SRAM_HOLD_MAX = 15
|
|
AD9102_SRAM_AMPLITUDE_MIN = 0
|
|
AD9102_SRAM_AMPLITUDE_MAX = 8191
|
|
AD9102_WAVE_SAMPLE_MIN = -8192
|
|
AD9102_WAVE_SAMPLE_MAX = 8191
|
|
AD9102_WAVE_MAX_CHUNK_SAMPLES = 12
|
|
AD9102_CLOCK_HZ = 150_000_000
|
|
|
|
AD9833_FREQ_WORD_MIN = 0
|
|
AD9833_FREQ_WORD_MAX = 0x0FFFFFFF
|
|
AD9833_MCLK_HZ = 20_000_000
|
|
AD9833_OUTPUT_FREQ_MIN_HZ = 0
|
|
AD9833_OUTPUT_FREQ_MAX_HZ = AD9833_MCLK_HZ // 2
|
|
|
|
DS1809_COUNT_MIN = 1
|
|
DS1809_COUNT_MAX = 64
|
|
DS1809_PULSE_MS_MIN = 1
|
|
DS1809_PULSE_MS_MAX = 500
|
|
DS1809_PROFILE_POSITION_MIN = 0
|
|
DS1809_PROFILE_POSITION_MAX = 63
|
|
|
|
STM32_DAC_CODE_MIN = 0
|
|
STM32_DAC_CODE_MAX = 4095
|
|
|
|
# ---- Rail tolerances
|
|
|
|
VOLT_3V3_MIN = 3.1
|
|
VOLT_3V3_MAX = 3.5
|
|
VOLT_5V_MIN = 4.8
|
|
VOLT_5V_MAX = 5.3
|
|
VOLT_7V_MIN = 6.5
|
|
VOLT_7V_MAX = 7.5
|
|
|
|
# ---- UI / runtime defaults
|
|
|
|
DEFAULT_TEMP1_C = 28.0
|
|
DEFAULT_TEMP2_C = 29.2
|
|
DEFAULT_CURRENT1_MA = 33.0
|
|
DEFAULT_CURRENT2_MA = 60.0
|
|
|
|
DEFAULT_AD9102_SAW_STEP = 1
|
|
DEFAULT_AD9102_PAT_BASE = 2
|
|
DEFAULT_AD9102_PAT_PERIOD = 0xFFFF
|
|
DEFAULT_AD9102_SAMPLE_COUNT = 16
|
|
DEFAULT_AD9102_HOLD_CYCLES = 1
|
|
DEFAULT_AD9102_AMPLITUDE = 8191
|
|
DEFAULT_AD9102_SAW_FREQUENCY_HZ = 4577
|
|
DEFAULT_AD9102_SRAM_FREQUENCY_HZ = 9_375_000
|
|
DEFAULT_AD9833_FREQ_WORD = 0
|
|
DEFAULT_AD9833_FREQUENCY_HZ = 1_000_000
|
|
DEFAULT_DS1809_COUNT = 1
|
|
DEFAULT_DS1809_PULSE_MS = 2
|
|
DEFAULT_DS1809_PROFILE_POSITION = 39
|
|
DEFAULT_STM32_DAC_VOLT = 0.52
|
|
DEFAULT_STM32_DAC_VREF = 2.5
|
|
DEFAULT_STM32_DAC_CODE = round(
|
|
DEFAULT_STM32_DAC_VOLT / DEFAULT_STM32_DAC_VREF * STM32_DAC_CODE_MAX
|
|
)
|
|
|
|
DEFAULT_PI_P = 2560
|
|
DEFAULT_PI_I = 128
|
|
|
|
PROFILE_NAME_MAX_LENGTH = 16
|
|
PROFILE_NAME_ALLOWED_PATTERN = r"[A-Za-z0-9 _-]{1,16}"
|
|
PROFILE_SAVE_DATA_CHUNK_BYTES = 22
|
|
|
|
PLOT_POINTS = 100
|