Repository: frg-fossee/eSim-Cloud Branch: master Commit: 2d8a2e898e9d Files: 522 Total size: 4.9 MB Directory structure: gitextract_5zs9hdle/ ├── .all-contributorsrc ├── .github/ │ └── workflows/ │ ├── angularTestBuild.yml │ ├── devDockerCompose.yml │ ├── dockerTestBackend.yml │ ├── masterDockerCompose.yml │ ├── prodContainers.yml │ ├── reactEslint.yml │ └── reactTestBuild.yml ├── .gitignore ├── ArduinoFrontend/ │ ├── .editorconfig │ ├── .gitignore │ ├── Dockerfile │ ├── README.md │ ├── angular.json │ ├── e2e/ │ │ ├── protractor-ci.conf.js │ │ ├── protractor.conf.js │ │ ├── src/ │ │ │ ├── app.e2e-spec.ts │ │ │ └── app.po.ts │ │ └── tsconfig.e2e.json │ ├── package.json │ ├── src/ │ │ ├── app/ │ │ │ ├── Libs/ │ │ │ │ ├── AVR8/ │ │ │ │ │ ├── Execute.ts │ │ │ │ │ ├── IntelHex.ts │ │ │ │ │ └── Scheduler.ts │ │ │ │ ├── Battery.ts │ │ │ │ ├── CircuitElement.spec.ts │ │ │ │ ├── CircuitElement.ts │ │ │ │ ├── ConvertJSONFormat.ts │ │ │ │ ├── Download.ts │ │ │ │ ├── General.ts │ │ │ │ ├── Geometry.ts │ │ │ │ ├── ImageToByteArray.ts │ │ │ │ ├── Login.ts │ │ │ │ ├── MathUtils.ts │ │ │ │ ├── Miscellaneous.ts │ │ │ │ ├── Point.ts │ │ │ │ ├── RaphaelUtils.ts │ │ │ │ ├── SaveOffiline.ts │ │ │ │ ├── SaveOnline.ts │ │ │ │ ├── UndoUtils.ts │ │ │ │ ├── Utils.ts │ │ │ │ ├── Wire.ts │ │ │ │ ├── Workspace.ts │ │ │ │ ├── drivers/ │ │ │ │ │ └── L293D.ts │ │ │ │ ├── inputs/ │ │ │ │ │ ├── Buttons.ts │ │ │ │ │ ├── Collision.ts │ │ │ │ │ ├── GasSensor.ts │ │ │ │ │ ├── PIRSensor.ts │ │ │ │ │ ├── PhotoResistor.ts │ │ │ │ │ ├── Potentiometer.ts │ │ │ │ │ ├── Relay.ts │ │ │ │ │ ├── Slider.ts │ │ │ │ │ ├── TemperatureSensors.ts │ │ │ │ │ ├── Thermistor.ts │ │ │ │ │ └── UltrasonicSensor.ts │ │ │ │ └── outputs/ │ │ │ │ ├── Arduino.ts │ │ │ │ ├── Buzzer.ts │ │ │ │ ├── Display.ts │ │ │ │ ├── LCD/ │ │ │ │ │ ├── LCDPanel.spec.ts │ │ │ │ │ ├── LCDPanel.ts │ │ │ │ │ ├── LCDStates.ts │ │ │ │ │ ├── LCDUtils.ts │ │ │ │ │ └── MemorySchema.ts │ │ │ │ ├── Led.ts │ │ │ │ └── Motors.ts │ │ │ ├── alert/ │ │ │ │ ├── alert-modal/ │ │ │ │ │ ├── alert-modal.component.css │ │ │ │ │ ├── alert-modal.component.html │ │ │ │ │ ├── alert-modal.component.spec.ts │ │ │ │ │ └── alert-modal.component.ts │ │ │ │ ├── alert-service/ │ │ │ │ │ ├── alert.service.spec.ts │ │ │ │ │ └── alert.service.ts │ │ │ │ ├── confirm-modal/ │ │ │ │ │ ├── confirm-modal.component.css │ │ │ │ │ ├── confirm-modal.component.html │ │ │ │ │ ├── confirm-modal.component.spec.ts │ │ │ │ │ └── confirm-modal.component.ts │ │ │ │ └── option-modal/ │ │ │ │ ├── option-modal.component.css │ │ │ │ ├── option-modal.component.html │ │ │ │ └── option-modal.component.ts │ │ │ ├── api.service.spec.ts │ │ │ ├── api.service.ts │ │ │ ├── app-routing.module.ts │ │ │ ├── app.component.css │ │ │ ├── app.component.html │ │ │ ├── app.component.spec.ts │ │ │ ├── app.component.ts │ │ │ ├── app.module.ts │ │ │ ├── code-editor/ │ │ │ │ ├── code-editor.component.css │ │ │ │ ├── code-editor.component.html │ │ │ │ ├── code-editor.component.spec.ts │ │ │ │ └── code-editor.component.ts │ │ │ ├── common/ │ │ │ │ ├── SharedModule.module.ts │ │ │ │ └── material.module.ts │ │ │ ├── componentlist/ │ │ │ │ ├── componentlist.component.css │ │ │ │ ├── componentlist.component.html │ │ │ │ ├── componentlist.component.spec.ts │ │ │ │ └── componentlist.component.ts │ │ │ ├── dashboard/ │ │ │ │ ├── dashboard-routing.module.ts │ │ │ │ ├── dashboard.component.css │ │ │ │ ├── dashboard.component.html │ │ │ │ ├── dashboard.component.spec.ts │ │ │ │ ├── dashboard.component.ts │ │ │ │ └── dashboard.module.ts │ │ │ ├── exit-confirm-dialog/ │ │ │ │ ├── exit-confirm-dialog.component.css │ │ │ │ ├── exit-confirm-dialog.component.html │ │ │ │ ├── exit-confirm-dialog.component.spec.ts │ │ │ │ └── exit-confirm-dialog.component.ts │ │ │ ├── export-jsondialog/ │ │ │ │ ├── export-jsondialog.component.css │ │ │ │ ├── export-jsondialog.component.html │ │ │ │ ├── export-jsondialog.component.spec.ts │ │ │ │ └── export-jsondialog.component.ts │ │ │ ├── exportfile/ │ │ │ │ ├── exportfile.component.css │ │ │ │ ├── exportfile.component.html │ │ │ │ ├── exportfile.component.spec.ts │ │ │ │ └── exportfile.component.ts │ │ │ ├── front-page/ │ │ │ │ ├── front-page.component.css │ │ │ │ ├── front-page.component.html │ │ │ │ ├── front-page.component.spec.ts │ │ │ │ └── front-page.component.ts │ │ │ ├── gallery/ │ │ │ │ ├── gallery.component.css │ │ │ │ ├── gallery.component.html │ │ │ │ ├── gallery.component.spec.ts │ │ │ │ └── gallery.component.ts │ │ │ ├── graph/ │ │ │ │ ├── graph.component.css │ │ │ │ ├── graph.component.html │ │ │ │ └── graph.component.ts │ │ │ ├── graph-data.service.ts │ │ │ ├── graphlist/ │ │ │ │ ├── graphlist.component.css │ │ │ │ ├── graphlist.component.html │ │ │ │ └── graphlist.component.ts │ │ │ ├── header/ │ │ │ │ ├── header.component.css │ │ │ │ ├── header.component.html │ │ │ │ ├── header.component.spec.ts │ │ │ │ └── header.component.ts │ │ │ ├── layout/ │ │ │ │ ├── ArduinoCanvasInterface.ts │ │ │ │ ├── Components.ts │ │ │ │ └── PathUtils.ts │ │ │ ├── lti-form/ │ │ │ │ ├── lti-form.component.css │ │ │ │ ├── lti-form.component.html │ │ │ │ ├── lti-form.component.ts │ │ │ │ └── view-code/ │ │ │ │ ├── view-code.component.css │ │ │ │ ├── view-code.component.html │ │ │ │ └── view-code.component.ts │ │ │ ├── main-page/ │ │ │ │ ├── main-page.component.css │ │ │ │ ├── main-page.component.html │ │ │ │ ├── main-page.component.spec.ts │ │ │ │ └── main-page.component.ts │ │ │ ├── side-panel/ │ │ │ │ ├── side-panel.component.css │ │ │ │ ├── side-panel.component.html │ │ │ │ ├── side-panel.component.spec.ts │ │ │ │ └── side-panel.component.ts │ │ │ ├── simulator/ │ │ │ │ ├── save-project-dialog/ │ │ │ │ │ ├── save-project-dialog.component.html │ │ │ │ │ ├── save-project-dialog.component.spec.ts │ │ │ │ │ └── save-project-dialog.component.ts │ │ │ │ ├── simulator.component.css │ │ │ │ ├── simulator.component.html │ │ │ │ ├── simulator.component.spec.ts │ │ │ │ └── simulator.component.ts │ │ │ ├── submissionlist/ │ │ │ │ ├── submissionlist.component.css │ │ │ │ ├── submissionlist.component.html │ │ │ │ └── submissionlist.component.ts │ │ │ ├── versioning-panel/ │ │ │ │ ├── create-variation-dialog/ │ │ │ │ │ ├── create-variation-dialog.component.css │ │ │ │ │ ├── create-variation-dialog.component.html │ │ │ │ │ └── create-variation-dialog.component.ts │ │ │ │ ├── versioning-panel.component.css │ │ │ │ ├── versioning-panel.component.html │ │ │ │ └── versioning-panel.component.ts │ │ │ ├── view-component-info/ │ │ │ │ ├── view-component-info.component.css │ │ │ │ ├── view-component-info.component.html │ │ │ │ ├── view-component-info.component.spec.ts │ │ │ │ └── view-component-info.component.ts │ │ │ └── view-project/ │ │ │ ├── view-project.component.css │ │ │ ├── view-project.component.html │ │ │ ├── view-project.component.spec.ts │ │ │ └── view-project.component.ts │ │ ├── assets/ │ │ │ ├── .gitkeep │ │ │ ├── 404page.html │ │ │ ├── avr8js/ │ │ │ │ └── index.js │ │ │ ├── canvg/ │ │ │ │ ├── index.babel.js │ │ │ │ ├── index.es.js │ │ │ │ ├── index.js │ │ │ │ └── umd.js │ │ │ ├── images/ │ │ │ │ ├── ComponentmeasuresForSimulation.txt │ │ │ │ └── RGB CODE.txt │ │ │ ├── jsons/ │ │ │ │ ├── Arduino.json │ │ │ │ ├── Battery9v.json │ │ │ │ ├── Breadboard.json │ │ │ │ ├── Buzzer.json │ │ │ │ ├── CoinCell.json │ │ │ │ ├── Component.sample.json │ │ │ │ ├── L293D.json │ │ │ │ ├── L298N.json │ │ │ │ ├── LCD16X2.json │ │ │ │ ├── LED.json │ │ │ │ ├── MQ2.json │ │ │ │ ├── Motor.json │ │ │ │ ├── PIRSensor.json │ │ │ │ ├── PhotoResistor.json │ │ │ │ ├── Potentiometer.json │ │ │ │ ├── PushButton.json │ │ │ │ ├── RGBLED.json │ │ │ │ ├── Relay.json │ │ │ │ ├── Resistor.json │ │ │ │ ├── ServoMotor.json │ │ │ │ ├── SevenSegment.json │ │ │ │ ├── SlideSwitch.json │ │ │ │ ├── TMP36.json │ │ │ │ ├── Thermistor.json │ │ │ │ ├── UltrasonicSensor.json │ │ │ │ └── help.json │ │ │ └── samples/ │ │ │ └── Samples.json │ │ ├── browserslist │ │ ├── environments/ │ │ │ ├── environment.prod.ts │ │ │ └── environment.ts │ │ ├── index.html │ │ ├── karma.conf.js │ │ ├── main.ts │ │ ├── polyfills.ts │ │ ├── styles.css │ │ ├── test.ts │ │ ├── tsconfig.app.json │ │ ├── tsconfig.spec.json │ │ └── tslint.json │ ├── tsconfig.json │ └── tslint.json ├── Assembly_support.md ├── CONFIG.md ├── CONTRIBUTING.md ├── Enhancements/ │ └── Arduino/ │ └── Assembly_support.md ├── JMeter/ │ ├── README.md │ ├── libAPI.csv │ ├── libAPI.jmx │ └── simulationAPI.jmx ├── LICENSE ├── Nginx/ │ ├── conf.d/ │ │ └── local.conf │ ├── dev.conf.d/ │ │ └── local.conf │ └── static_pages/ │ └── index/ │ ├── css/ │ │ ├── normalize.css │ │ └── skeleton.css │ └── index.html ├── README.md ├── ansible/ │ ├── ansible-playbook.yml │ ├── configure-containers.yml │ └── configure-instance.yml ├── docker-compose.dev.yml ├── docker-compose.prod.yml ├── docs/ │ ├── arduino/ │ │ ├── components.rst │ │ └── index.rst │ ├── arduinoCloud/ │ │ ├── features.rst │ │ ├── flow.rst │ │ ├── index.rst │ │ └── screenshots.rst │ ├── conf.py │ ├── contribute/ │ │ ├── Contributing.rst │ │ ├── ContributingGuidelines.rst │ │ ├── NewIssue.rst │ │ ├── PullRequest.rst │ │ └── index.rst │ ├── contributors/ │ │ └── index.rst │ ├── developerDocs/ │ │ ├── apidocs.rst │ │ ├── dbswitch.rst │ │ └── index.rst │ ├── docker/ │ │ ├── env_variables.rst │ │ ├── index.rst │ │ └── installation.rst │ ├── eSim_on_Cloud/ │ │ ├── eSimGallery.rst │ │ ├── features.rst │ │ ├── flow.rst │ │ ├── index.rst │ │ └── screenshots.rst │ ├── index.rst │ ├── overview/ │ │ └── index.rst │ ├── requirements.txt │ └── specs/ │ └── swagger_openapi.yml ├── eda-frontend/ │ ├── .dockerignore │ ├── .eslintignore │ ├── .eslintrc.json │ ├── .gitignore │ ├── Dockerfile │ ├── README.md │ ├── package.json │ ├── public/ │ │ ├── index.html │ │ └── manifest.json │ └── src/ │ ├── App.js │ ├── App.test.js │ ├── __snapshots__/ │ │ └── App.test.js.snap │ ├── components/ │ │ ├── Dashboard/ │ │ │ ├── DashboardHome.js │ │ │ ├── DashboardOtherProjects.js │ │ │ ├── DashboardSidebar.js │ │ │ ├── ProgressPanel.js │ │ │ ├── ProjectCard.js │ │ │ ├── SchematicCard.js │ │ │ └── SchematicsList.js │ │ ├── LTI/ │ │ │ ├── CompareGraph.js │ │ │ ├── Helper/ │ │ │ │ └── Testcase.js │ │ │ ├── LTI.css │ │ │ ├── LTI.js │ │ │ ├── SubmissionTable.js │ │ │ └── SubmitResults.js │ │ ├── Project/ │ │ │ ├── ChangeStatus.js │ │ │ ├── CreateProject.js │ │ │ ├── ProjectSimulationParameters.js │ │ │ ├── ProjectTimeline.js │ │ │ └── ReportComponent.js │ │ ├── SchematicEditor/ │ │ │ ├── ComponentProperties.js │ │ │ ├── ComponentSidebar.js │ │ │ ├── Header.js │ │ │ ├── Helper/ │ │ │ │ ├── ComponentDrag.js │ │ │ │ ├── ComponentParametersData.js │ │ │ │ ├── KeyboardShorcuts.js │ │ │ │ ├── KiCadFileUtils.js │ │ │ │ ├── SchematicEditor.css │ │ │ │ ├── SideBar.js │ │ │ │ ├── SvgParser.js │ │ │ │ └── ToolbarTools.js │ │ │ ├── PropertiesSidebar.js │ │ │ ├── RightSidebar.js │ │ │ ├── SchematicToolbar.js │ │ │ ├── SideComp.js │ │ │ ├── SimulationProperties.js │ │ │ ├── ToolbarExtension.js │ │ │ └── VersionComponent.js │ │ ├── Shared/ │ │ │ ├── Graph.js │ │ │ ├── Layout.js │ │ │ ├── LayoutMain.js │ │ │ ├── LayoutSidebar.js │ │ │ ├── Navbar.js │ │ │ ├── Notice.js │ │ │ ├── SimulationScreen.js │ │ │ ├── Snackbar.js │ │ │ └── helper/ │ │ │ └── Notice.css │ │ └── Simulator/ │ │ ├── Editor.js │ │ ├── NetlistUpload.js │ │ └── textToFile.js │ ├── index.css │ ├── index.js │ ├── pages/ │ │ ├── Account/ │ │ │ └── ChangePassword.js │ │ ├── Dashboard.js │ │ ├── Gallery.js │ │ ├── Home.js │ │ ├── LTISetup.js │ │ ├── Login.js │ │ ├── NotFound.js │ │ ├── ProjectPage.js │ │ ├── Projects.js │ │ ├── ResetPassword/ │ │ │ ├── Confirmation.js │ │ │ └── Initiation.js │ │ ├── SchematiEditor.js │ │ ├── Simulator.js │ │ ├── SubmissionPage.js │ │ └── signUp.js │ ├── redux/ │ │ ├── actions/ │ │ │ ├── accountActions.js │ │ │ ├── actions.js │ │ │ ├── authActions.js │ │ │ ├── componentPropertiesActions.js │ │ │ ├── dashboardActions.js │ │ │ ├── galleryActions.js │ │ │ ├── index.js │ │ │ ├── netlistActions.js │ │ │ ├── projectActions.js │ │ │ ├── saveSchematicActions.js │ │ │ ├── schematicEditorActions.js │ │ │ └── simulationActions.js │ │ ├── reducers/ │ │ │ ├── accountReducer.js │ │ │ ├── authReducer.js │ │ │ ├── componentPropertiesReducer.js │ │ │ ├── dashboardReducer.js │ │ │ ├── galleryReducer.js │ │ │ ├── index.js │ │ │ ├── netlistReducer.js │ │ │ ├── projectReducer.js │ │ │ ├── saveSchematicReducer.js │ │ │ ├── schematicEditorReducer.js │ │ │ └── simulationReducer.js │ │ └── store.js │ ├── serviceWorker.js │ ├── setupTests.js │ ├── theme.js │ └── utils/ │ └── Api.js ├── esim-cloud-backend/ │ ├── .gitignore │ ├── Dockerfile │ ├── README.md │ ├── arduinoAPI/ │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── apps.py │ │ ├── models.py │ │ ├── tasks.py │ │ ├── tests.py │ │ ├── urls.py │ │ └── views.py │ ├── authAPI/ │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── apps.py │ │ ├── models.py │ │ ├── serializers.py │ │ ├── templates/ │ │ │ ├── activate_user.html │ │ │ ├── css/ │ │ │ │ ├── normalize.css │ │ │ │ └── skeleton.css │ │ │ └── google_callback.html │ │ ├── tests.py │ │ ├── token.py │ │ ├── urls.py │ │ └── views.py │ ├── esimCloud/ │ │ ├── __init__.py │ │ ├── asgi.py │ │ ├── celery.py │ │ ├── settings.py │ │ ├── urls.py │ │ └── wsgi.py │ ├── generate_svg.sh │ ├── kicad-symbols/ │ │ ├── .gitattributes │ │ ├── .gitignore │ │ ├── additional/ │ │ │ ├── 4xxx.dcm │ │ │ ├── 4xxx.lib │ │ │ ├── Analog.dcm │ │ │ ├── Analog.lib │ │ │ ├── Device.dcm │ │ │ ├── Device.lib │ │ │ ├── Diode.dcm │ │ │ ├── Diode.lib │ │ │ ├── LED.dcm │ │ │ ├── LED.lib │ │ │ ├── Motor.dcm │ │ │ ├── Motor.lib │ │ │ ├── Oscillator.dcm │ │ │ ├── Oscillator.lib │ │ │ ├── Transistor_FET.dcm │ │ │ ├── Transistor_FET.lib │ │ │ ├── Transistor_IGBT.dcm │ │ │ ├── Transistor_IGBT.lib │ │ │ ├── Triac_Thyristor.dcm │ │ │ ├── Triac_Thyristor.lib │ │ │ ├── eSim_Hybrid.dcm │ │ │ └── eSim_Hybrid.lib │ │ └── default/ │ │ ├── Transistor_BJT.dcm │ │ ├── Transistor_BJT.lib │ │ ├── eSim_Sources.dcm │ │ ├── eSim_Sources.lib │ │ ├── power.dcm │ │ ├── power.lib │ │ ├── pspice.dcm │ │ └── pspice.lib │ ├── libAPI/ │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── apps.py │ │ ├── dbrouters.py │ │ ├── forms.py │ │ ├── helper/ │ │ │ ├── main.py │ │ │ ├── parser.py │ │ │ └── plotter.py │ │ ├── lib_utils.py │ │ ├── management/ │ │ │ └── commands/ │ │ │ ├── createsuperuser_noinput.py │ │ │ └── load_default_libs.py │ │ ├── models.py │ │ ├── serializers.py │ │ ├── tests.py │ │ ├── urls.py │ │ └── views.py │ ├── ltiAPI/ │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── apps.py │ │ ├── models.py │ │ ├── process_submission.py │ │ ├── serializers.py │ │ ├── templates/ │ │ │ └── ltiAPI/ │ │ │ ├── config.xml │ │ │ └── denied.html │ │ ├── tests.py │ │ ├── urls.py │ │ ├── utils.py │ │ └── views.py │ ├── manage.py │ ├── migrations.sh │ ├── publishAPI/ │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── apps.py │ │ ├── models.py │ │ ├── serializers.py │ │ ├── signals.py │ │ ├── tests.py │ │ ├── urls.py │ │ └── views.py │ ├── requirements.txt │ ├── saveAPI/ │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── apps.py │ │ ├── dbrouters.py │ │ ├── models.py │ │ ├── serializers.py │ │ ├── tests.py │ │ ├── urls.py │ │ └── views.py │ ├── simulationAPI/ │ │ ├── __init__.py │ │ ├── admin.py │ │ ├── apps.py │ │ ├── dbrouters.py │ │ ├── helpers/ │ │ │ ├── ngspice_helper.py │ │ │ ├── parse.py │ │ │ └── sample_files/ │ │ │ ├── RC.cir │ │ │ ├── data.txt │ │ │ ├── plot_data_i.txt │ │ │ └── plot_data_v.txt │ │ ├── models.py │ │ ├── serializers.py │ │ ├── tasks.py │ │ ├── templates/ │ │ │ └── admin/ │ │ │ └── runtimeStats.html │ │ ├── tests.py │ │ ├── urls.py │ │ └── views.py │ └── workflowAPI/ │ ├── __init__.py │ ├── admin.py │ ├── apps.py │ ├── fixtures/ │ │ ├── gallery_setup.json │ │ └── initial_setup.json │ ├── models.py │ ├── serializers.py │ ├── signals/ │ │ ├── __init__.py │ │ └── handlers.py │ ├── tests.py │ ├── urls.py │ ├── utils.py │ └── views.py ├── first_run.dev.sh └── guidelines-checklist/ ├── contributing-guidelines.md ├── new-issue-guidelines.md └── pullrequest-guidelines.md ================================================ FILE CONTENTS ================================================ ================================================ FILE: .all-contributorsrc ================================================ { "files": [ "README.md" ], "imageSize": 100, "commit": false, "contributors": [ { "login": "darshkpatel", "name": "Darsh Patel", "avatar_url": "https://avatars.githubusercontent.com/u/11258286?v=4", "profile": "http://darshkpatel.com", "contributions": [ "code", "doc", "infra" ] }, { "login": "dssudake", "name": "Darshan Sudake", "avatar_url": "https://avatars.githubusercontent.com/u/42094875?v=4", "profile": "https://www.linkedin.com/in/darshan-sudake-a640ba1b1/", "contributions": [ "code", "doc", "design" ] }, { "login": "felixfaisal", "name": "felixfaisal", "avatar_url": "https://avatars.githubusercontent.com/u/42486737?v=4", "profile": "https://felixfaisal.github.io/", "contributions": [ "code", "doc", "design" ] }, { "login": "rohitgeddam", "name": "rohitgeddam", "avatar_url": "https://avatars.githubusercontent.com/u/48797475?v=4", "profile": "https://github.com/rohitgeddam", "contributions": [ "code", "doc", "design" ] }, { "login": "NavonilDas", "name": "Navonil Das", "avatar_url": "https://avatars.githubusercontent.com/u/29132316?v=4", "profile": "http://navonildas.github.io/", "contributions": [ "code", "doc", "design" ] }, { "login": "meet-10", "name": "Meet10", "avatar_url": "https://avatars.githubusercontent.com/u/61341284?v=4", "profile": "https://github.com/meet-10", "contributions": [ "code", "doc", "design" ] }, { "login": "gupta-arpit", "name": "gupta-arpit", "avatar_url": "https://avatars.githubusercontent.com/u/12170429?v=4", "profile": "https://github.com/gupta-arpit", "contributions": [ "code", "design" ] }, { "login": "ikartikgautam", "name": "Kartik Gautam", "avatar_url": "https://avatars.githubusercontent.com/u/39825660?v=4", "profile": "http://ikartikgautam.web.app/", "contributions": [ "code", "doc", "design" ] }, { "login": "kumanik5661", "name": "Nikhil Kumar", "avatar_url": "https://avatars.githubusercontent.com/u/42597251?v=4", "profile": "https://github.com/kumanik5661", "contributions": [ "code", "doc", "design" ] }, { "login": "Kaustuv942", "name": "Kaustuv K Chattopadhyay", "avatar_url": "https://avatars.githubusercontent.com/u/56028031?v=4", "profile": "https://github.com/Kaustuv942", "contributions": [ "code", "doc", "design" ] }, { "login": "akshat2602", "name": "Akshat Sharma", "avatar_url": "https://avatars.githubusercontent.com/u/35724794?v=4", "profile": "https://akshat-sharma.me", "contributions": [ "code", "doc", "design" ] }, { "login": "Rugz007", "name": "Rugved Somwanshi", "avatar_url": "https://avatars.githubusercontent.com/u/16833604?v=4", "profile": "http://rugvedsomwanshi.me", "contributions": [ "code", "doc", "design" ] }, { "login": "rajatmaheshwari2512", "name": "Rajat Maheshwari", "avatar_url": "https://avatars.githubusercontent.com/u/54249328?v=4", "profile": "https://rajatmaheshwari.me/", "contributions": [ "code", "doc", "design" ] } ], "contributorsPerLine": 7, "projectName": "eSim-Cloud", "projectOwner": "frg-fossee", "repoType": "github", "repoHost": "https://github.com", "skipCi": true } ================================================ FILE: .github/workflows/angularTestBuild.yml ================================================ name: Angular Build and Tests on: push: paths: [ 'ArduinoFrontend/**' ] pull_request: paths: [ 'ArduinoFrontend/**' ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Use Node js uses: actions/setup-node@v1 with: node-version: 10.5.0 - name: Install packages,lint,build and Unit testing working-directory: ./ArduinoFrontend run: | npm install npm run lint npm run build -- --prod npm test -- --configuration=ci ================================================ FILE: .github/workflows/devDockerCompose.yml ================================================ name: Containers on: push: #Until changes are merged to master initially branches: [ develop, docker-images ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: Login to docker run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login https://docker.pkg.github.com -u ${{ github.repository_owner }} --password-stdin - name: Build the docker-compose stack run: | docker-compose -f docker-compose.dev.yml --env-file .env pull --ignore-pull-failures docker-compose -f docker-compose.dev.yml --env-file .env build - name: Run the docker-compose step run: docker-compose -f docker-compose.dev.yml --env-file .env up -d - name: Check running containers run: docker ps -a - name: Publish images run: docker-compose -f docker-compose.dev.yml --env-file .env push ================================================ FILE: .github/workflows/dockerTestBackend.yml ================================================ name: Django Build and Tests on: push: paths: [ 'esim-cloud-backend/**' ] pull_request: paths: [ 'esim-cloud-backend/**' ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Login to docker run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login https://docker.pkg.github.com -u ${{ github.repository_owner }} --password-stdin - name: Build Images run: | docker-compose -f docker-compose.dev.yml --env-file .env pull --ignore-pull-failures docker-compose -f docker-compose.dev.yml --env-file .env build - name: Run Django Test Suite run: | docker-compose -f docker-compose.dev.yml run django python manage.py test ================================================ FILE: .github/workflows/masterDockerCompose.yml ================================================ name: Containers on: push: branches: [ master, devops ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: Login to docker run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login https://docker.pkg.github.com -u ${{ github.repository_owner }} --password-stdin - name: Build the docker-compose stack run: | cp .env .env.prod docker-compose -f docker-compose.prod.yml --env-file .env.prod pull --ignore-pull-failures docker-compose -f docker-compose.prod.yml --env-file .env.prod build - name: Run the docker-compose step run: docker-compose -f docker-compose.prod.yml --env-file .env.prod up -d - name: Check running containers run: docker ps -a - name: Publish images if: github.ref == 'refs/heads/master' run: docker-compose -f docker-compose.prod.yml --env-file .env.prod push ================================================ FILE: .github/workflows/prodContainers.yml ================================================ name: Master Containers on: push: branches: [ master ] jobs: publish: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: Login to docker run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login https://docker.pkg.github.com -u ${{ github.repository_owner }} --password-stdin - name: Build the docker-compose stack run: | cp .env .env.prod docker-compose -f docker-compose.prod.yml --env-file .env.prod pull --ignore-pull-failures docker-compose -f docker-compose.prod.yml --env-file .env.prod build - name: Run the docker-compose step run: docker-compose -f docker-compose.prod.yml --env-file .env.prod up -d - name: Check running containers run: docker ps -a - name: Publish images run: docker-compose -f docker-compose.prod.yml --env-file .env.prod push ================================================ FILE: .github/workflows/reactEslint.yml ================================================ name: ESLint eda-frontend on: push: paths: [ 'eda-frontend/**' ] jobs: eslint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - uses: darshkpatel/eslint-action@master with: repo-token: ${{secrets.GITHUB_TOKEN}} source-root: 'eda-frontend' ================================================ FILE: .github/workflows/reactTestBuild.yml ================================================ name: React Build and Tests on: push: paths: [ 'eda-frontend/**' ] pull_request: paths: [ 'eda-frontend/**' ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Use Node js uses: actions/setup-node@v1 with: node-version: 10.5.0 - name: Install packages,lint,build and Unit testing working-directory: ./eda-frontend run: | export NODE_OPTIONS=--max_old_space_size=4096 npm install CI=true npm run build CI=true npm test ================================================ FILE: .gitignore ================================================ redis_data/ mysql_data/ .vscode venv env *.sqlite3 .env.prod mongo_data/ sample_lib/ symbols/* .DS_Store migrations symbol_svgs postgres_data file_storage node_modules ================================================ FILE: ArduinoFrontend/.editorconfig ================================================ # Editor configuration, see https://editorconfig.org root = true [*] charset = utf-8 indent_style = space indent_size = 2 insert_final_newline = true trim_trailing_whitespace = true [*.md] max_line_length = off trim_trailing_whitespace = false ================================================ FILE: ArduinoFrontend/.gitignore ================================================ # See http://help.github.com/ignore-files/ for more about ignoring files. # compiled output /dist /doc /documentation /tmp /out-tsc # Only exists if Bazel was run /bazel-out # dependencies /node_modules # profiling files chrome-profiler-events.json speed-measure-plugin.json # IDEs and editors /.idea .project .classpath .c9/ *.launch .settings/ *.sublime-workspace # IDE - VSCode .vscode/* !.vscode/settings.json !.vscode/tasks.json !.vscode/launch.json !.vscode/extensions.json .history/* # misc /.sass-cache /connect.lock /coverage /libpeerconnection.log npm-debug.log yarn-error.log testem.log /typings # System Files .DS_Store Thumbs.db ================================================ FILE: ArduinoFrontend/Dockerfile ================================================ FROM node:10-alpine3.11 RUN mkdir /code WORKDIR /code COPY package.json /code/package.json COPY package-lock.json /code/package-lock.json ================================================ FILE: ArduinoFrontend/README.md ================================================ # ArduinoFrontend ## Instructions * Install Packages ```bash npm install ``` * Run Server ```bash ng serve ``` * Angular Linting ```bash ng lint ``` * Angular Unit testing ```bash ng test ``` * To generate documentation ```bash npm run doc ``` Then open a server on the "documentation" folder. ================================================ FILE: ArduinoFrontend/angular.json ================================================ { "$schema": "./node_modules/@angular/cli/lib/config/schema.json", "version": 1, "newProjectRoot": "projects", "projects": { "ArduinoFrontend": { "root": "", "sourceRoot": "src", "projectType": "application", "prefix": "app", "schematics": {}, "architect": { "build": { "builder": "@angular-devkit/build-angular:browser", "options": { "outputPath": "dist/ArduinoFrontend", "index": "src/index.html", "main": "src/main.ts", "polyfills": "src/polyfills.ts", "tsConfig": "src/tsconfig.app.json", "assets": [ "src/favicon.ico", "src/assets", { "glob": "**/*", "input": "node_modules/ngx-monaco-editor/assets/monaco", "output": "./assets/monaco/" } ], "styles": [ "./node_modules/@angular/material/prebuilt-themes/indigo-pink.css", "src/styles.css" ], "scripts": [], "es5BrowserSupport": true, "showCircularDependencies": false }, "configurations": { "production": { "fileReplacements": [ { "replace": "src/environments/environment.ts", "with": "src/environments/environment.prod.ts" } ], "optimization": true, "outputHashing": "all", "sourceMap": true, "extractCss": true, "namedChunks": false, "aot": true, "extractLicenses": true, "vendorChunk": false, "buildOptimizer": true, "budgets": [ { "type": "initial", "maximumWarning": "8mb", "maximumError": "10mb" } ] } } }, "serve": { "builder": "@angular-devkit/build-angular:dev-server", "options": { "browserTarget": "ArduinoFrontend:build", "host": "0.0.0.0" }, "configurations": { "production": { "browserTarget": "ArduinoFrontend:build:production" } } }, "extract-i18n": { "builder": "@angular-devkit/build-angular:extract-i18n", "options": { "browserTarget": "ArduinoFrontend:build" } }, "test": { "builder": "@angular-devkit/build-angular:karma", "options": { "main": "src/test.ts", "polyfills": "src/polyfills.ts", "tsConfig": "src/tsconfig.spec.json", "karmaConfig": "src/karma.conf.js", "styles": [ "./node_modules/@angular/material/prebuilt-themes/indigo-pink.css", "src/styles.css" ], "scripts": [], "assets": [ "src/favicon.ico", "src/assets" ] }, "configurations": { "ci": { "watch": false, "progress": false, "browsers": "CIChromeHeadless" } } }, "lint": { "builder": "@angular-devkit/build-angular:tslint", "options": { "tsConfig": [ "src/tsconfig.app.json", "src/tsconfig.spec.json" ], "exclude": [ "**/node_modules/**" ] } } } }, "ArduinoFrontend-e2e": { "root": "e2e/", "projectType": "application", "prefix": "", "architect": { "e2e": { "builder": "@angular-devkit/build-angular:protractor", "options": { "protractorConfig": "e2e/protractor.conf.js", "devServerTarget": "ArduinoFrontend:serve" }, "configurations": { "production": { "devServerTarget": "ArduinoFrontend:serve:production" }, "ci": { "devServerTarget": "ArduinoFrontend:serve:production", "protractorConfig": "e2e/protractor-ci.conf.js" } } }, "lint": { "builder": "@angular-devkit/build-angular:tslint", "options": { "tsConfig": "e2e/tsconfig.e2e.json", "exclude": [ "**/node_modules/**" ] } } } } }, "defaultProject": "ArduinoFrontend", "cli": { "analytics": "aae09df8-6ed6-4120-adda-1b9080860d1e" } } ================================================ FILE: ArduinoFrontend/e2e/protractor-ci.conf.js ================================================ const config = require('./protractor.conf').config; config.capabilities = { browserName: 'chrome', chromeOptions: { args: ['--headless', '--no-sandbox', '--disable-gpu'], binary: require('puppeteer').executablePath(), }, }; exports.config = config; ================================================ FILE: ArduinoFrontend/e2e/protractor.conf.js ================================================ // Protractor configuration file, see link for more information // https://github.com/angular/protractor/blob/master/lib/config.ts const { SpecReporter } = require('jasmine-spec-reporter'); exports.config = { allScriptsTimeout: 11000, specs: [ './src/**/*.e2e-spec.ts' ], capabilities: { 'browserName': 'chrome' }, directConnect: true, baseUrl: 'http://localhost:4200/', framework: 'jasmine', jasmineNodeOpts: { showColors: true, defaultTimeoutInterval: 30000, print: function() {} }, onPrepare() { require('ts-node').register({ project: require('path').join(__dirname, './tsconfig.e2e.json') }); jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); } }; ================================================ FILE: ArduinoFrontend/e2e/src/app.e2e-spec.ts ================================================ import { AppPage } from './app.po'; import { browser, logging } from 'protractor'; describe('workspace-project App', () => { let page: AppPage; beforeEach(() => { page = new AppPage(); }); afterEach(async () => { // Assert that there are no errors emitted from the browser const logs = await browser.manage().logs().get(logging.Type.BROWSER); expect(logs).not.toContain(jasmine.objectContaining({ level: logging.Level.SEVERE, } as logging.Entry)); }); }); ================================================ FILE: ArduinoFrontend/e2e/src/app.po.ts ================================================ import { browser, by, element } from 'protractor'; /** * AppPage End to End Testing */ export class AppPage { /** * Navigate to Base URL */ navigateTo() { return browser.get(browser.baseUrl) as Promise; } } ================================================ FILE: ArduinoFrontend/e2e/tsconfig.e2e.json ================================================ { "extends": "../tsconfig.json", "compilerOptions": { "outDir": "../out-tsc/app", "module": "commonjs", "target": "es5", "types": [ "jasmine", "jasminewd2", "node" ] } } ================================================ FILE: ArduinoFrontend/package.json ================================================ { "name": "arduino-frontend", "version": "0.8.0", "scripts": { "ng": "ng", "start": "ng serve --disableHostCheck", "build": " ng build --prod --aot --buildOptimizer --extractCss --optimization --extractLicenses", "test": "ng test", "lint": "ng lint", "e2e": "ng e2e", "postinstall": "webdriver-manager update --standalone false --gecko false --versions.chrome 76.0.3809.68", "doc": "compodoc -p tsconfig.json" }, "private": true, "dependencies": { "@angular/animations": "~7.2.0", "@angular/cdk": "~7.3.7", "@angular/common": "~7.2.0", "@angular/compiler": "~7.2.0", "@angular/core": "~7.2.0", "@angular/forms": "~7.2.0", "@angular/material": "^7.3.7", "@angular/platform-browser": "~7.2.0", "@angular/platform-browser-dynamic": "~7.2.0", "@angular/router": "~7.2.0", "chart.js": "^2.9.4", "chroma-js": "^1.3.5", "core-js": "^2.6.12", "file-saver": "^2.0.5", "is-promise": "2.2.2", "lodash": "^4.17.19", "lodash-transpose": "^0.2.1", "ng2-charts": "^2.4.3", "ngx-filter-pipe": "^2.1.2", "ngx-monaco-editor": "^7.0.0", "or": "^0.2.0", "rxjs": "~6.3.3", "tslib": "^1.14.1", "zone.js": "~0.8.26" }, "devDependencies": { "@angular-devkit/build-angular": "^0.13.10", "@angular/cli": "~7.3.8", "@angular/compiler-cli": "~7.2.0", "@angular/language-service": "~7.2.0", "@compodoc/compodoc": "^1.1.11", "@types/jasmine": "^2.8.17", "@types/jasminewd2": "^2.0.9", "@types/node": "^8.10.66", "avr8js": "^0.9.2", "codelyzer": "~4.5.0", "jasmine-core": "~2.99.1", "jasmine-spec-reporter": "~4.2.1", "karma": "~4.0.0", "karma-chrome-launcher": "~2.2.0", "karma-coverage-istanbul-reporter": "~2.0.1", "karma-jasmine": "~1.1.2", "karma-jasmine-html-reporter": "^0.2.2", "protractor": "~5.4.0", "puppeteer": "chrome-76", "ts-node": "~7.0.0", "tslint": "~5.11.0", "typescript": "~3.2.2" } } ================================================ FILE: ArduinoFrontend/src/app/Libs/AVR8/Execute.ts ================================================ import { TaskScheduler } from './Scheduler'; import { parseHex } from './IntelHex'; /** * AVR8 Global Variable */ declare var AVR8: any; /** * Event to change the Value of a pin after some duration in microseconds */ export interface MicroEvent { /** * State of the Pin */ state: boolean; /** * Pin Number */ pin: number; /** * Port register */ port: string; /** * Start of the clock */ start: number; /** * Complete time period in microsecond */ period: number; /** * Is Event enabled */ enable: boolean; } /** * PWM Event */ export interface ServoEvent { /** * Pin where component is attached */ pin: number; /** * Start time of the event */ start: number; /** * prev value of pwm (angle in case of servo) */ prevAngle: number; /** * is we only need pwm output */ isPWM?: boolean; /** * Port where component is attached. */ port?: string; /** * Callback with current value and previous value */ callback: (angle: number, prevAngle: number) => void; } /** * Arduino Program Loop class ie. Arduino runner */ export class ArduinoRunner { /** * Program Data */ readonly program = new Uint16Array(0x8000); /** * Arduino CPU */ readonly cpu: any; /** * Arduino Timer 0 */ readonly timer0: any; /** * Arduino Timer 1 */ readonly timer1: any; /** * Arduino Timer 2 */ readonly timer2: any; /** * Arduino register Port B */ readonly portB: any; /** * Arduino register Port C */ readonly portC: any; /** * Arduino register Port D */ readonly portD: any; /** * Arduino Universal Synchronous/Asynchronous Receiver/Transmitter */ readonly usart: any; /** * Arduino Analog to Digital Convertor */ readonly adc: any; /** * Arduino Frequency */ readonly frequency = 16e6; /** * Task Scheduler for Arduino */ readonly scheduler: TaskScheduler = new TaskScheduler(); /** * Work Unit Cycles */ readonly workUnitCycles = 500000; // TODO: FIGURE OUT /** * All microseconds event */ private events: MicroEvent[] = []; /** * List for all PWM events */ private servo: ServoEvent[] = []; /** * Port Listeners */ private listeners: any = {}; /** * Contains Serial data */ private serialBuffer: string[] = []; /** * Arduino runner constructor * @param hex Compiled Hex string */ constructor(hex: string) { // Parse the compiled hex parseHex(hex, new Uint8Array(this.program.buffer)); // initialize variables this.cpu = new AVR8.CPU(this.program); this.timer0 = new AVR8.AVRTimer(this.cpu, AVR8.timer0Config); this.timer1 = new AVR8.AVRTimer(this.cpu, AVR8.timer1Config); this.timer2 = new AVR8.AVRTimer(this.cpu, AVR8.timer2Config); this.portB = new AVR8.AVRIOPort(this.cpu, AVR8.portBConfig); this.portC = new AVR8.AVRIOPort(this.cpu, AVR8.portCConfig); this.portD = new AVR8.AVRIOPort(this.cpu, AVR8.portDConfig); this.usart = new AVR8.AVRUSART(this.cpu, AVR8.usart0Config, this.frequency); this.adc = new AVR8.ADC(this.cpu); // Start the scheduler this.scheduler.start(); } /** * The Execute loop */ execute() { // Complete work unit cycle const cyclesToRun = this.cpu.cycles + this.workUnitCycles; while (this.cpu.cycles < cyclesToRun) { AVR8.avrInstruction(this.cpu); // Parse the instruction // Update timers this.timer0.tick(); this.timer1.tick(); this.timer2.tick(); this.usart.tick(); // For handling microsecond events for (const event of this.events) { const ms = Math.floor(((this.cpu.cycles - event.start) * 1000000) / this.frequency); if (event.enable && ms !== 0 && ms % event.period === 0) { this[event.port].setPin(event.pin, event.state); event.state = !event.state; event.start = this.cpu.cycles; } } } // Send Serial data to the arduino if (((this.cpu.data[0xc0] >> 7) & 1) === 0 && this.serialBuffer.length > 0) { const chr = this.serialBuffer.shift(); this.cpu.data[0xc6] = chr.charCodeAt(0) & 255; let tmp = this.cpu.data[0xc0]; tmp &= ~(1 << 6); tmp &= ~(1 << 5); tmp |= (1 << 7); this.cpu.writeData(0xc0, tmp); } // add task to queue this.scheduler.postTask(() => this.execute()); } /** * Return Miliseconds of time span * @param seconds CPU Seconds */ getmiliS(seconds: number) { const ms = Math.floor(seconds * 1000) % 1000; return ms; } /** * Returns Microsecond of timespan * @param seconds CPU Seconds */ getMicroSeconds(seconds: number) { return (seconds * 1000000) % 1000000; } /** * Delete The runner */ delete() { this.events = null; this.servo = null; this.listeners = null; this.scheduler.stop(); } /** * Stop the scheduler */ stop() { this.scheduler.stop(); } /** * Add microsecond event * @param event Micro second event */ addMicroEvent(event: MicroEvent) { return this.events.push(event) - 1; } /** * Get the Microsecond event * @param index Index of Microevent */ getMicroEvent(index: number): MicroEvent { // TODO: Check index is in range return this.events[index]; } /** * Add a PWM EVENT * @param port The PWM Port * @param pin The PWM Pin * @param callback callback to send pwm value * @param isPwm isPwm or servo (if servo the callback will get angle) */ addServo(port: string, pin: number, callback: (angle: number, prevAngle: number) => void, isPwm = false) { // Add the event to the queue this.servo.push({ pin, prevAngle: -10, start: 0, callback, isPWM: isPwm, port }); if (!(port in this.listeners)) { this[port].addListener((value) => { for (const item of this.servo) { if (port !== item.port) { continue; } // Logic for handling PWM if (((value >> item.pin) & 1) === 1) { item.start = this.cpu.cycles; } else { if (item.start === 0) { continue; } const seconds = ((this.cpu.cycles - item.start) * 1000000) / this.frequency; let ang = 0.0; if (item.isPWM) { ang = (Math.floor(seconds) - 7) / 4.048; ang = Math.floor(ang); } else { ang = (Math.floor(seconds) - 543) / 10.316; ang = Math.floor(ang); } if ( (ang + 1) !== item.prevAngle && (ang - 1) !== item.prevAngle && ang !== item.prevAngle ) { callback(ang, item.prevAngle); item.prevAngle = ang; } item.start = 0; } } }); this.listeners[port] = true; } } /** * Add serial input to the buffer * @param inp Input String that needs to be sent */ serialInput(inp: string) { this.serialBuffer = inp.split(''); } } ================================================ FILE: ArduinoFrontend/src/app/Libs/AVR8/IntelHex.ts ================================================ import { saveAs } from 'file-saver'; /** * PART OF AVR8js (Minimal Hex Parser) * To Understand Proper Working visit * https://en.wikipedia.org/wiki/Intel_HEX * @param source String Hex * @param target Program memory */ export function parseHex(source: string, target: Uint8Array) { // Split By Lines // writeText(source, "hexCode.hex"); for (const line of source.split('\n')) { if (line[0] === ':' && line.substr(7, 2) === '00') { const bytes = parseInt(line.substr(1, 2), 16); const addr = parseInt(line.substr(3, 4), 16); for (let i = 0; i < bytes; i++) { target[addr + i] = parseInt(line.substr(9 + i * 2, 2), 16); } } } } function writeText(data, filename) { const blob = new Blob([data], {type: 'text/plain;charset=utf-8'}); saveAs(blob, filename); } ================================================ FILE: ArduinoFrontend/src/app/Libs/AVR8/Scheduler.ts ================================================ /** * Type Definition of Task Callback aka Job that needs to be executed */ export type TaskCallback = () => void; /** * Faster setTimeout(fn, 0) implementation using postMessage API * Based on https://dbaron.org/log/20100309-faster-timeouts */ export class TaskScheduler { /** * Message used to check for Arduino task */ readonly messageName = 'arduinoRocks'; /** * Queue to store Task (JOB) */ private Queue: Array = []; /** * Store the state of queue */ private stopped = true; /** * Start The Scheduler */ start() { // If it is on Stop State then start if (this.stopped) { this.stopped = false; window.addEventListener('message', this.handleMessage, true); } } /** * Stop The Scheduler */ stop() { this.stopped = true; window.removeEventListener('message', this.handleMessage, true); } /** * Add task to the Scheduler * @param fn The Task that needs to complete */ postTask(fn: TaskCallback) { // if it is stop then don't add to queue if (!this.stopped) { this.Queue.push(fn); window.postMessage(this.messageName, '*'); } } /** * Message Event Listener * @param event Message Event */ private handleMessage = (event: MessageEvent) => { // Only Process Arduino Task and ignore others if (event.data === this.messageName) { // Prevents further propagation of the current event event.stopPropagation(); // Takes the Task (job) from queue and execute it const executeJob = this.Queue.shift(); if (executeJob !== undefined) { executeJob(); } } } } ================================================ FILE: ArduinoFrontend/src/app/Libs/Battery.ts ================================================ import { CircuitElement } from './CircuitElement'; /** * Battery9V class */ export class Battery9v extends CircuitElement { /** * Battery9V constructor * @param canvas Raphael Canvas (Paper) * @param x position x * @param y position y */ constructor(public canvas: any, x: number, y: number) { super('Battery9v', x, y, 'Battery9v.json', canvas); } /** init is called when the component is complety drawn to the canvas */ init() { // console.log(this.nodes[0].label); // console.log(this.nodes[1].label); this.nodes[1].addValueListener((v, calledby) => { // if both the terminals of battery are connected with each other if (calledby.parent.id === this.id) { /// TODO: Show Toast and Stop Simulation console.log('Short Circuit'); window['showToast']('Short Circuit'); } if (v >= 0 && this.nodes[0].value <= 0) { this.nodes[0].setValue(9, this.nodes[0]); } if (v < 0) { this.nodes[0].setValue(-1, this.nodes[0]); } }); } /** * Function provides component details * @param keyName Unique Class name * @param id Component id * @param body body of property box * @param title Component title */ properties(): { keyName: string; id: number; body: HTMLElement; title: string; } { const body = document.createElement('div'); return { keyName: 'Battery9v', id: this.id, body, title: '9v Battery' }; } /** * Initialize variable when start simulation is pressed */ initSimulation(): void { this.nodes[0].setValue(9, null); setTimeout(() => { if (this.nodes[1].value < 0) { this.nodes[0].setValue(-1, null); } }, 10); } /** * Called on Stop Simulation */ closeSimulation(): void { } } /** * CoinCell3V class */ export class CoinCell extends CircuitElement { /** * CoinCell 3V constructor * @param canvas Raphael Canvas (Paper) * @param x position x * @param y position y */ constructor(public canvas: any, x: number, y: number) { super('CoinCell', x, y, 'CoinCell.json', canvas); } /** * Function provides component details * @param keyName Unique Class name * @param id Component id * @param body body of property box * @param title Component title */ init() { this.nodes[1].addValueListener((_, calledby, __) => { if (calledby.parent.id === this.id) { /// TODO: Show Toast and Stop Simulation window['showToast']('Short Circuit'); } }); } /** * Function provides component details * @param keyName Unique Class name * @param id Component id * @param body body of property box * @param title Component title */ properties(): { keyName: string; id: number; body: HTMLElement; title: string; } { const body = document.createElement('div'); return { keyName: this.keyName, id: this.id, body, title: 'Coin Cell' }; } /** * Initialize variable when start simulation is pressed */ initSimulation(): void { this.nodes[0].setValue(3, null); } /** * Called on stop Simulation */ closeSimulation(): void { } } ================================================ FILE: ArduinoFrontend/src/app/Libs/CircuitElement.spec.ts ================================================ ================================================ FILE: ArduinoFrontend/src/app/Libs/CircuitElement.ts ================================================ import { Point } from './Point'; import { Wire } from './Wire'; import { isNull } from 'util'; import { BoundingBox } from './Geometry'; import { UndoUtils } from './UndoUtils'; /** * Abstract Class Circuit Elements * Inherited by Each Circuit Component */ export abstract class CircuitElement { /** * Circuit Component Name */ public keyName: string; /** * Stores the id of the Component */ public id: number; /** * Stores the Nodes of a Component */ public nodes: Point[] = []; /** * Raphael Set of elements */ public elements: any; /** * Translation X */ public tx = 0; /** * Translation Y */ public ty = 0; /** * Title of the component */ public title: string; /** * Store Values That are required during simulation */ public simulationData: any = {}; /** * Store Values that are additionaly require by class */ public data: any = {}; /** * Stores Information regarding a component */ public info: any; /** * The Half Size of the Circuit Node */ public pointHalf: number; /** * Node ID */ public nid = 0; /** * Constructor For Circuit Element Class (Parent of every component) * @param keyName KeyName For a Component required for mapping class to string * @param x X position of component * @param y Y Position Of component * @param filename Json Data filename * @param canvas Raphael Canvas */ constructor(keyName: string, public x: number, public y: number, filename: string = '', canvas: any = null) { this.id = Date.now(); // Generate New id this.keyName = keyName; // Set key name // Create Raphael Set this.elements = window['canvas'].set(); // if filename is present fetch the file if (filename) { fetch(`./assets/jsons/${filename}`) .then(v => v.json()) .then(obj => { // get the title this.title = obj.name; this.pointHalf = obj.pointHalf; // Draw Elements of the component this.DrawElement(canvas, obj.draw); // Add Circuiy Nodes this.DrawNodes(canvas, obj.pins, obj.pointHalf); // Add info and data this.info = obj.info; this.data = obj.data; // Add a Drag listener this.setDragListeners(); // Add a Click Listener this.setClickListener(null); // Add Hover Listener this.setHoverListener(); // Translate the elements to the tranformation this.elements.transform(`t${this.tx},${this.ty}`); // Move the node according to the translatiom for (const node of this.nodes) { node.relativeMove(this.tx, this.ty); } // Decrease the Queue window['queue'] -= 1; // Call the init method this.init(); }) .catch(err => { console.error(err); window['showToast']('Failed to load'); // TODO: Delete the Component }); } } /** * Returns bounding box of the circuit element */ getBoundingBox(): BoundingBox { return BoundingBox.loadFromRaphaelBbox(this.elements.getBBox()); } /** * Draws circuit nodes * @param canvas Raphael Canvas * @param pinData Pin Position and name * @param pointHalf The Half size of circuit node */ DrawNodes(canvas: any, pinData: any, pointHalf: number) { for (const pin of pinData) { this.nodes.push( new Point( canvas, this.x + pin.x, this.y + pin.y, pin.name, pointHalf, this ) ); } } /** * Draw Elements inside an component * @param canvas Raphael Canvas * @param drawData Draw Data */ DrawElement(canvas: any, drawData: any) { const elementsDrawn = []; for (const item of drawData) { let element; // Draw image if (item.type === 'image') { element = canvas.image( item.url, this.x + item.x, this.y + item.y, item.width, item.height ); } else if (item.type === 'path') { element = this.DrawPath(canvas, item); } else if (item.type === 'rectangle') { // Draw rectangle element = canvas.rect( this.x + item.x, this.y + item.y, item.width, item.height, item.radius || 0 ).attr({ fill: item.fill || 'none', stroke: item.stroke || 'none' }); } else if (item.type === 'circle') { // Draw a circle element = canvas.circle( this.x + item.x, this.y + item.y, item.radius, ).attr({ fill: item.fill || 'none', stroke: item.stroke || 'none' }); } else if (item.type === 'polygon') { element = this.DrawPolygon(canvas, item); } this.elements.push(element); elementsDrawn.push(element); } return elementsDrawn; } /** * Draws an Polygon * @param canvas Raphael Paper(Canvas) * @param item Polygon points in a 2d array format */ DrawPolygon(canvas: any, item: any) { if (item.points.length <= 1) { return; } const points = item.points; let tmp = 'M'; for (const point of points) { tmp += `${this.x + point[0]},${this.y + point[1]}L`; } tmp = tmp.substr(0, tmp.length - 1) + 'z'; return canvas.path(tmp) .attr({ fill: item.fill || 'none', stroke: item.stroke || 'none' }); } /** * Draw a Path * @param canvas Raphael Paper (Canvas) * @param item Path Data */ DrawPath(canvas: any, item: any) { // Regex used to parse the path data const lines = /L[\-]?\d+(\.\d*)?\,[\-]?\d+(\.\d*)?/g; // L a,b const start = /M[\-]?\d+(\.\d*)?\,[\-]?\d+(\.\d*)?/g; // M a,b const curves = /C([\-]?\d+(\.\d*)?\,){5}[\-]?\d+(\.\d*)?/g; const horizontal = /H[\-]?\d+(\.\d*)?/g; // H a const vertical = /V[\-]?\d+(\.\d*)?/g; // V b const sCurve = /S([\-]?\d+(\.\d*)?\,){3}[\-]?\d+(\.\d*)?/g; let str: string = item.value; str = this.calcRelative(str, start, canvas); str = this.calcRelative(str, lines, canvas); str = this.calcRelative(str, curves, canvas); str = this.calcRelative(str, horizontal, canvas); str = this.calcRelative(str, vertical, canvas); str = this.calcRelative(str, sCurve, canvas); return canvas.path(str) .attr({ fill: item.fill || 'none', stroke: item.stroke || 'none' }); } /** * Draw path relative to the component * @param input Path Data * @param pattern The regex pattern * @param canvas Raphael Paper */ calcRelative(input: string, pattern: RegExp, canvas: any) { const founds = input.match(pattern); if (founds) { for (const found of founds) { let output = ''; const start = found.charAt(0); let tmp: any = found.substring(1).split(','); tmp = tmp.map(v => parseFloat(v)); if (start === 'M' || start === 'L') { output += `${start}${this.x + tmp[0]},${this.y + tmp[1]}`; } else if (start === 'V') { output += `${start}${this.y + tmp[0]}`; } else if (start === 'H') { output += `${start}${this.x + tmp[0]}`; } else if (start === 'C') { output += `${start}${this.x + tmp[0]},`; output += `${this.y + tmp[1]},`; output += `${this.x + tmp[2]},`; output += `${this.y + tmp[3]},`; output += `${this.x + tmp[4]},`; output += `${this.y + tmp[5]}`; } else if (start === 'S') { output += `${start}${this.x + tmp[0]},`; output += `${this.y + tmp[1]},`; output += `${this.x + tmp[2]},`; output += `${this.y + tmp[3]},`; } input = input.replace(found, output); } } return input; } /** * Add Drag listener to the components */ setDragListeners() { let fdx = 0; let fdy = 0; let tmpar = []; this.elements.drag((dx, dy) => { this.elements.transform(`t${this.tx + dx},${this.ty + dy}`); // tmpx = this.tx + dx; // tmpy = this.ty + dy; fdx = dx; fdy = dy; for (let i = 0; i < this.nodes.length; ++i) { this.nodes[i].move(tmpar[i][0] + dx, tmpar[i][1] + dy); } window['onDragEvent'](this); }, () => { fdx = 0; fdy = 0; tmpar = []; for (const node of this.nodes) { // node.remainHidden(); tmpar.push( [node.x, node.y] ); } }, () => { // for (const node of this.nodes) { // node.relativeMove(fdx, fdy); // node.remainShow(); // } // Push dump to Undo stack & Reset UndoUtils.pushChangeToUndoAndReset({ keyName: this.keyName, element: this.save(), event: 'drag', dragJson: { dx: fdx, dy: fdy } }); this.tx += fdx; this.ty += fdy; window['onDragStopEvent'](this); }); } /** * Add Hover Listener */ setHoverListener() { // this.elements.mouseover(() => { // for (const node of this.nodes) { // // node.show(); // } // }); // this.elements.mouseout(() => { // for (const node of this.nodes) { // // node.hide(); // } // }); } /** * Add a Click listenert to component and show properties on click * @param callback On Click Callback */ setClickListener(callback: () => void) { this.elements.mousedown(() => { if (window['Selected'] && (window['Selected'] instanceof Wire)) { if ((isNull(window['Selected'].start) || isNull(window['Selected'].end))) { return; } window['Selected'].deselect(); } window['isSelected'] = true; window['Selected'] = this; window['showProperty'](() => this.properties()); if (callback) { callback(); } }); } /** * Initialize Variable after inheriting this function */ init() { } /** * Save Circuit Component */ save(): any { const data = this.SaveData(); const ret = { x: this.x, y: this.y, tx: this.tx, ty: this.ty, id: this.id }; if (data) { ret['data'] = data; } return ret; } /** * The Additional data that needs to be saved inside database. * After Inheriting return the Data Object */ SaveData() { return null; } /** * Load Circuit Component */ load(data: any): void { for (const i in window['DragListeners']) { if (window['DragListeners'].hasOwnProperty(i)) { const itrFn = window['DragListeners'][i]; if (itrFn.id === this.id) { window['DragListeners'][i].id = data.id; } } } for (const i in window['DragStopListeners']) { if (window['DragStopListeners'].hasOwnProperty(i)) { const itrFn = window['DragStopListeners'][i]; if (itrFn.id === this.id) { window['DragStopListeners'][i].id = data.id; } } } this.id = data.id; this.tx = data.tx; this.ty = data.ty; this.LoadData(data); } /** * The additional data which is stored in database needs to be load. * Inherit this function for loading additional data. * @param data Data from Database */ LoadData(data: any) { } /** * Returns the Circuit Node based on the x,y Position */ getNode(x: number, y: number, id: number = null): Point { for (const node of this.nodes) { if ( (Math.floor(node.x + this.pointHalf) === Math.floor(x) && Math.floor(node.y + this.pointHalf) === Math.floor(y)) || node.id === id ) { return node; } } return null; } /** * Removes Component from Canvas and memory */ remove(): void { this.elements.remove(); for (const n of this.nodes) { n.remove(); } this.delete(); } /** * Inherit this function to remove some variable */ delete() { } /** * Return the Name of the component.Can be inheriter to return custom name. */ getName() { return this.title; } /** * Function to move/transform an element * @param fdx relative x position to move * @param fdy relative y position to move */ getNodesCoord(): number[] { const tmpar = []; for (const node of this.nodes) { tmpar.push( [node.x, node.y] ); } return tmpar; } dragAlong(tmpar: any, fdx: number, fdy: number): any { this.elements.transform(`t${this.tx + fdx},${this.ty + fdy}`); for (const node of this.nodes) { tmpar.push( [node.x, node.y] ); } for (let i = 0; i < this.nodes.length; ++i) { this.nodes[i].move(tmpar[i][0] + fdx, tmpar[i][1] + fdy); } } dragAlongStop(x: number, y: number): void { this.tx = x; this.ty = y; } /** * Function to move/transform an element * @param fdx relative x position to move * @param fdy relative y position to move */ transformPosition(fdx: number, fdy: number): void { const tmpar = []; this.elements.transform(`t${this.tx + fdx},${this.ty + fdy}`); for (const node of this.nodes) { tmpar.push( [node.x, node.y] ); } for (let i = 0; i < this.nodes.length; ++i) { this.nodes[i].move(tmpar[i][0] + fdx, tmpar[i][1] + fdy); } this.tx += fdx; this.ty += fdy; } /** * Return the Property of the Circuit Component * @returns Object containing component name,id and the html required to be shown on property box */ abstract properties(): { keyName: string, id: number, body: HTMLElement, title: string }; /** * Initialize variable required for simulation * Called before simulation */ abstract initSimulation(): void; /** * Called when Stop Simulation */ abstract closeSimulation(): void; } ================================================ FILE: ArduinoFrontend/src/app/Libs/ConvertJSONFormat.ts ================================================ import { ImageToByteArray } from './ImageToByteArray'; export class ConvertJSONFormat { /** * Converts JSON of cloud-stored circuit into JSON format for storing it temporarily * @param id Project Id * @param data JSON data of the circuit * @returns JSON data of the circuit with format for saving it temporarily */ static async convertToOfflineFormat(id, data) { const obj = JSON.parse(data.data_dump); const project = { name: data.name, description: data.description, image: data.base64_image, created_at: Date.now(), }; obj['id'] = id; obj['project'] = project; // Correction required for the following two lines of code // Image data is recieved after the image gets loaded which is async code // In short, for now this function will not return image data but its url. ImageToByteArray.getDataURLForm(project.image); obj.project.image = ImageToByteArray.result !== '' ? ImageToByteArray.result : project.image; return obj; } /** * Converts JSON of temporarily saved circuit to JSON format on Cloud * @param data JSON data of the circuit * @returns JSON data of the circuit with format for saving it on cloud */ static convertToOnlineFormat(data) { const obj = { data_dump: '', is_arduino: true, description: data.project.description, name: data.project.name, base64_image: data.project.image, branch: 'master', version: this.getRandomString(20) }; // Remove unwanted props from JSON delete data['id']; delete data['project']; // Data Dump will contain Circuit data const dataDump = data; // Convert Data Dump to an String and add to Save Object obj.data_dump = JSON.stringify(dataDump); return obj; } /** * Generate and return a random string * @param length Length of random string * @returns random string */ static getRandomString(length): string { let result = ''; const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; const charactersLength = characters.length; for (let i = 0; i < length; i++) { result += characters.charAt(Math.floor(Math.random() * charactersLength)); } return result; } } ================================================ FILE: ArduinoFrontend/src/app/Libs/Download.ts ================================================ // Declare an Enumeration For Image Type export enum ImageType { PNG, JPG, SVG } /** * Canvg used For Rendering SVG */ declare var canvg; /** * Download Class */ export class Download { /** * Downloads Image From Base64 Data * @param data Base64 Image Data * @param filename Filename For Download * @param type Type of the image */ static DownloadImage(data: any, filename: string, type: ImageType) { const evt = new MouseEvent('click', { view: window, bubbles: false, cancelable: true }); const a = document.createElement('a'); const ext = (type === ImageType.PNG) ? 'png' : 'jpg'; a.setAttribute('download', `${filename}.${ext}`); a.setAttribute('href', data); a.setAttribute('target', '_blank'); a.dispatchEvent(evt); } /** * Download Text File * @param filename Filename of the download * @param data Data inside the download * @param options Extra Options for mime */ static DownloadText(filename: string, data: any[], options: any) { const blob = new Blob(data, options); const evt = new MouseEvent('click', { view: window, bubbles: false, cancelable: true }); const a = document.createElement('a'); a.setAttribute('download', `${filename}`); a.href = URL.createObjectURL(blob); a.target = '_blank'; a.setAttribute('target', '_blank'); a.dispatchEvent(evt); } /** * Asynchronous Function for Export Image to a Base64 Format. * @param type Type of the Image */ static async ExportImage(type: ImageType) { // Get SVG from Workspace an Clone it const svg = (document.querySelector('#holder > svg').cloneNode(true) as SVGSVGElement); svg.getElementsByTagName('g')[0].removeAttribute('transform'); // Remove any transformation // Extract all image from svg const images = (svg.getElementsByTagName('image') as any); for (const image of images) { // Fetch each image and convert image into base64 let data = await fetch(image.getAttribute('href')) .then((v) => { return v.text(); }); data = (data.replace(' { // Get the client pixel ratio const pixelRatio = 1.25; // get The Bounding box of the circuit const gtag = (document.querySelector('#holder > svg > g') as SVGSVGElement).getBBox(); if (gtag.width === 0 || gtag.height === 0) { gtag.width = 100; gtag.height = 100; } // Add transformation to the g tag svg.getElementsByTagName('g')[0].setAttribute('transform', `scale(1,1)translate(${-gtag.x + 10},${-gtag.y + 10})`); // if type is svg then return new svg if (type === ImageType.SVG) { res(svg.outerHTML); return; } // if type is not svg then render svg using canvg const canvas = document.createElement('canvas'); // set canvas width and height canvas.width = (gtag.width + gtag.x + 20) * pixelRatio; canvas.height = (gtag.height + gtag.y + 20) * pixelRatio; canvas.style.width = canvas.width + 'px'; canvas.style.height = canvas.width + 'px'; // change the width and height of svg svg.setAttribute('width', '' + canvas.width); svg.setAttribute('height', '' + canvas.height); // Get Canvas Context const ctx = (canvas.getContext('2d') as any); // enable smoothing ctx.mozImageSmoothingEnabled = true; ctx.webkitImageSmoothingEnabled = true; ctx.msImageSmoothingEnabled = true; ctx.imageSmoothingEnabled = true; // Apply tranformation ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0); // render for modified svg const v = canvg.Canvg.fromString(ctx, svg.outerHTML); v.render().then(() => { let image; if (type === ImageType.JPG) { // if type is jpg remove the black background const imgdata = ctx.getImageData(0, 0, canvas.width, canvas.height); for (let i = 0; i < imgdata.data.length; i += 4) { if (imgdata.data[i + 3] === 0) { imgdata.data[i] = 255; imgdata.data[i + 1] = 255; imgdata.data[i + 2] = 255; imgdata.data[i + 3] = 255; } } // Add Image to canvas ctx.putImageData(imgdata, 0, 0); image = canvas.toDataURL('image/jpeg'); } else { // Get The base64 if (type === ImageType.PNG) { image = canvas.toDataURL('image/png'); } } res(image); }); }); } } ================================================ FILE: ArduinoFrontend/src/app/Libs/General.ts ================================================ import { CircuitElement } from './CircuitElement'; import { Point } from './Point'; import { areBoundingBoxesIntersecting } from './RaphaelUtils'; import _ from 'lodash'; import { Wire } from './Wire'; import { UndoUtils } from './UndoUtils'; /** * Declare window so that custom created function don't throw error */ declare var window; /** * Node tuple class to store breadboard node and element node which are in proximity */ class BreadboardProximityNodeTuple { breadboardNode: Point; elementNode: Point; constructor(breadboardNode: Point, elementNode: Point) { this.breadboardNode = breadboardNode; this.elementNode = elementNode; } } /** * Resistor Class */ export class Resistor extends CircuitElement { /** * color table(hex values) of resistor */ static colorTable: string[] = []; /** * tolerance color mapping values of resistor */ static tolColorMap: number[] = []; /** * tolerance value of resistor */ static toleranceValues: string[] = []; /** * unit labels of resistor */ static unitLabels: string[] = []; /** * unit values of resistor */ static unitValues: number[] = []; /** * Resistance value of the resistor. */ value: number; /** * Tolerance index of the resistor. */ toleranceIndex: number; /** * Resistor constructor * @param canvas Raphael Canvas (Paper) * @param x position x * @param y position y */ constructor(public canvas: any, x: number, y: number) { super('Resistor', x, y, 'Resistor.json', canvas); } /** init is called when the component is completely drawn to the canvas */ init() { if (Resistor.colorTable.length === 0) { Resistor.colorTable = this.data.colorTable; Resistor.toleranceValues = this.data.toleranceValues; Resistor.tolColorMap = this.data.tolColorMap; Resistor.unitLabels = this.data.unitLabels; Resistor.unitValues = this.data.unitValues; } this.value = this.data.initial; this.toleranceIndex = this.data.initialToleranceIndex; this.updateColors(); delete this.data; this.data = null; this.nodes[0].addValueListener((v, cby, par) => { if (cby.parent.id !== this.id) { this.nodes[1].setValue(v, this.nodes[0]); } }); this.nodes[1].addValueListener((v, cby, par) => { if (cby.parent.id !== this.id) { this.nodes[0].setValue(v, this.nodes[1]); } }); } /** Saves data/values that are provided to resistor */ SaveData() { return { value: this.value, tolerance: this.toleranceIndex }; } /** * function loads the SaveData() * @param data save object */ LoadData(data: any) { this.value = data.data.value; this.toleranceIndex = data.data.tolerance; } /** * Updates Resistor Properties */ updateColors() { const cur = this.getValue(); this.elements[1].attr({ fill: Resistor.colorTable[cur.third] }); // Third this.elements[2].attr({ fill: Resistor.colorTable[cur.second] }); // Second this.elements[3].attr({ fill: Resistor.colorTable[cur.first] }); // First this.elements[5].attr({ fill: Resistor.colorTable[cur.multiplier] }); // multiplier this.elements[4].attr({ fill: Resistor.colorTable[this.toleranceIndex] }); // Tolerance } /** Function gets Resistence value */ getValue() { const l = `${this.value}`.length; const tmp = `${this.value}`; if (l < 2) { return { multiplier: 11, first: this.value, second: 0, third: 0 }; } else if (l < 3) { return { multiplier: 10, first: +tmp.charAt(0), second: +tmp.charAt(1), third: 0, }; } return { multiplier: l - 3, first: +tmp.charAt(0), second: +tmp.charAt(1), third: +tmp.charAt(2), }; } /** Power values for unitvalues 1K ohm => 10^3 */ private getPower(index: number) { if (index >= 0 && index <= Resistor.unitValues.length) { return Resistor.unitValues[index]; } return 0; } /** * Calculate the resistance based on the user input. * @param value The Input resistance * @param unitIndex The selected unit index */ update(value: string, unitIndex: number) { const val = parseFloat(value); const p = this.getPower(unitIndex); const tmp = parseInt((val * p).toFixed(0), 10); if (value.length > 12 || isNaN(tmp) || tmp === Infinity || tmp < 1.0 || `${tmp}`.length > 12) { window['showToast']('Resistance Not possible'); return; } else { this.value = tmp; this.updateColors(); } } /** Function returns resistence values 10K ohm => 10 */ getInputValues() { const val = this.value; let tmp = val; for (let i = 0; i < Resistor.unitValues.length; ++i) { tmp = Math.floor(val / Resistor.unitValues[i]); if (tmp > 0) { continue; } else { return { index: i - 1, val: val / Resistor.unitValues[i - 1] }; } } return { index: Resistor.unitValues.length - 1, val: this.value / Resistor.unitValues[ Resistor.unitLabels.length - 1 ] }; } /** Function returns the resistor with resistence */ getName() { const cur = this.getInputValues(); return `Resistor ${cur.val}${Resistor.unitLabels[cur.index]}`; } /** * Function provides component details * @param keyName Unique Class name * @param id Component id * @param body body of property box * @param title Component title */ properties(): { keyName: string; id: number; body: HTMLElement; title: string; } { let tmp; const cur = this.getInputValues(); const body = document.createElement('div'); const inp = document.createElement('input'); inp.type = 'number'; inp.value = `${cur.val}`; inp.min = '1'; inp.addEventListener('wheel', (event) => { event.preventDefault(); }); const unit = document.createElement('select'); tmp = ''; for (const ohm of Resistor.unitLabels) { tmp += ``; } unit.innerHTML = tmp; unit.selectedIndex = cur.index; const tole = document.createElement('select'); tmp = ''; for (const t of Resistor.toleranceValues) { tmp += ``; } tole.innerHTML = tmp; unit.onchange = () => this.update(inp.value, unit.selectedIndex); inp.onkeyup = () => this.update(inp.value, unit.selectedIndex); inp.onchange = () => this.update(inp.value, unit.selectedIndex); tole.onchange = () => { this.toleranceIndex = Resistor.tolColorMap[tole.selectedIndex]; this.updateColors(); }; const lab = document.createElement('label'); lab.innerText = 'Resistance'; body.append(lab); body.append(inp); body.append(unit); const lab2 = document.createElement('label'); lab2.innerText = 'Tolerance'; body.append(lab2); body.append(tole); return { keyName: this.keyName, id: this.id, title: 'Resistor', body }; } /** * Called by the start simulation. */ initSimulation(): void { } /** * Called by the stop simulation. */ closeSimulation(): void { } /** * Get resistance value of resistor */ getResistance() { return this.value; } /** * Get ID of the resistor * TODO: Add this function inside CircuitElements.ts instead */ getID() { return this.id; } } /** * Breadboard Class */ export class BreadBoard extends CircuitElement { /** * Minimum distance of node to be classified as in proximity */ static PROXIMITY_DISTANCE = 20; /** * Set to keep track of visited nodes */ static visitedNodesv2 = new Set(); /** * Stores group of points which are interconnected */ static groupings: any = []; /** * Nodes that are connected */ public joined: Point[] = []; /** * List to store current nodes in the proximity of any of the breadboard' node */ public highlightedPoints: BreadboardProximityNodeTuple[] = []; /** * Nodes sorted by 'x' and 'y' position */ public sortedNodes: Point[] = []; /** * Cached list of nodes that are soldered */ private solderedNodes: Point[] = null; /** * Map of x and nodes with x-coordinates as x */ public sameXNodes: { [key: string]: Point[] } = {}; /** * Map of y and nodes with y-coordinates as y */ public sameYNodes: { [key: string]: Point[] } = {}; /** * Breadboard constructor * @param canvas Raphael Canvas (Paper) * @param x position x * @param y position y */ constructor(public canvas: any, x: number, y: number) { super('BreadBoard', x, y, 'Breadboard.json', canvas); this.subsribeToDrag({ id: this.id, fn: this.onOtherComponentDrag.bind(this) }); this.subscribeToDragStop({ id: this.id, fn: this.onOtherComponentDragStop.bind(this) }); } /** * Returns node connected to arduino * @param node node to start search on * @param startedOn label of node search started on * @returns Arduino connected Node */ static getRecArduinov2(node: Point, startedOn: string) { try { if (node.connectedTo.start.parent.keyName === 'ArduinoUno') { // TODO: Return if arduino is connected to start node return node.connectedTo.start; } else if (node.connectedTo.end.parent.keyName === 'ArduinoUno') { // TODO: Return if arduino is connected to end node return node.connectedTo.end; } else if (node.connectedTo.start.parent.keyName === 'BreadBoard' && !this.visitedNodesv2.has(node.connectedTo.start.gid)) { // TODO: Call recursive BreadBoard handler function if node is connected to Breadboard && visited nodes doesn't have node's gid return this.getRecArduinoBreadv2(node, startedOn); } else if (node.connectedTo.end.parent.keyName === 'BreadBoard' && !this.visitedNodesv2.has(node.connectedTo.end.gid)) { // TODO: Call recursive BreadBoard handler function if node is connected to Breadboard && visited nodes doesn't have node's gid return this.getRecArduinoBreadv2(node, startedOn); } else if (node.connectedTo.end.parent.keyName === 'Battery9v' && window.scope.ArduinoUno.length === 0) { // TODO: Return false if node's end is connected to 9V Battery return false; } else if (node.connectedTo.end.parent.keyName === 'CoinCell' && window.scope.ArduinoUno.length === 0) { // TODO: Return false if node's end is connected to Coin Cell return false; } else if (node.connectedTo.end.parent.keyName === 'RelayModule') { // TODO: Handle RelayModule if (startedOn === 'POSITIVE') { // If search was started on Positive node then return connected node of VCC in Relay return this.getRecArduinov2(node.connectedTo.end.parent.nodes[3], startedOn); } else if (startedOn === 'NEGATIVE') { // If search was started on Negative node then return connected node of GND in Relay return this.getRecArduinov2(node.connectedTo.end.parent.nodes[5], startedOn); } } else { // TODO: If nothing matches // IF/ELSE: Determine if start is to be used OR end for further recursion if (node.connectedTo.end.gid !== node.gid) { // Loops through all nodes in parent for (const e in node.connectedTo.end.parent.nodes) { // IF: gid is different && gid not in visited node if (node.connectedTo.end.parent.nodes[e].gid !== node.connectedTo.end.gid && !this.visitedNodesv2.has(node.connectedTo.end.parent.nodes[e].gid) && node.connectedTo.end.parent.nodes[e].isConnected()) { // add gid in visited nodes this.visitedNodesv2.add(node.connectedTo.end.parent.nodes[e].gid); // call back Arduino Recursive Fn return this.getRecArduinov2(node.connectedTo.end.parent.nodes[e], startedOn); } } } else if (node.connectedTo.start.gid !== node.gid) { // Loops through all nodes in parent for (const e in node.connectedTo.start.parent.nodes) { // IF: gid is different && gid not in visited node if (node.connectedTo.start.parent.nodes[e].gid !== node.connectedTo.start.gid && !this.visitedNodesv2.has(node.connectedTo.start.parent.nodes[e].gid) && node.connectedTo.start.parent.nodes[e].isConnected()) { // add gid in visited nodes this.visitedNodesv2.add(node.connectedTo.start.parent.nodes[e].gid); // call back Arduino Recursive Fn return this.getRecArduinov2(node.connectedTo.start.parent.nodes[e], startedOn); } } } } } catch (e) { console.warn(e); return false; } } /** * Recursive Function to handle BreadBoard * @param node Node which is to be checked for BreadBoard */ static getRecArduinoBreadv2(node: Point, startedOn: string) { // IF/ELSE: Determine if start is to be used OR end for further recursion if (node.connectedTo.end.gid !== node.gid) { const bb = (node.connectedTo.end.parent as BreadBoard); // loop through joined nodes of breadboard for (const e in bb.joined) { if (bb.joined[e].gid !== node.connectedTo.end.gid) { // Run only if substring matches if (bb.joined[e].label.substring(1, bb.joined[e].label.length) === node.connectedTo.end.label.substring(1, node.connectedTo.end.label.length)) { const ascii = node.connectedTo.end.label.charCodeAt(0); const currAscii = bb.joined[e].label.charCodeAt(0); // add gid to VisitedNode this.visitedNodesv2.add(bb.joined[e].gid); // IF/ELSE: determine which part of breadboard is connected if (ascii >= 97 && ascii <= 101) { if (bb.joined[e].isConnected() && (currAscii >= 97 && currAscii <= 101)) { return this.getRecArduinov2(bb.joined[e], startedOn); } } else if (ascii >= 102 && ascii <= 106) { if (bb.joined[e].isConnected() && (currAscii >= 102 && currAscii <= 106)) { return this.getRecArduinov2(bb.joined[e], startedOn); } } else { if (bb.joined[e].isConnected() && (bb.joined[e].label === node.connectedTo.end.label)) { return this.getRecArduinov2(bb.joined[e], startedOn); } } } } } } else if (node.connectedTo.start.gid !== node.gid) { const bb = (node.connectedTo.start.parent as BreadBoard); // loop through joined nodes of breadboard for (const e in bb.joined) { if (bb.joined[e].gid !== node.connectedTo.start.gid) { // Run only if substring matches if (bb.joined[e].label.substring(1, bb.joined[e].label.length) === node.connectedTo.start.label.substring(1, node.connectedTo.start.label.length)) { const ascii = node.connectedTo.start.label.charCodeAt(0); const currAscii = bb.joined[e].label.charCodeAt(0); // add gid to VisitedNode this.visitedNodesv2.add(bb.joined[e].gid); // IF/ELSE: determine which part of breadboard is connected if (ascii >= 97 && ascii <= 101) { if (bb.joined[e].isConnected() && (currAscii >= 97 && currAscii <= 101)) { return this.getRecArduinov2(bb.joined[e], startedOn); } } else if (ascii >= 102 && ascii <= 106) { if (bb.joined[e].isConnected() && (currAscii >= 102 && currAscii <= 106)) { return this.getRecArduinov2(bb.joined[e], startedOn); } } else { if (bb.joined[e].isConnected() && (bb.joined[e].label === node.connectedTo.end.label)) { return this.getRecArduinov2(bb.joined[e], startedOn); } } } } } } } /** * Subscribes to drag listener of the workspace * @param fn listener functino */ subsribeToDrag(fn) { // copied the function from Workspace here to avoid circular dependency. TODO: resolve file dependencies window['DragListeners'].push(fn); } /** * Subscribes to drag stop listener of the workspace * @param fn listener function */ subscribeToDragStop(fn) { window['DragStopListeners'].push(fn); } /** * Resets highlighted points */ resetHighlightedPoints() { if (this.highlightedPoints.length > 0) { this.highlightedPoints.forEach(nodeTuple => nodeTuple.breadboardNode.undoHighlight()); this.highlightedPoints = []; } } /** * Returns list of soldered elements on the breadboard */ getSolderedElements() { return this.getSolderedNodes().map(node => node.connectedTo); } /** * Unsolders element from the breadboard if soldered * @param element element to find and unsolder */ private maybeUnsolderElement(element) { const elementNodesWires = element.nodes.map(node => node.connectedTo); const solderedNodes = [...this.getSolderedNodes()]; for (const breadboardNode of solderedNodes) { if (elementNodesWires.includes(breadboardNode.connectedTo)) { breadboardNode.unsolderWire(); _.remove(this.solderedNodes, node => node === breadboardNode); } } } /** * Listens for drag of other circuit elements in the workspace */ onOtherComponentDrag(element) { const bBox = this.elements.getBBox(); const elementBBox = element.elements.getBBox(); // Disable Node Bubble on hover Point.showBubbleBool = false; this.resetHighlightedPoints(); if (!areBoundingBoxesIntersecting(bBox, elementBBox)) { return; } // unsolder element if it's soldered to either of the breadboard's node this.maybeUnsolderElement(element); // for all the nodes of the elements, find the nodes in proximity to the nodes of the breadboard // and add them to this.highlightedPoints for (const node of element.nodes) { if (node.isConnected()) { continue; } const nearestNode = this.getNearestNodes(node.x, node.y); if (nearestNode) { this.highlightedPoints.push(new BreadboardProximityNodeTuple(nearestNode, node)); } } // highlight points stored in highlightedPoints for (const node of this.highlightedPoints) { node.breadboardNode.highlight(); } } /** * Listener to handle when dragging of a component stops */ onOtherComponentDragStop() { // Enable Node Bubble on hover Point.showBubbleBool = true; // if no highlighted points when the dragging stops, return if (this.highlightedPoints.length === 0) { return; } // connect highlightedPoints for (const nodeTuple of this.highlightedPoints) { const wire = nodeTuple.breadboardNode.solderWire(); wire.addPoint(nodeTuple.elementNode.x, nodeTuple.elementNode.y); // wire.connect(nodeTuple.elementNode, true); nodeTuple.elementNode.connectWire(wire, false); this.addSolderedNode(nodeTuple.breadboardNode); } this.resetHighlightedPoints(); } /** init is called when the component is complety drawn to the canvas */ init() { this.sortedNodes = _.sortBy(this.nodes, ['x', 'y']); if (BreadBoard.groupings.length === 0) { BreadBoard.groupings = this.data.groupings; } // initialise sameX and sameY node sets for (const node of this.nodes) { // create the set for x this.sameXNodes[node.x] = this.sameXNodes[node.x] || []; this.sameXNodes[node.x].push(node); // Create the set for y this.sameYNodes[node.y] = this.sameYNodes[node.y] || []; this.sameYNodes[node.y].push(node); } // add a connect callback listener for (const node of this.nodes) { node.connectCallback = (item) => { this.joined.push(item); }; node.disconnectCallback = (item) => { const index = this.joined.indexOf(item); if (index > -1) { this.joined.splice(index, 1); } }; } this.elements.toBack(); // Remove the drag event this.elements.undrag(); let tmpx = 0; let tmpy = 0; let fdx = 0; let fdy = 0; let tmpar = []; let tmpar2 = []; let ConnEleList = []; let NodeList = []; let tmpx2 = []; let tmpy2 = []; // Create Custom Drag event this.elements.drag((dx, dy) => { this.elements.transform(`t${this.tx + dx},${this.ty + dy}`); tmpx = this.tx + dx; tmpy = this.ty + dy; fdx = dx; fdy = dy; for (let i = 0; i < this.joined.length; ++i) { this.joined[i].move(tmpar[i][0] + dx, tmpar[i][1] + dy); } for (let i = 0; i < ConnEleList.length; ++i) { ConnEleList[i].dragAlong(NodeList[i], dx, dy); tmpx2[i] = ConnEleList[i].tx + dx; tmpy2[i] = ConnEleList[i].ty + dy; } }, () => { fdx = 0; fdy = 0; tmpar = []; tmpar2 = []; for (const node of this.nodes) { tmpar2.push( [node.x, node.y] ); node.remainHidden(); } for (const node of this.joined) { let ElementFlag = false; tmpar.push( [node.x, node.y] ); node.remainShow(); if (node.connectedTo != null) { const ConnElement1 = node.connectedTo.start.parent; const ConnElement2 = node.connectedTo.end.parent; console.log(ConnElement1.keyName); console.log(ConnElement2.keyName); if (ConnElement1.keyName !== 'BreadBoard') { for (const ele of ConnEleList) { if (ele === ConnElement1) { ElementFlag = true; break; } } const PlaceableCheck = 'isBreadBoardPlaceable' in ConnElement1.info.properties; const isBreadBoardPlaceable = ConnElement1.info.properties.isBreadBoardPlaceable; if (!ElementFlag && PlaceableCheck && isBreadBoardPlaceable === 1) { ConnEleList.push(ConnElement1); tmpx2.push(0); tmpy2.push(0); NodeList.push(ConnElement1.getNodesCoord()); } } else { for (const ele of ConnEleList) { if (ele === ConnElement1) { ElementFlag = true; break; } } const PlaceableCheck = 'isBreadBoardPlaceable' in ConnElement2.info.properties; const isBreadBoardPlaceable = ConnElement2.info.properties.isBreadBoardPlaceable; if (!ElementFlag && PlaceableCheck && isBreadBoardPlaceable === 1) { ConnEleList.push(ConnElement2); tmpx2.push(0); tmpy2.push(0); NodeList.push(ConnElement2.getNodesCoord()); } } } } }, () => { // Push dump to Undo stack & Reset UndoUtils.pushChangeToUndoAndReset({ keyName: this.keyName, element: this.save(), event: 'drag', dragJson: { dx: fdx, dy: fdy } }); for (let i = 0; i < this.nodes.length; ++i) { this.nodes[i].move(tmpar2[i][0] + fdx, tmpar2[i][1] + fdy); this.nodes[i].remainShow(); } tmpar2 = []; this.tx = tmpx; this.ty = tmpy; // reBuild SameNodeObject after drag stop for (let i = 0; i < ConnEleList.length; i++) { ConnEleList[i].dragAlongStop(tmpx2[i], tmpy2[i]); } ConnEleList = []; NodeList = []; tmpx2 = []; tmpy2 = []; tmpar = []; this.reBuildSameNodes(); }); } /** * Function to move/transform breadboard * @param fdx relative x position to move * @param fdy relative y position to move */ transformBoardPosition(fdx: number, fdy: number): void { let tmpar = []; let tmpar2 = []; let tmpx = 0; let tmpy = 0; let ffdx = 0; let ffdy = 0; let ConnEleList = []; let NodeList = []; let tmpx2 = []; let tmpy2 = []; ffdx = 0; ffdy = 0; tmpar = []; tmpar2 = []; for (const node of this.nodes) { tmpar2.push( [node.x, node.y] ); node.remainHidden(); } for (const node of this.joined) { tmpar.push( [node.x, node.y] ); node.remainShow(); const ConnElement1 = node.connectedTo.start.parent; const ConnElement2 = node.connectedTo.end.parent; console.log(ConnElement1.keyName); console.log(ConnElement2.keyName); let ElementFlag = false; if (ConnElement1.keyName !== 'BreadBoard') { for (const ele of ConnEleList) { if (ele === ConnElement1) { ElementFlag = true; break; } } if (!ElementFlag && ConnElement1.info.properties.isBreadBoardPlaceable === 1) { ConnEleList.push(ConnElement1); tmpx2.push(0); tmpy2.push(0); NodeList.push(ConnElement1.getNodesCoord()); } } else { for (const ele of ConnEleList) { if (ele === ConnElement1) { ElementFlag = true; break; } } if (!ElementFlag && ConnElement2.info.properties.isBreadBoardPlaceable === 1) { ConnEleList.push(ConnElement2); tmpx2.push(0); tmpy2.push(0); NodeList.push(ConnElement2.getNodesCoord()); } } } this.elements.transform(`t${this.tx + fdx},${this.ty + fdy}`); tmpx = this.tx + fdx; tmpy = this.ty + fdy; ffdx = fdx; ffdy = fdy; for (let i = 0; i < this.joined.length; ++i) { this.joined[i].move(tmpar[i][0] + fdx, tmpar[i][1] + fdy); } for (let i = 0; i < ConnEleList.length; ++i) { ConnEleList[i].dragAlong(NodeList[i], fdx, fdy); tmpx2[i] = ConnEleList[i].tx + fdx; tmpy2[i] = ConnEleList[i].ty + fdy; } for (let i = 0; i < this.nodes.length; ++i) { this.nodes[i].move(tmpar2[i][0] + ffdx, tmpar2[i][1] + ffdy); this.nodes[i].remainShow(); } this.tx = tmpx; this.ty = tmpy; for (let i = 0; i < ConnEleList.length; i++) { ConnEleList[i].dragAlongStop(tmpx2[i], tmpy2[i]); } ConnEleList = []; NodeList = []; tmpx2 = []; tmpy2 = []; tmpar = []; this.reBuildSameNodes(); } /** * Function provides component details * @param keyName Unique Class name * @param id Component id * @param body body of property box * @param title Component title */ properties(): { keyName: string; id: number; body: HTMLElement; title: string; } { const body = document.createElement('div'); return { keyName: this.keyName, id: this.id, body, title: this.title }; } /** * Re-build sameNode variables */ reBuildSameNodes() { this.sameXNodes = {}; this.sameYNodes = {}; // initialise sameX and sameY node sets for (const node of this.nodes) { // create the set for x this.sameXNodes[node.x] = this.sameXNodes[node.x] || []; this.sameXNodes[node.x].push(node); // Create the set for y this.sameYNodes[node.y] = this.sameYNodes[node.y] || []; this.sameYNodes[node.y].push(node); } } /** * Checks if the point is inside the passed bounding box * TODO: move the function to a utils * @param boundingBox: Raphael Bounding box object * @param x: x-coordinate of the point * @param y: y-coordinate of the point */ isPointWithinBbox(boundingBox, x, y): boolean { return ((x < boundingBox.cx && x > boundingBox.cx - 1.2 * boundingBox.width) && (y < boundingBox.cy && y > boundingBox.cy - 1.2 * boundingBox.height)); } /** * Returns the shortlisted list of the nodes within the proximity of (x, y) coordinate * @param x: x-coordinate * @param y: y-coordinate */ shortlistNodes(x, y) { const xIndexFrom = _.sortedIndexBy(this.sortedNodes, { x: x - BreadBoard.PROXIMITY_DISTANCE }, 'x'); const xIndexTo = _.sortedLastIndexBy(this.sortedNodes, { x: x + BreadBoard.PROXIMITY_DISTANCE }, 'x'); return this.sortedNodes.slice(xIndexFrom, xIndexTo); } /** * Returns the nearest node on the breadboard to the passed coordinate * @param x: x-coordinate * @param y: y-coordinate */ getNearestNodes(x, y) { // this.elements.getElementByPoint() const nodesToSearch = this.shortlistNodes(x, y); for (const node of nodesToSearch) { if (this.isPointWithinBbox(node.body.getBBox(), x, y)) { return node; } } } /** * Returns the list of nodes that are soldered on the breadboard */ getSolderedNodes() { if (this.solderedNodes == null) { this.solderedNodes = this.nodes.filter(node => node.isSoldered()); } return this.solderedNodes; } /** * Adds soldered nodes to the cache * @param node node */ addSolderedNode(node) { if (this.solderedNodes == null) { this.solderedNodes = []; } this.solderedNodes.push(node); } /** * Initialize Breadboard for simultion */ initSimulation(): void { // Stores set of node which has same x values const xtemp = this.sameXNodes; // Stores set of node which has same y values const ytemp = this.sameYNodes; for (const node of this.nodes) { // Add a Node value change listener node.addValueListener((value, calledBy, parent) => { const labelCalledBy = calledBy.label; const labelParent = parent.label; if (calledBy.y === parent.y && (labelCalledBy.charCodeAt(0) !== labelParent.charCodeAt(0) || labelCalledBy === labelParent)) { return; } if (node.label === '-') { for (const neigh of ytemp[node.y]) { if (neigh.x !== node.x && value <= 0) { neigh.setValue(value, neigh); } } } else if (node.label === '+') { for (const neigh of ytemp[node.y]) { if (neigh.x !== node.x) { neigh.setValue(value, neigh); } } } else { const op = node.label.charCodeAt(0); if (op >= 102) { for (const neigh of xtemp[node.x]) { if (neigh.y !== node.y && neigh.label.charCodeAt(0) >= 102) { neigh.setValue(value, neigh); } } } if (op <= 101) { for (const neigh of xtemp[node.x]) { if (neigh.y !== node.y && neigh.label.charCodeAt(0) <= 101) { neigh.setValue(value, neigh); } } } } }); } } /** * Called on Stop Simulation is pressed */ closeSimulation(): void { BreadBoard.visitedNodesv2.clear(); } /** * Returns groupings */ getGroupings() { const groups = _.cloneDeep(BreadBoard.groupings); return groups; } } ================================================ FILE: ArduinoFrontend/src/app/Libs/Geometry.ts ================================================ import _ from 'lodash'; export class BoundingBox { x: number; y: number; height: number; width: number; constructor(x: number, y: number, width: number, height: number) { this.x = x; this.y = y; this.width = width; this.height = height; } static loadFromRaphaelBbox(bBox) { return new BoundingBox(bBox.x, bBox.y, bBox.width, bBox.height); } static getCombinedBBox(bBoxes: BoundingBox[]) { const minX = _.minBy(bBoxes, box => box.x).x; const maxX = _.maxBy(bBoxes, box => box.x).x; const minY = _.minBy(bBoxes, box => box.y).y; const maxY = _.maxBy(bBoxes, box => box.y).y; return new BoundingBox( minX, minY, maxX - minX, maxY - minY ); } } ================================================ FILE: ArduinoFrontend/src/app/Libs/ImageToByteArray.ts ================================================ export class ImageToByteArray { static result = ''; static getDataURLForm(url: string) { this.result = ''; const image = this.createImage(url); image.onload = () => { this.result = this.convertImage(image); }; } static createImage(url: string) { const image = document.createElement('img'); image.setAttribute('src', url); image.setAttribute('visibility', 'hidden'); return image; } static convertImage(image) { const canvas = this.drawImageToCanvas(image); return canvas.toDataURL(); } static drawImageToCanvas(image) { const canvas = document.createElement('canvas'); canvas.width = image.width; canvas.height = image.height; canvas.getContext('2d').drawImage(image, 0, 0, image.width, image.height); return canvas; } } ================================================ FILE: ArduinoFrontend/src/app/Libs/Login.ts ================================================ import { environment } from '../../environments/environment'; /** * Class For handling Login & Logout */ export class Login { /** * Get Auth Token */ static getToken(): string { return window.localStorage.getItem('esim_token'); } /** * Logout and redirect to home page */ static logout() { window.localStorage.removeItem('esim_token'); window.open(new URL('../../', window.location.href).href, '_self'); } /** * Redirect to the login Page * @param isFront Is Frontpage */ static redirectLogin(isFront: boolean = false): void { const dashboardURI = (new URL(environment.DASHBOARD_URL, window.location.href)).href; if (Login.getToken()) { window.open(dashboardURI, '_self'); } else { let redirectUri = isFront ? dashboardURI : window.location.href; redirectUri = encodeURIComponent(redirectUri); // const url = `${window.location.protocol}\\\\${window.location.host}\\eda\\#\\login?url=${redirectUri}`; const url = `${environment.LOGIN_URL}${redirectUri}`; window.open(url, '_self'); } } } ================================================ FILE: ArduinoFrontend/src/app/Libs/MathUtils.ts ================================================ export class MathUtils { static modulo(n, m) { return ((n % m) + m) % m; } static isPointBetween(point: [number, number], point1: [number, number], point2: [number, number]): boolean { return (point[0] >= point1[0] && point[0] < point2[0]) && (point[1] >= point1[1] && point[1] < point2[1]); } } ================================================ FILE: ArduinoFrontend/src/app/Libs/Miscellaneous.ts ================================================ import { CircuitElement } from './CircuitElement'; /** * Label class */ export class Label extends CircuitElement { /** * Text of the label */ text = 'Label'; /** * Font Size of the Label */ fontSize = 15; /** * Font color of the label. */ fontColor = '#000000'; /** * Font style of the label */ fontStyle = 'normal'; /** * Font weight of the label. */ fontWeight = 'normal'; /** * Get Name Function */ getName = null; /** * Label constructor * @param canvas Raphael Canvas (Paper) * @param x position x * @param y position y */ constructor(public canvas: any, x: number, y: number) { super('Label', x, y); this.elements.push( canvas.text(x, y, this.text) ); this.update(); this.setClickListener(null); this.setDragListeners(); this.setHoverListener(); window['queue'] -= 1; } /** Saves data for label class */ SaveData() { return { text: this.text, size: this.fontSize, color: this.fontColor, weight: this.fontWeight, style: this.fontStyle }; } /** * Loads data of SaveData() * @param data saved object */ LoadData(data: any) { this.text = data.data.text; this.fontSize = data.data.size; this.fontColor = data.data.color; this.fontWeight = data.data.weight; this.fontStyle = data.data.style; this.elements.transform(`t${this.tx},${this.ty}`); this.update(); } /** Function updates the label class */ update() { this.elements[0] .attr({ 'font-size': this.fontSize, 'font-family': 'Times New Roman,Georgia,Serif', 'font-weight': this.fontWeight, 'font-style': this.fontStyle, text: this.text, fill: this.fontColor }); } /** Changes text for label */ changeLabel(value: string) { // if text field is empty if (value === '') { // TODO: Show Toast window['showToast']('Label cannot be empty'); return; } this.text = value; this.update(); } /** * Function provides label details * @param keyName Unique Class name * @param id Component id * @param body body of property box * @param title Component title */ properties(): { keyName: string; id: number; body: HTMLElement; title: string; } { let tmp; const body = document.createElement('div'); body.style.display = 'flex'; body.style.flexDirection = 'column'; const inp = document.createElement('input'); inp.value = this.text; inp.onkeyup = () => { this.changeLabel(inp.value); }; inp.addEventListener('focusout', () => { if (inp.value === '') { inp.value = this.text; } }); const sz = document.createElement('input'); sz.type = 'number'; sz.min = '10'; sz.value = `${this.fontSize}`; sz.max = '100'; sz.onchange = () => { const num = parseInt(sz.value, 10); if (num) { this.fontSize = Math.min(100, Math.max(10, num)); this.update(); } }; const colors = [ ['Black', '#000000'], ['Red', '#ff0000'], ['Green', '#04942b'], ['Blue', '#0000ff'], ['Purple', '#6a0dad'], ]; const colorSelect = document.createElement('select'); tmp = ''; for (const col of colors) { tmp += ``; } colorSelect.innerHTML = tmp; colorSelect.onchange = () => { this.fontColor = colors[colorSelect.selectedIndex][1]; this.update(); }; const styles = ['Normal', 'Italic']; const styleSelect = document.createElement('select'); tmp = ''; for (const styl of styles) { tmp += ``; } styleSelect.innerHTML = tmp; styleSelect.onchange = () => { this.fontStyle = styles[styleSelect.selectedIndex]; this.update(); }; const weights = ['Normal', 'Bold', 'Bolder', 'Lighter']; const weightSelect = document.createElement('select'); tmp = ''; for (const wght of weights) { tmp += ``; } weightSelect.innerHTML = tmp; weightSelect.onchange = () => { this.fontWeight = weights[weightSelect.selectedIndex]; this.update(); }; tmp = document.createElement('label'); tmp.innerText = 'Text'; body.appendChild(tmp); body.appendChild(inp); tmp = document.createElement('label'); tmp.innerText = 'Size'; body.appendChild(tmp); body.appendChild(sz); tmp = document.createElement('label'); tmp.innerText = 'Colors'; body.appendChild(tmp); body.appendChild(colorSelect); tmp = document.createElement('label'); tmp.innerText = 'Styles'; body.appendChild(tmp); body.appendChild(styleSelect); tmp = document.createElement('label'); tmp.innerText = 'Weight'; body.appendChild(tmp); body.appendChild(weightSelect); return { keyName: this.keyName, id: this.id, body, title: 'Label' }; } /** * Called on Start Simulation */ initSimulation(): void { } /** * Called on Stop simulation. */ closeSimulation(): void { } } ================================================ FILE: ArduinoFrontend/src/app/Libs/Point.ts ================================================ import { Wire } from './Wire'; import { CircuitElement } from './CircuitElement'; import { isNull } from 'util'; import { BoundingBox } from './Geometry'; import _ from 'lodash'; import { BreadBoard } from './General'; /** * Declare window so that custom created function don't throw error */ declare var window; /** * Class For Circuit Node ie. Point wires can connect with nodes */ export class Point { /** * Boolean to either show bubble on hover or not */ static showBubbleBool = true; /** * Hide node on creation */ static defaultAttr: any = { fill: 'rgba(0,0,0,0)', stroke: 'rgba(0,0,0,0)' }; /** * Show red color with black stroke on hover */ static nodeAttr: any = { fill: 'rgba(255,0,0,1)', stroke: 'rgba(0,0,0,1)' }; /** * Body of the Circuit Node */ body: any; /** * Stores the reference of wire which is connected to it */ connectedTo: Wire = null; /** * Is the point soldered with wire. */ private soldered = false; /** * Hover callback called on hover over node */ hoverCallback: any = null; /** * Hover Close Callback called if hover is removed */ hoverCloseCallback: any = null; /** * Callback called when we connect wire. */ connectCallback: any = null; /* Callback called on disconnecting a wire. */ disconnectCallback: any = null; /** * The Value of the node */ value = -1; /** * Value change listener */ listener: (val: number, calledby: Point, current: Point) => void = null; /** * Graph id used while starting simulation. */ gid = -1; /** * The Node ID */ id: number; /** * Boolean for inputPullUp */ pullUpEnabled = false; /** * Constructor for Circuit Node * @param canvas Raphael Canvas / paper * @param x x position of node * @param y y position of node * @param label label to be shown when hover * @param half The Half width of Square * @param parent parent of the circuit node */ constructor( private canvas: any, public x: number, public y: number, public label: string, public half: number, public parent: CircuitElement ) { // if (window['point_id']) { // this.id = window['point_id']; // window.point_id += 1; // } // else { // this.id = 1; // window['point_id'] = 2; // } this.id = this.parent.nid; ++this.parent.nid; // Create a rectangle of 4x4 and set default color and stroke this.body = this.canvas.rect(x, y, 2 * this.half, 2 * this.half); this.body.attr(Point.defaultAttr); this.body.node.setAttribute('class', 'mynode'); // Set Hover callback this.body.hover((evt: MouseEvent) => { // Check if showBubbleBool is enabled if (Point.showBubbleBool) { // Check if callback is present if it is then call it if (this.hoverCallback) { this.hoverCallback(this.x, this.y); } window.showBubble(this.label, evt.clientX, evt.clientY); if (this.parent.keyName === 'BreadBoard') { const ref = this.parent as BreadBoard; if (this.label === '+' || this.label === '-') { for (const point of ref.sameYNodes[this.y]) { if (this.id === point.id) { this.highlight(); } else { point.outline(); } } } else { const groups = ref.getGroupings(); const index = groups.findIndex(prefix => prefix.includes(this.label.charAt(0))); for (const point of ref.sameXNodes[this.x]) { if (point.label !== '+' && point.label !== '-') { if (groups[index].includes(point.label.charAt(0))) { if (this.id === point.id) { this.highlight(); } else { point.outline(); } } } } } } } else { // TODO: Do not show node highligtht this.remainHidden(); } }, () => { // Check if close callback is present if present call it if (this.hoverCloseCallback) { this.hoverCloseCallback(this.x, this.y); } window.hideBubble(); if (this.parent.keyName === 'BreadBoard') { const ref = this.parent as BreadBoard; if (this.label === '+' || this.label === '-') { for (const point of ref.sameYNodes[this.y]) { if (this.id === point.id) { this.undoHighlight(); } else { point.undoOutline(); } } } else { for (const point of ref.sameXNodes[this.x]) { if (point.label !== '+' && point.label !== '-') { if (this.id === point.id) { this.undoHighlight(); } else { point.undoOutline(); } } } } } // Show node highligtht this.remainShow(); }); // TODO: Remove The following code After Development // this.body.drag((dx, dy) => { // this.body.attr({ // x: this.x + dx, // y: this.y + dy // }); // }, () => { // this.x = this.body.attr("x"); // this.y = this.body.attr("y"); // }, () => { // this.x = this.body.attr("x"); // this.y = this.body.attr("y"); // }); // this.body.dblclick(() => { // alert((this.x - this.parent.x) + "," + (this.y - this.parent.y) + " " + this.label); // }); // return; // Set click listener this.body.mousedown(() => { if (this.connectedTo != null) { return; } if ((window['Selected'] instanceof Wire) && !window.Selected.isConnected()) { this.connectWire(window['Selected']); window['isSelected'] = false; // deselect object window['Selected'] = null; } else { // if nothing is selected create a new wire object window.isSelected = true; const wire = this.startNewWire(); // select the wire and insert into the scope of circuit window.Selected = wire; } if (this.connectCallback) { this.connectCallback(this); } }); } isConnected(): boolean { return !!this.connectedTo; } isSoldered(): boolean { return this.soldered; } /** * Solders wire to the point * @param wire wire to solder (if existing wire, else pass empty to create a new wire at the node) */ solderWire(wire?): Wire { if (!wire) { wire = this.startNewWire(); } this.soldered = true; const newClass = `${this.body.node.getAttribute('class')} solder-highlight`; this.body.node.setAttribute('class', newClass); if (this.connectCallback) { this.connectCallback(this); } return wire; } /** * Unsolders wire to the point */ unsolderWire() { const wire = this.connectedTo; if (wire) { this.setValue(-1, this); wire.delete(); } this.soldered = false; const newClass = this.body.node.getAttribute('class').replace(' solder-highlight', ''); this.body.node.setAttribute('class', newClass); if (this.disconnectCallback) { this.disconnectCallback(this); } } connectWire(wire, pushToUndo = true) { // if selected item is wire then connect the wire with the node // console.log([]); if (wire.start === this) { return; } this.connectedTo = wire; wire.connect(this, true, false, !pushToUndo, pushToUndo ? 'add' : 'breadDrag'); wire.deselect(); if (wire.start && wire.end) { window['scope']['wires'].push(wire); } else { window['showToast']('Wire was not connected properly !'); } } /** * Creates and originates new wire at the point */ startNewWire() { const wire = new Wire(this.canvas, this); this.connectedTo = wire; return wire; } /** * Returns the bounding box of the point */ getBoundingBox(): BoundingBox { return BoundingBox.loadFromRaphaelBbox(this.body.getBBox()); } /** * Set Hover and Hover close Callback * @param callback Hover Callback * @param closeCallback Hover Close Callback */ setHoverCallback(callback = null, closeCallback = null) { this.hoverCallback = callback; this.hoverCloseCallback = closeCallback; } /** * Return the center position of the Node */ position() { return [this.x + this.half, this.y + this.half]; } highlight() { const newClass = `${this.body.node.getAttribute('class')} highlight`; this.body.node.setAttribute('class', newClass); } undoHighlight() { const newClass = this.body.node.getAttribute('class').replace(' highlight', ''); this.body.node.setAttribute('class', newClass); } outline() { const newClass = `${this.body.node.getAttribute('class')} outline`; this.body.node.setAttribute('class', newClass); } undoOutline() { const newClass = this.body.node.getAttribute('class').replace(' outline', ''); this.body.node.setAttribute('class', newClass); } /** * Change the Position of Node with relative to current position * @param dx change in x axis * @param dy change in y axis */ relativeMove(dx: number, dy: number) { this.x += dx; this.y += dy; // update the position this.body.attr({ x: this.x, y: this.y }); } /** * Hide Node */ hide() { this.body.attr(Point.defaultAttr); } /** * This will permanently hide the node */ remainHidden() { this.body.hide(); } /** * This will show node if its is permanently hidden */ remainShow() { this.body.show(); } /** * Show Node */ show() { if (this.connectedTo) { return; } this.body.attr(Point.nodeAttr); } /** * Move Node to x,y * @param x new x position of Node * @param y new y position of Node */ move(x: number, y: number) { this.x = x; this.y = y; // Update the positon this.body.attr({ x: this.x, y: this.y }); } /** * Disconnects the point to wire */ disconnect() { this.connectedTo = null; if (this.isSoldered()) { this.unsolderWire(); } } /** * Remove Node from canvas */ remove() { this.body.remove(); if (this.connectedTo) { this.connectedTo.remove(); this.connectedTo = null; this.parent = null; } } /** * Adding a Value Change Listener. * @param listener Value Change Listener */ addValueListener(listener: (val: number, calledby: Point, parent: Point) => void) { this.listener = listener; } /** * Set the value of a Circuit node. * @param value New Value * @param calledby The node which sets the value */ setValue(value: number, calledby: Point) { this.value = value; if (calledby && this.listener) { this.listener(this.value, calledby, this); } if (isNull(calledby)) { calledby = this; } // Propogate the value further if (this.connectedTo && this.connectedTo.end) { if (this.connectedTo.end.gid !== calledby.gid && this.connectedTo.end.gid !== this.gid) { this.connectedTo.end.setValue(this.value, this); } } if (this.connectedTo && this.connectedTo.start) { if (this.connectedTo.start.gid !== calledby.gid && this.connectedTo.start.gid !== this.gid) { this.connectedTo.start.setValue(this.value, this); } } } } ================================================ FILE: ArduinoFrontend/src/app/Libs/RaphaelUtils.ts ================================================ /** * Checks if two raphael element's bounding boxes intersect */ export function areBoundingBoxesIntersecting(box1, box2): boolean { if (box1.x >= box2.x2 || box2.x >= box1.x2) { return false; } if (box1.y2 <= box2.y || box2.y2 <= box1.y) { return false; } return true; } ================================================ FILE: ArduinoFrontend/src/app/Libs/SaveOffiline.ts ================================================ import { AlertService } from '../alert/alert-service/alert.service'; /** * Declare window so that custom created function don't throw error */ declare var window; /** * Class to Save Project in IndexedDB */ export class SaveOffline { /** * Check if IndexedDB exist if not show alert * @param callback If IndexedDB exist call the callback */ static Check(callback: (result: any) => void = null) { // check db exist if (window.indexedDB) { } else { // support for other browser window.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB; window.IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction || window.msIDBTransaction; window.IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange || window.msIDBKeyRange; } // if exist create/open project database if (window.indexedDB) { const request = window.indexedDB.open('projects', 1); // Database was not able to open/create request.onerror = (err) => { console.log(err); AlertService.showAlert('Error Occurred for Ofline Circuit (Private Window Can be a Reason)'); }; // if everything works call the callback with result request.onsuccess = () => { if (callback) { callback(request.result); } }; // Create Object Store on success request.onupgradeneeded = (event) => { const datab = event.target.result; if (!datab.objectStoreNames.contains('projects')) { datab.createObjectStore('project', { keyPath: 'id' }); } }; return true; } // IndexedDB not found AlertService.showAlert('Save Offline Feature Will Not Work'); return false; } /** * Save Project to Indexed DB * @param mydata Project Data * @param callback Callback if Project is saved */ static Save(mydata, callback: (data: any) => void = null) { if (!SaveOffline.Check(db => { db.transaction(['project'], 'readwrite') .objectStore('project') .add(mydata); if (callback) { callback(mydata); } AlertService.showAlert('Done saved.'); })) { return; } // let db; // const request = window.indexedDB.open('projects', 1); // request.onerror = () => { // // console.log('error: '); // alert('Error Occurred'); // }; // request.onsuccess = () => { // db = request.result; // }; // request.onupgradeneeded = (event) => { // const datab = event.target.result; // if (!datab.objectStoreNames.contains('projects')) { // datab.createObjectStore('project', { keyPath: 'id' }); // } // }; } /** * Read all Project from Indexed DB * @param callback Callback if after all the data is fetched */ static ReadALL(callback: (data: any) => void = null) { if (!SaveOffline.Check(db => { const objectStore = db.transaction('project').objectStore('project'); const data = []; objectStore.openCursor().onsuccess = (event) => { const cursor = event.target.result; if (cursor) { data.push(cursor.value); cursor.continue(); } else { if (callback) { callback(data); } } }; })) { return; } // let db; // const request = window.indexedDB.open('projects', 1); // request.onerror = (event) => { // // console.log('error: '); // alert('Error Occurred'); // }; // request.onsuccess = () => { // db = request.result; // console.log('success: ' + db); // }; } /** * Delete Project Fron Indexed DB * @param id Project ID * @param callback Callback if it was deleted Succesfully */ static Delete(id, callback: () => void = null) { if (!SaveOffline.Check(db => { const ok = db.transaction(['project'], 'readwrite') .objectStore('project') .delete(id); ok.onsuccess = (_) => { if (callback) { callback(); } }; })) { return; } // let db; // const request = window.indexedDB.open('projects', 1); // request.onerror = (_) => { // // console.log('error: '); // alert('Error Occurred'); // }; // request.onsuccess = (__) => { // db = request.result; // }; } /** * Update respective Project in Indexed DB * @param mydata Project data contains id * @param callback Callback when Project is succesfully updated */ static Update(mydata, callback: (data: any) => void = null) { if (!SaveOffline.Check(db => { const ok = db.transaction(['project'], 'readwrite') .objectStore('project') .put(mydata); ok.onsuccess = (_) => { AlertService.showAlert('Done updating.'); if (callback) { callback(mydata); } }; })) { return; } // let db; // const request = window.indexedDB.open('projects', 1); // request.onerror = (_) => { // alert('Error Occurred'); // // console.log('error: '); // }; // request.onsuccess = (__) => { // db = request.result; // }; } /** * Read a Particular project from Indexed DB * @param id Project ID * @param callback Callback if Project read is completed */ static Read(id, callback: (data: any) => void = null) { if (!SaveOffline.Check(db => { const transaction = db.transaction(['project']); const objectStore = transaction.objectStore('project'); const ok = objectStore.get(parseInt(id, 10)); ok.onerror = () => { AlertService.showAlert('Unable to retrieve data from database!'); callback(null); }; ok.onsuccess = () => { callback(ok.result); }; })) { return; } // let db; // const request = window.indexedDB.open('projects', 1); // request.onerror = () => { // alert('Error Occurred'); // // console.log('error: '); // }; // request.onsuccess = () => { // db = request.result; // }; } } ================================================ FILE: ArduinoFrontend/src/app/Libs/SaveOnline.ts ================================================ import { isNull } from 'util'; import { Login } from './Login'; import { Download, ImageType } from './Download'; import { ApiService } from '../api.service'; import { Workspace } from './Workspace'; import { AlertService } from '../alert/alert-service/alert.service'; import { HttpErrorResponse } from '@angular/common/http'; import { ConvertJSONFormat } from './ConvertJSONFormat'; /** * Declare window so that custom created function don't throw error */ declare var window; /** * Class For Saving Online */ export class SaveOnline { /** * Check if input is an UUID. * @param input Input that needs to be tested */ static isUUID(input: string) { const rgx = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i; return rgx.test(input); } /** * Save or Update Project * @param name Project Name * @param description Project Description * @param api API Service * @param branch Branch of variation * @param version Version of variation * @param callback Callback when save/update is done * @param id Project ID */ static Save(name = '', description = '', api: ApiService, branch, version, callback: (data: any) => void = null, id: string = null) { // Get Token const token = Login.getToken(); // if id is present then update let toUpdate = false; if (isNull(id)) { } else { toUpdate = true; } // Save Object that needs to send to server const saveObj = { data_dump: '', is_arduino: true, description, name, branch, version, }; // Data Dump will contain Workspace Data and Circuit data const dataDump = { canvas: { x: Workspace.translateX, y: Workspace.translateY, scale: Workspace.scale } }; // For each item in scope for (const key in window.scope) { // if at least one component present in the scope if (window.scope[key] && window.scope[key].length > 0) { dataDump[key] = []; // Intialize datadump // Call the save function and push the return object for (const item of window.scope[key]) { if (item.save) { dataDump[key].push(item.save()); } } } } // Convert Data Dump to an String and add to Save Object saveObj.data_dump = JSON.stringify(dataDump); // Generate Thumbnail for the project Download.ExportImage(ImageType.PNG).then(v => { saveObj['base64_image'] = v; // Store the base64 image // if update then update the project if (toUpdate) { api.updateProject(id, saveObj, token).subscribe(out => { if (callback) { callback(out); } }, err => { if (err.status === 401) { AlertService.showAlert('You Cannot Save the Circuit as you are not the Ownwer'); return; } console.log(err); }); } else { // Otherwise save the project api.saveProject(saveObj, token).subscribe(output => { if (callback) { callback(output); } }, err => { let message = ''; for (const key in err.error) { if (err.error[key]) { message += '\n' + key; for (const item of err.error[key]) { message += `${item},`; } } } AlertService.showAlert(message); }); } }); } /** * Save Staff Project * @param name Project Name * @param description Project Description * @param api API Service * @param callback Callback when save is done */ static staffSaveGallery(name = '', description = '', api: ApiService, callback: (data: any) => void = null) { // Get Token const token = Login.getToken(); // Save Object that needs to send to server const saveObj = { data_dump: '', is_arduino: true, description: '', name, save_id: 'gallery' + Math.random() * 100000 }; // Data Dump will contain Workspace Data and Circuit data const dataDump = { canvas: { x: Workspace.translateX, y: Workspace.translateY, scale: Workspace.scale } }; // For each item in scope for (const key in window.scope) { // if at least one component present in the scope if (window.scope[key] && window.scope[key].length > 0) { dataDump[key] = []; // Intialize datadump // Call the save function and push the return object for (const item of window.scope[key]) { if (item.save) { dataDump[key].push(item.save()); } } } } // Convert Data Dump to an String and add to Save Object saveObj.data_dump = JSON.stringify(dataDump); // Generate Thumbnail for the project Download.ExportImage(ImageType.PNG).then(v => { saveObj['media'] = v; // Store the base64 image // Otherwise save the project api.saveProjectToGallery(saveObj, token).subscribe(output => { if (callback) { callback(output); AlertService.showAlert('Saved In Gallery'); } }, err => { console.log(err); let message = ''; for (const key in err.error) { if (err.error[key]) { message += '\n' + key; for (const item of err.error[key]) { message += `${item},`; } } } AlertService.showAlert(message); }); }); } /** * Save or Update Project from Dashboard * @param data Project data * @param api API Service * @param callback Callback when save/update is done * @param toUpdate Determines whether to save or update the circuit */ static SaveFromDashboard(data: any, api: ApiService, callback: (data: any) => void = null, toUpdate: boolean) { const id = data.id; // Get Token const token = Login.getToken(); if (token) { // Converting data to required format const saveObj = ConvertJSONFormat.convertToOnlineFormat(data); if (toUpdate) { api.readProject(id, 'master', this.getRandomString(20), token).subscribe(() => { // if exists then update the project api.updateProject(id, saveObj, token).subscribe(out => { if (callback) { AlertService.showAlert('Updated'); callback(out); } }, err => { if (err.status === 401) { AlertService.showAlert('You Cannot Save the Circuit as you are not the Ownwer'); return; } console.log(err); }); }, (err: HttpErrorResponse) => { if (err.status === 404) { // Otherwise save the project this.CallToAPISaveService(api, saveObj, token, callback); AlertService.showAlert('Circuit ID has been changed as circuit was deleted'); } else if (err.status === 401) { AlertService.showAlert('You are Not Authorized to download this circuit'); window.open('../../../', '_self'); return; } else { AlertService.showAlert('Something Went Wrong'); } console.log(err); } ); } else { // Save the project due to invalid id this.CallToAPISaveService(api, saveObj, token, callback); } } } /** * Calls api to save project data on cloud. * This function was created to reduce repeating code from above function. * @param api API Service * @param saveObj JSON Object containing Project * @param token Login Token * @param callback Callback when project saved */ static CallToAPISaveService(api: ApiService, saveObj: any, token: string, callback: (data: any) => void = null) { api.saveProject(saveObj, token).subscribe(output => { if (callback) { AlertService.showAlert('Saved'); callback(output); } }, err => { let message = ''; for (const key in err.error) { if (err.error[key]) { message += '\n' + key; for (const item of err.error[key]) { message += `${item},`; } } } AlertService.showAlert(message); }); } /** * Generate and return a random string * @param length Length of random string * @returns random string */ static getRandomString(length) { let result = ''; const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; const charactersLength = characters.length; for (let i = 0; i < length; i++) { result += characters.charAt(Math.floor(Math.random() * charactersLength)); } return result; } } ================================================ FILE: ArduinoFrontend/src/app/Libs/UndoUtils.ts ================================================ import { Utils } from './Utils'; import { Workspace } from './Workspace'; import { isNull } from 'util'; declare var window; /** * Abstract Class UndoUtils * Inherited to implement Undo & Redo Functionality */ export abstract class UndoUtils { /** * Boolean to disable undo/redo buttons for some time until circuit is loading */ static enableButtonsBool = true; /** * Undo Stack */ static undo = []; /** * Redo Stack */ static redo = []; /** * Workspace changed */ static event = new CustomEvent('changed', { detail : { changed: true, } }); /** * Call this function to Undo */ static workspaceUndo() { if (this.undo.length > 0) { const cng = this.undo.pop(); this.loadChange(cng, 'undo'); } } /** * Call this function to Redo */ static workspaceRedo() { if (this.redo.length > 0) { const cng = this.redo.pop(); this.loadChange(cng, 'redo'); } } /** * Function to reset redo stack & push into undo stack * @param ele event snapshot */ static pushChangeToUndoAndReset(ele) { // Empty Redo Stack this.redo = []; // This is used to save wires connected to element in case of delete event only if (ele.event === 'delete') { let step = 0; const grup = window.scope[ele.keyName]; const temp = this.getExistingWindowElement(grup, ele); for (const e in temp.nodes) { if (temp.nodes[e].connectedTo) { const wire = temp.nodes[e].connectedTo; UndoUtils.pushChangeToUndo({ keyName: wire.keyName, element: wire.save(), event: 'delete' }); step += 1; } } if (ele.event === 'add' || ele.event === 'delete') { UndoUtils.event.detail['ele'] = ele; console.log(ele); document.dispatchEvent(UndoUtils.event); } ele.step = step; this.undo.push(ele); return; } // If not delete continue to normal Undo Process this.pushChangeToUndo(ele); } /** * Function to push into redo stack * @param ele event snapshot */ static pushChangeToRedo(ele) { this.redo.push(ele); } /** * Function to push into undo stack * @param ele event snapshot */ static pushChangeToUndo(ele) { // This is used to save wires connected to element in case of delete event only if (ele.event === 'delete') { let step = 0; const grup = window.scope[ele.keyName]; const temp = this.getExistingWindowElement(grup, ele); for (const e in temp.nodes) { if (temp.nodes[e].connectedTo) { const wire = temp.nodes[e].connectedTo; UndoUtils.pushChangeToUndo({ keyName: wire.keyName, element: wire.save(), event: 'delete' }); step += 1; } } ele.step = step; } // Push to Undo stack this.undo.push(ele); if (ele.event === 'add' || ele.event === 'delete') { UndoUtils.event.detail['ele'] = ele; console.log(ele); document.dispatchEvent(UndoUtils.event); } } /** * Load The Changes, Called after Undo and redo operation to process the event snapshot * @param ele event snapshot * @param operation undo/redo */ static async loadChange(ele, operation) { // All elements in window.scope with similar const grup = window.scope[ele.keyName]; // Check if dragJson is present, & jump to next operation if both dx & dy are 0 if (ele.dragJson) { if (ele.dragJson.dx === 0 && ele.dragJson.dy === 0) { if (operation === 'undo') { this.workspaceUndo(); } else if (operation === 'redo') { this.workspaceRedo(); } return; } } if (ele.event === 'add' || ele.event === 'delete') { UndoUtils.event.detail['ele'] = ele; console.log(ele); document.dispatchEvent(UndoUtils.event); } // handle Delete events if (operation === 'undo' && ele.event === 'delete') { UndoUtils.createElement(ele).then(res => { // if (ele.keyName === 'BreadBoard') { // window['DragListeners'] = []; // window['DragStopListeners'] = []; // } for (let i = 0; i < ele.step; i++) { const chg = this.undo.pop(); UndoUtils.createElement(chg); } UndoUtils.pushChangeToRedo({ keyName: ele.keyName, element: ele.element, event: ele.event, step: ele.step }); }); return; } else if (operation === 'redo' && ele.event === 'delete') { const temp = this.getExistingWindowElement(grup, ele); window['Selected'] = temp; Workspace.DeleteComponent(false); return; } // handle auto-layout of wires if (ele.event === 'layout' && operation === 'undo') { const existing = this.getExistingWindowElement(grup, ele); UndoUtils.pushChangeToRedo({ keyName: existing.keyName, element: existing.save(), event: ele.event, step: ele.step }); UndoUtils.removeElement(ele).then(res => { UndoUtils.createElement(ele).then(result => { for (let i = 0; i < ele.step - 1; i++) { const chg = this.undo.pop(); const innerExisting = this.getExistingWindowElement(grup, chg); const obj = { keyName: innerExisting.keyName, element: innerExisting.save(), event: chg.event, step: chg.step }; UndoUtils.pushChangeToRedo(obj); UndoUtils.removeElement(chg).then(ress => { UndoUtils.createElement(chg); }); } }); }); return; } else if (ele.event === 'layout' && operation === 'redo') { const existing = this.getExistingWindowElement(grup, ele); UndoUtils.pushChangeToUndo({ keyName: existing.keyName, element: existing.save(), event: ele.event, step: ele.step }); UndoUtils.removeElement(ele).then(res => { UndoUtils.createElement(ele).then(result => { for (let i = 0; i < ele.step - 1; i++) { const chg = this.redo.pop(); const innerExisting = this.getExistingWindowElement(grup, chg); const obj = { keyName: innerExisting.keyName, element: innerExisting.save(), event: chg.event, step: chg.step }; UndoUtils.pushChangeToUndo(obj); UndoUtils.removeElement(chg).then(ress => { UndoUtils.createElement(chg); }); } }); }); } if (ele.event === 'breadDrag' && operation === 'undo') { UndoUtils.removeElement(ele).then(res => { UndoUtils.workspaceUndo(); }); return; } // handle Wire change events like add & color change if (ele.event === 'add' && operation === 'redo' && ele.keyName === 'wires') { UndoUtils.pushChangeToUndo(ele); UndoUtils.createElement(ele); return; } else if (ele.event === 'add' && operation === 'undo' && ele.keyName === 'wires') { UndoUtils.pushChangeToRedo(ele); UndoUtils.removeElement(ele); return; } else if (ele.event === 'wire_color' && operation === 'undo' && ele.keyName === 'wires') { const temp = this.getExistingWindowElement(grup, ele); UndoUtils.pushChangeToRedo({ keyName: ele.keyName, element: temp.save(), event: ele.event }); temp.setColor(ele.element.color); return; } else if (ele.event === 'wire_color' && operation === 'redo' && ele.keyName === 'wires') { const temp = this.getExistingWindowElement(grup, ele); UndoUtils.pushChangeToUndo({ keyName: ele.keyName, element: temp.save(), event: ele.event }); temp.setColor(ele.element.color); return; } // Only trigger if there is nothing in scope | is empty if (grup.length <= 0) { window['scope'][ele.keyName] = []; if (ele.event === 'add' && operation === 'redo') { UndoUtils.createElement(ele).then(done => { if (ele.keyName === 'BreadBoard') { // window['DragListeners'].splice(0, 1) // window['DragStopListeners'].splice(0, 1) } }); UndoUtils.pushChangeToUndo({ keyName: ele.keyName, element: window.scope[ele.keyName][0].save(), event: ele.event }); } } // Trigger if window.scope is not empty for (const e in grup) { if (grup[e].id === ele.element.id) { if (window.scope[ele.keyName][e].load) { // Push to Undo/Redo stack if (operation === 'undo') { const obj = { keyName: ele.keyName, element: window.scope[ele.keyName][e].save(), event: ele.event, dragJson: ele.dragJson }; UndoUtils.pushChangeToRedo(obj); } else if (operation === 'redo') { const obj = { keyName: ele.keyName, element: window.scope[ele.keyName][e].save(), event: ele.event, dragJson: ele.dragJson }; UndoUtils.pushChangeToUndo(obj); } // handle Add events if (ele.event === 'add' && operation === 'undo') { UndoUtils.removeElement(ele); return; } else if (ele.event === 'add' && operation === 'redo') { UndoUtils.createElement(ele); UndoUtils.removeElement(ele); } else if (ele.event === 'drag') { // TODO: handle element Drag events const existing = this.getExistingWindowElement(grup, ele); if (operation === 'undo') { if (ele.keyName === 'BreadBoard') { existing.transformBoardPosition(-ele.dragJson.dx, -ele.dragJson.dy); } else { existing.transformPosition(-ele.dragJson.dx, -ele.dragJson.dy); } } else { if (ele.keyName !== 'BreadBoard') { existing.transformPosition(ele.dragJson.dx, ele.dragJson.dy); Workspace.onDragEvent(existing); Workspace.onDragStopEvent(existing); } else { existing.transformBoardPosition(ele.dragJson.dx, ele.dragJson.dy); } } for (const ec in window.scope['wires']) { if (window.scope['wires'].hasOwnProperty(ec)) { window.scope['wires'][ec].update(); } } } else { // TODO: Handle all other events which weren't handled before // Create Element with dump of ele UndoUtils.createElement(ele).then(createdEle => { // Remove existing Element UndoUtils.removeElement(ele).then(done => { // Remove drag listeners if element is a breadboard if (ele.keyName === 'BreadBoard') { // window['DragListeners'].splice(0, 1) // window['DragStopListeners'].splice(0, 1) } }); }); } } } } } /** * Used to get the existing element in window.scope * @param grup window.scope['element_name'] * @param ele event snapshot * @returns already present element in window.scope */ static getExistingWindowElement(grup, ele) { for (const e in grup) { if (grup[e].id === ele.element.id) { if (window.scope[ele.keyName][e].load) { return window.scope[ele.keyName][e]; } } } } /** * create element again using its snapshot * @param ele element snapshot * @returns Promise */ static createElement(ele) { return new Promise((resolve, reject) => { window.queue = 0; const comp = ele.element; const key = ele.keyName; if (key === 'wires') { Workspace.LoadWires([ele.element], true, true); // resolve resolve(true); } // Get class from keyname using the map const myClass = Utils.components[key].className; // Create Component Object from class const obj = new myClass( window['canvas'], comp.x, comp.y ); window.queue += 1; // Add to scope window['scope'][key].push(obj); // Load data for each object if (obj.load) { obj.load(comp); } // Wait until all components are drawn const interval = setInterval(() => { if (window.queue === 0) { clearInterval(interval); // resolve when done resolve(obj); // Hide loading animation } else { // resolve anyways // resolve(obj) } }, 100); }); } /** * Remove and element from workspace using linear search * @param key Key of elements to delete * @param uid Id of element to delete * @returns Promise */ static removeElement(ele) { return new Promise((resolve, reject) => { const key = ele.keyName; const uid = ele.element.id; // get existing element that is to be removed const toRem = this.getExistingWindowElement(window.scope[key], ele); // If Current Selected item is a Wire which is not Connected from both end if (key === 'wires') { if (isNull(ele.element.end)) { // Remove and deselect toRem.remove(); } // make selected variables null window.Selected = null; window.isSelected = false; } // If BreadBoard remove draglistners too if (key === 'BreadBoard') { for (const i in window['DragListeners']) { if (window['DragListeners'].hasOwnProperty(i)) { const itrFn = window['DragListeners'][i]; if (itrFn.id === toRem.id) { window['DragListeners'].splice(i, 1); } } } for (const i in window['DragStopListeners']) { if (window['DragStopListeners'].hasOwnProperty(i)) { const itrFn = window['DragStopListeners'][i]; if (itrFn.id === toRem.id) { window['DragStopListeners'].splice(i, 1); } } } } // get the component keyname const items = window.scope[key]; // Use linear search find the element for (let i = 0; i < items.length; ++i) { if (items[i].id === uid) { // remove from DOM items[i].remove(); // Remove from scope const k = items.splice(i, 1); // Remove data from it recursively Workspace.removeMeta(k[0]); if (key !== 'wires') { let index = 0; while (index < window.scope.wires.length) { const wire = window.scope.wires[index]; if (isNull(wire.start) && isNull(wire.end)) { window.scope.wires.splice(index, 1); continue; } ++index; } } break; } } window.hideProperties(); resolve(true); }); } } ================================================ FILE: ArduinoFrontend/src/app/Libs/Utils.ts ================================================ import { Buzzer } from './outputs/Buzzer'; import { Battery9v, CoinCell } from './Battery'; import { PushButton, SlideSwitch } from './inputs/Buttons'; import { ArduinoUno } from './outputs/Arduino'; import { LED, RGBLED } from './outputs/Led'; import { UltrasonicSensor } from './inputs/UltrasonicSensor'; import { PIRSensor } from './inputs/PIRSensor'; import { Motor, L298N, ServoMotor } from './outputs/Motors'; import { LCD16X2, SevenSegment } from './outputs/Display'; import { Label } from './Miscellaneous'; import { PhotoResistor } from './inputs/PhotoResistor'; import { TMP36 } from './inputs/TemperatureSensors'; import { Potentiometer } from './inputs/Potentiometer'; import { Relay } from './inputs/Relay'; import { MQ2 } from './inputs/GasSensor'; import { Resistor, BreadBoard } from './General'; import { L293D } from './drivers/L293D'; import { Thermistor } from './inputs/Thermistor'; /** * Utils class * Contains All components with their section */ export class Utils { /** * Stores an object required by the Side Component Panel */ static componentBox = { input: [ ['PushButton', 'UltrasonicSensor', 'PIRSensor'], // Row ['SlideSwitch', 'MQ2', 'TMP36'], ['PotentioMeter', 'PhotoResistor', 'Thermistor'] ], power: [ ['Battery9v', 'CoinCell'] // Row ], controllers: [ ['ArduinoUno'] // Row ], output: [ ['Buzzer', 'LED', 'Motor'], // Row ['RGBLED', 'ServoMotor', 'SevenSegment'], ['LCD16X2'] ], drivers: [ ['L298N', 'L293D'] ], misc: [ ['Label', 'RelayModule'] ], general: [ ['Resistor', 'BreadBoard'] ] }; /** Components with thier name, image, classname */ static components = { BreadBoard: { name: 'BreadBoard', image: './assets/images/components/Breadboard.svg', className: BreadBoard }, Resistor: { name: 'Resistor', image: './assets/images/components/Resistor.png', className: Resistor }, RGBLED: { name: 'RGB LED', image: './assets/images/components/RGBLED.png', className: RGBLED }, SevenSegment: { name: 'Seven Segment Display', image: './assets/images/components/SevenSegment.png', className: SevenSegment }, MQ2: { name: 'Gas Sensor MQ2', image: './assets/images/components/GasSensor.svg', className: MQ2 }, ServoMotor: { name: 'Servo Motor', image: './assets/images/components/Servo.png', className: ServoMotor }, RelayModule: { name: 'Relay Module', image: './assets/images/components/1ChannelRelay.svg', className: Relay }, PotentioMeter: { name: 'Potentiometer', image: './assets/images/components/Potentiometer.png', className: Potentiometer }, TMP36: { name: 'Temperature Sensor TMP36', image: './assets/images/components/TMP36.svg', className: TMP36 }, PhotoResistor: { name: 'Photo Resistor', image: './assets/images/components/PhotoResistor.svg', className: PhotoResistor }, Label: { name: 'Label', image: './assets/images/components/Text.png', className: Label }, CoinCell: { name: 'Coin Cell 3V', image: './assets/images/components/CoinCell.svg', className: CoinCell }, SlideSwitch: { name: 'Slide Switch', image: './assets/images/components/SlideSwitch.png', className: SlideSwitch }, LCD16X2: { name: 'LCD 16x2', image: './assets/images/components/LCD16X2.png', className: LCD16X2 }, L298N: { name: 'Motor Driver L298N', image: './assets/images/components/L298N.png', className: L298N }, Motor: { name: 'Motor', image: './assets/images/components/Motor.png', className: Motor }, PIRSensor: { name: 'PIR Sensor', image: './assets/images/components/PIRSensor.png', className: PIRSensor }, UltrasonicSensor: { name: 'Ultrasonic Distance Sensor', image: './assets/images/components/UltrasonicSensor.png', className: UltrasonicSensor }, LED: { name: 'LED', image: './assets/images/components/led.png', className: LED }, ArduinoUno: { name: 'Arduino UNO', image: './assets/images/components/ArduinoUno.png', className: ArduinoUno }, PushButton: { name: 'Push Button', image: './assets/images/components/PushButton.png', className: PushButton }, Battery9v: { name: '9v Battery', image: './assets/images/components/Battery9v.png', className: Battery9v }, Buzzer: { name: 'Buzzer', image: './assets/images/components/Buzzer.png', className: Buzzer }, L293D: { name: 'L293D', image: './assets/images/components/L293D.png', className: L293D }, Thermistor: { name: 'Thermistor', image: './assets/images/components/Thermistor.png', className: Thermistor } }; } ================================================ FILE: ArduinoFrontend/src/app/Libs/Wire.ts ================================================ import { Point } from './Point'; import _ from 'lodash'; import { UndoUtils } from './UndoUtils'; /** * To prevent window from throwing error */ declare let window; /** * Class for Wire */ export class Wire { /** * Keyname require for mapping */ keyName = 'wires'; /** * Stores array of position [x,y] */ points: number[][] = []; /** * Store the Raphael elements of the joints */ joints: any[] = []; /** * End circuit node of wire */ end: Point = null; /** * Body of the wire */ element: any; /** * Color of the wire */ color: any = '#000'; /** * Store the glows on Hover */ glows: any[] = []; /** * Id of the Wire */ id: number; /** * Temporary point (which was used to draw perpendicular last time) of the wire while in drawing status */ lastTempPoint: [number, number]; /** * Constructor of wire * @param canvas Raphael Canvas / paper * @param start Start circuit node of wire */ constructor(public canvas, public start: Point, public existingId = null) { if (existingId) { this.id = existingId; } else { this.id = this.getUniqueId(Date.now()); } // insert the position of start node in array this.points.push(start.position()); } /** * Recursive function to check if id is already present. * If present then return a new unique id * @param id current id * @returns id number */ getUniqueId(id): number { for (const e in window.scope) { if (window.scope.hasOwnProperty(e)) { for (const i in window.scope[e]) { if (window.scope[e][i].id === id) { return this.getUniqueId(Date.now() + Math.floor(Math.random() * 1000000)); } } } } return id; } /** * Creates path element for the wire * @param element canvas element */ createElement(element) { if (this.element) { this.removeGlows(); this.element.remove(); } this.element = element; this.element.attr({ 'stroke-linecap': 'round', 'stroke-linejoin': 'round', 'stroke-width': '4', stroke: this.color }); this.element.mouseover(() => { // only glow if the wire has a start and an end if (this.start && this.end) { this.glows.push( this.element.glow({ color: this.color }) ); } }); this.element.mouseout(() => { this.removeGlows(); }); // set click listener this.element.click(() => { this.handleClick(); }); } /** * Adds a new coordinate (x, y) to the wire * @param x x-coordinate of cursor * @param y y-coordinate of cursor * @param isPerpendicular is the point to be drawn perpendicular */ addPoint(x: number, y: number, isPerpendicular = false, index?) { let newX = x; let newY = y; if (isPerpendicular) { const n = this.points.length; const [previousX, previousY] = this.points[n - 1]; [newX, newY] = this.getPerpendicularXY(x, y, previousX, previousY); } this.add(newX, newY, index); // draw the line from the previous point to cursor's current position if (isPerpendicular) { this.drawPerpendicular(x, y); } else { this.draw(x, y); } } /** * Removes all the intermediate points from the wire path */ removeAllMiddlePoints() { for (let i = this.points.length; i > 0; i--) { this.removeJoint(i); } this.points = [this.points[0], this.points[this.points.length - 1]]; } /** * Makes the current temporary line perpendicular depending on current x and y * @param toggle: true to draw perpendicular line upto current cursor's position * false to undo the current perpendicular status */ togglePerpendicularLine(toggle: boolean) { const currentPathAttrs = this.element.attrs.path; const n = currentPathAttrs.length; const [x, y] = currentPathAttrs[n - 1].slice(1); let newX = null; let newY = null; if (toggle) { // if toggle is true, draw perpendicular lines const [previousX, previousY] = currentPathAttrs[n - 2].slice(1); [newX, newY] = this.getPerpendicularXY(x, y, previousX, previousY); } else { [newX, newY] = this.lastTempPoint; } this.drawWire(newX, newY); } /** * draws perpendicular lines based on current x, y coordinates * @param x x-coordinate of cursor * @param y y-coordinate of cursor */ drawPerpendicular(x: number, y: number) { this.lastTempPoint = [x, y]; const n = this.points.length; const [previousX, previousY] = this.points[n - 1]; const [newX, newY] = this.getPerpendicularXY(x, y, previousX, previousY); this.drawWire(newX, newY); } /** * Draws wire to (x, y) * @param x x-coordinate * @param y y-coordiante */ draw(x: number, y: number) { this.lastTempPoint = [x, y]; this.drawWire(x, y); } /** * Returns x, y for perpendicular lines * @param x current x-coordinate * @param y current y-coordinate * @param previousX previous x-coordinate * @param previousY previous y-coordinate */ private getPerpendicularXY(x: number, y: number, previousX: number, previousY: number) { const delX = Math.abs(x - previousX); const delY = Math.abs(y - previousY); return (delX > delY) ? [x, previousY] : [previousX, y]; } /** * updates the path of the wire * @param newPath new path of the wire */ private updateWirePath(newPath: string) { if (this.element) { // only update the path if the new path is different if (this.element.attrs.path.toString() !== newPath) { this.element.attr('path', newPath); } } else { this.createElement(this.canvas.path(newPath)); } } /** * Draws wire on the canvas * @param x x position of point to be added * @param y y position of point to be added */ private drawWire(x?: number, y?: number) { let path = `M${this.points[0][0]},${this.points[0][1]}`; // Draw lines to other points for (let i = 1; i < this.points.length; ++i) { path += `L${this.points[i][0]},${this.points[i][1]}`; } if (x && y) { path += `L${x},${y}`; } // Update path this.updateWirePath(path); } /** * Add a point to wire * @param x x position * @param y y position */ private add(x: number, y: number, index?) { if (index) { // insert the point [x, y] at the index and create joint this.points.splice(index, 0, [x, y]); this.createJoint(index, true); } else { // else, insert at the end this.points.push([x, y]); } } /** * Handle click on Wire */ handleClick() { // If Current Selected item is wire then deselect it if (window['Selected'] && (window['Selected'] instanceof Wire)) { window['Selected'].deselect(); } // Show all joints for (const joint of this.joints) { joint.show(); } // Select current instance window['isSelected'] = true; window['Selected'] = this; // Show properties window.showProperty(() => { return this.properties(); }); } /** * Set Color of the wire * @param color color of the wire */ setColor(color: string) { this.color = color; this.element.attr({ stroke: color }); // set attribute // Update the color of joints for (const joint of this.joints) { joint.attr({ fill: color, stroke: color }); } } /** * Return Properties of wire */ properties() { // Create div and insert options form color const body = document.createElement('div'); body.innerHTML = '
'; const select = document.createElement('select'); select.innerHTML = ` `; const colors = ['#000', '#ff0000', '#e6a800', '#2593fa', '#31c404', '#FF5733', '#30D5C8', '#800080', '#FF00FF', '#964B00', '#696969' ]; // set the current color for (let i = 0; i < colors.length; ++i) { if (colors[i] === this.color) { select.selectedIndex = i; } } // set on change listener select.onchange = () => { // Push dump to Undo stack & Reset UndoUtils.pushChangeToUndoAndReset({ keyName: this.keyName, element: this.save(), event: 'wire_color' }); this.setColor(colors[select.selectedIndex]); }; body.append(select); return { title: 'Wire', keyName: this.keyName, id: this.id, body }; } /** * Function to connect wire with the node * @param t End point / END circuit node * @param removeLast remove previously inserted item */ connect(t: Point, removeLast: boolean = false, hideJoint: boolean = false, pushUndo = false, undoEvtType = 'add') { // if remove last then pop from array if (removeLast && this.points.length > 1) { this.points.pop(); } // change the end letiable this.end = t; // insert the end position this.points.push(t.position()); if (this.points.length > 2) { // For each point in the wire except first and last for (let i = 1; i < this.points.length - 1; ++i) { // Create a Joint this.createJoint(i, hideJoint); } } // Update Wire this.update(); // Push dump to Undo stack, only if pushUndo is false if (!pushUndo) { UndoUtils.pushChangeToUndoAndReset({ keyName: this.keyName, element: this.save(), event: undoEvtType }); } if (undoEvtType === 'breadDrag') { UndoUtils.pushChangeToUndo({ keyName: this.keyName, element: this.save(), event: undoEvtType }); } } /** * Removes joint present at the point at index `pointIndex` * @param pointIndex: index of the point whose joint needs to be removed */ removeJoint(pointIndex: number) { const jointIndex = pointIndex - 1; const joint = this.joints[jointIndex]; if (joint) { joint.remove(); this.joints.splice(jointIndex, 1); } } /** * Creates joint at the index `pointIndex` * @param pointIndex index of the point * @param hideJoint hide the joint? */ createJoint(pointIndex: number, hideJoint: boolean = false) { const joint = this.canvas.circle(this.points[pointIndex][0], this.points[pointIndex][1], 6); joint.attr({ fill: this.color, stroke: this.color }); // Give the joint a Color // Variables used while dragging joints let tmpx; let tmpy; // set drag listener joint.drag((dx, dy) => { // Update joints position joint.attr({ cx: tmpx + dx, cy: tmpy + dy }); // Update repective Point this.points[pointIndex] = [tmpx + dx, tmpy + dy]; // Update the wire this.update(); }, () => { // Get the Joints center const jointAttr = joint.attr(); tmpx = jointAttr.cx; tmpy = jointAttr.cy; }, () => { }); this.joints.push(joint); // Hide joint if required if (hideJoint) { joint.hide(); } } /** * Returns true if both end of wire is connected */ isConnected() { return (this.start !== null && this.end !== null); } /** * Update the wire position if the parent element is changed */ update() { // check if both start and end node are present if (this.end && this.start) { // Update the start and ending position this.points[0] = this.start.position(); this.points[this.points.length - 1] = this.end.position(); this.drawWire(); return true; } return false; } /** * Callback called after the wire is deselect */ deselect() { for (const joint of this.joints) { joint.hide(); } } /** * Return save object for the wire */ save() { return { // object contains points,color,start point(id,keyname),end point(id,keybame) id: this.id, points: this.points, color: this.color, start: { id: this.start.parent.id, keyName: this.start.parent.keyName, pid: this.start.id, isSoldered: this.start.isSoldered() }, end: { id: this.end.parent.id, keyName: this.end.parent.keyName, pid: this.end.id, isSoldered: this.end.isSoldered() } }; } /** * Load data from saved object * @param data Saved object */ load(data) { this.color = data.color; this.points = data.points; if (data.start.isSoldered) { this.start.solderWire(); } if (data.end.isSoldered) { this.end.solderWire(); } } /** * Remove Glow of Wire */ private removeGlows() { if (this.glows) { while (this.glows.length !== 0) { this.glows.pop().remove(); } } } /** * Remove wire from canvas */ remove() { // Remove Joint for (const joint of this.joints) { joint.remove(); } // Remove Glow this.removeGlows(); // Clear Joints this.joints = null; // Clear Points this.points = null; // Remove element from dom this.element.remove(); // Clear connection from start node if (this.start) { this.start.disconnect(); } // Clear connection from end node if (this.end) { this.end.disconnect(); } this.start = null; this.end = null; this.element = null; } /** * Removes the wire from window.scope and canvas */ delete() { _.remove(window.scope.wires, wire => wire === this); this.remove(); } } ================================================ FILE: ArduinoFrontend/src/app/Libs/Workspace.ts ================================================ import { Utils } from './Utils'; import { Wire } from './Wire'; import { ArduinoUno } from './outputs/Arduino'; import { ApiService } from '../api.service'; import { Download, ImageType } from './Download'; import { isNull, isUndefined } from 'util'; import { SaveOffline } from './SaveOffiline'; import { Point } from './Point'; import { UndoUtils } from './UndoUtils'; import { EventEmitter } from '@angular/core'; /** * Declare window so that custom created function don't throw error */ declare var window; // Enum function for Colour values to print in console export enum ConsoleType { INFO, WARN, ERROR, OUTPUT } /** * This class contains all Workspace related functions. */ export class Workspace { /** * The Worspace Translation x value */ static translateX = 0.0; /** * The Worspace Translation y value */ static translateY = 0.0; /** * Stores scaling factor value for zoom in/out */ static scale = 1.0; /** * zoomin/out increments by 0.01 */ static readonly zooomIncrement = 0.01; /** * Translation Rate while holding and moving canvas */ static readonly translateRate = 0.25; /** * tores initial position values for x and y */ static moveCanvas = { x: 0, y: 0, start: false }; /** * Stores value of copied component */ static copiedItem: any; /** * If simulation is on progress or not */ static simulating = false; /** * If circuit is loaded or not */ static circuitLoaded = false; static circuitLoadStatus: EventEmitter = new EventEmitter(); static simulationStopped: EventEmitter = new EventEmitter(); static simulationStarted: EventEmitter = new EventEmitter(); /** function to zoom in workspace */ static zoomIn() { Workspace.scale = Math.min(10, Workspace.scale + Workspace.zooomIncrement); Workspace.scale = Math.min(10, Workspace.scale + Workspace.zooomIncrement); const ele = (window['canvas'].canvas as HTMLElement); ele.setAttribute('transform', `scale( ${Workspace.scale}, ${Workspace.scale}) translate(${Workspace.translateX}, ${Workspace.translateY})`); Workspace.updateWires(); } /** function to zoom out workspace */ static zoomOut() { Workspace.scale = Math.max(0.1, Workspace.scale - Workspace.zooomIncrement); Workspace.scale = Math.max(0.1, Workspace.scale - Workspace.zooomIncrement); const ele = (window['canvas'].canvas as HTMLElement); ele.setAttribute('transform', `scale( ${Workspace.scale}, ${Workspace.scale}) translate(${Workspace.translateX}, ${Workspace.translateY})`); Workspace.updateWires(); } /** Function deals with min and max value of zoom, hold and move */ static minMax(min: number, max: number, value: number) { if (value < min) { return min; } if (value > max) { return max; } return value; } /** * Initialize Global Variables * @param canvas Raphael Paper (Canvas) */ static initalizeGlobalVariables(canvas: any) { Workspace.simulating = false; Workspace.copiedItem = null; Workspace.moveCanvas = { x: 0, y: 0, start: false }; Workspace.scale = 1.0; Workspace.translateY = 0.0; Workspace.translateX = 0.0; window['canvas'] = canvas; window['holder'] = document.getElementById('holder').getBoundingClientRect(); window['holder_svg'] = document.querySelector('#holder > svg'); window['ArduinoUno_name'] = {}; window.scope = null; // Stores all the Circuit Information window['scope'] = { wires: [] }; for (const key in Utils.components) { if (window['scope'][key] === null || window['scope'][key] === undefined) { window['scope'][key] = []; } } // Default programming language is Arduino window['progLang'] = 0; // True when simulation takes place window['isSimulating'] = false; // Stores the reference to the selected circuit component window['Selected'] = null; // True when a component is selected window['isSelected'] = false; // Intialize a variable for Property Box window['property_box'] = { x: 0, y: 0, element: document.getElementById('propertybox'), title: document.querySelector('#propertybox .title'), body: document.querySelector('#propertybox .body'), mousedown: false }; window['DragListeners'] = []; window['DragStopListeners'] = []; window['onDragEvent'] = Workspace.onDragEvent; window['onDragStopEvent'] = Workspace.onDragStopEvent; } /** * Handler for drag stop event */ static onDragStopEvent(element) { for (const fn of window.DragStopListeners) { fn.fn(element); } } /** * Handler for drag event */ static onDragEvent(element) { for (const fn of window.DragListeners) { fn.fn(element); } } /** * Subscribes to drag event of element in the workspace * @param fn listener function */ static subsribeToDrag(fn) { window['DragListeners'].push(fn); } /** * Subscribes to drag stop event of element in the workspace * @param fn listener function */ static subsribeToDragStop(fn) { window['DragStopListeners'].push(fn); } /** * Initialize Property Box * @param toggle Callback For Property Box */ static initProperty(toggle: (state: boolean) => void) { // Global Function to Show Properties of Circuit Component window['showProperty'] = (callback: any) => { const data = callback(); window['property_box'].element.setAttribute('key', data.keyName); window['property_box'].title.innerText = data.title; window['property_box'].body.innerHTML = ''; window['property_box'].body.appendChild(data.body); toggle(false); }; // Global Function to Hide Properties of Circuit Component window['hideProperties'] = () => { if (window.Selected && window.Selected.deselect) { window.Selected.deselect(); } window['Selected'] = null; window['isSelected'] = false; window['property_box'].body.innerHTML = ''; window['property_box'].title.innerText = 'Project Info'; toggle(true); }; } /** * Initialize Global Functions */ static initializeGlobalFunctions() { // Global Function to show Popup Bubble window['showBubble'] = (label: string, x: number, y: number) => { // id label is empty don't show anything if (label === '') { return; } const ele = document.getElementById('bubblebox'); ele.innerText = label; ele.style.display = 'block'; ele.style.top = `${y + 25}px`; ele.style.left = `${(x - ele.clientWidth / 2)}px`; }; // Global Function to hide Popub Bubble window['hideBubble'] = () => { const ele = document.getElementById('bubblebox'); ele.style.display = 'none'; }; // Global Function to show Toast Message window['showToast'] = (message: string) => { const ele = document.getElementById('ToastMessage'); ele.style.display = 'block'; ele.innerText = message; ele.style.padding = '15px 25px 15px 25px'; setTimeout(() => { ele.style.display = 'none'; }, 10000); }; // Global Function to print output in Console window['printConsole'] = (textmsg: string, type: ConsoleType) => { const msg = document.getElementById('msg'); const container = document.createElement('label'); container.innerText = textmsg; // checks which type of output needs to be printed // depending on which the colour is assigned if (type === ConsoleType.ERROR) { container.style.color = 'red'; } else if (type === ConsoleType.WARN) { container.style.color = 'yellow'; } else if (type === ConsoleType.INFO) { container.style.color = 'white'; } else if (type === ConsoleType.OUTPUT) { container.style.color = '#03fc6b'; } msg.appendChild(container); }; } /** * Before Unload Event Handler * @param event Before Unload Event */ static BeforeUnload(event) { event.preventDefault(); event.returnValue = 'did you save the stuff?'; } /** * Event Listener for mousemove on html body * @param event Mouse Event */ static bodyMouseMove(event: MouseEvent) { if (Workspace.moveCanvas.start) { const dx = (event.clientX - Workspace.moveCanvas.x) * Workspace.translateRate; const dy = (event.clientY - Workspace.moveCanvas.y) * Workspace.translateRate; const ele = (window['canvas'].canvas as HTMLElement); ele.setAttribute('transform', `scale( ${Workspace.scale}, ${Workspace.scale}) translate(${Workspace.translateX + dx}, ${Workspace.translateY + dy})`); } if (window['property_box'].start) { const el = window['property_box'].element; el.style.left = `${Workspace.minMax(0, window.innerWidth - 220, event.clientX - window['property_box'].x)}px`; el.style.top = `${Workspace.minMax(0, window.innerHeight - 50, event.clientY - window['property_box'].y)}px`; } } /** * Event Listener for mouseup on html body * @param event Mouse Event */ static bodyMouseUp(event: MouseEvent) { if (Workspace.moveCanvas.start) { const dx = (event.clientX - Workspace.moveCanvas.x) * Workspace.translateRate; const dy = (event.clientY - Workspace.moveCanvas.y) * Workspace.translateRate; Workspace.translateX += dx; Workspace.translateY += dy; Workspace.moveCanvas.start = false; document.getElementById('holder').classList.remove('grabbing'); } window['property_box'].start = false; } /** * Event Listener for mousedown on html body * @param event MouseDown */ static mouseDown(event: MouseEvent) { Workspace.hideContextMenu(); if (window['isSelected'] && (window['Selected'] instanceof Wire)) { // if selected item is wire and it is not connected then add the point if (window.Selected.end == null) { const pt = Workspace.svgPoint(event.clientX, event.clientY); window.Selected.addPoint(pt.x, pt.y, event.shiftKey); return; } } if ((event.target as HTMLElement).tagName === 'svg') { Workspace.moveCanvas = { x: event.clientX, y: event.clientY, start: true }; document.getElementById('holder').classList.add('grabbing'); } } /** * Event Handler On clicking on workspace * @param event Mouse Click event */ static click(event: MouseEvent) { } /** * Returns true if current selected item is wire */ private static isWireSelected(): boolean { return window['isSelected'] && (window['Selected'] instanceof Wire); } /** * Event Listener for mouseMove on html body * @param event MouseMove */ static mouseMove(event: MouseEvent) { event.preventDefault(); // if wire is selected then draw temporary lines if (Workspace.isWireSelected()) { const pt = Workspace.svgPoint(event.clientX - 2, event.clientY - 2); if (event.shiftKey) { window.Selected.drawPerpendicular(pt.x, pt.y); } else { window.Selected.draw(pt.x, pt.y); } } else { // deselect item if (window.Selected && window.Selected.deselect) { window.Selected.deselect(); } } Workspace.updateWires(); } /* TODO: Remove if not Required static mouseEnter(event: MouseEvent) { } static mouseLeave(event: MouseEvent) { } static mouseOver(event: MouseEvent) { } static mouseOut(event: MouseEvent) { }*/ /** * Event handler for mouse up on workspace. * @param event Mouse Event */ static mouseUp(event: MouseEvent) { } /** * Event Listener to display Context menu (for performing copy, paste, delete operation) * @param event Mouse Event */ static contextMenu(event: MouseEvent) { event.preventDefault(); const element = document.getElementById('contextMenu'); element.style.display = 'block'; element.style.left = `${event.clientX}px`; element.style.top = `${event.clientY}px`; return true; } /** Function called to hide ContextMenu */ static hideContextMenu() { const element = document.getElementById('contextMenu'); element.style.display = 'none'; } /** * Event handler for copy on workspace. * @param event Clipboard Event */ static copy(event: ClipboardEvent) { } /** * Event handler for CUT on workspace. * @param event Clipboard Event */ static cut(event: ClipboardEvent) { } /** * function deselects the item on Canvas * @param event DoubleClick */ static doubleClick(event: MouseEvent) { if (window['isSelected'] && (window['Selected'] instanceof Wire) && !window.Selected.isConnected()) { return; } if ((event.target as HTMLElement).tagName !== 'svg') { return; } // deselect item window.hideProperties(); } /** * function drags element to valid drop target * @param event DragEvent */ static dragLeave(event: DragEvent) { event.preventDefault(); event.stopPropagation(); } /** * function drags element over a valid drop target * @param event DragEvent */ static dragOver(event: DragEvent) { event.preventDefault(); event.stopPropagation(); } /** * function drop element at drop target * @param event DragEvent */ static drop(event: DragEvent) { event.preventDefault(); event.stopPropagation(); const className = event.dataTransfer.getData('text'); // get the event data const pt = Workspace.svgPoint(event.clientX, event.clientY); Workspace.addComponent(className, pt.x, pt.y, 0, 0); } /** * Key down event on workspace. * @param event Keyboard Event */ static keyDown(event: KeyboardEvent) { if (event.shiftKey) { if (Workspace.isWireSelected()) { window.Selected.togglePerpendicularLine(true); } } } /** * Key Press event on workspace. * @param event Keyboard Event */ static keyPress(event: KeyboardEvent) { } /** * event Listener to perform Keyboard Shortcut operations * @param event keyup Event */ static keyUp(event: KeyboardEvent) { if (window.isCodeEditorOpened) { return; } if ((event.key === 'Delete' || event.key === 'Backspace') && !(event['target']['localName'] === 'input' || event['target']['localName'] === 'textarea')) { // Backspace or Delete Workspace.DeleteComponent(); } if (event.key === 'Escape') { // terminate current wire connection if in progress if (window.Selected instanceof Wire && !window.Selected.isConnected()) { Workspace.DeleteComponent(); } } if (event.ctrlKey && (event.key === 'c' || event.key === 'C')) { // Copy Workspace.copyComponent(); } if (event.ctrlKey && (event.key === 'v' || event.key === 'V')) { // paste Workspace.pasteComponent(); } if (event.ctrlKey && (event.key === '+')) { // CTRL + + Workspace.zoomIn(); } if (event.ctrlKey && (event.key === '-')) { // CTRL + - Workspace.zoomIn(); } if (event.ctrlKey && (event.key === 'k' || event.key === 'K')) { // TODO: Open Code Editor } if (event.key === 'F5') { // TODO: Start Simulation } if (event.key === 'Shift') { if (Workspace.isWireSelected()) { window.Selected.togglePerpendicularLine(false); } } if (event.ctrlKey && (event.key === 'z' || event.key === 'Z') && UndoUtils.enableButtonsBool) { // CTRL + z // Call Undo Function UndoUtils.workspaceUndo(); } } /** * Event Listener for zoom in/zoom out on workspace * @param event MouseWheel Event */ static mouseWheel(event: WheelEvent) { event.preventDefault(); if (event.deltaY < 0) { Workspace.zoomIn(); } else { Workspace.zoomOut(); } } /** * Event handler for paste. * @param event Clipboard Event */ static paste(event: ClipboardEvent) { } /** * Function adds components by providing their keynames * @param classString string * @param x number * @param y number * @param offsetX number * @param offsetY number */ static addComponent(classString: string, x: number, y: number, offsetX: number, offsetY: number) { const myClass = Utils.components[classString].className; const obj = new myClass( window['canvas'], x - offsetX, y - offsetY ); window['scope'][classString].push(obj); // Push dump to Undo stack & Reset UndoUtils.pushChangeToUndoAndReset({ keyName: obj.keyName, event: 'add', element: obj.save() }); } /** Function updates the position of wires */ static updateWires() { for (const z of window['scope']['wires']) { z.update(); } } /** * Function returns point translated according to the svg * @param x number * @param y number */ static svgPoint(x, y) { const pt = window['holder_svg'].createSVGPoint(); pt.x = x; pt.y = y; return pt.matrixTransform(window.canvas.canvas.getScreenCTM().inverse()); } /** * This function is required by deleteComponent() to recursively remove item * @param obj any */ static removeMeta(obj) { for (const prop in obj) { if (typeof obj[prop] === 'object') { obj[prop] = null; } else { delete obj[prop]; } } } /** * Function saves the circuit Offline * @param name string * @param description string * @param callback any * @param id number */ static SaveCircuit(name: string = '', description: string = '', callback: any = null, id: number = null) { let toUpdate = false; // Check if id is already present then enable Update if (isNull(id)) { id = Date.now(); } else { toUpdate = true; } // Default Save object const saveObj = { id, canvas: { x: Workspace.translateX, y: Workspace.translateY, scale: Workspace.scale }, project: { name, description, created_at: Date.now(), updated_at: Date.now() } }; // For each item in the scope for (const key in window.scope) { // if atleast one component is present if (window.scope[key] && window.scope[key].length > 0) { saveObj[key] = []; // Add the component to the save object for (const item of window.scope[key]) { if (item.save) { saveObj[key].push(item.save()); } } } } // Save the Thumbnail for the circuit Download.ExportImage(ImageType.PNG).then(v => { saveObj.project['image'] = v; // Add the base64 image // console.log(saveObj); // Save or Update Circuit Ofline if (toUpdate) { SaveOffline.Update(saveObj, callback); } else { SaveOffline.Save(saveObj, callback); } }); } /** * Function called to Load data from saved object * @param data Saved Object */ static Load(data) { // Clear Project this.ClearWorkspace(); // Show loading animation window.showLoading(); // Load The translation and scaling values Workspace.translateX = data.canvas.x; Workspace.translateY = data.canvas.y; Workspace.scale = data.canvas.scale; // Update the translation and scaling window.queue = 0; const ele = (window['canvas'].canvas as HTMLElement); ele.setAttribute('transform', `scale( ${Workspace.scale}, ${Workspace.scale}) translate(${Workspace.translateX}, ${Workspace.translateY})`); // For each component key in the data for (const key in data) { // Check if key is valid if (!(key in data)) { continue; } // if key is not related to circuit then continue if (key !== 'id' && key !== 'canvas' && key !== 'project' && key !== 'wires') { // Initialize an array window['scope'][key] = []; // Get the data for respective component const components = data[key]; for (const comp of components) { // Get class from keyname using the map const myClass = Utils.components[key].className; // Create Component Object from class const obj = new myClass( window['canvas'], comp.x, comp.y ); window.queue += 1; // Add to scope window['scope'][key].push(obj); // Load data for each object if (obj.load) { obj.load(comp); } } } } // Wait until all components are drawn const interval = setInterval(() => { if (window.queue === 0) { clearInterval(interval); // start drawing wires with Id retain Workspace.LoadWires(data.wires, true); // Hide loading animation window.hideLoading(); } }, 100); } /** This function recreates the wire object */ static LoadWires(wires: any[], retainId = false, pushUndo = false) { if (isNull(wires) || isUndefined(wires)) { return; } for (const w of wires) { const points = w.points; let start: Point = null; let end: Point = null; // Use Linear search to find the start circuit node for (const st of window.scope[w.start.keyName]) { // console.log(st.id,w.start.id); if (st.id === w.start.id) { start = st.getNode(points[0][0], points[0][1], w.start.pid); break; } } // Use Linear Search to find the end circuit node for (const en of window.scope[w.end.keyName]) { if (en.id === w.end.id) { const p = points[points.length - 1]; end = en.getNode(p[0], p[1], w.end.pid); break; } } // console.log([start, end]); // if both nodes are present then connect those nodes if (start && end) { let tmp: any; if (retainId) { tmp = new Wire(window.canvas, start, w.id); } else { tmp = new Wire(window.canvas, start); } tmp.load(w); start.connectedTo = tmp; end.connectedTo = tmp; tmp.connect(end, true, true, pushUndo); window['scope']['wires'].push(tmp); tmp.update(); if (start.connectCallback) { start.connectCallback(start); } if (end.connectCallback) { end.connectCallback(end); } } else { console.log('Not able to recreate Wires'); // alert('something went wrong'); } } Workspace.circuitLoaded = true; Workspace.circuitLoadStatus.emit(true); } /** Function to delete component fro Workspace */ static DeleteComponent(undoReset = true) { // Save Dump of current Workspace // Check if component is selected if (window['Selected']) { // is selected component is an arduini uno then show confirm message if (window['Selected'] instanceof ArduinoUno) { const ans = confirm('The Respective code will also be lost!'); if (!ans) { return; } } // get the component id const uid = window.Selected.id; const key = window.Selected.keyName; if (!(window.Selected instanceof Wire && !window.Selected.isConnected())) { const obj = { keyName: window.Selected.keyName, element: window.Selected.save(), event: 'delete' }; // Push dump to Undo stack & Reset if undoReset is true, else just push if (undoReset) { UndoUtils.pushChangeToUndoAndReset(obj); } else { UndoUtils.pushChangeToUndo(obj); } } // If Current Selected item is a Wire which is not Connected from both end if (key === 'wires') { if (isNull(window.Selected.end)) { // Remove and deselect window.Selected.remove(); window.Selected = null; window.isSelected = false; } } // If BreadBoard remove draglistners too if (key === 'BreadBoard') { // Search in DragListeners & splice for (const i in window['DragListeners']) { if (window.DragListeners.hasOwnProperty(i)) { const itrFn = window['DragListeners'][i]; if (itrFn.id === window['Selected'].id) { window['DragListeners'].splice(i, 1); } } } // Search in DragStopListeners & splice for (const i in window['DragStopListeners']) { if (window.DragStopListeners.hasOwnProperty(i)) { const itrFn = window['DragStopListeners'][i]; if (itrFn.id === window['Selected'].id) { window['DragStopListeners'].splice(i, 1); } } } } // get the component keyname const items = window.scope[key]; // Use linear search find the element for (let i = 0; i < items.length; ++i) { if (items[i].id === uid) { // remove from DOM window.Selected.remove(); window.Selected = null; window.isSelected = false; // Remove from scope const k = items.splice(i, 1); // Remove data from it recursively Workspace.removeMeta(k[0]); if (key !== 'wires') { let index = 0; while (index < window.scope.wires.length) { const wire = window.scope.wires[index]; if (isNull(wire.start) && isNull(wire.end)) { window.scope.wires.splice(index, 1); continue; } ++index; } } break; } } // Hide Property box window.hideProperties(); } else { window['showToast']('No Element Selected'); } } /** Function to copy component fro Workspace */ static copyComponent() { if (window['Selected']) { if (window['Selected'] instanceof Wire) { window['showToast']('You Can\'t Copy Wire'); return; } Workspace.copiedItem = window.Selected; } else { Workspace.copiedItem = null; } } /** Function to paste component fro Workspace */ static pasteComponent() { // Save Dump of current Workspace // console.log(Workspace.copiedItem); if (Workspace.copiedItem) { const ele = document.getElementById('contextMenu'); let x = +ele.style.left.replace('px', ''); let y = +ele.style.top.replace('px', ''); // console.log([x, y]); const key = Workspace.copiedItem.keyName; if (x === 0 && y === 0) { x = Workspace.copiedItem.x + 100; y = Workspace.copiedItem.y + 100; } const pt = Workspace.svgPoint(x, y); // Workspace.addComponent(Workspace.copiedItem, pt.x, pt.y, 0, 0); const myClass = Utils.components[key].className; const obj = new myClass(window['canvas'], pt.x, pt.y); window['scope'][key].push(obj); // obj.copy(Workspace.copiedItem) } } /** Function called to clear output in console */ static ClearConsole() { const clear = document.getElementById('msg'); let inside: any = clear.firstChild; while (inside != null) { if (inside.tagName === 'PRE') { inside.innerText = ''; inside = inside.nextSibling; continue; } const tmp = inside; inside = inside.nextSibling; clear.removeChild(tmp); } } /** Function called to compile code in console */ static CompileCode(api: ApiService, callback: () => void) { const toSend = {}; // Json Which needs to be Send for compilation const nameMap = {}; // Create a Mapping id => Arduino // Check if there is any Programmable Device const isProgrammable = window.scope.ArduinoUno.length > 0; if (!isProgrammable) { window.printConsole('No Programmable Device Found', ConsoleType.INFO); Workspace.startArduino(); callback(); return; } for (const arduino of window.scope.ArduinoUno) { toSend[arduino.id] = arduino.code; nameMap[arduino.id] = arduino; } window.printConsole('Compiling Source Code', ConsoleType.INFO); if (window.progLang === 0) { api.compileCodeINO(toSend).subscribe(v => { const taskid = v.uuid; // Get Compilation id const temp = setInterval(() => { api.getHex(taskid).subscribe(hex => { if (hex.state === 'SUCCESS' && !hex.details.error) { clearInterval(temp); let SUCCESS = true; for (const k in hex.details) { if (hex.details[k]) { const d = hex.details[k]; window.printConsole('For Arduino ' + nameMap[k].name, ConsoleType.INFO); if (d.output && d.data) { window.printConsole(d.output, ConsoleType.OUTPUT); nameMap[k].hex = d.data; } if (d.error) { SUCCESS = false; window.printConsole(d.error, ConsoleType.ERROR); } } } if (SUCCESS) { Workspace.startArduino(); } callback(); } else if (hex.state === 'FAILED' || hex.details.error) { clearInterval(temp); window.printConsole('Failed To Compile: Server Error', ConsoleType.ERROR); callback(); } }); }, 2000); }, error => { window.printConsole('Error While Compiling the Source Code.', ConsoleType.ERROR); console.log(error); callback(); }); } else if (window.progLang === 1) { api.compileCodeInlineAssembly(toSend).subscribe(v => { const taskid = v.uuid; // Get Compilation id const temp = setInterval(() => { api.getHex(taskid).subscribe(hex => { if (hex.state === 'SUCCESS' && !hex.details.error) { clearInterval(temp); let SUCCESS = true; for (const k in hex.details) { if (hex.details[k]) { const d = hex.details[k]; window.printConsole('For Arduino ' + nameMap[k].name, ConsoleType.INFO); if (d.output && d.data) { window.printConsole(d.output, ConsoleType.OUTPUT); nameMap[k].hex = d.data; } if (d.error) { SUCCESS = false; window.printConsole(d.error, ConsoleType.ERROR); } } } if (SUCCESS) { Workspace.startArduino(); } callback(); } else if (hex.state === 'FAILED' || hex.details.error) { clearInterval(temp); window.printConsole('Failed To Compile: Server Error', ConsoleType.ERROR); callback(); } }); }, 2000); }, error => { window.printConsole('Error While Compiling the Source Code.', ConsoleType.ERROR); console.log(error); callback(); }); } } /** * Start Simulation */ static startArduino() { Workspace.simulationStarted.emit(true); // Assign id let gid = 0; for (const wire of window.scope.wires) { if (wire.start) { wire.start.gid = gid++; } if (wire.end) { wire.end.gid = gid++; } } // Sequence to be followed while calling initSimulation const seqn = ['output', 'general', 'controllers', 'drivers', 'power', 'input', 'misc']; // For each component call initsimulation function for (const key of seqn) { for (const items of Utils.componentBox[key]) { for (const item of items) { if (window.scope[item]) { for (const ele of window.scope[item]) { if (ele.initSimulation) { ele.initSimulation(); } } } } } } // // Call init simulation // for (const key in window.scope) { // if (window.scope[key] && key !== 'ArduinoUno') { // for (const ele of window.scope[key]) { // if (ele.initSimulation) { // ele.initSimulation(); // } // } // } // } // for (const comp of window.scope.ArduinoUno) { // // comp.runner.execute(); // // console.log('s') // comp.initSimulation(); // } // Update the simulation status // Workspace.GetNodeValues(); Workspace.simulating = true; } /** * Function called when StopSimulation button is triggered * @param callback Callback when simulation is stopped */ static stopSimulation(callback: () => void) { if (!Workspace.simulating) { callback(); return; } // Remove id for (const wire of window.scope.wires) { if (wire.start) { wire.start.value = -1; } if (wire.end) { wire.end.value = -1; } } // Call stop simulation for (const key in window.scope) { if (window.scope[key]) { for (const ele of window.scope[key]) { if (ele.closeSimulation) { ele.closeSimulation(); } } } } // Update state and call callback Workspace.simulating = false; Workspace.simulationStopped.emit(true); callback(); } /** * Function to clear the workspace */ static ClearWorkspace() { // Show Loading animation window.showLoading(); // Remove each component fron the DOM for (const key in window.scope) { if (key in window.scope && window.scope[key].length > 0) { for (const item of window.scope[key]) { // window.Selected = item; // this.DeleteComponent(); item.remove(); Workspace.removeMeta(item); } // Clear the scope window.scope[key] = []; } } window.Selected = null; window.isSelected = false; // Reinitialize variables Workspace.initalizeGlobalVariables(window['canvas']); // Hide Property box window.hideProperties(); // Hide Loading animation window.hideLoading(); } /** * Function generates a JSON object containing all details of the workspace and downloads it * @param name string * @param description string */ static SaveJson(name: string = '', description: string = '') { const id = Date.now(); // Default Save object const saveObj = { id, canvas: { x: Workspace.translateX, y: Workspace.translateY, scale: Workspace.scale }, project: { name, description, created_at: Date.now(), } }; // For each item in the scope for (const key in window.scope) { // if atleast one component is present if (window.scope[key] && window.scope[key].length > 0) { saveObj[key] = []; // Add the component to the save object for (const item of window.scope[key]) { if (item.save) { saveObj[key].push(item.save()); } } } } // Save the Thumbnail for the circuit Download.ExportImage(ImageType.PNG).then(v => { saveObj.project['image'] = v; // Add the base64 image // Export JSON File & Download it const filename = `${name}.json`; const jsonStr = JSON.stringify(saveObj); const element = document.createElement('a'); element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(jsonStr)); element.setAttribute('download', filename); element.style.display = 'none'; document.body.appendChild(element); element.click(); document.body.removeChild(element); }); return true; } /** * Function to return if workspace is empty or not * @returns 'False' if workspace is not empty & 'True' if workspace is empty */ static checkIfWorkspaceEmpty() { for (const key in window.scope) { if (window.scope[key].length > 0) { return false; } } return true; } // static GetNodeValues() { //waveForm, time) { // const pointD13 = window.scope[Utils.componentBox['controllers'][0][0]][0].nodes[2]; // const interval = setInterval(() => { // console.log(pointD13.value); // // [5, undefined]; // // if (Workspace.isChartDataFull(waveForm, 20)) { // // Workspace.removeLastElementFromChartDataAndLabel(waveForm, time); // // } // // waveForm[0].data.push(window.scope[Utils.componentBox['controllers'][0][0]][0].nodes[2].value); // // time.push( // // Workspace.getLabel() // // ); // if(!Workspace.simulating) { // clearInterval(interval); // } // }, 1); // } // static getLabel(){ // return new Date().getSeconds(); // } // static removeLastElementFromChartDataAndLabel(waveForm: ChartDataSets[], time: Label[]): void { // waveForm[0].data = waveForm[0].data.slice(1); // time = time.slice(1); // } // static isChartDataFull(chartData: ChartDataSets[], limit: number): boolean { // return chartData[0].data.length >= limit; // } } ================================================ FILE: ArduinoFrontend/src/app/Libs/drivers/L293D.ts ================================================ import { CircuitElement } from '../CircuitElement'; import { BreadBoard } from '../General'; import { Point } from '../Point'; /** * MotorDriver L293D class */ export class L293D extends CircuitElement { /** * Pin Name mapped to Pins */ pinNamedMap: any = {}; /** * Speed of Motor A in range of 0 to 5. */ speedA = 5; /** * Speed of Motor B in range of 0 to 5 */ speedB = 5; /** * Previous values of the pins. */ prevValues: any = { IN1: -1, IN2: -1, IN3: -1, IN4: -1 }; /** * boolean to store EN1 value */ enable1 = false; /** * boolean to store EN2 value */ enable2 = false; /** * boolean for GND1 */ ground1 = false; /** * boolean for GND2 */ ground2 = false; /** * MotorDriver L293D constructor * @param canvas Raphael Canvas (Paper) * @param x position x * @param y position y */ constructor(public canvas: any, x: number, y: number) { super('L293D', x, y, 'L293D.json', canvas); } /** * Initialize Motor class. */ init() { // Add all nodes to pinNamedMap for (const node of this.nodes) { this.pinNamedMap[node.label] = node; } // Add value listner to VS pin this.pinNamedMap['VS'].addValueListener(v => { this.pinNamedMap['GND1'].setValue(v, this.pinNamedMap['GND1']); if (v >= 5) { this.pinNamedMap['GND2'].setValue(5, this.pinNamedMap['GND2']); } this.update(); }); // Add value listner to VSS pin this.pinNamedMap['VSS'].addValueListener(v => { this.pinNamedMap['GND3'].setValue(v, this.pinNamedMap['GND3']); if (v >= 5) { this.pinNamedMap['GND4'].setValue(5, this.pinNamedMap['GND4']); } this.update(); }); // Add value listner to IN1 pin this.pinNamedMap['IN1'].addValueListener(v => { if (v !== this.prevValues.IN1) { this.prevValues.IN1 = v; this.update(); } }); // Add value listner to IN2 pin this.pinNamedMap['IN2'].addValueListener(v => { if (v !== this.prevValues.IN2) { this.prevValues.IN2 = v; this.update(); } }); // Add value listner to IN3 pin this.pinNamedMap['IN3'].addValueListener(v => { if (v !== this.prevValues.IN3) { this.prevValues.IN3 = v; this.update(); } }); // Add value listner to IN4 pin this.pinNamedMap['IN4'].addValueListener(v => { if (v !== this.prevValues.IN4) { this.prevValues.IN4 = v; this.update(); } }); // Add value listner to EN2 pin this.pinNamedMap['EN2'].addValueListener(v => { if (v > 0) { this.enable2 = true; } else { this.enable2 = false; } }); } /** * Simulation Logic For L293D Motor driver */ update() { // If EN2 is HIGH & ground is connected if (this.enable2 && this.ground2) { if (this.pinNamedMap['IN4'].value > 0) { // TODO: set value of OUT4 this.pinNamedMap['OUT4'].setValue(this.pinNamedMap['VS'].value * (this.speedB / 5), this.pinNamedMap['OUT4']); } else { // TODO: set value of OUT4 to zero this.pinNamedMap['OUT4'].setValue(0, this.pinNamedMap['OUT4']); } if (this.pinNamedMap['IN3'].value > 0) { // TODO: set value of OUT3 this.pinNamedMap['OUT3'].setValue(this.pinNamedMap['VS'].value * (this.speedB / 5), this.pinNamedMap['OUT3']); } else { // TODO: set value of OUT3 and OUT4 to zero this.pinNamedMap['OUT3'].setValue(0, this.pinNamedMap['OUT3']); this.pinNamedMap['OUT4'].setValue(0, this.pinNamedMap['OUT4']); } } else { // TODO: set value of OUT3 and OUT4 to zero this.pinNamedMap['OUT4'].setValue(0, this.pinNamedMap['OUT4']); this.pinNamedMap['OUT3'].setValue(0, this.pinNamedMap['OUT3']); } // If EN1 is HIGH & ground is connected if (this.enable1 && this.ground1) { if (this.pinNamedMap['IN1'].value > 0) { // TODO: set value of OUT1 this.pinNamedMap['OUT1'].setValue(this.pinNamedMap['VS'].value * (this.speedB / 5), this.pinNamedMap['OUT1']); } else { // TODO: set value of OUT4 to zero this.pinNamedMap['OUT1'].setValue(0, this.pinNamedMap['OUT1']); } if (this.pinNamedMap['IN2'].value > 0) { // TODO: set value of OUT2 this.pinNamedMap['OUT2'].setValue(this.pinNamedMap['VS'].value * (this.speedB / 5), this.pinNamedMap['OUT2']); } else { // TODO: set value of OUT1 and OUT2 to zero this.pinNamedMap['OUT1'].setValue(0, this.pinNamedMap['OUT1']); this.pinNamedMap['OUT2'].setValue(0, this.pinNamedMap['OUT2']); } } else { // TODO: set value of OUT3 and OUT4 to zero this.pinNamedMap['OUT2'].setValue(0, this.pinNamedMap['OUT2']); this.pinNamedMap['OUT1'].setValue(0, this.pinNamedMap['OUT1']); } } /** * Function provides component details * @param keyName Unique Class name * @param id Component id * @param body body of property box * @param title Component title */ properties(): { keyName: string; id: number; body: HTMLElement; title: string; } { const body = document.createElement('div'); body.innerText = 'If you Don\'t Connect The EN1 and EN2 Pins it automatically connects to the 5V suppy'; return { keyName: this.keyName, id: this.id, body, title: 'Motor Driver (L293D)' }; } /** * Called on Start Simulation */ initSimulation(): void { // Determine if Enable2 is more than zero if (this.pinNamedMap['EN2'].value > 0) { // init 2nd side this.enable2 = true; // determine if GND pins are connected to GND of Arduino const arduinoEnd4 = BreadBoard.getRecArduinov2(this.pinNamedMap['GND4'], 'GND4'); const arduinoEnd3 = BreadBoard.getRecArduinov2(this.pinNamedMap['GND3'], 'GND3'); if (arduinoEnd4 && arduinoEnd3) { if (arduinoEnd4.parent.keyName === 'ArduinoUno' || arduinoEnd3.parent.keyName === 'ArduinoUno') { this.ground2 = true; } else { // TODO: show toast console.error('GND is not connected'); window['showToast']('GND is not connected properly!'); } } } // Determine if Enable1 is more than zero if (this.pinNamedMap['EN1'].value > 0) { // init 1sr side this.enable1 = true; // determine if GND pins are connected to GND of Arduino const arduinoEnd2 = BreadBoard.getRecArduinov2(this.pinNamedMap['GND2'], 'GND2'); const arduinoEnd1 = BreadBoard.getRecArduinov2(this.pinNamedMap['GND1'], 'GND1'); if (arduinoEnd2 && arduinoEnd1) { if (arduinoEnd2.parent.keyName === 'ArduinoUno' || arduinoEnd1.parent.keyName === 'ArduinoUno') { this.ground1 = true; } else { // TODO: show toast console.error('GND is not connected'); window['showToast']('GND is not connected properly!'); } } } // run simulation this.update(); } /** * Called on Stop Simulation */ closeSimulation(): void { this.pinNamedMap['IN1'].value = -1; this.pinNamedMap['IN2'].value = -1; this.pinNamedMap['IN3'].value = -1; this.pinNamedMap['IN4'].value = -1; this.speedA = 5; this.speedB = 5; this.prevValues = { IN1: -1, IN2: -1, IN3: -1, IN4: -1 }; this.enable1 = false; this.enable2 = false; this.ground1 = false; this.ground2 = false; } } ================================================ FILE: ArduinoFrontend/src/app/Libs/inputs/Buttons.ts ================================================ import { CircuitElement } from '../CircuitElement'; import { BreadBoard } from '../General'; import { Point } from '../Point'; /** * Declare Raphael so that build don't throws error */ declare var Raphael; declare var window; /** * Pushbutton Class */ export class PushButton extends CircuitElement { /** * Map of Pin name to the circuit node */ pinNamedMap: any = {}; /** * Object of terminals and their respective arduino pin */ terminalParent = {}; parentList = new Set(); /** * Set of Visited Nodes */ visitedNodesv2 = new Set(); // /** // * Set of Visited Nodes // */ // visitedNodesv2 = new Set(); /** * pushbutton constructor * @param canvas Raphael Canvas (Paper) * @param x position x * @param y position y */ constructor(public canvas: any, x: number, y: number) { super('PushButton', x, y, 'PushButton.json', canvas); } /** init is called when the component is complety drawn to the canvas */ init() { // Create a mapping for node label to node for (const node of this.nodes) { this.pinNamedMap[node.label] = node; } // Add value Change Listener to Circuit nodes this.pinNamedMap['Terminal 1a'].addValueListener((v) => { if (v !== this.pinNamedMap['Terminal 1b'].value) { this.pinNamedMap['Terminal 1b'].setValue(v, this.pinNamedMap['Terminal 1b']); } }); this.pinNamedMap['Terminal 1b'].addValueListener((v) => { if (v !== this.pinNamedMap['Terminal 1a'].value) { // console.log(v); this.pinNamedMap['Terminal 1a'].setValue(v, this.pinNamedMap['Terminal 1a']); } }); this.pinNamedMap['Terminal 2a'].addValueListener((v) => { this.pinNamedMap['Terminal 2b'].setValue(v, null); }); this.pinNamedMap['Terminal 2b'].addValueListener((v) => { this.pinNamedMap['Terminal 2a'].setValue(v, null); }); } /** * Function provides component details * @param keyName Unique Class name * @param id Component id * @param body body of property box * @param title Component title */ properties(): { keyName: string; id: number; body: HTMLElement; title: string; } { const body = document.createElement('div'); return { keyName: 'PushButton', id: this.id, body, title: 'Push Button' }; } /** * Initialize Variable,callback and animation caller when start simulation is pressed */ initSimulation(): void { // Determine Arduino Connected ends for all terminals of push button for (const i in this.pinNamedMap) { if (this.pinNamedMap[i].connectedTo !== null) { if (this.pinNamedMap[i].connectedTo.start.parent.keyName === 'ArduinoUno' || this.pinNamedMap[i].connectedTo.end.parent.keyName === 'ArduinoUno') { this.terminalParent[i] = BreadBoard.getRecArduinov2(this.pinNamedMap[i], i); } else { this.terminalParent[i] = BreadBoard.getRecArduinoBreadv2(this.pinNamedMap[i], i); } } } const Dports = new RegExp('^D([2-9]|[1][0-3])$'); const Aports = new RegExp('^A([0-5])$'); // console.log(this.pinNamedMap['']) this.elements.unmousedown(); let iniValue = 0; let iniPin = ''; let by = -1; // create mousedown for the button this.elements[9].mousedown(() => { let val = -1; let pullUp = false; for (const i in this.terminalParent) { // set value only if any pin have inputPullUpEnabled if (this.terminalParent[i] !== undefined) { pullUp = pullUp || this.terminalParent[i].pullUpEnabled; } } for (const i in this.terminalParent) { if (this.terminalParent[i] !== undefined) { // set initial value to the pin which connects the digital pin on Arduino if ((Dports.test(this.terminalParent[i].label) || Aports.test(this.terminalParent[i].label)) && this.pinNamedMap[i].value <= 0) { iniValue = this.pinNamedMap[i].value; iniPin = i; } } } if (this.pinNamedMap['Terminal 1a'].value > 0) { val = this.pinNamedMap['Terminal 1a'].value; // TODO: run for 1a if (pullUp) { iniValue = val; // TODO: If pullUp enabled set val to zero val = 0; } by = 0; // set value to other pins this.pinNamedMap['Terminal 2a'].setValue(val, null); this.pinNamedMap['Terminal 2b'].setValue(val, null); } else if (this.pinNamedMap['Terminal 1b'].value > 0) { val = this.pinNamedMap['Terminal 1b'].value; // TODO: run for 1b if (pullUp) { iniValue = val; // TODO: If pullUp enabled set val to zero val = 0; } by = 0; // set value to other pins this.pinNamedMap['Terminal 2a'].setValue(val, null); this.pinNamedMap['Terminal 2b'].setValue(val, null); } else if (this.pinNamedMap['Terminal 2a'].value > 0) { val = this.pinNamedMap['Terminal 2a'].value; // TODO: run for 2a if (pullUp) { iniValue = val; // TODO: If pullUp enabled set val to zero val = 0; } by = 1; // set value to other pins this.pinNamedMap['Terminal 1a'].setValue(val, null); this.pinNamedMap['Terminal 1b'].setValue(val, null); } else if (this.pinNamedMap['Terminal 2b'].value > 0) { val = this.pinNamedMap['Terminal 2b'].value; // TODO: run for 2b if (pullUp) { iniValue = val; // TODO: If pullUp enabled set val to zero val = 0; } by = 1; // set value to other pins this.pinNamedMap['Terminal 1a'].setValue(val, null); this.pinNamedMap['Terminal 1b'].setValue(val, null); } }); // Set mouseup listener for the button this.elements[9].mouseup(() => { this.MouseUp(by, iniValue); if (iniPin !== undefined && iniPin !== null) { this.terminalParent[iniPin].setValue(-1, null); } }); } /** * Mouse Up Callback * @param by Representing the node whose value > 0 * @param iniValue Initial value of the node before mousedown */ MouseUp(by: number, iniValue: number) { if (by === 0) { this.pinNamedMap['Terminal 2a'].setValue(iniValue, null); this.pinNamedMap['Terminal 2b']. setValue(iniValue, null); } else { this.pinNamedMap['Terminal 1a'].setValue(iniValue, null); this.pinNamedMap['Terminal 1b'].setValue(iniValue, null); } } /** Function removes all animations and callbacks */ closeSimulation(): void { this.elements.unmousedown(); this.elements.unmouseup(); this.elements.unmouseout(); this.setClickListener(null); this.setDragListeners(); } } /** * Slideswitch Class */ export class SlideSwitch extends CircuitElement { /** * if true connected with terminal 1 else connected with terminal 2 */ private flag = true; /** * Slideswitch constructor * @param canvas Raphael Canvas (Paper) * @param x position x * @param y position y */ constructor(public canvas: any, x: number, y: number) { super('SlideSwitch', x, y, 'SlideSwitch.json', canvas); } /** * Initialize Slide Switch */ init() { this.nodes[1].addValueListener((v) => { console.log(v); if (this.flag) { this.nodes[0].setValue(v, null); this.nodes[2].setValue(-1, null); } else { this.nodes[0].setValue(-1, null); this.nodes[2].setValue(v, null); } }); } /** Animation caller during start simulation button pressed */ anim() { let anim; if (this.flag) { anim = Raphael.animation({ transform: `t${this.tx + 15},${this.ty}` }, 500); } else { anim = Raphael.animation({ transform: `t${this.tx},${this.ty}` }, 500); } this.elements[1].animate(anim); this.flag = !this.flag; this.nodes[1].setValue(this.nodes[1].value, this.nodes[1]); } /** * Function provides component details * @param keyName Unique Class name * @param id Component id * @param body body of property box * @param title Component title */ properties(): { keyName: string; id: number; body: HTMLElement; title: string; } { const body = document.createElement('div'); return { keyName: this.keyName, id: this.id, body, title: 'Slide Switch' }; } /** * Called on Start Simulation. */ initSimulation(): void { this.elements.unmousedown(); this.elements.unclick(); this.elements.click(() => { this.anim(); }); this.nodes[1].setValue(5, null); } /** * Called on stop simulation. */ closeSimulation(): void { this.elements.unclick(); this.setDragListeners(); this.setClickListener(null); const anim = Raphael.animation({ transform: `t${this.tx},${this.ty}` }, 500); this.elements[1].animate(anim); } } ================================================ FILE: ArduinoFrontend/src/app/Libs/inputs/Collision.ts ================================================ /** * Position as a Vector */ export interface Vector { /** * X Position */ x: number; /** * Y Positon */ y: number; // if require add Magnitude } /** * Orientation Between three points */ export enum Orienation { COLINEAR, CLOCKWISE, COUNTER_CLOCKWISE } // https://www.geeksforgeeks.org/how-to-check-if-a-given-point-lies-inside-a-polygon/ /** function detects collision of three collinear points */ export class Collision { /** Given three collinear points */ static inLine(p: Vector, q: Vector, r: Vector) { // checks wether q lies on segment pr if (q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) && q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y)) { return true; } return false; } /** To find orientation of ordered triplet (p, q, r). */ static orientation(p: Vector, q: Vector, r: Vector) { const val = (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y); if (val === 0) { return Orienation.COLINEAR; } return (val > 0) ? Orienation.CLOCKWISE : Orienation.COUNTER_CLOCKWISE; } /** Function returns true if two line segemnts intersects */ static isIntersecting(p1: Vector, q1: Vector, p2: Vector, q2: Vector) { const o1 = Collision.orientation(p1, q1, p2); const o2 = Collision.orientation(p1, q1, q2); const o3 = Collision.orientation(p2, q2, p1); const o4 = Collision.orientation(p2, q2, q1); if (o1 !== o2 && o3 !== o4) { return true; } // p1, q1 and p2 are colinear and p2 lies on segment p1q1 if (o1 === 0 && Collision.inLine(p1, p2, q1)) { return true; } // p1, q1 and p2 are colinear and q2 lies on segment p1q1 if (o2 === 0 && Collision.inLine(p1, q2, q1)) { return true; } // p2, q2 and p1 are colinear and p1 lies on segment p2q2 if (o3 === 0 && Collision.inLine(p2, p1, q2)) { return true; } // p2, q2 and q1 are colinear and q1 lies on segment p2q2 if (o4 === 0 && Collision.inLine(p2, q1, q2)) { return true; } return false; // Doesn't fall in any of the above cases } /** Function returns true if the point p lies inside polygon */ static isPointInsidePolygon(point: number[][], p: number[]) { const extreme: Vector = { x: 10000000, y: p[1] }; const n = point.length; let count = 0; let i = 0; do { const next = (i + 1) % n; const a: Vector = { x: point[i][0], y: point[i][1] }; const b: Vector = { x: point[next][0], y: point[next][1] }; const c = { x: p[0], y: p[1] }; if (Collision.isIntersecting(a, b, c, extreme)) { if (Collision.orientation(a, c, b) === Orienation.COLINEAR) { return Collision.inLine(a, c, b); } count += 1; } i = next; } while (i !== 0); return (count % 2) !== 0; } /** * Function performes Euclidean Distance operation * @param a coordinate a * @param b coordinate b */ static EuclideanDistance(a: Vector, b: Vector) { return Math.sqrt(((a.x - b.x) * (a.x - b.x)) + ((a.y - b.y) * (a.y - b.y))); } } ================================================ FILE: ArduinoFrontend/src/app/Libs/inputs/GasSensor.ts ================================================ import { CircuitElement } from '../CircuitElement'; import { Collision, Vector } from './Collision'; /// TODO: Handle the digital pin /** * Class GasSensor MQ2 */ export class MQ2 extends CircuitElement { /** * Line which is drawn while simulation. */ line: any; /** * Gas Sensor Constructor * @param canvas Raphael canvas * @param x Position x * @param y Position y */ constructor(public canvas: any, x: number, y: number) { super('MQ2', x, y, 'MQ2.json', canvas); } /** * Initialize Gas Sensor */ init() { this.elements[1].hide(); this.nodes[0].addValueListener((v) => { this.nodes[1].setValue(v, null); }); } /** * Function provides component details * @param keyName Unique Class name * @param id Component id * @param body body of property box * @param title Component title */ properties(): { keyName: string; id: number; body: HTMLElement; title: string; } { const body = document.createElement('div'); return { keyName: this.keyName, id: this.id, body, title: 'Gas Sensor (MQ-2)' }; } /** * Sets the analog value of the gas sensor based on the distance between tmp and cloud. * @param tmp The center of the cloud * @param Center The Center of the smoke detector */ setValue(tmp: Vector, Center: Vector) { const dist = Collision.EuclideanDistance(tmp, Center); let v; if (dist <= 189) { v = ((189 - dist) / 189) * 5; } else { v = 0; } if (this.nodes[0].connectedTo && this.nodes[0].value >= 4.9) { this.nodes[3].setValue(Math.round(v), null); } else { window['showToast']('Please Connect Wires Properly'); } } /** * Initialize animation for the gas sensor */ initSimulation(): void { this.elements[1].show(); this.elements.undrag(); let tmp = this.elements[1].attr(); this.elements[1].attr({ x: tmp.x + this.tx, y: tmp.y + this.ty, transform: 't0,0' }); this.line = this.canvas.path( `M${tmp.x + this.tx + 145 + 19},${tmp.y + this.ty + 145}L${ this.tx + this.x + 48 },${ this.ty + this.y + 50 }` ); this.line.attr({ 'stroke-dasharray': ['-.'] }); const Center: Vector = { x: this.tx + this.x + 48, y: this.ty + this.y + 50 }; // Add the drag listener to the cloud this.elements[1].drag((dx, dy) => { // Update Position this.elements[1].attr({ x: tmp.x + dx, y: tmp.y + dy }); // Set the analog value this.setValue({ x: tmp.x + dx + 164, y: tmp.y + dy + 145 }, Center); // Update the line this.line.attr({ path: `M${Center.x},${Center.y},L${tmp.x + dx + 164},${tmp.y + dy + 145}` }); }, () => { tmp = this.elements[1].attr(); }, () => { }); tmp = this.elements[1].attr(); this.setValue({ x: tmp.x + 164, y: tmp.y + 145 }, Center); } /** * Remove line and smoke */ closeSimulation(): void { this.elements[1].hide(); this.line.remove(); this.line = null; this.elements[1].undrag(); this.setDragListeners(); } } ================================================ FILE: ArduinoFrontend/src/app/Libs/inputs/PIRSensor.ts ================================================ import { CircuitElement } from '../CircuitElement'; import { Collision } from './Collision'; import { isNull } from 'util'; /** * PIR Sensor class */ export class PIRSensor extends CircuitElement { /** * Curve points of sensor */ static curve: number[][]; /** * points of hand polygon */ static handPoints: number[][]; /** * The backgound range of the sensor */ range: any; /** * backCurve(path) of sensor */ backCurve: string; /** * hand is a Raphael Element */ hand: any; /** * Map of pin name to the circuit node. */ pinNameMap: any = {}; /** * pushbutton constructor * @param canvas Raphael Canvas (Paper) * @param x position x * @param y position y */ constructor(public canvas: any, x: number, y: number) { super('PIRSensor', x, y, 'PIRSensor.json', canvas); } /** init is called when the component is complety drawn to the canvas */ init() { PIRSensor.curve = this.data.curve; PIRSensor.handPoints = this.data.hand; this.backCurve = this.data.backCurve; this.data = null; // Create a mapping for node label to node for (const node of this.nodes) { this.pinNameMap[node.label] = node; } this.elements[1].hide(); this.pinNameMap['VCC'].addValueListener((v) => { this.pinNameMap['GND'].setValue(v, null); }); } /** * Function provides component details * @param keyName Unique Class name * @param id Component id * @param body body of property box * @param title Component title */ properties(): { keyName: string; id: number; body: HTMLElement; title: string; } { const body = document.createElement('div'); return { keyName: this.keyName, body, title: 'PIR Sensor', id: this.id }; } /** * Initialize Variable,callback and event caller when start simulation is pressed */ initSimulation(): void { this.elements.undrag(); this.elements.unmousedown(); this.range = this.canvas.path(this.backCurve); this.range.attr({ fill: 'rgba(0,0,255,0.1)', stroke: 'none' }); this.elements[1].show(); // Show Hand this.range.translate(this.x + this.tx + 99, this.y + this.ty + 80); this.range.toBack(); const tmpCurve = []; // Updates the points of the sensor ranging curve for (const x of PIRSensor.curve) { tmpCurve.push([x[0] + this.x + this.tx, x[1] + this.y + this.ty]); } // FOR: Visual of Curve // console.log(this.curve.length) // this.canvas.path(`M${tmpCurve[0][0]},${tmpCurve[0][1]} // L${tmpCurve[1][0]},${tmpCurve[1][1]} // L${tmpCurve[2][0]},${tmpCurve[2][1]} // L${tmpCurve[3][0]},${tmpCurve[3][1]}, // L${tmpCurve[4][0]},${tmpCurve[4][1]}, // L${tmpCurve[5][0]},${tmpCurve[5][1]} // z`); // console.log(this.elements[1].transform()) const handIni = this.elements[1].transform(); let handTX = handIni[0][1]; let handTy = handIni[0][2]; let handFdx = 0; let handFdy = 0; let ans = false; // let timeout = 0; // let idk = null; this.elements[1].drag((dx, dy) => { handFdx = dx; handFdy = dy; this.elements[1].transform(`t${handTX + dx},${handTy + dy}`); // let handPoints = []; ans = false; // to check collision between hand and affected region for (const vec of PIRSensor.handPoints) { // handPoints.push( // [vec[0] + this.x + hand_tx + dx, vec[1] + this.y + hand_ty + dy] // ) ans = ans || Collision.isPointInsidePolygon( tmpCurve, [vec[0] + this.x + handTX + dx, vec[1] + this.y + handTy + dy] ); } // console.log(ans); // if VCC pin of sensor is connected and has a potential of 5 volts if (ans) { if (this.pinNameMap['VCC'].value > 0) { this.pinNameMap['SIGNAL'].setValue(5, null); // if (!isNull(timeout)) { // clearTimeout(timeout); // } else { // } } } // if (idk) { // idk.remove(); // } // idk = this.canvas.path(`M${handPoints[0][0]},${handPoints[0][1]} // L${handPoints[1][0]},${handPoints[1][1]} // L${handPoints[2][0]},${handPoints[2][1]} // L${handPoints[3][0]},${handPoints[3][1]}, // L${handPoints[4][0]},${handPoints[4][1]}, // L${handPoints[5][0]},${handPoints[5][1]}z`); // handPoints = null; }, () => { // console.log(hand_tx, hand_ty); }, () => { handTX += handFdx; handTy += handFdy; setTimeout(() => { this.pinNameMap['SIGNAL'].setValue(0, null); }, 1000); }); } /** Function removes all events and callbacks */ closeSimulation(): void { if (this.range) { this.range.remove(); } this.elements[1].undrag(); this.elements[1].hide(); this.setDragListeners(); this.setClickListener(null); } } ================================================ FILE: ArduinoFrontend/src/app/Libs/inputs/PhotoResistor.ts ================================================ import { CircuitElement } from '../CircuitElement'; import { Slider } from './Slider'; /** * Class Photoresistor */ export class PhotoResistor extends CircuitElement { /** * Slider to set the value of photo resistor */ slide: Slider; /** * The Value of the photo resitor */ valueText: any; /** * Maxmum value of 1000 */ maxVal = 1000; /** * Minmum value of 1000 */ minVal = 0; /** * RaphaelJs path for sun */ sun; /** * RaphaelJs path for moon */ moon; /** * svg path of sun */ sunPath: string = null; /** * svg path of moon */ moonPath: string = null; /** * Photoresistor Constructor * @param canvas Raphael canvas * @param x Position x * @param y Position y */ constructor(public canvas: any, x: number, y: number) { super('PhotoResistor', x, y, 'PhotoResistor.json', canvas); // fetch sun and moon path from json file fetch(`./assets/jsons/PhotoResistor.json`) .then(v => v.json()) .then(obj => { this.sunPath = obj.sliderIcons.sunPath; this.moonPath = obj.sliderIcons.moonPath; }); } /** * Function provides component details * @param keyName Unique Class name * @param id Component id * @param body body of property box * @param title Component title */ properties(): { keyName: string; id: number; body: HTMLElement; title: string; } { const body = document.createElement('div'); return { keyName: this.keyName, id: this.id, body, title: 'Photo Resistor' }; } /** * Returns a string on the basis of resistance * @param r Resistance */ getValue(r: number) { return `${Math.round((r) * 100) / 100} lum`; } /** * Initialize Variable and callback when start simulation is pressed */ initSimulation(): void { this.valueText = this.canvas.text(this.x + this.tx + 1, this.y + this.ty - 70, `${this.maxVal / 2} lum`); this.valueText.attr({ 'font-size': 15 }); // Draw Sun on slider this.sun = this.canvas.path(this.sunPath); this.sun.attr({ fill: '#000', stroke: 'none' }); this.sun.translate(this.x + this.tx + 70, this.y + this.ty - 55); // Draw Moon on slider this.moon = this.canvas.path(this.moonPath); this.moon.attr({ fill: '#000', stroke: 'none' }); this.moon.transform(`s0.06 t${7.5 * (this.x + this.tx - 120)} ${1 * (this.y + this.ty - 860)}`); // Slider ranging from minValue to maxValue this.slide = new Slider(this.canvas, this.x + this.tx, this.y + this.ty - 10); this.slide.setGradient('#69644b', '#ffd500'); const enable1 = this.nodes[1].value > this.nodes[0].value ? true : false; // At starting set value to half of slider this.changeVal(enable1, 0.5); // Listen to value changes on slider this.slide.setValueChangeListener((v) => { // Change slider's ouput value this.changeVal(enable1, v); }); } /** * Call this function to change ouput value of photoresistor * @param enable1 Pin to direct output on * @param v value of slider, ranges from 0-1 */ changeVal(enable1, v) { // calculate lumens according slider const lum = (v) * this.maxVal; // if enable1 is true if (enable1) { // calculate voltage value const incoming = this.nodes[1].value; // calculate output voltage const val = (lum / this.maxVal) * incoming; // set output voltage this.nodes[0].setValue(val, null); // update text this.valueText.attr({ text: this.getValue(lum) }); } else { // calculate voltage value const incoming = this.nodes[0].value; // calculate output voltage const val = (lum / this.maxVal) * incoming; // set output voltage this.nodes[1].setValue(val, null); // update text this.valueText.attr({ text: this.getValue(lum) }); } } /** Function removes all animations and callbacks */ closeSimulation(): void { this.valueText.remove(); this.slide.remove(); delete this.slide; delete this.valueText; this.sun.remove(); // delete this.sun; this.moon.remove(); delete this.moon; // this.slide = null; this.valueText = null; } } ================================================ FILE: ArduinoFrontend/src/app/Libs/inputs/Potentiometer.ts ================================================ import { CircuitElement } from '../CircuitElement'; import { BreadBoard } from '../General'; import { Vector } from './Collision'; import { Point } from '../Point'; import { LED } from '../outputs/Led'; /** * Declare window so that custom created function don't throw error */ declare var window; /** * Potentiometer Class */ export class Potentiometer extends CircuitElement { /** * Types of potentiometer name. */ static variants: string[]; /** * Types of potentiometer resistance */ static variantsValue: number[]; /** * Selected potentiometer type. */ selectedIndex: number; /** * Arduino Pin connected to 0 of potentiometer */ arduinoEndZero: any; /** * Arduino Pin connected to 2 of potentiometer */ arduinoEndTwo: any; /** * Set to keep track of visited nodes */ visitedNodesv2 = new Set(); /** * Check the connection type */ isRheostat: boolean = null; /** * Stores visited LEDs' ids */ visitedLEDs = new Set(); /** * Stores connected LEDs */ connectedLEDs: LED[] = []; /** * Potentiometer constructor * @param canvas Raphael Canvas (Paper) * @param x position x * @param y position y */ constructor(public canvas: any, x: number, y: number) { super('PotentioMeter', x, y, 'Potentiometer.json', canvas); } /** init is called when the component is complety drawn to the canvas */ init() { Potentiometer.variants = this.data.variants; Potentiometer.variantsValue = this.data.value; this.data.value = []; this.data.variants = []; this.data = null; } /** * Returns the client point respective to the svg * @param x X positon * @param y y position */ svgPoint(x, y) { const pt = window['holder_svg'].createSVGPoint(); pt.x = x; pt.y = y; return pt.matrixTransform(window.canvas.canvas.getScreenCTM().inverse()); } /** * Rotates the dial and sets the analog value * @param center Center of the Potentiometer * @param clientX Mouse X * @param clientY Mouse Y */ rotateDial(center: Vector, clientX: number, clientY: number) { const point = this.svgPoint(clientX, clientY); const difX = point.x - center.x; const difY = point.y - center.y; let ang = Math.atan2(difY, difX); if (ang < 0) { ang += 2 * Math.PI; } // if(line){ // line.remove(); // line = null; // } // const ex = center.x + 100*Math.cos(ang); // const ey = center.y + 100*Math.sin(ang); // line = this.canvas.path(`M${center.x},${center.y}L${ex},${ey}`) ang *= (180 / Math.PI); ang = (ang + 225) % 360; if (ang > 268) { ang = 268; } let to; let intp = 0; // console.log(ang / 268); if (this.arduinoEndZero) { to = Math.max( this.nodes[0].value, this.nodes[1].value ); intp = (ang / 268) * to; } else if (this.arduinoEndTwo) { to = Math.max( this.nodes[1].value, this.nodes[2].value ); intp = to - ((ang / 268) * to); } if (to < 0) { window['showToast']('Potentiometer Not Connected'); return; } this.elements[1].transform(`r${ang}`); this.nodes[1].setValue(intp, this.nodes[1]); } /** * Rotates the dial and sets the analog value for Rheostat connection * @param center Center of the Potentiometer * @param clientX Mouse X * @param clientY Mouse Y */ rotateDialRheostat(center: Vector, clientX: number, clientY: number) { const point = this.svgPoint(clientX, clientY); const difX = point.x - center.x; const difY = point.y - center.y; const resistanceValue = Potentiometer.variantsValue[this.selectedIndex]; let ang = Math.atan2(difY, difX); if (ang < 0) { ang += 2 * Math.PI; } // if(line){ // line.remove(); // line = null; // } // const ex = center.x + 100*Math.cos(ang); // const ey = center.y + 100*Math.sin(ang); // line = this.canvas.path(`M${center.x},${center.y}L${ex},${ey}`) ang *= (180 / Math.PI); ang = (ang + 225) % 360; if (ang > 268) { ang = 268; } let to; let calResistance = -1; const minVoltage = 0; const minLEDResistance = 100; const maxLEDResitance = 466; if (this.arduinoEndZero) { to = Math.max( this.nodes[0].value, this.nodes[1].value ); // intp = (ang / 268) * to; calResistance = ((ang / 268) * resistanceValue); this.sendResistance(calResistance); } else if (this.arduinoEndTwo) { to = Math.max( this.nodes[1].value, this.nodes[2].value ); calResistance = resistanceValue - ((ang / 268) * resistanceValue); this.sendResistance(calResistance); } if (to < 0) { window['showToast']('Potentiometer Not Connected'); return; } this.elements[1].transform(`r${ang}`); this.nodes[1].setValue(to, this.nodes[1]); } /** * Function provides component details * @param keyName Unique Class name * @param id Component id * @param body body of property box * @param title Component title */ properties(): { keyName: string; id: number; body: HTMLElement; title: string; } { const body = document.createElement('div'); body.style.display = 'flex'; body.style.flexDirection = 'column'; const label = document.createElement('label'); label.innerText = 'Resistance'; const select = document.createElement('select'); let tmp = ''; for (const val of Potentiometer.variants) { tmp += ``; } select.innerHTML = tmp; select.selectedIndex = this.selectedIndex; select.onchange = () => { this.selectedIndex = select.selectedIndex; }; body.append(label); body.append(select); return { keyName: this.keyName, id: this.id, title: 'Potentiometer', body }; } /** * Called on start simulation. Add Event listener. */ initSimulation(): void { if (!this.areNodesConnectedProperly()) { window.showToast('Potentiometer not connected properly.'); return; } const attr = this.elements[1].attr(); const center = { x: attr.x + attr.width / 2 + this.tx, y: attr.y + attr.height / 2 + this.ty }; this.elements[1].transform(`t0,0`); this.elements[1].attr({ x: attr.x + this.tx, y: attr.y + this.ty }); this.elements.undrag(); this.elements.unmousedown(); if (!this.isRheostat) { this.elements.drag((_, __, mX, mY) => { this.rotateDial(center, mX, mY); }, (mX, mY) => { this.rotateDial(center, mX, mY); }, (ev: MouseEvent) => { this.rotateDial(center, ev.clientX, ev.clientY); }); } else { this.elements.drag((_, __, mX, mY) => { this.rotateDialRheostat(center, mX, mY); }, (mX, mY) => { this.rotateDialRheostat(center, mX, mY); }, (ev: MouseEvent) => { this.rotateDialRheostat(center, ev.clientX, ev.clientY); }); } // Find out the LEDs in the circuit this.getRecLED(this.nodes[0], 'Terminal 1'); this.getRecLED(this.nodes[1], 'WIPER'); this.getRecLED(this.nodes[2], 'Ternimal 2'); // Get Arduino Connected ends for terminal 1 & terminal 2 this.arduinoEndZero = this.getRecArduinov2(this.nodes[0], 'Terminal 1'); this.arduinoEndTwo = this.getRecArduinov2(this.nodes[2], 'Terminal 2'); if (this.arduinoEndZero) { // TODO : If arduino is connected to Terminal 1 of potentiometer // set WIPER value 0 this.nodes[1].setValue(0, this.nodes[1]); } else if (this.arduinoEndTwo) { // TODO : If arduino is connected to Terminal 2 of potentiometer // set WIPER value as from Terminal 2 this.nodes[1].setValue(this.nodes[2].value, this.nodes[1]); } } /** * Save the Selected type in database */ SaveData() { return { value: this.selectedIndex }; } /** * Load the Selected type. * @param data Saved Data */ LoadData(data: any) { if (data.data && data.data.value > 0) { this.selectedIndex = data.data.value; } else { this.selectedIndex = 0; } } /** * Reset transformation add add event listeners. */ closeSimulation(): void { const attr = this.elements[1].attr(); this.elements[1].attr({ x: attr.x - this.tx, y: attr.y - this.ty }); this.elements[1].transform(`t${this.tx},${this.ty}`); this.elements.undrag(); this.elements.unmousedown(); this.setClickListener(null); this.setDragListeners(); this.isRheostat = null; this.visitedLEDs.clear(); this.connectedLEDs = []; } /** * Checks if nodes of Potentiometer are connected either as * 1. Rheostat: Wiper + Left Pin (or) Wiper + Right Pin * 2. Voltage divider: All pins */ areNodesConnectedProperly() { if (this.nodes[0].isConnected() && this.nodes[1].isConnected() && this.nodes[2].isConnected()) { const leftNode = this.getRecArduinov2(this.nodes[0], 'Terminal 1'); const rightNode = this.getRecArduinov2(this.nodes[2], 'Terminal 2'); if (leftNode && rightNode) { if (leftNode.label === 'GND' && rightNode.value > 0) { this.isRheostat = false; return true; } else if (rightNode.label === 'GND' && leftNode.value > 0) { this.isRheostat = false; return true; } } } if (this.nodes[0].isConnected() && this.nodes[1].isConnected()) { this.isRheostat = true; return true; } else if (this.nodes[1].isConnected() && this.nodes[2].isConnected()) { this.isRheostat = true; return true; } return false; } /** * Function to transfer resistance to connected LEDs * ToDo: Function is hardcoded * ToDo: Make it work for other components */ sendResistance(resistance: number) { for (const led of this.connectedLEDs) { led.setVariableResistance(resistance); } } /** * Return the node which is connected to arduino by recursively finding connected node * @param node The Node which need to be checked */ getRecArduinov2(node: Point, startedOn: string) { try { if (node.connectedTo.start.parent.keyName === 'ArduinoUno') { // TODO: Return if arduino is connected to start node this.visitedNodesv2.clear(); return node.connectedTo.start; } else if (node.connectedTo.end.parent.keyName === 'ArduinoUno') { // TODO: Return if arduino is connected to end node this.visitedNodesv2.clear(); return node.connectedTo.end; } else if (node.connectedTo.start.parent.keyName === 'BreadBoard' && !this.visitedNodesv2.has(node.connectedTo.start.gid)) { // TODO: Call recursive BreadBoard handler function if node is connected to Breadboard && visited nodes doesn't have node's gid return this.getRecArduinoBreadv2(node, startedOn); } else if (node.connectedTo.end.parent.keyName === 'BreadBoard' && !this.visitedNodesv2.has(node.connectedTo.end.gid)) { // TODO: Call recursive BreadBoard handler function if node is connected to Breadboard && visited nodes doesn't have node's gid return this.getRecArduinoBreadv2(node, startedOn); } else if (node.connectedTo.end.parent.keyName === 'Battery9v' && window.scope.ArduinoUno.length === 0) { // TODO: Return false if node's end is connected to 9V Battery return false; } else if (node.connectedTo.end.parent.keyName === 'CoinCell' && window.scope.ArduinoUno.length === 0) { // TODO: Return false if node's end is connected to Coin Cell return false; } else if (node.connectedTo.end.parent.keyName === 'RelayModule') { // TODO: Handle RelayModule if (startedOn === 'POSITIVE') { // If search was started on Positive node then return connected node of VCC in Relay return this.getRecArduinov2(node.connectedTo.end.parent.nodes[3], startedOn); } else if (startedOn === 'NEGATIVE') { // If search was started on Negative node then return connected node of GND in Relay return this.getRecArduinov2(node.connectedTo.end.parent.nodes[5], startedOn); } } else { // TODO: If nothing matches // IF/ELSE: Determine if start is to be used OR end for further recursion if (node.connectedTo.end.gid !== node.gid) { // Loops through all nodes in parent for (const e in node.connectedTo.end.parent.nodes) { // IF: gid is different && gid not in visited node if (node.connectedTo.end.parent.nodes[e].gid !== node.connectedTo.end.gid && !this.visitedNodesv2.has(node.connectedTo.end.parent.nodes[e].gid) && node.connectedTo.end.parent.nodes[e].isConnected()) { // add gid in visited nodes this.visitedNodesv2.add(node.connectedTo.end.parent.nodes[e].gid); // call back Arduino Recursive Fn return this.getRecArduinov2(node.connectedTo.end.parent.nodes[e], startedOn); } } } else if (node.connectedTo.start.gid !== node.gid) { // Loops through all nodes in parent for (const e in node.connectedTo.start.parent.nodes) { // IF: gid is different && gid not in visited node if (node.connectedTo.start.parent.nodes[e].gid !== node.connectedTo.start.gid && !this.visitedNodesv2.has(node.connectedTo.start.parent.nodes[e].gid) && node.connectedTo.start.parent.nodes[e].isConnected()) { // add gid in visited nodes this.visitedNodesv2.add(node.connectedTo.start.parent.nodes[e].gid); // call back Arduino Recursive Fn return this.getRecArduinov2(node.connectedTo.start.parent.nodes[e], startedOn); } } } } } catch (e) { console.warn(e); return false; } } /** * Recursive Function to handle BreadBoard * @param node Node which is to be checked for BreadBoard */ private getRecArduinoBreadv2(node: Point, startedOn: string) { // IF/ELSE: Determine if start is to be used OR end for further recursion if (node.connectedTo.end.gid !== node.gid) { const bb = (node.connectedTo.end.parent as BreadBoard); // loop through joined nodes of breadboard for (const e in bb.joined) { if (bb.joined[e].gid !== node.connectedTo.end.gid) { // Run only if substring matches if (bb.joined[e].label.substring(1, bb.joined[e].label.length) === node.connectedTo.end.label.substring(1, node.connectedTo.end.label.length)) { const ascii = node.connectedTo.end.label.charCodeAt(0); const currAscii = bb.joined[e].label.charCodeAt(0); // add gid to VisitedNode this.visitedNodesv2.add(bb.joined[e].gid); // IF/ELSE: determine which part of breadboard is connected if (ascii >= 97 && ascii <= 101) { if (bb.joined[e].isConnected() && (currAscii >= 97 && currAscii <= 101)) { return this.getRecArduinov2(bb.joined[e], startedOn); } } else if (ascii >= 102 && ascii <= 106) { if (bb.joined[e].isConnected() && (currAscii >= 102 && currAscii <= 106)) { return this.getRecArduinov2(bb.joined[e], startedOn); } } else { if (bb.joined[e].isConnected() && (bb.joined[e].label === node.connectedTo.end.label)) { return this.getRecArduinov2(bb.joined[e], startedOn); } } } } } } else if (node.connectedTo.start.gid !== node.gid) { const bb = (node.connectedTo.start.parent as BreadBoard); // loop through joined nodes of breadboard for (const e in bb.joined) { if (bb.joined[e].gid !== node.connectedTo.start.gid) { // Run only if substring matches if (bb.joined[e].label.substring(1, bb.joined[e].label.length) === node.connectedTo.start.label.substring(1, node.connectedTo.start.label.length)) { const ascii = node.connectedTo.start.label.charCodeAt(0); const currAscii = bb.joined[e].label.charCodeAt(0); // add gid to VisitedNode this.visitedNodesv2.add(bb.joined[e].gid); // IF/ELSE: determine which part of breadboard is connected if (ascii >= 97 && ascii <= 101) { if (bb.joined[e].isConnected() && (currAscii >= 97 && currAscii <= 101)) { return this.getRecArduinov2(bb.joined[e], startedOn); } } else if (ascii >= 102 && ascii <= 106) { if (bb.joined[e].isConnected() && (currAscii >= 102 && currAscii <= 106)) { return this.getRecArduinov2(bb.joined[e], startedOn); } } else { if (bb.joined[e].isConnected() && (bb.joined[e].label === node.connectedTo.end.label)) { return this.getRecArduinov2(bb.joined[e], startedOn); } } } } } } } /** * Return the node which is connected to arduino by recursively finding LEDs inside the circuit * @param node The Node which need to be checked */ getRecLED(node: Point, startedOn: string) { try { if (node.connectedTo.start.parent.keyName === 'LED') { const led = (node.connectedTo.start.parent as LED); if (!this.visitedLEDs.has(led.getID())) { this.connectedLEDs.push(led); this.visitedLEDs.add(led.getID()); } } else if (node.connectedTo.end.parent.keyName === 'LED') { const led = (node.connectedTo.end.parent as LED); if (!this.visitedLEDs.has(led.getID())) { this.connectedLEDs.push(led); this.visitedLEDs.add(led.getID()); } } if (node.connectedTo.start.parent.keyName === 'ArduinoUno') { // TODO: Return if arduino is connected to start node this.visitedNodesv2.clear(); return node.connectedTo.start; } else if (node.connectedTo.end.parent.keyName === 'ArduinoUno') { // TODO: Return if arduino is connected to end node this.visitedNodesv2.clear(); return node.connectedTo.end; } else if (node.connectedTo.start.parent.keyName === 'BreadBoard' && !this.visitedNodesv2.has(node.connectedTo.start.gid)) { // TODO: Call recursive BreadBoard handler function if node is connected to Breadboard && visited nodes doesn't have node's gid return this.getRecLEDBread(node, startedOn); } else if (node.connectedTo.end.parent.keyName === 'BreadBoard' && !this.visitedNodesv2.has(node.connectedTo.end.gid)) { // TODO: Call recursive BreadBoard handler function if node is connected to Breadboard && visited nodes doesn't have node's gid return this.getRecLEDBread(node, startedOn); } else if (node.connectedTo.end.parent.keyName === 'Battery9v' && window.scope.ArduinoUno.length === 0) { // TODO: Return false if node's end is connected to 9V Battery return false; } else if (node.connectedTo.end.parent.keyName === 'CoinCell' && window.scope.ArduinoUno.length === 0) { // TODO: Return false if node's end is connected to Coin Cell return false; } else if (node.connectedTo.end.parent.keyName === 'RelayModule') { // TODO: Handle RelayModule if (startedOn === 'POSITIVE') { // If search was started on Positive node then return connected node of VCC in Relay return this.getRecLED(node.connectedTo.end.parent.nodes[3], startedOn); } else if (startedOn === 'NEGATIVE') { // If search was started on Negative node then return connected node of GND in Relay return this.getRecLED(node.connectedTo.end.parent.nodes[5], startedOn); } } else { // TODO: If nothing matches // IF/ELSE: Determine if start is to be used OR end for further recursion if (node.connectedTo.end.gid !== node.gid) { // Loops through all nodes in parent for (const e in node.connectedTo.end.parent.nodes) { // IF: gid is different && gid not in visited node if (node.connectedTo.end.parent.nodes[e].gid !== node.connectedTo.end.gid && !this.visitedNodesv2.has(node.connectedTo.end.parent.nodes[e].gid) && node.connectedTo.end.parent.nodes[e].isConnected()) { // add gid in visited nodes this.visitedNodesv2.add(node.connectedTo.end.parent.nodes[e].gid); // call back Arduino Recursive Fn return this.getRecLED(node.connectedTo.end.parent.nodes[e], startedOn); } } } else if (node.connectedTo.start.gid !== node.gid) { // Loops through all nodes in parent for (const e in node.connectedTo.start.parent.nodes) { // IF: gid is different && gid not in visited node if (node.connectedTo.start.parent.nodes[e].gid !== node.connectedTo.start.gid && !this.visitedNodesv2.has(node.connectedTo.start.parent.nodes[e].gid) && node.connectedTo.start.parent.nodes[e].isConnected()) { // add gid in visited nodes this.visitedNodesv2.add(node.connectedTo.start.parent.nodes[e].gid); // call back Arduino Recursive Fn return this.getRecLED(node.connectedTo.start.parent.nodes[e], startedOn); } } } } } catch (e) { console.warn(e); return false; } } /** * Recursive Function to handle BreadBoard * @param node Node which is to be checked for BreadBoard */ private getRecLEDBread(node: Point, startedOn: string) { // IF/ELSE: Determine if start is to be used OR end for further recursion if (node.connectedTo.end.gid !== node.gid) { const bb = (node.connectedTo.end.parent as BreadBoard); // loop through joined nodes of breadboard for (const e in bb.joined) { if (bb.joined[e].gid !== node.connectedTo.end.gid) { // Run only if substring matches if (bb.joined[e].label.substring(1, bb.joined[e].label.length) === node.connectedTo.end.label.substring(1, node.connectedTo.end.label.length)) { const ascii = node.connectedTo.end.label.charCodeAt(0); const currAscii = bb.joined[e].label.charCodeAt(0); // add gid to VisitedNode this.visitedNodesv2.add(bb.joined[e].gid); // IF/ELSE: determine which part of breadboard is connected if (ascii >= 97 && ascii <= 101) { if (bb.joined[e].isConnected() && (currAscii >= 97 && currAscii <= 101)) { return this.getRecLED(bb.joined[e], startedOn); } } else if (ascii >= 102 && ascii <= 106) { if (bb.joined[e].isConnected() && (currAscii >= 102 && currAscii <= 106)) { return this.getRecLED(bb.joined[e], startedOn); } } else { if (bb.joined[e].isConnected() && (bb.joined[e].label === node.connectedTo.end.label)) { return this.getRecLED(bb.joined[e], startedOn); } } } } } } else if (node.connectedTo.start.gid !== node.gid) { const bb = (node.connectedTo.start.parent as BreadBoard); // loop through joined nodes of breadboard for (const e in bb.joined) { if (bb.joined[e].gid !== node.connectedTo.start.gid) { // Run only if substring matches if (bb.joined[e].label.substring(1, bb.joined[e].label.length) === node.connectedTo.start.label.substring(1, node.connectedTo.start.label.length)) { const ascii = node.connectedTo.start.label.charCodeAt(0); const currAscii = bb.joined[e].label.charCodeAt(0); // add gid to VisitedNode this.visitedNodesv2.add(bb.joined[e].gid); // IF/ELSE: determine which part of breadboard is connected if (ascii >= 97 && ascii <= 101) { if (bb.joined[e].isConnected() && (currAscii >= 97 && currAscii <= 101)) { return this.getRecLED(bb.joined[e], startedOn); } } else if (ascii >= 102 && ascii <= 106) { if (bb.joined[e].isConnected() && (currAscii >= 102 && currAscii <= 106)) { return this.getRecLED(bb.joined[e], startedOn); } } else { if (bb.joined[e].isConnected() && (bb.joined[e].label === node.connectedTo.end.label)) { return this.getRecLED(bb.joined[e], startedOn); } } } } } } } } ================================================ FILE: ArduinoFrontend/src/app/Libs/inputs/Relay.ts ================================================ import { CircuitElement } from '../CircuitElement'; /** * Relay Module Class */ export class Relay extends CircuitElement { /** * Relay Constructor * @param canvas Raphael canvas * @param x Position x * @param y Position y */ constructor(public canvas: any, public x: number, y: number) { super('RelayModule', x, y, 'Relay.json', canvas); } /** * Initialize the relay module. */ init() { let iniValue = 0; this.nodes[4].addValueListener((v) => { this.nodes[5].setValue(v, null); }); this.nodes[3].addValueListener((val) => { if (val > 4.9 && val < 5.1) { if (this.nodes[1].value > 0) { iniValue = 2; this.nodes[2].setValue(this.nodes[1].value, null); } else if (this.nodes[2].value > 0) { iniValue = 1; this.nodes[1].setValue(this.nodes[2].value, null); } } else { this.nodes[iniValue].setValue(-1, this.nodes[iniValue]); } }); } /** * Function provides component details * @param keyName Unique Class name * @param id Component id * @param body body of property box * @param title Component title */ properties(): { keyName: string; id: number; body: HTMLElement; title: string; } { const body = document.createElement('div'); return { keyName: this.keyName, id: this.id, title: 'Relay Module', body }; } /** * Check connection,if not connected show toast. */ initSimulation(): void { // Check Connection if ( !(this.nodes[1].connectedTo && this.nodes[2].connectedTo && this.nodes[3].connectedTo && this.nodes[4].connectedTo && this.nodes[5].connectedTo) ) { window['showToast']('Please Connect Relay Properly'); } } /** * Called on Stop Simulation. */ closeSimulation(): void { } } ================================================ FILE: ArduinoFrontend/src/app/Libs/inputs/Slider.ts ================================================ /** * Class for adding a Slider during simulation. * Used by temperature sensor and photo resistor */ export class Slider { /** * Value Of the Slider */ value = 0; /** * Value Change Listener */ private listener: (value: number) => void; /** * The Circle which slides around the bar */ control: any; /** * Minimum X Value */ minx: number; /** * Maximum X Value */ maxx: number; /** * The Rectaungular path wehre control slides */ rect: any; /** * Constructor For adding a Slider * @param canvas Raphael Paper * @param x The X position of Slider * @param y The Y Position Of Slide */ constructor(public canvas: any, public x: number, public y: number) { // Draw the slider this.rect = this.canvas.rect(this.x - 60, this.y - 40, 120, 20, 15); this.minx = this.x - 60 + 6; this.maxx = this.x + 60 - 6; // Draw the control knob this.control = this.canvas.circle(this.x, this.y - 30, 12) .attr({ fill: '#000' }); let tmp; // On Dragging knob this.control.drag((dx, _) => { // Change only in x direction const cx = Math.min(Math.max(tmp.cx + dx, this.minx), this.maxx); this.control.attr({ cx }); // Calculate value and call the listener this.value = (cx - this.minx) / (this.maxx - this.minx); if (this.listener) { this.listener(this.value); } }, () => { tmp = this.control.attr(); }, () => { }); } /** * Set Gradient to the slider * @param start Start Hex Color * @param end End Hex Color */ setGradient(start: string, end: string) { this.rect.attr({ fill: `0-${start}-${end}` }); } /** * Set value change Listener * @param listener Value Change Listener */ setValueChangeListener(listener: (value: number) => void) { this.listener = listener; } /** * Hide Slider */ hide() { this.control.hide(); this.rect.hide(); } /** * Show Slider */ show() { this.control.show(); this.rect.show(); } /** * Remove Slider From Dom */ remove() { this.control.remove(); this.rect.remove(); this.control = null; this.rect = null; } } ================================================ FILE: ArduinoFrontend/src/app/Libs/inputs/TemperatureSensors.ts ================================================ import { CircuitElement } from '../CircuitElement'; import { Point } from '../Point'; import { Slider } from './Slider'; /** * Temperature sensor TMP36 */ export class TMP36 extends CircuitElement { /** * Slider to change temperature */ slide: Slider; /** * Raphael text element for showing value. */ valueText: any; /** * Constructor for temperature sensor * @param canvas Raphael Paper * @param x X position * @param y y Position */ constructor(public canvas: any, x: number, y: number) { super('TMP36', x, y, 'TMP36.json', canvas); } /** * Function provides component details * @param keyName Unique Class name * @param id Component id * @param body body of property box * @param title Component title */ properties(): { keyName: string; id: number; body: HTMLElement; title: string; } { const body = document.createElement('div'); return { keyName: this.keyName, id: this.id, body, title: 'Temperatur Sensor' }; } /** sets value for nodes */ setValue(val: number) { if ( this.nodes[0].connectedTo && this.nodes[0].value >= 4.9 && this.nodes[2].connectedTo ) { this.nodes[1].setValue(val, null); } else { window['showToast']('Please Connect Wires Properly'); } } /** * Initialize Variable and callback when start simulation is pressed */ initSimulation(): void { this.valueText = this.canvas.text(this.x + this.tx + 120, this.y + this.ty - 40, '42.38°C'); this.valueText.attr({ 'font-size': 15 }); this.slide = new Slider(this.canvas, this.x + this.tx, this.y + this.ty - 10); this.slide.setGradient('#03b5fc', '#fc6203'); this.slide.setValueChangeListener((v) => { const tmp = v * 165 + -40; // Temperature // this.nodes[1].setValue((tmp + 50) / 100, null); // console.log([tmp, (tmp + 50) / 100]); this.valueText.attr({ text: `${Math.round((tmp) * 100) / 100}°C` }); this.setValue((tmp + 50) / 100); }); this.setValue(0.925); } /** remove slider and text */ closeSimulation(): void { this.valueText.remove(); this.slide.remove(); delete this.slide; this.slide = null; } } ================================================ FILE: ArduinoFrontend/src/app/Libs/inputs/Thermistor.ts ================================================ import { CircuitElement } from '../CircuitElement'; import { Slider } from './Slider'; import { Point } from '../Point'; import { BreadBoard } from '../General'; declare var window; /** * Class Photoresistor */ export class Thermistor extends CircuitElement { /** * Slider to set the value of photo resistor */ slide: Slider; /** * The Value of the photo resitor */ valueText: any; /** * Maximum temprature of Thermistor */ maxVal = 500; /** * Resistor Value Ohms */ resistorVal = 1; /** * Set of Visited Nodes */ visitedNodesv2 = new Set(); /** * Beta Value for calculation of output voltage. see below for more info * Values used for calculating beta * |------------------------------| * | Temprature | Resistance | * |------------------------------| * | 273 K | 32650.80 Ohms | * | 298 K | 10000 Ohms | * |------------------------------| * Formula(for beta) : ß=ln(R1/R2)/((1/T1)-(1/T2)) */ beta = Math.log(32650.80 / 10000) / ((1 / 273) - (1 / 298)); /** * Photoresistor Constructor * @param canvas Raphael canvas * @param x Position x * @param y Position y */ constructor(public canvas: any, x: number, y: number) { super('Thermistor', x, y, 'Thermistor.json', canvas); } /** * Function provides component details * @param keyName Unique Class name * @param id Component id * @param body body of property box * @param title Component title */ properties(): { keyName: string; id: number; body: HTMLElement; title: string; } { const body = document.createElement('div'); return { keyName: this.keyName, id: this.id, body, title: 'Thermistor' }; } /** * Returns a string on the basis of resistance * @param r Resistance */ getValue(r: number) { return `${Math.round(r)} C`; } /** * Initialize Variable and callback when start simulation is pressed */ initSimulation(): void { // add text this.valueText = this.canvas.text(this.x + this.tx + 120, this.y + this.ty - 40, `${this.maxVal / 2} C`); this.valueText.attr({ 'font-size': 15 }); // create & add slider this.slide = new Slider(this.canvas, this.x + this.tx, this.y + this.ty - 10); this.slide.setGradient('#69644b', '#ffd500'); // get value of resistor connected const resistorEnd1 = this.getRecResistor(this.nodes[0], 'Terminal 1'); const resistorEnd2 = this.getRecResistor(this.nodes[1], 'Terminal 2'); if (resistorEnd1) { // if resistor is connected to node[0] get value of resistor this.resistorVal = resistorEnd1.parent.value; } else if (resistorEnd2) { // if resistor is connected to node[1] get value of resistor this.resistorVal = resistorEnd2.parent.value; } // determine if incoming current is coming from node[0] or node[1] const enable1 = this.nodes[1].value > this.nodes[0].value ? true : false; // At starting set value to half of slider this.changeVal(enable1, 0.5); this.slide.setValueChangeListener((v) => { // Change slider's ouput value this.changeVal(enable1, v); }); } /** Function removes all animations and callbacks */ closeSimulation(): void { this.valueText.remove(); this.slide.remove(); delete this.slide; delete this.valueText; this.slide = null; this.valueText = null; this.visitedNodesv2.clear(); } /** * Call this function to change ouput value of photoresistor * @param enable1 Pin to direct output on * @param v value of slider, ranges from 0-1 */ changeVal(enable1, v) { // calculate temprature according slider const temp = v * this.maxVal; // calculate part of equation which is in power const pow = this.beta * ((1 / (273 + temp)) - (1 / 298)); // calculate internal resistance of thermistor const r = 10000 * Math.pow(2.718, pow); // if enable1 is true if (enable1) { // calculate voltage value const incoming = this.nodes[1].value; // calculate output voltage const Vout = (this.resistorVal / (this.resistorVal + r)) * incoming; // set output voltage this.nodes[0].setValue(Vout, null); // update text this.valueText.attr({ text: this.getValue(temp) }); } else { // calculate voltage value const incoming = this.nodes[0].value; // calculate output voltage const Vout = (this.resistorVal / (this.resistorVal + r)) * incoming; // set output voltage this.nodes[1].setValue(Vout, null); // update text this.valueText.attr({ text: this.getValue(temp) }); } } /** * Returns node connected to Resistor * @param node node to start search on * @param startedOn label of node search started on * @returns Resistor connected Node */ getRecResistor(node: Point, startedOn: string) { try { if (node.connectedTo.start.parent.keyName === 'Resistor') { // TODO: Return if L293D is connected to start node return node.connectedTo.start; } else if (node.connectedTo.end.parent.keyName === 'Resistor') { // TODO: Return if L293D is connected to end node return node.connectedTo.end; } else if (node.connectedTo.start.parent.keyName === 'BreadBoard' && !this.visitedNodesv2.has(node.connectedTo.start.gid)) { // TODO: Call recursive BreadBoard handler function if node is connected to Breadboard && visited nodes doesn't have node's gid return this.getRecBread(node, startedOn); } else if (node.connectedTo.end.parent.keyName === 'BreadBoard' && !this.visitedNodesv2.has(node.connectedTo.end.gid)) { // TODO: Call recursive BreadBoard handler function if node is connected to Breadboard && visited nodes doesn't have node's gid return this.getRecBread(node, startedOn); } else if (node.connectedTo.end.parent.keyName === 'Battery9v' && window.scope.ArduinoUno.length === 0) { // TODO: Return false if node's end is connected to 9V Battery return false; } else if (node.connectedTo.end.parent.keyName === 'CoinCell' && window.scope.ArduinoUno.length === 0) { // TODO: Return false if node's end is connected to Coin Cell return false; } else if (node.connectedTo.end.parent.keyName === 'RelayModule') { // TODO: Handle RelayModule if (startedOn === 'POSITIVE') { // If search was started on Positive node then return connected node of VCC in Relay return this.getRecResistor(node.connectedTo.end.parent.nodes[3], startedOn); } else if (startedOn === 'NEGATIVE') { // If search was started on Negative node then return connected node of GND in Relay return this.getRecResistor(node.connectedTo.end.parent.nodes[5], startedOn); } } else { // TODO: If nothing matches // IF/ELSE: Determine if start is to be used OR end for further recursion if (node.connectedTo.end.gid !== node.gid) { // Loops through all nodes in parent for (const e in node.connectedTo.end.parent.nodes) { // IF: gid is different && gid not in visited node if (node.connectedTo.end.parent.nodes[e].gid !== node.connectedTo.end.gid && !this.visitedNodesv2.has(node.connectedTo.end.parent.nodes[e].gid) && node.connectedTo.end.parent.nodes[e].isConnected()) { // add gid in visited nodes this.visitedNodesv2.add(node.connectedTo.end.parent.nodes[e].gid); // call back L293D Recursive Fn return this.getRecResistor(node.connectedTo.end.parent.nodes[e], startedOn); } } } else if (node.connectedTo.start.gid !== node.gid) { // Loops through all nodes in parent for (const e in node.connectedTo.start.parent.nodes) { // IF: gid is different && gid not in visited node if (node.connectedTo.start.parent.nodes[e].gid !== node.connectedTo.start.gid && !this.visitedNodesv2.has(node.connectedTo.start.parent.nodes[e].gid) && node.connectedTo.start.parent.nodes[e].isConnected()) { // add gid in visited nodes this.visitedNodesv2.add(node.connectedTo.start.parent.nodes[e].gid); // call back L293D Recursive Fn return this.getRecResistor(node.connectedTo.start.parent.nodes[e], startedOn); } } } } } catch (e) { console.warn(e); return false; } } /** * Recursive Function to handle BreadBoard * @param node Node which is to be checked for BreadBoard */ getRecBread(node: Point, startedOn: string) { // IF/ELSE: Determine if start is to be used OR end for further recursion if (node.connectedTo.end.gid !== node.gid) { const bb = (node.connectedTo.end.parent as BreadBoard); // loop through joined nodes of breadboard for (const e in bb.joined) { if (bb.joined[e].gid !== node.connectedTo.end.gid) { // Run only if substring matches if (bb.joined[e].label.substring(1, bb.joined[e].label.length) === node.connectedTo.end.label.substring(1, node.connectedTo.end.label.length)) { const ascii = node.connectedTo.end.label.charCodeAt(0); const currAscii = bb.joined[e].label.charCodeAt(0); // add gid to VisitedNode this.visitedNodesv2.add(bb.joined[e].gid); // IF/ELSE: determine which part of breadboard is connected if (ascii >= 97 && ascii <= 101) { if (bb.joined[e].isConnected() && (currAscii >= 97 && currAscii <= 101)) { return this.getRecResistor(bb.joined[e], startedOn); } } else if (ascii >= 102 && ascii <= 106) { if (bb.joined[e].isConnected() && (currAscii >= 102 && currAscii <= 106)) { return this.getRecResistor(bb.joined[e], startedOn); } } else { if (bb.joined[e].isConnected() && (bb.joined[e].label === node.connectedTo.end.label)) { return this.getRecResistor(bb.joined[e], startedOn); } } } } } } else if (node.connectedTo.start.gid !== node.gid) { const bb = (node.connectedTo.start.parent as BreadBoard); // loop through joined nodes of breadboard for (const e in bb.joined) { if (bb.joined[e].gid !== node.connectedTo.start.gid) { // Run only if substring matches if (bb.joined[e].label.substring(1, bb.joined[e].label.length) === node.connectedTo.start.label.substring(1, node.connectedTo.start.label.length)) { const ascii = node.connectedTo.start.label.charCodeAt(0); const currAscii = bb.joined[e].label.charCodeAt(0); // add gid to VisitedNode this.visitedNodesv2.add(bb.joined[e].gid); // IF/ELSE: determine which part of breadboard is connected if (ascii >= 97 && ascii <= 101) { if (bb.joined[e].isConnected() && (currAscii >= 97 && currAscii <= 101)) { return this.getRecResistor(bb.joined[e], startedOn); } } else if (ascii >= 102 && ascii <= 106) { if (bb.joined[e].isConnected() && (currAscii >= 102 && currAscii <= 106)) { return this.getRecResistor(bb.joined[e], startedOn); } } else { if (bb.joined[e].isConnected() && (bb.joined[e].label === node.connectedTo.end.label)) { return this.getRecResistor(bb.joined[e], startedOn); } } } } } } } } ================================================ FILE: ArduinoFrontend/src/app/Libs/inputs/UltrasonicSensor.ts ================================================ import { CircuitElement } from '../CircuitElement'; import { Collision } from './Collision'; import { Point } from '../Point'; import { ArduinoUno } from '../outputs/Arduino'; /** * Ultrasonic Sensor class */ export class UltrasonicSensor extends CircuitElement { /** * Attributes for the line which is shown during simulation */ static readonly linesAttr = { 'stroke-width': 4, 'stroke-dasharray': ['-.'], 'stroke-linecap': 'round', 'stroke-linejoin': 'round', stroke: '#828282' }; /** * Map pin name to the circuit node */ pinNamedMap: any = {}; /** * The Control which is moved during simulation/ */ control: any; /** * The Arduino uno which is connected to ultrasonic sensor. */ arduino: ArduinoUno; /** * The Micro event index in the queue. */ microEventIndex: number; /** * The Transmit line. */ Tline: any; /** * The Reciver Line. */ Rline: any; /** * The Raphael Element for the text which shows distance. */ valueText: any; /** * Ultrasonic constructor * @param canvas Raphael Canvas (Paper) * @param x position x * @param y position y */ constructor(public canvas: any, public x: number, y: number) { super('UltrasonicSensor', x, y, 'UltrasonicSensor.json', canvas); } /** init is called when the component is complety drawn to the canvas */ init() { // Create a mapping for node label to node for (const x of this.nodes) { this.pinNamedMap[x.label] = x; } // let timeout; // Add value Change Listener to Circuit nodes // console.log(this.pinNamedMap['TRIG']); this.pinNamedMap['TRIG'].addValueListener((v) => { // TODO: Handle On // if(v > 0){ // if (this.arduino) { // if(v > 0){ // clearTimeout(timeout); // this.arduino.runner.getMicroEvent(this.microEventIndex).enable = true; // }else{ // timeout = setTimeout(() => {console.log('c') }, 24); // } // clearTimeout(timeout); // } // } // console.log(v); // if (v >= 5) { // this.pinNamedMap['ECHO'].setValue(v, null); // } else { // this.pinNamedMap['ECHO'].setValue(0, null); // } }); } /** * Function provides component details * @param keyName Unique Class name * @param id Component id * @param body body of property box * @param title Component title */ properties(): { keyName: string; id: number; body: HTMLElement; title: string; } { const body = document.createElement('div'); return { keyName: this.keyName, id: this.id, title: 'Ultrasonic Distance Sensor', body }; } /** * Initialize stuff for simulation */ initSimulation(): void { // Creating the text this.valueText = this.canvas.text(this.x + this.tx + 253, this.ty + this.y, '16 CM').attr({ 'font-size': 30 }); // Get the Pin which is connected to arduino let pinName; const trig = (this.pinNamedMap['ECHO'] as Point); if (trig.connectedTo) { if (trig.connectedTo.start.parent instanceof ArduinoUno) { pinName = trig.connectedTo.start.label; this.arduino = trig.connectedTo.start.parent; } else if (trig.connectedTo.end.parent instanceof ArduinoUno) { this.arduino = trig.connectedTo.end.parent; pinName = trig.connectedTo.end.label; } else { console.log('TODO: Write Simulation logic for other components'); } } // Control Center -> CC const CC = { x: this.x + this.tx + 102.5, y: this.y + this.ty - 30 }; const lineEndY = this.y + this.ty + 40; const lineTEnd = this.tx + this.x + 48; const lineREnd = this.tx + this.x + 152; // Draw transmit,recived lines and the control circle this.Tline = this.canvas.path(`M${CC.x},${CC.y}L${lineTEnd},${lineEndY}`).attr(UltrasonicSensor.linesAttr); this.Rline = this.canvas.path(`M${CC.x},${CC.y}L${lineREnd},${lineEndY}`).attr(UltrasonicSensor.linesAttr); this.control = this.canvas.circle(CC.x, CC.y, 15); this.control.attr({ fill: '#000' }); // Adding a Drag listener to the control let tmp; this.control.drag((dx, dy) => { CC.x = tmp.cx + dx; CC.y = tmp.cy + dy; // Update the lines and control this.control.attr({ cx: CC.x, cy: CC.y }); this.Tline.attr({ path: `M${CC.x},${CC.y}L${lineTEnd},${lineEndY}` }); this.Rline.attr({ path: `M${CC.x},${CC.y},L${lineREnd},${lineEndY}` }); // check if control is in front of sensor if not show toast if (CC.y > (this.y + this.ty)) { this.valueText.attr({ text: 'Behind\nThe\nSensor' }); if (this.arduino) { this.arduino.runner.getMicroEvent(this.microEventIndex).period = 23200; } return; } // if arduino ic connected if (this.arduino) { // get the distance let dist = Collision.EuclideanDistance({ x: CC.x, y: CC.y }, { x: lineTEnd, y: lineEndY }); const dist2 = Collision.EuclideanDistance({ x: CC.x, y: CC.y }, { x: lineREnd, y: lineEndY }); // take average diatance dist = Math.floor((dist + dist2) / 35); // Interpolate the distance dist = dist * dist; if (dist > 400 || dist < 4) { this.valueText.attr({ text: `OUT\nOF\nRegion` }); } else { this.valueText.attr({ text: `${dist} CM` }); } dist = Math.max(4, Math.min(dist, 400)); dist = dist * 29 * 2; // Update the period of the micro event this.arduino.runner.getMicroEvent(this.microEventIndex).period = dist; } }, () => { tmp = this.control.attr(); }, () => { }); // Set the default value for micro event if (this.arduino) { const point = this.arduino.getPort(pinName); this.microEventIndex = this.arduino.runner.addMicroEvent({ start: 0, state: false, period: 928, pin: point.pin, port: point.name, enable: true }); } } /** * Reset stuff on stop of simulation */ closeSimulation(): void { this.valueText.remove(); this.Tline.remove(); this.Rline.remove(); this.control.remove(); this.valueText = null; this.control = null; this.Tline = null; this.Rline = null; } } ================================================ FILE: ArduinoFrontend/src/app/Libs/outputs/Arduino.ts ================================================ import { CircuitElement } from '../CircuitElement'; import { ArduinoRunner } from '../AVR8/Execute'; import { isUndefined, isNull } from 'util'; import { Point } from '../Point'; import { EventEmitter } from '@angular/core'; import { GraphDataService } from 'src/app/graph-data.service'; /** * AVR8 global variable */ declare var AVR8; /** * Arduino uno component class */ export class ArduinoUno extends CircuitElement { /** * Arduino name Prefix */ static prefix = 'Arduino UNO R3 '; // TODO: fetch from json /** * Name of the Arduino */ public name: string; /** * Code inside the arduino */ public code = 'void setup(){\n\t\n}\n\nvoid loop(){\n\t\n}'; // TODO: fetch from json /** * For execution of code */ public runner: ArduinoRunner; /** * The Compiled Hex */ public hex: string; /** * Power LED of Arduino */ public powerLed: any; /** * Built in LED of arduino */ public builtinLED: any; /** * Pin Names Mapped to the respective Node */ public pinNameMap: any = {}; /** * Servo attached to an arduino */ private servos: any[] = []; flag = '00'; prevPortD = 0; prevPortB = 0; portFlag = ''; delayTime = new Date(); // Extra /** * Constructor for Arduino * @param canvas Raphael Paper * @param x X position * @param y Y Position */ constructor(public canvas: any, x: number, y: number) { super('ArduinoUno', x, y, 'Arduino.json', canvas); // Logic to Create Name of an arduino let start = window['scope']['ArduinoUno'].length + 1; this.name = ArduinoUno.prefix + start; while (window['ArduinoUno_name'][this.name]) { ++start; this.name = ArduinoUno.prefix + start; } window['ArduinoUno_name'][this.name] = this; } /** * Initialize Arduino */ init() { // Create The mapping for (const node of this.nodes) { this.pinNameMap[node.label] = node; } // Add a Analog value change Listener to the circuit nodes for (let i = 0; i <= 5; ++i) { this.pinNameMap[`A${i}`].addValueListener((val) => { if (isUndefined(this.runner) || isNull(this.runner)) { setTimeout(() => { this.runner.adc.setAnalogValue(i, Math.floor(204.6 * val)); }, 300); } else { this.runner.adc.setAnalogValue(i, Math.floor(204.6 * val)); } }); } // this.pinNameMap['D12'].addValueListener((v) => { // if (isUndefined(this.runner) || isNull(this.runner)) { // setTimeout(() => { // this.pinNameMap['D12'].setValue(v, this.pinNameMap['D12']); // }, 300); // return; // } else { // if (this.runner.portB.pinState(4) === AVR8.PinState.Input) { // this.runner.portB.setPin(4, v > 0 ? 1 : 0); // } // } // }); // For Port B D5 - D13 add a input listener for (let i = 0; i <= 5; ++i) { this.pinNameMap[`D${i + 8}`].addValueListener((v) => { // console.log([i, v]); if (isUndefined(this.runner) || isNull(this.runner)) { setTimeout(() => { this.pinNameMap[`D${i + 8}`].setValue(1, this.pinNameMap[`D${i + 8}`]); }, 300); return; } // Update the value of register only if pin is input if (this.runner.portB.pinState(i) === AVR8.PinState.Input) { this.runner.portB.setPin(i, v > 0 ? 1 : 0); } else if (this.runner.portB.pinState(i) === AVR8.PinState.InputPullUp) { // Handle Input PullUp this.runner.portB.setPin(i, v); } }); } // Handle Input For Port D D2 - D7 for (let i = 2; i <= 7; ++i) { this.pinNameMap[`D${i}`].addValueListener((v) => { if (isUndefined(this.runner) || isNull(this.runner)) { setTimeout(() => { this.pinNameMap[`D${i}`].setValue(v, this.pinNameMap[`D${i}`]); }, 300); return; } // Update the value of register only if pin is input if (this.runner.portD.pinState(i) === AVR8.PinState.Input) { this.runner.portD.setPin(i, v > 0 ? 1 : 0); } else if (this.runner.portD.pinState(i) === AVR8.PinState.InputPullUp) { // Handle Input PullUp this.runner.portD.setPin(i, v); } }); } } /** * Data which needs to be saved inside the database */ SaveData() { return { name: this.name, code: this.code }; } /** * Load Data which is fetched from data base * @param data Data fetched from the database */ LoadData(data: any) { this.name = data.data.name; this.code = data.data.code; } /** * Property of an Arduino */ properties(): { keyName: string; id: number; body: HTMLElement; title: string; } { const body = document.createElement('div'); const label = document.createElement('label'); label.innerText = 'Name'; const inp = document.createElement('input'); inp.value = this.name; body.appendChild(label); body.appendChild(inp); inp.onkeyup = (ev: KeyboardEvent) => { if (ev.key.length > 1) { return; } if (window['ArduinoUno_name'][inp.value]) { // TODO: SHow Toast console.log('Name already Exist'); return; } delete window['ArduinoUno_name'][this.name]; this.name = inp.value; window['ArduinoUno_name'][this.name] = this; }; return { keyName: this.keyName, id: this.id, title: 'Arduino Uno', body }; } /** * Delete arduino name */ delete() { delete window['ArduinoUno_name'][this.name]; } /** * Initialize Stuff for simulation. */ initSimulation(): void { this.builtinLED = this.elements[1].glow({ color: '#ffff00' }); this.builtinLED.hide(); this.powerLed = this.elements[2].glow({ color: '#00ff00' }); const myOutput = document.createElement('pre'); if (isNull(this.hex) && isUndefined(this.hex)) { return; } this.runner = new ArduinoRunner(this.hex); this.runner.portB.addListener((value) => { if (this.portFlag !== 'D' && (this.flag === '21' || this.flag === '41') ) { this.EmitValueChangeEvent(); // Reset flag = "00"; this.portFlag = 'B'; } else { this.portFlag = ''; } // if (this.flag === '00') this.flag = '21'; this.flag = '21'; this.prevPortB = value; this.delayTime = new Date(); for (let i = 0; i <= 5; ++i) { if ( this.runner.portB.pinState(i) !== AVR8.PinState.Input && this.runner.portB.pinState(i) !== AVR8.PinState.InputPullUp ) { this.pinNameMap[`D${i + 8}`].setValue(((value >> i) & 1) * 5.0, null); } } if ((value >> 5) & 1) { this.builtinLED.show(); } else { this.builtinLED.hide(); } }); this.runner.portC.addListener((value) => { console.log(value); }); this.runner.portD.addListener((value) => { if (this.portFlag !== 'B' && (this.flag === '21' || this.flag === '41') ) { this.EmitValueChangeEvent(); // Reset flag = "00"; this.portFlag = 'D'; } else { this.portFlag = ''; } // if (this.flag === '00') this.flag = '41'; this.flag = '41'; this.prevPortD = value; this.delayTime = new Date(); if ( this.runner.portD.pinState(0) !== AVR8.PinState.Input && this.runner.portD.pinState(0) !== AVR8.PinState.InputPullUp ) { this.pinNameMap[`RX0`].setValue((value & 1) * 5.0, null); } if ( this.runner.portD.pinState(1) !== AVR8.PinState.Input && this.runner.portD.pinState(1) !== AVR8.PinState.InputPullUp ) { this.pinNameMap[`TX0`].setValue(((value >> 1) & 1) * 5.0, null); } for (let i = 2; i <= 7; ++i) { if ( this.runner.portD.pinState(i) !== AVR8.PinState.Input && this.runner.portD.pinState(i) !== AVR8.PinState.InputPullUp ) { this.pinNameMap[`D${i}`].setValue(((value >> i) & 1) * 5.0, null); } } }); this.runner.usart.onByteTransmit = (value) => { /// TODO: Show On Console myOutput.textContent += String.fromCharCode(value); }; document.getElementById('msg').append(myOutput); this.pinNameMap['5V'].setValue(5, null); this.pinNameMap['3.3V'].setValue(3.3, null); if (this.servos.length > 0) { for (const ser of this.servos) { this.runner.addServo(ser.port, ser.pin, ser.call, ser.pwm); } this.servos = []; } this.runner.execute(); // Handle Input Pull Up on portB pins for (let i = 0; i <= 5; ++i) { // check if pin state is inputPullUp if (this.runner.portB.pinState(i) === AVR8.PinState.InputPullUp) { // set pullUpEnabled boolean to true this.pinNameMap[`D${i + 8}`].pullUpEnabled = true; // set pin value to 1 by default this.runner.portB.setPin(i, 1); } } // Handle Input Pull Up on portD pins for (let i = 2; i <= 7; ++i) { // check if pin state is inputPullUp if (this.runner.portD.pinState(i) === AVR8.PinState.InputPullUp) { // set pullUpEnabled boolean to true this.pinNameMap[`D${i}`].pullUpEnabled = true; // set pin value to 1 by default this.runner.portD.setPin(i, 1); } } } /** * Remove arduino runner on stop simulation. */ closeSimulation(): void { if (this.runner) { this.runner.delete(); this.runner = null; } if (this.builtinLED) { this.builtinLED.remove(); this.builtinLED = null; } if (this.powerLed) { this.powerLed.remove(); this.powerLed = null; } } /** * Add Servo to the queue * @param pin Circuit node where servo is connected * @param callback Callback which needs to call on change in PWM */ addServo(pin: Point, callback: (angle: number, prevAngle: number) => void) { const tmp = this.getPort(pin.label); this.servos.push({ port: tmp.name, pin: tmp.pin, call: callback }); } /** * Add PWM to the queue * @param pin Circuit node where pwm component is connected * @param callback Callback on change in pwm (The Value needs to be divided by 100) */ addPWM(pin: Point, callback: (volt: number, prev: number) => void) { const tmp = this.getPort(pin.label); if (this.runner) { this.runner.addServo( tmp.name, tmp.pin, callback, true ); } else { this.servos.push({ port: tmp.name, pin: tmp.pin, call: callback, pwm: true }); } } /** * Returns the port name and pin mumber * @param pinName Circuit Node Name */ getPort(pinName: string) { const num = parseInt(pinName.substr(1), 10); if (!isNaN(num)) { if (num >= 0 && num <= 7) { return { name: 'portD', pin: num }; } else if (num > 7 && num <= 13) { return { name: 'portB', pin: num - 8 }; } } } EmitValueChangeEvent() { const value = (this.prevPortB << 8) | (this.prevPortD & 255); GraphDataService.voltageChange.emit({ value, time: this.delayTime, arduino: { id: this.id, name: this.name }, }); this.flag = '00'; // this.portFlag = ''; } } ================================================ FILE: ArduinoFrontend/src/app/Libs/outputs/Buzzer.ts ================================================ import { CircuitElement } from '../CircuitElement'; import { Point } from '../Point'; import { ArduinoUno } from '../outputs/Arduino'; import { BreadBoard } from '../General'; /** * Declare window so that custom created function don't throw error */ declare var window; /** * Buzzer Class */ export class Buzzer extends CircuitElement { /** * Map pin name to the circuit node */ pinNamedMap: any = {}; /** * The oscillator for buzzer. */ oscillator: any; /** * The Arduino uno which is connected to the Buzzer. */ arduino: ArduinoUno; /** * Audio Context */ audioCtx: AudioContext; /** * Toggle for wether buzzer is beeping or not. */ sound = false; /** * Id for setInterval hook. */ setIntervId: any; /** * Set to keep track of visited nodes */ visitedNodesv2 = new Set(); /** * Keep track of previous value */ prev = -2; /** * Flag to check if logic function's recursion should be skipped */ skipCheck = false; /** * If all nodes of element are connected or not */ allNodesConnected = false; /** * pushbutton constructor * @param canvas Raphael Canvas (Paper) * @param x position x * @param y position y */ constructor(private canvas: any, public x: number, public y: number) { super('Buzzer', x, y, 'Buzzer.json', canvas); } /** init is called when the component is complety drawn to the canvas */ init() { // console.log(this.nodes[0].label); // console.log(this.nodes[1].label); for (const x of this.nodes) { this.pinNamedMap[x.label] = x; } this.nodes[0].addValueListener((v) => this.logic(v)); this.nodes[1].addValueListener((v) => this.logic(v)); } /** * Logic for beeping sound * @param val The Value on the positive pin */ logic(val: number) { // TODO: Handle PWM if (this.prev === val) { this.skipCheck = true; } if (!this.allNodesConnected) { const arduinoEnd: any = this.getRecArduinov2(this.pinNamedMap['POSITIVE'], 'POSITIVE'); const negativeEnd = this.getRecArduinov2(this.pinNamedMap['Negative'], 'Negative'); if (arduinoEnd && negativeEnd) { if (negativeEnd.hasOwnProperty('label')) { if (negativeEnd.label === 'GND' || (negativeEnd.value === 0 && arduinoEnd.value > 0)) { this.allNodesConnected = true; } } } } if (this.nodes[0].isConnected() && this.nodes[1].isConnected()) { if (this.allNodesConnected) { if (val === 5 || this.nodes[0].value === 5) { if (this.oscillator && !this.sound) { this.oscillator.connect(this.audioCtx.destination); this.sound = true; } } else { if (this.oscillator && this.sound) { this.oscillator.disconnect(this.audioCtx.destination); this.sound = false; } } if (val >= 0 && !this.skipCheck) { this.prev = val; this.nodes[1].setValue(val, null); } else { this.skipCheck = false; return; } } } else { // TODO: Show Toast window.showToast('Buzzer is not Connected properly'); } } /** * returns properties object * @param keyName Unique Class name * @param id Component id * @param body body of property box * @param title Component title */ properties() { const body = document.createElement('div'); return { title: 'Buzzer', keyName: this.keyName, id: this.id, body }; } /** * Initialize Variable and callback when start simulation is pressed */ initSimulation() { this.allNodesConnected = false; this.visitedNodesv2.clear(); const arduinoEnd: any = this.getRecArduinov2(this.pinNamedMap['POSITIVE'], 'POSITIVE'); const negativeEnd = this.getRecArduinov2(this.pinNamedMap['Negative'], 'Negative'); // make allNodesConnected boolean true if negative is connected to GND if (negativeEnd) { if (negativeEnd.hasOwnProperty('label')) { if (negativeEnd.label === 'GND') { this.allNodesConnected = true; } } } // Show error if (!arduinoEnd || !negativeEnd) { window.showToast('Buzzer is not Connected properly'); return; } if (arduinoEnd) { if (arduinoEnd.connectedTo) { this.arduino = arduinoEnd.parent; } } const AudioContext = window.AudioContext || window.webkitAudioContext; this.audioCtx = new AudioContext(); this.oscillator = this.audioCtx.createOscillator(); this.oscillator.type = 'square'; this.oscillator.frequency.value = 2300; const prescaler = [8, 32, 64, 128, 256, 1024]; this.setIntervId = setInterval(() => { try { const tccr2b = this.arduino.runner.timer2.TCCRB; const ocr2a = this.arduino.runner.timer2.ocrA; if (ocr2a !== 0) { this.oscillator.frequency.value = Math.round(16000000 / (2 * prescaler[tccr2b - 2] * (ocr2a + 1))); } } catch (error) { } }, 10); this.oscillator.start(); } /** Function removes all callbacks */ closeSimulation() { if (this.oscillator && this.sound) { this.oscillator.disconnect(this.audioCtx.destination); this.sound = false; } this.audioCtx = null; this.oscillator = null; this.arduino = null; this.prev = -2; this.skipCheck = false; setTimeout(() => { clearInterval(this.setIntervId); }, 100); } /** * Return the node which is connected to arduino by recursively finding connected node * @param node The Node which need to be checked */ getRecArduinov2(node: Point, startedOn: string) { try { if (node.connectedTo.start.parent.keyName === 'ArduinoUno') { // TODO: Return if arduino is connected to start node this.visitedNodesv2.clear(); return node.connectedTo.start; } else if (node.connectedTo.end.parent.keyName === 'ArduinoUno') { // TODO: Return if arduino is connected to end node this.visitedNodesv2.clear(); return node.connectedTo.end; } else if (node.connectedTo.start.parent.keyName === 'BreadBoard' && !this.visitedNodesv2.has(node.connectedTo.start.gid)) { // TODO: Call recursive BreadBoard handler function if node is connected to Breadboard && visited nodes doesn't have node's gid return this.getRecArduinoBreadv2(node, startedOn); } else if (node.connectedTo.end.parent.keyName === 'BreadBoard' && !this.visitedNodesv2.has(node.connectedTo.end.gid)) { // TODO: Call recursive BreadBoard handler function if node is connected to Breadboard && visited nodes doesn't have node's gid return this.getRecArduinoBreadv2(node, startedOn); } else if (node.connectedTo.end.parent.keyName === 'Battery9v' && window.scope.ArduinoUno.length === 0) { // TODO: Return false if node's end is connected to 9V Battery return false; } else if (node.connectedTo.end.parent.keyName === 'CoinCell' && window.scope.ArduinoUno.length === 0) { // TODO: Return false if node's end is connected to Coin Cell return false; } else if (node.connectedTo.end.parent.keyName === 'RelayModule') { // TODO: Handle RelayModule if (startedOn === 'POSITIVE') { // If search was started on Positive node then return connected node of VCC in Relay return this.getRecArduinov2(node.connectedTo.end.parent.nodes[3], startedOn); } else if (startedOn === 'NEGATIVE') { // If search was started on Negative node then return connected node of GND in Relay return this.getRecArduinov2(node.connectedTo.end.parent.nodes[5], startedOn); } } else { // TODO: If nothing matches // IF/ELSE: Determine if start is to be used OR end for further recursion if (node.connectedTo.end.gid !== node.gid) { // Loops through all nodes in parent for (const e in node.connectedTo.end.parent.nodes) { // IF: gid is different && gid not in visited node if (node.connectedTo.end.parent.nodes[e].gid !== node.connectedTo.end.gid && !this.visitedNodesv2.has(node.connectedTo.end.parent.nodes[e].gid) && node.connectedTo.end.parent.nodes[e].isConnected()) { // add gid in visited nodes this.visitedNodesv2.add(node.connectedTo.end.parent.nodes[e].gid); // call back Arduino Recursive Fn return this.getRecArduinov2(node.connectedTo.end.parent.nodes[e], startedOn); } } } else if (node.connectedTo.start.gid !== node.gid) { // Loops through all nodes in parent for (const e in node.connectedTo.start.parent.nodes) { // IF: gid is different && gid not in visited node if (node.connectedTo.start.parent.nodes[e].gid !== node.connectedTo.start.gid && !this.visitedNodesv2.has(node.connectedTo.start.parent.nodes[e].gid) && node.connectedTo.start.parent.nodes[e].isConnected()) { // add gid in visited nodes this.visitedNodesv2.add(node.connectedTo.start.parent.nodes[e].gid); // call back Arduino Recursive Fn return this.getRecArduinov2(node.connectedTo.start.parent.nodes[e], startedOn); } } } } } catch (e) { console.warn(e); return false; } } /** * Recursive Function to handle BreadBoard * @param node Node which is to be checked for BreadBoard */ private getRecArduinoBreadv2(node: Point, startedOn: string) { // IF/ELSE: Determine if start is to be used OR end for further recursion if (node.connectedTo.end.gid !== node.gid) { const bb = (node.connectedTo.end.parent as BreadBoard); // loop through joined nodes of breadboard for (const e in bb.joined) { if (bb.joined[e].gid !== node.connectedTo.end.gid) { // Run only if substring matches if (bb.joined[e].label.substring(1, bb.joined[e].label.length) === node.connectedTo.end.label.substring(1, node.connectedTo.end.label.length)) { const ascii = node.connectedTo.end.label.charCodeAt(0); const currAscii = bb.joined[e].label.charCodeAt(0); // add gid to VisitedNode this.visitedNodesv2.add(bb.joined[e].gid); // IF/ELSE: determine which part of breadboard is connected if (ascii >= 97 && ascii <= 101) { if (bb.joined[e].isConnected() && (currAscii >= 97 && currAscii <= 101)) { return this.getRecArduinov2(bb.joined[e], startedOn); } } else if (ascii >= 102 && ascii <= 106) { if (bb.joined[e].isConnected() && (currAscii >= 102 && currAscii <= 106)) { return this.getRecArduinov2(bb.joined[e], startedOn); } } else { if (bb.joined[e].isConnected() && (bb.joined[e].label === node.connectedTo.end.label)) { return this.getRecArduinov2(bb.joined[e], startedOn); } } } } } } else if (node.connectedTo.start.gid !== node.gid) { const bb = (node.connectedTo.start.parent as BreadBoard); // loop through joined nodes of breadboard for (const e in bb.joined) { if (bb.joined[e].gid !== node.connectedTo.start.gid) { // Run only if substring matches if (bb.joined[e].label.substring(1, bb.joined[e].label.length) === node.connectedTo.start.label.substring(1, node.connectedTo.start.label.length)) { const ascii = node.connectedTo.start.label.charCodeAt(0); const currAscii = bb.joined[e].label.charCodeAt(0); // add gid to VisitedNode this.visitedNodesv2.add(bb.joined[e].gid); // IF/ELSE: determine which part of breadboard is connected if (ascii >= 97 && ascii <= 101) { if (bb.joined[e].isConnected() && (currAscii >= 97 && currAscii <= 101)) { return this.getRecArduinov2(bb.joined[e], startedOn); } } else if (ascii >= 102 && ascii <= 106) { if (bb.joined[e].isConnected() && (currAscii >= 102 && currAscii <= 106)) { return this.getRecArduinov2(bb.joined[e], startedOn); } } else { if (bb.joined[e].isConnected() && (bb.joined[e].label === node.connectedTo.end.label)) { return this.getRecArduinov2(bb.joined[e], startedOn); } } } } } } } } ================================================ FILE: ArduinoFrontend/src/app/Libs/outputs/Display.ts ================================================ import { CircuitElement } from '../CircuitElement'; import { DataDisplayState, DataProcessingMode, BitState, Font8x5DisplayState, Font10x5DisplayState, FourBitState, EightBitState, WriteDataProcessingMode, ReadDataProcessingMode, RegisterState, DataRegisterState, InstructionRegisterState, ActiveAddress, RegisterType, DataMode, } from './LCD/LCDStates'; import { LCDCharacterPanel } from './LCD/LCDPanel'; import { DDRAM, CGROM, CGRAM, RAM } from './LCD/MemorySchema'; import { MathUtils } from '../MathUtils'; import { ArduinoUno } from './Arduino'; import { BoundingBox } from '../Geometry'; import { Point } from '../Point'; import { BreadBoard } from '../General'; /** * LCD16X2 Class */ export class LCD16X2 extends CircuitElement { /** * The Connected Arduino */ arduino: CircuitElement = null; /** * Variable to state if the LCD is connected properly or not. */ connected = true; /** * Map of pin name to Circuit Node */ pinNamedMap: any = {}; /** * Previous value at the `E` node */ previousEValue = 0; /** * Previous value at `V0` node */ previousV0Value = 0; isDisplayOn = false; isCursorOn = false; isCursorPositionCharBlinkOn = false; autoCursorShift = 0; autoDisplayShift = 0; /** * 2-D Array of 8-bit characters representing DDRAM of the LCD */ ddRam: DDRAM; /** * 3-D array of character font: * higher-bit -> lower-bit -> characterFont */ cgRom: CGROM; /** * 64-byte CGRAM */ cgRam: CGRAM; /** * Address of the DDRAM */ ddRamAddress: number; /** * Address of the CGRAM */ cgRamAddress: number; /** * Current Active address */ activeAddress: ActiveAddress; /** * Map from character panel index to character panel */ characterPanels: {[key: string]: LCDCharacterPanel} = {}; /** * Data processing mode of LCD: Read/Write */ dataProcessingMode: DataProcessingMode; /** * Write Data processing concrete object */ writeDataMode: WriteDataProcessingMode; /** * Read Data processing concrete object */ readDataMode: ReadDataProcessingMode; /** * Bit state of LCD: 4-bit/8-bit */ bitState: BitState; /** * Concrete 4-bit state */ fourBitState: FourBitState; /** * Concrete 8-bit state */ eightBitState: EightBitState; /** * Data display state of LCD: Font 10x5 vs 10x8 */ dataDisplayState: DataDisplayState; /** * Concrete data display state for 8x5 fonts */ font8x5DisplayState: Font8x5DisplayState; /** * Concrete data display state for 10x5 fonts */ font10x5DisplayState: Font10x5DisplayState; /** * Register state of the LCD */ registerState: RegisterState; /** * Data Register state's concrete class */ dataRegisterState: DataRegisterState; /** * Instruction register state's concrete class */ instructionRegisterState: InstructionRegisterState; /** * Start index (left-top) of the DDROM being displayed on the LCF */ displayStartIndex: [number, number] = [0, 0]; /** * End index (right-bottom) of the DDROM being displayed on the LCF */ displayEndIndex: [number, number]; /** * Busy flag of the lcd */ busyFlag = false; /** * LCD16X2 constructor * @param canvas Raphael Canvas (Paper) * @param x position x * @param y position y */ constructor(public canvas: any, x: number, y: number) { super('LCD16X2', x, y, 'LCD16X2.json', canvas); } /** * Function provides component details * @param keyName Unique Class name * @param id Component id * @param body body of property box * @param title Component title */ properties(): { keyName: string; id: number; body: HTMLElement; title: string; } { const body = document.createElement('div'); return { keyName: this.keyName, id: this.id, body, title: 'LCD Display 16x2' }; } /** * Returns the bounding box for the LCD */ getBoundingBox(): BoundingBox { const lcdImageElement = this.elements.items.find(el => el.type === 'image')[0]; const lcdBBox = lcdImageElement.getBBox(); lcdBBox.x += this.tx; lcdBBox.y += this.ty; return BoundingBox.loadFromRaphaelBbox(lcdBBox); } /** * Turns on/off the display * @param isDisplayOn true for switching on, false for off */ setDisplayOn(isDisplayOn: boolean) { this.isDisplayOn = isDisplayOn; } /** * Turns on/off the cursor * @param isCursorOn true for switching on, false for off */ setCursorOn(isCursorOn: boolean) { this.isCursorOn = isCursorOn; } /** * Sets cursor blink on/off * @param isCursorPositionCharBlinkOn true for switching on, false for off */ setCursorPositionCharBlink(isCursorPositionCharBlinkOn: boolean) { this.isCursorPositionCharBlinkOn = isCursorPositionCharBlinkOn; } /** * Sets address of the DDRAM * @param address new address for the DDRAM */ setDdRamAddress(address): void { this.ddRamAddress = address; } /** * Gets the voltage input at VCC node */ getVCC(): number { return this.pinNamedMap['VCC'].value; } /** * Gets the voltage input at GND node */ getGND(): number { return this.pinNamedMap['GND'].value; } /** * Gets the voltage input at V0 node */ getV0(): number { return this.pinNamedMap['V0'].value; } /** * Gets the current register type of the lcd */ getRegisterType(): RegisterType { return this.pinNamedMap['RS'].value & 1; } /** * Gets the data mode of the lcd */ getDataMode(): DataMode { return this.pinNamedMap['RW'].value & 1; } /** * Updates the registerState to sync it with the value at node 'RS' */ private loadRegisterState(): void { const registerType = this.getRegisterType(); this.registerState = registerType === RegisterType.Data ? this.dataRegisterState : this.instructionRegisterState; } /** * Updates the dataProcessingMode to sync it with the value at node 'RW' */ private loadDataMode(): void { const dataMode = this.getDataMode(); this.dataProcessingMode = dataMode === DataMode.Read ? this.readDataMode : this.writeDataMode; } private setBusyFlag(value: boolean): void { this.busyFlag = value; } /** * Gets the active ram and its address * An LCD can have either CGRAM or DDRAM active while reading/writing the data. */ getActiveRamAndAddress(): [RAM, number] { if (this.activeAddress === ActiveAddress.CGRAM) { return [this.cgRam, this.cgRamAddress]; } return [this.ddRam, this.ddRamAddress]; } /** * Gets the chacracter panel at the current DDRAM address */ getCurrentCharacterPanel() { return this.getCharacterPanel(this.ddRamAddress); } /** * Moves the address of the CGRAM * @param distance distance by which to move the address */ moveCgRamAddress(distance: number) { this.cgRamAddress += distance; } /** * Moves cursor by one step in either left/right direction * @param direction direction of the movement, 1 for right, -1 for left */ moveCursor(direction: 1 | -1) { let newDdRamAddress = this.ddRamAddress + direction; // applying max value condition newDdRamAddress = Math.min(0x67, newDdRamAddress); // applying min value condition newDdRamAddress = Math.max(0x00, newDdRamAddress); // applying [0x27, 0x40] condition if (newDdRamAddress > 0x27 && newDdRamAddress < 0x40) { newDdRamAddress = direction > 0 ? 0x40 : 0x27; } this.setDdRamAddress(newDdRamAddress); } /** * Checks if a character panel with displayIndex `index` is in sight of the LCD or not * @param index index to check */ private isInSight(index: [number, number]) { return MathUtils.isPointBetween(index, this.displayStartIndex, this.displayEndIndex); } /** * Shifts the display with `numSteps` steps * @param numSteps number of steps to move the display with */ private shiftDisplay(numSteps: number) { const stepSize = this.getInterSpacingHorizontal(); for (const characterPanel of Object.values(this.characterPanels)) { const oldColumnIndex = characterPanel.displayIndex[1]; const newColumnIndex = MathUtils.modulo(oldColumnIndex - numSteps, this.ddRam.N_COLUMN); characterPanel.displayIndex[1] = newColumnIndex; characterPanel.hidden = !this.isInSight(characterPanel.displayIndex); characterPanel.shift((newColumnIndex - oldColumnIndex) * stepSize); } } /** * Scrolls the display to one step left */ scrollDisplayLeft() { this.shiftDisplay(-1); } /** * Scrolls the display to one step right */ scrollDisplayRight() { this.shiftDisplay(1); } /** * Gets the character panel at the given ddram address * @param address ddRam address */ getCharacterPanel(address) { // converting address to [i, j] const index = this.ddRam.convertAddressToIndex(address); return this.characterPanels[`${index[0]}:${index[1]}`]; } /** * Clears the display of the lcd */ clearDisplay() { Object.values(this.characterPanels).forEach((panel: LCDCharacterPanel) => panel.clear()); } /** * event listener for node 'V0 * @param newValue new value at node 'V0' * @param prevValue previous value at node 'V0' */ v0Listener(newValue, prevValue) { if (prevValue !== newValue) { let newContrast = newValue / 500 * 100; // bounding the value between 0 and 100 newContrast = Math.min(100, newContrast); newContrast = Math.max(0, newContrast); Object.values(this.characterPanels).forEach(panel => panel.setContrast(newContrast)); } } /** * Checks if power supply is enough */ isPowerSupplyEnough() { const vcc = this.getVCC(); if (vcc < 3.3 || vcc > 5) { return false; } return true; } /** * event listener for node `E` * @param newValue new value at the node `E` */ eSignalListener(newValue) { if (!this.isPowerSupplyEnough()) { console.log('Not enough power supply.'); return; } this.setBusyFlag(true); const prevValue = this.previousEValue; // identifying high-low pulse if (prevValue > 0 && newValue === 0) { this.loadRegisterState(); this.loadDataMode(); this.dataProcessingMode.processData(); this.refreshLCD(); } this.previousEValue = newValue; this.setBusyFlag(false); } /** * Get set of panels which are in the view of the LCD */ getDisplayablePanels(): Set { const filteredPanels = Object.values(this.characterPanels) .filter(panel => MathUtils.isPointBetween(panel.displayIndex, this.displayStartIndex, this.displayEndIndex )); return new Set(filteredPanels); } /** * Refreshs LCD to take in account recent changes */ refreshLCD() { const displayablePanels = this.getDisplayablePanels(); for (const panel of Object.values(this.characterPanels)) { const show = displayablePanels.has(panel); const address = this.ddRam.convertIndexToAddress(panel.index); // turning cursor on and off panel.changeCursorDisplay(false); panel.setBlinking(false); if (this.isCursorOn) { if (this.ddRamAddress === address) { if (this.isCursorPositionCharBlinkOn) { panel.setBlinking(true); } panel.changeCursorDisplay(true); } } // refreshing canvas of all the pixels panel.pixels.forEach(pixelRow => pixelRow.forEach(pixel => { if (pixel.canvas) { pixel.refresh(); } else { pixel.canvas = this.DrawElement(this.canvas, [pixel.getCanvasRepr()])[0]; pixel.canvas.transform(`t${this.tx},${this.ty}`); if (!show) { pixel.hide(); } } })); } } /** * @param bitState new bit state */ setBitState(bitState: BitState) { this.bitState = bitState; } /** * @param dataDisplayState new data display state */ setDataDisplayState(dataDisplayState: DataDisplayState, numLines?: number) { this.dataDisplayState = dataDisplayState; if (numLines) { this.dataDisplayState.setNLines(numLines); } this.createDdRam(); this.createCgRom(); this.generateCharacterPanels(); } /** * @param dataProcessingMode new data processing mode */ setDataProcessingMode(dataProcessingMode: DataProcessingMode) { this.dataProcessingMode = dataProcessingMode; } /** * Returns the horizontal spacing between two consecutive character panels */ getInterSpacingHorizontal() { return (this.data.gridColumns * this.data.gridWidth) + this.data.interSpacing; } /** * Returns the vertical spacing between two consecutive character panels */ getInterSpacingVertical() { return (this.data.gridRows * this.data.gridWidth) + (this.data.interSpacing * 1.5); } /** * Resets the lcd by initializing all the variables */ reset() { this.isDisplayOn = false; this.isCursorOn = false; this.isCursorPositionCharBlinkOn = false; // Initialising data display state this.font8x5DisplayState = new Font8x5DisplayState(this, 2); this.font10x5DisplayState = new Font10x5DisplayState(this, 1); this.dataDisplayState = this.font8x5DisplayState; // Initialising data processing state this.readDataMode = new ReadDataProcessingMode(this); this.writeDataMode = new WriteDataProcessingMode(this); this.dataProcessingMode = this.readDataMode; // Initialising bit mode state this.fourBitState = new FourBitState(this); this.eightBitState = new EightBitState(this); this.bitState = this.eightBitState; // Initialising register state this.dataRegisterState = new DataRegisterState(this); this.instructionRegisterState = new InstructionRegisterState(this); this.registerState = this.instructionRegisterState; // Setting display start and end indices this.displayStartIndex = [0, 0]; this.displayEndIndex = [this.data.rows, this.data.columns]; // Initialising CGROM, DDRAM, and CGRAM this.createCgRom(); this.createDdRam(); this.setDdRamAddress(0x00); this.cgRam = new CGRAM(); this.clearDisplay(); this.setDisplayToHome(); this.refreshLCD(); } /** * Sets the display to home position */ setDisplayToHome() { // shifting panels to their original position const panel00 = this.characterPanels['0:0']; if (!panel00) { return; } const offset = panel00.displayIndex[1] - panel00.index[1]; this.shiftDisplay(offset); } /** * Generates the DDRAM for the LCD */ createDdRam() { this.ddRam = DDRAM.createDDRAMForLCD(this.dataDisplayState.getRows()); } /** * Generates the CGROM for the LCD */ createCgRom() { this.cgRom = new CGROM(this.dataDisplayState.getFontSize()); } /** * Generates character panels inside the lcd */ generateCharacterPanels() { this.destroyCharacterPanels(); const posX = this.data.startX; const posY = this.data.startY; // Getting the number of pixel/panel rows, columns from the active data display state const gridRows = this.dataDisplayState.getPixelRows(); const gridColumns = this.dataDisplayState.getPixelColumns(); const rows = this.dataDisplayState.getRows(); const columns = this.dataDisplayState.getColumns(); for (let k = 0; k < this.ddRam.N_ROW; k++) { // Rows: 1 for (let l = 0; l < this.ddRam.N_COLUMN; l++) { // Columns: 16 (Characters) const panelPosX = posX + l * this.getInterSpacingHorizontal(); const panelPosY = posY + k * this.getInterSpacingVertical(); const hidden = k >= rows || l >= columns; const characterPanel = new LCDCharacterPanel([k, l], gridRows, gridColumns, panelPosX, panelPosY, this.x, this.y, this.data.gridHeight, this.data.gridWidth, this.data.barColor, this.data.barGlowColor, this.data.intraSpacing, [k, l], hidden, 100); this.characterPanels[characterPanel.index.join(':')] = characterPanel; } } // Row ends } /** * destroys all the character panels */ destroyCharacterPanels() { Object.values(this.characterPanels).forEach(panel => panel.destroy()); } init() { /** * Draws lcd grid (16x2) each containing a block of 8 rows x 5 columns */ // Resets the lcd's properties this.reset(); // Refreshes the LCD this.refreshLCD(); for (const node of this.nodes) { this.pinNamedMap[node.label] = node; } // adding listeners to E listener this.pinNamedMap['E'].addValueListener(this.eSignalListener.bind(this)); // this.pinNamedMap['V0'].addValueListener(this.v0Listener.bind(this)); } /** Simulation Logic */ logic(_, node) { // console.log(node.label, node.value); } /** * Called on Start Simulation */ initSimulation(): void { // Generates the character panels this.generateCharacterPanels(); // Get the V0 pin let connectedPin: Point = null; const v0Pin = this.nodes[2]; if (!v0Pin.connectedTo) { window['showToast']('V0 pin of the LCD is not connected to power source.'); return; } const v0wire = v0Pin.connectedTo; connectedPin = v0wire.start.parent === this ? v0wire.end : v0wire.start; // finding the arduino connected to the LCD to start PWM if (connectedPin.parent.keyName === 'ArduinoUno') { this.arduino = connectedPin.parent; } else if (connectedPin.parent.keyName === 'BreadBoard') { const breadboard = connectedPin.parent as BreadBoard; const connectedRow = connectedPin.label.charCodeAt(0); const isConnectedRowInFirstBlock = connectedRow <= 101; // checking for all the nodes with the same x-coordinate for (const neighbor of breadboard.sameXNodes[connectedPin.x]) { const neighborRow = neighbor.label.charCodeAt(0); const isSameBlock = neighborRow <= 101 === isConnectedRowInFirstBlock; if (neighbor.y !== connectedPin.y && isSameBlock) { if (neighbor.connectedTo) { let arduinoPin = null; if (neighbor.connectedTo.start.parent.keyName === 'ArduinoUno') { arduinoPin = neighbor.connectedTo.start; } else if (neighbor.connectedTo.end.parent.keyName === 'ArduinoUno') { arduinoPin = neighbor.connectedTo.end; } if (arduinoPin) { this.arduino = arduinoPin.parent; connectedPin = arduinoPin; this.connected = true; break; } } } } } // Add PWM event on arduino (this.arduino as ArduinoUno).addPWM(connectedPin, this.v0Listener.bind(this)); } /** * Called on Stop Simulation */ closeSimulation(): void { // this.elements.remove(); this.arduino = null; this.reset(); this.destroyCharacterPanels(); } } /** * SevenSegment Class */ export class SevenSegment extends CircuitElement { /** * The Seven Segment Bar Color */ static barColor: string; /** * The Seven Segment Bar glow color */ static barGlowColor: string; /** * The Bar mapping */ static mapping: number[] = []; /** * Stores list of Raphael Glow elements */ glows = []; /** * Map of Pin name to Circuit Node */ pinNamedMap: any = {}; /** * SevenSegment constructor * @param canvas Raphael Canvas (Paper) * @param x position x * @param y position y */ constructor(public canvas: any, x: any, y: any) { super('SevenSegment', x, y, 'SevenSegment.json', canvas); } /** init is called when the component is completely drawn to the canvas */ init() { if (SevenSegment.mapping.length === 0) { SevenSegment.mapping = this.data.mapping; SevenSegment.barColor = this.data.barColor; SevenSegment.barGlowColor = this.data.barGlowColor; } for (const value of SevenSegment.mapping) { this.elements[value].attr({ fill: SevenSegment.barColor }); this.glows.push(null); } // Remove From memory this.data.mapping = null; this.data.barColor = null; this.data.barGlowColor = null; this.data = null; // let x = 0; for (const node of this.nodes) { // console.log([x++, node.label]); if (node.label !== 'COMMON') { this.pinNamedMap[node.label] = node; node.addValueListener((v) => this.logic(v)); } } } /** Simulation Logic */ logic(_) { // console.log(k) let byte = 0; // create a mapping for node label to node byte |= (this.pinNamedMap['a'].value > 0) ? 1 : 0; byte |= (this.pinNamedMap['b'].value > 0) ? 2 : 0; byte |= (this.pinNamedMap['C'].value > 0) ? 4 : 0; byte |= (this.pinNamedMap['d'].value > 0) ? 8 : 0; byte |= (this.pinNamedMap['e'].value > 0) ? 16 : 0; byte |= (this.pinNamedMap['f'].value > 0) ? 32 : 0; byte |= (this.pinNamedMap['g'].value > 0) ? 64 : 0; byte |= (this.pinNamedMap['DP'].value > 0) ? 128 : 0; this.animate(byte); } /** animation caller when start simulation is pressed */ animate(value: number) { value = value & 0xFF; for (let i = 0; i < 8; ++i) { const x = this.elements[SevenSegment.mapping[i]]; if (this.glows[i]) { this.glows[i].remove(); this.glows[i] = null; } if ((value >> i) & 1) { x.attr({ fill: SevenSegment.barGlowColor }); this.glows[i] = x.glow({ color: SevenSegment.barGlowColor, width: 2 }); } else { x.attr({ fill: SevenSegment.barColor }); } } } /** * Function provides component details * @param keyName Unique Class name * @param id Component id * @param body body of property box * @param title Component title */ properties(): { keyName: string; id: number; body: HTMLElement; title: string; } { const body = document.createElement('div'); return { keyName: this.keyName, id: this.id, body, title: 'Seven Segment Display' }; } /** * Called on Start Simulation */ initSimulation(): void { } /** Function removes all animations */ closeSimulation(): void { this.animate(0); } } ================================================ FILE: ArduinoFrontend/src/app/Libs/outputs/LCD/LCDPanel.spec.ts ================================================ // import { LCDPixel } from './LCDPanel'; // import { LCD16X2 } from '../Display'; // declare var Raphael; // describe('LCDPanel', () => { // let lcdPixel: LCDPixel; // let lcd: LCD16X2; // let canvas: any; // beforeEach(() => { // canvas = Raphael('holder', '100%', '100%'); // lcd = new LCD16X2(window['canvas'].set(), 300, 350); // lcdPixel = new LCDPixel([5, 5], [6, 6], 100, 100, 300, 350, 5, 5, '#000', '#FFF'); // }); // it('shifting pixel by 2 and hiding it', () => { // lcdPixel.shift(2, true); // expect(lcdPixel.canvas.x).toBe(100 + 300 + 5); // expect(lcdPixel.canvas.y).toBe(6); // expect(this.posX).toBe(7); // expect(lcdPixel.hidden).toBe(true); // }); // it('shifting pixel by 2 and not hiding it', () => { // lcdPixel.shift(2, false); // expect(lcdPixel.canvas.x).toBe(400); // expect(lcdPixel.canvas.y).toBe(6); // expect(lcdPixel.hidden).toBe(false); // }); // }); ================================================ FILE: ArduinoFrontend/src/app/Libs/outputs/LCD/LCDPanel.ts ================================================ import { LCDUtils } from './LCDUtils'; import chroma from 'chroma-js'; import LRU from 'lru-cache'; import { BoundingBox } from '../../Geometry'; const COLOR_SCALING_MAP = new LRU({ max: 5000, length(n, key) { return n * 2 + key.length; }, dispose(key, n) { n.close(); }, maxAge: 1000 * 60 * 60 }); /** * LCDPixel: Class prototype for the pixels inside a LCD Character panel */ export class LCDPixel { /** * Index of the parent grid */ parentIndex: [number, number]; /** * Self-index inside the parent grid */ index: [number, number]; /** * x-coordinate of the pixel with respect to the lcd */ posX: number; /** * y-coordinate of the pixel with respect to the lcd */ posY: number; /** * width of the pixel */ width: number; /** * height of the pixel */ height: number; /** * color of the pixel when it is switched off */ dimColor: string; /** * color of the pixel when it is switched on */ glowColor: string; /** * switch status of the pixel: true when on, false when off */ isOn: boolean; /** * brightness i.e., opacity of the pixel */ brightness: number; /** * Raphael canvas component of the pixel */ canvas: any; /** * Boolean flag to store if any changes are pending to be rendered. * Pending changes are rendered upon calling the `refresh` method. */ changesPending: boolean; /** * x-coordinate of the lcd of which the pixel is a part of */ lcdX: number; /** * y-coordinate of the lcd of which the pixel is a part of */ lcdY: number; /** * Show/hide status of the pixel */ hidden: boolean; /** * Blink status of the pixel * true when the pixel is hidden while blinking * false when the pixel is shown while blinking */ blinkHidden = false; /** * Contrast of the pixel */ contrast = 100; constructor(parentIndex: [number, number], index: [number, number], posX: number, posY: number, lcdX: number, lcdY: number, width: number, height: number, dimColor: string, glowColor: string) { this.parentIndex = parentIndex; this.index = index; this.posX = posX; this.posY = posY; this.lcdX = lcdX; this.lcdY = lcdY; this.width = width; this.height = height; this.dimColor = dimColor; this.glowColor = glowColor; this.isOn = false; this.brightness = 100; this.canvas = null; this.changesPending = false; this.hidden = false; } /** * @param value color value */ fillColor(color) { if (this.canvas) { this.canvas.attr({ fill: color }); } } setContrast(value) { const currentColor = this.getColor(); this.contrast = value; const newColor = this.getColor(); if (newColor !== currentColor) { this.fillColor(newColor); } } /** * @param distance distance by which to shift horizontally * @param hidden new state of the pixel */ shift(distance, hidden) { this.posX += distance; // if canvas is not set yet, return if (!this.canvas) { return; } this.canvas.attr({ x: this.posX + this.lcdX }); // if the state changes, then take it in effect if (this.hidden !== hidden) { if (hidden) { this.hide(); } else { this.show(); } } } /** * Switch the pixel to on/off * @param value true to switch on, false to switch off */ switch(value) { const prevValue = this.isOn; this.isOn = parseInt(value, 2) && true; if (prevValue !== this.isOn) { this.changesPending = true; } } destroy() { if (this.canvas) { this.canvas.remove(); } } /** * get the raw color of the pixel */ getRawColor() { return this.isOn ? this.glowColor : this.dimColor; } /** * gets contrast-adjust color */ getColor(rawColor?: string) { rawColor = rawColor || this.getRawColor(); let newColorScale = COLOR_SCALING_MAP.get(rawColor); if (!newColorScale) { newColorScale = chroma.scale([this.dimColor, rawColor]); COLOR_SCALING_MAP.set(rawColor, newColorScale); } const newColor = newColorScale(this.contrast / 100).hex(); return newColor; } /** * get the name of the pixel */ getName() { return `G:${this.parentIndex[0]}:${this.parentIndex[1]}:${this.index[0]}:${this.index[1]}`; } /** * get the canvas representation of the pixel */ getCanvasRepr() { return { name: this.getName(), type: 'rectangle', width: this.width, height: this.height, x: this.posX, y: this.posY, fill: this.getColor(), }; } /** * shows the pixel */ show() { this.hidden = false; this.canvas.show(); } /** * hides the pixel */ hide() { this.hidden = true; this.canvas.hide(); } /** * turn on blinking */ blinkOn() { this.blinkHidden = true; this.canvas.attr({ fill: this.getColor(this.glowColor) }); } /** * turn off blinking */ blinkOff() { if (this.blinkHidden && this.canvas) { this.canvas.attr({ fill: this.getColor() }); this.blinkHidden = false; } } /** * Refreshes the pixel if changes are pending, else does nothing */ refresh() { if (this.changesPending && this.canvas) { this.canvas.attr({ x: this.posX + this.lcdX, y: this.posY + this.lcdY, fill: this.getColor(), }); this.changesPending = false; } } } export class LCDCharacterPanel { /** * number of rows of children pixels */ N_ROW: number; /** * number of columns of children pixels */ N_COLUMN: number; /** * Position index of the character panel within the lcd */ index: [number, number]; /** * Array of the chldren pixels */ pixels: LCDPixel[][]; /** * x-coordinate of the character panel wrt to the lcd */ posX: number; /** * y-coordinate of the character panel wrt to the lcd */ posY: number; /** * x-coordinate of the lcd */ lcdX: number; /** * y-coordinate of the lcd */ lcdY: number; /** * width of the children pixels */ pixelWidth: number; /** * height of the children pixels */ pixelHeight: number; /** * color of the children pixels when they're turned off */ barColor: string; /** * color of the children pixels when they're turned on */ barGlowColor: string; /** * Horizontal/vertical spacing between the adjacent children pixels */ intraSpacing: number; /** * Display index of the character panel on the lcd */ displayIndex: [number, number]; /** * Is the character panel out of view on the lcd */ hidden: boolean; /** * variable to store the interval function during the blinking */ blinkFunction: any; /** * does the panel contain the cursor? */ containsCursor: boolean; /** * contrast of the lcd */ contrast = 100; /** * Constructor * @param index index of the character panel * @param N_ROW number of rows of pixels * @param N_COLUMN number of columns of pixels * @param posX x-coordinate of the character panel wrt to the lcd * @param posY y-coordinate of the character panel wrt to the lcd * @param lcdX x-coordinate of the lcd * @param lcdY y-coordinate of the lcd * @param pixelWidth width of the child pixel * @param pixelHeight height of the child pixel * @param barColor color of the children pixels when they're off * @param barGlowColor color of the children pixels when they're on * @param intraSpacing Horizontal/vertical space between each adjacent pixel * @param displayIndex Display index of the character panel * @param hidden Is the character panel hidden? * @param contrast contrast of the lcd */ constructor(index: [number, number], N_ROW: number, N_COLUMN: number, posX: number, posY: number, lcdX: number, lcdY: number, pixelWidth: number, pixelHeight: number, barColor: string, barGlowColor: string, intraSpacing: number, displayIndex: [number, number], hidden: boolean, contrast: number) { this.index = index; this.N_ROW = N_ROW; this.N_COLUMN = N_COLUMN; this.posX = posX; this.posY = posY; this.lcdX = lcdX; this.lcdY = lcdY; this.pixelHeight = pixelHeight; this.pixelWidth = pixelWidth; this.barColor = barColor; this.barGlowColor = barGlowColor; this.intraSpacing = intraSpacing; this.displayIndex = displayIndex; this.hidden = hidden; this.contrast = contrast; this.initialiseLCDPixels(); } /** * changes the contrast of the character panel * @param value contrast value between 0 and 100 */ setContrast(value) { this.pixels.forEach(pixelRow => pixelRow.forEach(pixel => { pixel.setContrast(value); })); } /** * Shifts the panel by distance `distance` * @param distance distance by which to move the panel */ shift(distance: number) { this.posX += distance; this.shiftPixels(distance); } getBoundingBox(): BoundingBox { const width = (this.pixelWidth + this.intraSpacing) * this.N_ROW - this.intraSpacing; const height = (this.pixelHeight + this.intraSpacing) * this.N_COLUMN - this.intraSpacing; return new BoundingBox(this.posX, this.posY, width, height); } /** * Shift the children pixels by distance `distance` * @param distance distance by which to move the children pixels */ private shiftPixels(distance: number) { for (let i = 0; i < this.N_ROW; i++) { for (let j = 0; j < this.N_COLUMN; j++) { this.pixels[i][j].shift(distance, this.hidden); } } } /** * Destroys the canvas of all the pixels inside the panel */ destroy() { this.pixels.forEach(pixelRow => pixelRow.forEach(pixel => pixel.destroy())); } /** * Initialises all the contained pixels */ initialiseLCDPixels() { let tempRowsX: number; let posX = this.posX; let posY = this.posY; this.pixels = [[]]; for (let i = 0; i < this.N_ROW; i++) { tempRowsX = posX; this.pixels[i] = []; for (let j = 0; j < this.N_COLUMN; j++) { this.pixels[i][j] = new LCDPixel( this.index, [i, j], posX, posY, this.lcdX, this.lcdY, this.pixelWidth, this.pixelHeight, this.barColor, this.barGlowColor ); posX = posX + this.pixelWidth + this.intraSpacing; } posX = tempRowsX; posY = posY + this.pixelHeight + this.intraSpacing; } } /** * Clears the panel by turning off all the pixels */ clear() { this.changeCursorDisplay(false); this.drawCharacter(LCDUtils.getBlankDisplayBytes()); this.pixels.forEach(pixelRow => pixelRow.forEach(pixel => pixel.refresh())); clearInterval(this.blinkFunction); } /** * Prints the bytes on the character panel * @param characterDisplayBytes array of bytes to display on the panel */ drawCharacter(characterDisplayBytes: number[][]) { let byte = null; for (let i = 0; i < this.N_ROW - 1; i++) { for (let j = 0; j < this.N_COLUMN; j++) { try { byte = characterDisplayBytes[i][j]; } catch (e) { // if byte is absent for some reason, switch the pixel off byte = 0; } this.pixels[i][j].switch(byte); } } } /** * Adds/remove the cursor display on the panel * @param show true to add the cursor, false to remove it */ changeCursorDisplay(show: boolean) { if (this.containsCursor === show) { return; } for (let j = 0; j < this.N_COLUMN; j++) { this.pixels[this.N_ROW - 1][j].switch(show ? 1 : 0); } if (!show) { clearInterval(this.blinkFunction); } this.containsCursor = show; } /** * Starts blinking the panel */ private blink() { this.blinkFunction = setInterval(() => { this.pixels.forEach(pixelRow => pixelRow.forEach(pixel => { if (pixel.blinkHidden) { pixel.blinkOff(); } else { pixel.blinkOn(); } })); }, 600); } /** * Turns on/off blinking on the panel * @param value true to turn on, false to turn off */ setBlinking(value: boolean) { if (value) { this.blink(); } else if (this.blinkFunction) { clearInterval(this.blinkFunction); this.blinkFunction = null; this.pixels.forEach(pixelRow => pixelRow.forEach(pixel => pixel.blinkOff())); } } /** * Returns the Rafael canvas representation of the panel */ getCanvasRepr(): any[] { const canvasGrid = []; for (const rowPixels of this.pixels) { for (const pixel of rowPixels) { canvasGrid.push(pixel.getCanvasRepr()); } } return canvasGrid; } } ================================================ FILE: ArduinoFrontend/src/app/Libs/outputs/LCD/LCDStates.ts ================================================ import { LCDCharacterPanel } from './LCDPanel'; import { LCD16X2 } from '../Display'; import { InstructionType, FontSize } from './LCDUtils'; export enum ActiveAddress { CGRAM = 0, DDRAM = 1 } /** * Register type enum for the LCD */ export enum RegisterType { Instruction = 0, Data = 1 } /** * DataMode type enum for the LCD */ export enum DataMode { Write = 0, Read = 1 } /** * Data processor interface */ export interface DataProcessingMode { processData: () => void; } /** * Data processor for write mode */ export class WriteDataProcessingMode implements DataProcessingMode { lcd: LCD16X2; processData() { this.lcd.registerState.processData(); } constructor(lcd: LCD16X2) { this.lcd = lcd; } } /** * Data processor for read mode */ export class ReadDataProcessingMode implements DataProcessingMode { lcd: LCD16X2; processData() { // if (this.lcd.getRegisterType() === RegisterType) console.log('Read data processing.'); } constructor(lcd: LCD16X2) { this.lcd = lcd; } } /** * Bit state interface */ export interface BitState { /** * returns [higherBits, lowerBits] */ readData: () => [number, number]; writeData: () => void; isWaitingForMoreData: () => boolean; } /** * 4-bit state */ export class FourBitState implements BitState { constructor(lcd: LCD16X2) { this.lcd = lcd; this.waitingForData = false; } /** * LCD object */ lcd: LCD16X2; /** * is waiting for more data to come? */ waitingForData: boolean; /** * temporary variable to store the higher bits read before the data-waiting state */ higherBits = -1; writeData: () => void; /** * Reads the data from the databuses */ readData(): [number, number] { let data = 0; for (let i = 7; i >= 4; i--) { data |= (this.lcd.pinNamedMap[`DB${i}`].value > 0 ? 1 : 0); data = data << 1; } data = data >> 1; if (this.waitingForData) { // if the state was earlier waiting for more data, // return the complete data now this.waitingForData = false; return [this.higherBits, data]; } // if the state was not in data-waiting state, // now since it has received first set of 4 bits // move it to the waiting state and store the higher bits this.higherBits = data; this.waitingForData = true; return [-1, -1]; } /** * Returns if the state is waiting for more data */ isWaitingForMoreData() { return this.waitingForData; } } /** * 8-bit state */ export class EightBitState implements BitState { constructor(lcd: LCD16X2) { this.lcd = lcd; } /** * LCD object */ lcd: LCD16X2; writeData: () => void; /** * Reads the data from the databuses */ readData(): [number, number] { let data = 0; for (let i = 7; i >= 0; i--) { data |= (this.lcd.pinNamedMap[`DB${i}`].value > 0 ? 1 : 0); data = data << 1; } data = data >> 1; // returns "..." parsed in binary format return [(data >> 4) & 0b1111, data & 0b1111]; } /** * Returns if the state is waiting for more data */ isWaitingForMoreData() { // 8-bit mode never goes in to data-waiting mode, // hence returning false return false; } } /** * Data display interface */ export interface DataDisplayState { displayData: (characterDisplayBytes: number[][]) => void; getFontSize: () => FontSize; getPixelRows: () => number; getPixelColumns: () => number; getRows: () => number; getColumns: () => number; setNLines: (nLines: number) => void; } /** * Font8x5 display class */ export class Font8x5DisplayState implements DataDisplayState { /** * Map of character panel's name to the character panel */ characterPanels: any = {}; /** * LCD object */ lcd: LCD16X2; /** * Number of lines in the lcd */ nLines: number; constructor(lcd: LCD16X2, nLines: number) { this.lcd = lcd; this.nLines = nLines; } // TODO: To implement the following 4 functions for different size LCDs // Currently it's only for 16x2 LCD /** * Returns the number of pixels' rows inside the character panel */ getPixelRows() { return 8; } /** * Returns the number of pixels' columns inside the character panel */ getPixelColumns() { return 5; } /** * Returns the number of character panel's rows inside the lcd */ getRows() { return this.nLines; } /** * Returns the number of character panel's columns inside the lcd */ getColumns() { return 16; } /** * Sets the number of lines on the lcd * @param nLines number of lines */ setNLines(nLines: number) { if (this.nLines !== nLines) { this.nLines = nLines; } } /** * Returns font size of the state */ getFontSize() { return FontSize._8x5; } /** * Displays the input data on the panel located at current ddram address of the lcd * @param characterDisplayBytes array of bytes to be displayed on the current panel */ displayData(characterDisplayBytes: number[][]) { if (!this.lcd.isDisplayOn) { return; } const currentPanel = this.lcd.getCurrentCharacterPanel(); currentPanel.drawCharacter(characterDisplayBytes); } } /** * Font10x5 display class */ export class Font10x5DisplayState implements DataDisplayState { /** * Map of character panel's name to the character panel */ characterPanels: any = {}; /** * LCD object */ lcd: LCD16X2; /** * Number of lines in the lcd */ nLines: number; constructor(lcd: LCD16X2, nLines: number) { this.lcd = lcd; this.nLines = nLines; } setNLines(nLines: number) { if (this.nLines !== nLines) { this.nLines = nLines; } } // TODO: To implement the following 4 functions for different size LCDS // Currently it's only for 16x2 LCD /** * Returns the number of pixels' rows inside the character panel */ getPixelRows() { return 10; } /** * Returns the number of pixels' columns inside the character panel */ getPixelColumns() { return 5; } /** * Returns the number of character panel's rows inside the lcd */ getRows() { return this.nLines; } /** * Returns the number of character panel's columns inside the lcd */ getColumns() { return 16; } /** * Returns font size of the state */ getFontSize() { return FontSize._10x5; } /** * Displays the input data on the panel located at current ddram address of the lcd * @param characterDisplayBytes array of bytes to be displayed on the current panel */ displayData(characterDisplayBytes: number[][]) { if (!this.lcd.isDisplayOn) { return; } const currentPanel = this.lcd.getCurrentCharacterPanel(); currentPanel.drawCharacter(characterDisplayBytes); } } export interface RegisterState { lcd: LCD16X2; processData: () => void; } export class DataRegisterState implements RegisterState { lcd: LCD16X2; constructor(lcd: LCD16X2) { this.lcd = lcd; } processData() { const [higherBits, lowerBits] = this.lcd.bitState.readData(); const waitingForData = this.lcd.bitState.isWaitingForMoreData(); if (waitingForData) { return; } const characterBits = (higherBits << 4) | lowerBits; const [activeRam, address] = this.lcd.getActiveRamAndAddress(); activeRam.write(address, characterBits); if (this.lcd.activeAddress === ActiveAddress.DDRAM) { let characterDisplayBytes = []; // when writing to DDRAM if (higherBits === 0) { for (let i = 0; i < 8; i++) { characterDisplayBytes.push(this.lcd.cgRam.read(0x40 + (lowerBits * 8) + i)); } } else { characterDisplayBytes = this.lcd.cgRom.readROM(higherBits, lowerBits); } this.lcd.dataDisplayState.displayData(characterDisplayBytes); if (this.lcd.autoCursorShift) { // move cursor to right this.lcd.moveCursor(1); if (this.lcd.autoDisplayShift) { this.lcd.scrollDisplayRight(); } } else { // move cursor to left this.lcd.moveCursor(-1); if (this.lcd.autoDisplayShift) { this.lcd.scrollDisplayLeft(); } } } if (this.lcd.autoCursorShift) { this.lcd.moveCgRamAddress(1); } else { this.lcd.moveCgRamAddress(-1); } } } export class InstructionRegisterState implements RegisterState { lcd: LCD16X2; static getInstructionType(databus: number): InstructionType { const dataBusBinary = Number(databus).toString(2); let firstOnePositionFromLeft = -1; for (let i = 0; i < dataBusBinary.length; i++) { if (dataBusBinary[i] === '1') { firstOnePositionFromLeft = i; break; } } const firstOnePositionFromRight = dataBusBinary.length - firstOnePositionFromLeft; return firstOnePositionFromRight; } clearDisplay() { this.lcd.clearDisplay(); } setCursorHome() { this.lcd.setDdRamAddress(0x00); this.lcd.setDisplayToHome(); } setEntryMode(data) { // data: [0 0 0 0 0 1 I/D S] // Reading I/D const iSlashD = (data >> 1) & 1; if (iSlashD) { this.lcd.autoCursorShift = 1; } else { this.lcd.autoCursorShift = -1; } // Reading S const S = data & 1; if (S) { this.lcd.autoDisplayShift = 1; } } displayOnOff(data) { const displayOnOff = (data >> 2) & 1; this.lcd.setDisplayOn(displayOnOff && true); const cursorOnOff = (data >> 1) & 1; this.lcd.setCursorOn(cursorOnOff && true); const blinkCursorPositionCharacter = data & 1; this.lcd.setCursorPositionCharBlink(blinkCursorPositionCharacter && true); } shiftCursorAndDisplay(data) { // TODO: display shift // data: [0 0 0 1 S/C R/L * * ] const rSlashL = (data >> 2) & 1; const sSlashC = (data >> 3) & 1; if (!(rSlashL & 1)) { this.lcd.moveCursor(-1); if (sSlashC & 1) { this.lcd.scrollDisplayLeft(); } } else if (rSlashL & 1) { this.lcd.moveCursor(1); if (sSlashC & 1) { this.lcd.scrollDisplayRight(); } } } setFunction(data) { // 0 0 0 0 1 DL N F * * const dataLength = (data >> 4) & 1; if (dataLength & 1) { this.lcd.setBitState(this.lcd.eightBitState); } else { this.lcd.setBitState(this.lcd.fourBitState); } const numLines = (data >> 3) & 1; const characterFont = (data >> 2) & 1; if (numLines & 1) { // N = 1 => 2 lines this.lcd.setDataDisplayState(this.lcd.font8x5DisplayState, 2); } else { // N = 0 => 1 line if (characterFont & 1) { // F = 1 => 10x5 this.lcd.setDataDisplayState(this.lcd.font10x5DisplayState, 1); } else { // F = 0 => 8x5 this.lcd.setDataDisplayState(this.lcd.font8x5DisplayState, 1); } } } setCGRAMAddress(data) { this.lcd.cgRamAddress = 0x40 + (data & 0x3F); this.lcd.activeAddress = ActiveAddress.CGRAM; } setDDRAMAddress(data) { this.lcd.setDdRamAddress(data & 0x7F); this.lcd.activeAddress = ActiveAddress.DDRAM; } processData() { const [higherBits, lowerBits] = this.lcd.bitState.readData(); const waitingForData = this.lcd.bitState.isWaitingForMoreData(); if (waitingForData) { return; } // console.log('higher, lower bits:', higherBits.toString(2), lowerBits.toString(2)); const data = (higherBits << 4) | lowerBits; const instructionType = InstructionRegisterState.getInstructionType(data); // console.log('received instruction type: ', InstructionType[instructionType], data.toString(2)); const functionToCall = { [InstructionType.ClearDisplay]: this.clearDisplay, [InstructionType.CursorHome]: this.setCursorHome, [InstructionType.EntryModeSet]: this.setEntryMode, [InstructionType.DisplayOnOff]: this.displayOnOff, [InstructionType.CursorDisplayShift]: this.shiftCursorAndDisplay, [InstructionType.FunctionSet]: this.setFunction, [InstructionType.SetCGRAMAddress]: this.setCGRAMAddress, [InstructionType.SetDDRAMAddress]: this.setDDRAMAddress, }[instructionType].bind(this); functionToCall(data); } constructor(lcd: LCD16X2) { this.lcd = lcd; } } ================================================ FILE: ArduinoFrontend/src/app/Libs/outputs/LCD/LCDUtils.ts ================================================ // import _ from 'lodash'; import _ from 'lodash-transpose'; // https://mil.ufl.edu/3744/docs/lcdmanual/commands.html // https://github.com/basti79/LCD-fonts/blob/master/5x8_horizontal_MSB_2.h const FontData5x8 = [ [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x00 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x01 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x02 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x03 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x04 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x05 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x06 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x07 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x08 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x09 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x0a [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x0b [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x0c [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x0d [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x0e [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x0f [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x10 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x11 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x12 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x13 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x14 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x15 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x16 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x17 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x18 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x19 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x1a [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x1b [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x1c [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x1d [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x1e [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x1f [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x20 [0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x04, 0x00 ], // 0x21 [0x0a, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x22 [0x0a, 0x0a, 0x1f, 0x0a, 0x1f, 0x0a, 0x0a, 0x00 ], // 0x23 [0x04, 0x0f, 0x14, 0x0e, 0x05, 0x1e, 0x04, 0x00 ], // 0x24 [0x18, 0x19, 0x02, 0x04, 0x08, 0x13, 0x03, 0x00 ], // 0x25 [0x0c, 0x12, 0x14, 0x08, 0x15, 0x12, 0x0d, 0x00 ], // 0x26 [0x0c, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x27 [0x02, 0x04, 0x08, 0x08, 0x08, 0x04, 0x02, 0x00 ], // 0x28 [0x08, 0x04, 0x02, 0x02, 0x02, 0x04, 0x08, 0x00 ], // 0x29 [0x00, 0x0a, 0x04, 0x1f, 0x04, 0x0a, 0x00, 0x00 ], // 0x2a [0x00, 0x04, 0x04, 0x1f, 0x04, 0x04, 0x00, 0x00 ], // 0x2b [0x00, 0x00, 0x00, 0x00, 0x0c, 0x04, 0x08, 0x00 ], // 0x2c [0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00 ], // 0x2d [0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x0c, 0x00 ], // 0x2e [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x00, 0x00 ], // 0x2f [0x0e, 0x11, 0x13, 0x15, 0x19, 0x11, 0x0e, 0x00 ], // 0x30 [0x04, 0x0c, 0x04, 0x04, 0x04, 0x04, 0x0e, 0x00 ], // 0x31 [0x0e, 0x11, 0x01, 0x02, 0x04, 0x08, 0x1f, 0x00 ], // 0x32 [0x1f, 0x02, 0x04, 0x02, 0x01, 0x11, 0x0e, 0x00 ], // 0x33 [0x02, 0x06, 0x0a, 0x12, 0x1f, 0x02, 0x02, 0x00 ], // 0x34 [0x1f, 0x10, 0x1e, 0x01, 0x01, 0x11, 0x0e, 0x00 ], // 0x35 [0x06, 0x08, 0x10, 0x1e, 0x11, 0x11, 0x0e, 0x00 ], // 0x36 [0x1f, 0x01, 0x02, 0x04, 0x08, 0x08, 0x08, 0x00 ], // 0x37 [0x0e, 0x11, 0x11, 0x0e, 0x11, 0x11, 0x0e, 0x00 ], // 0x38 [0x0e, 0x11, 0x11, 0x0f, 0x01, 0x02, 0x0c, 0x00 ], // 0x39 [0x00, 0x0c, 0x0c, 0x00, 0x0c, 0x0c, 0x00, 0x00 ], // 0x3a [0x00, 0x0c, 0x0c, 0x00, 0x0c, 0x04, 0x08, 0x00 ], // 0x3b [0x01, 0x02, 0x04, 0x08, 0x04, 0x02, 0x01, 0x00 ], // 0x3c [0x00, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x00, 0x00 ], // 0x3d [0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x00 ], // 0x3e [0x0e, 0x11, 0x01, 0x02, 0x04, 0x00, 0x04, 0x00 ], // 0x3f [0x0e, 0x11, 0x01, 0x0d, 0x15, 0x15, 0x0e, 0x00 ], // 0x40 [0x0e, 0x11, 0x11, 0x11, 0x1f, 0x11, 0x11, 0x00 ], // 0x41 [0x1e, 0x11, 0x11, 0x1e, 0x11, 0x11, 0x1e, 0x00 ], // 0x42 [0x0e, 0x11, 0x10, 0x10, 0x10, 0x11, 0x0e, 0x00 ], // 0x43 [0x1c, 0x12, 0x11, 0x11, 0x11, 0x12, 0x1c, 0x00 ], // 0x44 [0x1f, 0x10, 0x10, 0x1e, 0x10, 0x10, 0x1f, 0x00 ], // 0x45 [0x1f, 0x10, 0x10, 0x1c, 0x10, 0x10, 0x10, 0x00 ], // 0x46 [0x0e, 0x11, 0x10, 0x10, 0x13, 0x11, 0x0e, 0x00 ], // 0x47 [0x11, 0x11, 0x11, 0x1f, 0x11, 0x11, 0x11, 0x00 ], // 0x48 [0x0e, 0x04, 0x04, 0x04, 0x04, 0x04, 0x0e, 0x00 ], // 0x49 [0x07, 0x02, 0x02, 0x02, 0x02, 0x12, 0x0c, 0x00 ], // 0x4a [0x11, 0x12, 0x14, 0x18, 0x14, 0x12, 0x11, 0x00 ], // 0x4b [0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1f, 0x00 ], // 0x4c [0x11, 0x1b, 0x15, 0x11, 0x11, 0x11, 0x11, 0x00 ], // 0x4d [0x11, 0x11, 0x19, 0x15, 0x13, 0x11, 0x11, 0x00 ], // 0x4e [0x0e, 0x11, 0x11, 0x11, 0x11, 0x11, 0x0e, 0x00 ], // 0x4f [0x1e, 0x11, 0x11, 0x1e, 0x10, 0x10, 0x10, 0x00 ], // 0x50 [0x0e, 0x11, 0x11, 0x11, 0x15, 0x12, 0x0d, 0x00 ], // 0x51 [0x1e, 0x11, 0x11, 0x1e, 0x14, 0x12, 0x11, 0x00 ], // 0x52 [0x0f, 0x10, 0x10, 0x0e, 0x01, 0x01, 0x1e, 0x00 ], // 0x53 [0x1f, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00 ], // 0x54 [0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x0e, 0x00 ], // 0x55 [0x11, 0x11, 0x11, 0x11, 0x11, 0x0a, 0x04, 0x00 ], // 0x56 [0x11, 0x11, 0x11, 0x15, 0x15, 0x1b, 0x11, 0x00 ], // 0x57 [0x11, 0x11, 0x0a, 0x04, 0x0a, 0x11, 0x11, 0x00 ], // 0x58 [0x11, 0x11, 0x0a, 0x04, 0x04, 0x04, 0x04, 0x00 ], // 0x59 [0x1f, 0x01, 0x02, 0x04, 0x08, 0x10, 0x1f, 0x00 ], // 0x5a [0x07, 0x04, 0x04, 0x04, 0x04, 0x04, 0x07, 0x00 ], // 0x5b [0x00, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, 0x00 ], // 0x5c [0x1c, 0x04, 0x04, 0x04, 0x04, 0x04, 0x1c, 0x00 ], // 0x5d [0x04, 0x0a, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x5e [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00 ], // 0x5f [0x08, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x60 [0x00, 0x00, 0x0e, 0x01, 0x0f, 0x11, 0x0f, 0x00 ], // 0x61 [0x10, 0x10, 0x16, 0x19, 0x11, 0x11, 0x1e, 0x00 ], // 0x62 [0x00, 0x00, 0x0e, 0x10, 0x10, 0x11, 0x0e, 0x00 ], // 0x63 [0x01, 0x01, 0x0d, 0x13, 0x11, 0x11, 0x0f, 0x00 ], // 0x64 [0x00, 0x00, 0x0e, 0x11, 0x1f, 0x10, 0x0e, 0x00 ], // 0x65 [0x06, 0x09, 0x08, 0x1c, 0x08, 0x08, 0x08, 0x00 ], // 0x66 [0x00, 0x00, 0x0f, 0x11, 0x0f, 0x01, 0x06, 0x00 ], // 0x67 [0x10, 0x10, 0x16, 0x19, 0x11, 0x11, 0x11, 0x00 ], // 0x68 [0x04, 0x00, 0x0c, 0x04, 0x04, 0x04, 0x0e, 0x00 ], // 0x69 [0x02, 0x00, 0x06, 0x02, 0x02, 0x12, 0x0c, 0x00 ], // 0x6a [0x08, 0x08, 0x09, 0x0a, 0x0c, 0x0a, 0x09, 0x00 ], // 0x6b [0x0c, 0x04, 0x04, 0x04, 0x04, 0x04, 0x0e, 0x00 ], // 0x6c [0x00, 0x00, 0x1a, 0x15, 0x15, 0x11, 0x11, 0x00 ], // 0x6d [0x00, 0x00, 0x16, 0x19, 0x11, 0x11, 0x11, 0x00 ], // 0x6e [0x00, 0x00, 0x0e, 0x11, 0x11, 0x11, 0x0e, 0x00 ], // 0x6f [0x00, 0x00, 0x1e, 0x11, 0x1e, 0x10, 0x10, 0x00 ], // 0x70 [0x00, 0x00, 0x0d, 0x13, 0x0f, 0x01, 0x01, 0x00 ], // 0x71 [0x00, 0x00, 0x16, 0x19, 0x10, 0x10, 0x10, 0x00 ], // 0x72 [0x00, 0x00, 0x0e, 0x10, 0x0e, 0x01, 0x1e, 0x00 ], // 0x73 [0x08, 0x08, 0x1c, 0x08, 0x08, 0x09, 0x06, 0x00 ], // 0x74 [0x00, 0x00, 0x11, 0x11, 0x11, 0x13, 0x0d, 0x00 ], // 0x75 [0x00, 0x00, 0x11, 0x11, 0x11, 0x0a, 0x04, 0x00 ], // 0x76 [0x00, 0x00, 0x11, 0x11, 0x15, 0x15, 0x0a, 0x00 ], // 0x77 [0x00, 0x00, 0x11, 0x0a, 0x04, 0x0a, 0x11, 0x00 ], // 0x78 [0x00, 0x00, 0x11, 0x11, 0x0f, 0x01, 0x0e, 0x00 ], // 0x79 [0x00, 0x00, 0x1f, 0x02, 0x04, 0x08, 0x1f, 0x00 ], // 0x7a [0x02, 0x04, 0x04, 0x08, 0x04, 0x04, 0x02, 0x00 ], // 0x7b [0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00 ], // 0x7c [0x08, 0x04, 0x04, 0x02, 0x04, 0x04, 0x08, 0x00 ], // 0x7d [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x7e [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x7f [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x80 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x81 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x82 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x83 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x84 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x85 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x86 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x87 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x88 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x89 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x8a [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x8b [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x8c [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x8d [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x8e [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x8f [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x90 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x91 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x92 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x93 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x94 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x95 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x96 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x97 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x98 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x99 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x9a [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x9b [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x9c [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x9d [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x9e [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x9f [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xa0 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xa1 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xa2 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xa3 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xa4 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xa5 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xa6 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xa7 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xa8 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xa9 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xaa [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xab [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xac [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xad [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xae [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xaf [0x07, 0x05, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xb0 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xb1 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xb2 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xb3 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xb4 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xb5 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xb6 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xb7 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xb8 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xb9 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xba [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xbb [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xbc [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xbd [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xbe [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xbf [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xc0 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xc1 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xc2 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xc3 [0x12, 0x0c, 0x12, 0x12, 0x1e, 0x12, 0x12, 0x00 ], // 0xc4 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xc5 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xc6 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xc7 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xc8 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xc9 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xca [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xcb [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xcc [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xcd [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xce [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xcf [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xd0 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xd1 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xd2 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xd3 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xd4 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xd5 [0x11, 0x0e, 0x11, 0x11, 0x11, 0x11, 0x0e, 0x00 ], // 0xd6 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xd7 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xd8 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xd9 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xda [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xdb [0x11, 0x00, 0x11, 0x11, 0x11, 0x11, 0x0e, 0x00 ], // 0xdc [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xdd [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xde [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xdf [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xe0 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xe1 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xe2 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xe3 [0x0a, 0x00, 0x0e, 0x01, 0x0f, 0x11, 0x0f, 0x00 ], // 0xe4 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xe5 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xe6 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xe7 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xe8 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xe9 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xea [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xeb [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xec [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xed [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xee [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xef [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xf0 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xf1 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xf2 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xf3 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xf4 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xf5 [0x00, 0x12, 0x0c, 0x12, 0x12, 0x12, 0x0c, 0x00 ], // 0xf6 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xf7 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xf8 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xf9 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xfa [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xfb [0x00, 0x12, 0x00, 0x12, 0x12, 0x12, 0x0c, 0x00 ], // 0xfc [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xfd [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xfe ]; const FontData5x10 = [ [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x00 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x01 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x02 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x03 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x04 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x05 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x06 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x07 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x08 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x09 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x0a [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x0b [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x0c [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x0d [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x0e [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x0f [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x10 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x11 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x12 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x13 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x14 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x15 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x16 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x17 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x18 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x19 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x1a [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x1b [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x1c [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x1d [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x1e [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x1f [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x20 [0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00 ], // 0x21 [0x0a, 0x0a, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x22 [0x0a, 0x0a, 0x1f, 0x0a, 0x1f, 0x0a, 0x0a, 0x00, 0x00, 0x00 ], // 0x23 [0x04, 0x0f, 0x14, 0x0e, 0x05, 0x1e, 0x04, 0x00, 0x00, 0x00 ], // 0x24 [0x18, 0x19, 0x02, 0x04, 0x08, 0x13, 0x03, 0x00, 0x00, 0x00 ], // 0x25 [0x0c, 0x12, 0x14, 0x08, 0x15, 0x12, 0x0d, 0x00, 0x00, 0x00 ], // 0x26 [0x0c, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x27 [0x02, 0x04, 0x08, 0x08, 0x08, 0x04, 0x02, 0x00, 0x00, 0x00 ], // 0x28 [0x08, 0x04, 0x02, 0x02, 0x02, 0x04, 0x08, 0x00, 0x00, 0x00 ], // 0x29 [0x00, 0x0a, 0x04, 0x1f, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x00 ], // 0x2a [0x00, 0x04, 0x04, 0x1f, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00 ], // 0x2b [0x00, 0x00, 0x00, 0x00, 0x0c, 0x04, 0x08, 0x00, 0x00, 0x00 ], // 0x2c [0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x2d [0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x0c, 0x00, 0x00, 0x00 ], // 0x2e [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00 ], // 0x2f [0x0e, 0x11, 0x13, 0x15, 0x19, 0x11, 0x0e, 0x00, 0x00, 0x00 ], // 0x30 [0x04, 0x0c, 0x04, 0x04, 0x04, 0x04, 0x0e, 0x00, 0x00, 0x00 ], // 0x31 [0x0e, 0x11, 0x01, 0x02, 0x04, 0x08, 0x1f, 0x00, 0x00, 0x00 ], // 0x32 [0x1f, 0x02, 0x04, 0x02, 0x01, 0x11, 0x0e, 0x00, 0x00, 0x00 ], // 0x33 [0x02, 0x06, 0x0a, 0x12, 0x1f, 0x02, 0x02, 0x00, 0x00, 0x00 ], // 0x34 [0x1f, 0x10, 0x1e, 0x01, 0x01, 0x11, 0x0e, 0x00, 0x00, 0x00 ], // 0x35 [0x06, 0x08, 0x10, 0x1e, 0x11, 0x11, 0x0e, 0x00, 0x00, 0x00 ], // 0x36 [0x1f, 0x01, 0x02, 0x04, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00 ], // 0x37 [0x0e, 0x11, 0x11, 0x0e, 0x11, 0x11, 0x0e, 0x00, 0x00, 0x00 ], // 0x38 [0x0e, 0x11, 0x11, 0x0f, 0x01, 0x02, 0x0c, 0x00, 0x00, 0x00 ], // 0x39 [0x00, 0x0c, 0x0c, 0x00, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00 ], // 0x3a [0x00, 0x0c, 0x0c, 0x00, 0x0c, 0x04, 0x08, 0x00, 0x00, 0x00 ], // 0x3b [0x01, 0x02, 0x04, 0x08, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00 ], // 0x3c [0x00, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x3d [0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x00, 0x00, 0x00 ], // 0x3e [0x0e, 0x11, 0x01, 0x02, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00 ], // 0x3f [0x0e, 0x11, 0x01, 0x0d, 0x15, 0x15, 0x0e, 0x00, 0x00, 0x00 ], // 0x40 [0x0e, 0x11, 0x11, 0x11, 0x1f, 0x11, 0x11, 0x00, 0x00, 0x00 ], // 0x41 [0x1e, 0x11, 0x11, 0x1e, 0x11, 0x11, 0x1e, 0x00, 0x00, 0x00 ], // 0x42 [0x0e, 0x11, 0x10, 0x10, 0x10, 0x11, 0x0e, 0x00, 0x00, 0x00 ], // 0x43 [0x1c, 0x12, 0x11, 0x11, 0x11, 0x12, 0x1c, 0x00, 0x00, 0x00 ], // 0x44 [0x1f, 0x10, 0x10, 0x1e, 0x10, 0x10, 0x1f, 0x00, 0x00, 0x00 ], // 0x45 [0x1f, 0x10, 0x10, 0x1c, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00 ], // 0x46 [0x0e, 0x11, 0x10, 0x10, 0x13, 0x11, 0x0e, 0x00, 0x00, 0x00 ], // 0x47 [0x11, 0x11, 0x11, 0x1f, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00 ], // 0x48 [0x0e, 0x04, 0x04, 0x04, 0x04, 0x04, 0x0e, 0x00, 0x00, 0x00 ], // 0x49 [0x07, 0x02, 0x02, 0x02, 0x02, 0x12, 0x0c, 0x00, 0x00, 0x00 ], // 0x4a [0x11, 0x12, 0x14, 0x18, 0x14, 0x12, 0x11, 0x00, 0x00, 0x00 ], // 0x4b [0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1f, 0x00, 0x00, 0x00 ], // 0x4c [0x11, 0x1b, 0x15, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00 ], // 0x4d [0x11, 0x11, 0x19, 0x15, 0x13, 0x11, 0x11, 0x00, 0x00, 0x00 ], // 0x4e [0x0e, 0x11, 0x11, 0x11, 0x11, 0x11, 0x0e, 0x00, 0x00, 0x00 ], // 0x4f [0x1e, 0x11, 0x11, 0x1e, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00 ], // 0x50 [0x0e, 0x11, 0x11, 0x11, 0x15, 0x12, 0x0d, 0x00, 0x00, 0x00 ], // 0x51 [0x1e, 0x11, 0x11, 0x1e, 0x14, 0x12, 0x11, 0x00, 0x00, 0x00 ], // 0x52 [0x0f, 0x10, 0x10, 0x0e, 0x01, 0x01, 0x1e, 0x00, 0x00, 0x00 ], // 0x53 [0x1f, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00 ], // 0x54 [0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x0e, 0x00, 0x00, 0x00 ], // 0x55 [0x11, 0x11, 0x11, 0x11, 0x11, 0x0a, 0x04, 0x00, 0x00, 0x00 ], // 0x56 [0x11, 0x11, 0x11, 0x15, 0x15, 0x1b, 0x11, 0x00, 0x00, 0x00 ], // 0x57 [0x11, 0x11, 0x0a, 0x04, 0x0a, 0x11, 0x11, 0x00, 0x00, 0x00 ], // 0x58 [0x11, 0x11, 0x0a, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00 ], // 0x59 [0x1f, 0x01, 0x02, 0x04, 0x08, 0x10, 0x1f, 0x00, 0x00, 0x00 ], // 0x5a [0x07, 0x04, 0x04, 0x04, 0x04, 0x04, 0x07, 0x00, 0x00, 0x00 ], // 0x5b [0x00, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00 ], // 0x5c [0x1c, 0x04, 0x04, 0x04, 0x04, 0x04, 0x1c, 0x00, 0x00, 0x00 ], // 0x5d [0x04, 0x0a, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x5e [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00 ], // 0x5f [0x08, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x60 [0x00, 0x00, 0x0e, 0x01, 0x0f, 0x11, 0x0f, 0x00, 0x00, 0x00 ], // 0x61 [0x10, 0x10, 0x16, 0x19, 0x11, 0x11, 0x1e, 0x00, 0x00, 0x00 ], // 0x62 [0x00, 0x00, 0x0e, 0x10, 0x10, 0x11, 0x0e, 0x00, 0x00, 0x00 ], // 0x63 [0x01, 0x01, 0x0d, 0x13, 0x11, 0x11, 0x0f, 0x00, 0x00, 0x00 ], // 0x64 [0x00, 0x00, 0x0e, 0x11, 0x1f, 0x10, 0x0e, 0x00, 0x00, 0x00 ], // 0x65 [0x06, 0x09, 0x08, 0x1c, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00 ], // 0x66 [0x00, 0x00, 0x0f, 0x11, 0x0f, 0x01, 0x06, 0x00, 0x00, 0x00 ], // 0x67 [0x10, 0x10, 0x16, 0x19, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00 ], // 0x68 [0x04, 0x00, 0x0c, 0x04, 0x04, 0x04, 0x0e, 0x00, 0x00, 0x00 ], // 0x69 [0x02, 0x00, 0x06, 0x02, 0x02, 0x12, 0x0c, 0x00, 0x00, 0x00 ], // 0x6a [0x08, 0x08, 0x09, 0x0a, 0x0c, 0x0a, 0x09, 0x00, 0x00, 0x00 ], // 0x6b [0x0c, 0x04, 0x04, 0x04, 0x04, 0x04, 0x0e, 0x00, 0x00, 0x00 ], // 0x6c [0x00, 0x00, 0x1a, 0x15, 0x15, 0x11, 0x11, 0x00, 0x00, 0x00 ], // 0x6d [0x00, 0x00, 0x16, 0x19, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00 ], // 0x6e [0x00, 0x00, 0x0e, 0x11, 0x11, 0x11, 0x0e, 0x00, 0x00, 0x00 ], // 0x6f [0x00, 0x00, 0x1e, 0x11, 0x1e, 0x10, 0x10, 0x00, 0x00, 0x00 ], // 0x70 [0x00, 0x00, 0x0d, 0x13, 0x0f, 0x01, 0x01, 0x00, 0x00, 0x00 ], // 0x71 [0x00, 0x00, 0x16, 0x19, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00 ], // 0x72 [0x00, 0x00, 0x0e, 0x10, 0x0e, 0x01, 0x1e, 0x00, 0x00, 0x00 ], // 0x73 [0x08, 0x08, 0x1c, 0x08, 0x08, 0x09, 0x06, 0x00, 0x00, 0x00 ], // 0x74 [0x00, 0x00, 0x11, 0x11, 0x11, 0x13, 0x0d, 0x00, 0x00, 0x00 ], // 0x75 [0x00, 0x00, 0x11, 0x11, 0x11, 0x0a, 0x04, 0x00, 0x00, 0x00 ], // 0x76 [0x00, 0x00, 0x11, 0x11, 0x15, 0x15, 0x0a, 0x00, 0x00, 0x00 ], // 0x77 [0x00, 0x00, 0x11, 0x0a, 0x04, 0x0a, 0x11, 0x00, 0x00, 0x00 ], // 0x78 [0x00, 0x00, 0x11, 0x11, 0x0f, 0x01, 0x0e, 0x00, 0x00, 0x00 ], // 0x79 [0x00, 0x00, 0x1f, 0x02, 0x04, 0x08, 0x1f, 0x00, 0x00, 0x00 ], // 0x7a [0x02, 0x04, 0x04, 0x08, 0x04, 0x04, 0x02, 0x00, 0x00, 0x00 ], // 0x7b [0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00 ], // 0x7c [0x08, 0x04, 0x04, 0x02, 0x04, 0x04, 0x08, 0x00, 0x00, 0x00 ], // 0x7d [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x7e [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x7f [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x80 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x81 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x82 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x83 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x84 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x85 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x86 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x87 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x88 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x89 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x8a [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x8b [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x8c [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x8d [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x8e [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x8f [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x90 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x91 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x92 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x93 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x94 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x95 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x96 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x97 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x98 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x99 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x9a [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x9b [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x9c [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x9d [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x9e [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0x9f [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xa0 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xa1 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xa2 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xa3 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xa4 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xa5 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xa6 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xa7 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xa8 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xa9 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xaa [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xab [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xac [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xad [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xae [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xaf [0x07, 0x05, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xb0 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xb1 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xb2 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xb3 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xb4 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xb5 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xb6 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xb7 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xb8 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xb9 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xba [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xbb [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xbc [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xbd [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xbe [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xbf [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xc0 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xc1 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xc2 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xc3 [0x12, 0x0c, 0x12, 0x12, 0x1e, 0x12, 0x12, 0x00, 0x00, 0x00 ], // 0xc4 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xc5 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xc6 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xc7 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xc8 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xc9 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xca [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xcb [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xcc [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xcd [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xce [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xcf [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xd0 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xd1 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xd2 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xd3 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xd4 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xd5 [0x11, 0x0e, 0x11, 0x11, 0x11, 0x11, 0x0e, 0x00, 0x00, 0x00 ], // 0xd6 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xd7 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xd8 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xd9 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xda [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xdb [0x11, 0x00, 0x11, 0x11, 0x11, 0x11, 0x0e, 0x00, 0x00, 0x00 ], // 0xdc [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xdd [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xde [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xdf [0x00, 0x00, 0x09, 0x15, 0x12, 0x12, 0x0D, 0x00, 0x00, 0x00 ], // 0xe0 [0x0A, 0x00, 0x0E, 0x01, 0x0F, 0x11, 0x0F, 0x00, 0x00, 0x00 ], // 0xe1 [0x00, 0x00, 0x0E, 0x11, 0x1E, 0x11, 0x1E, 0x10, 0x10, 0x10 ], // 0xe2 [0x00, 0x00, 0x0E, 0x10, 0x0C, 0x11, 0x0E, 0x00, 0x00, 0x00 ], // 0xe3 [0x00, 0x00, 0x11, 0x11, 0x11, 0x13, 0x1D, 0x10, 0x10, 0x10 ], // 0xe4 [0x00, 0x00, 0x0F, 0x14, 0x12, 0x11, 0x0E, 0x00, 0x00, 0x00 ], // 0xe5 [0x00, 0x00, 0x06, 0x09, 0x11, 0x11, 0x1E, 0x10, 0x10, 0x10 ], // 0xe6 [0x00, 0x00, 0x0F, 0x11, 0x11, 0x11, 0x0F, 0x01, 0x01, 0x00 ], // 0xe7 [0x00, 0x00, 0x07, 0x04, 0x04, 0x14, 0x08, 0x00, 0x00, 0x00 ], // 0xe8 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xe9 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xea [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xeb [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xec [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xed [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xee [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xef [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xf0 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xf1 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xf2 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xf3 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xf4 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xf5 [0x00, 0x12, 0x0c, 0x12, 0x12, 0x12, 0x0c, 0x00, 0x00, 0x00 ], // 0xf6 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xf7 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xf8 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xf9 [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xfa [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xfb [0x00, 0x12, 0x00, 0x12, 0x12, 0x12, 0x0c, 0x00, 0x00, 0x00 ], // 0xfc [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xfd [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], // 0xfe ]; export enum InstructionType { ClearDisplay = 1, CursorHome = 2, EntryModeSet = 3, DisplayOnOff = 4, CursorDisplayShift = 5, FunctionSet = 6, SetCGRAMAddress = 7, SetDDRAMAddress = 8, } export enum FontSize { _8x5, _10x5 } function hex2bin(hex, offset = 0) { return ('00000000' + hex.toString(2)).substr(-8 + offset); } export class LCDUtils { static blankBytes: any = null; static getDisplayBytes(character: number, fontSize: FontSize = FontSize._8x5): number[][] { const hexReprArray = fontSize === FontSize._8x5 ? FontData5x8[character] : FontData5x10[character]; if (!hexReprArray) { return LCDUtils.getBlankDisplayBytes(); } return hexReprArray.map(LCDUtils.convertHexToBinaryArray); } static convertHexToBinaryArray(hex: number): number[] { return hex2bin(hex, 3).split('').map(n => parseInt(n, 2) & 1); } static getBlankDisplayBytes(): number[][] { if (!LCDUtils.blankBytes) { LCDUtils.blankBytes = LCDUtils.getDisplayBytes(' '.charCodeAt(0)); } return LCDUtils.blankBytes; } } ================================================ FILE: ArduinoFrontend/src/app/Libs/outputs/LCD/MemorySchema.ts ================================================ import _ from 'lodash-transpose'; import { LCDUtils, FontSize } from './LCDUtils'; // https://www.8051projects.net/lcd-interfacing/basics.php export interface RAM { read(address: number): any; write(address: number, data: any): void; } /** * DDRAM */ export class DDRAM implements RAM { memory: any[]; N_ROW: number; N_COLUMN: number; constructor(N_ROW: number, N_COLUMN: number) { this.memory = _.times(1 << 7, 0); this.N_ROW = N_ROW; this.N_COLUMN = N_COLUMN; } static createDDRAMForLCD(N_ROW) { if (N_ROW === 1) { return new DDRAM(1, 40); } else if (N_ROW === 2) { return new DDRAM(2, 40); } else if (N_ROW === 4) { return new DDRAM(4, 20); } } convertIndexToAddress(index: [number, number]): number { if (this.N_ROW === 1) { return index[1]; } if (this.N_ROW === 2) { const address = index[0] * 0x40 + index[1]; return address; } // TODO: implement 4 rows } convertAddressToIndex(address: number): [number, number] { if (this.N_ROW === 1) { return [0, address]; } if (this.N_ROW === 2) { return [Math.floor(address / 0x40), address % 0x40]; } // TODO: implement 4 rows } validateIndex(address: number) { if (address < 0x00 || address >= 0x7F) { throw Error('Invalid index.'); } } read(address: number): number { this.validateIndex(address); return this.memory[address]; } readAtIndex(index: [number, number]): number { const address = this.convertIndexToAddress(index); return this.memory[address]; } write(address: number, data: number) { this.validateIndex(address); this.memory[address] = data; } } /** * CGROM */ export class CGROM { memory: any[][]; fontSize: FontSize; N_ROW = 16; N_COLUMN = 16; constructor(fontSize: FontSize) { // fontSize: [8, 5] or [10, 5] // TODO: implement 10x5 this.memory = [[]]; for (let character = 0; character < 0xFF; character++) { const higherBits = (character >> 4) & 0b1111; const lowerBits = (character) & 0b1111; this.memory[higherBits] = this.memory[higherBits] || []; this.memory[higherBits][lowerBits] = LCDUtils.getDisplayBytes(character, fontSize); } } readROM(higherBit: number, lowerBit: number): number[][] { return this.memory[higherBit][lowerBit]; } } /** * CGRAM class */ export class CGRAM implements RAM { memory: {[key: number]: number} = {}; constructor() {} validateAddress(address) { if (address < 0x40 || address >= 0x80) { return false; } return true; } read(address: number): number[] { if (!this.validateAddress(address)) { console.log('Invalid address provided to CGRAM while reading.'); return; } return LCDUtils.convertHexToBinaryArray(this.memory[address]); } write(address: number, data: number) { if (!this.validateAddress(address)) { console.log('Invalid address provided to CGRAM while writing.'); return; } this.memory[address] = data; } } ================================================ FILE: ArduinoFrontend/src/app/Libs/outputs/Led.ts ================================================ import { CircuitElement } from '../CircuitElement'; import { BreadBoard, Resistor } from '../General'; import { Point } from '../Point'; import { ArduinoUno } from './Arduino'; /** * Declare window so that custom created function don't throw error */ declare var window; /** * LED class */ export class LED extends CircuitElement { /** * Colors of LED */ static colors: string[] = []; /** * color to be shown while glowing */ static glowColors: string[] = []; /** * Name of Color of LED */ static colorNames: string[] = []; /** * Internal resistance of LED in ohms */ static internalResistance = 13; /** * Selectedindex wrt to color */ selectedIndex = 0; /** * Voltage of PWM */ voltage = 0; /** * PWM attached */ pwmAttached = false; /** * Previous node value. */ prev = -2; /** * Set to keep track of visited nodes */ visitedNodesv2 = new Set(); /** * Pin Name mapped to Pins */ pinNamedMap: any = {}; /** * If all nodes of element are connected or not */ allNodesConnected = false; /** * Flag to check if logic function's recursion should be skipped */ skipCheck = false; /** * Variable to store resistance of entire circuit * Internal resistance of LED by default set to 13 */ resistance: number = LED.internalResistance; /** * Stores visited resistors */ visitedResistors = new Set(); /** * Stores variable resistance from Potentiometer */ variableResistance = 0; /** * LED constructor * @param canvas Raphael Canvas (Paper) * @param x position x * @param y position y */ constructor(public canvas: any, x: number, y: number) { super('LED', x, y, 'LED.json', canvas); } /** Saves data of selected color wrt its index */ SaveData() { return { color: this.selectedIndex }; } /** * Function Called to Load data from saved object * @param data Saved Object */ LoadData(data: any) { this.selectedIndex = data.data.color; } /** init is called when the component is complety drawn to the canvas */ init() { if (LED.glowColors.length === 0) { // LED // console.log(this.data); LED.colors = this.data.colors; LED.colorNames = this.data.colorNames; LED.glowColors = this.data.glowcolors; } this.data = null; // Add value Change Listener to Circuit nodes this.nodes[0].addValueListener((v) => this.logic(v)); this.nodes[1].addValueListener((v) => this.logic(v)); this.elements[0].attr({ fill: LED.colors[this.selectedIndex] }); } /** * fills color in the led * @param color color */ fillColor(color) { this.elements[3].attr({ fill: color }); } /** Simulation Logic */ logic(val: number) { if (this.prev === val) { this.skipCheck = true; } let current = val / (this.resistance + this.variableResistance); const pin0Current = (this.nodes[0].value / (this.resistance + this.variableResistance)); if (!this.allNodesConnected) { const arduinoEnd: any = this.getRecArduinov2(this.pinNamedMap['POSITIVE'], 'POSITIVE'); const negativeEnd = this.getRecArduinov2(this.pinNamedMap['NEGATIVE'], 'NEGATIVE'); if (negativeEnd && arduinoEnd) { if (negativeEnd.hasOwnProperty('label')) { if (negativeEnd.label === 'GND' || (negativeEnd.value === 0 && arduinoEnd.value > 0)) { this.allNodesConnected = true; } } } } // TODO: Run if PWM is not attached if (this.nodes[0].connectedTo && this.nodes[1].connectedTo) { if (!this.pwmAttached && this.allNodesConnected) { if (current > 0.03 || pin0Current > 0.03) { window.showToast('LED has burst'); this.handleConnectionError(); } else if (current >= 0.02 || pin0Current >= 0.02) { this.anim(); } else if ((current > 0.012 && current < 0.02) || (pin0Current > 0.012)) { this.glowWithAlpha(current); } else { this.fillColor('none'); } if (val >= 0 && !this.skipCheck) { this.prev = val; this.nodes[1].setValue(val, null); } else { this.skipCheck = false; return; } } else if (this.pwmAttached && this.allNodesConnected) { // TODO: Run if PWM is attached current = this.voltage / this.resistance; this.glowWithAlpha(current); } } else { // TODO: Show Toast this.handleConnectionError(); window.showToast('LED is not Connected properly'); } } /** * create color and add alpha to color */ glowWithAlpha(current: number) { const minCurrent = 0.012; const maxCurrent = 0.02; const minOpacity = 2; const maxOpacity = 9; if (current < minCurrent) { return; } const color = `r(0.5, 0.5)${LED.glowColors[this.selectedIndex]}`; const split = color.split('-'); let genColor = 'none'; // Scalaing current values to range between 2-9 const alpha = (((current - minCurrent) / (maxCurrent - minCurrent)) * (maxOpacity - minOpacity)) + minOpacity; genColor = `${split[0].substr(0, split[0].length - 2)}${alpha})-${split[1]}`; this.elements[3].attr({ fill: genColor }); } /** * Handles connection error */ handleConnectionError() { this.fillColor('none'); } /** animation caller when start simulation is pressed */ anim() { this.fillColor(`r(0.5, 0.5)${LED.glowColors[this.selectedIndex]}`); } /** * Get The Led Name */ getName() { // TODO: Change Accordingly to Color return `LED Red`; } /** * Function provides component details * @param keyName Unique Class name * @param id Component id * @param body body of property box * @param title Component title */ properties(): { keyName: string; id: number; body: HTMLElement; title: string; } { const body = document.createElement('div'); const select = document.createElement('select'); const label = document.createElement('label'); label.innerText = 'LED Color'; let tmp = ''; for (const name of LED.colorNames) { tmp += ``; } select.innerHTML = tmp; select.selectedIndex = this.selectedIndex; select.onchange = () => { this.elements[0].attr({ fill: LED.colors[select.selectedIndex] }); this.selectedIndex = select.selectedIndex; }; body.append(label); body.append(select); return { keyName: this.keyName, id: this.id, body, title: 'LED' }; } /** * Called when start simulation. */ initSimulation(): void { this.visitedNodesv2.clear(); // Reset allNodesConnected to false this.allNodesConnected = false; const pwmPins = [3, 5, 6, 9, 10, 11]; for (const node of this.nodes) { this.pinNamedMap[node.label] = node; } // Getting resistance values from resistors in the circuit this.getRecResistance(this.pinNamedMap['POSITIVE'], 'POSITIVE'); this.getRecResistance(this.pinNamedMap['NEGATIVE'], 'NEGATIVE'); // Determine if Positive terminal of LED is attached to Arduino const arduinoEnd: any = this.getRecArduinov2(this.pinNamedMap['POSITIVE'], 'POSITIVE'); // Determine if Negative terminal of LED is attached to Arduino const negativeEnd = this.getRecArduinov2(this.pinNamedMap['NEGATIVE'], 'NEGATIVE'); // make allNodesConnected boolean true if negative is connected to GND if (negativeEnd) { if (negativeEnd.hasOwnProperty('label')) { if (negativeEnd.label === 'GND') { this.allNodesConnected = true; } } } // Check if nodes of LED are connected if (!negativeEnd || !arduinoEnd) { // TODO: Show Toast this.handleConnectionError(); window.showToast('LED is not Connected properly'); } // do not run addPwm if arduino is not connected if (!arduinoEnd) { return; } // Only add pwm if connected to a pwm pin in arduino if (arduinoEnd && pwmPins.indexOf(parseInt(arduinoEnd.label.substr(1), 10)) !== -1) { const arduino = arduinoEnd.parent; (arduino as ArduinoUno).addPWM(arduinoEnd, (v, p) => { // Calculate voltage of pwm pin this.voltage = v / 100; // If voltage is greater than 6: make PWM attached false if (this.voltage > 6 || this.voltage < 0) { this.pwmAttached = false; } else { this.pwmAttached = true; } }); } } /** Function removes all the animations */ closeSimulation(): void { this.prev = -2; this.fillColor('none'); // reset PWM boolean & voltage = 0 this.pwmAttached = false; this.voltage = 0; this.resistance = LED.internalResistance; this.visitedResistors.clear(); this.variableResistance = 0; } /** * Returns ID */ getID() { return this.id; } /** * Sets variable resitance */ setVariableResistance(resistance: number) { this.variableResistance = resistance; } /** * Return the node which is connected to arduino by recursively finding connected node * @param node The Node which need to be checked */ getRecArduinov2(node: Point, startedOn: string) { try { if (node.connectedTo.start.parent.keyName === 'ArduinoUno') { // TODO: Return if arduino is connected to start node this.visitedNodesv2.clear(); return node.connectedTo.start; } else if (node.connectedTo.end.parent.keyName === 'ArduinoUno') { // TODO: Return if arduino is connected to end node this.visitedNodesv2.clear(); return node.connectedTo.end; } else if (node.connectedTo.start.parent.keyName === 'BreadBoard' && !this.visitedNodesv2.has(node.connectedTo.start.gid)) { // TODO: Call recursive BreadBoard handler function if node is connected to Breadboard && visited nodes doesn't have node's gid return this.getRecArduinoBreadv2(node, startedOn); } else if (node.connectedTo.end.parent.keyName === 'BreadBoard' && !this.visitedNodesv2.has(node.connectedTo.end.gid)) { // TODO: Call recursive BreadBoard handler function if node is connected to Breadboard && visited nodes doesn't have node's gid return this.getRecArduinoBreadv2(node, startedOn); } else if (node.connectedTo.end.parent.keyName === 'Battery9v' && window.scope.ArduinoUno.length === 0) { // TODO: Return false if node's end is connected to 9V Battery return false; } else if (node.connectedTo.end.parent.keyName === 'CoinCell' && window.scope.ArduinoUno.length === 0) { // TODO: Return false if node's end is connected to Coin Cell return false; } else if (node.connectedTo.end.parent.keyName === 'RelayModule') { // TODO: Handle RelayModule if (startedOn === 'POSITIVE') { // If search was started on Positive node then return connected node of VCC in Relay return this.getRecArduinov2(node.connectedTo.end.parent.nodes[3], startedOn); } else if (startedOn === 'NEGATIVE') { // If search was started on Negative node then return connected node of GND in Relay return this.getRecArduinov2(node.connectedTo.end.parent.nodes[5], startedOn); } } else { // TODO: If nothing matches // IF/ELSE: Determine if start is to be used OR end for further recursion if (node.connectedTo.end.gid !== node.gid) { // Loops through all nodes in parent for (const e in node.connectedTo.end.parent.nodes) { // IF: gid is different && gid not in visited node if (node.connectedTo.end.parent.nodes[e].gid !== node.connectedTo.end.gid && !this.visitedNodesv2.has(node.connectedTo.end.parent.nodes[e].gid) && node.connectedTo.end.parent.nodes[e].isConnected()) { // add gid in visited nodes this.visitedNodesv2.add(node.connectedTo.end.parent.nodes[e].gid); // call back Arduino Recursive Fn return this.getRecArduinov2(node.connectedTo.end.parent.nodes[e], startedOn); } } } else if (node.connectedTo.start.gid !== node.gid) { // Loops through all nodes in parent for (const e in node.connectedTo.start.parent.nodes) { // IF: gid is different && gid not in visited node if (node.connectedTo.start.parent.nodes[e].gid !== node.connectedTo.start.gid && !this.visitedNodesv2.has(node.connectedTo.start.parent.nodes[e].gid) && node.connectedTo.start.parent.nodes[e].isConnected()) { // add gid in visited nodes this.visitedNodesv2.add(node.connectedTo.start.parent.nodes[e].gid); // call back Arduino Recursive Fn return this.getRecArduinov2(node.connectedTo.start.parent.nodes[e], startedOn); } } } } } catch (e) { console.warn(e); return false; } } /** * Recursive Function to handle BreadBoard * @param node Node which is to be checked for BreadBoard */ private getRecArduinoBreadv2(node: Point, startedOn: string) { // IF/ELSE: Determine if start is to be used OR end for further recursion if (node.connectedTo.end.gid !== node.gid) { const bb = (node.connectedTo.end.parent as BreadBoard); // loop through joined nodes of breadboard for (const e in bb.joined) { if (bb.joined[e].gid !== node.connectedTo.end.gid) { // Run only if substring matches if (bb.joined[e].label.substring(1, bb.joined[e].label.length) === node.connectedTo.end.label.substring(1, node.connectedTo.end.label.length)) { const ascii = node.connectedTo.end.label.charCodeAt(0); const currAscii = bb.joined[e].label.charCodeAt(0); // add gid to VisitedNode this.visitedNodesv2.add(bb.joined[e].gid); // IF/ELSE: determine which part of breadboard is connected if (ascii >= 97 && ascii <= 101) { if (bb.joined[e].isConnected() && (currAscii >= 97 && currAscii <= 101)) { return this.getRecArduinov2(bb.joined[e], startedOn); } } else if (ascii >= 102 && ascii <= 106) { if (bb.joined[e].isConnected() && (currAscii >= 102 && currAscii <= 106)) { return this.getRecArduinov2(bb.joined[e], startedOn); } } else { if (bb.joined[e].isConnected() && (bb.joined[e].label === node.connectedTo.end.label)) { return this.getRecArduinov2(bb.joined[e], startedOn); } } } } } } else if (node.connectedTo.start.gid !== node.gid) { const bb = (node.connectedTo.start.parent as BreadBoard); // loop through joined nodes of breadboard for (const e in bb.joined) { if (bb.joined[e].gid !== node.connectedTo.start.gid) { // Run only if substring matches if (bb.joined[e].label.substring(1, bb.joined[e].label.length) === node.connectedTo.start.label.substring(1, node.connectedTo.start.label.length)) { const ascii = node.connectedTo.start.label.charCodeAt(0); const currAscii = bb.joined[e].label.charCodeAt(0); // add gid to VisitedNode this.visitedNodesv2.add(bb.joined[e].gid); // IF/ELSE: determine which part of breadboard is connected if (ascii >= 97 && ascii <= 101) { if (bb.joined[e].isConnected() && (currAscii >= 97 && currAscii <= 101)) { return this.getRecArduinov2(bb.joined[e], startedOn); } } else if (ascii >= 102 && ascii <= 106) { if (bb.joined[e].isConnected() && (currAscii >= 102 && currAscii <= 106)) { return this.getRecArduinov2(bb.joined[e], startedOn); } } else { if (bb.joined[e].isConnected() && (bb.joined[e].label === node.connectedTo.end.label)) { return this.getRecArduinov2(bb.joined[e], startedOn); } } } } } } } /** * Return the node which is connected to arduino by recursively finding connected node * @param node The Node which need to be checked */ getRecResistance(node: Point, startedOn: string) { try { if (node.connectedTo.start.parent.keyName === 'Resistor') { const resistorID = (node.connectedTo.start.parent as Resistor).getID(); if (!this.visitedResistors.has(resistorID)) { this.resistance = this.resistance + (node.connectedTo.start.parent as Resistor).getResistance(); this.visitedResistors.add(resistorID); } } else if (node.connectedTo.end.parent.keyName === 'Resistor') { const resistorID = (node.connectedTo.end.parent as Resistor).getID(); if (!this.visitedResistors.has(resistorID)) { this.resistance = this.resistance + (node.connectedTo.end.parent as Resistor).getResistance(); this.visitedResistors.add(resistorID); } } if (node.connectedTo.start.parent.keyName === 'ArduinoUno') { // TODO: Return if arduino is connected to start node this.visitedNodesv2.clear(); return node.connectedTo.start; } else if (node.connectedTo.end.parent.keyName === 'ArduinoUno') { // TODO: Return if arduino is connected to end node this.visitedNodesv2.clear(); return node.connectedTo.end; } else if (node.connectedTo.start.parent.keyName === 'BreadBoard' && !this.visitedNodesv2.has(node.connectedTo.start.gid)) { // TODO: Call recursive BreadBoard handler function if node is connected to Breadboard && visited nodes doesn't have node's gid return this.getRecResistanceBread(node, startedOn); } else if (node.connectedTo.end.parent.keyName === 'BreadBoard' && !this.visitedNodesv2.has(node.connectedTo.end.gid)) { // TODO: Call recursive BreadBoard handler function if node is connected to Breadboard && visited nodes doesn't have node's gid return this.getRecResistanceBread(node, startedOn); } else if (node.connectedTo.end.parent.keyName === 'Battery9v' && window.scope.ArduinoUno.length === 0) { // TODO: Return false if node's end is connected to 9V Battery return false; } else if (node.connectedTo.end.parent.keyName === 'CoinCell' && window.scope.ArduinoUno.length === 0) { // TODO: Return false if node's end is connected to Coin Cell return false; } else if (node.connectedTo.end.parent.keyName === 'RelayModule') { // TODO: Handle RelayModule if (startedOn === 'POSITIVE') { // If search was started on Positive node then return connected node of VCC in Relay return this.getRecResistance(node.connectedTo.end.parent.nodes[3], startedOn); } else if (startedOn === 'NEGATIVE') { // If search was started on Negative node then return connected node of GND in Relay return this.getRecResistance(node.connectedTo.end.parent.nodes[5], startedOn); } } else { // TODO: If nothing matches // IF/ELSE: Determine if start is to be used OR end for further recursion if (node.connectedTo.end.gid !== node.gid) { // Loops through all nodes in parent for (const e in node.connectedTo.end.parent.nodes) { // IF: gid is different && gid not in visited node if (node.connectedTo.end.parent.nodes[e].gid !== node.connectedTo.end.gid && !this.visitedNodesv2.has(node.connectedTo.end.parent.nodes[e].gid) && node.connectedTo.end.parent.nodes[e].isConnected()) { // add gid in visited nodes this.visitedNodesv2.add(node.connectedTo.end.parent.nodes[e].gid); // call back Arduino Recursive Fn return this.getRecResistance(node.connectedTo.end.parent.nodes[e], startedOn); } } } else if (node.connectedTo.start.gid !== node.gid) { // Loops through all nodes in parent for (const e in node.connectedTo.start.parent.nodes) { // IF: gid is different && gid not in visited node if (node.connectedTo.start.parent.nodes[e].gid !== node.connectedTo.start.gid && !this.visitedNodesv2.has(node.connectedTo.start.parent.nodes[e].gid) && node.connectedTo.start.parent.nodes[e].isConnected()) { // add gid in visited nodes this.visitedNodesv2.add(node.connectedTo.start.parent.nodes[e].gid); // call back Arduino Recursive Fn return this.getRecResistance(node.connectedTo.start.parent.nodes[e], startedOn); } } } } } catch (e) { console.warn(e); return false; } } /** * Recursive Function to handle BreadBoard * @param node Node which is to be checked for BreadBoard */ private getRecResistanceBread(node: Point, startedOn: string) { // IF/ELSE: Determine if start is to be used OR end for further recursion if (node.connectedTo.end.gid !== node.gid) { const bb = (node.connectedTo.end.parent as BreadBoard); // loop through joined nodes of breadboard for (const e in bb.joined) { if (bb.joined[e].gid !== node.connectedTo.end.gid) { // Run only if substring matches if (bb.joined[e].label.substring(1, bb.joined[e].label.length) === node.connectedTo.end.label.substring(1, node.connectedTo.end.label.length)) { const ascii = node.connectedTo.end.label.charCodeAt(0); const currAscii = bb.joined[e].label.charCodeAt(0); // add gid to VisitedNode this.visitedNodesv2.add(bb.joined[e].gid); // IF/ELSE: determine which part of breadboard is connected if (ascii >= 97 && ascii <= 101) { if (bb.joined[e].isConnected() && (currAscii >= 97 && currAscii <= 101)) { return this.getRecResistance(bb.joined[e], startedOn); } } else if (ascii >= 102 && ascii <= 106) { if (bb.joined[e].isConnected() && (currAscii >= 102 && currAscii <= 106)) { return this.getRecResistance(bb.joined[e], startedOn); } } else { if (bb.joined[e].isConnected() && (bb.joined[e].label === node.connectedTo.end.label)) { return this.getRecResistance(bb.joined[e], startedOn); } } } } } } else if (node.connectedTo.start.gid !== node.gid) { const bb = (node.connectedTo.start.parent as BreadBoard); // loop through joined nodes of breadboard for (const e in bb.joined) { if (bb.joined[e].gid !== node.connectedTo.start.gid) { // Run only if substring matches if (bb.joined[e].label.substring(1, bb.joined[e].label.length) === node.connectedTo.start.label.substring(1, node.connectedTo.start.label.length)) { const ascii = node.connectedTo.start.label.charCodeAt(0); const currAscii = bb.joined[e].label.charCodeAt(0); // add gid to VisitedNode this.visitedNodesv2.add(bb.joined[e].gid); // IF/ELSE: determine which part of breadboard is connected if (ascii >= 97 && ascii <= 101) { if (bb.joined[e].isConnected() && (currAscii >= 97 && currAscii <= 101)) { return this.getRecResistance(bb.joined[e], startedOn); } } else if (ascii >= 102 && ascii <= 106) { if (bb.joined[e].isConnected() && (currAscii >= 102 && currAscii <= 106)) { return this.getRecResistance(bb.joined[e], startedOn); } } else { if (bb.joined[e].isConnected() && (bb.joined[e].label === node.connectedTo.end.label)) { return this.getRecResistance(bb.joined[e], startedOn); } } } } } } } } /** * RGBLED class */ export class RGBLED extends CircuitElement { /** * Raphael Glow element */ glow: any = null; /** * Set to keep track of visited nodes */ visitedNodesv2 = new Set(); /** * Check if RGB LED is properly connected */ isProperlyConnected = false; /** * Connected pin of Cathode to Arduino */ cathodePin = null; /** * RGBLED constructor * @param canvas Raphael Canvas (Paper) * @param x position x * @param y position y */ constructor(public canvas: any, x: number, y: number) { super('RGBLED', x, y, 'RGBLED.json', canvas); } /** * Initialize RGB LED */ init() { this.nodes[0].addValueListener((v) => this.logic(v)); this.nodes[2].addValueListener((v) => this.logic(v)); this.nodes[3].addValueListener((v) => this.logic(v)); } /** * Function for logic of value listener */ logic(val: number) { let negativeEnd = null; if (!this.cathodePin) { negativeEnd = this.getRecArduinov2(this.nodes[1], 'CATHODE'); this.cathodePin = negativeEnd; } if (this.cathodePin && !this.isProperlyConnected) { if (this.cathodePin.label === 'GND' || this.cathodePin.value === 0) { this.isProperlyConnected = true; } } if (this.isProperlyConnected) { this.nodes[1].setValue(val, this.nodes[0]); this.anim(); } } /** animation caller when start simulation is pressed */ anim() { if (this.glow) { this.glow.remove(); this.glow = null; } // Simulation Logic let R = (this.nodes[0].value > 0) ? 255 : 0; let B = (this.nodes[2].value > 0) ? 255 : 0; let G = (this.nodes[3].value > 0) ? 255 : 0; if (R === 0 && G === 0 && B === 0) { this.elements[1].attr({ fill: 'none' }); return; } if (R === 255 && G === 255 && B === 255) { R = G = B = 209; } this.elements[1].attr({ fill: `rgba(${R}, ${G}, ${B}, 0.8)` }); this.glow = this.elements[1].glow({ color: `rgb(${R}, ${G}, ${B})` }); } /** * Function provides component details * @param keyName Unique Class name * @param id Component id * @param body body of property box * @param title Component title */ properties(): { keyName: string; id: number; body: HTMLElement; title: string; } { const body = document.createElement('div'); return { keyName: this.keyName, id: this.id, title: 'RGB LED', body }; } /** * Removes glow */ removeGlow() { if (this.glow) { this.glow.remove(); this.glow = null; } } /** * Handles connection error */ handleConnectionError() { this.removeGlow(); } /** * Called on start simulation */ initSimulation(): void { const negativeEnd = this.getRecArduinov2(this.nodes[1], 'CATHODE'); if (negativeEnd) { this.cathodePin = negativeEnd; if (negativeEnd.label === 'GND') { this.isProperlyConnected = true; } } } /** * Remove Glow and clear the filling */ closeSimulation(): void { this.removeGlow(); this.elements[1].attr({ fill: 'none' }); this.isProperlyConnected = false; this.cathodePin = null; } /** * Return the node which is connected to arduino by recursively finding connected node * @param node The Node which need to be checked */ getRecArduinov2(node: Point, startedOn: string) { try { if (node.connectedTo.start.parent.keyName === 'ArduinoUno') { // TODO: Return if arduino is connected to start node this.visitedNodesv2.clear(); return node.connectedTo.start; } else if (node.connectedTo.end.parent.keyName === 'ArduinoUno') { // TODO: Return if arduino is connected to end node this.visitedNodesv2.clear(); return node.connectedTo.end; } else if (node.connectedTo.start.parent.keyName === 'BreadBoard' && !this.visitedNodesv2.has(node.connectedTo.start.gid)) { // TODO: Call recursive BreadBoard handler function if node is connected to Breadboard && visited nodes doesn't have node's gid return this.getRecArduinoBreadv2(node, startedOn); } else if (node.connectedTo.end.parent.keyName === 'BreadBoard' && !this.visitedNodesv2.has(node.connectedTo.end.gid)) { // TODO: Call recursive BreadBoard handler function if node is connected to Breadboard && visited nodes doesn't have node's gid return this.getRecArduinoBreadv2(node, startedOn); } else if (node.connectedTo.end.parent.keyName === 'Battery9v' && window.scope.ArduinoUno.length === 0) { // TODO: Return false if node's end is connected to 9V Battery return false; } else if (node.connectedTo.end.parent.keyName === 'CoinCell' && window.scope.ArduinoUno.length === 0) { // TODO: Return false if node's end is connected to Coin Cell return false; } else if (node.connectedTo.end.parent.keyName === 'RelayModule') { // TODO: Handle RelayModule if (startedOn === 'POSITIVE') { // If search was started on Positive node then return connected node of VCC in Relay return this.getRecArduinov2(node.connectedTo.end.parent.nodes[3], startedOn); } else if (startedOn === 'NEGATIVE') { // If search was started on Negative node then return connected node of GND in Relay return this.getRecArduinov2(node.connectedTo.end.parent.nodes[5], startedOn); } } else { // TODO: If nothing matches // IF/ELSE: Determine if start is to be used OR end for further recursion if (node.connectedTo.end.gid !== node.gid) { // Loops through all nodes in parent for (const e in node.connectedTo.end.parent.nodes) { // IF: gid is different && gid not in visited node if (node.connectedTo.end.parent.nodes[e].gid !== node.connectedTo.end.gid && !this.visitedNodesv2.has(node.connectedTo.end.parent.nodes[e].gid) && node.connectedTo.end.parent.nodes[e].isConnected()) { // add gid in visited nodes this.visitedNodesv2.add(node.connectedTo.end.parent.nodes[e].gid); // call back Arduino Recursive Fn return this.getRecArduinov2(node.connectedTo.end.parent.nodes[e], startedOn); } } } else if (node.connectedTo.start.gid !== node.gid) { // Loops through all nodes in parent for (const e in node.connectedTo.start.parent.nodes) { // IF: gid is different && gid not in visited node if (node.connectedTo.start.parent.nodes[e].gid !== node.connectedTo.start.gid && !this.visitedNodesv2.has(node.connectedTo.start.parent.nodes[e].gid) && node.connectedTo.start.parent.nodes[e].isConnected()) { // add gid in visited nodes this.visitedNodesv2.add(node.connectedTo.start.parent.nodes[e].gid); // call back Arduino Recursive Fn return this.getRecArduinov2(node.connectedTo.start.parent.nodes[e], startedOn); } } } } } catch (e) { console.warn(e); return false; } } /** * Recursive Function to handle BreadBoard * @param node Node which is to be checked for BreadBoard */ private getRecArduinoBreadv2(node: Point, startedOn: string) { // IF/ELSE: Determine if start is to be used OR end for further recursion if (node.connectedTo.end.gid !== node.gid) { const bb = (node.connectedTo.end.parent as BreadBoard); // loop through joined nodes of breadboard for (const e in bb.joined) { if (bb.joined[e].gid !== node.connectedTo.end.gid) { // Run only if substring matches if (bb.joined[e].label.substring(1, bb.joined[e].label.length) === node.connectedTo.end.label.substring(1, node.connectedTo.end.label.length)) { const ascii = node.connectedTo.end.label.charCodeAt(0); const currAscii = bb.joined[e].label.charCodeAt(0); // add gid to VisitedNode this.visitedNodesv2.add(bb.joined[e].gid); // IF/ELSE: determine which part of breadboard is connected if (ascii >= 97 && ascii <= 101) { if (bb.joined[e].isConnected() && (currAscii >= 97 && currAscii <= 101)) { return this.getRecArduinov2(bb.joined[e], startedOn); } } else if (ascii >= 102 && ascii <= 106) { if (bb.joined[e].isConnected() && (currAscii >= 102 && currAscii <= 106)) { return this.getRecArduinov2(bb.joined[e], startedOn); } } else { if (bb.joined[e].isConnected() && (bb.joined[e].label === node.connectedTo.end.label)) { return this.getRecArduinov2(bb.joined[e], startedOn); } } } } } } else if (node.connectedTo.start.gid !== node.gid) { const bb = (node.connectedTo.start.parent as BreadBoard); // loop through joined nodes of breadboard for (const e in bb.joined) { if (bb.joined[e].gid !== node.connectedTo.start.gid) { // Run only if substring matches if (bb.joined[e].label.substring(1, bb.joined[e].label.length) === node.connectedTo.start.label.substring(1, node.connectedTo.start.label.length)) { const ascii = node.connectedTo.start.label.charCodeAt(0); const currAscii = bb.joined[e].label.charCodeAt(0); // add gid to VisitedNode this.visitedNodesv2.add(bb.joined[e].gid); // IF/ELSE: determine which part of breadboard is connected if (ascii >= 97 && ascii <= 101) { if (bb.joined[e].isConnected() && (currAscii >= 97 && currAscii <= 101)) { return this.getRecArduinov2(bb.joined[e], startedOn); } } else if (ascii >= 102 && ascii <= 106) { if (bb.joined[e].isConnected() && (currAscii >= 102 && currAscii <= 106)) { return this.getRecArduinov2(bb.joined[e], startedOn); } } else { if (bb.joined[e].isConnected() && (bb.joined[e].label === node.connectedTo.end.label)) { return this.getRecArduinov2(bb.joined[e], startedOn); } } } } } } } } ================================================ FILE: ArduinoFrontend/src/app/Libs/outputs/Motors.ts ================================================ import { CircuitElement } from '../CircuitElement'; import { ArduinoUno } from './Arduino'; import { Point } from '../Point'; import { BreadBoard } from '../General'; /** * Declare Raphael so that build don't throws error */ declare var Raphael; declare var window; /** * Motor class */ export class Motor extends CircuitElement { /** * The Direction of motor +1 => Clockwise, -1 => Anticlockwise */ private dirn = 1; /** * The Center X of the motor. */ cx = 0; /** * Center Y of the motor. */ cy = 0; /** * RPM of the motor. */ rpm: any; /** * if PWM is attached */ pwmAttached = false; /** * Voltage */ voltage = -1; /** * Previous voltage */ prevVoltage = -1; /** * set of Visited nodes */ visitedNodesv2 = new Set(); /** * Motor constructor * @param canvas Raphael Canvas (Paper) * @param x position x * @param y position y */ constructor(public canvas: any, x: number, y: number) { super('Motor', x, y, 'Motor.json', canvas); } // 6v -> 9000rpm -> /** init is called when the component is complety drawn to the canvas */ init() { // Add value change Listener to circuit node this.nodes[0].addValueListener((v, cby, par) => { if (cby === this.nodes[1]) { return; } // sets the value for node this.nodes[1].setValue(v, this.nodes[0]); this.dirn = -1; if (v < 0) { this.elements[1].stop(); } else if (v === 0) { if (this.rpm && !this.pwmAttached) { this.rpm.remove(); this.rpm = null; } this.elements[1].stop(); } else { if (this.rpm && this.voltage !== this.prevVoltage) { // TODO: remove animation this.rpm.remove(); this.rpm = null; } // stop animation this.elements[1].stop(); if (v === 0) { return; } if (!this.pwmAttached) { // TODO: create animation using v if pwm is not attached if (this.rpm) { // TODO: remove animation this.rpm.remove(); this.rpm = null; } this.setAnimation(v, 'AntiClockwise'); } else { // TODO: create animation using voltage if pwm is attached if (this.voltage !== this.prevVoltage) { this.setAnimation(this.voltage, 'AntiClockwise'); // update previous voltage variable this.prevVoltage = this.voltage; } } } }); // Add value change Listener to circuit node this.nodes[1].addValueListener((v, cby, par) => { if (cby === this.nodes[0]) { return; } // sets the value for node this.nodes[0].setValue(v, this.nodes[1]); if (v < 0) { this.elements[1].stop(); } else if (v === 0) { if (this.rpm && !this.pwmAttached) { this.rpm.remove(); this.rpm = null; } this.elements[1].stop(); } else { if (this.rpm && this.voltage !== this.prevVoltage) { // TODO: remove animation this.rpm.remove(); this.rpm = null; } // stop animation this.elements[1].stop(); if (v === 0) { return; } if (!this.pwmAttached) { // TODO: create animation using v if pwm is not attached if (this.rpm) { // TODO: remove animation this.rpm.remove(); this.rpm = null; } this.setAnimation(v, 'Clockwise'); } else { // TODO: create animation using voltage if pwm is attached if (this.voltage <= 0 && this.rpm) { this.rpm.remove(); this.rpm = null; // update previous voltage variable this.prevVoltage = this.voltage; } if (this.voltage !== this.prevVoltage && this.voltage <= 6) { this.setAnimation(this.voltage, 'Clockwise'); // update previous voltage variable this.prevVoltage = this.voltage; } } } }); } /** * Use this function to rotate motor * @param volt Voltage Supplied to motor * @param direction Direction to rotate in */ setAnimation(volt, direction) { const anim = Raphael.animation({ transform: `r360` }, 400 / volt); this.elements[1].animate(anim.repeat(Infinity)); this.rpm = this.canvas.text(this.x + this.tx, this.y + this.ty - 30, `${Math.floor(1500 * volt)}RPM\n${direction}`); this.rpm.attr({ 'font-size': 15, }); } /** * Function provides component details * @param keyName Unique Class name * @param id Component id * @param body body of property box * @param title Component title */ properties(): { keyName: string; id: number; body: HTMLElement; title: string; } { const body = document.createElement('div'); return { keyName: this.keyName, id: this.id, body, title: 'Motor' }; } /** * Initialize Variable,callback and animation caller when start simulation is pressed */ initSimulation(): void { if ( this.nodes[1].connectedTo && (this.nodes[1].connectedTo.start && this.nodes[1].connectedTo.start.parent.keyName === 'ArduinoUno') || (this.nodes[1].connectedTo.end && this.nodes[1].connectedTo.end.parent.keyName === 'ArduinoUno') ) { window['showToast']('The Motor Draws more current then Arduino could supply'); } this.elements.undrag(); const ok = this.elements[1].attr(); this.cx = (ok.width / 2) + ok.x; this.cy = (ok.height / 2) + ok.y; this.elements[1].attr({ transform: '', x: ok.x + this.tx, y: ok.y + this.ty }); // determine recursively if positive pin is connected to L293D driver const posPin = this.getRecArduinov2(this.nodes[1], 'Positive'); // determine recursively if negative pin is connected to L293D driver const negPin = this.getRecArduinov2(this.nodes[0], 'Negative'); // Arduino pins that support PWM const pwmPins = [3, 5, 6, 9, 10, 11]; // if negPin or posPin are connected to L293D if (negPin || posPin) { let inArduino1; let inArduino2; // Clear visitedNodesv2 set BreadBoard.visitedNodesv2.clear(); // determine if OUT pins are connected to Arduino or not to positive if (posPin.label === 'OUT3') { inArduino1 = BreadBoard.getRecArduinov2(posPin.parent.nodes[6], 'IN3'); } else if (posPin.label === 'OUT4') { inArduino1 = BreadBoard.getRecArduinov2(posPin.parent.nodes[1], 'IN4'); } else if (posPin.label === 'OUT1') { inArduino1 = BreadBoard.getRecArduinov2(posPin.parent.nodes[9], 'IN1'); } else if (posPin.label === 'OUT2') { inArduino1 = BreadBoard.getRecArduinov2(posPin.parent.nodes[14], 'IN2'); } // Clear visitedNodesv2 set BreadBoard.visitedNodesv2.clear(); // determine if OUT pins are connected to Arduino or not to negative if (negPin.label === 'OUT3') { inArduino2 = BreadBoard.getRecArduinov2(negPin.parent.nodes[6], 'IN3'); } else if (negPin.label === 'OUT4') { inArduino2 = BreadBoard.getRecArduinov2(negPin.parent.nodes[1], 'IN4'); } else if (negPin.label === 'OUT1') { inArduino2 = BreadBoard.getRecArduinov2(posPin.parent.nodes[9], 'IN1'); } else if (negPin.label === 'OUT2') { inArduino2 = BreadBoard.getRecArduinov2(posPin.parent.nodes[14], 'IN2'); } if (inArduino1) { // TODO: add PWM if PWM pin if (inArduino1 && pwmPins.indexOf(parseInt(inArduino1.label.substr(1), 10)) !== -1) { // TODO: add PWM if positive is PWM this.addPwmArduino(inArduino1.parent, inArduino1); } } if (inArduino2) { // TODO: add PWM if PWM pin if (inArduino2 && pwmPins.indexOf(parseInt(inArduino2.label.substr(1), 10)) !== -1) { // TODO: add PWM if positive is PWM this.addPwmArduino(inArduino2.parent, inArduino2); } } // return to stop the function here return; } // Prep PWM const arduinoEnd: any = BreadBoard.getRecArduinov2(this.nodes[1], 'Positive'); const arduinoEndNegative: any = BreadBoard.getRecArduinov2(this.nodes[0], 'Negative'); // do not run addPwm if arduino is not connected if (!arduinoEnd || !arduinoEndNegative) { return; } // Only add pwm if connected to a pwm pin in arduino if (arduinoEnd && pwmPins.indexOf(parseInt(arduinoEnd.label.substr(1), 10)) !== -1) { // TODO: add PWM if positive is PWM this.addPwmArduino(arduinoEnd.parent, arduinoEnd); } else if (arduinoEndNegative && pwmPins.indexOf(parseInt(arduinoEndNegative.label.substr(1), 10)) !== -1) { // TODO: add PWM if negative is PWM this.addPwmArduino(arduinoEndNegative.parent, arduinoEndNegative); } else { this.pwmAttached = false; } } /** * Use this function to add PWM to any node of Arduino * @param arduino Arduino instance * @param end Node to be enabled with PWM */ addPwmArduino(arduino, end) { (arduino as ArduinoUno).addPWM(end, (v, p) => { // Calculate voltage of pwm pin this.voltage = v / 100; // If voltage is greater than 6: make PWM attached false if (this.voltage > 6 || this.voltage < 0) { this.pwmAttached = false; this.voltage = -1; } else { this.pwmAttached = true; } }); } /** Function removes all animations and callbacks */ closeSimulation(): void { this.elements[1].stop(); const ok = this.elements[1].attr(); this.elements[1].attr({ transform: `t${this.tx},${this.ty}`, x: ok.x - this.tx, y: ok.y - this.ty }); if (this.rpm) { this.rpm.remove(); this.rpm = null; } this.setDragListeners(); this.pwmAttached = false; this.voltage = -1; this.prevVoltage = -1; this.visitedNodesv2.clear(); } /** * Returns node connected to L293D * @param node node to start search on * @param startedOn label of node search started on * @returns L293D connected Node */ getRecArduinov2(node: Point, startedOn: string) { try { if (node.connectedTo.start.parent.keyName === 'L293D') { // TODO: Return if L293D is connected to start node return node.connectedTo.start; } else if (node.connectedTo.end.parent.keyName === 'L293D') { // TODO: Return if L293D is connected to end node return node.connectedTo.end; } else if (node.connectedTo.start.parent.keyName === 'BreadBoard' && !this.visitedNodesv2.has(node.connectedTo.start.gid)) { // TODO: Call recursive BreadBoard handler function if node is connected to Breadboard && visited nodes doesn't have node's gid return this.getRecArduinoBreadv2(node, startedOn); } else if (node.connectedTo.end.parent.keyName === 'BreadBoard' && !this.visitedNodesv2.has(node.connectedTo.end.gid)) { // TODO: Call recursive BreadBoard handler function if node is connected to Breadboard && visited nodes doesn't have node's gid return this.getRecArduinoBreadv2(node, startedOn); } else if (node.connectedTo.end.parent.keyName === 'Battery9v' && window.scope.ArduinoUno.length === 0) { // TODO: Return false if node's end is connected to 9V Battery return false; } else if (node.connectedTo.end.parent.keyName === 'CoinCell' && window.scope.ArduinoUno.length === 0) { // TODO: Return false if node's end is connected to Coin Cell return false; } else if (node.connectedTo.end.parent.keyName === 'RelayModule') { // TODO: Handle RelayModule if (startedOn === 'POSITIVE') { // If search was started on Positive node then return connected node of VCC in Relay return this.getRecArduinov2(node.connectedTo.end.parent.nodes[3], startedOn); } else if (startedOn === 'NEGATIVE') { // If search was started on Negative node then return connected node of GND in Relay return this.getRecArduinov2(node.connectedTo.end.parent.nodes[5], startedOn); } } else { // TODO: If nothing matches // IF/ELSE: Determine if start is to be used OR end for further recursion if (node.connectedTo.end.gid !== node.gid) { // Loops through all nodes in parent for (const e in node.connectedTo.end.parent.nodes) { // IF: gid is different && gid not in visited node if (node.connectedTo.end.parent.nodes[e].gid !== node.connectedTo.end.gid && !this.visitedNodesv2.has(node.connectedTo.end.parent.nodes[e].gid) && node.connectedTo.end.parent.nodes[e].isConnected()) { // add gid in visited nodes this.visitedNodesv2.add(node.connectedTo.end.parent.nodes[e].gid); // call back L293D Recursive Fn return this.getRecArduinov2(node.connectedTo.end.parent.nodes[e], startedOn); } } } else if (node.connectedTo.start.gid !== node.gid) { // Loops through all nodes in parent for (const e in node.connectedTo.start.parent.nodes) { // IF: gid is different && gid not in visited node if (node.connectedTo.start.parent.nodes[e].gid !== node.connectedTo.start.gid && !this.visitedNodesv2.has(node.connectedTo.start.parent.nodes[e].gid) && node.connectedTo.start.parent.nodes[e].isConnected()) { // add gid in visited nodes this.visitedNodesv2.add(node.connectedTo.start.parent.nodes[e].gid); // call back L293D Recursive Fn return this.getRecArduinov2(node.connectedTo.start.parent.nodes[e], startedOn); } } } } } catch (e) { console.warn(e); return false; } } /** * Recursive Function to handle BreadBoard * @param node Node which is to be checked for BreadBoard */ getRecArduinoBreadv2(node: Point, startedOn: string) { // IF/ELSE: Determine if start is to be used OR end for further recursion if (node.connectedTo.end.gid !== node.gid) { const bb = (node.connectedTo.end.parent as BreadBoard); // loop through joined nodes of breadboard for (const e in bb.joined) { if (bb.joined[e].gid !== node.connectedTo.end.gid) { // Run only if substring matches if (bb.joined[e].label.substring(1, bb.joined[e].label.length) === node.connectedTo.end.label.substring(1, node.connectedTo.end.label.length)) { const ascii = node.connectedTo.end.label.charCodeAt(0); const currAscii = bb.joined[e].label.charCodeAt(0); // add gid to VisitedNode this.visitedNodesv2.add(bb.joined[e].gid); // IF/ELSE: determine which part of breadboard is connected if (ascii >= 97 && ascii <= 101) { if (bb.joined[e].isConnected() && (currAscii >= 97 && currAscii <= 101)) { return this.getRecArduinov2(bb.joined[e], startedOn); } } else if (ascii >= 102 && ascii <= 106) { if (bb.joined[e].isConnected() && (currAscii >= 102 && currAscii <= 106)) { return this.getRecArduinov2(bb.joined[e], startedOn); } } else { if (bb.joined[e].isConnected() && (bb.joined[e].label === node.connectedTo.end.label)) { return this.getRecArduinov2(bb.joined[e], startedOn); } } } } } } else if (node.connectedTo.start.gid !== node.gid) { const bb = (node.connectedTo.start.parent as BreadBoard); // loop through joined nodes of breadboard for (const e in bb.joined) { if (bb.joined[e].gid !== node.connectedTo.start.gid) { // Run only if substring matches if (bb.joined[e].label.substring(1, bb.joined[e].label.length) === node.connectedTo.start.label.substring(1, node.connectedTo.start.label.length)) { const ascii = node.connectedTo.start.label.charCodeAt(0); const currAscii = bb.joined[e].label.charCodeAt(0); // add gid to VisitedNode this.visitedNodesv2.add(bb.joined[e].gid); // IF/ELSE: determine which part of breadboard is connected if (ascii >= 97 && ascii <= 101) { if (bb.joined[e].isConnected() && (currAscii >= 97 && currAscii <= 101)) { return this.getRecArduinov2(bb.joined[e], startedOn); } } else if (ascii >= 102 && ascii <= 106) { if (bb.joined[e].isConnected() && (currAscii >= 102 && currAscii <= 106)) { return this.getRecArduinov2(bb.joined[e], startedOn); } } else { if (bb.joined[e].isConnected() && (bb.joined[e].label === node.connectedTo.end.label)) { return this.getRecArduinov2(bb.joined[e], startedOn); } } } } } } } } /** * MotorDriver L298N class */ export class L298N extends CircuitElement { /** * Pin Name mapped to Pins */ pinNamedMap: any = {}; /** * Speed of Motor A in range of 0 to 5. */ speedA = 5; /** * Speed of Motor B in range of 0 to 5 */ speedB = 5; /** * Previous values of the pins. */ prevValues: any = { IN1: -1, IN2: -1, IN3: -1, IN4: -1 }; /** * MotorDriver L298N constructor * @param canvas Raphael Canvas (Paper) * @param x position x * @param y position y */ constructor(public canvas: any, x: number, y: number) { super('L298N', x, y, 'L298N.json', canvas); } /** * Initialize motor class. */ init() { for (const node of this.nodes) { this.pinNamedMap[node.label] = node; } this.pinNamedMap['V IN'].addValueListener(v => { this.pinNamedMap['GND'].setValue(v, this.pinNamedMap['GND']); if (v >= 5) { this.pinNamedMap['5V IN'].setValue(5, this.pinNamedMap['5V IN']); } this.update(); }); this.pinNamedMap['IN1'].addValueListener(v => { if (v !== this.prevValues.IN1) { this.prevValues.IN1 = v; this.update(); } }); this.pinNamedMap['IN2'].addValueListener(v => { if (v !== this.prevValues.IN2) { this.prevValues.IN2 = v; this.update(); } }); this.pinNamedMap['IN3'].addValueListener(v => { if (v !== this.prevValues.IN3) { this.prevValues.IN3 = v; this.update(); } }); this.pinNamedMap['IN4'].addValueListener(v => { if (v !== this.prevValues.IN4) { this.prevValues.IN4 = v; this.update(); } }); } /** * Simulation Logic For L298N motor driver */ update() { setTimeout(() => { if (this.pinNamedMap['IN1'].value > 0 && this.pinNamedMap['IN2'].value > 0) { window['showToast']('Both IN1 and IN2 Pins are High!'); return; } if (this.pinNamedMap['IN3'].value > 0 && this.pinNamedMap['IN4'].value > 0) { window['showToast']('Both IN3 and IN4 Pins are High!'); return; } }, 100); if (this.pinNamedMap['IN1'].value > 0) { this.pinNamedMap['Terminal 2'].setValue( this.pinNamedMap['V IN'].value * (this.speedA / 5), this.pinNamedMap['Terminal 2'] ); } else if (this.pinNamedMap['IN2'].value > 0) { this.pinNamedMap['Terminal 1'].setValue( this.pinNamedMap['V IN'].value * (this.speedA / 5), this.pinNamedMap['Terminal 1'] ); } else { this.pinNamedMap['Terminal 1'].setValue( 0, this.pinNamedMap['Terminal 1'] ); } if (this.pinNamedMap['IN3'].value > 0) { this.pinNamedMap['Terminal 4'].setValue( this.pinNamedMap['V IN'].value * (this.speedB / 5), this.pinNamedMap['Terminal 4'] ); } else if (this.pinNamedMap['IN4'].value > 0) { this.pinNamedMap['Terminal 3'].setValue( this.pinNamedMap['V IN'].value * (this.speedB / 5), this.pinNamedMap['Terminal 3'] ); } else { this.pinNamedMap['Terminal 3'].setValue( 0, this.pinNamedMap['Terminal 3'] ); } } /** * Function provides component details * @param keyName Unique Class name * @param id Component id * @param body body of property box * @param title Component title */ properties(): { keyName: string; id: number; body: HTMLElement; title: string; } { const body = document.createElement('div'); body.innerText = 'If you Don\'t Connect The ENA and ENB Pins it automatically connects to the 5V suppy'; return { keyName: this.keyName, id: this.id, body, title: 'Motor Driver (L298N)' }; } /** * Return the node which is connected to arduino * @param node The Node which need to be checked */ private getArduino(node: Point) { if ( node.connectedTo && node.connectedTo.start && node.connectedTo.start.parent.keyName === 'ArduinoUno' ) { return node.connectedTo.start; } if ( node.connectedTo && node.connectedTo.end && node.connectedTo.end.parent.keyName === 'ArduinoUno' ) { return node.connectedTo.end; } return null; } /** * Called on Start Simulation */ initSimulation(): void { const arduinoEnd: any = this.getArduino(this.pinNamedMap['ENB']); if (arduinoEnd) { const arduino = arduinoEnd.parent; (arduino as ArduinoUno).addPWM(arduinoEnd, (v, p) => { this.speedA = v / 100; this.update(); }); } const arduinoEnd1: any = this.getArduino(this.pinNamedMap['ENA']); if (arduinoEnd1) { const arduino = arduinoEnd1.parent; (arduino as ArduinoUno).addPWM(arduinoEnd1, (v, p) => { this.speedB = v / 100; this.update(); }); } } /** * Called on Stop Simulation */ closeSimulation(): void { this.pinNamedMap['IN1'].value = -1; this.pinNamedMap['IN2'].value = -1; this.pinNamedMap['IN3'].value = -1; this.pinNamedMap['IN4'].value = -1; this.speedA = 5; this.speedB = 5; this.prevValues = { IN1: -1, IN2: -1, IN3: -1, IN4: -1 }; } } /** * Servo Motor class */ export class ServoMotor extends CircuitElement { /** * The Connected Arduino */ arduino: ArduinoUno = null; /** * Set to keep track of visited nodes */ visitedNodesv2 = new Set(); /** * Pin Name mapped to Pins */ pinNamedMap: any = {}; /** * Flag to see if Servo is connected properly */ connected = true; /** * Servo constructor * @param canvas Raphael Canvas (Paper) * @param x position x * @param y position y */ constructor(public canvas: any, x: number, y: number) { super('ServoMotor', x, y, 'ServoMotor.json', canvas); } /** * Initializ Servo Motor */ init() { // Initializing pinNamedMap for (const node of this.nodes) { this.pinNamedMap[node.label] = node; } this.nodes[1].addValueListener((v) => { if (v < 4 || v > 6) { window['showToast']('Low Voltage Applied'); } this.nodes[0].setValue(v, this.nodes[1]); }); } /** * Animate rotation of the shaft. * @param angle The Angle of the shaft * @param duration How much time it takes it to move */ animate(angle: number, duration: number = 10) { const anim = Raphael.animation({ transform: `r${angle}` }, duration); this.elements[1].animate(anim); } /** * Function provides component details * @param keyName Unique Class name * @param id Component id * @param body body of property box * @param title Component title */ properties(): { keyName: string; id: number; body: HTMLElement; title: string; } { const body = document.createElement('div'); return { keyName: this.keyName, id: this.id, body, title: 'Servo Motor' }; } /** * Called on Start Simulation */ initSimulation(): void { // Check Connection if (!this.areAllNodesConnected()) { window['showToast']('Please Connect Servo Properly!'); this.connected = false; return; } const gndPin = this.getRecArduinov2(this.pinNamedMap['GND'], 'GND'); const powerPin = this.getRecArduinov2(this.pinNamedMap['POWER'], 'POWER'); const signalPin = this.getRecArduinov2(this.pinNamedMap['Signal'], 'Signal'); // Checks if signal pin is connected to an Arduino if (signalPin) { this.arduino = signalPin.parent as ArduinoUno; } else { window['showToast']('Arduino not found.'); return; } if (powerPin && gndPin) { if (gndPin.label !== 'GND' || powerPin.label !== '5V') { this.connected = false; return; } } else { this.connected = false; return; } this.elements.undrag(); const ok = this.elements[1].attr(); this.elements[1].attr({ transform: '', x: ok.x + this.tx, y: ok.y + this.ty }); // Add a Servo event on arduino this.arduino.addServo(signalPin, (angle, prev) => { if (angle > 182) { return; } const duration = Math.abs(angle - (prev > 0 ? prev : 0)) * 5; this.animate(angle, duration); }); } /** * Called on Stop Simulation */ closeSimulation(): void { if (!this.connected) { this.connected = true; return; } this.arduino = null; this.elements[1].stop(); const ok = this.elements[1].attr(); this.elements[1].attr({ transform: `t${this.tx},${this.ty}`, x: ok.x - this.tx, y: ok.y - this.ty }); this.setDragListeners(); } /** * Returns node connected to ArduinoUno * @param node node to start search on * @param startedOn label of node search started on * @returns ArduinoUno connected Node */ getRecArduinov2(node: Point, startedOn: string) { try { if (node.connectedTo.start.parent.keyName === 'ArduinoUno') { // TODO: Return if ArduinoUno is connected to start node this.visitedNodesv2.clear(); return node.connectedTo.start; } else if (node.connectedTo.end.parent.keyName === 'ArduinoUno') { // TODO: Return if ArduinoUno is connected to end node this.visitedNodesv2.clear(); return node.connectedTo.end; } else if (node.connectedTo.start.parent.keyName === 'BreadBoard' && !this.visitedNodesv2.has(node.connectedTo.start.gid)) { // TODO: Call recursive BreadBoard handler function if node is connected to Breadboard && visited nodes doesn't have node's gid return this.getRecArduinoBreadv2(node, startedOn); } else if (node.connectedTo.end.parent.keyName === 'BreadBoard' && !this.visitedNodesv2.has(node.connectedTo.end.gid)) { // TODO: Call recursive BreadBoard handler function if node is connected to Breadboard && visited nodes doesn't have node's gid return this.getRecArduinoBreadv2(node, startedOn); } else if (node.connectedTo.end.parent.keyName === 'Battery9v' && window.scope.ArduinoUno.length === 0) { // TODO: Return false if node's end is connected to 9V Battery return false; } else if (node.connectedTo.end.parent.keyName === 'CoinCell' && window.scope.ArduinoUno.length === 0) { // TODO: Return false if node's end is connected to Coin Cell return false; } else if (node.connectedTo.end.parent.keyName === 'RelayModule') { // TODO: Handle RelayModule if (startedOn === 'POSITIVE') { // If search was started on Positive node then return connected node of VCC in Relay return this.getRecArduinov2(node.connectedTo.end.parent.nodes[3], startedOn); } else if (startedOn === 'NEGATIVE') { // If search was started on Negative node then return connected node of GND in Relay return this.getRecArduinov2(node.connectedTo.end.parent.nodes[5], startedOn); } } else { // TODO: If nothing matches // IF/ELSE: Determine if start is to be used OR end for further recursion if (node.connectedTo.end.gid !== node.gid) { // Loops through all nodes in parent for (const e in node.connectedTo.end.parent.nodes) { // IF: gid is different && gid not in visited node if (node.connectedTo.end.parent.nodes[e].gid !== node.connectedTo.end.gid && !this.visitedNodesv2.has(node.connectedTo.end.parent.nodes[e].gid) && node.connectedTo.end.parent.nodes[e].isConnected()) { // add gid in visited nodes this.visitedNodesv2.add(node.connectedTo.end.parent.nodes[e].gid); // call back L293D Recursive Fn return this.getRecArduinov2(node.connectedTo.end.parent.nodes[e], startedOn); } } } else if (node.connectedTo.start.gid !== node.gid) { // Loops through all nodes in parent for (const e in node.connectedTo.start.parent.nodes) { // IF: gid is different && gid not in visited node if (node.connectedTo.start.parent.nodes[e].gid !== node.connectedTo.start.gid && !this.visitedNodesv2.has(node.connectedTo.start.parent.nodes[e].gid) && node.connectedTo.start.parent.nodes[e].isConnected()) { // add gid in visited nodes this.visitedNodesv2.add(node.connectedTo.start.parent.nodes[e].gid); // call back L293D Recursive Fn return this.getRecArduinov2(node.connectedTo.start.parent.nodes[e], startedOn); } } } } } catch (e) { console.warn(e); return false; } } /** * Recursive Function to handle BreadBoard * @param node Node which is to be checked for BreadBoard */ getRecArduinoBreadv2(node: Point, startedOn: string) { // IF/ELSE: Determine if start is to be used OR end for further recursion if (node.connectedTo.end.gid !== node.gid) { const bb = (node.connectedTo.end.parent as BreadBoard); // loop through joined nodes of breadboard for (const e in bb.joined) { if (bb.joined[e].gid !== node.connectedTo.end.gid) { // Run only if substring matches if (bb.joined[e].label.substring(1, bb.joined[e].label.length) === node.connectedTo.end.label.substring(1, node.connectedTo.end.label.length)) { const ascii = node.connectedTo.end.label.charCodeAt(0); const currAscii = bb.joined[e].label.charCodeAt(0); // add gid to VisitedNode this.visitedNodesv2.add(bb.joined[e].gid); // IF/ELSE: determine which part of breadboard is connected if (ascii >= 97 && ascii <= 101) { if (bb.joined[e].isConnected() && (currAscii >= 97 && currAscii <= 101)) { return this.getRecArduinov2(bb.joined[e], startedOn); } } else if (ascii >= 102 && ascii <= 106) { if (bb.joined[e].isConnected() && (currAscii >= 102 && currAscii <= 106)) { return this.getRecArduinov2(bb.joined[e], startedOn); } } else { if (bb.joined[e].isConnected() && (bb.joined[e].label === node.connectedTo.end.label)) { return this.getRecArduinov2(bb.joined[e], startedOn); } } } } } } else if (node.connectedTo.start.gid !== node.gid) { const bb = (node.connectedTo.start.parent as BreadBoard); // loop through joined nodes of breadboard for (const e in bb.joined) { if (bb.joined[e].gid !== node.connectedTo.start.gid) { // Run only if substring matches if (bb.joined[e].label.substring(1, bb.joined[e].label.length) === node.connectedTo.start.label.substring(1, node.connectedTo.start.label.length)) { const ascii = node.connectedTo.start.label.charCodeAt(0); const currAscii = bb.joined[e].label.charCodeAt(0); // add gid to VisitedNode this.visitedNodesv2.add(bb.joined[e].gid); // IF/ELSE: determine which part of breadboard is connected if (ascii >= 97 && ascii <= 101) { if (bb.joined[e].isConnected() && (currAscii >= 97 && currAscii <= 101)) { return this.getRecArduinov2(bb.joined[e], startedOn); } } else if (ascii >= 102 && ascii <= 106) { if (bb.joined[e].isConnected() && (currAscii >= 102 && currAscii <= 106)) { return this.getRecArduinov2(bb.joined[e], startedOn); } } else { if (bb.joined[e].isConnected() && (bb.joined[e].label === node.connectedTo.end.label)) { return this.getRecArduinov2(bb.joined[e], startedOn); } } } } } } } /** * Function to check if all nodes of component is connected */ areAllNodesConnected(): boolean { for (const node of this.nodes) { if (!node.isConnected()) { return false; } } return true; } } ================================================ FILE: ArduinoFrontend/src/app/alert/alert-modal/alert-modal.component.css ================================================ .close-button{ margin: auto; } .content-message{ text-align: center; } ================================================ FILE: ArduinoFrontend/src/app/alert/alert-modal/alert-modal.component.html ================================================
{{ data.message }}
================================================ FILE: ArduinoFrontend/src/app/alert/alert-modal/alert-modal.component.spec.ts ================================================ ================================================ FILE: ArduinoFrontend/src/app/alert/alert-modal/alert-modal.component.ts ================================================ import { Component, Inject } from '@angular/core'; import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material'; /** * Interface For Alert Dialog data * @param message Message to be shown in the alert box * @param buttonText Text to be shown on the confirmation button */ interface AlertDialogData { message: string; buttonText?: string; } /** * Class For Alert Modal Component */ @Component({ selector: 'app-alert-modal', templateUrl: './alert-modal.component.html', styleUrls: ['./alert-modal.component.css'] }) export class AlertModalComponent { /** * Constructor For Alert Modal * @param dialogRef Material Dialog Reference * @param data Data to be used in the alert box */ constructor(public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data: AlertDialogData) { } close(): void { // Close Dialog this.dialogRef.close(); } } ================================================ FILE: ArduinoFrontend/src/app/alert/alert-service/alert.service.spec.ts ================================================ ================================================ FILE: ArduinoFrontend/src/app/alert/alert-service/alert.service.ts ================================================ import { Injectable } from '@angular/core'; import { AlertModalComponent } from '../alert-modal/alert-modal.component'; import { MatDialog } from '@angular/material'; import { ConfirmModalComponent } from '../confirm-modal/confirm-modal.component'; import { OptionModalComponent } from '../option-modal/option-modal.component'; @Injectable({ providedIn: 'root' }) export class AlertService { private static dialog: MatDialog; constructor(public dialog: MatDialog) { AlertService.dialog = dialog; } static showAlert(message: string, buttonText: string = 'OK') { const dialogRef = AlertService.dialog.open(AlertModalComponent, { data: { message, buttonText } }); dialogRef.afterClosed(); } static showConfirm(message, yesFunction: () => any, noFunction?: () => any, yesButtonText: string = 'Yes', noButtonText: string = 'No') { const dialogRef = AlertService.dialog.open(ConfirmModalComponent, { data: { message, yesButtonText, noButtonText, yesFunction, noFunction, }, }); dialogRef.afterClosed().subscribe(value => { if (value) { yesFunction(); } else { noFunction(); } }); } static showOptions( message, option1Function: () => any, option2Function?: () => any, cancelFunction?: () => any, option1Text: string = 'Option 1', option2Text: string = 'Option 2', cancelButtonText: string = 'Cancel') { const dialogRef = AlertService.dialog.open(OptionModalComponent, { data: { message, option1Text, option2Text, cancelButtonText, option1Function, option2Function, cancelFunction, }, }); dialogRef.afterClosed().subscribe(value => { if (value === 1) { option1Function(); } else if (value === 2) { option2Function(); } else { cancelFunction(); } }); } static showCustom(component, data, subscriber) { const dialogRef = AlertService.dialog.open(component, { data }); dialogRef.afterClosed().subscribe(subscriber); } } ================================================ FILE: ArduinoFrontend/src/app/alert/confirm-modal/confirm-modal.component.css ================================================ .confirm-buttons{ text-align: center; display: block; } .response-button { display: inline-block; } ================================================ FILE: ArduinoFrontend/src/app/alert/confirm-modal/confirm-modal.component.html ================================================
{{ data.message }}
================================================ FILE: ArduinoFrontend/src/app/alert/confirm-modal/confirm-modal.component.spec.ts ================================================ ================================================ FILE: ArduinoFrontend/src/app/alert/confirm-modal/confirm-modal.component.ts ================================================ import { Component, Inject } from '@angular/core'; import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material'; /** * Interface For Confirm Dialog data * @param message Message to be shown in the confirm box * @param yesButtonText Text to be shown on the confirmation button * @param noButtonText Text to be shown on the confirmation button * @param yesFunction Callback function after clicking yes * @param noFunction Callback function after clicking no */ interface ConfirmDialogData { message: string; yesButtonText?: string; noButtonText?: string; cancelButtonText?: string; yesFunction: () => any; noFunction?: () => any; cancelFunction?: () => any; } /** * Class For Confirm Modal Component */ @Component({ selector: 'app-confirm-modal', templateUrl: './confirm-modal.component.html', styleUrls: ['./confirm-modal.component.css'] }) export class ConfirmModalComponent { /** * Constructor For Alert Modal * @param dialogRef Material Dialog Reference * @param data Data to be used in the alert box */ constructor(public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data: ConfirmDialogData) { } onConfirm(): void { // Close the dialog, return true this.dialogRef.close(true); } onDeny(): void { // Close the dialog, return false this.dialogRef.close(false); } onCancel(): void { // Close the dialog, return null this.dialogRef.close(null); } } ================================================ FILE: ArduinoFrontend/src/app/alert/option-modal/option-modal.component.css ================================================ .option-buttons{ text-align: center; display: block; } .response-button { display: block; width: 100%; margin: 10px 0px !important; } ================================================ FILE: ArduinoFrontend/src/app/alert/option-modal/option-modal.component.html ================================================
{{ data.message }}
================================================ FILE: ArduinoFrontend/src/app/alert/option-modal/option-modal.component.ts ================================================ import { Component, Inject } from '@angular/core'; import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material'; /** * Interface For option Dialog data * @param message Message to be shown in the option box * @param option1Text Text to be shown for option1 button * @param option2Text Text to be shown for option2 button * @param cancelButtonText Text to be shown for cancelling * @param option1Function Callback function after selecting option1 * @param option2Function Callback function after selecting option2 */ interface OptionDialogData { message: string; option1Text?: string; option2Text?: string; cancelButtonText?: string; option1Function: () => any; option2Function?: () => any; cancelFunction?: () => any; } /** * Class For Option Modal Component */ @Component({ selector: 'app-option-modal', templateUrl: './option-modal.component.html', styleUrls: ['./option-modal.component.css'] }) export class OptionModalComponent { /** * Constructor For Alert Modal * @param dialogRef Material Dialog Reference * @param data Data to be used in the alert box */ constructor(public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data: OptionDialogData) { } onOption1(): void { // Close the dialog, return 1 this.dialogRef.close(1); } onOption2(): void { // Close the dialog, return 2 this.dialogRef.close(2); } onDismiss(): void { // Close the dialog, return 0 this.dialogRef.close(0); } } ================================================ FILE: ArduinoFrontend/src/app/api.service.spec.ts ================================================ import { TestBed } from '@angular/core/testing'; import { ApiService } from './api.service'; import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; import { RouterTestingModule } from '@angular/router/testing'; describe('ApiService', () => { beforeEach(() => TestBed.configureTestingModule({ imports: [HttpClientTestingModule, RouterTestingModule] })); it('should be created', () => { const service: ApiService = TestBed.get(ApiService); expect(service).toBeTruthy(); }); }); ================================================ FILE: ArduinoFrontend/src/app/api.service.ts ================================================ import { Injectable } from '@angular/core'; import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; import { Observable, Subject } from 'rxjs'; import { environment } from '../environments/environment'; import { Login } from './Libs/Login'; import { ActivatedRoute } from '@angular/router'; /** * Class For handlind API. */ /** * Injectable */ @Injectable({ providedIn: 'root' }) export class ApiService { /** * The API URL */ url = environment.API_URL; /** * Constructor for api * @param http For http request & response */ isAuthenticated = new Subject(); constructor( private http: HttpClient, public aroute: ActivatedRoute ) { } /** * Get Http Headers only for those API calls where token is not mandatory * @param token Login Token * @returns Http headers as per given parameter and environment */ httpHeaders(token: string) { if (environment.production) { if (token) { return new HttpHeaders({ 'Content-Type': 'application/json', Authorization: `Token ${token}`, 'Access-Control-Allow-Origin': '*', }); } else { return new HttpHeaders({ 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*', }); } } else { if (token) { return new HttpHeaders({ 'Content-Type': 'application/json', Authorization: `Token ${token}`, }); } else { return new HttpHeaders({ 'Content-Type': 'application/json', }); } } } /** * Save Project to Cloud * @param data The Project data * @param token Auth Token */ saveProject(data: any, token: string) { if (data.description === '') { data.description = null; } return this.http.post(`${this.url}api/save`, data, { headers: this.httpHeaders(token), }); } /** * Save Project to Gallery * @param data The Project gallery data * @param token Auth Token */ saveProjectToGallery(data: any, token: string) { return this.http.post(`${this.url}api/save/gallery/` + data.save_id, data, { headers: new HttpHeaders({ // 'Content-Type': 'application/json', Authorization: `Token ${token}`, // 'Access-Control-Allow-Origin': '*', }) }); } /** * List all the project created by an user * @param token Auth Token */ listProject(token) { return this.http.get(`${this.url}api/save/arduino/list`, { headers: this.httpHeaders(token) }); } /** * Read Project using id * @param id Read Project ID * @param branch Branch of Variation * @param version Version of Variation * @param token Auth Token */ readProject(id: string, branch: string, version: string, token: string) { let url = `${this.url}api/save/${id}`; url += version ? `/${version}` : ''; url += branch ? `/${branch}` : ''; return this.http.get(url, { headers: this.httpHeaders(token) }); } /** * Find Project using Project name * @param title Project name that needs to be searched * @param token Auth Token */ searchProject(title: string, token: string) { const url = encodeURI(`${this.url}api/save/search?name__icontains=${title}&is_arduino=true`); return this.http.get(url, { headers: this.httpHeaders(token), }); } /** * Update Project from the project id * @param id Project id * @param data Updated Project Data * @param token Auth Token */ updateProject(id: string, data: any, token: string) { data.save_id = id; return this.http.post(`${this.url}api/save`, data, { headers: this.httpHeaders(token), }); } /** * Delete Project From Database * @param id Project id * @param token Auth Token */ deleteProject(id, token): Observable { return this.http.delete(`${this.url}api/save/${id}`, { headers: new HttpHeaders({ 'Content-Type': 'application/json', Authorization: `Token ${token}`, // 'Access-Control-Allow-Origin': '*', }), observe: 'response', }); } /** * Compiles INO code and returns the status and task id * @param data The Code and id of arduino */ compileCodeINO(data: any): Observable { return this.http.post(`${this.url}api/arduino/compileINO`, data); } /** * Compiles IN code and returns the status and task id * @param data The Code and id of arduino */ compileCodeInlineAssembly(data: any): Observable { return this.http.post(`${this.url}api/arduino/compileInlineAssembly`, data); } /** * Returns the hex of the compiled code * @param taskId Compilation Task ID */ getHex(taskId: string): Observable { return this.http.get(`${this.url}api/arduino/compile/status?task_id=${taskId}`); } /** * returns the user name and email * @param token Auth Token */ userInfo(token: string): Observable { return this.http.get(`${this.url}api/auth/users/me`, { headers: this.httpHeaders(token), }); } /** * Enable/Disable Sharing a Project * @param id Project id * @param on Sharing State * @param token Auth token */ Sharing(id: string, branch: string, version: string, on: boolean, token: string) { const state = on ? 'on' : 'off'; return this.http.post(`${this.url}api/save/${id}/sharing/${state}/${version}/${branch}`, {}, { headers: this.httpHeaders(token) }); } /** * Fetch Samples */ fetchSamples(): Observable { // return this.http.get('./assets/samples/Samples.json'); return this.http.get(`${this.url}api/save/gallery?is_arduino=true`); } /** * Fetchs single project gallery to simulator * @param id unique id for gallery circuit */ fetchSingleProjectToGallery(id: any) { return this.http.get(`${this.url}api/save/gallery/` + id); } /** * Deletes single project from gallery * @param id Project id * @param token Auth Token */ deleteProjectFromGallery(id: any, token: any) { return this.http.delete(`${this.url}api/save/gallery/` + id, { headers: new HttpHeaders({ Authorization: `Token ${token}`, }) }); } /** * List all the variations with save id * @param id Project id * @param token Auth Token */ listAllVersions(id, token): Observable { return this.http.get(`${this.url}api/save/versions/${id}`, { headers: this.httpHeaders(token) }); } /** * Delete specific branch * @param id Project Id * @param branch Branch of variation * @param token Auth Token */ deleteBranch(id, branch, token) { return this.http.delete(`${this.url}api/save/versions/${id}/${branch}`, { headers: this.httpHeaders(token), }); } /** * Delete specifit variation * @param id Project Id * @param branch Branch of variation * @param version Version of variation * @param token Auth Token */ deleteVariation(id, branch, version, token) { return this.http.delete(`${this.url}api/save/versions/${version}/${id}/${branch}`, { headers: this.httpHeaders(token), }); } /** * Request to fetch LTI App details for id of the given circuit * @param id save_id of the circuit * @param token Auth Token */ existLTIURL(id: string, token: string) { return this.http.get(`${this.url}api/lti/exist/${id}`, { headers: this.httpHeaders(token), }); } /** * Request to fetch Arduino LTI App details for id of the given circuit * @param id save_id of the circuit * @param token Auth Token */ ArduinoexistLTIURL(id: string, token: string) { return this.http.get(`${this.url}api/lti/exist/arduino/${id}`, { headers: this.httpHeaders(token), }); } /** * Request to save LTI details at the backend * @param token Auth Token * @param data LTI Details containing ids of model and student circuits, consumer and secret keys */ saveLTIDetails(token: string, data: any) { return this.http.post(`${this.url}api/lti/build/`, data, { headers: this.httpHeaders(token), }); } /** * Request to save LTI details at the backend * @param token Auth Token * @param data LTI Details containing ids of model and student circuits, consumer and secret keys */ saveArduinoLTIDetails(token: string, data: any) { return this.http.post(`${this.url}api/lti/build/arduino`, data, { headers: this.httpHeaders(token), }); } /** * Resuest for view code * @param id Arduino LTI session id * @param token Auth Token * @returns Boolean for student being able to see the code */ viewArduinoCode(id, token): Observable { return this.http.get(`${this.url}api/lti/arduino/viewcode/${id}`, { headers: this.httpHeaders(token), }); } /** * Requests for deleting the LTI app * @param id Model Circuit ID Number * @param token Auth Token */ removeLTIDetails(id: number, token: string) { return this.http.delete(`${this.url}api/lti/delete/${id}`, { headers: new HttpHeaders({ Authorization: `Token ${token}`, }) }); } /** * Requests for deleting the Arduino LTI app * @param id Model Circuit ID Number * @param token Auth Token */ removeArduinoLTIDetails(id: number, token: string) { return this.http.delete(`${this.url}api/lti/arduino/delete/${id}`, { headers: new HttpHeaders({ Authorization: `Token ${token}`, }) }); } /** * Development Mode Login. */ login() { return new Promise((reslove, reject) => { if (environment.production === false) { this.aroute.queryParams.subscribe((paramData: any) => { if (paramData.token != null) { localStorage.setItem('esim_token', paramData.token); this.isAuthenticated.next(true); reslove(1); } else if (Login.getToken()) { this.isAuthenticated.next(true); reslove(1); } }); } else { reslove(0); } }); } /** * Request to update LTI details at the backend * @param token Auth Token * @param data LTI Details containing ids of model and student circuits, consumer and secret keys */ updateLTIDetails(token: string, data: any) { return this.http.post(`${this.url}api/lti/update/`, data, { headers: this.httpHeaders(token), }); } /** * Request to update LTI details for Arduino at the backend * @param token Auth Token * @param data LTI Details containing ids of model and student circuits, consumer and secret keys */ updateArduinoLTIDetails(token: string, data: any) { return this.http.post(`${this.url}api/lti/update_arduino/`, data, { headers: this.httpHeaders(token), }); } /** * Requests for creating submission for the circuit with given id * @param token Auth Token * @param data LTI data (contains save_id, lti_id, lti_nonce, lti_user_id) */ submitCircuit(token: string, data: any) { return this.http.post(`${this.url}api/lti/submit/`, data, { headers: this.httpHeaders(token), }); } /** * Requests for creating submission for the Arduino circuit with given id * @param token Auth Token * @param data LTI data (contains save_id, lti_id, lti_nonce, lti_user_id) */ arduinoSubmitCircuit(token: string, data: any) { return this.http.post(`${this.url}api/lti/arduino/submit/`, data, { headers: this.httpHeaders(token), }); } /** * Requests to retrieve all the submissions for given LTI App from backend * @param id save_id of the circuit * @param branch branch of the circuit * @param version version of the circuit * @param token Auth Token */ getSubmissions(id: string, branch: string, version: string, token: string) { return this.http.get(`${this.url}api/lti/submissions/${id}/${version}/${branch}`, { headers: this.httpHeaders(token), }); } /** * Requests to retrieve all the submissions for given Arduino LTI App from backend * @param id save_id of the circuit * @param branch branch of the circuit * @param version version of the circuit * @param token Auth Token */ getArduinoSubmissions(id: string, branch: string, version: string, token: string) { return this.http.get(`${this.url}api/lti/arduino/submissions/${id}/${version}/${branch}`, { headers: this.httpHeaders(token), }); } /** * Logout */ logout(token): void { console.log(token); this.http.post(`${this.url}api/auth/token/logout/`, '', { headers: new HttpHeaders({ Authorization: `Token ${token}` }) }).subscribe(() => { this.isAuthenticated.next(false); Login.logout(); }, (e) => { console.log(e); }); } /** * Specific User Role. * @param token Auth Token */ getRole(token): Observable { return this.http.get(`${this.url}api/workflow/role/`, { headers: new HttpHeaders({ // 'Content-Type': 'application/json', Authorization: `Token ${token}`, // 'Access-Control-Allow-Origin': '*', }) }); } storeSimulationData(id, token, data: object) { return this.http.post(`${this.url}api/save/arduinodata/${id}`, data, { headers: this.httpHeaders(token), }); } /** * Request for storing Arduino LTI Simulation data * @param id Circuit ID * @param lti_id Arduino LTI ID * @param token Login Token * @param data Simulation Data performed by the student */ storeLTISimulationData(id, ltiId: number, token, data: object) { return this.http.post(`${this.url}api/lti/save/arduinodata/${id}/${ltiId}`, data, { headers: this.httpHeaders(token), }); } getSimulationData(id, version, branch, token: string): Observable { return this.http.get(`${this.url}api/save/arduinodata/${id}/${version}/${branch}`, { headers: this.httpHeaders(token), }); } getLTISimulationData(id, ltiId): Observable { return this.http.get(`${this.url}api/lti/save/arduinodata/${id}/${ltiId}`); } } ================================================ FILE: ArduinoFrontend/src/app/app-routing.module.ts ================================================ import { NgModule } from '@angular/core'; import { Routes, RouterModule } from '@angular/router'; import { SimulatorComponent } from './simulator/simulator.component'; import { FrontPageComponent } from './front-page/front-page.component'; import { GalleryComponent } from './gallery/gallery.component'; import { ViewProjectComponent } from './view-project/view-project.component'; import { LTIFormComponent } from './lti-form/lti-form.component'; import { SubmissionlistComponent } from './submissionlist/submissionlist.component'; const routes: Routes = [ { path: '', component: FrontPageComponent }, { path: 'project/:slug', component: ViewProjectComponent }, { path: 'dashboard', loadChildren: './dashboard/dashboard.module#DashboardModule' }, { path: 'simulator', component: SimulatorComponent }, { path: 'lti', component: LTIFormComponent }, { path: 'submissions', component: SubmissionlistComponent }, ]; @NgModule({ imports: [RouterModule.forRoot(routes)], exports: [RouterModule] }) export class AppRoutingModule { } ================================================ FILE: ArduinoFrontend/src/app/app.component.css ================================================ ================================================ FILE: ArduinoFrontend/src/app/app.component.html ================================================ ================================================ FILE: ArduinoFrontend/src/app/app.component.spec.ts ================================================ import { TestBed, async } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; import { AppComponent } from './app.component'; describe('AppComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ imports: [ RouterTestingModule ], declarations: [ AppComponent ], }).compileComponents(); })); it('should create the app', () => { const fixture = TestBed.createComponent(AppComponent); const app = fixture.debugElement.componentInstance; expect(app).toBeTruthy(); }); }); ================================================ FILE: ArduinoFrontend/src/app/app.component.ts ================================================ import { Component, AfterViewInit } from '@angular/core'; /** * The Main App Component */ @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) export class AppComponent implements AfterViewInit { /** * The Title of the app */ title = 'Arduino On Cloud'; /** * Called after everything is loaded */ ngAfterViewInit() { // Hide loading animation document.getElementById('loadanim').style.display = 'none'; } } ================================================ FILE: ArduinoFrontend/src/app/app.module.ts ================================================ import { BrowserModule } from '@angular/platform-browser'; import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from './app.component'; import { DashboardComponent } from './dashboard/dashboard.component'; import { SimulatorComponent } from './simulator/simulator.component'; // import { ClipboardModule } from '@angular/cdk/clipboard'; import { MonacoEditorModule, NgxMonacoEditorConfig } from 'ngx-monaco-editor'; import { CodeEditorComponent } from './code-editor/code-editor.component'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; // import { PathLocationStrategy, LocationStrategy } from '@angular/common'; import { HashLocationStrategy, LocationStrategy } from '@angular/common'; import { ViewComponentInfoComponent } from './view-component-info/view-component-info.component'; import { HttpClientModule } from '@angular/common/http'; import { ExportfileComponent } from './exportfile/exportfile.component'; import { ComponentlistComponent } from './componentlist/componentlist.component'; import { FrontPageComponent } from './front-page/front-page.component'; import { GalleryComponent } from './gallery/gallery.component'; import { HeaderComponent } from './header/header.component'; import { ViewProjectComponent } from './view-project/view-project.component'; import { AlertModalComponent } from './alert/alert-modal/alert-modal.component'; import { ConfirmModalComponent } from './alert/confirm-modal/confirm-modal.component'; import { ExportJSONDialogComponent } from './export-jsondialog/export-jsondialog.component'; import { ExitConfirmDialogComponent } from './exit-confirm-dialog/exit-confirm-dialog.component'; import { SaveProjectDialogComponent } from './simulator/save-project-dialog/save-project-dialog.component'; import { OptionModalComponent } from './alert/option-modal/option-modal.component'; import { VersioningPanelComponent } from './versioning-panel/versioning-panel.component'; import { CreateVariationDialogComponent } from './versioning-panel/create-variation-dialog/create-variation-dialog.component'; import { SidePanelComponent } from './side-panel/side-panel.component'; import { MaterialModule } from './common/material.module'; import { DashboardModule } from './dashboard/dashboard.module'; import { SharedModule } from './common/SharedModule.module'; import { DragDropModule } from '@angular/cdk/drag-drop'; import { ScrollingModule } from '@angular/cdk/scrolling'; import { LTIFormComponent } from './lti-form/lti-form.component'; import { SubmissionlistComponent } from './submissionlist/submissionlist.component'; import { ViewCodeComponent } from './lti-form/view-code/view-code.component'; import { GraphComponent } from './graph/graph.component'; import { GraphDataService } from './graph-data.service'; import { GraphlistComponent } from './graphlist/graphlist.component'; /** * Monaco OnLoad Function */ export function onMonacoLoad() { } /** * Monaco editor config for loading js files */ const monacoConfig: NgxMonacoEditorConfig = { baseUrl: './assets', defaultOptions: { scrollBeyondLastLine: false }, onMonacoLoad }; @NgModule({ declarations: [ AppComponent, SimulatorComponent, CodeEditorComponent, ViewComponentInfoComponent, ExportfileComponent, ComponentlistComponent, FrontPageComponent, // GalleryComponent, ViewProjectComponent, // HeaderComponent, AlertModalComponent, ConfirmModalComponent, OptionModalComponent, ExportJSONDialogComponent, ExitConfirmDialogComponent, SaveProjectDialogComponent, VersioningPanelComponent, CreateVariationDialogComponent, LTIFormComponent, SubmissionlistComponent, ViewCodeComponent, GraphComponent, GraphlistComponent, ], imports: [ BrowserModule, AppRoutingModule, FormsModule, ReactiveFormsModule, MonacoEditorModule.forRoot(monacoConfig), BrowserAnimationsModule, MaterialModule, HttpClientModule, SharedModule, // shared module for Header component DragDropModule, ScrollingModule, ], // providers: [{provide: LocationStrategy, useClass: PathLocationStrategy}], providers: [{ provide: LocationStrategy, useClass: HashLocationStrategy }, GraphDataService], bootstrap: [AppComponent], entryComponents: [ ViewComponentInfoComponent, ExportfileComponent, ComponentlistComponent, AlertModalComponent, ConfirmModalComponent, OptionModalComponent, ExportJSONDialogComponent, ExitConfirmDialogComponent, SaveProjectDialogComponent, CreateVariationDialogComponent, ], schemas: [ CUSTOM_ELEMENTS_SCHEMA ], exports: [AppComponent] }) export class AppModule { } ================================================ FILE: ArduinoFrontend/src/app/code-editor/code-editor.component.css ================================================ .alert { border-bottom: 1px solid; border-top: 1px solid; padding: 8px; margin-bottom: 0px; display: flex; } .include { font-size: 12px; line-height: 15px; padding-right: 10px; padding-left: 5px; } .name { margin-left: 12px; font-weight: 500; width: 80px; line-height: 34px; font-size: 14px; } .description { text-overflow: ellipsis; overflow: hidden; display: flex; max-height: 36px; line-height: 36px; width: calc(100% - 220px); font-size: 12px; padding-left: 16px; } .icon { position: relative; width: 30px; height: 30px; margin-right: 3px; margin-top: 3px; } ================================================ FILE: ArduinoFrontend/src/app/code-editor/code-editor.component.html ================================================

No Programmable Component in this Circuit

================================================ FILE: ArduinoFrontend/src/app/code-editor/code-editor.component.spec.ts ================================================ import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { CodeEditorComponent } from './code-editor.component'; import { NO_ERRORS_SCHEMA } from '@angular/core'; describe('CodeEditorComponent', () => { let component: CodeEditorComponent; let fixture: ComponentFixture; beforeEach(async(() => { TestBed.configureTestingModule({ declarations: [ CodeEditorComponent ], schemas: [NO_ERRORS_SCHEMA] }) .compileComponents(); })); beforeEach(() => { fixture = TestBed.createComponent(CodeEditorComponent); component = fixture.componentInstance; fixture.detectChanges(); }); it('should create', () => { expect(component).toBeTruthy(); }); }); ================================================ FILE: ArduinoFrontend/src/app/code-editor/code-editor.component.ts ================================================ import { Component, OnInit, Input } from '@angular/core'; import { ArduinoUno } from '../Libs/outputs/Arduino'; import { Download } from '../Libs/Download'; /** * For Handling Time ie. Prevent moment error */ declare var monaco; declare var window; /** * Code Editor Component */ @Component({ selector: 'app-code-editor', templateUrl: './code-editor.component.html', styleUrls: ['./code-editor.component.css'] }) export class CodeEditorComponent { // TODO: Fetch records and Suggestion from api /** * Initialization variable for code editor */ private init = false; /** * Monaco code editor options */ editorOptions = { theme: 'vs', language: 'c' }; /** * Instance of Monaco editor */ editor: any; /** * Libraries that are already present */ records = [ { include: 'EEPROM.h', name: 'EEPROM', Description: 'Reading and writing to permanent storage', url: 'https://www.arduino.cc/en/Reference/EEPROM' }, { include: 'LiquidCrystal.h', name: 'LiquidCrystal', Description: 'Controlling liquid crystal displays (LCDs)', url: 'https://www.arduino.cc/en/Reference/LiquidCrystal' }, { include: 'Servo.h', name: 'Servo', Description: 'Controlling Servo motor', url: 'https://www.arduino.cc/en/Reference/Servo' }, { include: 'SoftwareSerial.h', name: 'SoftwareSerial', Description: 'Allow serial communication on other digital pins of the Arduino', url: 'https://www.arduino.cc/en/Reference/SoftwareSerial' }, { include: 'Wire.h', name: 'Wire', Description: 'This library allows you to communicate with I2C / TWI devices', url: 'https://www.arduino.cc/en/Reference/Wire' }, { include: 'SPI.h', name: 'SPI', Description: 'Communicating with devices using the Serial Peripheral Interface (SPI) Bus', url: 'https://www.arduino.cc/en/Reference/SPI' } ]; /** * Code inside the Monaco editor */ code = ''; /** * Names of Arduino */ names: string[] = []; /** * List of Programming languages available */ lang: string[] = ['Arduino .ino file', 'C inline assembly']; /** * Selected programming language */ langIndex = 0; /** * Instance of Arduino uno for updating code */ arduinos: ArduinoUno[] = []; /** * Selected Arduino Index */ selectedIndex = 0; /** * Width of the Code editor */ @Input() width = 500; /** * Height of the code editor in terms of VH */ @Input() height = 80; /** * Code Visibility in LTI mode */ @Input() codeView = true; /** * Reninitialize arduino names */ @Input('reinit') set reinit(value: boolean) { // Set Global variable to tell that code editor is opened window['isCodeEditorOpened'] = value; if (value) { // Clear names and instances this.names = []; this.arduinos = []; // get Names and instances for (const key in window['ArduinoUno_name']) { if (window['ArduinoUno_name'][key]) { this.names.push(key); this.arduinos.push(window['ArduinoUno_name'][key]); } } // reset selected index if (this.selectedIndex >= this.arduinos.length) { this.selectedIndex = 0; } // select the code of respective arduino if (this.arduinos.length > 0) { this.code = this.arduinos[this.selectedIndex].code; } // show loading animation if code editor is nor initialized if (this.names.length !== 0 && !this.init) { window['showLoading'](); } } } /** * Download the code from code editor */ DownloadCode() { Download.DownloadText(this.names[this.selectedIndex] + '.ino', [this.code], { type: 'text/ino;charset=utf-8;' }); } /** * Include the header to the code * @param i Index of the Library that needs to be included */ Include(i) { this.editor.executeEdits('code-editor', [{ identifier: { major: 1, minor: 1 }, range: new monaco.Range(1, 1, 1, 1), text: '#include <' + this.records[i].include + '>\n', forceMoveMarkers: false }]); this.openFolder(); } /** * On Monaco code editor initialization * @param editor Monaco Editor Instance */ onInit(editor) { this.init = true; window['hideLoading'](); this.editor = editor; monaco.languages.registerCompletionItemProvider('c', { provideCompletionItems: () => { return { // If more function needs to add then add to the following array // https://www.arduino.cc/en/Reference suggestions: [ { label: 'digitalRead', // Searching Parameter kind: monaco.languages.CompletionItemKind.Function, // Type of Completion insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, // Insertion Rule documentation: 'Read Digital Value', // The Documentation copied from arduino.cc insertText: 'digitalRead(${1:PIN});', // The inserted text }, { label: 'digitalWrite', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Write a HIGH or a LOW value to a digital pin', insertText: 'digitalWrite(${1:pin}, ${2:value});', }, { label: 'pinMode', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Configures the specified pin', insertText: 'pinMode(${1:pin}, ${2:mode});', }, { label: 'analogRead', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Read Anolog Value', insertText: 'analogRead(${1:pin});', }, { label: 'analogWrite', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Writes an analog value (PWM wave) to a pin.', insertText: 'analogWrite(${1:pin}, ${2:value});', }, { label: 'analogReference', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Configures the reference voltage', insertText: 'analogReference(${1:type});', }, { label: 'analogReadresolution', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Sets the size of analogRead value', insertText: 'analogReadResolution(${1:bits});', }, { label: 'analogReadResolution', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Sets the size of analogRead value', insertText: 'analogReadResolution(${1:bits});', }, { label: 'analogWriteResolution', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Sets the resolution of analogWrite value', insertText: 'analogWriteResolution(${1:bits});', }, { label: 'noTone', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Stops the generation of a square wave', insertText: 'noTone(${1:pin});', }, { label: 'pulseIn', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Reads a pulse', insertText: 'pulseIn(${1:pin}, ${2:value});', }, { label: 'pulseIn', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Reads a pulse', insertText: 'pulseIn(${1:pin}, ${2:value}, ${3:timeout});', }, { label: 'pulseInLong', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Reads a long pulse', insertText: 'pulseInLong(${1:pin}, ${2:value});', }, { label: 'pulseInLong', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Reads a long pulse', insertText: 'pulseInLong(${1:pin}, ${2:value}, ${3:timeout});', }, { label: 'ShiftIn', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Shifts in a byte of data one bit at a time', insertText: 'shiftIn(${1:dataPin}, ${2:clockPin}, ${3:bitOrder});', }, { label: 'ShiftOut', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Shifts out a byte of data one bit at a time', insertText: 'shiftOut(${1:dataPin}, ${2:clockPin}, ${3:bitOrder}, ${4:value});', }, { label: 'tone', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Generates a square wave of specified frequency', insertText: 'tone(${1:pin}, ${2:frequency});', }, { label: 'tone', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Generates a square wave of specified frequency', insertText: 'tone(${1:pin}, ${2:frequency}, ${3:duration});', }, { label: 'delay', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'amount of time(milliseconds)', insertText: 'delay(${1:ms});', }, { label: 'delayMicroseconds', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'amount of time(microseconds)', insertText: 'delayMicroseconds(${1:us});', }, { label: 'micros', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Returns the number of microseconds', insertText: 'micros():', }, { label: 'millis', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Returns the number of milliseconds', insertText: 'millis();', }, { label: 'abs', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Calculates the absolute value of a number', insertText: 'abs(${1:x});', }, { label: 'constrain', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Constrains a number to be within a range', insertText: 'constrain(${1:x}, ${2:a}, ${3:b});', }, { label: 'map', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Re-maps a number', insertText: 'map(${1:value}, ${2:fromLow}, ${3:fromHigh}, ${4:toLow}, ${5:toHigh});', }, { label: 'max', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'maximum of two numbers', insertText: 'max(${1:x}, ${2:y});', }, { label: 'min', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'mininmum of two numbers', insertText: 'min(${1:x}, ${2:y});', }, { label: 'pow', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'value of a number raised to a power', insertText: 'pow(${1:x}, ${2:y});', }, { label: 'sqr', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: ' square of a number', insertText: 'sq(${1:x});', }, { label: 'sqrt', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'square root of a number', insertText: 'sqrt(${1:x});', }, { label: 'cos', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'cosine of an angle (in radians)', insertText: 'cos(${1:rad});', }, { label: 'sin', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'sine of an angle (in radians)', insertText: 'sin(${1:rad});', }, { label: 'tan', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'tangent of an angle (in radians)', insertText: 'tan(${1:rad});', }, { label: 'isAlpha', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Analyse if a char is alpha (that is a letter)', insertText: 'isAlpha(${1:thisChar});', }, { label: 'isAlphaNumeric', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Analyse if a char is alphanumeric', insertText: 'isAlphaNumeric(${1:thisChar});', }, { label: 'isAscii', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Analyse if a char is Ascii', insertText: 'isAscii(${1:thisChar});', }, { label: 'isControl', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Analyse if a char is control character', insertText: 'isControl(${1:thisChar);', }, { label: 'isDigit', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Analyse if a char is digit', insertText: 'isDigit(${1:thisChar);', }, { label: 'isGraph', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Analyse if a char is printable with some content', insertText: 'isGraph(${1:thisChar);', }, { label: 'isHexadecimalDigit', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Analyse if a char is printable with some content', insertText: 'isHexadecimalDigit(${1:thisChar);', }, { label: 'isLowerCase', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Analyse if a char is lower case', insertText: 'isLowerCase(${1:thisChar);', }, { label: 'isPrintable', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Analyse if a char is printable', insertText: 'isPrintable(${1:thisChar);', }, { label: 'isSpace', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Analyse if a char is white space character', insertText: 'isSpace(${1:thisChar);', }, { label: 'isUpperCase', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Analyse if a char is upper case', insertText: 'isUpperCase(${1:thisChar);', }, { label: 'isWhiteSpace', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Analyse if a char is space character', insertText: 'isWhitespace(${1:thisChar);', }, { label: 'random', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'generates pseudo-random numbers', insertText: 'random(${1:max});', }, { label: 'random', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'generates pseudo-random numbers', insertText: 'random(${1:min}, ${2:max});', }, { label: 'randomSeed', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'initializes the pseudo-random number generator', insertText: 'randomSeed(${1:seed});', }, { label: 'bit', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Computes the values of specified bit', insertText: 'bit(${1:n});', }, { label: 'bitClear', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Clears a bit of numeric variable', insertText: 'bitClear(${1:x}, ${2:n});', }, { label: 'bitRead', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Reads a bit of a number', insertText: 'bitRead(${1:x}, ${2:n});', }, { label: 'bitSet', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Sets a bit of a number variable', insertText: 'bitSet(${1:x}, ${2:n});', }, { label: 'bitWrite', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Writes a bit of a numeric variable', insertText: 'bitWrite(${1:x}, ${2:n}, ${3:b});', }, { label: 'highByte', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Extracts high-order byte of a word', insertText: 'highByte(${1:x});', }, { label: 'lowByte', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Extracts low-order byte of a word', insertText: 'lowByte(${1:x});', }, { label: 'attachInterrupt', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Digital Pins With Interrupts', insertText: 'attachInterrupt(digitalPinToInterrupt(${1:pin}), ${2:ISR}, ${3:mode});', }, { label: 'attachInterrupt', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Digital Pins With Interrupts', insertText: 'attachInterrupt(${1:interrupt}, ${2:ISR}, ${3:mode});', }, { label: 'attachInterrupt', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Digital Pins With Interrupts', insertText: 'attachInterrupt(${1:pin}, ${2:ISR}, ${3:mode});', }, { label: 'Interrupts', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Re-enable Interrupts', insertText: 'interrupts();', }, { label: 'noInterrupts', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Disables interrupts', insertText: 'noInterrupts();', }, { label: 'if(Serial)', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Indicates if the specified Serial port is ready', insertText: 'if (${1:Serial});', }, { label: 'Serial.available', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Get the numbers of bytes available', insertText: 'Serial.available();', }, { label: 'Serial.availableForWrite', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Get the numbers of bytes available for writing', insertText: 'Serial.availableForWrite();', }, { label: 'Serial.begin', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Sets the data rate in bits per second', insertText: 'Serial.begin(${1:speed});', }, { label: 'Serial.begin', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Sets the data rate in bits per second', insertText: 'Serial.begin(${1:speed}, ${2:config});', }, { label: 'Serial.end', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Disable serial communication', insertText: 'Serial.end();', }, { label: 'Serial.find', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'finds data from the serial buffer', insertText: 'Serial.find(${1:target});', }, { label: 'Serial.find', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'finds data from the serial buffer', insertText: 'Serial.find(${1:target}, ${2:length});', }, { label: 'Serial.findUntil', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'finds data until terminated string is found', insertText: 'Serial.findUntil(${1:target}, ${2:terminal});', }, { label: 'Serial.flush', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Waits for the transmission of outgoing serial data to complete', insertText: 'Serial.flush();', }, { label: 'Serial.parseFloat', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'returns floating point number', insertText: 'Serial.parseFloat();', }, { label: 'Serial.parseFloat', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'returns floating point number', insertText: 'Serial.parseFloat(${1:lookahead});', }, { label: 'Serial.parseFloat', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'returns floating point number', insertText: 'Serial.parseFloat(${1:lookahead}, ${1:ignore});', }, { label: 'Serial.parseInt', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'return integer number', insertText: 'Serial.parseInt();', }, { label: 'Serial.parseInt', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'return integer number', insertText: 'Serial.parseInt(${1:lookahead});', }, { label: 'Serial.parseInt', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'return integer number', insertText: 'Serial.parseInt(${1:lookahead}, ${1:ignore});', }, { label: 'Serial.peek', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'returns the next byte', insertText: 'Serial.peek();', }, { label: 'Serial.print', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'prints the data to serial data', insertText: 'Serial.print(${1:val});', }, { label: 'Serial.print', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'prints the data to serial data', insertText: 'Serial.print(${1:val}, ${2:format});', }, { label: 'Serial.println', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'prints the data to serial data to next line', insertText: 'Serial.println(${1:val});', }, { label: 'Serial.println', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'prints the data to serial data to next line', insertText: 'Serial.println(${1:val}, ${2:format});', }, { label: 'Serial.read', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Reads incoming serial data', insertText: 'Serial.read();', }, { label: 'Serial.readBytes', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'returns the number of characters placed in the buffer', insertText: 'Serial.readBytes(${1:buffer}, ${2:length});', }, { label: 'Serial.readBytesUntil', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: ' returns the number of characters read into the buffer', insertText: 'Serial.readBytesUntil(${1:character}, ${2:buffer}, ${3:length});', }, { label: 'Serial.readString', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'read characters in string ', insertText: 'Serial.readString();', }, { label: 'Serial.readStringUntil', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'read characters in string ', insertText: 'Serial.readStringUntil(${1:terminator});', }, { label: 'Serial.setTimeout', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'sets the time to wait for serial data ', insertText: 'Serial.setTimeout(${1:time});', }, { label: 'Serial.write', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Writes binary data to the serial port', insertText: 'Serial.write(${1:val});', }, { label: 'Serial.write', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Writes binary data to the serial port', insertText: 'Serial.write(${1:str});', }, { label: 'Stream.available', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Get the numbers of bytes available in stream', insertText: 'stream.available();', }, { label: 'Stream.read', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'reads characters from an incoming stream', insertText: 'stream.read();', }, { label: 'stream.find', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'finds data from the serial buffer', insertText: 'stream.find(${1:target});', }, { label: 'stream.find', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'finds data from the serial buffer', insertText: 'stream.find(${1:target}, ${2:length});', }, { label: 'stream.findUntil', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'finds data until terminated string is found', insertText: 'stream.findUntil(${1:target}, ${2:terminal});', }, { label: 'stream.flush', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'clears the buffer', insertText: 'stream.flush();', }, { label: 'stream.peek', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'Read byte from file without advancing to the next one', insertText: 'stream.peek();', }, { label: 'stream.readBytes', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'read characters from a stream into buffer', insertText: 'stream.readBytes(${1:buffer}, ${2:length);', }, { label: 'stream.readBytesUntil', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'read characters from a stream into buffer', insertText: 'stream.readBytesUntil(${1:character}, ${2:buffer}, ${3:length});', }, { label: 'Stream.readString', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'read characters in string ', insertText: 'stream.readString();', }, { label: 'stream.readStringUntil', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'read characters in string ', insertText: 'stream.readStringUntil(${1:terminator});', }, { label: 'stream.setTimeout', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'sets the time to wait for serial data ', insertText: 'stream.setTimeout(${1:time});', }, { label: 'stream.parseFloat', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'returns floating point number', insertText: 'stream.parseFloat();', }, { label: 'stream.parseFloat', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'returns floating point number', insertText: 'stream.parseFloat(${1:lookahead});', }, { label: 'stream.parseFloat', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'returns floating point number', insertText: 'stream.parseFloat(${1:lookahead}, ${2:ignore});', }, { label: 'stream.parseInt', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'return integer number', insertText: 'stream.parseInt();', }, { label: 'stream.parseInt', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'return integer number', insertText: 'stream.parseInt(${1:lookahead});', }, { label: 'stream.parseInt', kind: monaco.languages.CompletionItemKind.Function, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'return integer number', insertText: 'stream.parseInt(${1:lookahead}, ${2:ignore});', }, { label: 'HIGH', kind: monaco.languages.CompletionItemKind.Keyword, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, insertText: '${1:HIGH}', }, { label: 'LOW', kind: monaco.languages.CompletionItemKind.Keyword, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, insertText: '${1:LOW}', }, { label: 'INPUT', kind: monaco.languages.CompletionItemKind.Keyword, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, insertText: '${1:INPUT}', }, { label: 'OUTPUT', kind: monaco.languages.CompletionItemKind.Keyword, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, insertText: '${1:OUTPUT}', }, { label: 'INPUT_PULLUP', kind: monaco.languages.CompletionItemKind.Keyword, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, insertText: '${1:INPUT_PULLUP}', }, { label: 'LED_BUILTIN', kind: monaco.languages.CompletionItemKind.Keyword, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, insertText: '${1:LED_BUILTIN}', }, { label: 'true', kind: monaco.languages.CompletionItemKind.Keyword, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, insertText: '${1:true}', }, { label: 'false', kind: monaco.languages.CompletionItemKind.Keyword, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, insertText: '${1:false}', }, { label: 'array', kind: monaco.languages.CompletionItemKind.Keyword, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, insertText: '${1:array}', }, { label: 'bool', kind: monaco.languages.CompletionItemKind.Keyword, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, insertText: '${1:bool}', }, { label: 'byte', kind: monaco.languages.CompletionItemKind.Keyword, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, insertText: '${1:byte}', }, { label: 'char', kind: monaco.languages.CompletionItemKind.Keyword, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, insertText: '${1:char}', }, { label: 'double', kind: monaco.languages.CompletionItemKind.Keyword, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, insertText: '${1:double}', }, { label: 'float', kind: monaco.languages.CompletionItemKind.Keyword, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, insertText: '${1:float}', }, { label: 'int', kind: monaco.languages.CompletionItemKind.Keyword, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, insertText: '${1:int}', }, { label: 'long', kind: monaco.languages.CompletionItemKind.Keyword, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, insertText: '${1:long}', }, { label: 'short', kind: monaco.languages.CompletionItemKind.Keyword, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, insertText: '${1:short}', }, { label: 'size_t', kind: monaco.languages.CompletionItemKind.Keyword, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, insertText: '${1:size_t}', }, { label: 'string', kind: monaco.languages.CompletionItemKind.Keyword, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, insertText: '${1:string}', }, { label: 'String()', kind: monaco.languages.CompletionItemKind.Keyword, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, insertText: 'String()', }, { label: 'unsigned char', kind: monaco.languages.CompletionItemKind.Keyword, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, insertText: '${1:unsigned char}', }, { label: 'unsigned long', kind: monaco.languages.CompletionItemKind.Keyword, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, insertText: '${1:unsigned long}', }, { label: 'void', kind: monaco.languages.CompletionItemKind.Keyword, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, insertText: '${1:void}', }, { label: 'word', kind: monaco.languages.CompletionItemKind.Keyword, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, insertText: '${1:word}', }, { label: 'const', kind: monaco.languages.CompletionItemKind.Keyword, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, insertText: '${1:const}', }, { label: 'scope', kind: monaco.languages.CompletionItemKind.Keyword, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, insertText: '${1:scope}', }, { label: 'static', kind: monaco.languages.CompletionItemKind.Keyword, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, insertText: '${1:static}', }, { label: 'volatile', kind: monaco.languages.CompletionItemKind.Keyword, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, insertText: '${1:volatile}', }, { label: 'break', kind: monaco.languages.CompletionItemKind.Keyword, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, insertText: 'break', }, { label: 'continue', kind: monaco.languages.CompletionItemKind.Keyword, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, insertText: 'continue', }, { label: 'else', kind: monaco.languages.CompletionItemKind.Keyword, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, insertText: 'else', }, { label: 'goto', kind: monaco.languages.CompletionItemKind.Keyword, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, insertText: 'goto', }, { label: 'if', kind: monaco.languages.CompletionItemKind.Keyword, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, insertText: 'if', }, { label: 'dowhile', kind: monaco.languages.CompletionItemKind.Keyword, insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, insertText: [ 'do {', '\t$0', '} while(${1:condition});' ].join('\n'), documentation: 'Do-while Statement', }, { label: 'while', kind: monaco.languages.CompletionItemKind.Keyword, insertText: [ 'while(${1:condition}) {', '\t$0', '}' ].join('\n'), insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'while Statement', }, { label: 'for', kind: monaco.languages.CompletionItemKind.Keyword, insertText: [ 'for(${1:int} ${2:i};${3},${4}) {', '\t$0', '}' ].join('\n'), insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'for Statement', }, { label: 'switchcase', kind: monaco.languages.CompletionItemKind.Keyword, insertText: [ 'switch(${1:value}) {', '\tcase ${2:condition}', '\t\t$0', 'break;', '}' ].join('\n'), insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'switch Statement', }, { label: 'ifelse', kind: monaco.languages.CompletionItemKind.Snippet, insertText: [ 'if (${1:condition}) {', '\t$0', '} else {', '\t', '}' ].join('\n'), insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet, documentation: 'If-Else Statement' }] }; } }); } /** * Constructor for code editor */ constructor() { } /** * On code Change update the code in arduino */ codeChanged() { this.arduinos[this.selectedIndex].code = this.code; } /** * Select the code for respective arduino. Event handler for Choosing arduino * @param item HTML Select Element */ chooseArduino(item: HTMLSelectElement) { this.selectedIndex = item.selectedIndex; this.code = this.arduinos[this.selectedIndex].code; } /** * Event handler for Choosing the programming language. */ chooseLanguage(item: HTMLSelectElement) { this.langIndex = item.selectedIndex; window['progLang'] = this.langIndex; } /** * Toggle Libraries Box */ openFolder() { const folder = document.getElementById('lib'); if (folder.style.display === 'none') { folder.style.display = 'flex'; } else { folder.style.display = 'none'; } } } ================================================ FILE: ArduinoFrontend/src/app/common/SharedModule.module.ts ================================================ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { HeaderComponent } from '../header/header.component'; import { RouterModule } from '@angular/router'; import { MaterialModule } from './material.module'; @NgModule({ imports: [ CommonModule, RouterModule, MaterialModule ], declarations: [ HeaderComponent ], exports: [ HeaderComponent ] }) export class SharedModule { } ================================================ FILE: ArduinoFrontend/src/app/common/material.module.ts ================================================ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { MatAutocompleteModule } from '@angular/material/autocomplete'; import { MatBadgeModule } from '@angular/material/badge'; import { MatBottomSheetModule } from '@angular/material/bottom-sheet'; import { MatButtonModule } from '@angular/material/button'; import { MatButtonToggleModule } from '@angular/material/button-toggle'; import { MatCardModule } from '@angular/material/card'; import { MatCheckboxModule } from '@angular/material/checkbox'; import { MatChipsModule } from '@angular/material/chips'; import { MatFormFieldControl, MatFormFieldModule } from '@angular/material/form-field'; import { MatStepperModule } from '@angular/material/stepper'; import { MatDatepickerModule } from '@angular/material/datepicker'; import { MatDialogModule, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; import { MatDividerModule } from '@angular/material/divider'; import { MatExpansionModule } from '@angular/material/expansion'; import { MatGridListModule } from '@angular/material/grid-list'; import { MatIconModule } from '@angular/material/icon'; import { MatInputModule } from '@angular/material/input'; import { MatListModule } from '@angular/material/list'; import { MatMenuModule } from '@angular/material/menu'; import { MatNativeDateModule, MatRippleModule } from '@angular/material/core'; import { MatPaginatorModule } from '@angular/material/paginator'; import { MatProgressBarModule } from '@angular/material/progress-bar'; import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; import { MatRadioModule } from '@angular/material/radio'; import { MatSelectModule } from '@angular/material/select'; import { MatSidenavModule } from '@angular/material/sidenav'; import { MatSliderModule } from '@angular/material/slider'; import { MatSlideToggleModule } from '@angular/material/slide-toggle'; import { MatSnackBarModule } from '@angular/material/snack-bar'; import { MatSortModule } from '@angular/material/sort'; import { MatTableModule } from '@angular/material/table'; import { MatTabsModule } from '@angular/material/tabs'; import { MatToolbarModule } from '@angular/material/toolbar'; import { MatTooltipModule } from '@angular/material/tooltip'; import { MatTreeModule } from '@angular/material/tree'; import { ScrollingModule } from '@angular/cdk/scrolling'; const material = [ MatAutocompleteModule, MatBadgeModule, MatBottomSheetModule, MatButtonModule, MatButtonToggleModule, MatCardModule, MatCheckboxModule, MatChipsModule, MatStepperModule, MatDatepickerModule, MatDialogModule, // MatDialogRef, MatDividerModule, MatFormFieldModule, MatExpansionModule, MatGridListModule, MatIconModule, MatInputModule, MatListModule, MatMenuModule, MatNativeDateModule, MatPaginatorModule, MatProgressBarModule, MatProgressSpinnerModule, MatRadioModule, MatRippleModule, MatSelectModule, MatSidenavModule, MatSliderModule, MatSlideToggleModule, MatSnackBarModule, MatSortModule, MatTableModule, MatTabsModule, MatToolbarModule, MatTooltipModule, MatTreeModule, ]; @NgModule({ declarations: [], imports: [ CommonModule, material, ScrollingModule, ], exports: [material], providers: [{ provide: MatDialogRef, useValue: {} }, { provide: MAT_DIALOG_DATA, useValue: [] }] }) export class MaterialModule { } ================================================ FILE: ArduinoFrontend/src/app/componentlist/componentlist.component.css ================================================ button:focus { outline: none !important; } table, td { border: 1px solid #c5cfd9; } table { border-collapse: separate; border-spacing: 0; width: 100%; border: 1px solid #ddd; border-width: thin; margin-top: 10px; margin-bottom: 20px; } th, td { text-align: left; padding: 10px; } tr:nth-child(even) { background-color: #f2f2f2; } th { background-color: lightgrey; font-weight: lighter; } ================================================ FILE: ArduinoFrontend/src/app/componentlist/componentlist.component.html ================================================

Component List

No Component are Present

Name Quantity Info
{{ item.key }} {{ item.value.cnt }}
================================================ FILE: ArduinoFrontend/src/app/componentlist/componentlist.component.spec.ts ================================================ ================================================ FILE: ArduinoFrontend/src/app/componentlist/componentlist.component.ts ================================================ import { Component, OnInit } from '@angular/core'; import { MatDialog, MatDialogRef } from '@angular/material'; import { ViewComponentInfoComponent } from '../view-component-info/view-component-info.component'; /** * Declare window so that custom created function don't throw error */ declare var window; /** * Class for Component list (Table) Dialog */ @Component({ selector: 'app-componentlist', templateUrl: './componentlist.component.html', styleUrls: ['./componentlist.component.css'] }) export class ComponentlistComponent implements OnInit { /** * Data that needs to shown as table */ data: any = {}; /** * if No comonents are in the workspace */ noComponets = true; /** * Constructor for Component List * @param dialog Material Dialog * @param dialogRef Material Dialog Reference */ constructor(private dialog: MatDialog, public dialogRef: MatDialogRef) { } /** * On Init Component List Dialog */ ngOnInit() { // For each item in the scope for (const key in window.scope) { // Check item is present and item contains at least one quantity if (window.scope[key] && window.scope[key].length > 0) { // For each item get Component name and increment its count for (const item of window.scope[key]) { if (item.getName) { const name = item.getName(); this.noComponets = false; if (this.data[name] && this.data[name].cnt > 0) { this.data[name].cnt += 1; } else { this.data[name] = { cnt: 1, key: item.keyName }; } } } } } } /** * Shoe Information of a Component * @param key The Compoment Key */ OpenInfo(key: string) { window.Selected = window.scope[key][0]; // Show view Info Dialog const dialogRef = this.dialog.open(ViewComponentInfoComponent, { width: '500px' }); dialogRef.afterClosed().subscribe(result => { window.Selected = null; }); } /** * Export CSV from table * @param filename Filename of the downloaded CSV * @param data Data inside the csv */ exportCSV(filename: string, data: string) { const blob = new Blob(['\ufeff' + data], { type: 'text/csv;charset=utf-8;' }); // Download Logic const a = document.createElement('a'); a.href = URL.createObjectURL(blob); a.target = '_blank'; a.setAttribute('download', `${filename}.csv`); a.style.visibility = 'hidden'; document.body.append(a); a.click(); document.body.removeChild(a); } /** * Download CSV Button event handler */ DownloadCSV() { // if no components are present show a toast message if (this.noComponets) { window.showToast('No Components On Workspace'); return; } // CSV heading let csv = `S.No,Name,Quantity\n`; let sno = 1; // Convert table to csv format for (const key in this.data) { if (this.data[key]) { csv += `${sno},${key},${this.data[key].cnt}\n`; ++sno; } } this.exportCSV('download', csv); // Close the Export Dialog this.dialogRef.close(); } } ================================================ FILE: ArduinoFrontend/src/app/dashboard/dashboard-routing.module.ts ================================================ import { NgModule } from '@angular/core'; import { Routes, RouterModule } from '@angular/router'; import { GalleryComponent } from '../gallery/gallery.component'; import { MainPageComponent } from '../main-page/main-page.component'; import { DashboardComponent } from './dashboard.component'; import { SimulatorComponent } from '../simulator/simulator.component'; const routes: Routes = [ { path: '', component: DashboardComponent, children: [ { path: '', component: MainPageComponent }, { path: 'gallery', component: GalleryComponent }, { path: 'mainpage/:id', component: MainPageComponent }, { path: 'simulator', redirectTo: '/simulator', pathMatch: 'full' } ] }, { path: 'dashboard/simulator', redirectTo: '/simulator', pathMatch: 'full' } ]; @NgModule({ imports: [RouterModule.forChild(routes)], exports: [RouterModule] }) export class DashboardRoutingModule { } ================================================ FILE: ArduinoFrontend/src/app/dashboard/dashboard.component.css ================================================ .example-container { min-height: 876px; border: 1px solid rgba(0, 0, 0, 0.12); } .no-search { display: flex; justify-content: center; align-items: center; margin-top: 1rem; } .maincontent { display: flex; justify-content: center; flex-direction: column; align-items: center; } .circuitBtn { width: 296px; } mat-chip { max-width: 200px; padding: 9px; border-radius: 14px; padding: 11px; } ================================================ FILE: ArduinoFrontend/src/app/dashboard/dashboard.component.html ================================================
================================================ FILE: ArduinoFrontend/src/app/dashboard/dashboard.component.spec.ts ================================================ ================================================ FILE: ArduinoFrontend/src/app/dashboard/dashboard.component.ts ================================================ import { Component, OnInit, Input, ViewChild } from '@angular/core'; @Component({ selector: 'app-dashboard', templateUrl: './dashboard.component.html', styleUrls: ['./dashboard.component.css'] }) export class DashboardComponent implements OnInit { ngOnInit() { } } ================================================ FILE: ArduinoFrontend/src/app/dashboard/dashboard.module.ts ================================================ import { CommonModule, HashLocationStrategy, LocationStrategy } from '@angular/common'; import { HttpClientModule } from '@angular/common/http'; import { NgModule } from '@angular/core'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { FilterPipeModule } from 'ngx-filter-pipe'; import { MaterialModule } from '../common/material.module'; import { SharedModule } from '../common/SharedModule.module'; import { GalleryComponent } from '../gallery/gallery.component'; import { MainPageComponent } from '../main-page/main-page.component'; import { SidePanelComponent } from '../side-panel/side-panel.component'; import { DashboardRoutingModule } from './dashboard-routing.module'; import { DashboardComponent } from './dashboard.component'; @NgModule({ declarations: [ DashboardComponent, GalleryComponent, MainPageComponent, SidePanelComponent, ], imports: [ CommonModule, FormsModule, ReactiveFormsModule, MaterialModule, SharedModule, HttpClientModule, FilterPipeModule, DashboardRoutingModule, ], exports: [] }) export class DashboardModule { } ================================================ FILE: ArduinoFrontend/src/app/exit-confirm-dialog/exit-confirm-dialog.component.css ================================================ .action-div{ display: flex; justify-content: space-around; } ================================================ FILE: ArduinoFrontend/src/app/exit-confirm-dialog/exit-confirm-dialog.component.html ================================================

Do you want to exit?

================================================ FILE: ArduinoFrontend/src/app/exit-confirm-dialog/exit-confirm-dialog.component.spec.ts ================================================ import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { MatDialogModule, MatDialogRef } from '@angular/material'; import { ExitConfirmDialogComponent } from './exit-confirm-dialog.component'; describe('ExitConfirmDialogComponent', () => { let component: ExitConfirmDialogComponent; let fixture: ComponentFixture; beforeEach(async(() => { TestBed.configureTestingModule({ imports: [MatDialogModule], declarations: [ExitConfirmDialogComponent], providers: [ { provide: MatDialogRef, useValue: {} }, ] }) .compileComponents(); })); beforeEach(() => { fixture = TestBed.createComponent(ExitConfirmDialogComponent); component = fixture.componentInstance; fixture.detectChanges(); }); it('should create', () => { expect(component).toBeTruthy(); }); }); ================================================ FILE: ArduinoFrontend/src/app/exit-confirm-dialog/exit-confirm-dialog.component.ts ================================================ import { Component, OnInit } from '@angular/core'; import { MatDialogRef } from '@angular/material'; @Component({ selector: 'app-exit-confirm-dialog', templateUrl: './exit-confirm-dialog.component.html', styleUrls: ['./exit-confirm-dialog.component.css'] }) export class ExitConfirmDialogComponent implements OnInit { constructor(public dialogRef: MatDialogRef) { } ngOnInit() { } // Function to handle if user want to exit yesClick() { this.dialogRef.close(true); } } ================================================ FILE: ArduinoFrontend/src/app/export-jsondialog/export-jsondialog.component.css ================================================ .full-width{ width: 100%; } ================================================ FILE: ArduinoFrontend/src/app/export-jsondialog/export-jsondialog.component.html ================================================
Enter the name of File to be Saved

File Name
================================================ FILE: ArduinoFrontend/src/app/export-jsondialog/export-jsondialog.component.spec.ts ================================================ import { TestBed, async, ComponentFixture } from '@angular/core/testing'; import { FormsModule } from '@angular/forms'; import { MatDialogModule, MatDialogRef, MatFormFieldModule, MAT_DIALOG_DATA } from '@angular/material'; import { RouterTestingModule } from '@angular/router/testing'; import { Workspace } from '../Libs/Workspace'; import { ExportJSONDialogComponent } from './export-jsondialog.component'; // class MockWorkspace extends Workspace { // SaveJson() { // return true; // } // } describe('ExportJSONDialogComponent', () => { let component: ExportJSONDialogComponent; let fixture: ComponentFixture; beforeEach(async () => { TestBed.configureTestingModule({ imports: [ RouterTestingModule, MatFormFieldModule, FormsModule, MatDialogModule, ], declarations: [ ExportJSONDialogComponent ], providers: [ { provide: MatDialogRef, useValue: {} }, { provide: Workspace, useValue: {} }, { provide: MAT_DIALOG_DATA, useValue: { description: 'this is a desc', title: 'title' } }, ] }).compileComponents(); }); beforeEach(() => { fixture = TestBed.createComponent(ExportJSONDialogComponent); component = fixture.componentInstance; }); it('should create the app', () => { expect(component).toBeTruthy(); }); it('Value of fileName variable should be given string', () => { expect(component.fileName).toBe('title'); }); it('Value of Description variable should be given string', () => { expect(component.description).toBe('this is a desc'); }); it('should return truthy as workspace is empty', () => { expect(Workspace.checkIfWorkspaceEmpty()).toBeTruthy(); }); it('should return falsey as workspace is not empty', () => { component.ngOnInit(); window['scope'] = { id: 1620892078891, canvas: { x: 0, y: 0, scale: 1 }, project: { name: 'Untitled', description: '', created_at: 1620892078891 }, Resistor: [{ x: 483, y: 209, tx: 68, ty: 100, id: 1620892071196, data: { value: 1000, tolerance: 10 } }] }; expect(Workspace.checkIfWorkspaceEmpty()).toBeFalsy(); }); it('should return truthy after downloading json file', () => { expect(Workspace.SaveJson()).toBeTruthy(); }); }); ================================================ FILE: ArduinoFrontend/src/app/export-jsondialog/export-jsondialog.component.ts ================================================ import { Component, Inject, OnInit } from '@angular/core'; import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material'; import { Workspace } from '../Libs/Workspace'; @Component({ selector: 'app-export-jsondialog', templateUrl: './export-jsondialog.component.html', styleUrls: ['./export-jsondialog.component.css'] }) export class ExportJSONDialogComponent implements OnInit { description: string; fileName = ''; constructor( public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data) { this.description = data.description; this.fileName = data.title; } ngOnInit() { } /** * Save Project function, Calls Workspace.SaveJson with edited fileName and then closes project */ saveProject() { Workspace.SaveJson(this.fileName, this.description); this.dialogRef.close(); } } ================================================ FILE: ArduinoFrontend/src/app/exportfile/exportfile.component.css ================================================ .radio-group{ display: flex; flex-direction: column; margin-top: 5px; margin-bottom: 55px; height: 100px; } .radio-button{ margin-bottom: 0px; } ================================================ FILE: ArduinoFrontend/src/app/exportfile/exportfile.component.html ================================================

Export as

SVG PNG JPEG ================================================ FILE: ArduinoFrontend/src/app/exportfile/exportfile.component.spec.ts ================================================ ================================================ FILE: ArduinoFrontend/src/app/exportfile/exportfile.component.ts ================================================ import { Component, OnInit } from '@angular/core'; import { Download, ImageType } from '../Libs/Download'; import { Title } from '@angular/platform-browser'; import { MatDialogRef } from '@angular/material'; /** * Declare window so that custom created function don't throw error */ declare var window; /** * Class For Export Dialog Component */ @Component({ selector: 'app-exportfile', templateUrl: './exportfile.component.html', styleUrls: ['./exportfile.component.css'] }) export class ExportfileComponent { /** * Constructor For Export Dialog * @param title Project Title * @param dialog Material Dialog Reference */ constructor(private title: Title, private dialog: MatDialogRef) { } /** * Export Workspace to image * @param svg SVG Radio element * @param png PNG Radio element * @param jpg JPG Radio element */ Export(svg, png, jpg) { // Show Loading animation window.showLoading(); if (svg.checked) { Download.ExportImage(ImageType.SVG) .then(v => { Download.DownloadText(this.title.getTitle() + '.svg', [v], { type: 'data:image/svg+xml;charset=utf-8;' }); window.hideLoading(); }); } else if (png.checked) { Download.ExportImage(ImageType.PNG) .then(v => { Download.DownloadImage(v, this.title.getTitle(), ImageType.PNG); window.hideLoading(); }); } else if (jpg.checked) { Download.ExportImage(ImageType.JPG) .then(v => { Download.DownloadImage(v, this.title.getTitle(), ImageType.JPG); window.hideLoading(); }); } else { // Hide loading animation window.hideLoading(); } // Close Dialog this.dialog.close(); } } ================================================ FILE: ArduinoFrontend/src/app/front-page/front-page.component.css ================================================ #titlepage { background-color: white; position: relative; color: black; top: 80px; width: 80%; min-height: 58vh; margin-left: 10%; border-radius: 5px; box-sizing: border-box; justify-content: space-around; } .button { --border-size: 2px; margin-left: 5px; padding: 1.5em 3em; appearance: none; border: 0; background: transparent; color: blue; text-transform: uppercase; letter-spacing: .25em; outline: none; cursor: pointer; font-weight: bold; border-radius: 0; box-shadow: inset 0 0 0 var(--border-size) currentcolor; } .button:hover{ color: white; background: blue; } @media screen and (max-width: 846px) { #titlepage { width: 100%; } #demo { top: 10px; } } ================================================ FILE: ArduinoFrontend/src/app/front-page/front-page.component.html ================================================

Design Your circuits with Arduino On Cloud!

================================================ FILE: ArduinoFrontend/src/app/front-page/front-page.component.spec.ts ================================================ ================================================ FILE: ArduinoFrontend/src/app/front-page/front-page.component.ts ================================================ import { Component, OnInit } from '@angular/core'; /** * Class For Front page contains Seven Segment animation logic */ @Component({ selector: 'app-front-page', templateUrl: './front-page.component.html', styleUrls: ['./front-page.component.css'] }) export class FrontPageComponent implements OnInit { /** * Mapping For Seven Segment animation */ readonly mapping = [ ['a', 'b', 'c', 'd', 'e', 'f'], // 0 ['b', 'c'], // 1 ['a', 'b', 'g', 'e', 'd'], // 2 ['a', 'b', 'g', 'c', 'd'], // 3 ['f', 'g', 'b', 'c'], // 4 ['a', 'f', 'g', 'c', 'd'], // 5 ['a', 'f', 'g', 'c', 'e', 'd'], // 6 ['a', 'b', 'c'], // 7 ['a', 'b', 'c', 'd', 'e', 'f', 'g'], // 8 ['a', 'b', 'f', 'g', 'c', 'd'], // 9 ['a', 'b', 'c', 'e', 'f', 'g'], // A ['f', 'g', 'c', 'e', 'd'], // b ['a', 'd', 'e', 'f'], // c ['b', 'c', 'd', 'e', 'g'], // d ['a', 'd', 'e', 'f', 'g'], // E ['a', 'e', 'f', 'g'], // F [] // all off ]; /** * Current Digit */ digit = 0; /** * Constructor For Front page */ constructor() { } /** * On Init Front page */ ngOnInit() { // Set animation Interval setInterval(() => { // TODO: For optimization glow only those bars which are changed // Stop Glow in every bar of seven segment for (const className of this.mapping[8]) { const els = document.getElementsByClassName(className) as any; if (els.length < 3) { continue; } els[0].style.opacity = '0'; els[1].style.opacity = '0'; els[2].setAttribute('fill', '#b2b2b2'); } // From mapping glow only required bar for (const ClassName of this.mapping[this.digit]) { const els = document.getElementsByClassName(ClassName) as any; if (els.length < 3) { continue; } els[0].style.opacity = '0.333'; els[1].style.opacity = '0.333'; els[2].setAttribute('fill', '#ffa500'); } // Increment the Digit ++this.digit; // If digit is big reset the digit if (this.digit >= 17) { this.digit -= 17; } }, 1000); } } ================================================ FILE: ArduinoFrontend/src/app/gallery/gallery.component.css ================================================ .subbox { box-sizing: border-box; width: 95%; height: auto; background-color: white; border-radius: 0.3125em; margin-bottom: 15px; box-shadow: 1px 1px 3px grey; cursor: pointer; margin-left: 2%; justify-content: space-evenly; } .item-img { min-height: 180px; max-width: 100%; max-height: 180px; } .subbox:hover { box-shadow: 2px 2px 9px grey; } .footer{ display: flex; justify-content: space-between; } ================================================ FILE: ArduinoFrontend/src/app/gallery/gallery.component.html ================================================

No Experiments Available

{{ DateTime(item) }}
{{item.name}}

No Published Circuit Available

================================================ FILE: ArduinoFrontend/src/app/gallery/gallery.component.spec.ts ================================================ ================================================ FILE: ArduinoFrontend/src/app/gallery/gallery.component.ts ================================================ import { Component, OnInit } from '@angular/core'; import { ApiService } from '../api.service'; import { filter, map } from 'rxjs/operators'; import { Login } from '../Libs/Login'; import { AlertService } from '../alert/alert-service/alert.service'; import { environment } from 'src/environments/environment'; import { MatSnackBar } from '@angular/material'; /** * For Handling Time ie. Prevent moment error */ declare var moment; /** * Class For Galley Page (Component) */ @Component({ selector: 'app-gallery', templateUrl: './gallery.component.html', styleUrls: ['./gallery.component.css'] }) export class GalleryComponent implements OnInit { /** * Store Samples */ samples: any[] = []; /** * Determines whether staff is */ isStaff = false; /** * Gallery Page Constructor * @param api API Service */ constructor( private api: ApiService, private alertService: AlertService, private snackbar: MatSnackBar, ) { } /** * On Init Page */ ngOnInit() { this.api.login().then(() => { const token = Login.getToken(); if (token) { this.api.getRole(token).subscribe((result: any) => { result.is_arduino_staff === true ? this.isStaff = true : this.isStaff = false; }); } }).catch(() => { }); // Add Page Title document.title = 'Gallery | Arduino On Cloud'; // Show Loading animation window['showLoading'](); // Fetch Samples this.api.fetchSamples().subscribe((samples: any[]) => { samples.map(d => { if (!environment.production) { this.samples.push(Object.assign({}, d, { media: environment.IMG_URL + d.media })); } else { this.samples.push(d); } }); // Hide Loading Animation window['hideLoading'](); }, err => { // show error and hide animation console.log(err); window['hideLoading'](); }); // TODO: Fetch Published Circuit } /** * Returns the time difference from now in a string * @param item Gallery Card item */ DateTime(item) { item.time = moment(item.create_time).fromNow(); } getUserInfo() { // this.api.getRole(Login).subscribe() } /** * Deletes project from gallery * @param saveId component Id * @param name name of the component */ DeleteCircuit(saveId: any, name: any) { this.api.deleteProjectFromGallery(saveId, Login.getToken()).subscribe((done) => { this.samples = []; this.ngOnInit(); this.snackbar.open('Circuit Deleted.', null, { duration: 2000 }); }, (e) => { console.log(e); }); } /** * Delete the Project from Database * @param id Project id * @param name Project's name */ deleteProjectFromGallery(id, name) { // ASK for user confirmation AlertService.showConfirm('Are You Sure You want to Delete Circuit', () => this.DeleteCircuit(id, name), () => { }); } } ================================================ FILE: ArduinoFrontend/src/app/graph/graph.component.css ================================================ .graph-container { max-width: fit-content; min-width: 420px; min-height: 180px; padding: 15px; border: 1px solid black; } /* left: 50px; display: block; position: fixed; z-index: 700; background: #fff; top: 120px; box-shadow: 2px 2px 9px rgba(0, 0, 0, 0.4); border-radius: 5px; } .dragger { cursor: move; } */ .align-right { float: right; } .chartWrapper { position: relative; } .chartWrapper > canvas { position: absolute; left: 0; top: 0; pointer-events:none; } .chartAreaWrapper { width: 600px; overflow-x: scroll; } ================================================ FILE: ArduinoFrontend/src/app/graph/graph.component.html ================================================
Pin : {{ pinLabel }}
================================================ FILE: ArduinoFrontend/src/app/graph/graph.component.ts ================================================ import { Component, Directive, Input, OnInit, AfterViewInit, Output } from '@angular/core'; import { Chart } from 'chart.js'; import { GraphDataService } from '../graph-data.service'; import { Workspace } from '../Libs/Workspace'; import { EventEmitter } from '@angular/core'; @Component({ selector: 'app-graph', templateUrl: './graph.component.html', styleUrls: ['./graph.component.css'] }) export class GraphComponent implements OnInit, AfterViewInit { data: number[]; xlabels: number[]; pinGraph: Chart; chartConfig: any; previousTime: Date; @Input() id: string; @Input() arduinoId: number; @Input() arduinoName: string; state: boolean; nodes: string[]; ignored = false; pinLabel = ''; constructor(private graphDataService: GraphDataService) { this.data = []; this.xlabels = []; this.chartConfig = {}; this.previousTime = new Date(); this.nodes = []; } ngOnInit() { this.pinLabel = `${this.arduinoName} - D${15 - parseInt(this.id, 10)}`; Workspace.simulationStopped.subscribe(res => { this.ignored = false; }); Workspace.simulationStarted.subscribe(res => { this.clearGraph(); }); } ngAfterViewInit() { const canvasElement = `graph${this.id}`; this.configChart(); this.pinGraph = new Chart(document.getElementById(canvasElement) as HTMLCanvasElement, this.chartConfig); GraphDataService.voltageChange.subscribe(res => { if (this.arduinoId === res.arduino.id) { const pinNumber = 15 - parseInt(this.id, 10); this.pinGraph.data.datasets[0].label = res.label; this.data.push((res.value >> pinNumber) & 1); if (this.xlabels.length === 0) { this.xlabels.push(new Date(res.time).getTime() - new Date(res.time).getTime()); } else { this.xlabels.push(new Date(res.time).getTime() - new Date(this.previousTime).getTime()); } this.previousTime = new Date(res.time); // console.log(this.pinLabel, this.data); // console.log(this.pinLabel, this.xlabels); this.pinGraph.update(); } }); } clearGraph() { this.data.splice(0, this.data.length); this.xlabels.splice(0, this.xlabels.length); this.pinGraph.update(); } configChart() { this.chartConfig = { animationEnabled: true, type: 'line', data: { labels: this.xlabels, datasets: [{ label: 'PIN', fill: false, backgroundColor: 'rgb(0, 0, 0)', borderColor: 'rgb(0, 0, 0)', data: this.data, steppedLine: true, }], }, options: { legend: { display: false }, responsive: true, scales: { xAxes: [{ scaleLabel: { display: false, labelString: 'Time' }, gridLines: { display: false }, ticks: { display: false, } }], yAxes: [{ scaleLabel: { display: false, labelString: 'States', }, gridLines: { display: false }, ticks: { beginAtZero: true, min: 0, stepSize: 1, max: 2, callback: (value, index) => { return value > 1 ? '' : value; }, } }], }, }, }; } } ================================================ FILE: ArduinoFrontend/src/app/graph-data.service.ts ================================================ import { Injectable, EventEmitter } from '@angular/core'; @Injectable({ providedIn: 'root' }) export class GraphDataService { public static portDChange: EventEmitter = new EventEmitter(); public static portBChange: EventEmitter = new EventEmitter(); public static voltageChange: EventEmitter = new EventEmitter(); constructor() { } } ================================================ FILE: ArduinoFrontend/src/app/graphlist/graphlist.component.css ================================================ .graph-container { left: calc(100vw - 460px); display: block; position: fixed; max-width: fit-content; min-width: 440px; min-height: 700px; z-index: 700; background: #fff; top: 320px; box-shadow: 2px 2px 9px rgba(0, 0, 0, 0.4); padding: 15px; border-radius: 5px; } .dragger { cursor: move; } .align-right { float: right; } .example-viewport { height: 680px; width: 420px; } .example-item { height: 250px; } .alternate-simulation-text{ align-self: center; } ================================================ FILE: ArduinoFrontend/src/app/graphlist/graphlist.component.html ================================================

Waveforms

Start the simulation to visualize
Number of Data Points: {{dataPoints}}
================================================ FILE: ArduinoFrontend/src/app/graphlist/graphlist.component.ts ================================================ import { Component, Input, OnInit, Output, QueryList, ViewChildren } from '@angular/core'; import { ActivatedRoute, Router } from '@angular/router'; import { EventEmitter } from '@angular/core'; import { AlertService } from '../alert/alert-service/alert.service'; import { ApiService } from '../api.service'; import { GraphComponent } from '../graph/graph.component'; import { Login } from '../Libs/Login'; import { Workspace } from '../Libs/Workspace'; import { SimulatorComponent } from '../simulator/simulator.component'; import { GraphDataService } from '../graph-data.service'; @Component({ selector: 'app-graphlist', templateUrl: './graphlist.component.html', styleUrls: ['./graphlist.component.css'] }) export class GraphlistComponent implements OnInit { @Input() id: number; @Input() saveId: any; @Input() lti: boolean; @Output() simDataSave: EventEmitter = new EventEmitter(); @ViewChildren('pinGraph') graphList!: QueryList; nodes: object[] = []; arduinoList: object[] = []; simulationStatus = false; dataPoints = 0; hexData: number[] = []; initData = false; constructor( private router: Router, private aroute: ActivatedRoute, private api: ApiService) { } readPins() { console.log('Detecting changes'); this.nodes = []; // Workspace.circuitLoadStatus.subscribe(_ => { window['scope'].ArduinoUno.forEach(arduino => { arduino.nodes.forEach(point => { if (point.connectedTo && (point.id <= 13 && point.id >= 2)) { this.nodes.push({point: point.id, arduinoId: arduino.id, arduinoName: arduino.name}); } }); }); window['scope'].ArduinoUno.forEach(arduino => { this.arduinoList.push({arduinoId: arduino.id, arduinoName: arduino.name}); }); // }); } ngOnInit() { Workspace.simulationStarted.subscribe(res => { this.simulationStatus = res; this.dataPoints = 0; this.hexData = []; this.hexData.push(0); this.initData = false; }); Workspace.simulationStopped.subscribe(res => { this.simulationStatus = res; }); this.readPins(); Workspace.circuitLoadStatus.subscribe(res => { this.readPins(); }); document.addEventListener('changed', (r) => { console.log('Detecting changes', r['detail']['ele']['element']); const changeInfo = r['detail']['ele']; if (changeInfo.keyName === 'wires') { const wire = changeInfo['element']; const SarduinoId = wire['start']['keyName'] === 'ArduinoUno' ? wire.start.id : undefined; const EarduinoId = wire['end']['keyName'] === 'ArduinoUno' ? wire.end.id : undefined; if (changeInfo.event === 'delete') { this.nodes = this.nodes.filter(i => { if (SarduinoId && i['arduinoId'] === SarduinoId) { if (i['point'] === wire.start.pid) { return false; } } if (EarduinoId && i['arduinoId'] === EarduinoId) { if (i['point'] === wire.end.pid) { return false; } } return true; }); console.log(this.nodes); } else if (changeInfo.event === 'add') { const Sarduino = SarduinoId ? window['scope'].ArduinoUno.filter(arduino => arduino.id === wire.start.id)[0] : undefined; const Earduino = EarduinoId ? window['scope'].ArduinoUno.filter(arduino => arduino.id === wire.end.id)[0] : undefined; this.pushPoint(Sarduino, wire.start.pid); this.pushPoint(Earduino, wire.end.pid); } } }); GraphDataService.voltageChange.subscribe(res => { if (res.value === 0) { this.initData = true; } if (this.arduinoList[0]['arduinoId'] === res.arduino.id && this.hexData[this.hexData.length - 1] !== res.value) { if (this.initData === true) { this.hexData.push(res.value); this.dataPoints++; } } }); } pushPoint(arduino, pointId) { if (arduino) { const point = arduino['nodes'][pointId]; if (point.connectedTo && (point.id <= 13 && point.id >= 2)) { this.nodes.push({point: point.id, arduinoId: arduino.id, arduinoName: arduino.name}); } } } SaveData() { const pins = []; const newData = {}; this.graphList.forEach(pinGraph => { pins.push(pinGraph.pinLabel); }); this.arduinoList.forEach(ard => { newData[ard['arduinoId']] = { pinConnected: pins, hexVals: this.hexData, length: this.dataPoints }; }); const token = Login.getToken(); if (!this.lti) { this.api.storeSimulationData(this.id, token, newData).subscribe(res => AlertService.showAlert('Record Saved Successfully') , err => AlertService.showAlert(err)); } else { let ltiID; this.aroute.queryParams.subscribe(v => { ltiID = v.lti_id; }); this.api.storeLTISimulationData(this.id, ltiID, token, newData).subscribe(res => { AlertService.showAlert('Record Saved Successfully'); this.simDataSave.emit(true); } , err => { AlertService.showAlert(err); this.simDataSave.emit(false); }); } } } ================================================ FILE: ArduinoFrontend/src/app/header/header.component.css ================================================ ================================================ FILE: ArduinoFrontend/src/app/header/header.component.html ================================================
{{title}}
================================================ FILE: README.md ================================================

eSim and Arduino on Cloud

[![All Contributors](https://img.shields.io/badge/all_contributors-13-orange.svg?style=flat-square)](#contributors-) [![Documentation Status](https://readthedocs.org/projects/esim-cloud/badge/?version=latest)](https://esim-cloud.readthedocs.io/en/latest/?badge=latest) [![Discord](https://img.shields.io/discord/737767491266281583?color=blue&label=chat%20with%20us&logo=discord)](https://discord.gg/cZbDD8K) [![CodeFactor](https://www.codefactor.io/repository/github/frg-fossee/esim-cloud/badge)](https://www.codefactor.io/repository/github/frg-fossee/esim-cloud) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-important)](https://img.shields.io/badge/PRs-welcome-important) ![GitHub repo size](https://img.shields.io/github/repo-size/frg-fossee/eSim-Cloud?color=ff69b4&logo=git&logoColor=ff69b4) ![Django Build and Tests](https://github.com/frg-fossee/eSim-Cloud/workflows/Django%20Build%20and%20Tests/badge.svg?branch=develop) ![Angular Build and Tests](https://github.com/frg-fossee/eSim-Cloud/workflows/Angular%20Build%20and%20Tests/badge.svg?branch=develop) ![React Build and Tests](https://github.com/frg-fossee/eSim-Cloud/workflows/React%20Build%20and%20Tests/badge.svg?branch=develop) ![Containers](https://github.com/frg-fossee/eSim-Cloud/workflows/Containers/badge.svg) ![ESLint eda-frontend](https://github.com/frg-fossee/eSim-Cloud/workflows/ESLint%20eda-frontend/badge.svg?branch=develop) [Contributing](#Contributing) | [Credits](#Credits)
--- ## eSim on Cloud This system allows the users to draw analog and digital circuits and simulate them. The users have a facility to drag and drop components from the left pane onto the schematic grid on the right pane. The components on the grid are connected using wires. The circuit can then be simulated using the different simulation parameters (DC Solver, DC Sweep, Transient analysis, and AC analysis). The basic ERC check enables the users to find out errors if any. The size of the schematic grid can be changed from A1 to A5 paper sizes along with portrait and landscape modes. The users can also print the circuit or save it in pdf format for documentation purposes. A demo is shown below. ![eSim Demo](demo/demo-esim.gif) ## Arduino on Cloud This system allows the users to drag and drop Arduino components from the left pane onto the working space on the right. The pins of the Arduino board can be connected to various input/output devices like LED, motor, push button, etc using wires. There is also a facility to change the color of wires, LEDs, and such components, so as to differentiate the easily. The users can then proceed to write their code in the code window which is then simulated. There is an option for the users to print or save it in pdf format for documentation purposes. The basic ERC check enables the users to find out errors if any. A demo is shown below. ![Arduino Demo](demo/demo-arduino.gif) ## Installation * This is only a one time process * Ubuntu (Requirements) * Install [Docker](https://docs.docker.com/desktop/install/ubuntu/) * Install docker compose: ```sudo apt get install docker-compose``` * Windows (Requirements) * Install WSL (Windows Subsystem for Linux) * Open PowerShell or Windows Command Prompt in administrator mode by right-clicking and selecting "Run as administrator" * ```wsl --install``` * Restart your machine. * Install [Docker](https://docs.docker.com/desktop/install/windows-install/) * Start the docker desktop application * Mac (Requirements) * Install [Docker](https://docs.docker.com/desktop/install/mac-install/) * Start the docker desktop application * Setting up * Fork this repository. Make sure that you fork all the branches. * Windows users: Use the Ubuntu App to start the terminal and then proceed ahead. Do not user PowerShell. * Clone your forked repo on your machine: ```git clone https://github.com//eSim-Cloud.git``` * ```cd eSim-Cloud``` * ```git checkout develop```: This will switch to the develop branch * ```/bin/bash first_run.dev.sh```: This will set up and install all the necessary packages and docker images. Depending on your connection it would take around 40 to 45 minutes ## Starting the system * Before proceeding ahead, start your Docker Desktop application (Windows and Mac users only) * Open (terminal - Ubuntu/Mac users) (WSL ubuntu app - Windows users) ### Development Environment (for coders/developers) * ```docker-compose -f docker-compose.dev.yml --env-file .env up ``` * eSim: Browse http://localhost/ and click the Launch button under eSim * Login credentials * Username: admin * Password: admin * Arduino: Browse http://localhost:4200/ ### Production Environment * ```cp .env .env.prod ```: Only for the first time * ```docker-compose -f docker-compose.prod.yml --env-file .env.prod up``` * Browse http://localhost/ and click the launch button for eSim and Arduino, respectively * Login credentials * Username: admin * Password: admin ### Applying Migrations (Only if needed) * At times, while setting up the system, the database might not get set up as required. In such a case, when you visit the gallery of eSim or Arduino, you will not find the sample circuits. Moreover, in eSim, the components in the left pane will not be loaded. In such a case, do the following * Make sure that the dockers are running i.e. you have started either the development or production environment * Open up a new terminal. * ```docker ps``` This command displays the container ids of all running docker containers. * Look for Django's container ID. It would be something like 'c4ac75dd1937' * ```docker exec -it /bin/bash``` * ```sh migrations.sh``` ## Other Commands * To view Django admin panel * Browse http://localhost/api/admin and login with the following credentials * Username: admin * Password: admin * If port 80 is already being used on your system, due which nginx is unable to start for this system and throws an error, you can kill the existing process that uses port 80 * ```sudo kill -9 $(sudo lsof -t -i:80)``` * To start dockers on the server * ``` docker-compose -f docker-compose.prod.yml --env-file .env.prod up --scale django=2 --scale celery=3 -d``` * Note: -d option runs the dockers in the background. To view the logs in the terminal, remove this option * Scale django and celerey as required. Remove them, if the server is unable to take the load * Restart nginx * Development environment: ``` docker-compose -f docker-compose.dev.yml --env-file .env restart nginx``` * Production environment: ``` docker-compose -f docker-compose.prod.yml --env-file .env.prod restart nginx``` * Manually build containers * ```docker-compose -f docker-compose.dev.yml --env-file .env build``` * Run backend container only * ```docker-compose -f docker-compose.dev.yml --env-file .env up django``` * Run eSim along with backend * ``` docker-compose -f docker-compose.dev.yml --env-file .env up eda-frontend ``` * Run Arduino along with backend * ``` docker-compose -f docker-compose.dev.yml --env-file .env up arduino-frontend ``` ## Documentation The latest version of documentation for the project is maintained on [esim-cloud.readthedocs.io](https://esim-cloud.readthedocs.io/) ## Tech stack * Simulation backend * ngspice (eSim) * Arduino compiler * Middleware * Django * REST APIs * Celery * Redis * Frontend * React * mxgraph * Angular * RaphaelJS * [AVR8js simulator - MIT License](https://github.com/wokwi/avr8js) Credits to [Uri Shaked](https://github.com/urish) * Database * MySQL * Postgres * MongoDB * Production * nginx * dockers * Testing * GitHub actions ## Docker Containers ![Docker Containers](docs/images/docker.png) ## Contributing Want to contribute? See our [contributing guidelines](CONTRIBUTING.md). Contributions in any form are welcome. ## Contributors ✨ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):

Darsh Patel

💻 📖 🚇

Darshan Sudake

💻 📖 🎨

felixfaisal

💻 📖 🎨

rohitgeddam

💻 📖 🎨

Navonil Das

💻 📖 🎨

Meet10

💻 📖 🎨

gupta-arpit

💻 🎨

Kartik Gautam

💻 📖 🎨

Nikhil Kumar

💻 📖 🎨

Kaustuv K Chattopadhyay

💻 📖 🎨

Akshat Sharma

💻 📖 🎨

Rugved Somwanshi

💻 📖 🎨

Rajat Maheshwari

💻 📖 🎨
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome! ================================================ FILE: ansible/ansible-playbook.yml ================================================ --- - import_playbook: configure-instance.yml - import_playbook: configure-containers.yml ================================================ FILE: ansible/configure-containers.yml ================================================ - name: Configure Docker hosts: all become: true tasks: - name: Stop service httpd, if running service: name: httpd state: stopped enabled: no ignore_errors: yes - name: Stop service apache2, if running service: name: apache2 state: stopped enabled: no ignore_errors: yes - name: Clone eSim Repo git: repo: https://github.com/frg-fossee/eSim-Cloud.git dest: /home/{{ansible_user_id}}/eSim-Cloud version: develop # - name: Run First Run Script # shell: cd /home/{{ansible_user_id}}/eSim-Cloud && ./first_run.dev.sh - name: Stop Existing Containers docker_compose: project_src: /home/{{ansible_user_id}}/eSim-Cloud files: docker-compose.dev.yml state: absent register: docker_output - name: Check State debug: var: docker_output - name: Start DB Container docker_compose: project_src: /home/{{ansible_user_id}}/eSim-Cloud files: docker-compose.dev.yml services: db state: present - name: Check db running assert: that: - "db['esim-cloud_db_1'].state.running" - name: Start Django Container docker_compose: project_src: /home/{{ansible_user_id}}/eSim-Cloud files: docker-compose.dev.yml services: django state: present - name: Check django running assert: that: - "django['esim-cloud_django_1'].state.running" ================================================ FILE: ansible/configure-instance.yml ================================================ - name: Configue Docker hosts: all become: true tasks: - name: Install aptitude using apt apt: name=aptitude state=latest update_cache=yes force_apt_get=yes - name: Install required system packages apt: state: latest update_cache: yes pkg: - apt-transport-https - ca-certificates - curl - software-properties-common - python3-pip - virtualenv - python3-setuptools - name: Add Docker GPG apt Key apt_key: url: https://download.docker.com/linux/{{ansible_distribution|lower}}/gpg state: present - name: Add Docker Repository apt_repository: repo: deb [arch=amd64] https://download.docker.com/linux/{{ansible_distribution|lower}} {{ansible_distribution_release}} stable state: present - name: Update apt and install docker-ce apt: update_cache=yes name=docker-ce state=latest - name: Install Docker Module for Python pip: name: docker - name: Install Docker-Compose Module for Python pip: name: docker-compose - name: add user mod command: usermod -aG docker {{ansible_user_id}} - name: download docker-compose get_url: url: "https://github.com/docker/compose/releases/download/1.25.5/docker-compose-{{ ansible_system }}-{{ ansible_userspace_architecture }}" dest: /usr/local/bin/docker-compose mode: 'u+x,g+x' - name: Docker-compose permissions file: src: /usr/local/bin/docker-compose dest: /usr/bin/docker-compose state: link ================================================ FILE: docker-compose.dev.yml ================================================ version: '3' services: nginx: image: nginx ports: - 80:80 volumes: - tmp_vol:/tmp - ./Nginx/dev.conf.d:/etc/nginx/conf.d - ./Nginx/static_pages:/usr/share/nginx/static_pages - ./esim-cloud-backend/static:/usr/share/nginx/django_static - ./esim-cloud-backend/file_storage:/usr/share/nginx/django_file_storage - ./esim-cloud-backend/kicad-symbols/:/usr/share/nginx/kicad-libs depends_on: - django - eda-frontend - arduino-frontend eda-frontend: image: "docker.pkg.github.com/frg-fossee/esim-cloud/eda-frontend:dev" build: ./eda-frontend/ command: > sh -c "npm install && npm start" ports: - "3000:3000" volumes: - ./eda-frontend:/code environment: - NODE_ENV=development - "PUBLIC_URL=${EDA_PUBLIC_URL}" stdin_open: true depends_on: - django - celery - redis - db arduino-frontend: image: "docker.pkg.github.com/frg-fossee/esim-cloud/arduino-frontend:dev" build: ./ArduinoFrontend/ command: > sh -c "npm install && npm start" ports: - "4200:4200" volumes: - ./ArduinoFrontend:/code environment: - NODE_ENV=development depends_on: - django - celery - redis - db django: image: "docker.pkg.github.com/frg-fossee/esim-cloud/django:dev" build: ./esim-cloud-backend/ command: "python3 manage.py runserver 0.0.0.0:8000" ports: - "8000:8000" volumes: - ./esim-cloud-backend:/code - run_vol:/var/run - cache_vol:/var/cache - tmp_vol:/tmp depends_on: - redis - db - celery env_file: - .env links: - "redis:redis_cache" - "db:mysql" celery: image: "docker.pkg.github.com/frg-fossee/esim-cloud/celery:dev" build: ./esim-cloud-backend/ command: celery -A esimCloud.celery worker -l info --concurrency=1 links: - "redis:redis_cache" - "db:postgres" env_file: - .env volumes: - ./esim-cloud-backend:/code - run_vol:/var/run - cache_vol:/var/cache - tmp_vol:/tmp depends_on: - redis - db redis: image: "redis:${TAG_REDIS}" environment: - ALLOW_EMPTY_PASSWORD=yes - REDIS_DISABLE_COMMANDS=FLUSHDB,FLUSHALL volumes: - ./redis_data:/data # Uncomment this and Change appropriate env variables to switch to mysql # db: # image: "mysql:${TAG_MYSQL}" # command: --default-authentication-plugin=mysql_native_password # env_file: # - .env # volumes: # - ./mysql_data:/var/lib/mysql db: image: postgres volumes: - ./postgres_data:/var/lib/postgresql/data/ env_file: - .env volumes: run_vol: driver_opts: type: tmpfs device: tmpfs cache_vol: driver_opts: type: tmpfs device: tmpfs tmp_vol: driver_opts: type: tmpfs device: tmpfs ================================================ FILE: docker-compose.prod.yml ================================================ version: '3' services: nginx: image: nginx ports: - 80:80 volumes: - tmp_vol:/tmp - ./Nginx/conf.d:/etc/nginx/conf.d - ./Nginx/static_pages:/usr/share/nginx/static_pages - ./eda-frontend/build:/usr/share/nginx/eda - ./ArduinoFrontend/dist:/usr/share/nginx/arduino-build - ./esim-cloud-backend/static:/usr/share/nginx/django_static - ./esim-cloud-backend/file_storage:/usr/share/nginx/django_file_storage - ./esim-cloud-backend/kicad-symbols/:/usr/share/nginx/kicad-libs depends_on: - django - eda-frontend - arduino-frontend eda-frontend: image: "docker.pkg.github.com/frg-fossee/esim-cloud/eda-frontend:master" build: ./eda-frontend/ command: > sh -c "npm install && npm run build" environment: - "PUBLIC_URL=${EDA_PUBLIC_URL}" volumes: - ./eda-frontend:/code arduino-frontend: image: "docker.pkg.github.com/frg-fossee/esim-cloud/arduino-frontend:master" build: ./ArduinoFrontend/ command: > sh -c "npm install && npm run ng -- build --prod --aot --base-href ${ARDUINO_BASE_HREF}" # environment: # - NODE_ENV=production volumes: - ./ArduinoFrontend:/code django: image: "docker.pkg.github.com/frg-fossee/esim-cloud/django:master" build: ./esim-cloud-backend/ command: > sh -c "gunicorn -w ${GUNICORN_WORKERS} --reload -b 0.0.0.0:8000 --log-level info esimCloud.wsgi" volumes: - ./esim-cloud-backend:/code - run_vol:/var/run - cache_vol:/var/cache - tmp_vol:/tmp depends_on: - redis - db - celery env_file: - .env.prod environment: - DJANGO_DEBUG=True links: - "redis:redis" - "db:db" celery: image: "docker.pkg.github.com/frg-fossee/esim-cloud/celery:master" build: ./esim-cloud-backend/ command: "celery -A esimCloud.celery worker -l info --concurrency=${CELERY_WORKERS}" links: - "redis:redis_cache" - "db:postgres" env_file: - .env.prod environment: - DJANGO_DEBUG=True volumes: - ./esim-cloud-backend:/code - run_vol:/var/run - cache_vol:/var/cache - tmp_vol:/tmp depends_on: - redis - db links: - "redis:redis" - "db:db" deploy: replicas: 3 redis: image: "redis:${TAG_REDIS}" environment: - ALLOW_EMPTY_PASSWORD=yes - REDIS_DISABLE_COMMANDS=FLUSHDB,FLUSHALL volumes: - ./redis_data:/data # Uncomment this and Change appropriate env variables to switch to mysql # db: # image: "mysql:${TAG_MYSQL}" # command: --default-authentication-plugin=mysql_native_password # env_file: # - .env.prod # volumes: # - ./mysql_data:/var/lib/mysql db: image: postgres volumes: - ./postgres_data:/var/lib/postgresql/data/ env_file: - .env.prod volumes: run_vol: driver_opts: type: tmpfs device: tmpfs cache_vol: driver_opts: type: tmpfs device: tmpfs tmp_vol: driver_opts: type: tmpfs device: tmpfs ================================================ FILE: docs/arduino/components.rst ================================================ Creating an Component for Simulator ============================================= .. toctree:: :numbered: :maxdepth: 2 :caption: Contents: ================================================ FILE: docs/arduino/index.rst ================================================ Arduino Frontend Guide ============================================= ************************ Serve on a Local Machine ************************ **Note: Required Node JS and Angular 7** * For installing nodejs and npm visit ( https://nodejs.org/en/download/) Open Command prompt (or powershell) and enter the following: :: npm install -g @angular/cli ng --version Without Docker ############### Please Follow the Steps. 1. Open Command promt 2. Navigate to folder **dist/eSim-cloud/ArduinoFrontend/** 3. Execute the following command to start Angular server: :: ng serve 4. For more serve commands visit (https://angular.io/cli/serve) 5. To build the app and deploy your Angular application to a remote server: :: ng build --prod With Docker ########### Configuring Production Environment ================================== * Install Docker and docker-compose for server OS * ``git clone git@github.com:frg-fossee/eSim-Cloud.git && cd eSim-Cloud`` * ``cp .env .env.prod`` **(PLEASE CHANGE DEFAULT CREDENTIALS IN THE .env.prod FILE)** * ``docker-compose -f docker-compose.prod.yml --env-file .env.prod up --scale django=2 --scale celery=3 -d`` Configuring Development Environment =================================== Setting up docker containers ---------------------------- * Install docker-ce and docker-compose for your OS * To Build/ReBuild necessary containers using ``docker-compose -f docker-compose.dev.yml build`` For Frontend Containers and backend containers ---------------------------------------------- **( Please note these containers are only for dev environment, in production compiled files will be served by nginx)** * To run arduino-frontend along with all backend containers ``docker-compose -f docker-compose.dev.yml up arduino-frontend`` Supported Browsers ****************** Our Web Application is supported by the following browsers: * Google Chrome * Mozilla Firefox * Opera * Microsoft Edge * Safari .. toctree:: :maxdepth: 2 :titlesonly: :glob: components.rst ================================================ FILE: docs/arduinoCloud/features.rst ================================================ ======== Features ======== The Arduino circuit designer is divided into 2 panes. The left pane consists of the components, while the right pane consists of a workspace on which the components will be dropped and the circuit will be designed. More details are given below. Component categories #################### The components are categorized as follows: +----------------+---------------------------------------------------------------------------------------------------------------------------------+ | Categories | Components | +================+=================================================================================================================================+ | General | Resistor, Breadboard | +----------------+---------------------------------------------------------------------------------------------------------------------------------+ | Controllers | Arduino UNO | +----------------+---------------------------------------------------------------------------------------------------------------------------------+ | Output | Buzzer, LED, Motor, LCD, Servo Motor, 7 segment display, RGB LED | +----------------+---------------------------------------------------------------------------------------------------------------------------------+ | Input | Push button, Ultrasonic Distance Sensor, PIR Sensor, Slide switch, Photo sensor, Temperature Sensor, Potentiometer, Gas Sensor | +----------------+---------------------------------------------------------------------------------------------------------------------------------+ | Sources | 9v Battery, Coin cell 3v | +----------------+---------------------------------------------------------------------------------------------------------------------------------+ | Drivers | Motor driver L298N | +----------------+---------------------------------------------------------------------------------------------------------------------------------+ | Miscellaneous | Label, Relay module | +----------------+---------------------------------------------------------------------------------------------------------------------------------+ Workspace ######### A workspace is a place where the user can drop the components and design the arduino circuit by connecting the components using wires. Component Info / Properties ########################### The properties for each component can be set by clicking on the component and changing/setting the desired value in the box on the right. For example, one can change the color of LED, set resistence value, etc. To know more information about the component, one can click the ``View Info`` button. ERC Check ######### Basic ERC check is done for simulating a circuit. For example, if the wires are connected or not. View/Download Component List ############################ The list of components and its quantity which are present on the workspace can be viewed or downloaded in CSV format. This come handy for maintaining a check list or a buying list, when one switches from the web based arduino designer to a physical one. Export ###### The circuit can be exported as ``jpeg``, ``png``, and ``svg``. This is useful for documenting and printing. Code editor ########### A code editor is a place where the users will write the code (logic) for simulation. This is nothing but ``ino`` file, which can be downloaded for use in Arduino IDE. There is also a facility to include the supported header files like EEPROM, LiquidCrystal, Servo, SoftwareSerial, Wire, and SPI. Simulator ######### The Simulation toggle button starts/stops the simulation. The console window displays the logs and output if any for the simulation. Saving and Re-opening ##################### The circuits are saved only of an authenticated user and are displayed on the user dashboard. The same can be reopened as well for further editing. Dashboard ######### A place where the authenticated user can view the different circuits designed by him/her. Gallery ####### A set of example projects (circuit design and code) which can be referred by the users. This is an addon material helpful for the novice users who need to get a feel of the system and the circuit design. ================================================ FILE: docs/arduinoCloud/flow.rst ================================================ ======================== Arduino Development Flow ======================== Drawing Components and Rendering in Browser ########################################### * Each component is drawn in Inkscape which is exported as ``.png`` and ``.svg``. These files are stored in ``/ArduinoFrontend/src/assets/images/components/``. This is a one time process. * The ``png`` files (components) are rendered in the components pane (left pane) in the browser. * When the components are dropped onto the workspace on the right, the components are rendered using * ``SVG`` if that component does not have any animation, i.e. they remain static during entire the simulation process * ``Raphael``: if that component produces some animation during the simulation. A basic example would be: glowing of LED. * The details of these components like ``name``, ``pins``, ``drawing path``, ``voltage``, ``current``, ``frequency``, ``color of LED``, etc., are stored in respective json files ``/ArduinoFrontend/src/assets/jsons/`` Capturing Arduino Project Schematic ################################### * The components from the left pane are dropped onto the workspace. The components and their connections are stored in JSON format. Simulation ########## * At first, a basic check is done whether the required components are connected or not. * The code written is then compiled by ``Arduino CLI`` which generates a ``hex code``. * This hex code is then passed to ``AVR8js`` which simulates the components in the browser. ================================================ FILE: docs/arduinoCloud/index.rst ================================================ ================= Introduction to Arduino on Cloud ================= .. toctree:: :maxdepth: 2 :titlesonly: :glob: flow.rst features.rst screenshots.rst ================================================ FILE: docs/arduinoCloud/screenshots.rst ================================================ ================= Screenshots ================= ================================================ FILE: docs/conf.py ================================================ # -*- coding: utf-8 -*- # # Configuration file for the Sphinx documentation builder. # # This file does only contain a selection of the most common options. For a # full list see the documentation: # http://www.sphinx-doc.org/en/master/config # -- Path setup -------------------------------------------------------------- # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. # # import os # import sys # sys.path.insert(0, os.path.abspath('.')) import sphinx_rtd_theme # -- Project information ----------------------------------------------------- project = 'eSim and Arduino on Cloud' author = 'FRG-FOSSEE-Team' # The short X.Y version version = '' # The full version, including alpha/beta/rc tags release = '1' # -- General configuration --------------------------------------------------- # If your documentation needs a minimal Sphinx version, state it here. # # needs_sphinx = '1.0' # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ 'sphinx.ext.autodoc', 'sphinx.ext.doctest', 'sphinx.ext.coverage', 'sphinx_rtd_theme', 'sphinxcontrib.openapi', 'm2r2', ] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: # source_suffix = ['.rst', '.md'] # source_suffix = '.rst' # The master toctree document. master_doc = 'index' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. language = None # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This pattern also affects html_static_path and html_extra_path . exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' # -- Options for HTML output ------------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # html_theme = 'sphinx_rtd_theme' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. # # html_theme_options = {} # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['_static'] # Custom sidebar templates, must be a dictionary that maps document names # to template names. # # The default sidebars (for documents that don't match any pattern) are # defined by theme itself. Builtin themes are using these templates by # default: ``['localtoc.html', 'relations.html', 'sourcelink.html', # 'searchbox.html']``. # # html_sidebars = {} # -- Options for HTMLHelp output --------------------------------------------- # Output file base name for HTML help builder. htmlhelp_basename = 'eSimAndArduinoOnClouddoc' # -- Options for LaTeX output ------------------------------------------------ latex_elements = { # The paper size ('letterpaper' or 'a4paper'). # # 'papersize': 'letterpaper', # The font size ('10pt', '11pt' or '12pt'). # # 'pointsize': '10pt', # Additional stuff for the LaTeX preamble. # # 'preamble': '', # Latex figure (float) alignment # # 'figure_align': 'htbp', } # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ (master_doc, 'eSimAndArduinoOnClouddoc.tex', 'eSim and Arudino on Cloud Documentation', 'FRG-FOSSEE-Team', 'manual'), ] # -- Options for manual page output ------------------------------------------ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ (master_doc, 'esimandarduinooncloud', 'eSim and Arduino on Cloud Documentation', [author], 1) ] # -- Options for Texinfo output ---------------------------------------------- # Grouping the document tree into Texinfo files. List of tuples # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ (master_doc, 'eSimAndArduinoOnClouddoc', 'eSim and Arduino on Cloud Documentation', author, 'eSimAndArduinoOnClouddoc', 'One line description of project.', 'Miscellaneous'), ] # -- Extension configuration ------------------------------------------------- ================================================ FILE: docs/contribute/Contributing.rst ================================================ .. mdinclude:: ../../CONTRIBUTING.md ================================================ FILE: docs/contribute/ContributingGuidelines.rst ================================================ .. mdinclude:: ../../guidelines-checklist/contributing-guidelines.md ================================================ FILE: docs/contribute/NewIssue.rst ================================================ .. mdinclude:: ../../guidelines-checklist/new-issue-guidelines.md ================================================ FILE: docs/contribute/PullRequest.rst ================================================ .. mdinclude:: ../../guidelines-checklist/pullrequest-guidelines.md ================================================ FILE: docs/contribute/index.rst ================================================ ================= Contributing ================= .. toctree:: :maxdepth: 2 :titlesonly: :glob: Contributing.rst ContributingGuidelines.rst NewIssue.rst PullRequest.rst ================================================ FILE: docs/contributors/index.rst ================================================ ================= Credits ================= eSim on the Cloud ################# * `Darsh Patel `_ * `Darshan Sudake `_ * `Faisal Ahmed `_ * `Rohit Geddam `_ Arduino on the Cloud ################# * `Navonil Das `_ * `Meet Shah `_ ================================================ FILE: docs/developerDocs/apidocs.rst ================================================ ==== APIs ==== List of APIs used in this system .. openapi:: ../specs/swagger_openapi.yml ================================================ FILE: docs/developerDocs/dbswitch.rst ================================================ ========================= DB Switching Instructions ========================= * To switch between databases, follow the instructions below * Please note all data in the database will be lost * Turn off existing containers ``docker-compose -f docker-compose.dev.yml down`` * Switch to the needed config inside .env then copy it to prod config ``cp .env .env.prod``, make needed changes ( if required) in the prod config * Uncomment the appropriate DB Block inside docker-compse.(dev/prod).yml, please note only one db block should be present * Build Containers and run db migrations again ``./first_run.dev.sh`` ================================================ FILE: docs/developerDocs/index.rst ================================================ ================= Developer docs ================= .. toctree:: :maxdepth: 2 :titlesonly: :glob: apidocs.rst dbswitch.rst ================================================ FILE: docs/docker/env_variables.rst ================================================ ===================== Environment Variables ===================== +---------------------------+-------------------------------------------------------------------+------------------------+ | Variable | Description | Default | +===========================+===================================================================+========================+ | PYTHONUNBUFFERED | allows for log messages to be immediately dumped witout buffering | True | +---------------------------+-------------------------------------------------------------------+------------------------+ | SQL_ENGINE | SQL Engine used by Django |django.db.backends.mysql| +---------------------------+-------------------------------------------------------------------+------------------------+ | SQL_HOST | Hostname for database server | db | +---------------------------+-------------------------------------------------------------------+------------------------+ | SQL_PORT | Port for database server | 3306 | +---------------------------+-------------------------------------------------------------------+------------------------+ | DJANGO_DEBUG | Debug mode setting for Django | True | +---------------------------+-------------------------------------------------------------------+------------------------+ | MYSQL_ROOT_PASSWORD | Root password for MYSQL | password | +---------------------------+-------------------------------------------------------------------+------------------------+ | MYSQL_DATABASE | Default database name for MYSQL | esimcloud_db | +---------------------------+-------------------------------------------------------------------+------------------------+ | MYSQL_USER | Username for MYSQL Server | user | +---------------------------+-------------------------------------------------------------------+------------------------+ | MYSQL_PASSWORD | password for MYSQL Server | password | +---------------------------+-------------------------------------------------------------------+------------------------+ | MONGO_INITDB_ROOT_USERNAME| Username for MongoDB Initial Database | user | +---------------------------+-------------------------------------------------------------------+------------------------+ | MONGO_INITDB_ROOT_PASSWORD| Password for MongoDB Initial Database | password | +---------------------------+-------------------------------------------------------------------+------------------------+ | MONGO_INITDB_DATABASE | MongoDB Initial Database name | esimcloud_db | +---------------------------+-------------------------------------------------------------------+------------------------+ | TAG_MYSQL | MYSQL Docker Image Tag to pull ( Version ) | 8.0 | +---------------------------+-------------------------------------------------------------------+------------------------+ | TAG_REDIS | Redis Docker Image Tag to pull ( Version ) | alpine3.11 | +---------------------------+-------------------------------------------------------------------+------------------------+ | TAG_MONGO | Mongodb Docker Image Tag to pull ( Version ) | 4.2.6 | +---------------------------+-------------------------------------------------------------------+------------------------+ | GUNICORN_WORKERS | Number of Gunicorn workers to spawn per container | 5 | +---------------------------+-------------------------------------------------------------------+------------------------+ | CELERY_WORKERS | Number of Celery workers to spawn per container | 5 | +---------------------------+-------------------------------------------------------------------+------------------------+ | EDA_PUBLIC_URL | public url used to build react frontend files | http://localhost/eda | +---------------------------+-------------------------------------------------------------------+------------------------+ | ARDUINO_BASE_HREF | public path used to build angular frontend files | /arduino/ | +---------------------------+-------------------------------------------------------------------+------------------------+ .. note:: Please change the default passwords in the **.env.prod** file to secure your instance against attackers. ================================================ FILE: docs/docker/index.rst ================================================ ================= Architecture and Installation ================= The production environment consist of the following docker containers: +-----------------+------------------------------------------------------------------------------------+ | Container Name | Description | +=================+====================================================================================+ | nginx |Used as a reverse proxy to route requests to appropriate endpoints and loadbalancing| +-----------------+------------------------------------------------------------------------------------+ | celery |Used as a reverse proxy to route requests to appropriate endpoints and loadbalancing| +-----------------+------------------------------------------------------------------------------------+ | redis |Used as a cache and a task queue for Celery | +-----------------+------------------------------------------------------------------------------------+ | mongodb |Container running MongoDB Database | +-----------------+------------------------------------------------------------------------------------+ | db |Container running MYSQL Database | +-----------------+------------------------------------------------------------------------------------+ | django |Container running the main Django Backend serving all APIs | +-----------------+------------------------------------------------------------------------------------+ | arduino-frontend|Container running node 10 helping build Angular app for Arduino Simulation Webapp | +-----------------+------------------------------------------------------------------------------------+ | eda-frontend |Container running node 10 helping build React app for EDA CircuitSimulation Webapp | +-----------------+------------------------------------------------------------------------------------+ .. note:: These containers depend on **.env.prod** file, configuration details can be reffered from :doc:`env_variables`. .. image:: ../images/docker.png :width: 600 .. toctree:: :maxdepth: 2 :titlesonly: :glob: installation.rst env_variables.rst ================================================ FILE: docs/docker/installation.rst ================================================ ====================== Installation and Usage ====================== It is essential that `docker `_ and `docker-compose `_ are installed on a system before following the steps. Production Environment ####################### * git clone git@github.com:frg-fossee/eSim-Cloud.git && cd eSim-Cloud * cp .env .env.prod * docker-compose -f docker-compose.prod.yml --env-file .env.prod up --scale django=1 --scale celery=3 -d .. note:: Please change the default passwords in the **.env.prod** file to secure your instance against attackers. Development Environment ####################### * git clone git@github.com:frg-fossee/eSim-Cloud.git && cd eSim-Cloud * git checkout develop * Configure docker with github packages for pulling pre built images * echo $GITHUB_TOKEN | docker login docker.pkg.github.com --username [github_username] --password-stdin * /bin/bash first_run.dev.sh For running only the backend containers *************************************** * docker-compose -f docker-compose.dev.yml up django For running only the eda-frontend container with backend ******************************************************** * docker-compose -f docker-compose.dev.yml up eda-frontend For running only the arduino-frontend container with backend ************************************************************ * docker-compose -f docker-compose.dev.yml up arduino-frontend Useful Commands ############### * docker exec -it * eg. docker exec -it b7e7acf2283e /bin/sh * sh migrations.sh inside a docker container to apply db migrations manually * To seed libraries - python manage.py seed_libs --location kicad-symbols/ inside container * To remove seeded libraries - python manage.py seed_libs --clear inside container ================================================ FILE: docs/eSim_on_Cloud/eSimGallery.rst ================================================ ===================== eSim Gallery Examples ===================== eSim gallery has 6 example circuits. You can open, re-design, save, and simulate them. These are listed below. Voltage Divider ############### .. image:: images/Voltage_Divider.png * Simulation Type: DC Solver * Simulation Parameters: None * Simulation .. image:: images/Voltage_Divider_Simulation.png RC Circuit ########## .. image:: images/RC_Circuit.png * Simulation Type: Transient Analysis * Simulation Parameters * Start Time: 0 * Stop Time: 100m * Step Time: 10m * Simulation .. image:: images/RC_Circuit_Simulation.png Dual RC Ladder ############## .. image:: images/Dual_RC_Ladder.png * Simulation Type: Transient Analysis * Simulation Parameters * Start Time: 0 * Stop Time: 50m * Step Time: 50u * Simulation .. image:: images/Dual_RC_Ladder_Simulation.png Bipolar Amplifier ################# .. image:: images/Bipolar_Amplifier.png * Simulation Type: Transient Analysis * Simulation Parameters * Start Time: 0 * Stop Time: 10m * Step Time: 10u * Simulation .. image:: images/Bipolar_Amplifier_Simulation1.png * Simulation Type: AC Analysis * Simulation Parameters * Type: Decade * Points: 10 * Start frequency: 10 * Stop frequency: 10Meg * Simulation .. image:: images/Bipolar_Amplifier_Simulation2.png Shunt Clipper ############# .. image:: images/Shunt_Clipper.png * Simulation Type: DC Sweep * Simulation Parameters * Component: V1 * Start Voltage: 0 * Stop Voltage: 1 * Step Voltage: 1m * Add Expression: -v1#branch * Simulation .. image:: images/Shunt_Clipper_Simulation.png RC Circuit Parallel ############### .. image:: images/RC_Circuit_Parallel.png * Simulation Type: Transient Analysis * Simulation Parameters * Start Time: 0 * Stop Time: 30m * Step Time: 10u * Simulation .. image:: images/RC_Circuit_Parallel_Simulation.png ================================================ FILE: docs/eSim_on_Cloud/features.rst ================================================ ================= Features ================= The schematic editor is divided into 3 panes. The left pane consists of the ``Component List`` and a facility to search components. The middle pane consists of the grid on which the components will be dropped and the circuit will be designed. The right pane consists of the grid properties, description of the circuit, and components position. More details are given below. Component categories #################### The kicad components are categorized as follows, where each component has ``Name``, ``Description``, ``Keywords``, and ``Datasheet``. * Analog * Device * Triac_Thyristor * Transistor_IGBT * Diode * Transistor_FET * pspice * Oscillator * eSim_Sources * eSim_Hybrid * Motor * LED * Transistor_BJT * power * 4xxx Searching Component ################### Rather than going through categories and locating the component symbol, one can also search a component by typing in the textbox given, using the filters like ``Name``, ``Keyword``, ``Description``, ``Component Library``, and ``Prefix``. Grid size and Orientation ######################### The size of the grid can be changed from A1 to A5 and offers Portrait and Landscape mode Components Position ################### Using the this box, one can access and view the circuit which do not fit onto the specified grid size. Its like accessing another page. This situation arises when one has a large circuit and changes the grid from a larger size to a smaller one. Schematic Description ##################### A text area in which one can write the description about the circuit. Basic Editor Operations ####################### The following basic editor functions are supported: * Undo * Redo * Delete * Zoom in * Zoom out * Default size * Rotate * Print * Clear All: Clear the schematic drawn Gallery ####### Sample circuits are available in the gallery for anyone to refer and use. These circuits can be opened, saved, and simulated. Saving and Re-Opening ##################### The circuits are saved only of an authenticated user and are viewed on the user dashboard. The same can be reopened as well for further editing. Dashboard ######### A place where the authenticated user can view the different circuits designed by him/her. Then user can open the saved circuit into the editor by clicking on ``Launch in Editor``. Export ###### * Image: The circuit can be exported as ``jpeg``, ``png``, and ``svg``. This is useful for documenting and printing. * JSON: The circuit can be exported as ``JSON`` so as to open it again using the Upload feature. Open Schematic ############## The schematic can be opened using the following methods: * Uploading file: One needs to upload the file in ``JSON`` format i.e. which was exported using this tool. * Local: The circuits saved by the authenticated user. * Gallery: The sample circuits available in the gallery for anyone to refer. ERC Check ######### Basic ERC check is done for simulating a circuit. For example, if the wires are connected or not. Generate Netlist ################ Based on the circuit a netlist is generated. The internal process of generating a netlist was described in the previous section. Simulate ######## There are four simulation modes as follows * DC Solver: A DC simulation attempts to find a stable DC solution of your circuit. * DC Sweep: A DC Sweep will plot the DC solution of your circuit across different values of a parameter of a circuit element. You can sweep any numerical parameter of any circuit element in your circuit. * Transient Analysis: A Transient analysis does a Time-Domain Simulation of your circuit over a certain period of time. * AC Analysis: AC Analysis does a small signal analysis of your circuit. The input can be any voltage source or current source. Sharing ####### Using the ``Share`` button one can share the circuit with others using the link generated by the system. The link can be opened and viewed by anyone. However, to make changes one would need to login and the changes saved will be associated with the new user. Spice simulator ############### Using the spice simulator one can type the netlist in the code editor box and simulate it. Simulation result window will popup displaying the result. Note: Add ``> data.txt`` at the end of the control line. .. code:: .control run print all > data.txt .endc .end ================================================ FILE: docs/eSim_on_Cloud/flow.rst ================================================ ===================== eSim Development Flow ===================== .. image:: ../images/flow_lib_to_svg.png .. image:: ../images/flow_schematic_to_simulation.png Reading Component Symbol Library files and Rendering in the Browser ################################################################### The Kicad symbol libraries '.lib' and '.dcm' (https://github.com/KiCad/kicad-symbols) are parsed to generate SVG files that are compatible with the mxgraph (javascript graph library). These components are generated only once and are cached. These generated SVG files are read and rendered in the component list (left pane) using mxgraph. Generating XML files #################### The components from the left pane are dropped onto the schematic grid. By default, the size of the grid is A4, which can be changed from A5 to A1. The components connected by wires are converted to XML format using mxgraph, whenever the circuit is saved by the user. This XML is used to save and re-open the saved circuits. This XML is also used to auto annotate the circuit, and in performing ERC checks as well. Generating Netlist ################## Using the mxgraph object, a netlist is generated (compatible with ngspice simulator) when the user clicks on the 'Simulation' or 'generate netlist' button. The simulation parameters are supplied by the user based on the simulation type chosen by the user. The following are the different parts of netlist generation: * Title: title of the schematic diagram .. code:: RC Circuit * Model: All spice models given by users will be listed here. These are extra parameters which are not delivered with ngspice. They are device manufacturer specific and may be obtained from their web sites or from other sites .. code:: .model BC546B npn ( IS=7.59E-15 VAF=73.4 .........) * Netlist: Text description of circuit. It has all components listed with connecting nodes, parameters and spice model (if specified by the user). This is generated with the help of mxgraph object. An example is shown below .. code:: r1 in out 1k c1 out gnd 10u v1 in gnd pwl(0m 0 0.5m 5 50m 5 50.5m 0 100m 0) Q1 intc intb 0 BC546B * Control Line: It has all simulation parameters. It is generated depending on the type of simulation and the parameters specified by user .. code:: .tran 10e-03 100e-03 0e-03 // Transient analysis .ac dec 10 10 1Meg // AC Analysis * Control Block: All Interactive commands to actually produce output for given schematic. .. code:: .control run print all > data.txt .endc .end Simulation ########## * When the 'Simulate' button is clicked, the ERC checks are performed. If all goes well then the netlist is generated. If not, the error(s) are shown to the user. * This netlist is sent to the backend services. Using the distributed queueing mechanism of Celery, asynchronous requests (netlist files) are kept in queue and passed onto Ngspice. * Ngspice then outputs a text file with all the coordinates required to plot the graph. * This textfile is then parsed using an inhouse parser to convert the data of the text file into an organised data structures (``JSON``). The simulation graph is then plotted and rendered based on the data returned by this ``JSON`` using ``chartjs``. JSON format returned by parser ############################## As mentioned above, the output produced by ngspice is converted to ``JSON``. The format is given below: .. code:: { total_number_of_tables: , isGraph: , data:[ { labels : [ ], x : [ ], y : [ [ ] , [ ] ] , } ] } * total-number-of-tables: The number of tables present. * isGraph: ``True``, if the data is a graph, ``False`` if the data is just a table. * data: An array which contains one or more objects depending on the input provided to the parser. * labels: An array which contains all the labels that have to be present on the graph. Eg. ["time", "vin", "vout"]. * x: An array containing all the ``x`` co-ordinates for a set of graph. E.g. Time on x-axis. This is a linear array as the ``x`` coordinates will be the same for different set of ``y`` coordinates. * y: A 2D array containing ``y`` co-ordinates for different graphs. ================================================ FILE: docs/eSim_on_Cloud/index.rst ================================================ ================= Introduction to eSim on Cloud ================= .. toctree:: :maxdepth: 2 :titlesonly: :glob: flow.rst features.rst eSimGallery.rst screenshots.rst ================================================ FILE: docs/eSim_on_Cloud/screenshots.rst ================================================ ================= Screenshots ================= ================================================ FILE: docs/index.rst ================================================ Welcome to eSim and Arduino on Cloud's documentation! ===================================================== The project aims to provide a facility for a user to design different types of electronic circuits and arduino projects and simulate them by providing simulation parameters on the web. The detailed features will be updated soon. .. toctree:: :numbered: :maxdepth: 2 :caption: Contents: overview/index docker/index eSim_on_Cloud/index arduinoCloud/index developerDocs/index contribute/index contributors/index schematic/index arduino/index Indices and tables ================== * :ref:`genindex` * :ref:`search` ================================================ FILE: docs/overview/index.rst ================================================ ====================== Overview ====================== eSim on Cloud ############# This system allows the users to draw analog and digital circuits and simulate them. The users have a facility to drag and drop components from the left pane onto the schematic grid on the right pane. The components on the grid are connected using wires. The circuit can then be simulated using the different simulation parameters (DC Solver, DC Sweep, Transient analysis, and AC analysis). The basic ERC check enables the users to find out errors if any. The size of the schematic grid can be changed from A1 to A5 paper sizes along with portrait and landscape modes. The users can also print the circuit or save it in pdf format for documentation purposes. Arduino on Cloud ############# This system allows the users to drag and drop Arduino components from the left pane onto the working space on the right. The pins of the Arduino board can be connected to various input/output devices like LED, motor, push button, etc using wires. There is also a facility to change the color of wires, LEDs, and such components, so as to differentiate the easily. The users can then proceed to write their code in the code window which is then simulated. There is an option for the users to print or save it in pdf format for documentation purposes. The basic ERC check enables the users to find out errors if any. .. note:: This docs is created using Read the docs and we will be glad to receive pull requests for updating the same. Please go through the Contribute section to know more. ================================================ FILE: docs/requirements.txt ================================================ sphinxcontrib-openapi m2r2 ================================================ FILE: docs/specs/swagger_openapi.yml ================================================ {"swagger": "2.0", "info": {"title": "eSim Cloud API", "description": "Public API Endpoints for eSim Cloud", "license": {"name": "GPLv3 License"}, "version": "v1"}, "host": "localhost", "schemes": ["http"], "basePath": "/api", "consumes": ["application/json"], "produces": ["application/json"], "securityDefinitions": {"Bearer": {"type": "apiKey", "name": "Authorization", "in": "header"}}, "security": [{"Bearer": []}], "paths": {"/arduino/compile": {"post": {"operationId": "arduino_compile_create", "description": "Compile list of Arduino Sketch File", "parameters": [], "responses": {"201": {"description": ""}}, "tags": ["arduino"]}, "parameters": []}, "/arduino/compile/status": {"get": {"operationId": "arduino_compile_status_list", "description": "Returns Compilation Status", "parameters": [], "responses": {"200": {"description": ""}}, "tags": ["arduino"]}, "parameters": []}, "/auth/google-callback": {"get": {"operationId": "auth_google-callback_list", "description": "Creates user if OAuth token valid", "parameters": [], "responses": {"200": {"description": ""}}, "tags": ["auth"]}, "parameters": []}, "/auth/o/{provider}/": {"get": {"operationId": "auth_o_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/ProviderAuth"}}}, "tags": ["auth"]}, "post": {"operationId": "auth_o_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/ProviderAuth"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/ProviderAuth"}}}, "tags": ["auth"]}, "parameters": [{"name": "provider", "in": "path", "required": true, "type": "string"}]}, "/auth/token/login/": {"post": {"operationId": "auth_token_login_create", "description": "Use this endpoint to obtain user authentication token.", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/TokenCreate"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/TokenCreate"}}}, "tags": ["auth"]}, "parameters": []}, "/auth/token/logout/": {"post": {"operationId": "auth_token_logout_create", "description": "Use this endpoint to logout user (remove user authentication token).", "parameters": [], "responses": {"201": {"description": ""}}, "tags": ["auth"]}, "parameters": []}, "/auth/users/": {"get": {"operationId": "auth_users_list", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/User"}}}}, "tags": ["auth"]}, "post": {"operationId": "auth_users_create", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UserCreate"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/UserCreate"}}}, "tags": ["auth"]}, "parameters": []}, "/auth/users/activation/": {"post": {"operationId": "auth_users_activation", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Activation"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Activation"}}}, "tags": ["auth"]}, "parameters": []}, "/auth/users/me/": {"get": {"operationId": "auth_users_me_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/User"}}}}, "tags": ["auth"]}, "put": {"operationId": "auth_users_me_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/User"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/User"}}}, "tags": ["auth"]}, "patch": {"operationId": "auth_users_me_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/User"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/User"}}}, "tags": ["auth"]}, "delete": {"operationId": "auth_users_me_delete", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["auth"]}, "parameters": []}, "/auth/users/resend_activation/": {"post": {"operationId": "auth_users_resend_activation", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/SendEmailReset"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/SendEmailReset"}}}, "tags": ["auth"]}, "parameters": []}, "/auth/users/reset_password/": {"post": {"operationId": "auth_users_reset_password", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/SendEmailReset"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/SendEmailReset"}}}, "tags": ["auth"]}, "parameters": []}, "/auth/users/reset_password_confirm/": {"post": {"operationId": "auth_users_reset_password_confirm", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/PasswordResetConfirm"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/PasswordResetConfirm"}}}, "tags": ["auth"]}, "parameters": []}, "/auth/users/reset_username/": {"post": {"operationId": "auth_users_reset_username", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/SendEmailReset"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/SendEmailReset"}}}, "tags": ["auth"]}, "parameters": []}, "/auth/users/reset_username_confirm/": {"post": {"operationId": "auth_users_reset_username_confirm", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/UsernameResetConfirm"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/UsernameResetConfirm"}}}, "tags": ["auth"]}, "parameters": []}, "/auth/users/set_password/": {"post": {"operationId": "auth_users_set_password", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/SetPassword"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/SetPassword"}}}, "tags": ["auth"]}, "parameters": []}, "/auth/users/set_username/": {"post": {"operationId": "auth_users_set_username", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/SetUsername"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/SetUsername"}}}, "tags": ["auth"]}, "parameters": []}, "/auth/users/{id}/": {"get": {"operationId": "auth_users_read", "description": "", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/User"}}}, "tags": ["auth"]}, "put": {"operationId": "auth_users_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/User"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/User"}}}, "tags": ["auth"]}, "patch": {"operationId": "auth_users_partial_update", "description": "", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/User"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/User"}}}, "tags": ["auth"]}, "delete": {"operationId": "auth_users_delete", "description": "", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["auth"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this user.", "required": true, "type": "integer"}]}, "/circuits/": {"get": {"operationId": "circuits_list", "description": "Listing Published Circuits", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Circuit"}}}}, "tags": ["circuits"]}, "parameters": []}, "/circuits/{circuit_id}/": {"get": {"operationId": "circuits_read", "description": "Listing Published Circuits", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Circuit"}}}, "tags": ["circuits"]}, "parameters": [{"name": "circuit_id", "in": "path", "description": "A UUID string identifying this circuit.", "required": true, "type": "string", "format": "uuid"}]}, "/components/": {"get": {"operationId": "components_list", "description": "Listing All Library Details", "parameters": [{"name": "name__icontains", "in": "query", "description": "", "required": false, "type": "string"}, {"name": "keyword__icontains", "in": "query", "description": "", "required": false, "type": "string"}, {"name": "description__icontains", "in": "query", "description": "", "required": false, "type": "string"}, {"name": "component_library__library_name__icontains", "in": "query", "description": "", "required": false, "type": "string"}, {"name": "component_library", "in": "query", "description": "", "required": false, "type": "string"}, {"name": "symbol_prefix", "in": "query", "description": "", "required": false, "type": "string"}], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/LibraryComponent"}}}}, "tags": ["components"]}, "parameters": []}, "/components/{id}/": {"get": {"operationId": "components_read", "description": "Listing All Library Details", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/LibraryComponent"}}}, "tags": ["components"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this library component.", "required": true, "type": "integer"}]}, "/libraries/": {"get": {"operationId": "libraries_list", "description": "Listing All Library Details", "parameters": [{"name": "library_name", "in": "query", "description": "", "required": false, "type": "string"}], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Library"}}}}, "tags": ["libraries"]}, "parameters": []}, "/libraries/{id}/": {"get": {"operationId": "libraries_read", "description": "Listing All Library Details", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Library"}}}, "tags": ["libraries"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this library.", "required": true, "type": "integer"}]}, "/publish/circuit/": {"get": {"operationId": "publish_circuit_list", "description": "CRUD for viewing unpublished / published circuits ( Permission Groups )", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Circuit"}}}}, "tags": ["publish"]}, "post": {"operationId": "publish_circuit_create", "description": "CRUD for viewing unpublished / published circuits ( Permission Groups )", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Circuit"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Circuit"}}}, "tags": ["publish"]}, "parameters": []}, "/publish/circuit/{circuit_id}/": {"get": {"operationId": "publish_circuit_read", "description": "CRUD for viewing unpublished / published circuits ( Permission Groups )", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Circuit"}}}, "tags": ["publish"]}, "put": {"operationId": "publish_circuit_update", "description": "CRUD for viewing unpublished / published circuits ( Permission Groups )", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Circuit"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Circuit"}}}, "tags": ["publish"]}, "patch": {"operationId": "publish_circuit_partial_update", "description": "CRUD for viewing unpublished / published circuits ( Permission Groups )", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Circuit"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Circuit"}}}, "tags": ["publish"]}, "delete": {"operationId": "publish_circuit_delete", "description": "CRUD for viewing unpublished / published circuits ( Permission Groups )", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["publish"]}, "parameters": [{"name": "circuit_id", "in": "path", "description": "A UUID string identifying this circuit.", "required": true, "type": "string", "format": "uuid"}]}, "/publish/publishing/": {"get": {"operationId": "publish_publishing_list", "description": "Publishing CRUD Operations", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/Publish"}}}}, "tags": ["publish"]}, "post": {"operationId": "publish_publishing_create", "description": "Publishing CRUD Operations", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Publish"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/Publish"}}}, "tags": ["publish"]}, "parameters": []}, "/publish/publishing/{id}/": {"get": {"operationId": "publish_publishing_read", "description": "Publishing CRUD Operations", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Publish"}}}, "tags": ["publish"]}, "put": {"operationId": "publish_publishing_update", "description": "Publishing CRUD Operations", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Publish"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Publish"}}}, "tags": ["publish"]}, "patch": {"operationId": "publish_publishing_partial_update", "description": "Publishing CRUD Operations", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/Publish"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/Publish"}}}, "tags": ["publish"]}, "delete": {"operationId": "publish_publishing_delete", "description": "Publishing CRUD Operations", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["publish"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this publish.", "required": true, "type": "integer"}]}, "/save": {"post": {"operationId": "save_create", "description": "API to save the state of project to db which can be loaded or shared later", "parameters": [{"name": "save_id", "in": "formData", "required": false, "type": "string", "format": "uuid"}, {"name": "data_dump", "in": "formData", "required": true, "type": "string", "minLength": 1}, {"name": "name", "in": "formData", "required": false, "type": "string", "maxLength": 200, "minLength": 1, "x-nullable": true}, {"name": "description", "in": "formData", "required": false, "type": "string", "maxLength": 400, "minLength": 1, "x-nullable": true}, {"name": "owner", "in": "formData", "required": false, "type": "integer", "x-nullable": true}, {"name": "shared", "in": "formData", "required": false, "type": "boolean"}, {"name": "base64_image", "in": "formData", "required": true, "type": "file"}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/StateSave"}}}, "consumes": ["application/x-www-form-urlencoded"], "tags": ["save"]}, "parameters": []}, "/save/list": {"get": {"operationId": "save_list_list", "description": "Returns Saved data for given username,\nOnly user who saved the state can access it\nTHIS WILL ESCAPE DOUBLE QUOTES", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/StateSave"}}}, "tags": ["save"]}, "parameters": []}, "/save/{save_id}": {"get": {"operationId": "save_read", "description": "Returns Saved data for given save id ,\nOnly user who saved the state can access / update it\nTHIS WILL ESCAPE DOUBLE QUOTES", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/StateSave"}}}, "tags": ["save"]}, "post": {"operationId": "save_create", "description": "Returns Saved data for given save id ,\nOnly user who saved the state can access / update it\nTHIS WILL ESCAPE DOUBLE QUOTES", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/StateSave"}}}, "tags": ["save"]}, "parameters": [{"name": "save_id", "in": "path", "required": true, "type": "string"}]}, "/save/{save_id}/sharing/{sharing}": {"post": {"operationId": "save_sharing_create", "description": "Enables sharing for the given saved state", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/StateSave"}}}, "tags": ["save"]}, "parameters": [{"name": "save_id", "in": "path", "required": true, "type": "string"}, {"name": "sharing", "in": "path", "required": true, "type": "string"}]}, "/simulation/status/{task_id}": {"get": {"operationId": "simulation_status_read", "description": "Returns Simulation results for 'task_id' provided after\nuploading the netlist\n/api/task/", "parameters": [], "responses": {"200": {"description": ""}}, "tags": ["simulation"]}, "parameters": [{"name": "task_id", "in": "path", "required": true, "type": "string"}]}, "/simulation/upload": {"post": {"operationId": "simulation_upload_create", "summary": "API for NetlistUpload", "description": "Requires a multipart/form-data POST Request with netlist file in the\n'file' parameter", "parameters": [], "responses": {"201": {"description": ""}}, "consumes": ["multipart/form-data", "application/x-www-form-urlencoded"], "tags": ["simulation"]}, "parameters": []}, "/tags/": {"get": {"operationId": "tags_list", "description": "CRUD for Tags", "parameters": [], "responses": {"200": {"description": "", "schema": {"type": "array", "items": {"$ref": "#/definitions/CircuitTag"}}}}, "tags": ["tags"]}, "post": {"operationId": "tags_create", "description": "CRUD for Tags", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CircuitTag"}}], "responses": {"201": {"description": "", "schema": {"$ref": "#/definitions/CircuitTag"}}}, "tags": ["tags"]}, "parameters": []}, "/tags/{id}/": {"get": {"operationId": "tags_read", "description": "CRUD for Tags", "parameters": [], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/CircuitTag"}}}, "tags": ["tags"]}, "put": {"operationId": "tags_update", "description": "CRUD for Tags", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CircuitTag"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/CircuitTag"}}}, "tags": ["tags"]}, "patch": {"operationId": "tags_partial_update", "description": "CRUD for Tags", "parameters": [{"name": "data", "in": "body", "required": true, "schema": {"$ref": "#/definitions/CircuitTag"}}], "responses": {"200": {"description": "", "schema": {"$ref": "#/definitions/CircuitTag"}}}, "tags": ["tags"]}, "delete": {"operationId": "tags_delete", "description": "CRUD for Tags", "parameters": [], "responses": {"204": {"description": ""}}, "tags": ["tags"]}, "parameters": [{"name": "id", "in": "path", "description": "A unique integer value identifying this circuit tag.", "required": true, "type": "integer"}]}}, "definitions": {"ProviderAuth": {"type": "object", "properties": {"access": {"title": "Access", "type": "string", "readOnly": true, "minLength": 1}, "refresh": {"title": "Refresh", "type": "string", "readOnly": true, "minLength": 1}, "user": {"title": "User", "type": "string", "readOnly": true, "minLength": 1}}}, "TokenCreate": {"type": "object", "properties": {"password": {"title": "Password", "type": "string", "minLength": 1}, "username": {"title": "Username", "type": "string", "minLength": 1}}}, "User": {"type": "object", "properties": {"email": {"title": "Email address", "type": "string", "format": "email", "maxLength": 254}, "id": {"title": "ID", "type": "integer", "readOnly": true}, "username": {"title": "Username", "description": "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.", "type": "string", "readOnly": true, "minLength": 1}}}, "UserCreate": {"required": ["username", "password"], "type": "object", "properties": {"email": {"title": "Email address", "type": "string", "format": "email", "maxLength": 254}, "username": {"title": "Username", "description": "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.", "type": "string", "pattern": "^[\\w.@+-]+$", "maxLength": 150, "minLength": 1}, "id": {"title": "ID", "type": "integer", "readOnly": true}, "password": {"title": "Password", "type": "string", "minLength": 1}}}, "Activation": {"required": ["uid", "token"], "type": "object", "properties": {"uid": {"title": "Uid", "type": "string", "minLength": 1}, "token": {"title": "Token", "type": "string", "minLength": 1}}}, "SendEmailReset": {"required": ["email"], "type": "object", "properties": {"email": {"title": "Email", "type": "string", "format": "email", "minLength": 1}}}, "PasswordResetConfirm": {"required": ["uid", "token", "new_password"], "type": "object", "properties": {"uid": {"title": "Uid", "type": "string", "minLength": 1}, "token": {"title": "Token", "type": "string", "minLength": 1}, "new_password": {"title": "New password", "type": "string", "minLength": 1}}}, "UsernameResetConfirm": {"required": ["new_username"], "type": "object", "properties": {"new_username": {"title": "Username", "description": "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.", "type": "string", "pattern": "^[\\w.@+-]+$", "maxLength": 150, "minLength": 1}}}, "SetPassword": {"required": ["new_password", "current_password"], "type": "object", "properties": {"new_password": {"title": "New password", "type": "string", "minLength": 1}, "current_password": {"title": "Current password", "type": "string", "minLength": 1}}}, "SetUsername": {"required": ["new_username"], "type": "object", "properties": {"new_username": {"title": "Username", "description": "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.", "type": "string", "pattern": "^[\\w.@+-]+$", "maxLength": 150, "minLength": 1}}}, "Circuit": {"required": ["title", "data_dump", "description"], "type": "object", "properties": {"circuit_id": {"title": "Circuit id", "type": "string", "format": "uuid", "readOnly": true}, "title": {"title": "Title", "type": "string", "maxLength": 200, "minLength": 1}, "sub_title": {"title": "Sub title", "type": "string", "maxLength": 200}, "data_dump": {"title": "Data dump", "type": "string", "minLength": 1}, "author": {"title": "Author", "type": "integer", "x-nullable": true}, "description": {"title": "Description", "type": "string", "minLength": 1}, "last_updated": {"title": "Last updated", "type": "string", "format": "date-time", "readOnly": true}, "publish_request_time": {"title": "Publish request time", "type": "string", "format": "date-time", "readOnly": true}, "base64_image": {"title": "Base64 image", "type": "string", "readOnly": true, "format": "uri"}}}, "ComponentAlternate": {"required": ["dmg", "part", "full_name", "svg_path"], "type": "object", "properties": {"dmg": {"title": "Dmg", "type": "integer", "maximum": 32767, "minimum": 0}, "part": {"title": "Part", "type": "string", "maxLength": 1, "minLength": 1}, "full_name": {"title": "Full name", "type": "string", "maxLength": 200, "minLength": 1}, "svg_path": {"title": "Svg path", "type": "string", "maxLength": 400, "minLength": 1}, "id": {"title": "ID", "type": "integer", "readOnly": true}}}, "LibraryComponent": {"required": ["name", "svg_path", "thumbnail_path", "symbol_prefix", "component_library", "description", "data_link", "full_name", "keyword"], "type": "object", "properties": {"id": {"title": "ID", "type": "integer", "readOnly": true}, "name": {"title": "Name", "type": "string", "maxLength": 200, "minLength": 1}, "svg_path": {"title": "Svg path", "type": "string", "maxLength": 400, "minLength": 1}, "thumbnail_path": {"title": "Thumbnail path", "type": "string", "maxLength": 400, "minLength": 1}, "symbol_prefix": {"title": "Symbol prefix", "type": "string", "maxLength": 10, "minLength": 1}, "component_library": {"title": "Component library", "type": "string", "format": "uri"}, "description": {"title": "Description", "type": "string", "maxLength": 400, "minLength": 1}, "data_link": {"title": "Data link", "type": "string", "format": "uri", "maxLength": 200, "minLength": 1}, "full_name": {"title": "Full name", "type": "string", "maxLength": 200, "minLength": 1}, "keyword": {"title": "Keyword", "type": "string", "maxLength": 200, "minLength": 1}, "alternate_component": {"type": "array", "items": {"$ref": "#/definitions/ComponentAlternate"}, "readOnly": true}}}, "Library": {"required": ["library_name"], "type": "object", "properties": {"library_name": {"title": "Library name", "type": "string", "maxLength": 200, "minLength": 1}, "saved_on": {"title": "Saved on", "type": "string", "format": "date-time", "readOnly": true}, "id": {"title": "ID", "type": "integer", "readOnly": true}}}, "CircuitTag": {"required": ["tag", "description"], "type": "object", "properties": {"tag": {"title": "Tag", "type": "string", "maxLength": 100, "minLength": 1}, "description": {"title": "Description", "type": "string", "maxLength": 200, "minLength": 1}, "id": {"title": "ID", "type": "integer", "readOnly": true}}}, "Publish": {"type": "object", "properties": {"published": {"title": "Published", "type": "boolean"}, "reviewed_by": {"title": "Reviewed by", "type": "string", "format": "uri", "x-nullable": true}, "circuit": {"$ref": "#/definitions/Circuit"}, "tags": {"type": "array", "items": {"$ref": "#/definitions/CircuitTag"}, "readOnly": true}}}, "StateSave": {"required": ["data_dump"], "type": "object", "properties": {"save_time": {"title": "Save time", "type": "string", "format": "date-time", "readOnly": true}, "save_id": {"title": "Save id", "type": "string", "format": "uuid"}, "data_dump": {"title": "Data dump", "type": "string", "minLength": 1}, "name": {"title": "Name", "type": "string", "maxLength": 200, "minLength": 1, "x-nullable": true}, "description": {"title": "Description", "type": "string", "maxLength": 400, "minLength": 1, "x-nullable": true}, "owner": {"title": "Owner", "type": "integer", "x-nullable": true}, "shared": {"title": "Shared", "type": "boolean"}, "base64_image": {"title": "Base64 image", "type": "string", "readOnly": true, "format": "uri"}, "create_time": {"title": "Create time", "type": "string", "format": "date-time", "readOnly": true}}}}} ================================================ FILE: eda-frontend/.dockerignore ================================================ node_modules/ ================================================ FILE: eda-frontend/.eslintignore ================================================ /build/** /coverage/** /docs/** /jsdoc/** /templates/** /tests/bench/** /tests/fixtures/** /tests/performance/** /tmp/** /tools/internal-rules/node_modules/** test.js !.eslintrc.js node_modules/** /node_modules/** ================================================ FILE: eda-frontend/.eslintrc.json ================================================ { "parser": "babel-eslint", "env": { "browser": true, "es6": true, "commonjs": true }, "extends": [ "plugin:react/recommended", "standard" ], "globals": { "Atomics": "readonly", "SharedArrayBuffer": "readonly" }, "parserOptions": { "ecmaFeatures": { "jsx": true }, "ecmaVersion": 2018, "sourceType": "module" }, "plugins": [ "react" ], "rules": { "react/prop-types": "warn" }, "settings": { "react": { "version": "latest" } } } ================================================ FILE: eda-frontend/.gitignore ================================================ # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. # dependencies /node_modules /.pnp .pnp.js # testing /coverage # production /build .svg # misc .DS_Store .env.local .env.development.local .env.test.local .env.production.local .env.prod npm-debug.log* yarn-debug.log* yarn-error.log* #bundle-parcel /dist /.cache ================================================ FILE: eda-frontend/Dockerfile ================================================ FROM node:10-alpine3.11 RUN mkdir /code WORKDIR /code COPY package.json /code/package.json COPY package-lock.json /code/package-lock.json ================================================ FILE: eda-frontend/README.md ================================================ # EDA Frontend ### React application for EDA frontend
## Prerequisites #### Install Node JS Refer to https://nodejs.org/en/ to install nodejs
## Cloning and Running the Application in local Clone the project into local #### Install all the npm packages. Go into the project folder and type the following command to install all npm packages and dependencies ```bash npm install ``` In order to run the application Type the following command ```bash npm start ``` Runs the application in the development mode.
Open **[localhost:3000](http://localhost:3000)** to view it in the browser. The page will reload if you make edits.
You will also see any lint errors in the console. ================================================ FILE: eda-frontend/package.json ================================================ { "name": "eda-frontend", "version": "0.1.0", "private": true, "dependencies": { "@material-ui/core": "^4.11.4", "@material-ui/icons": "^4.11.2", "@material-ui/lab": "^4.0.0-alpha.58", "@testing-library/jest-dom": "^4.2.4", "@testing-library/react": "^9.5.0", "@testing-library/user-event": "^7.2.1", "axios": "^0.21.1", "brace": "^0.11.1", "canvg": "^3.0.7", "chart.js": "^2.9.4", "chartjs-plugin-colorschemes": "^0.4.0", "file-saver": "^2.0.5", "material-ui-popup-state": "^1.8.4", "multiselect-react-dropdown": "^1.7.0", "mxgraph": "^4.2.2", "query-string": "^6.14.1", "randomstring": "^1.2.1", "react": "^16.14.0", "react-ace": "^9.4.1", "react-brace": "^3.6.6", "react-chartjs-2": "^2.11.2", "react-dom": "^16.14.0", "react-draggable": "^4.4.3", "react-loader-spinner": "^3.1.14", "react-redux": "^7.2.4", "react-router-dom": "^5.1.2", "react-scripts": "3.4.1", "redux": "^4.1.0", "redux-logger": "^3.0.6", "redux-thunk": "^2.3.0", "typescript": "^3.9.10", "spinners-react": "^1.0.4" }, "scripts": { "start": "react-scripts start", "build": "export TOOL_NODE_FLAGS='--max_old_space_size=8192' && react-scripts build", "test": "react-scripts test", "eject": "react-scripts eject", "lint": "eslint src" }, "eslintConfig": { "extends": "react-app" }, "browserslist": { "production": [ ">0.3%", "not ie 11", "not dead", "not op_mini all" ], "development": [ ">0.3%", "not ie 11", "not dead", "not op_mini all" ] }, "devDependencies": { "babel-eslint": "^10.1.0", "eslint": "^6.6.0", "eslint-config-standard": "^14.1.1", "eslint-plugin-import": "^2.23.4", "eslint-plugin-node": "^11.1.0", "eslint-plugin-promise": "^4.3.1", "eslint-plugin-react": "^7.24.0", "eslint-plugin-standard": "^4.1.0", "react-test-renderer": "^16.14.0" } } ================================================ FILE: eda-frontend/public/index.html ================================================ EDA
================================================ FILE: eda-frontend/public/manifest.json ================================================ { "short_name": "React App", "name": "Create React App Sample", "icons": [ { "src": "favicon.ico", "sizes": "64x64 32x32 24x24 16x16", "type": "image/x-icon" } ], "start_url": ".", "display": "standalone", "theme_color": "#000000", "background_color": "#ffffff" } ================================================ FILE: eda-frontend/src/App.js ================================================ /* eslint-disable react/prop-types */ import React, { useEffect, useState } from 'react' import { HashRouter, Switch, Route, Redirect } from 'react-router-dom' import CircularProgress from '@material-ui/core/CircularProgress' import Navbar from './components/Shared/Navbar' import Home from './pages/Home' import Login from './pages/Login' import NotFound from './pages/NotFound' import SchematicEditor from './pages/SchematiEditor' import Simulator from './pages/Simulator' import Gallery from './pages/Gallery' import PublicProjects from './pages/Projects' import Dashboard from './pages/Dashboard' import SignUp from './pages/signUp' import ResetPassword from './pages/ResetPassword/Initiation' import ResetPasswordConfirm from './pages/ResetPassword/Confirmation' import ChangePassword from './pages/Account/ChangePassword' import Submissions from './pages/SubmissionPage' import LTISetup from './pages/LTISetup' import { useSelector, useDispatch } from 'react-redux' import { loadUser } from './redux/actions/index' import ProjectPage from './pages/ProjectPage' // Controls Private routes, this are accessible for authenticated users. [ e.g : dashboard ] // and restricted routes disabled for authenticated users. [ e.g : login , signup ] function PrivateRoute ({ component: Component, ...rest }) { const auth = useSelector(state => state.authReducer) const [count, setcount] = useState(0) const dispatch = useDispatch() useEffect(() => { dispatch(loadUser()) }, [dispatch]) if (count === 0) { setcount(1) dispatch(loadUser()) } return { if (auth.isLoading) { return } else if (!auth.isAuthenticated) { return } else { return } }} /> } // Public routes accessible to all users. [ e.g. editor, gallery ] function PublicRoute ({ component: Component, restricted, nav, ...rest }) { const auth = useSelector(state => state.authReducer) const dispatch = useDispatch() useEffect(() => dispatch(loadUser()), [dispatch]) return { if (auth.isLoading) { return } else if (auth.isAuthenticated && restricted) { return } else if (nav) { return (<>) } else { return } }} /> } function App () { return ( // Handles Routing for an application {localStorage.getItem('esim_token') !== null ? : } ) } export default App ================================================ FILE: eda-frontend/src/App.test.js ================================================ // Basic unit test for React application. /* eslint-disable no-undef */ import React from 'react' import { create } from 'react-test-renderer' function Button (props) { return } describe('Button component', () => { test('Matches the snapshot', () => { const button = create( `; ================================================ FILE: eda-frontend/src/components/Dashboard/DashboardHome.js ================================================ import React from 'react' import PropTypes from 'prop-types' import { Card, Grid, Button, Typography, CardActions, CardContent } from '@material-ui/core' import { makeStyles } from '@material-ui/core/styles' import { Link as RouterLink } from 'react-router-dom' import { useSelector } from 'react-redux' import ProgressPanel from './ProgressPanel' const useStyles = makeStyles((theme) => ({ mainHead: { width: '100%', backgroundColor: '#404040', color: '#fff' }, title: { fontSize: 14, color: '#80ff80' } })) // Card displaying user dashboard home page header. function MainCard () { const classes = useStyles() const auth = useSelector(state => state.authReducer) return ( Welcome to your EDA Dashboard Welcome {auth.user.username}... ) } export default function DashboardHome ({ ltiDetails = null }) { const classes = useStyles() const auth = useSelector(state => state.authReducer) return ( <> {/* User Dashboard Home Header */} Hey {auth.user.username} , Track your schematics status here... {/* List recent schematics saved by user */} ) } DashboardHome.propTypes = { ltiDetails: PropTypes.string } ================================================ FILE: eda-frontend/src/components/Dashboard/DashboardOtherProjects.js ================================================ import React, { useEffect } from 'react' import { Card, Grid, Typography, CardContent, Input, IconButton, Popover, FormControl, Tabs, Tab, AppBar, Select, MenuItem, InputLabel } from '@material-ui/core' import { makeStyles } from '@material-ui/core/styles' import { useDispatch, useSelector } from 'react-redux' import ProjectCard from './ProjectCard' import FilterListIcon from '@material-ui/icons/FilterList' import PropTypes from 'prop-types' import { fetchOtherProjects } from '../../redux/actions/index' const useStyles = makeStyles({ mainHead: { width: '100%', backgroundColor: '#404040', color: '#fff' }, title: { fontSize: 14, color: '#80ff80' } }) function TabPanel (props) { const { children, value, index } = props return ( <> {value === index && ( <>{children} )} ) } TabPanel.propTypes = { children: PropTypes.node, index: PropTypes.any.isRequired, value: PropTypes.any.isRequired } function DashboardOtherProjects () { const projects = useSelector(state => state.dashboardReducer.otherProjects) const classes = useStyles() const auth = useSelector(state => state.authReducer) const dispatch = useDispatch() const [value, setValue] = React.useState(0) const [sort, setSort] = React.useState('') const [order, setOrder] = React.useState('ascending') const [filteredProjects, setFilteredProjects] = React.useState(projects) const [anchorEl, setAnchorEl] = React.useState(null) const open = Boolean(anchorEl) useEffect(() => { setFilteredProjects(projects) }, [projects]) useEffect(() => { dispatch(fetchOtherProjects()) }, [dispatch]) const handleFilterOpen = (e) => { if (anchorEl) { setAnchorEl(null) } else { setAnchorEl(e.currentTarget) } } const handleChange = (event, newValue) => { setValue(newValue) } const sortSaves = (sorting, order) => { if (order === 'ascending') { if (sorting === 'name') { setFilteredProjects(filteredProjects.sort((a, b) => a.title > b.title)) } else if (sorting === 'author') { setFilteredProjects(filteredProjects.sort((a, b) => a.author > b.author)) } else if (sorting === 'status') { setFilteredProjects(filteredProjects.sort((a, b) => a.status_name > b.status_name)) } } else { if (sorting === 'name') { setFilteredProjects(filteredProjects.sort((a, b) => a.title < b.title)) } else if (sorting === 'author') { setFilteredProjects(filteredProjects.sort((a, b) => a.author < b.author)) } else if (sorting === 'status') { setFilteredProjects(filteredProjects.sort((a, b) => a.status_name < b.status_name)) } } } const handleSort = (e) => { sortSaves(e.target.value, order) setSort(e.target.value) } const handleOrder = (e) => { setOrder(e.target.value) if (sort !== '') { sortSaves(sort, e.target.value) } } const onSearch = (e) => { setFilteredProjects(projects.filter((o) => // eslint-disable-next-line Object.keys(o).some((k) => { if ((k === 'title' || k === 'description' || k === 'author' || k === 'status_name') && String(o[k]).toLowerCase().includes(e.target.value.toLowerCase())) { return String(o[k]).toLowerCase().includes(e.target.value.toLowerCase()) } } ) )) } return ( <> All the projects which are pending for a review are Listed Below Review Projects {filteredProjects && } {filteredProjects && onSearch(e)} placeholder='Search' />} Select Sort Select Order {filteredProjects.filter(x => { return !x.is_reported }).length !== 0 ? <> {filteredProjects.filter(x => { return !x.is_reported }).map( (project) => { return ( ) } )} : Hey {auth.user.username} , You don't have any projects to review... } {filteredProjects.filter(x => { return x.is_reported }).length !== 0 ? <> {filteredProjects.filter(x => { return x.is_reported }).map( (project) => { return ( ) } )} : Hey {auth.user.username} , You dont have any reported projects to review... } ) } export default DashboardOtherProjects ================================================ FILE: eda-frontend/src/components/Dashboard/DashboardSidebar.js ================================================ import React, { useEffect } from 'react' import { Hidden, Divider, Avatar, List, Typography, ListItem, ListItemText, ListItemAvatar } from '@material-ui/core' import { Link as RouterLink } from 'react-router-dom' import { makeStyles } from '@material-ui/core/styles' import { deepPurple } from '@material-ui/core/colors' import { useDispatch, useSelector } from 'react-redux' import { fetchSchematics, fetchOtherProjects, fetchRole } from '../../redux/actions/index' const useStyles = makeStyles((theme) => ({ toolbar: { minHeight: '45px' }, purple: { color: theme.palette.getContrastText(deepPurple[500]), backgroundColor: deepPurple[500] }, sideItem: { padding: theme.spacing(1.5, 2) }, nested: { paddingLeft: theme.spacing(2), overflow: 'auto', width: '100%', maxHeight: 200 }, nestedSearch: { padding: theme.spacing(0), border: '1px solid #cccccc', margin: theme.spacing(1, 2), borderRadius: '5px' }, input: { marginLeft: theme.spacing(1), flex: 1 } })) // Vertical Navbar for user dashboard export default function DashSidebar (props) { const classes = useStyles() const auth = useSelector(state => state.authReducer) const dispatch = useDispatch() // For Fetching Saved Schematics useEffect(() => { dispatch(fetchSchematics()) dispatch(fetchOtherProjects()) dispatch(fetchRole()) }, [dispatch]) return ( <>
{auth.user.username.charAt(0).toUpperCase()} {auth.roles !== null && auth.roles.group.map((value, key) => (

{value}

))}
} />
{auth.roles && auth.roles.e_sim_reviewer && }
) } ================================================ FILE: eda-frontend/src/components/Dashboard/ProgressPanel.js ================================================ /* eslint-disable react/no-unescaped-entities */ import React, { useEffect } from 'react' import { Tab, Box, Tabs, AppBar, Typography, Grid } from '@material-ui/core' import { makeStyles } from '@material-ui/core/styles' import PropTypes from 'prop-types' import SchematicCard from './SchematicCard' import { useDispatch, useSelector } from 'react-redux' import { fetchSchematics } from '../../redux/actions/index' const useStyles = makeStyles((theme) => ({ root: { flexGrow: 1, width: '100%', backgroundColor: theme.palette.background.paper } })) function TabPanel (props) { const { children, value, index, ...other } = props return ( ) } TabPanel.propTypes = { children: PropTypes.node, index: PropTypes.any.isRequired, value: PropTypes.any.isRequired } function a11yProps (index) { return { id: `scrollable-auto-tab-${index}`, 'aria-controls': `scrollable-auto-tabpanel-${index}` } } export default function ProgressPanel ({ ltiDetails = null }) { const classes = useStyles() const [value, setValue] = React.useState(0) const handleChange = (event, newValue) => { setValue(newValue) } const schematics = useSelector(state => state.dashboardReducer.schematics) const dispatch = useDispatch() // For Fetching Saved Schematics useEffect(() => { dispatch(fetchSchematics()) }, [dispatch]) return (
{/* */} {/* Display overview of recently 4 saved schematics */} {schematics.length !== 0 ? {schematics.slice(0, 4).map( (sch) => { var actual = null var flag = null ltiDetails.map( // eslint-disable-next-line (lti) => { if (lti.model_schematic === sch.save_id || lti.initial_schematic === sch.save_id) { flag = 1 actual = lti.consumer_key // eslint-disable-next-line return } } ) if (flag) { return ( ) } else { return ( ) } // return ( // // // // ) } )} : You have not created any schematic , Create your first one now... } {/* Listing Schematics Under Review */} {/* Start publishing circuit , You don't have any schematics under review... */} {/* Listing Reviewed Schematics */} {/* Start publishing circuit , You don't have any schematics to be tagged by domain expert... */}
) } ProgressPanel.propTypes = { ltiDetails: PropTypes.string } ================================================ FILE: eda-frontend/src/components/Dashboard/ProjectCard.js ================================================ /* eslint-disable camelcase */ import { ButtonBase, Card, CardActionArea, CardContent, CardHeader, CardMedia, Typography } from '@material-ui/core' import React from 'react' import PropTypes from 'prop-types' import { makeStyles } from '@material-ui/core/styles' import { Link as RouterLink } from 'react-router-dom' const useStyles = makeStyles((theme) => ({ media: { height: 0, paddingTop: '56.25%' // 16:9 }, rating: { marginTop: theme.spacing(1), marginLeft: 'auto' }, no: { color: 'red', marginLeft: '10px' } })) export default function ProjectCard ({ pub, is_review }) { const classes = useStyles() return ( <> {pub.description}
Status: {pub.status_name} {/* Updated at {timeSince(pub.save_time)} ago... */}
) } ProjectCard.propTypes = { pub: PropTypes.object, is_review: PropTypes.bool } ================================================ FILE: eda-frontend/src/components/Dashboard/SchematicCard.js ================================================ import React, { useEffect } from 'react' import PropTypes from 'prop-types' import { Button, Typography, Card, CardActionArea, CardActions, CardContent, CardMedia, CardHeader, Tooltip, ButtonBase, Chip, IconButton } from '@material-ui/core' import ScreenShareRoundedIcon from '@material-ui/icons/ScreenShareRounded' import ShareIcon from '@material-ui/icons/Share' import { makeStyles } from '@material-ui/core/styles' import { Link as RouterLink } from 'react-router-dom' import { deleteSchematic, fetchSchematics } from '../../redux/actions/index' import DeleteIcon from '@material-ui/icons/Delete' import { useDispatch } from 'react-redux' import ReportProblemIcon from '@material-ui/icons/ReportProblem' import SimpleSnackbar from '../Shared/Snackbar' const useStyles = makeStyles((theme) => ({ media: { height: 0, paddingTop: '56.25%' // 16:9 }, rating: { marginTop: theme.spacing(1), marginLeft: 'auto' }, no: { color: 'red', marginLeft: '10px' }, paper: { position: 'absolute', width: 400, backgroundColor: theme.palette.background.paper, border: '2px solid #000', boxShadow: theme.shadows[5], padding: theme.spacing(2, 4, 3) }, config: { backgroundColor: theme.palette.background.paper, padding: theme.spacing(1) }, delete: { backgroundColor: 'red', color: 'white' }, formControl: { margin: theme.spacing(1), maxWidth: 150 } })) // Display schematic updated status (e.g : updated 2 hours ago...) function timeSince (jsonDate) { const json = jsonDate const date = new Date(json) const seconds = Math.floor((new Date() - date) / 1000) let interval = Math.floor(seconds / 31536000) if (interval > 1) { return interval + ' years' } interval = Math.floor(seconds / 2592000) if (interval > 1) { return interval + ' months' } interval = Math.floor(seconds / 86400) if (interval > 1) { return interval + ' days' } interval = Math.floor(seconds / 3600) if (interval > 1) { return interval + ' hours' } interval = Math.floor(seconds / 60) if (interval > 1) { return interval + ' minutes' } return Math.floor(seconds) + ' seconds' } // Display schematic created date (e.g : Created On 29 Jun 2020) function getDate (jsonDate) { const json = jsonDate const date = new Date(json) const dateTimeFormat = new Intl.DateTimeFormat('en', { year: 'numeric', month: 'short', day: '2-digit' }) const [{ value: month }, , { value: day }, , { value: year }] = dateTimeFormat.formatToParts(date) return `${day}-${month}-${year}` } // Card displaying overview of onCloud saved schematic. export default function SchematicCard ({ sch }) { const classes = useStyles() const dispatch = useDispatch() useEffect(() => { dispatch(fetchSchematics()) }, [dispatch]) // To handle delete schematic snackbar const [snacOpen, setSnacOpen] = React.useState(false) const handleSnacClick = () => { setSnacOpen(true) } const handleSnacClose = (event, reason) => { if (reason === 'clickaway') { return } setSnacOpen(false) } const clickViewProject = () => { const win = window.open() win.location.href = '/eda/#/project?save_id=' + sch.save_id + '&version=' + sch.project_version + '&branch=' + sch.project_branch + '&project_id=' + sch.project_id win.focus() } const clickViewLTI = () => { window.location.href = `/eda/#/lti?id=${sch.save_id}&version=${sch.version}&branch=${sch.branch}` } return ( <> {/* User saved Schematic Overview Card */} } /> {sch.description} {/* Display updated status */} {sch.project_id && } {sch.lti_id && } {/* Display create LTI app option */} {!sch.lti_id && } {/* Display delete option */} {!sch.project_id && } {/* Display share status */} ) } SchematicCard.propTypes = { sch: PropTypes.object, createCircuit: PropTypes.func, consKey: PropTypes.string } ================================================ FILE: eda-frontend/src/components/Dashboard/SchematicsList.js ================================================ import React, { useEffect } from 'react' import PropTypes from 'prop-types' import { Card, Grid, Button, Typography, CardActions, CardContent, Input, IconButton, Popover, FormControl, Tabs, Tab, AppBar, Select, MenuItem, InputLabel } from '@material-ui/core' import { makeStyles } from '@material-ui/core/styles' import { Link as RouterLink } from 'react-router-dom' import SchematicCard from './SchematicCard' import { useDispatch, useSelector } from 'react-redux' import { fetchSchematics } from '../../redux/actions/index' import FilterListIcon from '@material-ui/icons/FilterList' const useStyles = makeStyles((theme) => ({ mainHead: { width: '100%', backgroundColor: '#404040', color: '#fff' }, title: { fontSize: 14, color: '#80ff80' }, typography: { padding: theme.spacing(2) }, popover: { paddingRight: '10px' } })) function TabPanel (props) { const { children, value, index } = props return ( {value === index && ( <>{children} )} ) } TabPanel.propTypes = { children: PropTypes.node, index: PropTypes.any.isRequired, value: PropTypes.any.isRequired } // Card displaying user my schematics page header. function MainCard () { const classes = useStyles() return ( All schematics are Listed Below My Schematics ) } export default function SchematicsList ({ ltiDetails = null }) { const classes = useStyles() const auth = useSelector(state => state.authReducer) const schematics = useSelector(state => state.dashboardReducer.schematics) const [saves, setSaves] = React.useState(schematics) const dispatch = useDispatch() const [anchorEl, setAnchorEl] = React.useState(null) const open = Boolean(anchorEl) const [value, setValue] = React.useState(0) const [sort, setSort] = React.useState('') const [order, setOrder] = React.useState('ascending') // For Fetching Saved Schematics useEffect(() => { dispatch(fetchSchematics()) }, [dispatch]) useEffect(() => { setSaves(schematics) }, [schematics]) const onSearch = (e) => { setSaves(schematics.filter((o) => // eslint-disable-next-line Object.keys(o).some((k) => { if ((k === 'name' || k === 'description' || k === 'owner' || k === 'save_time' || k === 'create_time') && String(o[k]).toLowerCase().includes(e.target.value.toLowerCase())) { return String(o[k]).toLowerCase().includes(e.target.value.toLowerCase()) } } ) )) } const handleFilterOpen = (e) => { if (anchorEl) { setAnchorEl(null) } else { setAnchorEl(e.currentTarget) } } const sortSaves = (sorting, order) => { if (order === 'ascending') { if (sorting === 'name') { setSaves(saves.sort((a, b) => (a.name > b.name) ? 1 : -1)) } else if (sorting === 'created_at') { setSaves(saves.sort((a, b) => (a.create_time > b.create_time) ? 1 : -1)) } else if (sorting === 'updated_at') { setSaves(saves.sort((a, b) => (a.save_time < b.save_time) ? 1 : -1)) } } else { if (sorting === 'name') { setSaves(saves.sort((a, b) => (a.name < b.name) ? 1 : -1)) } else if (sorting === 'created_at') { setSaves(saves.sort((a, b) => (a.create_time < b.create_time) ? 1 : -1)) } else if (sorting === 'updated_at') { setSaves(saves.sort((a, b) => (a.save_time > b.save_time) ? 1 : -1)) } } } const handleSort = (e) => { sortSaves(e.target.value, order) setSort(e.target.value) } const handleOrder = (e) => { setOrder(e.target.value) if (sort !== '') { sortSaves(sort, e.target.value) } } const handleChange = (event, newValue) => { setValue(newValue) } return ( <> {/* User Dashboard My Schematic Header */} {schematics && } {schematics && onSearch(e)} placeholder='Search' />} Select Sort Select Order {saves.filter(x => { return (x.project_id == null && x.lti_id == null && x.is_submission == null) }).length !== 0 ? <> {saves.filter(x => { return (x.project_id == null && x.lti_id == null && x.is_submission == null) }).map( (sch) => { return ( ) } )} : Hey {auth.user.username} , You dont have any saved schematics... } {saves.filter(x => { return x.project_id }).length !== 0 ? <> {saves.filter(x => { return x.project_id }).map( (sch) => { return ( ) } )} : Hey {auth.user.username} , You dont have any saved projects... } {saves.filter(x => { return x.lti_id }).length !== 0 ? <> {saves.filter(x => { return x.lti_id }).map( (sch) => { return ( ) } )} : Hey {auth.user.username} , You dont have any saved projects... } {saves.filter(x => { return x.is_submission }).length !== 0 ? <> {saves.filter(x => { return x.is_submission }).map( (sch) => { return ( ) } )} : Hey {auth.user.username} , You dont have any saved projects... } ) } SchematicsList.propTypes = { ltiDetails: PropTypes.string } ================================================ FILE: eda-frontend/src/components/LTI/CompareGraph.js ================================================ import React, { useEffect } from 'react' import PropTypes from 'prop-types' import { Typography, Grid, TextField, Paper, Container } from '@material-ui/core' import { makeStyles } from '@material-ui/core/styles' import Graph from '../Shared/Graph' const useStyles = makeStyles((theme) => ({ appBar: { position: 'relative' }, title: { marginLeft: theme.spacing(2), flex: 1 }, header: { padding: theme.spacing(5, 0, 6), color: '#fff' }, paper: { padding: theme.spacing(2), textAlign: 'center', backgroundColor: '#404040', color: '#fff' } })) // {details:{},title:''} simResults export default function CompareGraph ({ expected, given }) { const classes = useStyles() const [xscale, setXScale] = React.useState('si') const [yscale, setYScale] = React.useState('si') const [expectedResult, setExpectedResult] = React.useState(null) const [givenResult, setGivenResult] = React.useState(null) const [precision, setPrecision] = React.useState(5) const precisionArr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] // eslint-disable-next-line const scales = { G: 1000000000, M: 1000000, K: 1000, si: 1, m: 0.001, u: 0.000001, n: 0.000000001, p: 0.000000000001 } useEffect(() => { if (given) { console.log('givenresult', handlePreProcess(given)) setGivenResult(handlePreProcess(given)) } if (expected) { console.log('expectedresult', handlePreProcess(expected)) setExpectedResult(handlePreProcess(expected)) } // eslint-disable-next-line }, [given, expected]) const handlePreProcess = (element) => { let schematic = [] const data = element.data if (element.graph === 'true') { const simResultGraph = { labels: [], x_points: [], y_points: [] } // populate the labels for (let i = 0; i < data.length; i++) { simResultGraph.labels[0] = data[i].labels[0] const lab = data[i].labels // lab is an array containeing labels names ['time','abc','def'] simResultGraph.x_points = data[0].x // labels for (let x = 1; x < lab.length; x++) { simResultGraph.labels.push(lab[x]) } // populate y_points for (let z = 0; z < data[i].y.length; z++) { simResultGraph.y_points.push(data[i].y[z]) } } simResultGraph.x_points = simResultGraph.x_points.map(d => parseFloat(d)) for (let i1 = 0; i1 < simResultGraph.y_points.length; i1++) { simResultGraph.y_points[i1] = simResultGraph.y_points[i1].map(d => parseFloat(d)) } schematic = simResultGraph let val, idx setScales(1, val, idx, null, null, schematic) } else { const simResultText = [] for (let i = 0; i < data.length; i++) { let postfixUnit = '' if (data[i][0].includes('#branch')) { postfixUnit = 'A' } else if (data[i][0].includes('transfer_function')) { postfixUnit = '' } else if (data[i][0].includes('impedance')) { postfixUnit = 'Ohm' } else { if (data[i][0][0] !== 'V') { data[i][0] = `V(${data[i][0]})` } postfixUnit = 'V' } simResultText.push(data[i][0] + ' ' + data[i][1] + ' ' + parseFloat(data[i][2]) + ' ' + postfixUnit + '\n') } schematic = simResultText } return schematic } // DO NOT CHANGE THIS FUNCTION const toFixed = (x) => { let e = 0 if (Math.abs(x) < 1.0) { e = parseInt(x.toString().split('e-')[1]) if (e) { x *= Math.pow(10, e - 1) x = '0.' + (new Array(e)).join('0') + x.toString().substring(2) } } else { e = parseInt(x.toString().split('+')[1]) if (e > 20) { e -= 20 x /= Math.pow(10, e) x += (new Array(e + 1)).join('0') } } return x } // DO NOT CHANGE const decimalCount = (num1, num2) => { const difference = toFixed(num1) - toFixed(num2) const numStr = toFixed(difference).toString() if (Math.abs(difference) < 1) { if (numStr.includes('.')) { return ['decimal', numStr.split('.')[1].length] } } else { return ['notDecimal', numStr.split('.')[0].length] } return ['notDecimal', 1] } // DO NOT CHANGE const decimalCountNonGraph = (num) => { const numStr = num.toString() if (Math.abs(num) < 1) { if (numStr.includes('.')) { const afterDeci = numStr.split('.')[1] let count = 0 while (afterDeci[count] === '0') { count++ } return ['decimal', count + 2] // count + 2 to adjust with the scaling feature. 0.000xyz will become xyz.abc mUnit } } else { return ['notDecimal', numStr.split('.')[0].length] } return ['notDecimal', 1] } const setScales = (g, val, idx, scale = null, setScaleFunc = null, data = null) => { let countX, countY if (g === 1) { countX = decimalCount(Math.min(...data.x_points), Math.max(...data.x_points)) countY = decimalCount(Math.min(...data.y_points[0]), Math.max(...data.y_points[0])) } else { countX = decimalCountNonGraph(val) countY = countX // not required. used only countX for nongraphical output } if (countX[0] === 'decimal') { if (countX[1] > 0 && countX[1] <= 4) { if (g === 1) { setXScale('m') } else { if (scale.length <= idx || scale.length === 0) { scale.push('m') setScaleFunc(scale) } else { scale[idx] = 'm' setScaleFunc(scale) } } } else if (countX[1] > 4 && countX[1] <= 7) { if (g === 1) { setXScale('u') } else { if (scale.length <= idx || scale.length === 0) { scale.push('u') setScaleFunc(scale) } else { scale[idx] = 'u' setScaleFunc(scale) } } } else if (countX[1] > 7 && countX[1] <= 10) { if (g === 1) { setXScale('n') } else { if (scale.length <= idx || scale.length === 0) { scale.push('n') setScaleFunc(scale) } else { scale[idx] = 'n' setScaleFunc(scale) } } } else if (countX[1] > 10 && countX[1] <= 12) { if (g === 1) { setXScale('p') } else { if (scale.length <= idx || scale.length === 0) { scale.push('p') setScaleFunc(scale) } else { scale[idx] = 'p' setScaleFunc(scale) } } } } else { if (countX[1] > 0 && countX[1] <= 4) { if (g === 1) { setXScale('si') } else { if (scale.length <= idx || scale.length === 0) { scale.push('si') setScaleFunc(scale) } else { scale[idx] = 'si' setScaleFunc(scale) } } } else if (countX[1] > 4 && countX[1] <= 7) { if (g === 1) { setXScale('K') } else { if (scale.length <= idx || scale.length === 0) { scale.push('K') setScaleFunc(scale) } else { scale[idx] = 'K' setScaleFunc(scale) } } } else if (countX[1] > 7 && countX[1] <= 10) { if (g === 1) { setXScale('M') } else { if (scale.length <= idx || scale.length === 0) { scale.push('M') setScaleFunc(scale) } else { scale[idx] = 'M' setScaleFunc(scale) } } } else if (countX[1] > 10) { if (g === 1) { setXScale('G') } else { if (scale.length <= idx || scale.length === 0) { scale.push('G') setScaleFunc(scale) } else { scale[idx] = 'G' setScaleFunc(scale) } } } } if (countY[0] === 'decimal') { if (countY[1] > 0 && countY[1] <= 4) { setYScale('m') } else if (countY[1] > 4 && countY[1] <= 7) { setYScale('u') } else if (countY[1] > 7 && countY[1] <= 10) { setYScale('n') } else if (countY[1] > 10 && countY[1] <= 12) { setYScale('p') } } else { if (countY[1] > 0 && countY[1] <= 4) { setYScale('si') } else if (countY[1] > 4 && countY[1] <= 7) { setYScale('K') } else if (countY[1] > 7 && countY[1] <= 10) { setYScale('M') } else if (countY[1] > 10) { setYScale('G') } } } const handleXScale = (evt) => { setXScale(evt.target.value) } const handleYScale = (evt) => { setYScale(evt.target.value) } const handlePrecision = (evt) => { setPrecision(evt.target.value) } return (
{/* Card to display simualtion result screen header */} Your Result
{ precisionArr.map((d, i) => { return ( ) }) }
{givenResult && <> } {expectedResult && <> }
) } CompareGraph.propTypes = { expected: PropTypes.object, given: PropTypes.object // simResults: PropTypes.object } ================================================ FILE: eda-frontend/src/components/LTI/Helper/Testcase.js ================================================ /* eslint-disable no-unused-vars */ /* eslint-disable camelcase */ /* eslint-disable new-cap */ /* eslint-disable */ import mxGraphFactory from 'mxgraph' import store from '../../../redux/store' import * as actions from '../../../redux/actions/actions' import ComponentParameters from '../../SchematicEditor/Helper/ComponentParametersData' var graph const { mxConstants, mxUtils, mxEvent, mxCell, mxMorphing, mxPoint } = new mxGraphFactory() // ERC CHECK FOR SCHEMATIC export function ErcCheck() { var list = graph.getModel().cells // mapping the grid var vertexCount = 0 var errorCount = 0 var PinNC = 0 var stypes = 0 var ground = 0 var wirec = 0 for (var property in list) { var cell = list[property] if (cell.Component === true) { for (var child in cell.children) { var childVertex = cell.children[child] if (childVertex.Pin === true && childVertex.edges === null) { // Checking if connections exist from a given pin ++PinNC ++errorCount } else { for (var w in childVertex.edges) { if (childVertex.edges[w].source === null || childVertex.edges[w].target === null) { ++PinNC } else { if (childVertex.edges[w].source.edge === true || childVertex.edges[w].target.edge === true) { ++wirec } } } } } ++vertexCount } if (cell.symbol === 'PWR') { // Checking for ground console.log('Ground is present') console.log(cell) ++ground } } if (vertexCount === 0) { alert('No Component added') ++errorCount } else if (PinNC !== 0) { alert('Pins not connected') } else if (ground === 0) { alert('Ground not connected') } else { if (errorCount === 0) { alert('ERC Check completed') } } } // ERC Check for Netlist, It also returns a boolean value which is called in the Netlist Generator function ErcCheckNets(graph) { var list = graph.getModel().cells // mapping the grid var vertexCount = 0 var errorCount = 0 var PinNC = 0 var stypes = 0 var ground = 0 for (var property in list) { var cell = list[property] if (cell.Component === true) { for (var child in cell.children) { var childVertex = cell.children[child] if (childVertex.Pin === true && childVertex.edges === null) { graph.getSelectionCell(childVertex) ++PinNC ++errorCount } } ++vertexCount } if (cell.symbol === 'PWR') { ++ground } } if (vertexCount === 0) { alert('No Component added') ++errorCount return false } else if (PinNC !== 0) { alert('Pins not connected') return false } else if (ground === 0) { alert('Ground not connected') return false } else { if (errorCount === 0) { return true } } } // Function to generate Netlist export function GenerateNetList(graph=graph) { var r = 1 var v = 1 var c = 1 var n = 1 var spiceModels = '' var netlist = { componentlist: [], nodelist: [] } var erc = ErcCheckNets(graph) // Checking for ERC Failures var k = '' if (erc === false) { alert('ERC check failed') } else { var list = annotate(graph) // Fetching all the Cells on the GRID for (var property in list) { if (list[property].Component === true && list[property].symbol !== 'PWR') { var compobj = { name: '', node1: '', node2: '', magnitude: '' } mxCell.prototype.ConnectedNode = null var component = list[property] if (component.symbol === 'R') { k = k + component.symbol + r.toString() component.value = component.symbol + r.toString() component.properties.PREFIX = component.value ++r } else if (component.symbol === 'V') { k = k + component.symbol + v.toString() component.value = component.symbol + v.toString() component.properties.PREFIX = component.value ++v } else { k = k + component.symbol + c.toString() component.value = component.symbol + c.toString() component.properties.PREFIX = component.value ++c } if (component.children !== null) { for (var child in component.children) { var pin = component.children[child] if (pin.vertex === true) { if (pin.edges !== null || pin.edges.length !== 0) { for (var wire in pin.edges) { if (pin.edges[wire].source !== null && pin.edges[wire].target !== null) { // Wire to Pin Connection if (pin.edges[wire].source.edge === true) { pin.edges[wire].node = pin.edges[wire].source.node pin.edges[wire].sourceVertex = pin.edges[wire].source.id pin.edges[wire].targetVertex = pin.edges[wire].target.id // Pin to Wire Connection } else if (pin.edges[wire].target.edge === true) { pin.edges[wire].node = pin.edges[wire].target.node pin.edges[wire].sourceVertex = pin.edges[wire].source.id pin.edges[wire].targetVertex = pin.edges[wire].target.id pin.edges[wire].tarx = pin.edges[wire].geometry.targetPoint.x pin.edges[wire].tary = pin.edges[wire].geometry.targetPoint.y // Souce or Target is Ground } else if (pin.edges[wire].source.ParentComponent.symbol === 'PWR' || pin.edges[wire].target.ParentComponent.symbol === 'PWR') { pin.edges[wire].node = 0 pin.edges[wire].value = 0 pin.edges[wire].sourceVertex = pin.edges[wire].source.id pin.edges[wire].targetVertex = pin.edges[wire].target.id // Pin to Pin Connection, Setting the Source to be the Node Value } else { pin.edges[wire].node = pin.edges[wire].source.ParentComponent.properties.PREFIX + '.' + pin.edges[wire].source.value pin.ConnectedNode = pin.edges[wire].source.ParentComponent.properties.PREFIX + '.' + pin.edges[wire].source.value pin.edges[wire].sourceVertex = pin.edges[wire].source.id pin.edges[wire].targetVertex = pin.edges[wire].target.id pin.edges[wire].value = pin.edges[wire].node } pin.edges[wire].value = pin.edges[wire].node } } k = k + ' ' + pin.edges[0].node } } } compobj.name = component.symbol compobj.node1 = component.children[0].edges[0].node compobj.node2 = component.children[1].edges[0].node compobj.magnitude = 10 netlist.componentlist.push(component.properties.PREFIX) netlist.nodelist.push(compobj.node2, compobj.node1) } console.log('component properties', component.properties) if (component.properties.MODEL.length > 0) { k = k + ' ' + component.properties.MODEL.split(' ')[1] } if (component.properties.PREFIX.charAt(0) === 'V' || component.properties.PREFIX.charAt(0) === 'v' || component.properties.PREFIX.charAt(0) === 'I' || component.properties.PREFIX.charAt(0) === 'i') { const comp = component.properties if (comp.NAME === 'SINE') { k = k + ` SIN(${comp.OFFSET} ${comp.AMPLITUDE} ${comp.FREQUENCY} ${comp.DELAY} ${comp.DAMPING_FACTOR} ${comp.PHASE} )` } else if (comp.NAME === 'EXP') { k = k + ` EXP(${comp.INITIAL_VALUE} ${comp.PULSED_VALUE} ${comp.FREQUENCY} ${comp.RISE_DELAY_TIME} ${comp.RISE_TIME_CONSTANT} ${comp.FALL_DELAY_TIME} ${comp.FALL_TIME_CONSTANT} )` } else if (comp.NAME === 'DC') { if (component.properties.VALUE !== undefined) { k = k + ' DC ' + component.properties.VALUE component.value = component.value + '\n' + component.properties.VALUE } } else if (comp.NAME === 'PULSE') { k = k + ` PULSE(${comp.INITIAL_VALUE} ${comp.PULSED_VALUE} ${comp.DELAY_TIME} ${comp.RISE_TIME} ${comp.FALL_TIME} ${comp.PULSE_WIDTH} ${comp.PERIOD} ${comp.PHASE} )` } else { if (component.properties.VALUE !== undefined) { k = k + ' ' + component.properties.VALUE component.value = component.value + '\n' + component.properties.VALUE } } }else if(component.properties.PREFIX.charAt(0) === 'C' || component.properties.PREFIX.charAt(0) === 'c'){ k = k + ' ' + component.properties.VALUE if(component.properties.IC != 0){ k = k + ' IC=' + component.properties.IC } component.value = component.value + '\n' + component.properties.VALUE }else if(component.properties.PREFIX.charAt(0) === 'L' || component.properties.PREFIX.charAt(0) === 'l'){ k = k + ' ' + component.properties.VALUE if(component.properties.IC != 0){ k = k + ' IC=' + component.properties.IC } if(component.properties.DTEMP != 27){ k = k + ' dtemp=' + component.properties.DTEMP } component.value = component.value + '\n' + component.properties.VALUE }else if(component.properties.PREFIX.charAt(0) === 'M' || component.properties.PREFIX.charAt(0) === 'm'){ // k = k + ' ' + component.properties.VALUE if(component.properties.MULTIPLICITY_PARAMETER != 1){ k = k + ' m=' + component.properties.MULTIPLICITY_PARAMETER } if(component.properties.DTEMP != 27){ k = k + ' dtemp=' + component.properties.DTEMP } // component.value = component.value + '\n' + component.properties.VALUE }else if(component.properties.PREFIX.charAt(0) === 'Q' || component.properties.PREFIX.charAt(0) === 'q'){ // k = k + ' ' + component.properties.VALUE if(component.properties.MULTIPLICITY_PARAMETER != 1){ k = k + ' m=' + component.properties.MULTIPLICITY_PARAMETER } if(component.properties.DTEMP != 27){ k = k + ' dtemp=' + component.properties.DTEMP } // component.value = component.value + '\n' + component.properties.VALUE }else if(component.properties.PREFIX.charAt(0) === 'R' || component.properties.PREFIX.charAt(0) === 'r'){ k = k + ' ' + component.properties.VALUE if(component.properties.SHEET_RESISTANCE != 0){ k = k + ' RSH=' + component.properties.SHEET_RESISTANCE } if(component.properties.FIRST_ORDER_TEMPERATURE_COEFF != 0){ k = k + ' tc1=' + component.properties.FIRST_ORDER_TEMPERATURE_COEFF } if(component.properties.SECOND_ORDER_TEMPERATURE_COEFF != 0){ k = k + ' tc2=' + component.properties.SECOND_ORDER_TEMPERATURE_COEFF } if(component.properties.PARAMETER_MEASUREMENT_TEMPERATURE != 27){ k = k + ' TNOM=' + component.properties.PARAMETER_MEASUREMENT_TEMPERATURE } component.value = component.value + '\n' + component.properties.VALUE }else { if (component.properties.VALUE !== undefined) { k = k + ' ' + component.properties.VALUE component.value = component.value + '\n' + component.properties.VALUE } } if (component.properties.EXTRA_EXPRESSION.length > 0) { k = k + ' ' + component.properties.EXTRA_EXPRESSION component.value = component.value + ' ' + component.properties.EXTRA_EXPRESSION } if (component.properties.MODEL.length > 0) { spiceModels += component.properties.MODEL + '\n' } k = k + ' \n' } } } store.dispatch({ type: actions.SET_MODEL, payload: { model: spiceModels } }) store.dispatch({ type: actions.SET_NETLIST, payload: { netlist: k } }) // Refresh the GRID to view the Node Values graph.getModel().beginUpdate() try { graph.view.refresh() } finally { // Arguments are number of steps, ease and delay var morph = new mxMorphing(graph, 20, 1.2, 20) morph.addListener(mxEvent.DONE, function () { graph.getModel().endUpdate() }) morph.startAnimation() } var a = new Set(netlist.nodelist) var netobj = { models: spiceModels, main: k } return netobj } // Function to Annotate, TODO! It needs some polishing function annotate(graph) { var r = 1 var v = 1 var c = 1 var l = 1 var d = 1 var q = 1 var w = 1 var list = graph.getModel().cells var n = 1 var netlist = { componentlist: [], nodelist: [] } var erc = true var k = '' if (erc === false) { alert('ERC check failed') } else { for (var property in list) { if (list[property].Component === true && list[property].symbol !== 'PWR') { var compobj = { name: '', node1: '', node2: '', magnitude: '' } mxCell.prototype.ConnectedNode = null var component = list[property] if (component.symbol === 'R') { k = k + component.symbol + r.toString() component.value = component.symbol + r.toString() component.properties.PREFIX = component.value ++r } else if (component.symbol === 'V') { k = k + component.symbol + v.toString() component.value = component.symbol + v.toString() component.properties.PREFIX = component.value ++v } else if (component.symbol === 'C') { k = k + component.symbol + v.toString() component.value = component.symbol + v.toString() component.properties.PREFIX = component.value ++c } else if (component.symbol === 'D') { k = k + component.symbol + v.toString() component.value = component.symbol + v.toString() component.properties.PREFIX = component.value ++d } else if (component.symbol === 'Q') { k = k + component.symbol + v.toString() component.value = component.symbol + v.toString() component.properties.PREFIX = component.value ++q } else { k = k + component.symbol + c.toString() component.value = component.symbol + c.toString() component.properties.PREFIX = component.value ++w } if (component.children !== null) { for (var child in component.children) { var pin = component.children[child] if (pin.vertex === true) { if (pin.edges !== null || pin.edges.length !== 0) { for (var wire in pin.edges) { if (pin.edges[wire].source !== null && pin.edges[wire].target !== null) { if (pin.edges[wire].source.edge === true) { // Not Performing any Action for Pin to Wire Connections } else if (pin.edges[wire].target.edge === true) { // Not Performing any Action for Pin to Wire Connections } else if (pin.edges[wire].source.ParentComponent.symbol === 'PWR' || pin.edges[wire].target.ParentComponent.symbol === 'PWR') { pin.edges[wire].node = 0 pin.edges[wire].value = 0 } else { pin.edges[wire].node = pin.edges[wire].source.ParentComponent.properties.PREFIX + '.' + pin.edges[wire].source.value pin.ConnectedNode = pin.edges[wire].source.ParentComponent.properties.PREFIX + '.' + pin.edges[wire].source.value pin.edges[wire].value = pin.edges[wire].node } } } k = k + ' ' + pin.edges[0].node } } } compobj.name = component.symbol compobj.node1 = component.children[0].edges[0].node compobj.node2 = component.children[1].edges[0].node compobj.magnitude = 10 netlist.componentlist.push(component.properties.PREFIX) netlist.nodelist.push(compobj.node2, compobj.node1) } if (component.properties.VALUE !== undefined) { k = k + ' ' + component.properties.VALUE } if (component.properties.EXTRA_EXPRESSION.length > 0) { k = k + ' ' + component.properties.EXTRA_EXPRESSION } if (component.properties.MODEL.length > 0) { k = k + ' ' + component.properties.MODEL.split(' ')[1] } k = k + ' \n' } } } return list } // Returns all the Nodes present in the Schematic, Used for Simulation export function GenerateNodeList(graph=graph) { var list = annotate(graph) var a = [] // Using a Set to avoid duplicate Nodes var netlist = new Set() var k = 'Unitled netlist \n' for (var property in list) { if (list[property].Component === true && list[property].symbol !== 'PWR') { var compobj = { name: '', node1: '', node2: '', magnitude: '' } // Fetching all the nodes var component = list[property] if (component.children !== null) { compobj.name = component.symbol compobj.node1 = component.children[0].edges[0].node compobj.node2 = component.children[1].edges[0].node netlist.add(compobj.node1, compobj.node2) } } } return netlist } // Sends a list of components present in the netlist export function GenerateCompList(graph=graph) { var list = annotate(graph) var a = [] var netlist = [] // This will contain the list of Component Prefix var k = 'Unitled netlist \n' for (var property in list) { if (list[property].Component === true && list[property].symbol !== 'PWR') { var compobj = { name: '', node1: '', node2: '', magnitude: '' } var component = list[property] compobj.name = component.symbol compobj.node1 = component.children[0].edges[0].node compobj.node2 = component.children[1].edges[0].node netlist.push(component.properties.PREFIX) } } return netlist } // Function to Render Circuit XML export function renderXML() { graph.view.refresh() var xml = 'null' var xmlDoc = mxUtils.parseXml(xml) parseXmlToGraph(xmlDoc, graph) } // Function to Parse XML and Redraw on Grid export function parseXmlToGraph(xmlDoc, graph) { const cells = xmlDoc.documentElement.children[0].children const parent = graph.getDefaultParent() var v1 var yPos var xPos var props var style = graph.getStylesheet().getDefaultVertexStyle() style[mxConstants.STYLE_SHAPE] = 'label' style[mxConstants.STYLE_VERTICAL_ALIGN] = 'bottom' style[mxConstants.STYLE_IMAGE_VERTICAL_ALIGN] = 'bottom' // indicator v-alignment style[mxConstants.STYLE_IMAGE_ALIGN] = 'bottom' style[mxConstants.STYLE_INDICATOR_COLOR] = 'green' style[mxConstants.STYLE_FONTCOLOR] = 'red' style[mxConstants.STYLE_FONTSIZE] = '10' delete style[mxConstants.STYLE_STROKECOLOR] // transparent for (let i = 0; i < cells.length; i++) { const cellAttrs = cells[i].attributes if (cellAttrs.Component.value === '1') { // is component const vertexName = cellAttrs.value.value const style = cellAttrs.style.value const vertexId = Number(cellAttrs.id.value) const geom = cells[i].children[0].attributes const xPos = Number(geom.x.value) if (geom.y === undefined) { yPos = 0 } else { yPos = Number(geom.y.value) } const height = Number(geom.height.value) const width = Number(geom.width.value) v1 = graph.insertVertex(parent, vertexId, vertexName, xPos, yPos, width, height, style) v1.symbol = cellAttrs.symbol.value if (v1.symbol === 'V') { try { props = Object.assign({}, ComponentParameters[v1.symbol][cells[i].children[2].attributes.NAME.value]) } catch (e) { props = Object.assign({}, ComponentParameters[v1.symbol][cells[i].children[1].attributes.NAME.value]) } } else { props = Object.assign({}, ComponentParameters[v1.symbol]) } try { props.NAME = cells[i].children[2].attributes.NAME.value } catch (e) { props.NAME = cells[i].children[1].attributes.NAME.value } v1.properties = props v1.Component = true v1.CellType = 'Component' if (v1.properties.name === 'VSOURCE') { } for (var check in props) { try { v1.properties[check] = cells[i].children[2].attributes[check].value } catch (e) { try { v1.properties[check] = cells[i].children[1].attributes[check].value } catch (e) { } } } } else if (cellAttrs.Pin.value === '1') { const vertexName = cellAttrs.value.value const style = cellAttrs.style.value const vertexId = Number(cellAttrs.id.value) const geom = cells[i].children[0].attributes try { xPos = Number(geom.x.value) } catch (e) { xPos = 0 } if (geom.y === undefined) { yPos = 0 } else { yPos = Number(geom.y.value) } const height = Number(geom.height.value) const width = Number(geom.width.value) var vp = graph.insertVertex(v1, vertexId, vertexName, xPos, yPos, 0.5, 0.5, style) vp.ParentComponent = v1 vp.Pin = 1 } else if (cellAttrs.edge) { // is edge const edgeId = Number(cellAttrs.id.value) const source = Number(cellAttrs.sourceVertex.value) const target = Number(cellAttrs.targetVertex.value) var plist = cells[i].children[1].children try { var e = graph.insertEdge(parent, edgeId, null, graph.getModel().getCell(source), graph.getModel().getCell(target) ) e.geometry.points = [] for (var a in cells[i].children[1].children) { try { e.geometry.points.push(new mxPoint(Number(plist[a].attributes.x.value), Number(plist[a].attributes.y.value))) } catch (e) { } graph.getModel().beginUpdate() try { graph.view.refresh() } finally { var morph = new mxMorphing(graph, 20, 1.2, 20) morph.addListener(mxEvent.DONE, function () { graph.getModel().endUpdate() }) morph.startAnimation() } } if (graph.getModel().getCell(target).edge === true) { e.geometry.setTerminalPoint(new mxPoint(Number(cellAttrs.tarx.value), Number(cellAttrs.tary.value)), false) graph.getModel().beginUpdate() try { graph.view.refresh() } finally { // Arguments are number of steps, ease and delay morph = new mxMorphing(graph, 20, 1.2, 20) morph.addListener(mxEvent.DONE, function () { graph.getModel().endUpdate() }) morph.startAnimation() } } } catch (e) { } } } } ================================================ FILE: eda-frontend/src/components/LTI/LTI.css ================================================ .lti-url:focus { outline: none; } ================================================ FILE: eda-frontend/src/components/LTI/LTI.js ================================================ import React, { useEffect } from 'react' import { Button, Typography, TextField, MenuItem, Select, FormControl, FormControlLabel, InputLabel, CardMedia, CardContent, CardActionArea, Card, Checkbox, Snackbar, IconButton, Chip, Input } from '@material-ui/core' import { makeStyles } from '@material-ui/core/styles' import ArrowBackIcon from '@material-ui/icons/ArrowBack' import DeleteIcon from '@material-ui/icons/Delete' import queryString from 'query-string' import CloseIcon from '@material-ui/icons/Close' import TextareaAutosize from '@material-ui/core/TextareaAutosize' import api from '../../utils/Api' import './LTI.css' const useStyles = makeStyles((theme) => ({ root: { minHeight: 300, minWidth: 500 }, media: { height: 0, paddingTop: '56.25%' // 16:9 }, title: { fontSize: 14, color: '#80ff80' }, paper: { position: 'absolute', width: 400, backgroundColor: theme.palette.background.paper, border: '2px solid #000', boxShadow: theme.shadows[5], padding: theme.spacing(2, 4, 3) }, delete: { backgroundColor: 'red', color: 'white' } })) export default function LTIConfig () { const classes = useStyles() const [ltiDetails, setLTIDetails] = React.useState({ secretKey: '', consumerKey: '', configURL: '', configExists: false, consumerError: '', score: '', initialSchematic: '', modelSchematic: '', testCase: null, scored: true, id: '' }) const { secretKey, consumerKey, configURL, configExists, score, modelSchematic } = ltiDetails const [schematic, setSchematic] = React.useState('') const [history, setHistory] = React.useState([]) const [historyId, setHistoryId] = React.useState('') const [schematics, setSchematics] = React.useState([]) const [update, setUpdate] = React.useState(false) const [submitMessage, setSubmitMessage] = React.useState('') const [activeSim, setActiveSim] = React.useState(null) const [simParam, setSimParam] = React.useState([]) const [graphSimParams, setGraphSimParams] = React.useState([]) useEffect(() => { if (activeSim) { var arr = [] if (activeSim.result.graph === 'true') { // eslint-disable-next-line activeSim.result.data.map((i) => { // eslint-disable-next-line i.labels.map((params) => { if (!arr.includes(params)) { arr.push(params) } }) }) } setGraphSimParams(arr) } }, [activeSim]) useEffect(() => { var url = queryString.parse(window.location.href.split('lti?')[1]) const token = localStorage.getItem('esim_token') const config = { headers: { 'Content-Type': 'application/json' } } if (token) { config.headers.Authorization = `Token ${token}` } api.get(`save/versions/${url.id}`, config).then(res => { res.data.map(ele => { ele.save_time = new Date(ele.save_time) return 0 }) setSchematics(res.data) }).catch(err => { console.log(err) }) // eslint-disable-next-line }, []) useEffect(() => { if (historyId !== 'None' && history !== []) { var temp = history.find(ele => ele.id === historyId) console.log('CHANGING ACTIVE SIM') setActiveSim(temp) } // eslint-disable-next-line }, [history, historyId]) useEffect(() => { var url = queryString.parse(window.location.href.split('lti?')[1]) const token = localStorage.getItem('esim_token') const config = { headers: { 'Content-Type': 'application/json' } } if (token) { config.headers.Authorization = `Token ${token}` } api.get(`lti/exist/${url.id}`, config).then(res => { setLTIDetails( { modelSchematic: res.data.model_schematic, secretKey: res.data.secret_key, consumerKey: res.data.consumer_key, configURL: res.data.config_url, score: res.data.score, configExists: true, initialSchematic: res.data.model_schematic, testCase: res.data.test_case, scored: res.data.scored, id: res.data.id }) setSchematic(`${res.data.model_schematic.version}-${res.data.model_schematic.branch}`) setSimParam(res.data.sim_params) if (res.data.test_case === null) { setHistoryId('None') } else { setHistoryId(res.data.test_case) } }).catch(err => { console.log(err) api.get(`save/${url.id}/${url.version}/${url.branch}`, config).then(res => { setLTIDetails( { modelSchematic: res.data, scored: true }) setSchematic(`${res.data.version}-${res.data.branch}`) }) }) }, []) // to get test cases for LTI useEffect(() => { var url = queryString.parse(window.location.href.split('lti?')[1]) const token = localStorage.getItem('esim_token') const config = { headers: { 'Content-Type': 'application/json' } } if (token) { config.headers.Authorization = `Token ${token}` } api.get(`simulation/history/lti/${url.id}/${schematic.split('-')[0]}/${schematic.split('-')[1]}/${null}`, config).then(res => { res.data.map(ele => { ele.simulation_time = new Date(ele.simulation_time) return 0 }) console.log(res.data) console.log('yes') setHistory(res.data) }).catch(err => { console.log(err) }) }, [schematic]) // eslint-disable-next-line const handleLTIGenerate = () => { var score = '' if (!ltiDetails.scored) { score = null } else { score = ltiDetails.score } const body = { consumer_key: ltiDetails.consumerKey, secret_key: ltiDetails.secretKey, model_schematic: ltiDetails.modelSchematic.id, score: score, initial_schematic: ltiDetails.modelSchematic.id, test_case: ltiDetails.testCase, scored: ltiDetails.scored, sim_params: simParam } console.log(body) api.post('lti/build/', body) .then(res => { setLTIDetails({ ...ltiDetails, configURL: res.data.config_url, configExists: true, consumerError: '', score: res.data.score, id: res.data.id }) return res.data }) .catch((err) => { console.log(err.data) setLTIDetails({ ...ltiDetails, consumerError: 'An error was encountered while setting the details!' }) }) } const handleUpdateClose = () => { setUpdate(false) } const handleDeleteLTIApp = () => { api.delete(`lti/delete/${ltiDetails.modelSchematic.id}`) .then(res => { setLTIDetails({ secretKey: '', consumerKey: '', configURL: '', configExists: false, consumerError: '', score: '', initialSchematic: '', modelSchematic: modelSchematic, testCase: null, id: '' }) setHistoryId('') setSimParam([]) }) .catch(error => console.log(error)) } const handleConsumerKey = (e) => { setLTIDetails({ ...ltiDetails, consumerKey: e.target.value }) } const handleSecretKey = (e) => { setLTIDetails({ ...ltiDetails, secretKey: e.target.value }) } const handleScore = (e) => { if (e.target.value > 1 || e.target.value < 0) { // To-DO: Show error message } else { setLTIDetails({ ...ltiDetails, score: e.target.value }) } } const handleCheckChange = (e) => { setLTIDetails({ ...ltiDetails, scored: e.target.checked }) } const handleChange = (e) => { var schematic = null schematics.forEach(element => { if (element.version === e.target.value.split('-')[0] && element.branch === e.target.value.split('-')[1]) { schematic = element } }) setSchematic(e.target.value) setLTIDetails({ ...ltiDetails, modelSchematic: schematic }) } const handleChangeSim = (e) => { setLTIDetails({ ...ltiDetails, testCase: e.target.value }) setHistoryId(e.target.value) setSimParam([]) } const handleSimParamChange = (event) => { setSimParam(event.target.value) } const handleOnClick = () => { var score = '' if (!ltiDetails.scored) { score = null } else { score = ltiDetails.score } const body = { consumer_key: ltiDetails.consumerKey, secret_key: ltiDetails.secretKey, model_schematic: ltiDetails.modelSchematic.id, score: score, initial_schematic: ltiDetails.modelSchematic.id, test_case: ltiDetails.testCase, scored: ltiDetails.scored, id: ltiDetails.id, sim_params: simParam } console.log(body) api.post('lti/update/', body) .then(res => { setLTIDetails({ ...ltiDetails, configURL: res.data.config_url, configExists: true, consumerError: '', score: res.data.score }) setUpdate(true) setSubmitMessage('Updated Successfully') return res.data }) .catch((err) => { console.log(err.data) setSubmitMessage('An error was encountered!') }) } const handleUrlCopy = () => { var copyText = document.querySelector('.lti-url') console.log(copyText) copyText.select() copyText.setSelectionRange(0, 99999) document.execCommand('copy') } console.log(history) return ( <> {ltiDetails && <>
Schematic {/* {ltiDetails.initialSchematic && Initial Schematic } */}
{ltiDetails.consumerError &&

{ltiDetails.consumerError}

} Schematic Test Case {history && }
{activeSim && Comparison Parameter {history && } } } label="Scored?" />
{configExists && } {configExists && } {configExists && } {configURL &&

URL for LTI Access:

}
} /> } ) } ================================================ FILE: eda-frontend/src/components/LTI/SubmissionTable.js ================================================ import React, { useEffect } from 'react' import { Button, Typography, IconButton, Input, Table, TableBody, TableCell, TableHead, TableRow, TableContainer } from '@material-ui/core' import { makeStyles } from '@material-ui/core/styles' import ArrowUpwardIcon from '@material-ui/icons/ArrowUpward' import ArrowDownwardIcon from '@material-ui/icons/ArrowDownward' import ArrowBackIcon from '@material-ui/icons/ArrowBack' import FilterListIcon from '@material-ui/icons/FilterList' import queryString from 'query-string' import api from '../../utils/Api' import Dialog from '@material-ui/core/Dialog' import DialogContent from '@material-ui/core/DialogContent' import DialogActions from '@material-ui/core/DialogActions' import DialogTitle from '@material-ui/core/DialogTitle' import CompareGraph from './CompareGraph' const useStyles = makeStyles({ table: { minWidth: 650 }, title: { fontSize: 14, color: '#80ff80' } }) const sortOrder = { Unsorted: 0, Ascending: 1, Descending: 2 } export default function SubmissionTable () { const classes = useStyles() const [responseData, setResponseData] = React.useState([]) const [sortData, setSortData] = React.useState([]) const [sortOrderUser, setSortOrderUser] = React.useState(sortOrder.Unsorted) const [sortOrderTime, setSortOrderTime] = React.useState(sortOrder.Unsorted) const [anchorEl, setAnchorEl] = React.useState(null) const [open, setOpen] = React.useState(false) const [simResult, setSimResult] = React.useState(null) useEffect(() => { setSortData(responseData) console.log(responseData) }, [responseData]) useEffect(() => { console.log(simResult) }, [simResult]) useEffect(() => { var url = queryString.parse(window.location.href.split('submission')[1]) const token = localStorage.getItem('esim_token') const config = { headers: { 'Content-Type': 'application/json' } } if (token) { config.headers.Authorization = `Token ${token}` } api.get(`/lti/submissions/${url.id}/${url.version}/${url.branch}`, config) .then( (res) => { for (var i = 0; i < res.data.length; i++) { res.data[i].schematic.save_time = new Date(res.data[i].schematic.save_time) if (!res.data[i].student) { res.data[i].student = {} res.data[i].student.username = 'Anonymous User' } } setResponseData(res.data) } ) .catch((err) => { console.error(err) }) }, []) const handleUserSort = () => { setSortOrderTime(0) var temp = responseData.slice() if (sortOrderUser === 0) { temp.sort((a, b) => { if (a.student.username > b.student.username) return -1 else if (a.student.username < b.student.username) return 1 return 0 }) setSortData(temp) setSortOrderUser(1) } else if (sortOrderUser === 1) { temp.sort((a, b) => { if (a.student.username < b.student.username) return -1 else if (a.student.username > b.student.username) return 1 return 0 }) setSortData(temp) setSortOrderUser(2) } else { setSortData(responseData) setSortOrderUser(0) } } const handleTimeSort = () => { setSortOrderUser(0) var temp = responseData.slice() if (sortOrderTime === 0) { temp.sort((a, b) => { if (a.schematic.save_time < b.schematic.save_time) return -1 else if (a.schematic.save_time > b.schematic.save_time) return 1 return 0 }) setSortData(temp) setSortOrderTime(1) } else if (sortOrderTime === 1) { temp.sort((a, b) => { if (a.schematic.save_time > b.schematic.save_time) return -1 else if (a.schematic.save_time < b.schematic.save_time) return 1 return 0 }) setSortData(temp) setSortOrderTime(2) } else { setSortData(responseData) setSortOrderTime(0) } } const onSearch = (e) => { setSortData(responseData.filter((o) => // eslint-disable-next-line Object.keys(o).some((k) => { if ((k === 'student') && String(o[k].username).toLowerCase().includes(e.target.value.toLowerCase())) { return String(o[k].username).toLowerCase().includes(e.target.value.toLowerCase()) } } ) )) } const handleFilterOpen = (e) => { if (anchorEl) { setAnchorEl(null) } else { setAnchorEl(e.currentTarget) } } const handleButtonClick = () => { var url = queryString.parse(window.location.href.split('submission')[1]) window.location.href = `/eda/#/lti?id=${url.id}&version=${url.version}&branch=${url.branch}` } const handleSimOpen = (studentSim) => { setSimResult(studentSim) setOpen(true) } const handleClose = () => { setOpen(false) } return ( <> onSearch(e)} placeholder='Search' /> {sortData.length !== 0 ? <> User {sortOrderUser === 1 ? : sortOrderUser === 2 ? : } User ID in LMS Submitted at {sortOrderTime === 1 ? : sortOrderTime === 2 ? : } Submitted From Score Submission Circuit Submission Simulation Teacher Simulation {sortData.map((student) => { return {student.student.username} {student.ltisession.user_id} {student.schematic.save_time.toLocaleString()} {student.ltisession.lis_outcome_service_url ? student.ltisession.lis_outcome_service_url.split('/')[2] :

None

}
{student.score}
} )}
Student Simulation {simResult && simResult.result.graph === 'false' && simResult.result.data.map((ele, index) => ( // eslint-disable-next-line {index + 1}. {ele[0]} : {ele[2]} ))} {simResult && simResult.result.graph === 'true' && //

Simulation is graphical and cannot be displayed here

}
:

No submissions for this assignment

}
) } ================================================ FILE: eda-frontend/src/components/LTI/SubmitResults.js ================================================ import React from 'react' import { Paper, Dialog, Typography, Grid, Slide, AppBar, Toolbar, IconButton, Tooltip } from '@material-ui/core' import { makeStyles } from '@material-ui/core/styles' import PropTypes from 'prop-types' import CancelIcon from '@material-ui/icons/Cancel' import CheckCircleIcon from '@material-ui/icons/CheckCircle' import CloseIcon from '@material-ui/icons/Close' import AdjustIcon from '@material-ui/icons/Adjust' import CompareGraph from './CompareGraph' const useStyles = makeStyles((theme) => ({ appBar: { position: 'relative' }, paper: { padding: theme.spacing(2), textAlign: 'left', backgroundColor: '#404040', color: '#fff' } })) const Transition = React.forwardRef(function Transition (props, ref) { return }) function SubmitResults ({ show, setResults, results }) { console.log(results) const classes = useStyles() const showIcons = (item) => { if (results.sim_params.includes(item)) { if ( results.comparison_result === 'Same Values' || results.comparison_result.same.includes(item) ) { return } else { return } } else { return } } return ( setResults(false)} TransitionComponent={Transition} fullScreen > setResults(false)} aria-label="close" >

Your Score: {results.score} /1

{/*

Teacher Values

*/}
{results.expected && results.given.graph !== 'true' && ( <> {// eslint-disable-next-line

Teacher's values:

} {results.expected.data.map((ele, index) => ( {index + 1}. {ele[0]} : {ele[2]} ))}
)} {results.given && results.given.graph !== 'true' ? ( <>

Your Submission Values:

{results.given.data.map((ele, index) => ( {showIcons(ele[0])}

{index + 1}. {ele[0]} : {ele[2]}

))} ) : ( )}
) } export default SubmitResults SubmitResults.propTypes = { show: PropTypes.bool, setResults: PropTypes.func, results: PropTypes.object } ================================================ FILE: eda-frontend/src/components/Project/ChangeStatus.js ================================================ /* eslint-disable camelcase */ import { Button, Paper, InputLabel, Select, MenuItem, TextField } from '@material-ui/core' import React, { useEffect } from 'react' import { useDispatch } from 'react-redux' import { getStatus, changeStatus } from '../../redux/actions' import PropTypes from 'prop-types' function ChangeStatus ({ project, changedStatus }) { const dispatch = useDispatch() const [status, setStatus] = React.useState(null) const [note, setNote] = React.useState('') const handleSelectChange = (event) => { setStatus(event.target.value) } const clickChangeStatus = () => { dispatch(changeStatus(project.details.project_id, status, note)) changedStatus() } const onChangeNote = (e) => { setNote(e.target.value) } useEffect(() => { dispatch(getStatus(project.details?.project_id)) }, [dispatch, project.details]) return ( {project.states &&

Review the project and change it's state

Current State : {project.details?.status_name}

Select and Change the status of this project
}
) } ChangeStatus.propTypes = { project: PropTypes.object, changedStatus: PropTypes.func } export default ChangeStatus ================================================ FILE: eda-frontend/src/components/Project/CreateProject.js ================================================ /* eslint-disable camelcase */ import React, { useState, useEffect } from 'react' import { Button, Toolbar, IconButton, Typography, Slide, AppBar, Container, Grid, Paper, TextField, Tooltip, Select, MenuItem, InputLabel, List, ListItem, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle } from '@material-ui/core' import CloseIcon from '@material-ui/icons/Close' import PostAddIcon from '@material-ui/icons/PostAdd' import KeyboardArrowUpIcon from '@material-ui/icons/KeyboardArrowUp' import KeyboardArrowDownIcon from '@material-ui/icons/KeyboardArrowDown' import { makeStyles } from '@material-ui/core/styles' import FormControl from '@material-ui/core/FormControl' import { useDispatch, useSelector } from 'react-redux' import { changeStatus, createProject, deleteProject, getStatus } from '../../redux/actions' import api from '../../utils/Api' import ProjectTimeline from './ProjectTimeline' import ProjectSimulationParameters from './ProjectSimulationParameters' const useStyles = makeStyles((theme) => ({ appBar: { position: 'relative' }, title: { marginLeft: theme.spacing(2), flex: 1 }, header: { padding: theme.spacing(5, 0, 6), color: '#fff' }, paper: { padding: theme.spacing(2), textAlign: 'left', color: '#fff' }, formControl: { margin: theme.spacing(1), minWidth: 120, textAlign: 'left' }, selectEmpty: { marginTop: theme.spacing(2) } })) const Transition = React.forwardRef(function Transition (props, ref) { return }) function CreateProject () { const [open, setOpen] = useState(false) const classes = useStyles() const dispatch = useDispatch() const project = useSelector(state => state.projectReducer) const auth = useSelector(state => state.authReducer) const save_id = useSelector(state => state.saveSchematicReducer.details.save_id) const owner = useSelector(state => state.saveSchematicReducer.details.owner) const [status, setStatus] = React.useState(null) const [versions, setVersions] = React.useState(null) const [activeVersion, setActiveVersion] = React.useState('') const [activeName, setActiveName] = React.useState(null) const [activeSaveTime, setActiveSaveTime] = React.useState(null) const [activeSaveDate, setActiveSaveDate] = React.useState(null) const [details, setDetails] = useState( { title: '', description: '', active_branch: '', active_version: '' }) const [fields, setFields] = useState([{ name: 'Procedure', text: '' }, { name: 'Observation', text: '' }, { name: 'Conclusion', text: '' }]) const [changed, setChanged] = useState(0) const [deleteDialogue, setDeleteDialogue] = useState(false) const [dcSweepcontrolLine, setDcSweepControlLine] = useState({ parameter: '', sweepType: 'Linear', start: '', stop: '', step: '', parameter2: '', start2: '', stop2: '', step2: '' }) const [transientAnalysisControlLine, setTransientAnalysisControlLine] = useState({ start: '', stop: '', step: '', skipInitial: false }) const [acAnalysisControlLine, setAcAnalysisControlLine] = useState({ input: 'dec', start: '', stop: '', pointsBydecade: '' }) const [tfAnalysisControlLine, setTfAnalysisControlLine] = useState({ outputNodes: false, outputVoltageSource: '', inputVoltageSource: '' }) const [selectedSimulation, setSelectedSimulation] = useState('') useEffect(() => { if (open && project.details?.project_id) { dispatch(getStatus(project.details?.project_id)) setStatus(project.details?.status_name) } if (project.details) { console.log(project.details) setDetails({ title: project.details.title, description: project.details.description, active_version: project.details.active_version, active_branch: project.details.active_branch }) setFields(project.details.fields) if (project.details.dc_sweep) { setDcSweepControlLine(project.details.dc_sweep) } if (project.details.transient_analysis) { setTransientAnalysisControlLine(project.details.transient_analysis) } if (project.details.tf_analysis) { setTfAnalysisControlLine(project.details.tf_analysis) } if (project.details.ac_analysis) { setAcAnalysisControlLine(project.details.ac_analysis) } } if (!project.details) { setDetails({ title: '', description: '', active_branch: '', active_version: '' }) setActiveVersion('') setFields([{ name: 'Procedure', text: '' }, { name: 'Observation', text: '' }, { name: 'Conclusion', text: '' }]) } }, [open, dispatch, project.details]) useEffect(() => { const config = { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } } const token = localStorage.getItem('esim_token') // If token available add to headers if (token) { config.headers.Authorization = `Token ${token}` } if (window.location.href.split('?id=')[1]) { api .get( 'save/versions/' + window.location.href.split('?id=')[1].substring(0, 36), config ) .then((resp) => { for (var i = 0; i < resp.data.length; i++) { var d = new Date(resp.data[i].save_time) resp.data[i].date = d.getDate() + '/' + parseInt(d.getMonth() + 1) + '/' + d.getFullYear() resp.data[i].time = d.getHours() + ':' + d.getMinutes() if (d.getMinutes() < 10) { resp.data[i].time = d.getHours() + ':0' + d.getMinutes() } } var versionsAccordingFreq = {} resp.data.forEach((value) => { value.full_time = new Date(value.save_time) versionsAccordingFreq[value.branch] ? versionsAccordingFreq[value.branch].push(value) : versionsAccordingFreq[value.branch] = [value] }) var versionsArray = Object.entries(versionsAccordingFreq) for (var k = 0; k < versionsArray.length; k++) { versionsArray[k][1].sort((a, b) => { return b.full_time - a.full_time }) } versionsArray.sort((a, b) => { return b[1][b[1].length - 1].full_time - a[1][a[1].length - 1].full_time }) var versionsTemp = [] for (var j = 0; j < versionsArray.length; j++) { versionsTemp = versionsTemp.concat(versionsArray[j][1]) } setVersions(versionsTemp) }) .catch((err) => { console.log(err) }) } }, [open]) useEffect(() => { if (versions && project.details) { for (var i = 0; i < versions.length; i++) { if (versions[i].version === project.details.active_version && versions[i].branch === project.details.active_branch) { setActiveVersion(`${versions[i].version}-${versions[i].branch}`) setActiveName(versions[i].name) setActiveSaveTime(versions[i].time) setActiveSaveDate(versions[i].date) break } } } }, [project.details, versions]) const handleActiveVersion = (e) => { if (changed === 0) { setChanged(1) } else if (changed === 2) { setChanged(3) } setActiveVersion(e.target.value) setDetails({ ...details, active_branch: e.target.value.split('-')[1], active_version: e.target.value.split('-')[0] }) } const handleSelectChange = (event) => { if (event.target.value !== project.details.status_name) { if (changed === 0) { setChanged(2) } else if (changed === 1) { setChanged(3) } } else { if (changed === 2) { setChanged(0) } else if (changed === 3) { setChanged(1) } } setStatus(event.target.value) } const changeFieldText = (e) => { if (changed === 0) { setChanged(1) } else if (changed === 2) { setChanged(3) } var temp = [...fields] if (e.target.name === 'name') { temp[e.target.id].name = e.target.value setFields(temp) } else if (e.target.name === 'text') { temp[e.target.id].text = e.target.value setFields(temp) } else { setDetails({ ...details, [e.target.name]: e.target.value }) } } const handleClick = () => { setOpen(!open) } const createPub = () => { if (details.title !== '' && details.description !== '' && activeVersion !== '') { dispatch(createProject(save_id, [details, fields, '', dcSweepcontrolLine, transientAnalysisControlLine, acAnalysisControlLine, tfAnalysisControlLine])) } } const clickChange = () => { if (details.title !== '' && details.description !== '' && activeVersion !== '') { if (changed === 1) { dispatch(createProject(save_id, [details, fields, '', dcSweepcontrolLine, transientAnalysisControlLine, acAnalysisControlLine, tfAnalysisControlLine])) } else if (changed === 2) { if (status !== project.details.status_name) { dispatch(changeStatus(project.details.project_id, status, '')) } } else if (changed === 3) { if (status !== project.details.status_name) { dispatch(createProject(save_id, [details, fields, status, dcSweepcontrolLine, transientAnalysisControlLine, acAnalysisControlLine, tfAnalysisControlLine])) } else { dispatch(createProject(save_id, [details, fields, '', dcSweepcontrolLine, transientAnalysisControlLine, acAnalysisControlLine, tfAnalysisControlLine])) } } setChanged(0) } } const clickPreview = () => { const win = window.open() win.location.href = '/eda/#/project?save_id=' + project.details.save_id + '&version=' + project.details.active_version + '&branch=' + project.details.active_branch + '&project_id=' + project.details.project_id win.focus() } const addField = () => { setFields([...fields, { name: '', text: '' }]) if (changed === 0) { setChanged(1) } else if (changed === 2) { setChanged(3) } } const onClickShift = (type, index) => { if (type === 'above') { const temporary = [...fields] const current = temporary[index] temporary[index] = temporary[index - 1] temporary[index - 1] = current setFields(temporary) } else { const temporary = [...fields] const current = temporary[index] temporary[index] = temporary[index + 1] temporary[index + 1] = current setFields(temporary) } } const onRemove = (e) => { var list = [...fields] console.log(e) list.splice(e, 1) setFields(list) if (changed === 0) { setChanged(1) } else if (changed === 2) { setChanged(3) } } const handleDeleteDialogue = () => { setDeleteDialogue(!deleteDialogue) } const deleteProjectFunction = (id) => { console.log(id) dispatch(deleteProject(id)) setDeleteDialogue(!deleteDialogue) setOpen(false) } return (
{(window.location.href.split('?id=')[1] && auth.user?.username === owner) && } Project Details {!project.details && } {project.details && } {project.details && changed !== 0 && } {project.details &&

Status of the project: {project.details.status_name}

Active Version: {activeName} of variation {project.details.active_branch} saved on {activeSaveDate} at {activeSaveTime} hours

{project.details.history && project.details.history.slice(0).reverse()[0]?.reviewer_notes &&

Reviewer Notes: {project.details.history.slice(0).reverse()[0]?.reviewer_notes}

}
}

Project Details

{versions != null && ((project.details && project.details.can_edit) || !project.details) && Select the version you want to use for your project. } {fields && fields.map((item, index) => ( <>
{((project.details && project.details.can_edit) || !project.details) && <> onRemove(index)}> {index !== fields.length - 1 && onClickShift('below', index)}> } {index !== 0 && onClickShift('above', index)}> } } ))}
{((project.states && project.details) || !project.details) && }

Simulation Parameters

Select simulation mode parameters to enter:
{project.details && <>{ project.states &&

Change Status
}}
{project.details && <>

List of Approved Reports

{project.reports?.approved[0] ? <> {project.reports.approved.map((item, index) => ( {index + 1}. {item.description} ))} :

No approved reports.

}

List of Reports yet to be evaluated by a Reviewer.

{project.reports?.open[0] ? <> {project.reports.open.map((item, index) => ( {index + 1}. {item.description} ))} :

No Unapproved reports.

}

History of this Project

{(project.details?.history && project.details?.history[0]) ? <> :

No history of this project.

}
}
{!project.details && } {project.details && project.details.can_delete && } {'Are you sure you want to delete the project?'} You cannot revert this.
) } export default CreateProject ================================================ FILE: eda-frontend/src/components/Project/ProjectSimulationParameters.js ================================================ import React, { useState, useEffect } from 'react' import PropTypes from 'prop-types' import { Box, Typography, TextField, List, ListItem, Divider, Checkbox } from '@material-ui/core' import { GenerateCompList } from '../SchematicEditor/Helper/ToolbarTools' function TabPanel (props) { const { children, value, index, ...other } = props return ( ) } TabPanel.propTypes = { children: PropTypes.node, index: PropTypes.any.isRequired, value: PropTypes.any.isRequired } function ProjectSimulationParameters (props) { const [componentsList, setComponentsList] = useState([]) const [disabled, setDisabled] = React.useState(false) const handleDcSweepControlLine = (evt) => { const value = evt.target.value props.setDcSweepControlLine({ ...props.dcSweepcontrolLine, [evt.target.id]: value }) if (props.changed === 0) { props.setChanged(1) } else if (props.changed === 2) { props.setChanged(3) } } const handleTransientAnalysisControlLineUIC = (evt) => { const value = evt.target.checked props.setTransientAnalysisControlLine({ ...props.transientAnalysisControlLine, [evt.target.id]: value }) if (props.changed === 0) { props.setChanged(1) } else if (props.changed === 2) { props.setChanged(3) } } const handleTransientAnalysisControlLine = (evt) => { const value = evt.target.value props.setTransientAnalysisControlLine({ ...props.transientAnalysisControlLine, [evt.target.id]: value }) if (props.changed === 0) { props.setChanged(1) } else if (props.changed === 2) { props.setChanged(3) } } const handleAcAnalysisControlLine = (evt) => { const value = evt.target.value props.setAcAnalysisControlLine({ ...props.acAnalysisControlLine, [evt.target.id]: value }) if (props.changed === 0) { props.setChanged(1) } else if (props.changed === 2) { props.setChanged(3) } } const handleTfAnalysisControlLine = (evt) => { const value = evt.target.value props.setTfAnalysisControlLine({ ...props.tfAnalysisControlLine, [evt.target.id]: value }) if (props.changed === 0) { props.setChanged(1) } else if (props.changed === 2) { props.setChanged(3) } } const handleTfAnalysisControlLineNodes = (evt) => { const value = evt.target.checked props.setTfAnalysisControlLine({ ...props.tfAnalysisControlLine, [evt.target.id]: value }) if (props.changed === 0) { props.setChanged(1) } else if (props.changed === 2) { props.setChanged(3) } setDisabled(props.tfAnalysisControlLine.outputNodes) } useEffect(() => { if (props.selectedSimulation !== '') { try { setComponentsList(['', ...GenerateCompList()]) } catch (err) { setComponentsList([]) alert('Circuit not complete. Please Check Connectons.') } } }, [props.selectedSimulation]) return ( <>

DC Sweep

{ componentsList.map((value, i) => { if (value.charAt(0) === 'V' || value.charAt(0) === 'v' || value.charAt(0) === 'I' || value.charAt(0) === 'i' || value === '') { return () } else { return null } }) } V V V {/* SECONDARY PARAMETER FOR SWEEP */}

Secondary Parameters

{ componentsList.map((value, i) => { return }) }

Transient Analysis

S S S Use Initial Conditions

Transfer Function Analysis

Output By Nodes { componentsList.map((value, i) => { if (value.charAt(0) === 'V' || value.charAt(0) === 'v' || value.charAt(0) === 'I' || value.charAt(0) === 'i' || value === '') { return () } else { return null } }) } { componentsList.map((value, i) => { if (value.charAt(0) === 'V' || value.charAt(0) === 'v' || value.charAt(0) === 'I' || value.charAt(0) === 'i' || value === '') { return () } else { return null } }) }

AC Analysis

Hz Hz
) } ProjectSimulationParameters.propTypes = { dcSweepcontrolLine: PropTypes.object, transientAnalysisControlLine: PropTypes.object, acAnalysisControlLine: PropTypes.object, tfAnalysisControlLine: PropTypes.object, setDcSweepControlLine: PropTypes.func, setTransientAnalysisControlLine: PropTypes.func, setAcAnalysisControlLine: PropTypes.func, setTfAnalysisControlLine: PropTypes.func, setChanged: PropTypes.func, selectedSimulation: PropTypes.string, changed: PropTypes.bool } export default ProjectSimulationParameters ================================================ FILE: eda-frontend/src/components/Project/ProjectTimeline.js ================================================ /* eslint-disable camelcase */ import React, { useEffect, useState } from 'react' import Timeline from '@material-ui/lab/Timeline' import TimelineItem from '@material-ui/lab/TimelineItem' import TimelineSeparator from '@material-ui/lab/TimelineSeparator' import TimelineConnector from '@material-ui/lab/TimelineConnector' import TimelineContent from '@material-ui/lab/TimelineContent' import TimelineDot from '@material-ui/lab/TimelineDot' import TimelineOppositeContent from '@material-ui/lab/TimelineOppositeContent' import Typography from '@material-ui/core/Typography' import PropTypes from 'prop-types' import { useSelector } from 'react-redux' import { Tooltip, Button, Dialog, DialogContent, DialogActions, DialogTitle } from '@material-ui/core' import ImportExportIcon from '@material-ui/icons/ImportExport' function getDate (jsonDate) { var json = jsonDate var date = new Date(json) var formattedDate if (date.getMinutes() >= 10) { formattedDate = date.getDate() + '-' + (date.getMonth() + 1) + '-' + date.getFullYear() + ' at ' + date.getHours() + ':' + date.getMinutes() } else { formattedDate = date.getDate() + '-' + (date.getMonth() + 1) + '-' + date.getFullYear() + ' at ' + date.getHours() + ':0' + date.getMinutes() } return `${formattedDate}` } function ProjectTimeline ({ history, isOwner }) { const auth = useSelector(state => state.authReducer) const [descending, setDescending] = useState(true) const [notes, setNotes] = useState(false) const [timeline, setTimeline] = useState(history) useEffect(() => { if (descending) { setTimeline(history) } else { setTimeline(history.slice(0).reverse()) } }, [descending, history]) return ( <> setDescending(!descending)} /> setNotes(false)}> Reviewer Notes List
    {history.map((item) => ( <> { item.reviewer_notes &&
  1. "{item.reviewer_notes}" mentioned by {item.transition_author_name} at {getDate(item.transition_time)}
  2. } ))}
{!descending ? {isOwner ? <> {timeline.slice(0, -1).map((item) => ( <> {item.transition.history_creator && {getDate(item.transition_time)} by {item.transition_author_name} {item.transition.history_creator} } ))} {timeline[timeline.length - 1] && {getDate(timeline[timeline.length - 1].transition_time)} by {timeline[timeline.length - 1].transition_author_name} {timeline[timeline.length - 1].transition.event_creator ? : } {timeline[timeline.length - 1].transition.history_creator} } {timeline[timeline.length - 1] && timeline[timeline.length - 1].transition.event_creator && {timeline[timeline.length - 1].transition.event_creator} } : <> {auth.roles?.is_type_reviewer ? timeline.slice(0, -1).map((item) => ( <> {item.transition.history_reviewer && {getDate(item.transition_time)} by {item.transition_author_name} {item.transition.history_reviewer} } )) : timeline.slice(0, -1).map((item) => ( <> {item.transition.history_other && {getDate(item.transition_time)} by {item.transition_author_name} {item.transition.history_other} } )) } {timeline[timeline.length - 1] && {getDate(timeline[timeline.length - 1].transition_time)} by {timeline[timeline.length - 1].transition_author_name} {(auth.roles?.is_type_reviewer && timeline[timeline.length - 1].transition.event_reviewer) || (timeline[timeline.length - 1].transition.event_other) ? : } {auth.roles?.is_type_reviewer ? timeline[timeline.length - 1].transition.history_reviewer : timeline[timeline.length - 1].transition.history_other} } {timeline[timeline.length - 1] && (auth.roles?.is_type_reviewer ? timeline[timeline.length - 1].transition.event_reviewer : timeline[timeline.length - 1].transition.event_other) && {auth.roles?.is_type_reviewer ? timeline[timeline.length - 1].transition.event_reviewer : timeline[timeline.length - 1].transition.event_other} } } : {isOwner ? <> {timeline[0] && timeline[0].transition.event_creator && {timeline[0].transition.event_creator} } {timeline[0] && {getDate(timeline[0].transition_time)} by {timeline[0].transition_author_name} {timeline[0].transition.event_creator ? : } {timeline[0].transition.history_creator} } {timeline.slice(1).map((item) => ( <> {item.transition.history_creator && {getDate(item.transition_time)} by {item.transition_author_name} {item.transition.history_creator} } ))} : <> {timeline[0] && (auth.roles?.is_type_reviewer ? timeline[0].transition.event_reviewer : timeline[0].transition.event_other) && {auth.roles?.is_type_reviewer ? timeline[0].transition.event_reviewer : timeline[0].transition.event_other} } {timeline[0] && {getDate(timeline[0].transition_time)} by {timeline[0].transition_author_name} {(auth.roles?.is_type_reviewer && timeline[0].transition.event_reviewer) || (timeline[0].transition.event_other) ? : } {auth.roles?.is_type_reviewer ? timeline[0].transition.history_reviewer : timeline[0].transition.history_other} } {auth.roles?.is_type_reviewer ? timeline.slice(1).map((item) => ( <> {item.transition.history_reviewer && {getDate(item.transition_time)} by {item.transition_author_name} {item.transition.history_reviewer} } )) : timeline.slice(1).map((item) => ( <> {item.transition.history_other && {getDate(item.transition_time)} by {item.transition_author_name} {item.transition.history_other} } )) } } } ) } export default ProjectTimeline ProjectTimeline.propTypes = { history: PropTypes.object, isOwner: PropTypes.bool } ================================================ FILE: eda-frontend/src/components/Project/ReportComponent.js ================================================ /* eslint-disable camelcase */ import React, { useEffect } from 'react' import { Button, Typography, Dialog, DialogContent, MenuItem, Grid, Select, Paper, DialogActions, Tabs, Tab, Box } from '@material-ui/core' import PropTypes from 'prop-types' import { withStyles } from '@material-ui/core/styles' import MuiDialogTitle from '@material-ui/core/DialogTitle' import IconButton from '@material-ui/core/IconButton' import CloseIcon from '@material-ui/icons/Close' import { approveReports, fetchRole, getStatus, resolveReports } from '../../redux/actions/index' import { useDispatch, useSelector } from 'react-redux' const styles = (theme) => ({ root: { margin: 0, padding: theme.spacing(2) }, closeButton: { position: 'absolute', right: theme.spacing(1), top: theme.spacing(1), color: theme.palette.grey[500] } }) function TabPanel (props) { const { children, value, index, ...other } = props return ( ) } TabPanel.propTypes = { children: PropTypes.node, index: PropTypes.any.isRequired, value: PropTypes.any.isRequired } function a11yProps (index) { return { id: `simple-tab-${index}`, 'aria-controls': `simple-tabpanel-${index}` } } function ReportComponent (props) { const [reportDetailsOpen, setReportDetailsOpen] = React.useState(false) const [status, setStatus] = React.useState(null) const [reportStatus, setReportStatus] = React.useState(null) const [tab, setTab] = React.useState(0) const auth = useSelector(state => state.authReducer) const stateList = useSelector(state => state.projectReducer.states) const dispatch = useDispatch() useEffect(() => { const query = new URLSearchParams(props.location.search) var project_id = query.get('project_id') dispatch(fetchRole()) if (!reportDetailsOpen) { dispatch(getStatus(project_id)) } }, [props.location.search, dispatch, reportDetailsOpen]) const handleChangeTab = (event, newValue) => { setTab(newValue) } const handleSelectChange = (event) => { setStatus(event.target.value) } const handleReportDetailsOpen = (e) => { if (reportDetailsOpen) { setReportStatus(null) } setReportDetailsOpen(!reportDetailsOpen) } const onSelectReportStatus = (e, report_id) => { if (reportStatus) { var temp = [...reportStatus] } else { temp = [] } var report = { id: report_id, approved: e.target.value } temp.push(report) setReportStatus(temp) } const onClick = (type) => { const query = new URLSearchParams(props.location.search) var project_id = query.get('project_id') switch (type) { case 'Change State': dispatch(approveReports(project_id, reportStatus, status)) props.changedStatus() handleReportDetailsOpen() break default: break } } const DialogTitle = withStyles(styles)((props) => { const { children, classes, onClose, ...other } = props return ( {children} {onClose ? ( ) : null} ) }) return ( <>{auth.user &&

This is a reported project

Reports

{auth.user.username !== props.project.details.author_name && auth.roles?.is_type_reviewer && } {(props.project.reports.open[0] && auth.user.username !== props.project.details.author_name && auth.roles?.is_type_reviewer) &&

Do you want to approve any reports?

} {props.project.reports ? props.project.reports.open.map((item, index) => (

{item.description}

{auth.user.username !== props.project.details.author_name && auth.roles?.is_type_reviewer && }
)) : <>No Open Reports}
{props.project.reports.approved[0] ? props.project.reports.approved.map((item, index) => (

{item.description}

{auth.user.username !== props.project.details.author_name && }
)) : <>No Approved Reports}
{auth.user.username !== props.project.details.author_name && {props.project.reports && props.project.reports.closed.map((item, index) => (

{item.description}

{auth.user.username !== props.project.details.author_name && }
))}
} {stateList && ((tab === 1 && props.project.reports.approved[0]) || (tab === 0 && reportStatus)) && auth.roles?.is_type_reviewer && auth.user.username !== props.project.details.author_name && }
{auth.roles && {auth.user.username !== props.project.details.author_name && props.project.reports.approved[0] && auth.roles?.is_type_reviewer && tab === 1 && } {auth.roles?.is_type_reviewer && (reportStatus) && } }
} ) } ReportComponent.propTypes = { location: PropTypes.object, children: PropTypes.node, classes: PropTypes.object, onClose: PropTypes.bool, project: PropTypes.object, changedStatus: PropTypes.func } export default ReportComponent ================================================ FILE: eda-frontend/src/components/SchematicEditor/ComponentProperties.js ================================================ /* eslint-disable brace-style */ import React, { useState, useEffect } from 'react' import { useSelector, useDispatch } from 'react-redux' import { setCompProperties } from '../../redux/actions/index' import Draggable from 'react-draggable' import { List, ListItem, ListItemText, Button, TextField, TextareaAutosize, Paper } from '@material-ui/core' export default function ComponentProperties () { // component properties that are displayed on the right side bar when user clicks on a component on the grid. const properties = useSelector(state => state.componentPropertiesReducer.compProperties) const isOpen = useSelector(state => state.componentPropertiesReducer.isPropertiesWindowOpen) const id = useSelector(state => state.componentPropertiesReducer.id) let x = useSelector(state => state.componentPropertiesReducer.x) + 50 let y = useSelector(state => state.componentPropertiesReducer.y) const [height, setHeight] = useState(0) const [width, setWidth] = useState(0) const [val, setVal] = useState(properties) useEffect(() => { if (isOpen) { const temp = document.getElementById('properties-modal').clientHeight const temp2 = document.getElementById('properties-modal').clientWidth console.log(window.screen.width, temp2) console.log(x) if (0.6 * window.screen.height - 260 - y < temp) { if (temp + 100 >= y) { // eslint-disable-next-line y = 100 } else { // eslint-disable-next-line y = y - temp } } if (x > window.screen.width - 547) { // eslint-disable-next-line x = x - 380 } setHeight(y) setWidth(x) } }, [isOpen]) const dispatch = useDispatch() useEffect(() => { setVal(properties) }, [properties]) const getInputValues = (evt) => { const value = evt.target.value setVal({ ...val, [evt.target.id]: value }) } const setProps = () => { dispatch(setCompProperties(id, val)) } return ( isOpen &&
{ Object.keys(properties).map((keyName, i) => { if (keyName === 'MODEL') { return // eslint-disable-next-line brace-style } else if (keyName === 'EXTRA_EXPRESSION') { return } else if (keyName.charAt(0) === 'N' && keyName !== 'NAME') { return } else if (keyName.includes('UNIT')) { return } else if (keyName === 'PREFIX') { return ( ) } else if (keyName === 'NAME') { return ( ) } return ( {val[`${keyName}_UNIT`] && {val[`${keyName}_UNIT`] || ''}} ) }) }
) } ================================================ FILE: eda-frontend/src/components/SchematicEditor/ComponentSidebar.js ================================================ import React, { useEffect, useState } from 'react' import PropTypes from 'prop-types' import api from '../../utils/Api' import { Hidden, List, ListItem, Collapse, ListItemIcon, IconButton, Tooltip, TextField, InputAdornment, Divider } from '@material-ui/core' import Loader from 'react-loader-spinner' import SearchIcon from '@material-ui/icons/Search' import { makeStyles } from '@material-ui/core/styles' import ExpandLess from '@material-ui/icons/ExpandLess' import ExpandMore from '@material-ui/icons/ExpandMore' import CloseIcon from '@material-ui/icons/Close' import './Helper/SchematicEditor.css' import { useDispatch, useSelector } from 'react-redux' import { fetchLibraries, toggleCollapse, fetchComponents, toggleSimulate } from '../../redux/actions/index' import SideComp from './SideComp.js' import SimulationProperties from './SimulationProperties' const COMPONENTS_PER_ROW = 3 const useStyles = makeStyles((theme) => ({ toolbar: { minHeight: '90px' }, nested: { paddingLeft: theme.spacing(2), width: '100%' }, head: { marginRight: 'auto' } })) const searchOptions = { NAME: 'name__icontains', KEYWORD: 'keyword__icontains', DESCRIPTION: 'description__icontains', COMPONENT_LIBRARY: 'component_library__library_name__icontains', PREFIX: 'symbol_prefix' } // var tempSearchTxt = '' const searchOptionsList = ['NAME', 'KEYWORD', 'DESCRIPTION', 'COMPONENT_LIBRARY', 'PREFIX'] export default function ComponentSidebar ({ compRef, ltiSimResult, setLtiSimResult }) { const classes = useStyles() const libraries = useSelector(state => state.schematicEditorReducer.libraries) const collapse = useSelector(state => state.schematicEditorReducer.collapse) const components = useSelector(state => state.schematicEditorReducer.components) const isSimulate = useSelector(state => state.schematicEditorReducer.isSimulate) const auth = useSelector(state => state.authReducer) const dispatch = useDispatch() const [isSearchedResultsEmpty, setIssearchedResultsEmpty] = useState(false) const [searchText, setSearchText] = useState('') const [loading, setLoading] = useState(false) const [favourite, setFavourite] = useState(null) const [favOpen, setFavOpen] = useState(false) const [searchedComponentList, setSearchedComponents] = useState([]) const [searchOption, setSearchOption] = useState('NAME') const [uploaded, setuploaded] = useState(false) const [def, setdef] = useState(false) const [additional, setadditional] = useState(false) // const searchedComponentList = React.useRef([]) const timeoutId = React.useRef() const handleSearchOptionType = (evt) => { setSearchedComponents([]) setSearchOption(evt.target.value) } const handleSearchText = (evt) => { // tempSearchTxt = evt.target.value if (searchText.length === 0) { setSearchedComponents([]) } setSearchText(evt.target.value) setSearchedComponents([]) // mimic the value so we can access the latest value in our API call. // call api from here. and set the result to searchedComponentList. } React.useEffect(() => { if (auth.isAuthenticated) { const token = localStorage.getItem('esim_token') const config = { headers: { 'Content-Type': 'application/json' } } if (token) { config.headers.Authorization = `Token ${token}` } api .get('favouritecomponents', config) .then((resp) => { setFavourite(resp.data.component) }) .catch((err) => { console.log(err) }) } }, [auth]) React.useEffect(() => { // if the user keeps typing, stop the API call! clearTimeout(timeoutId.current) // don't make an API call with no data if (!searchText.trim()) return // capture the timeoutId so we can // stop the call if the user keeps typing timeoutId.current = setTimeout(() => { // call api here setLoading(true) let config = {} const token = localStorage.getItem('esim_token') if (token && token !== undefined) { config = { headers: { Authorization: `Token ${token}` } } } api.get(`components/?${searchOptions[searchOption]}=${searchText}`, config) .then( (res) => { if (res.data.length === 0) { setIssearchedResultsEmpty(true) } else { setIssearchedResultsEmpty(false) setSearchedComponents([...res.data]) } } ) .catch((err) => { console.error(err) }) setLoading(false) }, 800) }, [searchText, searchOption]) const handleCollapse = (id) => { // Fetches Components for given library if not already fetched if (collapse[id] === false && components[id].length === 0) { dispatch(fetchComponents(id)) } // Updates state of collapse to show/hide dropdown dispatch(toggleCollapse(id)) } // For Fetching Libraries useEffect(() => { dispatch(fetchLibraries()) }, [dispatch]) useEffect(() => { if (libraries.filter((ob) => { return ob.default === true }).length !== 0) { setdef(true) } else { setdef(false) } if (libraries.filter((ob) => { return ob.additional === true }).length !== 0) { setadditional(true) } else { setadditional(false) } if (libraries.filter((ob) => { return (!ob.additional && !ob.default) }).length !== 0) { setuploaded(true) } else { setuploaded(false) } }, [libraries]) // Used to chunk array const chunk = (array, size) => { return array.reduce((chunks, item, i) => { if (i % size === 0) { chunks.push([item]) } else { chunks[chunks.length - 1].push(item) } return chunks }, []) } const libraryDropDown = (library) => { return (
handleCollapse(id)} button divider> {library.library_name.slice(0, -4)} {collapse[library.id] ? : } {/* Chunked Components of Library */} {chunk(components[library.id], COMPONENTS_PER_ROW).map((componentChunk) => { return ( {componentChunk.map((component) => { return ( ) })} ) })}
) } const handleFavOpen = () => { setFavOpen(!favOpen) } return ( <>
{/* Display List of categorized components */}

Components List

) }} /> { searchOptionsList.map((value, i) => { return () }) }
{searchText.length !== 0 && searchedComponentList.length !== 0 && searchedComponentList.map((component, i) => { return ( ) } ) } {!loading && searchText.length !== 0 && isSearchedResultsEmpty && No Components Found } {/* Collapsing List Mapped by Libraries fetched by the API */} {favourite && favourite.length > 0 && <> Favourite Components
{favOpen ? : }
{chunk(favourite, 3).map((componentChunk) => { return (
{ componentChunk.map((component) => { return ( ) } ) }
) })}
} {searchText.length === 0 && <>
DEFAULT { libraries.sort(function (a, b) { const textA = a.library_name.toUpperCase() const textB = b.library_name.toUpperCase() return (textA < textB) ? -1 : (textA > textB) ? 1 : 0 }).filter((library) => { if (library.default) { return 1 } return 0 }).map( (library) => { return (libraryDropDown(library)) } )}
ADDITIONAL { libraries.sort(function (a, b) { const textA = a.library_name.toUpperCase() const textB = b.library_name.toUpperCase() return (textA < textB) ? -1 : (textA > textB) ? 1 : 0 }).filter((library) => { if (library.additional) { return 1 } return 0 }).map( (library) => { return (libraryDropDown(library)) } )}
UPLOADED { libraries.sort(function (a, b) { const textA = a.library_name.toUpperCase() const textB = b.library_name.toUpperCase() return (textA < textB) ? -1 : (textA > textB) ? 1 : 0 }).filter((library) => { if (!library.default && !library.additional) { return 1 } return 0 }).map( (library) => { return (libraryDropDown(library)) } )}
}
{/* Display simulation modes parameters on left side pane */}

Simulation Modes

{ dispatch(toggleSimulate()) }}>
) } ComponentSidebar.propTypes = { compRef: PropTypes.object.isRequired, ltiSimResult: PropTypes.string, setLtiSimResult: PropTypes.string } ================================================ FILE: eda-frontend/src/components/SchematicEditor/Header.js ================================================ import React, { useEffect } from 'react' import PropTypes from 'prop-types' import { useHistory, Link as RouterLink } from 'react-router-dom' import { Toolbar, Typography, IconButton, Button, Input, Hidden, Link, Avatar, Menu, Fade, MenuItem, ListItemText, Dialog, DialogTitle, DialogContent, DialogActions, DialogContentText, FormControlLabel, Switch, Snackbar } from '@material-ui/core' import { useSelector, useDispatch } from 'react-redux' import ShareIcon from '@material-ui/icons/Share' import CloseIcon from '@material-ui/icons/Close' import { makeStyles } from '@material-ui/core/styles' import { deepPurple } from '@material-ui/core/colors' import ErrorOutlineIcon from '@material-ui/icons/ErrorOutline' import * as actions from '../../redux/actions/actions' import logo from '../../static/logo.png' import { setTitle, logout, setSchTitle, setSchShared, loadMinUser, setSchDescription } from '../../redux/actions/index' import { HomeDialog } from './ToolbarExtension' import queryString from 'query-string' const useStyles = makeStyles((theme) => ({ toolbarTitle: { marginRight: theme.spacing(2) }, input: { marginLeft: theme.spacing(1), width: '200px', color: '#595959' }, rightBlock: { marginLeft: 'auto', marginRight: theme.spacing(2) }, button: { marginRight: theme.spacing(0.7) }, small: { width: theme.spacing(3.7), height: theme.spacing(3.7) }, tools: { padding: theme.spacing(1), margin: theme.spacing(0, 0.8), color: '#262626' }, purple: { width: theme.spacing(3.75), height: theme.spacing(3.75), color: theme.palette.getContrastText(deepPurple[500]), backgroundColor: deepPurple[500], fontSize: '17px' }, backDrop: { backdropFilter: 'blur(10px)' } })) // Notification snackbar to give alert messages function SimpleSnackbar ({ open, close, message }) { return (
} />
) } SimpleSnackbar.propTypes = { open: PropTypes.bool, close: PropTypes.func, message: PropTypes.string } function Header ({ gridRef }) { const history = useHistory() const classes = useStyles() const auth = useSelector(state => state.authReducer) const schSave = useSelector(state => state.saveSchematicReducer) const [anchorEl, setAnchorEl] = React.useState(null) const xyz = gridRef const [loginDialog, setLoginDialog] = React.useState(false) const [logoutConfirm, setLogoutConfirm] = React.useState(false) const [reloginMessage, setReloginMessage] = React.useState('') const [ltiId, setLtiId] = React.useState(null) const [ltiNonce, setLtiNonce] = React.useState(null) const dispatch = useDispatch() const handleClick = (event) => { setAnchorEl(event.currentTarget) } // Checks for localStore changess useEffect(() => { function checkUserData () { const userToken = localStorage.getItem('esim_token') if (userToken && userToken !== '') { // esim_token was added by another tab const newUser = parseInt(localStorage.getItem('user_id')) if (auth.isAuthenticated === null) { dispatch(loadMinUser()) } else if (auth.user && auth.user.id === newUser) { dispatch(loadMinUser()) setLoginDialog(false) } else { setReloginMessage('You are logged in but the circuit belongs to a different user! Login again with the same credentials') } } else { /* User logged out and esim_token removed from localstore But redux store still has it */ if (auth.token && auth.token !== '') { if (!loginDialog) { setReloginMessage('You have been logged out of your account. Login again') setLoginDialog(true) } } } } window.addEventListener('storage', checkUserData) return () => { window.removeEventListener('storage', checkUserData) } }) useEffect(() => { var url = queryString.parse(window.location.href.split('editor')[1]) if (url.lti_id) { setLtiId(url.lti_id) } if (url.lti_nonce) { setLtiNonce(url.lti_nonce) } }, []) const handleClose = () => { setAnchorEl(null) } const titleHandler = (e) => { dispatch(setTitle(`* ${e.target.value}`)) dispatch(setSchTitle(`${e.target.value}`)) } // handle notification snackbar open and close with message const [snacOpen, setSnacOpen] = React.useState(false) const [message, setMessage] = React.useState('') const handleSnacClick = () => { setSnacOpen(true) } const handleSnacClose = (event, reason) => { if (reason === 'clickaway') { return } setSnacOpen(false) } // handle schematic Share Dialog box const [openShare, setShareOpen] = React.useState(false) const handleShareOpen = () => { setShareOpen(true) } const handleShareClose = () => { setShareOpen(false) } // handle home dialog box const [homeopen, setHomeOpen] = React.useState(false) const [routeVal, setRouteVal] = React.useState(undefined) const handleHomeOpen = (e) => { e.preventDefault() setRouteVal(e.target.attributes.value.value) setHomeOpen(true) } const handleHomeClose = () => { console.log(homeopen) setHomeOpen(false) } // change saved schematic share status const [shared, setShared] = React.useState(schSave.isShared) useEffect(() => { setShared(schSave.isShared) }, [schSave.isShared]) useEffect(() => { if (history.location.search === '') { dispatch(setSchTitle('Untitled_Schematic')) dispatch(setSchDescription('')) dispatch({ type: actions.CLEAR_DETAILS }) } }, [history.location.search, dispatch]) const handleShareChange = (event) => { setShared(event.target.checked) dispatch(setSchShared(event.target.checked)) } const handleShare = () => { if (auth.isAuthenticated !== true) { setMessage('You are not Logged In') handleSnacClick() } else if (schSave.isSaved !== true) { setMessage('You have not saved the circuit') handleSnacClick() } else { handleShareOpen() } } // handle display format of last saved status function getDate (jsonDate) { const json = jsonDate const date = new Date(json) const dateTimeFormat = new Intl.DateTimeFormat('en', { month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit' }) const [{ value: month }, , { value: day }, , { value: hour }, , { value: minute }, , { value: second }] = dateTimeFormat.formatToParts(date) return `${day} ${month} ${hour}:${minute}:${second}` } // handle Copy Share Url const textAreaRef = React.useRef(null) function copyToClipboard (e) { textAreaRef.current.select() document.execCommand('copy') e.target.focus() setMessage('Copied Successfully!') handleSnacClick() } return ( <>
{'Login to continue working on the circuit'}
{reloginMessage} {' to continue working on the circuit, otherwise all unsaved changes will be lost.'}
{ setLogoutConfirm(false) }} >
{'Are you sure you want to logout?'}
You will lose all unsaved changes if you logout now.
{/* Display logo */} eSim {/* Input field for schematic title */} {/* Display last saved and shared option for saved schematics */} {(!ltiId || !ltiNonce) && auth.isAuthenticated === true ? <> {(schSave.isSaved === true && schSave.details.save_time !== undefined) ? Last Saved : {getDate(schSave.details.save_time)} {/* Display last saved status for saved schematics */} : <> } : <> } {/* Share dialog box to get share url */} {'Share Your Schematic'} } label=": Sharing On" /> {shared === true ? : <> Turn On sharing } {shared === true && document.queryCommandSupported('copy') ? : <> } {/* Display login option or user menu as per authenticated status */} {(!ltiId || !ltiNonce) && (!auth.isAuthenticated ? <> Home {gridRef && routeVal && } Editor Gallery Simulator : (<> Home { gridRef && routeVal && } Editor Gallery Simulator Dashboard {auth.user.username.charAt(0).toUpperCase()} My Profile My Schematics Change password { setLogoutConfirm(true) }}> Logout ) ) } {ltiId && ltiNonce && Assignment } ) } Header.propTypes = { gridRef: PropTypes.object.isRequired } export default Header ================================================ FILE: eda-frontend/src/components/SchematicEditor/Helper/ComponentDrag.js ================================================ /* eslint-disable no-inner-declarations */ /* eslint-disable no-new */ /* eslint-disable new-cap */ /* eslint-disable */ import mxGraphFactory from 'mxgraph' import * as actions from '../../../redux/actions/actions' import store from '../../../redux/store' import dot from '../../../static/dot.gif' // import ClipBoardFunct from './ClipBoard.js' // import NetlistInfoFunct from './NetlistInfo.js' import ToolbarTools from './ToolbarTools.js' import KeyboardShorcuts from './KeyboardShorcuts.js' import { SideBar } from './SideBar.js' import KiCadFileUtils from './KiCadFileUtils' var graph const { mxGraph, mxRubberband, mxClient, mxUtils, mxEvent, mxOutline, mxCell, mxPoint, mxGraphView, mxCellEditor, mxEdgeHandler, mxConnectionConstraint, mxEdgeSegmentHandler, mxCellHighlight, mxEdgeStyle, mxStyleRegistry, mxConnectionHandler, mxConstants, mxGraphHandler, mxCylinder, mxCellRenderer, mxCodec, mxEditor, mxEditorUI, mxConstraintHandler, mxImage } = new mxGraphFactory() export default function LoadGrid (container, sidebar, outline) { // Checks if the browser is supported if (!mxClient.isBrowserSupported()) { // Displays an error message if the browser is not supported. mxUtils.error('Browser is not supported!', 200, false) } else { // Disables the built-in context men mxEvent.disableContextMenu(container) // Tells if the cell is a component or a pin or a wire mxCell.prototype.CellType = 'This is where you say what the vertex is' // Tells the magnitude of a resistor/capacitor mxCell.prototype.Magnitude = null // Tells whether the pin is input/output mxCell.prototype.pinType = ' ' // Tells if the cell is component, Default is false mxCell.prototype.Component = false // Tells if the cell is pin, Default is false mxCell.prototype.Pin = false // Pin number of the component, default is 0 mxCell.prototype.PinNumber = 0 // Parent component of a pin, default is null mxCell.prototype.ParentComponent = null mxCell.prototype.symbol = null mxCell.prototype.node = null mxCell.prototype.PinName = '' mxCell.prototype.CompObject = null mxCell.prototype.properties = {} mxCell.prototype.sourceVertex = false mxCell.prototype.targetVertex = false mxCell.prototype.tarx = 0 mxCell.prototype.tary = 0 mxCell.prototype.PointsArray = null // mxCell.prototype.ConnectedNode = null // Enables guides mxGraphHandler.prototype.guidesEnabled = true mxEdgeHandler.prototype.snapToTerminals = true // Enable cell Rotation // mxVertexHandler.prototype.rotationEnabled = true // Creates the graph inside the given container graph = new mxGraph(container) mxConnectionHandler.prototype.movePreviewAway = false mxConnectionHandler.prototype.waypointsEnabled = true mxGraph.prototype.resetEdgesOnConnect = false mxConstants.SHADOWCOLOR = '#C0C0C0' var joinNodeSize = 7 var strokeWidth = 2 // Replaces the port image mxConstraintHandler.prototype.pointImage = new mxImage(dot, 10, 10) // Enables rubberband selection new mxRubberband(graph) if(outline !== null) { var outln = new mxOutline(graph, outline) // To show the images in the outline, uncomment the following code outln.outline.labelsVisible = true outln.outline.setHtmlLabels(true) graph.view.scale = 1 graph.setPanning(true) graph.setConnectable(true) graph.setConnectableEdges(true) graph.setDisconnectOnMove(false) graph.foldingEnabled = false // Panning handler consumed right click so this must be // disabled if right click should stop connection handler. graph.panningHandler.isPopupTrigger = function () { return false } // Enables return key to stop editing (use shift-enter for newlines) graph.setEnterStopsCellEditing(true) // Adds rubberband selection new mxRubberband(graph) // Alternative solution for implementing connection points without child cells. // This can be extended as shown in portrefs.html example to allow for per-port // incoming/outgoing direction. graph.getAllConnectionConstraints = function (terminal) { var geo = (terminal != null) ? this.getCellGeometry(terminal.cell) : null if ((geo != null ? !geo.relative : false) && this.getModel().isVertex(terminal.cell) && this.getModel().getChildCount(terminal.cell) === 0) { return [new mxConnectionConstraint(new mxPoint(0, 0.5), false), new mxConnectionConstraint(new mxPoint(1, 0.5), false)] } return null } // Makes sure non-relative cells can only be connected via constraints graph.connectionHandler.isConnectableCell = function (cell) { if (this.graph.getModel().isEdge(cell)) { return true } else { var geo = (cell != null) ? this.graph.getCellGeometry(cell) : null return (geo != null) ? geo.relative : false } } mxEdgeHandler.prototype.isConnectableCell = function (cell) { return graph.connectionHandler.isConnectableCell(cell) } // Adds a special tooltip for edges graph.setTooltips(true) var getTooltipForCell = graph.getTooltipForCell graph.getTooltipForCell = function (cell) { var tip = '' if (cell != null) { var src = this.getModel().getTerminal(cell, true) if (src != null) { tip += this.getTooltipForCell(src) + ' ' } var parent = this.getModel().getParent(cell) if (this.getModel().isVertex(parent)) { tip += this.getTooltipForCell(parent) + '.' } tip += getTooltipForCell.apply(this, arguments) var trg = this.getModel().getTerminal(cell, false) if (trg != null) { tip += ' ' + this.getTooltipForCell(trg) } } return tip } } graph.addListener(mxEvent.DOUBLE_CLICK, function (sender, evt) { var cell = evt.getProperty('cell') // mxUtils.alert('Doubleclick: ' + ((cell != null) ? cell.symbol : 'Graph')) if (cell !== undefined && cell.CellType === 'Component') { store.dispatch({ type: actions.CLOSE_COMP_PROPERTIES_TEMP }) store.dispatch({ type: actions.GET_COMP_PROPERTIES, payload: { id: cell.id, compProperties: cell.properties, x: sender.lastEvent.clientX, y: sender.lastEvent.clientY } }) } else if (cell !== undefined && cell.CellType === 'This is where you say what the vertex is') { store.dispatch({ type: actions.CLOSE_COMP_PROPERTIES }) } else if (cell === undefined) { store.dispatch({ type: actions.CLOSE_COMP_PROPERTIES }) } evt.consume() }) // Creates the outline (navigator, overview) for moving // around the graph in the top, right corner of the window. // Switch for black background and bright styles var invert = false if (invert) { container.style.backgroundColor = 'black' // White in-place editor text color var mxCellEditorStartEditing = mxCellEditor.prototype.startEditing mxCellEditor.prototype.startEditing = function (cell, trigger) { mxCellEditorStartEditing.apply(this, arguments) if (this.textarea != null) { this.textarea.style.color = '#FFFFFF' } } mxGraphHandler.prototype.previewColor = 'white' } var labelBackground = (invert) ? '#000000' : '#FFFFFF' var fontColor = (invert) ? '#FFFFFF' : '#000000' var strokeColor = (invert) ? '#C0C0C0' : '#000000' // var fillColor = (invert) ? 'none' : '#FFFFFF' var style = graph.getStylesheet().getDefaultEdgeStyle() delete style.endArrow style.strokeColor = strokeColor style.labelBackgroundColor = labelBackground style.edgeStyle = 'wireEdgeStyle' style.fontColor = fontColor style.fontSize = '9' style.movable = '0' style.strokeWidth = strokeWidth // style['rounded'] = '1'; // Sets join node size style.startSize = joinNodeSize style.endSize = joinNodeSize style = graph.getStylesheet().getDefaultVertexStyle() style.gradientDirection = 'south' // style['gradientColor'] = '#909090'; style.strokeColor = strokeColor // style['fillColor'] = '#e0e0e0'; style.fillColor = 'none' style.fontColor = fontColor style.fontStyle = '1' style.fontSize = '12' style.resizable = '0' style.rounded = '1' style.strokeWidth = strokeWidth // var parent = graph.getDefaultParent() if(sidebar !== null) { } SideBar(graph, sidebar) KeyboardShorcuts(graph) //NetlistInfoFunct(graph) ToolbarTools(graph) KiCadFileUtils(graph) store.subscribe(() => { var id = store.getState().componentPropertiesReducer.id var props = store.getState().componentPropertiesReducer.compProperties var cellList = graph.getModel().cells var c = cellList[id] if (c !== undefined) { c.properties = props } }) var editor = new mxEditor() /* var xml = '' var doc = mxUtils.parseXml(xml); var node = doc.documentElement; editor.readGraphModel(node); */ graph.getModel().beginUpdate() try { /* var xml = '' var xmlDoc = mxUtils.parseXml(xml) var node = xmlDoc.documentElement var dec = new mxCodec(node) dec.decode(node, graph.getModel()) console.log(dec)*/ } finally { // Updates the display graph.getModel().endUpdate() } // Shows XML for debugging the actual modelSS // Wire-mode var checkbox = { checked: false } //document.body.appendChild(checkbox) //mxUtils.write(document.body, 'Wire Mode') // Starts connections on the background in wire-mode var connectionHandlerIsStartEvent = graph.connectionHandler.isStartEvent graph.connectionHandler.isStartEvent = function (me) { return checkbox.checked || connectionHandlerIsStartEvent.apply(this, arguments) } // Avoids any connections for gestures within tolerance except when in wire-mode // or when over a port var connectionHandlerMouseUp = graph.connectionHandler.mouseUp graph.connectionHandler.mouseUp = function (sender, me) { if (this.first != null && this.previous != null) { var point = mxUtils.convertPoint(this.graph.container, me.getX(), me.getY()) var dx = Math.abs(point.x - this.first.x) var dy = Math.abs(point.y - this.first.y) if (dx < this.graph.tolerance && dy < this.graph.tolerance) { // Selects edges in non-wire mode for single clicks, but starts // connecting for non-edges regardless of wire-mode if (!checkbox.checked && this.graph.getModel().isEdge(this.previous.cell)) { this.reset() } return } } connectionHandlerMouseUp.apply(this, arguments) } // Grid /* var checkbox2 = document.createElement('input') checkbox2.setAttribute('type', 'checkbox') checkbox2.setAttribute('checked', 'true') document.body.appendChild(checkbox2) mxUtils.write(document.body, 'Grid') mxEvent.addListener(checkbox2, 'click', function (evt) { if (checkbox2.checked) { container.style.background = 'url(\'images/wires-grid.gif\')' } else { container.style.background = '' } container.style.backgroundColor = (invert) ? 'black' : 'white' }) */ mxEvent.disableContextMenu(container) }; // Computes the position of edge to edge connection points. mxGraphView.prototype.updateFixedTerminalPoint = function (edge, terminal, source, constraint) { var pt = null if (constraint != null) { pt = this.graph.getConnectionPoint(terminal, constraint) } if (source) { edge.sourceSegment = null } else { edge.targetSegment = null } try { if (pt == null) { var s = this.scale var tr = this.translate var orig = edge.origin var geo = this.graph.getCellGeometry(edge.cell) pt = geo.getTerminalPoint(source) // Computes edge-to-edge connection point if (pt != null) { pt = new mxPoint(s * (tr.x + pt.x + orig.x), s * (tr.y + pt.y + orig.y)) // Finds nearest segment on edge and computes intersection if (terminal != null && terminal.absolutePoints != null) { var seg = mxUtils.findNearestSegment(terminal, pt.x, pt.y) // Finds orientation of the segment var p0 = terminal.absolutePoints[seg] var pe = terminal.absolutePoints[seg + 1] var horizontal = (p0.x - pe.x === 0) // Stores the segment in the edge state var key = (source) ? 'sourceConstraint' : 'targetConstraint' var value = (horizontal) ? 'horizontal' : 'vertical' edge.style[key] = value // Keeps the coordinate within the segment bounds if (horizontal) { pt.x = p0.x pt.y = Math.min(pt.y, Math.max(p0.y, pe.y)) pt.y = Math.max(pt.y, Math.min(p0.y, pe.y)) } else { pt.y = p0.y pt.x = Math.min(pt.x, Math.max(p0.x, pe.x)) pt.x = Math.max(pt.x, Math.min(p0.x, pe.x)) } } } // Computes constraint connection points on vertices and ports else if (terminal != null && terminal.cell.geometry.relative) { pt = new mxPoint(this.getRoutingCenterX(terminal), this.getRoutingCenterY(terminal)) } } edge.setAbsoluteTerminalPoint(pt, source) } catch (e) { console.log(e) } } // Sets source terminal point for edge-to-edge connections. mxConnectionHandler.prototype.createEdgeState = function (me) { var edge = this.graph.createEdge() if (this.sourceConstraint != null && this.previous != null) { edge.style = mxConstants.STYLE_EXIT_X + '=' + this.sourceConstraint.point.x + ';' + mxConstants.STYLE_EXIT_Y + '=' + this.sourceConstraint.point.y + ';' } else if (this.graph.model.isEdge(me.getCell())) { var scale = this.graph.view.scale var tr = this.graph.view.translate var pt = new mxPoint(this.graph.snap(me.getGraphX() / scale) - tr.x, this.graph.snap(me.getGraphY() / scale) - tr.y) edge.geometry.setTerminalPoint(pt, true) } return this.graph.view.createState(edge) } // Uses right mouse button to create edges on background (see also: lines 67 ff) mxConnectionHandler.prototype.isStopEvent = function (me) { return me.getState() != null || mxEvent.isRightMouseButton(me.getEvent()) } // Updates target terminal point for edge-to-edge connections. try { var mxConnectionHandlerUpdateCurrentState = mxConnectionHandler.prototype.updateCurrentState mxConnectionHandler.prototype.updateCurrentState = function (me) { try { mxConnectionHandlerUpdateCurrentState.apply(this, arguments) } catch(err) { } if (this.edgeState != null) { this.edgeState.cell.geometry.setTerminalPoint(null, false) if (this.shape != null && this.currentState != null && this.currentState.view.graph.model.isEdge(this.currentState.cell)) { var scale = this.graph.view.scale var tr = this.graph.view.translate var pt = new mxPoint(this.graph.snap(me.getGraphX() / scale) - tr.x, this.graph.snap(me.getGraphY() / scale) - tr.y) this.edgeState.cell.geometry.setTerminalPoint(pt, false) } } } } catch(e){ console } // Updates the terminal and control points in the cloned preview. mxEdgeSegmentHandler.prototype.clonePreviewState = function (point, terminal) { var clone = mxEdgeHandler.prototype.clonePreviewState.apply(this, arguments) clone.cell = clone.cell.clone() if (this.isSource || this.isTarget) { clone.cell.geometry = clone.cell.geometry.clone() // Sets the terminal point of an edge if we're moving one of the endpoints if (this.graph.getModel().isEdge(clone.cell)) { // TODO: Only set this if the target or source terminal is an edge clone.cell.geometry.setTerminalPoint(point, this.isSource) } else { clone.cell.geometry.setTerminalPoint(null, this.isSource) } } return clone } var mxEdgeHandlerConnect = mxEdgeHandler.prototype.connect mxEdgeHandler.prototype.connect = function (edge, terminal, isSource, isClone, me) { var result = null var model = this.graph.getModel() // var parent = model.getParent(edge) model.beginUpdate() try { result = mxEdgeHandlerConnect.apply(this, arguments) var geo = model.getGeometry(result) if (geo != null) { geo = geo.clone() var pt = null if (model.isEdge(terminal)) { pt = this.abspoints[(this.isSource) ? 0 : this.abspoints.length - 1] pt.x = pt.x / this.graph.view.scale - this.graph.view.translate.x pt.y = pt.y / this.graph.view.scale - this.graph.view.translate.y var pstate = this.graph.getView().getState( this.graph.getModel().getParent(edge)) if (pstate != null) { pt.x -= pstate.origin.x pt.y -= pstate.origin.y } pt.x -= this.graph.panDx / this.graph.view.scale pt.y -= this.graph.panDy / this.graph.view.scale } geo.setTerminalPoint(pt, isSource) model.setGeometry(edge, geo) } } finally { model.endUpdate() } return result } var mxConnectionHandlerCreateMarker = mxConnectionHandler.prototype.createMarker mxConnectionHandler.prototype.createMarker = function () { var marker = mxConnectionHandlerCreateMarker.apply(this, arguments) // Uses complete area of cell for new connections (no hotspot) marker.intersects = function (state, evt) { return true } // Adds in-place highlighting // eslint-disable-next-line no-unused-vars var mxCellHighlightHighlight = mxCellHighlight.prototype.highlight marker.highlight.highlight = function (state) { if (this.state !== state) { if (this.state != null) { this.state.style = this.lastStyle // Workaround for shape using current stroke width if no strokewidth defined this.state.style.strokeWidth = this.state.style.strokeWidth || '1' this.state.style.strokeColor = this.state.style.strokeColor || 'none' if (this.state.shape != null) { this.state.view.graph.cellRenderer.configureShape(this.state) this.state.shape.redraw() } } if (state != null) { this.lastStyle = state.style state.style = mxUtils.clone(state.style) state.style.strokeColor = '#00ff00' state.style.strokeWidth = '3' if (state.shape != null) { state.view.graph.cellRenderer.configureShape(state) state.shape.redraw() } } this.state = state } } return marker } var mxEdgeHandlerCreateMarker = mxEdgeHandler.prototype.createMarker mxEdgeHandler.prototype.createMarker = function () { var marker = mxEdgeHandlerCreateMarker.apply(this, arguments) // Adds in-place highlighting when reconnecting existing edges marker.highlight.highlight = this.graph.connectionHandler.marker.highlight.highlight return marker } var mxGraphGetCellStyle = mxGraph.prototype.getCellStyle mxGraph.prototype.getCellStyle = function (cell) { var style = mxGraphGetCellStyle.apply(this, arguments) if (style != null && this.model.isEdge(cell)) { style = mxUtils.clone(style) if (this.model.isEdge(this.model.getTerminal(cell, true))) { style.startArrow = 'oval' } if (this.model.isEdge(this.model.getTerminal(cell, false))) { style.endArrow = 'oval' } } return style } function ResistorShape () { }; ResistorShape.prototype = new mxCylinder() ResistorShape.prototype.constructor = ResistorShape ResistorShape.prototype.redrawPath = function (path, x, y, w, h, isForeground) { var dx = w / 16 if (isForeground) { path.moveTo(0, h / 2) path.lineTo(2 * dx, h / 2) path.lineTo(3 * dx, 0) path.lineTo(5 * dx, h) path.lineTo(7 * dx, 0) path.lineTo(9 * dx, h) path.lineTo(11 * dx, 0) path.lineTo(13 * dx, h) path.lineTo(14 * dx, h / 2) path.lineTo(16 * dx, h / 2) path.end() } } mxCellRenderer.registerShape('resistor', ResistorShape) mxEdgeStyle.WireConnector = function (state, source, target, hints, result) { // Creates array of all way- and terminalpoints var pts = state.absolutePoints var horizontal = true var hint = null // Gets the initial connection from the source terminal or edge if (source != null && state.view.graph.model.isEdge(source.cell)) { horizontal = state.style.sourceConstraint === 'horizontal' } else if (source != null) { horizontal = source.style.portConstraint !== 'vertical' // Checks the direction of the shape and rotates var direction = source.style[mxConstants.STYLE_DIRECTION] if (direction === 'north' || direction === 'south') { horizontal = !horizontal } } // Adds the first point // TODO: Should move along connected segment var pt = pts[0] if (pt == null && source != null) { pt = new mxPoint(state.view.getRoutingCenterX(source), state.view.getRoutingCenterY(source)) } else if (pt != null) { pt = pt.clone() } var first = pt // Adds the waypoints if (hints != null && hints.length > 0) { // FIXME: First segment not movable /* hint = state.view.transformControlPoint(state, hints[0]); mxLog.show(); mxLog.debug(hints.length,'hints0.y='+hint.y, pt.y) if (horizontal && Math.floor(hint.y) != Math.floor(pt.y)) { mxLog.show(); mxLog.debug('add waypoint'); pt = new mxPoint(pt.x, hint.y); result.push(pt); pt = pt.clone(); //horizontal = !horizontal; } */ for (var i = 0; i < hints.length; i++) { horizontal = !horizontal hint = state.view.transformControlPoint(state, hints[i]) if (horizontal) { if (pt.y !== hint.y) { pt.y = hint.y result.push(pt.clone()) } } else if (pt.x !== hint.x) { pt.x = hint.x result.push(pt.clone()) } } } else { hint = pt } // Adds the last point pt = pts[pts.length - 1] // TODO: Should move along connected segment if (pt == null && target != null) { pt = new mxPoint(state.view.getRoutingCenterX(target), state.view.getRoutingCenterY(target)) } if (horizontal) { if (pt.y !== hint.y && first.x !== pt.x) { result.push(new mxPoint(pt.x, hint.y)) } } else if (pt.x !== hint.x && first.y !== pt.y) { result.push(new mxPoint(hint.x, pt.y)) } } mxStyleRegistry.putValue('wireEdgeStyle', mxEdgeStyle.WireConnector) // This connector needs an mxEdgeSegmentHandler var mxGraphCreateHandler = mxGraph.prototype.createHandler mxGraph.prototype.createHandler = function (state) { // eslint-disable-next-line no-unused-vars var result = null if (state != null) { if (this.model.isEdge(state.cell)) { var style = this.view.getEdgeStyle(state) if (style === mxEdgeStyle.WireConnector) { return new mxEdgeSegmentHandler(state) } } } return mxGraphCreateHandler.apply(this, arguments) } } ================================================ FILE: eda-frontend/src/components/SchematicEditor/Helper/ComponentParametersData.js ================================================ const ComponentParameters = { // capacitor C: { PREFIX: 'C', NAME: '', N1: '', N2: '', VALUE: '', EXTRA_EXPRESSION: '', MODEL: '', VALUE_UNIT: 'F', IC: '0' }, D: { PREFIX: 'D', NAME: '', N1: '', N2: '', EXTRA_EXPRESSION: '', MODEL: '.model mydiode D' }, I: { ISOURCE: { PREFIX: 'I', NAME: '', N1: '', N2: '', VALUE: '0', EXTRA_EXPRESSION: '', MODEL: '', VALUE_UNIT: 'A' }, SINE: { PREFIX: 'I', NAME: '', N1: '', N2: '', OFFSET: '1.0', AMPLITUDE: '1.0', FREQUENCY: '1K', DELAY: '0.0', DAMPING_FACTOR: '0.0', PHASE: '0.0', EXTRA_EXPRESSION: '', MODEL: '', OFFSET_UNIT: 'A', AMPLITUDE_UNIT: 'A', FREQUENCY_UNIT: 'Hz', DELAY_UNIT: 'S', DAMPING_FACTOR_UNIT: '1/S', PHASE_UNIT: 'DEG' }, PULSE: { PREFIX: 'I', NAME: '', N1: '', N2: '', INITIAL_VALUE: '0', PULSED_VALUE: '1', DELAY_TIME: '1K', RISE_TIME: '1u', FALL_TIME: '1u', PULSE_WIDTH: '1m', PERIOD: '1m', PHASE: '0.0', EXTRA_EXPRESSION: '', MODEL: '', INITIAL_VALUE_UNIT: 'A', PULSED_VALUE_UNIT: 'A', DELAY_TIME_UNIT: 'S', RISE_TIME_UNIT: 'S', FALL_TIME_UNIT: 'S', PULSE_WIDTH_UNIT: 'S', PERIOD_UNIT: 'S', PHASE_UNIT: 'DEG' }, DC: { PREFIX: 'I', NAME: '', N1: '', N2: '', VALUE: '0', EXTRA_EXPRESSION: '', MODEL: '', VALUE_UNIT: 'A' }, EXP: { PREFIX: 'I', NAME: '', N1: '', N2: '', INITIAL_VALUE: '0', PULSED_VALUE: '1', RISE_DELAY_TIME: '100u', RISE_TIME_CONSTANT: '20u', FALL_DELAY_TIME: '500u', FALL_TIME_CONSTANT: '60u', EXTRA_EXPRESSION: '', MODEL: '', INITIAL_VALUE_UNIT: 'A', PULSED_VALUE_UNIT: 'A', RISE_DELAY_TIME_UNIT: 'S', RISE_TIME_CONSTANT_UNIT: 'S', FALL_DELAY_TIME_UNIT: 'S', FALL_TIME_CONSTANT_UNIT: 'S' } }, G: { PREFIX: 'G', NAME: '', N1: '', N2: '', NC1: '', NC2: '', VALUE: '', EXTRA_EXPRESSION: '', MODEL: '', VALUE_UNIT: 'mho' }, F: { PREFIX: 'F', NAME: '', N1: '', N2: '', VNAM: '', VALUE: '', EXTRA_EXPRESSION: '', MODEL: '' }, H: { PREFIX: 'H', NAME: '', N1: '', N2: '', VNAM: '', VALUE: '', EXTRA_EXPRESSION: '', MODEL: '' }, J: { PREFIX: 'J', NAME: '', N1: '', N2: '', N3: '', EXTRA_EXPRESSION: '', MODEL: '' }, O: { PREFIX: 'O', NAME: '', N1: '', N2: '', N3: '', N4: '', EXTRA_EXPRESSION: '', MODEL: '' }, T: { PREFIX: 'T', NAME: '', N1: '', N2: '', N3: '', N4: '', EXTRA_EXPRESSION: '', MODEL: '' }, // Inductor L: { PREFIX: 'L', NAME: '', N1: '', N2: '', VALUE: '', EXTRA_EXPRESSION: '', MODEL: '', VALUE_UNIT: 'H', IC: '0', DTEMP: '27' }, M: { PREFIX: 'M', NAME: '', N1: '', N2: '', N3: '', N4: '', EXTRA_EXPRESSION: '', MULTIPLICITY_PARAMETER: '1', MODEL: '.model mymosfet NMOS', DTEMP: '27' }, Q: { PREFIX: 'Q', NAME: '', N1: '', N2: '', N3: '', EXTRA_EXPRESSION: '', MODEL: '.model mybjt PNP', MULTIPLICITY_PARAMETER: '1', DTEMP: '27' }, V: { VSOURCE: { PREFIX: 'V', NAME: '', N1: '', N2: '', VALUE: '0', EXTRA_EXPRESSION: '', MODEL: '', VALUE_UNIT: 'V' }, SINE: { PREFIX: 'V', NAME: '', N1: '', N2: '', OFFSET: '1.0', AMPLITUDE: '1.0', FREQUENCY: '1K', DELAY: '0.0', DAMPING_FACTOR: '0.0', PHASE: '0.0', EXTRA_EXPRESSION: '', MODEL: '', OFFSET_UNIT: 'V', AMPLITUDE_UNIT: 'V', FREQUENCY_UNIT: 'Hz', DELAY_UNIT: 'S', DAMPING_FACTOR_UNIT: '1/S', PHASE_UNIT: 'DEG' }, PULSE: { PREFIX: 'V', NAME: '', N1: '', N2: '', INITIAL_VALUE: '0', PULSED_VALUE: '1', DELAY_TIME: '1K', RISE_TIME: '1u', FALL_TIME: '1u', PULSE_WIDTH: '1m', PERIOD: '1m', PHASE: '0.0', EXTRA_EXPRESSION: '', MODEL: '', INITIAL_VALUE_UNIT: 'V', PULSED_VALUE_UNIT: 'V', DELAY_TIME_UNIT: 'S', RISE_TIME_UNIT: 'S', FALL_TIME_UNIT: 'S', PULSE_WIDTH_UNIT: 'S', PERIOD_UNIT: 'S', PHASE_UNIT: 'DEG' }, DC: { PREFIX: 'V', NAME: '', N1: '', N2: '', VALUE: '0', EXTRA_EXPRESSION: '', MODEL: '', VALUE_UNIT: 'V' }, EXP: { PREFIX: 'V', NAME: '', N1: '', N2: '', INITIAL_VALUE: '0', PULSED_VALUE: '1', RISE_DELAY_TIME: '100u', RISE_TIME_CONSTANT: '20u', FALL_DELAY_TIME: '500u', FALL_TIME_CONSTANT: '60u', EXTRA_EXPRESSION: '', MODEL: '', INITIAL_VALUE_UNIT: 'v', PULSED_VALUE_UNIT: 'v', RISE_DELAY_TIME_UNIT: 'S', RISE_TIME_CONSTANT_UNIT: 'S', FALL_DELAY_TIME_UNIT: 'S', FALL_TIME_CONSTANT_UNIT: 'S' } }, // resistor R: { PREFIX: 'R', NAME: '', N1: '', N2: '', VALUE: '1', EXTRA_EXPRESSION: '', MODEL: '', VALUE_UNIT: 'Ohm', SHEET_RESISTANCE: '0', FIRST_ORDER_TEMPERATURE_COEFF: '0', SECOND_ORDER_TEMPERATURE_COEFF: '0', PARAMETER_MEASUREMENT_TEMPERATURE: '27' }, Z: { PREFIX: 'Z', NAME: '', N1: '', N2: '', N3: '', EXTRA_EXPRESSION: '', MODEL: '' }, SW: { PREFIX: 'S', NAME: '', N1: '', N2: '', NC1: '', NC2: '', MODEL: '', EXTRA_EXPRESSION: '' }, W: { PREFIX: 'W', NAME: '', N1: '', N2: '', VNAM: '', MODEL: '', EXTRA_EXPRESSION: '' }, E: { PREFIX: 'E', NAME: '', N1: '', N2: '', NC1: '', NC2: '', MODEL: '', VALUE: '1', EXTRA_EXPRESSION: '' } } export default ComponentParameters // K coupled inductor // SWITCHES // IF S,W show model ================================================ FILE: eda-frontend/src/components/SchematicEditor/Helper/KeyboardShorcuts.js ================================================ /* eslint-disable new-cap */ import MxGraphFactory from 'mxgraph' import { Undo, Redo, ZoomIn, ZoomOut, ZoomAct, DeleteComp, ClearGrid, Rotate, RotateACW } from './ToolbarTools' const { mxKeyHandler, mxEvent, mxClient } = new MxGraphFactory() export default function KeyboardShortcuts (graph) { var keyHandler = new mxKeyHandler(graph) keyHandler.getFunction = function (evt) { if (evt != null) { return (mxEvent.isControlDown(evt) || (mxClient.IS_MAC && evt.metaKey)) ? this.controlKeys[evt.keyCode] : this.normalKeys[evt.keyCode] } return null } // Rotate Alt + (right arrow) keyHandler.bindKey(39, function (evt) { if (graph.isEnabled) { if (evt.altKey) { Rotate() } } }) // Rotate Alt + (left Arrow) keyHandler.bindKey(37, function (evt) { if (graph.isEnabled) { if (evt.altKey) { RotateACW() } } }) // Delete - Del / Clear All - Shift + Del keyHandler.bindKey(46, function (evt) { if (graph.isEnabled()) { if (evt.shiftKey) { ClearGrid() } else { DeleteComp() } } }) // Undo - Ctrl + Z / Redo - Ctrl + Shift + Z keyHandler.bindControlKey(90, function (evt) { if (graph.isEnabled()) { if (evt.ctrlKey && !evt.shiftKey) { Undo() } else if (evt.ctrlKey && evt.shiftKey) { Redo() } } }) // Zoom In - Ctrl + + keyHandler.bindControlKey(187, function (evt) { evt.preventDefault() if (graph.isEnabled()) { ZoomIn() } }) keyHandler.bindControlKey(107, function (evt) { evt.preventDefault() if (graph.isEnabled()) { ZoomIn() } }) // Zoom Out - Ctrl + - keyHandler.bindControlKey(189, function (evt) { evt.preventDefault() if (graph.isEnabled()) { ZoomOut() } }) keyHandler.bindControlKey(109, function (evt) { evt.preventDefault() if (graph.isEnabled()) { ZoomOut() } }) // Zoom Out - Ctrl + Y keyHandler.bindControlKey(89, function (evt) { if (graph.isEnabled()) { ZoomAct() } }) } ================================================ FILE: eda-frontend/src/components/SchematicEditor/Helper/KiCadFileUtils.js ================================================ /* eslint-disable new-cap */ /* eslint-disable no-unused-vars */ import store from '../../../redux/store' import api from '../../../utils/Api' import { getSvgMetadata } from './SvgParser' import mxGraphFactory from 'mxgraph' const { mxPoint } = new mxGraphFactory() // var edgeHandler // orientation matrix [x1, y1, x2, y2] (KiCad defined) // used for defining rotation and x mirrored states // Actually 12 values but 8 required others are represented as combinations of these 8 const orientations = [ [1, 0, 0, -1], [0, 1, 1, 0], [-1, 0, 0, 1], [0, -1, -1, 0], [1, 0, 0, 1], [0, -1, 1, 0], [1, 0, 0, -1], [0, 1, -1, 0], [-1, 0, 0, -1], [0, 1, -1, 0], [1, 0, 0, 1], [0, -1, 1, 0] ] var graph var defaultParent // Scale for the graph const defScale = 5 // Graph config export default function KiCadFileUtils (grid) { graph = grid defaultParent = graph.getDefaultParent() } // Reads Kicad .sch files and returns the schematic as instructions const readKicadSchematic = (text) => { const textSplit = text.split('\n') let i = 0 const instructions = {} // Metadata and description of the schematic for (i = 0; i < textSplit.length; i++) { var brk = false if (i === 0) { var versionNum = parseInt(textSplit[i].split(' ')[4]) } var splt = textSplit[i].split(' ') switch (splt[0]) { case '$Descr': instructions.pageSize = splt[1] instructions.oreientation = parseInt(splt[1]) > parseInt(splt[2]) ? 'L' : 'P' break case 'Title': instructions.title = splt[1].substr(1, splt[1].length - 2) break case '$EndDescr': brk = true break default: break } if (brk) break } instructions.components = [] instructions.wires = [] instructions.connections = [] let component = {} let wire = {} let connection = {} for (;i < textSplit.length; i++) { let splt = textSplit[i].split(' ') switch (splt[0]) { case '$Comp': i += 1 component = {} splt = textSplit[i].split(' ') if (splt[1].indexOf(':') !== -1) { component.library = splt[1].split(':')[0].trim().toLowerCase() component.componentName = splt[1].split(':')[1].trim().toLowerCase() } else if (splt[1].indexOf('_') !== -1) { component.componentName = splt[1].split('_')[0].toLowerCase() component.library = splt[1].split('_')[1].toLowerCase() } else { component.componentName = splt[1].toLowerCase() } i += 2 // skips identifier line splt = textSplit[i].split(' ') component.x = parseInt(splt[1]) / defScale component.y = parseInt(splt[2]) / defScale i++ // skips F command lines do { i++ } while (textSplit[i].split(' ')[0] === 'F') i += 1 // skips redundanmt x y position line var compOrient = textSplit[i].split(' ') compOrient[0] = compOrient[0].split('\t')[1] compOrient = compOrient.filter(e => e !== '').map(e => parseInt(e)) var rotation = 0 var mirrorX = false var mirrorY = false // checks which orientation matches for (let index = 0; index < orientations.length; index++) { if (compOrient[0] === orientations[index][0] && compOrient[1] === orientations[index][1] && compOrient[2] === orientations[index][2] && compOrient[3] === orientations[index][3]) { rotation = (index % 4) * 90 if (index > 7) { mirrorY = true } else if (index > 3) { mirrorX = true } break } } component.rotation = rotation component.mirrorX = mirrorX component.mirrorY = mirrorY while (textSplit[i].split(' ')[0] !== '$EndComp') { i++ } instructions.components.push(component) break case 'Wire': if (splt[1] === 'Wire') { i += 1 wire = {} let posWire = textSplit[i].split(' ') posWire = posWire.filter(e => e.length !== 0) wire.startx = parseInt(posWire[0].split('\t')[1]) / defScale wire.starty = parseInt(posWire[1]) / defScale wire.endx = parseInt(posWire[2]) / defScale wire.endy = parseInt(posWire[3]) / defScale instructions.wires.push(wire) } break case 'Connection': connection = {} var posConn = splt posConn = posConn.filter(e => e.length !== 0) connection.x = parseInt(posConn[2]) / defScale connection.y = parseInt(posConn[3]) / defScale instructions.connections.push(connection) break default: break } } instructions.wireSegments = [...instructions.wires] instructions.wires = reduceWires([...instructions.wires]) return instructions } const loadComponents = async (components, wires, connections) => { // API config const token = store.getState().authReducer.token var config = { headers: { 'Content-Type': 'application/json' } } if (token) { config.headers.Authorization = `Token ${token}` } // Graph config var parent = graph.getDefaultParent() var model = graph.getModel() const insertComponent = async (comp, compData) => { model.beginUpdate() try { var compCell = await getSvgMetadata(graph, parent, null, null, comp.x, comp.y, compData, comp.rotation, true) graph.refresh() } catch (e) { console.log(e) } model.endUpdate() return compCell } const findApprComp = (compDataList, key) => { for (let i = 0; i < compDataList.length; i++) { // console.log(compDataList[i].name) if (compDataList[i].name.toLowerCase() === key.toLowerCase()) { return compDataList[i] } } return compDataList[0] } // Load all components for (let i = 0; i < components.length; i++) { // Get component data var url if (components[i].componentName && components[i].library) { url = `components/?component_library__library_name__icontains=${components[i].library}&name__icontains=${components[i].componentName}` } else if (!components[i].library) { url = `components/?name__icontains=${components[i].componentName}` } var compCell = await api.get(url, config) .then((res) => { if (res.data) { const compData = findApprComp(res.data, components[i].componentName) return insertComponent(components[i], compData) } else return null }) components[i].mxCell = compCell } joinComponents(components, wires, connections) } const joinComponents = (components, wires, connections) => { var model = graph.getModel() const drawConnection = (wire, source, target, connection) => { if (wire.startTerminal && wire.endTerminal) { model.beginUpdate() // console.log(wire.startTerminal, wire.endTerminal) var v = graph.insertEdge(defaultParent, null, null, wire.startTerminal, wire.endTerminal) if (wire.points) { v.geometry.points = wire.points.map(p => { return new mxPoint(p.x, p.y) }) } if (source) { v.geometry.sourcePoint = new mxPoint(connection.x, connection.y) } if (target) { v.geometry.targetPoint = new mxPoint(connection.x, connection.y) } model.endUpdate() } return v } const findWire = (w, x, y) => { for (const c in connections) { if (connections[c].x === x && connections[c].y === y) { for (let wi = 0; wi < wires.length && wi !== w; wi++) { if (wires[wi].startx === connections[c].x && wires[wi].starty === connections[c].y) { if (wires[wi].mxCell) { return [wires[wi].mxCell, connections[c]] } } if (wires[wi].endx === connections[c].x && wires[wi].endy === connections[c].y) { if (wires[wi].mxCell) { return [wires[wi].mxCell, connections[c]] } } if (wires[wi].points) { for (const p in wires[wi].points) { if (wires[wi].points[p].x === connections[c].x && connections[c].y === wires[wi].points[p].y) { if (wires[wi].mxCell) { return [wires[wi].mxCell, connections[c]] } else { return [null, null] } } } } } } } return [null, null] } const checkInBound = (x, y, compMxCell) => { let height = compMxCell.geometry.height let width = compMxCell.geometry.width let angle = compMxCell.getStyle().split('rotation=') if (angle[1]) { angle = parseInt(angle[1].split(';')[0]) if ((angle / 90) % 2 !== 0) { const t = height height = width width = t } } if (compMxCell.geometry.x + width >= x && compMxCell.geometry.x <= x && compMxCell.geometry.y + height >= y && compMxCell.geometry.y <= y) { return true } else { return false } } const findClosestTerminal = (x, y, compCell) => { let minDist = Number.MAX_SAFE_INTEGER let closestTerm = null const compx = compCell.geometry.x const compy = compCell.geometry.y for (let i = 0, child = compCell.getChildAt(i); i < compCell.getChildCount(); i++, child = compCell.getChildAt(i)) { if (child.connectable) { const distFrmPnt = Math.pow(x - (compx + child.geometry.x), 2) + Math.pow(y - (compy + child.geometry.y), 2) if (distFrmPnt < minDist) { closestTerm = child minDist = distFrmPnt } } } return closestTerm } const componentCells = [] components.forEach(comp => { if (comp.mxCell) { componentCells.push(comp.mxCell) } }) for (const c in componentCells) { for (const w in wires) { let terminal if (!wires[w].startTerminal) { if (checkInBound(wires[w].startx, wires[w].starty, componentCells[c])) { // console.log('S', wires[w].startx, wires[w].starty) terminal = findClosestTerminal(wires[w].startx, wires[w].starty, componentCells[c]) wires[w].startTerminal = terminal } } if (!wires[w].endTerminal) { if (checkInBound(wires[w].endx, wires[w].endy, componentCells[c])) { // console.log('E', wires[w].endx, wires[w].endy) terminal = findClosestTerminal(wires[w].endx, wires[w].endy, componentCells[c]) wires[w].endTerminal = terminal } } } } // console.log(wires) model.beginUpdate() wires.forEach(wire => { if (wire.startTerminal && wire.endTerminal) { var v = graph.insertEdge(defaultParent, null, null, wire.startTerminal, wire.endTerminal) if (wire.points) { v.geometry.points = wire.points.map(p => { return new mxPoint(p.x, p.y) }) } wire.mxCell = v } }) model.endUpdate() const unconnectedWirePresent = () => { for (const w in wires) { if (!wires[w].mxCell) { return true } } return false } // while (unconnectedWirePresent()) { for (const w in wires) { if (!wires[w].startTerminal) { [wires[w].startTerminal, wires[w].connection] = findWire(w, wires[w].startx, wires[w].starty) if (wires[w].endTerminal && wires[w].startTerminal && wires[w].connection) { wires[w].mxCell = drawConnection(wires[w], true, false, wires[w].connection) } } if (!wires[w].endTerminal) { [wires[w].endTerminal, wires[w].connection] = findWire(w, wires[w].endx, wires[w].endy) if (wires[w].endTerminal && wires[w].startTerminal && wires[w].connection) { wires[w].mxCell = drawConnection(wires[w], false, true, wires[w].connection) } } } // } } // Reduces the wires and connections const reduceWires = (wires) => { for (let i = 0; i < wires.length; i++) { if (wires[i] !== undefined) { for (let j = 0; j < wires.length; j++) { if (wires[j] !== undefined && i !== j) { if (wires[i].endx === wires[j].startx && wires[i].endy === wires[j].starty) { if (wires[i].points) { wires[i].points.push({ x: wires[i].endx, y: wires[i].endy }) } else { wires[i].points = [{ x: wires[i].endx, y: wires[i].endy }] } wires[i].endx = wires[j].endx wires[i].endy = wires[j].endy if (i !== j) { delete wires[j] j = 0 } } } } } } wires = wires.filter(e => e !== null || e !== undefined) return wires } export function importSCHFile (fileContents) { const rawInstr = readKicadSchematic(fileContents) // console.log(rawInstr) loadComponents([...rawInstr.components], [...rawInstr.wires], [...rawInstr.connections]) } ================================================ FILE: eda-frontend/src/components/SchematicEditor/Helper/SchematicEditor.css ================================================ /* Sidebar Components */ .compImage { width: 72px; height: 72px; margin-left: auto; padding: 2px; } .compImage:hover { background-color: #f4f6f8; border-radius: 5px; transform: scale(1.5); padding: 3px; box-shadow: 0px 0px 41px 17px rgba(207,218,225,0.68); } /* Schematic Editer Grid */ .grid-container { position: relative; overflow: hidden; margin: 10px auto 0px auto; -webkit-box-shadow: -8px -2px 24px 9px rgba(208, 218, 225, 1); -moz-box-shadow: -8px -2px 24px 9px rgba(208, 218, 225, 1); box-shadow: -8px -2px 24px 9px rgba(208, 218, 225, 1); background-image: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHBhdHRlcm4gaWQ9ImdyaWQiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgcGF0dGVyblVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHBhdGggZD0iTSAwIDEwIEwgNDAgMTAgTSAxMCAwIEwgMTAgNDAgTSAwIDIwIEwgNDAgMjAgTSAyMCAwIEwgMjAgNDAgTSAwIDMwIEwgNDAgMzAgTSAzMCAwIEwgMzAgNDAiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2UwZTBlMCIgb3BhY2l0eT0iMC4yIiBzdHJva2Utd2lkdGg9IjEiLz48cGF0aCBkPSJNIDQwIDAgTCAwIDAgMCA0MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZTBlMGUwIiBzdHJva2Utd2lkdGg9IjEiLz48L3BhdHRlcm4+PC9kZWZzPjxyZWN0IHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JpZCkiLz48L3N2Zz4="); cursor: default; border: 2px solid #d0dae1; border-radius: 5px; } .A1-L { width: 84.1cm; height: 59.4cm; } .A1-P { width: 59.4cm; height: 84.1cm; } .A2-L { width: 59.4cm; height: 42.0cm; } .A2-P { width: 42.0cm; height: 59.4cm; } .A3-L { width: 42.0cm; height: 29.7cm; } .A3-P { width: 29.7cm; height: 42.0cm; } .A4-L { width: 29.7cm; height: 21cm; } .A4-P { width: 21cm; height: 29.7cm; } .A5-L { width: 21.0cm; height: 14.8cm; } .A5-P { width: 14.8cm; height:21.0cm; } .outline-container { width:250px; height:120px; background-image: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHBhdHRlcm4gaWQ9ImdyaWQiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgcGF0dGVyblVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHBhdGggZD0iTSAwIDEwIEwgNDAgMTAgTSAxMCAwIEwgMTAgNDAgTSAwIDIwIEwgNDAgMjAgTSAyMCAwIEwgMjAgNDAgTSAwIDMwIEwgNDAgMzAgTSAzMCAwIEwgMzAgNDAiIGZpbGw9Im5vbmUiIHN0cm9rZT0iI2UwZTBlMCIgb3BhY2l0eT0iMC4yIiBzdHJva2Utd2lkdGg9IjEiLz48cGF0aCBkPSJNIDQwIDAgTCAwIDAgMCA0MCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjZTBlMGUwIiBzdHJva2Utd2lkdGg9IjEiLz48L3BhdHRlcm4+PC9kZWZzPjxyZWN0IHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JpZCkiLz48L3N2Zz4="); border: 1px solid #fff; } html { overflow: scroll; overflow-x: hidden; } ::-webkit-scrollbar { width: 0px; /* Remove scrollbar space */ background: transparent; /* Optional: just make scrollbar invisible */ } /* Optional: show position indicator in red */ ::-webkit-scrollbar-thumb { background: grey; } .modal-library-detail *::-webkit-scrollbar { width: auto; } ================================================ FILE: eda-frontend/src/components/SchematicEditor/Helper/SideBar.js ================================================ /* eslint-disable new-cap */ import MxGraphFactory from 'mxgraph' import { getSvgMetadata } from './SvgParser.js' // import NetlistInfoFunct from './NetlistInfo.js' const { mxClient, mxUtils, mxEvent, mxDragSource } = new MxGraphFactory() var graph export function SideBar (getGraph) { graph = getGraph } export function AddComponent (component, imgref) { var img = imgref var graphF = function (evt) { var x = mxEvent.getClientX(evt) var y = mxEvent.getClientY(evt) var elt = document.elementFromPoint(x, y) if (mxUtils.isAncestorNode(graph.container, elt)) { return graph } return null } var funct = function (graph, evt, target, x, y) { var parent = graph.getDefaultParent() var model = graph.getModel() var v1 = null model.beginUpdate() try { // NOTE: For non-HTML labels the image must be displayed via the style // rather than the label markup, so use 'image=' + image for the style. // as follows: v1 = graph.insertVertex(parent, null, label, // pt.x, pt.y, 120, 120, 'image=' + image); // ***IMP // GET THE SIZE OF SVG FOROM METADATA AND THEN DIVIDE BOTH WIDTH AND HEIGHT BE SAME RATIO // THEN USE THAT VALUE BELOW getSvgMetadata(graph, parent, evt, target, x, y, component) // **IMP VERTICS DRAWING IS MOVED TO xml_parser.js // WILL BE REFACTORED IN SOME TIME. } finally { model.endUpdate() } graph.setSelectionCell(v1) /* var preview = new mxPrintPreview(graph) preview.open() */ } // Creates a DOM node that acts as the drag source // Disables built-in DnD in IE (this is needed for cross-frame DnD, see below) if (mxClient.IS_IE) { mxEvent.addListener(img, 'dragstart', function (evt) { evt.returnValue = false }) } // Creates the element that is being for the actual preview. var dragElt = document.createElement('div') dragElt.style.border = 'dashed black 1px' dragElt.style.width = '120px' dragElt.style.height = '40px' // Drag source is configured to use dragElt for preview and as drag icon // if scalePreview (last) argument is true. Dx and dy are null to force // the use of the defaults. Note that dx and dy are only used for the // drag icon but not for the preview. var ds = mxUtils.makeDraggable( img, graphF, funct, dragElt, null, null, graph.autoscroll, true ) // Redirects feature to global switch. Note that this feature should only be used // if the the x and y arguments are used in funct to insert the cell. ds.isGuidesEnabled = function () { return graph.graphHandler.guidesEnabled } ds.createDragElement = mxDragSource.prototype.createDragElement } ================================================ FILE: eda-frontend/src/components/SchematicEditor/Helper/SvgParser.js ================================================ /* eslint-disable new-cap */ /* eslint-disable no-unused-vars */ /* eslint-disable camelcase */ import mxGraphFactory from 'mxgraph' import ComponentParameters from './ComponentParametersData' import { rotateCell } from './ToolbarTools' const { mxConstants } = new mxGraphFactory() let pinData, metadata, pinList, pinName, pinOrientation, pinLength, pinShape let currentPin, x_pos, y_pos let width, height, symbolName // we need to divide the svg width and height by the same number in order to maintain the aspect ratio. const default_scale = 5 function extractData (xml) { // extracting metadata from the svg file. pinData = [] metadata = xml.getElementsByTagName('metadata') const width = metadata[0].attributes[0].nodeValue const height = metadata[0].attributes[1].nodeValue const symbolName = metadata[0].attributes[4].nodeValue pinList = metadata[0].childNodes // console.log(metadata) // console.log(xmlDoc) // console.log(width,height) pinList.forEach(function (pin) { const pinNumber = pin.tagName.split('-').pop() const pinX = pin.getElementsByTagName('x')[0].innerHTML const pinY = pin.getElementsByTagName('y')[0].innerHTML const pinType = pin.getElementsByTagName('type')[0].innerHTML.trim() const pinName = pin.getElementsByTagName('name')[0].innerHTML.trim() const pinOrientation = pin.getElementsByTagName('orientation')[0].innerHTML.trim() const pinLength = pin.getElementsByTagName('length')[0].innerHTML.trim() const pinShape = pin.getElementsByTagName('pinShape')[0].innerHTML.trim() pinData.push({ pinNumber: pinNumber, pinX: pinX, pinY: pinY, type: pinType, pinName: pinName, pinOrientation: pinOrientation, pinLength: pinLength, pinShape: pinShape }) // console.log(pinNumber, pinX, pinY, pinType) }) return { width: width, height: height, symbolName: symbolName, pinData: pinData } } export function getSvgMetadata (graph, parent, evt, target, x, y, component, rotation = 0, centerCoords = false) { // calls extractData and other MXGRAPH functions // initialize information from the svg meta // plots pinnumbers and component labels. var path = '../' + component.svg_path return fetch(path) .then(function (response) { return response.text() }) .then(function (data) { const parser = new DOMParser() const xml = parser.parseFromString(data, 'text/xml') // console.log(xmlDoc); data = extractData(xml) // console.log(data) return data }).then(function (data) { const pins = [] width = data.width height = data.height pinData = data.pinData // console.log(pinData) // Disables moving of vertex labels graph.vertexLabelsMovable = false // Creates a style with an indicator var style = graph.getStylesheet().getDefaultVertexStyle() style[mxConstants.STYLE_SHAPE] = 'label' style[mxConstants.STYLE_VERTICAL_ALIGN] = 'bottom' // style[mxConstants.STYLE_INDICATOR_SHAPE] = 'ellipse' // style[mxConstants.STYLE_INDICATOR_WIDTH] = 34 // style[mxConstants.STYLE_INDICATOR_HEIGHT] = 34 style[mxConstants.STYLE_IMAGE_VERTICAL_ALIGN] = 'bottom' // indicator v-alignment style[mxConstants.STYLE_IMAGE_ALIGN] = 'bottom' style[mxConstants.STYLE_INDICATOR_COLOR] = 'green' style[mxConstants.STYLE_FONTCOLOR] = 'red' style[mxConstants.STYLE_FONTSIZE] = '10' delete style[mxConstants.STYLE_STROKECOLOR] // transparent // delete style[mxConstants.STYLE_FILLCOLOR] // transparent // make the component images larger by reducing the denominator and smaller by increasing the denominator width = width / default_scale height = height / default_scale if (centerCoords) { if (rotation !== 0 && (rotation / 90) % 2 !== 0) { x = x - height / 2 y = y - width / 2 } else { x = x - width / 2 y = y - height / 2 } } const v1 = graph.insertVertex( parent, null, component.name, x, y, width, height, 'shape=image;fontColor=blue;image=' + path + ';imageVerticalAlign=bottom;verticalAlign=bottom;imageAlign=bottom;align=bottom;spacingLeft=25;' ) v1.Component = true /* var newsource = path var prefix = newsource.split('/') var symboltype = prefix[3].split('') */ v1.CellType = 'Component' v1.symbol = component.symbol_prefix.toUpperCase() v1.CompObject = component component.name = component.name.toUpperCase() var props = {} if (v1.symbol === 'V') { // console.log('voltage') if (ComponentParameters[v1.symbol][component.name] === undefined) { props = Object.assign({}, ComponentParameters[v1.symbol].VSOURCE) } else { props = Object.assign({}, ComponentParameters[v1.symbol][component.name]) } } else if (v1.symbol === 'I') { // console.log('CURRENT') if (ComponentParameters[v1.symbol][component.name] === undefined) { props = Object.assign({}, ComponentParameters[v1.symbol].ISOURCE) } else { props = Object.assign({}, ComponentParameters[v1.symbol][component.name]) } } else { // console.log('other') props = Object.assign({}, ComponentParameters[v1.symbol]) } props.NAME = component.name v1.properties = props // console.log('component', component) // console.log('v1.properties', v1.properties) v1.setConnectable(false) let i = 0 for (i = 0; i < pinData.length; i++) { currentPin = pinData[i] if (currentPin.pinName === 'NC') continue // move this to another file x_pos = (parseInt(width) / 2 + parseInt(currentPin.pinX) / default_scale) y_pos = (parseInt(height) / 2 - parseInt(currentPin.pinY) / default_scale) - 1 // move this to another file // eslint-disable-next-line if (currentPin.pinOrientation === 'L') { pins[i] = graph.insertVertex(v1, null, currentPin.pinNumber, x_pos, y_pos, 0.5, 0.5, 'align=right;verticalAlign=bottom;rotation=0') } else if (currentPin.pinOrientation === 'R') { pins[i] = graph.insertVertex(v1, null, currentPin.pinNumber, x_pos, y_pos, 0.5, 0.5, 'align=left;verticalAlign=bottom;rotation=0') } else if (currentPin.pinOrientation === 'U') { pins[i] = graph.insertVertex(v1, null, currentPin.pinNumber, x_pos, y_pos, 0.5, 0.5, 'align=right;verticalAlign=bottom;rotation=0') } else { pins[i] = graph.insertVertex(v1, null, currentPin.pinNumber, x_pos, y_pos, 0.5, 0.5, 'align=right;verticalAlign=up;rotation=0') } pins[i].geometry.relative = false pins[i].Pin = true if (currentPin.type === 'I') { pins[i].pinType = 'Input' } else { pins[i].pinType = 'Output' } // pins[i].pinType = currentPin['type'] pins[i].ParentComponent = v1 pins[i].PinNumber = currentPin.pinNumber } if (rotation !== 0) { rotateCell(v1, rotation) } return v1 }) } ================================================ FILE: eda-frontend/src/components/SchematicEditor/Helper/ToolbarTools.js ================================================ /* eslint-disable no-unused-vars */ /* eslint-disable camelcase */ /* eslint-disable new-cap */ /* eslint-disable */ import mxGraphFactory from 'mxgraph' import store from '../../../redux/store' import * as actions from '../../../redux/actions/actions' import ComponentParameters from './ComponentParametersData' var graph var undoManager const { mxPrintPreview, mxConstants, mxRectangle, mxUtils, mxUndoManager, mxEvent, mxCodec, mxCell, mxMorphing, mxPoint } = new mxGraphFactory() export default function ToolbarTools(grid, unredo) { graph = grid undoManager = new mxUndoManager() var listener = function (sender, evt) { undoManager.undoableEditHappened(evt.getProperty('edit')) } graph.getModel().addListener(mxEvent.UNDO, listener) graph.getView().addListener(mxEvent.UNDO, listener) } // Display mxGraph root (For development only) export function dispGraph () { if (graph) { console.log('Graph Root', graph.getDefaultParent()) console.log('Current Cell', graph.getSelectionCell()) } } // SAVE export function Save() { XMLWireConnections() var enc = new mxCodec(mxUtils.createXmlDocument()) var node = enc.encode(graph.getModel()) var value = mxUtils.getXml(node) return value } // Function to clear undo/redo history export function clearHistory() { undoManager.clear() } // Func to check if wire change const checkWireChange = (changes) => { for (const change of changes) { if (change.__proto__.constructor.name === 'mxTerminalChange') { return true } } return false } // UNDO export function Undo() { if (undoManager.indexOfNextAdd === 0) { // Nothing to undo return } else if (checkWireChange(undoManager.history[undoManager.indexOfNextAdd - 1].changes)) { // Found Wire undoManager.undo() } else if (undoManager.history[undoManager.indexOfNextAdd - 1].changes.length > 1) { // Found Component let undos = 1 for (let i = undoManager.indexOfNextAdd - 1; i >= 0; i--, undos++) { if (undoManager.history[i].changes.length === 1 || checkWireChange(undoManager.history[i].changes) ) { break } } while (undos !== 0) { undoManager.undo() undos-- } } else if (undoManager.history[undoManager.indexOfNextAdd - 1].changes.length === 1) { // Found Rotate/Move let undos = 0 for (let i = undoManager.indexOfNextAdd - 1; i >= 0; i--, undos++) { if (undoManager.history[i].changes.length !== 1) { break } } while (undos !== 0) { undoManager.undo() undos-- } } else { // Default case !? undoManager.undo() } } // REDO export function Redo() { if (undoManager.indexOfNextAdd === undoManager.history.length) { // Nothing to redo return } else if (checkWireChange(undoManager.history[undoManager.indexOfNextAdd].changes)) { // Found Wire undoManager.redo() } else if ( undoManager.history[undoManager.indexOfNextAdd].changes.length === 1 && undoManager.history[undoManager.indexOfNextAdd].changes[0].__proto__.constructor.name === 'mxChildChange' ) { // Found Component let redos = 1 for (let i = undoManager.indexOfNextAdd + 1; i < undoManager.history.length; i++, redos++) { if (undoManager.history[i].changes.length === 12 || undoManager.history[i].changes.length === 1 || checkWireChange(undoManager.history[i].changes) ) { break } } while (redos !== 0) { undoManager.redo() redos-- } } else if (undoManager.history[undoManager.indexOfNextAdd].changes.length === 1) { //Found component Rotate/Move let redos = 1; for (let i = undoManager.indexOfNextAdd + 1; i < undoManager.history.length; i++, redos++) { if (undoManager.history[i].changes.length !== 1 || undoManager.history[i].changes[0].__proto__.constructor.name === 'mxChildChange' ) { break } } while (redos !== 0) { redos-- undoManager.redo() } } else { // Default Case !? undoManager.redo() } } // Zoom IN export function ZoomIn() { graph.zoomIn() } // ZOOM OUT export function ZoomOut() { graph.zoomOut() } // ZOOM ACTUAL export function ZoomAct() { graph.zoomActual() } // DELETE COMPONENT export function DeleteComp() { graph.removeCells() } // CLEAR WHOLE GRID export function ClearGrid() { graph.removeCells(graph.getChildVertices(graph.getDefaultParent())) } export function rotateCell (cell, rot_ang) { var view = graph.getView() var state = view.getState(cell, true) var vHandler = graph.createVertexHandler(state) console.log(cell) if (cell != null) { vHandler.rotateCell(cell, parseInt(rot_ang)) let childCount = cell.getChildCount() for (let i = 0; i < childCount; i++) { let child = cell.getChildAt(i) vHandler.rotateCell(child, parseInt(rot_ang) * (-1)) } } vHandler.destroy() } function rotate (rot_ang) { var cell = graph.getSelectionCell() console.log(graph.getDefaultParent()) if (cell !== undefined) { rotateCell(cell, rot_ang) } } // ROTATE COMPONENT CLOCKWISE export function Rotate() { rotate(90) } // ROTATE COMPONENT Anti-CLOCKWISE export function RotateACW() { rotate(-90) } // PRINT PREVIEW OF SCHEMATIC export function PrintPreview() { // Matches actual printer paper size and avoids blank pages var scale = 0.8 var headerSize = 50 var footerSize = 50 // Applies scale to page var pageFormat = { x: 0, y: 0, width: 1169, height: 827 } var pf = mxRectangle.fromRectangle(pageFormat || mxConstants.PAGE_FORMAT_A4_LANDSCAPE) pf.width = Math.round(pf.width * scale * graph.pageScale) pf.height = Math.round(pf.height * scale * graph.pageScale) // Finds top left corner of top left page var bounds = mxRectangle.fromRectangle(graph.getGraphBounds()) bounds.x -= graph.view.translate.x * graph.view.scale bounds.y -= graph.view.translate.y * graph.view.scale var x0 = Math.floor(bounds.x / pf.width) * pf.width var y0 = Math.floor(bounds.y / pf.height) * pf.height var preview = new mxPrintPreview(graph, scale, pf, 0, -x0, -y0) preview.marginTop = headerSize * scale * graph.pageScale preview.marginBottom = footerSize * scale * graph.pageScale preview.autoOrigin = false var oldRenderPage = preview.renderPage preview.renderPage = function (w, h, x, y, content, pageNumber) { var div = oldRenderPage.apply(this, arguments) var header = document.createElement('div') header.style.position = 'absolute' header.style.boxSizing = 'border-box' header.style.fontFamily = 'Arial,Helvetica' header.style.height = (this.marginTop - 10) + 'px' header.style.textAlign = 'center' header.style.verticalAlign = 'middle' header.style.marginTop = 'auto' header.style.fontSize = '12px' header.style.width = '100%' header.style.fontWeight = '100' // Vertical centering for text in header/footer header.style.lineHeight = (this.marginTop - 10) + 'px' var footer = header.cloneNode(true) var title = store.getState().saveSchematicReducer.title mxUtils.write(header, title + ' - eSim on Cloud') header.style.borderBottom = '1px solid blue' header.style.top = '0px' mxUtils.write(footer, 'Made with Schematic Editor - ' + pageNumber + ' - eSim on Cloud') footer.style.borderTop = '1px solid blue' footer.style.bottom = '0px' div.firstChild.appendChild(footer) div.firstChild.appendChild(header) return div } preview.open() } // ERC CHECK FOR SCHEMATIC export function ErcCheck() { var list = graph.getModel().cells // mapping the grid var vertexCount = 0 var errorCount = 0 var PinNC = 0 var stypes = 0 var ground = 0 var wirec = 0 for (var property in list) { var cell = list[property] if (cell.Component === true) { for (var child in cell.children) { var childVertex = cell.children[child] if (childVertex.Pin === true && childVertex.edges === null) { // Checking if connections exist from a given pin ++PinNC ++errorCount } else { for (var w in childVertex.edges) { if (childVertex.edges[w].source === null || childVertex.edges[w].target === null) { ++PinNC } else { if (childVertex.edges[w].source.edge === true || childVertex.edges[w].target.edge === true) { ++wirec } } } } } ++vertexCount } if (cell.symbol === 'PWR') { // Checking for ground console.log('Ground is present') console.log(cell) ++ground } } if (vertexCount === 0) { alert('No Component added') ++errorCount } else if (PinNC !== 0) { alert('Pins not connected') } else if (ground === 0) { alert('Ground not connected') } else { if (errorCount === 0) { alert('ERC Check completed') } } } // ERC Check for Netlist, It also returns a boolean value which is called in the Netlist Generator export function ErcCheckNets() { var list = graph.getModel().cells // mapping the grid var vertexCount = 0 var errorCount = 0 var PinNC = 0 var stypes = 0 var ground = 0 for (var property in list) { var cell = list[property] if (cell.Component === true) { for (var child in cell.children) { if (child.connectable) { var childVertex = cell.children[child] if (childVertex.Pin === true && childVertex.edges === null) { graph.getSelectionCell(childVertex) ++PinNC ++errorCount } } } ++vertexCount } if (cell.symbol === 'PWR') { ++ground } } if (vertexCount === 0) { alert('No Component added') ++errorCount return false } else if (PinNC !== 0) { alert('Pins not connected') return false } else if (ground === 0) { alert('Ground not connected') return false } else { if (errorCount === 0) { return true } } } // Function to generate Netlist export function GenerateNetList() { var r = 1 var v = 1 var c = 1 var n = 1 var spiceModels = '' var compDetails = { componentlist: [], nodelist: new Set() } var erc = ErcCheckNets() // Checking for ERC Failures var k = '' if (erc === false) { alert('ERC check failed') } else { var list = annotate(graph) // Fetching all the Cells on the GRID for (var property in list) { if (list[property].Component === true && list[property].symbol !== 'PWR') { var compobj = { name: '', magnitude: '' } // mxCell.prototype.ConnectedNode = null var component = list[property] if (component.symbol === 'R') { k = k + component.symbol + r.toString() component.value = component.symbol + r.toString() component.properties.PREFIX = component.value ++r } else if (component.symbol === 'V') { k = k + component.symbol + v.toString() component.value = component.symbol + v.toString() component.properties.PREFIX = component.value ++v } else { k = k + component.symbol + c.toString() component.value = component.symbol + c.toString() component.properties.PREFIX = component.value ++c } if (component.children !== null) { for (var child in component.children) { var pin = component.children[child] if (pin.vertex === true && pin.connectable) { if (pin.edges !== null || pin.edges.length !== 0) { for (var wire in pin.edges) { if (pin.edges[wire].source !== null && pin.edges[wire].target !== null) { // Wire to Pin Connection if (pin.edges[wire].source.edge === true) { // pin.edges[wire].node = pin.edges[wire].source.node pin.edges[wire].sourceVertex = pin.edges[wire].source.id pin.edges[wire].targetVertex = pin.edges[wire].target.id // Pin to Wire Connection } else if (pin.edges[wire].target.edge === true) { // pin.edges[wire].node = pin.edges[wire].target.node pin.edges[wire].sourceVertex = pin.edges[wire].source.id pin.edges[wire].targetVertex = pin.edges[wire].target.id pin.edges[wire].tarx = pin.edges[wire].geometry.targetPoint.x pin.edges[wire].tary = pin.edges[wire].geometry.targetPoint.y // Souce or Target is Ground } else if (pin.edges[wire].source.ParentComponent.symbol === 'PWR' || pin.edges[wire].target.ParentComponent.symbol === 'PWR') { // pin.edges[wire].node = 0 pin.edges[wire].value = 0 pin.edges[wire].sourceVertex = pin.edges[wire].source.id pin.edges[wire].targetVertex = pin.edges[wire].target.id // Pin to Pin Connection, Setting the Source to be the Node Value } else { // pin.edges[wire].node = pin.edges[wire].source.ParentComponent.properties.PREFIX + '.' + pin.edges[wire].source.value // pin.ConnectedNode = pin.edges[wire].source.ParentComponent.properties.PREFIX + '.' + pin.edges[wire].source.value pin.edges[wire].sourceVertex = pin.edges[wire].source.id pin.edges[wire].targetVertex = pin.edges[wire].target.id pin.edges[wire].value = pin.edges[wire].node } pin.edges[wire].value = pin.edges[wire].node } } k = k + ' ' + pin.edges[0].node } } } compobj.name = component.symbol compobj.magnitude = 10 var nodeNumber = 0 for(var child in component.children){ nodeNumber++ compobj['node' + nodeNumber.toString()] = component.children[child].edges[0].node compDetails.nodelist.add(component.children[child].edges[0].node) } compDetails.componentlist.push(component.properties.PREFIX) // console.log("compDetails", compDetails) } // console.log('component properties', component.properties) if (component.properties.MODEL && component.properties.MODEL.length > 0) { k = k + ' ' + component.properties.MODEL.split(' ')[1] } if (component.properties.PREFIX.charAt(0) === 'V' || component.properties.PREFIX.charAt(0) === 'v' || component.properties.PREFIX.charAt(0) === 'I' || component.properties.PREFIX.charAt(0) === 'i') { const comp = component.properties if (comp.NAME === 'SINE') { k = k + ` SIN(${comp.OFFSET} ${comp.AMPLITUDE} ${comp.FREQUENCY} ${comp.DELAY} ${comp.DAMPING_FACTOR} ${comp.PHASE} )` } else if (comp.NAME === 'EXP') { k = k + ` EXP(${comp.INITIAL_VALUE} ${comp.PULSED_VALUE} ${comp.FREQUENCY} ${comp.RISE_DELAY_TIME} ${comp.RISE_TIME_CONSTANT} ${comp.FALL_DELAY_TIME} ${comp.FALL_TIME_CONSTANT} )` } else if (comp.NAME === 'DC') { if (component.properties.VALUE !== undefined) { k = k + ' DC ' + component.properties.VALUE component.value = component.value + '\n' + component.properties.VALUE } } else if (comp.NAME === 'PULSE') { k = k + ` PULSE(${comp.INITIAL_VALUE} ${comp.PULSED_VALUE} ${comp.DELAY_TIME} ${comp.RISE_TIME} ${comp.FALL_TIME} ${comp.PULSE_WIDTH} ${comp.PERIOD} ${comp.PHASE} )` } else { if (component.properties.VALUE !== undefined) { k = k + ' ' + component.properties.VALUE component.value = component.value + '\n' + component.properties.VALUE } } } else if (component.properties.PREFIX.charAt(0) === 'C' || component.properties.PREFIX.charAt(0) === 'c') { k = k + ' ' + component.properties.VALUE if (component.properties.IC != 0) { k = k + ' IC=' + component.properties.IC } component.value = component.value + '\n' + component.properties.VALUE } else if (component.properties.PREFIX.charAt(0) === 'L' || component.properties.PREFIX.charAt(0) === 'l') { k = k + ' ' + component.properties.VALUE if (component.properties.IC != 0) { k = k + ' IC=' + component.properties.IC } if (component.properties.DTEMP != 27) { k = k + ' dtemp=' + component.properties.DTEMP } component.value = component.value + '\n' + component.properties.VALUE } else if (component.properties.PREFIX.charAt(0) === 'M' || component.properties.PREFIX.charAt(0) === 'm') { // k = k + ' ' + component.properties.VALUE if (component.properties.MULTIPLICITY_PARAMETER != 1) { k = k + ' m=' + component.properties.MULTIPLICITY_PARAMETER } if (component.properties.DTEMP != 27) { k = k + ' dtemp=' + component.properties.DTEMP } // component.value = component.value + '\n' + component.properties.VALUE } else if (component.properties.PREFIX.charAt(0) === 'Q' || component.properties.PREFIX.charAt(0) === 'q') { // k = k + ' ' + component.properties.VALUE if (component.properties.MULTIPLICITY_PARAMETER != 1) { k = k + ' m=' + component.properties.MULTIPLICITY_PARAMETER } if (component.properties.DTEMP != 27) { k = k + ' dtemp=' + component.properties.DTEMP } // component.value = component.value + '\n' + component.properties.VALUE } else if (component.properties.PREFIX.charAt(0) === 'R' || component.properties.PREFIX.charAt(0) === 'r') { k = k + ' ' + component.properties.VALUE if (component.properties.SHEET_RESISTANCE != 0) { k = k + ' RSH=' + component.properties.SHEET_RESISTANCE } if (component.properties.FIRST_ORDER_TEMPERATURE_COEFF != 0) { k = k + ' tc1=' + component.properties.FIRST_ORDER_TEMPERATURE_COEFF } if (component.properties.SECOND_ORDER_TEMPERATURE_COEFF != 0) { k = k + ' tc2=' + component.properties.SECOND_ORDER_TEMPERATURE_COEFF } if (component.properties.PARAMETER_MEASUREMENT_TEMPERATURE != 27) { k = k + ' TNOM=' + component.properties.PARAMETER_MEASUREMENT_TEMPERATURE } component.value = component.value + '\n' + component.properties.VALUE } else { if (component.properties.VALUE !== undefined) { k = k + ' ' + component.properties.VALUE component.value = component.value + '\n' + component.properties.VALUE } } if (component.properties.EXTRA_EXPRESSION && component.properties.EXTRA_EXPRESSION.length > 0) { k = k + ' ' + component.properties.EXTRA_EXPRESSION component.value = component.value + ' ' + component.properties.EXTRA_EXPRESSION } if (component.properties.MODEL && component.properties.MODEL.length > 0) { spiceModels += component.properties.MODEL + '\n' } k = k + ' \n' } } } store.dispatch({ type: actions.SET_MODEL, payload: { model: spiceModels } }) store.dispatch({ type: actions.SET_NETLIST, payload: { netlist: k } }) // Refresh the GRID to view the Node Values graph.getModel().beginUpdate() try { graph.view.refresh() } finally { // Arguments are number of steps, ease and delay var morph = new mxMorphing(graph, 20, 1.2, 20) morph.addListener(mxEvent.DONE, function () { graph.getModel().endUpdate() }) morph.startAnimation() } var netobj = { models: spiceModels, main: k } return netobj } // Function to Annotate, TODO! It needs some polishing class Stack { constructor(){ this.data = []; this.top = 0; } push(element) { this.data[this.top] = element; this.top = this.top + 1; } length() { return this.top; } peek() { return this.data[this.top-1]; } isEmpty() { return this.top === 0; } pop() { if( this.isEmpty() === false ) { this.top = this.top -1; return this.data.pop(); // removes the last element } } print() { var top = this.top - 1; // because top points to index where new element to be inserted // console.log('printing working') // console.log(this.data) while(top >= 0) { // print upto 0th index // console.log(this.data[top]); top--; } } reverse() { this._reverse(this.top - 1 ); } _reverse(index) { if(index != 0) { this._reverse(index-1); } console.log(this.data[index]); } } function traverseWire(edge, vis) { var ans = [] vis[edge.id] = 1 if (edge.target.vertex == true || edge.source.vertex == true) { if (edge.target.vertex == true) { ans.push(edge.target) } if (edge.source.vertex == true) { ans.push(edge.source) } return ans; } else { vis[parseInt(edge.id)] = true if (edge.edges && edge.edges.length > 0) { edge.edges.forEach((elem) => { ans = ans.concat(traverseWire(elem, vis)) }) } else { if (edge.source.edge == true && !vis[edge.source.id]) { ans = ans.concat(traverseWire(edge.source, vis)) } if (edge.target.edge == true && !vis[edge.target.id]) { ans = ans.concat(traverseWire(edge.target, vis)) } } return ans } } function annotate(graph) { var r = 1 var v = 1 var c = 1 var l = 1 var d = 1 var q = 1 var w = 1 var list = graph.getModel().cells var n = 1 var erc = true var k = '' if (erc === false) { alert('ERC check failed') } else { // DFS _________ var NODE_SETS = [] // console.log('dfs init') var ptr = 1 var mp = Array(5000).fill(0) NODE_SETS[0] = new Set() // Defining ground for(var property in list){ if(list[property].Component === true && list[property].symbol !== 'PWR'){ mxCell.prototype.ConnectedNode = null var component = list[property] if (component.children !== null) { // pins for (var child in component.children) { var pin = component.children[child]; if (pin != null && pin.vertex === true && pin.connectable) { if (pin.edges !== null || pin.edges.length !== 0) { if(mp[(pin.id)] === 1){ continue } var stk = new Stack() var cur_node var cur_set = [] var contains_gnd = 0 stk.push(pin) // console.log('exploring connected nodes of', pin) while(!stk.isEmpty()){ cur_node = stk.peek() stk.pop(); mp[cur_node.id] = 1 cur_set.push(cur_node) stk.print() for (var wire in cur_node.edges) { // console.log(cur_node.edges[wire]) if (cur_node.edges[wire].source !== null && cur_node.edges[wire].target !== null) { if (cur_node.edges[wire].target.ParentComponent !== null) { if(cur_node.edges[wire].target.ParentComponent.symbol === 'PWR'){ contains_gnd = 1 } } if(cur_node.edges[wire].target.vertex == true){ if (!mp[(cur_node.edges[wire].target.id)] && (cur_node.edges[wire].target.id !== cur_node.id)){ stk.push(cur_node.edges[wire].target) } } if(cur_node.edges[wire].source.vertex == true){ if(!mp[(cur_node.edges[wire].source.id)] && (cur_node.edges[wire].source.id !== cur_node.id)){ stk.push(cur_node.edges[wire].source) } } // Checking for wires which are connected to another wire(s), Comment out // the if conditions below if edge connections malfunction var conn_vertices = []; if (cur_node.edges[wire].edges && cur_node.edges[wire].edges.length > 0) { for (const ed in cur_node.edges[wire].edges) { if (!mp[cur_node.edges[wire].edges[ed].id]) { conn_vertices = conn_vertices.concat(...traverseWire(cur_node.edges[wire].edges[ed], mp)) } } } if (cur_node.edges[wire].source.edge == true) { if (!mp[(cur_node.edges[wire].source.id)] && (cur_node.edges[wire].source.id !== cur_node.id)) { conn_vertices = conn_vertices.concat(...traverseWire(cur_node.edges[wire].source, mp)) } } if (cur_node.edges[wire].target.edge == true) { if (!mp[(cur_node.edges[wire].target.id)] && (cur_node.edges[wire].target.id !== cur_node.id)) { conn_vertices = conn_vertices.concat(...traverseWire(cur_node.edges[wire].target, mp)) } } // console.log("CONN EDGES", conn_vertices) conn_vertices.forEach((elem) => { stk.push(elem) }) } } if(contains_gnd === 1){ for(var x in cur_set) NODE_SETS[0].add(cur_set[x]) } // console.log("Set of nodes at same pot:", cur_set) } } if (!contains_gnd){ NODE_SETS.push(new Set(cur_set)) } } } } } } // console.log('dfs end') // console.log("Results after considering edges: ", NODE_SETS) for (var property in list) { if (list[property].Component === true && list[property].symbol !== 'PWR') { mxCell.prototype.ConnectedNode = null var component = list[property] if (component.symbol === 'R') { component.value = component.symbol + r.toString() component.properties.PREFIX = component.value ++r } else if (component.symbol === 'V') { component.value = component.symbol + v.toString() component.properties.PREFIX = component.value ++v } else if (component.symbol === 'C') { component.value = component.symbol + v.toString() component.properties.PREFIX = component.value ++c } else if (component.symbol === 'D') { component.value = component.symbol + v.toString() component.properties.PREFIX = component.value ++d } else if (component.symbol === 'Q') { component.value = component.symbol + v.toString() component.properties.PREFIX = component.value ++q } else { component.value = component.symbol + c.toString() component.properties.PREFIX = component.value ++w } if (component.children !== null) { for (var child in component.children) { var pin = component.children[child] if (pin.vertex === true && pin.connectable) { if (pin.edges !== null || pin.edges.length !== 0) { // Search for pin in NODE_SET: // assign: pin.edges[wire].node= "NODE" + $indexOfSet NODE_SETS.forEach((e, i) => { var done = 0 e.forEach((vertex) => { if (vertex.id == pin.id && done === 0) { if (i === 0) { pin.edges[wire].node = 0 pin.ConnectedNode = 0 pin.edges[wire].value = pin.edges[wire].node } else { pin.edges[wire].node = "COM." + i.toString() pin.ConnectedNode = 'COM.' + i.toString() pin.edges[wire].value = pin.edges[wire].node } done = 1 // console.log("VALUE SET TO ", pin.edges[wire].ConnectedNode) } }) }) k = k + ' ' + pin.edges[0].node } } } } } } } return list } // Returns all the Nodes present in the Schematic, Used for Simulation export function GenerateNodeList() { var list = annotate(graph) // Using a Set to avoid duplicate Nodes var nodelist = new Set() for (var property in list) { if (list[property].Component === true && list[property].symbol !== 'PWR') { // Fetching all the nodes var component = list[property] if (component.children !== null) { for(var child in component.children){ nodelist.add(component.children[child].edges[0].node) } } } } return nodelist } // Sends a list of components present in the netlist export function GenerateCompList() { var list = annotate(graph) var a = [] var complist = [] // This will contain the list of Component Prefix for (var property in list) { if (list[property].Component === true && list[property].symbol !== 'PWR') { var compobj = { name: '', magnitude: '' } var component = list[property] compobj.name = component.symbol var nodeNumber = 0 for(var child in component.children){ nodeNumber++ compobj['node' + nodeNumber.toString()] = component.children[child].edges[0].node } complist.push(component.properties.PREFIX) } } return complist } // Sends a detailed list of components present in the netlist export function GenerateDetailedCompList() { var list = annotate(graph) var a = [] var netlist = [] // This will contain the list of Component Prefix var k = 'Unitled netlist \n' for (var property in list) { if (list[property].Component === true && list[property].symbol !== 'PWR') { var component = list[property] netlist.push({name:component.properties.PREFIX,value:component.properties.VALUE,unit:component.properties.VALUE_UNIT}) } } return netlist } // Function to Render Circuit XML export function renderXML() { graph.view.refresh() var xml = 'null' var xmlDoc = mxUtils.parseXml(xml) parseXmlToGraph(xmlDoc, graph) } // Function to Parse XML and Redraw on Grid export function parseXmlToGraph(xmlDoc, graph) { console.log("start loading") const cells = xmlDoc.documentElement.children[0].children const parent = graph.getDefaultParent() var v1 var yPos var xPos var props var style = graph.getStylesheet().getDefaultVertexStyle() style[mxConstants.STYLE_SHAPE] = 'label' style[mxConstants.STYLE_VERTICAL_ALIGN] = 'bottom' style[mxConstants.STYLE_IMAGE_VERTICAL_ALIGN] = 'bottom' // indicator v-alignment style[mxConstants.STYLE_IMAGE_ALIGN] = 'bottom' style[mxConstants.STYLE_INDICATOR_COLOR] = 'green' style[mxConstants.STYLE_FONTCOLOR] = 'red' style[mxConstants.STYLE_FONTSIZE] = '10' delete style[mxConstants.STYLE_STROKECOLOR] // transparent for (let i = 0; i < cells.length; i++) { const cellAttrs = cells[i].attributes if (cellAttrs.Component.value === '1') { // is component const vertexName = cellAttrs.value.value const style = cellAttrs.style.value const vertexId = Number(cellAttrs.id.value) const geom = cells[i].children[0].attributes const xPos = Number(geom.x.value) if (geom.y === undefined) { yPos = 0 } else { yPos = Number(geom.y.value) } const height = Number(geom.height.value) const width = Number(geom.width.value) v1 = graph.insertVertex(parent, vertexId, vertexName, xPos, yPos, width, height, style) v1.symbol = cellAttrs.symbol.value if (v1.symbol === 'V') { try { props = Object.assign({}, ComponentParameters[v1.symbol][cells[i].children[2].attributes.NAME.value]) } catch (e) { props = Object.assign({}, ComponentParameters[v1.symbol][cells[i].children[1].attributes.NAME.value]) } } else { props = Object.assign({}, ComponentParameters[v1.symbol]) } try { props.NAME = cells[i].children[2].attributes.NAME.value } catch (e) { props.NAME = cells[i].children[1].attributes.NAME.value } v1.properties = props v1.Component = true v1.CellType = 'Component' if (v1.properties.name === 'VSOURCE') { } for (var check in props) { try { v1.properties[check] = cells[i].children[2].attributes[check].value } catch (e) { try { v1.properties[check] = cells[i].children[1].attributes[check].value } catch (e) { } } } } else if (cellAttrs.Pin.value === '1') { const vertexName = cellAttrs.value.value const style = cellAttrs.style.value const vertexId = Number(cellAttrs.id.value) const geom = cells[i].children[0].attributes try { xPos = Number(geom.x.value) } catch (e) { xPos = 0 } if (geom.y === undefined) { yPos = 0 } else { yPos = Number(geom.y.value) } const height = Number(geom.height.value) const width = Number(geom.width.value) var vp = graph.insertVertex(v1, vertexId, vertexName, xPos, yPos, 0.5, 0.5, style) vp.ParentComponent = v1 vp.Pin = 1 } else if (cellAttrs.edge) { // is edge const edgeId = Number(cellAttrs.id.value) const source = Number(cellAttrs.sourceVertex.value) const target = Number(cellAttrs.targetVertex.value) var plist = cells[i].children[1].children try { if (source && target) { var e = graph.insertEdge(parent, edgeId, null, graph.getModel().getCell(source), graph.getModel().getCell(target) ) } else { var edge = graph.createEdge(parent, edgeId, null) if (!source && !target) var e = graph.addEdge(edge, parent) if (!target) var e = graph.addEdge(edge, parent, graph.getModel().getCell(source)) if(!source) var e = graph.addEdge(edge, parent, graph.getModel().getCell(target)) e.geometry.targetPoint = new mxPoint(Number(cellAttrs.tarx.value), Number(cellAttrs.tary.value)) } console.log("VERTEX", e) e.geometry.points = [] for (var a in cells[i].children[1].children) { try { e.geometry.points.push(new mxPoint(Number(plist[a].attributes.x.value), Number(plist[a].attributes.y.value))) } catch (e) { } graph.getModel().beginUpdate() try { graph.view.refresh() } finally { var morph = new mxMorphing(graph, 20, 1.2, 20) morph.addListener(mxEvent.DONE, function () { graph.getModel().endUpdate() }) morph.startAnimation() } } if (graph.getModel().getCell(target).edge === true) { e.geometry.setTerminalPoint(new mxPoint(Number(cellAttrs.tarx.value), Number(cellAttrs.tary.value)), false) graph.getModel().beginUpdate() try { graph.view.refresh() } finally { // Arguments are number of steps, ease and delay morph = new mxMorphing(graph, 20, 1.2, 20) morph.addListener(mxEvent.DONE, function () { graph.getModel().endUpdate() }) morph.startAnimation() } } } catch (e) { } } } console.log("finish loading") } export function renderGalleryXML(xml) { graph.removeCells(graph.getChildVertices(graph.getDefaultParent())) graph.view.refresh() var xmlDoc = mxUtils.parseXml(xml) parseXmlToGraph(xmlDoc, graph) } // Certain Variables need to be Defined before Saving the Circuit, XML Wire Connections does that function XMLWireConnections() { var erc = true if (erc === false) { alert('ERC check failed') } else { var list = graph.getModel().cells for (var property in list) { if (list[property].Component === true && list[property].symbol !== 'PWR') { mxCell.prototype.ConnectedNode = null var component = list[property] if (component.children !== null) { for (var child in component.children) { var pin = component.children[child] if (pin.vertex === true) { try { if (pin.edges !== null || pin.edges.length !== 0) { for (var wire in pin.edges) { if (pin.edges[wire].source == null || pin.edges[wire].target == null) { console.log("Here") if (pin.edges[wire].geometry.targetPoint) { pin.edges[wire].tarx = pin.edges[wire].geometry.targetPoint.x pin.edges[wire].tary = pin.edges[wire].geometry.targetPoint.y pin.edges[wire].PointsArray = pin.edges[wire].geometry.points } if (pin.edges[wire].source.edge === true) { pin.edges[wire].sourceVertex = pin.edges[wire].source.id // pin.edges[wire].targetVertex = pin.edges[wire].target.id } else { pin.edges[wire].node = pin.edges[wire].source.ParentComponent.properties.PREFIX + '.' + pin.edges[wire].source.value pin.ConnectedNode = pin.edges[wire].source.ParentComponent.properties.PREFIX + '.' + pin.edges[wire].source.value pin.edges[wire].sourceVertex = pin.edges[wire].source.id // pin.edges[wire].targetVertex = pin.edges[wire].target.id } } if (pin.edges[wire].source !== null && pin.edges[wire].target !== null) { if (pin.edges[wire].source.edge === true) { pin.edges[wire].sourceVertex = pin.edges[wire].source.id pin.edges[wire].targetVertex = pin.edges[wire].target.id pin.edges[wire].PointsArray = pin.edges[wire].geometry.points } else if (pin.edges[wire].target.edge === true) { pin.edges[wire].sourceVertex = pin.edges[wire].source.id pin.edges[wire].targetVertex = pin.edges[wire].target.id pin.edges[wire].tarx = pin.edges[wire].geometry.targetPoint.x pin.edges[wire].tary = pin.edges[wire].geometry.targetPoint.y pin.edges[wire].PointsArray = pin.edges[wire].geometry.points } else if (pin.edges[wire].source.ParentComponent.symbol === 'PWR' || pin.edges[wire].target.ParentComponent.symbol === 'PWR') { pin.edges[wire].sourceVertex = pin.edges[wire].source.id pin.edges[wire].targetVertex = pin.edges[wire].target.id pin.edges[wire].PointsArray = pin.edges[wire].geometry.points } else { pin.edges[wire].node = pin.edges[wire].source.ParentComponent.properties.PREFIX + '.' + pin.edges[wire].source.value pin.ConnectedNode = pin.edges[wire].source.ParentComponent.properties.PREFIX + '.' + pin.edges[wire].source.value pin.edges[wire].sourceVertex = pin.edges[wire].source.id pin.edges[wire].targetVertex = pin.edges[wire].target.id pin.edges[wire].PointsArray = pin.edges[wire].geometry.points } } } } } catch (e) { console.log('error') } } } } } } } } ================================================ FILE: eda-frontend/src/components/SchematicEditor/PropertiesSidebar.js ================================================ import React from 'react' import PropTypes from 'prop-types' import { Hidden, List, ListItem, ListItemText, TextField, MenuItem, TextareaAutosize, IconButton, Collapse, Dialog, DialogTitle, DialogContent, Button } from '@material-ui/core' import CreateNewFolderOutlinedIcon from '@material-ui/icons/CreateNewFolderOutlined' import Popover from '@material-ui/core/Popover' import Typography from '@material-ui/core/Typography' import DeleteIcon from '@material-ui/icons/Delete' import { makeStyles } from '@material-ui/core/styles' import { useSelector, useDispatch } from 'react-redux' import { setSchDescription, saveSchematic } from '../../redux/actions/index' import api from '../../utils/Api' import VersionComponent from './VersionComponent' import Canvg from 'canvg' import './Helper/SchematicEditor.css' const useStyles = makeStyles((theme) => ({ typography: { padding: theme.spacing(2) }, toolbar: { minHeight: '90px' }, pages: { margin: theme.spacing(0, 0.7) } })) const pageSize = [ { value: 'A1', label: 'A1' }, { value: 'A2', label: 'A2' }, { value: 'A3', label: 'A3' }, { value: 'A4', label: 'A4' }, { value: 'A5', label: 'A5' } ] const pageLayout = [ { value: 'P', label: 'Portrait' }, { value: 'L', label: 'Landscape' } ] // Display grid size and orientation function GridProperties ({ gridRef }) { const classes = useStyles() const [gridSize, setGridSize] = React.useState('A4') const [gridLayout, setGridLayout] = React.useState('L') const handleSizeChange = (event) => { setGridSize(event.target.value) gridRef.current.className = 'grid-container ' + event.target.value + '-' + gridLayout } const handleLayoutChange = (event) => { setGridLayout(event.target.value) gridRef.current.className = 'grid-container ' + gridSize + '-' + event.target.value } return ( <> {pageSize.map((option) => ( {option.label} ))} {pageLayout.map((option) => ( {option.label} ))} ) } GridProperties.propTypes = { gridRef: PropTypes.object.isRequired } export default function PropertiesSidebar ({ gridRef, outlineRef }) { const classes = useStyles() const schSave = useSelector(state => state.saveSchematicReducer) const [description, setDescription] = React.useState(schSave.description) const [versions, setVersions] = React.useState(null) const [branchOpen, setBranchOpen] = React.useState(null) const [branchName, setBranchName] = React.useState('') const [dialogOpen, setDialogOpen] = React.useState(false) const [projectBranch, setProjectBranch] = React.useState(null) const [projectVersion, setProjectVersion] = React.useState(null) const [anchorEl, setAnchorEl] = React.useState(null) const [popoverOpen, setPopoverOpen] = React.useState(null) React.useEffect(() => { const config = { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } } const token = localStorage.getItem('esim_token') // If token available add to headers if (token) { config.headers.Authorization = `Token ${token}` } if (window.location.href.split('?id=')[1] && !window.location.href.split('?id=')[1].includes('gallery')) { api .get( 'save/versions/' + window.location.href.split('?id=')[1].substring(0, 36), config ) .then((resp) => { if (resp.data.length > 0) { setProjectBranch(resp.data[0].project_branch) setProjectVersion(resp.data[0].project_version) } const versionsAccordingFreq = {} resp.data.forEach((value) => { const d = new Date(value.save_time) value.full_time = d value.date = d.getDate() + '/' + parseInt(d.getMonth() + 1) + '/' + d.getFullYear() value.time = d.getHours() + ':' + d.getMinutes() if (d.getMinutes() < 10) { value.time = d.getHours() + ':0' + d.getMinutes() } versionsAccordingFreq[value.branch] ? versionsAccordingFreq[value.branch].push(value) : versionsAccordingFreq[value.branch] = [value] }) const versionsArray = Object.entries(versionsAccordingFreq) for (let i = 0; i < versionsArray.length; i++) { versionsArray[i][1].sort((a, b) => { return b.full_time - a.full_time }) } versionsArray.sort((a, b) => { return b[1][b[1].length - 1].full_time - a[1][a[1].length - 1].full_time }) setVersions(versionsArray) const temp = [] for (let j = 0; j < versionsArray.length; j++) { if (decodeURI(window.location.href.split('branch=')[1]) === versionsArray[j][0]) { temp.push(true) } else { temp.push(false) } } const popoverTemp = new Array(versionsArray.length) popoverTemp.fill(false) setPopoverOpen(popoverTemp) setBranchOpen(temp) }) .catch((err) => { console.log(err) }) } }, []) const dispatch = useDispatch() const getInputValues = (evt) => { setDescription(`${evt.target.value}`) dispatch(setSchDescription(evt.target.value)) } async function exportImage (type) { const svg = document.querySelector('#divGrid > svg').cloneNode(true) svg.removeAttribute('style') svg.setAttribute('width', gridRef.current.scrollWidth) svg.setAttribute('height', gridRef.current.scrollHeight) const canvas = document.createElement('canvas') canvas.width = gridRef.current.scrollWidth canvas.height = gridRef.current.scrollHeight canvas.style.width = canvas.width + 'px' canvas.style.height = canvas.height + 'px' const images = svg.getElementsByTagName('image') for (const image of images) { const data = await fetch(image.getAttribute('xlink:href')).then((v) => { return v.text() }) image.removeAttribute('xlink:href') image.setAttribute( 'href', 'data:image/svg+xml;base64,' + window.btoa(data) ) } const ctx = canvas.getContext('2d') ctx.mozImageSmoothingEnabled = true ctx.webkitImageSmoothingEnabled = true ctx.msImageSmoothingEnabled = true ctx.imageSmoothingEnabled = true const pixelRatio = window.devicePixelRatio || 1 ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0) return new Promise((resolve) => { if (type === 'SVG') { const svgdata = new XMLSerializer().serializeToString(svg) resolve('' + svgdata) return } const v = Canvg.fromString(ctx, svg.outerHTML) v.render().then(() => { let image = '' if (type === 'JPG') { const imgdata = ctx.getImageData(0, 0, canvas.width, canvas.height) for (let i = 0; i < imgdata.data.length; i += 4) { if (imgdata.data[i + 3] === 0) { imgdata.data[i] = 255 imgdata.data[i + 1] = 255 imgdata.data[i + 2] = 255 imgdata.data[i + 3] = 255 } } ctx.putImageData(imgdata, 0, 0) image = canvas.toDataURL('image/jpeg', 1.0) } else { if (type === 'PNG') { image = canvas.toDataURL('image/png') } } resolve(image) }) }) } const handleBranch = (branchName) => { setDialogOpen(false) exportImage('PNG').then((res) => { console.log(schSave.project_id) dispatch(saveSchematic(schSave.title, schSave.description, schSave.xmlData, res, true, branchName, setVersions, false, versions, branchOpen, setBranchOpen)) }) setBranchName('') } const handleClick = (index) => { console.log(index) let left = branchOpen.slice(0, index) const right = branchOpen.slice(index + 1) const temp = !branchOpen[index] left.push(temp) left = left.concat(right) console.log(left) setBranchOpen(left) } const handleDelete = (branchName, index) => { const temp = popoverOpen temp.fill(false) setPopoverOpen(temp) const config = { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } } const token = localStorage.getItem('esim_token') if (token) { config.headers.Authorization = `Token ${token}` } const saveId = window.location.href.split('id=')[1].substr(0, 36) api.delete(`/save/versions/${saveId}/${branchName}`, config).then(resp => { const temp = versions.filter(version => version[0] !== branchName) const tempBranch = branchOpen tempBranch.splice(index, 1) setBranchOpen(tempBranch) setVersions(temp) const tempPopover = popoverOpen.filter(popoverIndex => popoverIndex !== true) setPopoverOpen(tempPopover) }).catch(err => { console.log(err) }) } const handleClickPopover = (e, index) => { setAnchorEl(e.currentTarget) let left = popoverOpen.slice(0, index) const right = popoverOpen.slice(index + 1) const temp = !popoverOpen[index] left.push(temp) left = left.concat(right) setPopoverOpen(left) } const handleClosePopover = (index) => { setAnchorEl(null) let left = popoverOpen.slice(0, index) const right = popoverOpen.slice(index + 1) const temp = !popoverOpen[index] left.push(temp) left = left.concat(right) setPopoverOpen(left) } const checkActiveOrProject = (branch) => { if (decodeURI(window.location.href.split('branch=')[1]) === branch) return false if (branch === projectBranch) return false return true } const handleBranchName = (e) => { setBranchName(e.target.value) } const handleDialogOpen = () => { setDialogOpen(true) } const handleDialogClose = () => { setBranchName('') setDialogOpen(false) } return ( <>

Properties

{/* Display component position box */}
{/* Input form field for schematic description */}

History

{versions && } Create new Variation
{(versions && branchOpen && popoverOpen) ? <> {versions.map((branch, index) => { return ( <>
handleClick(index)}> {checkActiveOrProject(branch[0]) && <> handleClosePopover(index)} anchorOrigin={{ vertical: 'bottom', horizontal: 'center' }} transformOrigin={{ vertical: 'top', horizontal: 'center' }} > Are you sure you want to delete variation {branch[0]}? }
{ branch[1].map((version) => ) } ) } ) } : No History Available }
) } PropertiesSidebar.propTypes = { gridRef: PropTypes.object.isRequired, outlineRef: PropTypes.object.isRequired } ================================================ FILE: eda-frontend/src/components/SchematicEditor/RightSidebar.js ================================================ import React from 'react' import PropTypes from 'prop-types' import { Drawer, Hidden, IconButton } from '@material-ui/core' import HighlightOffIcon from '@material-ui/icons/HighlightOff' import { makeStyles } from '@material-ui/core/styles' const drawerWidth = 250 const useStyles = makeStyles((theme) => ({ drawer: { [theme.breakpoints.up('lg')]: { width: drawerWidth, flexShrink: 0 } }, drawerPaper: { width: drawerWidth } })) // Editor right side pane to display grid and component properties. export default function RightSidebar ({ window, mobileOpen, mobileClose, children }) { const classes = useStyles() const container = window !== undefined ? () => window().document.body : undefined return ( <> ) } RightSidebar.propTypes = { window: PropTypes.object, mobileOpen: PropTypes.bool.isRequired, mobileClose: PropTypes.func.isRequired, children: PropTypes.element } ================================================ FILE: eda-frontend/src/components/SchematicEditor/SchematicToolbar.js ================================================ /* eslint-disable camelcase */ import React, { useEffect } from 'react' import { useSelector, useDispatch } from 'react-redux' import PropTypes from 'prop-types' import Canvg from 'canvg' import { IconButton, Tooltip, Snackbar, Select, FormControl, InputLabel } from '@material-ui/core' import AddBoxOutlinedIcon from '@material-ui/icons/AddBoxOutlined' import PlayCircleOutlineIcon from '@material-ui/icons/PlayCircleOutline' import HelpOutlineIcon from '@material-ui/icons/HelpOutline' import UndoIcon from '@material-ui/icons/Undo' import RedoIcon from '@material-ui/icons/Redo' import ZoomInIcon from '@material-ui/icons/ZoomIn' import ZoomOutIcon from '@material-ui/icons/ZoomOut' import DeleteIcon from '@material-ui/icons/Delete' import SettingsOverscanIcon from '@material-ui/icons/SettingsOverscan' import PrintOutlinedIcon from '@material-ui/icons/PrintOutlined' import BugReportOutlinedIcon from '@material-ui/icons/BugReportOutlined' import RotateRightIcon from '@material-ui/icons/RotateRight' import BorderClearIcon from '@material-ui/icons/BorderClear' import { makeStyles } from '@material-ui/core/styles' import CloseIcon from '@material-ui/icons/Close' import SaveOutlinedIcon from '@material-ui/icons/SaveOutlined' import OpenInBrowserIcon from '@material-ui/icons/OpenInBrowser' import ClearAllIcon from '@material-ui/icons/ClearAll' import CreateNewFolderOutlinedIcon from '@material-ui/icons/CreateNewFolderOutlined' import ImageOutlinedIcon from '@material-ui/icons/ImageOutlined' import SystemUpdateAltOutlinedIcon from '@material-ui/icons/SystemUpdateAltOutlined' import LibraryAddRoundedIcon from '@material-ui/icons/LibraryAddRounded' import Button from '@material-ui/core/Button' import Menu from '@material-ui/core/Menu' import MenuItem from '@material-ui/core/MenuItem' import Icon from '@material-ui/core/Icon' import { Link as RouterLink } from 'react-router-dom' import queryString from 'query-string' import { RotateLeft } from '@material-ui/icons' import AddPhotoAlternateIcon from '@material-ui/icons/AddPhotoAlternate' import { fetchRole } from '../../redux/actions/authActions' import { NetlistModal, HelpScreen, ImageExportDialog, OpenSchDialog, SelectLibrariesModal } from './ToolbarExtension' import { ZoomIn, ZoomOut, ZoomAct, DeleteComp, PrintPreview, ErcCheck, Rotate, GenerateNetList, Undo, Redo, Save, ClearGrid, RotateACW } from './Helper/ToolbarTools' import { toggleSimulate, closeCompProperties, setSchXmlData, saveSchematic, openLocalSch, saveToGallery } from '../../redux/actions/index' import CreateProject from '../Project/CreateProject' import api from '../../utils/Api' import { importSCHFile } from './Helper/KiCadFileUtils' import SubmitResults from '../LTI/SubmitResults' // Req for Development // import CodeIcon from '@material-ui/icons/Code' // // eslint-disable-next-line // import { dispGraph } from './Helper/ToolbarTools' const useStyles = makeStyles((theme) => ({ menuButton: { marginLeft: 'auto', marginRight: theme.spacing(0), padding: theme.spacing(1), [theme.breakpoints.up('lg')]: { display: 'none' } }, tools: { padding: theme.spacing(1), margin: theme.spacing(0, 0.5), color: '#262626' }, pipe: { fontSize: '1.45rem', color: '#d6c4c2', margin: theme.spacing(0, 1.5) } })) // Notification snackbar to give alert messages function SimpleSnackbar ({ open, close, message }) { return (
} />
) } SimpleSnackbar.propTypes = { open: PropTypes.bool, close: PropTypes.func, message: PropTypes.string } export default function SchematicToolbar ({ mobileClose, gridRef, ltiSimResult, setLtiSimResult }) { const classes = useStyles() const netfile = useSelector((state) => state.netlistReducer) const auth = useSelector((state) => state.authReducer) const schSave = useSelector((state) => state.saveSchematicReducer) const dispatch = useDispatch() useEffect(() => { dispatch(fetchRole()) }, [dispatch]) // Netlist Modal Control const [open, setOpen] = React.useState(false) const [netlist, genNetlist] = React.useState('') const [ltiId, setLtiId] = React.useState('') const [ltiUserId, setLtiUserId] = React.useState('') const [ltiNonce, setLtiNonce] = React.useState('') const [submissionDetails, setSubmissionDetails] = React.useState('') const [submit, setSubmit] = React.useState(false) const [results, setResults] = React.useState(false) const [submitMessage, setSubmitMessage] = React.useState('') const [saveId, setSaveId] = React.useState(null) const [consumerKey, setConsumerKey] = React.useState('') const [anchorEl, setAnchorEl] = React.useState(null) const [initalSch, setIntialSch] = React.useState('') const [modelSch, setModelSch] = React.useState('') const [id, setId] = React.useState('') // eslint-disable-next-line const [scored, setScored] = React.useState(false) const [ltiSimHistory, setLtiSimHistory] = React.useState([]) const [activeSimResult, setActiveSimResult] = React.useState(null) useEffect(() => { if (ltiSimResult && ltiId) { api .get(`simulation/history/lti/${ltiId}`) .then((res) => { res.data.map((ele, index) => { ele.simulation_time = new Date(ele.simulation_time) return 0 }) setLtiSimHistory(res.data) setActiveSimResult(res.data[res.data.length - 1].id) }) .catch((err) => { console.log(err) }) console.log('SIM RESULTS FOUND') setLtiSimResult(false) } // eslint-disable-next-line }, [ltiSimResult]); const handleMenuClick = (event) => { setAnchorEl(event.currentTarget) } const handleMenuClose = () => { setAnchorEl(null) } const [shortCircuit, setshortCircuit] = React.useState(false) const handleShortClose = (event, reason) => { if (reason === 'clickaway') { return } setshortCircuit(false) } const handleSave = (version, newSave, save_id) => { if (!newSave) { window.location = '#/editor?id=' + window.location.href.split('id=')[1].substr(0, 36) + '&version=' + version + '&branch=' + window.location.href.split('branch=')[1].substr(0) window.location.reload() } else { window.location = '#/editor?id=' + save_id + '&version=' + version + '&branch=master' window.location.reload() } } const handleSaveForLTI = (version, newSave, save_id) => { setSaveId(save_id) } const handleChangeSim = (e) => { if (e.target.value === null) { setActiveSimResult(null) } else { setActiveSimResult(e.target.value) } setAnchorEl(null) } const handleClickOpen = () => { const compNetlist = GenerateNetList() let printToPlotControlBlock = '' const ctrlblk = netfile.controlBlock.split('\n') for (let line = 0; line < ctrlblk.length; line++) { if (ctrlblk[line].includes('print')) { printToPlotControlBlock += 'plot ' let cleanCode = ctrlblk[line].split('print ')[1] cleanCode = cleanCode.split('>')[0] printToPlotControlBlock += cleanCode + '\n' } else { printToPlotControlBlock += ctrlblk[line] + '\n' } } const netlist = netfile.title + '\n\n' + compNetlist.models + '\n' + compNetlist.main + '\n' + netfile.controlLine + '\n' + printToPlotControlBlock + '\n' const checkNetlist = (netlist) => { netlist = netlist.split('\n') for (let line = 0; line < netlist.length; line++) { const splitLine = netlist[line].split(' ') // Works only for components with 2 nodes // For multiple nodes all nodes need to be checked with each other if (splitLine[1] === splitLine[2] && splitLine.length >= 2) { setshortCircuit(true) return } } setshortCircuit(false) } checkNetlist(compNetlist.main) genNetlist(netlist) setOpen(true) } useEffect(() => { var url = queryString.parse(window.location.href.split('editor')[1]) setLtiId(url.lti_id) setLtiNonce(url.lti_nonce) setLtiUserId(url.lti_user_id) setConsumerKey(url.consumer_key) setId(url.id) // eslint-disable-next-line }, []); useEffect(() => { if (ltiId && id) { api .get(`lti/exist/${id}`) .then((res) => { if (res.data.secret_key) { setScored(res.data.scored) } }) .catch((err) => console.log(err)) } // eslint-disable-next-line }, [ltiId]); useEffect(() => { if (consumerKey) { console.log(schSave) api .get(`lti/exist/${id}`) .then((res) => { if (res.data.secret_key) { setIntialSch(res.data.initial_schematic) setModelSch(res.data.model_schematic) setScored(res.data.scored) } }) .catch((err) => console.log(err)) } // eslint-disable-next-line }, [consumerKey]); useEffect(() => { if (saveId !== null) { const body = { schematic: saveId, ltisession: { id: ltiId, user_id: ltiUserId, oauth_nonce: ltiNonce }, student_simulation: activeSimResult } console.log(body) api .post('lti/submit/', body) .then((res) => { console.log(res.data) setSubmissionDetails(res.data) setResults(true) setSubmit(true) setSubmitMessage(res.data.message) }) .catch((err) => { console.log(err) setSubmit(true) setSubmitMessage( 'There was an error while submitting. Please try again later!' ) }) } // eslint-disable-next-line }, [saveId]); const onSubmission = () => { var xml = Save() dispatch(setSchXmlData(xml)) var title = schSave.title var description = schSave.description exportImage('PNG').then((res) => { dispatch( saveSchematic( title, description, xml, res, false, null, handleSaveForLTI, true ) ) }) } const handleSubmitClose = () => { setSubmit(false) } const handleClose = () => { setOpen(false) } // Control Help dialog window const [helpOpen, setHelpOpen] = React.useState(false) const handleHelpOpen = () => { setHelpOpen(true) } const handleHelpClose = () => { setHelpOpen(false) } // handle Delete component const handleDeleteComp = () => { DeleteComp() dispatch(closeCompProperties()) } // handle Notification Snackbar const [snacOpen, setSnacOpen] = React.useState(false) const [message, setMessage] = React.useState('') const handleSnacClick = () => { setSnacOpen(true) } const handleSnacClose = (event, reason) => { if (reason === 'clickaway') { return } setSnacOpen(false) } const handleMenuOnClick = (e) => { window.location.href = `/eda/#/editor?id=${e}&consumer_key=${consumerKey}` window.location.reload() } // Image Export of Schematic Diagram async function exportImage (type) { const svg = document.querySelector('#divGrid > svg').cloneNode(true) svg.removeAttribute('style') svg.setAttribute('width', gridRef.current.scrollWidth) svg.setAttribute('height', gridRef.current.scrollHeight) const canvas = document.createElement('canvas') canvas.width = gridRef.current.scrollWidth canvas.height = gridRef.current.scrollHeight canvas.style.width = canvas.width + 'px' canvas.style.height = canvas.height + 'px' const images = svg.getElementsByTagName('image') for (const image of images) { const data = await fetch(image.getAttribute('xlink:href')).then((v) => { return v.text() }) image.removeAttribute('xlink:href') image.setAttribute( 'href', 'data:image/svg+xml;base64,' + window.btoa(data) ) } const ctx = canvas.getContext('2d') ctx.mozImageSmoothingEnabled = true ctx.webkitImageSmoothingEnabled = true ctx.msImageSmoothingEnabled = true ctx.imageSmoothingEnabled = true const pixelRatio = window.devicePixelRatio || 1 ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0) return new Promise((resolve) => { if (type === 'SVG') { const svgdata = new XMLSerializer().serializeToString(svg) resolve('' + svgdata) return } const v = Canvg.fromString(ctx, svg.outerHTML) v.render().then(() => { let image = '' if (type === 'JPG') { const imgdata = ctx.getImageData(0, 0, canvas.width, canvas.height) for (let i = 0; i < imgdata.data.length; i += 4) { if (imgdata.data[i + 3] === 0) { imgdata.data[i] = 255 imgdata.data[i + 1] = 255 imgdata.data[i + 2] = 255 imgdata.data[i + 3] = 255 } } ctx.putImageData(imgdata, 0, 0) image = canvas.toDataURL('image/jpeg', 1.0) } else { if (type === 'PNG') { image = canvas.toDataURL('image/png') } } resolve(image) }) }) } // Download JPEG, PNG exported Image function downloadImage (data, type) { const evt = new MouseEvent('click', { view: window, bubbles: false, cancelable: true }) const a = document.createElement('a') const ext = type === 'PNG' ? '.png' : '.jpg' a.setAttribute('download', schSave.title + '_eSim_on_cloud' + ext) a.setAttribute('href', data) a.setAttribute('target', '_blank') a.dispatchEvent(evt) } // Download SVG image function downloadText (data, options) { const blob = new Blob(data, options) const evt = new MouseEvent('click', { view: window, bubbles: false, cancelable: true }) const a = document.createElement('a') a.setAttribute('download', schSave.title + '_eSim_on_cloud.svg') a.href = URL.createObjectURL(blob) a.target = '_blank' a.setAttribute('target', '_blank') a.dispatchEvent(evt) } const [imgopen, setImgOpen] = React.useState(false) const handleImgClickOpen = () => { setImgOpen(true) } const handleImgClose = (value) => { setImgOpen(false) if (value === 'SVG') { exportImage('SVG').then((v) => { downloadText([v], { type: 'data:image/svg+xml;charset=utf-8;' }) }) } else if (value === 'PNG') { exportImage('PNG').then((v) => { downloadImage(v, 'PNG') }) } else if (value === 'JPG') { exportImage('JPG').then((v) => { downloadImage(v, 'JPG') }) } } // handle Save Schematic onCloud const handleSchSave = () => { if (auth.isAuthenticated !== true) { setMessage('You are not Logged In') handleSnacClick() } else { const xml = Save() dispatch(setSchXmlData(xml)) const title = schSave.title const description = schSave.description exportImage('PNG').then((res) => { dispatch( saveSchematic(title, description, xml, res, false, null, handleSave) ) }) setMessage('Saved Successfully') handleSnacClick() } } // Handle Save to Gallery const handleGalSave = () => { if (auth.isAuthenticated !== true) { setMessage('You are not Logged In') handleSnacClick() } else { const xml = Save() dispatch(setSchXmlData(xml)) const title = schSave.title const description = schSave.description exportImage('PNG').then((res) => { dispatch(saveToGallery(title, description, xml, res)) }) setMessage('Saved To Gallery Successfully') handleSnacClick() } } // Save Schematics Locally const handleLocalSchSave = () => { const saveLocalData = {} saveLocalData.data_dump = Save() saveLocalData.title = schSave.title saveLocalData.description = schSave.description const json = JSON.stringify(saveLocalData) const blob = new Blob([json], { type: 'octet/stream' }) const evt = new MouseEvent('click', { view: window, bubbles: false, cancelable: true }) const a = document.createElement('a') a.setAttribute('download', schSave.title + '_eSim_on_cloud.json') a.href = URL.createObjectURL(blob) a.target = '_blank' a.setAttribute('target', '_blank') a.dispatchEvent(evt) } // Open Locally Saved Schematic const handleLocalSchOpen = () => { let obj = {} const fileSelector = document.createElement('input') fileSelector.setAttribute('type', 'file') fileSelector.setAttribute('accept', 'application/JSON') fileSelector.click() fileSelector.addEventListener('change', function (event) { const reader = new FileReader() const filename = event.target.files[0].name if (filename.slice(filename.length - 4) === 'json') { reader.onload = onReaderLoad reader.readAsText(event.target.files[0]) } else { setMessage('Unsupported file type error ! Select valid file.') handleSnacClick() } }) const onReaderLoad = function (event) { obj = JSON.parse(event.target.result) if ( obj.data_dump === undefined || obj.title === undefined || obj.description === undefined ) { setMessage('Unsupported file error !') handleSnacClick() } else { dispatch(openLocalSch(obj)) } } } const handleKicadFileUpload = () => { const fileSelector = document.createElement('input') fileSelector.setAttribute('type', 'file') fileSelector.setAttribute('accept', '.sch') fileSelector.click() fileSelector.addEventListener('change', function (event) { var reader = new FileReader() var filename = event.target.files[0].name if (filename.slice(filename.length - 3) === 'sch') { reader.onload = async (e) => { importSCHFile(e.target.result) } reader.readAsText(event.target.files[0]) } }) } // Control Help dialog window open and close const [schOpen, setSchOpen] = React.useState(false) const handleSchDialOpen = () => { setSchOpen(true) } const handleSchDialClose = () => { setSchOpen(false) } const [libsOpen, setlibsOpen] = React.useState(false) const handleLibOpen = () => { setlibsOpen(true) } const handleLibClose = () => { setlibsOpen(false) } // Shortcuts that cant be put in Helper/KeyboardShortcuts.js useEffect(() => { function shrtcts (event) { // Save - Ctrl + S if (event.ctrlKey && event.keyCode === 83) { event.preventDefault() handleSchSave() } // Print - Ctrl + P if (event.ctrlKey && event.keyCode === 80) { event.preventDefault() PrintPreview() } // Open dialog - Ctrl + O if (event.ctrlKey && event.keyCode === 79) { event.preventDefault() handleSchDialOpen() } // Export - Ctrl + E / Image Export Ctrl + Shift + E if (event.ctrlKey && event.keyCode === 69) { event.preventDefault() if (event.shiftKey) { handleImgClickOpen() } else { handleLocalSchSave() } } } window.addEventListener('keydown', shrtcts) return () => { window.addEventListener('keydown', shrtcts) } // eslint-disable-next-line }, []); return ( <> {(!ltiId || !ltiNonce) && } {(!ltiId || !ltiNonce) && } {(!ltiId || !ltiNonce) && } {(!ltiId || !ltiNonce) && } {ltiId && ltiUserId && ltiNonce && ltiSimHistory && (
See simulations
)} {((ltiId && ltiUserId && ltiNonce) || consumerKey) && activeSimResult && ( )} | {(!ltiId || !ltiNonce) && } {(!ltiId || !ltiNonce) && } {(!ltiId || !ltiNonce) && } {(!ltiId || !ltiNonce) && } {(!ltiId || !ltiNonce) && |} { dispatch(toggleSimulate()) }} > | | | | {consumerKey && ( <> handleMenuOnClick(modelSch)}> Model Schematic handleMenuOnClick(initalSch)}> Student Schematic{' '} )} {!ltiId && } } /> {auth.roles && auth.roles.is_esim_staff && ( )} {/* dispGraph()}> */} ) } SchematicToolbar.propTypes = { mobileClose: PropTypes.func, gridRef: PropTypes.object.isRequired, ltiSimResult: PropTypes.string, setLtiSimResult: PropTypes.string } ================================================ FILE: eda-frontend/src/components/SchematicEditor/SideComp.js ================================================ import React, { useEffect } from 'react' import PropTypes from 'prop-types' import { List, ListItemText, Tooltip, Popover } from '@material-ui/core' import { makeStyles } from '@material-ui/core/styles' import api from '../../utils/Api' import Button from '@material-ui/core/Button' import Snackbar from '@material-ui/core/Snackbar' import CloseIcon from '@material-ui/icons/Close' import IconButton from '@material-ui/core/IconButton' import './Helper/SchematicEditor.css' import { AddComponent } from './Helper/SideBar.js' const useStyles = makeStyles((theme) => ({ popupInfo: { margin: theme.spacing(1.5), padding: theme.spacing(1.5), border: '1px solid blue', borderRadius: '5px' } })) export default function SideComp ({ isFavourite = false, favourite, setFavourite, component }) { const classes = useStyles() const imageRef = React.createRef() const [openSnackbar, setOpenSnackbar] = React.useState(false) const [anchorEl, setAnchorEl] = React.useState(null) const [snackbarMessage, setSnackbarMessage] = React.useState(null) const handleClick = (event) => { setAnchorEl(event.currentTarget) } const handleClose = () => { setAnchorEl(null) } const handleSnackbarClose = (event, reason) => { if (reason === 'clickaway') { return } setOpenSnackbar(false) } const open = Boolean(anchorEl) const id = open ? 'simple-popover' : undefined useEffect(() => { // Function call to make components draggable AddComponent(component, imageRef.current) // eslint-disable-next-line }, []) useEffect(() => { if (snackbarMessage !== null) { setOpenSnackbar(true) } }, [snackbarMessage]) useEffect(() => { if (openSnackbar === false) { setSnackbarMessage(null) } }, [openSnackbar]) const addFavourite = (id) => { const token = localStorage.getItem('esim_token') const body = { component: [id] } const config = { headers: { 'Content-Type': 'application/json' } } if (token) { config.headers.Authorization = `Token ${token}` } api.post('favouritecomponents', body, config).then(resp => { setFavourite(resp.data.component) setSnackbarMessage('Component is added to favourites successfully') }).catch(err => { console.log(err) }) setAnchorEl(null) } const handleFavourite = (id) => { if (favourite) { var flag = 0 for (var i = 0; i < favourite.length; i++) { if (favourite[i].id === id) { flag = 1 break } } if (!flag) { addFavourite(id) } else { setSnackbarMessage('This component is already added to favourites') setAnchorEl(null) } } else { addFavourite(id) } } const handleRemove = (id) => { const token = localStorage.getItem('esim_token') const config = { headers: { 'Content-Type': 'application/json' } } if (token) { config.headers.Authorization = `Token ${token}` } api.delete(`favouritecomponents/${id}`, config).then(resp => { setFavourite(resp.data.component) }).catch(err => { console.log(err) }) setAnchorEl(null) } return (
{/* Display Image thumbnail in left side pane */} Logo {/* Popover to display component information on single click */} Component Name: {component.name} {component.description !== '' && Description: {component.description} } { component.keyword !== '' && Keywords: {component.keyword} } { component.data_link !== '' && Datasheet: {component.data_link} } {!isFavourite && localStorage.getItem('esim_token') && } {isFavourite && localStorage.getItem('esim_token') && } } />
) } SideComp.propTypes = { component: PropTypes.object.isRequired, isFavourite: PropTypes.bool, setFavourite: PropTypes.func, favourite: PropTypes.array } ================================================ FILE: eda-frontend/src/components/SchematicEditor/SimulationProperties.js ================================================ /* eslint-disable no-unused-vars */ import React, { useState } from 'react' import PropTypes from 'prop-types' import { List, Checkbox, ListItem, Button, TextField, ExpansionPanel, ExpansionPanelSummary, ExpansionPanelDetails, Typography, Divider, Popover, Tooltip, Snackbar, IconButton } from '@material-ui/core' import queryString from 'query-string' import InfoOutlinedIcon from '@material-ui/icons/InfoOutlined' import ExpandMoreIcon from '@material-ui/icons/ExpandMore' import MuiAlert from '@material-ui/lab/Alert' import { makeStyles } from '@material-ui/core/styles' import { useSelector, useDispatch } from 'react-redux' import { setControlLine, setControlBlock, setResultTitle, setResultGraph, setResultText, setNetlist } from '../../redux/actions/index' import { GenerateNetList, GenerateNodeList, GenerateCompList, ErcCheckNets } from './Helper/ToolbarTools' import SimulationScreen from '../Shared/SimulationScreen' import { Multiselect } from 'multiselect-react-dropdown' import Notice from '../Shared/Notice' import api from '../../utils/Api' const useStyles = makeStyles((theme) => ({ toolbar: { minHeight: '90px' }, pages: { margin: theme.spacing(0, 1) }, propertiesBox: { width: '100%' }, simulationOptions: { margin: '0px', padding: '0px', width: '100%' }, heading: { fontSize: theme.typography.pxToRem(15), fontWeight: theme.typography.fontWeightRegular } })) function Alert (props) { return } export default function SimulationProperties (props) { const netfile = useSelector(state => state.netlistReducer) const isSimRes = useSelector(state => state.simulationReducer.isSimRes) const [taskId, setTaskId] = useState(null) const dispatch = useDispatch() const classes = useStyles() const [nodeList, setNodeList] = useState([]) const [componentsList, setComponentsList] = useState([]) const [errMsg, setErrMsg] = useState('') const [err, setErr] = useState(false) const [error, setError] = useState(false) const [warning, setWarning] = useState(false) const [needParameters, setNeedParameters] = useState(false) const [status, setStatus] = useState('') const stats = { loading: 'loading', error: 'error', success: 'success' } const [dcSweepcontrolLine, setDcSweepControlLine] = useState(props.dcSweepcontrolLine ? props.dcSweepcontrolLine : { parameter: '', sweepType: 'Linear', start: '', stop: '', step: '', parameter2: '', start2: '', stop2: '', step2: '' }) const [transientAnalysisControlLine, setTransientAnalysisControlLine] = useState(props.transientAnalysisControlLine ? props.transientAnalysisControlLine : { start: '0', stop: '', step: '', skipInitial: false }) const [acAnalysisControlLine, setAcAnalysisControlLine] = useState(props.acAnalysisControlLine ? props.acAnalysisControlLine : { input: 'dec', start: '', stop: '', pointsBydecade: '' }) const [tfAnalysisControlLine, setTfAnalysisControlLine] = useState(props.tfAnalysisControlLine ? props.tfAnalysisControlLine : { outputNodes: false, outputVoltageSource: '', inputVoltageSource: '' }) const [NoiseAnalysisControlLine, setNoiseAnalysisControlLine] = useState(props.NoiseAnalysisControlLine ? props.NoiseAnalysisControlLine : { inputVoltageSource: '', input: 'dec', start: '', stop: '', pointsBydecade: '', outputSpectrum: false }) const [controlBlockParam, setControlBlockParam] = useState('') const [simType, setSimType] = React.useState('') let typeSimulation = '' const handleControlBlockParam = (evt) => { setControlBlockParam(evt.target.value) } const analysisNodeArray = [] const analysisCompArray = [] const nodeArray = [] const nodeNoiseArray = [] // const pushZero = (nodeArray) => { // nodeArray.push({ key: 0 }) // } const onTabExpand = () => { try { setComponentsList(['', ...GenerateCompList()]) setNodeList(['', ...GenerateNodeList()]) } catch (err) { setComponentsList([]) setNodeList([]) setWarning(true) } } const handleDcSweepControlLine = (evt) => { const value = evt.target.value setDcSweepControlLine({ ...dcSweepcontrolLine, [evt.target.id]: value }) } const handleTransientAnalysisControlLine = (evt) => { const value = evt.target.value setTransientAnalysisControlLine({ ...transientAnalysisControlLine, [evt.target.id]: value }) } const handleTransientAnalysisControlLineUIC = (evt) => { const value = evt.target.checked setTransientAnalysisControlLine({ ...transientAnalysisControlLine, [evt.target.id]: value }) } const handleAcAnalysisControlLine = (evt) => { const value = evt.target.value setAcAnalysisControlLine({ ...acAnalysisControlLine, [evt.target.id]: value }) } const handleTfAnalysisControlLine = (evt) => { const value = evt.target.value setTfAnalysisControlLine({ ...tfAnalysisControlLine, [evt.target.id]: value }) } const handleTfAnalysisControlLineNodes = (evt) => { const value = evt.target.checked setTfAnalysisControlLine({ ...tfAnalysisControlLine, [evt.target.id]: value }) } const handleNoiseAnalysisControlLine = (evt) => { const value = evt.target.value setNoiseAnalysisControlLine({ ...NoiseAnalysisControlLine, [evt.target.id]: value }) } const [simulateOpen, setSimulateOpen] = React.useState(false) const handlesimulateOpen = () => { setSimulateOpen(true) } const handleSimulateClose = () => { setSimulateOpen(false) } const [simResult, setSimResult] = React.useState({}) const handleSimulationResult = (simResults) => { setSimResult(simResults) } const acTypeOptionList = { Linear: 'lin', Decade: 'dec', Octave: 'oct' } const [selectedValue, setSelectedValue] = React.useState([]) const [selectedValueDCSweep, setSelectedValueDCSweep] = React.useState([]) const [selectedValueTransientAnal, setSelectedValueTransientAnal] = React.useState([]) const [selectedValueTFAnal, setSelectedValueTFAnal] = React.useState([]) const [selectedValueNoiseAnal, setSelectedValueNoiseAnal] = React.useState([]) const [selectedValueComp, setSelectedValueComp] = React.useState([]) const [selectedValueDCSweepComp, setSelectedValueDCSweepComp] = React.useState([]) const [selectedValueTransientAnalComp, setSelectedValueTransientAnalComp] = React.useState([]) const [selectedgraphNoiseComp, setSelectedgraphNoiseComp] = React.useState([]) const handleAddSelectedValueDCSweep = (data) => { let f = 0 selectedValueDCSweep.forEach((value, i) => { if (value[i] !== undefined) { if (value[i].key === data) f = 1 } }) if (f === 0) { const tmp = [...selectedValueDCSweep, data] setSelectedValueDCSweep(tmp) } // console.log(selectedValue) } const handleRemSelectedValueDCSweep = (data) => { const tmp = [] selectedValueDCSweep.forEach((value, i) => { if (value[i] !== undefined) { if (value[i].key !== data) tmp.push(data) } }) setSelectedValueDCSweep(tmp) // console.log(selectedValue) } const handleAddSelectedValueTransientAnal = (data) => { let f = 0 selectedValueTransientAnal.forEach((value, i) => { if (value[i] !== undefined) { if (value[i].key === data) f = 1 } }) if (f === 0) { const tmp = [...selectedValueTransientAnal, data] setSelectedValueTransientAnal(tmp) } // console.log(selectedValue) } const handleRemSelectedValueTransientAnal = (data) => { const tmp = [] selectedValueTransientAnal.forEach((value, i) => { if (value[i] !== undefined) { if (value[i].key !== data) tmp.push(data) } }) setSelectedValueTransientAnal(tmp) // console.log(selectedValue) } const handleAddSelectedValueTFAnal = (data) => { let f = 0 selectedValueTFAnal.forEach((value, i) => { if (value[i] !== undefined) { if (value[i].key === data) f = 1 } }) if (f === 0) { const tmp = [...selectedValueTFAnal, data] setSelectedValueTFAnal(tmp) } // console.log(selectedValue) } const handleRemSelectedValueTFAnal = (data) => { const tmp = [] selectedValueTFAnal.forEach((value, i) => { if (value[i] !== undefined) { if (value[i].key !== data) tmp.push(data) } }) setSelectedValueTFAnal(tmp) // console.log(selectedValue) } const handleAddSelectedValueNoiseAnal = (data) => { let f = 0 selectedValueNoiseAnal.forEach((value, i) => { if (value[i] !== undefined) { if (value[i].key === data) f = 1 } }) if (f === 0) { const tmp = data setSelectedValueNoiseAnal(tmp) } } const handleRemSelectedValueNoiseAnal = (data) => { setSelectedValueNoiseAnal(data) } const handleAddSelectedValueDCSweepComp = (data) => { let f = 0 selectedValueDCSweepComp.forEach((value, i) => { if (value[i] !== undefined) { if (value[i].key === data) f = 1 } }) if (f === 0) { const tmp = [...selectedValueDCSweepComp, data] setSelectedValueDCSweepComp(tmp) } // console.log(selectedValue) } const handleRemSelectedValueDCSweepComp = (data) => { const tmp = [] selectedValueDCSweepComp.forEach((value, i) => { if (value[i] !== undefined) { if (value[i].key !== data) tmp.push(data) } }) setSelectedValueDCSweepComp(tmp) // console.log(selectedValue) } const handleAddSelectedValueTransientAnalComp = (data) => { let f = 0 selectedValueTransientAnalComp.forEach((value, i) => { if (value[i] !== undefined) { if (value[i].key === data) f = 1 } }) if (f === 0) { const tmp = [...selectedValueTransientAnalComp, data] setSelectedValueTransientAnalComp(tmp) } // console.log(selectedValue) } const handleRemSelectedValueTransientAnalComp = (data) => { const tmp = [] selectedValueTransientAnalComp.forEach((value, i) => { if (value[i] !== undefined) { if (value[i].key !== data) tmp.push(data) } }) setSelectedValueTransientAnalComp(tmp) // console.log(selectedValue) } const handleNoiseOutputMode = (evt) => { const value = evt.target.checked setNoiseAnalysisControlLine({ ...NoiseAnalysisControlLine, [evt.target.id]: value }) } const handleErrOpen = () => { setErr(true) } const handleErrClose = () => { setErr(false) } const handleErrMsg = (msg) => { setErrMsg(msg) } const handleStatus = (status) => { setStatus(status) } // Prepare Netlist to file const prepareNetlist = (netlist) => { const titleA = netfile.title.split(' ')[1] const myblob = new Blob([netlist], { type: 'text/plain' }) const file = new File([myblob], `${titleA}.cir`, { type: 'text/plain', lastModified: Date.now() }) // console.log(file) sendNetlist(file) } function sendNetlist (file) { setIsResult(false) netlistConfig(file) .then((response) => { const res = response.data const getUrl = 'simulation/status/'.concat(res.details.task_id) setTaskId(res.details.task_id) simulationResult(getUrl) }) .catch(function (error) { console.log(error) }) } // Upload the nelist function netlistConfig (file) { const token = localStorage.getItem('esim_token') const url = queryString.parse(window.location.href.split('editor?')[1]) const formData = new FormData() formData.append('simulationType', typeSimulation) formData.append('file', file) if (url.id) { formData.append('save_id', url.id) formData.append('version', url.version) formData.append('branch', url.branch) } if (url.lti_nonce) { formData.append('lti_id', url.lti_id) } const config = { headers: { 'content-type': 'multipart/form-data' } } if (token) { config.headers.Authorization = `Token ${token}` } setSimType(typeSimulation) return api.post('simulation/upload', formData, config) } const [isResult, setIsResult] = useState(false) // Get the simulation result with task_Id function simulationResult (url) { let isError = false let msg let resPending = true // to stop immature opening of simulation screen api .get(url) .then((res) => { if (res.data.state === 'PROGRESS' || res.data.state === 'PENDING') { handleStatus(stats.loading) setTimeout(simulationResult(url), 1000) } else if (Object.prototype.hasOwnProperty.call(res.data.details, 'fail')) { resPending = false setIsResult(false) console.log('failed notif') console.log(res.data.details) msg = res.data.details.fail.replace("b'", '') isError = true console.log(err) } else { const result = res.data.details resPending = false if (result === null) { setIsResult(false) } else { const temp = res.data.details.data const data = result.data // console.log('DATA SIm', data) if (res.data.details.graph === 'true') { const simResultGraph = { labels: [], x_points: [], y_points: [] } // populate the labels for (let i = 0; i < data.length; i++) { simResultGraph.labels[0] = data[i].labels[0] const lab = data[i].labels // lab is an array containeing labels names ['time','abc','def'] simResultGraph.x_points = data[0].x // labels for (let x = 1; x < lab.length; x++) { // if (lab[x].includes('#branch')) { // lab[x] = `I (${lab[x].replace('#branch', '')})` // } // uncomment below if you want label like V(r1.1) but it will break the graph showing time as well // else { // lab[x] = `V (${lab[x]})` // } simResultGraph.labels.push(lab[x]) } // populate y_points for (let z = 0; z < data[i].y.length; z++) { simResultGraph.y_points.push(data[i].y[z]) } } simResultGraph.x_points = simResultGraph.x_points.map(d => parseFloat(d)) for (let i1 = 0; i1 < simResultGraph.y_points.length; i1++) { simResultGraph.y_points[i1] = simResultGraph.y_points[i1].map(d => parseFloat(d)) } dispatch(setResultGraph(simResultGraph)) } else { const simResultText = [] for (let i = 0; i < temp.length; i++) { let postfixUnit = '' if (temp[i][0].includes('#branch')) { postfixUnit = 'A' } else if (temp[i][0].includes('transfer_function')) { postfixUnit = '' } else if (temp[i][0].includes('impedance')) { postfixUnit = 'Ohm' } else { temp[i][0] = `V(${temp[i][0]})` postfixUnit = 'V' } simResultText.push(temp[i][0] + ' ' + temp[i][1] + ' ' + parseFloat(temp[i][2]) + ' ' + postfixUnit + '\n') } handleSimulationResult(res.data.details) dispatch(setResultText(simResultText)) } setIsResult(true) props.setLtiSimResult(true) } } }) .then((res) => { if (isError === false && resPending === false) { console.log('no error') handleStatus(stats.success) handlesimulateOpen() } else if (resPending === false) { handleStatus(stats.error) handleErrMsg(msg) } handleErrOpen() }) .catch(function (error) { console.log(error) }) } const startSimulate = (type) => { if (ErcCheckNets() && componentsList !== [] && nodeList !== []) { let compNetlist try { compNetlist = GenerateNetList() } catch { setError(true) return } let controlLine = '' let controlBlock = '' let skipMultiNodeChk = 0 let nodes = '' let uic = '' let noiseMode = '' switch (type) { case 'DcSolver': // console.log('To be implemented') typeSimulation = 'DcSolver' controlLine = '.op' dispatch(setResultTitle('DC Solver Output')) break case 'DcSweep': // console.log(dcSweepcontrolLine) if (dcSweepcontrolLine.parameter !== '' && dcSweepcontrolLine.start !== '' && dcSweepcontrolLine.stop !== '' && dcSweepcontrolLine.step !== '') { typeSimulation = 'DcSweep' controlLine = `.dc ${dcSweepcontrolLine.parameter} ${dcSweepcontrolLine.start} ${dcSweepcontrolLine.stop} ${dcSweepcontrolLine.step} ${dcSweepcontrolLine.parameter2} ${dcSweepcontrolLine.start2} ${dcSweepcontrolLine.stop2} ${dcSweepcontrolLine.step2}` dispatch(setResultTitle('DC Sweep Output')) setSelectedValue(selectedValueDCSweep) setSelectedValueComp(selectedValueDCSweepComp) } else { setNeedParameters(true) return } break case 'Transient': // console.log(transientAnalysisControlLine) if (transientAnalysisControlLine.step !== '' && transientAnalysisControlLine.start !== '' && transientAnalysisControlLine.start !== '') { typeSimulation = 'Transient' if (transientAnalysisControlLine.skipInitial === true) uic = 'UIC' controlLine = `.tran ${transientAnalysisControlLine.step} ${transientAnalysisControlLine.stop} ${transientAnalysisControlLine.start} ${uic}` dispatch(setResultTitle('Transient Analysis Output')) setSelectedValue(selectedValueTransientAnal) setSelectedValueComp(selectedValueTransientAnalComp) } else { setNeedParameters(true) return } break case 'Ac': // console.log(acAnalysisControlLine) if (acAnalysisControlLine.input !== '' && acAnalysisControlLine.pointsBydecade !== '' && acAnalysisControlLine.start !== '' && acAnalysisControlLine.stop !== '') { typeSimulation = 'Ac' controlLine = `.ac ${acAnalysisControlLine.input} ${acAnalysisControlLine.pointsBydecade} ${acAnalysisControlLine.start} ${acAnalysisControlLine.stop}` dispatch(setResultTitle('AC Analysis Output')) } else { setNeedParameters(true) return } break case 'tfAnalysis': if (tfAnalysisControlLine.inputVoltageSource !== '') { typeSimulation = 'tfAnalysis' setSelectedValue(selectedValueTFAnal) if (tfAnalysisControlLine.outputNodes === true) { selectedValue.forEach((value, i) => { if (value[i] !== undefined) { nodes = nodes + ' ' + String(value[i].key) } }) nodes = 'V(' + nodes + ')' } else { nodes = `I(${tfAnalysisControlLine.outputVoltageSource})` } console.log(tfAnalysisControlLine.outputNodes) controlLine = `.tf ${nodes} ${tfAnalysisControlLine.inputVoltageSource}` dispatch(setResultTitle('Transfer Function Analysis Output')) skipMultiNodeChk = 1 } else { setNeedParameters(true) return } break case 'noiseAnalysis': // console.log('Start noise analysis simulation', selectedValueNoiseAnal, NoiseAnalysisControlLine) typeSimulation = 'noiseAnalysis' var node1 = selectedValueNoiseAnal[0].key var node2 = '0' if (selectedValueNoiseAnal.length > 1) { node2 = selectedValueNoiseAnal[1].key } if (NoiseAnalysisControlLine.inputVoltageSource && NoiseAnalysisControlLine.pointsBydecade && NoiseAnalysisControlLine.input && NoiseAnalysisControlLine.start && NoiseAnalysisControlLine.stop) { controlLine = `.noise v(${node1}, ${node2}) ${NoiseAnalysisControlLine.inputVoltageSource} ${NoiseAnalysisControlLine.input} ${NoiseAnalysisControlLine.pointsBydecade} ${NoiseAnalysisControlLine.start} ${NoiseAnalysisControlLine.stop}` noiseMode = NoiseAnalysisControlLine.outputSpectrum ? 'setplot noise1' : 'setplot noise2' dispatch(setResultTitle('Noise Analysis Output')) } else { setNeedParameters(true) return } break default: break } // console.log(selectedValue) let atleastOne = 0 let cblockline = '' // if either the extra expression field or the nodes multi select // drop down list in enabled then atleast one value is made non zero // to add add all instead to the print statement. if (selectedValue.length > 0 && selectedValue !== null && skipMultiNodeChk === 0) { selectedValue.forEach((value, i) => { if (value[i] !== undefined && value[i].key !== 0) { atleastOne = 1 cblockline = cblockline + ' ' + String(value[i].key) } }) } if (selectedValueComp.length > 0 && selectedValueComp !== null) { selectedValueComp.forEach((value, i) => { if (value[i] !== undefined && value[i].key !== 0) { atleastOne = 1 if (value[i].key.charAt(0) === 'V' || value[i].key.charAt(0) === 'v') { cblockline = cblockline + ' I(' + String(value[i].key) + ') ' } } }) } if (controlBlockParam.length > 0) { cblockline = cblockline + ' ' + controlBlockParam atleastOne = 1 } if (atleastOne === 0) cblockline = 'all' if (typeSimulation !== 'noiseAnalysis') { controlBlock = `\n.control \nrun \nprint ${cblockline} > data.txt \n.endc \n.end` } else { controlBlock = `\n.control \nrun \n${noiseMode} \nprint ${cblockline} > data.txt \n.endc \n.end` } // console.log(controlLine) dispatch(setControlLine(controlLine)) dispatch(setControlBlock(controlBlock)) // setTimeout(function () { }, 2000) const netlist = netfile.title + '\n\n' + compNetlist.models + '\n' + compNetlist.main + '\n' + controlLine + '\n' + controlBlock + '\n' dispatch(setNetlist(netlist)) prepareNetlist(netlist) } // handlesimulateOpen() } // simulation properties add expression input box const [anchorEl, setAnchorEl] = React.useState(null) const handleAddExpressionClick = (event) => { setAnchorEl(event.currentTarget) } const handleAddExpressionClose = () => { setAnchorEl(null) } const open = Boolean(anchorEl) const id = open ? 'simple-popover' : undefined return ( <>
setNeedParameters(false)} > setNeedParameters(false)} severity="error"> Please enter the necessary parameters! setWarning(false)} > setWarning(false)} severity="warning"> Circuit is not complete to be simulated! setError(false)} > setError(false)} severity="error"> Cannot simulate an incomplete circuit! {/* Simulation modes list */} {/* DC Solver */}
} aria-controls="panel1a-content" id="panel1a-header" style={{ width: '100% ' }} > DC Solver
{/* DC Sweep */} } aria-controls="panel1a-content" id="panel1a-header" style={{ width: '97%' }} > DC Sweep
{ componentsList.map((value, i) => { if (value.charAt(0) === 'V' || value.charAt(0) === 'v' || value.charAt(0) === 'I' || value.charAt(0) === 'i' || value === '') { return () } else { return null } }) } V V V {/* SECONDARY PARAMETER FOR SWEEP */}

Secondary Parameters

{ componentsList.map((value, i) => { return }) }
{/* Transient Analysis */} } aria-controls="panel1a-content" id="panel1a-header" style={{ width: '97%' }} > Transient Analysis
S S S Use Initial Conditions {nodeList.forEach((value) => { if (value !== null && value !== '') { analysisNodeArray.push({ key: value }) } }) } { componentsList.forEach((value) => { if (value !== null && value !== '') { if (value.charAt(0) === 'V' || value.charAt(0) === 'v') { analysisCompArray.push({ key: value }) } } }) }
{/* AC Analysis */} } aria-controls="panel1a-content" id="panel1a-header" style={{ width: '100%' }} > AC Analysis
Hz Hz
{/* Transfer Function Analysis */} } aria-controls="panel1a-content" id="panel1a-header" style={{ width: '97%' }} > Transfer Function Analysis
Output By Nodes {nodeList.forEach((value) => { if (value !== null && value !== '') { nodeArray.push({ key: value }) } }) } {/* {pushZero(nodeArray)} */} { componentsList.map((value, i) => { if (value.charAt(0) === 'V' || value.charAt(0) === 'v' || value.charAt(0) === 'I' || value.charAt(0) === 'i' || value === '') { return () } else { return null } }) } { componentsList.map((value, i) => { if (value.charAt(0) === 'V' || value.charAt(0) === 'v' || value.charAt(0) === 'I' || value.charAt(0) === 'i' || value === '') { return () } else { return null } }) }
{/* Noise Analysis */} } aria-controls="panel1a-content" id="panel1a-header" style={{ width: '97%' }} > Noise Analysis
{nodeList.forEach((value) => { if (value !== null && value !== '') { nodeNoiseArray.push({ key: value }) } }) } {/* {pushZero(nodeArray)} */} { componentsList.map((value, i) => { if (value.charAt(0) === 'V' || value.charAt(0) === 'v' || value.charAt(0) === 'I' || value.charAt(0) === 'i' || value === '') { return () } else { return null } }) } Hz Hz Show Noise Spectrum
) } SimulationProperties.propTypes = { ltiSimResult: PropTypes.object, setLtiSimResult: PropTypes.object, dcSweepcontrolLine: PropTypes.object, transientAnalysisControlLine: PropTypes.object, acAnalysisControlLine: PropTypes.object, tfAnalysisControlLine: PropTypes.object, NoiseAnalysisControlLine: PropTypes.object } ================================================ FILE: eda-frontend/src/components/SchematicEditor/ToolbarExtension.js ================================================ /* eslint-disable camelcase */ import React, { useEffect } from 'react' import PropTypes from 'prop-types' import { Slide, Button, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle, TextareaAutosize, AppBar, Toolbar, IconButton, Typography, Container, Grid, Paper, Divider, TableContainer, Table, TableHead, TableRow, TableCell, TableBody, List, ListItem, ListItemText, ListItemSecondaryAction, ListSubheader, Avatar, ListItemAvatar, Tooltip, Snackbar, Collapse, Hidden, Input } from '@material-ui/core' import { makeStyles } from '@material-ui/core/styles' import CloseIcon from '@material-ui/icons/Close' import { useSelector, useDispatch } from 'react-redux' import { setTitle, setSchTitle, fetchSchematics, fetchSchematic, fetchGallerySchematic, fetchAllLibraries, fetchLibrary, removeLibrary, uploadLibrary, resetUploadSuccess, deleteLibrary, fetchComponents, fetchGallery, setSchXmlData, saveSchematic } from '../../redux/actions/index' import { blue } from '@material-ui/core/colors' import { Alert } from '@material-ui/lab' import Tabs from '@material-ui/core/Tabs' import Tab from '@material-ui/core/Tab' import Box from '@material-ui/core/Box' import ExpandMore from '@material-ui/icons/ExpandMore' import ExpandLess from '@material-ui/icons/ExpandLess' import { fetchRole } from '../../redux/actions/authActions' import Canvg from 'canvg' import { Save } from './Helper/ToolbarTools' const Transition = React.forwardRef(function Transition (props, ref) { return }) const FileSaver = require('file-saver') // Dialog box to display generated netlist export function NetlistModal ({ open, close, netlist }) { const netfile = useSelector(state => state.netlistReducer) const createNetlistFile = () => { const titleA = netfile.title.split(' ')[1] const blob = new Blob([netlist], { type: 'text/plain;charset=utf-8' }) FileSaver.saveAs(blob, `${titleA}_eSim_on_cloud.cir`) } return ( {'Netlist Generator'} Current Netlist for given schematic...

{/* Button to download the netlist */}
) } NetlistModal.propTypes = { open: PropTypes.bool, close: PropTypes.func, netlist: PropTypes.string } const useStyles = makeStyles((theme) => ({ appBar: { position: 'relative' }, title: { marginLeft: theme.spacing(2), flex: 1 }, header: { padding: theme.spacing(5, 0, 6), color: '#fff' }, paper: { padding: theme.spacing(2), textAlign: 'center', backgroundColor: '#404040', color: '#fff' }, avatar: { width: theme.spacing(4), height: theme.spacing(4), backgroundColor: blue[100], color: blue[600] }, delete: { backgroundColor: 'red', color: 'white', marginBottom: '10px' }, flex_container: { display: 'flex', flexDirection: 'column' // justifyContent: 'space-evenly' }, flex_item: { marginBottom: '10px' } })) // Screen to display information about as keyboard shortcuts, units table and simulation modes export function HelpScreen ({ open, close }) { const classes = useStyles() return (
Help
Keyboard Shorcuts UNDO Ctrl + Z REDO Ctrl + Shift + Z ZOOM IN Ctrl + + ZOOM OUT Ctrl + - DEFAULT SIZE Ctrl + Y Save Circuit Ctrl + S Print Circuit Ctrl + P Open Dialog Ctrl + O Export as JSON Ctrl + E Export as Image Ctrl + Shift + E Rotate Component Clockwise Alt + Right Arrow Rotate Component Anti-Clockwise Alt + Left Arrow Clear All Shift + Del
Units Table SUFFIX NAME FACTOR T Tera 1012 G Giga 109 Meg Mega 106 K Kilo 103 mil Mil 25.4 X 10-6 m milli 10-3 u micro 10-6 n nano 10-9 p pico 10-12 f femto 10-15
Ngspice scale factors naming conventions
Simulation Modes DC Solver A DC simulation attempts to find a stable DC solution of your circuit. DC Sweep A DC Sweep will plot the DC solution of your circuit across different values of a parameter of a circuit element. You can sweep any numerical parameter of any circuit element in your circuit. Transient Analysis A Transient analysis does a Time-Domain Simulation of your circuit over a certain period of time. AC Analysis AC Analysis does a small signal analysis of your circuit. The input can be any voltage source or current source.
) } HelpScreen.propTypes = { open: PropTypes.bool, close: PropTypes.func } // Image Export Dialog box const ImgTypes = ['PNG', 'JPG', 'SVG'] export function ImageExportDialog (props) { const classes = useStyles() const { onClose, open } = props const handleClose = () => { onClose('') } const handleListItemClick = (value) => { onClose(value) } return ( Select Image type {ImgTypes.map((img) => ( handleListItemClick(img)} key={img}> {img.charAt(0).toUpperCase()} ))} ) } ImageExportDialog.propTypes = { onClose: PropTypes.func.isRequired, open: PropTypes.bool.isRequired } // home button dialog export function HomeDialog ({ open, gridRef, routeVal, onClose, schSave }) { const classes = useStyles() // const abc = schSave const dispatch = useDispatch() console.log(open) useEffect(() => { dispatch(fetchRole()) }, [dispatch]) var homeURL = '' if (routeVal === 'home') { homeURL = `${window.location.protocol}\\\\${window.location.host}/` } else { homeURL = `${window.location.protocol}\\\\${window.location.host}/eda/#/${routeVal}` } console.log(homeURL) const handleClose = () => { onClose('') } // handle Notification Snackbar const [snacOpen, setSnacOpen] = React.useState(false) const [message, setMessage] = React.useState('') const handleSnacClick = () => { setSnacOpen(true) } const handleSnacClose = (event, reason) => { if (reason === 'clickaway') { return } setSnacOpen(false) } const auth = useSelector((state) => state.authReducer) // handle schemaname dialog box const [schemanameopen, setSchemaNameOpen] = React.useState(false) const handleSchemaNameOpen = (e) => { e.preventDefault() console.log(e) console.log(routeVal) if (auth.isAuthenticated !== true) { setMessage('You are not Logged In') handleSnacClick() } else { setSchemaNameOpen(true) } } const handleSchemaNameClose = () => { setSchemaNameOpen(false) } return ( Save changes to the untitled circuit? Your changes will be lost if you do not save it. {gridRef && routeVal && } ) } HomeDialog.propTypes = { onClose: PropTypes.func.isRequired, open: PropTypes.bool.isRequired, gridRef: PropTypes.object.isRequired, schSave: PropTypes.object.isRequired, routeVal: PropTypes.string.isRequired } export function SchematicNameDialog ({ open, gridRef, routeVal, onClose, schSave }) { const classes = useStyles() const dispatch = useDispatch() console.log(open) useEffect(() => { dispatch(fetchRole()) }, [dispatch]) var homeURL = '' console.log(routeVal) if (routeVal === 'home') { homeURL = `${window.location.protocol}\\\\${window.location.host}/` } else { homeURL = `${window.location.protocol}\\\\${window.location.host}/eda/#/${routeVal}` } console.log(homeURL) const handleClose = () => { onClose('') } // handle Notification Snackbar const [snacOpen, setSnacOpen] = React.useState(false) const [message, setMessage] = React.useState('') const handleSnacClick = () => { setSnacOpen(true) } const handleSave = (version, newSave, save_id) => { if (!newSave) { // window.location = '#/editor?id=' + window.location.href.split('id=')[1].substr(0, 36) + '&version=' + version + '&branch=' + window.location.href.split('branch=')[1].substr(0) // window.location.reload() // window.open(homeURL, '_self') window.location = homeURL window.location.reload() } else { // window.location = '#/editor?id=' + save_id + '&version=' + version + '&branch=master' // window.location.reload() window.open(homeURL, '_self') } } const handleSnacClose = (event, reason) => { if (reason === 'clickaway') { return } setSnacOpen(false) } const auth = useSelector((state) => state.authReducer) // Image Export of Schematic Diagram async function exportImage (type) { const svg = document.querySelector('#divGrid > svg').cloneNode(true) svg.removeAttribute('style') svg.setAttribute('width', gridRef.current.scrollWidth) svg.setAttribute('height', gridRef.current.scrollHeight) const canvas = document.createElement('canvas') canvas.width = gridRef.current.scrollWidth canvas.height = gridRef.current.scrollHeight canvas.style.width = canvas.width + 'px' canvas.style.height = canvas.height + 'px' const images = svg.getElementsByTagName('image') for (const image of images) { const data = await fetch(image.getAttribute('xlink:href')).then((v) => { return v.text() }) image.removeAttribute('xlink:href') image.setAttribute( 'href', 'data:image/svg+xml;base64,' + window.btoa(data) ) } const ctx = canvas.getContext('2d') ctx.mozImageSmoothingEnabled = true ctx.webkitImageSmoothingEnabled = true ctx.msImageSmoothingEnabled = true ctx.imageSmoothingEnabled = true const pixelRatio = window.devicePixelRatio || 1 ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0) return new Promise((resolve) => { if (type === 'SVG') { const svgdata = new XMLSerializer().serializeToString(svg) resolve('' + svgdata) return } const v = Canvg.fromString(ctx, svg.outerHTML) v.render().then(() => { let image = '' if (type === 'JPG') { const imgdata = ctx.getImageData(0, 0, canvas.width, canvas.height) for (let i = 0; i < imgdata.data.length; i += 4) { if (imgdata.data[i + 3] === 0) { imgdata.data[i] = 255 imgdata.data[i + 1] = 255 imgdata.data[i + 2] = 255 imgdata.data[i + 3] = 255 } } ctx.putImageData(imgdata, 0, 0) image = canvas.toDataURL('image/jpeg', 1.0) } else { if (type === 'PNG') { image = canvas.toDataURL('image/png') } } resolve(image) }) }) } // handle Save Schematic onCloud const handleSchSave = () => { if (auth.isAuthenticated !== true) { setMessage('You are not Logged In') handleSnacClick() } else { const xml = Save() dispatch(setSchXmlData(xml)) const title = schSave.title const description = schSave.description exportImage('PNG').then((res) => { dispatch(saveSchematic(title, description, xml, res, false, null, handleSave)) }) setMessage('Saved Successfully') handleSnacClick() } } const titleHandler = (e) => { e.preventDefault() dispatch(setTitle(`* ${e.target.value}`)) dispatch(setSchTitle(`${e.target.value}`)) } return ( Confirm the Title for the Schematic ) } SchematicNameDialog.propTypes = { onClose: PropTypes.func.isRequired, open: PropTypes.bool.isRequired, gridRef: PropTypes.object.isRequired, schSave: PropTypes.object.isRequired, routeVal: PropTypes.string.isRequired } // Dialog box to open saved Schematics export function OpenSchDialog (props) { const { open, close, openLocal, openKicad } = props const [isLocal, setisLocal] = React.useState(true) const [isGallery, setisGallery] = React.useState(false) const [isKicad, setisKicad] = React.useState(false) const schSave = useSelector(state => state.saveSchematicReducer) const auth = useSelector(state => state.authReducer) const schematics = useSelector(state => state.dashboardReducer.schematics) const gallerySchSample = useSelector(state => state.galleryReducer.schematics) const dispatch = useDispatch() function getDate (jsonDate) { const json = jsonDate const date = new Date(json) const dateTimeFormat = new Intl.DateTimeFormat('en', { month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit' }) const [{ value: month }, , { value: day }, , { value: hour }, , { value: minute }, , { value: second }] = dateTimeFormat.formatToParts(date) return `${day} ${month} ${hour}:${minute}:${second}` } return ( {'Open Schematic'} {isLocal ?
: isGallery ? {/* Listing Gallery Schematics */} Name Description Launch <> {gallerySchSample.map( (sch) => { return ( {sch.name} {sch.description !== null ? sch.description.slice(0, 30) + (sch.description.length < 30 ? '' : '...') : '-'} ) } )}
: isKicad ?
: {/* Listing Saved Schematics */} {schematics.length === 0 ? Hey {auth.user.username} , You dont have any saved schematics... : Name Description Created Updated Launch <> {schematics.map( (sch) => { return ( {sch.name} {sch.description !== null ? sch.description.slice(0, 30) + (sch.description.length < 30 ? '' : '...') : '-'} {getDate(sch.create_time)} {getDate(sch.save_time)} ) } )}
}
}
{auth.isAuthenticated !== true ? <> : }
) } OpenSchDialog.propTypes = { close: PropTypes.func.isRequired, open: PropTypes.bool.isRequired, openLocal: PropTypes.func.isRequired, openKicad: PropTypes.func.isRequired } function SimpleSnackbar ({ open, close, message }) { return (
} />
) } SimpleSnackbar.propTypes = { open: PropTypes.bool, close: PropTypes.func, message: PropTypes.string } function TabPanel (props) { const { children, value, index, ...other } = props return ( ) } TabPanel.propTypes = { children: PropTypes.node, index: PropTypes.any.isRequired, value: PropTypes.any.isRequired } function LibraryRow ({ library }) { const dispatch = useDispatch() const [open, setopen] = React.useState(false) const classes = useStyles() const components = useSelector(state => state.schematicEditorReducer.components) const handleAppply = (lib) => { dispatch(fetchLibrary(lib.id)) } const handleUnapply = (lib) => { dispatch(removeLibrary(lib.id)) } const handleOpen = () => { if (components[library.id].length === 0) { dispatch(fetchComponents(library.id)) } setopen(!open) } return ( {open ? : } {(!library.default && !library.additional) && } {library.active ? : } {(components[library.id]) && {components[library.id].map(component => { return ( ) })} } ) } LibraryRow.propTypes = { library: PropTypes.any.isRequired } export function SelectLibrariesModal ({ open, close }) { const allLibraries = useSelector(state => state.schematicEditorReducer.allLibraries) const libraries = useSelector(state => state.schematicEditorReducer.libraries) const uploadSuccess = useSelector(state => state.schematicEditorReducer.uploadSuccess) const auth = useSelector(state => state.authReducer) const dispatch = useDispatch() const classes = useStyles() const [activeLibraries, setActiveLibraries] = React.useState(allLibraries) const [message, setMessage] = React.useState('') const [uploadDisable, setUploadDisable] = React.useState(false) const [tabValue, setTabValue] = React.useState(0) useEffect(() => { if (open === true) { dispatch(fetchAllLibraries()) } }, [dispatch, open]) useEffect(() => { setUploadDisable(false) if (uploadSuccess === true) { setMessage('Upload Successful') setsnacOpen(true) dispatch(resetUploadSuccess()) dispatch(fetchAllLibraries()) } if (uploadSuccess === false) { setMessage('An Error Occured') setsnacOpen(true) dispatch(resetUploadSuccess()) } }, [dispatch, uploadSuccess]) useEffect(() => { const updateActive = () => { const active = [] if (allLibraries !== undefined) { allLibraries.forEach((element) => { element.active = false libraries.forEach(ele => { if (ele.id === element.id) { element.active = true } }) active.push(element) }) } setActiveLibraries(active) } if (allLibraries !== undefined) { updateActive() } }, [libraries, allLibraries]) const fileUpload = React.useRef(null) const handlFileUpload = (event) => { setUploadDisable(true) const files = event.target.files const formData = new FormData() for (let i = 0; i < files.length; i++) { formData.append('files', files[i]) } dispatch(uploadLibrary(formData)) } const handleLibUploadOpen = () => { fileUpload.current.click() } const [snacOpen, setsnacOpen] = React.useState(false) const handleSnacClose = () => { setsnacOpen(false) } const handleTabChange = (event, value) => { setTabValue(value) } return ( {'Manage libraries in the workspace'} {/* */} {activeLibraries !== undefined ? <> {allLibraries.find(lib => { return lib.default === true }) ? allLibraries.map(library => { if (library.default) { return } return <> }) :

Nothing to show

}
{allLibraries.find(lib => { return lib.additional === true }) ? allLibraries.map(library => { if (library.additional) { return } return <> }) :

Nothing to show

}
{allLibraries.find(lib => { return (lib.additional === false && lib.default === false) }) ? allLibraries.map(library => { if (!library.default && !library.additional) { return } return <> }) :

Nothing to show

}
:

Nothing To Show

}
{auth.isAuthenticated && tabValue === 2 &&
{uploadDisable &&
Files are being uploaded please wait.
}
}
) } SelectLibrariesModal.propTypes = { open: PropTypes.bool.isRequired, close: PropTypes.func.isRequired } ================================================ FILE: eda-frontend/src/components/SchematicEditor/VersionComponent.js ================================================ /* eslint-disable camelcase */ import React from 'react' import { Button, IconButton } from '@material-ui/core' import DeleteOutlineIcon from '@material-ui/icons/DeleteOutline' import PropTypes from 'prop-types' import api from '../../utils/Api' import Popover from '@material-ui/core/Popover' import Typography from '@material-ui/core/Typography' import { makeStyles } from '@material-ui/core/styles' const useStyles = makeStyles((theme) => ({ typography: { padding: theme.spacing(2) } })) export default function VersionComponent ({ name, date, time, save_id, version, branch, setVersions, setBranchOpen, projectBranch, projectVersion, ltiId }) { const classes = useStyles() const [anchorEl, setAnchorEl] = React.useState(null) const [popoverOpen, setPopoverOpen] = React.useState(false) const handleClickPopover = (e) => { setAnchorEl(e.currentTarget) setPopoverOpen(true) } const handleClosePopover = () => { setAnchorEl(null) setPopoverOpen(false) } const handleClick = (e) => { e.preventDefault() if (!ltiId) { window.location = '#/editor?id=' + save_id + '&version=' + version + '&branch=' + branch } else { window.location = '#/editor?id=' + save_id + '&version=' + version + '<i_id=' + ltiId + '&branch=' + branch } window.location.reload() } const checkActiveVersionOrProject = (version, branch) => { if (version === window.location.href.split('version=')[1].substr(0, 20) && branch === decodeURI(window.location.href.split('branch=')[1])) return false if (version === projectVersion && branch === projectBranch) return false return true } const handleVersionDelete = (save_id, version, branch) => { const config = { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } } const token = localStorage.getItem('esim_token') if (token) { config.headers.Authorization = `Token ${token}` } api.delete(`/save/${save_id}/${version}/${branch}`, config).then(resp => { api .get( 'save/versions/' + window.location.href.split('?id=')[1].substring(0, 36), config ) .then((resp) => { console.log(resp.data) const versionsAccordingFreq = {} resp.data.forEach((value) => { const d = new Date(value.save_time) value.date = d.getDate() + '/' + parseInt(d.getMonth() + 1) + '/' + d.getFullYear() value.time = d.getHours() + ':' + d.getMinutes() if (d.getMinutes() < 10) { value.time = d.getHours() + ':0' + d.getMinutes() } versionsAccordingFreq[value.branch] ? versionsAccordingFreq[value.branch].push(value) : versionsAccordingFreq[value.branch] = [value] }) setVersions(Object.entries(versionsAccordingFreq).reverse()) const temp = [] for (let i = 0; i < Object.entries(versionsAccordingFreq).length; i++) { console.log(Object.entries(versionsAccordingFreq)[0]) if (decodeURI(window.location.href.split('branch=')[1]) === Object.entries(versionsAccordingFreq)[i][0]) { temp.push(true) } else { temp.push(false) } } setBranchOpen(temp.reverse()) }) .catch((err) => { console.log(err) }) }).catch(err => { console.log(err) }) } return (
}
) } VersionComponent.propTypes = { name: PropTypes.string, date: PropTypes.string, time: PropTypes.string, save_id: PropTypes.string, version: PropTypes.string, branch: PropTypes.string, setVersions: PropTypes.func, setBranchOpen: PropTypes.func, projectBranch: PropTypes.string, projectVersion: PropTypes.string, ltiId: PropTypes.string } ================================================ FILE: eda-frontend/src/components/Shared/Graph.js ================================================ /* eslint-disable react/prop-types */ import React, { Component } from 'react' import Chart from 'chart.js' import 'chartjs-plugin-colorschemes' let lineGraph // Chart Style Options Chart.defaults.global.defaultFontColor = '#e6e6e6' class Graph extends Component { chartRef = React.createRef(); componentDidMount () { this.buildChart() } componentDidUpdate () { this.buildChart() } buildChart = () => { const myChartRef = this.chartRef.current.getContext('2d') const { x, y, labels, xscale, yscale, precision } = this.props // ticks are the number of points to show on x axis const scales = { G: { value: 1000000000, ticks: 3 }, M: { value: 1000000, ticks: 3 }, K: { value: 1000, ticks: 3 }, si: { value: 1, ticks: 3 }, m: { value: 0.001, ticks: 5 }, u: { value: 0.000001, ticks: 7 }, n: { value: 0.000000001, ticks: 9 }, p: { value: 0.000000000001, ticks: 11 } } if (typeof lineGraph !== 'undefined') lineGraph.destroy() const dataset = () => { var arr = [] for (var i = 0; i < y.length; i++) { if (labels[0] === labels[i + 1]) continue arr.push({ label: labels[i + 1], data: y[i].map(e => (e / scales[yscale].value).toFixed(precision)), fill: false // borderColor: getRandomColor() }) } return arr } const selectLabel = () => { if (labels[0] === 'time') { if (xscale === 'si') { return 'Time in S' } else { return `Time in ${xscale}S` } } else if (labels[0] === 'v-sweep') { if (xscale === 'si') { return 'Voltage in V' } else { return `Voltage in ${xscale}V` } } else if (labels[0] === 'frequency') { if (xscale === 'si') { return 'frequency in Hz' } else { return `frequency in ${xscale}Hz` } } else { if (xscale === 'si') { return `${labels[0]}` } else { return `${labels[0]} in ${xscale}` } } } lineGraph = new Chart(myChartRef, { type: 'line', data: { // labels: x, labels: x.map(e => (e / scales[xscale].value).toFixed(precision)), datasets: dataset() }, options: { plugins: { colorschemes: { scheme: 'brewer.SetOne9' } }, responsive: true, title: { display: false, text: '' }, tooltips: { mode: 'index', intersect: false, backgroundColor: '#39604d' }, hover: { mode: 'nearest', intersect: true }, scales: { xAxes: [ { display: true, gridLines: { color: '#67737e' }, scaleLabel: { display: true, labelString: selectLabel() }, ticks: { maxTicksLimit: scales[xscale].ticks } } ], yAxes: [ { display: true, scaleLabel: { display: false, labelString: 'Volatge ( V )' }, gridLines: { color: '#67737e' }, ticks: { // beginAtZero: true, fontSize: 15, padding: 25 } } ] } } }) }; render () { return (
) } } export default Graph ================================================ FILE: eda-frontend/src/components/Shared/Layout.js ================================================ import React from 'react' import PropTypes from 'prop-types' import { AppBar, IconButton, Toolbar } from '@material-ui/core' import { makeStyles } from '@material-ui/core/styles' import MenuIcon from '@material-ui/icons/Menu' import LayoutSidebar from './LayoutSidebar' const useStyles = makeStyles((theme) => ({ appBar: { borderBottom: `1px solid ${theme.palette.divider}`, zIndex: theme.zIndex.drawer + 1 }, menuButton: { marginRight: theme.spacing(1), padding: theme.spacing(1), [theme.breakpoints.up('md')]: { display: 'none' } } })) // Common layout for Dashboard and Schematic Editor function Layout ({ header, resToolbar, sidebar }) { const classes = useStyles() const [mobileOpen, setMobileOpen] = React.useState(false) const handleDrawerToggle = () => { setMobileOpen(!mobileOpen) } return ( <> {/* Header and Toolbar of layout */} {header} {resToolbar} {/* Left Sidebar for Layout */} {sidebar} ) } Layout.propTypes = { header: PropTypes.element, resToolbar: PropTypes.element, sidebar: PropTypes.element } export default Layout ================================================ FILE: eda-frontend/src/components/Shared/LayoutMain.js ================================================ import React from 'react' import PropTypes from 'prop-types' import { makeStyles } from '@material-ui/core/styles' const useStyles = makeStyles((theme) => ({ content: { flexGrow: 1, padding: theme.spacing(5, 3), backgroundColor: '#f4f6f8', height: '100vh', overflow: 'auto' } })) // Display main content of layout export default function LayoutMain ({ children }) { const classes = useStyles() return ( <>
{children}
) } LayoutMain.propTypes = { children: PropTypes.array.isRequired } ================================================ FILE: eda-frontend/src/components/Shared/LayoutSidebar.js ================================================ import React from 'react' import PropTypes from 'prop-types' import { Drawer, Hidden, IconButton } from '@material-ui/core' import HighlightOffIcon from '@material-ui/icons/HighlightOff' import { makeStyles } from '@material-ui/core/styles' const drawerWidth = 250 const useStyles = makeStyles((theme) => ({ drawer: { [theme.breakpoints.up('md')]: { width: drawerWidth, flexShrink: 0 } }, drawerPaper: { width: drawerWidth } })) // Common layout left side pane for Dashboard and Schematic Editor export default function LayoutSidebar ({ window, mobileOpen, mobileClose, children }) { const classes = useStyles() const container = window !== undefined ? () => window().document.body : undefined return ( <> ) } LayoutSidebar.propTypes = { window: PropTypes.object, mobileOpen: PropTypes.bool.isRequired, mobileClose: PropTypes.func.isRequired, children: PropTypes.element } ================================================ FILE: eda-frontend/src/components/Shared/Navbar.js ================================================ import React, { useEffect } from 'react' import { useHistory, Link as RouterLink } from 'react-router-dom' import { useDispatch } from 'react-redux' import { AppBar, Button, Toolbar, Typography, Link, IconButton, Avatar, Menu, ListItemText, Fade, MenuItem } from '@material-ui/core' import { makeStyles } from '@material-ui/core/styles' import { deepPurple } from '@material-ui/core/colors' import logo from '../../static/logo.png' import store from '../../redux/store' import { authDefault, loadUser, logout } from '../../redux/actions/index' const useStyles = makeStyles((theme) => ({ appBar: { borderBottom: `1px solid ${theme.palette.divider}` }, root: { width: 500 }, toolbar: { flexWrap: 'wrap' }, toolbarTitle: { flexGrow: 1 }, link: { margin: theme.spacing(1, 1.5) }, button: { marginRight: theme.spacing(0.7) }, small: { width: theme.spacing(3.7), height: theme.spacing(3.7) }, purple: { width: theme.spacing(3.75), height: theme.spacing(3.75), color: theme.palette.getContrastText(deepPurple[500]), backgroundColor: deepPurple[500], fontSize: '17px' }, typography: { padding: theme.spacing(2) } })) // Common navbar for Dashboard, Home, Simulator, Gallery, etc. export function Header () { const history = useHistory() const classes = useStyles() const [anchorEl, setAnchorEl] = React.useState(null) const auth = store.getState().authReducer const dispatch = useDispatch() const handleClick = (event) => { setAnchorEl(event.currentTarget) } const handleClose = () => { setAnchorEl(null) } var homeURL = `${window.location.protocol}\\\\${window.location.host}/` useEffect(() => { function checkUserData () { const userToken = localStorage.getItem('esim_token') if (userToken && userToken !== '') { dispatch(loadUser()) } else { dispatch(authDefault()) } } window.addEventListener('storage', checkUserData) return () => { window.removeEventListener('storage', checkUserData) } }, [dispatch, history]) return ( <> {/* Display logo */} eSim {/* Display relative link to other pages */} {/* Display login option or user menu as per authenticated status */} { (!auth.isAuthenticated ? () : (<> {auth.user.username.charAt(0).toUpperCase()} My Profile My Schematics Change password { store.dispatch(logout(history)) }}> Logout ) ) } ) } export default function Navbar () { const classes = useStyles() return (
) } ================================================ FILE: eda-frontend/src/components/Shared/Notice.js ================================================ import React from 'react' import PropTypes from 'prop-types' import './helper/Notice.css' import { IconButton } from '@material-ui/core' import CloseIcon from '@material-ui/icons/Close' import Button from '@material-ui/core/Button' import Dialog from '@material-ui/core/Dialog' import DialogActions from '@material-ui/core/DialogActions' import DialogContent from '@material-ui/core/DialogContent' import DialogContentText from '@material-ui/core/DialogContentText' import DialogTitle from '@material-ui/core/DialogTitle' import { SpinnerDotted } from 'spinners-react' export function ScrollDialog (txt) { const [open, setOpen] = React.useState(true) const [scroll, setScroll] = React.useState('paper') const handleClickOpen = () => { setOpen(true) setScroll('paper') } const handleClose = () => { setOpen(false) } const descriptionElementRef = React.useRef(null) React.useEffect(() => { if (open) { const { current: descriptionElement } = descriptionElementRef if (descriptionElement !== null) { descriptionElement.focus() } } }, [open]) return (
Error Details {
{txt.txt} 
}
) } export default function Notice ({ status, msg, open, close }) { // open = true // status = 'success' const MAX_CHARS = 180 const err = ((msg.length) > MAX_CHARS) ? msg.substring(0, MAX_CHARS) + '...' : msg.substring(0, MAX_CHARS) if (open === true) { switch (status) { case 'loading': return (
Loading...
) case 'success': return (
Success - Simulation ran successfully!
) case 'error': return (
Error- {err}
) default: return (
) } } else { return (
) } } Error.propTypes = { status: PropTypes.string, msg: PropTypes.string, close: PropTypes.func, open: PropTypes.bool } ================================================ FILE: eda-frontend/src/components/Shared/SimulationScreen.js ================================================ import React, { useEffect, useState } from 'react' import PropTypes from 'prop-types' import { Slide, Button, Dialog, AppBar, Toolbar, IconButton, Typography, Grid, TextField, Paper, Container, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, MenuItem, Select, FormControl, InputLabel } from '@material-ui/core' import { makeStyles } from '@material-ui/core/styles' import CloseIcon from '@material-ui/icons/Close' import { useSelector } from 'react-redux' import api from '../../utils/Api' import queryString from 'query-string' import Graph from './Graph' const FileSaver = require('file-saver') const Transition = React.forwardRef(function Transition (props, ref) { return }) const useStyles = makeStyles((theme) => ({ appBar: { position: 'relative' }, title: { marginLeft: theme.spacing(2), flex: 1 }, header: { padding: theme.spacing(5, 0, 6), color: '#fff' }, paper: { padding: theme.spacing(2), textAlign: 'center', backgroundColor: '#404040', color: '#fff' } })) // {details:{},title:''} simResults export default function SimulationScreen ({ open, close, isResult, taskId, simType = 'NgSpiceSimulator' }) { const classes = useStyles() const result = useSelector((state) => state.simulationReducer) const stitle = useSelector((state) => state.saveSchematicReducer.title) const netlist = useSelector((state) => state.netlistReducer.netlist) const [xscale, setXScale] = React.useState('si') const [yscale, setYScale] = React.useState('si') const [scalesNonGraphArray, setScalesNonGraph] = useState([]) const [scalesNonGraphArrayCompare, setScalesNonGraphCompare] = useState([]) const [exactDecimal, setExactDecimal] = useState([]) const [exactDecimalCompare, setExactDecimalCompare] = useState([]) const [notation, setNotation] = React.useState('Engineering') const [precision, setPrecision] = React.useState(5) const [history, setHistory] = React.useState('') const [historyId, setHistoryId] = React.useState('') const [comparingSim, setComparingSim] = React.useState('') const [compare, setCompare] = React.useState(false) const [compareNetlist, setCompareNetlist] = React.useState(false) const precisionArr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] const scalesNonGraph = [] const scalesNonGraphCompare = [] const exactDecimalArray = [] const exactDecimalArrayCompare = [] const scales = { G: 1000000000, M: 1000000, K: 1000, si: 1, m: 0.001, u: 0.000001, n: 0.000000001, p: 0.000000000001 } useEffect(() => { if (close) { setHistoryId('') setCompare(false) setComparingSim('') } }, [close]) useEffect(() => { if (open) { const url = queryString.parse(window.location.href.split('editor?')[1]) let getUrl = '' const token = localStorage.getItem('esim_token') const config = { headers: { 'Content-Type': 'application/json' } } if (url.id) { getUrl = `simulation/history/${url.id}/${url.version}/${url.branch}/${simType}` } else { getUrl = `simulation/history/simulator/${simType}` } if (token) { config.headers.Authorization = `Token ${token}` api.get(getUrl, config).then(res => { const arr = [] const temp2 = (result.isGraph === 'true') res.data.map((ele, index) => { ele.simulation_time = new Date(ele.simulation_time) if (ele.result === null) { arr.push(index) } else { var temp = (ele.result.graph === 'true') if (!ele.result.graph || temp !== temp2) { arr.push(index) } } if (ele.task === taskId) { arr.push(index) } return 0 }) for (let i = arr.length - 1; i >= 0; i--) { res.data.splice(arr[i], 1) } setHistory(res.data) }).catch(err => { console.log(err) }) } } // eslint-disable-next-line }, [open]) const handleChangeSim = (e) => { setHistoryId(e.target.value) let schematic = [] if (e.target.value !== '') { setCompare(true) history.forEach(element => { const data = element.result.data if (element.id === e.target.value) { if (element.result.graph === 'true') { const simResultGraph = { labels: [], x_points: [], y_points: [] } // populate the labels for (let i = 0; i < data.length; i++) { simResultGraph.labels[0] = data[i].labels[0] const lab = data[i].labels // lab is an array containeing labels names ['time','abc','def'] simResultGraph.x_points = data[0].x // labels for (let x = 1; x < lab.length; x++) { simResultGraph.labels.push(lab[x]) } // populate y_points for (let z = 0; z < data[i].y.length; z++) { simResultGraph.y_points.push(data[i].y[z]) } } simResultGraph.x_points = simResultGraph.x_points.map(d => parseFloat(d)) for (let i1 = 0; i1 < simResultGraph.y_points.length; i1++) { simResultGraph.y_points[i1] = simResultGraph.y_points[i1].map(d => parseFloat(d)) } schematic = simResultGraph let val, idx setScales(1, val, idx, null, null, schematic) } else { const simResultText = [] for (let i = 0; i < data.length; i++) { let postfixUnit = '' if (data[i][0].includes('#branch')) { postfixUnit = 'A' } else if (data[i][0].includes('transfer_function')) { postfixUnit = '' } else if (data[i][0].includes('impedance')) { postfixUnit = 'Ohm' } else { if (data[i][0][0] !== 'V') { data[i][0] = `V(${data[i][0]})` } postfixUnit = 'V' } simResultText.push(data[i][0] + ' ' + data[i][1] + ' ' + parseFloat(data[i][2]) + ' ' + postfixUnit + '\n') } schematic = simResultText addScalesNonGraph(0, schematic, exactDecimalArrayCompare, scalesNonGraphCompare, setScalesNonGraphCompare, setExactDecimalCompare) } setCompareNetlist(element.netlist) } }) setComparingSim(schematic) } else { setCompare(false) } } // DO NOT CHANGE THIS FUNCTION const toFixed = (x) => { let e = 0 if (Math.abs(x) < 1.0) { e = parseInt(x.toString().split('e-')[1]) if (e) { x *= Math.pow(10, e - 1) x = '0.' + (new Array(e)).join('0') + x.toString().substring(2) } } else { e = parseInt(x.toString().split('+')[1]) if (e > 20) { e -= 20 x /= Math.pow(10, e) x += (new Array(e + 1)).join('0') } } return x } // DO NOT CHANGE const decimalCount = (num1, num2) => { const difference = toFixed(num1) - toFixed(num2) const numStr = toFixed(difference).toString() if (Math.abs(difference) < 1) { if (numStr.includes('.')) { return ['decimal', numStr.split('.')[1].length] } } else { return ['notDecimal', numStr.split('.')[0].length] } return ['notDecimal', 1] } // DO NOT CHANGE const decimalCountNonGraph = (num) => { const numStr = num.toString() if (Math.abs(num) < 1) { if (numStr.includes('.')) { const afterDeci = numStr.split('.')[1] let count = 0 while (afterDeci[count] === '0') { count++ } return ['decimal', count + 2] // count + 2 to adjust with the scaling feature. 0.000xyz will become xyz.abc mUnit } } else { return ['notDecimal', numStr.split('.')[0].length] } return ['notDecimal', 1] } // DO NOT CHANGE const exactDecimalCount = (num) => { const numStr = num.toString() if (Math.abs(num) < 1) { if (numStr.includes('.')) { const afterDeci = numStr.split('.')[1] let count = 0 while (afterDeci[count] === '0') { count++ } return ['decimal', -1 * (count + 1)] // count + 2 to adjust with the scaling feature. 0.000xyz will become xyz.abc mUnit } } else { const beforeDeci = numStr.split('.')[0] return ['notDecimal', (beforeDeci.length - 1)] } return ['notDecimal', 0] } useEffect(() => { if (isResult === true) { let g, val, idx if (result.graph !== {} && result.isGraph !== 'false') { g = 1 setScales(g, val, idx, null, null, result.graph) } else { g = 0 addScalesNonGraph(g, result.text, exactDecimalArray, scalesNonGraph, setScalesNonGraph, setExactDecimal) } } // eslint-disable-next-line }, [isResult]) // DO NOT CHANGE const addScalesNonGraph = (g, data, arr, scale, setScaleFunc, setStateFunc) => { data.forEach((line, index) => { setScales(g, parseFloat(line.split(' ')[2]), index, scale, setScaleFunc) const count = exactDecimalCount(parseFloat(line.split(' ')[2])) arr.push(count[1]) }) setStateFunc(arr) } const setScales = (g, val, idx, scale = null, setScaleFunc = null, data = null) => { let countX, countY if (g === 1) { countX = decimalCount(Math.min(...data.x_points), Math.max(...data.x_points)) countY = decimalCount(Math.min(...data.y_points[0]), Math.max(...data.y_points[0])) } else { countX = decimalCountNonGraph(val) countY = countX // not required. used only countX for nongraphical output } if (countX[0] === 'decimal') { if (countX[1] > 0 && countX[1] <= 4) { if (g === 1) { setXScale('m') } else { if (scale.length <= idx || scale.length === 0) { scale.push('m') setScaleFunc(scale) } else { scale[idx] = 'm' setScaleFunc(scale) } } } else if (countX[1] > 4 && countX[1] <= 7) { if (g === 1) { setXScale('u') } else { if (scale.length <= idx || scale.length === 0) { scale.push('u') setScaleFunc(scale) } else { scale[idx] = 'u' setScaleFunc(scale) } } } else if (countX[1] > 7 && countX[1] <= 10) { if (g === 1) { setXScale('n') } else { if (scale.length <= idx || scale.length === 0) { scale.push('n') setScaleFunc(scale) } else { scale[idx] = 'n' setScaleFunc(scale) } } } else if (countX[1] > 10 && countX[1] <= 12) { if (g === 1) { setXScale('p') } else { if (scale.length <= idx || scale.length === 0) { scale.push('p') setScaleFunc(scale) } else { scale[idx] = 'p' setScaleFunc(scale) } } } } else { if (countX[1] > 0 && countX[1] <= 4) { if (g === 1) { setXScale('si') } else { if (scale.length <= idx || scale.length === 0) { scale.push('si') setScaleFunc(scale) } else { scale[idx] = 'si' setScaleFunc(scale) } } } else if (countX[1] > 4 && countX[1] <= 7) { if (g === 1) { setXScale('K') } else { if (scale.length <= idx || scale.length === 0) { scale.push('K') setScaleFunc(scale) } else { scale[idx] = 'K' setScaleFunc(scale) } } } else if (countX[1] > 7 && countX[1] <= 10) { if (g === 1) { setXScale('M') } else { if (scale.length <= idx || scale.length === 0) { scale.push('M') setScaleFunc(scale) } else { scale[idx] = 'M' setScaleFunc(scale) } } } else if (countX[1] > 10) { if (g === 1) { setXScale('G') } else { if (scale.length <= idx || scale.length === 0) { scale.push('G') setScaleFunc(scale) } else { scale[idx] = 'G' setScaleFunc(scale) } } } } if (countY[0] === 'decimal') { if (countY[1] > 0 && countY[1] <= 4) { setYScale('m') } else if (countY[1] > 4 && countY[1] <= 7) { setYScale('u') } else if (countY[1] > 7 && countY[1] <= 10) { setYScale('n') } else if (countY[1] > 10 && countY[1] <= 12) { setYScale('p') } } else { if (countY[1] > 0 && countY[1] <= 4) { setYScale('si') } else if (countY[1] > 4 && countY[1] <= 7) { setYScale('K') } else if (countY[1] > 7 && countY[1] <= 10) { setYScale('M') } else if (countY[1] > 10) { setYScale('G') } } } const handleXScale = (evt) => { setXScale(evt.target.value) } const handleYScale = (evt) => { setYScale(evt.target.value) } const handlePrecision = (evt) => { setPrecision(evt.target.value) } const handleNotation = (evt) => { setNotation(evt.target.value) } const generateCSV = () => { let headings = '' result.graph.labels.forEach(label => { headings = headings + label + ',' }) headings = headings.slice(0, -1) headings += '\n' let downloadString = '' for (let x = 0; x < result.graph.x_points.length; x++) { downloadString += result.graph.x_points[x] for (let y = 0; y < result.graph.y_points.length; y++) { downloadString = downloadString + ',' + result.graph.y_points[y][x] } downloadString += '\n' } downloadString = headings.concat(downloadString) return downloadString } const handleCsvDownload = () => { const downloadString = generateCSV() const blob = new Blob([downloadString], { type: 'text/plain;charset=utf-8' }) FileSaver.saveAs(blob, 'graph_points_eSim_on_cloud.csv') } return (
Simulation Result {/* Card to display simualtion result screen header */} {result.title} Simulation Result for {stitle} {/* Display graph result */} {isResult === true ? <> { (result.graph !== {} && result.isGraph === 'true') ? GRAPH OUTPUT
{ precisionArr.map((d, i) => { return ( ) }) } {history && Compare simulation } {result.isGraph === 'true' && !compare && }
{!compare && } {compare && comparingSim &&
{ result.graph.labels.map(ele => { return {ele} }) } Max value {(Math.max(...result.graph.x_points) / scales[xscale]).toFixed(precision)} { result.graph.y_points.map(ele => { return {(Math.max(...ele) / scales[yscale]).toFixed(precision)} })} Min value {(Math.min(...result.graph.x_points) / scales[xscale]).toFixed(precision)} { result.graph.y_points.map(ele => { return {Math.min(...ele) / scales[yscale]} })}
{ comparingSim.labels.map(ele => { return {ele} }) } Max value {(Math.max(...comparingSim.x_points) / scales[xscale]).toFixed(precision)} { comparingSim.y_points.map(ele => { return {(Math.max(...ele) / scales[yscale]).toFixed(precision)} })} Min value {(Math.min(...comparingSim.x_points) / scales[xscale]).toFixed(precision)} { comparingSim.y_points.map(ele => { return {(Math.min(...ele) / scales[yscale]).toFixed(precision)} })}
}
{compare &&

Current Netlist

{netlist.split('\n').map((i, key) => { return

{i}

})}

Compared Netlist

{compareNetlist.split('\n').map((i, key) => { return

{i}

})}
}
: (result.isGraph === 'true') ? SOMETHING WENT WRONG PLEASE CHECK THE SIMULATION PARAMETERS. : } { (result.isGraph === 'false') ? OUTPUT
{ precisionArr.map((d, i) => { return ( ) }) } {history && Compare simulation }
Node/Branch Value Unit {result.text.map((line, index) => ( {line.split('=')[0]} {(line.split(' ')[3] === '\n') ? (parseFloat(line.split(' ')[2])) : (notation === 'Scientific' ? ((parseFloat(line.split(' ')[2]) / Math.pow(10, exactDecimal[index])).toFixed(precision).toString() + 'e' + ((exactDecimal[index]) >= 0 ? '+' + (exactDecimal[index]).toString() : exactDecimal[index]).toString()) : (parseFloat(line.split(' ')[2]) / scales[scalesNonGraphArray[index]]).toFixed(precision))} {(scalesNonGraphArray[index] === 'si' || notation === 'Scientific' || line.split(' ')[3] === '\n') ? '' : scalesNonGraphArray[index]}{line.split(' ')[3]} )) }
{compare && Node/Branch Value Unit {comparingSim.map((line, index) => { return ( {line.split('=')[0]} {(line.split(' ')[3] === '\n') ? (parseFloat(line.split(' ')[2])) : (notation === 'Scientific' ? ((parseFloat(line.split(' ')[2]) / Math.pow(10, exactDecimalCompare[index])).toFixed(precision).toString() + 'e' + ((exactDecimalCompare[index]) >= 0 ? '+' + (exactDecimalCompare[index]).toString() : exactDecimalCompare[index]).toString()) : (parseFloat(line.split(' ')[2]) / scales[scalesNonGraphArrayCompare[index]]).toFixed(precision))} {(scalesNonGraphArrayCompare[index] === 'si' || notation === 'Scientific' || line.split(' ')[3] === '\n') ? '' : scalesNonGraphArrayCompare[index]}{line.split(' ')[3]} ) }) }
}
{compare &&

Current Netlist

{netlist.split('\n').map((i, key) => { return

{i}

})}

Compared Netlist

{compareNetlist.split('\n').map((i, key) => { return

{i}

})}
}
: } : SOMETHING WENT WRONG PLEASE CHECK THE NETLIST. }
) } SimulationScreen.propTypes = { open: PropTypes.bool, close: PropTypes.func, isResult: PropTypes.bool, simType: PropTypes.string, taskId: PropTypes.string // simResults: PropTypes.object } ================================================ FILE: eda-frontend/src/components/Shared/Snackbar.js ================================================ import React from 'react' import PropTypes from 'prop-types' import { Button, Snackbar } from '@material-ui/core' import { useDispatch } from 'react-redux' import MuiAlert from '@material-ui/lab/Alert' function Alert (props) { return } // Schematic delete snackbar export default function SimpleSnackbar ({ open, close, sch, confirmation }) { const dispatch = useDispatch() return ( } > {'Delete ' + sch.name + ' ?'} ) } SimpleSnackbar.propTypes = { open: PropTypes.bool, close: PropTypes.func, sch: PropTypes.object, confirmation: PropTypes.func } ================================================ FILE: eda-frontend/src/components/Shared/helper/Notice.css ================================================ .title{ color: #d9534f; } .error-notice{ margin:5px; /* Make sure to keep some distance from all sides */ -webkit-box-sizing: border-box; -moz-box-sizing: border-box; /* Firefox, other Gecko */ box-sizing: border-box; /* Opera/IE 8+ */ } .notice{ width:99%; background-color: #ffffff; padding:10px; border:1px solid #eee; border-left-width:7px; border-radius: 3px; margin:20px auto; font-family: 'Open Sans', sans-serif; font-size: 16px; align-items: left; justify-content: left; } .danger{ border-left-color: #d9534f; /* Left side border color */ background-color: rgba(217, 83, 79, 0.1); /*Same color as the left border with reduced alpha to 0.1*/ } .danger strong{ color:#d9534f; } .warning{ border-left-color: #f0ad4e; background-color: rgba(240, 173, 78, 0.1); } .warning strong{ color:#f0ad4e; } .success { border-left-color: #82c280; background-color: rgb(224, 250, 223); } .success strong { color: #347e35; } ================================================ FILE: eda-frontend/src/components/Simulator/Editor.js ================================================ import React from 'react' import AceEditor from 'react-ace' import PropTypes from 'prop-types' import 'brace/theme/monokai' import 'brace/theme/github' export default function Editor (props) { // code editor for online spice simulator return ( ) } Editor.propTypes = { code: PropTypes.string, onCodeChange: PropTypes.func, dark: PropTypes.bool } ================================================ FILE: eda-frontend/src/components/Simulator/NetlistUpload.js ================================================ /* eslint-disable react/prop-types */ import React, { Component } from 'react' import { Grid, Button, Paper } from '@material-ui/core' import { withStyles } from '@material-ui/core/styles' import api from '../../utils/Api' const styles = (theme) => ({ paper: { padding: theme.spacing(2), textAlign: 'center', backgroundColor: '#404040', color: '#fff' }, finlabel: { cursor: 'pointer', color: '#9feaf9', padding: theme.spacing(1), border: '2px solid #9feaf9' }, finput: { opacity: 0, position: 'absolute', zIndex: -1 } }) class NetlistUpload extends Component { constructor (props) { super(props) this.state = { file: null, filename: 'Choose Netlist', x_1: [], y1_1: [], y2_1: [] } this.onFormSubmit = this.onFormSubmit.bind(this) this.onChange = this.onChange.bind(this) this.netlistUpload = this.netlistUpload.bind(this) } onChange (e) { this.setState({ file: e.target.files[0], filename: e.target.files[0].name }) } onFormSubmit (e) { // Stop default form submit e.preventDefault() this.netlistUpload(this.state.file) .then((response) => { const res = response.data const getUrl = 'simulation/status/'.concat(res.details.task_id) this.simulationResult(getUrl) }) .catch(function (error) { console.log(error) }) } // Upload the nelist netlistUpload (file) { const token = localStorage.getItem('esim_token') const formData = new FormData() formData.append('file', file) const config = { headers: { 'content-type': 'multipart/form-data' } } if (token) { config.headers.Authorization = `Token ${token}` } return api.post('simulation/upload', formData, config) } // Get the simulation result with task_Id simulationResult (url) { api .get(url) .then((res) => { if (res.data.state === 'PROGRESS' || res.data.state === 'PENDING') { setTimeout(this.simulationResult(url), 1000) } else { this.setState({ x_1: res.data.details.data[0].x, y1_1: res.data.details.data[0].y[0], y2_1: res.data.details.data[0].y[1] }) } }) .then((res) => { }) .catch(function (error) { console.log(error) }) } fileData = () => { if (this.state.file) { return (

File Details:

File Name: {this.state.file.name}

File Type: Ngspice Netlist

) } else { return (

Choose Netlist before pressing UPLOAD button

) } }; render () { const { classes } = this.props return ( <>

SUBMIT NETLIST



{this.fileData()}

GRAPH OUTPUT

) } } export default withStyles(styles, { withTheme: true })(NetlistUpload) ================================================ FILE: eda-frontend/src/components/Simulator/textToFile.js ================================================ import randomstring from 'randomstring' export default function textToFile (data) { // create a file from a blob var myblob = new Blob([data], { type: 'text/plain' }) var fileName = randomstring.generate({ length: 15 }) + '.cir' var file = new File([myblob], fileName, { type: 'text/plain', lastModified: Date.now() }) return file } ================================================ FILE: eda-frontend/src/index.css ================================================ body { margin: 0; padding: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } ================================================ FILE: eda-frontend/src/index.js ================================================ // This is the JavaScript entry point of react application. import React from 'react' import ReactDOM from 'react-dom' import * as serviceWorker from './serviceWorker' import CssBaseline from '@material-ui/core/CssBaseline' import { ThemeProvider } from '@material-ui/core/styles' import theme from './theme' import './index.css' import App from './App' import { Provider } from 'react-redux' import store from './redux/store' ReactDOM.render( {/* CssBaseline kickstart an elegant, consistent, and simple baseline to build upon. */} , document.getElementById('root') ) // If you want your app to work offline and load faster, you can change // unregister() to register() below. Note this comes with some pitfalls. // Learn more about service workers: https://bit.ly/CRA-PWA serviceWorker.unregister() ================================================ FILE: eda-frontend/src/pages/Account/ChangePassword.js ================================================ import React, { useState, useEffect } from 'react' import { Container, Button, Typography, TextField, Card, Avatar, InputAdornment, IconButton } from '@material-ui/core' import { makeStyles } from '@material-ui/core/styles' import Visibility from '@material-ui/icons/Visibility' import VisibilityOff from '@material-ui/icons/VisibilityOff' import LockOutlinedIcon from '@material-ui/icons/LockOutlined' import { useSelector, useDispatch } from 'react-redux' import { changePassword } from '../../redux/actions/index' import { useHistory } from 'react-router-dom' const useStyles = makeStyles((theme) => ({ paper: { marginTop: theme.spacing(20), display: 'flex', flexDirection: 'column', alignItems: 'center', padding: theme.spacing(3, 5) }, avatar: { margin: theme.spacing(1), backgroundColor: theme.palette.primary.main }, form: { width: '100%', // Fix IE 11 issue. marginTop: theme.spacing(1) }, submit: { margin: theme.spacing(1.5, 0) } })) export default function ChangePassword (props) { const classes = useStyles() const account = useSelector(state => state.accountReducer) const query = new URLSearchParams(props.location.search) const url = query.get('url') const dispatch = useDispatch() var homeURL = `${window.location.protocol}\\\\${window.location.host}/` const history = useHistory() useEffect(() => { document.title = 'Change password - eSim ' }, [dispatch]) const [currentPassword, setCurrentPassword] = useState('') const [newPassword, setNewPassword] = useState('') const [reNewPassword, setReNewPassword] = useState('') const [showCurrentPassword, setShowCurrentPassword] = useState(false) const [showNewPassword, setShowNewPassword] = useState(false) const [showReNewPassword, setShowReNewPassword] = useState(false) const handleClickShowNewPassword = () => setShowNewPassword(!showNewPassword) const handleMouseDownNewPassword = () => setShowNewPassword(!showNewPassword) const handleClickShowReNewPassword = () => setShowReNewPassword(!showReNewPassword) const handleMouseDownReNewPassword = () => setShowReNewPassword(!showReNewPassword) const handleClickShowCurrentPassword = () => setShowCurrentPassword(!showCurrentPassword) const handleMouseDownCurrentPassword = () => setShowCurrentPassword(!showCurrentPassword) return ( Change password {/* Display's error messages while signing in */} {account.changePasswordError}
{showCurrentPassword ? : } {/* Handle password visibility */} ) }} type={showCurrentPassword ? 'text' : 'password'} id="currentPassword" value={currentPassword} onChange={e => setCurrentPassword(e.target.value)} autoComplete="current-password" /> {showNewPassword ? : } {/* Handle password visibility */} ) }} type={showNewPassword ? 'text' : 'password'} id="newPassword" value={newPassword} onChange={e => setNewPassword(e.target.value)} autoComplete="new-password" /> {showReNewPassword ? : } {/* Handle password visibility */} ) }} type={showReNewPassword ? 'text' : 'password'} id="reNewPassword" value={reNewPassword} onChange={e => setReNewPassword(e.target.value)} autoComplete="re-new-password" />
) } ================================================ FILE: eda-frontend/src/pages/Dashboard.js ================================================ // Main Layout for user dashboard. import React, { useEffect } from 'react' import { Switch, Route } from 'react-router-dom' import { CssBaseline } from '@material-ui/core' import { makeStyles } from '@material-ui/core/styles' import { Header } from '../components/Shared/Navbar' import Layout from '../components/Shared/Layout' import LayoutMain from '../components/Shared/LayoutMain' import DashboardSidebar from '../components/Dashboard/DashboardSidebar' import DashboardHome from '../components/Dashboard/DashboardHome' import SchematicsList from '../components/Dashboard/SchematicsList' import DashboardOtherProjects from '../components/Dashboard/DashboardOtherProjects' import api from '../utils/Api' const useStyles = makeStyles((theme) => ({ root: { display: 'flex', minHeight: '100vh' }, toolbar: { minHeight: '40px' } })) export default function Dashboard () { const classes = useStyles() const [ltiDetails, setLtiDetails] = React.useState(null) useEffect(() => { document.title = 'Dashboard - eSim ' }) useEffect(() => { const token = localStorage.getItem('esim_token') const config = { headers: { 'Content-Type': 'application/json' } } if (token) { config.headers.Authorization = `Token ${token}` } api.get('lti/exists', config) .then(res => { setLtiDetails(res.data) }).catch(err => console.log(err)) }, []) return (
{/* Schematic editor header and left side pane */} } sidebar={} />
{/* Subroutes under dashboard section */} {ltiDetails !== null && } /> } /> }
) } ================================================ FILE: eda-frontend/src/pages/Gallery.js ================================================ // Main layout for gallery page. import React, { useEffect } from 'react' import PropTypes from 'prop-types' import { Card, Grid, Button, Typography, CardActions, CardContent, Container, CssBaseline, CardActionArea, CardMedia, Tooltip, ButtonBase } from '@material-ui/core' import { makeStyles } from '@material-ui/core/styles' import { Link as RouterLink } from 'react-router-dom' import DeleteIcon from '@material-ui/icons/Delete' import { useDispatch, useSelector } from 'react-redux' import { fetchRole, deleteGallerySch, fetchGallery } from '../redux/actions/index' import SimpleSnackbar from '../components/Shared/Snackbar' const useStyles = makeStyles((theme) => ({ mainHead: { width: '100%', backgroundColor: '#404040', color: '#fff' }, title: { fontSize: 18, color: '#80ff80' }, header: { padding: theme.spacing(5, 0, 6, 0) }, root: { display: 'flex', minHeight: '100vh', backgroundColor: '#f4f6f8' }, media: { marginTop: theme.spacing(3), height: 170 } })) // Card displaying overview of gallery sample schematics. function SchematicCard ({ sch }) { const classes = useStyles() const auth = useSelector(state => state.authReducer) const dispatch = useDispatch() const [snacOpen, setSnacOpen] = React.useState(false) const handleSnacClick = () => { setSnacOpen(true) } const handleSnacClose = (event, reason) => { if (reason === 'clickaway') { return } setSnacOpen(false) } useEffect(() => { dispatch(fetchRole()) }, [dispatch]) return ( <> {sch.name} {sch.description} {console.log(auth.roles)} {auth.roles && auth.roles.is_esim_staff && } ) } SchematicCard.propTypes = { sch: PropTypes.object } // Card displaying eSim gallery page header. function MainCard () { const classes = useStyles() useEffect(() => { document.title = 'Gallery - eSim ' }) return ( eSim Gallery Sample schematics are listed below... ) } export default function Gallery () { const classes = useStyles() const gallerySchSample = useSelector(state => state.galleryReducer.schematics) const dispatch = useDispatch() useEffect(() => { dispatch(fetchGallery()) dispatch(fetchRole()) }, [dispatch]) return (
{/* eSim Gallery Header */} {/* Listing Gallery Schematics */} {console.log(gallerySchSample)} {gallerySchSample.map( (sch) => { return ( ) } )}
) } ================================================ FILE: eda-frontend/src/pages/Home.js ================================================ // Main layout for home page. import React, { useEffect } from 'react' import Button from '@material-ui/core/Button' import Typography from '@material-ui/core/Typography' import { makeStyles } from '@material-ui/core/styles' import Container from '@material-ui/core/Container' import { Link as RouterLink } from 'react-router-dom' import logo from '../static/logo.png' const useStyles = makeStyles((theme) => ({ header: { padding: theme.spacing(23, 0, 6) } })) export default function Home () { const classes = useStyles() useEffect(() => { document.title = 'eSim' }) return (
Logo
eSim on Cloud Online Circuit Simulator



) } ================================================ FILE: eda-frontend/src/pages/LTISetup.js ================================================ // Main Layout for LTI Setup Page import React, { useEffect } from 'react' import { Switch, Route } from 'react-router-dom' import { CssBaseline } from '@material-ui/core' import { makeStyles } from '@material-ui/core/styles' import { Header } from '../components/Shared/Navbar' import Layout from '../components/Shared/Layout' import LayoutMain from '../components/Shared/LayoutMain' import DashboardSidebar from '../components/Dashboard/DashboardSidebar' import DashboardHome from '../components/Dashboard/DashboardHome' import SchematicsList from '../components/Dashboard/SchematicsList' import LTIConfig from '../components/LTI/LTI' const useStyles = makeStyles((theme) => ({ root: { display: 'flex', minHeight: '100vh' }, toolbar: { minHeight: '40px' } })) export default function LTISetup () { const classes = useStyles() // var auth = useSelector(state => state.authReducer) useEffect(() => { document.title = 'LTI - eSim' // eslint-disable-next-line }, []) return (
{/* Submission page header and left side pane */} } sidebar={} />
) } ================================================ FILE: eda-frontend/src/pages/Login.js ================================================ // User Login / Sign In page. /* eslint-disable react/prop-types */ import React, { useState, useEffect } from 'react' import { Container, Grid, Button, Typography, Link, Checkbox, FormControlLabel, TextField, Card, Avatar, InputAdornment, IconButton } from '@material-ui/core' import Tooltip from '@material-ui/core/Tooltip' import { makeStyles } from '@material-ui/core/styles' import LockOutlinedIcon from '@material-ui/icons/LockOutlined' import Visibility from '@material-ui/icons/Visibility' import VisibilityOff from '@material-ui/icons/VisibilityOff' import { Link as RouterLink } from 'react-router-dom' import { useSelector, useDispatch } from 'react-redux' import { login, authDefault, googleLogin } from '../redux/actions/index' import google from '../static/google.png' const useStyles = makeStyles((theme) => ({ paper: { marginTop: theme.spacing(24), display: 'flex', flexDirection: 'column', alignItems: 'center', padding: theme.spacing(3, 5) }, avatar: { margin: theme.spacing(1), backgroundColor: theme.palette.primary.main }, form: { width: '100%', // Fix IE 11 issue. marginTop: theme.spacing(1) }, submit: { margin: theme.spacing(2, 0) } })) var url = '' export default function SignIn (props) { const classes = useStyles() const auth = useSelector(state => state.authReducer) const [close, setClose] = useState(false) const dispatch = useDispatch() var homeURL = `${window.location.protocol}\\\\${window.location.host}/` useEffect(() => { const query = new URLSearchParams(props.location.search) if (query.get('logout')) { localStorage.removeItem('esim_token') } // eslint-disable-next-line }, []) useEffect(() => { dispatch(authDefault()) document.title = 'Login' const user = localStorage.getItem('username') if (user && user !== '') { setUsername(user) setRemember(true) } const query = new URLSearchParams(props.location.search) if (query.get('close')) { setClose(true) } const ardUrl = localStorage.getItem('ard_redurl') if (ardUrl && ardUrl !== '') { url = ardUrl } else if (props.location.search !== '') { url = query.get('url') localStorage.setItem('ard_redurl', url) } else { url = '' } }, [dispatch, props.location.search, close]) const [username, setUsername] = useState('') const [password, setPassword] = useState('') const [remember, setRemember] = useState(false) const [showPassword, setShowPassword] = useState(false) const handleClickShowPassword = () => setShowPassword(!showPassword) const handleMouseDownPassword = () => setShowPassword(!showPassword) // Function call for normal user login. const handleLogin = (event) => { event.preventDefault() if (remember) { localStorage.setItem('username', username) } else if (username === localStorage.getItem('username')) { localStorage.setItem('username', '') } if (!close) { dispatch(login(username, password, url)) } if (close) { dispatch(login(username, password, 'close')) } localStorage.removeItem('ard_redurl') } // Function call for google oAuth login. const handleGoogleLogin = () => { var host = window.location.protocol + '//' + window.location.host dispatch(googleLogin(host)) } return ( Login | Sign In {/* Display's error messages while logging in */} {auth.errors}
setUsername(e.target.value)} autoFocus /> {showPassword ? : } {/* handle password visibility */} ) }} type={showPassword ? 'text' : 'password'} id="password" value={password} onChange={e => setPassword(e.target.value)} autoComplete="current-password" /> { setRemember(!remember) }} color="primary" /> } label="Remember me" /> Forgot password? {'New User? Sign Up'} Or {/* Google oAuth Sign In option */}
) } ================================================ FILE: eda-frontend/src/pages/NotFound.js ================================================ // Page to display Page Not Found (i.e. 404) error. import React, { useEffect } from 'react' import { Container, Typography } from '@material-ui/core' import { makeStyles } from '@material-ui/core/styles' const useStyles = makeStyles((theme) => ({ header: { padding: theme.spacing(8, 0, 6) } })) export default function NotFound () { const classes = useStyles() useEffect(() => { document.title = 'Not Found - EDA ' }) return ( 404 Not Found Sorry, Requested page not found ) } ================================================ FILE: eda-frontend/src/pages/ProjectPage.js ================================================ // Main Layout for Schemaic Editor page. /* eslint-disable react/prop-types */ /* eslint-disable camelcase */ import React, { useEffect } from 'react' import { Button, Typography, Dialog, DialogContent, Grid, Paper, Tooltip, Snackbar, TextField, DialogActions, List } from '@material-ui/core' import { makeStyles, withStyles } from '@material-ui/core/styles' import ComponentProperties from '../components/SchematicEditor/ComponentProperties' import MuiDialogTitle from '@material-ui/core/DialogTitle' import LayoutMain from '../components/Shared/LayoutMain' import PlayCircleOutlineIcon from '@material-ui/icons/PlayCircleOutline' import IconButton from '@material-ui/core/IconButton' import CloseIcon from '@material-ui/icons/Close' import LoadGrid from '../components/SchematicEditor/Helper/ComponentDrag.js' import '../components/SchematicEditor/Helper/SchematicEditor.css' import { fetchSchematic, fetchGallerySchematic, reportProject, makeCopy } from '../redux/actions/index' import { useDispatch, useSelector } from 'react-redux' import SimulationProperties from '../components/SchematicEditor/SimulationProperties' import ZoomInIcon from '@material-ui/icons/ZoomIn' import ZoomOutIcon from '@material-ui/icons/ZoomOut' import SettingsOverscanIcon from '@material-ui/icons/SettingsOverscan' import MuiAlert from '@material-ui/lab/Alert' import { ZoomIn, ZoomOut, ZoomAct, GenerateDetailedCompList, GenerateNetList } from '../components/SchematicEditor/Helper/ToolbarTools' import ReportComponent from '../components/Project/ReportComponent' import ChangeStatus from '../components/Project/ChangeStatus' import { NetlistModal } from '../components/SchematicEditor/ToolbarExtension' import ProjectTimeline from '../components/Project/ProjectTimeline' const useStyles = makeStyles((theme) => ({ root: { display: 'flex', overflowX: 'visible', overflowY: 'hidden', backgroundColor: '#f4f6f8' }, toolbar: { minHeight: '20px' } })) const styles = (theme) => ({ root: { margin: 0, padding: theme.spacing(2) }, closeButton: { position: 'absolute', right: theme.spacing(1), top: theme.spacing(1), color: theme.palette.grey[500] } }) function Alert (props) { return } export default function ProjectPage (props) { const classes = useStyles() const gridRef = React.createRef() const dispatch = useDispatch() const [netListOpen, setNetListOpen] = React.useState(false) const [snackbarOpen, setSnackbarOpen] = React.useState(false) const [simulateOpen, setSimulateOpen] = React.useState(false) const [reportOpen, setReportOpen] = React.useState(false) const [reportDescription, setDescription] = React.useState(null) const [netlist, genNetlist] = React.useState('') const [statusChanged, setStatusChanged] = React.useState(false) const [componentsList, setComponentsList] = React.useState(undefined) const project = useSelector(state => state.projectReducer) const auth = useSelector(state => state.authReducer) const netfile = useSelector((state) => state.netlistReducer) const DialogTitle = withStyles(styles)((props) => { const { children, classes, onClose, ...other } = props return ( {children} {onClose ? ( ) : null} ) }) const handleSimulateOpen = () => { setSimulateOpen(!simulateOpen) } const handleReportOpen = () => { setReportOpen(!reportOpen) } const handleChangeDescription = (e) => { setDescription(e.target.value) } const handleNetlistClick = () => { setNetListOpen(!netListOpen) } const onClick = (type) => { const query = new URLSearchParams(props.location.search) var save_id = query.get('save_id') var project_id = query.get('project_id') switch (type) { case 'Report': dispatch(reportProject(reportDescription, project_id)) handleReportOpen() break case 'Make copy': dispatch(makeCopy(save_id, project.details.active_version, project.details.active_branch)) setSnackbarOpen(true) break case 'Generate Netlist': var compNetlist = GenerateNetList() var netlist = netfile.title + '\n\n' + compNetlist.models + '\n' + compNetlist.main + '\n' + netfile.controlLine + '\n' + netfile.controlBlock + '\n' genNetlist(netlist) handleNetlistClick() break default: break } } const changedStatus = () => { setStatusChanged(true) } useEffect(() => { console.log(project.details) }, [project]) useEffect(() => { var container = gridRef.current LoadGrid(container, null, null) if (props.location.search !== '') { const query = new URLSearchParams(props.location.search) var saveID = query.get('save_id') var version = query.get('version') var branch = query.get('branch') if (saveID.substr(0, 7) === 'gallery') { // Loading Gallery schemaic. dispatch(fetchGallerySchematic(saveID)) } else { // Loading User on-cloud saved schemaic. dispatch(fetchSchematic(saveID, version, branch)) } } setTimeout(() => { setComponentsList([GenerateDetailedCompList()]) }, 2000) // eslint-disable-next-line }, [props.location, dispatch]) return (
{project.details !== '401' ? <> {statusChanged ? <> Status Changed : {project.reports && project.details.is_reported && } {project.details && !project.details?.is_reported && project.details?.author_name !== auth.user?.username && } {project.details &&

{project.details.title}

} {project.details &&

By: {project.details.author_name}

}

{project.details?.description}

{componentsList &&

Component List:

} {componentsList && componentsList[0].map((item, i) => (
{i + 1}.{item.name} {item.value}{item.unit}
))} {project.details && project.details?.fields && project.details.fields.map(item => (

{item.name}:

{item.text.split('\n').map((text) => ( {text}

))}

))}
Simulate Circuit {project.details && } Report this project

Circuit Diagram: {auth.isAuthenticated && } {auth.isAuthenticated && }

setSnackbarOpen(false)} > setSnackbarOpen(false)} severity="success"> Successfully made a copy!

History of this Project

{project.details?.history[0] ? :

No history of this project.

}
} : <> {statusChanged ? <>Status Changed. Wait for it to get back to the status where it is visible for you. : <>Not Authorized} }
) } ================================================ FILE: eda-frontend/src/pages/Projects.js ================================================ import { Card, Grid, Container, CssBaseline, CardContent, Typography, Select, MenuItem, Popover, FormControl, Input, IconButton, InputLabel } from '@material-ui/core' import React, { useEffect } from 'react' import { useSelector, useDispatch } from 'react-redux' import { makeStyles } from '@material-ui/core/styles' import ProjectCard from '../components/Dashboard/ProjectCard' import { fetchPublicProjects } from '../redux/actions/index' import FilterListIcon from '@material-ui/icons/FilterList' const useStyles = makeStyles((theme) => ({ mainHead: { width: '100%', backgroundColor: '#404040', color: '#fff' }, title: { fontSize: 18, color: '#80ff80' }, header: { padding: theme.spacing(5, 0, 6, 0) }, root: { display: 'flex', minHeight: '100vh', backgroundColor: '#f4f6f8' }, media: { marginTop: theme.spacing(3), height: 170 } })) // Card displaying eSim gallery page header. function MainCard () { const classes = useStyles() return ( eSim Published Projects Published Projects are listed below... ) } function PublicProjects (props) { const classes = useStyles() const dispatch = useDispatch() const projects = useSelector(state => state.dashboardReducer.publicProjects) const [sort, setSort] = React.useState('') const [order, setOrder] = React.useState('ascending') const [filteredProjects, setFilteredProjects] = React.useState(projects) const [anchorEl, setAnchorEl] = React.useState(null) const open = Boolean(anchorEl) useEffect(() => { dispatch(fetchPublicProjects()) }, [dispatch]) useEffect(() => { setFilteredProjects(projects) }, [projects]) const handleFilterOpen = (e) => { if (anchorEl) { setAnchorEl(null) } else { setAnchorEl(e.currentTarget) } } const sortSaves = (sorting, order) => { if (order === 'ascending') { if (sorting === 'name') { setFilteredProjects(filteredProjects.sort((a, b) => a.title > b.title)) } else if (sorting === 'author') { setFilteredProjects(filteredProjects.sort((a, b) => a.author > b.author)) } else if (sorting === 'status') { setFilteredProjects(filteredProjects.sort((a, b) => a.status_name > b.status_name)) } } else { if (sorting === 'name') { setFilteredProjects(filteredProjects.sort((a, b) => a.title < b.title)) } else if (sorting === 'author') { setFilteredProjects(filteredProjects.sort((a, b) => a.author < b.author)) } else if (sorting === 'status') { setFilteredProjects(filteredProjects.sort((a, b) => a.status_name < b.status_name)) } } } const handleSort = (e) => { sortSaves(e.target.value, order) setSort(e.target.value) } const handleOrder = (e) => { setOrder(e.target.value) if (sort !== '') { sortSaves(sort, e.target.value) } } const onSearch = (e) => { setFilteredProjects(projects.filter((o) => // eslint-disable-next-line Object.keys(o).some((k) => { if ((k === 'title' || k === 'description' || k === 'author' || k === 'status_name') && String(o[k]).toLowerCase().includes(e.target.value.toLowerCase())) { return String(o[k]).toLowerCase().includes(e.target.value.toLowerCase()) } } ) )) } return (
{/* eSim Gallery Header */} {filteredProjects && } {filteredProjects && onSearch(e)} placeholder='Search' />} Select Sort Select Order {/* Listing Gallery Schematics */} {filteredProjects.map( (pub) => { console.log(pub) return ( ) })}
) } export default PublicProjects ================================================ FILE: eda-frontend/src/pages/ResetPassword/Confirmation.js ================================================ // User Sign Up / Register page. import React, { useState, useEffect } from 'react' import { Container, Button, Typography, TextField, Card, Avatar, InputAdornment, IconButton } from '@material-ui/core' import PropTypes from 'prop-types' import { makeStyles } from '@material-ui/core/styles' import Visibility from '@material-ui/icons/Visibility' import VisibilityOff from '@material-ui/icons/VisibilityOff' import LockOutlinedIcon from '@material-ui/icons/LockOutlined' import { useSelector, useDispatch } from 'react-redux' import { resetPasswordConfirm, authDefault, resetPasswordConfirmError } from '../../redux/actions/index' const useStyles = makeStyles((theme) => ({ paper: { marginTop: theme.spacing(20), display: 'flex', flexDirection: 'column', alignItems: 'center', padding: theme.spacing(3, 5) }, avatar: { margin: theme.spacing(1), backgroundColor: theme.palette.primary.main }, form: { width: '100%', // Fix IE 11 issue. marginTop: theme.spacing(1) }, submit: { margin: theme.spacing(1.5, 0) } })) export default function ResetPasswordConfirm ({ match }) { const classes = useStyles() const auth = useSelector(state => state.authReducer) const dispatch = useDispatch() var homeURL = `${window.location.protocol}\\\\${window.location.host}/` const { id, token } = match.params useEffect(() => { dispatch(authDefault()) document.title = 'Reset password - eSim ' dispatch(resetPasswordConfirmError('')) }, [dispatch]) const [newPassword, setNewPassword] = useState('') const [reNewPassword, setReNewPassword] = useState('') const [showNewPassword, setShowNewPassword] = useState(false) const [showReNewPassword, setShowReNewPassword] = useState(false) const handleClickShowNewPassword = () => setShowNewPassword(!showNewPassword) const handleMouseDownNewPassword = () => setShowNewPassword(!showNewPassword) const handleClickShowReNewPassword = () => setShowReNewPassword(!showReNewPassword) const handleMouseDownReNewPassword = () => setShowReNewPassword(!showReNewPassword) return ( Reset password {/* Display's error messages while signing in */} {auth.resetPasswordError}
{showNewPassword ? : } {/* Handle password visibility */} ) }} type={showNewPassword ? 'text' : 'password'} id="newPassword" value={newPassword} onChange={e => setNewPassword(e.target.value)} autoComplete="current-password" /> {showReNewPassword ? : } {/* Handle password visibility */} ) }} type={showReNewPassword ? 'text' : 'password'} id="reNewPassword" value={reNewPassword} onChange={e => setReNewPassword(e.target.value)} autoComplete="current-password" />
) } ResetPasswordConfirm.propTypes = { match: PropTypes.object.isRequired } ================================================ FILE: eda-frontend/src/pages/ResetPassword/Initiation.js ================================================ // User Sign Up / Register page. import React, { useState, useEffect } from 'react' import { Container, Button, Typography, TextField, Card, Avatar } from '@material-ui/core' import { makeStyles } from '@material-ui/core/styles' import LockOutlinedIcon from '@material-ui/icons/LockOutlined' import { useSelector, useDispatch } from 'react-redux' import { resetPassword, authDefault } from '../../redux/actions/index' const useStyles = makeStyles((theme) => ({ paper: { marginTop: theme.spacing(20), display: 'flex', flexDirection: 'column', alignItems: 'center', padding: theme.spacing(3, 5) }, avatar: { margin: theme.spacing(1), backgroundColor: theme.palette.primary.main }, form: { width: '100%', // Fix IE 11 issue. marginTop: theme.spacing(1) }, submit: { margin: theme.spacing(1.5, 0) } })) export default function ResetPassword () { const classes = useStyles() const auth = useSelector(state => state.authReducer) const dispatch = useDispatch() var homeURL = `${window.location.protocol}\\\\${window.location.host}/` useEffect(() => { dispatch(authDefault()) document.title = 'Reset password - eSim ' }, [dispatch]) const [email, setEmail] = useState('') return ( Reset password {/* Display's error messages while signing in */} {auth.resetPasswordError}
setEmail(e.target.value)} autoFocus />
) } ================================================ FILE: eda-frontend/src/pages/SchematiEditor.js ================================================ // Main Layout for Schemaic Editor page. /* eslint-disable react/prop-types */ import React, { useEffect } from 'react' import { CssBaseline } from '@material-ui/core' import { makeStyles } from '@material-ui/core/styles' import Layout from '../components/Shared/Layout' import Header from '../components/SchematicEditor/Header' import ComponentSidebar from '../components/SchematicEditor/ComponentSidebar' import LayoutMain from '../components/Shared/LayoutMain' import SchematicToolbar from '../components/SchematicEditor/SchematicToolbar' import RightSidebar from '../components/SchematicEditor/RightSidebar' import PropertiesSidebar from '../components/SchematicEditor/PropertiesSidebar' import LoadGrid from '../components/SchematicEditor/Helper/ComponentDrag.js' import ComponentProperties from '../components/SchematicEditor/ComponentProperties' import '../components/SchematicEditor/Helper/SchematicEditor.css' import { fetchSchematic, fetchGallerySchematic } from '../redux/actions/index' import { useDispatch } from 'react-redux' const useStyles = makeStyles((theme) => ({ root: { display: 'flex', minHeight: '100vh' }, toolbar: { minHeight: '80px' } })) export default function SchematiEditor (props) { const classes = useStyles() const compRef = React.createRef() const gridRef = React.createRef() const outlineRef = React.createRef() const dispatch = useDispatch() const [mobileOpen, setMobileOpen] = React.useState(false) const [ltiSimResult, setLtiSimResult] = React.useState(false) const handleDrawerToggle = () => { setMobileOpen(!mobileOpen) } useEffect(() => { document.title = 'Schematic Editor - eSim ' const container = gridRef.current const sidebar = compRef.current const outline = outlineRef.current LoadGrid(container, sidebar, outline) if (props.location.search !== '') { const query = new URLSearchParams(props.location.search) console.log(props.location.search) const cktid = query.get('id') const version = query.get('version') const branch = query.get('branch') console.log(cktid) if (cktid.substr(0, 7) === 'gallery') { // Loading Gallery schemaic. dispatch(fetchGallerySchematic(cktid)) } else { // Loading User on-cloud saved schemaic. dispatch(fetchSchematic(cktid, version, branch)) } } // eslint-disable-next-line }, [props.location]) return (
{/* Schematic editor header, toolbar and left side pane */} } resToolbar={ } sidebar={} /> {/* Grid for drawing and designing circuits */}
{/* Schematic editor Right side pane */}
) } ================================================ FILE: eda-frontend/src/pages/Simulator.js ================================================ import React, { useState, useEffect } from 'react' import { Container, Grid, Button, Paper, Typography, Switch, FormControlLabel } from '@material-ui/core' import { makeStyles } from '@material-ui/core/styles' import Editor from '../components/Simulator/Editor' import textToFile from '../components/Simulator/textToFile' import SimulationScreen from '../components/Shared/SimulationScreen' import { useDispatch } from 'react-redux' import { setResultGraph, setResultText, setNetlist } from '../redux/actions/index' import Notice from '../components/Shared/Notice' import api from '../utils/Api' const useStyles = makeStyles((theme) => ({ header: { padding: theme.spacing(5, 0, 6) // color: '#fff' }, paper: { padding: theme.spacing(2), textAlign: 'center', backgroundColor: '#404040', color: '#fff' } })) export default function Simulator () { const classes = useStyles() const dispatch = useDispatch() const [netlistCode, setNetlistCode] = useState('') const [errMsg, setErrMsg] = useState('') const [err, setErr] = useState(false) const [status, setStatus] = useState('') const stats = { loading: 'loading', error: 'error', success: 'success' } const [state, setState] = React.useState({ checkedA: false }) const [taskId, setTaskId] = useState(null) useEffect(() => { document.title = 'Simulator - eSim ' }) const handleChange = (event) => { setState({ ...state, [event.target.name]: event.target.checked }) } const handleSimulationButtonClick = () => { prepareNetlist() } const onCodeChange = (code) => { setNetlistCode(code) } const [simulateOpen, setSimulateOpen] = React.useState(false) const handleErrOpen = () => { setErr(true) } const handleErrClose = () => { setErr(false) } const handleErrMsg = (msg) => { setErrMsg(msg) } const handleStatus = (status) => { setStatus(status) } const handlesimulateOpen = () => { setSimulateOpen(true) } const handleSimulateClose = () => { setSimulateOpen(false) } const netlistCodeSanitization = (code) => { const codeArray = code.split('\n') let cleanCode = '' let frontPlot = '' for (let line = 0; line < codeArray.length; line++) { if (codeArray[line].includes('plot') && !codeArray[line].includes('setplot')) { frontPlot += codeArray[line].split('plot ')[1] + ' ' } } frontPlot = `print ${frontPlot} > data.txt \n` let flag = 0 for (let i = 0; i < codeArray.length; i++) { if (codeArray[i].includes('plot') && !codeArray[i].includes('setplot')) { if (!flag) { cleanCode += frontPlot flag = 1 } } else { cleanCode += codeArray[i] + '\n' } } return cleanCode } function prepareNetlist () { const sanatizedText = netlistCodeSanitization(netlistCode) dispatch(setNetlist(sanatizedText)) const file = textToFile(sanatizedText) sendNetlist(file) } // Upload the nelist function netlistConfig (file) { const token = localStorage.getItem('esim_token') const formData = new FormData() formData.append('file', file) const config = { headers: { 'content-type': 'multipart/form-data' } } if (token) { config.headers.Authorization = `Token ${token}` } return api.post('simulation/upload', formData, config) } function sendNetlist (file) { setIsResult(false) netlistConfig(file) .then((response) => { const res = response.data const getUrl = 'simulation/status/'.concat(res.details.task_id) setTaskId(res.details.task_id) simulationResult(getUrl) }) .catch(function (error) { console.log(error) }) } const [isResult, setIsResult] = useState(false) function simulationResult (url) { let isError = false let msg let resPending = true // to stop immature opening of simulation screen api .get(url) .then((res) => { if (res.data.state === 'PROGRESS' || res.data.state === 'PENDING') { handleStatus(stats.loading) setTimeout(simulationResult(url), 1000) } else if (Object.prototype.hasOwnProperty.call(res.data.details, 'fail')) { resPending = false setIsResult(false) console.log('failed notif') console.log(res.data.details) msg = res.data.details.fail.replace("b'", '') isError = true console.log(err) } else { const result = res.data.details resPending = false if (result === null) { setIsResult(false) } else { const temp = res.data.details.data const data = result.data if (res.data.details.graph === 'true') { const simResultGraph = { labels: [], x_points: [], y_points: [] } // populate the labels for (let i = 0; i < data.length; i++) { simResultGraph.labels[0] = data[i].labels[0] const lab = data[i].labels // lab is an array containeing labels names ['time','abc','def'] simResultGraph.x_points = data[0].x // labels for (let x = 1; x < lab.length; x++) { // if (lab[x].includes('#branch')) { // lab[x] = `I (${lab[x].replace('#branch', '')})` // } // uncomment below if you want label like V(r1.1) but it will break the graph showing time as well // else { // lab[x] = `V (${lab[x]})` // } simResultGraph.labels.push(lab[x]) } // populate y_points for (let z = 0; z < data[i].y.length; z++) { simResultGraph.y_points.push(data[i].y[z]) } } simResultGraph.x_points = simResultGraph.x_points.map(d => parseFloat(d)) for (let i1 = 0; i1 < simResultGraph.y_points.length; i1++) { simResultGraph.y_points[i1] = simResultGraph.y_points[i1].map(d => parseFloat(d)) } dispatch(setResultGraph(simResultGraph)) } else { const simResultText = [] for (let i = 0; i < temp.length; i++) { let postfixUnit = '' if (temp[i][0].includes('#branch')) { postfixUnit = 'A' } else if (temp[i][0].includes('transfer_function')) { postfixUnit = '' } else if (temp[i][0].includes('impedance')) { postfixUnit = 'Ohm' } else { temp[i][0] = `V(${temp[i][0]})` postfixUnit = 'V' } simResultText.push(temp[i][0] + ' ' + temp[i][1] + ' ' + parseFloat(temp[i][2]) + ' ' + postfixUnit + '\n') } // handleSimulationResult(res.data.details) dispatch(setResultText(simResultText)) } setIsResult(true) } } }) .then((res) => { if (isError === false && resPending === false) { // console.log('no error') handleStatus(stats.success) handlesimulateOpen() } else if (resPending === false) { handleStatus(stats.error) handleErrMsg(msg) // console.log('reached error alert') // console.log(msg) // alert(msg) } handleErrOpen() }) .catch(function (error) { console.log(error) }) } return ( SPICE SIMULATOR eSim on Cloud - ngSpice Simulator Enter Netlist } label="Light Mode" />
) } ================================================ FILE: eda-frontend/src/pages/SubmissionPage.js ================================================ // Main Layout for Submission Page import React, { useEffect } from 'react' import { Switch, Route } from 'react-router-dom' import { CssBaseline } from '@material-ui/core' import { makeStyles } from '@material-ui/core/styles' import { Header } from '../components/Shared/Navbar' import Layout from '../components/Shared/Layout' import LayoutMain from '../components/Shared/LayoutMain' import DashboardSidebar from '../components/Dashboard/DashboardSidebar' import DashboardHome from '../components/Dashboard/DashboardHome' import SchematicsList from '../components/Dashboard/SchematicsList' import SubmissionTable from '../components/LTI/SubmissionTable' const useStyles = makeStyles((theme) => ({ root: { display: 'flex', minHeight: '100vh' }, toolbar: { minHeight: '40px' } })) export default function Submissions () { const classes = useStyles() // var auth = useSelector(state => state.authReducer) useEffect(() => { document.title = 'Submissions - eSim' // eslint-disable-next-line }, []) return (
{/* Submission page header and left side pane */} } sidebar={} />
) } ================================================ FILE: eda-frontend/src/pages/signUp.js ================================================ // User Sign Up / Register page. import React, { useState, useEffect } from 'react' import { Container, Grid, Button, Typography, Link, Checkbox, FormControlLabel, TextField, Card, Avatar, InputAdornment, IconButton } from '@material-ui/core' import { makeStyles } from '@material-ui/core/styles' import LockOutlinedIcon from '@material-ui/icons/LockOutlined' import Visibility from '@material-ui/icons/Visibility' import VisibilityOff from '@material-ui/icons/VisibilityOff' import { Link as RouterLink, useHistory } from 'react-router-dom' import { useSelector, useDispatch } from 'react-redux' import { signUp, authDefault, googleLogin } from '../redux/actions/index' import google from '../static/google.png' const useStyles = makeStyles((theme) => ({ paper: { marginTop: theme.spacing(20), display: 'flex', flexDirection: 'column', alignItems: 'center', padding: theme.spacing(3, 5) }, avatar: { margin: theme.spacing(1), backgroundColor: theme.palette.primary.main }, form: { width: '100%', // Fix IE 11 issue. marginTop: theme.spacing(1) }, submit: { margin: theme.spacing(1.5, 0) } })) export default function SignUp () { const classes = useStyles() const auth = useSelector(state => state.authReducer) const dispatch = useDispatch() var homeURL = `${window.location.protocol}\\\\${window.location.host}/` useEffect(() => { dispatch(authDefault()) document.title = 'Sign Up - eSim ' }, [dispatch]) const history = useHistory() const [username, setUsername] = useState('') const [password, setPassword] = useState('') const [email, setEmail] = useState('') const [accept, setAccept] = useState(true) const [showPassword, setShowPassword] = useState(false) const handleClickShowPassword = () => setShowPassword(!showPassword) const handleMouseDownPassword = () => setShowPassword(!showPassword) // Function call for google oAuth sign up. const handleGoogleSignup = () => { var host = window.location.protocol + '//' + window.location.host dispatch(googleLogin(host)) } const handleSignup = (event) => { event.preventDefault() dispatch(signUp(email, username, password, history)) } return ( Register | Sign Up {/* Display's error messages while signing in */} {auth.regErrors} { auth.isRegistered && <>
{'Back to Login'} }
setUsername(e.target.value)} autoFocus /> setEmail(e.target.value)} autoFocus /> {showPassword ? : } {/* handle password visibility */} ) }} type={showPassword ? 'text' : 'password'} id="password" value={password} onChange={e => setPassword(e.target.value)} autoComplete="current-password" /> setAccept(e.target.checked)} color="primary" />} label="I accept the Terms of Use & Privacy Policy" /> Or {/* Google oAuth Sign Up option */} {'Already have account? Login'}
) } ================================================ FILE: eda-frontend/src/redux/actions/accountActions.js ================================================ import * as actions from './actions' import api from '../../utils/Api' // Redux action for account workflow const changePasswordError = (message) => (dispatch) => { dispatch({ type: actions.CHANGE_PASSWORD_FAILED, payload: { data: message } }) } export const changePassword = (oldPassword, newPassword, reNewPassword, history, url) => (dispatch, getState) => { const body = { current_password: oldPassword, new_password: newPassword, re_new_password: reNewPassword } // add headers const config = { headers: { 'Content-Type': 'application/json' } } const token = getState().authReducer.token if (token) { config.headers.Authorization = `Token ${token}` } api.post('auth/users/set_password/', body, config) .then((res) => { if (res.status >= 200 || res.status < 304) { dispatch({ type: actions.CHANGE_PASSWORD_SUCCESS, payload: { data: 'The password has been changed successfully.' } }) if (url != null) { setTimeout(() => { window.location.href = url }, 2000) } else { setTimeout(() => { history.push('/dashboard') }, 2000) } } }) .catch((err) => { var res = err.response if ([400, 401, 403, 304].includes(res.status)) { // eslint-disable-next-line camelcase const { new_password, re_new_password, current_password, non_field_errors } = res.data const defaultErrors = ['Password change failed.'] // eslint-disable-next-line camelcase var message = (current_password || new_password || non_field_errors || re_new_password || defaultErrors)[0] dispatch(changePasswordError(message)) } }) } ================================================ FILE: eda-frontend/src/redux/actions/actions.js ================================================ // Actions for schematic editor export const FETCH_LIBRARIES = 'FETCH_LIBRARIES' export const FETCH_LIBRARY = 'FETCH_LIBRARY' export const REMOVE_LIBRARY = 'REMOVE_LIBRARY' export const FETCH_ALL_LIBRARIES = 'FETCH_ALL_LIBRARIES' export const FETCH_CUSTOM_LIBRARIES = 'FETCH_CUSTOM_LIBRARIES' export const DELETE_LIBRARY = 'DELETE_LIBRARY' export const UPLOAD_LIBRARIES = 'UPLOAD_LIBRARIES' export const RESET_UPLOAD_SUCCESS = 'RESET_UPLOAD_SUCCESS' export const TOGGLE_COLLAPSE = 'TOGGLE_COLLAPSE' export const FETCH_COMPONENTS = 'FETCH_COMPONENTS' export const TOGGLE_SIMULATE = 'TOGGLE_SIMULATE' // Actions for handleing component properties export const GET_COMP_PROPERTIES = 'GET_COMP_PROPERTIES' export const SET_COMP_PROPERTIES = 'SET_COMP_PROPERTIES' export const CLOSE_COMP_PROPERTIES = 'CLOSE_COMP_PROPERTIES' export const CLOSE_COMP_PROPERTIES_TEMP = 'CLOSE_COMP_PROPERTIES_TEMP' // Actions for handleing and generating netlist export const SET_NETLIST = 'SET_NETLIST' export const SET_TITLE = 'SET_TITLE' export const SET_MODEL = 'SET_MODEL' export const SET_CONTROL_LINE = 'SET_CONTROL_LINE' export const SET_CONTROL_BLOCK = 'SET_CONTROL_BLOCK' // Actions for handleing simualtion result display export const SET_RESULT_TITLE = 'SET_RESULT_TITLE' export const SET_RESULT_GRAPH = 'SET_RESULT_GRAPH' export const SET_RESULT_TEXT = 'SET_RESULT_TEXT' // Actions for handleing user authentication and registeration export const USER_LOADING = 'USER_LOADING' export const USER_LOADED = 'USER_LOADED' export const LOGIN_SUCCESSFUL = 'LOGIN_SUCCESSFUL' export const AUTHENTICATION_ERROR = 'AUTHENTICATION_ERROR' export const LOGIN_FAILED = 'LOGIN_FAILED' export const LOGOUT_SUCCESSFUL = 'LOGOUT_SUCCESSFUL' export const LOADING_FAILED = 'LOADING_FAILED' export const SIGNUP_SUCCESSFUL = 'SIGNUP_SUCCESSFUL' export const SIGNUP_FAILED = 'SIGNUP_FAILED' export const DEFAULT_STORE = 'DEFAULT_STORE' export const RESET_PASSWORD_SUCCESSFUL = 'RESET_PASSWORD_SUCCESSFUL' export const RESET_PASSWORD_FAILED = 'RESET_PASSWORD_FAILED' export const RESET_PASSWORD_CONFIRM_SUCCESSFUL = 'RESET_PASSWORD_CONFIRM_SUCCESSFUL' export const RESET_PASSWORD_CONFIRM_FAILED = 'RESET_PASSWORD_CONFIRM_FAILED' export const ROLE_LOADED = 'ROLE_LOADED' // Actions for saving scheamtics and loading saved, gallery and local schematics. export const SAVE_SCHEMATICS = 'SAVE_SCHEMATICS' export const SET_SCH_SAVED = 'SET_SCH_SAVED' export const SET_SCH_TITLE = 'SET_SCH_TITLE' export const SET_SCH_DESCRIPTION = 'SET_SCH_DESCRIPTION' export const SET_SCH_XML_DATA = 'SET_SCH_XML_DATA' export const SET_SCH_SHARED = 'SET_SCH_SHARED' export const CLEAR_DETAILS = 'CLEAR_DETAILS' // Action for fetching on-cloud saved schematics for authenticated user to display in dashboard export const FETCH_SCHEMATICS = 'FETCH_SCHEMATICS' // Action for fetching on-cloud gallery for everyone export const FETCH_GALLERY = 'FETCH_GALLERY' // Actions for accounts page export const CHANGE_PASSWORD_SUCCESS = 'CHANGE_PASSWORD_SUCCESS' export const CHANGE_PASSWORD_FAILED = 'CHANGE_PASSWORD_FAILED' export const FETCH_MY_PROJECTS = 'FETCH_MY_PROJECTS' export const FETCH_PUBLIC_PROJECTS = 'FETCH_PUBLIC_PROJECTS' export const FETCH_OTHER_PROJECTS = 'FETCH_OTHER_PROJECTS' // Actions for handling Projects export const SET_CURRENT_PROJECT = 'SET_CURRENT_PROJECT' export const DELETE_PROJECT = 'DELETE_PROJECT' export const FETCH_REPORTS = 'FETCH_REPORTS' export const RESOLVE_REPORTS = 'RESOLVE_REPORTS' export const GET_STATES = 'GET_STATES' export const SET_STATE = 'SET_STATE' ================================================ FILE: eda-frontend/src/redux/actions/authActions.js ================================================ import * as actions from './actions' import api from '../../utils/Api' // Api call for maintaining user login state throughout the application export const loadUser = () => (dispatch, getState) => { // User Loading dispatch({ type: actions.USER_LOADING }) // Get token from localstorage and dispatch LOGIN_SUCCESSFUL const token = localStorage.getItem('esim_token') const userId = localStorage.getItem('user_id') if (token) { dispatch({ type: actions.LOGIN_SUCCESSFUL, payload: { data: { auth_token: token, user_id: userId } } }) } // add headers const config = { headers: { 'Content-Type': 'application/json' } } // If token available add to headers if (token) { config.headers.Authorization = `Token ${token}` } else { dispatch({ type: actions.LOADING_FAILED }) return } api.get('auth/users/me/', config) .then( (res) => { if (res.status === 200) { dispatch({ type: actions.USER_LOADED, payload: { user: res.data } }) } else if (res.status >= 400 && res.status < 500) { dispatch({ type: actions.LOGIN_FAILED, payload: { data: res.data } }) } } ) .catch((err) => { console.error(err) dispatch({ type: actions.LOGIN_FAILED, payload: { data: [] } }) }) } // Api call for maintaining user login state throughout the application without excess actions export const loadMinUser = () => (dispatch) => { // Get token from localstorage and dispatch LOGIN_SUCCESSFUL const token = localStorage.getItem('esim_token') const userId = localStorage.getItem('user_id') if (token) { dispatch({ type: actions.LOGIN_SUCCESSFUL, payload: { data: { auth_token: token, user_id: userId } } }) } // add headers const config = { headers: { 'Content-Type': 'application/json' } } // If token available add to headers if (token) { config.headers.Authorization = `Token ${token}` } else { dispatch({ type: actions.LOADING_FAILED }) return } api.get('auth/users/me/', config) .then( (res) => { if (res.status === 200) { dispatch({ type: actions.USER_LOADED, payload: { user: res.data } }) } else if (res.status >= 400 && res.status < 500) { dispatch({ type: actions.LOGIN_FAILED, payload: { data: res.data } }) } } ) .catch((err) => { console.error(err) dispatch({ type: actions.LOGIN_FAILED, payload: { data: {} } }) }) } // Handle api call for user login export const login = (username, password, toUrl) => { const body = { password: password, username: username } return function (dispatch) { api.post('auth/user/token/', body) .then((res) => { if (res.status === 200) { dispatch({ type: actions.LOGIN_SUCCESSFUL, payload: { data: res.data } }) if (toUrl === '') { dispatch(loadUser()) } else if (toUrl === 'close') { window.opener = null window.open('', '_self') window.close() } else { if (process.env.NODE_ENV === 'development') { localStorage.setItem('ard_redurl', '') window.location.href = toUrl + '?token=' + localStorage.getItem('esim_token') } else { window.open(toUrl, '_self') localStorage.setItem('ard_redurl', '') } } } else if (res.status === 400 || res.status === 403 || res.status === 401) { dispatch({ type: actions.AUTHENTICATION_ERROR, payload: { data: res.data.non_field_errors[0] } }) } else { dispatch({ type: actions.LOGIN_FAILED, payload: { data: 'Something went wrong! Login Failed' } }) } }) .catch((err) => { var res = err.response if (res.status === 400 || res.status === 403 || res.status === 401) { dispatch(loginError(res.data.non_field_errors[0])) } else { dispatch(loginError('Something went wrong! Login Failed')) } }) } } // Handle api call for user sign up export const signUp = (email, username, password, history) => (dispatch) => { const body = { email: email, username: username, password: password } // add headers const config = { headers: { 'Content-Type': 'application/json' } } api.post('auth/users/', body, config) .then((res) => { if (res.status === 200 || res.status === 201) { dispatch({ type: actions.SIGNUP_SUCCESSFUL, payload: { data: 'Successfully Signed Up! A verification link has been sent to your email account.' } }) // history.push('/login') } }) .catch((err) => { var res = err.response if (res.status === 400 || res.status === 403 || res.status === 401) { if (res.data.username !== undefined) { if (res.data.username[0].search('already') !== -1 && res.data.username[0].search('exists') !== -1) { dispatch(signUpError('Username Already Taken.')) } } else if (res.data.password !== undefined) { dispatch(signUpError(res.data.password)) } else { dispatch(signUpError(res.data.email)) } } else { dispatch(signUpError('Something went wrong! Registration Failed')) } }) } // Handle api call for user logout export const logout = (history) => (dispatch, getState) => { // Get token from localstorage const token = getState().authReducer.token // add headers const config = { headers: { 'Content-Type': 'application/json' } } // If token available add to headers if (token) { config.headers.Authorization = `Token ${token}` } api.post('auth/token/logout/', {}, config) .then( (res) => { if (res.status === 200 || res.status === 204) { dispatch({ type: actions.LOGOUT_SUCCESSFUL, payload: { user: res.data } }) history.push('/login') } } ) .catch((err) => { console.error(err) }) } // Redux action for default auth store export const authDefault = () => (dispatch) => { dispatch({ type: actions.DEFAULT_STORE }) } // Redux action for display login error const loginError = (message) => (dispatch) => { dispatch({ type: actions.AUTHENTICATION_ERROR, payload: { data: message } }) } // Redux action for display sign up error const signUpError = (message) => (dispatch) => { dispatch({ type: actions.SIGNUP_FAILED, payload: { data: message } }) } // Redux action for display reset password error const resetPasswordError = (message) => (dispatch) => { dispatch({ type: actions.RESET_PASSWORD_FAILED, payload: { data: message } }) } // Redux action for display reset password confirmation error export const resetPasswordConfirmError = (message) => (dispatch) => { dispatch({ type: actions.RESET_PASSWORD_CONFIRM_FAILED, payload: { data: message } }) } // Api call for Google oAuth login or sign up export const googleLogin = (host, toUrl) => { return function (dispatch) { api.get('auth/o/google-oauth2/?redirect_uri=' + host + '/api/auth/google-callback') .then((res) => { if (res.status === 200) { // Open google login page window.open(res.data.authorization_url, '_self') } else { dispatch({ type: actions.LOGIN_FAILED, payload: { data: 'Something went wrong! Login Failed' } }) } }) .then((res) => { console.log(res) }) .catch((err) => { var res = err.response if (res.status === 400 || res.status === 403 || res.status === 401) { dispatch(loginError('Incorrect Username or Password.')) } else { dispatch(loginError('Something went wrong! Login Failed')) } }) } } // Handles api call for user's password confirmation export const resetPasswordConfirm = (uid, token, newPassword, reNewPassword) => (dispatch) => { const body = { uid: uid, token: token, new_password: newPassword, re_new_password: reNewPassword } // add headers const config = { headers: { 'Content-Type': 'application/json' } } api.post('auth/users/reset_password_confirm/', body, config) .then((res) => { if (res.status >= 200 || res.status < 304) { dispatch({ type: actions.RESET_PASSWORD_CONFIRM_SUCCESSFUL, payload: { data: 'The password has been reset successfully.' } }) setTimeout(() => { window.location.href = '/eda/#/login' }, 2000) } }) .catch((err) => { var res = err.response if ([400, 401, 403, 304].includes(res.status)) { // eslint-disable-next-line camelcase const { new_password, re_new_password, non_field_errors, token } = res.data const defaultErrors = ['Password reset failed.'] // eslint-disable-next-line camelcase var message = (new_password || re_new_password || non_field_errors || defaultErrors)[0] if (token) { // Override message if it's a token error message = 'Either the password has already been changed or you have the incorrect URL' } dispatch(resetPasswordConfirmError(message)) } }) } // Handles api call for user's password recovery export const resetPassword = (email) => (dispatch) => { const body = { email: email } // add headers const config = { headers: { 'Content-Type': 'application/json' } } api.post('auth/users/reset_password/', body, config) .then((res) => { if (res.status >= 200 || res.status < 304) { dispatch({ type: actions.RESET_PASSWORD_SUCCESSFUL, payload: { data: 'The password reset link has been sent to your email account.' } }) setTimeout(() => { window.location.href = '/eda/#/login' }, 2000) // history.push('/login') } }) .catch((err) => { var res = err.response if ([400, 401, 403, 304].includes(res.status)) { dispatch(resetPasswordError(res.data)) } }) } // API call for fetching user role. export const fetchRole = () => (dispatch, getState) => { const token = getState().authReducer.token // add headers const config = { headers: { 'Content-Type': 'application/json' } } if (token) { config.headers.Authorization = `Token ${token}` } else { dispatch({ type: actions.LOADING_FAILED }) return } api.get('workflow/role/', config) .then((res) => { console.log(res.data) dispatch({ type: actions.ROLE_LOADED, payload: { data: res.data } }) }).catch(() => { console.log('Error') }) } ================================================ FILE: eda-frontend/src/redux/actions/componentPropertiesActions.js ================================================ import * as actions from './actions' // Actions for listing stored component properites on double click on component export const getCompProperties = (id, compProperties, x, y) => (dispatch) => { dispatch({ type: actions.GET_COMP_PROPERTIES, payload: { id: id, compProperties: compProperties, x: x, y: y } }) } // Actions for updating entered component properites on clicking set parameters export const setCompProperties = (id, compProperties) => (dispatch) => { dispatch({ type: actions.SET_COMP_PROPERTIES, payload: { id: id, compProperties: compProperties } }) } // handleing hiding of component properties sidebar export const closeCompProperties = () => (dispatch) => { dispatch({ type: actions.CLOSE_COMP_PROPERTIES }) } ================================================ FILE: eda-frontend/src/redux/actions/dashboardActions.js ================================================ import api from '../../utils/Api' import * as actions from './actions' // Api call for listing user'ssaved schematic to display on dashboard export const fetchSchematics = () => (dispatch, getState) => { const token = getState().authReducer.token const config = { headers: { 'Content-Type': 'application/json' } } if (token) { config.headers.Authorization = `Token ${token}` } api.get('save/list', config) .then( (res) => { console.log(res.data) dispatch({ type: actions.FETCH_SCHEMATICS, payload: res.data }) } ) .catch((err) => { console.error(err) }) } // Api call for listing users projects to display on dashboard export const fetchMyProjects = () => (dispatch, getState) => { const token = getState().authReducer.token const config = { headers: { 'Content-Type': 'application/json' } } if (token) { config.headers.Authorization = `Token ${token}` } api.get('publish/myproject/', config) .then( (res) => { console.log(res.data) dispatch({ type: actions.FETCH_MY_PROJECTS, payload: res.data }) } ) .catch((err) => { console.error(err) }) } // Api call for listing other users projects to display on dashboard export const fetchOtherProjects = () => (dispatch, getState) => { const token = getState().authReducer.token const config = { headers: { 'Content-Type': 'application/json' } } if (token) { config.headers.Authorization = `Token ${token}` } api.get('workflow/otherprojects/', config) .then( (res) => { dispatch({ type: actions.FETCH_OTHER_PROJECTS, payload: res.data }) } ) .catch((err) => { console.error(err) }) } // Api call for listing public projects to display on dashboard export const fetchPublicProjects = () => (dispatch, getState) => { const token = getState().authReducer.token const config = { headers: { 'Content-Type': 'application/json' } } if (token) { config.headers.Authorization = `Token ${token}` } api.get('publish/publishing/', config) .then( (res) => { dispatch({ type: actions.FETCH_PUBLIC_PROJECTS, payload: res.data }) console.log(res.data[0].status) } ) .catch((err) => { console.error(err) }) } // Api call for deleting saved schematic export const deleteSchematic = (saveId) => (dispatch, getState) => { const token = getState().authReducer.token const config = { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } } if (token) { config.headers.Authorization = `Token ${token}` } api.delete('save/' + saveId, config) .then( (res) => { if (res.status === 200 || res.status === 204) { console.log('Called Delete') dispatch(fetchSchematics()) } } ) .catch((err) => { console.error(err) }) } ================================================ FILE: eda-frontend/src/redux/actions/galleryActions.js ================================================ /* eslint-disable camelcase */ import * as actions from './actions' import api from '../../utils/Api' import { renderGalleryXML } from '../../components/SchematicEditor/Helper/ToolbarTools' import { setTitle } from './index' import { fetchLibrary, removeLibrary } from './schematicEditorActions' import { setSchTitle, setSchDescription, setSchXmlData } from './saveSchematicActions' // Action for Loading Gallery schematics export const fetchGallery = () => (dispatch, getState) => { const config = { headers: { 'Content-Type': 'application/json' } } api.get('save/gallery', config) .then((res) => { console.log(res.data) const data = res.data dispatch({ type: actions.FETCH_GALLERY, payload: data }) dispatch(setTitle('* ' + data.name)) dispatch(setSchTitle(data.name)) dispatch(setSchDescription(data.description)) dispatch(setSchXmlData(data.data_dump)) renderGalleryXML(data.data_dump) if (data.esim_libraries.length > 0) { getState().schematicEditorReducer.libraries.forEach(e => dispatch(removeLibrary(e.id))) data.esim_libraries.forEach(e => dispatch(fetchLibrary(e.id))) } dispatch({ type: actions.FETCH_GALLERY, payload: res.data }) }) .catch((err) => { console.error(err) }) } // Api call to delete the schematic in gallery [role required: Staff] export const deleteGallerySch = (Id) => (dispatch, getState) => { const token = getState().authReducer.token // add headers const config = { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } } // If token available add to headers if (token) { config.headers.Authorization = `Token ${token}` } console.log('deleting ', Id) api .delete('save/gallery/' + Id, config) .then( (res) => { console.log('Called delete for: ', res) dispatch(fetchGallery()) } ) .catch((err) => { console.error(err) }) } ================================================ FILE: eda-frontend/src/redux/actions/index.js ================================================ // Actions dispatch to change state variables inside store export * from './schematicEditorActions' export * from './componentPropertiesActions' export * from './netlistActions' export * from './simulationActions' export * from './authActions' export * from './saveSchematicActions' export * from './dashboardActions' export * from './accountActions' export * from './projectActions' export * from './galleryActions' ================================================ FILE: eda-frontend/src/redux/actions/netlistActions.js ================================================ import * as actions from './actions' // Action to update netlist with component nodes and parameters export const setNetlist = (netlist) => (dispatch) => { dispatch({ type: actions.SET_NETLIST, payload: { netlist: netlist } }) } // Action to update netlist title export const setTitle = (title) => (dispatch) => { dispatch({ type: actions.SET_TITLE, payload: { title: title } }) } // Action to update netlist model section export const setModel = (model) => (dispatch) => { dispatch({ type: actions.SET_MODEL, payload: { model: model } }) } // Action to update netlist contorl line section export const setControlLine = (controlLine) => (dispatch) => { dispatch({ type: actions.SET_CONTROL_LINE, payload: { controlLine: controlLine } }) } // Action to update netlist control block section export const setControlBlock = (controlBlock) => (dispatch) => { dispatch({ type: actions.SET_CONTROL_BLOCK, payload: { controlBlock: controlBlock } }) } ================================================ FILE: eda-frontend/src/redux/actions/projectActions.js ================================================ /* eslint-disable camelcase */ import * as actions from './actions' import api from '../../utils/Api' export const createProject = (save_id, details) => (dispatch, getState) => { // Get token from localstorage const token = localStorage.getItem('esim_token') // add headers const config = { headers: { 'Content-Type': 'application/json' } } // If token available add to headers if (token) { config.headers.Authorization = `Token ${token}` } api.post(`/publish/project/${save_id}`, details, config) .then( (res) => { dispatch({ type: actions.SET_CURRENT_PROJECT, payload: res.data }) } ) .catch((err) => { console.error(err) }) } export const fetchProject = () => (dispatch, getState) => { // Get token from localstorage const token = getState().authReducer.token const project_id = getState().saveSchematicReducer.details.project_id // add headers const config = { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } } // If token available add to headers if (token) { config.headers.Authorization = `Token ${token}` } api.get('/publish/project/' + project_id, config) .then( (res) => { dispatch({ type: actions.SET_CURRENT_PROJECT, payload: res.data }) if (res.data.is_reported) { dispatch(fetchReports(project_id)) } } ) .catch((err) => { if (err.response?.status === 401) { dispatch({ type: actions.SET_CURRENT_PROJECT, payload: '401' }) } }) } export const deleteProject = (project_id) => (dispatch, getState) => { // Get token from localstorage const token = getState().authReducer.token // add headers const config = { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } } // If token available add to headers if (token) { config.headers.Authorization = `Token ${token}` } api.delete('/publish/project/' + project_id, config) .then( (res) => { dispatch({ type: actions.DELETE_PROJECT }) } ) .catch((err) => { console.log(err) }) } export const fetchReports = (projectID) => (dispatch, getState) => { // Get token from localstorage const token = getState().authReducer.token // add headers const config = { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } } // If token available add to headers if (token) { config.headers.Authorization = `Token ${token}` } api.get('workflow/report/' + projectID, config) .then( (res) => { if (res.data.open !== [] && res.data.closed !== [] && res.data.approved !== []) { dispatch({ type: actions.FETCH_REPORTS, payload: res.data }) } } ) .catch((err) => { console.error(err) }) } export const resolveReports = (projectID, stateName) => (dispatch, getState) => { // Get token from localstorage const token = getState().authReducer.token // add headers const config = { headers: { 'Content-Type': 'application/json' } } // If token available add to headers if (token) { config.headers.Authorization = `Token ${token}` } api.post('workflow/report/resolve/' + projectID, { name: stateName }, config) .then( (res) => { dispatch({ type: actions.RESOLVE_REPORTS }) console.log(res.data) } ) .catch((err) => { console.error(err) }) } export const getStatus = (project_id) => (dispatch, getState) => { const token = getState().authReducer.token if (!project_id) { project_id = getState().saveSchematicReducer.details.project_id } // add headers const config = { headers: { 'Content-Type': 'application/json' } } // If token available add to headers if (token) { config.headers.Authorization = `Token ${token}` } api.get(`/workflow/state/${project_id}`, config) .then((res) => { console.log(res.data) dispatch({ type: actions.GET_STATES, payload: res.data }) }) .catch(error => console.log(error)) } export const changeStatus = (project_id, status, notes) => (dispatch, getState) => { // post the state const token = localStorage.getItem('esim_token') // add headers const config = { headers: { 'Content-Type': 'application/json' } } // If token available add to headers if (token) { config.headers.Authorization = `Token ${token}` } api.post(`/workflow/state/${project_id}`, { name: status, note: notes }, config) .then((res) => { dispatch(fetchProject()) dispatch(getStatus()) }) .catch(error => console.log(error)) } export const reportProject = (reportDescription, project_id) => (dispatch, getState) => { // Get token from localstorage if (reportDescription) { const token = getState().authReducer.token // add headers const config = { headers: { 'Content-Type': 'application/json' } } // If token available add to headers if (token) { config.headers.Authorization = `Token ${token}` } api.post(`workflow/report/create/${project_id}`, { description: reportDescription }, config) .then( (res) => { dispatch(fetchProject(project_id)) dispatch(fetchReports(project_id)) } ) .catch((err) => { console.error(err) }) } } export const approveReports = (project_id, reports, status) => (dispatch, getState) => { // Get token from localstorage const token = getState().authReducer.token // add headers const config = { headers: { 'Content-Type': 'application/json' } } // If token available add to headers if (token) { config.headers.Authorization = `Token ${token}` } api.post(`workflow/report/approve/${project_id}`, { reports: reports, state: { name: status } }, config) .then( (res) => { dispatch(fetchReports(project_id)) } ) .catch((err) => { console.error(err) }) } ================================================ FILE: eda-frontend/src/redux/actions/saveSchematicActions.js ================================================ /* eslint-disable camelcase */ import * as actions from './actions' import queryString from 'query-string' import api from '../../utils/Api' import { renderGalleryXML } from '../../components/SchematicEditor/Helper/ToolbarTools' import { setTitle } from './index' import { fetchLibrary, removeLibrary } from './schematicEditorActions' import randomstring from 'randomstring' import { fetchProject } from './projectActions' import { v4 as uuidv4 } from 'uuid' export const setSchTitle = (title) => (dispatch) => { dispatch({ type: actions.SET_SCH_TITLE, payload: { title: title } }) } export const setSchDescription = (description) => (dispatch) => { dispatch({ type: actions.SET_SCH_DESCRIPTION, payload: { description: description } }) } export const setSchXmlData = (xmlData) => (dispatch) => { dispatch({ type: actions.SET_SCH_XML_DATA, payload: { xmlData: xmlData } }) } // Api call to save new schematic or updating saved schematic. export const saveSchematic = (title, description, xml, base64, newBranch = false, branchName = null, setVersions, ltiExists = false, versions, branchOpen, setBranchOpen, setSaveId = null) => (dispatch, getState) => { var libraries = [] getState().schematicEditorReducer.libraries.forEach(e => { libraries.push(e.id) }) const project_id = getState().saveSchematicReducer.details.project_id const body = { data_dump: xml, base64_image: base64, name: title, description: description, esim_libraries: JSON.stringify([...libraries]), project_id: project_id } // Get token from localstorage const token = getState().authReducer.token const schSave = getState().saveSchematicReducer console.log(schSave) // add headers const config = { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } } // If token available add to headers if (token) { config.headers.Authorization = `Token ${token}` } if (!newBranch) { console.log('New Version not Branch') body.version = randomstring.generate({ length: 20 }) if (schSave.isSaved && !ltiExists) { // Updating saved schemaic body.save_id = schSave.details.save_id body.branch = decodeURI(window.location.href.split('branch=')[1]) console.log(window.location.href.split('branch=')[1]) api .post('save', queryString.stringify(body), config) .then((res) => { if (!res.data.duplicate) { setVersions(res.data.version, false, null) } dispatch({ type: actions.SET_SCH_SAVED, payload: res.data }) }) .catch((err) => { console.error(err) }) } else { body.branch = 'master' // saving new schematic api .post('save', queryString.stringify(body), config) .then((res) => { setVersions(res.data.version, true, res.data.save_id) dispatch({ type: actions.SET_SCH_SAVED, payload: res.data }) }) .catch((err) => { console.error(err) }) } } else { console.log('New Branch not Version') let flag = 0 for (let i = 0; i < versions.length; i++) { if (branchName === versions[i][0]) { flag = 1 } } if (!flag) { body.save_id = schSave.details.save_id body.branch = branchName body.version = schSave.details.version api .post('save', queryString.stringify(body), config) .then((res) => { const temp = versions const tempBranch = branchOpen const d = new Date(res.data.save_time) res.data.date = d.getDate() + '/' + parseInt(d.getMonth() + 1) + '/' + d.getFullYear() res.data.time = d.getHours() + ':' + d.getMinutes() if (d.getMinutes() < 10) { res.data.time = d.getHours() + ':0' + d.getMinutes() } temp.unshift([res.data.branch, [res.data]]) tempBranch.unshift(false) setBranchOpen(tempBranch) setVersions(temp) dispatch({ type: actions.SET_SCH_SAVED, payload: res.data }) }) .catch((err) => { console.error(err) }) } } } // Api call to save the current schematic to gallery [role required: Staff] export const saveToGallery = (title, description, xml, base64) => (dispatch, getState) => { const token = getState().authReducer.token // add headers const config = { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } } // If token available add to headers if (token) { config.headers.Authorization = `Token ${token}` } console.log(token) console.log(config) const libraries = [] getState().schematicEditorReducer.libraries.forEach(e => { libraries.push(e.id) }) const body = { data_dump: xml, media: base64, name: title, description: description, esim_libraries: JSON.stringify([...libraries]), save_id: 'gallery' + uuidv4() } console.log('successfully saved to gallery') console.log(body) api .post('save/gallery/' + body.save_id, queryString.stringify(body), config) .then( (res) => { console.log(res) } ) .catch((err) => { console.error(err) }) } // Action for Loading on-cloud saved schematics export const fetchSchematic = (saveId, version, branch) => (dispatch, getState) => { // Get token from localstorage const token = getState().authReducer.token // add headers const config = { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } } // If token available add to headers if (token) { config.headers.Authorization = `Token ${token}` } // console.log('Already Saved') api.get('save/' + saveId + '/' + version + '/' + branch, config) .then( (res) => { dispatch({ type: actions.SET_SCH_SAVED, payload: res.data }) dispatch(setSchTitle(res.data.name)) dispatch(setSchDescription(res.data.description)) dispatch(setSchXmlData(res.data.data_dump)) if (res.data.project_id !== undefined) { dispatch(fetchProject()) } renderGalleryXML(res.data.data_dump) if (res.data.esim_libraries.length > 0) { getState().schematicEditorReducer.libraries.forEach(e => dispatch(removeLibrary(e.id))) res.data.esim_libraries.forEach(e => dispatch(fetchLibrary(e.id))) } } ) .catch((err) => { console.error(err) }) } // Action for Loading Gallery schematics export const fetchGallerySchematic = (Id) => (dispatch, getState) => { const config = { headers: { 'Content-Type': 'application/json' } } api.get('save/gallery/' + Id, config) .then((res) => { console.log(res.data) const data = res.data dispatch(setTitle('* ' + data.name)) dispatch(setSchTitle(data.name)) dispatch(setSchDescription(data.description)) dispatch(setSchXmlData(data.data_dump)) renderGalleryXML(data.data_dump) if (data.esim_libraries.length > 0) { getState().schematicEditorReducer.libraries.forEach(e => dispatch(removeLibrary(e.id))) data.esim_libraries.forEach(e => dispatch(fetchLibrary(e.id))) } }) .catch((err) => { console.error(err) }) } export const setSchShared = (share) => (dispatch, getState) => { // Get token from localstorage const token = getState().authReducer.token const schSave = getState().saveSchematicReducer // add headers const config = { headers: { 'Content-Type': 'application/json' } } // If token available add to headers if (token) { config.headers.Authorization = `Token ${token}` } let isShared if (share === true) { isShared = 'on' } else { isShared = 'off' } api .post( 'save/' + schSave.details.save_id + '/sharing/' + isShared + '/' + schSave.details.version + '/' + schSave.details.branch, {}, config ) .then((res) => { dispatch({ type: actions.SET_SCH_SHARED, payload: res.data }) }) .catch((err) => { console.error(err) }) } // Action for Loading local exported schematics export const openLocalSch = (obj) => (dispatch, getState) => { const data = obj dispatch({ type: actions.CLEAR_DETAILS }) dispatch(setTitle('* ' + data.title)) dispatch(setSchTitle(data.title)) dispatch(setSchDescription(data.description)) dispatch(setSchXmlData(data.data_dump)) renderGalleryXML(data.data_dump) } // Action for making a copy of a schematic export const makeCopy = (saveID, version, branch) => (dispatch, getState) => { const token = getState().authReducer.token // add headers const config = { headers: { 'Content-Type': 'application/json' } } // If token available add to headers if (token) { config.headers.Authorization = `Token ${token}` } api.post(`/save/copy/${version}/${saveID}/${branch}`, {}, config) .then(res => { const win = window.open() win.location.href = '/eda/#/editor?id=' + res.data.save_id + '&version=' + res.data.version + '&branch=' + res.data.branch win.focus() }) .catch(error => console.log(error)) } ================================================ FILE: eda-frontend/src/redux/actions/schematicEditorActions.js ================================================ import api from '../../utils/Api' import * as actions from './actions' import store from '../store' // Api call for fetching component library list export const fetchLibraries = () => (dispatch, getState) => { // SAMPLE Response from API // [ // { // "id": 1 // "library_name": "Analog.lib", // "saved_on": "2020-05-19T14:06:02.351977Z" // }, // ] -- Multiple objects in array const token = store.getState().authReducer.token const config = { headers: { 'Content-Type': 'application/json' } } if (token) { config.headers.Authorization = `Token ${token}` } api.get('libraries/default', config).then((res) => { dispatch({ type: actions.FETCH_LIBRARIES, payload: res.data }) }) .catch((err) => { console.error(err) }) } export const fetchAllLibraries = () => (dispatch) => { // SAMPLE Response from API // [ // { // "id": 1 // "library_name": "Analog.lib", // "saved_on": "2020-05-19T14:06:02.351977Z" // }, // ] -- Multiple objects in array const token = store.getState().authReducer.token const config = { headers: { 'Content-Type': 'application/json' } } if (token) { config.headers.Authorization = `Token ${token}` } api.get('libraries/', config).then((res) => { dispatch({ type: actions.FETCH_ALL_LIBRARIES, payload: res.data }) }) .catch((err) => { console.error(err) }) } export const fetchCustomLibraries = () => (dispatch) => { // SAMPLE Response from API // [ // { // "id": 1 // "library_name": "Analog.lib", // "saved_on": "2020-05-19T14:06:02.351977Z" // }, // ] -- Multiple objects in array const token = store.getState().authReducer.token const config = { headers: { 'Content-Type': 'application/json' } } if (token) { config.headers.Authorization = `Token ${token}` } api.get('libraries/get_custom_libraries', config).then((res) => { if (res.data.length > 0) { dispatch({ type: actions.FETCH_CUSTOM_LIBRARIES, payload: res.data }) } }) .catch((err) => { console.error(err) }) } export const fetchLibrary = (libraryId) => (dispatch) => { // SAMPLE Response from API // { // "library_name": "Motor.lib", // "saved_on": "2021-05-10T20:29:01.794498Z", // "id": 363 // } -- Single Object const token = store.getState().authReducer.token const config = { headers: { 'Content-Type': 'application/json' } } if (token) { config.headers.Authorization = `Token ${token}` } api.get(`libraries/${libraryId}`, config).then(res => { dispatch({ type: actions.FETCH_LIBRARY, payload: res.data }) }) } export const removeLibrary = (libraryId) => (dispatch) => { dispatch({ type: actions.REMOVE_LIBRARY, payload: libraryId }) } export const deleteLibrary = (libraryId) => (dispatch) => { const token = store.getState().authReducer.token const config = { headers: { Authorization: `Token ${token}` } } api.delete(`libraries/${libraryId}/`, config).then( dispatch({ type: actions.DELETE_LIBRARY, payload: libraryId }) ).catch(err => { console.log(err) }) } // API call to save uploaded libraries export const uploadLibrary = (formData) => (dispatch) => { const token = store.getState().authReducer.token const config = { headers: { Authorization: `Token ${token}` } } api.post('/library-sets/', formData, config).then(res => { dispatch({ type: actions.UPLOAD_LIBRARIES, payload: res.status }) }) .catch(err => { console.log(err) console.log(err.response.status) dispatch({ type: actions.UPLOAD_LIBRARIES, payload: err.response.status }) }) } export const resetUploadSuccess = () => (dispatch) => { dispatch({ type: actions.RESET_UPLOAD_SUCCESS }) } // Api call for fetching components under specified library id export const fetchComponents = (libraryId) => (dispatch) => { // SAMPLE Response from API // [ // { // "id": 14221, // "name": "BAT54ADW", // "svg_path": "kicad-symbols/symbol_svgs/Diode/D-BAT54ADW-1-A.svg", // "thumbnail_path": "kicad-symbols/symbol_svgs/Diode/D-BAT54ADW-1-A_thumbnail.svg", // "symbol_prefix": "D", // "component_library": "http://localhost/api/libraries/193/", // "description": "Schottky diode array 2 pair Com A", // "data_link": "http://www.diodes.com/datasheets/ds30152.pdf", // "full_name": "D-BAT54ADW-1-A", // "keyword": "diode", // "alternate_component": [ // { // "dmg": 1, // "part": "C", // "full_name": "D-BAT54ADW-1-C", // "svg_path": "kicad-symbols/symbol_svgs/Diode/D-BAT54ADW-1-C.svg", // "id": 2326 // }, // { // "dmg": 1, // "part": "B", // "full_name": "D-BAT54ADW-1-B", // "svg_path": "kicad-symbols/symbol_svgs/Diode/D-BAT54ADW-1-B.svg", // "id": 2327 // }, // ] // }, // ] -- Multiple objects in array const token = store.getState().authReducer.token const config = { headers: { 'Content-Type': 'application/json' } } if (token) { config.headers.Authorization = `Token ${token}` } const url = 'components/?component_library=' + parseInt(libraryId) api.get(url, config) .then( (res) => { dispatch({ type: actions.FETCH_COMPONENTS, payload: { components: res.data, id: libraryId } }) } ) .catch((err) => { console.error(err) }) } // Action to keep only one component list dropdown open at a time export const toggleCollapse = (id) => (dispatch) => { dispatch({ type: actions.TOGGLE_COLLAPSE, payload: { id: id } }) } // Action to hide components list to display simulation parameters export const toggleSimulate = () => (dispatch) => { dispatch({ type: actions.TOGGLE_SIMULATE }) } ================================================ FILE: eda-frontend/src/redux/actions/simulationActions.js ================================================ import * as actions from './actions' // Actions to update title for simulation result screen export const setResultTitle = (title) => (dispatch) => { dispatch({ type: actions.SET_RESULT_TITLE, payload: { title: title } }) } // Action to update store with graphical result points export const setResultGraph = (graph) => (dispatch) => { dispatch({ type: actions.SET_RESULT_GRAPH, payload: { graph: graph } }) } // Action to update store with simulation result text export const setResultText = (text) => (dispatch) => { dispatch({ type: actions.SET_RESULT_TEXT, payload: { text: text } }) } ================================================ FILE: eda-frontend/src/redux/reducers/accountReducer.js ================================================ import * as actions from '../actions/actions' const initialState = { changePasswordSuccess: false, changePasswordError: '' } export default function (state = initialState, action) { switch (action.type) { case actions.CHANGE_PASSWORD_SUCCESS: { return { ...state, changePasswordSuccess: true, changePasswordError: action.payload.data } } case actions.CHANGE_PASSWORD_FAILED: { return { ...state, changePasswordSuccess: false, changePasswordError: action.payload.data } } default: return state } } ================================================ FILE: eda-frontend/src/redux/reducers/authReducer.js ================================================ import * as actions from '../actions/actions' const initialState = { token: localStorage.getItem('esim_token'), isAuthenticated: null, isRegistered: null, isLoading: false, user: null, roles: null, errors: '', regErrors: '', resetPasswordSuccess: false, resetPasswordError: '', resetPasswordConfirmSuccess: false } export default function (state = initialState, action) { switch (action.type) { case actions.USER_LOADING: { return { ...state, isLoading: true } } case actions.DEFAULT_STORE: { return { ...initialState, errors: '', regErrors: '' } } case actions.SIGNUP_SUCCESSFUL: { return { ...state, isRegistered: true, regErrors: action.payload.data } } case actions.SIGNUP_FAILED: { return { ...state, isRegistered: false, regErrors: action.payload.data } } case actions.USER_LOADED: { return { ...state, isAuthenticated: true, isLoading: false, user: action.payload.user } } case actions.LOGIN_SUCCESSFUL: { localStorage.setItem('user_id', action.payload.data.user_id) localStorage.setItem('esim_token', action.payload.data.auth_token) return { ...state, token: action.payload.data.auth_token, // ...action.payload.data, // isAuthenticated: true, // isLoading: false, errors: '' } } case actions.LOADING_FAILED: { return { ...state, isLoading: false } } case actions.AUTHENTICATION_ERROR: case actions.LOGIN_FAILED: case actions.LOGOUT_SUCCESSFUL: { localStorage.removeItem('esim_token') return { ...state, errors: action.payload.data, token: null, user: null, isAuthenticated: false, isLoading: false } } case actions.RESET_PASSWORD_SUCCESSFUL: { return { ...state, resetPasswordSuccess: true, resetPasswordError: action.payload.data } } case actions.RESET_PASSWORD_FAILED: { return { ...state, resetPasswordSuccess: false, resetPasswordError: action.payload.data } } case actions.RESET_PASSWORD_CONFIRM_SUCCESSFUL: { return { ...state, resetPasswordConfirmSuccess: true, resetPasswordError: action.payload.data } } case actions.RESET_PASSWORD_CONFIRM_FAILED: { return { ...state, resetPasswordConfirmSuccess: false, resetPasswordError: action.payload.data } } case actions.ROLE_LOADED: { return { ...state, roles: action.payload.data } } default: return state } } ================================================ FILE: eda-frontend/src/redux/reducers/componentPropertiesReducer.js ================================================ import * as actions from '../actions/actions' import { ZoomAct } from '../../components/SchematicEditor/Helper/ToolbarTools.js' const InitialState = { id: '', isPropertiesWindowOpen: false, compProperties: {}, x: 0, y: 0 } export default function (state = InitialState, action) { switch (action.type) { case actions.GET_COMP_PROPERTIES: { return { ...state, id: action.payload.id, isPropertiesWindowOpen: true, compProperties: action.payload.compProperties, x: action.payload.x, y: action.payload.y } } case actions.SET_COMP_PROPERTIES: { return { ...state, id: action.payload.id, isPropertiesWindowOpen: false, compProperties: action.payload.compProperties } } case actions.CLOSE_COMP_PROPERTIES: { ZoomAct() return { ...state, isPropertiesWindowOpen: false } } case actions.CLOSE_COMP_PROPERTIES_TEMP: { return { ...state, isPropertiesWindowOpen: false } } default: return state } } ================================================ FILE: eda-frontend/src/redux/reducers/dashboardReducer.js ================================================ import * as actions from '../actions/actions' const InitialState = { schematics: [], myProjects: [], publicProjects: [], otherProjects: [] } export default function (state = InitialState, action) { switch (action.type) { case actions.FETCH_SCHEMATICS: { return { ...state, schematics: action.payload } } case actions.FETCH_MY_PROJECTS: { return { ...state, myProjects: action.payload } } case actions.FETCH_PUBLIC_PROJECTS: { return { ...state, publicProjects: action.payload } } case actions.FETCH_OTHER_PROJECTS: { return { ...state, otherProjects: action.payload } } default: return state } } ================================================ FILE: eda-frontend/src/redux/reducers/galleryReducer.js ================================================ import * as actions from '../actions/actions' const InitialState = { schematics: [] } export default function (state = InitialState, action) { switch (action.type) { case actions.FETCH_GALLERY: { return { ...state, schematics: action.payload } } default: return state } } ================================================ FILE: eda-frontend/src/redux/reducers/index.js ================================================ import { combineReducers } from 'redux' import schematicEditorReducer from './schematicEditorReducer' import componentPropertiesReducer from './componentPropertiesReducer' import netlistReducer from './netlistReducer' import simulationReducer from './simulationReducer' import authReducer from './authReducer' import saveSchematicReducer from './saveSchematicReducer' import dashboardReducer from './dashboardReducer' import accountReducer from './accountReducer' import projectReducer from './projectReducer' import galleryReducer from './galleryReducer' export default combineReducers({ schematicEditorReducer, componentPropertiesReducer, netlistReducer, simulationReducer, authReducer, saveSchematicReducer, dashboardReducer, accountReducer, projectReducer, galleryReducer }) ================================================ FILE: eda-frontend/src/redux/reducers/netlistReducer.js ================================================ import * as actions from '../actions/actions' const initialState = { title: '* Untitled_Schematic', model: '', netlist: '', controlLine: '', controlBlock: '' } export default function (state = initialState, action) { switch (action.type) { case actions.SET_NETLIST: { return { ...state, netlist: action.payload.netlist } } case actions.SET_TITLE: { return { ...state, title: action.payload.title } } case actions.SET_MODEL: { return { ...state, model: action.payload.model } } case actions.SET_CONTROL_LINE: { return { ...state, controlLine: action.payload.controlLine } } case actions.SET_CONTROL_BLOCK: { return { ...state, controlBlock: action.payload.controlBlock } } default: return state } } ================================================ FILE: eda-frontend/src/redux/reducers/projectReducer.js ================================================ import * as actions from '../actions/actions' const initialState = { details: null, reports: null, states: null } export default function (state = initialState, action) { switch (action.type) { case actions.SET_CURRENT_PROJECT: { return { ...state, details: action.payload } } case actions.DELETE_PROJECT: { return { reports: null, details: null, states: null } } case actions.FETCH_REPORTS: { return { ...state, reports: action.payload } } case actions.RESOLVE_REPORTS: { return { ...state, reports: null } } case actions.GET_STATES: { return { ...state, states: action.payload } } case actions.SET_STATE: { return { ...state } } default: return state } } ================================================ FILE: eda-frontend/src/redux/reducers/saveSchematicReducer.js ================================================ import * as actions from '../actions/actions' const initialState = { title: 'Untitled_Schematic', description: '', xmlData: null, details: {}, isSaved: null, isShared: null } export default function (state = initialState, action) { switch (action.type) { case actions.SET_SCH_SAVED: { return { ...state, isSaved: true, isShared: action.payload.shared, details: action.payload } } case actions.SET_SCH_SHARED: { return { ...state, isShared: true, details: action.payload } } case actions.CLEAR_DETAILS: { return { ...state, isSaved: null, isShared: null, details: {} } } case actions.SET_SCH_TITLE: { return { ...state, title: action.payload.title } } case actions.SET_SCH_DESCRIPTION: { return { ...state, description: action.payload.description } } case actions.SET_SCH_XML_DATA: { return { ...state, xmlData: action.payload.xmlData } } default: return state } } ================================================ FILE: eda-frontend/src/redux/reducers/schematicEditorReducer.js ================================================ import * as actions from '../actions/actions' const InitialState = { isSimulate: false, libraries: [], collapse: {}, components: {} } export default function (state = InitialState, action) { switch (action.type) { case actions.FETCH_LIBRARIES: { // Add 'open' parameter to track open/close state of collapse const collapse = {} const components = {} action.payload.forEach(element => { collapse[element.id] = false components[element.id] = [] }) return { ...state, libraries: action.payload, collapse: collapse, components: components } } case actions.TOGGLE_COLLAPSE: { const existingState = state.collapse[action.payload.id] const newCollapse = Object.keys(state.collapse).reduce(function (accObj, parseObj) { accObj[parseObj] = false return accObj }, {}) newCollapse[action.payload.id] = !existingState Object.assign(state.collapse, newCollapse) return { ...state, collapse: { ...state.collapse, newCollapse } } } case actions.FETCH_COMPONENTS: { const newComponents = state.components newComponents[action.payload.id] = action.payload.components // console.log('Fetched and added ', newComponents[action.payload.id].length, 'Components') Object.assign(state.components, newComponents) return { ...state, components: { ...state.components, newComponents } } } case actions.TOGGLE_SIMULATE: { return { ...state, isSimulate: !state.isSimulate } } case actions.FETCH_ALL_LIBRARIES: { const components = { ...state.components } var allLibraries = action.payload allLibraries.forEach(e => { if (!components[e.id]) { components[e.id] = [] } }) return { ...state, allLibraries: allLibraries, components: components } } case actions.FETCH_CUSTOM_LIBRARIES: { const allComponents = {} action.payload.forEach(e => { allComponents[e.id] = [] }) return { ...state, customLibraries: action.payload } } case actions.FETCH_LIBRARY: { const components = { ...state.components } components[action.payload.id] = [] const collapse = { ...state.collapse } const libraries = [...state.libraries] const newLib = action.payload collapse[newLib.id] = false if (!libraries.some(e => e.id === newLib.id)) { libraries.push(newLib) } return { ...state, libraries: libraries, components: components, collapse: collapse } } case actions.REMOVE_LIBRARY: { var libraries = [...state.libraries] const filterFunc = (element) => { return element.id !== action.payload } libraries = libraries.filter(filterFunc) return { ...state, libraries: libraries } } case actions.DELETE_LIBRARY: { const filterFunc = (element) => { return element.id !== action.payload } var newLibraries = [...state.libraries] newLibraries = newLibraries.filter(filterFunc) const allComponents = { ...state.components } const allLibraries = [...state.allLibraries].filter(filterFunc) delete allComponents[action.payload] return { ...state, libraries: newLibraries, allLibraries: allLibraries, components: allComponents } } case actions.UPLOAD_LIBRARIES: { if (action.payload === 201) { return { ...state, uploadSuccess: true } } else { return { ...state, uploadSuccess: false } } } case actions.RESET_UPLOAD_SUCCESS: { return { ...state, uploadSuccess: null } } default: return state } } ================================================ FILE: eda-frontend/src/redux/reducers/simulationReducer.js ================================================ import * as actions from '../actions/actions' const initialState = { title: '', isGraph: 'false', text: [], graph: {}, isSimRes: false } export default function (state = initialState, action) { switch (action.type) { case actions.SET_RESULT_TITLE: { return { ...state, title: action.payload.title } } case actions.SET_RESULT_GRAPH: { return { ...state, isSimRes: true, isGraph: 'true', graph: action.payload.graph } } case actions.SET_RESULT_TEXT: { return { ...state, isSimRes: true, isGraph: 'false', text: action.payload.text } } default: return state } } ================================================ FILE: eda-frontend/src/redux/store.js ================================================ // Initialize Redux store which holds the whole state tree of application. import reducer from './reducers/index' import { createStore, applyMiddleware } from 'redux' import reduxThunk from 'redux-thunk' const createStoreWithMiddleware = applyMiddleware(reduxThunk)(createStore) const store = createStoreWithMiddleware( reducer, window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__() ) export default store ================================================ FILE: eda-frontend/src/serviceWorker.js ================================================ // This optional code is used to register a service worker. // register() is not called by default. // This lets the app load faster on subsequent visits in production, and gives // it offline capabilities. However, it also means that developers (and users) // will only see deployed updates on subsequent visits to a page, after all the // existing tabs open on the page have been closed, since previously cached // resources are updated in the background. // To learn more about the benefits of this model and instructions on how to // opt-in, read https://bit.ly/CRA-PWA const isLocalhost = Boolean( window.location.hostname === 'localhost' || // [::1] is the IPv6 localhost address. window.location.hostname === '[::1]' || // 127.0.0.0/8 are considered localhost for IPv4. window.location.hostname.match( /^127(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/ ) ) export function register (config) { if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) { // The URL constructor is available in all browsers that support SW. const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href) if (publicUrl.origin !== window.location.origin) { // Our service worker won't work if PUBLIC_URL is on a different origin // from what our page is served on. This might happen if a CDN is used to // serve assets; see https://github.com/facebook/create-react-app/issues/2374 return } window.addEventListener('load', () => { const swUrl = `${process.env.PUBLIC_URL}/service-worker.js` if (isLocalhost) { // This is running on localhost. Let's check if a service worker still exists or not. checkValidServiceWorker(swUrl, config) // Add some additional logging to localhost, pointing developers to the // service worker/PWA documentation. navigator.serviceWorker.ready.then(() => { // console.log( // 'This web app is being served cache-first by a service ' + // 'worker. To learn more, visit https://bit.ly/CRA-PWA' // ) }) } else { // Is not localhost. Just register service worker registerValidSW(swUrl, config) } }) } } function registerValidSW (swUrl, config) { navigator.serviceWorker .register(swUrl) .then(registration => { registration.onupdatefound = () => { const installingWorker = registration.installing if (installingWorker == null) { return } installingWorker.onstatechange = () => { if (installingWorker.state === 'installed') { if (navigator.serviceWorker.controller) { // At this point, the updated precached content has been fetched, // but the previous service worker will still serve the older // content until all client tabs are closed. // console.log( // 'New content is available and will be used when all ' + // 'tabs for this page are closed. See https://bit.ly/CRA-PWA.' // ) // Execute callback if (config && config.onUpdate) { config.onUpdate(registration) } } else { // At this point, everything has been precached. // It's the perfect time to display a // "Content is cached for offline use." message. // console.log('Content is cached for offline use.') // Execute callback if (config && config.onSuccess) { config.onSuccess(registration) } } } } } }) .catch(error => { console.error('Error during service worker registration:', error) }) } function checkValidServiceWorker (swUrl, config) { // Check if the service worker can be found. If it can't reload the page. fetch(swUrl, { headers: { 'Service-Worker': 'script' } }) .then(response => { // Ensure service worker exists, and that we really are getting a JS file. const contentType = response.headers.get('content-type') if ( response.status === 404 || (contentType != null && contentType.indexOf('javascript') === -1) ) { // No service worker found. Probably a different app. Reload the page. navigator.serviceWorker.ready.then(registration => { registration.unregister().then(() => { window.location.reload() }) }) } else { // Service worker found. Proceed as normal. registerValidSW(swUrl, config) } }) .catch(() => { console.log( 'No internet connection found. App is running in offline mode.' ) }) } export function unregister () { if ('serviceWorker' in navigator) { navigator.serviceWorker.ready .then(registration => { registration.unregister() }) .catch(error => { console.error(error.message) }) } } ================================================ FILE: eda-frontend/src/setupTests.js ================================================ // jest-dom adds custom jest matchers for asserting on DOM nodes. // allows you to do things like: // expect(element).toHaveTextContent(/react/i) // learn more: https://github.com/testing-library/jest-dom import '@testing-library/jest-dom/extend-expect' ================================================ FILE: eda-frontend/src/theme.js ================================================ import { red } from '@material-ui/core/colors' import { createMuiTheme } from '@material-ui/core/styles' // A custom Material UI theme for this application const theme = createMuiTheme({ palette: { primary: { main: '#556cd6' }, secondary: { main: '#19857b' }, error: { main: red.A400 }, background: { default: '#fff' } } }) export default theme ================================================ FILE: eda-frontend/src/utils/Api.js ================================================ // Creating a new instance of axios for custom API config. import axios from 'axios' export default axios.create({ baseURL: '/api/', responseType: 'json' }) ================================================ FILE: esim-cloud-backend/.gitignore ================================================ *.sqlite3 __pycache__ venv/ static/ symbols/* .DS_Store symbol_svgs kicad-symbols/* ================================================ FILE: esim-cloud-backend/Dockerfile ================================================ FROM python:3.7-alpine ENV PYTHONUNBUFFERED 1 ENV PYTHONDONTWRITEBYTECODE 1 RUN mkdir /code WORKDIR /code ENV NGSPICE_VERSION 31 RUN apk add --no-cache --virtual .build-deps \ autoconf \ automake \ bison \ curl \ flex \ g++ \ libx11-dev \ libxaw-dev \ libtool \ make RUN curl -fSL https://github.com/imr/ngspice/archive/ngspice-$NGSPICE_VERSION.tar.gz -o ngspice.tar.gz \ && mkdir -p /usr/src \ && tar -zxC /usr/src -f ngspice.tar.gz \ && rm ngspice.tar.gz \ && cd /usr/src/ngspice-ngspice-$NGSPICE_VERSION \ && ./autogen.sh \ && ./configure \ && make \ && make install \ && apk del .build-deps # Arduino Cli and Compiling tools RUN apk add \ wget \ tar \ ca-certificates \ gcc-avr \ binutils \ avr-libc \ ctags ENV USER=root RUN wget -O /tmp/cli.tar.gz \ https://downloads.arduino.cc/arduino-cli/arduino-cli_0.10.0_Linux_64bit.tar.gz && \ cd /tmp && \ mkdir arduino && \ tar -xvf /tmp/cli.tar.gz && \ mv /tmp/arduino-cli /usr/bin/arduino-cli && \ rm /tmp/cli.tar.gz RUN arduino-cli core update-index \ && arduino-cli core install arduino:avr \ && arduino-cli lib install Servo \ && arduino-cli lib install Stepper \ && arduino-cli lib install LiquidCrystal \ && cd /root/.arduino15/ \ && find / -name platform.txt -exec sed -i "s/^compiler.path=.*$/compiler.path=/g" {} \; \ && find . -name ctags -exec ln -nsf /usr/bin/ctags {} \; RUN apk add --no-cache libxt jpeg-dev zlib-dev libxaw-dev libx11-dev libtool mariadb-connector-c-dev libffi-dev postgresql-dev COPY requirements.txt /code/ RUN apk add --no-cache mariadb-connector-c-dev ;\ apk add --update alpine-sdk && \ apk add libffi-dev openssl-dev && \ apk --no-cache --update add build-base ;\ apk add --no-cache --virtual .build-deps gcc python3-dev musl-dev mariadb-dev\ && pip install --upgrade pip\ && pip install --trusted-host pypi.python.org -r requirements.txt \ && apk del .build-deps ================================================ FILE: esim-cloud-backend/README.md ================================================ # eSim-Cloud Backend Documentation ### Configurable Environment Variables for docker container Environment variables can be found in the .env file, detailed description for each environment variable is provided in readthedocs documentation ### Custom Management Commands: * ```python manage.py seed_libs --location kicad-symbols``` can be used to convert ```.lib``` files to SVGs and seed their details to the database for libAPI endpoints. * ```python manage.py seed_libs --clear ``` can be used to delete all existing libraries and components. ### Database Migrations: * ``` migrations.sh ``` can be used to apply all necessary database migrations automatially * If manually running the django backend, please ensure to apply migrations to specific databases * ```python manage.py migrate libAPI --database="mongodb"``` * ```python manage.py migrate simulationAPI --database="mongodb"``` ================================================ FILE: esim-cloud-backend/arduinoAPI/__init__.py ================================================ ================================================ FILE: esim-cloud-backend/arduinoAPI/admin.py ================================================ from django.contrib import admin # Register your models here. ================================================ FILE: esim-cloud-backend/arduinoAPI/apps.py ================================================ from django.apps import AppConfig class ArduinoapiConfig(AppConfig): name = 'arduinoAPI' ================================================ FILE: esim-cloud-backend/arduinoAPI/models.py ================================================ from django.db import models ================================================ FILE: esim-cloud-backend/arduinoAPI/tasks.py ================================================ import os import shutil from pathlib import Path import time import subprocess import traceback from django.conf import settings from celery import shared_task, current_task from celery import states import json import logging import re import uuid logger = logging.getLogger(__name__) PATTERN = r'^[ \t]*\w+\d*[ \t]+\w+\d*\(([ \t]*\w+\d*[ \t]+\w+\d*[ \t]*\,?)*\)[ \t]*\n?\{' # noqa def saveFiles(data, langIndex): # try: filenames = [] if not os.path.exists(settings.MEDIA_ROOT): Path(settings.MEDIA_ROOT).mkdir(parents=True, exist_ok=True) for k in data: foldername = str(uuid.uuid4()) + '_' + str(k) work_dir = settings.MEDIA_ROOT+'/'+str(foldername) Path(work_dir).mkdir(parents=True, exist_ok=True) if langIndex == 0: filename = settings.MEDIA_ROOT+'/'+str(foldername)+'/sketch.ino' elif langIndex == 1: filename = settings.MEDIA_ROOT+'/'+str(foldername)+'/sketch.c' fout = open(filename, 'w', encoding='utf8') matches = re.finditer(PATTERN, data.get(k, ''), re.MULTILINE) for _, match in enumerate(matches, start=1): func_name = match.group().replace('{', '') func_name = func_name.strip() + ';' fout.writelines('#line 1 "{}"\n'.format(filename)) fout.writelines('{}\n'.format(func_name)) fout.writelines(data.get(k, '')) fout.close() filenames.append(foldername) logger.info('Creating') logger.info(filename) return filenames # except Exception: # logger.error(traceback.format_exc()) # return [] def CompileINO(filenames): ret = {} try: for filename in filenames: ino_name = settings.MEDIA_ROOT+'/'+str(filename)+'/sketch.ino' out_name = settings.MEDIA_ROOT+'/'+str(filename)+'/out.hex' logger.info('Compiling') logger.info(ino_name) ps = subprocess.Popen( ['arduino-cli', 'compile', ino_name, '--fqbn', 'arduino:avr:uno', '-o', out_name], stdout=subprocess.PIPE, stderr=subprocess.PIPE ) output, err = ps.communicate() # print(ps.returncode) # print(output) # print(err) data = '' if err == '' and ps.returncode != 0: err = b'Code Cannot be Compiled: Unknown Reason' if os.path.isfile(out_name): data = open(out_name, 'r').read() # print(data) pos = filename.find('_') if pos != -1: pos += 1 key = filename[pos:] else: key = filename ret[key] = { 'output': re.sub( rf'{settings.MEDIA_ROOT}/{filename}/', '', output.decode('utf-8') ), 'error': re.sub( rf'{settings.MEDIA_ROOT}/{filename}/', '', err.decode('utf-8') ), 'data': data } except Exception: print(traceback.format_exc()) return False finally: for filename in filenames: parent = settings.MEDIA_ROOT+'/'+str(filename) shutil.rmtree(parent, True) logger.info('Removing') logger.info(parent) return ret def CompileInlineAssembly(filenames): ret = {} try: for filename in filenames: c_name = settings.MEDIA_ROOT+'/'+str(filename)+'/sketch.c' obj_name = settings.MEDIA_ROOT+'/'+str(filename)+'/sketch.o' bin_name = settings.MEDIA_ROOT+'/'+str(filename)+'/sketch' out_name = settings.MEDIA_ROOT+'/'+str(filename)+'/out.hex' logger.info('Compiling') logger.info(c_name) createObj = "avr-gcc -Os -DF_CPU=16000000UL -mmcu=atmega328p -c -o " + obj_name + " " + c_name createBin = "avr-gcc -mmcu=atmega328p " + obj_name + " -o " + bin_name createHex = "avr-objcopy -O ihex -R .eeprom " + bin_name + " " + out_name ps = subprocess.Popen( createObj + " && " + createBin + " && " + createHex, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True ) output, err = ps.communicate() # print(ps.returncode) # print(output) # print(err) data = '' if err == '' and ps.returncode != 0: err = b'Code Cannot be Compiled: Unknown Reason' if os.path.isfile(out_name): data = open(out_name, 'r').read() # print(data) pos = filename.find('_') if pos != -1: pos += 1 key = filename[pos:] else: key = filename ret[key] = { 'output': "Compiled Successfully", 'error': re.sub( rf'{settings.MEDIA_ROOT}/{filename}/', '', err.decode('utf-8') ), 'data': data } except Exception: print(traceback.format_exc()) return False finally: for filename in filenames: parent = settings.MEDIA_ROOT+'/'+str(filename) shutil.rmtree(parent, True) logger.info('Removing') logger.info(parent) return ret @shared_task def compile_sketch_task(task_id, data, langIndex): try: current_task.update_state( state='PROGRESS', meta={'current_process': 'Saving Files'}) filenames = saveFiles(data, langIndex) current_task.update_state( state='PROGRESS', meta={'current_process': 'Starting Compiling'}) if langIndex == 0: output = CompileINO(filenames) elif langIndex == 1: output = CompileInlineAssembly(filenames) if isinstance(output, bool): current_task.update_state(state='FAILURE', meta={ 'exc_type': 'Compilation Error', 'exc_message': 'Server Error' }) return {'error': True} else: current_task.update_state( state='PROGRESS', meta={'current_process': 'Done'}) return output except Exception as e: current_task.update_state(state='FAILURE', meta={ 'exc_type': type(e).__name__, 'exc_message': traceback.format_exc() }) print(traceback.format_exc()) return {'error': True} ================================================ FILE: esim-cloud-backend/arduinoAPI/tests.py ================================================ from django.test import TestCase # Create your tests here. ================================================ FILE: esim-cloud-backend/arduinoAPI/urls.py ================================================ """ esimCloud URL Configuration """ from django.urls import path from arduinoAPI import views as arduinoAPI_views urlpatterns = [ path('compileINO', arduinoAPI_views.CompileSketchINO.as_view(), name='compileINOFiles'), path('compileInlineAssembly', arduinoAPI_views.CompileSketchInlineAssembly.as_view(), name='compileInlineAssemblyFiles'), path('compile/status', arduinoAPI_views.CompilationStatus.as_view(), name='CompilationStatus') ] ================================================ FILE: esim-cloud-backend/arduinoAPI/views.py ================================================ from django.shortcuts import render from rest_framework.views import APIView from rest_framework.response import Response from arduinoAPI.tasks import compile_sketch_task import uuid from celery.result import AsyncResult class CompileSketchINO(APIView): def post(self, request): """ Compile list of Arduino Sketch File body: {:} example: { "1":"void setup(){}void loop(){}"} """ # Create Task ID (Used for getting Response) task_id = uuid.uuid4() # Queue Task task = compile_sketch_task.apply_async( kwargs={ 'data': request.data, 'task_id': task_id, 'langIndex': 0 }, task_id=str(task_id)) # Return Status return Response({ 'state': task.state, 'uuid': str(task_id) }) class CompileSketchInlineAssembly(APIView): def post(self, request): """ Compile list of Arduino C Inline assembly File body: {:} example: { "1":"#include #include "} """ # Create Task ID (Used for getting Response) task_id = uuid.uuid4() # Queue Task task = compile_sketch_task.apply_async( kwargs={ 'data': request.data, 'task_id': task_id, 'langIndex': 1 }, task_id=str(task_id)) # Return Status return Response({ 'state': task.state, 'uuid': str(task_id) }) class CompilationStatus(APIView): """ Returns Compilation Status """ def get(self, request): # GET task id from Query task_id = request.GET.get("task_id", -1) if task_id == -1: return Response({}) # Get Celery Result celery_result = AsyncResult(str(task_id)) # return Result with status response_data = { 'state': celery_result.state, 'details': celery_result.info } return Response(response_data) ================================================ FILE: esim-cloud-backend/authAPI/__init__.py ================================================ ================================================ FILE: esim-cloud-backend/authAPI/admin.py ================================================ from django.contrib import admin from django.contrib.auth.admin import UserAdmin from .models import User admin.site.register(User, UserAdmin) ================================================ FILE: esim-cloud-backend/authAPI/apps.py ================================================ from django.apps import AppConfig class AuthapiConfig(AppConfig): name = 'authAPI' ================================================ FILE: esim-cloud-backend/authAPI/models.py ================================================ from django.db import models from django.contrib.auth.models import AbstractUser # Create your models here. class User(AbstractUser): email = models.EmailField(unique=True) ================================================ FILE: esim-cloud-backend/authAPI/serializers.py ================================================ from django.contrib.auth import authenticate, get_user_model from rest_framework import serializers from djoser.conf import settings User = get_user_model() class TokenCreateSerializer(serializers.Serializer): password = serializers.CharField(required=False, style={"input_type": "password"}) default_error_messages = { "invalid_credentials": "Incorrect username or password", "inactive_account": """Your account is not activated. Please click on the activation link sent by email.""", } def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.user = None self.fields[settings.LOGIN_FIELD] = serializers.CharField() def validate(self, attrs): password = attrs.get("password") params = {settings.LOGIN_FIELD: attrs.get(settings.LOGIN_FIELD)} self.user = authenticate( request=self.context.get("request"), **params, password=password ) if not self.user: self.user = User.objects.filter(**params).first() if self.user and not self.user.is_active: self.fail("inactive_account") if self.user and not self.user.check_password(password): self.fail("invalid_credentials") if self.user and self.user.is_active: return attrs if self.user and (not self.user.is_active): self.fail("inactive_account") self.fail("invalid_credentials") ================================================ FILE: esim-cloud-backend/authAPI/templates/activate_user.html ================================================ Activate Account

To Activate Your Account Click Here

================================================ FILE: esim-cloud-backend/authAPI/templates/css/normalize.css ================================================ /*! normalize.css v3.0.2 | MIT License | git.io/normalize */ /** * 1. Set default font family to sans-serif. * 2. Prevent iOS text size adjust after orientation change, without disabling * user zoom. */ html { font-family: sans-serif; /* 1 */ -ms-text-size-adjust: 100%; /* 2 */ -webkit-text-size-adjust: 100%; /* 2 */ } /** * Remove default margin. */ body { margin: 0; } /* HTML5 display definitions ========================================================================== */ /** * Correct `block` display not defined for any HTML5 element in IE 8/9. * Correct `block` display not defined for `details` or `summary` in IE 10/11 * and Firefox. * Correct `block` display not defined for `main` in IE 11. */ article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary { display: block; } /** * 1. Correct `inline-block` display not defined in IE 8/9. * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. */ audio, canvas, progress, video { display: inline-block; /* 1 */ vertical-align: baseline; /* 2 */ } /** * Prevent modern browsers from displaying `audio` without controls. * Remove excess height in iOS 5 devices. */ audio:not([controls]) { display: none; height: 0; } /** * Address `[hidden]` styling not present in IE 8/9/10. * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. */ [hidden], template { display: none; } /* Links ========================================================================== */ /** * Remove the gray background color from active links in IE 10. */ a { background-color: transparent; } /** * Improve readability when focused and also mouse hovered in all browsers. */ a:active, a:hover { outline: 0; } /* Text-level semantics ========================================================================== */ /** * Address styling not present in IE 8/9/10/11, Safari, and Chrome. */ abbr[title] { border-bottom: 1px dotted; } /** * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. */ b, strong { font-weight: bold; } /** * Address styling not present in Safari and Chrome. */ dfn { font-style: italic; } /** * Address variable `h1` font-size and margin within `section` and `article` * contexts in Firefox 4+, Safari, and Chrome. */ h1 { font-size: 2em; margin: 0.67em 0; } /** * Address styling not present in IE 8/9. */ mark { background: #ff0; color: #000; } /** * Address inconsistent and variable font size in all browsers. */ small { font-size: 80%; } /** * Prevent `sub` and `sup` affecting `line-height` in all browsers. */ sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } sup { top: -0.5em; } sub { bottom: -0.25em; } /* Embedded content ========================================================================== */ /** * Remove border when inside `a` element in IE 8/9/10. */ img { border: 0; } /** * Correct overflow not hidden in IE 9/10/11. */ svg:not(:root) { overflow: hidden; } /* Grouping content ========================================================================== */ /** * Address margin not present in IE 8/9 and Safari. */ figure { margin: 1em 40px; } /** * Address differences between Firefox and other browsers. */ hr { -moz-box-sizing: content-box; box-sizing: content-box; height: 0; } /** * Contain overflow in all browsers. */ pre { overflow: auto; } /** * Address odd `em`-unit font size rendering in all browsers. */ code, kbd, pre, samp { font-family: monospace, monospace; font-size: 1em; } /* Forms ========================================================================== */ /** * Known limitation: by default, Chrome and Safari on OS X allow very limited * styling of `select`, unless a `border` property is set. */ /** * 1. Correct color not being inherited. * Known issue: affects color of disabled elements. * 2. Correct font properties not being inherited. * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. */ button, input, optgroup, select, textarea { color: inherit; /* 1 */ font: inherit; /* 2 */ margin: 0; /* 3 */ } /** * Address `overflow` set to `hidden` in IE 8/9/10/11. */ button { overflow: visible; } /** * Address inconsistent `text-transform` inheritance for `button` and `select`. * All other form control elements do not inherit `text-transform` values. * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. * Correct `select` style inheritance in Firefox. */ button, select { text-transform: none; } /** * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` * and `video` controls. * 2. Correct inability to style clickable `input` types in iOS. * 3. Improve usability and consistency of cursor style between image-type * `input` and others. */ button, html input[type="button"], /* 1 */ input[type="reset"], input[type="submit"] { -webkit-appearance: button; /* 2 */ cursor: pointer; /* 3 */ } /** * Re-set default cursor for disabled elements. */ button[disabled], html input[disabled] { cursor: default; } /** * Remove inner padding and border in Firefox 4+. */ button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; } /** * Address Firefox 4+ setting `line-height` on `input` using `!important` in * the UA stylesheet. */ input { line-height: normal; } /** * It's recommended that you don't attempt to style these elements. * Firefox's implementation doesn't respect box-sizing, padding, or width. * * 1. Address box sizing set to `content-box` in IE 8/9/10. * 2. Remove excess padding in IE 8/9/10. */ input[type="checkbox"], input[type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ } /** * Fix the cursor style for Chrome's increment/decrement buttons. For certain * `font-size` values of the `input`, it causes the cursor style of the * decrement button to change from `default` to `text`. */ input[type="number"]::-webkit-inner-spin-button, input[type="number"]::-webkit-outer-spin-button { height: auto; } /** * 1. Address `appearance` set to `searchfield` in Safari and Chrome. * 2. Address `box-sizing` set to `border-box` in Safari and Chrome * (include `-moz` to future-proof). */ input[type="search"] { -webkit-appearance: textfield; /* 1 */ -moz-box-sizing: content-box; -webkit-box-sizing: content-box; /* 2 */ box-sizing: content-box; } /** * Remove inner padding and search cancel button in Safari and Chrome on OS X. * Safari (but not Chrome) clips the cancel button when the search input has * padding (and `textfield` appearance). */ input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; } /** * Define consistent border, margin, and padding. */ fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em; } /** * 1. Correct `color` not being inherited in IE 8/9/10/11. * 2. Remove padding so people aren't caught out if they zero out fieldsets. */ legend { border: 0; /* 1 */ padding: 0; /* 2 */ } /** * Remove default vertical scrollbar in IE 8/9/10/11. */ textarea { overflow: auto; } /** * Don't inherit the `font-weight` (applied by a rule above). * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. */ optgroup { font-weight: bold; } /* Tables ========================================================================== */ /** * Remove most spacing between table cells. */ table { border-collapse: collapse; border-spacing: 0; } td, th { padding: 0; } .footer-wrapper { position: relative; margin-top: 0; background-color: #e5e5e5; border-top: 1px solid #fff; bottom: -10px; height: 40px; width: 100%;} .footer-wrapper footer { margin: 0 auto; } ================================================ FILE: esim-cloud-backend/authAPI/templates/css/skeleton.css ================================================ /* * Skeleton V2.0.4 * Copyright 2014, Dave Gamache * www.getskeleton.com * Free to use under the MIT license. * http://www.opensource.org/licenses/mit-license.php * 12/29/2014 */ /* Table of contents –––––––––––––––––––––––––––––––––––––––––––––––––– - Grid - Base Styles - Typography - Links - Buttons - Forms - Lists - Code - Tables - Spacing - Utilities - Clearing - Media Queries */ /* Grid –––––––––––––––––––––––––––––––––––––––––––––––––– */ .container { position: relative; width: 100%; max-width: 960px; margin: 0 auto; padding: 0 20px; box-sizing: border-box; } .column, .columns { width: 100%; float: left; box-sizing: border-box; } /* For devices larger than 400px */ @media (min-width: 400px) { .container { width: 85%; padding: 0; } } /* For devices larger than 550px */ @media (min-width: 550px) { .container { width: 80%; } .column, .columns { margin-left: 4%; } .column:first-child, .columns:first-child { margin-left: 0; } .one.column, .one.columns { width: 4.66666666667%; } .two.columns { width: 13.3333333333%; } .three.columns { width: 22%; } .four.columns { width: 30.6666666667%; } .five.columns { width: 39.3333333333%; } .six.columns { width: 48%; } .seven.columns { width: 56.6666666667%; } .eight.columns { width: 65.3333333333%; } .nine.columns { width: 74.0%; } .ten.columns { width: 82.6666666667%; } .eleven.columns { width: 91.3333333333%; } .twelve.columns { width: 100%; margin-left: 0; } .one-third.column { width: 30.6666666667%; } .two-thirds.column { width: 65.3333333333%; } .one-half.column { width: 48%; } /* Offsets */ .offset-by-one.column, .offset-by-one.columns { margin-left: 8.66666666667%; } .offset-by-two.column, .offset-by-two.columns { margin-left: 17.3333333333%; } .offset-by-three.column, .offset-by-three.columns { margin-left: 26%; } .offset-by-four.column, .offset-by-four.columns { margin-left: 34.6666666667%; } .offset-by-five.column, .offset-by-five.columns { margin-left: 43.3333333333%; } .offset-by-six.column, .offset-by-six.columns { margin-left: 52%; } .offset-by-seven.column, .offset-by-seven.columns { margin-left: 60.6666666667%; } .offset-by-eight.column, .offset-by-eight.columns { margin-left: 69.3333333333%; } .offset-by-nine.column, .offset-by-nine.columns { margin-left: 78.0%; } .offset-by-ten.column, .offset-by-ten.columns { margin-left: 86.6666666667%; } .offset-by-eleven.column, .offset-by-eleven.columns { margin-left: 95.3333333333%; } .offset-by-one-third.column, .offset-by-one-third.columns { margin-left: 34.6666666667%; } .offset-by-two-thirds.column, .offset-by-two-thirds.columns { margin-left: 69.3333333333%; } .offset-by-one-half.column, .offset-by-one-half.columns { margin-left: 52%; } } /* Base Styles –––––––––––––––––––––––––––––––––––––––––––––––––– */ /* NOTE html is set to 62.5% so that all the REM measurements throughout Skeleton are based on 10px sizing. So basically 1.5rem = 15px :) */ html { font-size: 62.5%; } body { font-size: 1.5em; /* currently ems cause chrome bug misinterpreting rems on body element */ line-height: 1.6; font-weight: 400; font-family: "Raleway", "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif; color: #222; } /* Typography –––––––––––––––––––––––––––––––––––––––––––––––––– */ h1, h2, h3, h4, h5, h6 { margin-top: 0; margin-bottom: 2rem; font-weight: 300; } h1 { font-size: 4.0rem; line-height: 1.2; letter-spacing: -.1rem;} h2 { font-size: 3.6rem; line-height: 1.25; letter-spacing: -.1rem; } h3 { font-size: 3.0rem; line-height: 1.3; letter-spacing: -.1rem; } h4 { font-size: 2.4rem; line-height: 1.35; letter-spacing: -.08rem; } h5 { font-size: 1.8rem; line-height: 1.5; letter-spacing: -.05rem; } h6 { font-size: 1.5rem; line-height: 1.6; letter-spacing: 0; } /* Larger than phablet */ @media (min-width: 550px) { h1 { font-size: 5.0rem; } h2 { font-size: 4.2rem; } h3 { font-size: 3.6rem; } h4 { font-size: 3.0rem; } h5 { font-size: 2.4rem; } h6 { font-size: 1.5rem; } } p { margin-top: 0; } /* Links –––––––––––––––––––––––––––––––––––––––––––––––––– */ a { color: #1EAEDB; } a:hover { color: #0FA0CE; } /* Buttons –––––––––––––––––––––––––––––––––––––––––––––––––– */ .button, button, input[type="submit"], input[type="reset"], input[type="button"] { display: inline-block; height: 38px; padding: 0 30px; color: #555; text-align: center; font-size: 11px; font-weight: 600; line-height: 38px; letter-spacing: .1rem; text-transform: uppercase; text-decoration: none; white-space: nowrap; background-color: transparent; border-radius: 4px; border: 1px solid #bbb; cursor: pointer; box-sizing: border-box; } .button:hover, button:hover, input[type="submit"]:hover, input[type="reset"]:hover, input[type="button"]:hover, .button:focus, button:focus, input[type="submit"]:focus, input[type="reset"]:focus, input[type="button"]:focus { color: #333; border-color: #888; outline: 0; } .button.button-primary, button.button-primary, input[type="submit"].button-primary, input[type="reset"].button-primary, input[type="button"].button-primary { color: #FFF; background-color: #33C3F0; border-color: #33C3F0; } .button.button-primary:hover, button.button-primary:hover, input[type="submit"].button-primary:hover, input[type="reset"].button-primary:hover, input[type="button"].button-primary:hover, .button.button-primary:focus, button.button-primary:focus, input[type="submit"].button-primary:focus, input[type="reset"].button-primary:focus, input[type="button"].button-primary:focus { color: #FFF; background-color: #1EAEDB; border-color: #1EAEDB; } /* Forms –––––––––––––––––––––––––––––––––––––––––––––––––– */ input[type="email"], input[type="number"], input[type="search"], input[type="text"], input[type="tel"], input[type="url"], input[type="password"], textarea, select { height: 38px; padding: 6px 10px; /* The 6px vertically centers text on FF, ignored by Webkit */ background-color: #fff; border: 1px solid #D1D1D1; border-radius: 4px; box-shadow: none; box-sizing: border-box; } /* Removes awkward default styles on some inputs for iOS */ input[type="email"], input[type="number"], input[type="search"], input[type="text"], input[type="tel"], input[type="url"], input[type="password"], textarea { -webkit-appearance: none; -moz-appearance: none; appearance: none; } textarea { min-height: 65px; padding-top: 6px; padding-bottom: 6px; } input[type="email"]:focus, input[type="number"]:focus, input[type="search"]:focus, input[type="text"]:focus, input[type="tel"]:focus, input[type="url"]:focus, input[type="password"]:focus, textarea:focus, select:focus { border: 1px solid #33C3F0; outline: 0; } label, legend { display: block; margin-bottom: .5rem; font-weight: 600; } fieldset { padding: 0; border-width: 0; } input[type="checkbox"], input[type="radio"] { display: inline; } label > .label-body { display: inline-block; margin-left: .5rem; font-weight: normal; } /* Lists –––––––––––––––––––––––––––––––––––––––––––––––––– */ ul { list-style: circle inside; } ol { list-style: decimal inside; } ol, ul { padding-left: 0; margin-top: 0; } ul ul, ul ol, ol ol, ol ul { margin: 1.5rem 0 1.5rem 3rem; font-size: 90%; } li { margin-bottom: 1rem; } /* Code –––––––––––––––––––––––––––––––––––––––––––––––––– */ code { padding: .2rem .5rem; margin: 0 .2rem; font-size: 90%; white-space: nowrap; background: #F1F1F1; border: 1px solid #E1E1E1; border-radius: 4px; } pre > code { display: block; padding: 1rem 1.5rem; white-space: pre; } /* Tables –––––––––––––––––––––––––––––––––––––––––––––––––– */ th, td { padding: 12px 15px; text-align: left; border-bottom: 1px solid #E1E1E1; } th:first-child, td:first-child { padding-left: 0; } th:last-child, td:last-child { padding-right: 0; } /* Spacing –––––––––––––––––––––––––––––––––––––––––––––––––– */ button, .button { margin-bottom: 1rem; } input, textarea, select, fieldset { margin-bottom: 1.5rem; } pre, blockquote, dl, figure, table, p, ul, ol, form { margin-bottom: 2.5rem; } /* Utilities –––––––––––––––––––––––––––––––––––––––––––––––––– */ .u-full-width { width: 100%; box-sizing: border-box; } .u-max-full-width { max-width: 100%; box-sizing: border-box; } .u-pull-right { float: right; } .u-pull-left { float: left; } /* Misc –––––––––––––––––––––––––––––––––––––––––––––––––– */ hr { margin-top: 3rem; margin-bottom: 3.5rem; border-width: 0; border-top: 1px solid #E1E1E1; } /* Clearing –––––––––––––––––––––––––––––––––––––––––––––––––– */ /* Self Clearing Goodness */ .container:after, .row:after, .u-cf { content: ""; display: table; clear: both; } /* Media Queries –––––––––––––––––––––––––––––––––––––––––––––––––– */ /* Note: The best way to structure the use of media queries is to create the queries near the relevant code. For example, if you wanted to change the styles for buttons on small devices, paste the mobile query code up in the buttons section and style it there. */ /* Larger than mobile */ @media (min-width: 400px) {} /* Larger than phablet (also point when grid becomes active) */ @media (min-width: 550px) {} /* Larger than tablet */ @media (min-width: 750px) {} /* Larger than desktop */ @media (min-width: 1000px) {} /* Larger than Desktop HD */ @media (min-width: 1200px) {} ================================================ FILE: esim-cloud-backend/authAPI/templates/google_callback.html ================================================ Redirecting to the destination... ================================================ FILE: esim-cloud-backend/authAPI/tests.py ================================================ from django.test import TestCase # Create your tests here. ================================================ FILE: esim-cloud-backend/authAPI/token.py ================================================ class TokenStrategy: @classmethod def obtain(cls, user): from rest_framework.authtoken.models import Token from django.utils.six import text_type token = Token.objects.create(user=...) return { "token": text_type(token.key), } ================================================ FILE: esim-cloud-backend/authAPI/urls.py ================================================ """ esimCloud URL Configuration """ from django.conf.urls import url from authAPI import views as authAPI_views urlpatterns = [ url(r'^google-callback', authAPI_views.GoogleOAuth2), url(r'^users/activate/(?P[\w-]+)/(?P[\w-]+)/$', authAPI_views.activate_user), url(r'user/token/', authAPI_views.CustomTokenCreateView.as_view()) ] ================================================ FILE: esim-cloud-backend/authAPI/views.py ================================================ from rest_framework import generics, status, permissions from rest_framework.response import Response from django.conf import settings from requests_oauthlib import OAuth2Session from django.contrib.auth import get_user_model from djoser.conf import settings as djoser_settings from random import randint from django.shortcuts import render from django.http import HttpResponseNotFound from djoser import utils from djoser.serializers import TokenSerializer from authAPI.serializers import TokenCreateSerializer Token = djoser_settings.TOKEN_MODEL def activate_user(request, uid, token): """ Used to activate accounts, sends POST request to /api/auth/users/activation/ route internally to activate account. Link to this route is sent via email to user for verification """ protocol = 'https://' if request.is_secure() else 'http://' web_url = protocol + request.get_host() + '/api/auth/users/activation/' # noqa URL comes from Djoser library return render(request, 'activate_user.html', {'uid': uid, 'token': token, 'activation_url': web_url, 'redirect_url': settings.POST_ACTIVATE_REDIRECT_URL }) def GoogleOAuth2(request): state = request.GET.get('state', None) code = request.GET.get('code', None) if not (state is None) or not (code is None): client_id = settings.SOCIAL_AUTH_GOOGLE_OAUTH2_KEY client_secret = settings.SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET google = OAuth2Session( client_id, redirect_uri=settings.GOOGLE_OAUTH_REDIRECT_URI, state=state ) google.fetch_token( 'https://accounts.google.com/o/oauth2/token', client_secret=client_secret, code=code ) user_info = google.get( 'https://www.googleapis.com/oauth2/v1/userinfo').json() if user_info['email']: user, created = get_user_model().objects.get_or_create( email=user_info['email']) if created: # If User was created # Set name to firstname_lastname1209 username = user_info['name'].strip().replace( ' ', '_') + str(randint(0, 9999)) user.username = username user.save() token, created = Token.objects.get_or_create(user=user) protocol = 'https://' if request.is_secure() else 'http://' web_url = protocol + request.get_host() + '/eda/#/login' return render(request, 'google_callback.html', { "token": token, "url": web_url }) return HttpResponseNotFound("

Page Not Found

") class CustomTokenCreateView(utils.ActionViewMixin, generics.GenericAPIView): """ Use this endpoint to obtain user authentication token. """ serializer_class = TokenCreateSerializer permission_classes = [permissions.AllowAny] def _action(self, serializer): token = utils.login_user(self.request, serializer.user) token_serializer_class = TokenSerializer data = { 'auth_token': token_serializer_class(token).data["auth_token"], 'user_id': serializer.user.id } return Response( data=data, status=status.HTTP_200_OK ) ================================================ FILE: esim-cloud-backend/esimCloud/__init__.py ================================================ from .celery import app as celery_app __all__ = ('celery_app',) ================================================ FILE: esim-cloud-backend/esimCloud/asgi.py ================================================ """ ASGI config for esimCloud project. It exposes the ASGI callable as a module-level variable named ``application``. For more information on this file, see https://docs.djangoproject.com/en/3.0/howto/deployment/asgi/ """ import os from django.core.asgi import get_asgi_application os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'esimCloud.settings') application = get_asgi_application() ================================================ FILE: esim-cloud-backend/esimCloud/celery.py ================================================ import os from celery import Celery from django.conf import settings os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'esimCloud.settings') app = Celery('esimCloud') app.config_from_object('django.conf:settings', namespace='CELERY') app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) @app.task(bind=True) def debug_task(self): print('Request: {0!r}'.format(self.request)) ================================================ FILE: esim-cloud-backend/esimCloud/settings.py ================================================ """ Django settings for esimCloud project. Generated by 'django-admin startproject' using Django 3.0.5. For more information on this file, see https://docs.djangoproject.com/en/3.0/topics/settings/ For the full list of settings and their values, see https://docs.djangoproject.com/en/3.0/ref/settings/ """ import os # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/3.0/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = os.environ.get( "SECRET_KEY", 'kk5tq+=kyyicitl+1ki!wyx@*mz^vmei6_q25dt!^3(_kxd^eg') # SECURITY WARNING: don't run with debug turned on in production! DEBUG = bool(os.environ.get("DJANGO_DEBUG", default=True) == 'True') ALLOWED_HOSTS = ['0.0.0.0', 'localhost', '127.0.0.1'] # Application definition INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'whitenoise.runserver_nostatic', 'django_filters', 'corsheaders', 'drf_yasg', 'rest_framework', 'rest_framework.authtoken', 'social_django', 'inline_actions', 'djoser', 'simulationAPI', 'authAPI', 'libAPI', 'saveAPI', 'publishAPI', 'arduinoAPI', 'workflowAPI', 'ltiAPI', ] MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'whitenoise.middleware.WhiteNoiseMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'corsheaders.middleware.CorsMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] ROOT_URLCONF = 'esimCloud.urls' TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ] WSGI_APPLICATION = 'esimCloud.wsgi.application' AUTH_USER_MODEL = 'authAPI.User' # Database config Defaults to sqlite3 if not provided in environment files DATABASES = { "default": { "ENGINE": os.environ.get("SQL_ENGINE", "django.db.backends.sqlite3"), "NAME": os.environ.get("SQL_DATABASE", os.path.join(BASE_DIR, "db.sqlite3")), "USER": os.environ.get("SQL_USER", "user"), "PASSWORD": os.environ.get("SQL_PASSWORD", "password"), "HOST": os.environ.get("SQL_HOST", "localhost"), "PORT": os.environ.get("SQL_PORT", "5432"), }, } DATABASE_ROUTERS = ( # 'simulationAPI.dbrouters.mongoRouter',<- to Store models in mongodb # 'saveAPI.dbrouters.mongoRouter',<- to Store saveAPI models in mongodb # 'libAPI.dbrouters.mongoRouter'<- to Store LibAPI models in mongodb ) # Password validation AUTH_PASSWORD_VALIDATORS = [ { 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', # noqa }, { 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', # noqa }, { 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', # noqa }, { 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', # noqa }, ] # Mail server config # use this for console emails EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' # Note SMTP is slow # EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' # EMAIL_HOST = os.environ.get("EMAIL_HOST", "smtp.gmail.com") # EMAIL_HOST_USER = os.environ.get("EMAIL_HOST_USER", "email@gmail.com") # EMAIL_HOST_PASSWORD = os.environ.get("EMAIL_HOST_PASSWORD", "gmailpassword") # EMAIL_PORT = os.environ.get("EMAIL_PORT", 587) # EMAIL_USE_TLS = os.environ.get("EMAIL_USE_TLS", True) SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = os.environ.get( "SOCIAL_AUTH_GOOGLE_OAUTH2_KEY", "") SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = os.environ.get( "SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET", "") GOOGLE_OAUTH_REDIRECT_URI = os.environ.get( "GOOGLE_OAUTH_REDIRECT_URI", "http://localhost/api/auth/google-callback") POST_ACTIVATE_REDIRECT_URL = os.environ.get( "POST_ACTIVATE_REDIRECT_URL", "http://localhost/") DJOSER = { 'SEND_ACTIVATION_EMAIL': True, 'PASSWORD_RESET_CONFIRM_URL': 'eda/#/password/reset/confirm/{uid}/{token}', 'PASSWORD_RESET_CONFIRM_RETYPE': True, 'SET_PASSWORD_RETYPE': True, # 'USERNAME_RESET_CONFIRM_URL': '#/username/reset/confirm/{uid}/{token}', 'ACTIVATION_URL': 'api/auth/users/activate/{uid}/{token}', 'SOCIAL_AUTH_ALLOWED_REDIRECT_URIS': [ "http://localhost:8000/api/auth/google-callback", "http://localhost/api/auth/google-callback", GOOGLE_OAUTH_REDIRECT_URI], # noqa 'SOCIAL_AUTH_TOKEN_STRATEGY': 'authAPI.token.TokenStrategy', 'PASSWORD_RESET_SHOW_EMAIL_NOT_FOUND': True, 'SERIALIZERS': { 'token_create': 'authAPI.serializers.TokenCreateSerializer', }, } REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework.authentication.TokenAuthentication', ), } AUTHENTICATION_BACKENDS = ( 'django.contrib.auth.backends.ModelBackend', 'social_core.backends.google.GoogleOAuth2', ) # Internationalization # https://docs.djangoproject.com/en/3.0/topics/i18n/ LANGUAGE_CODE = 'en-us' TIME_ZONE = 'Asia/Kolkata' USE_I18N = True USE_L10N = True USE_TZ = True # Allow CORS for Public API CORS_ORIGIN_ALLOW_ALL = True # Static files for django admin and DRF STATIC_ROOT = os.path.join(BASE_DIR, 'static') STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage' STATIC_URL = '/django_static/' # File Storage FILE_STORAGE_ROOT = os.path.join(BASE_DIR, 'file_storage') FILE_STORAGE_URL = '/files' # noqa For Netlist handling netlist uploads and other temp uploads MEDIA_URL = '/files/' MEDIA_ROOT = os.path.join(BASE_DIR, "file_storage") # celery CELERY_BROKER_URL = 'redis://redis:6379' CELERY_RESULT_BACKEND = 'redis://redis:6379' CELERY_ACCEPT_CONTENT = ['application/json'] CELERY_RESULT_SERIALIZER = 'json' CELERY_TASK_SERIALIZER = 'json' CELERY_IMPORTS = ( 'simulationAPI.tasks', 'arduinoAPI.tasks' ) LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console': { 'class': 'logging.StreamHandler', }, }, 'root': { 'handlers': ['console'], 'level': 'INFO', }, } SWAGGER_SETTINGS = { 'SECURITY_DEFINITIONS': { 'Bearer': { 'type': 'apiKey', 'name': 'Authorization', 'in': 'header' } } } LTI_TOOL_CONFIGURATION = { 'title': 'Esim-Cloud', 'description': 'Esim cloud is a simulation platform', 'launch_url': 'api/lti/auth/', 'course_aware': True, 'course_navigation': True } SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https') SESSION_COOKIE_SECURE = False CSRF_COOKIE_SECURE = False ================================================ FILE: esim-cloud-backend/esimCloud/urls.py ================================================ """ esimCloud URL Configuration """ from django.contrib import admin from django.urls import path from simulationAPI import urls as simulationURLs from libAPI import urls as libURLs from saveAPI import urls as saveURLs from workflowAPI import urls as workURLs from publishAPI import urls as publishURLs from authAPI import urls as authURLs from rest_framework import permissions from drf_yasg.views import get_schema_view from drf_yasg import openapi from django.conf.urls import url, include from arduinoAPI import urls as arduinoURLs from ltiAPI import urls as ltiURLS schema_view = get_schema_view( openapi.Info( title="eSim Cloud API", default_version='v1', description="Public API Endpoints for eSim Cloud", license=openapi.License(name="GPLv3 License"), ), public=True, permission_classes=(permissions.AllowAny,), ) urlpatterns = [ path('api/admin/', admin.site.urls), # Simulation API Routes path('api/simulation/', include(simulationURLs)), # libAPI routes path('api/', include(libURLs)), # libAPI routes path('api/', include(saveURLs)), # publishAPI routes path('api/', include(publishURLs)), # workflowAPI routes path('api/workflow/', include(workURLs)), # Arduino Routes path('api/arduino/', include(arduinoURLs)), # LTI Routes path('api/lti/', include(ltiURLS)), # Auth API Routes url(r'^api/auth/', include('djoser.urls')), url(r'^api/auth/', include('djoser.urls.authtoken')), url(r'^api/auth/', include("djoser.social.urls")), url(r'^api/auth/', include(authURLs)), # For API Documentation url(r'^api/docs(?P\.json|\.yaml)$', schema_view.without_ui( cache_timeout=0), name='schema-json'), path('api/docs', schema_view.with_ui( 'swagger', cache_timeout=0), name='schema-swagger-ui'), ] ================================================ FILE: esim-cloud-backend/esimCloud/wsgi.py ================================================ """ WSGI config for esimCloud project. It exposes the WSGI callable as a module-level variable named ``application``. For more information on this file, see https://docs.djangoproject.com/en/3.0/howto/deployment/wsgi/ """ import os from django.core.wsgi import get_wsgi_application os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'esimCloud.settings') application = get_wsgi_application() ================================================ FILE: esim-cloud-backend/generate_svg.sh ================================================ #!/bin/sh # Cloning from github is not practical since it has a lot of useless symbols # echo 'Cloning kicad-symbols from github' # git clone --depth 1 --single-branch https://github.com/KiCad/kicad-symbols for i in kicad-symbols/*.lib; do [ -f "$i" ] || break echo 'Processing': $i; python libAPI/helper/main.py $i symbol_svgs done ================================================ FILE: esim-cloud-backend/kicad-symbols/.gitattributes ================================================ * text=auto ================================================ FILE: esim-cloud-backend/kicad-symbols/.gitignore ================================================ *.pyc *.bak *.bck ================================================ FILE: esim-cloud-backend/kicad-symbols/additional/4xxx.dcm ================================================ EESchema-DOCLIB Version 2.0 # $CMP 14528 D Monostable K CMOS F https://www.onsemi.com/pub/Collateral/MC14528B-D.PDF $ENDCMP # $CMP 14529 D Dual 4 to 1 Multiplexer K CMOS MUX MUX4 F http://www.alldatasheet.com/datasheet-pdf/pdf/97272/HITACHI/HD14529B.html $ENDCMP # $CMP 14538 D Monostable K CMOS F https://www.onsemi.com/pub/Collateral/MC14538B-D.PDF $ENDCMP # $CMP 4001 D Quad Nor 2 inputs K CMOS Nor2 F http://www.intersil.com/content/dam/Intersil/documents/cd40/cd4000bms-01bms-02bms-25bms.pdf $ENDCMP # $CMP 4002 D Dual 4 input NOR gate K CMOS Nor4 F http://www.intersil.com/content/dam/Intersil/documents/cd40/cd4000bms-01bms-02bms-25bms.pdf $ENDCMP # $CMP 40106 D Hex Schmitt trigger inverter K CMOS F https://assets.nexperia.com/documents/data-sheet/HEF40106B.pdf $ENDCMP # $CMP 4009 D Hex Buffer Inverter K CMOS INV BUFFER high sink, VCC and VDD sep. VDD>VI>VCC! F http://www.sycelectronica.com.ar/semiconductores/CD4009.pdf $ENDCMP # $CMP 4010 D Hex Buffer K CMOS BUFFER high sink, VCC and VDD sep. VDD>VI>VCC! F http://www.ti.com/lit/ds/symlink/cd4010b-q1.pdf $ENDCMP # $CMP 4011 D Quad Nand 2 inputs K CMOS Nand2 F http://www.intersil.com/content/dam/Intersil/documents/cd40/cd4011bms-12bms-23bms.pdf $ENDCMP # $CMP 4012 D Dual 4 inputs Nand K CMOS Nand4 F http://www.intersil.com/content/dam/Intersil/documents/cd40/cd4011bms-12bms-23bms.pdf $ENDCMP # $CMP 4013 D Dual D FlipFlop, Set & reset K CMOS DFF F http://www.onsemi.com/pub/Collateral/MC14013B-D.PDF $ENDCMP # $CMP 4016 D Quad Analog Switches K CMOS SWITCH F http://www.ti.com/lit/ds/symlink/cd4016b.pdf $ENDCMP # $CMP 4017 D Johnson Counter ( 10 outputs ) K CNT CNT10 F http://www.intersil.com/content/dam/Intersil/documents/cd40/cd4017bms-22bms.pdf $ENDCMP # $CMP 4020 D Binary counter 14 stages (asynchronous) K CMOS CNT CNT14 F http://www.intersil.com/content/dam/Intersil/documents/cd40/cd4020bms-24bms-40bms.pdf $ENDCMP # $CMP 4021 D 8-bit static shift register K shift register SR PISO F https://assets.nexperia.com/documents/data-sheet/HEF4021B.pdf $ENDCMP # $CMP 4022 D Johnson Counter (8 states) K CMOS CNT CNT8 F http://www.intersil.com/content/dam/Intersil/documents/cd40/cd4017bms-22bms.pdf $ENDCMP # $CMP 4023 D Triple Nand 3 inputs K CMOS Nand3 F http://www.intersil.com/content/dam/Intersil/documents/cd40/cd4011bms-12bms-23bms.pdf $ENDCMP # $CMP 4025 D Triple Nor 3 inputs K CMOS Nor3 F http://www.intersil.com/content/dam/Intersil/documents/cd40/cd4000bms-01bms-02bms-25bms.pdf $ENDCMP # $CMP 4027 D Dual JK FlipFlop, set & reset K CMOS JK JKFF F http://www.intersil.com/content/dam/Intersil/documents/cd40/cd4027bms.pdf $ENDCMP # $CMP 4028 D Decoder 4 to 10 lines K CMOS DECOD DECOD10 F http://www.intersil.com/content/dam/Intersil/documents/cd40/cd4028bms.pdf $ENDCMP # $CMP 4029 D Up/Down Counter K CMOS COUNTER F http://www.intersil.com/content/dam/Intersil/documents/cd40/cd4029bms.pdf $ENDCMP # $CMP 4040 D Binary Counter 12 stages (Asynchronous) K CMOS CNT CNT12 F http://www.intersil.com/content/dam/Intersil/documents/cd40/cd4020bms-24bms-40bms.pdf $ENDCMP # $CMP 4046 D Phase Comp & VCO K CMOS PLL F https://assets.nexperia.com/documents/data-sheet/HEF4046B.pdf $ENDCMP # $CMP 4047 D Monostable/Astable Multivibrator K CMOS monostable astable multivibrator F https://www.fairchildsemi.com/datasheets/CD/CD4047BC.pdf $ENDCMP # $CMP 4049 D Hex Buffer Inverter K CMOS BUFFER F http://www.intersil.com/content/dam/intersil/documents/cd40/cd4049ubms.pdf $ENDCMP # $CMP 4050 D Hex Buffer K CMOS BUFFER F http://www.intersil.com/content/dam/intersil/documents/cd40/cd4050bms.pdf $ENDCMP # $CMP 4051 D Analog Multiplexer 8 to 1 lins K CMOS MUX MUX8 F http://www.intersil.com/content/dam/Intersil/documents/cd40/cd4051bms-52bms-53bms.pdf $ENDCMP # $CMP 4052 D Dual Analog Multiplexer 4 to 1 line K CMOS MUX MUX4 F http://www.intersil.com/content/dam/Intersil/documents/cd40/cd4051bms-52bms-53bms.pdf $ENDCMP # $CMP 4053 D Triple analog Multiplexer 2 to 1 line K CMOS MUX MUX2 F http://www.intersil.com/content/dam/Intersil/documents/cd40/cd4051bms-52bms-53bms.pdf $ENDCMP # $CMP 4056 D BCD to 7-Segment Decoder/Driver, Strobed-Latch Function K CMOS LCD 7-segment decoder driver F http://www.ti.com/lit/ds/symlink/cd4056b.pdf $ENDCMP # $CMP 4066 D Quad Analog Switches K CMOS SWITCH F http://www.ti.com/lit/ds/symlink/cd4066b.pdf $ENDCMP # $CMP 4069 D Hex inverter K CMOS NOT F http://www.intersil.com/content/dam/Intersil/documents/cd40/cd4069ubms.pdf $ENDCMP # $CMP 4070 D Quad Xor 2 inputs K CMOS XOR2 F http://www.intersil.com/content/dam/Intersil/documents/cd40/cd4070bms-77bms.pdf $ENDCMP # $CMP 4071 D Quad Or 2 inputs K CMOS OR2 F http://www.intersil.com/content/dam/Intersil/documents/cd40/cd4071bms-72bms-75bms.pdf $ENDCMP # $CMP 4072 D Dual 4 input OR gate K CMOS OR4 F http://www.intersil.com/content/dam/Intersil/documents/cd40/cd4071bms-72bms-75bms.pdf $ENDCMP # $CMP 4073 D Triple And 3 inputs K CMOS And3 F http://www.intersil.com/content/dam/Intersil/documents/cd40/cd4073bms-81bms-82bms.pdf $ENDCMP # $CMP 4075 D Triple Or 3 inputs K CMOS Or3 F http://www.intersil.com/content/dam/Intersil/documents/cd40/cd4071bms-72bms-75bms.pdf $ENDCMP # $CMP 4077 D Quad Xnor 2 inputs K CMOS XOR XNOR XNOR2 F http://www.intersil.com/content/dam/Intersil/documents/cd40/cd4076bms.pdf $ENDCMP # $CMP 4081 D Quad And 2 inputs K CMOS And2 F http://www.intersil.com/content/dam/Intersil/documents/cd40/cd4073bms-81bms-82bms.pdf $ENDCMP # $CMP 4098 D Dual Monostable Multivibrator K CMOS monostable multivibrator F http://www.ti.com/lit/ds/symlink/cd4098b.pdf $ENDCMP # $CMP 4504 D CMOS Hex Voltage-Level Shifter for TTL-to-CMOS or CMOS-to-CMOS, DIP-16/SOIC-16/TSSOP-16 K Level-shifter F http://www.ti.com/lit/ds/symlink/cd4504b.pdf $ENDCMP # $CMP 4510 D 4 bits programmable counter K CMOS CNT CNT4 F http://pdf.datasheetcatalog.com/datasheets/150/109581_DS.pdf $ENDCMP # $CMP 4518 D Dual BCD Up-Counter K CMOS F http://www.intersil.com/content/dam/Intersil/documents/cd45/cd4518bms-20bms.pdf $ENDCMP # $CMP 4520 D Dual Binary Up-Counter K CMOS F http://www.intersil.com/content/dam/Intersil/documents/cd45/cd4518bms-20bms.pdf $ENDCMP # $CMP 4528 D Monostable K CMOS F http://datasheet.octopart.com/CD4528BCN-Fairchild-datasheet-143503.pdf $ENDCMP # $CMP 4538 D Monostable K CMOS F https://assets.nexperia.com/documents/data-sheet/HEF4538B.pdf $ENDCMP # $CMP 4543 D BCD to 7-segment latch/decoder/driver K CMOS 7-segment latch decoder driver F http://www.ti.com/lit/ds/symlink/cd4543b.pdf $ENDCMP # $CMP HEF4093B D Quad 2-Input NAND Schmitt Trigger, SOIC-14 K NAND2 F https://assets.nexperia.com/documents/data-sheet/HEF4093B.pdf $ENDCMP # #End Doc Library ================================================ FILE: esim-cloud-backend/kicad-symbols/additional/4xxx.lib ================================================ EESchema-LIBRARY Version 2.4 #encoding utf-8 # # 14529 # DEF 14529 U 0 40 Y Y 1 L N F0 "U" -300 750 50 H V C CNN F1 "14529" -300 -850 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP?16* $ENDFPLIST DRAW S -300 700 300 -800 1 1 10 f X STX 1 -500 -600 200 R 50 50 1 0 I X W 10 500 100 200 L 50 50 1 0 T X Y3 11 -500 -200 200 R 50 50 1 0 I X Y2 12 -500 -100 200 R 50 50 1 0 I X Y1 13 -500 0 200 R 50 50 1 0 I X Y0 14 -500 100 200 R 50 50 1 0 I X STY 15 -500 -700 200 R 50 50 1 0 I X VDD 16 0 900 200 D 50 50 1 0 W X X0 2 -500 600 200 R 50 50 1 0 I X X1 3 -500 500 200 R 50 50 1 0 I X X2 4 -500 400 200 R 50 50 1 0 I X X3 5 -500 300 200 R 50 50 1 0 I X A 6 -500 -400 200 R 50 50 1 0 I X B 7 -500 -500 200 R 50 50 1 0 I X VSS 8 0 -1000 200 U 50 50 1 0 W X Z 9 500 600 200 L 50 50 1 0 T ENDDRAW ENDDEF # # 4001 # DEF 4001 U 0 40 Y Y 5 L N F0 "U" 0 50 50 H V C CNN F1 "4001" 0 -50 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP?14* $ENDFPLIST DRAW A -360 0 258 354 -354 1 1 10 N -150 150 -150 -150 A -47 -52 204 150 837 1 1 10 f 150 0 -24 150 A -47 52 204 -150 -837 1 1 10 f 150 0 -24 -150 A -360 0 258 354 -354 2 1 10 N -150 150 -150 -150 A -47 -52 204 150 837 2 1 10 f 150 0 -24 150 A -47 52 204 -150 -837 2 1 10 f 150 0 -24 -150 A -360 0 258 354 -354 3 1 10 N -150 150 -150 -150 A -47 -52 204 150 837 3 1 10 f 150 0 -24 150 A -47 52 204 -150 -837 3 1 10 f 150 0 -24 -150 A -360 0 258 354 -354 4 1 10 N -150 150 -150 -150 A -47 -52 204 150 837 4 1 10 f 150 0 -24 150 A -47 52 204 -150 -837 4 1 10 f 150 0 -24 -150 A 0 0 150 -899 899 1 2 10 f 0 -150 0 150 A 0 0 150 -899 899 2 2 10 f 0 -150 0 150 A 0 0 150 -899 899 3 2 10 f 0 -150 0 150 A 0 0 150 -899 899 4 2 10 f 0 -150 0 150 S -200 300 200 -300 5 1 10 f P 2 1 1 10 -150 -150 -25 -150 f P 2 1 1 10 -150 150 -25 150 f P 12 1 1 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f P 2 2 1 10 -150 -150 -25 -150 f P 2 2 1 10 -150 150 -25 150 f P 12 2 1 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f P 2 3 1 10 -150 -150 -25 -150 f P 2 3 1 10 -150 150 -25 150 f P 12 3 1 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f P 2 4 1 10 -150 -150 -25 -150 f P 2 4 1 10 -150 150 -25 150 f P 12 4 1 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f P 4 1 2 10 0 150 -150 150 -150 -150 0 -150 f P 4 2 2 10 0 150 -150 150 -150 -150 0 -150 f P 4 3 2 10 0 150 -150 150 -150 -150 0 -150 f P 4 4 2 10 0 150 -150 150 -150 -150 0 -150 f X VDD 14 0 500 200 D 50 50 5 0 W X VSS 7 0 -500 200 U 50 50 5 0 W X ~ 1 -300 100 170 R 50 50 1 1 I X ~ 2 -300 -100 170 R 50 50 1 1 I X ~ 3 300 0 150 L 50 50 1 1 O I X ~ 4 300 0 150 L 50 50 2 1 O I X ~ 5 -300 100 170 R 50 50 2 1 I X ~ 6 -300 -100 170 R 50 50 2 1 I X ~ 10 300 0 150 L 50 50 3 1 O I X ~ 8 -300 100 170 R 50 50 3 1 I X ~ 9 -300 -100 170 R 50 50 3 1 I X ~ 11 300 0 150 L 50 50 4 1 O I X ~ 12 -300 100 170 R 50 50 4 1 I X ~ 13 -300 -100 170 R 50 50 4 1 I X ~ 1 -300 100 150 R 50 50 1 2 I I X ~ 2 -300 -100 150 R 50 50 1 2 I I X ~ 3 300 0 150 L 50 50 1 2 O X ~ 4 300 0 150 L 50 50 2 2 O X ~ 5 -300 100 150 R 50 50 2 2 I I X ~ 6 -300 -100 150 R 50 50 2 2 I I X ~ 10 300 0 150 L 50 50 3 2 O X ~ 8 -300 100 150 R 50 50 3 2 I I X ~ 9 -300 -100 150 R 50 50 3 2 I I X ~ 11 300 0 150 L 50 50 4 2 O X ~ 12 -300 100 150 R 50 50 4 2 I I X ~ 13 -300 -100 150 R 50 50 4 2 I I ENDDRAW ENDDEF # # 4002 # DEF 4002 U 0 40 Y Y 3 L N F0 "U" 0 50 50 H V C CNN F1 "4002" 0 -50 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP?14* $ENDFPLIST DRAW A -445 0 343 306 -306 1 1 10 N -150 175 -150 -175 A -81 -56 238 137 768 1 1 10 f 150 0 -24 175 A -81 56 238 -137 -768 1 1 10 f 150 0 -24 -175 A -445 0 343 306 -306 2 1 10 N -150 175 -150 -175 A -81 -56 238 137 768 2 1 10 f 150 0 -24 175 A -81 56 238 -137 -768 2 1 10 f 150 0 -24 -175 A -25 0 175 -899 899 1 2 10 f -25 -175 -25 175 A -25 0 175 -899 899 2 2 10 f -25 -175 -25 175 S -200 300 200 -300 3 1 10 f P 2 1 1 10 -150 -175 -25 -175 f P 2 1 1 10 -150 175 -25 175 f P 13 1 1 -1000 -25 175 -150 175 -150 175 -143 161 -122 115 -109 66 -103 17 -104 -34 -113 -83 -128 -131 -150 -175 -150 -175 -25 -175 f P 2 2 1 10 -150 -175 -25 -175 f P 2 2 1 10 -150 175 -25 175 f P 13 2 1 -1000 -25 175 -150 175 -150 175 -143 161 -122 115 -109 66 -103 17 -104 -34 -113 -83 -128 -131 -150 -175 -150 -175 -25 -175 f P 4 1 2 10 -25 175 -150 175 -150 -175 -25 -175 f P 4 2 2 10 -25 175 -150 175 -150 -175 -25 -175 f X VDD 14 0 500 200 D 50 50 3 0 W X VSS 7 0 -500 200 U 50 50 3 0 W X ~ 1 300 0 150 L 50 50 1 1 O I X ~ 2 -300 150 150 R 50 50 1 1 I X ~ 3 -300 50 190 R 50 50 1 1 I X ~ 4 -300 -50 190 R 50 50 1 1 I X ~ 5 -300 -150 150 R 50 50 1 1 I X ~ 10 -300 50 190 R 50 50 2 1 I X ~ 11 -300 -50 190 R 50 50 2 1 I X ~ 12 -300 -150 150 R 50 50 2 1 I X ~ 13 300 0 150 L 50 50 2 1 O I X ~ 9 -300 150 150 R 50 50 2 1 I X ~ 1 300 0 150 L 50 50 1 2 O X ~ 2 -300 150 150 R 50 50 1 2 I I X ~ 3 -300 50 150 R 50 50 1 2 I I X ~ 4 -300 -50 150 R 50 50 1 2 I I X ~ 5 -300 -150 150 R 50 50 1 2 I I X ~ 10 -300 50 150 R 50 50 2 2 I I X ~ 11 -300 -50 150 R 50 50 2 2 I I X ~ 12 -300 -150 150 R 50 50 2 2 I I X ~ 13 300 0 150 L 50 50 2 2 O X ~ 9 -300 150 150 R 50 50 2 2 I I ENDDRAW ENDDEF # # 4009 # DEF 4009 U 0 40 Y Y 7 L N F0 "U" 0 50 50 H V C CNN F1 "4009" 0 -50 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP?16* $ENDFPLIST DRAW S -200 300 200 -300 7 1 10 f P 4 1 0 10 -150 150 -150 -150 150 0 -150 150 f P 4 2 0 10 -150 150 -150 -150 150 0 -150 150 f P 4 3 0 10 -150 150 -150 -150 150 0 -150 150 f P 4 4 0 10 -150 150 -150 -150 150 0 -150 150 f P 4 5 0 10 -150 150 -150 -150 150 0 -150 150 f P 4 6 0 10 -150 150 -150 -150 150 0 -150 150 f X ~ 2 300 0 150 L 50 50 1 0 O I X ~ 3 -300 0 150 R 50 50 1 0 I X ~ 4 300 0 150 L 50 50 2 0 O I X ~ 5 -300 0 150 R 50 50 2 0 I X ~ 6 300 0 150 L 50 50 3 0 O I X ~ 7 -300 0 150 R 50 50 3 0 I X ~ 10 300 0 150 L 50 50 4 0 O I X ~ 9 -300 0 150 R 50 50 4 0 I X ~ 11 -300 0 150 R 50 50 5 0 I X ~ 12 300 0 150 L 50 50 5 0 O I X ~ 14 -300 0 150 R 50 50 6 0 I X ~ 15 300 0 150 L 50 50 6 0 O I X VDD 16 -100 500 200 D 50 50 7 0 W X VCC 1 100 500 200 D 50 50 7 0 W X VSS 8 0 -500 200 U 50 50 7 0 W ENDDRAW ENDDEF # # 4010 # DEF 4010 U 0 40 Y Y 7 L N F0 "U" 0 50 50 H V C CNN F1 "4010" 0 -50 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP?16* $ENDFPLIST DRAW S -200 300 200 -300 7 1 10 f P 4 1 0 10 -150 150 -150 -150 150 0 -150 150 f P 4 2 0 10 -150 150 -150 -150 150 0 -150 150 f P 4 3 0 10 -150 150 -150 -150 150 0 -150 150 f P 4 4 0 10 -150 150 -150 -150 150 0 -150 150 f P 4 5 0 10 -150 150 -150 -150 150 0 -150 150 f P 4 6 0 10 -150 150 -150 -150 150 0 -150 150 f X ~ 2 300 0 150 L 50 50 1 0 O X ~ 3 -300 0 150 R 50 50 1 0 I X ~ 4 300 0 150 L 50 50 2 0 O X ~ 5 -300 0 150 R 50 50 2 0 I X ~ 6 300 0 150 L 50 50 3 0 O X ~ 7 -300 0 150 R 50 50 3 0 I X ~ 10 300 0 150 L 50 50 4 0 O X ~ 9 -300 0 150 R 50 50 4 0 I X ~ 11 -300 0 150 R 50 50 5 0 I X ~ 12 300 0 150 L 50 50 5 0 O X ~ 14 -300 0 150 R 50 50 6 0 I X ~ 15 300 0 150 L 50 50 6 0 O X VDD 16 -100 500 200 D 50 50 7 0 W X VCC 1 100 500 200 D 50 50 7 0 W X VSS 8 0 -500 200 U 50 50 7 0 W ENDDRAW ENDDEF # # 40106 # DEF 40106 U 0 40 Y Y 7 L N F0 "U" 0 50 50 H V C CNN F1 "40106" 0 -50 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP?14* $ENDFPLIST DRAW S -200 300 200 -300 7 1 10 f P 3 1 0 0 -25 -50 -25 50 25 50 N P 4 1 0 10 -150 150 -150 -150 150 0 -150 150 f P 4 1 0 0 -50 -50 25 -50 25 50 50 50 N P 3 2 0 0 -25 -50 -25 50 25 50 N P 4 2 0 10 -150 150 -150 -150 150 0 -150 150 f P 4 2 0 0 -50 -50 25 -50 25 50 50 50 N P 3 3 0 0 -25 -50 -25 50 25 50 N P 4 3 0 10 -150 150 -150 -150 150 0 -150 150 f P 4 3 0 0 -50 -50 25 -50 25 50 50 50 N P 3 4 0 0 -25 -50 -25 50 25 50 N P 4 4 0 10 -150 150 -150 -150 150 0 -150 150 f P 4 4 0 0 -50 -50 25 -50 25 50 50 50 N P 3 5 0 0 -25 -50 -25 50 25 50 N P 4 5 0 10 -150 150 -150 -150 150 0 -150 150 f P 4 5 0 0 -50 -50 25 -50 25 50 50 50 N P 3 6 0 0 -25 -50 -25 50 25 50 N P 4 6 0 10 -150 150 -150 -150 150 0 -150 150 f P 4 6 0 0 -50 -50 25 -50 25 50 50 50 N X ~ 1 -300 0 150 R 50 50 1 0 I X ~ 2 300 0 150 L 50 50 1 0 O I X ~ 3 -300 0 150 R 50 50 2 0 I X ~ 4 300 0 150 L 50 50 2 0 O I X ~ 5 -300 0 150 R 50 50 3 0 I X ~ 6 300 0 150 L 50 50 3 0 O I X ~ 8 300 0 150 L 50 50 4 0 O I X ~ 9 -300 0 150 R 50 50 4 0 I X ~ 10 300 0 150 L 50 50 5 0 O I X ~ 11 -300 0 150 R 50 50 5 0 I X ~ 12 300 0 150 L 50 50 6 0 O I X ~ 13 -300 0 150 R 50 50 6 0 I X VDD 14 0 500 200 D 50 50 7 0 W X VSS 7 0 -500 200 U 50 50 7 0 W ENDDRAW ENDDEF # # 4011 # DEF 4011 U 0 40 Y Y 5 L N F0 "U" 0 50 50 H V C CNN F1 "4011" 0 -50 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP?14* $ENDFPLIST DRAW A 0 0 150 -899 899 1 1 10 f 0 -150 0 150 A 0 0 150 -899 899 2 1 10 f 0 -150 0 150 A 0 0 150 -899 899 3 1 10 f 0 -150 0 150 A 0 0 150 -899 899 4 1 10 f 0 -150 0 150 A -360 0 258 354 -354 1 2 10 N -150 150 -150 -150 A -47 -52 204 150 837 1 2 10 f 150 0 -24 150 A -47 52 204 -150 -837 1 2 10 f 150 0 -24 -150 A -360 0 258 354 -354 2 2 10 N -150 150 -150 -150 A -47 -52 204 150 837 2 2 10 f 150 0 -24 150 A -47 52 204 -150 -837 2 2 10 f 150 0 -24 -150 A -360 0 258 354 -354 3 2 10 N -150 150 -150 -150 A -47 -52 204 150 837 3 2 10 f 150 0 -24 150 A -47 52 204 -150 -837 3 2 10 f 150 0 -24 -150 A -360 0 258 354 -354 4 2 10 N -150 150 -150 -150 A -47 -52 204 150 837 4 2 10 f 150 0 -24 150 A -47 52 204 -150 -837 4 2 10 f 150 0 -24 -150 S -200 300 200 -300 5 1 10 f P 4 1 1 10 0 150 -150 150 -150 -150 0 -150 f P 4 2 1 10 0 150 -150 150 -150 -150 0 -150 f P 4 3 1 10 0 150 -150 150 -150 -150 0 -150 f P 4 4 1 10 0 150 -150 150 -150 -150 0 -150 f P 2 1 2 10 -150 -150 -25 -150 f P 2 1 2 10 -150 150 -25 150 f P 12 1 2 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f P 2 2 2 10 -150 -150 -25 -150 f P 2 2 2 10 -150 150 -25 150 f P 12 2 2 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f P 2 3 2 10 -150 -150 -25 -150 f P 2 3 2 10 -150 150 -25 150 f P 12 3 2 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f P 2 4 2 10 -150 -150 -25 -150 f P 2 4 2 10 -150 150 -25 150 f P 12 4 2 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f X VDD 14 0 500 200 D 50 50 5 0 W X VSS 7 0 -500 200 U 50 50 5 0 W X ~ 1 -300 100 150 R 50 50 1 1 I X ~ 2 -300 -100 150 R 50 50 1 1 I X ~ 3 300 0 150 L 50 50 1 1 O I X ~ 4 300 0 150 L 50 50 2 1 O I X ~ 5 -300 100 150 R 50 50 2 1 I X ~ 6 -300 -100 150 R 50 50 2 1 I X ~ 10 300 0 150 L 50 50 3 1 O I X ~ 8 -300 100 150 R 50 50 3 1 I X ~ 9 -300 -100 150 R 50 50 3 1 I X ~ 11 300 0 150 L 50 50 4 1 O I X ~ 12 -300 100 150 R 50 50 4 1 I X ~ 13 -300 -100 150 R 50 50 4 1 I X ~ 1 -300 100 170 R 50 50 1 2 I I X ~ 2 -300 -100 170 R 50 50 1 2 I I X ~ 3 300 0 150 L 50 50 1 2 O X ~ 4 300 0 150 L 50 50 2 2 O X ~ 5 -300 100 170 R 50 50 2 2 I I X ~ 6 -300 -100 170 R 50 50 2 2 I I X ~ 10 300 0 150 L 50 50 3 2 O X ~ 8 -300 100 170 R 50 50 3 2 I I X ~ 9 -300 -100 170 R 50 50 3 2 I I X ~ 11 300 0 150 L 50 50 4 2 O X ~ 12 -300 100 170 R 50 50 4 2 I I X ~ 13 -300 -100 170 R 50 50 4 2 I I ENDDRAW ENDDEF # # 4012 # DEF 4012 U 0 40 Y Y 3 L N F0 "U" 0 50 50 H V C CNN F1 "4012" 0 -50 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP?14* $ENDFPLIST DRAW A -25 0 175 -899 899 1 1 10 f -25 -175 -25 175 A -25 0 175 -899 899 2 1 10 f -25 -175 -25 175 A -445 0 343 306 -306 1 2 10 N -150 175 -150 -175 A -81 -56 238 137 768 1 2 10 f 150 0 -24 175 A -81 56 238 -137 -768 1 2 10 f 150 0 -24 -175 A -445 0 343 306 -306 2 2 10 N -150 175 -150 -175 A -81 -56 238 137 768 2 2 10 f 150 0 -24 175 A -81 56 238 -137 -768 2 2 10 f 150 0 -24 -175 S -200 300 200 -300 3 1 10 f P 4 1 1 10 -25 175 -150 175 -150 -175 -25 -175 f P 4 2 1 10 -25 175 -150 175 -150 -175 -25 -175 f P 2 1 2 10 -150 -175 -25 -175 f P 2 1 2 10 -150 175 -25 175 f P 13 1 2 -1000 -25 175 -150 175 -150 175 -143 161 -122 115 -109 66 -103 17 -104 -34 -113 -83 -128 -131 -150 -175 -150 -175 -25 -175 f P 2 2 2 10 -150 -175 -25 -175 f P 2 2 2 10 -150 175 -25 175 f P 13 2 2 -1000 -25 175 -150 175 -150 175 -143 161 -122 115 -109 66 -103 17 -104 -34 -113 -83 -128 -131 -150 -175 -150 -175 -25 -175 f X VDD 14 0 500 200 D 50 50 3 0 W X VSS 7 0 -500 200 U 50 50 3 0 W X ~ 1 300 0 150 L 50 50 1 1 O I X ~ 2 -300 150 150 R 50 50 1 1 I X ~ 3 -300 50 150 R 50 50 1 1 I X ~ 4 -300 -50 150 R 50 50 1 1 I X ~ 5 -300 -150 150 R 50 50 1 1 I X ~ 10 -300 50 150 R 50 50 2 1 I X ~ 11 -300 -50 150 R 50 50 2 1 I X ~ 12 -300 -150 150 R 50 50 2 1 I X ~ 13 300 0 150 L 50 50 2 1 O I X ~ 9 -300 150 150 R 50 50 2 1 I X ~ 1 300 0 150 L 50 50 1 2 O X ~ 2 -300 150 150 R 50 50 1 2 I I X ~ 3 -300 50 190 R 50 50 1 2 I I X ~ 4 -300 -50 190 R 50 50 1 2 I I X ~ 5 -300 -150 150 R 50 50 1 2 I I X ~ 10 -300 50 190 R 50 50 2 2 I I X ~ 11 -300 -50 190 R 50 50 2 2 I I X ~ 12 -300 -150 150 R 50 50 2 2 I I X ~ 13 300 0 150 L 50 50 2 2 O X ~ 9 -300 150 150 R 50 50 2 2 I I ENDDRAW ENDDEF # # 4013 # DEF 4013 U 0 40 Y Y 3 L N F0 "U" -300 350 50 H V C CNN F1 "4013" -300 -350 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP*W7.62mm* SOIC*3.9x9.9mm*P1.27mm* TSSOP*4.4x5mm*P0.65mm* $ENDFPLIST DRAW S -200 200 200 -200 1 1 10 f S -200 200 200 -200 2 1 10 f S -200 300 200 -300 3 1 10 f X VDD 14 0 400 100 D 50 50 3 0 W X VSS 7 0 -400 100 U 50 50 3 0 W X Q 1 300 100 100 L 50 50 1 1 O X ~Q 2 300 -100 100 L 50 50 1 1 O X C 3 -300 0 100 R 50 50 1 1 I C X R 4 0 -300 100 U 50 50 1 1 I X D 5 -300 100 100 R 50 50 1 1 I X S 6 0 300 100 D 50 50 1 1 I X R 10 0 -300 100 U 50 50 2 1 I X C 11 -300 0 100 R 50 50 2 1 I C X ~Q 12 300 -100 100 L 50 50 2 1 O X Q 13 300 100 100 L 50 50 2 1 O X S 8 0 300 100 D 50 50 2 1 I X D 9 -300 100 100 R 50 50 2 1 I ENDDRAW ENDDEF # # 4016 # DEF 4016 U 0 40 Y Y 5 L N F0 "U" -300 350 50 H V C CNN F1 "4016" -300 -350 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS 4066 $FPLIST DIP?14* $ENDFPLIST DRAW S -200 300 200 -300 5 1 10 f P 2 1 0 6 0 50 0 100 N P 4 1 0 0 -100 0 100 100 100 -100 -100 0 f P 4 1 0 0 -100 100 100 0 -100 -100 -100 100 f P 2 2 0 6 0 50 0 100 N P 4 2 0 0 -100 0 100 100 100 -100 -100 0 f P 4 2 0 0 -100 100 100 0 -100 -100 -100 100 f P 2 3 0 6 0 50 0 100 N P 4 3 0 0 -100 0 100 100 100 -100 -100 0 f P 4 3 0 0 -100 100 100 0 -100 -100 -100 100 f P 2 4 0 6 0 50 0 100 N P 4 4 0 0 -100 0 100 100 100 -100 -100 0 f P 4 4 0 0 -100 100 100 0 -100 -100 -100 100 f X ~ 1 -300 0 200 R 50 50 1 0 P X ~ 13 0 300 200 D 50 50 1 0 I X ~ 2 300 0 200 L 50 50 1 0 P X ~ 3 300 0 200 L 50 50 2 0 P X ~ 4 -300 0 200 R 50 50 2 0 P X ~ 5 0 300 200 D 50 50 2 0 I X ~ 6 0 300 200 D 50 50 3 0 I X ~ 8 -300 0 200 R 50 50 3 0 P X ~ 9 300 0 200 L 50 50 3 0 P X ~ 10 300 0 200 L 50 50 4 0 P X ~ 11 -300 0 200 R 50 50 4 0 P X ~ 12 0 300 200 D 50 50 4 0 I X VDD 14 0 500 200 D 50 50 5 0 W X VSS 7 0 -500 200 U 50 50 5 0 W ENDDRAW ENDDEF # # 4017 # DEF 4017 U 0 40 Y Y 1 L N F0 "U" -300 650 50 H V C CNN F1 "4017" -300 -750 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP?16* $ENDFPLIST DRAW S -300 600 300 -700 1 1 10 f X Q5 1 500 0 200 L 50 50 1 0 O X Q4 10 500 100 200 L 50 50 1 0 O X Q9 11 500 -400 200 L 50 50 1 0 O X Cout 12 500 -600 200 L 50 50 1 0 O X CKEN 13 -500 400 200 R 50 50 1 0 I I X CLK 14 -500 500 200 R 50 50 1 0 I C X Reset 15 -500 200 200 R 50 50 1 0 I X VDD 16 0 800 200 D 50 50 1 0 W X Q1 2 500 400 200 L 50 50 1 0 O X Q0 3 500 500 200 L 50 50 1 0 O X Q2 4 500 300 200 L 50 50 1 0 O X Q6 5 500 -100 200 L 50 50 1 0 O X Q7 6 500 -200 200 L 50 50 1 0 O X Q3 7 500 200 200 L 50 50 1 0 O X VSS 8 0 -900 200 U 50 50 1 0 W X Q8 9 500 -300 200 L 50 50 1 0 O ENDDRAW ENDDEF # # 4020 # DEF 4020 U 0 40 Y Y 1 L N F0 "U" -300 650 50 H V C CNN F1 "4020" -300 -750 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP?16* $ENDFPLIST DRAW S -300 600 300 -700 1 1 10 f X Q11 1 500 -400 200 L 50 50 1 0 O X CLK 10 -500 500 200 R 50 50 1 0 I IC X Reset 11 -500 300 200 R 50 50 1 0 I X Q8 12 500 -100 200 L 50 50 1 0 O X Q7 13 500 0 200 L 50 50 1 0 O X Q9 14 500 -200 200 L 50 50 1 0 O X Q10 15 500 -300 200 L 50 50 1 0 O X VDD 16 0 800 200 D 50 50 1 0 W X Q12 2 500 -500 200 L 50 50 1 0 O X Q13 3 500 -600 200 L 50 50 1 0 O X Q5 4 500 200 200 L 50 50 1 0 O X Q4 5 500 300 200 L 50 50 1 0 O X Q6 6 500 100 200 L 50 50 1 0 O X Q3 7 500 400 200 L 50 50 1 0 O X VSS 8 0 -900 200 U 50 50 1 0 W X Q0 9 500 500 200 L 50 50 1 0 O ENDDRAW ENDDEF # # 4021 # DEF 4021 U 0 20 Y Y 1 F N F0 "U" -200 750 50 H V C CNN F1 "4021" 150 750 50 H V C CNN F2 "" 0 150 50 H I C CNN F3 "" 0 150 50 H I C CNN $FPLIST DIP*W7.62mm* SOIC*3.9x9.9mm*P1.27mm* TSSOP*4.4x5mm*P0.65mm* SOIC*5.3x10.2mm*P1.27mm* $ENDFPLIST DRAW S -300 700 300 -700 0 1 10 f X D7 1 -400 -600 100 R 50 50 1 1 I X CP 10 -400 600 100 R 50 50 1 1 I X DS 11 -400 300 100 R 50 50 1 1 I X Q6 12 400 500 100 L 50 50 1 1 O X D4 13 -400 -300 100 R 50 50 1 1 I X D5 14 -400 -400 100 R 50 50 1 1 I X D6 15 -400 -500 100 R 50 50 1 1 I X VDD 16 0 800 100 D 50 50 1 1 W X Q5 2 400 600 100 L 50 50 1 1 O X Q7 3 400 400 100 L 50 50 1 1 O X D3 4 -400 -200 100 R 50 50 1 1 I X D2 5 -400 -100 100 R 50 50 1 1 I X D1 6 -400 0 100 R 50 50 1 1 I X D0 7 -400 100 100 R 50 50 1 1 I X VSS 8 0 -800 100 U 50 50 1 1 W X PL 9 -400 400 100 R 50 50 1 1 I ENDDRAW ENDDEF # # 4022 # DEF 4022 U 0 40 Y Y 1 L N F0 "U" -300 550 50 H V C CNN F1 "4022" -300 -650 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP?16* $ENDFPLIST DRAW S -300 500 300 -600 1 1 10 f X Q1 1 500 300 200 L 50 50 1 0 O X Q7 10 500 -300 200 L 50 50 1 0 O X Q4 11 500 0 200 L 50 50 1 0 O X Cout 12 500 -500 200 L 50 50 1 0 O X CKEN 13 -500 300 200 R 50 50 1 0 I I X CLK 14 -500 400 200 R 50 50 1 0 I C X Reset 15 -500 100 200 R 50 50 1 0 I X VDD 16 0 700 200 D 50 50 1 0 W X Q0 2 500 400 200 L 50 50 1 0 O X Q2 3 500 200 200 L 50 50 1 0 O X Q5 4 500 -100 200 L 50 50 1 0 O X Q6 5 500 -200 200 L 50 50 1 0 O X Q3 7 500 100 200 L 50 50 1 0 O X VSS 8 0 -800 200 U 50 50 1 0 W ENDDRAW ENDDEF # # 4023 # DEF 4023 U 0 40 Y Y 4 L N F0 "U" 0 50 50 H V C CNN F1 "4023" 0 -50 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP?14* $ENDFPLIST DRAW A 0 0 150 -899 899 1 1 10 f 0 -150 0 150 A 0 0 150 -899 899 2 1 10 f 0 -150 0 150 A 0 0 150 -899 899 3 1 10 f 0 -150 0 150 A -360 0 258 354 -354 1 2 10 N -150 150 -150 -150 A -47 -52 204 150 837 1 2 10 f 150 0 -24 150 A -47 52 204 -150 -837 1 2 10 f 150 0 -24 -150 A -360 0 258 354 -354 2 2 10 N -150 150 -150 -150 A -47 -52 204 150 837 2 2 10 f 150 0 -24 150 A -47 52 204 -150 -837 2 2 10 f 150 0 -24 -150 A -360 0 258 354 -354 3 2 10 N -150 150 -150 -150 A -47 -52 204 150 837 3 2 10 f 150 0 -24 150 A -47 52 204 -150 -837 3 2 10 f 150 0 -24 -150 S -200 300 200 -300 4 1 10 f P 4 1 1 10 0 150 -150 150 -150 -150 0 -150 f P 4 2 1 10 0 150 -150 150 -150 -150 0 -150 f P 4 3 1 10 0 150 -150 150 -150 -150 0 -150 f P 2 1 2 10 -150 -150 -25 -150 f P 2 1 2 10 -150 150 -25 150 f P 12 1 2 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f P 2 2 2 10 -150 -150 -25 -150 f P 2 2 2 10 -150 150 -25 150 f P 12 2 2 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f P 2 3 2 10 -150 -150 -25 -150 f P 2 3 2 10 -150 150 -25 150 f P 12 3 2 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f X VDD 14 0 500 200 D 50 50 4 0 W X VSS 7 0 -500 200 U 50 50 4 0 W X ~ 1 -300 100 150 R 50 50 1 1 I X ~ 2 -300 0 150 R 50 50 1 1 I X ~ 8 -300 -100 150 R 50 50 1 1 I X ~ 9 300 0 150 L 50 50 1 1 O I X ~ 3 -300 100 150 R 50 50 2 1 I X ~ 4 -300 0 150 R 50 50 2 1 I X ~ 5 -300 -100 150 R 50 50 2 1 I X ~ 6 300 0 150 L 50 50 2 1 O I X ~ 10 300 0 150 L 50 50 3 1 O I X ~ 11 -300 100 150 R 50 50 3 1 I X ~ 12 -300 0 150 R 50 50 3 1 I X ~ 13 -300 -100 150 R 50 50 3 1 I X ~ 1 -300 100 170 R 50 50 1 2 I I X ~ 2 -300 0 195 R 50 50 1 2 I I X ~ 8 -300 -100 170 R 50 50 1 2 I I X ~ 9 300 0 150 L 50 50 1 2 O X ~ 3 -300 100 170 R 50 50 2 2 I I X ~ 4 -300 0 195 R 50 50 2 2 I I X ~ 5 -300 -100 170 R 50 50 2 2 I I X ~ 6 300 0 150 L 50 50 2 2 O X ~ 10 300 0 150 L 50 50 3 2 O X ~ 11 -300 100 170 R 50 50 3 2 I I X ~ 12 -300 0 195 R 50 50 3 2 I I X ~ 13 -300 -100 170 R 50 50 3 2 I I ENDDRAW ENDDEF # # 4025 # DEF 4025 U 0 40 Y Y 4 L N F0 "U" 0 50 50 H V C CNN F1 "4025" 0 -50 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP?14* $ENDFPLIST DRAW A -360 0 258 354 -354 1 1 10 N -150 150 -150 -150 A -47 -52 204 150 837 1 1 10 f 150 0 -24 150 A -47 52 204 -150 -837 1 1 10 f 150 0 -24 -150 A -360 0 258 354 -354 2 1 10 N -150 150 -150 -150 A -47 -52 204 150 837 2 1 10 f 150 0 -24 150 A -47 52 204 -150 -837 2 1 10 f 150 0 -24 -150 A -360 0 258 354 -354 3 1 10 N -150 150 -150 -150 A -47 -52 204 150 837 3 1 10 f 150 0 -24 150 A -47 52 204 -150 -837 3 1 10 f 150 0 -24 -150 A 0 0 150 -899 899 1 2 10 f 0 -150 0 150 A 0 0 150 -899 899 2 2 10 f 0 -150 0 150 A 0 0 150 -899 899 3 2 10 f 0 -150 0 150 S -200 300 200 -300 4 1 10 f P 2 1 1 10 -150 -150 -25 -150 f P 2 1 1 10 -150 150 -25 150 f P 12 1 1 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f P 2 2 1 10 -150 -150 -25 -150 f P 2 2 1 10 -150 150 -25 150 f P 12 2 1 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f P 2 3 1 10 -150 -150 -25 -150 f P 2 3 1 10 -150 150 -25 150 f P 12 3 1 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f P 4 1 2 10 0 150 -150 150 -150 -150 0 -150 f P 4 2 2 10 0 150 -150 150 -150 -150 0 -150 f P 4 3 2 10 0 150 -150 150 -150 -150 0 -150 f X VDD 14 0 500 200 D 50 50 4 0 W X VSS 7 0 -500 200 U 50 50 4 0 W X ~ 1 -300 100 170 R 50 50 1 1 I X ~ 2 -300 0 195 R 50 50 1 1 I X ~ 8 -300 -100 170 R 50 50 1 1 I X ~ 9 300 0 150 L 50 50 1 1 O I X ~ 3 -300 100 170 R 50 50 2 1 I X ~ 4 -300 0 195 R 50 50 2 1 I X ~ 5 -300 -100 170 R 50 50 2 1 I X ~ 6 300 0 150 L 50 50 2 1 O I X ~ 10 300 0 150 L 50 50 3 1 O I X ~ 11 -300 100 170 R 50 50 3 1 I X ~ 12 -300 0 195 R 50 50 3 1 I X ~ 13 -300 -100 170 R 50 50 3 1 I X ~ 1 -300 100 150 R 50 50 1 2 I I X ~ 2 -300 0 150 R 50 50 1 2 I I X ~ 8 -300 -100 150 R 50 50 1 2 I I X ~ 9 300 0 150 L 50 50 1 2 O X ~ 3 -300 100 150 R 50 50 2 2 I I X ~ 4 -300 0 150 R 50 50 2 2 I I X ~ 5 -300 -100 150 R 50 50 2 2 I I X ~ 6 300 0 150 L 50 50 2 2 O X ~ 10 300 0 150 L 50 50 3 2 O X ~ 11 -300 100 150 R 50 50 3 2 I I X ~ 12 -300 0 150 R 50 50 3 2 I I X ~ 13 -300 -100 150 R 50 50 3 2 I I ENDDRAW ENDDEF # # 4027 # DEF 4027 U 0 40 Y Y 3 L N F0 "U" -300 350 50 H V C CNN F1 "4027" -300 -350 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP*W7.62mm* SOIC*3.9x9.9mm*P1.27mm* TSSOP*4.4x5mm*P0.65mm* $ENDFPLIST DRAW S -200 200 200 -200 1 1 10 f S -200 200 200 -200 2 1 10 f S -200 300 200 -300 3 1 10 f X VDD 16 0 400 100 D 50 50 3 0 W X VSS 8 0 -400 100 U 50 50 3 0 W X Q 1 300 100 100 L 50 50 1 1 O X ~Q 2 300 -100 100 L 50 50 1 1 O X C 3 -300 0 100 R 50 50 1 1 I C X R 4 0 -300 100 U 50 50 1 1 I X K 5 -300 -100 100 R 50 50 1 1 I X J 6 -300 100 100 R 50 50 1 1 I X S 7 0 300 100 D 50 50 1 1 I X J 10 -300 100 100 R 50 50 2 1 I X K 11 -300 -100 100 R 50 50 2 1 I X R 12 0 -300 100 U 50 50 2 1 I X C 13 -300 0 100 R 50 50 2 1 I C X ~Q 14 300 -100 100 L 50 50 2 1 O X Q 15 300 100 100 L 50 50 2 1 O X S 9 0 300 100 D 50 50 2 1 I ENDDRAW ENDDEF # # 4028 # DEF 4028 U 0 40 Y Y 1 L N F0 "U" -300 550 50 H V C CNN F1 "4028" -300 -650 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP?16* $ENDFPLIST DRAW S -300 500 300 -600 1 1 10 f X S4 1 500 0 200 L 50 50 1 0 O X A 10 -500 200 200 R 50 50 1 0 I X D 11 -500 -100 200 R 50 50 1 0 I X C 12 -500 0 200 R 50 50 1 0 I X B 13 -500 100 200 R 50 50 1 0 I X S1 14 500 300 200 L 50 50 1 0 O X S3 15 500 100 200 L 50 50 1 0 O X VDD 16 0 700 200 D 50 50 1 0 W X S2 2 500 200 200 L 50 50 1 0 O X S0 3 500 400 200 L 50 50 1 0 O X S7 4 500 -300 200 L 50 50 1 0 O X S9 5 500 -500 200 L 50 50 1 0 O X S5 6 500 -100 200 L 50 50 1 0 O X S6 7 500 -200 200 L 50 50 1 0 O X VSS 8 0 -800 200 U 50 50 1 0 W X S8 9 500 -400 200 L 50 50 1 0 O ENDDRAW ENDDEF # # 4029 # DEF 4029 U 0 40 Y Y 1 L N F0 "U" -300 650 50 H V C CNN F1 "4029" -300 -750 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP?16* $ENDFPLIST DRAW S -300 600 300 -700 1 1 10 f X PE 1 -500 -600 200 R 50 50 1 0 I X U/D 10 500 -100 200 L 50 50 1 0 I X Q2 11 500 400 200 L 50 50 1 0 O X J2 12 -500 200 200 R 50 50 1 0 I X J3 13 -500 100 200 R 50 50 1 0 I X Q3 14 500 300 200 L 50 50 1 0 O X CK 15 -500 500 200 R 50 50 1 0 I IC X VDD 16 0 800 200 D 50 50 1 0 W X Q4 2 500 200 200 L 50 50 1 0 O X J4 3 -500 0 200 R 50 50 1 0 I X J1 4 -500 300 200 R 50 50 1 0 I X Cin 5 -500 -200 200 R 50 50 1 0 I X Q1 6 500 500 200 L 50 50 1 0 O X Cout 7 500 -300 200 L 50 50 1 0 O X VSS 8 0 -900 200 U 50 50 1 0 W X B/D 9 500 -200 200 L 50 50 1 0 I ENDDRAW ENDDEF # # 4040 # DEF 4040 U 0 40 Y Y 1 L N F0 "U" -300 650 50 H V C CNN F1 "4040" -300 -750 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP?16* $ENDFPLIST DRAW S -300 600 300 -700 1 1 10 f X Q11 1 500 -600 200 L 50 50 1 0 O X CLK 10 -500 500 200 R 50 50 1 0 I IC X Reset 11 -500 200 200 R 50 50 1 0 I X Q8 12 500 -300 200 L 50 50 1 0 O X Q7 13 500 -200 200 L 50 50 1 0 O X Q9 14 500 -400 200 L 50 50 1 0 O X Q10 15 500 -500 200 L 50 50 1 0 O X VDD 16 0 800 200 D 50 50 1 0 W X Q5 2 500 0 200 L 50 50 1 0 O X Q4 3 500 100 200 L 50 50 1 0 O X Q6 4 500 -100 200 L 50 50 1 0 O X Q3 5 500 200 200 L 50 50 1 0 O X Q2 6 500 300 200 L 50 50 1 0 O X Q1 7 500 400 200 L 50 50 1 0 O X VSS 8 0 -900 200 U 50 50 1 0 W X Q0 9 500 500 200 L 50 50 1 0 O ENDDRAW ENDDEF # # 4046 # DEF 4046 U 0 40 Y Y 1 L N F0 "U" -300 550 50 H V C CNN F1 "4046" -300 -650 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP?16* $ENDFPLIST DRAW S -300 500 300 -600 1 1 10 f X PCP 1 500 -200 200 L 50 50 1 0 O X SFout 10 500 -300 200 L 50 50 1 0 O X R1 11 -500 -200 200 R 50 50 1 0 I X R2 12 -500 -300 200 R 50 50 1 0 I X PC2 13 500 200 200 L 50 50 1 0 T X RefIn 3 -500 400 200 R 50 50 1 0 I X ZOUT 15 500 -400 200 L 50 50 1 0 O X VDD 16 0 700 200 D 50 50 1 0 W X PC1 2 500 300 200 L 50 50 1 0 O X SigIn 14 -500 300 200 R 50 50 1 0 I X FOUT 4 500 400 200 L 50 50 1 0 I X Inh 5 -500 -500 200 R 50 50 1 0 I X C1 6 -500 100 200 R 50 50 1 0 I X C2 7 -500 0 200 R 50 50 1 0 I X VSS 8 0 -800 200 U 50 50 1 0 W X VCOin 9 500 0 200 L 50 50 1 0 I ENDDRAW ENDDEF # # 4047 # DEF 4047 U 0 40 Y Y 1 L N F0 "U" -300 950 50 H V C CNN F1 "4047" -300 -950 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP*W7.62mm* SOIC*3.9x8.7mm*P1.27mm* $ENDFPLIST DRAW S -400 900 400 -900 1 1 10 f X C 1 -600 -500 200 R 50 50 1 0 I X Q 10 600 300 200 L 50 50 1 0 O X ~Q 11 600 100 200 L 50 50 1 0 O X RETRIGGER 12 -600 100 200 R 50 50 1 0 I X OSC_OUT 13 600 700 200 L 50 50 1 0 O X VDD 14 0 1100 200 D 50 50 1 0 W X R 2 -600 -300 200 R 50 50 1 0 I X RC_COMMON 3 -600 -700 200 R 50 50 1 0 I X ~ASTABLE 4 -600 600 200 R 50 50 1 0 I X ASTABLE 5 -600 700 200 R 50 50 1 0 I X -TRIGGER 6 -600 400 200 R 50 50 1 0 I X VSS 7 0 -1100 200 U 50 50 1 0 W X +TRIGGER 8 -600 300 200 R 50 50 1 0 I X EXT_RESET 9 -600 -100 200 R 50 50 1 0 I ENDDRAW ENDDEF # # 4049 # DEF 4049 U 0 40 Y Y 7 L N F0 "U" 0 50 50 H V C CNN F1 "4049" 0 -50 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP?16* $ENDFPLIST DRAW S -200 300 200 -300 7 1 10 f P 4 1 0 10 -150 150 -150 -150 150 0 -150 150 f P 4 2 0 10 -150 150 -150 -150 150 0 -150 150 f P 4 3 0 10 -150 150 -150 -150 150 0 -150 150 f P 4 4 0 10 -150 150 -150 -150 150 0 -150 150 f P 4 5 0 10 -150 150 -150 -150 150 0 -150 150 f P 4 6 0 10 -150 150 -150 -150 150 0 -150 150 f X ~ 2 300 0 150 L 50 50 1 0 O I X ~ 3 -300 0 150 R 50 50 1 0 I X ~ 4 300 0 150 L 50 50 2 0 O I X ~ 5 -300 0 150 R 50 50 2 0 I X ~ 6 300 0 150 L 50 50 3 0 O I X ~ 7 -300 0 150 R 50 50 3 0 I X ~ 10 300 0 150 L 50 50 4 0 O I X ~ 9 -300 0 150 R 50 50 4 0 I X ~ 11 -300 0 150 R 50 50 5 0 I X ~ 12 300 0 150 L 50 50 5 0 O I X ~ 14 -300 0 150 R 50 50 6 0 I X ~ 15 300 0 150 L 50 50 6 0 O I X VCC 1 0 500 200 D 50 50 7 0 W X VSS 8 0 -500 200 U 50 50 7 0 W ENDDRAW ENDDEF # # 4050 # DEF 4050 U 0 40 Y Y 7 L N F0 "U" 0 50 50 H V C CNN F1 "4050" 0 -50 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP?16* $ENDFPLIST DRAW S -200 300 200 -300 7 1 10 f P 4 1 0 10 -150 150 -150 -150 150 0 -150 150 f P 4 2 0 10 -150 150 -150 -150 150 0 -150 150 f P 4 3 0 10 -150 150 -150 -150 150 0 -150 150 f P 4 4 0 10 -150 150 -150 -150 150 0 -150 150 f P 4 5 0 10 -150 150 -150 -150 150 0 -150 150 f P 4 6 0 10 -150 150 -150 -150 150 0 -150 150 f X ~ 2 300 0 150 L 50 50 1 0 O X ~ 3 -300 0 150 R 50 50 1 0 I X ~ 4 300 0 150 L 50 50 2 0 O X ~ 5 -300 0 150 R 50 50 2 0 I X ~ 6 300 0 150 L 50 50 3 0 O X ~ 7 -300 0 150 R 50 50 3 0 I X ~ 10 300 0 150 L 50 50 4 0 O X ~ 9 -300 0 150 R 50 50 4 0 I X ~ 11 -300 0 150 R 50 50 5 0 I X ~ 12 300 0 150 L 50 50 5 0 O X ~ 14 -300 0 150 R 50 50 6 0 I X ~ 15 300 0 150 L 50 50 6 0 O X VCC 1 0 500 200 D 50 50 7 0 W X VSS 8 0 -500 200 U 50 50 7 0 W ENDDRAW ENDDEF # # 4051 # DEF 4051 U 0 40 Y Y 1 L N F0 "U" -300 750 50 H V C CNN F1 "4051" -300 -750 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP?16* $ENDFPLIST DRAW S -300 700 300 -700 1 1 10 f X X4 1 -500 200 200 R 50 50 1 0 P X B 10 -500 -500 200 R 50 50 1 0 I X A 11 -500 -400 200 R 50 50 1 0 I X X3 12 -500 300 200 R 50 50 1 0 P X X0 13 -500 600 200 R 50 50 1 0 P X X1 14 -500 500 200 R 50 50 1 0 P X X2 15 -500 400 200 R 50 50 1 0 P X VDD 16 0 900 200 D 50 50 1 0 W X X6 2 -500 0 200 R 50 50 1 0 P X X 3 500 600 200 L 50 50 1 0 P X X7 4 -500 -100 200 R 50 50 1 0 P X X5 5 -500 100 200 R 50 50 1 0 P X Inh 6 -500 -300 200 R 50 50 1 0 I X VEE 7 100 -900 200 U 50 50 1 0 W X VSS 8 0 -900 200 U 50 50 1 0 W X C 9 -500 -600 200 R 50 50 1 0 I ENDDRAW ENDDEF # # 4052 # DEF 4052 U 0 40 Y Y 1 L N F0 "U" -300 750 50 H V C CNN F1 "4052" -300 -750 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP?16* $ENDFPLIST DRAW S -300 700 300 -700 1 1 10 f X Y0 1 -500 200 200 R 50 50 1 0 P X A 10 -500 -500 200 R 50 50 1 0 I X X3 11 -500 300 200 R 50 50 1 0 P X X0 12 -500 600 200 R 50 50 1 0 P X X 13 500 600 200 L 50 50 1 0 P X X1 14 -500 500 200 R 50 50 1 0 P X X2 15 -500 400 200 R 50 50 1 0 P X VDD 16 0 900 200 D 50 50 1 0 W X Y2 2 -500 0 200 R 50 50 1 0 P X Y 3 500 200 200 L 50 50 1 0 P X Y3 4 -500 -100 200 R 50 50 1 0 P X Y1 5 -500 100 200 R 50 50 1 0 P X Inh 6 -500 -300 200 R 50 50 1 0 I X VEE 7 100 -900 200 U 50 50 1 0 W X VSS 8 0 -900 200 U 50 50 1 0 W X B 9 -500 -600 200 R 50 50 1 0 I ENDDRAW ENDDEF # # 4053 # DEF 4053 U 0 40 Y Y 1 L N F0 "U" -300 750 50 H V C CNN F1 "4053" -300 -750 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP?16* $ENDFPLIST DRAW S -300 700 300 -700 1 1 10 f X Y1 1 -500 200 200 R 50 50 1 0 P X B 10 -500 -500 200 R 50 50 1 0 I X A 11 -500 -400 200 R 50 50 1 0 I X X0 12 -500 600 200 R 50 50 1 0 P X X1 13 -500 500 200 R 50 50 1 0 P X X 14 500 600 200 L 50 50 1 0 P X Y 15 500 300 200 L 50 50 1 0 P X VDD 16 0 900 200 D 50 50 1 0 W X Y0 2 -500 300 200 R 50 50 1 0 P X Z1 3 -500 -100 200 R 50 50 1 0 P X Z 4 500 0 200 L 50 50 1 0 P X Z0 5 -500 0 200 R 50 50 1 0 P X Inh 6 -500 -300 200 R 50 50 1 0 I X VEE 7 100 -900 200 U 50 50 1 0 W X VSS 8 0 -900 200 U 50 50 1 0 W X C 9 -500 -600 200 R 50 50 1 0 I ENDDRAW ENDDEF # # 4056 # DEF 4056 U 0 40 Y Y 1 L N F0 "U" -300 550 50 H V C CNN F1 "4056" -300 -550 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP*W7.62mm* SOIC*3.9x9.9mm*P1.27mm* TSSOP*4.4x5mm*P0.65mm* $ENDFPLIST DRAW S -300 500 300 -500 1 1 10 f X STROBE 1 -500 -200 200 R 50 50 1 0 I X b 10 500 200 200 L 50 50 1 0 O X c 11 500 100 200 L 50 50 1 0 O X d 12 500 0 200 L 50 50 1 0 O X e 13 500 -100 200 L 50 50 1 0 O X g 14 500 -300 200 L 50 50 1 0 O X f 15 500 -200 200 L 50 50 1 0 O X VDD 16 0 700 200 D 50 50 1 0 W X 2^2 2 -500 100 200 R 50 50 1 0 I X 2^1 3 -500 200 200 R 50 50 1 0 I X 2^3 4 -500 0 200 R 50 50 1 0 I X 2^0 5 -500 300 200 R 50 50 1 0 I X FREQ.IN 6 -500 -300 200 R 50 50 1 0 I X VEE 7 0 -700 200 U 50 50 1 0 W X VSS 8 100 -700 200 U 50 50 1 0 W X a 9 500 300 200 L 50 50 1 0 O ENDDRAW ENDDEF # # 4069 # DEF 4069 U 0 40 Y Y 7 L N F0 "U" 0 50 50 H V C CNN F1 "4069" 0 -50 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP?14* $ENDFPLIST DRAW S -200 300 200 -300 7 1 10 f P 4 1 0 10 -150 150 -150 -150 150 0 -150 150 f P 4 2 0 10 -150 150 -150 -150 150 0 -150 150 f P 4 3 0 10 -150 150 -150 -150 150 0 -150 150 f P 4 4 0 10 -150 150 -150 -150 150 0 -150 150 f P 4 5 0 10 -150 150 -150 -150 150 0 -150 150 f P 4 6 0 10 -150 150 -150 -150 150 0 -150 150 f X ~ 1 -300 0 150 R 50 50 1 0 I X ~ 2 300 0 150 L 50 50 1 0 O I X ~ 3 -300 0 150 R 50 50 2 0 I X ~ 4 300 0 150 L 50 50 2 0 O I X ~ 5 -300 0 150 R 50 50 3 0 I X ~ 6 300 0 150 L 50 50 3 0 O I X ~ 8 300 0 150 L 50 50 4 0 O I X ~ 9 -300 0 150 R 50 50 4 0 I X ~ 10 300 0 150 L 50 50 5 0 O I X ~ 11 -300 0 150 R 50 50 5 0 I X ~ 12 300 0 150 L 50 50 6 0 O I X ~ 13 -300 0 150 R 50 50 6 0 I X VDD 14 0 500 200 D 50 50 7 0 W X VSS 7 0 -500 200 U 50 50 7 0 W ENDDRAW ENDDEF # # 4070 # DEF 4070 U 0 40 Y Y 5 L N F0 "U" 0 50 50 H V C CNN F1 "4070" 0 -50 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP?14* $ENDFPLIST DRAW A -385 0 258 354 -354 1 0 10 N -174 150 -174 -150 A -360 0 258 354 -354 1 0 10 N -150 150 -150 -150 A -47 -52 204 150 837 1 0 10 f 150 0 -24 150 A -47 52 204 -150 -837 1 0 10 f 150 0 -24 -150 A -385 0 258 354 -354 2 0 10 N -174 150 -174 -150 A -360 0 258 354 -354 2 0 10 N -150 150 -150 -150 A -47 -52 204 150 837 2 0 10 f 150 0 -24 150 A -47 52 204 -150 -837 2 0 10 f 150 0 -24 -150 A -385 0 258 354 -354 3 0 10 N -174 150 -174 -150 A -360 0 258 354 -354 3 0 10 N -150 150 -150 -150 A -47 -52 204 150 837 3 0 10 f 150 0 -24 150 A -47 52 204 -150 -837 3 0 10 f 150 0 -24 -150 A -385 0 258 354 -354 4 0 10 N -174 150 -174 -150 A -360 0 258 354 -354 4 0 10 N -150 150 -150 -150 A -47 -52 204 150 837 4 0 10 f 150 0 -24 150 A -47 52 204 -150 -837 4 0 10 f 150 0 -24 -150 S -200 300 200 -300 5 1 10 f P 2 1 0 10 -150 -150 -25 -150 f P 2 1 0 10 -150 150 -25 150 f P 12 1 0 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f P 2 2 0 10 -150 -150 -25 -150 f P 2 2 0 10 -150 150 -25 150 f P 12 2 0 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f P 2 3 0 10 -150 -150 -25 -150 f P 2 3 0 10 -150 150 -25 150 f P 12 3 0 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f P 2 4 0 10 -150 -150 -25 -150 f P 2 4 0 10 -150 150 -25 150 f P 12 4 0 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f P 2 1 1 6 -150 -100 -125 -100 N P 2 1 1 6 -150 100 -125 100 N P 2 2 1 6 -150 -100 -125 -100 N P 2 2 1 6 -150 100 -125 100 N P 2 3 1 6 -150 -100 -125 -100 N P 2 3 1 6 -150 100 -125 100 N P 2 4 1 6 -150 -100 -125 -100 N P 2 4 1 6 -150 100 -125 100 N X ~ 1 -300 100 175 R 50 50 1 0 I X ~ 2 -300 -100 175 R 50 50 1 0 I X ~ 3 300 0 150 L 50 50 1 0 O X ~ 4 300 0 150 L 50 50 2 0 O X ~ 5 -300 100 175 R 50 50 2 0 I X ~ 6 -300 -100 175 R 50 50 2 0 I X ~ 10 300 0 150 L 50 50 3 0 O X ~ 8 -300 100 175 R 50 50 3 0 I X ~ 9 -300 -100 175 R 50 50 3 0 I X ~ 11 300 0 150 L 50 50 4 0 O X ~ 12 -300 100 175 R 50 50 4 0 I X ~ 13 -300 -100 175 R 50 50 4 0 I X VDD 14 0 500 200 D 50 50 5 0 W X VSS 7 0 -500 200 U 50 50 5 0 W ENDDRAW ENDDEF # # 4071 # DEF 4071 U 0 40 Y Y 5 L N F0 "U" 0 50 50 H V C CNN F1 "4071" 0 -50 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP?14* $ENDFPLIST DRAW A -360 0 258 354 -354 1 1 10 N -150 150 -150 -150 A -47 -52 204 150 837 1 1 10 f 150 0 -24 150 A -47 52 204 -150 -837 1 1 10 f 150 0 -24 -150 A -360 0 258 354 -354 2 1 10 N -150 150 -150 -150 A -47 -52 204 150 837 2 1 10 f 150 0 -24 150 A -47 52 204 -150 -837 2 1 10 f 150 0 -24 -150 A -360 0 258 354 -354 3 1 10 N -150 150 -150 -150 A -47 -52 204 150 837 3 1 10 f 150 0 -24 150 A -47 52 204 -150 -837 3 1 10 f 150 0 -24 -150 A -360 0 258 354 -354 4 1 10 N -150 150 -150 -150 A -47 -52 204 150 837 4 1 10 f 150 0 -24 150 A -47 52 204 -150 -837 4 1 10 f 150 0 -24 -150 A 0 0 150 -899 899 1 2 10 f 0 -150 0 150 A 0 0 150 -899 899 2 2 10 f 0 -150 0 150 A 0 0 150 -899 899 3 2 10 f 0 -150 0 150 A 0 0 150 -899 899 4 2 10 f 0 -150 0 150 S -200 300 200 -300 5 1 10 f P 2 1 1 10 -150 -150 -25 -150 f P 2 1 1 10 -150 150 -25 150 f P 12 1 1 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f P 2 2 1 10 -150 -150 -25 -150 f P 2 2 1 10 -150 150 -25 150 f P 12 2 1 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f P 2 3 1 10 -150 -150 -25 -150 f P 2 3 1 10 -150 150 -25 150 f P 12 3 1 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f P 2 4 1 10 -150 -150 -25 -150 f P 2 4 1 10 -150 150 -25 150 f P 12 4 1 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f P 4 1 2 10 0 150 -150 150 -150 -150 0 -150 f P 4 2 2 10 0 150 -150 150 -150 -150 0 -150 f P 4 3 2 10 0 150 -150 150 -150 -150 0 -150 f P 4 4 2 10 0 150 -150 150 -150 -150 0 -150 f X VDD 14 0 500 200 D 50 50 5 0 W X VSS 7 0 -500 200 U 50 50 5 0 W X ~ 1 -300 100 170 R 50 50 1 1 I X ~ 2 -300 -100 170 R 50 50 1 1 I X ~ 3 300 0 150 L 50 50 1 1 O X ~ 4 300 0 150 L 50 50 2 1 O X ~ 5 -300 100 170 R 50 50 2 1 I X ~ 6 -300 -100 170 R 50 50 2 1 I X ~ 10 300 0 150 L 50 50 3 1 O X ~ 8 -300 100 170 R 50 50 3 1 I X ~ 9 -300 -100 170 R 50 50 3 1 I X ~ 11 300 0 150 L 50 50 4 1 O X ~ 12 -300 100 170 R 50 50 4 1 I X ~ 13 -300 -100 170 R 50 50 4 1 I X ~ 1 -300 100 150 R 50 50 1 2 I I X ~ 2 -300 -100 150 R 50 50 1 2 I I X ~ 3 300 0 150 L 50 50 1 2 O I X ~ 4 300 0 150 L 50 50 2 2 O I X ~ 5 -300 100 150 R 50 50 2 2 I I X ~ 6 -300 -100 150 R 50 50 2 2 I I X ~ 10 300 0 150 L 50 50 3 2 O I X ~ 8 -300 100 150 R 50 50 3 2 I I X ~ 9 -300 -100 150 R 50 50 3 2 I I X ~ 11 300 0 150 L 50 50 4 2 O I X ~ 12 -300 100 150 R 50 50 4 2 I I X ~ 13 -300 -100 150 R 50 50 4 2 I I ENDDRAW ENDDEF # # 4072 # DEF 4072 U 0 40 Y Y 3 L N F0 "U" 0 50 50 H V C CNN F1 "4072" 0 -50 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP?14* $ENDFPLIST DRAW A -445 0 343 306 -306 1 1 10 N -150 175 -150 -175 A -81 -56 238 137 768 1 1 10 f 150 0 -24 175 A -81 56 238 -137 -768 1 1 10 f 150 0 -24 -175 A -445 0 343 306 -306 2 1 10 N -150 175 -150 -175 A -81 -56 238 137 768 2 1 10 f 150 0 -24 175 A -81 56 238 -137 -768 2 1 10 f 150 0 -24 -175 A -25 0 175 -899 899 1 2 10 f -25 -175 -25 175 A -25 0 175 -899 899 2 2 10 f -25 -175 -25 175 S -200 300 200 -300 3 1 10 f P 2 1 1 10 -150 -175 -25 -175 f P 2 1 1 10 -150 175 -25 175 f P 13 1 1 -1000 -25 175 -150 175 -150 175 -143 161 -122 115 -109 66 -103 17 -104 -34 -113 -83 -128 -131 -150 -175 -150 -175 -25 -175 f P 2 2 1 10 -150 -175 -25 -175 f P 2 2 1 10 -150 175 -25 175 f P 13 2 1 -1000 -25 175 -150 175 -150 175 -143 161 -122 115 -109 66 -103 17 -104 -34 -113 -83 -128 -131 -150 -175 -150 -175 -25 -175 f P 4 1 2 10 -25 175 -150 175 -150 -175 -25 -175 f P 4 2 2 10 -25 175 -150 175 -150 -175 -25 -175 f X VDD 14 0 500 200 D 50 50 3 0 W X VSS 7 0 -500 200 U 50 50 3 0 W X ~ 1 300 0 150 L 50 50 1 1 O X ~ 2 -300 150 150 R 50 50 1 1 I X ~ 3 -300 50 190 R 50 50 1 1 I X ~ 4 -300 -50 190 R 50 50 1 1 I X ~ 5 -300 -150 150 R 50 50 1 1 I X ~ 10 -300 50 190 R 50 50 2 1 I X ~ 11 -300 -50 190 R 50 50 2 1 I X ~ 12 -300 -150 150 R 50 50 2 1 I X ~ 13 300 0 150 L 50 50 2 1 O X ~ 9 -300 150 150 R 50 50 2 1 I X ~ 1 300 0 150 L 50 50 1 2 O I X ~ 2 -300 150 150 R 50 50 1 2 I I X ~ 3 -300 50 150 R 50 50 1 2 I I X ~ 4 -300 -50 150 R 50 50 1 2 I I X ~ 5 -300 -150 150 R 50 50 1 2 I I X ~ 10 -300 50 150 R 50 50 2 2 I I X ~ 11 -300 -50 150 R 50 50 2 2 I I X ~ 12 -300 -150 150 R 50 50 2 2 I I X ~ 13 300 0 150 L 50 50 2 2 O I X ~ 9 -300 150 150 R 50 50 2 2 I I ENDDRAW ENDDEF # # 4073 # DEF 4073 U 0 40 Y Y 4 L N F0 "U" 0 50 50 H V C CNN F1 "4073" 0 -50 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP?14* $ENDFPLIST DRAW A 0 0 150 -899 899 1 1 10 f 0 -150 0 150 A 0 0 150 -899 899 2 1 10 f 0 -150 0 150 A 0 0 150 -899 899 3 1 10 f 0 -150 0 150 A -360 0 258 354 -354 1 2 10 N -150 150 -150 -150 A -47 -52 204 150 837 1 2 10 f 150 0 -24 150 A -47 52 204 -150 -837 1 2 10 f 150 0 -24 -150 A -360 0 258 354 -354 2 2 10 N -150 150 -150 -150 A -47 -52 204 150 837 2 2 10 f 150 0 -24 150 A -47 52 204 -150 -837 2 2 10 f 150 0 -24 -150 A -360 0 258 354 -354 3 2 10 N -150 150 -150 -150 A -47 -52 204 150 837 3 2 10 f 150 0 -24 150 A -47 52 204 -150 -837 3 2 10 f 150 0 -24 -150 S -200 300 200 -300 4 1 10 f P 4 1 1 10 0 150 -150 150 -150 -150 0 -150 f P 4 2 1 10 0 150 -150 150 -150 -150 0 -150 f P 4 3 1 10 0 150 -150 150 -150 -150 0 -150 f P 2 1 2 10 -150 -150 -25 -150 f P 2 1 2 10 -150 150 -25 150 f P 12 1 2 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f P 2 2 2 10 -150 -150 -25 -150 f P 2 2 2 10 -150 150 -25 150 f P 12 2 2 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f P 2 3 2 10 -150 -150 -25 -150 f P 2 3 2 10 -150 150 -25 150 f P 12 3 2 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f X VDD 14 0 500 200 D 50 50 4 0 W X VSS 7 0 -500 200 U 50 50 4 0 W X ~ 1 -300 100 150 R 50 50 1 1 I X ~ 2 -300 0 150 R 50 50 1 1 I X ~ 8 -300 -100 150 R 50 50 1 1 I X ~ 9 300 0 150 L 50 50 1 1 O X ~ 3 -300 100 150 R 50 50 2 1 I X ~ 4 -300 0 150 R 50 50 2 1 I X ~ 5 -300 -100 150 R 50 50 2 1 I X ~ 6 300 0 150 L 50 50 2 1 O X ~ 10 300 0 150 L 50 50 3 1 O X ~ 11 -300 100 150 R 50 50 3 1 I X ~ 12 -300 0 150 R 50 50 3 1 I X ~ 13 -300 -100 150 R 50 50 3 1 I X ~ 1 -300 100 170 R 50 50 1 2 I I X ~ 2 -300 0 195 R 50 50 1 2 I I X ~ 8 -300 -100 170 R 50 50 1 2 I I X ~ 9 300 0 150 L 50 50 1 2 O I X ~ 3 -300 100 170 R 50 50 2 2 I I X ~ 4 -300 0 195 R 50 50 2 2 I I X ~ 5 -300 -100 170 R 50 50 2 2 I I X ~ 6 300 0 150 L 50 50 2 2 O I X ~ 10 300 0 150 L 50 50 3 2 O I X ~ 11 -300 100 170 R 50 50 3 2 I I X ~ 12 -300 0 195 R 50 50 3 2 I I X ~ 13 -300 -100 170 R 50 50 3 2 I I ENDDRAW ENDDEF # # 4075 # DEF 4075 U 0 40 Y Y 4 L N F0 "U" 0 50 50 H V C CNN F1 "4075" 0 -50 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP?14* $ENDFPLIST DRAW A -360 0 258 354 -354 1 1 10 N -150 150 -150 -150 A -47 -52 204 150 837 1 1 10 f 150 0 -24 150 A -47 52 204 -150 -837 1 1 10 f 150 0 -24 -150 A -360 0 258 354 -354 2 1 10 N -150 150 -150 -150 A -47 -52 204 150 837 2 1 10 f 150 0 -24 150 A -47 52 204 -150 -837 2 1 10 f 150 0 -24 -150 A -360 0 258 354 -354 3 1 10 N -150 150 -150 -150 A -47 -52 204 150 837 3 1 10 f 150 0 -24 150 A -47 52 204 -150 -837 3 1 10 f 150 0 -24 -150 A 0 0 150 -899 899 1 2 10 f 0 -150 0 150 A 0 0 150 -899 899 2 2 10 f 0 -150 0 150 A 0 0 150 -899 899 3 2 10 f 0 -150 0 150 S -200 300 200 -300 4 1 10 f P 2 1 1 10 -150 -150 -25 -150 f P 2 1 1 10 -150 150 -25 150 f P 12 1 1 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f P 2 2 1 10 -150 -150 -25 -150 f P 2 2 1 10 -150 150 -25 150 f P 12 2 1 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f P 2 3 1 10 -150 -150 -25 -150 f P 2 3 1 10 -150 150 -25 150 f P 12 3 1 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f P 4 1 2 10 0 150 -150 150 -150 -150 0 -150 f P 4 2 2 10 0 150 -150 150 -150 -150 0 -150 f P 4 3 2 10 0 150 -150 150 -150 -150 0 -150 f X VDD 14 0 500 200 D 50 50 4 0 W X VSS 7 0 -500 200 U 50 50 4 0 W X ~ 1 -300 100 170 R 50 50 1 1 I X ~ 2 -300 0 195 R 50 50 1 1 I X ~ 8 -300 -100 170 R 50 50 1 1 I X ~ 9 300 0 150 L 50 50 1 1 O X ~ 3 -300 100 170 R 50 50 2 1 I X ~ 4 -300 0 195 R 50 50 2 1 I X ~ 5 -300 -100 170 R 50 50 2 1 I X ~ 6 300 0 150 L 50 50 2 1 O X ~ 10 300 0 150 L 50 50 3 1 O X ~ 11 -300 100 170 R 50 50 3 1 I X ~ 12 -300 0 195 R 50 50 3 1 I X ~ 13 -300 -100 170 R 50 50 3 1 I X ~ 1 -300 100 150 R 50 50 1 2 I I X ~ 2 -300 0 150 R 50 50 1 2 I I X ~ 8 -300 -100 150 R 50 50 1 2 I I X ~ 9 300 0 150 L 50 50 1 2 O I X ~ 3 -300 100 150 R 50 50 2 2 I I X ~ 4 -300 0 150 R 50 50 2 2 I I X ~ 5 -300 -100 150 R 50 50 2 2 I I X ~ 6 300 0 150 L 50 50 2 2 O I X ~ 10 300 0 150 L 50 50 3 2 O I X ~ 11 -300 100 150 R 50 50 3 2 I I X ~ 12 -300 0 150 R 50 50 3 2 I I X ~ 13 -300 -100 150 R 50 50 3 2 I I ENDDRAW ENDDEF # # 4077 # DEF 4077 U 0 40 Y Y 5 L N F0 "U" 0 50 50 H V C CNN F1 "4077" 0 -50 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP?14* $ENDFPLIST DRAW A -385 0 258 354 -354 1 0 10 N -174 150 -174 -150 A -360 0 258 354 -354 1 0 10 N -150 150 -150 -150 A -47 -52 204 150 837 1 0 10 f 150 0 -24 150 A -47 52 204 -150 -837 1 0 10 f 150 0 -24 -150 A -385 0 258 354 -354 2 0 10 N -174 150 -174 -150 A -360 0 258 354 -354 2 0 10 N -150 150 -150 -150 A -47 -52 204 150 837 2 0 10 f 150 0 -24 150 A -47 52 204 -150 -837 2 0 10 f 150 0 -24 -150 A -385 0 258 354 -354 3 0 10 N -174 150 -174 -150 A -360 0 258 354 -354 3 0 10 N -150 150 -150 -150 A -47 -52 204 150 837 3 0 10 f 150 0 -24 150 A -47 52 204 -150 -837 3 0 10 f 150 0 -24 -150 A -385 0 258 354 -354 4 0 10 N -174 150 -174 -150 A -360 0 258 354 -354 4 0 10 N -150 150 -150 -150 A -47 -52 204 150 837 4 0 10 f 150 0 -24 150 A -47 52 204 -150 -837 4 0 10 f 150 0 -24 -150 S -200 300 200 -300 5 1 10 f P 2 1 0 10 -150 -150 -25 -150 f P 2 1 0 10 -150 150 -25 150 f P 12 1 0 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f P 2 2 0 10 -150 -150 -25 -150 f P 2 2 0 10 -150 150 -25 150 f P 12 2 0 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f P 2 3 0 10 -150 -150 -25 -150 f P 2 3 0 10 -150 150 -25 150 f P 12 3 0 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f P 2 4 0 10 -150 -150 -25 -150 f P 2 4 0 10 -150 150 -25 150 f P 12 4 0 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f P 2 1 1 6 -150 -100 -125 -100 N P 2 1 1 6 -150 100 -125 100 N P 2 2 1 6 -150 -100 -125 -100 N P 2 2 1 6 -150 100 -125 100 N P 2 3 1 6 -150 -100 -125 -100 N P 2 3 1 6 -150 100 -125 100 N P 2 4 1 6 -150 -100 -125 -100 N P 2 4 1 6 -150 100 -125 100 N X ~ 1 -300 100 175 R 50 50 1 0 I X ~ 2 -300 -100 175 R 50 50 1 0 I X ~ 3 300 0 150 L 50 50 1 0 O I X ~ 4 300 0 150 L 50 50 2 0 O I X ~ 5 -300 100 175 R 50 50 2 0 I X ~ 6 -300 -100 175 R 50 50 2 0 I X ~ 10 300 0 150 L 50 50 3 0 O I X ~ 8 -300 100 175 R 50 50 3 0 I X ~ 9 -300 -100 175 R 50 50 3 0 I X ~ 11 300 0 150 L 50 50 4 0 O I X ~ 12 -300 100 175 R 50 50 4 0 I X ~ 13 -300 -100 175 R 50 50 4 0 I X VDD 14 0 500 200 D 50 50 5 0 W X VSS 7 0 -500 200 U 50 50 5 0 W ENDDRAW ENDDEF # # 4081 # DEF 4081 U 0 40 Y Y 5 L N F0 "U" 0 50 50 H V C CNN F1 "4081" 0 -50 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP?14* $ENDFPLIST DRAW A 0 0 150 -899 899 1 1 10 f 0 -150 0 150 A 0 0 150 -899 899 2 1 10 f 0 -150 0 150 A 0 0 150 -899 899 3 1 10 f 0 -150 0 150 A 0 0 150 -899 899 4 1 10 f 0 -150 0 150 A -360 0 258 354 -354 1 2 10 N -150 150 -150 -150 A -47 -52 204 150 837 1 2 10 f 150 0 -24 150 A -47 52 204 -150 -837 1 2 10 f 150 0 -24 -150 A -360 0 258 354 -354 2 2 10 N -150 150 -150 -150 A -47 -52 204 150 837 2 2 10 f 150 0 -24 150 A -47 52 204 -150 -837 2 2 10 f 150 0 -24 -150 A -360 0 258 354 -354 3 2 10 N -150 150 -150 -150 A -47 -52 204 150 837 3 2 10 f 150 0 -24 150 A -47 52 204 -150 -837 3 2 10 f 150 0 -24 -150 A -360 0 258 354 -354 4 2 10 N -150 150 -150 -150 A -47 -52 204 150 837 4 2 10 f 150 0 -24 150 A -47 52 204 -150 -837 4 2 10 f 150 0 -24 -150 S -200 300 200 -300 5 1 10 f P 4 1 1 10 0 150 -150 150 -150 -150 0 -150 f P 4 2 1 10 0 150 -150 150 -150 -150 0 -150 f P 4 3 1 10 0 150 -150 150 -150 -150 0 -150 f P 4 4 1 10 0 150 -150 150 -150 -150 0 -150 f P 2 1 2 10 -150 -150 -25 -150 f P 2 1 2 10 -150 150 -25 150 f P 12 1 2 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f P 2 2 2 10 -150 -150 -25 -150 f P 2 2 2 10 -150 150 -25 150 f P 12 2 2 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f P 2 3 2 10 -150 -150 -25 -150 f P 2 3 2 10 -150 150 -25 150 f P 12 3 2 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f P 2 4 2 10 -150 -150 -25 -150 f P 2 4 2 10 -150 150 -25 150 f P 12 4 2 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f X VDD 14 0 500 200 D 50 50 5 0 W X VSS 7 0 -500 200 U 50 50 5 0 W X ~ 1 -300 100 150 R 50 50 1 1 I X ~ 2 -300 -100 150 R 50 50 1 1 I X ~ 3 300 0 150 L 50 50 1 1 O X ~ 4 300 0 150 L 50 50 2 1 O X ~ 5 -300 100 150 R 50 50 2 1 I X ~ 6 -300 -100 150 R 50 50 2 1 I X ~ 10 300 0 150 L 50 50 3 1 O X ~ 8 -300 100 150 R 50 50 3 1 I X ~ 9 -300 -100 150 R 50 50 3 1 I X ~ 11 300 0 150 L 50 50 4 1 O X ~ 12 -300 100 150 R 50 50 4 1 I X ~ 13 -300 -100 150 R 50 50 4 1 I X ~ 1 -300 100 170 R 50 50 1 2 I I X ~ 2 -300 -100 170 R 50 50 1 2 I I X ~ 3 300 0 150 L 50 50 1 2 O I X ~ 4 300 0 150 L 50 50 2 2 O I X ~ 5 -300 100 170 R 50 50 2 2 I I X ~ 6 -300 -100 170 R 50 50 2 2 I I X ~ 10 300 0 150 L 50 50 3 2 O I X ~ 8 -300 100 170 R 50 50 3 2 I I X ~ 9 -300 -100 170 R 50 50 3 2 I I X ~ 11 300 0 150 L 50 50 4 2 O I X ~ 12 -300 100 170 R 50 50 4 2 I I X ~ 13 -300 -100 170 R 50 50 4 2 I I ENDDRAW ENDDEF # # 4098 # DEF 4098 U 0 20 Y Y 3 F N F0 "U" -200 450 50 H V C CNN F1 "4098" -200 -450 50 H V C CNN F2 "" -200 450 50 H I C CNN F3 "" -200 450 50 H I C CNN $FPLIST DIP*W7.62mm* SOIC*3.9x9.9mm*P1.27mm* TSSOP*4.4x5mm*P0.65mm* $ENDFPLIST DRAW S -300 400 300 -400 1 1 0 f S -300 400 300 -400 2 1 0 f S -200 300 200 -300 3 1 0 f X Cx1 1 -400 300 100 R 50 50 1 1 I X Rx1_Cx1 2 -400 200 100 R 50 50 1 1 I X ~Reset1 3 -400 0 100 R 50 50 1 1 I X +TR1 4 -400 -200 100 R 50 50 1 1 I X -TR1 5 -400 -300 100 R 50 50 1 1 I X Q1 6 400 100 100 L 50 50 1 1 O X ~Q1 7 400 -100 100 L 50 50 1 1 O X Q2 10 400 100 100 L 50 50 2 1 O X -TR2 11 -400 -300 100 R 50 50 2 1 I X +TR2 12 -400 -200 100 R 50 50 2 1 I X ~Reset2 13 -400 0 100 R 50 50 2 1 I X Rx2_Cx2 14 -400 200 100 R 50 50 2 1 I X Cx2 15 -400 300 100 R 50 50 2 1 I X ~Q2 9 400 -100 100 L 50 50 2 1 O X VDD 16 0 400 100 D 50 50 3 1 W X VSS 8 0 -400 100 U 50 50 3 1 W ENDDRAW ENDDEF # # 4504 # DEF 4504 U 0 20 Y Y 1 F N F0 "U" -300 850 50 H V C CNN F1 "4504" 250 850 50 H V C CNN F2 "" 0 -1300 50 H I C CNN F3 "" -650 -350 50 H I C CNN $FPLIST DIP*W7.62mm* SOIC*3.9x9.9mm*P1.27mm* TSSOP*4.4x5mm*P0.65mm* $ENDFPLIST DRAW S -350 800 350 -800 1 1 10 f P 2 0 1 0 -140 -500 -40 -500 N P 2 0 1 0 -140 -300 -40 -300 N P 2 0 1 0 -140 -100 -40 -100 N P 2 0 1 0 -140 100 -40 100 N P 2 0 1 0 -140 300 -40 300 N P 2 0 1 0 -140 500 -40 500 N P 2 0 1 0 30 -500 130 -500 N P 2 0 1 0 30 -300 130 -300 N P 2 0 1 0 30 -100 130 -100 N P 2 0 1 0 30 100 130 100 N P 2 0 1 0 30 300 130 300 N P 2 0 1 0 30 500 130 500 N P 4 1 1 0 30 -500 -40 -540 -40 -460 30 -500 N P 4 1 1 0 30 -300 -40 -340 -40 -260 30 -300 N P 4 1 1 0 30 -100 -40 -140 -40 -60 30 -100 N P 4 1 1 0 30 100 -40 60 -40 140 30 100 N P 4 1 1 0 30 300 -40 260 -40 340 30 300 N P 4 1 1 0 30 500 -40 460 -40 540 30 500 N X VCC 1 -100 900 100 D 50 50 1 1 W X Dout 10 450 -100 100 L 50 50 1 1 O X Ein 11 -450 -300 100 R 50 50 1 1 I X Eout 12 450 -300 100 L 50 50 1 1 O X Select 13 -450 -700 100 R 50 50 1 1 I X Fin 14 -450 -500 100 R 50 50 1 1 I X Fout 15 450 -500 100 L 50 50 1 1 O X VDD 16 100 900 100 D 50 50 1 1 W X Aout 2 450 500 100 L 50 50 1 1 O X Ain 3 -450 500 100 R 50 50 1 1 I X Bout 4 450 300 100 L 50 50 1 1 O X Bin 5 -450 300 100 R 50 50 1 1 I X Cout 6 450 100 100 L 50 50 1 1 O X Cin 7 -450 100 100 R 50 50 1 1 I X VSS 8 0 -900 100 U 50 50 1 1 W X Din 9 -450 -100 100 R 50 50 1 1 I ENDDRAW ENDDEF # # 4510 # DEF 4510 U 0 40 Y Y 1 L N F0 "U" -300 550 50 H V C CNN F1 "4510" -300 -650 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP?16* $ENDFPLIST DRAW S -300 500 300 -600 1 1 10 f X PE 1 -500 -400 200 R 50 50 1 0 I X U/D 10 -500 -200 200 R 50 50 1 0 I X Q2 11 500 300 200 L 50 50 1 0 O X A2 12 -500 300 200 R 50 50 1 0 I X A3 13 -500 200 200 R 50 50 1 0 I X Q3 14 500 200 200 L 50 50 1 0 O X CLK 15 -500 -300 200 R 50 50 1 0 I C X VDD 16 0 700 200 D 50 50 1 0 W X Q4 2 500 100 200 L 50 50 1 0 O X A4 3 -500 100 200 R 50 50 1 0 I X A1 4 -500 400 200 R 50 50 1 0 I X CI 5 -500 -100 200 R 50 50 1 0 I I X Q1 6 500 400 200 L 50 50 1 0 O X CO 7 500 -100 200 L 50 50 1 0 O I X VSS 8 0 -800 200 U 50 50 1 0 W X RST 9 -500 -500 200 R 50 50 1 0 I ENDDRAW ENDDEF # # 4518 # DEF 4518 U 0 40 Y Y 3 L N F0 "U" -300 350 50 H V C CNN F1 "4518" -300 -350 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP?16* $ENDFPLIST DRAW S -300 200 300 -300 1 1 10 f S -300 200 300 -300 2 1 10 f S -200 300 200 -300 3 1 10 f X CK 1 -500 0 200 R 50 50 1 0 I C X Enable 2 -500 -200 200 R 50 50 1 0 I X Q1 3 500 100 200 L 50 50 1 0 O X Q2 4 500 0 200 L 50 50 1 0 O X Q3 5 500 -100 200 L 50 50 1 0 O X Q4 6 500 -200 200 L 50 50 1 0 O X Reset 7 -500 -100 200 R 50 50 1 0 I X Enable 10 -500 -200 200 R 50 50 2 0 I X Q1 11 500 100 200 L 50 50 2 0 O X Q2 12 500 0 200 L 50 50 2 0 O X Q3 13 500 -100 200 L 50 50 2 0 O X Q4 14 500 -200 200 L 50 50 2 0 O X Reset 15 -500 -100 200 R 50 50 2 0 I X CK 9 -500 0 200 R 50 50 2 0 I C X VDD 16 0 500 200 D 50 50 3 0 W X VSS 8 0 -500 200 U 50 50 3 0 W ENDDRAW ENDDEF # # 4520 # DEF 4520 U 0 40 Y Y 3 L N F0 "U" -300 350 50 H V C CNN F1 "4520" -300 -350 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP?16* $ENDFPLIST DRAW S -300 200 300 -300 1 1 10 f S -300 200 300 -300 2 1 10 f S -200 300 200 -300 3 1 10 f X CK 1 -500 0 200 R 50 50 1 0 I C X Enable 2 -500 -200 200 R 50 50 1 0 I X Q1 3 500 100 200 L 50 50 1 0 O X Q2 4 500 0 200 L 50 50 1 0 O X Q3 5 500 -100 200 L 50 50 1 0 O X Q4 6 500 -200 200 L 50 50 1 0 O X Reset 7 -500 -100 200 R 50 50 1 0 I X Enable 10 -500 -200 200 R 50 50 2 0 I X Q1 11 500 100 200 L 50 50 2 0 O X Q2 12 500 0 200 L 50 50 2 0 O X Q3 13 500 -100 200 L 50 50 2 0 O X Q4 14 500 -200 200 L 50 50 2 0 O X Reset 15 -500 -100 200 R 50 50 2 0 I X CK 9 -500 0 200 R 50 50 2 0 I C X VDD 16 0 500 200 D 50 50 3 0 W X VSS 8 0 -500 200 U 50 50 3 0 W ENDDRAW ENDDEF # # 4538 # DEF 4538 U 0 40 Y Y 3 L N F0 "U" -300 350 50 H V C CNN F1 "4538" -300 -450 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS 4528 14528 14538 $FPLIST DIP?16* $ENDFPLIST DRAW S -300 300 300 -400 1 1 10 f S -300 300 300 -400 2 1 10 f S -200 300 200 -300 3 1 10 f X VSS 1 0 -600 200 U 50 50 1 0 W X RxCx 2 -500 200 200 R 50 50 1 0 I X R 3 -500 -300 200 R 50 50 1 0 I I X Clk+ 4 -500 0 200 R 50 50 1 0 I C X Clk- 5 -500 -100 200 R 50 50 1 0 I IC X Q 6 500 100 200 L 50 50 1 0 O X ~Q 7 500 -200 200 L 50 50 1 0 O X Q 10 500 100 200 L 50 50 2 0 O X Clk- 11 -500 -100 200 R 50 50 2 0 I IC X Clk+ 12 -500 0 200 R 50 50 2 0 I C X R 13 -500 -300 200 R 50 50 2 0 I I X RxCx 14 -500 200 200 R 50 50 2 0 I X VSS 15 0 -600 200 U 50 50 2 0 W X ~Q 9 500 -200 200 L 50 50 2 0 O X VDD 16 0 500 200 D 50 50 3 0 W X VSS 8 0 -500 200 U 50 50 3 0 W ENDDRAW ENDDEF # # 4543 # DEF 4543 U 0 40 Y Y 1 L N F0 "U" -300 450 50 H V C CNN F1 "4543" -300 -450 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP*W7.62mm* SOIC*3.9x9.9mm*P1.27mm* TSSOP*4.4x5mm*P0.65mm* $ENDFPLIST DRAW S -300 400 300 -400 1 1 10 f X ~LE 1 -500 -100 200 R 50 50 1 0 I X Qb 10 500 200 200 L 50 50 1 0 O X Qc 11 500 100 200 L 50 50 1 0 O X Qd 12 500 0 200 L 50 50 1 0 O X Qe 13 500 -100 200 L 50 50 1 0 O X Qg 14 500 -300 200 L 50 50 1 0 O X Qf 15 500 -200 200 L 50 50 1 0 O X VDD 16 0 600 200 D 50 50 1 0 W X D2 2 -500 100 200 R 50 50 1 0 I X D1 3 -500 200 200 R 50 50 1 0 I X D3 4 -500 0 200 R 50 50 1 0 I X D0 5 -500 300 200 R 50 50 1 0 I X PH 6 -500 -300 200 R 50 50 1 0 I X BL 7 -500 -200 200 R 50 50 1 0 I X VSS 8 0 -600 200 U 50 50 1 0 W X Qa 9 500 300 200 L 50 50 1 0 O ENDDRAW ENDDEF # # HEF4093B # DEF HEF4093B U 0 40 Y Y 5 L N F0 "U" 0 50 50 H V C CNN F1 "HEF4093B" 0 -50 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST SOIC*3.9x8.7mm*P1.27mm* $ENDFPLIST DRAW A 0 0 150 -899 899 1 1 10 f 0 -150 0 150 A 0 0 150 -899 899 2 1 10 f 0 -150 0 150 A 0 0 150 -899 899 3 1 10 f 0 -150 0 150 A 0 0 150 -899 899 4 1 10 f 0 -150 0 150 A -360 0 258 354 -354 1 2 10 N -150 150 -150 -150 A -47 -52 204 150 837 1 2 10 f 150 0 -24 150 A -47 52 204 -150 -837 1 2 10 f 150 0 -24 -150 A -360 0 258 354 -354 2 2 10 N -150 150 -150 -150 A -47 -52 204 150 837 2 2 10 f 150 0 -24 150 A -47 52 204 -150 -837 2 2 10 f 150 0 -24 -150 A -360 0 258 354 -354 3 2 10 N -150 150 -150 -150 A -47 -52 204 150 837 3 2 10 f 150 0 -24 150 A -47 52 204 -150 -837 3 2 10 f 150 0 -24 -150 A -360 0 258 354 -354 4 2 10 N -150 150 -150 -150 A -47 -52 204 150 837 4 2 10 f 150 0 -24 150 A -47 52 204 -150 -837 4 2 10 f 150 0 -24 -150 S -200 300 200 -300 5 1 10 f P 3 1 0 0 -25 -50 -25 50 25 50 N P 3 1 0 0 -25 -50 -25 50 25 50 N P 4 1 0 0 -50 -50 25 -50 25 50 50 50 N P 4 1 0 0 -50 -50 25 -50 25 50 50 50 N P 3 2 0 0 -25 -50 -25 50 25 50 N P 3 2 0 0 -25 -50 -25 50 25 50 N P 4 2 0 0 -50 -50 25 -50 25 50 50 50 N P 4 2 0 0 -50 -50 25 -50 25 50 50 50 N P 3 3 0 0 -25 -50 -25 50 25 50 N P 3 3 0 0 -25 -50 -25 50 25 50 N P 4 3 0 0 -50 -50 25 -50 25 50 50 50 N P 4 3 0 0 -50 -50 25 -50 25 50 50 50 N P 3 4 0 0 -25 -50 -25 50 25 50 N P 3 4 0 0 -25 -50 -25 50 25 50 N P 4 4 0 0 -50 -50 25 -50 25 50 50 50 N P 4 4 0 0 -50 -50 25 -50 25 50 50 50 N P 4 1 1 10 0 150 -150 150 -150 -150 0 -150 f P 4 2 1 10 0 150 -150 150 -150 -150 0 -150 f P 4 3 1 10 0 150 -150 150 -150 -150 0 -150 f P 4 4 1 10 0 150 -150 150 -150 -150 0 -150 f P 2 1 2 10 -150 -150 -25 -150 f P 2 1 2 10 -150 150 -25 150 f P 12 1 2 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f P 2 2 2 10 -150 -150 -25 -150 f P 2 2 2 10 -150 150 -25 150 f P 12 2 2 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f P 2 3 2 10 -150 -150 -25 -150 f P 2 3 2 10 -150 150 -25 150 f P 12 3 2 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f P 2 4 2 10 -150 -150 -25 -150 f P 2 4 2 10 -150 150 -25 150 f P 12 4 2 -1000 -25 150 -150 150 -150 150 -140 134 -119 89 -106 41 -103 -10 -109 -59 -125 -107 -150 -150 -150 -150 -25 -150 f X VCC 14 0 500 200 D 50 50 5 0 W X GND 7 0 -500 200 U 50 50 5 0 W X ~ 1 -300 100 150 R 50 50 1 1 I X ~ 2 -300 -100 150 R 50 50 1 1 I X ~ 3 300 0 150 L 50 50 1 1 O I X ~ 4 300 0 150 L 50 50 2 1 O I X ~ 5 -300 100 150 R 50 50 2 1 I X ~ 6 -300 -100 150 R 50 50 2 1 I X ~ 10 300 0 150 L 50 50 3 1 O I X ~ 8 -300 100 150 R 50 50 3 1 I X ~ 9 -300 -100 150 R 50 50 3 1 I X ~ 11 300 0 150 L 50 50 4 1 O I X ~ 12 -300 100 150 R 50 50 4 1 I X ~ 13 -300 -100 150 R 50 50 4 1 I X ~ 1 -300 100 170 R 50 50 1 2 I I X ~ 2 -300 -100 170 R 50 50 1 2 I I X ~ 3 300 0 150 L 50 50 1 2 O X ~ 4 300 0 150 L 50 50 2 2 O X ~ 5 -300 100 170 R 50 50 2 2 I I X ~ 6 -300 -100 170 R 50 50 2 2 I I X ~ 10 300 0 150 L 50 50 3 2 O X ~ 8 -300 100 170 R 50 50 3 2 I I X ~ 9 -300 -100 170 R 50 50 3 2 I I X ~ 11 300 0 150 L 50 50 4 2 O X ~ 12 -300 100 170 R 50 50 4 2 I I X ~ 13 -300 -100 170 R 50 50 4 2 I I ENDDRAW ENDDEF # #End Library ================================================ FILE: esim-cloud-backend/kicad-symbols/additional/Analog.dcm ================================================ EESchema-DOCLIB Version 2.0 # $CMP AD5593R D 8-channel 12bits configurable ADC/DAC/GPIO Internal Reference, I2C interface Integrated temperature sensor,Single Supply, TSSOP-16 K 8channel 12bit ADC DAC GPIO I2C Temperature F https://www.analog.com/media/en/technical-documentation/data-sheets/AD5593R.pdf $ENDCMP # $CMP AD630ARZ D High precision Balanced Modulator/Demodulator, 2 MHz, SOIC-20W K modulator demodulator F https://www.analog.com/media/en/technical-documentation/data-sheets/ad630.pdf $ENDCMP # $CMP AD654JN D Low Cost Monolithic Voltage-to-Frequency Converter, DIP-8 K v-to-f v-f F https://www.analog.com/media/en/technical-documentation/data-sheets/AD654.pdf $ENDCMP # $CMP AD654JR D Low Cost Monolithic Voltage-to-Frequency Converter, SOIC-8 K v-to-f v-f F https://www.analog.com/media/en/technical-documentation/data-sheets/AD654.pdf $ENDCMP # $CMP LF398H D Sample And Hold Unity Gain Follower, TO-99-8 K sample hold buffer unity gain F http://www.ti.com/lit/ds/symlink/lf398-n.pdf $ENDCMP # $CMP LF398_DIP8 D Sample And Hold Unity Gain Follower, DIP-8 K sample hold buffer unity gain F http://www.ti.com/lit/ds/symlink/lf398-n.pdf $ENDCMP # $CMP LF398_SOIC14 D Sample And Hold Unity Gain Follower, SOIC-14 K sample hold buffer unity gain F http://www.ti.com/lit/ds/symlink/lf398-n.pdf $ENDCMP # $CMP LF398_SOIC8 D Sample And Hold Unity Gain Follower, SOIC-8 K sample hold buffer unity gain F https://www.analog.com/media/en/technical-documentation/data-sheets/lt0398s8.pdf $ENDCMP # $CMP MLX90314xDF D Programmable Sensor Interface (Signal Conditioner), SOIC-16W K sensor signal conditioning F https://www.melexis.com/-/media/files/documents/datasheets/mlx90314-datasheet-melexis.pdf $ENDCMP # $CMP MLX90320xFR D Programmable Automotive Sensor Interface (Signal Conditioner), SSOP-14 K sensor signal conditioning F https://www.melexis.com/-/media/files/documents/datasheets/mlx90320-datasheet-melexis.pdf $ENDCMP # $CMP MPY634KP D Wide Bandwidth Precision Analog Multiplier, DIP-14 K analog multiplier F http://www.ti.com/lit/ds/symlink/mpy634.pdf $ENDCMP # $CMP MPY634KU D Wide Bandwidth Precision Analog Multiplier, SOIC-16W K analog multiplier F http://www.ti.com/lit/ds/symlink/mpy634.pdf $ENDCMP # $CMP PGA112 D Zero-Drift Programmable Gain Amplifier With Mux, x1/x2/x4/x8/x16/x32/x64/x128 gains, VSSOP-10 K PGA SPI F http://www.ti.com/lit/ds/sbos424c/sbos424c.pdf $ENDCMP # $CMP PGA113 D Zero-Drift Programmable Gain Amplifier With Mux, x1/x2/x5/x10/x20/x50/x100/x200 gains, VSSOP-10 K PGA SPI F http://www.ti.com/lit/ds/sbos424c/sbos424c.pdf $ENDCMP # #End Doc Library ================================================ FILE: esim-cloud-backend/kicad-symbols/additional/Analog.lib ================================================ EESchema-LIBRARY Version 2.4 #encoding utf-8 # # AD5593R # DEF AD5593R U 0 40 Y Y 1 F N F0 "U" -350 600 50 H V L CNN F1 "AD5593R" 150 600 50 H V L CNN F2 "Package_SO:TSSOP-16_4.4x5mm_P0.65mm" 1000 -500 50 H I C CIN F3 "" 0 -200 50 H I C CNN $FPLIST TSSOP-16* $ENDFPLIST DRAW S -350 -450 350 550 0 1 10 f X ~RESET 1 -500 -100 150 R 50 50 1 1 I X IO4 10 500 0 150 L 50 50 1 1 B X IO5 11 500 -100 150 L 50 50 1 1 B X IO6 12 500 -200 150 L 50 50 1 1 B X IO7 13 500 -300 150 L 50 50 1 1 B X GND 14 0 -600 150 U 50 50 1 1 W X SDA 15 -500 400 150 R 50 50 1 1 B X SCL 16 -500 300 150 R 50 50 1 1 I X A0 2 -500 -300 150 R 50 50 1 1 I X VDD 3 -100 700 150 D 50 50 1 1 W X IO0 4 500 400 150 L 50 50 1 1 B X IO1 5 500 300 150 L 50 50 1 1 B X IO2 6 500 200 150 L 50 50 1 1 B X IO3 7 500 100 150 L 50 50 1 1 B X VRef 8 -500 100 150 R 50 50 1 1 P X VLogic 9 100 700 150 D 50 50 1 1 W ENDDRAW ENDDEF # # AD630ARZ # DEF AD630ARZ U 0 20 Y Y 1 F N F0 "U" -350 750 50 H V C CNN F1 "AD630ARZ" 250 750 50 H V C CNN F2 "Package_SO:SOIC-20W_7.5x12.8mm_P1.27mm" 0 -1050 50 H I C CNN F3 "" -400 1100 50 H I C CNN $FPLIST SOIC*7.5x12.8mm*P1.27mm* $ENDFPLIST DRAW C -250 100 5 0 1 0 N C -250 500 5 0 1 0 N C -50 210 10 0 1 0 N C -50 290 10 0 1 0 N C 10 250 10 0 1 0 N C 50 250 5 0 1 0 N C 100 250 5 0 1 0 N C 300 -100 5 0 1 0 N C 300 0 5 0 1 0 N C 300 200 5 0 1 0 N C 325 200 5 0 1 0 N T 0 -175 -295 35 0 0 0 + Normal 0 C C T 0 -175 100 35 0 0 0 + Normal 0 C C T 0 -175 500 35 0 0 0 + Normal 0 C C T 0 175 155 35 0 0 0 + Normal 0 C C T 0 -175 -200 35 0 0 0 - Normal 0 C C T 0 -175 0 35 0 0 0 - Normal 0 C C T 0 -175 400 35 0 0 0 - Normal 0 C C T 0 175 255 35 0 0 0 - Normal 0 C C T 900 300 100 30 0 0 0 10k Normal 0 C C T 0 375 0 30 0 0 0 10k Normal 0 C C T 0 -325 200 30 0 0 0 2k5 Normal 0 C C T 0 -325 600 30 0 0 0 2k5 Normal 0 C C T 0 375 -100 30 0 0 0 5k Normal 0 C C T 0 -145 450 50 0 0 0 A Normal 0 C C T 0 -145 50 50 0 0 0 B Normal 0 C C T 0 440 -270 30 0 0 0 "B/~A" Normal 0 C C T 0 -430 525 30 0 0 0 CHA+ Normal 0 C C T 0 -430 430 30 0 0 0 CHA- Normal 0 C C T 0 -425 125 30 0 0 0 CHB+ Normal 0 C C T 0 -420 30 30 0 0 0 CHB- Normal 0 C C T 0 420 530 30 0 0 0 COMP Normal 0 C C T 0 460 -70 30 0 0 0 RA Normal 0 C C T 0 460 30 30 0 0 0 RB Normal 0 C C T 0 460 -170 30 0 0 0 RF Normal 0 C C T 0 -440 625 30 0 0 0 RinA Normal 0 C C T 0 -440 230 30 0 0 0 RinB Normal 0 C C T 0 -415 -275 30 0 0 0 SEL_A Normal 0 C C T 0 -415 -175 30 0 0 0 SEL_B Normal 0 C C T 0 430 230 30 0 0 0 Vout Normal 0 C C S -500 700 500 -700 0 1 10 f P 2 0 1 0 -500 -300 -200 -300 N P 2 0 1 0 -500 -200 -200 -200 N P 2 0 1 0 -500 0 -200 0 N P 2 0 1 0 -500 200 -375 200 N P 2 0 1 0 -500 400 -200 400 N P 2 0 1 0 -500 600 -375 600 N P 2 0 1 0 -250 500 -200 500 N P 2 0 1 0 -75 -250 0 -250 N P 2 0 1 0 -50 350 -50 300 N P 2 0 1 0 0 -250 100 -250 N P 2 0 1 0 0 -225 0 -250 N P 2 0 1 0 0 -175 0 -200 N P 2 0 1 0 0 -125 0 -150 N P 2 0 1 0 0 -75 0 -100 N P 2 0 1 0 0 -25 0 -50 N P 2 0 1 0 0 25 0 0 N P 2 0 1 0 0 75 0 50 N P 2 0 1 0 0 125 0 100 N P 2 0 1 0 0 175 0 150 N P 2 0 1 0 0 225 0 200 N P 2 0 1 0 0 250 -50 260 N P 2 0 1 0 50 250 20 250 N P 2 0 1 0 50 250 50 500 N P 2 0 1 0 50 250 150 250 N P 2 0 1 0 75 100 125 100 N P 2 0 1 0 100 -260 150 -300 N P 2 0 1 0 100 -240 150 -200 N P 2 0 1 0 100 -200 100 -300 N P 2 0 1 0 150 -350 175 -350 N P 2 0 1 0 150 -200 200 -200 N P 2 0 1 0 150 300 150 100 N P 2 0 1 0 200 375 200 325 N P 2 0 1 0 200 475 200 500 N P 2 0 1 0 225 375 225 325 N P 2 0 1 0 225 500 500 500 N P 2 0 1 0 225 525 225 475 N P 2 0 1 0 300 50 300 -100 N P 2 0 1 0 300 200 500 200 N P 2 0 1 0 325 -100 300 -100 N P 2 0 1 0 325 0 300 0 N P 2 0 1 0 425 -100 500 -100 N P 2 0 1 0 425 0 500 0 N P 3 0 1 0 -250 100 -225 100 -200 100 N P 3 0 1 0 -75 50 -50 50 -50 200 N P 3 0 1 0 -75 450 -50 450 -50 350 N P 3 0 1 0 50 500 200 500 200 525 N P 3 0 1 0 100 250 100 350 200 350 N P 3 0 1 0 145 -275 150 -300 125 -295 N P 3 0 1 0 150 -300 150 -350 125 -350 N P 3 0 1 0 150 150 100 150 100 100 N P 3 0 1 0 150 300 275 200 150 100 N P 3 0 1 0 225 350 325 350 325 200 N P 3 0 1 0 300 -100 300 -200 500 -200 N P 3 0 1 0 300 150 300 200 275 200 N P 4 0 1 0 -275 200 -250 200 -250 100 -500 100 N P 4 0 1 0 -275 600 -250 600 -250 500 -500 500 N P 4 0 1 0 -200 -150 -200 -350 -75 -250 -200 -150 N P 4 0 1 0 -200 150 -200 -50 -75 50 -200 150 N P 4 0 1 0 -200 550 -200 350 -75 450 -200 550 N P 4 0 1 0 200 -200 225 -200 225 -300 500 -300 N P 5 0 1 0 -375 225 -375 175 -275 175 -275 225 -375 225 N P 5 0 1 0 -375 625 -375 575 -275 575 -275 625 -375 625 N P 5 0 1 0 275 150 325 150 325 50 275 50 275 150 N P 5 0 1 0 325 -75 325 -125 425 -125 425 -75 325 -75 N P 5 0 1 0 325 25 325 -25 425 -25 425 25 325 25 N X RinA 1 -600 600 100 R 50 0 1 1 I X SEL_A 10 -600 -300 100 R 50 0 1 1 I X VS+ 11 0 800 100 D 50 50 1 1 W X COMP 12 600 500 100 L 50 0 1 1 P X Vout 13 600 200 100 L 50 0 1 1 O X RB 14 600 0 100 L 50 0 1 1 O X RF 15 600 -200 100 L 50 0 1 1 O X RA 16 600 -100 100 L 50 0 1 1 O X RinB 17 -600 200 100 R 50 0 1 1 I X CHB+ 18 -600 100 100 R 50 0 1 1 I X CHB- 19 -600 0 100 R 50 0 1 1 I X CHA+ 2 -600 500 100 R 50 0 1 1 I X CHA- 20 -600 400 100 R 50 0 1 1 I X DIFF_OFF_ADJ1 3 -600 -500 100 R 50 30 1 1 P X DIFF_OFF_ADJ2 4 -600 -600 100 R 50 30 1 1 P X CM_OFF_ADJ1 5 600 -500 100 L 50 30 1 1 P X CM_OFF_ADJ2 6 600 -600 100 L 50 30 1 1 P X B/~A 7 600 -300 100 L 50 0 1 1 C X VS- 8 0 -800 100 U 50 50 1 1 W X SEL_B 9 -600 -200 100 R 50 0 1 1 I ENDDRAW ENDDEF # # AD654JN # DEF AD654JN U 0 20 Y Y 1 F N F0 "U" -250 350 50 H V R CNN F1 "AD654JN" 50 350 50 H V L CNN F2 "Package_DIP:DIP-8_W7.62mm" 0 0 50 H I C CNN F3 "" -250 700 50 H I C CNN $FPLIST DIP*W7.62mm* $ENDFPLIST DRAW S -300 300 300 -300 0 1 10 f X FOUT 1 400 -200 100 L 50 50 1 1 C X COM 2 0 -400 100 U 50 50 1 1 W X RT 3 -400 -100 100 R 50 50 1 1 I X +VIN 4 -400 100 100 R 50 50 1 1 I X -VS 5 -100 -400 100 U 50 50 1 1 W X CT1 6 400 200 100 L 50 50 1 1 P X CT2 7 400 -100 100 L 50 50 1 1 P X +VS 8 -100 400 100 D 50 50 1 1 W ENDDRAW ENDDEF # # AD654JR # DEF AD654JR U 0 20 Y Y 1 F N F0 "U" -250 350 50 H V R CNN F1 "AD654JR" 50 350 50 H V L CNN F2 "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" 0 0 50 H I C CNN F3 "" -250 700 50 H I C CNN $FPLIST SOIC*3.9x4.9mm*P1.27mm* $ENDFPLIST DRAW S -300 300 300 -300 0 1 10 f X FOUT 1 400 -200 100 L 50 50 1 1 C X COM 2 0 -400 100 U 50 50 1 1 W X RT 3 -400 -100 100 R 50 50 1 1 I X +VIN 4 -400 100 100 R 50 50 1 1 I X -VS 5 -100 -400 100 U 50 50 1 1 W X CT1 6 400 200 100 L 50 50 1 1 P X CT2 7 400 -100 100 L 50 50 1 1 P X +VS 8 -100 400 100 D 50 50 1 1 W ENDDRAW ENDDEF # # LF398H # DEF LF398H U 0 5 Y Y 1 F N F0 "U" 200 150 50 H V L CNN F1 "LF398H" 200 -100 50 H V L CNN F2 "Package_TO_SOT_THT:TO-99-8" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST *TO*99* $ENDFPLIST DRAW P 2 0 1 0 0 -100 100 -200 N P 2 0 1 0 100 200 0 100 N P 4 0 1 10 -200 200 200 0 -200 -200 -200 200 f X V+ 1 -100 300 150 D 50 50 1 1 P X Adj 2 100 300 100 D 50 50 1 1 P X I 3 -300 100 100 R 50 50 1 1 I X V- 4 -100 -300 150 U 50 50 1 1 P X ~ 5 300 0 100 L 50 50 1 1 O X Ch 6 100 -300 100 U 50 50 1 1 P X T 7 -300 -100 100 R 50 50 1 1 P X Hold 8 -300 0 100 R 50 50 1 1 I ENDDRAW ENDDEF # # LF398_DIP8 # DEF LF398_DIP8 U 0 5 Y Y 1 F N F0 "U" 200 150 50 H V L CNN F1 "LF398_DIP8" 200 -100 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS LF398_SOIC8 $FPLIST *SOIC*3.9x4.9mm*P1.27mm* *DIP*W7.62mm* $ENDFPLIST DRAW P 2 0 1 0 0 -100 100 -200 N P 2 0 1 0 100 200 0 100 N P 4 0 1 10 -200 200 200 0 -200 -200 -200 200 f X V+ 1 -100 300 150 D 50 50 1 1 P X Adj 2 100 300 100 D 50 50 1 1 P X I 3 -300 100 100 R 50 50 1 1 I X V- 4 -100 -300 150 U 50 50 1 1 P X ~ 5 300 0 100 L 50 50 1 1 O X Ch 6 100 -300 100 U 50 50 1 1 P X T 7 -300 -100 100 R 50 50 1 1 P X Hold 8 -300 0 100 R 50 50 1 1 I ENDDRAW ENDDEF # # LF398_SOIC14 # DEF LF398_SOIC14 U 0 5 Y Y 1 F N F0 "U" 200 150 50 H V L CNN F1 "LF398_SOIC14" 200 -100 50 H V L CNN F2 "Package_SO:SOIC-14_3.9x8.7mm_P1.27mm" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST *SOIC*3.9x8.7mm*P1.27mm* $ENDFPLIST DRAW P 2 0 1 0 0 -100 100 -200 N P 2 0 1 0 100 200 0 100 N P 4 0 1 10 -200 200 200 0 -200 -200 -200 200 f X I 1 -300 100 100 R 50 50 1 1 I X T 10 -300 -100 100 R 50 50 1 1 P X Hold 11 -300 0 100 R 50 50 1 1 I X V+ 12 -100 300 150 D 50 50 1 1 P X NC 13 0 -100 100 U 50 50 1 1 N N X Adj 14 100 300 100 D 50 50 1 1 P X NC 2 -200 100 100 D 50 50 1 1 N N X V- 3 -100 -300 150 U 50 50 1 1 P X NC 4 -100 100 100 D 50 50 1 1 N N X NC 5 -200 -100 100 U 50 50 1 1 N N X NC 6 -100 -100 100 U 50 50 1 1 N N X ~ 7 300 0 100 L 50 50 1 1 O X Ch 8 100 -300 100 U 50 50 1 1 P X NC 9 0 100 100 D 50 50 1 1 N N ENDDRAW ENDDEF # # MLX90314xDF # DEF MLX90314xDF U 0 20 Y Y 1 F N F0 "U" -350 550 50 H V R CNN F1 "MLX90314xDF" 600 -550 50 H V R CNN F2 "Package_SO:SOIC-16W_7.5x10.3mm_P1.27mm" -400 800 50 H I C CNN F3 "" -250 700 50 H I C CNN $FPLIST SOIC*7.5x10.3mm*P1.27mm* $ENDFPLIST DRAW S -400 500 400 -500 0 1 10 f X IO1 1 500 300 100 L 50 50 1 1 B X FET 10 0 600 100 D 50 50 1 1 O X VDD1 11 100 600 100 D 50 50 1 1 W X VMO 12 500 0 100 L 50 50 1 1 O X CMO 13 500 -100 100 L 50 50 1 1 O X CMN 14 500 -200 100 L 50 50 1 1 I X GND 15 0 -600 100 U 50 50 1 1 W X COMS 16 500 400 100 L 50 50 1 1 B X IO2 2 500 200 100 L 50 50 1 1 B X TSTB 3 -500 400 100 R 50 50 1 1 I X FLT 4 -500 -400 100 R 50 50 1 1 P X OFC 5 500 -400 100 L 50 50 1 1 O X VBN 6 -500 -100 100 R 50 50 1 1 I X VBP 7 -500 0 100 R 50 50 1 1 I X TMP 8 -500 -200 100 R 50 50 1 1 I X VDD 9 -100 600 100 D 50 50 1 1 W ENDDRAW ENDDEF # # MLX90320xFR # DEF MLX90320xFR U 0 20 Y Y 1 F N F0 "U" -350 550 50 H V R CNN F1 "MLX90320xFR" 600 550 50 H V R CNN F2 "Package_SO:SSOP-14_5.3x6.2mm_P0.65mm" 0 800 50 H I C CNN F3 "" -250 700 50 H I C CNN $FPLIST SSOP*5.3x6.2mm*P0.65mm* $ENDFPLIST DRAW S -400 500 400 -500 0 1 10 f X INM 1 -500 200 100 R 50 50 1 1 I X TESTIN2 10 500 -100 100 L 50 50 1 1 P X FLT 11 500 200 100 L 50 50 1 1 O X OUT 12 500 400 100 L 50 50 1 1 B X TEST2 13 500 -400 100 L 50 50 1 1 P X VDD 14 0 600 100 D 50 50 1 1 W X ANAGND 2 -100 -600 100 U 50 50 1 1 W X INP 3 -500 300 100 R 50 50 1 1 I X SUB 4 100 -600 100 U 50 50 1 1 W X TMP 5 -500 0 100 R 50 50 1 1 P X DIGGND 6 0 -600 100 U 50 50 1 1 W X TEST1 7 500 -300 100 L 50 50 1 1 P X TESTOUT 8 500 -200 100 L 50 50 1 1 P X TESTIN1 9 500 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # MPY634KP # DEF MPY634KP U 0 20 Y Y 1 F N F0 "U" -400 550 50 H V L CNN F1 "MPY634KP" 50 550 50 H V L CNN F2 "Package_DIP:DIP-14_W7.62mm" 0 0 50 H I C CIN F3 "" 50 50 50 H I C CNN $FPLIST DIP*W7.62mm* $ENDFPLIST DRAW T 0 -230 -205 25 0 0 0 + Normal 0 C C T 0 -230 95 25 0 0 0 + Normal 0 C C T 0 -225 395 25 0 0 0 + Normal 0 C C T 0 175 40 25 0 0 0 + Normal 0 C C T 0 -230 -290 25 0 0 0 - Normal 0 C C T 0 -230 10 25 0 0 0 - Normal 0 C C T 0 -225 310 25 0 0 0 - Normal 0 C C T 0 175 -40 25 0 0 0 - Normal 0 C C T 0 220 0 25 0 0 0 A Normal 0 C C T 0 -175 -250 25 0 0 0 V-I Normal 0 C C T 0 -175 50 25 0 0 0 V-I Normal 0 C C T 0 -170 350 25 0 0 0 V-I Normal 0 C C T 900 0 -125 25 0 1 0 0.75 Normal 0 C C T 900 50 -125 25 0 1 0 ATTEN Normal 0 C C T 900 50 150 25 0 1 0 CORE Normal 0 C C T 900 0 150 25 0 1 0 MULTIPLIER Normal 0 C C S -400 500 400 -400 0 1 10 f S -50 -50 100 -200 0 1 0 N S -50 300 100 0 0 1 0 N P 4 0 0 0 -50 -125 -75 -125 -75 -250 -100 -250 N P 4 0 0 0 -50 -125 -75 -125 -75 -250 -100 -250 N P 4 0 0 0 -50 100 -75 100 -75 50 -100 50 N P 4 0 0 0 -50 100 -75 100 -75 50 -100 50 N P 4 0 0 0 -50 200 -75 200 -75 350 -100 350 N P 4 0 0 0 -50 200 -75 200 -75 350 -100 350 N P 4 0 0 0 150 -50 125 -50 125 -125 100 -125 N P 4 0 0 0 150 -50 125 -50 125 -125 100 -125 N P 4 0 0 0 150 50 125 50 125 150 100 150 N P 4 0 0 0 150 50 125 50 125 150 100 150 N P 2 0 1 0 -275 -300 -250 -300 N P 2 0 1 0 -275 -200 -250 -200 N P 2 0 1 0 -275 0 -250 0 N P 2 0 1 0 -275 100 -250 100 N P 2 0 1 0 -270 300 -245 300 N P 2 0 1 0 -270 400 -245 400 N P 4 0 1 0 -250 -175 -250 -325 -100 -250 -250 -175 N P 4 0 1 0 -250 125 -250 -25 -100 50 -250 125 N P 4 0 1 0 -245 425 -245 275 -95 350 -245 425 N P 4 0 1 0 150 75 150 -75 280 0 150 75 N X X1 1 -500 400 100 R 50 50 1 1 I X Z2 10 -500 -300 100 R 50 50 1 1 I X Z1 11 -500 -200 100 R 50 50 1 1 I X VO 12 500 0 100 L 50 50 1 1 O X NC 13 400 100 100 L 50 50 1 1 N N X +VS 14 0 600 100 D 50 50 1 1 W X X2 2 -500 300 100 R 50 50 1 1 I X NC 3 400 400 100 L 50 50 1 1 N N X SF 4 500 -200 100 L 50 50 1 1 P X NC 5 400 300 100 L 50 50 1 1 N N X Y1 6 -500 100 100 R 50 50 1 1 I X Y2 7 -500 0 100 R 50 50 1 1 I X -VS 8 0 -500 100 U 50 50 1 1 W X NC 9 400 200 100 L 50 50 1 1 N N ENDDRAW ENDDEF # # MPY634KU # DEF MPY634KU U 0 20 Y Y 1 F N F0 "U" -400 550 50 H V L CNN F1 "MPY634KU" 50 550 50 H V L CNN F2 "Package_SO:SOIC-16W_7.5x10.3mm_P1.27mm" 0 0 50 H I C CIN F3 "" 0 0 50 H I C CNN $FPLIST SOIC*7.5x10.3mm*P1.27mm* $ENDFPLIST DRAW T 0 -230 -205 25 0 0 0 + Normal 0 C C T 0 -230 95 25 0 0 0 + Normal 0 C C T 0 -225 395 25 0 0 0 + Normal 0 C C T 0 175 40 25 0 0 0 + Normal 0 C C T 0 -230 -290 25 0 0 0 - Normal 0 C C T 0 -230 10 25 0 0 0 - Normal 0 C C T 0 -225 310 25 0 0 0 - Normal 0 C C T 0 175 -40 25 0 0 0 - Normal 0 C C T 0 220 0 25 0 0 0 A Normal 0 C C T 0 -175 -250 25 0 0 0 V-I Normal 0 C C T 0 -175 50 25 0 0 0 V-I Normal 0 C C T 0 -170 350 25 0 0 0 V-I Normal 0 C C T 900 0 -125 25 0 1 0 0.75 Normal 0 C C T 900 50 -125 25 0 1 0 ATTEN Normal 0 C C T 900 50 150 25 0 1 0 CORE Normal 0 C C T 900 0 150 25 0 1 0 MULTIPLIER Normal 0 C C S -400 500 400 -400 0 1 10 f S -50 -50 100 -200 0 1 0 N S -50 300 100 0 0 1 0 N P 4 0 0 0 -50 -125 -75 -125 -75 -250 -100 -250 N P 4 0 0 0 -50 -125 -75 -125 -75 -250 -100 -250 N P 4 0 0 0 -50 100 -75 100 -75 50 -100 50 N P 4 0 0 0 -50 100 -75 100 -75 50 -100 50 N P 4 0 0 0 -50 200 -75 200 -75 350 -100 350 N P 4 0 0 0 -50 200 -75 200 -75 350 -100 350 N P 4 0 0 0 150 -50 125 -50 125 -125 100 -125 N P 4 0 0 0 150 -50 125 -50 125 -125 100 -125 N P 4 0 0 0 150 50 125 50 125 150 100 150 N P 4 0 0 0 150 50 125 50 125 150 100 150 N P 2 0 1 0 -275 -300 -250 -300 N P 2 0 1 0 -275 -200 -250 -200 N P 2 0 1 0 -275 0 -250 0 N P 2 0 1 0 -275 100 -250 100 N P 2 0 1 0 -270 300 -245 300 N P 2 0 1 0 -270 400 -245 400 N P 4 0 1 0 -250 -175 -250 -325 -100 -250 -250 -175 N P 4 0 1 0 -250 125 -250 -25 -100 50 -250 125 N P 4 0 1 0 -245 425 -245 275 -95 350 -245 425 N P 4 0 1 0 150 75 150 -75 280 0 150 75 N X X1 1 -500 400 100 R 50 50 1 1 I X -VS 10 0 -500 100 U 50 50 1 1 W X NC 11 400 -100 100 L 50 50 1 1 N N X Z2 12 -500 -300 100 R 50 50 1 1 I X Z1 13 -500 -200 100 R 50 50 1 1 I X VO 14 500 0 100 L 50 50 1 1 O X NC 15 400 -300 100 L 50 50 1 1 N N X +VS 16 0 600 100 D 50 50 1 1 W X X2 2 -500 300 100 R 50 50 1 1 I X NC 3 400 400 100 L 50 50 1 1 N N X SF 4 500 -200 100 L 50 50 1 1 P X NC 5 400 300 100 L 50 50 1 1 N N X Y1 6 -500 100 100 R 50 50 1 1 I X Y2 7 -500 0 100 R 50 50 1 1 I X NC 8 400 200 100 L 50 50 1 1 N N X NC 9 400 100 100 L 50 50 1 1 N N ENDDRAW ENDDEF # # PGA112 # DEF PGA112 U 0 20 Y Y 1 F N F0 "U" -350 350 50 H V R CNN F1 "PGA112" 300 350 50 H V R CNN F2 "Package_SO:TSSOP-10_3x3mm_P0.5mm" -400 800 50 H I C CNN F3 "" -250 700 50 H I C CNN ALIAS PGA113 $FPLIST TSSOP*3x3mm*P0.5mm* $ENDFPLIST DRAW S -400 300 300 -300 0 1 10 f X AVDD 1 -100 400 100 D 50 50 1 1 W X DVDD 10 0 400 100 D 50 50 1 1 W X CH1 2 -500 -200 100 R 50 50 1 1 I X CH0/VCAL 3 -500 -100 100 R 50 50 1 1 I X VREF 4 -500 200 100 R 50 50 1 1 I X VOUT 5 400 -200 100 L 50 50 1 1 O X GND 6 0 -400 100 U 50 50 1 1 W X SCLK 7 400 200 100 L 50 50 1 1 I X DIO 8 400 100 100 L 50 50 1 1 B X ~CS 9 400 0 100 L 50 50 1 1 I ENDDRAW ENDDEF # #End Library ================================================ FILE: esim-cloud-backend/kicad-symbols/additional/Device.dcm ================================================ EESchema-DOCLIB Version 2.0 # $CMP Amperemeter_AC D AC ammeter K ammeter AC ampere meter F ~ $ENDCMP # $CMP Amperemeter_DC D DC ammeter K ammeter DC ampere meter F ~ $ENDCMP # $CMP Antenna D Antenna K antenna F ~ $ENDCMP # $CMP Antenna_Chip D Ceramic chip antenna with pin for PCB trace K antenna F ~ $ENDCMP # $CMP Antenna_Dipole D Dipole antenna K dipole antenna F ~ $ENDCMP # $CMP Antenna_Loop D Loop antenna K loop antenna F ~ $ENDCMP # $CMP Antenna_Shield D Antenna with extra pin for shielding K antenna F ~ $ENDCMP # $CMP Battery D Multiple-cell battery K batt voltage-source cell F ~ $ENDCMP # $CMP Battery_Cell D Single-cell battery K battery cell F ~ $ENDCMP # $CMP Buzzer D Buzzer, polarized K quartz resonator ceramic F ~ $ENDCMP # $CMP C D Unpolarized capacitor K cap capacitor F ~ $ENDCMP # $CMP CP D Polarized capacitor K cap capacitor F ~ $ENDCMP # $CMP CP1 D Polarized capacitor, US symbol K cap capacitor F ~ $ENDCMP # $CMP CP1_Small D Polarized capacitor, small US symbol K cap capacitor F ~ $ENDCMP # $CMP CP_Small D Polarized capacitor, small symbol K cap capacitor F ~ $ENDCMP # $CMP CTRIM D Trimmable capacitor K trimmer variable capacitor F ~ $ENDCMP # $CMP CTRIM_DIF D Differential variable capacitor with two stators K trimmer capacitor F ~ $ENDCMP # $CMP CTRIM_Small D Trimmable capacitor, small symbol K trimmer variable capacitor F ~ $ENDCMP # $CMP C_Feedthrough D Feedthrough capacitor K EMI filter feedthrough capacitor F ~ $ENDCMP # $CMP C_Small D Unpolarized capacitor, small symbol K capacitor cap F ~ $ENDCMP # $CMP C_Variable D Variable capacitor K trimmer capacitor F ~ $ENDCMP # $CMP CircuitBreaker_1P D Single pole circuit breaker K CB F ~ $ENDCMP # $CMP CircuitBreaker_1P_US D Single pole circuit breaker, US symbol K CB F ~ $ENDCMP # $CMP CircuitBreaker_2P D Double pole circuit breaker K CB 2P F ~ $ENDCMP # $CMP CircuitBreaker_2P_US D Double pole circuit breaker, US symbol K CB 2P F ~ $ENDCMP # $CMP CircuitBreaker_3P D Triple pole circuit breaker K CB 3P F ~ $ENDCMP # $CMP CircuitBreaker_3P_US D Triple pole circuit breaker, US symbol K CB 3P F ~ $ENDCMP # $CMP Crystal D Two pin crystal K quartz ceramic resonator oscillator F ~ $ENDCMP # $CMP Crystal_GND2 D Three pin crystal, GND on pin 2 K quartz ceramic resonator oscillator F ~ $ENDCMP # $CMP Crystal_GND23 D Four pin crystal, GND on pins 2 and 3 K quartz ceramic resonator oscillator F ~ $ENDCMP # $CMP Crystal_GND23_Small D Four pin crystal, GND on pins 2 and 3, small symbol K quartz ceramic resonator oscillator F ~ $ENDCMP # $CMP Crystal_GND24 D Four pin crystal, GND on pins 2 and 4 K quartz ceramic resonator oscillator F ~ $ENDCMP # $CMP Crystal_GND24_Small D Four pin crystal, GND on pins 2 and 4, small symbol K quartz ceramic resonator oscillator F ~ $ENDCMP # $CMP Crystal_GND2_Small D Three pin crystal, GND on pin 2, small symbol K quartz ceramic resonator oscillator F ~ $ENDCMP # $CMP Crystal_GND3 D Three pin crystal, GND on pin 3 K quartz ceramic resonator oscillator F ~ $ENDCMP # $CMP Crystal_GND3_Small D Three pin crystal, GND on pin 3, small symbol K quartz ceramic resonator oscillator F ~ $ENDCMP # $CMP Crystal_Small D Two pin crystal, small symbol K quartz ceramic resonator oscillator F ~ $ENDCMP # $CMP D D Diode K diode F ~ $ENDCMP # $CMP DIAC D Diode for alternating current K AC diode DIAC F ~ $ENDCMP # $CMP DIAC_ALT D Diode for alternating current, filled shape K AC diode DIAC F ~ $ENDCMP # $CMP D_AAK D Diode, anode on pins 1 and 2 K diode F ~ $ENDCMP # $CMP D_ALT D Diode, filled shape K diode F ~ $ENDCMP # $CMP D_Bridge_+-AA D Diode bridge, +ve/-ve/AC/AC K rectifier ACDC F ~ $ENDCMP # $CMP D_Bridge_+A-A D Diode bridge, +ve/AC/-ve/AC K rectifier ACDC F ~ $ENDCMP # $CMP D_Bridge_+AA- D Diode bridge, +ve/AC/AC/-ve K rectifier ACDC F ~ $ENDCMP # $CMP D_Bridge_-A+A D Diode bridge, -ve/AC/+ve/AC K rectifier ACDC F ~ $ENDCMP # $CMP D_Bridge_-AA+ D Diode bridge, -ve/AC/AC/+ve K rectifier ACDC F ~ $ENDCMP # $CMP D_Capacitance D Variable capacitance diode K capacitance diode varicap varactor F ~ $ENDCMP # $CMP D_Capacitance_ALT D Variable capacitance diode, filled shape K capacitance diode varicap varactor F ~ $ENDCMP # $CMP D_KAA D Diode, anode on pins 2 and 3 K diode F ~ $ENDCMP # $CMP D_KAK D Diode, cathode on pins 1 and 3 K diode F ~ $ENDCMP # $CMP D_KKA D Diode, cathode on pins 1 and 2 K diode F ~ $ENDCMP # $CMP D_Photo D Photodiode K photodiode diode opto F ~ $ENDCMP # $CMP D_Photo_ALT D Photodiode, filled shape K photodiode diode opto F ~ $ENDCMP # $CMP D_Radiation D Semiconductor radiation detector K radiation detector diode F ~ $ENDCMP # $CMP D_Radiation_ALT D Semiconductor radiation detector, filled shape K radiation detector diode F ~ $ENDCMP # $CMP D_Schottky D Schottky diode K diode Schottky F ~ $ENDCMP # $CMP D_Schottky_AAK D Schottky diode, anode on pins 1 and 2 K diode Schottky SCHDPAK F ~ $ENDCMP # $CMP D_Schottky_AKA D Schottky diode, anode on pins 1 and 3 K diode Schottky SCHDPAK F ~ $ENDCMP # $CMP D_Schottky_AKK D Schottky diode, cathode on pins 2 and 3 K diode Schottky SCHDPAK F ~ $ENDCMP # $CMP D_Schottky_ALT D Schottky diode, filled shape K diode Schottky F ~ $ENDCMP # $CMP D_Schottky_KAA D Schottky diode, anode on pins 2 and 3 K diode Schottky SCHDPAK F ~ $ENDCMP # $CMP D_Schottky_KAK D Schottky diode, cathode on pins 1 and 3 K diode Schottky SCHDPAK F ~ $ENDCMP # $CMP D_Schottky_KKA D Schottky diode, cathode on pins 1 and 2 K diode Schottky SCHDPAK F ~ $ENDCMP # $CMP D_Schottky_Small D Schottky diode, small symbol K diode Schottky F ~ $ENDCMP # $CMP D_Schottky_Small_ALT D Schottky diode, small symbol, filled shape K diode Schottky F ~ $ENDCMP # $CMP D_Schottky_x2_ACom_AKK D Dual Schottky diode, common anode on pin 1 K diode F ~ $ENDCMP # $CMP D_Schottky_x2_ACom_KAK D Dual Schottky diode, common anode on pin 2 K diode F ~ $ENDCMP # $CMP D_Schottky_x2_ACom_KKA D Dual Schottky diode, common anode on pin 3 K diode F ~ $ENDCMP # $CMP D_Schottky_x2_KCom_AAK D Dual Schottky diode, common cathode on pin 3 K diode F ~ $ENDCMP # $CMP D_Schottky_x2_KCom_AKA D Dual Schottky diode, common cathode on pin 2 K diode F ~ $ENDCMP # $CMP D_Schottky_x2_KCom_KAA D Dual Schottky diode, common cathode on pin 1 K diode F ~ $ENDCMP # $CMP D_Schottky_x2_Serial_ACK D Dual Schottky diode, anode/center/cathode K diode F ~ $ENDCMP # $CMP D_Schottky_x2_Serial_AKC D Dual Schottky diode, anode/cathode/center K diode F ~ $ENDCMP # $CMP D_Schottky_x2_Serial_CAK D Dual Schottky diode, center/anode/cathode K diode F ~ $ENDCMP # $CMP D_Schottky_x2_Serial_CKA D Dual Schottky diode, center/cathode/anode K diode F ~ $ENDCMP # $CMP D_Schottky_x2_Serial_KAC D Dual Schottky diode, cathode/anode/center K diode F ~ $ENDCMP # $CMP D_Schottky_x2_Serial_KCA D Dual Schottky diode, cathode/center/anode K diode F ~ $ENDCMP # $CMP D_Shockley D Shockley (PNPN) diode K Shockley diode PNPN F ~ $ENDCMP # $CMP D_SiPM D Silicon photomultiplier K SiPM MPPC SPAD photon counting F ~ $ENDCMP # $CMP D_Small D Diode, small symbol K diode F ~ $ENDCMP # $CMP D_Small_ALT D Diode, small symbol, filled shape K diode F ~ $ENDCMP # $CMP D_TVS D Bidirectional transient-voltage-suppression diode K diode TVS thyrector F ~ $ENDCMP # $CMP D_TVS_ALT D Bidirectional transient-voltage-suppression diode, filled shape K diode TVS thyrector F ~ $ENDCMP # $CMP D_TVS_x2_AAC D Bidirectional dual transient-voltage-suppression diode, center on pin 3 K diode TVS thyrector F ~ $ENDCMP # $CMP D_TVS_x2_ACA D Bidirectional dual transient-voltage-suppression diode, center on pin 2 K diode TVS thyrector F ~ $ENDCMP # $CMP D_TVS_x2_CAA D Bidirectional dual transient-voltage-suppression diode, center on pin 1 K diode TVS thyrector F ~ $ENDCMP # $CMP D_Temperature_Dependent D Temperature dependent diode K temperature sensor diode F ~ $ENDCMP # $CMP D_Temperature_Dependent_ALT D Temperature dependent diode, filled shape K temperature sensor diode F ~ $ENDCMP # $CMP D_Tunnel D Tunnel diode (Esaki diode) K tunnel diode F ~ $ENDCMP # $CMP D_Tunnel_ALT D Tunnel diode (Esaki diode), filled shape K tunnel diode F ~ $ENDCMP # $CMP D_Unitunnel D Unitunnel diode K unitunnel diode F ~ $ENDCMP # $CMP D_Unitunnel_ALT D Unitunnel diode, filled shape K unitunnel diode F ~ $ENDCMP # $CMP D_Zener D Zener diode K diode F ~ $ENDCMP # $CMP D_Zener_ALT D Zener diode, filled shape K diode F ~ $ENDCMP # $CMP D_Zener_Small D Zener diode, small symbol K diode F ~ $ENDCMP # $CMP D_Zener_Small_ALT D Zener diode, small symbol, filled shape K diode F ~ $ENDCMP # $CMP D_Zener_x2_ACom_AKK D Dual Zener diode, common anode on pin 1 K diode zener dual F ~ $ENDCMP # $CMP D_Zener_x2_ACom_KAK D Dual Zener diode, common anode on pin 2 K diode zener dual F ~ $ENDCMP # $CMP D_Zener_x2_ACom_KKA D Dual Zener diode, common anode on pin 3 K diode zener dual F ~ $ENDCMP # $CMP D_Zener_x2_KCom_AAK D Dual Zener diode, common cathode on pin 3 K diode zener dual F ~ $ENDCMP # $CMP D_Zener_x2_KCom_AKA D Dual Zener diode, common cathode on pin 2 K diode zener dual F ~ $ENDCMP # $CMP D_Zener_x2_KCom_KAA D Dual Zener diode, common cathode on pin 1 K diode zener dual F ~ $ENDCMP # $CMP D_x2_ACom_AKK D Dual diode, common anode on pin 1 K diode F ~ $ENDCMP # $CMP D_x2_ACom_KAK D Dual diode, common anode on pin 2 K diode F ~ $ENDCMP # $CMP D_x2_ACom_KKA D Dual diode, common anode on pin 3 K diode F ~ $ENDCMP # $CMP D_x2_KCom_AAK D Dual diode, common cathode on pin 3 K diode F ~ $ENDCMP # $CMP D_x2_KCom_AKA D Dual diode, common cathode on pin 2 K diode F ~ $ENDCMP # $CMP D_x2_KCom_KAA D Dual diode, common cathode on pin 1 K diode F ~ $ENDCMP # $CMP D_x2_Serial_ACK D Dual diode, anode/center/cathode K diode F ~ $ENDCMP # $CMP D_x2_Serial_AKC D Dual diode, anode/cathode/center K diode F ~ $ENDCMP # $CMP D_x2_Serial_CAK D Dual diode, center/anode/cathode K diode F ~ $ENDCMP # $CMP D_x2_Serial_CKA D Dual diode, center/cathode/anode K diode F ~ $ENDCMP # $CMP D_x2_Serial_KAC D Dual diode, cathode/anode/center K diode F ~ $ENDCMP # $CMP D_x2_Serial_KCA D Dual diode, cathode/center/anode K diode F ~ $ENDCMP # $CMP Delay_Line D Delay line K delay propagation retard impedance F ~ $ENDCMP # $CMP EMI_Filter_C D EMI filter, single capacitor K EMI filter feedthrough capacitor F http://www.murata.com/~/media/webrenewal/support/library/catalog/products/emc/emifil/c31e.ashx?la=en-gb $ENDCMP # $CMP EMI_Filter_CLC D EMI T-filter (CLC) K EMI T-filter F http://www.murata.com/~/media/webrenewal/support/library/catalog/products/emc/emifil/c31e.ashx?la=en-gb $ENDCMP # $CMP EMI_Filter_CommonMode D EMI 2-inductor common mode filter K EMI common mode filter F ~ $ENDCMP # $CMP EMI_Filter_LCL D EMI T-filter (LCL) K EMI T-filter F http://www.murata.com/~/media/webrenewal/support/library/catalog/products/emc/emifil/c31e.ashx?la=en-gb $ENDCMP # $CMP EMI_Filter_LL D EMI 2-inductor filter K EMI filter F ~ $ENDCMP # $CMP EMI_Filter_LL_1423 D EMI 2-inductor filter, pin-connections 1-4 and 2-3 K EMI filter common-mode choke F ~ $ENDCMP # $CMP Earphone D Earphone, polarized K earphone speaker headphone F ~ $ENDCMP # $CMP Electromagnetic_Actor D Electromagnetic actor K electromagnet coil inductor F ~ $ENDCMP # $CMP Ferrite_Bead D Ferrite bead K L ferrite bead inductor filter F ~ $ENDCMP # $CMP Ferrite_Bead_Small D Ferrite bead, small symbol K L ferrite bead inductor filter F ~ $ENDCMP # $CMP Frequency_Counter D Frequency counter K frequency counter F ~ $ENDCMP # $CMP Fuse D Fuse K fuse F ~ $ENDCMP # $CMP Fuse_Polarized D Polarized fuse K fuse F ~ $ENDCMP # $CMP Fuse_Polarized_Small D Polarized fuse, small symbol K fuse F ~ $ENDCMP # $CMP Fuse_Small D Fuse, small symbol K fuse F ~ $ENDCMP # $CMP Galvanometer D Galvanometer K galvanometer F ~ $ENDCMP # $CMP Hall_Generator D Hall effect generator K Hall generator magnet F ~ $ENDCMP # $CMP Heater D Resistive heater K heater R resistor F ~ $ENDCMP # $CMP Jumper D Jumper, normally closed K jumper bridge link NC F ~ $ENDCMP # $CMP Jumper_NC_Dual D Dual jumper, normally closed K jumper bridge link NC F ~ $ENDCMP # $CMP Jumper_NC_Small D Jumper, normally closed, small symbol K jumper link bridge NC F ~ $ENDCMP # $CMP Jumper_NO_Small D Jumper, normally open, small symbol K jumper link bridge NO F ~ $ENDCMP # $CMP L D Inductor K inductor choke coil reactor magnetic F ~ $ENDCMP # $CMP LED D Light emitting diode K LED diode F ~ $ENDCMP # $CMP LED_ABRG D RGB LED, anode/blue/red/green K LED RGB diode F ~ $ENDCMP # $CMP LED_ALT D Light emitting diode, filled shape K LED diode F ~ $ENDCMP # $CMP LED_ARBG D RGB LED, anode/red/blue/green K LED RGB Diode F ~ $ENDCMP # $CMP LED_ARGB D RGB LED, anode/red/green/blue K LED RGB diode F ~ $ENDCMP # $CMP LED_BARG D RGB LED, blue/anode/red/green K LED RGB diode F ~ $ENDCMP # $CMP LED_BGRA D RGB LED, blue/green/red/anode K LED RGB diode F ~ $ENDCMP # $CMP LED_CRGB D RGB LED, cathode/red/green/blue K LED RGB diode F ~ $ENDCMP # $CMP LED_Dual_2pin D Dual LED, bidirectional K LED diode bicolor dual F ~ $ENDCMP # $CMP LED_Dual_AAC D Dual LED, common cathode on pin 3 K LED diode bicolor dual F ~ $ENDCMP # $CMP LED_Dual_AACC D Dual LED, cathodes on pins 3 and 4 K LED diode bicolor dual F ~ $ENDCMP # $CMP LED_Dual_ACA D Dual LED, common cathode on pin 2 K LED diode bicolor dual F ~ $ENDCMP # $CMP LED_Dual_ACAC D Dual LED, cathodes on pins 2 and 4 K LED diode bicolor dual F ~ $ENDCMP # $CMP LED_Dual_CAC D Dual LED, common anode on pin 2 K LED diode bicolor dual F ~ $ENDCMP # $CMP LED_Dual_CACA D Dual LED, cathodes on pins 1 and 3 K LED diode bicolor dual F ~ $ENDCMP # $CMP LED_Dual_CCA D Dual LED, common anode on pin 3 K LED diode bicolor dual F ~ $ENDCMP # $CMP LED_PAD D Light emitting diode with pad K LED diode pad F ~ $ENDCMP # $CMP LED_RABG D RGB LED, red/anode/blue/green K LED RGB diode F ~ $ENDCMP # $CMP LED_RAGB D RGB LED, red/anode/green/blue K LED RGB diode F ~ $ENDCMP # $CMP LED_RCBG D RGB LED, red/cathode/blue/green K LED RGB diode F ~ $ENDCMP # $CMP LED_RCGB D RGB LED, red/cathode/green/blue K LED RGB diode F ~ $ENDCMP # $CMP LED_RGB D RGB LED, 6 pin package K LED RGB diode F ~ $ENDCMP # $CMP LED_RGBA D RGB LED, red/green/blue/anode K LED RGB diode F ~ $ENDCMP # $CMP LED_RGBC D RGB LED, red/green/blue/cathode K LED RGB diode F ~ $ENDCMP # $CMP LED_RGB_EP D RGB LED, 6 pin package with exposed pad K LED RGB diode F ~ $ENDCMP # $CMP LED_Series D Several LEDs in series K LED diode F ~ $ENDCMP # $CMP LED_Series_PAD D Several LEDs in series with exposed pad K LED diode pad F ~ $ENDCMP # $CMP LED_Small D Light emitting diode, small symbol K LED diode light-emitting-diode F ~ $ENDCMP # $CMP LED_Small_ALT D Light emitting diode, small symbol, filled shape K LED diode light-emitting-diode F ~ $ENDCMP # $CMP LTRIM D Variable inductor K inductor choke coil reactor magnetic F ~ $ENDCMP # $CMP L_Core_Ferrite D Inductor with ferrite core K inductor choke coil reactor magnetic F ~ $ENDCMP # $CMP L_Core_Ferrite_Coupled D Coupled inductor with ferrite core K inductor choke coil reactor magnetic coupled F ~ $ENDCMP # $CMP L_Core_Ferrite_Coupled_1243 D Coupled inductor with ferrite core K inductor choke coil reactor magnetic coupled F ~ $ENDCMP # $CMP L_Core_Ferrite_Coupled_1324 D Coupled inductor with ferrite core K inductor choke coil reactor magnetic coupled F ~ $ENDCMP # $CMP L_Core_Ferrite_Coupled_1342 D Coupled inductor with ferrite core K inductor choke coil reactor magnetic coupled F ~ $ENDCMP # $CMP L_Core_Ferrite_Coupled_1423 D Coupled inductor with ferrite core K inductor choke coil reactor magnetic coupled F ~ $ENDCMP # $CMP L_Core_Ferrite_Coupled_Small D Coupled inductor with ferrite core, small symbol K inductor choke coil reactor magnetic coupled F ~ $ENDCMP # $CMP L_Core_Ferrite_Coupled_Small_1243 D Coupled inductor with ferrite core, small symbol K inductor choke coil reactor magnetic coupled F ~ $ENDCMP # $CMP L_Core_Ferrite_Coupled_Small_1324 D Coupled inductor with ferrite core, small symbol K inductor choke coil reactor magnetic coupled F ~ $ENDCMP # $CMP L_Core_Ferrite_Coupled_Small_1342 D Coupled inductor with ferrite core, small symbol K inductor choke coil reactor magnetic coupled F ~ $ENDCMP # $CMP L_Core_Ferrite_Coupled_Small_1423 D Coupled inductor with ferrite core, small symbol K inductor choke coil reactor magnetic coupled F ~ $ENDCMP # $CMP L_Core_Ferrite_Small D Inductor with ferrite core, small symbol K inductor choke coil reactor magnetic F ~ $ENDCMP # $CMP L_Core_Iron D Inductor with iron core K inductor choke coil reactor magnetic F ~ $ENDCMP # $CMP L_Core_Iron_Coupled D Coupled inductor with iron core K inductor choke coil reactor magnetic coupled F ~ $ENDCMP # $CMP L_Core_Iron_Coupled_1243 D Coupled inductor with iron core K inductor choke coil reactor magnetic coupled F ~ $ENDCMP # $CMP L_Core_Iron_Coupled_1324 D Coupled inductor with iron core K inductor choke coil reactor magnetic coupled F ~ $ENDCMP # $CMP L_Core_Iron_Coupled_1342 D Coupled inductor with iron core K inductor choke coil reactor magnetic coupled F ~ $ENDCMP # $CMP L_Core_Iron_Coupled_1423 D Coupled inductor with iron core K inductor choke coil reactor magnetic coupled F ~ $ENDCMP # $CMP L_Core_Iron_Coupled_Small D Coupled inductor with iron core, small symbol K inductor choke coil reactor magnetic coupled F ~ $ENDCMP # $CMP L_Core_Iron_Coupled_Small_1243 D Coupled inductor with iron core, small symbol K inductor choke coil reactor magnetic coupled F ~ $ENDCMP # $CMP L_Core_Iron_Coupled_Small_1324 D Coupled inductor with iron core, small symbol K inductor choke coil reactor magnetic coupled F ~ $ENDCMP # $CMP L_Core_Iron_Coupled_Small_1342 D Coupled inductor with iron core, small symbol K inductor choke coil reactor magnetic coupled F ~ $ENDCMP # $CMP L_Core_Iron_Coupled_Small_1423 D Coupled inductor with iron core, small symbol K inductor choke coil reactor magnetic coupled F ~ $ENDCMP # $CMP L_Core_Iron_Small D Inductor with iron core, small symbol K inductor choke coil reactor magnetic F ~ $ENDCMP # $CMP L_Coupled D Coupled inductor K inductor choke coil reactor magnetic coupled F ~ $ENDCMP # $CMP L_Coupled_1243 D Coupled inductor K inductor choke coil reactor magnetic coupled F ~ $ENDCMP # $CMP L_Coupled_1324 D Coupled inductor K inductor choke coil reactor magnetic coupled F ~ $ENDCMP # $CMP L_Coupled_1342 D Coupled inductor K inductor choke coil reactor magnetic coupled F ~ $ENDCMP # $CMP L_Coupled_1423 D Coupled inductor K inductor choke coil reactor magnetic coupled F ~ $ENDCMP # $CMP L_Coupled_Small D Coupled inductor, small symbol K inductor choke coil reactor magnetic coupled F ~ $ENDCMP # $CMP L_Coupled_Small_1243 D Coupled inductor, small symbol K inductor choke coil reactor magnetic coupled F ~ $ENDCMP # $CMP L_Coupled_Small_1324 D Coupled inductor, small symbol K inductor choke coil reactor magnetic coupled F ~ $ENDCMP # $CMP L_Coupled_Small_1342 D Coupled inductor, small symbol K inductor choke coil reactor magnetic coupled F ~ $ENDCMP # $CMP L_Coupled_Small_1423 D Coupled inductor, small symbol K inductor choke coil reactor magnetic coupled F ~ $ENDCMP # $CMP L_Small D Inductor, small symbol K inductor choke coil reactor magnetic F ~ $ENDCMP # $CMP Lamp D Lamp K lamp F ~ $ENDCMP # $CMP Lamp_Flash D Flash lamp tube K flash lamp F ~ $ENDCMP # $CMP Lamp_Neon D Neon lamp K neon lamp F ~ $ENDCMP # $CMP Laserdiode_1A3C D Laser diode, cathode on pin 3, anode on pin 1 K opto laserdiode F ~ $ENDCMP # $CMP Laserdiode_1C2A D Laser diode, cathode on pin 1, anode on pin 2 K opto laserdiode F ~ $ENDCMP # $CMP Laserdiode_M_TYPE D Laser diode with photodiode, common cathode on pin 2 K opto laserdiode photodiode F http://www.egismos.disonhu.com/laser/diode-package.htm $ENDCMP # $CMP Laserdiode_N_TYPE D Laser diode with photodiode, center on pin 2, LD cathode on pin 1 K opto laserdiode photodiode F http://www.egismos.disonhu.com/laser/diode-package.htm $ENDCMP # $CMP Laserdiode_P_TYPE D Laser diode with photodiode, center on pin 2, PD cathode on pin 3 K opto laserdiode photodiode F http://www.egismos.disonhu.com/laser/diode-package.htm $ENDCMP # $CMP MEMRISTOR D Memristor K memristor F ~ $ENDCMP # $CMP Microphone D Microphone K microphone F ~ $ENDCMP # $CMP Microphone_Condenser D Condenser microphone K capacitance condenser microphone F ~ $ENDCMP # $CMP Microphone_Crystal D Crystal microphone K microphone crystal F ~ $ENDCMP # $CMP Microphone_Ultrasound D Ultrasound receiver K microphone ultrasound crystal F ~ $ENDCMP # $CMP Net-Tie_2 D Net tie, 2 pins K net tie short F ~ $ENDCMP # $CMP Net-Tie_3 D Net tie, 3 pins K net tie short F ~ $ENDCMP # $CMP Net-Tie_3_Tee D Net tie, 3 pins, tee K net tie short F ~ $ENDCMP # $CMP Net-Tie_4 D Net tie, 4 pins K net tie short F ~ $ENDCMP # $CMP Net-Tie_4_Cross D Net tie, 4 pins, cross K net tie short F ~ $ENDCMP # $CMP Ohmmeter D Ohmmeter K ohmmeter resistance F ~ $ENDCMP # $CMP Opamp_Dual_Generic D Dual operational amplifier K dual opamp F ~ $ENDCMP # $CMP Opamp_Quad_Generic D Quad operational amplifier K quad opamp F ~ $ENDCMP # $CMP Oscilloscope D Oscilloscope K oscilloscope F ~ $ENDCMP # $CMP Peltier_Element D Peltier element, thermoelectric cooler K Peltier TEC F ~ $ENDCMP # $CMP Polyfuse D Resettable fuse, polymeric positive temperature coefficient K resettable fuse PTC PPTC polyfuse polyswitch F ~ $ENDCMP # $CMP Polyfuse_Small D Resettable fuse, polymeric positive temperature coefficient, small symbol K resettable fuse PTC PPTC polyfuse polyswitch F ~ $ENDCMP # $CMP Q_DUAL_NMOS_G1S2G2D2S1D1 D Dual NMOS transistor, 6 pin package K transistor NMOS N-MOS N-MOSFET F ~ $ENDCMP # $CMP Q_DUAL_NMOS_S1G1D2S2G2D1 D Dual NMOS transistor, 6 pin package K transistor NMOS N-MOS N-MOSFET F ~ $ENDCMP # $CMP Q_DUAL_NPN_C2C1E1E2 D Double NPN transistors, current mirror configuration K transistor NPN F ~ $ENDCMP # $CMP Q_DUAL_NPN_NPN_BRT_E1B1C2E2B2C1 D Dual NPN bias resistor transistor, 6 pin package K transistor NPN F ~ $ENDCMP # $CMP Q_DUAL_NPN_NPN_C2E2C1E1B1B2 D Dual NPN transistor, 6 pin package K transistor NPN F ~ $ENDCMP # $CMP Q_DUAL_NPN_NPN_E1B1C2E2B2C1 D Dual NPN transistor, 6 pin package K transistor NPN F ~ $ENDCMP # $CMP Q_DUAL_NPN_PNP_BRT_E1B1C2E2B2C1 D Dual NPN/PNP bias resistor transistor, 6 pin package K transistor NPN F ~ $ENDCMP # $CMP Q_DUAL_NPN_PNP_E1B1C2E2B2C1 D Dual NPN/PNP transistor, 6 pin package K transistor NPN PNP F ~ $ENDCMP # $CMP Q_DUAL_PMOS_G1S2G2D2S1D1 D Dual PMOS transistor, 6 pin package K transistor PMOS P-MOS P-MOSFET F ~ $ENDCMP # $CMP Q_DUAL_PMOS_S1G1D2S2G2D1 D Dual PMOS transistor, 6 pin package K transistor PMOS P-MOS P-MOSFET F ~ $ENDCMP # $CMP Q_DUAL_PMOS_S1G1S2G2D2D2D1D1 D Dual PMOS transistor, 8 pin package K transistor PMOS P-MOS P-MOSFET F ~ $ENDCMP # $CMP Q_DUAL_PNP_C2C1E1E2 D Double PNP transistors, current mirror configuration K transistor PNP F ~ $ENDCMP # $CMP Q_DUAL_PNP_NPN_BRT_E1B1C2E2B2C1 D Dual PNP/NPN bias resistor transistor, 6 pin package K transistor NPN F ~ $ENDCMP # $CMP Q_DUAL_PNP_PNP_BRT_E1B1C2E2B2C1 D Dual PNP bias resistor transistor, 6 pin package K transistor NPN F ~ $ENDCMP # $CMP Q_DUAL_PNP_PNP_C1B1B2C2E2E1 D Dual PNP transistor, 6 pin package K transistor PNP F https://www.diodes.com/assets/Datasheets/ds30437.pdf $ENDCMP # $CMP Q_DUAL_PNP_PNP_C2E2C1E1B1B2 D Dual PNP transistor, 6 pin package K transistor PNP F ~ $ENDCMP # $CMP Q_DUAL_PNP_PNP_E1B1C2E2B2C1 D Dual PNP transistor, 6 pin package K transistor PNP F ~ $ENDCMP # $CMP Q_NIGBT_CEG D N-IGBT transistor, collector/emitter/gate K transistor IGBT N-IGBT F ~ $ENDCMP # $CMP Q_NIGBT_CGE D N-IGBT transistor, collector/gate/emitter K transistor IGBT N-IGBT F ~ $ENDCMP # $CMP Q_NIGBT_ECG D N-IGBT transistor, emitter/collector/gate K transistor IGBT N-IGBT F ~ $ENDCMP # $CMP Q_NIGBT_ECGC D N-IGBT transistor, emitter/collector/gate, collector connected to mounting plane K transistor IGBT N-IGBT F ~ $ENDCMP # $CMP Q_NIGBT_EGC D N-IGBT transistor, emitter/gate/collector K transistor IGBT N-IGBT F ~ $ENDCMP # $CMP Q_NIGBT_GCE D N-IGBT transistor, gate/collector/emitter K transistor IGBT N-IGBT F ~ $ENDCMP # $CMP Q_NIGBT_GCEC D N-IGBT transistor, gate/collector/emitter, collector connected to mounting plane K transistor IGBT N-IGBT F ~ $ENDCMP # $CMP Q_NIGBT_GEC D N-IGBT transistor, gate/emitter/collector K transistor IGBT N-IGBT F ~ $ENDCMP # $CMP Q_NJFET_DGS D N-JFET transistor, drain/gate/source K transistor NJFET N-JFET F ~ $ENDCMP # $CMP Q_NJFET_DSG D N-JFET transistor, drain/source/gate K transistor NJFET N-JFET F ~ $ENDCMP # $CMP Q_NJFET_GDS D N-JFET transistor, gate/drain/source K transistor NJFET N-JFET F ~ $ENDCMP # $CMP Q_NJFET_GSD D N-JFET transistor, gate/source/drain K transistor NJFET N-JFET F ~ $ENDCMP # $CMP Q_NJFET_SDG D N-JFET transistor, source/drain/gate K transistor NJFET N-JFET F ~ $ENDCMP # $CMP Q_NJFET_SGD D N-JFET transistor, source/gate/drain K transistor NJFET N-JFET F ~ $ENDCMP # $CMP Q_NMOS_DGS D N-MOSFET transistor, drain/gate/source K transistor NMOS N-MOS N-MOSFET F ~ $ENDCMP # $CMP Q_NMOS_DSG D N-MOSFET transistor, drain/source/gate K transistor NMOS N-MOS N-MOSFET F ~ $ENDCMP # $CMP Q_NMOS_GDS D N-MOSFET transistor, gate/drain/source K transistor NMOS N-MOS N-MOSFET F ~ $ENDCMP # $CMP Q_NMOS_GDSD D N-MOSFET transistor, gate/drain/source, drain connected to mounting plane K transistor NMOS N-MOS N-MOSFET F ~ $ENDCMP # $CMP Q_NMOS_GSD D N-MOSFET transistor, gate/source/drain K transistor NMOS N-MOS N-MOSFET F ~ $ENDCMP # $CMP Q_NMOS_SDG D N-MOSFET transistor, source/drain/gate K transistor NMOS N-MOS N-MOSFET F ~ $ENDCMP # $CMP Q_NMOS_SDGD D N-MOSFET transistor, source/drain/gate, drain connected to mounting plane K transistor NMOS N-MOS N-MOSFET F ~ $ENDCMP # $CMP Q_NMOS_SGD D N-MOSFET transistor, source/gate/drain K transistor NMOS N-MOS N-MOSFET F ~ $ENDCMP # $CMP Q_NPN_BCE D NPN transistor, base/collector/emitter K transistor NPN F ~ $ENDCMP # $CMP Q_NPN_BCEC D NPN transistor, base/collector/emitter, collector connected to mounting plane K transistor NPN F ~ $ENDCMP # $CMP Q_NPN_BEC D NPN transistor, base/emitter/collector K transistor NPN F ~ $ENDCMP # $CMP Q_NPN_BEC_BRT D NPN bias resistor transistor, base/emitter/collector K transistor NPN F ~ $ENDCMP # $CMP Q_NPN_CBE D NPN transistor, collector/base/emitter K transistor NPN F ~ $ENDCMP # $CMP Q_NPN_CEB D NPN transistor, collector/emitter/base K transistor NPN F ~ $ENDCMP # $CMP Q_NPN_Darlington_BCE D NPN Darlington transistor, base/collector/emitter K transistor NPN Darlington F ~ $ENDCMP # $CMP Q_NPN_Darlington_BCEC D NPN Darlington transistor, base/collector/emitter, collector connected to mounting plane K transistor NPN Darlington F ~ $ENDCMP # $CMP Q_NPN_Darlington_BEC D NPN Darlington transistor, base/emitter/collector K transistor NPN Darlington F ~ $ENDCMP # $CMP Q_NPN_Darlington_CBE D NPN Darlington transistor, collector/base/emitter K transistor NPN Darlington F ~ $ENDCMP # $CMP Q_NPN_Darlington_CEB D NPN Darlington transistor, collector/emitter/base K transistor NPN Darlington F ~ $ENDCMP # $CMP Q_NPN_Darlington_EBC D NPN Darlington transistor, emitter/base/collector K transistor NPN Darlington F ~ $ENDCMP # $CMP Q_NPN_Darlington_ECB D NPN Darlington transistor, emitter/collector/base K transistor NPN Darlington F ~ $ENDCMP # $CMP Q_NPN_Darlington_ECBC D NPN Darlington transistor, emitter/collector/base, collector connected to mounting plane K transistor NPN Darlington F ~ $ENDCMP # $CMP Q_NPN_EBC D NPN transistor, emitter/base/collector K transistor NPN F ~ $ENDCMP # $CMP Q_NPN_ECB D NPN transistor, emitter/collector/base K transistor NPN F ~ $ENDCMP # $CMP Q_NPN_ECBC D NPN transistor, emitter/collector/base, collector connected to mounting plane K transistor NPN F ~ $ENDCMP # $CMP Q_NPN_ECB_BRT D NPN transistor, emitter/collector/base K transistor NPN F ~ $ENDCMP # $CMP Q_NUJT_BEB D N-Type unijunction transistor K transistor UJT F ~ $ENDCMP # $CMP Q_PJFET_DGS D P-JFET transistor, drain/gate/source K transistor PJFET P-JFET F ~ $ENDCMP # $CMP Q_PJFET_DSG D P-JFET transistor, drain/source/gate K transistor PJFET P-JFET F ~ $ENDCMP # $CMP Q_PJFET_GDS D P-JFET transistor, gate/drain/source K transistor PJFET P-JFET F ~ $ENDCMP # $CMP Q_PJFET_GSD D P-JFET transistor, gate/source/drain K transistor PJFET P-JFET F ~ $ENDCMP # $CMP Q_PJFET_SDG D P-JFET transistor, source/drain/gate K transistor PJFET P-JFET F ~ $ENDCMP # $CMP Q_PJFET_SGD D P-JFET transistor, source/gate/drain K transistor PJFET P-JFET F ~ $ENDCMP # $CMP Q_PMOS_DGS D P-MOSFET transistor, drain/gate/source K transistor PMOS P-MOS P-MOSFET F ~ $ENDCMP # $CMP Q_PMOS_DSG D P-MOSFET transistor, drain/source/gate K transistor PMOS P-MOS P-MOSFET F ~ $ENDCMP # $CMP Q_PMOS_GDS D P-MOSFET transistor, gate/drain/source K transistor PMOS P-MOS P-MOSFET F ~ $ENDCMP # $CMP Q_PMOS_GDSD D P-MOSFET transistor, gate/drain/source, drain connected to mounting plane K transistor PMOS P-MOS P-MOSFET F ~ $ENDCMP # $CMP Q_PMOS_GSD D P-MOSFET transistor, gate/source/drain K transistor PMOS P-MOS P-MOSFET F ~ $ENDCMP # $CMP Q_PMOS_SDG D P-MOSFET transistor, source/drain/gate K transistor PMOS P-MOS P-MOSFET F ~ $ENDCMP # $CMP Q_PMOS_SDGD D P-MOSFET transistor, source/drain/gate, drain connected to mounting plane K transistor PMOS P-MOS P-MOSFET F ~ $ENDCMP # $CMP Q_PMOS_SGD D P-MOSFET transistor, source/gate/drain K transistor PMOS P-MOS P-MOSFET F ~ $ENDCMP # $CMP Q_PNP_BCE D PNP transistor, base/collector/emitter K transistor PNP F ~ $ENDCMP # $CMP Q_PNP_BCEC D PNP transistor, base/collector/emitter, collector connected to mounting plane K transistor PNP F ~ $ENDCMP # $CMP Q_PNP_BEC D PNP transistor, base/emitter/collector K transistor PNP F ~ $ENDCMP # $CMP Q_PNP_BEC_BRT D PNP bias resistor transistor, base/emitter/collector K transistor PNP F ~ $ENDCMP # $CMP Q_PNP_CBE D PNP transistor, collector/base/emitter K transistor PNP F ~ $ENDCMP # $CMP Q_PNP_CEB D PNP transistor, collector/emitter/base K transistor PNP F ~ $ENDCMP # $CMP Q_PNP_Darlington_BCE D PNP Darlington transistor, base/collector/emitter K transistor PNP Darlington F ~ $ENDCMP # $CMP Q_PNP_Darlington_BCEC D PNP Darlington transistor, base/collector/emitter, collector connected to mounting plane K transistor PNP Darlington F ~ $ENDCMP # $CMP Q_PNP_Darlington_BEC D PNP Darlington transistor, base/emitter/collector K transistor PNP Darlington F ~ $ENDCMP # $CMP Q_PNP_Darlington_CBE D PNP Darlington transistor, collector/base/emitter K transistor PNP Darlington F ~ $ENDCMP # $CMP Q_PNP_Darlington_CEB D PNP Darlington transistor, collector/emitter/base K transistor PNP Darlington F ~ $ENDCMP # $CMP Q_PNP_Darlington_EBC D PNP Darlington transistor, emitter/base/collector K transistor PNP Darlington F ~ $ENDCMP # $CMP Q_PNP_Darlington_ECB D PNP Darlington transistor, emitter/collector/base K transistor PNP Darlington F ~ $ENDCMP # $CMP Q_PNP_Darlington_ECBC D PNP Darlington transistor, emitter/collector/base, collector connected to mounting plane K transistor PNP Darlington F ~ $ENDCMP # $CMP Q_PNP_EBC D PNP transistor, emitter/base/collector K transistor PNP F ~ $ENDCMP # $CMP Q_PNP_ECB D PNP transistor, emitter/collector/base K transistor PNP F ~ $ENDCMP # $CMP Q_PNP_ECBC D PNP transistor, emitter/collector/base, collector connected to mounting plane K transistor PNP F ~ $ENDCMP # $CMP Q_PNP_ECB_BRT D PNP bias resistor transistor, emitter/collector/base K transistor PNP F ~ $ENDCMP # $CMP Q_PUJT_BEB D P-Type unijunction transistor K transistor UJT F ~ $ENDCMP # $CMP Q_Photo_NPN D NPN phototransistor, collector/emitter K phototransistor NPN F ~ $ENDCMP # $CMP Q_Photo_NPN_CBE D NPN phototransistor, collector/base/emitter K phototransistor NPN F ~ $ENDCMP # $CMP Q_Photo_NPN_CE D NPN phototransistor, collector/emitter K phototransistor NPN F ~ $ENDCMP # $CMP Q_Photo_NPN_EBC D NPN phototransistor, emitter/base/collector K phototransistor NPN F ~ $ENDCMP # $CMP Q_Photo_NPN_EC D NPN phototransistor, emitter/collector K phototransistor NPN F ~ $ENDCMP # $CMP Q_SCR_AGK D Silicon controlled rectifier, anode/gate/cathode K SCR thyristor F ~ $ENDCMP # $CMP Q_SCR_AKG D Silicon controlled rectifier, anode/cathode/gate K SCR thyristor F ~ $ENDCMP # $CMP Q_SCR_GAK D Silicon controlled rectifier, gate/anode/cathode K SCR thyristor F ~ $ENDCMP # $CMP Q_SCR_GKA D Silicon controlled rectifier, gate/cathode/anode K SCR thyristor F ~ $ENDCMP # $CMP Q_SCR_KAG D Silicon controlled rectifier, cathode/anode/gate K SCR thyristor F ~ $ENDCMP # $CMP Q_SCR_KGA D Silicon controlled rectifier, cathode/gate/anode K SCR thyristor F ~ $ENDCMP # $CMP Q_TRIAC_A1A2G D Triode for alternating current, anode1/anode2/gate K TRIAC F ~ $ENDCMP # $CMP Q_TRIAC_A1GA2 D Triode for alternating current, anode1/gate/anode2 K TRIAC F ~ $ENDCMP # $CMP Q_TRIAC_A2A1G D Triode for alternating current, anode2/anode1/gate K TRIAC F ~ $ENDCMP # $CMP Q_TRIAC_A2GA1 D Triode for alternating current, anode2/gate/anode1 K TRIAC F ~ $ENDCMP # $CMP Q_TRIAC_GA1A2 D Triode for alternating current, gate/anode1/anode2 K TRIAC F ~ $ENDCMP # $CMP Q_TRIAC_GA2A1 D Triode for alternating current, gate/anode2/anode1 K TRIAC F ~ $ENDCMP # $CMP R D Resistor K R res resistor F ~ $ENDCMP # $CMP RF_Shield_One_Piece D One-piece EMI RF shielding cabinet K RF EMI shielding cabinet F ~ $ENDCMP # $CMP RF_Shield_Two_Pieces D Two-piece EMI RF shielding cabinet K RF EMI shielding cabinet F ~ $ENDCMP # $CMP RTRIM D Trimmable resistor (preset resistor) K R res resistor variable potentiometer trimmer F ~ $ENDCMP # $CMP R_Network03 D 3 resistor network, star topology, bussed resistors, small symbol K R network star-topology F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Network03_Split D 3 resistor network, star topology, bussed resistors, split K R network star-topology F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Network03_US D 3 resistor network, star topology, bussed resistors, small US symbol K R network star-topology F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Network04 D 4 resistor network, star topology, bussed resistors, small symbol K R network star-topology F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Network04_Split D 4 resistor network, star topology, bussed resistors, split K R network star-topology F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Network04_US D 4 resistor network, star topology, bussed resistors, small US symbol K R network star-topology F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Network05 D 5 resistor network, star topology, bussed resistors, small symbol K R network star-topology F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Network05_Split D 5 resistor network, star topology, bussed resistors, split K R network star-topology F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Network05_US D 5 resistor network, star topology, bussed resistors, small US symbol K R network star-topology F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Network06 D 6 resistor network, star topology, bussed resistors, small symbol K R network star-topology F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Network06_Split D 6 resistor network, star topology, bussed resistors, split K R network star-topology F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Network06_US D 6 resistor network, star topology, bussed resistors, small US symbol K R network star-topology F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Network07 D 7 resistor network, star topology, bussed resistors, small symbol K R network star-topology F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Network07_Split D 7 resistor network, star topology, bussed resistors, split K R network star-topology F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Network07_US D 7 resistor network, star topology, bussed resistors, small US symbol K R network star-topology F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Network08 D 8 resistor network, star topology, bussed resistors, small symbol K R network star-topology F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Network08_Split D 8 resistor network, star topology, bussed resistors, split K R network star-topology F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Network08_US D 8 resistor network, star topology, bussed resistors, small US symbol K R network star-topology F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Network09 D 9 resistor network, star topology, bussed resistors, small symbol K R network star-topology F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Network09_Split D 9 resistor network, star topology, bussed resistors, split K R network star-topology F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Network09_US D 9 resistor network, star topology, bussed resistors, small US symbol K R network star-topology F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Network10 D 10 resistor network, star topology, bussed resistors, small symbol K R network star-topology F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Network10_Split D 10 resistor network, star topology, bussed resistors, split K R network star-topology F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Network10_US D 10 resistor network, star topology, bussed resistors, small US symbol K R network star-topology F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Network11 D 11 resistor network, star topology, bussed resistors, small symbol K R network star-topology F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Network11_Split D 11 resistor network, star topology, bussed resistors, split K R network star-topology F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Network11_US D 11 resistor network, star topology, bussed resistors, small US symbol K R network star-topology F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Network12 D 12 resistor network, star topology, bussed resistors, small symbol K R network star-topology F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Network12_Split D 12 resistor network, star topology, bussed resistors, split K R network star-topology F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Network12_US D 12 resistor network, star topology, bussed resistors, small US symbol K R network star-topology F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Network13 D 13 resistor network, star topology, bussed resistors, small symbol K R network star-topology F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Network13_Split D 13 resistor network, star topology, bussed resistors, split K R network star-topology F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Network13_US D 13 resistor network, star topology, bussed resistors, small US symbol K R network star-topology F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Network_Dividers_x02_SIP D 2 voltage divider network, dual terminator, SIP package K R network divider topology F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Network_Dividers_x03_SIP D 3 voltage divider network, dual terminator, SIP package K R network divider topology F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Network_Dividers_x04_SIP D 4 voltage divider network, dual terminator, SIP package K R network divider topology F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Network_Dividers_x05_SIP D 5 voltage divider network, dual terminator, SIP package K R network divider topology F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Network_Dividers_x06_SIP D 6 voltage divider network, dual terminator, SIP package K R network divider topology F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Network_Dividers_x07_SIP D 7 voltage divider network, dual terminator, SIP package K R network divider topology F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Network_Dividers_x08_SIP D 8 voltage divider network, dual terminator, SIP package K R network divider topology F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Network_Dividers_x09_SIP D 9 voltage divider network, dual terminator, SIP package K R network divider topology F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Network_Dividers_x10_SIP D 10 voltage divider network, dual terminator, SIP package K R network divider topology F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Network_Dividers_x11_SIP D 11 voltage divider network, dual terminator, SIP package K R network divider topology F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_PHOTO D Photoresistor K resistor variable light sensitive opto LDR F ~ $ENDCMP # $CMP R_POT D Potentiometer K resistor variable F ~ $ENDCMP # $CMP R_POT_Dual D Dual potentiometer K resistor variable F ~ $ENDCMP # $CMP R_POT_Dual_Separate D Dual potentiometer, separate units K resistor variable F ~ $ENDCMP # $CMP R_POT_MountingPin D Potentiometer with a mounting pin K resistor variable F ~ $ENDCMP # $CMP R_POT_Small D Potentiometer K resistor variable F ~ $ENDCMP # $CMP R_POT_TRIM D Trim-potentiometer K resistor variable trimpot trimmer F ~ $ENDCMP # $CMP R_POT_TRIM_US D Trim-potentiometer, US symbol K resistor variable trimpot trimmer F ~ $ENDCMP # $CMP R_POT_US D Potentiometer, US symbol K resistor variable F ~ $ENDCMP # $CMP R_Pack02 D 2 resistor network, parallel topology K R network parallel topology isolated F ~ $ENDCMP # $CMP R_Pack02_SIP D 2 resistor network, parallel topology, SIP package K R network parallel topology isolated F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Pack02_SIP_Split D 2 resistor network, parallel topology, SIP package, split K R network parallel topology isolated F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Pack02_Split D 2 resistor network, parallel topology, split K R network parallel topology isolated F ~ $ENDCMP # $CMP R_Pack03 D 3 resistor network, parallel topology K R network parallel topology isolated F ~ $ENDCMP # $CMP R_Pack03_SIP D 3 resistor network, parallel topology, SIP package K R network parallel topology isolated F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Pack03_SIP_Split D 3 resistor network, parallel topology, SIP package, split K R network parallel topology isolated F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Pack03_Split D 3 resistor network, parallel topology, split K R network parallel topology isolated F ~ $ENDCMP # $CMP R_Pack04 D 4 resistor network, parallel topology K R network parallel topology isolated F ~ $ENDCMP # $CMP R_Pack04_SIP D 4 resistor network, parallel topology, SIP package K R network parallel topology isolated F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Pack04_SIP_Split D 4 resistor network, parallel topology, SIP package, split K R network parallel topology isolated F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Pack04_Split D 4 resistor network, parallel topology, split K R network parallel topology isolated F ~ $ENDCMP # $CMP R_Pack05 D 5 resistor network, parallel topology K R network parallel topology isolated F ~ $ENDCMP # $CMP R_Pack05_SIP D 5 resistor network, parallel topology, SIP package K R network parallel topology isolated F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Pack05_SIP_Split D 5 resistor network, parallel topology, SIP package, split K R network parallel topology isolated F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Pack05_Split D 5 resistor network, parallel topology, split K R network parallel topology isolated F ~ $ENDCMP # $CMP R_Pack06 D 6 resistor network, parallel topology K R network parallel topology isolated F ~ $ENDCMP # $CMP R_Pack06_SIP D 6 resistor network, parallel topology, SIP package K R network parallel topology isolated F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Pack06_SIP_Split D 6 resistor network, parallel topology, SIP package, split K R network parallel topology isolated F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Pack06_Split D 6 resistor network, parallel topology, split K R network parallel topology isolated F ~ $ENDCMP # $CMP R_Pack07 D 7 resistor network, parallel topology K R network parallel topology isolated F ~ $ENDCMP # $CMP R_Pack07_SIP D 7 resistor network, parallel topology, SIP package K R network parallel topology isolated F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Pack07_SIP_Split D 7 resistor network, parallel topology, SIP package, split K R network parallel topology isolated F http://www.vishay.com/docs/31509/csc.pdf $ENDCMP # $CMP R_Pack07_Split D 7 resistor network, parallel topology, split K R network parallel topology isolated F ~ $ENDCMP # $CMP R_Pack08 D 8 resistor network, parallel topology K R network parallel topology isolated F ~ $ENDCMP # $CMP R_Pack08_Split D 8 resistor network, parallel topology, split K R network parallel topology isolated F ~ $ENDCMP # $CMP R_Pack09 D 9 resistor network, parallel topology K R network parallel topology isolated F ~ $ENDCMP # $CMP R_Pack09_Split D 9 resistor network, parallel topology, split K R network parallel topology isolated F ~ $ENDCMP # $CMP R_Pack10 D 10 resistor network, parallel topology K R network parallel topology isolated F ~ $ENDCMP # $CMP R_Pack10_Split D 10 resistor network, parallel topology, split K R network parallel topology isolated F ~ $ENDCMP # $CMP R_Pack11 D 11 resistor network, parallel topology K R network parallel topology isolated F ~ $ENDCMP # $CMP R_Pack11_Split D 11 resistor network, parallel topology, split K R network parallel topology isolated F ~ $ENDCMP # $CMP R_Shunt D Shunt resistor K R res shunt resistor F ~ $ENDCMP # $CMP R_Shunt_US D Shunt resistor, US symbol K R res shunt resistor F ~ $ENDCMP # $CMP R_Small D Resistor, small symbol K R resistor F ~ $ENDCMP # $CMP R_Small_US D Resistor, small US symbol K r resistor F ~ $ENDCMP # $CMP R_US D Resistor, US symbol K R res resistor F ~ $ENDCMP # $CMP R_Variable D Variable resistor K R res resistor variable potentiometer rheostat F ~ $ENDCMP # $CMP R_Variable_US D Variable resistor, US symbol K R res resistor variable potentiometer rheostat F ~ $ENDCMP # $CMP Resonator D Three pin ceramic resonator K ceramic resonator F ~ $ENDCMP # $CMP Resonator_Small D Three pin ceramic resonator, small symbol K ceramic resonator F ~ $ENDCMP # $CMP Rotary_Encoder D Rotary encoder, dual channel, incremental quadrate outputs K rotary switch encoder F ~ $ENDCMP # $CMP Rotary_Encoder_Switch D Rotary encoder, dual channel, incremental quadrate outputs, with switch K rotary switch encoder switch push button F ~ $ENDCMP # $CMP SPARK_GAP D Spark gap K spark gap ESD electrostatic suppression F ~ $ENDCMP # $CMP Solar_Cell D Single solar cell K solar cell F ~ $ENDCMP # $CMP Solar_Cells D Multiple solar cells K solar cell F ~ $ENDCMP # $CMP Speaker D Speaker K speaker sound F ~ $ENDCMP # $CMP Speaker_Crystal D Crystal speaker/transducer K crystal speaker ultrasonic transducer F ~ $ENDCMP # $CMP Speaker_Ultrasound D Ultrasonic transducer K crystal speaker ultrasonic transducer F ~ $ENDCMP # $CMP Thermistor D Temperature dependent resistor K R res thermistor F ~ $ENDCMP # $CMP Thermistor_NTC D Temperature dependent resistor, negative temperature coefficient K thermistor NTC resistor sensor RTD F ~ $ENDCMP # $CMP Thermistor_NTC_3wire D Temperature dependent resistor, negative temperature coefficient, 3-wire interface K thermistor NTC resistor sensor RTD F ~ $ENDCMP # $CMP Thermistor_NTC_4wire D Temperature dependent resistor, negative temperature coefficient, 4-wire interface K thermistor NTC resistor sensor RTD F ~ $ENDCMP # $CMP Thermistor_NTC_US D Temperature dependent resistor, negative temperature coefficient, US symbol K thermistor NTC resistor sensor RTD F ~ $ENDCMP # $CMP Thermistor_PTC D Temperature dependent resistor, positive temperature coefficient K resistor PTC thermistor sensor RTD F ~ $ENDCMP # $CMP Thermistor_PTC_3wire D Temperature dependent resistor, positive temperature coefficient, 3-wire interface K resistor PTC thermistor sensor RTD F ~ $ENDCMP # $CMP Thermistor_PTC_4wire D Temperature dependent resistor, positive temperature coefficient, 3-wire interface K resistor PTC thermistor sensor RTD F ~ $ENDCMP # $CMP Thermistor_PTC_US D Temperature dependent resistor, positive temperature coefficient, US symbol K resistor PTC thermistor sensor RTD F ~ $ENDCMP # $CMP Thermistor_US D Thermistor, temperature dependent resistor, US symbol K R res thermistor F ~ $ENDCMP # $CMP Thermocouple D Thermocouple K thermocouple temperature sensor cold junction F ~ $ENDCMP # $CMP Thermocouple_ALT D Thermocouple with connector block K thermocouple temperature sensor cold junction F ~ $ENDCMP # $CMP Thermocouple_Block D Thermocouple with isothermal block K thermocouple temperature sensor cold junction F ~ $ENDCMP # $CMP Transformer_1P_1S D Transformer, single primary, single secondary K transformer coil magnet F ~ $ENDCMP # $CMP Transformer_1P_1S_SO8 D Transformer, single primary, single secondary, SO-8 package K transformer coil magnet F ~ $ENDCMP # $CMP Transformer_1P_2S D Transformer, single primary, dual secondary K transformer coil magnet F ~ $ENDCMP # $CMP Transformer_1P_SS D Transformer, single primary, split secondary K transformer coil magnet F ~ $ENDCMP # $CMP Transformer_AUDIO D Audio transformer K transformer coil magnet sound F ~ $ENDCMP # $CMP Transformer_SP_1S D Transformer, split primary, single secondary K transformer coil magnet F ~ $ENDCMP # $CMP Transformer_SP_2S D Transformer, split primary, dual secondary K transformer coil magnet F ~ $ENDCMP # $CMP Varistor D Voltage dependent resistor K VDR resistance F ~ $ENDCMP # $CMP Varistor_US D Voltage dependent resistor, US symbol K VDR resistance F ~ $ENDCMP # $CMP Voltage_Divider D Voltage divider K R network voltage divider F ~ $ENDCMP # $CMP Voltage_Divider_CenterPin1 D Voltage divider, center on pin 1 K R network voltage divider F ~ $ENDCMP # $CMP Voltage_Divider_CenterPin3 D Voltage divider, center on pin 3 K R network voltage divider F ~ $ENDCMP # $CMP Voltmeter_AC D AC voltmeter K voltmeter AC F ~ $ENDCMP # $CMP Voltmeter_DC D DC voltmeter K voltmeter DC F ~ $ENDCMP # #End Doc Library ================================================ FILE: esim-cloud-backend/kicad-symbols/additional/Device.lib ================================================ EESchema-LIBRARY Version 2.4 #encoding utf-8 # # Amperemeter_AC # DEF Amperemeter_AC MES 0 1 N N 1 F N F0 "MES" -130 40 50 H V R CNN F1 "Amperemeter_AC" -130 -30 50 H V R CNN F2 "" 0 100 50 V I C CNN F3 "" 0 100 50 V I C CNN DRAW A -20 -54 21 -1633 -167 0 1 0 N -40 -60 0 -60 A 20 -65 21 140 1660 0 1 0 N 40 -60 0 -60 C 0 0 100 0 1 10 N T 0 0 25 100 0 0 0 A Normal 0 C C P 2 0 0 0 -125 -125 -75 -75 N P 2 0 0 0 75 75 125 125 N P 3 0 0 0 75 125 125 125 125 75 N X ~ 1 0 -200 100 U 50 50 1 1 P X ~ 2 0 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Amperemeter_DC # DEF Amperemeter_DC MES 0 1 N N 1 F N F0 "MES" -130 40 50 H V R CNN F1 "Amperemeter_DC" -130 -30 50 H V R CNN F2 "" 0 100 50 V I C CNN F3 "" 0 100 50 V I C CNN DRAW C 0 0 100 0 1 10 N T 0 0 0 100 0 0 0 A Normal 0 C C P 2 0 0 0 -125 -125 -75 -75 N P 2 0 0 0 75 75 125 125 N P 3 0 0 0 75 125 125 125 125 75 N P 2 0 1 0 10 150 30 150 N P 2 0 1 0 20 160 20 140 N X - 1 0 -200 100 U 50 50 1 1 P X + 2 0 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Antenna # DEF Antenna AE 0 40 N N 1 F N F0 "AE" -75 75 50 H V R CNN F1 "Antenna" -75 0 50 H V R CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 10 0 100 0 -150 N P 3 0 1 10 50 100 0 -100 -50 100 N X A 1 0 -200 100 U 50 50 1 1 I ENDDRAW ENDDEF # # Antenna_Chip # DEF Antenna_Chip AE 0 40 N N 1 F N F0 "AE" 0 200 50 H V R CNN F1 "Antenna_Chip" 0 125 50 H V R CNN F2 "" -100 175 50 H I C CNN F3 "" -100 175 50 H I C CNN DRAW P 2 0 1 10 -100 0 -100 -25 N P 2 0 1 10 -100 0 -50 0 N P 2 0 1 10 50 0 100 0 N P 2 0 1 10 50 50 50 -50 N P 2 0 1 0 100 -25 100 0 N P 2 0 1 10 100 275 100 -75 N P 3 0 1 10 -50 50 -50 -50 -50 0 N P 3 0 1 10 150 275 100 75 50 275 N P 5 0 1 10 -25 50 25 50 25 -50 -25 -50 -25 50 N X FEED 1 -100 -100 100 U 50 50 1 1 I X PCB_Trace 2 100 -100 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Antenna_Dipole # DEF Antenna_Dipole AE 0 40 N N 1 F N F0 "AE" 50 50 50 H V C CNN F1 "Antenna_Dipole" 50 0 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 8 0 1 10 100 -150 100 -100 200 -100 200 -50 -100 -50 -100 -100 0 -100 0 -150 N X ~ 1 0 -200 100 U 50 50 1 1 I X ~ 2 100 -200 100 U 50 50 1 1 I ENDDRAW ENDDEF # # Antenna_Loop # DEF Antenna_Loop AE 0 40 N N 1 F N F0 "AE" 50 250 50 H V C CNN F1 "Antenna_Loop" 50 200 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 7 0 1 10 100 -150 100 -100 200 0 50 150 -100 0 0 -100 0 -150 N X ~ 1 0 -200 100 U 50 50 1 1 I X ~ 2 100 -200 100 U 50 50 1 1 I ENDDRAW ENDDEF # # Antenna_Shield # DEF Antenna_Shield AE 0 40 N N 1 F N F0 "AE" -75 175 50 H V R CNN F1 "Antenna_Shield" -75 100 50 H V R CNN F2 "" 0 100 50 H I C CNN F3 "" 0 100 50 H I C CNN DRAW A -1 -73 32 -882 1242 0 1 0 N 0 -105 -20 -45 A 1 -73 32 -918 558 0 1 0 N 0 -105 20 -45 C 30 -75 7 0 1 0 F P 2 0 1 0 0 -100 0 0 N P 2 0 1 10 0 200 0 -150 N P 2 0 1 0 30 -75 100 -75 N P 2 0 1 0 100 -100 100 -75 N P 3 0 1 10 50 200 0 0 -50 200 N X A 1 0 -200 100 U 50 50 1 1 I X Shield 2 100 -200 100 U 50 50 1 1 I ENDDRAW ENDDEF # # Battery # DEF Battery BT 0 0 N N 1 F N F0 "BT" 100 100 50 H V L CNN F1 "Battery" 100 0 50 H V L CNN F2 "" 0 60 50 V I C CNN F3 "" 0 60 50 V I C CNN DRAW S -80 -55 80 -65 0 1 0 F S -80 70 80 60 0 1 0 F S -52 -78 50 -98 0 1 0 F S -52 47 50 27 0 1 0 F P 2 0 1 0 0 -60 0 -50 N P 2 0 1 0 0 -40 0 -30 N P 2 0 1 0 0 -20 0 -10 N P 2 0 1 0 0 0 0 10 N P 2 0 1 0 0 20 0 30 N P 2 0 1 0 0 70 0 100 N P 2 0 1 10 10 105 50 105 N P 2 0 1 10 30 125 30 85 N X + 1 0 200 100 D 50 50 1 1 P X - 2 0 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Battery_Cell # DEF Battery_Cell BT 0 0 N N 1 F N F0 "BT" 100 100 50 H V L CNN F1 "Battery_Cell" 100 0 50 H V L CNN F2 "" 0 60 50 V I C CNN F3 "" 0 60 50 V I C CNN DRAW S -90 70 90 60 0 1 0 F S -62 47 58 27 0 1 0 F P 2 0 1 0 0 30 0 0 N P 2 0 1 0 0 70 0 100 N P 2 0 1 10 20 135 60 135 N P 2 0 1 10 40 155 40 115 N X + 1 0 200 100 D 50 50 1 1 P X - 2 0 -100 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Buzzer # DEF Buzzer BZ 0 1 Y N 1 F N F0 "BZ" 150 50 50 H V L CNN F1 "Buzzer" 150 -50 50 H V L CNN F2 "" -25 100 50 V I C CNN F3 "" -25 100 50 V I C CNN $FPLIST *Buzzer* $ENDFPLIST DRAW A 0 0 125 -899 899 0 1 0 N 0 -125 0 125 P 2 0 1 0 -65 75 -45 75 N P 2 0 1 0 -55 85 -55 65 N P 2 0 1 0 0 125 0 -125 N X - 1 -100 100 100 R 50 50 1 1 P X + 2 -100 -100 100 R 50 50 1 1 P ENDDRAW ENDDEF # # C # DEF C C 0 10 N Y 1 F N F0 "C" 25 100 50 H V L CNN F1 "C" 25 -100 50 H V L CNN F2 "" 38 -150 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST C_* $ENDFPLIST DRAW P 2 0 1 20 -80 -30 80 -30 N P 2 0 1 20 -80 30 80 30 N X ~ 1 0 150 110 D 50 50 1 1 P X ~ 2 0 -150 110 U 50 50 1 1 P ENDDRAW ENDDEF # # CP # DEF CP C 0 10 N Y 1 F N F0 "C" 25 100 50 H V L CNN F1 "CP" 25 -100 50 H V L CNN F2 "" 38 -150 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST CP_* $ENDFPLIST DRAW S -90 20 90 40 0 1 0 N S 90 -20 -90 -40 0 1 0 F P 2 0 1 0 -70 90 -30 90 N P 2 0 1 0 -50 110 -50 70 N X ~ 1 0 150 110 D 50 50 1 1 P X ~ 2 0 -150 110 U 50 50 1 1 P ENDDRAW ENDDEF # # CP1 # DEF CP1 C 0 10 N N 1 F N F0 "C" 25 100 50 H V L CNN F1 "CP1" 25 -100 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST CP_* $ENDFPLIST DRAW A 0 -150 128 1287 513 0 1 20 N -80 -50 80 -50 P 2 0 1 20 -80 30 80 30 N P 2 0 1 0 -70 90 -30 90 N P 2 0 1 0 -50 70 -50 110 N X ~ 1 0 150 110 D 50 50 1 1 P X ~ 2 0 -150 130 U 50 50 1 1 P ENDDRAW ENDDEF # # CP1_Small # DEF CP1_Small C 0 10 N N 1 F N F0 "C" 10 70 50 H V L CNN F1 "CP1_Small" 10 -80 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST CP_* $ENDFPLIST DRAW A 0 -140 125 1186 614 0 1 12 N -60 -30 60 -30 P 2 0 1 12 -60 20 60 20 N P 2 0 1 0 -50 60 -30 60 N P 2 0 1 0 -40 50 -40 70 N X ~ 1 0 100 80 D 50 50 1 1 P X ~ 2 0 -100 80 U 50 50 1 1 P ENDDRAW ENDDEF # # CP_Small # DEF CP_Small C 0 10 N N 1 F N F0 "C" 10 70 50 H V L CNN F1 "CP_Small" 10 -80 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST CP_* $ENDFPLIST DRAW S -60 -12 60 -27 0 1 0 F S -60 27 60 12 0 1 0 N P 2 0 1 0 -50 60 -30 60 N P 2 0 1 0 -40 50 -40 70 N X ~ 1 0 100 73 D 50 50 1 1 P X ~ 2 0 -100 73 U 50 50 1 1 P ENDDRAW ENDDEF # # CTRIM # DEF CTRIM C 0 10 N N 1 F N F0 "C" 60 -80 50 H V C CNN F1 "CTRIM" 120 -140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 20 -80 -30 80 -30 N P 2 0 1 20 -80 30 80 30 N P 2 0 1 12 50 100 -50 -100 N P 2 0 1 12 50 100 15 120 N P 2 0 1 12 50 100 85 80 N X ~ 1 0 150 120 D 50 50 1 1 P X ~ 2 0 -150 120 U 50 50 1 1 P ENDDRAW ENDDEF # # CTRIM_DIF # DEF CTRIM_DIF C 0 10 Y N 1 F N F0 "C" 200 50 50 H V L CNN F1 "CTRIM_DIF" 200 -25 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 20 -160 -30 160 -30 N P 2 0 1 20 -160 30 -40 30 N P 2 0 1 0 -100 50 -100 30 N P 2 0 1 0 -60 90 110 -80 N P 2 0 1 0 0 -50 0 -30 N P 2 0 1 20 40 30 160 30 N P 2 0 1 0 100 50 100 30 N P 3 0 1 0 -30 90 -60 90 -60 60 N X ~ 1 -100 150 100 D 50 50 1 1 P X ~ 2 0 -150 100 U 50 50 1 1 P X ~ 3 100 150 100 D 50 50 1 1 P ENDDRAW ENDDEF # # CTRIM_Small # DEF CTRIM_Small C 0 10 N N 1 F N F0 "C" 60 -80 50 H V C CNN F1 "CTRIM_Small" 120 -140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST C_* $ENDFPLIST DRAW P 2 0 1 12 -60 -20 60 -20 N P 2 0 1 12 -60 20 60 20 N P 2 0 1 7 30 60 -30 -60 N P 2 0 1 7 50 50 15 70 N X ~ 1 0 100 80 D 50 50 1 1 P X ~ 2 0 -100 80 U 50 50 1 1 P ENDDRAW ENDDEF # # C_Feedthrough # DEF C_Feedthrough C 0 10 Y N 1 F N F0 "C" 0 300 50 H V C CNN F1 "C_Feedthrough" 0 225 50 H V C CNN F2 "" 0 0 50 V I C CNN F3 "" 0 0 50 V I C CNN ALIAS EMI_Filter_C DRAW S -65 60 60 80 0 1 0 F S 60 120 -65 140 0 1 0 F P 2 0 1 0 -100 100 100 100 N P 2 0 1 0 0 0 0 70 N X 1 1 -200 100 100 R 50 50 1 1 P X 2 2 0 -100 100 U 50 50 1 1 P X 3 3 200 100 100 L 50 50 1 1 P ENDDRAW ENDDEF # # C_Small # DEF C_Small C 0 10 N N 1 F N F0 "C" 10 70 50 H V L CNN F1 "C_Small" 10 -80 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST C_* $ENDFPLIST DRAW P 2 0 1 13 -60 -20 60 -20 N P 2 0 1 12 -60 20 60 20 N X ~ 1 0 100 80 D 50 50 1 1 P X ~ 2 0 -100 80 U 50 50 1 1 P ENDDRAW ENDDEF # # C_Variable # DEF C_Variable C 0 10 N N 1 F N F0 "C" 25 -75 50 H V L CNN F1 "C_Variable" 25 -150 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 20 -80 -30 80 -30 N P 2 0 1 20 -80 30 80 30 N P 2 0 1 12 50 100 -50 -100 N P 2 0 1 12 50 100 20 90 N P 2 0 1 12 50 100 60 70 N X ~ 1 0 150 120 D 50 50 1 1 P X ~ 2 0 -150 120 U 50 50 1 1 P ENDDRAW ENDDEF # # CircuitBreaker_1P # DEF CircuitBreaker_1P CB 0 20 Y Y 1 F N F0 "CB" 75 0 50 H V L CNN F1 "CircuitBreaker_1P" 75 75 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 0 -200 0 -150 N P 2 0 1 0 0 -150 -100 150 N P 2 1 1 0 -25 175 25 125 N P 2 1 1 0 0 200 0 150 N P 2 1 1 0 25 175 -25 125 N X ~ 1 0 300 100 D 50 50 1 1 P X ~ 2 0 -300 100 U 50 50 1 1 P ENDDRAW ENDDEF # # CircuitBreaker_1P_US # DEF CircuitBreaker_1P_US CB 0 20 Y Y 1 F N F0 "CB" 125 -50 50 H V L CNN F1 "CircuitBreaker_1P_US" 125 25 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW A -225 0 335 266 -266 0 1 0 N 75 150 75 -150 C 0 -175 25 0 1 0 N C 0 175 25 0 1 0 N X ~ 1 0 300 100 D 50 50 1 1 P X ~ 2 0 -300 100 U 50 50 1 1 P ENDDRAW ENDDEF # # CircuitBreaker_2P # DEF CircuitBreaker_2P CB 0 20 Y Y 1 F N F0 "CB" 150 0 50 H V L CNN F1 "CircuitBreaker_2P" 150 100 50 H V L CNN F2 "" -100 0 50 H I C CNN F3 "" -100 0 50 H I C CNN DRAW P 2 0 1 0 -150 0 -90 0 N P 2 0 1 0 -100 -150 -200 150 N P 2 0 1 0 -70 0 -20 0 N P 2 0 1 0 0 0 50 0 N P 2 0 1 0 100 -200 100 -150 N P 2 0 1 0 100 -150 0 150 N P 2 1 1 0 -125 175 -75 125 N P 2 1 1 0 -100 -150 -100 -200 N P 2 1 1 0 -100 200 -100 150 N P 2 1 1 0 -75 175 -125 125 N P 2 1 1 0 75 175 125 125 N P 2 1 1 0 100 200 100 150 N P 2 1 1 0 125 175 75 125 N X ~ 1 -100 300 100 D 50 50 1 1 P X ~ 2 -100 -300 100 U 50 50 1 1 P X ~ 3 100 300 100 D 50 50 1 1 P X ~ 4 100 -300 100 U 50 50 1 1 P ENDDRAW ENDDEF # # CircuitBreaker_2P_US # DEF CircuitBreaker_2P_US CB 0 20 Y Y 1 F N F0 "CB" 250 -50 50 H V L CNN F1 "CircuitBreaker_2P_US" 250 50 50 H V L CNN F2 "" -100 0 50 H I C CNN F3 "" -100 0 50 H I C CNN DRAW A -325 0 335 266 -266 0 1 0 N -25 150 -25 -150 A -125 0 335 266 -266 1 1 0 N 175 150 175 -150 C -100 -175 25 0 1 0 N C -100 175 25 0 1 0 N C 100 -175 25 1 1 0 N C 100 175 25 1 1 0 N P 2 0 1 0 10 0 10 0 N P 2 0 1 0 10 0 50 0 N P 2 0 1 0 70 0 110 0 N P 2 0 1 0 130 0 170 0 N P 2 0 1 0 190 0 210 0 N X ~ 1 -100 300 100 D 50 50 1 1 P X ~ 2 -100 -300 100 U 50 50 1 1 P X ~ 3 100 300 100 D 50 50 1 1 P X ~ 4 100 -300 100 U 50 50 1 1 P ENDDRAW ENDDEF # # CircuitBreaker_3P # DEF CircuitBreaker_3P CB 0 20 Y Y 1 F N F0 "CB" 250 0 50 H V L CNN F1 "CircuitBreaker_3P" 250 100 50 H V L CNN F2 "" 300 -100 50 H I C CNN F3 "" 250 0 50 H I C CNN DRAW P 2 0 1 0 -250 0 -190 0 N P 2 0 1 0 -225 175 -175 125 N P 2 0 1 0 -200 -200 -200 -150 N P 2 0 1 0 -200 -150 -300 150 N P 2 0 1 0 -200 200 -200 150 N P 2 0 1 0 -175 175 -225 125 N P 2 0 1 0 -90 0 -20 0 N P 2 0 1 0 0 -200 0 -150 N P 2 0 1 0 0 -150 -100 150 N P 2 0 1 0 0 0 60 0 N P 2 0 1 0 0 200 0 150 N P 2 0 1 0 25 175 -25 125 N P 2 0 1 0 80 0 150 0 N P 2 0 1 0 175 175 225 125 N P 2 0 1 0 200 -200 200 -150 N P 2 0 1 0 200 -150 100 150 N P 2 0 1 0 200 200 200 150 N P 2 0 1 0 225 175 175 125 N P 3 0 1 0 -170 0 -110 0 -120 0 N P 3 0 1 0 -25 175 0 150 25 125 N X ~ 1 -200 300 100 D 50 50 1 1 P X ~ 2 -200 -300 100 U 50 50 1 1 P X ~ 3 0 300 100 D 50 50 1 1 P X ~ 4 0 -300 100 U 50 50 1 1 P X ~ 5 200 300 100 D 50 50 1 1 P X ~ 6 200 -300 100 U 50 50 1 1 P ENDDRAW ENDDEF # # CircuitBreaker_3P_US # DEF CircuitBreaker_3P_US CB 0 20 Y Y 1 F N F0 "CB" 400 0 50 H V L CNN F1 "CircuitBreaker_3P_US" 400 100 50 H V L CNN F2 "" 300 -100 50 H I C CNN F3 "" 400 0 50 H I C CNN DRAW A -225 0 335 266 -266 0 1 0 N 75 150 75 -150 A -425 0 335 266 -266 1 1 0 N -125 150 -125 -150 A -25 0 335 266 -266 1 1 0 N 275 150 275 -150 C 0 -175 25 0 1 0 N C 0 175 25 0 1 0 N C -200 -175 25 1 1 0 N C -200 175 25 1 1 0 N C 200 -175 25 1 1 0 N C 200 175 25 1 1 0 N P 2 0 1 0 -90 0 -50 0 N P 2 0 1 0 -30 0 10 0 N P 2 0 1 0 30 0 70 0 N P 2 0 1 0 90 0 130 0 N P 2 0 1 0 150 0 190 0 N P 2 0 1 0 210 0 250 0 N P 2 0 1 0 270 0 310 0 N X ~ 1 -200 300 100 D 50 50 1 1 P X ~ 2 -200 -300 100 U 50 50 1 1 P X ~ 3 0 300 100 D 50 50 1 1 P X ~ 4 0 -300 100 U 50 50 1 1 P X ~ 5 200 300 100 D 50 50 1 1 P X ~ 6 200 -300 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Crystal # DEF Crystal Y 0 40 N N 1 F N F0 "Y" 0 150 50 H V C CNN F1 "Crystal" 0 -150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Crystal* $ENDFPLIST DRAW S -45 100 45 -100 0 1 12 N P 2 0 1 0 -100 0 -75 0 N P 2 0 1 20 -75 -50 -75 50 N P 2 0 1 20 75 -50 75 50 N P 2 0 1 0 100 0 75 0 N X 1 1 -150 0 50 R 50 50 1 1 P X 2 2 150 0 50 L 50 50 1 1 P ENDDRAW ENDDEF # # Crystal_GND2 # DEF Crystal_GND2 Y 0 40 Y N 1 F N F0 "Y" 0 225 50 H V C CNN F1 "Crystal_GND2" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Crystal* $ENDFPLIST DRAW S -45 100 45 -100 0 1 12 N P 2 0 1 0 -100 0 -75 0 N P 2 0 1 20 -75 -50 -75 50 N P 2 0 1 0 0 -150 0 -140 N P 2 0 1 0 75 0 100 0 N P 2 0 1 20 75 50 75 -50 N P 4 0 1 0 -100 -90 -100 -140 100 -140 100 -90 N X 1 1 -150 0 50 R 50 50 1 1 P X 2 2 0 -200 50 U 50 50 1 1 P X 3 3 150 0 50 L 50 50 1 1 P ENDDRAW ENDDEF # # Crystal_GND23 # DEF Crystal_GND23 Y 0 40 Y N 1 F N F0 "Y" 125 200 50 H V L CNN F1 "Crystal_GND23" 125 125 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Crystal* $ENDFPLIST DRAW S -45 100 45 -100 0 1 12 N P 2 0 1 0 -100 0 -80 0 N P 2 0 1 20 -80 -50 -80 50 N P 2 0 1 0 0 -150 0 -140 N P 2 0 1 0 0 140 0 150 N P 2 0 1 20 80 -50 80 50 N P 2 0 1 0 80 0 100 0 N P 4 0 1 0 -100 -90 -100 -140 100 -140 100 -90 N P 4 0 1 0 -100 90 -100 140 100 140 100 90 N X 1 1 -150 0 50 R 50 50 1 1 P X 2 2 0 200 50 D 50 50 1 1 P X 3 3 0 -200 50 U 50 50 1 1 P X 4 4 150 0 50 L 50 50 1 1 P ENDDRAW ENDDEF # # Crystal_GND23_Small # DEF Crystal_GND23_Small Y 0 40 Y N 1 F N F0 "Y" 50 175 50 H V L CNN F1 "Crystal_GND23_Small" 50 100 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Crystal* $ENDFPLIST DRAW S -30 -60 30 60 0 1 0 N P 2 0 1 15 -50 -30 -50 30 N P 2 0 1 15 50 -30 50 30 N P 4 0 1 0 -50 -50 -50 -75 50 -75 50 -50 N P 4 0 1 0 -50 50 -50 75 50 75 50 50 N X 1 1 -100 0 50 R 30 50 1 1 P X 2 2 0 -100 25 U 30 50 1 1 P X 3 3 0 100 25 D 30 50 1 1 P X 4 4 100 0 50 L 30 50 1 1 P ENDDRAW ENDDEF # # Crystal_GND24 # DEF Crystal_GND24 Y 0 40 Y N 1 F N F0 "Y" 125 200 50 H V L CNN F1 "Crystal_GND24" 125 125 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Crystal* $ENDFPLIST DRAW S -45 100 45 -100 0 1 12 N P 2 0 1 0 -100 0 -80 0 N P 2 0 1 20 -80 -50 -80 50 N P 2 0 1 0 0 -150 0 -140 N P 2 0 1 0 0 140 0 150 N P 2 0 1 20 80 -50 80 50 N P 2 0 1 0 80 0 100 0 N P 4 0 1 0 -100 -90 -100 -140 100 -140 100 -90 N P 4 0 1 0 -100 90 -100 140 100 140 100 90 N X 1 1 -150 0 50 R 50 50 1 1 P X 2 2 0 200 50 D 50 50 1 1 P X 3 3 150 0 50 L 50 50 1 1 P X 4 4 0 -200 50 U 50 50 1 1 P ENDDRAW ENDDEF # # Crystal_GND24_Small # DEF Crystal_GND24_Small Y 0 40 Y N 1 F N F0 "Y" 50 175 50 H V L CNN F1 "Crystal_GND24_Small" 50 100 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Crystal* $ENDFPLIST DRAW S -30 -60 30 60 0 1 0 N P 2 0 1 15 -50 -30 -50 30 N P 2 0 1 15 50 -30 50 30 N P 4 0 1 0 -50 -50 -50 -75 50 -75 50 -50 N P 4 0 1 0 -50 50 -50 75 50 75 50 50 N X 1 1 -100 0 50 R 30 50 1 1 P X 2 2 0 -100 25 U 30 50 1 1 P X 3 3 100 0 50 L 30 50 1 1 P X 4 4 0 100 25 D 30 50 1 1 P ENDDRAW ENDDEF # # Crystal_GND2_Small # DEF Crystal_GND2_Small Y 0 40 Y N 1 F N F0 "Y" 0 200 50 H V C CNN F1 "Crystal_GND2_Small" 0 125 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Crystal* $ENDFPLIST DRAW S -30 -60 30 60 0 1 0 N P 2 0 1 15 -50 -30 -50 30 N P 2 0 1 15 50 -30 50 30 N P 4 0 1 0 -50 -50 -50 -75 50 -75 50 -50 N X 1 1 -100 0 50 R 30 50 1 1 P X 2 2 0 -100 25 U 30 50 1 1 P X 3 3 100 0 50 L 30 50 1 1 P ENDDRAW ENDDEF # # Crystal_GND3 # DEF Crystal_GND3 Y 0 40 Y N 1 F N F0 "Y" 0 225 50 H V C CNN F1 "Crystal_GND3" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Crystal* $ENDFPLIST DRAW S -45 100 45 -100 0 1 12 N P 2 0 1 0 -100 0 -75 0 N P 2 0 1 20 -75 -50 -75 50 N P 2 0 1 0 0 -150 0 -140 N P 2 0 1 0 75 0 100 0 N P 2 0 1 20 75 50 75 -50 N P 4 0 1 0 -100 -90 -100 -140 100 -140 100 -90 N X 1 1 -150 0 50 R 50 50 1 1 P X 2 2 150 0 50 L 50 50 1 1 P X 3 3 0 -200 50 U 50 50 1 1 P ENDDRAW ENDDEF # # Crystal_GND3_Small # DEF Crystal_GND3_Small Y 0 40 Y N 1 F N F0 "Y" 0 200 50 H V C CNN F1 "Crystal_GND3_Small" 0 125 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Crystal* $ENDFPLIST DRAW S -30 -60 30 60 0 1 0 N P 2 0 1 15 -50 -30 -50 30 N P 2 0 1 15 50 -30 50 30 N P 4 0 1 0 -50 -50 -50 -75 50 -75 50 -50 N X 1 1 -100 0 50 R 30 50 1 1 P X 2 2 100 0 50 L 30 50 1 1 P X 3 3 0 -100 25 U 30 50 1 1 P ENDDRAW ENDDEF # # Crystal_Small # DEF Crystal_Small Y 0 40 N N 1 F N F0 "Y" 0 100 50 H V C CNN F1 "Crystal_Small" 0 -100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Crystal* $ENDFPLIST DRAW S -30 -60 30 60 0 1 0 N P 2 0 1 15 -50 -30 -50 30 N P 2 0 1 15 50 -30 50 30 N X 1 1 -100 0 50 R 50 50 1 1 P X 2 2 100 0 50 L 50 50 1 1 P ENDDRAW ENDDEF # # D # DEF D D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "D" 0 -100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST TO-???* *_Diode_* *SingleDiode* D_* $ENDFPLIST DRAW P 2 0 1 10 -50 50 -50 -50 N P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # DIAC # DEF DIAC D 0 40 N N 1 F N F0 "D" 0 150 50 H V C CNN F1 "DIAC" 0 -150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST TO-???* *_Diode_* *SingleDiode* D_* $ENDFPLIST DRAW P 4 0 1 10 -50 -100 -50 100 50 50 -50 0 F P 4 0 1 10 50 100 50 -100 -50 -50 50 0 F X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # DIAC_ALT # DEF DIAC_ALT D 0 40 N N 1 F N F0 "D" 0 150 50 H V C CNN F1 "DIAC_ALT" 0 -150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST TO-???* *_Diode_* *SingleDiode* D_* $ENDFPLIST DRAW P 4 0 1 10 -50 -100 -50 100 50 50 -50 0 F P 4 0 1 10 50 100 50 -100 -50 -50 50 0 F X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # D_AAK # DEF D_AAK D 0 0 Y N 1 F N F0 "D" 0 100 50 H V C CNN F1 "D_AAK" 0 -100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST TO-???* *_Diode_* *SingleDiode* D_* $ENDFPLIST DRAW C 100 0 10 0 1 0 F P 2 0 1 10 -50 50 -50 -50 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 4 0 1 0 150 100 100 100 100 0 -50 0 N X A 1 200 100 100 L 50 50 1 1 P X A 2 200 0 100 L 50 50 1 1 P X K 3 -150 0 100 R 50 50 1 1 P ENDDRAW ENDDEF # # D_ALT # DEF D_ALT D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "D_ALT" 0 -100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST TO-???* *_Diode_* *SingleDiode* D_* $ENDFPLIST DRAW P 2 0 1 10 -50 50 -50 -50 N P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 F X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # D_Bridge_+-AA # DEF D_Bridge_+-AA D 0 0 Y Y 1 F N F0 "D" 100 275 50 H V L CNN F1 "D_Bridge_+-AA" 100 200 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST D*Bridge* D*Rectifier* $ENDFPLIST DRAW C -200 0 10 0 1 0 F C 0 -200 10 0 1 0 F C 0 200 10 0 1 0 F C 200 0 10 0 1 0 F P 2 0 1 10 -100 150 -50 100 N P 2 0 1 10 -50 -100 -100 -150 N P 2 0 1 10 100 -50 150 -100 N P 2 0 1 10 100 50 150 100 N P 4 0 1 10 -150 100 -100 50 -75 125 -150 100 N P 4 0 1 10 -100 -50 -150 -100 -75 -125 -100 -50 N P 4 0 1 10 50 100 100 150 125 75 50 100 N P 4 0 1 10 125 -75 50 -100 100 -150 125 -75 N P 5 0 1 0 -200 0 0 -200 200 0 0 200 -200 0 N X + 1 300 0 100 L 50 50 1 1 P X - 2 -300 0 100 R 50 50 1 1 P X ~~ 3 0 300 100 D 50 50 1 1 P X ~~ 4 0 -300 100 U 50 50 1 1 P ENDDRAW ENDDEF # # D_Bridge_+A-A # DEF D_Bridge_+A-A D 0 0 Y Y 1 F N F0 "D" 100 275 50 H V L CNN F1 "D_Bridge_+A-A" 100 200 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST D*Bridge* D*Rectifier* $ENDFPLIST DRAW C -200 0 10 0 1 0 F C 0 -200 10 0 1 0 F C 0 200 10 0 1 0 F C 200 0 10 0 1 0 F P 2 0 1 10 -100 150 -50 100 N P 2 0 1 10 -50 -100 -100 -150 N P 2 0 1 10 100 -50 150 -100 N P 2 0 1 10 100 50 150 100 N P 4 0 1 10 -150 100 -100 50 -75 125 -150 100 N P 4 0 1 10 -100 -50 -150 -100 -75 -125 -100 -50 N P 4 0 1 10 50 100 100 150 125 75 50 100 N P 4 0 1 10 125 -75 50 -100 100 -150 125 -75 N P 5 0 1 0 -200 0 0 -200 200 0 0 200 -200 0 N X + 1 300 0 100 L 50 50 1 1 P X ~~ 2 0 -300 100 U 50 50 1 1 P X - 3 -300 0 100 R 50 50 1 1 P X ~~ 4 0 300 100 D 50 50 1 1 P ENDDRAW ENDDEF # # D_Bridge_+AA- # DEF D_Bridge_+AA- D 0 0 Y Y 1 F N F0 "D" 100 275 50 H V L CNN F1 "D_Bridge_+AA-" 100 200 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST D*Bridge* D*Rectifier* $ENDFPLIST DRAW C -200 0 10 0 1 0 F C 0 -200 10 0 1 0 F C 0 200 10 0 1 0 F C 200 0 10 0 1 0 F P 2 0 1 10 -100 150 -50 100 N P 2 0 1 10 -50 -100 -100 -150 N P 2 0 1 10 100 -50 150 -100 N P 2 0 1 10 100 50 150 100 N P 4 0 1 10 -150 100 -100 50 -75 125 -150 100 N P 4 0 1 10 -100 -50 -150 -100 -75 -125 -100 -50 N P 4 0 1 10 50 100 100 150 125 75 50 100 N P 4 0 1 10 125 -75 50 -100 100 -150 125 -75 N P 5 0 1 0 -200 0 0 -200 200 0 0 200 -200 0 N X + 1 300 0 100 L 50 50 1 1 P X ~~ 2 0 300 100 D 50 50 1 1 P X ~~ 3 0 -300 100 U 50 50 1 1 P X - 4 -300 0 100 R 50 50 1 1 P ENDDRAW ENDDEF # # D_Bridge_-A+A # DEF D_Bridge_-A+A D 0 0 Y Y 1 F N F0 "D" 100 275 50 H V L CNN F1 "D_Bridge_-A+A" 100 200 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST D*Bridge* D*Rectifier* $ENDFPLIST DRAW C -200 0 10 0 1 0 F C 0 -200 10 0 1 0 F C 0 200 10 0 1 0 F C 200 0 10 0 1 0 F P 2 0 1 10 -100 150 -50 100 N P 2 0 1 10 -50 -100 -100 -150 N P 2 0 1 10 100 -50 150 -100 N P 2 0 1 10 100 50 150 100 N P 4 0 1 10 -150 100 -100 50 -75 125 -150 100 N P 4 0 1 10 -100 -50 -150 -100 -75 -125 -100 -50 N P 4 0 1 10 50 100 100 150 125 75 50 100 N P 4 0 1 10 125 -75 50 -100 100 -150 125 -75 N P 5 0 1 0 -200 0 0 -200 200 0 0 200 -200 0 N X - 1 -300 0 100 R 50 50 1 1 P X ~~ 2 0 -300 100 U 50 50 1 1 P X + 3 300 0 100 L 50 50 1 1 P X ~~ 4 0 300 100 D 50 50 1 1 P ENDDRAW ENDDEF # # D_Bridge_-AA+ # DEF D_Bridge_-AA+ D 0 0 Y Y 1 F N F0 "D" 100 275 50 H V L CNN F1 "D_Bridge_-AA+" 100 200 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST D*Bridge* D*Rectifier* $ENDFPLIST DRAW C -200 0 10 0 1 0 F C 0 -200 10 0 1 0 F C 0 200 10 0 1 0 F C 200 0 10 0 1 0 F P 2 0 1 10 -100 150 -50 100 N P 2 0 1 10 -50 -100 -100 -150 N P 2 0 1 10 100 -50 150 -100 N P 2 0 1 10 100 50 150 100 N P 4 0 1 10 -150 100 -100 50 -75 125 -150 100 N P 4 0 1 10 -100 -50 -150 -100 -75 -125 -100 -50 N P 4 0 1 10 50 100 100 150 125 75 50 100 N P 4 0 1 10 125 -75 50 -100 100 -150 125 -75 N P 5 0 1 0 -200 0 0 -200 200 0 0 200 -200 0 N X - 1 -300 0 100 R 50 50 1 1 P X ~~ 2 0 300 100 D 50 50 1 1 P X ~~ 3 0 -300 100 U 50 50 1 1 P X + 4 300 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # D_Capacitance # DEF D_Capacitance D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "D_Capacitance" 0 -130 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST TO-???* *_Diode_* *SingleDiode* D_* $ENDFPLIST DRAW P 2 0 1 0 -50 -70 -6 -70 N P 2 0 1 0 -50 0 50 0 N P 2 0 1 10 -50 50 -50 -50 N P 2 0 1 0 -6 -50 -6 -90 N P 2 0 1 0 6 -70 50 -70 N P 2 0 1 0 6 -50 6 -90 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # D_Capacitance_ALT # DEF D_Capacitance_ALT D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "D_Capacitance_ALT" 0 -130 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST TO-???* *_Diode_* *SingleDiode* D_* $ENDFPLIST DRAW P 2 0 1 0 -50 -70 -6 -70 N P 2 0 1 0 -50 0 50 0 N P 2 0 1 10 -50 50 -50 -50 N P 2 0 1 0 -6 -50 -6 -90 N P 2 0 1 0 6 -70 50 -70 N P 2 0 1 0 6 -50 6 -90 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 F X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # D_KAA # DEF D_KAA D 0 0 Y N 1 F N F0 "D" 0 100 50 H V C CNN F1 "D_KAA" 0 -100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST TO-???* *_Diode_* *SingleDiode* D_* $ENDFPLIST DRAW C 100 0 10 0 1 0 F P 2 0 1 10 -50 50 -50 -50 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 4 0 1 0 150 100 100 100 100 0 -50 0 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 200 100 100 L 50 50 1 1 I X A 3 200 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # D_KAK # DEF D_KAK D 0 0 Y N 1 F N F0 "D" 0 100 50 H V C CNN F1 "D_KAK" 0 -100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST TO-???* *_Diode_* *SingleDiode* D_* $ENDFPLIST DRAW C -150 0 10 0 1 0 F P 2 0 1 10 -50 50 -50 -50 N P 3 0 1 0 -150 100 -150 0 100 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N X K 1 -250 100 100 R 50 50 1 1 P X A 2 200 0 100 L 50 50 1 1 P X K 3 -250 0 100 R 50 50 1 1 P ENDDRAW ENDDEF # # D_KKA # DEF D_KKA D 0 0 Y N 1 F N F0 "D" 0 100 50 H V C CNN F1 "D_KKA" 0 -100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST TO-???* *_Diode_* *SingleDiode* D_* $ENDFPLIST DRAW C -150 0 10 0 1 0 F P 2 0 1 10 -50 50 -50 -50 N P 4 0 1 0 -200 100 -150 100 -150 0 100 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N X K 1 -250 100 100 R 50 50 1 1 I X K 2 -250 0 100 R 50 50 1 1 P X A 3 200 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # D_Photo # DEF D_Photo D 0 20 N N 1 F N F0 "D" 20 70 50 H V L CNN F1 "D_Photo" -40 -110 50 H V C CNN F2 "" -50 0 50 H I C CNN F3 "" -50 0 50 H I C CNN DRAW P 2 0 1 10 -100 50 -100 -50 N P 2 0 1 0 -80 70 -60 70 N P 2 0 1 0 0 0 -100 0 N P 3 0 1 0 -20 130 -80 70 -80 90 N P 4 0 1 10 0 -50 0 50 -100 0 0 -50 N P 5 0 1 0 30 130 -30 70 -30 90 -30 70 -10 70 N X K 1 -200 0 100 R 50 50 1 1 P X A 2 100 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # D_Photo_ALT # DEF D_Photo_ALT D 0 20 N N 1 F N F0 "D" 20 70 50 H V L CNN F1 "D_Photo_ALT" -40 -110 50 H V C CNN F2 "" -50 0 50 H I C CNN F3 "" -50 0 50 H I C CNN DRAW P 2 0 1 10 -100 50 -100 -50 N P 2 0 1 0 -80 70 -60 70 N P 2 0 1 0 0 0 -100 0 N P 3 0 1 0 -20 130 -80 70 -80 90 N P 4 0 1 10 0 -50 0 50 -100 0 0 -50 F P 5 0 1 0 30 130 -30 70 -30 90 -30 70 -10 70 N X K 1 -200 0 100 R 50 50 1 1 P X A 2 100 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # D_Radiation # DEF D_Radiation D 0 40 N N 1 F N F0 "D" -50 -90 50 H V C CNN F1 "D_Radiation" -50 -160 50 H V C CNN F2 "" -50 0 50 H I C CNN F3 "" -50 0 50 H I C CNN DRAW A -30 130 22 634 -1534 0 1 0 N -20 150 -50 120 A -10 170 22 -1166 266 0 1 0 N -20 150 10 180 A 10 110 22 634 -1534 0 1 0 N 20 130 -10 100 A 30 150 22 -1166 266 0 1 0 N 20 130 50 160 A 30 190 22 -1534 634 0 1 0 N 10 180 40 210 A 70 170 22 -1534 634 0 1 0 N 50 160 80 190 P 2 0 1 10 -100 50 -100 -50 N P 2 0 1 0 -80 90 -50 90 N P 2 0 1 0 -80 90 -50 120 N P 2 0 1 0 -80 120 -80 90 N P 2 0 1 0 -40 70 -10 70 N P 2 0 1 0 -40 70 -10 100 N P 2 0 1 0 -40 100 -40 70 N P 2 0 1 0 0 0 -100 0 N P 4 0 1 10 0 50 0 -50 -100 0 0 50 N X K 1 -200 0 100 R 50 50 1 1 P X A 2 100 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # D_Radiation_ALT # DEF D_Radiation_ALT D 0 40 N N 1 F N F0 "D" -50 -90 50 H V C CNN F1 "D_Radiation_ALT" -50 -160 50 H V C CNN F2 "" -50 0 50 H I C CNN F3 "" -50 0 50 H I C CNN DRAW A -30 130 22 634 -1534 0 1 0 N -20 150 -50 120 A -10 170 22 -1166 266 0 1 0 N -20 150 10 180 A 10 110 22 634 -1534 0 1 0 N 20 130 -10 100 A 30 150 22 -1166 266 0 1 0 N 20 130 50 160 A 30 190 22 -1534 634 0 1 0 N 10 180 40 210 A 70 170 22 -1534 634 0 1 0 N 50 160 80 190 P 2 0 1 10 -100 50 -100 -50 N P 2 0 1 0 -80 90 -50 90 N P 2 0 1 0 -80 90 -50 120 N P 2 0 1 0 -80 120 -80 90 N P 2 0 1 0 -40 70 -10 70 N P 2 0 1 0 -40 70 -10 100 N P 2 0 1 0 -40 100 -40 70 N P 2 0 1 0 0 0 -100 0 N P 4 0 1 10 0 50 0 -50 -100 0 0 50 F X K 1 -200 0 100 R 50 50 1 1 P X A 2 100 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # D_Schottky # DEF D_Schottky D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "D_Schottky" 0 -100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST TO-???* *_Diode_* *SingleDiode* D_* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 6 0 1 10 -75 25 -75 50 -50 50 -50 -50 -25 -50 -25 -25 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # D_Schottky_AAK # DEF D_Schottky_AAK D 0 0 Y N 1 F N F0 "D" 0 100 50 H V C CNN F1 "D_Schottky_AAK" 0 -100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST TO-???* *_Diode_* *SingleDiode* D_* $ENDFPLIST DRAW C 100 0 10 0 1 0 F P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 4 0 1 0 150 100 100 100 100 0 -50 0 N P 6 0 1 10 -75 25 -75 50 -50 50 -50 -50 -25 -50 -25 -25 N X A 1 200 100 100 L 50 50 1 1 P X A 2 200 0 100 L 50 50 1 1 P X K 3 -150 0 100 R 50 50 1 1 P ENDDRAW ENDDEF # # D_Schottky_AKA # DEF D_Schottky_AKA D 0 0 Y N 1 F N F0 "D" 0 100 50 H V C CNN F1 "D_Schottky_AKA" 0 -100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST TO-???* *_Diode_* *SingleDiode* D_* $ENDFPLIST DRAW C 100 0 10 0 1 0 F P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 4 0 1 0 150 100 100 100 100 0 -50 0 N P 6 0 1 10 -75 25 -75 50 -50 50 -50 -50 -25 -50 -25 -25 N X A 1 200 100 100 L 50 50 1 1 I X K 2 -150 0 100 R 50 50 1 1 P X A 3 200 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # D_Schottky_AKK # DEF D_Schottky_AKK D 0 0 Y N 1 F N F0 "D" 0 100 50 H V C CNN F1 "D_Schottky_AKK" 0 -100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST TO-???* *_Diode_* *SingleDiode* D_* $ENDFPLIST DRAW C -150 0 10 0 1 0 F P 4 0 1 0 -200 100 -150 100 -150 0 100 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 6 0 1 10 -75 25 -75 50 -50 50 -50 -50 -25 -50 -25 -25 N X A 1 200 0 100 L 50 50 1 1 P X K 2 -250 100 100 R 50 50 1 1 I X K 3 -250 0 100 R 50 50 1 1 P ENDDRAW ENDDEF # # D_Schottky_ALT # DEF D_Schottky_ALT D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "D_Schottky_ALT" 0 -100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST TO-???* *_Diode_* *SingleDiode* D_* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 F P 6 0 1 10 -75 25 -75 50 -50 50 -50 -50 -25 -50 -25 -25 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # D_Schottky_KAA # DEF D_Schottky_KAA D 0 0 Y N 1 F N F0 "D" 0 100 50 H V C CNN F1 "D_Schottky_KAA" 0 -100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST TO-???* *_Diode_* *SingleDiode* D_* $ENDFPLIST DRAW C 100 0 10 0 1 0 F P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 4 0 1 0 150 100 100 100 100 0 -50 0 N P 6 0 1 10 -75 25 -75 50 -50 50 -50 -50 -25 -50 -25 -25 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 200 100 100 L 50 50 1 1 I X A 3 200 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # D_Schottky_KAK # DEF D_Schottky_KAK D 0 0 Y N 1 F N F0 "D" 0 100 50 H V C CNN F1 "D_Schottky_KAK" 0 -100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST TO-???* *_Diode_* *SingleDiode* D_* $ENDFPLIST DRAW C -150 0 10 0 1 0 F P 3 0 1 0 -150 100 -150 0 100 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 6 0 1 10 -75 25 -75 50 -50 50 -50 -50 -25 -50 -25 -25 N X K 1 -250 100 100 R 50 50 1 1 P X A 2 200 0 100 L 50 50 1 1 P X K 3 -250 0 100 R 50 50 1 1 P ENDDRAW ENDDEF # # D_Schottky_KKA # DEF D_Schottky_KKA D 0 0 Y N 1 F N F0 "D" 0 100 50 H V C CNN F1 "D_Schottky_KKA" 0 -100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST TO-???* *_Diode_* *SingleDiode* D_* $ENDFPLIST DRAW C -150 0 10 0 1 0 F P 4 0 1 0 -200 100 -150 100 -150 0 100 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 6 0 1 10 -75 25 -75 50 -50 50 -50 -50 -25 -50 -25 -25 N X K 1 -250 100 100 R 50 50 1 1 I X K 2 -250 0 100 R 50 50 1 1 P X A 3 200 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # D_Schottky_Small # DEF D_Schottky_Small D 0 10 N N 1 F N F0 "D" -50 80 50 H V L CNN F1 "D_Schottky_Small" -280 -80 50 H V L CNN F2 "" 0 0 50 V I C CNN F3 "" 0 0 50 V I C CNN $FPLIST TO-???* *_Diode_* *SingleDiode* D_* $ENDFPLIST DRAW P 2 0 1 0 -30 0 30 0 N P 4 0 1 10 30 -40 -30 0 30 40 30 -40 N P 6 0 1 10 -50 30 -50 40 -30 40 -30 -40 -10 -40 -10 -30 N X K 1 -100 0 70 R 50 50 1 1 P X A 2 100 0 70 L 50 50 1 1 P ENDDRAW ENDDEF # # D_Schottky_Small_ALT # DEF D_Schottky_Small_ALT D 0 10 N N 1 F N F0 "D" -50 80 50 H V L CNN F1 "D_Schottky_Small_ALT" -280 -80 50 H V L CNN F2 "" 0 0 50 V I C CNN F3 "" 0 0 50 V I C CNN $FPLIST TO-???* *_Diode_* *SingleDiode* D_* $ENDFPLIST DRAW P 2 0 1 0 -30 0 30 0 N P 4 0 1 10 30 -40 -30 0 30 40 30 -40 F P 6 0 1 10 -50 30 -50 40 -30 40 -30 -40 -10 -40 -10 -30 N X K 1 -100 0 70 R 50 50 1 1 P X A 2 100 0 70 L 50 50 1 1 P ENDDRAW ENDDEF # # D_Schottky_x2_ACom_AKK # DEF D_Schottky_x2_ACom_AKK D 0 30 Y N 1 F N F0 "D" 50 -100 50 H V C CNN F1 "D_Schottky_x2_ACom_AKK" 0 100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 0 0 10 0 1 0 F P 2 0 1 0 -140 0 150 0 N P 2 0 1 0 0 0 0 -100 N P 3 0 1 10 -150 50 -150 -50 -150 -50 N P 3 0 1 10 150 50 150 -50 150 -50 N P 4 0 1 10 -150 50 -170 50 -170 40 -170 40 N P 4 0 1 10 150 -50 170 -50 170 -40 170 -40 N P 4 0 1 10 150 50 130 50 130 40 130 40 N P 5 0 1 10 -130 -40 -130 -50 -150 -50 -150 -50 -150 -50 N P 6 0 1 10 -50 -50 -150 0 -50 50 -50 -50 -50 -50 -50 -50 N P 6 0 1 10 50 50 150 0 50 -50 50 50 50 50 50 50 N X A 1 0 -200 100 U 50 50 0 1 P X K 2 -300 0 150 R 50 50 0 1 P X K 3 300 0 150 L 50 50 0 1 P ENDDRAW ENDDEF # # D_Schottky_x2_ACom_KAK # DEF D_Schottky_x2_ACom_KAK D 0 30 Y N 1 F N F0 "D" 50 -100 50 H V C CNN F1 "D_Schottky_x2_ACom_KAK" 0 100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 0 0 10 0 1 0 F P 2 0 1 0 -140 0 150 0 N P 2 0 1 0 0 0 0 -100 N P 3 0 1 10 -150 50 -150 -50 -150 -50 N P 3 0 1 10 150 50 150 -50 150 -50 N P 4 0 1 10 -150 50 -170 50 -170 40 -170 40 N P 4 0 1 10 150 -50 170 -50 170 -40 170 -40 N P 4 0 1 10 150 50 130 50 130 40 130 40 N P 5 0 1 10 -130 -40 -130 -50 -150 -50 -150 -50 -150 -50 N P 6 0 1 10 -50 -50 -150 0 -50 50 -50 -50 -50 -50 -50 -50 N P 6 0 1 10 50 50 150 0 50 -50 50 50 50 50 50 50 N X K 1 -300 0 150 R 50 50 0 1 P X A 2 0 -200 100 U 50 50 0 1 P X K 3 300 0 150 L 50 50 0 1 P ENDDRAW ENDDEF # # D_Schottky_x2_ACom_KKA # DEF D_Schottky_x2_ACom_KKA D 0 30 Y N 1 F N F0 "D" 50 -100 50 H V C CNN F1 "D_Schottky_x2_ACom_KKA" 0 100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 0 0 10 0 1 0 F P 2 0 1 0 -140 0 150 0 N P 2 0 1 0 0 0 0 -100 N P 3 0 1 10 -150 50 -150 -50 -150 -50 N P 3 0 1 10 150 50 150 -50 150 -50 N P 4 0 1 10 -150 50 -170 50 -170 40 -170 40 N P 4 0 1 10 150 -50 170 -50 170 -40 170 -40 N P 4 0 1 10 150 50 130 50 130 40 130 40 N P 5 0 1 10 -130 -40 -130 -50 -150 -50 -150 -50 -150 -50 N P 6 0 1 10 -50 -50 -150 0 -50 50 -50 -50 -50 -50 -50 -50 N P 6 0 1 10 50 50 150 0 50 -50 50 50 50 50 50 50 N X K 1 -300 0 150 R 50 50 0 1 P X K 2 300 0 150 L 50 50 0 1 P X A 3 0 -200 100 U 50 50 0 1 P ENDDRAW ENDDEF # # D_Schottky_x2_KCom_AAK # DEF D_Schottky_x2_KCom_AAK D 0 30 Y N 1 F N F0 "D" 50 -100 50 H V C CNN F1 "D_Schottky_x2_KCom_AAK" 0 100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 0 0 10 0 1 0 F P 2 0 1 0 -150 0 150 0 N P 2 0 1 0 0 0 0 -100 N P 3 0 1 10 -50 -50 -50 50 -50 50 N P 3 0 1 10 50 -50 50 50 50 50 N P 4 0 1 10 -50 -50 -30 -50 -30 -40 -30 -40 N P 4 0 1 10 50 -50 70 -50 70 -40 70 -40 N P 4 0 1 10 50 50 30 50 30 40 30 40 N P 5 0 1 10 -70 40 -70 50 -50 50 -50 50 -50 50 N P 6 0 1 10 -150 50 -50 0 -150 -50 -150 50 -150 50 -150 50 N P 6 0 1 10 150 -50 50 0 150 50 150 -50 150 -50 150 -50 N X A 1 -300 0 150 R 50 50 0 1 P X A 2 300 0 150 L 50 50 0 1 P X K 3 0 -200 100 U 50 50 0 1 P ENDDRAW ENDDEF # # D_Schottky_x2_KCom_AKA # DEF D_Schottky_x2_KCom_AKA D 0 30 Y N 1 F N F0 "D" 50 -100 50 H V C CNN F1 "D_Schottky_x2_KCom_AKA" 0 100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 0 0 10 0 1 0 F P 2 0 1 0 0 0 0 -100 N P 2 0 1 0 150 0 -150 0 N P 3 0 1 10 -50 -50 -50 50 -50 50 N P 3 0 1 10 50 -50 50 50 50 50 N P 4 0 1 10 -50 -50 -30 -50 -30 -40 -30 -40 N P 4 0 1 10 50 -50 70 -50 70 -40 70 -40 N P 4 0 1 10 50 50 30 50 30 40 30 40 N P 5 0 1 10 -70 40 -70 50 -50 50 -50 50 -50 50 N P 6 0 1 10 -150 50 -50 0 -150 -50 -150 50 -150 50 -150 50 N P 6 0 1 10 150 -50 50 0 150 50 150 -50 150 -50 150 -50 N X A 1 -300 0 150 R 50 50 0 1 P X K 2 0 -200 100 U 50 50 0 1 P X A 3 300 0 150 L 50 50 0 1 P ENDDRAW ENDDEF # # D_Schottky_x2_KCom_KAA # DEF D_Schottky_x2_KCom_KAA D 0 30 Y N 1 F N F0 "D" 50 -100 50 H V C CNN F1 "D_Schottky_x2_KCom_KAA" 0 100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 0 0 10 0 1 0 F P 2 0 1 0 -150 0 150 0 N P 2 0 1 0 0 0 0 -100 N P 3 0 1 10 -50 -50 -50 50 -50 50 N P 3 0 1 10 50 -50 50 50 50 50 N P 4 0 1 10 -50 -50 -30 -50 -30 -40 -30 -40 N P 4 0 1 10 50 -50 70 -50 70 -40 70 -40 N P 4 0 1 10 50 50 30 50 30 40 30 40 N P 5 0 1 10 -70 40 -70 50 -50 50 -50 50 -50 50 N P 6 0 1 10 -150 50 -50 0 -150 -50 -150 50 -150 50 -150 50 N P 6 0 1 10 150 -50 50 0 150 50 150 -50 150 -50 150 -50 N X K 1 0 -200 100 U 50 50 0 1 P X A 2 -300 0 150 R 50 50 0 1 P X A 3 300 0 150 L 50 50 0 1 P ENDDRAW ENDDEF # # D_Schottky_x2_Serial_ACK # DEF D_Schottky_x2_Serial_ACK D 0 30 Y N 1 F N F0 "D" 50 -100 50 H V C CNN F1 "D_Schottky_x2_Serial_ACK" 0 100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 0 0 10 0 1 0 F P 2 0 1 0 0 0 0 -100 N P 2 0 1 0 150 0 -150 0 N P 2 0 1 0 250 0 300 0 N P 3 0 1 10 -50 -50 -50 50 -50 50 N P 3 0 1 10 150 50 150 -50 150 -50 N P 4 0 1 10 -50 -50 -30 -50 -30 -40 -30 -40 N P 4 0 1 10 150 -50 170 -50 170 -40 170 -40 N P 4 0 1 10 150 50 130 50 130 40 130 40 N P 5 0 1 10 -70 40 -70 50 -50 50 -50 50 -50 50 N P 6 0 1 10 -150 50 -50 0 -150 -50 -150 50 -150 50 -150 50 N P 6 0 1 10 50 50 150 0 50 -50 50 50 50 50 50 50 N X A 1 -300 0 150 R 50 50 0 1 P X common 2 0 -200 100 U 50 50 0 1 P X K 3 300 0 150 L 50 50 0 1 P ENDDRAW ENDDEF # # D_Schottky_x2_Serial_AKC # DEF D_Schottky_x2_Serial_AKC D 0 30 Y N 1 F N F0 "D" 50 -100 50 H V C CNN F1 "D_Schottky_x2_Serial_AKC" 0 100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 0 0 10 0 1 0 F P 2 0 1 0 -150 0 150 0 N P 2 0 1 0 0 0 0 -100 N P 2 0 1 0 250 0 300 0 N P 3 0 1 10 -50 -50 -50 50 -50 50 N P 3 0 1 10 150 50 150 -50 150 -50 N P 4 0 1 10 -50 -50 -30 -50 -30 -40 -30 -40 N P 4 0 1 10 150 -50 170 -50 170 -40 170 -40 N P 4 0 1 10 150 50 130 50 130 40 130 40 N P 5 0 1 10 -70 40 -70 50 -50 50 -50 50 -50 50 N P 6 0 1 10 -150 50 -50 0 -150 -50 -150 50 -150 50 -150 50 N P 6 0 1 10 50 50 150 0 50 -50 50 50 50 50 50 50 N X A 1 -300 0 150 R 50 50 0 1 P X K 2 300 0 150 L 50 50 0 1 P X common 3 0 -200 100 U 50 50 0 1 P ENDDRAW ENDDEF # # D_Schottky_x2_Serial_CAK # DEF D_Schottky_x2_Serial_CAK D 0 30 Y N 1 F N F0 "D" 50 -100 50 H V C CNN F1 "D_Schottky_x2_Serial_CAK" 0 100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 0 0 10 0 1 0 F P 2 0 1 0 -150 0 150 0 N P 2 0 1 0 0 0 0 -100 N P 3 0 1 10 -50 -50 -50 50 -50 50 N P 3 0 1 10 150 50 150 -50 150 -50 N P 4 0 1 10 -50 -50 -30 -50 -30 -40 -30 -40 N P 4 0 1 10 150 -50 170 -50 170 -40 170 -40 N P 4 0 1 10 150 50 130 50 130 40 130 40 N P 5 0 1 10 -70 40 -70 50 -50 50 -50 50 -50 50 N P 6 0 1 10 -150 50 -50 0 -150 -50 -150 50 -150 50 -150 50 N P 6 0 1 10 50 50 150 0 50 -50 50 50 50 50 50 50 N X common 1 0 -200 100 U 50 50 0 1 P X A 2 -300 0 150 R 50 50 0 1 P X K 3 300 0 150 L 50 50 0 1 P ENDDRAW ENDDEF # # D_Schottky_x2_Serial_CKA # DEF D_Schottky_x2_Serial_CKA D 0 30 Y N 1 F N F0 "D" 50 -100 50 H V C CNN F1 "D_Schottky_x2_Serial_CKA" 0 100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 0 0 10 0 1 0 F P 2 0 1 0 -150 0 150 0 N P 2 0 1 0 0 0 0 -100 N P 3 0 1 10 -50 -50 -50 50 -50 50 N P 3 0 1 10 150 50 150 -50 150 -50 N P 4 0 1 10 -50 -50 -30 -50 -30 -40 -30 -40 N P 4 0 1 10 150 -50 170 -50 170 -40 170 -40 N P 4 0 1 10 150 50 130 50 130 40 130 40 N P 5 0 1 10 -70 40 -70 50 -50 50 -50 50 -50 50 N P 6 0 1 10 -150 50 -50 0 -150 -50 -150 50 -150 50 -150 50 N P 6 0 1 10 50 50 150 0 50 -50 50 50 50 50 50 50 N X common 1 0 -200 100 U 50 50 0 1 P X K 2 300 0 150 L 50 50 0 1 P X A 3 -300 0 150 R 50 50 0 1 P ENDDRAW ENDDEF # # D_Schottky_x2_Serial_KAC # DEF D_Schottky_x2_Serial_KAC D 0 30 Y N 1 F N F0 "D" 50 -100 50 H V C CNN F1 "D_Schottky_x2_Serial_KAC" 0 100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 0 0 10 0 1 0 F P 2 0 1 0 -150 0 150 0 N P 2 0 1 0 0 0 0 -100 N P 3 0 1 10 -50 -50 -50 50 -50 50 N P 3 0 1 10 150 50 150 -50 150 -50 N P 4 0 1 10 -50 -50 -30 -50 -30 -40 -30 -40 N P 4 0 1 10 150 -50 170 -50 170 -40 170 -40 N P 4 0 1 10 150 50 130 50 130 40 130 40 N P 5 0 1 10 -70 40 -70 50 -50 50 -50 50 -50 50 N P 6 0 1 10 -150 50 -50 0 -150 -50 -150 50 -150 50 -150 50 N P 6 0 1 10 50 50 150 0 50 -50 50 50 50 50 50 50 N X K 1 300 0 150 L 50 50 0 1 P X A 2 -300 0 150 R 50 50 0 1 P X common 3 0 -200 100 U 50 50 0 1 P ENDDRAW ENDDEF # # D_Schottky_x2_Serial_KCA # DEF D_Schottky_x2_Serial_KCA D 0 30 Y N 1 F N F0 "D" 50 -100 50 H V C CNN F1 "D_Schottky_x2_Serial_KCA" 0 100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 0 0 10 0 1 0 F P 2 0 1 0 -150 0 150 0 N P 2 0 1 0 0 0 0 -100 N P 2 0 1 0 250 0 300 0 N P 3 0 1 10 -50 -50 -50 50 -50 50 N P 3 0 1 10 150 50 150 -50 150 -50 N P 4 0 1 10 -50 -50 -30 -50 -30 -40 -30 -40 N P 4 0 1 10 150 -50 170 -50 170 -40 170 -40 N P 4 0 1 10 150 50 130 50 130 40 130 40 N P 5 0 1 10 -70 40 -70 50 -50 50 -50 50 -50 50 N P 6 0 1 10 -150 50 -50 0 -150 -50 -150 50 -150 50 -150 50 N P 6 0 1 10 50 50 150 0 50 -50 50 50 50 50 50 50 N X K 1 300 0 150 L 50 50 0 1 P X common 2 0 -200 100 U 50 50 0 1 P X A 3 -300 0 150 R 50 50 0 1 P ENDDRAW ENDDEF # # D_Shockley # DEF D_Shockley D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "D_Shockley" 0 -100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST TO-???* *_Diode_* *SingleDiode* D_* $ENDFPLIST DRAW P 2 0 1 0 -50 0 50 0 N P 2 0 1 10 -50 50 -50 -50 N P 3 0 1 10 -50 0 50 50 50 -50 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # D_SiPM # DEF D_SiPM D 0 20 N N 1 F N F0 "D" 70 70 50 H V L CNN F1 "D_SiPM" 10 -110 50 H V C CNN F2 "" 50 175 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST MPPC* $ENDFPLIST DRAW P 2 0 1 0 -50 0 50 0 N P 2 0 1 10 -50 50 -50 -50 N P 2 0 1 0 -30 70 -10 70 N P 2 0 1 10 50 50 50 -50 N P 3 0 1 0 30 130 -30 70 -30 90 N P 3 0 1 10 50 50 -50 0 50 -50 N P 5 0 1 0 80 130 20 70 20 90 20 70 40 70 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # D_Small # DEF D_Small D 0 10 N N 1 F N F0 "D" -50 80 50 H V L CNN F1 "D_Small" -150 -80 50 H V L CNN F2 "" 0 0 50 V I C CNN F3 "" 0 0 50 V I C CNN $FPLIST TO-???* *_Diode_* *SingleDiode* D_* $ENDFPLIST DRAW P 2 0 1 10 -30 -40 -30 40 N P 2 0 1 0 -30 0 30 0 N P 4 0 1 10 30 -40 -30 0 30 40 30 -40 N X K 1 -100 0 70 R 50 50 1 1 P X A 2 100 0 70 L 50 50 1 1 P ENDDRAW ENDDEF # # D_Small_ALT # DEF D_Small_ALT D 0 10 N N 1 F N F0 "D" -50 80 50 H V L CNN F1 "D_Small_ALT" -150 -80 50 H V L CNN F2 "" 0 0 50 V I C CNN F3 "" 0 0 50 V I C CNN $FPLIST TO-???* *_Diode_* *SingleDiode* D_* $ENDFPLIST DRAW P 2 0 1 10 -30 -40 -30 40 N P 2 0 1 0 -30 0 30 0 N P 4 0 1 10 30 -40 -30 0 30 40 30 -40 F X K 1 -100 0 70 R 50 50 1 1 P X A 2 100 0 70 L 50 50 1 1 P ENDDRAW ENDDEF # # D_TVS # DEF D_TVS D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "D_TVS" 0 -100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST TO-???* *_Diode_* *SingleDiode* D_* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 20 50 0 50 0 -50 -20 -50 N P 5 0 1 10 -100 50 -100 -50 100 50 100 -50 -100 50 N X A1 1 -150 0 100 R 50 50 1 1 P X A2 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # D_TVS_ALT # DEF D_TVS_ALT D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "D_TVS_ALT" 0 -100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST TO-???* *_Diode_* *SingleDiode* D_* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 -100 -50 0 0 -100 50 -100 -50 F P 4 0 1 10 20 50 0 50 0 -50 -20 -50 N P 4 0 1 10 100 50 100 -50 0 0 100 50 F X A1 1 -150 0 100 R 50 50 1 1 P X A2 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # D_TVS_x2_AAC # DEF D_TVS_x2_AAC D 0 40 Y N 1 F N F0 "D" 0 175 50 H V C CNN F1 "D_TVS_x2_AAC" 0 100 50 H V C CNN F2 "" -150 0 50 H I C CNN F3 "" -150 0 50 H I C CNN DRAW C 0 0 10 0 1 0 F P 2 0 0 0 0 -50 0 0 N P 2 0 1 0 -250 0 250 0 N P 4 0 1 10 -130 50 -150 50 -150 -50 -170 -50 N P 4 0 1 10 170 50 150 50 150 -50 130 -50 N P 5 0 1 10 -250 50 -50 -50 -50 50 -250 -50 -250 50 N P 5 0 1 10 250 50 50 -50 50 50 250 -50 250 50 N X A1 1 -350 0 100 R 50 50 1 1 P X A2 2 350 0 100 L 50 50 1 1 P X common 3 0 -150 100 U 50 50 1 1 I ENDDRAW ENDDEF # # D_TVS_x2_ACA # DEF D_TVS_x2_ACA D 0 40 Y N 1 F N F0 "D" 0 175 50 H V C CNN F1 "D_TVS_x2_ACA" 0 100 50 H V C CNN F2 "" -150 0 50 H I C CNN F3 "" -150 0 50 H I C CNN DRAW C 0 0 10 0 1 0 F P 5 0 0 10 -250 -50 -50 50 -50 -50 -250 50 -250 -50 N P 5 0 0 10 50 50 50 -50 250 50 250 -50 50 50 N P 2 0 1 0 -250 0 250 0 N P 2 0 1 0 0 0 0 -50 N P 4 0 1 10 -130 50 -150 50 -150 -50 -170 -50 N P 4 0 1 10 170 50 150 50 150 -50 130 -50 N X A1 1 -350 0 100 R 50 50 1 1 P X common 2 0 -150 100 U 50 50 1 1 I X A2 3 350 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # D_TVS_x2_CAA # DEF D_TVS_x2_CAA D 0 40 Y N 1 F N F0 "D" 0 175 50 H V C CNN F1 "D_TVS_x2_CAA" 0 100 50 H V C CNN F2 "" -150 0 50 H I C CNN F3 "" -150 0 50 H I C CNN DRAW C 0 0 10 0 1 0 F P 2 0 1 0 -250 0 250 0 N P 2 0 1 0 0 0 0 -50 N P 4 0 1 10 -130 50 -150 50 -150 -50 -170 -50 N P 4 0 1 10 170 50 150 50 150 -50 130 -50 N P 5 0 1 10 -250 -50 -50 50 -50 -50 -250 50 -250 -50 N P 6 0 1 10 50 40 50 -50 250 50 250 -50 50 50 50 40 N X common 1 0 -150 100 U 50 50 1 1 I X A1 2 -350 0 100 R 50 50 1 1 P X A2 3 350 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # D_Temperature_Dependent # DEF D_Temperature_Dependent D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "D_Temperature_Dependent" 0 -125 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST TO-???* *_Diode_* *SingleDiode* D_* $ENDFPLIST DRAW A -104 -54 7 -265 818 0 1 0 N -98 -57 -103 -47 A -88 -57 10 1800 -900 0 1 0 N -98 -57 -88 -67 A -88 -57 10 -900 0 0 1 0 N -88 -67 -78 -57 A -88 -32 10 0 900 0 1 0 N -78 -32 -88 -22 A -88 -32 10 900 1800 0 1 0 N -88 -22 -98 -32 A -88 -32 10 1800 -900 0 1 0 N -98 -32 -88 -42 A -82 -23 20 -1075 -253 0 1 0 N -88 -42 -63 -32 P 2 0 1 0 -78 -56 -78 -32 N P 2 0 1 10 -50 50 -50 -50 N P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 50 -50 50 50 -50 0 50 -50 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # D_Temperature_Dependent_ALT # DEF D_Temperature_Dependent_ALT D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "D_Temperature_Dependent_ALT" 0 -125 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST TO-???* *_Diode_* *SingleDiode* D_* $ENDFPLIST DRAW A -104 -54 7 -265 818 0 1 0 N -98 -57 -103 -47 A -88 -57 10 1800 -900 0 1 0 N -98 -57 -88 -67 A -88 -57 10 -900 0 0 1 0 N -88 -67 -78 -57 A -88 -32 10 0 900 0 1 0 N -78 -32 -88 -22 A -88 -32 10 900 1800 0 1 0 N -88 -22 -98 -32 A -88 -32 10 1800 -900 0 1 0 N -98 -32 -88 -42 A -82 -23 20 -1075 -253 0 1 0 N -88 -42 -63 -32 P 2 0 1 0 -78 -56 -78 -32 N P 2 0 1 10 -50 50 -50 -50 N P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 50 -50 50 50 -50 0 50 -50 F X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # D_Tunnel # DEF D_Tunnel D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "D_Tunnel" 0 -100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST TO-???* *_Diode_* *SingleDiode* D_* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 -30 50 -50 50 -50 -50 -30 -50 N P 4 0 1 10 50 -50 50 50 -50 0 50 -50 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # D_Tunnel_ALT # DEF D_Tunnel_ALT D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "D_Tunnel_ALT" 0 -100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST TO-???* *_Diode_* *SingleDiode* D_* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 -30 50 -50 50 -50 -50 -30 -50 N P 4 0 1 10 50 -50 50 50 -50 0 50 -50 F X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # D_Unitunnel # DEF D_Unitunnel D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "D_Unitunnel" 0 -100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST TO-???* *_Diode_* *SingleDiode* D_* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 50 -50 50 50 -50 0 50 -50 N P 6 0 1 10 -70 -50 -30 -50 -50 -50 -50 50 -30 50 -70 50 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # D_Unitunnel_ALT # DEF D_Unitunnel_ALT D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "D_Unitunnel_ALT" 0 -100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST TO-???* *_Diode_* *SingleDiode* D_* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 50 -50 50 50 -50 0 50 -50 F P 6 0 1 10 -70 -50 -30 -50 -50 -50 -50 50 -30 50 -70 50 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # D_Zener # DEF D_Zener D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "D_Zener" 0 -100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST TO-???* *_Diode_* *SingleDiode* D_* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 3 0 1 10 -50 -50 -50 50 -30 50 N P 4 0 1 10 50 -50 50 50 -50 0 50 -50 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # D_Zener_ALT # DEF D_Zener_ALT D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "D_Zener_ALT" 0 -100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST TO-???* *_Diode_* *SingleDiode* D_* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 3 0 1 10 -50 -50 -50 50 -30 50 N P 4 0 1 10 50 -50 50 50 -50 0 50 -50 F X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # D_Zener_Small # DEF D_Zener_Small D 0 10 N N 1 F N F0 "D" 0 90 50 H V C CNN F1 "D_Zener_Small" 0 -90 50 H V C CNN F2 "" 0 0 50 V I C CNN F3 "" 0 0 50 V I C CNN $FPLIST TO-???* *_Diode_* *SingleDiode* D_* $ENDFPLIST DRAW P 2 0 1 0 30 0 -30 0 N P 3 0 1 10 -10 40 -30 40 -30 -40 N P 4 0 1 10 30 40 -30 0 30 -40 30 40 N X K 1 -100 0 70 R 50 50 1 1 P X A 2 100 0 70 L 50 50 1 1 P ENDDRAW ENDDEF # # D_Zener_Small_ALT # DEF D_Zener_Small_ALT D 0 10 N N 1 F N F0 "D" 0 90 50 H V C CNN F1 "D_Zener_Small_ALT" 0 -90 50 H V C CNN F2 "" 0 0 50 V I C CNN F3 "" 0 0 50 V I C CNN $FPLIST TO-???* *_Diode_* *SingleDiode* D_* $ENDFPLIST DRAW P 2 0 1 0 30 0 -30 0 N P 3 0 1 10 -10 40 -30 40 -30 -40 N P 4 0 1 10 30 40 -30 0 30 -40 30 40 F X K 1 -100 0 70 R 50 50 1 1 P X A 2 100 0 70 L 50 50 1 1 P ENDDRAW ENDDEF # # D_Zener_x2_ACom_AKK # DEF D_Zener_x2_ACom_AKK D 0 30 Y N 1 F N F0 "D" 50 -100 50 H V C CNN F1 "D_Zener_x2_ACom_AKK" 0 100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST SOT* SC* $ENDFPLIST DRAW C 0 0 10 0 1 0 F P 2 0 1 0 -140 0 150 0 N P 2 0 1 0 0 0 0 -100 N P 3 0 1 10 -150 -50 -150 50 -130 50 N P 3 0 1 10 150 50 150 -50 130 -50 N P 6 0 1 10 -50 -50 -150 0 -50 50 -50 -50 -50 -50 -50 -50 N P 6 0 1 10 50 50 150 0 50 -50 50 50 50 50 50 50 N X A 1 0 -200 100 U 50 50 0 1 P X K 2 -300 0 150 R 50 50 0 1 P X K 3 300 0 150 L 50 50 0 1 P ENDDRAW ENDDEF # # D_Zener_x2_ACom_KAK # DEF D_Zener_x2_ACom_KAK D 0 30 Y N 1 F N F0 "D" 50 -100 50 H V C CNN F1 "D_Zener_x2_ACom_KAK" 0 100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST SOT* SC* $ENDFPLIST DRAW C 0 0 10 0 1 0 F P 2 0 1 0 -140 0 150 0 N P 2 0 1 0 0 0 0 -100 N P 3 0 1 10 -150 -50 -150 50 -130 50 N P 3 0 1 10 130 -50 150 -50 150 50 N P 6 0 1 10 -50 -50 -150 0 -50 50 -50 -50 -50 -50 -50 -50 N P 6 0 1 10 50 50 150 0 50 -50 50 50 50 50 50 50 N X K 1 -300 0 150 R 50 50 0 1 P X A 2 0 -200 100 U 50 50 0 1 P X K 3 300 0 150 L 50 50 0 1 P ENDDRAW ENDDEF # # D_Zener_x2_ACom_KKA # DEF D_Zener_x2_ACom_KKA D 0 30 Y N 1 F N F0 "D" 50 -100 50 H V C CNN F1 "D_Zener_x2_ACom_KKA" 0 100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST SOT* SC* $ENDFPLIST DRAW C 0 0 10 0 1 0 F P 2 0 1 0 -140 0 150 0 N P 2 0 1 0 0 0 0 -100 N P 3 0 1 10 -150 -50 -150 50 -130 50 N P 3 0 1 10 130 -50 150 -50 150 50 N P 6 0 1 10 -50 -50 -150 0 -50 50 -50 -50 -50 -50 -50 -50 N P 6 0 1 10 50 50 150 0 50 -50 50 50 50 50 50 50 N X K 1 -300 0 150 R 50 50 0 1 P X K 2 300 0 150 L 50 50 0 1 P X A 3 0 -200 100 U 50 50 0 1 P ENDDRAW ENDDEF # # D_Zener_x2_KCom_AAK # DEF D_Zener_x2_KCom_AAK D 0 30 Y N 1 F N F0 "D" 50 -100 50 H V C CNN F1 "D_Zener_x2_KCom_AAK" 0 100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST SOT* SC* $ENDFPLIST DRAW C 0 0 10 0 1 0 F P 2 0 1 0 -150 0 150 0 N P 2 0 1 0 0 0 0 -100 N P 3 0 1 10 -50 50 -50 -50 -70 -50 N P 3 0 1 10 50 -50 50 50 70 50 N P 6 0 1 10 -150 50 -50 0 -150 -50 -150 50 -150 50 -150 50 N P 6 0 1 10 150 -50 50 0 150 50 150 -50 150 -50 150 -50 N X A 1 -300 0 150 R 50 50 0 1 P X A 2 300 0 150 L 50 50 0 1 P X K 3 0 -200 100 U 50 50 0 1 P ENDDRAW ENDDEF # # D_Zener_x2_KCom_AKA # DEF D_Zener_x2_KCom_AKA D 0 30 Y N 1 F N F0 "D" 50 -100 50 H V C CNN F1 "D_Zener_x2_KCom_AKA" 0 100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST SOT* SC* $ENDFPLIST DRAW C 0 0 10 0 1 0 F P 2 0 1 0 0 0 0 -100 N P 2 0 1 10 70 50 70 50 N P 2 0 1 0 150 0 -150 0 N P 3 0 1 10 -70 -50 -50 -50 -50 50 N P 3 0 1 10 50 -50 50 50 70 50 N P 6 0 1 10 -150 50 -50 0 -150 -50 -150 50 -150 50 -150 50 N P 6 0 1 10 150 -50 50 0 150 50 150 -50 150 -50 150 -50 N X A 1 -300 0 150 R 50 50 0 1 P X K 2 0 -200 100 U 50 50 0 1 P X A 3 300 0 150 L 50 50 0 1 P ENDDRAW ENDDEF # # D_Zener_x2_KCom_KAA # DEF D_Zener_x2_KCom_KAA D 0 30 Y N 1 F N F0 "D" 50 -100 50 H V C CNN F1 "D_Zener_x2_KCom_KAA" 0 100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST SOT* SC* $ENDFPLIST DRAW C 0 0 10 0 1 0 F P 2 0 1 0 -150 0 150 0 N P 2 0 1 0 0 0 0 -100 N P 3 0 1 10 -50 50 -50 -50 -70 -50 N P 3 0 1 10 50 -50 50 50 70 50 N P 6 0 1 10 -150 50 -50 0 -150 -50 -150 50 -150 50 -150 50 N P 6 0 1 10 150 -50 50 0 150 50 150 -50 150 -50 150 -50 N X K 1 0 -200 100 U 50 50 0 1 P X A 2 -300 0 150 R 50 50 0 1 P X A 3 300 0 150 L 50 50 0 1 P ENDDRAW ENDDEF # # D_x2_ACom_AKK # DEF D_x2_ACom_AKK D 0 30 Y N 1 F N F0 "D" 50 -100 50 H V C CNN F1 "D_x2_ACom_AKK" 0 100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 0 0 10 0 1 0 F P 2 0 1 0 -140 0 150 0 N P 2 0 1 0 0 0 0 -100 N P 3 0 1 10 -150 50 -150 -50 -150 -50 N P 3 0 1 10 150 50 150 -50 150 -50 N P 6 0 1 10 -50 -50 -150 0 -50 50 -50 -50 -50 -50 -50 -50 N P 6 0 1 10 50 50 150 0 50 -50 50 50 50 50 50 50 N X A 1 0 -200 100 U 50 50 0 1 P X K 2 -300 0 150 R 50 50 0 1 P X K 3 300 0 150 L 50 50 0 1 P ENDDRAW ENDDEF # # D_x2_ACom_KAK # DEF D_x2_ACom_KAK D 0 30 Y N 1 F N F0 "D" 50 -100 50 H V C CNN F1 "D_x2_ACom_KAK" 0 100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 0 0 10 0 1 0 F P 2 0 1 0 0 0 0 -100 N P 2 0 1 0 150 0 -150 0 N P 3 0 1 10 -150 50 -150 -50 -150 -50 N P 3 0 1 10 150 50 150 -50 150 -50 N P 6 0 1 10 -50 -50 -150 0 -50 50 -50 -50 -50 -50 -50 -50 N P 6 0 1 10 50 50 150 0 50 -50 50 50 50 50 50 50 N X K 1 -300 0 150 R 50 50 0 1 P X A 2 0 -200 100 U 50 50 0 1 P X K 3 300 0 150 L 50 50 0 1 P ENDDRAW ENDDEF # # D_x2_ACom_KKA # DEF D_x2_ACom_KKA D 0 30 Y N 1 F N F0 "D" 50 -100 50 H V C CNN F1 "D_x2_ACom_KKA" 0 100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 0 0 10 0 1 0 F P 2 0 1 0 -150 0 150 0 N P 2 0 1 0 0 0 0 -100 N P 3 0 1 10 -150 50 -150 -50 -150 -50 N P 3 0 1 10 150 50 150 -50 150 -50 N P 6 0 1 10 -50 -50 -150 0 -50 50 -50 -50 -50 -50 -50 -50 N P 6 0 1 10 50 50 150 0 50 -50 50 50 50 50 50 50 N X K 1 -300 0 150 R 50 50 0 1 P X K 2 300 0 150 L 50 50 0 1 P X A 3 0 -200 100 U 50 50 0 1 P ENDDRAW ENDDEF # # D_x2_KCom_AAK # DEF D_x2_KCom_AAK D 0 30 Y N 1 F N F0 "D" 50 -100 50 H V C CNN F1 "D_x2_KCom_AAK" 0 100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 0 0 10 0 1 0 F P 2 0 1 0 -150 0 150 0 N P 2 0 1 0 0 0 0 -100 N P 3 0 1 10 -50 -50 -50 50 -50 50 N P 3 0 1 10 50 -50 50 50 50 50 N P 6 0 1 10 -150 50 -50 0 -150 -50 -150 50 -150 50 -150 50 N P 6 0 1 10 150 -50 50 0 150 50 150 -50 150 -50 150 -50 N X A 1 -300 0 150 R 50 50 0 1 P X A 2 300 0 150 L 50 50 0 1 P X K 3 0 -200 100 U 50 50 0 1 P ENDDRAW ENDDEF # # D_x2_KCom_AKA # DEF D_x2_KCom_AKA D 0 30 Y N 1 F N F0 "D" 50 -100 50 H V C CNN F1 "D_x2_KCom_AKA" 0 100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 0 0 10 0 1 0 F P 2 0 1 0 0 0 0 -100 N P 2 0 1 0 150 0 -150 0 N P 3 0 1 10 -50 -50 -50 50 -50 50 N P 3 0 1 10 50 -50 50 50 50 50 N P 6 0 1 10 -150 50 -50 0 -150 -50 -150 50 -150 50 -150 50 N P 6 0 1 10 150 -50 50 0 150 50 150 -50 150 -50 150 -50 N X A 1 -300 0 150 R 50 50 0 1 P X K 2 0 -200 100 U 50 50 0 1 P X A 3 300 0 150 L 50 50 0 1 P ENDDRAW ENDDEF # # D_x2_KCom_KAA # DEF D_x2_KCom_KAA D 0 30 Y N 1 F N F0 "D" 50 -100 50 H V C CNN F1 "D_x2_KCom_KAA" 0 100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 0 0 10 0 1 0 F P 2 0 1 0 -150 0 150 0 N P 2 0 1 0 0 0 0 -100 N P 3 0 1 10 -50 -50 -50 50 -50 50 N P 3 0 1 10 50 -50 50 50 50 50 N P 6 0 1 10 -150 50 -50 0 -150 -50 -150 50 -150 50 -150 50 N P 6 0 1 10 150 -50 50 0 150 50 150 -50 150 -50 150 -50 N X K 1 0 -200 100 U 50 50 0 1 P X A 2 -300 0 150 R 50 50 0 1 P X A 3 300 0 150 L 50 50 0 1 P ENDDRAW ENDDEF # # D_x2_Serial_ACK # DEF D_x2_Serial_ACK D 0 30 Y N 1 F N F0 "D" 50 -100 50 H V C CNN F1 "D_x2_Serial_ACK" 0 100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 0 0 10 0 1 0 F P 2 0 1 0 0 0 0 -100 N P 2 0 1 0 150 0 -150 0 N P 2 0 1 0 250 0 300 0 N P 3 0 1 10 -50 -50 -50 50 -50 50 N P 3 0 1 10 150 50 150 -50 150 -50 N P 6 0 1 10 -150 50 -50 0 -150 -50 -150 50 -150 50 -150 50 N P 6 0 1 10 50 50 150 0 50 -50 50 50 50 50 50 50 N X A 1 -300 0 150 R 50 50 0 1 P X common 2 0 -200 100 U 50 50 0 1 P X K 3 300 0 150 L 50 50 0 1 P ENDDRAW ENDDEF # # D_x2_Serial_AKC # DEF D_x2_Serial_AKC D 0 30 Y N 1 F N F0 "D" 50 -100 50 H V C CNN F1 "D_x2_Serial_AKC" 0 100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 0 0 10 0 1 0 F P 2 0 1 0 -150 0 150 0 N P 2 0 1 0 0 0 0 -100 N P 2 0 1 0 250 0 300 0 N P 3 0 1 10 -50 -50 -50 50 -50 50 N P 3 0 1 10 150 50 150 -50 150 -50 N P 6 0 1 10 -150 50 -50 0 -150 -50 -150 50 -150 50 -150 50 N P 6 0 1 10 50 50 150 0 50 -50 50 50 50 50 50 50 N X A 1 -300 0 150 R 50 50 0 1 P X K 2 300 0 150 L 50 50 0 1 P X common 3 0 -200 100 U 50 50 0 1 P ENDDRAW ENDDEF # # D_x2_Serial_CAK # DEF D_x2_Serial_CAK D 0 30 Y N 1 F N F0 "D" 50 -100 50 H V C CNN F1 "D_x2_Serial_CAK" 0 100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 0 0 10 0 1 0 F P 2 0 1 0 0 0 0 -100 N P 2 0 1 0 150 0 -150 0 N P 3 0 1 10 -50 -50 -50 50 -50 50 N P 3 0 1 10 150 50 150 -50 150 -50 N P 6 0 1 10 -150 50 -50 0 -150 -50 -150 50 -150 50 -150 50 N P 6 0 1 10 50 50 150 0 50 -50 50 50 50 50 50 50 N X common 1 0 -200 100 U 50 50 0 1 P X A 2 -300 0 150 R 50 50 0 1 P X K 3 300 0 150 L 50 50 0 1 P ENDDRAW ENDDEF # # D_x2_Serial_CKA # DEF D_x2_Serial_CKA D 0 30 Y N 1 F N F0 "D" 50 -100 50 H V C CNN F1 "D_x2_Serial_CKA" 0 100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 0 0 10 0 1 0 F P 2 0 1 0 -150 0 150 0 N P 2 0 1 0 0 0 0 -100 N P 3 0 1 10 -50 -50 -50 50 -50 50 N P 3 0 1 10 150 50 150 -50 150 -50 N P 6 0 1 10 -150 50 -50 0 -150 -50 -150 50 -150 50 -150 50 N P 6 0 1 10 50 50 150 0 50 -50 50 50 50 50 50 50 N X common 1 0 -200 100 U 50 50 0 1 P X K 2 300 0 150 L 50 50 0 1 P X A 3 -300 0 150 R 50 50 0 1 P ENDDRAW ENDDEF # # D_x2_Serial_KAC # DEF D_x2_Serial_KAC D 0 30 Y N 1 F N F0 "D" 50 -100 50 H V C CNN F1 "D_x2_Serial_KAC" 0 100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 0 0 10 0 1 0 F P 2 0 1 0 0 0 0 -100 N P 2 0 1 0 150 0 -150 0 N P 3 0 1 10 -50 -50 -50 50 -50 50 N P 3 0 1 10 150 50 150 -50 150 -50 N P 6 0 1 10 -150 50 -50 0 -150 -50 -150 50 -150 50 -150 50 N P 6 0 1 10 50 50 150 0 50 -50 50 50 50 50 50 50 N X K 1 300 0 150 L 50 50 0 1 P X A 2 -300 0 150 R 50 50 0 1 P X common 3 0 -200 100 U 50 50 0 1 P ENDDRAW ENDDEF # # D_x2_Serial_KCA # DEF D_x2_Serial_KCA D 0 30 Y N 1 F N F0 "D" 50 -100 50 H V C CNN F1 "D_x2_Serial_KCA" 0 100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 0 0 10 0 1 0 F P 2 0 1 0 0 0 0 -100 N P 2 0 1 0 150 0 -150 0 N P 2 0 1 0 250 0 300 0 N P 3 0 1 10 -50 -50 -50 50 -50 50 N P 3 0 1 10 150 50 150 -50 150 -50 N P 6 0 1 10 -150 50 -50 0 -150 -50 -150 50 -150 50 -150 50 N P 6 0 1 10 50 50 150 0 50 -50 50 50 50 50 50 50 N X K 1 300 0 150 L 50 50 0 1 P X common 2 0 -200 100 U 50 50 0 1 P X A 3 -300 0 150 R 50 50 0 1 P ENDDRAW ENDDEF # # Delay_Line # DEF Delay_Line L 0 40 Y N 1 F N F0 "L" 100 50 50 H V L CNN F1 "Delay_Line" 100 -50 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW A 0 -150 50 899 1 0 1 0 N 0 -100 50 -150 A 0 -150 50 -1 -899 0 1 0 N 50 -150 0 -199 A 0 -50 50 899 1 0 1 0 N 0 0 50 -50 A 0 -50 50 -1 -899 0 1 0 N 50 -50 0 -99 A 0 50 50 899 1 0 1 0 N 0 100 50 50 A 0 50 50 -1 -899 0 1 0 N 50 50 0 1 A 0 150 50 899 1 0 1 0 N 0 200 50 150 A 0 150 50 -1 -899 0 1 0 N 50 150 0 101 P 2 0 1 0 -100 200 -100 -200 N X 1 1 0 300 100 D 50 50 1 1 P X 2 2 0 -300 100 U 50 50 1 1 P X COMMUN 3 -200 0 100 R 50 50 1 1 I ENDDRAW ENDDEF # # EMI_Filter_CLC # DEF EMI_Filter_CLC FL 0 10 Y N 1 F N F0 "FL" 0 275 50 H V C CNN F1 "EMI_Filter_CLC" 0 200 50 H V C CNN F2 "" 0 0 50 V I C CNN F3 "" 0 0 50 V I C CNN $FPLIST Filter* Resonator* $ENDFPLIST DRAW A -80 100 20 1 1799 0 1 0 N -60 100 -100 100 A -40 100 20 1 1799 0 1 0 N -20 100 -60 100 A 0 100 20 1 1799 0 1 0 N 20 100 -20 100 A 40 100 20 1 1799 0 1 0 N 60 100 20 100 A 80 100 20 1 1799 0 1 0 N 100 100 60 100 C -160 100 10 0 1 0 F C 0 0 10 0 1 0 F C 150 100 10 0 1 0 F S -225 150 220 -25 0 1 10 f S -200 30 -120 40 0 1 0 F S -120 60 -200 70 0 1 0 F S 110 30 190 40 0 1 0 F S 190 60 110 70 0 1 0 F P 2 0 1 0 -200 100 -100 100 N P 2 0 1 0 -160 100 -160 70 N P 2 0 1 0 100 100 200 100 N P 2 0 1 0 150 100 150 70 N P 4 0 1 0 -160 30 -160 0 150 0 150 30 N X 1 1 -300 100 100 R 50 50 1 1 P X 2 2 0 -100 100 U 50 50 1 1 P X 3 3 300 100 100 L 50 50 1 1 P ENDDRAW ENDDEF # # EMI_Filter_LCL # DEF EMI_Filter_LCL FL 0 10 Y N 1 F N F0 "FL" 0 275 50 H V C CNN F1 "EMI_Filter_LCL" 0 200 50 H V C CNN F2 "" 0 0 50 V I C CNN F3 "" 0 0 50 V I C CNN $FPLIST Filter* Resonator* $ENDFPLIST DRAW A -180 100 20 1 1799 0 1 0 N -160 100 -200 100 A -140 100 20 1 1799 0 1 0 N -120 100 -160 100 A -100 100 20 1 1799 0 1 0 N -80 100 -120 100 A -60 100 20 1 1799 0 1 0 N -40 100 -80 100 A 60 100 20 1 1799 0 1 0 N 80 100 40 100 A 100 100 20 1 1799 0 1 0 N 120 100 80 100 A 140 100 20 1 1799 0 1 0 N 160 100 120 100 A 180 100 20 1 1799 0 1 0 N 200 100 160 100 C 0 100 10 0 1 0 F S -225 150 225 0 0 1 10 f S -40 30 40 40 0 1 0 F S 40 60 -40 70 0 1 0 F P 2 0 1 0 -40 100 40 100 N P 2 0 1 0 0 30 0 0 N P 2 0 1 0 0 100 0 70 N X 1 1 -300 100 100 R 50 50 1 1 P X 2 2 0 -100 100 U 50 50 1 1 P X 3 3 300 100 100 L 50 50 1 1 P ENDDRAW ENDDEF # # EMI_Filter_LL # DEF EMI_Filter_LL FL 0 10 Y N 1 F N F0 "FL" 0 175 50 H V C CNN F1 "EMI_Filter_LL" 0 -175 50 H V C CNN F2 "" 0 40 50 H I C CNN F3 "" 0 40 50 H I C CNN ALIAS EMI_Filter_CommonMode $FPLIST L_* L_CommonMode* $ENDFPLIST DRAW A -80 -80 20 1 1799 0 1 0 N -60 -80 -100 -80 A -80 80 20 -1799 -1 0 1 0 N -100 80 -60 80 A -40 -80 20 1 1799 0 1 0 N -20 -80 -60 -80 A -40 80 20 -1799 -1 0 1 0 N -60 80 -20 80 A 0 -80 20 1 1799 0 1 0 N 20 -80 -20 -80 A 0 80 20 -1799 -1 0 1 0 N -20 80 20 80 A 40 -80 20 1 1799 0 1 0 N 60 -80 20 -80 A 40 80 20 -1799 -1 0 1 0 N 20 80 60 80 A 80 -80 20 1 1799 0 1 0 N 100 -80 60 -80 A 80 80 20 -1799 -1 0 1 0 N 60 80 100 80 C -120 -50 10 0 1 0 F C -120 60 10 0 1 0 F P 2 0 1 0 -100 -80 -100 -100 N P 2 0 1 0 -100 20 100 20 N P 2 0 1 0 -100 80 -100 100 N P 2 0 1 0 100 -80 100 -100 N P 2 0 1 0 100 -20 -100 -20 N P 2 0 1 0 100 100 100 80 N X 1 1 -200 100 100 R 50 50 1 1 P X 2 2 200 100 100 L 50 50 1 1 P X 3 3 -200 -100 100 R 50 50 1 1 P X 4 4 200 -100 100 L 50 50 1 1 P ENDDRAW ENDDEF # # EMI_Filter_LL_1423 # DEF EMI_Filter_LL_1423 FL 0 20 Y N 1 F N F0 "FL" 0 175 50 H V C CNN F1 "EMI_Filter_LL_1423" 0 -175 50 H V C CNN F2 "" 0 -250 50 H I C CNN F3 "" 0 40 50 V I C CNN $FPLIST Bourns*SRF0905* $ENDFPLIST DRAW A -80 -80 20 1 1799 0 1 0 N -60 -80 -100 -80 A -80 80 20 -1799 -1 0 1 0 N -100 80 -60 80 A -40 -80 20 1 1799 0 1 0 N -20 -80 -60 -80 A -40 80 20 -1799 -1 0 1 0 N -60 80 -20 80 A 0 -80 20 1 1799 0 1 0 N 20 -80 -20 -80 A 0 80 20 -1799 -1 0 1 0 N -20 80 20 80 A 40 -80 20 1 1799 0 1 0 N 60 -80 20 -80 A 40 80 20 -1799 -1 0 1 0 N 20 80 60 80 A 80 -80 20 1 1799 0 1 0 N 100 -80 60 -80 A 80 80 20 -1799 -1 0 1 0 N 60 80 100 80 C -120 -50 10 0 1 0 F C -120 60 10 0 1 0 F P 2 0 1 0 -100 -80 -100 -100 N P 2 0 1 0 -100 20 100 20 N P 2 0 1 0 -100 80 -100 100 N P 2 0 1 0 100 -80 100 -100 N P 2 0 1 0 100 -20 -100 -20 N P 2 0 1 0 100 100 100 80 N X 1 1 -200 -100 100 R 50 50 1 1 P X 2 2 -200 100 100 R 50 50 1 1 P X 3 3 200 100 100 L 50 50 1 1 P X 4 4 200 -100 100 L 50 50 1 1 P ENDDRAW ENDDEF # # Earphone # DEF Earphone LS 0 1 Y N 1 F N F0 "LS" 100 150 50 H V L CNN F1 "Earphone" 100 75 50 H V L CNN F2 "" 0 100 50 V I C CNN F3 "" 0 100 50 V I C CNN DRAW S 50 -25 75 125 0 1 0 F S 50 0 -50 100 0 1 0 N X - 1 0 -100 100 U 50 50 1 1 P X + 2 0 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Electromagnetic_Actor # DEF Electromagnetic_Actor L 0 1 N N 1 F N F0 "L" 50 150 50 H V L CNN F1 "Electromagnetic_Actor" 50 -50 50 H V L CNN F2 "" -25 100 50 V I C CNN F3 "" -25 100 50 V I C CNN $FPLIST Inductor_* L_* $ENDFPLIST DRAW S -100 100 100 0 0 1 10 N P 2 0 1 10 -50 100 50 0 N X - 1 0 200 100 D 50 50 1 1 P X + 2 0 -100 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Ferrite_Bead # DEF Ferrite_Bead FB 0 0 N Y 1 F N F0 "FB" -150 25 50 V V C CNN F1 "Ferrite_Bead" 150 0 50 V V C CNN F2 "" -70 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Inductor_* L_* *Ferrite* $ENDFPLIST DRAW P 2 0 1 0 0 -50 0 -48 N P 2 0 1 0 0 50 0 51 N P 5 0 1 0 -109 16 -67 89 109 -12 66 -85 -109 16 N X ~ 1 0 150 100 D 50 50 1 1 P X ~ 2 0 -150 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Ferrite_Bead_Small # DEF Ferrite_Bead_Small FB 0 0 N Y 1 F N F0 "FB" 75 50 50 H V L CNN F1 "Ferrite_Bead_Small" 75 -50 50 H V L CNN F2 "" -70 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Inductor_* L_* *Ferrite* $ENDFPLIST DRAW P 2 0 1 0 0 -50 0 -31 N P 2 0 1 0 0 35 0 51 N P 5 0 1 0 -72 11 -44 59 72 -8 44 -56 -72 11 N X ~ 1 0 100 50 D 50 50 1 1 P X ~ 2 0 -100 50 U 50 50 1 1 P ENDDRAW ENDDEF # # Frequency_Counter # DEF Frequency_Counter MES 0 1 N N 1 F N F0 "MES" -130 40 50 H V R CNN F1 "Frequency_Counter" -130 -30 50 H V R CNN F2 "" 0 100 50 V I C CNN F3 "" 0 100 50 V I C CNN DRAW C 0 0 100 0 1 10 N T 0 0 0 80 0 0 0 Hz Normal 0 C C P 2 0 0 0 -125 -125 -75 -75 N P 2 0 0 0 75 75 125 125 N P 3 0 0 0 75 125 125 125 125 75 N X - 1 0 -200 100 U 50 50 1 1 P X + 2 0 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Fuse # DEF Fuse F 0 0 N Y 1 F N F0 "F" 80 0 50 V V C CNN F1 "Fuse" -75 0 50 V V C CNN F2 "" -70 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST *Fuse* $ENDFPLIST DRAW S -30 -100 30 100 0 1 10 N P 2 0 1 0 0 100 0 -100 N X ~ 1 0 150 50 D 50 50 1 1 P X ~ 2 0 -150 50 U 50 50 1 1 P ENDDRAW ENDDEF # # Fuse_Polarized # DEF Fuse_Polarized F 0 0 N Y 1 F N F0 "F" 80 0 50 V V C CNN F1 "Fuse_Polarized" -75 0 50 V V C CNN F2 "" -70 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST *Fuse* $ENDFPLIST DRAW S -30 -100 30 100 0 1 10 N S -30 100 30 60 0 1 10 F P 2 0 1 0 0 100 0 -100 N X ~ 1 0 150 50 D 50 50 1 1 W X ~ 2 0 -150 50 U 50 50 1 1 w ENDDRAW ENDDEF # # Fuse_Polarized_Small # DEF Fuse_Polarized_Small F 0 10 N N 1 F N F0 "F" 10 -60 50 H V C CNN F1 "Fuse_Polarized_Small" 0 60 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST SM* $ENDFPLIST DRAW S -50 20 -30 -20 0 1 0 F S -50 20 50 -20 0 1 0 N P 2 0 1 0 -50 0 50 0 N X ~ 1 -100 0 50 R 50 50 1 1 W X ~ 2 100 0 50 L 50 50 1 1 w ENDDRAW ENDDEF # # Fuse_Small # DEF Fuse_Small F 0 10 N N 1 F N F0 "F" 0 -60 50 H V C CNN F1 "Fuse_Small" 0 60 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST SM* $ENDFPLIST DRAW S -50 20 50 -20 0 1 0 N P 2 0 1 0 -50 0 50 0 N X ~ 1 -100 0 50 R 50 50 1 1 P X ~ 2 100 0 50 L 50 50 1 1 P ENDDRAW ENDDEF # # Galvanometer # DEF Galvanometer MES 0 1 N N 1 F N F0 "MES" -130 40 50 H V R CNN F1 "Galvanometer" -130 -30 50 H V R CNN F2 "" 0 100 50 V I C CNN F3 "" 0 100 50 V I C CNN DRAW C 0 0 100 0 1 10 N P 2 0 0 0 -125 -125 125 125 N P 3 0 0 0 75 125 125 125 125 75 N P 2 0 1 0 10 150 30 150 N P 2 0 1 0 20 160 20 140 N X - 1 0 -200 100 U 50 50 1 1 P X + 2 0 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Hall_Generator # DEF Hall_Generator HG 0 0 Y N 1 F N F0 "HG" 100 175 50 H V L CNN F1 "Hall_Generator" 100 100 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW S -40 100 40 -100 0 1 10 N P 2 0 1 0 -40 0 -100 0 N P 2 0 1 10 -20 -20 20 20 N P 2 0 1 10 -20 20 20 -20 N P 2 0 1 0 40 0 100 0 N X U1 1 0 200 100 D 50 50 1 1 P X U2 2 0 -200 100 U 50 50 1 1 P X UH1 3 -150 0 50 R 50 50 1 1 P X UH2 4 150 0 50 L 50 50 1 1 P ENDDRAW ENDDEF # # Heater # DEF Heater R 0 0 N Y 1 F N F0 "R" 80 0 50 V V C CNN F1 "Heater" -80 0 50 V V C CNN F2 "" -70 0 50 V I C CNN F3 "" 0 0 50 H I C CNN DRAW S -40 -100 40 100 0 1 10 N P 2 0 1 0 -40 60 40 60 N P 2 0 1 0 40 -60 -40 -60 N P 2 0 1 0 40 -20 -40 -20 N P 2 0 1 0 40 20 -40 20 N X ~ 1 0 150 50 D 50 50 1 1 P X ~ 2 0 -150 50 U 50 50 1 1 P ENDDRAW ENDDEF # # Jumper # DEF Jumper JP 0 30 Y N 1 F N F0 "JP" 0 150 50 H V C CNN F1 "Jumper" 0 -80 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST SolderJumper* Jumper* TestPoint*2Pads* TestPoint*Bridge* $ENDFPLIST DRAW A 0 -26 125 1426 373 0 1 0 N -98 50 99 50 C -100 0 35 0 1 0 N C 100 0 35 0 1 0 N X 1 1 -300 0 165 R 50 50 0 1 P X 2 2 300 0 165 L 50 50 0 1 P ENDDRAW ENDDEF # # Jumper_NC_Dual # DEF Jumper_NC_Dual JP 0 30 Y N 1 F N F0 "JP" 50 -100 50 H V L CNN F1 "Jumper_NC_Dual" 0 100 50 H V C BNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST SolderJumper*Bridged* Jumper* TestPoint*2Pads* TestPoint*Bridge* $ENDFPLIST DRAW A -60 10 64 386 1413 0 1 0 N -10 50 -110 50 A 60 10 64 386 1413 0 1 0 N 110 50 10 50 C -120 0 35 0 1 0 N C 0 0 36 0 1 0 N C 120 0 35 0 1 0 N X 1 1 -250 0 95 R 50 50 0 1 P X 2 2 0 -100 60 U 50 50 0 1 P X 3 3 250 0 95 L 50 50 0 1 P ENDDRAW ENDDEF # # Jumper_NC_Small # DEF Jumper_NC_Small JP 0 30 N N 1 F N F0 "JP" 0 80 50 H V C CNN F1 "Jumper_NC_Small" 10 -60 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST SolderJumper*Bridged* Jumper* TestPoint*2Pads* TestPoint*Bridge* $ENDFPLIST DRAW A 0 -10 57 450 1350 0 1 0 N 40 30 -40 30 C -40 0 20 0 1 0 N C 40 0 20 0 1 0 N X 1 1 -100 0 40 R 50 50 0 1 P X 2 2 100 0 40 L 50 50 0 1 P ENDDRAW ENDDEF # # Jumper_NO_Small # DEF Jumper_NO_Small JP 0 30 N N 1 F N F0 "JP" 0 80 50 H V C CNN F1 "Jumper_NO_Small" 10 -60 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST SolderJumper*Open* Jumper* TestPoint*2Pads* TestPoint*Bridge* $ENDFPLIST DRAW C -40 0 20 0 1 0 N C 40 0 20 0 1 0 N X 1 1 -100 0 40 R 50 50 0 1 P X 2 2 100 0 40 L 50 50 0 1 P ENDDRAW ENDDEF # # L # DEF L L 0 40 N N 1 F N F0 "L" -50 0 50 V V C CNN F1 "L" 75 0 50 V V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Choke_* *Coil* Inductor_* L_* $ENDFPLIST DRAW A 0 -75 25 -899 899 0 1 0 N 0 -100 0 -50 A 0 -25 25 -899 899 0 1 0 N 0 -50 0 0 A 0 25 25 -899 899 0 1 0 N 0 0 0 50 A 0 75 25 -899 899 0 1 0 N 0 50 0 100 X 1 1 0 150 50 D 50 50 1 1 P X 2 2 0 -150 50 U 50 50 1 1 P ENDDRAW ENDDEF # # LED # DEF LED D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "LED" 0 -100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST LED* LED_SMD:* LED_THT:* $ENDFPLIST DRAW P 2 0 1 10 -50 -50 -50 50 N P 2 0 1 0 -50 0 50 0 N P 4 0 1 10 50 -50 50 50 -50 0 50 -50 N P 5 0 1 0 -120 -30 -180 -90 -150 -90 -180 -90 -180 -60 N P 5 0 1 0 -70 -30 -130 -90 -100 -90 -130 -90 -130 -60 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # LED_ABRG # DEF LED_ABRG D 0 0 Y N 1 F N F0 "D" 0 400 50 H V C CNN F1 "LED_ABRG" 0 -400 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST LED* LED_SMD:* LED_THT:* $ENDFPLIST DRAW C 80 0 10 1 1 0 F T 0 -75 -250 50 0 1 0 B Normal 0 C C T 0 -75 -50 50 0 1 0 G Normal 0 C C T 0 -75 150 50 0 1 0 R Normal 0 C C S 50 250 50 250 1 1 0 N S 110 330 -110 -300 1 1 10 f P 2 1 1 0 -100 -200 50 -200 N P 2 1 1 10 -50 -150 -50 -250 N P 2 1 1 10 -50 50 -50 -50 N P 2 1 1 10 -50 250 -50 150 N P 2 1 1 0 50 200 -100 200 N P 2 1 1 0 100 0 -100 0 N P 4 1 1 0 50 -200 80 -200 80 200 50 200 N P 4 1 1 10 50 -150 50 -250 -50 -200 50 -150 N P 4 1 1 10 50 50 50 -50 -50 0 50 50 N P 4 1 1 10 50 250 50 150 -50 200 50 250 N P 5 1 1 0 -40 -150 20 -90 -10 -90 20 -90 20 -120 N P 5 1 1 0 -40 50 20 110 -10 110 20 110 20 80 N P 5 1 1 0 -40 250 20 310 -10 310 20 310 20 280 N P 5 1 1 0 0 -150 60 -90 30 -90 60 -90 60 -120 N P 5 1 1 0 0 50 60 110 30 110 60 110 60 80 N P 5 1 1 0 0 250 60 310 30 310 60 310 60 280 N X A 1 200 0 100 L 50 50 1 1 P X BK 2 -200 -200 100 R 50 50 1 1 P X RK 3 -200 200 100 R 50 50 1 1 P X GK 4 -200 0 100 R 50 50 1 1 P ENDDRAW ENDDEF # # LED_ALT # DEF LED_ALT D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "LED_ALT" 0 -100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST LED* LED_SMD:* LED_THT:* $ENDFPLIST DRAW P 2 0 1 10 -50 -50 -50 50 N P 2 0 1 0 -50 0 50 0 N P 4 0 1 10 50 -50 50 50 -50 0 50 -50 F P 5 0 1 0 -120 -30 -180 -90 -150 -90 -180 -90 -180 -60 N P 5 0 1 0 -70 -30 -130 -90 -100 -90 -130 -90 -130 -60 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # LED_ARBG # DEF LED_ARBG D 0 0 Y N 1 F N F0 "D" 0 370 50 H V C CNN F1 "LED_ARBG" 0 -350 50 H V C CNN F2 "" 0 -50 50 H I C CNN F3 "" 0 -50 50 H I C CNN $FPLIST LED* LED_SMD:* LED_THT:* $ENDFPLIST DRAW C 80 0 10 0 1 0 F T 0 -75 -250 50 0 0 0 B Normal 0 C C T 0 -75 -50 50 0 0 0 G Normal 0 C C T 0 -75 150 50 0 0 0 R Normal 0 C C S 50 250 50 250 0 1 0 N S 110 330 -110 -300 0 1 10 f P 2 0 1 0 -100 -200 50 -200 N P 2 0 1 8 -50 -150 -50 -250 N P 2 0 1 8 -50 50 -50 -50 N P 2 0 1 8 -50 250 -50 150 N P 2 0 1 0 50 200 -100 200 N P 2 0 1 0 100 0 -100 0 N P 4 0 1 0 50 -200 80 -200 80 200 50 200 N P 4 0 1 8 50 -150 50 -250 -50 -200 50 -150 N P 4 0 1 8 50 50 50 -50 -50 0 50 50 N P 4 0 1 8 50 250 50 150 -50 200 50 250 N P 5 0 1 0 -40 -150 20 -90 -10 -90 20 -90 20 -120 N P 5 0 1 0 -40 50 20 110 -10 110 20 110 20 80 N P 5 0 1 0 -40 250 20 310 -10 310 20 310 20 280 N P 5 0 1 0 0 -150 60 -90 30 -90 60 -90 60 -120 N P 5 0 1 0 0 50 60 110 30 110 60 110 60 80 N P 5 0 1 0 0 250 60 310 30 310 60 310 60 280 N X A 1 200 0 100 L 50 50 1 1 P X RK 2 -200 200 100 R 50 50 1 1 P X BK 3 -200 -200 100 R 50 50 1 1 P X GK 4 -200 0 100 R 50 50 1 1 P ENDDRAW ENDDEF # # LED_ARGB # DEF LED_ARGB D 0 0 Y N 1 F N F0 "D" 0 370 50 H V C CNN F1 "LED_ARGB" 0 -350 50 H V C CNN F2 "" 0 -50 50 H I C CNN F3 "" 0 -50 50 H I C CNN $FPLIST LED* LED_SMD:* LED_THT:* $ENDFPLIST DRAW C 80 0 10 0 1 0 F T 0 -75 -250 50 0 0 0 B Normal 0 C C T 0 -75 -50 50 0 0 0 G Normal 0 C C T 0 -75 150 50 0 0 0 R Normal 0 C C S 50 250 50 250 0 1 0 N S 110 330 -110 -300 0 1 10 f P 2 0 1 0 -100 -200 50 -200 N P 2 0 1 10 -50 -150 -50 -250 N P 2 0 1 10 -50 50 -50 -50 N P 2 0 1 10 -50 250 -50 150 N P 2 0 1 0 50 200 -100 200 N P 2 0 1 0 100 0 -100 0 N P 4 0 1 0 50 -200 80 -200 80 200 50 200 N P 4 0 1 10 50 -150 50 -250 -50 -200 50 -150 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 4 0 1 10 50 250 50 150 -50 200 50 250 N P 5 0 1 0 -40 -150 20 -90 -10 -90 20 -90 20 -120 N P 5 0 1 0 -40 50 20 110 -10 110 20 110 20 80 N P 5 0 1 0 -40 250 20 310 -10 310 20 310 20 280 N P 5 0 1 0 0 -150 60 -90 30 -90 60 -90 60 -120 N P 5 0 1 0 0 50 60 110 30 110 60 110 60 80 N P 5 0 1 0 0 250 60 310 30 310 60 310 60 280 N X A 1 200 0 100 L 50 50 1 1 P X RK 2 -200 200 100 R 50 50 1 1 P X GK 3 -200 0 100 R 50 50 1 1 P X BK 4 -200 -200 100 R 50 50 1 1 P ENDDRAW ENDDEF # # LED_BARG # DEF LED_BARG D 0 0 Y N 1 F N F0 "D" 0 370 50 H V C CNN F1 "LED_BARG" 0 -350 50 H V C CNN F2 "" 0 -50 50 H I C CNN F3 "" 0 -50 50 H I C CNN $FPLIST LED* LED_SMD:* LED_THT:* $ENDFPLIST DRAW C 80 0 10 0 1 0 F T 0 -75 -250 50 0 0 0 B Normal 0 C C T 0 -75 -50 50 0 0 0 G Normal 0 C C T 0 -75 150 50 0 0 0 R Normal 0 C C S 50 -50 50 50 0 1 0 N S 50 50 50 50 0 1 0 N S 50 150 50 250 0 1 0 N S 50 250 50 250 0 1 0 N S 110 330 -110 -300 0 1 10 f P 2 0 1 0 -50 -200 -100 -200 N P 2 0 1 0 -50 -200 50 -200 N P 2 0 1 10 -50 -150 -50 -250 N P 2 0 1 0 -50 0 -100 0 N P 2 0 1 0 -50 0 50 0 N P 2 0 1 10 -50 50 -50 -50 N P 2 0 1 0 -50 200 -100 200 N P 2 0 1 10 -50 250 -50 150 N P 2 0 1 0 50 0 100 0 N P 2 0 1 0 50 200 -50 200 N P 3 0 1 0 -50 50 -50 -50 -50 -50 N P 3 0 1 0 -50 250 -50 150 -50 150 N P 4 0 1 0 50 -200 80 -200 80 200 50 200 N P 4 0 1 10 50 -150 50 -250 -50 -200 50 -150 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 4 0 1 10 50 250 50 150 -50 200 50 250 N P 5 0 1 0 -40 -150 20 -90 -10 -90 20 -90 20 -120 N P 5 0 1 0 -40 50 20 110 -10 110 20 110 20 80 N P 5 0 1 0 -40 250 20 310 -10 310 20 310 20 280 N P 5 0 1 0 0 -150 60 -90 30 -90 60 -90 60 -120 N P 5 0 1 0 0 50 60 110 30 110 60 110 60 80 N P 5 0 1 0 0 250 60 310 30 310 60 310 60 280 N X BK 1 -200 -200 100 R 50 50 1 1 P X A 2 200 0 100 L 50 50 1 1 P X RK 3 -200 200 100 R 50 50 1 1 P X GK 4 -200 0 100 R 50 50 1 1 P ENDDRAW ENDDEF # # LED_BGRA # DEF LED_BGRA D 0 0 Y N 1 F N F0 "D" 0 370 50 H V C CNN F1 "LED_BGRA" 0 -350 50 H V C CNN F2 "" 0 -50 50 H I C CNN F3 "" 0 -50 50 H I C CNN $FPLIST LED* LED_SMD:* LED_THT:* $ENDFPLIST DRAW C 80 0 10 0 1 0 F T 0 -75 -250 50 0 0 0 B Normal 0 C C T 0 -75 -50 50 0 0 0 G Normal 0 C C T 0 -75 150 50 0 0 0 R Normal 0 C C S 50 -50 50 50 0 1 0 N S 50 50 50 50 0 1 0 N S 50 150 50 250 0 1 0 N S 50 250 50 250 0 1 0 N S 110 330 -110 -300 0 1 10 f P 2 0 1 0 -50 -200 -100 -200 N P 2 0 1 0 -50 -200 50 -200 N P 2 0 1 10 -50 -150 -50 -250 N P 2 0 1 0 -50 0 -100 0 N P 2 0 1 0 -50 0 50 0 N P 2 0 1 10 -50 50 -50 -50 N P 2 0 1 0 -50 200 -100 200 N P 2 0 1 10 -50 250 -50 150 N P 2 0 1 0 50 0 100 0 N P 2 0 1 0 50 200 -50 200 N P 3 0 1 0 -50 50 -50 -50 -50 -50 N P 3 0 1 0 -50 250 -50 150 -50 150 N P 4 0 1 0 50 -200 80 -200 80 200 50 200 N P 4 0 1 10 50 -150 50 -250 -50 -200 50 -150 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 4 0 1 10 50 250 50 150 -50 200 50 250 N P 5 0 1 0 -40 -150 20 -90 -10 -90 20 -90 20 -120 N P 5 0 1 0 -40 50 20 110 -10 110 20 110 20 80 N P 5 0 1 0 -40 250 20 310 -10 310 20 310 20 280 N P 5 0 1 0 0 -150 60 -90 30 -90 60 -90 60 -120 N P 5 0 1 0 0 50 60 110 30 110 60 110 60 80 N P 5 0 1 0 0 250 60 310 30 310 60 310 60 280 N X BK 1 -200 -200 100 R 50 50 1 1 P X GK 2 -200 0 100 R 50 50 1 1 P X RK 3 -200 200 100 R 50 50 1 1 P X A 4 200 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # LED_CRGB # DEF LED_CRGB D 0 0 Y N 1 F N F0 "D" 0 370 50 H V C CNN F1 "LED_CRGB" 0 -350 50 H V C CNN F2 "" 0 -50 50 H I C CNN F3 "" 0 -50 50 H I C CNN $FPLIST LED* LED_SMD:* LED_THT:* $ENDFPLIST DRAW C -85 0 10 0 1 0 F T 0 75 -250 50 0 0 0 B Normal 0 C C T 0 75 -50 50 0 0 0 G Normal 0 C C T 0 75 150 50 0 0 0 R Normal 0 C C S 110 330 -110 -300 0 1 10 f P 2 0 1 10 -50 -150 -50 -250 N P 2 0 1 10 -50 50 -50 -50 N P 2 0 1 10 -50 250 -50 150 N P 2 0 1 0 50 -200 100 -200 N P 2 0 1 0 50 0 -100 0 N P 2 0 1 0 50 0 100 0 N P 2 0 1 0 50 200 100 200 N P 4 0 1 10 50 -150 50 -250 -50 -200 50 -150 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 4 0 1 0 50 200 -85 200 -85 -200 50 -200 N P 4 0 1 10 50 250 50 150 -50 200 50 250 N P 5 0 1 0 -40 -150 20 -90 -10 -90 20 -90 20 -120 N P 5 0 1 0 -40 50 20 110 -10 110 20 110 20 80 N P 5 0 1 0 -40 250 20 310 -10 310 20 310 20 280 N P 5 0 1 0 0 -150 60 -90 30 -90 60 -90 60 -120 N P 5 0 1 0 0 50 60 110 30 110 60 110 60 80 N P 5 0 1 0 0 250 60 310 30 310 60 310 60 280 N X K 1 -200 0 100 R 50 50 1 1 P X RA 2 200 200 100 L 50 50 1 1 P X GA 3 200 0 100 L 50 50 1 1 P X BA 4 200 -200 100 L 50 50 1 1 P ENDDRAW ENDDEF # # LED_Dual_2pin # DEF LED_Dual_2pin D 0 0 Y N 1 F N F0 "D" 0 225 50 H V C CNN F1 "LED_Dual_2pin" 0 -250 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST LED* LED_SMD:* LED_THT:* $ENDFPLIST DRAW C -80 0 10 0 1 0 F C 0 0 180 0 1 10 f C 90 0 10 0 1 0 F P 2 0 1 0 -180 0 -100 0 N P 2 0 1 0 -80 0 -100 0 N P 2 0 1 10 -40 150 -40 50 N P 2 0 1 10 50 -50 50 -150 N P 2 0 1 0 160 0 90 0 F P 2 0 1 8 170 230 170 200 N P 2 0 1 8 220 180 220 150 N P 3 0 1 8 110 170 170 230 140 230 N P 3 0 1 8 160 120 220 180 190 180 N P 4 0 1 10 -40 -50 -40 -150 50 -100 -40 -50 N P 4 0 1 10 50 150 50 50 -40 100 50 150 N P 5 0 1 0 90 100 -80 100 -80 -100 90 -100 90 100 N X KA 1 300 0 150 L 50 50 1 1 I X AK 2 -300 0 120 R 50 50 1 1 I ENDDRAW ENDDEF # # LED_Dual_AAC # DEF LED_Dual_AAC D 0 0 Y N 1 F N F0 "D" 0 225 50 H V C CNN F1 "LED_Dual_AAC" 0 -250 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST LED* LED_SMD:* LED_THT:* $ENDFPLIST DRAW C -100 0 11 0 1 0 F C 0 0 180 0 1 10 f P 2 0 1 0 -180 0 -100 0 N P 2 0 1 10 -50 -50 -50 -150 N P 2 0 1 10 -50 50 -50 150 N P 2 0 1 0 150 -100 75 -100 N P 2 0 1 0 150 100 75 100 N P 4 0 1 10 50 -150 50 -50 -50 -100 50 -150 N P 4 0 1 10 50 50 50 150 -50 100 50 50 N P 4 0 1 0 80 100 -100 100 -100 -100 80 -100 N P 5 0 1 0 80 200 140 260 110 260 140 260 140 230 N P 5 0 1 0 130 160 190 220 160 220 190 220 190 190 N X A1 1 300 100 150 L 50 50 1 1 I X A2 2 300 -100 150 L 50 50 1 1 I X K 3 -300 0 120 R 50 50 1 1 I ENDDRAW ENDDEF # # LED_Dual_AACC # DEF LED_Dual_AACC D 0 0 Y N 1 F N F0 "D" 0 225 50 H V C CNN F1 "LED_Dual_AACC" 0 -250 50 H V C CNN F2 "" 30 0 50 H I C CNN F3 "" 30 0 50 H I C CNN $FPLIST LED* LED_SMD:* LED_THT:* $ENDFPLIST DRAW C 0 0 180 0 1 10 f P 2 0 1 0 -200 -100 80 -100 N P 2 0 1 0 -200 100 80 100 N P 2 0 1 10 50 -50 50 -150 N P 2 0 1 10 50 150 50 50 N P 2 0 1 0 150 -100 75 -100 N P 2 0 1 0 150 100 75 100 N P 4 0 1 10 -50 -50 -50 -150 50 -100 -50 -50 N P 4 0 1 10 -50 150 -50 50 50 100 -50 150 N P 5 0 1 0 80 200 140 260 110 260 140 260 140 230 N P 5 0 1 0 130 160 190 220 160 220 190 220 190 190 N X A1 1 -300 100 120 R 50 50 1 1 I X A2 2 -300 -100 120 R 50 50 1 1 I X K1 3 300 100 150 L 50 50 1 1 I X K2 4 300 -100 150 L 50 50 1 1 I ENDDRAW ENDDEF # # LED_Dual_ACA # DEF LED_Dual_ACA D 0 0 Y N 1 F N F0 "D" 0 225 50 H V C CNN F1 "LED_Dual_ACA" 0 -250 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST LED* LED_SMD:* LED_THT:* $ENDFPLIST DRAW C -100 0 11 0 1 0 F C 0 0 180 0 1 10 f P 2 0 1 0 -180 0 -100 0 N P 2 0 1 10 -50 -50 -50 -150 N P 2 0 1 10 -50 50 -50 150 N P 2 0 1 0 150 -100 75 -100 N P 2 0 1 0 150 100 75 100 N P 4 0 1 10 50 -150 50 -50 -50 -100 50 -150 N P 4 0 1 10 50 50 50 150 -50 100 50 50 N P 4 0 1 0 80 100 -100 100 -100 -100 80 -100 N P 5 0 1 0 80 200 140 260 110 260 140 260 140 230 N P 5 0 1 0 130 160 190 220 160 220 190 220 190 190 N X A1 1 300 100 150 L 50 50 1 1 I X K 2 -300 0 120 R 50 50 1 1 I X A2 3 300 -100 150 L 50 50 1 1 I ENDDRAW ENDDEF # # LED_Dual_ACAC # DEF LED_Dual_ACAC D 0 0 Y N 1 F N F0 "D" 0 225 50 H V C CNN F1 "LED_Dual_ACAC" 0 -250 50 H V C CNN F2 "" 30 0 50 H I C CNN F3 "" 30 0 50 H I C CNN $FPLIST LED* LED_SMD:* LED_THT:* $ENDFPLIST DRAW C 0 0 180 0 1 10 f P 2 0 1 0 -200 -100 80 -100 N P 2 0 1 0 -200 100 80 100 N P 2 0 1 10 50 -50 50 -150 N P 2 0 1 10 50 150 50 50 N P 2 0 1 0 150 -100 75 -100 N P 2 0 1 0 150 100 75 100 N P 4 0 1 10 -50 -50 -50 -150 50 -100 -50 -50 N P 4 0 1 10 -50 150 -50 50 50 100 -50 150 N P 5 0 1 0 80 200 140 260 110 260 140 260 140 230 N P 5 0 1 0 130 160 190 220 160 220 190 220 190 190 N X A1 1 -300 100 120 R 50 50 1 1 I X K1 2 300 100 150 L 50 50 1 1 I X A2 3 -300 -100 120 R 50 50 1 1 I X K2 4 300 -100 150 L 50 50 1 1 I ENDDRAW ENDDEF # # LED_Dual_CAC # DEF LED_Dual_CAC D 0 0 Y Y 1 F N F0 "D" 0 225 50 H V C CNN F1 "LED_Dual_CAC" 0 -250 50 H V C CNN F2 "" 50 0 50 H I C CNN F3 "" 50 0 50 H I C CNN $FPLIST LED* LED_SMD:* LED_THT:* $ENDFPLIST DRAW C -100 0 11 0 1 0 F C 0 0 180 0 1 10 f P 2 0 1 0 -180 0 -100 0 N P 2 0 1 10 50 -50 50 -150 N P 2 0 1 10 50 150 50 50 N P 2 0 1 0 150 -100 75 -100 N P 2 0 1 0 150 100 75 100 N P 4 0 1 10 -50 -50 -50 -150 50 -100 -50 -50 N P 4 0 1 10 -50 150 -50 50 50 100 -50 150 N P 4 0 1 0 80 100 -100 100 -100 -100 80 -100 N P 5 0 1 0 80 200 140 260 110 260 140 260 140 230 N P 5 0 1 0 130 160 190 220 160 220 190 220 190 190 N X K1 1 300 100 150 L 50 50 1 1 I X A 2 -300 0 120 R 50 50 1 1 I X K2 3 300 -100 150 L 50 50 1 1 I ENDDRAW ENDDEF # # LED_Dual_CACA # DEF LED_Dual_CACA D 0 0 Y N 1 F N F0 "D" 0 225 50 H V C CNN F1 "LED_Dual_CACA" 0 -250 50 H V C CNN F2 "" 30 0 50 H I C CNN F3 "" 30 0 50 H I C CNN $FPLIST LED* LED_SMD:* LED_THT:* $ENDFPLIST DRAW C 0 0 180 0 1 10 f P 2 0 1 0 -200 -100 80 -100 N P 2 0 1 0 -200 100 80 100 N P 2 0 1 10 -50 -50 -50 -150 N P 2 0 1 10 -50 150 -50 50 N P 2 0 1 0 150 -100 75 -100 N P 2 0 1 0 150 100 75 100 N P 4 0 1 10 50 -50 50 -150 -50 -100 50 -50 N P 4 0 1 10 50 150 50 50 -50 100 50 150 N P 5 0 1 0 80 200 140 260 110 260 140 260 140 230 N P 5 0 1 0 130 160 190 220 160 220 190 220 190 190 N X A1 1 -300 100 120 R 50 50 1 1 I X K1 2 300 100 150 L 50 50 1 1 I X A2 3 -300 -100 120 R 50 50 1 1 I X K2 4 300 -100 150 L 50 50 1 1 I ENDDRAW ENDDEF # # LED_Dual_CCA # DEF LED_Dual_CCA D 0 0 Y Y 1 F N F0 "D" 0 225 50 H V C CNN F1 "LED_Dual_CCA" 0 -250 50 H V C CNN F2 "" 50 0 50 H I C CNN F3 "" 50 0 50 H I C CNN $FPLIST LED* LED_SMD:* LED_THT:* $ENDFPLIST DRAW C -100 0 11 0 1 0 F C 0 0 180 0 1 10 f P 2 0 1 0 -180 0 -100 0 N P 2 0 1 10 50 -50 50 -150 N P 2 0 1 10 50 150 50 50 N P 2 0 1 0 150 -100 75 -100 N P 2 0 1 0 150 100 75 100 N P 4 0 1 10 -50 -50 -50 -150 50 -100 -50 -50 N P 4 0 1 10 -50 150 -50 50 50 100 -50 150 N P 4 0 1 0 80 100 -100 100 -100 -100 80 -100 N P 5 0 1 0 80 200 140 260 110 260 140 260 140 230 N P 5 0 1 0 130 160 190 220 160 220 190 220 190 190 N X K1 1 300 100 150 L 50 50 1 1 I X K2 2 300 -100 150 L 50 50 1 1 I X A 3 -300 0 120 R 50 50 1 1 I ENDDRAW ENDDEF # # LED_PAD # DEF LED_PAD D 0 40 Y N 1 F N F0 "D" 0 225 50 H V C CNN F1 "LED_PAD" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST LED* LED_SMD:* LED_THT:* $ENDFPLIST DRAW P 2 0 1 10 -50 -50 -50 50 N P 2 0 1 0 -50 0 50 0 N P 2 0 1 0 0 -100 0 -80 N P 4 0 1 0 -80 -20 -80 -80 80 -80 80 -20 N P 4 0 1 10 50 -50 50 50 -50 0 50 -50 N P 5 0 1 0 -35 55 25 115 -5 115 25 115 25 85 N P 5 0 1 0 15 55 75 115 45 115 75 115 75 85 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P X PAD 3 0 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # LED_RABG # DEF LED_RABG D 0 0 Y N 1 F N F0 "D" 0 370 50 H V C CNN F1 "LED_RABG" 0 -350 50 H V C CNN F2 "" 0 -50 50 H I C CNN F3 "" 0 -50 50 H I C CNN $FPLIST LED* LED_SMD:* LED_THT:* $ENDFPLIST DRAW C 80 0 10 0 1 0 F T 0 -75 -250 50 0 0 0 B Normal 0 C C T 0 -75 -50 50 0 0 0 G Normal 0 C C T 0 -75 150 50 0 0 0 R Normal 0 C C S 50 -50 50 50 0 1 0 N S 50 50 50 50 0 1 0 N S 50 150 50 250 0 1 0 N S 50 250 50 250 0 1 0 N S 110 330 -110 -300 0 1 10 f P 2 0 1 0 -50 -200 -100 -200 N P 2 0 1 0 -50 -200 50 -200 N P 2 0 1 10 -50 -150 -50 -250 N P 2 0 1 0 -50 0 -100 0 N P 2 0 1 0 -50 0 50 0 N P 2 0 1 10 -50 50 -50 -50 N P 2 0 1 0 -50 200 -100 200 N P 2 0 1 10 -50 250 -50 150 N P 2 0 1 0 50 0 100 0 N P 2 0 1 0 50 200 -50 200 N P 3 0 1 0 -50 50 -50 -50 -50 -50 N P 3 0 1 0 -50 250 -50 150 -50 150 N P 4 0 1 0 50 -200 80 -200 80 200 50 200 N P 4 0 1 10 50 -150 50 -250 -50 -200 50 -150 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 4 0 1 10 50 250 50 150 -50 200 50 250 N P 5 0 1 0 -40 -150 20 -90 -10 -90 20 -90 20 -120 N P 5 0 1 0 -40 50 20 110 -10 110 20 110 20 80 N P 5 0 1 0 -40 250 20 310 -10 310 20 310 20 280 N P 5 0 1 0 0 -150 60 -90 30 -90 60 -90 60 -120 N P 5 0 1 0 0 50 60 110 30 110 60 110 60 80 N P 5 0 1 0 0 250 60 310 30 310 60 310 60 280 N X RK 1 -200 200 100 R 50 50 1 1 P X A 2 200 0 100 L 50 50 1 1 P X BK 3 -200 -200 100 R 50 50 1 1 P X GK 4 -200 0 100 R 50 50 1 1 P ENDDRAW ENDDEF # # LED_RAGB # DEF LED_RAGB D 0 0 Y N 1 F N F0 "D" 0 370 50 H V C CNN F1 "LED_RAGB" 0 -350 50 H V C CNN F2 "" 0 -50 50 H I C CNN F3 "" 0 -50 50 H I C CNN $FPLIST LED* LED_SMD:* LED_THT:* $ENDFPLIST DRAW C 80 0 10 0 1 0 F T 0 -75 -250 50 0 0 0 B Normal 0 C C T 0 -75 -50 50 0 0 0 G Normal 0 C C T 0 -75 150 50 0 0 0 R Normal 0 C C S 50 -50 50 50 0 1 0 N S 50 50 50 50 0 1 0 N S 50 150 50 250 0 1 0 N S 50 250 50 250 0 1 0 N S 110 330 -110 -300 0 1 10 f P 2 0 1 0 -50 -200 -100 -200 N P 2 0 1 0 -50 -200 50 -200 N P 2 0 1 10 -50 -150 -50 -250 N P 2 0 1 0 -50 0 -100 0 N P 2 0 1 10 -50 50 -50 -50 N P 2 0 1 0 -50 200 -100 200 N P 2 0 1 0 -50 200 50 200 N P 2 0 1 10 -50 250 -50 150 N P 2 0 1 0 50 0 -50 0 N P 2 0 1 0 50 0 100 0 N P 3 0 1 0 -50 50 -50 -50 -50 -50 N P 3 0 1 0 -50 250 -50 150 -50 150 N P 4 0 1 0 50 -200 80 -200 80 200 50 200 N P 4 0 1 10 50 -150 50 -250 -50 -200 50 -150 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 4 0 1 10 50 250 50 150 -50 200 50 250 N P 5 0 1 0 -40 -150 20 -90 -10 -90 20 -90 20 -120 N P 5 0 1 0 -40 50 20 110 -10 110 20 110 20 80 N P 5 0 1 0 -40 250 20 310 -10 310 20 310 20 280 N P 5 0 1 0 0 -150 60 -90 30 -90 60 -90 60 -120 N P 5 0 1 0 0 50 60 110 30 110 60 110 60 80 N P 5 0 1 0 0 250 60 310 30 310 60 310 60 280 N X RK 1 -200 200 100 R 50 50 1 1 P X A 2 200 0 100 L 50 50 1 1 P X GK 3 -200 0 100 R 50 50 1 1 P X BK 4 -200 -200 100 R 50 50 1 1 P ENDDRAW ENDDEF # # LED_RCBG # DEF LED_RCBG D 0 0 Y N 1 F N F0 "D" 0 370 50 H V C CNN F1 "LED_RCBG" 0 -350 50 H V C CNN F2 "" 0 -50 50 H I C CNN F3 "" 0 -50 50 H I C CNN $FPLIST LED* LED_SMD:* LED_THT:* $ENDFPLIST DRAW C -85 0 10 0 1 0 F T 0 75 -250 50 0 0 0 B Normal 0 C C T 0 75 -50 50 0 0 0 G Normal 0 C C T 0 75 150 50 0 0 0 R Normal 0 C C S 50 -50 50 50 0 1 0 N S 50 50 50 50 0 1 0 N S 50 150 50 250 0 1 0 N S 50 250 50 250 0 1 0 N S 110 330 -110 -300 0 1 10 f P 2 0 1 0 -50 -200 50 -200 N P 2 0 1 10 -50 -150 -50 -250 N P 2 0 1 0 -50 0 -100 0 N P 2 0 1 10 -50 50 -50 -50 N P 2 0 1 0 -50 200 50 200 N P 2 0 1 10 -50 250 -50 150 N P 2 0 1 0 50 -200 100 -200 N P 2 0 1 0 50 0 -50 0 N P 2 0 1 0 50 0 100 0 N P 2 0 1 0 50 200 100 200 N P 3 0 1 0 -50 50 -50 -50 -50 -50 N P 3 0 1 0 -50 250 -50 150 -50 150 N P 4 0 1 0 -50 200 -85 200 -85 -200 -40 -200 N P 4 0 1 10 50 -150 50 -250 -50 -200 50 -150 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 4 0 1 10 50 250 50 150 -50 200 50 250 N P 5 0 1 0 -40 -150 20 -90 -10 -90 20 -90 20 -120 N P 5 0 1 0 -40 50 20 110 -10 110 20 110 20 80 N P 5 0 1 0 -40 250 20 310 -10 310 20 310 20 280 N P 5 0 1 0 0 -150 60 -90 30 -90 60 -90 60 -120 N P 5 0 1 0 0 50 60 110 30 110 60 110 60 80 N P 5 0 1 0 0 250 60 310 30 310 60 310 60 280 N X RA 1 200 200 100 L 50 50 1 1 P X K 2 -200 0 100 R 50 50 1 1 P X BA 3 200 -200 100 L 50 50 1 1 P X GA 4 200 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # LED_RCGB # DEF LED_RCGB D 0 0 Y N 1 F N F0 "D" 0 370 50 H V C CNN F1 "LED_RCGB" 0 -350 50 H V C CNN F2 "" 0 -50 50 H I C CNN F3 "" 0 -50 50 H I C CNN $FPLIST LED* LED_SMD:* LED_THT:* $ENDFPLIST DRAW C -85 0 10 0 1 0 F T 0 75 -250 50 0 0 0 B Normal 0 C C T 0 75 -50 50 0 0 0 G Normal 0 C C T 0 75 150 50 0 0 0 R Normal 0 C C S 50 -50 50 50 0 1 0 N S 50 50 50 50 0 1 0 N S 50 150 50 250 0 1 0 N S 50 250 50 250 0 1 0 N S 110 330 -110 -300 0 1 10 f P 2 0 1 10 -50 -150 -50 -250 N P 2 0 1 0 -50 0 -100 0 N P 2 0 1 0 -50 0 50 0 N P 2 0 1 10 -50 50 -50 -50 N P 2 0 1 0 -50 200 50 200 N P 2 0 1 10 -50 250 -50 150 N P 2 0 1 0 50 -200 -50 -200 N P 2 0 1 0 50 -200 100 -200 N P 2 0 1 0 50 0 100 0 N P 2 0 1 0 50 200 100 200 N P 3 0 1 0 -50 50 -50 -50 -50 -50 N P 3 0 1 0 -50 250 -50 150 -50 150 N P 4 0 1 0 -50 200 -85 200 -85 -200 -40 -200 N P 4 0 1 10 50 -150 50 -250 -50 -200 50 -150 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 4 0 1 10 50 250 50 150 -50 200 50 250 N P 5 0 1 0 -40 -150 20 -90 -10 -90 20 -90 20 -120 N P 5 0 1 0 -40 50 20 110 -10 110 20 110 20 80 N P 5 0 1 0 -40 250 20 310 -10 310 20 310 20 280 N P 5 0 1 0 0 -150 60 -90 30 -90 60 -90 60 -120 N P 5 0 1 0 0 50 60 110 30 110 60 110 60 80 N P 5 0 1 0 0 250 60 310 30 310 60 310 60 280 N X RA 1 200 200 100 L 50 50 1 1 P X K 2 -200 0 100 R 50 50 1 1 P X GA 3 200 0 100 L 50 50 1 1 P X BA 4 200 -200 100 L 50 50 1 1 P ENDDRAW ENDDEF # # LED_RGB # DEF LED_RGB D 0 0 Y N 1 F N F0 "D" 0 370 50 H V C CNN F1 "LED_RGB" 0 -350 50 H V C CNN F2 "" 0 -50 50 H I C CNN F3 "" 0 -50 50 H I C CNN $FPLIST LED* LED_SMD:* LED_THT:* $ENDFPLIST DRAW T 0 -75 -250 50 0 0 0 B Normal 0 C C T 0 -75 -50 50 0 0 0 G Normal 0 C C T 0 -75 150 50 0 0 0 R Normal 0 C C S 50 -50 50 50 0 1 0 N S 50 50 50 50 0 1 0 N S 50 150 50 250 0 1 0 N S 50 250 50 250 0 1 0 N S 110 330 -110 -300 0 1 10 f P 2 0 1 0 -50 -200 -100 -200 N P 2 0 1 0 -50 -200 50 -200 N P 2 0 1 10 -50 -150 -50 -250 N P 2 0 1 0 -50 0 -100 0 N P 2 0 1 10 -50 50 -50 -50 N P 2 0 1 0 -50 200 -100 200 N P 2 0 1 0 -50 200 50 200 N P 2 0 1 10 -50 250 -50 150 N P 2 0 1 0 50 -200 100 -200 N P 2 0 1 0 50 0 -50 0 N P 2 0 1 0 50 0 100 0 N P 2 0 1 0 50 200 100 200 N P 3 0 1 0 -50 50 -50 -50 -50 -50 N P 3 0 1 0 -50 250 -50 150 -50 150 N P 4 0 1 10 50 -150 50 -250 -50 -200 50 -150 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 4 0 1 10 50 250 50 150 -50 200 50 250 N P 5 0 1 0 -40 -150 20 -90 -10 -90 20 -90 20 -120 N P 5 0 1 0 -40 50 20 110 -10 110 20 110 20 80 N P 5 0 1 0 -40 250 20 310 -10 310 20 310 20 280 N P 5 0 1 0 0 -150 60 -90 30 -90 60 -90 60 -120 N P 5 0 1 0 0 50 60 110 30 110 60 110 60 80 N P 5 0 1 0 0 250 60 310 30 310 60 310 60 280 N X RK 1 -200 200 100 R 50 50 1 1 P X GK 2 -200 0 100 R 50 50 1 1 P X BK 3 -200 -200 100 R 50 50 1 1 P X BA 4 200 -200 100 L 50 50 1 1 P X GA 5 200 0 100 L 50 50 1 1 P X RA 6 200 200 100 L 50 50 1 1 P ENDDRAW ENDDEF # # LED_RGBA # DEF LED_RGBA D 0 0 Y N 1 F N F0 "D" 0 370 50 H V C CNN F1 "LED_RGBA" 0 -350 50 H V C CNN F2 "" 0 -50 50 H I C CNN F3 "" 0 -50 50 H I C CNN $FPLIST LED* LED_SMD:* LED_THT:* $ENDFPLIST DRAW C 80 0 10 0 1 0 F T 0 -75 -250 50 0 0 0 B Normal 0 C C T 0 -75 -50 50 0 0 0 G Normal 0 C C T 0 -75 150 50 0 0 0 R Normal 0 C C S 50 -50 50 50 0 1 0 N S 50 50 50 50 0 1 0 N S 50 150 50 250 0 1 0 N S 50 250 50 250 0 1 0 N S 110 330 -110 -300 0 1 10 f P 2 0 1 0 -50 -200 -100 -200 N P 2 0 1 0 -50 -200 50 -200 N P 2 0 1 10 -50 -150 -50 -250 N P 2 0 1 0 -50 0 -100 0 N P 2 0 1 0 -50 0 50 0 N P 2 0 1 10 -50 50 -50 -50 N P 2 0 1 0 -50 200 -100 200 N P 2 0 1 10 -50 250 -50 150 N P 2 0 1 0 50 0 100 0 N P 2 0 1 0 50 200 -50 200 N P 3 0 1 0 -50 50 -50 -50 -50 -50 N P 3 0 1 0 -50 250 -50 150 -50 150 N P 4 0 1 0 50 -200 80 -200 80 200 50 200 N P 4 0 1 10 50 -150 50 -250 -50 -200 50 -150 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 4 0 1 10 50 250 50 150 -50 200 50 250 N P 5 0 1 0 -40 -150 20 -90 -10 -90 20 -90 20 -120 N P 5 0 1 0 -40 50 20 110 -10 110 20 110 20 80 N P 5 0 1 0 -40 250 20 310 -10 310 20 310 20 280 N P 5 0 1 0 0 -150 60 -90 30 -90 60 -90 60 -120 N P 5 0 1 0 0 50 60 110 30 110 60 110 60 80 N P 5 0 1 0 0 250 60 310 30 310 60 310 60 280 N X RK 1 -200 200 100 R 50 50 1 1 P X GK 2 -200 0 100 R 50 50 1 1 P X BK 3 -200 -200 100 R 50 50 1 1 P X A 4 200 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # LED_RGBC # DEF LED_RGBC D 0 0 Y N 1 F N F0 "D" 0 370 50 H V C CNN F1 "LED_RGBC" 0 -350 50 H V C CNN F2 "" 0 -50 50 H I C CNN F3 "" 0 -50 50 H I C CNN $FPLIST LED* LED_SMD:* LED_THT:* $ENDFPLIST DRAW C -85 0 10 0 1 0 F T 0 75 -250 50 0 0 0 B Normal 0 C C T 0 75 -50 50 0 0 0 G Normal 0 C C T 0 75 150 50 0 0 0 R Normal 0 C C S 50 -50 50 50 0 1 0 N S 50 50 50 50 0 1 0 N S 50 150 50 250 0 1 0 N S 50 250 50 250 0 1 0 N S 110 330 -110 -300 0 1 10 f P 2 0 1 0 -50 -200 50 -200 N P 2 0 1 10 -50 -150 -50 -250 N P 2 0 1 0 -50 0 -100 0 N P 2 0 1 10 -50 50 -50 -50 N P 2 0 1 0 -50 200 50 200 N P 2 0 1 10 -50 250 -50 150 N P 2 0 1 0 50 -200 100 -200 N P 2 0 1 0 50 0 -50 0 N P 2 0 1 0 50 0 100 0 N P 2 0 1 0 50 200 100 200 N P 3 0 1 0 -50 50 -50 -50 -50 -50 N P 3 0 1 0 -50 250 -50 150 -50 150 N P 4 0 1 0 -50 200 -85 200 -85 -200 -40 -200 N P 4 0 1 10 50 -150 50 -250 -50 -200 50 -150 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 4 0 1 10 50 250 50 150 -50 200 50 250 N P 5 0 1 0 -40 -150 20 -90 -10 -90 20 -90 20 -120 N P 5 0 1 0 -40 50 20 110 -10 110 20 110 20 80 N P 5 0 1 0 -40 250 20 310 -10 310 20 310 20 280 N P 5 0 1 0 0 -150 60 -90 30 -90 60 -90 60 -120 N P 5 0 1 0 0 50 60 110 30 110 60 110 60 80 N P 5 0 1 0 0 250 60 310 30 310 60 310 60 280 N X RA 1 200 200 100 L 50 50 1 1 P X GA 2 200 0 100 L 50 50 1 1 P X BA 3 200 -200 100 L 50 50 1 1 P X K 4 -200 0 100 R 50 50 1 1 P ENDDRAW ENDDEF # # LED_RGB_EP # DEF LED_RGB_EP D 0 0 Y N 1 F N F0 "D" 0 450 50 H V C CNN F1 "LED_RGB_EP" 0 370 50 H V C CNN F2 "" 0 -50 50 H I C CNN F3 "" 0 -50 50 H I C CNN $FPLIST LED* LED_SMD:* LED_THT:* $ENDFPLIST DRAW C 0 -300 14 0 1 10 F T 0 -75 -250 50 0 0 0 B Normal 0 C C T 0 -75 -50 50 0 0 0 G Normal 0 C C T 0 -75 150 50 0 0 0 R Normal 0 C C S 50 -50 50 50 0 1 0 N S 50 50 50 50 0 1 0 N S 50 150 50 250 0 1 0 N S 50 250 50 250 0 1 0 N S 110 330 -110 -300 0 1 10 f P 2 0 1 0 -50 -200 -100 -200 N P 2 0 1 10 -50 -150 -50 -250 N P 2 0 1 0 -50 0 -100 0 N P 2 0 1 10 -50 50 -50 -50 N P 2 0 1 0 -50 200 -100 200 N P 2 0 1 0 -50 200 50 200 N P 2 0 1 10 -50 250 -50 150 N P 2 0 1 0 -40 0 50 0 N P 2 0 1 0 50 -200 -50 -200 N P 2 0 1 0 50 -200 100 -200 N P 2 0 1 0 50 200 100 200 N P 2 0 1 0 100 0 50 0 N P 3 0 1 0 -50 50 -50 -50 -50 -50 N P 3 0 1 0 -50 250 -50 150 -50 150 N P 4 0 1 10 50 -150 50 -250 -50 -200 50 -150 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 4 0 1 10 50 250 50 150 -50 200 50 250 N P 5 0 1 0 -40 -150 20 -90 -10 -90 20 -90 20 -120 N P 5 0 1 0 -40 50 20 110 -10 110 20 110 20 80 N P 5 0 1 0 -40 250 20 310 -10 310 20 310 20 280 N P 5 0 1 0 0 -150 60 -90 30 -90 60 -90 60 -120 N P 5 0 1 0 0 50 60 110 30 110 60 110 60 80 N P 5 0 1 0 0 250 60 310 30 310 60 310 60 280 N X RK 1 -200 200 100 R 50 50 1 1 P X GK 2 -200 0 100 R 50 50 1 1 P X BK 3 -200 -200 100 R 50 50 1 1 P X BA 4 200 -200 100 L 50 50 1 1 P X GA 5 200 0 100 L 50 50 1 1 P X RA 6 200 200 100 L 50 50 1 1 P X PAD 7 0 -500 200 U 50 50 1 1 P ENDDRAW ENDDEF # # LED_Series # DEF LED_Series D 0 40 Y N 1 F N F0 "D" 0 225 50 H V C CNN F1 "LED_Series" 0 150 50 H V C CNN F2 "" -100 0 50 H I C CNN F3 "" -100 0 50 H I C CNN $FPLIST LED* LED_SMD:* LED_THT:* $ENDFPLIST DRAW P 2 0 1 0 -150 0 -40 0 N P 2 0 1 10 -145 -50 -145 50 N P 2 0 1 0 -20 0 -30 0 N P 2 0 1 0 5 0 -5 0 N P 2 0 1 0 20 0 30 0 N P 2 0 1 0 40 0 150 0 N P 2 0 1 10 45 -50 45 50 N P 4 0 1 10 -45 -50 -45 50 -145 0 -45 -50 N P 4 0 1 10 145 -50 145 50 45 0 145 -50 N P 5 0 1 0 -130 55 -70 115 -100 115 -70 115 -70 85 N P 5 0 1 0 -80 55 -20 115 -50 115 -20 115 -20 85 N P 5 0 1 0 60 55 120 115 90 115 120 115 120 85 N P 5 0 1 0 110 55 170 115 140 115 170 115 170 85 N X K 1 -250 0 100 R 50 50 1 1 P X A 2 250 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # LED_Series_PAD # DEF LED_Series_PAD D 0 40 Y N 1 F N F0 "D" 0 225 50 H V C CNN F1 "LED_Series_PAD" 0 150 50 H V C CNN F2 "" -100 0 50 H I C CNN F3 "" -100 0 50 H I C CNN $FPLIST LED* LED_SMD:* LED_THT:* $ENDFPLIST DRAW P 2 0 1 0 -150 0 -40 0 N P 2 0 1 10 -145 -50 -145 50 N P 2 0 1 0 -20 0 -30 0 N P 2 0 1 0 0 -100 0 -80 N P 2 0 1 0 5 0 -5 0 N P 2 0 1 0 20 0 30 0 N P 2 0 1 0 40 0 150 0 N P 2 0 1 10 45 -50 45 50 N P 4 0 1 0 -160 -20 -160 -80 160 -80 160 -20 N P 4 0 1 10 -45 -50 -45 50 -145 0 -45 -50 N P 4 0 1 10 145 -50 145 50 45 0 145 -50 N P 5 0 1 0 -130 55 -70 115 -100 115 -70 115 -70 85 N P 5 0 1 0 -80 55 -20 115 -50 115 -20 115 -20 85 N P 5 0 1 0 60 55 120 115 90 115 120 115 120 85 N P 5 0 1 0 110 55 170 115 140 115 170 115 170 85 N X K 1 -250 0 100 R 50 50 1 1 P X A 2 250 0 100 L 50 50 1 1 P X PAD 3 0 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # LED_Small # DEF LED_Small D 0 10 N N 1 F N F0 "D" -50 125 50 H V L CNN F1 "LED_Small" -175 -100 50 H V L CNN F2 "" 0 0 50 V I C CNN F3 "" 0 0 50 V I C CNN $FPLIST LED* LED_SMD:* LED_THT:* $ENDFPLIST DRAW P 2 0 1 10 -30 -40 -30 40 N P 2 0 1 0 40 0 -30 0 N P 4 0 1 10 30 -40 -30 0 30 40 30 -40 N P 5 0 1 0 0 30 -20 50 -10 50 -20 50 -20 40 N P 5 0 1 0 20 50 0 70 10 70 0 70 0 60 N X K 1 -100 0 70 R 50 50 1 1 P X A 2 100 0 70 L 50 50 1 1 P ENDDRAW ENDDEF # # LED_Small_ALT # DEF LED_Small_ALT D 0 10 N N 1 F N F0 "D" -50 125 50 H V L CNN F1 "LED_Small_ALT" -175 -100 50 H V L CNN F2 "" 0 0 50 V I C CNN F3 "" 0 0 50 V I C CNN $FPLIST LED* LED_SMD:* LED_THT:* $ENDFPLIST DRAW P 2 0 1 10 -30 -40 -30 40 N P 2 0 1 0 40 0 -30 0 N P 4 0 1 10 30 -40 -30 0 30 40 30 -40 F P 5 0 1 0 0 30 -20 50 -10 50 -20 50 -20 40 N P 5 0 1 0 20 50 0 70 10 70 0 70 0 60 N X K 1 -100 0 70 R 50 50 1 1 P X A 2 100 0 70 L 50 50 1 1 P ENDDRAW ENDDEF # # LTRIM # DEF LTRIM L 0 40 N N 1 F N F0 "L" -75 0 50 V V C CNN F1 "LTRIM" 125 0 50 V V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Inductor_* L_* $ENDFPLIST DRAW A 0 -75 25 -899 899 0 1 0 N 0 -100 0 -50 A 0 -25 25 -899 899 0 1 0 N 0 -50 0 0 A 0 25 25 -899 899 0 1 0 N 0 0 0 50 A 0 75 25 -899 899 0 1 0 N 0 50 0 100 P 2 0 1 0 -50 -75 75 100 N P 2 0 1 0 75 100 40 85 N P 2 0 1 0 75 100 70 65 N X 1 1 0 150 50 D 50 50 1 1 P X 2 2 0 -150 50 U 50 50 1 1 P ENDDRAW ENDDEF # # L_Core_Ferrite # DEF L_Core_Ferrite L 0 40 N N 1 F N F0 "L" -50 0 50 V V C CNN F1 "L_Core_Ferrite" 110 0 50 V V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Choke_* *Coil* Inductor_* L_* $ENDFPLIST DRAW A 0 -75 25 -899 899 0 1 0 N 0 -100 0 -50 A 0 -25 25 -899 899 0 1 0 N 0 -50 0 0 A 0 25 25 -899 899 0 1 0 N 0 0 0 50 A 0 75 25 -899 899 0 1 0 N 0 50 0 100 P 2 0 1 0 40 -110 40 -90 N P 2 0 1 0 40 -70 40 -50 N P 2 0 1 0 40 -30 40 -10 N P 2 0 1 0 40 10 40 30 N P 2 0 1 0 40 50 40 70 N P 2 0 1 0 40 90 40 110 N P 2 0 1 0 60 -90 60 -110 N P 2 0 1 0 60 -50 60 -70 N P 2 0 1 0 60 -10 60 -30 N P 2 0 1 0 60 30 60 10 N P 2 0 1 0 60 70 60 50 N P 2 0 1 0 60 110 60 90 N X 1 1 0 150 50 D 50 50 1 1 P X 2 2 0 -150 50 U 50 50 1 1 P ENDDRAW ENDDEF # # L_Core_Ferrite_Coupled # DEF L_Core_Ferrite_Coupled L 0 10 Y N 1 F N F0 "L" 0 175 50 H V C CNN F1 "L_Core_Ferrite_Coupled" 0 -175 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Choke_* *Coil* Inductor_* L_* $ENDFPLIST DRAW A -80 -80 20 1 1799 0 1 0 N -60 -80 -100 -80 A -80 80 20 -1799 -1 0 1 0 N -100 80 -60 80 A -40 -80 20 1 1799 0 1 0 N -20 -80 -60 -80 A -40 80 20 -1799 -1 0 1 0 N -60 80 -20 80 A 0 -80 20 1 1799 0 1 0 N 20 -80 -20 -80 A 0 80 20 -1799 -1 0 1 0 N -20 80 20 80 A 40 -80 20 1 1799 0 1 0 N 60 -80 20 -80 A 40 80 20 -1799 -1 0 1 0 N 20 80 60 80 A 80 -80 20 1 1799 0 1 0 N 100 -80 60 -80 A 80 80 20 -1799 -1 0 1 0 N 60 80 100 80 C -120 -50 10 0 1 0 F C -120 60 10 0 1 0 F P 2 0 1 0 -110 -20 -90 -20 N P 2 0 1 0 -110 20 -90 20 N P 2 0 1 0 -100 -80 -100 -100 N P 2 0 1 0 -100 80 -100 100 N P 2 0 1 0 -70 -20 -50 -20 N P 2 0 1 0 -70 20 -50 20 N P 2 0 1 0 -30 -20 -10 -20 N P 2 0 1 0 -30 20 -10 20 N P 2 0 1 0 10 -20 30 -20 N P 2 0 1 0 10 20 30 20 N P 2 0 1 0 50 -20 70 -20 N P 2 0 1 0 50 20 70 20 N P 2 0 1 0 90 -20 110 -20 N P 2 0 1 0 90 20 110 20 N P 2 0 1 0 100 -80 100 -100 N P 2 0 1 0 100 100 100 80 N X 1 1 -200 100 100 R 50 50 1 1 P X 2 2 200 100 100 L 50 50 1 1 P X 3 3 -200 -100 100 R 50 50 1 1 P X 4 4 200 -100 100 L 50 50 1 1 P ENDDRAW ENDDEF # # L_Core_Ferrite_Coupled_1243 # DEF L_Core_Ferrite_Coupled_1243 L 0 10 Y N 1 F N F0 "L" 0 175 50 H V C CNN F1 "L_Core_Ferrite_Coupled_1243" 0 -175 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Choke_* *Coil* Inductor_* L_* $ENDFPLIST DRAW A -80 -80 20 1 1799 0 1 0 N -60 -80 -100 -80 A -80 80 20 -1799 -1 0 1 0 N -100 80 -60 80 A -40 -80 20 1 1799 0 1 0 N -20 -80 -60 -80 A -40 80 20 -1799 -1 0 1 0 N -60 80 -20 80 A 0 -80 20 1 1799 0 1 0 N 20 -80 -20 -80 A 0 80 20 -1799 -1 0 1 0 N -20 80 20 80 A 40 -80 20 1 1799 0 1 0 N 60 -80 20 -80 A 40 80 20 -1799 -1 0 1 0 N 20 80 60 80 A 80 -80 20 1 1799 0 1 0 N 100 -80 60 -80 A 80 80 20 -1799 -1 0 1 0 N 60 80 100 80 C -120 -50 10 0 1 0 F C -120 60 10 0 1 0 F P 2 0 1 0 -110 -20 -90 -20 N P 2 0 1 0 -110 20 -90 20 N P 2 0 1 0 -100 -80 -100 -100 N P 2 0 1 0 -100 80 -100 100 N P 2 0 1 0 -70 -20 -50 -20 N P 2 0 1 0 -70 20 -50 20 N P 2 0 1 0 -30 -20 -10 -20 N P 2 0 1 0 -30 20 -10 20 N P 2 0 1 0 10 -20 30 -20 N P 2 0 1 0 10 20 30 20 N P 2 0 1 0 50 -20 70 -20 N P 2 0 1 0 50 20 70 20 N P 2 0 1 0 90 -20 110 -20 N P 2 0 1 0 90 20 110 20 N P 2 0 1 0 100 -80 100 -100 N P 2 0 1 0 100 100 100 80 N X 1 1 -200 100 100 R 50 50 1 1 P X 2 2 200 100 100 L 50 50 1 1 P X 3 3 200 -100 100 L 50 50 1 1 P X 4 4 -200 -100 100 R 50 50 1 1 P ENDDRAW ENDDEF # # L_Core_Ferrite_Coupled_1324 # DEF L_Core_Ferrite_Coupled_1324 L 0 10 Y N 1 F N F0 "L" 0 175 50 H V C CNN F1 "L_Core_Ferrite_Coupled_1324" 0 -175 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Choke_* *Coil* Inductor_* L_* $ENDFPLIST DRAW A -80 -80 20 1 1799 0 1 0 N -60 -80 -100 -80 A -80 80 20 -1799 -1 0 1 0 N -100 80 -60 80 A -40 -80 20 1 1799 0 1 0 N -20 -80 -60 -80 A -40 80 20 -1799 -1 0 1 0 N -60 80 -20 80 A 0 -80 20 1 1799 0 1 0 N 20 -80 -20 -80 A 0 80 20 -1799 -1 0 1 0 N -20 80 20 80 A 40 -80 20 1 1799 0 1 0 N 60 -80 20 -80 A 40 80 20 -1799 -1 0 1 0 N 20 80 60 80 A 80 -80 20 1 1799 0 1 0 N 100 -80 60 -80 A 80 80 20 -1799 -1 0 1 0 N 60 80 100 80 C -120 -50 10 0 1 0 F C -120 60 10 0 1 0 F P 2 0 1 0 -110 -20 -90 -20 N P 2 0 1 0 -110 20 -90 20 N P 2 0 1 0 -100 -80 -100 -100 N P 2 0 1 0 -100 80 -100 100 N P 2 0 1 0 -70 -20 -50 -20 N P 2 0 1 0 -70 20 -50 20 N P 2 0 1 0 -30 -20 -10 -20 N P 2 0 1 0 -30 20 -10 20 N P 2 0 1 0 10 -20 30 -20 N P 2 0 1 0 10 20 30 20 N P 2 0 1 0 50 -20 70 -20 N P 2 0 1 0 50 20 70 20 N P 2 0 1 0 90 -20 110 -20 N P 2 0 1 0 90 20 110 20 N P 2 0 1 0 100 -80 100 -100 N P 2 0 1 0 100 100 100 80 N X 1 1 -200 100 100 R 50 50 1 1 P X 2 2 -200 -100 100 R 50 50 1 1 P X 3 3 200 100 100 L 50 50 1 1 P X 4 4 200 -100 100 L 50 50 1 1 P ENDDRAW ENDDEF # # L_Core_Ferrite_Coupled_1342 # DEF L_Core_Ferrite_Coupled_1342 L 0 10 Y N 1 F N F0 "L" 0 175 50 H V C CNN F1 "L_Core_Ferrite_Coupled_1342" 0 -175 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Choke_* *Coil* Inductor_* L_* $ENDFPLIST DRAW A -80 -80 20 1 1799 0 1 0 N -60 -80 -100 -80 A -80 80 20 -1799 -1 0 1 0 N -100 80 -60 80 A -40 -80 20 1 1799 0 1 0 N -20 -80 -60 -80 A -40 80 20 -1799 -1 0 1 0 N -60 80 -20 80 A 0 -80 20 1 1799 0 1 0 N 20 -80 -20 -80 A 0 80 20 -1799 -1 0 1 0 N -20 80 20 80 A 40 -80 20 1 1799 0 1 0 N 60 -80 20 -80 A 40 80 20 -1799 -1 0 1 0 N 20 80 60 80 A 80 -80 20 1 1799 0 1 0 N 100 -80 60 -80 A 80 80 20 -1799 -1 0 1 0 N 60 80 100 80 C -120 -50 10 0 1 0 F C -120 60 10 0 1 0 F P 2 0 1 0 -110 -20 -90 -20 N P 2 0 1 0 -110 20 -90 20 N P 2 0 1 0 -100 -80 -100 -100 N P 2 0 1 0 -100 80 -100 100 N P 2 0 1 0 -70 -20 -50 -20 N P 2 0 1 0 -70 20 -50 20 N P 2 0 1 0 -30 -20 -10 -20 N P 2 0 1 0 -30 20 -10 20 N P 2 0 1 0 10 -20 30 -20 N P 2 0 1 0 10 20 30 20 N P 2 0 1 0 50 -20 70 -20 N P 2 0 1 0 50 20 70 20 N P 2 0 1 0 90 -20 110 -20 N P 2 0 1 0 90 20 110 20 N P 2 0 1 0 100 -80 100 -100 N P 2 0 1 0 100 100 100 80 N X 1 1 -200 100 100 R 50 50 1 1 P X 2 2 200 -100 100 L 50 50 1 1 P X 3 3 200 100 100 L 50 50 1 1 P X 4 4 -200 -100 100 R 50 50 1 1 P ENDDRAW ENDDEF # # L_Core_Ferrite_Coupled_1423 # DEF L_Core_Ferrite_Coupled_1423 L 0 10 Y N 1 F N F0 "L" 0 175 50 H V C CNN F1 "L_Core_Ferrite_Coupled_1423" 0 -175 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Choke_* *Coil* Inductor_* L_* $ENDFPLIST DRAW A -80 -80 20 1 1799 0 1 0 N -60 -80 -100 -80 A -80 80 20 -1799 -1 0 1 0 N -100 80 -60 80 A -40 -80 20 1 1799 0 1 0 N -20 -80 -60 -80 A -40 80 20 -1799 -1 0 1 0 N -60 80 -20 80 A 0 -80 20 1 1799 0 1 0 N 20 -80 -20 -80 A 0 80 20 -1799 -1 0 1 0 N -20 80 20 80 A 40 -80 20 1 1799 0 1 0 N 60 -80 20 -80 A 40 80 20 -1799 -1 0 1 0 N 20 80 60 80 A 80 -80 20 1 1799 0 1 0 N 100 -80 60 -80 A 80 80 20 -1799 -1 0 1 0 N 60 80 100 80 C -120 -50 10 0 1 0 F C -120 60 10 0 1 0 F P 2 0 1 0 -110 -20 -90 -20 N P 2 0 1 0 -110 20 -90 20 N P 2 0 1 0 -100 -80 -100 -100 N P 2 0 1 0 -100 80 -100 100 N P 2 0 1 0 -70 -20 -50 -20 N P 2 0 1 0 -70 20 -50 20 N P 2 0 1 0 -30 -20 -10 -20 N P 2 0 1 0 -30 20 -10 20 N P 2 0 1 0 10 -20 30 -20 N P 2 0 1 0 10 20 30 20 N P 2 0 1 0 50 -20 70 -20 N P 2 0 1 0 50 20 70 20 N P 2 0 1 0 90 -20 110 -20 N P 2 0 1 0 90 20 110 20 N P 2 0 1 0 100 -80 100 -100 N P 2 0 1 0 100 100 100 80 N X 1 1 -200 100 100 R 50 50 1 1 P X 2 2 -200 -100 100 R 50 50 1 1 P X 3 3 200 -100 100 L 50 50 1 1 P X 4 4 200 100 100 L 50 50 1 1 P ENDDRAW ENDDEF # # L_Core_Ferrite_Coupled_Small # DEF L_Core_Ferrite_Coupled_Small L 0 10 Y N 1 F N F0 "L" 0 125 50 H V C CNN F1 "L_Core_Ferrite_Coupled_Small" 0 -125 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Choke_* *Coil* Inductor_* L_* $ENDFPLIST DRAW A -60 -50 20 1 1799 0 1 0 N -40 -50 -80 -50 A -60 50 20 -1799 -1 0 1 0 N -80 50 -40 50 A -20 -50 20 1 1799 0 1 0 N 0 -50 -40 -50 A -20 50 20 -1799 -1 0 1 0 N -40 50 0 50 A 20 -50 20 1 1799 0 1 0 N 40 -50 0 -50 A 20 50 20 -1799 -1 0 1 0 N 0 50 40 50 A 60 -50 20 1 1799 0 1 0 N 80 -50 40 -50 A 60 50 20 -1799 -1 0 1 0 N 40 50 80 50 C -60 -50 10 0 1 0 F C -60 50 10 0 1 0 F P 2 0 1 0 -65 10 -55 10 N P 2 0 1 0 -55 -10 -65 -10 N P 2 0 1 0 -45 10 -35 10 N P 2 0 1 0 -35 -10 -45 -10 N P 2 0 1 0 -25 10 -15 10 N P 2 0 1 0 -15 -10 -25 -10 N P 2 0 1 0 -5 10 5 10 N P 2 0 1 0 5 -10 -5 -10 N P 2 0 1 0 15 10 25 10 N P 2 0 1 0 25 -10 15 -10 N P 2 0 1 0 35 10 45 10 N P 2 0 1 0 45 -10 35 -10 N P 2 0 1 0 55 10 65 10 N P 2 0 1 0 65 -10 55 -10 N X 1 1 -100 50 20 R 50 50 1 1 P X 2 2 100 50 20 L 50 50 1 1 P X 3 3 -100 -50 20 R 50 50 1 1 P X 4 4 100 -50 20 L 50 50 1 1 P ENDDRAW ENDDEF # # L_Core_Ferrite_Coupled_Small_1243 # DEF L_Core_Ferrite_Coupled_Small_1243 L 0 10 Y N 1 F N F0 "L" 0 125 50 H V C CNN F1 "L_Core_Ferrite_Coupled_Small_1243" 0 -125 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Choke_* *Coil* Inductor_* L_* $ENDFPLIST DRAW A -60 -50 20 1 1799 0 1 0 N -40 -50 -80 -50 A -60 50 20 -1799 -1 0 1 0 N -80 50 -40 50 A -20 -50 20 1 1799 0 1 0 N 0 -50 -40 -50 A -20 50 20 -1799 -1 0 1 0 N -40 50 0 50 A 20 -50 20 1 1799 0 1 0 N 40 -50 0 -50 A 20 50 20 -1799 -1 0 1 0 N 0 50 40 50 A 60 -50 20 1 1799 0 1 0 N 80 -50 40 -50 A 60 50 20 -1799 -1 0 1 0 N 40 50 80 50 C -60 -50 10 0 1 0 F C -60 50 10 0 1 0 F P 2 0 1 0 -65 10 -55 10 N P 2 0 1 0 -55 -10 -65 -10 N P 2 0 1 0 -45 10 -35 10 N P 2 0 1 0 -35 -10 -45 -10 N P 2 0 1 0 -25 10 -15 10 N P 2 0 1 0 -15 -10 -25 -10 N P 2 0 1 0 -5 10 5 10 N P 2 0 1 0 5 -10 -5 -10 N P 2 0 1 0 15 10 25 10 N P 2 0 1 0 25 -10 15 -10 N P 2 0 1 0 35 10 45 10 N P 2 0 1 0 45 -10 35 -10 N P 2 0 1 0 55 10 65 10 N P 2 0 1 0 65 -10 55 -10 N X 1 1 -100 50 20 R 50 50 1 1 P X 2 2 100 50 20 L 50 50 1 1 P X 3 3 100 -50 20 L 50 50 1 1 P X 4 4 -100 -50 20 R 50 50 1 1 P ENDDRAW ENDDEF # # L_Core_Ferrite_Coupled_Small_1324 # DEF L_Core_Ferrite_Coupled_Small_1324 L 0 10 Y N 1 F N F0 "L" 0 125 50 H V C CNN F1 "L_Core_Ferrite_Coupled_Small_1324" 0 -125 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Choke_* *Coil* Inductor_* L_* $ENDFPLIST DRAW A -60 -50 20 1 1799 0 1 0 N -40 -50 -80 -50 A -60 50 20 -1799 -1 0 1 0 N -80 50 -40 50 A -20 -50 20 1 1799 0 1 0 N 0 -50 -40 -50 A -20 50 20 -1799 -1 0 1 0 N -40 50 0 50 A 20 -50 20 1 1799 0 1 0 N 40 -50 0 -50 A 20 50 20 -1799 -1 0 1 0 N 0 50 40 50 A 60 -50 20 1 1799 0 1 0 N 80 -50 40 -50 A 60 50 20 -1799 -1 0 1 0 N 40 50 80 50 C -60 -50 10 0 1 0 F C -60 50 10 0 1 0 F P 2 0 1 0 -65 10 -55 10 N P 2 0 1 0 -55 -10 -65 -10 N P 2 0 1 0 -45 10 -35 10 N P 2 0 1 0 -35 -10 -45 -10 N P 2 0 1 0 -25 10 -15 10 N P 2 0 1 0 -15 -10 -25 -10 N P 2 0 1 0 -5 10 5 10 N P 2 0 1 0 5 -10 -5 -10 N P 2 0 1 0 15 10 25 10 N P 2 0 1 0 25 -10 15 -10 N P 2 0 1 0 35 10 45 10 N P 2 0 1 0 45 -10 35 -10 N P 2 0 1 0 55 10 65 10 N P 2 0 1 0 65 -10 55 -10 N X 1 1 -100 50 20 R 50 50 1 1 P X 2 2 -100 -50 20 R 50 50 1 1 P X 3 3 100 50 20 L 50 50 1 1 P X 4 4 100 -50 20 L 50 50 1 1 P ENDDRAW ENDDEF # # L_Core_Ferrite_Coupled_Small_1342 # DEF L_Core_Ferrite_Coupled_Small_1342 L 0 10 Y N 1 F N F0 "L" 0 125 50 H V C CNN F1 "L_Core_Ferrite_Coupled_Small_1342" 0 -125 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Choke_* *Coil* Inductor_* L_* $ENDFPLIST DRAW A -60 -50 20 1 1799 0 1 0 N -40 -50 -80 -50 A -60 50 20 -1799 -1 0 1 0 N -80 50 -40 50 A -20 -50 20 1 1799 0 1 0 N 0 -50 -40 -50 A -20 50 20 -1799 -1 0 1 0 N -40 50 0 50 A 20 -50 20 1 1799 0 1 0 N 40 -50 0 -50 A 20 50 20 -1799 -1 0 1 0 N 0 50 40 50 A 60 -50 20 1 1799 0 1 0 N 80 -50 40 -50 A 60 50 20 -1799 -1 0 1 0 N 40 50 80 50 C -60 -50 10 0 1 0 F C -60 50 10 0 1 0 F P 2 0 1 0 -65 10 -55 10 N P 2 0 1 0 -55 -10 -65 -10 N P 2 0 1 0 -45 10 -35 10 N P 2 0 1 0 -35 -10 -45 -10 N P 2 0 1 0 -25 10 -15 10 N P 2 0 1 0 -15 -10 -25 -10 N P 2 0 1 0 -5 10 5 10 N P 2 0 1 0 5 -10 -5 -10 N P 2 0 1 0 15 10 25 10 N P 2 0 1 0 25 -10 15 -10 N P 2 0 1 0 35 10 45 10 N P 2 0 1 0 45 -10 35 -10 N P 2 0 1 0 55 10 65 10 N P 2 0 1 0 65 -10 55 -10 N X 1 1 -100 50 20 R 50 50 1 1 P X 2 2 100 -50 20 L 50 50 1 1 P X 3 3 100 50 20 L 50 50 1 1 P X 4 4 -100 -50 20 R 50 50 1 1 P ENDDRAW ENDDEF # # L_Core_Ferrite_Coupled_Small_1423 # DEF L_Core_Ferrite_Coupled_Small_1423 L 0 10 Y N 1 F N F0 "L" 0 125 50 H V C CNN F1 "L_Core_Ferrite_Coupled_Small_1423" 0 -125 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Choke_* *Coil* Inductor_* L_* $ENDFPLIST DRAW A -60 -50 20 1 1799 0 1 0 N -40 -50 -80 -50 A -60 50 20 -1799 -1 0 1 0 N -80 50 -40 50 A -20 -50 20 1 1799 0 1 0 N 0 -50 -40 -50 A -20 50 20 -1799 -1 0 1 0 N -40 50 0 50 A 20 -50 20 1 1799 0 1 0 N 40 -50 0 -50 A 20 50 20 -1799 -1 0 1 0 N 0 50 40 50 A 60 -50 20 1 1799 0 1 0 N 80 -50 40 -50 A 60 50 20 -1799 -1 0 1 0 N 40 50 80 50 C -60 -50 10 0 1 0 F C -60 50 10 0 1 0 F P 2 0 1 0 -65 10 -55 10 N P 2 0 1 0 -55 -10 -65 -10 N P 2 0 1 0 -45 10 -35 10 N P 2 0 1 0 -35 -10 -45 -10 N P 2 0 1 0 -25 10 -15 10 N P 2 0 1 0 -15 -10 -25 -10 N P 2 0 1 0 -5 10 5 10 N P 2 0 1 0 5 -10 -5 -10 N P 2 0 1 0 15 10 25 10 N P 2 0 1 0 25 -10 15 -10 N P 2 0 1 0 35 10 45 10 N P 2 0 1 0 45 -10 35 -10 N P 2 0 1 0 55 10 65 10 N P 2 0 1 0 65 -10 55 -10 N X 1 1 -100 50 20 R 50 50 1 1 P X 2 2 -100 -50 20 R 50 50 1 1 P X 3 3 100 -50 20 L 50 50 1 1 P X 4 4 100 50 20 L 50 50 1 1 P ENDDRAW ENDDEF # # L_Core_Ferrite_Small # DEF L_Core_Ferrite_Small L 0 10 N N 1 F N F0 "L" 50 40 50 H V L CNN F1 "L_Core_Ferrite_Small" 50 -50 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Choke_* *Coil* Inductor_* L_* $ENDFPLIST DRAW A 0 -60 20 -899 899 0 1 0 N 0 -80 0 -40 A 0 -20 20 -899 899 0 1 0 N 0 -40 0 0 A 0 20 20 -899 899 0 1 0 N 0 0 0 40 A 0 60 20 -899 899 0 1 0 N 0 40 0 80 P 2 0 1 0 30 -75 30 -65 N P 2 0 1 0 30 -55 30 -45 N P 2 0 1 0 30 -35 30 -25 N P 2 0 1 0 30 -15 30 -5 N P 2 0 1 0 30 5 30 15 N P 2 0 1 0 30 25 30 35 N P 2 0 1 0 30 45 30 55 N P 2 0 1 0 30 65 30 75 N P 2 0 1 0 40 -65 40 -75 N P 2 0 1 0 40 -45 40 -55 N P 2 0 1 0 40 -25 40 -35 N P 2 0 1 0 40 -5 40 -15 N P 2 0 1 0 40 15 40 5 N P 2 0 1 0 40 35 40 25 N P 2 0 1 0 40 55 40 45 N P 2 0 1 0 40 75 40 65 N X ~ 1 0 100 20 D 50 50 1 1 P X ~ 2 0 -100 20 U 50 50 1 1 P ENDDRAW ENDDEF # # L_Core_Iron # DEF L_Core_Iron L 0 40 N N 1 F N F0 "L" -50 0 50 V V C CNN F1 "L_Core_Iron" 110 0 50 V V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Choke_* *Coil* Inductor_* L_* $ENDFPLIST DRAW A 0 -75 25 -899 899 0 1 0 N 0 -100 0 -50 A 0 -25 25 -899 899 0 1 0 N 0 -50 0 0 A 0 25 25 -899 899 0 1 0 N 0 0 0 50 A 0 75 25 -899 899 0 1 0 N 0 50 0 100 P 2 0 1 0 40 100 40 -100 N P 2 0 1 0 60 -100 60 100 N X 1 1 0 150 50 D 50 50 1 1 P X 2 2 0 -150 50 U 50 50 1 1 P ENDDRAW ENDDEF # # L_Core_Iron_Coupled # DEF L_Core_Iron_Coupled L 0 10 Y N 1 F N F0 "L" 0 175 50 H V C CNN F1 "L_Core_Iron_Coupled" 0 -175 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Choke_* *Coil* Inductor_* L_* $ENDFPLIST DRAW A -80 -80 20 1 1799 0 1 0 N -60 -80 -100 -80 A -80 80 20 -1799 -1 0 1 0 N -100 80 -60 80 A -40 -80 20 1 1799 0 1 0 N -20 -80 -60 -80 A -40 80 20 -1799 -1 0 1 0 N -60 80 -20 80 A 0 -80 20 1 1799 0 1 0 N 20 -80 -20 -80 A 0 80 20 -1799 -1 0 1 0 N -20 80 20 80 A 40 -80 20 1 1799 0 1 0 N 60 -80 20 -80 A 40 80 20 -1799 -1 0 1 0 N 20 80 60 80 A 80 -80 20 1 1799 0 1 0 N 100 -80 60 -80 A 80 80 20 -1799 -1 0 1 0 N 60 80 100 80 C -120 -50 10 0 1 0 F C -120 60 10 0 1 0 F P 2 0 1 0 -100 -80 -100 -100 N P 2 0 1 0 -100 20 100 20 N P 2 0 1 0 -100 80 -100 100 N P 2 0 1 0 100 -80 100 -100 N P 2 0 1 0 100 -20 -100 -20 N P 2 0 1 0 100 100 100 80 N X 1 1 -200 100 100 R 50 50 1 1 P X 2 2 200 100 100 L 50 50 1 1 P X 3 3 -200 -100 100 R 50 50 1 1 P X 4 4 200 -100 100 L 50 50 1 1 P ENDDRAW ENDDEF # # L_Core_Iron_Coupled_1243 # DEF L_Core_Iron_Coupled_1243 L 0 10 Y N 1 F N F0 "L" 0 175 50 H V C CNN F1 "L_Core_Iron_Coupled_1243" 0 -175 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Choke_* *Coil* Inductor_* L_* $ENDFPLIST DRAW A -80 -80 20 1 1799 0 1 0 N -60 -80 -100 -80 A -80 80 20 -1799 -1 0 1 0 N -100 80 -60 80 A -40 -80 20 1 1799 0 1 0 N -20 -80 -60 -80 A -40 80 20 -1799 -1 0 1 0 N -60 80 -20 80 A 0 -80 20 1 1799 0 1 0 N 20 -80 -20 -80 A 0 80 20 -1799 -1 0 1 0 N -20 80 20 80 A 40 -80 20 1 1799 0 1 0 N 60 -80 20 -80 A 40 80 20 -1799 -1 0 1 0 N 20 80 60 80 A 80 -80 20 1 1799 0 1 0 N 100 -80 60 -80 A 80 80 20 -1799 -1 0 1 0 N 60 80 100 80 C -120 -50 10 0 1 0 F C -120 60 10 0 1 0 F P 2 0 1 0 -100 -80 -100 -100 N P 2 0 1 0 -100 20 100 20 N P 2 0 1 0 -100 80 -100 100 N P 2 0 1 0 100 -80 100 -100 N P 2 0 1 0 100 -20 -100 -20 N P 2 0 1 0 100 100 100 80 N X 1 1 -200 100 100 R 50 50 1 1 P X 2 2 200 100 100 L 50 50 1 1 P X 3 3 200 -100 100 L 50 50 1 1 P X 4 4 -200 -100 100 R 50 50 1 1 P ENDDRAW ENDDEF # # L_Core_Iron_Coupled_1324 # DEF L_Core_Iron_Coupled_1324 L 0 10 Y N 1 F N F0 "L" 0 175 50 H V C CNN F1 "L_Core_Iron_Coupled_1324" 0 -175 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Choke_* *Coil* Inductor_* L_* $ENDFPLIST DRAW A -80 -80 20 1 1799 0 1 0 N -60 -80 -100 -80 A -80 80 20 -1799 -1 0 1 0 N -100 80 -60 80 A -40 -80 20 1 1799 0 1 0 N -20 -80 -60 -80 A -40 80 20 -1799 -1 0 1 0 N -60 80 -20 80 A 0 -80 20 1 1799 0 1 0 N 20 -80 -20 -80 A 0 80 20 -1799 -1 0 1 0 N -20 80 20 80 A 40 -80 20 1 1799 0 1 0 N 60 -80 20 -80 A 40 80 20 -1799 -1 0 1 0 N 20 80 60 80 A 80 -80 20 1 1799 0 1 0 N 100 -80 60 -80 A 80 80 20 -1799 -1 0 1 0 N 60 80 100 80 C -120 -50 10 0 1 0 F C -120 60 10 0 1 0 F P 2 0 1 0 -100 -80 -100 -100 N P 2 0 1 0 -100 20 100 20 N P 2 0 1 0 -100 80 -100 100 N P 2 0 1 0 100 -80 100 -100 N P 2 0 1 0 100 -20 -100 -20 N P 2 0 1 0 100 100 100 80 N X 1 1 -200 100 100 R 50 50 1 1 P X 2 2 -200 -100 100 R 50 50 1 1 P X 3 3 200 100 100 L 50 50 1 1 P X 4 4 200 -100 100 L 50 50 1 1 P ENDDRAW ENDDEF # # L_Core_Iron_Coupled_1342 # DEF L_Core_Iron_Coupled_1342 L 0 10 Y N 1 F N F0 "L" 0 175 50 H V C CNN F1 "L_Core_Iron_Coupled_1342" 0 -175 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Choke_* *Coil* Inductor_* L_* $ENDFPLIST DRAW A -80 -80 20 1 1799 0 1 0 N -60 -80 -100 -80 A -80 80 20 -1799 -1 0 1 0 N -100 80 -60 80 A -40 -80 20 1 1799 0 1 0 N -20 -80 -60 -80 A -40 80 20 -1799 -1 0 1 0 N -60 80 -20 80 A 0 -80 20 1 1799 0 1 0 N 20 -80 -20 -80 A 0 80 20 -1799 -1 0 1 0 N -20 80 20 80 A 40 -80 20 1 1799 0 1 0 N 60 -80 20 -80 A 40 80 20 -1799 -1 0 1 0 N 20 80 60 80 A 80 -80 20 1 1799 0 1 0 N 100 -80 60 -80 A 80 80 20 -1799 -1 0 1 0 N 60 80 100 80 C -120 -50 10 0 1 0 F C -120 60 10 0 1 0 F P 2 0 1 0 -100 -80 -100 -100 N P 2 0 1 0 -100 20 100 20 N P 2 0 1 0 -100 80 -100 100 N P 2 0 1 0 100 -80 100 -100 N P 2 0 1 0 100 -20 -100 -20 N P 2 0 1 0 100 100 100 80 N X 1 1 -200 100 100 R 50 50 1 1 P X 2 2 200 -100 100 L 50 50 1 1 P X 3 3 200 100 100 L 50 50 1 1 P X 4 4 -200 -100 100 R 50 50 1 1 P ENDDRAW ENDDEF # # L_Core_Iron_Coupled_1423 # DEF L_Core_Iron_Coupled_1423 L 0 10 Y N 1 F N F0 "L" 0 175 50 H V C CNN F1 "L_Core_Iron_Coupled_1423" 0 -175 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Choke_* *Coil* Inductor_* L_* $ENDFPLIST DRAW A -80 -80 20 1 1799 0 1 0 N -60 -80 -100 -80 A -80 80 20 -1799 -1 0 1 0 N -100 80 -60 80 A -40 -80 20 1 1799 0 1 0 N -20 -80 -60 -80 A -40 80 20 -1799 -1 0 1 0 N -60 80 -20 80 A 0 -80 20 1 1799 0 1 0 N 20 -80 -20 -80 A 0 80 20 -1799 -1 0 1 0 N -20 80 20 80 A 40 -80 20 1 1799 0 1 0 N 60 -80 20 -80 A 40 80 20 -1799 -1 0 1 0 N 20 80 60 80 A 80 -80 20 1 1799 0 1 0 N 100 -80 60 -80 A 80 80 20 -1799 -1 0 1 0 N 60 80 100 80 C -120 -50 10 0 1 0 F C -120 60 10 0 1 0 F P 2 0 1 0 -100 -80 -100 -100 N P 2 0 1 0 -100 20 100 20 N P 2 0 1 0 -100 80 -100 100 N P 2 0 1 0 100 -80 100 -100 N P 2 0 1 0 100 -20 -100 -20 N P 2 0 1 0 100 100 100 80 N X 1 1 -200 100 100 R 50 50 1 1 P X 2 2 -200 -100 100 R 50 50 1 1 P X 3 3 200 -100 100 L 50 50 1 1 P X 4 4 200 100 100 L 50 50 1 1 P ENDDRAW ENDDEF # # L_Core_Iron_Coupled_Small # DEF L_Core_Iron_Coupled_Small L 0 10 Y N 1 F N F0 "L" 0 125 50 H V C CNN F1 "L_Core_Iron_Coupled_Small" 0 -125 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Choke_* *Coil* Inductor_* L_* $ENDFPLIST DRAW A -60 -50 20 1 1799 0 1 0 N -40 -50 -80 -50 A -60 50 20 -1799 -1 0 1 0 N -80 50 -40 50 A -20 -50 20 1 1799 0 1 0 N 0 -50 -40 -50 A -20 50 20 -1799 -1 0 1 0 N -40 50 0 50 A 20 -50 20 1 1799 0 1 0 N 40 -50 0 -50 A 20 50 20 -1799 -1 0 1 0 N 0 50 40 50 A 60 -50 20 1 1799 0 1 0 N 80 -50 40 -50 A 60 50 20 -1799 -1 0 1 0 N 40 50 80 50 C -60 -50 10 0 1 0 F C -60 50 10 0 1 0 F P 2 0 1 0 70 -10 -70 -10 N P 2 0 1 0 70 10 -70 10 N X 1 1 -100 50 20 R 50 50 1 1 P X 2 2 100 50 20 L 50 50 1 1 P X 3 3 -100 -50 20 R 50 50 1 1 P X 4 4 100 -50 20 L 50 50 1 1 P ENDDRAW ENDDEF # # L_Core_Iron_Coupled_Small_1243 # DEF L_Core_Iron_Coupled_Small_1243 L 0 10 Y N 1 F N F0 "L" 0 125 50 H V C CNN F1 "L_Core_Iron_Coupled_Small_1243" 0 -125 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Choke_* *Coil* Inductor_* L_* $ENDFPLIST DRAW A -60 -50 20 1 1799 0 1 0 N -40 -50 -80 -50 A -60 50 20 -1799 -1 0 1 0 N -80 50 -40 50 A -20 -50 20 1 1799 0 1 0 N 0 -50 -40 -50 A -20 50 20 -1799 -1 0 1 0 N -40 50 0 50 A 20 -50 20 1 1799 0 1 0 N 40 -50 0 -50 A 20 50 20 -1799 -1 0 1 0 N 0 50 40 50 A 60 -50 20 1 1799 0 1 0 N 80 -50 40 -50 A 60 50 20 -1799 -1 0 1 0 N 40 50 80 50 C -60 -50 10 0 1 0 F C -60 50 10 0 1 0 F P 2 0 1 0 70 -10 -70 -10 N P 2 0 1 0 70 10 -70 10 N X 1 1 -100 50 20 R 50 50 1 1 P X 2 2 100 50 20 L 50 50 1 1 P X 3 3 100 -50 20 L 50 50 1 1 P X 4 4 -100 -50 20 R 50 50 1 1 P ENDDRAW ENDDEF # # L_Core_Iron_Coupled_Small_1324 # DEF L_Core_Iron_Coupled_Small_1324 L 0 10 Y N 1 F N F0 "L" 0 125 50 H V C CNN F1 "L_Core_Iron_Coupled_Small_1324" 0 -125 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Choke_* *Coil* Inductor_* L_* $ENDFPLIST DRAW A -60 -50 20 1 1799 0 1 0 N -40 -50 -80 -50 A -60 50 20 -1799 -1 0 1 0 N -80 50 -40 50 A -20 -50 20 1 1799 0 1 0 N 0 -50 -40 -50 A -20 50 20 -1799 -1 0 1 0 N -40 50 0 50 A 20 -50 20 1 1799 0 1 0 N 40 -50 0 -50 A 20 50 20 -1799 -1 0 1 0 N 0 50 40 50 A 60 -50 20 1 1799 0 1 0 N 80 -50 40 -50 A 60 50 20 -1799 -1 0 1 0 N 40 50 80 50 C -60 -50 10 0 1 0 F C -60 50 10 0 1 0 F P 2 0 1 0 70 -10 -70 -10 N P 2 0 1 0 70 10 -70 10 N X 1 1 -100 50 20 R 50 50 1 1 P X 2 2 -100 -50 20 R 50 50 1 1 P X 3 3 100 -50 20 L 50 50 1 1 P X 4 4 100 50 20 L 50 50 1 1 P ENDDRAW ENDDEF # # L_Core_Iron_Coupled_Small_1342 # DEF L_Core_Iron_Coupled_Small_1342 L 0 10 Y N 1 F N F0 "L" 0 125 50 H V C CNN F1 "L_Core_Iron_Coupled_Small_1342" 0 -125 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Choke_* *Coil* Inductor_* L_* $ENDFPLIST DRAW A -60 -50 20 1 1799 0 1 0 N -40 -50 -80 -50 A -60 50 20 -1799 -1 0 1 0 N -80 50 -40 50 A -20 -50 20 1 1799 0 1 0 N 0 -50 -40 -50 A -20 50 20 -1799 -1 0 1 0 N -40 50 0 50 A 20 -50 20 1 1799 0 1 0 N 40 -50 0 -50 A 20 50 20 -1799 -1 0 1 0 N 0 50 40 50 A 60 -50 20 1 1799 0 1 0 N 80 -50 40 -50 A 60 50 20 -1799 -1 0 1 0 N 40 50 80 50 C -60 -50 10 0 1 0 F C -60 50 10 0 1 0 F P 2 0 1 0 70 -10 -70 -10 N P 2 0 1 0 70 10 -70 10 N X 1 1 -100 50 20 R 50 50 1 1 P X 2 2 100 -50 20 L 50 50 1 1 P X 3 3 100 50 20 L 50 50 1 1 P X 4 4 -100 -50 20 R 50 50 1 1 P ENDDRAW ENDDEF # # L_Core_Iron_Coupled_Small_1423 # DEF L_Core_Iron_Coupled_Small_1423 L 0 10 Y N 1 F N F0 "L" 0 125 50 H V C CNN F1 "L_Core_Iron_Coupled_Small_1423" 0 -125 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Choke_* *Coil* Inductor_* L_* $ENDFPLIST DRAW A -60 -50 20 1 1799 0 1 0 N -40 -50 -80 -50 A -60 50 20 -1799 -1 0 1 0 N -80 50 -40 50 A -20 -50 20 1 1799 0 1 0 N 0 -50 -40 -50 A -20 50 20 -1799 -1 0 1 0 N -40 50 0 50 A 20 -50 20 1 1799 0 1 0 N 40 -50 0 -50 A 20 50 20 -1799 -1 0 1 0 N 0 50 40 50 A 60 -50 20 1 1799 0 1 0 N 80 -50 40 -50 A 60 50 20 -1799 -1 0 1 0 N 40 50 80 50 C -60 -50 10 0 1 0 F C -60 50 10 0 1 0 F P 2 0 1 0 70 -10 -70 -10 N P 2 0 1 0 70 10 -70 10 N X 1 1 -100 50 20 R 50 50 1 1 P X 2 2 -100 -50 20 R 50 50 1 1 P X 3 3 100 -50 20 L 50 50 1 1 P X 4 4 100 50 20 L 50 50 1 1 P ENDDRAW ENDDEF # # L_Core_Iron_Small # DEF L_Core_Iron_Small L 0 10 N N 1 F N F0 "L" 50 40 50 H V L CNN F1 "L_Core_Iron_Small" 50 -50 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Choke_* *Coil* Inductor_* L_* $ENDFPLIST DRAW A 0 -60 20 -899 899 0 1 0 N 0 -80 0 -40 A 0 -20 20 -899 899 0 1 0 N 0 -40 0 0 A 0 20 20 -899 899 0 1 0 N 0 0 0 40 A 0 60 20 -899 899 0 1 0 N 0 40 0 80 P 2 0 1 0 30 80 30 -80 N P 2 0 1 0 40 -80 40 80 N X ~ 1 0 100 20 D 50 50 1 1 P X ~ 2 0 -100 20 U 50 50 1 1 P ENDDRAW ENDDEF # # L_Coupled # DEF L_Coupled L 0 10 Y N 1 F N F0 "L" 0 175 50 H V C CNN F1 "L_Coupled" 0 -175 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Choke_* *Coil* Inductor_* L_* $ENDFPLIST DRAW A -80 -80 20 1 1799 0 1 0 N -60 -80 -100 -80 A -80 80 20 -1799 -1 0 1 0 N -100 80 -60 80 A -40 -80 20 1 1799 0 1 0 N -20 -80 -60 -80 A -40 80 20 -1799 -1 0 1 0 N -60 80 -20 80 A 0 -80 20 1 1799 0 1 0 N 20 -80 -20 -80 A 0 80 20 -1799 -1 0 1 0 N -20 80 20 80 A 40 -80 20 1 1799 0 1 0 N 60 -80 20 -80 A 40 80 20 -1799 -1 0 1 0 N 20 80 60 80 A 80 -80 20 1 1799 0 1 0 N 100 -80 60 -80 A 80 80 20 -1799 -1 0 1 0 N 60 80 100 80 C -120 -50 10 0 1 0 F C -120 60 10 0 1 0 F P 2 0 1 0 -100 -80 -100 -100 N P 2 0 1 0 -100 80 -100 100 N P 2 0 1 0 100 -80 100 -100 N P 2 0 1 0 100 100 100 80 N X 1 1 -200 100 100 R 50 50 1 1 P X 2 2 200 100 100 L 50 50 1 1 P X 3 3 -200 -100 100 R 50 50 1 1 P X 4 4 200 -100 100 L 50 50 1 1 P ENDDRAW ENDDEF # # L_Coupled_1243 # DEF L_Coupled_1243 L 0 10 Y N 1 F N F0 "L" 0 175 50 H V C CNN F1 "L_Coupled_1243" 0 -175 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Choke_* *Coil* Inductor_* L_* $ENDFPLIST DRAW A -80 -80 20 1 1799 0 1 0 N -60 -80 -100 -80 A -80 80 20 -1799 -1 0 1 0 N -100 80 -60 80 A -40 -80 20 1 1799 0 1 0 N -20 -80 -60 -80 A -40 80 20 -1799 -1 0 1 0 N -60 80 -20 80 A 0 -80 20 1 1799 0 1 0 N 20 -80 -20 -80 A 0 80 20 -1799 -1 0 1 0 N -20 80 20 80 A 40 -80 20 1 1799 0 1 0 N 60 -80 20 -80 A 40 80 20 -1799 -1 0 1 0 N 20 80 60 80 A 80 -80 20 1 1799 0 1 0 N 100 -80 60 -80 A 80 80 20 -1799 -1 0 1 0 N 60 80 100 80 C -120 -50 10 0 1 0 F C -120 60 10 0 1 0 F P 2 0 1 0 -100 -80 -100 -100 N P 2 0 1 0 -100 80 -100 100 N P 2 0 1 0 100 -80 100 -100 N P 2 0 1 0 100 100 100 80 N X 1 1 -200 100 100 R 50 50 1 1 P X 2 2 200 100 100 L 50 50 1 1 P X 3 3 200 -100 100 L 50 50 1 1 P X 4 4 -200 -100 100 R 50 50 1 1 P ENDDRAW ENDDEF # # L_Coupled_1324 # DEF L_Coupled_1324 L 0 10 Y N 1 F N F0 "L" 0 175 50 H V C CNN F1 "L_Coupled_1324" 0 -175 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Choke_* *Coil* Inductor_* L_* $ENDFPLIST DRAW A -80 -80 20 1 1799 0 1 0 N -60 -80 -100 -80 A -80 80 20 -1799 -1 0 1 0 N -100 80 -60 80 A -40 -80 20 1 1799 0 1 0 N -20 -80 -60 -80 A -40 80 20 -1799 -1 0 1 0 N -60 80 -20 80 A 0 -80 20 1 1799 0 1 0 N 20 -80 -20 -80 A 0 80 20 -1799 -1 0 1 0 N -20 80 20 80 A 40 -80 20 1 1799 0 1 0 N 60 -80 20 -80 A 40 80 20 -1799 -1 0 1 0 N 20 80 60 80 A 80 -80 20 1 1799 0 1 0 N 100 -80 60 -80 A 80 80 20 -1799 -1 0 1 0 N 60 80 100 80 C -120 -50 10 0 1 0 F C -120 60 10 0 1 0 F P 2 0 1 0 -100 -80 -100 -100 N P 2 0 1 0 -100 80 -100 100 N P 2 0 1 0 100 -80 100 -100 N P 2 0 1 0 100 100 100 80 N X 1 1 -200 100 100 R 50 50 1 1 P X 2 2 200 100 100 L 50 50 1 1 P X 3 3 200 -100 100 L 50 50 1 1 P X 4 4 -200 -100 100 R 50 50 1 1 P ENDDRAW ENDDEF # # L_Coupled_1342 # DEF L_Coupled_1342 L 0 10 Y N 1 F N F0 "L" 0 175 50 H V C CNN F1 "L_Coupled_1342" 0 -175 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Choke_* *Coil* Inductor_* L_* $ENDFPLIST DRAW A -80 -80 20 1 1799 0 1 0 N -60 -80 -100 -80 A -80 80 20 -1799 -1 0 1 0 N -100 80 -60 80 A -40 -80 20 1 1799 0 1 0 N -20 -80 -60 -80 A -40 80 20 -1799 -1 0 1 0 N -60 80 -20 80 A 0 -80 20 1 1799 0 1 0 N 20 -80 -20 -80 A 0 80 20 -1799 -1 0 1 0 N -20 80 20 80 A 40 -80 20 1 1799 0 1 0 N 60 -80 20 -80 A 40 80 20 -1799 -1 0 1 0 N 20 80 60 80 A 80 -80 20 1 1799 0 1 0 N 100 -80 60 -80 A 80 80 20 -1799 -1 0 1 0 N 60 80 100 80 C -120 -50 10 0 1 0 F C -120 60 10 0 1 0 F P 2 0 1 0 -100 -80 -100 -100 N P 2 0 1 0 -100 80 -100 100 N P 2 0 1 0 100 -80 100 -100 N P 2 0 1 0 100 100 100 80 N X 1 1 -200 100 100 R 50 50 1 1 P X 2 2 200 -100 100 L 50 50 1 1 P X 3 3 200 100 100 L 50 50 1 1 P X 4 4 -200 -100 100 R 50 50 1 1 P ENDDRAW ENDDEF # # L_Coupled_1423 # DEF L_Coupled_1423 L 0 10 Y N 1 F N F0 "L" 0 175 50 H V C CNN F1 "L_Coupled_1423" 0 -175 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Choke_* *Coil* Inductor_* L_* $ENDFPLIST DRAW A -80 -80 20 1 1799 0 1 0 N -60 -80 -100 -80 A -80 80 20 -1799 -1 0 1 0 N -100 80 -60 80 A -40 -80 20 1 1799 0 1 0 N -20 -80 -60 -80 A -40 80 20 -1799 -1 0 1 0 N -60 80 -20 80 A 0 -80 20 1 1799 0 1 0 N 20 -80 -20 -80 A 0 80 20 -1799 -1 0 1 0 N -20 80 20 80 A 40 -80 20 1 1799 0 1 0 N 60 -80 20 -80 A 40 80 20 -1799 -1 0 1 0 N 20 80 60 80 A 80 -80 20 1 1799 0 1 0 N 100 -80 60 -80 A 80 80 20 -1799 -1 0 1 0 N 60 80 100 80 C -120 -50 10 0 1 0 F C -120 60 10 0 1 0 F P 2 0 1 0 -100 -80 -100 -100 N P 2 0 1 0 -100 80 -100 100 N P 2 0 1 0 100 -80 100 -100 N P 2 0 1 0 100 100 100 80 N X 1 1 -200 100 100 R 50 50 1 1 P X 2 2 -200 -100 100 R 50 50 1 1 P X 3 3 200 -100 100 L 50 50 1 1 P X 4 4 200 100 100 L 50 50 1 1 P ENDDRAW ENDDEF # # L_Coupled_Small # DEF L_Coupled_Small L 0 10 Y N 1 F N F0 "L" 0 125 50 H V C CNN F1 "L_Coupled_Small" 0 -125 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Choke_* *Coil* Inductor_* L_* $ENDFPLIST DRAW A -60 -50 20 1 1799 0 1 0 N -40 -50 -80 -50 A -60 50 20 -1799 -1 0 1 0 N -80 50 -40 50 A -20 -50 20 1 1799 0 1 0 N 0 -50 -40 -50 A -20 50 20 -1799 -1 0 1 0 N -40 50 0 50 A 20 -50 20 1 1799 0 1 0 N 40 -50 0 -50 A 20 50 20 -1799 -1 0 1 0 N 0 50 40 50 A 60 -50 20 1 1799 0 1 0 N 80 -50 40 -50 A 60 50 20 -1799 -1 0 1 0 N 40 50 80 50 C -60 -50 10 0 1 0 F C -60 50 10 0 1 0 F X 1 1 -100 50 20 R 50 50 1 1 P X 2 2 100 50 20 L 50 50 1 1 P X 3 3 -100 -50 20 R 50 50 1 1 P X 4 4 100 -50 20 L 50 50 1 1 P ENDDRAW ENDDEF # # L_Coupled_Small_1243 # DEF L_Coupled_Small_1243 L 0 10 Y N 1 F N F0 "L" 0 125 50 H V C CNN F1 "L_Coupled_Small_1243" 0 -125 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Choke_* *Coil* Inductor_* L_* $ENDFPLIST DRAW A -60 -50 20 1 1799 0 1 0 N -40 -50 -80 -50 A -60 50 20 -1799 -1 0 1 0 N -80 50 -40 50 A -20 -50 20 1 1799 0 1 0 N 0 -50 -40 -50 A -20 50 20 -1799 -1 0 1 0 N -40 50 0 50 A 20 -50 20 1 1799 0 1 0 N 40 -50 0 -50 A 20 50 20 -1799 -1 0 1 0 N 0 50 40 50 A 60 -50 20 1 1799 0 1 0 N 80 -50 40 -50 A 60 50 20 -1799 -1 0 1 0 N 40 50 80 50 C -60 -50 10 0 1 0 F C -60 50 10 0 1 0 F X 1 1 -100 50 20 R 50 50 1 1 P X 2 2 100 50 20 L 50 50 1 1 P X 3 3 100 -50 20 L 50 50 1 1 P X 4 4 -100 -50 20 R 50 50 1 1 P ENDDRAW ENDDEF # # L_Coupled_Small_1324 # DEF L_Coupled_Small_1324 L 0 10 Y N 1 F N F0 "L" 0 175 50 H V C CNN F1 "L_Coupled_Small_1324" 0 -175 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Choke_* *Coil* Inductor_* L_* $ENDFPLIST DRAW A -80 -80 20 1 1799 0 1 0 N -60 -80 -100 -80 A -80 80 20 -1799 -1 0 1 0 N -100 80 -60 80 A -40 -80 20 1 1799 0 1 0 N -20 -80 -60 -80 A -40 80 20 -1799 -1 0 1 0 N -60 80 -20 80 A 0 -80 20 1 1799 0 1 0 N 20 -80 -20 -80 A 0 80 20 -1799 -1 0 1 0 N -20 80 20 80 A 40 -80 20 1 1799 0 1 0 N 60 -80 20 -80 A 40 80 20 -1799 -1 0 1 0 N 20 80 60 80 A 80 -80 20 1 1799 0 1 0 N 100 -80 60 -80 A 80 80 20 -1799 -1 0 1 0 N 60 80 100 80 C -120 -50 10 0 1 0 F C -120 60 10 0 1 0 F P 2 0 1 0 -100 -80 -100 -100 N P 2 0 1 0 -100 80 -100 100 N P 2 0 1 0 100 -80 100 -100 N P 2 0 1 0 100 100 100 80 N X 1 1 -200 100 100 R 50 50 1 1 P X 2 2 200 -100 100 L 50 50 1 1 P X 3 3 200 100 100 L 50 50 1 1 P X 4 4 -200 -100 100 R 50 50 1 1 P ENDDRAW ENDDEF # # L_Coupled_Small_1342 # DEF L_Coupled_Small_1342 L 0 10 Y N 1 F N F0 "L" 0 125 50 H V C CNN F1 "L_Coupled_Small_1342" 0 -125 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Choke_* *Coil* Inductor_* L_* $ENDFPLIST DRAW A -60 -50 20 1 1799 0 1 0 N -40 -50 -80 -50 A -60 50 20 -1799 -1 0 1 0 N -80 50 -40 50 A -20 -50 20 1 1799 0 1 0 N 0 -50 -40 -50 A -20 50 20 -1799 -1 0 1 0 N -40 50 0 50 A 20 -50 20 1 1799 0 1 0 N 40 -50 0 -50 A 20 50 20 -1799 -1 0 1 0 N 0 50 40 50 A 60 -50 20 1 1799 0 1 0 N 80 -50 40 -50 A 60 50 20 -1799 -1 0 1 0 N 40 50 80 50 C -60 -50 10 0 1 0 F C -60 50 10 0 1 0 F X 1 1 -100 50 20 R 50 50 1 1 P X 2 2 100 -50 20 L 50 50 1 1 P X 3 3 100 50 20 L 50 50 1 1 P X 4 4 -100 -50 20 R 50 50 1 1 P ENDDRAW ENDDEF # # L_Coupled_Small_1423 # DEF L_Coupled_Small_1423 L 0 10 Y N 1 F N F0 "L" 0 125 50 H V C CNN F1 "L_Coupled_Small_1423" 0 -125 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Choke_* *Coil* Inductor_* L_* $ENDFPLIST DRAW A -60 -50 20 1 1799 0 1 0 N -40 -50 -80 -50 A -60 50 20 -1799 -1 0 1 0 N -80 50 -40 50 A -20 -50 20 1 1799 0 1 0 N 0 -50 -40 -50 A -20 50 20 -1799 -1 0 1 0 N -40 50 0 50 A 20 -50 20 1 1799 0 1 0 N 40 -50 0 -50 A 20 50 20 -1799 -1 0 1 0 N 0 50 40 50 A 60 -50 20 1 1799 0 1 0 N 80 -50 40 -50 A 60 50 20 -1799 -1 0 1 0 N 40 50 80 50 C -60 -50 10 0 1 0 F C -60 50 10 0 1 0 F X 1 1 -100 50 20 R 50 50 1 1 P X 2 2 -100 -50 20 R 50 50 1 1 P X 3 3 100 -50 20 L 50 50 1 1 P X 4 4 100 50 20 L 50 50 1 1 P ENDDRAW ENDDEF # # L_Small # DEF L_Small L 0 10 N N 1 F N F0 "L" 30 40 50 H V L CNN F1 "L_Small" 30 -40 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Choke_* *Coil* Inductor_* L_* $ENDFPLIST DRAW A 0 -60 20 -899 899 0 1 0 N 0 -80 0 -40 A 0 -20 20 -899 899 0 1 0 N 0 -40 0 0 A 0 20 20 -899 899 0 1 0 N 0 0 0 40 A 0 60 20 -899 899 0 1 0 N 0 40 0 80 X ~ 1 0 100 20 D 50 50 1 1 P X ~ 2 0 -100 20 U 50 50 1 1 P ENDDRAW ENDDEF # # Lamp # DEF Lamp LA 0 1 N N 1 F N F0 "LA" 25 150 50 H V L CNN F1 "Lamp" 25 -150 50 H V L CNN F2 "" 0 100 50 V I C CNN F3 "" 0 100 50 V I C CNN DRAW C 0 0 100 0 1 0 N P 2 0 1 0 -70 70 70 -70 N P 2 0 1 0 70 70 -70 -70 N X - 1 0 -200 100 U 50 50 1 1 P X + 2 0 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Lamp_Flash # DEF Lamp_Flash LA 0 1 Y N 1 F N F0 "LA" 25 150 50 H V L CNN F1 "Lamp_Flash" 25 -150 50 H V L CNN F2 "" 0 100 50 V I C CNN F3 "" 0 100 50 V I C CNN DRAW A 0 0 117 310 -310 0 0 10 N 100 60 100 -60 C 0 0 100 0 1 0 N C 40 -50 10 0 1 0 F S -30 -70 30 -80 0 0 10 F S -30 80 30 70 0 0 10 F P 2 0 0 10 120 0 150 0 N P 2 0 1 0 0 -100 0 -80 N P 2 0 1 0 0 100 0 80 N X ~ 1 0 -200 100 U 50 50 1 1 P X ~ 2 200 0 50 L 50 50 1 1 P X ~ 3 0 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Lamp_Neon # DEF Lamp_Neon NE 0 1 Y N 1 F N F0 "NE" 25 150 50 H V L CNN F1 "Lamp_Neon" 25 -150 50 H V L CNN F2 "" 0 100 50 V I C CNN F3 "" 0 100 50 V I C CNN DRAW C 0 0 100 0 1 0 N C 40 -50 10 0 1 0 F S -60 -20 60 -30 0 1 0 F S -60 30 60 20 0 1 0 F P 2 0 1 0 0 -100 0 -30 N P 2 0 1 0 0 30 0 100 N X ~ 1 0 -200 100 U 50 50 1 1 P X ~ 2 0 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Laserdiode_1A3C # DEF Laserdiode_1A3C LD 0 40 Y N 1 F N F0 "LD" -50 175 50 H V C CNN F1 "Laserdiode_1A3C" -50 -100 50 H V C CNN F2 "" -100 -25 50 H I C CNN F3 "" 30 -200 50 H I C CNN $FPLIST *LaserDiode* $ENDFPLIST DRAW P 2 0 1 0 -160 50 -100 110 N P 2 0 1 0 -160 70 -100 90 N P 2 0 1 0 -160 90 -100 70 N P 2 0 1 0 -160 110 -100 50 N P 2 0 1 0 -140 110 -120 50 N P 2 0 1 0 -130 80 -130 40 N P 2 0 1 0 -130 80 -130 120 N P 2 0 1 0 -120 110 -140 50 N P 2 0 1 0 -70 80 -170 80 N P 2 0 1 8 -60 50 -60 -50 N P 2 0 1 0 50 120 30 120 N P 2 0 1 0 100 0 -200 0 N P 3 0 1 0 -10 60 50 120 50 100 N P 4 0 1 8 40 50 40 -50 -60 0 40 50 N P 5 0 1 0 -60 60 0 120 0 100 0 120 -20 120 N X A 1 200 0 100 L 50 50 1 1 P X K 3 -300 0 100 R 50 50 1 1 P ENDDRAW ENDDEF # # Laserdiode_1C2A # DEF Laserdiode_1C2A LD 0 40 Y N 1 F N F0 "LD" -50 175 50 H V C CNN F1 "Laserdiode_1C2A" -50 -100 50 H V C CNN F2 "" -100 -25 50 H I C CNN F3 "" 30 -200 50 H I C CNN $FPLIST *LaserDiode* $ENDFPLIST DRAW P 2 0 1 0 -160 50 -100 110 N P 2 0 1 0 -160 70 -100 90 N P 2 0 1 0 -160 90 -100 70 N P 2 0 1 0 -160 110 -100 50 N P 2 0 1 0 -140 110 -120 50 N P 2 0 1 0 -130 80 -130 40 N P 2 0 1 0 -130 80 -130 120 N P 2 0 1 0 -120 110 -140 50 N P 2 0 1 0 -70 80 -170 80 N P 2 0 1 8 -60 50 -60 -50 N P 2 0 1 0 50 120 30 120 N P 2 0 1 0 100 0 -200 0 N P 3 0 1 0 -10 60 50 120 50 100 N P 4 0 1 8 40 50 40 -50 -60 0 40 50 N P 5 0 1 0 -60 60 0 120 0 100 0 120 -20 120 N X K 1 -300 0 100 R 50 50 1 1 P X A 2 200 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # Laserdiode_M_TYPE # DEF Laserdiode_M_TYPE LD 0 20 Y N 1 F N F0 "LD" 40 280 50 H V C CNN F1 "Laserdiode_M_TYPE" 40 -220 50 H V C CNN F2 "" 40 75 50 H I C CNN F3 "" 90 -100 50 H I C CNN $FPLIST *LaserDiode* $ENDFPLIST DRAW A -20 -63 7 -899 899 0 1 0 N -20 -70 -20 -55 A 0 -70 15 -899 899 0 1 0 N 0 -85 0 -55 A 0 65 15 -899 899 0 1 0 N 0 50 0 80 C -60 0 10 0 1 0 F S 170 240 -90 -170 0 1 10 f P 2 0 1 0 -100 0 -60 0 N P 2 0 1 0 -60 150 0 210 N P 2 0 1 0 -60 170 0 190 N P 2 0 1 0 -60 190 0 170 N P 2 0 1 0 -60 210 0 150 N P 2 0 1 0 -40 210 -20 150 N P 2 0 1 0 -30 180 -30 140 N P 2 0 1 0 -30 180 -30 220 N P 2 0 1 0 -25 -55 -25 -85 N P 2 0 1 0 -20 210 -40 150 N P 2 0 1 0 0 -55 0 -85 N P 2 0 1 0 0 80 0 50 N P 2 0 1 0 30 180 -70 180 N P 2 0 1 8 40 -50 40 -150 N P 2 0 1 0 40 -30 60 -30 N P 2 0 1 8 40 150 40 50 N P 2 0 1 0 150 220 130 220 N P 3 0 1 0 -25 80 -25 50 -10 50 N P 3 0 1 0 90 160 150 220 150 200 N P 3 0 1 0 100 30 40 -30 40 -10 N P 4 0 1 8 140 -50 140 -150 40 -100 140 -50 N P 4 0 1 8 140 150 140 50 40 100 140 150 N P 4 0 1 0 200 100 -60 100 -60 -100 200 -100 N P 5 0 1 0 40 160 100 220 100 200 100 220 80 220 N P 5 0 1 0 150 30 90 -30 90 -10 90 -30 110 -30 N X ~ 1 300 100 100 L 50 50 1 1 P X ~ 2 -200 0 100 R 50 50 1 1 P X ~ 3 300 -100 100 L 50 50 1 1 P ENDDRAW ENDDEF # # Laserdiode_N_TYPE # DEF Laserdiode_N_TYPE LD 0 20 Y N 1 F N F0 "LD" 40 280 50 H V C CNN F1 "Laserdiode_N_TYPE" 40 -220 50 H V C CNN F2 "" 0 75 50 H I C CNN F3 "" 50 -100 50 H I C CNN $FPLIST *LaserDiode* $ENDFPLIST DRAW A -20 -63 7 -899 899 0 1 0 N -20 -70 -20 -55 A 0 -70 15 -899 899 0 1 0 N 0 -85 0 -55 A 0 65 15 -899 899 0 1 0 N 0 50 0 80 C -60 0 10 0 1 0 F S 170 240 -90 -170 0 1 10 f P 2 0 1 0 -100 0 -60 0 N P 2 0 1 0 -60 150 0 210 N P 2 0 1 0 -60 170 0 190 N P 2 0 1 0 -60 190 0 170 N P 2 0 1 0 -60 210 0 150 N P 2 0 1 0 -40 210 -20 150 N P 2 0 1 0 -30 180 -30 140 N P 2 0 1 0 -30 180 -30 220 N P 2 0 1 0 -25 -55 -25 -85 N P 2 0 1 0 -20 210 -40 150 N P 2 0 1 0 0 -55 0 -85 N P 2 0 1 0 0 80 0 50 N P 2 0 1 0 30 180 -70 180 N P 2 0 1 0 30 220 50 220 N P 2 0 1 8 40 -50 40 -150 N P 2 0 1 0 40 -30 60 -30 N P 2 0 1 8 140 150 140 50 N P 3 0 1 0 -25 80 -25 50 -10 50 N P 3 0 1 0 90 160 30 220 30 200 N P 3 0 1 0 100 30 40 -30 40 -10 N P 4 0 1 8 140 -50 140 -150 40 -100 140 -50 N P 4 0 1 0 200 100 -60 100 -60 -100 200 -100 N P 5 0 1 0 140 160 80 220 80 200 80 220 100 220 N P 5 0 1 0 150 30 90 -30 90 -10 90 -30 110 -30 N P 4 1 1 8 40 150 40 50 140 100 40 150 N X ~ 1 300 100 100 L 50 50 1 1 P X ~ 2 -200 0 100 R 50 50 1 1 P X ~ 3 300 -100 100 L 50 50 1 1 P ENDDRAW ENDDEF # # Laserdiode_P_TYPE # DEF Laserdiode_P_TYPE LD 0 20 Y N 1 F N F0 "LD" 40 280 50 H V C CNN F1 "Laserdiode_P_TYPE" 40 -220 50 H V C CNN F2 "" 0 75 50 H I C CNN F3 "" 130 -100 50 H I C CNN $FPLIST *LaserDiode* $ENDFPLIST DRAW A -20 -63 7 -899 899 0 1 0 N -20 -70 -20 -55 A 0 -70 15 -899 899 0 1 0 N 0 -85 0 -55 A 0 65 15 -899 899 0 1 0 N 0 50 0 80 C -60 0 10 0 1 0 F S 170 240 -90 -170 0 1 10 f P 2 0 1 0 -100 0 -60 0 N P 2 0 1 0 -60 150 0 210 N P 2 0 1 0 -60 170 0 190 N P 2 0 1 0 -60 190 0 170 N P 2 0 1 0 -60 210 0 150 N P 2 0 1 0 -40 210 -20 150 N P 2 0 1 0 -30 180 -30 140 N P 2 0 1 0 -30 180 -30 220 N P 2 0 1 0 -25 -55 -25 -85 N P 2 0 1 0 -20 210 -40 150 N P 2 0 1 0 0 -55 0 -85 N P 2 0 1 0 0 80 0 50 N P 2 0 1 0 30 180 -70 180 N P 2 0 1 8 40 150 40 50 N P 2 0 1 8 140 -50 140 -150 N P 2 0 1 0 140 -30 120 -30 N P 2 0 1 0 150 220 130 220 N P 3 0 1 0 -25 80 -25 50 -10 50 N P 3 0 1 0 80 30 140 -30 140 -10 N P 3 0 1 0 90 160 150 220 150 200 N P 4 0 1 8 40 -50 40 -150 140 -100 40 -50 N P 4 0 1 8 140 150 140 50 40 100 140 150 N P 4 0 1 0 200 100 -60 100 -60 -100 200 -100 N P 5 0 1 0 30 30 90 -30 90 -10 90 -30 70 -30 N P 5 0 1 0 40 160 100 220 100 200 100 220 80 220 N X ~ 1 300 100 100 L 50 50 1 1 P X ~ 2 -200 0 100 R 50 50 1 1 P X ~ 3 300 -100 100 L 50 50 1 1 P ENDDRAW ENDDEF # # MEMRISTOR # DEF MEMRISTOR MR 0 0 N Y 1 F N F0 "MR" 100 0 50 V V C CNN F1 "MEMRISTOR" -100 0 50 V V C CNN F2 "" -70 0 50 V I C CNN F3 "" 0 0 50 H I C CNN DRAW P 10 0 0 10 0 100 50 100 50 50 -50 50 -50 0 50 0 50 -50 -50 -50 -50 -100 0 -100 N X ~ 1 0 150 50 D 50 50 1 1 P X ~ 2 0 -150 50 U 50 50 1 1 P ENDDRAW ENDDEF # # Microphone # DEF Microphone MK 0 1 Y N 1 F N F0 "MK" -150 50 50 H V R CNN F1 "Microphone" -150 -25 50 H V R CNN F2 "" 0 100 50 V I C CNN F3 "" 0 100 50 V I C CNN DRAW C 0 0 100 0 1 10 N P 2 0 1 10 -100 100 -100 -100 N P 2 0 1 0 10 150 30 150 N P 2 0 1 0 20 160 20 140 N X - 1 0 -200 100 U 50 50 1 1 P X + 2 0 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Microphone_Condenser # DEF Microphone_Condenser MK 0 1 Y N 1 F N F0 "MK" -130 50 50 H V R CNN F1 "Microphone_Condenser" -130 -25 50 H V R CNN F2 "" 0 100 50 V I C CNN F3 "" 0 100 50 V I C CNN DRAW C 0 0 100 0 1 10 N S 40 -10 -40 -30 0 1 0 F S 40 30 -40 10 0 1 0 F P 2 0 1 10 -100 100 -100 -100 N P 2 0 1 0 0 -30 0 -60 N P 2 0 1 0 0 30 0 60 N P 2 0 1 0 10 150 30 150 N P 2 0 1 0 20 160 20 140 N X - 1 0 -200 100 U 50 50 1 1 P X + 2 0 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Microphone_Crystal # DEF Microphone_Crystal MK 0 1 Y N 1 F N F0 "MK" -150 45 50 H V R CNN F1 "Microphone_Crystal" -150 -30 50 H V R CNN F2 "" 50 -70 50 V I L CNN F3 "" 0 100 50 V I C CNN ALIAS Microphone_Ultrasound DRAW C 0 0 100 0 1 10 N S -50 20 50 -20 0 1 10 N P 2 0 1 10 -100 100 -100 -100 N P 2 0 1 0 -30 -40 30 -40 N P 2 0 1 0 -30 40 30 40 N P 2 0 1 0 0 -40 0 -70 N P 2 0 1 0 0 40 0 70 N P 2 0 1 0 10 150 30 150 N P 2 0 1 0 20 160 20 140 N X - 1 0 -200 100 U 50 50 1 1 P X + 2 0 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Net-Tie_2 # DEF Net-Tie_2 NT 0 0 N N 1 F N F0 "NT" 0 50 50 H V C CNN F1 "Net-Tie_2" 0 -50 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Net*Tie* $ENDFPLIST DRAW P 2 0 1 10 -50 0 50 0 N X 1 1 -100 0 100 R 50 50 1 1 P X 2 2 100 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # Net-Tie_3 # DEF Net-Tie_3 NT 0 0 N N 1 F N F0 "NT" 0 50 50 H V C CNN F1 "Net-Tie_3" 0 -150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Net*Tie* $ENDFPLIST DRAW P 2 0 1 20 -50 0 50 0 N P 3 0 1 20 0 0 0 -100 -50 -100 N X 1 1 -100 0 100 R 50 50 1 1 P X 2 2 100 0 100 L 50 50 1 1 P X 3 3 -100 -100 100 R 50 50 1 1 P ENDDRAW ENDDEF # # Net-Tie_3_Tee # DEF Net-Tie_3_Tee NT 0 0 N N 1 F N F0 "NT" 0 125 50 H V C CNN F1 "Net-Tie_3_Tee" 0 50 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Net*Tie* $ENDFPLIST DRAW P 2 0 1 20 -50 0 50 0 N P 2 0 1 10 -50 0 50 0 N P 2 0 1 10 0 -100 0 -100 N P 2 0 1 20 0 -50 0 0 N X 1 1 -100 0 100 R 50 50 1 1 P X 2 2 100 0 100 L 50 50 1 1 P X 3 3 0 -100 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Net-Tie_4 # DEF Net-Tie_4 NT 0 0 N N 1 F N F0 "NT" 0 50 50 H V C CNN F1 "Net-Tie_4" 0 -150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Net*Tie* $ENDFPLIST DRAW P 2 0 1 20 -50 -100 50 -100 N P 2 0 1 20 -50 0 50 0 N P 2 0 1 20 0 -100 0 0 N X 1 1 -100 0 100 R 50 50 1 1 P X 2 2 100 0 100 L 50 50 1 1 P X 3 3 -100 -100 100 R 50 50 1 1 P X 4 4 100 -100 100 L 50 50 1 1 P ENDDRAW ENDDEF # # Net-Tie_4_Cross # DEF Net-Tie_4_Cross NT 0 0 N N 1 F N F0 "NT" 25 50 50 H V L CNN F1 "Net-Tie_4_Cross" 25 -50 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Net*Tie* $ENDFPLIST DRAW P 2 0 1 20 -50 0 50 0 N P 2 0 1 20 0 -50 0 50 N X 1 1 -100 0 100 R 50 50 1 1 P X 2 2 100 0 100 L 50 50 1 1 P X 3 3 0 100 100 D 50 50 1 1 P X 4 4 0 -100 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Ohmmeter # DEF Ohmmeter MES 0 1 N N 1 F N F0 "MES" -130 40 50 H V R CNN F1 "Ohmmeter" -130 -30 50 H V R CNN F2 "" 0 100 50 V I C CNN F3 "" 0 100 50 V I C CNN DRAW C 0 0 100 0 1 10 N T 0 0 0 100 0 0 0 Ω Normal 0 C C P 2 0 0 0 -125 -125 -75 -75 N P 2 0 0 0 75 75 125 125 N P 3 0 0 0 75 125 125 125 125 75 N X - 1 0 -200 100 U 50 50 1 1 P X + 2 0 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Opamp_Dual_Generic # DEF Opamp_Dual_Generic U 0 20 Y Y 3 L N F0 "U" 0 200 50 H V L CNN F1 "Opamp_Dual_Generic" 0 -200 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST SOIC*3.9x4.9mm*P1.27mm* DIP*W7.62mm* MSOP*3x3mm*P0.65mm* SSOP*2.95x2.8mm*P0.65mm* TSSOP*3x3mm*P0.65mm* VSSOP*P0.5mm* TO?99* $ENDFPLIST DRAW P 4 1 1 10 -200 200 200 0 -200 -200 -200 200 f P 4 2 1 10 -200 200 200 0 -200 -200 -200 200 f X ~ 1 300 0 100 L 50 50 1 1 O X - 2 -300 -100 100 R 50 50 1 1 I X + 3 -300 100 100 R 50 50 1 1 I X + 5 -300 100 100 R 50 50 2 1 I X - 6 -300 -100 100 R 50 50 2 1 I X ~ 7 300 0 100 L 50 50 2 1 O X V- 4 -100 -300 150 U 50 50 3 1 W X V+ 8 -100 300 150 D 50 50 3 1 W ENDDRAW ENDDEF # # Opamp_Quad_Generic # DEF Opamp_Quad_Generic U 0 20 Y Y 5 L N F0 "U" 0 200 50 H V L CNN F1 "Opamp_Quad_Generic" 0 -200 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST SOIC*3.9x8.7mm*P1.27mm* DIP*W7.62mm* TSSOP*4.4x5mm*P0.65mm* SSOP*5.3x6.2mm*P0.65mm* $ENDFPLIST DRAW P 4 1 1 10 -200 200 200 0 -200 -200 -200 200 f P 4 2 1 10 -200 200 200 0 -200 -200 -200 200 f P 4 3 1 10 -200 200 200 0 -200 -200 -200 200 f P 4 4 1 10 -200 200 200 0 -200 -200 -200 200 f X ~ 1 300 0 100 L 50 50 1 1 O X - 2 -300 -100 100 R 50 50 1 1 I X + 3 -300 100 100 R 50 50 1 1 I X + 5 -300 100 100 R 50 50 2 1 I X - 6 -300 -100 100 R 50 50 2 1 I X ~ 7 300 0 100 L 50 50 2 1 O X + 10 -300 100 100 R 50 50 3 1 I X ~ 8 300 0 100 L 50 50 3 1 O X - 9 -300 -100 100 R 50 50 3 1 I X + 12 -300 100 100 R 50 50 4 1 I X - 13 -300 -100 100 R 50 50 4 1 I X ~ 14 300 0 100 L 50 50 4 1 O X V- 11 -100 -300 150 U 50 50 5 1 W X V+ 4 -100 300 150 D 50 50 5 1 W ENDDRAW ENDDEF # # Oscilloscope # DEF Oscilloscope MES 0 1 N N 1 F N F0 "MES" -130 40 50 H V R CNN F1 "Oscilloscope" -130 -30 50 H V R CNN F2 "" 0 100 50 V I C CNN F3 "" 0 100 50 V I C CNN DRAW A -55 20 15 1 1799 0 0 10 N -40 20 -70 20 A -15 -20 15 -1799 -1 0 0 10 N -30 -20 0 -20 A 25 20 15 1 1799 0 0 10 N 40 20 10 20 A 65 -20 15 -1799 -1 0 0 10 N 50 -20 80 -20 C 0 0 100 0 1 10 N P 2 0 0 10 -70 20 -75 0 N P 2 0 0 10 -40 20 -30 -20 N P 2 0 0 10 0 -20 10 20 N P 2 0 0 10 40 20 50 -20 N P 2 0 0 10 80 -20 85 0 N P 2 0 1 0 10 150 30 150 N P 2 0 1 0 20 160 20 140 N X - 1 0 -200 100 U 50 50 1 1 P X + 2 0 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Peltier_Element # DEF Peltier_Element PE 0 0 N Y 1 F N F0 "PE" 0 125 50 H V C CNN F1 "Peltier_Element" 0 -50 50 H V C CNN F2 "" 0 -70 50 H I C CNN F3 "" 0 25 50 V I C CNN DRAW S -140 75 -115 0 0 1 0 F S -90 75 -65 0 0 1 0 F S -15 75 -40 0 0 1 0 F S 35 75 10 0 0 1 0 F S 60 0 85 75 0 1 0 F S 110 0 135 75 0 1 0 F P 2 0 1 10 -150 0 150 0 F P 2 0 1 10 -150 75 150 75 N X ~ 1 -200 0 50 R 50 50 1 1 P X ~ 2 200 0 50 L 50 50 1 1 P ENDDRAW ENDDEF # # Polyfuse # DEF Polyfuse F 0 0 N Y 1 F N F0 "F" -100 0 50 V V C CNN F1 "Polyfuse" 100 0 50 V V C CNN F2 "" 50 -200 50 H I L CNN F3 "" 0 0 50 H I C CNN $FPLIST *polyfuse* *PTC* $ENDFPLIST DRAW S -30 100 30 -100 0 1 10 N P 2 0 1 0 0 100 0 -100 N P 4 0 1 0 -60 100 -60 60 60 -60 60 -100 N X ~ 1 0 150 50 D 50 50 1 1 P X ~ 2 0 -150 50 U 50 50 1 1 P ENDDRAW ENDDEF # # Polyfuse_Small # DEF Polyfuse_Small F 0 0 N Y 1 F N F0 "F" -75 0 50 V V C CNN F1 "Polyfuse_Small" 75 0 50 V V C CNN F2 "" 50 -200 50 H I L CNN F3 "" 0 0 50 H I C CNN $FPLIST *polyfuse* *PTC* $ENDFPLIST DRAW S -20 50 20 -50 0 1 0 N P 2 0 1 0 0 100 0 -100 N P 4 0 1 0 -40 50 -40 30 40 -30 40 -50 N X ~ 1 0 100 25 D 50 50 1 1 P X ~ 2 0 -100 25 U 50 50 1 1 P ENDDRAW ENDDEF # # Q_DUAL_NMOS_G1S2G2D2S1D1 # DEF Q_DUAL_NMOS_G1S2G2D2S1D1 Q 0 0 Y N 2 F N F0 "Q" 250 50 50 H V C CNN F1 "Q_DUAL_NMOS_G1S2G2D2S1D1" 750 -50 50 H V C CNN F2 "" 200 0 50 H I C CNN F3 "" 200 0 50 H I C CNN $FPLIST TSOP* SC?70* SC?88* SOT?363* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X G 1 -200 0 100 R 50 50 1 1 I X S 5 100 -200 100 U 50 50 1 1 P X D 6 100 200 100 D 50 50 1 1 P X S 2 100 -200 100 U 50 50 2 1 P X G 3 -200 0 100 R 50 50 2 1 I X D 4 100 200 100 D 50 50 2 1 P ENDDRAW ENDDEF # # Q_DUAL_NMOS_S1G1D2S2G2D1 # DEF Q_DUAL_NMOS_S1G1D2S2G2D1 Q 0 0 Y N 2 F N F0 "Q" 250 50 50 H V C CNN F1 "Q_DUAL_NMOS_S1G1D2S2G2D1" 750 -50 50 H V C CNN F2 "" 200 0 50 H I C CNN F3 "" 200 0 50 H I C CNN $FPLIST TSOP* SC?70* SC?88* SOT?363* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X S 1 100 -200 100 U 50 50 1 1 P X G 2 -200 0 100 R 50 50 1 1 I X D 6 100 200 100 D 50 50 1 1 P X D 3 100 200 100 D 50 50 2 1 P X S 4 100 -200 100 U 50 50 2 1 P X G 5 -200 0 100 R 50 50 2 1 I ENDDRAW ENDDEF # # Q_DUAL_NPN_C2C1E1E2 # DEF Q_DUAL_NPN_C2C1E1E2 Q 0 0 Y Y 1 F N F0 "Q" 300 50 50 H V L CNN F1 "Q_DUAL_NPN_C2C1E1E2" 300 -50 50 H V L CNN F2 "" 0 0 50 H I C CIN F3 "" -100 0 50 H I L CNN $FPLIST SOT?143* $ENDFPLIST DRAW C -200 120 10 0 1 0 F C 0 0 10 0 1 0 F P 2 0 1 0 -200 -100 -125 -25 N P 2 0 1 0 -200 100 -125 25 N P 2 0 1 0 -200 100 -125 25 N P 2 0 1 0 125 0 -125 0 N P 2 0 1 0 200 -100 125 -25 N P 2 0 1 0 200 100 125 25 N P 3 0 1 20 -125 -75 -125 75 -125 75 F P 3 0 1 0 0 0 0 120 -200 120 N P 3 0 1 20 125 -75 125 75 125 75 F P 5 0 1 0 -150 -70 -170 -50 -190 -90 -150 -70 -150 -70 F P 5 0 1 0 150 -70 170 -50 190 -90 150 -70 150 -70 F X C2 1 -200 200 100 D 50 50 1 1 P X C1 2 200 200 100 D 50 50 1 1 P X E1 3 200 -200 100 U 50 50 1 1 P X E2 4 -200 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Q_DUAL_NPN_NPN_BRT_E1B1C2E2B2C1 # DEF Q_DUAL_NPN_NPN_BRT_E1B1C2E2B2C1 Q 0 20 Y N 2 F N F0 "Q" 150 50 50 H V L CNN F1 "Q_DUAL_NPN_NPN_BRT_E1B1C2E2B2C1" 150 -50 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST SC?70* SC?88* SOT*363* $ENDFPLIST DRAW C -150 0 10 0 1 0 F C 50 -120 10 0 1 0 F C 0 0 111 1 1 10 N C 0 0 111 2 1 10 N S -250 20 -190 -20 0 1 0 N S -170 -90 -130 -30 0 1 0 N P 2 0 1 0 -150 -30 -150 0 N P 2 0 1 0 -30 0 -190 0 N P 2 0 1 20 -25 60 -25 -60 N P 3 0 1 0 -150 -90 -150 -120 50 -120 N P 2 1 1 0 -25 25 50 100 N P 3 1 1 0 -25 -25 50 -100 50 -100 N P 5 1 1 0 0 -70 20 -50 40 -90 0 -70 0 -70 F P 2 2 1 0 -25 25 50 100 N P 3 2 1 0 -25 -25 50 -100 50 -100 N P 5 2 1 0 0 -70 20 -50 40 -90 0 -70 0 -70 F X C1 3 50 200 100 D 50 50 1 1 P X E1 4 50 -200 100 U 50 50 1 1 P X B1 5 -350 0 100 R 50 50 1 1 I X E1 1 50 -200 100 U 50 50 2 1 P X B1 2 -350 0 100 R 50 50 2 1 I X C1 6 50 200 100 D 50 50 2 1 P ENDDRAW ENDDEF # # Q_DUAL_NPN_NPN_C2E2C1E1B1B2 # DEF Q_DUAL_NPN_NPN_C2E2C1E1B1B2 Q 0 0 Y N 2 L N F0 "Q" 200 50 50 H V L CNN F1 "Q_DUAL_NPN_NPN_C2E2C1E1B1B2" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST SC?70* SC?88* SOT?363* SOT?23* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 0 -100 0 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X C1 3 100 200 100 D 50 50 1 1 P X E1 4 100 -200 100 U 50 50 1 1 P X B1 5 -200 0 100 R 50 50 1 1 I X C2 1 100 200 100 D 50 50 2 1 P X E2 2 100 -200 100 U 50 50 2 1 P X B2 6 -200 0 100 R 50 50 2 1 I ENDDRAW ENDDEF # # Q_DUAL_NPN_NPN_E1B1C2E2B2C1 # DEF Q_DUAL_NPN_NPN_E1B1C2E2B2C1 Q 0 0 Y N 2 L N F0 "Q" 200 50 50 H V L CNN F1 "Q_DUAL_NPN_NPN_E1B1C2E2B2C1" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST SC?70* SC?88* SOT?363* SOT?23* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 0 -100 0 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X E1 1 100 -200 100 U 50 50 1 1 P X B1 2 -200 0 100 R 50 50 1 1 I X C1 6 100 200 100 D 50 50 1 1 P X C2 3 100 200 100 D 50 50 2 1 P X E2 4 100 -200 100 U 50 50 2 1 P X B2 5 -200 0 100 R 50 50 2 1 I ENDDRAW ENDDEF # # Q_DUAL_NPN_PNP_BRT_E1B1C2E2B2C1 # DEF Q_DUAL_NPN_PNP_BRT_E1B1C2E2B2C1 Q 0 20 Y N 2 F N F0 "Q" 150 50 50 H V L CNN F1 "Q_DUAL_NPN_PNP_BRT_E1B1C2E2B2C1" 150 -50 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST SC?70* SC?88* SOT*363* $ENDFPLIST DRAW C -150 0 10 0 1 0 F C 50 -120 10 0 1 0 F C 0 0 111 1 1 10 N C 0 0 111 2 1 10 N S -250 20 -190 -20 0 1 0 N S -170 -90 -130 -30 0 1 0 N P 2 0 1 0 -150 -30 -150 0 N P 2 0 1 0 -30 0 -190 0 N P 2 0 1 20 -25 60 -25 -60 N P 3 0 1 0 -150 -90 -150 -120 50 -120 N P 2 1 1 0 -25 25 50 100 N P 3 1 1 0 -25 -25 50 -100 50 -100 N P 5 1 1 0 0 -70 20 -50 40 -90 0 -70 0 -70 F P 2 2 1 0 -25 25 50 100 N P 3 2 1 0 -25 -25 50 -100 50 -100 N P 5 2 1 0 40 -70 20 -90 0 -50 40 -70 40 -70 F X E1 1 50 -200 100 U 50 50 1 1 P X B1 2 -350 0 100 R 50 50 1 1 I X C1 6 50 200 100 D 50 50 1 1 P X C1 3 50 200 100 D 50 50 2 1 P X E1 4 50 -200 100 U 50 50 2 1 P X B1 5 -350 0 100 R 50 50 2 1 I ENDDRAW ENDDEF # # Q_DUAL_NPN_PNP_E1B1C2E2B2C1 # DEF Q_DUAL_NPN_PNP_E1B1C2E2B2C1 Q 0 0 Y N 2 L N F0 "Q" 200 50 50 H V L CNN F1 "Q_DUAL_NPN_PNP_E1B1C2E2B2C1" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST SC?70* SC?88* SOT?363* SOT?23* $ENDFPLIST DRAW C 50 0 111 0 1 10 N C 50 0 111 0 1 10 N P 2 0 1 0 25 0 -100 0 N P 2 1 1 0 25 25 100 100 N P 3 1 1 0 25 -25 100 -100 100 -100 N P 3 1 1 20 25 75 25 -75 25 -75 N P 5 1 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F P 2 2 1 0 25 25 100 100 N P 3 2 1 0 25 -25 100 -100 100 -100 N P 3 2 1 20 25 75 25 -75 25 -75 N P 5 2 1 0 90 -70 70 -90 50 -50 90 -70 90 -70 F X E1 1 100 -200 100 U 50 50 1 1 P X B1 2 -200 0 100 R 50 50 1 1 I X C1 6 100 200 100 D 50 50 1 1 P X C2 3 100 200 100 D 50 50 2 1 P X E2 4 100 -200 100 U 50 50 2 1 P X B2 5 -200 0 100 R 50 50 2 1 I ENDDRAW ENDDEF # # Q_DUAL_PMOS_G1S2G2D2S1D1 # DEF Q_DUAL_PMOS_G1S2G2D2S1D1 Q 0 0 Y N 2 F N F0 "Q" 250 50 50 H V C CNN F1 "Q_DUAL_PMOS_G1S2G2D2S1D1" 750 -50 50 H V C CNN F2 "" 50 0 50 H I C CNN F3 "" 50 0 50 H I C CNN $FPLIST TSOP* SC?70* SC?88* SOT?363* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 70 130 70 130 -70 30 -70 N P 4 0 1 0 90 0 50 15 50 -15 90 0 F P 4 0 1 0 110 -20 115 -15 145 -15 150 -10 N P 4 0 1 0 130 -15 115 10 145 10 130 -15 N X G 1 -200 0 100 R 50 50 1 1 I X S 5 100 -200 100 U 50 50 1 1 P X D 6 100 200 100 D 50 50 1 1 P X S 2 100 -200 100 U 50 50 2 1 P X G 3 -200 0 100 R 50 50 2 1 I X D 4 100 200 100 D 50 50 2 1 P ENDDRAW ENDDEF # # Q_DUAL_PMOS_S1G1D2S2G2D1 # DEF Q_DUAL_PMOS_S1G1D2S2G2D1 Q 0 0 Y N 2 F N F0 "Q" 250 50 50 H V C CNN F1 "Q_DUAL_PMOS_S1G1D2S2G2D1" 750 -50 50 H V C CNN F2 "" 50 0 50 H I C CNN F3 "" 50 0 50 H I C CNN $FPLIST TSOP* SC?70* SC?88* SOT?363* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 70 130 70 130 -70 30 -70 N P 4 0 1 0 90 0 50 15 50 -15 90 0 F P 4 0 1 0 110 -20 115 -15 145 -15 150 -10 N P 4 0 1 0 130 -15 115 10 145 10 130 -15 N X S 1 100 -200 100 U 50 50 1 1 P X G 2 -200 0 100 R 50 50 1 1 I X D 6 100 200 100 D 50 50 1 1 P X D 3 100 200 100 D 50 50 2 1 P X S 4 100 -200 100 U 50 50 2 1 P X G 5 -200 0 100 R 50 50 2 1 I ENDDRAW ENDDEF # # Q_DUAL_PMOS_S1G1S2G2D2D2D1D1 # DEF Q_DUAL_PMOS_S1G1S2G2D2D2D1D1 Q 0 0 Y N 2 F N F0 "Q" 250 50 50 H V C CNN F1 "Q_DUAL_PMOS_S1G1S2G2D2D2D1D1" 850 -50 50 H V C CNN F2 "" 50 0 50 H I C CNN F3 "" 50 0 50 H I C CNN $FPLIST SO* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F C 100 100 10 0 1 0 F S 200 100 100 100 0 1 0 N P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 70 130 70 130 -70 30 -70 N P 4 0 1 0 90 0 50 15 50 -15 90 0 F P 4 0 1 0 110 -20 115 -15 145 -15 150 -10 N P 4 0 1 0 130 -15 115 10 145 10 130 -15 N X S 1 100 -200 100 U 50 50 1 1 P X G 2 -200 0 100 R 50 50 1 1 I X D 7 100 200 100 D 50 50 1 1 P X G 8 200 200 100 D 50 50 1 1 P X S 3 100 -200 100 U 50 50 2 1 P X G 4 -200 0 100 R 50 50 2 1 I X D 5 100 200 100 D 50 50 2 1 P X G 6 200 200 100 D 50 50 2 1 P ENDDRAW ENDDEF # # Q_DUAL_PNP_C2C1E1E2 # DEF Q_DUAL_PNP_C2C1E1E2 Q 0 0 Y Y 1 F N F0 "Q" 300 50 50 H V L CNN F1 "Q_DUAL_PNP_C2C1E1E2" 300 -50 50 H V L CNN F2 "" 0 0 50 H I C CIN F3 "" -100 0 50 H I L CNN $FPLIST SOT?143* $ENDFPLIST DRAW C -200 -120 10 0 1 0 F C 0 0 10 0 1 0 F P 2 0 1 0 -200 -100 -125 -25 N P 2 0 1 0 -200 100 -125 25 N P 2 0 1 0 -200 100 -125 25 N P 2 0 1 0 125 0 -125 0 N P 2 0 1 0 200 -100 125 -25 N P 2 0 1 0 200 100 125 25 N P 3 0 1 20 -125 -75 -125 75 -125 75 F P 3 0 1 0 0 0 0 -120 -200 -120 N P 3 0 1 20 125 -75 125 75 125 75 F P 5 0 1 0 -155 75 -175 55 -135 35 -155 75 -155 75 F P 5 0 1 0 155 75 175 55 135 35 155 75 155 75 F X C2 1 -200 -200 100 U 50 50 1 1 P X C1 2 200 -200 100 U 50 50 1 1 P X E1 3 200 200 100 D 50 50 1 1 P X E2 4 -200 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Q_DUAL_PNP_NPN_BRT_E1B1C2E2B2C1 # DEF Q_DUAL_PNP_NPN_BRT_E1B1C2E2B2C1 Q 0 20 Y N 2 F N F0 "Q" 150 50 50 H V L CNN F1 "Q_DUAL_PNP_NPN_BRT_E1B1C2E2B2C1" 150 -50 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST SC?70* SC?88* SOT*363* $ENDFPLIST DRAW C -150 0 10 0 1 0 F C 50 -120 10 0 1 0 F C 0 0 111 1 1 10 N C 0 0 111 2 1 10 N S -250 20 -190 -20 0 1 0 N S -170 -90 -130 -30 0 1 0 N P 2 0 1 0 -150 -30 -150 0 N P 2 0 1 0 -30 0 -190 0 N P 2 0 1 20 -25 60 -25 -60 N P 3 0 1 0 -150 -90 -150 -120 50 -120 N P 2 1 1 0 -25 25 50 100 N P 3 1 1 0 -25 -25 50 -100 50 -100 N P 5 1 1 0 40 -70 20 -90 0 -50 40 -70 40 -70 F P 2 2 1 0 -25 25 50 100 N P 3 2 1 0 -25 -25 50 -100 50 -100 N P 5 2 1 0 0 -70 20 -50 40 -90 0 -70 0 -70 F X E1 1 50 -200 100 U 50 50 1 1 P X B1 2 -350 0 100 R 50 50 1 1 I X C1 6 50 200 100 D 50 50 1 1 P X C1 3 50 200 100 D 50 50 2 1 P X E1 4 50 -200 100 U 50 50 2 1 P X B1 5 -350 0 100 R 50 50 2 1 I ENDDRAW ENDDEF # # Q_DUAL_PNP_PNP_BRT_E1B1C2E2B2C1 # DEF Q_DUAL_PNP_PNP_BRT_E1B1C2E2B2C1 Q 0 20 Y N 2 F N F0 "Q" 150 50 50 H V L CNN F1 "Q_DUAL_PNP_PNP_BRT_E1B1C2E2B2C1" 150 -50 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST SC?70* SC?88* SOT*363* $ENDFPLIST DRAW C -150 0 10 0 1 0 F C 50 -120 10 0 1 0 F C 0 0 111 1 1 10 N C 0 0 111 2 1 10 N S -250 20 -190 -20 0 1 0 N S -170 -90 -130 -30 0 1 0 N P 2 0 1 0 -150 -30 -150 0 N P 2 0 1 0 -30 0 -190 0 N P 2 0 1 20 -25 60 -25 -60 N P 3 0 1 0 -150 -90 -150 -120 50 -120 N P 5 0 1 0 40 -70 20 -90 0 -50 40 -70 40 -70 F P 2 1 1 0 -25 25 50 100 N P 3 1 1 0 -25 -25 50 -100 50 -100 N P 2 2 1 0 -25 25 50 100 N P 3 2 1 0 -25 -25 50 -100 50 -100 N X E1 1 50 -200 100 U 50 50 1 1 P X B1 2 -350 0 100 R 50 50 1 1 I X C1 6 50 200 100 D 50 50 1 1 P X C2 3 50 200 100 D 50 50 2 1 P X E2 4 50 -200 100 U 50 50 2 1 P X B2 5 -350 0 100 R 50 50 2 1 I ENDDRAW ENDDEF # # Q_DUAL_PNP_PNP_C1B1B2C2E2E1 # DEF Q_DUAL_PNP_PNP_C1B1B2C2E2E1 Q 0 0 Y N 2 L N F0 "Q" 200 50 50 H V L CNN F1 "Q_DUAL_PNP_PNP_C1B1B2C2E2E1" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST SC?70* SC?88* SOT?363* SOT?23* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 0 -100 0 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 90 -70 70 -90 50 -50 90 -70 90 -70 F X C1 1 100 200 100 D 50 50 1 1 P X B1 2 -200 0 100 R 50 50 1 1 I X E1 6 100 -200 100 U 50 50 1 1 P X B2 3 -200 0 100 R 50 50 2 1 I X C2 4 100 200 100 D 50 50 2 1 P X E2 5 100 -200 100 U 50 50 2 1 P ENDDRAW ENDDEF # # Q_DUAL_PNP_PNP_C2E2C1E1B1B2 # DEF Q_DUAL_PNP_PNP_C2E2C1E1B1B2 Q 0 0 Y N 2 L N F0 "Q" 200 50 50 H V L CNN F1 "Q_DUAL_PNP_PNP_C2E2C1E1B1B2" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST SC?70* SC?88* SOT?363* SOT?23* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 0 -100 0 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 90 -70 70 -90 50 -50 90 -70 90 -70 F X C1 3 100 200 100 D 50 50 1 1 P X E1 4 100 -200 100 U 50 50 1 1 P X B1 5 -200 0 100 R 50 50 1 1 I X C2 1 100 200 100 D 50 50 2 1 P X E2 2 100 -200 100 U 50 50 2 1 P X B2 6 -200 0 100 R 50 50 2 1 I ENDDRAW ENDDEF # # Q_DUAL_PNP_PNP_E1B1C2E2B2C1 # DEF Q_DUAL_PNP_PNP_E1B1C2E2B2C1 Q 0 0 Y N 2 L N F0 "Q" 200 50 50 H V L CNN F1 "Q_DUAL_PNP_PNP_E1B1C2E2B2C1" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST SC?70* SC?88* SOT?363* SOT?23* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 0 -100 0 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 90 -70 70 -90 50 -50 90 -70 90 -70 F X E1 1 100 -200 100 U 50 50 1 1 P X B1 2 -200 0 100 R 50 50 1 1 I X C1 6 100 200 100 D 50 50 1 1 P X C2 3 100 200 100 D 50 50 2 1 P X E2 4 100 -200 100 U 50 50 2 1 P X B2 5 -200 0 100 R 50 50 2 1 I ENDDRAW ENDDEF # # Q_NIGBT_CEG # DEF Q_NIGBT_CEG Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_NIGBT_CEG" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 2 0 1 10 30 -40 30 -80 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 80 30 40 N P 2 0 1 0 100 -95 30 -60 N P 2 0 1 0 100 -35 30 0 N P 2 0 1 0 100 95 30 60 N P 3 0 1 10 10 75 10 -75 10 -75 N P 4 0 1 0 55 -85 65 -65 100 -95 55 -85 F P 4 0 1 0 85 75 75 95 40 65 85 75 F X C 1 100 200 100 D 50 50 1 1 P X E 2 100 -200 100 U 50 50 1 1 P X G 3 -200 0 210 R 50 50 1 1 I ENDDRAW ENDDEF # # Q_NIGBT_CGE # DEF Q_NIGBT_CGE Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_NIGBT_CGE" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 2 0 1 10 30 -40 30 -80 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 80 30 40 N P 2 0 1 0 100 -95 30 -60 N P 2 0 1 0 100 -35 30 0 N P 2 0 1 0 100 95 30 60 N P 3 0 1 10 10 75 10 -75 10 -75 N P 4 0 1 0 55 -85 65 -65 100 -95 55 -85 F P 4 0 1 0 85 75 75 95 40 65 85 75 F X C 1 100 200 100 D 50 50 1 1 P X G 2 -200 0 210 R 50 50 1 1 I X E 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Q_NIGBT_ECG # DEF Q_NIGBT_ECG Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_NIGBT_ECG" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 2 0 1 10 30 -40 30 -80 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 80 30 40 N P 2 0 1 0 100 -95 30 -60 N P 2 0 1 0 100 -35 30 0 N P 2 0 1 0 100 95 30 60 N P 3 0 1 10 10 75 10 -75 10 -75 N P 4 0 1 0 55 -85 65 -65 100 -95 55 -85 F P 4 0 1 0 85 75 75 95 40 65 85 75 F X E 1 100 -200 100 U 50 50 1 1 P X C 2 100 200 100 D 50 50 1 1 P X G 3 -200 0 210 R 50 50 1 1 I ENDDRAW ENDDEF # # Q_NIGBT_ECGC # DEF Q_NIGBT_ECGC Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_NIGBT_ECGC" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 2 0 1 10 30 -40 30 -80 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 80 30 40 N P 2 0 1 0 100 -95 30 -60 N P 2 0 1 0 100 -35 30 0 N P 2 0 1 0 100 95 30 60 N P 2 0 1 0 100 100 200 100 N P 3 0 1 10 10 75 10 -75 10 -75 N P 4 0 1 0 55 -85 65 -65 100 -95 55 -85 F P 4 0 1 0 85 75 75 95 40 65 85 75 F X E 1 100 -200 100 U 50 50 1 1 P X C 2 100 200 100 D 50 50 1 1 P X G 3 -200 0 210 R 50 50 1 1 I X C 4 200 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Q_NIGBT_EGC # DEF Q_NIGBT_EGC Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_NIGBT_EGC" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 2 0 1 10 30 -40 30 -80 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 80 30 40 N P 2 0 1 0 100 -95 30 -60 N P 2 0 1 0 100 -35 30 0 N P 2 0 1 0 100 95 30 60 N P 3 0 1 10 10 75 10 -75 10 -75 N P 4 0 1 0 55 -85 65 -65 100 -95 55 -85 F P 4 0 1 0 85 75 75 95 40 65 85 75 F X E 1 100 -200 100 U 50 50 1 1 P X G 2 -200 0 210 R 50 50 1 1 I X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Q_NIGBT_GCE # DEF Q_NIGBT_GCE Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_NIGBT_GCE" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 2 0 1 10 30 -40 30 -80 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 80 30 40 N P 2 0 1 0 100 -95 30 -60 N P 2 0 1 0 100 -35 30 0 N P 2 0 1 0 100 95 30 60 N P 3 0 1 10 10 75 10 -75 10 -75 N P 4 0 1 0 55 -85 65 -65 100 -95 55 -85 F P 4 0 1 0 85 75 75 95 40 65 85 75 F X G 1 -200 0 210 R 50 50 1 1 I X C 2 100 200 100 D 50 50 1 1 P X E 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Q_NIGBT_GCEC # DEF Q_NIGBT_GCEC Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_NIGBT_GCEC" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 2 0 1 10 30 -40 30 -80 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 80 30 40 N P 2 0 1 0 100 -95 30 -60 N P 2 0 1 0 100 -35 30 0 N P 2 0 1 0 100 95 30 60 N P 2 0 1 0 100 100 200 100 N P 3 0 1 10 10 75 10 -75 10 -75 N P 4 0 1 0 55 -85 65 -65 100 -95 55 -85 F P 4 0 1 0 85 75 75 95 40 65 85 75 F X G 1 -200 0 210 R 50 50 1 1 I X C 2 100 200 100 D 50 50 1 1 P X E 3 100 -200 100 U 50 50 1 1 P X C 4 200 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Q_NIGBT_GEC # DEF Q_NIGBT_GEC Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_NIGBT_GEC" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 2 0 1 10 30 -40 30 -80 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 80 30 40 N P 2 0 1 0 100 -95 30 -60 N P 2 0 1 0 100 -35 30 0 N P 2 0 1 0 100 95 30 60 N P 3 0 1 10 10 75 10 -75 10 -75 N P 4 0 1 0 55 -85 65 -65 100 -95 55 -85 F P 4 0 1 0 85 75 75 95 40 65 85 75 F X G 1 -200 0 210 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Q_NJFET_DGS # DEF Q_NJFET_DGS Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_NJFET_DGS" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 3 0 1 10 10 75 10 -75 10 -75 N P 3 0 1 0 100 -100 100 -50 10 -50 N P 3 0 1 0 100 100 100 55 10 55 N P 4 0 1 0 0 0 -40 15 -40 -15 0 0 F X D 1 100 200 100 D 50 50 1 1 P X G 2 -200 0 210 R 50 50 1 1 I X S 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Q_NJFET_DSG # DEF Q_NJFET_DSG Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_NJFET_DSG" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 3 0 1 10 10 75 10 -75 10 -75 N P 3 0 1 0 100 -100 100 -50 10 -50 N P 3 0 1 0 100 100 100 55 10 55 N P 4 0 1 0 0 0 -40 15 -40 -15 0 0 F X D 1 100 200 100 D 50 50 1 1 P X S 2 100 -200 100 U 50 50 1 1 P X G 3 -200 0 210 R 50 50 1 1 I ENDDRAW ENDDEF # # Q_NJFET_GDS # DEF Q_NJFET_GDS Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_NJFET_GDS" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 3 0 1 10 10 75 10 -75 10 -75 N P 3 0 1 0 100 -100 100 -50 10 -50 N P 3 0 1 0 100 100 100 55 10 55 N P 4 0 1 0 0 0 -40 15 -40 -15 0 0 F X G 1 -200 0 210 R 50 50 1 1 I X D 2 100 200 100 D 50 50 1 1 P X S 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Q_NJFET_GSD # DEF Q_NJFET_GSD Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_NJFET_GSD" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 3 0 1 10 10 75 10 -75 10 -75 N P 3 0 1 0 100 -100 100 -50 10 -50 N P 3 0 1 0 100 100 100 55 10 55 N P 4 0 1 0 0 0 -40 15 -40 -15 0 0 F X G 1 -200 0 210 R 50 50 1 1 I X S 2 100 -200 100 U 50 50 1 1 P X D 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Q_NJFET_SDG # DEF Q_NJFET_SDG Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_NJFET_SDG" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 3 0 1 10 10 75 10 -75 10 -75 N P 3 0 1 0 100 -100 100 -50 10 -50 N P 3 0 1 0 100 100 100 55 10 55 N P 4 0 1 0 0 0 -40 15 -40 -15 0 0 F X S 1 100 -200 100 U 50 50 1 1 P X D 2 100 200 100 D 50 50 1 1 P X G 3 -200 0 210 R 50 50 1 1 I ENDDRAW ENDDEF # # Q_NJFET_SGD # DEF Q_NJFET_SGD Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_NJFET_SGD" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 3 0 1 10 10 75 10 -75 10 -75 N P 3 0 1 0 100 -100 100 -50 10 -50 N P 3 0 1 0 100 100 100 55 10 55 N P 4 0 1 0 0 0 -40 15 -40 -15 0 0 F X S 1 100 -200 100 U 50 50 1 1 P X G 2 -200 0 210 R 50 50 1 1 I X D 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Q_NMOS_DGS # DEF Q_NMOS_DGS Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_NMOS_DGS" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X D 1 100 200 100 D 50 50 1 1 P X G 2 -200 0 100 R 50 50 1 1 I X S 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Q_NMOS_DSG # DEF Q_NMOS_DSG Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_NMOS_DSG" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X D 1 100 200 100 D 50 50 1 1 P X S 2 100 -200 100 U 50 50 1 1 P X G 3 -200 0 100 R 50 50 1 1 I ENDDRAW ENDDEF # # Q_NMOS_GDS # DEF Q_NMOS_GDS Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_NMOS_GDS" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X G 1 -200 0 100 R 50 50 1 1 I X D 2 100 200 100 D 50 50 1 1 P X S 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Q_NMOS_GDSD # DEF Q_NMOS_GDSD Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_NMOS_GDSD" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 3 0 1 0 100 -100 100 0 30 0 N P 3 0 1 0 200 100 100 100 100 70 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X G 1 -200 0 100 R 50 50 1 1 I X D 2 100 200 100 D 50 50 1 1 P X S 3 100 -200 100 U 50 50 1 1 P X D 4 200 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Q_NMOS_GSD # DEF Q_NMOS_GSD Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_NMOS_GSD" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X G 1 -200 0 100 R 50 50 1 1 I X S 2 100 -200 100 U 50 50 1 1 P X D 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Q_NMOS_SDG # DEF Q_NMOS_SDG Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_NMOS_SDG" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X S 1 100 -200 100 U 50 50 1 1 P X D 2 100 200 100 D 50 50 1 1 P X G 3 -200 0 100 R 50 50 1 1 I ENDDRAW ENDDEF # # Q_NMOS_SDGD # DEF Q_NMOS_SDGD Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_NMOS_SDGD" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 3 0 1 0 100 -100 100 0 30 0 N P 3 0 1 0 200 100 100 100 100 70 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X S 1 100 -200 100 U 50 50 1 1 P X D 2 100 200 100 D 50 50 1 1 P X G 3 -200 0 100 R 50 50 1 1 I X D 4 200 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Q_NMOS_SGD # DEF Q_NMOS_SGD Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_NMOS_SGD" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X S 1 100 -200 100 U 50 50 1 1 P X G 2 -200 0 200 R 50 50 1 1 I X D 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Q_NPN_BCE # DEF Q_NPN_BCE Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_NPN_BCE" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X B 1 -200 0 225 R 50 50 1 1 I X C 2 100 200 100 D 50 50 1 1 P X E 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Q_NPN_BCEC # DEF Q_NPN_BCEC Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_NPN_BCEC" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 2 0 1 0 100 100 200 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X B 1 -200 0 225 R 50 50 1 1 I X C 2 100 200 100 D 50 50 1 1 P X E 3 100 -200 100 U 50 50 1 1 P X C 4 200 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Q_NPN_BEC # DEF Q_NPN_BEC Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_NPN_BEC" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X B 1 -200 0 225 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Q_NPN_BEC_BRT # DEF Q_NPN_BEC_BRT Q 0 20 Y N 1 F N F0 "Q" 150 50 50 H V L CNN F1 "Q_NPN_BEC_BRT" 150 -50 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C -150 0 10 0 1 0 F C 50 -120 10 0 1 0 F C 0 0 111 1 1 10 N S -250 20 -190 -20 0 1 0 N S -170 -90 -130 -30 0 1 0 N P 2 0 1 0 -150 -30 -150 0 N P 2 0 1 0 -30 0 -190 0 N P 2 0 1 20 -25 60 -25 -60 N P 3 0 1 0 -150 -90 -150 -120 50 -120 N P 2 1 1 0 -25 25 50 100 N P 3 1 1 0 -25 -25 50 -100 50 -100 N P 5 1 1 0 0 -70 20 -50 40 -90 0 -70 0 -70 F X B 1 -350 0 100 R 50 50 1 1 I X E 2 50 -200 100 U 50 50 1 1 P X C 3 50 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Q_NPN_CBE # DEF Q_NPN_CBE Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_NPN_CBE" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X C 1 100 200 100 D 50 50 1 1 P X B 2 -200 0 225 R 50 50 1 1 I X E 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Q_NPN_CEB # DEF Q_NPN_CEB Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_NPN_CEB" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X C 1 100 200 100 D 50 50 1 1 P X E 2 100 -200 100 U 50 50 1 1 P X B 3 -200 0 225 R 50 50 1 1 I ENDDRAW ENDDEF # # Q_NPN_Darlington_BCE # DEF Q_NPN_Darlington_BCE Q 0 0 Y N 1 F N F0 "Q" 180 50 50 H V L CNN F1 "Q_NPN_Darlington_BCE" 180 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 0 25 0 100 75 100 100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X B 1 -200 0 225 R 50 50 1 1 I X C 2 100 200 100 D 50 50 1 1 P X E 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Q_NPN_Darlington_BCEC # DEF Q_NPN_Darlington_BCEC Q 0 0 Y N 1 F N F0 "Q" 220 50 50 H V L CNN F1 "Q_NPN_Darlington_BCEC" 220 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 2 0 1 0 200 100 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 0 25 0 100 75 100 100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X B 1 -200 0 225 R 50 50 1 1 I X C 2 100 200 100 D 50 50 1 1 P X E 3 100 -200 100 U 50 50 1 1 P X C2 4 200 200 100 D 50 50 1 1 I ENDDRAW ENDDEF # # Q_NPN_Darlington_BEC # DEF Q_NPN_Darlington_BEC Q 0 0 Y N 1 F N F0 "Q" 180 50 50 H V L CNN F1 "Q_NPN_Darlington_BEC" 180 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 0 25 0 100 75 100 100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X B 1 -200 0 225 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Q_NPN_Darlington_CBE # DEF Q_NPN_Darlington_CBE Q 0 0 Y N 1 F N F0 "Q" 180 50 50 H V L CNN F1 "Q_NPN_Darlington_CBE" 180 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 0 25 0 100 75 100 100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X C 1 100 200 100 D 50 50 1 1 P X B 2 -200 0 225 R 50 50 1 1 I X E 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Q_NPN_Darlington_CEB # DEF Q_NPN_Darlington_CEB Q 0 0 Y N 1 F N F0 "Q" 180 50 50 H V L CNN F1 "Q_NPN_Darlington_CEB" 180 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 0 25 0 100 75 100 100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X C 1 100 200 100 D 50 50 1 1 P X E 2 100 -200 100 U 50 50 1 1 P X B 3 -200 0 225 R 50 50 1 1 I ENDDRAW ENDDEF # # Q_NPN_Darlington_EBC # DEF Q_NPN_Darlington_EBC Q 0 0 Y N 1 F N F0 "Q" 180 50 50 H V L CNN F1 "Q_NPN_Darlington_EBC" 180 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 0 25 0 100 75 100 100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X E 1 100 -200 100 U 50 50 1 1 P X B 2 -200 0 225 R 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Q_NPN_Darlington_ECB # DEF Q_NPN_Darlington_ECB Q 0 0 Y N 1 F N F0 "Q" 180 50 50 H V L CNN F1 "Q_NPN_Darlington_ECB" 180 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 0 25 0 100 75 100 100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X E 1 100 -200 100 U 50 50 1 1 P X C 2 100 200 100 D 50 50 1 1 P X B 3 -200 0 225 R 50 50 1 1 P ENDDRAW ENDDEF # # Q_NPN_Darlington_ECBC # DEF Q_NPN_Darlington_ECBC Q 0 0 Y N 1 F N F0 "Q" 220 50 50 H V L CNN F1 "Q_NPN_Darlington_ECBC" 220 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 2 0 1 0 200 100 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 0 25 0 100 75 100 100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X E 1 100 -200 100 U 50 50 1 1 P X C 2 100 200 100 D 50 50 1 1 P X B 3 -200 0 225 R 50 50 1 1 P X C2 4 200 200 100 D 50 50 1 1 I ENDDRAW ENDDEF # # Q_NPN_EBC # DEF Q_NPN_EBC Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_NPN_EBC" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X E 1 100 -200 100 U 50 50 1 1 P X B 2 -200 0 225 R 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Q_NPN_ECB # DEF Q_NPN_ECB Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_NPN_ECB" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X E 1 100 -200 100 U 50 50 1 1 P X C 2 100 200 100 D 50 50 1 1 P X B 3 -200 0 225 R 50 50 1 1 P ENDDRAW ENDDEF # # Q_NPN_ECBC # DEF Q_NPN_ECBC Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_NPN_ECBC" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 2 0 1 0 100 100 200 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X E 1 100 -200 100 U 50 50 1 1 P X C 2 100 200 100 D 50 50 1 1 P X B 3 -200 0 225 R 50 50 1 1 P X C 4 200 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Q_NPN_ECB_BRT # DEF Q_NPN_ECB_BRT Q 0 20 Y N 1 F N F0 "Q" 150 50 50 H V L CNN F1 "Q_NPN_ECB_BRT" 150 -50 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C -150 0 10 0 1 0 F C 50 -120 10 0 1 0 F C 0 0 111 1 1 10 N S -250 20 -190 -20 0 1 0 N S -170 -90 -130 -30 0 1 0 N P 2 0 1 0 -150 -30 -150 0 N P 2 0 1 0 -30 0 -190 0 N P 2 0 1 20 -25 60 -25 -60 N P 3 0 1 0 -150 -90 -150 -120 50 -120 N P 2 1 1 0 -25 25 50 100 N P 3 1 1 0 -25 -25 50 -100 50 -100 N P 5 1 1 0 0 -70 20 -50 40 -90 0 -70 0 -70 F X E 1 50 -200 100 U 50 50 1 1 P X C 2 50 200 100 D 50 50 1 1 P X B 3 -350 0 100 R 50 50 1 1 I ENDDRAW ENDDEF # # Q_NUJT_BEB # DEF Q_NUJT_BEB Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_NUJT_BEB" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 -40 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 3 0 1 0 -100 0 -40 0 20 60 N P 3 0 1 10 20 75 20 -75 20 -75 N P 3 0 1 0 100 -100 100 -50 20 -50 N P 3 0 1 0 100 100 100 55 20 55 N P 4 0 1 0 -35 5 -20 50 10 20 -35 5 F X B2 1 100 200 100 D 50 50 1 1 P X E 2 -200 0 100 R 50 50 1 1 I X B1 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Q_PJFET_DGS # DEF Q_PJFET_DGS Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_PJFET_DGS" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 3 0 1 10 10 75 10 -75 10 -75 N P 3 0 1 0 100 -100 100 -50 10 -50 N P 3 0 1 0 100 100 100 55 10 55 N P 4 0 1 0 -45 0 -5 15 -5 -15 -45 0 F X D 1 100 200 100 D 50 50 1 1 P X G 2 -200 0 210 R 50 50 1 1 I X S 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Q_PJFET_DSG # DEF Q_PJFET_DSG Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_PJFET_DSG" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 3 0 1 10 10 75 10 -75 10 -75 N P 3 0 1 0 100 -100 100 -50 10 -50 N P 3 0 1 0 100 100 100 55 10 55 N P 4 0 1 0 -45 0 -5 15 -5 -15 -45 0 F X D 1 100 200 100 D 50 50 1 1 P X S 2 100 -200 100 U 50 50 1 1 P X G 3 -200 0 210 R 50 50 1 1 I ENDDRAW ENDDEF # # Q_PJFET_GDS # DEF Q_PJFET_GDS Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_PJFET_GDS" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 3 0 1 10 10 75 10 -75 10 -75 N P 3 0 1 0 100 -100 100 -50 10 -50 N P 3 0 1 0 100 100 100 55 10 55 N P 4 0 1 0 -45 0 -5 15 -5 -15 -45 0 F X G 1 -200 0 210 R 50 50 1 1 I X D 2 100 200 100 D 50 50 1 1 P X S 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Q_PJFET_GSD # DEF Q_PJFET_GSD Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_PJFET_GSD" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 3 0 1 10 10 75 10 -75 10 -75 N P 3 0 1 0 100 -100 100 -50 10 -50 N P 3 0 1 0 100 100 100 55 10 55 N P 4 0 1 0 -45 0 -5 15 -5 -15 -45 0 F X G 1 -200 0 210 R 50 50 1 1 I X S 2 100 -200 100 U 50 50 1 1 P X D 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Q_PJFET_SDG # DEF Q_PJFET_SDG Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_PJFET_SDG" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 3 0 1 10 10 75 10 -75 10 -75 N P 3 0 1 0 100 -100 100 -50 10 -50 N P 3 0 1 0 100 100 100 55 10 55 N P 4 0 1 0 -45 0 -5 15 -5 -15 -45 0 F X S 1 100 -200 100 U 50 50 1 1 P X D 2 100 200 100 D 50 50 1 1 P X G 3 -200 0 210 R 50 50 1 1 I ENDDRAW ENDDEF # # Q_PJFET_SGD # DEF Q_PJFET_SGD Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_PJFET_SGD" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 3 0 1 10 10 75 10 -75 10 -75 N P 3 0 1 0 100 -100 100 -50 10 -50 N P 3 0 1 0 100 100 100 55 10 55 N P 4 0 1 0 -45 0 -5 15 -5 -15 -45 0 F X S 1 100 -200 100 U 50 50 1 1 P X G 2 -200 0 210 R 50 50 1 1 I X D 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Q_PMOS_DGS # DEF Q_PMOS_DGS Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_PMOS_DGS" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 70 130 70 130 -70 30 -70 N P 4 0 1 0 90 0 50 15 50 -15 90 0 F P 4 0 1 0 110 -20 115 -15 145 -15 150 -10 N P 4 0 1 0 130 -15 115 10 145 10 130 -15 N X D 1 100 200 100 D 50 50 1 1 P X G 2 -200 0 100 R 50 50 1 1 I X S 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Q_PMOS_DSG # DEF Q_PMOS_DSG Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_PMOS_DSG" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 70 130 70 130 -70 30 -70 N P 4 0 1 0 90 0 50 15 50 -15 90 0 F P 4 0 1 0 110 -20 115 -15 145 -15 150 -10 N P 4 0 1 0 130 -15 115 10 145 10 130 -15 N X D 1 100 200 100 D 50 50 1 1 P X S 2 100 -200 100 U 50 50 1 1 P X G 3 -200 0 100 R 50 50 1 1 I ENDDRAW ENDDEF # # Q_PMOS_GDS # DEF Q_PMOS_GDS Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_PMOS_GDS" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 70 130 70 130 -70 30 -70 N P 4 0 1 0 90 0 50 15 50 -15 90 0 F P 4 0 1 0 110 -20 115 -15 145 -15 150 -10 N P 4 0 1 0 130 -15 115 10 145 10 130 -15 N X G 1 -200 0 100 R 50 50 1 1 I X D 2 100 200 100 D 50 50 1 1 P X S 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Q_PMOS_GDSD # DEF Q_PMOS_GDSD Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_PMOS_GDSD" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 3 0 1 0 100 -100 100 0 30 0 N P 3 0 1 0 200 100 100 100 100 70 N P 4 0 1 0 30 70 130 70 130 -70 30 -70 N P 4 0 1 0 90 0 50 15 50 -15 90 0 F P 4 0 1 0 110 -20 115 -15 145 -15 150 -10 N P 4 0 1 0 130 -15 115 10 145 10 130 -15 N X G 1 -200 0 100 R 50 50 1 1 I X D 2 100 200 100 D 50 50 1 1 P X S 3 100 -200 100 U 50 50 1 1 P X D 4 200 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Q_PMOS_GSD # DEF Q_PMOS_GSD Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_PMOS_GSD" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 70 130 70 130 -70 30 -70 N P 4 0 1 0 90 0 50 15 50 -15 90 0 F P 4 0 1 0 110 -20 115 -15 145 -15 150 -10 N P 4 0 1 0 130 -15 115 10 145 10 130 -15 N X G 1 -200 0 100 R 50 50 1 1 I X S 2 100 -200 100 U 50 50 1 1 P X D 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Q_PMOS_SDG # DEF Q_PMOS_SDG Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_PMOS_SDG" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 70 130 70 130 -70 30 -70 N P 4 0 1 0 90 0 50 15 50 -15 90 0 F P 4 0 1 0 110 -20 115 -15 145 -15 150 -10 N P 4 0 1 0 130 -15 115 10 145 10 130 -15 N X S 1 100 -200 100 U 50 50 1 1 P X D 2 100 200 100 D 50 50 1 1 P X G 3 -200 0 100 R 50 50 1 1 I ENDDRAW ENDDEF # # Q_PMOS_SDGD # DEF Q_PMOS_SDGD Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_PMOS_SDGD" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 3 0 1 0 100 -100 100 0 30 0 N P 3 0 1 0 200 100 100 100 100 70 N P 4 0 1 0 30 70 130 70 130 -70 30 -70 N P 4 0 1 0 90 0 50 15 50 -15 90 0 F P 4 0 1 0 110 -20 115 -15 145 -15 150 -10 N P 4 0 1 0 130 -15 115 10 145 10 130 -15 N X S 1 100 -200 100 U 50 50 1 1 P X D 2 100 200 100 D 50 50 1 1 P X G 3 -200 0 100 R 50 50 1 1 I X D 4 200 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Q_PMOS_SGD # DEF Q_PMOS_SGD Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_PMOS_SGD" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 70 130 70 130 -70 30 -70 N P 4 0 1 0 90 0 50 15 50 -15 90 0 F P 4 0 1 0 110 -20 115 -15 145 -15 150 -10 N P 4 0 1 0 130 -15 115 10 145 10 130 -15 N X S 1 100 -200 100 U 50 50 1 1 P X G 2 -200 0 100 R 50 50 1 1 I X D 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Q_PNP_BCE # DEF Q_PNP_BCE Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_PNP_BCE" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 90 -70 70 -90 50 -50 90 -70 90 -70 F X B 1 -200 0 225 R 50 50 1 1 I X C 2 100 200 100 D 50 50 1 1 P X E 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Q_PNP_BCEC # DEF Q_PNP_BCEC Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_PNP_BCEC" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 2 0 1 0 200 100 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 90 -70 70 -90 50 -50 90 -70 90 -70 F X B 1 -200 0 225 R 50 50 1 1 I X C 2 100 200 100 D 50 50 1 1 P X E 3 100 -200 100 U 50 50 1 1 P X C 4 200 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Q_PNP_BEC # DEF Q_PNP_BEC Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_PNP_BEC" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 90 -70 70 -90 50 -50 90 -70 90 -70 F X B 1 -200 0 225 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Q_PNP_BEC_BRT # DEF Q_PNP_BEC_BRT Q 0 20 Y N 1 F N F0 "Q" 150 50 50 H V L CNN F1 "Q_PNP_BEC_BRT" 150 -50 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C -150 0 10 0 1 0 F C 50 -120 10 0 1 0 F C 0 0 111 1 1 10 N S -250 20 -190 -20 0 1 0 N S -170 -90 -130 -30 0 1 0 N P 2 0 1 0 -150 -30 -150 0 N P 2 0 1 0 -30 0 -190 0 N P 2 0 1 20 -25 60 -25 -60 N P 3 0 1 0 -150 -90 -150 -120 50 -120 N P 5 0 1 0 40 -70 20 -90 0 -50 40 -70 40 -70 F P 2 1 1 0 -25 25 50 100 N P 3 1 1 0 -25 -25 50 -100 50 -100 N X B 1 -350 0 100 R 50 50 1 1 I X E 2 50 -200 100 U 50 50 1 1 P X C 3 50 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Q_PNP_CBE # DEF Q_PNP_CBE Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_PNP_CBE" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 90 -70 70 -90 50 -50 90 -70 90 -70 F X C 1 100 200 100 D 50 50 1 1 P X B 2 -200 0 225 R 50 50 1 1 I X E 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Q_PNP_CEB # DEF Q_PNP_CEB Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_PNP_CEB" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 90 -70 70 -90 50 -50 90 -70 90 -70 F X C 1 100 200 100 D 50 50 1 1 P X E 2 100 -200 100 U 50 50 1 1 P X B 3 -200 0 225 R 50 50 1 1 I ENDDRAW ENDDEF # # Q_PNP_Darlington_BCE # DEF Q_PNP_Darlington_BCE Q 0 0 Y N 1 F N F0 "Q" 180 50 50 H V L CNN F1 "Q_PNP_Darlington_BCE" 180 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 0 25 0 100 75 100 100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 90 -70 70 -90 50 -50 90 -70 90 -70 F X B 1 -200 0 225 R 50 50 1 1 I X C 2 100 200 100 D 50 50 1 1 P X E 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Q_PNP_Darlington_BCEC # DEF Q_PNP_Darlington_BCEC Q 0 0 Y N 1 F N F0 "Q" 220 50 50 H V L CNN F1 "Q_PNP_Darlington_BCEC" 220 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 2 0 1 0 200 100 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 0 25 0 100 75 100 100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 90 -70 70 -90 50 -50 90 -70 90 -70 F X B 1 -200 0 225 R 50 50 1 1 I X C 2 100 200 100 D 50 50 1 1 P X E 3 100 -200 100 U 50 50 1 1 P X C 4 200 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Q_PNP_Darlington_BEC # DEF Q_PNP_Darlington_BEC Q 0 0 Y N 1 F N F0 "Q" 180 50 50 H V L CNN F1 "Q_PNP_Darlington_BEC" 180 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 0 25 0 100 75 100 100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 90 -70 70 -90 50 -50 90 -70 90 -70 F X B 1 -200 0 225 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Q_PNP_Darlington_CBE # DEF Q_PNP_Darlington_CBE Q 0 0 Y N 1 F N F0 "Q" 180 50 50 H V L CNN F1 "Q_PNP_Darlington_CBE" 180 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 0 25 0 100 75 100 100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 90 -70 70 -90 50 -50 90 -70 90 -70 F X C 1 100 200 100 D 50 50 1 1 P X B 2 -200 0 225 R 50 50 1 1 I X E 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Q_PNP_Darlington_CEB # DEF Q_PNP_Darlington_CEB Q 0 0 Y N 1 F N F0 "Q" 180 50 50 H V L CNN F1 "Q_PNP_Darlington_CEB" 180 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 0 25 0 100 75 100 100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 90 -70 70 -90 50 -50 90 -70 90 -70 F X C 1 100 200 100 D 50 50 1 1 P X E 2 100 -200 100 U 50 50 1 1 P X B 3 -200 0 225 R 50 50 1 1 I ENDDRAW ENDDEF # # Q_PNP_Darlington_EBC # DEF Q_PNP_Darlington_EBC Q 0 0 Y N 1 F N F0 "Q" 180 50 50 H V L CNN F1 "Q_PNP_Darlington_EBC" 180 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 0 25 0 100 75 100 100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 90 -70 70 -90 50 -50 90 -70 90 -70 F X E 1 100 -200 100 U 50 50 1 1 P X B 2 -200 0 225 R 50 50 1 1 I X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Q_PNP_Darlington_ECB # DEF Q_PNP_Darlington_ECB Q 0 0 Y N 1 F N F0 "Q" 180 50 50 H V L CNN F1 "Q_PNP_Darlington_ECB" 180 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 0 25 0 100 75 100 100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 90 -70 70 -90 50 -50 90 -70 90 -70 F X E 1 100 -200 100 U 50 50 1 1 P X C 2 100 200 100 D 50 50 1 1 P X B 3 -200 0 225 R 50 50 1 1 I ENDDRAW ENDDEF # # Q_PNP_Darlington_ECBC # DEF Q_PNP_Darlington_ECBC Q 0 0 Y N 1 F N F0 "Q" 220 50 50 H V L CNN F1 "Q_PNP_Darlington_ECBC" 220 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 2 0 1 0 200 100 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 0 25 0 100 75 100 100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 90 -70 70 -90 50 -50 90 -70 90 -70 F X E 1 100 -200 100 U 50 50 1 1 P X C 2 100 200 100 D 50 50 1 1 P X B 3 -200 0 225 R 50 50 1 1 I X C 4 200 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Q_PNP_EBC # DEF Q_PNP_EBC Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_PNP_EBC" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 90 -70 70 -90 50 -50 90 -70 90 -70 F X E 1 100 -200 100 U 50 50 1 1 P X B 2 -200 0 225 R 50 50 1 1 I X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Q_PNP_ECB # DEF Q_PNP_ECB Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_PNP_ECB" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 90 -70 70 -90 50 -50 90 -70 90 -70 F X E 1 100 -200 100 U 50 50 1 1 P X C 2 100 200 100 D 50 50 1 1 P X B 3 -200 0 225 R 50 50 1 1 I ENDDRAW ENDDEF # # Q_PNP_ECBC # DEF Q_PNP_ECBC Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_PNP_ECBC" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 2 0 1 0 200 100 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 90 -70 70 -90 50 -50 90 -70 90 -70 F X E 1 100 -200 100 U 50 50 1 1 P X C 2 100 200 100 D 50 50 1 1 P X B 3 -200 0 225 R 50 50 1 1 I X C 4 200 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Q_PNP_ECB_BRT # DEF Q_PNP_ECB_BRT Q 0 20 Y N 1 F N F0 "Q" 150 50 50 H V L CNN F1 "Q_PNP_ECB_BRT" 150 -50 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C -150 0 10 0 1 0 F C 50 -120 10 0 1 0 F C 0 0 111 1 1 10 N S -250 20 -190 -20 0 1 0 N S -170 -90 -130 -30 0 1 0 N P 2 0 1 0 -150 -30 -150 0 N P 2 0 1 0 -30 0 -190 0 N P 2 0 1 20 -25 60 -25 -60 N P 3 0 1 0 -150 -90 -150 -120 50 -120 N P 5 0 1 0 40 -70 20 -90 0 -50 40 -70 40 -70 F P 2 1 1 0 -25 25 50 100 N P 3 1 1 0 -25 -25 50 -100 50 -100 N X E 1 50 -200 100 U 50 50 1 1 P X C 2 50 200 100 D 50 50 1 1 P X B 3 -350 0 100 R 50 50 1 1 I ENDDRAW ENDDEF # # Q_PUJT_BEB # DEF Q_PUJT_BEB Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_PUJT_BEB" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 3 0 1 0 -100 0 -40 0 20 -60 N P 3 0 1 10 20 75 20 -75 20 -75 N P 3 0 1 0 100 -100 100 -50 20 -50 N P 3 0 1 0 100 100 100 55 20 55 N P 4 0 1 0 0 -40 -15 5 -45 -25 0 -40 F X B2 1 100 200 100 D 50 50 1 1 P X E 2 -200 0 100 R 50 50 1 1 I X B1 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Q_Photo_NPN # DEF Q_Photo_NPN Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_Photo_NPN" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS Q_Photo_NPN_CE DRAW C 50 0 111 0 1 10 N P 2 0 1 0 -75 50 -100 50 N P 2 0 1 0 -50 100 -75 100 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 -150 125 -75 50 -75 75 N P 3 0 1 0 -125 175 -50 100 -50 125 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X C 1 100 200 100 D 50 50 1 1 P X E 2 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Q_Photo_NPN_CBE # DEF Q_Photo_NPN_CBE Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_Photo_NPN_CBE" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 2 0 1 0 -75 50 -100 50 N P 2 0 1 0 -50 100 -75 100 N P 2 0 1 0 0 0 25 0 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 -150 125 -75 50 -75 75 N P 3 0 1 0 -125 175 -50 100 -50 125 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X C 1 100 200 100 D 50 50 1 1 P X B 2 -200 0 200 R 50 50 1 1 I X E 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Q_Photo_NPN_EBC # DEF Q_Photo_NPN_EBC Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_Photo_NPN_EBC" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 2 0 1 0 -75 50 -100 50 N P 2 0 1 0 -50 100 -75 100 N P 2 0 1 0 0 0 25 0 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 -150 125 -75 50 -75 75 N P 3 0 1 0 -125 175 -50 100 -50 125 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X E 1 100 -200 100 U 50 50 1 1 P X B 2 -200 0 200 R 50 50 1 1 I X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Q_Photo_NPN_EC # DEF Q_Photo_NPN_EC Q 0 0 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Q_Photo_NPN_EC" 200 -50 50 H V L CNN F2 "" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 50 0 111 0 1 10 N P 2 0 1 0 -75 50 -100 50 N P 2 0 1 0 -50 100 -75 100 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 -150 125 -75 50 -75 75 N P 3 0 1 0 -125 175 -50 100 -50 125 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X E 1 100 -200 100 U 50 50 1 1 P X C 2 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Q_SCR_AGK # DEF Q_SCR_AGK D 0 0 Y N 1 F N F0 "D" 75 25 50 H V L CNN F1 "Q_SCR_AGK" 75 -50 50 H V L CNN F2 "" 0 0 50 V I C CNN F3 "" 0 0 50 V I C CNN DRAW P 2 0 1 0 -50 -100 -25 -50 N P 2 0 1 8 -50 -50 50 -50 N P 2 0 1 0 0 -100 0 100 N P 4 0 1 8 -50 50 50 50 0 -50 -50 50 N X A 1 0 150 100 D 50 50 1 1 P X G 2 -150 -100 100 R 50 50 1 1 I X K 3 0 -150 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Q_SCR_AKG # DEF Q_SCR_AKG D 0 0 Y N 1 F N F0 "D" 75 25 50 H V L CNN F1 "Q_SCR_AKG" 75 -50 50 H V L CNN F2 "" 0 0 50 V I C CNN F3 "" 0 0 50 V I C CNN DRAW P 2 0 1 0 -50 -100 -25 -50 N P 2 0 1 8 -50 -50 50 -50 N P 2 0 1 0 0 -100 0 100 N P 4 0 1 8 -50 50 50 50 0 -50 -50 50 N X A 1 0 150 100 D 50 50 1 1 P X K 2 0 -150 100 U 50 50 1 1 P X G 3 -150 -100 100 R 50 50 1 1 I ENDDRAW ENDDEF # # Q_SCR_GAK # DEF Q_SCR_GAK D 0 0 Y N 1 F N F0 "D" 75 25 50 H V L CNN F1 "Q_SCR_GAK" 75 -50 50 H V L CNN F2 "" 0 0 50 V I C CNN F3 "" 0 0 50 V I C CNN DRAW P 2 0 1 0 -50 -100 -25 -50 N P 2 0 1 8 -50 -50 50 -50 N P 2 0 1 0 0 -100 0 100 N P 4 0 1 8 -50 50 50 50 0 -50 -50 50 N X G 1 -150 -100 100 R 50 50 1 1 I X A 2 0 150 100 D 50 50 1 1 P X K 3 0 -150 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Q_SCR_GKA # DEF Q_SCR_GKA D 0 0 Y N 1 F N F0 "D" 75 25 50 H V L CNN F1 "Q_SCR_GKA" 75 -50 50 H V L CNN F2 "" 0 0 50 V I C CNN F3 "" 0 0 50 V I C CNN DRAW P 2 0 1 0 -50 -100 -25 -50 N P 2 0 1 8 -50 -50 50 -50 N P 2 0 1 0 0 -100 0 100 N P 4 0 1 8 -50 50 50 50 0 -50 -50 50 N X G 1 -150 -100 100 R 50 50 1 1 I X K 2 0 -150 100 U 50 50 1 1 P X A 3 0 150 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Q_SCR_KAG # DEF Q_SCR_KAG D 0 0 Y N 1 F N F0 "D" 75 25 50 H V L CNN F1 "Q_SCR_KAG" 75 -50 50 H V L CNN F2 "" 0 0 50 V I C CNN F3 "" 0 0 50 V I C CNN DRAW P 2 0 1 0 -50 -100 -25 -50 N P 2 0 1 8 -50 -50 50 -50 N P 2 0 1 0 0 -100 0 100 N P 4 0 1 8 -50 50 50 50 0 -50 -50 50 N X K 1 0 -150 100 U 50 50 1 1 P X A 2 0 150 100 D 50 50 1 1 P X G 3 -150 -100 100 R 50 50 1 1 I ENDDRAW ENDDEF # # Q_SCR_KGA # DEF Q_SCR_KGA D 0 0 Y N 1 F N F0 "D" 75 25 50 H V L CNN F1 "Q_SCR_KGA" 75 -50 50 H V L CNN F2 "" 0 0 50 V I C CNN F3 "" 0 0 50 V I C CNN DRAW P 2 0 1 0 -50 -100 -25 -50 N P 2 0 1 8 -50 -50 50 -50 N P 2 0 1 0 0 -100 0 100 N P 4 0 1 8 -50 50 50 50 0 -50 -50 50 N X K 1 0 -150 100 U 50 50 1 1 P X G 2 -150 -100 100 R 50 50 1 1 I X A 3 0 150 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Q_TRIAC_A1A2G # DEF Q_TRIAC_A1A2G D 0 0 Y Y 1 F N F0 "D" 125 25 50 H V L CNN F1 "Q_TRIAC_A1A2G" 125 -50 50 H V L CNN F2 "" 75 25 50 V I C CNN F3 "" 0 0 50 V I C CNN DRAW P 2 0 1 8 -100 -50 100 -50 N P 2 0 1 8 -100 50 100 50 N P 2 0 1 0 -50 -100 -25 -50 N P 3 0 1 8 -100 50 -50 -50 0 50 N P 3 0 1 8 0 -50 50 50 100 -50 N X A1 1 0 -150 100 U 50 25 1 1 P X A2 2 0 150 100 D 50 25 1 1 P X G 3 -150 -100 100 R 50 25 1 1 I ENDDRAW ENDDEF # # Q_TRIAC_A1GA2 # DEF Q_TRIAC_A1GA2 D 0 0 Y Y 1 F N F0 "D" 125 25 50 H V L CNN F1 "Q_TRIAC_A1GA2" 125 -50 50 H V L CNN F2 "" 75 25 50 V I C CNN F3 "" 0 0 50 V I C CNN DRAW P 2 0 1 8 -100 -50 100 -50 N P 2 0 1 8 -100 50 100 50 N P 2 0 1 0 -50 -100 -25 -50 N P 3 0 1 8 -100 50 -50 -50 0 50 N P 3 0 1 8 0 -50 50 50 100 -50 N X A1 1 0 -150 100 U 50 25 1 1 P X G 2 -150 -100 100 R 50 25 1 1 I X A2 3 0 150 100 D 50 25 1 1 P ENDDRAW ENDDEF # # Q_TRIAC_A2A1G # DEF Q_TRIAC_A2A1G D 0 0 Y Y 1 F N F0 "D" 125 25 50 H V L CNN F1 "Q_TRIAC_A2A1G" 125 -50 50 H V L CNN F2 "" 75 25 50 V I C CNN F3 "" 0 0 50 V I C CNN DRAW P 2 0 1 8 -100 -50 100 -50 N P 2 0 1 8 -100 50 100 50 N P 2 0 1 0 -50 -100 -25 -50 N P 3 0 1 8 -100 50 -50 -50 0 50 N P 3 0 1 8 0 -50 50 50 100 -50 N X A2 1 0 150 100 D 50 25 1 1 P X A1 2 0 -150 100 U 50 25 1 1 P X G 3 -150 -100 100 R 50 25 1 1 I ENDDRAW ENDDEF # # Q_TRIAC_A2GA1 # DEF Q_TRIAC_A2GA1 D 0 0 Y Y 1 F N F0 "D" 125 25 50 H V L CNN F1 "Q_TRIAC_A2GA1" 125 -50 50 H V L CNN F2 "" 75 25 50 V I C CNN F3 "" 0 0 50 V I C CNN DRAW P 2 0 1 8 -100 -50 100 -50 N P 2 0 1 8 -100 50 100 50 N P 2 0 1 0 -50 -100 -25 -50 N P 3 0 1 8 -100 50 -50 -50 0 50 N P 3 0 1 8 0 -50 50 50 100 -50 N X A2 1 0 150 100 D 50 25 1 1 P X G 2 -150 -100 100 R 50 25 1 1 I X A1 3 0 -150 100 U 50 25 1 1 P ENDDRAW ENDDEF # # Q_TRIAC_GA1A2 # DEF Q_TRIAC_GA1A2 D 0 0 Y Y 1 F N F0 "D" 125 25 50 H V L CNN F1 "Q_TRIAC_GA1A2" 125 -50 50 H V L CNN F2 "" 75 25 50 V I C CNN F3 "" 0 0 50 V I C CNN DRAW P 2 0 1 8 -100 -50 100 -50 N P 2 0 1 8 -100 50 100 50 N P 2 0 1 0 -50 -100 -25 -50 N P 3 0 1 8 -100 50 -50 -50 0 50 N P 3 0 1 8 0 -50 50 50 100 -50 N X G 1 -150 -100 100 R 50 25 1 1 I X A1 2 0 -150 100 U 50 25 1 1 P X A2 3 0 150 100 D 50 25 1 1 P ENDDRAW ENDDEF # # Q_TRIAC_GA2A1 # DEF Q_TRIAC_GA2A1 D 0 0 Y Y 1 F N F0 "D" 125 25 50 H V L CNN F1 "Q_TRIAC_GA2A1" 125 -50 50 H V L CNN F2 "" 75 25 50 V I C CNN F3 "" 0 0 50 V I C CNN DRAW P 2 0 1 8 -100 -50 100 -50 N P 2 0 1 8 -100 50 100 50 N P 2 0 1 0 -50 -100 -25 -50 N P 3 0 1 8 -100 50 -50 -50 0 50 N P 3 0 1 8 0 -50 50 50 100 -50 N X G 1 -150 -100 100 R 50 25 1 1 I X A2 2 0 150 100 D 50 25 1 1 P X A1 3 0 -150 100 U 50 25 1 1 P ENDDRAW ENDDEF # # R # DEF R R 0 0 N Y 1 F N F0 "R" 80 0 50 V V C CNN F1 "R" 0 0 50 V V C CNN F2 "" -70 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R_* $ENDFPLIST DRAW S -40 -100 40 100 0 1 10 N X ~ 1 0 150 50 D 50 50 1 1 P X ~ 2 0 -150 50 U 50 50 1 1 P ENDDRAW ENDDEF # # RF_Shield_One_Piece # DEF RF_Shield_One_Piece J 0 40 Y Y 1 F N F0 "J" 0 200 50 H V C CNN F1 "RF_Shield_One_Piece" 0 100 50 H V C CNN F2 "" 0 -100 50 H I C CNN F3 "" 0 -100 50 H I C CNN DRAW P 2 0 1 10 -600 -200 -600 -100 N P 2 0 1 10 -600 -50 -600 50 N P 2 0 1 10 -600 100 -600 200 N P 2 0 1 10 -500 300 -400 300 N P 2 0 1 10 -400 -300 -500 -300 N P 2 0 1 10 -250 -300 -350 -300 N P 2 0 1 10 -250 300 -350 300 N P 2 0 1 10 -100 -300 -200 -300 N P 2 0 1 10 -100 300 -200 300 N P 2 0 1 10 -50 -300 50 -300 N P 2 0 1 10 50 300 -50 300 N P 2 0 1 10 100 -300 200 -300 N P 2 0 1 10 200 300 100 300 N P 2 0 1 10 250 -300 350 -300 N P 2 0 1 10 350 300 250 300 N P 2 0 1 10 400 -300 500 -300 N P 2 0 1 10 500 300 400 300 N P 2 0 1 10 600 -200 600 -100 N P 2 0 1 10 600 -50 600 50 N P 2 0 1 10 600 100 600 200 N P 3 0 1 10 -600 250 -600 300 -550 300 N P 3 0 1 10 -550 -300 -600 -300 -600 -250 N P 3 0 1 10 550 -300 600 -300 600 -250 N P 3 0 1 10 600 250 600 300 550 300 N X Shield 1 0 -400 100 U 50 50 1 1 P ENDDRAW ENDDEF # # RF_Shield_Two_Pieces # DEF RF_Shield_Two_Pieces J 0 40 Y Y 1 F N F0 "J" 0 200 50 H V C CNN F1 "RF_Shield_Two_Pieces" 0 100 50 H V C CNN F2 "" 0 -100 50 H I C CNN F3 "" 0 -100 50 H I C CNN DRAW P 2 0 1 10 -600 -200 -600 -100 N P 2 0 1 10 -600 -50 -600 50 N P 2 0 1 10 -600 100 -600 200 N P 2 0 1 10 -500 300 -400 300 N P 2 0 1 10 -400 -300 -500 -300 N P 2 0 1 10 -250 -300 -350 -300 N P 2 0 1 10 -250 300 -350 300 N P 2 0 1 10 -100 -300 -200 -300 N P 2 0 1 10 -100 300 -200 300 N P 2 0 1 10 -50 -300 50 -300 N P 2 0 1 10 50 300 -50 300 N P 2 0 1 10 100 -300 200 -300 N P 2 0 1 10 200 300 100 300 N P 2 0 1 10 250 -300 350 -300 N P 2 0 1 10 350 300 250 300 N P 2 0 1 10 400 -300 500 -300 N P 2 0 1 10 500 300 400 300 N P 2 0 1 10 600 -200 600 -100 N P 2 0 1 10 600 -50 600 50 N P 2 0 1 10 600 100 600 200 N P 3 0 1 10 -600 250 -600 300 -550 300 N P 3 0 1 10 -550 -300 -600 -300 -600 -250 N P 3 0 1 10 550 -300 600 -300 600 -250 N P 3 0 1 10 600 250 600 300 550 300 N P 4 0 1 10 -700 200 -700 450 700 450 700 200 N X Shield 1 0 -400 100 U 50 50 1 1 P ENDDRAW ENDDEF # # RTRIM # DEF RTRIM R 0 0 N Y 1 F N F0 "R" 100 -100 50 V V L CNN F1 "RTRIM" -100 -25 50 V V L CNN F2 "" -70 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R_* $ENDFPLIST DRAW S -40 -100 40 100 0 1 10 N P 4 0 1 0 -75 -75 75 75 100 50 50 100 N X ~ 1 0 150 50 D 50 50 1 1 P X ~ 2 0 -150 50 U 50 50 1 1 P ENDDRAW ENDDEF # # R_Network03 # DEF R_Network03 RN 0 0 Y N 1 F N F0 "RN" -200 0 50 V V C CNN F1 "R_Network03" 200 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP4" 275 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW C -100 90 10 0 1 0 F C 0 90 10 0 1 0 F S -130 60 -70 -100 0 1 10 N S -150 -125 150 125 0 1 10 f S -30 60 30 -100 0 1 10 N S 70 60 130 -100 0 1 10 N P 2 0 1 0 -100 -100 -100 -150 N P 2 0 1 0 0 -100 0 -150 N P 2 0 1 0 100 -100 100 -150 N P 4 0 1 0 -100 60 -100 90 0 90 0 60 N P 4 0 1 0 0 60 0 90 100 90 100 60 N X R1 2 -100 -200 50 U 50 50 1 1 P X R2 3 0 -200 50 U 50 50 1 1 P X R3 4 100 -200 50 U 50 50 1 1 P X common 1 -100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # R_Network03_Split # DEF R_Network03_Split RN 0 0 Y N 3 F N F0 "RN" 80 0 50 V V C CNN F1 "R_Network03_Split" 0 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP4" -80 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW T 900 35 125 50 0 2 1 "1" Normal 0 C C T 900 35 125 50 0 3 1 "1" Normal 0 C C S 40 100 -40 -100 0 1 10 N P 2 2 1 0 0 100 0 150 N P 2 3 1 0 0 100 0 150 N X R1.1 1 0 150 50 D 50 50 1 1 P X R1.2 2 0 -150 50 U 50 50 1 1 P X R2.2 3 0 -150 50 U 50 50 2 1 P X R3.2 4 0 -150 50 U 50 50 3 1 P ENDDRAW ENDDEF # # R_Network03_US # DEF R_Network03_US RN 0 0 Y N 1 F N F0 "RN" -200 0 50 V V C CNN F1 "R_Network03_US" 200 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP4" 275 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW C -100 90 10 0 1 0 F C 0 90 10 0 1 0 F S -150 -125 150 125 0 1 10 f P 10 0 1 0 -100 90 -100 60 -70 46 -130 20 -70 -6 -130 -33 -70 -60 -130 -86 -100 -100 -100 -150 N P 10 0 1 0 0 90 0 60 30 46 -30 20 30 -6 -30 -33 30 -60 -30 -86 0 -100 0 -150 N P 10 0 1 0 100 90 100 60 130 46 70 20 130 -6 70 -33 130 -60 70 -86 100 -100 100 -150 N P 2 0 1 0 -100 90 100 90 N X R1 2 -100 -200 50 U 50 50 1 1 P X R2 3 0 -200 50 U 50 50 1 1 P X R3 4 100 -200 50 U 50 50 1 1 P X common 1 -100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # R_Network04 # DEF R_Network04 RN 0 0 Y N 1 F N F0 "RN" -300 0 50 V V C CNN F1 "R_Network04" 200 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP5" 275 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW C -100 90 10 0 1 0 F C -200 90 10 0 1 0 F C 0 90 10 0 1 0 F S -130 60 -70 -100 0 1 10 N S -230 60 -170 -100 0 1 10 N S -250 -125 150 125 0 1 10 f S -30 60 30 -100 0 1 10 N S 70 60 130 -100 0 1 10 N P 2 0 1 0 -100 -100 -100 -150 N P 2 0 1 0 -200 -100 -200 -150 N P 2 0 1 0 0 -100 0 -150 N P 2 0 1 0 100 -100 100 -150 N P 4 0 1 0 -100 60 -100 90 0 90 0 60 N P 4 0 1 0 -200 60 -200 90 -100 90 -100 60 N P 4 0 1 0 0 60 0 90 100 90 100 60 N X R1 2 -200 -200 50 U 50 50 1 1 P X R2 3 -100 -200 50 U 50 50 1 1 P X R3 4 0 -200 50 U 50 50 1 1 P X R4 5 100 -200 50 U 50 50 1 1 P X common 1 -200 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # R_Network04_Split # DEF R_Network04_Split RN 0 0 Y N 4 F N F0 "RN" 80 0 50 V V C CNN F1 "R_Network04_Split" 0 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP5" -80 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW T 900 35 125 50 0 2 1 "1" Normal 0 C C T 900 35 125 50 0 3 1 "1" Normal 0 C C T 900 35 125 50 0 4 1 "1" Normal 0 C C S 40 100 -40 -100 0 1 10 N P 2 2 1 0 0 100 0 150 N P 2 3 1 0 0 100 0 150 N P 2 4 1 0 0 100 0 150 N X R1.1 1 0 150 50 D 50 50 1 1 P X R1.2 2 0 -150 50 U 50 50 1 1 P X R2.2 3 0 -150 50 U 50 50 2 1 P X R3.2 4 0 -150 50 U 50 50 3 1 P X R4.2 5 0 -150 50 U 50 50 4 1 P ENDDRAW ENDDEF # # R_Network04_US # DEF R_Network04_US RN 0 0 Y N 1 F N F0 "RN" -300 0 50 V V C CNN F1 "R_Network04_US" 200 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP5" 275 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW C -100 90 10 0 1 0 F C -200 90 10 0 1 0 F C 0 90 10 0 1 0 F S -250 -125 150 125 0 1 10 f P 10 0 1 0 -100 90 -100 60 -70 46 -130 20 -70 -6 -130 -33 -70 -60 -130 -86 -100 -100 -100 -150 N P 10 0 1 0 -200 90 -200 60 -170 46 -230 20 -170 -6 -230 -33 -170 -60 -230 -86 -200 -100 -200 -150 N P 10 0 1 0 0 90 0 60 30 46 -30 20 30 -6 -30 -33 30 -60 -30 -86 0 -100 0 -150 N P 10 0 1 0 100 90 100 60 130 46 70 20 130 -6 70 -33 130 -60 70 -86 100 -100 100 -150 N P 2 0 1 0 -200 90 100 90 N X R1 2 -200 -200 50 U 50 50 1 1 P X R2 3 -100 -200 50 U 50 50 1 1 P X R3 4 0 -200 50 U 50 50 1 1 P X R4 5 100 -200 50 U 50 50 1 1 P X common 1 -200 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # R_Network05 # DEF R_Network05 RN 0 0 Y N 1 F N F0 "RN" -300 0 50 V V C CNN F1 "R_Network05" 300 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP6" 375 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW C -100 90 10 0 1 0 F C -200 90 10 0 1 0 F C 0 90 10 0 1 0 F C 100 90 10 0 1 0 F S -130 60 -70 -100 0 1 10 N S -230 60 -170 -100 0 1 10 N S -250 -125 250 125 0 1 10 f S -30 60 30 -100 0 1 10 N S 170 60 230 -100 0 1 10 N S 70 60 130 -100 0 1 10 N P 2 0 1 0 -100 -100 -100 -150 N P 2 0 1 0 -200 -100 -200 -150 N P 2 0 1 0 0 -100 0 -150 N P 2 0 1 0 100 -100 100 -150 N P 2 0 1 0 200 -100 200 -150 N P 4 0 1 0 -100 60 -100 90 0 90 0 60 N P 4 0 1 0 -200 60 -200 90 -100 90 -100 60 N P 4 0 1 0 0 60 0 90 100 90 100 60 N P 4 0 1 0 100 60 100 90 200 90 200 60 N X R1 2 -200 -200 50 U 50 50 1 1 P X R2 3 -100 -200 50 U 50 50 1 1 P X R3 4 0 -200 50 U 50 50 1 1 P X R4 5 100 -200 50 U 50 50 1 1 P X R5 6 200 -200 50 U 50 50 1 1 P X common 1 -200 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # R_Network05_Split # DEF R_Network05_Split RN 0 0 Y N 5 F N F0 "RN" 80 0 50 V V C CNN F1 "R_Network05_Split" 0 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP6" -80 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW T 900 35 125 50 0 2 1 "1" Normal 0 C C T 900 35 125 50 0 3 1 "1" Normal 0 C C T 900 35 125 50 0 4 1 "1" Normal 0 C C T 900 35 125 50 0 5 1 "1" Normal 0 C C S 40 100 -40 -100 0 1 10 N P 2 2 1 0 0 100 0 150 N P 2 3 1 0 0 100 0 150 N P 2 4 1 0 0 100 0 150 N P 2 5 1 0 0 100 0 150 N X R1.1 1 0 150 50 D 50 50 1 1 P X R1.2 2 0 -150 50 U 50 50 1 1 P X R2.2 3 0 -150 50 U 50 50 2 1 P X R3.2 4 0 -150 50 U 50 50 3 1 P X R4.2 5 0 -150 50 U 50 50 4 1 P X R5.2 6 0 -150 50 U 50 50 5 1 P ENDDRAW ENDDEF # # R_Network05_US # DEF R_Network05_US RN 0 0 Y N 1 F N F0 "RN" -300 0 50 V V C CNN F1 "R_Network05_US" 300 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP6" 375 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW C -100 90 10 0 1 0 F C -200 90 10 0 1 0 F C 0 90 10 0 1 0 F C 100 90 10 0 1 0 F S -250 -125 250 125 0 1 10 f P 10 0 1 0 -100 90 -100 60 -70 46 -130 20 -70 -6 -130 -33 -70 -60 -130 -86 -100 -100 -100 -150 N P 10 0 1 0 -200 90 -200 60 -170 46 -230 20 -170 -6 -230 -33 -170 -60 -230 -86 -200 -100 -200 -150 N P 10 0 1 0 0 90 0 60 30 46 -30 20 30 -6 -30 -33 30 -60 -30 -86 0 -100 0 -150 N P 10 0 1 0 100 90 100 60 130 46 70 20 130 -6 70 -33 130 -60 70 -86 100 -100 100 -150 N P 10 0 1 0 200 90 200 60 230 46 170 20 230 -6 170 -33 230 -60 170 -86 200 -100 200 -150 N P 2 0 1 0 -200 90 200 90 N X R1 2 -200 -200 50 U 50 50 1 1 P X R2 3 -100 -200 50 U 50 50 1 1 P X R3 4 0 -200 50 U 50 50 1 1 P X R4 5 100 -200 50 U 50 50 1 1 P X R5 6 200 -200 50 U 50 50 1 1 P X common 1 -200 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # R_Network06 # DEF R_Network06 RN 0 0 Y N 1 F N F0 "RN" -400 0 50 V V C CNN F1 "R_Network06" 300 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP7" 375 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW C -100 90 10 0 1 0 F C -200 90 10 0 1 0 F C -300 90 10 0 1 0 F C 0 90 10 0 1 0 F C 100 90 10 0 1 0 F S -130 60 -70 -100 0 1 10 N S -230 60 -170 -100 0 1 10 N S -30 60 30 -100 0 1 10 N S -330 60 -270 -100 0 1 10 N S -350 -125 250 125 0 1 10 f S 170 60 230 -100 0 1 10 N S 70 60 130 -100 0 1 10 N P 2 0 1 0 -100 -100 -100 -150 N P 2 0 1 0 -200 -100 -200 -150 N P 2 0 1 0 -300 -100 -300 -150 N P 2 0 1 0 0 -100 0 -150 N P 2 0 1 0 100 -100 100 -150 N P 2 0 1 0 200 -100 200 -150 N P 4 0 1 0 -100 60 -100 90 0 90 0 60 N P 4 0 1 0 -200 60 -200 90 -100 90 -100 60 N P 4 0 1 0 -300 60 -300 90 -200 90 -200 60 N P 4 0 1 0 0 60 0 90 100 90 100 60 N P 4 0 1 0 100 60 100 90 200 90 200 60 N X R1 2 -300 -200 50 U 50 50 1 1 P X R2 3 -200 -200 50 U 50 50 1 1 P X R3 4 -100 -200 50 U 50 50 1 1 P X R4 5 0 -200 50 U 50 50 1 1 P X R5 6 100 -200 50 U 50 50 1 1 P X R6 7 200 -200 50 U 50 50 1 1 P X common 1 -300 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # R_Network06_Split # DEF R_Network06_Split RN 0 0 Y N 6 F N F0 "RN" 80 0 50 V V C CNN F1 "R_Network06_Split" 0 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP7" -80 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW T 900 35 125 50 0 2 1 "1" Normal 0 C C T 900 35 125 50 0 3 1 "1" Normal 0 C C T 900 35 125 50 0 4 1 "1" Normal 0 C C T 900 35 125 50 0 5 1 "1" Normal 0 C C T 900 35 125 50 0 6 1 "1" Normal 0 C C S 40 100 -40 -100 0 1 10 N P 2 2 1 0 0 100 0 150 N P 2 3 1 0 0 100 0 150 N P 2 4 1 0 0 100 0 150 N P 2 5 1 0 0 100 0 150 N P 2 6 1 0 0 100 0 150 N X R1.1 1 0 150 50 D 50 50 1 1 P X R1.2 2 0 -150 50 U 50 50 1 1 P X R2.2 3 0 -150 50 U 50 50 2 1 P X R3.2 4 0 -150 50 U 50 50 3 1 P X R4.2 5 0 -150 50 U 50 50 4 1 P X R5.2 6 0 -150 50 U 50 50 5 1 P X R6.2 7 0 -150 50 U 50 50 6 1 P ENDDRAW ENDDEF # # R_Network06_US # DEF R_Network06_US RN 0 0 Y N 1 F N F0 "RN" -400 0 50 V V C CNN F1 "R_Network06_US" 300 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP7" 375 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW C -100 90 10 0 1 0 F C -200 90 10 0 1 0 F C -300 90 10 0 1 0 F C 0 90 10 0 1 0 F C 100 90 10 0 1 0 F S -350 -125 250 125 0 1 10 f P 10 0 1 0 -100 90 -100 60 -70 46 -130 20 -70 -6 -130 -33 -70 -60 -130 -86 -100 -100 -100 -150 N P 10 0 1 0 -200 90 -200 60 -170 46 -230 20 -170 -6 -230 -33 -170 -60 -230 -86 -200 -100 -200 -150 N P 10 0 1 0 -300 90 -300 60 -270 46 -330 20 -270 -6 -330 -33 -270 -60 -330 -86 -300 -100 -300 -150 N P 10 0 1 0 0 90 0 60 30 46 -30 20 30 -6 -30 -33 30 -60 -30 -86 0 -100 0 -150 N P 10 0 1 0 100 90 100 60 130 46 70 20 130 -6 70 -33 130 -60 70 -86 100 -100 100 -150 N P 10 0 1 0 200 90 200 60 230 46 170 20 230 -6 170 -33 230 -60 170 -86 200 -100 200 -150 N P 2 0 1 0 -300 90 200 90 N X R1 2 -300 -200 50 U 50 50 1 1 P X R2 3 -200 -200 50 U 50 50 1 1 P X R3 4 -100 -200 50 U 50 50 1 1 P X R4 5 0 -200 50 U 50 50 1 1 P X R5 6 100 -200 50 U 50 50 1 1 P X R6 7 200 -200 50 U 50 50 1 1 P X common 1 -300 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # R_Network07 # DEF R_Network07 RN 0 0 Y N 1 F N F0 "RN" -400 0 50 V V C CNN F1 "R_Network07" 400 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP8" 475 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW C -100 90 10 0 1 0 F C -200 90 10 0 1 0 F C -300 90 10 0 1 0 F C 0 90 10 0 1 0 F C 100 90 10 0 1 0 F C 200 90 10 0 1 0 F S -130 60 -70 -100 0 1 10 N S -230 60 -170 -100 0 1 10 N S -30 60 30 -100 0 1 10 N S -330 60 -270 -100 0 1 10 N S -350 -125 350 125 0 1 10 f S 170 60 230 -100 0 1 10 N S 270 60 330 -100 0 1 10 N S 70 60 130 -100 0 1 10 N P 2 0 1 0 -100 -100 -100 -150 N P 2 0 1 0 -200 -100 -200 -150 N P 2 0 1 0 -300 -100 -300 -150 N P 2 0 1 0 0 -100 0 -150 N P 2 0 1 0 100 -100 100 -150 N P 2 0 1 0 200 -100 200 -150 N P 2 0 1 0 300 -100 300 -150 N P 4 0 1 0 -100 60 -100 90 0 90 0 60 N P 4 0 1 0 -200 60 -200 90 -100 90 -100 60 N P 4 0 1 0 -300 60 -300 90 -200 90 -200 60 N P 4 0 1 0 0 60 0 90 100 90 100 60 N P 4 0 1 0 100 60 100 90 200 90 200 60 N P 4 0 1 0 200 60 200 90 300 90 300 60 N X R1 2 -300 -200 50 U 50 50 1 1 P X R2 3 -200 -200 50 U 50 50 1 1 P X R3 4 -100 -200 50 U 50 50 1 1 P X R4 5 0 -200 50 U 50 50 1 1 P X R5 6 100 -200 50 U 50 50 1 1 P X R6 7 200 -200 50 U 50 50 1 1 P X R7 8 300 -200 50 U 50 50 1 1 P X common 1 -300 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # R_Network07_Split # DEF R_Network07_Split RN 0 0 Y N 7 F N F0 "RN" 80 0 50 V V C CNN F1 "R_Network07_Split" 0 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP8" -80 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW T 900 35 125 50 0 2 1 "1" Normal 0 C C T 900 35 125 50 0 3 1 "1" Normal 0 C C T 900 35 125 50 0 4 1 "1" Normal 0 C C T 900 35 125 50 0 5 1 "1" Normal 0 C C T 900 35 125 50 0 6 1 "1" Normal 0 C C T 900 35 125 50 0 7 1 "1" Normal 0 C C S 40 100 -40 -100 0 1 10 N P 2 2 1 0 0 100 0 150 N P 2 3 1 0 0 100 0 150 N P 2 4 1 0 0 100 0 150 N P 2 5 1 0 0 100 0 150 N P 2 6 1 0 0 100 0 150 N P 2 7 1 0 0 100 0 150 N X R1.1 1 0 150 50 D 50 50 1 1 P X R1.2 2 0 -150 50 U 50 50 1 1 P X R2.2 3 0 -150 50 U 50 50 2 1 P X R3.2 4 0 -150 50 U 50 50 3 1 P X R4.2 5 0 -150 50 U 50 50 4 1 P X R5.2 6 0 -150 50 U 50 50 5 1 P X R6.2 7 0 -150 50 U 50 50 6 1 P X R7.2 8 0 -150 50 U 50 50 7 1 P ENDDRAW ENDDEF # # R_Network07_US # DEF R_Network07_US RN 0 0 Y N 1 F N F0 "RN" -400 0 50 V V C CNN F1 "R_Network07_US" 400 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP8" 475 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW C -100 90 10 0 1 0 F C -200 90 10 0 1 0 F C -300 90 10 0 1 0 F C 0 90 10 0 1 0 F C 100 90 10 0 1 0 F C 200 90 10 0 1 0 F S -350 -125 350 125 0 1 10 f P 10 0 1 0 -100 90 -100 60 -70 46 -130 20 -70 -6 -130 -33 -70 -60 -130 -86 -100 -100 -100 -150 N P 10 0 1 0 -200 90 -200 60 -170 46 -230 20 -170 -6 -230 -33 -170 -60 -230 -86 -200 -100 -200 -150 N P 10 0 1 0 -300 90 -300 60 -270 46 -330 20 -270 -6 -330 -33 -270 -60 -330 -86 -300 -100 -300 -150 N P 10 0 1 0 0 90 0 60 30 46 -30 20 30 -6 -30 -33 30 -60 -30 -86 0 -100 0 -150 N P 10 0 1 0 100 90 100 60 130 46 70 20 130 -6 70 -33 130 -60 70 -86 100 -100 100 -150 N P 10 0 1 0 200 90 200 60 230 46 170 20 230 -6 170 -33 230 -60 170 -86 200 -100 200 -150 N P 10 0 1 0 300 90 300 60 330 46 270 20 330 -6 270 -33 330 -60 270 -86 300 -100 300 -150 N P 2 0 1 0 -300 90 300 90 N X R1 2 -300 -200 50 U 50 50 1 1 P X R2 3 -200 -200 50 U 50 50 1 1 P X R3 4 -100 -200 50 U 50 50 1 1 P X R4 5 0 -200 50 U 50 50 1 1 P X R5 6 100 -200 50 U 50 50 1 1 P X R6 7 200 -200 50 U 50 50 1 1 P X R7 8 300 -200 50 U 50 50 1 1 P X common 1 -300 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # R_Network08 # DEF R_Network08 RN 0 0 Y N 1 F N F0 "RN" -500 0 50 V V C CNN F1 "R_Network08" 400 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP9" 475 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW C -100 90 10 0 1 0 F C -200 90 10 0 1 0 F C -300 90 10 0 1 0 F C -400 90 10 0 1 0 F C 0 90 10 0 1 0 F C 100 90 10 0 1 0 F C 200 90 10 0 1 0 F S -130 60 -70 -100 0 1 10 N S -230 60 -170 -100 0 1 10 N S -30 60 30 -100 0 1 10 N S -330 60 -270 -100 0 1 10 N S -430 60 -370 -100 0 1 10 N S -450 -125 350 125 0 1 10 f S 170 60 230 -100 0 1 10 N S 270 60 330 -100 0 1 10 N S 70 60 130 -100 0 1 10 N P 2 0 1 0 -100 -100 -100 -150 N P 2 0 1 0 -200 -100 -200 -150 N P 2 0 1 0 -300 -100 -300 -150 N P 2 0 1 0 -400 -100 -400 -150 N P 2 0 1 0 0 -100 0 -150 N P 2 0 1 0 100 -100 100 -150 N P 2 0 1 0 200 -100 200 -150 N P 2 0 1 0 300 -100 300 -150 N P 4 0 1 0 -100 60 -100 90 0 90 0 60 N P 4 0 1 0 -200 60 -200 90 -100 90 -100 60 N P 4 0 1 0 -300 60 -300 90 -200 90 -200 60 N P 4 0 1 0 -400 60 -400 90 -300 90 -300 60 N P 4 0 1 0 0 60 0 90 100 90 100 60 N P 4 0 1 0 100 60 100 90 200 90 200 60 N P 4 0 1 0 200 60 200 90 300 90 300 60 N X R1 2 -400 -200 50 U 50 50 1 1 P X R2 3 -300 -200 50 U 50 50 1 1 P X R3 4 -200 -200 50 U 50 50 1 1 P X R4 5 -100 -200 50 U 50 50 1 1 P X R5 6 0 -200 50 U 50 50 1 1 P X R6 7 100 -200 50 U 50 50 1 1 P X R7 8 200 -200 50 U 50 50 1 1 P X R8 9 300 -200 50 U 50 50 1 1 P X common 1 -400 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # R_Network08_Split # DEF R_Network08_Split RN 0 0 Y N 8 F N F0 "RN" 80 0 50 V V C CNN F1 "R_Network08_Split" 0 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP9" -80 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW T 900 35 125 50 0 2 1 "1" Normal 0 C C T 900 35 125 50 0 3 1 "1" Normal 0 C C T 900 35 125 50 0 4 1 "1" Normal 0 C C T 900 35 125 50 0 5 1 "1" Normal 0 C C T 900 35 125 50 0 6 1 "1" Normal 0 C C T 900 35 125 50 0 7 1 "1" Normal 0 C C T 900 35 125 50 0 8 1 "1" Normal 0 C C S 40 100 -40 -100 0 1 10 N P 2 2 1 0 0 100 0 150 N P 2 3 1 0 0 100 0 150 N P 2 4 1 0 0 100 0 150 N P 2 5 1 0 0 100 0 150 N P 2 6 1 0 0 100 0 150 N P 2 7 1 0 0 100 0 150 N P 2 8 1 0 0 100 0 150 N X R1.1 1 0 150 50 D 50 50 1 1 P X R1.2 2 0 -150 50 U 50 50 1 1 P X R2.2 3 0 -150 50 U 50 50 2 1 P X R3.2 4 0 -150 50 U 50 50 3 1 P X R4.2 5 0 -150 50 U 50 50 4 1 P X R5.2 6 0 -150 50 U 50 50 5 1 P X R6.2 7 0 -150 50 U 50 50 6 1 P X R7.2 8 0 -150 50 U 50 50 7 1 P X R8.2 9 0 -150 50 U 50 50 8 1 P ENDDRAW ENDDEF # # R_Network08_US # DEF R_Network08_US RN 0 0 Y N 1 F N F0 "RN" -500 0 50 V V C CNN F1 "R_Network08_US" 400 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP9" 475 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW C -100 90 10 0 1 0 F C -200 90 10 0 1 0 F C -300 90 10 0 1 0 F C -400 90 10 0 1 0 F C 0 90 10 0 1 0 F C 100 90 10 0 1 0 F C 200 90 10 0 1 0 F S -450 -125 350 125 0 1 10 f P 10 0 1 0 -100 90 -100 60 -70 46 -130 20 -70 -6 -130 -33 -70 -60 -130 -86 -100 -100 -100 -150 N P 10 0 1 0 -200 90 -200 60 -170 46 -230 20 -170 -6 -230 -33 -170 -60 -230 -86 -200 -100 -200 -150 N P 10 0 1 0 -300 90 -300 60 -270 46 -330 20 -270 -6 -330 -33 -270 -60 -330 -86 -300 -100 -300 -150 N P 10 0 1 0 -400 90 -400 60 -370 46 -430 20 -370 -6 -430 -33 -370 -60 -430 -86 -400 -100 -400 -150 N P 10 0 1 0 0 90 0 60 30 46 -30 20 30 -6 -30 -33 30 -60 -30 -86 0 -100 0 -150 N P 10 0 1 0 100 90 100 60 130 46 70 20 130 -6 70 -33 130 -60 70 -86 100 -100 100 -150 N P 10 0 1 0 200 90 200 60 230 46 170 20 230 -6 170 -33 230 -60 170 -86 200 -100 200 -150 N P 10 0 1 0 300 90 300 60 330 46 270 20 330 -6 270 -33 330 -60 270 -86 300 -100 300 -150 N P 2 0 1 0 -400 90 300 90 N X R1 2 -400 -200 50 U 50 50 1 1 P X R2 3 -300 -200 50 U 50 50 1 1 P X R3 4 -200 -200 50 U 50 50 1 1 P X R4 5 -100 -200 50 U 50 50 1 1 P X R5 6 0 -200 50 U 50 50 1 1 P X R6 7 100 -200 50 U 50 50 1 1 P X R7 8 200 -200 50 U 50 50 1 1 P X R8 9 300 -200 50 U 50 50 1 1 P X common 1 -400 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # R_Network09 # DEF R_Network09 RN 0 0 Y N 1 F N F0 "RN" -500 0 50 V V C CNN F1 "R_Network09" 500 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP10" 575 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW C -100 90 10 0 1 0 F C -200 90 10 0 1 0 F C -300 90 10 0 1 0 F C -400 90 10 0 1 0 F C 0 90 10 0 1 0 F C 100 90 10 0 1 0 F C 200 90 10 0 1 0 F C 300 90 10 0 1 0 F S -130 60 -70 -100 0 1 10 N S -230 60 -170 -100 0 1 10 N S -30 60 30 -100 0 1 10 N S -330 60 -270 -100 0 1 10 N S -430 60 -370 -100 0 1 10 N S -450 -125 450 125 0 1 10 f S 170 60 230 -100 0 1 10 N S 270 60 330 -100 0 1 10 N S 370 60 430 -100 0 1 10 N S 70 60 130 -100 0 1 10 N P 2 0 1 0 -100 -100 -100 -150 N P 2 0 1 0 -200 -100 -200 -150 N P 2 0 1 0 -300 -100 -300 -150 N P 2 0 1 0 -400 -100 -400 -150 N P 2 0 1 0 0 -100 0 -150 N P 2 0 1 0 100 -100 100 -150 N P 2 0 1 0 200 -100 200 -150 N P 2 0 1 0 300 -100 300 -150 N P 2 0 1 0 400 -100 400 -150 N P 4 0 1 0 -100 60 -100 90 0 90 0 60 N P 4 0 1 0 -200 60 -200 90 -100 90 -100 60 N P 4 0 1 0 -300 60 -300 90 -200 90 -200 60 N P 4 0 1 0 -400 60 -400 90 -300 90 -300 60 N P 4 0 1 0 0 60 0 90 100 90 100 60 N P 4 0 1 0 100 60 100 90 200 90 200 60 N P 4 0 1 0 200 60 200 90 300 90 300 60 N P 4 0 1 0 300 60 300 90 400 90 400 60 N X R1 2 -400 -200 50 U 50 50 1 1 P X R2 3 -300 -200 50 U 50 50 1 1 P X R3 4 -200 -200 50 U 50 50 1 1 P X R4 5 -100 -200 50 U 50 50 1 1 P X R5 6 0 -200 50 U 50 50 1 1 P X R6 7 100 -200 50 U 50 50 1 1 P X R7 8 200 -200 50 U 50 50 1 1 P X R8 9 300 -200 50 U 50 50 1 1 P X R9 10 400 -200 50 U 50 50 1 1 P X common 1 -400 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # R_Network09_Split # DEF R_Network09_Split RN 0 0 Y N 9 F N F0 "RN" 80 0 50 V V C CNN F1 "R_Network09_Split" 0 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP10" -80 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW T 900 35 125 50 0 2 1 "1" Normal 0 C C T 900 35 125 50 0 3 1 "1" Normal 0 C C T 900 35 125 50 0 4 1 "1" Normal 0 C C T 900 35 125 50 0 5 1 "1" Normal 0 C C T 900 35 125 50 0 6 1 "1" Normal 0 C C T 900 35 125 50 0 7 1 "1" Normal 0 C C T 900 35 125 50 0 8 1 "1" Normal 0 C C T 900 35 125 50 0 9 1 "1" Normal 0 C C S 40 100 -40 -100 0 1 10 N P 2 2 1 0 0 100 0 150 N P 2 3 1 0 0 100 0 150 N P 2 4 1 0 0 100 0 150 N P 2 5 1 0 0 100 0 150 N P 2 6 1 0 0 100 0 150 N P 2 7 1 0 0 100 0 150 N P 2 8 1 0 0 100 0 150 N P 2 9 1 0 0 100 0 150 N X R1.1 1 0 150 50 D 50 50 1 1 P X R1.2 2 0 -150 50 U 50 50 1 1 P X R2.2 3 0 -150 50 U 50 50 2 1 P X R3.2 4 0 -150 50 U 50 50 3 1 P X R4.2 5 0 -150 50 U 50 50 4 1 P X R5.2 6 0 -150 50 U 50 50 5 1 P X R6.2 7 0 -150 50 U 50 50 6 1 P X R7.2 8 0 -150 50 U 50 50 7 1 P X R8.2 9 0 -150 50 U 50 50 8 1 P X R9.2 10 0 -150 50 U 50 50 9 1 P ENDDRAW ENDDEF # # R_Network09_US # DEF R_Network09_US RN 0 0 Y N 1 F N F0 "RN" -500 0 50 V V C CNN F1 "R_Network09_US" 500 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP10" 575 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW C -100 90 10 0 1 0 F C -200 90 10 0 1 0 F C -300 90 10 0 1 0 F C -400 90 10 0 1 0 F C 0 90 10 0 1 0 F C 100 90 10 0 1 0 F C 200 90 10 0 1 0 F C 300 90 10 0 1 0 F S -450 -125 450 125 0 1 10 f P 10 0 1 0 -100 90 -100 60 -70 46 -130 20 -70 -6 -130 -33 -70 -60 -130 -86 -100 -100 -100 -150 N P 10 0 1 0 -200 90 -200 60 -170 46 -230 20 -170 -6 -230 -33 -170 -60 -230 -86 -200 -100 -200 -150 N P 10 0 1 0 -300 90 -300 60 -270 46 -330 20 -270 -6 -330 -33 -270 -60 -330 -86 -300 -100 -300 -150 N P 10 0 1 0 -400 90 -400 60 -370 46 -430 20 -370 -6 -430 -33 -370 -60 -430 -86 -400 -100 -400 -150 N P 10 0 1 0 0 90 0 60 30 46 -30 20 30 -6 -30 -33 30 -60 -30 -86 0 -100 0 -150 N P 10 0 1 0 100 90 100 60 130 46 70 20 130 -6 70 -33 130 -60 70 -86 100 -100 100 -150 N P 10 0 1 0 200 90 200 60 230 46 170 20 230 -6 170 -33 230 -60 170 -86 200 -100 200 -150 N P 10 0 1 0 300 90 300 60 330 46 270 20 330 -6 270 -33 330 -60 270 -86 300 -100 300 -150 N P 10 0 1 0 400 90 400 60 430 46 370 20 430 -6 370 -33 430 -60 370 -86 400 -100 400 -150 N P 2 0 1 0 -400 90 400 90 N X R1 2 -400 -200 50 U 50 50 1 1 P X R2 3 -300 -200 50 U 50 50 1 1 P X R3 4 -200 -200 50 U 50 50 1 1 P X R4 5 -100 -200 50 U 50 50 1 1 P X R5 6 0 -200 50 U 50 50 1 1 P X R6 7 100 -200 50 U 50 50 1 1 P X R7 8 200 -200 50 U 50 50 1 1 P X R8 9 300 -200 50 U 50 50 1 1 P X R9 10 400 -200 50 U 50 50 1 1 P X common 1 -400 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # R_Network10 # DEF R_Network10 RN 0 0 Y N 1 F N F0 "RN" -600 0 50 V V C CNN F1 "R_Network10" 500 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP11" 575 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW C -100 90 10 0 1 0 F C -200 90 10 0 1 0 F C -300 90 10 0 1 0 F C -400 90 10 0 1 0 F C -500 90 10 0 1 0 F C 0 90 10 0 1 0 F C 100 90 10 0 1 0 F C 200 90 10 0 1 0 F C 300 90 10 0 1 0 F S -130 60 -70 -100 0 1 10 N S -230 60 -170 -100 0 1 10 N S -30 60 30 -100 0 1 10 N S -330 60 -270 -100 0 1 10 N S -430 60 -370 -100 0 1 10 N S -530 60 -470 -100 0 1 10 N S -550 -125 450 125 0 1 10 f S 170 60 230 -100 0 1 10 N S 270 60 330 -100 0 1 10 N S 370 60 430 -100 0 1 10 N S 70 60 130 -100 0 1 10 N P 2 0 1 0 -100 -100 -100 -150 N P 2 0 1 0 -200 -100 -200 -150 N P 2 0 1 0 -300 -100 -300 -150 N P 2 0 1 0 -400 -100 -400 -150 N P 2 0 1 0 -500 -100 -500 -150 N P 2 0 1 0 0 -100 0 -150 N P 2 0 1 0 100 -100 100 -150 N P 2 0 1 0 200 -100 200 -150 N P 2 0 1 0 300 -100 300 -150 N P 2 0 1 0 400 -100 400 -150 N P 4 0 1 0 -100 60 -100 90 0 90 0 60 N P 4 0 1 0 -200 60 -200 90 -100 90 -100 60 N P 4 0 1 0 -300 60 -300 90 -200 90 -200 60 N P 4 0 1 0 -400 60 -400 90 -300 90 -300 60 N P 4 0 1 0 -500 60 -500 90 -400 90 -400 60 N P 4 0 1 0 0 60 0 90 100 90 100 60 N P 4 0 1 0 100 60 100 90 200 90 200 60 N P 4 0 1 0 200 60 200 90 300 90 300 60 N P 4 0 1 0 300 60 300 90 400 90 400 60 N X R1 2 -500 -200 50 U 50 50 1 1 P X R10 11 400 -200 50 U 50 50 1 1 P X R2 3 -400 -200 50 U 50 50 1 1 P X R3 4 -300 -200 50 U 50 50 1 1 P X R4 5 -200 -200 50 U 50 50 1 1 P X R5 6 -100 -200 50 U 50 50 1 1 P X R6 7 0 -200 50 U 50 50 1 1 P X R7 8 100 -200 50 U 50 50 1 1 P X R8 9 200 -200 50 U 50 50 1 1 P X R9 10 300 -200 50 U 50 50 1 1 P X common 1 -500 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # R_Network10_Split # DEF R_Network10_Split RN 0 0 Y N 10 F N F0 "RN" 80 0 50 V V C CNN F1 "R_Network10_Split" 0 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP11" -80 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW T 900 35 125 50 0 10 1 "1" Normal 0 C C T 900 35 125 50 0 2 1 "1" Normal 0 C C T 900 35 125 50 0 3 1 "1" Normal 0 C C T 900 35 125 50 0 4 1 "1" Normal 0 C C T 900 35 125 50 0 5 1 "1" Normal 0 C C T 900 35 125 50 0 6 1 "1" Normal 0 C C T 900 35 125 50 0 7 1 "1" Normal 0 C C T 900 35 125 50 0 8 1 "1" Normal 0 C C T 900 35 125 50 0 9 1 "1" Normal 0 C C S 40 100 -40 -100 0 1 10 N P 2 10 1 0 0 100 0 150 N P 2 2 1 0 0 100 0 150 N P 2 3 1 0 0 100 0 150 N P 2 4 1 0 0 100 0 150 N P 2 5 1 0 0 100 0 150 N P 2 6 1 0 0 100 0 150 N P 2 7 1 0 0 100 0 150 N P 2 8 1 0 0 100 0 150 N P 2 9 1 0 0 100 0 150 N X R1.1 1 0 150 50 D 50 50 1 1 P X R1.2 2 0 -150 50 U 50 50 1 1 P X R10.2 11 0 -150 50 U 50 50 10 1 P X R2.2 3 0 -150 50 U 50 50 2 1 P X R3.2 4 0 -150 50 U 50 50 3 1 P X R4.2 5 0 -150 50 U 50 50 4 1 P X R5.2 6 0 -150 50 U 50 50 5 1 P X R6.2 7 0 -150 50 U 50 50 6 1 P X R7.2 8 0 -150 50 U 50 50 7 1 P X R8.2 9 0 -150 50 U 50 50 8 1 P X R9.2 10 0 -150 50 U 50 50 9 1 P ENDDRAW ENDDEF # # R_Network10_US # DEF R_Network10_US RN 0 0 Y N 1 F N F0 "RN" -600 0 50 V V C CNN F1 "R_Network10_US" 500 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP11" 575 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW C -100 90 10 0 1 0 F C -200 90 10 0 1 0 F C -300 90 10 0 1 0 F C -400 90 10 0 1 0 F C -500 90 10 0 1 0 F C 0 90 10 0 1 0 F C 100 90 10 0 1 0 F C 200 90 10 0 1 0 F C 300 90 10 0 1 0 F S -550 -125 450 125 0 1 10 f P 10 0 1 0 -100 90 -100 60 -70 46 -130 20 -70 -6 -130 -33 -70 -60 -130 -86 -100 -100 -100 -150 N P 10 0 1 0 -200 90 -200 60 -170 46 -230 20 -170 -6 -230 -33 -170 -60 -230 -86 -200 -100 -200 -150 N P 10 0 1 0 -300 90 -300 60 -270 46 -330 20 -270 -6 -330 -33 -270 -60 -330 -86 -300 -100 -300 -150 N P 10 0 1 0 -400 90 -400 60 -370 46 -430 20 -370 -6 -430 -33 -370 -60 -430 -86 -400 -100 -400 -150 N P 10 0 1 0 -500 90 -500 60 -470 46 -530 20 -470 -6 -530 -33 -470 -60 -530 -86 -500 -100 -500 -150 N P 10 0 1 0 0 90 0 60 30 46 -30 20 30 -6 -30 -33 30 -60 -30 -86 0 -100 0 -150 N P 10 0 1 0 100 90 100 60 130 46 70 20 130 -6 70 -33 130 -60 70 -86 100 -100 100 -150 N P 10 0 1 0 200 90 200 60 230 46 170 20 230 -6 170 -33 230 -60 170 -86 200 -100 200 -150 N P 10 0 1 0 300 90 300 60 330 46 270 20 330 -6 270 -33 330 -60 270 -86 300 -100 300 -150 N P 10 0 1 0 400 90 400 60 430 46 370 20 430 -6 370 -33 430 -60 370 -86 400 -100 400 -150 N P 2 0 1 0 -500 90 400 90 N X R1 2 -500 -200 50 U 50 50 1 1 P X R10 11 400 -200 50 U 50 50 1 1 P X R2 3 -400 -200 50 U 50 50 1 1 P X R3 4 -300 -200 50 U 50 50 1 1 P X R4 5 -200 -200 50 U 50 50 1 1 P X R5 6 -100 -200 50 U 50 50 1 1 P X R6 7 0 -200 50 U 50 50 1 1 P X R7 8 100 -200 50 U 50 50 1 1 P X R8 9 200 -200 50 U 50 50 1 1 P X R9 10 300 -200 50 U 50 50 1 1 P X common 1 -500 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # R_Network11 # DEF R_Network11 RN 0 0 Y N 1 F N F0 "RN" -600 0 50 V V C CNN F1 "R_Network11" 600 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP12" 675 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW C -100 90 10 0 1 0 F C -200 90 10 0 1 0 F C -300 90 10 0 1 0 F C -400 90 10 0 1 0 F C -500 90 10 0 1 0 F C 0 90 10 0 1 0 F C 100 90 10 0 1 0 F C 200 90 10 0 1 0 F C 300 90 10 0 1 0 F C 400 90 10 0 1 0 F S -130 60 -70 -100 0 1 10 N S -230 60 -170 -100 0 1 10 N S -30 60 30 -100 0 1 10 N S -330 60 -270 -100 0 1 10 N S -430 60 -370 -100 0 1 10 N S -530 60 -470 -100 0 1 10 N S -550 -125 550 125 0 1 10 f S 170 60 230 -100 0 1 10 N S 270 60 330 -100 0 1 10 N S 370 60 430 -100 0 1 10 N S 470 60 530 -100 0 1 10 N S 70 60 130 -100 0 1 10 N P 2 0 1 0 -100 -100 -100 -150 N P 2 0 1 0 -200 -100 -200 -150 N P 2 0 1 0 -300 -100 -300 -150 N P 2 0 1 0 -400 -100 -400 -150 N P 2 0 1 0 -500 -100 -500 -150 N P 2 0 1 0 0 -100 0 -150 N P 2 0 1 0 100 -100 100 -150 N P 2 0 1 0 200 -100 200 -150 N P 2 0 1 0 300 -100 300 -150 N P 2 0 1 0 400 -100 400 -150 N P 2 0 1 0 500 -100 500 -150 N P 4 0 1 0 -100 60 -100 90 0 90 0 60 N P 4 0 1 0 -200 60 -200 90 -100 90 -100 60 N P 4 0 1 0 -300 60 -300 90 -200 90 -200 60 N P 4 0 1 0 -400 60 -400 90 -300 90 -300 60 N P 4 0 1 0 -500 60 -500 90 -400 90 -400 60 N P 4 0 1 0 0 60 0 90 100 90 100 60 N P 4 0 1 0 100 60 100 90 200 90 200 60 N P 4 0 1 0 200 60 200 90 300 90 300 60 N P 4 0 1 0 300 60 300 90 400 90 400 60 N P 4 0 1 0 400 60 400 90 500 90 500 60 N X R1 2 -500 -200 50 U 50 50 1 1 P X R10 11 400 -200 50 U 50 50 1 1 P X R11 12 500 -200 50 U 50 50 1 1 P X R2 3 -400 -200 50 U 50 50 1 1 P X R3 4 -300 -200 50 U 50 50 1 1 P X R4 5 -200 -200 50 U 50 50 1 1 P X R5 6 -100 -200 50 U 50 50 1 1 P X R6 7 0 -200 50 U 50 50 1 1 P X R7 8 100 -200 50 U 50 50 1 1 P X R8 9 200 -200 50 U 50 50 1 1 P X R9 10 300 -200 50 U 50 50 1 1 P X common 1 -500 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # R_Network11_Split # DEF R_Network11_Split RN 0 0 Y N 11 F N F0 "RN" 80 0 50 V V C CNN F1 "R_Network11_Split" 0 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP12" -80 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW T 900 35 125 50 0 10 1 "1" Normal 0 C C T 900 35 125 50 0 11 1 "1" Normal 0 C C T 900 35 125 50 0 2 1 "1" Normal 0 C C T 900 35 125 50 0 3 1 "1" Normal 0 C C T 900 35 125 50 0 4 1 "1" Normal 0 C C T 900 35 125 50 0 5 1 "1" Normal 0 C C T 900 35 125 50 0 6 1 "1" Normal 0 C C T 900 35 125 50 0 7 1 "1" Normal 0 C C T 900 35 125 50 0 8 1 "1" Normal 0 C C T 900 35 125 50 0 9 1 "1" Normal 0 C C S 40 100 -40 -100 0 1 10 N P 2 10 1 0 0 100 0 150 N P 2 11 1 0 0 100 0 150 N P 2 2 1 0 0 100 0 150 N P 2 3 1 0 0 100 0 150 N P 2 4 1 0 0 100 0 150 N P 2 5 1 0 0 100 0 150 N P 2 6 1 0 0 100 0 150 N P 2 7 1 0 0 100 0 150 N P 2 8 1 0 0 100 0 150 N P 2 9 1 0 0 100 0 150 N X R1.1 1 0 150 50 D 50 50 1 1 P X R1.2 2 0 -150 50 U 50 50 1 1 P X R10.2 11 0 -150 50 U 50 50 10 1 P X R11.2 12 0 -150 50 U 50 50 11 1 P X R2.2 3 0 -150 50 U 50 50 2 1 P X R3.2 4 0 -150 50 U 50 50 3 1 P X R4.2 5 0 -150 50 U 50 50 4 1 P X R5.2 6 0 -150 50 U 50 50 5 1 P X R6.2 7 0 -150 50 U 50 50 6 1 P X R7.2 8 0 -150 50 U 50 50 7 1 P X R8.2 9 0 -150 50 U 50 50 8 1 P X R9.2 10 0 -150 50 U 50 50 9 1 P ENDDRAW ENDDEF # # R_Network11_US # DEF R_Network11_US RN 0 0 Y N 1 F N F0 "RN" -600 0 50 V V C CNN F1 "R_Network11_US" 600 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP12" 675 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW C -100 90 10 0 1 0 F C -200 90 10 0 1 0 F C -300 90 10 0 1 0 F C -400 90 10 0 1 0 F C -500 90 10 0 1 0 F C 0 90 10 0 1 0 F C 100 90 10 0 1 0 F C 200 90 10 0 1 0 F C 300 90 10 0 1 0 F C 400 90 10 0 1 0 F S -550 -125 550 125 0 1 10 f P 10 0 1 0 -100 90 -100 60 -70 46 -130 20 -70 -6 -130 -33 -70 -60 -130 -86 -100 -100 -100 -150 N P 10 0 1 0 -200 90 -200 60 -170 46 -230 20 -170 -6 -230 -33 -170 -60 -230 -86 -200 -100 -200 -150 N P 10 0 1 0 -300 90 -300 60 -270 46 -330 20 -270 -6 -330 -33 -270 -60 -330 -86 -300 -100 -300 -150 N P 10 0 1 0 -400 90 -400 60 -370 46 -430 20 -370 -6 -430 -33 -370 -60 -430 -86 -400 -100 -400 -150 N P 10 0 1 0 -500 90 -500 60 -470 46 -530 20 -470 -6 -530 -33 -470 -60 -530 -86 -500 -100 -500 -150 N P 10 0 1 0 0 90 0 60 30 46 -30 20 30 -6 -30 -33 30 -60 -30 -86 0 -100 0 -150 N P 10 0 1 0 100 90 100 60 130 46 70 20 130 -6 70 -33 130 -60 70 -86 100 -100 100 -150 N P 10 0 1 0 200 90 200 60 230 46 170 20 230 -6 170 -33 230 -60 170 -86 200 -100 200 -150 N P 10 0 1 0 300 90 300 60 330 46 270 20 330 -6 270 -33 330 -60 270 -86 300 -100 300 -150 N P 10 0 1 0 400 90 400 60 430 46 370 20 430 -6 370 -33 430 -60 370 -86 400 -100 400 -150 N P 10 0 1 0 500 90 500 60 530 46 470 20 530 -6 470 -33 530 -60 470 -86 500 -100 500 -150 N P 2 0 1 0 -500 90 500 90 N X R1 2 -500 -200 50 U 50 50 1 1 P X R10 11 400 -200 50 U 50 50 1 1 P X R11 12 500 -200 50 U 50 50 1 1 P X R2 3 -400 -200 50 U 50 50 1 1 P X R3 4 -300 -200 50 U 50 50 1 1 P X R4 5 -200 -200 50 U 50 50 1 1 P X R5 6 -100 -200 50 U 50 50 1 1 P X R6 7 0 -200 50 U 50 50 1 1 P X R7 8 100 -200 50 U 50 50 1 1 P X R8 9 200 -200 50 U 50 50 1 1 P X R9 10 300 -200 50 U 50 50 1 1 P X common 1 -500 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # R_Network12 # DEF R_Network12 RN 0 0 Y N 1 F N F0 "RN" -700 0 50 V V C CNN F1 "R_Network12" 600 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP13" 675 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW C -100 90 10 0 1 0 F C -200 90 10 0 1 0 F C -300 90 10 0 1 0 F C -400 90 10 0 1 0 F C -500 90 10 0 1 0 F C -600 90 10 0 1 0 F C 0 90 10 0 1 0 F C 100 90 10 0 1 0 F C 200 90 10 0 1 0 F C 300 90 10 0 1 0 F C 400 90 10 0 1 0 F S -130 60 -70 -100 0 1 10 N S -230 60 -170 -100 0 1 10 N S -30 60 30 -100 0 1 10 N S -330 60 -270 -100 0 1 10 N S -430 60 -370 -100 0 1 10 N S -530 60 -470 -100 0 1 10 N S -630 60 -570 -100 0 1 10 N S -650 -125 550 125 0 1 10 f S 170 60 230 -100 0 1 10 N S 270 60 330 -100 0 1 10 N S 370 60 430 -100 0 1 10 N S 470 60 530 -100 0 1 10 N S 70 60 130 -100 0 1 10 N P 2 0 1 0 -100 -100 -100 -150 N P 2 0 1 0 -200 -100 -200 -150 N P 2 0 1 0 -300 -100 -300 -150 N P 2 0 1 0 -400 -100 -400 -150 N P 2 0 1 0 -500 -100 -500 -150 N P 2 0 1 0 -600 -100 -600 -150 N P 2 0 1 0 0 -100 0 -150 N P 2 0 1 0 100 -100 100 -150 N P 2 0 1 0 200 -100 200 -150 N P 2 0 1 0 300 -100 300 -150 N P 2 0 1 0 400 -100 400 -150 N P 2 0 1 0 500 -100 500 -150 N P 4 0 1 0 -100 60 -100 90 0 90 0 60 N P 4 0 1 0 -200 60 -200 90 -100 90 -100 60 N P 4 0 1 0 -300 60 -300 90 -200 90 -200 60 N P 4 0 1 0 -400 60 -400 90 -300 90 -300 60 N P 4 0 1 0 -500 60 -500 90 -400 90 -400 60 N P 4 0 1 0 -600 60 -600 90 -500 90 -500 60 N P 4 0 1 0 0 60 0 90 100 90 100 60 N P 4 0 1 0 100 60 100 90 200 90 200 60 N P 4 0 1 0 200 60 200 90 300 90 300 60 N P 4 0 1 0 300 60 300 90 400 90 400 60 N P 4 0 1 0 400 60 400 90 500 90 500 60 N X R1 2 -600 -200 50 U 50 50 1 1 P X R10 11 300 -200 50 U 50 50 1 1 P X R11 12 400 -200 50 U 50 50 1 1 P X R12 13 500 -200 50 U 50 50 1 1 P X R2 3 -500 -200 50 U 50 50 1 1 P X R3 4 -400 -200 50 U 50 50 1 1 P X R4 5 -300 -200 50 U 50 50 1 1 P X R5 6 -200 -200 50 U 50 50 1 1 P X R6 7 -100 -200 50 U 50 50 1 1 P X R7 8 0 -200 50 U 50 50 1 1 P X R8 9 100 -200 50 U 50 50 1 1 P X R9 10 200 -200 50 U 50 50 1 1 P X common 1 -600 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # R_Network12_Split # DEF R_Network12_Split RN 0 0 Y N 12 F N F0 "RN" 80 0 50 V V C CNN F1 "R_Network12_Split" 0 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP13" -80 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW T 900 35 125 50 0 10 1 "1" Normal 0 C C T 900 35 125 50 0 11 1 "1" Normal 0 C C T 900 35 125 50 0 12 1 "1" Normal 0 C C T 900 35 125 50 0 2 1 "1" Normal 0 C C T 900 35 125 50 0 3 1 "1" Normal 0 C C T 900 35 125 50 0 4 1 "1" Normal 0 C C T 900 35 125 50 0 5 1 "1" Normal 0 C C T 900 35 125 50 0 6 1 "1" Normal 0 C C T 900 35 125 50 0 7 1 "1" Normal 0 C C T 900 35 125 50 0 8 1 "1" Normal 0 C C T 900 35 125 50 0 9 1 "1" Normal 0 C C S 40 100 -40 -100 0 1 10 N P 2 10 1 0 0 100 0 150 N P 2 11 1 0 0 100 0 150 N P 2 12 1 0 0 100 0 150 N P 2 2 1 0 0 100 0 150 N P 2 3 1 0 0 100 0 150 N P 2 4 1 0 0 100 0 150 N P 2 5 1 0 0 100 0 150 N P 2 6 1 0 0 100 0 150 N P 2 7 1 0 0 100 0 150 N P 2 8 1 0 0 100 0 150 N P 2 9 1 0 0 100 0 150 N X R1.1 1 0 150 50 D 50 50 1 1 P X R1.2 2 0 -150 50 U 50 50 1 1 P X R10.2 11 0 -150 50 U 50 50 10 1 P X R11.2 12 0 -150 50 U 50 50 11 1 P X R12.2 13 0 -150 50 U 50 50 12 1 P X R2.2 3 0 -150 50 U 50 50 2 1 P X R3.2 4 0 -150 50 U 50 50 3 1 P X R4.2 5 0 -150 50 U 50 50 4 1 P X R5.2 6 0 -150 50 U 50 50 5 1 P X R6.2 7 0 -150 50 U 50 50 6 1 P X R7.2 8 0 -150 50 U 50 50 7 1 P X R8.2 9 0 -150 50 U 50 50 8 1 P X R9.2 10 0 -150 50 U 50 50 9 1 P ENDDRAW ENDDEF # # R_Network12_US # DEF R_Network12_US RN 0 0 Y N 1 F N F0 "RN" -700 0 50 V V C CNN F1 "R_Network12_US" 600 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP13" 675 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW C -100 90 10 0 1 0 F C -200 90 10 0 1 0 F C -300 90 10 0 1 0 F C -400 90 10 0 1 0 F C -500 90 10 0 1 0 F C -600 90 10 0 1 0 F C 0 90 10 0 1 0 F C 100 90 10 0 1 0 F C 200 90 10 0 1 0 F C 300 90 10 0 1 0 F C 400 90 10 0 1 0 F S -650 -125 550 125 0 1 10 f P 10 0 1 0 -100 90 -100 60 -70 46 -130 20 -70 -6 -130 -33 -70 -60 -130 -86 -100 -100 -100 -150 N P 10 0 1 0 -200 90 -200 60 -170 46 -230 20 -170 -6 -230 -33 -170 -60 -230 -86 -200 -100 -200 -150 N P 10 0 1 0 -300 90 -300 60 -270 46 -330 20 -270 -6 -330 -33 -270 -60 -330 -86 -300 -100 -300 -150 N P 10 0 1 0 -400 90 -400 60 -370 46 -430 20 -370 -6 -430 -33 -370 -60 -430 -86 -400 -100 -400 -150 N P 10 0 1 0 -500 90 -500 60 -470 46 -530 20 -470 -6 -530 -33 -470 -60 -530 -86 -500 -100 -500 -150 N P 10 0 1 0 -600 90 -600 60 -570 46 -630 20 -570 -6 -630 -33 -570 -60 -630 -86 -600 -100 -600 -150 N P 10 0 1 0 0 90 0 60 30 46 -30 20 30 -6 -30 -33 30 -60 -30 -86 0 -100 0 -150 N P 10 0 1 0 100 90 100 60 130 46 70 20 130 -6 70 -33 130 -60 70 -86 100 -100 100 -150 N P 10 0 1 0 200 90 200 60 230 46 170 20 230 -6 170 -33 230 -60 170 -86 200 -100 200 -150 N P 10 0 1 0 300 90 300 60 330 46 270 20 330 -6 270 -33 330 -60 270 -86 300 -100 300 -150 N P 10 0 1 0 400 90 400 60 430 46 370 20 430 -6 370 -33 430 -60 370 -86 400 -100 400 -150 N P 10 0 1 0 500 90 500 60 530 46 470 20 530 -6 470 -33 530 -60 470 -86 500 -100 500 -150 N P 2 0 1 0 -600 90 500 90 N X R1 2 -600 -200 50 U 50 50 1 1 P X R10 11 300 -200 50 U 50 50 1 1 P X R11 12 400 -200 50 U 50 50 1 1 P X R12 13 500 -200 50 U 50 50 1 1 P X R2 3 -500 -200 50 U 50 50 1 1 P X R3 4 -400 -200 50 U 50 50 1 1 P X R4 5 -300 -200 50 U 50 50 1 1 P X R5 6 -200 -200 50 U 50 50 1 1 P X R6 7 -100 -200 50 U 50 50 1 1 P X R7 8 0 -200 50 U 50 50 1 1 P X R8 9 100 -200 50 U 50 50 1 1 P X R9 10 200 -200 50 U 50 50 1 1 P X common 1 -600 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # R_Network13 # DEF R_Network13 RN 0 0 Y N 1 F N F0 "RN" -700 0 50 V V C CNN F1 "R_Network13" 700 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP14" 775 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW C -100 90 10 0 1 0 F C -200 90 10 0 1 0 F C -300 90 10 0 1 0 F C -400 90 10 0 1 0 F C -500 90 10 0 1 0 F C -600 90 10 0 1 0 F C 0 90 10 0 1 0 F C 100 90 10 0 1 0 F C 200 90 10 0 1 0 F C 300 90 10 0 1 0 F C 400 90 10 0 1 0 F C 500 90 10 0 1 0 F S -130 60 -70 -100 0 1 10 N S -230 60 -170 -100 0 1 10 N S -30 60 30 -100 0 1 10 N S -330 60 -270 -100 0 1 10 N S -430 60 -370 -100 0 1 10 N S -530 60 -470 -100 0 1 10 N S -630 60 -570 -100 0 1 10 N S -650 -125 650 125 0 1 10 f S 170 60 230 -100 0 1 10 N S 270 60 330 -100 0 1 10 N S 370 60 430 -100 0 1 10 N S 470 60 530 -100 0 1 10 N S 570 60 630 -100 0 1 10 N S 70 60 130 -100 0 1 10 N P 2 0 1 0 -100 -100 -100 -150 N P 2 0 1 0 -200 -100 -200 -150 N P 2 0 1 0 -300 -100 -300 -150 N P 2 0 1 0 -400 -100 -400 -150 N P 2 0 1 0 -500 -100 -500 -150 N P 2 0 1 0 -600 -100 -600 -150 N P 2 0 1 0 0 -100 0 -150 N P 2 0 1 0 100 -100 100 -150 N P 2 0 1 0 200 -100 200 -150 N P 2 0 1 0 300 -100 300 -150 N P 2 0 1 0 400 -100 400 -150 N P 2 0 1 0 500 -100 500 -150 N P 2 0 1 0 600 -100 600 -150 N P 4 0 1 0 -100 60 -100 90 0 90 0 60 N P 4 0 1 0 -200 60 -200 90 -100 90 -100 60 N P 4 0 1 0 -300 60 -300 90 -200 90 -200 60 N P 4 0 1 0 -400 60 -400 90 -300 90 -300 60 N P 4 0 1 0 -500 60 -500 90 -400 90 -400 60 N P 4 0 1 0 -600 60 -600 90 -500 90 -500 60 N P 4 0 1 0 0 60 0 90 100 90 100 60 N P 4 0 1 0 100 60 100 90 200 90 200 60 N P 4 0 1 0 200 60 200 90 300 90 300 60 N P 4 0 1 0 300 60 300 90 400 90 400 60 N P 4 0 1 0 400 60 400 90 500 90 500 60 N P 4 0 1 0 500 60 500 90 600 90 600 60 N X R1 2 -600 -200 50 U 50 50 1 1 P X R10 11 300 -200 50 U 50 50 1 1 P X R11 12 400 -200 50 U 50 50 1 1 P X R12 13 500 -200 50 U 50 50 1 1 P X R13 14 600 -200 50 U 50 50 1 1 P X R2 3 -500 -200 50 U 50 50 1 1 P X R3 4 -400 -200 50 U 50 50 1 1 P X R4 5 -300 -200 50 U 50 50 1 1 P X R5 6 -200 -200 50 U 50 50 1 1 P X R6 7 -100 -200 50 U 50 50 1 1 P X R7 8 0 -200 50 U 50 50 1 1 P X R8 9 100 -200 50 U 50 50 1 1 P X R9 10 200 -200 50 U 50 50 1 1 P X common 1 -600 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # R_Network13_Split # DEF R_Network13_Split RN 0 0 Y N 13 F N F0 "RN" 80 0 50 V V C CNN F1 "R_Network13_Split" 0 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP14" -80 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW T 900 35 125 50 0 10 1 "1" Normal 0 C C T 900 35 125 50 0 11 1 "1" Normal 0 C C T 900 35 125 50 0 12 1 "1" Normal 0 C C T 900 35 125 50 0 13 1 "1" Normal 0 C C T 900 35 125 50 0 2 1 "1" Normal 0 C C T 900 35 125 50 0 3 1 "1" Normal 0 C C T 900 35 125 50 0 4 1 "1" Normal 0 C C T 900 35 125 50 0 5 1 "1" Normal 0 C C T 900 35 125 50 0 6 1 "1" Normal 0 C C T 900 35 125 50 0 7 1 "1" Normal 0 C C T 900 35 125 50 0 8 1 "1" Normal 0 C C T 900 35 125 50 0 9 1 "1" Normal 0 C C S 40 100 -40 -100 0 1 10 N P 2 10 1 0 0 100 0 150 N P 2 11 1 0 0 100 0 150 N P 2 12 1 0 0 100 0 150 N P 2 13 1 0 0 100 0 150 N P 2 2 1 0 0 100 0 150 N P 2 3 1 0 0 100 0 150 N P 2 4 1 0 0 100 0 150 N P 2 5 1 0 0 100 0 150 N P 2 6 1 0 0 100 0 150 N P 2 7 1 0 0 100 0 150 N P 2 8 1 0 0 100 0 150 N P 2 9 1 0 0 100 0 150 N X R1.1 1 0 150 50 D 50 50 1 1 P X R1.2 2 0 -150 50 U 50 50 1 1 P X R10.2 11 0 -150 50 U 50 50 10 1 P X R11.2 12 0 -150 50 U 50 50 11 1 P X R12.2 13 0 -150 50 U 50 50 12 1 P X R13.2 14 0 -150 50 U 50 50 13 1 P X R2.2 3 0 -150 50 U 50 50 2 1 P X R3.2 4 0 -150 50 U 50 50 3 1 P X R4.2 5 0 -150 50 U 50 50 4 1 P X R5.2 6 0 -150 50 U 50 50 5 1 P X R6.2 7 0 -150 50 U 50 50 6 1 P X R7.2 8 0 -150 50 U 50 50 7 1 P X R8.2 9 0 -150 50 U 50 50 8 1 P X R9.2 10 0 -150 50 U 50 50 9 1 P ENDDRAW ENDDEF # # R_Network13_US # DEF R_Network13_US RN 0 0 Y N 1 F N F0 "RN" -700 0 50 V V C CNN F1 "R_Network13_US" 700 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP14" 775 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW C -100 90 10 0 1 0 F C -200 90 10 0 1 0 F C -300 90 10 0 1 0 F C -400 90 10 0 1 0 F C -500 90 10 0 1 0 F C -600 90 10 0 1 0 F C 0 90 10 0 1 0 F C 100 90 10 0 1 0 F C 200 90 10 0 1 0 F C 300 90 10 0 1 0 F C 400 90 10 0 1 0 F C 500 90 10 0 1 0 F S -650 -125 650 125 0 1 10 f P 10 0 1 0 -100 90 -100 60 -70 46 -130 20 -70 -6 -130 -33 -70 -60 -130 -86 -100 -100 -100 -150 N P 10 0 1 0 -200 90 -200 60 -170 46 -230 20 -170 -6 -230 -33 -170 -60 -230 -86 -200 -100 -200 -150 N P 10 0 1 0 -300 90 -300 60 -270 46 -330 20 -270 -6 -330 -33 -270 -60 -330 -86 -300 -100 -300 -150 N P 10 0 1 0 -400 90 -400 60 -370 46 -430 20 -370 -6 -430 -33 -370 -60 -430 -86 -400 -100 -400 -150 N P 10 0 1 0 -500 90 -500 60 -470 46 -530 20 -470 -6 -530 -33 -470 -60 -530 -86 -500 -100 -500 -150 N P 10 0 1 0 -600 90 -600 60 -570 46 -630 20 -570 -6 -630 -33 -570 -60 -630 -86 -600 -100 -600 -150 N P 10 0 1 0 0 90 0 60 30 46 -30 20 30 -6 -30 -33 30 -60 -30 -86 0 -100 0 -150 N P 10 0 1 0 100 90 100 60 130 46 70 20 130 -6 70 -33 130 -60 70 -86 100 -100 100 -150 N P 10 0 1 0 200 90 200 60 230 46 170 20 230 -6 170 -33 230 -60 170 -86 200 -100 200 -150 N P 10 0 1 0 300 90 300 60 330 46 270 20 330 -6 270 -33 330 -60 270 -86 300 -100 300 -150 N P 10 0 1 0 400 90 400 60 430 46 370 20 430 -6 370 -33 430 -60 370 -86 400 -100 400 -150 N P 10 0 1 0 500 90 500 60 530 46 470 20 530 -6 470 -33 530 -60 470 -86 500 -100 500 -150 N P 10 0 1 0 600 90 600 60 630 46 570 20 630 -6 570 -33 630 -60 570 -86 600 -100 600 -150 N P 2 0 1 0 -600 90 600 90 N X R1 2 -600 -200 50 U 50 50 1 1 P X R10 11 300 -200 50 U 50 50 1 1 P X R11 12 400 -200 50 U 50 50 1 1 P X R12 13 500 -200 50 U 50 50 1 1 P X R13 14 600 -200 50 U 50 50 1 1 P X R2 3 -500 -200 50 U 50 50 1 1 P X R3 4 -400 -200 50 U 50 50 1 1 P X R4 5 -300 -200 50 U 50 50 1 1 P X R5 6 -200 -200 50 U 50 50 1 1 P X R6 7 -100 -200 50 U 50 50 1 1 P X R7 8 0 -200 50 U 50 50 1 1 P X R8 9 100 -200 50 U 50 50 1 1 P X R9 10 200 -200 50 U 50 50 1 1 P X common 1 -600 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # R_Network_Dividers_x02_SIP # DEF R_Network_Dividers_x02_SIP RN 0 0 Y N 1 F N F0 "RN" -300 0 50 V V C CNN F1 "R_Network_Dividers_x02_SIP" 200 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP4" 275 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW C -200 0 10 0 1 0 F C -200 166 10 0 1 0 F C 0 0 10 0 1 0 F C 60 -166 10 0 1 0 F S -160 -133 -120 -33 0 1 10 N S -20 133 20 33 0 1 10 N S -220 133 -180 33 0 1 10 N S -250 -200 150 200 0 1 10 f S 40 -133 80 -33 0 1 10 N P 2 0 1 0 -200 -200 -200 33 N P 2 0 1 0 -200 200 -200 133 N P 2 0 1 0 0 -200 0 33 N P 2 0 1 0 100 -166 100 200 N P 3 0 1 0 -140 -133 -140 -166 100 -166 N P 3 0 1 0 -200 0 -140 0 -140 -33 N P 3 0 1 0 -200 166 0 166 0 133 N P 3 0 1 0 0 0 60 0 60 -33 N P 3 0 1 0 60 -133 60 -166 100 -166 N X COM1 1 -200 300 100 D 50 50 1 1 P X COM2 4 100 300 100 D 50 50 1 1 P X R1 2 -200 -300 100 U 50 50 1 1 P X R2 3 0 -300 100 U 50 50 1 1 P ENDDRAW ENDDEF # # R_Network_Dividers_x03_SIP # DEF R_Network_Dividers_x03_SIP RN 0 0 Y N 1 F N F0 "RN" -300 0 50 V V C CNN F1 "R_Network_Dividers_x03_SIP" 400 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP5" 475 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW C -200 0 10 0 1 0 F C -200 166 10 0 1 0 F C 0 0 10 0 1 0 F C 0 166 10 0 1 0 F C 200 0 10 0 1 0 F C 260 -166 10 0 1 0 F C 60 -166 10 0 1 0 F S -160 -133 -120 -33 0 1 10 N S -20 133 20 33 0 1 10 N S -220 133 -180 33 0 1 10 N S -250 -200 350 200 0 1 10 f S 180 133 220 33 0 1 10 N S 240 -133 280 -33 0 1 10 N S 40 -133 80 -33 0 1 10 N P 2 0 1 0 -200 -200 -200 33 N P 2 0 1 0 -200 200 -200 133 N P 2 0 1 0 0 -200 0 33 N P 2 0 1 0 200 -200 200 33 N P 2 0 1 0 300 -166 300 200 N P 3 0 1 0 -140 -133 -140 -166 300 -166 N P 3 0 1 0 -200 0 -140 0 -140 -33 N P 3 0 1 0 -200 166 0 166 0 133 N P 3 0 1 0 0 0 60 0 60 -33 N P 3 0 1 0 0 166 200 166 200 133 N P 3 0 1 0 200 0 260 0 260 -33 N P 3 0 1 0 260 -133 260 -166 300 -166 N P 3 0 1 0 60 -133 60 -166 300 -166 N X COM1 1 -200 300 100 D 50 50 1 1 P X COM2 5 300 300 100 D 50 50 1 1 P X R1 2 -200 -300 100 U 50 50 1 1 P X R2 3 0 -300 100 U 50 50 1 1 P X R3 4 200 -300 100 U 50 50 1 1 P ENDDRAW ENDDEF # # R_Network_Dividers_x04_SIP # DEF R_Network_Dividers_x04_SIP RN 0 0 Y N 1 F N F0 "RN" -500 0 50 V V C CNN F1 "R_Network_Dividers_x04_SIP" 400 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP6" 475 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW C -140 -166 10 0 1 0 F C -200 0 10 0 1 0 F C -200 166 10 0 1 0 F C -400 0 10 0 1 0 F C -400 166 10 0 1 0 F C 0 0 10 0 1 0 F C 0 166 10 0 1 0 F C 200 0 10 0 1 0 F C 260 -166 10 0 1 0 F C 60 -166 10 0 1 0 F S -160 -133 -120 -33 0 1 10 N S -20 133 20 33 0 1 10 N S -220 133 -180 33 0 1 10 N S -360 -133 -320 -33 0 1 10 N S -420 133 -380 33 0 1 10 N S -450 -200 350 200 0 1 10 f S 180 133 220 33 0 1 10 N S 240 -133 280 -33 0 1 10 N S 40 -133 80 -33 0 1 10 N P 2 0 1 0 -200 -200 -200 33 N P 2 0 1 0 -400 -200 -400 33 N P 2 0 1 0 -400 200 -400 133 N P 2 0 1 0 0 -200 0 33 N P 2 0 1 0 200 -200 200 33 N P 2 0 1 0 300 -166 300 200 N P 3 0 1 0 -140 -133 -140 -166 300 -166 N P 3 0 1 0 -200 0 -140 0 -140 -33 N P 3 0 1 0 -200 166 0 166 0 133 N P 3 0 1 0 -340 -133 -340 -166 300 -166 N P 3 0 1 0 -400 0 -340 0 -340 -33 N P 3 0 1 0 -400 166 -200 166 -200 133 N P 3 0 1 0 0 0 60 0 60 -33 N P 3 0 1 0 0 166 200 166 200 133 N P 3 0 1 0 200 0 260 0 260 -33 N P 3 0 1 0 260 -133 260 -166 300 -166 N P 3 0 1 0 60 -133 60 -166 300 -166 N X COM1 1 -400 300 100 D 50 50 1 1 P X COM2 6 300 300 100 D 50 50 1 1 P X R1 2 -400 -300 100 U 50 50 1 1 P X R2 3 -200 -300 100 U 50 50 1 1 P X R3 4 0 -300 100 U 50 50 1 1 P X R4 5 200 -300 100 U 50 50 1 1 P ENDDRAW ENDDEF # # R_Network_Dividers_x05_SIP # DEF R_Network_Dividers_x05_SIP RN 0 0 Y N 1 F N F0 "RN" -500 0 50 V V C CNN F1 "R_Network_Dividers_x05_SIP" 600 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP7" 675 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW C -140 -166 10 0 1 0 F C -200 0 10 0 1 0 F C -200 166 10 0 1 0 F C -400 0 10 0 1 0 F C -400 166 10 0 1 0 F C 0 0 10 0 1 0 F C 0 166 10 0 1 0 F C 200 0 10 0 1 0 F C 200 166 10 0 1 0 F C 260 -166 10 0 1 0 F C 400 0 10 0 1 0 F C 460 -166 10 0 1 0 F C 60 -166 10 0 1 0 F S -160 -133 -120 -33 0 1 10 N S -20 133 20 33 0 1 10 N S -220 133 -180 33 0 1 10 N S -360 -133 -320 -33 0 1 10 N S -420 133 -380 33 0 1 10 N S -450 -200 550 200 0 1 10 f S 180 133 220 33 0 1 10 N S 240 -133 280 -33 0 1 10 N S 380 133 420 33 0 1 10 N S 40 -133 80 -33 0 1 10 N S 440 -133 480 -33 0 1 10 N P 2 0 1 0 -200 -200 -200 33 N P 2 0 1 0 -400 -200 -400 33 N P 2 0 1 0 -400 200 -400 133 N P 2 0 1 0 0 -200 0 33 N P 2 0 1 0 200 -200 200 33 N P 2 0 1 0 400 -200 400 33 N P 2 0 1 0 500 -166 500 200 N P 3 0 1 0 -140 -133 -140 -166 500 -166 N P 3 0 1 0 -200 0 -140 0 -140 -33 N P 3 0 1 0 -200 166 0 166 0 133 N P 3 0 1 0 -340 -133 -340 -166 500 -166 N P 3 0 1 0 -400 0 -340 0 -340 -33 N P 3 0 1 0 -400 166 -200 166 -200 133 N P 3 0 1 0 0 0 60 0 60 -33 N P 3 0 1 0 0 166 200 166 200 133 N P 3 0 1 0 200 0 260 0 260 -33 N P 3 0 1 0 200 166 400 166 400 133 N P 3 0 1 0 260 -133 260 -166 500 -166 N P 3 0 1 0 400 0 460 0 460 -33 N P 3 0 1 0 460 -133 460 -166 500 -166 N P 3 0 1 0 60 -133 60 -166 500 -166 N X COM1 1 -400 300 100 D 50 50 1 1 P X COM2 7 500 300 100 D 50 50 1 1 P X R1 2 -400 -300 100 U 50 50 1 1 P X R2 3 -200 -300 100 U 50 50 1 1 P X R3 4 0 -300 100 U 50 50 1 1 P X R4 5 200 -300 100 U 50 50 1 1 P X R5 6 400 -300 100 U 50 50 1 1 P ENDDRAW ENDDEF # # R_Network_Dividers_x06_SIP # DEF R_Network_Dividers_x06_SIP RN 0 0 Y N 1 F N F0 "RN" -700 0 50 V V C CNN F1 "R_Network_Dividers_x06_SIP" 600 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP8" 675 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW C -140 -166 10 0 1 0 F C -200 0 10 0 1 0 F C -200 166 10 0 1 0 F C -340 -166 10 0 1 0 F C -400 0 10 0 1 0 F C -400 166 10 0 1 0 F C -600 0 10 0 1 0 F C -600 166 10 0 1 0 F C 0 0 10 0 1 0 F C 0 166 10 0 1 0 F C 200 0 10 0 1 0 F C 200 166 10 0 1 0 F C 260 -166 10 0 1 0 F C 400 0 10 0 1 0 F C 460 -166 10 0 1 0 F C 60 -166 10 0 1 0 F S -160 -133 -120 -33 0 1 10 N S -20 133 20 33 0 1 10 N S -220 133 -180 33 0 1 10 N S -360 -133 -320 -33 0 1 10 N S -420 133 -380 33 0 1 10 N S -560 -133 -520 -33 0 1 10 N S -620 133 -580 33 0 1 10 N S -650 -200 550 200 0 1 10 f S 180 133 220 33 0 1 10 N S 240 -133 280 -33 0 1 10 N S 380 133 420 33 0 1 10 N S 40 -133 80 -33 0 1 10 N S 440 -133 480 -33 0 1 10 N P 2 0 1 0 -200 -200 -200 33 N P 2 0 1 0 -400 -200 -400 33 N P 2 0 1 0 -600 -200 -600 33 N P 2 0 1 0 -600 200 -600 133 N P 2 0 1 0 0 -200 0 33 N P 2 0 1 0 200 -200 200 33 N P 2 0 1 0 400 -200 400 33 N P 2 0 1 0 500 -166 500 200 N P 3 0 1 0 -140 -133 -140 -166 500 -166 N P 3 0 1 0 -200 0 -140 0 -140 -33 N P 3 0 1 0 -200 166 0 166 0 133 N P 3 0 1 0 -340 -133 -340 -166 500 -166 N P 3 0 1 0 -400 0 -340 0 -340 -33 N P 3 0 1 0 -400 166 -200 166 -200 133 N P 3 0 1 0 -540 -133 -540 -166 500 -166 N P 3 0 1 0 -600 0 -540 0 -540 -33 N P 3 0 1 0 -600 166 -400 166 -400 133 N P 3 0 1 0 0 0 60 0 60 -33 N P 3 0 1 0 0 166 200 166 200 133 N P 3 0 1 0 200 0 260 0 260 -33 N P 3 0 1 0 200 166 400 166 400 133 N P 3 0 1 0 260 -133 260 -166 500 -166 N P 3 0 1 0 400 0 460 0 460 -33 N P 3 0 1 0 460 -133 460 -166 500 -166 N P 3 0 1 0 60 -133 60 -166 500 -166 N X COM1 1 -600 300 100 D 50 50 1 1 P X COM2 8 500 300 100 D 50 50 1 1 P X R1 2 -600 -300 100 U 50 50 1 1 P X R2 3 -400 -300 100 U 50 50 1 1 P X R3 4 -200 -300 100 U 50 50 1 1 P X R4 5 0 -300 100 U 50 50 1 1 P X R5 6 200 -300 100 U 50 50 1 1 P X R6 7 400 -300 100 U 50 50 1 1 P ENDDRAW ENDDEF # # R_Network_Dividers_x07_SIP # DEF R_Network_Dividers_x07_SIP RN 0 0 Y N 1 F N F0 "RN" -700 0 50 V V C CNN F1 "R_Network_Dividers_x07_SIP" 800 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP9" 875 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW C -140 -166 10 0 1 0 F C -200 0 10 0 1 0 F C -200 166 10 0 1 0 F C -340 -166 10 0 1 0 F C -400 0 10 0 1 0 F C -400 166 10 0 1 0 F C -600 0 10 0 1 0 F C -600 166 10 0 1 0 F C 0 0 10 0 1 0 F C 0 166 10 0 1 0 F C 200 0 10 0 1 0 F C 200 166 10 0 1 0 F C 260 -166 10 0 1 0 F C 400 0 10 0 1 0 F C 400 166 10 0 1 0 F C 460 -166 10 0 1 0 F C 60 -166 10 0 1 0 F C 600 0 10 0 1 0 F C 660 -166 10 0 1 0 F S -160 -133 -120 -33 0 1 10 N S -20 133 20 33 0 1 10 N S -220 133 -180 33 0 1 10 N S -360 -133 -320 -33 0 1 10 N S -420 133 -380 33 0 1 10 N S -560 -133 -520 -33 0 1 10 N S -620 133 -580 33 0 1 10 N S -650 -200 750 200 0 1 10 f S 180 133 220 33 0 1 10 N S 240 -133 280 -33 0 1 10 N S 380 133 420 33 0 1 10 N S 40 -133 80 -33 0 1 10 N S 440 -133 480 -33 0 1 10 N S 580 133 620 33 0 1 10 N S 640 -133 680 -33 0 1 10 N P 2 0 1 0 -200 -200 -200 33 N P 2 0 1 0 -400 -200 -400 33 N P 2 0 1 0 -600 -200 -600 33 N P 2 0 1 0 -600 200 -600 133 N P 2 0 1 0 0 -200 0 33 N P 2 0 1 0 200 -200 200 33 N P 2 0 1 0 400 -200 400 33 N P 2 0 1 0 600 -200 600 33 N P 2 0 1 0 700 -166 700 200 N P 3 0 1 0 -140 -133 -140 -166 700 -166 N P 3 0 1 0 -200 0 -140 0 -140 -33 N P 3 0 1 0 -200 166 0 166 0 133 N P 3 0 1 0 -340 -133 -340 -166 700 -166 N P 3 0 1 0 -400 0 -340 0 -340 -33 N P 3 0 1 0 -400 166 -200 166 -200 133 N P 3 0 1 0 -540 -133 -540 -166 700 -166 N P 3 0 1 0 -600 0 -540 0 -540 -33 N P 3 0 1 0 -600 166 -400 166 -400 133 N P 3 0 1 0 0 0 60 0 60 -33 N P 3 0 1 0 0 166 200 166 200 133 N P 3 0 1 0 200 0 260 0 260 -33 N P 3 0 1 0 200 166 400 166 400 133 N P 3 0 1 0 260 -133 260 -166 700 -166 N P 3 0 1 0 400 0 460 0 460 -33 N P 3 0 1 0 400 166 600 166 600 133 N P 3 0 1 0 460 -133 460 -166 700 -166 N P 3 0 1 0 60 -133 60 -166 700 -166 N P 3 0 1 0 600 0 660 0 660 -33 N P 3 0 1 0 660 -133 660 -166 700 -166 N X COM1 1 -600 300 100 D 50 50 1 1 P X COM2 9 700 300 100 D 50 50 1 1 P X R1 2 -600 -300 100 U 50 50 1 1 P X R2 3 -400 -300 100 U 50 50 1 1 P X R3 4 -200 -300 100 U 50 50 1 1 P X R4 5 0 -300 100 U 50 50 1 1 P X R5 6 200 -300 100 U 50 50 1 1 P X R6 7 400 -300 100 U 50 50 1 1 P X R7 8 600 -300 100 U 50 50 1 1 P ENDDRAW ENDDEF # # R_Network_Dividers_x08_SIP # DEF R_Network_Dividers_x08_SIP RN 0 0 Y N 1 F N F0 "RN" -900 0 50 V V C CNN F1 "R_Network_Dividers_x08_SIP" 800 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP10" 875 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW C -140 -166 10 0 1 0 F C -200 0 10 0 1 0 F C -200 166 10 0 1 0 F C -340 -166 10 0 1 0 F C -400 0 10 0 1 0 F C -400 166 10 0 1 0 F C -540 -166 10 0 1 0 F C -600 0 10 0 1 0 F C -600 166 10 0 1 0 F C -800 0 10 0 1 0 F C -800 166 10 0 1 0 F C 0 0 10 0 1 0 F C 0 166 10 0 1 0 F C 200 0 10 0 1 0 F C 200 166 10 0 1 0 F C 260 -166 10 0 1 0 F C 400 0 10 0 1 0 F C 400 166 10 0 1 0 F C 460 -166 10 0 1 0 F C 60 -166 10 0 1 0 F C 600 0 10 0 1 0 F C 660 -166 10 0 1 0 F S -160 -133 -120 -33 0 1 10 N S -20 133 20 33 0 1 10 N S -220 133 -180 33 0 1 10 N S -360 -133 -320 -33 0 1 10 N S -420 133 -380 33 0 1 10 N S -560 -133 -520 -33 0 1 10 N S -620 133 -580 33 0 1 10 N S -760 -133 -720 -33 0 1 10 N S -820 133 -780 33 0 1 10 N S -850 -200 750 200 0 1 10 f S 180 133 220 33 0 1 10 N S 240 -133 280 -33 0 1 10 N S 380 133 420 33 0 1 10 N S 40 -133 80 -33 0 1 10 N S 440 -133 480 -33 0 1 10 N S 580 133 620 33 0 1 10 N S 640 -133 680 -33 0 1 10 N P 2 0 1 0 -200 -200 -200 33 N P 2 0 1 0 -400 -200 -400 33 N P 2 0 1 0 -600 -200 -600 33 N P 2 0 1 0 -800 -200 -800 33 N P 2 0 1 0 -800 200 -800 133 N P 2 0 1 0 0 -200 0 33 N P 2 0 1 0 200 -200 200 33 N P 2 0 1 0 400 -200 400 33 N P 2 0 1 0 600 -200 600 33 N P 2 0 1 0 700 -166 700 200 N P 3 0 1 0 -140 -133 -140 -166 700 -166 N P 3 0 1 0 -200 0 -140 0 -140 -33 N P 3 0 1 0 -200 166 0 166 0 133 N P 3 0 1 0 -340 -133 -340 -166 700 -166 N P 3 0 1 0 -400 0 -340 0 -340 -33 N P 3 0 1 0 -400 166 -200 166 -200 133 N P 3 0 1 0 -540 -133 -540 -166 700 -166 N P 3 0 1 0 -600 0 -540 0 -540 -33 N P 3 0 1 0 -600 166 -400 166 -400 133 N P 3 0 1 0 -740 -133 -740 -166 700 -166 N P 3 0 1 0 -800 0 -740 0 -740 -33 N P 3 0 1 0 -800 166 -600 166 -600 133 N P 3 0 1 0 0 0 60 0 60 -33 N P 3 0 1 0 0 166 200 166 200 133 N P 3 0 1 0 200 0 260 0 260 -33 N P 3 0 1 0 200 166 400 166 400 133 N P 3 0 1 0 260 -133 260 -166 700 -166 N P 3 0 1 0 400 0 460 0 460 -33 N P 3 0 1 0 400 166 600 166 600 133 N P 3 0 1 0 460 -133 460 -166 700 -166 N P 3 0 1 0 60 -133 60 -166 700 -166 N P 3 0 1 0 600 0 660 0 660 -33 N P 3 0 1 0 660 -133 660 -166 700 -166 N X COM1 1 -800 300 100 D 50 50 1 1 P X COM2 10 700 300 100 D 50 50 1 1 P X R1 2 -800 -300 100 U 50 50 1 1 P X R2 3 -600 -300 100 U 50 50 1 1 P X R3 4 -400 -300 100 U 50 50 1 1 P X R4 5 -200 -300 100 U 50 50 1 1 P X R5 6 0 -300 100 U 50 50 1 1 P X R6 7 200 -300 100 U 50 50 1 1 P X R7 8 400 -300 100 U 50 50 1 1 P X R8 9 600 -300 100 U 50 50 1 1 P ENDDRAW ENDDEF # # R_Network_Dividers_x09_SIP # DEF R_Network_Dividers_x09_SIP RN 0 0 Y N 1 F N F0 "RN" -900 0 50 V V C CNN F1 "R_Network_Dividers_x09_SIP" 1000 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP11" 1075 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW C -140 -166 10 0 1 0 F C -200 0 10 0 1 0 F C -200 166 10 0 1 0 F C -340 -166 10 0 1 0 F C -400 0 10 0 1 0 F C -400 166 10 0 1 0 F C -540 -166 10 0 1 0 F C -600 0 10 0 1 0 F C -600 166 10 0 1 0 F C -800 0 10 0 1 0 F C -800 166 10 0 1 0 F C 0 0 10 0 1 0 F C 0 166 10 0 1 0 F C 200 0 10 0 1 0 F C 200 166 10 0 1 0 F C 260 -166 10 0 1 0 F C 400 0 10 0 1 0 F C 400 166 10 0 1 0 F C 460 -166 10 0 1 0 F C 60 -166 10 0 1 0 F C 600 0 10 0 1 0 F C 600 166 10 0 1 0 F C 660 -166 10 0 1 0 F C 800 0 10 0 1 0 F C 860 -166 10 0 1 0 F S -160 -133 -120 -33 0 1 10 N S -20 133 20 33 0 1 10 N S -220 133 -180 33 0 1 10 N S -360 -133 -320 -33 0 1 10 N S -420 133 -380 33 0 1 10 N S -560 -133 -520 -33 0 1 10 N S -620 133 -580 33 0 1 10 N S -760 -133 -720 -33 0 1 10 N S -820 133 -780 33 0 1 10 N S -850 -200 950 200 0 1 10 f S 180 133 220 33 0 1 10 N S 240 -133 280 -33 0 1 10 N S 380 133 420 33 0 1 10 N S 40 -133 80 -33 0 1 10 N S 440 -133 480 -33 0 1 10 N S 580 133 620 33 0 1 10 N S 640 -133 680 -33 0 1 10 N S 780 133 820 33 0 1 10 N S 840 -133 880 -33 0 1 10 N P 2 0 1 0 -200 -200 -200 33 N P 2 0 1 0 -400 -200 -400 33 N P 2 0 1 0 -600 -200 -600 33 N P 2 0 1 0 -800 -200 -800 33 N P 2 0 1 0 -800 200 -800 133 N P 2 0 1 0 0 -200 0 33 N P 2 0 1 0 200 -200 200 33 N P 2 0 1 0 400 -200 400 33 N P 2 0 1 0 600 -200 600 33 N P 2 0 1 0 800 -200 800 33 N P 2 0 1 0 900 -166 900 200 N P 3 0 1 0 -140 -133 -140 -166 900 -166 N P 3 0 1 0 -200 0 -140 0 -140 -33 N P 3 0 1 0 -200 166 0 166 0 133 N P 3 0 1 0 -340 -133 -340 -166 900 -166 N P 3 0 1 0 -400 0 -340 0 -340 -33 N P 3 0 1 0 -400 166 -200 166 -200 133 N P 3 0 1 0 -540 -133 -540 -166 900 -166 N P 3 0 1 0 -600 0 -540 0 -540 -33 N P 3 0 1 0 -600 166 -400 166 -400 133 N P 3 0 1 0 -740 -133 -740 -166 900 -166 N P 3 0 1 0 -800 0 -740 0 -740 -33 N P 3 0 1 0 -800 166 -600 166 -600 133 N P 3 0 1 0 0 0 60 0 60 -33 N P 3 0 1 0 0 166 200 166 200 133 N P 3 0 1 0 200 0 260 0 260 -33 N P 3 0 1 0 200 166 400 166 400 133 N P 3 0 1 0 260 -133 260 -166 900 -166 N P 3 0 1 0 400 0 460 0 460 -33 N P 3 0 1 0 400 166 600 166 600 133 N P 3 0 1 0 460 -133 460 -166 900 -166 N P 3 0 1 0 60 -133 60 -166 900 -166 N P 3 0 1 0 600 0 660 0 660 -33 N P 3 0 1 0 600 166 800 166 800 133 N P 3 0 1 0 660 -133 660 -166 900 -166 N P 3 0 1 0 800 0 860 0 860 -33 N P 3 0 1 0 860 -133 860 -166 900 -166 N X COM1 1 -800 300 100 D 50 50 1 1 P X COM2 11 900 300 100 D 50 50 1 1 P X R1 2 -800 -300 100 U 50 50 1 1 P X R2 3 -600 -300 100 U 50 50 1 1 P X R3 4 -400 -300 100 U 50 50 1 1 P X R4 5 -200 -300 100 U 50 50 1 1 P X R5 6 0 -300 100 U 50 50 1 1 P X R6 7 200 -300 100 U 50 50 1 1 P X R7 8 400 -300 100 U 50 50 1 1 P X R8 9 600 -300 100 U 50 50 1 1 P X R9 10 800 -300 100 U 50 50 1 1 P ENDDRAW ENDDEF # # R_Network_Dividers_x10_SIP # DEF R_Network_Dividers_x10_SIP RN 0 0 Y N 1 F N F0 "RN" -1100 0 50 V V C CNN F1 "R_Network_Dividers_x10_SIP" 1000 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP12" 1075 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW C -1000 0 10 0 1 0 F C -1000 166 10 0 1 0 F C -140 -166 10 0 1 0 F C -200 0 10 0 1 0 F C -200 166 10 0 1 0 F C -340 -166 10 0 1 0 F C -400 0 10 0 1 0 F C -400 166 10 0 1 0 F C -540 -166 10 0 1 0 F C -600 0 10 0 1 0 F C -600 166 10 0 1 0 F C -740 -166 10 0 1 0 F C -800 0 10 0 1 0 F C -800 166 10 0 1 0 F C 0 0 10 0 1 0 F C 0 166 10 0 1 0 F C 200 0 10 0 1 0 F C 200 166 10 0 1 0 F C 260 -166 10 0 1 0 F C 400 0 10 0 1 0 F C 400 166 10 0 1 0 F C 460 -166 10 0 1 0 F C 60 -166 10 0 1 0 F C 600 0 10 0 1 0 F C 600 166 10 0 1 0 F C 660 -166 10 0 1 0 F C 800 0 10 0 1 0 F C 860 -166 10 0 1 0 F S -1020 133 -980 33 0 1 10 N S -1050 -200 950 200 0 1 10 f S -160 -133 -120 -33 0 1 10 N S -20 133 20 33 0 1 10 N S -220 133 -180 33 0 1 10 N S -360 -133 -320 -33 0 1 10 N S -420 133 -380 33 0 1 10 N S -560 -133 -520 -33 0 1 10 N S -620 133 -580 33 0 1 10 N S -760 -133 -720 -33 0 1 10 N S -820 133 -780 33 0 1 10 N S -960 -133 -920 -33 0 1 10 N S 180 133 220 33 0 1 10 N S 240 -133 280 -33 0 1 10 N S 380 133 420 33 0 1 10 N S 40 -133 80 -33 0 1 10 N S 440 -133 480 -33 0 1 10 N S 580 133 620 33 0 1 10 N S 640 -133 680 -33 0 1 10 N S 780 133 820 33 0 1 10 N S 840 -133 880 -33 0 1 10 N P 2 0 1 0 -1000 -200 -1000 33 N P 2 0 1 0 -1000 200 -1000 133 N P 2 0 1 0 -200 -200 -200 33 N P 2 0 1 0 -400 -200 -400 33 N P 2 0 1 0 -600 -200 -600 33 N P 2 0 1 0 -800 -200 -800 33 N P 2 0 1 0 0 -200 0 33 N P 2 0 1 0 200 -200 200 33 N P 2 0 1 0 400 -200 400 33 N P 2 0 1 0 600 -200 600 33 N P 2 0 1 0 800 -200 800 33 N P 2 0 1 0 900 -166 900 200 N P 3 0 1 0 -1000 0 -940 0 -940 -33 N P 3 0 1 0 -1000 166 -800 166 -800 133 N P 3 0 1 0 -140 -133 -140 -166 900 -166 N P 3 0 1 0 -200 0 -140 0 -140 -33 N P 3 0 1 0 -200 166 0 166 0 133 N P 3 0 1 0 -340 -133 -340 -166 900 -166 N P 3 0 1 0 -400 0 -340 0 -340 -33 N P 3 0 1 0 -400 166 -200 166 -200 133 N P 3 0 1 0 -540 -133 -540 -166 900 -166 N P 3 0 1 0 -600 0 -540 0 -540 -33 N P 3 0 1 0 -600 166 -400 166 -400 133 N P 3 0 1 0 -740 -133 -740 -166 900 -166 N P 3 0 1 0 -800 0 -740 0 -740 -33 N P 3 0 1 0 -800 166 -600 166 -600 133 N P 3 0 1 0 -940 -133 -940 -166 900 -166 N P 3 0 1 0 0 0 60 0 60 -33 N P 3 0 1 0 0 166 200 166 200 133 N P 3 0 1 0 200 0 260 0 260 -33 N P 3 0 1 0 200 166 400 166 400 133 N P 3 0 1 0 260 -133 260 -166 900 -166 N P 3 0 1 0 400 0 460 0 460 -33 N P 3 0 1 0 400 166 600 166 600 133 N P 3 0 1 0 460 -133 460 -166 900 -166 N P 3 0 1 0 60 -133 60 -166 900 -166 N P 3 0 1 0 600 0 660 0 660 -33 N P 3 0 1 0 600 166 800 166 800 133 N P 3 0 1 0 660 -133 660 -166 900 -166 N P 3 0 1 0 800 0 860 0 860 -33 N P 3 0 1 0 860 -133 860 -166 900 -166 N X COM1 1 -1000 300 100 D 50 50 1 1 P X COM2 12 900 300 100 D 50 50 1 1 P X R1 2 -1000 -300 100 U 50 50 1 1 P X R10 11 800 -300 100 U 50 50 1 1 P X R2 3 -800 -300 100 U 50 50 1 1 P X R3 4 -600 -300 100 U 50 50 1 1 P X R4 5 -400 -300 100 U 50 50 1 1 P X R5 6 -200 -300 100 U 50 50 1 1 P X R6 7 0 -300 100 U 50 50 1 1 P X R7 8 200 -300 100 U 50 50 1 1 P X R8 9 400 -300 100 U 50 50 1 1 P X R9 10 600 -300 100 U 50 50 1 1 P ENDDRAW ENDDEF # # R_Network_Dividers_x11_SIP # DEF R_Network_Dividers_x11_SIP RN 0 0 Y N 1 F N F0 "RN" -1100 0 50 V V C CNN F1 "R_Network_Dividers_x11_SIP" 1200 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP13" 1275 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW C -1000 0 10 0 1 0 F C -1000 166 10 0 1 0 F C -140 -166 10 0 1 0 F C -200 0 10 0 1 0 F C -200 166 10 0 1 0 F C -340 -166 10 0 1 0 F C -400 0 10 0 1 0 F C -400 166 10 0 1 0 F C -540 -166 10 0 1 0 F C -600 0 10 0 1 0 F C -600 166 10 0 1 0 F C -740 -166 10 0 1 0 F C -800 0 10 0 1 0 F C -800 166 10 0 1 0 F C 0 0 10 0 1 0 F C 0 166 10 0 1 0 F C 1000 0 10 0 1 0 F C 1060 -166 10 0 1 0 F C 200 0 10 0 1 0 F C 200 166 10 0 1 0 F C 260 -166 10 0 1 0 F C 400 0 10 0 1 0 F C 400 166 10 0 1 0 F C 460 -166 10 0 1 0 F C 60 -166 10 0 1 0 F C 600 0 10 0 1 0 F C 600 166 10 0 1 0 F C 660 -166 10 0 1 0 F C 800 0 10 0 1 0 F C 800 166 10 0 1 0 F C 860 -166 10 0 1 0 F S -1020 133 -980 33 0 1 10 N S -1050 -200 1150 200 0 1 10 f S -160 -133 -120 -33 0 1 10 N S -20 133 20 33 0 1 10 N S -220 133 -180 33 0 1 10 N S -360 -133 -320 -33 0 1 10 N S -420 133 -380 33 0 1 10 N S -560 -133 -520 -33 0 1 10 N S -620 133 -580 33 0 1 10 N S -760 -133 -720 -33 0 1 10 N S -820 133 -780 33 0 1 10 N S -960 -133 -920 -33 0 1 10 N S 1040 -133 1080 -33 0 1 10 N S 180 133 220 33 0 1 10 N S 240 -133 280 -33 0 1 10 N S 380 133 420 33 0 1 10 N S 40 -133 80 -33 0 1 10 N S 440 -133 480 -33 0 1 10 N S 580 133 620 33 0 1 10 N S 640 -133 680 -33 0 1 10 N S 780 133 820 33 0 1 10 N S 840 -133 880 -33 0 1 10 N S 980 133 1020 33 0 1 10 N P 2 0 1 0 -1000 -200 -1000 33 N P 2 0 1 0 -1000 200 -1000 133 N P 2 0 1 0 -200 -200 -200 33 N P 2 0 1 0 -400 -200 -400 33 N P 2 0 1 0 -600 -200 -600 33 N P 2 0 1 0 -800 -200 -800 33 N P 2 0 1 0 0 -200 0 33 N P 2 0 1 0 1000 -200 1000 33 N P 2 0 1 0 1100 -166 1100 200 N P 2 0 1 0 200 -200 200 33 N P 2 0 1 0 400 -200 400 33 N P 2 0 1 0 600 -200 600 33 N P 2 0 1 0 800 -200 800 33 N P 3 0 1 0 -1000 0 -940 0 -940 -33 N P 3 0 1 0 -1000 166 -800 166 -800 133 N P 3 0 1 0 -140 -133 -140 -166 1100 -166 N P 3 0 1 0 -200 0 -140 0 -140 -33 N P 3 0 1 0 -200 166 0 166 0 133 N P 3 0 1 0 -340 -133 -340 -166 1100 -166 N P 3 0 1 0 -400 0 -340 0 -340 -33 N P 3 0 1 0 -400 166 -200 166 -200 133 N P 3 0 1 0 -540 -133 -540 -166 1100 -166 N P 3 0 1 0 -600 0 -540 0 -540 -33 N P 3 0 1 0 -600 166 -400 166 -400 133 N P 3 0 1 0 -740 -133 -740 -166 1100 -166 N P 3 0 1 0 -800 0 -740 0 -740 -33 N P 3 0 1 0 -800 166 -600 166 -600 133 N P 3 0 1 0 -940 -133 -940 -166 1100 -166 N P 3 0 1 0 0 0 60 0 60 -33 N P 3 0 1 0 0 166 200 166 200 133 N P 3 0 1 0 1000 0 1060 0 1060 -33 N P 3 0 1 0 1060 -133 1060 -166 1100 -166 N P 3 0 1 0 200 0 260 0 260 -33 N P 3 0 1 0 200 166 400 166 400 133 N P 3 0 1 0 260 -133 260 -166 1100 -166 N P 3 0 1 0 400 0 460 0 460 -33 N P 3 0 1 0 400 166 600 166 600 133 N P 3 0 1 0 460 -133 460 -166 1100 -166 N P 3 0 1 0 60 -133 60 -166 1100 -166 N P 3 0 1 0 600 0 660 0 660 -33 N P 3 0 1 0 600 166 800 166 800 133 N P 3 0 1 0 660 -133 660 -166 1100 -166 N P 3 0 1 0 800 0 860 0 860 -33 N P 3 0 1 0 800 166 1000 166 1000 133 N P 3 0 1 0 860 -133 860 -166 1100 -166 N X COM1 1 -1000 300 100 D 50 50 1 1 P X COM2 13 1100 300 100 D 50 50 1 1 P X R1 2 -1000 -300 100 U 50 50 1 1 P X R10 11 800 -300 100 U 50 50 1 1 P X R11 12 1000 -300 100 U 50 50 1 1 P X R2 3 -800 -300 100 U 50 50 1 1 P X R3 4 -600 -300 100 U 50 50 1 1 P X R4 5 -400 -300 100 U 50 50 1 1 P X R5 6 -200 -300 100 U 50 50 1 1 P X R6 7 0 -300 100 U 50 50 1 1 P X R7 8 200 -300 100 U 50 50 1 1 P X R8 9 400 -300 100 U 50 50 1 1 P X R9 10 600 -300 100 U 50 50 1 1 P ENDDRAW ENDDEF # # R_PHOTO # DEF R_PHOTO R 0 0 N Y 1 F N F0 "R" 50 50 50 H V L CNN F1 "R_PHOTO" 50 0 50 H V L TNN F2 "" 50 -250 50 V I L CNN F3 "" 0 -50 50 H I C CNN $FPLIST *LDR* R?LDR* $ENDFPLIST DRAW S -40 100 40 -100 0 1 10 N P 2 0 1 0 -60 -90 -160 10 N P 2 0 1 0 -60 -90 -90 -90 N P 2 0 1 0 -60 -90 -60 -60 N P 2 0 1 0 -60 -30 -160 70 N P 2 0 1 0 -60 -30 -90 -30 N P 2 0 1 0 -60 -30 -60 0 N X ~ 1 0 150 50 D 50 50 1 1 P X ~ 2 0 -150 50 U 50 50 1 1 P ENDDRAW ENDDEF # # R_POT # DEF R_POT RV 0 40 Y N 1 F N F0 "RV" -175 0 50 V V C CNN F1 "R_POT" -100 0 50 V V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Potentiometer* $ENDFPLIST DRAW S 40 100 -40 -100 0 1 10 N P 2 0 1 0 100 0 60 0 N P 4 0 1 0 45 0 90 20 90 -20 45 0 F X 1 1 0 150 50 D 50 50 1 1 P X 2 2 150 0 50 L 50 50 1 1 P X 3 3 0 -150 50 U 50 50 1 1 P ENDDRAW ENDDEF # # R_POT_Dual # DEF R_POT_Dual RV 0 40 Y N 1 F N F0 "RV" 0 150 50 H V C CNN F1 "R_POT_Dual" 0 75 50 H V C CNN F2 "" 250 -75 50 H I C CNN F3 "" 250 -75 50 H I C CNN $FPLIST Potentiometer* $ENDFPLIST DRAW S -350 -60 -150 -140 0 1 10 N S 150 -60 350 -140 0 1 10 N P 2 0 1 0 -250 0 -250 -40 N P 2 0 1 0 -250 0 -250 -40 N P 2 0 1 0 -250 0 -230 20 N P 2 0 1 0 -220 20 -200 20 N P 2 0 1 0 -180 20 -160 20 N P 2 0 1 0 -140 20 -120 20 N P 2 0 1 0 -100 20 -80 20 N P 2 0 1 0 -60 20 -40 20 N P 2 0 1 0 -20 20 0 20 N P 2 0 1 0 20 20 40 20 N P 2 0 1 0 60 20 80 20 N P 2 0 1 0 100 20 120 20 N P 2 0 1 0 140 20 160 20 N P 2 0 1 0 180 20 200 20 N P 2 0 1 0 220 20 240 20 N P 2 0 1 0 250 0 250 -40 N P 2 0 1 0 250 0 250 -40 N P 3 0 1 0 260 20 270 20 250 0 N P 4 0 1 0 -250 -55 -270 -10 -230 -10 -250 -55 F P 4 0 1 0 250 -55 230 -10 270 -10 250 -55 F X 1 1 -400 -100 50 R 50 50 1 1 P X 2 2 -250 100 100 D 50 50 1 1 P X 3 3 -100 -100 50 L 50 50 1 1 P X 4 4 100 -100 50 R 50 50 1 1 P X 5 5 250 100 100 D 50 50 1 1 P X 6 6 400 -100 50 L 50 50 1 1 P ENDDRAW ENDDEF # # R_POT_Dual_Separate # DEF R_POT_Dual_Separate RV 0 40 Y N 2 F N F0 "RV" -175 0 50 V V C CNN F1 "R_POT_Dual_Separate" -100 0 50 V V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Potentiometer* $ENDFPLIST DRAW S 40 100 -40 -100 0 1 10 N P 2 0 1 0 100 0 60 0 N P 4 0 1 0 45 0 90 20 90 -20 45 0 F X 1 1 0 150 50 D 50 50 1 1 P X 2 2 150 0 50 L 50 50 1 1 P X 3 3 0 -150 50 U 50 50 1 1 P X 4 4 0 150 50 D 50 50 2 1 P X 5 5 150 0 50 L 50 50 2 1 P X 6 6 0 -150 50 U 50 50 2 1 P ENDDRAW ENDDEF # # R_POT_MountingPin # DEF R_POT_MountingPin RV 0 40 Y N 1 F N F0 "RV" -325 0 50 V V C CNN F1 "R_POT_MountingPin" -250 0 50 V V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Potentiometer* $ENDFPLIST DRAW S 40 100 -40 -100 0 1 10 N P 2 0 1 0 100 0 60 0 N P 3 0 1 0 45 0 90 20 90 -20 F T 900 -65 0 15 0 1 1 Mounting Normal 0 C C P 2 1 1 6 -80 40 -80 -40 N X 1 1 0 150 50 D 50 50 1 1 P X 2 2 150 0 50 L 50 50 1 1 P X 3 3 0 -150 50 U 50 50 1 1 P X MountPin MP -200 0 120 R 50 50 1 1 P ENDDRAW ENDDEF # # R_POT_Small # DEF R_POT_Small RV 0 40 Y N 1 F N F0 "RV" -175 0 50 V V C CNN F1 "R_POT_Small" -100 0 50 V V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Potentiometer* $ENDFPLIST DRAW S 30 71 -30 -71 0 1 10 N P 6 0 1 0 35 0 25 0 65 15 65 -15 25 0 35 0 F X 1 1 0 100 25 D 25 25 1 1 P X 2 2 100 0 39 L 25 25 1 1 P X 3 3 0 -100 25 U 25 25 1 1 P ENDDRAW ENDDEF # # R_POT_TRIM # DEF R_POT_TRIM RV 0 40 Y N 1 F N F0 "RV" -175 0 50 V V C CNN F1 "R_POT_TRIM" -100 0 50 V V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Potentiometer* $ENDFPLIST DRAW S 40 100 -40 -100 0 1 10 N P 2 0 1 0 60 30 60 -30 N P 2 0 1 0 100 0 60 0 N X 1 1 0 150 50 D 50 50 1 1 P X 2 2 150 0 50 L 50 50 1 1 P X 3 3 0 -150 50 U 50 50 1 1 P ENDDRAW ENDDEF # # R_POT_TRIM_US # DEF R_POT_TRIM_US RV 0 40 Y N 1 F N F0 "RV" -175 0 50 V V C CNN F1 "R_POT_TRIM_US" -100 0 50 V V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Potentiometer* $ENDFPLIST DRAW P 2 0 1 0 0 -90 0 -100 N P 2 0 1 0 0 90 0 100 N P 2 0 1 0 60 30 60 -30 N P 2 0 1 0 100 0 60 0 N P 5 0 1 0 0 -30 40 -45 0 -60 -40 -75 0 -90 N P 5 0 1 0 0 30 40 15 0 0 -40 -15 0 -30 N P 5 0 1 0 0 90 40 75 0 60 -40 45 0 30 N X 1 1 0 150 50 D 50 50 1 1 P X 2 2 150 0 50 L 50 50 1 1 P X 3 3 0 -150 50 U 50 50 1 1 P ENDDRAW ENDDEF # # R_POT_US # DEF R_POT_US RV 0 40 Y N 1 F N F0 "RV" -175 0 50 V V C CNN F1 "R_POT_US" -100 0 50 V V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Potentiometer* $ENDFPLIST DRAW P 2 0 1 0 0 -90 0 -100 N P 2 0 1 0 0 100 0 90 N P 2 0 1 0 100 0 60 0 N P 4 0 1 0 45 0 90 20 90 -20 45 0 F P 5 0 1 0 0 -30 40 -45 0 -60 -40 -75 0 -90 N P 5 0 1 0 0 30 40 15 0 0 -40 -15 0 -30 N P 5 0 1 0 0 90 40 75 0 60 -40 45 0 30 N X 1 1 0 150 50 D 50 50 1 1 P X 2 2 150 0 50 L 50 50 1 1 P X 3 3 0 -150 50 U 50 50 1 1 P ENDDRAW ENDDEF # # R_Pack02 # DEF R_Pack02 RN 0 0 Y N 1 F N F0 "RN" -200 0 50 V V C CNN F1 "R_Pack02" 100 0 50 V V C CNN F2 "" 175 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP* SOIC* R*Array*Concave* R*Array*Convex* $ENDFPLIST DRAW S -125 75 -75 -75 0 1 10 N S -150 -95 50 95 0 1 10 f S -25 75 25 -75 0 1 10 N P 2 0 1 0 -100 -100 -100 -75 N P 2 0 1 0 -100 75 -100 100 N P 2 0 1 0 0 -100 0 -75 N P 2 0 1 0 0 75 0 100 N X R1.1 1 -100 -200 100 U 50 50 1 1 P X R1.2 4 -100 200 100 D 50 50 1 1 P X R2.1 2 0 -200 100 U 50 50 1 1 P X R2.2 3 0 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # R_Pack02_SIP # DEF R_Pack02_SIP RN 0 0 Y N 1 F N F0 "RN" -300 0 50 V V C CNN F1 "R_Pack02_SIP" 300 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP4" 375 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW S -230 110 -170 -50 0 1 10 N S -250 -75 250 175 0 1 10 f S 70 110 130 -50 0 1 10 N P 4 0 1 0 -200 110 -200 140 -100 140 -100 -50 N P 4 0 1 0 100 110 100 140 200 140 200 -50 N X R1.1 1 -200 -200 150 U 50 50 1 1 P X R1.2 2 -100 -200 150 U 50 50 1 1 P X R2.1 3 100 -200 150 U 50 50 1 1 P X R2.2 4 200 -200 150 U 50 50 1 1 P ENDDRAW ENDDEF # # R_Pack02_SIP_Split # DEF R_Pack02_SIP_Split RN 0 0 Y N 2 F N F0 "RN" 80 0 50 V V C CNN F1 "R_Pack02_SIP_Split" 0 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP4" -80 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW S 40 100 -40 -100 0 1 10 N X R1.1 1 0 -150 50 U 50 50 1 1 P X R1.2 2 0 150 50 D 50 50 1 1 P X R2.1 3 0 -150 50 U 50 50 2 1 P X R2.2 4 0 150 50 D 50 50 2 1 P ENDDRAW ENDDEF # # R_Pack02_Split # DEF R_Pack02_Split RN 0 0 Y N 2 F N F0 "RN" 80 0 50 V V C CNN F1 "R_Pack02_Split" 0 0 50 V V C CNN F2 "" -80 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP* SOIC* R*Array*Concave* R*Array*Convex* $ENDFPLIST DRAW S 40 100 -40 -100 0 1 10 N X R1.1 1 0 -150 50 U 50 50 1 1 P X R1.2 4 0 150 50 D 50 50 1 1 P X R2.1 2 0 -150 50 U 50 50 2 1 P X R2.2 3 0 150 50 D 50 50 2 1 P ENDDRAW ENDDEF # # R_Pack03 # DEF R_Pack03 RN 0 0 Y N 1 F N F0 "RN" -200 0 50 V V C CNN F1 "R_Pack03" 200 0 50 V V C CNN F2 "" 275 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP* SOIC* R*Array*Concave* R*Array*Convex* $ENDFPLIST DRAW S -125 75 -75 -75 0 1 10 N S -150 -95 150 95 0 1 10 f S -25 75 25 -75 0 1 10 N S 75 75 125 -75 0 1 10 N P 2 0 1 0 -100 -100 -100 -75 N P 2 0 1 0 -100 75 -100 100 N P 2 0 1 0 0 -100 0 -75 N P 2 0 1 0 0 75 0 100 N P 2 0 1 0 100 -100 100 -75 N P 2 0 1 0 100 75 100 100 N X R1.1 1 -100 -200 100 U 50 50 1 1 P X R1.2 6 -100 200 100 D 50 50 1 1 P X R2.1 2 0 -200 100 U 50 50 1 1 P X R2.2 5 0 200 100 D 50 50 1 1 P X R3.1 3 100 -200 100 U 50 50 1 1 P X R3.2 4 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # R_Pack03_SIP # DEF R_Pack03_SIP RN 0 0 Y N 1 F N F0 "RN" -400 0 50 V V C CNN F1 "R_Pack03_SIP" 500 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP6" 575 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW S -30 110 30 -50 0 1 10 N S -330 110 -270 -50 0 1 10 N S -350 -75 450 175 0 1 10 f S 270 110 330 -50 0 1 10 N P 4 0 1 0 -300 110 -300 140 -200 140 -200 -50 N P 4 0 1 0 0 110 0 140 100 140 100 -50 N P 4 0 1 0 300 110 300 140 400 140 400 -50 N X R1.1 1 -300 -200 150 U 50 50 1 1 P X R1.2 2 -200 -200 150 U 50 50 1 1 P X R2.1 3 0 -200 150 U 50 50 1 1 P X R2.2 4 100 -200 150 U 50 50 1 1 P X R3.1 5 300 -200 150 U 50 50 1 1 P X R3.2 6 400 -200 150 U 50 50 1 1 P ENDDRAW ENDDEF # # R_Pack03_SIP_Split # DEF R_Pack03_SIP_Split RN 0 0 Y N 3 F N F0 "RN" 80 0 50 V V C CNN F1 "R_Pack03_SIP_Split" 0 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP6" -80 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW S 40 100 -40 -100 0 1 10 N X R1.1 1 0 -150 50 U 50 50 1 1 P X R1.2 2 0 150 50 D 50 50 1 1 P X R2.1 3 0 -150 50 U 50 50 2 1 P X R2.2 4 0 150 50 D 50 50 2 1 P X R3.1 5 0 -150 50 U 50 50 3 1 P X R3.2 6 0 150 50 D 50 50 3 1 P ENDDRAW ENDDEF # # R_Pack03_Split # DEF R_Pack03_Split RN 0 0 Y N 3 F N F0 "RN" 80 0 50 V V C CNN F1 "R_Pack03_Split" 0 0 50 V V C CNN F2 "" -80 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP* SOIC* R*Array*Concave* R*Array*Convex* $ENDFPLIST DRAW S 40 100 -40 -100 0 1 10 N X R1.1 1 0 -150 50 U 50 50 1 1 P X R1.2 6 0 150 50 D 50 50 1 1 P X R2.1 2 0 -150 50 U 50 50 2 1 P X R2.2 5 0 150 50 D 50 50 2 1 P X R3.1 3 0 -150 50 U 50 50 3 1 P X R3.2 4 0 150 50 D 50 50 3 1 P ENDDRAW ENDDEF # # R_Pack04 # DEF R_Pack04 RN 0 0 Y N 1 F N F0 "RN" -300 0 50 V V C CNN F1 "R_Pack04" 200 0 50 V V C CNN F2 "" 275 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP* SOIC* R*Array*Concave* R*Array*Convex* $ENDFPLIST DRAW S -125 75 -75 -75 0 1 10 N S -225 75 -175 -75 0 1 10 N S -25 75 25 -75 0 1 10 N S -250 -95 150 95 0 1 10 f S 75 75 125 -75 0 1 10 N P 2 0 1 0 -100 -100 -100 -75 N P 2 0 1 0 -100 75 -100 100 N P 2 0 1 0 -200 -100 -200 -75 N P 2 0 1 0 -200 75 -200 100 N P 2 0 1 0 0 -100 0 -75 N P 2 0 1 0 0 75 0 100 N P 2 0 1 0 100 -100 100 -75 N P 2 0 1 0 100 75 100 100 N X R1.1 1 -200 -200 100 U 50 50 1 1 P X R1.2 8 -200 200 100 D 50 50 1 1 P X R2.1 2 -100 -200 100 U 50 50 1 1 P X R2.2 7 -100 200 100 D 50 50 1 1 P X R3.1 3 0 -200 100 U 50 50 1 1 P X R3.2 6 0 200 100 D 50 50 1 1 P X R4.1 4 100 -200 100 U 50 50 1 1 P X R4.2 5 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # R_Pack04_SIP # DEF R_Pack04_SIP RN 0 0 Y N 1 F N F0 "RN" -600 0 50 V V C CNN F1 "R_Pack04_SIP" 600 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP8" 675 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW S -230 110 -170 -50 0 1 10 N S -530 110 -470 -50 0 1 10 N S -550 -75 550 175 0 1 10 f S 370 110 430 -50 0 1 10 N S 70 110 130 -50 0 1 10 N P 4 0 1 0 -200 110 -200 140 -100 140 -100 -50 N P 4 0 1 0 -500 110 -500 140 -400 140 -400 -50 N P 4 0 1 0 100 110 100 140 200 140 200 -50 N P 4 0 1 0 400 110 400 140 500 140 500 -50 N X R1.1 1 -500 -200 150 U 50 50 1 1 P X R1.2 2 -400 -200 150 U 50 50 1 1 P X R2.1 3 -200 -200 150 U 50 50 1 1 P X R2.2 4 -100 -200 150 U 50 50 1 1 P X R3.1 5 100 -200 150 U 50 50 1 1 P X R3.2 6 200 -200 150 U 50 50 1 1 P X R4.1 7 400 -200 150 U 50 50 1 1 P X R4.2 8 500 -200 150 U 50 50 1 1 P ENDDRAW ENDDEF # # R_Pack04_SIP_Split # DEF R_Pack04_SIP_Split RN 0 0 Y N 4 F N F0 "RN" 80 0 50 V V C CNN F1 "R_Pack04_SIP_Split" 0 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP8" -80 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW S 40 100 -40 -100 0 1 10 N X R1.1 1 0 -150 50 U 50 50 1 1 P X R1.2 2 0 150 50 D 50 50 1 1 P X R2.1 3 0 -150 50 U 50 50 2 1 P X R2.2 4 0 150 50 D 50 50 2 1 P X R3.1 5 0 -150 50 U 50 50 3 1 P X R3.2 6 0 150 50 D 50 50 3 1 P X R4.1 7 0 -150 50 U 50 50 4 1 P X R4.2 8 0 150 50 D 50 50 4 1 P ENDDRAW ENDDEF # # R_Pack04_Split # DEF R_Pack04_Split RN 0 0 Y N 4 F N F0 "RN" 80 0 50 V V C CNN F1 "R_Pack04_Split" 0 0 50 V V C CNN F2 "" -80 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP* SOIC* R*Array*Concave* R*Array*Convex* $ENDFPLIST DRAW S 40 100 -40 -100 0 1 10 N X R1.1 1 0 -150 50 U 50 50 1 1 P X R1.2 8 0 150 50 D 50 50 1 1 P X R2.1 2 0 -150 50 U 50 50 2 1 P X R2.2 7 0 150 50 D 50 50 2 1 P X R3.1 3 0 -150 50 U 50 50 3 1 P X R3.2 6 0 150 50 D 50 50 3 1 P X R4.1 4 0 -150 50 U 50 50 4 1 P X R4.2 5 0 150 50 D 50 50 4 1 P ENDDRAW ENDDEF # # R_Pack05 # DEF R_Pack05 RN 0 0 Y N 1 F N F0 "RN" -300 0 50 V V C CNN F1 "R_Pack05" 300 0 50 V V C CNN F2 "" 375 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP* SOIC* R*Array*Concave* R*Array*Convex* $ENDFPLIST DRAW S -125 75 -75 -75 0 1 10 N S -225 75 -175 -75 0 1 10 N S -25 75 25 -75 0 1 10 N S -250 -95 250 95 0 1 10 f S 175 75 225 -75 0 1 10 N S 75 75 125 -75 0 1 10 N P 2 0 1 0 -100 -100 -100 -75 N P 2 0 1 0 -100 75 -100 100 N P 2 0 1 0 -200 -100 -200 -75 N P 2 0 1 0 -200 75 -200 100 N P 2 0 1 0 0 -100 0 -75 N P 2 0 1 0 0 75 0 100 N P 2 0 1 0 100 -100 100 -75 N P 2 0 1 0 100 75 100 100 N P 2 0 1 0 200 -100 200 -75 N P 2 0 1 0 200 75 200 100 N X R1.1 1 -200 -200 100 U 50 50 1 1 P X R1.2 10 -200 200 100 D 50 50 1 1 P X R2.1 2 -100 -200 100 U 50 50 1 1 P X R2.2 9 -100 200 100 D 50 50 1 1 P X R3.1 3 0 -200 100 U 50 50 1 1 P X R3.2 8 0 200 100 D 50 50 1 1 P X R4.1 4 100 -200 100 U 50 50 1 1 P X R4.2 7 100 200 100 D 50 50 1 1 P X R5.1 5 200 -200 100 U 50 50 1 1 P X R5.2 6 200 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # R_Pack05_SIP # DEF R_Pack05_SIP RN 0 0 Y N 1 F N F0 "RN" -700 0 50 V V C CNN F1 "R_Pack05_SIP" 800 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP10" 875 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW S -30 110 30 -50 0 1 10 N S -330 110 -270 -50 0 1 10 N S -630 110 -570 -50 0 1 10 N S -650 -75 750 175 0 1 10 f S 270 110 330 -50 0 1 10 N S 570 110 630 -50 0 1 10 N P 4 0 1 0 -300 110 -300 140 -200 140 -200 -50 N P 4 0 1 0 -600 110 -600 140 -500 140 -500 -50 N P 4 0 1 0 0 110 0 140 100 140 100 -50 N P 4 0 1 0 300 110 300 140 400 140 400 -50 N P 4 0 1 0 600 110 600 140 700 140 700 -50 N X R1.1 1 -600 -200 150 U 50 50 1 1 P X R1.2 2 -500 -200 150 U 50 50 1 1 P X R2.1 3 -300 -200 150 U 50 50 1 1 P X R2.2 4 -200 -200 150 U 50 50 1 1 P X R3.1 5 0 -200 150 U 50 50 1 1 P X R3.2 6 100 -200 150 U 50 50 1 1 P X R4.1 7 300 -200 150 U 50 50 1 1 P X R4.2 8 400 -200 150 U 50 50 1 1 P X R5.1 9 600 -200 150 U 50 50 1 1 P X R5.2 10 700 -200 150 U 50 50 1 1 P ENDDRAW ENDDEF # # R_Pack05_SIP_Split # DEF R_Pack05_SIP_Split RN 0 0 Y N 5 F N F0 "RN" 80 0 50 V V C CNN F1 "R_Pack05_SIP_Split" 0 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP10" -80 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW S 40 100 -40 -100 0 1 10 N X R1.1 1 0 -150 50 U 50 50 1 1 P X R1.2 2 0 150 50 D 50 50 1 1 P X R2.1 3 0 -150 50 U 50 50 2 1 P X R2.2 4 0 150 50 D 50 50 2 1 P X R3.1 5 0 -150 50 U 50 50 3 1 P X R3.2 6 0 150 50 D 50 50 3 1 P X R4.1 7 0 -150 50 U 50 50 4 1 P X R4.2 8 0 150 50 D 50 50 4 1 P X R5.1 9 0 -150 50 U 50 50 5 1 P X R5.2 10 0 150 50 D 50 50 5 1 P ENDDRAW ENDDEF # # R_Pack05_Split # DEF R_Pack05_Split RN 0 0 Y N 5 F N F0 "RN" 80 0 50 V V C CNN F1 "R_Pack05_Split" 0 0 50 V V C CNN F2 "" -80 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP* SOIC* R*Array*Concave* R*Array*Convex* $ENDFPLIST DRAW S 40 100 -40 -100 0 1 10 N X R1.1 1 0 -150 50 U 50 50 1 1 P X R1.2 10 0 150 50 D 50 50 1 1 P X R2.1 2 0 -150 50 U 50 50 2 1 P X R2.2 9 0 150 50 D 50 50 2 1 P X R3.1 3 0 -150 50 U 50 50 3 1 P X R3.2 8 0 150 50 D 50 50 3 1 P X R4.1 4 0 -150 50 U 50 50 4 1 P X R4.2 7 0 150 50 D 50 50 4 1 P X R5.1 5 0 -150 50 U 50 50 5 1 P X R5.2 6 0 150 50 D 50 50 5 1 P ENDDRAW ENDDEF # # R_Pack06 # DEF R_Pack06 RN 0 0 Y N 1 F N F0 "RN" -400 0 50 V V C CNN F1 "R_Pack06" 300 0 50 V V C CNN F2 "" 375 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP* SOIC* R*Array*Concave* R*Array*Convex* $ENDFPLIST DRAW S -125 75 -75 -75 0 1 10 N S -225 75 -175 -75 0 1 10 N S -25 75 25 -75 0 1 10 N S -325 75 -275 -75 0 1 10 N S -350 -95 250 95 0 1 10 f S 175 75 225 -75 0 1 10 N S 75 75 125 -75 0 1 10 N P 2 0 1 0 -100 -100 -100 -75 N P 2 0 1 0 -100 75 -100 100 N P 2 0 1 0 -200 -100 -200 -75 N P 2 0 1 0 -200 75 -200 100 N P 2 0 1 0 -300 -100 -300 -75 N P 2 0 1 0 -300 75 -300 100 N P 2 0 1 0 0 -100 0 -75 N P 2 0 1 0 0 75 0 100 N P 2 0 1 0 100 -100 100 -75 N P 2 0 1 0 100 75 100 100 N P 2 0 1 0 200 -100 200 -75 N P 2 0 1 0 200 75 200 100 N X R1.1 1 -300 -200 100 U 50 50 1 1 P X R1.2 12 -300 200 100 D 50 50 1 1 P X R2.1 2 -200 -200 100 U 50 50 1 1 P X R2.2 11 -200 200 100 D 50 50 1 1 P X R3.1 3 -100 -200 100 U 50 50 1 1 P X R3.2 10 -100 200 100 D 50 50 1 1 P X R4.1 4 0 -200 100 U 50 50 1 1 P X R4.2 9 0 200 100 D 50 50 1 1 P X R5.1 5 100 -200 100 U 50 50 1 1 P X R5.2 8 100 200 100 D 50 50 1 1 P X R6.1 6 200 -200 100 U 50 50 1 1 P X R6.2 7 200 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # R_Pack06_SIP # DEF R_Pack06_SIP RN 0 0 Y N 1 F N F0 "RN" -900 0 50 V V C CNN F1 "R_Pack06_SIP" 900 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP12" 975 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW S -230 110 -170 -50 0 1 10 N S -530 110 -470 -50 0 1 10 N S -830 110 -770 -50 0 1 10 N S -850 -75 850 175 0 1 10 f S 370 110 430 -50 0 1 10 N S 670 110 730 -50 0 1 10 N S 70 110 130 -50 0 1 10 N P 4 0 1 0 -200 110 -200 140 -100 140 -100 -50 N P 4 0 1 0 -500 110 -500 140 -400 140 -400 -50 N P 4 0 1 0 -800 110 -800 140 -700 140 -700 -50 N P 4 0 1 0 100 110 100 140 200 140 200 -50 N P 4 0 1 0 400 110 400 140 500 140 500 -50 N P 4 0 1 0 700 110 700 140 800 140 800 -50 N X R1.1 1 -800 -200 150 U 50 50 1 1 P X R1.2 2 -700 -200 150 U 50 50 1 1 P X R2.1 3 -500 -200 150 U 50 50 1 1 P X R2.2 4 -400 -200 150 U 50 50 1 1 P X R3.1 5 -200 -200 150 U 50 50 1 1 P X R3.2 6 -100 -200 150 U 50 50 1 1 P X R4.1 7 100 -200 150 U 50 50 1 1 P X R4.2 8 200 -200 150 U 50 50 1 1 P X R5.1 9 400 -200 150 U 50 50 1 1 P X R5.2 10 500 -200 150 U 50 50 1 1 P X R6.1 11 700 -200 150 U 50 50 1 1 P X R6.2 12 800 -200 150 U 50 50 1 1 P ENDDRAW ENDDEF # # R_Pack06_SIP_Split # DEF R_Pack06_SIP_Split RN 0 0 Y N 6 F N F0 "RN" 80 0 50 V V C CNN F1 "R_Pack06_SIP_Split" 0 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP12" -80 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW S 40 100 -40 -100 0 1 10 N X R1.1 1 0 -150 50 U 50 50 1 1 P X R1.2 2 0 150 50 D 50 50 1 1 P X R2.1 3 0 -150 50 U 50 50 2 1 P X R2.2 4 0 150 50 D 50 50 2 1 P X R3.1 5 0 -150 50 U 50 50 3 1 P X R3.2 6 0 150 50 D 50 50 3 1 P X R4.1 7 0 -150 50 U 50 50 4 1 P X R4.2 8 0 150 50 D 50 50 4 1 P X R5.1 9 0 -150 50 U 50 50 5 1 P X R5.2 10 0 150 50 D 50 50 5 1 P X R6.1 11 0 -150 50 U 50 50 6 1 P X R6.2 12 0 150 50 D 50 50 6 1 P ENDDRAW ENDDEF # # R_Pack06_Split # DEF R_Pack06_Split RN 0 0 Y N 6 F N F0 "RN" 80 0 50 V V C CNN F1 "R_Pack06_Split" 0 0 50 V V C CNN F2 "" -80 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP* SOIC* R*Array*Concave* R*Array*Convex* $ENDFPLIST DRAW S 40 100 -40 -100 0 1 10 N X R1.1 1 0 -150 50 U 50 50 1 1 P X R1.2 12 0 150 50 D 50 50 1 1 P X R2.1 2 0 -150 50 U 50 50 2 1 P X R2.2 11 0 150 50 D 50 50 2 1 P X R3.1 3 0 -150 50 U 50 50 3 1 P X R3.2 10 0 150 50 D 50 50 3 1 P X R4.1 4 0 -150 50 U 50 50 4 1 P X R4.2 9 0 150 50 D 50 50 4 1 P X R5.1 5 0 -150 50 U 50 50 5 1 P X R5.2 8 0 150 50 D 50 50 5 1 P X R6.1 6 0 -150 50 U 50 50 6 1 P X R6.2 7 0 150 50 D 50 50 6 1 P ENDDRAW ENDDEF # # R_Pack07 # DEF R_Pack07 RN 0 0 Y N 1 F N F0 "RN" -400 0 50 V V C CNN F1 "R_Pack07" 400 0 50 V V C CNN F2 "" 475 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP* SOIC* R*Array*Concave* R*Array*Convex* $ENDFPLIST DRAW S -125 75 -75 -75 0 1 10 N S -225 75 -175 -75 0 1 10 N S -25 75 25 -75 0 1 10 N S -325 75 -275 -75 0 1 10 N S -350 -95 350 95 0 1 10 f S 175 75 225 -75 0 1 10 N S 275 75 325 -75 0 1 10 N S 75 75 125 -75 0 1 10 N P 2 0 1 0 -100 -100 -100 -75 N P 2 0 1 0 -100 75 -100 100 N P 2 0 1 0 -200 -100 -200 -75 N P 2 0 1 0 -200 75 -200 100 N P 2 0 1 0 -300 -100 -300 -75 N P 2 0 1 0 -300 75 -300 100 N P 2 0 1 0 0 -100 0 -75 N P 2 0 1 0 0 75 0 100 N P 2 0 1 0 100 -100 100 -75 N P 2 0 1 0 100 75 100 100 N P 2 0 1 0 200 -100 200 -75 N P 2 0 1 0 200 75 200 100 N P 2 0 1 0 300 -100 300 -75 N P 2 0 1 0 300 75 300 100 N X R1.1 1 -300 -200 100 U 50 50 1 1 P X R1.2 14 -300 200 100 D 50 50 1 1 P X R2.1 2 -200 -200 100 U 50 50 1 1 P X R2.2 13 -200 200 100 D 50 50 1 1 P X R3.1 3 -100 -200 100 U 50 50 1 1 P X R3.2 12 -100 200 100 D 50 50 1 1 P X R4.1 4 0 -200 100 U 50 50 1 1 P X R4.2 11 0 200 100 D 50 50 1 1 P X R5.1 5 100 -200 100 U 50 50 1 1 P X R5.2 10 100 200 100 D 50 50 1 1 P X R6.1 6 200 -200 100 U 50 50 1 1 P X R6.2 9 200 200 100 D 50 50 1 1 P X R7.1 7 300 -200 100 U 50 50 1 1 P X R7.2 8 300 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # R_Pack07_SIP # DEF R_Pack07_SIP RN 0 0 Y N 1 F N F0 "RN" -1000 0 50 V V C CNN F1 "R_Pack07_SIP" 1100 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP14" 1175 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW S -30 110 30 -50 0 1 10 N S -330 110 -270 -50 0 1 10 N S -630 110 -570 -50 0 1 10 N S -930 110 -870 -50 0 1 10 N S -950 -75 1050 175 0 1 10 f S 270 110 330 -50 0 1 10 N S 570 110 630 -50 0 1 10 N S 870 110 930 -50 0 1 10 N P 4 0 1 0 -300 110 -300 140 -200 140 -200 -50 N P 4 0 1 0 -600 110 -600 140 -500 140 -500 -50 N P 4 0 1 0 -900 110 -900 140 -800 140 -800 -50 N P 4 0 1 0 0 110 0 140 100 140 100 -50 N P 4 0 1 0 300 110 300 140 400 140 400 -50 N P 4 0 1 0 600 110 600 140 700 140 700 -50 N P 4 0 1 0 900 110 900 140 1000 140 1000 -50 N X R1.1 1 -900 -200 150 U 50 50 1 1 P X R1.2 2 -800 -200 150 U 50 50 1 1 P X R2.1 3 -600 -200 150 U 50 50 1 1 P X R2.2 4 -500 -200 150 U 50 50 1 1 P X R3.1 5 -300 -200 150 U 50 50 1 1 P X R3.2 6 -200 -200 150 U 50 50 1 1 P X R4.1 7 0 -200 150 U 50 50 1 1 P X R4.2 8 100 -200 150 U 50 50 1 1 P X R5.1 9 300 -200 150 U 50 50 1 1 P X R5.2 10 400 -200 150 U 50 50 1 1 P X R6.1 11 600 -200 150 U 50 50 1 1 P X R6.2 12 700 -200 150 U 50 50 1 1 P X R7.1 13 900 -200 150 U 50 50 1 1 P X R7.2 14 1000 -200 150 U 50 50 1 1 P ENDDRAW ENDDEF # # R_Pack07_SIP_Split # DEF R_Pack07_SIP_Split RN 0 0 Y N 7 F N F0 "RN" 80 0 50 V V C CNN F1 "R_Pack07_SIP_Split" 0 0 50 V V C CNN F2 "Resistor_THT:R_Array_SIP14" -80 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R?Array?SIP* $ENDFPLIST DRAW S 40 100 -40 -100 0 1 10 N X R1.1 1 0 -150 50 U 50 50 1 1 P X R1.2 2 0 150 50 D 50 50 1 1 P X R2.1 3 0 -150 50 U 50 50 2 1 P X R2.2 4 0 150 50 D 50 50 2 1 P X R3.1 5 0 -150 50 U 50 50 3 1 P X R3.2 6 0 150 50 D 50 50 3 1 P X R4.1 7 0 -150 50 U 50 50 4 1 P X R4.2 8 0 150 50 D 50 50 4 1 P X R5.1 9 0 -150 50 U 50 50 5 1 P X R5.2 10 0 150 50 D 50 50 5 1 P X R6.1 11 0 -150 50 U 50 50 6 1 P X R6.2 12 0 150 50 D 50 50 6 1 P X R7.1 13 0 -150 50 U 50 50 7 1 P X R7.2 14 0 150 50 D 50 50 7 1 P ENDDRAW ENDDEF # # R_Pack07_Split # DEF R_Pack07_Split RN 0 0 Y N 7 F N F0 "RN" 80 0 50 V V C CNN F1 "R_Pack07_Split" 0 0 50 V V C CNN F2 "" -80 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP* SOIC* R*Array*Concave* R*Array*Convex* $ENDFPLIST DRAW S 40 100 -40 -100 0 1 10 N X R1.1 1 0 -150 50 U 50 50 1 1 P X R1.2 14 0 150 50 D 50 50 1 1 P X R2.1 2 0 -150 50 U 50 50 2 1 P X R2.2 13 0 150 50 D 50 50 2 1 P X R3.1 3 0 -150 50 U 50 50 3 1 P X R3.2 12 0 150 50 D 50 50 3 1 P X R4.1 4 0 -150 50 U 50 50 4 1 P X R4.2 11 0 150 50 D 50 50 4 1 P X R5.1 5 0 -150 50 U 50 50 5 1 P X R5.2 10 0 150 50 D 50 50 5 1 P X R6.1 6 0 -150 50 U 50 50 6 1 P X R6.2 9 0 150 50 D 50 50 6 1 P X R7.1 7 0 -150 50 U 50 50 7 1 P X R7.2 8 0 150 50 D 50 50 7 1 P ENDDRAW ENDDEF # # R_Pack08 # DEF R_Pack08 RN 0 0 Y N 1 F N F0 "RN" -500 0 50 V V C CNN F1 "R_Pack08" 400 0 50 V V C CNN F2 "" 475 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP* SOIC* R*Array*Concave* R*Array*Convex* $ENDFPLIST DRAW S -125 75 -75 -75 0 1 10 N S -225 75 -175 -75 0 1 10 N S -25 75 25 -75 0 1 10 N S -325 75 -275 -75 0 1 10 N S -425 75 -375 -75 0 1 10 N S -450 -95 350 95 0 1 10 f S 175 75 225 -75 0 1 10 N S 275 75 325 -75 0 1 10 N S 75 75 125 -75 0 1 10 N P 2 0 1 0 -100 -100 -100 -75 N P 2 0 1 0 -100 75 -100 100 N P 2 0 1 0 -200 -100 -200 -75 N P 2 0 1 0 -200 75 -200 100 N P 2 0 1 0 -300 -100 -300 -75 N P 2 0 1 0 -300 75 -300 100 N P 2 0 1 0 -400 -100 -400 -75 N P 2 0 1 0 -400 75 -400 100 N P 2 0 1 0 0 -100 0 -75 N P 2 0 1 0 0 75 0 100 N P 2 0 1 0 100 -100 100 -75 N P 2 0 1 0 100 75 100 100 N P 2 0 1 0 200 -100 200 -75 N P 2 0 1 0 200 75 200 100 N P 2 0 1 0 300 -100 300 -75 N P 2 0 1 0 300 75 300 100 N X R1.1 1 -400 -200 100 U 50 50 1 1 P X R1.2 16 -400 200 100 D 50 50 1 1 P X R2.1 2 -300 -200 100 U 50 50 1 1 P X R2.2 15 -300 200 100 D 50 50 1 1 P X R3.1 3 -200 -200 100 U 50 50 1 1 P X R3.2 14 -200 200 100 D 50 50 1 1 P X R4.1 4 -100 -200 100 U 50 50 1 1 P X R4.2 13 -100 200 100 D 50 50 1 1 P X R5.1 5 0 -200 100 U 50 50 1 1 P X R5.2 12 0 200 100 D 50 50 1 1 P X R6.1 6 100 -200 100 U 50 50 1 1 P X R6.2 11 100 200 100 D 50 50 1 1 P X R7.1 7 200 -200 100 U 50 50 1 1 P X R7.2 10 200 200 100 D 50 50 1 1 P X R8.1 8 300 -200 100 U 50 50 1 1 P X R8.2 9 300 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # R_Pack08_Split # DEF R_Pack08_Split RN 0 0 Y N 8 F N F0 "RN" 80 0 50 V V C CNN F1 "R_Pack08_Split" 0 0 50 V V C CNN F2 "" -80 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP* SOIC* R*Array*Concave* R*Array*Convex* $ENDFPLIST DRAW S 40 100 -40 -100 0 1 10 N X R1.1 1 0 -150 50 U 50 50 1 1 P X R1.2 16 0 150 50 D 50 50 1 1 P X R2.1 2 0 -150 50 U 50 50 2 1 P X R2.2 15 0 150 50 D 50 50 2 1 P X R3.1 3 0 -150 50 U 50 50 3 1 P X R3.2 14 0 150 50 D 50 50 3 1 P X R4.1 4 0 -150 50 U 50 50 4 1 P X R4.2 13 0 150 50 D 50 50 4 1 P X R5.1 5 0 -150 50 U 50 50 5 1 P X R5.2 12 0 150 50 D 50 50 5 1 P X R6.1 6 0 -150 50 U 50 50 6 1 P X R6.2 11 0 150 50 D 50 50 6 1 P X R7.1 7 0 -150 50 U 50 50 7 1 P X R7.2 10 0 150 50 D 50 50 7 1 P X R8.1 8 0 -150 50 U 50 50 8 1 P X R8.2 9 0 150 50 D 50 50 8 1 P ENDDRAW ENDDEF # # R_Pack09 # DEF R_Pack09 RN 0 0 Y N 1 F N F0 "RN" -500 0 50 V V C CNN F1 "R_Pack09" 500 0 50 V V C CNN F2 "" 575 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP* SOIC* R*Array*Concave* R*Array*Convex* $ENDFPLIST DRAW S -125 75 -75 -75 0 1 10 N S -225 75 -175 -75 0 1 10 N S -25 75 25 -75 0 1 10 N S -325 75 -275 -75 0 1 10 N S -425 75 -375 -75 0 1 10 N S -450 -95 450 95 0 1 10 f S 175 75 225 -75 0 1 10 N S 275 75 325 -75 0 1 10 N S 375 75 425 -75 0 1 10 N S 75 75 125 -75 0 1 10 N P 2 0 1 0 -100 -100 -100 -75 N P 2 0 1 0 -100 75 -100 100 N P 2 0 1 0 -200 -100 -200 -75 N P 2 0 1 0 -200 75 -200 100 N P 2 0 1 0 -300 -100 -300 -75 N P 2 0 1 0 -300 75 -300 100 N P 2 0 1 0 -400 -100 -400 -75 N P 2 0 1 0 -400 75 -400 100 N P 2 0 1 0 0 -100 0 -75 N P 2 0 1 0 0 75 0 100 N P 2 0 1 0 100 -100 100 -75 N P 2 0 1 0 100 75 100 100 N P 2 0 1 0 200 -100 200 -75 N P 2 0 1 0 200 75 200 100 N P 2 0 1 0 300 -100 300 -75 N P 2 0 1 0 300 75 300 100 N P 2 0 1 0 400 -100 400 -75 N P 2 0 1 0 400 75 400 100 N X R1.1 1 -400 -200 100 U 50 50 1 1 P X R1.2 18 -400 200 100 D 50 50 1 1 P X R2.1 2 -300 -200 100 U 50 50 1 1 P X R2.2 17 -300 200 100 D 50 50 1 1 P X R3.1 3 -200 -200 100 U 50 50 1 1 P X R3.2 16 -200 200 100 D 50 50 1 1 P X R4.1 4 -100 -200 100 U 50 50 1 1 P X R4.2 15 -100 200 100 D 50 50 1 1 P X R5.1 5 0 -200 100 U 50 50 1 1 P X R5.2 14 0 200 100 D 50 50 1 1 P X R6.1 6 100 -200 100 U 50 50 1 1 P X R6.2 13 100 200 100 D 50 50 1 1 P X R7.1 7 200 -200 100 U 50 50 1 1 P X R7.2 12 200 200 100 D 50 50 1 1 P X R8.1 8 300 -200 100 U 50 50 1 1 P X R8.2 11 300 200 100 D 50 50 1 1 P X R9.1 9 400 -200 100 U 50 50 1 1 P X R9.2 10 400 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # R_Pack09_Split # DEF R_Pack09_Split RN 0 0 Y N 9 F N F0 "RN" 80 0 50 V V C CNN F1 "R_Pack09_Split" 0 0 50 V V C CNN F2 "" -80 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP* SOIC* R*Array*Concave* R*Array*Convex* $ENDFPLIST DRAW S 40 100 -40 -100 0 1 10 N X R1.1 1 0 -150 50 U 50 50 1 1 P X R1.2 18 0 150 50 D 50 50 1 1 P X R2.1 2 0 -150 50 U 50 50 2 1 P X R2.2 17 0 150 50 D 50 50 2 1 P X R3.1 3 0 -150 50 U 50 50 3 1 P X R3.2 16 0 150 50 D 50 50 3 1 P X R4.1 4 0 -150 50 U 50 50 4 1 P X R4.2 15 0 150 50 D 50 50 4 1 P X R5.1 5 0 -150 50 U 50 50 5 1 P X R5.2 14 0 150 50 D 50 50 5 1 P X R6.1 6 0 -150 50 U 50 50 6 1 P X R6.2 13 0 150 50 D 50 50 6 1 P X R7.1 7 0 -150 50 U 50 50 7 1 P X R7.2 12 0 150 50 D 50 50 7 1 P X R8.1 8 0 -150 50 U 50 50 8 1 P X R8.2 11 0 150 50 D 50 50 8 1 P X R9.1 9 0 -150 50 U 50 50 9 1 P X R9.2 10 0 150 50 D 50 50 9 1 P ENDDRAW ENDDEF # # R_Pack10 # DEF R_Pack10 RN 0 0 Y N 1 F N F0 "RN" -600 0 50 V V C CNN F1 "R_Pack10" 500 0 50 V V C CNN F2 "" 575 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP* SOIC* R*Array*Concave* R*Array*Convex* $ENDFPLIST DRAW S -125 75 -75 -75 0 1 10 N S -225 75 -175 -75 0 1 10 N S -25 75 25 -75 0 1 10 N S -325 75 -275 -75 0 1 10 N S -425 75 -375 -75 0 1 10 N S -525 75 -475 -75 0 1 10 N S -550 -95 450 95 0 1 10 f S 175 75 225 -75 0 1 10 N S 275 75 325 -75 0 1 10 N S 375 75 425 -75 0 1 10 N S 75 75 125 -75 0 1 10 N P 2 0 1 0 -100 -100 -100 -75 N P 2 0 1 0 -100 75 -100 100 N P 2 0 1 0 -200 -100 -200 -75 N P 2 0 1 0 -200 75 -200 100 N P 2 0 1 0 -300 -100 -300 -75 N P 2 0 1 0 -300 75 -300 100 N P 2 0 1 0 -400 -100 -400 -75 N P 2 0 1 0 -400 75 -400 100 N P 2 0 1 0 -500 -100 -500 -75 N P 2 0 1 0 -500 75 -500 100 N P 2 0 1 0 0 -100 0 -75 N P 2 0 1 0 0 75 0 100 N P 2 0 1 0 100 -100 100 -75 N P 2 0 1 0 100 75 100 100 N P 2 0 1 0 200 -100 200 -75 N P 2 0 1 0 200 75 200 100 N P 2 0 1 0 300 -100 300 -75 N P 2 0 1 0 300 75 300 100 N P 2 0 1 0 400 -100 400 -75 N P 2 0 1 0 400 75 400 100 N X R1.1 1 -500 -200 100 U 50 50 1 1 P X R1.2 20 -500 200 100 D 50 50 1 1 P X R10.1 10 400 -200 100 U 50 50 1 1 P X R10.2 11 400 200 100 D 50 50 1 1 P X R2.1 2 -400 -200 100 U 50 50 1 1 P X R2.2 19 -400 200 100 D 50 50 1 1 P X R3.1 3 -300 -200 100 U 50 50 1 1 P X R3.2 18 -300 200 100 D 50 50 1 1 P X R4.1 4 -200 -200 100 U 50 50 1 1 P X R4.2 17 -200 200 100 D 50 50 1 1 P X R5.1 5 -100 -200 100 U 50 50 1 1 P X R5.2 16 -100 200 100 D 50 50 1 1 P X R6.1 6 0 -200 100 U 50 50 1 1 P X R6.2 15 0 200 100 D 50 50 1 1 P X R7.1 7 100 -200 100 U 50 50 1 1 P X R7.2 14 100 200 100 D 50 50 1 1 P X R8.1 8 200 -200 100 U 50 50 1 1 P X R8.2 13 200 200 100 D 50 50 1 1 P X R9.1 9 300 -200 100 U 50 50 1 1 P X R9.2 12 300 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # R_Pack10_Split # DEF R_Pack10_Split RN 0 0 Y N 10 F N F0 "RN" 80 0 50 V V C CNN F1 "R_Pack10_Split" 0 0 50 V V C CNN F2 "" -80 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP* SOIC* R*Array*Concave* R*Array*Convex* $ENDFPLIST DRAW S 40 100 -40 -100 0 1 10 N X R1.1 1 0 -150 50 U 50 50 1 1 P X R1.2 20 0 150 50 D 50 50 1 1 P X R10.1 10 0 -150 50 U 50 50 10 1 P X R10.2 11 0 150 50 D 50 50 10 1 P X R2.1 2 0 -150 50 U 50 50 2 1 P X R2.2 19 0 150 50 D 50 50 2 1 P X R3.1 3 0 -150 50 U 50 50 3 1 P X R3.2 18 0 150 50 D 50 50 3 1 P X R4.1 4 0 -150 50 U 50 50 4 1 P X R4.2 17 0 150 50 D 50 50 4 1 P X R5.1 5 0 -150 50 U 50 50 5 1 P X R5.2 16 0 150 50 D 50 50 5 1 P X R6.1 6 0 -150 50 U 50 50 6 1 P X R6.2 15 0 150 50 D 50 50 6 1 P X R7.1 7 0 -150 50 U 50 50 7 1 P X R7.2 14 0 150 50 D 50 50 7 1 P X R8.1 8 0 -150 50 U 50 50 8 1 P X R8.2 13 0 150 50 D 50 50 8 1 P X R9.1 9 0 -150 50 U 50 50 9 1 P X R9.2 12 0 150 50 D 50 50 9 1 P ENDDRAW ENDDEF # # R_Pack11 # DEF R_Pack11 RN 0 0 Y N 1 F N F0 "RN" -600 0 50 V V C CNN F1 "R_Pack11" 600 0 50 V V C CNN F2 "" 675 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP* SOIC* R*Array*Concave* R*Array*Convex* $ENDFPLIST DRAW S -125 75 -75 -75 0 1 10 N S -225 75 -175 -75 0 1 10 N S -25 75 25 -75 0 1 10 N S -325 75 -275 -75 0 1 10 N S -425 75 -375 -75 0 1 10 N S -525 75 -475 -75 0 1 10 N S -550 -95 550 95 0 1 10 f S 175 75 225 -75 0 1 10 N S 275 75 325 -75 0 1 10 N S 375 75 425 -75 0 1 10 N S 475 75 525 -75 0 1 10 N S 75 75 125 -75 0 1 10 N P 2 0 1 0 -100 -100 -100 -75 N P 2 0 1 0 -100 75 -100 100 N P 2 0 1 0 -200 -100 -200 -75 N P 2 0 1 0 -200 75 -200 100 N P 2 0 1 0 -300 -100 -300 -75 N P 2 0 1 0 -300 75 -300 100 N P 2 0 1 0 -400 -100 -400 -75 N P 2 0 1 0 -400 75 -400 100 N P 2 0 1 0 -500 -100 -500 -75 N P 2 0 1 0 -500 75 -500 100 N P 2 0 1 0 0 -100 0 -75 N P 2 0 1 0 0 75 0 100 N P 2 0 1 0 100 -100 100 -75 N P 2 0 1 0 100 75 100 100 N P 2 0 1 0 200 -100 200 -75 N P 2 0 1 0 200 75 200 100 N P 2 0 1 0 300 -100 300 -75 N P 2 0 1 0 300 75 300 100 N P 2 0 1 0 400 -100 400 -75 N P 2 0 1 0 400 75 400 100 N P 2 0 1 0 500 -100 500 -75 N P 2 0 1 0 500 75 500 100 N X R1.1 1 -500 -200 100 U 50 50 1 1 P X R1.2 22 -500 200 100 D 50 50 1 1 P X R10.1 10 400 -200 100 U 50 50 1 1 P X R10.2 13 400 200 100 D 50 50 1 1 P X R11.1 11 500 -200 100 U 50 50 1 1 P X R11.2 12 500 200 100 D 50 50 1 1 P X R2.1 2 -400 -200 100 U 50 50 1 1 P X R2.2 21 -400 200 100 D 50 50 1 1 P X R3.1 3 -300 -200 100 U 50 50 1 1 P X R3.2 20 -300 200 100 D 50 50 1 1 P X R4.1 4 -200 -200 100 U 50 50 1 1 P X R4.2 19 -200 200 100 D 50 50 1 1 P X R5.1 5 -100 -200 100 U 50 50 1 1 P X R5.2 18 -100 200 100 D 50 50 1 1 P X R6.1 6 0 -200 100 U 50 50 1 1 P X R6.2 17 0 200 100 D 50 50 1 1 P X R7.1 7 100 -200 100 U 50 50 1 1 P X R7.2 16 100 200 100 D 50 50 1 1 P X R8.1 8 200 -200 100 U 50 50 1 1 P X R8.2 15 200 200 100 D 50 50 1 1 P X R9.1 9 300 -200 100 U 50 50 1 1 P X R9.2 14 300 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # R_Pack11_Split # DEF R_Pack11_Split RN 0 0 Y N 11 F N F0 "RN" 80 0 50 V V C CNN F1 "R_Pack11_Split" 0 0 50 V V C CNN F2 "" -80 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST DIP* SOIC* R*Array*Concave* R*Array*Convex* $ENDFPLIST DRAW S 40 100 -40 -100 0 1 10 N X R1.1 1 0 -150 50 U 50 50 1 1 P X R1.2 22 0 150 50 D 50 50 1 1 P X R10.1 10 0 -150 50 U 50 50 10 1 P X R10.2 13 0 150 50 D 50 50 10 1 P X R11.1 11 0 -150 50 U 50 50 11 1 P X R11.2 12 0 150 50 D 50 50 11 1 P X R2.1 2 0 -150 50 U 50 50 2 1 P X R2.2 21 0 150 50 D 50 50 2 1 P X R3.1 3 0 -150 50 U 50 50 3 1 P X R3.2 20 0 150 50 D 50 50 3 1 P X R4.1 4 0 -150 50 U 50 50 4 1 P X R4.2 19 0 150 50 D 50 50 4 1 P X R5.1 5 0 -150 50 U 50 50 5 1 P X R5.2 18 0 150 50 D 50 50 5 1 P X R6.1 6 0 -150 50 U 50 50 6 1 P X R6.2 17 0 150 50 D 50 50 6 1 P X R7.1 7 0 -150 50 U 50 50 7 1 P X R7.2 16 0 150 50 D 50 50 7 1 P X R8.1 8 0 -150 50 U 50 50 8 1 P X R8.2 15 0 150 50 D 50 50 8 1 P X R9.1 9 0 -150 50 U 50 50 9 1 P X R9.2 14 0 150 50 D 50 50 9 1 P ENDDRAW ENDDEF # # R_Shunt # DEF R_Shunt R 0 0 N Y 1 F N F0 "R" -175 0 50 V V C CNN F1 "R_Shunt" -100 0 50 V V C CNN F2 "" -70 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R_*Shunt* $ENDFPLIST DRAW S -40 -100 40 100 0 1 10 N P 2 0 1 0 0 -100 50 -100 N P 2 0 1 0 50 100 0 100 N X 1 1 0 200 100 D 50 50 1 1 P X 2 2 150 100 100 L 50 50 1 1 P X 3 3 150 -100 100 L 50 50 1 1 P X 4 4 0 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # R_Shunt_US # DEF R_Shunt_US R 0 0 N Y 1 F N F0 "R" -200 0 50 V V C CNN F1 "R_Shunt_US" -120 0 50 V V C CNN F2 "" -70 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R_*Shunt* $ENDFPLIST DRAW P 2 1 1 0 0 -100 50 -100 N P 2 1 1 0 0 -90 0 -100 N P 2 1 1 0 0 90 0 100 N P 2 1 1 0 50 100 0 100 N P 5 1 1 0 0 -30 40 -45 0 -60 -40 -75 0 -90 N P 5 1 1 0 0 30 40 15 0 0 -40 -15 0 -30 N P 5 1 1 0 0 90 40 75 0 60 -40 45 0 30 N X 1 1 0 200 100 D 50 50 1 1 P X 2 2 150 100 100 L 50 50 1 1 P X 3 3 150 -100 100 L 50 50 1 1 P X 4 4 0 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # R_Small # DEF R_Small R 0 10 N N 1 F N F0 "R" 30 20 50 H V L CNN F1 "R_Small" 30 -40 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R_* $ENDFPLIST DRAW S -30 70 30 -70 0 1 8 N X ~ 1 0 100 30 D 50 50 1 1 P X ~ 2 0 -100 30 U 50 50 1 1 P ENDDRAW ENDDEF # # R_Small_US # DEF R_Small_US R 0 10 N N 1 F N F0 "R" 30 20 50 H V L CNN F1 "R_Small_US" 30 -40 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R_* $ENDFPLIST DRAW P 5 1 1 0 0 0 40 -15 0 -30 -40 -45 0 -60 N P 5 1 1 0 0 60 40 45 0 30 -40 15 0 0 N X ~ 1 0 100 40 D 50 50 1 1 P X ~ 2 0 -100 40 U 50 50 1 1 P ENDDRAW ENDDEF # # R_US # DEF R_US R 0 0 N Y 1 F N F0 "R" 100 0 50 V V C CNN F1 "R_US" -100 0 50 V V C CNN F2 "" 40 -10 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R_* $ENDFPLIST DRAW P 2 0 1 0 0 -90 0 -100 N P 2 0 1 0 0 90 0 100 N P 5 0 1 0 0 -30 40 -45 0 -60 -40 -75 0 -90 N P 5 0 1 0 0 30 40 15 0 0 -40 -15 0 -30 N P 5 0 1 0 0 90 40 75 0 60 -40 45 0 30 N X ~ 1 0 150 50 D 50 50 1 1 P X ~ 2 0 -150 50 U 50 50 1 1 P ENDDRAW ENDDEF # # R_Variable # DEF R_Variable R 0 0 N Y 1 F N F0 "R" 100 -100 50 V V L CNN F1 "R_Variable" -100 -50 50 V V L CNN F2 "" -70 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R_* $ENDFPLIST DRAW S -40 -100 40 100 0 1 10 N P 5 0 1 0 100 60 100 100 60 100 100 100 -80 -80 N X ~ 1 0 150 50 D 50 50 1 1 P X ~ 2 0 -150 50 U 50 50 1 1 P ENDDRAW ENDDEF # # R_Variable_US # DEF R_Variable_US R 0 0 N Y 1 F N F0 "R" 100 -100 50 V V L CNN F1 "R_Variable_US" -100 -50 50 V V L CNN F2 "" -70 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R_* $ENDFPLIST DRAW P 2 0 1 0 0 -90 0 -100 N P 2 0 1 0 0 90 0 100 N P 5 0 1 0 0 -30 40 -45 0 -60 -40 -75 0 -90 N P 5 0 1 0 0 30 40 15 0 0 -40 -15 0 -30 N P 5 0 1 6 0 90 40 75 0 60 -40 45 0 30 N P 5 0 1 6 90 60 100 100 60 90 100 100 -80 -80 N X ~ 1 0 150 50 D 50 50 1 1 P X ~ 2 0 -150 50 U 50 50 1 1 P ENDDRAW ENDDEF # # Resonator # DEF Resonator Y 0 40 Y N 1 F N F0 "Y" 0 225 50 H V C CNN F1 "Resonator" 0 150 50 H V C CNN F2 "" -25 0 50 H I C CNN F3 "" -25 0 50 H I C CNN $FPLIST Filter* Resonator* $ENDFPLIST DRAW C -95 0 10 0 1 0 F C 0 -150 10 0 1 0 F C 95 0 10 0 1 0 F S -135 -125 -55 -135 0 1 0 F S -135 -95 -55 -105 0 1 0 F S -40 80 40 -80 0 1 12 N S 55 -125 135 -135 0 1 0 F S 55 -95 135 -105 0 1 0 F P 2 0 1 0 -95 -95 -95 0 N P 2 0 1 0 -75 0 -125 0 N P 2 0 1 20 -70 -50 -70 50 N P 2 0 1 20 70 -50 70 50 N P 2 0 1 0 75 0 100 0 N P 2 0 1 0 95 0 95 -100 N P 4 0 1 0 95 -130 95 -150 -95 -150 -95 -130 N X 1 1 -150 0 50 R 50 50 1 1 P X 2 2 0 -200 50 U 50 50 1 1 P X 3 3 150 0 50 L 50 50 1 1 P ENDDRAW ENDDEF # # Resonator_Small # DEF Resonator_Small Y 0 40 Y N 1 F N F0 "Y" 125 75 50 H V L CNN F1 "Resonator_Small" 125 0 50 H V L CNN F2 "" -25 0 50 H I C CNN F3 "" -25 0 50 H I C CNN $FPLIST Filter* Resonator* $ENDFPLIST DRAW C -100 0 10 0 1 0 F C 0 -150 10 0 1 0 F C 100 0 10 0 1 0 F S -140 -100 -60 -110 0 1 0 F S -140 -70 -60 -80 0 1 0 F S -25 75 25 -75 0 1 12 N S 60 -100 140 -110 0 1 0 F S 60 -70 140 -80 0 1 0 F P 2 0 1 0 -100 -70 -100 0 N P 2 0 1 0 -100 0 -55 0 N P 2 0 1 0 -100 50 -100 0 N P 2 0 1 15 -50 -50 -50 50 N P 2 0 1 15 50 -50 50 50 N P 2 0 1 0 50 0 100 0 N P 2 0 1 0 100 0 100 -70 N P 2 0 1 0 100 50 100 0 N P 4 0 1 0 95 -110 95 -150 -95 -150 -95 -105 N X 1 1 -100 100 50 D 50 50 1 1 P X 2 2 0 -200 50 U 50 50 1 1 P X 3 3 100 100 50 D 50 50 1 1 P ENDDRAW ENDDEF # # Rotary_Encoder # DEF Rotary_Encoder SW 0 10 Y N 1 F N F0 "SW" 0 260 50 H V C CNN F1 "Rotary_Encoder" 0 -260 50 H V C CNN F2 "" -150 160 50 H I C CNN F3 "" 0 260 50 H I C CNN $FPLIST RotaryEncoder* $ENDFPLIST DRAW A -15 -2 108 -899 899 0 1 10 N -15 -110 -15 105 C -150 0 10 0 1 0 F C -15 0 75 0 1 10 N S -200 200 200 -200 0 1 10 f P 2 0 1 10 -25 -70 -25 70 N P 2 0 1 10 -15 -70 -15 70 N P 2 0 1 10 -5 70 -5 -70 N P 3 0 1 0 -200 -100 -150 -100 -150 -80 N P 3 0 1 0 -200 100 -150 100 -150 80 N P 3 0 1 10 10 -120 -20 -110 5 -95 N P 3 0 1 10 10 115 -20 105 5 90 N P 4 0 1 0 -200 0 -150 0 -150 -40 -130 -80 N P 4 0 1 0 -170 0 -150 0 -150 40 -130 80 N X A A -300 100 100 R 50 50 1 1 P X B B -300 -100 100 R 50 50 1 1 P X C C -300 0 100 R 50 50 1 1 P ENDDRAW ENDDEF # # Rotary_Encoder_Switch # DEF Rotary_Encoder_Switch SW 0 10 Y N 1 F N F0 "SW" 0 260 50 H V C CNN F1 "Rotary_Encoder_Switch" 0 -260 50 H V C CNN F2 "" -150 160 50 H I C CNN F3 "" 0 260 50 H I C CNN $FPLIST RotaryEncoder*Switch* $ENDFPLIST DRAW A -15 -2 108 -899 899 0 1 10 N -15 -110 -15 105 C -150 0 10 0 1 0 F C -15 0 75 0 1 10 N C 170 -40 5 0 1 10 N C 170 40 5 0 1 10 N S -200 200 200 -200 0 1 10 f P 2 0 1 10 -25 -70 -25 70 N P 2 0 1 10 -15 -70 -15 70 N P 2 0 1 10 -5 70 -5 -70 N P 2 0 1 10 150 0 135 0 N P 2 0 1 10 150 40 150 -40 N P 3 0 1 0 -200 -100 -150 -100 -150 -80 N P 3 0 1 0 -200 100 -150 100 -150 80 N P 3 0 1 10 10 -120 -20 -110 5 -95 N P 3 0 1 10 10 115 -20 105 5 90 N P 3 0 1 10 200 -100 170 -100 170 -40 N P 3 0 1 10 200 100 170 100 170 40 N P 4 0 1 0 -200 0 -150 0 -150 -40 -130 -80 N P 4 0 1 0 -170 0 -150 0 -150 40 -130 80 N X A A -300 100 100 R 50 50 1 1 P X B B -300 -100 100 R 50 50 1 1 P X C C -300 0 100 R 50 50 1 1 P X S1 S1 300 100 100 L 50 50 1 1 P X S2 S2 300 -100 100 L 50 50 1 1 P ENDDRAW ENDDEF # # SPARK_GAP # DEF SPARK_GAP E 0 0 N Y 1 F N F0 "E" 0 80 50 H V C CNN F1 "SPARK_GAP" 0 -75 50 H V C CNN F2 "" 0 -70 50 H I C CNN F3 "" 0 0 50 V I C CNN $FPLIST SG* $ENDFPLIST DRAW P 4 0 1 0 -100 25 -100 -25 -25 0 -100 25 N P 4 0 1 0 100 25 100 -25 25 0 100 25 N X ~ 1 -200 0 100 R 50 50 1 1 P X ~ 2 200 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # Solar_Cell # DEF Solar_Cell SC 0 0 N N 1 F N F0 "SC" 100 100 50 H V L CNN F1 "Solar_Cell" 100 0 50 H V L CNN F2 "" 0 60 50 V I C CNN F3 "" 0 60 50 V I C CNN DRAW S -80 70 80 60 0 1 0 F S -52 47 50 27 0 1 0 F P 2 0 1 0 -80 90 -140 150 N P 2 0 1 0 -30 110 -90 170 N P 2 0 1 0 0 30 0 0 N P 2 0 1 0 0 70 0 100 N P 2 0 1 10 10 105 50 105 N P 2 0 1 10 30 125 30 85 N P 3 0 1 0 -80 120 -80 90 -110 90 N P 3 0 1 0 -30 140 -30 110 -60 110 N X + 1 0 200 100 D 50 50 1 1 P X - 2 0 -100 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Solar_Cells # DEF Solar_Cells SC 0 0 N N 1 F N F0 "SC" 100 100 50 H V L CNN F1 "Solar_Cells" 100 0 50 H V L CNN F2 "" 0 60 50 V I C CNN F3 "" 0 60 50 V I C CNN DRAW S -80 -55 80 -65 0 1 0 F S -80 70 80 60 0 1 0 F S -52 -78 50 -98 0 1 0 F S -52 47 50 27 0 1 0 F P 2 0 1 0 -100 10 -160 70 N P 2 0 1 0 -100 90 -160 150 N P 2 0 1 0 0 -60 0 -50 N P 2 0 1 0 0 -40 0 -30 N P 2 0 1 0 0 -20 0 -10 N P 2 0 1 0 0 0 0 10 N P 2 0 1 0 0 20 0 30 N P 2 0 1 0 0 70 0 100 N P 2 0 1 10 10 105 50 105 N P 2 0 1 10 30 125 30 85 N P 3 0 1 0 -100 40 -100 10 -130 10 N P 3 0 1 0 -100 120 -100 90 -130 90 N X + 1 0 200 100 D 50 50 1 1 P X - 2 0 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Speaker # DEF Speaker LS 0 0 Y N 1 F N F0 "LS" 50 225 50 H V R CNN F1 "Speaker" 50 150 50 H V R CNN F2 "" 0 -200 50 H I C CNN F3 "" -10 -50 50 H I C CNN DRAW S -100 50 40 -150 0 0 10 N P 4 0 0 10 40 50 140 150 140 -250 40 -150 N X 1 1 -200 0 100 R 50 50 1 1 I X 2 2 -200 -100 100 R 50 50 1 1 I ENDDRAW ENDDEF # # Speaker_Crystal # DEF Speaker_Crystal LS 0 0 Y N 1 F N F0 "LS" 25 225 50 H V R CNN F1 "Speaker_Crystal" 25 150 50 H V R CNN F2 "" -35 -50 50 H I C CNN F3 "" -35 -50 50 H I C CNN ALIAS Speaker_Ultrasound DRAW S -100 50 45 -150 0 0 10 N S -80 -25 25 -75 0 0 10 N P 2 0 0 0 -65 -90 15 -90 N P 2 0 0 0 -65 -10 15 -10 N P 2 0 0 0 -25 -90 -25 -120 N P 2 0 0 0 -25 -10 -25 20 N P 4 0 0 10 45 50 145 150 145 -250 45 -150 N X 1 1 -200 0 100 R 50 50 1 1 I X 2 2 -200 -100 100 R 50 50 1 1 I ENDDRAW ENDDEF # # Thermistor # DEF Thermistor TH 0 0 N Y 1 F N F0 "TH" 100 50 50 V V C CNN F1 "Thermistor" -100 0 50 V V C BNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R_* $ENDFPLIST DRAW S -40 100 40 -100 0 1 8 N P 5 0 1 10 -75 125 -75 75 75 -75 75 -125 75 -125 N X ~ 1 0 200 100 D 50 50 1 1 P X ~ 2 0 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Thermistor_NTC # DEF Thermistor_NTC TH 0 0 N Y 1 F N F0 "TH" -175 0 50 V V C CNN F1 "Thermistor_NTC" 125 0 50 V V C CNN F2 "" 0 50 50 H I C CNN F3 "" 0 50 50 H I C CNN $FPLIST *NTC* *Thermistor* PIN?ARRAY* bornier* *Terminal?Block* R_* $ENDFPLIST DRAW A -126 88 7 -265 818 0 1 0 N -120 85 -125 95 A -110 85 10 1800 -900 0 1 0 N -120 85 -110 75 A -110 85 10 -900 0 0 1 0 N -110 75 -100 85 A -110 110 10 0 900 0 1 0 N -100 110 -110 120 A -110 110 10 900 1800 0 1 0 N -110 120 -120 110 A -110 110 10 1800 -900 0 1 0 N -120 110 -110 100 A -104 119 20 -1075 -253 0 1 0 N -110 100 -85 110 S -40 100 40 -100 0 1 10 N P 2 0 1 0 -100 85 -100 110 N P 4 0 1 0 -70 100 -70 60 70 -60 70 -100 N P 6 0 1 0 -100 -145 -100 -55 -110 -85 -90 -85 -100 -55 -100 -65 F P 6 0 1 0 -70 -55 -70 -145 -80 -115 -60 -115 -70 -145 -70 -135 F X ~ 1 0 150 50 D 50 50 1 1 P X ~ 2 0 -150 50 U 50 50 1 1 P ENDDRAW ENDDEF # # Thermistor_NTC_3wire # DEF Thermistor_NTC_3wire TH 0 0 Y Y 1 F N F0 "TH" 75 150 50 H V L CNN F1 "Thermistor_NTC_3wire" 75 50 50 H V L CNN F2 "" 0 50 50 H I C CNN F3 "" 0 50 50 H I C CNN $FPLIST *NTC* *Thermistor* PIN?ARRAY* bornier* *Terminal?Block* $ENDFPLIST DRAW A -126 88 7 -265 818 0 1 0 N -120 85 -125 95 A -110 85 10 1800 -900 0 1 0 N -120 85 -110 75 A -110 85 10 -900 0 0 1 0 N -110 75 -100 85 A -110 110 10 0 900 0 1 0 N -100 110 -110 120 A -110 110 10 900 1800 0 1 0 N -110 120 -120 110 A -110 110 10 1800 -900 0 1 0 N -120 110 -110 100 A -104 119 20 -1075 -253 0 1 0 N -110 100 -85 110 C 0 125 11 0 1 0 F S -40 100 40 -100 0 1 10 N P 2 0 1 0 -100 85 -100 110 N P 2 0 1 0 0 -150 0 -100 N P 2 0 1 0 0 150 0 100 N P 3 0 1 0 100 150 25 150 0 125 N P 4 0 1 0 -70 100 -70 60 70 -60 70 -100 N P 6 0 1 0 -100 -145 -100 -55 -110 -85 -90 -85 -100 -55 -100 -65 F P 6 0 1 0 -70 -55 -70 -145 -80 -115 -60 -115 -70 -145 -70 -135 F X ~ 1 0 250 100 D 50 50 1 1 P X ~ 2 100 250 100 D 50 50 1 1 P X ~ 3 0 -250 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Thermistor_NTC_4wire # DEF Thermistor_NTC_4wire TH 0 0 Y Y 1 F N F0 "TH" 75 150 50 H V L CNN F1 "Thermistor_NTC_4wire" 75 50 50 H V L CNN F2 "" 0 50 50 H I C CNN F3 "" 0 50 50 H I C CNN $FPLIST *NTC* *Thermistor* PIN?ARRAY* bornier* *Terminal?Block* $ENDFPLIST DRAW A -126 88 7 -265 818 0 1 0 N -120 85 -125 95 A -110 85 10 1800 -900 0 1 0 N -120 85 -110 75 A -110 85 10 -900 0 0 1 0 N -110 75 -100 85 A -110 110 10 0 900 0 1 0 N -100 110 -110 120 A -110 110 10 900 1800 0 1 0 N -110 120 -120 110 A -110 110 10 1800 -900 0 1 0 N -120 110 -110 100 A -104 119 20 -1075 -253 0 1 0 N -110 100 -85 110 C 0 -130 10 0 1 0 F C 0 125 10 0 1 0 F S -40 100 40 -100 0 1 10 N P 2 0 1 0 -100 85 -100 110 N P 2 0 1 0 0 -150 0 -100 N P 2 0 1 0 0 125 0 125 N P 2 0 1 0 0 150 0 100 N P 3 0 1 0 100 -150 25 -150 0 -125 N P 3 0 1 0 100 150 25 150 0 125 N P 4 0 1 0 -70 100 -70 60 70 -60 70 -100 N P 6 0 1 0 -100 -145 -100 -55 -110 -85 -90 -85 -100 -55 -100 -65 F P 6 0 1 0 -70 -55 -70 -145 -80 -115 -60 -115 -70 -145 -70 -135 F X ~ 1 0 250 100 D 50 50 1 1 P X ~ 2 100 250 100 D 50 50 1 1 P X ~ 3 100 -250 100 U 50 50 1 1 P X ~ 4 0 -250 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Thermistor_NTC_US # DEF Thermistor_NTC_US TH 0 0 N Y 1 F N F0 "TH" -175 0 50 V V C CNN F1 "Thermistor_NTC_US" 125 0 50 V V C CNN F2 "" 0 50 50 H I C CNN F3 "" 0 50 50 H I C CNN $FPLIST *NTC* *Thermistor* PIN?ARRAY* bornier* *Terminal?Block* R_* $ENDFPLIST DRAW A -126 88 7 -265 818 0 1 0 N -120 85 -125 95 A -110 85 10 1800 -900 0 1 0 N -120 85 -110 75 A -110 85 10 -900 0 0 1 0 N -110 75 -100 85 A -110 110 10 0 900 0 1 0 N -100 110 -110 120 A -110 110 10 900 1800 0 1 0 N -110 120 -120 110 A -110 110 10 1800 -900 0 1 0 N -120 110 -110 100 A -104 119 20 -1075 -253 0 1 0 N -110 100 -85 110 P 2 0 1 0 -100 85 -100 110 N P 2 0 1 0 0 -90 0 -100 N P 2 0 1 0 0 90 0 100 N P 4 0 1 0 -70 100 -70 60 70 -60 70 -100 N P 5 0 1 0 0 -30 40 -45 0 -60 -40 -75 0 -90 N P 5 0 1 0 0 30 40 15 0 0 -40 -15 0 -30 N P 5 0 1 0 0 90 40 75 0 60 -40 45 0 30 N P 6 0 1 0 -100 -145 -100 -55 -110 -85 -90 -85 -100 -55 -100 -65 F P 6 0 1 0 -70 -55 -70 -145 -80 -115 -60 -115 -70 -145 -70 -135 F X ~ 1 0 150 50 D 50 50 1 1 P X ~ 2 0 -150 50 U 50 50 1 1 P ENDDRAW ENDDEF # # Thermistor_PTC # DEF Thermistor_PTC TH 0 0 N Y 1 F N F0 "TH" -160 0 50 V V C CNN F1 "Thermistor_PTC" 120 0 50 V V C CNN F2 "" 50 -200 50 H I L CNN F3 "" 0 0 50 H I C CNN $FPLIST *PTC* *Thermistor* PIN?ARRAY* bornier* *Terminal?Block* R_* $ENDFPLIST DRAW A -126 88 7 -265 818 0 1 0 N -120 85 -125 95 A -110 85 10 1800 -900 0 1 0 N -120 85 -110 75 A -110 85 10 -900 0 0 1 0 N -110 75 -100 85 A -110 110 10 0 900 0 1 0 N -100 110 -110 120 A -110 110 10 900 1800 0 1 0 N -110 120 -120 110 A -110 110 10 1800 -900 0 1 0 N -120 110 -110 100 A -104 119 20 -1075 -253 0 1 0 N -110 100 -85 110 S -40 100 40 -100 0 1 10 N P 2 0 1 0 -100 85 -100 110 N P 4 0 1 0 -70 100 -70 60 70 -60 70 -100 N P 6 0 1 0 -100 -145 -100 -55 -110 -85 -90 -85 -100 -55 -100 -65 F P 6 0 1 0 -70 -145 -70 -55 -80 -85 -60 -85 -70 -55 -70 -65 F X ~ 1 0 150 50 D 50 50 1 1 P X ~ 2 0 -150 50 U 50 50 1 1 P ENDDRAW ENDDEF # # Thermistor_PTC_3wire # DEF Thermistor_PTC_3wire TH 0 0 Y Y 1 F N F0 "TH" 75 50 50 H V L CNN F1 "Thermistor_PTC_3wire" 75 -50 50 H V L CNN F2 "" 0 50 50 H I C CNN F3 "" 0 50 50 H I C CNN $FPLIST PIN_ARRAY_3X1 bornier3 TerminalBlock*3pol $ENDFPLIST DRAW A -126 88 7 -265 818 0 1 0 N -120 85 -125 95 A -110 85 10 1800 -900 0 1 0 N -120 85 -110 75 A -110 85 10 -900 0 0 1 0 N -110 75 -100 85 A -110 110 10 0 900 0 1 0 N -100 110 -110 120 A -110 110 10 900 1800 0 1 0 N -110 120 -120 110 A -110 110 10 1800 -900 0 1 0 N -120 110 -110 100 A -104 119 20 -1075 -253 0 1 0 N -110 100 -85 110 C 0 125 11 0 1 0 F S -40 100 40 -100 0 1 10 N P 2 0 1 0 -100 85 -100 110 N P 2 0 1 0 0 -150 0 -100 N P 2 0 1 0 0 150 0 100 N P 3 0 1 0 100 150 25 150 0 125 N P 4 0 1 0 -70 100 -70 60 70 -60 70 -100 N P 6 0 1 0 -100 -145 -100 -55 -110 -85 -90 -85 -100 -55 -100 -65 F P 6 0 1 0 -70 -145 -70 -55 -80 -85 -60 -85 -70 -55 -70 -65 F X ~ 1 0 250 100 D 50 50 1 1 P X ~ 2 100 250 100 D 50 50 1 1 P X ~ 3 0 -250 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Thermistor_PTC_4wire # DEF Thermistor_PTC_4wire TH 0 0 Y Y 1 F N F0 "TH" 75 75 50 H V L CNN F1 "Thermistor_PTC_4wire" 75 -25 50 H V L CNN F2 "" 0 50 50 H I C CNN F3 "" 0 50 50 H I C CNN $FPLIST PIN_ARRAY_4X1 bornier4 TerminalBlock*4pol $ENDFPLIST DRAW A -126 88 7 -265 818 0 1 0 N -120 85 -125 95 A -110 85 10 1800 -900 0 1 0 N -120 85 -110 75 A -110 85 10 -900 0 0 1 0 N -110 75 -100 85 A -110 110 10 0 900 0 1 0 N -100 110 -110 120 A -110 110 10 900 1800 0 1 0 N -110 120 -120 110 A -110 110 10 1800 -900 0 1 0 N -120 110 -110 100 A -104 119 20 -1075 -253 0 1 0 N -110 100 -85 110 C 0 -130 10 0 1 0 F C 0 125 10 0 1 0 F S -40 100 40 -100 0 1 10 N P 2 0 1 0 -100 85 -100 110 N P 2 0 1 0 0 -150 0 -100 N P 2 0 1 0 0 125 0 125 N P 2 0 1 0 0 150 0 100 N P 3 0 1 0 100 -150 25 -150 0 -125 N P 3 0 1 0 100 150 25 150 0 125 N P 4 0 1 0 -70 100 -70 60 70 -60 70 -100 N P 6 0 1 0 -100 -145 -100 -55 -110 -85 -90 -85 -100 -55 -100 -65 F P 6 0 1 0 -70 -145 -70 -55 -80 -85 -60 -85 -70 -55 -70 -65 F X ~ 1 0 250 100 D 50 50 1 1 P X ~ 2 100 250 100 D 50 50 1 1 P X ~ 3 100 -250 100 U 50 50 1 1 P X ~ 4 0 -250 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Thermistor_PTC_US # DEF Thermistor_PTC_US TH 0 0 N Y 1 F N F0 "TH" -160 0 50 V V C CNN F1 "Thermistor_PTC_US" 120 0 50 V V C CNN F2 "" 50 -200 50 H I L CNN F3 "" 0 0 50 H I C CNN $FPLIST *PTC* *Thermistor* PIN?ARRAY* bornier* *Terminal?Block* R_* $ENDFPLIST DRAW A -126 88 7 -265 818 0 1 0 N -120 85 -125 95 A -110 85 10 1800 -900 0 1 0 N -120 85 -110 75 A -110 85 10 -900 0 0 1 0 N -110 75 -100 85 A -110 110 10 0 900 0 1 0 N -100 110 -110 120 A -110 110 10 900 1800 0 1 0 N -110 120 -120 110 A -110 110 10 1800 -900 0 1 0 N -120 110 -110 100 A -104 119 20 -1075 -253 0 1 0 N -110 100 -85 110 P 2 0 1 0 -100 85 -100 110 N P 2 0 1 0 0 -90 0 -100 N P 2 0 1 0 0 90 0 100 N P 4 0 1 0 -70 100 -70 60 70 -60 70 -100 N P 5 0 1 0 0 -30 40 -45 0 -60 -40 -75 0 -90 N P 5 0 1 0 0 30 40 15 0 0 -40 -15 0 -30 N P 5 0 1 0 0 90 40 75 0 60 -40 45 0 30 N P 6 0 1 0 -100 -145 -100 -55 -110 -85 -90 -85 -100 -55 -100 -65 F P 6 0 1 0 -70 -145 -70 -55 -80 -85 -60 -85 -70 -55 -70 -65 F X ~ 1 0 150 50 D 50 50 1 1 P X ~ 2 0 -150 50 U 50 50 1 1 P ENDDRAW ENDDEF # # Thermistor_US # DEF Thermistor_US TH 0 0 N Y 1 F N F0 "TH" 100 50 50 V V C CNN F1 "Thermistor_US" -100 0 50 V V C BNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST R_* $ENDFPLIST DRAW P 2 0 1 0 0 -90 0 -100 N P 2 0 1 0 0 90 0 100 N P 2 0 1 0 75 -50 75 -100 N P 3 0 1 0 -75 100 -75 50 75 -50 N P 5 0 1 0 0 -30 40 -45 0 -60 -40 -75 0 -90 N P 5 0 1 0 0 30 40 15 0 0 -40 -15 0 -30 N P 5 0 1 0 0 90 40 75 0 60 -40 45 0 30 N X ~ 1 0 150 50 D 50 50 1 1 P X ~ 2 0 -150 50 U 50 50 1 1 P ENDDRAW ENDDEF # # Thermocouple # DEF Thermocouple TC 0 0 N Y 1 F N F0 "TC" -120 150 50 H V C CNN F1 "Thermocouple" -200 -160 50 H V L CNN F2 "" -575 50 50 H I C CNN F3 "" -575 50 50 H I C CNN $FPLIST PIN?ARRAY* bornier* *Terminal?Block* Thermo*Couple* $ENDFPLIST DRAW C -120 0 10 0 1 0 F P 2 0 1 0 -160 -40 -170 -50 N P 2 0 1 0 -140 -20 -150 -30 N P 2 0 1 0 -120 0 -130 -10 N P 2 0 1 0 -100 20 -110 10 N P 2 0 1 0 -80 40 -90 30 N P 2 0 1 0 -60 60 -70 50 N P 2 0 1 0 -40 80 -50 70 N P 2 0 1 0 -20 100 -30 90 N P 2 0 1 0 0 -100 -10 -100 N P 2 0 1 0 0 100 -20 100 N P 3 0 1 0 10 -100 -20 -100 -170 50 N X + 1 100 100 100 L 50 50 1 1 P X - 2 100 -100 100 L 50 50 1 1 P ENDDRAW ENDDEF # # Thermocouple_ALT # DEF Thermocouple_ALT TC 0 0 N Y 1 F N F0 "TC" -120 150 50 H V C CNN F1 "Thermocouple_ALT" -180 -200 50 H V L CNN F2 "" -575 50 50 H I C CNN F3 "" -575 50 50 H I C CNN $FPLIST PIN?ARRAY* bornier* *Terminal?Block* Thermo*Couple* $ENDFPLIST DRAW C -120 0 10 0 1 0 F P 2 0 1 0 0 -100 -10 -100 N P 2 0 1 0 48 100 100 100 N P 2 0 1 0 60 -100 100 -100 N P 3 0 1 0 46 50 -18 50 -120 0 N P 3 0 1 0 46 98 -18 98 -118 -2 N P 3 0 1 0 60 -100 -20 -100 -120 0 N X + 1 100 100 100 L 50 50 1 1 P X - 2 100 -100 100 L 50 50 1 1 P ENDDRAW ENDDEF # # Thermocouple_Block # DEF Thermocouple_Block TC 0 0 N Y 1 F N F0 "TC" -120 150 50 H V C CNN F1 "Thermocouple_Block" -200 -160 50 H V L CNN F2 "" -575 50 50 H I C CNN F3 "" -575 50 50 H I C CNN $FPLIST PIN?ARRAY* bornier* *Terminal?Block* Thermo*Couple* $ENDFPLIST DRAW C -70 0 10 0 1 0 F C 80 -100 20 0 1 0 N C 80 100 20 0 1 0 N S 40 140 120 -140 0 1 0 N P 2 0 1 0 -110 -40 -120 -50 N P 2 0 1 0 -90 -20 -100 -30 N P 2 0 1 0 -70 0 -80 -10 N P 2 0 1 0 -50 20 -60 10 N P 2 0 1 0 -30 40 -40 30 N P 2 0 1 0 -10 60 -20 50 N P 2 0 1 0 10 80 0 70 N P 2 0 1 0 30 100 20 90 N P 2 0 1 0 50 -100 40 -100 N P 2 0 1 0 50 100 30 100 N P 3 0 1 0 60 -100 30 -100 -120 50 N X + 1 200 100 100 L 50 50 1 1 P X - 2 200 -100 100 L 50 50 1 1 P ENDDRAW ENDDEF # # Transformer_1P_1S # DEF Transformer_1P_1S T 0 40 Y N 1 F N F0 "T" 0 250 50 H V C CNN F1 "Transformer_1P_1S" 0 -300 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW A -100 -150 50 899 1 0 1 0 N -100 -100 -50 -150 A -100 -150 50 -1 -899 0 1 0 N -50 -150 -100 -199 A -100 -50 50 899 1 0 1 0 N -100 0 -50 -50 A -100 -50 50 -1 -899 0 1 0 N -50 -50 -100 -99 A -100 50 50 899 1 0 1 0 N -100 100 -50 50 A -100 50 50 -1 -899 0 1 0 N -50 50 -100 1 A -100 150 50 899 1 0 1 0 N -100 200 -50 150 A -100 150 50 -1 -899 0 1 0 N -50 150 -100 101 A 100 -50 50 899 -1799 0 1 0 N 100 0 51 -50 A 100 -50 50 1799 -899 0 1 0 N 51 -50 100 -99 A 100 50 50 899 -1799 0 1 0 N 100 100 51 50 A 100 50 50 1799 -899 0 1 0 N 51 50 100 1 A 100 150 50 899 -1799 0 1 0 N 100 200 51 150 A 100 150 50 1799 -899 0 1 0 N 51 150 100 101 A 101 -150 50 910 -1799 0 1 0 N 101 -100 52 -150 A 101 -150 50 -912 -1799 0 1 0 N 101 -199 52 -150 P 2 0 1 0 -25 200 -25 -200 N P 2 0 1 0 25 -200 25 200 N X AA 1 -400 200 300 R 50 50 1 1 P X AB 2 -400 -200 300 R 50 50 1 1 P X SA 3 400 -200 300 L 50 50 1 1 P X SB 4 400 200 300 L 50 50 1 1 P ENDDRAW ENDDEF # # Transformer_1P_1S_SO8 # DEF Transformer_1P_1S_SO8 T 0 40 Y N 1 F N F0 "T" 0 250 50 H V C CNN F1 "Transformer_1P_1S_SO8" 0 -300 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW A -100 -150 50 899 1 0 1 0 N -100 -100 -50 -150 A -100 -150 50 -1 -899 0 1 0 N -50 -150 -100 -199 A -100 -50 50 899 1 0 1 0 N -100 0 -50 -50 A -100 -50 50 -1 -899 0 1 0 N -50 -50 -100 -99 A -100 50 50 899 1 0 1 0 N -100 100 -50 50 A -100 50 50 -1 -899 0 1 0 N -50 50 -100 1 A -100 150 50 899 1 0 1 0 N -100 200 -50 150 A -100 150 50 -1 -899 0 1 0 N -50 150 -100 101 A 100 -50 50 899 -1799 0 1 0 N 100 0 51 -50 A 100 -50 50 1799 -899 0 1 0 N 51 -50 100 -99 A 100 50 50 899 -1799 0 1 0 N 100 100 51 50 A 100 50 50 1799 -899 0 1 0 N 51 50 100 1 A 100 150 50 899 -1799 0 1 0 N 100 200 51 150 A 100 150 50 1799 -899 0 1 0 N 51 150 100 101 A 101 -150 50 910 -1799 0 1 0 N 101 -100 52 -150 A 101 -150 50 -912 -1799 0 1 0 N 101 -199 52 -150 P 2 0 1 0 -25 200 -25 -200 N P 2 0 1 0 25 -200 25 200 N X AA 1 -300 200 200 R 50 50 1 1 P X AB 4 -300 -200 200 R 50 50 1 1 P X SA 5 300 -200 200 L 50 50 1 1 P X SB 8 300 200 200 L 50 50 1 1 P ENDDRAW ENDDEF # # Transformer_1P_2S # DEF Transformer_1P_2S T 0 40 Y N 1 F N F0 "T" 0 500 50 H V C CNN F1 "Transformer_1P_2S" 0 -500 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW A -100 -150 50 899 1 0 1 0 N -100 -100 -50 -150 A -100 -150 50 -1 -899 0 1 0 N -50 -150 -100 -199 A -100 -50 50 899 1 0 1 0 N -100 0 -50 -50 A -100 -50 50 -1 -899 0 1 0 N -50 -50 -100 -99 A -100 50 50 899 1 0 1 0 N -100 100 -50 50 A -100 50 50 -1 -899 0 1 0 N -50 50 -100 1 A -100 150 50 899 1 0 1 0 N -100 200 -50 150 A -100 150 50 -1 -899 0 1 0 N -50 150 -100 101 A 100 -350 50 899 -1799 0 1 0 N 100 -300 51 -350 A 100 -350 50 1799 -899 0 1 0 N 51 -350 100 -399 A 100 -250 50 899 -1799 0 1 0 N 100 -200 51 -250 A 100 -250 50 1799 -899 0 1 0 N 51 -250 100 -299 A 100 -150 50 899 -1799 0 1 0 N 100 -100 51 -150 A 100 -150 50 1799 -899 0 1 0 N 51 -150 100 -199 A 100 150 50 899 -1799 0 1 0 N 100 200 51 150 A 100 150 50 1799 -899 0 1 0 N 51 150 100 101 A 100 250 50 899 -1799 0 1 0 N 100 300 51 250 A 100 250 50 1799 -899 0 1 0 N 51 250 100 201 A 100 350 50 899 -1799 0 1 0 N 100 400 51 350 A 100 350 50 1799 -899 0 1 0 N 51 350 100 301 P 2 0 1 0 -20 -400 -20 400 N P 2 0 1 0 20 400 20 -400 N X AA 1 -400 200 300 R 50 50 1 1 P X AB 2 -400 -200 300 R 50 50 1 1 P X SA 3 400 400 300 L 50 50 1 1 P X SB 4 400 100 300 L 50 50 1 1 P X SC 5 400 -100 300 L 50 50 1 1 P X SD 6 400 -400 300 L 50 50 1 1 P ENDDRAW ENDDEF # # Transformer_1P_SS # DEF Transformer_1P_SS T 0 40 Y N 1 F N F0 "T" 0 250 50 H V C CNN F1 "Transformer_1P_SS" 0 -300 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW A -100 -150 50 899 1 0 1 0 N -100 -100 -50 -150 A -100 -150 50 -1 -899 0 1 0 N -50 -150 -100 -199 A -100 -50 50 899 1 0 1 0 N -100 0 -50 -50 A -100 -50 50 -1 -899 0 1 0 N -50 -50 -100 -99 A -100 50 50 899 1 0 1 0 N -100 100 -50 50 A -100 50 50 -1 -899 0 1 0 N -50 50 -100 1 A -100 150 50 899 1 0 1 0 N -100 200 -50 150 A -100 150 50 -1 -899 0 1 0 N -50 150 -100 101 A 100 -50 50 899 -1799 0 1 0 N 100 0 51 -50 A 100 -50 50 1799 -899 0 1 0 N 51 -50 100 -99 A 100 50 50 899 -1799 0 1 0 N 100 100 51 50 A 100 50 50 1799 -899 0 1 0 N 51 50 100 1 A 100 150 50 899 -1799 0 1 0 N 100 200 51 150 A 100 150 50 1799 -899 0 1 0 N 51 150 100 101 A 101 -150 50 910 -1799 0 1 0 N 101 -100 52 -150 A 101 -150 50 -912 -1799 0 1 0 N 101 -199 52 -150 P 2 0 1 0 -25 200 -25 -200 N P 2 0 1 0 25 -200 25 200 N X AA 1 -400 200 300 R 50 50 1 1 P X AB 2 -400 -200 300 R 50 50 1 1 P X SA 3 400 -200 300 L 50 50 1 1 P X SC 4 400 0 300 L 50 50 1 1 P X SB 5 400 200 300 L 50 50 1 1 P ENDDRAW ENDDEF # # Transformer_AUDIO # DEF Transformer_AUDIO T 0 40 Y N 1 F N F0 "T" 0 460 50 H V C CNN F1 "Transformer_AUDIO" 10 370 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW A -100 -150 50 899 1 0 1 0 N -100 -100 -50 -150 A -100 -150 50 -1 -899 0 1 0 N -50 -150 -100 -199 A -100 -50 50 899 1 0 1 0 N -100 0 -50 -50 A -100 -50 50 -1 -899 0 1 0 N -50 -50 -100 -99 A -100 50 50 899 1 0 1 0 N -100 100 -50 50 A -100 50 50 -1 -899 0 1 0 N -50 50 -100 1 A -100 150 50 899 1 0 1 0 N -100 200 -50 150 A -100 150 50 -1 -899 0 1 0 N -50 150 -100 101 A 100 -50 50 899 -1799 0 1 0 N 100 0 51 -50 A 100 -50 50 1799 -899 0 1 0 N 51 -50 100 -99 A 100 50 50 899 -1799 0 1 0 N 100 100 51 50 A 100 50 50 1799 -899 0 1 0 N 51 50 100 1 A 100 150 50 899 -1799 0 1 0 N 100 200 51 150 A 100 150 50 1799 -899 0 1 0 N 51 150 100 101 A 101 -150 50 910 -1799 0 1 0 N 101 -100 52 -150 A 101 -150 50 -912 -1799 0 1 0 N 101 -199 52 -150 P 2 0 1 0 -25 200 -25 -200 N P 2 0 1 0 25 -200 25 200 N P 9 0 1 10 -150 250 -100 300 100 300 150 250 150 -250 100 -300 -100 -300 -150 -250 -150 250 f X ~ 0 0 -400 100 U 50 50 1 1 I X AA 1 -400 200 300 R 50 50 1 1 P X AB 2 -400 -200 300 R 50 50 1 1 P X SA 3 400 -200 300 L 50 50 1 1 P X SB 4 400 200 300 L 50 50 1 1 P ENDDRAW ENDDEF # # Transformer_SP_1S # DEF Transformer_SP_1S T 0 40 Y N 1 F N F0 "T" 0 250 50 H V C CNN F1 "Transformer_SP_1S" 0 -300 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW A -100 -150 50 899 1 0 1 0 N -100 -100 -50 -150 A -100 -150 50 -1 -899 0 1 0 N -50 -150 -100 -199 A -100 -50 50 899 1 0 1 0 N -100 0 -50 -50 A -100 -50 50 -1 -899 0 1 0 N -50 -50 -100 -99 A -100 50 50 899 1 0 1 0 N -100 100 -50 50 A -100 50 50 -1 -899 0 1 0 N -50 50 -100 1 A -100 150 50 899 1 0 1 0 N -100 200 -50 150 A -100 150 50 -1 -899 0 1 0 N -50 150 -100 101 A 100 -50 50 899 -1799 0 1 0 N 100 0 51 -50 A 100 -50 50 1799 -899 0 1 0 N 51 -50 100 -99 A 100 50 50 899 -1799 0 1 0 N 100 100 51 50 A 100 50 50 1799 -899 0 1 0 N 51 50 100 1 A 100 150 50 899 -1799 0 1 0 N 100 200 51 150 A 100 150 50 1799 -899 0 1 0 N 51 150 100 101 A 101 -150 50 910 -1799 0 1 0 N 101 -100 52 -150 A 101 -150 50 -912 -1799 0 1 0 N 101 -199 52 -150 P 2 0 1 0 -25 200 -25 -200 N P 2 0 1 0 25 -200 25 200 N X PR1 1 -400 200 300 R 50 50 1 1 P X PM 2 -400 0 300 R 50 50 1 1 P X PR2 3 -400 -200 300 R 50 50 1 1 P X S1 4 400 -200 300 L 50 50 1 1 P X S2 5 400 200 300 L 50 50 1 1 P ENDDRAW ENDDEF # # Transformer_SP_2S # DEF Transformer_SP_2S T 0 40 Y N 1 F N F0 "T" 0 500 50 H V C CNN F1 "Transformer_SP_2S" 0 -500 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW A -100 -150 50 899 1 0 1 0 N -100 -100 -50 -150 A -100 -150 50 -1 -899 0 1 0 N -50 -150 -100 -199 A -100 -50 50 899 1 0 1 0 N -100 0 -50 -50 A -100 -50 50 -1 -899 0 1 0 N -50 -50 -100 -99 A -100 50 50 899 1 0 1 0 N -100 100 -50 50 A -100 50 50 -1 -899 0 1 0 N -50 50 -100 1 A -100 150 50 899 1 0 1 0 N -100 200 -50 150 A -100 150 50 -1 -899 0 1 0 N -50 150 -100 101 A 100 -350 50 899 -1799 0 1 0 N 100 -300 51 -350 A 100 -350 50 1799 -899 0 1 0 N 51 -350 100 -399 A 100 -250 50 899 -1799 0 1 0 N 100 -200 51 -250 A 100 -250 50 1799 -899 0 1 0 N 51 -250 100 -299 A 100 -150 50 899 -1799 0 1 0 N 100 -100 51 -150 A 100 -150 50 1799 -899 0 1 0 N 51 -150 100 -199 A 100 150 50 899 -1799 0 1 0 N 100 200 51 150 A 100 150 50 1799 -899 0 1 0 N 51 150 100 101 A 100 250 50 899 -1799 0 1 0 N 100 300 51 250 A 100 250 50 1799 -899 0 1 0 N 51 250 100 201 A 100 350 50 899 -1799 0 1 0 N 100 400 51 350 A 100 350 50 1799 -899 0 1 0 N 51 350 100 301 P 2 0 1 0 -20 -400 -20 400 N P 2 0 1 0 20 400 20 -400 N X IN+ 1 -400 200 300 R 50 50 1 1 P X PM 2 -400 0 300 R 50 50 1 1 P X IN- 3 -400 -200 300 R 50 50 1 1 P X OUT1A 4 400 400 300 L 50 50 1 1 P X OUT1B 5 400 100 300 L 50 50 1 1 P X OUT2A 6 400 -100 300 L 50 50 1 1 P X OUT2B 7 400 -400 300 L 50 50 1 1 P ENDDRAW ENDDEF # # Varistor # DEF Varistor RV 0 0 N Y 1 F N F0 "RV" 125 0 50 V V C CNN F1 "Varistor" -125 0 50 V V C CNN F2 "" -70 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST RV_* Varistor* $ENDFPLIST DRAW T 0 -70 -80 50 0 0 0 U Normal 0 C C S -40 -100 40 100 0 1 10 N P 3 0 1 0 -75 100 -75 50 75 -50 N X ~ 1 0 150 50 D 50 50 1 1 P X ~ 2 0 -150 50 U 50 50 1 1 P ENDDRAW ENDDEF # # Varistor_US # DEF Varistor_US RV 0 0 N Y 1 F N F0 "RV" 125 0 50 V V C CNN F1 "Varistor_US" -125 0 50 V V C CNN F2 "" -70 0 50 V I C CNN F3 "" 0 0 50 H I C CNN $FPLIST RV_* Varistor* $ENDFPLIST DRAW T 0 -70 -80 50 0 0 0 U Normal 0 C C P 2 0 1 0 0 -90 0 -100 N P 2 0 1 0 0 90 0 100 N P 3 0 1 0 -75 100 -75 50 75 -50 N P 5 0 1 0 0 -30 40 -45 0 -60 -40 -75 0 -90 N P 5 0 1 0 0 30 40 15 0 0 -40 -15 0 -30 N P 5 0 1 0 0 90 40 75 0 60 -40 45 0 30 N X ~ 1 0 150 50 D 50 50 1 1 P X ~ 2 0 -150 50 U 50 50 1 1 P ENDDRAW ENDDEF # # Voltage_Divider # DEF Voltage_Divider RN 0 0 Y N 1 F N F0 "RN" -175 0 50 V V C CNN F1 "Voltage_Divider" -100 0 50 V V C CNN F2 "" 475 0 50 V I C CNN F3 "" 200 0 50 H I C CNN $FPLIST R?Array?SIP* SOT?23 $ENDFPLIST DRAW C 0 1 10 0 1 0 F S -50 -150 50 150 0 1 10 f S -20 -133 20 -33 0 1 10 N S -20 133 20 33 0 1 10 N P 2 0 1 0 0 -200 0 -135 N P 2 0 1 0 0 35 0 -35 N P 2 0 1 0 0 200 0 133 N P 2 0 1 0 50 0 0 0 N X ~ 1 0 250 100 D 50 50 1 1 P X ~ 2 150 0 100 L 50 50 1 1 P X ~ 3 0 -250 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Voltage_Divider_CenterPin1 # DEF Voltage_Divider_CenterPin1 RN 0 0 Y N 1 F N F0 "RN" -175 0 50 V V C CNN F1 "Voltage_Divider_CenterPin1" -100 0 50 V V C CNN F2 "" 475 0 50 V I C CNN F3 "" 200 0 50 H I C CNN $FPLIST R?Array?SIP* SOT?23 $ENDFPLIST DRAW C 0 1 10 0 1 0 F S -50 -150 50 150 0 1 10 f S -20 -133 20 -33 0 1 10 N S -20 133 20 33 0 1 10 N P 2 0 1 0 0 -200 0 -135 N P 2 0 1 0 0 35 0 -35 N P 2 0 1 0 0 200 0 133 N P 2 0 1 0 50 0 0 0 N X ~ 1 150 0 100 L 50 50 1 1 P X ~ 2 0 250 100 D 50 50 1 1 P X ~ 3 0 -250 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Voltage_Divider_CenterPin3 # DEF Voltage_Divider_CenterPin3 RN 0 0 Y N 1 F N F0 "RN" -175 0 50 V V C CNN F1 "Voltage_Divider_CenterPin3" -100 0 50 V V C CNN F2 "" 475 0 50 V I C CNN F3 "" 200 0 50 H I C CNN $FPLIST R?Array?SIP* SOT?23 $ENDFPLIST DRAW C 0 1 10 0 1 0 F S -50 -150 50 150 0 1 10 f S -20 -133 20 -33 0 1 10 N S -20 133 20 33 0 1 10 N P 2 0 1 0 0 -200 0 -135 N P 2 0 1 0 0 35 0 -35 N P 2 0 1 0 0 200 0 133 N P 2 0 1 0 50 0 0 0 N X ~ 1 0 250 100 D 50 50 1 1 P X ~ 2 0 -250 100 U 50 50 1 1 P X ~ 3 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # Voltmeter_AC # DEF Voltmeter_AC MES 0 1 N N 1 F N F0 "MES" -130 40 50 H V R CNN F1 "Voltmeter_AC" -130 -30 50 H V R CNN F2 "" 0 100 50 V I C CNN F3 "" 0 100 50 V I C CNN DRAW A -20 -54 21 -1633 -167 0 1 0 N -40 -60 0 -60 A 20 -65 21 140 1660 0 1 0 N 40 -60 0 -60 C 0 0 100 0 1 10 N T 0 0 20 100 0 0 0 V Normal 0 C C P 2 0 0 0 -125 -125 -75 -75 N P 2 0 0 0 75 75 125 125 N P 3 0 0 0 75 125 125 125 125 75 N X ~ 1 0 -200 100 U 50 50 1 1 P X ~ 2 0 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Voltmeter_DC # DEF Voltmeter_DC MES 0 1 N N 1 F N F0 "MES" -130 40 50 H V R CNN F1 "Voltmeter_DC" -130 -30 50 H V R CNN F2 "" 0 100 50 V I C CNN F3 "" 0 100 50 V I C CNN DRAW C 0 0 100 0 1 10 N T 0 0 0 100 0 0 0 V Normal 0 C C P 2 0 0 0 -125 -125 -75 -75 N P 2 0 0 0 75 75 125 125 N P 3 0 0 0 75 125 125 125 125 75 N P 2 0 1 0 10 150 30 150 N P 2 0 1 0 20 160 20 140 N X - 1 0 -200 100 U 50 50 1 1 P X + 2 0 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # #End Library ================================================ FILE: esim-cloud-backend/kicad-symbols/additional/Diode.dcm ================================================ EESchema-DOCLIB Version 2.0 # $CMP 1.5KExxA D 1500W unidirectional TRANSZORB® Transient Voltage Suppressor, DO-201AE K diode TVS voltage suppressor F https://www.vishay.com/docs/88301/15ke.pdf $ENDCMP # $CMP 1.5KExxCA D 1500W bidirectional TRANSZORB® Transient Voltage Suppressor, DO-201AE K diode TVS voltage suppressor F https://www.vishay.com/docs/88301/15ke.pdf $ENDCMP # $CMP 1N4001 D 50V 1A General Purpose Rectifier Diode, DO-41 K diode F http://www.vishay.com/docs/88503/1n4001.pdf $ENDCMP # $CMP 1N4002 D 100V 1A General Purpose Rectifier Diode, DO-41 K diode F http://www.vishay.com/docs/88503/1n4001.pdf $ENDCMP # $CMP 1N4003 D 200V 1A General Purpose Rectifier Diode, DO-41 K diode F http://www.vishay.com/docs/88503/1n4001.pdf $ENDCMP # $CMP 1N4004 D 400V 1A General Purpose Rectifier Diode, DO-41 K diode F http://www.vishay.com/docs/88503/1n4001.pdf $ENDCMP # $CMP 1N4005 D 600V 1A General Purpose Rectifier Diode, DO-41 K diode F http://www.vishay.com/docs/88503/1n4001.pdf $ENDCMP # $CMP 1N4006 D 800V 1A General Purpose Rectifier Diode, DO-41 K diode F http://www.vishay.com/docs/88503/1n4001.pdf $ENDCMP # $CMP 1N4007 D 1000V 1A General Purpose Rectifier Diode, DO-41 K diode F http://www.vishay.com/docs/88503/1n4001.pdf $ENDCMP # $CMP 1N4148 D 100V 0.15A standard switching diode, DO-35 K diode F https://assets.nexperia.com/documents/data-sheet/1N4148_1N4448.pdf $ENDCMP # $CMP 1N4148W D 75V 0.15A Fast Switching Diode, SOD-123 K diode F https://www.vishay.com/docs/85748/1n4148w.pdf $ENDCMP # $CMP 1N4148WS D 75V 0.15A Fast switching Diode, SOD-323 K diode F https://www.vishay.com/docs/85751/1n4148ws.pdf $ENDCMP # $CMP 1N4148WT D 75V 0.15A Fast switching Diode, SOD-523 K diode F https://www.diodes.com/assets/Datasheets/ds30396.pdf $ENDCMP # $CMP 1N4149 D 75V Vrm 0.5A Ifsm standard switching diode, DO-35 K diode F http://www.microsemi.com/document-portal/doc_view/11580-lds-0239 $ENDCMP # $CMP 1N4151 D 75V 0.5A standard switching diode, DO-35 K diode F http://www.microsemi.com/document-portal/doc_view/11580-lds-0239 $ENDCMP # $CMP 1N4448 D 100V 0.15A High-speed standard diode, DO-35 K diode F https://assets.nexperia.com/documents/data-sheet/1N4148_1N4448.pdf $ENDCMP # $CMP 1N4448W D 100V 0.15A High-speed standard diode, SOD-123 K diode F https://www.vishay.com/docs/85722/1n4448w.pdf $ENDCMP # $CMP 1N4448WS D 75V 0.15A Small Signal Fast switching Diode, SOD-323 K diode F https://www.vishay.com/docs/81387/1n4448ws.pdf $ENDCMP # $CMP 1N4448WT D 75V 0.15A Fast switching Diode, SOD-523 K diode F http://www.mouser.com/ds/2/149/1N4148WT-461550.pdf $ENDCMP # $CMP 1N47xxA D 1300mW Silicon planar power Zener diodes, DO-41 K zener diode F https://www.vishay.com/docs/85816/1n4728a.pdf $ENDCMP # $CMP 1N53xxB D 5000mW Zener Diode, DO-201 K zener diode F https://diotec.com/tl_files/diotec/files/pdf/datasheets/1n5345b.pdf $ENDCMP # $CMP 1N5400 D 50V 3A General Purpose Rectifier Diode, DO-201AD K diode F http://www.vishay.com/docs/88516/1n5400.pdf $ENDCMP # $CMP 1N5401 D 100V 3A General Purpose Rectifier Diode, DO-201AD K diode F http://www.vishay.com/docs/88516/1n5400.pdf $ENDCMP # $CMP 1N5402 D 200V 3A General Purpose Rectifier Diode, DO-201AD K diode F http://www.vishay.com/docs/88516/1n5400.pdf $ENDCMP # $CMP 1N5403 D 300V 3A General Purpose Rectifier Diode, DO-201AD K diode F http://www.vishay.com/docs/88516/1n5400.pdf $ENDCMP # $CMP 1N5404 D 400V 3A General Purpose Rectifier Diode, DO-201AD K diode F http://www.vishay.com/docs/88516/1n5400.pdf $ENDCMP # $CMP 1N5405 D 500V 3A General Purpose Rectifier Diode, DO-201AD K diode F http://www.vishay.com/docs/88516/1n5400.pdf $ENDCMP # $CMP 1N5406 D 600V 3A General Purpose Rectifier Diode, DO-201AD K diode F http://www.vishay.com/docs/88516/1n5400.pdf $ENDCMP # $CMP 1N5407 D 800V 3A General Purpose Rectifier Diode, DO-201AD K diode F http://www.vishay.com/docs/88516/1n5400.pdf $ENDCMP # $CMP 1N5408 D 1000V 3A General Purpose Rectifier Diode, DO-201AD K diode F http://www.vishay.com/docs/88516/1n5400.pdf $ENDCMP # $CMP 1N5711 D 70V 33mA Schottky diode, DO-35 K diode Schottky F https://www.microsemi.com/document-portal/doc_download/8865-lds-0040-datasheet $ENDCMP # $CMP 1N5711UR D 70V 33mA Schottky diode, MELF(DO-213AA) K diode Schottky F https://www.microsemi.com/document-portal/doc_download/131890-lds-0040-1-datasheet $ENDCMP # $CMP 1N5712 D 20V 75mA Schottky diode, DO-35 K diode Schottky F https://www.microsemi.com/document-portal/doc_download/8865-lds-0040-datasheet $ENDCMP # $CMP 1N5712UR D 20V 75mA Schottky diode, MELF(DO-213AA) K diode Schottky F https://www.microsemi.com/document-portal/doc_download/131890-lds-0040-1-datasheet $ENDCMP # $CMP 1N5817 D 20V 1A Schottky Barrier Rectifier Diode, DO-41 K diode Schottky F http://www.vishay.com/docs/88525/1n5817.pdf $ENDCMP # $CMP 1N5818 D 30V 1A Schottky Barrier Rectifier Diode, DO-41 K diode Schottky F http://www.vishay.com/docs/88525/1n5817.pdf $ENDCMP # $CMP 1N5819 D 40V 1A Schottky Barrier Rectifier Diode, DO-41 K diode Schottky F http://www.vishay.com/docs/88525/1n5817.pdf $ENDCMP # $CMP 1N5820 D 20V 3A Schottky Barrier Rectifier Diode, DO-201AD K diode Schottky F http://www.vishay.com/docs/88526/1n5820.pdf $ENDCMP # $CMP 1N5821 D 30V 3A Schottky Barrier Rectifier Diode, DO-201AD K diode Schottky F http://www.vishay.com/docs/88526/1n5820.pdf $ENDCMP # $CMP 1N5822 D 40V 3A Schottky Barrier Rectifier Diode, DO-201AD K diode Schottky F http://www.vishay.com/docs/88526/1n5820.pdf $ENDCMP # $CMP 1N6263 D 60V 15mA Schottky diode, DO-35 K diode Schottky F www.st.com/resource/en/datasheet/1n6263.pdf $ENDCMP # $CMP 1N62xxA D 1500W unidirectional TRANSZORB® Transient Voltage Suppressor, DO-201AE K diode TVS voltage suppressor F https://www.vishay.com/docs/88301/15ke.pdf $ENDCMP # $CMP 1N62xxCA D 1500W bidirectional TRANSZORB® Transient Voltage Suppressor, DO-201AE K diode TVS voltage suppressor F https://www.vishay.com/docs/88301/15ke.pdf $ENDCMP # $CMP 1N630xA D 1500W unidirectional TRANSZORB® Transient Voltage Suppressor, DO-201AE K diode TVS voltage suppressor F https://www.vishay.com/docs/88301/15ke.pdf $ENDCMP # $CMP 1N630xCA D 1500W bidirectional TRANSZORB® Transient Voltage Suppressor, DO-201AE K diode TVS voltage suppressor F https://www.vishay.com/docs/88301/15ke.pdf $ENDCMP # $CMP 1N6857 D 20V 150mA Schottky diode, DO-35 K diode Schottky F https://www.microsemi.com/document-portal/doc_download/8865-lds-0040-datasheet $ENDCMP # $CMP 1N6857UR D 20V 150mA Schottky diode, MELF(DO-213AA) K diode Schottky F https://www.microsemi.com/document-portal/doc_download/131890-lds-0040-1-datasheet $ENDCMP # $CMP 1N6858 D 70V 75mA Schottky diode, DO-35 K diode Schottky F https://www.microsemi.com/document-portal/doc_download/8865-lds-0040-datasheet $ENDCMP # $CMP 1N6858UR D 70V 75mA Schottky diode, MELF(DO-213AA) K diode Schottky F https://www.microsemi.com/document-portal/doc_download/131890-lds-0040-1-datasheet $ENDCMP # $CMP 1N914 D 100V 0.3A Small Signal Fast Switching Diode, DO-35 K diode F http://www.vishay.com/docs/85622/1n914.pdf $ENDCMP # $CMP 1N914WT D 75V 0.15A Fast switching Diode, SOD-523 K diode F http://www.mouser.com/ds/2/149/1N4148WT-461550.pdf $ENDCMP # $CMP 2BZX84Cxx D 300mW Double Zener Diode, SOT-23 K zener diode F https://diotec.com/tl_files/diotec/files/pdf/datasheets/bzx84c2v4.pdf $ENDCMP # $CMP 5KPxxA D 5000W unidirectional Transient Voltage Suppressor, P-600 K diode TVS voltage suppressor F https://diotec.com/tl_files/diotec/files/pdf/datasheets/5kp65.pdf $ENDCMP # $CMP 5KPxxCA D 5000W bidirectional Transient Voltage Suppressor, P-600 K diode TVS voltage suppressor F https://diotec.com/tl_files/diotec/files/pdf/datasheets/5kp65.pdf $ENDCMP # $CMP B120-E3 D 20V 1A Schottky Barrier Rectifier Diode, SMA(DO-214AC) K diode Schottky F http://www.vishay.com/docs/88946/b120.pdf $ENDCMP # $CMP B130-E3 D 30V 1A Schottky Barrier Rectifier Diode, SMA(DO-214AC) K diode Schottky F http://www.vishay.com/docs/88946/b120.pdf $ENDCMP # $CMP B140-E3 D 40V 1A Schottky Barrier Rectifier Diode, SMA(DO-214AC) K diode Schottky F http://www.vishay.com/docs/88946/b120.pdf $ENDCMP # $CMP B150-E3 D 50V 1A Schottky Barrier Rectifier Diode, SMA(DO-214AC) K diode Schottky F http://www.vishay.com/docs/88946/b120.pdf $ENDCMP # $CMP B160-E3 D 60V 1A Schottky Barrier Rectifier Diode, SMA(DO-214AC) K diode Schottky F http://www.vishay.com/docs/88946/b120.pdf $ENDCMP # $CMP B220 D 20V 2A Schottky Barrier Rectifier Diode, SMB K diode Schottky F http://www.jameco.com/Jameco/Products/ProdDS/1538777.pdf $ENDCMP # $CMP B230 D 30V 2A Schottky Barrier Rectifier Diode, SMB K diode Schottky F http://www.jameco.com/Jameco/Products/ProdDS/1538777.pdf $ENDCMP # $CMP B240 D 40V 2A Schottky Barrier Rectifier Diode, SMB K diode Schottky F http://www.jameco.com/Jameco/Products/ProdDS/1538777.pdf $ENDCMP # $CMP B250 D 50V 2A Schottky Barrier Rectifier Diode, SMB K diode Schottky F http://www.jameco.com/Jameco/Products/ProdDS/1538777.pdf $ENDCMP # $CMP B260 D 60V 2A Schottky Barrier Rectifier Diode, SMB K diode Schottky F http://www.jameco.com/Jameco/Products/ProdDS/1538777.pdf $ENDCMP # $CMP B320 D 20V 3A Schottky Barrier Rectifier Diode, SMC K diode Schottky F http://www.jameco.com/Jameco/Products/ProdDS/1538777.pdf $ENDCMP # $CMP B330 D 30V 3A Schottky Barrier Rectifier Diode, SMC K diode Schottky F http://www.jameco.com/Jameco/Products/ProdDS/1538777.pdf $ENDCMP # $CMP B340 D 40V 3A Schottky Barrier Rectifier Diode, SMC K diode Schottky F http://www.jameco.com/Jameco/Products/ProdDS/1538777.pdf $ENDCMP # $CMP B350 D 50V 3A Schottky Barrier Rectifier Diode, SMC K diode Schottky F http://www.jameco.com/Jameco/Products/ProdDS/1538777.pdf $ENDCMP # $CMP B360 D 60V 3A Schottky Barrier Rectifier Diode, SMC K diode Schottky F http://www.jameco.com/Jameco/Products/ProdDS/1538777.pdf $ENDCMP # $CMP BA157 D 400V 1A Fast recovery Rectifier Diode, DO-41 K diode F http://diotec.com/tl_files/diotec/files/pdf/datasheets/ba157 $ENDCMP # $CMP BA158 D 600V 1A Fast recovery Rectifier Diode, DO-41 K diode F http://diotec.com/tl_files/diotec/files/pdf/datasheets/ba157 $ENDCMP # $CMP BA159 D 1000V 1A Fast recovery Rectifier Diode, DO-41 K diode F http://diotec.com/tl_files/diotec/files/pdf/datasheets/ba157 $ENDCMP # $CMP BA243 D 20V 0.1A silicon planar diode for VHF tuner band selection, DO-35 K diode F http://cdn-reichelt.de/documents/datenblatt/A400/BA243_TFK.pdf $ENDCMP # $CMP BA244 D 20V 0.1A silicon planar diode for VHF tuner band selection, DO-35 K diode F http://cdn-reichelt.de/documents/datenblatt/A400/BA243_TFK.pdf $ENDCMP # $CMP BA282 D 35V 0.1A Band Switching Diode, DO-35 K diode F http://docs-europe.electrocomponents.com/webdocs/1304/0900766b813040d6.pdf $ENDCMP # $CMP BA283 D 35V 0.1A Band Switching Diode, DO-35 K diode F http://docs-europe.electrocomponents.com/webdocs/1304/0900766b813040d6.pdf $ENDCMP # $CMP BAR42FILM D 30V 0.1A Small signal Schottky diode, SOT-23 K diode Schottky F www.st.com/resource/en/datasheet/bar42.pdf $ENDCMP # $CMP BAR43FILM D 30V 0.1A Small signal Schottky diode, SOT-23 K diode Schottky F www.st.com/resource/en/datasheet/bar43.pdf $ENDCMP # $CMP BAS16TW D Fast switching diode array 3 independent K diode F http://www.diodes.com/datasheets/ds30154.pdf $ENDCMP # $CMP BAS16VY D Fast switching diode array 3 independent K diode F https://assets.nexperia.com/documents/data-sheet/BAS16_SER.pdf $ENDCMP # $CMP BAS16W D 100V, 0.175A, High-speed Switching Diode, SOT-323 K diode F https://assets.nexperia.com/documents/data-sheet/BAS16_SER.pdf $ENDCMP # $CMP BAS316 D 100V, 0.25A, High-speed Switching Diode, SOD-323 K diode F https://assets.nexperia.com/documents/data-sheet/BAS16_SER.pdf $ENDCMP # $CMP BAS40-04 D 40V 0.2A Dual Small Signal Schottky Diodes K Schottky, Diode F http://www.vishay.com/docs/85701/bas40v.pdf $ENDCMP # $CMP BAS516 D 100V, 0.25A, High-speed Switching Diode, SOD-523 K diode F https://assets.nexperia.com/documents/data-sheet/BAS16_SER.pdf $ENDCMP # $CMP BAT41 D 100V 0.1A Small Signal Schottky Diode, DO-35 K diode Schottky F http://www.vishay.com/docs/85659/bat41.pdf $ENDCMP # $CMP BAT42 D 30V 0.2A Small Signal Schottky Diode, DO-35 K diode Schottky F http://www.vishay.com/docs/85660/bat42.pdf $ENDCMP # $CMP BAT42W-V D 30V 0.2A Small Signal Schottky diode, SOD-123 K diode Schottky F http://www.vishay.com/docs/85660/bat42.pdf $ENDCMP # $CMP BAT43 D 30V 0.2A Small Signal Schottky Diode, DO-35 K diode Schottky F http://www.vishay.com/docs/85660/bat42.pdf $ENDCMP # $CMP BAT43W-V D 30V 0.2A Small Signal Schottky diode, SOD-123 K diode Schottky F http://www.vishay.com/docs/85660/bat42.pdf $ENDCMP # $CMP BAT46 D 100V 0.15A Small Signal Schottky Diode, DO-35 K diode Schottky F http://www.vishay.com/docs/85662/bat46.pdf $ENDCMP # $CMP BAT48JFILM D 40V 0.35A Small Signal Schottky Diode, SOD-323 K diode Schottky F www.st.com/resource/en/datasheet/bat48.pdf $ENDCMP # $CMP BAT48RL D 40V 0.35A Small Signal Schottky Diode, DO-35 K diode Schottky F www.st.com/resource/en/datasheet/bat48.pdf $ENDCMP # $CMP BAT48ZFILM D 40V 0.35A Small Signal Schottky Diode, SOD-123 K diode Schottky F www.st.com/resource/en/datasheet/bat48.pdf $ENDCMP # $CMP BAT54A D schottky barrier diode K schottky diode F http://www.diodes.com/_files/datasheets/ds11005.pdf $ENDCMP # $CMP BAT54ADW D Schottky diode array 2 pair Com A K diode F http://www.diodes.com/datasheets/ds30152.pdf $ENDCMP # $CMP BAT54AW D Dual schottky barrier diode, common anode, SOT-323 K dual schottky diode F https://assets.nexperia.com/documents/data-sheet/BAT54W_SER.pdf $ENDCMP # $CMP BAT54C D dual schottky barrier diode, common cathode K schottky diode common cathode F http://www.diodes.com/_files/datasheets/ds11005.pdf $ENDCMP # $CMP BAT54CW D Dual schottky barrier diode, common cathode, SOT-323 K dual schottky diode F https://assets.nexperia.com/documents/data-sheet/BAT54W_SER.pdf $ENDCMP # $CMP BAT54J D 30V 200mA Schottky diode, SOD-323F K diode Schottky F https://assets.nexperia.com/documents/data-sheet/BAT54J.pdf $ENDCMP # $CMP BAT54S D schottky barrier diode K schottky diode F https://www.diodes.com/assets/Datasheets/ds11005.pdf $ENDCMP # $CMP BAT54SW D Dual schottky barrier diode, in series, SOT-323 K dual schottky diode F https://assets.nexperia.com/documents/data-sheet/BAT54W_SER.pdf $ENDCMP # $CMP BAT54W D Schottky barrier diode, SOT-323 K schottky diode F https://assets.nexperia.com/documents/data-sheet/BAT54W_SER.pdf $ENDCMP # $CMP BAT60A D 10V 3A High Current Recitifier Schottky Diode, SOD-323 K diode Schottky F https://www.infineon.com/dgdl/Infineon-BAT60ASERIES-DS-v01_01-en.pdf?fileId=db3a304313d846880113def70c9304a9 $ENDCMP # $CMP BAT85 D 30V 0.2A Schottky barrier single diode, DO-35 K diode Schottky F https://assets.nexperia.com/documents/data-sheet/BAT85.pdf $ENDCMP # $CMP BAT86 D 50V 0.2A Small Signal Schottky Diode, DO-35 K diode Schottky F https://assets.nexperia.com/documents/data-sheet/BAT86.pdf $ENDCMP # $CMP BAT86S D 50V 0.2A Small Signal Schottky Diode, DO-35 K diode Schottky F http://www.vishay.com/docs/85514/bat86s.pdf $ENDCMP # $CMP BAV16W D 75V 0.15A Fast Switching Diode, SOD-123 K diode F https://www.diodes.com/assets/Datasheets/ds30086.pdf $ENDCMP # $CMP BAV17 D 20V 0.25A Small Signal Switching Diode, High Voltage, DO-35 K diode F http://www.vishay.com/docs/85543/bav17.pdf $ENDCMP # $CMP BAV18 D 50V 0.25A Small Signal Switching Diode, High Voltage, DO-35 K diode F http://www.vishay.com/docs/85543/bav17.pdf $ENDCMP # $CMP BAV19 D 100V 0.25A Small Signal Switching Diode, High Voltage, DO-35 K diode F http://www.vishay.com/docs/85543/bav17.pdf $ENDCMP # $CMP BAV199DW D Quad Surface Mount Low Leakage Diode, SOT-363 K Quad diode F https://www.diodes.com/assets/Datasheets/ds30417.pdf $ENDCMP # $CMP BAV20 D 150V 0.25A Small Signal Switching Diode, High Voltage, DO-35 K diode F http://www.vishay.com/docs/85543/bav17.pdf $ENDCMP # $CMP BAV21 D 200V 0.25A Small Signal Switching Diode, High Voltage, DO-35 K diode F http://www.vishay.com/docs/85543/bav17.pdf $ENDCMP # $CMP BAV300 D 50V 0.25A Switching Diode, High Voltage, MicroMELF K diode F http://www.vishay.com/docs/85545/bav300.pdf $ENDCMP # $CMP BAV301 D 100V 0.25A Switching Diode, High Voltage, MicroMELF K diode F http://www.vishay.com/docs/85545/bav300.pdf $ENDCMP # $CMP BAV302 D 150V 0.25A Switching Diode, High Voltage, MicroMELF K diode F http://www.vishay.com/docs/85545/bav300.pdf $ENDCMP # $CMP BAV303 D 200V 0.25A Switching Diode, High Voltage, MicroMELF K diode F http://www.vishay.com/docs/85545/bav300.pdf $ENDCMP # $CMP BAV70 D Dual 100V 215mA high-speed switching diodes, common cathode, SOT-23 K diode F https://assets.nexperia.com/documents/data-sheet/BAV70_SER.pdf $ENDCMP # $CMP BAV70M D Dual 100V 150mA high-speed switching diodes, common cathode, SOT-883 K diode F https://assets.nexperia.com/documents/data-sheet/BAV70_SER.pdf $ENDCMP # $CMP BAV70S D 100V 250mA high-speed switching diodes, dual common cathode, SOT-363 K diode F https://assets.nexperia.com/documents/data-sheet/BAV70_SER.pdf $ENDCMP # $CMP BAV70T D Dual 100V 150mA high-speed switching diodes, common cathode, SOT-416 K diode F https://assets.nexperia.com/documents/data-sheet/BAV70_SER.pdf $ENDCMP # $CMP BAV70W D Dual 100V 175mA high-speed switching diodes, common cathode, SOT-323 K diode F https://assets.nexperia.com/documents/data-sheet/BAV70_SER.pdf $ENDCMP # $CMP BAV756S D High-speed switching diodes, dual common anode/common cathode, SOT-363 K Diode F https://assets.nexperia.com/documents/data-sheet/BAV756S_BAW56_SER.pdf $ENDCMP # $CMP BAV99 D BAV99 High-speed switching diodes, SOT-23 K diode F https://assets.nexperia.com/documents/data-sheet/BAV99_SER.pdf $ENDCMP # $CMP BAV99S D High-speed switching diodes, dual series, SOT-363 K Diode F https://assets.nexperia.com/documents/data-sheet/BAV99_SER.pdf $ENDCMP # $CMP BAW56DW D Switching diode array 2 pair Com A K diode F http://www.diodes.com/datasheets/ds30146.pdf $ENDCMP # $CMP BAW56S D High Speed Switching Diode Array 2 pair Com A K diode F https://assets.nexperia.com/documents/data-sheet/BAV756S_BAW56_SER.pdf $ENDCMP # $CMP BAW75 D 25V 0.45A Small Signal Switching Diode, DO-35 K diode F http://www.vishay.com/docs/85550/baw75.pdf $ENDCMP # $CMP BAW76 D 50V 0.3A Small Signal Fast Switching Diode, DO-35 K diode F http://www.vishay.com/docs/85551/baw76.pdf $ENDCMP # $CMP BAY93 D 20V 0.115A Very Fast Switching Diode, DO-35 K diode F https://cdn-reichelt.de/documents/datenblatt/A400/BAY93_TFK.pdf $ENDCMP # $CMP BYV79-100 D 100V 14A Ultrafast Rectifier Diode, TO-220 K diode F http://pdf.datasheetcatalog.com/datasheet/philips/BYV79-100.pdf $ENDCMP # $CMP BYV79-150 D 150V 14A Ultrafast Rectifier Diode, TO-220 K diode F http://pdf.datasheetcatalog.com/datasheet/philips/BYV79-100.pdf $ENDCMP # $CMP BYV79-200 D 200V 14A Ultrafast Rectifier Diode, TO-220 K diode F http://pdf.datasheetcatalog.com/datasheet/philips/BYV79-100.pdf $ENDCMP # $CMP BZD27Cxx D 800mW Zener Diode, 3.6-200V, SMF K zener diode F https://www.vishay.com/docs/85153/bzd27series.pdf $ENDCMP # $CMP BZM55Bxx D 500mW Zener Diode, 2%, MicroMELF K zener diode F http://www.vishay.com/docs/85597/bzm55.pdf $ENDCMP # $CMP BZM55Cxx D 500mW Zener Diode, 6%, MicroMELF K zener diode F http://www.vishay.com/docs/85597/bzm55.pdf $ENDCMP # $CMP BZT52Bxx D 500mW Zener Diode, SOD-123 K zener diode F https://diotec.com/tl_files/diotec/files/pdf/datasheets/bzt52b2v4.pdf $ENDCMP # $CMP BZX384-xxx D 300mW Zener Diode, SOD-323 K zener diode F https://assets.nexperia.com/documents/data-sheet/BZX384_SERIES.pdf $ENDCMP # $CMP BZX84Cxx D 300mW Zener Diode, SOT-23 K zener diode F https://diotec.com/tl_files/diotec/files/pdf/datasheets/bzx84c2v4.pdf $ENDCMP # $CMP C3D02060A D 600V, 2A, SiC Schottky Diode, TO-220 K sic diode F https://www.wolfspeed.com/media/downloads/55/C3D02060A.pdf $ENDCMP # $CMP C3D02060E D 600V, 2A, SiC Schottky Diode, TO-252 K sic diode F https://www.wolfspeed.com/media/downloads/116/C3D02060E.pdf $ENDCMP # $CMP C3D02060F D 600V, 2A, SiC Schottky Diode, TO-220F K sic diode F https://www.wolfspeed.com/media/downloads/35/C3D02060F.pdf $ENDCMP # $CMP C3D02065E D 650V, 2A, SiC Schottky Diode, TO-252 K sic diode F https://www.wolfspeed.com/media/downloads/118/C3D02065E.pdf $ENDCMP # $CMP C3D03060A D 600V, 3A, SiC Schottky Diode, TO-220 K sic diode F https://www.wolfspeed.com/media/downloads/57/C3D03060A.pdf $ENDCMP # $CMP C3D03060E D 600V, 3A, SiC Schottky Diode, TO-252 K sic diode F https://www.wolfspeed.com/media/downloads/119/C3D03060E.pdf $ENDCMP # $CMP C3D03060F D 600V, 3A, SiC Schottky Diode, TO-220F K sic diode F https://www.wolfspeed.com/media/downloads/39/C3D03060F.pdf $ENDCMP # $CMP C3D03065E D 650V, 3A, SiC Schottky Diode, TO-252 K sic diode F https://www.wolfspeed.com/media/downloads/121/C3D03065E.pdf $ENDCMP # $CMP C3D04060A D 600V, 4A, SiC Schottky Diode, TO-220 K sic diode F https://www.wolfspeed.com/media/downloads/845/C3D04060A.pdf $ENDCMP # $CMP C3D04060E D 600V, 4A, SiC Schottky Diode, TO-252 K sic diode F https://www.wolfspeed.com/media/downloads/122/C3D04060E.pdf $ENDCMP # $CMP C3D04060F D 600V, 4A, SiC Schottky Diode, TO-220F K sic diode F https://www.wolfspeed.com/media/downloads/41/C3D04060F.pdf $ENDCMP # $CMP C3D04065A D 650V, 4A, SiC Schottky Diode, TO-220 K sic diode F https://www.wolfspeed.com/media/downloads/841/C3D04065A.pdf $ENDCMP # $CMP C3D04065E D 650V, 4A, SiC Schottky Diode, TO-252 K sic diode F https://www.wolfspeed.com/media/downloads/124/C3D04065E.pdf $ENDCMP # $CMP C3D06060A D 600V, 6A, SiC Schottky Diode, TO-220 K sic diode F https://www.wolfspeed.com/media/downloads/844/C3D06060A.pdf $ENDCMP # $CMP C3D06060F D 600V, 6A, SiC Schottky Diode, TO-220F K sic diode F https://www.wolfspeed.com/media/downloads/43/C3D06060F.pdf $ENDCMP # $CMP C3D06060G D 600V, 6A, SiC Schottky Diode, TO-263 K sic diode F https://www.wolfspeed.com/media/downloads/137/C3D06060G.pdf $ENDCMP # $CMP C3D06065A D 650V, 6A, SiC Schottky Diode, TO-220 K sic diode F https://www.wolfspeed.com/media/downloads/65/C3D06065A.pdf $ENDCMP # $CMP C3D06065E D 650V, 6A, SiC Schottky Diode, TO-252 K sic diode F https://www.wolfspeed.com/media/downloads/125/C3D06065E.pdf $ENDCMP # $CMP C3D06065I D 650V, 6A, SiC Schottky Diode, Isolated TO-220 K sic diode F https://www.wolfspeed.com/media/downloads/44/C3D06065I.pdf $ENDCMP # $CMP C3D08060A D 600V, 8A, SiC Schottky Diode, TO-220 K sic diode F https://www.wolfspeed.com/media/downloads/843/C3D08060A.pdf $ENDCMP # $CMP C3D08060G D 600V, 8A, SiC Schottky Diode, TO-263 K sic diode F https://www.wolfspeed.com/media/downloads/141/C3D08060G.pdf $ENDCMP # $CMP C3D08065A D 650V, 8A, SiC Schottky Diode, TO-220 K sic diode F https://www.wolfspeed.com/media/downloads/840/C3D08065A.pdf $ENDCMP # $CMP C3D08065E D 650V, 8A, SiC Schottky Diode, TO-252 K sic diode F https://www.wolfspeed.com/media/downloads/839/C3D08065E.pdf $ENDCMP # $CMP C3D08065I D 650V, 8A, SiC Schottky Diode, Isolated TO-220 K sic diode F https://www.wolfspeed.com/media/downloads/47/C3D08065I.pdf $ENDCMP # $CMP C3D10060A D 600V, 10A, SiC Schottky Diode, TO-220 K sic diode F https://www.wolfspeed.com/media/downloads/842/C3D10060A.pdf $ENDCMP # $CMP C3D10060G D 600V, 10A, SiC Schottky Diode, TO-263 K sic diode F https://www.wolfspeed.com/media/downloads/143/C3D10060G.pdf $ENDCMP # $CMP C3D10065A D 650V, 10A, SiC Schottky Diode, TO-220 K sic diode F https://www.wolfspeed.com/media/downloads/73/C3D10065A.pdf $ENDCMP # $CMP C3D10065E D 650V, 10A, SiC Schottky Diode, TO-252 K sic diode F https://www.wolfspeed.com/media/downloads/127/C3D10065E.pdf $ENDCMP # $CMP C3D10065I D 650V, 10A, SiC Schottky Diode, Isolated TO-220 K sic diode F https://www.wolfspeed.com/media/downloads/49/C3D10065I.pdf $ENDCMP # $CMP C3D10170H D 1700V, 10A, SiC Schottky Diode, TO-247 K sic diode F https://www.wolfspeed.com/media/downloads/96/C3D10170H.pdf $ENDCMP # $CMP C3D12065A D 650V, 12A, SiC Schottky Diode, TO-220 K sic diode F https://www.wolfspeed.com/media/downloads/963/C3D12065A.pdf $ENDCMP # $CMP C3D16060D D 600V, 16A, SiC Schottky Diode, TO-247-3 K sic diode F https://www.wolfspeed.com/media/downloads/98/C3D16060D.pdf $ENDCMP # $CMP C3D16065A D 650V, 16A, SiC Schottky Diode, TO-220 K sic diode F https://www.wolfspeed.com/media/downloads/964/C3D16065A.pdf $ENDCMP # $CMP C3D16065D D 650V, 16A, SiC Schottky Diode, TO-247-3 K sic diode F https://www.wolfspeed.com/media/downloads/99/C3D16065D.pdf $ENDCMP # $CMP C3D1P7060Q D 600V, 1.7A, SiC Schottky Diode, QFN K sic diode F https://www.wolfspeed.com/media/downloads/846/C3D1P7060Q.pdf $ENDCMP # $CMP C3D20060D D 600V, 20A, SiC Schottky Diode, TO-247-3 K sic diode F https://www.wolfspeed.com/media/downloads/100/C3D20060D.pdf $ENDCMP # $CMP C3D20065D D 650V, 20A, SiC Schottky Diode, TO-247-3 K sic diode F https://www.wolfspeed.com/media/downloads/102/C3D20065D.pdf $ENDCMP # $CMP C3D25170H D 1700V, 25A, SiC Schottky Diode, TO-247 K sic diode F https://www.wolfspeed.com/media/downloads/103/C3D25170H.pdf $ENDCMP # $CMP C3D30065D D 650V, 30A, SiC Schottky Diode, TO-247-3 K sic diode F https://www.wolfspeed.com/media/downloads/969/C3D30065D.pdf $ENDCMP # $CMP C4D02120A D 1200V, 2A, SiC Schottky Diode, TO-220 K sic diode F https://www.wolfspeed.com/media/downloads/75/C4D02120A.pdf $ENDCMP # $CMP C4D02120E D 1200V, 2A, SiC Schottky Diode, TO-252 K sic diode F https://www.wolfspeed.com/media/downloads/128/C4D02120E.pdf $ENDCMP # $CMP C4D05120A D 1200V, 5A, SiC Schottky Diode, TO-220 K sic diode F https://www.wolfspeed.com/media/downloads/77/C4D05120A.pdf $ENDCMP # $CMP C4D05120E D 1200V, 5A, SiC Schottky Diode, TO-252 K sic diode F https://www.wolfspeed.com/media/downloads/130/C4D05120E.pdf $ENDCMP # $CMP C4D08120A D 1200V, 8A, SiC Schottky Diode, TO-220 K sic diode F https://www.wolfspeed.com/media/downloads/80/C4D08120A.pdf $ENDCMP # $CMP C4D08120E D 1200V, 8A, SiC Schottky Diode, TO-252 K sic diode F https://www.wolfspeed.com/media/downloads/132/C4D08120E.pdf $ENDCMP # $CMP C4D10120A D 1200V, 10A, SiC Schottky Diode, TO-220 K sic diode F https://www.wolfspeed.com/media/downloads/82/C4D10120A.pdf $ENDCMP # $CMP C4D10120D D 1200V, 10A, SiC Schottky Diode, TO-247-3 K sic diode F https://www.wolfspeed.com/media/downloads/104/C4D10120D.pdf $ENDCMP # $CMP C4D10120E D 1200V, 10A, SiC Schottky Diode, TO-252 K sic diode F https://www.wolfspeed.com/media/downloads/134/C4D10120E.pdf $ENDCMP # $CMP C4D10120H D 1200V, 10A, SiC Schottky Diode, TO-247 K sic diode F https://www.wolfspeed.com/media/downloads/1189/C4D10120H.pdf $ENDCMP # $CMP C4D15120A D 1200V, 15A, SiC Schottky Diode, TO-220 K sic diode F https://www.wolfspeed.com/media/downloads/84/C4D15120A.pdf $ENDCMP # $CMP C4D15120D D 1200V, 15A, SiC Schottky Diode, TO-247-3 K sic diode F https://www.wolfspeed.com/media/downloads/848/C4D15120D.pdf $ENDCMP # $CMP C4D15120H D 1200V, 15A, SiC Schottky Diode, TO-247 K sic diode F https://www.wolfspeed.com/media/downloads/1190/C4D15120H.pdf $ENDCMP # $CMP C4D20120A D 1200V, 20A, SiC Schottky Diode, TO-220 K sic diode F https://www.wolfspeed.com/media/downloads/85/C4D20120A.pdf $ENDCMP # $CMP C4D20120D D 1200V, 20A, SiC Schottky Diode, TO-247-3 K sic diode F https://www.wolfspeed.com/media/downloads/106/C4D20120D.pdf $ENDCMP # $CMP C4D20120H D 1200V, 20A, SiC Schottky Diode, TO-247 K sic diode F https://www.wolfspeed.com/media/downloads/1191/C4D20120H.pdf $ENDCMP # $CMP C4D30120D D 1200V, 30A, SiC Schottky Diode, TO-247-3 K sic diode F https://www.wolfspeed.com/media/downloads/108/C4D30120D.pdf $ENDCMP # $CMP C4D40120D D 1200V, 40A, SiC Schottky Diode, TO-247-3 K sic diode F https://www.wolfspeed.com/media/downloads/109/C4D40120D.pdf $ENDCMP # $CMP C5D50065D D 650V, 50A, SiC Schottky Diode, TO-247-3 K sic diode F https://www.wolfspeed.com/media/downloads/111/C5D50065D.pdf $ENDCMP # $CMP CD4148W D 75V 0.15A Switching Diode, 0805 K diode F https://www.dccomponents.com/upload/product/original/806236332588.pdf $ENDCMP # $CMP CSD01060A D 600V, 1A, SiC Schottky Diode, TO-220 K sic diode F https://www.wolfspeed.com/media/downloads/87/CSD01060.pdf $ENDCMP # $CMP CSD01060E D 600V, 1A, SiC Schottky Diode, TO-252 K sic diode F https://www.wolfspeed.com/media/downloads/87/CSD01060.pdf $ENDCMP # $CMP CVFD20065A D 650V, 20A, SiC Schottky Diode, TO-220 K sic diode F https://www.wolfspeed.com/media/downloads/89/CVFD20065A.pdf $ENDCMP # $CMP Central_Semi_CMKD4448 D High speed switching diode array 3 independent K diode F http://www.centralsemi.com/PDFs/products/CMKD4448.PDF $ENDCMP # $CMP Central_Semi_CMKD6001 D Ultra low leakage switching diode array 3 independent K diode F http://www.centralsemi.com/PDFs/products/CMKD6001.PDF $ENDCMP # $CMP Comchip_ACDSV6-4448TI-G D Small signal switching diode array 3 independent K diode F http://www.comchiptech.com/cms/UserFiles/ACDSV6-4448TI-G%20RevA285610.pdf $ENDCMP # $CMP Comchip_CDSV6-4148-G D Fast switching diode array 3 independent K diode F http://www.comchiptech.com/cms/UserFiles/CDSV6-16-G,4148-G%20RevA272279.pdf $ENDCMP # $CMP Comchip_CDSV6-4448TI-G D High speed switching diode array 3 independent K diode F http://www.comchiptech.com/cms/UserFiles/CDSV6-4448XX-G%20RevC285574.pdf $ENDCMP # $CMP DB3 D 32V 2A Bidirectional trigger diode, DO-35 K AC diode DIAC F http://cdn-reichelt.de/documents/datenblatt/A100/DB%203%23st.pdf $ENDCMP # $CMP DB4 D 34V 2A Bidirectional trigger diode, DO-35 K AC diode DIAC F http://cdn-reichelt.de/documents/datenblatt/A100/DB%203%23st.pdf $ENDCMP # $CMP DC34 D 40V 2A Bidirectional trigger diode, DO-35 K AC diode DIAC F http://cdn-reichelt.de/documents/datenblatt/A100/DB%203%23st.pdf $ENDCMP # $CMP DSB2810 D 20V 75mA Schottky diode, DO-35 K diode Schottky F https://www.microsemi.com/document-portal/doc_download/8865-lds-0040-datasheet $ENDCMP # $CMP DSB5712 D 20V 75mA Schottky diode, DO-35 K diode Schottky F https://www.microsemi.com/document-portal/doc_download/8865-lds-0040-datasheet $ENDCMP # $CMP DZ2S030X0L D 150mW Silicon Planar Zener Diode, 3.0V, SOD-523 K zener diode F https://industrial.panasonic.com/content/data/SC/ds/ds4/DZ2S03000L_E.pdf $ENDCMP # $CMP DZ2S033X0L D 150mW Silicon Planar Zener Diode, 3.3V, SOD-523 K zener diode F https://industrial.panasonic.com/content/data/SC/ds/ds4/DZ2S03300L_E.pdf $ENDCMP # $CMP DZ2S036X0L D 150mW Silicon Planar Zener Diode, 3.6V, SOD-523 K zener diode F https://industrial.panasonic.com/content/data/SC/ds/ds4/DZ2S03600L_E.pdf $ENDCMP # $CMP DZ2S039X0L D 150mW Silicon Planar Zener Diode, 3.9V, SOD-523 K zener diode F https://industrial.panasonic.com/content/data/SC/ds/ds4/DZ2S03900L_E.pdf $ENDCMP # $CMP DZ2S047X0L D 150mW Silicon Planar Zener Diode, 4.7V, SOD-523 K zener diode F https://industrial.panasonic.com/content/data/SC/ds/ds4/DZ2S04700L_E.pdf $ENDCMP # $CMP DZ2S051X0L D 150mW Silicon Planar Zener Diode, 5.1V, SOD-523 K zener diode F https://industrial.panasonic.com/content/data/SC/ds/ds4/DZ2S05100L_E.pdf $ENDCMP # $CMP DZ2S056X0L D 150mW Silicon Planar Zener Diode, 5.6V, SOD-523 K zener diode F https://industrial.panasonic.com/content/data/SC/ds/ds4/DZ2S05600L_E.pdf $ENDCMP # $CMP DZ2S068X0L D 150mW Silicon Planar Zener Diode, 6.8V, SOD-523 K zener diode F https://industrial.panasonic.com/content/data/SC/ds/ds4/DZ2S06800L_E.pdf $ENDCMP # $CMP DZ2S082X0L D 150mW Silicon Planar Zener Diode, 8.2V, SOD-523 K zener diode F https://industrial.panasonic.com/content/data/SC/ds/ds4/DZ2S08200L_E.pdf $ENDCMP # $CMP DZ2S100X0L D 150mW Silicon Planar Zener Diode, 10V, SOD-523 K zener diode F https://industrial.panasonic.com/content/data/SC/ds/ds4/DZ2S10000L_E.pdf $ENDCMP # $CMP DZ2S110X0L D 150mW Silicon Planar Zener Diode, 11V, SOD-523 K zener diode F https://industrial.panasonic.com/content/data/SC/ds/ds4/DZ2S11000L_E.pdf $ENDCMP # $CMP DZ2S120X0L D 150mW Silicon Planar Zener Diode, 12V, SOD-523 K zener diode F https://industrial.panasonic.com/content/data/SC/ds/ds4/DZ2S12000L_E.pdf $ENDCMP # $CMP DZ2S130X0L D 150mW Silicon Planar Zener Diode, 13V, SOD-523 K zener diode F https://industrial.panasonic.com/content/data/SC/ds/ds4/DZ2S13000L_E.pdf $ENDCMP # $CMP DZ2S150X0L D 150mW Silicon Planar Zener Diode, 15V, SOD-523 K zener diode F https://industrial.panasonic.com/content/data/SC/ds/ds4/DZ2S15000L_E.pdf $ENDCMP # $CMP DZ2S160X0L D 150mW Silicon Planar Zener Diode, 16V, SOD-523 K zener diode F https://industrial.panasonic.com/content/data/SC/ds/ds4/DZ2S16000L_E.pdf $ENDCMP # $CMP DZ2S180X0L D 150mW Silicon Planar Zener Diode, 18V, SOD-523 K zener diode F https://industrial.panasonic.com/content/data/SC/ds/ds4/DZ2S18000L_E.pdf $ENDCMP # $CMP DZ2S200X0L D 150mW Silicon Planar Zener Diode, 20V, SOD-523 K zener diode F https://industrial.panasonic.com/content/data/SC/ds/ds4/DZ2S20000L_E.pdf $ENDCMP # $CMP DZ2S360X0L D 150mW Silicon Planar Zener Diode, 36V, SOD-523 K zener diode F https://industrial.panasonic.com/content/data/SC/ds/ds4/DZ2S36000L_E.pdf $ENDCMP # $CMP ESD9B3.3ST5G D ESD protection diode, 3.3Vrwm, SOD-923 K diode TVS ESD F https://www.onsemi.com/pub/Collateral/ESD9B-D.PDF $ENDCMP # $CMP ESD9B5.0ST5G D ESD protection diode, 5.0Vrwm, SOD-923 K diode TVS ESD F https://www.onsemi.com/pub/Collateral/ESD9B-D.PDF $ENDCMP # $CMP HN2D02FU D Ultra high speed switching diode array 3 independent K diode F http://www.onsemi.com/pub_link/Collateral/HN2D02FUTW1T1-D.PDF $ENDCMP # $CMP IDDD04G65C6 D 650V, 4A, SiC Schottky Diode, CoolSiC, PG-HDSOP-10-1 (DDPAK) K sic diode F https://www.infineon.com/dgdl/Infineon-IDDD04G65C6-DS-v02_00-EN.pdf?fileId=5546d462625a528f01628f749daa0e03 $ENDCMP # $CMP IDDD06G65C6 D 650V, 6A, SiC Schottky Diode, CoolSiC, PG-HDSOP-10-1 (DDPAK) K sic diode F https://www.infineon.com/dgdl/Infineon-IDDD06G65C6-DS-v02_00-EN.pdf?fileId=5546d462625a528f01628f86ff8c0e09 $ENDCMP # $CMP IDDD08G65C6 D 650V, 8A, SiC Schottky Diode, CoolSiC, PG-HDSOP-10-1 (DDPAK) K sic diode F https://www.infineon.com/dgdl/Infineon-IDDD08G65C6-DS-v02_00-EN.pdf?fileId=5546d462625a528f01628ff7d31a104b $ENDCMP # $CMP IDDD10G65C6 D 650V, 10A, SiC Schottky Diode, CoolSiC, PG-HDSOP-10-1 (DDPAK) K sic diode F https://www.infineon.com/dgdl/Infineon-IDDD10G65C6-DS-v02_00-EN.pdf?fileId=5546d462625a528f01628ff848ec1051 $ENDCMP # $CMP IDDD12G65C6 D 650V, 12A, SiC Schottky Diode, CoolSiC, PG-HDSOP-10-1 (DDPAK) K sic diode F https://www.infineon.com/dgdl/Infineon-IDDD12G65C6-DS-v02_00-EN.pdf?fileId=5546d462625a528f01628f86ec3e0e06 $ENDCMP # $CMP IDDD16G65C6 D 650V, 16A, SiC Schottky Diode, CoolSiC, PG-HDSOP-10-1 (DDPAK) K sic diode F https://www.infineon.com/dgdl/Infineon-IDDD16G65C6-DS-v02_00-EN.pdf?fileId=5546d462625a528f01628f8711b50e0c $ENDCMP # $CMP IDDD20G65C6 D 650V, 20A, SiC Schottky Diode, CoolSiC, PG-HDSOP-10-1 (DDPAK) K sic diode F https://www.infineon.com/dgdl/Infineon-IDDD20G65C6-DS-v02_00-EN.pdf?fileId=5546d462625a528f01628ff837cf104e $ENDCMP # $CMP LL41 D 100V 0.1A Small Signal Schottky diode, MiniMELF K diode Schottky F http://www.vishay.com/docs/85659/bat41.pdf $ENDCMP # $CMP LL4148 D 100V 0.15A standard switching diode, MiniMELF K diode F http://www.vishay.com/docs/85557/ll4148.pdf $ENDCMP # $CMP LL42 D 30V 0.2A Small Signal Schottky diode, MiniMELF K diode Schottky F http://www.vishay.com/docs/85672/ll42.pdf $ENDCMP # $CMP LL43 D 30V 0.2A Small Signal Schottky diode, MiniMELF K diode Schottky F http://www.vishay.com/docs/85672/ll42.pdf $ENDCMP # $CMP LL4448 D 100V 0.15A standard switching diode, MiniMELF K diode F http://www.vishay.com/docs/85557/ll4148.pdf $ENDCMP # $CMP MBR0520 D 20V 0.5A Schottky Power Rectifier Diode, SOD-123 K diode Schottky F http://www.mccsemi.com/up_pdf/MBR0520~MBR0580(SOD123).pdf $ENDCMP # $CMP MBR0520LT D 20V 0.5A Schottky Power Rectifier Diode, SOD-123 K diode Schottky F http://www.onsemi.com/pub_link/Collateral/MBR0520LT1-D.PDF $ENDCMP # $CMP MBR0530 D 30V 0.5A Schottky Power Rectifier Diode, SOD-123 K diode Schottky F http://www.mccsemi.com/up_pdf/MBR0520~MBR0580(SOD123).pdf $ENDCMP # $CMP MBR0540 D 40V 0.5A Schottky Power Rectifier Diode, SOD-123 K diode Schottky F http://www.mccsemi.com/up_pdf/MBR0520~MBR0580(SOD123).pdf $ENDCMP # $CMP MBR0550 D 50V 0.5A Schottky Power Rectifier Diode, SOD-123 K diode Schottky F http://www.mccsemi.com/up_pdf/MBR0520~MBR0580(SOD123).pdf $ENDCMP # $CMP MBR0560 D 60V 0.5A Schottky Power Rectifier Diode, SOD-123 K diode Schottky F http://www.mccsemi.com/up_pdf/MBR0520~MBR0580(SOD123).pdf $ENDCMP # $CMP MBR0570 D 70V 0.5A Schottky Power Rectifier Diode, SOD-123 K diode Schottky F http://www.mccsemi.com/up_pdf/MBR0520~MBR0580(SOD123).pdf $ENDCMP # $CMP MBR0580 D 80V 0.5A Schottky Power Rectifier Diode, SOD-123 K diode Schottky F http://www.mccsemi.com/up_pdf/MBR0520~MBR0580(SOD123).pdf $ENDCMP # $CMP MBR340 D 40V 3A Schottky Barrier Rectifier Diode, DO-201AD K diode Schottky F http://www.onsemi.com/pub_link/Collateral/MBR340-D.PDF $ENDCMP # $CMP MBR735 D 35V 7.5A Schottky Barrier Rectifier Diode, TO-220 K diode Schottky F http://www.onsemi.com/pub_link/Collateral/MBR735-D.PDF $ENDCMP # $CMP MBR745 D 45V 7.5A Schottky Barrier Rectifier Diode, TO-220 K diode Schottky F http://www.onsemi.com/pub_link/Collateral/MBR735-D.PDF $ENDCMP # $CMP MBRA340 D 40V 3A Schottky Barrier Rectifier Diode, SMA(DO-214AC) K diode Schottky F https://www.onsemi.com/pub/Collateral/MBRA340T3-D.PDF $ENDCMP # $CMP MCL4148 D 75V 0.2A Switching Diode, MicroMELF K diode F http://www.vishay.com/docs/85566/mlc4148.pdf $ENDCMP # $CMP MCL4448 D 75V 0.2A Switching Diode, MicroMELF K diode F http://www.vishay.com/docs/85566/mlc4148.pdf $ENDCMP # $CMP MM3Zxx D 300mW Zener Diode, SOD-123F K zener diode F https://diotec.com/tl_files/diotec/files/pdf/datasheets/mm3z2v4.pdf $ENDCMP # $CMP MM5Zxx D 300mW Zener Diode, SOD-523 K zener diode F https://diotec.com/tl_files/diotec/files/pdf/datasheets/mm5z2v4.pdf $ENDCMP # $CMP MMBD4148TW D Fast switching diode array 3 independent K diode F http://www.diodes.com/datasheets/ds30154.pdf $ENDCMP # $CMP MMBD4448HADW D Fast Switching Diode Array 2 pair Com A K diode F http://www.diodes.com/datasheets/ds30153.pdf $ENDCMP # $CMP MMBD4448HCQW D Quad Switching Diode Array Common Cathode K diode F http://www.diodes.com/datasheets/ds30153.pdf $ENDCMP # $CMP MMBD4448HTW D Fast switching diode array 3 independent K diode F http://www.diodes.com/datasheets/ds30153.pdf $ENDCMP # $CMP MMBZxx D Double Zener Diode, Common Anode, 225mW, SOT-23 K dual zener diode F http://www.onsemi.com/pub/Collateral/MMBZ5V6ALT1-D.PDF $ENDCMP # $CMP MMSD4148 D 100V 200mA Switching Diode, SOD-123 K diode F https://www.onsemi.com/pub/Collateral/MMSD4148T1-D.PDF $ENDCMP # $CMP MMSD914 D 100V 0.2A Switching Diode, SOD-123 K diode F https://www.onsemi.com/pub/Collateral/MMSD914T1-D.PDF $ENDCMP # $CMP MRA4003T3G D 300V, 1A, General Purpose Rectifier Diode, SMA(DO-214AC) K diode F http://www.onsemi.com/pub_link/Collateral/MRA4003T3-D.PDF $ENDCMP # $CMP MRA4004T3G D 400V, 1A, General Purpose Rectifier Diode, SMA(DO-214AC) K diode F http://www.onsemi.com/pub_link/Collateral/MRA4003T3-D.PDF $ENDCMP # $CMP MRA4005T3G D 600V, 1A, General Purpose Rectifier Diode, SMA(DO-214AC) K diode F http://www.onsemi.com/pub_link/Collateral/MRA4003T3-D.PDF $ENDCMP # $CMP MRA4006T3G D 800V, 1A, General Purpose Rectifier Diode, SMA(DO-214AC) K diode F http://www.onsemi.com/pub_link/Collateral/MRA4003T3-D.PDF $ENDCMP # $CMP MRA4007T3G D 1000V, 1A, General Purpose Rectifier Diode, SMA(DO-214AC) K diode F http://www.onsemi.com/pub_link/Collateral/MRA4003T3-D.PDF $ENDCMP # $CMP NRVA4003T3G D 300V, 1A, General Purpose Rectifier Diode, SMA(DO-214AC) K AEC-Q101 F http://www.onsemi.com/pub_link/Collateral/MRA4003T3-D.PDF $ENDCMP # $CMP NRVA4004T3G D 400V, 1A, General Purpose Rectifier Diode, SMA(DO-214AC) K AEC-Q101 F http://www.onsemi.com/pub_link/Collateral/MRA4003T3-D.PDF $ENDCMP # $CMP NRVA4005T3G D 600V, 1A, General Purpose Rectifier Diode, SMA(DO-214AC) K AEC-Q101 F http://www.onsemi.com/pub_link/Collateral/MRA4003T3-D.PDF $ENDCMP # $CMP NRVA4006T3G D 800V, 1A, General Purpose Rectifier Diode, SMA(DO-214AC) K AEC-Q101 F http://www.onsemi.com/pub_link/Collateral/MRA4003T3-D.PDF $ENDCMP # $CMP NRVA4007T3G D 1000V, 1A, General Purpose Rectifier Diode, SMA(DO-214AC) K AEC-Q101 F http://www.onsemi.com/pub_link/Collateral/MRA4003T3-D.PDF $ENDCMP # $CMP NSR0340HT1G D 40V 0.25A Schottky Diode, SOD-323 K diode Schottky F https://www.onsemi.com/pub/Collateral/NSR0340H-D.PDF $ENDCMP # $CMP PMEG1020EH D 10V, 2A ultra low Vf MEGA Schottky barrier rectifier, SOD-123F K forward voltage diode F https://assets.nexperia.com/documents/data-sheet/PMEG1020EH_EJ.pdf $ENDCMP # $CMP PMEG1020EJ D 10V, 2A ultra low Vf MEGA Schottky barrier rectifier, SOD-323F K forward voltage diode F https://assets.nexperia.com/documents/data-sheet/PMEG1020EH_EJ.pdf $ENDCMP # $CMP PMEG1030EH D 10V, 3A ultra low Vf MEGA Schottky barrier rectifier, SOD-123F K forward voltage diode F https://assets.nexperia.com/documents/data-sheet/PMEG1030EH_EJ.pdf $ENDCMP # $CMP PMEG1030EJ D 10V, 3A ultra low Vf MEGA Schottky barrier rectifier, SOD-323F K forward voltage diode F https://assets.nexperia.com/documents/data-sheet/PMEG1030EH_EJ.pdf $ENDCMP # $CMP PMEG2005EH D 20V, 500mA very low Vf MEGA Schottky barrier rectifier, SOD-123F K forward voltage diode F https://assets.nexperia.com/documents/data-sheet/PMEGXX05EH_EJ_SER.pdf $ENDCMP # $CMP PMEG2005EJ D 20V, 500mA very low Vf MEGA Schottky barrier rectifier, SOD-323F K forward voltage diode F https://assets.nexperia.com/documents/data-sheet/PMEGXX05EH_EJ_SER.pdf $ENDCMP # $CMP PMEG2010AEH D 20V, 1A very low Vf MEGA Schottky barrier rectifier, SOD-123F K forward voltage diode F https://assets.nexperia.com/documents/data-sheet/PMEG2010AEH_PMEG2010AET.pdf $ENDCMP # $CMP PMEG2010AEJ D 20V, 1A very low Vf MEGA Schottky barrier rectifier, SOD-323F K forward voltage diode F https://assets.nexperia.com/documents/data-sheet/PMEG2010AEJ.pdf $ENDCMP # $CMP PMEG2010AET D 20V, 1A very low Vf MEGA Schottky barrier rectifier, SOT-23 K forward voltage diode F https://assets.nexperia.com/documents/data-sheet/PMEG2010AEH_PMEG2010AET.pdf $ENDCMP # $CMP PMEG2010EH D 20V, 1A very low Vf MEGA Schottky barrier rectifier, SOD-123F K forward voltage diode F https://assets.nexperia.com/documents/data-sheet/PMEG2010EH_EJ_ET.pdf $ENDCMP # $CMP PMEG2010EJ D 20V, 1A very low Vf MEGA Schottky barrier rectifier, SOD-323F K forward voltage diode F https://assets.nexperia.com/documents/data-sheet/PMEG2010EH_EJ_ET.pdf $ENDCMP # $CMP PMEG2010ET D 20V, 1A very low Vf MEGA Schottky barrier rectifier, SOT-23 K forward voltage diode F https://assets.nexperia.com/documents/data-sheet/PMEG2010EH_EJ_ET.pdf $ENDCMP # $CMP PMEG2015EH D 20V, 1.5A very low Vf MEGA Schottky barrier rectifier, SOD-123F K forward voltage diode F https://assets.nexperia.com/documents/data-sheet/PMEG2015EH_EJ.pdf $ENDCMP # $CMP PMEG2015EJ D 20V, 1.5A very low Vf MEGA Schottky barrier rectifier, SOD-323F K forward voltage diode F https://assets.nexperia.com/documents/data-sheet/PMEG2015EH_EJ.pdf $ENDCMP # $CMP PMEG2020EH D 20V, 2A very low Vf MEGA Schottky barrier rectifier, SOD-123F K forward voltage diode F https://assets.nexperia.com/documents/data-sheet/PMEG2020EH_EJ.pdf $ENDCMP # $CMP PMEG2020EJ D 20V, 2A very low Vf MEGA Schottky barrier rectifier, SOD-323F K forward voltage diode F https://assets.nexperia.com/documents/data-sheet/PMEG2020EH_EJ.pdf $ENDCMP # $CMP PMEG3002EJ D 30V, 200mA low Vf MEGA Schottky barrier rectifier, SOD-323F K forward voltage diode F https://assets.nexperia.com/documents/data-sheet/PMEG3002EJ.pdf $ENDCMP # $CMP PMEG3005EH D 30V, 500mA very low Vf MEGA Schottky barrier rectifier, SOD-123F K forward voltage diode F https://assets.nexperia.com/documents/data-sheet/PMEGXX05EH_EJ_SER.pdf $ENDCMP # $CMP PMEG3005EJ D 30V, 500mA very low Vf MEGA Schottky barrier rectifier, SOD-323F K forward voltage diode F https://assets.nexperia.com/documents/data-sheet/PMEGXX05EH_EJ_SER.pdf $ENDCMP # $CMP PMEG3010CEH D 30V, 1A very low Vf MEGA Schottky barrier rectifier, SOD-123F K forward voltage diode F https://assets.nexperia.com/documents/data-sheet/PMEG3010CEH_PMEG3010CEJ.pdf $ENDCMP # $CMP PMEG3010CEJ D 30V, 1A very low Vf MEGA Schottky barrier rectifier, SOD-323F K forward voltage diode F https://assets.nexperia.com/documents/data-sheet/PMEG3010CEH_PMEG3010CEJ.pdf $ENDCMP # $CMP PMEG3010EH D 30V, 1A very low Vf MEGA Schottky barrier rectifier, SOD-123F K forward voltage diode F https://assets.nexperia.com/documents/data-sheet/PMEG3010EH_EJ_ET.pdf $ENDCMP # $CMP PMEG3010EJ D 30V, 1A very low Vf MEGA Schottky barrier rectifier, SOD-323F K forward voltage diode F https://assets.nexperia.com/documents/data-sheet/PMEG3010EH_EJ_ET.pdf $ENDCMP # $CMP PMEG3010ET D 30V, 1A very low Vf MEGA Schottky barrier rectifier, SOT-23 K forward voltage diode F https://assets.nexperia.com/documents/data-sheet/PMEG3010EH_EJ_ET.pdf $ENDCMP # $CMP PMEG3015EH D 30V, 1.5A ultra low Vf MEGA Schottky barrier rectifier, SOD-123F K forward voltage diode F https://assets.nexperia.com/documents/data-sheet/PMEG3015EH_EJ.pdf $ENDCMP # $CMP PMEG3015EJ D 30V, 1.5A ultra low Vf MEGA Schottky barrier rectifier, SOD-323F K forward voltage diode F https://assets.nexperia.com/documents/data-sheet/PMEG3015EH_EJ.pdf $ENDCMP # $CMP PMEG3020EH D 30V, 2A ultra low Vf MEGA Schottky barrier rectifier, SOD-123F K forward voltage diode F https://assets.nexperia.com/documents/data-sheet/PMEG3020EH_EJ.pdf $ENDCMP # $CMP PMEG3020EJ D 30V, 2A ultra low Vf MEGA Schottky barrier rectifier, SOD-323F K forward voltage diode F https://assets.nexperia.com/documents/data-sheet/PMEG3020EH_EJ.pdf $ENDCMP # $CMP PMEG4002EJ D 40V, 200mA low Vf MEGA Schottky barrier rectifier, SOD-323F K forward voltage diode F https://assets.nexperia.com/documents/data-sheet/PMEG4002EJ.pdf $ENDCMP # $CMP PMEG4005CEJ D 40V, 500mA low Vf MEGA Schottky barrier rectifier, SOD-323F K forward voltage diode F https://assets.nexperia.com/documents/data-sheet/PMEG4005CEJ.pdf $ENDCMP # $CMP PMEG4005EH D 40V, 500mA very low Vf MEGA Schottky barrier rectifier, SOD-123F K forward voltage diode F https://assets.nexperia.com/documents/data-sheet/PMEGXX05EH_EJ_SER.pdf $ENDCMP # $CMP PMEG4005EJ D 40V, 500mA very low Vf MEGA Schottky barrier rectifier, SOD-323F K forward voltage diode F https://assets.nexperia.com/documents/data-sheet/PMEGXX05EH_EJ_SER.pdf $ENDCMP # $CMP PMEG4010CEH D 40V, 1A very low Vf MEGA Schottky barrier rectifier, SOD-123F K forward voltage diode F https://assets.nexperia.com/documents/data-sheet/PMEG4010CEH_PMEG4010CEJ.pdf $ENDCMP # $CMP PMEG4010CEJ D 40V, 1A very low Vf MEGA Schottky barrier rectifier, SOD-323F K forward voltage diode F https://assets.nexperia.com/documents/data-sheet/PMEG4010CEH_PMEG4010CEJ.pdf $ENDCMP # $CMP PMEG4010EH D 40V, 1A very low Vf MEGA Schottky barrier rectifier, SOD-123F K forward voltage diode F https://assets.nexperia.com/documents/data-sheet/PMEG4010EH_EJ_ET.pdf $ENDCMP # $CMP PMEG4010EJ D 40V, 1A very low Vf MEGA Schottky barrier rectifier, SOD-323F K forward voltage diode F https://assets.nexperia.com/documents/data-sheet/PMEG4010EH_EJ_ET.pdf $ENDCMP # $CMP PMEG4010ET D 40V, 1A very low Vf MEGA Schottky barrier rectifier, SOT-23 K forward voltage diode F https://assets.nexperia.com/documents/data-sheet/PMEG4010EH_EJ_ET.pdf $ENDCMP # $CMP PMEG4050EP D 40V, 5A low Vf Schottky barrier rectifier, SOD-128 K forward voltage diode F https://assets.nexperia.com/documents/data-sheet/PMEG4050EP.pdf $ENDCMP # $CMP PMEG6002EJ D 60V, 200mA very low Vf MEGA Schottky barrier rectifier, SOD-323F K forward voltage diode F https://assets.nexperia.com/documents/data-sheet/PMEG6002EJ.pdf $ENDCMP # $CMP PMEG6010CEH D 60V, 1A very low Vf MEGA Schottky barrier rectifier, SOD-123F K forward voltage diode F https://assets.nexperia.com/documents/data-sheet/PMEG6010CEH_PMEG6010CEJ.pdf $ENDCMP # $CMP PMEG6010CEJ D 60V, 1A very low Vf MEGA Schottky barrier rectifier, SOD-323F K forward voltage diode F https://assets.nexperia.com/documents/data-sheet/PMEG6010CEH_PMEG6010CEJ.pdf $ENDCMP # $CMP PMEG6030EP D 60V, 3A low Vf MEGA Schottky barrier rectifier, SOD-128 K forward voltage diode F https://assets.nexperia.com/documents/data-sheet/PMEG6030EP.pdf $ENDCMP # $CMP PMEG6045ETP D 60V, 4.5A High-Temperature Schottky barrier rectifier, SOD-128 K forward voltage diode F https://assets.nexperia.com/documents/data-sheet/PMEG6045ETP.pdf $ENDCMP # $CMP Panasonic_MA5J002E D Quad Ultra high Speed Switching Diode Array Com K K diode F http://www.semicon.panasonic.co.jp/ds4/MA5J002E_BED_discon.pdf $ENDCMP # $CMP Rohm_UMN1N D High-speed switching diodes 2 pair Com A K diode F http://rohmfs.rohm.com/en/products/databook/datasheet/discrete/diode/switching/ump11n.pdf $ENDCMP # $CMP Rohm_UMP11N D High-speed switching diodes 2 pair Com A K diode F http://rohmfs.rohm.com/en/products/databook/datasheet/discrete/diode/switching/ump11n.pdf $ENDCMP # $CMP S2JTR D 600V 2A General Purpose Rectifier Diode, SMB K diode F http://www.smc-diodes.com/propdf/S2A-S2M%20N0562%20REV.A.pdf $ENDCMP # $CMP SB120 D 20V 1A Schottky Barrier Rectifier Diode, DO-41 K diode Schottky F http://www.diodes.com/_files/datasheets/ds23022.pdf $ENDCMP # $CMP SB130 D 30V 1A Schottky Barrier Rectifier Diode, DO-41 K diode Schottky F http://www.diodes.com/_files/datasheets/ds23022.pdf $ENDCMP # $CMP SB140 D 40V 1A Schottky Barrier Rectifier Diode, DO-41 K diode Schottky F http://www.diodes.com/_files/datasheets/ds23022.pdf $ENDCMP # $CMP SB150 D 50V 1A Schottky Barrier Rectifier Diode, DO-41 K diode Schottky F http://www.diodes.com/_files/datasheets/ds23022.pdf $ENDCMP # $CMP SB160 D 60V 1A Schottky Barrier Rectifier Diode, DO-41 K diode Schottky F http://www.diodes.com/_files/datasheets/ds23022.pdf $ENDCMP # $CMP SD05_SOD323 D 5V, 450W Discrete Bidirectional TVS Diode, SOD-323 K transient voltage suppressor thyrector transil F https://www.littelfuse.com/~/media/electronics/datasheets/tvs_diode_arrays/littelfuse_tvs_diode_array_sd_c_datasheet.pdf.pdf $ENDCMP # $CMP SD103ATW D Schottky Barrier Diode Array, SOT-363 K schottky barrier diode array F https://www.diodes.com/assets/Datasheets/ds30374.pdf $ENDCMP # $CMP SD12_SOD323 D 12V, 450W Discrete Bidirectional TVS Diode, SOD-323 K transient voltage suppressor thyrector transil F https://www.littelfuse.com/~/media/electronics/datasheets/tvs_diode_arrays/littelfuse_tvs_diode_array_sd_c_datasheet.pdf.pdf $ENDCMP # $CMP SD15_SOD323 D 15V, 450W Discrete Bidirectional TVS Diode, SOD-323 K transient voltage suppressor thyrector transil F https://www.littelfuse.com/~/media/electronics/datasheets/tvs_diode_arrays/littelfuse_tvs_diode_array_sd_c_datasheet.pdf.pdf $ENDCMP # $CMP SD24_SOD323 D 24V, 450W Discrete Bidirectional TVS Diode, SOD-323 K transient voltage suppressor thyrector transil F https://www.littelfuse.com/~/media/electronics/datasheets/tvs_diode_arrays/littelfuse_tvs_diode_array_sd_c_datasheet.pdf.pdf $ENDCMP # $CMP SD36_SOD323 D 36V, 450W Discrete Bidirectional TVS Diode, SOD-323 K transient voltage suppressor thyrector transil F https://www.littelfuse.com/~/media/electronics/datasheets/tvs_diode_arrays/littelfuse_tvs_diode_array_sd_c_datasheet.pdf.pdf $ENDCMP # $CMP SM2000 D 2000V 1A General Purpose Rectifier Diode, MELF K diode F http://cdn-reichelt.de/documents/datenblatt/A400/SMD1N400%23DIO.pdf $ENDCMP # $CMP SM4001 D 50V 1A General Purpose Rectifier Diode, MELF K diode F http://cdn-reichelt.de/documents/datenblatt/A400/SMD1N400%23DIO.pdf $ENDCMP # $CMP SM4002 D 100V 1A General Purpose Rectifier Diode, MELF K diode F http://cdn-reichelt.de/documents/datenblatt/A400/SMD1N400%23DIO.pdf $ENDCMP # $CMP SM4003 D 200V 1A General Purpose Rectifier Diode, MELF K diode F http://cdn-reichelt.de/documents/datenblatt/A400/SMD1N400%23DIO.pdf $ENDCMP # $CMP SM4004 D 400V 1A General Purpose Rectifier Diode, MELF K diode F http://cdn-reichelt.de/documents/datenblatt/A400/SMD1N400%23DIO.pdf $ENDCMP # $CMP SM4005 D 600V 1A General Purpose Rectifier Diode, MELF K diode F http://cdn-reichelt.de/documents/datenblatt/A400/SMD1N400%23DIO.pdf $ENDCMP # $CMP SM4006 D 800V 1A General Purpose Rectifier Diode, MELF K diode F http://cdn-reichelt.de/documents/datenblatt/A400/SMD1N400%23DIO.pdf $ENDCMP # $CMP SM4007 D 1000V 1A General Purpose Rectifier Diode, MELF K diode F http://cdn-reichelt.de/documents/datenblatt/A400/SMD1N400%23DIO.pdf $ENDCMP # $CMP SM513 D 130V 1A General Purpose Rectifier Diode, MELF K diode F http://cdn-reichelt.de/documents/datenblatt/A400/SMD1N400%23DIO.pdf $ENDCMP # $CMP SM516 D 1600V 1A General Purpose Rectifier Diode, MELF K diode F http://cdn-reichelt.de/documents/datenblatt/A400/SMD1N400%23DIO.pdf $ENDCMP # $CMP SM518 D 1800V 1A General Purpose Rectifier Diode, MELF K diode F http://cdn-reichelt.de/documents/datenblatt/A400/SMD1N400%23DIO.pdf $ENDCMP # $CMP SM712_SOT23 D 7V/12V, 600W Asymmetrical TVS Diode Array, SOT-23 K transient voltage suppressor thyrector transil F https://www.littelfuse.com/~/media/electronics/datasheets/tvs_diode_arrays/littelfuse_tvs_diode_array_sm712_datasheet.pdf.pdf $ENDCMP # $CMP SMZxxx D 2000mW Zener Diode, MELF K zener diode F https://diotec.com/tl_files/diotec/files/pdf/datasheets/smz1.pdf $ENDCMP # $CMP STTH212S D 1200V 2A High Voltage Ultrafast Diode, SMC K diode F https://www.st.com/resource/en/datasheet/stth212.pdf $ENDCMP # $CMP STTH212U D 1200V 2A High Voltage Ultrafast Diode, SMB K diode F https://www.st.com/resource/en/datasheet/stth212.pdf $ENDCMP # $CMP SZESD9B5.0ST5G D ESD protection diode, 5.0Vrwm, SOD-923 K diode TVS ESD F https://www.onsemi.com/pub/Collateral/ESD9B-D.PDF $ENDCMP # $CMP Toshiba_HN1D01FU D Ultra High Speed Switching Diode Array 2 pair Com A K diode F http://www.toshiba.com/taec/components2/Datasheet_Sync/200901/DST_HN1D01FU-TDE_EN_1882.pdf $ENDCMP # $CMP UF5400 D 50V 3A Soft Recovery Ultrafast Rectifier Diode, DO-201AD K diode F http://www.vishay.com/docs/88756/uf5400.pdf $ENDCMP # $CMP UF5401 D 100V 3A Soft Recovery Ultrafast Rectifier Diode, DO-201AD K diode F http://www.vishay.com/docs/88756/uf5400.pdf $ENDCMP # $CMP UF5402 D 200V 3A Soft Recovery Ultrafast Rectifier Diode, DO-201AD K diode F http://www.vishay.com/docs/88756/uf5400.pdf $ENDCMP # $CMP UF5403 D 300V 3A Soft Recovery Ultrafast Rectifier Diode, DO-201AD K diode F http://www.vishay.com/docs/88756/uf5400.pdf $ENDCMP # $CMP UF5404 D 400V 3A Soft Recovery Ultrafast Rectifier Diode, DO-201AD K diode F http://www.vishay.com/docs/88756/uf5400.pdf $ENDCMP # $CMP UF5405 D 500V 3A Soft Recovery Ultrafast Rectifier Diode, DO-201AD K diode F http://www.vishay.com/docs/88756/uf5400.pdf $ENDCMP # $CMP UF5406 D 600V 3A Soft Recovery Ultrafast Rectifier Diode, DO-201AD K diode F http://www.vishay.com/docs/88756/uf5400.pdf $ENDCMP # $CMP UF5407 D 800V 3A Soft Recovery Ultrafast Rectifier Diode, DO-201AD K diode F http://www.vishay.com/docs/88756/uf5400.pdf $ENDCMP # $CMP UF5408 D 1000V 3A Soft Recovery Ultrafast Rectifier Diode, DO-201AD K diode F http://www.vishay.com/docs/88756/uf5400.pdf $ENDCMP # $CMP US1A D 50V, 1A, General Purpose Rectifier Diode, SMA(DO-214AC) K Ultra Fast F https://www.diodes.com/assets/Datasheets/ds16008.pdf $ENDCMP # $CMP US1B D 100V, 1A, General Purpose Rectifier Diode, SMA(DO-214AC) K Ultra Fast F https://www.diodes.com/assets/Datasheets/ds16008.pdf $ENDCMP # $CMP US1D D 200V, 1A, General Purpose Rectifier Diode, SMA(DO-214AC) K Ultra Fast F https://www.diodes.com/assets/Datasheets/ds16008.pdf $ENDCMP # $CMP US1G D 400V, 1A, General Purpose Rectifier Diode, SMA(DO-214AC) K Ultra Fast F https://www.diodes.com/assets/Datasheets/ds16008.pdf $ENDCMP # $CMP US1J D 600V, 1A, General Purpose Rectifier Diode, SMA(DO-214AC) K Ultra Fast F https://www.diodes.com/assets/Datasheets/ds16008.pdf $ENDCMP # $CMP US1K D 800V, 1A, General Purpose Rectifier Diode, SMA(DO-214AC) K Ultra Fast F https://www.diodes.com/assets/Datasheets/ds16008.pdf $ENDCMP # $CMP US1M D 1000V, 1A, General Purpose Rectifier Diode, SMA(DO-214AC) K Ultra Fast F https://www.diodes.com/assets/Datasheets/ds16008.pdf $ENDCMP # $CMP US2AA D 50V, 1.5A, General Purpose Rectifier Diode, SMA(DO-214AC) K Super Fast F https://www.onsemi.com/pub/Collateral/US2AA-D.PDF $ENDCMP # $CMP US2BA D 100V, 1.5A, General Purpose Rectifier Diode, SMA(DO-214AC) K Super Fast F https://www.onsemi.com/pub/Collateral/US2AA-D.PDF $ENDCMP # $CMP US2DA D 200V, 1.5A, General Purpose Rectifier Diode, SMA(DO-214AC) K Super Fast F https://www.onsemi.com/pub/Collateral/US2AA-D.PDF $ENDCMP # $CMP US2FA D 300V, 1.5A, General Purpose Rectifier Diode, SMA(DO-214AC) K Super Fast F https://www.onsemi.com/pub/Collateral/US2AA-D.PDF $ENDCMP # $CMP US2GA D 400V, 1.5A, General Purpose Rectifier Diode, SMA(DO-214AC) K Super Fast F https://www.onsemi.com/pub/Collateral/US2AA-D.PDF $ENDCMP # $CMP US2JA D 600V, 1.5A, General Purpose Rectifier Diode, SMA(DO-214AC) K Super Fast F https://www.onsemi.com/pub/Collateral/US2AA-D.PDF $ENDCMP # $CMP US2KA D 800V, 1.5A, General Purpose Rectifier Diode, SMA(DO-214AC) K Super Fast F https://www.onsemi.com/pub/Collateral/US2AA-D.PDF $ENDCMP # $CMP US2MA D 1000V, 1.5A, General Purpose Rectifier Diode, SMA(DO-214AC) K Super Fast F https://www.onsemi.com/pub/Collateral/US2AA-D.PDF $ENDCMP # $CMP VS-6ESU06 D 600V 6.0A Ultrafast Rectifier, TO-277A K diode fred F https://www.vishay.com/docs/94987/vs-6esu06hm3.pdf $ENDCMP # $CMP Z1SMAxxx D 1000mW Zener Diode, SMA(DO-214AC) K zener diode F https://diotec.com/tl_files/diotec/files/pdf/datasheets/z1sma1.pdf $ENDCMP # $CMP Z2SMBxxx D 2000mW Zener Diode, SMB(DO-214AA) K zener diode F https://diotec.com/tl_files/diotec/files/pdf/datasheets/z2smb1.pdf $ENDCMP # $CMP Z3SMCxxx D 3000mW Zener Diode, SMC(DO-214AB) K zener diode F https://diotec.com/tl_files/diotec/files/pdf/datasheets/z3smc1.pdf $ENDCMP # $CMP ZMDxx D 1000mW Zener Diode, MiniMELF K zener diode F http://diotec.com/tl_files/diotec/files/pdf/datasheets/zmd1 $ENDCMP # $CMP ZMMxx D 500mW Zener Diode, MiniMELF K zener diode F https://diotec.com/tl_files/diotec/files/pdf/datasheets/zmm1.pdf $ENDCMP # $CMP ZMYxx D 1300mW Zener Diode, MELF K zener diode F http://www.vishay.com/docs/85790/zpy3v9.pdf $ENDCMP # $CMP ZPDxx D 500mW Zener Diode, DO-35 K diode F http://diotec.com/tl_files/diotec/files/pdf/datasheets/zpd1 $ENDCMP # $CMP ZPYxx D 1300mW Zener Diode, DO-41 K zener diode F http://www.vishay.com/docs/85790/zpy3v9.pdf $ENDCMP # $CMP ZYxxx D 2000mW Zener Diode, DO-41 K zener diode F https://diotec.com/tl_files/diotec/files/pdf/datasheets/zy1 $ENDCMP # #End Doc Library ================================================ FILE: esim-cloud-backend/kicad-symbols/additional/Diode.lib ================================================ EESchema-LIBRARY Version 2.4 #encoding utf-8 # # 1.5KExxA # DEF 1.5KExxA D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "1.5KExxA" 0 -100 50 H V C CNN F2 "Diode_THT:D_DO-201AE_P15.24mm_Horizontal" 0 -200 50 H I C CNN F3 "" -50 0 50 H I C CNN ALIAS 1N62xxA 1N630xA $FPLIST D?DO?201AE* $ENDFPLIST DRAW P 3 0 1 10 -30 50 -50 50 -50 -50 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N X A1 1 -150 0 100 R 50 50 1 1 P X A2 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # 1.5KExxCA # DEF 1.5KExxCA D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "1.5KExxCA" 0 -100 50 H V C CNN F2 "Diode_THT:D_DO-201AE_P15.24mm_Horizontal" 0 -200 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS 1N62xxCA 1N630xCA $FPLIST D?DO?201AE* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 -100 -50 0 0 -100 50 -100 -50 N P 4 0 1 10 20 50 0 50 0 -50 -20 -50 N P 4 0 1 10 100 50 100 -50 0 0 100 50 N X A1 1 -150 0 100 R 50 50 1 1 P X A2 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # 1N4001 # DEF 1N4001 D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "1N4001" 0 -100 50 H V C CNN F2 "Diode_THT:D_DO-41_SOD81_P10.16mm_Horizontal" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS 1N4002 1N4003 1N4004 1N4005 1N4006 1N4007 BA157 BA158 BA159 $FPLIST D*DO?41* $ENDFPLIST DRAW P 2 0 1 10 -50 50 -50 -50 N P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # 1N4148 # DEF 1N4148 D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "1N4148" 0 -100 50 H V C CNN F2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS 1N4448 1N4149 1N4151 1N914 BA243 BA244 BA282 BA283 BAV17 BAV18 BAV19 BAV20 BAV21 BAW75 BAW76 BAY93 $FPLIST D*DO?35* $ENDFPLIST DRAW P 2 0 1 10 -50 50 -50 -50 N P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # 1N4148WS # DEF 1N4148WS D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "1N4148WS" 0 -100 50 H V C CNN F2 "Diode_SMD:D_SOD-323" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS 1N4448WS BAS316 $FPLIST D*SOD?323* $ENDFPLIST DRAW P 2 0 1 10 -50 50 -50 -50 N P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # 1N4148WT # DEF 1N4148WT D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "1N4148WT" 0 -100 50 H V C CNN F2 "Diode_SMD:D_SOD-523" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS 1N4448WT 1N914WT BAS516 $FPLIST D*SOD?523* $ENDFPLIST DRAW P 2 0 1 10 -50 50 -50 -50 N P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # 1N53xxB # DEF 1N53xxB D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "1N53xxB" 0 -100 50 H V C CNN F2 "Diode_THT:D_DO-201_P15.24mm_Horizontal" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST D*DO?201* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 3 0 1 10 -50 -50 -50 50 -30 50 N P 4 0 1 10 50 -50 50 50 -50 0 50 -50 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # 1N5400 # DEF 1N5400 D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "1N5400" 0 -100 50 H V C CNN F2 "Diode_THT:D_DO-201AD_P15.24mm_Horizontal" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS 1N5401 1N5402 1N5404 1N5405 1N5406 1N5407 1N5408 UF5400 UF5401 UF5402 UF5403 UF5404 UF5405 UF5406 UF5407 UF5408 1N5403 $FPLIST D*DO?201AD* $ENDFPLIST DRAW P 2 0 1 10 -50 50 -50 -50 N P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # 1N5711UR # DEF 1N5711UR D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "1N5711UR" 0 -100 50 H V C CNN F2 "Diode_SMD:D_MELF" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS 1N5712UR 1N6857UR 1N6858UR $FPLIST D?MELF* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 6 0 1 10 -75 25 -75 50 -50 50 -50 -50 -25 -50 -25 -25 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # 1N5820 # DEF 1N5820 D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "1N5820" 0 -100 50 H V C CNN F2 "Diode_THT:D_DO-201AD_P15.24mm_Horizontal" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS 1N5821 1N5822 MBR340 $FPLIST D*DO?201AD* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 6 0 1 10 -75 25 -75 50 -50 50 -50 -50 -25 -50 -25 -25 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # 1N6263 # DEF 1N6263 D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "1N6263" 0 -100 50 H V C CNN F2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS BAT41 BAT42 BAT43 BAT46 BAT48RL BAT85 BAT86S BAT86 1N5711 1N5712 1N6857 1N6858 DSB5712 DSB2810 $FPLIST D*DO?35* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 6 0 1 10 -75 25 -75 50 -50 50 -50 -50 -25 -50 -25 -25 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # 2BZX84Cxx # DEF 2BZX84Cxx D 0 40 Y N 1 F N F0 "D" 150 100 50 H V L CNN F1 "2BZX84Cxx" 150 0 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-23" 150 -100 50 H I L CNN F3 "" -100 0 50 V I C CNN $FPLIST SOT?23* $ENDFPLIST DRAW C 0 -100 10 0 1 0 F P 2 0 1 0 -100 -50 -100 100 N P 2 0 1 0 100 -50 100 100 N P 3 0 1 10 -150 50 -50 50 -50 30 N P 3 0 1 10 50 50 150 50 150 30 N P 4 0 1 0 -100 0 -100 -100 100 -100 100 0 N P 4 1 1 8 -150 -50 -50 -50 -100 50 -150 -50 N P 4 1 1 8 50 -50 150 -50 100 50 50 -50 N X K 1 -100 200 100 D 50 50 1 1 P X K 2 100 200 100 D 50 50 1 1 P X A 3 0 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # 5KPxxA # DEF 5KPxxA D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "5KPxxA" 0 -100 50 H V C CNN F2 "Diode_THT:D_P600_R-6_P20.00mm_Horizontal" 0 -200 50 H I C CNN F3 "" -50 0 50 H I C CNN $FPLIST D?P600* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 3 0 1 10 -30 50 -50 50 -50 -50 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N X A1 1 -150 0 100 R 50 50 1 1 P X A2 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # 5KPxxCA # DEF 5KPxxCA D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "5KPxxCA" 0 -100 50 H V C CNN F2 "Diode_THT:D_P600_R-6_P20.00mm_Horizontal" 0 -200 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST D?P600* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 -100 -50 0 0 -100 50 -100 -50 N P 4 0 1 10 20 50 0 50 0 -50 -20 -50 N P 4 0 1 10 100 50 100 -50 0 0 100 50 N X A1 1 -150 0 100 R 50 50 1 1 P X A2 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # B120-E3 # DEF B120-E3 D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "B120-E3" 0 -100 50 H V C CNN F2 "Diode_SMD:D_SMA" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS B130-E3 B140-E3 B150-E3 B160-E3 MBRA340 $FPLIST D*SMA* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 6 0 1 10 -75 25 -75 50 -50 50 -50 -50 -25 -50 -25 -25 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # B220 # DEF B220 D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "B220" 0 -100 50 H V C CNN F2 "Diode_SMD:D_SMB" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS B230 B240 B250 B260 $FPLIST D*SMB* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 6 0 1 10 -75 25 -75 50 -50 50 -50 -50 -25 -50 -25 -25 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # B320 # DEF B320 D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "B320" 0 -100 50 H V C CNN F2 "Diode_SMD:D_SMC" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS B330 B340 B350 B360 $FPLIST D*SMC* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 6 0 1 10 -75 25 -75 50 -50 50 -50 -50 -25 -50 -25 -25 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # BAR42FILM # DEF BAR42FILM D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "BAR42FILM" 0 -100 50 H V C CNN F2 "Package_TO_SOT_SMD:SOT-23" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS BAR43FILM $FPLIST SOT?23* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 6 0 1 10 -75 25 -75 50 -50 50 -50 -50 -25 -50 -25 -25 N X A 1 150 0 100 L 50 50 1 1 P X NC 2 150 100 100 L 50 50 1 1 N N X K 3 -150 0 100 R 50 50 1 1 P ENDDRAW ENDDEF # # BAS16TW # DEF BAS16TW D 0 40 Y N 3 F N F0 "D" 0 100 50 H V C CNN F1 "BAS16TW" 0 -100 50 H V C CNN F2 "Package_TO_SOT_SMD:SOT-363_SC-70-6" 0 -175 50 H I C CNN F3 "" 0 100 50 H I C CNN ALIAS BAS16VY MMBD4148TW MMBD4448HTW HN2D02FU Comchip_ACDSV6-4448TI-G Central_Semi_CMKD6001 Central_Semi_CMKD4448 Comchip_CDSV6-4148-G Comchip_CDSV6-4448TI-G $FPLIST *SOT?363* $ENDFPLIST DRAW P 2 0 1 6 -50 50 -50 -50 N P 2 0 1 0 50 0 -50 0 N P 2 0 1 0 50 50 50 -50 N P 3 0 1 0 50 50 -50 0 50 -50 N X A 1 150 0 100 L 50 50 1 1 P X K 6 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 2 1 P X K 5 -150 0 100 R 50 50 2 1 P X A 3 150 0 100 L 50 50 3 1 P X K 4 -150 0 100 R 50 50 3 1 P ENDDRAW ENDDEF # # BAS16W # DEF BAS16W D 0 20 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "BAS16W" 0 -100 50 H V C CNN F2 "Package_TO_SOT_SMD:SOT-323_SC-70" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST SOT?323* $ENDFPLIST DRAW P 2 0 1 10 -50 50 -50 -50 N P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N X A 1 150 0 100 L 50 50 1 1 P X NC 2 -50 0 100 R 50 50 1 1 N N X K 3 -150 0 100 R 50 50 1 1 P ENDDRAW ENDDEF # # BAS40-04 # DEF BAS40-04 D 0 40 Y Y 1 F N F0 "D" 25 -50 50 H V L CNN F1 "BAS40-04" -250 225 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-23" -250 300 50 H I L CNN F3 "" -120 100 50 H I C CNN $FPLIST SOT?23* $ENDFPLIST DRAW C 0 100 10 0 1 0 F P 2 0 1 0 -150 100 -50 100 N P 2 0 1 0 -125 50 -125 60 N P 2 0 1 0 -100 50 -125 50 N P 2 0 1 0 -100 50 -100 150 N P 2 0 1 0 -100 150 -75 150 N P 2 0 1 0 -75 100 75 100 N P 2 0 1 0 -75 150 -75 140 N P 2 0 1 0 50 100 150 100 N P 2 0 1 0 125 50 125 60 N P 2 0 1 0 150 50 125 50 N P 2 0 1 0 150 50 150 150 N P 2 0 1 0 150 150 175 150 N P 2 0 1 0 175 150 175 140 N P 4 0 1 0 -175 150 -175 50 -100 100 -175 150 N P 4 0 1 0 75 150 75 50 150 100 75 150 N X ~ 1 -300 100 150 R 50 50 1 1 P X ~ 2 300 100 150 L 50 50 1 1 P X ~ 3 0 -100 200 U 50 50 1 1 P ENDDRAW ENDDEF # # BAT48JFILM # DEF BAT48JFILM D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "BAT48JFILM" 0 -100 50 H V C CNN F2 "Diode_SMD:D_SOD-323" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS NSR0340HT1G BAT60A $FPLIST D*SOD?323* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 6 0 1 10 -75 25 -75 50 -50 50 -50 -50 -25 -50 -25 -25 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # BAT48ZFILM # DEF BAT48ZFILM D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "BAT48ZFILM" 0 -100 50 H V C CNN F2 "Diode_SMD:D_SOD-123" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS MBR0520LT MBR0520 MBR0530 MBR0540 MBR0550 MBR0560 MBR0570 MBR0580 BAT42W-V BAT43W-V $FPLIST D*SOD?123* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 6 0 1 10 -75 25 -75 50 -50 50 -50 -50 -25 -50 -25 -25 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # BAT54A # DEF BAT54A D 0 40 Y Y 1 F N F0 "D" 25 -150 50 H V L CNN F1 "BAT54A" -250 125 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-23" 75 125 50 H I L CNN F3 "" -120 0 50 H I C CNN $FPLIST SOT?23* $ENDFPLIST DRAW C 0 0 10 0 1 0 F P 2 0 1 0 -175 50 -175 40 N P 2 0 1 0 -150 -50 -150 50 N P 2 0 1 0 -150 -50 -125 -50 N P 2 0 1 0 -150 0 -50 0 N P 2 0 1 0 -150 50 -175 50 N P 2 0 1 0 -125 -50 -125 -40 N P 2 0 1 0 -75 0 75 0 N P 2 0 1 0 50 0 150 0 N P 2 0 1 0 125 -50 125 -40 N P 2 0 1 0 150 -50 125 -50 N P 2 0 1 0 150 -50 150 50 N P 2 0 1 0 150 50 175 50 N P 2 0 1 0 175 50 175 40 N P 4 0 1 0 -75 50 -75 -50 -150 0 -75 50 N P 4 0 1 0 75 50 75 -50 150 0 75 50 N X ~ 1 -300 0 150 R 50 50 1 1 P X ~ 2 300 0 150 L 50 50 1 1 P X ~ 3 0 -200 200 U 50 50 1 1 P ENDDRAW ENDDEF # # BAT54ADW # DEF BAT54ADW D 0 40 Y N 4 F N F0 "D" 0 100 50 H V C CNN F1 "BAT54ADW" 0 -100 50 H V C CNN F2 "Package_TO_SOT_SMD:SOT-363_SC-70-6" 0 -175 50 H I C CNN F3 "" 0 100 50 H I C CNN $FPLIST SOT?363* $ENDFPLIST DRAW P 2 0 1 0 50 -50 50 50 N P 2 0 1 0 50 0 -50 0 N P 3 0 1 0 50 50 -50 0 50 -50 N P 6 0 1 0 -25 25 -25 50 -50 50 -50 -50 -75 -50 -75 -25 N X K 1 -150 0 100 R 50 50 1 1 P X A 6 150 0 100 L 50 50 1 1 P X K 2 -150 0 100 R 50 50 2 1 P X A 6 150 0 100 L 50 50 2 1 P X A 3 150 0 100 L 50 50 3 1 P X K 4 -150 0 100 R 50 50 3 1 P X A 3 150 0 100 L 50 50 4 1 P X K 5 -150 0 100 R 50 50 4 1 P ENDDRAW ENDDEF # # BAT54AW # DEF BAT54AW D 0 40 Y Y 1 F N F0 "D" 25 -150 50 H V L CNN F1 "BAT54AW" -250 125 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-323_SC-70" 75 125 50 H I L CNN F3 "" -120 0 50 H I C CNN $FPLIST SOT?323* $ENDFPLIST DRAW C 0 0 10 0 1 0 F P 2 0 1 0 -175 50 -175 40 N P 2 0 1 0 -150 -50 -150 50 N P 2 0 1 0 -150 -50 -125 -50 N P 2 0 1 0 -150 0 -50 0 N P 2 0 1 0 -150 50 -175 50 N P 2 0 1 0 -125 -50 -125 -40 N P 2 0 1 0 -75 0 75 0 N P 2 0 1 0 50 0 150 0 N P 2 0 1 0 125 -50 125 -40 N P 2 0 1 0 150 -50 125 -50 N P 2 0 1 0 150 -50 150 50 N P 2 0 1 0 150 50 175 50 N P 2 0 1 0 175 50 175 40 N P 4 0 1 0 -75 50 -75 -50 -150 0 -75 50 N P 4 0 1 0 75 50 75 -50 150 0 75 50 N X ~ 1 -300 0 150 R 50 50 1 1 P X ~ 2 300 0 150 L 50 50 1 1 P X ~ 3 0 -200 200 U 50 50 1 1 P ENDDRAW ENDDEF # # BAT54C # DEF BAT54C D 0 40 Y Y 1 F N F0 "D" 25 -150 50 H V L CNN F1 "BAT54C" -250 125 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-23" 75 125 50 H I L CNN F3 "" -80 0 50 H I C CNN $FPLIST SOT?23* $ENDFPLIST DRAW C 0 0 10 0 1 0 F P 2 0 1 0 -75 0 75 0 N P 2 0 1 0 -75 50 -75 40 N P 2 0 1 0 -50 -50 -25 -50 N P 2 0 1 0 -50 0 -150 0 N P 2 0 1 0 -50 50 -75 50 N P 2 0 1 0 -50 50 -50 -50 N P 2 0 1 0 -25 -50 -25 -40 N P 2 0 1 0 25 -50 25 -40 N P 2 0 1 0 50 -50 25 -50 N P 2 0 1 0 50 50 50 -50 N P 2 0 1 0 50 50 75 50 N P 2 0 1 0 75 50 75 40 N P 2 0 1 0 150 0 50 0 N P 4 0 1 0 -125 -50 -125 50 -50 0 -125 -50 N P 4 0 1 0 125 -50 125 50 50 0 125 -50 N X ~ 1 -300 0 150 R 50 50 1 1 P X ~ 2 300 0 150 L 50 50 1 1 P X ~ 3 0 -200 200 U 50 50 1 1 P ENDDRAW ENDDEF # # BAT54CW # DEF BAT54CW D 0 40 Y Y 1 F N F0 "D" 25 -150 50 H V L CNN F1 "BAT54CW" -250 125 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-323_SC-70" 75 125 50 H I L CNN F3 "" -80 0 50 H I C CNN $FPLIST SOT?323* $ENDFPLIST DRAW C 0 0 10 0 1 0 F P 2 0 1 0 -75 0 75 0 N P 2 0 1 0 -75 50 -75 40 N P 2 0 1 0 -50 -50 -25 -50 N P 2 0 1 0 -50 0 -150 0 N P 2 0 1 0 -50 50 -75 50 N P 2 0 1 0 -50 50 -50 -50 N P 2 0 1 0 -25 -50 -25 -40 N P 2 0 1 0 25 -50 25 -40 N P 2 0 1 0 50 -50 25 -50 N P 2 0 1 0 50 50 50 -50 N P 2 0 1 0 50 50 75 50 N P 2 0 1 0 75 50 75 40 N P 2 0 1 0 150 0 50 0 N P 4 0 1 0 -125 -50 -125 50 -50 0 -125 -50 N P 4 0 1 0 125 -50 125 50 50 0 125 -50 N X ~ 1 -300 0 150 R 50 50 1 1 P X ~ 2 300 0 150 L 50 50 1 1 P X ~ 3 0 -200 200 U 50 50 1 1 P ENDDRAW ENDDEF # # BAT54J # DEF BAT54J D 0 20 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "BAT54J" 0 -100 50 H V C CNN F2 "Diode_SMD:D_SOD-323F" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST D*SOD?323F* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 6 0 1 10 -75 25 -75 50 -50 50 -50 -50 -25 -50 -25 -25 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # BAT54S # DEF BAT54S D 0 40 Y Y 1 F N F0 "D" 25 -150 50 H V L CNN F1 "BAT54S" -250 125 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-23" 75 125 50 H I L CNN F3 "" -120 0 50 H I C CNN $FPLIST SOT?23* $ENDFPLIST DRAW C 0 0 10 0 1 0 F P 2 0 1 0 -150 0 -50 0 N P 2 0 1 0 -125 -50 -125 -40 N P 2 0 1 0 -100 -50 -125 -50 N P 2 0 1 0 -100 -50 -100 50 N P 2 0 1 0 -100 50 -75 50 N P 2 0 1 0 -75 0 75 0 N P 2 0 1 0 -75 50 -75 40 N P 2 0 1 0 50 0 150 0 N P 2 0 1 0 125 -50 125 -40 N P 2 0 1 0 150 -50 125 -50 N P 2 0 1 0 150 -50 150 50 N P 2 0 1 0 150 50 175 50 N P 2 0 1 0 175 50 175 40 N P 4 0 1 0 -175 50 -175 -50 -100 0 -175 50 N P 4 0 1 0 75 50 75 -50 150 0 75 50 N X ~ 1 -300 0 150 R 50 50 1 1 P X ~ 2 300 0 150 L 50 50 1 1 P X ~ 3 0 -200 200 U 50 50 1 1 P ENDDRAW ENDDEF # # BAT54SW # DEF BAT54SW D 0 40 Y Y 1 F N F0 "D" 25 -150 50 H V L CNN F1 "BAT54SW" -250 125 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-323_SC-70" 75 125 50 H I L CNN F3 "" -120 0 50 H I C CNN $FPLIST SOT?323* $ENDFPLIST DRAW C 0 0 10 0 1 0 F P 2 0 1 0 -150 0 -50 0 N P 2 0 1 0 -125 -50 -125 -40 N P 2 0 1 0 -100 -50 -125 -50 N P 2 0 1 0 -100 -50 -100 50 N P 2 0 1 0 -100 50 -75 50 N P 2 0 1 0 -75 0 75 0 N P 2 0 1 0 -75 50 -75 40 N P 2 0 1 0 50 0 150 0 N P 2 0 1 0 125 -50 125 -40 N P 2 0 1 0 150 -50 125 -50 N P 2 0 1 0 150 -50 150 50 N P 2 0 1 0 150 50 175 50 N P 2 0 1 0 175 50 175 40 N P 4 0 1 0 -175 50 -175 -50 -100 0 -175 50 N P 4 0 1 0 75 50 75 -50 150 0 75 50 N X ~ 1 -300 0 150 R 50 50 1 1 P X ~ 2 300 0 150 L 50 50 1 1 P X ~ 3 0 -200 200 U 50 50 1 1 P ENDDRAW ENDDEF # # BAT54W # DEF BAT54W D 0 40 Y N 1 F N F0 "D" 0 100 50 H V C CNN F1 "BAT54W" 0 -100 50 H V C CNN F2 "Package_TO_SOT_SMD:SOT-323_SC-70" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST SOT?323* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 6 0 1 10 -75 25 -75 50 -50 50 -50 -50 -25 -50 -25 -25 N X A 1 150 0 100 L 50 50 1 1 P X NC 2 0 0 100 U 50 50 1 1 N N X K 3 -150 0 100 R 50 50 1 1 P ENDDRAW ENDDEF # # BAV70 # DEF BAV70 D 0 30 Y N 1 F N F0 "D" 25 -100 50 H V L CNN F1 "BAV70" 0 100 50 H V C CNN F2 "Package_TO_SOT_SMD:SOT-23" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST SOT?23* $ENDFPLIST DRAW C 0 0 10 0 1 0 F P 2 0 1 0 -150 0 150 0 N P 2 0 1 0 0 0 0 -100 N P 3 0 1 10 -50 -50 -50 50 -50 50 N P 3 0 1 10 50 -50 50 50 50 50 N P 6 0 1 10 -150 50 -50 0 -150 -50 -150 50 -150 50 -150 50 N P 6 0 1 10 150 -50 50 0 150 50 150 -50 150 -50 150 -50 N X A 1 -300 0 150 R 50 50 0 1 P X A 2 300 0 150 L 50 50 0 1 P X K 3 0 -200 100 U 50 50 0 1 P ENDDRAW ENDDEF # # BAV70M # DEF BAV70M D 0 30 Y N 1 F N F0 "D" 25 -100 50 H V L CNN F1 "BAV70M" 0 100 50 H V C CNN F2 "Package_TO_SOT_SMD:SOT-883" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST SOT?883* $ENDFPLIST DRAW C 0 0 10 0 1 0 F P 2 0 1 0 -150 0 150 0 N P 2 0 1 0 0 0 0 -100 N P 3 0 1 10 -50 -50 -50 50 -50 50 N P 3 0 1 10 50 -50 50 50 50 50 N P 6 0 1 10 -150 50 -50 0 -150 -50 -150 50 -150 50 -150 50 N P 6 0 1 10 150 -50 50 0 150 50 150 -50 150 -50 150 -50 N X A 1 -300 0 150 R 50 50 0 1 P X A 2 300 0 150 L 50 50 0 1 P X K 3 0 -200 100 U 50 50 0 1 P ENDDRAW ENDDEF # # BAV70S # DEF BAV70S D 0 30 Y N 2 F N F0 "D" 25 -100 50 H V L CNN F1 "BAV70S" 0 100 50 H V C CNN F2 "Package_TO_SOT_SMD:SOT-363_SC-70-6" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST SOT?363* $ENDFPLIST DRAW C 0 0 10 0 1 0 F P 2 0 1 0 -150 0 150 0 N P 2 0 1 0 0 0 0 -100 N P 3 0 1 10 -50 -50 -50 50 -50 50 N P 3 0 1 10 50 -50 50 50 50 50 N P 6 0 1 10 -150 50 -50 0 -150 -50 -150 50 -150 50 -150 50 N P 6 0 1 10 150 -50 50 0 150 50 150 -50 150 -50 150 -50 N X A 1 -300 0 150 R 50 50 1 1 P X A 2 300 0 150 L 50 50 1 1 P X K 6 0 -200 100 U 50 50 1 1 P X K 3 0 -200 100 U 50 50 2 1 P X A 4 -300 0 150 R 50 50 2 1 P X A 5 300 0 150 L 50 50 2 1 P ENDDRAW ENDDEF # # BAV70T # DEF BAV70T D 0 30 Y N 1 F N F0 "D" 25 -100 50 H V L CNN F1 "BAV70T" 0 100 50 H V C CNN F2 "Package_TO_SOT_SMD:SOT-416" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST SOT?416* $ENDFPLIST DRAW C 0 0 10 0 1 0 F P 2 0 1 0 -150 0 150 0 N P 2 0 1 0 0 0 0 -100 N P 3 0 1 10 -50 -50 -50 50 -50 50 N P 3 0 1 10 50 -50 50 50 50 50 N P 6 0 1 10 -150 50 -50 0 -150 -50 -150 50 -150 50 -150 50 N P 6 0 1 10 150 -50 50 0 150 50 150 -50 150 -50 150 -50 N X A 1 -300 0 150 R 50 50 0 1 P X A 2 300 0 150 L 50 50 0 1 P X K 3 0 -200 100 U 50 50 0 1 P ENDDRAW ENDDEF # # BAV70W # DEF BAV70W D 0 30 Y N 1 F N F0 "D" 25 -100 50 H V L CNN F1 "BAV70W" 0 100 50 H V C CNN F2 "Package_TO_SOT_SMD:SOT-323_SC-70" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST SOT?323* $ENDFPLIST DRAW C 0 0 10 0 1 0 F P 2 0 1 0 -150 0 150 0 N P 2 0 1 0 0 0 0 -100 N P 3 0 1 10 -50 -50 -50 50 -50 50 N P 3 0 1 10 50 -50 50 50 50 50 N P 6 0 1 10 -150 50 -50 0 -150 -50 -150 50 -150 50 -150 50 N P 6 0 1 10 150 -50 50 0 150 50 150 -50 150 -50 150 -50 N X A 1 -300 0 150 R 50 50 0 1 P X A 2 300 0 150 L 50 50 0 1 P X K 3 0 -200 100 U 50 50 0 1 P ENDDRAW ENDDEF # # BAV756S # DEF BAV756S D 0 1 Y N 2 L N F0 "D" 0 100 50 H V C CNN F1 "BAV756S" 0 200 50 H V C CNN F2 "Package_TO_SOT_SMD:SOT-363_SC-70-6" 0 -400 50 H I C CNN F3 "" 0 -400 50 H I C CNN $FPLIST SOT?363* $ENDFPLIST DRAW C 0 0 10 1 1 0 F C 0 0 5 2 1 0 N P 2 1 1 0 -200 0 200 0 N P 2 1 1 0 0 0 0 -100 N P 3 1 1 8 -50 -50 -50 50 -50 50 N P 3 1 1 8 50 -50 50 50 50 50 N P 6 1 1 8 -150 50 -50 0 -150 -50 -150 50 -150 50 -150 50 N P 6 1 1 8 150 -50 50 0 150 50 150 -50 150 -50 150 -50 N P 2 2 1 0 -200 0 200 0 N P 2 2 1 0 0 0 0 -100 N P 3 2 1 8 -150 50 -150 -50 -150 -50 N P 3 2 1 8 150 50 150 -50 150 -50 N P 6 2 1 8 -50 -50 -150 0 -50 50 -50 -50 -50 -50 -50 -50 N P 6 2 1 8 50 50 150 0 50 -50 50 50 50 50 50 50 N X A1 1 -300 0 100 R 50 50 1 1 P X A4 5 300 0 100 L 50 50 1 1 P X CK 6 0 -200 100 U 50 50 1 1 P X K2 2 -300 0 100 R 50 50 2 1 P X CA 3 0 -200 100 U 50 50 2 1 P X K3 4 300 0 100 L 50 50 2 1 P ENDDRAW ENDDEF # # BAV99 # DEF BAV99 D 0 20 Y N 1 F N F0 "D" 0 200 50 H V C CNN F1 "BAV99" 0 100 50 H V C CNN F2 "Package_TO_SOT_SMD:SOT-23" 0 -500 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST SOT?23* $ENDFPLIST DRAW C 0 0 10 1 1 0 F P 2 0 1 0 -200 0 200 0 N P 2 1 1 0 0 0 0 -100 N P 3 1 1 8 -50 -50 -50 50 -50 50 N P 3 1 1 8 150 50 150 -50 150 -50 N P 6 1 1 8 -150 50 -50 0 -150 -50 -150 50 -150 50 -150 50 N P 6 1 1 8 50 50 150 0 50 -50 50 50 50 50 50 50 N X K 1 -300 0 100 R 50 50 1 1 P X A 2 300 0 100 L 50 50 1 1 P X K 3 0 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # BAV99S # DEF BAV99S D 0 1 Y N 2 L N F0 "D" 0 100 50 H V C CNN F1 "BAV99S" 0 200 50 H V C CNN F2 "Package_TO_SOT_SMD:SOT-363_SC-70-6" 0 -500 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS BAV199DW $FPLIST SOT?363* $ENDFPLIST DRAW C 0 0 10 0 1 0 F P 2 0 1 0 -200 0 200 0 N P 2 0 1 0 0 0 0 -100 N P 3 0 1 10 -50 -50 -50 50 -50 50 N P 3 0 1 10 150 50 150 -50 150 -50 N P 6 0 1 10 -150 50 -50 0 -150 -50 -150 50 -150 50 -150 50 N P 6 0 1 10 50 50 150 0 50 -50 50 50 50 50 50 50 N P 2 1 1 0 250 0 300 0 N P 2 2 1 0 250 0 300 0 N X A1 1 -300 0 100 R 50 50 1 1 P X K2 2 300 0 100 L 50 50 1 1 P X K3A4 6 0 -200 100 U 50 50 1 1 P X K1A2 3 0 -200 100 U 50 50 2 1 P X A3 4 -300 0 100 R 50 50 2 1 P X K4 5 300 0 100 L 50 50 2 1 P ENDDRAW ENDDEF # # BYV79-100 # DEF BYV79-100 D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "BYV79-100" 0 -100 50 H V C CNN F2 "Package_TO_SOT_THT:TO-220-2_Vertical" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS BYV79-200 BYV79-150 $FPLIST TO?220* $ENDFPLIST DRAW P 2 0 1 10 -50 50 -50 -50 N P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # BZD27Cxx # DEF BZD27Cxx D 0 20 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "BZD27Cxx" 0 -100 50 H V C CNN F2 "Diode_SMD:D_SMF" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST D*SMF* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 3 0 1 10 -50 -50 -50 50 -30 50 N P 4 0 1 10 50 -50 50 50 -50 0 50 -50 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # BZM55Bxx # DEF BZM55Bxx D 0 20 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "BZM55Bxx" 0 -100 50 H V C CNN F2 "Diode_SMD:D_MicroMELF" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS BZM55Cxx $FPLIST D*MicroMELF* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 3 0 1 10 -50 -50 -50 50 -30 50 N P 4 0 1 10 50 -50 50 50 -50 0 50 -50 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # BZT52Bxx # DEF BZT52Bxx D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "BZT52Bxx" 0 -100 50 H V C CNN F2 "Diode_SMD:D_SOD-123" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST D?SOD?123* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 3 0 1 10 -50 -50 -50 50 -30 50 N P 4 0 1 10 50 -50 50 50 -50 0 50 -50 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # BZX384-xxx # DEF BZX384-xxx D 0 20 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "BZX384-xxx" 0 -100 50 H V C CNN F2 "Diode_SMD:D_SOD-323" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST D*SOD*323* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 3 0 1 10 -50 -50 -50 50 -30 50 N P 4 0 1 10 50 -50 50 50 -50 0 50 -50 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # BZX84Cxx # DEF BZX84Cxx D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "BZX84Cxx" 0 -100 50 H V C CNN F2 "Diode_SMD:D_SOT-23_ANK" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST D*SOT?23*ANK* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 3 0 1 10 -50 -50 -50 50 -30 50 N P 4 0 1 10 50 -50 50 50 -50 0 50 -50 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # C3D02060F # DEF C3D02060F D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "C3D02060F" 0 -100 50 H V C CNN F2 "Package_TO_SOT_THT:TO-220F-2_Vertical" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS C3D03060F C3D04060F C3D06060F $FPLIST TO?220F* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 6 0 1 10 -75 25 -75 50 -50 50 -50 -50 -25 -50 -25 -25 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # C3D06060G # DEF C3D06060G D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "C3D06060G" 0 -100 50 H V C CNN F2 "Package_TO_SOT_SMD:TO-263-2_TabPin1" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS C3D08060G C3D10060G $FPLIST TO?263*TabPin1* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 6 0 1 10 -75 25 -75 50 -50 50 -50 -50 -25 -50 -25 -25 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # C3D16060D # DEF C3D16060D D 0 40 N N 1 F N F0 "D" 0 200 50 H V C CNN F1 "C3D16060D" 0 -200 50 H V C CNN F2 "Package_TO_SOT_THT:TO-247-3_Vertical" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS C3D20060D C3D16065D C3D20065D C3D30065D C5D50065D C4D10120D C4D15120D C4D20120D C4D30120D C4D40120D $FPLIST TO?247* $ENDFPLIST DRAW C 100 0 10 0 1 0 F P 2 0 1 0 -100 -100 0 -100 N P 2 0 1 0 -100 -100 0 -100 N P 2 0 1 0 -100 100 0 100 N P 4 0 1 10 -100 -150 -100 -50 0 -100 -100 -150 N P 4 0 1 10 -100 -150 -100 -50 0 -100 -100 -150 N P 4 0 1 10 -100 50 -100 150 0 100 -100 50 N P 4 0 1 0 0 100 100 100 100 -100 0 -100 N P 6 0 1 10 25 -125 25 -150 0 -150 0 -50 -25 -50 -25 -75 N P 6 0 1 10 25 -125 25 -150 0 -150 0 -50 -25 -50 -25 -75 N P 6 0 1 10 25 75 25 50 0 50 0 150 -25 150 -25 125 N X A1 1 -200 100 100 R 50 50 1 1 P X K 2 200 0 100 L 50 50 1 1 P X A2 3 -200 -100 100 R 50 50 1 1 P ENDDRAW ENDDEF # # C3D1P7060Q # DEF C3D1P7060Q D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "C3D1P7060Q" 0 -100 50 H V C CNN F2 "Diode_SMD:D_QFN_3.3x3.3mm_P0.65mm" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST D*QFN*3.3x3.3mm*P0.65mm* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 6 0 1 10 -75 25 -75 50 -50 50 -50 -50 -25 -50 -25 -25 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # C4D10120H # DEF C4D10120H D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "C4D10120H" 0 -100 50 H V C CNN F2 "Package_TO_SOT_THT:TO-247-2_Vertical" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS C4D15120H C4D20120H C3D10170H C3D25170H $FPLIST TO?247* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 6 0 1 10 -75 25 -75 50 -50 50 -50 -50 -25 -50 -25 -25 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # CD4148W # DEF CD4148W D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "CD4148W" 0 -100 50 H V C CNN F2 "Diode_SMD:D_0805_2012Metric" 0 -200 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST D*0805* $ENDFPLIST DRAW P 2 0 1 10 -50 50 -50 -50 N P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # CSD01060E # DEF CSD01060E D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "CSD01060E" 0 -100 50 H V C CNN F2 "Package_TO_SOT_SMD:TO-252-2_TabPin1" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS C3D02060E C3D03060E C3D04060E C3D02065E C3D03065E C3D04065E C3D06065E C3D08065E C3D10065E C4D02120E C4D05120E C4D08120E C4D10120E $FPLIST TO?252*TabPin1* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 6 0 1 10 -75 25 -75 50 -50 50 -50 -50 -25 -50 -25 -25 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # DB3 # DEF DB3 D 0 40 N N 1 F N F0 "D" 0 150 50 H V C CNN F1 "DB3" 0 -150 50 H V C CNN F2 "Diode_THT:D_DO-35_SOD27_P7.62mm_Horizontal" 0 -225 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS DB4 DC34 $FPLIST D*DO?35* $ENDFPLIST DRAW P 2 0 1 10 -50 0 -50 -100 N P 2 0 1 10 50 100 50 0 N P 4 0 1 10 -50 100 -50 0 50 50 -50 100 N P 4 0 1 10 50 0 50 -100 -50 -50 50 0 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # ESD9B5.0ST5G # DEF ESD9B5.0ST5G D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "ESD9B5.0ST5G" 0 -100 50 H V C CNN F2 "Diode_SMD:D_SOD-923" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS ESD9B3.3ST5G SZESD9B5.0ST5G $FPLIST D*SOD?923* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 4 0 1 8 -100 -50 0 0 -100 50 -100 -50 N P 4 0 1 8 20 50 0 50 0 -50 -20 -50 N P 4 0 1 8 100 50 100 -50 0 0 100 50 N X A1 1 -150 0 100 R 50 50 1 1 P X A2 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # IDDD04G65C6 # DEF IDDD04G65C6 D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "IDDD04G65C6" 0 -100 50 H V C CNN F2 "Package_TO_SOT_SMD:Infineon_PG-HDSOP-10-1" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS IDDD06G65C6 IDDD08G65C6 IDDD10G65C6 IDDD12G65C6 IDDD16G65C6 IDDD20G65C6 $FPLIST Infineon*PG*HDSOP* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 6 0 1 10 -75 25 -75 50 -50 50 -50 -50 -25 -50 -25 -25 N X NC 1 -100 0 100 R 50 50 1 1 N N X K 10 -150 0 100 R 50 50 1 1 P N X NC 2 100 0 100 L 50 50 1 1 N N X A 3 150 0 100 L 50 50 1 1 P X A 4 150 0 100 L 50 50 1 1 P N X A 5 150 0 100 L 50 50 1 1 P N X K 6 -150 0 100 R 50 50 1 1 P X K 7 -150 0 100 R 50 50 1 1 P N X K 8 -150 0 100 R 50 50 1 1 P N X K 9 -150 0 100 R 50 50 1 1 P N ENDDRAW ENDDEF # # LL41 # DEF LL41 D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "LL41" 0 -100 50 H V C CNN F2 "Diode_SMD:D_MiniMELF" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS LL42 LL43 $FPLIST D*MiniMELF* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 6 0 1 10 -75 25 -75 50 -50 50 -50 -50 -25 -50 -25 -25 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # LL4148 # DEF LL4148 D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "LL4148" 0 -100 50 H V C CNN F2 "Diode_SMD:D_MiniMELF" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS LL4448 $FPLIST D*MiniMELF* $ENDFPLIST DRAW P 2 0 1 10 -50 50 -50 -50 N P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # MBR735 # DEF MBR735 D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "MBR735" 0 -100 50 H V C CNN F2 "Package_TO_SOT_THT:TO-220-2_Vertical" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS MBR745 CSD01060A C3D02060A C3D03060A C3D04060A C3D06060A C3D08060A C3D10060A C3D04065A C3D06065I C3D06065A C3D08065A C3D08065I C3D10065I C3D10065A C3D12065A C3D16065A CVFD20065A C4D02120A C4D05120A C4D08120A C4D10120A C4D15120A C4D20120A $FPLIST TO?220* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 6 0 1 10 -75 25 -75 50 -50 50 -50 -50 -25 -50 -25 -25 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # MCL4148 # DEF MCL4148 D 0 20 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "MCL4148" 0 -100 50 H V C CNN F2 "Diode_SMD:D_MicroMELF" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS MCL4448 BAV300 BAV301 BAV302 BAV303 $FPLIST D*MicroMELF* $ENDFPLIST DRAW P 2 0 1 10 -50 50 -50 -50 N P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # MM3Zxx # DEF MM3Zxx D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "MM3Zxx" 0 -100 50 H V C CNN F2 "Diode_SMD:D_SOD-123F" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST D?SOD?123F* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 3 0 1 10 -50 -50 -50 50 -30 50 N P 4 0 1 10 50 -50 50 50 -50 0 50 -50 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # MM5Zxx # DEF MM5Zxx D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "MM5Zxx" 0 -100 50 H V C CNN F2 "Diode_SMD:D_SOD-523" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS DZ2S030X0L DZ2S033X0L DZ2S036X0L DZ2S039X0L DZ2S047X0L DZ2S051X0L DZ2S056X0L DZ2S068X0L DZ2S082X0L DZ2S100X0L DZ2S120X0L DZ2S130X0L DZ2S150X0L DZ2S160X0L DZ2S180X0L DZ2S200X0L DZ2S360X0L DZ2S110X0L $FPLIST D?SOD?523* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 3 0 1 10 -50 -50 -50 50 -30 50 N P 4 0 1 10 50 -50 50 50 -50 0 50 -50 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # MMBZxx # DEF MMBZxx D 0 40 Y N 1 F N F0 "D" 150 100 50 H V L CNN F1 "MMBZxx" 150 0 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-23" 150 -100 50 H I L CNN F3 "" -100 0 50 V I C CNN $FPLIST SOT?23* $ENDFPLIST DRAW C 0 -100 10 0 1 0 F P 2 0 1 0 -100 -50 -100 100 N P 2 0 1 0 100 -50 100 100 N P 3 0 1 10 -150 50 -50 50 -50 30 N P 3 0 1 10 50 50 150 50 150 30 N P 4 0 1 0 -100 0 -100 -100 100 -100 100 0 N P 4 1 1 8 -150 -50 -50 -50 -100 50 -150 -50 N P 4 1 1 8 50 -50 150 -50 100 50 50 -50 N X K 1 -100 200 100 D 50 50 1 1 P X K 2 100 200 100 D 50 50 1 1 P X A 3 0 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # MMSD914 # DEF MMSD914 D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "MMSD914" 0 -100 50 H V C CNN F2 "Diode_SMD:D_SOD-123" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS 1N4148W BAV16W 1N4448W MMSD4148 $FPLIST D*SOD?123* $ENDFPLIST DRAW P 2 0 1 10 -50 50 -50 -50 N P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # MRA4003T3G # DEF MRA4003T3G D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "MRA4003T3G" 0 -100 50 H V C CNN F2 "Diode_SMD:D_SMA" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS MRA4004T3G MRA4005T3G MRA4006T3G MRA4007T3G NRVA4003T3G NRVA4004T3G NRVA4005T3G NRVA4006T3G NRVA4007T3G US1A US1B US1D US1G US1J US1K US1M US2AA US2BA US2DA US2FA US2GA US2JA US2KA US2MA $FPLIST D*SMA* $ENDFPLIST DRAW P 2 0 1 10 -50 50 -50 -50 N P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # PMEG2005EH # DEF PMEG2005EH D 0 20 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "PMEG2005EH" 0 -100 50 H V C CNN F2 "Diode_SMD:D_SOD-123F" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS PMEG1020EH PMEG1030EH PMEG2010AEH PMEG2010EH PMEG2015EH PMEG2020EH PMEG3010CEH PMEG3010EH PMEG3015EH PMEG3020EH PMEG4010CEH PMEG4010EH PMEG3005EH PMEG4005EH PMEG6010CEH $FPLIST D*SOD?123F* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 4 0 1 8 50 50 50 -50 -50 0 50 50 N P 6 0 1 8 -75 25 -75 50 -50 50 -50 -50 -25 -50 -25 -25 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # PMEG2005EJ # DEF PMEG2005EJ D 0 20 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "PMEG2005EJ" 0 -100 50 H V C CNN F2 "Diode_SMD:D_SOD-323F" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS PMEG1020EJ PMEG1030EJ PMEG2010AEJ PMEG2010EJ PMEG2015EJ PMEG2020EJ PMEG3002EJ PMEG3010CEJ PMEG3010EJ PMEG3015EJ PMEG3020EJ PMEG4002EJ PMEG4005CEJ PMEG4010CEJ PMEG4010EJ PMEG6002EJ PMEG3005EJ PMEG4005EJ PMEG6010CEJ $FPLIST D*SOD?323F* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 4 0 1 8 50 50 50 -50 -50 0 50 50 N P 6 0 1 8 -75 25 -75 50 -50 50 -50 -50 -25 -50 -25 -25 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # PMEG2010AET # DEF PMEG2010AET D 0 20 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "PMEG2010AET" 0 -100 50 H V C CNN F2 "Diode_SMD:D_SOT-23_ANK" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS PMEG2010ET PMEG3010ET PMEG4010ET $FPLIST D*SOT?23*ANK* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 4 0 1 8 50 -50 50 50 -50 0 50 -50 N P 6 0 1 8 -75 25 -75 50 -50 50 -50 -50 -25 -50 -25 -25 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # PMEG4050EP # DEF PMEG4050EP D 0 20 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "PMEG4050EP" 0 -100 50 H V C CNN F2 "Diode_SMD:D_SOD-128" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS PMEG6030EP PMEG6045ETP $FPLIST D*SOD?128* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 6 0 1 10 -75 25 -75 50 -50 50 -50 -50 -25 -50 -25 -25 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # Rohm_UMN1N # DEF Rohm_UMN1N D 0 40 Y N 4 F N F0 "D" 0 100 50 H V C CNN F1 "Rohm_UMN1N" 0 -100 50 H V C CNN F2 "Package_TO_SOT_SMD:SOT-353_SC-70-5" 0 -175 50 H I C CNN F3 "" 0 100 50 H I C CNN ALIAS MMBD4448HCQW Panasonic_MA5J002E $FPLIST SOT?353* $ENDFPLIST DRAW P 2 0 1 6 -50 50 -50 -50 N P 2 0 1 0 50 -50 50 50 N P 2 0 1 0 50 0 -50 0 N P 3 0 1 0 50 50 -50 0 50 -50 N X A 1 150 0 100 L 50 50 1 1 P X K 2 -150 0 100 R 50 50 1 1 P X K 2 -150 0 100 R 50 50 2 1 P X A 3 150 0 100 L 50 50 2 1 P X K 2 -150 0 100 R 50 50 3 1 P X A 4 150 0 100 L 50 50 3 1 P X K 2 -150 0 100 R 50 50 4 1 P X A 5 150 0 100 L 50 50 4 1 P ENDDRAW ENDDEF # # Rohm_UMP11N # DEF Rohm_UMP11N D 0 40 Y N 4 F N F0 "D" 0 100 50 H V C CNN F1 "Rohm_UMP11N" 0 -100 50 H V C CNN F2 "Package_TO_SOT_SMD:SOT-363_SC-70-6" 0 -175 50 H I C CNN F3 "" 0 100 50 H I C CNN ALIAS BAW56DW BAW56S MMBD4448HADW Toshiba_HN1D01FU $FPLIST SOT?363* $ENDFPLIST DRAW P 2 0 1 6 -50 50 -50 -50 N P 2 0 1 0 50 -50 50 50 N P 2 0 1 0 50 0 -50 0 N P 3 0 1 0 50 50 -50 0 50 -50 N X K 1 -150 0 100 R 50 50 1 1 P X A 6 150 0 100 L 50 50 1 1 P X K 2 -150 0 100 R 50 50 2 1 P X A 6 150 0 100 L 50 50 2 1 P X A 3 150 0 100 L 50 50 3 1 P X K 4 -150 0 100 R 50 50 3 1 P X A 3 150 0 100 L 50 50 4 1 P X K 5 -150 0 100 R 50 50 4 1 P ENDDRAW ENDDEF # # S2JTR # DEF S2JTR D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "S2JTR" 0 -100 50 H V C CNN F2 "Diode_SMD:D_SMB" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS STTH212U $FPLIST *D?SMB* $ENDFPLIST DRAW P 2 0 1 10 -50 50 -50 -50 N P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # SB120 # DEF SB120 D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "SB120" 0 -100 50 H V C CNN F2 "Diode_THT:D_DO-41_SOD81_P10.16mm_Horizontal" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS SB130 SB140 SB150 SB160 1N5817 1N5818 1N5819 $FPLIST D*DO?41* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 6 0 1 10 -75 25 -75 50 -50 50 -50 -50 -25 -50 -25 -25 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # SD05_SOD323 # DEF SD05_SOD323 D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "SD05_SOD323" 0 -100 50 H V C CNN F2 "Diode_SMD:D_SOD-323" 0 -200 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS SD12_SOD323 SD15_SOD323 SD24_SOD323 SD36_SOD323 $FPLIST D?SOD?323* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 4 0 1 8 -100 -50 0 0 -100 50 -100 -50 N P 4 0 1 8 20 50 0 50 0 -50 -20 -50 N P 4 0 1 8 100 50 100 -50 0 0 100 50 N X A1 1 -150 0 100 R 50 50 1 1 P X A2 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # SD103ATW # DEF SD103ATW D 0 20 Y N 3 F N F0 "D" -50 100 50 H V C CNN F1 "SD103ATW" 0 -100 50 H V C CNN F2 "Package_TO_SOT_SMD:SOT-363_SC-70-6" 0 -200 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST SOT?363* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 6 0 1 10 -75 25 -75 50 -50 50 -50 -50 -25 -50 -25 -25 N X K 1 -150 0 100 R 50 50 1 1 P X A 6 150 0 100 L 50 50 1 1 P X K 2 -150 0 100 R 50 50 2 1 P X A 5 150 0 100 L 50 50 2 1 P X K 3 -150 0 100 R 50 50 3 1 P X A 4 150 0 100 L 50 50 3 1 P ENDDRAW ENDDEF # # SM4001 # DEF SM4001 D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "SM4001" 0 -100 50 H V C CNN F2 "Diode_SMD:D_MELF" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS SM4002 SM4003 SM4004 SM4005 SM4006 SM4007 SM513 SM516 SM518 SM2000 $FPLIST D*MELF* $ENDFPLIST DRAW P 2 0 1 10 -50 50 -50 -50 N P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # SM712_SOT23 # DEF SM712_SOT23 D 0 40 Y N 1 F N F0 "D" 0 175 50 H V C CNN F1 "SM712_SOT23" 0 100 50 H V C CNN F2 "Package_TO_SOT_SMD:SOT-23" 0 -350 50 H I C CNN F3 "" -150 0 50 H I C CNN $FPLIST SOT?23* $ENDFPLIST DRAW C 0 0 10 0 1 0 F P 2 0 0 0 0 -50 0 0 N P 2 0 1 0 -250 0 250 0 N P 4 0 1 8 -130 50 -150 50 -150 -50 -170 -50 N P 4 0 1 8 170 50 150 50 150 -50 130 -50 N P 5 0 1 8 -250 -50 -50 50 -50 -50 -250 50 -250 -50 N P 5 0 1 8 50 -50 50 50 250 -50 250 50 50 -50 N X A1 1 -350 0 100 R 50 50 1 1 P X A2 2 350 0 100 L 50 50 1 1 P X common 3 0 -150 100 U 50 50 1 1 I ENDDRAW ENDDEF # # STTH212S # DEF STTH212S D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "STTH212S" 0 -100 50 H V C CNN F2 "Diode_SMD:D_SMC" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST D?SMC* $ENDFPLIST DRAW P 2 0 1 10 -50 50 -50 -50 N P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # VS-6ESU06 # DEF VS-6ESU06 D 0 20 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "VS-6ESU06" 0 -100 50 H V C CNN F2 "Package_TO_SOT_SMD:TO-277A" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST TO?277A* $ENDFPLIST DRAW P 2 0 1 10 -50 50 -50 -50 N P 2 0 1 0 50 0 -50 0 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N X A 1 150 0 100 L 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P N X K 3 -150 0 100 R 50 50 1 1 P ENDDRAW ENDDEF # # Z1SMAxxx # DEF Z1SMAxxx D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "Z1SMAxxx" 0 -100 50 H V C CNN F2 "Diode_SMD:D_SMA" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST D?SMA* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 3 0 1 10 -50 -50 -50 50 -30 50 N P 4 0 1 10 50 -50 50 50 -50 0 50 -50 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # Z2SMBxxx # DEF Z2SMBxxx D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "Z2SMBxxx" 0 -100 50 H V C CNN F2 "Diode_SMD:D_SMB" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST D?SMB* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 3 0 1 10 -50 -50 -50 50 -30 50 N P 4 0 1 10 50 -50 50 50 -50 0 50 -50 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # Z3SMCxxx # DEF Z3SMCxxx D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "Z3SMCxxx" 0 -100 50 H V C CNN F2 "Diode_SMD:D_SMC" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST D?SMC* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 3 0 1 10 -50 -50 -50 50 -30 50 N P 4 0 1 10 50 -50 50 50 -50 0 50 -50 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # ZMDxx # DEF ZMDxx D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "ZMDxx" 0 -100 50 H V C CNN F2 "Diode_SMD:D_MiniMELF" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS ZMMxx $FPLIST D*MiniMELF* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 3 0 1 10 -50 -50 -50 50 -30 50 N P 4 0 1 10 50 -50 50 50 -50 0 50 -50 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # ZMYxx # DEF ZMYxx D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "ZMYxx" 0 -100 50 H V C CNN F2 "Diode_SMD:D_MELF" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS SMZxxx $FPLIST D*MELF* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 3 0 1 10 -50 -50 -50 50 -30 50 N P 4 0 1 10 50 -50 50 50 -50 0 50 -50 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # ZPDxx # DEF ZPDxx D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "ZPDxx" 0 -100 50 H V C CNN F2 "Diode_THT:D_DO-35_SOD27_P10.16mm_Horizontal" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST D*DO?35* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 3 0 1 10 -50 -50 -50 50 -30 50 N P 4 0 1 10 50 -50 50 50 -50 0 50 -50 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # ZPYxx # DEF ZPYxx D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "ZPYxx" 0 -100 50 H V C CNN F2 "Diode_THT:D_DO-41_SOD81_P10.16mm_Horizontal" 0 -175 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS 1N47xxA ZYxxx $FPLIST D*DO?41* $ENDFPLIST DRAW P 2 0 1 0 50 0 -50 0 N P 3 0 1 10 -50 -50 -50 50 -30 50 N P 4 0 1 10 50 -50 50 50 -50 0 50 -50 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # #End Library ================================================ FILE: esim-cloud-backend/kicad-symbols/additional/LED.dcm ================================================ EESchema-DOCLIB Version 2.0 # $CMP APA-106-F5 D RGB LED with integrated controller, 5mm Package K RGB LED addressable 8bit pwm 5bit greyscale F https://cdn.sparkfun.com/datasheets/Components/LED/COM-12877.pdf $ENDCMP # $CMP APA102 D RGB LED with integrated controller K RGB LED addressable 8bit pwm 5bit greyscale F http://www.led-color.com/upload/201506/APA102%20LED.pdf $ENDCMP # $CMP APA102-2020 D RGB LED with integrated controller K RGB LED addressable 8bit pwm 5bit greyscale F http://www.led-color.com/upload/201604/APA102-2020%20SMD%20LED.pdf $ENDCMP # $CMP APFA3010 D LED RGB, Common Anode, SMD, 3.0x1.5mm, Horizontal K LED RGB SMD Kingbright APFA3010 Horizontal F http://www.kingbrightusa.com/images/catalog/SPEC/APFA3010LSEEZGKQBKC.pdf $ENDCMP # $CMP ASMB-MTB0-0A3A2 D Tricolor Black Surface LED, Common Anode Pin 1, PLCC-4 K led rgb diode F https://docs.broadcom.com/docs/AV02-4186EN $ENDCMP # $CMP ASMB-MTB1-0A3A2 D Tricolor Black Surface LED, Common Anode Pin 4, PLCC-4 K led rgb diode F https://docs.broadcom.com/docs/AV02-4194EN $ENDCMP # $CMP ASMT-YTB7-0AA02 D Triple LED RVB (Avago Technology) K LED RGB F https://docs.broadcom.com/docs/AV02-3793EN $ENDCMP # $CMP ASMT-YTC2-0AA02 D Triple LED RVB (Avago Technology) K LED RGB F http://www.avagotech.com/docs/AV02-2589EN $ENDCMP # $CMP CLS6B-FKW D Cree PLCC6 3 in 1 SMD LED, PLCC-6 K LED RGB F https://www.cree.com/led-components/media/documents/CLS6B-FKW.pdf $ENDCMP # $CMP CLV1L-FKB D Cree PLCC4 3 in 1 SMD LED K led rgb diode F http://www.cree.com/led-components/media/documents/CLV1L-FKB-1238.pdf $ENDCMP # $CMP CQY99 D 950nm IR-LED, 5mm K IR LED F https://www.prtice.info/IMG/pdf/CQY99.pdf $ENDCMP # $CMP HDSP-4830 D 10-element LED arrays, high effecient red K display LED array F https://docs.broadcom.com/docs/AV02-1798EN $ENDCMP # $CMP HDSP-4830_2 D BAR GRAPH 10 segment block, high efficiency red K display LED array F https://docs.broadcom.com/docs/AV02-1798EN $ENDCMP # $CMP HDSP-4832 D 10-element LED arrays, Mix of high effecient red, yellow and green K display LED array F https://docs.broadcom.com/docs/AV02-1798EN $ENDCMP # $CMP HDSP-4832_2 D BAR GRAPH 10 segment block, Mix of high efficiency red, yellow and green K display LED array F https://docs.broadcom.com/docs/AV02-1798EN $ENDCMP # $CMP HDSP-4836 D 10-element LED arrays, Mix of high effecient red, yellow and green K display LED array F https://docs.broadcom.com/docs/AV02-1798EN $ENDCMP # $CMP HDSP-4836_2 D BAR GRAPH 10 segment block, Mix of high efficiency red, yellow and green K display LED array F https://docs.broadcom.com/docs/AV02-1798EN $ENDCMP # $CMP HDSP-4840 D 10-element LED arrays, Yellow K display LED array F https://docs.broadcom.com/docs/AV02-1798EN $ENDCMP # $CMP HDSP-4840_2 D BAR GRAPH 10 segment block, yellow K display LED array F https://docs.broadcom.com/docs/AV02-1798EN $ENDCMP # $CMP HDSP-4850 D 10-element LED arrays, Green K display LED array F https://docs.broadcom.com/docs/AV02-1798EN $ENDCMP # $CMP HDSP-4850_2 D BAR GRAPH 10 segment block, green K display LED array F https://docs.broadcom.com/docs/AV02-1798EN $ENDCMP # $CMP HLCP-J100 D 10-element LED arrays, AIGaAs Red K display LED array F https://docs.broadcom.com/docs/AV02-1798EN $ENDCMP # $CMP HLCP-J100_2 D BAR GRAPH 10 segment block, AlGaAs red K display LED array F https://docs.broadcom.com/docs/AV02-1798EN $ENDCMP # $CMP IR204A D Infrared LED , 3mm LED package K opto IR LED F http://www.everlight.com/file/ProductFile/IR204-A.pdf $ENDCMP # $CMP IR26-21C_L110_TR8 D 940nm, 20 deg, Infrared LED, 1206 K IR LED F http://www.everlight.com/file/ProductFile/IR26-21C-L110-TR8.pdf $ENDCMP # $CMP IRL81A D 850nm High Power Infrared Emitter, Side-Emitter package K IR LED F http://www.osram-os.com/Graphics/XPic0/00203825_0.pdf $ENDCMP # $CMP Inolux_IN-PI554FCH D 5050 RGB LED 4-Pin with integrated IC K RGB LED NeoPixel addressable F http://www.inolux-corp.com/datasheet/SMDLED/Addressable%20LED/IN-PI554FCH.pdf $ENDCMP # $CMP Inolux_IN-PI556FCH D 5050 RGB LED 6-Pin with integrated IC K RGB LED NeoPixel addressable F http://www.inolux-corp.com/datasheet/SMDLED/Addressable%20LED/IN-PI556FCH.pdf $ENDCMP # $CMP LD271 D 940nm IR-LED, 5mm K IR LED F http://www.alliedelec.com/m/d/40788c34903a719969df15f1fbea1056.pdf $ENDCMP # $CMP LD274 D 950nm IR-LED, 5mm K IR LED F http://pdf.datasheetcatalog.com/datasheet/siemens/LD274.pdf $ENDCMP # $CMP LED_Cree_XHP50_12V D XLamp® XHP50 LED, 12V footprint (all 4 LEDs in series) K led diode F http://www.cree.com/%7E/media/Files/Cree/LED%20Components%20and%20Modules/XLamp/Data%20and%20Binning/ds%20XHP50.pdf $ENDCMP # $CMP LED_Cree_XHP50_6V D XLamp® XHP50 LED, 6V footprint (2x2 serial LEDs in parallel) K led diode F http://www.cree.com/%7E/media/Files/Cree/LED%20Components%20and%20Modules/XLamp/Data%20and%20Binning/ds%20XHP50.pdf $ENDCMP # $CMP LED_Cree_XHP70_12V D XLamp® XHP70 LED, 12V footprint (all 4 LEDs in series) K led diode F http://www.cree.com/%7E/media/Files/Cree/LED%20Components%20and%20Modules/XLamp/Data%20and%20Binning/ds%20XHP70.pdf $ENDCMP # $CMP LED_Cree_XHP70_6V D XLamp® XHP70 LED, 6V footprint (2x2 serial LEDs in parallel) K led diode F http://www.cree.com/%7E/media/Files/Cree/LED%20Components%20and%20Modules/XLamp/Data%20and%20Binning/ds%20XHP70.pdf $ENDCMP # $CMP NeoPixel_THT D RGB LED with integrated controller, 5mm/8mm LED package K RGB LED NeoPixel addressable F https://www.adafruit.com/product/1938 $ENDCMP # $CMP QLS6A-FKW D Cree PLCC6 3 in 1 SMD LED with zener protection, PLCC-6 K LED RGB F https://www.cree.com/led-components/media/documents/1381-QLS6AFKW.pdf $ENDCMP # $CMP QLS6B-FKW D Cree PLCC6 3 in 1 SMD LED, PLCC-6 K LED RGB F https://www.cree.com/led-components/media/documents/1397-QLS6BFKW.pdf $ENDCMP # $CMP SFH4346 D Infrared LED , 3mm LED package K opto IR LED F http://cdn-reichelt.de/documents/datenblatt/A500/SFH4346.pdf $ENDCMP # $CMP SFH4356P D Infrared LED , 3mm LED package K opto IR LED F http://www.osram-os.com/Graphics/XPic5/00181708_0.pdf $ENDCMP # $CMP SFH4546 D High-Power IR LED 940nm K IR LED F http://www.osram-os.com/Graphics/XPic1/00101982_0.pdf $ENDCMP # $CMP SFH4550 D 950nm High-Power IR-LED, 5mm K IR LED F http://www.osram-os.com/Graphics/XPic3/00116140_0.pdf $ENDCMP # $CMP SFH460 D GaAlAs Infrared LED, TO-18 package K opto IR LED F http://www.osram-os.com/Graphics/XPic6/00029609_0.pdf/SFh%20460.pdf $ENDCMP # $CMP SFH480 D GaAlAs Infrared LED (880 nm), TO-18 package K IR LED Opto F http://www.osram-os.com/Graphics/XPic1/00083613_0.pdf $ENDCMP # $CMP SFH482 D GaAlAs Infrared LED (880 nm), TO-18 package K opto IR LED F http://www.osram-os.com/Graphics/XPic2/00182155_0.pdf/SFH%20482%20E7800,%20Lead%20(Pb)%20Free%20Product%20-%20RoHS%20Compliant.pdf $ENDCMP # $CMP SK6805 D RGB LED with integrated controller K RGB LED NeoPixel Nano addressable F https://cdn-shop.adafruit.com/product-files/3484/3484_Datasheet.pdf $ENDCMP # $CMP SK6812 D RGB LED with integrated controller K RGB LED NeoPixel addressable F https://cdn-shop.adafruit.com/product-files/1138/SK6812+LED+datasheet+.pdf $ENDCMP # $CMP SK6812MINI D RGB LED with integrated controller K RGB LED NeoPixel Mini addressable F https://cdn-shop.adafruit.com/product-files/2686/SK6812MINI_REV.01-1-2.pdf $ENDCMP # $CMP SMLVN6RGB D High Brightness Tri-Color LED, RGB, 3.5x2.8mm K LED RGB Diode F https://www.rohm.com/datasheet/SMLVN6RGB1U $ENDCMP # $CMP TSAL4400 D Infrared LED , 3mm LED package K opto IR LED F http://www.vishay.com/docs/81006/tsal4400.pdf $ENDCMP # $CMP WS2812 D RGB LED with integrated controller K RGB LED NeoPixel addressable F https://cdn-shop.adafruit.com/datasheets/WS2812.pdf $ENDCMP # $CMP WS2812B D RGB LED with integrated controller K RGB LED NeoPixel addressable F https://cdn-shop.adafruit.com/datasheets/WS2812B.pdf $ENDCMP # $CMP WS2812S D RGB LED with integrated controller K RGB LED addressable F http://www.world-semi.com/DownLoadFile/115 $ENDCMP # $CMP WS2813 D RGB LED with integrated controller K RGB LED addressable F http://www.normandled.com/upload/201605/WS2813%20LED%20Datasheet.pdf $ENDCMP # $CMP WS2822S D RGB LED with integrated controller K RGB LED addressable F http://akizukidenshi.com/download/ds/worldsemi/WS2822S.pdf $ENDCMP # #End Doc Library ================================================ FILE: esim-cloud-backend/kicad-symbols/additional/LED.lib ================================================ EESchema-LIBRARY Version 2.4 #encoding utf-8 # # APA-106-F5 # DEF APA-106-F5 D 0 20 Y Y 1 F N F0 "D" 200 225 50 H V R BNN F1 "APA-106-F5" 50 -225 50 H V L TNN F2 "LED_THT:LED_D5.0mm-4_RGB" 50 -300 50 H I L TNN F3 "" 100 -375 50 H I L TNN $FPLIST LED*D5.0mm*RGB* $ENDFPLIST DRAW T 0 90 -165 30 0 0 0 RGB Normal 0 C C S 200 200 -200 -200 0 1 10 f P 2 0 1 0 50 -140 70 -140 N P 2 0 1 0 50 -100 70 -100 N P 2 0 1 0 185 -140 105 -140 N P 3 0 1 0 90 -100 50 -140 50 -120 N P 3 0 1 0 90 -60 50 -100 50 -80 N P 3 0 1 0 145 -40 145 -140 145 -160 N P 4 0 1 0 185 -60 105 -60 145 -140 185 -60 N X DO 1 300 100 100 L 50 50 1 1 O X GND 2 0 -300 100 U 50 50 1 1 W X VDD 3 0 300 100 D 50 50 1 1 W X DI 4 -300 100 100 R 50 50 1 1 I ENDDRAW ENDDEF # # APA102 # DEF APA102 D 0 20 Y Y 1 F N F0 "D" 200 225 50 H V R BNN F1 "APA102" 50 -225 50 H V L TNN F2 "LED_SMD:LED_RGB_5050-6" 50 -300 50 H I L TNN F3 "" 100 -375 50 H I L TNN $FPLIST LED*RGB*5050* $ENDFPLIST DRAW T 0 90 -165 30 0 0 0 RGB Normal 0 C C S 200 200 -200 -200 0 1 10 f P 2 0 1 0 50 -140 70 -140 N P 2 0 1 0 50 -100 70 -100 N P 2 0 1 0 185 -140 105 -140 N P 3 0 1 0 90 -100 50 -140 50 -120 N P 3 0 1 0 90 -60 50 -100 50 -80 N P 3 0 1 0 145 -40 145 -140 145 -160 N P 4 0 1 0 185 -60 105 -60 145 -140 185 -60 N X DI 1 -300 100 100 R 50 50 1 1 I X CI 2 -300 0 100 R 50 50 1 1 I X GND 3 0 -300 100 U 50 50 1 1 W X VCC 4 0 300 100 D 50 50 1 1 W X CO 5 300 0 100 L 50 50 1 1 O X DO 6 300 100 100 L 50 50 1 1 O ENDDRAW ENDDEF # # APA102-2020 # DEF APA102-2020 D 0 20 Y Y 1 F N F0 "D" 200 225 50 H V R BNN F1 "APA102-2020" 50 -225 50 H V L TNN F2 "LED_SMD:LED-APA102-2020" 50 -300 50 H I L TNN F3 "" 100 -375 50 H I L TNN $FPLIST LED*APA102* $ENDFPLIST DRAW T 0 90 -165 30 0 0 0 RGB Normal 0 C C S 200 200 -200 -200 0 1 10 f P 2 0 1 0 50 -140 70 -140 N P 2 0 1 0 50 -100 70 -100 N P 2 0 1 0 185 -140 105 -140 N P 3 0 1 0 90 -100 50 -140 50 -120 N P 3 0 1 0 90 -60 50 -100 50 -80 N P 3 0 1 0 145 -40 145 -140 145 -160 N P 4 0 1 0 185 -60 105 -60 145 -140 185 -60 N X VDD 1 0 300 100 D 50 50 1 1 W X CKO 2 300 0 100 L 50 50 1 1 O X SDO 3 300 100 100 L 50 50 1 1 O X SDI 4 -300 100 100 R 50 50 1 1 I X CKI 5 -300 0 100 R 50 50 1 1 I X GND 6 0 -300 100 U 50 50 1 1 W ENDDRAW ENDDEF # # APFA3010 # DEF APFA3010 D 0 0 Y N 1 F N F0 "D" 0 400 50 H V C CNN F1 "APFA3010" 0 -400 50 H V C CNN F2 "LED_SMD:LED_Kingbright_APFA3010_3x1.5mm_Horizontal" 0 500 50 H I C CNN F3 "" 0 -450 50 H I C CNN $FPLIST *Kingbright*APFA3010*3x1.5mm*Horizontal* $ENDFPLIST DRAW C 80 0 10 0 1 0 F T 0 -75 -250 50 0 0 0 B Normal 0 C C T 0 -75 -50 50 0 0 0 G Normal 0 C C T 0 -75 150 50 0 0 0 R Normal 0 C C S -100 -350 100 350 0 1 10 f S 50 250 50 250 0 1 0 N P 2 0 1 0 -100 -200 50 -200 N P 2 0 1 10 -50 -150 -50 -250 N P 2 0 1 10 -50 50 -50 -50 N P 2 0 1 10 -50 250 -50 150 N P 2 0 1 0 50 200 -100 200 N P 2 0 1 0 100 0 -100 0 N P 4 0 1 0 50 -200 80 -200 80 200 50 200 N P 4 0 1 10 50 -150 50 -250 -50 -200 50 -150 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 4 0 1 10 50 250 50 150 -50 200 50 250 N P 5 0 1 0 -40 -150 20 -90 -10 -90 20 -90 20 -120 N P 5 0 1 0 -40 50 20 110 -10 110 20 110 20 80 N P 5 0 1 0 -40 250 20 310 -10 310 20 310 20 280 N P 5 0 1 0 0 -150 60 -90 30 -90 60 -90 60 -120 N P 5 0 1 0 0 50 60 110 30 110 60 110 60 80 N P 5 0 1 0 0 250 60 310 30 310 60 310 60 280 N X R 1 -200 200 100 R 50 50 1 1 I X A 2 200 0 100 L 50 50 1 1 W X G 3 -200 0 100 R 50 50 1 1 I X B 4 -200 -200 100 R 50 50 1 1 I ENDDRAW ENDDEF # # ASMB-MTB0-0A3A2 # DEF ASMB-MTB0-0A3A2 D 0 0 Y N 1 F N F0 "D" 0 400 50 H V C CNN F1 "ASMB-MTB0-0A3A2" 0 -400 50 H V C CNN F2 "LED_SMD:LED_Avago_PLCC4_3.2x2.8mm_CW" 0 500 50 H I C CNN F3 "" 0 -450 50 H I C CNN $FPLIST *Avago*PLCC4*3.2x2.8mm* $ENDFPLIST DRAW C 80 0 10 0 1 0 F T 0 -75 -250 50 0 0 0 B Normal 0 C C T 0 -75 -50 50 0 0 0 G Normal 0 C C T 0 -75 150 50 0 0 0 R Normal 0 C C S -100 -350 100 350 0 1 10 f S 50 250 50 250 0 1 0 N P 2 0 1 0 -100 -200 50 -200 N P 2 0 1 10 -50 -150 -50 -250 N P 2 0 1 10 -50 50 -50 -50 N P 2 0 1 10 -50 250 -50 150 N P 2 0 1 0 50 200 -100 200 N P 2 0 1 0 100 0 -100 0 N P 4 0 1 0 50 -200 80 -200 80 200 50 200 N P 4 0 1 10 50 -150 50 -250 -50 -200 50 -150 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 4 0 1 10 50 250 50 150 -50 200 50 250 N P 5 0 1 0 -40 -150 20 -90 -10 -90 20 -90 20 -120 N P 5 0 1 0 -40 50 20 110 -10 110 20 110 20 80 N P 5 0 1 0 -40 250 20 310 -10 310 20 310 20 280 N P 5 0 1 0 0 -150 60 -90 30 -90 60 -90 60 -120 N P 5 0 1 0 0 50 60 110 30 110 60 110 60 80 N P 5 0 1 0 0 250 60 310 30 310 60 310 60 280 N X A 1 200 0 100 L 50 50 1 1 P X BK 2 -200 -200 100 R 50 50 1 1 P X GK 3 -200 0 100 R 50 50 1 1 P X RK 4 -200 200 100 R 50 50 1 1 P ENDDRAW ENDDEF # # ASMB-MTB1-0A3A2 # DEF ASMB-MTB1-0A3A2 D 0 0 Y N 1 F N F0 "D" 0 500 50 H V C CNN F1 "ASMB-MTB1-0A3A2" 50 -450 50 H V C CNN F2 "LED_SMD:LED_Avago_PLCC4_3.2x2.8mm_CW" 0 600 50 H I C CNN F3 "" 0 -450 50 H I C CNN $FPLIST *Avago*PLCC4*3.2x2.8mm* $ENDFPLIST DRAW C 80 0 10 0 1 0 F T 0 -75 -250 50 0 0 0 B Normal 0 C C T 0 -75 -50 50 0 0 0 G Normal 0 C C T 0 -75 150 50 0 0 0 R Normal 0 C C S 50 250 50 250 0 1 0 N S 100 -350 -100 400 0 1 10 f P 2 0 1 0 -100 -200 50 -200 N P 2 0 1 10 -50 -150 -50 -250 N P 2 0 1 10 -50 50 -50 -50 N P 2 0 1 10 -50 250 -50 150 N P 2 0 1 0 50 200 -100 200 N P 2 0 1 0 100 0 -100 0 N P 4 0 1 0 50 -200 80 -200 80 200 50 200 N P 4 0 1 10 50 -150 50 -250 -50 -200 50 -150 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 4 0 1 10 50 250 50 150 -50 200 50 250 N P 5 0 1 0 -40 -150 20 -90 -10 -90 20 -90 20 -120 N P 5 0 1 0 -40 50 20 110 -10 110 20 110 20 80 N P 5 0 1 0 -40 250 20 310 -10 310 20 310 20 280 N P 5 0 1 0 0 -150 60 -90 30 -90 60 -90 60 -120 N P 5 0 1 0 0 50 60 110 30 110 60 110 60 80 N P 5 0 1 0 0 250 60 310 30 310 60 310 60 280 N X RK 1 -200 200 100 R 50 50 1 1 P X GK 2 -200 0 100 R 50 50 1 1 P X BK 3 -200 -200 100 R 50 50 1 1 P X A 4 200 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # ASMT-YTC2-0AA02 # DEF ASMT-YTC2-0AA02 D 0 20 Y N 1 F N F0 "D" -200 250 50 H V L CNN F1 "ASMT-YTC2-0AA02" -200 -250 50 H V L CNN F2 "LED_SMD:LED_Avago_PLCC6_3x2.8mm" -200 -320 50 H I L CNN F3 "" 150 0 50 H I L CNN ALIAS ASMT-YTB7-0AA02 $FPLIST LED?Avago?PLCC6?3x2.8mm* $ENDFPLIST DRAW T 0 -20 -136 30 0 0 0 B Normal 0 C C T 0 179 -33 30 0 0 0 G Normal 0 C C T 0 -15 71 30 0 0 0 R Normal 0 C C S -200 200 200 -200 0 1 10 f P 2 0 1 0 -200 -100 200 -100 N P 2 0 1 0 -200 0 200 0 N P 2 0 1 0 -200 100 200 100 N P 2 0 1 0 -110 -50 -70 -10 N P 2 0 1 0 -110 150 -70 190 N P 2 0 1 0 -70 -50 -30 -10 N P 2 0 1 0 -70 150 -30 190 N P 2 0 1 10 -50 -50 -50 -150 N P 2 0 1 10 -50 150 -50 50 N P 2 0 1 0 90 50 130 90 N P 2 0 1 0 130 50 170 90 N P 2 0 1 10 150 50 150 -50 N P 3 0 1 0 -100 180 -70 190 -80 160 N P 3 0 1 0 -80 -40 -70 -10 -100 -20 N P 3 0 1 0 -60 -20 -30 -10 -40 -40 N P 3 0 1 0 -60 180 -30 190 -40 160 N P 3 0 1 0 120 60 130 90 100 80 N P 3 0 1 0 140 80 170 90 160 60 N P 4 0 1 10 -150 -50 -150 -150 -50 -100 -150 -50 N P 4 0 1 10 -150 150 -150 50 -50 100 -150 150 N P 4 0 1 10 50 50 50 -50 150 0 50 50 N X KB 1 300 -100 100 L 50 50 1 1 P X KG 2 300 0 100 L 50 50 1 1 P X KR 3 300 100 100 L 50 50 1 1 P X AR 4 -300 100 100 R 50 50 1 1 P X AG 5 -300 0 100 R 50 50 1 1 P X AB 6 -300 -100 100 R 50 50 1 1 P ENDDRAW ENDDEF # # CLS6B-FKW # DEF CLS6B-FKW D 0 20 Y N 1 F N F0 "D" -200 250 50 H V L CNN F1 "CLS6B-FKW" -200 -250 50 H V L CNN F2 "LED_SMD:LED_Cree-PLCC6_4.7x1.5mm" -200 -320 50 H I L CNN F3 "" -200 -400 50 H I L CNN ALIAS QLS6B-FKW $FPLIST LED*Cree*PLCC*4.7x1.5mm* $ENDFPLIST DRAW T 0 -25 -131 30 0 0 0 B Normal 0 C C T 0 174 -28 30 0 0 0 G Normal 0 C C T 0 -25 71 30 0 0 0 R Normal 0 C C S -200 200 200 -200 0 1 10 f P 2 0 1 0 -200 -100 200 -100 N P 2 0 1 0 -200 0 200 0 N P 2 0 1 0 -200 100 200 100 N P 2 0 1 0 -110 -50 -70 -10 N P 2 0 1 0 -110 150 -70 190 N P 2 0 1 0 -70 -50 -30 -10 N P 2 0 1 0 -70 150 -30 190 N P 2 0 1 10 -50 -50 -50 -150 N P 2 0 1 10 -50 150 -50 50 N P 2 0 1 0 90 50 130 90 N P 2 0 1 0 130 50 170 90 N P 2 0 1 10 150 50 150 -50 N P 3 0 1 0 -100 180 -70 190 -80 160 N P 3 0 1 0 -80 -40 -70 -10 -100 -20 N P 3 0 1 0 -60 -20 -30 -10 -40 -40 N P 3 0 1 0 -60 180 -30 190 -40 160 N P 3 0 1 0 120 60 130 90 100 80 N P 3 0 1 0 140 80 170 90 160 60 N P 4 0 1 10 -150 -50 -150 -150 -50 -100 -150 -50 N P 4 0 1 10 -150 150 -150 50 -50 100 -150 150 N P 4 0 1 10 50 50 50 -50 150 0 50 50 N X AB 1 -300 -100 100 R 50 50 1 1 P X KB 2 300 -100 100 L 50 50 1 1 P X AR 3 -300 100 100 R 50 50 1 1 P X KR 4 300 100 100 L 50 50 1 1 P X AG 5 -300 0 100 R 50 50 1 1 P X KR 6 300 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # CLV1L-FKB # DEF CLV1L-FKB D 0 0 Y N 1 F N F0 "D" 0 370 50 H V C CNN F1 "CLV1L-FKB" 0 -350 50 H V C CNN F2 "LED_SMD:LED_Cree-PLCC4_3.2x2.8mm_CCW" 0 -50 50 H I C CNN F3 "" 0 -50 50 H I C CNN $FPLIST *Cree*PLCC4*3.2x2.8mm* $ENDFPLIST DRAW C 80 0 10 0 1 0 F T 0 -75 -250 50 0 0 0 B Normal 0 C C T 0 -75 -50 50 0 0 0 G Normal 0 C C T 0 -75 150 50 0 0 0 R Normal 0 C C S 50 250 50 250 0 1 0 N S 110 330 -110 -300 0 1 10 f P 2 0 1 0 -100 -200 50 -200 N P 2 0 1 10 -50 -150 -50 -250 N P 2 0 1 10 -50 50 -50 -50 N P 2 0 1 10 -50 250 -50 150 N P 2 0 1 0 50 200 -100 200 N P 2 0 1 0 100 0 -100 0 N P 4 0 1 0 50 -200 80 -200 80 200 50 200 N P 4 0 1 10 50 -150 50 -250 -50 -200 50 -150 N P 4 0 1 10 50 50 50 -50 -50 0 50 50 N P 4 0 1 10 50 250 50 150 -50 200 50 250 N P 5 0 1 0 -40 -150 20 -90 -10 -90 20 -90 20 -120 N P 5 0 1 0 -40 50 20 110 -10 110 20 110 20 80 N P 5 0 1 0 -40 250 20 310 -10 310 20 310 20 280 N P 5 0 1 0 0 -150 60 -90 30 -90 60 -90 60 -120 N P 5 0 1 0 0 50 60 110 30 110 60 110 60 80 N P 5 0 1 0 0 250 60 310 30 310 60 310 60 280 N X A 1 200 0 100 L 50 50 1 1 P X RK 2 -200 200 100 R 50 50 1 1 P X GK 3 -200 0 100 R 50 50 1 1 P X BK 4 -200 -200 100 R 50 50 1 1 P ENDDRAW ENDDEF # # HDSP-4830 # DEF HDSP-4830 BAR 0 40 Y N 10 F N F0 "BAR" 0 150 50 H V C CNN F1 "HDSP-4830" 0 -150 50 H V C CNN F2 "Display:HDSP-4830" 0 -300 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST HDSP?48* $ENDFPLIST DRAW P 2 0 1 0 -100 0 100 0 N P 2 0 1 10 50 -50 50 50 N P 4 0 1 10 -50 50 -50 -50 50 0 -50 50 N X A 1 -200 0 100 R 50 50 1 1 P X K 20 200 0 100 L 50 50 1 1 P X K 19 200 0 100 L 50 50 2 1 P X A 2 -200 0 100 R 50 50 2 1 P X K 18 200 0 100 L 50 50 3 1 P X A 3 -200 0 100 R 50 50 3 1 P X K 17 200 0 100 L 50 50 4 1 P X A 4 -200 0 100 R 50 50 4 1 P X K 16 200 0 100 L 50 50 5 1 P X A 5 -200 0 100 R 50 50 5 1 P X K 15 200 0 100 L 50 50 6 1 P X A 6 -200 0 100 R 50 50 6 1 P X K 14 200 0 100 L 50 50 7 1 P X A 7 -200 0 100 R 50 50 7 1 P X K 13 200 0 100 L 50 50 8 1 P X A 8 -200 0 100 R 50 50 8 1 P X K 12 200 0 100 L 50 50 9 1 P X A 9 -200 0 100 R 50 50 9 1 P X A 10 -200 0 100 R 50 50 10 1 P X K 11 200 0 100 L 50 50 10 1 P ENDDRAW ENDDEF # # HDSP-4830_2 # DEF HDSP-4830_2 BAR 0 40 Y N 1 F N F0 "BAR" 0 600 50 H V C CNN F1 "HDSP-4830_2" 0 -700 50 H V C CNN F2 "Display:HDSP-4830" 0 -800 50 H I C CNN F3 "" -2000 200 50 H I C CNN $FPLIST HDSP?48* $ENDFPLIST DRAW S -100 500 100 -600 0 1 10 f P 2 0 1 0 -100 -500 100 -500 N P 2 0 1 0 -100 -400 100 -400 N P 2 0 1 0 -100 -300 100 -300 N P 2 0 1 0 -100 -200 100 -200 N P 2 0 1 0 -100 0 100 0 N P 2 0 1 0 -100 200 100 200 N P 2 0 1 0 -100 300 100 300 N P 2 0 1 0 -100 400 100 400 N P 2 0 1 10 50 -460 50 -540 N P 2 0 1 10 50 -360 50 -440 N P 2 0 1 10 50 -260 50 -340 N P 2 0 1 10 50 -160 50 -240 N P 2 0 1 10 50 -60 50 -140 N P 2 0 1 10 50 40 50 -40 N P 2 0 1 10 50 140 50 60 N P 2 0 1 10 50 240 50 160 N P 2 0 1 10 50 340 50 260 N P 2 0 1 10 50 440 50 360 N P 2 0 1 0 100 -100 -100 -100 N P 2 0 1 0 100 100 -100 100 N P 4 0 1 10 -30 -460 -30 -540 50 -500 -30 -460 N P 4 0 1 10 -30 -360 -30 -440 50 -400 -30 -360 N P 4 0 1 10 -30 -260 -30 -340 50 -300 -30 -260 N P 4 0 1 10 -30 -160 -30 -240 50 -200 -30 -160 N P 4 0 1 10 -30 -60 -30 -140 50 -100 -30 -60 N P 4 0 1 10 -30 40 -30 -40 50 0 -30 40 N P 4 0 1 10 -30 140 -30 60 50 100 -30 140 N P 4 0 1 10 -30 240 -30 160 50 200 -30 240 N P 4 0 1 10 -30 340 -30 260 50 300 -30 340 N P 4 0 1 10 -30 440 -30 360 50 400 -30 440 N X A 1 -200 400 100 R 50 50 1 1 P X A 10 -200 -500 100 R 50 50 1 1 P X K 11 200 -500 100 L 50 50 1 1 P X K 12 200 -400 100 L 50 50 1 1 P X K 13 200 -300 100 L 50 50 1 1 P X K 14 200 -200 100 L 50 50 1 1 P X K 15 200 -100 100 L 50 50 1 1 P X K 16 200 0 100 L 50 50 1 1 P X K 17 200 100 100 L 50 50 1 1 P X K 18 200 200 100 L 50 50 1 1 P X K 19 200 300 100 L 50 50 1 1 P X A 2 -200 300 100 R 50 50 1 1 P X K 20 200 400 100 L 50 50 1 1 P X A 3 -200 200 100 R 50 50 1 1 P X A 4 -200 100 100 R 50 50 1 1 P X A 5 -200 0 100 R 50 50 1 1 P X A 6 -200 -100 100 R 50 50 1 1 P X A 7 -200 -200 100 R 50 50 1 1 P X A 8 -200 -300 100 R 50 50 1 1 P X A 9 -200 -400 100 R 50 50 1 1 P ENDDRAW ENDDEF # # HDSP-4832 # DEF HDSP-4832 BAR 0 40 Y N 10 F N F0 "BAR" 0 150 50 H V C CNN F1 "HDSP-4832" 0 -150 50 H V C CNN F2 "Display:HDSP-4832" 0 -300 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST HDSP?48* $ENDFPLIST DRAW P 2 0 1 0 -100 0 100 0 N P 2 0 1 10 50 -50 50 50 N P 4 0 1 10 -50 50 -50 -50 50 0 -50 50 N X A 1 -200 0 100 R 50 50 1 1 P X K 20 200 0 100 L 50 50 1 1 P X K 19 200 0 100 L 50 50 2 1 P X A 2 -200 0 100 R 50 50 2 1 P X K 18 200 0 100 L 50 50 3 1 P X A 3 -200 0 100 R 50 50 3 1 P X K 17 200 0 100 L 50 50 4 1 P X A 4 -200 0 100 R 50 50 4 1 P X K 16 200 0 100 L 50 50 5 1 P X A 5 -200 0 100 R 50 50 5 1 P X K 15 200 0 100 L 50 50 6 1 P X A 6 -200 0 100 R 50 50 6 1 P X K 14 200 0 100 L 50 50 7 1 P X A 7 -200 0 100 R 50 50 7 1 P X K 13 200 0 100 L 50 50 8 1 P X A 8 -200 0 100 R 50 50 8 1 P X K 12 200 0 100 L 50 50 9 1 P X A 9 -200 0 100 R 50 50 9 1 P X A 10 -200 0 100 R 50 50 10 1 P X K 11 200 0 100 L 50 50 10 1 P ENDDRAW ENDDEF # # HDSP-4832_2 # DEF HDSP-4832_2 BAR 0 40 Y N 1 F N F0 "BAR" 0 600 50 H V C CNN F1 "HDSP-4832_2" 0 -700 50 H V C CNN F2 "Display:HDSP-4832" 0 -800 50 H I C CNN F3 "" -2000 200 50 H I C CNN $FPLIST HDSP?48* $ENDFPLIST DRAW S -100 500 100 -600 0 1 10 f P 2 0 1 0 -100 -500 100 -500 N P 2 0 1 0 -100 -400 100 -400 N P 2 0 1 0 -100 -300 100 -300 N P 2 0 1 0 -100 -200 100 -200 N P 2 0 1 0 -100 0 100 0 N P 2 0 1 0 -100 200 100 200 N P 2 0 1 0 -100 300 100 300 N P 2 0 1 0 -100 400 100 400 N P 2 0 1 10 50 -460 50 -540 N P 2 0 1 10 50 -360 50 -440 N P 2 0 1 10 50 -260 50 -340 N P 2 0 1 10 50 -160 50 -240 N P 2 0 1 10 50 -60 50 -140 N P 2 0 1 10 50 40 50 -40 N P 2 0 1 10 50 140 50 60 N P 2 0 1 10 50 240 50 160 N P 2 0 1 10 50 340 50 260 N P 2 0 1 10 50 440 50 360 N P 2 0 1 0 100 -100 -100 -100 N P 2 0 1 0 100 100 -100 100 N P 4 0 1 10 -30 -460 -30 -540 50 -500 -30 -460 N P 4 0 1 10 -30 -360 -30 -440 50 -400 -30 -360 N P 4 0 1 10 -30 -260 -30 -340 50 -300 -30 -260 N P 4 0 1 10 -30 -160 -30 -240 50 -200 -30 -160 N P 4 0 1 10 -30 -60 -30 -140 50 -100 -30 -60 N P 4 0 1 10 -30 40 -30 -40 50 0 -30 40 N P 4 0 1 10 -30 140 -30 60 50 100 -30 140 N P 4 0 1 10 -30 240 -30 160 50 200 -30 240 N P 4 0 1 10 -30 340 -30 260 50 300 -30 340 N P 4 0 1 10 -30 440 -30 360 50 400 -30 440 N X A 1 -200 400 100 R 50 50 1 1 P X A 10 -200 -500 100 R 50 50 1 1 P X K 11 200 -500 100 L 50 50 1 1 P X K 12 200 -400 100 L 50 50 1 1 P X K 13 200 -300 100 L 50 50 1 1 P X K 14 200 -200 100 L 50 50 1 1 P X K 15 200 -100 100 L 50 50 1 1 P X K 16 200 0 100 L 50 50 1 1 P X K 17 200 100 100 L 50 50 1 1 P X K 18 200 200 100 L 50 50 1 1 P X K 19 200 300 100 L 50 50 1 1 P X A 2 -200 300 100 R 50 50 1 1 P X K 20 200 400 100 L 50 50 1 1 P X A 3 -200 200 100 R 50 50 1 1 P X A 4 -200 100 100 R 50 50 1 1 P X A 5 -200 0 100 R 50 50 1 1 P X A 6 -200 -100 100 R 50 50 1 1 P X A 7 -200 -200 100 R 50 50 1 1 P X A 8 -200 -300 100 R 50 50 1 1 P X A 9 -200 -400 100 R 50 50 1 1 P ENDDRAW ENDDEF # # HDSP-4836 # DEF HDSP-4836 BAR 0 40 Y N 10 F N F0 "BAR" 0 150 50 H V C CNN F1 "HDSP-4836" 0 -150 50 H V C CNN F2 "Display:HDSP-4836" 0 -300 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST HDSP?48* $ENDFPLIST DRAW P 2 0 1 0 -100 0 100 0 N P 2 0 1 10 50 -50 50 50 N P 4 0 1 10 -50 50 -50 -50 50 0 -50 50 N X A 1 -200 0 100 R 50 50 1 1 P X K 20 200 0 100 L 50 50 1 1 P X K 19 200 0 100 L 50 50 2 1 P X A 2 -200 0 100 R 50 50 2 1 P X K 18 200 0 100 L 50 50 3 1 P X A 3 -200 0 100 R 50 50 3 1 P X K 17 200 0 100 L 50 50 4 1 P X A 4 -200 0 100 R 50 50 4 1 P X K 16 200 0 100 L 50 50 5 1 P X A 5 -200 0 100 R 50 50 5 1 P X K 15 200 0 100 L 50 50 6 1 P X A 6 -200 0 100 R 50 50 6 1 P X K 14 200 0 100 L 50 50 7 1 P X A 7 -200 0 100 R 50 50 7 1 P X K 13 200 0 100 L 50 50 8 1 P X A 8 -200 0 100 R 50 50 8 1 P X K 12 200 0 100 L 50 50 9 1 P X A 9 -200 0 100 R 50 50 9 1 P X A 10 -200 0 100 R 50 50 10 1 P X K 11 200 0 100 L 50 50 10 1 P ENDDRAW ENDDEF # # HDSP-4836_2 # DEF HDSP-4836_2 BAR 0 40 Y N 1 F N F0 "BAR" 0 600 50 H V C CNN F1 "HDSP-4836_2" 0 -700 50 H V C CNN F2 "Display:HDSP-4836" 0 -800 50 H I C CNN F3 "" -2000 200 50 H I C CNN $FPLIST HDSP?48* $ENDFPLIST DRAW S -100 500 100 -600 0 1 10 f P 2 0 1 0 -100 -500 100 -500 N P 2 0 1 0 -100 -400 100 -400 N P 2 0 1 0 -100 -300 100 -300 N P 2 0 1 0 -100 -200 100 -200 N P 2 0 1 0 -100 0 100 0 N P 2 0 1 0 -100 200 100 200 N P 2 0 1 0 -100 300 100 300 N P 2 0 1 0 -100 400 100 400 N P 2 0 1 10 50 -460 50 -540 N P 2 0 1 10 50 -360 50 -440 N P 2 0 1 10 50 -260 50 -340 N P 2 0 1 10 50 -160 50 -240 N P 2 0 1 10 50 -60 50 -140 N P 2 0 1 10 50 40 50 -40 N P 2 0 1 10 50 140 50 60 N P 2 0 1 10 50 240 50 160 N P 2 0 1 10 50 340 50 260 N P 2 0 1 10 50 440 50 360 N P 2 0 1 0 100 -100 -100 -100 N P 2 0 1 0 100 100 -100 100 N P 4 0 1 10 -30 -460 -30 -540 50 -500 -30 -460 N P 4 0 1 10 -30 -360 -30 -440 50 -400 -30 -360 N P 4 0 1 10 -30 -260 -30 -340 50 -300 -30 -260 N P 4 0 1 10 -30 -160 -30 -240 50 -200 -30 -160 N P 4 0 1 10 -30 -60 -30 -140 50 -100 -30 -60 N P 4 0 1 10 -30 40 -30 -40 50 0 -30 40 N P 4 0 1 10 -30 140 -30 60 50 100 -30 140 N P 4 0 1 10 -30 240 -30 160 50 200 -30 240 N P 4 0 1 10 -30 340 -30 260 50 300 -30 340 N P 4 0 1 10 -30 440 -30 360 50 400 -30 440 N X A 1 -200 400 100 R 50 50 1 1 P X A 10 -200 -500 100 R 50 50 1 1 P X K 11 200 -500 100 L 50 50 1 1 P X K 12 200 -400 100 L 50 50 1 1 P X K 13 200 -300 100 L 50 50 1 1 P X K 14 200 -200 100 L 50 50 1 1 P X K 15 200 -100 100 L 50 50 1 1 P X K 16 200 0 100 L 50 50 1 1 P X K 17 200 100 100 L 50 50 1 1 P X K 18 200 200 100 L 50 50 1 1 P X K 19 200 300 100 L 50 50 1 1 P X A 2 -200 300 100 R 50 50 1 1 P X K 20 200 400 100 L 50 50 1 1 P X A 3 -200 200 100 R 50 50 1 1 P X A 4 -200 100 100 R 50 50 1 1 P X A 5 -200 0 100 R 50 50 1 1 P X A 6 -200 -100 100 R 50 50 1 1 P X A 7 -200 -200 100 R 50 50 1 1 P X A 8 -200 -300 100 R 50 50 1 1 P X A 9 -200 -400 100 R 50 50 1 1 P ENDDRAW ENDDEF # # HDSP-4840 # DEF HDSP-4840 BAR 0 40 Y N 10 F N F0 "BAR" 0 150 50 H V C CNN F1 "HDSP-4840" 0 -150 50 H V C CNN F2 "Display:HDSP-4840" 0 -300 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST HDSP?48* $ENDFPLIST DRAW P 2 0 1 0 -100 0 100 0 N P 2 0 1 10 50 -50 50 50 N P 4 0 1 10 -50 50 -50 -50 50 0 -50 50 N X A 1 -200 0 100 R 50 50 1 1 P X K 20 200 0 100 L 50 50 1 1 P X K 19 200 0 100 L 50 50 2 1 P X A 2 -200 0 100 R 50 50 2 1 P X K 18 200 0 100 L 50 50 3 1 P X A 3 -200 0 100 R 50 50 3 1 P X K 17 200 0 100 L 50 50 4 1 P X A 4 -200 0 100 R 50 50 4 1 P X K 16 200 0 100 L 50 50 5 1 P X A 5 -200 0 100 R 50 50 5 1 P X K 15 200 0 100 L 50 50 6 1 P X A 6 -200 0 100 R 50 50 6 1 P X K 14 200 0 100 L 50 50 7 1 P X A 7 -200 0 100 R 50 50 7 1 P X K 13 200 0 100 L 50 50 8 1 P X A 8 -200 0 100 R 50 50 8 1 P X K 12 200 0 100 L 50 50 9 1 P X A 9 -200 0 100 R 50 50 9 1 P X A 10 -200 0 100 R 50 50 10 1 P X K 11 200 0 100 L 50 50 10 1 P ENDDRAW ENDDEF # # HDSP-4840_2 # DEF HDSP-4840_2 BAR 0 40 Y N 1 F N F0 "BAR" 0 600 50 H V C CNN F1 "HDSP-4840_2" 0 -700 50 H V C CNN F2 "Display:HDSP-4840" 0 -800 50 H I C CNN F3 "" -2000 200 50 H I C CNN $FPLIST HDSP?48* $ENDFPLIST DRAW S -100 500 100 -600 0 1 10 f P 2 0 1 0 -100 -500 100 -500 N P 2 0 1 0 -100 -400 100 -400 N P 2 0 1 0 -100 -300 100 -300 N P 2 0 1 0 -100 -200 100 -200 N P 2 0 1 0 -100 0 100 0 N P 2 0 1 0 -100 200 100 200 N P 2 0 1 0 -100 300 100 300 N P 2 0 1 0 -100 400 100 400 N P 2 0 1 10 50 -460 50 -540 N P 2 0 1 10 50 -360 50 -440 N P 2 0 1 10 50 -260 50 -340 N P 2 0 1 10 50 -160 50 -240 N P 2 0 1 10 50 -60 50 -140 N P 2 0 1 10 50 40 50 -40 N P 2 0 1 10 50 140 50 60 N P 2 0 1 10 50 240 50 160 N P 2 0 1 10 50 340 50 260 N P 2 0 1 10 50 440 50 360 N P 2 0 1 0 100 -100 -100 -100 N P 2 0 1 0 100 100 -100 100 N P 4 0 1 10 -30 -460 -30 -540 50 -500 -30 -460 N P 4 0 1 10 -30 -360 -30 -440 50 -400 -30 -360 N P 4 0 1 10 -30 -260 -30 -340 50 -300 -30 -260 N P 4 0 1 10 -30 -160 -30 -240 50 -200 -30 -160 N P 4 0 1 10 -30 -60 -30 -140 50 -100 -30 -60 N P 4 0 1 10 -30 40 -30 -40 50 0 -30 40 N P 4 0 1 10 -30 140 -30 60 50 100 -30 140 N P 4 0 1 10 -30 240 -30 160 50 200 -30 240 N P 4 0 1 10 -30 340 -30 260 50 300 -30 340 N P 4 0 1 10 -30 440 -30 360 50 400 -30 440 N X A 1 -200 400 100 R 50 50 1 1 P X A 10 -200 -500 100 R 50 50 1 1 P X K 11 200 -500 100 L 50 50 1 1 P X K 12 200 -400 100 L 50 50 1 1 P X K 13 200 -300 100 L 50 50 1 1 P X K 14 200 -200 100 L 50 50 1 1 P X K 15 200 -100 100 L 50 50 1 1 P X K 16 200 0 100 L 50 50 1 1 P X K 17 200 100 100 L 50 50 1 1 P X K 18 200 200 100 L 50 50 1 1 P X K 19 200 300 100 L 50 50 1 1 P X A 2 -200 300 100 R 50 50 1 1 P X K 20 200 400 100 L 50 50 1 1 P X A 3 -200 200 100 R 50 50 1 1 P X A 4 -200 100 100 R 50 50 1 1 P X A 5 -200 0 100 R 50 50 1 1 P X A 6 -200 -100 100 R 50 50 1 1 P X A 7 -200 -200 100 R 50 50 1 1 P X A 8 -200 -300 100 R 50 50 1 1 P X A 9 -200 -400 100 R 50 50 1 1 P ENDDRAW ENDDEF # # HDSP-4850 # DEF HDSP-4850 BAR 0 40 Y N 10 F N F0 "BAR" 0 150 50 H V C CNN F1 "HDSP-4850" 0 -150 50 H V C CNN F2 "Display:HDSP-4850" 0 -300 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST HDSP?48* $ENDFPLIST DRAW P 2 0 1 0 -100 0 100 0 N P 2 0 1 10 50 -50 50 50 N P 4 0 1 10 -50 50 -50 -50 50 0 -50 50 N X A 1 -200 0 100 R 50 50 1 1 P X K 20 200 0 100 L 50 50 1 1 P X K 19 200 0 100 L 50 50 2 1 P X A 2 -200 0 100 R 50 50 2 1 P X K 18 200 0 100 L 50 50 3 1 P X A 3 -200 0 100 R 50 50 3 1 P X K 17 200 0 100 L 50 50 4 1 P X A 4 -200 0 100 R 50 50 4 1 P X K 16 200 0 100 L 50 50 5 1 P X A 5 -200 0 100 R 50 50 5 1 P X K 15 200 0 100 L 50 50 6 1 P X A 6 -200 0 100 R 50 50 6 1 P X K 14 200 0 100 L 50 50 7 1 P X A 7 -200 0 100 R 50 50 7 1 P X K 13 200 0 100 L 50 50 8 1 P X A 8 -200 0 100 R 50 50 8 1 P X K 12 200 0 100 L 50 50 9 1 P X A 9 -200 0 100 R 50 50 9 1 P X A 10 -200 0 100 R 50 50 10 1 P X K 11 200 0 100 L 50 50 10 1 P ENDDRAW ENDDEF # # HDSP-4850_2 # DEF HDSP-4850_2 BAR 0 40 Y N 1 F N F0 "BAR" 0 600 50 H V C CNN F1 "HDSP-4850_2" 0 -700 50 H V C CNN F2 "Display:HDSP-4850" 0 -800 50 H I C CNN F3 "" -2000 200 50 H I C CNN $FPLIST HDSP?48* $ENDFPLIST DRAW S -100 500 100 -600 0 1 10 f P 2 0 1 0 -100 -500 100 -500 N P 2 0 1 0 -100 -400 100 -400 N P 2 0 1 0 -100 -300 100 -300 N P 2 0 1 0 -100 -200 100 -200 N P 2 0 1 0 -100 0 100 0 N P 2 0 1 0 -100 200 100 200 N P 2 0 1 0 -100 300 100 300 N P 2 0 1 0 -100 400 100 400 N P 2 0 1 10 50 -460 50 -540 N P 2 0 1 10 50 -360 50 -440 N P 2 0 1 10 50 -260 50 -340 N P 2 0 1 10 50 -160 50 -240 N P 2 0 1 10 50 -60 50 -140 N P 2 0 1 10 50 40 50 -40 N P 2 0 1 10 50 140 50 60 N P 2 0 1 10 50 240 50 160 N P 2 0 1 10 50 340 50 260 N P 2 0 1 10 50 440 50 360 N P 2 0 1 0 100 -100 -100 -100 N P 2 0 1 0 100 100 -100 100 N P 4 0 1 10 -30 -460 -30 -540 50 -500 -30 -460 N P 4 0 1 10 -30 -360 -30 -440 50 -400 -30 -360 N P 4 0 1 10 -30 -260 -30 -340 50 -300 -30 -260 N P 4 0 1 10 -30 -160 -30 -240 50 -200 -30 -160 N P 4 0 1 10 -30 -60 -30 -140 50 -100 -30 -60 N P 4 0 1 10 -30 40 -30 -40 50 0 -30 40 N P 4 0 1 10 -30 140 -30 60 50 100 -30 140 N P 4 0 1 10 -30 240 -30 160 50 200 -30 240 N P 4 0 1 10 -30 340 -30 260 50 300 -30 340 N P 4 0 1 10 -30 440 -30 360 50 400 -30 440 N X A 1 -200 400 100 R 50 50 1 1 P X A 10 -200 -500 100 R 50 50 1 1 P X K 11 200 -500 100 L 50 50 1 1 P X K 12 200 -400 100 L 50 50 1 1 P X K 13 200 -300 100 L 50 50 1 1 P X K 14 200 -200 100 L 50 50 1 1 P X K 15 200 -100 100 L 50 50 1 1 P X K 16 200 0 100 L 50 50 1 1 P X K 17 200 100 100 L 50 50 1 1 P X K 18 200 200 100 L 50 50 1 1 P X K 19 200 300 100 L 50 50 1 1 P X A 2 -200 300 100 R 50 50 1 1 P X K 20 200 400 100 L 50 50 1 1 P X A 3 -200 200 100 R 50 50 1 1 P X A 4 -200 100 100 R 50 50 1 1 P X A 5 -200 0 100 R 50 50 1 1 P X A 6 -200 -100 100 R 50 50 1 1 P X A 7 -200 -200 100 R 50 50 1 1 P X A 8 -200 -300 100 R 50 50 1 1 P X A 9 -200 -400 100 R 50 50 1 1 P ENDDRAW ENDDEF # # HLCP-J100 # DEF HLCP-J100 BAR 0 40 Y N 10 F N F0 "BAR" 0 150 50 H V C CNN F1 "HLCP-J100" 0 -150 50 H V C CNN F2 "Display:HLCP-J100" 0 -300 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST HLCP*J100* $ENDFPLIST DRAW P 2 0 1 0 -100 0 100 0 N P 2 0 1 10 50 -50 50 50 N P 4 0 1 10 -50 50 -50 -50 50 0 -50 50 N X A 1 -200 0 100 R 50 50 1 1 P X K 20 200 0 100 L 50 50 1 1 P X K 19 200 0 100 L 50 50 2 1 P X A 2 -200 0 100 R 50 50 2 1 P X K 18 200 0 100 L 50 50 3 1 P X A 3 -200 0 100 R 50 50 3 1 P X K 17 200 0 100 L 50 50 4 1 P X A 4 -200 0 100 R 50 50 4 1 P X K 16 200 0 100 L 50 50 5 1 P X A 5 -200 0 100 R 50 50 5 1 P X K 15 200 0 100 L 50 50 6 1 P X A 6 -200 0 100 R 50 50 6 1 P X K 14 200 0 100 L 50 50 7 1 P X A 7 -200 0 100 R 50 50 7 1 P X K 13 200 0 100 L 50 50 8 1 P X A 8 -200 0 100 R 50 50 8 1 P X K 12 200 0 100 L 50 50 9 1 P X A 9 -200 0 100 R 50 50 9 1 P X A 10 -200 0 100 R 50 50 10 1 P X K 11 200 0 100 L 50 50 10 1 P ENDDRAW ENDDEF # # HLCP-J100_2 # DEF HLCP-J100_2 BAR 0 40 Y N 1 F N F0 "BAR" 0 600 50 H V C CNN F1 "HLCP-J100_2" 0 -700 50 H V C CNN F2 "Display:HLCP-J100" 0 -800 50 H I C CNN F3 "" -2000 200 50 H I C CNN $FPLIST HLCP?J100* $ENDFPLIST DRAW S -100 500 100 -600 0 1 10 f P 2 0 1 0 -100 -500 100 -500 N P 2 0 1 0 -100 -400 100 -400 N P 2 0 1 0 -100 -300 100 -300 N P 2 0 1 0 -100 -200 100 -200 N P 2 0 1 0 -100 0 100 0 N P 2 0 1 0 -100 200 100 200 N P 2 0 1 0 -100 300 100 300 N P 2 0 1 0 -100 400 100 400 N P 2 0 1 10 50 -460 50 -540 N P 2 0 1 10 50 -360 50 -440 N P 2 0 1 10 50 -260 50 -340 N P 2 0 1 10 50 -160 50 -240 N P 2 0 1 10 50 -60 50 -140 N P 2 0 1 10 50 40 50 -40 N P 2 0 1 10 50 140 50 60 N P 2 0 1 10 50 240 50 160 N P 2 0 1 10 50 340 50 260 N P 2 0 1 10 50 440 50 360 N P 2 0 1 0 100 -100 -100 -100 N P 2 0 1 0 100 100 -100 100 N P 4 0 1 10 -30 -460 -30 -540 50 -500 -30 -460 N P 4 0 1 10 -30 -360 -30 -440 50 -400 -30 -360 N P 4 0 1 10 -30 -260 -30 -340 50 -300 -30 -260 N P 4 0 1 10 -30 -160 -30 -240 50 -200 -30 -160 N P 4 0 1 10 -30 -60 -30 -140 50 -100 -30 -60 N P 4 0 1 10 -30 40 -30 -40 50 0 -30 40 N P 4 0 1 10 -30 140 -30 60 50 100 -30 140 N P 4 0 1 10 -30 240 -30 160 50 200 -30 240 N P 4 0 1 10 -30 340 -30 260 50 300 -30 340 N P 4 0 1 10 -30 440 -30 360 50 400 -30 440 N X A 1 -200 400 100 R 50 50 1 1 P X A 10 -200 -500 100 R 50 50 1 1 P X K 11 200 -500 100 L 50 50 1 1 P X K 12 200 -400 100 L 50 50 1 1 P X K 13 200 -300 100 L 50 50 1 1 P X K 14 200 -200 100 L 50 50 1 1 P X K 15 200 -100 100 L 50 50 1 1 P X K 16 200 0 100 L 50 50 1 1 P X K 17 200 100 100 L 50 50 1 1 P X K 18 200 200 100 L 50 50 1 1 P X K 19 200 300 100 L 50 50 1 1 P X A 2 -200 300 100 R 50 50 1 1 P X K 20 200 400 100 L 50 50 1 1 P X A 3 -200 200 100 R 50 50 1 1 P X A 4 -200 100 100 R 50 50 1 1 P X A 5 -200 0 100 R 50 50 1 1 P X A 6 -200 -100 100 R 50 50 1 1 P X A 7 -200 -200 100 R 50 50 1 1 P X A 8 -200 -300 100 R 50 50 1 1 P X A 9 -200 -400 100 R 50 50 1 1 P ENDDRAW ENDDEF # # IR26-21C_L110_TR8 # DEF IR26-21C_L110_TR8 D 0 40 N N 1 F N F0 "D" 0 100 50 H V C CNN F1 "IR26-21C_L110_TR8" 0 -150 50 H V C CNN F2 "LED_SMD:LED_1206_3216Metric" 0 200 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST LED*1206*3216Metric* $ENDFPLIST DRAW P 2 0 1 10 -50 -50 -50 50 N P 2 0 1 0 -50 0 50 0 N P 4 0 1 10 50 -50 50 50 -50 0 50 -50 N P 5 0 1 0 -120 -30 -180 -90 -150 -90 -180 -90 -180 -60 N P 5 0 1 0 -70 -30 -130 -90 -100 -90 -130 -90 -130 -60 N X K 1 -150 0 100 R 50 50 1 1 P X A 2 150 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # IRL81A # DEF IRL81A D 0 40 N N 1 F N F0 "D" 20 70 50 H V L CNN F1 "IRL81A" -40 -110 50 H V C CNN F2 "LED_THT:LED_SideEmitter_Rectangular_W4.5mm_H1.6mm" 0 175 50 H I C CNN F3 "" -50 0 50 H I C CNN $FPLIST LED*SideEmitter*Rectangular*W4.5mm*H1.6mm* $ENDFPLIST DRAW P 2 0 1 0 -100 0 0 0 N P 2 0 1 10 -100 50 -100 -50 N P 2 0 1 0 15 125 -5 125 N P 3 0 1 0 -45 65 15 125 15 105 N P 4 0 1 10 0 -50 0 50 -100 0 0 -50 N P 5 0 1 0 -95 65 -35 125 -35 105 -35 125 -55 125 N X K 1 -200 0 100 R 50 50 1 1 P X A 2 100 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # Inolux_IN-PI554FCH # DEF Inolux_IN-PI554FCH D 0 10 Y Y 1 F N F0 "D" 200 225 50 H V R BNN F1 "Inolux_IN-PI554FCH" 50 -225 50 H V L TNN F2 "LED_SMD:LED_Inolux_IN-PI554FCH_PLCC4_5.0x5.0mm_P3.2mm" 50 -300 50 H I L TNN F3 "" 100 -375 50 H I L TNN $FPLIST LED*IN-PI554FCH*PLCC*5.0x5.0mm*P3.2mm* $ENDFPLIST DRAW T 0 90 -165 30 0 0 0 RGB Normal 0 C C S 200 200 -200 -200 0 1 10 f P 2 0 1 0 50 -140 70 -140 N P 2 0 1 0 50 -100 70 -100 N P 2 0 1 0 185 -140 105 -140 N P 3 0 1 0 90 -100 50 -140 50 -120 N P 3 0 1 0 90 -60 50 -100 50 -80 N P 3 0 1 0 145 -40 145 -140 145 -160 N P 4 0 1 0 185 -60 105 -60 145 -140 185 -60 N X VSS 1 0 -300 100 U 50 50 1 1 W X DIN 2 -300 0 100 R 50 50 1 1 I X VDD 3 0 300 100 D 50 50 1 1 W X DO 4 300 0 100 L 50 50 1 1 O ENDDRAW ENDDEF # # Inolux_IN-PI556FCH # DEF Inolux_IN-PI556FCH D 0 10 Y Y 1 F N F0 "D" 200 225 50 H V R BNN F1 "Inolux_IN-PI556FCH" 50 -225 50 H V L TNN F2 "LED_SMD:LED_WS2812_PLCC6_5.0x5.0mm_P1.6mm" 50 -300 50 H I L TNN F3 "" 100 -375 50 H I L TNN $FPLIST LED*WS2812*PLCC*5.0x5.0mm*P1.6mm* $ENDFPLIST DRAW T 0 90 -165 30 0 0 0 RGB Normal 0 C C S 200 200 -200 -200 0 1 10 f P 2 0 1 0 50 -140 70 -140 N P 2 0 1 0 50 -100 70 -100 N P 2 0 1 0 185 -140 105 -140 N P 3 0 1 0 90 -100 50 -140 50 -120 N P 3 0 1 0 90 -60 50 -100 50 -80 N P 3 0 1 0 145 -40 145 -140 145 -160 N P 4 0 1 0 185 -60 105 -60 145 -140 185 -60 N X DO 1 300 0 100 L 50 50 1 1 O X DIN 2 -300 0 100 R 50 50 1 1 I X VDD 3 -100 300 100 D 50 50 1 1 W X NC 4 200 100 100 L 50 50 1 1 N N X VCC 5 0 300 100 D 50 50 1 1 W X VSS 6 0 -300 100 U 50 50 1 1 W ENDDRAW ENDDEF # # LD271 # DEF LD271 D 0 40 N N 1 F N F0 "D" 20 70 50 H V L CNN F1 "LD271" -40 -110 50 H V C CNN F2 "LED_THT:LED_D5.0mm_IRGrey" 0 175 50 H I C CNN F3 "" -50 0 50 H I C CNN ALIAS SFH4546 CQY99 LD274 SFH4550 $FPLIST LED*5.0mm*IRGrey* $ENDFPLIST DRAW P 2 0 1 10 -100 50 -100 -50 N P 2 0 1 0 0 0 -100 0 N P 2 0 1 0 15 125 -5 125 N P 3 0 1 0 -45 65 15 125 15 105 N P 4 0 1 10 0 -50 -100 0 0 50 0 -50 N P 5 0 1 0 -95 65 -35 125 -35 105 -35 125 -55 125 N X K 1 -200 0 100 R 50 50 1 1 P X A 2 100 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # LED_Cree_XHP50_12V # DEF LED_Cree_XHP50_12V D 0 40 Y N 1 F N F0 "D" 0 250 50 H V C CNN F1 "LED_Cree_XHP50_12V" 0 175 50 H V C CNN F2 "LED_SMD:LED_Cree-XHP50_12V" 0 325 50 H I C CNN F3 "" -200 0 50 H I C CNN $FPLIST LED?Cree?XHP50?12V* $ENDFPLIST DRAW C -270 0 10 0 1 10 F C 0 -120 10 0 1 10 F C 0 0 10 0 1 10 F C 270 0 10 0 1 10 F P 2 0 1 0 -250 0 250 0 N P 2 0 1 10 -245 -50 -245 50 N P 2 0 1 10 -125 -50 -125 50 N P 2 0 1 0 0 -150 0 -180 N P 2 0 1 0 0 0 0 -180 N P 2 0 1 10 30 -50 30 50 N P 2 0 1 10 145 -50 145 50 N P 4 0 1 0 -270 0 -270 -120 270 -120 270 0 N P 4 0 1 10 -145 -50 -145 50 -245 0 -145 -50 N P 4 0 1 10 -90 -160 -100 -150 -100 -90 -110 -80 N P 4 0 1 10 -25 -50 -25 50 -125 0 -25 -50 N P 4 0 1 10 130 -50 130 50 30 0 130 -50 N P 4 0 1 10 170 -160 160 -150 160 -90 150 -80 N P 4 0 1 10 245 -50 245 50 145 0 245 -50 N P 5 0 1 0 -230 55 -170 115 -200 115 -170 115 -170 85 N P 5 0 1 0 -180 55 -120 115 -150 115 -120 115 -120 85 N P 5 0 1 10 -160 -150 -160 -90 -100 -120 -160 -150 -160 -140 N P 5 0 1 0 -110 55 -50 115 -80 115 -50 115 -50 85 N P 5 0 1 0 -60 55 0 115 -30 115 0 115 0 85 N P 5 0 1 0 45 55 105 115 75 115 105 115 105 85 N P 5 0 1 0 95 55 155 115 125 115 155 115 155 85 N P 5 0 1 10 100 -150 100 -90 160 -120 100 -150 100 -140 N P 5 0 1 0 160 55 220 115 190 115 220 115 220 85 N P 5 0 1 0 210 55 270 115 240 115 270 115 270 85 N X K 1 -350 0 100 R 50 50 1 1 P X A 2 350 0 100 L 50 50 1 1 P X PAD 3 0 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # LED_Cree_XHP50_6V # DEF LED_Cree_XHP50_6V D 0 40 Y N 1 F N F0 "D" 0 450 50 H V C CNN F1 "LED_Cree_XHP50_6V" 0 375 50 H V C CNN F2 "LED_SMD:LED_Cree-XHP50_6V" 0 525 50 H I C CNN F3 "" -75 -100 50 H I C CNN $FPLIST LED?Cree?XHP50?6V* $ENDFPLIST DRAW C -150 -100 14 0 1 0 F C -150 0 14 0 1 0 F C -150 100 14 0 1 0 F C 150 -100 14 0 1 0 F C 150 0 14 0 1 0 F C 150 100 14 0 1 0 F P 2 0 1 0 -150 -100 150 -100 N P 2 0 1 10 -120 -150 -120 -50 N P 2 0 1 10 -120 50 -120 150 N P 2 0 1 10 -5 50 -5 150 N P 2 0 1 10 0 -150 0 -50 N P 2 0 1 0 150 100 -150 100 N P 4 0 1 0 -190 -200 -190 -300 190 -300 190 -200 N P 4 0 1 10 -20 -150 -20 -50 -120 -100 -20 -150 N P 4 0 1 10 -20 50 -20 150 -120 100 -20 50 N P 4 0 1 10 20 240 10 250 10 310 0 320 N P 4 0 1 10 35 -260 25 -250 25 -190 15 -180 N P 4 0 1 10 95 50 95 150 -5 100 95 50 N P 4 0 1 10 100 -150 100 -50 0 -100 100 -150 N P 5 0 1 0 -150 -220 -150 280 150 280 150 -220 -150 -220 N P 5 0 1 0 -105 -45 -45 15 -75 15 -45 15 -45 -15 N P 5 0 1 0 -105 155 -45 215 -75 215 -45 215 -45 185 N P 5 0 1 0 -55 -45 5 15 -25 15 5 15 5 -15 N P 5 0 1 0 -55 155 5 215 -25 215 5 215 5 185 N P 5 0 1 10 -50 250 -50 310 10 280 -50 250 -50 260 N P 5 0 1 10 -35 -250 -35 -190 25 -220 -35 -250 -35 -240 N P 5 0 1 0 10 155 70 215 40 215 70 215 70 185 N P 5 0 1 0 15 -45 75 15 45 15 75 15 75 -15 N P 5 0 1 0 60 155 120 215 90 215 120 215 120 185 N P 5 0 1 0 65 -45 125 15 95 15 125 15 125 -15 N X K 1 -250 0 100 R 50 50 1 1 P X A 2 250 0 100 L 50 50 1 1 P X PAD 3 0 -400 100 U 50 50 1 1 P ENDDRAW ENDDEF # # LED_Cree_XHP70_12V # DEF LED_Cree_XHP70_12V D 0 40 Y N 1 F N F0 "D" 0 250 50 H V C CNN F1 "LED_Cree_XHP70_12V" 0 175 50 H V C CNN F2 "LED_SMD:LED_Cree-XHP70_12V" 0 325 50 H I C CNN F3 "" -200 0 50 H I C CNN $FPLIST LED?Cree?XHP70?12V* $ENDFPLIST DRAW C -270 0 10 0 1 10 F C 0 -120 14 0 1 0 F C 0 0 14 0 1 0 F C 270 0 10 0 1 10 F P 2 0 1 0 -250 0 250 0 N P 2 0 1 10 -245 -50 -245 50 N P 2 0 1 10 -125 -50 -125 50 N P 2 0 1 0 0 -150 0 -180 N P 2 0 1 0 0 0 0 -180 N P 2 0 1 10 30 -50 30 50 N P 2 0 1 10 145 -50 145 50 N P 4 0 1 0 -270 0 -270 -120 270 -120 270 0 N P 4 0 1 10 -145 -50 -145 50 -245 0 -145 -50 N P 4 0 1 10 -90 -160 -100 -150 -100 -90 -110 -80 N P 4 0 1 10 -25 -50 -25 50 -125 0 -25 -50 N P 4 0 1 10 130 -50 130 50 30 0 130 -50 N P 4 0 1 10 170 -160 160 -150 160 -90 150 -80 N P 4 0 1 10 245 -50 245 50 145 0 245 -50 N P 5 0 1 0 -230 55 -170 115 -200 115 -170 115 -170 85 N P 5 0 1 0 -180 55 -120 115 -150 115 -120 115 -120 85 N P 5 0 1 10 -160 -150 -160 -90 -100 -120 -160 -150 -160 -140 N P 5 0 1 0 -110 55 -50 115 -80 115 -50 115 -50 85 N P 5 0 1 0 -60 55 0 115 -30 115 0 115 0 85 N P 5 0 1 0 45 55 105 115 75 115 105 115 105 85 N P 5 0 1 0 95 55 155 115 125 115 155 115 155 85 N P 5 0 1 10 100 -150 100 -90 160 -120 100 -150 100 -140 N P 5 0 1 0 160 55 220 115 190 115 220 115 220 85 N P 5 0 1 0 210 55 270 115 240 115 270 115 270 85 N X K 1 -350 0 100 R 50 50 1 1 P X A 2 350 0 100 L 50 50 1 1 P X PAD 3 0 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # LED_Cree_XHP70_6V # DEF LED_Cree_XHP70_6V D 0 40 Y N 1 F N F0 "D" 0 450 50 H V C CNN F1 "LED_Cree_XHP70_6V" 0 375 50 H V C CNN F2 "LED_SMD:LED_Cree-XHP70_6V" 0 525 50 H I C CNN F3 "" -75 -100 50 H I C CNN $FPLIST LED?Cree?XHP70?6V* $ENDFPLIST DRAW C -150 -100 14 0 1 0 F C -150 0 14 0 1 0 F C -150 100 14 0 1 0 F C 150 -100 14 0 1 0 F C 150 0 14 0 1 0 F C 150 100 14 0 1 0 F P 2 0 1 0 -150 -100 150 -100 N P 2 0 1 10 -120 -150 -120 -50 N P 2 0 1 10 -120 50 -120 150 N P 2 0 1 10 -5 50 -5 150 N P 2 0 1 10 0 -150 0 -50 N P 2 0 1 0 150 100 -150 100 N P 4 0 1 0 -190 -200 -190 -300 190 -300 190 -200 N P 4 0 1 10 -20 -150 -20 -50 -120 -100 -20 -150 N P 4 0 1 10 -20 50 -20 150 -120 100 -20 50 N P 4 0 1 10 20 240 10 250 10 310 0 320 N P 4 0 1 8 35 -260 25 -250 25 -190 15 -180 N P 4 0 1 10 95 50 95 150 -5 100 95 50 N P 4 0 1 10 100 -150 100 -50 0 -100 100 -150 N P 5 0 1 0 -150 -220 -150 280 150 280 150 -220 -150 -220 N P 5 0 1 0 -105 -45 -45 15 -75 15 -45 15 -45 -15 N P 5 0 1 0 -105 155 -45 215 -75 215 -45 215 -45 185 N P 5 0 1 0 -55 -45 5 15 -25 15 5 15 5 -15 N P 5 0 1 0 -55 155 5 215 -25 215 5 215 5 185 N P 5 0 1 10 -50 250 -50 310 10 280 -50 250 -50 260 N P 5 0 1 8 -35 -250 -35 -190 25 -220 -35 -250 -35 -240 N P 5 0 1 0 10 155 70 215 40 215 70 215 70 185 N P 5 0 1 0 15 -45 75 15 45 15 75 15 75 -15 N P 5 0 1 0 60 155 120 215 90 215 120 215 120 185 N P 5 0 1 0 65 -45 125 15 95 15 125 15 125 -15 N X K 1 -250 0 100 R 50 50 1 1 P X A 2 250 0 100 L 50 50 1 1 P X PAD 3 0 -400 100 U 50 50 1 1 P ENDDRAW ENDDEF # # NeoPixel_THT # DEF NeoPixel_THT D 0 10 Y Y 1 F N F0 "D" 200 225 50 H V R BNN F1 "NeoPixel_THT" 50 -225 50 H V L TNN F2 "" 50 -300 50 H I L TNN F3 "" 100 -375 50 H I L TNN $FPLIST LED*D5.0mm* LED*D8.0mm* $ENDFPLIST DRAW T 0 90 -165 30 0 0 0 RGB Normal 0 C C S 200 200 -200 -200 0 1 10 f P 2 0 1 0 50 -140 70 -140 N P 2 0 1 0 50 -100 70 -100 N P 2 0 1 0 185 -140 105 -140 N P 3 0 1 0 90 -100 50 -140 50 -120 N P 3 0 1 0 90 -60 50 -100 50 -80 N P 3 0 1 0 145 -40 145 -140 145 -160 N P 4 0 1 0 185 -60 105 -60 145 -140 185 -60 N X DOUT 1 300 0 100 L 50 50 1 1 O X GND 2 0 -300 100 U 50 50 1 1 W X VDD 3 0 300 100 D 50 50 1 1 W X DIN 4 -300 0 100 R 50 50 1 1 I ENDDRAW ENDDEF # # QLS6A-FKW # DEF QLS6A-FKW D 0 20 Y N 1 F N F0 "D" -200 350 50 H V L CNN F1 "QLS6A-FKW" 0 350 50 H V L CNN F2 "LED_SMD:LED_Cree-PLCC6_4.7x1.5mm" -200 -350 50 H I L CNN F3 "" -200 -550 50 H I L CNN $FPLIST LED*Cree*PLCC*4.7x1.5mm* $ENDFPLIST DRAW C -175 -200 10 1 1 10 F C -175 0 10 1 1 10 F C 150 -200 10 1 1 10 F C 150 0 10 1 1 10 F T 0 -20 -236 30 0 0 0 B Normal 0 C C T 0 -21 -33 30 0 0 0 G Normal 0 C C T 0 -25 171 30 0 0 0 R Normal 0 C C S -200 300 200 -300 0 1 10 f P 2 0 1 0 -200 -200 200 -200 N P 2 0 1 0 -200 0 200 0 N P 2 0 1 10 -50 -150 -50 -250 N P 2 0 1 10 -50 50 -50 -50 N P 2 0 1 10 -50 250 -50 150 N P 2 0 1 0 25 -75 15 -75 N P 2 0 1 0 25 -75 25 -125 N P 2 0 1 0 25 75 35 75 N P 2 0 1 0 25 125 15 125 N P 2 0 1 0 25 125 25 75 N P 2 0 1 0 35 -125 25 -125 N P 2 0 1 0 100 -125 110 -125 N P 2 0 1 0 100 -75 90 -75 N P 2 0 1 0 100 -75 100 -125 N P 2 0 1 0 100 75 100 125 N P 2 0 1 0 100 75 110 75 N P 2 0 1 0 100 125 90 125 N P 4 0 1 0 -175 0 -175 100 150 100 150 0 N P 4 0 1 10 -150 -150 -150 -250 -50 -200 -150 -150 N P 4 0 1 10 -150 50 -150 -50 -50 0 -150 50 N P 4 0 1 10 -150 250 -50 200 -150 150 -150 250 N P 4 0 1 0 25 -100 50 -125 50 -75 25 -100 F P 4 0 1 0 50 125 50 75 25 100 50 125 F P 4 0 1 0 75 -75 75 -125 100 -100 75 -75 F P 4 0 1 0 75 125 75 75 100 100 75 125 F P 4 0 1 0 150 -200 150 -100 -175 -100 -175 -200 N P 2 1 1 0 -200 200 200 200 N P 2 1 1 0 -110 -150 -70 -110 N P 2 1 1 0 -110 50 -70 90 N P 2 1 1 0 -110 250 -70 290 N P 2 1 1 0 -70 -150 -30 -110 N P 2 1 1 0 -70 50 -30 90 N P 2 1 1 0 -70 250 -30 290 N P 3 1 1 0 -100 -120 -70 -110 -80 -140 N P 3 1 1 0 -100 80 -70 90 -80 60 N P 3 1 1 0 -100 280 -70 290 -80 260 N P 3 1 1 0 -60 -120 -30 -110 -40 -140 N P 3 1 1 0 -60 80 -30 90 -40 60 N P 3 1 1 0 -60 280 -30 290 -40 260 N X AB 1 -300 -200 100 R 50 50 1 1 P X KB 2 300 -200 100 L 50 50 1 1 P X AR 3 -300 200 100 R 50 50 1 1 P X KR 4 300 200 100 L 50 50 1 1 P X AG 5 -300 0 100 R 50 50 1 1 P X KR 6 300 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # SFH4356P # DEF SFH4356P D 0 40 N N 1 F N F0 "D" 20 70 50 H V L CNN F1 "SFH4356P" -40 -110 50 H V C CNN F2 "LED_THT:LED_D3.0mm_IRBlack" 0 175 50 H I C CNN F3 "" -50 0 50 H I C CNN ALIAS IR204A TSAL4400 SFH4346 $FPLIST LED*3.0mm*IRBlack* $ENDFPLIST DRAW P 2 0 1 10 -100 50 -100 -50 N P 2 0 1 0 0 0 -100 0 N P 2 0 1 0 15 125 -5 125 N P 3 0 1 0 -45 65 15 125 15 105 N P 4 0 1 10 0 50 -100 0 0 -50 0 50 N P 5 0 1 0 -95 65 -35 125 -35 105 -35 125 -55 125 N X K 1 -200 0 100 R 50 50 1 1 P X A 2 100 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # SFH460 # DEF SFH460 D 0 40 N N 1 F N F0 "D" 20 70 50 H V L CNN F1 "SFH460" -40 -110 50 H V C CNN F2 "Package_TO_SOT_THT:TO-18-2_Window" 0 175 50 H I C CNN F3 "" -50 0 50 H I C CNN $FPLIST TO?18*Window* $ENDFPLIST DRAW P 2 0 1 10 -100 50 -100 -50 N P 2 0 1 0 0 0 -100 0 N P 2 0 1 0 15 125 -5 125 N P 3 0 1 0 -45 65 15 125 15 105 N P 4 0 1 10 0 50 0 -50 -100 0 0 50 N P 5 0 1 0 -95 65 -35 125 -35 105 -35 125 -55 125 N X K 1 -200 0 100 R 50 50 1 1 P X A 2 100 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # SFH482 # DEF SFH482 D 0 40 N N 1 F N F0 "D" 20 70 50 H V L CNN F1 "SFH482" -40 -110 50 H V C CNN F2 "Package_TO_SOT_THT:TO-18-2_Window" 0 175 50 H I C CNN F3 "" -50 0 50 H I C CNN ALIAS SFH480 $FPLIST TO?18*Window* $ENDFPLIST DRAW P 2 0 1 10 -100 50 -100 -50 N P 2 0 1 0 0 0 -100 0 N P 2 0 1 0 15 125 -5 125 N P 3 0 1 0 -45 65 15 125 15 105 N P 4 0 1 10 0 50 0 -50 -100 0 0 50 N P 5 0 1 0 -95 65 -35 125 -35 105 -35 125 -55 125 N X K 1 -200 0 100 R 50 50 1 1 P X A 2 100 0 100 L 50 50 1 1 P ENDDRAW ENDDEF # # SK6805 # DEF SK6805 D 0 10 Y Y 1 F N F0 "D" 200 225 50 H V R BNN F1 "SK6805" 50 -225 50 H V L TNN F2 "LED_SMD:LED_SK6805_PLCC4_2.4x2.7mm_P1.3mm" 50 -300 50 H I L TNN F3 "" 100 -375 50 H I L TNN $FPLIST LED*SK6805*PLCC*2.4x2.7mm*P1.3mm* $ENDFPLIST DRAW T 0 90 -165 30 0 0 0 RGB Normal 0 C C S 200 200 -200 -200 0 1 10 f P 2 0 1 0 50 -140 70 -140 N P 2 0 1 0 50 -100 70 -100 N P 2 0 1 0 185 -140 105 -140 N P 3 0 1 0 90 -100 50 -140 50 -120 N P 3 0 1 0 90 -60 50 -100 50 -80 N P 3 0 1 0 145 -40 145 -140 145 -160 N P 4 0 1 0 185 -60 105 -60 145 -140 185 -60 N X DOUT 1 300 0 100 L 50 50 1 1 O X VSS 2 0 -300 100 U 50 50 1 1 W X DIN 3 -300 0 100 R 50 50 1 1 I X VDD 4 0 300 100 D 50 50 1 1 W ENDDRAW ENDDEF # # SK6812 # DEF SK6812 D 0 10 Y Y 1 F N F0 "D" 200 225 50 H V R BNN F1 "SK6812" 50 -225 50 H V L TNN F2 "LED_SMD:LED_SK6812_PLCC4_5.0x5.0mm_P3.2mm" 50 -300 50 H I L TNN F3 "" 100 -375 50 H I L TNN $FPLIST LED*SK6812*PLCC*5.0x5.0mm*P3.2mm* $ENDFPLIST DRAW T 0 90 -165 30 0 0 0 RGB Normal 0 C C S 200 200 -200 -200 0 1 10 f P 2 0 1 0 50 -140 70 -140 N P 2 0 1 0 50 -100 70 -100 N P 2 0 1 0 185 -140 105 -140 N P 3 0 1 0 90 -100 50 -140 50 -120 N P 3 0 1 0 90 -60 50 -100 50 -80 N P 3 0 1 0 145 -40 145 -140 145 -160 N P 4 0 1 0 185 -60 105 -60 145 -140 185 -60 N X VSS 1 0 -300 100 U 50 50 1 1 W X DIN 2 -300 0 100 R 50 50 1 1 I X VDD 3 0 300 100 D 50 50 1 1 W X DOUT 4 300 0 100 L 50 50 1 1 O ENDDRAW ENDDEF # # SK6812MINI # DEF SK6812MINI D 0 10 Y Y 1 F N F0 "D" 200 225 50 H V R BNN F1 "SK6812MINI" 50 -225 50 H V L TNN F2 "LED_SMD:LED_SK6812MINI_PLCC4_3.5x3.5mm_P1.75mm" 50 -300 50 H I L TNN F3 "" 100 -375 50 H I L TNN $FPLIST LED*SK6812MINI*PLCC*3.5x3.5mm*P1.75mm* $ENDFPLIST DRAW T 0 90 -165 30 0 0 0 RGB Normal 0 C C S 200 200 -200 -200 0 1 10 f P 2 0 1 0 50 -140 70 -140 N P 2 0 1 0 50 -100 70 -100 N P 2 0 1 0 185 -140 105 -140 N P 3 0 1 0 90 -100 50 -140 50 -120 N P 3 0 1 0 90 -60 50 -100 50 -80 N P 3 0 1 0 145 -40 145 -140 145 -160 N P 4 0 1 0 185 -60 105 -60 145 -140 185 -60 N X DOUT 1 300 0 100 L 50 50 1 1 O X VSS 2 0 -300 100 U 50 50 1 1 W X DIN 3 -300 0 100 R 50 50 1 1 I X VDD 4 0 300 100 D 50 50 1 1 W ENDDRAW ENDDEF # # SMLVN6RGB # DEF SMLVN6RGB D 0 0 Y N 1 F N F0 "D" 0 500 50 H V C CNN F1 "SMLVN6RGB" 0 400 50 H V C CNN F2 "LED_SMD:LED_ROHM_SMLVN6" 0 -350 50 H I C CNN F3 "" 0 -50 50 H I C CNN $FPLIST LED*ROHM*SMLVN6* $ENDFPLIST DRAW T 0 75 150 50 0 0 0 B Normal 0 C C T 0 75 -250 50 0 0 0 G Normal 0 C C T 0 75 -50 50 0 0 0 R Normal 0 C C S -110 330 110 -300 0 1 10 f S -50 -50 -50 50 0 1 0 N S -50 50 -50 50 0 1 0 N S -50 150 -50 250 0 1 0 N S -50 250 -50 250 0 1 0 N P 2 0 1 0 -50 -200 -100 -200 N P 2 0 1 0 -50 0 -100 0 N P 2 0 1 0 -50 0 50 0 N P 2 0 1 0 -50 200 -100 200 N P 2 0 1 0 50 -200 -50 -200 N P 2 0 1 0 50 -200 100 -200 N P 2 0 1 10 50 -150 50 -250 N P 2 0 1 0 50 0 100 0 N P 2 0 1 10 50 50 50 -50 N P 2 0 1 0 50 200 -50 200 N P 2 0 1 0 50 200 100 200 N P 2 0 1 10 50 250 50 150 N P 3 0 1 0 50 50 50 -50 50 -50 N P 3 0 1 0 50 250 50 150 50 150 N P 4 0 1 10 -50 -150 -50 -250 50 -200 -50 -150 N P 4 0 1 10 -50 50 -50 -50 50 0 -50 50 N P 4 0 1 10 -50 250 -50 150 50 200 -50 250 N P 5 0 1 0 0 -150 -60 -90 -30 -90 -60 -90 -60 -120 N P 5 0 1 0 0 50 -60 110 -30 110 -60 110 -60 80 N P 5 0 1 0 0 250 -60 310 -30 310 -60 310 -60 280 N P 5 0 1 0 40 -150 -20 -90 10 -90 -20 -90 -20 -120 N P 5 0 1 0 40 50 -20 110 10 110 -20 110 -20 80 N P 5 0 1 0 40 250 -20 310 10 310 -20 310 -20 280 N X BA 1 -200 200 100 R 50 50 1 1 P X RA 2 -200 0 100 R 50 50 1 1 P X GA 3 -200 -200 100 R 50 50 1 1 P X GK 4 200 -200 100 L 50 50 1 1 P X RK 5 200 0 100 L 50 50 1 1 P X BK 6 200 200 100 L 50 50 1 1 P ENDDRAW ENDDEF # # WS2812B # DEF WS2812B D 0 10 Y Y 1 F N F0 "D" 200 225 50 H V R BNN F1 "WS2812B" 50 -225 50 H V L TNN F2 "LED_SMD:LED_WS2812B_PLCC4_5.0x5.0mm_P3.2mm" 50 -300 50 H I L TNN F3 "" 100 -375 50 H I L TNN $FPLIST LED*WS2812*PLCC*5.0x5.0mm*P3.2mm* $ENDFPLIST DRAW T 0 90 -165 30 0 0 0 RGB Normal 0 C C S 200 200 -200 -200 0 1 10 f P 2 0 1 0 50 -140 70 -140 N P 2 0 1 0 50 -100 70 -100 N P 2 0 1 0 185 -140 105 -140 N P 3 0 1 0 90 -100 50 -140 50 -120 N P 3 0 1 0 90 -60 50 -100 50 -80 N P 3 0 1 0 145 -40 145 -140 145 -160 N P 4 0 1 0 185 -60 105 -60 145 -140 185 -60 N X VDD 1 0 300 100 D 50 50 1 1 W X DOUT 2 300 0 100 L 50 50 1 1 O X VSS 3 0 -300 100 U 50 50 1 1 W X DIN 4 -300 0 100 R 50 50 1 1 I ENDDRAW ENDDEF # # WS2812S # DEF WS2812S D 0 10 Y Y 1 F N F0 "D" 200 225 50 H V R BNN F1 "WS2812S" 50 -225 50 H V L TNN F2 "LED_SMD:LED_WS2812_PLCC6_5.0x5.0mm_P1.6mm" 50 -300 50 H I L TNN F3 "" 100 -375 50 H I L TNN ALIAS WS2812 $FPLIST LED*WS2812*PLCC*5.0x5.0mm*P1.6mm* $ENDFPLIST DRAW T 0 90 -165 30 0 0 0 RGB Normal 0 C C S 200 200 -200 -200 0 1 10 f P 2 0 1 0 50 -140 70 -140 N P 2 0 1 0 50 -100 70 -100 N P 2 0 1 0 185 -140 105 -140 N P 3 0 1 0 90 -100 50 -140 50 -120 N P 3 0 1 0 90 -60 50 -100 50 -80 N P 3 0 1 0 145 -40 145 -140 145 -160 N P 4 0 1 0 185 -60 105 -60 145 -140 185 -60 N X DOUT 1 300 0 100 L 50 50 1 1 O X DIN 2 -300 0 100 R 50 50 1 1 I X VCC 3 0 300 100 D 50 50 1 1 W X NC 4 200 100 100 L 50 50 1 1 N N X VDD 5 -100 300 100 D 50 50 1 1 W X VSS 6 0 -300 100 U 50 50 1 1 W ENDDRAW ENDDEF # # WS2813 # DEF WS2813 D 0 10 Y Y 1 F N F0 "D" 200 225 50 H V R BNN F1 "WS2813" 50 -225 50 H V L TNN F2 "LED_SMD:LED_WS2812_PLCC6_5.0x5.0mm_P1.6mm" 50 -300 50 H I L TNN F3 "" 100 -375 50 H I L TNN $FPLIST LED*WS2812*PLCC*5.0x5.0mm*P1.6mm* $ENDFPLIST DRAW T 0 90 -165 30 0 0 0 RGB Normal 0 C C S 200 200 -200 -200 0 1 10 f P 2 0 1 0 50 -140 70 -140 N P 2 0 1 0 50 -100 70 -100 N P 2 0 1 0 185 -140 105 -140 N P 3 0 1 0 90 -100 50 -140 50 -120 N P 3 0 1 0 90 -60 50 -100 50 -80 N P 3 0 1 0 145 -40 145 -140 145 -160 N P 4 0 1 0 185 -60 105 -60 145 -140 185 -60 N X VCC 1 0 300 100 D 50 50 1 1 W X VDD 2 -100 300 100 D 50 50 1 1 W X DOUT 3 300 0 100 L 50 50 1 1 O X DIN 4 -300 0 100 R 50 50 1 1 I X GND 5 0 -300 100 U 50 50 1 1 W X BIN 6 -300 -100 100 R 50 50 1 1 I ENDDRAW ENDDEF # # WS2822S # DEF WS2822S D 0 10 Y Y 1 F N F0 "D" 200 225 50 H V R BNN F1 "WS2822S" 50 -225 50 H V L TNN F2 "LED_SMD:LED_WS2812_PLCC6_5.0x5.0mm_P1.6mm" 50 -300 50 H I L TNN F3 "" 100 -375 50 H I L TNN $FPLIST LED*WS2812*PLCC*5.0x5.0mm*P1.6mm* $ENDFPLIST DRAW T 0 90 -165 30 0 0 0 RGB Normal 0 C C S -200 200 200 -200 0 1 10 f P 2 0 1 0 50 -140 70 -140 N P 2 0 1 0 50 -100 70 -100 N P 2 0 1 0 185 -140 105 -140 N P 3 0 1 0 90 -100 50 -140 50 -120 N P 3 0 1 0 90 -60 50 -100 50 -80 N P 3 0 1 0 145 -40 145 -140 145 -160 N P 4 0 1 0 185 -60 105 -60 145 -140 185 -60 N X DAI 1 -300 -100 100 R 50 50 1 1 I X ADRI 2 -300 0 100 R 50 50 1 1 I X VCC 3 0 300 100 D 50 50 1 1 W X GND 4 0 -300 100 U 50 50 1 1 W X ADRO 5 300 0 100 L 50 50 1 1 O X VDD 6 -100 300 100 D 50 50 1 1 W ENDDRAW ENDDEF # #End Library ================================================ FILE: esim-cloud-backend/kicad-symbols/additional/Motor.dcm ================================================ EESchema-DOCLIB Version 2.0 # $CMP Fan D Fan K Fan Motor F ~ $ENDCMP # $CMP Fan_3pin D Fan, tacho output, 3-pin connector K Fan Motor tacho F http://www.hardwarecanucks.com/forum/attachments/new-builds/16287d1330775095-help-chassis-power-fan-connectors-motherboard-asus_p8z68.jpg $ENDCMP # $CMP Fan_4pin D Fan, tacho output, PWM input, 4-pin connector K Fan Motor tacho PWM F http://www.formfactors.org/developer%5Cspecs%5Crev1_2_public.pdf $ENDCMP # $CMP Fan_ALT D Fan without PWM or tach, alternative symbol K Fan Motor F ~ $ENDCMP # $CMP Fan_CPU_4pin D CPU Fan, tacho output, PWM input, 4-pin connector K Fan Motor tacho PWM F http://www.formfactors.org/developer%5Cspecs%5Crev1_2_public.pdf $ENDCMP # $CMP Fan_IEC60617 D Fan (according to IEC-60617) K Fan Motor IEC-60617 F ~ $ENDCMP # $CMP Fan_PC_Chassis D PC chassis fan, tacho output, 3-pin connector K Fan Motor tacho F http://www.hardwarecanucks.com/forum/attachments/new-builds/16287d1330775095-help-chassis-power-fan-connectors-motherboard-asus_p8z68.jpg $ENDCMP # $CMP Fan_Tacho D Fan, tacho output, 3-pin connector K Fan Motor tacho F http://www.hardwarecanucks.com/forum/attachments/new-builds/16287d1330775095-help-chassis-power-fan-connectors-motherboard-asus_p8z68.jpg $ENDCMP # $CMP Fan_Tacho_PWM D Fan, tacho output, PWM input, 4-pin connector K Fan Motor tacho PWM F http://www.formfactors.org/developer%5Cspecs%5Crev1_2_public.pdf $ENDCMP # $CMP Motor_AC D AC Motor K AC Motor F ~ $ENDCMP # $CMP Motor_DC D DC Motor K DC Motor F ~ $ENDCMP # $CMP Motor_DC_ALT D DC Motor, alternative symbol K DC Motor F ~ $ENDCMP # $CMP Motor_Servo D Servo Motor (Futaba, HiTec, JR connector) K Servo Motor F http://forums.parallax.com/uploads/attachments/46831/74481.png $ENDCMP # $CMP Motor_Servo_AirTronics D Servo Motor (AirTronics connector) K Servo Motor F http://forums.parallax.com/uploads/attachments/46831/74481.png $ENDCMP # $CMP Motor_Servo_Futaba_J D Servo Motor (Futuba J-connector) K Servo Motor F http://forums.parallax.com/uploads/attachments/46831/74481.png $ENDCMP # $CMP Motor_Servo_Grapner_JR D Servo Motor (Graupner JR connector) K Servo Motor F http://forums.parallax.com/uploads/attachments/46831/74481.png $ENDCMP # $CMP Motor_Servo_Hitec D Servo Motor (HiTec connector) K Servo Motor F http://forums.parallax.com/uploads/attachments/46831/74481.png $ENDCMP # $CMP Motor_Servo_JR D Servo Motor (JR connector) K Servo Motor F http://forums.parallax.com/uploads/attachments/46831/74481.png $ENDCMP # $CMP Motor_Servo_Robbe D Servo Motor (Robbe connector) K Servo Motor F http://forums.parallax.com/uploads/attachments/46831/74481.png $ENDCMP # $CMP Stepper_Motor_bipolar D 4-wire bipolar stepper motor K bipolar stepper motor F http://www.infineon.com/dgdl/Application-Note-TLE8110EE_driving_UniPolarStepperMotor_V1.1.pdf?fileId=db3a30431be39b97011be5d0aa0a00b0 $ENDCMP # $CMP Stepper_Motor_unipolar_5pin D 5-wire unipolar stepper motor K unipolar stepper motor F http://www.infineon.com/dgdl/Application-Note-TLE8110EE_driving_UniPolarStepperMotor_V1.1.pdf?fileId=db3a30431be39b97011be5d0aa0a00b0 $ENDCMP # $CMP Stepper_Motor_unipolar_6pin D 6-wire unipolar stepper motor K unipolar stepper motor F http://www.infineon.com/dgdl/Application-Note-TLE8110EE_driving_UniPolarStepperMotor_V1.1.pdf?fileId=db3a30431be39b97011be5d0aa0a00b0 $ENDCMP # #End Doc Library ================================================ FILE: esim-cloud-backend/kicad-symbols/additional/Motor.lib ================================================ EESchema-LIBRARY Version 2.4 #encoding utf-8 # # Fan # DEF Fan M 0 0 Y Y 1 F N F0 "M" 100 200 50 H V L CNN F1 "Fan" 100 -100 50 H V L TNN F2 "" 0 10 50 H I C CNN F3 "" 0 10 50 H I C CNN $FPLIST PinHeader*P2.54mm* TerminalBlock* $ENDFPLIST DRAW A -98 94 113 297 -910 0 1 0 N 0 150 -100 -20 A 0 -70 112 1534 266 0 1 0 N -100 -20 100 -20 A 103 95 115 -915 1519 0 1 0 N 100 -20 0 150 C 0 40 128 0 1 10 N P 2 0 1 0 0 -200 0 -180 N P 2 0 1 0 0 -88 0 -104 N P 2 0 1 0 0 168 0 182 N P 2 0 1 0 0 180 0 200 N X + 1 0 300 100 D 50 50 1 1 P X - 2 0 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Fan_ALT # DEF Fan_ALT M 0 0 N Y 1 F N F0 "M" 150 200 50 H V L BNN F1 "Fan_ALT" 150 100 50 H V L BNN F2 "" 0 -50 50 H I C CNN F3 "" 0 -50 50 H I C CNN $FPLIST PinHeader*P2.54mm* TerminalBlock* $ENDFPLIST DRAW A -160 -90 184 294 -294 0 1 0 N 0 0 0 -180 A -142 -45 149 176 -568 0 1 0 N 0 0 -60 -170 A -90 160 184 -606 -1194 0 1 0 N 0 0 -180 0 A -45 142 149 -724 -1468 0 1 0 N 0 0 -170 60 A 45 -142 149 1076 332 0 1 0 N 0 0 170 -60 A 90 -160 184 1194 606 0 1 0 N 0 0 180 0 A 142 45 149 -1624 1232 0 1 0 N 0 0 60 170 A 160 90 184 -1506 1506 0 1 0 N 0 0 0 180 C 0 0 180 0 1 10 N P 2 0 1 0 0 -200 0 -180 N P 2 0 1 0 0 180 0 200 N X + 1 0 300 100 D 50 50 1 1 P X - 2 0 -300 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Fan_IEC60617 # DEF Fan_IEC60617 M 0 0 Y Y 1 F N F0 "M" 150 150 50 H V L CNN F1 "Fan_IEC60617" 150 100 50 H V L TNN F2 "" 50 -140 50 H I L CNN F3 "" 0 10 50 H I C CNN $FPLIST PinHeader*P2.54mm* TerminalBlock* $ENDFPLIST DRAW C 0 40 100 0 1 0 N S -130 170 130 -90 0 1 10 f P 2 0 1 0 -60 -40 90 0 N P 2 0 1 0 -60 120 90 80 N P 2 0 1 0 0 -200 0 -180 N P 2 0 1 0 0 -88 0 -104 N P 2 0 1 0 0 168 0 182 N P 2 0 1 0 0 180 0 200 N X + 1 0 300 100 D 50 50 1 1 P X - 2 0 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Fan_Tacho # DEF Fan_Tacho M 0 0 Y Y 1 F N F0 "M" 100 100 50 H V L CNN F1 "Fan_Tacho" 100 -200 50 H V L TNN F2 "" 0 -90 50 H I C CNN F3 "" 0 -90 50 H I C CNN ALIAS Fan_3pin Fan_PC_Chassis $FPLIST FanPinHeader*P2.54mm*Vertical* PinHeader*P2.54mm*Vertical* TerminalBlock* $ENDFPLIST DRAW A -200 -40 20 1800 900 0 0 0 N -220 -40 -200 -20 A -200 -40 20 -1799 -1 0 0 0 N -220 -40 -180 -40 A -98 -6 113 297 -910 0 1 0 N 0 50 -100 -120 A 0 -170 112 1534 266 0 1 0 N -100 -120 100 -120 A 103 -5 115 -915 1519 0 1 0 N 100 -120 0 50 C 0 -60 128 0 1 10 N P 2 0 0 0 -200 -20 -210 -15 N P 2 0 0 0 -200 -20 -205 -30 N P 3 0 0 0 -160 0 -160 -60 -130 -60 N P 2 0 1 0 -160 0 -200 0 N P 2 0 1 0 0 -300 0 -280 N P 2 0 1 0 0 -188 0 -204 N P 2 0 1 0 0 68 0 82 N P 2 0 1 0 0 80 0 100 N X Tacho 1 -300 0 100 R 50 50 1 1 P X + 2 0 200 100 D 50 50 1 1 P X - 3 0 -300 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Fan_Tacho_PWM # DEF Fan_Tacho_PWM M 0 0 Y Y 1 F N F0 "M" 100 200 50 H V L CNN F1 "Fan_Tacho_PWM" 100 -100 50 H V L TNN F2 "" 0 10 50 H I C CNN F3 "" 0 10 50 H I C CNN ALIAS Fan_CPU_4pin Fan_4pin $FPLIST FanPinHeader*P2.54mm*Vertical* PinHeader*P2.54mm*Vertical* TerminalBlock* $ENDFPLIST DRAW A -200 60 20 1800 900 0 0 0 N -220 60 -200 80 A -200 60 20 -1799 -1 0 0 0 N -220 60 -180 60 A -98 94 113 297 -910 0 1 0 N 0 150 -100 -20 A 0 -70 112 1534 266 0 1 0 N -100 -20 100 -20 A 103 95 115 -915 1519 0 1 0 N 100 -20 0 150 C 0 40 128 0 1 10 N P 2 0 0 0 -200 80 -210 85 N P 2 0 0 0 -200 80 -205 70 N P 3 0 0 0 -160 100 -160 40 -130 40 N P 2 0 1 0 -160 100 -200 100 N P 2 0 1 0 0 -200 0 -180 N P 2 0 1 0 0 -88 0 -104 N P 2 0 1 0 0 168 0 182 N P 2 0 1 0 0 180 0 200 N P 4 0 1 0 -100 -40 -160 -40 -160 -100 -200 -100 N P 10 0 1 0 -210 -130 -200 -130 -200 -120 -190 -120 -190 -130 -170 -130 -170 -120 -160 -120 -160 -130 -140 -130 N X - 1 0 -200 100 U 50 50 1 1 P X + 2 0 300 100 D 50 50 1 1 P X Tacho 3 -300 100 100 R 50 50 1 1 P X PWM 4 -300 -100 100 R 50 50 1 1 I ENDDRAW ENDDEF # # Motor_AC # DEF Motor_AC M 0 0 Y Y 1 F N F0 "M" 100 100 50 H V L CNN F1 "Motor_AC" 100 -200 50 H V L TNN F2 "" 0 -90 50 H I C CNN F3 "" 0 -90 50 H I C CNN $FPLIST PinHeader*P2.54mm* TerminalBlock* $ENDFPLIST DRAW A -29 -108 31 -1763 -225 0 0 0 N -60 -110 0 -120 A 28 -132 30 1568 36 0 0 0 N 0 -120 60 -130 C 0 -60 128 0 1 10 N P 5 0 0 0 -40 -80 -40 40 0 -40 40 40 40 -80 N P 2 0 1 0 0 -300 0 -280 N P 2 0 1 0 0 -188 0 -204 N P 2 0 1 0 0 68 0 82 N P 2 0 1 0 0 80 0 100 N X ~ 1 0 200 100 D 50 50 1 1 P X ~ 2 0 -300 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Motor_DC # DEF Motor_DC M 0 0 Y Y 1 F N F0 "M" 100 100 50 H V L CNN F1 "Motor_DC" 100 -200 50 H V L TNN F2 "" 0 -90 50 H I C CNN F3 "" 0 -90 50 H I C CNN $FPLIST PinHeader*P2.54mm* TerminalBlock* $ENDFPLIST DRAW C 0 -60 128 0 1 10 N P 5 0 0 0 -50 -130 -50 20 0 -80 50 20 50 -130 N P 2 0 1 0 0 -300 0 -280 N P 2 0 1 0 0 -188 0 -204 N P 2 0 1 0 0 68 0 82 N P 2 0 1 0 0 80 0 100 N X + 1 0 200 100 D 50 50 1 1 P X - 2 0 -300 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Motor_DC_ALT # DEF Motor_DC_ALT M 0 0 Y Y 1 F N F0 "M" 100 100 50 H V L CNN F1 "Motor_DC_ALT" 100 -200 50 H V L TNN F2 "" 0 -90 50 H I C CNN F3 "" 0 -90 50 H I C CNN $FPLIST PinHeader*P2.54mm* TerminalBlock* $ENDFPLIST DRAW C 0 -60 117 0 0 10 N P 4 0 0 0 -50 -170 -50 -200 50 -200 50 -170 N P 4 0 0 0 -50 50 -50 80 50 80 50 50 N P 5 0 0 0 -50 -130 -50 20 0 -80 50 20 50 -130 N P 2 0 1 0 0 80 0 100 N X + 1 0 200 100 D 50 50 1 1 P X - 2 0 -300 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Motor_Servo # DEF Motor_Servo M 0 1 Y Y 1 F N F0 "M" -200 175 50 H V L CNN F1 "Motor_Servo" -200 -160 50 H V L TNN F2 "" 0 -190 50 H I C CNN F3 "" 0 -190 50 H I C CNN ALIAS Motor_Servo_JR Motor_Servo_Hitec Motor_Servo_Futaba_J Motor_Servo_Robbe Motor_Servo_Grapner_JR $FPLIST PinHeader*P2.54mm* $ENDFPLIST DRAW A 125 0 76 1132 -1132 0 1 0 N 95 70 95 -70 A 267 142 37 1173 -273 0 1 0 N 250 175 300 125 C 125 0 7 0 1 0 N C 125 0 56 0 1 0 N C 235 110 5 0 1 0 N C 255 130 5 0 1 0 N C 275 150 5 0 1 0 N P 2 0 1 0 95 -70 80 -70 N P 2 0 1 0 95 -70 90 -55 N P 2 0 1 0 95 70 75 70 N P 2 0 1 0 95 70 90 55 N P 2 0 1 0 250 175 100 50 N P 2 0 1 0 300 125 165 -40 N P 5 0 1 10 200 140 -200 140 -200 -140 250 -140 250 60 N X PWM 1 -300 100 100 R 50 50 1 1 P X + 2 -300 0 100 R 50 50 1 1 P X - 3 -300 -100 100 R 50 50 1 1 P ENDDRAW ENDDEF # # Motor_Servo_AirTronics # DEF Motor_Servo_AirTronics M 0 1 Y Y 1 F N F0 "M" -200 175 50 H V L CNN F1 "Motor_Servo_AirTronics" -200 -160 50 H V L TNN F2 "" 0 -190 50 H I C CNN F3 "" 0 -190 50 H I C CNN $FPLIST PinHeader*P2.54mm* $ENDFPLIST DRAW A 125 0 76 1132 -1132 0 1 0 N 95 70 95 -70 A 267 142 37 1173 -273 0 1 0 N 250 175 300 125 C 125 0 7 0 1 0 N C 125 0 56 0 1 0 N C 235 110 5 0 1 0 N C 255 130 5 0 1 0 N C 275 150 5 0 1 0 N P 2 0 1 0 95 -70 80 -70 N P 2 0 1 0 95 -70 90 -55 N P 2 0 1 0 95 70 75 70 N P 2 0 1 0 95 70 90 55 N P 2 0 1 0 250 175 100 50 N P 2 0 1 0 300 125 165 -40 N P 5 0 1 10 250 60 250 -140 -200 -140 -200 140 200 140 N X + 1 -300 0 100 R 50 50 1 1 P X - 2 -300 -100 100 R 50 50 1 1 P X PWM 3 -300 100 100 R 50 50 1 1 P ENDDRAW ENDDEF # # Stepper_Motor_bipolar # DEF Stepper_Motor_bipolar M 0 0 Y N 1 F N F0 "M" 150 100 50 H V L CNN F1 "Stepper_Motor_bipolar" 150 50 50 H V L TNN F2 "" 10 -10 50 H I C CNN F3 "" 10 -10 50 H I C CNN $FPLIST PinHeader*P2.54mm*Vertical* TerminalBlock* Motor* $ENDFPLIST DRAW A -175 -75 25 -899 899 0 1 0 N -175 -100 -175 -50 A -175 -25 25 -899 899 0 1 0 N -175 -50 -175 0 A -175 25 25 -899 899 0 1 0 N -175 0 -175 50 A -175 75 25 -899 899 0 1 0 N -175 50 -175 100 A -75 175 25 -1799 -1 0 1 0 N -100 175 -50 175 A -25 175 25 -1799 -1 0 1 0 N -50 175 0 175 A 25 175 25 -1799 -1 0 1 0 N 0 175 50 175 A 75 175 25 -1799 -1 0 1 0 N 50 175 100 175 C 0 0 128 0 1 10 N P 5 0 0 0 -50 -70 -50 80 0 -20 50 80 50 -70 N P 2 0 1 0 -200 -100 -175 -100 N P 2 0 1 0 -200 100 -175 100 N P 2 0 1 0 -100 200 -100 175 N P 2 0 1 0 100 200 100 175 N X ~ 1 -100 300 100 D 50 50 1 1 P X - 2 100 300 100 D 50 50 1 1 P X ~ 3 -300 100 100 R 50 50 1 1 P X ~ 4 -300 -100 100 R 50 50 1 1 P ENDDRAW ENDDEF # # Stepper_Motor_unipolar_5pin # DEF Stepper_Motor_unipolar_5pin M 0 0 Y N 1 F N F0 "M" 150 100 50 H V L CNN F1 "Stepper_Motor_unipolar_5pin" 150 50 50 H V L TNN F2 "" 10 -10 50 H I C CNN F3 "" 10 -10 50 H I C CNN $FPLIST PinHeader*P2.54mm* TerminalBlock* $ENDFPLIST DRAW A -175 -75 25 -899 899 0 1 0 N -175 -100 -175 -50 A -175 -25 25 -899 899 0 1 0 N -175 -50 -175 0 A -175 25 25 -899 899 0 1 0 N -175 0 -175 50 A -175 75 25 -899 899 0 1 0 N -175 50 -175 100 A -75 175 25 -1799 -1 0 1 0 N -100 175 -50 175 A -25 175 25 -1799 -1 0 1 0 N -50 175 0 175 A 25 175 25 -1799 -1 0 1 0 N 0 175 50 175 A 75 175 25 -1799 -1 0 1 0 N 50 175 100 175 C -200 200 0 0 1 0 F C -200 200 10 0 1 0 F C 0 0 128 0 1 10 N P 5 0 0 0 -50 -70 -50 80 0 -20 50 80 50 -70 N P 2 0 1 0 -200 -100 -175 -100 N P 2 0 1 0 -200 100 -175 100 N P 2 0 1 0 -100 175 -100 200 N P 2 0 1 0 100 175 100 200 N P 3 0 1 0 -200 200 -200 0 -175 0 N P 3 0 1 0 0 175 0 200 -200 200 N X ~ 1 -200 300 100 D 50 50 1 1 P X ~ 2 -100 300 100 D 50 50 1 1 P X - 3 100 300 100 D 50 50 1 1 P X ~ 4 -300 100 100 R 50 50 1 1 P X ~ 5 -300 -100 100 R 50 50 1 1 P ENDDRAW ENDDEF # # Stepper_Motor_unipolar_6pin # DEF Stepper_Motor_unipolar_6pin M 0 0 Y N 1 F N F0 "M" 150 100 50 H V L CNN F1 "Stepper_Motor_unipolar_6pin" 150 50 50 H V L TNN F2 "" 10 -10 50 H I C CNN F3 "" 10 -10 50 H I C CNN $FPLIST PinHeader*P2.54mm* TerminalBlock* $ENDFPLIST DRAW A -175 -75 25 -899 899 0 1 0 N -175 -100 -175 -50 A -175 -25 25 -899 899 0 1 0 N -175 -50 -175 0 A -175 25 25 -899 899 0 1 0 N -175 0 -175 50 A -175 75 25 -899 899 0 1 0 N -175 50 -175 100 A -75 175 25 -1799 -1 0 1 0 N -100 175 -50 175 A -25 175 25 -1799 -1 0 1 0 N -50 175 0 175 A 25 175 25 -1799 -1 0 1 0 N 0 175 50 175 A 75 175 25 -1799 -1 0 1 0 N 50 175 100 175 C 0 0 128 0 1 10 N P 5 0 0 0 -50 -70 -50 80 0 -20 50 80 50 -70 N P 2 0 1 0 -200 -100 -175 -100 N P 2 0 1 0 -200 100 -175 100 N P 2 0 1 0 -175 0 -200 0 N P 2 0 1 0 -100 175 -100 200 N P 2 0 1 0 0 175 0 200 N P 2 0 1 0 100 175 100 200 N X ~ 1 -100 300 100 D 50 50 1 1 P X ~ 2 0 300 100 D 50 50 1 1 P X - 3 100 300 100 D 50 50 1 1 P X ~ 4 -300 100 100 R 50 50 1 1 P X ~ 5 -300 0 100 R 50 50 1 1 P X ~ 6 -300 -100 100 R 50 50 1 1 P ENDDRAW ENDDEF # #End Library ================================================ FILE: esim-cloud-backend/kicad-symbols/additional/Oscillator.dcm ================================================ EESchema-DOCLIB Version 2.0 # $CMP 5P49V6965 D Programmable Clock Generator, I2C interface, 1kHz-350MHz, QFN-24 K Low-noise PLL Reference Clock F https://www.idt.com/document/dst/5p49v6965-datasheet $ENDCMP # $CMP ABLNO D LVCMOS Ultra Low Phase Noise XO / VCXO, Abracon ABLNO K XO VCXO F https://abracon.com/Precisiontiming/ABLNO.pdf $ENDCMP # $CMP ACO-xxxMHz D HCMOS Crystal Clock Oscillator, DIP14-style metal package K Crystal Clock Oscillator F http://www.conwin.com/datasheets/cx/cx030.pdf $ENDCMP # $CMP ACO-xxxMHz-A D HCMOS Crystal Clock Oscillator, DIP14-style metal package K Crystal Clock Oscillator F http://www.conwin.com/datasheets/cx/cx030.pdf $ENDCMP # $CMP ASCO D Crystal Clock Oscillator, Abracon ASCO K Crystal Clock Oscillator F https://abracon.com/Oscillators/ASCO.pdf $ENDCMP # $CMP ASDMB-xxxMHz D 1.8-3.3V SMD Ultra Miniature Crystal Clock Oscillator, Abracon K 1.8-3.3V SMD Ultra Miniature Crystal Clock Oscillator F https://abracon.com/Oscillators/ASDMB.pdf $ENDCMP # $CMP ASE-xxxMHz D 3.3V CMOS SMD Crystal Clock Oscillator, Abracon K 3.3V CMOS SMD Crystal Clock Oscillator F http://www.abracon.com/Oscillators/ASV.pdf $ENDCMP # $CMP ASV-xxxMHz D 3.3V HCMOS SMD Crystal Clock Oscillator, Abracon K 3.3V HCMOS SMD Crystal Clock Oscillator F http://www.abracon.com/Oscillators/ASV.pdf $ENDCMP # $CMP CXO_DIP14 D Crystal Clock Oscillator, DIP14-style metal package K Crystal Clock Oscillator F http://cdn-reichelt.de/documents/datenblatt/B400/OSZI.pdf $ENDCMP # $CMP CXO_DIP8 D Crystal Clock Oscillator, DIP8-style metal package K Crystal Clock Oscillator F http://cdn-reichelt.de/documents/datenblatt/B400/OSZI.pdf $ENDCMP # $CMP DFA-S11 D Temperature compensated Crystal Clock Oscillator K Temperature compensated Crystal Clock Oscillator F http://www.metatech.com.hk/product/fordahl/pdf/2002%20TCXO%20Page%2043-58.pdf $ENDCMP # $CMP DFA-S15 D Temperature compensated Crystal Clock Oscillator K Temperature compensated Crystal Clock Oscillator F http://www.metatech.com.hk/product/fordahl/pdf/2002%20TCXO%20Page%2043-58.pdf $ENDCMP # $CMP DFA-S2 D Temperature compensated Crystal Clock Oscillator K Temperature compensated Crystal Clock Oscillator F http://www.metatech.com.hk/product/fordahl/pdf/2002%20TCXO%20Page%2043-58.pdf $ENDCMP # $CMP DFA-S3 D Temperature compensated Crystal Clock Oscillator K Temperature compensated Crystal Clock Oscillator F http://www.metatech.com.hk/product/fordahl/pdf/2002%20TCXO%20Page%2043-58.pdf $ENDCMP # $CMP DGOF5S3 D HCMOS Crystal Clock Oscillator, DIP14-style metal package K Crystal Clock Oscillator F http://www.conwin.com/datasheets/cx/cx030.pdf $ENDCMP # $CMP ECS-2520MV-xxx-xx D HCMOS Crystal Clock Oscillator, 2.5x2.0 mm SMD K Crystal Clock Oscillator ECS SMD F https://www.ecsxtal.com/store/pdf/ECS-2520MV.pdf $ENDCMP # $CMP GTXO-14T D Crystal Clock Oscillator, DIP14-style metal package K Crystal Clock Oscillator F http://www.golledge.com/pdf/products/tcxos/gtxo14.pdf $ENDCMP # $CMP GTXO-14V D Voltage-Controlled Crystal Clock Oscillator, DIP14-style metal package K Crystal Clock Oscillator F http://www.golledge.com/pdf/products/tcxos/gtxo14.pdf $ENDCMP # $CMP GTXO-S14T D 3.3 & 5V Stratum 3 Sinewave TCXO, DIP14-style metal package K Crystal Clock Oscillator F http://www.golledge.com/pdf/products/tcxos/gtxos14.pdf $ENDCMP # $CMP GTXO-S14V D 3.3 & 5V Stratum 3 Sinewave TCXO, DIP14-style metal package K Crystal Clock Oscillator F http://www.golledge.com/pdf/products/tcxos/gtxos14.pdf $ENDCMP # $CMP IQXO-70 D Crystal Clock Oscillator, SMD package 7.5x5.0mm² K Crystal Clock Oscillator F http://www.iqdfrequencyproducts.com/products/details/iqxo-70-11-30.pdf $ENDCMP # $CMP JTOS-25 D Voltage Controlled Oscillator, 12.5 to 25 MHz, Mini-Circuits BK377 K VCXO F https://www.minicircuits.com/pdfs/JTOS-25+.pdf $ENDCMP # $CMP JTOS-50 D Voltage Controlled Oscillator, 25 to 47 MHz, Mini-Circuits BK377 K VCXO F https://www.minicircuits.com/pdfs/JTOS-50+.pdf $ENDCMP # $CMP KT2520K-T D 10-60MHz Temperature Compensated Crystal Oscillator, Kyocera 2520 K tcxo F https://global.kyocera.com/prdct/electro/product/pdf/kt2520_e.pdf $ENDCMP # $CMP LTC6905xS5-100 D 2.7-5.5V 100MHz Precision Fixed Frequency Silicon Oscillator, TSOT-23-5 K oscillator fixed frequency divider silicon F https://www.analog.com/media/en/technical-documentation/data-sheets/6905xfa.pdf $ENDCMP # $CMP LTC6905xS5-133 D 2.7-5.5V 133MHz Precision Fixed Frequency Silicon Oscillator, TSOT-23-5 K oscillator fixed frequency divider silicon F https://www.analog.com/media/en/technical-documentation/data-sheets/6905xfa.pdf $ENDCMP # $CMP LTC6905xS5-80 D 2.7-5.5V 80MHz Precision Fixed Frequency Silicon Oscillator, TSOT-23-5 K oscillator fixed frequency divider silicon F https://www.analog.com/media/en/technical-documentation/data-sheets/6905xfa.pdf $ENDCMP # $CMP LTC6905xS5-96 D 2.7-5.5V 96MHz Precision Fixed Frequency Silicon Oscillator, TSOT-23-5 K oscillator fixed frequency divider silicon F https://www.analog.com/media/en/technical-documentation/data-sheets/6905xfa.pdf $ENDCMP # $CMP MAX7375AXR105 D Silicon Clock Oscillator 1MHz, SC-70-3 K Silicon Clock Oscillator 1MHz 1000kHz F https://datasheets.maximintegrated.com/en/ds/MAX7375.pdf $ENDCMP # $CMP MAX7375AXR185 D Silicon Clock Oscillator 1.84MHz, SC-70-3 K Silicon Clock Oscillator 1,84MHz 1840kHz F https://datasheets.maximintegrated.com/en/ds/MAX7375.pdf $ENDCMP # $CMP MAX7375AXR365 D Silicon Clock Oscillator 3.58MHz, SC-70-3 K Silicon Clock Oscillator 3.58MHz 3580kHz F https://datasheets.maximintegrated.com/en/ds/MAX7375.pdf $ENDCMP # $CMP MAX7375AXR375 D Silicon Clock Oscillator 3.69MHz, SC-70-3 K Silicon Clock Oscillator 3.69MHz 3690kHz F https://datasheets.maximintegrated.com/en/ds/MAX7375.pdf $ENDCMP # $CMP MAX7375AXR405 D Silicon Clock Oscillator 4MHz, SC-70-3 K Silicon Clock Oscillator 4MHz 4000kHz F https://datasheets.maximintegrated.com/en/ds/MAX7375.pdf $ENDCMP # $CMP MAX7375AXR425 D Silicon Clock Oscillator 4.19MHz, SC-70-3 K Silicon Clock Oscillator 4.19MHz 4190kHz F https://datasheets.maximintegrated.com/en/ds/MAX7375.pdf $ENDCMP # $CMP MAX7375AXR805 D Silicon Clock Oscillator 8MHz, SC-70-3 K Silicon Clock Oscillator 8MHz 8000kHz F https://datasheets.maximintegrated.com/en/ds/MAX7375.pdf $ENDCMP # $CMP MV267 D 5/10 MHz Low Phase-Noise Precision OCXO, Morion MV267 K OCXO F http://www.morion.com.ru/catalog_pdf/MV267.pdf $ENDCMP # $CMP MV317 D 60, 80, 100, 120 & 122.76 MHz OCXO, Morion MV317 K OCXO F https://www.morion-us.com/catalog_pdf/mv317.pdf $ENDCMP # $CMP NB3N502 D 3.3V / 5.0V 14 MHz to 190 MHz PLL Clock Multiplier, SOIC-8 K oscillator clock multiplier PLL F http://www.onsemi.com/pub/Collateral/NB3N502-D.PDF $ENDCMP # $CMP NB3N511 D 3.3V / 5.0V 14 MHz to 200 MHz PLL Clock Multiplier, SOIC-8 K oscillator clock multiplier PLL F http://www.onsemi.com/pub/Collateral/NB3N511-D.PDF $ENDCMP # $CMP OCXO-14 D Voltage-Controlled Crystal Clock Oscillator, DIP14-style metal package K Crystal Clock Oscillator F http://www.petermann-technik.de/fileadmin/petermann/pdf/crystal-oscillators/OCXO-14_PETERMANN-TECHNIK.pdf $ENDCMP # $CMP OH300 D 100MHz Sinewave output OCXO, low phase-noise, high stability, Connor-Winfield OH300 K OCXO F http://www.conwin.com/datasheets/cx/cx282.pdf $ENDCMP # $CMP SG-210SCD D Crystal Oscillator Low Profile / High Stability SPXO K Crystal Clock Oscillator F https://support.epson.biz/td/api/doc_check.php?mode=dl&lang=en&Parts=SG-210SED $ENDCMP # $CMP SG-210SDD D Crystal Oscillator Low Profile / High Stability SPXO K Crystal Clock Oscillator F https://support.epson.biz/td/api/doc_check.php?mode=dl&lang=en&Parts=SG-210SED $ENDCMP # $CMP SG-210SED D Crystal Oscillator Low Profile / High Stability SPXO K Crystal Clock Oscillator F https://support.epson.biz/td/api/doc_check.php?mode=dl&lang=en&Parts=SG-210SED $ENDCMP # $CMP SG-210STF D CMOS Crystal Oscillator SPXO K Crystal Clock Oscillator F https://support.epson.biz/td/api/doc_check.php?mode=dl&lang=en&Parts=SG-210STF $ENDCMP # $CMP SG-211 D CMOS Crystal Oscillator SPXO K Crystal Clock Oscillator F https://support.epson.biz/td/api/doc_check.php?mode=dl&lang=en&Parts=SG-211SEE $ENDCMP # $CMP SG-3030CM D 32.768kHz Crystal Oscillator (SPXO) K Crystal Clock Oscillator F https://support.epson.biz/td/api/doc_check.php?mode=dl&lang=en&Parts=SG-3030CM $ENDCMP # $CMP SG-5032CAN D CMOS Clock Oscillator 1 to 75 MHz K Crystal Clock Oscillator F https://support.epson.biz/td/api/doc_check.php?dl=brief_SG5032CAN&lang=en $ENDCMP # $CMP SG-5032CBN D CMOS Clock Oscillator 80 to 170 MHz K Crystal Clock Oscillator F https://support.epson.biz/td/api/doc_check.php?dl=brief_SG5032CBN&lang=en $ENDCMP # $CMP SG-5032CCN D CMOS Clock Oscillator 2.5 to 50 MHz K Crystal Clock Oscillator F https://support.epson.biz/td/api/doc_check.php?dl=brief_SG5032CCN&lang=en $ENDCMP # $CMP SG-51 D CMOS Crystal Clock Oscillator, DIP14-style plastic package K Crystal Clock Oscillator F https://support.epson.biz/td/api/doc_check.php?mode=dl&lang=en&Parts=SG-51P $ENDCMP # $CMP SG-531 D CMOS Crystal Clock Oscillator, DIP8-style plastic package K Crystal Clock Oscillator F https://support.epson.biz/td/api/doc_check.php?mode=dl&lang=en&Parts=SG-51P $ENDCMP # $CMP SG-615 D CMOS Clock Oscillator K Crystal Clock Oscillator F https://support.epson.biz/td/api/doc_check.php?mode=dl&lang=en&Parts=SG-51P $ENDCMP # $CMP SG-7050CAN D CMOS Clock Oscillator 1 to 75 MHz K Crystal Clock Oscillator F https://support.epson.biz/td/api/doc_check.php?dl=brief_SG7050CAN&lang=en $ENDCMP # $CMP SG-7050CBN D CMOS Clock Oscillator 80 to 170 MHz K Crystal Clock Oscillator F https://support.epson.biz/td/api/doc_check.php?dl=brief_SG7050CBN&lang=en $ENDCMP # $CMP SG-7050CCN D CMOS Clock Oscillator 2.5 to 50 MHz K Crystal Clock Oscillator F https://support.epson.biz/td/api/doc_check.php?dl=brief_SG7050CAN&lang=en $ENDCMP # $CMP SG-8002CA D CMOS Clock Oscillator 1 to 125 MHz K Crystal Clock Oscillator F https://support.epson.biz/td/api/doc_check.php?mode=dl&lang=en&Parts=SG-8002DC $ENDCMP # $CMP SG-8002CE D CMOS Clock Oscillator K Crystal Clock Oscillator F https://support.epson.biz/td/api/doc_check.php?mode=dl&lang=en&Parts=SG-8002DC $ENDCMP # $CMP SG-8002DB D Crystal Clock Oscillator, DIP14-style plastic package K Crystal Clock Oscillator F https://support.epson.biz/td/api/doc_check.php?dl=brief_SG-8002DB&lang=en $ENDCMP # $CMP SG-8002DC D Crystal Clock Oscillator, DIP8-style plastic package K Crystal Clock Oscillator F https://support.epson.biz/td/api/doc_check.php?mode=dl&lang=en&Parts=SG-8002DC $ENDCMP # $CMP SG-8002JA D CMOS Clock Oscillator K Crystal Clock Oscillator F https://support.epson.biz/td/api/doc_check.php?mode=dl&lang=en&Parts=SG-8002DC $ENDCMP # $CMP SG-8002JC D CMOS Clock Oscillator K Crystal Clock Oscillator F https://support.epson.biz/td/api/doc_check.php?mode=dl&lang=en&Parts=SG-8002DC $ENDCMP # $CMP SG-8002LB D CMOS Clock Oscillator 1 to 125 MHz K Crystal Clock Oscillator F https://support.epson.biz/td/api/doc_check.php?dl=brief_SG-8002LB&lang=en $ENDCMP # $CMP Si512A_2.5x3.2mm D Dual frequency crystal oscillator (XO) 100 kHz to 250 MHz, Single-ended CMOS output K Dual frequency crystal oscillator F https://www.silabs.com/documents/public/data-sheets/si512-13.pdf $ENDCMP # $CMP Si513A_2.5x3.2mm D Dual frequency crystal oscillator (XO) 100 kHz to 250 MHz, Single-ended CMOS output K Dual frequency crystal oscillator F https://www.silabs.com/documents/public/data-sheets/si512-13.pdf $ENDCMP # $CMP Si5351A-B-GM D I2C Programmable Any-Frequency CMOS Clock Generator, QFN-20 K CMOS Synth Oscillator I2C F https://www.silabs.com/documents/public/data-sheets/Si5351-B.pdf $ENDCMP # $CMP Si5351A-B-GT D I2C Programmable Any-Frequency CMOS Clock Generator, MSOP-8 K CMOS Synth Oscillator I2C F https://www.silabs.com/documents/public/data-sheets/Si5351-B.pdf $ENDCMP # $CMP Si5351B-B-GM D I2C Programmable Any-Frequency CMOS Clock Generator + VCXO, QFN-20 K CMOS Synth Oscillator I2C VCXO F https://www.silabs.com/documents/public/data-sheets/Si5351-B.pdf $ENDCMP # $CMP Si5351C-B-GM D I2C Programmable Any-Frequency CMOS Clock Generator, QFN-20 K CMOS Synth Oscillator I2C F https://www.silabs.com/documents/public/data-sheets/Si5351-B.pdf $ENDCMP # $CMP Si570 D 10 MHZ TO 1.4 GHZ I2C PROGRAMMABLE XO/VCXO K 10 MHZ TO 1.4 GHZ I2C PROGRAMMABLE XO/VCXO F http://www.silabs.com/Support%20Documents/TechnicalDocs/si570.pdf $ENDCMP # $CMP Si571 D 10 MHZ TO 1.4 GHZ I2C PROGRAMMABLE XO/VCXO K 10 MHZ TO 1.4 GHZ I2C PROGRAMMABLE XO/VCXO F http://www.silabs.com/Support%20Documents/TechnicalDocs/si570.pdf $ENDCMP # $CMP TCXO-14 D Temperature Compensated Crystal Clock Oscillator, DIP14-style metal package K Crystal Clock Oscillator F http://www.golledge.com/pdf/products/tcxos/gtxos14.pdf $ENDCMP # $CMP TCXO3 D Temperature compensated crystal oscillator K Temperature compensated crystal oscillator F http://www.hcelectronics.cz/PDF/TCXO3_A.pdf $ENDCMP # $CMP TFT660 D Crystal Clock Oscillator, DIP8-style metal package K Crystal Clock Oscillator F http://cdn-reichelt.de/documents/datenblatt/B400/OSZI.pdf $ENDCMP # $CMP TFT680 D Crystal Clock Oscillator, DIP14-style metal package K Crystal Clock Oscillator F http://cdn-reichelt.de/documents/datenblatt/B400/OSZI.pdf $ENDCMP # $CMP TXC-7C D CMOS SMD Crystal Clock Oscillator, TXC K CMOS SMD Crystal Clock Oscillator F http://www.txccorp.com/download/products/osc/7C_o.pdf $ENDCMP # $CMP VC-81 D Voltage-Controlled Crystal Clock Oscillator, DIP8-style metal package K Crystal Clock Oscillator F http://www.scsiglobal.com/Hosonic/Documents/SCSI-VC-81&83.pdf $ENDCMP # $CMP VC-83 D Voltage-Controlled Crystal Clock Oscillator, DIP8-style metal package K Crystal Clock Oscillator F http://www.scsiglobal.com/Hosonic/Documents/SCSI-VC-81&83.pdf $ENDCMP # $CMP VTCXO-14 D Voltage-Controlled Crystal Clock Oscillator, DIP14-style metal package K Crystal Clock Oscillator F http://www.golledge.com/pdf/products/tcxos/gtxos14.pdf $ENDCMP # $CMP XO32 D HCMOS Clock Oscillator K Crystal Clock Oscillator F http://cdn-reichelt.de/documents/datenblatt/B400/XO32.pdf $ENDCMP # $CMP XO53 D Low Power Consumption Clock Oscillator K Crystal Clock Oscillator F http://cdn-reichelt.de/documents/datenblatt/B400/XO53.pdf $ENDCMP # $CMP XO91 D HCMOS Clock Oscillator K Crystal Clock Oscillator F http://cdn-reichelt.de/documents/datenblatt/B400/XO91.pdf $ENDCMP # $CMP XUX51 D Low phase noise, quartz-based PLL oscillator, 0.016-1500 MHz, complementary output K OTP XHCMOS 1.8V VCXO F https://www.idt.com/document/dst/xu-family-datasheet $ENDCMP # $CMP XUX52 D Low phase noise, quartz-based PLL oscillator, 0.016-1500 MHz, complementary output K OTP XHCMOS 2.5V VCXO F https://www.idt.com/document/dst/xu-family-datasheet $ENDCMP # $CMP XUX53 D Low phase noise, quartz-based PLL oscillator, 0.016-1500 MHz, complementary output K OTP XHCMOS 3.3V VCXO F https://www.idt.com/document/dst/xu-family-datasheet $ENDCMP # $CMP XUX71 D Low phase noise, quartz-based PLL oscillator, 0.016-1500 MHz, complementary output K OTP XHCMOS 1.8V VCXO F https://www.idt.com/document/dst/xu-family-datasheet $ENDCMP # $CMP XUX72 D Low phase noise, quartz-based PLL oscillator, 0.016-1500 MHz, complementary output K OTP XHCMOS 2.5V VCXO F https://www.idt.com/document/dst/xu-family-datasheet $ENDCMP # $CMP XUX73 D Low phase noise, quartz-based PLL oscillator, 0.016-1500 MHz, complementary output K OTP XHCMOS 3.3V VCXO F https://www.idt.com/document/dst/xu-family-datasheet $ENDCMP # $CMP XUY51 D Low phase noise, quartz-based PLL oscillator, 0.016-1500 MHz, complementary output K OTP HCMOS 1.8V VCXO F https://www.idt.com/document/dst/xu-family-datasheet $ENDCMP # $CMP XUY52 D Low phase noise, quartz-based PLL oscillator, 0.016-1500 MHz, complementary output K OTP XHCMOS 2.5V VCXO F https://www.idt.com/document/dst/xu-family-datasheet $ENDCMP # $CMP XUY53 D Low phase noise, quartz-based PLL oscillator, 0.016-1500 MHz, complementary output K OTP XHCMOS 3.3V VCXO F https://www.idt.com/document/dst/xu-family-datasheet $ENDCMP # $CMP XUY71 D Low phase noise, quartz-based PLL oscillator, 0.016-1500 MHz, complementary output K OTP HCMOS 1.8V VCXO F https://www.idt.com/document/dst/xu-family-datasheet $ENDCMP # $CMP XUY72 D Low phase noise, quartz-based PLL oscillator, 0.016-1500 MHz, complementary output K OTP XHCMOS 2.5V VCXO F https://www.idt.com/document/dst/xu-family-datasheet $ENDCMP # $CMP XUY73 D Low phase noise, quartz-based PLL oscillator, 0.016-1500 MHz, complementary output K OTP XHCMOS 3.3V VCXO F https://www.idt.com/document/dst/xu-family-datasheet $ENDCMP # #End Doc Library ================================================ FILE: esim-cloud-backend/kicad-symbols/additional/Oscillator.lib ================================================ EESchema-LIBRARY Version 2.4 #encoding utf-8 # # 5P49V6965 # DEF 5P49V6965 U 0 20 Y Y 1 F N F0 "U" -450 1150 50 H V C CNN F1 "5P49V6965" 550 1150 50 H V C CNN F2 "Package_DFN_QFN:QFN-24-1EP_4x4mm_P0.5mm_EP2.8x2.8mm" -50 -1100 50 H I C CNN F3 "" -450 1150 50 H I C CNN $FPLIST QFN*1EP*4x4mm*P0.5mm* $ENDFPLIST DRAW S -400 1100 400 -1000 0 1 10 f X CLKIN 1 -500 300 100 R 50 50 1 1 I X VDDO4 10 300 1200 100 D 50 50 1 1 W X OUT4 11 500 -400 100 L 50 50 1 1 O X OUT4B 12 500 -500 100 L 50 50 1 1 O X OUT3B 13 500 -200 100 L 50 50 1 1 O X OUT3 14 500 -100 100 L 50 50 1 1 O X VDDO3 15 200 1200 100 D 50 50 1 1 W X OUT2B 16 500 100 100 L 50 50 1 1 O X OUT2 17 500 200 100 L 50 50 1 1 O X VDDO2 18 100 1200 100 D 50 50 1 1 W X OUT1B 19 500 400 100 L 50 50 1 1 O X CLKINB 2 -500 200 100 R 50 50 1 1 I X OUT1 20 500 500 100 L 50 50 1 1 O X VDDO1 21 0 1200 100 D 50 50 1 1 W X VDDD 22 -200 1200 100 D 50 50 1 1 W X VDDO0 23 -100 1200 100 D 50 50 1 1 W X OUT0_SEL_I2CB 24 500 -700 100 L 50 50 1 1 B X GND 25 0 -1100 100 U 50 50 1 1 W X XOUT 3 -500 700 100 R 50 50 1 1 O X XIN/REF 4 -500 500 100 R 50 50 1 1 I X VDDA 5 -300 1200 100 D 50 50 1 1 W X CLKSEL 6 -500 0 100 R 50 50 1 1 I X SD/OE 7 -500 -500 100 R 50 50 1 1 I X SEL1/SDA 8 -500 -200 100 R 50 50 1 1 B X SEL0/SCL 9 -500 -300 100 R 50 50 1 1 I ENDDRAW ENDDEF # # ABLNO # DEF ABLNO X 0 20 Y Y 1 F N F0 "X" -350 250 50 H V L CNN F1 "ABLNO" 150 250 50 H V L CNN F2 "Oscillator:Oscillator_SMD_Abracon_ABLNO" 0 -350 50 H I C CNN F3 "" -200 100 50 H I C CNN $FPLIST Oscillator*Abracon*ABLNO* $ENDFPLIST DRAW S -300 200 300 -200 0 1 10 f P 9 0 1 0 -225 75 -200 75 -200 125 -175 125 -175 75 -150 75 -150 125 -125 125 -125 75 N X Vctrl 1 -400 0 100 R 50 50 1 1 I X GND 2 0 -300 100 U 50 50 1 1 W X RFout 3 400 0 100 L 50 50 1 1 O X VDD 4 0 300 100 D 50 50 1 1 W ENDDRAW ENDDEF # # ACO-xxxMHz-A # DEF ACO-xxxMHz-A X 0 10 Y Y 1 F N F0 "X" -200 250 50 H V L CNN F1 "ACO-xxxMHz-A" 50 -250 50 H V L CNN F2 "Oscillator:Oscillator_DIP-14" 450 -350 50 H I C CNN F3 "" -275 125 50 H I C CNN $FPLIST Oscillator*DIP*14* $ENDFPLIST DRAW S -400 200 200 -200 0 1 10 f P 9 0 1 0 -275 100 -250 100 -250 150 -225 150 -225 100 -200 100 -200 150 -175 150 -175 100 N X Tri-State 1 -500 0 100 R 50 50 1 1 T X Vcc 14 0 300 100 D 50 50 1 1 W X GND 7 0 -300 100 U 50 50 1 1 W X OUT 8 300 0 100 L 50 50 1 1 O ENDDRAW ENDDEF # # ASCO # DEF ASCO X 0 20 Y Y 1 F N F0 "X" -300 250 50 H V L CNN F1 "ASCO" 50 -250 50 H V L CNN F2 "Oscillator:Oscillator_SMD_Abracon_ASCO-4Pin_1.6x1.2mm" 100 -350 50 H I C CNN F3 "" -225 125 50 H I C CNN $FPLIST Oscillator*Abracon*ASCO*1.6x1.2mm* $ENDFPLIST DRAW S -300 200 300 -200 0 1 10 f P 9 0 1 0 -225 100 -200 100 -200 150 -175 150 -175 100 -150 100 -150 150 -125 150 -125 100 N X Tri-State 1 -400 0 100 R 50 50 1 1 T X GND 2 0 -300 100 U 50 50 1 1 W X OUT 3 400 0 100 L 50 50 1 1 O X VDD 4 0 300 100 D 50 50 1 1 W ENDDRAW ENDDEF # # ASDMB-xxxMHz # DEF ASDMB-xxxMHz U 0 20 Y Y 1 F N F0 "U" -250 250 50 H V C CNN F1 "ASDMB-xxxMHz" 450 250 50 H V C CNN F2 "Oscillator:Oscillator_SMD_Abracon_ASDMB-4Pin_2.5x2.0mm" 0 0 50 H I C CNN F3 "" 300 450 50 H I C CNN $FPLIST Oscillator*SMD*Abracon*ASDMB*2.5x2.0mm* $ENDFPLIST DRAW S -300 200 300 -200 1 1 10 f P 9 1 1 0 -175 100 -150 100 -150 150 -125 150 -125 100 -100 100 -100 150 -75 150 -75 100 N X Standby 1 -400 0 100 R 50 50 1 1 I X GND 2 100 -300 100 U 50 50 1 1 W X Out 3 400 0 100 L 50 50 1 1 O X VDD 4 100 300 100 D 50 50 1 1 W ENDDRAW ENDDEF # # ASE-xxxMHz # DEF ASE-xxxMHz X 0 10 Y Y 1 F N F0 "X" -200 250 50 H V L CNN F1 "ASE-xxxMHz" 50 -250 50 H V L CNN F2 "Oscillator:Oscillator_SMD_Abracon_ASE-4Pin_3.2x2.5mm" 700 -350 50 H I C CNN F3 "" -100 0 50 H I C CNN $FPLIST Oscillator*SMD*Abracon*ASE*3.2x2.5mm* $ENDFPLIST DRAW S -200 200 200 -200 0 1 10 f P 10 0 1 0 -50 -30 -40 -30 -40 30 -20 30 -20 -30 0 -30 0 30 20 30 20 -30 30 -30 N X EN 1 -300 0 100 R 50 50 1 1 I X GND 2 0 -300 100 U 50 50 1 1 W X OUT 3 300 0 100 L 50 50 1 1 O X Vdd 4 0 300 100 D 50 50 1 1 W ENDDRAW ENDDEF # # ASV-xxxMHz # DEF ASV-xxxMHz X 0 10 Y Y 1 F N F0 "X" -200 250 50 H V L CNN F1 "ASV-xxxMHz" 50 -250 50 H V L CNN F2 "Oscillator:Oscillator_SMD_Abracon_ASV-4Pin_7.0x5.1mm" 700 -350 50 H I C CNN F3 "" -100 0 50 H I C CNN $FPLIST Oscillator*SMD*Abracon*ASV*7.0x5.1mm* $ENDFPLIST DRAW S -200 200 200 -200 0 1 10 f P 10 0 1 0 -50 -30 -40 -30 -40 30 -20 30 -20 -30 0 -30 0 30 20 30 20 -30 30 -30 N X EN 1 -300 0 100 R 50 50 1 1 I X GND 2 0 -300 100 U 50 50 1 1 W X OUT 3 300 0 100 L 50 50 1 1 O X Vdd 4 0 300 100 D 50 50 1 1 W ENDDRAW ENDDEF # # CXO_DIP14 # DEF CXO_DIP14 X 0 10 Y Y 1 F N F0 "X" -200 250 50 H V L CNN F1 "CXO_DIP14" 50 -250 50 H V L CNN F2 "Oscillator:Oscillator_DIP-14" 450 -350 50 H I C CNN F3 "" -100 0 50 H I C CNN ALIAS TFT680 GTXO-14T $FPLIST Oscillator*DIP*14* $ENDFPLIST DRAW S -200 200 200 -200 0 1 10 f P 9 0 1 0 -75 -25 -50 -25 -50 25 -25 25 -25 -25 0 -25 0 25 25 25 25 -25 N X EN 1 -300 0 100 R 50 50 1 1 I X Vcc 14 0 300 100 D 50 50 1 1 W X GND 7 0 -300 100 U 50 50 1 1 W X OUT 8 300 0 100 L 50 50 1 1 O ENDDRAW ENDDEF # # CXO_DIP8 # DEF CXO_DIP8 X 0 10 Y Y 1 F N F0 "X" -200 250 50 H V L CNN F1 "CXO_DIP8" 50 -250 50 H V L CNN F2 "Oscillator:Oscillator_DIP-8" 450 -350 50 H I C CNN F3 "" -100 0 50 H I C CNN ALIAS TFT660 $FPLIST Oscillator*DIP*8* $ENDFPLIST DRAW S -200 200 200 -200 0 1 10 f P 9 0 1 0 -75 -25 -50 -25 -50 25 -25 25 -25 -25 0 -25 0 25 25 25 25 -25 N X EN 1 -300 0 100 R 50 50 1 1 I X GND 4 0 -300 100 U 50 50 1 1 W X OUT 5 300 0 100 L 50 50 1 1 O X Vcc 8 0 300 100 D 50 50 1 1 W ENDDRAW ENDDEF # # DFA-S11 # DEF DFA-S11 X 0 10 Y Y 1 F N F0 "X" -200 250 50 H V L CNN F1 "DFA-S11" 50 -250 50 H V L CNN F2 "Oscillator:Oscillator_SMD_Fordahl_DFAS11-4Pin_7.0x5.0mm" 1100 -350 50 H I C CNN F3 "" -100 0 50 H I C CNN $FPLIST Oscillator*SMD*Fordahl*DFAS11*7.0x5.0mm* $ENDFPLIST DRAW S -200 200 300 -200 0 1 10 f P 8 0 1 0 25 -25 50 -25 50 25 75 25 75 -25 100 -25 100 25 125 25 N X Vctrl 1 -300 0 100 R 50 50 1 1 I X GND 2 0 -300 100 U 50 50 1 1 W X OUT 3 400 0 100 L 50 50 1 1 O X V+ 4 0 300 100 D 50 50 1 1 W ENDDRAW ENDDEF # # DFA-S15 # DEF DFA-S15 X 0 10 Y Y 1 F N F0 "X" -200 250 50 H V L CNN F1 "DFA-S15" 50 -250 50 H V L CNN F2 "Oscillator:Oscillator_SMD_Fordahl_DFAS15-4Pin_5.0x3.2mm" 1100 -350 50 H I C CNN F3 "" -100 0 50 H I C CNN $FPLIST Oscillator*SMD*Fordahl*DFAS15*5.0x3.2mm* $ENDFPLIST DRAW S -200 200 300 -200 0 1 10 f P 8 0 1 0 25 -25 50 -25 50 25 75 25 75 -25 100 -25 100 25 125 25 N X Vctrl 1 -300 0 100 R 50 50 1 1 I X GND 2 0 -300 100 U 50 50 1 1 W X OUT 3 400 0 100 L 50 50 1 1 O X V+ 4 0 300 100 D 50 50 1 1 W ENDDRAW ENDDEF # # DFA-S2 # DEF DFA-S2 X 0 10 Y Y 1 F N F0 "X" -200 250 50 H V L CNN F1 "DFA-S2" 50 -250 50 H V L CNN F2 "Oscillator:Oscillator_SMD_Fordahl_DFAS2-4Pin_7.3x5.1mm" 1100 -350 50 H I C CNN F3 "" -100 0 50 H I C CNN $FPLIST Oscillator*SMD*Fordahl*DFAS2*7.3x5.1mm* $ENDFPLIST DRAW S -200 200 300 -200 0 1 10 f P 8 0 1 0 25 -25 50 -25 50 25 75 25 75 -25 100 -25 100 25 125 25 N X Vctrl 1 -300 0 100 R 50 50 1 1 I X GND 2 0 -300 100 U 50 50 1 1 W X OUT 3 400 0 100 L 50 50 1 1 O X V+ 4 0 300 100 D 50 50 1 1 W ENDDRAW ENDDEF # # DFA-S3 # DEF DFA-S3 X 0 10 Y Y 1 F N F0 "X" -200 250 50 H V L CNN F1 "DFA-S3" 50 -250 50 H V L CNN F2 "Oscillator:Oscillator_SMD_Fordahl_DFAS3-4Pin_9.1x7.2mm" 1100 -350 50 H I C CNN F3 "" -100 0 50 H I C CNN $FPLIST Oscillator*SMD*Fordahl*DFAS3*9.1x7.2mm* $ENDFPLIST DRAW S -200 200 300 -200 0 1 10 f P 8 0 1 0 25 -25 50 -25 50 25 75 25 75 -25 100 -25 100 25 125 25 N X Vctrl 1 -300 0 100 R 50 50 1 1 I X GND 2 0 -300 100 U 50 50 1 1 W X OUT 3 400 0 100 L 50 50 1 1 O X V+ 4 0 300 100 D 50 50 1 1 W ENDDRAW ENDDEF # # DGOF5S3 # DEF DGOF5S3 X 0 10 Y Y 1 F N F0 "X" -200 250 50 H V L CNN F1 "DGOF5S3" 50 -250 50 H V L CNN F2 "Oscillator:Oscillator_DIP-14" 450 -350 50 H I C CNN F3 "" -100 0 50 H I C CNN ALIAS ACO-xxxMHz GTXO-S14T TCXO-14 $FPLIST Oscillator*DIP*14* $ENDFPLIST DRAW S -200 200 200 -200 0 1 10 f P 9 0 1 0 -100 -25 -75 -25 -75 25 -50 25 -50 -25 -25 -25 -25 25 0 25 0 -25 N X NC 1 -300 0 100 R 50 50 1 1 N N X Vcc 14 0 300 100 D 50 50 1 1 W X GND 7 0 -300 100 U 50 50 1 1 W X OUT 8 300 0 100 L 50 50 1 1 O ENDDRAW ENDDEF # # ECS-2520MV-xxx-xx # DEF ECS-2520MV-xxx-xx X 0 20 Y Y 1 F N F0 "X" -200 250 50 H V L CNN F1 "ECS-2520MV-xxx-xx" 50 -250 50 H V L CNN F2 "Oscillator:Oscillator_SMD_ECS_2520MV-xxx-xx-4Pin_2.5x2.0mm" 450 -350 50 H I C CNN F3 "" -175 125 50 H I C CNN $FPLIST Oscillator*SMD*ECS*2520MV*2.5x2.0mm* $ENDFPLIST DRAW S -300 200 300 -200 0 1 10 f P 9 0 1 0 -175 100 -150 100 -150 150 -125 150 -125 100 -100 100 -100 150 -75 150 -75 100 N X Tri-State 1 -400 0 100 R 50 50 1 1 I X GND 2 0 -300 100 U 50 50 1 1 W X OUT 3 400 0 100 L 50 50 1 1 O X VDD 4 0 300 100 D 50 50 1 1 W ENDDRAW ENDDEF # # IQXO-70 # DEF IQXO-70 X 0 10 Y Y 1 F N F0 "X" -200 250 50 H V L CNN F1 "IQXO-70" 50 -250 50 H V L CNN F2 "Oscillator:Oscillator_SMD_IQD_IQXO70-4Pin_7.5x5.0mm" 675 -325 50 H I C CNN F3 "" -100 0 50 H I C CNN $FPLIST Oscillator*SMD*IQD*IQXO70*7.5x5.0mm* $ENDFPLIST DRAW S -200 200 200 -200 0 1 10 f P 10 0 1 0 -40 -30 -30 -30 -30 30 -10 30 -10 -30 10 -30 10 30 30 30 30 -30 40 -30 N X E/B 1 -300 0 100 R 50 50 1 1 I X GND 2 0 -300 100 U 50 50 1 1 W X OUT 3 300 0 100 L 50 50 1 1 O X V+ 4 0 300 100 D 50 50 1 1 W ENDDRAW ENDDEF # # JTOS-50 # DEF JTOS-50 X 0 20 Y Y 1 F N F0 "X" -300 250 50 H V L CNN F1 "JTOS-50" 100 250 50 H V L CNN F2 "RF_Mini-Circuits:Mini-Circuits_BK377_LandPatternPL-005" 0 -400 50 H I C CNN F3 "" -200 100 50 H I C CNN ALIAS JTOS-25 $FPLIST Mini?Circuits*BK377* $ENDFPLIST DRAW A -225 100 25 -1799 -1 0 1 10 N -250 100 -200 100 A -175 100 25 1 1799 0 1 10 N -150 100 -200 100 A -125 100 25 -1799 -1 0 1 10 N -150 100 -100 100 A -75 100 25 1 1799 0 1 10 N -50 100 -100 100 S -300 200 300 -200 0 1 10 f X GND 1 0 -300 100 U 50 50 1 1 W X GND 10 0 -300 100 U 50 50 1 1 P N X GND 11 0 -300 100 U 50 50 1 1 P N X GND 12 0 -300 100 U 50 50 1 1 P N X RFout 13 400 0 100 L 50 50 1 1 O X GND 14 0 -300 100 U 50 50 1 1 P N X VCC 2 0 300 100 D 50 50 1 1 W X GND 3 0 -300 100 U 50 50 1 1 P N X GND 4 0 -300 100 U 50 50 1 1 P N X Vtune 5 -400 0 100 R 50 50 1 1 I X GND 6 0 -300 100 U 50 50 1 1 P N X GND 7 0 -300 100 U 50 50 1 1 P N X GND 8 0 -300 100 U 50 50 1 1 P N X GND 9 0 -300 100 U 50 50 1 1 P N ENDDRAW ENDDEF # # KT2520K-T # DEF KT2520K-T U 0 20 Y Y 1 F N F0 "U" -160 240 50 H V C CNN F1 "KT2520K-T" 170 240 50 H V C CNN F2 "Oscillator:Oscillator_SMD_Kyocera_2520-6Pin_2.5x2.0mm" -100 -100 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST Oscillator*SMD*Kyocera*2.5x2.0mm* $ENDFPLIST DRAW S -200 200 200 -200 0 1 10 f P 9 0 1 0 -180 -20 -150 -20 -150 30 -120 30 -120 -20 -90 -20 -90 30 -60 30 -60 -20 N X GND 1 0 -300 100 U 50 50 1 1 W X NC 2 -200 100 100 R 50 50 1 1 N N X GND 3 0 -300 100 U 50 50 1 1 P N X OUT 4 300 0 100 L 50 50 1 1 O X NC 5 -200 -100 100 R 50 50 1 1 N N X VCC 6 0 300 100 D 50 50 1 1 W ENDDRAW ENDDEF # # LTC6905xS5-80 # DEF LTC6905xS5-80 U 0 20 Y Y 1 F N F0 "U" -250 250 50 H V C CNN F1 "LTC6905xS5-80" 300 250 50 H V C CNN F2 "Package_TO_SOT_SMD:TSOT-23-5" 50 -250 50 H I L CNN F3 "" 300 450 50 H I C CNN ALIAS LTC6905xS5-96 LTC6905xS5-100 LTC6905xS5-133 $FPLIST TSOT?23?5* $ENDFPLIST DRAW S -300 200 300 -200 1 1 10 f P 9 1 1 0 125 50 150 50 150 100 175 100 175 50 200 50 200 100 225 100 225 50 N X VDD 1 0 300 100 D 50 50 1 1 W X GND 2 0 -300 100 U 50 50 1 1 W X OE 3 -400 100 100 R 50 50 1 1 I X DIV 4 -400 -100 100 R 50 50 1 1 I X OUT 5 400 0 100 L 50 50 1 1 O ENDDRAW ENDDEF # # MAX7375AXR805 # DEF MAX7375AXR805 U 0 10 Y Y 1 F N F0 "U" -100 250 50 H V R CNN F1 "MAX7375AXR805" 50 -250 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-323_SC-70" 1100 -350 50 H I C CNN F3 "" -100 0 50 H I C CNN ALIAS MAX7375AXR105 MAX7375AXR185 MAX7375AXR365 MAX7375AXR375 MAX7375AXR405 MAX7375AXR425 $FPLIST *SC?70* $ENDFPLIST DRAW S -200 200 300 -200 0 1 10 f P 8 0 1 0 -125 -25 -100 -25 -100 25 -75 25 -75 -25 -50 -25 -50 25 -25 25 N X V+ 1 0 300 100 D 50 50 1 1 W X CLOCK 2 400 0 100 L 50 50 1 1 O X GND 3 0 -300 100 U 50 50 1 1 W ENDDRAW ENDDEF # # MV267 # DEF MV267 U 0 20 Y Y 1 F N F0 "U" -300 250 50 H V C CNN F1 "MV267" 300 250 50 H V C CNN F2 "Oscillator:Oscillator_OCXO_Morion_MV267" 0 -350 50 H I C CNN F3 "" 0 250 50 H I C CNN $FPLIST Oscillator*OCXO*Morion*MV267* $ENDFPLIST DRAW A -175 0 25 -1799 -1 0 1 10 N -200 0 -150 0 A -125 0 25 1 1799 0 1 10 N -100 0 -150 0 A -75 0 25 -1799 -1 0 1 10 N -100 0 -50 0 A -25 0 25 1 1799 0 1 10 N 0 0 -50 0 S -300 200 300 -200 0 1 10 f X Uref 1 -400 100 100 R 50 50 1 1 O X Us 2 0 300 100 D 50 50 1 1 W X RF 3 400 0 100 L 50 50 1 1 O X GND 4 0 -300 100 U 50 50 1 1 W X Uin 5 -400 -100 100 R 50 50 1 1 I ENDDRAW ENDDEF # # MV317 # DEF MV317 U 0 20 Y Y 1 F N F0 "U" -300 250 50 H V C CNN F1 "MV317" 300 250 50 H V C CNN F2 "Oscillator:Oscillator_OCXO_Morion_MV317" 0 -300 50 H I C CNN F3 "" 0 250 50 H I C CNN $FPLIST Oscillator*OCXO*Morion*MV317* $ENDFPLIST DRAW A -175 0 25 -1799 -1 0 1 10 N -200 0 -150 0 A -125 0 25 1 1799 0 1 10 N -100 0 -150 0 A -75 0 25 -1799 -1 0 1 10 N -100 0 -50 0 A -25 0 25 1 1799 0 1 10 N 0 0 -50 0 S -300 200 300 -200 0 1 10 f X Uref 1 -400 100 100 R 50 50 1 1 O X Us 2 0 300 100 D 50 50 1 1 W X RF 3 400 0 100 L 50 50 1 1 O X GND 4 0 -300 100 U 50 50 1 1 W X Uin 5 -400 -100 100 R 50 50 1 1 I ENDDRAW ENDDEF # # NB3N502 # DEF NB3N502 U 0 20 Y Y 1 F N F0 "U" 100 600 50 H V L TNN F1 "NB3N502" 100 500 50 H V L TNN F2 "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" 50 -750 50 H I C CNN F3 "" 50 -850 50 H I C CNN $FPLIST SOIC*3.9x4.9mm*P1.27mm* $ENDFPLIST DRAW S -300 400 300 -400 0 1 10 f X X1/CLK 1 -400 100 100 R 50 50 1 1 I X VDD 2 0 500 100 D 50 50 1 1 W X GND 3 0 -500 100 U 50 50 1 1 W X REF 4 400 0 100 L 50 50 1 1 O X CLKOUT 5 400 -100 100 L 50 50 1 1 O X S0 6 -400 -100 100 R 50 50 1 1 I X S1 7 -400 -200 100 R 50 50 1 1 I X X2 8 -400 0 100 R 50 50 1 1 O ENDDRAW ENDDEF # # NB3N511 # DEF NB3N511 U 0 20 Y Y 1 F N F0 "U" 100 600 50 H V L TNN F1 "NB3N511" 100 500 50 H V L TNN F2 "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" 50 -750 50 H I C CNN F3 "" 50 -850 50 H I C CNN $FPLIST SOIC*3.9x4.9mm*P1.27mm* $ENDFPLIST DRAW S -300 400 300 -300 0 1 10 f X X1/ICLK 1 -400 200 100 R 50 50 1 1 I X VDD 2 0 500 100 D 50 50 1 1 W X GND 3 0 -400 100 U 50 50 1 1 W X S1 4 -400 -100 100 R 50 50 1 1 I X CLKOUT 5 400 0 100 L 50 50 1 1 O X S0 6 -400 0 100 R 50 50 1 1 I X OE 7 -400 -200 100 R 50 50 1 1 I X X2 8 -400 100 100 R 50 50 1 1 P ENDDRAW ENDDEF # # OCXO-14 # DEF OCXO-14 X 0 10 Y Y 1 F N F0 "X" -200 250 50 H V L CNN F1 "OCXO-14" 50 -250 50 H V L CNN F2 "Oscillator:Oscillator_DIP-14" 450 -350 50 H I C CNN F3 "" -300 100 50 H I C CNN ALIAS GTXO-14V GTXO-S14V VTCXO-14 $FPLIST Oscillator*DIP*14* $ENDFPLIST DRAW S -400 200 200 -200 0 1 10 f P 9 0 1 0 -275 75 -250 75 -250 125 -225 125 -225 75 -200 75 -200 125 -175 125 -175 75 N X Vcontrol 1 -500 0 100 R 50 50 1 1 I X Vcc 14 0 300 100 D 50 50 1 1 W X GND 7 0 -300 100 U 50 50 1 1 W X OUT 8 300 0 100 L 50 50 1 1 O ENDDRAW ENDDEF # # OH300 # DEF OH300 X 0 20 Y Y 1 F N F0 "X" -300 250 50 H V L CNN F1 "OH300" 150 250 50 H V L CNN F2 "Oscillator:Oscillator_SMD_OCXO_ConnorWinfield_OH300" 0 -350 50 H I C CNN F3 "" -200 100 50 H I C CNN $FPLIST Oscillator*SMD*OH300* $ENDFPLIST DRAW A -225 100 25 -1799 -1 0 1 10 N -250 100 -200 100 A -175 100 25 1 1799 0 1 10 N -150 100 -200 100 A -125 100 25 -1799 -1 0 1 10 N -150 100 -100 100 A -75 100 25 1 1799 0 1 10 N -50 100 -100 100 S -300 200 300 -200 0 1 10 f X Vcontrol 1 -400 0 100 R 50 50 1 1 I X NC 2 100 -200 100 U 50 50 1 1 N N X VCC 3 0 300 100 D 50 50 1 1 W X OUT 4 400 0 100 L 50 50 1 1 O X NC 5 -100 -200 100 U 50 50 1 1 N N X NC 6 -200 -200 100 U 50 50 1 1 N N X GND 7 0 -300 100 U 50 50 1 1 W ENDDRAW ENDDEF # # SG-210SED # DEF SG-210SED X 0 10 Y Y 1 F N F0 "X" -200 250 50 H V L CNN F1 "SG-210SED" 50 -250 50 H V L CNN F2 "Oscillator:Oscillator_SMD_SeikoEpson_SG210-4Pin_2.5x2.0mm" 450 -350 50 H I C CNN F3 "" -100 0 50 H I C CNN ALIAS SG-210SDD SG-210SCD $FPLIST Oscillator*SMD*SeikoEpson*SG210*2.5x2.0mm* $ENDFPLIST DRAW S -200 200 200 -200 0 1 10 f P 9 0 1 0 -75 -25 -50 -25 -50 25 -25 25 -25 -25 0 -25 0 25 25 25 25 -25 N X OE 1 -300 0 100 R 50 50 1 1 I X GND 2 0 -300 100 U 50 50 1 1 W X OUT 3 300 0 100 L 50 50 1 1 O X Vcc 4 0 300 100 D 50 50 1 1 W ENDDRAW ENDDEF # # SG-210STF # DEF SG-210STF X 0 10 Y Y 1 F N F0 "X" -200 250 50 H V L CNN F1 "SG-210STF" 50 -250 50 H V L CNN F2 "Oscillator:Oscillator_SMD_SeikoEpson_SG210-4Pin_2.5x2.0mm" 450 -350 50 H I C CNN F3 "" -100 0 50 H I C CNN ALIAS SG-211 $FPLIST Oscillator*SMD*SeikoEpson*SG210*2.5x2.0mm* $ENDFPLIST DRAW S -200 200 200 -200 0 1 10 f P 9 0 1 0 -75 -25 -50 -25 -50 25 -25 25 -25 -25 0 -25 0 25 25 25 25 -25 N X ~ST~ 1 -300 0 100 R 50 50 1 1 I X GND 2 0 -300 100 U 50 50 1 1 W X OUT 3 300 0 100 L 50 50 1 1 O X Vcc 4 0 300 100 D 50 50 1 1 W ENDDRAW ENDDEF # # SG-3030CM # DEF SG-3030CM X 0 20 Y Y 1 F N F0 "X" -200 -250 50 H V L CNN F1 "SG-3030CM" 50 -250 50 H V L CNN F2 "Oscillator:Oscillator_SMD_SeikoEpson_SG3030CM" 0 -350 50 H I C CNN F3 "" -100 0 50 H I C CNN $FPLIST Oscillator*SMD*SeikoEpson*SG3030CM* $ENDFPLIST DRAW S -200 200 200 -200 0 1 10 f P 9 0 1 0 -75 -25 -50 -25 -50 25 -25 25 -25 -25 0 -25 0 25 25 25 25 -25 N X VIO 1 100 300 100 D 50 50 1 1 W X GND 2 0 -300 100 U 50 50 1 1 W X OUT 3 300 0 100 L 50 50 1 1 O X Vcc 4 -100 300 100 D 50 50 1 1 W ENDDRAW ENDDEF # # SG-5032CAN # DEF SG-5032CAN X 0 10 Y Y 1 F N F0 "X" -200 250 50 H V L CNN F1 "SG-5032CAN" 50 -250 50 H V L CNN F2 "Oscillator:Oscillator_SMD_SeikoEpson_SG8002LB-4Pin_5.0x3.2mm" 700 -350 50 H I C CNN F3 "" -100 0 50 H I C CNN ALIAS SG-5032CBN $FPLIST Oscillator*SMD*SeikoEpson*SG8002LB*5.0x3.2mm* $ENDFPLIST DRAW S -200 200 200 -200 0 1 10 f P 10 0 1 0 -50 -30 -40 -30 -40 30 -20 30 -20 -30 0 -30 0 30 20 30 20 -30 30 -30 N X ~ST 1 -300 0 100 R 50 50 1 1 I X GND 2 0 -300 100 U 50 50 1 1 W X OUT 3 300 0 100 L 50 50 1 1 O X VCC 4 0 300 100 D 50 50 1 1 W ENDDRAW ENDDEF # # SG-7050CAN # DEF SG-7050CAN X 0 10 Y Y 1 F N F0 "X" -200 250 50 H V L CNN F1 "SG-7050CAN" 50 -250 50 H V L CNN F2 "Oscillator:Oscillator_SMD_SeikoEpson_SG8002CA-4Pin_7.0x5.0mm" 700 -350 50 H I C CNN F3 "" -100 0 50 H I C CNN ALIAS SG-7050CBN $FPLIST Oscillator*SMD*SeikoEpson*SG8002CA*7.0x5.0mm* $ENDFPLIST DRAW S -200 200 200 -200 0 1 10 f P 10 0 1 0 -50 -30 -40 -30 -40 30 -20 30 -20 -30 0 -30 0 30 20 30 20 -30 30 -30 N X ~ST 1 -300 0 100 R 50 50 1 1 I X GND 2 0 -300 100 U 50 50 1 1 W X OUT 3 300 0 100 L 50 50 1 1 O X VCC 4 0 300 100 D 50 50 1 1 W ENDDRAW ENDDEF # # SG-8002CA # DEF SG-8002CA X 0 10 Y Y 1 F N F0 "X" -200 250 50 H V L CNN F1 "SG-8002CA" 50 -250 50 H V L CNN F2 "Oscillator:Oscillator_SMD_SeikoEpson_SG8002CA-4Pin_7.0x5.0mm" 700 -350 50 H I C CNN F3 "" -100 0 50 H I C CNN ALIAS SG-7050CCN $FPLIST Oscillator*SMD*SeikoEpson*SG8002CA*7.0x5.0mm* $ENDFPLIST DRAW S -200 200 200 -200 0 1 10 f P 10 0 1 0 -50 -30 -40 -30 -40 30 -20 30 -20 -30 0 -30 0 30 20 30 20 -30 30 -30 N X OE 1 -300 0 100 R 50 50 1 1 I X GND 2 0 -300 100 U 50 50 1 1 W X OUT 3 300 0 100 L 50 50 1 1 O X Vcc 4 0 300 100 D 50 50 1 1 W ENDDRAW ENDDEF # # SG-8002CE # DEF SG-8002CE X 0 10 Y Y 1 F N F0 "X" -200 250 50 H V L CNN F1 "SG-8002CE" 50 -250 50 H V L CNN F2 "Oscillator:Oscillator_SMD_SeikoEpson_SG8002CE-4Pin_3.2x2.5mm" 700 -350 50 H I C CNN F3 "" -100 0 50 H I C CNN $FPLIST Oscillator*SMD*SeikoEpson*SG8002CE*3.2x2.5mm* $ENDFPLIST DRAW S -200 200 200 -200 0 1 10 f P 10 0 1 0 -50 -30 -40 -30 -40 30 -20 30 -20 -30 0 -30 0 30 20 30 20 -30 30 -30 N X OE 1 -300 0 100 R 50 50 1 1 I X GND 2 0 -300 100 U 50 50 1 1 W X OUT 3 300 0 100 L 50 50 1 1 O X Vcc 4 0 300 100 D 50 50 1 1 W ENDDRAW ENDDEF # # SG-8002DB # DEF SG-8002DB X 0 10 Y Y 1 F N F0 "X" -200 250 50 H V L CNN F1 "SG-8002DB" 50 -250 50 H V L CNN F2 "Oscillator:Oscillator_SeikoEpson_SG-8002DB" 450 -350 50 H I C CNN F3 "" -100 0 50 H I C CNN ALIAS SG-51 $FPLIST Oscillator*SeikoEpson*SG?8002DB* $ENDFPLIST DRAW S -200 200 200 -200 0 1 10 f P 9 0 1 0 -75 -25 -50 -25 -50 25 -25 25 -25 -25 0 -25 0 25 25 25 25 -25 N X OE 1 -300 0 100 R 50 50 1 1 I X Vcc 14 0 300 100 D 50 50 1 1 W X GND 7 0 -300 100 U 50 50 1 1 W X OUT 8 300 0 100 L 50 50 1 1 O ENDDRAW ENDDEF # # SG-8002DC # DEF SG-8002DC X 0 10 Y Y 1 F N F0 "X" -200 250 50 H V L CNN F1 "SG-8002DC" 50 -250 50 H V L CNN F2 "Oscillator:Oscillator_SeikoEpson_SG-8002DC" 450 -350 50 H I C CNN F3 "" -100 0 50 H I C CNN ALIAS SG-531 $FPLIST Oscillator*SeikoEpson*SG?8002DC* $ENDFPLIST DRAW S -200 200 200 -200 0 1 10 f P 9 0 1 0 -75 -25 -50 -25 -50 25 -25 25 -25 -25 0 -25 0 25 25 25 25 -25 N X OE 1 -300 0 100 R 50 50 1 1 I X GND 4 0 -300 100 U 50 50 1 1 W X OUT 5 300 0 100 L 50 50 1 1 O X Vcc 8 0 300 100 D 50 50 1 1 W ENDDRAW ENDDEF # # SG-8002JA # DEF SG-8002JA X 0 10 Y Y 1 F N F0 "X" -200 250 50 H V L CNN F1 "SG-8002JA" 50 -250 50 H V L CNN F2 "Oscillator:Oscillator_SMD_SeikoEpson_SG8002JA-4Pin_14.0x8.7mm" 700 -350 50 H I C CNN F3 "" -100 0 50 H I C CNN ALIAS SG-615 $FPLIST Oscillator*SMD*SeikoEpson*SG8002JA*14.0x8.7mm* $ENDFPLIST DRAW S -200 200 200 -200 0 1 10 f P 10 0 1 0 -50 -30 -40 -30 -40 30 -20 30 -20 -30 0 -30 0 30 20 30 20 -30 30 -30 N X OE 1 -300 0 100 R 50 50 1 1 I X GND 2 0 -300 100 U 50 50 1 1 W X OUT 3 300 0 100 L 50 50 1 1 O X Vcc 4 0 300 100 D 50 50 1 1 W ENDDRAW ENDDEF # # SG-8002JC # DEF SG-8002JC X 0 10 Y Y 1 F N F0 "X" -200 250 50 H V L CNN F1 "SG-8002JC" 50 -250 50 H V L CNN F2 "Oscillator:Oscillator_SMD_SeikoEpson_SG8002JC-4Pin_10.5x5.0mm" 700 -350 50 H I C CNN F3 "" -100 0 50 H I C CNN $FPLIST Oscillator*SMD*SeikoEpson*SG8002JC*10.5x5.0mm* $ENDFPLIST DRAW S -200 200 200 -200 0 1 10 f P 10 0 1 0 -50 -30 -40 -30 -40 30 -20 30 -20 -30 0 -30 0 30 20 30 20 -30 30 -30 N X OE 1 -300 0 100 R 50 50 1 1 I X GND 2 0 -300 100 U 50 50 1 1 W X OUT 3 300 0 100 L 50 50 1 1 O X Vcc 4 0 300 100 D 50 50 1 1 W ENDDRAW ENDDEF # # SG-8002LB # DEF SG-8002LB X 0 10 Y Y 1 F N F0 "X" -200 250 50 H V L CNN F1 "SG-8002LB" 50 -250 50 H V L CNN F2 "Oscillator:Oscillator_SMD_SeikoEpson_SG8002LB-4Pin_5.0x3.2mm" 700 -350 50 H I C CNN F3 "" -100 0 50 H I C CNN ALIAS SG-5032CCN $FPLIST Oscillator*SMD*SeikoEpson*SG8002LB*5.0x3.2mm* $ENDFPLIST DRAW S -200 200 200 -200 0 1 10 f P 10 0 1 0 -50 -30 -40 -30 -40 30 -20 30 -20 -30 0 -30 0 30 20 30 20 -30 30 -30 N X OE 1 -300 0 100 R 50 50 1 1 I X GND 2 0 -300 100 U 50 50 1 1 W X OUT 3 300 0 100 L 50 50 1 1 O X Vcc 4 0 300 100 D 50 50 1 1 W ENDDRAW ENDDEF # # Si512A_2.5x3.2mm # DEF Si512A_2.5x3.2mm U 0 20 Y Y 1 F N F0 "U" -300 350 50 H V L CNN F1 "Si512A_2.5x3.2mm" 100 -350 50 H V L CNN F2 "Oscillator:Oscillator_SMD_Silicon_Labs_LGA-6_2.5x3.2mm_P1.25mm" 0 -450 50 H I C CNN F3 "" -100 0 50 H I C CNN $FPLIST Oscillator*SMD*Silicon*Labs*LGA*2.5x3.2mm*P1.25mm* $ENDFPLIST DRAW S -300 300 300 -300 0 1 10 f P 10 0 1 0 -50 -30 -40 -30 -40 30 -20 30 -20 -30 0 -30 0 30 20 30 20 -30 30 -30 N X FS 1 -400 100 100 R 50 50 1 1 I X OE 2 -400 -100 100 R 50 50 1 1 I X GND 3 0 -400 100 U 50 50 1 1 W X CLK 4 400 -100 100 L 50 50 1 1 O X NC 5 300 100 100 L 50 50 1 1 N N X VDD 6 0 400 100 D 50 50 1 1 W ENDDRAW ENDDEF # # Si513A_2.5x3.2mm # DEF Si513A_2.5x3.2mm U 0 20 Y Y 1 F N F0 "U" -250 350 50 H V L CNN F1 "Si513A_2.5x3.2mm" 100 -350 50 H V L CNN F2 "Oscillator:Oscillator_SMD_Silicon_Labs_LGA-6_2.5x3.2mm_P1.25mm" 0 -450 50 H I C CNN F3 "" -100 0 50 H I C CNN $FPLIST Oscillator*SMD*Silicon*Labs*LGA*2.5x3.2mm*P1.25mm* $ENDFPLIST DRAW S -300 300 300 -300 0 1 10 f P 10 0 1 0 -50 -30 -40 -30 -40 30 -20 30 -20 -30 0 -30 0 30 20 30 20 -30 30 -30 N X OE 1 -400 100 100 R 50 50 1 1 I X FS 2 -400 -100 100 R 50 50 1 1 I X GND 3 0 -400 100 U 50 50 1 1 W X CLK 4 400 -100 100 L 50 50 1 1 O X NC 5 300 100 100 L 50 50 1 1 N N X VDD 6 0 400 100 D 50 50 1 1 W ENDDRAW ENDDEF # # Si5351A-B-GM # DEF Si5351A-B-GM U 0 20 Y Y 1 F N F0 "U" -500 850 50 H V C CNN F1 "Si5351A-B-GM" -550 -900 50 H V C CNN F2 "Package_DFN_QFN:QFN-20-1EP_4x4mm_P0.5mm_EP2.7x2.7mm" 0 -1200 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST QFN*1EP*4x4mm*P0.5mm* $ENDFPLIST DRAW S -500 800 500 -800 1 1 10 f X XA 1 -600 700 100 R 50 50 1 1 I X VDDOB 10 0 900 100 D 50 50 1 1 W X VDDOA 11 -100 900 100 D 50 50 1 1 W X CLK1 12 600 500 100 L 50 50 1 1 O X CLK0 13 600 700 100 L 50 50 1 1 O X VDDOD 14 200 900 100 D 50 50 1 1 W X CLK7 15 600 -700 100 L 50 50 1 1 O X CLK6 16 600 -500 100 L 50 50 1 1 O X CLK5 17 600 -300 100 L 50 50 1 1 O X VDDOC 18 100 900 100 D 50 50 1 1 W X CLK4 19 600 -100 100 L 50 50 1 1 O X XB 2 -600 500 100 R 50 50 1 1 I X VDD 20 -200 900 100 D 50 50 1 1 W X GND 21 0 -900 100 U 50 50 1 1 W X A0 3 -600 -100 100 R 50 50 1 1 I X SCL 4 -600 -300 100 R 50 50 1 1 I X SDA 5 -600 -200 100 R 50 50 1 1 B X SSEN 6 -600 -700 100 R 50 50 1 1 I X OEB 7 -600 -600 100 R 50 50 1 1 I X CLK3 8 600 100 100 L 50 50 1 1 O X CLK2 9 600 300 100 L 50 50 1 1 O ENDDRAW ENDDEF # # Si5351A-B-GT # DEF Si5351A-B-GT U 0 20 Y Y 1 F N F0 "U" -350 450 50 H V C CNN F1 "Si5351A-B-GT" -500 -500 50 H V C CNN F2 "Package_SO:MSOP-10_3x3mm_P0.5mm" 0 -800 50 H I C CNN F3 "" -350 -100 50 H I C CNN $FPLIST MSOP*3x3mm*P0.5mm* $ENDFPLIST DRAW S -400 400 400 -400 0 1 10 f X VDD 1 -100 500 100 D 50 50 1 1 W X CLK0 10 500 200 100 L 50 50 1 1 O X XA 2 -500 300 100 R 50 50 1 1 I X XB 3 -500 100 100 R 50 50 1 1 I X SCL 4 -500 -200 100 R 50 50 1 1 I X SDA 5 -500 -300 100 R 50 50 1 1 B X CLK2 6 500 -200 100 L 50 50 1 1 O X VDDO 7 100 500 100 D 50 50 1 1 W X GND 8 0 -500 100 U 50 50 1 1 W X CLK1 9 500 0 100 L 50 50 1 1 O ENDDRAW ENDDEF # # Si5351B-B-GM # DEF Si5351B-B-GM U 0 20 Y Y 1 F N F0 "U" -500 850 50 H V C CNN F1 "Si5351B-B-GM" -550 -900 50 H V C CNN F2 "Package_DFN_QFN:QFN-20-1EP_4x4mm_P0.5mm_EP2.7x2.7mm" 0 -1200 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST QFN*1EP*4x4mm*P0.5mm* $ENDFPLIST DRAW S -500 800 500 -800 1 1 10 f X XA 1 -600 700 100 R 50 50 1 1 I X VDDOB 10 0 900 100 D 50 50 1 1 W X VDDOA 11 -100 900 100 D 50 50 1 1 W X CLK1 12 600 500 100 L 50 50 1 1 O X CLK0 13 600 700 100 L 50 50 1 1 O X VDDOD 14 200 900 100 D 50 50 1 1 W X CLK7 15 600 -700 100 L 50 50 1 1 O X CLK6 16 600 -500 100 L 50 50 1 1 O X CLK5 17 600 -300 100 L 50 50 1 1 O X VDDOC 18 100 900 100 D 50 50 1 1 W X CLK4 19 600 -100 100 L 50 50 1 1 O X XB 2 -600 500 100 R 50 50 1 1 I X VDD 20 -200 900 100 D 50 50 1 1 W X GND 21 0 -900 100 U 50 50 1 1 W X VC 3 -600 200 100 R 50 50 1 1 I X SCL 4 -600 -300 100 R 50 50 1 1 I X SDA 5 -600 -200 100 R 50 50 1 1 B X SSEN 6 -600 -700 100 R 50 50 1 1 I X OEB 7 -600 -600 100 R 50 50 1 1 I X CLK3 8 600 100 100 L 50 50 1 1 O X CLK2 9 600 300 100 L 50 50 1 1 O ENDDRAW ENDDEF # # Si5351C-B-GM # DEF Si5351C-B-GM U 0 20 Y Y 1 F N F0 "U" -500 850 50 H V C CNN F1 "Si5351C-B-GM" -550 -900 50 H V C CNN F2 "Package_DFN_QFN:QFN-20-1EP_4x4mm_P0.5mm_EP2.7x2.7mm" 0 -1200 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST QFN*1EP*4x4mm*P0.5mm* $ENDFPLIST DRAW S -500 800 500 -800 1 1 10 f X XA 1 -600 700 100 R 50 50 1 1 I X VDDOB 10 0 900 100 D 50 50 1 1 W X VDDOA 11 -100 900 100 D 50 50 1 1 W X CLK1 12 600 500 100 L 50 50 1 1 O X CLK0 13 600 700 100 L 50 50 1 1 O X VDDOD 14 200 900 100 D 50 50 1 1 W X CLK7 15 600 -700 100 L 50 50 1 1 O X CLK6 16 600 -500 100 L 50 50 1 1 O X CLK5 17 600 -300 100 L 50 50 1 1 O X VDDOC 18 100 900 100 D 50 50 1 1 W X CLK4 19 600 -100 100 L 50 50 1 1 O X XB 2 -600 500 100 R 50 50 1 1 I X VDD 20 -200 900 100 D 50 50 1 1 W X GND 21 0 -900 100 U 50 50 1 1 W X INTR 3 -600 -400 100 R 50 50 1 1 O X SCL 4 -600 -300 100 R 50 50 1 1 I X SDA 5 -600 -200 100 R 50 50 1 1 B X CLKIN 6 -600 200 100 R 50 50 1 1 I X OEB 7 -600 -600 100 R 50 50 1 1 I X CLK3 8 600 100 100 L 50 50 1 1 O X CLK2 9 600 300 100 L 50 50 1 1 O ENDDRAW ENDDEF # # Si570 # DEF Si570 U 0 40 Y Y 1 F N F0 "U" -350 350 50 H V C CNN F1 "Si570" 300 -350 50 H V C CNN F2 "Oscillator:Oscillator_SMD_SI570_SI571_Standard" 0 -300 50 H I C CNN F3 "" -400 700 50 H I C CNN $FPLIST Oscillator*SI570*SI571* $ENDFPLIST DRAW S -400 300 400 -300 0 1 10 f P 10 0 1 0 -75 -50 -50 -50 -50 50 0 50 0 -50 50 -50 50 50 100 50 100 -50 125 -50 N X NC 1 -400 200 100 R 50 50 1 1 N N X OE 2 -500 100 100 R 50 50 1 1 I X GND 3 0 -400 100 U 50 50 1 1 W X CLK+ 4 500 100 100 L 50 50 1 1 O X CLK- 5 500 -100 100 L 50 50 1 1 O X Vcc 6 0 400 100 D 50 50 1 1 W X SDA 7 -500 -100 100 R 50 50 1 1 B X SCL 8 -500 -200 100 R 50 50 1 1 I ENDDRAW ENDDEF # # Si571 # DEF Si571 U 0 40 Y Y 1 F N F0 "U" -400 400 50 H V C CNN F1 "Si571" 350 -400 50 H V C CNN F2 "Oscillator:Oscillator_SMD_SI570_SI571_Standard" -550 600 50 H I C CNN F3 "" -400 700 50 H I C CNN $FPLIST Oscillator*SI570*SI571* $ENDFPLIST DRAW S -450 350 450 -350 0 1 10 f P 10 0 1 0 -75 -50 -50 -50 -50 50 0 50 0 -50 50 -50 50 50 100 50 100 -50 125 -50 N X Vc 1 -600 200 150 R 50 50 1 1 I X OE 2 -600 100 150 R 50 50 1 1 I X GND 3 0 -500 150 U 50 50 1 1 W X CLK+ 4 600 100 150 L 50 50 1 1 O X CLK- 5 600 -100 150 L 50 50 1 1 O X Vcc 6 0 500 150 D 50 50 1 1 W X SDA 7 -600 -100 150 R 50 50 1 1 B X SCL 8 -600 -200 150 R 50 50 1 1 I ENDDRAW ENDDEF # # TCXO3 # DEF TCXO3 X 0 20 Y Y 1 F N F0 "X" 325 450 50 H V L CNN F1 "TCXO3" 325 350 50 H V L CNN F2 "" -550 250 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW S -500 -200 400 300 0 1 10 f P 10 0 1 0 -100 0 -75 0 -75 100 -25 100 -25 0 25 0 25 100 75 100 75 0 100 0 N X FREQ 1 500 100 100 L 50 50 1 1 O X GND 10 -200 -300 100 U 50 50 1 1 W X GND 11 -100 -300 100 U 50 50 1 1 W X GND 12 0 -300 100 U 50 50 1 1 W X NC 13 300 -200 100 U 50 50 1 1 N N X NC 14 400 0 100 L 50 50 1 1 N N X +5V 15 0 400 100 D 50 50 1 1 W X NC 16 200 300 100 D 50 50 1 1 N N X NC 17 -100 300 100 D 50 50 1 1 N N X Vctrl 18 -600 100 100 R 50 50 1 1 I X NC 19 -300 300 100 D 50 50 1 1 N N X NC 2 400 200 100 L 50 50 1 1 N N X NC 20 -400 300 100 D 50 50 1 1 N N X NC 21 300 300 100 D 50 50 1 1 N N X NC 22 400 -100 100 L 50 50 1 1 N N X GND 23 100 -300 100 U 50 50 1 1 W X URef 3 -200 400 100 D 50 50 1 1 w X NC 4 -500 200 100 R 50 50 1 1 N N X NC 5 100 300 100 D 50 50 1 1 N N X NC 6 -500 0 100 R 50 50 1 1 N N X NC 7 -500 -100 100 R 50 50 1 1 N N X NC 8 -300 -200 100 U 50 50 1 1 N N X NC 9 200 -200 100 U 50 50 1 1 N N ENDDRAW ENDDEF # # TXC-7C # DEF TXC-7C X 0 10 Y Y 1 F N F0 "X" -200 250 50 H V L CNN F1 "TXC-7C" 50 -250 50 H V L CNN F2 "Oscillator:Oscillator_SMD_TXC_7C-4Pin_5.0x3.2mm" 700 -350 50 H I C CNN F3 "" -100 0 50 H I C CNN $FPLIST Oscillator*SMD*TXC*7C*5.0x3.2mm* $ENDFPLIST DRAW S -200 200 200 -200 0 1 10 f P 10 0 1 0 -50 -30 -40 -30 -40 30 -20 30 -20 -30 0 -30 0 30 20 30 20 -30 30 -30 N X EN 1 -300 0 100 R 50 50 1 1 I X GND 2 0 -300 100 U 50 50 1 1 W X OUT 3 300 0 100 L 50 50 1 1 O X Vdd 4 0 300 100 D 50 50 1 1 W ENDDRAW ENDDEF # # VC-81 # DEF VC-81 X 0 10 Y Y 1 F N F0 "X" -200 250 50 H V L CNN F1 "VC-81" 50 -250 50 H V L CNN F2 "Oscillator:Oscillator_DIP-8" 450 -350 50 H I C CNN F3 "" -300 100 50 H I C CNN ALIAS VC-83 $FPLIST Oscillator*DIP*8* $ENDFPLIST DRAW S -400 200 200 -200 0 1 10 f P 9 0 1 0 -275 75 -250 75 -250 125 -225 125 -225 75 -200 75 -200 125 -175 125 -175 75 N X Vcontrol 1 -500 0 100 R 50 50 1 1 I X GND 4 0 -300 100 U 50 50 1 1 W X OUT 5 300 0 100 L 50 50 1 1 O X Vcc 8 0 300 100 D 50 50 1 1 W ENDDRAW ENDDEF # # XO32 # DEF XO32 X 0 10 Y Y 1 F N F0 "X" -200 250 50 H V L CNN F1 "XO32" 50 -250 50 H V L CNN F2 "Oscillator:Oscillator_SMD_EuroQuartz_XO32-4Pin_3.2x2.5mm" 700 -350 50 H I C CNN F3 "" -100 0 50 H I C CNN $FPLIST Oscillator*SMD*EuroQuartz*XO32*3.2x2.5mm* $ENDFPLIST DRAW S -200 200 200 -200 0 1 10 f P 10 0 1 0 -50 -30 -40 -30 -40 30 -20 30 -20 -30 0 -30 0 30 20 30 20 -30 30 -30 N X EN 1 -300 0 100 R 50 50 1 1 I X GND 2 0 -300 100 U 50 50 1 1 W X OUT 3 300 0 100 L 50 50 1 1 O X V+ 4 0 300 100 D 50 50 1 1 W ENDDRAW ENDDEF # # XO53 # DEF XO53 X 0 10 Y Y 1 F N F0 "X" -200 250 50 H V L CNN F1 "XO53" 50 -250 50 H V L CNN F2 "Oscillator:Oscillator_SMD_EuroQuartz_XO53-4Pin_5.0x3.2mm" 700 -350 50 H I C CNN F3 "" -100 0 50 H I C CNN $FPLIST Oscillator*SMD*EuroQuartz*XO53*5.0x3.2mm* $ENDFPLIST DRAW S -200 200 200 -200 0 1 10 f P 10 0 1 0 30 -30 20 -30 20 30 0 30 0 -30 -20 -30 -20 30 -40 30 -40 -30 -50 -30 N X EN 1 -300 0 100 R 50 50 1 1 I X GND 2 0 -300 100 U 50 50 1 1 W X OUT 3 300 0 100 L 50 50 1 1 O X V+ 4 0 300 100 D 50 50 1 1 W ENDDRAW ENDDEF # # XO91 # DEF XO91 X 0 10 Y Y 1 F N F0 "X" -200 250 50 H V L CNN F1 "XO91" 50 -250 50 H V L CNN F2 "Oscillator:Oscillator_SMD_EuroQuartz_XO91-4Pin_7.0x5.0mm" 700 -350 50 H I C CNN F3 "" -100 0 50 H I C CNN $FPLIST Oscillator*SMD*EuroQuartz*XO91*7.0x5.0mm* $ENDFPLIST DRAW S -200 200 200 -200 0 1 10 f P 10 0 1 0 30 -30 20 -30 20 30 0 30 0 -30 -20 -30 -20 30 -40 30 -40 -30 -50 -30 N X EN 1 -300 0 100 R 50 50 1 1 I X GND 2 0 -300 100 U 50 50 1 1 W X OUT 3 300 0 100 L 50 50 1 1 O X V+ 4 0 300 100 D 50 50 1 1 W ENDDRAW ENDDEF # # XUX51 # DEF XUX51 U 0 20 Y Y 1 F N F0 "U" -250 250 50 H V C CNN F1 "XUX51" 200 250 50 H V C CNN F2 "Oscillator:Oscillator_SMD_IDT_JS6-6_5.0x3.2mm_P1.27mm" 50 -350 50 H I C CNN F3 "" -400 700 50 H I C CNN ALIAS XUX52 XUX53 $FPLIST Oscillator*JS6* $ENDFPLIST DRAW S -300 200 300 -200 0 1 10 f P 9 0 1 0 -200 100 -175 100 -175 150 -150 150 -150 100 -125 100 -125 150 -100 150 -100 100 N X E/D 1 -400 0 100 R 50 50 1 1 I X NC 2 -300 -100 100 R 50 50 1 1 N N X GND 3 0 -300 100 U 50 50 1 1 W X OUT 4 400 0 100 L 50 50 1 1 O X OUT2 5 400 -100 100 L 50 50 1 1 O X VDD 6 0 300 100 D 50 50 1 1 W ENDDRAW ENDDEF # # XUX71 # DEF XUX71 U 0 20 Y Y 1 F N F0 "U" -250 250 50 H V C CNN F1 "XUX71" 200 250 50 H V C CNN F2 "Oscillator:Oscillator_SMD_IDT_JU6-6_7.0x5.0mm_P2.54mm" 50 -350 50 H I C CNN F3 "" -400 700 50 H I C CNN ALIAS XUX72 XUX73 $FPLIST Oscillator*JU6* $ENDFPLIST DRAW S -300 200 300 -200 0 1 10 f P 9 1 1 0 -200 100 -175 100 -175 150 -150 150 -150 100 -125 100 -125 150 -100 150 -100 100 N X E/D 1 -400 0 100 R 50 50 1 1 I X NC 2 -300 -100 100 R 50 50 1 1 N N X GND 3 0 -300 100 U 50 50 1 1 W X OUT 4 400 0 100 L 50 50 1 1 O X OUT2 5 400 -100 100 L 50 50 1 1 O X VDD 6 0 300 100 D 50 50 1 1 W ENDDRAW ENDDEF # # XUY51 # DEF XUY51 U 0 20 Y Y 1 F N F0 "U" -250 250 50 H V C CNN F1 "XUY51" 200 250 50 H V C CNN F2 "Oscillator:Oscillator_SMD_IDT_JS6-6_5.0x3.2mm_P1.27mm" 50 -350 50 H I C CNN F3 "" -400 700 50 H I C CNN ALIAS XUY52 XUY53 $FPLIST Oscillator*JS6* $ENDFPLIST DRAW S -300 200 300 -200 0 1 10 f P 9 1 1 0 -200 100 -175 100 -175 150 -150 150 -150 100 -125 100 -125 150 -100 150 -100 100 N X NC 1 -300 -100 100 R 50 50 1 1 N N X E/D 2 -400 0 100 R 50 50 1 1 I X GND 3 0 -300 100 U 50 50 1 1 W X OUT 4 400 0 100 L 50 50 1 1 O X OUT2 5 400 -100 100 L 50 50 1 1 O X VDD 6 0 300 100 D 50 50 1 1 W ENDDRAW ENDDEF # # XUY71 # DEF XUY71 U 0 20 Y Y 1 F N F0 "U" -250 250 50 H V C CNN F1 "XUY71" 200 250 50 H V C CNN F2 "Oscillator:Oscillator_SMD_IDT_JU6-6_7.0x5.0mm_P2.54mm" 50 -350 50 H I C CNN F3 "" -400 700 50 H I C CNN ALIAS XUY72 XUY73 $FPLIST Oscillator*JU6* $ENDFPLIST DRAW S -300 200 300 -200 0 1 10 f P 9 1 1 0 -200 100 -175 100 -175 150 -150 150 -150 100 -125 100 -125 150 -100 150 -100 100 N X NC 1 -300 -100 100 R 50 50 1 1 N N X E/D 2 -400 0 100 R 50 50 1 1 I X GND 3 0 -300 100 U 50 50 1 1 W X OUT 4 400 0 100 L 50 50 1 1 O X OUT2 5 400 -100 100 L 50 50 1 1 O X VDD 6 0 300 100 D 50 50 1 1 W ENDDRAW ENDDEF # #End Library ================================================ FILE: esim-cloud-backend/kicad-symbols/additional/Transistor_FET.dcm ================================================ EESchema-DOCLIB Version 2.0 # $CMP 2N7000 D 0.2A Id, 200V Vds, N-Channel MOSFET, 2.6V Logic Level, TO-92 K N-Channel MOSFET Logic-Level F https://www.fairchildsemi.com/datasheets/2N/2N7000.pdf $ENDCMP # $CMP 2N7002 D 0.115A Id, 60V Vds, N-Channel MOSFET, SOT-23 K N-Channel Switching MOSFET F https://www.fairchildsemi.com/datasheets/2N/2N7002.pdf $ENDCMP # $CMP 2N7002E D 0.24A Id, 60V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/ds30376.pdf $ENDCMP # $CMP 2N7002H D 0.21A Id, 60V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/2N7002H.pdf $ENDCMP # $CMP 2N7002K D 0.38A Id, 60V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F https://www.diodes.com/assets/Datasheets/ds30896.pdf $ENDCMP # $CMP 3SK263 D 30mA Id, 15V Vds, N-Channel Dual Gate MOSFET, SOT-143/343 K N-Channel MOSFET Dual Gate F http://www.onsemi.com/pub_link/Collateral/EN4423-D.PDF $ENDCMP # $CMP AO3401A D -4.0A Id, -30V Vds, P-Channel MOSFET, SOT-23 K P-Channel MOSFET F http://www.aosmd.com/pdfs/datasheet/AO3401A.pdf $ENDCMP # $CMP BF244A D 50mA Id, 30V Vgs, N-Channel FET Transistor, TO-92 K N-Channel FET Transistor Low Voltage F http://www.fairchildsemi.com/ds/BF/BF244A.pdf $ENDCMP # $CMP BF244B D 50mA Id, 30V Vgs, N-Channel FET Transistor, TO-92 K N-Channel FET Transistor Low Voltage F http://www.fairchildsemi.com/ds/BF/BF244A.pdf $ENDCMP # $CMP BF244C D 10mA Id, 30V Vgs, N-Channel FET Transistor, TO-92 K N-Channel FET Transistor Low Voltage F http://www.fairchildsemi.com/ds/BF/BF244A.pdf $ENDCMP # $CMP BF245A D 50mA Id, 30V Vgs, N-Channel FET Transistor, TO-92 K N-Channel FET Transistor Low Voltage F http://www.fairchildsemi.com/ds/BF/BF245A.pdf $ENDCMP # $CMP BF245B D 10mA Id, 30V Vgs, N-Channel FET Transistor, TO-92 K N-Channel FET Transistor Low Voltage F http://www.fairchildsemi.com/ds/BF/BF245A.pdf $ENDCMP # $CMP BF245C D 10mA Id, 30V Vgs, N-Channel FET Transistor, TO-92 K N-Channel FET Transistor Low Voltage F http://www.fairchildsemi.com/ds/BF/BF245A.pdf $ENDCMP # $CMP BF545A D 5mA Idss, 30V Vgs, N-Channel JFET, SOT-23 K N-Channel FET Transistor Low Voltage F https://www.nxp.com/docs/en/data-sheet/BF545A_BF545B_BF545C.pdf $ENDCMP # $CMP BF545B D 15mA Idss, 30V Vgs, N-Channel JFET, SOT-23 K N-Channel FET Transistor Low Voltage F https://www.nxp.com/docs/en/data-sheet/BF545A_BF545B_BF545C.pdf $ENDCMP # $CMP BF545C D 25mA Idss, 30V Vgs, N-Channel JFET, SOT-23 K N-Channel FET Transistor Low Voltage F https://www.nxp.com/docs/en/data-sheet/BF545A_BF545B_BF545C.pdf $ENDCMP # $CMP BS107 D 0.25A Id, 200V Vds, N-Channel MOSFET, TO-92 K N-Channel MOSFET F http://www.onsemi.com/pub_link/Collateral/BS107-D.PDF $ENDCMP # $CMP BS108 D 0.25A Id, 200V Vds, N-Channel MOSFET, TO-92 K N-Channel MOSFET F http://www.redrok.com/MOSFET_BS108_200V_250mA_8O_Vth1.5_TO-92.PDF $ENDCMP # $CMP BS170 D 0.5A Id, 60V Vds, N-Channel MOSFET, TO-92 K N-Channel MOSFET F http://www.fairchildsemi.com/ds/BS/BS170.pdf $ENDCMP # $CMP BS170F D 0.15A Id, 60V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/BS170F.pdf $ENDCMP # $CMP BS250 D -0.18A Id, -45V Vds, P-Channel MOSFET, TO-92 K P-Channel MOSFET F http://www.vishay.com/docs/70209/70209.pdf $ENDCMP # $CMP BS870 D 0.25A Id, 60V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/ds11302.pdf $ENDCMP # $CMP BSB008NE2LX D 180A Id, 25V Vds, 0.8mOhm Rds, N-Channel MOSFET, DirectFET MX K N-Channel MOSFET F https://www.infineon.com/dgdl/Infineon-BSB008NE2LX-DS-v02_00-EN.pdf?fileId=db3a30432e564707012e5745ca7d000e $ENDCMP # $CMP BSB012NE2LXI D 170A Id, 25V Vds, 1.2mOhm Rds, N-Channel MOSFET, DirectFET MX K N-Channel MOSFET F https://www.infineon.com/dgdl/Infineon-BSB012NE2LXI-DS-v02_01-EN.pdf?fileId=db3a30433f764301013f805e3eb247c1 $ENDCMP # $CMP BSB013NE2LXI D 163A Id, 25V Vds, 1.3mOhm Rds, N-Channel MOSFET, DirectFET MX K N-Channel MOSFET F https://www.infineon.com/dgdl/Infineon-BSB013NE2LXI-DS-v02_04-en.pdf?fileId=db3a30432e398416012e47a158802577 $ENDCMP # $CMP BSB014N04LX3 D 180A Id, 40V Vds, 1.4mOhm Rds, N-Channel MOSFET, DirectFET MX K N-Channel MOSFET F https://www.infineon.com/dgdl/Infineon-BSB014N04LX3G-DS-v02_03-en.pdf?fileId=db3a304320d39d590121a02c6c737a9b $ENDCMP # $CMP BSB015N04NX3 D 180A Id, 40V Vds, 1.5mOhm Rds, N-Channel MOSFET, DirectFET MX K N-Channel MOSFET F https://www.infineon.com/dgdl/Infineon-BSB015N04NX3G-DS-v02_04-en.pdf?fileId=db3a304320d39d590121a03bbfcd7aac $ENDCMP # $CMP BSB028N06NN3 D 90A Id, 60V Vds, 2.8mOhm Rds, N-Channel MOSFET, DirectFET MN K N-Channel MOSFET F https://www.infineon.com/dgdl/Infineon-BSB028N06NN3-DS-v02_00-en.pdf?fileId=db3a30432e25b009012e29fda4e23838 $ENDCMP # $CMP BSB044N08NN3 D 90A Id, 80V Vds, 4.4mOhm Rds, N-Channel MOSFET, DirectFET MN K N-Channel MOSFET F https://www.infineon.com/dgdl/Infineon-BSB044N08NN3_G-DS-v02_00-en.pdf?fileId=db3a30435819ae2e012e385cde7b70d4 $ENDCMP # $CMP BSB056N10NN3 D 83A Id, 100V Vds, 5.1mOhm Rds, N-Channel MOSFET, DirectFET MN K N-Channel MOSFET F https://www.infineon.com/dgdl/Infineon-BSB056N10NN3_G-DS-v02_05-en.pdf?fileId=db3a30442e152e91012e390b9a631459 $ENDCMP # $CMP BSB104N08NP3 D 50A Id, 80V Vds, 10.4mOhm Rds, N-Channel MOSFET, DirectFET MP K N-Channel MOSFET F https://www.infineon.com/dgdl/Infineon-BSB104N08NP3_G-DS-v02_01-en.pdf?fileId=db3a304341e0aed00141efc548ca1b2b $ENDCMP # $CMP BSB165N15NZ3 D 45A Id, 150V Vds, 16.5mOhm Rds, N-Channel MOSFET, DirectFET MZ K N-Channel MOSFET F https://www.infineon.com/dgdl/Infineon-BSB165N15NZ3-DS-v02_02-en.pdf?fileId=db3a30432e779412012e7b04a1353843 $ENDCMP # $CMP BSB280N15NZ3 D 30A Id, 150V Vds, 28mOhm Rds, N-Channel MOSFET, DirectFET MZ K N-Channel MOSFET F https://www.infineon.com/dgdl/Infineon-BSB280N15NZ3-DS-v02_05-en.pdf?fileId=db3a30432e779412012e7b0b544c3852 $ENDCMP # $CMP BSC026N08NS5 D 100A Id, 80V Vds, OptiMOS N-Channel Power MOSFET, 2.6mOhm Ron, Qg (typ) 74.0nC, PG-TDSON-8 K OptiMOS Power MOSFET N-MOS F http://www.infineon.com/dgdl/Infineon-BSC026N08NS5-DS-v02_01-EN.pdf?fileId=5546d4624ad04ef9014ae2eace7629e0 $ENDCMP # $CMP BSC028N06LS3 D 100A Id, 60V Vds, OptiMOS N-Channel Power MOSFET, 2.8mOhm Ron, Qg (typ) 31.0nC, PG-TDSON-8 K OptiMOS Power MOSFET N-MOS F http://www.infineon.com/dgdl/Infineon-BSC028N06LS3-DS-v02_02-en.pdf?fileId=db3a30431ddc9372011ebafa4c607f8c $ENDCMP # $CMP BSC030N08NS5 D 100A Id, 80V Vds, OptiMOS N-Channel Power MOSFET, 3.0mOhm Ron, Qg (typ) 61.0nC, PG-TDSON-8 K OptiMOS Power MOSFET N-MOS F http://www.infineon.com/dgdl/Infineon-BSC030N08NS5-DS-v02_02-EN.pdf?fileId=5546d4624ad04ef9014aed52f4210acf $ENDCMP # $CMP BSC035N10NS5 D 100A Id, 100V Vds, OptiMOS N-Channel Power MOSFET, 3.5mOhm Ron, Qg (typ) 70.0nC, PG-TDSON-8 K OptiMOS Power MOSFET N-MOS F http://www.infineon.com/dgdl/Infineon-BSC035N10NS5-DS-v02_00-EN.pdf?fileId=5546d4624ad04ef9014ae8b5f3bc1b6f $ENDCMP # $CMP BSC037N08NS5 D 100A Id, 80V Vds, OptiMOS N-Channel Power MOSFET, 3.7mOhm Ron, Qg (typ) 46.0nC, PG-TDSON-8 K OptiMOS Power MOSFET N-MOS F http://www.infineon.com/dgdl/Infineon-BSC037N08NS5-DS-v02_00-EN.pdf?fileId=5546d4624ad04ef9014ae9ad3b8e1c33 $ENDCMP # $CMP BSC040N08NS5 D 100A Id, 80V Vds, OptiMOS N-Channel Power MOSFET, 4.0mOhm Ron, Qg (typ) 43.0nC, PG-TDSON-8 K OptiMOS Power MOSFET N-MOS F http://www.infineon.com/dgdl/Infineon-BSC040N08NS5-DS-v02_00-EN.pdf?fileId=5546d4624ad04ef9014ae3065a7e2a05 $ENDCMP # $CMP BSC040N10NS5 D 100A Id, 100V Vds, OptiMOS N-Channel Power MOSFET, 4.0mOhm Ron, Qg (typ) 58.0nC, PG-TDSON-8 K OptiMOS Power MOSFET N-MOS F http://www.infineon.com/dgdl/Infineon-BSC040N10NS5-DS-v02_01-EN.pdf?fileId=5546d4624a0bf290014a0fbcee2e6b38 $ENDCMP # $CMP BSC046N10NS3G D 100A Id, 100V Vds, OptiMOS N-Channel Power MOSFET, 4.6mOhm Ron, Qg (typ) 63.0nC, PG-TDSON-8 K OptiMOS Power MOSFET N-MOS F http://www.infineon.com/dgdl/Infineon-BSC046N10NS3-DS-v02_00-en.pdf?fileId=db3a304332fc1ee7013316f966a4713c $ENDCMP # $CMP BSC047N08NS3G D 100A Id, 80V Vds, OptiMOS N-Channel Power MOSFET, 4.7mOhm Ron, Qg (typ) 52.0nC, PG-TDSON-8 K OptiMOS Power MOSFET N-MOS F http://www.infineon.com/dgdl/Infineon-BSC047N08NS3G-DS-v02_07-en.pdf?fileId=db3a30431add1d95011ae7e8dacf5611 $ENDCMP # $CMP BSC052N08NS5 D 95A Id, 80V Vds, OptiMOS N-Channel Power MOSFET, 5.2mOhm Ron, Qg (typ) 32.0nC, PG-TDSON-8 K OptiMOS Power MOSFET N-MOS F http://www.infineon.com/dgdl/Infineon-BSC052N08NS5-DS-v02_00-EN.pdf?fileId=5546d4624ad04ef9014ae38fc94f2b40 $ENDCMP # $CMP BSC057N08NS3G D 100A Id, 80V Vds, OptiMOS N-Channel Power MOSFET, 5.7mOhm Ron, Qg (typ) 42.0nC, PG-TDSON-8 K OptiMOS Power MOSFET N-MOS F http://www.infineon.com/dgdl/Infineon-BSC057N08NS3G-DS-v02_04-en.pdf?fileId=db3a30431add1d95011ae803c9345616 $ENDCMP # $CMP BSC060N10NS3G D 90A Id, 100V Vds, OptiMOS N-Channel Power MOSFET, 6.0mOhm Ron, Qg (typ) 51.0nC, PG-TDSON-8 K OptiMOS Power MOSFET N-MOS F http://www.infineon.com/dgdl/Infineon-BSC060N10NS3-DS-v02_04-en.pdf?fileId=db3a30431ce5fb52011d1aab7f90133a $ENDCMP # $CMP BSC061N08NS5 D 82A Id, 80V Vds, OptiMOS N-Channel Power MOSFET, 6.1mOhm Ron, Qg (typ) 27.0nC, PG-TDSON-8 K OptiMOS Power MOSFET N-MOS F http://www.infineon.com/dgdl/Infineon-BSC061N08NS5-DS-v02_00-EN.pdf?fileId=5546d4624ad04ef9014ae3ab1bb62b69 $ENDCMP # $CMP BSC070N10NS3G D 90A Id, 100V Vds, OptiMOS N-Channel Power MOSFET, 7.0mOhm Ron, Qg (typ) 42.0nC, PG-TDSON-8 K OptiMOS Power MOSFET N-MOS F http://www.infineon.com/dgdl/Infineon-BSC070N10NS3-DS-v02_01-en.pdf?fileId=db3a304327b89750012824712c6c6f2f $ENDCMP # $CMP BSC070N10NS5 D 80A Id, 100V Vds, OptiMOS N-Channel Power MOSFET, 7.0mOhm Ron, Qg (typ) 30.0nC, PG-TDSON-8 K OptiMOS Power MOSFET N-MOS F http://www.infineon.com/dgdl/Infineon-BSC070N10NS5-DS-v02_01-EN.pdf?fileId=5546d4624a0bf290014a0fc62d9d6b3c $ENDCMP # $CMP BSC072N08NS5 D 74A Id, 80V Vds, OptiMOS N-Channel Power MOSFET, 7.2mOhm Ron, Qg (typ) 24.0nC, PG-TDSON-8 K OptiMOS Power MOSFET N-MOS F http://www.infineon.com/dgdl/Infineon-BSC072N08NS5-DS-v02_00-EN.pdf?fileId=5546d4624ad04ef9014ae3d8e8192c7c $ENDCMP # $CMP BSC079N10NSG D 100A Id, 100V Vds, OptiMOS N-Channel Power MOSFET, 7.9mOhm Ron, Qg (typ) 66.0nC, PG-TDSON-8 K OptiMOS Power MOSFET N-MOS F http://www.infineon.com/dgdl/Infineon-BSC079N10NS-DS-v01_06-en.pdf?fileId=db3a3043163797a601167b174f951147 $ENDCMP # $CMP BSC082N10LSG D 100A Id, 100V Vds, OptiMOS N-Channel Power MOSFET, 8.2mOhm Ron, Qg (typ) 78.0nC, PG-TDSON-8 K OptiMOS Power MOSFET N-MOS F http://www.infineon.com/dgdl/Infineon-BSC082N10LS-DS-v01_07-en.pdf?fileId=db3a3043163797a6011647faad240719 $ENDCMP # $CMP BSC098N10NS5 D 60A Id, 100V Vds, OptiMOS N-Channel Power MOSFET, 9.8mOhm Ron, Qg (typ) 22.0nC, PG-TDSON-8 K OptiMOS Power MOSFET N-MOS F http://www.infineon.com/dgdl/Infineon-BSC098N10NS5-DS-v02_00-EN.pdf?fileId=5546d4624ad04ef9014ae95ab4221bfd $ENDCMP # $CMP BSC100N10NSFG D 90A Id, 100V Vds, OptiMOS N-Channel Power MOSFET, 10.0mOhm Ron, Qg (typ) 33.0nC, PG-TDSON-8 K OptiMOS Power MOSFET N-MOS F http://www.infineon.com/dgdl/Infineon-BSC100N10NSF-DS-v02_08-en.pdf?fileId=db3a30431b3e89eb011b49a75b607b57 $ENDCMP # $CMP BSC105N10LSFG D 90A Id, 100V Vds, OptiMOS N-Channel Power MOSFET, 10.5mOhm Ron, Qg (typ) 40.0nC, PG-TDSON-8 K OptiMOS Power MOSFET N-MOS F http://www.infineon.com/dgdl/Infineon-BSC105N10LSF-DS-v02_09-en.pdf?fileId=db3a30431b3e89eb011b499b2aa07b26 $ENDCMP # $CMP BSC109N10NS3G D 63A Id, 100V Vds, OptiMOS N-Channel Power MOSFET, 10.9mOhm Ron, Qg (typ) 26.0nC, PG-TDSON-8 K OptiMOS Power MOSFET N-MOS F http://www.infineon.com/dgdl/Infineon-BSC109N10NS3-DS-v02_00-en.pdf?fileId=db3a304327b897500128247bdae36f3f $ENDCMP # $CMP BSC117N08NS5 D 49A Id, 80V Vds, OptiMOS N-Channel Power MOSFET, 11.7mOhm Ron, Qg (typ) 15.0nC, PG-TDSON-8 K OptiMOS Power MOSFET N-MOS F http://www.infineon.com/dgdl/Infineon-BSC117N08NS5-DS-v02_00-EN.pdf?fileId=5546d4624ad04ef9014ae97632721c1b $ENDCMP # $CMP BSC118N10NSG D 71A Id, 100V Vds, OptiMOS N-Channel Power MOSFET, 11.8mOhm Ron, Qg (typ) 42.0nC, PG-TDSON-8 K OptiMOS Power MOSFET N-MOS F http://www.infineon.com/dgdl/Infineon-BSC118N10NS-DS-v01_08-en.pdf?fileId=db3a3043163797a6011647fdc2d4071c $ENDCMP # $CMP BSC123N08NS3G D 55A Id, 80V Vds, OptiMOS N-Channel Power MOSFET, 12.3mOhm Ron, Qg (typ) 19.0nC, PG-TDSON-8 K OptiMOS Power MOSFET N-MOS F http://www.infineon.com/dgdl/Infineon-BSC123N08NS3G-DS-v02_05-en.pdf?fileId=db3a30431add1d95011ae80eb8555625 $ENDCMP # $CMP BSC123N10LSG D 71A Id, 100V Vds, OptiMOS N-Channel Power MOSFET, 12.3mOhm Ron, Qg (typ) 51.0nC, PG-TDSON-8 K OptiMOS Power MOSFET N-MOS F http://www.infineon.com/dgdl/Infineon-BSC123N10LS-DS-v02_08-en.pdf?fileId=db3a30431b3e89eb011b4626974b7df5 $ENDCMP # $CMP BSC13DN30NSFD D 16A Id, 300V Vds, OptiMOS N-Channel Power MOSFET, 130mOhm Ron, Qg (typ) 30.0nC, PG-TDSON-8 K NexFET Power MOSFET N-MOS F https://www.infineon.com/dgdl/Infineon-BSC13DN30NSFD-DS-v02_01-EN.pdf?fileId=5546d46259b0420a0159d5c940fc0d9a $ENDCMP # $CMP BSC159N10LSFG D 63A Id, 100V Vds, OptiMOS N-Channel Power MOSFET, 15.9mOhm Ron, Qg (typ) 26.0nC, PG-TDSON-8 K OptiMOS Power MOSFET N-MOS F http://www.infineon.com/dgdl/Infineon-BSC159N10LSF-DS-v02_09-en.pdf?fileId=db3a30431b3e89eb011b499f85d47b36 $ENDCMP # $CMP BSC160N10NS3G D 42A Id, 100V Vds, OptiMOS N-Channel Power MOSFET, 16.0mOhm Ron, Qg (typ) 19.0nC, PG-TDSON-8 K OptiMOS Power MOSFET N-MOS F http://www.infineon.com/dgdl/Infineon-BSC160N10NS3-DS-v02_04-en.pdf?fileId=db3a30432239cccd01226040189a7f47 $ENDCMP # $CMP BSC196N10NSG D 45A Id, 100V Vds, OptiMOS N-Channel Power MOSFET, 19.6mOhm Ron, Qg (typ) 25.0nC, PG-TDSON-8 K OptiMOS Power MOSFET N-MOS F http://www.infineon.com/dgdl/Infineon-BSC196N10NS-DS-v01_07-en.pdf?fileId=db3a3043163797a601164800549d071f $ENDCMP # $CMP BSC252N10NSFG D 40A Id, 100V Vds, OptiMOS N-Channel Power MOSFET, 25.2mOhm Ron, Qg (typ) 13.0nC, PG-TDSON-8 K OptiMOS Power MOSFET N-MOS F http://www.infineon.com/dgdl/Infineon-BSC252N10NSF-DS-v02_08-en.pdf?fileId=db3a30431b3e89eb011b498909e97b17 $ENDCMP # $CMP BSC265N10LSFG D 40A Id, 100V Vds, OptiMOS N-Channel Power MOSFET, 26.5mOhm Ron, Qg (typ) 16.0nC, PG-TDSON-8 K OptiMOS Power MOSFET N-MOS F http://www.infineon.com/dgdl/Infineon-BSC265N10LSFG-DS-v02_08-en.pdf?fileId=db3a30431b3e89eb011b49a375207b46 $ENDCMP # $CMP BSC340N08NS3G D 23A Id, 80V Vds, OptiMOS N-Channel Power MOSFET, 34.0mOhm Ron, Qg (typ) 6.8nC, PG-TDSON-8 K OptiMOS Power MOSFET N-MOS F http://www.infineon.com/dgdl/Infineon-BSC340N08NS3G-DS-v02_06-en.pdf?fileId=db3a30431add1d95011ae81c21f2563a $ENDCMP # $CMP BSC440N10NS3G D 18A Id, 100V Vds, OptiMOS N-Channel Power MOSFET, 44.0mOhm Ron, Qg (typ) 8.1nC, PG-TDSON-8 K OptiMOS Power MOSFET N-MOS F http://www.infineon.com/dgdl/Infineon-BSC440N10NS3-DS-v02_04-en.pdf?fileId=db3a30432239cccd0122604520d47f56 $ENDCMP # $CMP BSF030NE2LQ D 75A Id, 25V Vds, 3mOhm Rds, N-Channel MOSFET, DirectFET SQ K N-Channel MOSFET F https://www.infineon.com/dgdl/Infineon-BSF030NE2LQ-DS-v02_03-en.pdf?fileId=db3a30432e398416012e47a8f0792588 $ENDCMP # $CMP BSF035NE2LQ D 69A Id, 25V Vds, 3.5mOhm Rds, N-Channel MOSFET, DirectFET SQ K N-Channel MOSFET F https://www.infineon.com/dgdl/Infineon-BSF035NE2LQ-DS-v01_03-en.pdf?fileId=db3a30433f764301013f7fe8a925463c $ENDCMP # $CMP BSF450NE7NH3 D 15A Id, 75V Vds, 45mOhm Rds, N-Channel MOSFET, DirectFET ST K N-Channel MOSFET F https://www.infineon.com/dgdl/Infineon-BSF450NE7NH3-DS-v02_02-EN.pdf?fileId=db3a30433a047ba0013a687e2ae403da $ENDCMP # $CMP BSN20 D 0.5A Id, 50V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/ds31898.pdf $ENDCMP # $CMP BSP129 D 0.35A Id, 240V Vds, N-Channel MOSFET, SOT-223 K N-Channel MOSFET F https://www.infineon.com/dgdl/Infineon-BSP129-DS-v01_42-en.pdf?fileId=db3a30433c1a8752013c1fc296d2395f $ENDCMP # $CMP BSP89 D 0.35A Id, 240V Vds, N-Channel Enhancement Mode MOSFET, SOT-223 K N-Channel MOSFET F https://www.infineon.com/dgdl/Infineon-BSP89-DS-v02_02-en.pdf?fileId=db3a30433b47825b013b4b8a07f90d55 $ENDCMP # $CMP BSR56 D 50mA min, 40V, 25mOhm max, 4-10V Vgs(off), N-Channel JFET, SOT-23 K N-Channel FET Transistor F https://www.nxp.com/docs/en/data-sheet/BSR56_57_58.pdf $ENDCMP # $CMP BSR57 D 20mA min, 40V, 40mOhm max, 2-6V Vgs(off), N-Channel JFET, SOT-23 K N-Channel FET Transistor F https://www.nxp.com/docs/en/data-sheet/BSR56_57_58.pdf $ENDCMP # $CMP BSR58 D 80mA min, 40V, 60mOhm max, 0.8-4V Vgs(off), N-Channel JFET, SOT-23 K N-Channel FET Transistor F https://www.nxp.com/docs/en/data-sheet/BSR56_57_58.pdf $ENDCMP # $CMP BSS123 D 0.17A Id, 100V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/ds30366.pdf $ENDCMP # $CMP BSS127S D 0.07A Id, 600V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/BSS127.pdf $ENDCMP # $CMP BSS138 D 50V Vds, 0.22A Id, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F https://www.fairchildsemi.com/datasheets/BS/BSS138.pdf $ENDCMP # $CMP BSS214NW D 20V Vds, 1.5A Id, N-Channel MOSFET, SOT-323 K N-Channel MOSFET F https://www.infineon.com/dgdl/Infineon-BSS214NW-DS-v02_02-en.pdf?fileId=db3a30431b3e89eb011b695aebc01bde $ENDCMP # $CMP BSS83P D -0.33A Id, -60V Vds, P-Channel MOSFET, SOT-23 K P-Channel MOSFET F http://www.farnell.com/datasheets/1835997.pdf $ENDCMP # $CMP BSS84 D -0.13A Id, -50V Vds, P-Channel MOSFET, SOT-23 K P-Channel MOSFET F http://assets.nexperia.com/documents/data-sheet/BSS84.pdf $ENDCMP # $CMP BUK7M10-40EX D 56A Id, 40V Vds, N-Channel TrenchMOS MOSFET, 10mOhm Ron, 19.5nC Qqd, -55 to 175 °C, LFPAK33 K Power MOSFET N-MOS F https://assets.nexperia.com/documents/data-sheet/BUK7M10-40E.pdf $ENDCMP # $CMP BUK7M12-40EX D 48A Id, 40V Vds, N-Channel TrenchMOS MOSFET, 12mOhm Ron, 15.8nC Qqd, -55 to 175 °C, LFPAK33 K Power MOSFET N-MOS F https://assets.nexperia.com/documents/data-sheet/BUK7M12-40E.pdf $ENDCMP # $CMP BUK7M12-60EX D 53A Id, 60V Vds, N-Channel TrenchMOS MOSFET, 12mOhm Ron, 24.8nC Qqd, -55 to 175 °C, LFPAK33 K Power MOSFET N-MOS F https://assets.nexperia.com/documents/data-sheet/BUK7M12-60E.pdf $ENDCMP # $CMP BUK7M15-60EX D 42.9A Id, 60V Vds, N-Channel TrenchMOS MOSFET, 15mOhm Ron, 19.4nC Qqd, -55 to 175 °C, LFPAK33 K Power MOSFET N-MOS F https://assets.nexperia.com/documents/data-sheet/BUK7M15-60E.pdf $ENDCMP # $CMP BUK7M17-80EX D 43A Id, 80V Vds, N-Channel TrenchMOS MOSFET, 17mOhm Ron, 29.6nC Qqd, -55 to 175 °C, LFPAK33 K Power MOSFET N-MOS F https://assets.nexperia.com/documents/data-sheet/BUK7M17-80E.pdf $ENDCMP # $CMP BUK7M19-60EX D 35.8A Id, 60V Vds, N-Channel TrenchMOS MOSFET, 19mOhm Ron, 17.3nC Qqd, -55 to 175 °C, LFPAK33 K Power MOSFET N-MOS F https://assets.nexperia.com/documents/data-sheet/BUK7M19-60E.pdf $ENDCMP # $CMP BUK7M21-40EX D 33A Id, 40V Vds, N-Channel TrenchMOS MOSFET, 21mOhm Ron, 10.7nC Qqd, -55 to 175 °C, LFPAK33 K Power MOSFET N-MOS F https://assets.nexperia.com/documents/data-sheet/BUK7M21-40E.pdf $ENDCMP # $CMP BUK7M22-80EX D 37A Id, 80V Vds, N-Channel TrenchMOS MOSFET, 22mOhm Ron, 23.9nC Qqd, -55 to 175 °C, LFPAK33 K Power MOSFET N-MOS F https://assets.nexperia.com/documents/data-sheet/BUK7M22-80E.pdf $ENDCMP # $CMP BUK7M27-80EX D 30A Id, 80V Vds, N-Channel TrenchMOS MOSFET, 27mOhm Ron, 19.5nC Qqd, -55 to 175 °C, LFPAK33 K Power MOSFET N-MOS F https://assets.nexperia.com/documents/data-sheet/BUK7M27-80E.pdf $ENDCMP # $CMP BUK7M33-60EX D 24A Id, 60V Vds, N-Channel TrenchMOS MOSFET, 33mOhm Ron, 10.9nC Qqd, -55 to 175 °C, LFPAK33 K Power MOSFET N-MOS F https://assets.nexperia.com/documents/data-sheet/BUK7M33-60E.pdf $ENDCMP # $CMP BUK7M42-60EX D 20A Id, 60V Vds, N-Channel TrenchMOS MOSFET, 42mOhm Ron, 9nC Qqd, -55 to 175 °C, LFPAK33 K Power MOSFET N-MOS F https://assets.nexperia.com/documents/data-sheet/BUK7M42-60E.pdf $ENDCMP # $CMP BUK7M45-40EX D 19A Id, 40V Vds, N-Channel TrenchMOS MOSFET, 45mOhm Ron, 6.2nC Qqd, -55 to 175 °C, LFPAK33 K Power MOSFET N-MOS F https://assets.nexperia.com/documents/data-sheet/BUK7M45-40E.pdf $ENDCMP # $CMP BUK7M67-60EX D 14A Id, 60V Vds, N-Channel TrenchMOS MOSFET, 67mOhm Ron, 6.7nC Qqd, -55 to 175 °C, LFPAK33 K Power MOSFET N-MOS F https://assets.nexperia.com/documents/data-sheet/BUK7M67-60E.pdf $ENDCMP # $CMP BUK7M6R3-40EX D 70A Id, 40V Vds, N-Channel TrenchMOS MOSFET, 6.3mOhm Ron, 28.1nC Qqd, -55 to 175 °C, LFPAK33 K Power MOSFET N-MOS F https://assets.nexperia.com/documents/data-sheet/BUK7M6R3-40E.pdf $ENDCMP # $CMP BUK7M8R0-40EX D 69A Id, 40V Vds, N-Channel TrenchMOS MOSFET, 8mOhm Ron, 23.8nC Qqd, -55 to 175 °C, LFPAK33 K Power MOSFET N-MOS F https://assets.nexperia.com/documents/data-sheet/BUK7M8R0-40E.pdf $ENDCMP # $CMP BUK7M9R9-60EX D 60A Id, 60V Vds, N-Channel TrenchMOS MOSFET, 9.9mOhm Ron, 30.1nC Qqd, -55 to 175 °C, LFPAK33 K Power MOSFET N-MOS F https://assets.nexperia.com/documents/data-sheet/BUK7M9R9-60E.pdf $ENDCMP # $CMP BUK9M10-30EX D 54A Id, 30V Vds, N-Channel TrenchMOS MOSFET, 7.8mOhm Ron, 12.2nC Qqd, -55 to 175 °C, LFPAK33 K Power MOSFET N-MOS F https://assets.nexperia.com/documents/data-sheet/BUK9M10-30E.pdf $ENDCMP # $CMP BUK9M11-40EX D 53A Id, 40V Vds, N-Channel TrenchMOS MOSFET, 9mOhm Ron, 13.4nC Qqd, -55 to 175 °C, LFPAK33 K Power MOSFET N-MOS F https://assets.nexperia.com/documents/data-sheet/BUK9M11-40E.pdf $ENDCMP # $CMP BUK9M12-60EX D 54A Id, 60V Vds, N-Channel TrenchMOS MOSFET, 11mOhm Ron, - Qqd, -55 to 175 °C, LFPAK33 K Power MOSFET N-MOS F https://assets.nexperia.com/documents/data-sheet/BUK9M12-60E.pdf $ENDCMP # $CMP BUK9M120-100EX D 11.5A Id, 100V Vds, N-Channel TrenchMOS MOSFET, 119mOhm Ron, 8.8nC Qqd, -55 to 175 °C, LFPAK33 K Power MOSFET N-MOS F https://assets.nexperia.com/documents/data-sheet/BUK9M120-100E.pdf $ENDCMP # $CMP BUK9M14-40EX D 44A Id, 40V Vds, N-Channel TrenchMOS MOSFET, 11mOhm Ron, 11.3nC Qqd, -55 to 175 °C, LFPAK33 K Power MOSFET N-MOS F https://assets.nexperia.com/documents/data-sheet/BUK9M14-40E.pdf $ENDCMP # $CMP BUK9M15-60EX D 47A Id, 60V Vds, N-Channel TrenchMOS MOSFET, 13mOhm Ron, 17nC Qqd, -55 to 175 °C, LFPAK33 K Power MOSFET N-MOS F https://assets.nexperia.com/documents/data-sheet/BUK9M15-60E.pdf $ENDCMP # $CMP BUK9M156-100EX D 9.3A Id, 100V Vds, N-Channel TrenchMOS MOSFET, 150mOhm Ron, 7.4nC Qqd, -55 to 175 °C, LFPAK33 K Power MOSFET N-MOS F https://assets.nexperia.com/documents/data-sheet/BUK9M156-100E.pdf $ENDCMP # $CMP BUK9M17-30EX D 37A Id, 30V Vds, N-Channel TrenchMOS MOSFET, 14mOhm Ron, 8nC Qqd, -55 to 175 °C, LFPAK33 K Power MOSFET N-MOS F https://assets.nexperia.com/documents/data-sheet/BUK9M17-30E.pdf $ENDCMP # $CMP BUK9M19-60EX D 38A Id, 60V Vds, N-Channel TrenchMOS MOSFET, 17mOhm Ron, 13.8nC Qqd, -55 to 175 °C, LFPAK33 K Power MOSFET N-MOS F https://assets.nexperia.com/documents/data-sheet/BUK9M19-60E.pdf $ENDCMP # $CMP BUK9M23-80EX D 37A Id, 80V Vds, N-Channel TrenchMOS MOSFET, 20mOhm Ron, 20nC Qqd, -55 to 175 °C, LFPAK33 K Power MOSFET N-MOS F https://assets.nexperia.com/documents/data-sheet/BUK9M23-80E.pdf $ENDCMP # $CMP BUK9M24-40EX D 30A Id, 40V Vds, N-Channel TrenchMOS MOSFET, 20mOhm Ron, 7.7nC Qqd, -55 to 175 °C, LFPAK33 K Power MOSFET N-MOS F https://assets.nexperia.com/documents/data-sheet/BUK9M24-40E.pdf $ENDCMP # $CMP BUK9M24-60EX D 32A Id, 60V Vds, N-Channel TrenchMOS MOSFET, 21mOhm Ron, 12.4nC Qqd, -55 to 175 °C, LFPAK33 K Power MOSFET N-MOS F https://assets.nexperia.com/documents/data-sheet/BUK9M24-60E.pdf $ENDCMP # $CMP BUK9M28-80EX D 33A Id, 80V Vds, N-Channel TrenchMOS MOSFET, 25mOhm Ron, 16.7nC Qqd, -55 to 175 °C, LFPAK33 K Power MOSFET N-MOS F https://assets.nexperia.com/documents/data-sheet/BUK9M28-80E.pdf $ENDCMP # $CMP BUK9M34-100EX D 29A Id, 100V Vds, N-Channel TrenchMOS MOSFET, 34mOhm Ron, 24.7nC Qqd, -55 to 175 °C, LFPAK33 K Power MOSFET N-MOS F https://assets.nexperia.com/documents/data-sheet/BUK9M34-100E.pdf $ENDCMP # $CMP BUK9M35-80EX D 26A Id, 80V Vds, N-Channel TrenchMOS MOSFET, 31mOhm Ron, 13.5nC Qqd, -55 to 175 °C, LFPAK33 K Power MOSFET N-MOS F https://assets.nexperia.com/documents/data-sheet/BUK9M35-80E.pdf $ENDCMP # $CMP BUK9M42-60EX D 22A Id, 60V Vds, N-Channel TrenchMOS MOSFET, 37mOhm Ron, 8.3nC Qqd, -55 to 175 °C, LFPAK33 K Power MOSFET N-MOS F https://assets.nexperia.com/documents/data-sheet/BUK9M42-60E.pdf $ENDCMP # $CMP BUK9M43-100EX D 25A Id, 100V Vds, N-Channel TrenchMOS MOSFET, 43mOhm Ron, 20.2nC Qqd, -55 to 175 °C, LFPAK33 K Power MOSFET N-MOS F https://assets.nexperia.com/documents/data-sheet/BUK9M43-100E.pdf $ENDCMP # $CMP BUK9M52-40EX D 17.6A Id, 40V Vds, N-Channel TrenchMOS MOSFET, 40mOhm Ron, 4.5nC Qqd, -55 to 175 °C, LFPAK33 K Power MOSFET N-MOS F https://assets.nexperia.com/documents/data-sheet/BUK9M52-40E.pdf $ENDCMP # $CMP BUK9M53-60EX D 17A Id, 60V Vds, N-Channel TrenchMOS MOSFET, 46mOhm Ron, 6nC Qqd, -55 to 175 °C, LFPAK33 K Power MOSFET N-MOS F https://assets.nexperia.com/documents/data-sheet/BUK9M53-60E.pdf $ENDCMP # $CMP BUK9M5R2-30EX D 70A Id, 30V Vds, N-Channel TrenchMOS MOSFET, 4.1mOhm Ron, 22.5nC Qqd, -55 to 175 °C, LFPAK33 K Power MOSFET N-MOS F https://assets.nexperia.com/documents/data-sheet/BUK9M5R2-30E.pdf $ENDCMP # $CMP BUK9M6R6-30EX D 70A Id, 30V Vds, N-Channel TrenchMOS MOSFET, 5.3mOhm Ron, 18nC Qqd, -55 to 175 °C, LFPAK33 K Power MOSFET N-MOS F https://assets.nexperia.com/documents/data-sheet/BUK9M6R6-30E.pdf $ENDCMP # $CMP BUK9M7R2-40EX D 70A Id, 40V Vds, N-Channel TrenchMOS MOSFET, 5.8mOhm Ron, 19.7nC Qqd, -55 to 175 °C, LFPAK33 K Power MOSFET N-MOS F https://assets.nexperia.com/documents/data-sheet/BUK9M7R2-40E.pdf $ENDCMP # $CMP BUK9M85-60EX D 12.8A Id, 60V Vds, N-Channel TrenchMOS MOSFET, 73mOhm Ron, 4.4nC Qqd, -55 to 175 °C, LFPAK33 K Power MOSFET N-MOS F https://assets.nexperia.com/documents/data-sheet/BUK9M85-60E.pdf $ENDCMP # $CMP BUK9M9R1-40EX D 64A Id, 40V Vds, N-Channel TrenchMOS MOSFET, 7.3mOhm Ron, 16.2nC Qqd, -55 to 175 °C, LFPAK33 K Power MOSFET N-MOS F https://assets.nexperia.com/documents/data-sheet/BUK9M9R1-40E.pdf $ENDCMP # $CMP BUZ11 D 30A Id, 50V Vds, N-Channel Power MOSFET, TO-220 K N-Channel Power MOSFET F http://www.fairchildsemi.com/ds/BU/BUZ11.pdf $ENDCMP # $CMP C2M0025120D D 90A Id, 1200V Vds, 25mOhm, N-Channel SiC MOSFET, TO-247 K N-Channel SiC MOSFET F https://www.wolfspeed.com/media/downloads/161/C2M0025120D.pdf $ENDCMP # $CMP C2M0040120D D 60A Id, 1200V Vds, 40mOhm, N-Channel SiC MOSFET, TO-247 K N-Channel SiC MOSFET F https://www.wolfspeed.com/media/downloads/165/C2M0040120D.pdf $ENDCMP # $CMP C2M0045170D D 72A Id, 1700V Vds, 45mOhm, N-Channel SiC MOSFET, TO-247 K N-Channel SiC MOSFET F https://www.wolfspeed.com/media/downloads/960/C2M0045170D.000.pdf $ENDCMP # $CMP C2M0080120D D 36A Id, 1200V Vds, 80mOhm, N-Channel SiC MOSFET, TO-247 K N-Channel SiC MOSFET F https://www.wolfspeed.com/media/downloads/167/C2M0080120D.pdf $ENDCMP # $CMP C2M0160120D D 19A Id, 1200V Vds, 160mOhm, N-Channel SiC MOSFET, TO-247 K N-Channel SiC MOSFET F https://www.wolfspeed.com/media/downloads/169/C2M0160120D.pdf $ENDCMP # $CMP C2M0280120D D 10A Id, 1200V Vds, 280mOhm, N-Channel SiC MOSFET, TO-247 K N-Channel SiC MOSFET F https://www.wolfspeed.com/media/downloads/171/C2M0280120D.pdf $ENDCMP # $CMP C2M1000170D D 5A Id, 1700V Vds, 1000mOhm, N-Channel SiC MOSFET, TO-247 K N-Channel SiC MOSFET F https://www.wolfspeed.com/media/downloads/173/C2M1000170D.pdf $ENDCMP # $CMP C2M1000170J D 5.3A Id, 1700V Vds, 1000mOhm, N-Channel SiC MOSFET, TO-263-7 K N-Channel SiC MOSFET F https://www.wolfspeed.com/media/downloads/820/C2M1000170J.pdf $ENDCMP # $CMP C3M0030090K D 63A Id, 900V Vds, 30mOhm, N-Channel SiC MOSFET, TO-247-4 K N-Channel SiC MOSFET F https://www.wolfspeed.com/media/downloads/1185/C3M0030090K.pdf $ENDCMP # $CMP C3M0065090D D 36A Id, 900V Vds, 65mOhm, N-Channel SiC MOSFET, TO-247 K N-Channel SiC MOSFET F https://www.wolfspeed.com/media/downloads/176/C3M0065090D.pdf $ENDCMP # $CMP C3M0065090J D 35A Id, 900V Vds, 65mOhm, N-Channel SiC MOSFET, TO-263-7 K N-Channel SiC MOSFET F https://www.wolfspeed.com/media/downloads/145/C3M0065090J.pdf $ENDCMP # $CMP C3M0065100J D 35A Id, 1000V Vds, 65mOhm, N-Channel SiC MOSFET, TO-263-7 K N-Channel SiC MOSFET F https://www.wolfspeed.com/media/downloads/958/C3M0065100J.pdf $ENDCMP # $CMP C3M0065100K D 35A Id, 1000V Vds, 65mOhm, N-Channel SiC MOSFET, TO-247-4 K N-Channel SiC MOSFET F https://www.wolfspeed.com/media/downloads/961/C3M0065100K.pdf $ENDCMP # $CMP C3M0075120J D 30A Id, 1200V Vds, 75mOhm, N-Channel SiC MOSFET, TO-263-7 K N-Channel SiC MOSFET F https://www.wolfspeed.com/media/downloads/997/C3M0075120J.pdf $ENDCMP # $CMP C3M0075120K D 30A Id, 1200V Vds, 75mOhm, N-Channel SiC MOSFET, TO-247-4 K N-Channel SiC MOSFET F https://www.wolfspeed.com/media/downloads/959/c3m0075120k.pdf $ENDCMP # $CMP C3M0120090D D 23A Id, 900V Vds, 120mOhm, N-Channel SiC MOSFET, TO-247 K N-Channel SiC MOSFET F https://www.wolfspeed.com/media/downloads/824/C3M0120090D.pdf $ENDCMP # $CMP C3M0120090J D 22A Id, 900V Vds, 120mOhm, N-Channel SiC MOSFET, TO-263-7 K N-Channel SiC MOSFET F https://www.wolfspeed.com/media/downloads/834/C3M0120090J.pdf $ENDCMP # $CMP C3M0120100J D 22A Id, 1000V Vds, 120mOhm, N-Channel SiC MOSFET, TO-263-7 K N-Channel SiC MOSFET F https://www.wolfspeed.com/media/downloads/957/C3M0120100J.pdf $ENDCMP # $CMP C3M0120100K D 22A Id, 1000V Vds, 120mOhm, N-Channel SiC MOSFET, TO-247-4 K N-Channel SiC MOSFET F https://www.wolfspeed.com/media/downloads/962/C3M0120100K.pdf $ENDCMP # $CMP C3M0280090D D 11.5A Id, 900V Vds, 280mOhm, N-Channel SiC MOSFET, TO-247 K N-Channel SiC MOSFET F https://www.wolfspeed.com/media/downloads/825/C3M0280090D.pdf $ENDCMP # $CMP C3M0280090J D 11.5A Id, 900V Vds, 280mOhm, N-Channel SiC MOSFET, TO-263-7 K N-Channel SiC MOSFET F https://www.wolfspeed.com/media/downloads/835/C3M0280090J.pdf $ENDCMP # $CMP CSD16301Q2 D 5A Id, 25V Vds, NexFET N-Channel Power MOSFET, 19mOhm Ron, SON-6 K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/ds/symlink/csd16301q2.pdf $ENDCMP # $CMP CSD16321Q5 D 100A Id, 25V Vds, NexFET N-Channel Power MOSFET, 2.6mOhm Ron, 14nC Qg(typ), SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd16321q5 $ENDCMP # $CMP CSD16322Q5 D 100A Id, 25V Vds, NexFET N-Channel Power MOSFET, 5.8mOhm Ron, Qg (typ) 6.8nC, SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd16322q5 $ENDCMP # $CMP CSD16325Q5 D 100A Id, 25V Vds, NexFET N-Channel Power MOSFET, 2.2mOhm Ron, 18nC Qg(typ), SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd16325q5 $ENDCMP # $CMP CSD16342Q5A D 100A Id, 25V Vds, NexFET N-Channel Power MOSFET, 5.5mOhm Ron, Qg (typ) 6.5nC, SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd16342q5a $ENDCMP # $CMP CSD16401Q5 D 100A Id, 25V Vds, NexFET N-Channel Power MOSFET, 1.6mOhm Ron, 21nC Qg(typ), SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd16401q5 $ENDCMP # $CMP CSD16403Q5A D 100A Id, 25V Vds, NexFET N-Channel Power MOSFET, 2.8mOhm Ron, Qg (typ) 13.3nC, SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd16403q5a $ENDCMP # $CMP CSD16404Q5A D 100A Id, 25V Vds, NexFET N-Channel Power MOSFET, 5.1mOhm Ron, Qg (typ) 6.5nC, SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd16404q5a $ENDCMP # $CMP CSD16407Q5 D 100A Id, 25V Vds, NexFET N-Channel Power MOSFET, 2.4mOhm Ron, Qg (typ) 13.3nC, SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd16407q5 $ENDCMP # $CMP CSD16408Q5 D 100A Id, 25V Vds, NexFET N-Channel Power MOSFET, 4.5mOhm Ron, Qg (typ) 6.7nC, SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd16408q5 $ENDCMP # $CMP CSD16410Q5A D 100A Id, 25V Vds, NexFET N-Channel Power MOSFET, 8.5mOhm Ron, Qg (typ) 3.9nC, SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd16410q5a $ENDCMP # $CMP CSD16412Q5A D 100A Id, 25V Vds, NexFET N-Channel Power MOSFET, 11mOhm Ron, Qg (typ) 2.9nC, SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd16412q5a $ENDCMP # $CMP CSD16413Q5A D 100A Id, 25V Vds, NexFET N-Channel Power MOSFET, 3.9mOhm Ron, 9nC Qg(typ), SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd16413q5a $ENDCMP # $CMP CSD16414Q5 D 100A Id, 25V Vds, NexFET N-Channel Power MOSFET, 1.9mOhm Ron, Qg (typ) 16.6nC, SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd16414q5 $ENDCMP # $CMP CSD16415Q5 D 100A Id, 25V Vds, NexFET N-Channel Power MOSFET, 1.15mOhm Ron, 21nC Qg(typ), SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd16415q5 $ENDCMP # $CMP CSD16570Q5B D 100A Id, 25V Vds, NexFET N-Channel Power MOSFET, 0.59mOhm Ron, 95nC Qg(typ), SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd16570q5b $ENDCMP # $CMP CSD17301Q5A D 100A Id, 30V Vds, NexFET N-Channel Power MOSFET, 3mOhm Ron, 19nC Qg(typ), SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd17301q5a $ENDCMP # $CMP CSD17302Q5A D 100A Id, 30V Vds, NexFET N-Channel Power MOSFET, 9mOhm Ron, Qg (typ) 5.4nC, SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd17302q5a $ENDCMP # $CMP CSD17303Q5 D 100A Id, 30V Vds, NexFET N-Channel Power MOSFET, 2.6mOhm Ron, 18nC Qg(typ), SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd17303q5 $ENDCMP # $CMP CSD17305Q5A D 100A Id, 30V Vds, NexFET N-Channel Power MOSFET, 2.8mOhm Ron, Qg (typ) 14.1nC, SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd17305q5a $ENDCMP # $CMP CSD17306Q5A D 100A Id, 30V Vds, NexFET N-Channel Power MOSFET, 4.2mOhm Ron, Qg (typ) 11.8nC, SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd17306q5a $ENDCMP # $CMP CSD17307Q5A D 100A Id, 30V Vds, NexFET N-Channel Power MOSFET, 12.1mOhm Ron, 4nC Qg(typ), SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd17307q5a $ENDCMP # $CMP CSD17310Q5A D 100A Id, 30V Vds, NexFET N-Channel Power MOSFET, 5.9mOhm Ron, Qg (typ) 8.9nC, SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd17310q5a $ENDCMP # $CMP CSD17311Q5 D 100A Id, 30V Vds, NexFET N-Channel Power MOSFET, 2.3mOhm Ron, 24nC Qg(typ), SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd17311q5 $ENDCMP # $CMP CSD17312Q5 D 100A Id, 30V Vds, NexFET N-Channel Power MOSFET, 1.7mOhm Ron, 28nC Qg(typ), SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd17312q5 $ENDCMP # $CMP CSD17313Q2 D 5A Id, 30V Vds, NexFET N-Channel Power MOSFET, 24mOhm Ron, SON-6 K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/ds/symlink/csd17313q2.pdf $ENDCMP # $CMP CSD17322Q5A D 100A Id, 30V Vds, NexFET N-Channel Power MOSFET, 12.4mOhm Ron, Qg (typ) 3.6nC, SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd17322q5a $ENDCMP # $CMP CSD17327Q5A D 100A Id, 30V Vds, NexFET N-Channel Power MOSFET, 15.5mOhm Ron, Qg (typ) 2.8nC, SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd17327q5a $ENDCMP # $CMP CSD17501Q5A D 100A Id, 30V Vds, NexFET N-Channel Power MOSFET, 2.9mOhm Ron, Qg (typ) 13.2nC, SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd17501q5a $ENDCMP # $CMP CSD17505Q5A D 100A Id, 30V Vds, NexFET N-Channel Power MOSFET, 3.5mOhm Ron, 10nC Qg(typ), SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd17505q5a $ENDCMP # $CMP CSD17506Q5A D 100A Id, 30V Vds, NexFET N-Channel Power MOSFET, 4mOhm Ron, Qg (typ) 8.3nC, SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd17506q5a $ENDCMP # $CMP CSD17507Q5A D 100A Id, 30V Vds, NexFET N-Channel Power MOSFET, 10.8mOhm Ron, Qg (typ) 2.8nC, SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd17507q5a $ENDCMP # $CMP CSD17510Q5A D 100A Id, 30V Vds, NexFET N-Channel Power MOSFET, 5.2mOhm Ron, Qg (typ) 6.4nC, SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd17510q5a $ENDCMP # $CMP CSD17522Q5A D 100A Id, 30V Vds, NexFET N-Channel Power MOSFET, 8.1mOhm Ron, Qg (typ) 3.6nC, SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd17522q5a $ENDCMP # $CMP CSD17527Q5A D 100A Id, 30V Vds, NexFET N-Channel Power MOSFET, 10.8mOhm Ron, Qg (typ) 2.8nC, SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd17527q5a $ENDCMP # $CMP CSD17551Q5A D 48A Id, 30V Vds, NexFET N-Channel Power MOSFET, 8.8mOhm Ron, 6nC Qg(typ), SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd17551q5a $ENDCMP # $CMP CSD17552Q5A D 60A Id, 30V Vds, NexFET N-Channel Power MOSFET, 6.2mOhm Ron, 9nC Qg(typ), SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd17552q5a $ENDCMP # $CMP CSD17553Q5A D 100A Id, 30V Vds, NexFET N-Channel Power MOSFET, 3.1mOhm Ron, Qg (typ) 17.5nC, SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd17553q5a $ENDCMP # $CMP CSD17555Q5A D 100A Id, 30V Vds, NexFET N-Channel Power MOSFET, 2.7mOhm Ron, 23nC Qg(typ), SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd17555q5a $ENDCMP # $CMP CSD17556Q5B D 100A Id, 30V Vds, NexFET N-Channel Power MOSFET, 1.4mOhm Ron, Qg (typ) 28.5nC, SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd17556q5b $ENDCMP # $CMP CSD17559Q5 D 100A Id, 30V Vds, NexFET N-Channel Power MOSFET, 1.15mOhm Ron, 39nC Qg(typ), SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd17559q5 $ENDCMP # $CMP CSD17570Q5B D 100A Id, 30V Vds, NexFET N-Channel Power MOSFET, 0.69mOhm Ron, 93nC Qg(typ), SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd17570q5b $ENDCMP # $CMP CSD17573Q5B D 100A Id, 30V Vds, NexFET N-Channel Power MOSFET, 1mOhm Ron, 49nC Qg(typ), SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd17573q5b $ENDCMP # $CMP CSD17576Q5B D 100A Id, 30V Vds, NexFET N-Channel Power MOSFET, 2mOhm Ron, 25nC Qg(typ), SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd17576q5b $ENDCMP # $CMP CSD17577Q5A D 60A Id, 30V Vds, NexFET N-Channel Power MOSFET, 4.2mOhm Ron, 13nC Qg(typ), SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd17577q5a $ENDCMP # $CMP CSD17578Q5A D 25A Id, 30V Vds, NexFET N-Channel Power MOSFET, 6.9mOhm Ron, Qg (typ) 7.9nC, SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd17578q5a $ENDCMP # $CMP CSD17579Q5A D 25A Id, 30V Vds, NexFET N-Channel Power MOSFET, 9.7mOhm Ron, Qg (typ) 5.4nC, SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd17579q5a $ENDCMP # $CMP CSD18501Q5A D 100A Id, 40V Vds, NexFET N-Channel Power MOSFET, 3.2mOhm Ron, 42nC Qg(typ), SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd18501q5a $ENDCMP # $CMP CSD18502Q5B D 100A Id, 40V Vds, NexFET N-Channel Power MOSFET, 2.3mOhm Ron, 52nC Qg(typ), SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd18502q5b $ENDCMP # $CMP CSD18503Q5A D 100A Id, 40V Vds, NexFET N-Channel Power MOSFET, 4.3mOhm Ron, 26nC Qg(typ), SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd18503q5a $ENDCMP # $CMP CSD18504Q5A D 50A Id, 40V Vds, NexFET N-Channel Power MOSFET, 6.6mOhm Ron, 16nC Qg(typ), SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd18504q5a $ENDCMP # $CMP CSD18509Q5B D 100A Id, 40V Vds, NexFET N-Channel Power MOSFET, 1.2mOhm Ron, 150nC Qg(typ), SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd18509q5b $ENDCMP # $CMP CSD18531Q5A D 100A Id, 60V Vds, NexFET N-Channel Power MOSFET, 4.6mOhm Ron, 36nC Qg(typ), SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd18531q5a $ENDCMP # $CMP CSD18532NQ5B D 100A Id, 60V Vds, NexFET N-Channel Power MOSFET, 3.4mOhm Ron, 49nC Qg(typ), SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd18532nq5b $ENDCMP # $CMP CSD18532Q5B D 100A Id, 60V Vds, NexFET N-Channel Power MOSFET, 3.2mOhm Ron, 44nC Qg(typ), SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd18532q5b $ENDCMP # $CMP CSD18533Q5A D 100A Id, 60V Vds, NexFET N-Channel Power MOSFET, 5.9mOhm Ron, 29nC Qg(typ), SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd18533q5a $ENDCMP # $CMP CSD18534Q5A D 50A Id, 60V Vds, NexFET N-Channel Power MOSFET, 9.8mOhm Ron, 17nC Qg(typ), SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd18534q5a $ENDCMP # $CMP CSD18537NQ5A D 50A Id, 60V Vds, NexFET N-Channel Power MOSFET, 13mOhm Ron, 14nC Qg(typ), SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd18537nq5a $ENDCMP # $CMP CSD18540Q5B D 100A Id, 60V Vds, NexFET N-Channel Power MOSFET, 2.2mOhm Ron, 41nC Qg(typ), SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd18540q5b $ENDCMP # $CMP CSD18563Q5A D 100A Id, 60V Vds, NexFET N-Channel Power MOSFET, 6.8mOhm Ron, 15nC Qg(typ), SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd18563q5a $ENDCMP # $CMP CSD19502Q5B D 100A Id, 80V Vds, NexFET N-Channel Power MOSFET, 4.1mOhm Ron, 48nC Qg(typ), SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd19502q5b $ENDCMP # $CMP CSD19531Q5A D 100A Id, 100V Vds, NexFET N-Channel Power MOSFET, 6.4mOhm Ron, 37nC Qg(typ), SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd19531q5a $ENDCMP # $CMP CSD19532Q5B D 100A Id, 100V Vds, NexFET N-Channel Power MOSFET, 4.9mOhm Ron, 48nC Qg(typ), SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd19532q5b $ENDCMP # $CMP CSD19533Q5A D 100A Id, 100V Vds, NexFET N-Channel Power MOSFET, 9.5mOhm Ron, 27nC Qg(typ), SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd19533q5a $ENDCMP # $CMP CSD19534Q5A D 50A Id, 100V Vds, NexFET N-Channel Power MOSFET, 15.1mOhm Ron, 17nC Qg(typ), SON8 5x6mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/gpn/csd19534q5a $ENDCMP # $CMP CSD19537Q3 D 50A Id, 100V Vds, NexFET N-Channel Power MOSFET, 13mOhm Ron, Qg Typ 16.0nC, VSON8 3.3x3.3mm K NexFET Power MOSFET N-MOS F http://www.ti.com/lit/ds/symlink/csd19537q3.pdf $ENDCMP # $CMP CSD25302Q2 D 5A Id, 20V Vds, NexFET P-Channel Power MOSFET, 39mOhm Ron, SON-6 K NexFET Power MOSFET P-MOS F https://www.ti.com/lit/ds/slps234b/slps234b.pdf $ENDCMP # $CMP DMC2053UVT D 4.6A/-3.2A Id, 20V Vds, Complementary pair enhancement mode P-Channel and N-Channel MOSFET, TSOT-23-6 K complementary mosfet F https://www.diodes.com/assets/Datasheets/DMC2053UVT.pdf $ENDCMP # $CMP DMC3071LVT D 3.4A/-2.7A Id, 30V Vds, Complementary pair enhancement mode P-Channel and N-Channel MOSFET, TSOT-23-6 K complementary mosfet F https://www.diodes.com/assets/Datasheets/DMC3071LVT.pdf $ENDCMP # $CMP DMG1012T D 20V Vds, 0.63 Id, N-Channel MOSFET with ESD protection, SOT-523 K N-Channel MOSFET F https://www.diodes.com/assets/Datasheets/ds31783.pdf $ENDCMP # $CMP DMG2301L D -3A Id, -20V Vds, P-Channel MOSFET, SOT-23 K P-Channel MOSFET F https://www.diodes.com/assets/Datasheets/DMG2301L.pdf $ENDCMP # $CMP DMG2302U D 4.2A Id, 20V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/DMG2302U.pdf $ENDCMP # $CMP DMG3402L D 4A Id, 30V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/DMG3402L.pdf $ENDCMP # $CMP DMG3404L D 5.8A Id, 30V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/DMG3404L.pdf $ENDCMP # $CMP DMG3406L D 3.6A Id, 30V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/DMG3406L.pdf $ENDCMP # $CMP DMG3414U D 4.2A Id, 20V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/ds31739.pdf $ENDCMP # $CMP DMG3418L D 4A Id, 30V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/DMG3418L.pdf $ENDCMP # $CMP DMN10H220L D 1.6A Id, 100V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/DMN10H220L.pdf $ENDCMP # $CMP DMN10H700S D 0.7A Id, 100V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/DMN10H700S.pdf $ENDCMP # $CMP DMN13H750S D 1A Id, 130V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/DMN13H750S.pdf $ENDCMP # $CMP DMN2041L D 6.4A Id, 20V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F https://www.diodes.com/assets/Datasheets/products_inactive_data/DMN2041L.pdf $ENDCMP # $CMP DMN2050L D 5.9A Id, 20V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/ds31502.pdf $ENDCMP # $CMP DMN2056U D 4A Id, 20V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/DMN2056U.pdf $ENDCMP # $CMP DMN2058U D 4.6A Id, 20V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/DMN2058U.pdf $ENDCMP # $CMP DMN2075U D 4.2A Id, 20V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/DMN2075U.pdf $ENDCMP # $CMP DMN2230U D 2A Id, 20V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/ds31180.pdf $ENDCMP # $CMP DMN24H11DS D 0.27A Id, 240V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/DMN24H11DS.pdf $ENDCMP # $CMP DMN24H3D5L D 0.48A Id, 240V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/DMN24H3D5L.pdf $ENDCMP # $CMP DMN3042L D 5.8A Id, 30V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/DMN3042L.pdf $ENDCMP # $CMP DMN3051L D 5.8A Id, 30V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/ds31347.pdf $ENDCMP # $CMP DMN30H4D0L D 0.25A Id, 300V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/DMN30H4D0L.pdf $ENDCMP # $CMP DMN3110S D 3.3A Id, 30V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/DMN3110S.pdf $ENDCMP # $CMP DMN3150L D 3.8A Id, 30V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/ds31126.pdf $ENDCMP # $CMP DMN3300U D 2A Id, 30V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/ds31181.pdf $ENDCMP # $CMP DMN3404L D 5.8A Id, 30V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/ds31787.pdf $ENDCMP # $CMP DMN6075S D 2.5A Id, 60V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/DMN6075S.pdf $ENDCMP # $CMP DMN6140L D 2.3A Id, 60V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/DMN6140L.pdf $ENDCMP # $CMP DMN67D7L D 0.21A Id, 60V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/DMN67D7L.pdf $ENDCMP # $CMP DMN67D8L D 0.21A Id, 60V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/DMN67D8L.pdf $ENDCMP # $CMP DMP3013SFV D -12A Id, -30V Vds, P-Channel Power MOSFET, 9.5mOhm Ron, 33.7nC Qg (typ), PowerDI3333-8 K P-Channel MOSFET F https://www.diodes.com/assets/Datasheets/DMP3013SFV.pdf $ENDCMP # $CMP FDC6330L D -2.3A, 20V Vds, Integrated load switch, P-Channel MOSFET driven by small N-Channel MOSFET, TSOT-23-6 K complementary mosfet F https://www.onsemi.com/pub/Collateral/FDC6330L-D.PDF $ENDCMP # $CMP FDG1024NZ D 1.2A Id, 20V Vds, Dual N-Channel MOSFET, 175mOhm Ron, SC-70-6 K Dual N-Channel MOSFET Logic Level F http://www.fairchildsemi.com/ds/FD/FDG1024NZ.pdf $ENDCMP # $CMP FDG6335N D 0.7A Id, 20V Vds, Dual N-Channel MOSFET, 300mOhm Ron, SC-70-6 K Dual N-Channel MOSFET F http://www.gneic.com/product/datasheet/FDG6335N-1122853.pdf $ENDCMP # $CMP FDMC8032L D 7A Id, 40V Vds, Dual N-Channel MOSFET, 20mOhm Ron, Power33 Package K Dual N-Channel MOSFET F https://www.fairchildsemi.com/datasheets/FD/FDMC8032L.pdf $ENDCMP # $CMP FDMS8050 D 55A Id, 30V Vds, N-Channel PowerTrench MOSFET, 0.65mOhm Ron, 285nC Qgmax, -55 to 150 °C, 5x6mm SON8 K powertrench MOSFET fairchild F https://www.fairchildsemi.com/datasheets/FD/FDMS8050.pdf $ENDCMP # $CMP FDMS8050ET30 D 55A Id, 30V Vds, N-Channel PowerTrench MOSFET, 0.65mOhm Ron, 285nC Qgmax, -55 to 175 °C, 5x6mm SON8 K powertrench MOSFET fairchild F https://www.fairchildsemi.com/datasheets/FD/FDMS8050ET30.pdf $ENDCMP # $CMP FDMS8350L D 47A Id, 40V Vds, N-Channel PowerTrench MOSFET, 0.85mOhm Ron, 242nC Qgmax, -55 to 150 °C, 5x6mm SON8 K powertrench MOSFET fairchild F https://www.fairchildsemi.com/datasheets/FD/FDMS8350L.pdf $ENDCMP # $CMP FDMS8350LET40 D 49A Id, 40V Vds, N-Channel PowerTrench MOSFET, 0.85mOhm Ron, 242nC Qgmax, -55 to 175 °C, 5x6mm SON8 K powertrench-MOSFET MOSFET fairchild F https://www.fairchildsemi.com/datasheets/FD/FDMS8350LET40.pdf $ENDCMP # $CMP FDMS86150 D 16A Id, 100V Vds, N-Channel PowerTrench MOSFET, 4.85mOhm Ron, 62nC Qgmax, -55 to 150 °C, 5x6mm SON8 K powertrench MOSFET fairchild F https://www.fairchildsemi.com/datasheets/FD/FDMS86150.pdf $ENDCMP # $CMP FDMS86150ET100 D 16A Id, 100V Vds, N-Channel PowerTrench MOSFET, 4.85mOhm Ron, 62nC Qgmax, -55 to 175 °C, 5x6mm SON8 K powertrench-MOSFET MOSFET fairchild F https://www.fairchildsemi.com/datasheets/FD/FDMS86150ET100.pdf $ENDCMP # $CMP FDMS86152 D 14A Id, 100V Vds, N-Channel PowerTrench MOSFET, 6mOhm Ron, 50nC Qgmax, -55 to 150 °C, 5x6mm SON8 K powertrench MOSFET fairchild F https://www.fairchildsemi.com/datasheets/FD/FDMS86152.pdf $ENDCMP # $CMP FDMS86202 D 13.5A Id, 120V Vds, N-Channel Shielded Gate PowerTrench MOSFET, 7.2mOhm Ron, 64nC Qgmax, -55 to 150 °C, 5x6mm SON8 K shielded-gate-powertrench MOSFET fairchild F https://www.fairchildsemi.com/datasheets/FD/FDMS86202.pdf $ENDCMP # $CMP FDMS86202ET120 D 13.5A Id, 120V Vds, N-Channel Shielded Gate PowerTrench MOSFET, 7.2mOhm Ron, 64nC Qgmax, -55 to 175 °C, 5x6mm SON8 K shielded-gate-powertrench MOSFET fairchild F https://www.fairchildsemi.com/datasheets/FD/FDMS86202ET120.pdf $ENDCMP # $CMP FDMS86255 D 10A Id, 150V Vds, N-Channel Shielded Gate PowerTrench MOSFET, 12.4mOhm Ron, 63nC Qgmax, -55 to 150 °C, 5x6mm SON8 K shielded-gate-powertrench-MOSFET MOSFET fairchild F https://www.fairchildsemi.com/datasheets/FD/FDMS86255.pdf $ENDCMP # $CMP FDMS86255ET150 D 10A Id, 150V Vds, N-Channel Shielded Gate PowerTrench MOSFET, 12.4mOhm Ron, 63nC Qgmax, -55 to 175 °C, 5x6mm SON8 K shielded-gate-powertrench MOSFET fairchild F https://www.fairchildsemi.com/datasheets/FD/FDMS86255ET150.pdf $ENDCMP # $CMP FDMS86350 D 25A Id, 80V Vds, N-Channel PowerTrench MOSFET, 2.4mOhm Ron, 155nC Qgmax, -55 to 150 °C, 5x6mm SON8 K powertrench MOSFET fairchild F https://www.fairchildsemi.com/datasheets/FD/FDMS86350.pdf $ENDCMP # $CMP FDMS86350ET80 D 25A Id, 80V Vds, N-Channel PowerTrench MOSFET, 2.4mOhm Ron, 155nC Qgmax, -55 to 175 °C, 5x6mm SON8 K powertrench MOSFET fairchild F https://www.fairchildsemi.com/datasheets/FD/FDMS86350ET80.pdf $ENDCMP # $CMP FDMS86550 D 32A Id, 60V Vds, N-Channel PowerTrench MOSFET, 1.65mOhm Ron, 154nC Qgmax, -55 to 150 °C, 5x6mm SON8 K powertrench MOSFET fairchild F https://www.fairchildsemi.com/datasheets/FD/FDMS86550.pdf $ENDCMP # $CMP FDMS86550ET60 D 32A Id, 60V Vds, N-Channel PowerTrench MOSFET, 1.65mOhm Ron, 154nC Qgmax, -55 to 175 °C, 5x6mm SON8 K powertrench MOSFET fairchild F https://www.fairchildsemi.com/datasheets/FD/FDMS86550ET60.pdf $ENDCMP # $CMP FDMT800100DC D 24A Id, 100V Vds, N-Channel Dual Cool PowerTrench MOSFET, 2.95mOhm Ron, 111nC Qgmax, -55 to 150 °C, 5x6mm SON8 K dual-cool-powertrench MOSFET fairchild F https://www.fairchildsemi.com/datasheets/FD/FDMT800100DC.pdf $ENDCMP # $CMP FDMT800120DC D 20A Id, 120V Vds, N-Channel Dual cool 88 PowerTrench MOSFET, 4.2mOhm Ron, 107nC Qgmax, -55 to 150 °C, 5x6mm SON8 K dual-cool-powertrench MOSFET fairchild F https://www.fairchildsemi.com/datasheets/FD/FDMT800120DC.pdf $ENDCMP # $CMP FDMT800150DC D 15A Id, 150V Vds, N-Channel Dual cool PowerTrench MOSFET, 6.5mOhm Ron, 108nC Qgmax, -55 to 150 °C, 5x6mm SON8 K dual-cool-powertrench MOSFET fairchild F https://www.fairchildsemi.com/datasheets/FD/FDMT800150DC.pdf $ENDCMP # $CMP FDMT800152DC D 13A Id, 150V Vds, N-Channel Dual Cool PowerTrench MOSFET, 9.0mOhm Ron, 83nC Qgmax, -55 to 150 °C, 5x6mm SON8 K dual-cool-powertrench MOSFET fairchild F https://www.fairchildsemi.com/datasheets/FD/FDMT800152DC.pdf $ENDCMP # $CMP FDMT80060DC D 43A Id, 60V Vds, N-Channel Dual Cool PowerTrench MOSFET, 1.1mOhm Ron, 238nC Qgmax, -55 to 150 °C, 5x6mm SON8 K dual-cool-powertrench MOSFET fairchild F https://www.fairchildsemi.com/datasheets/FD/FDMT80060DC.pdf $ENDCMP # $CMP FDMT80080DC D 36A Id, 80V Vds, N-Channel Dual Cool PowerTrench MOSFET, 1.35mOhm Ron, 273nC Qgmax, -55 to 150 °C, 5x6mm SON8 K dual-cool-powertrench MOSFET fairchild F https://www.fairchildsemi.com/datasheets/FD/FDMT80080DC.pdf $ENDCMP # $CMP FDS2734 D 3.0A Id, 250V Vds, N-Channel MOSFET, 117mOhm Ron, SOIC-8 K N-Channel MOSFET F http://www.onsemi.com/pub/Collateral/FDS2734-D.pdf $ENDCMP # $CMP FDS4559 D 4.5A Id, 60V Vds, Dual N and P Channel MOSFET, 55mOhm Ron, 10V Vgs, SO8L K Dual N-Channel P-Channel MOSFET F https://www.fairchildsemi.com/datasheets/FD/FDS4559.pdf $ENDCMP # $CMP FDS4897AC D 6.1A Id, 40V Vds, Dual N and P Channel MOSFET, 26mOhm Ron, 10V Vgs, SO8L K Dual N-Channel P-Channel MOSFET F https://www.fairchildsemi.com/datasheets/FD/FDS4897AC.pdf $ENDCMP # $CMP FDS4897C D 6.2A Id, 40V Vds, Dual N and P Channel MOSFET, 29mOhm Ron, 10V Vgs, SO8L K Dual N-Channel P-Channel MOSFET F https://www.fairchildsemi.com/datasheets/FD/FDS4897C.pdf $ENDCMP # $CMP FDS6630A D 6.5A Id, 30V Vds, N-Channel MOSFET, 38mOhm Ron, SOIC-8 K N-Channel MOSFET F http://www.onsemi.com/pub/Collateral/FDS6630A-D.pdf $ENDCMP # $CMP FDS6890A D 7.5A Id, 20V Vds, Dual N-Channel MOSFET, 18mOhm Ron, SO-8 K Dual N-Channel MOSFET F http://www.fairchildsemi.com/ds/FD/FDS6890A.pdf $ENDCMP # $CMP FDS6892A D 7.5A Id, 20V Vds, Dual N-Channel MOSFET PWM Optimized, 18mOhm Ron, SO-8 K Dual N-Channel MOSFET Low Gate Charge F http://www.fairchildsemi.com/ds/FD/FDS6892A.pdf $ENDCMP # $CMP FDS6898A D 9.4A Id, 20V Vds, Dual N-Channel MOSFET, 14mOhm Ron, SO-8 K Dual N-Channel MOSFET F http://www.fairchildsemi.com/ds/FD/FDS6898A.pdf $ENDCMP # $CMP FDS6930A D 5.5A Id, 30V Vds, Dual N-Channel Logic Level MOSFET, 40mOhm Ron, SO-8 K Dual N-Channel MOSFET F http://www.onsemi.com/pub/Collateral/FDS6930A-D.PDF $ENDCMP # $CMP FDS6930B D 5.5A Id, 30V Vds, Dual N-Channel Logic Level MOSFET, 38mOhm Ron, SO-8 K Dual N-Channel MOSFET F http://www.onsemi.com/pub/Collateral/FDS6930B-D.PDF $ENDCMP # $CMP FDS8960C D 7A Id, 35V Vds, Dual N and P Channel MOSFET, 24mOhm Ron, 10V Vgs, SO8L K Dual N-Channel P-Channel MOSFET F https://www.fairchildsemi.com/datasheets/FD/FDS8960C.pdf $ENDCMP # $CMP FDS9435A D -5.3A Id, -30V Vds, P-Channel MOSFET, 50mOhm Ron, SO-8 K P-Channel MOSFET F https://www.onsemi.com/pub/Collateral/FDS9435A-D.PDF $ENDCMP # $CMP FDS9926A D 6.5A Id, 20V Vds, Dual N-Channel MOSFET, 30mOhm Ron, SO-8 K Dual N-Channel MOSFET F http://www.fairchildsemi.com/ds/FD/FDS9926A.pdf $ENDCMP # $CMP FDS9934C D 6.5A Id, 20V Vds, Dual N and P Channel MOSFET, 30mOhm Ron, 4.5V Vgs, SO8L K Dual N-Channel P-Channel MOSFET F https://www.fairchildsemi.com/datasheets/FD/FDS9934C.pdf $ENDCMP # $CMP FQP27P06 D -27A Id, -60V Vds, QFET P-Channel MOSFET, TO-220 K QFET P-Channel MOSFET F https://www.onsemi.com/pub/Collateral/FQP27P06-D.PDF $ENDCMP # $CMP IPD50R380CE D 14.1A Id, 500V Vds, CoolMOS N-Channel Power MOSFET, 380mOhm Ron, 24.8nC Qg (typ), TO-252-2 K CoolMOS Power MOSFET N-MOS F https://www.infineon.com/dgdl/Infineon-IPD50R380CE-DS-v02_01-en.pdf?fileId=db3a30433ecb86d4013ed0a2ef580f38 $ENDCMP # $CMP IPD50R3K0CE D 1.7A Id, 500V Vds, CoolMOS N-Channel Power MOSFET, 3Ohm Ron, 4.3nC Qg (typ), TO-252-2 K CoolMOS Power MOSFET N-MOS F https://www.infineon.com/dgdl/IPx50R3K0CE_2_0.pdf?folderId=db3a3043163797a6011637d4bae7003b&fileId=db3a304339dcf4b10139e7e9ff592ce4 $ENDCMP # $CMP IPDD60R050G7 D 47A Id, 600V Vds, 50mOhm, N-Channel MOSFET, CoolMOS G7, PG-HDSOP-10-1 (DDPAK) K N-Channel MOSFET F https://www.infineon.com/dgdl/Infineon-IPDD60R050G7-DS-v02_00-EN.pdf?fileId=5546d4626102d35a0161707eb2f97810 $ENDCMP # $CMP IPDD60R080G7 D 29A Id, 600V Vds, 80mOhm, N-Channel MOSFET, CoolMOS G7, PG-HDSOP-10-1 (DDPAK) K N-Channel MOSFET F https://www.infineon.com/dgdl/Infineon-IPDD60R080G7-DS-v02_00-EN.pdf?fileId=5546d4626102d35a016170882f757a07 $ENDCMP # $CMP IPDD60R102G7 D 23A Id, 600V Vds, 102mOhm, N-Channel MOSFET, CoolMOS G7, PG-HDSOP-10-1 (DDPAK) K N-Channel MOSFET F https://www.infineon.com/dgdl/Infineon-IPDD60R102G7-DS-v02_00-EN.pdf?fileId=5546d4626102d35a01617087ee7379ed $ENDCMP # $CMP IPDD60R125G7 D 20A Id, 600V Vds, 125mOhm, N-Channel MOSFET, CoolMOS G7, PG-HDSOP-10-1 (DDPAK) K N-Channel MOSFET F https://www.infineon.com/dgdl/Infineon-IPDD60R125G7-DS-v02_00-EN.pdf?fileId=5546d4626102d35a0161706cba27778f $ENDCMP # $CMP IPDD60R150G7 D 16A Id, 600V Vds, 150mOhm, N-Channel MOSFET, CoolMOS G7, PG-HDSOP-10-1 (DDPAK) K N-Channel MOSFET F https://www.infineon.com/dgdl/Infineon-IPDD60R150G7-DS-v02_00-EN.pdf?fileId=5546d4626102d35a016170806aa57863 $ENDCMP # $CMP IPDD60R190G7 D 13A Id, 600V Vds, 190mOhm, N-Channel MOSFET, CoolMOS G7, PG-HDSOP-10-1 (DDPAK) K N-Channel MOSFET F https://www.infineon.com/dgdl/Infineon-IPDD60R190G7-DS-v02_00-EN.pdf?fileId=5546d4626102d35a01617087dc0f79ea $ENDCMP # $CMP IPP060N06N D 45A Id, 60V Vds, Single N-Channel Power MOSFET, 6mOhm Ron, TO-220 K N-Channel Power MOSFET Infineon F https://www.infineon.com/dgdl/Infineon-IPP060N06N-DS-v02_02-en.pdf?fileId=db3a30433727a44301372c06d9d7498a $ENDCMP # $CMP IPT012N08N5 D 300A Id, 80V Vds, OptiMOS N-Channel Power MOSFET, 1.2mOhm Ron, Qg (typ) 178.0nC, PG-HSOF-8 K OptiMOS Power MOSFET N-MOS F http://www.infineon.com/dgdl/Infineon-IPT012N08N5-DS-v02_01-EN.pdf?fileId=5546d4624a75e5f1014aca59127a1eb9 $ENDCMP # $CMP IPT015N10N5 D 300A Id, 100V Vds, OptiMOS N-Channel Power MOSFET, 1.5mOhm Ron, Qg (typ) 169.0nC, PG-HSOF-8 K OptiMOS Power MOSFET N-MOS F http://www.infineon.com/dgdl/Infineon-IPT015N10N5-DS-v02_01-EN.pdf?fileId=5546d4624a75e5f1014ac94680661aff $ENDCMP # $CMP IPT020N10N3 D 300A Id, 100V Vds, OptiMOS N-Channel Power MOSFET, 2.0mOhm Ron, Qg (typ) 156.0nC, PG-HSOF-8 K OptiMOS Power MOSFET N-MOS F http://www.infineon.com/dgdl/Infineon-IPT020N10N3-DS-v02_00-en.pdf?fileId=db3a30433e9d5d11013e9e58035b0158 $ENDCMP # $CMP IRF3205 D 110A Id, 55V Vds, Single N-Channel HEXFET Power MOSFET, 8mOhm Ron, TO-220AB K Single N-Channel HEXFET Power MOSFET F http://www.irf.com/product-info/datasheets/data/irf3205.pdf $ENDCMP # $CMP IRF40DM229 D 159A Id, 40V Vds, 1.85mOhm Rds, N-Channel MOSFET, DirectFET MF K N-Channel MOSFET F https://www.infineon.com/dgdl/Infineon-IRF40DM229-DS-v02_00-EN.pdf?fileId=5546d462557e6e890155a15c899160ea $ENDCMP # $CMP IRF4905 D -74A Id, -55V Vds, Single P-Channel HEXFET Power MOSFET, 20mOhm Ron, TO-220AB K Single P-Channel HEXFET Power MOSFET F http://www.infineon.com/dgdl/irf4905.pdf?fileId=5546d462533600a4015355e32165197c $ENDCMP # $CMP IRF540N D 33A Id, 100V Vds, HEXFET N-Channel MOSFET, TO-220 K HEXFET N-Channel MOSFET F http://www.irf.com/product-info/datasheets/data/irf540n.pdf $ENDCMP # $CMP IRF60DM206 D 130A Id, 60V Vds, 2.9mOhm Rds, N-Channel MOSFET, DirectFET ME K N-Channel MOSFET F https://www.infineon.com/dgdl/irf60dm206.pdf?fileId=5546d462533600a4015355e433aa19ca $ENDCMP # $CMP IRF6613 D 150A Id, 40V Vds, 3.4mOhm Rds, N-Channel MOSFET, DirectFET MT K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6613pbf.pdf?fileId=5546d462533600a4015355e82b9b1a0d $ENDCMP # $CMP IRF6614 D 12.7A Id, 40V Vds, 8.3mOhm Rds, N-Channel MOSFET, DirectFET ST K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6614pbf.pdf?fileId=5546d462533600a4015355e8346c1a0f $ENDCMP # $CMP IRF6616 D 19A Id, 40V Vds, 5mOhm Rds, N-Channel MOSFET, DirectFET MX K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6616pbf.pdf?fileId=5546d462533600a4015355e843461a13 $ENDCMP # $CMP IRF6617 D 55A Id, 30V Vds, 8.1mOhm Rds, N-Channel MOSFET, DirectFET ST K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6617pbf.pdf?fileId=5546d462533600a4015355e853f21a17 $ENDCMP # $CMP IRF6618 D 170A Id, 30V Vds, 2.2mOhm Rds, N-Channel MOSFET, DirectFET MT K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6618pbf.pdf?fileId=5546d462533600a4015355e862c21a1b $ENDCMP # $CMP IRF6620 D 150A Id, 20V Vds, 2.7mOhm Rds, N-Channel MOSFET, DirectFET MX K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6620pbf.pdf?fileId=5546d462533600a4015355e8831d1a23 $ENDCMP # $CMP IRF6621 D 12A Id, 30V Vds, 9.1mOhm Rds, N-Channel MOSFET, DirectFET SQ K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6621pbf.pdf?fileId=5546d462533600a4015355e8923b1a27 $ENDCMP # $CMP IRF6622 D 15A Id, 25V Vds, 6.3mOhm Rds, N-Channel MOSFET, DirectFET SQ K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6622pbf.pdf?fileId=5546d462533600a4015355e89a3a1a29 $ENDCMP # $CMP IRF6623 D 55A Id, 20V Vds, 5.7mOhm Rds, N-Channel MOSFET, DirectFET ST K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6623pbf.pdf?fileId=5546d462533600a4015355e8aa811a2d $ENDCMP # $CMP IRF6628 D 27A Id, 25V Vds, 2.5mOhm Rds, N-Channel MOSFET, DirectFET MX K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6628pbf.pdf?fileId=5546d462533600a4015355e8c0d71a33 $ENDCMP # $CMP IRF6631 D 13A Id, 30V Vds, 7.8mOhm Rds, N-Channel MOSFET, DirectFET SQ K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6631pbf.pdf?fileId=5546d462533600a4015355e8d0561a37 $ENDCMP # $CMP IRF6635 D 32A Id, 30V Vds, 1.8mOhm Rds, N-Channel MOSFET, DirectFET MX K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6635pbf.pdf?fileId=5546d462533600a4015355e8e7ab1a3d $ENDCMP # $CMP IRF6636 D 18A Id, 20V Vds, 4.5mOhm Rds, N-Channel MOSFET, DirectFET ST K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6636pbf.pdf?fileId=5546d462533600a4015355e8f7b31a41 $ENDCMP # $CMP IRF6637 D 14A Id, 30V Vds, 7.7mOhm Rds, N-Channel MOSFET, DirectFET MP K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6637pbf.pdf?fileId=5546d462533600a4015355ec1fab1a45 $ENDCMP # $CMP IRF6641 D 26A Id, 200V Vds, 59.9mOhm Rds, N-Channel MOSFET, DirectFET MZ K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6641pbf.pdf?fileId=5546d462533600a4015355ec30311a49 $ENDCMP # $CMP IRF6643 D 35A Id, 150V Vds, 34.5mOhm Rds, N-Channel MOSFET, DirectFET MZ K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6643pbf.pdf?fileId=5546d462533600a4015355ec388f1a4b $ENDCMP # $CMP IRF6644 D 57A Id, 100V Vds, 13mOhm Rds, N-Channel MOSFET, DirectFET MN K N-Channel MOSFET F https://www.infineon.com/dgdl/Infineon-IRF6644-DS-v01_01-EN.pdf?fileId=5546d462533600a4015355ec47ac1a4f $ENDCMP # $CMP IRF6646 D 12A Id, 80V Vds, 9.5mOhm Rds, N-Channel MOSFET, DirectFET MN K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6646pbf.pdf?fileId=5546d462533600a4015355ec5f071a55 $ENDCMP # $CMP IRF6648 D 86A Id, 60V Vds, 7mOhm Rds, N-Channel MOSFET, DirectFET MN K N-Channel MOSFET F https://www.infineon.com/dgdl/Infineon-IRF6648-DS-v01_02-EN.pdf?fileId=5546d462533600a4015355ec6e561a59 $ENDCMP # $CMP IRF6655 D 4.2A Id, 100V Vds, 62mOhm Rds, N-Channel MOSFET, DirectFET SH K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6655pbf.pdf?fileId=5546d462533600a4015355ec76961a5b $ENDCMP # $CMP IRF6662 D 8.3A Id, 100V Vds, 22mOhm Rds, N-Channel MOSFET, DirectFET MN K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6662pbf.pdf?fileId=5546d462533600a4015355ec7edc1a5d $ENDCMP # $CMP IRF6665 D 19A Id, 100V Vds, 62mOhm Rds, N-Channel MOSFET, DirectFET SH K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6665pbf.pdf?fileId=5546d462533600a4015355ec8dcb1a62 $ENDCMP # $CMP IRF6668 D 55A Id, 80V Vds, 15mOhm Rds, N-Channel MOSFET, DirectFET MN K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6668pbf.pdf?fileId=5546d462533600a4015355ec96b91a64 $ENDCMP # $CMP IRF6674 D 13.4A Id, 60V Vds, 11mOhm Rds, N-Channel MOSFET, DirectFET MZ K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6674pbf.pdf?fileId=5546d462533600a4015355ec9f0d1a66 $ENDCMP # $CMP IRF6710S2 D 12A Id, 25V Vds, 5.9mOhm Rds, N-Channel MOSFET, DirectFET S1 K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6710s2pbf.pdf?fileId=5546d462533600a4015355ece3db1a78 $ENDCMP # $CMP IRF6711S D 19A Id, 25V Vds, 3.8mOhm Rds, N-Channel MOSFET, DirectFET SQ K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6711spbf.pdf?fileId=5546d462533600a4015355ecec0b1a7a $ENDCMP # $CMP IRF6712S D 17A Id, 25V Vds, 4.9mOhm Rds, N-Channel MOSFET, DirectFET SQ K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6712spbf.pdf?fileId=5546d462533600a4015355ecf4331a7c $ENDCMP # $CMP IRF6713S D 22A Id, 25V Vds, 3mOhm Rds, N-Channel MOSFET, DirectFET SQ K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6713spbf.pdf?fileId=5546d462533600a4015355ecfc5c1a7e $ENDCMP # $CMP IRF6714M D 29A Id, 25V Vds, 2.1mOhm Rds, N-Channel MOSFET, DirectFET MX K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6714mpbf.pdf?fileId=5546d462533600a4015355ed04be1a80 $ENDCMP # $CMP IRF6715M D 34A Id, 25V Vds, 1.6mOhm Rds, N-Channel MOSFET, DirectFET MX K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6715mpbf.pdf?fileId=5546d462533600a4015355ed0d221a82 $ENDCMP # $CMP IRF6716M D 39A Id, 25V Vds, 1.6mOhm Rds, N-Channel MOSFET, DirectFET MX K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6716mpbf.pdf?fileId=5546d462533600a4015355ed15241a84 $ENDCMP # $CMP IRF6717M D 38A Id, 25V Vds, 1.25mOhm Rds, N-Channel MOSFET, DirectFET MX K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6717mpbf.pdf?fileId=5546d462533600a4015355ed1d801a86 $ENDCMP # $CMP IRF6718L2 D 61A Id, 25V Vds, 0.7mOhm Rds, N-Channel MOSFET, DirectFET L6 K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6718l2pbf.pdf?fileId=5546d462533600a4015355ed25bd1a88 $ENDCMP # $CMP IRF6721S D 14A Id, 30V Vds, 7.3mOhm Rds, N-Channel MOSFET, DirectFET SQ K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6721spbf.pdf?fileId=5546d462533600a4015355ed33b51a8c $ENDCMP # $CMP IRF6722M D 13A Id, 30V Vds, 7.7mOhm Rds, N-Channel MOSFET, DirectFET MP K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6722mpbf.pdf?fileId=5546d462533600a4015355ed3c661a8e $ENDCMP # $CMP IRF6724M D 27A Id, 30V Vds, 2.5mOhm Rds, N-Channel MOSFET, DirectFET MX K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6724mpbf.pdf?fileId=5546d462533600a4015355ed51a01a94 $ENDCMP # $CMP IRF6725M D 28A Id, 30V Vds, 2.2mOhm Rds, N-Channel MOSFET, DirectFET MX K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6725mpbf.pdf?fileId=5546d462533600a4015355ed59ca1a96 $ENDCMP # $CMP IRF6726M D 32A Id, 30V Vds, 1.7mOhm Rds, N-Channel MOSFET, DirectFET MT K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6726mpbf.pdf?fileId=5546d462533600a4015355ed61db1a98 $ENDCMP # $CMP IRF6727M D 32A Id, 30V Vds, 1.7mOhm Rds, N-Channel MOSFET, DirectFET MX K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6727mpbf.pdf?fileId=5546d462533600a4015355ed6a331a9a $ENDCMP # $CMP IRF6728M D 23A Id, 30V Vds, 2.5mOhm Rds, N-Channel MOSFET, DirectFET MX K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6728mpbf.pdf?fileId=5546d462533600a4015355ed73701a9c $ENDCMP # $CMP IRF6775M D 28A Id, 150V Vds, 56mOhm Rds, N-Channel MOSFET, DirectFET MZ K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6775mpbf.pdf?fileId=5546d462533600a4015355ed84751aa0 $ENDCMP # $CMP IRF6785 D 19A Id, 200V Vds, 100mOhm Rds, N-Channel MOSFET, DirectFET MZ K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6785mpbf.pdf?fileId=5546d462533600a4015355ed8cc31aa2 $ENDCMP # $CMP IRF6795M D 32A Id, 25V Vds, 1.8mOhm Rds, N-Channel MOSFET, DirectFET MX K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6795mpbf.pdf?fileId=5546d462533600a4015355ed99cd1aa6 $ENDCMP # $CMP IRF6797M D 36A Id, 25V Vds, 1.4mOhm Rds, N-Channel MOSFET, DirectFET MX K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6797mpbf.pdf?fileId=5546d462533600a4015355eda2091aa9 $ENDCMP # $CMP IRF6798M D 37A Id, 25V Vds, 1.3mOhm Rds, N-Channel MOSFET, DirectFET MX K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6798mpbf.pdf?fileId=5546d462533600a4015355edaa4b1aab $ENDCMP # $CMP IRF6802SD D 16A Id, 25V Vds, 4.2mOhm Rds, Dual N-Channel MOSFET, DirectFET SA K Dual N-Channel MOSFET F https://www.infineon.com/dgdl/irf6802sdpbf.pdf?fileId=5546d462533600a4015355f0a3021ab2 $ENDCMP # $CMP IRF6810S D 16A Id, 25V Vds, 5.2mOhm Rds, N-Channel MOSFET, DirectFET S1 K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6810spbf.pdf?fileId=5546d462533600a4015355f0ab331ab4 $ENDCMP # $CMP IRF6811S D 19A Id, 25V Vds, 3.7mOhm Rds, N-Channel MOSFET, DirectFET SQ K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6811spbf.pdf?fileId=5546d462533600a4015355f0b3661ab6 $ENDCMP # $CMP IRF6892S D 28A Id, 25V Vds, 1.7mOhm Rds, N-Channel MOSFET, DirectFET S3C K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6892spbf.pdf?fileId=5546d462533600a4015355f0bb961ab8 $ENDCMP # $CMP IRF6893M D 29A Id, 25V Vds, 1.6mOhm Rds, N-Channel MOSFET, DirectFET MX K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6893mpbf.pdf?fileId=5546d462533600a4015355f0c3de1aba $ENDCMP # $CMP IRF6894M D 37A Id, 25V Vds, 1.3mOhm Rds, N-Channel MOSFET, DirectFET MX K N-Channel MOSFET F https://www.infineon.com/dgdl/Infineon-IRF6894M-DS-v02_00-EN.pdf?fileId=5546d462533600a4015355f0cc041abc $ENDCMP # $CMP IRF6898M D 35A Id, 25V Vds, 1.1mOhm Rds, N-Channel MOSFET, DirectFET MX K N-Channel MOSFET F https://www.infineon.com/dgdl/irf6898mpbf.pdf?fileId=5546d462533600a4015355f0d4611abe $ENDCMP # $CMP IRF7171M D 93A Id, 100V Vds, 6.5mOhm Rds, N-Channel MOSFET, DirectFET MN K N-Channel MOSFET F https://www.infineon.com/dgdl/irf7171mpbf.pdf?fileId=5546d462533600a4015355f1326f1ad6 $ENDCMP # $CMP IRF7309IPBF D 3A Id, 30V Vds, Dual HEXFET MOSFET, SO-8 K Dual HEXFET N-Channel P-Channel MOSFET F http://www.irf.com/product-info/datasheets/data/irf7309ipbf.pdf $ENDCMP # $CMP IRF7324 D 9A Id, -20V Vds, Dual HEXFET P-Channel MOSFET, SO-8 K Dual HEXFET P-Channel MOSFET F http://www.infineon.com/dgdl/irf7324pbf.pdf?fileId=5546d462533600a4015355f5f0861b4b $ENDCMP # $CMP IRF7343PBF D 4A Id, 55V Vds, Dual HEXFET MOSFET, SO-8 K Dual HEXFET N-Channel P-Channel MOSFET F http://www.irf.com/product-info/datasheets/data/irf7343ipbf.pdf $ENDCMP # $CMP IRF740 D 10A Id, 400V Vds, N-Channel Power MOSFET, 500mOhm Rds, TO-220AB K N Channel F http://www.vishay.com/docs/91054/91054.pdf $ENDCMP # $CMP IRF7403 D 9.7A Id, 30V Vds, N-Channel HEXFET Power MOSFET, SO-8 K N-Channel MOSFET F https://www.infineon.com/dgdl/irf7403pbf.pdf?fileId=5546d462533600a4015355fa23541b9c $ENDCMP # $CMP IRF7404 D -6.7A Id, -20V Vds, P-Channel HEXFET Power MOSFET, SO-8 K P-Channel MOSFET F http://www.infineon.com/dgdl/irf7404.pdf?fileId=5546d462533600a4015355fa2b5b1b9e $ENDCMP # $CMP IRF7480M D 330A Id, 40V Vds, 1.2mOhm Rds, N-Channel MOSFET, DirectFET ME K N-Channel MOSFET F https://www.infineon.com/dgdl/Infineon-IRF7480M-DS-v01_02-EN.pdf?fileId=5546d462533600a4015355ff8fa41c30 $ENDCMP # $CMP IRF7483M D 135A Id, 40V Vds, 2.3mOhm Rds, N-Channel MOSFET, DirectFET MF K N-Channel MOSFET F https://www.infineon.com/dgdl/irf7483mpbf.pdf?fileId=5546d462533600a4015355ff98011c32 $ENDCMP # $CMP IRF7486M D 209A Id, 40V Vds, 1.25mOhm Rds, N-Channel MOSFET, DirectFET ME K N-Channel MOSFET F https://www.infineon.com/dgdl/Infineon-IRL7486M-DS-v01_00-EN.pdf?fileId=5546d46258fc0bc10158fec7a83a0629 $ENDCMP # $CMP IRF7580M D 114A Id, 60V Vds, 3.6mOhm Rds, N-Channel MOSFET, DirectFET ME K N-Channel MOSFET F https://www.infineon.com/dgdl/irf7580mpbf.pdf?fileId=5546d462533600a401535603855c1c72 $ENDCMP # $CMP IRF7606PBF D -3.6A Id, -30V Vds, HexFET P-MOS Power MOSFET, Ronon 0.09R, Micro8 K HexFET Power MOSFET P-MOS F http://www.irf.com/product-info/datasheets/data/irf7606pbf.pdf $ENDCMP # $CMP IRF7607PBF D 5.2A Id, 20V Vds, HexFET N-MOS Power MOSFET, Ronon 0.03R, Micro8 K HexFET Power MOSFET N-MOS F http://www.irf.com/product-info/datasheets/data/irf7607pbf.pdf $ENDCMP # $CMP IRF7665S2 D 14.4A Id, 100V Vds, 62mOhm Rds, N-Channel MOSFET, DirectFET SB K N-Channel MOSFET F https://www.infineon.com/dgdl/irf7665s2pbf.pdf?fileId=5546d462533600a401535603d3ba1c86 $ENDCMP # $CMP IRF7739L1 D 270A Id, 40V Vds, 1.0mOhm Rds, N-Channel MOSFET, DirectFET L8 K N-Channel MOSFET F https://www.infineon.com/dgdl/irf7739l1pbf.pdf?fileId=5546d462533600a40153560423d91c9a $ENDCMP # $CMP IRF7748L1 D 104A Id, 60V Vds, 2.2mOhm Rds, N-Channel MOSFET, DirectFET L6 K N-Channel MOSFET F https://www.infineon.com/dgdl/irf7748l1pbf.pdf?fileId=5546d462533600a40153560434c11c9e $ENDCMP # $CMP IRF7759L2 D 160A Id, 75V Vds, 2.3mOhm Rds, N-Channel MOSFET, DirectFET L8 K N-Channel MOSFET F https://www.infineon.com/dgdl/irf7759l2pbf.pdf?fileId=5546d462533600a40153560478171cb0 $ENDCMP # $CMP IRF7769L1 D 88A Id, 100V Vds, 3.5mOhm Rds, N-Channel MOSFET, DirectFET L8 K N-Channel MOSFET F https://www.infineon.com/dgdl/Infineon-IRF7769L1-DS-v02_00-EN.pdf?fileId=5546d462533600a4015356079bd91cb4 $ENDCMP # $CMP IRF7779L2 D 67A Id, 150V Vds, 11mOhm Rds, N-Channel MOSFET, DirectFET L8 K N-Channel MOSFET F https://www.infineon.com/dgdl/irf7779l2pbf.pdf?fileId=5546d462533600a401535607ac011cb8 $ENDCMP # $CMP IRF7780M D 89A Id, 75V Vds, 5.7mOhm Rds, N-Channel MOSFET, DirectFET ME K N-Channel MOSFET F https://www.infineon.com/dgdl/irf7780mpbf.pdf?fileId=5546d462533600a401535607b41f1cba $ENDCMP # $CMP IRF7799L2 D 35A Id, 250V Vds, 38mOhm Rds, N-Channel MOSFET, DirectFET L8 K N-Channel MOSFET F https://www.infineon.com/dgdl/irf7799l2pbf.pdf?fileId=5546d462533600a401535607bc471cbc $ENDCMP # $CMP IRF7946 D 198A Id, 40V Vds, 1.4mOhm Rds, N-Channel MOSFET, DirectFET MX K N-Channel MOSFET F https://www.infineon.com/dgdl/irf7946pbf.pdf?fileId=5546d462533600a40153560cc0a41d43 $ENDCMP # $CMP IRF8301M D 34A Id, 30V Vds, 1.5mOhm Rds, N-Channel MOSFET, DirectFET MT K N-Channel MOSFET F https://www.infineon.com/dgdl/irf8301mpbf.pdf?fileId=5546d462533600a40153560d0e7a1d58 $ENDCMP # $CMP IRF8302M D 31A Id, 30V Vds, 1.8mOhm Rds, N-Channel MOSFET, DirectFET MX K N-Channel MOSFET F https://www.infineon.com/dgdl/irf8302mpbf.pdf?fileId=5546d462533600a40153560d16e41d5b $ENDCMP # $CMP IRF8304M D 28A Id, 30V Vds, 2.2mOhm Rds, N-Channel MOSFET, DirectFET MX K N-Channel MOSFET F https://www.infineon.com/dgdl/irf8304mpbf.pdf?fileId=5546d462533600a40153560d20db1d5d $ENDCMP # $CMP IRF8306M D 23A Id, 30V Vds, 2.5mOhm Rds, N-Channel MOSFET, DirectFET MX K N-Channel MOSFET F https://www.infineon.com/dgdl/irf8306mpbf.pdf?fileId=5546d462533600a40153560d29371d5f $ENDCMP # $CMP IRF8308M D 27A Id, 30V Vds, 2.5mOhm Rds, N-Channel MOSFET, DirectFET MX K N-Channel MOSFET F https://www.infineon.com/dgdl/irf8308mpbf.pdf?fileId=5546d462533600a40153560d319d1d61 $ENDCMP # $CMP IRF8327S D 13A Id, 30V Vds, 7.3mOhm Rds, N-Channel MOSFET, DirectFET SQ K N-Channel MOSFET F https://www.infineon.com/dgdl/irf8327spbf.pdf?fileId=5546d462533600a40153560d40c41d65 $ENDCMP # $CMP IRF8721PBF-1 D 14A Id, 30V Vds, HEXFET N-Channel MOSFET, SO-8 K HEXFET N-Channel MOSFET F http://www.irf.com/product-info/datasheets/data/irf8721pbf-1.pdf $ENDCMP # $CMP IRF9383M D -22A Id, -30V Vds, 2.9mOhm Rds, P-Channel MOSFET, DirectFET MX K P-Channel MOSFET F https://www.infineon.com/dgdl/irf9383mpbf.pdf?fileId=5546d462533600a40153561169a11dab $ENDCMP # $CMP IRF9394M D -14A Id, -30V Vds, 6.5mOhm Rds, P-Channel MOSFET, DirectFET MC K P-Channel MOSFET F https://www.infineon.com/dgdl/irf9394mpbf.pdf?fileId=5546d462533600a4015356118ff01db5 $ENDCMP # $CMP IRF9395M D -14A Id, -30V Vds, 7mOhm Rds, P-Channel MOSFET, DirectFET MC K P-Channel MOSFET F https://www.infineon.com/dgdl/irf9395mpbf.pdf?fileId=5546d462533600a40153561198461db7 $ENDCMP # $CMP IRF9540N D -23A Id, -100V Vds, HEXFET P-Channel MOSFET, TO-220 K HEXFET P-Channel MOSFET F http://www.irf.com/product-info/datasheets/data/irf9540n.pdf $ENDCMP # $CMP IRFI4019H D 8.7A Id, 150V Vds, 80mOhm, Dual Half Bridge N-Channel MOSFET, TO-220-5 K Dual N-Channel MOSFET F https://www.infineon.com/dgdl/irfi4019h-117p.pdf?fileId=5546d462533600a401535623d74d1f6f $ENDCMP # $CMP IRFI4020H D 9.1A Id, 200V Vds, 80mOhm, Dual Half Bridge N-Channel MOSFET, TO-220-5 K Dual N-Channel MOSFET F https://www.infineon.com/dgdl/irfi4020h-117p.pdf?fileId=5546d462533600a401535623e7271f73 $ENDCMP # $CMP IRFI4212H D 11A Id, 100V Vds, 58mOhm, Dual Half Bridge N-Channel MOSFET, TO-220-5 K Dual N-Channel MOSFET F https://www.infineon.com/dgdl/irfi4212h-117p.pdf?fileId=5546d462533600a401535623fc841f7a $ENDCMP # $CMP IRL6283M D 38A Id, 20V Vds, 0.75mOhm Rds, N-Channel MOSFET, DirectFET MD K N-Channel MOSFET F https://www.infineon.com/dgdl/irl6283mpbf.pdf?fileId=5546d462533600a40153565fe9452573 $ENDCMP # $CMP IRL6297SD D 15A Id, 20V Vds, 4.9mOhm Rds, Dual N-Channel MOSFET, DirectFET SA K Dual N-Channel MOSFET F https://www.infineon.com/dgdl/irl6297sdpbf.pdf?fileId=5546d462533600a40153565ff22f2575 $ENDCMP # $CMP IRL7472L1 D 375A Id, 40V Vds, 0.45mOhm Rds, N-Channel MOSFET, DirectFET L8 K N-Channel MOSFET F https://www.infineon.com/dgdl/Infineon-IRL7472L1-DS-v02_00-EN.pdf?fileId=5546d46254e133b401555d17178250d8 $ENDCMP # $CMP IRLB8721PBF D 62A Id, 30V Vds, N-Channel MOSFET, TO-220 K N-Channel HEXFET Power MOSFET F http://www.infineon.com/dgdl/irlb8721pbf.pdf?fileId=5546d462533600a40153566056732591 $ENDCMP # $CMP IRLIZ44N D 30A Id, 55V Vds, Single N-Channel HEXFET Power MOSFET, 22mOhm Ron, TO-220AB K Single N-Channel HEXFET Power MOSFET F http://www.irf.com/product-info/datasheets/data/irliz44n.pdf $ENDCMP # $CMP IRLML0030 D 5.3A Id, 30V Vds, N-Channel HEXFET Power MOSFET, 27mOhm Rds, SOT-23 K N-Channel HEXFET Power MOSFET F https://www.infineon.com/dgdl/irlml0030pbf.pdf?fileId=5546d462533600a401535664773825df $ENDCMP # $CMP IRLML2060 D 1.2A Id, 60V Vds, N-Channel MOSFET, 480mOhm Rds, SOT-23 K N-Channel MOSFET F https://www.infineon.com/dgdl/irlml2060pbf.pdf?fileId=5546d462533600a401535664b7fb25ee $ENDCMP # $CMP IRLML5203 D -3.0A Id, -30V Vds, P-Channel HEXFET Power MOSFET, 98mOhm Rds, SOT-23 K P-Channel MOSFET F https://www.infineon.com/dgdl/irlml5203pbf.pdf?fileId=5546d462533600a40153566868da261d $ENDCMP # $CMP IRLML6402 D -3.7A Id, -20V Vds, P-Channel MOSFET, 65mOhm Rds, SOT-23 K P-Channel MOSFET F https://www.infineon.com/dgdl/irlml6402pbf.pdf?fileId=5546d462533600a401535668d5c2263c $ENDCMP # $CMP IRLML9301 D -3.6A Id, -30V Vds, P-Channel HEXFET Power MOSFET, 64mOhm Rds, SOT-23 K P-Channel MOSFET F https://www.infineon.com/dgdl/irlml9301pbf.pdf?fileId=5546d462533600a401535668e5e42640 $ENDCMP # $CMP IRLZ34N D 30A Id, 55V Vds, Single N-Channel HEXFET Power MOSFET, 35mOhm Ron, TO-220AB K Single N-Channel HEXFET Power MOSFET F http://www.infineon.com/dgdl/irlz34npbf.pdf?fileId=5546d462533600a40153567206892720 $ENDCMP # $CMP IRLZ44N D 47A Id, 55V Vds, Single N-Channel HEXFET Power MOSFET, 22mOhm Ron, TO-220AB K Single N-Channel HEXFET Power MOSFET F http://www.irf.com/product-info/datasheets/data/irlz44n.pdf $ENDCMP # $CMP MMBF170 D 0.5A Id, 60V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F https://www.diodes.com/assets/Datasheets/ds30104.pdf $ENDCMP # $CMP MMBF4391 D 50mA min, 30V, 30mOhm max, 4-10V Vgs(off), N-Channel JFET, SOT-23 K N-Channel FET Transistor F https://www.onsemi.com/pub/Collateral/MMBF4391LT1-D.PDF $ENDCMP # $CMP MMBF4392 D 25mA min, 30V, 60mOhm max, 2-5V Vgs(off), N-Channel JFET, SOT-23 K N-Channel FET Transistor F https://www.onsemi.com/pub/Collateral/MMBF4391LT1-D.PDF $ENDCMP # $CMP MMBF4393 D 5mA min, 30V, 100mOhm max, 0.5-3V Vgs(off), N-Channel JFET, SOT-23 K N-Channel FET Transistor F https://www.onsemi.com/pub/Collateral/MMBF4391LT1-D.PDF $ENDCMP # $CMP MMBFJ111 D 20mA min, 35V, 30mOhm max, 3-10V Vgs(off), N-Channel JFET, SOT-23 K N-Channel FET Transistor F https://www.onsemi.com/pub/Collateral/MMBFJ113-D.PDF $ENDCMP # $CMP MMBFJ112 D 5mA min, 35V, 50mOhm max, 1-5V Vgs(off), N-Channel JFET, SOT-23 K N-Channel FET Transistor F https://www.onsemi.com/pub/Collateral/MMBFJ113-D.PDF $ENDCMP # $CMP MMBFJ113 D 2mA min, 35V, 100mOhm max, 0.5-3V Vgs(off), N-Channel JFET, SOT-23 K N-Channel FET Transistor F https://www.onsemi.com/pub/Collateral/MMBFJ113-D.PDF $ENDCMP # $CMP NTR2101P D -3.7A Id, -8V Vds, P-Channel MOSFET, SOT-23 K P-Channel MOSFET F http://www.onsemi.com/pub/Collateral/NTR2101P-D.PDF $ENDCMP # $CMP PGA26E07BA D 26A Id, 600V Vds, 56mOhm, N-Channel GaN MOSFET, DFN-8 K N-Channel GaN MOSFET F https://industrial.panasonic.com/content/data/SC/ds/ds4/PGA26E07BA_E.pdf $ENDCMP # $CMP PGA26E19BA D 13A Id, 600V Vds, 140mOhm, N-Channel GaN MOSFET, DFN-8 K N-Channel GaN MOSFET F https://industrial.panasonic.com/content/data/SC/ds/ds4/PGA26E19BA_E.pdf $ENDCMP # $CMP PSMN5R2-60YL D 100A, 60V Vds, N-Channel MOSFET, 5.2mOhm Ron, LFPAK56 K N-Channel MOSFET F https://assets.nexperia.com/documents/data-sheet/PSMN5R2-60YL.pdf $ENDCMP # $CMP QM6006D D 35A Id, 60V Vds, N-Channel Power MOSFET, 18mOhm Ron, 19.3nC Qg (typ), TO252 K N-Channel MOSFET F http://www.jaolen.com/images/pdf/QM6006D.pdf $ENDCMP # $CMP QM6015D D -35A Id, -60V Vds, P-Channel Power MOSFET, 25mOhm Ron, 25.0nC Qg (typ), TO252 K P-Channel MOSFET F http://www.jaolen.com/images/pdf/QM6015D.pdf $ENDCMP # $CMP STS2DNE60 D 2A Id, 60V Vds, Dual N-Channel MOSFET, 180mOhm Ron, SO-8 K Dual N-Channel MOSFET F https://www.st.com/resource/en/datasheet/CD00001537.pdf $ENDCMP # $CMP SUD08P06-155L D 8.4A Id, 60V Vds, TrenchFET P-Channel Power MOSFET, 155mOhm Ron, 19nC Qg, -55 to 150 °C, TO-252-2 K TrenchFET P-Channel Power MOSFET F https://www.vishay.com/docs/62843/sud08p06-155l-ge3.pdf $ENDCMP # $CMP SUD09P10-195 D 8.8A Id, 100V Vds, TrenchFET P-Channel Power MOSFET, 195mOhm Ron, 34.8nC Qg, -55 to 150 °C, TO-252-2 K TrenchFET P-Channel Power MOSFET F https://www.vishay.com/docs/65903/SUD09P10.pdf $ENDCMP # $CMP SUD19P06-60 D 19A Id, 60V Vds, TrenchFET P-Channel Power MOSFET, 60mOhm Ron, 40nC Qg, -55 to 150 °C, TO-252-2 K TrenchFET P-Channel Power MOSFET F https://www.vishay.com/docs/69253/sud19p06.pdf $ENDCMP # $CMP SUD45P03-09 D 45A Id, 30V Vds, TrenchFET P-Channel Power MOSFET, 8.7mOhm Ron, 90nC Qg, -55 to 150 °C, TO-252-2 K TrenchFET P-Channel Power MOSFET F https://www.vishay.com/docs/65595/sud45p03.pdf $ENDCMP # $CMP SUD50P04-08 D 50A Id, 40V Vds, TrenchFET P-Channel Power MOSFET, 8.1mOhm Ron, 159nC Qg, -55 to 150 °C, TO-252-2 K TrenchFET P-Channel Power MOSFET F https://www.vishay.com/docs/65594/sud50p04-08.pdf $ENDCMP # $CMP SUD50P06-15 D 50A Id, 60V Vds, TrenchFET P-Channel Power MOSFET, 15mOhm Ron, 165nC Qg, -55 to 150 °C, TO-252-2 K TrenchFET P-Channel Power MOSFET F https://www.vishay.com/docs/68940/sud50p06.pdf $ENDCMP # $CMP SUD50P08-25L D 50A Id, 80V Vds, TrenchFET P-Channel Power MOSFET, 25.2mOhm Ron, 160nC Qg, -55 to 175 °C, TO-252-2 K TrenchFET P-Channel Power MOSFET F https://www.vishay.com/docs/73443/sud50p08.pdf $ENDCMP # $CMP SUD50P10-43L D 37A Id, 100V Vds, TrenchFET P-Channel Power MOSFET, 43mOhm Ron, 160nC Qg, -55 to 150 °C, TO-252-2 K TrenchFET P-Channel Power MOSFET F https://www.vishay.com/docs/62504/sud50p10-43l-ge3.pdf $ENDCMP # $CMP Si1442DH D 12V Vds, TrenchFET N-Channel Power MOSFET, SC-70-6 K TrenchFET N-Channel Power MOSFET F http://www.vishay.com/docs/63772/si1442dh.pdf $ENDCMP # $CMP Si2319CDS D -4.4A Id, -40V Vds, P-Channel MOSFET, SOT-23 K P-Channel MOSFET F http://www.vishay.com/docs/66709/si2319cd.pdf $ENDCMP # $CMP Si2371EDS D -3.6A Id, -30V Vds, P-Channel MOSFET, SOT-23 K P-Channel MOSFET F http://www.vishay.com/docs/63924/si2371eds.pdf $ENDCMP # $CMP Si4162DY D 19.3A Id, 30V Vds, TrenchFET N-Channel Power MOSFET, SO-8 K N-Channel MOSFET F http://www.vishay.com/docs/68967/si4162dy.pdf $ENDCMP # $CMP Si4532DY D 3.9A Id, 30V Vds, Dual N and P Channel MOSFET, 65mOhm Ron, 10V Vgs, SO8L K Dual N-Channel P-Channel MOSFET F https://www.fairchildsemi.com/datasheets/SI/SI4532DY.pdf $ENDCMP # $CMP Si4542DY D Dual N and P Channel MOSFET, 6A Id, 30V Vds, 28mOhm Ron, 10V Vgs, SO8L K Dual N-Channel P-Channel MOSFET F https://www.fairchildsemi.com/datasheets/SI/SI4542DY.pdf $ENDCMP # $CMP Si7141DP D 60A Id, 20V Vds, 1.9 mOhm Ron, PowerPAK-8 K P-Channel MOSFET F https://www.vishay.com/docs/65596/si7141dp.pdf $ENDCMP # $CMP Si7336ADP D 30A Id, 30V Vds, 2.4mOhm Ron, PowerPAK-8 K N-Channel MOSFET F https://www.vishay.com/docs/73152/si7336adp.pdf $ENDCMP # $CMP Si7450DP D 5.3A Id, 200V Vds, 80mOhm Ron, PowerPAK-8 K N-Channel MOSFET F https://www.vishay.com/docs/71432/si7450dp.pdf $ENDCMP # $CMP SiA449DJ D -12A Id, -30V Vds, P-Channel MOSFET, PowerPAK SC70-6 K P-Channel MOSFET F http://www.vishay.com/docs/62644/sia449dj.pdf $ENDCMP # $CMP SiA453EDJ D -10A Id, -30V Vds, P-Channel MOSFET K P-Channel MOSFET F http://www.vishay.com/docs/62864/sia453edj.pdf $ENDCMP # $CMP SiS415DNT D -35A Id, -20V Vds, P-Channel MOSFET, PowerPAK 1212-8 Single K P-Channel MOSFET F https://www.vishay.com/docs/63684/sis415dnt.pdf $ENDCMP # $CMP SiSS27DN D -50A Id, -30V Vds, P-Channel MOSFET, PowerPAK 1212-8 Single K P-Channel MOSFET F http://www.vishay.com/docs/62847/siss27dn.pdf $ENDCMP # $CMP TP0610L D -0.18A Id, -60V Vds, P-Channel MOSFET, TO-92 K P-Channel MOSFET F http://www.vishay.com/docs/70209/70209.pdf $ENDCMP # $CMP TP0610T D -0.18A Id, -60V Vds, P-Channel MOSFET, SOT-23 K P-Channel MOSFET F http://www.vishay.com/docs/70209/70209.pdf $ENDCMP # $CMP TSM2301ACX D -2.8A Id, -20V Vds, P-Channel MOSFET, SOT-23 K P-Channel MOSFET F https://www.taiwansemi.com/products/datasheet/TSM2301A_C15.pdf $ENDCMP # $CMP TSM2302CX D 3.9A Id, 20V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F https://www.taiwansemi.com/products/datasheet/TSM2302CX_E1608.pdf $ENDCMP # $CMP VN10LF D 0.15A Id, 60V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/VN10LF.pdf $ENDCMP # $CMP VNP10N07 D 10A Id, 70V Vds, N-Channel Power MOSFET, fully autoprotected, TO-220 K N-Channel Power MOSFET OMNIFET F https://www.st.com/resource/en/datasheet/vnp10n07.pdf $ENDCMP # $CMP VP0610L D -0.18A Id, -60V Vds, P-Channel MOSFET, TO-92 K P-Channel MOSFET F http://www.vishay.com/docs/70209/70209.pdf $ENDCMP # $CMP VP0610T D -0.18A Id, -60V Vds, P-Channel MOSFET, SOT-23 K P-Channel MOSFET F http://www.vishay.com/docs/70209/70209.pdf $ENDCMP # $CMP ZVN3306F D 0.15A Id, 60V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/ZVN3306F.pdf $ENDCMP # $CMP ZVN3310F D 0.1A Id, 100V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/ZVN3310F.pdf $ENDCMP # $CMP ZVN3320F D 0.06A Id, 200V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/ZVN3320F.pdf $ENDCMP # $CMP ZVN4106F D 0.2A Id, 60V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/ZVN4106F.pdf $ENDCMP # $CMP ZXM61N02F D 1.7A Id, 20V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/ZXM61N02F.pdf $ENDCMP # $CMP ZXM61N03F D 1.4A Id, 30V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/ZXM61N03F.pdf $ENDCMP # $CMP ZXMN10A07F D 0.76A Id, 100V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/ZXMN10A07F.pdf $ENDCMP # $CMP ZXMN2A01F D 2.2A Id, 20V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/ZXMN2A01F.pdf $ENDCMP # $CMP ZXMN2A14F D 4.1A Id, 20V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/ZXMN2A14F.pdf $ENDCMP # $CMP ZXMN2B01F D 2.4A Id, 20V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/ZXMN2B01F.pdf $ENDCMP # $CMP ZXMN2B14FH D 4.3A Id, 20V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/ZXMN2B14FH.pdf $ENDCMP # $CMP ZXMN2F30FH D 4.9A Id, 20V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/ZXMN2F30FH.pdf $ENDCMP # $CMP ZXMN2F34FH D 4A Id, 20V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/ZXMN2F34FH.pdf $ENDCMP # $CMP ZXMN3A01F D 2A Id, 30V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/ZXMN3A01F.pdf $ENDCMP # $CMP ZXMN3A14F D 3.2A Id, 30V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/ZXMN3A14F.pdf $ENDCMP # $CMP ZXMN3B01F D 2A Id, 30V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/ZXMN3B01F.pdf $ENDCMP # $CMP ZXMN3B14F D 3.5A Id, 30V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/ZXMN3B14F.pdf $ENDCMP # $CMP ZXMN3F30FH D 4.6A Id, 30V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/ZXMN3F30FH.pdf $ENDCMP # $CMP ZXMN6A07F D 1.4A Id, 60V Vds, N-Channel MOSFET, SOT-23 K N-Channel MOSFET F http://www.diodes.com/assets/Datasheets/ZXMN6A07F.pdf $ENDCMP # $CMP ZXMP4A16G D -6.4A Id, -40V Vds, P-Channel MOSFET, SOT-223 K P-Channel MOSFET F https://www.diodes.com/assets/Datasheets/ZXMP4A16G.pdf $ENDCMP # #End Doc Library ================================================ FILE: esim-cloud-backend/kicad-symbols/additional/Transistor_FET.lib ================================================ EESchema-LIBRARY Version 2.4 #encoding utf-8 # # 2N7000 # DEF 2N7000 Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "2N7000" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-92_Inline" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST TO?92* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X S 1 100 -200 100 U 50 50 1 1 P X G 2 -200 0 100 R 50 50 1 1 I X D 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # 3SK263 # DEF 3SK263 Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "3SK263" 200 0 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-143" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST SOT?143* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 10 10 -80 10 -50 N P 2 0 1 10 10 80 10 50 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 10 -65 -100 -65 -100 -100 N P 3 0 1 0 10 65 -100 65 -100 100 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X D 1 100 200 100 D 50 50 1 1 P X S 2 100 -200 100 U 50 50 1 1 P X G1 3 -200 100 100 R 50 50 1 1 P X G2 4 -200 -100 100 R 50 50 1 1 P ENDDRAW ENDDEF # # BF244A # DEF BF244A Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BF244A" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-92_Inline" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS BF244B BF244C $FPLIST TO?92* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 3 0 1 0 100 -100 100 -55 10 -55 N P 3 0 1 0 100 100 100 55 10 55 N P 4 0 1 0 0 0 -40 15 -40 -15 0 0 F X D 1 100 200 100 D 50 50 1 1 P X G 2 -200 0 100 R 50 50 1 1 I X S 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # BF245A # DEF BF245A Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BF245A" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-92_Inline" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS BF245B BF245C $FPLIST TO?92* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 3 0 1 0 100 -100 100 -55 10 -55 N P 3 0 1 0 100 100 100 55 10 55 N P 4 0 1 0 0 0 -40 15 -40 -15 0 0 F X G 1 -200 0 100 R 50 50 1 1 I X S 2 100 -200 100 U 50 50 1 1 P X D 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # BF545A # DEF BF545A Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BF545A" 200 0 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-23" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS BF545B BF545C $FPLIST SOT?23* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 3 0 1 0 100 -100 100 -55 10 -55 N P 3 0 1 0 100 100 100 55 10 55 N P 4 0 1 0 0 0 -40 15 -40 -15 0 0 F X S 1 100 -200 100 U 50 50 1 1 P X D 2 100 200 100 D 50 50 1 1 P X G 3 -200 0 100 R 50 50 1 1 I ENDDRAW ENDDEF # # BS107 # DEF BS107 Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BS107" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-92_Inline" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS BS108 BS170 $FPLIST TO?92* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X D 1 100 200 100 D 50 50 1 1 P X G 2 -200 0 100 R 50 50 1 1 I X S 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # BS250 # DEF BS250 Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BS250" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-92_Inline" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST TO?92* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 70 130 70 130 -70 30 -70 N P 4 0 1 0 90 0 50 15 50 -15 90 0 F P 4 0 1 0 110 -20 115 -15 145 -15 150 -10 N P 4 0 1 0 130 -15 115 10 145 10 130 -15 N X D 1 100 200 100 D 50 50 1 1 P X G 2 -200 0 100 R 50 50 1 1 I X S 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # BSB008NE2LX # DEF BSB008NE2LX Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BSB008NE2LX" 200 0 50 H V L CNN F2 "Package_DirectFET:DirectFET_MX" 0 0 50 H I C CIN F3 "" 0 0 50 H I L CNN ALIAS BSB012NE2LXI BSB013NE2LXI BSB014N04LX3 BSB015N04NX3 IRF6616 IRF6620 IRF6628 IRF6635 IRF6714M IRF6715M IRF6716M IRF6717M IRF6724M IRF6725M IRF6727M IRF6728M IRF6795M IRF6797M IRF6798M IRF6893M IRF6894M IRF6898M IRF7946 IRF8302M IRF8304M IRF8306M IRF8308M $FPLIST DirectFET*MX* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X D 1 100 200 100 D 50 50 1 1 P X G 2 -200 0 100 R 50 50 1 1 I X S 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # BSB028N06NN3 # DEF BSB028N06NN3 Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BSB028N06NN3" 200 0 50 H V L CNN F2 "Package_DirectFET:DirectFET_MN" 0 0 50 H I C CIN F3 "" 0 0 50 H I L CNN ALIAS BSB044N08NN3 BSB056N10NN3 IRF6644 IRF6646 IRF6648 IRF6662 IRF6668 IRF7171M $FPLIST DirectFET*MN* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X D 1 100 200 100 D 50 50 1 1 P X G 2 -200 0 100 R 50 50 1 1 I X S 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # BSB104N08NP3 # DEF BSB104N08NP3 Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BSB104N08NP3" 200 0 50 H V L CNN F2 "Package_DirectFET:DirectFET_MP" 0 0 50 H I C CIN F3 "" 0 0 50 H I L CNN ALIAS IRF6637 IRF6722M $FPLIST DirectFET*MP* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X D 1 100 200 100 D 50 50 1 1 P X G 2 -200 0 100 R 50 50 1 1 I X S 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # BSB165N15NZ3 # DEF BSB165N15NZ3 Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BSB165N15NZ3" 200 0 50 H V L CNN F2 "Package_DirectFET:DirectFET_MZ" 0 0 50 H I C CIN F3 "" 0 0 50 H I L CNN ALIAS BSB280N15NZ3 IRF6641 IRF6643 IRF6674 IRF6775M IRF6785 $FPLIST DirectFET*MZ* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X D 1 100 200 100 D 50 50 1 1 P X G 2 -200 0 100 R 50 50 1 1 I X S 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # BSC13DN30NSFD # DEF BSC13DN30NSFD Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BSC13DN30NSFD" 200 0 50 H V L CNN F2 "Package_TO_SOT_SMD:TDSON-8-1" 200 -75 50 H I L CIN F3 "" 0 0 50 V I L CNN $FPLIST TDSON* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X S 1 100 -200 100 U 50 50 1 1 P X S 2 100 -200 100 U 50 50 1 1 P N X S 3 100 -200 100 U 50 50 1 1 P N X G 4 -200 0 100 R 50 50 1 1 P X D 5 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # BSF030NE2LQ # DEF BSF030NE2LQ Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BSF030NE2LQ" 200 0 50 H V L CNN F2 "Package_DirectFET:DirectFET_SQ" 0 0 50 H I C CIN F3 "" 0 0 50 H I L CNN ALIAS BSF035NE2LQ IRF6621 IRF6622 IRF6631 IRF6711S IRF6712S IRF6713S IRF6721S IRF6811S IRF8327S $FPLIST DirectFET*SQ* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X D 1 100 200 100 D 50 50 1 1 P X G 2 -200 0 100 R 50 50 1 1 I X S 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # BSF450NE7NH3 # DEF BSF450NE7NH3 Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BSF450NE7NH3" 200 0 50 H V L CNN F2 "Package_DirectFET:DirectFET_ST" 0 0 50 H I C CIN F3 "" 0 0 50 H I L CNN ALIAS IRF6614 IRF6617 IRF6623 IRF6636 $FPLIST DirectFET*ST* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X D 1 100 200 100 D 50 50 1 1 P X G 2 -200 0 100 R 50 50 1 1 I X S 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # BSP129 # DEF BSP129 Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BSP129" 200 0 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-223-3_TabPin2" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST SOT?223* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X G 1 -200 0 200 R 50 50 1 1 I X D 2 100 200 100 D 50 50 1 1 P X S 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # BSP89 # DEF BSP89 Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BSP89" 200 0 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-223-3_TabPin2" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST SOT?223* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X G 1 -200 0 100 R 50 50 1 1 I X D 2 100 200 100 D 50 50 1 1 P X S 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # BSR56 # DEF BSR56 Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BSR56" 200 0 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-23" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS BSR57 BSR58 MMBF4391 MMBF4392 MMBF4393 MMBFJ111 MMBFJ112 MMBFJ113 $FPLIST SOT?23* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 3 0 1 0 100 -100 100 -55 10 -55 N P 3 0 1 0 100 100 100 55 10 55 N P 4 0 1 0 0 0 -40 15 -40 -15 0 0 F X D 1 100 200 100 D 50 50 1 1 P X S 2 100 -200 100 U 50 50 1 1 P X G 3 -200 0 100 R 50 50 1 1 I ENDDRAW ENDDEF # # BSS138 # DEF BSS138 Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BSS138" 200 0 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-23" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS 2N7002 2N7002E 2N7002H 2N7002K BS170F BS870 BSN20 BSS123 BSS127S DMG2302U DMG3402L DMG3404L DMG3406L DMG3414U DMG3418L DMN10H220L DMN10H700S DMN13H750S DMN2041L DMN2050L DMN2056U DMN2058U DMN2075U DMN2230U DMN24H11DS DMN24H3D5L DMN3042L DMN3051L DMN30H4D0L DMN3110S DMN3150L DMN3300U DMN3404L DMN6075S DMN6140L DMN67D7L DMN67D8L MMBF170 VN10LF ZVN3306F ZVN3310F ZVN3320F ZVN4106F ZXM61N02F ZXM61N03F ZXMN10A07F ZXMN2A01F ZXMN2A14F ZXMN2B01F ZXMN2B14FH ZXMN2F30FH ZXMN2F34FH ZXMN3A01F ZXMN3A14F ZXMN3B01F ZXMN3B14F ZXMN3F30FH ZXMN6A07F IRLML0030 IRLML2060 TSM2302CX $FPLIST SOT?23* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X G 1 -200 0 100 R 50 50 1 1 I X S 2 100 -200 100 U 50 50 1 1 P X D 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # BSS214NW # DEF BSS214NW Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BSS214NW" 200 0 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-323_SC-70" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST SOT?323* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X G 1 -200 0 100 R 50 50 1 1 I X S 2 100 -200 100 U 50 50 1 1 P X D 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # BUK9M53-60EX # DEF BUK9M53-60EX Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BUK9M53-60EX" 200 0 50 H V L CNN F2 "Package_TO_SOT_SMD:LFPAK33" 200 -75 50 H I L CIN F3 "" 0 0 50 V I L CNN ALIAS BUK9M85-60EX BUK7M45-40EX BUK9M52-40EX BUK9M42-60EX BUK9M14-40EX BUK9M24-60EX BUK9M10-30EX BUK9M11-40EX BUK7M10-40EX BUK7M15-60EX BUK7M19-60EX BUK9M9R1-40EX BUK9M6R6-30EX BUK9M12-60EX BUK7M9R9-60EX BUK7M42-60EX BUK9M156-100EX BUK7M33-60EX BUK7M21-40EX BUK9M43-100EX BUK7M12-60EX BUK9M15-60EX BUK7M27-80EX BUK9M19-60EX BUK9M5R2-30EX BUK7M17-80EX BUK9M7R2-40EX BUK9M34-100EX BUK9M23-80EX BUK7M67-60EX BUK9M24-40EX BUK9M120-100EX BUK9M17-30EX BUK7M12-40EX BUK9M28-80EX BUK7M8R0-40EX BUK9M35-80EX BUK7M6R3-40EX BUK7M22-80EX $FPLIST LFPAK33* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X S 1 100 -200 100 U 50 50 1 1 P X S 2 100 -200 100 U 50 50 1 1 P N X S 3 100 -200 100 U 50 50 1 1 P N X G 4 -200 0 100 R 50 50 1 1 P X D 5 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # BUZ11 # DEF BUZ11 Q 0 20 Y N 1 F N F0 "Q" 250 75 50 H V L CNN F1 "BUZ11" 250 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-220-3_Vertical" 250 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS IRF3205 IRF540N IRF740 IRLB8721PBF IRLZ34N IRLZ44N VNP10N07 IPP060N06N $FPLIST TO?220* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X G 1 -200 0 100 R 50 50 1 1 I X D 2 100 200 100 D 50 50 1 1 P X S 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # C3M0030090K # DEF C3M0030090K Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "C3M0030090K" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-247-4_Vertical" 0 0 50 H I C CIN F3 "" 0 0 50 H I L CNN ALIAS C3M0065100K C3M0075120K C3M0120100K $FPLIST TO?247* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -125 11 0 1 0 F C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 -100 -100 -100 -125 100 -125 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X D 1 100 200 100 D 50 50 1 1 P X S 2 100 -200 100 U 50 50 1 1 P X DS 3 -200 -100 100 R 50 50 1 1 P X G 4 -200 0 100 R 50 50 1 1 I ENDDRAW ENDDEF # # C3M0065090D # DEF C3M0065090D Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "C3M0065090D" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-247-3_Vertical" 0 0 50 H I C CIN F3 "" 0 0 50 H I L CNN ALIAS C3M0120090D C3M0280090D C2M0025120D C2M0040120D C2M0080120D C2M0160120D C2M0280120D C2M0045170D C2M1000170D $FPLIST TO?247* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X G 1 -200 0 100 R 50 50 1 1 I X D 2 100 200 100 D 50 50 1 1 P X S 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # C3M0065090J # DEF C3M0065090J Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "C3M0065090J" 200 0 50 H V L CNN F2 "Package_TO_SOT_SMD:TO-263-7_TabPin8" 0 0 50 H I C CIN F3 "" 0 0 50 H I L CNN ALIAS C3M0065100J C3M0075120J C3M0280090J C2M1000170J C3M0120090J C3M0120100J $FPLIST TO?263*TabPin8* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -125 11 0 1 0 F C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 -100 -100 -100 -125 100 -125 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X G 1 -200 0 100 R 50 50 1 1 I X DS 2 -200 -100 100 R 50 50 1 1 P X S 3 100 -200 100 U 50 50 1 1 P X S 4 100 -200 100 U 50 50 1 1 P N X S 5 100 -200 100 U 50 50 1 1 P N X S 6 100 -200 100 U 50 50 1 1 P N X S 7 100 -200 100 U 50 50 1 1 P N X D 8 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # CSD16301Q2 # DEF CSD16301Q2 Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "CSD16301Q2" 200 0 50 H V L CNN F2 "Package_SON:Texas_DQK" 200 -75 50 H I L CIN F3 "" 0 0 50 V I L CNN ALIAS CSD17313Q2 $FPLIST Texas*DQK* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X D 1 100 200 100 D 50 50 1 1 P X D 2 100 200 100 D 50 50 1 1 P N X G 3 -200 0 100 R 50 50 1 1 P X S 4 100 -200 100 U 50 50 1 1 P X D 5 100 200 100 D 50 50 1 1 P N X D 6 100 200 100 D 50 50 1 1 P N X S 7 100 -200 100 U 50 50 1 1 P N X D 8 100 200 100 D 50 50 1 1 P N ENDDRAW ENDDEF # # CSD17578Q5A # DEF CSD17578Q5A Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "CSD17578Q5A" 200 0 50 H V L CNN F2 "Package_TO_SOT_SMD:TDSON-8-1" 200 -75 50 H I L CIN F3 "" 0 0 50 V I L CNN ALIAS CSD17579Q5A CSD16570Q5B CSD17577Q5A CSD18509Q5B CSD18540Q5B CSD17573Q5B CSD17576Q5B CSD19534Q5A CSD17570Q5B CSD19533Q5A CSD19502Q5B CSD19532Q5B CSD19531Q5A CSD18563Q5A CSD18537NQ5A CSD18532NQ5B CSD17556Q5B CSD18502Q5B CSD18532Q5B CSD17552Q5A CSD17559Q5 CSD18534Q5A CSD18533Q5A CSD17555Q5A CSD17551Q5A CSD18501Q5A CSD18503Q5A CSD18504Q5A CSD18531Q5A CSD17553Q5A CSD16342Q5A CSD17322Q5A CSD17327Q5A CSD17522Q5A CSD17527Q5A CSD17501Q5A CSD17506Q5A CSD17505Q5A CSD17507Q5A CSD17510Q5A CSD17311Q5 CSD17312Q5 CSD17303Q5 CSD16415Q5 CSD17302Q5A CSD17305Q5A CSD17306Q5A CSD17307Q5A CSD17310Q5A CSD17301Q5A CSD16408Q5 CSD16322Q5 CSD16325Q5 CSD16321Q5 CSD16414Q5 CSD16401Q5 CSD16403Q5A CSD16404Q5A CSD16407Q5 CSD16410Q5A CSD16412Q5A CSD16413Q5A BSC026N08NS5 BSC030N08NS5 BSC035N10NS5 BSC037N08NS5 BSC040N10NS5 BSC040N08NS5 BSC046N10NS3G BSC047N08NS3G BSC052N08NS5 BSC057N08NS3G BSC060N10NS3G BSC061N08NS5 BSC070N10NS3G BSC070N10NS5 BSC072N08NS5 BSC079N10NSG BSC082N10LSG BSC098N10NS5 BSC100N10NSFG BSC105N10LSFG BSC109N10NS3G BSC117N08NS5 BSC118N10NSG BSC123N08NS3G BSC123N10LSG BSC159N10LSFG BSC160N10NS3G BSC196N10NSG BSC252N10NSFG BSC265N10LSFG BSC340N08NS3G BSC440N10NS3G BSC028N06LS3 FDMS8350LET40 FDMT80060DC FDMT80080DC FDMT800120DC FDMT800100DC FDMT800150DC FDMT800152DC FDMS8050ET30 FDMS86202ET120 FDMS86150ET100 FDMS86255ET150 FDMS86350ET80 FDMS86550ET60 FDMS8050 FDMS8350L FDMS86255 FDMS86550 FDMS86202 FDMS86350 FDMS86152 FDMS86150 $FPLIST TDSON* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X S 1 100 -200 100 U 50 50 1 1 P X S 2 100 -200 100 U 50 50 1 1 P N X S 3 100 -200 100 U 50 50 1 1 P N X G 4 -200 0 100 R 50 50 1 1 P X D 5 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # CSD19537Q3 # DEF CSD19537Q3 Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "CSD19537Q3" 200 0 50 H V L CNN F2 "Package_SON:VSON-8_3.3x3.3mm_P0.65mm_NexFET" 200 -75 50 H I L CIN F3 "" 0 0 50 V I L CNN $FPLIST VSON*3.3x3.3mm*P0.65mm*NexFET* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X S 1 100 -200 100 U 50 50 1 1 P X S 2 100 -200 100 U 50 50 1 1 P N X S 3 100 -200 100 U 50 50 1 1 P N X G 4 -200 0 100 R 50 50 1 1 P X D 5 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # CSD25302Q2 # DEF CSD25302Q2 Q 0 20 Y N 1 F N F0 "Q" 200 50 50 H V C CNN F1 "CSD25302Q2" 150 -50 50 H V L CNN F2 "Package_SON:Texas_DQK" 500 -150 50 H I C CNN F3 "" -100 0 50 H I C CNN $FPLIST Texas*DQK* $ENDFPLIST DRAW C -35 0 110 0 1 10 N C 0 -70 10 0 1 0 F C 0 70 10 0 1 0 F P 2 0 1 0 -90 0 -200 0 N P 2 0 1 10 -90 75 -90 -75 N P 2 0 1 10 -70 -50 -70 -90 N P 2 0 1 10 -70 20 -70 -20 N P 2 0 1 10 -70 90 -70 50 N P 2 0 1 0 0 100 0 70 N P 3 0 1 0 0 -100 0 0 -70 0 N P 4 0 1 0 -70 70 30 70 30 -70 -70 -70 N P 4 0 1 0 -10 0 -50 15 -50 -15 -10 0 F P 4 0 1 0 10 -20 15 -15 45 -15 50 -10 N P 4 0 1 0 30 -15 15 10 45 10 30 -15 N X S 1 0 -200 100 U 50 50 1 1 P X S 2 0 -200 100 U 50 50 1 1 P N X G 3 -300 0 100 R 50 50 1 1 P X D 4 0 200 100 D 50 50 1 1 P X S 5 0 -200 100 U 50 50 1 1 P N X S 6 0 -200 100 U 50 50 1 1 P N X D 7 0 200 100 D 50 50 1 1 P N X S 8 0 -200 100 U 50 50 1 1 P N ENDDRAW ENDDEF # # DMC2053UVT # DEF DMC2053UVT Q 0 20 Y N 2 F N F0 "Q" 125 50 50 H V L CNN F1 "DMC2053UVT" 125 -50 50 H V L CNN F2 "Package_TO_SOT_SMD:TSOT-23-6" -50 -475 50 H I C CNN F3 "" -100 0 50 H I C CNN ALIAS DMC3071LVT $FPLIST TSOT?23* $ENDFPLIST DRAW C -35 0 110 0 1 10 N C 0 -70 10 0 1 0 F C 0 70 10 0 1 0 F P 2 0 1 0 -90 0 -200 0 N P 2 0 1 10 -90 75 -90 -75 N P 2 0 1 10 -70 -50 -70 -90 N P 2 0 1 10 -70 20 -70 -20 N P 2 0 1 10 -70 90 -70 50 N P 2 0 1 0 0 100 0 70 N P 3 0 1 0 0 -100 0 0 -70 0 N P 4 0 1 0 -70 -70 30 -70 30 70 -70 70 N P 4 1 1 0 -60 0 -20 15 -20 -15 -60 0 F P 4 1 1 0 10 20 15 15 45 15 50 10 N P 4 1 1 0 30 15 15 -10 45 -10 30 15 N P 4 2 1 0 -10 0 -50 15 -50 -15 -10 0 F P 4 2 1 0 10 -20 15 -15 45 -15 50 -10 N P 4 2 1 0 30 -15 15 10 45 10 30 -15 N X G 1 -300 0 100 R 50 50 1 1 P X S 5 0 -200 100 U 50 50 1 1 P X D 6 0 200 100 D 50 50 1 1 P X S 2 0 -200 100 U 50 50 2 1 P X G 3 -300 0 100 R 50 50 2 1 P X D 4 0 200 100 D 50 50 2 1 P ENDDRAW ENDDEF # # DMG1012T # DEF DMG1012T Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DMG1012T" 200 0 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-523" 200 -75 50 H I L CNN F3 "" 0 0 50 H I C CNN $FPLIST SOT?523* $ENDFPLIST DRAW C -90 0 10 1 1 0 F C 65 0 110 1 1 10 N C 100 -150 10 1 1 0 F C 100 -70 10 1 1 0 F C 100 70 10 1 1 0 F P 3 0 1 0 100 -150 -90 -150 -90 0 N P 2 1 1 0 10 0 -100 0 N P 2 1 1 10 10 75 10 -75 N P 2 1 1 10 30 -50 30 -90 N P 2 1 1 10 30 20 30 -20 N P 2 1 1 10 30 90 30 50 N P 2 1 1 0 100 100 100 70 N P 3 1 1 0 100 -100 100 0 30 0 N P 4 1 1 0 -40 -170 -35 -165 -35 -135 -30 -130 N P 4 1 1 0 -35 -150 -10 -165 -10 -135 -35 -150 N P 4 1 1 0 30 -70 130 -70 130 70 30 70 N P 4 1 1 0 40 0 80 15 80 -15 40 0 F P 4 1 1 0 45 -150 20 -135 20 -165 45 -150 N P 4 1 1 0 50 -130 45 -135 45 -165 40 -170 N P 4 1 1 0 110 20 115 15 145 15 150 10 N P 4 1 1 0 130 15 115 -10 145 -10 130 15 N X G 1 -200 0 100 R 50 50 1 1 I X S 2 100 -200 100 U 50 50 1 1 P X D 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DMP3013SFV # DEF DMP3013SFV Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DMP3013SFV" 200 0 50 H V L CNN F2 "Package_SON:Diodes_PowerDI3333-8" 200 -75 50 H I L CIN F3 "" 0 0 50 V I L CNN $FPLIST Diodes*PowerDI3333* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 70 130 70 130 -70 30 -70 N P 4 0 1 0 90 0 50 15 50 -15 90 0 F P 4 0 1 0 110 -20 115 -15 145 -15 150 -10 N P 4 0 1 0 130 -15 115 10 145 10 130 -15 N X S 1 100 -200 100 U 50 50 1 1 P X S 2 100 -200 100 U 50 50 1 1 P N X S 3 100 -200 100 U 50 50 1 1 P N X G 4 -200 0 100 R 50 50 1 1 P X D 5 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # FDC6330L # DEF FDC6330L Q 0 20 Y N 1 F N F0 "Q" 125 -50 50 H V L CNN F1 "FDC6330L" 125 -150 50 H V L CNN F2 "Package_TO_SOT_SMD:TSOT-23-6" -50 -575 50 H I C CNN F3 "" -100 -100 50 H I C CNN $FPLIST TSOT?23* $ENDFPLIST DRAW C -35 -100 110 0 1 10 N C 0 -170 10 0 1 0 F C 0 -30 10 0 1 0 F C -105 300 10 1 1 0 F C -35 100 10 1 1 0 F C -35 265 110 1 1 10 N C 35 300 10 1 1 0 F P 2 0 1 0 -90 -100 -200 -100 N P 2 0 1 10 -90 -25 -90 -175 N P 2 0 1 10 -70 -150 -70 -190 N P 2 0 1 10 -70 -80 -70 -120 N P 2 0 1 10 -70 -10 -70 -50 N P 2 0 1 0 0 0 0 -30 N P 2 0 1 0 200 300 65 300 N P 3 0 1 0 -200 100 0 100 0 0 N P 3 0 1 0 0 -200 0 -100 -70 -100 N P 4 0 1 0 -70 -170 30 -170 30 -30 -70 -30 N P 2 1 1 0 -125 300 -235 300 N P 2 1 1 10 -85 230 -125 230 N P 2 1 1 0 -35 210 -35 100 N P 2 1 1 10 -15 230 -55 230 N P 2 1 1 10 40 210 -110 210 N P 2 1 1 10 55 230 15 230 N P 2 1 1 0 65 300 35 300 N P 3 1 1 0 -135 300 -35 300 -35 230 N P 4 1 1 0 -105 230 -105 330 35 330 35 230 N P 4 1 1 0 -60 -100 -20 -85 -20 -115 -60 -100 F P 4 1 1 0 -55 310 -50 315 -50 345 -45 350 N P 4 1 1 0 -50 330 -25 315 -25 345 -50 330 N P 4 1 1 0 -35 290 -20 250 -50 250 -35 290 F P 4 1 1 0 10 -80 15 -85 45 -85 50 -90 N P 4 1 1 0 30 -85 15 -110 45 -110 30 -85 N X S1 1 0 -300 100 U 50 50 1 1 P X D2 2 300 300 100 L 50 50 1 1 P N X D2 3 300 300 100 L 50 50 1 1 P X S2 4 -300 300 100 R 50 50 1 1 P X G1 5 -300 -100 100 R 50 50 1 1 P X D1 6 -300 100 100 R 50 50 1 1 P ENDDRAW ENDDEF # # FDG1024NZ # DEF FDG1024NZ Q 0 20 Y N 2 F N F0 "Q" 200 75 50 H V L CNN F1 "FDG1024NZ" 200 0 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-363_SC-70-6" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS FDG6335N $FPLIST SOT?363* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X S 1 100 -200 100 U 50 50 1 1 P X G 2 -200 0 100 R 50 50 1 1 P X D 6 100 200 100 D 50 50 1 1 P X D 3 100 200 100 D 50 50 2 1 P X S 4 100 -200 100 U 50 50 2 1 P X G 5 -200 0 100 R 50 50 2 1 P ENDDRAW ENDDEF # # FDMC8032L # DEF FDMC8032L Q 0 20 Y N 2 F N F0 "Q" 200 75 50 H V L CNN F1 "FDMC8032L" 200 0 50 H V L CNN F2 "Package_SON:Fairchild_DualPower33-6_3x3mm" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST Fairchild*DualPower33*3x3mm* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X G1 1 -200 0 100 R 50 50 1 1 P X S1 2 100 -200 100 U 50 50 1 1 P X D1 5 100 200 100 D 50 50 1 1 P X S2 3 100 -200 100 U 50 50 2 1 P X G2 4 -200 0 100 R 50 50 2 1 P X D2 6 100 200 100 D 50 50 2 1 P ENDDRAW ENDDEF # # FDS6890A # DEF FDS6890A Q 0 20 Y N 2 F N F0 "Q" 200 75 50 H V L CNN F1 "FDS6890A" 200 0 50 H V L CNN F2 "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS FDS6892A FDS6898A FDS9926A STS2DNE60 FDS6930A FDS6930B $FPLIST SOIC*3.9x4.9mm*P1.27mm* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X S1 1 100 -200 100 U 50 50 1 1 P X G1 2 -200 0 100 R 50 50 1 1 P X D1 7 100 200 100 D 50 50 1 1 P N X D1 8 100 200 100 D 50 50 1 1 P X S2 3 100 -200 100 U 50 50 2 1 P X G2 4 -200 0 100 R 50 50 2 1 P X D2 5 100 200 100 D 50 50 2 1 P X D2 6 100 200 100 D 50 50 2 1 P N ENDDRAW ENDDEF # # IPD50R380CE # DEF IPD50R380CE Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "IPD50R380CE" 200 0 50 H V L CNN F2 "Package_TO_SOT_SMD:TO-252-2" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS IPD50R3K0CE QM6006D $FPLIST TO?252* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X G 1 -200 0 100 R 50 50 1 1 I X D 2 100 200 100 D 50 50 1 1 P X S 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # IPDD60R050G7 # DEF IPDD60R050G7 Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "IPDD60R050G7" 200 0 50 H V L CNN F2 "Package_TO_SOT_SMD:Infineon_PG-HDSOP-10-1" 0 0 50 H I C CIN F3 "" 0 0 50 H I L CNN ALIAS IPDD60R080G7 IPDD60R102G7 IPDD60R125G7 IPDD60R150G7 IPDD60R190G7 $FPLIST Infineon*PG*HDSOP* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -125 11 0 1 0 F C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 -100 -100 -100 -125 100 -125 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X G 1 -200 0 100 R 50 50 1 1 I X D 10 100 200 100 D 50 50 1 1 P N X DS 2 -200 -100 100 R 50 50 1 1 P X PS 3 100 -200 100 U 50 50 1 1 P X PS 4 100 -200 100 U 50 50 1 1 P N X PS 5 100 -200 100 U 50 50 1 1 P N X D 6 100 200 100 D 50 50 1 1 P X D 7 100 200 100 D 50 50 1 1 P N X D 8 100 200 100 D 50 50 1 1 P N X D 9 100 200 100 D 50 50 1 1 P N ENDDRAW ENDDEF # # IPT012N08N5 # DEF IPT012N08N5 Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "IPT012N08N5" 200 0 50 H V L CNN F2 "Package_TO_SOT_SMD:Infineon_PG-HSOF-8-1" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS IPT015N10N5 IPT020N10N3 $FPLIST Infineon*PG*HSOF* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X G 1 -200 0 100 R 50 50 1 1 I X S 2 100 -200 100 U 50 50 1 1 P X D 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # IRF40DM229 # DEF IRF40DM229 Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "IRF40DM229" 200 0 50 H V L CNN F2 "Package_DirectFET:DirectFET_MF" 0 0 50 H I C CIN F3 "" 0 0 50 H I L CNN ALIAS IRF7483M $FPLIST DirectFET*MF* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X D 1 100 200 100 D 50 50 1 1 P X G 2 -200 0 100 R 50 50 1 1 I X S 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # IRF60DM206 # DEF IRF60DM206 Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "IRF60DM206" 200 0 50 H V L CNN F2 "Package_DirectFET:DirectFET_ME" 0 0 50 H I C CIN F3 "" 0 0 50 H I L CNN ALIAS IRF7480M IRF7486M IRF7580M IRF7780M $FPLIST DirectFET*ME* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X D 1 100 200 100 D 50 50 1 1 P X G 2 -200 0 100 R 50 50 1 1 I X S 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # IRF6613 # DEF IRF6613 Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "IRF6613" 200 0 50 H V L CNN F2 "Package_DirectFET:DirectFET_MT" 0 0 50 H I C CIN F3 "" 0 0 50 H I L CNN ALIAS IRF6618 IRF6726M IRF8301M $FPLIST DirectFET*MT* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X D 1 100 200 100 D 50 50 1 1 P X G 2 -200 0 100 R 50 50 1 1 I X S 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # IRF6655 # DEF IRF6655 Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "IRF6655" 200 0 50 H V L CNN F2 "Package_DirectFET:DirectFET_SH" 0 0 50 H I C CIN F3 "" 0 0 50 H I L CNN ALIAS IRF6665 $FPLIST DirectFET*SH* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X D 1 100 200 100 D 50 50 1 1 P X G 2 -200 0 100 R 50 50 1 1 I X S 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # IRF6710S2 # DEF IRF6710S2 Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "IRF6710S2" 200 0 50 H V L CNN F2 "Package_DirectFET:DirectFET_S1" 0 0 50 H I C CIN F3 "" 0 0 50 H I L CNN ALIAS IRF6810S $FPLIST DirectFET*S1* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X D 1 100 200 100 D 50 50 1 1 P X G 2 -200 0 100 R 50 50 1 1 I X S 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # IRF6718L2 # DEF IRF6718L2 Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "IRF6718L2" 200 0 50 H V L CNN F2 "Package_DirectFET:DirectFET_L6" 0 0 50 H I C CIN F3 "" 0 0 50 H I L CNN ALIAS IRF7748L1 $FPLIST DirectFET*L6* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X D 1 100 200 100 D 50 50 1 1 P X G 2 -200 0 100 R 50 50 1 1 I X S 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # IRF6802SD # DEF IRF6802SD Q 0 20 Y N 2 F N F0 "Q" 200 75 50 H V L CNN F1 "IRF6802SD" 200 0 50 H V L CNN F2 "Package_DirectFET:DirectFET_SA" 0 0 50 H I C CIN F3 "" 0 0 50 H I L CNN ALIAS IRL6297SD $FPLIST DirectFET*SA* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X D 1 100 200 100 D 50 50 1 1 P X G1 2 -200 0 100 R 50 50 1 1 I X S1 3 100 -200 100 U 50 50 1 1 P X D 1 100 200 100 D 50 50 2 1 P X G2 4 -200 0 100 R 50 50 2 1 I X S2 5 100 -200 100 U 50 50 2 1 P ENDDRAW ENDDEF # # IRF6892S # DEF IRF6892S Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "IRF6892S" 200 0 50 H V L CNN F2 "Package_DirectFET:DirectFET_S3C" 0 0 50 H I C CIN F3 "" 0 0 50 H I L CNN $FPLIST DirectFET*S3C* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X D 1 100 200 100 D 50 50 1 1 P X G 2 -200 0 100 R 50 50 1 1 I X S 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # IRF7309IPBF # DEF IRF7309IPBF Q 0 20 Y N 2 F N F0 "Q" 200 75 50 H V L CNN F1 "IRF7309IPBF" 200 0 50 H V L CNN F2 "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" 200 -75 50 H I L CNN F3 "" 100 0 50 H I L CNN ALIAS FDS4559 FDS4897AC FDS4897C FDS8960C FDS9934C IRF7343PBF Si4532DY Si4542DY $FPLIST SOIC*3.9x4.9mm*P1.27mm* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 1 1 0 40 0 80 15 80 -15 40 0 F P 4 1 1 0 110 20 115 15 145 15 150 10 N P 4 1 1 0 130 15 115 -10 145 -10 130 15 N P 4 2 1 0 90 0 50 15 50 -15 90 0 F P 4 2 1 0 110 -20 115 -15 145 -15 150 -10 N P 4 2 1 0 130 -15 115 10 145 10 130 -15 N X S 1 100 -200 100 U 50 50 1 1 P X G 2 -200 0 100 R 50 50 1 1 I X D 7 100 200 100 D 50 50 1 1 P N X D 8 100 200 100 D 50 50 1 1 P X 1 3 100 -200 100 U 50 50 2 1 P X G 4 -200 0 100 R 50 50 2 1 I X D 5 100 200 100 D 50 50 2 1 P N X D 6 100 200 100 D 50 50 2 1 P ENDDRAW ENDDEF # # IRF7324 # DEF IRF7324 Q 0 20 Y N 2 F N F0 "Q" 200 75 50 H V L CNN F1 "IRF7324" 200 0 50 H V L CNN F2 "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" 200 -75 50 H I L CNN F3 "" 100 0 50 H I L CNN $FPLIST SOIC*3.9x4.9mm*P1.27mm* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 70 130 70 130 -70 30 -70 N P 4 0 1 0 90 0 50 15 50 -15 90 0 F P 4 0 1 0 110 -20 115 -15 145 -15 150 -10 N P 4 0 1 0 130 -15 115 10 145 10 130 -15 N X S1 1 100 -200 100 U 50 50 1 1 P X G1 2 -200 0 100 R 50 50 1 1 I X D1 7 100 200 100 D 50 50 1 1 P N X D1 8 100 200 100 D 50 50 1 1 P X S2 3 100 -200 100 U 50 50 2 1 P X G2 4 -200 0 100 R 50 50 2 1 I X D2 5 100 200 100 D 50 50 2 1 P N X D2 6 100 200 100 D 50 50 2 1 P ENDDRAW ENDDEF # # IRF7404 # DEF IRF7404 Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "IRF7404" 200 0 50 H V L CNN F2 "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" 200 -75 50 H I L CIN F3 "" 0 0 50 V I L CNN ALIAS FDS9435A $FPLIST SOIC*3.9x4.9mm*P1.27mm* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 70 130 70 130 -70 30 -70 N P 4 0 1 0 90 0 50 15 50 -15 90 0 F P 4 0 1 0 110 -20 115 -15 145 -15 150 -10 N P 4 0 1 0 130 -15 115 10 145 10 130 -15 N X S 1 100 -200 100 U 50 50 1 1 P X S 2 100 -200 100 U 50 50 1 1 P N X S 3 100 -200 100 U 50 50 1 1 P N X G 4 -200 0 100 R 50 50 1 1 P X D 5 100 200 100 D 50 50 1 1 P N X D 6 100 200 100 D 50 50 1 1 P N X D 7 100 200 100 D 50 50 1 1 P N X D 8 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # IRF7606PBF # DEF IRF7606PBF Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "IRF7606PBF" 200 0 50 H V L CNN F2 "Package_SO:MSOP-8_3x3mm_P0.65mm" 200 -75 50 H I L CIN F3 "" 0 0 50 V I L CNN $FPLIST MSOP*3x3mm*P0.65mm* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 70 130 70 130 -70 30 -70 N P 4 0 1 0 90 0 50 15 50 -15 90 0 F P 4 0 1 0 110 -20 115 -15 145 -15 150 -10 N P 4 0 1 0 130 -15 115 10 145 10 130 -15 N X S 1 100 -200 100 U 50 50 1 1 P X S 2 100 -200 100 U 50 50 1 1 P N X S 3 100 -200 100 U 50 50 1 1 P N X G 4 -200 0 100 R 50 50 1 1 P X D 5 100 200 100 D 50 50 1 1 P N X D 6 100 200 100 D 50 50 1 1 P N X D 7 100 200 100 D 50 50 1 1 P N X D 8 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # IRF7607PBF # DEF IRF7607PBF Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "IRF7607PBF" 200 0 50 H V L CNN F2 "Package_SO:MSOP-8_3x3mm_P0.65mm" 200 -75 50 H I L CIN F3 "" 0 0 50 V I L CNN $FPLIST MSOP*3x3mm*P0.65mm* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X S 1 100 200 100 D 50 50 1 1 P X S 2 100 200 100 D 50 50 1 1 P N X S 3 100 200 100 D 50 50 1 1 P N X G 4 -200 0 100 R 50 50 1 1 P X D 5 100 -200 100 U 50 50 1 1 P N X D 6 100 -200 100 U 50 50 1 1 P N X D 7 100 -200 100 U 50 50 1 1 P N X D 8 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # IRF7665S2 # DEF IRF7665S2 Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "IRF7665S2" 200 0 50 H V L CNN F2 "Package_DirectFET:DirectFET_SB" 0 0 50 H I C CIN F3 "" 0 0 50 H I L CNN $FPLIST DirectFET*SB* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X D 1 100 200 100 D 50 50 1 1 P X G 2 -200 0 100 R 50 50 1 1 I X S 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # IRF7739L1 # DEF IRF7739L1 Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "IRF7739L1" 200 0 50 H V L CNN F2 "Package_DirectFET:DirectFET_L8" 0 0 50 H I C CIN F3 "" 0 0 50 H I L CNN ALIAS IRF7759L2 IRF7769L1 IRF7779L2 IRF7799L2 IRL7472L1 $FPLIST DirectFET*L8* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X D 1 100 200 100 D 50 50 1 1 P X G 2 -200 0 100 R 50 50 1 1 I X S 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # IRF8721PBF-1 # DEF IRF8721PBF-1 Q 0 20 Y N 1 F N F0 "Q" 200 100 50 H V L CNN F1 "IRF8721PBF-1" 200 0 50 H V L CNN F2 "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" 200 -100 50 H I L CNN F3 "" 0 0 50 H I L CNN ALIAS IRF7403 FDS2734 FDS6630A Si4162DY $FPLIST SOIC*3.9x4.9mm*P1.27mm* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X S 1 100 -200 100 U 50 50 1 1 P X S 2 100 -200 100 U 50 50 1 1 P N X S 3 100 -200 100 U 50 50 1 1 P N X G 4 -200 0 100 R 50 50 1 1 I X D 5 100 200 100 D 50 50 1 1 P N X D 6 100 200 100 D 50 50 1 1 P N X D 7 100 200 100 D 50 50 1 1 P N X D 8 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # IRF9383M # DEF IRF9383M Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "IRF9383M" 200 0 50 H V L CNN F2 "Package_DirectFET:DirectFET_MX" 0 0 50 H I C CIN F3 "" 0 0 50 H I L CNN $FPLIST DirectFET*MX* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 70 130 70 130 -70 30 -70 N P 4 0 1 0 90 0 50 15 50 -15 90 0 F P 4 0 1 0 110 -20 115 -15 145 -15 150 -10 N P 4 0 1 0 130 -15 115 10 145 10 130 -15 N X D 1 100 200 100 D 50 50 1 1 P X G 2 -200 0 100 R 50 50 1 1 I X S 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # IRF9394M # DEF IRF9394M Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "IRF9394M" 200 0 50 H V L CNN F2 "Package_DirectFET:DirectFET_MC" 0 0 50 H I C CIN F3 "" 0 0 50 H I L CNN ALIAS IRF9395M $FPLIST DirectFET*MC* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 70 130 70 130 -70 30 -70 N P 4 0 1 0 90 0 50 15 50 -15 90 0 F P 4 0 1 0 110 -20 115 -15 145 -15 150 -10 N P 4 0 1 0 130 -15 115 10 145 10 130 -15 N X D 1 100 200 100 D 50 50 1 1 P X G 2 -200 0 100 R 50 50 1 1 I X S 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # IRF9540N # DEF IRF9540N Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "IRF9540N" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-220-3_Vertical" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS IRF4905 FQP27P06 $FPLIST TO?220* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 70 130 70 130 -70 30 -70 N P 4 0 1 0 90 0 50 15 50 -15 90 0 F P 4 0 1 0 110 -20 115 -15 145 -15 150 -10 N P 4 0 1 0 130 -15 115 10 145 10 130 -15 N X G 1 -200 0 100 R 50 50 1 1 I X D 2 100 200 100 D 50 50 1 1 P X S 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # IRFI4019H # DEF IRFI4019H Q 0 20 Y N 1 F N F0 "Q" 200 175 50 H V L CNN F1 "IRFI4019H" 200 100 50 H V L CNN F2 "Package_TO_SOT_THT:TO-220F-5_P3.4x2.06mm_StaggerEven_Lead1.86mm_Vertical" 0 0 50 H I C CIN F3 "" 0 0 50 H I L CNN ALIAS IRFI4020H IRFI4212H $FPLIST TO?220F*P3.4x2.06mm*StaggerEven*Lead1.86mm* $ENDFPLIST DRAW C 65 -200 110 0 1 10 N C 65 200 110 0 1 10 N C 100 -270 10 0 1 0 F C 100 -130 10 0 1 0 F C 100 0 10 0 1 0 F C 100 130 10 0 1 0 F C 100 270 10 0 1 0 F P 2 0 1 0 10 -200 -100 -200 N P 2 0 1 10 10 -125 10 -275 N P 2 0 1 0 10 200 -100 200 N P 2 0 1 10 10 275 10 125 N P 2 0 1 10 30 -250 30 -290 N P 2 0 1 10 30 -180 30 -220 N P 2 0 1 10 30 -110 30 -150 N P 2 0 1 10 30 150 30 110 N P 2 0 1 10 30 220 30 180 N P 2 0 1 10 30 290 30 250 N P 2 0 1 0 100 300 100 270 N P 3 0 1 0 100 -300 100 -200 30 -200 N P 3 0 1 0 100 -130 100 200 30 200 N P 4 0 1 0 30 -270 130 -270 130 -130 30 -130 N P 4 0 1 0 30 130 130 130 130 270 30 270 N P 4 0 1 0 40 -200 80 -185 80 -215 40 -200 F P 4 0 1 0 40 200 80 215 80 185 40 200 F P 4 0 1 0 110 -180 115 -185 145 -185 150 -190 N P 4 0 1 0 110 220 115 215 145 215 150 210 N P 4 0 1 0 130 -185 115 -210 145 -210 130 -185 N P 4 0 1 0 130 215 115 190 145 190 130 215 N X S2 1 100 -400 100 U 50 50 1 1 P X G2 2 -200 -200 100 R 50 50 1 1 I X S1/D2 3 200 0 100 L 50 50 1 1 P X G1 4 -200 200 100 R 50 50 1 1 I X D1 5 100 400 100 D 50 50 1 1 P ENDDRAW ENDDEF # # IRL6283M # DEF IRL6283M Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "IRL6283M" 200 0 50 H V L CNN F2 "Package_DirectFET:DirectFET_MD" 0 0 50 H I C CIN F3 "" 0 0 50 H I L CNN $FPLIST DirectFET*MD* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X D 1 100 200 100 D 50 50 1 1 P X G 2 -200 0 100 R 50 50 1 1 I X S 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # IRLIZ44N # DEF IRLIZ44N Q 0 20 Y N 1 F N F0 "Q" 250 75 50 H V L CNN F1 "IRLIZ44N" 250 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-220F-3_Vertical" 250 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST TO?220F* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X G 1 -200 0 100 R 50 50 1 1 I X D 2 100 200 100 D 50 50 1 1 P X S 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # PGA26E07BA # DEF PGA26E07BA Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "PGA26E07BA" 200 0 50 H V L CNN F2 "Package_DFN_QFN:Panasonic_HSON-8_8x8mm_P2.00mm" 0 0 50 H I C CIN F3 "" 0 0 50 H I L CNN ALIAS PGA26E19BA $FPLIST Panasonic*HSON*8x8mm*P2.00mm* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -125 11 0 1 0 F C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 -100 -100 -100 -125 100 -125 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X D 1 100 200 100 D 50 50 1 1 P X D 2 100 200 100 D 50 50 1 1 P N X D 3 100 200 100 D 50 50 1 1 P N X D 4 100 200 100 D 50 50 1 1 P N X S2 5 100 -200 100 U 50 50 1 1 P X S2 6 100 -200 100 U 50 50 1 1 P N X S1 7 -200 -100 100 R 50 50 1 1 P X G 8 -200 0 100 R 50 50 1 1 I X S2 9 100 -200 100 U 50 50 1 1 P N ENDDRAW ENDDEF # # PSMN5R2-60YL # DEF PSMN5R2-60YL Q 0 20 Y N 1 F N F0 "Q" 250 100 50 H V C CNN F1 "PSMN5R2-60YL" 500 0 50 H V C CNN F2 "Package_TO_SOT_SMD:LFPAK56" 150 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST LFPAK56* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X S 1 100 -200 100 U 50 50 1 1 P X S 2 100 -200 100 U 50 50 1 1 P N X S 3 100 -200 100 U 50 50 1 1 P N X G 4 -200 0 100 R 50 50 1 1 P X D 5 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # QM6015D # DEF QM6015D Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "QM6015D" 200 0 50 H V L CNN F2 "Package_TO_SOT_SMD:TO-252-2" 200 -75 50 H I L CIN F3 "" 0 0 50 V I L CNN $FPLIST TO?252* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 70 130 70 130 -70 30 -70 N P 4 0 1 0 90 0 50 15 50 -15 90 0 F P 4 0 1 0 110 -20 115 -15 145 -15 150 -10 N P 4 0 1 0 130 -15 115 10 145 10 130 -15 N X G 1 -200 0 100 R 50 50 1 1 P X D 2 100 200 100 D 50 50 1 1 P X S 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # SUD19P06-60 # DEF SUD19P06-60 Q 0 20 Y N 1 F N F0 "Q" 195 75 50 H V L CNN F1 "SUD19P06-60" 195 0 50 H V L CNN F2 "Package_TO_SOT_SMD:TO-252-2" 195 -75 50 H I L CIN F3 "" 0 0 50 H I C CNN ALIAS SUD50P08-25L SUD45P03-09 SUD09P10-195 SUD08P06-155L SUD50P10-43L SUD50P06-15 SUD50P04-08 $FPLIST TO?252* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 70 130 70 130 -70 30 -70 N P 4 0 1 0 90 0 50 15 50 -15 90 0 F P 4 0 1 0 110 -20 115 -15 145 -15 150 -10 N P 4 0 1 0 130 -15 115 10 145 10 130 -15 N X G 1 -200 0 100 R 50 50 1 1 I X D 2 100 200 100 D 50 50 1 1 P X S 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # Si1442DH # DEF Si1442DH Q 0 20 Y N 1 F N F0 "Q" 200 50 50 H V L CNN F1 "Si1442DH" 200 -50 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-363_SC-70-6" 100 -400 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST SOT?363* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X D 1 100 200 100 D 50 50 1 1 P X D 2 100 200 100 D 50 50 1 1 P N X G 3 -200 0 200 R 50 50 1 1 I X S 4 100 -200 100 U 50 50 1 1 P X D 5 100 200 100 D 50 50 1 1 P N X D 6 100 200 100 D 50 50 1 1 P N ENDDRAW ENDDEF # # Si7141DP # DEF Si7141DP Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "Si7141DP" 200 0 50 H V L CNN F2 "Package_SO:PowerPAK_SO-8_Single" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST PowerPAK*SO*Single* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 70 130 70 130 -70 30 -70 N P 4 0 1 0 90 0 50 15 50 -15 90 0 F P 4 0 1 0 110 -20 115 -15 145 -15 150 -10 N P 4 0 1 0 130 -15 115 10 145 10 130 -15 N X S 1 100 -200 100 U 50 50 1 1 P X S 2 100 -200 100 U 50 50 1 1 P N X S 3 100 -200 100 U 50 50 1 1 P N X G 4 -200 0 100 R 50 50 1 1 I X D 5 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # Si7336ADP # DEF Si7336ADP Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "Si7336ADP" 200 0 50 H V L CNN F2 "Package_SO:PowerPAK_SO-8_Single" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS Si7450DP $FPLIST PowerPAK*SO*Single* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 -70 130 -70 130 70 30 70 N P 4 0 1 0 40 0 80 15 80 -15 40 0 F P 4 0 1 0 110 20 115 15 145 15 150 10 N P 4 0 1 0 130 15 115 -10 145 -10 130 15 N X S 1 100 -200 100 U 50 50 1 1 P X S 2 100 -200 100 U 50 50 1 1 P N X S 3 100 -200 100 U 50 50 1 1 P N X G 4 -200 0 100 R 50 50 1 1 I X D 5 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # SiA453EDJ # DEF SiA453EDJ Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "SiA453EDJ" 200 0 50 H V L CNN F2 "Package_TO_SOT_SMD:Vishay_PowerPAK_SC70-6L_Single" 200 -75 50 H I L CIN F3 "" 0 0 50 V I L CNN ALIAS SiA449DJ $FPLIST Vishay*PowerPAK*SC70*Single* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 70 130 70 130 -70 30 -70 N P 4 0 1 0 90 0 50 15 50 -15 90 0 F P 4 0 1 0 110 -20 115 -15 145 -15 150 -10 N P 4 0 1 0 130 -15 115 10 145 10 130 -15 N X D 1 100 200 100 D 50 50 1 1 P X G 3 -200 0 100 R 50 50 1 1 P X S 4 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # SiS415DNT # DEF SiS415DNT Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "SiS415DNT" 200 0 50 H V L CNN F2 "Package_SO:Vishay_PowerPAK_1212-8_Single" 200 -75 50 H I L CIN F3 "" 0 0 50 V I L CNN ALIAS SiSS27DN $FPLIST Vishay*PowerPAK*1212*Single* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 70 130 70 130 -70 30 -70 N P 4 0 1 0 90 0 50 15 50 -15 90 0 F P 4 0 1 0 110 -20 115 -15 145 -15 150 -10 N P 4 0 1 0 130 -15 115 10 145 10 130 -15 N X S 1 100 -200 100 U 50 50 1 1 P X S 2 100 -200 100 U 50 50 1 1 P N X S 3 100 -200 100 U 50 50 1 1 P N X G 4 -200 0 100 R 50 50 1 1 P X D 5 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # TP0610L # DEF TP0610L Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "TP0610L" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-92L_Inline" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS VP0610L $FPLIST TO?92L* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 70 130 70 130 -70 30 -70 N P 4 0 1 0 90 0 50 15 50 -15 90 0 F P 4 0 1 0 110 -20 115 -15 145 -15 150 -10 N P 4 0 1 0 130 -15 115 10 145 10 130 -15 N X S 1 100 -200 100 U 50 50 1 1 P X G 2 -200 0 100 R 50 50 1 1 I X D 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # TP0610T # DEF TP0610T Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "TP0610T" 200 0 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-23" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS VP0610T BSS84 NTR2101P BSS83P Si2319CDS IRLML6402 DMG2301L AO3401A IRLML9301 IRLML5203 Si2371EDS TSM2301ACX $FPLIST SOT?23* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 70 130 70 130 -70 30 -70 N P 4 0 1 0 90 0 50 15 50 -15 90 0 F P 4 0 1 0 110 -20 115 -15 145 -15 150 -10 N P 4 0 1 0 130 -15 115 10 145 10 130 -15 N X G 1 -200 0 100 R 50 50 1 1 I X S 2 100 -200 100 U 50 50 1 1 P X D 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # ZXMP4A16G # DEF ZXMP4A16G Q 0 20 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "ZXMP4A16G" 200 0 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-223-3_TabPin2" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST SOT?223* $ENDFPLIST DRAW C 65 0 110 0 1 10 N C 100 -70 10 0 1 0 F C 100 70 10 0 1 0 F P 2 0 1 0 10 0 -100 0 N P 2 0 1 10 10 75 10 -75 N P 2 0 1 10 30 -50 30 -90 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 90 30 50 N P 2 0 1 0 100 100 100 70 N P 3 0 1 0 100 -100 100 0 30 0 N P 4 0 1 0 30 70 130 70 130 -70 30 -70 N P 4 0 1 0 90 0 50 15 50 -15 90 0 F P 4 0 1 0 110 -20 115 -15 145 -15 150 -10 N P 4 0 1 0 130 -15 115 10 145 10 130 -15 N X G 1 -200 0 100 R 50 50 1 1 I X D 2 100 200 100 D 50 50 1 1 P X S 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # #End Library ================================================ FILE: esim-cloud-backend/kicad-symbols/additional/Transistor_IGBT.dcm ================================================ EESchema-DOCLIB Version 2.0 # $CMP IRG4PF50W D 28A, 900V, N-Channel IGBT K N-Channel IGBT Power Transistor F http://www.irf.com/product-info/datasheets/data/irg4pf50w.pdf $ENDCMP # #End Doc Library ================================================ FILE: esim-cloud-backend/kicad-symbols/additional/Transistor_IGBT.lib ================================================ EESchema-LIBRARY Version 2.4 #encoding utf-8 # # IRG4PF50W # DEF IRG4PF50W Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "IRG4PF50W" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-247-3_Vertical" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST TO?247* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 0 0 10 0 N P 2 0 1 10 30 -40 30 -80 N P 2 0 1 10 30 20 30 -20 N P 2 0 1 10 30 80 30 40 N P 2 0 1 0 100 -95 30 -60 N P 2 0 1 0 100 -35 30 0 N P 2 0 1 0 100 95 30 60 N P 3 0 1 10 10 75 10 -75 10 -75 N P 4 0 1 0 55 -85 65 -65 100 -95 55 -85 F P 4 0 1 0 85 75 75 95 40 65 85 75 F X G 1 -200 0 200 R 50 50 1 1 I X C 2 100 200 100 D 50 50 1 1 P X E 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # #End Library ================================================ FILE: esim-cloud-backend/kicad-symbols/additional/Triac_Thyristor.dcm ================================================ EESchema-DOCLIB Version 2.0 # $CMP BT136-500 D 4A RMS, 500V Off-State Voltage, Triac, TO-220 K Triac F http://www.micropik.com/PDF/BT136-600.pdf $ENDCMP # $CMP BT136-600 D 4A RMS, 500V Off-State Voltage, Triac, TO-220 K Triac F http://www.micropik.com/PDF/BT136-600.pdf $ENDCMP # $CMP BT136-800 D 4A RMS, 800V Off-State Voltage, Triac, TO-220 K Triac F http://www.micropik.com/PDF/BT136-600.pdf $ENDCMP # $CMP BT138-600 D 12A RMS, 600V Off-State Voltage, Triac, TO-220 K Triac F https://assets.nexperia.com/documents/data-sheet/BT138_SER_D_E.pdf $ENDCMP # $CMP BT138-800 D 12A RMS, 800V Off-State Voltage, Triac, TO-220 K Triac F https://assets.nexperia.com/documents/data-sheet/BT138_SER_D_E.pdf $ENDCMP # $CMP BT139-600 D 16A RMS, 600V Off-State Voltage, 4Q Triac, TO-220 K Triac F https://www.rapidonline.com/pdf/47-3240.pdf $ENDCMP # $CMP BT169B D 0.5A Ion, 200V Voff, Thyristors logic level, Silicon Controlled Rectifier (Thyristor), TO-92 K thyristor logic level F https://media.digikey.com/pdf/Data%20Sheets/NXP%20PDFs/BT169_Series.pdf $ENDCMP # $CMP BT169D D 0.5A Ion, 400V Voff, Thyristors logic level, Silicon Controlled Rectifier (Thyristor), TO-92 K thyristor logic level F https://media.digikey.com/pdf/Data%20Sheets/NXP%20PDFs/BT169_Series.pdf $ENDCMP # $CMP BT169G D 0.5A Ion, 600V Voff, Thyristors logic level, Silicon Controlled Rectifier (Thyristor), TO-92 K thyristor logic level F https://media.digikey.com/pdf/Data%20Sheets/NXP%20PDFs/BT169_Series.pdf $ENDCMP # $CMP BTA16-600B D 16A RMS, 600V Off-State Voltage, 50mA Sensitivity, Insulated, Triac, TO-220 K Triac F https://www.st.com/resource/en/datasheet/bta16.pdf $ENDCMP # $CMP BTA16-600BW D 16A RMS, 600V Off-State Voltage, 50mA Sensitivity, Snubberless, Insulated, Triac, TO-220 K Triac F https://www.st.com/resource/en/datasheet/bta16.pdf $ENDCMP # $CMP BTA16-600C D 16A RMS, 600V Off-State Voltage, 35mA Sensitivity, Insulated, Triac, TO-220 K Triac F https://www.st.com/resource/en/datasheet/bta16.pdf $ENDCMP # $CMP BTA16-600CW D 16A RMS, 600V Off-State Voltage, 35mA Sensitivity, Snubberless, Insulated, Triac, TO-220 K Triac F https://www.st.com/resource/en/datasheet/bta16.pdf $ENDCMP # $CMP BTA16-600SW D 16A RMS, 600V Off-State Voltage, 10mA Sensitivity, Snubberless, Insulated, Triac, TO-220 K Triac F https://www.st.com/resource/en/datasheet/bta16.pdf $ENDCMP # $CMP BTA16-800B D 16A RMS, 800V Off-State Voltage, 50mA Sensitivity, Insulated, Triac, TO-220 K Triac F https://www.st.com/resource/en/datasheet/bta16.pdf $ENDCMP # $CMP BTA16-800BW D 16A RMS, 800V Off-State Voltage, 50mA Sensitivity, Snubberless, Insulated, Triac, TO-220 K Triac F https://www.st.com/resource/en/datasheet/bta16.pdf $ENDCMP # $CMP BTA16-800C D 16A RMS, 800V Off-State Voltage, 35mA Sensitivity, Insulated, Triac, TO-220 K Triac F https://www.st.com/resource/en/datasheet/bta16.pdf $ENDCMP # $CMP BTA16-800CW D 16A RMS, 800V Off-State Voltage, 35mA Sensitivity, Snubberless, Insulated, Triac, TO-220 K Triac F https://www.st.com/resource/en/datasheet/bta16.pdf $ENDCMP # $CMP BTA16-800SW D 16A RMS, 800V Off-State Voltage, 10mA Sensitivity, Snubberless, Insulated, Triac, TO-220 K Triac F https://www.st.com/resource/en/datasheet/bta16.pdf $ENDCMP # $CMP BTB16-600B D 16A RMS, 600V Off-State Voltage, 50mA Sensitivity, Non-Insulated, Triac, TO-220 K Triac F https://www.st.com/resource/en/datasheet/bta16.pdf $ENDCMP # $CMP BTB16-600BW D 16A RMS, 600V Off-State Voltage, 50mA Sensitivity, Snubberless, Non-Insulated, Triac, TO-220 K Triac F https://www.st.com/resource/en/datasheet/bta16.pdf $ENDCMP # $CMP BTB16-600C D 16A RMS, 600V Off-State Voltage, 35mA Sensitivity, Non-Insulated, Triac, TO-220 K Triac F https://www.st.com/resource/en/datasheet/bta16.pdf $ENDCMP # $CMP BTB16-600CW D 16A RMS, 600V Off-State Voltage, 35mA Sensitivity, Snubberless, Non-Insulated, Triac, TO-220 K Triac F https://www.st.com/resource/en/datasheet/bta16.pdf $ENDCMP # $CMP BTB16-600SW D 16A RMS, 600V Off-State Voltage, 10mA Sensitivity, Snubberless, Non-Insulated, Triac, TO-220 K Triac F https://www.st.com/resource/en/datasheet/bta16.pdf $ENDCMP # $CMP BTB16-800B D 16A RMS, 800V Off-State Voltage, 50mA Sensitivity, Non-Insulated, Triac, TO-220 K Triac F https://www.st.com/resource/en/datasheet/bta16.pdf $ENDCMP # $CMP BTB16-800BW D 16A RMS, 800V Off-State Voltage, 50mA Sensitivity, Snubberless, Non-Insulated, Triac, TO-220 K Triac F https://www.st.com/resource/en/datasheet/bta16.pdf $ENDCMP # $CMP BTB16-800C D 16A RMS, 800V Off-State Voltage, 35mA Sensitivity, Non-Insulated, Triac, TO-220 K Triac F https://www.st.com/resource/en/datasheet/bta16.pdf $ENDCMP # $CMP BTB16-800CW D 16A RMS, 800V Off-State Voltage, 35mA Sensitivity, Snubberless, Non-Insulated, Triac, TO-220 K Triac F https://www.st.com/resource/en/datasheet/bta16.pdf $ENDCMP # $CMP BTB16-800SW D 16A RMS, 800V Off-State Voltage, 10mA Sensitivity, Snubberless, Non-Insulated, Triac, TO-220 K Triac F https://www.st.com/resource/en/datasheet/bta16.pdf $ENDCMP # $CMP TIC106 D 5A Ion, 400-800V Voff, Silicon Controlled Rectifier (Thyristor), TO-220 K thyristor F http://pdf.datasheetcatalog.com/datasheet/PowerInnovations/mXyzrtvs.pdf $ENDCMP # $CMP TIC116 D 8A Ion, 400-800V Voff, Silicon Controlled Rectifier (Thyristor), TO-220 K thyristor F https://www.princeton.edu/~mae412/HANDOUTS/Datasheets/TIC116.pdf $ENDCMP # $CMP TIC126 D 12A Ion, 400-800V Voff, Silicon Controlled Rectifier (Thyristor), TO-220 K thyristor F https://cdn-reichelt.de/documents/datenblatt/A400/TIC126.pdf $ENDCMP # $CMP TIC206 D 4A RMS, 400-700V Off-State Voltage, Sensitive Gate Triac, TO-220 K Triac F http://www.farnell.com/datasheets/56922.pdf $ENDCMP # $CMP TIC216 D 6A RMS, 400-800V Off-State Voltage, Triac, TO-220 K Triac F http://www.mouser.com/ds/2/54/tic216-37811.pdf $ENDCMP # $CMP TIC226 D 8A RMS, 400-800V Off-State Voltage, Triac, TO-220 K Triac F http://pdf.datasheetcatalog.com/datasheet/PowerInnovations/mXuqxvy.pdf $ENDCMP # $CMP Z0103MN D 4Q Triac, 1A RMS, 600V VDRM, 3mA Igt, 7mA Ih, SOT-223 K 4Q Triac F http://www.st.com/resource/en/datasheet/z01.pdf $ENDCMP # $CMP Z0103NN D 4Q Triac, 1A RMS, 800V VDRM, 3mA Igt, 7mA Ih, SOT-223 K 4Q Triac F http://www.st.com/resource/en/datasheet/z01.pdf $ENDCMP # $CMP Z0107MN D 4Q Triac, 1A RMS, 600V VDRM, 5mA Igt, 10mA Ih, SOT-223 K 4Q Triac F http://www.st.com/resource/en/datasheet/z01.pdf $ENDCMP # $CMP Z0107NN D 4Q Triac, 1A RMS, 800V VDRM, 5mA Igt, 10mA Ih, SOT-223 K 4Q Triac F http://www.st.com/resource/en/datasheet/z01.pdf $ENDCMP # $CMP Z0109MN D 4Q Triac, 1A RMS, 600V VDRM, 10mA Igt, 10mA Ih, SOT-223 K 4Q Triac F http://www.st.com/resource/en/datasheet/z01.pdf $ENDCMP # $CMP Z0109NN D 4Q Triac, 1A RMS, 800V VDRM, 10mA Igt, 10mA Ih, SOT-223 K 4Q Triac F http://www.st.com/resource/en/datasheet/z01.pdf $ENDCMP # $CMP Z0110MN D 4Q Triac, 1A RMS, 600V VDRM, 25mA Igt, 25mA Ih, SOT-223 K 4Q Triac F http://www.st.com/resource/en/datasheet/z01.pdf $ENDCMP # $CMP Z0110NN D 4Q Triac, 1A RMS, 800V VDRM, 25mA Igt, 25mA Ih, SOT-223 K 4Q Triac F http://www.st.com/resource/en/datasheet/z01.pdf $ENDCMP # #End Doc Library ================================================ FILE: esim-cloud-backend/kicad-symbols/additional/Triac_Thyristor.lib ================================================ EESchema-LIBRARY Version 2.4 #encoding utf-8 # # BT169B # DEF BT169B Q 0 0 Y N 1 F N F0 "Q" 100 75 50 H V L CNN F1 "BT169B" 100 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-92_Inline" 100 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS BT169D BT169G $FPLIST TO?92*Inline*Narrow* $ENDFPLIST DRAW P 2 0 1 0 -50 -100 -25 -50 N P 2 0 1 8 -50 -50 50 -50 N P 2 0 1 0 0 -100 0 100 N P 4 0 1 8 -50 50 50 50 0 -50 -50 50 N X A 1 0 150 100 D 50 50 1 1 P X G 2 -150 -100 100 R 50 50 1 1 I X K 3 0 -150 100 U 50 50 1 1 P ENDDRAW ENDDEF # # TIC106 # DEF TIC106 Q 0 0 Y N 1 F N F0 "Q" 100 75 50 H V L CNN F1 "TIC106" 100 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-220-3_Vertical" 100 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS TIC116 TIC126 $FPLIST TO?220* $ENDFPLIST DRAW P 2 0 1 0 -50 -100 -25 -50 N P 2 0 1 8 -50 -50 50 -50 N P 2 0 1 0 0 -100 0 100 N P 4 0 1 8 -50 50 50 50 0 -50 -50 50 N X K 1 0 -150 100 U 50 50 1 1 P X A 2 0 150 100 D 50 50 1 1 P X G 3 -150 -100 100 R 50 50 1 1 I ENDDRAW ENDDEF # # TIC226 # DEF TIC226 Q 0 0 Y Y 1 F N F0 "Q" 200 75 50 H V L CNN F1 "TIC226" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-220-3_Vertical" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS TIC206 BT138-600 BT138-800 TIC216 BT136-500 BT136-600 BT136-800 BT139-600 BTA16-600B BTA16-600BW BTA16-600C BTA16-600CW BTA16-600SW BTA16-800B BTA16-800BW BTA16-800C BTA16-800CW BTA16-800SW BTB16-600B BTB16-600BW BTB16-600C BTB16-600CW BTB16-600SW BTB16-800B BTB16-800BW BTB16-800C BTB16-800CW BTB16-800SW $FPLIST TO?220* $ENDFPLIST DRAW P 2 0 1 8 -100 -50 100 -50 N P 2 0 1 8 -100 50 100 50 N P 2 0 1 0 -50 -100 -25 -50 N P 3 0 1 8 -100 50 -50 -50 0 50 N P 3 0 1 8 0 -50 50 50 100 -50 N X A1 1 0 -150 100 U 50 25 1 1 P X A2 2 0 150 100 D 50 25 1 1 P X G 3 -150 -100 100 R 50 25 1 1 I ENDDRAW ENDDEF # # Z0103MN # DEF Z0103MN D 0 0 Y N 1 F N F0 "D" 125 25 50 H V L CNN F1 "Z0103MN" 125 -50 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-223" 750 -150 50 H I C CNN F3 "" 150 300 50 H I C CNN ALIAS Z0103NN Z0107MN Z0107NN Z0109MN Z0109NN Z0110MN Z0110NN $FPLIST SOT*223* $ENDFPLIST DRAW P 2 0 1 8 -100 -50 100 -50 N P 2 0 1 8 -100 50 100 50 N P 2 0 1 0 -50 -100 -25 -50 N P 3 0 1 8 -100 50 -50 -50 0 50 N P 3 0 1 8 0 -50 50 50 100 -50 N X A1 1 0 -150 100 U 50 50 1 1 P X A2 2 0 150 100 D 50 50 1 1 P X G 3 -150 -100 100 R 50 50 1 1 I X A4 4 0 150 100 D 50 50 1 1 P N ENDDRAW ENDDEF # #End Library ================================================ FILE: esim-cloud-backend/kicad-symbols/additional/eSim_Hybrid.dcm ================================================ EESchema-DOCLIB Version 2.0 # #End Doc Library ================================================ FILE: esim-cloud-backend/kicad-symbols/additional/eSim_Hybrid.lib ================================================ EESchema-LIBRARY Version 2.3 #encoding utf-8 # # adc_bridge_1 # DEF adc_bridge_1 U 0 40 Y Y 1 F N F0 "U" 0 0 60 H V C CNN F1 "adc_bridge_1" 0 150 60 H V C CNN F2 "" 0 0 60 H V C CNN F3 "" 0 0 60 H V C CNN DRAW S -400 200 350 -50 0 1 0 N X IN1 1 -600 50 200 R 50 50 1 1 I X OUT1 2 550 50 200 L 50 50 1 1 O ENDDRAW ENDDEF # # adc_bridge_2 # DEF adc_bridge_2 U 0 40 Y Y 1 F N F0 "U" 0 0 60 H V C CNN F1 "adc_bridge_2" 0 150 60 H V C CNN F2 "" 0 0 60 H V C CNN F3 "" 0 0 60 H V C CNN DRAW S -400 200 350 -100 0 1 0 N X IN1 1 -600 50 200 R 50 50 1 1 I X IN2 2 -600 -50 200 R 50 50 1 1 I X OUT1 3 550 50 200 L 50 50 1 1 O X OUT2 4 550 -50 200 L 50 50 1 1 O ENDDRAW ENDDEF # # adc_bridge_3 # DEF adc_bridge_3 U 0 40 Y Y 1 F N F0 "U" 0 0 60 H V C CNN F1 "adc_bridge_3" 0 150 60 H V C CNN F2 "" 0 0 60 H V C CNN F3 "" 0 0 60 H V C CNN DRAW S -400 200 350 -200 0 1 0 N X IN1 1 -600 50 200 R 50 50 1 1 I X IN2 2 -600 -50 200 R 50 50 1 1 I X IN3 3 -600 -150 200 R 50 50 1 1 I X OUT1 4 550 50 200 L 50 50 1 1 O X OUT2 5 550 -50 200 L 50 50 1 1 O X OUT3 6 550 -150 200 L 50 50 1 1 O ENDDRAW ENDDEF # # adc_bridge_4 # DEF adc_bridge_4 U 0 40 Y Y 1 F N F0 "U" 0 0 60 H V C CNN F1 "adc_bridge_4" 0 300 60 H V C CNN F2 "" 0 0 60 H V C CNN F3 "" 0 0 60 H V C CNN DRAW S -350 350 350 -200 0 1 0 N X IN1 1 -550 200 200 R 50 50 1 1 I X IN2 2 -550 100 200 R 50 50 1 1 I X IN3 3 -550 0 200 R 50 50 1 1 I X IN4 4 -550 -100 200 R 50 50 1 1 I X OUT1 5 550 200 200 L 50 50 1 1 O X OUT2 6 550 100 200 L 50 50 1 1 O X OUT3 7 550 0 200 L 50 50 1 1 O X OUT4 8 550 -100 200 L 50 50 1 1 O ENDDRAW ENDDEF # # adc_bridge_5 # DEF adc_bridge_5 U 0 40 Y Y 1 F N F0 "U" 0 0 60 H V C CNN F1 "adc_bridge_5" 0 150 60 H V C CNN F2 "" 0 0 60 H V C CNN F3 "" 0 0 60 H V C CNN DRAW S -400 200 350 -400 0 1 0 N X IN1 1 -600 50 200 R 50 50 1 1 I X IN2 2 -600 -50 200 R 50 50 1 1 I X IN3 3 -600 -150 200 R 50 50 1 1 I X IN4 4 -600 -250 200 R 50 50 1 1 I X IN5 5 -600 -350 200 R 50 50 1 1 I X OUT1 6 550 50 200 L 50 50 1 1 O X OUT2 7 550 -50 200 L 50 50 1 1 O X OUT3 8 550 -150 200 L 50 50 1 1 O X OUT4 9 550 -250 200 L 50 50 1 1 O X OUT5 10 550 -350 200 L 50 50 1 1 O ENDDRAW ENDDEF # # adc_bridge_6 # DEF adc_bridge_6 U 0 40 Y Y 1 F N F0 "U" 0 0 60 H V C CNN F1 "adc_bridge_6" 0 150 60 H V C CNN F2 "" 0 0 60 H V C CNN F3 "" 0 0 60 H V C CNN DRAW S -400 200 350 -500 0 1 0 N X IN1 1 -600 50 200 R 50 50 1 1 I X IN2 2 -600 -50 200 R 50 50 1 1 I X IN3 3 -600 -150 200 R 50 50 1 1 I X IN4 4 -600 -250 200 R 50 50 1 1 I X IN5 5 -600 -350 200 R 50 50 1 1 I X IN6 6 -600 -450 200 R 50 50 1 1 I X OUT1 7 550 50 200 L 50 50 1 1 O X OUT2 8 550 -50 200 L 50 50 1 1 O X OUT3 9 550 -150 200 L 50 50 1 1 O X OUT4 10 550 -250 200 L 50 50 1 1 O X OUT5 11 550 -350 200 L 50 50 1 1 O X OUT6 12 550 -450 200 L 50 50 1 1 O ENDDRAW ENDDEF # # adc_bridge_7 # DEF adc_bridge_7 U 0 40 Y Y 1 F N F0 "U" 0 0 60 H V C CNN F1 "adc_bridge_7" 0 150 60 H V C CNN F2 "" 0 0 60 H V C CNN F3 "" 0 0 60 H V C CNN DRAW S -400 200 350 -600 0 1 0 N X IN1 1 -600 50 200 R 50 50 1 1 I X IN2 2 -600 -50 200 R 50 50 1 1 I X IN3 3 -600 -150 200 R 50 50 1 1 I X IN4 4 -600 -250 200 R 50 50 1 1 I X IN5 5 -600 -350 200 R 50 50 1 1 I X IN6 6 -600 -450 200 R 50 50 1 1 I X IN7 7 -600 -550 200 R 50 50 1 1 I X OUT1 8 550 50 200 L 50 50 1 1 O X OUT2 9 550 -50 200 L 50 50 1 1 O X OUT3 10 550 -150 200 L 50 50 1 1 O X OUT4 11 550 -250 200 L 50 50 1 1 O X OUT5 12 550 -350 200 L 50 50 1 1 O X OUT6 13 550 -450 200 L 50 50 1 1 O X OUT7 14 550 -550 200 L 50 50 1 1 O ENDDRAW ENDDEF # # adc_bridge_8 # DEF adc_bridge_8 U 0 40 Y Y 1 F N F0 "U" 0 0 60 H V C CNN F1 "adc_bridge_8" 0 150 60 H V C CNN F2 "" 0 0 60 H V C CNN F3 "" 0 0 60 H V C CNN DRAW S -400 200 350 -700 0 1 0 N X IN1 1 -600 50 200 R 50 50 1 1 I X IN2 2 -600 -50 200 R 50 50 1 1 I X IN3 3 -600 -150 200 R 50 50 1 1 I X IN4 4 -600 -250 200 R 50 50 1 1 I X IN5 5 -600 -350 200 R 50 50 1 1 I X IN6 6 -600 -450 200 R 50 50 1 1 I X IN7 7 -600 -550 200 R 50 50 1 1 I X IN8 8 -600 -650 200 R 50 50 1 1 I X OUT1 9 550 50 200 L 50 50 1 1 O X OUT2 10 550 -50 200 L 50 50 1 1 O X OUT3 11 550 -150 200 L 50 50 1 1 O X OUT4 12 550 -250 200 L 50 50 1 1 O X OUT5 13 550 -350 200 L 50 50 1 1 O X OUT6 14 550 -450 200 L 50 50 1 1 O X OUT7 15 550 -550 200 L 50 50 1 1 O X OUT8 16 550 -650 200 L 50 50 1 1 O ENDDRAW ENDDEF # # dac_bridge_1 # DEF dac_bridge_1 U 0 40 Y Y 1 F N F0 "U" 0 0 60 H V C CNN F1 "dac_bridge_1" 0 150 60 H V C CNN F2 "" 0 0 60 H V C CNN F3 "" 0 0 60 H V C CNN DRAW S -400 200 350 -50 0 1 0 N X IN1 1 -600 50 200 R 50 50 1 1 I X OUT1 2 550 50 200 L 50 50 1 1 O ENDDRAW ENDDEF # # dac_bridge_2 # DEF dac_bridge_2 U 0 40 Y Y 1 F N F0 "U" 0 0 60 H V C CNN F1 "dac_bridge_2" 50 150 60 H V C CNN F2 "" 0 0 60 H V C CNN F3 "" 0 0 60 H V C CNN DRAW S -250 200 350 -100 0 1 0 N X IN1 1 -450 50 200 R 50 50 1 1 I X IN2 2 -450 -50 200 R 50 50 1 1 I X OUT1 3 550 50 200 L 50 50 1 1 O X OUT4 4 550 -50 200 L 50 50 1 1 O ENDDRAW ENDDEF # # dac_bridge_3 # DEF dac_bridge_3 U 0 40 Y Y 1 F N F0 "U" 0 0 60 H V C CNN F1 "dac_bridge_3" 0 150 60 H V C CNN F2 "" 0 0 60 H V C CNN F3 "" 0 0 60 H V C CNN DRAW S -400 200 350 -200 0 1 0 N X IN1 1 -600 50 200 R 50 50 1 1 I X IN2 2 -600 -50 200 R 50 50 1 1 I X IN3 3 -600 -150 200 R 50 50 1 1 I X OUT1 4 550 50 200 L 50 50 1 1 O X OUT2 5 550 -50 200 L 50 50 1 1 O X OUT3 6 550 -150 200 L 50 50 1 1 O ENDDRAW ENDDEF # # dac_bridge_4 # DEF dac_bridge_4 U 0 40 Y Y 1 F N F0 "U" 0 0 60 H V C CNN F1 "dac_bridge_4" 0 300 60 H V C CNN F2 "" 0 0 60 H V C CNN F3 "" 0 0 60 H V C CNN DRAW S -350 350 350 -200 0 1 0 N X IN1 1 -550 200 200 R 50 50 1 1 I X IN2 2 -550 100 200 R 50 50 1 1 I X IN3 3 -550 0 200 R 50 50 1 1 I X IN4 4 -550 -100 200 R 50 50 1 1 I X OUT1 5 550 200 200 L 50 50 1 1 O X OUT2 6 550 100 200 L 50 50 1 1 O X OUT3 7 550 0 200 L 50 50 1 1 O X OUT4 8 550 -100 200 L 50 50 1 1 O ENDDRAW ENDDEF # # dac_bridge_5 # DEF dac_bridge_5 U 0 40 Y Y 1 F N F0 "U" 0 0 60 H V C CNN F1 "dac_bridge_5" 0 150 60 H V C CNN F2 "" 0 0 60 H V C CNN F3 "" 0 0 60 H V C CNN DRAW S -400 200 350 -400 0 1 0 N X IN1 1 -600 50 200 R 50 50 1 1 I X IN2 2 -600 -50 200 R 50 50 1 1 I X IN3 3 -600 -150 200 R 50 50 1 1 I X IN4 4 -600 -250 200 R 50 50 1 1 I X IN5 5 -600 -350 200 R 50 50 1 1 I X OUT1 6 550 50 200 L 50 50 1 1 O X OUT2 7 550 -50 200 L 50 50 1 1 O X OUT3 8 550 -150 200 L 50 50 1 1 O X OUT4 9 550 -250 200 L 50 50 1 1 O X OUT5 10 550 -350 200 L 50 50 1 1 O ENDDRAW ENDDEF # # dac_bridge_6 # DEF dac_bridge_6 U 0 40 Y Y 1 F N F0 "U" 0 0 60 H V C CNN F1 "dac_bridge_6" 0 150 60 H V C CNN F2 "" 0 0 60 H V C CNN F3 "" 0 0 60 H V C CNN DRAW S -400 200 350 -500 0 1 0 N X IN1 1 -600 50 200 R 50 50 1 1 I X IN2 2 -600 -50 200 R 50 50 1 1 I X IN3 3 -600 -150 200 R 50 50 1 1 I X IN4 4 -600 -250 200 R 50 50 1 1 I X IN5 5 -600 -350 200 R 50 50 1 1 I X IN6 6 -600 -450 200 R 50 50 1 1 I X OUT1 7 550 50 200 L 50 50 1 1 O X OUT2 8 550 -50 200 L 50 50 1 1 O X OUT3 9 550 -150 200 L 50 50 1 1 O X OUT4 10 550 -250 200 L 50 50 1 1 O X OUT5 11 550 -350 200 L 50 50 1 1 O X OUT6 12 550 -450 200 L 50 50 1 1 O ENDDRAW ENDDEF # # dac_bridge_7 # DEF dac_bridge_7 U 0 40 Y Y 1 F N F0 "U" 0 0 60 H V C CNN F1 "dac_bridge_7" 0 150 60 H V C CNN F2 "" 0 0 60 H V C CNN F3 "" 0 0 60 H V C CNN DRAW S -400 200 350 -600 0 1 0 N X IN1 1 -600 50 200 R 50 50 1 1 I X IN2 2 -600 -50 200 R 50 50 1 1 I X IN3 3 -600 -150 200 R 50 50 1 1 I X IN4 4 -600 -250 200 R 50 50 1 1 I X IN5 5 -600 -350 200 R 50 50 1 1 I X IN6 6 -600 -450 200 R 50 50 1 1 I X IN7 7 -600 -550 200 R 50 50 1 1 I X OUT1 8 550 50 200 L 50 50 1 1 O X OUT2 9 550 -50 200 L 50 50 1 1 O X OUT3 10 550 -150 200 L 50 50 1 1 O X OUT4 11 550 -250 200 L 50 50 1 1 O X OUT5 12 550 -350 200 L 50 50 1 1 O X OUT6 13 550 -450 200 L 50 50 1 1 O X OUT7 14 550 -550 200 L 50 50 1 1 O ENDDRAW ENDDEF # # dac_bridge_8 # DEF dac_bridge_8 U 0 40 Y Y 1 F N F0 "U" 0 0 60 H V C CNN F1 "dac_bridge_8" 0 150 60 H V C CNN F2 "" 0 0 60 H V C CNN F3 "" 0 0 60 H V C CNN DRAW S -400 200 350 -700 0 1 0 N X IN1 1 -600 50 200 R 50 50 1 1 I X IN2 2 -600 -50 200 R 50 50 1 1 I X IN3 3 -600 -150 200 R 50 50 1 1 I X IN4 4 -600 -250 200 R 50 50 1 1 I X IN5 5 -600 -350 200 R 50 50 1 1 I X IN6 6 -600 -450 200 R 50 50 1 1 I X IN7 7 -600 -550 200 R 50 50 1 1 I X IN8 8 -600 -650 200 R 50 50 1 1 I X OUT1 9 550 50 200 L 50 50 1 1 O X OUT2 10 550 -50 200 L 50 50 1 1 O X OUT3 11 550 -150 200 L 50 50 1 1 O X OUT4 12 550 -250 200 L 50 50 1 1 O X OUT5 13 550 -350 200 L 50 50 1 1 O X OUT6 14 550 -450 200 L 50 50 1 1 O X OUT7 15 550 -550 200 L 50 50 1 1 O X OUT8 16 550 -650 200 L 50 50 1 1 O ENDDRAW ENDDEF # #End Library ================================================ FILE: esim-cloud-backend/kicad-symbols/default/Transistor_BJT.dcm ================================================ EESchema-DOCLIB Version 2.0 # $CMP 2N2219 D 800mA Ic, 50V Vce, NPN Transistor, TO-39 K NPN Transistor F http://www.onsemi.com/pub_link/Collateral/2N2219-D.PDF $ENDCMP # $CMP 2N2646 D Unijunction Transistor, TO-18 K UJT F http://www.bucek.name/pdf/2n2646,2647.pdf $ENDCMP # $CMP 2N2647 D Unijunction Transistor, TO-18 K UJT F http://www.bucek.name/pdf/2n2646,2647.pdf $ENDCMP # $CMP 2N3055 D 15A Ic, 60V Vce, Power NPN Transistor, TO-3 K power NPN Transistor F http://www.onsemi.com/pub_link/Collateral/2N3055-D.PDF $ENDCMP # $CMP 2N3904 D 0.2A Ic, 40V Vce, Small Signal NPN Transistor, TO-92 K NPN Transistor F https://www.fairchildsemi.com/datasheets/2N/2N3904.pdf $ENDCMP # $CMP 2N3905 D -0.2A Ic, -40V Vce, Small Signal PNP Transistor, TO-92 K PNP Transistor F https://www.fairchildsemi.com/datasheets/2N/2N3905.pdf $ENDCMP # $CMP 2N3906 D -0.2A Ic, -40V Vce, Small Signal PNP Transistor, TO-92 K PNP Transistor F https://www.fairchildsemi.com/datasheets/2N/2N3906.pdf $ENDCMP # $CMP 2SA1015 D -0.15A Ic, -50V Vce, Low Noise Audio PNP Transistor, TO-92 K Low Noise Audio PNP Transistor F http://www.datasheetcatalog.org/datasheet/toshiba/905.pdf $ENDCMP # $CMP 2SB631 D -1A Ic, -100V Vce, High Voltage Power PNP Transistor, TO-126 K High Voltage Transistor F http://pdf.datasheetcatalog.com/datasheet/sanyo/ds_pdf_e/2SB631.pdf $ENDCMP # $CMP 2SB817 D -12A Ic, -140V Vce, Silicon Power PNP Transistors, TO-3PB K Power PNP Transistor F http://skory.gylcomp.hu/alkatresz/2SB817.pdf $ENDCMP # $CMP 2SC1815 D 0.15A Ic, 50V Vce, Low Noise Audio NPN Transistor, TO-92 K Low Noise Audio NPN Transistor F https://media.digikey.com/pdf/Data%20Sheets/Toshiba%20PDFs/2SC1815.pdf $ENDCMP # $CMP 2SC1941 D 50mA Ic, 160V Vce, Audio High Voltage NPN Transistor, TO-92 K Audio High Voltage NPN Transistor F http://rtellason.com/transdata/2sc1941.pdf $ENDCMP # $CMP 2SC1945 D 6A Ic, 80V Vce, Silicon 27MHz RF Power NPN Transistors, TO-220 K RF Power NPN Transistor F http://rtellason.com/transdata/2sc1945.pdf $ENDCMP # $CMP 2SC4213 D 0.3A Ic, 20V Vce, NPN Transistor, For Muting and Switching, SOT-323 K NPN Transistor F https://toshiba.semicon-storage.com/info/docget.jsp?did=19305&prodName=2SC4213 $ENDCMP # $CMP 2SD1047 D 12A Ic, 140V Vce, Silicon Power NPN Transistors, TO-3PB K Power NPN Transistor F http://www.st.com/resource/en/datasheet/2sd1047.pdf $ENDCMP # $CMP 2SD600 D 1A Ic, 100V Vce, High Voltage Power NPN Transistor, TO-126 K High Voltage Power Transistor F http://pdf.datasheetcatalog.com/datasheet/sanyo/ds_pdf_e/2SB631.pdf $ENDCMP # $CMP BC107 D 0.1A Ic, 50V Vce, Low Noise General Purpose NPN Transistor, TO-18 K NPN low noise transistor F http://www.b-kainka.de/Daten/Transistor/BC108.pdf $ENDCMP # $CMP BC108 D 0.1A Ic, 30V Vce, Low Noise General Purpose NPN Transistor, TO-18 K NPN low noise transistor F http://www.b-kainka.de/Daten/Transistor/BC108.pdf $ENDCMP # $CMP BC109 D 0.2A Ic, 25V Vce, Low Noise General Purpose NPN Transistor, TO-18 K NPN low noise transistor F http://www.farnell.com/datasheets/296634.pdf $ENDCMP # $CMP BC140 D 1A Ic, 40V Vce, NPN Transistor, TO-39 K NPN Transistor F http://www.farnell.com/datasheets/296634.pdf $ENDCMP # $CMP BC141 D 1A Ic, 60V Vce, NPN Transistor, TO-39 K NPN Transistor F http://www.farnell.com/datasheets/296634.pdf $ENDCMP # $CMP BC160 D 1A Ic, 40V Vce, Power PNP Transistor, TO-39 K power PNP Transistor F http://www.farnell.com/datasheets/1697389.pdf $ENDCMP # $CMP BC161 D 1A Ic, 60V Vce, Power PNP Transistor, TO-39 K power PNP Transistor F http://www.farnell.com/datasheets/1697389.pdf $ENDCMP # $CMP BC237 D 100mA Ic, 50V Vce, Epitaxial Silicon NPN Transistor, TO-92 K Epitaxial Silicon NPN Transistor F http://www.onsemi.com/pub_link/Collateral/BC237-D.PDF $ENDCMP # $CMP BC240 D 50mA Ic, 40V Vce, RF Signal NPN Transistor, TO-92 K RF NPN Transistor F http://www.fairchildsemi.com/ds/BF/BF240.pdf $ENDCMP # $CMP BC307 D 100mA Ic, 45V Vce, Epitaxial Silicon PNP Transistor, TO-92 K Epitaxial Silicon PNP Transistor F http://www.onsemi.com/pub_link/Collateral/BC307-D.PDF $ENDCMP # $CMP BC327 D 0.8A Ic, 45V Vce, PNP Transistor, TO-92 K PNP Transistor F http://www.onsemi.com/pub_link/Collateral/BC327-D.PDF $ENDCMP # $CMP BC328 D 0.8A Ic, 25V Vce, PNP Transistor, TO-92 K PNP Transistor F http://www.redrok.com/PNP_BC327_-45V_-800mA_0.625W_Hfe100_TO-92.pdf $ENDCMP # $CMP BC337 D 0.8A Ic, 45V Vce, NPN Transistor, TO-92 K NPN Transistor F https://diotec.com/tl_files/diotec/files/pdf/datasheets/bc337.pdf $ENDCMP # $CMP BC338 D 0.8A Ic, 25V Vce, NPN Transistor, TO-92 K NPN Transistor F http://diotec.com/tl_files/diotec/files/pdf/datasheets/bc337 $ENDCMP # $CMP BC413 D 0.1A Ic, 30V Vce, Small Signal NPN Transistor, TO-92 K NPN Transistor F http://www.cdil.com/datasheets/bc413_14_b_c.pdf $ENDCMP # $CMP BC413B D 0.1A Ic, 30V Vce, Small Signal NPN Transistor, TO-92 K NPN Transistor F http://www.cdil.com/datasheets/bc413_14_b_c.pdf $ENDCMP # $CMP BC413C D 0.1A Ic, 30V Vce, Small Signal NPN Transistor, TO-92 K NPN Transistor F http://www.cdil.com/datasheets/bc413_14_b_c.pdf $ENDCMP # $CMP BC414 D 0.1A Ic, 45V Vce, Small Signal NPN Transistor, TO-92 K NPN Transistor F http://www.cdil.com/datasheets/bc413_14_b_c.pdf $ENDCMP # $CMP BC414B D 0.1A Ic, 45V Vce, Small Signal NPN Transistor, TO-92 K NPN Transistor F http://www.cdil.com/datasheets/bc413_14_b_c.pdf $ENDCMP # $CMP BC414C D 0.1A Ic, 45V Vce, Small Signal NPN Transistor, TO-92 K NPN Transistor F http://www.cdil.com/datasheets/bc413_14_b_c.pdf $ENDCMP # $CMP BC516 D 1A Ic, 30V Vce, Darlington PNP Transistor, TO-92 K PNP Darlington Darl Transistor F http://www.fairchildsemi.com/ds/BC/BC516.pdf $ENDCMP # $CMP BC517 D 1A Ic, 30V Vce, Darlington NPN Transistor, TO-92 K NPN Darlington Darl Transistor F http://www.fairchildsemi.com/ds/BC/BC517.pdf $ENDCMP # $CMP BC546 D 0.1A Ic, 65V Vce, Small Signal NPN Transistor, TO-92 K NPN Transistor F http://www.fairchildsemi.com/ds/BC/BC547.pdf $ENDCMP # $CMP BC547 D 0.1A Ic, 45V Vce, Small Signal NPN Transistor, TO-92 K NPN Transistor F http://www.fairchildsemi.com/ds/BC/BC547.pdf $ENDCMP # $CMP BC548 D 0.1A Ic, 30V Vce, Small Signal NPN Transistor, TO-92 K NPN Transistor F http://www.fairchildsemi.com/ds/BC/BC547.pdf $ENDCMP # $CMP BC549 D 0.1A Ic, 30V Vce, Small Signal NPN Transistor, TO-92 K NPN Transistor F http://www.fairchildsemi.com/ds/BC/BC547.pdf $ENDCMP # $CMP BC550 D 0.1A Ic, 45V Vce, Small Signal NPN Transistor, TO-92 K NPN Transistor F http://www.fairchildsemi.com/ds/BC/BC547.pdf $ENDCMP # $CMP BC556 D 0.1A Ic, 65V Vce, PNP Small Signal Transistor, TO-92 K PNP Transistor F http://www.fairchildsemi.com/ds/BC/BC557.pdf $ENDCMP # $CMP BC557 D 0.1A Ic, 45V Vce, PNP Small Signal Transistor, TO-92 K PNP Transistor F http://www.fairchildsemi.com/ds/BC/BC557.pdf $ENDCMP # $CMP BC558 D 0.1A Ic, 30V Vce, PNP Small Signal Transistor, TO-92 K PNP Transistor F http://www.fairchildsemi.com/ds/BC/BC557.pdf $ENDCMP # $CMP BC559 D 0.1A Ic, 30V Vce, PNP Small Signal Transistor, TO-92 K PNP Transistor F http://www.fairchildsemi.com/ds/BC/BC557.pdf $ENDCMP # $CMP BC560 D 0.1A Ic, 45V Vce, PNP Small Signal Transistor, TO-92 K PNP Transistor F http://www.fairchildsemi.com/ds/BC/BC557.pdf $ENDCMP # $CMP BC636 D 1A Ic, 45V Vce, PNP Medium Power Transistor, TO-92 K PNP Transistor F http://www.fairchildsemi.com/ds/BC/BC636.pdf $ENDCMP # $CMP BC807 D 0.8A Ic, 45V Vce, PNP Transistor, SOT-23 K PNP Transistor F http://www.fairchildsemi.com/ds/BC/BC807.pdf $ENDCMP # $CMP BC807W D 0.8A Ic, 45V Vce, PNP Transistor, SOT-323 K PNP transistor F http://www.fairchildsemi.com/ds/BC/BC807.pdf $ENDCMP # $CMP BC808 D 0.8A Ic, 25V Vce, PNP Transistor, SOT-23 K PNP Transistor F http://www.fairchildsemi.com/ds/BC/BC807.pdf $ENDCMP # $CMP BC808W D 0.8A Ic, 25V Vce, PNP Transistor, SOT-323 K PNP transistor F http://www.fairchildsemi.com/ds/BC/BC807.pdf $ENDCMP # $CMP BC817 D 0.8A Ic, 45V Vce, NPN Transistor, SOT-23 K NPN Transistor F http://www.fairchildsemi.com/ds/BC/BC817.pdf $ENDCMP # $CMP BC817W D 0.8A Ic, 45V Vce, NPN Transistor, SOT-323 K NPN Transistor F http://www.fairchildsemi.com/ds/BC/BC817.pdf $ENDCMP # $CMP BC818 D 0.8A Ic, 25V Vce, NPN Transistor, SOT-23 K NPN Transistor F https://www.fairchildsemi.com/datasheets/BC/BC818.pdf $ENDCMP # $CMP BC818W D 0.8A Ic, 25V Vce, NPN Transistor, SOT-323 K NPN Transistor F https://www.fairchildsemi.com/datasheets/BC/BC818.pdf $ENDCMP # $CMP BC846 D 0.1A Ic, 65V Vce, NPN Transistor, SOT-23 K NPN Transistor F https://assets.nexperia.com/documents/data-sheet/BC846_SER.pdf $ENDCMP # $CMP BC846BDW1 D 100mA IC, 65V Vce, Dual NPN/NPN Transistors, SOT-363 K NPN/NPN Transistor F http://www.onsemi.com/pub_link/Collateral/BC846BDW1T1-D.PDF $ENDCMP # $CMP BC846BPDW1 D 100mA IC, 65V Vce, Dual NPN/PNP Transistors, SOT-363 K NPN/PNP Transistor F http://www.onsemi.com/pub_link/Collateral/BC846BPDW1T1-D.PDF $ENDCMP # $CMP BC846BPN D 100mA IC, 65V Vce, Dual NPN/PNP Transistors, SOT-363 K NPN/PNP Transistor F https://assets.nexperia.com/documents/data-sheet/BC846BPN.pdf $ENDCMP # $CMP BC846BS D 100mA IC, 65V Vce, Dual NPN/NPN Transistors, SOT-363 K NPN/NPN Transistor F https://assets.nexperia.com/documents/data-sheet/BC846BS.pdf $ENDCMP # $CMP BC847 D 0.1A Ic, 45V Vce, NPN Transistor, SOT-23 K NPN Small Signal Transistor F http://www.infineon.com/dgdl/Infineon-BC847SERIES_BC848SERIES_BC849SERIES_BC850SERIES-DS-v01_01-en.pdf?fileId=db3a304314dca389011541d4630a1657 $ENDCMP # $CMP BC847BDW1 D 100mA IC, 45V Vce, Dual NPN/NPN Transistors, SOT-363 K NPN/NPN Transistor F http://www.onsemi.com/pub_link/Collateral/BC846BDW1T1-D.PDF $ENDCMP # $CMP BC847BPDW1 D 100mA IC, 45V Vce, Dual NPN/PNP Transistors, SOT-363 K NPN/PNP Transistor F http://www.onsemi.com/pub_link/Collateral/BC846BPDW1T1-D.PDF $ENDCMP # $CMP BC847BPN D 100mA IC, 45V Vce, Dual NPN/PNP Transistors, SOT-363 K NPN/PNP Transistor F https://assets.nexperia.com/documents/data-sheet/BC847BPN.pdf $ENDCMP # $CMP BC847BS D 100mA IC, 45V Vce, Dual NPN/NPN Transistors, SOT-363 K NPN/NPN Transistor F https://assets.nexperia.com/documents/data-sheet/BC847BS.pdf $ENDCMP # $CMP BC847W D 0.1A Ic, 45V Vce, NPN Transistor, SOT-323 K NPN Small Signal Transistor F http://www.infineon.com/dgdl/Infineon-BC847SERIES_BC848SERIES_BC849SERIES_BC850SERIES-DS-v01_01-en.pdf?fileId=db3a304314dca389011541d4630a1657 $ENDCMP # $CMP BC848 D 0.1A Ic, 30V Vce, NPN Transistor, SOT-23 K NPN Small Signal Transistor F http://www.infineon.com/dgdl/Infineon-BC847SERIES_BC848SERIES_BC849SERIES_BC850SERIES-DS-v01_01-en.pdf?fileId=db3a304314dca389011541d4630a1657 $ENDCMP # $CMP BC848W D 0.1A Ic, 30V Vce, NPN Transistor, SOT-323 K NPN Small Signal Transistor F http://www.infineon.com/dgdl/Infineon-BC847SERIES_BC848SERIES_BC849SERIES_BC850SERIES-DS-v01_01-en.pdf?fileId=db3a304314dca389011541d4630a1657 $ENDCMP # $CMP BC849 D 0.1A Ic, 30V Vce, NPN Transistor, SOT-23 K NPN Small Signal Transistor F http://www.infineon.com/dgdl/Infineon-BC847SERIES_BC848SERIES_BC849SERIES_BC850SERIES-DS-v01_01-en.pdf?fileId=db3a304314dca389011541d4630a1657 $ENDCMP # $CMP BC849W D 0.1A Ic, 30V Vce, NPN Transistor, SOT-323 K NPN Small Signal Transistor F http://www.infineon.com/dgdl/Infineon-BC847SERIES_BC848SERIES_BC849SERIES_BC850SERIES-DS-v01_01-en.pdf?fileId=db3a304314dca389011541d4630a1657 $ENDCMP # $CMP BC850 D 0.1A Ic, 45V Vce, NPN Transistor, SOT-23 K NPN Small Signal Transistor F http://www.infineon.com/dgdl/Infineon-BC847SERIES_BC848SERIES_BC849SERIES_BC850SERIES-DS-v01_01-en.pdf?fileId=db3a304314dca389011541d4630a1657 $ENDCMP # $CMP BC850W D 0.1A Ic, 45V Vce, NPN Transistor, SOT-323 K NPN Small Signal Transistor F http://www.infineon.com/dgdl/Infineon-BC847SERIES_BC848SERIES_BC849SERIES_BC850SERIES-DS-v01_01-en.pdf?fileId=db3a304314dca389011541d4630a1657 $ENDCMP # $CMP BC856 D 0.1A Ic, 65V Vce, PNP Transistor, SOT-23 K PNP transistor F http://www.fairchildsemi.com/ds/BC/BC856.pdf $ENDCMP # $CMP BC856BDW1 D 100mA IC, 65V Vce, Dual PNP/PNP Transistors, SOT-363 K PNP/PNP Transistor F http://www.onsemi.com/pub_link/Collateral/BC856BDW1T1-D.PDF $ENDCMP # $CMP BC856BS D 100mA IC, 65V Vce, Dual PNP/PNP Transistors, SOT-363 K PNP/PNP Transistor F https://assets.nexperia.com/documents/data-sheet/BC856BS.pdf $ENDCMP # $CMP BC856W D 0.1A Ic, 65V Vce, PNP Transistor, SOT-323 K PNP transistor F http://www.fairchildsemi.com/ds/BC/BC856.pdf $ENDCMP # $CMP BC857 D 0.1A Ic, 45V Vce, PNP Transistor, SOT-23 K PNP transistor F http://www.fairchildsemi.com/ds/BC/BC856.pdf $ENDCMP # $CMP BC857BDW1 D 100mA IC, 45V Vce, Dual PNP/PNP Transistors, SOT-363 K PNP/PNP Transistor F http://www.onsemi.com/pub_link/Collateral/BC856BDW1T1-D.PDF $ENDCMP # $CMP BC857BS D 100mA IC, 45V Vce, Dual PNP/PNP Transistors, SOT-363 K PNP/PNP Transistor F https://assets.nexperia.com/documents/data-sheet/BC857BS.pdf $ENDCMP # $CMP BC857W D 0.1A Ic, 45V Vce, PNP Small Signal Transistor, SOT-323 K PNP Transistor F http://www.infineon.com/dgdl/Infineon-BC857SERIES_BC858SERIES_BC859SERIES_BC860SERIES-DS-v01_01-en.pdf?fileId=db3a304314dca389011541da0e3a1661 $ENDCMP # $CMP BC858 D 0.1A Ic, 30V Vce, PNP Transistor, SOT-23 K PNP transistor F http://www.fairchildsemi.com/ds/BC/BC856.pdf $ENDCMP # $CMP BC858W D 0.1A Ic, 30V Vce, PNP Small Signal Transistor, SOT-323 K PNP Transistor F http://www.infineon.com/dgdl/Infineon-BC857SERIES_BC858SERIES_BC859SERIES_BC860SERIES-DS-v01_01-en.pdf?fileId=db3a304314dca389011541da0e3a1661 $ENDCMP # $CMP BC859 D 0.1A Ic, 30V Vce, PNP Small Signal Transistor, SOT-23 K PNP Transistor F http://www.infineon.com/dgdl/Infineon-BC857SERIES_BC858SERIES_BC859SERIES_BC860SERIES-DS-v01_01-en.pdf?fileId=db3a304314dca389011541da0e3a1661 $ENDCMP # $CMP BC859W D 0.1A Ic, 30V Vce, PNP Small Signal Transistor, SOT-323 K PNP Transistor F http://www.infineon.com/dgdl/Infineon-BC857SERIES_BC858SERIES_BC859SERIES_BC860SERIES-DS-v01_01-en.pdf?fileId=db3a304314dca389011541da0e3a1661 $ENDCMP # $CMP BC860 D 0.1A Ic, 45V Vce, PNP Small Signal Transistor, SOT-23 K PNP Transistor F http://www.infineon.com/dgdl/Infineon-BC857SERIES_BC858SERIES_BC859SERIES_BC860SERIES-DS-v01_01-en.pdf?fileId=db3a304314dca389011541da0e3a1661 $ENDCMP # $CMP BC860W D 0.1A Ic, 45V Vce, PNP Small Signal Transistor, SOT-323 K PNP Transistor F http://www.infineon.com/dgdl/Infineon-BC857SERIES_BC858SERIES_BC859SERIES_BC860SERIES-DS-v01_01-en.pdf?fileId=db3a304314dca389011541da0e3a1661 $ENDCMP # $CMP BCP51 D 1A Ic, 45V Vce, PNP Medium Power Transistor, SOT-223 K PNP Transistor F http://www.fairchildsemi.com/ds/BC/BCP51.pdf $ENDCMP # $CMP BCP53 D 1A Ic, 80V Vce, PNP Medium Power Transistor, SOT-223 K PNP Transistor F http://www.onsemi.com/pub_link/Collateral/BCP53T1-D.PDF $ENDCMP # $CMP BCP56 D 1A Ic, 80V Vce, NPN Medium Power Transistor, SOT-223 K NPN Transistor F http://cache.nxp.com/documents/data_sheet/BCP56_BCX56_BC56PA.pdf?pspll=1 $ENDCMP # $CMP BCV29 D NPN Darlington transistor, 30Vce, 500mA, SOT-89 K transistor NPN Darlington F https://assets.nexperia.com/documents/data-sheet/BCV29_49.pdf $ENDCMP # $CMP BCV49 D NPN Darlington transistor, 60Vce, 500mA, SOT-89 K transistor NPN Darlington F https://assets.nexperia.com/documents/data-sheet/BCV29_49.pdf $ENDCMP # $CMP BCV61 D 100mA IC, 30V Vce, Double NPN Transistors, Current mirror configuration, SOT-143 K Transistor Double NPN F https://assets.nexperia.com/documents/data-sheet/BCV61.pdf $ENDCMP # $CMP BCV62 D 100mA IC, 30V Vce, Double PNP Transistors, Current mirror configuration, SOT-143 K Transistor Double PNP F https://assets.nexperia.com/documents/data-sheet/BCV62.pdf $ENDCMP # $CMP BCX51 D 1A Ic, 45V Vce, PNP Medium Power Transistor, SOT-89 K PNP Transistor F http://www.infineon.com/dgdl/bcx51_bcx52_bcx53.pdf $ENDCMP # $CMP BCX52 D 1A Ic, 60V Vce, PNP Medium Power Transistor, SOT-89 K PNP Transistor F http://www.infineon.com/dgdl/bcx51_bcx52_bcx53.pdf $ENDCMP # $CMP BCX53 D 1A Ic, 80V Vce, PNP Medium Power Transistor, SOT-89 K PNP Transistor F http://www.infineon.com/dgdl/bcx51_bcx52_bcx53.pdf $ENDCMP # $CMP BCX56 D 1A Ic, 80V Vce, NPN Medium Power Transistor, SOT-89 K NPN Transistor F http://cache.nxp.com/documents/data_sheet/BCP56_BCX56_BC56PA.pdf?pspll=1 $ENDCMP # $CMP BD135 D 1.5A Ic, 45V Vce, Low Voltage Transistor, TO-126 K Low Voltage Transistor F http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATASHEET/CD00001225.pdf $ENDCMP # $CMP BD136 D 1.5A Ic, 45V Vce, Low Voltage Transistor, TO-126 K Low Voltage Transistor F http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATASHEET/CD00001225.pdf $ENDCMP # $CMP BD137 D 1.5A Ic, 60V Vce, Low Voltage Transistor, TO-126 K Low Voltage Transistor F http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATASHEET/CD00001225.pdf $ENDCMP # $CMP BD138 D 1.5A Ic, 60V Vce, Low Voltage Transistor, TO-126 K Low Voltage Transistor F http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATASHEET/CD00001225.pdf $ENDCMP # $CMP BD139 D 1.5A Ic, 80V Vce, Low Voltage Transistor, TO-126 K Low Voltage Transistor F http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATASHEET/CD00001225.pdf $ENDCMP # $CMP BD140 D 1.5A Ic, 80V Vce, Low Voltage Transistor, TO-126 K Low Voltage Transistor F http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATASHEET/CD00001225.pdf $ENDCMP # $CMP BD233 D 2A Ic, 45V Vce, Low Voltage Transistor, TO-126 K Low Voltage Transistor F http://www.fairchildsemi.com/ds/BD/BD233.pdf $ENDCMP # $CMP BD234 D 2A Ic, 45V Vce, Low Voltage Transistor, TO-126 K Low Voltage Transistor F http://www.electronica-pt.com/datasheets/bd/BD234.pdf $ENDCMP # $CMP BD235 D 2A Ic, 60V Vce, Low Voltage Transistor, TO-126 K Low Voltage Transistor F http://www.fairchildsemi.com/ds/BD/BD233.pdf $ENDCMP # $CMP BD236 D 60V Vce, 2A, Low Voltage Transistor, TO-126 K Low Voltage Transistor F http://www.electronica-pt.com/datasheets/bd/BD234.pdf $ENDCMP # $CMP BD237 D 2A Ic, 80V Vce, Low Voltage Transistor, TO-126 K Low Voltage Transistor F http://www.fairchildsemi.com/ds/BD/BD233.pdf $ENDCMP # $CMP BD238 D 2A Ic, 80V Vce, Low Voltage Transistor, TO-126 K Low Voltage Transistor F http://www.electronica-pt.com/datasheets/bd/BD234.pdf $ENDCMP # $CMP BD249 D 25A Ic, 55V Vce, Silicon Power NPN Transistors, SOT-93/TO247 K Power NPN Transistor F http://www.mospec.com.tw/pdf/power/BD249.pdf $ENDCMP # $CMP BD249A D 25A Ic, 70V Vce, Silicon Power NPN Transistors, SOT-93/TO247 K Power NPN Transistor F http://www.mospec.com.tw/pdf/power/BD249.pdf $ENDCMP # $CMP BD249B D 25A Ic, 90V Vce, Silicon Power NPN Transistors, SOT-93/TO247 K Power NPN Transistor F http://www.mospec.com.tw/pdf/power/BD249.pdf $ENDCMP # $CMP BD249C D 25A Ic, 115V Vce, Silicon Power NPN Transistors, SOT-93/TO247 K Power NPN Transistor F http://www.mospec.com.tw/pdf/power/BD249.pdf $ENDCMP # $CMP BD250 D 25A Ic, 55V Vce, Silicon Power PNP Transistors, SOT-93/TO247 K Power PNP Transistor F http://www.mospec.com.tw/pdf/power/BD249.pdf $ENDCMP # $CMP BD250A D 25A Ic, 70V Vce, Silicon Power PNP Transistors, SOT-93/TO247 K Power PNP Transistor F http://www.mospec.com.tw/pdf/power/BD249.pdf $ENDCMP # $CMP BD250B D 25A Ic, 90V Vce, Silicon Power PNP Transistors, SOT-93/TO247 K Power PNP Transistor F http://www.mospec.com.tw/pdf/power/BD249.pdf $ENDCMP # $CMP BD250C D 25A Ic, 115V Vce, Silicon Power PNP Transistors, SOT-93/TO247 K Power PNP Transistor F http://www.mospec.com.tw/pdf/power/BD249.pdf $ENDCMP # $CMP BD433 D 4A Ic, 22V Vce, Power NPN Transistor, TO-126 K Power NPN Transistor F http://www.cdil.com/datasheets/bd433_42.pdf $ENDCMP # $CMP BD434 D 4A Ic, 22V Vce, Power PNP Transistor, TO-126 K Power PNP Transistor F http://www.cdil.com/datasheets/bd433_42.pdf $ENDCMP # $CMP BD435 D 4A Ic, 32V Vce, Power NPN Transistor, TO-126 K Power NPN Transistor F http://www.cdil.com/datasheets/bd433_42.pdf $ENDCMP # $CMP BD436 D 4A Ic, 32V Vce, Power PNP Transistor, TO-126 K Power PNP Transistor F http://www.cdil.com/datasheets/bd433_42.pdf $ENDCMP # $CMP BD437 D 4A Ic, 45V Vce, Power NPN Transistor, TO-126 K Power NPN Transistor F http://www.cdil.com/datasheets/bd433_42.pdf $ENDCMP # $CMP BD438 D 4A Ic, 45V Vce, Power PNP Transistor, TO-126 K Power PNP Transistor F http://www.cdil.com/datasheets/bd433_42.pdf $ENDCMP # $CMP BD439 D 4A Ic, 60V Vce, Power NPN Transistor, TO-126 K Power NPN Transistor F http://www.cdil.com/datasheets/bd433_42.pdf $ENDCMP # $CMP BD440 D 4A Ic, 60V Vce, Power PNP Transistor, TO-126 K Power PNP Transistor F http://www.cdil.com/datasheets/bd433_42.pdf $ENDCMP # $CMP BD441 D 4A Ic, 80V Vce, Power NPN Transistor, TO-126 K Power NPN Transistor F http://www.cdil.com/datasheets/bd433_42.pdf $ENDCMP # $CMP BD442 D 4A Ic, 80V Vce, Power PNP Transistor, TO-126 K Power PNP Transistor F http://www.cdil.com/datasheets/bd433_42.pdf $ENDCMP # $CMP BD909 D 15A, Silicon Power NPN Transistors, TO-220 K Power NPN Transistor F http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATASHEET/CD00001277.pdf $ENDCMP # $CMP BD910 D 15A, Silicon Power PNP Transistors, TO-220 K Power PNP Transistor F http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATASHEET/CD00001277.pdf $ENDCMP # $CMP BD911 D 15A, Silicon Power NPN Transistors, TO-220 K Power NPN Transistor F http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATASHEET/CD00001277.pdf $ENDCMP # $CMP BD912 D BD910, 15A, Silicon Power PNP Transistors, TO-220 K Power PNP Transistor F http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATASHEET/CD00001277.pdf $ENDCMP # $CMP BDW93 D 12A Ic, 45V Vce, Power Darlington NPN Transistor, TO-220 K Darlington NPN Transistor F https://www.fairchildsemi.com/datasheets/BD/BDW93C.pdf $ENDCMP # $CMP BDW93A D 12A Ic, 60V Vce, Power Darlington NPN Transistor, TO-220 K Darlington NPN Transistor F https://www.fairchildsemi.com/datasheets/BD/BDW93C.pdf $ENDCMP # $CMP BDW93B D 12A Ic, 80V Vce, Power Darlington NPN Transistor, TO-220 K Darlington NPN Transistor F https://www.fairchildsemi.com/datasheets/BD/BDW93C.pdf $ENDCMP # $CMP BDW93C D 12A Ic, 100V Vce, Power Darlington NPN Transistor, TO-220 K Darlington NPN Transistor F https://www.fairchildsemi.com/datasheets/BD/BDW93C.pdf $ENDCMP # $CMP BDW94 D 12A Ic, 45V Vce, Power Darlington PNP Transistor, TO-220 K Darlington PNP Transistor F http://www.bourns.com/data/global/pdfs/bdw94.pdf $ENDCMP # $CMP BDW94A D 12A Ic, 60V Vce, Power Darlington PNP Transistor, TO-220 K Darlington PNP Transistor F http://www.bourns.com/data/global/pdfs/bdw94.pdf $ENDCMP # $CMP BDW94B D 12A Ic, 80V Vce, Power Darlington PNP Transistor, TO-220 K Darlington PNP Transistor F http://www.bourns.com/data/global/pdfs/bdw94.pdf $ENDCMP # $CMP BDW94C D 12A Ic, 100V Vce, Power Darlington PNP Transistor, TO-220 K Darlington PNP Transistor F http://www.bourns.com/data/global/pdfs/bdw94.pdf $ENDCMP # $CMP BF199 D 50mA Ic, 25V Vce, NPN Radio Frequency Transistor, TO-220 K RF NPN Transistor F http://www.micropik.com/PDF/BF199.pdf $ENDCMP # $CMP BF457 D 0.1A Ic, 160V Vce, High Voltage NPN Transistor, TO-126 K NPN HV High Voltage Transistor F https://www.pcpaudio.com/pcpfiles/transistores/BF457-8-9.pdf $ENDCMP # $CMP BF458 D 0.1A Ic, 250V Vce, High Voltage NPN Transistor, TO-126 K NPN HV High Voltage Transistor F https://www.pcpaudio.com/pcpfiles/transistores/BF457-8-9.pdf $ENDCMP # $CMP BF459 D 0.1A Ic, 300V Vce, High Voltage NPN Transistor, TO-126 K NPN HV High Voltage Transistor F https://www.pcpaudio.com/pcpfiles/transistores/BF457-8-9.pdf $ENDCMP # $CMP BFR92 D 0.025A Ic, 15V Vce, 5GHz Wideband NPN Transistor, SOT-323 K RF 5GHz NPN Transistor F https://assets.nexperia.com/documents/data-sheet/BFR92A_N.pdf $ENDCMP # $CMP BFT92 D 0.025A Ic, 15V Vce, 5GHz Wideband PNP Transistor, SOT-23 K RF 5GHz NPN Transistor F https://assets.nexperia.com/documents/data-sheet/BFT92_CNV.pdf $ENDCMP # $CMP BUT11 D 5A Ic, 400V Vce, Silicon Power NPN Transistors, TO-220 K High Voltage Power NPN Transistor F http://www.fairchildsemi.com/ds/BU/BUT11.pdf $ENDCMP # $CMP BUT11A D 5A Ic, 450V Vce, Silicon Power NPN Transistors, TO-220 K High Voltage Power NPN Transistor F http://www.fairchildsemi.com/ds/BU/BUT11.pdf $ENDCMP # $CMP DTA113T D Digital PNP Transistor, 1k/NONE, SOT-23 K ROHM Digital PNP Transistor $ENDCMP # $CMP DTA113Z D Digital PNP Transistor, 1k/10k, SOT-23 K ROHM Digital PNP Transistor $ENDCMP # $CMP DTA114E D Digital PNP Transistor, 10k/10k, SOT-23 K ROHM Digital PNP Transistor $ENDCMP # $CMP DTA114G D Digital PNP Transistor, 0k/10k, SOT-23 K ROHM Digital PNP Transistor $ENDCMP # $CMP DTA114T D Digital PNP Transistor, 10k/NONE, SOT-23 K ROHM Digital PNP Transistor $ENDCMP # $CMP DTA114W D Digital PNP Transistor, 10k/4.7k, SOT-23 K ROHM Digital PNP Transistor $ENDCMP # $CMP DTA114Y D Digital PNP Transistor, 10k/47k, SOT-23 K ROHM Digital PNP Transistor $ENDCMP # $CMP DTA115E D Digital PNP Transistor, 100k/100k, SOT-23 K ROHM Digital PNP Transistor $ENDCMP # $CMP DTA115G D Digital PNP Transistor, 0k/100k, SOT-23 K ROHM Digital PNP Transistor $ENDCMP # $CMP DTA115T D Digital PNP Transistor, 100k/NONE, SOT-23 K ROHM Digital PNP Transistor $ENDCMP # $CMP DTA115U D Digital PNP Transistor, 100k/10k, SOT-23 K ROHM Digital PNP Transistor $ENDCMP # $CMP DTA123E D Digital PNP Transistor, 2k2/2k2, SOT-23 K ROHM Digital PNP Transistor $ENDCMP # $CMP DTA123J D Digital PNP Transistor, 2k2/47k, SOT-23 K ROHM Digital PNP Transistor $ENDCMP # $CMP DTA123Y D Digital PNP Transistor, 2k2/10k, SOT-23 K ROHM Digital PNP Transistor $ENDCMP # $CMP DTA124E D Digital PNP Transistor, 22k/22k, SOT-23 K ROHM Digital PNP Transistor $ENDCMP # $CMP DTA124G D Digital PNP Transistor, 0k/22k, SOT-23 K ROHM Digital PNP Transistor $ENDCMP # $CMP DTA124T D Digital PNP Transistor, 22k/NONE, SOT-23 K ROHM Digital PNP Transistor $ENDCMP # $CMP DTA124X D Digital PNP Transistor, 22k/47k, SOT-23 K ROHM Digital PNP Transistor $ENDCMP # $CMP DTA125T D Digital PNP Transistor, 200k/NONE, SOT-23 K ROHM Digital PNP Transistor $ENDCMP # $CMP DTA143E D Digital PNP Transistor, 4k7/4k7, SOT-23 K ROHM Digital PNP Transistor $ENDCMP # $CMP DTA143T D Digital PNP Transistor, 4k7/NONE, SOT-23 K ROHM Digital PNP Transistor $ENDCMP # $CMP DTA143X D Digital PNP Transistor, 4k7/10k, SOT-23 K ROHM Digital PNP Transistor $ENDCMP # $CMP DTA143Y D Digital PNP Transistor, 4k7/22k, SOT-23 K ROHM Digital PNP Transistor $ENDCMP # $CMP DTA143Z D Digital PNP Transistor, 4k7/47k, SOT-23 K ROHM Digital PNP Transistor $ENDCMP # $CMP DTA144E D Digital PNP Transistor, 47k/47k, SOT-23 K ROHM Digital PNP Transistor $ENDCMP # $CMP DTA144G D Digital PNP Transistor, 0k/47k, SOT-23 K ROHM Digital PNP Transistor $ENDCMP # $CMP DTA144T D Digital PNP Transistor, 47k/NONE, SOT-23 K ROHM Digital PNP Transistor $ENDCMP # $CMP DTA144V D Digital PNP Transistor, 47k/10k, SOT-23 K ROHM Digital PNP Transistor $ENDCMP # $CMP DTA144W D Digital PNP Transistor, 47k/22k, SOT-23 K ROHM Digital PNP Transistor $ENDCMP # $CMP DTA1D3R D Digital PNP Transistor, 2k7/1k, SOT-23 K ROHM Digital PNP Transistor $ENDCMP # $CMP DTA214Y D Digital PNP Transistor, 10k/47k, SOT-23 K ROHM Digital PNP Transistor $ENDCMP # $CMP DTB113E D Digital PNP Transistor, 1k/1k, SOT-23 K ROHM Digital PNP Transistor $ENDCMP # $CMP DTB113Z D Digital PNP Transistor, 1k/10k, SOT-23 K ROHM Digital PNP Transistor $ENDCMP # $CMP DTB114E D Digital PNP Transistor, 10k/10k, SOT-23 K ROHM Digital PNP Transistor $ENDCMP # $CMP DTB114G D Digital PNP Transistor, 0k/10k, SOT-23 K ROHM Digital PNP Transistor $ENDCMP # $CMP DTB114T D Digital PNP Transistor, 10k/NONE, SOT-23 K ROHM Digital PNP Transistor $ENDCMP # $CMP DTB122J D Digital PNP Transistor, 0k22/4k7, SOT-23 K ROHM Digital PNP Transistor $ENDCMP # $CMP DTB123E D Digital PNP Transistor, 2k2/2k2, SOT-23 K ROHM Digital PNP Transistor $ENDCMP # $CMP DTB123T D Digital PNP Transistor, 2k2/NONE, SOT-23 K ROHM Digital PNP Transistor $ENDCMP # $CMP DTB123Y D Digital PNP Transistor, 2k2/10k, SOT-23 K ROHM Digital PNP Transistor $ENDCMP # $CMP DTB133H D Digital PNP Transistor, 3k3/10k, SOT-23 K ROHM Digital PNP Transistor $ENDCMP # $CMP DTB143T D Digital PNP Transistor, 4k7/NONE, SOT-23 K ROHM Digital PNP Transistor $ENDCMP # $CMP DTB163T D Digital PNP Transistor, 6k8/NONE, SOT-23 K ROHM Digital PNP Transistor $ENDCMP # $CMP DTC113T D Digital NPN Transistor, 1k/NONE, SOT-23 K ROHM Digital NPN Transistor $ENDCMP # $CMP DTC113Z D Digital NPN Transistor, 1k/10k, SOT-23 K ROHM Digital NPN Transistor $ENDCMP # $CMP DTC114E D Digital NPN Transistor, 10k/10k, SOT-23 K ROHM Digital NPN Transistor $ENDCMP # $CMP DTC114G D Digital NPN Transistor, 0k/10k, SOT-23 K ROHM Digital NPN Transistor $ENDCMP # $CMP DTC114T D Digital NPN Transistor, 10k/NONE, SOT-23 K ROHM Digital NPN Transistor $ENDCMP # $CMP DTC114W D Digital NPN Transistor, 10k/4k7, SOT-23 K ROHM Digital NPN Transistor $ENDCMP # $CMP DTC114Y D Digital NPN Transistor, 10k/47k, SOT-23 K ROHM Digital NPN Transistor $ENDCMP # $CMP DTC115E D Digital NPN Transistor, 100k/100k, SOT-23 K ROHM Digital NPN Transistor $ENDCMP # $CMP DTC115G D Digital NPN Transistor, 0k/100k, SOT-23 K ROHM Digital NPN Transistor $ENDCMP # $CMP DTC115T D Digital NPN Transistor, 100k/NONE, SOT-23 K ROHM Digital NPN Transistor $ENDCMP # $CMP DTC115U D Digital NPN Transistor, 100k/10k, SOT-23 K ROHM Digital NPN Transistor $ENDCMP # $CMP DTC123E D Digital NPN Transistor, 2k2/2k2, SOT-23 K ROHM Digital NPN Transistor $ENDCMP # $CMP DTC123J D Digital NPN Transistor, 2k2/47k, SOT-23 K ROHM Digital NPN Transistor $ENDCMP # $CMP DTC123Y D Digital NPN Transistor, 2k2/10k, SOT-23 K ROHM Digital NPN Transistor $ENDCMP # $CMP DTC124E D Digital NPN Transistor, 22k/22k, SOT-23 K ROHM Digital NPN Transistor $ENDCMP # $CMP DTC124G D Digital NPN Transistor, 0k/22k, SOT-23 K ROHM Digital NPN Transistor $ENDCMP # $CMP DTC124T D Digital NPN Transistor, 22k/NONE, SOT-23 K ROHM Digital NPN Transistor $ENDCMP # $CMP DTC124X D Digital NPN Transistor, 22k/47k, SOT-23 K ROHM Digital NPN Transistor $ENDCMP # $CMP DTC125T D Digital NPN Transistor, 200k/NONE, SOT-23 K ROHM Digital NPN Transistor $ENDCMP # $CMP DTC143E D Digital NPN Transistor, 4k7/4k7, SOT-23 K ROHM Digital NPN Transistor $ENDCMP # $CMP DTC143T D Digital NPN Transistor, 4k7/NONE, SOT-23 K ROHM Digital NPN Transistor $ENDCMP # $CMP DTC143X D Digital NPN Transistor, 4k7/10k, SOT-23 K ROHM Digital NPN Transistor $ENDCMP # $CMP DTC143Y D Digital NPN Transistor, 4k7/22k, SOT-23 K ROHM Digital NPN Transistor $ENDCMP # $CMP DTC143Z D Digital NPN Transistor, 4k7/47k, SOT-23 K ROHM Digital NPN Transistor $ENDCMP # $CMP DTC144E D Digital NPN Transistor, 47k/47k, SOT-23 K ROHM Digital NPN Transistor $ENDCMP # $CMP DTC144G D Digital NPN Transistor, 0k/47k, SOT-23 K ROHM Digital NPN Transistor $ENDCMP # $CMP DTC144T D Digital NPN Transistor, 47k/NONE, SOT-23 K ROHM Digital NPN Transistor $ENDCMP # $CMP DTC144V D Digital NPN Transistor, 47k/10k, SOT-23 K ROHM Digital NPN Transistor $ENDCMP # $CMP DTC144W D Digital NPN Transistor, 47k/22k, SOT-23 K ROHM Digital NPN Transistor $ENDCMP # $CMP DTC1D3R D Digital NPN Transistor, 2k7/1k, SOT-23 K ROHM Digital NPN Transistor $ENDCMP # $CMP DTC214Y D Digital NPN Transistor, 10k/47k, SOT-23 K ROHM Digital NPN Transistor $ENDCMP # $CMP DTD113E D Digital NPN Transistor, 1k/1k, SOT-23 K ROHM Digital NPN Transistor $ENDCMP # $CMP DTD113Z D Digital NPN Transistor, 1k/10k, SOT-23 K ROHM Digital NPN Transistor $ENDCMP # $CMP DTD114E D Digital NPN Transistor, 10k/10k, SOT-23 K ROHM Digital NPN Transistor $ENDCMP # $CMP DTD114G D Digital NPN Transistor, 0k/10k, SOT-23 K ROHM Digital NPN Transistor $ENDCMP # $CMP DTD114T D Digital NPN Transistor, 10k/NONE, SOT-23 K ROHM Digital NPN Transistor $ENDCMP # $CMP DTD122J D Digital NPN Transistor, 0k22/4k7, SOT-23 K ROHM Digital NPN Transistor $ENDCMP # $CMP DTD123E D Digital NPN Transistor, 2k2/2k2, SOT-23 K ROHM Digital NPN Transistor $ENDCMP # $CMP DTD123T D Digital NPN Transistor, 2k2/NONE, SOT-23 K ROHM Digital NPN Transistor $ENDCMP # $CMP DTD123Y D Digital NPN Transistor, 2k2/10k, SOT-23 K ROHM Digital NPN Transistor $ENDCMP # $CMP DTD133H D Digital NPN Transistor, 3k3/10k, SOT-23 K ROHM Digital NPN Transistor $ENDCMP # $CMP DTD143T D Digital NPN Transistor, 4k7/NONE, SOT-23 K ROHM Digital NPN Transistor $ENDCMP # $CMP DTD163T D Digital NPN Transistor, 6k8/NONE, SOT-23 K ROHM Digital NPN Transistor $ENDCMP # $CMP FFB2222A D 600mA IC, 40V Vce, Dual NPN/NPN Transistors, SOT-363 K NPN/NPN Transistor F https://www.fairchildsemi.com/datasheets/FF/FFB2222A.pdf $ENDCMP # $CMP FFB2227A D 500mA IC, 30V Vce, Dual NPN/PNP Transistors, SC-70-6 K NPN/PNP Transistor F http://www.onsemi.com/pub/Collateral/FMB2227A-D.PDF $ENDCMP # $CMP FFB3904 D 200mA IC, 40V Vce, Dual NPN/NPN Transistors, SOT-363 K NPN/NPN Transistor F https://www.fairchildsemi.com/datasheets/FF/FFB3904.pdf $ENDCMP # $CMP FFB3906 D 200mA IC, 40V Vce, Dual PNP/PNP Transistors, SOT-363 K PNP/PNP Transistor F https://www.fairchildsemi.com/datasheets/FF/FFB3906.pdf $ENDCMP # $CMP FFB3946 D 200mA IC, 40V Vce, Dual NPN/PNP Transistors, SOT-363 K NPN/PNP Transistor F http://www.onsemi.com/pub/Collateral/FMB3946-D.pdf $ENDCMP # $CMP FFB5551 D 200mA IC, 160V Vce, Dual NPN/NPN Transistors, SOT-363 K NPN/NPN Transistor F https://www.fairchildsemi.com/datasheets/FF/FFB5551.pdf $ENDCMP # $CMP FMB2227A D 500mA IC, 30V Vce, Dual NPN/PNP Transistors, SuperSOT-6 K NPN/PNP Transistor F http://www.onsemi.com/pub/Collateral/FMB2227A-D.PDF $ENDCMP # $CMP FMB3946 D 200mA IC, 40V Vce, Dual NPN/PNP Transistors, SuperSOT-6 K NPN/PNP Transistor F http://www.onsemi.com/pub/Collateral/FMB3946-D.pdf $ENDCMP # $CMP KTD1624 D Epitaxial Planar NPN Transistor, SOT-89 K Switching NPN Transistor F http://www2.kec.co.kr/data/databook/pdf/KTD/Eng/KTD1624.pdf $ENDCMP # $CMP MAT02 D 20mA Ic, 40V Vce, Precision Dual Monolithic Low Noise, Low Offset Transistor, TO-78 K Precision Dual Monolithic Transistor Low Noise EOL F http://www.elenota.pl/datasheet_download/93431/MAT02 $ENDCMP # $CMP MBT2222ADW1T1 D 600mA IC, 40V Vce, Dual NPN/NPN Transistors, SOT-363 K NPN/NPN Transistor F http://www.onsemi.com/pub_link/Collateral/MBT2222ADW1T1-D.PDF $ENDCMP # $CMP MBT3904DW1 D 200mA IC, 40V Vce, Dual NPN/NPN Transistors, SOT-363 K NPN/NPN Transistor F http://www.onsemi.com/pub_link/Collateral/MBT3904DW1T1-D.PDF $ENDCMP # $CMP MBT3906DW1 D 200mA IC, 40V Vce, Dual PNP/PNP Transistors, SOT-363 K PNP/PNP Transistor F http://www.onsemi.com/pub_link/Collateral/MBT3906DW1T1-D.PDF $ENDCMP # $CMP MBT3946DW1T1 D 200mA IC, 40V Vce, Dual NPN/PNP Transistors, SOT-363 K NPN/PNP Transistor F http://www.onsemi.com/pub_link/Collateral/MBT3946DW1T1-D.PDF $ENDCMP # $CMP MJ2955 D -15A Ic, -60V Vce, Power PNP Transistor, TO-3 K power PNP Transistor F http://www.onsemi.com/pub_link/Collateral/2N3055-D.PDF $ENDCMP # $CMP MJE13003 D 1.5A Ic, 400V Vce, Silicon Switching Power NPN Transistor, TO-225 K Switching Power High Voltage NPN Transistor F http://www.onsemi.com/pub_link/Collateral/MJE13003-D.PDF $ENDCMP # $CMP MJE13005G D 4A Ic, 400V Vce, Silicon Switching Power NPN Transistors, TO-220 K Switching Power NPN Transistor F http://www.onsemi.com/pub_link/Collateral/MJE13005-D.PDF $ENDCMP # $CMP MJE13007G D 8A Ic, 400V Vce, Silicon Switching Power NPN Transistors, TO-220 K Switching Power NPN Transistor F http://www.onsemi.com/pub_link/Collateral/MJE13007-D.PDF $ENDCMP # $CMP MJE13009G D 12A Ic, 400V Vce, Silicon Switching Power NPN Transistors, TO-220 K Switching Power NPN Transistor F http://www.onsemi.com/pub_link/Collateral/MJE13009-D.PDF $ENDCMP # $CMP MMBT3904 D 0.2A Ic, 40V Vce, Small Signal NPN Transistor, SOT-23 K NPN Transistor F https://www.fairchildsemi.com/datasheets/2N/2N3904.pdf $ENDCMP # $CMP MMBT3906 D -0.2A Ic, -40V Vce, Small Signal PNP Transistor, SOT-23 K PNP Transistor F https://www.fairchildsemi.com/datasheets/2N/2N3906.pdf $ENDCMP # $CMP MMBT5550L D 0.6A Ic, 140V Vce, NPN Transistor, SOT-23 K NPN Transistor F www.onsemi.com/pub/Collateral/MMBT5550LT1-D.PDF $ENDCMP # $CMP MMBT5551L D 0.6A Ic, 160V Vce, NPN Transistor, SOT-23 K NPN Transistor F www.onsemi.com/pub/Collateral/MMBT5550LT1-D.PDF $ENDCMP # $CMP MMBTA42 D 0.5A Ic, 300V Vce, NPN High Voltage Transistor, SOT-23 K NPN High Voltage Transistor F https://www.onsemi.com/pub/Collateral/MMBTA42LT1-D.PDF $ENDCMP # $CMP MMBTA92 D 0.5A Ic, 300V Vce, PNP High Voltage Transistor, SOT-23 K PNP High Voltage Transistor F https://www.onsemi.com/pub/Collateral/MMBTA92LT1-D.PDF $ENDCMP # $CMP MMDT2222A D 600mA IC, 40V Vce, Dual NPN/NPN Transistors, SOT-363 K NPN/NPN Transistor F http://www.diodes.com/_files/datasheets/ds30125.pdf $ENDCMP # $CMP MMDT3904 D 200mA IC, 40V Vce, Dual NPN/NPN Transistors, SOT-363 K NPN/NPN Transistor F http://www.diodes.com/_files/datasheets/ds30088.pdf $ENDCMP # $CMP MMDT3906 D 200mA IC, 40V Vce, Dual PNP/PNP Transistors, SOT-363 K PNP/PNP Transistor F http://www.diodes.com/_files/datasheets/ds30124.pdf $ENDCMP # $CMP MMDT3946 D 200mA IC, 40V Vce, Dual NPN/PNP Transistors, SOT-363 K NPN/PNP Transistor F http://www.diodes.com/_files/datasheets/ds30123.pdf $ENDCMP # $CMP MMDT5401 D 200mA IC, 160V Vce, Dual PNP/PNP Transistors, SOT-363 K PNP/PNP Transistor F http://www.diodes.com/_files/datasheets/ds30169.pdf $ENDCMP # $CMP MMDT5551 D 200mA IC, 160V Vce, Dual NPN/NPN Transistors, SOT-363 K NPN/NPN Transistor F http://www.diodes.com/_files/datasheets/ds30172.pdf $ENDCMP # $CMP MPSA42 D 0.5A Ic, 300V Vce, NPN High Voltage Transistor, TO-92 K NPN High Voltage Transistor F http://www.onsemi.com/pub_link/Collateral/MPSA42-D.PDF $ENDCMP # $CMP MPSA92 D 0.5A Ic, 300V Vce, PNP High Voltage Transistor, TO-92 K PNP High Voltage Transistor F http://www.onsemi.com/pub_link/Collateral/MPSA92-D.PDF $ENDCMP # $CMP MUN5211DW1 D 0.1A Ic, 50V Vce, Dual NPN Bias Resistor Transistors, SOT-363 K Dual NPN Transistor F http://www.onsemi.com/pub/Collateral/DTC114ED-D.PDF $ENDCMP # $CMP PBSS301PZ D -5.7A Ic, -12V Vce, Small Signal PNP Transistor, SOT-223 K PNP Transistor F https://assets.nexperia.com/documents/data-sheet/PBSS301PZ.pdf $ENDCMP # $CMP PMBT2222AYS D 600mA IC, 40V Vce, Dual NPN/NPN Transistors, SOT-363 K NPN/NPN Transistor F https://assets.nexperia.com/documents/data-sheet/PMBT2222AYS.pdf $ENDCMP # $CMP PMBT3904YS D 200mA IC, 40V Vce, Dual NPN/NPN Transistors, SOT-363 K NPN/NPN Transistor F https://assets.nexperia.com/documents/data-sheet/PMBT3904YS.pdf $ENDCMP # $CMP PMBT3906YS D 200mA IC, 40V Vce, Dual PNP/PNP Transistors, SOT-363 K PNP/PNP Transistor F https://assets.nexperia.com/documents/data-sheet/PMBT3906YS.pdf $ENDCMP # $CMP PMBT3946YPN D 200mA IC, 40V Vce, Dual NPN/PNP Transistors, SOT-363 K NPN/PNP Transistor F https://assets.nexperia.com/documents/data-sheet/PMBT3946YPN.pdf $ENDCMP # $CMP PN2222A D 1A Ic, 40V Vce, NPN Transistor, General Purpose Transistor, TO-92 K NPN Transistor F http://www.fairchildsemi.com/ds/PN/PN2222A.pdf $ENDCMP # $CMP PUMT1 D 100mA IC, 40V Vce, Dual PNP/PNP Transistors, SOT-363 K PNP/PNP Transistor F https://assets.nexperia.com/documents/data-sheet/PUMT1.pdf $ENDCMP # $CMP PUMX1 D 100mA IC, 40V Vce, Dual NPN/NPN Transistors, SOT-363 K NPN/NPN Transistor F https://assets.nexperia.com/documents/data-sheet/PUMX1.pdf $ENDCMP # $CMP PZT2222A D 1A Ic, 40V Vce, NPN Transistor, General Purpose Transistor, SOT-223 K NPN General Puprose Transistor SMD F http://www.fairchildsemi.com/ds/PN/PN2222A.pdf $ENDCMP # $CMP PZT3904 D 0.2A Ic, 40V Vce, Small Signal NPN Transistor, SOT-223 K NPN Transistor F https://www.fairchildsemi.com/datasheets/2N/2N3904.pdf $ENDCMP # $CMP PZT3906 D -0.2A Ic, -40V Vce, Small Signal PNP Transistor, SOT-223 K PNP Transistor F https://www.fairchildsemi.com/datasheets/2N/2N3906.pdf $ENDCMP # $CMP PZTA42 D 0.5A Ic, 300V Vce, NPN High Voltage Transistor, SOT-223 K NPN High Voltage Transistor SMD F https://www.onsemi.com/pub/Collateral/PZTA42T1-D.PDF $ENDCMP # $CMP PZTA92 D 0.5A Ic, 300V Vce, PNP High Voltage Transistor, SOT-223 K PNP High Voltage Transistor F https://www.onsemi.com/pub/Collateral/PZTA92T1-D.PDF $ENDCMP # $CMP S8050 D 0.7A Ic, 20V Vce, Low Voltage High Current NPN Transistor, TO-92 K S8050 NPN Low Voltage High Current Transistor F http://www.unisonic.com.tw/datasheet/S8050.pdf $ENDCMP # $CMP S8550 D 0.7A Ic, 20V Vce, Low Voltage High Current PNP Transistor, TO-92 K S8550 PNP Low Voltage High Current Transistor F http://www.unisonic.com.tw/datasheet/S8550.pdf $ENDCMP # $CMP SSM2210 D Audio Dual Matched NPN transistor, DIP-8/SOIC-8 K audio npn dual F https://www.analog.com/media/en/technical-documentation/obsolete-data-sheets/SSM2210.pdf $ENDCMP # $CMP SSM2220 D Audio Dual Matched PNP transistor, DIP-8/SOIC-8 K audio pnp dual F https://www.analog.com/media/en/technical-documentation/data-sheets/SSM2220.pdf $ENDCMP # $CMP TIP120 D 5A Ic, 60V Vce, Silicon Darlington Power NPN Transistor, TO-220 K Darlington Power NPN Transistor F http://www.fairchildsemi.com/ds/TI/TIP120.pdf $ENDCMP # $CMP TIP121 D 5A Ic, 80V Vce, Silicon Darlington Power NPN Transistor, TO-220 K Darlington Power NPN Transistor F http://www.fairchildsemi.com/ds/TI/TIP120.pdf $ENDCMP # $CMP TIP122 D 5A Ic, 100V Vce, Silicon Darlington Power NPN Transistor, TO-220 K Darlington Power NPN Transistor F http://www.fairchildsemi.com/ds/TI/TIP120.pdf $ENDCMP # $CMP TIP125 D 5A Ic, 60V Vce, Silicon Darlington Power PNP Transistor, TO-220 K Darlington Power PNP Transistor F http://www.fairchildsemi.com/ds/TI/TIP125.pdf $ENDCMP # $CMP TIP126 D 5A Ic, 80V Vce, Silicon Darlington Power PNP Transistor, TO-220 K Darlington Power PNP Transistor F http://www.fairchildsemi.com/ds/TI/TIP125.pdf $ENDCMP # $CMP TIP127 D 5A Ic, 100V Vce, Silicon Darlington Power PNP Transistor, TO-220 K Darlington Power PNP Transistor F http://www.fairchildsemi.com/ds/TI/TIP125.pdf $ENDCMP # $CMP TIP2955 D -15A Ic, -60V Vce, Power PNP Transistor, TO-218 K power PNP Transistor F http://www.onsemi.com/pub_link/Collateral/TIP3055-D.PDF $ENDCMP # $CMP TIP2955G D -15A Ic, -60V Vce, Power PNP Transistor, TO-247 K power PNP Transistor F http://www.onsemi.com/pub_link/Collateral/TIP3055-D.PDF $ENDCMP # $CMP TIP3055 D 15A Ic, 60V Vce, Power NPN Transistor, TO-218 K power NPN Transistor F http://www.onsemi.com/pub_link/Collateral/TIP3055-D.PDF $ENDCMP # $CMP TIP3055G D 15A Ic, 60V Vce, Power NPN Transistor, TO-247 K power NPN Transistor F http://www.onsemi.com/pub_link/Collateral/TIP3055-D.PDF $ENDCMP # $CMP TIP41 D 6A Ic, 40V Vce, Power NPN Transistor, TO-220 K power NPN Transistor F https://www.centralsemi.com/get_document.php?cmp=1&mergetype=pd&mergepath=pd&pdf_id=tip41.PDF $ENDCMP # $CMP TIP41A D 6A Ic, 60V Vce, Power NPN Transistor, TO-220 K power NPN Transistor F https://www.centralsemi.com/get_document.php?cmp=1&mergetype=pd&mergepath=pd&pdf_id=tip41.PDF $ENDCMP # $CMP TIP41B D 6A Ic, 80V Vce, Power NPN Transistor, TO-220 K power NPN Transistor F https://www.centralsemi.com/get_document.php?cmp=1&mergetype=pd&mergepath=pd&pdf_id=tip41.PDF $ENDCMP # $CMP TIP41C D 6A Ic, 100V Vce, Power NPN Transistor, TO-220 K power NPN Transistor F https://www.centralsemi.com/get_document.php?cmp=1&mergetype=pd&mergepath=pd&pdf_id=tip41.PDF $ENDCMP # $CMP TIP42 D -6A Ic, -40V Vce, Power PNP Transistor, TO-220 K power PNP Transistor F https://www.centralsemi.com/get_document.php?cmp=1&mergetype=pd&mergepath=pd&pdf_id=TIP42.PDF $ENDCMP # $CMP TIP42A D -6A Ic, -60V Vce, Power PNP Transistor, TO-220 K power PNP Transistor F https://www.centralsemi.com/get_document.php?cmp=1&mergetype=pd&mergepath=pd&pdf_id=TIP42.PDF $ENDCMP # $CMP TIP42B D -6A Ic, -80V Vce, Power PNP Transistor, TO-220 K power PNP Transistor F https://www.centralsemi.com/get_document.php?cmp=1&mergetype=pd&mergepath=pd&pdf_id=TIP42.PDF $ENDCMP # $CMP TIP42C D -6A Ic, -100V Vce, Power PNP Transistor, TO-220 K power PNP Transistor F https://www.centralsemi.com/get_document.php?cmp=1&mergetype=pd&mergepath=pd&pdf_id=TIP42.PDF $ENDCMP # #End Doc Library ================================================ FILE: esim-cloud-backend/kicad-symbols/default/Transistor_BJT.lib ================================================ EESchema-LIBRARY Version 2.4 #encoding utf-8 # # 2N2219 # DEF 2N2219 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "2N2219" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-39-3" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS BC140 BC141 $FPLIST TO?39* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X E 1 100 -200 100 U 50 50 1 1 P X B 2 -200 0 225 R 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # 2N2646 # DEF 2N2646 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "2N2646" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-18-3" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS 2N2647 $FPLIST TO?18* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 3 0 1 0 -100 0 -40 0 20 -60 N P 3 0 1 10 20 75 20 -75 20 -75 N P 3 0 1 0 100 -100 100 -50 20 -50 N P 3 0 1 0 100 100 100 55 20 55 N P 4 0 1 0 0 -40 -15 5 -45 -25 0 -40 F X B2 1 100 200 100 D 50 50 1 1 P X E 2 -200 0 100 R 50 50 1 1 I X B1 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # 2N3055 # DEF 2N3055 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "2N3055" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-3" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST TO?3* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X B 1 -200 0 225 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # 2N3904 # DEF 2N3904 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "2N3904" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-92_Inline" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST TO?92* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X E 1 100 -200 100 U 50 50 1 1 P X B 2 -200 0 225 R 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # 2N3906 # DEF 2N3906 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "2N3906" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-92_Inline" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS 2N3905 $FPLIST TO?92* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 90 -70 70 -90 50 -50 90 -70 90 -70 F X E 1 100 -200 100 U 50 50 1 1 P X B 2 -200 0 225 R 50 50 1 1 I X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # 2SA1015 # DEF 2SA1015 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "2SA1015" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-92_Inline" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST TO?92* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 0 0 25 0 N P 2 0 1 0 100 -100 25 -25 N P 2 0 1 0 100 100 25 25 N P 3 0 1 20 25 75 25 -75 25 -75 F P 5 0 1 0 70 -90 90 -70 50 -50 70 -90 70 -90 F X E 1 100 -200 100 U 50 50 1 1 P X C 2 100 200 100 D 50 50 1 1 P X B 3 -200 0 200 R 50 50 1 1 I ENDDRAW ENDDEF # # 2SB631 # DEF 2SB631 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "2SB631" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-126-3_Vertical" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST TO?126* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 0 0 25 0 N P 2 0 1 0 100 -100 25 -25 N P 2 0 1 0 100 100 25 25 N P 3 0 1 20 25 75 25 -75 25 -75 F P 5 0 1 0 70 -90 90 -70 50 -50 70 -90 70 -90 F X E 1 100 -200 100 U 50 50 1 1 P X C 2 100 200 100 D 50 50 1 1 P X B 3 -200 0 200 R 50 50 1 1 I ENDDRAW ENDDEF # # 2SB817 # DEF 2SB817 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "2SB817" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-3PB-3_Vertical" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST TO?3PB* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 0 0 25 0 N P 2 0 1 0 100 100 25 25 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 70 -90 90 -70 50 -50 70 -90 70 -90 F X B 1 -200 0 200 R 50 50 1 1 I X C 2 100 200 100 D 50 50 1 1 P X E 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # 2SC1815 # DEF 2SC1815 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "2SC1815" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-92_Inline" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST TO?92* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 0 0 20 0 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X E 1 100 -200 100 U 50 50 1 1 P X C 2 100 200 100 D 50 50 1 1 P X B 3 -200 0 200 R 50 50 1 1 I ENDDRAW ENDDEF # # 2SC1941 # DEF 2SC1941 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "2SC1941" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-92_Inline" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST TO?92* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 0 0 25 0 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X E 1 100 -200 100 U 50 50 1 1 P X C 2 100 200 100 D 50 50 1 1 P X B 3 -200 0 200 R 50 50 1 1 I ENDDRAW ENDDEF # # 2SC1945 # DEF 2SC1945 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "2SC1945" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-220-3_Vertical" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST TO?220* $ENDFPLIST DRAW C 50 0 111 0 1 12 N P 2 0 1 0 0 0 25 0 N P 2 0 1 0 100 100 25 25 N P 3 0 1 20 25 75 25 -75 25 -75 N P 3 0 1 0 90 -90 70 -70 70 -70 N P 3 0 1 0 100 -100 25 -25 50 -50 F P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X B 1 -200 0 200 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # 2SD1047 # DEF 2SD1047 Q 0 0 Y N 1 F N F0 "Q" 250 75 50 H V L CNN F1 "2SD1047" 250 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-3PB-3_Vertical" 250 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST TO?3PB* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 0 0 30 0 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X B 1 -200 0 200 R 50 50 1 1 I X C 2 100 200 100 D 50 50 1 1 P X E 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # 2SD600 # DEF 2SD600 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "2SD600" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-126-3_Vertical" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST TO?126* $ENDFPLIST DRAW C 50 0 111 0 1 12 N P 2 0 1 0 0 0 25 0 N P 2 0 1 0 100 -100 25 -25 N P 2 0 1 0 100 100 25 25 N P 3 0 1 20 25 75 25 -75 25 -75 F P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X E 1 100 -200 100 U 50 50 1 1 P X C 2 100 200 100 D 50 50 1 1 P X B 3 -200 0 200 R 50 50 1 1 I ENDDRAW ENDDEF # # BC107 # DEF BC107 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BC107" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-18-3" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS BC108 BC109 $FPLIST TO?18* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X E 1 100 -200 100 U 50 50 1 1 P X B 2 -200 0 225 R 50 50 1 1 I X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # BC160 # DEF BC160 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BC160" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-39-3" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS BC161 $FPLIST TO?39* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 90 -70 70 -90 50 -50 90 -70 90 -70 F X E 1 100 -200 100 U 50 50 1 1 P X B 2 -200 0 225 R 50 50 1 1 I X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # BC237 # DEF BC237 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BC237" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-92_Inline" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST TO?92* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 0 0 25 0 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X C 1 100 200 100 D 50 50 1 1 P X B 2 -200 0 200 R 50 50 1 1 I X E 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # BC240 # DEF BC240 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BC240" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-92_Inline" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST TO?92* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 0 0 25 0 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X C 1 100 200 100 D 50 50 1 1 P X E 2 100 -200 100 U 50 50 1 1 P X B 3 -200 0 200 R 50 50 1 1 I ENDDRAW ENDDEF # # BC307 # DEF BC307 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BC307" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-92_Inline" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST TO?92* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 0 0 25 0 N P 2 0 1 0 100 -100 25 -25 N P 2 0 1 0 100 100 25 25 N P 3 0 1 20 25 75 25 -75 25 -75 F P 5 0 1 0 55 -75 75 -55 35 -35 55 -75 55 -75 F X C 1 100 200 100 D 50 50 1 1 P X B 2 -200 0 200 R 50 50 1 1 I X E 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # BC413 # DEF BC413 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BC413" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-92_Inline" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS BC413B BC413C BC414 BC414B BC414C $FPLIST TO?92* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 0 0 25 0 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X C 1 100 200 100 D 50 50 1 1 P X B 2 -200 0 200 R 50 50 1 1 I X E 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # BC516 # DEF BC516 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BC516" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-92_Inline" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST TO?92* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 0 25 0 100 75 100 100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 90 -70 70 -90 50 -50 90 -70 90 -70 F X C 1 100 200 100 D 50 50 1 1 P X B 2 -200 0 225 R 50 50 1 1 I X E 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # BC517 # DEF BC517 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BC517" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-92_Inline" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST TO?92* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 0 25 0 100 75 100 100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X C 1 100 200 100 D 50 50 1 1 P X B 2 -200 0 225 R 50 50 1 1 I X E 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # BC547 # DEF BC547 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BC547" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-92_Inline" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS BC546 BC548 BC549 BC550 BC337 BC338 $FPLIST TO?92* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 0 0 25 0 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X C 1 100 200 100 D 50 50 1 1 P X B 2 -200 0 200 R 50 50 1 1 I X E 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # BC557 # DEF BC557 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BC557" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-92_Inline" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS BC556 BC558 BC559 BC560 BC327 BC328 $FPLIST TO?92* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 90 -70 70 -90 50 -50 90 -70 90 -70 F X C 1 100 200 100 D 50 50 1 1 P X B 2 -200 0 225 R 50 50 1 1 I X E 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # BC636 # DEF BC636 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BC636" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-92_Inline" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST TO?92* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 0 0 25 0 N P 2 0 1 0 100 -100 25 -25 N P 2 0 1 0 100 100 25 25 N P 3 0 1 20 25 75 25 -75 25 -75 F P 5 0 1 0 55 -75 75 -55 35 -35 55 -75 55 -75 F X E 1 100 -200 100 U 50 50 1 1 P X C 2 100 200 100 D 50 50 1 1 P X B 3 -200 0 200 R 50 50 1 1 I ENDDRAW ENDDEF # # BC807 # DEF BC807 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BC807" 200 0 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-23" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS BC808 BC856 BC857 BC858 BC859 BC860 MMBT3906 $FPLIST SOT?23* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 90 -70 70 -90 50 -50 90 -70 90 -70 F X B 1 -200 0 225 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # BC807W # DEF BC807W Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BC807W" 200 0 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-323_SC-70" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS BC808W BC856W BC857W BC858W BC859W BC860W $FPLIST SOT?323* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 90 -70 70 -90 50 -50 90 -70 90 -70 F X B 1 -200 0 225 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # BC817 # DEF BC817 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BC817" 200 0 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-23" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS BC818 BC846 BC847 BC848 BC849 BC850 MMBT3904 MMBT5550L MMBT5551L $FPLIST SOT?23* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X B 1 -200 0 225 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # BC817W # DEF BC817W Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BC817W" 200 0 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-323_SC-70" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS BC818W BC847W BC848W BC849W BC850W 2SC4213 $FPLIST SOT?323* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X B 1 -200 0 225 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # BC846BPN # DEF BC846BPN Q 0 0 Y N 2 L N F0 "Q" 200 50 50 H V L CNN F1 "BC846BPN" 200 -50 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-363_SC-70-6" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS BC846BPDW1 BC847BPN BC847BPDW1 PMBT3946YPN MMDT3946 MBT3946DW1T1 FFB3946 FFB2227A $FPLIST SOT?363* $ENDFPLIST DRAW C 50 0 111 0 1 10 N C 50 0 111 0 1 10 N P 2 0 1 0 25 0 -100 0 N P 2 1 1 0 25 25 100 100 N P 3 1 1 0 25 -25 100 -100 100 -100 N P 3 1 1 20 25 75 25 -75 25 -75 N P 5 1 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F P 2 2 1 0 25 25 100 100 N P 3 2 1 0 25 -25 100 -100 100 -100 N P 3 2 1 20 25 75 25 -75 25 -75 N P 5 2 1 0 90 -70 70 -90 50 -50 90 -70 90 -70 F X E1 1 100 -200 100 U 50 50 1 1 P X B1 2 -200 0 100 R 50 50 1 1 I X C1 6 100 200 100 D 50 50 1 1 P X C2 3 100 200 100 D 50 50 2 1 P X E2 4 100 -200 100 U 50 50 2 1 P X B2 5 -200 0 100 R 50 50 2 1 I ENDDRAW ENDDEF # # BC846BS # DEF BC846BS Q 0 0 Y N 2 L N F0 "Q" 200 50 50 H V L CNN F1 "BC846BS" 200 -50 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-363_SC-70-6" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS BC846BDW1 BC847BS BC847BDW1 PMBT2222AYS MMDT2222A MBT2222ADW1T1 FFB2222A PMBT3904YS MMDT3904 MBT3904DW1 FFB3904 MMDT5551 FFB5551 PUMX1 $FPLIST SOT?363* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 0 -100 0 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X E1 1 100 -200 100 U 50 50 1 1 P X B1 2 -200 0 100 R 50 50 1 1 I X C1 6 100 200 100 D 50 50 1 1 P X C2 3 100 200 100 D 50 50 2 1 P X E2 4 100 -200 100 U 50 50 2 1 P X B2 5 -200 0 100 R 50 50 2 1 I ENDDRAW ENDDEF # # BC856BS # DEF BC856BS Q 0 0 Y N 2 L N F0 "Q" 200 50 50 H V L CNN F1 "BC856BS" 200 -50 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-363_SC-70-6" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS BC856BDW1 BC857BS BC857BDW1 PMBT3906YS MMDT3906 MBT3906DW1 FFB3906 MMDT5401 PUMT1 $FPLIST SOT?363* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 0 -100 0 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 90 -70 70 -90 50 -50 90 -70 90 -70 F X E1 1 100 -200 100 U 50 50 1 1 P X B1 2 -200 0 100 R 50 50 1 1 I X C1 6 100 200 100 D 50 50 1 1 P X C2 3 100 200 100 D 50 50 2 1 P X E2 4 100 -200 100 U 50 50 2 1 P X B2 5 -200 0 100 R 50 50 2 1 I ENDDRAW ENDDEF # # BCP51 # DEF BCP51 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BCP51" 200 0 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-223-3_TabPin2" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST SOT?223* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 0 0 25 0 N P 2 0 1 0 100 -100 25 -25 N P 2 0 1 0 100 100 25 25 N P 3 0 1 20 25 75 25 -75 25 -75 F P 5 0 1 0 55 -75 75 -55 35 -35 55 -75 55 -75 F X B 1 -200 0 200 R 50 50 1 1 I X C 2 100 200 100 D 50 50 1 1 P X E 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # BCV29 # DEF BCV29 Q 0 0 Y N 1 F N F0 "Q" 180 50 50 H V L CNN F1 "BCV29" 180 -50 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-89-3" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS BCV49 $FPLIST SOT?89* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 0 25 0 100 75 100 100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X B 1 -200 0 225 R 50 50 1 1 I X C 2 100 200 100 D 50 50 1 1 P X E 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # BCV61 # DEF BCV61 Q 0 0 Y Y 1 F N F0 "Q" 300 50 50 H V L CNN F1 "BCV61" 300 -50 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-143" 0 0 50 H I C CIN F3 "" -100 0 50 H I L CNN $FPLIST SOT?143* $ENDFPLIST DRAW C -200 120 10 0 1 0 F C 0 0 10 0 1 0 F P 2 0 1 0 -200 -100 -125 -25 N P 2 0 1 0 -200 100 -125 25 N P 2 0 1 0 -200 100 -125 25 N P 2 0 1 0 125 0 -125 0 N P 2 0 1 0 200 -100 125 -25 N P 2 0 1 0 200 100 125 25 N P 3 0 1 20 -125 -75 -125 75 -125 75 F P 3 0 1 0 0 0 0 120 -200 120 N P 3 0 1 20 125 -75 125 75 125 75 F P 5 0 1 0 -150 -70 -170 -50 -190 -90 -150 -70 -150 -70 F P 5 0 1 0 150 -70 170 -50 190 -90 150 -70 150 -70 F X C2 1 -200 200 100 D 50 50 1 1 P X C1 2 200 200 100 D 50 50 1 1 P X E1 3 200 -200 100 U 50 50 1 1 P X E2 4 -200 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # BCV62 # DEF BCV62 Q 0 0 Y Y 1 F N F0 "Q" 300 50 50 H V L CNN F1 "BCV62" 300 -50 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-143" 0 0 50 H I C CIN F3 "" -100 0 50 H I L CNN $FPLIST SOT?143* $ENDFPLIST DRAW C -200 -120 10 0 1 0 F C 0 0 10 0 1 0 F P 2 0 1 0 -200 -100 -125 -25 N P 2 0 1 0 -200 100 -125 25 N P 2 0 1 0 -200 100 -125 25 N P 2 0 1 0 125 0 -125 0 N P 2 0 1 0 200 -100 125 -25 N P 2 0 1 0 200 100 125 25 N P 3 0 1 20 -125 -75 -125 75 -125 75 F P 3 0 1 0 0 0 0 -120 -200 -120 N P 3 0 1 20 125 -75 125 75 125 75 F P 5 0 1 0 -155 75 -175 55 -135 35 -155 75 -155 75 F P 5 0 1 0 155 75 175 55 135 35 155 75 155 75 F X C2 1 -200 -200 100 U 50 50 1 1 P X C1 2 200 -200 100 U 50 50 1 1 P X E1 3 200 200 100 D 50 50 1 1 P X E2 4 -200 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # BCX51 # DEF BCX51 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BCX51" 200 0 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-89-3" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS BCX52 BCX53 $FPLIST SOT?89* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 0 0 25 0 N P 2 0 1 0 100 -100 25 -25 N P 2 0 1 0 100 100 25 25 N P 3 0 1 20 25 75 25 -75 25 -75 F P 5 0 1 0 55 -75 75 -55 35 -35 55 -75 55 -75 F X B 1 -200 0 200 R 50 50 1 1 I X C 2 100 200 100 D 50 50 1 1 P X E 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # BCX56 # DEF BCX56 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BCX56" 200 0 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-89-3" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST SOT?89* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X B 1 -200 0 225 R 50 50 1 1 I X C 2 100 200 100 D 50 50 1 1 P X E 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # BD139 # DEF BD139 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BD139" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-126-3_Vertical" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS BD135 BD137 BD233 BD235 BD237 $FPLIST TO?126* $ENDFPLIST DRAW C 50 0 111 0 1 12 N P 2 0 1 0 0 0 25 0 N P 2 0 1 0 100 -100 25 -25 N P 2 0 1 0 100 100 25 25 N P 3 0 1 20 25 75 25 -75 25 -75 F P 5 0 1 0 49 -70 69 -50 90 -90 49 -70 49 -70 F X E 1 100 -200 100 U 50 50 1 1 P X C 2 100 200 100 D 50 50 1 1 P X B 3 -200 0 200 R 50 50 1 1 I ENDDRAW ENDDEF # # BD140 # DEF BD140 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BD140" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-126-3_Vertical" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS BD136 BD138 BD234 BD236 BD238 $FPLIST TO?126* $ENDFPLIST DRAW C 50 0 111 0 1 12 N P 2 0 1 0 0 0 25 0 N P 2 0 1 0 100 -100 25 -25 N P 2 0 1 0 100 100 25 25 N P 3 0 1 20 25 75 25 -75 25 -75 F P 5 0 1 0 70 -90 90 -70 50 -50 70 -90 70 -90 F X E 1 100 -200 100 U 50 50 1 1 P X C 2 100 200 100 D 50 50 1 1 P X B 3 -200 0 200 R 50 50 1 1 I ENDDRAW ENDDEF # # BD249 # DEF BD249 Q 0 0 Y N 1 F N F0 "Q" 250 75 50 H V L CNN F1 "BD249" 250 0 50 H V L CNN F2 "" 250 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS BD249A BD249B BD249C $FPLIST TO?218* TO?247* $ENDFPLIST DRAW C 50 0 111 0 1 12 N P 2 0 1 0 0 0 25 0 N P 2 0 1 0 100 100 25 25 N P 3 0 1 20 25 75 25 -75 25 -75 N P 3 0 1 0 90 -90 70 -70 70 -70 N P 3 0 1 0 100 -100 25 -25 50 -50 F P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X B 1 -200 0 200 R 50 50 1 1 I X C 2 100 200 100 D 50 50 1 1 P X E 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # BD250 # DEF BD250 Q 0 0 Y N 1 F N F0 "Q" 205 70 50 H V L CNN F1 "BD250" 205 -5 50 H V L CNN F2 "" 205 -80 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS BD250A BD250B BD250C $FPLIST TO?218* TO?247* $ENDFPLIST DRAW C 50 0 111 0 1 12 N P 2 0 1 0 0 0 25 0 N P 2 0 1 0 100 100 25 25 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 70 -90 90 -70 50 -50 70 -90 70 -90 F X B 1 -200 0 200 R 50 50 1 1 I X C 2 100 200 100 D 50 50 1 1 P X E 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # BD433 # DEF BD433 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BD433" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-126-3_Vertical" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS BD435 BD437 BD439 BD441 $FPLIST TO?126* $ENDFPLIST DRAW C 50 0 111 0 1 12 N P 2 0 1 0 0 0 25 0 N P 2 0 1 0 100 -100 25 -25 N P 2 0 1 0 100 100 25 25 N P 3 0 1 20 25 75 25 -75 25 -75 F P 5 0 1 0 49 -70 69 -50 90 -90 49 -70 49 -70 F X E 1 100 -200 100 U 50 50 1 1 P X C 2 100 200 100 D 50 50 1 1 P X B 3 -200 0 200 R 50 50 1 1 I ENDDRAW ENDDEF # # BD434 # DEF BD434 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BD434" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-126-3_Vertical" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS BD436 BD438 BD440 BD442 $FPLIST TO?126* $ENDFPLIST DRAW C 50 0 111 0 1 12 N P 2 0 1 0 0 0 25 0 N P 2 0 1 0 100 -100 25 -25 N P 2 0 1 0 100 100 25 25 N P 3 0 1 20 25 75 25 -75 25 -75 F P 5 0 1 0 91 -70 71 -90 50 -50 91 -70 91 -70 F X E 1 100 -200 100 U 50 50 1 1 P X C 2 100 200 100 D 50 50 1 1 P X B 3 -200 0 200 R 50 50 1 1 I ENDDRAW ENDDEF # # BD910 # DEF BD910 Q 0 0 Y N 1 F N F0 "Q" 250 75 50 H V L CNN F1 "BD910" 250 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-220-3_Vertical" 250 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS BD912 TIP42 TIP42A TIP42B TIP42C $FPLIST TO?220* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 90 -70 70 -90 50 -50 90 -70 90 -70 F X B 1 -200 0 225 R 50 50 1 1 I X C 2 100 200 100 D 50 50 1 1 P X E 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # BD911 # DEF BD911 Q 0 0 Y N 1 F N F0 "Q" 250 75 50 H V L CNN F1 "BD911" 250 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-220-3_Vertical" 250 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS BD909 TIP41A TIP41B TIP41C TIP41 $FPLIST TO?220* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X B 1 -200 0 225 R 50 50 1 1 I X C 2 100 200 100 D 50 50 1 1 P X E 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # BDW93 # DEF BDW93 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BDW93" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-220-3_Vertical" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS BDW93A BDW93B BDW93C $FPLIST TO?220* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 0 25 0 100 75 100 100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F P 2 1 1 0 0 0 20 0 N X B 1 -200 0 200 R 50 50 1 1 I X C 2 100 200 100 D 50 50 1 1 P X E 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # BDW94 # DEF BDW94 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BDW94" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-220-3_Vertical" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS BDW94A BDW94B BDW94C $FPLIST TO?220* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 0 25 0 100 75 100 100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 90 -70 70 -90 50 -50 90 -70 90 -70 F X B 1 -200 0 225 R 50 50 1 1 I X C 2 100 200 100 D 50 50 1 1 P X E 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # BF199 # DEF BF199 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BF199" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-92_Inline" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST TO?92* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X C 1 100 200 100 D 50 50 1 1 P X E 2 100 -200 100 U 50 50 1 1 P X B 3 -200 0 225 R 50 50 1 1 I ENDDRAW ENDDEF # # BF457 # DEF BF457 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BF457" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-126-3_Vertical" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS BF458 BF459 $FPLIST TO?126* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 0 0 25 0 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X E 1 100 -200 100 U 50 50 1 1 P X C 2 100 200 100 D 50 50 1 1 P X B 3 -200 0 200 R 50 50 1 1 I ENDDRAW ENDDEF # # BFR92 # DEF BFR92 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BFR92" 200 0 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-323_SC-70" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST SOT?323* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 0 0 25 0 N P 2 0 1 0 25 25 100 100 N P 2 0 1 0 100 -100 25 -25 N P 4 0 1 20 25 75 25 0 25 -75 25 -75 N P 5 0 1 0 90 -90 70 -50 50 -70 90 -90 90 -90 F X B 1 -200 0 200 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # BFT92 # DEF BFT92 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BFT92" 200 0 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-23" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 0 0 25 0 N P 2 0 1 0 25 25 100 100 N P 2 0 1 0 100 -100 25 -25 N P 4 0 1 20 25 75 25 0 25 -75 25 -75 N P 5 0 1 0 50 -50 70 -90 90 -70 50 -50 50 -50 F X B 1 -200 0 200 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # BUT11 # DEF BUT11 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "BUT11" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-220-3_Vertical" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS BUT11A $FPLIST TO?220* $ENDFPLIST DRAW C 50 0 111 0 1 12 N P 2 0 1 0 0 0 25 0 N P 2 0 1 0 100 -100 25 -25 N P 2 0 1 0 100 100 25 25 N P 3 0 1 20 25 75 25 -75 25 -75 N P 3 0 1 0 90 -90 70 -70 70 -70 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X B 1 -200 0 200 R 50 50 1 1 I X C 2 100 200 100 D 50 50 1 1 P X E 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # DTA113T # DEF DTA113T Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTA113T" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 T 0 -115 35 20 0 0 0 1k Normal 0 C C P 2 0 0 0 100 -90 100 -100 N P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 55 -65 75 -45 35 -25 55 -65 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTA113Z # DEF DTA113Z Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTA113Z" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 900 -85 -60 20 0 0 0 10k Normal 0 C C T 0 -130 35 20 0 0 0 1k Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 55 -65 75 -45 35 -25 55 -65 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTA114E # DEF DTA114E Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTA114E" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 0 -130 35 20 0 0 0 10k Normal 0 C C T 900 -85 -60 20 0 0 0 10k Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 55 -65 75 -45 35 -25 55 -65 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTA114G # DEF DTA114G Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTA114G" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 900 -85 -60 20 0 0 0 10k Normal 0 C C P 2 0 0 0 -135 0 0 0 N P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 55 -65 75 -45 35 -25 55 -65 F P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTA114T # DEF DTA114T Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTA114T" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 T 0 -115 35 20 0 0 0 10k Normal 0 C C P 2 0 0 0 100 -90 100 -100 N P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 55 -65 75 -45 35 -25 55 -65 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTA114W # DEF DTA114W Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTA114W" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 0 -130 35 20 0 0 0 10k Normal 0 C C T 900 -85 -60 20 0 0 0 4k7 Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 55 -65 75 -45 35 -25 55 -65 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTA114Y # DEF DTA114Y Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTA114Y" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 0 -130 35 20 0 0 0 10k Normal 0 C C T 900 -85 -60 20 0 0 0 47k Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 55 -65 75 -45 35 -25 55 -65 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTA115E # DEF DTA115E Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTA115E" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 0 -115 35 20 0 0 0 100k Normal 0 C C T 900 -85 -60 20 0 0 0 100k Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 55 -65 75 -45 35 -25 55 -65 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTA115G # DEF DTA115G Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTA115G" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 900 -85 -60 20 0 0 0 100k Normal 0 C C P 2 0 0 0 -135 0 0 0 N P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 55 -65 75 -45 35 -25 55 -65 F P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTA115T # DEF DTA115T Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTA115T" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 T 0 -115 35 20 0 0 0 100k Normal 0 C C P 2 0 0 0 100 -90 100 -100 N P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 55 -65 75 -45 35 -25 55 -65 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTA115U # DEF DTA115U Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTA115U" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 0 -115 35 20 0 0 0 100k Normal 0 C C T 900 -85 -60 20 0 0 0 10k Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 55 -65 75 -45 35 -25 55 -65 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTA123E # DEF DTA123E Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTA123E" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 0 -115 35 20 0 0 0 2k2 Normal 0 C C T 900 -85 -60 20 0 0 0 2k2 Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 55 -65 75 -45 35 -25 55 -65 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTA123J # DEF DTA123J Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTA123J" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 0 -115 35 20 0 0 0 2k2 Normal 0 C C T 900 -85 -60 20 0 0 0 47k Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 55 -65 75 -45 35 -25 55 -65 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTA123Y # DEF DTA123Y Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTA123Y" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 900 -85 -60 20 0 0 0 10k Normal 0 C C T 0 -115 35 20 0 0 0 2k2 Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 55 -65 75 -45 35 -25 55 -65 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTA124E # DEF DTA124E Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTA124E" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 0 -115 35 20 0 0 0 22k Normal 0 C C T 900 -85 -60 20 0 0 0 22k Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 55 -65 75 -45 35 -25 55 -65 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTA124G # DEF DTA124G Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTA124G" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 900 -85 -60 20 0 0 0 22k Normal 0 C C P 2 0 0 0 -135 0 0 0 N P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 55 -65 75 -45 35 -25 55 -65 F P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTA124T # DEF DTA124T Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTA124T" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 T 0 -115 35 20 0 0 0 22k Normal 0 C C P 2 0 0 0 100 -90 100 -100 N P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 55 -65 75 -45 35 -25 55 -65 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTA124X # DEF DTA124X Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTA124X" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 0 -115 35 20 0 0 0 22k Normal 0 C C T 900 -85 -60 20 0 0 0 47k Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 55 -65 75 -45 35 -25 55 -65 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTA125T # DEF DTA125T Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTA125T" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 T 0 -115 35 20 0 0 0 200k Normal 0 C C P 2 0 0 0 100 -90 100 -100 N P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 55 -65 75 -45 35 -25 55 -65 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTA143E # DEF DTA143E Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTA143E" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 0 -115 35 20 0 0 0 4k7 Normal 0 C C T 900 -85 -60 20 0 0 0 4k7 Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 55 -65 75 -45 35 -25 55 -65 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTA143T # DEF DTA143T Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTA143T" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 T 0 -115 35 20 0 0 0 4k7 Normal 0 C C P 2 0 0 0 100 -90 100 -100 N P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 55 -65 75 -45 35 -25 55 -65 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTA143X # DEF DTA143X Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTA143X" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 900 -85 -60 20 0 0 0 10k Normal 0 C C T 0 -115 35 20 0 0 0 4k7 Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 55 -65 75 -45 35 -25 55 -65 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTA143Y # DEF DTA143Y Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTA143Y" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 900 -85 -60 20 0 0 0 22k Normal 0 C C T 0 -115 35 20 0 0 0 4k7 Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 55 -65 75 -45 35 -25 55 -65 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTA143Z # DEF DTA143Z Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTA143Z" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 900 -85 -60 20 0 0 0 47k Normal 0 C C T 0 -115 35 20 0 0 0 4k7 Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 55 -65 75 -45 35 -25 55 -65 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTA144E # DEF DTA144E Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTA144E" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 0 -115 35 20 0 0 0 47k Normal 0 C C T 900 -85 -60 20 0 0 0 47k Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 55 -65 75 -45 35 -25 55 -65 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTA144G # DEF DTA144G Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTA144G" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 900 -85 -60 20 0 0 0 47k Normal 0 C C P 2 0 0 0 -135 0 0 0 N P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 55 -65 75 -45 35 -25 55 -65 F P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTA144T # DEF DTA144T Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTA144T" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 T 0 -115 35 20 0 0 0 47k Normal 0 C C P 2 0 0 0 100 -90 100 -100 N P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 55 -65 75 -45 35 -25 55 -65 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTA144V # DEF DTA144V Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTA144V" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 900 -85 -60 20 0 0 0 10k Normal 0 C C T 0 -115 35 20 0 0 0 47k Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 55 -65 75 -45 35 -25 55 -65 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTA144W # DEF DTA144W Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTA144W" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 900 -85 -60 20 0 0 0 22k Normal 0 C C T 0 -115 35 20 0 0 0 47k Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 55 -65 75 -45 35 -25 55 -65 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTA1D3R # DEF DTA1D3R Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTA1D3R" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 900 -85 -60 20 0 0 0 1k Normal 0 C C T 0 -115 35 20 0 0 0 2k7 Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 55 -65 75 -45 35 -25 55 -65 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTA214Y # DEF DTA214Y Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTA214Y" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 0 -115 35 20 0 0 0 10k Normal 0 C C T 900 -85 -60 20 0 0 0 47k Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 55 -65 75 -45 35 -25 55 -65 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTB113E # DEF DTB113E Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTB113E" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 0 -130 35 20 0 0 0 1k Normal 0 C C T 900 -85 -60 20 0 0 0 1k Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 55 -65 75 -45 35 -25 55 -65 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTB113Z # DEF DTB113Z Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTB113Z" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 900 -85 -60 20 0 0 0 10k Normal 0 C C T 0 -130 35 20 0 0 0 1k Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 55 -65 75 -45 35 -25 55 -65 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTB114E # DEF DTB114E Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTB114E" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 0 -130 35 20 0 0 0 10k Normal 0 C C T 900 -85 -60 20 0 0 0 10k Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 55 -65 75 -45 35 -25 55 -65 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTB114G # DEF DTB114G Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTB114G" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 900 -85 -60 20 0 0 0 10k Normal 0 C C P 2 0 0 0 -135 0 0 0 N P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 55 -65 75 -45 35 -25 55 -65 F P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTB114T # DEF DTB114T Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTB114T" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 T 0 -115 35 20 0 0 0 10k Normal 0 C C P 2 0 0 0 100 -90 100 -100 N P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 55 -65 75 -45 35 -25 55 -65 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTB122J # DEF DTB122J Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTB122J" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 0 -130 35 20 0 0 0 220R Normal 0 C C T 900 -85 -60 20 0 0 0 4k7 Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 55 -65 75 -45 35 -25 55 -65 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTB123E # DEF DTB123E Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTB123E" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 0 -130 35 20 0 0 0 2k2 Normal 0 C C T 900 -85 -60 20 0 0 0 2k2 Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 55 -65 75 -45 35 -25 55 -65 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTB123T # DEF DTB123T Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTB123T" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 T 0 -115 35 20 0 0 0 2k2 Normal 0 C C P 2 0 0 0 100 -90 100 -100 N P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 55 -65 75 -45 35 -25 55 -65 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTB123Y # DEF DTB123Y Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTB123Y" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 900 -85 -60 20 0 0 0 10k Normal 0 C C T 0 -130 35 20 0 0 0 2k2 Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 55 -65 75 -45 35 -25 55 -65 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTB133H # DEF DTB133H Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTB133H" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 900 -85 -60 20 0 0 0 10k Normal 0 C C T 0 -130 35 20 0 0 0 3k3 Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 55 -65 75 -45 35 -25 55 -65 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTB143T # DEF DTB143T Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTB143T" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 T 0 -115 35 20 0 0 0 4k7 Normal 0 C C P 2 0 0 0 100 -90 100 -100 N P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 55 -65 75 -45 35 -25 55 -65 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTB163T # DEF DTB163T Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTB163T" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 T 0 -115 35 20 0 0 0 6k8 Normal 0 C C P 2 0 0 0 100 -90 100 -100 N P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 55 -65 75 -45 35 -25 55 -65 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTC113T # DEF DTC113T Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTC113T" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 T 0 -120 35 20 0 0 0 1k Normal 0 C C P 2 0 0 0 100 -90 100 -100 N P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 35 -45 55 -25 75 -65 35 -45 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTC113Z # DEF DTC113Z Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTC113Z" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 900 -85 -60 20 0 0 0 10k Normal 0 C C T 0 -130 35 20 0 0 0 1k Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 35 -45 55 -25 75 -65 35 -45 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTC114E # DEF DTC114E Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTC114E" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 0 -130 35 20 0 0 0 10k Normal 0 C C T 900 -85 -60 20 0 0 0 10k Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 35 -45 55 -25 75 -65 35 -45 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTC114G # DEF DTC114G Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTC114G" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 900 -85 -60 20 0 0 0 10k Normal 0 C C P 2 0 0 0 -135 0 0 0 N P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 35 -45 55 -25 75 -65 35 -45 F P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTC114T # DEF DTC114T Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTC114T" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 T 0 -120 35 20 0 0 0 10k Normal 0 C C P 2 0 0 0 100 -90 100 -100 N P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 35 -45 55 -25 75 -65 35 -45 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTC114W # DEF DTC114W Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTC114W" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 0 -130 35 20 0 0 0 10k Normal 0 C C T 900 -85 -60 20 0 0 0 4k7 Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 35 -45 55 -25 75 -65 35 -45 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTC114Y # DEF DTC114Y Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTC114Y" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 0 -130 35 20 0 0 0 10k Normal 0 C C T 900 -85 -60 20 0 0 0 47k Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 35 -45 55 -25 75 -65 35 -45 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTC115E # DEF DTC115E Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTC115E" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 0 -130 35 20 0 0 0 100k Normal 0 C C T 900 -85 -60 20 0 0 0 100k Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 35 -45 55 -25 75 -65 35 -45 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTC115G # DEF DTC115G Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTC115G" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 900 -85 -60 20 0 0 0 100k Normal 0 C C P 2 0 0 0 -135 0 0 0 N P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 35 -45 55 -25 75 -65 35 -45 F P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTC115T # DEF DTC115T Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTC115T" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 T 0 -120 35 20 0 0 0 100k Normal 0 C C P 2 0 0 0 100 -90 100 -100 N P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 35 -45 55 -25 75 -65 35 -45 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTC115U # DEF DTC115U Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTC115U" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 0 -130 35 20 0 0 0 100k Normal 0 C C T 900 -85 -60 20 0 0 0 10k Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 35 -45 55 -25 75 -65 35 -45 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTC123E # DEF DTC123E Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTC123E" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 0 -130 35 20 0 0 0 2k2 Normal 0 C C T 900 -85 -60 20 0 0 0 2k2 Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 35 -45 55 -25 75 -65 35 -45 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTC123J # DEF DTC123J Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTC123J" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 0 -130 35 20 0 0 0 2k2 Normal 0 C C T 900 -85 -60 20 0 0 0 47k Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 35 -45 55 -25 75 -65 35 -45 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTC123Y # DEF DTC123Y Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTC123Y" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 900 -85 -60 20 0 0 0 10k Normal 0 C C T 0 -130 35 20 0 0 0 2k2 Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 35 -45 55 -25 75 -65 35 -45 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTC124E # DEF DTC124E Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTC124E" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 0 -130 35 20 0 0 0 22k Normal 0 C C T 900 -85 -60 20 0 0 0 22k Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 35 -45 55 -25 75 -65 35 -45 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTC124G # DEF DTC124G Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTC124G" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 900 -85 -60 20 0 0 0 22k Normal 0 C C P 2 0 0 0 -135 0 0 0 N P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 35 -45 55 -25 75 -65 35 -45 F P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTC124T # DEF DTC124T Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTC124T" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 T 0 -120 35 20 0 0 0 22k Normal 0 C C P 2 0 0 0 100 -90 100 -100 N P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 35 -45 55 -25 75 -65 35 -45 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTC124X # DEF DTC124X Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTC124X" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 0 -130 35 20 0 0 0 22k Normal 0 C C T 900 -85 -60 20 0 0 0 47k Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 35 -45 55 -25 75 -65 35 -45 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTC125T # DEF DTC125T Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTC125T" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 T 0 -120 35 20 0 0 0 200k Normal 0 C C P 2 0 0 0 100 -90 100 -100 N P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 35 -45 55 -25 75 -65 35 -45 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTC143E # DEF DTC143E Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTC143E" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 0 -130 35 20 0 0 0 4k7 Normal 0 C C T 900 -85 -60 20 0 0 0 4k7 Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 35 -45 55 -25 75 -65 35 -45 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTC143T # DEF DTC143T Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTC143T" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 T 0 -120 35 20 0 0 0 4k7 Normal 0 C C P 2 0 0 0 100 -90 100 -100 N P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 35 -45 55 -25 75 -65 35 -45 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTC143X # DEF DTC143X Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTC143X" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 900 -85 -60 20 0 0 0 10k Normal 0 C C T 0 -130 35 20 0 0 0 4k7 Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 35 -45 55 -25 75 -65 35 -45 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTC143Y # DEF DTC143Y Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTC143Y" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 900 -85 -60 20 0 0 0 22k Normal 0 C C T 0 -130 35 20 0 0 0 4k7 Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 35 -45 55 -25 75 -65 35 -45 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTC143Z # DEF DTC143Z Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTC143Z" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 900 -85 -60 20 0 0 0 47k Normal 0 C C T 0 -130 35 20 0 0 0 4k7 Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 35 -45 55 -25 75 -65 35 -45 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTC144E # DEF DTC144E Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTC144E" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 0 -130 35 20 0 0 0 47k Normal 0 C C T 900 -85 -60 20 0 0 0 47k Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 35 -45 55 -25 75 -65 35 -45 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTC144G # DEF DTC144G Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTC144G" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 900 -85 -60 20 0 0 0 47k Normal 0 C C P 2 0 0 0 -135 0 0 0 N P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 35 -45 55 -25 75 -65 35 -45 F P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTC144T # DEF DTC144T Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTC144T" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 T 0 -120 35 20 0 0 0 47k Normal 0 C C P 2 0 0 0 100 -90 100 -100 N P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 35 -45 55 -25 75 -65 35 -45 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTC144V # DEF DTC144V Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTC144V" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 900 -85 -60 20 0 0 0 10k Normal 0 C C T 0 -130 35 20 0 0 0 47k Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 35 -45 55 -25 75 -65 35 -45 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTC144W # DEF DTC144W Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTC144W" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 900 -85 -60 20 0 0 0 22k Normal 0 C C T 0 -130 35 20 0 0 0 47k Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 35 -45 55 -25 75 -65 35 -45 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTC1D3R # DEF DTC1D3R Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTC1D3R" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 900 -85 -60 20 0 0 0 1k Normal 0 C C T 0 -130 35 20 0 0 0 2k7 Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 35 -45 55 -25 75 -65 35 -45 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTC214Y # DEF DTC214Y Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTC214Y" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 0 -130 35 20 0 0 0 10k Normal 0 C C T 900 -85 -60 20 0 0 0 47k Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 35 -45 55 -25 75 -65 35 -45 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTD113E # DEF DTD113E Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTD113E" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 0 -130 35 20 0 0 0 1k Normal 0 C C T 900 -85 -60 20 0 0 0 1k Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 35 -45 55 -25 75 -65 35 -45 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTD113Z # DEF DTD113Z Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTD113Z" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 900 -85 -60 20 0 0 0 10k Normal 0 C C T 0 -130 35 20 0 0 0 1k Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 35 -45 55 -25 75 -65 35 -45 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTD114E # DEF DTD114E Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTD114E" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 0 -130 35 20 0 0 0 10k Normal 0 C C T 900 -85 -60 20 0 0 0 10k Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 35 -45 55 -25 75 -65 35 -45 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTD114G # DEF DTD114G Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTD114G" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 900 -85 -60 20 0 0 0 10k Normal 0 C C P 2 0 0 0 -135 0 0 0 N P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 35 -45 55 -25 75 -65 35 -45 F P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTD114T # DEF DTD114T Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTD114T" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 T 0 -120 35 20 0 0 0 10k Normal 0 C C P 2 0 0 0 100 -90 100 -100 N P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 35 -45 55 -25 75 -65 35 -45 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTD122J # DEF DTD122J Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTD122J" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 0 -130 35 20 0 0 0 220R Normal 0 C C T 900 -85 -60 20 0 0 0 4k7 Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 35 -45 55 -25 75 -65 35 -45 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTD123E # DEF DTD123E Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTD123E" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 0 -130 35 20 0 0 0 2k2 Normal 0 C C T 900 -85 -60 20 0 0 0 2k2 Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 35 -45 55 -25 75 -65 35 -45 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTD123T # DEF DTD123T Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTD123T" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 T 0 -120 35 20 0 0 0 2k2 Normal 0 C C P 2 0 0 0 100 -90 100 -100 N P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 35 -45 55 -25 75 -65 35 -45 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTD123Y # DEF DTD123Y Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTD123Y" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 900 -85 -60 20 0 0 0 10k Normal 0 C C T 0 -130 35 20 0 0 0 2k2 Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 35 -45 55 -25 75 -65 35 -45 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTD133H # DEF DTD133H Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTD133H" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 C -50 0 5 0 1 0 N C 100 -90 5 0 1 0 N T 900 -85 -60 20 0 0 0 10k Normal 0 C C T 0 -130 35 20 0 0 0 3k3 Normal 0 C C P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 35 -45 55 -25 75 -65 35 -45 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N P 11 0 1 0 -50 0 -50 -15 -30 -20 -70 -30 -30 -40 -70 -50 -30 -60 -70 -70 -50 -75 -50 -90 100 -90 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTD143T # DEF DTD143T Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTD143T" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 T 0 -120 35 20 0 0 0 4k7 Normal 0 C C P 2 0 0 0 100 -90 100 -100 N P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 35 -45 55 -25 75 -65 35 -45 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # DTD163T # DEF DTD163T Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "DTD163T" 200 0 50 H V L CNN F2 "" 0 0 50 H I L CNN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* SC?59* $ENDFPLIST DRAW A -50 0 125 901 -901 0 1 10 N -50 125 -50 -125 A 25 0 125 -899 899 0 1 10 N 25 -125 25 125 T 0 -120 35 20 0 0 0 6k8 Normal 0 C C P 2 0 0 0 100 -90 100 -100 N P 2 0 1 0 -135 0 -150 0 N P 2 0 1 10 -50 -125 25 -125 N P 2 0 1 10 -50 125 25 125 N P 2 0 1 0 0 -10 100 90 N P 2 0 1 20 5 60 5 -65 F P 2 0 1 0 100 90 100 100 N P 3 0 1 0 100 -90 0 10 0 10 N P 4 0 1 0 35 -45 55 -25 75 -65 35 -45 F P 9 0 1 0 0 0 -75 0 -80 20 -90 -20 -100 20 -110 -20 -120 20 -130 -20 -135 0 N X B 1 -250 0 100 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # FMB2227A # DEF FMB2227A Q 0 0 Y N 2 L N F0 "Q" 200 50 50 H V L CNN F1 "FMB2227A" 200 -50 50 H V L CNN F2 "Package_TO_SOT_SMD:SuperSOT-6" 200 100 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS FMB3946 $FPLIST SuperSOT* $ENDFPLIST DRAW C 50 0 111 0 1 10 N C 50 0 111 0 1 10 N P 2 0 1 0 25 0 -100 0 N P 2 1 1 0 25 25 100 100 N P 3 1 1 0 25 -25 100 -100 100 -100 N P 3 1 1 20 25 75 25 -75 25 -75 N P 5 1 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F P 2 2 1 0 25 25 100 100 N P 3 2 1 0 25 -25 100 -100 100 -100 N P 3 2 1 20 25 75 25 -75 25 -75 N P 5 2 1 0 90 -70 70 -90 50 -50 90 -70 90 -70 F X B1 1 -200 0 100 R 50 50 1 1 I X E1 5 100 -200 100 U 50 50 1 1 P X C1 6 100 200 100 D 50 50 1 1 P X E2 2 100 -200 100 U 50 50 2 1 P X B2 3 -200 0 100 R 50 50 2 1 I X C2 4 100 200 100 D 50 50 2 1 P ENDDRAW ENDDEF # # KTD1624 # DEF KTD1624 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "KTD1624" 200 0 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-89-3" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST SOT?89* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 0 0 25 0 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X B 1 -200 0 200 R 50 50 1 1 I X C 2 100 200 100 D 50 50 1 1 P X E 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # MAT02 # DEF MAT02 Q 0 0 Y N 2 F N F0 "Q" 200 75 50 H V L CNN F1 "MAT02" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-78-6" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST TO?78* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 0 0 25 0 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X C 1 100 200 100 D 50 50 1 1 P X B 2 -200 0 200 R 50 50 1 1 I X E 3 100 -200 100 U 50 50 1 1 P X E 4 100 -200 100 U 50 50 2 1 P X B 5 -200 0 200 R 50 50 2 1 I X C 6 100 200 100 D 50 50 2 1 P ENDDRAW ENDDEF # # MJ2955 # DEF MJ2955 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "MJ2955" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-3" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST TO?3* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 90 -70 70 -90 50 -50 90 -70 90 -70 F X B 1 -200 0 225 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # MJE13003 # DEF MJE13003 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "MJE13003" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-126-3_Vertical" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST TO?126* $ENDFPLIST DRAW C 50 0 111 0 1 12 N P 2 0 1 0 0 0 25 0 N P 2 0 1 0 100 -100 25 -25 N P 2 0 1 0 100 100 25 25 N P 3 0 1 20 25 75 25 -75 25 -75 F P 5 0 1 0 49 -70 69 -50 90 -90 49 -70 49 -70 F X B 1 -200 0 200 R 50 50 1 1 I X C 2 100 200 100 D 50 50 1 1 P X E 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # MJE13007G # DEF MJE13007G Q 0 0 Y N 1 F N F0 "Q" 250 75 50 H V L CNN F1 "MJE13007G" 250 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-220-3_Vertical" 250 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS MJE13005G MJE13009G $FPLIST TO?220* $ENDFPLIST DRAW C 50 0 111 0 1 12 N P 2 0 1 0 0 0 25 0 N P 2 0 1 0 100 100 25 25 N P 3 0 1 20 25 75 25 -75 25 -75 N P 3 0 1 0 90 -90 70 -70 70 -70 N P 3 0 1 0 100 -100 25 -25 50 -50 F P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X B 1 -200 0 200 R 50 50 1 1 I X C 2 100 200 100 D 50 50 1 1 P X E 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # MMBTA42 # DEF MMBTA42 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "MMBTA42" 200 0 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-23" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 0 0 25 0 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X B 1 -200 0 200 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # MMBTA92 # DEF MMBTA92 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "MMBTA92" 200 0 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-23" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST SOT?23* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 0 0 25 0 N P 2 0 1 0 100 -100 25 -25 N P 2 0 1 0 100 100 25 25 N P 3 0 1 20 25 75 25 -75 25 -75 F P 5 0 1 0 75 -95 95 -75 55 -55 75 -95 75 -95 F X B 1 -200 0 200 R 50 50 1 1 I X E 2 100 -200 100 U 50 50 1 1 P X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # MPSA42 # DEF MPSA42 Q 0 40 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "MPSA42" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-92_Inline" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST TO?92* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 0 0 25 0 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X E 1 100 -200 100 U 50 50 1 1 P X B 2 -200 0 200 R 50 50 1 1 I X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # MPSA92 # DEF MPSA92 Q 0 40 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "MPSA92" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-92_Inline" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST TO?92* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 0 0 25 0 N P 2 0 1 0 100 -100 25 -25 N P 2 0 1 0 100 100 25 25 N P 3 0 1 20 25 75 25 -75 25 -75 F P 5 0 1 0 75 -95 95 -75 55 -55 75 -95 75 -95 F X E 1 100 -200 100 U 50 50 1 1 P X B 2 -200 0 200 R 50 50 1 1 I X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # MUN5211DW1 # DEF MUN5211DW1 Q 0 20 Y N 2 F N F0 "Q" 150 50 50 H V L CNN F1 "MUN5211DW1" 150 -50 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-363_SC-70-6" 5 -440 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST SOT*363* $ENDFPLIST DRAW C -150 0 10 0 1 0 F C 50 -120 10 0 1 0 F C 0 0 111 1 1 10 N C 0 0 111 2 1 10 N S -250 20 -190 -20 0 1 0 N S -170 -90 -130 -30 0 1 0 N P 2 0 1 0 -150 -30 -150 0 N P 2 0 1 0 -30 0 -190 0 N P 2 0 1 20 -25 60 -25 -60 N P 3 0 1 0 -150 -90 -150 -120 50 -120 N P 2 1 1 0 -25 25 50 100 N P 3 1 1 0 -25 -25 50 -100 50 -100 N P 5 1 1 0 0 -70 20 -50 40 -90 0 -70 0 -70 F P 2 2 1 0 -25 25 50 100 N P 3 2 1 0 -25 -25 50 -100 50 -100 N P 5 2 1 0 0 -70 20 -50 40 -90 0 -70 0 -70 F X C1 3 50 200 100 D 50 50 1 1 P X E1 4 50 -200 100 U 50 50 1 1 P X B1 5 -350 0 100 R 50 50 1 1 I X E1 1 50 -200 100 U 50 50 2 1 P X B1 2 -350 0 100 R 50 50 2 1 I X C1 6 50 200 100 D 50 50 2 1 P ENDDRAW ENDDEF # # PN2222A # DEF PN2222A Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "PN2222A" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-92_Inline" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST TO?92* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 0 0 25 0 N P 2 0 1 0 100 -100 25 -25 N P 2 0 1 0 100 100 25 25 N P 3 0 1 20 25 75 25 -75 25 -75 N P 3 0 1 0 95 -95 75 -75 75 -75 N P 5 0 1 0 45 -65 65 -45 85 -85 45 -65 45 -65 F X E 1 100 -200 100 U 50 50 1 1 P X B 2 -200 0 200 R 50 50 1 1 I X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # PZT2222A # DEF PZT2222A Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "PZT2222A" 200 0 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-223-3_TabPin2" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST SOT?223* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 0 0 25 0 N P 2 0 1 0 100 -100 25 -25 N P 2 0 1 0 100 100 25 25 N P 3 0 1 20 25 75 25 -75 25 -75 N P 3 0 1 0 90 -90 70 -70 70 -70 N P 5 0 1 0 45 -65 65 -45 85 -85 45 -65 45 -65 F X B 1 -200 0 200 R 50 50 1 1 I X C 2 100 200 100 D 50 50 1 1 P X E 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # PZT3904 # DEF PZT3904 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "PZT3904" 200 0 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-223-3_TabPin2" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS BCP56 $FPLIST SOT?223* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X B 1 -200 0 225 R 50 50 1 1 I X C 2 100 200 100 D 50 50 1 1 P X E 3 100 -200 100 U 50 50 1 1 P X C 4 100 200 100 D 50 50 1 1 P N ENDDRAW ENDDEF # # PZT3906 # DEF PZT3906 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "PZT3906" 200 0 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-223-3_TabPin2" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS BCP53 PBSS301PZ $FPLIST SOT?223* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 90 -70 70 -90 50 -50 90 -70 90 -70 F X B 1 -200 0 225 R 50 50 1 1 I X C 2 100 200 100 D 50 50 1 1 P X E 3 100 -200 100 U 50 50 1 1 P X C 4 100 200 100 D 50 50 1 1 P N ENDDRAW ENDDEF # # PZTA42 # DEF PZTA42 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "PZTA42" 200 0 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-223-3_TabPin2" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST SOT?223* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 0 0 25 0 N P 2 0 1 0 100 -100 25 -25 N P 2 0 1 0 100 100 25 25 N P 3 0 1 20 25 75 25 -75 25 -75 N P 3 0 1 0 90 -90 70 -70 70 -70 N P 5 0 1 0 55 -75 75 -55 95 -95 55 -75 55 -75 F X B 1 -200 0 200 R 50 50 1 1 I X C 2 100 200 100 D 50 50 1 1 P X E 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # PZTA92 # DEF PZTA92 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "PZTA92" 200 0 50 H V L CNN F2 "Package_TO_SOT_SMD:SOT-223-3_TabPin2" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST SOT?223* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 0 0 25 0 N P 2 0 1 0 100 -100 25 -25 N P 2 0 1 0 100 100 25 25 N P 3 0 1 20 25 75 25 -75 25 -75 F P 5 0 1 0 75 -95 95 -75 55 -55 75 -95 75 -95 F X B 1 -200 0 200 R 50 50 1 1 I X C 2 100 200 100 D 50 50 1 1 P X E 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # S8050 # DEF S8050 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "S8050" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-92_Inline" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST TO?92* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 0 0 25 0 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X E 1 100 -200 100 U 50 50 1 1 P X B 2 -200 0 200 R 50 50 1 1 I X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # S8550 # DEF S8550 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "S8550" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-92_Inline" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST TO?92* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 0 0 25 0 N P 2 0 1 0 100 -100 25 -25 N P 2 0 1 0 100 100 25 25 N P 3 0 1 20 25 75 25 -75 25 -75 F P 5 0 1 0 70 -90 90 -70 50 -50 70 -90 70 -90 F X E 1 100 -200 100 U 50 50 1 1 P X B 2 -200 0 200 R 50 50 1 1 I X C 3 100 200 100 D 50 50 1 1 P ENDDRAW ENDDEF # # SSM2210 # DEF SSM2210 Q 0 0 Y Y 2 F N F0 "Q" 200 50 50 H V L CNN F1 "SSM2210" 200 -50 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST SOIC*8*3.9x4.9mm*P1.27mm* DIP*8*W7.62mm* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 0 -100 0 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X C1 1 100 200 100 D 50 50 1 1 P X B1 2 -200 0 100 R 50 50 1 1 I X E1 3 100 -200 100 U 50 50 1 1 P X E2 6 100 -200 100 U 50 50 2 1 P X B2 7 -200 0 100 R 50 50 2 1 I X C2 8 100 200 100 D 50 50 2 1 P ENDDRAW ENDDEF # # SSM2220 # DEF SSM2220 Q 0 0 Y Y 2 F N F0 "Q" 200 50 50 H V L CNN F1 "SSM2220" 200 -50 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN $FPLIST SOIC*8*3.9x4.9mm*P1.27mm* DIP*8*W7.62mm* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 0 -100 0 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 90 -70 70 -90 50 -50 90 -70 90 -70 F X C1 1 100 200 100 D 50 50 1 1 P X B1 2 -200 0 100 R 50 50 1 1 I X E1 3 100 -200 100 U 50 50 1 1 P X E2 6 100 -200 100 U 50 50 2 1 P X B2 7 -200 0 100 R 50 50 2 1 I X C2 8 100 200 100 D 50 50 2 1 P ENDDRAW ENDDEF # # TIP120 # DEF TIP120 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "TIP120" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-220-3_Vertical" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS TIP121 TIP122 $FPLIST TO?220* $ENDFPLIST DRAW C -30 0 5 0 1 0 N C 30 -80 5 0 1 0 N C 30 -10 5 0 1 0 N C 50 0 125 0 1 14 N C 100 -80 5 0 1 0 N C 100 -60 5 0 1 0 N C 100 40 5 0 1 0 N C 100 90 5 0 1 0 N P 2 0 1 0 -50 0 -35 0 N P 2 0 1 0 100 -80 100 -100 N P 2 0 1 0 100 -60 125 -60 N P 2 0 1 0 110 5 140 5 N P 2 0 1 0 125 -25 125 -60 N P 2 0 1 0 125 40 100 40 N P 2 0 1 0 125 40 125 5 N P 3 0 1 0 -10 30 30 -10 50 -10 N P 3 0 1 0 -10 40 -30 40 -30 -80 N P 3 0 1 0 -10 50 30 90 100 90 N P 3 0 1 12 -10 80 -10 0 -10 0 N P 3 0 1 15 50 30 50 -50 50 -50 N P 4 0 1 0 25 -5 15 15 5 5 25 -5 N P 4 0 1 0 50 -20 90 -60 100 -60 100 -80 N P 4 0 1 0 50 0 90 40 100 40 100 90 N P 4 0 1 0 85 -55 75 -35 65 -45 85 -55 N P 4 0 1 0 125 5 110 -25 140 -25 125 5 F P 10 0 1 0 30 -80 15 -80 10 -90 5 -70 0 -90 -5 -70 -10 -90 -15 -70 -20 -80 -30 -80 N P 11 0 1 0 30 -10 30 -80 45 -80 50 -70 55 -90 60 -70 65 -90 70 -70 75 -90 80 -80 100 -80 N X B 1 -200 0 150 R 50 50 1 1 I X C 2 100 200 105 D 50 50 1 1 P X E 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # TIP125 # DEF TIP125 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "TIP125" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-220-3_Vertical" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN ALIAS TIP126 TIP127 $FPLIST TO?220* $ENDFPLIST DRAW C -30 0 5 0 1 0 N C 30 -80 5 0 1 0 N C 30 -10 5 0 1 0 N C 50 0 125 0 1 14 N C 100 -80 5 0 1 0 N C 100 -60 5 0 1 0 N C 100 40 5 0 1 0 N C 100 90 5 0 1 0 N P 2 0 1 0 -50 0 -35 0 N P 2 0 1 0 100 -80 100 -100 N P 2 0 1 0 100 -60 125 -60 N P 2 0 1 0 110 -25 140 -25 N P 2 0 1 0 125 -60 125 -25 N P 2 0 1 0 125 5 125 40 N P 2 0 1 0 125 40 100 40 N P 3 0 1 0 -10 30 30 -10 50 -10 N P 3 0 1 0 -10 40 -30 40 -30 -80 N P 3 0 1 0 -10 50 30 90 100 90 N P 3 0 1 12 -10 80 -10 0 -10 0 N P 3 0 1 15 50 30 50 -50 50 -50 N P 4 0 1 0 0 20 10 0 20 10 0 20 N P 4 0 1 0 50 -20 90 -60 100 -60 100 -80 N P 4 0 1 0 50 0 90 40 100 40 100 90 N P 4 0 1 0 60 -30 70 -50 80 -40 60 -30 N P 4 0 1 0 125 -25 110 5 140 5 125 -25 F P 10 0 1 0 30 -80 15 -80 10 -90 5 -70 0 -90 -5 -70 -10 -90 -15 -70 -20 -80 -30 -80 N P 11 0 1 0 30 -10 30 -80 45 -80 50 -70 55 -90 60 -70 65 -90 70 -70 75 -90 80 -80 100 -80 N X B 1 -200 0 150 R 50 50 1 1 I X C 2 100 200 105 D 50 50 1 1 P X E 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # TIP2955 # DEF TIP2955 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "TIP2955" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-218-3_Vertical" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST TO?218* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 90 -70 70 -90 50 -50 90 -70 90 -70 F X B 1 -200 0 225 R 50 50 1 1 I X C 2 100 200 100 D 50 50 1 1 P X E 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # TIP2955G # DEF TIP2955G Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "TIP2955G" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-247-3_Vertical" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST TO?247* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 90 -70 70 -90 50 -50 90 -70 90 -70 F X B 1 -200 0 225 R 50 50 1 1 I X C 2 100 200 100 D 50 50 1 1 P X E 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # TIP3055 # DEF TIP3055 Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "TIP3055" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-218-3_Vertical" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST TO?218* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X B 1 -200 0 225 R 50 50 1 1 I X C 2 100 200 100 D 50 50 1 1 P X E 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # # TIP3055G # DEF TIP3055G Q 0 0 Y N 1 F N F0 "Q" 200 75 50 H V L CNN F1 "TIP3055G" 200 0 50 H V L CNN F2 "Package_TO_SOT_THT:TO-247-3_Vertical" 200 -75 50 H I L CIN F3 "" 0 0 50 H I L CNN $FPLIST TO?247* $ENDFPLIST DRAW C 50 0 111 0 1 10 N P 2 0 1 0 25 25 100 100 N P 3 0 1 0 25 -25 100 -100 100 -100 N P 3 0 1 20 25 75 25 -75 25 -75 N P 5 0 1 0 50 -70 70 -50 90 -90 50 -70 50 -70 F X B 1 -200 0 225 R 50 50 1 1 I X C 2 100 200 100 D 50 50 1 1 P X E 3 100 -200 100 U 50 50 1 1 P ENDDRAW ENDDEF # #End Library ================================================ FILE: esim-cloud-backend/kicad-symbols/default/eSim_Sources.dcm ================================================ EESchema-DOCLIB Version 2.0 # #End Doc Library ================================================ FILE: esim-cloud-backend/kicad-symbols/default/eSim_Sources.lib ================================================ EESchema-LIBRARY Version 2.3 #encoding utf-8 # # eSim_AC # DEF eSim_AC v 0 40 Y Y 1 F N F0 "v" -200 100 60 H V C CNN F1 "eSim_AC" -200 -50 60 H V C CNN F2 "R1" -300 0 60 H V C CNN F3 "" 0 0 60 H V C CNN $FPLIST 1_pin $ENDFPLIST DRAW A -50 0 50 1 1799 0 1 0 N 0 0 -100 0 A 50 0 50 -1799 -1 0 1 0 N 0 0 100 0 C 0 0 150 0 1 0 N X + 1 0 450 300 D 50 0 1 1 I X - 2 0 -450 300 U 50 0 1 1 I ENDDRAW ENDDEF # # CCCS # DEF CCCS F 0 40 Y Y 1 F N F0 "F" 0 150 50 H V C CNN F1 "CCCS" -200 -50 50 H V C CNN F2 "" 0 0 60 H V C CNN F3 "" 0 0 60 H V C CNN $FPLIST 1_pin $ENDFPLIST DRAW S -100 100 100 -100 0 1 0 N X + 1 -300 50 200 R 35 35 1 1 P X - 2 300 50 200 L 35 35 1 1 P X +c 3 -50 -200 100 U 35 35 1 1 P X -c 4 50 -200 100 U 35 35 1 1 P ENDDRAW ENDDEF # # CCVS # DEF CCVS H 0 40 Y Y 1 F N F0 "H" 0 150 50 H V C CNN F1 "CCVS" -200 -50 50 H V C CNN F2 "" 0 0 60 H V C CNN F3 "" 0 0 60 H V C CNN $FPLIST 1_pin $ENDFPLIST DRAW S -100 100 100 -100 0 1 0 N X + 1 -300 50 200 R 35 35 1 1 P X - 2 300 50 200 L 35 35 1 1 P X +c 3 -50 -200 100 U 35 35 1 1 P X -c 4 50 -200 100 U 35 35 1 1 P ENDDRAW ENDDEF # # DC # DEF DC v 0 40 Y Y 1 F N F0 "v" -200 100 60 H V C CNN F1 "DC" -200 -50 60 H V C CNN F2 "R1" -300 0 60 H V C CNN F3 "" 0 0 60 H V C CNN $FPLIST 1_pin $ENDFPLIST DRAW C 0 0 150 0 1 0 N X + 1 0 450 300 D 50 50 1 1 w X - 2 0 -450 300 U 50 50 1 1 w ENDDRAW ENDDEF # # VCCS # DEF VCCS G 0 40 Y Y 1 F N F0 "G" 0 150 50 H V C CNN F1 "VCCS" -200 -50 50 H V C CNN F2 "" 0 0 60 H V C CNN F3 "" 0 0 60 H V C CNN $FPLIST 1_pin $ENDFPLIST DRAW S -100 100 100 -100 0 1 0 N X + 1 -300 50 200 R 35 35 1 1 P X - 2 300 50 200 L 35 35 1 1 P X +c 3 -50 -200 100 U 35 35 1 1 P X -c 4 50 -200 100 U 35 35 1 1 P ENDDRAW ENDDEF # # VCVS # DEF VCVS E 0 40 Y Y 1 F N F0 "E" 0 150 50 H V C CNN F1 "VCVS" -200 -50 50 H V C CNN F2 "" 0 0 60 H V C CNN F3 "" 0 0 60 H V C CNN $FPLIST 1_pin $ENDFPLIST DRAW S -100 100 100 -100 0 1 0 N X + 1 -300 50 200 R 35 35 1 1 P X - 2 300 50 200 L 35 35 1 1 P X +c 3 -50 -200 100 U 35 35 1 1 P X -c 4 50 -200 100 U 35 35 1 1 P ENDDRAW ENDDEF # # dc # DEF dc I 0 40 Y Y 1 F N F0 "I" -200 100 60 H V C CNN F1 "dc" -200 -50 60 H V C CNN F2 "R1" -300 0 60 H V C CNN F3 "" 0 0 60 H V C CNN $FPLIST 1_pin $ENDFPLIST DRAW C 0 0 150 0 1 0 N P 2 0 1 0 0 -100 0 -100 N P 2 0 1 0 0 100 -50 50 N P 2 0 1 0 0 100 0 -100 N P 2 0 1 0 0 100 50 50 N X ~ 1 0 450 300 D 50 50 1 1 P X ~ 2 0 -450 300 U 50 50 1 1 P ENDDRAW ENDDEF # # exp # DEF exp v 0 40 Y Y 1 F N F0 "v" -200 100 60 H V C CNN F1 "exp" -200 -50 60 H V C CNN F2 "R1" -300 0 60 H V C CNN F3 "" 0 0 60 H V C CNN $FPLIST 1_pin $ENDFPLIST DRAW A 1 -50 100 905 1800 0 1 0 N 0 50 -100 -50 A 100 51 100 -1794 -900 0 1 0 N 0 50 100 -50 C 0 0 150 0 1 0 N X + 1 0 450 300 D 50 0 1 1 I X - 2 0 -450 300 U 50 0 1 1 I ENDDRAW ENDDEF # # pulse # DEF pulse v 0 40 Y Y 1 F N F0 "v" -200 100 60 H V C CNN F1 "pulse" -200 -50 60 H V C CNN F2 "R1" -300 0 60 H V C CNN F3 "" 0 0 60 H V C CNN $FPLIST 1_pin $ENDFPLIST DRAW A -25 -450 501 928 871 0 1 0 N -50 50 0 50 A 25 400 451 -931 -868 0 1 0 N 0 -50 50 -50 A 75 600 551 -926 -873 0 1 0 N 50 50 100 50 A 350 0 403 -1728 1728 0 1 0 N -50 -50 -50 50 A 450 0 453 1736 -1736 0 1 0 N 0 50 0 -50 A 600 0 552 -1748 1748 0 1 0 N 50 -50 50 50 C 0 0 150 0 1 0 N X + 1 0 450 300 D 50 50 1 1 P X - 2 0 -450 300 U 50 50 1 1 P ENDDRAW ENDDEF # # pwl # DEF pwl v 0 40 Y Y 1 F N F0 "v" -200 100 60 H V C CNN F1 "pwl" -250 -50 60 H V C CNN F2 "R1" -300 0 60 H V C CNN F3 "" 0 0 60 H V C CNN $FPLIST 1_pin $ENDFPLIST DRAW A -1144 -561 1253 291 240 0 1 0 N -50 50 0 -50 A -765 421 941 -300 -232 0 1 0 N 50 -50 100 50 A -75 -700 750 919 880 0 1 0 N -100 50 -50 50 A 25 450 501 -928 -871 0 1 0 N 0 -50 50 -50 A 1096 -609 1366 1511 1558 0 1 0 N -100 50 -150 -50 C 0 0 150 0 1 0 N X + 1 0 450 300 D 50 0 1 1 I X - 2 0 -450 300 U 50 0 1 1 I ENDDRAW ENDDEF # # sine # DEF sine v 0 40 Y Y 1 F N F0 "v" -200 100 60 H V C CNN F1 "sine" -200 -50 60 H V C CNN F2 "R1" -300 0 60 H V C CNN F3 "" 0 0 60 H V C CNN $FPLIST 1_pin $ENDFPLIST DRAW A -50 0 50 1 1799 0 1 0 N 0 0 -100 0 A 50 0 50 -1799 -1 0 1 0 N 0 0 100 0 C 0 0 150 0 1 0 N X + 1 0 450 300 D 50 0 1 1 I X - 2 0 -450 300 U 50 0 1 1 I ENDDRAW ENDDEF # #End Library ================================================ FILE: esim-cloud-backend/kicad-symbols/default/power.dcm ================================================ EESchema-DOCLIB Version 2.0 # $CMP +10V D Power symbol creates a global label with name "+10V" K power-flag $ENDCMP # $CMP +12C D Power symbol creates a global label with name "+12C" K power-flag $ENDCMP # $CMP +12L D Power symbol creates a global label with name "+12L" K power-flag $ENDCMP # $CMP +12LF D Power symbol creates a global label with name "+12LF" K power-flag $ENDCMP # $CMP +12P D Power symbol creates a global label with name "+12P" K power-flag $ENDCMP # $CMP +12V D Power symbol creates a global label with name "+12V" K power-flag $ENDCMP # $CMP +12VA D Power symbol creates a global label with name "+12VA" K power-flag $ENDCMP # $CMP +15V D Power symbol creates a global label with name "+15V" K power-flag $ENDCMP # $CMP +1V0 D Power symbol creates a global label with name "+1V0" K power-flag $ENDCMP # $CMP +1V1 D Power symbol creates a global label with name "+1V1" K power-flag $ENDCMP # $CMP +1V2 D Power symbol creates a global label with name "+1V2" K power-flag $ENDCMP # $CMP +1V35 D Power symbol creates a global label with name "+1V35" K power-flag $ENDCMP # $CMP +1V5 D Power symbol creates a global label with name "+1V5" K power-flag $ENDCMP # $CMP +1V8 D Power symbol creates a global label with name "+1V8" K power-flag $ENDCMP # $CMP +24V D Power symbol creates a global label with name "+24V" K power-flag $ENDCMP # $CMP +28V D Power symbol creates a global label with name "+28V" K power-flag $ENDCMP # $CMP +2V5 D Power symbol creates a global label with name "+2V5" K power-flag $ENDCMP # $CMP +2V8 D Power symbol creates a global label with name "+2V8" K power-flag $ENDCMP # $CMP +3.3V D Power symbol creates a global label with name "+3.3V" K power-flag $ENDCMP # $CMP +3.3VA D Power symbol creates a global label with name "+3.3VA" K power-flag $ENDCMP # $CMP +3.3VADC D Power symbol creates a global label with name "+3.3VADC" K power-flag $ENDCMP # $CMP +3.3VDAC D Power symbol creates a global label with name "+3.3VDAC" K power-flag $ENDCMP # $CMP +3.3VP D Power symbol creates a global label with name "+3.3VP" K power-flag $ENDCMP # $CMP +36V D Power symbol creates a global label with name "+36V" K power-flag $ENDCMP # $CMP +3V0 D Power symbol creates a global label with name "+3V0" K power-flag $ENDCMP # $CMP +3V3 D Power symbol creates a global label with name "+3V3" K power-flag $ENDCMP # $CMP +3V8 D Power symbol creates a global label with name "+3V8" K power-flag $ENDCMP # $CMP +48V D Power symbol creates a global label with name "+48V" K power-flag $ENDCMP # $CMP +4V D Power symbol creates a global label with name "+4V" K power-flag $ENDCMP # $CMP +5C D Power symbol creates a global label with name "+5C" K power-flag $ENDCMP # $CMP +5F D Power symbol creates a global label with name "+5F" K power-flag $ENDCMP # $CMP +5P D Power symbol creates a global label with name "+5P" K power-flag $ENDCMP # $CMP +5V D Power symbol creates a global label with name "+5V" K power-flag $ENDCMP # $CMP +5VA D Power symbol creates a global label with name "+5VA" K power-flag $ENDCMP # $CMP +5VD D Power symbol creates a global label with name "+5VD" K power-flag $ENDCMP # $CMP +5VL D Power symbol creates a global label with name "+5VL" K power-flag $ENDCMP # $CMP +5VP D Power symbol creates a global label with name "+5VP" K power-flag $ENDCMP # $CMP +6V D Power symbol creates a global label with name "+6V" K power-flag $ENDCMP # $CMP +7.5V D Power symbol creates a global label with name "+7.5V" K power-flag $ENDCMP # $CMP +8V D Power symbol creates a global label with name "+8V" K power-flag $ENDCMP # $CMP +9V D Power symbol creates a global label with name "+9V" K power-flag $ENDCMP # $CMP +9VA D Power symbol creates a global label with name "+9VA" K power-flag $ENDCMP # $CMP +BATT D Power symbol creates a global label with name "+BATT" K power-flag battery $ENDCMP # $CMP +VDC D Power symbol creates a global label with name "+VDC" K power-flag $ENDCMP # $CMP +VSW D Power symbol creates a global label with name "+VSW" K power-flag $ENDCMP # $CMP -10V D Power symbol creates a global label with name "-10V" K power-flag $ENDCMP # $CMP -12V D Power symbol creates a global label with name "-12V" K power-flag $ENDCMP # $CMP -12VA D Power symbol creates a global label with name "-12VA" K power-flag $ENDCMP # $CMP -15V D Power symbol creates a global label with name "-15V" K power-flag $ENDCMP # $CMP -24V D Power symbol creates a global label with name "-24V" K power-flag $ENDCMP # $CMP -2V5 D Power symbol creates a global label with name "-2V5" K power-flag $ENDCMP # $CMP -36V D Power symbol creates a global label with name "-36V" K power-flag $ENDCMP # $CMP -3V3 D Power symbol creates a global label with name "-3V3" K power-flag $ENDCMP # $CMP -48V D Power symbol creates a global label with name "-48V" K power-flag $ENDCMP # $CMP -5V D Power symbol creates a global label with name "-5V" K power-flag $ENDCMP # $CMP -5VA D Power symbol creates a global label with name "-5VA" K power-flag $ENDCMP # $CMP -6V D Power symbol creates a global label with name "-6V" K power-flag $ENDCMP # $CMP -8V D Power symbol creates a global label with name "-8V" K power-flag $ENDCMP # $CMP -9V D Power symbol creates a global label with name "-9V" K power-flag $ENDCMP # $CMP -9VA D Power symbol creates a global label with name "-9VA" K power-flag $ENDCMP # $CMP -BATT D Power symbol creates a global label with name "-BATT" K power-flag battery $ENDCMP # $CMP -VDC D Power symbol creates a global label with name "-VDC" K power-flag $ENDCMP # $CMP -VSW D Power symbol creates a global label with name "-VSW" K power-flag $ENDCMP # $CMP AC D Power symbol creates a global label with name "AC" K power-flag $ENDCMP # $CMP Earth D Power symbol creates a global label with name "Earth" K power-flag ground gnd F ~ $ENDCMP # $CMP Earth_Clean D Power symbol creates a global label with name "Earth_Clean" K power-flag ground gnd clean signal F ~ $ENDCMP # $CMP Earth_Protective D Power symbol creates a global label with name "Earth_Protective" K power-flag ground gnd clean F ~ $ENDCMP # $CMP GND D Power symbol creates a global label with name "GND" , ground K power-flag $ENDCMP # $CMP GND1 D Power symbol creates a global label with name "GND1" , ground K power-flag $ENDCMP # $CMP GND2 D Power symbol creates a global label with name "GND2" , ground K power-flag $ENDCMP # $CMP GND3 D Power symbol creates a global label with name "GND3" , ground K power-flag $ENDCMP # $CMP GNDA D Power symbol creates a global label with name "GNDA" , analog ground K power-flag $ENDCMP # $CMP GNDD D Power symbol creates a global label with name "GNDD" , digital ground K power-flag $ENDCMP # $CMP GNDPWR D Power symbol creates a global label with name "GNDPWR" , power ground K power-flag $ENDCMP # $CMP GNDREF D Power symbol creates a global label with name "GNDREF" , reference supply ground K power-flag $ENDCMP # $CMP GNDS D Power symbol creates a global label with name "GNDS" , signal ground K power-flag $ENDCMP # $CMP HT D Power symbol creates a global label with name "HT" K power-flag $ENDCMP # $CMP LINE D Power symbol creates a global label with name "LINE" K power-flag $ENDCMP # $CMP NEUT D Power symbol creates a global label with name "NEUT" K power-flag $ENDCMP # $CMP PRI_HI D Power symbol creates a global label with name "PRI_HI" K power-flag $ENDCMP # $CMP PRI_LO D Power symbol creates a global label with name "PRI_LO" K power-flag $ENDCMP # $CMP PRI_MID D Power symbol creates a global label with name "PRI_MID" K power-flag $ENDCMP # $CMP PWR_FLAG D Special symbol for telling ERC where power comes from K power-flag F ~ $ENDCMP # $CMP VAA D Power symbol creates a global label with name "VAA" K power-flag $ENDCMP # $CMP VAC D Power symbol creates a global label with name "VAC" K power-flag $ENDCMP # $CMP VBUS D Power symbol creates a global label with name "VBUS" K power-flag $ENDCMP # $CMP VCC D Power symbol creates a global label with name "VCC" K power-flag $ENDCMP # $CMP VCCQ D Power symbol creates a global label with name "VCCQ" K power-flag $ENDCMP # $CMP VCOM D Power symbol creates a global label with name "VCOM" K power-flag $ENDCMP # $CMP VD D Power symbol creates a global label with name "VD" K power-flag $ENDCMP # $CMP VDC D Power symbol creates a global label with name "VDC" K power-flag $ENDCMP # $CMP VDD D Power symbol creates a global label with name "VDD" K power-flag $ENDCMP # $CMP VDDA D Power symbol creates a global label with name "VDDA" K power-flag $ENDCMP # $CMP VDDF D Power symbol creates a global label with name "VDDF" K power-flag $ENDCMP # $CMP VEE D Power symbol creates a global label with name "VEE" K power-flag $ENDCMP # $CMP VMEM D Power symbol creates a global label with name "VMEM" K power-flag $ENDCMP # $CMP VPP D Power symbol creates a global label with name "VPP" K power-flag $ENDCMP # $CMP VS D Power symbol creates a global label with name "VS" K power-flag $ENDCMP # $CMP VSS D Power symbol creates a global label with name "VSS" K power-flag $ENDCMP # $CMP VSSA D Power symbol creates a global label with name "VSSA" K power-flag $ENDCMP # $CMP Vdrive D Power symbol creates a global label with name "Vdrive" K power-flag $ENDCMP # #End Doc Library ================================================ FILE: esim-cloud-backend/kicad-symbols/default/power.lib ================================================ EESchema-LIBRARY Version 2.4 #encoding utf-8 # # +10V # DEF +10V #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "+10V" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +10V 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # +12C # DEF +12C #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "+12C" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +12C 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # +12L # DEF +12L #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "+12L" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +12L 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # +12LF # DEF +12LF #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "+12LF" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +12LF 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # +12P # DEF +12P #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "+12P" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +12P 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # +12V # DEF +12V #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "+12V" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +12V 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # +12VA # DEF +12VA #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "+12VA" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +12VA 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # +15V # DEF +15V #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "+15V" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +15V 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # +1V0 # DEF +1V0 #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "+1V0" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +1V0 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # +1V1 # DEF +1V1 #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "+1V1" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +1V1 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # +1V2 # DEF +1V2 #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "+1V2" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +1V2 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # +1V35 # DEF +1V35 #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "+1V35" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +1V35 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # +1V5 # DEF +1V5 #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "+1V5" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +1V5 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # +1V8 # DEF +1V8 #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "+1V8" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +1V8 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # +24V # DEF +24V #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "+24V" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +24V 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # +28V # DEF +28V #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "+28V" 0 150 50 H V C CNN F2 "" 250 50 50 H I C CNN F3 "" 250 50 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +28V 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # +2V5 # DEF +2V5 #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "+2V5" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +2V5 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # +2V8 # DEF +2V8 #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "+2V8" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +2V8 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # +3.3VA # DEF +3.3VA #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "+3.3VA" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +3.3VA 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # +3.3VADC # DEF +3.3VADC #PWR 0 0 Y Y 1 F P F0 "#PWR" 150 -50 50 H I C CNN F1 "+3.3VADC" 0 100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +3.3VADC 1 0 0 0 U 50 50 0 0 W N ENDDRAW ENDDEF # # +3.3VDAC # DEF +3.3VDAC #PWR 0 0 Y Y 1 F P F0 "#PWR" 150 -50 50 H I C CNN F1 "+3.3VDAC" 0 100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +3.3VDAC 1 0 0 0 U 50 50 0 0 W N ENDDRAW ENDDEF # # +3.3VP # DEF +3.3VP #PWR 0 0 Y Y 1 F P F0 "#PWR" 150 -50 50 H I C CNN F1 "+3.3VP" 0 100 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +3.3VP 1 0 0 0 U 50 50 0 0 W N ENDDRAW ENDDEF # # +36V # DEF +36V #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "+36V" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +36V 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # +3V0 # DEF +3V0 #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "+3V0" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +3V0 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # +3V3 # DEF +3V3 #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "+3V3" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS +3.3V DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +3V3 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # +3V8 # DEF +3V8 #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "+3V8" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +3V8 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # +48V # DEF +48V #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "+48V" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +48V 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # +4V # DEF +4V #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "+4V" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +4V 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # +5C # DEF +5C #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "+5C" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +5C 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # +5F # DEF +5F #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "+5F" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +5F 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # +5P # DEF +5P #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "+5P" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +5P 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # +5V # DEF +5V #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "+5V" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +5V 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # +5VA # DEF +5VA #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "+5VA" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +5VA 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # +5VD # DEF +5VD #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "+5VD" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +5VD 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # +5VL # DEF +5VL #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "+5VL" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +5VL 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # +5VP # DEF +5VP #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "+5VP" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +5VP 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # +6V # DEF +6V #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "+6V" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +6V 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # +7.5V # DEF +7.5V #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "+7.5V" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +7.5V 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # +8V # DEF +8V #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "+8V" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +8V 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # +9V # DEF +9V #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "+9V" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +9V 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # +9VA # DEF +9VA #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -125 50 H I C CNN F1 "+9VA" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +9VA 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # +BATT # DEF +BATT #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "+BATT" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +BATT 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # +VDC # DEF +VDC #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -100 50 H I C CNN F1 "+VDC" 0 250 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 0 125 75 0 1 10 N P 2 0 1 20 -45 125 45 125 N P 2 0 1 0 0 0 0 50 N P 2 0 1 20 0 80 0 170 N X +VDC 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # +VSW # DEF +VSW #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "+VSW" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X +VSW 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # -10V # DEF -10V #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 100 50 H I C CNN F1 "-10V" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 6 0 1 0 0 0 0 50 30 50 0 100 -30 50 0 50 F X -10V 1 0 0 0 U 50 50 0 0 W N ENDDRAW ENDDEF # # -12V # DEF -12V #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 100 50 H I C CNN F1 "-12V" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 6 0 1 0 0 0 0 50 30 50 0 100 -30 50 0 50 F X -12V 1 0 0 0 U 50 50 0 0 W N ENDDRAW ENDDEF # # -12VA # DEF -12VA #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "-12VA" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 6 0 1 0 0 0 0 50 30 50 0 100 -30 50 0 50 F X -12VA 1 0 0 0 U 50 50 0 0 W N ENDDRAW ENDDEF # # -15V # DEF -15V #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 100 50 H I C CNN F1 "-15V" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 6 0 1 0 0 0 0 50 30 50 0 100 -30 50 0 50 F X -15V 1 0 0 0 U 50 50 0 0 W N ENDDRAW ENDDEF # # -24V # DEF -24V #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 100 50 H I C CNN F1 "-24V" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 6 0 1 0 0 0 0 50 30 50 0 100 -30 50 0 50 F X -24V 1 0 0 0 U 50 50 0 0 W N ENDDRAW ENDDEF # # -2V5 # DEF -2V5 #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 100 50 H I C CNN F1 "-2V5" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 6 0 1 0 0 0 0 50 30 50 0 100 -30 50 0 50 F X -2V5 1 0 0 0 U 50 50 0 0 W N ENDDRAW ENDDEF # # -36V # DEF -36V #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 100 50 H I C CNN F1 "-36V" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 6 0 1 0 0 0 0 50 30 50 0 100 -30 50 0 50 F X -36V 1 0 0 0 U 50 50 0 0 W N ENDDRAW ENDDEF # # -3V3 # DEF -3V3 #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 100 50 H I C CNN F1 "-3V3" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 6 0 1 0 0 0 0 50 30 50 0 100 -30 50 0 50 F X -3V3 1 0 0 0 U 50 50 0 0 W N ENDDRAW ENDDEF # # -48V # DEF -48V #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 100 50 H I C CNN F1 "-48V" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 6 0 1 0 0 0 0 50 30 50 0 100 -30 50 0 50 F X -48V 1 0 0 0 U 50 50 0 0 W N ENDDRAW ENDDEF # # -5V # DEF -5V #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 100 50 H I C CNN F1 "-5V" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 6 0 1 0 0 0 0 50 30 50 0 100 -30 50 0 50 F X -5V 1 0 0 0 U 50 50 0 0 W N ENDDRAW ENDDEF # # -5VA # DEF -5VA #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 100 50 H I C CNN F1 "-5VA" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 6 0 1 0 0 0 0 50 30 50 0 100 -30 50 0 50 F X -5VA 1 0 0 0 U 50 50 0 0 W N ENDDRAW ENDDEF # # -6V # DEF -6V #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 100 50 H I C CNN F1 "-6V" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 6 0 1 0 0 0 0 50 30 50 0 100 -30 50 0 50 F X -6V 1 0 0 0 U 50 50 0 0 W N ENDDRAW ENDDEF # # -8V # DEF -8V #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 100 50 H I C CNN F1 "-8V" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 6 0 1 0 0 0 0 50 30 50 0 100 -30 50 0 50 F X -8V 1 0 0 0 U 50 50 0 0 W N ENDDRAW ENDDEF # # -9V # DEF -9V #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -125 50 H I C CNN F1 "-9V" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 0 0 0 100 N P 4 0 1 0 30 50 -30 50 0 100 30 50 F X -9V 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # -9VA # DEF -9VA #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -125 50 H I C CNN F1 "-9VA" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 0 0 0 100 N P 4 0 1 0 30 50 -30 50 0 100 30 50 F X -9VA 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # -BATT # DEF -BATT #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "-BATT" 0 140 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 0 0 0 100 N P 4 0 1 0 30 50 -30 50 0 100 30 50 F X -BATT 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # -VDC # DEF -VDC #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -100 50 H I C CNN F1 "-VDC" 0 250 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 0 125 75 0 1 10 N P 2 0 1 20 -45 125 45 125 N P 2 0 1 0 0 0 0 50 N X -VDC 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # -VSW # DEF -VSW #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 100 50 H I C CNN F1 "-VSW" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 6 0 1 0 0 0 0 50 30 50 0 100 -30 50 0 50 F X -VSW 1 0 0 0 U 50 50 0 0 W N ENDDRAW ENDDEF # # AC # DEF AC #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -100 50 H I C CNN F1 "AC" 0 250 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW A -25 125 25 1 1799 0 1 10 N 0 125 -50 125 A 25 125 25 -1799 -1 0 1 10 N 0 125 50 125 C 0 125 75 0 1 10 N P 2 0 1 0 0 0 0 50 N X AC 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # Earth # DEF Earth #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -250 50 H I C CNN F1 "Earth" 0 -150 50 H I C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -25 -75 25 -75 N P 2 0 1 0 -5 -100 5 -100 N P 2 0 1 0 0 -50 0 0 N P 2 0 1 0 50 -50 -50 -50 N X Earth 1 0 0 0 D 50 50 1 1 W N ENDDRAW ENDDEF # # Earth_Clean # DEF Earth_Clean #PWR 0 0 Y Y 1 F P F0 "#PWR" 250 0 50 H I C CNN F1 "Earth_Clean" 300 -150 50 H I C CNN F2 "" 0 -50 50 H I C CNN F3 "" 0 -50 50 H I C CNN DRAW A 0 -150 100 1 1799 0 1 0 N 100 -150 -100 -150 P 2 0 1 0 -25 -125 25 -125 N P 2 0 1 0 -5 -150 5 -150 N P 2 0 1 0 0 -100 0 0 N P 2 0 1 0 50 -100 -50 -100 N X Earth_Clean 1 0 0 0 D 50 50 1 1 W N ENDDRAW ENDDEF # # Earth_Protective # DEF Earth_Protective #PWR 0 0 Y Y 1 F P F0 "#PWR" 250 -250 50 H I C CNN F1 "Earth_Protective" 450 -150 50 H I C CNN F2 "" 0 -100 50 H I C CNN F3 "" 0 -100 50 H I C CNN DRAW C 0 -150 100 0 1 0 N P 2 0 1 0 -25 -175 25 -175 N P 2 0 1 0 -5 -200 5 -200 N P 2 0 1 0 0 -150 0 0 N P 2 0 1 0 50 -150 -50 -150 N X Earth_Protective 1 0 0 0 D 50 50 1 1 W N ENDDRAW ENDDEF # # GND # DEF GND #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -250 50 H I C CNN F1 "GND" 0 -150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N X GND 1 0 0 0 D 50 50 1 1 W N ENDDRAW ENDDEF # # GND1 # DEF GND1 #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -250 50 H I C CNN F1 "GND1" 0 -150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N X GND1 1 0 0 0 D 50 50 1 1 W N ENDDRAW ENDDEF # # GND2 # DEF GND2 #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -250 50 H I C CNN F1 "GND2" 0 -150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N X GND2 1 0 0 0 D 50 50 1 1 W N ENDDRAW ENDDEF # # GND3 # DEF GND3 #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -250 50 H I C CNN F1 "GND3" 0 -150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N X GND3 1 0 0 0 D 50 50 1 1 W N ENDDRAW ENDDEF # # GNDA # DEF GNDA #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -250 50 H I C CNN F1 "GNDA" 0 -150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N X GNDA 1 0 0 0 D 50 50 1 1 W N ENDDRAW ENDDEF # # GNDD # DEF GNDD #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -250 50 H I C CNN F1 "GNDD" 0 -125 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW S -50 -60 50 -80 0 1 10 F P 2 0 1 0 0 0 0 -60 N X GNDD 1 0 0 0 D 50 50 1 1 W N ENDDRAW ENDDEF # # GNDPWR # DEF GNDPWR #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -200 50 H I C CNN F1 "GNDPWR" 0 -130 50 H V C CNN F2 "" 0 -50 50 H I C CNN F3 "" 0 -50 50 H I C CNN DRAW P 2 0 1 0 0 -50 0 0 N P 3 0 1 8 -40 -50 -50 -80 -50 -80 N P 3 0 1 8 -20 -50 -30 -80 -30 -80 N P 3 0 1 8 0 -50 -10 -80 -10 -80 N P 3 0 1 8 20 -50 10 -80 10 -80 N P 3 0 1 8 40 -50 -40 -50 -40 -50 N P 4 0 1 8 40 -50 30 -80 30 -80 30 -80 N X GNDPWR 1 0 0 0 D 50 50 1 1 W N ENDDRAW ENDDEF # # GNDREF # DEF GNDREF #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -250 50 H I C CNN F1 "GNDREF" 0 -150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -25 -75 25 -75 N P 2 0 1 0 -5 -100 5 -100 N P 2 0 1 0 0 -50 0 0 N P 2 0 1 0 50 -50 -50 -50 N X GNDREF 1 0 0 0 D 50 50 1 1 W N ENDDRAW ENDDEF # # GNDS # DEF GNDS #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -250 50 H I C CNN F1 "GNDS" 0 -150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 6 0 1 0 0 0 0 -50 50 -50 0 -100 -50 -50 0 -50 N X GNDS 1 0 0 0 D 50 50 1 1 W N ENDDRAW ENDDEF # # HT # DEF HT #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 120 50 H I C CNN F1 "HT" 0 90 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 3 0 1 0 0 0 0 40 0 40 N P 6 0 1 0 0 40 20 20 0 70 -20 20 0 40 0 40 N X HT 1 0 0 0 U 50 50 0 0 W N ENDDRAW ENDDEF # # LINE # DEF LINE #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "LINE" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X LINE 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # NEUT # DEF NEUT #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "NEUT" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X NEUT 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # PRI_HI # DEF PRI_HI #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "PRI_HI" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X PRI_HI 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # PRI_LO # DEF PRI_LO #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "PRI_LO" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 0 0 0 100 N P 4 0 1 0 30 50 -30 50 0 100 30 50 F X PRI_LO 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # PRI_MID # DEF PRI_MID #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "PRI_MID" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X PRI_MID 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # PWR_FLAG # DEF PWR_FLAG #FLG 0 0 N N 1 F P F0 "#FLG" 0 75 50 H I C CNN F1 "PWR_FLAG" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 6 0 1 0 0 0 0 50 -40 75 0 100 40 75 0 50 N X pwr 1 0 0 0 U 50 50 0 0 w ENDDRAW ENDDEF # # VAA # DEF VAA #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "VAA" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X VAA 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # VAC # DEF VAC #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -100 50 H I C CNN F1 "VAC" 0 250 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW A -25 125 25 1 1799 0 1 10 N 0 125 -50 125 A 25 125 25 -1799 -1 0 1 10 N 0 125 50 125 C 0 125 75 0 1 10 N P 2 0 1 0 0 0 0 50 N X VAC 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # VBUS # DEF VBUS #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "VBUS" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X VBUS 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # VCC # DEF VCC #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "VCC" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X VCC 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # VCCQ # DEF VCCQ #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "VCCQ" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X VCCQ 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # VCOM # DEF VCOM #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "VCOM" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 0 0 0 100 N P 4 0 1 0 30 50 -30 50 0 100 30 50 F X VCOM 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # VD # DEF VD #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "VD" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X VD 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # VDC # DEF VDC #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -100 50 H I C CNN F1 "VDC" 0 250 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X VDC 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # VDD # DEF VDD #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "VDD" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X VDD 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # VDDA # DEF VDDA #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "VDDA" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X VDDA 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # VDDF # DEF VDDF #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "VDDF" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X VDDF 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # VEE # DEF VEE #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "VEE" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 0 0 0 100 N P 4 0 1 0 30 50 -30 50 0 100 30 50 F X VEE 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # VMEM # DEF VMEM #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "VMEM" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X VMEM 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # VPP # DEF VPP #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "VPP" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X VPP 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # VS # DEF VS #PWR 0 0 Y Y 1 F P F0 "#PWR" -200 -150 50 H I C CNN F1 "VS" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 0 0 0 100 N P 4 0 1 0 30 50 -30 50 0 100 30 50 F X VS 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # VSS # DEF VSS #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "VSS" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 0 0 0 100 N P 4 0 1 0 30 50 -30 50 0 100 30 50 F X VSS 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # VSSA # DEF VSSA #PWR 0 0 Y Y 1 F P F0 "#PWR" 0 -150 50 H I C CNN F1 "VSSA" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 0 0 0 100 N P 4 0 1 0 30 50 -30 50 0 100 30 50 F X VSSA 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # # Vdrive # DEF Vdrive #PWR 0 0 Y Y 1 F P F0 "#PWR" -200 -150 50 H I C CNN F1 "Vdrive" 0 150 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -30 50 0 100 N P 2 0 1 0 0 0 0 100 N P 2 0 1 0 0 100 30 50 N X Vdrive 1 0 0 0 U 50 50 1 1 W N ENDDRAW ENDDEF # #End Library ================================================ FILE: esim-cloud-backend/kicad-symbols/default/pspice.dcm ================================================ EESchema-DOCLIB Version 2.0 # $CMP 0 D 0V reference potential for simulation K simulation F ~ $ENDCMP # $CMP C D Capacitor symbol for simulation only K simulation F ~ $ENDCMP # $CMP CAP D Capacitor symbol for simulation only K simulation F ~ $ENDCMP # $CMP DIODE D Diode symbol for simulation only. Pin order incompatible with official kicad footprints K simulation F ~ $ENDCMP # $CMP INDUCTOR D Inductor symbol for simulation only K simulation F ~ $ENDCMP # $CMP ISOURCE D Current source symbol for simulation only K simulation F ~ $ENDCMP # $CMP MNMOS D N-channel MOSFET symbol for simulation only K mosfet nmos simulation F ~ $ENDCMP # $CMP MPMOS D P-channel MOSFET symbol for simulation only K mosfet pmos simulation F ~ $ENDCMP # $CMP OPAMP D OPAmp symbol for simulation only K simulation F ~ $ENDCMP # $CMP QNPN D Bipolar transistor symbol for simulation only K simulation F ~ $ENDCMP # $CMP QPNP D Bipolar transistor symbol for simulation only K simulstaion F ~ $ENDCMP # $CMP R D Resistor symbol for simulation only K resistor simulation F ~ $ENDCMP # $CMP VSOURCE D Voltage source symbol for simulation only K simulation F ~ $ENDCMP # #End Doc Library ================================================ FILE: esim-cloud-backend/kicad-symbols/default/pspice.lib ================================================ EESchema-LIBRARY Version 2.4 #encoding utf-8 # # 0 # DEF 0 #GND 0 0 Y Y 1 F P F0 "#GND" 0 -100 50 H I C CNN F1 "0" 0 -70 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 4 0 1 0 -50 0 0 -50 50 0 -50 0 N X 0 1 0 0 0 R 40 40 1 1 W N ENDDRAW ENDDEF # # CAP # DEF CAP C 0 10 Y Y 1 F N F0 "C" 100 150 50 V V C CNN F1 "CAP" 100 -150 50 V V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN ALIAS C DRAW P 2 0 1 0 -150 -50 150 -50 N P 2 0 1 0 -150 50 150 50 N X ~ 1 0 250 200 D 40 40 1 1 P X ~ 2 0 -250 200 U 40 40 1 1 P ENDDRAW ENDDEF # # DIODE # DEF DIODE D 0 40 Y N 1 F N F0 "D" 0 150 50 H V C CNN F1 "DIODE" 0 -175 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 75 100 75 -100 N P 3 0 1 0 -75 100 -75 -100 75 0 F X K 1 -200 0 150 R 50 50 1 1 I X A 2 200 0 150 L 50 50 1 1 I ENDDRAW ENDDEF # # INDUCTOR # DEF INDUCTOR L 0 0 N Y 1 F N F0 "L" 0 100 50 H V C CNN F1 "INDUCTOR" 0 -50 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW A -150 0 50 1 1799 0 1 0 N -100 0 -200 0 A -50 0 50 1 1799 0 1 0 N 0 0 -100 0 A 50 0 50 1 1799 0 1 0 N 100 0 0 0 A 150 0 50 1 1799 0 1 0 N 200 0 100 0 X 1 1 -250 0 50 R 30 30 1 1 I X 2 2 250 0 50 L 30 30 1 1 I ENDDRAW ENDDEF # # ISOURCE # DEF ISOURCE I 0 40 Y Y 1 F N F0 "I" -300 350 50 H V C CNN F1 "ISOURCE" 0 0 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 0 -100 200 0 1 0 N C 0 100 202 0 1 0 N T 0 -270 -10 50 0 0 1 I Normal 0 C C P 2 0 1 0 -300 -200 -300 200 F P 3 0 1 0 -350 200 -300 300 -250 200 F X E1 1 0 400 100 D 50 50 1 1 I X E2 2 0 -400 100 U 50 50 1 1 I ENDDRAW ENDDEF # # MNMOS # DEF MNMOS M 0 0 Y Y 1 F N F0 "M" 300 50 50 H V L CNN F1 "MNMOS" 300 -50 50 H V L CNN F2 "" -25 0 50 H I C CNN F3 "" -25 0 50 H I C CNN DRAW P 2 0 1 0 -50 -100 -50 100 N P 2 0 1 0 -25 -100 100 -100 N P 2 0 1 0 100 100 -25 100 N P 2 0 1 0 200 0 -25 0 N P 4 0 1 0 -25 0 50 25 50 -25 -25 0 F P 2 1 1 0 -25 -100 -25 100 N X D 1 100 200 100 D 50 50 1 1 P X G 2 -200 0 150 R 50 50 1 1 I X S 3 100 -200 100 U 50 50 1 1 P X B 4 200 -200 200 U 50 50 1 1 I ENDDRAW ENDDEF # # MPMOS # DEF MPMOS M 0 0 Y Y 1 F N F0 "M" 300 50 50 H V L CNN F1 "MPMOS" 300 -50 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 -50 100 -50 -100 N P 2 0 1 0 -25 -100 100 -100 N P 2 0 1 0 100 100 -25 100 N P 2 0 1 0 200 0 -25 0 N P 4 0 1 0 200 0 125 25 125 -25 200 0 F P 2 1 1 0 -25 -100 -25 100 N X D 1 100 -200 100 U 50 50 1 1 P X G 2 -200 0 150 R 50 50 1 1 I X S 3 100 200 100 D 50 50 1 1 P X B 4 200 200 200 D 50 50 1 1 I ENDDRAW ENDDEF # # OPAMP # DEF OPAMP U 0 10 Y Y 1 F N F0 "U" 150 125 50 H V L CNN F1 "OPAMP" 150 -125 50 H V L CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 4 0 1 10 200 0 -200 200 -200 -200 200 0 f X + 1 -300 100 100 R 50 50 1 1 I X - 2 -300 -100 100 R 50 50 1 1 I X ~ 3 300 0 100 L 50 50 1 1 O X V+ 4 -100 300 150 D 50 50 1 1 W X V- 5 -100 -300 150 U 50 50 1 1 W ENDDRAW ENDDEF # # QNPN # DEF QNPN Q 0 0 Y Y 1 F N F0 "Q" -100 300 50 H V C CNN F1 "QNPN" -100 200 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 0 0 0 0 150 -150 N P 4 0 0 0 150 -150 150 -50 50 -150 150 -150 F P 2 0 1 0 0 -150 0 150 N P 2 0 1 0 0 0 150 150 N P 4 0 1 0 -100 -150 0 -150 0 -150 0 -150 N X C 1 150 350 200 D 40 40 1 1 P X B 2 -300 0 300 R 40 40 1 1 I X E 3 150 -350 200 U 40 40 1 1 P X Substrat 4 -100 -350 200 U 50 20 1 1 I ENDDRAW ENDDEF # # QPNP # DEF QPNP Q 0 0 Y Y 1 F N F0 "Q" -100 300 50 H V C CNN F1 "QPNP" -100 200 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW P 2 0 1 0 0 -150 0 150 N P 2 0 1 0 0 0 150 -150 N P 2 0 1 0 0 0 150 150 N P 3 0 1 0 -100 -150 0 -150 0 -150 N P 4 0 1 0 120 -180 180 -120 85 -85 120 -180 F X C 1 150 350 200 D 40 40 1 1 C X B 2 -300 0 300 R 40 40 1 1 I X E 3 150 -350 200 U 40 40 1 1 E X Substrat 4 -100 -350 200 U 50 20 1 1 I ENDDRAW ENDDEF # # R # DEF R R 0 0 N Y 1 F N F0 "R" 80 0 50 V V C CNN F1 "R" 0 0 50 V V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW S -40 150 40 -150 0 1 0 N X ~ 1 0 250 100 D 50 50 1 1 P X ~ 2 0 -250 100 U 50 50 1 1 P ENDDRAW ENDDEF # # VSOURCE # DEF VSOURCE V 0 40 Y Y 1 F N F0 "V" -250 300 50 H V C CNN F1 "VSOURCE" 0 0 50 H V C CNN F2 "" 0 0 50 H I C CNN F3 "" 0 0 50 H I C CNN DRAW C 0 0 200 0 1 0 N T 0 -320 -10 50 0 0 1 V Normal 0 C C P 2 0 1 0 -250 -250 -250 150 F P 3 0 1 0 -300 150 -250 250 -200 150 F X E1 1 0 300 100 D 50 50 1 1 I X E2 2 0 -300 100 U 50 50 1 1 I ENDDRAW ENDDEF # #End Library ================================================ FILE: esim-cloud-backend/libAPI/__init__.py ================================================ ================================================ FILE: esim-cloud-backend/libAPI/admin.py ================================================ from libAPI.lib_utils import handle_uploaded_libs from django.contrib import admin, messages from django.contrib.auth import get_user_model from libAPI.models import LibraryComponent, \ Library, \ LibrarySet, \ FavouriteComponent from libAPI.forms import LibrarySetForm from inline_actions.admin import InlineActionsMixin from inline_actions.admin import InlineActionsModelAdminMixin from django.shortcuts import redirect from django.utils.safestring import mark_safe from esimCloud import settings import os @admin.register(LibraryComponent) class LibraryComponentAdmin(admin.ModelAdmin): list_display = ('full_name', 'image_tag', 'svg_path', 'keyword', 'description') list_filter = ('symbol_prefix', 'component_library__library_name') search_fields = ('keyword', 'name') class ComponentInline(admin.TabularInline): model = LibraryComponent extra = 1 @admin.register(Library) class LibraryAdmin(admin.ModelAdmin): inlines = (ComponentInline, ) class LibraryInline(InlineActionsMixin, admin.TabularInline): model = Library extra = 0 show_change_link = True inline_actions = ['toggle_default'] def toggle_default(self, request, obj, parent_obj=None): try: library_set = LibrarySet.objects.filter( user=parent_obj.user, default=not parent_obj.default )[0] except IndexError: library_set = LibrarySet( name=parent_obj.user.username[0:24], default=not parent_obj.default, user=parent_obj.user ) library_set.save() messages.info(request, mark_safe( f"Library {obj.library_name} moved to \ \ {library_set.name}.")) obj.library_set = library_set obj.save() def get_toggle_default_label(self, obj): if obj.library_set.default: return 'Remove from Defaults' return 'Add to Defaults' class LibrarySetAdmin(InlineActionsModelAdminMixin, admin.ModelAdmin): model = LibrarySet list_display = ('name', 'user', 'default') inlines = (LibraryInline, ) def get_form(self, request, obj=None, **kwargs): return LibrarySetForm def save_model(self, request, obj, form, change): # For new library set instance User = get_user_model() user = User.objects.get(id=request.user.id) if obj.pk is None: obj = LibrarySet( user=user, default=True if request.POST.get('default') else False, name=request.POST.get('name', '')[0:24] ) obj.save() # If the library set is being changed else: user = (LibrarySet.objects.get(id=obj.pk)).user obj.user = user obj.save() files = request.FILES.getlist('files') if len(files) != 0: path = os.path.join( settings.BASE_DIR[6:], 'kicad-symbols', obj.user.username + '-' + obj.name) handle_uploaded_libs(obj, path, files) # defined in ./lib_utils.py return redirect('/api/admin/libAPI/libraryset/' + str(obj.id)) admin.site.register(LibrarySet, LibrarySetAdmin) @admin.register(FavouriteComponent) class FavouriteComponentAdmin(admin.ModelAdmin): list_display = ('owner', 'last_change') search_fields = ('owner', 'component') ================================================ FILE: esim-cloud-backend/libAPI/apps.py ================================================ from django.apps import AppConfig class LibapiConfig(AppConfig): name = 'libAPI' ================================================ FILE: esim-cloud-backend/libAPI/dbrouters.py ================================================ class mongoRouter: """ A router to control all database operations on models in the auth and contenttypes applications. """ route_app_labels = {'libAPI'} def db_for_read(self, model, **hints): """ Attempts to read auth and contenttypes models go to auth_db. """ if model._meta.app_label in self.route_app_labels: return 'mongodb' return None def db_for_write(self, model, **hints): """ Attempts to write auth and contenttypes models go to auth_db. """ if model._meta.app_label in self.route_app_labels: return 'mongodb' return None def allow_relation(self, obj1, obj2, **hints): """ Allow relations if a model in the auth or contenttypes apps is involved. """ if ( obj1._meta.app_label in self.route_app_labels or obj2._meta.app_label in self.route_app_labels ): return True return None def allow_migrate(self, db, app_label, model_name=None, **hints): """ Make sure the auth and contenttypes apps only appear in the 'auth_db' database. """ if app_label in self.route_app_labels: return db == 'mongodb' return None ================================================ FILE: esim-cloud-backend/libAPI/forms.py ================================================ from libAPI.models import LibrarySet from django import forms class LibrarySetForm(forms.ModelForm): files = forms.FileField( required=False, widget=forms.ClearableFileInput(attrs={'multiple': True}) ) def __init__(self, *args, **kwargs): super(LibrarySetForm, self).__init__(*args, **kwargs) instance = getattr(self, 'instance', None) if instance and instance.pk: self.fields['user'].widget.attrs['disabled'] = True self.fields['user'].required = False self.fields['name'].widget.attrs['readonly'] = True class Meta: model = LibrarySet fields = ('name', 'user', 'default', 'files') ================================================ FILE: esim-cloud-backend/libAPI/helper/main.py ================================================ from .plotter import SvgPlotter from .parser import Parser import os import sys # import drawSvg as draw import drawSvg as draw class SvgGenerator: def __init__(self): self.CANVAS_HEIGHT = 2000 self.CANVAS_WIDTH = 1500 self.PART_NUMBER = "1" self.DMG_NUMBER = "1" self.DEFAULT_PEN_WIDTH = "6" self.PIN_NAME_PADDING = 13 self.SHOW_TEXT = False self.SHOW_PIN_NUMBER = False self.SHOW_PIN_NAME = False self.SHOW_PIN_NOT_CONNECTED = False self.SVG_SCALE = 1 # set PIN_NAME_TEXT_SIZE = 0 to use default text_size self.PIN_NAME_TEXT_SIZE = 35 self.NAME_OF_LIBS_TO_IGNORE_PIN_NAME = ["power"] # some symbols dont have dmg 2. # assuming dmg 2 is present. # this will be changed to False later if we find # that dmg 2 is not present. self.IS_DMG_2_PRESENT = False self.plotter = SvgPlotter() self.parser = Parser() def match_part_dmg(self, part, dmg): """ Check if part matches or not """ if (part == "0" or part == self.PART_NUMBER) and ( dmg == "0" or dmg == self.DMG_NUMBER ): return True return False def save_svg(self, d, name_of_symbol, save_path, pin_number_positions, symbol_prefix, dimension, run, part, dmg): """ save svg""" # print(pin_number_positions) # check if symbols directory is present or not. if run == 0: return else: path_to_svg = f"{save_path}/{name_of_symbol}.svg" d.saveSvg(path_to_svg) # after saving svg open it again and embedd metadata. # print(pin_number_positions) elem = "" for x in range(len(pin_number_positions)): pin = pin_number_positions[x] pin_number = pin["pinNumber"] x = pin['x'] y = pin['y'] pin_type = pin['type'] pinName = pin["pinName"] pinLength = pin["pinLength"] pinOrientation = pin["pinOrientation"] pinShape = pin["shape_of_pin"] elem += f"""{x}{y}{pin_type} {pinName}{pinOrientation} {pinLength}{pinShape} """ # save the above elem in the same svg file. fd = open(path_to_svg, 'r') s = fd.readlines() if(s[-1].strip('\n') != ''): while s[-1].strip("\n") != '': s.pop(-1) s.pop(-1) fd = open(path_to_svg, 'w') for i in range(len(s)): fd.write(s[i]) fd.write( f'') # noqa fd.write(elem) fd.write("") fd.close() def generate_svg_from_lib(self, file_path, output_path): """ Takes .lib file as input and generates svg from the .lib file. """ data = self.parser.extract_data_from_lib(file_path) dcm_path = file_path.rsplit(".", 1) dcm_path = dcm_path[0] + ".dcm" folder_name = file_path.split('/')[-1].split(".")[0] if(folder_name in self.NAME_OF_LIBS_TO_IGNORE_PIN_NAME): self.SHOW_PIN_NAME = False dcm_data = self.parser.extract_data_from_dcm(dcm_path) if len(dcm_data) <= 0: isDcmPresent = False else: isDcmPresent = True # folder_name is also same as the file name without extension component_data = {} # loop through all the components in that library file. for i in range(len(data)): # initialize the drawing canvas.we need to initialize and save svg # for each components. DEF_LINE = data[i]["def"] F0_LINE = data[i]["fn"][0] # noqa F1_LINE = data[i]["fn"][1] # noqa # footprint name if present F2_LINE = data[i]["fn"][2] # noqa # relative path to datasheet if prsent F3_LINE = data[i]["fn"][3] # noqa # DEF 14529 U 0 40 Y Y 1 L N # ['DEF', '14529', 'U', '0', '40', 'Y', 'Y', '1', 'L', 'N'] name_of_symbol = DEF_LINE[1] # symbol_prefix is 'U' for integrated circiut and 'R' for resister symbol_prefix = DEF_LINE[2] # noqa # The third paramater is always 0 pin_name_offset = DEF_LINE[4] show_pin_number = DEF_LINE[5] # noqa show_pin_name = DEF_LINE[6] # noqa # this tells the number of parts in the symbol. number_of_parts_in_symbol = DEF_LINE[7] is_dmg_2 = False draw_instructions = data[i]["draw"] for dm in range(1, 2 + 1): self.DMG_NUMBER = str(dm) if not is_dmg_2 and dm == 2: break else: for z in range(1, int(number_of_parts_in_symbol) + 1): pin_number_positions = [] my_height = 0 my_width = 0 for run in range(0, 2): # initialize canvas here. d = draw.Drawing( my_width, my_height, origin="center", displayInline=False, ) d.setPixelScale(s=self.SVG_SCALE) self.PART_NUMBER = str(z) fn_instructions = data[i]["fn"] for index in range(len(fn_instructions)): text = fn_instructions[index][1] x = fn_instructions[index][2] y = fn_instructions[index][3] text_size = fn_instructions[index][4] orientation = fn_instructions[index][5] # noqa isVisible = fn_instructions[index][6] == "V" hjustify = fn_instructions[index][7] # noqa vjustify = fn_instructions[index][8][0] # noqa isItalic = fn_instructions[index][8][1] == "I" # noqa isBold = fn_instructions[index][8][2] == "B" # noqa if fn_instructions[index][0] == "F0": text = text.strip('"') # convert to alphabet equivalent of number # ascii 65 -> A text = f"{text}{dm}:{chr(64+z)}" if isVisible and self.SHOW_TEXT: d = self.plotter.draw_text(d, text, x, y, text_size) for x in range(len(draw_instructions)): # print(data[i][x]) current_instruction = draw_instructions[x] shape = current_instruction[0] # (d,pinName,pinNumber,x1,y1,length=0,orientation='R',stroke="black",stroke_width=5) if shape == "X": # its a pin # drawing using a line pinName = current_instruction[1] pinNumber = current_instruction[2] x_pos = current_instruction[3] y_pos = current_instruction[4] pin_length = current_instruction[5] pin_orientation = current_instruction[6] part = current_instruction[9] dmg = current_instruction[10] type_of_pin = current_instruction[11] if dmg == "2": is_dmg_2 = True # The 12th index may or maynot be present # in every # instruction. try: shape_of_pin = current_instruction[12] except IndexError: shape_of_pin = "" if not self.match_part_dmg(part, dmg): continue pin_name_ofset = str( int(pin_name_offset) + len(pinName) * self.PIN_NAME_PADDING ) if run == 1: pin_number_positions.append({ "pinNumber": pinNumber, "x": x_pos, "y": y_pos, "type": type_of_pin, "pinName": pinName, "pinOrientation": pin_orientation, "pinLength": pin_length, "shape_of_pin": shape_of_pin, }) if not self.SHOW_PIN_NUMBER: pinNumber = "" if (not self.SHOW_PIN_NAME and not self.SHOW_PIN_NOT_CONNECTED): # noqa pinName = "" if pinName == "NC": pinName = "" if self.PIN_NAME_TEXT_SIZE != 0: text_size = self.PIN_NAME_TEXT_SIZE d = self.plotter.drawPin( d, pinName, pinNumber, x_pos, y_pos, pin_name_ofset, length=pin_length, orientation=pin_orientation, text_size=text_size, shape_of_pin=shape_of_pin, ) elif shape == "S": # its a rectangle x1 = current_instruction[1] y1 = current_instruction[2] x2 = current_instruction[3] y2 = current_instruction[4] fill_shape = current_instruction[8] pen_width = current_instruction[7] part = current_instruction[5] dmg = current_instruction[6] if dmg == "2": is_dmg_2 = True if pen_width == "0": pen_width = self.DEFAULT_PEN_WIDTH if not self.match_part_dmg(part, dmg): continue d = self.plotter.drawRec( d, x1, y1, x2, y2, fill_shape, pen_width ) elif shape == "C": # its a circle cx = current_instruction[1] cy = current_instruction[2] r = current_instruction[3] pen_width = current_instruction[6] fill_shape = current_instruction[7] part = current_instruction[4] dmg = current_instruction[5] if dmg == "2": is_dmg_2 = True if pen_width == "0": pen_width = self.DEFAULT_PEN_WIDTH if not self.match_part_dmg(part, dmg): continue d = self.plotter.drawCircle( d, cx, cy, r, fill=fill_shape, pen=pen_width ) elif shape == "A": # its an arc cx = current_instruction[1] cy = current_instruction[2] r = current_instruction[3] start_deg = current_instruction[4] end_deg = current_instruction[5] pen_width = current_instruction[8] fill = current_instruction[9] part = current_instruction[6] dmg = current_instruction[7] x_start = current_instruction[10] y_start = current_instruction[11] x_end = current_instruction[12] y_end = current_instruction[13] if dmg == "2": is_dmg_2 = True if pen_width == "0": pen_width = self.DEFAULT_PEN_WIDTH if not self.match_part_dmg(part, dmg): continue d = self.plotter.drawArc( d, cx, cy, r, start_deg, end_deg, x_start, y_start, x_end, y_end, pen_width, fill ) elif shape == "P": # its a polygon # P 2 2 1 10 -150 -175 -25 -175 f vertices_count = current_instruction[1] pen_width = current_instruction[4] part = current_instruction[2] dmg = current_instruction[3] if dmg == "2": is_dmg_2 = True if pen_width == "0": pen_width = self.DEFAULT_PEN_WIDTH if not self.match_part_dmg(part, dmg): continue fill = current_instruction[ len(current_instruction) - 1 ] vertices_list = [] for j in range(5, (len(current_instruction) - 1), 2): point = ( current_instruction[j], current_instruction[j + 1], ) vertices_list.append(point) d = self.plotter.drawPolygon( d, vertices_count, pen_width, vertices_list, fill ) elif shape == "T": # its a text pass else: pass # check if user inputed path exists or not if not os.path.exists(output_path): try: os.mkdir(output_path) except OSError as error: print(error) # create a folder with the name of the input # file if not already exist. save_path = f"{output_path}/{folder_name}" if not os.path.exists(save_path): try: os.mkdir(save_path) except OSError as error: print(error) svg_boundary = self.plotter.get_svg_boundary() top = svg_boundary["top"] right = svg_boundary["right"] bottom = svg_boundary["bottom"] left = svg_boundary["left"] if abs(top) != abs(bottom): # the svg is not symmetric # then taking the greater side greater_side = abs(top) if abs( top) > abs(bottom) else abs(bottom) my_height = greater_side * 2 else: height = abs(top - bottom) if height <= 0: height = 200 my_height = height if abs(left) != abs(right): # the svg is not symmetric # then taking the greater side greater_side = abs(left) if abs( left) > abs(right) else abs(right) my_width = greater_side * 2 else: width = abs(left - right) if width <= 0: width = 200 my_width = width name = (f"{symbol_prefix}" + f"-{name_of_symbol}-{dm}-" + f"{chr(64+z)}") if(not isDcmPresent): # populate dcm_data with fake info for ix in range(len(data)): dummy_dcm = {'name': '', 'D': '', 'K': '', 'F': ''} dummy_dcm['name'] = data[ix]['def'][1] dcm_data.append(dummy_dcm) if dm == 1 and z == 1: # run twice to save a thumbnail image for sav_svg in range(0, 2): if sav_svg == 1: # change name as thumbnail name = (f"{symbol_prefix}" + f"-{name_of_symbol}-{dm}-" + f"{chr(64+z)}_thumbnail") self.save_svg(d, name, save_path, pin_number_positions, symbol_prefix, (my_width, my_height), run, chr(64+z), dm, ) # reset svg_boundary set all # paramerers to 0 self.plotter.reset_svg_boundary() cmp_data = {} if '#' in symbol_prefix: symbol_prefix = symbol_prefix.replace( '#', '') for co in range(0, len(dcm_data)): comp = dcm_data[co] if(name_of_symbol == comp["name"]): cmp_data["name"] = comp["name"] cmp_data["full_name"] = name if (name != '') else comp['name'] # noqa if 'K' in comp.keys(): cmp_data["keyword"] = comp["K"] else: cmp_data["keyword"] = "" if 'D' in comp.keys(): cmp_data["description"] \ = comp["D"] else: cmp_data["description"] = "" if 'F' in comp.keys(): cmp_data["data_link"] \ = comp["F"] else: cmp_data["data_link"] = "" if 'F' in comp.keys(): cmp_data["data_link"] \ = comp["F"] else: cmp_data["data_link"] = "" cmp_data["symbol_prefix"] \ = symbol_prefix cmp_data["alias"] \ = data[i]["alias"] cmp_data["dmg"] = dm cmp_data["part"] = chr(64+z) component_data[cmp_data["full_name"]] = cmp_data # noqa else: self.save_svg(d, name, save_path, pin_number_positions, symbol_prefix, (my_width, my_height), run, chr(64+z), dm, ) # reset svg_boundary set all paramerers to 0 self.plotter.reset_svg_boundary() cmp_data = {} if '#' in symbol_prefix: symbol_prefix = symbol_prefix.replace( '#', '') for co in range(0, len(dcm_data)): comp = dcm_data[co] if(name_of_symbol == comp["name"]): cmp_data["name"] = comp["name"] cmp_data["full_name"] = name if (name != '') else comp['name'] # noqa if 'K' in comp.keys(): cmp_data["keyword"] = comp["K"] else: cmp_data["keyword"] = "" if 'D' in comp.keys(): cmp_data["description"] = comp["D"] else: cmp_data["description"] = "" if 'F' in comp.keys(): cmp_data["data_link"] = comp["F"] else: cmp_data["data_link"] = "" if 'F' in comp.keys(): cmp_data["data_link"] = comp["F"] else: cmp_data["data_link"] = "" cmp_data["symbol_prefix"] \ = symbol_prefix cmp_data["alias"] = data[i]["alias"] cmp_data["dmg"] = dm cmp_data["part"] = chr(64+z) component_data[cmp_data["full_name"]] = cmp_data # noqa return component_data def generate_svg_and_save_to_folder(input_file, output_folder): svg_gen = SvgGenerator() return svg_gen.generate_svg_from_lib(input_file, output_folder) if __name__ == "__main__": # Takes Libraries as command line arguments, # Only if script is run on command line if(len(sys.argv)) != 3: print("Usage: script.py ") sys.exit(1) generate_svg_and_save_to_folder(sys.argv[1], sys.argv[2]) print('Processed', sys.argv[1]) ================================================ FILE: esim-cloud-backend/libAPI/helper/parser.py ================================================ import re class Parser: def extract_data_from_lib(self, filename): def_flag = False with open(filename) as file: file_contents = file.readlines() data = [] for line in file_contents: # check for blank lines. if line.strip() != "": if line.find("DEF") == 0: instruction = {"def": [], "fn": [], "alias": [], "draw": []} instruction["def"] = line.strip().split(" ") def_flag = True elif line.find("ALIAS") == 0: instruction["alias"] = line.strip().split(" ") if len(instruction["alias"]) > 0: # remove the first element which is text ALIAS instruction["alias"].pop(0) elif line.find("ENDDEF") == 0: data.append(instruction) def_flag = False # noqa elif re.match(r"F[0-9]+", line): instruction["fn"].append(line.strip().split(" ")) elif line.startswith(("A", "C", "P", "S", "T", "B", "X")): instruction["draw"].append(line.strip().split(" ")) else: pass return data def extract_data_from_dcm(self, filename): with open(filename) as file: file_contents = file.readlines() # data = [] # print(file_contents) dcm_data = [] for line in file_contents: if('$CMP' in line): # line = line.strip().split(' ') s2 = ' '.join(line.split()[1:]) dcm_component = {"name": s2} elif('$ENDCMP' in line): # line = line.strip().split(' ') s2 = ' '.join(line.split()[1:]) dcm_data.append(dcm_component) elif(line[0] == 'D'): # description s2 = ' '.join(line.split()[1:]) dcm_component["D"] = s2 elif(line[0] == 'K'): # keyword # line = line.strip().split(' ') s2 = ' '.join(line.split()[1:]) dcm_component["K"] = s2 elif(line[0] == 'F'): # datasheet_link # line = line.strip().split(' ') s2 = ' '.join(line.split()[1:]) dcm_component["F"] = s2 return dcm_data if __name__ == "__main__": parser = Parser() # data = parser.extract_data_from_lib("./sample_lib/4002.lib") data = parser.extract_data_from_lib("./sample_lib/4xxx.lib") # print(data) print(data) ================================================ FILE: esim-cloud-backend/libAPI/helper/plotter.py ================================================ import drawSvg as draw class SvgPlotter: svg_boundary = { "top": 0, "right": 0, "bottom": 0, "left": 0, } def __init__(self): self.STROKE_COLOR = "black" self.PIN_NAME_COLOR = "black" self.PIN_NUMBER_COLOR = "black" self.PIN_NUMBER_OFFSET = 17 self.RADIUS_OF_NOT_GATE = 25 self.FILL_NOT_GATE = "F" # increase ratio to reduce pin Number size self.TEXT_SIZE_REDUCE_RATION = 1.5 # def update_svg_boundary(self,value,axis): # # axis can be 'x' or 'y' # if axis == 'x': # # update along x axis # if(value > 0): # # right side # # check if passed value is greater than # # current value # if(value > self.svg_boundary["right"]): # self.svg_boundary["right"] = value # else: # # left side # # check if passed values is smaller # # than the current value # if(value < self.svg_boundary["left"]): # self.svg_boundary["left"] = value # if axis == 'y': # # update along y axis # if(value > 0): # # top side # # check if passed value is greater than # # current value # if(value > self.svg_boundary["top"]): # self.svg_boundary["top"] = value # else: # # bottom side # if(value < self.svg_boundary["bottom"]): # self.svg_boundary["bottom"] = value def update_svg_boundary(self, vertex_list): for point in range(len(vertex_list)): x_value = int(vertex_list[point][0]) y_value = int(vertex_list[point][1]) if(x_value > 0): # right side # check if passed value is greater than # current value if(x_value > self.svg_boundary["right"]): self.svg_boundary["right"] = x_value else: # left side # check if passed values is smaller # than the current value if(x_value < self.svg_boundary["left"]): self.svg_boundary["left"] = x_value if(y_value > 0): # top side # check if passed value is greater than # current value if(y_value > self.svg_boundary["top"]): self.svg_boundary["top"] = y_value else: # bottom side if(y_value < self.svg_boundary["bottom"]): self.svg_boundary["bottom"] = y_value def get_svg_boundary(self,): return self.svg_boundary def reset_svg_boundary(self,): self.svg_boundary = { "top": 0, "right": 0, "bottom": 0, "left": 0, } """pen-parameter is the thickness of the pen,when zero the default pen width is used. The fill parameter is “f” for a filled shape in the background colour, “F” for a filled shape in the pen colour, or “N” for an unfilled shape. """ def draw_text(self, d, text, x, y, text_size, fill="black"): x = int(x) y = int(y) text_size = int(text_size) text = text.strip('"') d.append(draw.Text(text, text_size, x, y, center=0.6)) return d def normalize_angle(self, angle): return 360 + angle def drawCircle(self, d, x, y, r, fill="f", pen=5): pen = int(pen) if fill == "f": kwargs = {"fill_opacity": 0} elif fill == "F": kwargs = {"fill": self.STROKE_COLOR} else: kwargs = {"fill_opacity": 0} x = int(x) y = int(y) r = int(r) d.append( draw.Circle(x, y, r, stroke_width=pen, stroke=self.STROKE_COLOR, **kwargs) ) v_list = [(x, y+r), (x, y-r), (x + r, y), (x - r, y)] self.update_svg_boundary(v_list) return d def drawRec(self, d, x1, y1, x2, y2, fill="f", pen=5, ): # 'f'->filled shape in background color # 'F' -> filled shape in pen color # 'N' -> unfilled shape # pen->stroke_width pen = int(pen) x1 = int(x1) y1 = int(y1) x2 = int(x2) y2 = int(y2) # self.update_svg_boundary(x1,'x') # self.update_svg_boundary(y1,'y') # self.update_svg_boundary(x2,'x') # self.update_svg_boundary(y2,'y') if fill == "f": kwargs = {"fill_opacity": 0} elif fill == "F": kwargs = {"fill": self.STROKE_COLOR} else: kwargs = {"fill_opacity": 0} d.append( draw.Lines( x1, y1, x2, y1, x2, y2, x1, y2, x1, y1, stroke_width=pen, stroke=self.STROKE_COLOR, **kwargs ) ) self.update_svg_boundary([(x1, y1), (x2, y2)]) return d # A X Y radius start end part dmg pen fill Xstart Ystart Xend Yend def drawArc(self, d, cx, cy, r, start_deg, end_deg, x_start, y_start, x_end, y_end, pen=5, fill="f", ): cx = int(cx) cy = int(cy) r = int(r) pen = int(pen) start_deg = int(start_deg) * 0.1 end_deg = int(end_deg) * 0.1 start_end_points = [(int(x_start), int(y_start)), (int(x_end), int(y_end))] self.update_svg_boundary(start_end_points) if start_deg < 0: start_deg = self.normalize_angle(start_deg) if end_deg < 0: end_deg = self.normalize_angle(end_deg) if start_deg > end_deg: # swap temp = start_deg start_deg = end_deg end_deg = temp difference = end_deg - start_deg cw = False if abs(difference) > 180: cw = True if fill == "f": kwargs = {"fill_opacity": 0} elif fill == "F": kwargs = {"fill": self.STROKE_COLOR} else: kwargs = {"fill_opacity": 0} d.append( draw.Arc( cx, cy, r, start_deg, end_deg, cw=cw, stroke=self.STROKE_COLOR, stroke_width=pen, **kwargs ) ) return d # P count part dmg pen X Y ... fill def drawPolygon(self, d, vertices_count, pen=5, vertices_list=[], fill="f", ): pen = int(pen) # only fill the polygon if its implicitly closed # # unpack arguments in list using *operator # kwargs = {} if fill == 'F': # fill the shape kwargs["fill"] = self.STROKE_COLOR if fill == 'f' or fill == 'N': # dont fill the shape kwargs["fill_opacity"] = 0 arg = [] for i in range(0, len(vertices_list)): for index in range(0, 2): arg.append(int(vertices_list[i][index])) self.update_svg_boundary(vertices_list) d.append(draw.Lines(*arg, close=False, stroke_width=pen, stroke=self.STROKE_COLOR, **kwargs)) return d def draw_pin_shape(self, d, x, y, ox, oy, pin_orientation, shape_of_pin, pen=5): # inverted pin draw a circle of radius 10 at the end of the pin. if shape_of_pin == "I": # inverted (not gate) d = self.drawCircle( d, x, y, self.RADIUS_OF_NOT_GATE, fill=self.FILL_NOT_GATE ) elif shape_of_pin == "C": # clock # ox oy are original values x = ox y = oy clock_pin_padding = 30 if pin_orientation == "R": # add in x direction x1 = x + clock_pin_padding y1 = y x2 = x y2 = y + clock_pin_padding x3 = x y3 = y - clock_pin_padding arg = [x1, y1, x2, y2, x3, y3, x1, y1] d.append(draw.Lines(*arg, close=False, stroke_width=pen, stroke=self.STROKE_COLOR, fill_opacity=0 )) elif pin_orientation == "L": # sub in x direction x1 = x - clock_pin_padding y1 = y x2 = x y2 = y + clock_pin_padding x3 = x y3 = y - clock_pin_padding arg = [x1, y1, x2, y2, x3, y3, x1, y1] d.append(draw.Lines(*arg, close=False, stroke_width=pen, stroke=self.STROKE_COLOR, )) elif pin_orientation == "U": # add in y direction x1 = x y1 = y + clock_pin_padding x2 = x + clock_pin_padding y2 = y x3 = x - clock_pin_padding y3 = y arg = [x1, y1, x2, y2, x3, y3, x1, y1] d.append(draw.Lines(*arg, close=False, stroke_width=pen, stroke=self.STROKE_COLOR, )) elif pin_orientation == "D": # sub in y direction x1 = x y1 = y - clock_pin_padding x2 = x + clock_pin_padding y2 = y x3 = x - clock_pin_padding y3 = y arg = [x1, y1, x2, y2, x3, y3, x1, y1] d.append(draw.Lines(*arg, close=False, stroke_width=pen, stroke=self.STROKE_COLOR, )) else: pass elif shape_of_pin == "CI": # clock inverted x = ox y = oy clock_pin_padding = 30 inverted_clock_radius = 10 if pin_orientation == "R": # add in x direction x1 = x + clock_pin_padding y1 = y x2 = x y2 = y + clock_pin_padding x3 = x y3 = y - clock_pin_padding arg = [x1, y1, x2, y2, x3, y3, x1, y1] d.append(draw.Lines(*arg, close=False, stroke_width=pen, stroke=self.STROKE_COLOR, fill_opacity=0 )) d.append(draw.Circle(x+inverted_clock_radius, y, inverted_clock_radius, stroke_width=pen, stroke=self.STROKE_COLOR, fill_opacity=0)) elif pin_orientation == "L": # sub in x direction x1 = x - clock_pin_padding y1 = y x2 = x y2 = y + clock_pin_padding x3 = x y3 = y - clock_pin_padding arg = [x1, y1, x2, y2, x3, y3, x1, y1] d.append(draw.Lines(*arg, close=False, stroke_width=pen, stroke=self.STROKE_COLOR, )) d.append(draw.Circle(x-inverted_clock_radius, y, inverted_clock_radius, stroke_width=pen, stroke=self.STROKE_COLOR, fill_opacity=0)) elif pin_orientation == "U": # add in y direction x1 = x y1 = y + clock_pin_padding x2 = x + clock_pin_padding y2 = y x3 = x - clock_pin_padding y3 = y arg = [x1, y1, x2, y2, x3, y3, x1, y1] d.append(draw.Lines(*arg, close=False, stroke_width=pen, stroke=self.STROKE_COLOR, )) d.append(draw.Circle(x, y+inverted_clock_radius, inverted_clock_radius, stroke_width=pen, stroke=self.STROKE_COLOR, fill_opacity=0)) elif pin_orientation == "D": # sub in y direction x1 = x y1 = y - clock_pin_padding x2 = x + clock_pin_padding y2 = y x3 = x - clock_pin_padding y3 = y arg = [x1, y1, x2, y2, x3, y3, x1, y1] d.append(draw.Lines(*arg, close=False, stroke_width=pen, stroke=self.STROKE_COLOR, )) d.append(draw.Circle(x, y-inverted_clock_radius, inverted_clock_radius, stroke_width=pen, stroke=self.STROKE_COLOR, fill_opacity=0)) else: pass elif shape_of_pin == "L": # input low pass elif shape_of_pin == "CL": # clock low pass elif shape_of_pin == "V": # output low pass elif shape_of_pin == "F": # falling edge clock pass elif shape_of_pin == "X": # non logic pass return d def drawPin( self, d, pinName, pinNumber, x1, y1, pin_name_offset, length=0, orientation="R", pen=5, text_size=50, shape_of_pin="", ): # if shape_of_pin starts with 'N' then its invisible if len(shape_of_pin) > 0 and shape_of_pin[0] == 'N': pass # C 55 0 10 1 0 6 N ->invertec pin circle shape example. else: x1 = int(x1) y1 = int(y1) text_size = int(text_size) length = int(length) pin_name_offset = int(pin_name_offset) pen = int(pen) v_list = [(x1, y1)] self.update_svg_boundary(v_list) if orientation == "R": x2 = x1 + length y2 = y1 # draw pin shape # subtracted 12 just to make the pin look better shape_x = x2 - self.RADIUS_OF_NOT_GATE shape_y = y2 # to position pin number properly x = x1 + (length / 2) y = y1 + self.PIN_NUMBER_OFFSET # x = x1 d.append( draw.Text( pinNumber, text_size/self.TEXT_SIZE_REDUCE_RATION, x, y, center=0.6, fill=self.PIN_NUMBER_COLOR ) ) d = self.draw_pin_shape(d, shape_x, shape_y, x2, y2, orientation, shape_of_pin) if pinName != "~": d = self.draw_text( d, pinName, x1 + length + pin_name_offset, y1, text_size, fill=self.PIN_NAME_COLOR, ) # d.append(draw.Text(pinName,text_size,x1+length+pin_name_offset,y1,center=0.6,fill=self.PIN_NAME_COLOR)) elif orientation == "L": x2 = x1 - length y2 = y1 # draw pin shape # added 12 just to make the pin look better shape_x = x2 + self.RADIUS_OF_NOT_GATE shape_y = y2 # to position pin number properly x = x1 - (length / 2) # y = y1 + 30 y = y1 + self.PIN_NUMBER_OFFSET # x = x1 d.append( draw.Text( pinNumber, text_size/self.TEXT_SIZE_REDUCE_RATION, x, y, center=0.6, fill=self.PIN_NUMBER_COLOR ) ) d = self.draw_pin_shape(d, shape_x, shape_y, x2, y2, orientation, shape_of_pin) if pinName != "~": d = self.draw_text( d, pinName, x1 - length - pin_name_offset, y1, text_size, fill=self.PIN_NAME_COLOR, ) # d.append(draw.Text(pinName,text_size,x1-length-pin_name_offset,y1,center=0.6,fill=self.PIN_NAME_COLOR)) elif orientation == "U": x2 = x1 y2 = y1 + length # draw pin shape # draw pin shape shape_x = x2 shape_y = y2 - self.RADIUS_OF_NOT_GATE d = self.draw_pin_shape(d, shape_x, shape_y, x2, y2, orientation, shape_of_pin) # to position pin number properly # x = x1 - 50 x = x1 - self.PIN_NUMBER_OFFSET y = y2 - (length / 3) # y = y1 d.append( draw.Text( pinNumber, text_size/self.TEXT_SIZE_REDUCE_RATION, x, y, center=0.6, fill=self.PIN_NUMBER_COLOR ) ) d = self.draw_pin_shape( d, x2, y2, x2, y2, orientation, shape_of_pin) if pinName != "~": d = self.draw_text( d, pinName, x1, y1 + length + pin_name_offset, text_size, fill=self.PIN_NAME_COLOR, ) # d.append(draw.Text(pinName,text_size,x1,y1+length+pin_name_offset,center=0.6,fill=self.PIN_NAME_COLOR)) else: x2 = x1 y2 = y1 - length # draw pin shape # d = self.draw_pin_shape(d, x2, y2, orientation, shape_of_pin) # draw pin shape # subtracted 12 just to make the pin look better shape_x = x2 shape_y = y2 + self.RADIUS_OF_NOT_GATE # y2 = y1 # to position pin number properly # x = x1 - 40 x = x1 - self.PIN_NUMBER_OFFSET # x = x1 - 20 y = y2 + (length / 3) d.append( draw.Text( pinNumber, text_size/self.TEXT_SIZE_REDUCE_RATION, x, y, center=0.6, fill=self.PIN_NUMBER_COLOR ) ) d = self.draw_pin_shape(d, shape_x, shape_y, x2, y2, orientation, shape_of_pin) if pinName != "~": d = self.draw_text( d, pinName, x1, y1 - length - pin_name_offset, text_size, fill=self.PIN_NAME_COLOR, ) # d.append(draw.Text(pinName,text_size,x1,y1-length-pin_name_offset,center=0.6,fill=self.PIN_NAME_COLOR)) d.append(draw.Line(x1, y1, x2, y2, stroke=self.STROKE_COLOR, stroke_width=pen)) return d ================================================ FILE: esim-cloud-backend/libAPI/lib_utils.py ================================================ from libAPI.helper.main import generate_svg_and_save_to_folder from libAPI.models import Library, LibraryComponent, ComponentAlternate import os import glob def save_uploaded_files(files, path): for f in files: filepath = os.path.join(path, f._name) with open(filepath, 'wb') as dest: for chunk in f.chunks(): dest.write(chunk) def handle_uploaded_libs(library_set, path, files): if not os.path.isdir(path): os.mkdir(path) save_uploaded_files(files, path) filenames = [] for f in files: filenames.append(f._name) save_libs(filenames, path, path, library_set) for f in files: os.remove(path + '/' + f._name) def save_libs(files, path, out_path, library_set): for f in files: if '.dcm' in f: flag = 0 for f1 in files: if f1[:-4] == f[:-4] and '.lib' in f1: flag = 1 if flag == 0: raise FileNotFoundError( f'.lib file for {f} does not exist') if '.lib' in f: lib_output_location = os.path.join(out_path, 'symbol-svgs') lib_location = os.path.join(path, f) component_details = generate_svg_and_save_to_folder( lib_location, lib_output_location ) library = Library.objects.filter( library_name=f, library_set=library_set).first() if not library: library = Library( library_name=f, library_set=library_set ) library.save() library_svg_folder = os.path.join( lib_output_location, f[:-4]) thumbnails = glob.glob(library_svg_folder + '/*_thumbnail.svg') for component_svg in glob.glob(library_svg_folder + '/*-1-A.svg'): thumbnail_path = component_svg[:-4] + '_thumbnail.svg' if thumbnail_path not in thumbnails: raise FileNotFoundError( f'Thumbnail does not exist for {component_svg}') # Get Component name component_svg = os.path.split(component_svg)[-1] # Get Corresponding Details svg_desc = component_details[component_svg[:-4]] # Seed DB component = LibraryComponent.objects.filter( name=svg_desc['name'], svg_path=os.path.join( library_svg_folder, component_svg), thumbnail_path=thumbnail_path, symbol_prefix=svg_desc['symbol_prefix'], full_name=svg_desc['full_name'], keyword=svg_desc['keyword'], description=svg_desc['description'], data_link=svg_desc['data_link'], component_library=library ).first() if not component: component = LibraryComponent( name=svg_desc['name'], svg_path=os.path.join( library_svg_folder, component_svg), thumbnail_path=thumbnail_path, symbol_prefix=svg_desc['symbol_prefix'], full_name=svg_desc['full_name'], keyword=svg_desc['keyword'], description=svg_desc['description'], data_link=svg_desc['data_link'], component_library=library ) component.save() # Seed Alternate Components for component_svg in glob.glob(library_svg_folder + '/*[B-Z].svg'): component_svg = os.path.split(component_svg)[-1] svg_desc = component_details[component_svg[:-4]] alternate_component = ComponentAlternate.objects.filter( part=svg_desc['part'], dmg=svg_desc['dmg'], full_name=svg_desc['full_name'], svg_path=os.path.join( library_svg_folder, component_svg), parent_component=component ).first() if not alternate_component: alternate_component = ComponentAlternate( part=svg_desc['part'], dmg=svg_desc['dmg'], full_name=svg_desc['full_name'], svg_path=os.path.join( library_svg_folder, component_svg), parent_component=component ) alternate_component.save() ================================================ FILE: esim-cloud-backend/libAPI/management/commands/createsuperuser_noinput.py ================================================ from django.contrib.auth import get_user_model from django.db.models import Q from django.core.management.base import BaseCommand import logging logger = logging.getLogger(__name__) class Command(BaseCommand): help = "Create default admin user if not already present." def add_arguments(self, parser): parser.add_argument( '--username', type=str, help="username of admin account" ) parser.add_argument( '--password', type=str, help="password of the admin account" ) def handle(self, *args, **options): if options['username'] and options['password']: User = get_user_model() user = User.objects.filter(username=options['username']) if user.count() > 0: raise Exception(f"User with same username exists") user = User.objects.create_superuser( username=options['username'], email='', password=options['password'] ) logger.info( f"Creating user {options['user']}" " with password {options['password']}") user.save() else: raise Exception("Username or Password not present") ================================================ FILE: esim-cloud-backend/libAPI/management/commands/load_default_libs.py ================================================ from django.contrib.auth import get_user_model from django.core.management.base import BaseCommand from libAPI.lib_utils import save_libs from libAPI.models import LibrarySet from esimCloud import settings import os import logging logger = logging.getLogger(__name__) class Command(BaseCommand): help = "Load default libraries if not already present." def add_arguments(self, parser): parser.add_argument( '--username', help='input a user\'s username', type=str ) parser.add_argument( '--location', type=self.dir_path, help="Directory containing kicad library files" ) parser.add_argument( '--default', action='store_true', help="set if the library is default or not" ) def dir_path(self, path): if os.path.isdir(path): return path else: raise Exception(f"{path} is not a valid path") def handle(self, *args, **options): User = get_user_model() if options['username']: user = User.objects.get(username=options['username']) else: raise Exception("Enter a superuser to associate libs") name = 'esim-default' if options['default'] else 'esim-additional' library_set = LibrarySet.objects.filter( user=user, default=options['default'], name=name ).first() if not library_set: library_set = LibrarySet( user=user, default=True if options['default'] else False, name=name ) library_set.save() out_location = os.path.join( "kicad-symbols/", library_set.user.username + "-" + name ) logger.info(f"Reading libraries from {options['location']}") logger.info(f"Saving as " + name[5:]) logger.info(f"Saving Libraries to {out_location}") if not os.path.isdir(out_location): os.mkdir(out_location) try: save_libs( os.listdir(options['location']), options['location'], out_location, library_set ) logger.info("Finished without errors") except Exception: logger.error("Couldn't save all the libs") ================================================ FILE: esim-cloud-backend/libAPI/models.py ================================================ import os import shutil from djongo import models from django.utils.safestring import mark_safe from django.contrib.auth import get_user_model from django.dispatch import receiver from django.db.models.signals import post_delete class LibrarySet(models.Model): user = models.ForeignKey(to=get_user_model(), verbose_name="user", on_delete=models.CASCADE) default = models.BooleanField(default=False) name = models.CharField(max_length=24, default="default") class Meta: unique_together = ('user', 'name') @receiver(post_delete, sender=LibrarySet) def library_set_post_delete_receiver(sender, instance: LibrarySet, **kwargs): try: shutil.rmtree( os.path.join( "kicad-symbols/", instance.user.username + '-' + instance.name )) except Exception: pass class Library(models.Model): library_set = models.ForeignKey( LibrarySet, null=True, verbose_name="library_set", on_delete=models.CASCADE ) library_name = models.CharField(max_length=200) saved_on = models.DateTimeField(auto_now=True) def __str__(self): return self.library_name def delete(self, *args, **kwargs): try: shutil.rmtree( os.path.join( "./kicad-symbols/", self.library_set.user.username + "-" + self.library_set.name, "symbol-svgs", self.library_name[:-4] )) except Exception: pass super(Library, self).delete(*args, **kwargs) @receiver(post_delete, sender=Library) def library_post_delete_receiver(sender, instance: Library, **kwargs): try: shutil.rmtree( os.path.join( "kicad-symbols/", instance.library_set.user.username + "-" + instance.library_set.name, "symbol-svgs", instance.library_name[:4], "/" )) except Exception: pass class LibraryComponent(models.Model): name = models.CharField(max_length=200) svg_path = models.CharField(max_length=400) thumbnail_path = models.CharField(max_length=400) description = models.CharField(max_length=400) data_link = models.URLField(max_length=200) full_name = models.CharField(max_length=200) keyword = models.CharField(max_length=200) symbol_prefix = models.CharField(max_length=10) component_library = models.ForeignKey( Library, on_delete=models.CASCADE, null=False, related_name='library') # For Django Admin Panel def image_tag(self): if self.svg_path: return mark_safe('' % self.svg_path) # noqa else: return 'No Image Found' image_tag.short_description = 'Image' def __str__(self): return self.name def delete(self, *args, **kwargs): try: os.remove(self.thumbnail_path) os.remove(self.svg_path) except Exception: pass super(LibraryComponent, self).delete(*args, **kwargs) @receiver(post_delete, sender=LibraryComponent) def component_post_delete_receiver( sender, instance: LibraryComponent, **kwargs): try: os.remove(instance.thumbnail_path) os.remove(instance.svg_path) except Exception: pass class ComponentAlternate(models.Model): part = models.CharField(max_length=1) dmg = models.PositiveSmallIntegerField() full_name = models.CharField(max_length=200) svg_path = models.CharField(max_length=400) parent_component = models.ForeignKey( LibraryComponent, on_delete=models.CASCADE, null=False, related_name='alternate_component') # For Django Admin Panel def image_tag(self): if self.svg_path: return mark_safe('' % self.svg_path) # noqa else: return 'No Image Found' image_tag.short_description = 'Image' def __str__(self): return self.full_name def delete(self, *args, **kwargs): try: os.remove(self.svg_path) except Exception: pass super(ComponentAlternate, self).delete(*args, **kwargs) @receiver(post_delete, sender=ComponentAlternate) def alt_component_post_delete_receiver( sender, instance: ComponentAlternate, **kwargs): try: os.remove(instance.svg_path) except Exception: pass class FavouriteComponent(models.Model): owner = models.OneToOneField(to=get_user_model(), on_delete=models.CASCADE, null=False) component = models.ManyToManyField(to=LibraryComponent) last_change = models.DateTimeField(auto_now=True) ================================================ FILE: esim-cloud-backend/libAPI/serializers.py ================================================ import logging from rest_framework import serializers from libAPI.models import Library, \ LibraryComponent, \ ComponentAlternate, \ LibrarySet, \ FavouriteComponent logger = logging.getLogger(__name__) class LibrarySerializer(serializers.ModelSerializer): default = serializers.SerializerMethodField('is_default') additional = serializers.SerializerMethodField('is_additional') def is_default(self, obj): if obj.library_set.default: return True return False def is_additional(self, obj): if not obj.library_set.default and obj.library_set.user.is_superuser: return True return False class Meta: model = Library fields = ('library_name', 'saved_on', 'id', 'default', 'additional') class ComponentAlternateSerializer(serializers.ModelSerializer): class Meta: model = ComponentAlternate fields = ( 'dmg', 'part', 'full_name', 'svg_path', 'id' ) class LibraryComponentSerializer(serializers.HyperlinkedModelSerializer): alternate_component = ComponentAlternateSerializer( read_only=True, many=True) class Meta: model = LibraryComponent fields = ( 'id', 'name', 'svg_path', 'thumbnail_path', 'symbol_prefix', 'component_library', 'description', 'data_link', 'full_name', 'keyword', 'alternate_component' ) class LibrarySetSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = LibrarySet fields = [ 'id', 'default', 'name', ] class FavouriteComponentSerializer(serializers.ModelSerializer): component = LibraryComponentSerializer(many=True) class Meta: model = FavouriteComponent fields = ("component",) ================================================ FILE: esim-cloud-backend/libAPI/tests.py ================================================ from django.test import TestCase # Create your tests here. ================================================ FILE: esim-cloud-backend/libAPI/urls.py ================================================ from libAPI.views import LibraryViewSet, \ LibraryComponentViewSet, \ LibrarySetViewSet, \ FavouriteComponentView, \ DeleteFavouriteComponent from rest_framework.routers import DefaultRouter from django.urls import path router = DefaultRouter() router.register(r'libraries', LibraryViewSet, basename='library') router.register(r'library-sets', LibrarySetViewSet, basename='library') router.register(r'components', LibraryComponentViewSet, basename='components') urlpatterns = [ path("favouritecomponents", FavouriteComponentView.as_view(), name="favouritecomponents"), path("favouritecomponents/", DeleteFavouriteComponent.as_view(), name="favouritecomponents"), ] urlpatterns += router.urls ================================================ FILE: esim-cloud-backend/libAPI/views.py ================================================ from libAPI.lib_utils import handle_uploaded_libs import django_filters from django.db.models import Q from django.contrib.auth import get_user_model from libAPI.serializers import LibrarySerializer, \ LibraryComponentSerializer, \ LibrarySetSerializer, \ FavouriteComponentSerializer from libAPI.models import Library, \ LibraryComponent, \ LibrarySet, \ FavouriteComponent from rest_framework import viewsets, status from rest_framework.decorators import action from rest_framework.response import Response from rest_framework.permissions import BasePermission,\ IsAuthenticated,\ SAFE_METHODS from rest_framework.parsers import MultiPartParser import logging from django_filters import rest_framework as filters from drf_yasg.utils import swagger_auto_schema import os from esimCloud import settings from rest_framework.views import APIView logger = logging.getLogger(__name__) class IsLibraryOwner(BasePermission): def has_object_permission(self, request, view, obj): if request.method in SAFE_METHODS: return True if request.user.is_authenticated: if obj.library_set.user == request.user: return True elif request.user.is_superuser: return True return False class LibraryFilterSet(django_filters.FilterSet): class Meta: model = Library fields = { 'library_name': ['exact'], } class LibraryViewSet(viewsets.ModelViewSet): """ Listing All Library Details """ serializer_class = LibrarySerializer filter_backends = (filters.DjangoFilterBackend,) filterset_class = LibraryFilterSet permission_classes = (IsLibraryOwner,) # All Libraries available for user (custom+default) def get_queryset(self): User = get_user_model() superusers = User.objects.filter(is_superuser=True) if self.request.user.is_authenticated: return Library.objects.filter( Q(library_set__user=self.request.user) | Q(library_set__user__in=superusers) | Q(library_set__default=True) ).order_by('-library_set__default') else: return Library.objects.filter( Q(library_set__default=True) | Q(library_set__user__in=superusers) ) # Custom libraries uploaded by the user @action( detail=False, methods=['GET'], name='All custom libraries for user' ) def get_custom_libraries(self, request): if request.user.is_authenticated: lib_sets = LibrarySet.objects.filter( Q(user=request.user) & Q(default=False)) queryset = Library.objects.filter(library_set__in=lib_sets) return Response(LibrarySerializer(queryset, many=True).data) return Response() # Default Libraries @action(detail=False, methods=['GET'], name="All Default Libraries") def default(self, request): return Response(LibrarySerializer( Library.objects.filter( Q(library_set__default=True)), many=True).data ) class LibraryComponentFilterSet(django_filters.FilterSet): class Meta: model = LibraryComponent fields = { 'name': ['icontains'], 'keyword': ['icontains'], 'description': ['icontains'], 'component_library__library_name': ['icontains'], 'component_library': ['exact'], 'symbol_prefix': ['exact'], } class IsComponentOwner(BasePermission): def has_object_permission(self, request, view, obj): if request.method in SAFE_METHODS: return True elif request.user.is_authenticated: if obj.component_library.library_set.user == request.user: return True return False class LibraryComponentViewSet(viewsets.ReadOnlyModelViewSet): """ Listing All Library Details """ permission_classes = (IsComponentOwner,) queryset = LibraryComponent.objects.all() serializer_class = LibraryComponentSerializer filter_backends = (filters.DjangoFilterBackend,) filterset_class = LibraryComponentFilterSet def get_queryset(self): User = get_user_model() superusers = User.objects.filter(is_superuser=True) if self.request.user.is_authenticated: library_set = LibrarySet.objects.filter( Q(user=self.request.user) | Q(default=True) | Q(user__in=superusers) ) libraries = Library.objects.filter(library_set__in=library_set) components = LibraryComponent.objects.filter( component_library__in=libraries) return components else: library_set = LibrarySet.objects.filter( Q(default=True) | Q(user__in=superusers)) libraries = Library.objects.filter(library_set__in=library_set) components = LibraryComponent.objects.filter( component_library__in=libraries) return components class LibrarySetViewSet(viewsets.ModelViewSet): """ Listing Library Sets available to a user """ serializer_class = LibrarySetSerializer parser_class = (MultiPartParser,) permission_classes = (IsAuthenticated,) def get_queryset(self): if self.request.user.is_authenticated: queryset = LibrarySet.objects.filter( Q(user=self.request.user) | Q(default=True)) else: queryset = LibrarySet.objects.filter(default=True) return queryset def create(self, request, *args, **kwargs): try: library_set = LibrarySet.objects.get(user=request.user) except LibrarySet.DoesNotExist: library_set = LibrarySet( name=request.user.username[0:24], default=False, user=request.user ) library_set.save() except LibrarySet.MultipleObjectsReturned: library_set = LibrarySet.objects.filter(user=request.user).first() files = request.FILES.getlist('files') if len(files) != 0: path = os.path.join( settings.BASE_DIR[6:], 'kicad-symbols', library_set.user.username + '-' + library_set.name) try: # defined in ./lib_utils.py handle_uploaded_libs(library_set, path, files) return Response(status=status.HTTP_201_CREATED) except Exception: return Response(status=status.HTTP_400_BAD_REQUEST) else: return Response(status=status.HTTP_204_NO_CONTENT) class FavouriteComponentView(APIView): permission_classes = (IsAuthenticated,) serializer_class = FavouriteComponentSerializer @swagger_auto_schema(responses={200: FavouriteComponentSerializer}) def get(self, request): try: queryset = FavouriteComponent.objects.get( owner=self.request.user) response_serializer = self.serializer_class( queryset, context={'request': request}) return Response(response_serializer.data, status=status.HTTP_200_OK) except FavouriteComponent.DoesNotExist: return Response(data={}, status=status.HTTP_200_OK) @swagger_auto_schema(responses={200: FavouriteComponentSerializer}, request_body=FavouriteComponentSerializer) def post(self, request): newComponent = request.data.get("component") try: queryset = LibraryComponent.objects.get(id=newComponent[0]) except LibraryComponent.DoesNotExist: return Response(data={"error": "Given Component does not Exist"}, status=status.HTTP_400_BAD_REQUEST) try: existingFavourites = FavouriteComponent.objects.get( owner=self.request.user) for singleComponent in newComponent: existingFavourites.component.add(singleComponent) existingFavourites.save() serializer = FavouriteComponentSerializer( instance=existingFavourites, context={'request': request}) return Response(data=serializer.data, status=status.HTTP_200_OK) except FavouriteComponent.DoesNotExist: newFavList = FavouriteComponent.objects.create( owner=self.request.user) for singleComponent in newComponent: newFavList.component.add(singleComponent) newFavList.save() serialized = FavouriteComponentSerializer( instance=newFavList, context={'request': request}) return Response(data=serialized.data, status=status.HTTP_200_OK) class DeleteFavouriteComponent(APIView): permission_classes = (IsAuthenticated,) @swagger_auto_schema(responses={200: FavouriteComponentSerializer}) def delete(self, request, id): try: queryset = FavouriteComponent.objects.get( owner=self.request.user, component=id) queryset.component.remove(id) serialized = FavouriteComponentSerializer( instance=queryset, context={'request': request}) return Response(data=serialized.data, status=status.HTTP_200_OK) except FavouriteComponent.DoesNotExist: return Response( data={ "error": "Your favourites doesn't have this component" }, status=status.HTTP_400_BAD_REQUEST) ================================================ FILE: esim-cloud-backend/ltiAPI/__init__.py ================================================ ================================================ FILE: esim-cloud-backend/ltiAPI/admin.py ================================================ from django.contrib import admin from .models import lticonsumer, Submission, ltiSession # Register your models here. class lticonsumeradmin(admin.ModelAdmin): list_display = ['consumer_key', 'secret_key', 'model_schematic', 'score', 'initial_schematic'] readonly_fields = ['id', ] def id(self, obj): return obj.id class SubmissionAdmin(admin.ModelAdmin): list_display = ['project', 'student', 'score', 'schematic', 'lms_success'] class ltiSessionAdmin(admin.ModelAdmin): list_display = ['user_id', 'lis_result_sourcedid', 'lis_outcome_service_url', 'oauth_nonce', 'oauth_timestamp', 'oauth_consumer_key', ] admin.site.register(lticonsumer, lticonsumeradmin) admin.site.register(Submission, SubmissionAdmin) admin.site.register(ltiSession, ltiSessionAdmin) ================================================ FILE: esim-cloud-backend/ltiAPI/apps.py ================================================ from django.apps import AppConfig class LtiapiConfig(AppConfig): name = 'ltiAPI' ================================================ FILE: esim-cloud-backend/ltiAPI/models.py ================================================ from pyexpat import model from django.db import models from saveAPI.models import ArduinoModelSimulationData, StateSave from django.contrib.postgres.fields import ArrayField from django.contrib.auth import get_user_model from simulationAPI.models import simulation import uuid # Create your models here. class lticonsumer(models.Model): id = models.UUIDField(default=uuid.uuid4, editable=False, unique=True, primary_key=True) consumer_key = models.CharField(max_length=50, null=False) secret_key = models.CharField(max_length=50, null=False) model_schematic = models.ForeignKey(to=StateSave, on_delete=models.CASCADE, related_name="model_schematic") score = models.FloatField(null=True, blank=True) initial_schematic = models.ForeignKey(to=StateSave, on_delete=models.SET_NULL, null=True, related_name="initial_schematic") test_case = models.ForeignKey( to=simulation, on_delete=models.CASCADE, null=True, blank=True) sim_params = ArrayField( models.CharField(max_length=20), blank=True, null=True) scored = models.BooleanField(null=False) def __str__(self): return self.consumer_key class ArduinLTIConsumer(models.Model): id = models.UUIDField(default=uuid.uuid4, editable=False, unique=True, primary_key=True) consumer_key = models.CharField(max_length=50, null=False) secret_key = models.CharField(max_length=50, null=False) model_schematic = models.ForeignKey(to=StateSave, on_delete=models.CASCADE, related_name="arduino_model_schematic") score = models.FloatField(null=True, blank=True) con_weightage = models.FloatField(null=False, default=60) initial_schematic = models.ForeignKey( to=StateSave, on_delete=models.SET_NULL, null=True, related_name="arduino_initial_schematic") test_case = models.ForeignKey( to=ArduinoModelSimulationData, on_delete=models.CASCADE, null=True, blank=True) scored = models.BooleanField(null=False) view_code = models.BooleanField(null=False) def __str__(self): return self.consumer_key class ltiSession(models.Model): user_id = models.CharField(max_length=200, null=True) lti_consumer = models.ForeignKey(to=lticonsumer, on_delete=models.CASCADE, null=True) lis_result_sourcedid = models.CharField(max_length=300, null=True) lis_outcome_service_url = models.CharField(max_length=300, null=True) oauth_nonce = models.CharField(max_length=300) oauth_timestamp = models.CharField(max_length=300) oauth_consumer_key = models.CharField(max_length=300) oauth_signature_method = models.CharField(max_length=300) oauth_version = models.CharField(max_length=300) oauth_signature = models.CharField(max_length=300) simulations = models.ManyToManyField(to=simulation) class ArduinoLTISession(models.Model): user_id = models.CharField(max_length=200, null=True) lti_consumer = models.ForeignKey(to=ArduinLTIConsumer, on_delete=models.CASCADE, null=True) lis_result_sourcedid = models.CharField(max_length=300, null=True) lis_outcome_service_url = models.CharField(max_length=300, null=True) oauth_nonce = models.CharField(max_length=300) oauth_timestamp = models.CharField(max_length=300) oauth_consumer_key = models.CharField(max_length=300) oauth_signature_method = models.CharField(max_length=300) oauth_version = models.CharField(max_length=300) oauth_signature = models.CharField(max_length=300) simulations = models.ManyToManyField(to=ArduinoModelSimulationData) class Submission(models.Model): project = models.ForeignKey(to=lticonsumer, on_delete=models.CASCADE) student = models.ForeignKey( to=get_user_model(), blank=True, null=True, on_delete=models.CASCADE) score = models.FloatField() ltisession = models.ForeignKey( to=ltiSession, on_delete=models.CASCADE, null=True) schematic = models.ForeignKey(to=StateSave, on_delete=models.CASCADE) student_simulation = models.ForeignKey(to=simulation, on_delete=models.CASCADE, null=True) lms_success = models.BooleanField(null=True) def __str__(self): return "Submitted" if self.lms_success else "Not submitted" class ArduinoLTISimData(models.Model): session_id = models.ForeignKey(ArduinoLTISession, to_field='id', on_delete=models.CASCADE) circuit_id = models.ForeignKey(StateSave, to_field='id', on_delete=models.CASCADE) result = models.TextField() def save(self, *args, **kwargs): super(ArduinoLTISimData, self).save(*args, **kwargs) def __str__(self): return self.result class ArduinoSubmission(models.Model): project = models.ForeignKey(to=ArduinLTIConsumer, on_delete=models.CASCADE) student = models.ForeignKey( to=get_user_model(), blank=True, null=True, on_delete=models.CASCADE) score = models.FloatField() ltisession = models.ForeignKey( to=ArduinoLTISession, on_delete=models.CASCADE, null=True) schematic = models.ForeignKey(to=StateSave, on_delete=models.CASCADE) student_simulation = models.ForeignKey(to=ArduinoLTISimData, on_delete=models.CASCADE, null=True) lms_success = models.BooleanField(null=True) def __str__(self): return "Submitted" if self.lms_success else "Not submitted" ================================================ FILE: esim-cloud-backend/ltiAPI/process_submission.py ================================================ import json from wsgiref.util import request_uri def parseJSON(json): list = json['data'] results = {} for ele in list: results[ele[0]] = ele[2] return results def differentiateGraphResults(expected, given, sim_params): expected = expected['data'] given = given['data'] compare_result_flag = True if expected != given: results = {'same': [], 'different': [], 'missing': [], 'added': []} for index in range(0, len(expected)): expected_labels = expected[index]['labels'] for param in sim_params: if param not in expected_labels: continue given_labels = given[index]['labels'] results['added'] = results['added'] + \ list(set(given_labels) - set(expected_labels)) for i in range(0, len(expected_labels)): if i != 0: if expected_labels[i] in given_labels: if set(expected[index]['y'][i-1]) == set(given[index]['y'][i-1]): # noqa results['same'].append(expected_labels[i]) else: results['different'].append(expected_labels[i]) else: results['missing'].append(expected_labels[i]) return results return "Same Values" def differentiateTabularResults(expected, given, sim_params): expected = parseJSON(expected) given = parseJSON(given) if expected != given: results = {'same': [], 'different': [], 'missing': [], 'added': []} for key, value in expected.items(): for param in sim_params: if param != key: continue if key in given.keys(): if value == given[key]: results['same'].append(key) else: results['different'].append(key) else: results['missing'].append(key) for key, value in given.items(): if key not in expected.keys(): results['added'].append(key) # marks = str(len(results['same']))+"/"+str(len(expected)) return results else: return "Same Values" def process_submission(expected_simulation, given_simulation, sim_params): score = 0 if expected_simulation['graph'] == "true": comparison_result = differentiateGraphResults( expected_simulation, given_simulation, sim_params) else: comparison_result = differentiateTabularResults( expected_simulation, given_simulation, sim_params) if comparison_result == "Same Values": score = 1 else: total = len(comparison_result['same']) + \ len(comparison_result['different']) + \ len(comparison_result['missing']) score += len(comparison_result['same'])/total return score, comparison_result def arduino_eval(original_data, student_data, con_weight, max_score): evaluated = True original_data = original_data.replace("\'", "\"") student_data = student_data.replace("\'", "\"") original_data = json.loads(original_data) student_data = json.loads(student_data) key = list(original_data.keys())[0] org_hexvals = list(original_data[key]['hexVals']) st_hexvals = list(student_data[key]['hexVals']) org_pins = list(original_data[key]['pinConnected']) st_pins = list(student_data[key]['pinConnected']) common_pins = list(set(org_pins).intersection(st_pins)) if int(len(org_hexvals)) > int(len(st_hexvals)): evaluated = False return 0, evaluated con_weightage = (((len(common_pins)/len(org_pins)) * con_weight)/100) \ * (max_score) count = 0 for i in range(int(len(org_hexvals))): if st_hexvals[i] == org_hexvals[i]: count += 1 code_weightage = (((count/len(org_hexvals)) * (100-con_weight))/100) \ * (max_score) return round(con_weightage+code_weightage, 2), evaluated ================================================ FILE: esim-cloud-backend/ltiAPI/serializers.py ================================================ from django.utils import tree from rest_framework import serializers from .models import ArduinoLTISession, ArduinoLTISimData, \ ArduinoSubmission, lticonsumer, ltiSession, Submission, \ ArduinLTIConsumer from saveAPI.serializers import SaveListSerializer from django.contrib.auth import get_user_model from simulationAPI.serializers import simulationSerializer from saveAPI.serializers import ArduinoModelSimulationDataSerializer class consumerSerializer(serializers.ModelSerializer): sim_params = serializers.ListField( child=serializers.CharField(max_length=50) ) class Meta: model = lticonsumer fields = ['consumer_key', 'secret_key', 'model_schematic', 'score', 'initial_schematic', 'test_case', 'scored', 'id', 'sim_params'] def create(self, validated_data): consumer = lticonsumer.objects.create(**validated_data) return consumer class ArduinoConsumerSerializer(serializers.ModelSerializer): class Meta: model = ArduinLTIConsumer fields = ['consumer_key', 'secret_key', 'model_schematic', 'score', 'initial_schematic', 'test_case', 'scored', 'id', 'view_code', 'con_weightage'] def create(self, validated_data): consumer = ArduinLTIConsumer.objects.create(**validated_data) return consumer class consumerSubmissionSerializer(serializers.ModelSerializer): test_case = simulationSerializer(many=False) class Meta: model = lticonsumer fields = ['consumer_key', 'secret_key', 'model_schematic', 'score', 'initial_schematic', 'test_case', 'scored', 'id', 'sim_params'] def create(self, validated_data): pass class consumerArduinoSubmissionSerializer(serializers.ModelSerializer): test_case = ArduinoModelSimulationDataSerializer(many=False) class Meta: model = ArduinLTIConsumer fields = ['consumer_key', 'secret_key', 'model_schematic', 'score', 'initial_schematic', 'test_case', 'scored', 'id', 'view_code', 'con_weightage'] def create(self, validated_data): pass class consumerExistsSerializer(serializers.ModelSerializer): class Meta: model = lticonsumer fields = ['consumer_key', 'model_schematic', 'initial_schematic'] class consumerResponseSerializer(serializers.Serializer): id = serializers.UUIDField() config_url = serializers.CharField(max_length=100) consumer_key = serializers.CharField(max_length=50) secret_key = serializers.CharField(max_length=50) sim_params = serializers.ListField( child=serializers.CharField(max_length=50)) score = serializers.FloatField(required=False, allow_null=True) initial_schematic = serializers.IntegerField() model_schematic = serializers.IntegerField() test_case = serializers.IntegerField(required=False, allow_null=True) scored = serializers.BooleanField() class ArduinoConsumerResponseSerializer(serializers.Serializer): id = serializers.UUIDField() config_url = serializers.CharField(max_length=100) consumer_key = serializers.CharField(max_length=50) secret_key = serializers.CharField(max_length=50) score = serializers.FloatField(required=False, allow_null=True) initial_schematic = serializers.IntegerField() model_schematic = serializers.IntegerField() test_case = serializers.IntegerField(required=False, allow_null=True) scored = serializers.BooleanField() con_weightage = serializers.FloatField(required=True, allow_null=False) view_code = serializers.BooleanField(allow_null=False) class SessionSerializer(serializers.ModelSerializer): class Meta: model = ltiSession fields = ["id", "user_id", "oauth_nonce"] class ArduinoSessionSerializer(serializers.ModelSerializer): class Meta: model = ArduinoLTISession fields = ["id", "user_id", "oauth_nonce"] class GetSessionSerializer(serializers.ModelSerializer): class Meta: model = ltiSession fields = "__all__" class GetArduinoSessionSerializer(serializers.ModelSerializer): class Meta: model = ArduinoLTISession fields = "__all__" class GetSubmissionUserSerializer(serializers.ModelSerializer): class Meta: model = get_user_model() fields = ["username", "email"] class SubmissionSerializer(serializers.ModelSerializer): ltisession = SessionSerializer(many=False) class Meta: model = Submission fields = ["ltisession", "schematic"] class ArduinoSubmissionSerializer(serializers.ModelSerializer): ltisession = ArduinoSessionSerializer(many=False) class Meta: model = ArduinoSubmission fields = ["ltisession", "schematic"] class GetSubmissionsSerializer(serializers.ModelSerializer): ltisession = GetSessionSerializer(many=False) schematic = SaveListSerializer(many=False) student = GetSubmissionUserSerializer(many=False) student_simulation = simulationSerializer() project = consumerSubmissionSerializer(many=False) class Meta: model = Submission fields = ["schematic", "student", "project", "score", "lms_success", "ltisession", "student_simulation"] class ArduinoLTISimulationDataSerializer(serializers.ModelSerializer): id = serializers.IntegerField() result = serializers.CharField() class Meta: model = ArduinoLTISimData fields = ('id', 'result') class GetArduinoSubmissionsSerializer(serializers.ModelSerializer): ltisession = GetArduinoSessionSerializer(many=False) schematic = SaveListSerializer(many=False) student = GetSubmissionUserSerializer(many=False) student_simulation = ArduinoLTISimulationDataSerializer() project = consumerArduinoSubmissionSerializer(many=False) class Meta: model = ArduinoSubmission fields = ["schematic", "student", "project", "score", "lms_success", "ltisession", "student_simulation"] ================================================ FILE: esim-cloud-backend/ltiAPI/templates/ltiAPI/config.xml ================================================ {{launch_url}} {% if debug %}Dev {% endif %}{{title}} {{description}} public {{domain}} {% if debug %}Dev{% endif %} {{title}} {% if course_navigation %} {% if course_navigation == True %} disabled true {% elif course_navigation.items %} {% for key, value in course_navigation.items %} {{value}} {% endfor %} {% endif %} {% endif %} ================================================ FILE: esim-cloud-backend/ltiAPI/templates/ltiAPI/denied.html ================================================ {% load i18n %} {% trans "Permission Denied" %}

{% trans "Sorry, you are not allowed to access this app" %}


{% trans "To report a problem with your access please contact your system administrator" %}

================================================ FILE: esim-cloud-backend/ltiAPI/tests.py ================================================ from django.test import TestCase # Create your tests here. ================================================ FILE: esim-cloud-backend/ltiAPI/urls.py ================================================ from django.conf.urls import url from django.urls import path from . import views app_name = 'ltiAPI' urlpatterns = [ url(r'^build/$', views.LTIBuildApp.as_view(), name="create-lti"), path('build/arduino', views.ArduinoLTIBuildApp.as_view(), name="create-arduino-lti"), url(r'^update/$', views.LTIUpdateAPP.as_view(), name="create-lti"), path('update_arduino/', views.ArduinoLTIUpdateAPP.as_view(), name="create-lti"), path('/config.xml/', views.LTIConfigView.as_view(), name="config"), path('auth//', views.LTIAuthView.as_view(), name="auth"), path('arduino/auth//', views.ArduinoLTIAuthView.as_view(), name="arduino-auth"), path('submit/', views.LTIPostGrade.as_view(), name="submit"), path('arduino/submit/', views.ArduinoLTIPostGrade.as_view(), name="submit"), url(r'^denied/$', views.denied, name="denied"), path('exist//', views.LTIExist.as_view()), path('exist/arduino//', views.ArduinoLTIExist.as_view()), path('delete//', views.LTIDeleteApp.as_view()), path('arduino/delete//', views.ArduinoLTIDeleteApp.as_view()), path('submissions///', views.GetLTISubmission.as_view()), path('arduino/submissions///', views.GetArduinoLTISubmission.as_view()), path('arduino/viewcode/', views.ArduinoLTIViewCode.as_view()), path('exists/', views.LTIAllConsumers.as_view()), path('save/arduinodata//', views.ArduinoLTISimulationDataView.as_view()) ] ================================================ FILE: esim-cloud-backend/ltiAPI/utils.py ================================================ from xml.etree import ElementTree from xml.etree.ElementTree import SubElement, Element from .models import ArduinLTIConsumer, lticonsumer from django.urls import reverse from datetime import time def consumers(): """ Gets consumer's map from config :return: consumers map """ consumers = dict() consumers_queryset = lticonsumer.objects.all() for i in consumers_queryset: consumers[i.consumer_key] = {} consumers[i.consumer_key]['secret'] = i.secret_key return consumers def ArduinoConsumers(): """ Gets Arduino consumer's map from config :return: consumers map """ consumers = dict() consumers_queryset = ArduinLTIConsumer.objects.all() for i in consumers_queryset: consumers[i.consumer_key] = {} consumers[i.consumer_key]['secret'] = i.secret_key return consumers def message_identifier(): return '{:.0f}'.format(time()) def lis_result_sourcedid(request): return request.data.get('lis_result_sourcedid', None) def lis_outcome_service_url(request): return request.data.get('lis_outcome_service_url', None) def oauth_consumer_key(request): return request.data.get('oauth_consumer_key', None) def get_reverse(objs): return reverse(objs) # def generate_request_xml(message_identifier_id, operation, # lis_result_sourcedid, score, launch_url): # # pylint: disable=too-many-locals # """ # Generates LTI 1.1 XML for posting result to LTI consumer. # :param message_identifier_id: # :param operation: # :param lis_result_sourcedid: # :param score: # :return: XML string # """ # root = Element(u'imsx_POXEnvelopeRequest', # xmlns=u'http://www.imsglobal.org/services/' # u'ltiv1p1/xsd/imsoms_v1p0') # # header = SubElement(root, 'imsx_POXHeader') # header_info = SubElement(header, 'imsx_POXRequestHeaderInfo') # version = SubElement(header_info, 'imsx_version') # version.text = 'V1.0' # message_identifier = SubElement(header_info, # 'imsx_messageIdentifier') # message_identifier.text = message_identifier_id # body = SubElement(root, 'imsx_POXBody') # xml_request = SubElement( # body, '%s%s' % (operation, 'Request')) # record = SubElement(xml_request, 'resultRecord') # # guid = SubElement(record, 'sourcedGUID') # # sourcedid = SubElement(guid, 'sourcedId') # sourcedid.text = lis_result_sourcedid # if score is not None: # result = SubElement(record, 'result') # result_score = SubElement(result, 'resultScore') # language = SubElement(result_score, 'language') # language.text = 'en' # text_string = SubElement(result_score, 'textString') # text_string.text = score.__str__() # if launch_url: # result_data = SubElement(result, 'resultData') # lti_launch_url = SubElement( # result_data, 'ltiLaunchUrl') # lti_launch_url.text = launch_url # ret = "\n{}".format( # ElementTree.tostring(root, encoding='utf-8').decode('utf-8')) # # return ret ================================================ FILE: esim-cloud-backend/ltiAPI/views.py ================================================ from email import message from sre_constants import SUCCESS import traceback import datetime from requests import session from .serializers import consumerSerializer, consumerResponseSerializer, \ SubmissionSerializer, GetSubmissionsSerializer, consumerExistsSerializer, \ ArduinoConsumerSerializer, ArduinoConsumerResponseSerializer, \ GetArduinoSubmissionsSerializer, ArduinoLTISimulationDataSerializer from .utils import consumers, get_reverse, message_identifier, ArduinoConsumers from .models import ltiSession, lticonsumer, Submission, ArduinLTIConsumer, \ ArduinoLTISession, ArduinoSubmission, ArduinoLTISimData from saveAPI.models import StateSave, ArduinoModelSimulationData from simulationAPI.models import simulation from drf_yasg.utils import swagger_auto_schema from django.conf import settings from saveAPI.serializers import StateSaveSerializer from django.views import View from rest_framework import status from rest_framework.permissions import AllowAny, IsAuthenticated from rest_framework.response import Response from rest_framework.views import APIView from django.db.models import Q from django.http import HttpResponseRedirect from django.shortcuts import render from pylti.common import LTIException, verify_request_common, post_message, \ generate_request_xml, LTIPostMessageException from .process_submission import arduino_eval, process_submission def denied(r): return render(r, 'ltiAPI/denied.html') class LTIExist(APIView): def get(self, request, save_id): try: consumer = lticonsumer.objects.get( Q(model_schematic__save_id=save_id) | Q(initial_schematic__save_id=save_id)) except lticonsumer.DoesNotExist: return Response(data={"error": "LTIConsumer Not found"}, status=status.HTTP_404_NOT_FOUND) host = request.get_host() save_id = str(save_id) init_sch_serialized = StateSaveSerializer( instance=consumer.initial_schematic) model_sch_serialized = StateSaveSerializer( instance=consumer.model_schematic) protocol = 'https://' if request.is_secure() else 'http://' config_url = protocol + host + "/api/lti/auth/" + save_id + "/" response_data = { "consumer_key": consumer.consumer_key, "secret_key": consumer.secret_key, "config_url": config_url, "score": consumer.score, "initial_schematic": init_sch_serialized.data, "model_schematic": model_sch_serialized.data, "test_case": consumer.test_case.id if consumer.test_case else None, "scored": consumer.scored, "id": consumer.id, "sim_params": consumer.sim_params } return Response(response_data, status=status.HTTP_200_OK) class ArduinoLTIExist(APIView): def get(self, request, save_id): try: consumer = ArduinLTIConsumer.objects.get( Q(model_schematic__save_id=save_id) | Q(initial_schematic__save_id=save_id)) except ArduinLTIConsumer.DoesNotExist: return Response(data={"error": "LTIConsumer Not found"}, status=status.HTTP_404_NOT_FOUND) host = request.get_host() save_id = str(save_id) init_sch_serialized = StateSaveSerializer( instance=consumer.initial_schematic) model_sch_serialized = StateSaveSerializer( instance=consumer.model_schematic) protocol = 'https://' if request.is_secure() else 'http://' config_url = protocol + host + "/api/lti/arduino/auth/" + save_id + "/" response_data = { "consumer_key": consumer.consumer_key, "secret_key": consumer.secret_key, "config_url": config_url, "score": consumer.score, "initial_schematic": init_sch_serialized.data, "model_schematic": model_sch_serialized.data, "test_case": consumer.test_case.id if consumer.test_case else None, "scored": consumer.scored, "id": consumer.id, "view_code": consumer.view_code, "con_weightage": consumer.con_weightage # "sim_params": consumer.sim_params } return Response(response_data, status=status.HTTP_200_OK) class ArduinoLTIViewCode(APIView): def get(self, request, ltiID): try: ltisess = ArduinoLTISession.objects.get(id=ltiID) except ArduinoLTISession.DoesNotExist: return Response(data={"error": "LTISession Not found"}, status=status.HTTP_404_NOT_FOUND) consumer = ArduinLTIConsumer.objects.get(id=ltisess.lti_consumer_id) return Response(data={"view": consumer.view_code}, status=status.HTTP_200_OK) class LTIAllConsumers(APIView): permission_classes = (IsAuthenticated,) def get(self, request): saves = StateSave.objects.filter(owner=self.request.user) consumers = [] for save in saves: if save.model_schematic.all().first(): consumers.append(consumerExistsSerializer( save.model_schematic.all().first()).data) return Response(consumers, status=status.HTTP_200_OK) class LTIBuildApp(APIView): @swagger_auto_schema(request_body=consumerSerializer, responses={201: consumerResponseSerializer}) def post(self, request): serialized = consumerSerializer(data=request.data) temp = lticonsumer.objects.filter( initial_schematic=request.data['model_schematic'] ).count() if temp > 0: return Response(data={"error": "Model schematic cannot be initial \ schematic for other LTI apps"}, status=status.HTTP_400_BAD_REQUEST) if serialized.is_valid(): serialized.save() id = serialized.data.get("initial_schematic") if id is not None: saved_state = StateSave.objects.get(id=id) saved_state.shared = True saved_state.save() host = request.get_host() protocol = 'https://' if request.is_secure() else 'http://' url = protocol + host + "/api/lti/auth/" + \ str(saved_state.save_id) + "/" response_data = { "consumer_key": serialized.data.get('consumer_key'), "secret_key": serialized.data.get('secret_key'), "config_url": url, "score": serialized.data.get('score'), "initial_schematic": str(serialized.data[ "initial_schematic"]), "model_schematic": str(serialized.data["model_schematic"]), "test_case": serialized.data['test_case'], "scored": serialized.data['scored'], "id": serialized.data['id'], "sim_params": serialized.data['sim_params'] } print("Recieved POST for LTI APP:", response_data) response_serializer = consumerResponseSerializer( data=response_data ) if response_serializer.is_valid(): return Response(response_serializer.data, status=status.HTTP_201_CREATED) else: return Response(response_serializer.errors, status=status.HTTP_400_BAD_REQUEST) else: return Response({"error": "Initial Schematic not provided"}, status=status.HTTP_400_BAD_REQUEST) else: return Response(serialized.errors, status=status.HTTP_400_BAD_REQUEST) class ArduinoLTIBuildApp(APIView): @swagger_auto_schema(request_body=ArduinoConsumerSerializer, responses={201: ArduinoConsumerResponseSerializer}) def post(self, request): # print(request.headers) serialized = ArduinoConsumerSerializer(data=request.data) temp = ArduinLTIConsumer.objects.filter( initial_schematic=request.data['model_schematic'] ).count() if temp > 0: return Response(data={"error": "Model schematic cannot be initial \ schematic for other LTI apps"}, status=status.HTTP_400_BAD_REQUEST) if serialized.is_valid(): serialized.save() id = serialized.data.get("initial_schematic") if id is not None: saved_state = StateSave.objects.get(id=id) saved_state.shared = True saved_state.save() host = request.get_host() protocol = 'https://' if request.is_secure() else 'http://' url = protocol + host + "/api/lti/arduino/auth/" + \ str(saved_state.save_id) + "/" response_data = { "consumer_key": serialized.data.get('consumer_key'), "secret_key": serialized.data.get('secret_key'), "config_url": url, "score": serialized.data.get('score'), "initial_schematic": str(serialized.data[ "initial_schematic"]), "model_schematic": str(serialized.data["model_schematic"]), "test_case": serialized.data['test_case'], "scored": serialized.data['scored'], "id": serialized.data['id'], "view_code": serialized.data['view_code'], "con_weightage": serialized.data['con_weightage'] } print("Recieved POST for LTI APP:", response_data) response_serializer = ArduinoConsumerResponseSerializer( data=response_data ) if response_serializer.is_valid(): return Response(response_serializer.data, status=status.HTTP_201_CREATED) else: return Response(response_serializer.errors, status=status.HTTP_400_BAD_REQUEST) else: return Response({"error": "Initial Schematic not provided"}, status=status.HTTP_400_BAD_REQUEST) else: return Response(serialized.errors, status=status.HTTP_400_BAD_REQUEST) class LTIUpdateAPP(APIView): @swagger_auto_schema(request_body=consumerSerializer) def post(self, request): serialized = consumerSerializer(data=request.data) try: consumer = lticonsumer.objects.get(id=request.data['id']) except lticonsumer.DoesNotExist: return Response(status=status.HTTP_400_BAD_REQUEST) if serialized.is_valid(): try: sim = simulation.objects.get( id=serialized.data.get('test_case')) except simulation.DoesNotExist: sim = None host = request.get_host() protocol = 'https://' if request.is_secure() else 'http://' url = protocol + host + "/api/lti/auth/" + \ str(consumer.model_schematic.save_id) + "/" consumer.consumer_key = serialized.data.get('consumer_key') consumer.secret_key = serialized.data.get('secret_key') consumer.score = serialized.data.get('score') consumer.model_schematic = StateSave.objects.get( id=serialized.data.get('model_schematic')) consumer.initial_schematic = StateSave.objects.get( id=serialized.data.get('initial_schematic')) consumer.test_case = sim consumer.scored = serialized.data.get('scored') consumer.sim_params = serialized.data.get('sim_params') consumer.save() response_data = { "consumer_key": serialized.data.get('consumer_key'), "secret_key": serialized.data.get('secret_key'), "config_url": url, "score": serialized.data.get('score'), "initial_schematic": str(serialized.data[ "initial_schematic"]), "model_schematic": str(serialized.data["model_schematic"]), "test_case": serialized.data['test_case'], "scored": serialized.data['scored'], "id": consumer.id, "sim_params": serialized.data['sim_params'] } return Response(response_data, status=status.HTTP_200_OK) else: return Response(serialized.errors, status=status.HTTP_400_BAD_REQUEST) class ArduinoLTIUpdateAPP(APIView): @swagger_auto_schema(request_body=ArduinoConsumerSerializer) def post(self, request): serialized = ArduinoConsumerSerializer(data=request.data) try: consumer = ArduinLTIConsumer.objects.get(id=request.data['id']) except ArduinLTIConsumer.DoesNotExist: return Response(status=status.HTTP_400_BAD_REQUEST) if serialized.is_valid(): try: sim = ArduinoModelSimulationData.objects.get( id=serialized.data.get('test_case')) except ArduinoModelSimulationData.DoesNotExist: sim = None host = request.get_host() protocol = 'https://' if request.is_secure() else 'http://' url = protocol + host + "/api/lti/arduino/auth/" + \ str(consumer.model_schematic.save_id) + "/" consumer.consumer_key = serialized.data.get('consumer_key') consumer.secret_key = serialized.data.get('secret_key') consumer.score = serialized.data.get('score') consumer.model_schematic = StateSave.objects.get( id=serialized.data.get('model_schematic')) consumer.initial_schematic = StateSave.objects.get( id=serialized.data.get('initial_schematic')) consumer.test_case = sim consumer.scored = serialized.data.get('scored') consumer.sim_params = serialized.data.get('sim_params') consumer.view_code = serialized.data.get('view_code') consumer.save() response_data = { "consumer_key": serialized.data.get('consumer_key'), "secret_key": serialized.data.get('secret_key'), "config_url": url, "score": serialized.data.get('score'), "initial_schematic": str(serialized.data[ "initial_schematic"]), "model_schematic": str(serialized.data["model_schematic"]), "test_case": serialized.data['test_case'], "scored": serialized.data['scored'], "id": consumer.id, "view_code": serialized.data['view_code'], "con_weightage": serialized.data['con_weightage'] } return Response(response_data, status=status.HTTP_200_OK) else: return Response(serialized.errors, status=status.HTTP_400_BAD_REQUEST) class LTIDeleteApp(APIView): def delete(self, request, id): queryset = lticonsumer.objects.all() try: consumer = queryset.get(model_schematic=id) consumer.delete() return Response(data={"Message": "Successfully deleted!"}, status=status.HTTP_204_NO_CONTENT) except lticonsumer.DoesNotExist: return Response(status=status.HTTP_404_NOT_FOUND) class ArduinoLTIDeleteApp(APIView): def delete(self, request, id): queryset = ArduinLTIConsumer.objects.all() try: consumer = queryset.get(model_schematic=id) consumer.delete() return Response(data={"Message": "Successfully deleted!"}, status=status.HTTP_204_NO_CONTENT) except ArduinLTIConsumer.DoesNotExist: return Response(status=status.HTTP_404_NOT_FOUND) class LTIConfigView(View): def get(self, request, save_id): try: saved_state = StateSave.objects.get(save_id=save_id) except StateSave.DoesNotExist: return render(request, 'ltiAPI/denied.html') if saved_state.shared: pass else: saved_state.shared = True saved_state.save() domain = self.request.get_host() launch_url = '%s://%s/%s' % ( self.request.scheme, domain, settings.LTI_TOOL_CONFIGURATION.get('launch_url')) ctx = { 'domain': domain, 'launch_url': launch_url, 'title': saved_state.name + ' and ' + str(saved_state.save_id), 'description': str(saved_state.description), 'course_navigation': settings.LTI_TOOL_CONFIGURATION.get( 'course_navigation' ), } return render(request, 'ltiAPI/config.xml', context=ctx, content_type='text/xml; charset=utf-8') class LTIAuthView(APIView): """POST handler for the LTI login POST back call""" def post(self, request, save_id): params = {key: request.data[key] for key in request.data} consumers_dict = consumers() url = request.build_absolute_uri() headers = request.META # Define the redirect url host = request.get_host() _ = headers.pop('HTTP_COOKIE', None) if 'HTTP_SEC_FETCH_DEST' not in headers: headers['HTTP_SEC_FETCH_DEST'] = 'iframe' if 'HTTP_SEC_FETCH_MODE' not in headers: headers['HTTP_SEC_FETCH_MODE'] = 'navigate' if 'HTTP_SEC_FETCH_SITE' not in headers: headers['HTTP_SEC_FETCH_SITE'] = 'cross-site' print("params:", params) print("headers:", headers) print("host:", host) print("url:", url) ltikeys = ['user_id', 'lis_result_sourcedid', 'lis_outcome_service_url', 'oauth_nonce', 'oauth_timestamp', 'oauth_consumer_key', 'oauth_signature_method', 'oauth_version', 'oauth_signature'] ltidata = {key: params.get(key) for key in ltikeys} current_time = datetime.datetime.now().timestamp() time_diff = abs(current_time - float(ltidata['oauth_timestamp'])) if time_diff > 19800 and time_diff < 20000: ltidata['oauth_timestamp'] = current_time params['oauth_timestamp'] = current_time lti_session = ltiSession.objects.create(**ltidata) print("Got POST for validating LTI consumer") try: i = lticonsumer.objects.get(consumer_key=request.data.get( 'oauth_consumer_key'), initial_schematic__save_id=save_id ) lti_session.lti_consumer = i lti_session.save() except lticonsumer.DoesNotExist: print("Consumer does not exist on backend") return HttpResponseRedirect(get_reverse('ltiAPI:denied')) protocol = 'https://' if request.is_secure() else 'http://' if(not i.model_schematic.is_arduino): next_url = protocol + host + "/eda/#editor?id=" + \ str(i.initial_schematic.save_id) + "&branch=" \ + str(i.initial_schematic.branch) + "&version=" \ + str(i.initial_schematic.version) \ + "<i_id=" + str(lti_session.id) + "<i_user_id=" + \ lti_session.user_id \ + "<i_nonce=" + lti_session.oauth_nonce try: print("Got verification request") verify_request_common(consumers_dict, url, request.method, headers, params) print("Verified consumer") # grade = LTIPostGrade(params, request) return HttpResponseRedirect(next_url) except LTIException: traceback.print_exc() return HttpResponseRedirect(get_reverse('ltiAPI:denied')) class ArduinoLTIAuthView(APIView): """POST handler for the LTI login POST back call""" def post(self, request, save_id): params = {key: request.data[key] for key in request.data} consumers_dict = ArduinoConsumers() url = request.build_absolute_uri() headers = request.META # Define the redirect url host = request.get_host() _ = headers.pop('HTTP_COOKIE', None) if 'HTTP_SEC_FETCH_DEST' not in headers: headers['HTTP_SEC_FETCH_DEST'] = 'iframe' if 'HTTP_SEC_FETCH_MODE' not in headers: headers['HTTP_SEC_FETCH_MODE'] = 'navigate' if 'HTTP_SEC_FETCH_SITE' not in headers: headers['HTTP_SEC_FETCH_SITE'] = 'cross-site' print("params:", params) print("headers:", headers) print("host:", host) print("url:", url) ltikeys = ['user_id', 'lis_result_sourcedid', 'lis_outcome_service_url', 'oauth_nonce', 'oauth_timestamp', 'oauth_consumer_key', 'oauth_signature_method', 'oauth_version', 'oauth_signature'] ltidata = {key: params.get(key) for key in ltikeys} current_time = datetime.datetime.now().timestamp() time_diff = abs(current_time - float(ltidata['oauth_timestamp'])) if time_diff > 19800 and time_diff < 20000: ltidata['oauth_timestamp'] = current_time params['oauth_timestamp'] = current_time lti_session = ArduinoLTISession.objects.create(**ltidata) print("Got POST for validating LTI consumer") try: i = ArduinLTIConsumer.objects.get(consumer_key=request.data.get( 'oauth_consumer_key'), initial_schematic__save_id=save_id ) lti_session.lti_consumer = i lti_session.save() except ArduinLTIConsumer.DoesNotExist: print("Consumer does not exist on backend") return HttpResponseRedirect(get_reverse('ltiAPI:denied')) protocol = 'https://' if request.is_secure() else 'http://' if(i.model_schematic.is_arduino): if(settings.DEBUG): next_url = protocol + host + "/arduino/#/simulator?id=" + \ str(i.initial_schematic.save_id) + "&branch=" \ + str(i.initial_schematic.branch) + "&version=" \ + str(i.initial_schematic.version) \ + "<i_id=" + str(lti_session.id) + "<i_user_id=" \ + lti_session.user_id \ + "<i_nonce=" + lti_session.oauth_nonce else: next_url = protocol + host + "/arduino/#simulator?id=" + \ str(i.initial_schematic.save_id) + "&branch=" \ + str(i.initial_schematic.branch) + "&version=" \ + str(i.initial_schematic.version) \ + "<i_id=" + str(lti_session.id) + "<i_user_id=" \ + lti_session.user_id \ + "<i_nonce=" + lti_session.oauth_nonc try: print("Got verification request") verify_request_common(consumers_dict, url, request.method, headers, params) print("Verified consumer") # grade = LTIPostGrade(params, request) return HttpResponseRedirect(next_url) except LTIException: traceback.print_exc() return HttpResponseRedirect(get_reverse('ltiAPI:denied')) class LTIPostGrade(APIView): permission_classes = [AllowAny, ] @swagger_auto_schema(request_body=SubmissionSerializer) def post(self, request): """ Post grade to LTI consumer using XML :param: score: 0 <= score <= 1. (Score MUST be between 0 and 1) :return: True if post successful and score valid :exception: LTIPostMessageException if call failed """ try: lti_session = ltiSession.objects.get( id=request.data["ltisession"]["id"]) except ltiSession.DoesNotExist: return Response(data={ "error": "No LTI session exists for this ID" }, status=status.HTTP_400_BAD_REQUEST) consumer = lticonsumer.objects.get(id=lti_session.lti_consumer.id) try: sim = simulation.objects.get(id=request.data['student_simulation']) except simulation.DoesNotExist: sim = None schematic = StateSave.objects.get(save_id=request.data["schematic"]) schematic.shared = True schematic.is_submission = True schematic.save() if(sim): score, comparison_result = process_submission( consumer.test_case.result, sim.result, consumer.sim_params) else: score = consumer.score comparison_result = None submission_data = { "project": consumer, "student": schematic.owner, "score": score, "ltisession": lti_session, "schematic": schematic, "student_simulation": sim } submission = Submission.objects.create(**submission_data) print("after submission model created") xml = generate_request_xml( message_identifier(), 'replaceResult', lti_session.lis_result_sourcedid, submission.score) msg = "" try: post = post_message( consumers(), lti_session.oauth_consumer_key, lti_session.lis_outcome_service_url, xml) print(post) if not post: msg = 'An error occurred while saving your score.\ Please try again.' raise LTIPostMessageException('Post grade failed') else: submission.lms_success = True submission.save() msg = 'Your score was submitted. Great job!' if consumer.scored: response_data = { "message": msg, "score": score, "given": sim.result if sim else None, "comparison_result": comparison_result, "sim_params": consumer.sim_params, } else: response_data = { "message": msg, "score": score, "expected": consumer.test_case.result, "given": sim.result if sim else None, "comparison_result": comparison_result, "sim_params": consumer.sim_params, } return Response(data=response_data, status=status.HTTP_200_OK) except LTIException: submission.lms_success = False submission.save() return Response(data={"message": msg}, status=status.HTTP_400_BAD_REQUEST) class ArduinoLTIPostGrade(APIView): permission_classes = [AllowAny, ] @swagger_auto_schema(request_body=SubmissionSerializer) def post(self, request): """ Post grade to LTI consumer using XML :param: score: 0 <= score <= 1. (Score MUST be between 0 and 1) :return: True if post successful and score valid :exception: LTIPostMessageException if call failed """ try: lti_session = ArduinoLTISession.objects.get( id=request.data["ltisession"]["id"]) except ArduinoLTISession.DoesNotExist: return Response(data={ "error": "No LTI session exists for this ID" }, status=status.HTTP_400_BAD_REQUEST) consumer = ArduinLTIConsumer.objects.get( id=lti_session.lti_consumer.id) try: sim = ArduinoLTISimData.objects.get( id=request.data['student_simulation']) except ArduinoLTISimData.DoesNotExist: sim = None schematic = StateSave.objects.get(save_id=request.data["schematic"]) schematic.shared = True schematic.is_submission = True schematic.save() if(sim): score, evaluated = arduino_eval(consumer.test_case.result, sim.result, consumer.con_weightage, consumer.score) if evaluated is False: return Response( data={"error": "Insufficient data points for evaluation"}, status=500) else: score = 0 submission_data = { "project": consumer, "student": schematic.owner, "score": score, "ltisession": lti_session, "schematic": schematic, "student_simulation": sim } submission = ArduinoSubmission.objects.create(**submission_data) print("after submission model created") xml = generate_request_xml( message_identifier(), 'replaceResult', lti_session.lis_result_sourcedid, submission.score) msg = "" try: post = post_message( ArduinoConsumers(), lti_session.oauth_consumer_key, lti_session.lis_outcome_service_url, xml) print(post) if not post: msg = 'An error occurred while saving your score.\ Please try again.' raise LTIPostMessageException('Post grade failed') else: submission.lms_success = True submission.save() msg = 'Your score : ' + str(score) + ' was submitted. \ Great job!' if consumer.scored: response_data = { "message": msg, "score": score, "given": sim.result if sim else None } else: response_data = { "message": msg, "score": score, "expected": consumer.test_case.result, "given": sim.result if sim else None } return Response(data=response_data, status=status.HTTP_200_OK) except LTIException: submission.lms_success = False submission.save() return Response(data={"message": msg}, status=status.HTTP_400_BAD_REQUEST) class GetLTISubmission(APIView): permission_classes = [IsAuthenticated, ] def get(self, request, save_id, version, branch): consumer = lticonsumer.objects.get( model_schematic__save_id=save_id, model_schematic__branch=branch, model_schematic__version=version) # print(consumer) submissions = consumer.submission_set.all() # print(submissions) serialized = GetSubmissionsSerializer(submissions, many=True) return Response(serialized.data, status=status.HTTP_200_OK) class GetArduinoLTISubmission(APIView): permission_classes = [IsAuthenticated, ] def get(self, request, save_id, version, branch): consumer = ArduinLTIConsumer.objects.get( model_schematic__save_id=save_id, model_schematic__branch=branch, model_schematic__version=version) # print(consumer) submissions = consumer.arduinosubmission_set.all() # print(submissions) serialized = GetArduinoSubmissionsSerializer(submissions, many=True) return Response(serialized.data, status=status.HTTP_200_OK) class ArduinoLTISimulationDataView(APIView): """ Arduino LTI Simulation Data """ permission_classes = (AllowAny,) methods = ['GET', 'POST'] @swagger_auto_schema(request_body=ArduinoLTISimulationDataSerializer) def post(self, request, save_id, lti_id): try: circuit = StateSave.objects.get(id=save_id) except StateSave.DoesNotExist: return Response({"error": "Circuit not found"}, status=status.HTTP_404_NOT_FOUND) try: session = ArduinoLTISession.objects.get(id=lti_id) except ArduinoLTISession.DoesNotExist: return Response({"error": "No LTI session found"}) if(not(len(request.data))): return Response({"error": "Simulation data not passed"}, status=status.HTTP_400_BAD_REQUEST) try: ArduinoLTISimData(session_id=session, circuit_id=circuit, result=str(request.data)).save() except Exception as e: return Response({"error": "Record Not saved"}, status=500) else: return Response({"success": "Record Successfully Saved"}, status=200) def get(self, request, save_id, lti_id): try: circuit = StateSave.objects.get(id=save_id) except StateSave.DoesNotExist: return Response({"error": "Circuit not found"}, status=status.HTTP_404_NOT_FOUND) try: queryset = ArduinoLTISimData.objects.filter( session_id=lti_id, circuit_id=circuit) serial = ArduinoLTISimulationDataSerializer(queryset, many=True) return Response(serial.data, status=200) except Exception as e: print(e) return Response({"error": "No simulation data found"}, status=status.HTTP_404_NOT_FOUND) ================================================ FILE: esim-cloud-backend/manage.py ================================================ #!/usr/bin/env python """Django's command-line utility for administrative tasks.""" import os import sys def main(): os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'esimCloud.settings') try: from django.core.management import execute_from_command_line except ImportError as exc: raise ImportError( "Couldn't import Django. Are you sure it's installed and " "available on your PYTHONPATH environment variable? Did you " "forget to activate a virtual environment?" ) from exc execute_from_command_line(sys.argv) if __name__ == '__main__': main() ================================================ FILE: esim-cloud-backend/migrations.sh ================================================ python manage.py makemigrations authAPI python manage.py migrate authAPI python manage.py makemigrations workflowAPI python manage.py migrate workflowAPI python manage.py makemigrations publishAPI python manage.py migrate publishAPI python manage.py makemigrations libAPI python manage.py migrate libAPI python manage.py makemigrations saveAPI python manage.py migrate saveAPI python manage.py makemigrations simulationAPI python manage.py migrate simulationAPI python manage.py makemigrations ltiAPI python manage.py migrate ltiAPI python manage.py makemigrations python manage.py migrate python manage.py collectstatic --noinput python manage.py loaddata initial_setup python manage.py createsuperuser_noinput --username=admin --password=admin python manage.py load_default_libs --username=admin --location=kicad-symbols/default/ --default python manage.py load_default_libs --username=admin --location=kicad-symbols/additional/ python manage.py loaddata gallery_setup ================================================ FILE: esim-cloud-backend/publishAPI/__init__.py ================================================ # default_app_config = 'publishAPI.apps.PublishapiConfig' ================================================ FILE: esim-cloud-backend/publishAPI/admin.py ================================================ from django.contrib import admin from publishAPI.models import Project, CircuitTag, TransitionHistory, Report @admin.register(CircuitTag) class CircuitTagAdmin(admin.ModelAdmin): list_display = ('tag', 'description') search_fields = ('tag', 'description') @admin.register(Report) class ReportAdmin(admin.ModelAdmin): list_display = ('id', 'project', 'report_time') readonly_fields = ('project', 'report_time', 'reporter', 'resolver') class HistoryInline(admin.TabularInline): model = TransitionHistory readonly_fields = ( 'id', 'transition_author', 'transition_time',) @admin.register(Project) class CircuitAdmin(admin.ModelAdmin): inlines = [HistoryInline, ] list_display = ('title',) readonly_fields = ('fields',) # @admin.register(Publish) # class PublishAdmin(admin.ModelAdmin): # list_display = ('circuit_title', 'image_tag', 'published', 'reviewed_by') ================================================ FILE: esim-cloud-backend/publishAPI/apps.py ================================================ # from django.apps import AppConfig # from django.db.models.signals import post_migrate, m2m_changed # from django.contrib.auth import get_user_model # class PublishapiConfig(AppConfig): # name = 'publishAPI' # def ready(self): # from .signals import populate_models, add_staff_status # post_migrate.connect(populate_models, sender=self) # m2m_changed.connect( # add_staff_status, sender=get_user_model().groups.through) ================================================ FILE: esim-cloud-backend/publishAPI/models.py ================================================ from django.db import models from django.contrib.auth import get_user_model from django.db.models.deletion import CASCADE, SET_NULL from django.contrib.postgres.fields import ArrayField from django.utils.safestring import mark_safe from django.core.files.storage import FileSystemStorage from django.conf import settings import uuid from workflowAPI.models import State, Transition # For handling file uploads to a permenant direcrory file_storage = FileSystemStorage( location=settings.FILE_STORAGE_ROOT, base_url=settings.FILE_STORAGE_URL) class CircuitTag(models.Model): tag = models.CharField(null=False, max_length=100, blank=False, unique=True) description = models.CharField(max_length=200, blank=False) # For Django Admin def __str__(self): return self.tag class Field(models.Model): name = models.CharField( max_length=40, blank=False) text = models.CharField(max_length=400, null=True) class Project(models.Model): project_id = models.UUIDField( primary_key=True, default=uuid.uuid4, editable=False) # Circuit Details title = models.CharField( max_length=200, blank=False) # Search description = models.CharField(max_length=1000, null=True) fields = models.ManyToManyField(to=Field) state = models.ForeignKey(State, on_delete=CASCADE, default=1) author = models.ForeignKey( get_user_model(), null=True, on_delete=models.CASCADE) is_arduino = models.BooleanField(default=False, null=False) is_reported = models.BooleanField(default=False, null=True) active_branch = models.CharField(max_length=20, null=True) active_version = models.CharField(max_length=20, null=True) dc_sweep = models.OneToOneField( to='DCSweepParameters', on_delete=models.CASCADE, null=True) transient_analysis = models.OneToOneField( to='TransientAnalysisParameters', on_delete=models.CASCADE, null=True) tf_analysis = models.OneToOneField( to='TFAnalysisParameters', on_delete=models.CASCADE, null=True) ac_analysis = models.OneToOneField( to='ACAnalysisParameters', on_delete=models.CASCADE, null=True) def __str__(self): return self.title class TransitionHistory(models.Model): id = models.AutoField(primary_key=True) project = models.ForeignKey( Project, editable=False, on_delete=models.CASCADE, null=True) transition_author = models.ForeignKey( get_user_model(), on_delete=models.CASCADE) transition = models.ForeignKey(to=Transition, on_delete=models.CASCADE, null=True) transition_time = models.DateTimeField(auto_now_add=True) reviewer_notes = models.CharField(max_length=500, blank=True) is_done_by_reviewer = models.BooleanField(default=False, null=True) class Meta: verbose_name_plural = 'Transition Histories' class Report(models.Model): id = models.AutoField(primary_key=True) project = models.ForeignKey( Project, editable=False, on_delete=models.CASCADE, null=True) report_open = models.BooleanField(default=True, null=False) resolver = models.ForeignKey( get_user_model(), on_delete=models.CASCADE, null=True, related_name='resolver') # noqa report_time = models.DateTimeField(auto_now_add=True) description = models.CharField(max_length=500, null=False) reporter = models.ForeignKey( get_user_model(), on_delete=models.CASCADE, related_name='reporter', null=True) # noqa approved = models.BooleanField(default=None, null=True) class DCSweepParameters(models.Model): parameter = models.CharField(max_length=200, null=True) sweepType = models.CharField(max_length=200, null=False, default='Linear') start = models.CharField(max_length=200, null=True) stop = models.CharField(max_length=200, null=True) step = models.CharField(max_length=200, null=True) parameter2 = models.CharField(max_length=200, null=True) start2 = models.CharField(max_length=200, null=True) stop2 = models.CharField(max_length=200, null=True) step2 = models.CharField(max_length=200, null=True) class TransientAnalysisParameters(models.Model): start = models.CharField(max_length=200, null=True) stop = models.CharField(max_length=200, null=True) step = models.CharField(max_length=200, null=True) skipInitial = models.BooleanField(default=False) class ACAnalysisParameters(models.Model): input = models.CharField(max_length=200, default='dec') stop = models.CharField(max_length=200, null=True) start = models.CharField(max_length=200, null=True) pointsBydecade = models.CharField(max_length=200, null=True) class TFAnalysisParameters(models.Model): outputNodes = models.BooleanField(default=False) outputVoltageSource = models.CharField(max_length=200, null=True) inputVoltageSource = models.CharField(max_length=200, null=True) ================================================ FILE: esim-cloud-backend/publishAPI/serializers.py ================================================ from django.db import models from django.db.models import fields from rest_framework import serializers from .models import * from django.core.files.base import ContentFile import base64 import six import uuid import imghdr from saveAPI.serializers import StateSaveSerializer from workflowAPI.models import Transition class DCSweepSerializer(serializers.ModelSerializer): class Meta: model = DCSweepParameters fields = '__all__' def create(self, validated_data): return DCSweepParameters.objects.create(**validated_data) def update(self, instance, validated_data): return super().update(instance, validated_data) class TransientAnalysisSerializer(serializers.ModelSerializer): class Meta: model = TransientAnalysisParameters fields = '__all__' class ACAnalysisSerializer(serializers.ModelSerializer): class Meta: model = ACAnalysisParameters fields = '__all__' class TFAnalysisSerializer(serializers.ModelSerializer): class Meta: model = TFAnalysisParameters fields = '__all__' class Base64ImageField(serializers.ImageField): def to_internal_value(self, data): if isinstance(data, six.string_types): if 'data:' in data and ';base64,' in data: header, data = data.split(';base64,') try: decoded_file = base64.b64decode(data) except TypeError: self.fail('invalid_image') file_name = str(uuid.uuid4()) file_extension = imghdr.what(file_name, decoded_file) complete_file_name = "%s.%s" % (file_name, file_extension,) data = ContentFile(decoded_file, name=complete_file_name) return super(Base64ImageField, self).to_internal_value(data) class CircuitTagSerializer(serializers.ModelSerializer): class Meta: model = CircuitTag fields = ('tag', 'description', 'id') class TransitionElementSerializer(serializers.ModelSerializer): class Meta: model = Transition fields = '__all__' class TransitionHistorySerializer(serializers.ModelSerializer): transition_author_name = serializers.CharField( read_only=True, source='transition_author.username') from_state_name = serializers.CharField( read_only=True, source='transition.from_state.name') to_state_name = serializers.CharField( read_only=True, source='transition.to_state.name') transition = TransitionElementSerializer() class Meta: model = TransitionHistory fields = ('transition_author_name', 'from_state_name', 'to_state_name', 'transition_time', 'transition', 'reviewer_notes',) class FieldSerializer(serializers.ModelSerializer): class Meta: model = Field fields = ('name', 'text') class ProjectSerializer(serializers.ModelSerializer): status_name = serializers.CharField(read_only=True, source='state.name') author_name = serializers.CharField( read_only=True, source='author.username') fields = FieldSerializer(many=True) save_id = serializers.SerializerMethodField() active_save = serializers.SerializerMethodField() dc_sweep = DCSweepSerializer() transient_analysis = TransientAnalysisSerializer() tf_analysis = TFAnalysisSerializer() ac_analysis = ACAnalysisSerializer() class Meta: model = Project fields = ('project_id', 'title', 'description', 'status_name', 'author_name', 'is_reported', 'fields', 'active_branch', 'active_version', 'save_id', 'active_save', 'dc_sweep', 'transient_analysis', 'tf_analysis', 'ac_analysis', ) def get_save_id(self, obj): return obj.statesave_set.first().save_id def get_active_save(self, obj): return StateSaveSerializer( obj.statesave_set.get(save_id=obj.statesave_set.first().save_id, branch=obj.active_branch, version=obj.active_version)).data class ReportSerializer(serializers.ModelSerializer): class Meta: model = Report fields = ('id', 'report_open', 'report_time', 'description', 'approved') class ReportDescriptionSerializer(serializers.ModelSerializer): class Meta: model = Report fields = ('description',) ================================================ FILE: esim-cloud-backend/publishAPI/signals.py ================================================ # import logging # logger = logging.getLogger(__name__) # def add_staff_status(sender, instance, action, **kwargs): # logger.info('Group add/remove hook called') # if action == 'post_add': # instance.is_staff = True # instance.save() # logger.info('Added is_staff flag for ' + str(instance)) # if action == 'post_remove': # instance.is_staff = False # instance.save() # logger.info('Removed is_staff flag for ' + str(instance)) # def populate_models(sender, **kwargs): # from django.contrib.auth.models import Group, Permission # from publishAPI import models # GROUPS_PERMISSIONS = { # 'Reviewers': { # models.Publish: ['add', 'change', 'delete', 'view'], # models.Circuit: ['view', 'add', 'delete'], # models.CircuitTag: ['add', 'view', 'change', 'delete'], # }, # } # for group_name in GROUPS_PERMISSIONS: # # Get or create group # group, created = Group.objects.get_or_create(name=group_name) # # Loop models in group # for model_cls in GROUPS_PERMISSIONS[group_name]: # # Loop permissions in group/model # for perm_index, perm_name in \ # enumerate(GROUPS_PERMISSIONS[group_name][model_cls]): # # Generate permission name as Django would generate it # codename = perm_name + "_" + model_cls._meta.model_name # try: # # Find permission object and add to group # perm = Permission.objects.get(codename=codename) # group.permissions.add(perm) # logger.info(str(perm_index) # + " Adding " # + codename # + " to group " # + group.__str__()) # except Permission.DoesNotExist: # logger.info(codename + " not found") ================================================ FILE: esim-cloud-backend/publishAPI/tests.py ================================================ from django.test import TestCase # Create your tests here. ================================================ FILE: esim-cloud-backend/publishAPI/urls.py ================================================ """ esimCloud URL Configuration """ from django.urls import path from django.conf.urls import url, include from publishAPI import views as publishAPI_views from rest_framework import routers router = routers.SimpleRouter() router.register(r'tags', publishAPI_views.TagsViewSet, basename='tag') router.register(r'publish/publishing', publishAPI_views.PublicProjectViewSet, basename='publish') router.register(r'publish/myproject', publishAPI_views.MyProjectViewSet, basename='project') # router.register(r'circuits', publishAPI_views.PublishViewSet, # basename='Project') urlpatterns = [ url(r'^', include(router.urls)), path('publish/project/', publishAPI_views.ProjectViewSet.as_view(), name='create'), ] ================================================ FILE: esim-cloud-backend/publishAPI/views.py ================================================ from rest_framework import permissions from publishAPI.serializers import CircuitTagSerializer, ProjectSerializer, \ TransitionHistorySerializer, DCSweepSerializer, \ TransientAnalysisSerializer, ACAnalysisSerializer, \ TFAnalysisSerializer # noqa from rest_framework.permissions import DjangoModelPermissionsOrAnonReadOnly, \ AllowAny, DjangoModelPermissions # noqa from rest_framework.parsers import JSONParser, MultiPartParser from workflowAPI.models import Permission from publishAPI.models import ACAnalysisParameters, CircuitTag, \ DCSweepParameters, Project, Field, TFAnalysisParameters, \ TransientAnalysisParameters, TransitionHistory from rest_framework.permissions import DjangoModelPermissionsOrAnonReadOnly, \ IsAuthenticated, AllowAny, \ DjangoModelPermissions # noqa from rest_framework.parsers import JSONParser, MultiPartParser, FormParser from drf_yasg.utils import swagger_auto_schema from rest_framework import viewsets, status from rest_framework.views import APIView from rest_framework.response import Response from saveAPI.models import StateSave from workflowAPI.utils import ChangeStatus import logging logger = logging.getLogger(__name__) class TagsViewSet(viewsets.ModelViewSet): """ CRUD for Tags """ permission_classes = (DjangoModelPermissionsOrAnonReadOnly,) queryset = CircuitTag.objects.all() serializer_class = CircuitTagSerializer class ProjectViewSet(APIView): parser_classes = (FormParser, JSONParser) serializer_class = ProjectSerializer def get(self, request, circuit_id): try: queryset = Project.objects.get(project_id=circuit_id) except Project.DoesNotExist: return Response({'error': 'No circuit there'}, status=status.HTTP_404_NOT_FOUND) user_roles = self.request.user.groups.all() can_edit = False can_delete = False if queryset.state.public is False: if queryset.author == self.request.user and Permission.objects.filter( # noqa role__in=user_roles, view_own_states=queryset.state).exists(): pass elif queryset.author != self.request.user and Permission.objects.filter( # noqa role__in=user_roles, view_other_states=queryset.state).exists(): pass else: return Response(status=status.HTTP_401_UNAUTHORIZED) if queryset.author == self.request.user and Permission.objects.filter( # noqa role__in=user_roles, edit_own_states=queryset.state).exists(): can_edit = True else: can_edit = False if queryset.author == self.request.user and Permission.objects.filter( # noqa role__in=user_roles, del_own_states=queryset.state).exists(): can_delete = True else: can_delete = False try: histories = TransitionHistorySerializer( TransitionHistory.objects.filter( project=queryset).order_by("transition_time"), many=True) serialized = ProjectSerializer(queryset) data = serialized.data.copy() data['history'] = histories.data data['can_edit'] = can_edit data['can_delete'] = can_delete return Response(data) except TransitionHistory.DoesNotExist: return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR) def post(self, request, circuit_id): save_states = StateSave.objects.filter(save_id=circuit_id) try: active_state_save = save_states.get( branch=request.data[0]['active_branch'], version=request.data[0]['active_version']) except StateSave.DoesNotExist: return Response({'Save does not exist'}, status=status.HTTP_404_NOT_FOUND) user_roles = self.request.user.groups.all() if active_state_save.project is None: project = Project(title=request.data[0]['title'], description=request.data[0] ['description'], author=active_state_save.owner, is_arduino=active_state_save.is_arduino, active_branch=request.data[0]['active_branch'], active_version=request.data[0]['active_version'], ) dc_sweep = DCSweepParameters( parameter=request.data[3]['parameter'], sweepType=request.data[3]['sweepType'], start=request.data[3]['start'], stop=request.data[3]['stop'], step=request.data[3]['step'], parameter2=request.data[3]['parameter2'], start2=request.data[3]['start2'], step2=request.data[3]['step2'], stop2=request.data[3]['stop2'], ) transient_analysis = TransientAnalysisParameters( start=request.data[4]['start'], stop=request.data[4]['stop'], step=request.data[4]['step'], skipInitial=request.data[4]['skipInitial'], ) ac_analysis = ACAnalysisParameters( input=request.data[5]['input'], stop=request.data[5]['stop'], start=request.data[5]['start'], pointsBydecade=request.data[5]['pointsBydecade'], ) tf_analysis = TFAnalysisParameters( outputNodes=request.data[6]['outputNodes'], outputVoltageSource=request.data[6]['outputVoltageSource'], inputVoltageSource=request.data[6]['inputVoltageSource'], ) dc_sweep.save() ac_analysis.save() tf_analysis.save() transient_analysis.save() project.dc_sweep = dc_sweep project.transient_analysis = transient_analysis project.ac_analysis = ac_analysis project.tf_analysis = tf_analysis project.save() for field in request.data[1]: field = Field(name=field['name'], text=field['text']) field.save() project.fields.add(field) project.save() can_edit = False can_delete = False for save_state in save_states: save_state.project = project save_state.shared = True save_state.save(update_fields=['project', 'shared', ]) # ChangeStatus(self, request.data[2], active_state_save.project) if Permission.objects.filter(role__in=user_roles, edit_own_states=project.state).exists(): # noqa can_edit = True else: can_edit = False if Permission.objects.filter(role__in=user_roles, del_own_states=project.state).exists(): # noqa can_delete = True else: can_delete = False histories = TransitionHistorySerializer( TransitionHistory.objects.filter(project=project), many=True) serialized = ProjectSerializer(project) data = serialized.data.copy() data['save_id'] = active_state_save.save_id data['history'] = histories.data data['can_edit'] = can_edit data['can_delete'] = can_delete return Response(data) else: can_edit = False can_delete = False if Permission.objects.filter(role__in=user_roles, edit_own_states=active_state_save.project.state).exists(): # noqa pass else: return Response(status=status.HTTP_401_UNAUTHORIZED) active_state_save.project.title = request.data[0]['title'] active_state_save.project.description = request.data[0][ 'description'] active_state_save.project.active_branch = request.data[0][ 'active_branch'] active_state_save.project.active_version = request.data[0][ 'active_version'] dc_sweep = DCSweepParameters( parameter=request.data[3]['parameter'], sweepType=request.data[3]['sweepType'], start=request.data[3]['start'], stop=request.data[3]['stop'], step=request.data[3]['step'], parameter2=request.data[3]['parameter2'], start2=request.data[3]['start2'], step2=request.data[3]['step2'], stop2=request.data[3]['stop2'], ) transient_analysis = TransientAnalysisParameters( start=request.data[4]['start'], stop=request.data[4]['stop'], step=request.data[4]['step'], skipInitial=request.data[4]['skipInitial'], ) ac_analysis = ACAnalysisParameters( input=request.data[5]['input'], stop=request.data[5]['stop'], start=request.data[5]['start'], pointsBydecade=request.data[5]['pointsBydecade'], ) tf_analysis = TFAnalysisParameters( outputNodes=request.data[6]['outputNodes'], outputVoltageSource=request.data[6]['outputVoltageSource'], inputVoltageSource=request.data[6]['inputVoltageSource'], ) dc_sweep.save() ac_analysis.save() tf_analysis.save() transient_analysis.save() active_state_save.project.dc_sweep = dc_sweep active_state_save.project.transient_analysis = transient_analysis active_state_save.project.ac_analysis = ac_analysis active_state_save.project.tf_analysis = tf_analysis active_state_save.project.save() if request.data[2] != '': ChangeStatus(self, request.data[2], active_state_save.project) if Permission.objects.filter(role__in=user_roles, edit_own_states=active_state_save.project.state).exists(): # noqa can_edit = True else: can_edit = False if Permission.objects.filter(role__in=user_roles, del_own_states=active_state_save.project.state).exists(): # noqa can_delete = True else: can_delete = False active_state_save.project.fields.clear() for field in request.data[1]: field = Field(name=field['name'], text=field['text']) field.save() active_state_save.project.fields.add(field) active_state_save.project.save() histories = TransitionHistorySerializer( TransitionHistory.objects.filter( project=active_state_save.project), many=True) serialized = ProjectSerializer(active_state_save.project) data = serialized.data.copy() data['save_id'] = active_state_save.save_id data['history'] = histories.data data['can_edit'] = can_edit data['can_delete'] = can_delete return Response(data) def delete(self, request, circuit_id): try: project = Project.objects.get(project_id=circuit_id) except Project.DoesNotExist: return Response({'error': 'No circuit there'}, status=status.HTTP_404_NOT_FOUND) if project.author == self.request.user and Permission.objects.filter( role__in=self.request.user.groups.all(), del_own_states=project.state).exists(): project.delete() return Response({'done': True}) else: return Response(status=status.HTTP_400_BAD_REQUEST) class MyProjectViewSet(viewsets.ModelViewSet): """ List users circuits ( Permission Groups ) """ parser_classes = (FormParser, JSONParser) permission_classes = (IsAuthenticated,) serializer_class = ProjectSerializer queryset = Project.objects.none() @swagger_auto_schema(response={200: ProjectSerializer}) def list(self, request): try: queryset = Project.objects.filter( author=self.request.user, is_arduino=False) except Project.DoesNotExist: return Response({'error': 'No circuit there'}, status=status.HTTP_404_NOT_FOUND) serialized = ProjectSerializer(queryset, many=True) return Response(serialized.data) class PublicProjectViewSet(viewsets.ModelViewSet): """ List published circuits """ parser_classes = (FormParser, JSONParser) serializer_class = ProjectSerializer queryset = Project.objects.none() @swagger_auto_schema(response={200: ProjectSerializer}) def list(self, request): try: queryset = Project.objects.filter( is_arduino=False, state__public=True) except Project.DoesNotExist: return Response(status=status.HTTP_404_NOT_FOUND) serialized = ProjectSerializer(queryset, many=True) return Response(serialized.data) ================================================ FILE: esim-cloud-backend/requirements.txt ================================================ amqp==2.5.2 asgiref==3.2.7 billiard==3.6.3.0 cairocffi==1.1.0 CairoSVG==2.4.2 celery==4.4.2 certifi==2020.4.5.1 cffi==1.14.0 chardet==3.0.4 configparse==0.1.5 configparser==5.0.0 coreapi==2.3.3 coreschema==0.0.4 cryptography==39.0.0 django==2.2.12 django-cors-headers==3.2.1 django-templated-mail==1.1.1 djangorestframework==3.11.0 djongo==1.2.38 djoser==2.0.3 cssselect2==0.3.0 defusedxml==0.6.0 django-filter==2.2.0 django-inline-actions==2.4.0 drawSvg==1.5.3 drf-yasg==1.17.1 gunicorn==20.0.4 idna==2.9 imageio==2.8.0 importlib-metadata==1.6.0 inflection==0.4.0 itypes==1.2.0 Jinja2==2.11.2 kombu==4.6.8 MarkupSafe==1.1.1 mysqlclient==1.4.6 oauthlib==3.1.0 packaging==20.3 Pillow==7.1.2 psycopg2==2.8.5 pycparser==2.20 PyJWT==1.7.1 numpy==1.18.4 Pillow==7.1.2 psycopg2==2.8.5 pymongo==3.10.1 pyparsing==2.4.7 python-dateutil==2.8.1 python3-openid==3.1.0 pytz==2019.3 redis==3.4.1 requests==2.23.0 requests-oauthlib==1.3.0 ruamel.yaml==0.16.10 ruamel.yaml.clib==0.2.0 six==1.14.0 social-auth-app-django==3.1.0 social-auth-core==3.3.3 sqlparse==0.2.4 tinycss2==1.0.2 uritemplate==3.0.1 urllib3==1.25.9 vine==1.3.0 webencodings==0.5.1 whitenoise==5.0.1 zipp==3.1.0 pylti==0.7.0 sphinxcontrib-openapi m2r2 ================================================ FILE: esim-cloud-backend/saveAPI/__init__.py ================================================ ================================================ FILE: esim-cloud-backend/saveAPI/admin.py ================================================ from django.contrib import admin from saveAPI.models import Gallery, StateSave, ArduinoModelSimulationData from django.forms import TextInput, Textarea from django.db import models @admin.register(StateSave) class UserCircuits(admin.ModelAdmin): list_display = ('name', 'is_arduino', 'base64_image', 'save_time', 'create_time', "version") list_filter = ('version', 'save_id',) @admin.register(ArduinoModelSimulationData) class ArduinoSimulation(admin.ModelAdmin): list_display = ('save_id', "result") list_filter = ('save_id', "result",) @admin.register(Gallery) class GalleryCircuits(admin.ModelAdmin): list_display = ('name', 'image_tag', 'description', 'shared', 'is_arduino') list_filter = ('save_time', 'is_arduino') search_fields = ('name', 'description') formfield_overrides = { models.CharField: {'widget': TextInput(attrs={'size': '50'})}, models.TextField: {'widget': Textarea(attrs={'rows': 20, 'cols': 50})}, } ================================================ FILE: esim-cloud-backend/saveAPI/apps.py ================================================ from django.apps import AppConfig class SaveapiConfig(AppConfig): name = 'saveAPI' ================================================ FILE: esim-cloud-backend/saveAPI/dbrouters.py ================================================ class mongoRouter: """ A router to control all database operations on models in the auth and contenttypes applications. """ route_app_labels = {'saveAPI'} def db_for_read(self, model, **hints): """ Attempts to read auth and contenttypes models go to auth_db. """ if model._meta.app_label in self.route_app_labels: return 'mongodb' return None def db_for_write(self, model, **hints): """ Attempts to write auth and contenttypes models go to auth_db. """ if model._meta.app_label in self.route_app_labels: return 'mongodb' return None def allow_relation(self, obj1, obj2, **hints): """ Allow relations if a model in the auth or contenttypes apps is involved. """ if ( obj1._meta.app_label in self.route_app_labels or obj2._meta.app_label in self.route_app_labels ): return True return None def allow_migrate(self, db, app_label, model_name=None, **hints): """ Make sure the auth and contenttypes apps only appear in the 'auth_db' database. """ if app_label in self.route_app_labels: return db == 'mongodb' return None ================================================ FILE: esim-cloud-backend/saveAPI/models.py ================================================ from enum import unique from django.db import models from django.contrib.auth import get_user_model from django.core.files.storage import FileSystemStorage from django.conf import settings import uuid from libAPI.models import Library from publishAPI.models import Project from django.utils.safestring import mark_safe # For handling file uploads to a permenant direcrory file_storage = FileSystemStorage( location=settings.FILE_STORAGE_ROOT, base_url=settings.FILE_STORAGE_URL) class StateSave(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=200, null=True) description = models.CharField(max_length=400, null=True) save_time = models.DateTimeField(auto_now=True, db_index=True) create_time = models.DateTimeField(auto_now_add=True) save_id = models.UUIDField(default=uuid.uuid4) data_dump = models.TextField(null=False) shared = models.BooleanField(default=False) owner = models.ForeignKey( get_user_model(), null=True, on_delete=models.CASCADE) base64_image = models.ImageField( upload_to='circuit_images', storage=file_storage, null=True) version = models.CharField(max_length=20, null=False) branch = models.CharField(max_length=20, null=False) is_arduino = models.BooleanField(default=False, null=False) esim_libraries = models.ManyToManyField(Library) project = models.ForeignKey(to=Project, on_delete=models.SET_NULL, null=True) is_submission = models.BooleanField(null=True, blank=True) def save(self, *args, **kwargs): super(StateSave, self).save(*args, **kwargs) def __str__(self): return self.name class ArduinoModelSimulationData(models.Model): save_id = models.ForeignKey(StateSave, to_field='id', on_delete=models.CASCADE, null=False) result = models.TextField(null=True, default=True) def save(self, *args, **kwargs): super(ArduinoModelSimulationData, self).save(*args, **kwargs) def __str__(self): return self.result class Gallery(models.Model): id = models.AutoField(primary_key=True) save_id = models.CharField(unique=True, max_length=500, null=False) data_dump = models.TextField(null=False) name = models.CharField(max_length=100, default="Untitled") description = models.CharField(max_length=1000) media = models.ImageField( upload_to='circuit_images_esim', storage=file_storage, null=True) shared = models.BooleanField(default=True) save_time = models.DateTimeField(auto_now=True) is_arduino = models.BooleanField(default=False, null=False) esim_libraries = models.ManyToManyField(Library) # For Django Admin Panel def image_tag(self): print(file_storage) if self.media: return mark_safe('' % self.media.url) # noqa else: return 'No Image Found' image_tag.short_description = 'Image' def __str__(self): return self.name ================================================ FILE: esim-cloud-backend/saveAPI/serializers.py ================================================ from ensurepip import version from os import makedirs, read from django.db.models import fields from rest_framework import serializers from rest_framework.fields import ListField from saveAPI.models import StateSave, Gallery, ArduinoModelSimulationData from libAPI.models import Library from libAPI.serializers import LibrarySerializer from django.core.files.base import ContentFile from ltiAPI.models import ArduinLTIConsumer, lticonsumer import base64 import six import uuid import imghdr class Base64ImageField(serializers.ImageField): def to_internal_value(self, data): _, data = self.update(data) return super(Base64ImageField, self).to_internal_value(data) def update(self, data): if isinstance(data, six.string_types): if 'data:' in data and ';base64,' in data: header, data = data.split(';base64,') try: decoded_file = base64.b64decode(data) except TypeError: self.fail('invalid_image') file_name = str(uuid.uuid4()) file_extension = imghdr.what(file_name, decoded_file) complete_file_name = "%s.%s" % (file_name, file_extension,) data = ContentFile(decoded_file, name=complete_file_name) return complete_file_name, data class StateSaveSerializer(serializers.ModelSerializer): base64_image = Base64ImageField(max_length=None, use_url=True) esim_libraries = LibrarySerializer(many=True, required=False) project_version = serializers.CharField(read_only=True, source='project.active_version') project_branch = serializers.CharField(read_only=True, source='project.active_branch') is_reported = serializers.BooleanField(read_only=True, source='project.is_reported') lti_id = serializers.SerializerMethodField() class Meta: model = StateSave fields = ('save_time', 'save_id', 'data_dump', 'name', 'description', 'owner', 'shared', 'base64_image', 'create_time', 'version', 'branch', 'is_arduino', 'esim_libraries', 'project_id', 'project_version', 'project_branch', 'is_reported', 'id', 'lti_id', 'is_submission') def get_lti_id(self, obj): save_id = obj.save_id ltis = lticonsumer.objects.filter(model_schematic__save_id=save_id) arduinoLTIs = ArduinLTIConsumer.objects.filter( model_schematic__save_id=save_id) if ltis.exists(): return ltis[0].id elif arduinoLTIs.exists(): return arduinoLTIs[0].id else: return None class SaveListSerializer(serializers.ModelSerializer): base64_image = Base64ImageField(max_length=None, use_url=True) esim_libraries = LibrarySerializer(many=True, required=False) project_id = serializers.CharField(read_only=True, source='project.project_id') project_version = serializers.CharField(read_only=True, source='project.active_version') project_branch = serializers.CharField(read_only=True, source='project.active_branch') is_reported = serializers.BooleanField(read_only=True, source='project.is_reported') lti_id = serializers.SerializerMethodField() class Meta: model = StateSave fields = ('save_time', 'save_id', 'name', 'description', 'shared', 'base64_image', 'create_time', 'version', 'branch', 'esim_libraries', 'project_id', 'project_version', 'project_branch', 'is_reported', 'id', 'lti_id', 'is_submission') def get_lti_id(self, obj): save_id = obj.save_id ltis = lticonsumer.objects.filter(model_schematic__save_id=save_id) arduinoLTIs = ArduinLTIConsumer.objects.filter( model_schematic__save_id=save_id) if ltis.exists(): return ltis[0].id elif arduinoLTIs.exists(): return arduinoLTIs[0].id else: return None class GallerySerializer(serializers.ModelSerializer): media = Base64ImageField(max_length=None, use_url=True) esim_libraries = LibrarySerializer(many=True, required=False) class Meta: model = Gallery fields = ( 'save_id', 'data_dump', 'name', 'description', 'media', 'shared', 'esim_libraries', 'is_arduino' ) class ArduinoModelSimulationDataSerializer(serializers.ModelSerializer): # save_id = serializers.IntegerField() result = serializers.CharField() class Meta: model = ArduinoModelSimulationData fields = ('id', 'save_id', 'result', ) ================================================ FILE: esim-cloud-backend/saveAPI/tests.py ================================================ from django.test import TestCase # Create your tests here. ================================================ FILE: esim-cloud-backend/saveAPI/urls.py ================================================ """ esimCloud URL Configuration """ from django.urls import path from saveAPI import views as saveAPI_views from rest_framework.routers import DefaultRouter router = DefaultRouter() router.register(r'save/search', saveAPI_views.SaveSearchViewSet, basename='SaveSearch') urlpatterns = [ path('save', saveAPI_views.StateSaveView.as_view(), name='saveState'), path('save/list', saveAPI_views.UserSavesView.as_view(), name='listSaves'), path('save/arduino/list', saveAPI_views.ArduinoSaveList.as_view(), name='ArduinoSaveList'), path("save/gallery", saveAPI_views.GalleryView.as_view(), name="getGallery"), path('save/gallery/', saveAPI_views.GalleryFetchSaveDeleteView.as_view(), name='fetchGallerySchematic'), path('save///', saveAPI_views.StateFetchUpdateView.as_view(), name='fetchState'), path('save/copy///', saveAPI_views.CopyStateView.as_view(), name='copyState'), path( 'save//sharing///', saveAPI_views.StateShareView.as_view(), name='shareState'), path("save/versions/", saveAPI_views.StateSaveAllVersions.as_view(), name="listAllVersions"), path("save/versions///", saveAPI_views.GetStateSpecificVersion.as_view(), name="getSpecificVersion"), path("save/versions//", saveAPI_views.DeleteBranch.as_view(), name="deleteBranch"), path("save/", saveAPI_views.DeleteCircuit.as_view(), name="deleteCircuit"), path("save/arduinodata/", saveAPI_views.ArduinoModelSimulationDataView.as_view(), name="uploadSimulationData"), path("save/arduinodata///", saveAPI_views.ArduinoModelSimulationDataView.as_view(), name="uploadSimulationData") ] urlpatterns += router.urls ================================================ FILE: esim-cloud-backend/saveAPI/views.py ================================================ # from django.core.files.base import File from glob import escape from http.client import responses from django.http import JsonResponse from numpy import save import django_filters from django_filters import rest_framework as filters from .serializers import ArduinoModelSimulationDataSerializer,\ StateSaveSerializer, SaveListSerializer, \ GallerySerializer from .serializers import Base64ImageField from rest_framework.permissions import AllowAny, IsAuthenticated from rest_framework.parsers import FormParser, JSONParser from rest_framework.views import APIView from rest_framework.response import Response # from rest_framework.generics import ListAPIView from rest_framework import status from drf_yasg.utils import swagger_auto_schema from .models import ArduinoModelSimulationData, StateSave, Gallery from workflowAPI.models import Permission from publishAPI.models import Project from ltiAPI.models import Submission from rest_framework import viewsets import uuid from django.contrib.auth import get_user_model import logging import traceback import json import ast logger = logging.getLogger(__name__) class StateSaveView(APIView): ''' API to save the state of project to db which can be loaded or shared later Note: this is different from SnapshotSave which stores images THIS WILL ESCAPE DOUBLE QUOTES ''' # Permissions should be validated here permission_classes = (AllowAny,) # parser_classes = (FormParser,) @swagger_auto_schema(request_body=StateSaveSerializer) def post(self, request, *args, **kwargs): print("Getting Saved State") logger.info('Got POST for state save ') esim_libraries = None if request.data.get('esim_libraries'): esim_libraries = json.loads(request.data.get('esim_libraries')) try: queryset = StateSave.objects.get( save_id=request.data.get("save_id", None), branch=request.data.get("branch"), version=request.data.get("version")) serializer = StateSaveSerializer(data=request.data) if serializer.is_valid(): img = Base64ImageField(max_length=None, use_url=True) filename, content = img.update(request.data['base64_image']) queryset.data_dump = request.data.get("data_dump") queryset.save() queryset.base64_image.save(filename, content) return Response(data=serializer.data, status=status.HTTP_200_OK) else: return Response(data=serializer.errors, status=status.HTTP_400_BAD_REQUEST) except StateSave.DoesNotExist: try: queryset = StateSave.objects.get( save_id=request.data.get("save_id", None), data_dump=request.data["data_dump"], branch=request.data["branch"]) serializer = StateSaveSerializer(data=request.data) if serializer.is_valid(): queryset.name = serializer.data["name"] queryset.description = serializer.data["description"] queryset.save() response = serializer.data response['duplicate'] = True response['owner'] = queryset.owner.username return Response(response) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) except StateSave.DoesNotExist: img = Base64ImageField(max_length=None, use_url=True) filename, content = img.update(request.data['base64_image']) try: project = Project.objects.get( project_id=request.data.get('project_id', None)) state_save = StateSave( data_dump=request.data.get('data_dump'), description=request.data.get('description'), name=request.data.get('name'), owner=request.user if request.user.is_authenticated else None, # noqa branch=request.data.get('branch'), version=request.data.get('version'), project=project, shared=True, is_arduino=True if esim_libraries is None else False, ) except: # noqa state_save = StateSave( data_dump=request.data.get('data_dump'), description=request.data.get('description'), name=request.data.get('name'), owner=request.user if request.user.is_authenticated else None, # noqa branch=request.data.get('branch'), version=request.data.get('version'), is_arduino=True if esim_libraries is None else False, ) if request.data.get('save_id'): state_save.save_id = request.data.get('save_id') state_save.base64_image.save(filename, content) if esim_libraries: state_save.esim_libraries.set(esim_libraries) try: state_save.save() return Response(StateSaveSerializer(state_save).data) except Exception: return Response(status=status.HTTP_400_BAD_REQUEST) class CopyStateView(APIView): permission_classes = (IsAuthenticated,) parser_classes = (FormParser, JSONParser) def post(self, request, save_id, version, branch): if isinstance(save_id, uuid.UUID): # Check for permissions and sharing settings here try: saved_state = StateSave.objects.get( save_id=save_id, branch=branch, version=version) except StateSave.DoesNotExist: return Response({'error': 'Does not Exist'}, status=status.HTTP_404_NOT_FOUND) copy_state = StateSave(name=saved_state.name, description=saved_state.description, data_dump=saved_state.data_dump, base64_image=saved_state.base64_image, is_arduino=saved_state.is_arduino, owner=self.request.user, branch='master', version=version) copy_state.save() copy_state.esim_libraries.set(saved_state.esim_libraries.all()) copy_state.save() return Response( {"save_id": copy_state.save_id, "version": copy_state.version, "branch": copy_state.branch}) class StateFetchUpdateView(APIView): """ Returns Saved data for given save id , Only user who saved the state can access / update it THIS WILL ESCAPE DOUBLE QUOTES """ permission_classes = (AllowAny,) parser_classes = (FormParser, JSONParser) methods = ['GET'] @swagger_auto_schema(responses={200: StateSaveSerializer}) def get(self, request, save_id, version, branch): if isinstance(save_id, uuid.UUID): # Check for permissions and sharing settings here try: saved_state = StateSave.objects.get( save_id=save_id, version=version, branch=branch) except StateSave.DoesNotExist: return Response({'error': 'Does not Exist'}, status=status.HTTP_404_NOT_FOUND) # Verifies owner if self.request.user != saved_state.owner and not saved_state.shared: # noqa print("Here") return Response({'error': 'not the owner and not shared'}, status=status.HTTP_401_UNAUTHORIZED) try: serialized = StateSaveSerializer( saved_state, context={'request': request}) User = get_user_model() try: owner_name = User.objects.get( id=serialized.data.get('owner')) data = {} data.update(serialized.data) data['owner'] = owner_name.username except User.DoesNotExist: data = {} data.update(serialized.data) data['owner'] = None return Response(data) except Exception: traceback.print_exc() return Response({'error': 'Not Able To Serialize'}, status=status.HTTP_400_BAD_REQUEST) else: return Response({'error': 'Invalid sharing state'}, status=status.HTTP_400_BAD_REQUEST) @swagger_auto_schema(responses={200: StateSaveSerializer}) def post(self, request, save_id): if isinstance(save_id, uuid.UUID): # Check for permissions and sharing settings here try: saved_state = StateSave.objects.get(save_id=save_id) except StateSave.DoesNotExist: return Response({'error': 'Does not Exist'}, status=status.HTTP_404_NOT_FOUND) # Verifies owner if self.request.user != saved_state.owner: # noqa return Response({'error': 'not the owner and not shared'}, status=status.HTTP_401_UNAUTHORIZED) if not request.data['data_dump'] and not request.data['shared']: return Response({'error': 'not a valid PUT request'}, status=status.HTTP_406_NOT_ACCEPTABLE) try: # if data dump, shared,name and description needs to be updated if 'data_dump' in request.data: saved_state.data_dump = request.data['data_dump'] if 'shared' in request.data: saved_state.shared = bool(request.data['shared']) if 'name' in request.data: saved_state.name = request.data['name'] if 'description' in request.data: saved_state.description = request.data['description'] # if thumbnail needs to be updated if 'base64_image' in request.data: img = Base64ImageField(max_length=None, use_url=True) filename, content = img.update( request.data['base64_image']) saved_state.base64_image.save(filename, content) if 'esim_libraries' in request.data: esim_libraries = json.loads( request.data.get('esim_libraries')) saved_state.esim_libraries.set(esim_libraries) saved_state.save() serialized = SaveListSerializer(saved_state) return Response(serialized.data) except Exception: return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR) else: return Response({'error': 'Invalid sharing state'}, status=status.HTTP_400_BAD_REQUEST) @swagger_auto_schema(responses={200: StateSaveSerializer}) def delete(self, request, save_id, version, branch): if isinstance(save_id, uuid.UUID): try: saved_state = StateSave.objects.get( save_id=save_id, version=version, branch=branch, owner=self.request.user) except StateSave.DoesNotExist: return Response({'error': 'Does not Exist'}, status=status.HTTP_404_NOT_FOUND) # Verifies owner if (saved_state.project is None) or \ (saved_state.project is not None and (saved_state.project.active_branch != branch or saved_state.project.active_version != version)) or \ (saved_state.project is not None and Permission.objects.filter( role__in=self.request.user.groups.all(), del_own_states=saved_state.project.state).exists()): pass else: return Response(status=status.HTTP_400_BAD_REQUEST) saved_state.delete() return Response({'done': True}) else: return Response({'error': 'Invalid sharing state'}, status=status.HTTP_400_BAD_REQUEST) class StateShareView(APIView): """ Enables sharing for the given saved state Note: Only authorized user can do this """ permission_classes = (AllowAny,) methods = ['GET'] @swagger_auto_schema(responses={200: StateSaveSerializer}) def post(self, request, save_id, sharing, version, branch): if isinstance(save_id, uuid.UUID): # Check for permissions and sharing settings here try: saved_state = StateSave.objects.get( save_id=save_id, version=version, branch=branch) except StateSave.DoesNotExist: return Response({'error': 'Does not Exist'}, status=status.HTTP_404_NOT_FOUND) # Verifies owner if self.request.user != saved_state.owner: # noqa return Response({'error': 'Not the owner'}, status=status.HTTP_401_UNAUTHORIZED) try: if sharing == 'on': saved_state.shared = True elif sharing == 'off': saved_state.shared = False else: return Response({'error': 'Invalid sharing state'}, status=status.HTTP_400_BAD_REQUEST) saved_state.save() serialized = StateSaveSerializer(saved_state) return Response(serialized.data) except Exception: return Response(serialized.error) else: return Response({'error': 'Invalid sharing state'}, status=status.HTTP_400_BAD_REQUEST) class UserSavesView(APIView): """ Returns Saved data for given username, Only user who saved the state can access it THIS WILL ESCAPE DOUBLE QUOTES """ permission_classes = (IsAuthenticated,) parser_classes = (FormParser, JSONParser) methods = ['GET'] @swagger_auto_schema(responses={200: StateSaveSerializer}) def get(self, request): saved_state = StateSave.objects.filter( owner=self.request.user, is_arduino=False).order_by( "save_id", "-save_time").distinct("save_id") # Uncomment this if submissions are not required at the dashboard # submissions = Submission.objects.filter(student=self.request.user) # for submission in submissions: # saved_state = saved_state.exclude(save_id=submission.schematic.save_id) # noqa try: serialized = StateSaveSerializer(saved_state, many=True) return Response(serialized.data) except Exception: return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR) class ArduinoSaveList(APIView): """ List of Arduino Projects """ permission_classes = (IsAuthenticated,) parser_classes = (FormParser, JSONParser) methods = ['GET'] @swagger_auto_schema(responses={200: StateSaveSerializer}) def get(self, request): saved_state = StateSave.objects.filter( owner=self.request.user, is_arduino=True).order_by('-save_time') try: serialized = SaveListSerializer( saved_state, many=True, context={'request': request}) return Response(serialized.data) except Exception: return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR) class SaveSearchFilterSet(django_filters.FilterSet): class Meta: model = StateSave fields = { 'name': ['icontains'], 'description': ['icontains'], 'save_time': ['icontains'], 'create_time': ['icontains'], 'is_arduino': ['exact'] } class SaveSearchViewSet(viewsets.ReadOnlyModelViewSet): """ Search Project """ def get_queryset(self): queryset = StateSave.objects.filter( owner=self.request.user).order_by('-save_time') return queryset serializer_class = SaveListSerializer filter_backends = (filters.DjangoFilterBackend,) filterset_class = SaveSearchFilterSet class StateSaveAllVersions(APIView): serializer_class = SaveListSerializer permission_classes = (IsAuthenticated,) @swagger_auto_schema(responses={200: SaveListSerializer}) def get(self, request, save_id): queryset = StateSave.objects.filter( owner=self.request.user, save_id=save_id) try: serialized = SaveListSerializer( queryset, many=True, context={'request': request}) return Response(serialized.data) except Exception: return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR) class GetStateSpecificVersion(APIView): serializer_class = StateSaveSerializer permission_classes = (IsAuthenticated,) @swagger_auto_schema(responses={200: StateSaveSerializer}) def get(self, request, save_id, version, branch): queryset = StateSave.objects.get( save_id=save_id, version=version, owner=self.request.user, branch=branch) try: serialized = StateSaveSerializer( queryset) return Response(serialized.data) except Exception: return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR) def delete(self, request, save_id, version, branch): try: queryset = StateSave.objects.get( save_id=save_id, version=version, owner=self.request.user, branch=branch) queryset.delete() return Response(data=None, status=status.HTTP_204_NO_CONTENT) except StateSave.DoesNotExist: return Response({"error": "Circuit not found"}, status=status.HTTP_404_NOT_FOUND) class DeleteBranch(APIView): permission_classes = (IsAuthenticated,) def delete(self, request, save_id, branch): try: queryset = StateSave.objects.filter( save_id=save_id, branch=branch, owner=self.request.user ) if queryset[0].project is None or \ queryset[0].project.active_branch != branch: queryset.delete() return Response(data=None, status=status.HTTP_204_NO_CONTENT) else: return Response(data=None, status=status.HTTP_400_BAD_REQUEST) except StateSave.DoesNotExist: return Response({"error": "circuit not found"}, status=status.HTTP_404_NOT_FOUND) class DeleteCircuit(APIView): permission_classes = (IsAuthenticated,) def delete(self, request, save_id): try: queryset = StateSave.objects.filter( save_id=save_id, owner=self.request.user ) if queryset[0].project is None: queryset.delete() return Response(data=None, status=status.HTTP_204_NO_CONTENT) else: return Response(data=None, status=status.HTTP_400_BAD_REQUEST) except StateSave.DoesNotExist: return Response({"error": "circuit not found"}, status=status.HTTP_404_NOT_FOUND) class GalleryView(APIView): """ Esim Gallery """ permission_classes = (AllowAny,) parser_classes = (FormParser, JSONParser) methods = ['GET'] @swagger_auto_schema(responses={200: GallerySerializer}) def get(self, request): if (request.GET.get("is_arduino") == "true"): galleryset = Gallery.objects.filter(is_arduino=True) else: galleryset = Gallery.objects.filter(is_arduino=False) try: serialized = GallerySerializer(galleryset, many=True) return Response(serialized.data) except Exception: return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR) class GalleryFetchSaveDeleteView(APIView): """ Returns Saved data for given save id, Only staff can add / delete it THIS WILL ESCAPE DOUBLE QUOTES """ # permission_classes = (AllowAny,) parser_classes = (FormParser, JSONParser) methods = ['GET'] @swagger_auto_schema(responses={200: GallerySerializer}) def get(self, request, save_id): try: saved_state = Gallery.objects.get( save_id=save_id) except Gallery.DoesNotExist: return Response({'error': 'Does not Exist'}, status=status.HTTP_404_NOT_FOUND) try: serialized = GallerySerializer( saved_state, context={'request': request}) data = {} data.update(serialized.data) return Response(data) except Exception: traceback.print_exc() return Response({'error': 'Not Able To Serialize'}, status=status.HTTP_400_BAD_REQUEST) @swagger_auto_schema(responses={200: GallerySerializer}) def post(self, request, save_id): # Checking user roles userRoles = self.request.user.groups.all() staff = False for userRole in userRoles: if (self.request.user and self.request.user.is_authenticated and userRole.customgroup and userRole.customgroup.is_type_staff): staff = True if not staff: return Response({'error': 'Not the owner'}, status=status.HTTP_401_UNAUTHORIZED) saved_state = Gallery() if not (request.data['data_dump'] and request.data['media'] and request.data['save_id']): return Response({'error': 'not a valid POST request'}, status=status.HTTP_406_NOT_ACCEPTABLE) # saves to gallery try: if 'save_id' in request.data: saved_state.save_id = request.data['save_id'] if 'is_arduino' in request.data: saved_state.is_arduino = request.data['is_arduino'] if 'data_dump' in request.data: saved_state.data_dump = request.data['data_dump'] if 'shared' in request.data: saved_state.shared = bool(request.data['shared']) if 'name' in request.data: saved_state.name = request.data['name'] if 'description' in request.data: saved_state.description = request.data['description'] if 'media' in request.data: img = Base64ImageField(max_length=None, use_url=True) filename, content = img.update( request.data['media']) saved_state.media.save(filename, content) if 'esim_libraries' in request.data: esim_libraries = json.loads( request.data.get('esim_libraries')) saved_state.esim_libraries.set(esim_libraries) saved_state.save() serialized = GallerySerializer(saved_state) return Response(serialized.data) except Exception: return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR) @swagger_auto_schema(responses={200: GallerySerializer}) def delete(self, request, save_id): try: # Checking user roles userRoles = self.request.user.groups.all() staff = False for userRole in userRoles: if (self.request.user and self.request.user.is_authenticated and userRole.customgroup and userRole.customgroup.is_type_staff): staff = True if not staff: return Response({'error': 'Not the owner'}, status=status.HTTP_401_UNAUTHORIZED) # Deltes from gallery try: saved_state = Gallery.objects.get( save_id=save_id) except Gallery.DoesNotExist: return Response({'error': 'Does not Exist'}, status=status.HTTP_404_NOT_FOUND) saved_state.delete() return Response({'done': True}) except Exception: return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR) class ArduinoModelSimulationDataView(APIView): """ Simulation Data from Arduino """ permission_classes = (AllowAny,) methods = ['GET', 'POST'] @swagger_auto_schema(request_body=ArduinoModelSimulationDataSerializer) def post(self, request, save_id): try: circuit = StateSave.objects.get(id=save_id) except StateSave.DoesNotExist: return Response({"error": "Circuit not found"}, status=status.HTTP_404_NOT_FOUND) if(not(len(request.data))): return Response({"error": "Simulation data not passed"}, status=status.HTTP_400_BAD_REQUEST) print(request.data) try: ArduinoModelSimulationData(save_id=circuit, result=str(request.data)).save() except Exception as e: return Response(status=500) else: return Response(status=200) def get(self, request, save_id, version, branch): try: circuit = StateSave.objects.get( save_id=save_id, version=version, branch=branch ) except StateSave.DoesNotExist: return Response({"error": "Circuit not found"}, status=status.HTTP_404_NOT_FOUND) try: queryset = ArduinoModelSimulationData.objects.filter( save_id=circuit.id) serial = ArduinoModelSimulationDataSerializer(queryset, many=True) return Response(serial.data, status=200) except Exception as e: print(e) return Response({"error": "No simulation data found"}, status=status.HTTP_404_NOT_FOUND) ================================================ FILE: esim-cloud-backend/simulationAPI/__init__.py ================================================ ================================================ FILE: esim-cloud-backend/simulationAPI/admin.py ================================================ from django.contrib import admin from .models import runtimeStat, Limit, simulation import json from django.core.serializers.json import DjangoJSONEncoder from django.db.models import Max from django.http import HttpResponseRedirect class outputAdmin(admin.ModelAdmin): list_display = ['simulation_type', 'task_id', 'owner'] class runtimStatAdmin(admin.ModelAdmin): list_display = ('exec_time', 'qty') readonly_fields = ('exec_time', 'qty') change_list_template = 'admin/runtimeStats.html' qty_hierarchy = 'qty' def has_add_permission(self, request, obj=None): return False def changelist_view(self, request, extra_context=None): response = super().changelist_view( request, extra_context=extra_context, ) try: qs = response.context_data['cl'].queryset except (AttributeError, KeyError): return response total = 0 for i in qs: total += i.qty response.context_data['summary'] = list( qs .values('exec_time', 'qty') .order_by('-qty') ) response.context_data['summary_total'] = total chart_data = ( runtimeStat.objects .values("exec_time") .annotate(y=Max("qty")) .order_by("exec_time") ) """ Since 3s is the default time limit, it will be shown in the TIME_LIMIT page in admin in case there are no changes. """ TIME_LIMIT = 0 limits = Limit.objects.all() if limits.exists(): TIME_LIMIT = Limit.objects.all()[0].timeLimit response.context_data['TIME_LIMIT'] = TIME_LIMIT as_json = json.dumps(list(chart_data), cls=DjangoJSONEncoder) extra_context = extra_context or {"chart_data": as_json} response.context_data.update(extra_context) if request.method == "POST": limit = request.POST.get('limit') limits = Limit.objects.all() if limits.exists(): lim = Limit.objects.all().first() lim.timeLimit = limit lim.save() else: lim = Limit(timeLimit=limit) lim.save() response.context_data['TIME_LIMIT'] = limit return HttpResponseRedirect( "/api/admin/simulationAPI/runtimestat/" ) return response admin.site.register(runtimeStat, runtimStatAdmin) admin.site.register(simulation, outputAdmin) # admin.site.register(Limit) ================================================ FILE: esim-cloud-backend/simulationAPI/apps.py ================================================ from django.apps import AppConfig class SimulationapiConfig(AppConfig): name = 'simulationAPI' ================================================ FILE: esim-cloud-backend/simulationAPI/dbrouters.py ================================================ class mongoRouter: """ A router to control all database operations on models in the auth and contenttypes applications. """ route_app_labels = {'simulationAPI'} def db_for_read(self, model, **hints): """ Attempts to read auth and contenttypes models go to auth_db. """ if model._meta.app_label in self.route_app_labels: return 'mongodb' return None def db_for_write(self, model, **hints): """ Attempts to write auth and contenttypes models go to auth_db. """ if model._meta.app_label in self.route_app_labels: return 'mongodb' return None def allow_relation(self, obj1, obj2, **hints): """ Allow relations if a model in the auth or contenttypes apps is involved. """ if ( obj1._meta.app_label in self.route_app_labels or obj2._meta.app_label in self.route_app_labels ): return True return None def allow_migrate(self, db, app_label, model_name=None, **hints): """ Make sure the auth and contenttypes apps only appear in the 'auth_db' database. """ if app_label in self.route_app_labels: return db == 'mongodb' return None ================================================ FILE: esim-cloud-backend/simulationAPI/helpers/ngspice_helper.py ================================================ from celery.exceptions import SoftTimeLimitExceeded import os import logging import subprocess from pathlib import Path from django.conf import settings from .parse import extract_data_from_ngspice_output logger = logging.getLogger(__name__) class CannotRunSpice(Exception): """Base class for exceptions in this module.""" pass """ Note: If there is no valid data, the error text is propagated through output. However, the celery task is passed. """ def ExecNetlist(filepath, file_id): if not os.path.isfile(filepath): raise IOError try: current_dir = settings.MEDIA_ROOT+'/'+str(file_id) # Make Unique Directory for simulation to run Path(current_dir).mkdir(parents=True, exist_ok=True) os.chdir(current_dir) logger.info('will run ngSpice command') proc = subprocess.Popen(['ngspice', '-ab', filepath], stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=current_dir) stdout, stderr = proc.communicate() logger.info('Ran ngSpice command') if proc.returncode not in [0, 1]: logger.error('ngspice error encountered') logger.error(stderr) logger.error(proc.returncode) logger.error(stdout) target = os.listdir(current_dir) for item in target: if (item.endswith(".txt")): os.remove(os.path.join('.', item)) raise CannotRunSpice("ngspice exited with error") else: logger.info('Ran ngSpice') logger.info("Reading Output") if os.path.isfile(current_dir+'/data.txt'): output = extract_data_from_ngspice_output(current_dir+'/data.txt') if output["data"]: """ This means output data file exists and has data parsed by parse.py """ pass else: """ if the output is blank, the err is logged in stderr """ tmp = stderr.decode("utf-8") foo = '{}'.format(tmp) output = {'fail': foo} else: out = stdout.decode("utf-8") err = stderr.decode("utf-8") foo = '{}'.format(out+err) output = {'fail': foo} logger.info('output from ngspice_helper.py') logger.info(stderr) # logger.info(output) logger.info(stdout) return output except SoftTimeLimitExceeded: output = {'fail': "time limit exceeded"} print('tle') return output except Exception as e: logger.exception('Encountered Exception:') logger.exception(e) finally: target = os.listdir(current_dir) os.remove(filepath) for item in target: os.remove(os.path.join(current_dir, item)) os.rmdir(current_dir) logger.info('Deleted Files') ================================================ FILE: esim-cloud-backend/simulationAPI/helpers/parse.py ================================================ import re import sys def extract_data_from_ngspice_output(pathToFile): """ Parses the output file generated by ngspice and returns a json containing points to plot graph. """ try: with open(pathToFile, 'r') as f: f_contents = f.readlines() graph = False curernt_headers = [] total_number_of_tables = 0 if(len(f_contents) > 3): if('---' in f_contents[2]): graph = True if(not graph): json_data = {"data": [], "graph": "false"} for line in f_contents: contents_of_line = line.split() json_data["data"].append(contents_of_line) else: json_data = {"data": [], "graph": "true"} for line in f_contents: contents_of_line = line.split() if('Index' in contents_of_line): # line_set = remove_duplicate_items_from_list( # contents_of_line) line_set = contents_of_line if(line_set != curernt_headers): curernt_headers = line_set json_data["data"].append( {"labels": [], "x": [], "y": []}) index = len(json_data["data"]) - 1 for x in range(2, len(curernt_headers)): json_data["data"][index]["y"].append([]) for x in range(1, len(curernt_headers)): json_data["data"][index]["labels"].append( curernt_headers[x]) total_number_of_tables += 1 else: m = re.match('[0-9]+', line) if(m): index = len(json_data["data"]) - 1 data = json_data["data"][index] data["x"].append(contents_of_line[1]) for x in range(len(data["y"])): data["y"][x].append(contents_of_line[x+2]) json_data["total_number_of_tables"] = total_number_of_tables -\ len(json_data["data"]) return json_data except IOError as e: print('Cannot Open File') raise e # def remove_duplicate_items_from_list(line_list): # res = [] # for i in line_list: # if i not in res: # res.append(i) # return res # for testing provide the filepath as command line argument if __name__ == "__main__": filePath = sys.argv[1] print(extract_data_from_ngspice_output(filePath)) ================================================ FILE: esim-cloud-backend/simulationAPI/helpers/sample_files/RC.cir ================================================ * Author: FOSSEE * Date: r1 in out 1k c1 out gnd 10u v1 in gnd pwl(0m 0 0.5m 5 50m 5 50.5m 0 100m 0) * u1 in plot_v1 * u2 out plot_v1 .tran 10e-03 100e-03 0e-03 * Control Statements .control run print all > data.txt .endc .end ================================================ FILE: esim-cloud-backend/simulationAPI/helpers/sample_files/data.txt ================================================ Transient Analysis Sun Apr 26 18:25:24 2020 -------------------------------------------------------------------------------- Index time in out time -------------------------------------------------------------------------------- 0 0.000000e+00 0.000000e+00 -1.21023e-22 0.000000e+00 1 1.000000e-05 1.570794e-02 1.570075e-02 1.000000e-05 2 2.000000e-05 3.141572e-02 3.140645e-02 2.000000e-05 3 4.000000e-05 6.283020e-02 6.281484e-02 4.000000e-05 4 8.000000e-05 1.256505e-01 1.256003e-01 8.000000e-05 5 1.600000e-04 2.512216e-01 2.504194e-01 1.600000e-04 6 3.200000e-04 5.018086e-01 4.396405e-01 3.200000e-04 7 5.343163e-04 8.353661e-01 5.117272e-01 5.343163e-04 8 7.511639e-04 1.169004e+00 5.404550e-01 7.511639e-04 9 1.014269e-03 1.566385e+00 5.610074e-01 1.014269e-03 10 1.540478e-03 2.326420e+00 5.852507e-01 1.540478e-03 11 2.592896e-03 3.637196e+00 6.101154e-01 2.592896e-03 12 4.592896e-03 4.959163e+00 6.259915e-01 4.592896e-03 13 6.592896e-03 4.386898e+00 6.198553e-01 6.592896e-03 14 8.592896e-03 2.138988e+00 5.802750e-01 8.592896e-03 15 1.059290e-02 -9.25943e-01 -5.21192e-01 1.059290e-02 16 1.168731e-02 -2.52802e+00 -5.90034e-01 1.168731e-02 17 1.260627e-02 -3.65157e+00 -6.10029e-01 1.260627e-02 18 1.351234e-02 -4.46380e+00 -6.20549e-01 1.351234e-02 19 1.532450e-02 -4.97404e+00 -6.26197e-01 1.532450e-02 20 1.732450e-02 -3.72500e+00 -6.11244e-01 1.732450e-02 21 1.932450e-02 -1.05313e+00 -5.32182e-01 1.932450e-02 22 2.109176e-02 1.681502e+00 5.658107e-01 2.109176e-02 23 2.284255e-02 3.894825e+00 6.136953e-01 2.284255e-02 24 2.446551e-02 4.929676e+00 6.256863e-01 2.446551e-02 25 2.603276e-02 4.739130e+00 6.236773e-01 2.603276e-02 26 2.803276e-02 2.897143e+00 5.977803e-01 2.803276e-02 27 3.003276e-02 -5.14551e-02 -5.14419e-02 3.003276e-02 28 3.181211e-02 -2.69517e+00 -5.93524e-01 3.181211e-02 29 3.353100e-02 -4.47693e+00 -6.20747e-01 3.353100e-02 30 3.548425e-02 -4.94225e+00 -6.26203e-01 3.548425e-02 31 3.748425e-02 -3.55298e+00 -6.08802e-01 3.748425e-02 32 3.948425e-02 -8.06597e-01 -5.07973e-01 3.948425e-02 33 4.084025e-02 1.304594e+00 5.485420e-01 4.084025e-02 34 4.232563e-02 3.336652e+00 6.053367e-01 4.232563e-02 35 4.432563e-02 4.888208e+00 6.256007e-01 4.432563e-02 36 4.614809e-02 4.678280e+00 6.231567e-01 4.614809e-02 37 4.814809e-02 2.747621e+00 5.949600e-01 4.814809e-02 38 5.014809e-02 -2.32536e-01 -2.32009e-01 5.014809e-02 39 5.106495e-02 -1.64179e+00 -5.64133e-01 5.106495e-02 40 5.192012e-02 -2.83650e+00 -5.96466e-01 5.192012e-02 41 5.288026e-02 -3.93170e+00 -6.14042e-01 5.288026e-02 42 5.433190e-02 -4.89027e+00 -6.25323e-01 5.433190e-02 43 5.633190e-02 -4.56865e+00 -6.21871e-01 5.633190e-02 44 5.833190e-02 -2.50196e+00 -5.89905e-01 5.833190e-02 45 6.033190e-02 5.203956e-01 4.469106e-01 6.033190e-02 46 6.201058e-02 2.952352e+00 5.985459e-01 6.201058e-02 47 6.359054e-02 4.517790e+00 6.212035e-01 6.359054e-02 48 6.524527e-02 4.985165e+00 6.263736e-01 6.524527e-02 49 6.724527e-02 3.806855e+00 6.123643e-01 6.724527e-02 50 6.924527e-02 1.174457e+00 5.410754e-01 6.924527e-02 51 7.069407e-02 -1.08163e+00 -5.34385e-01 7.069407e-02 52 7.237416e-02 -3.39303e+00 -6.06125e-01 7.237416e-02 53 7.412120e-02 -4.81065e+00 -6.24769e-01 7.412120e-02 54 7.582571e-02 -4.83272e+00 -6.24761e-01 7.582571e-02 Index time in out time -------------------------------------------------------------------------------- 55 7.782571e-02 -3.15590e+00 -6.02409e-01 7.782571e-02 56 7.982571e-02 -2.73641e-01 -2.72327e-01 7.982571e-02 57 8.082874e-02 1.287122e+00 5.479313e-01 8.082874e-02 58 8.192022e-02 2.836635e+00 5.964361e-01 8.192022e-02 59 8.332868e-02 4.326466e+00 6.189574e-01 8.332868e-02 60 8.468753e-02 4.975928e+00 6.262056e-01 8.468753e-02 61 8.668753e-02 4.313647e+00 6.188623e-01 8.668753e-02 62 8.868753e-02 2.003700e+00 5.763923e-01 8.868753e-02 63 9.068753e-02 -1.07159e+00 -5.33642e-01 9.068753e-02 64 9.256918e-02 -3.61153e+00 -6.09422e-01 9.256918e-02 65 9.445688e-02 -4.92739e+00 -6.26152e-01 9.445688e-02 66 9.621191e-02 -4.64196e+00 -6.22698e-01 9.621191e-02 67 9.821191e-02 -2.66332e+00 -5.93225e-01 9.821191e-02 68 1.000000e-01 -6.12323e-15 -5.42079e-06 1.000000e-01 Transient Analysis Sun Apr 26 18:25:24 2020 -------------------------------------------------------------------------------- Index time v1#branch -------------------------------------------------------------------------------- 0 0.000000e+00 -1.21023e-25 1 1.000000e-05 -7.18261e-09 2 2.000000e-05 -9.27278e-09 3 4.000000e-05 -1.53546e-08 4 8.000000e-05 -5.02056e-08 5 1.600000e-04 -8.02233e-07 6 3.200000e-04 -6.21680e-05 7 5.343163e-04 -3.23639e-04 8 7.511639e-04 -6.28549e-04 9 1.014269e-03 -1.00538e-03 10 1.540478e-03 -1.74117e-03 11 2.592896e-03 -3.02708e-03 12 4.592896e-03 -4.33317e-03 13 6.592896e-03 -3.76704e-03 14 8.592896e-03 -1.55871e-03 15 1.059290e-02 4.047519e-04 16 1.168731e-02 1.937990e-03 17 1.260627e-02 3.041544e-03 18 1.351234e-02 3.843251e-03 19 1.532450e-02 4.347845e-03 20 1.732450e-02 3.113754e-03 21 1.932450e-02 5.209497e-04 22 2.109176e-02 -1.11569e-03 23 2.284255e-02 -3.28113e-03 24 2.446551e-02 -4.30399e-03 25 2.603276e-02 -4.11545e-03 26 2.803276e-02 -2.29936e-03 27 3.003276e-02 1.323245e-08 28 3.181211e-02 2.101648e-03 29 3.353100e-02 3.856183e-03 30 3.548425e-02 4.316048e-03 31 3.748425e-02 2.944182e-03 32 3.948425e-02 2.986236e-04 33 4.084025e-02 -7.56052e-04 34 4.232563e-02 -2.73131e-03 35 4.432563e-02 -4.26261e-03 36 4.614809e-02 -4.05512e-03 37 4.814809e-02 -2.15266e-03 38 5.014809e-02 5.269492e-07 39 5.106495e-02 1.077659e-03 40 5.192012e-02 2.240032e-03 41 5.288026e-02 3.317656e-03 42 5.433190e-02 4.264945e-03 43 5.633190e-02 3.946775e-03 44 5.833190e-02 1.912051e-03 45 6.033190e-02 -7.34851e-05 46 6.201058e-02 -2.35381e-03 47 6.359054e-02 -3.89659e-03 48 6.524527e-02 -4.35879e-03 49 6.724527e-02 -3.19449e-03 50 6.924527e-02 -6.33382e-04 51 7.069407e-02 5.472455e-04 52 7.237416e-02 2.786905e-03 53 7.412120e-02 4.185885e-03 54 7.582571e-02 4.207954e-03 Index time v1#branch -------------------------------------------------------------------------------- 55 7.782571e-02 2.553494e-03 56 7.982571e-02 1.314865e-06 57 8.082874e-02 -7.39190e-04 58 8.192022e-02 -2.24020e-03 59 8.332868e-02 -3.70751e-03 60 8.468753e-02 -4.34972e-03 61 8.668753e-02 -3.69479e-03 62 8.868753e-02 -1.42731e-03 63 9.068753e-02 5.379516e-04 64 9.256918e-02 3.002108e-03 65 9.445688e-02 4.301241e-03 66 9.621191e-02 4.019265e-03 67 9.821191e-02 2.070094e-03 68 1.000000e-01 -5.42079e-09 ================================================ FILE: esim-cloud-backend/simulationAPI/helpers/sample_files/plot_data_i.txt ================================================ Transient Analysis Fri Apr 24 23:37:52 2020 -------------------------------------------------------------------------------- Index time v1#branch v2#branch -------------------------------------------------------------------------------- 0 0.000000e+00 0.000000e+00 -1.44364e-11 1 5.000000e-06 -1.08398e-06 4.220864e-07 2 1.000000e-05 -1.07855e-06 4.224245e-07 3 2.000000e-05 -1.06529e-06 4.230573e-07 4 3.122027e-05 -1.09702e-06 4.237329e-07 5 4.261616e-05 -1.40088e-06 4.242644e-07 6 5.453771e-05 -1.55219e-06 4.227076e-07 7 7.296709e-05 -1.47175e-06 4.041312e-07 8 9.144949e-05 -1.55369e-06 3.516220e-07 9 1.284143e-04 -1.47267e-06 8.098758e-08 10 2.023439e-04 -1.56072e-06 -1.30887e-06 11 3.502031e-04 -1.49613e-06 -4.87527e-06 12 5.000000e-04 -1.14389e-06 2.970244e-07 13 5.010313e-04 -4.25119e-10 -3.23614e-12 14 5.030940e-04 -1.18963e-10 -3.37536e-12 15 5.072194e-04 -4.25205e-10 -3.24360e-12 16 5.154701e-04 -1.19414e-10 -3.39089e-12 17 5.319715e-04 -4.25984e-10 -3.27483e-12 18 5.649744e-04 -1.21104e-10 -3.45147e-12 19 6.309801e-04 -4.29615e-10 -3.39337e-12 20 7.629914e-04 -1.29787e-10 -3.68303e-12 21 1.027014e-03 -4.55655e-10 -3.84134e-12 22 1.555060e-03 -2.74051e-10 -4.52651e-12 23 2.611151e-03 -4.60756e-09 -5.32636e-12 24 4.611151e-03 -2.18631e-08 -6.71107e-12 25 6.611151e-03 -2.46290e-09 -7.28349e-12 26 8.611151e-03 -1.19971e-08 -7.79571e-12 27 1.061115e-02 4.330151e-09 -7.84913e-12 28 1.261115e-02 -8.21108e-09 -8.08054e-12 29 1.461115e-02 6.287619e-09 -7.99010e-12 30 1.656886e-02 -7.23655e-09 -8.14967e-12 31 1.850200e-02 6.763943e-09 -8.02346e-12 32 2.042896e-02 -7.00042e-09 -8.16602e-12 33 2.236466e-02 6.884703e-09 -8.03164e-12 34 2.430032e-02 -6.93989e-09 -8.17011e-12 35 2.623482e-02 6.912354e-09 -8.03390e-12 36 2.816446e-02 -6.92609e-09 -8.17090e-12 37 3.009657e-02 6.919218e-09 -8.03452e-12 38 3.202839e-02 -6.92264e-09 -8.17116e-12 39 3.396181e-02 6.920921e-09 -8.03442e-12 40 3.589384e-02 -6.92177e-09 -8.17133e-12 41 3.782674e-02 6.921336e-09 -8.03423e-12 42 3.975935e-02 -6.92154e-09 -8.17124e-12 43 4.175935e-02 6.921431e-09 -8.03435e-12 44 4.375935e-02 -6.92148e-09 -8.17124e-12 45 4.575935e-02 6.921445e-09 -8.03435e-12 46 4.775935e-02 -6.92145e-09 -8.17124e-12 47 4.975935e-02 6.921438e-09 -8.03435e-12 48 5.000000e-02 -6.92139e-09 -8.17124e-12 49 5.000344e-02 1.073445e-06 -2.29261e-07 50 5.001031e-02 1.062517e-06 -2.18132e-07 51 5.002405e-02 1.057252e-06 -2.12216e-07 52 5.003890e-02 1.179433e-06 -3.00119e-07 53 5.005236e-02 1.647596e-06 -9.67225e-07 54 5.006621e-02 1.362141e-06 -2.32705e-06 Index time v1#branch v2#branch -------------------------------------------------------------------------------- 55 5.007947e-02 1.653940e-06 -4.70595e-06 56 5.009790e-02 1.361331e-06 -8.93152e-06 57 5.012743e-02 1.653052e-06 -1.88474e-05 58 5.017360e-02 1.361145e-06 -4.08411e-05 59 5.024499e-02 1.654734e-06 -9.18089e-05 60 5.035306e-02 1.367456e-06 -2.14666e-04 61 5.050000e-02 1.308831e-06 -4.81732e-04 62 5.050138e-02 2.449697e-10 -4.81265e-04 63 5.050415e-02 -7.33525e-11 -4.81204e-04 64 5.050886e-02 2.448991e-10 -4.81102e-04 65 5.051827e-02 -7.32262e-11 -4.80897e-04 66 5.053710e-02 2.450062e-10 -4.80485e-04 67 5.057476e-02 -7.29317e-11 -4.79658e-04 68 5.065008e-02 2.455833e-10 -4.77988e-04 69 5.080073e-02 -7.16665e-11 -4.74582e-04 70 5.110201e-02 2.485198e-10 -4.67524e-04 71 5.170459e-02 -6.33768e-11 -4.52499e-04 72 5.290973e-02 2.876237e-10 -4.19529e-04 73 5.490973e-02 5.463069e-10 -3.59768e-04 74 5.690973e-02 5.709571e-09 -2.99143e-04 75 5.890973e-02 6.043230e-09 -2.42387e-04 76 6.090973e-02 6.573391e-09 -1.92306e-04 77 6.290973e-02 4.836922e-09 -1.50032e-04 78 6.490973e-02 4.729522e-09 -1.15521e-04 79 6.690973e-02 2.963431e-09 -8.80490e-05 80 6.890973e-02 3.065391e-09 -6.65913e-05 81 7.090973e-02 1.579419e-09 -5.00669e-05 82 7.290973e-02 1.955450e-09 -3.74849e-05 83 7.490973e-02 7.124459e-10 -2.79620e-05 84 7.690973e-02 1.290972e-09 -2.08077e-05 85 7.890973e-02 2.069733e-10 -1.54552e-05 86 8.090973e-02 9.095159e-10 -1.14644e-05 87 8.290973e-02 -7.92520e-11 -8.49513e-06 88 8.490973e-02 6.956285e-10 -6.29066e-06 89 8.690973e-02 -2.38603e-10 -4.65524e-06 90 8.890973e-02 5.771652e-10 -3.44402e-06 91 9.090973e-02 -3.26527e-10 -2.54674e-06 92 9.290973e-02 5.119823e-10 -1.88325e-06 93 9.490973e-02 -3.74807e-10 -1.39194e-06 94 9.690973e-02 4.762428e-10 -1.02913e-06 95 9.890973e-02 -4.01248e-10 -7.60373e-07 96 1.000000e-01 4.601805e-10 -6.45655e-07 ================================================ FILE: esim-cloud-backend/simulationAPI/helpers/sample_files/plot_data_v.txt ================================================ Transient Analysis Fri Apr 24 23:37:52 2020 -------------------------------------------------------------------------------- Index time in out vcc -------------------------------------------------------------------------------- 0 0.000000e+00 0.000000e+00 5.000000e+00 5.000000e+00 1 5.000000e-06 5.000000e-02 5.000002e+00 5.000000e+00 2 1.000000e-05 1.000000e-01 5.000004e+00 5.000000e+00 3 2.000000e-05 2.000000e-01 5.000008e+00 5.000000e+00 4 3.122027e-05 3.122027e-01 5.000013e+00 5.000000e+00 5 4.261616e-05 4.261616e-01 5.000017e+00 5.000000e+00 6 5.453771e-05 5.453771e-01 5.000005e+00 5.000000e+00 7 7.296709e-05 7.296709e-01 4.999871e+00 5.000000e+00 8 9.144949e-05 9.144949e-01 4.999479e+00 5.000000e+00 9 1.284143e-04 1.284143e+00 4.997339e+00 5.000000e+00 10 2.023439e-04 2.023439e+00 4.984459e+00 5.000000e+00 11 3.502031e-04 3.502031e+00 4.910883e+00 5.000000e+00 12 5.000000e-04 5.000000e+00 4.767735e+00 5.000000e+00 13 5.010313e-04 5.000000e+00 4.766519e+00 5.000000e+00 14 5.030940e-04 5.000000e+00 4.764088e+00 5.000000e+00 15 5.072194e-04 5.000000e+00 4.759227e+00 5.000000e+00 16 5.154701e-04 5.000000e+00 4.749516e+00 5.000000e+00 17 5.319715e-04 5.000000e+00 4.730128e+00 5.000000e+00 18 5.649744e-04 5.000000e+00 4.691496e+00 5.000000e+00 19 6.309801e-04 5.000000e+00 4.614812e+00 5.000000e+00 20 7.629914e-04 5.000000e+00 4.463791e+00 5.000000e+00 21 1.027014e-03 5.000000e+00 4.171338e+00 5.000000e+00 22 1.555060e-03 5.000000e+00 3.625886e+00 5.000000e+00 23 2.611151e-03 5.000000e+00 2.693993e+00 5.000000e+00 24 4.611151e-03 5.000000e+00 1.452843e+00 5.000000e+00 25 6.611151e-03 5.000000e+00 7.469712e-01 5.000000e+00 26 8.611151e-03 5.000000e+00 3.737508e-01 5.000000e+00 27 1.061115e-02 5.000000e+00 1.843359e-01 5.000000e+00 28 1.261115e-02 5.000000e+00 9.025318e-02 5.000000e+00 29 1.461115e-02 5.000000e+00 4.402884e-02 5.000000e+00 30 1.656886e-02 5.000000e+00 2.179764e-02 5.000000e+00 31 1.850200e-02 5.000000e+00 1.088616e-02 5.000000e+00 32 2.042896e-02 5.000000e+00 5.447191e-03 5.000000e+00 33 2.236466e-02 5.000000e+00 2.715556e-03 5.000000e+00 34 2.430032e-02 5.000000e+00 1.353813e-03 5.000000e+00 35 2.623482e-02 5.000000e+00 6.752433e-04 5.000000e+00 36 2.816446e-02 5.000000e+00 3.374345e-04 5.000000e+00 37 3.009657e-02 5.000000e+00 1.684679e-04 5.000000e+00 38 3.202839e-02 5.000000e+00 8.412501e-05 5.000000e+00 39 3.396181e-02 5.000000e+00 4.198760e-05 5.000000e+00 40 3.589384e-02 5.000000e+00 2.097374e-05 5.000000e+00 41 3.782674e-02 5.000000e+00 1.047916e-05 5.000000e+00 42 3.975935e-02 5.000000e+00 5.242170e-06 5.000000e+00 43 4.175935e-02 5.000000e+00 2.560529e-06 5.000000e+00 44 4.375935e-02 5.000000e+00 1.256841e-06 5.000000e+00 45 4.575935e-02 5.000000e+00 6.230583e-07 5.000000e+00 46 4.775935e-02 5.000000e+00 3.149387e-07 5.000000e+00 47 4.975935e-02 5.000000e+00 1.651510e-07 5.000000e+00 48 5.000000e-02 5.000000e+00 1.538261e-07 5.000000e+00 49 5.000344e-02 4.965649e+00 -1.29499e-06 5.000000e+00 50 5.001031e-02 4.896947e+00 -4.18960e-06 5.000000e+00 51 5.002405e-02 4.759543e+00 -9.96317e-06 5.000000e+00 52 5.003890e-02 4.610955e+00 -1.64325e-05 5.000000e+00 53 5.005236e-02 4.476410e+00 -2.11536e-05 5.000000e+00 54 5.006621e-02 4.337862e+00 -1.32460e-05 5.000000e+00 -------------------------------------------------------------------------------- 55 5.007947e-02 4.205277e+00 1.896545e-05 5.000000e+00 56 5.009790e-02 4.021012e+00 1.240988e-04 5.000000e+00 57 5.012743e-02 3.725657e+00 4.986274e-04 5.000000e+00 58 5.017360e-02 3.264038e+00 1.804424e-03 5.000000e+00 59 5.024499e-02 2.550110e+00 6.343132e-03 5.000000e+00 60 5.035306e-02 1.469424e+00 2.230900e-02 5.000000e+00 61 5.050000e-02 0.000000e+00 7.287392e-02 5.000000e+00 62 5.050138e-02 0.000000e+00 7.353952e-02 5.000000e+00 63 5.050415e-02 0.000000e+00 7.487065e-02 5.000000e+00 64 5.050886e-02 0.000000e+00 7.713572e-02 5.000000e+00 65 5.051827e-02 0.000000e+00 8.166442e-02 5.000000e+00 66 5.053710e-02 0.000000e+00 9.071601e-02 5.000000e+00 67 5.057476e-02 0.000000e+00 1.087959e-01 5.000000e+00 68 5.065008e-02 0.000000e+00 1.448616e-01 5.000000e+00 69 5.080073e-02 0.000000e+00 2.166106e-01 5.000000e+00 70 5.110201e-02 0.000000e+00 3.585322e-01 5.000000e+00 71 5.170459e-02 0.000000e+00 6.357220e-01 5.000000e+00 72 5.290973e-02 0.000000e+00 1.161181e+00 5.000000e+00 73 5.490973e-02 0.000000e+00 1.940478e+00 5.000000e+00 74 5.690973e-02 0.000000e+00 2.599383e+00 5.000000e+00 75 5.890973e-02 0.000000e+00 3.140901e+00 5.000000e+00 76 6.090973e-02 0.000000e+00 3.575581e+00 5.000000e+00 77 6.290973e-02 0.000000e+00 3.917907e+00 5.000000e+00 78 6.490973e-02 0.000000e+00 4.183450e+00 5.000000e+00 79 6.690973e-02 0.000000e+00 4.387012e+00 5.000000e+00 80 6.890973e-02 0.000000e+00 4.541646e+00 5.000000e+00 81 7.090973e-02 0.000000e+00 4.658300e+00 5.000000e+00 82 7.290973e-02 0.000000e+00 4.745848e+00 5.000000e+00 83 7.490973e-02 0.000000e+00 4.811292e+00 5.000000e+00 84 7.690973e-02 0.000000e+00 4.860060e+00 5.000000e+00 85 7.890973e-02 0.000000e+00 4.896321e+00 5.000000e+00 86 8.090973e-02 0.000000e+00 4.923240e+00 5.000000e+00 87 8.290973e-02 0.000000e+00 4.943198e+00 5.000000e+00 88 8.490973e-02 0.000000e+00 4.957983e+00 5.000000e+00 89 8.690973e-02 0.000000e+00 4.968929e+00 5.000000e+00 90 8.890973e-02 0.000000e+00 4.977028e+00 5.000000e+00 91 9.090973e-02 0.000000e+00 4.983018e+00 5.000000e+00 92 9.290973e-02 0.000000e+00 4.987448e+00 5.000000e+00 93 9.490973e-02 0.000000e+00 4.990723e+00 5.000000e+00 94 9.690973e-02 0.000000e+00 4.993144e+00 5.000000e+00 95 9.890973e-02 0.000000e+00 4.994933e+00 5.000000e+00 96 1.000000e-01 0.000000e+00 4.995700e+00 5.000000e+00 ================================================ FILE: esim-cloud-backend/simulationAPI/models.py ================================================ from django.db import models from django.contrib.postgres.fields import JSONField from django.core.files.storage import FileSystemStorage from django.contrib.auth import get_user_model from django.conf import settings from django.contrib.auth import get_user_model import uuid from saveAPI.models import StateSave class Task(models.Model): # User details for auth to be stored along with task. # user = models.ForeignKey(User, on_delete=models.CASCADE) task_time = models.DateTimeField(auto_now=True, db_index=True) task_id = models.UUIDField( primary_key=True, default=uuid.uuid4, editable=False) def save(self, *args, **kwargs): super(Task, self).save(*args, **kwargs) class spiceFile(models.Model): file_id = models.UUIDField( primary_key=True, default=uuid.uuid4, editable=False) file = models.FileField( storage=FileSystemStorage(location=settings.MEDIA_ROOT)) upload_time = models.DateTimeField(auto_now=True, db_index=True) # User details for auth to be stored along with task. # owner = models.ForeignKey('auth.User') task = models.ForeignKey( Task, on_delete=models.CASCADE, related_name='file') def save(self, *args, **kwargs): super(spiceFile, self).save(*args, **kwargs) class runtimeStat(models.Model): """ Stored number of simulations which fall under and between each second and the last. For e.g. if a simulation take 0.5s to execute then qty field of the row with with exec_time=1 will increase by 1 (simulations) """ exec_time = models.IntegerField(primary_key=True) qty = models.IntegerField(default=0) def __str__(self): return str(self.exec_time) def save(self, *args, **kwargs): super(runtimeStat, self).save(*args, **kwargs) class Limit(models.Model): timeLimit = models.IntegerField() def __str__(self): return str(self.timeLimit) class simulation(models.Model): simulation_type = models.CharField( max_length=30, null=True, blank=True) task = models.ForeignKey(to=Task, on_delete=models.CASCADE) simulation_time = models.DateTimeField(auto_now_add=True) schematic = models.ForeignKey( to=StateSave, on_delete=models.CASCADE, null=True, blank=True) owner = models.ForeignKey( to=get_user_model(), null=True, on_delete=models.CASCADE) netlist = models.TextField() result = JSONField(null=True, blank=True) ================================================ FILE: esim-cloud-backend/simulationAPI/serializers.py ================================================ import logging from rest_framework import serializers from simulationAPI.models import spiceFile, Task, simulation from saveAPI.serializers import SaveListSerializer logger = logging.getLogger(__name__) class FileSerializer(serializers.ModelSerializer): class Meta: model = spiceFile fields = ('file', 'upload_time', 'file_id', 'task') class TaskSerializer(serializers.HyperlinkedModelSerializer): # user = serializers.ReadOnlyField(source='user.username') file = FileSerializer(many=True, read_only=True) class Meta: model = Task fields = ('task_id', 'task_time', 'file') def create(self, validated_data): # Takes file from request and stores it along with a taskid files_data = list(self.context.get( 'view').request.FILES.getlist("file"))[0] logger.info('File Upload') task = Task.objects.create() logger.info('task: '+str(task)) spiceFile.objects.create(task=task, file=files_data) logger.info('Created Object for:' + files_data.name) return task class simulationSerializer(serializers.ModelSerializer): schematic = SaveListSerializer(many=False) class Meta: model = simulation fields = '__all__' class simulationSaveSerializer(serializers.ModelSerializer): class Meta: model = simulation fields = '__all__' ================================================ FILE: esim-cloud-backend/simulationAPI/tasks.py ================================================ from celery import shared_task, current_task from celery import states from simulationAPI.helpers import ngspice_helper from celery.exceptions import Ignore import traceback from simulationAPI.models import spiceFile from celery.exceptions import SoftTimeLimitExceeded """ Tasks cleanup after 3 secs and the process is stopped after 5 seconds. """ # @shared_task(soft_time_limit=3, time_limit=5) @shared_task def process_task(task_id): try: try: file_obj = list(spiceFile.objects.filter(task_id=task_id))[0] file_path = file_obj.file.path file_id = file_obj.file_id print("Processing ", file_path, file_id) current_task.update_state( state='PROGRESS', meta={'current_process': 'Started Processing File'}) output = ngspice_helper.ExecNetlist(file_path, file_id) current_task.update_state( state='PROGRESS', meta={'current_process': 'Processed Netlist, Loading Output'}) return output except Exception as e: current_task.update_state(state=states.FAILURE, meta={ 'exc_type': type(e).__name__, 'exc_message': traceback.format_exc().split('\n')}) print('Exception Occured: ', type(e).__name__) raise Ignore() except SoftTimeLimitExceeded: output = {'fail': "time limit exceeded"} return output ================================================ FILE: esim-cloud-backend/simulationAPI/templates/admin/runtimeStats.html ================================================ {% extends "admin/change_list.html" %} {% block extrahead %} {{ block.super }} {% endblock %} {% block content %}
{{ block.super }} {% endblock %} {% block content_title %}

Runtime Statistics

{% endblock %} {% block result_list %}
{% for row in summary %} {% endfor %}
{{ row.exec_time }}s {{ row.qty }} {% widthratio row.qty summary_total 100%}%
Total {{ summary_total }} 100%


{% block RuntimeLimit %}

Simulation Time Limit

{% endblock %} {% endblock %} {% block pagination %}{% endblock %} ================================================ FILE: esim-cloud-backend/simulationAPI/tests.py ================================================ # Create your tests here. ================================================ FILE: esim-cloud-backend/simulationAPI/urls.py ================================================ """ esimCloud URL Configuration """ from django.urls import path from simulationAPI import views as simulationAPI_views urlpatterns = [ path('upload', simulationAPI_views.NetlistUploader.as_view(), name='netlistUploader'), path('status/', simulationAPI_views.CeleryResultView.as_view(), name='celery_status'), path('history////', simulationAPI_views.SimulationResults.as_view(), name='schematic sim history'), path('history/lti////', simulationAPI_views.SimulationResultsForLTI.as_view(), name='schematic sim history for lti'), path('history/lti////', simulationAPI_views.SimulationResultsForLTI.as_view(), name='schematic sim history for lti'), path('history/simulator/', simulationAPI_views.SimulationResultsFromSimulator.as_view(), name='simulator sim history'), path('history/lti/', simulationAPI_views.GetLTISimResults.as_view(), name='lti sim history'), ] ================================================ FILE: esim-cloud-backend/simulationAPI/views.py ================================================ from simulationAPI.serializers import TaskSerializer, \ simulationSerializer, simulationSaveSerializer from simulationAPI.tasks import process_task from rest_framework.permissions import AllowAny, IsAuthenticated from rest_framework.parsers import MultiPartParser, FormParser from rest_framework.views import APIView from rest_framework.response import Response from rest_framework import status from django.conf import settings from rest_framework.exceptions import ValidationError from celery.result import AsyncResult from saveAPI.models import StateSave import uuid from .models import runtimeStat, Limit, simulation from ltiAPI.models import ltiSession import celery.signals from celery import current_task import time import math import os import logging logger = logging.getLogger(__name__) def saveNetlistDB(task_id, filepath, request): current_dir = settings.FILE_STORAGE_ROOT filepath = filepath.split('/')[-1] os.chdir(current_dir) f = open(filepath, "r") temp = f.read() if request.user.is_authenticated: owner = request.user.id else: owner = None if request.data.get('simulationType', None): simulation_type = request.data['simulationType'] else: simulation_type = "NgSpiceSimulator" if request.data.get('save_id', None): if 'gallery' in request.data.get('save_id'): save_id = None else: save_id = StateSave.objects.get( save_id=request.data['save_id'], version=request.data['version'], branch=request.data['branch']).id else: save_id = None lti_session = None if request.data.get('lti_id', None): lti_session = ltiSession.objects.get(id=request.data['lti_id']) serialized = simulationSaveSerializer( data={"task": task_id, "netlist": temp, "owner": owner, "simulation_type": simulation_type, "schematic": save_id}) if serialized.is_valid(raise_exception=True): serialized.save() if lti_session: lti_session.simulations.add( simulation.objects.get(id=serialized.data['id'])) return else: return Response(serialized.errors) class NetlistUploader(APIView): ''' API for NetlistUpload Requires a multipart/form-data POST Request with netlist file in the 'file' parameter ''' permission_classes = (AllowAny,) parser_classes = (MultiPartParser, FormParser,) def post(self, request, *args, **kwargs): logger.info('Got POST for netlist upload: ') logger.info(request.data) serializer = TaskSerializer(data=request.data, context={'view': self}) limits = Limit.objects.all() TIME_LIMIT = 0 if limits.exists(): TIME_LIMIT = Limit.objects.all()[0].timeLimit # if timeLimit.objects.count() != 0: # TIME_LIMIT = timeLimit.objects.all()[0] # print('NOT NONE') # else: # print('NONE') if serializer.is_valid(): serializer.save() saveNetlistDB( serializer.data['task_id'], serializer.data['file'][0]['file'], request) task_id = serializer.data['task_id'] if(TIME_LIMIT == 0): celery_task = process_task.apply_async( kwargs={'task_id': str(task_id)}, task_id=str(task_id) ) else: celery_task = process_task.apply_async( kwargs={'task_id': str(task_id)}, task_id=str(task_id), soft_time_limit=TIME_LIMIT) response_data = { 'state': celery_task.state, 'details': serializer.data, } return Response(response_data) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) class CeleryResultView(APIView): """ Returns Simulation results for 'task_id' provided after uploading the netlist /api/task/ """ permission_classes = (AllowAny,) methods = ['GET'] def get(self, request, task_id): if isinstance(task_id, uuid.UUID): celery_result = AsyncResult(str(task_id)) response_data = { 'state': celery_result.state, 'details': celery_result.info } try: Output = simulation.objects.get(task__task_id=task_id) Output.result = celery_result.info Output.save() except simulation.DoesNotExist: pass return Response(response_data) else: raise ValidationError('Invalid uuid format') class SimulationResults(APIView): permission_classes = (IsAuthenticated, ) def get(self, request, save_id, sim, version, branch): if sim is None: sims = simulation.objects.filter( owner=self.request.user, schematic__save_id=save_id, schematic__version=version, schematic__branch=branch ) else: sims = simulation.objects.filter( owner=self.request.user, schematic__save_id=save_id, schematic__version=version, schematic__branch=branch ) serialized = simulationSerializer(sims, many=True) return Response(serialized.data, status=status.HTTP_200_OK) class SimulationResultsForLTI(APIView): permission_classes = (IsAuthenticated, ) def get(self, request, save_id, sim, version, branch): if sim is None: sims = simulation.objects.filter( owner=self.request.user, schematic__save_id=save_id ) else: sims = simulation.objects.filter( owner=self.request.user, schematic__save_id=save_id ) serialized = simulationSerializer(sims, many=True) return Response(serialized.data, status=status.HTTP_200_OK) class SimulationResultsFromSimulator(APIView): permission_classes = (IsAuthenticated, ) def get(self, request, sim): sims = simulation.objects.filter( owner=self.request.user, simulation_type=sim) serialized = simulationSerializer(sims, many=True) return Response(serialized.data, status=status.HTTP_200_OK) class GetLTISimResults(APIView): permission_classes = (AllowAny, ) def get(self, request, lti_id): try: session = ltiSession.objects.get(id=lti_id) serialized = simulationSerializer( session.simulations.all(), many=True) return Response(serialized.data, status=status.HTTP_200_OK) except ltiSession.DoesNotExist: return Response(status=status.HTTP_404_NOT_FOUND) @ celery.signals.task_prerun.connect def statsd_task_prerun(task_id, **kwargs): current_task.start_time = time.time() @ celery.signals.task_postrun.connect def statsd_task_postrun(task_id, **kwargs): runtime = time.time() - current_task.start_time runtime = math.ceil(runtime) statObj, created = runtimeStat.objects.get_or_create(exec_time=runtime) statObj.qty += 1 statObj.save() ================================================ FILE: esim-cloud-backend/workflowAPI/__init__.py ================================================ default_app_config = 'workflowAPI.apps.WorkflowapiConfig' ================================================ FILE: esim-cloud-backend/workflowAPI/admin.py ================================================ from django.contrib import admin from django.contrib.auth.models import Group from django.contrib.auth import get_user_model from django.contrib.auth.admin import GroupAdmin as BaseGroupAdmin from workflowAPI.models import State, Transition, CustomGroup, Permission from publishAPI.models import TransitionHistory # Register your models here. @admin.register(State) class CircuitStates(admin.ModelAdmin): list_display = ['name'] @admin.register(Transition) class Transitions(admin.ModelAdmin): list_display = ['name', 'from_state', 'to_state'] fieldsets = ( ('Details of Transition', { 'fields': ( 'name', 'from_state', 'to_state', 'role', 'restricted_for_creator', 'only_for_creator') }), ('Messages for Creator of Project', { 'classes': ('collapse',), 'fields': ('event_creator', 'history_creator',), }), ('Messages for Reviewer', { 'classes': ('collapse',), 'fields': ('event_reviewer', 'history_reviewer',), }), ('Messages for Other Users', { 'classes': ('collapse',), 'fields': ('event_other', 'history_other',), }), ) @admin.register(TransitionHistory) class TransitionHistories(admin.ModelAdmin): readonly_fields = ( 'id', 'transition', 'transition_author', 'transition_time', 'reviewer_notes', 'is_done_by_reviewer') list_display = ['id', 'transition', 'transition_author', 'transition_time', ] @admin.register(Permission) class PermissionsAdmin(admin.ModelAdmin): fieldsets = ( (None, { 'fields': ('role',) }), ('View Permissions', { 'classes': ('collapse',), 'fields': ('view_own_states', 'view_other_states',), }), ('Edit Permissions', { 'classes': ('collapse',), 'fields': ('edit_own_states',), }), ('Delete Permissions', { 'classes': ('collapse',), 'fields': ('del_own_states',), }), ) class GroupInline(admin.TabularInline): model = CustomGroup can_delete = False # verbose_name_plural = 'custom groups' class GroupAdmin(BaseGroupAdmin): inlines = (GroupInline,) # Re-register GroupAdmin admin.site.unregister(Group) admin.site.register(Group, GroupAdmin) ================================================ FILE: esim-cloud-backend/workflowAPI/apps.py ================================================ from django.apps import AppConfig import workflowAPI class WorkflowapiConfig(AppConfig): name = 'workflowAPI' verbose_name = 'Workflow API' def ready(self): import workflowAPI.signals.handlers ================================================ FILE: esim-cloud-backend/workflowAPI/fixtures/gallery_setup.json ================================================ [ { "model": "saveAPI.gallery", "pk": 1, "fields": { "save_id": "gallery21fbdfa6-f8f0-4cd4-bed2-307dda84d43c", "data_dump": "", "name": "Voltage Divider", "description": "A voltage divider is a simple circuit which turns a large voltage into a smaller one. Using just two series resistors and an input voltage.", "media": "circuit_images_esim/dd07da32-60d2-4f4a-b121-2b177ac06ad5.png", "shared": true, "save_time": "2021-07-21T14:54:10.407Z", "is_arduino": false, "esim_libraries": [] } }, { "model": "saveAPI.gallery", "pk": 2, "fields": { "save_id": "gallery151bbd3f-f010-4b90-9125-c48800bfd583", "data_dump": "", "name": "RC Circuit", "description": "An RC circuit is a circuit with both a resistor (R) and a capacitor (C). RC circuits are freqent element in electronic devices.", "media": "circuit_images_esim/66bc19c5-9780-430e-85b3-c68435edc829.png", "shared": true, "save_time": "2021-07-21T14:54:37.432Z", "is_arduino": false, "esim_libraries": [] } }, { "model": "saveAPI.gallery", "pk": 3, "fields": { "save_id": "gallery421feedc-bc85-4c92-88bf-b38ede1cf715", "data_dump": "", "name": "Shunt Clipper", "description": "A Clipper circuit in which the diode is connected in shunt to the input signal and that attenuates the positive portions of the waveform, is termed as Positive Shunt Clipper.", "media": "circuit_images_esim/8479bce0-da97-4bdd-852b-15b5f471802a.png", "shared": true, "save_time": "2021-07-21T14:55:24.111Z", "is_arduino": false, "esim_libraries": [] } }, { "model": "saveAPI.gallery", "pk": 4, "fields": { "save_id": "gallerydb74d573-abf0-4c89-9238-3035bcaeaa94", "data_dump": "", "name": "RC Circuit ( Parallel )", "description": "An RC circuit is a circuit with both a resistor (R) and a capacitor (C). RC circuits are freqent element in electronic devices.", "media": "circuit_images_esim/72d77d05-d683-4d00-ae36-ba924de7eb9b.png", "shared": true, "save_time": "2021-07-21T14:55:30.354Z", "is_arduino": false, "esim_libraries": [] } }, { "model": "saveAPI.gallery", "pk": 5, "fields": { "save_id": "galleryc6e0e9a9-66a4-486b-b49c-8db2ed4dd09e", "data_dump": "", "name": "Bipolar Amplifier", "description": "A basic BJT amplifier has a very high gain that may vary widely from one transistor to the next. A NPN bipolar transistor is the used as amplifying device.", "media": "circuit_images_esim/63c65de8-dd49-42c2-9cb7-9cec86fbd544.png", "shared": true, "save_time": "2021-07-21T14:55:37.104Z", "is_arduino": false, "esim_libraries": [] } }, { "model": "saveAPI.gallery", "pk": 6, "fields": { "save_id": "gallery5aa827c0-5a3c-4226-86f7-88efbb4e0ec2", "data_dump": "", "name": "Dual RC Ladder", "description": "This is an dual RC ladder circuit with Passive components. The input is a voltage waveform (a pulse) versus time, and the output is a waveform as well. ", "media": "circuit_images_esim/a2cd6a0f-ae51-4542-9ac7-461cea9be73e.png", "shared": true, "save_time": "2021-07-21T14:55:57.688Z", "is_arduino": false, "esim_libraries": [] } }, { "model": "saveAPI.gallery", "pk": 7, "fields": { "save_id": "galleryed8541ba-fd41-4837-b37b-b9f19d16b1c7", "data_dump": "", "name": "AstableMultivibrator", "description": "A multivibrator is an electronic circuit used to implement a variety of simple two-state devices such as relaxation oscillators, timers and flip-flops. It consists of two amplifying devices cross-coupled by resistors or capacitors.", "media": "circuit_images_esim/b506a969-d68a-48c2-9675-4d93dd1cbc59.png", "shared": true, "save_time": "2021-07-21T14:56:26.988Z", "is_arduino": false, "esim_libraries": [] } }, { "model": "saveAPI.gallery", "pk": 8, "fields": { "save_id": "gallery9461d954-1fd0-4d12-96f3-d30c3341ed68", "data_dump": "", "name": "Half Wave Rectifier ", "description": "The main function of half wave rectifier is to change the AC (Alternating Current) into DC (Direct Current). However, the acquired output DC is not pure and it is an exciting DC. This DC is not constant and varies with time. ", "media": "circuit_images_esim/659043d5-5283-4376-8b21-800499dc718d.png", "shared": true, "save_time": "2021-08-16T10:50:30.403Z", "is_arduino": false } }, { "model": "saveAPI.gallery", "pk": 9, "fields": { "save_id": "galleryaf6c23bf-4382-4364-b1f0-d51a7ab232ea", "data_dump": "", "name": "Wheatstone Bridge", "description": "A Wheatstone bridge is an electrical circuit used to measure an unknown electrical resistance by balancing two legs of a bridge circuit, one leg of which includes the unknown component. The primary benefit of the circuit is its ability to provide extremely accurate measurements", "media": "circuit_images_esim/282352ba-6cd6-4e60-894f-4d38c925a967.png", "shared": true, "save_time": "2021-08-16T10:58:03.504Z", "is_arduino": false } }, { "model": "saveAPI.gallery", "pk": 10, "fields": { "save_id": "gallery9cf1bd31-4498-4769-8239-2cb79d7f2b56", "data_dump": "", "name": "Resistive Divider, AC input ", "description": "Voltage divider with sin wave input. E.g: Transient analysis with start: 0 stop: 3us 1ns UIC(true)", "media": "circuit_images_esim/af6a4bee-d70f-4d57-91ca-23da6ab5e864.png", "shared": true, "save_time": "2021-08-16T11:04:23.269Z", "is_arduino": false } }, { "model": "saveAPI.gallery", "pk": 65, "fields": { "save_id": "gallery77894.21093023136", "data_dump": "{\"canvas\":{\"x\":0,\"y\":-0.25,\"scale\":1},\"wires\":[{\"id\":1629376840107,\"points\":[[319.625,115],[320.31944274902344,168]],\"color\":\"#ff0000\",\"start\":{\"id\":1592280640444,\"keyName\":\"LED\",\"pid\":0,\"isSoldered\":false},\"end\":{\"id\":1592280616845,\"keyName\":\"ArduinoUno\",\"pid\":2,\"isSoldered\":false}},{\"id\":1629376840113,\"points\":[[335.625,115],[582.625,114],[585.625,479],[399.625,483],[400.31944274902344,442]],\"color\":\"#000\",\"start\":{\"id\":1592280640444,\"keyName\":\"LED\",\"pid\":1,\"isSoldered\":false},\"end\":{\"id\":1592280616845,\"keyName\":\"ArduinoUno\",\"pid\":20,\"isSoldered\":false}}],\"LED\":[{\"x\":313.625,\"y\":67,\"tx\":17,\"ty\":-20,\"id\":1592280640444,\"data\":{\"color\":0}}],\"ArduinoUno\":[{\"x\":193.31944274902344,\"y\":183,\"tx\":-89,\"ty\":-45,\"id\":1592280616845,\"data\":{\"name\":\"Arduino UNO R3 1\",\"code\":\"void setup(){\\n\\tpinMode(LED_BUILTIN, OUTPUT);\\n}\\n\\nvoid loop(){\\n\\tdigitalWrite(LED_BUILTIN, HIGH);\\n delay(1000);\\n\\tdigitalWrite(LED_BUILTIN, LOW);\\n delay(1000);\\n}\"}}]}", "name": "Blink Example", "description": "", "media": "circuit_images_esim/393fc620-8743-425a-83b9-9f6fd8fe76b9.png", "shared": true, "save_time": "2021-08-19T12:40:45.265Z", "is_arduino": true, "esim_libraries": [] } }, { "model": "saveAPI.gallery", "pk": 66, "fields": { "save_id": "gallery49157.1582640465", "data_dump": "{\"canvas\":{\"x\":-15,\"y\":2.5,\"scale\":1},\"wires\":[{\"id\":1629376852259,\"points\":[[410.3194580078125,138],[411.31944274902344,201]],\"color\":\"#ff0000\",\"start\":{\"id\":1592280227638,\"keyName\":\"Buzzer\",\"pid\":0,\"isSoldered\":false},\"end\":{\"id\":1592280217174,\"keyName\":\"ArduinoUno\",\"pid\":2,\"isSoldered\":false}},{\"id\":1629376852261,\"points\":[[440.3194580078125,138],[690.3194580078125,134],[690.3194580078125,512],[491.3194580078125,515],[491.31944274902344,475]],\"color\":\"#000\",\"start\":{\"id\":1592280227638,\"keyName\":\"Buzzer\",\"pid\":1,\"isSoldered\":false},\"end\":{\"id\":1592280217174,\"keyName\":\"ArduinoUno\",\"pid\":20,\"isSoldered\":false}}],\"ArduinoUno\":[{\"x\":251.31944274902344,\"y\":204,\"tx\":-56,\"ty\":-33,\"id\":1592280217174,\"data\":{\"name\":\"Arduino UNO R3 1\",\"code\":\"void setup(){\\n\\tpinMode(LED_BUILTIN, OUTPUT);\\n}\\n\\nvoid loop(){\\n\\tdigitalWrite(LED_BUILTIN, HIGH);\\n delay(1000);\\n\\tdigitalWrite(LED_BUILTIN, LOW);\\n delay(1000);\\n}\"}}],\"Buzzer\":[{\"x\":417.3194580078125,\"y\":97,\"tx\":-23,\"ty\":-40,\"id\":1592280227638}]}", "name": "Buzzer", "description": "", "media": "circuit_images_esim/2fa36264-95e4-407c-928c-fabbbb1af919.png", "shared": true, "save_time": "2021-08-19T12:40:54.815Z", "is_arduino": true, "esim_libraries": [] } }, { "model": "saveAPI.gallery", "pk": 67, "fields": { "save_id": "gallery87942.66869509322", "data_dump": "{\"canvas\":{\"x\":-74.75,\"y\":109.75,\"scale\":1.1},\"wires\":[{\"id\":1629376862259,\"points\":[[750.3194580078125,248],[749.3194580078125,116],[545.3194580078125,112],[543.3194427490234,157]],\"color\":\"#ff0000\",\"start\":{\"id\":1591347187858,\"keyName\":\"SevenSegment\",\"pid\":3,\"isSoldered\":false},\"end\":{\"id\":1591347180843,\"keyName\":\"ArduinoUno\",\"pid\":13,\"isSoldered\":false}},{\"id\":1629376862261,\"points\":[[766.3194580078125,248],[769.3194580078125,93],[530.3194580078125,92],[529.3194427490234,157]],\"color\":\"#2593fa\",\"start\":{\"id\":1591347187858,\"keyName\":\"SevenSegment\",\"pid\":4,\"isSoldered\":false},\"end\":{\"id\":1591347180843,\"keyName\":\"ArduinoUno\",\"pid\":12,\"isSoldered\":false}},{\"id\":1629376862264,\"points\":[[750.3194580078125,339],[749.3194580078125,379],[788.3194580078125,377],[788.3194580078125,65],[514.3194580078125,62],[515.3194427490234,157]],\"color\":\"#31c404\",\"start\":{\"id\":1591347187858,\"keyName\":\"SevenSegment\",\"pid\":8,\"isSoldered\":false},\"end\":{\"id\":1591347180843,\"keyName\":\"ArduinoUno\",\"pid\":11,\"isSoldered\":false}},{\"id\":1629376862267,\"points\":[[720.3194580078125,339],[719.3194580078125,392],[815.3194580078125,394],[817.3194580078125,42],[504.3194580078125,43],[501.31944274902344,157]],\"color\":\"#e6a800\",\"start\":{\"id\":1591347187858,\"keyName\":\"SevenSegment\",\"pid\":6,\"isSoldered\":false},\"end\":{\"id\":1591347180843,\"keyName\":\"ArduinoUno\",\"pid\":10,\"isSoldered\":false}},{\"id\":1629376862270,\"points\":[[705.3194580078125,339],[704.3194580078125,412],[849.3194580078125,411],[841.3194580078125,12],[489.3194580078125,18],[487.31944274902344,157]],\"color\":\"#ff0000\",\"start\":{\"id\":1591347187858,\"keyName\":\"SevenSegment\",\"pid\":5,\"isSoldered\":false},\"end\":{\"id\":1591347180843,\"keyName\":\"ArduinoUno\",\"pid\":9,\"isSoldered\":false}},{\"id\":1629376862274,\"points\":[[720.3194580078125,248],[720.3194580078125,203],[678.3194580078125,204],[679.3194580078125,428],[867.3194580078125,434],[863.3194580078125,-8],[475.3194580078125,-3],[473.31944274902344,157]],\"color\":\"#31c404\",\"start\":{\"id\":1591347187858,\"keyName\":\"SevenSegment\",\"pid\":1,\"isSoldered\":false},\"end\":{\"id\":1591347180843,\"keyName\":\"ArduinoUno\",\"pid\":8,\"isSoldered\":false}},{\"id\":1629376862279,\"points\":[[705.3194580078125,248],[652.8194580078125,248],[658.8194580078125,452],[890.8194580078125,454],[885.8194580078125,-28],[448.8194580078125,-25],[449.31944274902344,157]],\"color\":\"#2593fa\",\"start\":{\"id\":1591347187858,\"keyName\":\"SevenSegment\",\"pid\":0,\"isSoldered\":false},\"end\":{\"id\":1591347180843,\"keyName\":\"ArduinoUno\",\"pid\":7,\"isSoldered\":false}},{\"id\":1629376862283,\"points\":[[735.3194580078125,248],[735.8194580078125,156],[635.8194580078125,153],[636.8194580078125,490],[456.8194580078125,489],[457.31944274902344,431]],\"color\":\"#000\",\"start\":{\"id\":1591347187858,\"keyName\":\"SevenSegment\",\"pid\":2,\"isSoldered\":false},\"end\":{\"id\":1591347180843,\"keyName\":\"ArduinoUno\",\"pid\":20,\"isSoldered\":false}}],\"SevenSegment\":[{\"x\":753.3194580078125,\"y\":332,\"tx\":-55,\"ty\":-95,\"id\":1591347187858}],\"ArduinoUno\":[{\"x\":236.31944274902344,\"y\":186,\"tx\":-75,\"ty\":-59,\"id\":1591347180843,\"data\":{\"name\":\"Arduino UNO R3 1\",\"code\":\"int outs[10][7] = {\\n\\t{ 1,1,1,1,1,1,0 }, // 0\\n { 0,1,1,0,0,0,0 }, // 1\\n { 1,1,0,1,1,0,1 }, // 2\\n { 1,1,1,1,0,0,1 }, // 3\\n { 0,1,1,0,0,1,1 }, // 4\\n { 1,0,1,1,0,1,1 }, // 5\\n { 1,0,1,1,1,1,1 }, // 6\\n { 1,1,1,0,0,0,0 }, // 7\\n { 1,1,1,1,1,1,1 }, // 8\\n { 1,1,1,0,0,1,1 } // 9\\n};\\n\\nvoid setup(){\\n\\tpinMode(2,OUTPUT);\\n\\tpinMode(3,OUTPUT);\\n\\tpinMode(4,OUTPUT);\\n\\tpinMode(5,OUTPUT);\\n\\tpinMode(6,OUTPUT);\\n\\tpinMode(7,OUTPUT);\\n\\tpinMode(8,OUTPUT);\\t\\n}\\nint dig = 0;\\nvoid loop(){\\n\\tint pin = 2;\\n\\tfor(int i=0;i<7;++i){\\n\\t\\tdigitalWrite(pin,outs[dig][i]);\\n\\t\\t++pin;\\n\\t}\\t\\n delay(1000);\\n ++dig;\\n if(dig >= 10)\\n dig -= 10;\\n}\"}}]}", "name": "Seven Segment", "description": "", "media": "circuit_images_esim/7f942833-be02-41f5-a633-1452c89a3515.png", "shared": true, "save_time": "2021-08-19T12:41:04.225Z", "is_arduino": true, "esim_libraries": [] } }, { "model": "saveAPI.gallery", "pk": 68, "fields": { "save_id": "gallery28901.67161176469", "data_dump": "{\"canvas\":{\"x\":0.25,\"y\":0,\"scale\":1},\"wires\":[{\"id\":1629376875889,\"points\":[[670.3194580078125,149],[672.3194580078125,236]],\"color\":\"#ff0000\",\"start\":{\"id\":1592621634830,\"keyName\":\"RGBLED\",\"pid\":0,\"isSoldered\":false},\"end\":{\"id\":1592621629068,\"keyName\":\"ArduinoUno\",\"pid\":4,\"isSoldered\":false}},{\"id\":1629377139116,\"points\":[[702.3194580078125,149],[702.3194580078125,236]],\"color\":\"#2593fa\",\"start\":{\"id\":1592621634830,\"keyName\":\"RGBLED\",\"pid\":2,\"isSoldered\":false},\"end\":{\"id\":1592621629068,\"keyName\":\"ArduinoUno\",\"pid\":6,\"isSoldered\":false}},{\"id\":1629377236228,\"points\":[[719.3194580078125,149],[739.3194580078125,150],[740.3194580078125,236]],\"color\":\"#31c404\",\"start\":{\"id\":1592621634830,\"keyName\":\"RGBLED\",\"pid\":3,\"isSoldered\":false},\"end\":{\"id\":1592621629068,\"keyName\":\"ArduinoUno\",\"pid\":8,\"isSoldered\":false}},{\"id\":1677957938581,\"points\":[[710.3194580078125,510],[710.3194580078125,559],[409.28125,559],[409.28125,195],[684.28125,195],[685.3194580078125,149]],\"color\":\"#000\",\"start\":{\"id\":1592621629068,\"keyName\":\"ArduinoUno\",\"pid\":19,\"isSoldered\":false},\"end\":{\"id\":1592621634830,\"keyName\":\"RGBLED\",\"pid\":1,\"isSoldered\":false}}],\"RGBLED\":[{\"x\":670.3194580078125,\"y\":73,\"tx\":-3,\"ty\":-25,\"id\":1592621634830}],\"ArduinoUno\":[{\"x\":428.3194580078125,\"y\":206,\"tx\":0,\"ty\":0,\"id\":1592621629068,\"data\":{\"name\":\"Arduino UNO R3 1\",\"code\":\"void setup(){\\n\\tpinMode(11, OUTPUT);\\n\\tpinMode(9, OUTPUT);\\n\\tpinMode(7, OUTPUT);\\n}\\n\\nvoid loop(){\\n\\tfor(int i=1;i<=7;++i){\\n digitalWrite(11, i&1);\\n digitalWrite(9, (i>>1)&1);\\n digitalWrite(7, (i>>2)&1);\\n delay(1000);\\n }\\n}\"}}]}", "name": "RGB LED", "description": "", "media": "circuit_images_esim/0afdb75b-dffc-4e26-b067-768ac3f2ac3a.png", "shared": true, "save_time": "2021-08-19T12:41:17.798Z", "is_arduino": true, "esim_libraries": [] } }, { "model": "saveAPI.gallery", "pk": 69, "fields": { "save_id": "gallery8452.96896319243", "data_dump": "{\"canvas\":{\"x\":-15.75,\"y\":-75,\"scale\":1},\"wires\":[{\"id\":1629376897682,\"points\":[[415,213],[416,313]],\"color\":\"#ff0000\",\"start\":{\"id\":1592279848489,\"keyName\":\"Buzzer\",\"pid\":0,\"isSoldered\":false},\"end\":{\"id\":1592279815399,\"keyName\":\"ArduinoUno\",\"pid\":7,\"isSoldered\":false}},{\"id\":1629376897683,\"points\":[[697,387],[694,261],[440,263],[440,313]],\"color\":\"#2593fa\",\"start\":{\"id\":1592279863383,\"keyName\":\"PushButton\",\"pid\":1,\"isSoldered\":false},\"end\":{\"id\":1592279815399,\"keyName\":\"ArduinoUno\",\"pid\":8,\"isSoldered\":false}},{\"id\":1629376897684,\"points\":[[445,213],[734,212],[737,663],[421,666],[424,587]],\"color\":\"#e6a800\",\"start\":{\"id\":1592279848489,\"keyName\":\"Buzzer\",\"pid\":1,\"isSoldered\":false},\"end\":{\"id\":1592279815399,\"keyName\":\"ArduinoUno\",\"pid\":20,\"isSoldered\":false}},{\"id\":1629376897687,\"points\":[[662,487],[662,607],[394,608],[396,587]],\"color\":\"#ff0000\",\"start\":{\"id\":1592279863383,\"keyName\":\"PushButton\",\"pid\":2,\"isSoldered\":false},\"end\":{\"id\":1592279815399,\"keyName\":\"ArduinoUno\",\"pid\":18,\"isSoldered\":false}},{\"id\":1629376897688,\"points\":[[697,487],[696,624],[408,631],[410,587]],\"color\":\"#000\",\"start\":{\"id\":1592279863383,\"keyName\":\"PushButton\",\"pid\":3,\"isSoldered\":false},\"end\":{\"id\":1592279815399,\"keyName\":\"ArduinoUno\",\"pid\":19,\"isSoldered\":false}},{\"id\":1629376897689,\"points\":[[340.75,252.75],[344,313]],\"color\":\"#ff0000\",\"start\":{\"id\":1592279950865,\"keyName\":\"LED\",\"pid\":0,\"isSoldered\":false},\"end\":{\"id\":1592279815399,\"keyName\":\"ArduinoUno\",\"pid\":2,\"isSoldered\":false}},{\"id\":1629376897690,\"points\":[[356.75,252.75],[383.75,251.75],[382.75,144.75],[303.75,146.75],[304.75,252.75],[328.75,251.75],[330,313]],\"color\":\"#000\",\"start\":{\"id\":1592279950865,\"keyName\":\"LED\",\"pid\":1,\"isSoldered\":false},\"end\":{\"id\":1592279815399,\"keyName\":\"ArduinoUno\",\"pid\":1,\"isSoldered\":false}}],\"LED\":[{\"x\":348.75,\"y\":176.75,\"tx\":3,\"ty\":8,\"id\":1592279950865,\"data\":{\"color\":0}}],\"ArduinoUno\":[{\"x\":177,\"y\":290,\"tx\":-49,\"ty\":-7,\"id\":1592279815399,\"data\":{\"name\":\"Arduino UNO R3 1\",\"code\":\"void setup(){\\n\\tpinMode(LED_BUILTIN, OUTPUT);\\n\\tpinMode(8, OUTPUT);\\n\\tpinMode(7, INPUT);\\n}\\n\\nvoid loop(){\\n if(digitalRead(7) == HIGH){\\n \\tdigitalWrite(LED_BUILTIN, HIGH);\\n \\tdigitalWrite(8, HIGH);\\n }else{\\n digitalWrite(LED_BUILTIN, LOW);\\n digitalWrite(8, LOW);\\n }\\n}\"}}],\"PushButton\":[{\"x\":640,\"y\":392,\"tx\":8,\"ty\":15,\"id\":1592279863383}],\"Buzzer\":[{\"x\":418,\"y\":73,\"tx\":-19,\"ty\":59,\"id\":1592279848489}]}", "name": "Push Button Example", "description": "", "media": "circuit_images_esim/f6f78ec2-9d49-4381-99d0-bfe84b90d96d.png", "shared": true, "save_time": "2021-08-19T12:41:39.520Z", "is_arduino": true, "esim_libraries": [] } }, { "model": "saveAPI.gallery", "pk": 70, "fields": { "save_id": "gallery59981.56828154135", "data_dump": "{\"canvas\":{\"x\":0,\"y\":0.5,\"scale\":1},\"wires\":[{\"id\":1629376913493,\"points\":[[238.31944274902344,274],[238.31944274902344,86],[532.3194580078125,82],[530.3194580078125,218]],\"color\":\"#2593fa\",\"start\":{\"id\":1592277596751,\"keyName\":\"PushButton\",\"pid\":0,\"isSoldered\":false},\"end\":{\"id\":1592277587638,\"keyName\":\"ArduinoUno\",\"pid\":3,\"isSoldered\":false}},{\"id\":1629376913494,\"points\":[[273.31944274902344,374],[269.3194580078125,545],[568.3194580078125,543],[568.3194580078125,492]],\"color\":\"#ff0000\",\"start\":{\"id\":1592277596751,\"keyName\":\"PushButton\",\"pid\":3,\"isSoldered\":false},\"end\":{\"id\":1592277587638,\"keyName\":\"ArduinoUno\",\"pid\":18,\"isSoldered\":false}},{\"id\":1629376913495,\"points\":[[238.31944274902344,374],[236.31944274902344,569],[583.3194580078125,567],[582.3194580078125,492]],\"color\":\"#000\",\"start\":{\"id\":1592277596751,\"keyName\":\"PushButton\",\"pid\":2,\"isSoldered\":false},\"end\":{\"id\":1592277587638,\"keyName\":\"ArduinoUno\",\"pid\":19,\"isSoldered\":false}},{\"id\":1629376913497,\"points\":[[880.3194580078125,290],[878.3194580078125,160],[683.3194580078125,161],[682.3194580078125,218]],\"color\":\"#ff0000\",\"start\":{\"id\":1592277590862,\"keyName\":\"SevenSegment\",\"pid\":3,\"isSoldered\":false},\"end\":{\"id\":1592277587638,\"keyName\":\"ArduinoUno\",\"pid\":13,\"isSoldered\":false}},{\"id\":1629376913498,\"points\":[[896.3194580078125,290],[895.3194580078125,142],[668.3194580078125,144],[668.3194580078125,218]],\"color\":\"#2593fa\",\"start\":{\"id\":1592277590862,\"keyName\":\"SevenSegment\",\"pid\":4,\"isSoldered\":false},\"end\":{\"id\":1592277587638,\"keyName\":\"ArduinoUno\",\"pid\":12,\"isSoldered\":false}},{\"id\":1629376913500,\"points\":[[880.3194580078125,381],[881.3194580078125,410],[918.3194580078125,410],[915.3194580078125,122],[654.3194580078125,124],[654.3194580078125,218]],\"color\":\"#31c404\",\"start\":{\"id\":1592277590862,\"keyName\":\"SevenSegment\",\"pid\":8,\"isSoldered\":false},\"end\":{\"id\":1592277587638,\"keyName\":\"ArduinoUno\",\"pid\":11,\"isSoldered\":false}},{\"id\":1629376913501,\"points\":[[850.3194580078125,381],[851.3194580078125,428],[939.3194580078125,428],[933.3194580078125,101],[638.3194580078125,104],[640.3194580078125,218]],\"color\":\"#e6a800\",\"start\":{\"id\":1592277590862,\"keyName\":\"SevenSegment\",\"pid\":6,\"isSoldered\":false},\"end\":{\"id\":1592277587638,\"keyName\":\"ArduinoUno\",\"pid\":10,\"isSoldered\":false}},{\"id\":1629376913502,\"points\":[[835.3194580078125,381],[836.3194580078125,446],[961.3194580078125,447],[953.3194580078125,85],[624.3194580078125,88],[626.3194580078125,218]],\"color\":\"#ff0000\",\"start\":{\"id\":1592277590862,\"keyName\":\"SevenSegment\",\"pid\":5,\"isSoldered\":false},\"end\":{\"id\":1592277587638,\"keyName\":\"ArduinoUno\",\"pid\":9,\"isSoldered\":false}},{\"id\":1629376913504,\"points\":[[850.3194580078125,290],[851.3194580078125,258],[818.3194580078125,258],[818.3194580078125,465],[971.3194580078125,466],[966.3194580078125,62],[611.3194580078125,70],[612.3194580078125,218]],\"color\":\"#2593fa\",\"start\":{\"id\":1592277590862,\"keyName\":\"SevenSegment\",\"pid\":1,\"isSoldered\":false},\"end\":{\"id\":1592277587638,\"keyName\":\"ArduinoUno\",\"pid\":8,\"isSoldered\":false}},{\"id\":1629376913506,\"points\":[[835.3194580078125,290],[795.3194580078125,290],[800.3194580078125,480],[991.3194580078125,479],[987.3194580078125,47],[587.3194580078125,52],[588.3194580078125,218]],\"color\":\"#31c404\",\"start\":{\"id\":1592277590862,\"keyName\":\"SevenSegment\",\"pid\":0,\"isSoldered\":false},\"end\":{\"id\":1592277587638,\"keyName\":\"ArduinoUno\",\"pid\":7,\"isSoldered\":false}},{\"id\":1629376913507,\"points\":[[865.3194580078125,290],[861.3194580078125,213],[769.3194580078125,214],[774.3194580078125,562],[598.3194580078125,563],[596.3194580078125,492]],\"color\":\"#000\",\"start\":{\"id\":1592277590862,\"keyName\":\"SevenSegment\",\"pid\":2,\"isSoldered\":false},\"end\":{\"id\":1592277587638,\"keyName\":\"ArduinoUno\",\"pid\":20,\"isSoldered\":false}}],\"SevenSegment\":[{\"x\":816.3194580078125,\"y\":346,\"tx\":12,\"ty\":-67,\"id\":1592277590862}],\"ArduinoUno\":[{\"x\":376.3194580078125,\"y\":252,\"tx\":-76,\"ty\":-64,\"id\":1592277587638,\"data\":{\"name\":\"Arduino UNO R3 1\",\"code\":\"int outs[10][7] = {\\n\\t{ 1,1,1,1,1,1,0 }, // 0\\n { 0,1,1,0,0,0,0 }, // 1\\n { 1,1,0,1,1,0,1 }, // 2\\n { 1,1,1,1,0,0,1 }, // 3\\n { 0,1,1,0,0,1,1 }, // 4\\n { 1,0,1,1,0,1,1 }, // 5\\n { 1,0,1,1,1,1,1 }, // 6\\n { 1,1,1,0,0,0,0 }, // 7\\n { 1,1,1,1,1,1,1 }, // 8\\n { 1,1,1,0,0,1,1 } // 9\\n};\\n\\nvoid setup(){\\n\\tpinMode(2,OUTPUT);\\n\\tpinMode(3,OUTPUT);\\n\\tpinMode(4,OUTPUT);\\n\\tpinMode(5,OUTPUT);\\n\\tpinMode(6,OUTPUT);\\n\\tpinMode(7,OUTPUT);\\n\\tpinMode(8,OUTPUT);\\n\\tpinMode(12,INPUT);\\n}\\nint dig = 0;\\nvoid loop(){\\n\\tif(digitalRead(12) == HIGH){\\n\\t\\tint pin = 2;\\n\\t\\tfor(int i=0;i<7;++i){\\n\\t\\t\\tdigitalWrite(pin,outs[dig][i]);\\n\\t\\t\\t++pin;\\n\\t\\t}\\t\\t\\t\\n\\t\\t++dig;\\n delay(100);\\n\\t}\\n if(dig >= 10)\\n dig -= 10;\\n}\"}}],\"PushButton\":[{\"x\":252.31944274902344,\"y\":310,\"tx\":-28,\"ty\":-16,\"id\":1592277596751}]}", "name": "Counter", "description": "", "media": "circuit_images_esim/ceaad52b-88ce-4388-80a7-3b33599c8c6c.png", "shared": true, "save_time": "2021-08-19T12:41:57.705Z", "is_arduino": true, "esim_libraries": [] } }, { "model": "saveAPI.gallery", "pk": 71, "fields": { "save_id": "gallery97398.10851589308", "data_dump": "{\"canvas\":{\"x\":-31,\"y\":-28.25,\"scale\":1.1},\"wires\":[{\"id\":1629376949244,\"points\":[[664.3194580078125,292],[623.3194580078125,290],[621.3194580078125,201]],\"color\":\"#ff0000\",\"start\":{\"id\":1592274238321,\"keyName\":\"Battery9v\",\"pid\":0,\"isSoldered\":false},\"end\":{\"id\":1592274215230,\"keyName\":\"Motor\",\"pid\":1,\"isSoldered\":false}},{\"id\":1629376949252,\"points\":[[605.3194580078125,201],[606.3194580078125,334],[664.3194580078125,334]],\"color\":\"#000\",\"start\":{\"id\":1592274215230,\"keyName\":\"Motor\",\"pid\":0,\"isSoldered\":false},\"end\":{\"id\":1592274238321,\"keyName\":\"Battery9v\",\"pid\":1,\"isSoldered\":false}},{\"id\":1629376949254,\"points\":[[393.3194580078125,209],[394.3194580078125,330],[409.3194580078125,329]],\"color\":\"#ff0000\",\"start\":{\"id\":1592274211174,\"keyName\":\"Motor\",\"pid\":1,\"isSoldered\":false},\"end\":{\"id\":1592274258222,\"keyName\":\"Battery9v\",\"pid\":1,\"isSoldered\":false}},{\"id\":1629376949255,\"points\":[[377.3194580078125,209],[376.3194580078125,288],[409.3194580078125,287]],\"color\":\"#000\",\"start\":{\"id\":1592274211174,\"keyName\":\"Motor\",\"pid\":0,\"isSoldered\":false},\"end\":{\"id\":1592274258222,\"keyName\":\"Battery9v\",\"pid\":0,\"isSoldered\":false}},{\"id\":1629376949257,\"points\":[[262.31944274902344,203],[259.31944274902344,286]],\"color\":\"#ff0000\",\"start\":{\"id\":1592274209424,\"keyName\":\"Motor\",\"pid\":1,\"isSoldered\":false},\"end\":{\"id\":1592274294529,\"keyName\":\"CoinCell\",\"pid\":0,\"isSoldered\":false}},{\"id\":1629376949258,\"points\":[[246.31944274902344,203],[246.5858612060547,269.25],[215.6767578125,271.06817626953125],[212.94949340820312,378.3409118652344],[259.7676696777344,380.06817626953125],[259.31944274902344,358]],\"color\":\"#000\",\"start\":{\"id\":1592274209424,\"keyName\":\"Motor\",\"pid\":0,\"isSoldered\":false},\"end\":{\"id\":1592274294529,\"keyName\":\"CoinCell\",\"pid\":1,\"isSoldered\":false}}],\"CoinCell\":[{\"x\":227.31944274902344,\"y\":314,\"tx\":2,\"ty\":-31,\"id\":1592274294529}],\"Motor\":[{\"x\":218.31944274902344,\"y\":148,\"tx\":0,\"ty\":0,\"id\":1592274209424},{\"x\":390.3194580078125,\"y\":172,\"tx\":-41,\"ty\":-18,\"id\":1592274211174},{\"x\":583.3194580078125,\"y\":184,\"tx\":-6,\"ty\":-38,\"id\":1592274215230}],\"Battery9v\":[{\"x\":640.3194580078125,\"y\":280,\"tx\":24,\"ty\":-19,\"id\":1592274238321},{\"x\":478.3194580078125,\"y\":293,\"tx\":-69,\"ty\":-37,\"id\":1592274258222}]}", "name": "Motors", "description": "", "media": "circuit_images_esim/bf658e5b-7e4f-4350-9f2c-712e719e0a81.png", "shared": true, "save_time": "2021-08-19T12:42:32.311Z", "is_arduino": true, "esim_libraries": [] } }, { "model": "saveAPI.gallery", "pk": 72, "fields": { "save_id": "gallery480.4349793404272", "data_dump": "{\"canvas\":{\"x\":78.75,\"y\":22,\"scale\":1},\"wires\":[{\"id\":1629376957107,\"points\":[[362.3194580078125,126],[577.3194580078125,124],[580.3194580078125,493],[404.3194580078125,494],[406.3194580078125,449]],\"color\":\"#000\",\"start\":{\"id\":1591458433019,\"keyName\":\"TMP36\",\"pid\":2,\"isSoldered\":false},\"end\":{\"id\":1591458428806,\"keyName\":\"ArduinoUno\",\"pid\":20,\"isSoldered\":false}},{\"id\":1629376957109,\"points\":[[339.3194580078125,126],[91.31944274902344,128],[89.31944274902344,491],[378.3194580078125,495],[378.3194580078125,449]],\"color\":\"#ff0000\",\"start\":{\"id\":1591458433019,\"keyName\":\"TMP36\",\"pid\":0,\"isSoldered\":false},\"end\":{\"id\":1591458428806,\"keyName\":\"ArduinoUno\",\"pid\":18,\"isSoldered\":false}},{\"id\":1629376957110,\"points\":[[350.3194580078125,126],[353.3194580078125,318],[449.3194580078125,317],[450.3194580078125,449]],\"color\":\"#31c404\",\"start\":{\"id\":1591458433019,\"keyName\":\"TMP36\",\"pid\":1,\"isSoldered\":false},\"end\":{\"id\":1591458428806,\"keyName\":\"ArduinoUno\",\"pid\":22,\"isSoldered\":false}}],\"TMP36\":[{\"x\":273.3194580078125,\"y\":81,\"tx\":63,\"ty\":-23,\"id\":1591458433019}],\"ArduinoUno\":[{\"x\":340.3194580078125,\"y\":188,\"tx\":-230,\"ty\":-43,\"id\":1591458428806,\"data\":{\"name\":\"Arduino UNO R3 1\",\"code\":\"void setup()\\n{\\n Serial.begin(9600);\\n}\\n \\nvoid loop() {\\n int reading = analogRead(A0); \\n float voltage = reading * 5.0;\\n voltage /= 1023.0; \\n \\n float temperatureC = (voltage - 0.5) * 100;\\n Serial.print(temperatureC); \\n Serial.println(\\\" degrees C\\\"); \\n delay(1000);\\n}\"}}]}", "name": "Temperature Sensor", "description": "", "media": "circuit_images_esim/b5b59845-1a1e-44c8-88f7-75fd3d6d0f2c.png", "shared": true, "save_time": "2021-08-19T12:42:38.799Z", "is_arduino": true, "esim_libraries": [] } }, { "model": "saveAPI.gallery", "pk": 74, "fields": { "save_id": "gallery86920.00865688192", "data_dump": "{\"canvas\":{\"x\":19,\"y\":687.75,\"scale\":0.49999999999999956},\"wires\":[{\"id\":1629376974785,\"points\":[[529.3194580078125,199.22222900390625],[529.3194580078125,251.22222900390625]],\"color\":\"#31c404\",\"start\":{\"id\":1592278156916,\"keyName\":\"PIRSensor\",\"pid\":0,\"isSoldered\":false},\"end\":{\"id\":1592278149628,\"keyName\":\"ArduinoUno\",\"pid\":8,\"isSoldered\":false}},{\"id\":1629376974786,\"points\":[[544.3194580078125,199.22222900390625],[545.3194580078125,222.22222900390625],[685.3194580078125,221.22222900390625],[688.3194580078125,565.2222290039062],[483.3194580078125,565.2222290039062],[485.3194580078125,525.2222290039062]],\"color\":\"#ff0000\",\"start\":{\"id\":1592278156916,\"keyName\":\"PIRSensor\",\"pid\":1,\"isSoldered\":false},\"end\":{\"id\":1592278149628,\"keyName\":\"ArduinoUno\",\"pid\":18,\"isSoldered\":false}},{\"id\":1629376974788,\"points\":[[558.3194580078125,199.22222900390625],[707.3194580078125,198.22222900390625],[709.3194580078125,581.2222290039062],[499.3194580078125,583.2222290039062],[499.3194580078125,525.2222290039062]],\"color\":\"#000\",\"start\":{\"id\":1592278156916,\"keyName\":\"PIRSensor\",\"pid\":2,\"isSoldered\":false},\"end\":{\"id\":1592278149628,\"keyName\":\"ArduinoUno\",\"pid\":19,\"isSoldered\":false}},{\"id\":1629376974789,\"points\":[[340.31944274902344,166.22222137451172],[387.3194580078125,166.22222900390625],[385.3194580078125,46.22222137451172],[188.31944274902344,47.22222137451172],[182.31944274902344,608.2222290039062],[519.3194580078125,606.2222290039062],[513.3194580078125,525.2222290039062]],\"color\":\"#2593fa\",\"start\":{\"id\":1592278168268,\"keyName\":\"Buzzer\",\"pid\":1,\"isSoldered\":false},\"end\":{\"id\":1592278149628,\"keyName\":\"ArduinoUno\",\"pid\":20,\"isSoldered\":false}},{\"id\":1629376974791,\"points\":[[310.31944274902344,166.22222137451172],[310.3194580078125,197.22222900390625],[432.3194580078125,199.22222900390625],[433.3194580078125,251.22222900390625]],\"color\":\"#ff0000\",\"start\":{\"id\":1592278168268,\"keyName\":\"Buzzer\",\"pid\":0,\"isSoldered\":false},\"end\":{\"id\":1592278149628,\"keyName\":\"ArduinoUno\",\"pid\":2,\"isSoldered\":false}}],\"PIRSensor\":[{\"x\":555.3194580078125,\"y\":131.22222900390625,\"tx\":-111,\"ty\":-97,\"id\":1592278156916}],\"ArduinoUno\":[{\"x\":359.3194580078125,\"y\":243.22222900390625,\"tx\":-142,\"ty\":-22,\"id\":1592278149628,\"data\":{\"name\":\"Arduino UNO R3 1\",\"code\":\"void setup(){\\n pinMode(12, OUTPUT);\\n pinMode(13, OUTPUT);\\n pinMode(7, INPUT);\\n}\\n\\nvoid loop(){\\n\\tif(digitalRead(7) == HIGH){\\n digitalWrite(13, HIGH);\\n digitalWrite(12, HIGH);\\n }else{\\n digitalWrite(13, LOW);\\n digitalWrite(12, LOW);\\n }\\n}\"}}],\"Buzzer\":[{\"x\":226.31944274902344,\"y\":74.22222137451172,\"tx\":68,\"ty\":11,\"id\":1592278168268}]}", "name": "PIR Sensor", "description": "", "media": "circuit_images_esim/b3ebd817-9189-4a1a-a036-134644c4bd27.png", "shared": true, "save_time": "2021-08-19T12:42:57.241Z", "is_arduino": true, "esim_libraries": [] } }, { "model": "saveAPI.gallery", "pk": 75, "fields": { "save_id": "gallery58788.89198925628", "data_dump": "{\"canvas\":{\"x\":46.5,\"y\":496,\"scale\":0.5799999999999996},\"wires\":[{\"id\":1629376980950,\"points\":[[369.71881103515625,267.02040100097656],[128.51473999023438,265.2040710449219],[122.39228820800781,631.7142944335938],[402.984130859375,631.9183349609375],[403.31944274902344,602]],\"color\":\"#ff0000\",\"start\":{\"id\":1592276283186,\"keyName\":\"UltrasonicSensor\",\"pid\":0,\"isSoldered\":false},\"end\":{\"id\":1592276266793,\"keyName\":\"ArduinoUno\",\"pid\":18,\"isSoldered\":false}},{\"id\":1629376980954,\"points\":[[401.71881103515625,267.02040100097656],[595.5147094726562,263.6071472167969],[595.4534912109375,630.5458984375],[416.1065673828125,634.5867309570312],[417.31944274902344,602]],\"color\":\"#000\",\"start\":{\"id\":1592276283186,\"keyName\":\"UltrasonicSensor\",\"pid\":3,\"isSoldered\":false},\"end\":{\"id\":1592276266793,\"keyName\":\"ArduinoUno\",\"pid\":19,\"isSoldered\":false}},{\"id\":1629376980955,\"points\":[[379.71881103515625,267.02040100097656],[379.2902526855469,287.8163146972656],[446.5759582519531,289.83673095703125],[447.31944274902344,328]],\"color\":\"#e6a800\",\"start\":{\"id\":1592276283186,\"keyName\":\"UltrasonicSensor\",\"pid\":1,\"isSoldered\":false},\"end\":{\"id\":1592276266793,\"keyName\":\"ArduinoUno\",\"pid\":8,\"isSoldered\":false}},{\"id\":1629376980956,\"points\":[[391.71881103515625,267.02040100097656],[390.5147399902344,276.5918273925781],[460.8004455566406,276.5918273925781],[461.31944274902344,328]],\"color\":\"#31c404\",\"start\":{\"id\":1592276283186,\"keyName\":\"UltrasonicSensor\",\"pid\":2,\"isSoldered\":false},\"end\":{\"id\":1592276266793,\"keyName\":\"ArduinoUno\",\"pid\":9,\"isSoldered\":false}}],\"UltrasonicSensor\":[{\"x\":286.71881103515625,\"y\":185.02040100097656,\"tx\":1,\"ty\":-22,\"id\":1592276283186}],\"ArduinoUno\":[{\"x\":239.31944274902344,\"y\":356,\"tx\":-104,\"ty\":-58,\"id\":1592276266793,\"data\":{\"name\":\"Arduino UNO R3 1\",\"code\":\"const int pingPin = 7; // Trigger Pin of Ultrasonic Sensor\\nconst int echoPin = 6; // Echo Pin of Ultrasonic Sensor\\n\\nvoid setup() {\\n pinMode(pingPin, OUTPUT);\\n pinMode(echoPin, INPUT);\\n Serial.begin(9600); // Starting Serial Terminal\\n}\\n\\nvoid loop() {\\n long duration, inches, cm;\\n digitalWrite(pingPin, LOW);\\n delayMicroseconds(2);\\n digitalWrite(pingPin, HIGH);\\n delayMicroseconds(10);\\n digitalWrite(pingPin, LOW);\\n duration = pulseIn(echoPin, HIGH);\\n //Serial.println(duration);\\n// inches = microsecondsToInches(duration);\\n cm = duration / 29 / 2;\\n //Serial.print(inches);\\n //Serial.print(\\\"in, \\\");\\n Serial.print(cm);\\n Serial.print(\\\"cm\\\");\\n Serial.println();\\n delay(1000);\\n}\\n\\n// long microsecondsToInches(long microseconds) {\\n// return microseconds / 74 / 2;\\n// }\\n\\n// long microsecondsToCentimeters(long microseconds) {\\n// return microseconds / 29 / 2;\\n// }\"}}]}", "name": "Ultrasonic Sensor", "description": "", "media": "circuit_images_esim/2adef9fb-46e6-4475-b81b-e7103e4dfaaf.png", "shared": true, "save_time": "2021-08-19T12:43:03.075Z", "is_arduino": true, "esim_libraries": [] } }, { "model": "saveAPI.gallery", "pk": 76, "fields": { "save_id": "gallery15899.487483348885", "data_dump": "{\"canvas\":{\"x\":0.25,\"y\":0.25,\"scale\":1},\"wires\":[{\"id\":1629376986979,\"points\":[[780.75,155.75],[571.75,148.75],[577.75,412.75],[578.75,476.75],[414.75,479.75],[410.31944274902344,447]],\"color\":\"#000\",\"start\":{\"id\":1592405259001,\"keyName\":\"ServoMotor\",\"pid\":0,\"isSoldered\":false},\"end\":{\"id\":1592368525114,\"keyName\":\"ArduinoUno\",\"pid\":20,\"isSoldered\":false}},{\"id\":1629376986980,\"points\":[[796.75,155.75],[793.75,115.75],[987.75,115.75],[987.75,490.75],[384.75,499.75],[382.31944274902344,447]],\"color\":\"#ff0000\",\"start\":{\"id\":1592405259001,\"keyName\":\"ServoMotor\",\"pid\":1,\"isSoldered\":false},\"end\":{\"id\":1592368525114,\"keyName\":\"ArduinoUno\",\"pid\":18,\"isSoldered\":false}},{\"id\":1629376986981,\"points\":[[810.75,155.75],[810.75,71.75],[486.75,78.75],[482.31944274902344,173]],\"color\":\"#31c404\",\"start\":{\"id\":1592405259001,\"keyName\":\"ServoMotor\",\"pid\":2,\"isSoldered\":false},\"end\":{\"id\":1592368525114,\"keyName\":\"ArduinoUno\",\"pid\":12,\"isSoldered\":false}}],\"ServoMotor\":[{\"x\":657.75,\"y\":287.75,\"tx\":102,\"ty\":-142,\"id\":1592405259001}],\"ArduinoUno\":[{\"x\":172.31944274902344,\"y\":146,\"tx\":-58,\"ty\":-3,\"id\":1592368525114,\"data\":{\"name\":\"Arduino UNO R3 1\",\"code\":\"#include \\nServo myservo;\\nint pos = 0;\\n\\nvoid setup() {\\n myservo.attach(3);\\n}\\n\\nvoid loop() {\\n for (pos = 0; pos <= 180; pos += 1) {\\n myservo.write(pos);\\n delay(15);\\n }\\n for (pos = 180; pos >= 0; pos -= 1) {\\n myservo.write(pos);\\n delay(15);\\n }\\n}\\n\\n\"}}]}", "name": "Servo", "description": "", "media": "circuit_images_esim/e5f372fd-e8a5-4bec-83a3-c173c610c0c7.png", "shared": true, "save_time": "2021-08-19T12:43:09.432Z", "is_arduino": true, "esim_libraries": [] } }, { "model": "saveAPI.gallery", "pk": 77, "fields": { "save_id": "gallery84675.84436901534", "data_dump": "{\"canvas\":{\"x\":20.75,\"y\":116,\"scale\":0.9199999999999999},\"wires\":[{\"id\":1629376993982,\"points\":[[784.3194580078125,213],[789.3327026367188,499.9166564941406],[494.04107666015625,498.9999694824219],[497.3194580078125,424]],\"color\":\"#ff0000\",\"start\":{\"id\":1592204238583,\"keyName\":\"SlideSwitch\",\"pid\":1,\"isSoldered\":false},\"end\":{\"id\":1592204233256,\"keyName\":\"ArduinoUno\",\"pid\":18,\"isSoldered\":false}},{\"id\":1629376993983,\"points\":[[801.3194580078125,213],[845.1243896484375,209.37498474121094],[839.9160766601562,76.04166412353516],[541.4577026367188,73.375],[541.3194580078125,150]],\"color\":\"#31c404\",\"start\":{\"id\":1592204238583,\"keyName\":\"SlideSwitch\",\"pid\":2,\"isSoldered\":false},\"end\":{\"id\":1592204233256,\"keyName\":\"ArduinoUno\",\"pid\":8,\"isSoldered\":false}},{\"id\":1629376993984,\"points\":[[766.3194580078125,213],[715.9577026367188,211.4583282470703],[715.9577026367188,104.16666412353516],[556.7910766601562,102.16666412353516],[555.3194580078125,150]],\"color\":\"#e6a800\",\"start\":{\"id\":1592204238583,\"keyName\":\"SlideSwitch\",\"pid\":0,\"isSoldered\":false},\"end\":{\"id\":1592204233256,\"keyName\":\"ArduinoUno\",\"pid\":9,\"isSoldered\":false}},{\"id\":1629376993985,\"points\":[[530.7910766601562,40.41666126251221],[511.3194580078125,424]],\"color\":\"#000\",\"start\":{\"id\":1592204398406,\"keyName\":\"LED\",\"pid\":1,\"isSoldered\":false},\"end\":{\"id\":1592204233256,\"keyName\":\"ArduinoUno\",\"pid\":19,\"isSoldered\":false}},{\"id\":1629377899882,\"points\":[[514.7910766601562,40.41666126251221],[503.3194580078125,150]],\"color\":\"#ff0000\",\"start\":{\"id\":1592204398406,\"keyName\":\"LED\",\"pid\":0,\"isSoldered\":false},\"end\":{\"id\":1592204233256,\"keyName\":\"ArduinoUno\",\"pid\":6,\"isSoldered\":false}},{\"id\":1629377209094,\"points\":[[446.6243896484375,100.95832824707031],[445.3194580078125,150]],\"color\":\"#ff0000\",\"start\":{\"id\":1592204396689,\"keyName\":\"LED\",\"pid\":0,\"isSoldered\":false},\"end\":{\"id\":1592204233256,\"keyName\":\"ArduinoUno\",\"pid\":2,\"isSoldered\":false}},{\"id\":1629376993986,\"points\":[[462.6243896484375,100.95832824707031],[490.8194580078125,100],[494.8194580078125,-10],[430.8194580078125,-9],[431.3194580078125,150]],\"color\":\"#000\",\"start\":{\"id\":1592204396689,\"keyName\":\"LED\",\"pid\":1,\"isSoldered\":false},\"end\":{\"id\":1592204233256,\"keyName\":\"ArduinoUno\",\"pid\":1,\"isSoldered\":false}}],\"SlideSwitch\":[{\"x\":798.3194580078125,\"y\":294,\"tx\":-39,\"ty\":-108,\"id\":1592204238583}],\"LED\":[{\"x\":429.6243896484375,\"y\":-19.041671752929688,\"tx\":28,\"ty\":52,\"id\":1592204396689,\"data\":{\"color\":0}},{\"x\":483.79107666015625,\"y\":-7.583338737487793,\"tx\":42,\"ty\":-20,\"id\":1592204398406,\"data\":{\"color\":1}}],\"ArduinoUno\":[{\"x\":328.3194580078125,\"y\":225,\"tx\":-99,\"ty\":-105,\"id\":1592204233256,\"data\":{\"name\":\"Arduino UNO R3 1\",\"code\":\"void setup(){\\n\\tpinMode(7, INPUT);\\n pinMode(6, INPUT);\\n pinMode(9, OUTPUT);\\n pinMode(13, OUTPUT);\\n}\\n\\nvoid loop(){\\n\\tif(digitalRead(7) == HIGH){\\n digitalWrite(13, HIGH);\\n digitalWrite(9, LOW);\\n }\\n if(digitalRead(6) == HIGH){\\n digitalWrite(13, LOW);\\n digitalWrite(9, HIGH);\\n }\\n}\"}}]}", "name": "Slide Switch", "description": "", "media": "circuit_images_esim/f74da15e-68f9-444a-9752-45586f06e52f.png", "shared": true, "save_time": "2021-08-19T12:43:15.798Z", "is_arduino": true, "esim_libraries": [] } }, { "model": "saveAPI.gallery", "pk": 78, "fields": { "save_id": "gallery90680.1790733519", "data_dump": "{\"canvas\":{\"x\":7,\"y\":162.25,\"scale\":0.9199999999999999},\"wires\":[{\"id\":1629377000326,\"points\":[[390.3194580078125,340],[386.66607666015625,576.2916259765625],[739.3743896484375,569.375],[737.3194580078125,526]],\"color\":\"#ff0000\",\"start\":{\"id\":1592274709494,\"keyName\":\"RelayModule\",\"pid\":4,\"isSoldered\":false},\"end\":{\"id\":1592274680021,\"keyName\":\"ArduinoUno\",\"pid\":18,\"isSoldered\":false}},{\"id\":1629377000330,\"points\":[[406.3194580078125,340],[467.79107666015625,338.6666564941406],[469.8743896484375,209.5],[669.8743896484375,208.4583282470703],[671.3194580078125,252]],\"color\":\"#000\",\"start\":{\"id\":1592274709494,\"keyName\":\"RelayModule\",\"pid\":5,\"isSoldered\":false},\"end\":{\"id\":1592274680021,\"keyName\":\"ArduinoUno\",\"pid\":1,\"isSoldered\":false}},{\"id\":1629377000336,\"points\":[[376.3194580078125,340],[372.65155029296875,436.9456481933594],[452.2167663574219,436.0325927734375],[455.65155029296875,188.68478393554688],[685.1732788085938,185.68478393554688],[685.3194580078125,252]],\"color\":\"#31c404\",\"start\":{\"id\":1592274709494,\"keyName\":\"RelayModule\",\"pid\":3,\"isSoldered\":false},\"end\":{\"id\":1592274680021,\"keyName\":\"ArduinoUno\",\"pid\":2,\"isSoldered\":false}},{\"id\":1629377000347,\"points\":[[403.3194580078125,161],[563.7493896484375,156.22825622558594],[565.9232788085938,93.18477630615234],[581.7928466796875,91.88043022155762]],\"color\":\"#000\",\"start\":{\"id\":1592274709494,\"keyName\":\"RelayModule\",\"pid\":2,\"isSoldered\":false},\"end\":{\"id\":1592274925181,\"keyName\":\"Battery9v\",\"pid\":1,\"isSoldered\":false}},{\"id\":1629377000351,\"points\":[[380.0537414550781,75.09782218933105],[378.3194580078125,161]],\"color\":\"#e6a800\",\"start\":{\"id\":1592274941280,\"keyName\":\"LED\",\"pid\":1,\"isSoldered\":false},\"end\":{\"id\":1592274709494,\"keyName\":\"RelayModule\",\"pid\":1,\"isSoldered\":false}},{\"id\":1629377000352,\"points\":[[364.0537414550781,75.09782218933105],[317.26025390625,74.70651245117188],[317.26025390625,-37.250003814697266],[554.216796875,-39.42391586303711],[555.3037109375,52.967384338378906],[581.7928466796875,49.88043022155762]],\"color\":\"#ff0000\",\"start\":{\"id\":1592274941280,\"keyName\":\"LED\",\"pid\":0,\"isSoldered\":false},\"end\":{\"id\":1592274925181,\"keyName\":\"Battery9v\",\"pid\":0,\"isSoldered\":false}}],\"RelayModule\":[{\"x\":267.3194580078125,\"y\":208,\"tx\":50,\"ty\":-70,\"id\":1592274709494}],\"LED\":[{\"x\":380.0537414550781,\"y\":-7.902177810668945,\"tx\":-5,\"ty\":15,\"id\":1592274941280,\"data\":{\"color\":0}}],\"ArduinoUno\":[{\"x\":449.3194580078125,\"y\":217,\"tx\":20,\"ty\":5,\"id\":1592274680021,\"data\":{\"name\":\"Arduino UNO R3 1\",\"code\":\"void setup(){\\n\\tpinMode(LED_BUILTIN, OUTPUT);\\n}\\n\\nvoid loop(){\\n\\tdigitalWrite(LED_BUILTIN, HIGH);\\n delay(1000);\\n\\tdigitalWrite(LED_BUILTIN, LOW);\\n delay(1000);\\n}\"}}],\"Battery9v\":[{\"x\":601.7928466796875,\"y\":-23.119569778442383,\"tx\":-20,\"ty\":42,\"id\":1592274925181}]}", "name": "Relay", "description": "", "media": "circuit_images_esim/bea043fe-f562-4bfa-9fb0-d3e6157de51b.png", "shared": true, "save_time": "2021-08-19T12:43:22.235Z", "is_arduino": true, "esim_libraries": [] } }, { "model": "saveAPI.gallery", "pk": 79, "fields": { "save_id": "gallery76671.1469377743", "data_dump": "{\"canvas\":{\"x\":-113.25,\"y\":54,\"scale\":1.1800000000000002},\"wires\":[{\"id\":1629377005771,\"points\":[[336.375,213],[336.375,271]],\"color\":\"#ff0000\",\"start\":{\"id\":1593176474698,\"keyName\":\"LED\",\"pid\":0,\"isSoldered\":false},\"end\":{\"id\":1593176471875,\"keyName\":\"ArduinoUno\",\"pid\":2,\"isSoldered\":false}},{\"id\":1629377005772,\"points\":[[352.375,213],[369.375,214],[621.375,216],[614.375,608],[416.375,611],[416.375,545]],\"color\":\"#000\",\"start\":{\"id\":1593176474698,\"keyName\":\"LED\",\"pid\":1,\"isSoldered\":false},\"end\":{\"id\":1593176471875,\"keyName\":\"ArduinoUno\",\"pid\":20,\"isSoldered\":false}},{\"id\":1629377005773,\"points\":[[973,229],[973.375,268]],\"color\":\"#ff0000\",\"start\":{\"id\":1593176480662,\"keyName\":\"LED\",\"pid\":0,\"isSoldered\":false},\"end\":{\"id\":1593176476626,\"keyName\":\"ArduinoUno\",\"pid\":3,\"isSoldered\":false}},{\"id\":1629377005774,\"points\":[[989,229],[1216.375,233],[1222.375,573],[1041.375,573],[1039.375,542]],\"color\":\"#000\",\"start\":{\"id\":1593176480662,\"keyName\":\"LED\",\"pid\":1,\"isSoldered\":false},\"end\":{\"id\":1593176476626,\"keyName\":\"ArduinoUno\",\"pid\":20,\"isSoldered\":false}}],\"LED\":[{\"x\":363.375,\"y\":146,\"tx\":-16,\"ty\":-1,\"id\":1593176474698,\"data\":{\"color\":4}},{\"x\":100,\"y\":100,\"tx\":884,\"ty\":61,\"id\":1593176480662,\"data\":{\"color\":1}}],\"ArduinoUno\":[{\"x\":135.375,\"y\":237,\"tx\":-15,\"ty\":4,\"id\":1593176471875,\"data\":{\"name\":\"Arduino UNO R3 1\",\"code\":\"void setup(){\\n\\tpinMode(LED_BUILTIN, OUTPUT);\\n}\\n\\nvoid loop(){\\n\\tdigitalWrite(LED_BUILTIN, HIGH);\\n delay(1000);\\n\\tdigitalWrite(LED_BUILTIN, LOW);\\n delay(1000);\\n}\"}},{\"x\":939.375,\"y\":338,\"tx\":-196,\"ty\":-100,\"id\":1593176476626,\"data\":{\"name\":\"Arduino UNO R3 2\",\"code\":\"void setup(){\\n\\tpinMode(12, OUTPUT);\\n}\\n\\nvoid loop(){\\n\\tdigitalWrite(12, HIGH);\\n delay(300);\\n\\tdigitalWrite(12, LOW);\\n delay(300);\\n}\"}}]}", "name": "Two Arduinos", "description": "", "media": "circuit_images_esim/bf698ecf-23c6-4a50-8316-fc7f0c0ca2e0.png", "shared": true, "save_time": "2021-08-19T12:43:27.335Z", "is_arduino": true, "esim_libraries": [] } }, { "model": "saveAPI.gallery", "pk": 80, "fields": { "save_id": "gallery25181.655192793605", "data_dump": "{\"canvas\":{\"x\":-355.25,\"y\":-3,\"scale\":1},\"wires\":[{\"id\":1629377011381,\"points\":[[659.375,179],[656.375,273]],\"color\":\"#ff0000\",\"start\":{\"id\":1593183905780,\"keyName\":\"LED\",\"pid\":0,\"isSoldered\":false},\"end\":{\"id\":1593183899067,\"keyName\":\"ArduinoUno\",\"pid\":3,\"isSoldered\":false}},{\"id\":1629377011382,\"points\":[[675.375,179],[947.375,179],[956.375,611],[719.375,610],[722.375,547]],\"color\":\"#000\",\"start\":{\"id\":1593183905780,\"keyName\":\"LED\",\"pid\":1,\"isSoldered\":false},\"end\":{\"id\":1593183899067,\"keyName\":\"ArduinoUno\",\"pid\":20,\"isSoldered\":false}}],\"Label\":[{\"x\":1084.375,\"y\":183,\"tx\":-59,\"ty\":2,\"id\":1593184554578,\"data\":{\"text\":\"Note\",\"size\":58,\"color\":\"#ff0000\",\"weight\":\"Bold\",\"style\":\"normal\"}},{\"x\":1059.625,\"y\":254,\"tx\":197,\"ty\":-18,\"id\":1593184582898,\"data\":{\"text\":\"Send G to Glow LED and any other alphabet to stop the glow.\",\"size\":23,\"color\":\"#000000\",\"weight\":\"normal\",\"style\":\"normal\"}}],\"LED\":[{\"x\":665.375,\"y\":186,\"tx\":5,\"ty\":-75,\"id\":1593183905780,\"data\":{\"color\":4}}],\"ArduinoUno\":[{\"x\":443.375,\"y\":277,\"tx\":-17,\"ty\":-34,\"id\":1593183899067,\"data\":{\"name\":\"Arduino UNO R3 1\",\"code\":\"void setup(){\\n Serial.begin(9600);\\n\\tpinMode(12, OUTPUT);\\n}\\n\\nvoid loop(){\\n if(Serial.available() > 0){\\n char c = Serial.read();\\n if(c == 'G')\\n \\tdigitalWrite(12, HIGH);\\n else\\n \\tdigitalWrite(12, LOW);\\n }\\n}\"}}]}", "name": "Play With Serial Input", "description": "", "media": "circuit_images_esim/eb60f293-b44f-4498-8337-9246ca6da3a0.png", "shared": true, "save_time": "2021-08-19T12:43:33.252Z", "is_arduino": true, "esim_libraries": [] } }, { "model": "saveAPI.gallery", "pk": 81, "fields": { "save_id": "gallery83044.73404901609", "data_dump": "{\"canvas\":{\"x\":34.75,\"y\":60.25,\"scale\":1.04},\"wires\":[{\"id\":1629377022651,\"points\":[[158.2432403564453,180.05404663085938],[158.6666717529297,200.44444274902344]],\"color\":\"#000\",\"start\":{\"id\":1592897349163,\"keyName\":\"Motor\",\"pid\":0,\"isSoldered\":false},\"end\":{\"id\":1592897236003,\"keyName\":\"L298N\",\"pid\":6,\"isSoldered\":false}},{\"id\":1629377022652,\"points\":[[174.2432403564453,180.05404663085938],[171.6666717529297,200.44444274902344]],\"color\":\"#31c404\",\"start\":{\"id\":1592897349163,\"keyName\":\"Motor\",\"pid\":1,\"isSoldered\":false},\"end\":{\"id\":1592897236003,\"keyName\":\"L298N\",\"pid\":7,\"isSoldered\":false}},{\"id\":1629377360040,\"points\":[[56.59459686279297,288.70269775390625],[175,292.1071472167969],[173.6666717529297,314.44444274902344]],\"color\":\"#31c404\",\"start\":{\"id\":1592897371331,\"keyName\":\"Motor\",\"pid\":1,\"isSoldered\":false},\"end\":{\"id\":1592897236003,\"keyName\":\"L298N\",\"pid\":9,\"isSoldered\":false}},{\"id\":1629377418728,\"points\":[[40.59459686279297,288.70269775390625],[41.11111068725586,318.297607421875],[161.6666717529297,314.44444274902344]],\"color\":\"#000\",\"start\":{\"id\":1592897371331,\"keyName\":\"Motor\",\"pid\":0,\"isSoldered\":false},\"end\":{\"id\":1592897236003,\"keyName\":\"L298N\",\"pid\":8,\"isSoldered\":false}},{\"id\":1629377022653,\"points\":[[202.375,527.5],[204.6666717529297,294.44444274902344]],\"color\":\"#ff0000\",\"start\":{\"id\":1593055552928,\"keyName\":\"Battery9v\",\"pid\":0,\"isSoldered\":false},\"end\":{\"id\":1592897236003,\"keyName\":\"L298N\",\"pid\":11,\"isSoldered\":false}},{\"id\":1629377943845,\"points\":[[596.3783874511719,431.0810852050781],[597.477294921875,462.1590881347656],[822.375,460.5]],\"color\":\"#000\",\"start\":{\"id\":1592897315035,\"keyName\":\"ArduinoUno\",\"pid\":20,\"isSoldered\":false},\"end\":{\"id\":1593055525879,\"keyName\":\"BreadBoard\",\"pid\":3,\"isSoldered\":false}},{\"id\":1629377022654,\"points\":[[204.6666717529297,284.44444274902344],[263.0227355957031,285.1590881347656],[265.0227355957031,488.3863525390625],[839.3409423828125,493.8409118652344],[837.375,460.5]],\"color\":\"#000\",\"start\":{\"id\":1592897236003,\"keyName\":\"L298N\",\"pid\":12,\"isSoldered\":false},\"end\":{\"id\":1593055525879,\"keyName\":\"BreadBoard\",\"pid\":7,\"isSoldered\":false}},{\"id\":1629377070794,\"points\":[[202.375,569.5],[166.15908813476562,571.25],[166.15908813476562,639.4318237304688],[883.2045288085938,645.1136474609375],[867.375,460.5]],\"color\":\"#000\",\"start\":{\"id\":1593055552928,\"keyName\":\"Battery9v\",\"pid\":1,\"isSoldered\":false},\"end\":{\"id\":1593055525879,\"keyName\":\"BreadBoard\",\"pid\":15,\"isSoldered\":false}},{\"id\":1629377022655,\"points\":[[207.6666717529297,206.44444274902344],[211.61363220214844,52.477272033691406],[669.79541015625,49.749996185302734],[668.3783874511719,157.08108520507812]],\"color\":\"#31c404\",\"start\":{\"id\":1592897236003,\"keyName\":\"L298N\",\"pid\":0,\"isSoldered\":false},\"end\":{\"id\":1592897315035,\"keyName\":\"ArduinoUno\",\"pid\":12,\"isSoldered\":false}},{\"id\":1629377022656,\"points\":[[207.6666717529297,256.44444274902344],[308.646240234375,256.73114013671875],[308.646240234375,135.0330352783203],[575.6273803710938,135.0330352783203],[574.3783874511719,157.08108520507812]],\"color\":\"#e6a800\",\"start\":{\"id\":1592897236003,\"keyName\":\"L298N\",\"pid\":5,\"isSoldered\":false},\"end\":{\"id\":1592897315035,\"keyName\":\"ArduinoUno\",\"pid\":6,\"isSoldered\":false}},{\"id\":1629377195522,\"points\":[[207.6666717529297,246.44444274902344],[300.1556701660156,248.24058532714844],[300.1556701660156,126.54246520996094],[586.6651000976562,127.76887512207031],[588.3783874511719,157.08108520507812]],\"color\":\"#2593fa\",\"start\":{\"id\":1592897236003,\"keyName\":\"L298N\",\"pid\":4,\"isSoldered\":false},\"end\":{\"id\":1592897315035,\"keyName\":\"ArduinoUno\",\"pid\":7,\"isSoldered\":false}},{\"id\":1629377022657,\"points\":[[207.6666717529297,236.44444274902344],[291.66510009765625,240.6934051513672],[291.66510009765625,116.16510009765625],[612.4764404296875,117.27831268310547],[612.3783874511719,157.08108520507812]],\"color\":\"#31c404\",\"start\":{\"id\":1592897236003,\"keyName\":\"L298N\",\"pid\":3,\"isSoldered\":false},\"end\":{\"id\":1592897315035,\"keyName\":\"ArduinoUno\",\"pid\":8,\"isSoldered\":false}},{\"id\":1629377022658,\"points\":[[207.6666717529297,226.44444274902344],[284.1179504394531,231.2594451904297],[284.1179504394531,104.84434509277344],[626.57080078125,105.7877426147461],[626.3783874511719,157.08108520507812]],\"color\":\"#e6a800\",\"start\":{\"id\":1592897236003,\"keyName\":\"L298N\",\"pid\":2,\"isSoldered\":false},\"end\":{\"id\":1592897315035,\"keyName\":\"ArduinoUno\",\"pid\":9,\"isSoldered\":false}},{\"id\":1629377206808,\"points\":[[207.6666717529297,216.44444274902344],[272.0235900878906,215.05189514160156],[273.7405700683594,86.9198226928711],[639.6085205078125,89.69340515136719],[640.3783874511719,157.08108520507812]],\"color\":\"#2593fa\",\"start\":{\"id\":1592897236003,\"keyName\":\"L298N\",\"pid\":1,\"isSoldered\":false},\"end\":{\"id\":1592897315035,\"keyName\":\"ArduinoUno\",\"pid\":10,\"isSoldered\":false}}],\"BreadBoard\":[{\"x\":807.375,\"y\":127.5,\"tx\":-4,\"ty\":26,\"id\":1593055525879}],\"L298N\":[{\"x\":156.6666717529297,\"y\":214.44444274902344,\"tx\":-71,\"ty\":-21,\"id\":1592897236003}],\"Motor\":[{\"x\":143.2432403564453,\"y\":129.05404663085938,\"tx\":-13,\"ty\":-4,\"id\":1592897349163},{\"x\":119.59459686279297,\"y\":352.70269775390625,\"tx\":-107,\"ty\":-119,\"id\":1592897371331}],\"ArduinoUno\":[{\"x\":378.3783874511719,\"y\":206.08108520507812,\"tx\":-78,\"ty\":-79,\"id\":1592897315035,\"data\":{\"name\":\"Arduino UNO R3 1\",\"code\":\"void setup(){\\n Serial.begin(9600);\\n pinMode(3, OUTPUT);\\n\\tpinMode(5, OUTPUT);\\n\\tpinMode(6, OUTPUT);\\n\\tpinMode(7, OUTPUT);\\n\\tpinMode(8, OUTPUT);\\n\\tpinMode(9, OUTPUT);\\n analogWrite(3, 127);\\n analogWrite(9, 127);\\n}\\nvoid loop(){\\n\\tif(Serial.available() > 0){\\n char ch = Serial.read();\\n Serial.println(ch);\\n if(ch == 'w'){\\n // Move Forward\\n digitalWrite(5, LOW);\\n digitalWrite(6, HIGH);\\n digitalWrite(7, LOW);\\n digitalWrite(8, HIGH);\\n }else if(ch == 's'){\\n // Move Backward\\n digitalWrite(5, HIGH);\\n digitalWrite(6, LOW);\\n digitalWrite(7, HIGH);\\n digitalWrite(8, LOW);\\n }else if(ch == 'a'){\\n // Move Left\\n digitalWrite(5, LOW);\\n digitalWrite(6, HIGH);\\n digitalWrite(7, LOW);\\n digitalWrite(8, LOW);\\n }else if(ch == 'd'){\\n // Move Right\\n digitalWrite(5, LOW);\\n digitalWrite(6, LOW);\\n digitalWrite(7, LOW);\\n digitalWrite(8, HIGH);\\n }\\n }\\n}\"}}],\"Battery9v\":[{\"x\":865.375,\"y\":610.5,\"tx\":-663,\"ty\":-114,\"id\":1593055552928}]}", "name": "Motor Driver", "description": "", "media": "circuit_images_esim/4a6be5e5-53fc-45e0-be75-db2caac61bef.png", "shared": true, "save_time": "2021-08-19T12:43:44.617Z", "is_arduino": true, "esim_libraries": [] } }, { "model": "saveAPI.gallery", "pk": 82, "fields": { "save_id": "gallery773.1863667196582", "data_dump": "{\"canvas\":{\"x\":1,\"y\":12.5,\"scale\":1},\"wires\":[{\"id\":1629377028619,\"points\":[[427.375,521],[429.375,583],[656.375,584],[658.375,516]],\"color\":\"#000\",\"start\":{\"id\":1593530174651,\"keyName\":\"ArduinoUno\",\"pid\":20,\"isSoldered\":false},\"end\":{\"id\":1593530197683,\"keyName\":\"BreadBoard\",\"pid\":3,\"isSoldered\":false}},{\"id\":1629377028621,\"points\":[[688.375,244],[688.375,516]],\"color\":\"#000\",\"start\":{\"id\":1593530226379,\"keyName\":\"LED\",\"pid\":1,\"isSoldered\":false},\"end\":{\"id\":1593530197683,\"keyName\":\"BreadBoard\",\"pid\":11,\"isSoldered\":false}},{\"id\":1629377880995,\"points\":[[672.375,244],[673.375,246]],\"color\":\"#000\",\"start\":{\"id\":1593530226379,\"keyName\":\"LED\",\"pid\":0,\"isSoldered\":false},\"end\":{\"id\":1593530197683,\"keyName\":\"BreadBoard\",\"pid\":5,\"isSoldered\":false}},{\"id\":1629377665376,\"points\":[[703.375,245],[703.375,246]],\"color\":\"#000\",\"start\":{\"id\":1593530229859,\"keyName\":\"LED\",\"pid\":0,\"isSoldered\":false},\"end\":{\"id\":1593530197683,\"keyName\":\"BreadBoard\",\"pid\":13,\"isSoldered\":false}},{\"id\":1629377028622,\"points\":[[719.375,245],[718.375,516]],\"color\":\"#000\",\"start\":{\"id\":1593530229859,\"keyName\":\"LED\",\"pid\":1,\"isSoldered\":false},\"end\":{\"id\":1593530197683,\"keyName\":\"BreadBoard\",\"pid\":19,\"isSoldered\":false}},{\"id\":1629377394754,\"points\":[[749.375,246],[751.375,246]],\"color\":\"#000\",\"start\":{\"id\":1593530234619,\"keyName\":\"LED\",\"pid\":0,\"isSoldered\":false},\"end\":{\"id\":1593530197683,\"keyName\":\"BreadBoard\",\"pid\":21,\"isSoldered\":false}},{\"id\":1629377719373,\"points\":[[765.375,246],[766.375,516]],\"color\":\"#000\",\"start\":{\"id\":1593530234619,\"keyName\":\"LED\",\"pid\":1,\"isSoldered\":false},\"end\":{\"id\":1593530197683,\"keyName\":\"BreadBoard\",\"pid\":27,\"isSoldered\":false}},{\"id\":1629377028623,\"points\":[[779.625,242.5],[781.375,246]],\"color\":\"#000\",\"start\":{\"id\":1593530303771,\"keyName\":\"LED\",\"pid\":0,\"isSoldered\":false},\"end\":{\"id\":1593530197683,\"keyName\":\"BreadBoard\",\"pid\":29,\"isSoldered\":false}},{\"id\":1629377921877,\"points\":[[795.625,242.5],[796.375,516]],\"color\":\"#000\",\"start\":{\"id\":1593530303771,\"keyName\":\"LED\",\"pid\":1,\"isSoldered\":false},\"end\":{\"id\":1593530197683,\"keyName\":\"BreadBoard\",\"pid\":35,\"isSoldered\":false}},{\"id\":1629377122274,\"points\":[[485.375,247],[493.625,171.5],[601.625,170.5],[602.625,250.5],[658.375,246]],\"color\":\"#ff0000\",\"start\":{\"id\":1593530174651,\"keyName\":\"ArduinoUno\",\"pid\":11,\"isSoldered\":false},\"end\":{\"id\":1593530197683,\"keyName\":\"BreadBoard\",\"pid\":1,\"isSoldered\":false}},{\"id\":1629377028624,\"points\":[[843.625,244.5],[844.375,246]],\"color\":\"#000\",\"start\":{\"id\":1593530333499,\"keyName\":\"LED\",\"pid\":0,\"isSoldered\":false},\"end\":{\"id\":1593530197683,\"keyName\":\"BreadBoard\",\"pid\":41,\"isSoldered\":false}},{\"id\":1629377998054,\"points\":[[859.625,244.5],[859.375,516]],\"color\":\"#000\",\"start\":{\"id\":1593530333499,\"keyName\":\"LED\",\"pid\":1,\"isSoldered\":false},\"end\":{\"id\":1593530197683,\"keyName\":\"BreadBoard\",\"pid\":47,\"isSoldered\":false}},{\"id\":1629377028625,\"points\":[[875.625,244.5],[874.375,246]],\"color\":\"#000\",\"start\":{\"id\":1593530382683,\"keyName\":\"LED\",\"pid\":0,\"isSoldered\":false},\"end\":{\"id\":1593530197683,\"keyName\":\"BreadBoard\",\"pid\":49,\"isSoldered\":false}},{\"id\":1629377120478,\"points\":[[891.625,244.5],[889.375,516]],\"color\":\"#000\",\"start\":{\"id\":1593530382683,\"keyName\":\"LED\",\"pid\":1,\"isSoldered\":false},\"end\":{\"id\":1593530197683,\"keyName\":\"BreadBoard\",\"pid\":55,\"isSoldered\":false}},{\"id\":1629377028626,\"points\":[[951.625,243.5],[952.375,246]],\"color\":\"#000\",\"start\":{\"id\":1593530403714,\"keyName\":\"LED\",\"pid\":0,\"isSoldered\":false},\"end\":{\"id\":1593530197683,\"keyName\":\"BreadBoard\",\"pid\":65,\"isSoldered\":false}},{\"id\":1629377286079,\"points\":[[967.625,243.5],[967.375,516]],\"color\":\"#000\",\"start\":{\"id\":1593530403714,\"keyName\":\"LED\",\"pid\":1,\"isSoldered\":false},\"end\":{\"id\":1593530197683,\"keyName\":\"BreadBoard\",\"pid\":71,\"isSoldered\":false}},{\"id\":1629377681646,\"points\":[[982.625,243.5],[982.375,246]],\"color\":\"#000\",\"start\":{\"id\":1593530416251,\"keyName\":\"LED\",\"pid\":0,\"isSoldered\":false},\"end\":{\"id\":1593530197683,\"keyName\":\"BreadBoard\",\"pid\":73,\"isSoldered\":false}},{\"id\":1629377578171,\"points\":[[998.625,243.5],[997.375,516]],\"color\":\"#000\",\"start\":{\"id\":1593530416251,\"keyName\":\"LED\",\"pid\":1,\"isSoldered\":false},\"end\":{\"id\":1593530197683,\"keyName\":\"BreadBoard\",\"pid\":79,\"isSoldered\":false}},{\"id\":1629377028627,\"points\":[[1045.625,242.5],[1045.375,246]],\"color\":\"#000\",\"start\":{\"id\":1593530441994,\"keyName\":\"LED\",\"pid\":0,\"isSoldered\":false},\"end\":{\"id\":1593530197683,\"keyName\":\"BreadBoard\",\"pid\":85,\"isSoldered\":false}},{\"id\":1629377787949,\"points\":[[1061.625,242.5],[1060.375,516]],\"color\":\"#000\",\"start\":{\"id\":1593530441994,\"keyName\":\"LED\",\"pid\":1,\"isSoldered\":false},\"end\":{\"id\":1593530197683,\"keyName\":\"BreadBoard\",\"pid\":91,\"isSoldered\":false}},{\"id\":1629377863422,\"points\":[[1073.625,242.5],[1075.375,246]],\"color\":\"#000\",\"start\":{\"id\":1593530458634,\"keyName\":\"LED\",\"pid\":0,\"isSoldered\":false},\"end\":{\"id\":1593530197683,\"keyName\":\"BreadBoard\",\"pid\":93,\"isSoldered\":false}},{\"id\":1629377028628,\"points\":[[1089.625,242.5],[1090.375,516]],\"color\":\"#000\",\"start\":{\"id\":1593530458634,\"keyName\":\"LED\",\"pid\":1,\"isSoldered\":false},\"end\":{\"id\":1593530197683,\"keyName\":\"BreadBoard\",\"pid\":99,\"isSoldered\":false}}],\"BreadBoard\":[{\"x\":794.375,\"y\":282,\"tx\":-155,\"ty\":-73,\"id\":1593530197683}],\"LED\":[{\"x\":711.375,\"y\":147,\"tx\":-28,\"ty\":29,\"id\":1593530226379,\"data\":{\"color\":0}},{\"x\":761.375,\"y\":133,\"tx\":-47,\"ty\":44,\"id\":1593530229859,\"data\":{\"color\":4}},{\"x\":799.375,\"y\":145,\"tx\":-39,\"ty\":33,\"id\":1593530234619,\"data\":{\"color\":1}},{\"x\":844.625,\"y\":160.5,\"tx\":-54,\"ty\":14,\"id\":1593530303771,\"data\":{\"color\":2}},{\"x\":854.625,\"y\":135.5,\"tx\":0,\"ty\":41,\"id\":1593530333499,\"data\":{\"color\":3}},{\"x\":900.625,\"y\":159.5,\"tx\":-14,\"ty\":17,\"id\":1593530382683,\"data\":{\"color\":4}},{\"x\":923.625,\"y\":153.5,\"tx\":39,\"ty\":22,\"id\":1593530403714,\"data\":{\"color\":5}},{\"x\":1007.625,\"y\":160.5,\"tx\":-14,\"ty\":15,\"id\":1593530416251,\"data\":{\"color\":0}},{\"x\":1078.625,\"y\":167.5,\"tx\":-22,\"ty\":7,\"id\":1593530441994,\"data\":{\"color\":1}},{\"x\":1098.625,\"y\":194.5,\"tx\":-14,\"ty\":-20,\"id\":1593530458634,\"data\":{\"color\":3}}],\"ArduinoUno\":[{\"x\":369.375,\"y\":340,\"tx\":-238,\"ty\":-123,\"id\":1593530174651,\"data\":{\"name\":\"Arduino UNO R3 1\",\"code\":\"void setup(){\\n\\tpinMode(4, OUTPUT);\\n}\\n\\nvoid loop(){\\n\\tdigitalWrite(4, HIGH);\\n delay(1000);\\n\\tdigitalWrite(4, LOW);\\n delay(1000);\\n}\"}}]}", "name": "Blink With BreadBoard.", "description": "", "media": "circuit_images_esim/e096ee40-16e8-4eeb-9521-1f9b5dbf5529.png", "shared": true, "save_time": "2021-08-19T12:43:50.295Z", "is_arduino": true, "esim_libraries": [] } }, { "model": "saveAPI.gallery", "pk": 83, "fields": { "save_id": "gallery10147.571337596828", "data_dump": "{\"canvas\":{\"x\":0,\"y\":0,\"scale\":1},\"wires\":[{\"id\":1629377036255,\"points\":[[441.53125,417],[442.53125,507],[723.53125,508],[722.53125,160],[753.53125,159]],\"color\":\"#ff0000\",\"start\":{\"id\":1593795977808,\"keyName\":\"ArduinoUno\",\"pid\":18,\"isSoldered\":false},\"end\":{\"id\":1593795986033,\"keyName\":\"BreadBoard\",\"pid\":1,\"isSoldered\":false}},{\"id\":1629377036257,\"points\":[[469.53125,417],[471.53125,492],[691.53125,492],[663.93125,94.025]],\"color\":\"#000\",\"start\":{\"id\":1593795977808,\"keyName\":\"ArduinoUno\",\"pid\":20,\"isSoldered\":false},\"end\":{\"id\":1593796000275,\"keyName\":\"PotentioMeter\",\"pid\":2,\"isSoldered\":false}},{\"id\":1629377036258,\"points\":[[649.73125,94.025],[669.53125,472],[512.53125,474],[513.53125,417]],\"color\":\"#31c404\",\"start\":{\"id\":1593796000275,\"keyName\":\"PotentioMeter\",\"pid\":1,\"isSoldered\":false},\"end\":{\"id\":1593795977808,\"keyName\":\"ArduinoUno\",\"pid\":22,\"isSoldered\":false}},{\"id\":1629377949140,\"points\":[[635.03125,94.025],[645.53125,179],[768.53125,180],[768.53125,159]],\"color\":\"#ff0000\",\"start\":{\"id\":1593796000275,\"keyName\":\"PotentioMeter\",\"pid\":0,\"isSoldered\":false},\"end\":{\"id\":1593795986033,\"keyName\":\"BreadBoard\",\"pid\":5,\"isSoldered\":false}},{\"id\":1629377036259,\"points\":[[108.53125,219],[107.53125,10],[784.53125,9],[783.53125,159]],\"color\":\"#ff0000\",\"start\":{\"id\":1593796008196,\"keyName\":\"ServoMotor\",\"pid\":1,\"isSoldered\":false},\"end\":{\"id\":1593795986033,\"keyName\":\"BreadBoard\",\"pid\":9,\"isSoldered\":false}},{\"id\":1629377036260,\"points\":[[122.53125,219],[121.53125,66],[448.53125,68],[447.53125,143]],\"color\":\"#e6a800\",\"start\":{\"id\":1593796008196,\"keyName\":\"ServoMotor\",\"pid\":2,\"isSoldered\":false},\"end\":{\"id\":1593795977808,\"keyName\":\"ArduinoUno\",\"pid\":6,\"isSoldered\":false}},{\"id\":1629377036261,\"points\":[[92.53125,219],[91.53125,193],[29.53125,193],[35.53125,534],[457.53125,542],[455.53125,417]],\"color\":\"#000\",\"start\":{\"id\":1593796008196,\"keyName\":\"ServoMotor\",\"pid\":0,\"isSoldered\":false},\"end\":{\"id\":1593795977808,\"keyName\":\"ArduinoUno\",\"pid\":19,\"isSoldered\":false}}],\"BreadBoard\":[{\"x\":419.53125,\"y\":195,\"tx\":315,\"ty\":-73,\"id\":1593795986033}],\"ServoMotor\":[{\"x\":76.53125,\"y\":346,\"tx\":-5,\"ty\":-137,\"id\":1593796008196}],\"PotentioMeter\":[{\"x\":641.53125,\"y\":55,\"tx\":-27,\"ty\":-40,\"id\":1593796000275,\"data\":{\"value\":0}}],\"ArduinoUno\":[{\"x\":369.53125,\"y\":288,\"tx\":-196,\"ty\":-175,\"id\":1593795977808,\"data\":{\"name\":\"Arduino UNO R3 1\",\"code\":\"#include \\n\\nServo myServo; // create servo object to control a servo\\n\\nvoid setup() {\\n // initialize serial communication at 9600 bits per second:\\n Serial.begin(9600);\\n \\n myServo.attach(9); // attaches the servo on pin 9 to the servo object\\n}\\n\\nvoid loop() {\\n // reads the value of the potentiometer (value between 0 and 1023)\\n int analogValue = analogRead(A0);\\n\\n // scales it to use it with the servo (value between 0 and 180)\\n int angle = map(analogValue, 0, 1023, 0, 180);\\n\\n // sets the servo position according to the scaled value\\n myServo.write(angle); \\n\\n // print out the value\\n Serial.print(\\\"Analog: \\\");\\n Serial.print(analogValue);\\n Serial.print(\\\", Angle: \\\");\\n Serial.println(angle);\\n delay(100);\\n}\\n\"}}]}", "name": "Arduino-Servo Motor controlled by Potentiometer", "description": "", "media": "circuit_images_esim/f092a5e8-ef9a-4496-bb29-b75915a69b7b.png", "shared": true, "save_time": "2021-08-19T12:43:58.572Z", "is_arduino": true, "esim_libraries": [] } }, { "model": "saveAPI.gallery", "pk": 84, "fields": { "save_id": "gallery40687.246117992836", "data_dump": "{\"canvas\":{\"x\":53,\"y\":210.75,\"scale\":0.7400000000000005},\"wires\":[{\"id\":1629377042941,\"points\":[[344.2916717529297,424],[344.2916717529297,462.75],[510.5416564941406,462.75],[510.5416564941406,184.75],[642.5416870117188,184.75],[642.2916870117188,197.5]],\"color\":\"#000\",\"start\":{\"id\":1599924382841,\"keyName\":\"ArduinoUno\",\"pid\":20,\"isSoldered\":false},\"end\":{\"id\":1599924379959,\"keyName\":\"BreadBoard\",\"pid\":106,\"isSoldered\":false}},{\"id\":1629377042944,\"points\":[[316.2916717529297,424],[316.2916717529297,486.75],[535.5416870117188,486.75],[535.5416870117188,111.75],[655.5416870117188,111.75],[657.2916870117188,197.5]],\"color\":\"#ff0000\",\"start\":{\"id\":1599924382841,\"keyName\":\"ArduinoUno\",\"pid\":18,\"isSoldered\":false},\"end\":{\"id\":1599924379959,\"keyName\":\"BreadBoard\",\"pid\":108,\"isSoldered\":false}},{\"id\":1629377042945,\"points\":[[250.2916717529297,150],[250.2916717529297,-78.5625],[868.2904052734375,-76.5625],[867.2916870117188,197.5]],\"color\":\"#000\",\"start\":{\"id\":1599924382841,\"keyName\":\"ArduinoUno\",\"pid\":1,\"isSoldered\":false},\"end\":{\"id\":1599924379959,\"keyName\":\"BreadBoard\",\"pid\":136,\"isSoldered\":false}},{\"id\":1629377042946,\"points\":[[264.2916717529297,150],[264.2916717529297,-60.593753814697266],[703.2904052734375,-60.593753814697266],[702.2916870117188,197.5]],\"color\":\"#ff0000\",\"start\":{\"id\":1599924382841,\"keyName\":\"ArduinoUno\",\"pid\":2,\"isSoldered\":false},\"end\":{\"id\":1599924379959,\"keyName\":\"BreadBoard\",\"pid\":114,\"isSoldered\":false}},{\"id\":1629377251407,\"points\":[[278.2916717529297,150],[278.2916717529297,-44.96875],[686.1029052734375,-44.96875],[687.2916870117188,197.5]],\"color\":\"#e6a800\",\"start\":{\"id\":1599924382841,\"keyName\":\"ArduinoUno\",\"pid\":3,\"isSoldered\":false},\"end\":{\"id\":1599924379959,\"keyName\":\"BreadBoard\",\"pid\":112,\"isSoldered\":false}},{\"id\":1629377042947,\"points\":[[292.2916717529297,150],[292.2916717529297,-25.968751907348633],[719.6966552734375,-25.968751907348633],[717.2916870117188,197.5]],\"color\":\"#31c404\",\"start\":{\"id\":1599924382841,\"keyName\":\"ArduinoUno\",\"pid\":4,\"isSoldered\":false},\"end\":{\"id\":1599924379959,\"keyName\":\"BreadBoard\",\"pid\":116,\"isSoldered\":false}},{\"id\":1629377042948,\"points\":[[374.2916717529297,150],[374.2916717529297,89.65625],[669.6966552734375,89.65625],[672.2916870117188,197.5]],\"color\":\"#2593fa\",\"start\":{\"id\":1599924382841,\"keyName\":\"ArduinoUno\",\"pid\":9,\"isSoldered\":false},\"end\":{\"id\":1599924379959,\"keyName\":\"BreadBoard\",\"pid\":110,\"isSoldered\":false}},{\"id\":1629377042949,\"points\":[[388.2916717529297,150],[388.2916717529297,74.03125],[791.2279052734375,76.03125],[792.2916870117188,197.5]],\"color\":\"#000\",\"start\":{\"id\":1599924382841,\"keyName\":\"ArduinoUno\",\"pid\":10,\"isSoldered\":false},\"end\":{\"id\":1599924379959,\"keyName\":\"BreadBoard\",\"pid\":126,\"isSoldered\":false}},{\"id\":1629377042950,\"points\":[[402.2916717529297,150],[402.2916717529297,57.625],[803.5404052734375,57.625],[807.2916870117188,197.5]],\"color\":\"#e6a800\",\"start\":{\"id\":1599924382841,\"keyName\":\"ArduinoUno\",\"pid\":11,\"isSoldered\":false},\"end\":{\"id\":1599924379959,\"keyName\":\"BreadBoard\",\"pid\":128,\"isSoldered\":false}},{\"id\":1629377637322,\"points\":[[416.2916717529297,150],[416.2916717529297,37.3125],[817.6029052734375,37.3125],[822.2916870117188,197.5]],\"color\":\"#ff0000\",\"start\":{\"id\":1599924382841,\"keyName\":\"ArduinoUno\",\"pid\":12,\"isSoldered\":false},\"end\":{\"id\":1599924379959,\"keyName\":\"BreadBoard\",\"pid\":130,\"isSoldered\":false}},{\"id\":1629377042951,\"points\":[[430.2916717529297,150],[430.2916717529297,13.875],[832.4466552734375,13.875],[837.2916870117188,197.5]],\"color\":\"#31c404\",\"start\":{\"id\":1599924382841,\"keyName\":\"ArduinoUno\",\"pid\":13,\"isSoldered\":false},\"end\":{\"id\":1599924379959,\"keyName\":\"BreadBoard\",\"pid\":132,\"isSoldered\":false}},{\"id\":1629377042952,\"points\":[[642.2916870117188,242.5],[642.2916564941406,242]],\"color\":\"#000\",\"start\":{\"id\":1599924379959,\"keyName\":\"BreadBoard\",\"pid\":286,\"isSoldered\":true},\"end\":{\"id\":1599924401381,\"keyName\":\"LCD16X2\",\"pid\":0,\"isSoldered\":false}},{\"id\":1629377042953,\"points\":[[657.2916870117188,242.5],[657.2916564941406,242]],\"color\":\"#000\",\"start\":{\"id\":1599924379959,\"keyName\":\"BreadBoard\",\"pid\":288,\"isSoldered\":true},\"end\":{\"id\":1599924401381,\"keyName\":\"LCD16X2\",\"pid\":1,\"isSoldered\":false}},{\"id\":1629377169660,\"points\":[[672.2916870117188,242.5],[672.2916564941406,242]],\"color\":\"#000\",\"start\":{\"id\":1599924379959,\"keyName\":\"BreadBoard\",\"pid\":290,\"isSoldered\":true},\"end\":{\"id\":1599924401381,\"keyName\":\"LCD16X2\",\"pid\":2,\"isSoldered\":false}},{\"id\":1629377042954,\"points\":[[687.2916870117188,242.5],[687.2916564941406,242]],\"color\":\"#000\",\"start\":{\"id\":1599924379959,\"keyName\":\"BreadBoard\",\"pid\":292,\"isSoldered\":true},\"end\":{\"id\":1599924401381,\"keyName\":\"LCD16X2\",\"pid\":3,\"isSoldered\":false}},{\"id\":1629377625629,\"points\":[[702.2916870117188,242.5],[702.2916564941406,242]],\"color\":\"#000\",\"start\":{\"id\":1599924379959,\"keyName\":\"BreadBoard\",\"pid\":294,\"isSoldered\":true},\"end\":{\"id\":1599924401381,\"keyName\":\"LCD16X2\",\"pid\":4,\"isSoldered\":false}},{\"id\":1629377042955,\"points\":[[717.2916870117188,242.5],[717.2916564941406,242]],\"color\":\"#000\",\"start\":{\"id\":1599924379959,\"keyName\":\"BreadBoard\",\"pid\":296,\"isSoldered\":true},\"end\":{\"id\":1599924401381,\"keyName\":\"LCD16X2\",\"pid\":5,\"isSoldered\":false}},{\"id\":1629377203480,\"points\":[[732.2916870117188,242.5],[732.2916564941406,242]],\"color\":\"#000\",\"start\":{\"id\":1599924379959,\"keyName\":\"BreadBoard\",\"pid\":298,\"isSoldered\":true},\"end\":{\"id\":1599924401381,\"keyName\":\"LCD16X2\",\"pid\":6,\"isSoldered\":false}},{\"id\":1629377042956,\"points\":[[747.2916870117188,242.5],[747.2916564941406,242]],\"color\":\"#000\",\"start\":{\"id\":1599924379959,\"keyName\":\"BreadBoard\",\"pid\":300,\"isSoldered\":true},\"end\":{\"id\":1599924401381,\"keyName\":\"LCD16X2\",\"pid\":7,\"isSoldered\":false}},{\"id\":1629377904259,\"points\":[[762.2916870117188,242.5],[762.2916564941406,242]],\"color\":\"#000\",\"start\":{\"id\":1599924379959,\"keyName\":\"BreadBoard\",\"pid\":302,\"isSoldered\":true},\"end\":{\"id\":1599924401381,\"keyName\":\"LCD16X2\",\"pid\":8,\"isSoldered\":false}},{\"id\":1629377849122,\"points\":[[777.2916870117188,242.5],[777.2916564941406,242]],\"color\":\"#000\",\"start\":{\"id\":1599924379959,\"keyName\":\"BreadBoard\",\"pid\":304,\"isSoldered\":true},\"end\":{\"id\":1599924401381,\"keyName\":\"LCD16X2\",\"pid\":9,\"isSoldered\":false}},{\"id\":1629377042957,\"points\":[[792.2916870117188,242.5],[792.2916564941406,242]],\"color\":\"#000\",\"start\":{\"id\":1599924379959,\"keyName\":\"BreadBoard\",\"pid\":306,\"isSoldered\":true},\"end\":{\"id\":1599924401381,\"keyName\":\"LCD16X2\",\"pid\":10,\"isSoldered\":false}},{\"id\":1629377606624,\"points\":[[807.2916870117188,242.5],[807.2916564941406,242]],\"color\":\"#000\",\"start\":{\"id\":1599924379959,\"keyName\":\"BreadBoard\",\"pid\":308,\"isSoldered\":true},\"end\":{\"id\":1599924401381,\"keyName\":\"LCD16X2\",\"pid\":11,\"isSoldered\":false}},{\"id\":1629377042958,\"points\":[[822.2916870117188,242.5],[822.2916564941406,242]],\"color\":\"#000\",\"start\":{\"id\":1599924379959,\"keyName\":\"BreadBoard\",\"pid\":310,\"isSoldered\":true},\"end\":{\"id\":1599924401381,\"keyName\":\"LCD16X2\",\"pid\":12,\"isSoldered\":false}},{\"id\":1629377709824,\"points\":[[837.2916870117188,242.5],[837.2916564941406,242]],\"color\":\"#000\",\"start\":{\"id\":1599924379959,\"keyName\":\"BreadBoard\",\"pid\":312,\"isSoldered\":true},\"end\":{\"id\":1599924401381,\"keyName\":\"LCD16X2\",\"pid\":13,\"isSoldered\":false}}],\"BreadBoard\":[{\"x\":963.2916870117188,\"y\":126,\"tx\":-385,\"ty\":0,\"id\":1599924379959}],\"LCD16X2\":[{\"x\":468.2916564941406,\"y\":528,\"tx\":132,\"ty\":-294,\"id\":1599924401381}],\"ArduinoUno\":[{\"x\":162.2916717529297,\"y\":209,\"tx\":-114,\"ty\":-89,\"id\":1599924382841,\"data\":{\"name\":\"Arduino UNO R3 1\",\"code\":\"#include\\nLiquidCrystal lcd(12, 13, 11, 5, 4, 3, 2);\\n\\nbyte human[8] = {0b01110,0b01110,0b00100,0b01110,0b10101,0b00100,0b01010,0b01010};\\nbyte rocket[8] = {0b00100,0b01110,0b11111,0b11111,0b01110,0b01110,0b01010,0b01010};\\n\\nvoid setup() {\\n lcd.begin(16, 2);\\n lcd.createChar(1, human);\\n lcd.createChar(2, rocket);\\n} \\nvoid loop() { \\n\\n lcd.setCursor(1,0);\\n lcd.write(byte(1));\\n\\n lcd.setCursor(3, 0);\\n lcd.print(\\\"Simulations\\\"); \\n\\n lcd.setCursor(4, 1);\\n lcd.print(\\\"on Cloud\\\");\\n\\n lcd.setCursor(13,1);\\n lcd.write(byte(2));\\n\\n delay(1000);\\n lcd.clear();\\n delay(1000);\\n}\"}}]}", "name": "LCD with BreadBoard", "description": "", "media": "circuit_images_esim/1fafb27c-29ce-4210-b1d5-b03ba26ecf5a.png", "shared": true, "save_time": "2021-08-19T12:44:31.721Z", "is_arduino": true, "esim_libraries": [] } }, { "model": "saveAPI.gallery", "pk": 85, "fields": { "save_id": "gallery54775.05536536516", "data_dump": "{\"canvas\":{\"x\":198.75,\"y\":-90.25,\"scale\":0.9199999999999999},\"wires\":[{\"id\":1626289935711,\"points\":[[529,400.5],[529.5,399.275]],\"color\":\"#000\",\"start\":{\"id\":1626289288122,\"keyName\":\"BreadBoard\",\"pid\":116,\"isSoldered\":true},\"end\":{\"id\":1626289433076,\"keyName\":\"PotentioMeter\",\"pid\":0,\"isSoldered\":false}},{\"id\":1626289935712,\"points\":[[544,400.5],[544.2,399.275]],\"color\":\"#000\",\"start\":{\"id\":1626289288122,\"keyName\":\"BreadBoard\",\"pid\":118,\"isSoldered\":true},\"end\":{\"id\":1626289433076,\"keyName\":\"PotentioMeter\",\"pid\":1,\"isSoldered\":false}},{\"id\":1626289935713,\"points\":[[559,400.5],[558.4,399.275]],\"color\":\"#000\",\"start\":{\"id\":1626289288122,\"keyName\":\"BreadBoard\",\"pid\":120,\"isSoldered\":true},\"end\":{\"id\":1626289433076,\"keyName\":\"PotentioMeter\",\"pid\":2,\"isSoldered\":false}},{\"id\":1626290844787,\"points\":[[634,400.5],[633,398.25]],\"color\":\"#000\",\"start\":{\"id\":1626289288122,\"keyName\":\"BreadBoard\",\"pid\":130,\"isSoldered\":true},\"end\":{\"id\":1626289441941,\"keyName\":\"LED\",\"pid\":0,\"isSoldered\":false}},{\"id\":1626289935714,\"points\":[[649,400.5],[649,398.25]],\"color\":\"#000\",\"start\":{\"id\":1626289288122,\"keyName\":\"BreadBoard\",\"pid\":132,\"isSoldered\":true},\"end\":{\"id\":1626289441941,\"keyName\":\"LED\",\"pid\":1,\"isSoldered\":false}},{\"id\":1626290352346,\"points\":[[301,356],[301,311],[379,311],[379,430.5],[409,430.5]],\"color\":\"#ff0000\",\"start\":{\"id\":1626289295708,\"keyName\":\"ArduinoUno\",\"pid\":13,\"isSoldered\":false},\"end\":{\"id\":1626289288122,\"keyName\":\"BreadBoard\",\"pid\":220,\"isSoldered\":false}},{\"id\":1626289935716,\"points\":[[201,630],[201,675],[379,675],[379,460.5],[454,460.5]],\"color\":\"#31c404\",\"start\":{\"id\":1626289295708,\"keyName\":\"ArduinoUno\",\"pid\":19,\"isSoldered\":false},\"end\":{\"id\":1626289288122,\"keyName\":\"BreadBoard\",\"pid\":346,\"isSoldered\":false}},{\"id\":1626289935717,\"points\":[[409,415.5],[529,415.5]],\"color\":\"#ff0000\",\"start\":{\"id\":1626289288122,\"keyName\":\"BreadBoard\",\"pid\":160,\"isSoldered\":false},\"end\":{\"id\":1626289288122,\"keyName\":\"BreadBoard\",\"pid\":176,\"isSoldered\":false}},{\"id\":1626289935718,\"points\":[[544,415.5],[634,415.5]],\"color\":\"#ff0000\",\"start\":{\"id\":1626289288122,\"keyName\":\"BreadBoard\",\"pid\":178,\"isSoldered\":false},\"end\":{\"id\":1626289288122,\"keyName\":\"BreadBoard\",\"pid\":190,\"isSoldered\":false}},{\"id\":1626290239976,\"points\":[[454,445.5],[649,445.5]],\"color\":\"#31c404\",\"start\":{\"id\":1626289288122,\"keyName\":\"BreadBoard\",\"pid\":286,\"isSoldered\":false},\"end\":{\"id\":1626289288122,\"keyName\":\"BreadBoard\",\"pid\":312,\"isSoldered\":false}}],\"BreadBoard\":[{\"x\":119,\"y\":154,\"tx\":271,\"ty\":175,\"id\":1626289288122}],\"PotentioMeter\":[{\"x\":419,\"y\":188.25,\"tx\":90,\"ty\":132,\"id\":1626289433076,\"data\":{\"value\":0}}],\"Label\":[{\"x\":559.9444580078125,\"y\":214.7777862548828,\"tx\":-22,\"ty\":58,\"id\":1626289675883,\"data\":{\"text\":\"Rotatepotentiometer'sknob\",\"size\":15,\"color\":\"#6a0dad\",\"weight\":\"Lighter\",\"style\":\"Normal\"}},{\"x\":389.9444580078125,\"y\":223.6666717529297,\"tx\":147,\"ty\":70,\"id\":1626289761249,\"data\":{\"text\":\"tochangeintensityofLED\",\"size\":15,\"color\":\"#6a0dad\",\"weight\":\"Lighter\",\"style\":\"normal\"}}],\"LED\":[{\"x\":281,\"y\":154.25,\"tx\":363,\"ty\":176,\"id\":1626289441941,\"data\":{\"color\":0}}],\"ArduinoUno\":[{\"x\":43,\"y\":352,\"tx\":-124,\"ty\":-26,\"id\":1626289295708,\"data\":{\"name\":\"ArduinoUNOR31\",\"code\":\"int PIN = 2;\\n\\nvoid setup(){\\n // set PIN mode to output\\n\\tpinMode(PIN, OUTPUT);\\n}\\n\\nvoid loop(){\\n // set output to High\\n\\tdigitalWrite(PIN, HIGH);\\n}\"}}]}", "name": "LED with Potentiometer", "description": "", "media": "circuit_images_esim/3d8e1995-43b8-4984-9186-637027d7ad86.png", "shared": true, "save_time": "2021-08-19T12:44:38.128Z", "is_arduino": true, "esim_libraries": [] } }, { "model": "saveAPI.gallery", "pk": 86, "fields": { "save_id": "gallery53106.37811657486", "data_dump": "{\"canvas\":{\"x\":-501.25,\"y\":-69.75,\"scale\":1.08},\"wires\":[{\"id\":1626834621571,\"points\":[[1168.5,486.5],[1167.46875,489]],\"color\":\"#000\",\"start\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":360,\"isSoldered\":true},\"end\":{\"id\":1626326054444,\"keyName\":\"L293D\",\"pid\":0,\"isSoldered\":false}},{\"id\":1626834632190,\"points\":[[1183.5,486.5],[1183.46875,489]],\"color\":\"#000\",\"start\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":362,\"isSoldered\":true},\"end\":{\"id\":1626326054444,\"keyName\":\"L293D\",\"pid\":1,\"isSoldered\":false}},{\"id\":1626835359414,\"points\":[[1198.5,486.5],[1197.46875,489]],\"color\":\"#000\",\"start\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":364,\"isSoldered\":true},\"end\":{\"id\":1626326054444,\"keyName\":\"L293D\",\"pid\":2,\"isSoldered\":false}},{\"id\":1626834621572,\"points\":[[1213.5,486.5],[1211.46875,489]],\"color\":\"#000\",\"start\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":366,\"isSoldered\":true},\"end\":{\"id\":1626326054444,\"keyName\":\"L293D\",\"pid\":3,\"isSoldered\":false}},{\"id\":1626834997733,\"points\":[[1228.5,486.5],[1226.46875,489]],\"color\":\"#000\",\"start\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":368,\"isSoldered\":true},\"end\":{\"id\":1626326054444,\"keyName\":\"L293D\",\"pid\":4,\"isSoldered\":false}},{\"id\":1626835211366,\"points\":[[1243.5,486.5],[1241.46875,489]],\"color\":\"#000\",\"start\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":370,\"isSoldered\":true},\"end\":{\"id\":1626326054444,\"keyName\":\"L293D\",\"pid\":5,\"isSoldered\":false}},{\"id\":1626835599596,\"points\":[[1258.5,486.5],[1258.46875,489]],\"color\":\"#000\",\"start\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":372,\"isSoldered\":true},\"end\":{\"id\":1626326054444,\"keyName\":\"L293D\",\"pid\":6,\"isSoldered\":false}},{\"id\":1626834621573,\"points\":[[1273.5,486.5],[1274.46875,489]],\"color\":\"#000\",\"start\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":374,\"isSoldered\":true},\"end\":{\"id\":1626326054444,\"keyName\":\"L293D\",\"pid\":7,\"isSoldered\":false}},{\"id\":1626834728555,\"points\":[[1168.5,546.5],[1167.46875,547]],\"color\":\"#000\",\"start\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":121,\"isSoldered\":true},\"end\":{\"id\":1626326054444,\"keyName\":\"L293D\",\"pid\":8,\"isSoldered\":false}},{\"id\":1626835461947,\"points\":[[1183.5,546.5],[1183.46875,547]],\"color\":\"#000\",\"start\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":123,\"isSoldered\":true},\"end\":{\"id\":1626326054444,\"keyName\":\"L293D\",\"pid\":9,\"isSoldered\":false}},{\"id\":1626835137530,\"points\":[[1198.5,546.5],[1199.46875,547]],\"color\":\"#000\",\"start\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":125,\"isSoldered\":true},\"end\":{\"id\":1626326054444,\"keyName\":\"L293D\",\"pid\":10,\"isSoldered\":false}},{\"id\":1626835122828,\"points\":[[1213.5,546.5],[1214.46875,547]],\"color\":\"#000\",\"start\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":127,\"isSoldered\":true},\"end\":{\"id\":1626326054444,\"keyName\":\"L293D\",\"pid\":11,\"isSoldered\":false}},{\"id\":1626834621574,\"points\":[[1228.5,546.5],[1229.46875,547]],\"color\":\"#000\",\"start\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":129,\"isSoldered\":true},\"end\":{\"id\":1626326054444,\"keyName\":\"L293D\",\"pid\":12,\"isSoldered\":false}},{\"id\":1626835329676,\"points\":[[1243.5,546.5],[1243.46875,547]],\"color\":\"#000\",\"start\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":131,\"isSoldered\":true},\"end\":{\"id\":1626326054444,\"keyName\":\"L293D\",\"pid\":13,\"isSoldered\":false}},{\"id\":1626834638354,\"points\":[[1258.5,546.5],[1258.46875,547]],\"color\":\"#000\",\"start\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":133,\"isSoldered\":true},\"end\":{\"id\":1626326054444,\"keyName\":\"L293D\",\"pid\":14,\"isSoldered\":false}},{\"id\":1626834717794,\"points\":[[1273.5,546.5],[1274.46875,547]],\"color\":\"#000\",\"start\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":135,\"isSoldered\":true},\"end\":{\"id\":1626326054444,\"keyName\":\"L293D\",\"pid\":15,\"isSoldered\":false}},{\"id\":1626834621575,\"points\":[[1438.5,426.5],[1440,425.75]],\"color\":\"#000\",\"start\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":156,\"isSoldered\":true},\"end\":{\"id\":1626370960254,\"keyName\":\"Motor\",\"pid\":0,\"isSoldered\":false}},{\"id\":1626834659767,\"points\":[[1453.5,426.5],[1456,425.75]],\"color\":\"#000\",\"start\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":158,\"isSoldered\":true},\"end\":{\"id\":1626370960254,\"keyName\":\"Motor\",\"pid\":1,\"isSoldered\":false}},{\"id\":1626835069551,\"points\":[[1198.5,471.5],[1438.5,471.5]],\"color\":\"#e6a800\",\"start\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":304,\"isSoldered\":false},\"end\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":336,\"isSoldered\":false}},{\"id\":1626835239707,\"points\":[[1243.5,456.5],[1453.5,456.5]],\"color\":\"#e6a800\",\"start\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":250,\"isSoldered\":false},\"end\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":278,\"isSoldered\":false}},{\"id\":1626834621576,\"points\":[[1273.5,426.5],[1297.5,392]],\"color\":\"#ff0000\",\"start\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":134,\"isSoldered\":false},\"end\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":61,\"isSoldered\":false}},{\"id\":1626835037989,\"points\":[[1168.5,426.5],[1171.5,392]],\"color\":\"#ff0000\",\"start\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":120,\"isSoldered\":false},\"end\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":37,\"isSoldered\":false}},{\"id\":1626834683162,\"points\":[[1273.5,606.5],[1311,608.75],[1312.5,392]],\"color\":\"#ff0000\",\"start\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":375,\"isSoldered\":false},\"end\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":65,\"isSoldered\":false}},{\"id\":1626834621577,\"points\":[[1213.5,426.5],[1219.5,377]],\"color\":\"#31c404\",\"start\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":126,\"isSoldered\":false},\"end\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":44,\"isSoldered\":false}},{\"id\":1626834759996,\"points\":[[1228.5,426.5],[1234.5,377]],\"color\":\"#31c404\",\"start\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":128,\"isSoldered\":false},\"end\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":48,\"isSoldered\":false}},{\"id\":1626834963362,\"points\":[[1063.5,561.5],[1063.5,561.775]],\"color\":\"#000\",\"start\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":167,\"isSoldered\":true},\"end\":{\"id\":1626370943992,\"keyName\":\"PotentioMeter\",\"pid\":0,\"isSoldered\":false}},{\"id\":1626835605609,\"points\":[[1078.5,561.5],[1078.2,561.775]],\"color\":\"#000\",\"start\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":169,\"isSoldered\":true},\"end\":{\"id\":1626370943992,\"keyName\":\"PotentioMeter\",\"pid\":1,\"isSoldered\":false}},{\"id\":1626834621578,\"points\":[[1093.5,561.5],[1092.4,561.775]],\"color\":\"#000\",\"start\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":171,\"isSoldered\":true},\"end\":{\"id\":1626370943992,\"keyName\":\"PotentioMeter\",\"pid\":2,\"isSoldered\":false}},{\"id\":1626834766427,\"points\":[[881.9166870117188,652.1944427490234],[883.0556030273438,697.138916015625],[1077.9444580078125,697.4722290039062],[1078.5,606.5]],\"color\":\"#2593fa\",\"start\":{\"id\":1626371174393,\"keyName\":\"ArduinoUno\",\"pid\":22,\"isSoldered\":false},\"end\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":349,\"isSoldered\":false}},{\"id\":1626835234361,\"points\":[[1063.5,606.5],[1063.5,647]],\"color\":\"#ff0000\",\"start\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":347,\"isSoldered\":false},\"end\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":14,\"isSoldered\":false}},{\"id\":1626834621579,\"points\":[[1093.5,606.5],[1111.5,662]],\"color\":\"#31c404\",\"start\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":351,\"isSoldered\":false},\"end\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":23,\"isSoldered\":false}},{\"id\":1626835481281,\"points\":[[1342.5,392],[1342.5,647]],\"color\":\"#ff0000\",\"start\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":73,\"isSoldered\":false},\"end\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":74,\"isSoldered\":false}},{\"id\":1626835533224,\"points\":[[1357.5,377],[1357.5,662]],\"color\":\"#31c404\",\"start\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":76,\"isSoldered\":false},\"end\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":79,\"isSoldered\":false}},{\"id\":1626835314887,\"points\":[[1258.5,426.5],[1260.8333740234375,317.1388854980469],[783.0556030273438,316.02777099609375],[785.9166870117188,378.19444274902344]],\"color\":\"#2593fa\",\"start\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":132,\"isSoldered\":false},\"end\":{\"id\":1626371174393,\"keyName\":\"ArduinoUno\",\"pid\":4,\"isSoldered\":false}},{\"id\":1626834621580,\"points\":[[799.9166870117188,378.19444274902344],[798.6111450195312,329.3611145019531],[1185.27783203125,330.47222900390625],[1183.5,426.5]],\"color\":\"#2593fa\",\"start\":{\"id\":1626371174393,\"keyName\":\"ArduinoUno\",\"pid\":5,\"isSoldered\":false},\"end\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":122,\"isSoldered\":false}},{\"id\":1626835593564,\"points\":[[757.9166870117188,378.19444274902344],[759.7222290039062,271.5833435058594],[1035.8333740234375,271.1388854980469]],\"color\":\"#000\",\"start\":{\"id\":1626371174393,\"keyName\":\"ArduinoUno\",\"pid\":2,\"isSoldered\":false},\"end\":{\"id\":1626371450798,\"keyName\":\"PushButton\",\"pid\":2,\"isSoldered\":false}},{\"id\":1626834825529,\"points\":[[1070.8333740234375,271.1388854980469],[1078.5,377]],\"color\":\"#000\",\"start\":{\"id\":1626371450798,\"keyName\":\"PushButton\",\"pid\":3,\"isSoldered\":false},\"end\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":16,\"isSoldered\":false}},{\"id\":1626834893206,\"points\":[[771.9166870117188,378.19444274902344],[774.1666870117188,290.47222900390625],[1144.166748046875,287.1388854980469],[1147.166748046875,267.80555725097656]],\"color\":\"#000\",\"start\":{\"id\":1626371174393,\"keyName\":\"ArduinoUno\",\"pid\":3,\"isSoldered\":false},\"end\":{\"id\":1626371452788,\"keyName\":\"PushButton\",\"pid\":2,\"isSoldered\":false}},{\"id\":1626834621581,\"points\":[[1182.166748046875,267.80555725097656],[1204.5,392]],\"color\":\"#000\",\"start\":{\"id\":1626371452788,\"keyName\":\"PushButton\",\"pid\":3,\"isSoldered\":false},\"end\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":41,\"isSoldered\":false}},{\"id\":1626834810430,\"points\":[[823.9166870117188,652.1944427490234],[826.7777709960938,720.75],[1403.4444580078125,721.8611450195312],[1405.5,662]],\"color\":\"#000\",\"start\":{\"id\":1626371174393,\"keyName\":\"ArduinoUno\",\"pid\":19,\"isSoldered\":false},\"end\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":87,\"isSoldered\":false}},{\"id\":1626834958934,\"points\":[[809.9166870117188,652.1944427490234],[817.888916015625,741.8611450195312],[1424.5555419921875,737.4166870117188],[1420.5,647]],\"color\":\"#000\",\"start\":{\"id\":1626371174393,\"keyName\":\"ArduinoUno\",\"pid\":18,\"isSoldered\":false},\"end\":{\"id\":1626370927984,\"keyName\":\"BreadBoard\",\"pid\":90,\"isSoldered\":false}}],\"BreadBoard\":[{\"x\":1089.5,\"y\":470,\"tx\":-90,\"ty\":-115,\"id\":1626370927984}],\"PotentioMeter\":[{\"x\":1132,\"y\":263.75,\"tx\":-89,\"ty\":219,\"id\":1626370943992,\"data\":{\"value\":0}}],\"Label\":[{\"x\":1289.0555419921875,\"y\":115,\"tx\":-125,\"ty\":18,\"id\":1626834625520,\"data\":{\"text\":\"Push to rotate\",\"size\":15,\"color\":\"#000000\",\"weight\":\"normal\",\"style\":\"normal\"}},{\"x\":1325.7222900390625,\"y\":117.22222137451172,\"tx\":-160,\"ty\":36,\"id\":1626834655604,\"data\":{\"text\":\"Anti-Clockwise\",\"size\":15,\"color\":\"#000000\",\"weight\":\"normal\",\"style\":\"normal\"}},{\"x\":783.5,\"y\":116.11111450195312,\"tx\":259,\"ty\":19,\"id\":1626834670688,\"data\":{\"text\":\"Push to rotate\",\"size\":15,\"color\":\"#000000\",\"weight\":\"normal\",\"style\":\"normal\"}},{\"x\":881.2777709960938,\"y\":142.7777862548828,\"tx\":163,\"ty\":13,\"id\":1626834672616,\"data\":{\"text\":\"Clockwise\",\"size\":15,\"color\":\"#000000\",\"weight\":\"normal\",\"style\":\"normal\"}},{\"x\":1023.5,\"y\":856.1111450195312,\"tx\":77,\"ty\":-86,\"id\":1626834704194,\"data\":{\"text\":\"Rotate potentiometer to change motor's RPM\",\"size\":24,\"color\":\"#000000\",\"weight\":\"normal\",\"style\":\"normal\"}}],\"Motor\":[{\"x\":1051,\"y\":175.75,\"tx\":361,\"ty\":195,\"id\":1626370960254}],\"ArduinoUno\":[{\"x\":952.9166870117188,\"y\":153.19444274902344,\"tx\":-411,\"ty\":195,\"id\":1626371174393,\"data\":{\"name\":\"ArduinoUNOR32\",\"code\":\"const int potPin = A0;\\nconst int fwdbuttonPin = 13;\\nconst int bckbuttonPin = 12;\\nconst int ICpin2 = 11;\\nconst int ICpin7 = 10;\\n\\nint potValue = 0;\\nint motorValue = 0;\\nint fwdbuttonState = 0;\\nint bckbuttonState = 0;\\n\\nvoid setup()\\n{\\npinMode(fwdbuttonPin, INPUT_PULLUP);\\npinMode(bckbuttonPin,INPUT_PULLUP);\\n\\npinMode(ICpin2, OUTPUT);\\npinMode(ICpin7, OUTPUT);\\n}\\n\\nvoid loop()\\n{\\npotValue = analogRead(potPin);\\nmotorValue = map(potValue, 0, 1023, 0, 255);\\nfwdbuttonState = digitalRead(fwdbuttonPin);\\nbckbuttonState = digitalRead(bckbuttonPin);\\n\\ndelay (500);\\nif(fwdbuttonState == LOW || bckbuttonState == LOW)\\n{\\n analogWrite(fwdbuttonState == LOW ? ICpin2 : ICpin7, motorValue); \\n digitalWrite(fwdbuttonState == LOW ? ICpin7 : ICpin2, LOW);\\n} else\\n{\\n analogWrite(ICpin2, 1);\\n analogWrite(ICpin7, 1);\\n}\\n}\\n\"}}],\"PushButton\":[{\"x\":970.8333740234375,\"y\":187.13888549804688,\"tx\":51,\"ty\":4,\"id\":1626371450798},{\"x\":1194.166748046875,\"y\":223.80555725097656,\"tx\":-61,\"ty\":-36,\"id\":1626371452788}],\"L293D\":[{\"x\":375.46875,\"y\":664,\"tx\":788,\"ty\":-175,\"id\":1626326054444}]}", "name": "L293D Motor Driver", "description": "", "media": "circuit_images_esim/319ced80-722f-48e3-8d72-3411ca2c1110.png", "shared": true, "save_time": "2021-08-19T12:44:45.929Z", "is_arduino": true, "esim_libraries": [] } }, { "model": "saveAPI.gallery", "pk": 87, "fields": { "save_id": "gallery74600.70001842984", "data_dump": "{\"canvas\":{\"x\":39.5,\"y\":-20,\"scale\":1.2200000000000002},\"wires\":[{\"id\":1627283225471,\"points\":[[259,560],[259,583.0701904296875],[488.881591796875,583.0701904296875],[488.881591796875,561.140380859375],[517,561]],\"color\":\"#31c404\",\"start\":{\"id\":1626864742739,\"keyName\":\"ArduinoUno\",\"pid\":19,\"isSoldered\":false},\"end\":{\"id\":1626864744564,\"keyName\":\"BreadBoard\",\"pid\":3,\"isSoldered\":false}},{\"id\":1627283225473,\"points\":[[652,355.5],[650,357]],\"color\":\"#000\",\"start\":{\"id\":1626864744564,\"keyName\":\"BreadBoard\",\"pid\":238,\"isSoldered\":true},\"end\":{\"id\":1626864757742,\"keyName\":\"LED\",\"pid\":0,\"isSoldered\":false}},{\"id\":1627283225474,\"points\":[[667,355.5],[666,357]],\"color\":\"#000\",\"start\":{\"id\":1626864744564,\"keyName\":\"BreadBoard\",\"pid\":240,\"isSoldered\":true},\"end\":{\"id\":1626864757742,\"keyName\":\"LED\",\"pid\":1,\"isSoldered\":false}},{\"id\":1627283225476,\"points\":[[667,385.5],[670,561]],\"color\":\"#31c404\",\"start\":{\"id\":1626864744564,\"keyName\":\"BreadBoard\",\"pid\":360,\"isSoldered\":false},\"end\":{\"id\":1626864744564,\"keyName\":\"BreadBoard\",\"pid\":39,\"isSoldered\":false}},{\"id\":1627284170811,\"points\":[[562,370.5],[482.03509521484375,370.5],[482.03509521484375,233.9385986328125],[195.19297790527344,233.9385986328125],[193,286]],\"color\":\"#ff0000\",\"start\":{\"id\":1626864744564,\"keyName\":\"BreadBoard\",\"pid\":286,\"isSoldered\":false},\"end\":{\"id\":1626864742739,\"keyName\":\"ArduinoUno\",\"pid\":2,\"isSoldered\":false}},{\"id\":1627283225478,\"points\":[[577,370.5],[652,370.5]],\"color\":\"#ff0000\",\"start\":{\"id\":1626864744564,\"keyName\":\"BreadBoard\",\"pid\":288,\"isSoldered\":false},\"end\":{\"id\":1626864744564,\"keyName\":\"BreadBoard\",\"pid\":298,\"isSoldered\":false}},{\"id\":1627283262244,\"points\":[[562,325.5],[561.0833129882812,324.5833282470703]],\"color\":\"#000\",\"start\":{\"id\":1626864744564,\"keyName\":\"BreadBoard\",\"pid\":106,\"isSoldered\":true},\"end\":{\"id\":1627283259152,\"keyName\":\"PhotoResistor\",\"pid\":0,\"isSoldered\":false}},{\"id\":1627283262246,\"points\":[[577,325.5],[576.0833129882812,324.5833282470703]],\"color\":\"#000\",\"start\":{\"id\":1626864744564,\"keyName\":\"BreadBoard\",\"pid\":108,\"isSoldered\":true},\"end\":{\"id\":1627283259152,\"keyName\":\"PhotoResistor\",\"pid\":1,\"isSoldered\":false}}],\"BreadBoard\":[{\"x\":254,\"y\":101,\"tx\":244,\"ty\":153,\"id\":1626864744564}],\"PhotoResistor\":[{\"x\":538.0833129882812,\"y\":175.5833282470703,\"tx\":6,\"ty\":89,\"id\":1627283259152}],\"Label\":[{\"x\":528.9893188476562,\"y\":119.62232971191406,\"tx\":22,\"ty\":44,\"id\":1627283306260,\"data\":{\"text\":\"Move slider to change LED's brightness\",\"size\":15,\"color\":\"#000000\",\"weight\":\"normal\",\"style\":\"normal\"}}],\"LED\":[{\"x\":198,\"y\":64,\"tx\":463,\"ty\":225,\"id\":1626864757742,\"data\":{\"color\":0}}],\"ArduinoUno\":[{\"x\":54,\"y\":259,\"tx\":-77,\"ty\":-3,\"id\":1626864742739,\"data\":{\"name\":\"ArduinoUNOR31\",\"code\":\"void setup(){\\n\\tpinMode(13, OUTPUT);\\n}\\n\\nvoid loop(){\\n\\tdigitalWrite(13, HIGH);\\n}\"}}]}", "name": "LED with LDR", "description": "", "media": "circuit_images_esim/d5998ada-a956-4ec0-b88c-e2b2168fc05f.png", "shared": true, "save_time": "2021-08-19T12:44:59.313Z", "is_arduino": true, "esim_libraries": [] } }, { "model": "saveAPI.gallery", "pk": 88, "fields": { "save_id": "gallery70213.35633167367", "data_dump": "{\"canvas\":{\"x\":-410.25,\"y\":-131.25,\"scale\":1.1400000000000001},\"wires\":[{\"id\":1627499789361,\"points\":[[746.9415130615234,655.1282043457031],[746.9415130615234,708.2069091796875],[1043.7586669921875,708.2069091796875],[1044.300537109375,481.5]],\"color\":\"#ff0000\",\"start\":{\"id\":1627148899389,\"keyName\":\"ArduinoUno\",\"pid\":18,\"isSoldered\":false},\"end\":{\"id\":1627148894928,\"keyName\":\"BreadBoard\",\"pid\":350,\"isSoldered\":false}},{\"id\":1627499789363,\"points\":[[680.9415130615234,381.1282043457031],[679.9415130615234,352.5172424316406],[939.5172729492188,351.5172424316406],[938.5172729492188,601.5517578125],[984.300537109375,601.5]],\"color\":\"#31c404\",\"start\":{\"id\":1627148899389,\"keyName\":\"ArduinoUno\",\"pid\":1,\"isSoldered\":false},\"end\":{\"id\":1627148894928,\"keyName\":\"BreadBoard\",\"pid\":343,\"isSoldered\":false}},{\"id\":1627499789364,\"points\":[[984.300537109375,436.5],[1029.300537109375,436.5]],\"color\":\"#31c404\",\"start\":{\"id\":1627148894928,\"keyName\":\"BreadBoard\",\"pid\":162,\"isSoldered\":false},\"end\":{\"id\":1627148894928,\"keyName\":\"BreadBoard\",\"pid\":168,\"isSoldered\":false}},{\"id\":1627500424552,\"points\":[[1029.300537109375,481.5],[1029.300537109375,688.2672729492188],[877.0344848632812,688.2672729492188],[874.9415130615234,655.1282043457031]],\"color\":\"#2593fa\",\"start\":{\"id\":1627148894928,\"keyName\":\"BreadBoard\",\"pid\":348,\"isSoldered\":false},\"end\":{\"id\":1627148899389,\"keyName\":\"ArduinoUno\",\"pid\":26,\"isSoldered\":false}},{\"id\":1627500012671,\"points\":[[1029.300537109375,421.5],[1028.27587890625,421.34483337402344]],\"color\":\"#000\",\"start\":{\"id\":1627148894928,\"keyName\":\"BreadBoard\",\"pid\":108,\"isSoldered\":true},\"end\":{\"id\":1627442453873,\"keyName\":\"Thermistor\",\"pid\":0,\"isSoldered\":false}},{\"id\":1627499789365,\"points\":[[1044.300537109375,421.5],[1046.27587890625,421.34483337402344]],\"color\":\"#000\",\"start\":{\"id\":1627148894928,\"keyName\":\"BreadBoard\",\"pid\":110,\"isSoldered\":true},\"end\":{\"id\":1627442453873,\"keyName\":\"Thermistor\",\"pid\":1,\"isSoldered\":false}},{\"id\":1627500261793,\"points\":[[984.300537109375,466.5],[982.1466674804688,468.20513916015625]],\"color\":\"#000\",\"start\":{\"id\":1627148894928,\"keyName\":\"BreadBoard\",\"pid\":282,\"isSoldered\":true},\"end\":{\"id\":1627148918352,\"keyName\":\"Resistor\",\"pid\":0,\"isSoldered\":false}},{\"id\":1627499789366,\"points\":[[984.300537109375,556.5],[982.1466674804688,559.2051391601562]],\"color\":\"#000\",\"start\":{\"id\":1627148894928,\"keyName\":\"BreadBoard\",\"pid\":163,\"isSoldered\":true},\"end\":{\"id\":1627148918352,\"keyName\":\"Resistor\",\"pid\":1,\"isSoldered\":false}}],\"BreadBoard\":[{\"x\":950.300537109375,\"y\":350,\"tx\":0,\"ty\":0,\"id\":1627148894928}],\"Resistor\":[{\"x\":954.1466674804688,\"y\":178.20513916015625,\"tx\":17,\"ty\":286,\"id\":1627148918352,\"data\":{\"value\":1000,\"tolerance\":10}}],\"Label\":[{\"x\":1070.403564453125,\"y\":191,\"tx\":-38,\"ty\":41,\"id\":1627499818860,\"data\":{\"text\":\"Move slider to change ADC\",\"size\":15,\"color\":\"#000000\",\"weight\":\"normal\",\"style\":\"normal\"}},{\"x\":740.5789794921875,\"y\":245.38597106933594,\"tx\":295,\"ty\":8,\"id\":1627499857054,\"data\":{\"text\":\"value in serial output\",\"size\":15,\"color\":\"#000000\",\"weight\":\"normal\",\"style\":\"normal\"}}],\"ArduinoUno\":[{\"x\":125.94151306152344,\"y\":305.1282043457031,\"tx\":353,\"ty\":46,\"id\":1627148899389,\"data\":{\"name\":\"ArduinoUNOR31\",\"code\":\"void setup(){\\n\\tSerial.begin(9600);\\n}\\n\\nvoid loop(){\\n\\tint val = analogRead(A4);\\n Serial.println(val);\\n delay (500);\\n}\"}}],\"Thermistor\":[{\"x\":716.27587890625,\"y\":146.34483337402344,\"tx\":302,\"ty\":185,\"id\":1627442453873}]}", "name": "Serial output with thermistor", "description": "", "media": "circuit_images_esim/de391668-434c-4f14-bf86-c791e107d1e6.png", "shared": true, "save_time": "2021-08-19T12:45:06.226Z", "is_arduino": true, "esim_libraries": [] } }, { "model": "saveAPI.gallery", "pk": 89, "fields": { "save_id": "gallery40489.4866727042", "data_dump": "{\"canvas\":{\"x\":-65,\"y\":-59,\"scale\":1.1400000000000001},\"wires\":[{\"id\":1627499922111,\"points\":[[814.5,349.5],[813.5,350]],\"color\":\"#000\",\"start\":{\"id\":1627149633636,\"keyName\":\"BreadBoard\",\"pid\":124,\"isSoldered\":true},\"end\":{\"id\":1627149645405,\"keyName\":\"Thermistor\",\"pid\":0,\"isSoldered\":false}},{\"id\":1627499922112,\"points\":[[829.5,349.5],[831.5,350]],\"color\":\"#000\",\"start\":{\"id\":1627149633636,\"keyName\":\"BreadBoard\",\"pid\":126,\"isSoldered\":true},\"end\":{\"id\":1627149645405,\"keyName\":\"Thermistor\",\"pid\":1,\"isSoldered\":false}},{\"id\":1627500886994,\"points\":[[814.5,409.5],[814.5,617],[506.5,617],[504.5,577]],\"color\":\"#31c404\",\"start\":{\"id\":1627149633636,\"keyName\":\"BreadBoard\",\"pid\":364,\"isSoldered\":false},\"end\":{\"id\":1627149636154,\"keyName\":\"ArduinoUno\",\"pid\":26,\"isSoldered\":false}},{\"id\":1627499922113,\"points\":[[709.5,409.5],[599.5,409.5],[599.5,596],[404.5,596],[404.5,577]],\"color\":\"#2593fa\",\"start\":{\"id\":1627149633636,\"keyName\":\"BreadBoard\",\"pid\":350,\"isSoldered\":false},\"end\":{\"id\":1627149636154,\"keyName\":\"ArduinoUno\",\"pid\":20,\"isSoldered\":false}},{\"id\":1627499922114,\"points\":[[709.5,394.5],[708.5,396]],\"color\":\"#000\",\"start\":{\"id\":1627149633636,\"keyName\":\"BreadBoard\",\"pid\":290,\"isSoldered\":true},\"end\":{\"id\":1627149744110,\"keyName\":\"Resistor\",\"pid\":0,\"isSoldered\":false}},{\"id\":1627500280552,\"points\":[[709.5,484.5],[708.5,487]],\"color\":\"#000\",\"start\":{\"id\":1627149633636,\"keyName\":\"BreadBoard\",\"pid\":171,\"isSoldered\":true},\"end\":{\"id\":1627149744110,\"keyName\":\"Resistor\",\"pid\":1,\"isSoldered\":false}},{\"id\":1627500273198,\"points\":[[709.5,499.5],[762.5,499.5],[762.5,394],[814.5,394.5]],\"color\":\"#31c404\",\"start\":{\"id\":1627149633636,\"keyName\":\"BreadBoard\",\"pid\":231,\"isSoldered\":false},\"end\":{\"id\":1627149633636,\"keyName\":\"BreadBoard\",\"pid\":304,\"isSoldered\":false}},{\"id\":1627499922115,\"points\":[[829.5,409.5],[829.5,648],[374.5,648],[376.5,577]],\"color\":\"#ff0000\",\"start\":{\"id\":1627149633636,\"keyName\":\"BreadBoard\",\"pid\":366,\"isSoldered\":false},\"end\":{\"id\":1627149636154,\"keyName\":\"ArduinoUno\",\"pid\":18,\"isSoldered\":false}},{\"id\":1627500494445,\"points\":[[476.5,303],[476.5,277.3918762207031],[564.8441772460938,277.3918762207031],[564.8441772460938,364.5540466308594],[739.5,364.5]],\"color\":\"#ff0000\",\"start\":{\"id\":1627149636154,\"keyName\":\"ArduinoUno\",\"pid\":12,\"isSoldered\":false},\"end\":{\"id\":1627149633636,\"keyName\":\"BreadBoard\",\"pid\":174,\"isSoldered\":false}},{\"id\":1627499922116,\"points\":[[725.25,269],[725.25,331.4459533691406],[709.7026977539062,331.4459533691406],[709.5,349.5]],\"color\":\"#31c404\",\"start\":{\"id\":1627281921222,\"keyName\":\"LED\",\"pid\":1,\"isSoldered\":false},\"end\":{\"id\":1627149633636,\"keyName\":\"BreadBoard\",\"pid\":110,\"isSoldered\":false}},{\"id\":1627499994233,\"points\":[[709.25,269],[709.25,307.79730224609375],[736.0540771484375,307.79730224609375],[739.5,349.5]],\"color\":\"#ff0000\",\"start\":{\"id\":1627281921222,\"keyName\":\"LED\",\"pid\":0,\"isSoldered\":false},\"end\":{\"id\":1627149633636,\"keyName\":\"BreadBoard\",\"pid\":114,\"isSoldered\":false}}],\"BreadBoard\":[{\"x\":615.5,\"y\":278,\"tx\":0,\"ty\":0,\"id\":1627149633636}],\"Resistor\":[{\"x\":197.5,\"y\":126,\"tx\":500,\"ty\":266,\"id\":1627149744110,\"data\":{\"value\":1000,\"tolerance\":10}}],\"Label\":[{\"x\":450.96490478515625,\"y\":135.3157958984375,\"tx\":260,\"ty\":42,\"id\":1627499939355,\"data\":{\"text\":\"LED's brightness\",\"size\":15,\"color\":\"#000000\",\"weight\":\"normal\",\"style\":\"normal\"}},{\"x\":472.8947448730469,\"y\":163.38597106933594,\"tx\":233,\"ty\":-9,\"id\":1627499941934,\"data\":{\"text\":\"Move slider to change\",\"size\":15,\"color\":\"#000000\",\"weight\":\"normal\",\"style\":\"normal\"}}],\"LED\":[{\"x\":720.25,\"y\":201,\"tx\":0,\"ty\":0,\"id\":1627281921222,\"data\":{\"color\":0}}],\"ArduinoUno\":[{\"x\":-29.5,\"y\":311,\"tx\":138,\"ty\":-38,\"id\":1627149636154,\"data\":{\"name\":\"ArduinoUNOR31\",\"code\":\"int i;\\nint val;\\n\\nvoid setup(){\\n\\tpinMode(3, OUTPUT); \\n Serial . begin (115200);\\n \\n\\tfor(i = 1; i <= 20; i++) {\\n val = analogRead(A4) ; // read value from \\n Serial.println(val); //display\\n if(val > 550) {\\n digitalWrite(3,HIGH);\\n }else{\\n digitalWrite (3 , LOW);\\n }\\n delay (500) ;\\n }\\n digitalWrite (3 , LOW) ;\\n}\\n\\nvoid loop(){\\n}\"}}],\"Thermistor\":[{\"x\":307.5,\"y\":156,\"tx\":496,\"ty\":104,\"id\":1627149645405}]}", "name": "LED's brightness using Thermistor", "description": "", "media": "circuit_images_esim/42b33ddd-cae8-4af6-8133-2470a60edc47.png", "shared": true, "save_time": "2021-08-19T12:45:15.023Z", "is_arduino": true, "esim_libraries": [] } }, { "model": "saveAPI.gallery", "pk": 118, "fields": { "save_id": "gallery17038.096178174445", "data_dump": "{\"canvas\":{\"x\":13.25,\"y\":284.25,\"scale\":0.6799999999999997},\"wires\":[{\"id\":1629705951880,\"points\":[[423.3194580078125,304],[424.3194580078125,343]],\"color\":\"#000\",\"start\":{\"id\":1592275089685,\"keyName\":\"MQ2\",\"pid\":1,\"isSoldered\":false},\"end\":{\"id\":1592275094732,\"keyName\":\"ArduinoUno\",\"pid\":1,\"isSoldered\":false}},{\"id\":1629705951883,\"points\":[[448.3194580078125,304],[667.3194580078125,304],[668.3194580078125,655],[562.3194580078125,656],[562.3194580078125,617]],\"color\":\"#31c404\",\"start\":{\"id\":1592275089685,\"keyName\":\"MQ2\",\"pid\":3,\"isSoldered\":false},\"end\":{\"id\":1592275094732,\"keyName\":\"ArduinoUno\",\"pid\":22,\"isSoldered\":false}},{\"id\":1629705951885,\"points\":[[411.3194580078125,304],[209.31944274902344,303],[204.31944274902344,662],[491.3194580078125,659],[490.3194580078125,617]],\"color\":\"#ff0000\",\"start\":{\"id\":1592275089685,\"keyName\":\"MQ2\",\"pid\":0,\"isSoldered\":false},\"end\":{\"id\":1592275094732,\"keyName\":\"ArduinoUno\",\"pid\":18,\"isSoldered\":false}}],\"MQ2\":[{\"x\":265.3194580078125,\"y\":217,\"tx\":118,\"ty\":-77,\"id\":1592275089685}],\"ArduinoUno\":[{\"x\":372.3194580078125,\"y\":475,\"tx\":-150,\"ty\":-162,\"id\":1592275094732,\"data\":{\"name\":\"Arduino UNO R3 1\",\"code\":\"void setup(){\\n\\tSerial.begin(9600);\\n}\\n\\nvoid loop(){\\n\\tSerial.println(analogRead(A0));\\n delay(1000);\\n}\"}}]}", "name": "Gas Sensor", "description": "", "media": "circuit_images_esim/37c98c01-b375-40c6-b877-28ffdce161da.png", "shared": true, "save_time": "2021-08-23T08:05:59.356Z", "is_arduino": true, "esim_libraries": [] } } ] ================================================ FILE: esim-cloud-backend/workflowAPI/fixtures/initial_setup.json ================================================ [ { "model": "auth.group", "pk": 1, "fields": { "name": "Contributor [E-Sim]", "permissions": [] } }, { "model": "auth.group", "pk": 2, "fields": { "name": "Contributor [Arduino]", "permissions": [] } }, { "model": "auth.group", "pk": 3, "fields": { "name": "Reviewer [Arduino]", "permissions": [] } }, { "model": "auth.group", "pk": 4, "fields": { "name": "Reviewer [E-Sim]", "permissions": [] } }, { "model": "auth.group", "pk": 5, "fields": { "name": "Staff [eSim]", "permissions": [] } }, { "model": "auth.group", "pk": 6, "fields": { "name": "Staff [Arduino]", "permissions": [] } }, { "model": "workflowAPI.state", "pk": 1, "fields": { "name": "Draft", "description": "State used for the drafting stage of a project", "public": false, "report": false } }, { "model": "workflowAPI.state", "pk": 2, "fields": { "name": "Review", "description": "State used for the reviewing stage", "public": false, "report": false } }, { "model": "workflowAPI.state", "pk": 3, "fields": { "name": "Reported", "description": "State used when a project gets reported", "public": true, "report": true } }, { "model": "workflowAPI.state", "pk": 4, "fields": { "name": "Published", "description": "State used for the published stage", "public": true, "report": false } }, { "model": "workflowAPI.customgroup", "pk": 1, "fields": { "group": 3, "is_arduino": true, "is_type_reviewer": true, "is_type_staff": false, "is_default_role": false } }, { "model": "workflowAPI.customgroup", "pk": 2, "fields": { "group": 4, "is_arduino": false, "is_type_reviewer": true, "is_type_staff": false, "is_default_role": false } }, { "model": "workflowAPI.customgroup", "pk": 3, "fields": { "group": 2, "is_arduino": true, "is_type_reviewer": false, "is_type_staff": false, "is_default_role": true } }, { "model": "workflowAPI.customgroup", "pk": 4, "fields": { "group": 1, "is_arduino": false, "is_type_reviewer": false, "is_type_staff": false, "is_default_role": true } }, { "model": "workflowAPI.customgroup", "pk": 5, "fields": { "group": 5, "is_arduino": false, "is_type_reviewer": false, "is_type_staff": true, "is_default_role": false } }, { "model": "workflowAPI.customgroup", "pk": 6, "fields": { "group": 6, "is_arduino": true, "is_type_reviewer": false, "is_type_staff": true, "is_default_role": false } }, { "model": "workflowAPI.permission", "pk": 1, "fields": { "role": 2, "view_own_states": [1, 2, 3, 4], "view_other_states": [3, 4], "edit_own_states": [1], "del_own_states": [1] } }, { "model": "workflowAPI.permission", "pk": 2, "fields": { "role": 1, "view_own_states": [1, 2, 3, 4], "view_other_states": [3, 4], "edit_own_states": [1], "del_own_states": [1] } }, { "model": "workflowAPI.permission", "pk": 3, "fields": { "role": 3, "view_own_states": [1, 2, 3, 4], "view_other_states": [2, 3, 4], "edit_own_states": [1], "del_own_states": [1] } }, { "model": "workflowAPI.permission", "pk": 4, "fields": { "role": 4, "view_own_states": [1, 2, 3, 4], "view_other_states": [2, 3, 4], "edit_own_states": [1], "del_own_states": [1] } }, { "model": "workflowAPI.transition", "pk": 1, "fields": { "name": "Draft To Review", "from_state": 1, "to_state": 2, "restricted_for_creator": false, "only_for_creator": true, "event_creator": "Review in Progress", "history_creator": "Drafted and Sent for Review", "event_reviewer": "Review in progress", "history_reviewer": "Received for Review", "event_other": "Review in progress", "history_other": "Received for Review", "role": [1, 2] } }, { "model": "workflowAPI.transition", "pk": 2, "fields": { "name": "Review To Published", "from_state": 2, "to_state": 4, "restricted_for_creator": true, "only_for_creator": false, "event_creator": null, "history_creator": "Reviewed & Published", "event_reviewer": null, "history_reviewer": "Reviewed & Published", "event_other": null, "history_other": "Reviewed & Published", "role": [3, 4] } }, { "model": "workflowAPI.transition", "pk": 3, "fields": { "name": "Published to Reported", "from_state": 4, "to_state": 3, "restricted_for_creator": false, "only_for_creator": false, "event_creator": "Waiting for Report evaluation", "history_creator": "Reported", "event_reviewer": "Waiting for Report evaluation", "history_reviewer": "Reported", "event_other": "Waiting for Report evaluation", "history_other": "Reported", "role": [1, 2, 3, 4] } }, { "model": "workflowAPI.transition", "pk": 4, "fields": { "name": "Review to Draft", "from_state": 2, "to_state": 1, "restricted_for_creator": false, "only_for_creator": false, "event_creator": "Revision in progress", "history_creator": "Reverted for Revision", "event_reviewer": "Revision in progress", "history_reviewer": "Reverted for Revision", "event_other": "Revision in progress", "history_other": "Reverted for Revision", "role": [1, 2, 3, 4] } }, { "model": "workflowAPI.transition", "pk": 5, "fields": { "name": "Reported to Draft", "from_state": 3, "to_state": 1, "restricted_for_creator": true, "only_for_creator": false, "event_creator": "Revision in progress", "history_creator": "Received for revision", "event_reviewer": "Revision in progress", "history_reviewer": "Sent for revision", "event_other": "Revision in progress", "history_other": "Sent for revision", "role": [3, 4] } }, { "model": "workflowAPI.transition", "pk": 6, "fields": { "name": "Reported to Published", "from_state": 3, "to_state": 4, "restricted_for_creator": true, "only_for_creator": false, "event_creator": null, "history_creator": "Reviewed & Published", "event_reviewer": null, "history_reviewer": "Reviewed & Published", "event_other": null, "history_other": "Reviewed & Published", "role": [3, 4] } } ] ================================================ FILE: esim-cloud-backend/workflowAPI/models.py ================================================ from django.db import models from django.contrib.auth.models import Group from django.db.models.deletion import CASCADE, SET_NULL from django.contrib.auth import get_user_model from django.db.models.fields import related # State model which has been linked to circuits in publishAPI class State(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=200, null=False, unique=True) description = models.CharField(null=True, max_length=200) public = models.BooleanField(default=False) report = models.BooleanField(default=False) def __str__(self): return self.name # Extending the Django users to implement arduino and e-sim specific roles class CustomGroup(models.Model): def __str__(self): return "{}".format(self.group.name) group = models.OneToOneField(Group, unique=True, on_delete=CASCADE) is_arduino = models.BooleanField(default=False) is_type_reviewer = models.BooleanField(default=False) is_type_staff = models.BooleanField(default=False) is_default_role = models.BooleanField(default=False) class Permission(models.Model): role = models.OneToOneField(Group, related_name='permission_role', on_delete=CASCADE, unique=True, ) view_own_states = models.ManyToManyField(State, related_name="view_own_states", verbose_name='Can View own Project', # noqa blank=True) view_other_states = models.ManyToManyField(State, related_name="view_other_states", # noqa verbose_name='Can View other Project', # noqa blank=True) edit_own_states = models.ManyToManyField(State, related_name="edit_own_states", verbose_name='Can Edit Details and Status own Project', # noqa blank=True) del_own_states = models.ManyToManyField(State, related_name="del_own_states", verbose_name='Can Delete own Project', # noqa blank=True) def __str__(self): return self.role.name + " Permissions" # Transition models to handle switching of states. class Transition(models.Model): name = models.CharField(null=True, max_length=100) role = models.ManyToManyField(Group, related_name='role') from_state = models.ForeignKey(State, null=True, related_name='fromtransitions', on_delete=SET_NULL) to_state = models.ForeignKey(State, null=True, related_name='totransitions', on_delete=SET_NULL) restricted_for_creator = models.BooleanField(default=True, null=False, verbose_name="Transition allowed for all users of specified roles except creator") # noqa only_for_creator = models.BooleanField(default=False, null=False, verbose_name="Transition that ONLY the creator should be able to do it.") # noqa event_creator = models.CharField(blank=True, null=True, max_length=200, verbose_name='Event Text for the Creator') # noqa history_creator = models.CharField(blank=True, null=True, max_length=200, verbose_name='History Text for the Creator') # noqa event_reviewer = models.CharField(blank=True, null=True, max_length=200, verbose_name='Event Text for the Reviewer') # noqa history_reviewer = models.CharField(blank=True, null=True, max_length=200, verbose_name='History Text for the Reviewer') # noqa event_other = models.CharField(blank=True, null=True, max_length=200, verbose_name='Event Text for the Other User') # noqa history_other = models.CharField(blank=True, null=True, max_length=200, verbose_name='History Text for the Other User') # noqa def __str__(self): return self.name ================================================ FILE: esim-cloud-backend/workflowAPI/serializers.py ================================================ from rest_framework import fields, serializers from .models import CustomGroup, Transition, State from publishAPI.models import Report class UserRoleRetreieveSerializer(serializers.ModelSerializer): e_sim_reviewer = serializers.BooleanField() arduino_reviewer = serializers.BooleanField() is_arduino_staff = serializers.BooleanField() is_esim_staff = serializers.BooleanField() class Meta: model = CustomGroup fields = [ 'group', 'is_type_reviewer', 'arduino_reviewer', 'e_sim_reviewer', 'is_type_staff', 'is_arduino_staff', 'is_esim_staff', ] class StatusWithNotesSerializer(serializers.ModelSerializer): note = serializers.CharField(max_length=500) name = serializers.CharField(max_length=200) class Meta: model = State fields = ('name', 'note',) class StatusSerializer(serializers.ModelSerializer): class Meta: model = State fields = ('name',) class TransitionSerializer(serializers.ModelSerializer): class Meta: model = Transition fields = ('to_state',) class ReportStatusSerializer(serializers.ModelSerializer): class Meta: model = Report fields = ('id', 'approved') class ReportApprovalSerializer(serializers.ModelSerializer): state = StatusSerializer() reports = ReportStatusSerializer(many=True) class Meta: model = Report fields = ('reports', 'state') ================================================ FILE: esim-cloud-backend/workflowAPI/signals/__init__.py ================================================ ================================================ FILE: esim-cloud-backend/workflowAPI/signals/handlers.py ================================================ from django.db.models.signals import post_save from django.dispatch import receiver from django.conf import settings from django.contrib.auth.models import Group @receiver(post_save, sender=settings.AUTH_USER_MODEL) def save_profile(sender, instance, created, **kwargs): if created: groups = Group.objects.filter(customgroup__is_default_role=True) for group in groups: instance.groups.add(group) ================================================ FILE: esim-cloud-backend/workflowAPI/tests.py ================================================ from django.test import TestCase # Create your tests here. ================================================ FILE: esim-cloud-backend/workflowAPI/urls.py ================================================ from django.urls import path from .views import RetriveUserRoleView, ProjectStateView, \ RetriveProjectsViewSet, ReportedProjectsView urlpatterns = [ path('role/', RetriveUserRoleView.as_view(), name='getRole'), path('report/', ReportedProjectsView.as_view({'get': 'list_projects'}), name='listReportedProjects'), path('report/approve/', ReportedProjectsView.as_view({'post': 'approve_reports'}), name='approveProjects'), path('report/create/', ReportedProjectsView.as_view({'post': 'report_project'}), name='reportProject'), path('report/', ReportedProjectsView.as_view({'get': 'get_reports'}), name='getReports'), path('report/resolve/', ReportedProjectsView.as_view({'post': 'resolve'}), name='resolveProject'), path('state/', ProjectStateView.as_view(), name='state'), path('otherprojects/', RetriveProjectsViewSet.as_view(), name='otherCircuits') ] ================================================ FILE: esim-cloud-backend/workflowAPI/utils.py ================================================ from rest_framework.response import Response from rest_framework import status as http_status import uuid from .serializers import StatusSerializer from .models import Permission, State, Transition, Permission from publishAPI.models import TransitionHistory def ChangeStatus(self, status, project): if isinstance(project.project_id, uuid.UUID): try: user_roles = self.request.user.groups.all() except: # noqa return Exception({'message': 'No User Role'}) if project.author == self.request.user and Permission.objects.filter( role__in=user_roles, view_own_states=project.state).exists(): pass elif project.author != self.request.user and Permission.objects.filter( role__in=user_roles, view_other_states=project.state).exists(): pass else: return Exception( {'error': 'You are not authorized to edit the status.'}) circuit_transition = Transition.objects.get(from_state=project.state, to_state=State.objects.get( name=status)) roles = circuit_transition.role.all() if circuit_transition.from_state != project.state: return Exception( {'error': 'You are not authorized to edit the status.'}) else: if circuit_transition.only_for_creator is True and self.request.user == project.author: # noqa transition_history = TransitionHistory( project_id=project.project_id, transition_author=self.request.user, transition=circuit_transition, reviewer_notes='',) transition_history.save() project.state = circuit_transition.to_state project.save() state = project.state serialized = StatusSerializer(state) return serialized.data elif circuit_transition.only_for_creator is False: roles_set = set(roles) user_roles_set = set(user_roles) if user_roles_set.intersection(roles_set): intersection = user_roles_set.intersection(roles_set) for user_role in intersection: if user_role.customgroup.is_arduino is project.is_arduino: # noqa if circuit_transition.restricted_for_creator is True and project.author == self.request.user: # noqa return Response({ 'error': 'You are not authorized to edit the status as it is not allowed for creator.'}, # noqa status=http_status.HTTP_401_UNAUTHORIZED) else: transition_history = TransitionHistory( project_id=project.project_id, transition_author=self.request.user, transition=circuit_transition, reviewer_notes='',) transition_history.save() project.state = circuit_transition.to_state project.save() state = project.state serialized = StatusSerializer(state) return serialized.data return Exception({ 'error': 'You are not authorized to edit the status as you dont have the role'}) # noqa else: return Exception({ 'error': 'You are not authorized to edit the status as you dont have the role'}) # noqa else: return Exception( { 'error': 'You are not authorized to edit the status as it is only allowed for creator.'}) # noqa ================================================ FILE: esim-cloud-backend/workflowAPI/views.py ================================================ from os import confstr import uuid from rest_framework.views import APIView from .serializers import StatusSerializer, ReportApprovalSerializer, \ StatusWithNotesSerializer, \ UserRoleRetreieveSerializer from .models import Permission, State, Transition, Permission from publishAPI.models import Project, Report, TransitionHistory from publishAPI.serializers import ProjectSerializer, ReportSerializer, \ ReportDescriptionSerializer from rest_framework.response import Response from drf_yasg.utils import swagger_auto_schema from rest_framework.permissions import IsAuthenticated from rest_framework import viewsets, status as http_status from rest_framework.parsers import FormParser, JSONParser class RetriveUserRoleView(APIView): """ Request to retrive roles """ parser_classes = (FormParser, JSONParser) permission_classes = [IsAuthenticated] @swagger_auto_schema(responses={200: UserRoleRetreieveSerializer}) def get(self, request): userRoles = self.request.user.groups.all() data = [] reviewer = False e_sim_reviewer = False arduino_reviewer = False staff = False e_sim_staff = False arduino_staff = False for userRole in userRoles: data.append(userRole.name) if userRole.customgroup is not None and userRole.customgroup.is_type_reviewer: # noqa reviewer = True if userRole.customgroup.is_arduino is True: arduino_reviewer = True else: e_sim_reviewer = True if userRole.customgroup is not None and userRole.customgroup.is_type_staff: # noqa staff = True if userRole.customgroup.is_arduino is True: arduino_staff = True else: e_sim_staff = True serializer = UserRoleRetreieveSerializer( data={"group": data, "is_type_reviewer": reviewer, "e_sim_reviewer": e_sim_reviewer, "arduino_reviewer": arduino_reviewer, "is_type_staff": staff, "is_arduino_staff": arduino_staff, "is_esim_staff": e_sim_staff}) try: serializer.is_valid() return Response(serializer.data) except: # noqa serializer.is_valid() return Response(serializer.errors) class RetriveProjectsViewSet(APIView): """ Retrive circuits for futher evaluation """ parser_classes = (FormParser, JSONParser) serializer_class = ProjectSerializer permission_classes = [IsAuthenticated] @swagger_auto_schema(responses={200: ProjectSerializer}) def get(self, request): try: groups = self.request.user.groups.filter(customgroup__is_type_reviewer=True) # noqa except: # noqa return Response({'error': 'You are not authorized!'}, status=http_status.HTTP_401_UNAUTHORIZED) transitions = Transition.objects.filter( role__in=groups, only_for_creator=False).distinct().exclude(from_state__public=True, # noqa from_state__report=False) # noqa projects = Project.objects.none() for transition in transitions: if transition.from_state.public is False or transition.from_state.report is True: # noqa roles_set = set(transition.role.all()) user_roles_set = set(groups) if user_roles_set.intersection(roles_set): intersection = user_roles_set.intersection(roles_set) for user_role in intersection: if user_role.customgroup.is_arduino is False: project = Project.objects.filter( state=transition.from_state, is_arduino=False).exclude( # noqa author=self.request.user) projects = projects | project else: project = Project.objects.filter( state=transition.from_state, is_arduino=True).exclude( # noqa author=self.request.user) projects = projects | project if projects == Project.objects.none(): return Response(status=http_status.HTTP_404_NOT_FOUND) else: serialized = ProjectSerializer(projects, many=True) return Response(serialized.data) class ProjectStateView(APIView): """ Requests to set and get possible to_states states """ parser_classes = (FormParser, JSONParser) serializer_class = StatusSerializer permission_classes = [IsAuthenticated] def get(self, request, project_id): if isinstance(project_id, uuid.UUID): try: project = Project.objects.get( project_id=project_id) except Project.DoesNotExist: return Response({'error': 'Project does not Exist'}, status=http_status.HTTP_404_NOT_FOUND) circuit_transition = Transition.objects.filter( from_state=project.state, role__in=self.request.user.groups.all()).distinct() states = [] for transition in circuit_transition: if transition.from_state.public is False or transition.from_state.report is True: # noqa if transition.only_for_creator is True and self.request.user is project.author: # noqa states.append(transition.to_state.name) else: if transition.restricted_for_creator is True and project.author == request.user: # noqa pass else: states.append(transition.to_state.name) states = list(set(states)) if states == []: return Response(status=http_status.HTTP_200_OK) else: return Response(states, status=http_status.HTTP_200_OK) @swagger_auto_schema(responses={200: StatusSerializer}, request_body=StatusWithNotesSerializer) def post(self, request, project_id): if isinstance(project_id, uuid.UUID): try: project = Project.objects.get( project_id=project_id) except Project.DoesNotExist: return Response({'error': 'Does not Exist'}, status=http_status.HTTP_404_NOT_FOUND) try: user_roles = self.request.user.groups.all() except: # noqa return Response(data={'message': 'No User Role'}, status=http_status.HTTP_404_NOT_FOUND) if project.author == self.request.user and Permission.objects.filter( # noqa role__in=user_roles, view_own_states=project.state).exists(): pass elif project.author != self.request.user and Permission.objects.filter( # noqa role__in=user_roles, view_other_states=project.state).exists(): pass else: return Response(status=http_status.HTTP_401_UNAUTHORIZED) circuit_transition = Transition.objects.get( from_state=project.state, to_state=State.objects.get(name=request.data['name'])) roles = circuit_transition.role.all() if circuit_transition.from_state != project.state: return Response( {'error': 'You are not authorized to edit the status.'}, status=http_status.HTTP_401_UNAUTHORIZED) else: if circuit_transition.only_for_creator is True and self.request.user == project.author: # noqa transition_history = TransitionHistory( project_id=project_id, transition_author=request.user, transition=circuit_transition, reviewer_notes=request.data['note']) transition_history.save() project.state = circuit_transition.to_state project.save() state = project.state serialized = StatusSerializer(state) return Response(serialized.data) elif circuit_transition.only_for_creator is False: roles_set = set(roles) user_roles_set = set(user_roles) if user_roles_set.intersection(roles_set): intersection = user_roles_set.intersection(roles_set) for user_role in intersection: if user_role.customgroup.is_arduino is project.is_arduino: # noqa if circuit_transition.restricted_for_creator is True and project.author == request.user: # noqa return Response({ 'error': 'You are not authorized to edit the status as it is not ' # noqa 'allowed for creator.'}, status=http_status.HTTP_401_UNAUTHORIZED) # noqa else: transition_history = TransitionHistory( project_id=project_id, transition_author=request.user, transition=circuit_transition, reviewer_notes=request.data['note']) transition_history.save() project.state = circuit_transition.to_state project.save() state = project.state serialized = StatusSerializer(state) return Response(serialized.data) return Response( { 'error': 'You are not authorized to edit the status as you dont have the role'}, # noqa status=http_status.HTTP_401_UNAUTHORIZED) else: return Response( { 'error': 'You are not authorized to edit the status as you dont have the role.'}, # noqa status=http_status.HTTP_401_UNAUTHORIZED) else: return Response( { 'error': 'You are not authorized to edit the status as it is only allowed for creator.'}, # noqa status=http_status.HTTP_401_UNAUTHORIZED) class ReportedProjectsView(viewsets.ViewSet): parser_classes = (FormParser, JSONParser) permission_classes = [IsAuthenticated] @swagger_auto_schema(request_body=ReportDescriptionSerializer) def report_project(self, request, project_id): ''' Request to report a project. ''' try: state = State.objects.get(report=True) except State.DoesNotExist: return Response({'Message': 'No reported State implemented'}, status=http_status.HTTP_404_NOT_FOUND) try: project = Project.objects.get( project_id=project_id) except Project.DoesNotExist: return Response({'Message': 'No projects found'}, status=http_status.HTTP_404_NOT_FOUND) if project.is_reported is False and project.state != State.objects.get( report=True): transition_history = TransitionHistory(project_id=project_id, transition_author=request.user, # noqa transition=Transition.objects.get( # noqa from_state=project.state, # noqa to_state=state) ) transition_history.save() project.state = state project.is_reported = True report = Report(description=request.data['description'], project=project, reporter=self.request.user) project.save() report.save() return Response(status=http_status.HTTP_200_OK) @swagger_auto_schema(responses={200: ProjectSerializer}) def list_projects(self, request): ''' Request to retrieve reported projects. ''' try: projects = Project.objects.filter(is_reported=True) except Project.DoesNotExist: return Response({'Message': 'No projects found'}, status=http_status.HTTP_404_NOT_FOUND) serialized = ProjectSerializer(projects, many=True) return Response(serialized.data, status=http_status.http_status.HTTP_200_OK) @swagger_auto_schema(request_body=ReportApprovalSerializer) def approve_reports(self, request, project_id): try: groups = self.request.user.groups.all() except: # noqa return Response({'error': 'You are not authorized!'}, status=http_status.HTTP_401_UNAUTHORIZED) for group in groups: if group.customgroup.is_type_reviewer is True: for report in request.data['reports']: temp = Report.objects.get(id=report['id']) temp.approved = report['approved'] if report['approved'] is False: temp.report_open = False temp.save() project = Project.objects.get( project_id=project_id) state = State.objects.get( name=request.data['state']['name']) transition = Transition.objects.get( from_state=project.state, to_state=state) transition_history = TransitionHistory( project_id=project_id, transition_author=self.request.user, transition=transition) transition_history.save() project.state = state if state.public: project.is_reported = False project.save() return Response({"Approval sent"}) else: return Response({'error': 'You are not authorized!'}, status=http_status.HTTP_401_UNAUTHORIZED) @swagger_auto_schema(responses={200: ReportSerializer}) def get_reports(self, request, project_id): ''' Request to get reports of a specific project. ''' try: project = Project.objects.get( project_id=project_id, is_reported=True) except Project.DoesNotExist: return Response({"Error": "No project found"}, status=http_status.HTTP_404_NOT_FOUND) try: if self.request.user == project.author: open_reports = Report.objects.filter( project=project, report_open=True, approved=None) resolved_reports = [] approved_reports = Report.objects.filter( project=project, report_open=True, approved=True) else: open_reports = Report.objects.filter( project=project, report_open=True, approved=None) resolved_reports = Report.objects.filter( project=project, report_open=False) approved_reports = Report.objects.filter( project=project, report_open=True, approved=True) except Report.DoesNotExist: return Response({"Message": "No reports found"}, status=http_status.HTTP_404_NOT_FOUND) open_serialized = ReportSerializer(open_reports, many=True) resolved_serialized = ReportSerializer(resolved_reports, many=True) approved_serializer = ReportSerializer(approved_reports, many=True) return Response( {"open": open_serialized.data, "closed": resolved_serialized.data, "approved": approved_serializer.data}, status=http_status.HTTP_200_OK) @swagger_auto_schema() def resolve(self, request, project_id): ''' Request to resolve the projects. ''' try: groups = self.request.user.groups.all() except: # noqa return Response({'error': 'You are not authorized!'}, status=http_status.HTTP_401_UNAUTHORIZED) for group in groups: if group.customgroup.is_type_reviewer is True: try: project = Project.objects.get( project_id=project_id) except Project.DoesNotExist: return Response({"Error": "No project found"}, status=http_status.HTTP_404_NOT_FOUND) try: reports = Report.objects.filter(project=project) except Report.DoesNotExist: return Response({"Message": "No reports found"}, status=http_status.HTTP_404_NOT_FOUND) if self.request.user != project.author: for report in reports: report.report_open = False report.resolver = self.request.user report.save() try: transition_history = TransitionHistory( project_id=project_id, transition_author=request.user, transition=Transition.objects.get( from_state=project.state, to_state=State.objects.get( name=request.data['name'])) ) project.state = State.objects.get( name=request.data['name']) transition_history.save() except: # noqa pass project.is_reported = False project.save() return Response( {"Message": "Changed Reported Project State"}, status=http_status.HTTP_200_OK) else: return Response({'error': 'You are not authorized!'}, status=http_status.HTTP_401_UNAUTHORIZED) else: return Response({'error': 'You are not authorized!'}, status=http_status.HTTP_401_UNAUTHORIZED) ================================================ FILE: first_run.dev.sh ================================================ #!/bin/bash #Clear old db files echo 'Removing old files' rm -rf mysql_data rm -rf postgres_data rm -rf mongo_data echo 'Deleting Existing Migrations' find ./esim-cloud-backend -name "migrations" -type d -prune -exec rm -rf '{}' + #For Slow Systems / Systems with less memory export DOCKER_CLIENT_TIMEOUT=120 export COMPOSE_HTTP_TIMEOUT=120 #Build Containers echo 'Building Containers, might take a while' docker-compose -f docker-compose.dev.yml --env-file .env build # MYSQL does not play well with other containers if not allowed to finish config beforehand echo 'Waiting for DB to finish its thing....' docker-compose -f docker-compose.dev.yml --no-recreate --env-file .env -d up db echo 'Waiting for 1 Minute' sleep 1m echo 'Applying Database Migrations' docker-compose -f docker-compose.dev.yml --env-file .env run --rm django /bin/sh migrations.sh echo 'Copying Pre-Defined eSim-Gallery' if [ ! -d esim-cloud-backend/file_storage ]; then mkdir esim-cloud-backend/file_storage fi cp esim-cloud-backend/workflowAPI/fixtures/circuit_images_esim esim-cloud-backend/file_storage -r ================================================ FILE: guidelines-checklist/contributing-guidelines.md ================================================ # Contributing Guidelines * Follow the django coding style: https://docs.djangoproject.com/en/dev/internals/contributing/writing-code/coding-style/ * If you are modifying or adding a feature then write unit test cases. * Avoid unnecessary modification of existing code. Ofcourse, you are free to optimize and resolve bugs. * Avoid duplication of code * Break your code/logic into different functions and add comments for better understanding. * If your contributions have some dependencies or they modify existing structure, then update the README.md file accordingly. Also feel free to add more documentation files. * Commit your code on a regular basis with meaningful commit messages. ================================================ FILE: guidelines-checklist/new-issue-guidelines.md ================================================ # Creating a new issue ## Title Enter a crisp and meaningful title. ## Description * Describe your issue in details. * If its a bug or error provide animated image (gif) or screenshots supporting your issue and showing the problem. * If its a new feature which has changes in UI, provide wireframes that will help us visualize your suggested feature. * Mention an approximate time that will required for you to complete and make a pull request (Only for developers). You can ignore this if you are just reporting or suggesting. * Tag the issue appropriately, whether it belongs to 'eSim' or 'Arduino'. Choose the type of issue 'enhancement', 'bug' etc. * Finally, mention 'Assignee: @YourGitHubUsername'. This will let the community know that you are addressing this issue. You can ignore this if you are just reporting or suggesting. ================================================ FILE: guidelines-checklist/pullrequest-guidelines.md ================================================ # Pull request A pull request is one of the most essential parts of sharing your contributions with us. Please make sure that you read and follow the guidelines. This will help us in accepting the pull request easily. ## Guidelines * Each pull request should be for a single feature or addressing a single problem only. * Avoid handling multiple features or bug fixes into one pull request. * Ensure that you create it for the appropriate branch only. * Write a brief description about your contribution and what problem does it solve. A pull request with good description is always appreciated and will be accepted easily. * Once the pull request is made, GitHub actions will show linting errors if any and the different test results. If all goes well then ‘All checks have passed’ will be displayed on your pull request. If any one fails, you can check the details and act accordingly.