diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000000000000000000000000000000000000..bf53325e334e599f2f796248103bcce2c988fe47 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,202 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2019 Stichting Nederlandse Wetenschappelijk Onderzoek Instituten, +ASTRON Netherlands Institute for Radio Astronomy + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README.md b/README.md index f024ee2adba66d8d588a2905d43ab5f1a826214b..af1c3ff87e5331766e3ae9971a9861f544dc5392 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,11 @@ -# Tango_code_generator +# Tango_code_generator* +This program is currently on hold and does not yet contain the actual generator parts. +Currently this program reads all the .yaml files in the /YAML_files folder. +These then get analysed, stored in a more accessible manner for later usage and logged to output_devices.csv. + + +Requires pyyaml +```pip install pyyaml``` + +To start the program, simply run main.py diff --git a/code_generator.py b/code_generator.py deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/control_I2C.yaml b/control_I2C.yaml deleted file mode 100644 index a2ce8e7eb298b96b34674414d8eb57a8a56eda6b..0000000000000000000000000000000000000000 --- a/control_I2C.yaml +++ /dev/null @@ -1,219 +0,0 @@ -PCB_name: RCU-ADC -PCB_version: 1.0 - -#This is the I2C devices in the RCU -I2C_devices: - - dev_name: IO1 - dev_description: IO-Expander for filter selection - dev_address: 0x75 - dev_device: TCA9539 - dev_registers: - - reg_name: CONF1 - reg_description: Direction of IO pins 0..7 - reg_addr: 6 - - reg_name: CONF2 - reg_description: Direction of IO pints 8..15 - reg_addr: 7 - - reg_name: OUT1 - reg_description: Ouput port register 0..7 - reg_addr: 2 - ref_default: 0 - - reg_name: OUT2 - reg_description: Ouput port register 8..15 - reg_addr: 3 - ref_default: 0 - - - dev_name: IO3 - dev_description: IO-Expander for ADC control - dev_address: 0x20 - dev_device: TCA6416 - dev_registers: - - reg_name: CONF1 - reg_description: Direction of IO pins 0..7 - reg_addr: 6 - - reg_name: CONF2 - reg_description: Direction of IO pints 8..15 - reg_addr: 7 - - reg_name: IN1 - reg_description: Ouput port register 0..7 - reg_addr: 0 - - reg_name: IN2 - reg_description: Ouput port register 0..7 - reg_addr: 1 - - reg_name: OUT1 - reg_description: Ouput port register 0..7 - reg_addr: 2 - reg_default: 0x0F - - reg_name: OUT2 - reg_description: Ouput port register 8..15 - reg_addr: 3 - reg_default: 0x0F - - - dev_name: IO2 - dev_description: IO-Expander for ON/OFF, Band, BUFx2 - dev_address: 0x76 - dev_device: TCA9539 - dev_registers: - - reg_name: CONF1 - reg_description: Direction of IO pins 0..7 - reg_addr: 6 - - reg_name: CONF2 - reg_description: Direction of IO pints 8..15 - reg_addr: 7 - - reg_name: OUT1 - reg_description: Ouput port register 0..7 - reg_addr: 2 - ref_default: 0 - - reg_name: OUT2 - reg_description: Ouput port register 8..15 - reg_addr: 3 - ref_default: 0 - - - dev_name: UC - dev_description: RCU microcontroller - dev_address: 0x40 - dev_registers: - - reg_name: ID - reg_description: Device ID - reg_addr: 0 - - - dev_name: ROM - dev_description: IO-Expander for filter selection - dev_address: 0x53 - dev_registers: - - reg_name: ctr_len - reg_description: Length of control data - reg_addr: 0 - - reg_name: ctr_dat - reg_description: Control data (protocol buffers) - reg_addr: 2 - - - dev_name: ADCm - dev_description: Monitor ADC on RCU - dev_address: 0x14 - dev_device: LTC2495 - dev_registers: - - reg_name: Ch0 - reg_addr: 0xB0 - - reg_name: Ch1 - reg_addr: 0xB8 - - reg_name: Ch2 - reg_addr: 0xB1 - - reg_name: Ch3 - reg_addr: 0xB9 - - reg_name: Ch4 - reg_addr: 0xB2 - - reg_name: Ch5 - reg_addr: 0xBA - - reg_name: Ch6 - reg_addr: 0xB3 - - reg_name: Ch7 - reg_addr: 0xBB - -#This 'special' devices that uses I2C - -HBAT_devices: - - dev_name: HBAT - dev_number: 3 - dev_address: [0x41,0x42,0x43] - dev_description: Virtual HBAT0 interface - dev_registers: - - reg_name: X - reg_addr: 0 - reg_description: X delay register - reg_width: 16 - - reg_name: Y - reg_addr: 1 - reg_description: Y delay register - reg_width: 16 - - reg_name: Version - reg_addr: 127 - reg_description: HBAT server version - reg_width: 16 - - -SPI_devices: - - dev_name: ADC - dev_number: 3 - dev_description: I2C-SPI bridge to ADC - dev_device: AD9683 - dev_CLK : [IO3.OUT1.1 ,IO3.OUT1.3 ,IO3.OUT1.5 ] - dev_SDO : [IO3.OUT1.0 ,IO3.OUT1.2 ,IO3.OUT1.4 ] - dev_SDI : [IO3.IN1.0 ,IO3.IN1.2 ,IO3.IN1.4 ] - dev_SDIO_dir: [IO3.CONF1.0,IO3.CONF1.2,IO3.CONF1.4] - dev_CS : [IO3.OUT2.0 ,IO3.OUT2.1 ,IO3.OUT2.2 ] - dev_registers: - - reg_name: PLL_stat - reg_description: PLL locked status - reg_addr: 0x0A - - reg_name: JESD_control1 - reg_description: JESD link control - reg_addr: 0x5F - - reg_name: CML_adjust - reg_description: CML output adjust - reg_addr: 0x15 - - reg_name: Update - reg_description: Global device uptate - reg_addr: 0xFF - -Variables: - - var_name: Att - var_description: Gain of ADC0 - var_number: 3 - var_dev: [IO1.OUT1,IO1.OUT2,IO2.OUT1] - var_width: 5 - var_max: [21,21,24] - var_R/W: W - - - var_name: Pwr_dig - var_description: Enable LDOs - var_dev: IO2.OUT1 - var_width: 1 - var_bitoffset: 6 - var_R/W: W - - - var_name: Pwr_Ant - var_description: Switch power of Antenna 1 - var_number: 3 - var_dev: [IO1.OUT1,IO1.OUT1,IO1.OUT2] - var_width: 1 - var_bitoffset: [6,7,6] - var_R/W: W - - - var_name: Band - var_description: 10/30MHz band select - var_number: 3 - var_dev: IO2.OUT2 - var_width: 2 - var_bitoffset: [0,2,4] - var_R/W: W - - - var_name: LED - var_description: LEDs on PCB - var_number: 2 - var_dev: IO2.OUT2 - var_width: 1 - var_bitoffset: [6,7] - var_R/W: W - - - var_name: ADC_lock - var_number: 3 - var_description: Check ADC lock and JESD link ready - var_dev: ADC.PLL_stat - var_width: 8 - var_R/W: R - - - var_name: V_2v5 - var_description: 2.5V on PCB - var_dev: ADCm.Ch1 - var_width: 24 - var_scale: 1.97e-7 - var_R/W: R - - - var_name: I_Ant - var_number: 3 - var_description: Antenna currents - var_dev: [ADCm.Ch4,ADCm.Ch5,ADCm.Ch6] - var_width: 24 - var_scale: 12 - var_R/W: R \ No newline at end of file diff --git a/main.py b/main.py index c91f4db88d23079ac707ea6f87e86ac77720a18f..65fad4400d4b9c3398b9aa4f1487b6ea76562e17 100644 --- a/main.py +++ b/main.py @@ -3,68 +3,68 @@ from yaml_reader import * -from opcua import ua, uamethod, Server - -import sys -import time -import logging +# from opcua import ua, uamethod, Server +# +# import sys +# import time +# import logging # import numpy # from tango import AttrQuality, AttrWriteType, DispLevel, DevState, DebugIt # from tango.server import Device, attribute, command, pipe, device_property -write_data = "test" - -class device_template: - """ - List of all useful attributes - """ - - def __init__(self): - pass - - def create_device_XMI(self, device): - template = f""" - <attributes name="{device.name}_{device.RW}" attType="Scalar" rwType="{device.RW}" displayLevel="OPERATOR" polledPeriod="{device.polling_period}" maxX="" maxY="" allocReadMember="true" isDynamic="false"> - <dataType xsi:type="pogoDsl:{device.dtype}"/> - <changeEvent fire="false" libCheckCriteria="false"/> - <archiveEvent fire="false" libCheckCriteria="false"/> - <dataReadyEvent fire="false" libCheckCriteria="true"/> - <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> - <properties description="{device.description}" label="{device.label}" unit="{device.unit}" standardUnit="{device.standard_unit}" - displayUnit="{device.display_unit}" format="" maxValue="{device.max}" minValue="{device.min}" maxAlarm="{device.max_alarm}" - minAlarm="{device.min_alarm}" maxWarning="{device.max_warn}" minWarning="{device.min_warn}" {device.deltaTime}="" {device.deltaValue}=""/> - </attributes> - """ - return template - - -class device_instance: - def __init__(self, attr_key): - self.attribute_mapping = {} - self.attribute_key = attr_key - - - def read_func_R(self): - """Return the LED_R attribute.""" - - self.read_value = self.attribute_mapping["LED_R"].get_value() - return self.read_value - - def read_func_RW(self): - - """Return the LED_RW attribute.""" - self.read_RW = self.attribute_mapping["LED_RW"].get_value() - return self.read_RW - - # PROTECTED REGION END # // RCUSCC.LED_RW_read - - def write_func_RW(self, value): - # PROTECTED REGION ID(RCUSCC.LED_RW_write) ENABLED START # - """Set the LED_RW attribute.""" - self.attribute_mapping["LED_RW"].set_value(value) - self.write_value_RW = value - # PROTECTED REGION END # // RCUSCC.LED_RW_write +# write_data = "test" +# +# class device_template: +# """ +# List of all useful attributes +# """ +# +# def __init__(self): +# pass +# +# def create_device_XMI(self, device): +# template = f""" +# <attributes name="{device.name}_{device.RW}" attType="Scalar" rwType="{device.RW}" displayLevel="OPERATOR" polledPeriod="{device.polling_period}" maxX="" maxY="" allocReadMember="true" isDynamic="false"> +# <dataType xsi:type="pogoDsl:{device.dtype}"/> +# <changeEvent fire="false" libCheckCriteria="false"/> +# <archiveEvent fire="false" libCheckCriteria="false"/> +# <dataReadyEvent fire="false" libCheckCriteria="true"/> +# <status abstract="false" inherited="false" concrete="true" concreteHere="true"/> +# <properties description="{device.description}" label="{device.label}" unit="{device.unit}" standardUnit="{device.standard_unit}" +# displayUnit="{device.display_unit}" format="" maxValue="{device.max}" minValue="{device.min}" maxAlarm="{device.max_alarm}" +# minAlarm="{device.min_alarm}" maxWarning="{device.max_warn}" minWarning="{device.min_warn}" {device.deltaTime}="" {device.deltaValue}=""/> +# </attributes> +# """ +# return template +# +# +# class device_instance: +# def __init__(self, attr_key): +# self.attribute_mapping = {} +# self.attribute_key = attr_key +# +# +# def read_func_R(self): +# """Return the LED_R attribute.""" +# +# self.read_value = self.attribute_mapping["LED_R"].get_value() +# return self.read_value +# +# def read_func_RW(self): +# +# """Return the LED_RW attribute.""" +# self.read_RW = self.attribute_mapping["LED_RW"].get_value() +# return self.read_RW +# +# # PROTECTED REGION END # // RCUSCC.LED_RW_read +# +# def write_func_RW(self, value): +# # PROTECTED REGION ID(RCUSCC.LED_RW_write) ENABLED START # +# """Set the LED_RW attribute.""" +# self.attribute_mapping["LED_RW"].set_value(value) +# self.write_value_RW = value +# # PROTECTED REGION END # // RCUSCC.LED_RW_write class generator: @@ -73,6 +73,10 @@ class generator: self.the_data = yaml_reader() self.the_data.start_read() self.the_data.group_groups() + self.the_data.log_data() + + #NOTE: does not contain the actual generator, just the code to read the YAML files. + stuff = generator() diff --git a/output_devices.csv b/output_devices.csv index 42f891a8bb32beb3beed254b87e87d7bf7e8d06f..7c3f81c6e685a1e5648ce748c04430cabf1e7329 100644 --- a/output_devices.csv +++ b/output_devices.csv @@ -1 +1,82 @@ -"RCU01","Frequency","None","RW","None","None","1e-6""RCU01","Frequency","None","RW","None","None","1e-6""RCU01","locked","None","RW","None","None","None""RCU01","SYNC","None","RW","None","None","None""RCU01","CML","None","RW","None","None","None""RCU01","JESD","None","RW","None","None","None""RCU01","locked","None","RW","None","None","None""RCU01","SYNC","None","RW","None","None","None""RCU01","CML","None","RW","None","None","None""RCU01","JESD","None","RW","None","None","None""RCU01","locked","None","RW","None","None","None""RCU01","SYNC","None","RW","None","None","None""RCU01","CML","None","RW","None","None","None""RCU01","JESD","None","RW","None","None","None""RCU01","Attenuator1","None","RW","21","None","None""RCU01","Attenuator2","None","RW","21","None","None""RCU01","Attenuator3","None","RW","24","None","None""RCU01","Pwr_dig","Enable LDOs","RO","None","None","None""RCU01","Band3","None","RW","None","None","None""RCU01","Band1","None","RW","None","None","None""RCU01","Band2","None","RW","None","None","None""RCU01","LED0","Front panel LEDs, 0=On","RW","None","None","None""RCU01","Temperature","None","RO","None","None","0.00421""RCU01","Dth3_Pwr","None","RW","None","None","None""RCU01","Dth2_Pwr","None","RW","None","None","None""RCU02","Frequency","None","RW","None","None","1e-6""RCU02","Frequency","None","RW","None","None","1e-6""RCU02","locked","None","RW","None","None","None""RCU02","SYNC","None","RW","None","None","None""RCU02","CML","None","RW","None","None","None""RCU02","JESD","None","RW","None","None","None""RCU02","locked","None","RW","None","None","None""RCU02","SYNC","None","RW","None","None","None""RCU02","CML","None","RW","None","None","None""RCU02","JESD","None","RW","None","None","None""RCU02","locked","None","RW","None","None","None""RCU02","SYNC","None","RW","None","None","None""RCU02","CML","None","RW","None","None","None""RCU02","JESD","None","RW","None","None","None""RCU02","Attenuator1","None","RW","21","None","None""RCU02","Attenuator2","None","RW","21","None","None""RCU02","Attenuator3","None","RW","24","None","None""RCU02","Pwr_dig","Enable LDOs","RO","None","None","None""RCU02","Band3","None","RW","None","None","None""RCU02","Band1","None","RW","None","None","None""RCU02","Band2","None","RW","None","None","None""RCU02","LED0","Front panel LEDs, 0=On","RW","None","None","None""RCU02","Temperature","None","RO","None","None","0.00421""RCU02","Dth3_Pwr","None","RW","None","None","None""RCU02","Dth2_Pwr","None","RW","None","None","None""RCU03","Frequency","None","RW","None","None","1e-6""RCU03","Frequency","None","RW","None","None","1e-6""RCU03","locked","None","RW","None","None","None""RCU03","SYNC","None","RW","None","None","None""RCU03","CML","None","RW","None","None","None""RCU03","JESD","None","RW","None","None","None""RCU03","locked","None","RW","None","None","None""RCU03","SYNC","None","RW","None","None","None""RCU03","CML","None","RW","None","None","None""RCU03","JESD","None","RW","None","None","None""RCU03","locked","None","RW","None","None","None""RCU03","SYNC","None","RW","None","None","None""RCU03","CML","None","RW","None","None","None""RCU03","JESD","None","RW","None","None","None""RCU03","Attenuator1","None","RW","21","None","None""RCU03","Attenuator2","None","RW","21","None","None""RCU03","Attenuator3","None","RW","24","None","None""RCU03","Pwr_dig","Enable LDOs","RO","None","None","None""RCU03","Band3","None","RW","None","None","None""RCU03","Band1","None","RW","None","None","None""RCU03","Band2","None","RW","None","None","None""RCU03","LED0","Front panel LEDs, 0=On","RW","None","None","None""RCU03","Temperature","None","RO","None","None","0.00421""RCU03","Dth3_Pwr","None","RW","None","None","None""RCU03","Dth2_Pwr","None","RW","None","None","None""CLK","locked","None","RO","None","None","None""CLK","IGNORE_PPS","None","RW","None","None","None""CLK","ENABLE_PWR","None","RW","None","None","None""CLK","STAT1","None","RW","None","None","None""CLK","CONF","None","RW","None","None","None""CLK","OUT","None","RW","None","None","None""CLK","IN","None","RW","None","None","None" \ No newline at end of file +"RCU01","Frequency","None","RW","None","None","1e-6" +"RCU01","Frequency","None","RW","None","None","1e-6" +"RCU01","locked","None","RW","None","None","None" +"RCU01","SYNC","None","RW","None","None","None" +"RCU01","CML","None","RW","None","None","None" +"RCU01","JESD","None","RW","None","None","None" +"RCU01","locked","None","RW","None","None","None" +"RCU01","SYNC","None","RW","None","None","None" +"RCU01","CML","None","RW","None","None","None" +"RCU01","JESD","None","RW","None","None","None" +"RCU01","locked","None","RW","None","None","None" +"RCU01","SYNC","None","RW","None","None","None" +"RCU01","CML","None","RW","None","None","None" +"RCU01","JESD","None","RW","None","None","None" +"RCU01","Attenuator1","None","RW","21","None","None" +"RCU01","Attenuator2","None","RW","21","None","None" +"RCU01","Attenuator3","None","RW","24","None","None" +"RCU01","Pwr_dig","Enable LDOs","RO","None","None","None" +"RCU01","Band3","None","RW","None","None","None" +"RCU01","Band1","None","RW","None","None","None" +"RCU01","Band2","None","RW","None","None","None" +"RCU01","LED0","Front panel LEDs, 0=On","RW","None","None","None" +"RCU01","Temperature","None","RO","None","None","0.00421" +"RCU01","Dth3_Pwr","None","RW","None","None","None" +"RCU01","Dth2_Pwr","None","RW","None","None","None" +"RCU02","Frequency","None","RW","None","None","1e-6" +"RCU02","Frequency","None","RW","None","None","1e-6" +"RCU02","locked","None","RW","None","None","None" +"RCU02","SYNC","None","RW","None","None","None" +"RCU02","CML","None","RW","None","None","None" +"RCU02","JESD","None","RW","None","None","None" +"RCU02","locked","None","RW","None","None","None" +"RCU02","SYNC","None","RW","None","None","None" +"RCU02","CML","None","RW","None","None","None" +"RCU02","JESD","None","RW","None","None","None" +"RCU02","locked","None","RW","None","None","None" +"RCU02","SYNC","None","RW","None","None","None" +"RCU02","CML","None","RW","None","None","None" +"RCU02","JESD","None","RW","None","None","None" +"RCU02","Attenuator1","None","RW","21","None","None" +"RCU02","Attenuator2","None","RW","21","None","None" +"RCU02","Attenuator3","None","RW","24","None","None" +"RCU02","Pwr_dig","Enable LDOs","RO","None","None","None" +"RCU02","Band3","None","RW","None","None","None" +"RCU02","Band1","None","RW","None","None","None" +"RCU02","Band2","None","RW","None","None","None" +"RCU02","LED0","Front panel LEDs, 0=On","RW","None","None","None" +"RCU02","Temperature","None","RO","None","None","0.00421" +"RCU02","Dth3_Pwr","None","RW","None","None","None" +"RCU02","Dth2_Pwr","None","RW","None","None","None" +"RCU03","Frequency","None","RW","None","None","1e-6" +"RCU03","Frequency","None","RW","None","None","1e-6" +"RCU03","locked","None","RW","None","None","None" +"RCU03","SYNC","None","RW","None","None","None" +"RCU03","CML","None","RW","None","None","None" +"RCU03","JESD","None","RW","None","None","None" +"RCU03","locked","None","RW","None","None","None" +"RCU03","SYNC","None","RW","None","None","None" +"RCU03","CML","None","RW","None","None","None" +"RCU03","JESD","None","RW","None","None","None" +"RCU03","locked","None","RW","None","None","None" +"RCU03","SYNC","None","RW","None","None","None" +"RCU03","CML","None","RW","None","None","None" +"RCU03","JESD","None","RW","None","None","None" +"RCU03","Attenuator1","None","RW","21","None","None" +"RCU03","Attenuator2","None","RW","21","None","None" +"RCU03","Attenuator3","None","RW","24","None","None" +"RCU03","Pwr_dig","Enable LDOs","RO","None","None","None" +"RCU03","Band3","None","RW","None","None","None" +"RCU03","Band1","None","RW","None","None","None" +"RCU03","Band2","None","RW","None","None","None" +"RCU03","LED0","Front panel LEDs, 0=On","RW","None","None","None" +"RCU03","Temperature","None","RO","None","None","0.00421" +"RCU03","Dth3_Pwr","None","RW","None","None","None" +"RCU03","Dth2_Pwr","None","RW","None","None","None" +"CLK","locked","None","RO","None","None","None" +"CLK","IGNORE_PPS","None","RW","None","None","None" +"CLK","ENABLE_PWR","None","RW","None","None","None" +"CLK","STAT1","None","RW","None","None","None" +"CLK","CONF","None","RW","None","None","None" +"CLK","OUT","None","RW","None","None","None" +"CLK","IN","None","RW","None","None","None" diff --git a/yaml_reader.py b/yaml_reader.py index 365f27c52b6e8c19c535cec70a27dacddc7fffcb..1ce95c7ce4b09e76a8c78730c5a5f15cbd378862 100644 --- a/yaml_reader.py +++ b/yaml_reader.py @@ -139,7 +139,7 @@ class yaml_reader: file = open("output_devices.csv", "w") for i in self.variable_list: - text = "\"{}\",\"{}\",\"{}\",\"{}\",\"{}\",\"{}\",\"{}\"".format(i.board, i.name, i.description, i.RW, i.max, i.min, i.scale, i.dtype) + text = "\"{}\",\"{}\",\"{}\",\"{}\",\"{}\",\"{}\",\"{}\"\n".format(i.board, i.name, i.description, i.RW, i.max, i.min, i.scale, i.dtype) print(text) file.write(text)