int socket_srv;
int socket_tmp;
+ int port;
+ int addr;
uint16_t real_world_AD[8]; /* The real voltage which is on inputs od A/D convertors.
Until new conversion is started, there is old value in
BAR0_t BAR0;
BAR2_t BAR2;
BAR4_t BAR4;
+
+ unsigned int ADDATA_FIFO_POSITION; //ADDATA is FIFO register;
+ //We need to know, position in this FIFO =
+ //Which value will come next
} mf624_state_t;
+
+//FIXME all wrong
+int volts_to_adinternal(int volt)
+{
+ int tmp;
+
+ tmp = ~volt;
+ tmp += 1;
+
+ return tmp;
+}
+
+//FIXME all wrong
+int dacinternal_to_volts(int dacinternal)
+{
+ if (dacinternal >= 0x2000) {
+ return -(~(dacinternal & ~(0x2000)))/1000;
+ }
+ else {
+ return (dacinternal - 0x2000)/1000;
+ }
+
+}
//-----------------------------------------------------------------------------
void mf624_init_registers(mf624_state_t* s)
{
s->BAR2.DA6 = 0x3FFF;
s->BAR2.DA7 = 0x3FFF;
+ s->ADDATA_FIFO_POSITION = 0;
}
{
int status;
char write_buffer[256];
- snprintf(write_buffer, 255, "%s=%x\n", reg, val);
+ snprintf(write_buffer, 255, "%s=%d\n", reg, val);
status = write(s->socket_tmp, write_buffer, strlen(write_buffer));
if (status < 0) {
}
}
+
+void* socket_accept(void* ptr)
+{
+ struct sockaddr_in addr_client;
+ mf624_state_t* dev = (mf624_state_t*) ptr;
+
+ while(1) {
+ printf("Waiting on port %d for MF624 client to connect\n", dev->port);
+ socklen_t len_client = sizeof(addr_client);
+ dev->socket_tmp = accept(dev->socket_srv, (struct sockaddr*) &addr_client, &len_client);
+ if (dev->socket_tmp == -1) {
+ perror("accept()");
+ }
+ printf("Client connected\n");
+ }
+}
+
+
void* init_socket(void* ptr)
{
#define STRING_BUFF_SIZE 256
// Socket stuff
struct sockaddr_in addr_srv;
- struct sockaddr_in addr_client;
- int port = 55555;
+ int port;
int yes = 1;
// For reading from socket
char read_buffer[STRING_BUFF_SIZE];
int val;
// ----
int status;
+ QemuThread socket_accept_thread;
mf624_state_t* dev = (mf624_state_t*) ptr;
// If no client connected, we will know about it
dev->socket_tmp = -1;
+ port = dev->port;
dev->socket_srv = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
if (dev->socket_srv == -1) {
goto exit;
}
- printf("Waiting on port %d for MF624 client to connect\n", port);
-
- socklen_t len_client = sizeof(addr_client);
- dev->socket_tmp = accept(dev->socket_srv, (struct sockaddr*) &addr_client, &len_client);
- if (dev->socket_tmp == -1) {
- perror("accept()");
- goto exit;
- }
+ qemu_thread_create(&socket_accept_thread, socket_accept, (void*) ptr);
memset(read_buffer, '\0', STRING_BUFF_SIZE);
while(1) {
- //FIXME what if the socket was closed from client? We get no error message
- received_length = read(dev->socket_tmp, read_buffer, STRING_BUFF_SIZE-1);
- if (received_length < 0) {
- perror("read()");
- goto exit_close;
- }
-
- if (received_length == 0) {
- printf("Error while reading from socket. Client disconnected?\n");
- //FIXME For client it is not possible to reconnect
- goto exit_close;
- }
-
- // REG has "same size +1" as READ_BUFFER to avoid buffer overflow
- status = sscanf(read_buffer, "%[A-Z]=%u", reg, &val);
- if (status == 2) {
- if(!strcmp(reg, "DIN")) {
- dev->BAR2.DIN = val;
- }
- else if(!strcmp(reg, "ADDATA")) {
- dev->real_world_AD[0] = val;
+ if (dev->socket_tmp > 0) {
+ received_length = read(dev->socket_tmp, read_buffer, STRING_BUFF_SIZE-1);
+ if (received_length < 0) {
+ perror("read()");
+ goto exit_close;
}
- else if(!strcmp(reg, "ADDATA1")) {
- dev->real_world_AD[1] = val;
- }
- else if(!strcmp(reg, "ADDATA2")) {
- dev->real_world_AD[2] = val;
- }
- else if(!strcmp(reg, "ADDATA3")) {
- dev->real_world_AD[3] = val;
- }
- else if(!strcmp(reg, "ADDATA4")) {
- dev->real_world_AD[4] = val;
- }
- else if(!strcmp(reg, "ADDATA5")) {
- dev->real_world_AD[5] = val;
- }
- else if(!strcmp(reg, "ADDATA6")) {
- dev->real_world_AD[6] = val;
+
+ if (received_length == 0) {
+ printf("Error while reading from socket. Client disconnected?\n");
+ //FIXME For client it is not possible to reconnect
+ goto exit_close;
}
- else if(!strcmp(reg, "ADDATA7")) {
- dev->real_world_AD[7] = val;
+
+ // REG has "same size +1" as READ_BUFFER to avoid buffer overflow
+ status = sscanf(read_buffer, "%[A-Z0-9]=%u", reg, &val);
+ if (status == 2) {
+ if(!strcmp(reg, "DIN")) {
+ dev->BAR2.DIN = val;
+ }
+ else if(!strcmp(reg, "ADC0")) {
+ dev->real_world_AD[0] = volts_to_adinternal(val);
+ }
+ else if(!strcmp(reg, "ADC1")) {
+ dev->real_world_AD[1] = volts_to_adinternal(val);
+ }
+ else if(!strcmp(reg, "ADC2")) {
+ dev->real_world_AD[2] = volts_to_adinternal(val);
+ }
+ else if(!strcmp(reg, "ADC3")) {
+ dev->real_world_AD[3] = volts_to_adinternal(val);
+ }
+ else if(!strcmp(reg, "ADC4")) {
+ dev->real_world_AD[4] = volts_to_adinternal(val);
+ }
+ else if(!strcmp(reg, "ADC5")) {
+ dev->real_world_AD[5] = volts_to_adinternal(val);
+ }
+ else if(!strcmp(reg, "ADC6")) {
+ dev->real_world_AD[6] = volts_to_adinternal(val);
+ }
+ else if(!strcmp(reg, "ADC7")) {
+ dev->real_world_AD[7] = volts_to_adinternal(val);
+ }
+ else {
+ printf("reg = %s; val = %d\n", reg, val);
+ }
}
- else {
- printf("reg = %s; val = %d\n", reg, val);
- }
+ }
+ else {
+ sleep(1);
}
}
uint32_t mf624_BAR2_read16(void *opaque, target_phys_addr_t addr)
{
int i;
+ int ADDATA_val = 0xFFFF;
mf624_state_t *s = opaque;
switch (addr % BAR2_size) {
+ /* Reading from ADDATA FIFO register */
case ADDATA_off:
- return s->BAR2.ADDATA; //FIXME Madness? This ... is ... FIFO!
-
- case ADDATA1_off:
- if (!(s->BAR0.GPIOC & GPIOC_EOLC_mask)) { //Has the conversion already ended?
- return s->BAR2.ADDATA1;
- }
- return 0xFFFF; // Semirandom value
-
+ case ADDATA1_off: // Mirrored registers
case ADDATA2_off:
+ case ADDATA3_off:
+ case ADDATA4_off:
+ case ADDATA5_off:
+ case ADDATA6_off:
+ case ADDATA7_off:
if (!(s->BAR0.GPIOC & GPIOC_EOLC_mask)) { //Has the conversion already ended?
- return s->BAR2.ADDATA2;
+ switch (s->ADDATA_FIFO_POSITION)
+ {
+ case 0:
+ ADDATA_val = s->BAR2.ADDATA;
+ break;
+ case 1:
+ ADDATA_val = s->BAR2.ADDATA1;
+ break;
+ case 2:
+ ADDATA_val = s->BAR2.ADDATA2;
+ break;
+ case 3:
+ ADDATA_val = s->BAR2.ADDATA3;
+ break;
+ case 4:
+ ADDATA_val = s->BAR2.ADDATA4;
+ break;
+ case 5:
+ ADDATA_val = s->BAR2.ADDATA5;
+ break;
+ case 6:
+ ADDATA_val = s->BAR2.ADDATA6;
+ break;
+ case 7:
+ ADDATA_val = s->BAR2.ADDATA7;
+ break;
+ default: // restart counter
+ s->ADDATA_FIFO_POSITION = 0;
+ ADDATA_val = s->BAR2.ADDATA;
+ break;
+ }
+ s->ADDATA_FIFO_POSITION ++;
+ return ADDATA_val;
}
return 0xFFFF; // Semirandom value
+ /* Digital Input*/
case DIN_off:
return s->BAR2.DIN;
conversion for all channels selected in ADCTRL. */
case ADSTART_off:
s->BAR0.GPIOC |= GPIOC_EOLC_mask; // Conversion in progress
+ s->ADDATA_FIFO_POSITION = 0;
for (i = 0; i < 500000; i++)
; // Small delay simulating real conversion
s->BAR2.ADDATA7 = (s->BAR2.ADCTRL & (1 << 7)) ? s->real_world_AD[7] : s->BAR2.ADDATA7;
return 0xFFFF; // Semirandom value
+
default:
printf("mf624_BAR2_read16(): addr = %d\n", addr);
return 0x0;
//Is DAC enabled & Output enabled?
if (!(s->BAR0.GPIOC & GPIOC_LDAC_mask) &&
(s->BAR0.GPIOC & GPIOC_DACEN_mask)) {
- socket_write(s, "DA0", s->BAR2.DA0);
+ socket_write(s, "DA0", dacinternal_to_volts(s->BAR2.DA0));
}
break;
s->BAR2.DA1 = value;
if (!(s->BAR0.GPIOC & GPIOC_LDAC_mask) &&
(s->BAR0.GPIOC & GPIOC_DACEN_mask)) {
- socket_write(s, "DA1", s->BAR2.DA1);
+ socket_write(s, "DA1", dacinternal_to_volts(s->BAR2.DA1));
}
break;
mf624_state_t *s = DO_UPCAST(mf624_state_t, dev, pci_dev); //alocation of mf624_state_t
uint8_t *pci_conf;
QemuThread socket_thread;
+ //char options_buff[8];
+ //Parameters from command line
+ //if (get_param_value(options_buff, sizeof(options_buff), "port", opts)) {
+ // s->port = atoi(options_buff);
+ //}
+ //else {
+ s->port = 55555; // Default port
+ //}
+ //Set all internal registers to default values
mf624_init_registers(s);
pci_conf = s->dev.config;
pci_conf[PCI_INTERRUPT_PIN] = 0x1; // interrupt pin 0
- // return value of cpu_register_io_memory is IO INDEX
s->BAR0_mem_table_index = cpu_register_io_memory(mf624_BAR0_read,
mf624_BAR0_write,
s,
pci_register_bar(&s->dev, 2, BAR2_size, PCI_BASE_ADDRESS_SPACE_MEMORY, mf624_map);
pci_register_bar(&s->dev, 4, BAR4_size, PCI_BASE_ADDRESS_SPACE_MEMORY, mf624_map);
+ //Create thread, which will be blocked on reading from socket (connected to "I/O GUI")
qemu_thread_create(&socket_thread, init_socket, (void*) s);
return 0;
}
<x>0</x>
<y>0</y>
<width>612</width>
- <height>585</height>
+ <height>577</height>
</rect>
</property>
<property name="sizePolicy">
<string>Humusoft MF624 DAQ input/output interface</string>
</property>
</widget>
- <widget class="QGroupBox" name="groupBox">
+ <widget class="QWidget" name="">
<property name="geometry">
<rect>
<x>11</x>
- <y>41</y>
+ <y>189</y>
<width>591</width>
- <height>70</height>
+ <height>341</height>
</rect>
</property>
- <property name="sizePolicy">
- <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="maximumSize">
- <size>
- <width>16777213</width>
- <height>70</height>
- </size>
- </property>
- <property name="title">
- <string>DIN</string>
- </property>
- <widget class="QWidget" name="horizontalLayoutWidget">
- <property name="geometry">
- <rect>
- <x>10</x>
- <y>30</y>
- <width>574</width>
- <height>31</height>
- </rect>
- </property>
- <layout class="QHBoxLayout" name="horizontalLayout">
- <item>
- <widget class="QCheckBox" name="checkBox_8">
- <property name="text">
- <string>7</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="checkBox_7">
- <property name="text">
- <string>6</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="checkBox_6">
- <property name="text">
- <string>5</string>
+ <layout class="QHBoxLayout" name="horizontalLayout_19">
+ <item>
+ <widget class="QGroupBox" name="groupBox_3">
+ <property name="title">
+ <string>ADC</string>
+ </property>
+ <widget class="QWidget" name="layoutWidget">
+ <property name="geometry">
+ <rect>
+ <x>20</x>
+ <y>30</y>
+ <width>241</width>
+ <height>286</height>
+ </rect>
</property>
+ <layout class="QVBoxLayout" name="verticalLayout_2">
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_3">
+ <item>
+ <widget class="QSlider" name="horizontalSlider">
+ <property name="minimum">
+ <number>-10</number>
+ </property>
+ <property name="maximum">
+ <number>10</number>
+ </property>
+ <property name="singleStep">
+ <number>1</number>
+ </property>
+ <property name="pageStep">
+ <number>1</number>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QSpinBox" name="spinBox">
+ <property name="minimum">
+ <number>-10</number>
+ </property>
+ <property name="maximum">
+ <number>10</number>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_5">
+ <item>
+ <widget class="QSlider" name="horizontalSlider_2">
+ <property name="minimum">
+ <number>-10</number>
+ </property>
+ <property name="maximum">
+ <number>10</number>
+ </property>
+ <property name="pageStep">
+ <number>1</number>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QSpinBox" name="spinBox_2">
+ <property name="minimum">
+ <number>-10</number>
+ </property>
+ <property name="maximum">
+ <number>10</number>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_6">
+ <item>
+ <widget class="QSlider" name="horizontalSlider_3">
+ <property name="minimum">
+ <number>-10</number>
+ </property>
+ <property name="maximum">
+ <number>10</number>
+ </property>
+ <property name="pageStep">
+ <number>1</number>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QSpinBox" name="spinBox_3">
+ <property name="minimum">
+ <number>-10</number>
+ </property>
+ <property name="maximum">
+ <number>10</number>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_7">
+ <item>
+ <widget class="QSlider" name="horizontalSlider_4">
+ <property name="minimum">
+ <number>-10</number>
+ </property>
+ <property name="maximum">
+ <number>10</number>
+ </property>
+ <property name="pageStep">
+ <number>1</number>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QSpinBox" name="spinBox_4">
+ <property name="minimum">
+ <number>-10</number>
+ </property>
+ <property name="maximum">
+ <number>10</number>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_8">
+ <item>
+ <widget class="QSlider" name="horizontalSlider_5">
+ <property name="minimum">
+ <number>-10</number>
+ </property>
+ <property name="maximum">
+ <number>10</number>
+ </property>
+ <property name="pageStep">
+ <number>1</number>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QSpinBox" name="spinBox_5">
+ <property name="minimum">
+ <number>-10</number>
+ </property>
+ <property name="maximum">
+ <number>10</number>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_9">
+ <item>
+ <widget class="QSlider" name="horizontalSlider_6">
+ <property name="minimum">
+ <number>-10</number>
+ </property>
+ <property name="maximum">
+ <number>10</number>
+ </property>
+ <property name="pageStep">
+ <number>1</number>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QSpinBox" name="spinBox_6">
+ <property name="minimum">
+ <number>-10</number>
+ </property>
+ <property name="maximum">
+ <number>10</number>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_10">
+ <item>
+ <widget class="QSlider" name="horizontalSlider_7">
+ <property name="minimum">
+ <number>-10</number>
+ </property>
+ <property name="maximum">
+ <number>10</number>
+ </property>
+ <property name="pageStep">
+ <number>1</number>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QSpinBox" name="spinBox_7">
+ <property name="minimum">
+ <number>-10</number>
+ </property>
+ <property name="maximum">
+ <number>10</number>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_11">
+ <item>
+ <widget class="QSlider" name="horizontalSlider_8">
+ <property name="minimum">
+ <number>-10</number>
+ </property>
+ <property name="maximum">
+ <number>10</number>
+ </property>
+ <property name="pageStep">
+ <number>1</number>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QSpinBox" name="spinBox_8">
+ <property name="minimum">
+ <number>-10</number>
+ </property>
+ <property name="maximum">
+ <number>10</number>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
</widget>
- </item>
- <item>
- <widget class="QCheckBox" name="checkBox_5">
- <property name="text">
- <string>4</string>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="groupBox_4">
+ <property name="title">
+ <string>DAC</string>
+ </property>
+ <widget class="QWidget" name="">
+ <property name="geometry">
+ <rect>
+ <x>20</x>
+ <y>30</y>
+ <width>261</width>
+ <height>286</height>
+ </rect>
</property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_4">
+ <item>
+ <widget class="QSlider" name="dac0_slider">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="minimum">
+ <number>-10</number>
+ </property>
+ <property name="maximum">
+ <number>10</number>
+ </property>
+ <property name="pageStep">
+ <number>1</number>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QSpinBox" name="dac0_spinbox">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_12">
+ <item>
+ <widget class="QSlider" name="dac1_slider">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="minimum">
+ <number>-10</number>
+ </property>
+ <property name="maximum">
+ <number>10</number>
+ </property>
+ <property name="pageStep">
+ <number>1</number>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QSpinBox" name="dac1_spinbox">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_13">
+ <item>
+ <widget class="QSlider" name="dac2_slider">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="minimum">
+ <number>-10</number>
+ </property>
+ <property name="maximum">
+ <number>10</number>
+ </property>
+ <property name="pageStep">
+ <number>1</number>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QSpinBox" name="dac2_spinbox">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_14">
+ <item>
+ <widget class="QSlider" name="dac3_slider">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="minimum">
+ <number>-10</number>
+ </property>
+ <property name="maximum">
+ <number>10</number>
+ </property>
+ <property name="pageStep">
+ <number>1</number>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QSpinBox" name="dac3_spinbox">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_15">
+ <item>
+ <widget class="QSlider" name="dac4_slider">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="minimum">
+ <number>-10</number>
+ </property>
+ <property name="maximum">
+ <number>10</number>
+ </property>
+ <property name="pageStep">
+ <number>1</number>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QSpinBox" name="dac4_spinbox">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_16">
+ <item>
+ <widget class="QSlider" name="dac5_slider">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="minimum">
+ <number>-10</number>
+ </property>
+ <property name="maximum">
+ <number>10</number>
+ </property>
+ <property name="pageStep">
+ <number>1</number>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QSpinBox" name="dac5_spinbox">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_17">
+ <item>
+ <widget class="QSlider" name="dac6_slider">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="minimum">
+ <number>-10</number>
+ </property>
+ <property name="maximum">
+ <number>10</number>
+ </property>
+ <property name="pageStep">
+ <number>1</number>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QSpinBox" name="dac6_spinbox">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_18">
+ <item>
+ <widget class="QSlider" name="dac7_slider">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="minimum">
+ <number>-10</number>
+ </property>
+ <property name="maximum">
+ <number>10</number>
+ </property>
+ <property name="pageStep">
+ <number>1</number>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QSpinBox" name="dac7_spinbox">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
</widget>
- </item>
- <item>
- <widget class="QCheckBox" name="checkBox_4">
- <property name="text">
- <string>3</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="checkBox_3">
- <property name="text">
- <string>2</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="checkBox_2">
- <property name="text">
- <string>1</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="checkBox">
- <property name="text">
- <string>0</string>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
+ </widget>
+ </item>
+ </layout>
</widget>
- <widget class="QGroupBox" name="groupBox_2">
+ <widget class="QWidget" name="">
<property name="geometry">
<rect>
<x>11</x>
- <y>115</y>
+ <y>41</y>
<width>591</width>
- <height>70</height>
+ <height>141</height>
</rect>
</property>
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="maximumSize">
- <size>
- <width>16777215</width>
- <height>70</height>
- </size>
- </property>
- <property name="title">
- <string>DOUT</string>
- </property>
- <widget class="QWidget" name="horizontalLayoutWidget_2">
- <property name="geometry">
- <rect>
- <x>10</x>
- <y>40</y>
- <width>571</width>
- <height>24</height>
- </rect>
- </property>
- <layout class="QHBoxLayout" name="horizontalLayout_2">
- <item>
- <widget class="QCheckBox" name="checkBox_16">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="text">
- <string>7</string>
- </property>
- <property name="checkable">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="checkBox_15">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="text">
- <string>6</string>
- </property>
- <property name="checkable">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="checkBox_14">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="text">
- <string>5</string>
- </property>
- <property name="checkable">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="checkBox_13">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="text">
- <string>4</string>
- </property>
- <property name="checkable">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="checkBox_12">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="text">
- <string>3</string>
- </property>
- <property name="checkable">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="checkBox_11">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="text">
- <string>2</string>
- </property>
- <property name="checkable">
- <bool>true</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="checkBox_10">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="text">
- <string>1</string>
- </property>
- <property name="checkable">
- <bool>true</bool>
+ <layout class="QVBoxLayout" name="verticalLayout_3">
+ <item>
+ <widget class="QGroupBox" name="groupBox">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>16777213</width>
+ <height>70</height>
+ </size>
+ </property>
+ <property name="title">
+ <string>DIN</string>
+ </property>
+ <widget class="QWidget" name="horizontalLayoutWidget">
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>30</y>
+ <width>574</width>
+ <height>31</height>
+ </rect>
</property>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QCheckBox" name="checkBox_8">
+ <property name="text">
+ <string>7</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="checkBox_7">
+ <property name="text">
+ <string>6</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="checkBox_6">
+ <property name="text">
+ <string>5</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="checkBox_5">
+ <property name="text">
+ <string>4</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="checkBox_4">
+ <property name="text">
+ <string>3</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="checkBox_3">
+ <property name="text">
+ <string>2</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="checkBox_2">
+ <property name="text">
+ <string>1</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="checkBox">
+ <property name="text">
+ <string>0</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
</widget>
- </item>
- <item>
- <widget class="QCheckBox" name="checkBox_9">
- <property name="enabled">
- <bool>false</bool>
- </property>
- <property name="text">
- <string>0</string>
- </property>
- <property name="checkable">
- <bool>true</bool>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="groupBox_2">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>16777215</width>
+ <height>70</height>
+ </size>
+ </property>
+ <property name="title">
+ <string>DOUT</string>
+ </property>
+ <widget class="QWidget" name="horizontalLayoutWidget_2">
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>40</y>
+ <width>571</width>
+ <height>24</height>
+ </rect>
</property>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <item>
+ <widget class="QCheckBox" name="checkBox_16">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>7</string>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="checkBox_15">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>6</string>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="checkBox_14">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>5</string>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="checkBox_13">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>4</string>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="checkBox_12">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>3</string>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="checkBox_11">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>2</string>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="checkBox_10">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>1</string>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QCheckBox" name="checkBox_9">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>0</string>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
</widget>
- </item>
- </layout>
- </widget>
- </widget>
- <widget class="QGroupBox" name="groupBox_3">
- <property name="geometry">
- <rect>
- <x>11</x>
- <y>189</y>
- <width>281</width>
- <height>331</height>
- </rect>
- </property>
- <property name="title">
- <string>ADC</string>
- </property>
- <widget class="QWidget" name="layoutWidget">
- <property name="geometry">
- <rect>
- <x>20</x>
- <y>30</y>
- <width>241</width>
- <height>286</height>
- </rect>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout_2">
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_3">
- <item>
- <widget class="QSlider" name="horizontalSlider">
- <property name="minimum">
- <number>-100</number>
- </property>
- <property name="maximum">
- <number>100</number>
- </property>
- <property name="singleStep">
- <number>1</number>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QSpinBox" name="spinBox">
- <property name="minimum">
- <number>-100</number>
- </property>
- <property name="maximum">
- <number>100</number>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_5">
- <item>
- <widget class="QSlider" name="horizontalSlider_2">
- <property name="minimum">
- <number>-100</number>
- </property>
- <property name="maximum">
- <number>100</number>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QSpinBox" name="spinBox_2">
- <property name="minimum">
- <number>-100</number>
- </property>
- <property name="maximum">
- <number>100</number>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_6">
- <item>
- <widget class="QSlider" name="horizontalSlider_3">
- <property name="minimum">
- <number>-100</number>
- </property>
- <property name="maximum">
- <number>100</number>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QSpinBox" name="spinBox_3">
- <property name="minimum">
- <number>-100</number>
- </property>
- <property name="maximum">
- <number>100</number>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_7">
- <item>
- <widget class="QSlider" name="horizontalSlider_4">
- <property name="minimum">
- <number>-100</number>
- </property>
- <property name="maximum">
- <number>100</number>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QSpinBox" name="spinBox_4">
- <property name="minimum">
- <number>-100</number>
- </property>
- <property name="maximum">
- <number>100</number>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_8">
- <item>
- <widget class="QSlider" name="horizontalSlider_5">
- <property name="minimum">
- <number>-100</number>
- </property>
- <property name="maximum">
- <number>100</number>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QSpinBox" name="spinBox_5">
- <property name="minimum">
- <number>-100</number>
- </property>
- <property name="maximum">
- <number>100</number>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_9">
- <item>
- <widget class="QSlider" name="horizontalSlider_6">
- <property name="minimum">
- <number>-100</number>
- </property>
- <property name="maximum">
- <number>100</number>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QSpinBox" name="spinBox_6">
- <property name="minimum">
- <number>-100</number>
- </property>
- <property name="maximum">
- <number>100</number>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_10">
- <item>
- <widget class="QSlider" name="horizontalSlider_7">
- <property name="minimum">
- <number>-100</number>
- </property>
- <property name="maximum">
- <number>100</number>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QSpinBox" name="spinBox_7">
- <property name="minimum">
- <number>-100</number>
- </property>
- <property name="maximum">
- <number>100</number>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout_11">
- <item>
- <widget class="QSlider" name="horizontalSlider_8">
- <property name="minimum">
- <number>-100</number>
- </property>
- <property name="maximum">
- <number>100</number>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QSpinBox" name="spinBox_8">
- <property name="minimum">
- <number>-100</number>
- </property>
- <property name="maximum">
- <number>100</number>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- </layout>
- </widget>
- </widget>
- <widget class="QGroupBox" name="groupBox_4">
- <property name="geometry">
- <rect>
- <x>300</x>
- <y>190</y>
- <width>301</width>
- <height>331</height>
- </rect>
- </property>
- <property name="title">
- <string>DAC</string>
- </property>
+ </widget>
+ </item>
+ </layout>
</widget>
</widget>
<widget class="QMenuBar" name="menuBar">
</hint>
</hints>
</connection>
+ <connection>
+ <sender>dac0_slider</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>dac0_spinbox</receiver>
+ <slot>setValue(int)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>422</x>
+ <y>272</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>553</x>
+ <y>272</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>dac1_slider</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>dac1_spinbox</receiver>
+ <slot>setValue(int)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>422</x>
+ <y>308</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>553</x>
+ <y>308</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>dac2_slider</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>dac2_spinbox</receiver>
+ <slot>setValue(int)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>422</x>
+ <y>344</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>553</x>
+ <y>344</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>dac3_slider</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>dac3_spinbox</receiver>
+ <slot>setValue(int)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>422</x>
+ <y>380</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>553</x>
+ <y>380</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>dac4_slider</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>dac4_spinbox</receiver>
+ <slot>setValue(int)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>422</x>
+ <y>416</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>553</x>
+ <y>416</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>dac5_slider</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>dac5_spinbox</receiver>
+ <slot>setValue(int)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>422</x>
+ <y>452</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>553</x>
+ <y>452</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>dac6_slider</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>dac6_spinbox</receiver>
+ <slot>setValue(int)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>422</x>
+ <y>488</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>553</x>
+ <y>488</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>dac7_slider</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>dac7_spinbox</receiver>
+ <slot>setValue(int)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>422</x>
+ <y>524</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>553</x>
+ <y>524</y>
+ </hint>
+ </hints>
+ </connection>
</connections>
</ui>