tscircuit/ti

ti tscircuit library

Version
1.0.195
License
unset
Stars
0

system-block-ui/src/model/system-block-examples.ts

import { createConsumerWirelessModuleDesign } from "./consumer-wireless-module-design";
import type {
  BlockInstance,
  LogicalConnection,
  SubcircuitDefinition,
} from "./types";

export const DEFAULT_SYSTEM_BLOCK_EXAMPLE_ID = "consumer-wireless-module";

export interface SystemBlockExampleGraph {
  blocks: readonly BlockInstance[];
  connections: readonly LogicalConnection[];
}

export interface SystemBlockExample {
  id: string;
  title: string;
  /** Repository-relative circuit which this editable diagram represents. */
  sourcePath: `examples/${string}.circuit.tsx`;
  graph: SystemBlockExampleGraph;
}

const componentId = (
  catalog: readonly SubcircuitDefinition[],
  componentName: string,
): string => {
  const definition = catalog.find(
    (candidate) => candidate.componentName === componentName,
  );
  if (!definition)
    throw new Error(`Missing catalog entry for ${componentName}`);
  return definition.id;
};

const createBluetoothSpeakerDesign = (
  catalog: readonly SubcircuitDefinition[],
): SystemBlockExampleGraph => ({
  blocks: [
    {
      id: "charger",
      name: "charger",
      definitionId: componentId(catalog, "BatteryManagement_BQ24074"),
      position: { x: 40, y: 165 },
    },
    {
      id: "power_1v8",
      name: "power_1v8",
      definitionId: componentId(catalog, "PowerManagement_TPS7A2018"),
      position: { x: 350, y: 35 },
    },
    {
      id: "bluetooth_controller",
      name: "bluetooth_controller",
      definitionId: componentId(catalog, "BluetoothController_CC2564C"),
      position: { x: 660, y: 35 },
    },
    {
      id: "bluetooth_host",
      name: "bluetooth_host",
      definitionId: componentId(catalog, "BluetoothAudioHost_MSP430F5229"),
      position: { x: 660, y: 295 },
    },
    {
      id: "audio_amplifier",
      name: "audio_amplifier",
      definitionId: componentId(catalog, "AudioAmplifier_TAS2505"),
      position: { x: 970, y: 165 },
    },
  ],
  connections: [
    {
      id: "charger_to_power_1v8",
      fromBlockId: "charger",
      toBlockId: "power_1v8",
      kind: "power",
    },
    {
      id: "charger_to_bluetooth_controller",
      fromBlockId: "charger",
      toBlockId: "bluetooth_controller",
      kind: "power",
    },
    {
      id: "charger_to_audio_amplifier",
      fromBlockId: "charger",
      toBlockId: "audio_amplifier",
      kind: "power",
    },
    {
      id: "power_1v8_to_bluetooth_controller",
      fromBlockId: "power_1v8",
      toBlockId: "bluetooth_controller",
      kind: "power",
    },
    {
      id: "power_1v8_to_bluetooth_host",
      fromBlockId: "power_1v8",
      toBlockId: "bluetooth_host",
      kind: "power",
    },
    {
      id: "power_1v8_to_audio_amplifier",
      fromBlockId: "power_1v8",
      toBlockId: "audio_amplifier",
      kind: "power",
    },
    {
      id: "bluetooth_host_to_controller",
      fromBlockId: "bluetooth_host",
      toBlockId: "bluetooth_controller",
      kind: "data",
      protocol: "hci-uart",
    },
    {
      id: "bluetooth_host_to_audio_amplifier",
      fromBlockId: "bluetooth_host",
      toBlockId: "audio_amplifier",
      kind: "data",
      protocol: "i2c",
    },
    {
      id: "bluetooth_controller_to_audio_amplifier",
      fromBlockId: "bluetooth_controller",
      toBlockId: "audio_amplifier",
      kind: "data",
      protocol: "i2s",
    },
  ],
});

const createPowerBankDesign = (
  catalog: readonly SubcircuitDefinition[],
): SystemBlockExampleGraph => ({
  blocks: [
    {
      id: "battery_management",
      name: "battery_management",
      definitionId: componentId(catalog, "BatteryManagement_2to4Cell_BQ40Z60"),
      position: { x: 690, y: 585 },
    },
    {
      id: "battery_charging",
      name: "battery_charging",
      definitionId: componentId(
        catalog,
        "BatteryCharging_2to5CellNVDCBuckBoost_BQ25731",
      ),
      position: { x: 630, y: 150 },
    },
    {
      id: "system_power",
      name: "system_power",
      definitionId: componentId(catalog, "BoostConverter_TPS61236"),
      position: { x: 430, y: 885 },
    },
    {
      id: "microcontroller",
      name: "microcontroller",
      definitionId: componentId(catalog, "Microcontroller_MSP430G2332"),
      position: { x: 0, y: 540 },
    },
    {
      id: "usb_c_output",
      name: "usb_c_output",
      definitionId: componentId(
        catalog,
        "USBC_PowerDeliveryProgrammablePowerSupply_TPS61288",
      ),
      position: { x: 300, y: 110 },
    },
  ],
  connections: [
    {
      id: "power_battery_management_to_charging",
      fromBlockId: "battery_management",
      toBlockId: "battery_charging",
      kind: "power",
    },
    {
      id: "power_charging_to_system_power",
      fromBlockId: "battery_charging",
      toBlockId: "system_power",
      kind: "power",
    },
    {
      id: "power_charging_to_usb_c_output",
      fromBlockId: "battery_charging",
      toBlockId: "usb_c_output",
      kind: "power",
    },
    {
      id: "power_system_power_to_microcontroller",
      fromBlockId: "system_power",
      toBlockId: "microcontroller",
      kind: "power",
    },
    {
      id: "data_i2c_charger",
      fromBlockId: "microcontroller",
      toBlockId: "battery_charging",
      kind: "data",
      protocol: "i2c",
    },
    {
      id: "data_i2c_battery_management",
      fromBlockId: "microcontroller",
      toBlockId: "battery_management",
      kind: "data",
      protocol: "i2c",
    },
    {
      id: "data_boost_control",
      fromBlockId: "microcontroller",
      toBlockId: "system_power",
      kind: "data",
      protocol: "gpio",
    },
  ],
});

const createRearviewMirrorDesign = (
  catalog: readonly SubcircuitDefinition[],
): SystemBlockExampleGraph => ({
  blocks: [
    {
      id: "power_supply",
      name: "power_supply",
      definitionId: componentId(catalog, "PowerSupply_LM74202_TPS7E81_Q1"),
      schX: -3.6,
      position: { x: 40, y: 365 },
    },
    {
      id: "communication_interface",
      name: "communication_interface",
      definitionId: componentId(
        catalog,
        "CommunicationInterface_TCAN1042_TIDA01428",
      ),
      position: { x: 350, y: 35 },
    },
    {
      id: "microcontroller",
      name: "microcontroller",
      definitionId: componentId(catalog, "Microcontroller_MSPM0G3507"),
      position: { x: 660, y: 365 },
    },
    {
      id: "mirror_driver",
      name: "mirror_driver",
      definitionId: componentId(
        catalog,
        "ElectrochromicMirrorDriver_TIDA01539",
      ),
      position: { x: 970, y: 35 },
    },
    {
      id: "light_sensor",
      name: "light_sensor",
      definitionId: componentId(catalog, "LightSensor_OPT3001_TIDA01539"),
      position: { x: 970, y: 365 },
    },
    {
      id: "lamp_driver",
      name: "lamp_driver",
      definitionId: componentId(catalog, "LampDriver_TPS92638_TIDA00356"),
      position: { x: 970, y: 695 },
    },
    {
      id: "temperature_sensor",
      name: "temperature_sensor",
      definitionId: componentId(catalog, "TemperatureSensor_LM50HV_Q1"),
      position: { x: 350, y: 695 },
    },
  ],
  connections: [
    {
      id: "power_3v3_to_communication",
      fromBlockId: "power_supply",
      toBlockId: "communication_interface",
      kind: "power",
      protocol: "logic-3v3",
    },
    {
      id: "power_3v3_to_microcontroller",
      fromBlockId: "power_supply",
      toBlockId: "microcontroller",
      kind: "power",
      protocol: "logic-3v3",
    },
    {
      id: "power_3v3_to_mirror_driver",
      fromBlockId: "power_supply",
      toBlockId: "mirror_driver",
      kind: "power",
      protocol: "logic-3v3",
    },
    {
      id: "power_3v3_to_light_sensor",
      fromBlockId: "power_supply",
      toBlockId: "light_sensor",
      kind: "power",
      protocol: "logic-3v3",
    },
    {
      id: "power_3v3_to_lamp_driver",
      fromBlockId: "power_supply",
      toBlockId: "lamp_driver",
      kind: "power",
      protocol: "logic-3v3",
    },
    {
      id: "power_3v3_to_temperature_sensor",
      fromBlockId: "power_supply",
      toBlockId: "temperature_sensor",
      kind: "power",
      protocol: "logic-3v3",
    },
    {
      id: "power_protected_to_mirror_driver",
      fromBlockId: "power_supply",
      toBlockId: "mirror_driver",
      kind: "power",
      protocol: "protected-vehicle-power",
    },
    {
      id: "power_protected_to_lamp_driver",
      fromBlockId: "power_supply",
      toBlockId: "lamp_driver",
      kind: "power",
      protocol: "protected-vehicle-power",
    },
    {
      id: "data_can_controller",
      fromBlockId: "microcontroller",
      toBlockId: "communication_interface",
      kind: "data",
      protocol: "can-controller",
    },
    {
      id: "data_i2c_mirror_driver",
      fromBlockId: "microcontroller",
      toBlockId: "mirror_driver",
      kind: "data",
      protocol: "i2c",
    },
    {
      id: "data_i2c_light_sensor",
      fromBlockId: "microcontroller",
      toBlockId: "light_sensor",
      kind: "data",
      protocol: "i2c",
    },
    {
      id: "data_temperature_sense",
      fromBlockId: "temperature_sensor",
      toBlockId: "microcontroller",
      kind: "data",
      protocol: "analog-temperature",
    },
    {
      id: "data_light_alerts",
      fromBlockId: "light_sensor",
      toBlockId: "microcontroller",
      kind: "data",
      protocol: "ambient-light-alerts",
    },
    {
      id: "data_mirror_control",
      fromBlockId: "microcontroller",
      toBlockId: "mirror_driver",
      kind: "data",
      protocol: "mirror-control",
    },
    {
      id: "data_lamp_control",
      fromBlockId: "microcontroller",
      toBlockId: "lamp_driver",
      kind: "data",
      protocol: "lamp-control",
    },
    {
      id: "data_power_monitor",
      fromBlockId: "power_supply",
      toBlockId: "microcontroller",
      kind: "data",
      protocol: "power-monitor",
    },
  ],
});

const createSeatPositionModuleDesign = (
  catalog: readonly SubcircuitDefinition[],
): SystemBlockExampleGraph => ({
  blocks: [
    {
      id: "power_supply",
      name: "power_supply",
      definitionId: componentId(catalog, "PowerSupply_LM5050_TIDA00992"),
      position: { x: 820, y: 20 },
    },
    {
      id: "communication_interface",
      name: "communication_interface",
      definitionId: componentId(
        catalog,
        "CommunicationInterface_TCAN1042_TIDA01428",
      ),
      position: { x: 840, y: 280 },
    },
    {
      id: "microcontroller",
      name: "microcontroller",
      definitionId: componentId(
        catalog,
        "Microcontroller_MSPM0L1306Q1_TIDA020065",
      ),
      position: { x: 430, y: 295 },
    },
    {
      id: "motor_driver",
      name: "motor_driver",
      definitionId: componentId(catalog, "MotorDriver_DRV8305_TIDA01330"),
      position: { x: 1240, y: 570 },
    },
    {
      id: "position_feedback",
      name: "position_feedback",
      definitionId: componentId(catalog, "PositionFeedback_DRV5013_TIDA01389"),
      position: { x: 20, y: 310 },
    },
    {
      id: "light_driver",
      name: "light_driver",
      definitionId: componentId(catalog, "LightDriver_TIDA01330"),
      position: { x: 1220, y: 330 },
    },
  ],
  connections: [
    {
      id: "power_protected_to_motor_driver",
      fromBlockId: "power_supply",
      toBlockId: "motor_driver",
      kind: "power",
      protocol: "protected-vehicle-power",
    },
    {
      id: "power_protected_to_light_driver",
      fromBlockId: "power_supply",
      toBlockId: "light_driver",
      kind: "power",
      protocol: "protected-vehicle-power",
    },
    {
      id: "data_can_controller",
      fromBlockId: "microcontroller",
      toBlockId: "communication_interface",
      kind: "data",
      protocol: "can-controller",
    },
    {
      id: "data_position_feedback",
      fromBlockId: "position_feedback",
      toBlockId: "microcontroller",
      kind: "data",
      protocol: "seat-position-feedback",
    },
    {
      id: "data_light_control",
      fromBlockId: "microcontroller",
      toBlockId: "light_driver",
      kind: "data",
      protocol: "seat-light-control",
    },
    {
      id: "data_power_control",
      fromBlockId: "microcontroller",
      toBlockId: "power_supply",
      kind: "data",
      protocol: "seat-power-control",
    },
    {
      id: "data_motor_control",
      fromBlockId: "microcontroller",
      toBlockId: "motor_driver",
      kind: "data",
      protocol: "seat-motor-control",
    },
  ],
});

const createBloodPressureMonitorDesign = (
  catalog: readonly SubcircuitDefinition[],
): SystemBlockExampleGraph => ({
  blocks: [
    {
      id: "power",
      name: "power",
      definitionId: componentId(
        catalog,
        "PowerManagement_TPS7A2433_TIDA010266",
      ),
      position: { x: 40, y: 300 },
    },
    {
      id: "reference_2v5",
      name: "reference_2v5",
      definitionId: componentId(
        catalog,
        "VoltageReference_ATL431LI_TIDA010266",
      ),
      position: { x: 360, y: 40 },
    },
    {
      id: "analog_front_end",
      name: "analog_front_end",
      definitionId: componentId(
        catalog,
        "AnalogSignalConditioning_LMV324A_TIDA010266",
      ),
      position: { x: 680, y: 40 },
    },
    {
      id: "integrated_ina",
      name: "integrated_ina",
      definitionId: componentId(
        catalog,
        "InstrumentationAmplifier_MSPM0L1306_InternalOPA_TIDA010266",
      ),
      position: { x: 1000, y: 40 },
    },
    {
      id: "pressure_sensor",
      name: "pressure_sensor",
      definitionId: componentId(catalog, "PressureSensor_2SMPP03_TIDA010266"),
      position: { x: 360, y: 380 },
    },
    {
      id: "external_ina",
      name: "external_ina",
      definitionId: componentId(
        catalog,
        "InstrumentationAmplifier_INA350_TIDA010266",
      ),
      position: { x: 680, y: 380 },
    },
    {
      id: "microcontroller",
      name: "microcontroller",
      definitionId: componentId(
        catalog,
        "Microcontroller_MSPM0L1306_TIDA010266",
      ),
      position: { x: 1000, y: 380 },
    },
    {
      id: "motor_driver",
      name: "motor_driver",
      definitionId: componentId(catalog, "MotorDriver_DRV8210_TIDA010266"),
      position: { x: 1320, y: 380 },
    },
  ],
  connections: [
    {
      id: "power_3v3_to_reference",
      fromBlockId: "power",
      toBlockId: "reference_2v5",
      kind: "power",
      protocol: "logic-3v3",
    },
    {
      id: "power_3v3_to_analog_front_end",
      fromBlockId: "power",
      toBlockId: "analog_front_end",
      kind: "power",
      protocol: "logic-3v3",
    },
    {
      id: "power_3v3_to_external_ina",
      fromBlockId: "power",
      toBlockId: "external_ina",
      kind: "power",
      protocol: "logic-3v3",
    },
    {
      id: "power_3v3_to_microcontroller",
      fromBlockId: "power",
      toBlockId: "microcontroller",
      kind: "power",
      protocol: "logic-3v3",
    },
    {
      id: "power_3v3_to_motor_driver",
      fromBlockId: "power",
      toBlockId: "motor_driver",
      kind: "power",
      protocol: "logic-3v3",
    },
    {
      id: "reference_2v5_to_analog_front_end",
      fromBlockId: "reference_2v5",
      toBlockId: "analog_front_end",
      kind: "power",
      protocol: "precision-reference-2v5",
    },
    {
      id: "reference_2v5_to_microcontroller",
      fromBlockId: "reference_2v5",
      toBlockId: "microcontroller",
      kind: "power",
      protocol: "precision-reference-2v5",
    },
    {
      id: "reference_1v25_to_external_ina",
      fromBlockId: "analog_front_end",
      toBlockId: "external_ina",
      kind: "power",
      protocol: "buffered-reference-1v25",
    },
    {
      id: "reference_1v25_to_integrated_ina",
      fromBlockId: "analog_front_end",
      toBlockId: "integrated_ina",
      kind: "data",
      protocol: "buffered-reference-signal",
    },
    {
      id: "analog_front_end_to_pressure_sensor",
      fromBlockId: "analog_front_end",
      toBlockId: "pressure_sensor",
      kind: "data",
      protocol: "pressure-sensor-bias",
    },
    {
      id: "pressure_sensor_to_external_ina",
      fromBlockId: "pressure_sensor",
      toBlockId: "external_ina",
      kind: "data",
      protocol: "pressure-bridge",
    },
    {
      id: "microcontroller_to_integrated_ina",
      fromBlockId: "microcontroller",
      toBlockId: "integrated_ina",
      kind: "data",
      protocol: "internal-opa",
    },
    {
      id: "microcontroller_to_motor_driver",
      fromBlockId: "microcontroller",
      toBlockId: "motor_driver",
      kind: "data",
      protocol: "motor-control",
    },
  ],
});

/** Editable system diagrams backed by complete circuits in the root examples directory. */
export const createSystemBlockExamples = (
  catalog: readonly SubcircuitDefinition[],
): readonly SystemBlockExample[] => [
  {
    id: DEFAULT_SYSTEM_BLOCK_EXAMPLE_ID,
    title: "Consumer Wireless Module",
    sourcePath: "examples/ConsumerWirelessModule.circuit.tsx",
    graph: createConsumerWirelessModuleDesign(catalog),
  },
  {
    id: "bluetooth-speaker",
    title: "Bluetooth Speaker",
    sourcePath: "examples/BluetoothSpeaker_CC2564C_TAS2505.circuit.tsx",
    graph: createBluetoothSpeakerDesign(catalog),
  },
  {
    id: "power-bank",
    title: "Power Bank",
    sourcePath:
      "examples/PersonalElectronics_ConnectedPeripheralAndPrinters_Powerbank.circuit.tsx",
    graph: createPowerBankDesign(catalog),
  },
  {
    id: "rearview-mirror-module",
    title: "Rearview Mirror Module",
    sourcePath: "examples/RearviewMirrorModule.circuit.tsx",
    graph: createRearviewMirrorDesign(catalog),
  },
  {
    id: "seat-position-module",
    title: "Seat Position Module",
    sourcePath: "examples/SeatPositionModule.circuit.tsx",
    graph: createSeatPositionModuleDesign(catalog),
  },
  {
    id: "tida-010266-blood-pressure-monitor",
    title: "Blood Pressure Monitor",
    sourcePath:
      "examples/BloodPressureAndHeartRateMonitor_TIDA010266.circuit.tsx",
    graph: createBloodPressureMonitorDesign(catalog),
  },
];