]> rtime.felk.cvut.cz Git - mf6xx.git/commitdiff
Qemu + Qt gui added functionality. Setting of DOUT, DIN, DAC (more or less) in Qt...
authorRostislav Lisovy <lisovy@gmail.com>
Sun, 10 Apr 2011 17:43:55 +0000 (19:43 +0200)
committerRostislav Lisovy <lisovy@gmail.com>
Sun, 10 Apr 2011 17:43:55 +0000 (19:43 +0200)
src/qemu/hw/mf624.c
src/qemu/mf624_interface/untitled/mainwindow.cpp
src/qemu/mf624_interface/untitled/mainwindow.ui
src/qemu/mf624_interface/untitled/mf624_io_status.h
src/qemu/mf624_interface/untitled/socket_thread.cpp

index 01040d801738967aef69584df11a1ea4dfff949d..6c2d9d36e0c67781776ce7881e099f7ea296d695 100755 (executable)
@@ -94,6 +94,8 @@ typedef struct {
 
        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 
@@ -108,8 +110,35 @@ typedef struct {
        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)
 {
@@ -140,6 +169,7 @@ void mf624_init_registers(mf624_state_t* s)
        s->BAR2.DA6 = 0x3FFF;
        s->BAR2.DA7 = 0x3FFF;
 
+       s->ADDATA_FIFO_POSITION = 0;
 }
 
 
@@ -147,7 +177,7 @@ void socket_write(mf624_state_t *s, const char* reg, unsigned int val)
 {
        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) {
@@ -156,13 +186,30 @@ void socket_write(mf624_state_t *s, const char* reg, unsigned int val)
        }
 }
 
+
+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];
@@ -172,11 +219,13 @@ void* init_socket(void* ptr)
        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) {
@@ -205,65 +254,62 @@ void* init_socket(void* ptr)
                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);
                }
        }
 
@@ -346,24 +392,57 @@ uint32_t mf624_BAR0_read32(void *opaque, target_phys_addr_t addr)
 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;
 
@@ -371,6 +450,7 @@ uint32_t mf624_BAR2_read16(void *opaque, target_phys_addr_t addr)
                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
 
@@ -385,6 +465,7 @@ uint32_t mf624_BAR2_read16(void *opaque, target_phys_addr_t addr)
                        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;
@@ -412,7 +493,7 @@ void mf624_BAR2_write16(void *opaque, target_phys_addr_t addr, uint32_t value)
                        //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;
 
@@ -420,7 +501,7 @@ void mf624_BAR2_write16(void *opaque, target_phys_addr_t addr, uint32_t value)
                        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;
 
@@ -510,8 +591,17 @@ static int pci_mf624_init(PCIDevice *pci_dev)
        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;
@@ -526,7 +616,6 @@ static int pci_mf624_init(PCIDevice *pci_dev)
        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,
@@ -550,6 +639,7 @@ static int pci_mf624_init(PCIDevice *pci_dev)
        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;
 }
index 84bd612ce30dbc42b89d10e0fea1b319fb487689..ac35e723e5a95d605c0e2e77abf88e3292182314 100644 (file)
@@ -17,7 +17,6 @@ MainWindow::MainWindow(QWidget *parent) :
        // create new thread (on heap) and start it
        s_thread = new socket_thread(this);
        s_thread->start(); // after this, thread's run() method starts
-
 }
 
 MainWindow::~MainWindow()
index 7ab00d12fc288da8686f6a600c42e836a70b553f..c353c1d6d9957b12a66af7aa75469669f571abe1 100644 (file)
@@ -7,7 +7,7 @@
     <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>
index 76406a65c1e7856a6f43afd0f8e17b5ec3e8245c..4615ae201e816f3576d694c04f24196e33b2b78a 100644 (file)
@@ -7,8 +7,21 @@ typedef struct {
        unsigned int DOUT;
        int DA0;
        int DA1;
+       int DA2;
+       int DA3;
+       int DA4;
+       int DA5;
+       int DA6;
+       int DA7;
+
        int AD0;
        int AD1;
+       int AD2;
+       int AD3;
+       int AD4;
+       int AD5;
+       int AD6;
+       int AD7;
 } mf624_io_status_t;
 
 #endif // MF624_IO_STATUS_H
index 2815523c1a3f71dc7b681d85dd07398f34299f8a..44246d9371040dede44cfaf8ae243b0de8fefe46 100644 (file)
@@ -16,7 +16,7 @@ extern mf624_io_status_t mf624_io_status;
 socket_thread::socket_thread(QObject *parent)
 : QThread(parent)
 {
-
+       sockfd = -1;
 }
 
 void socket_thread::socket_send(const char* str, int val)
@@ -24,12 +24,14 @@ void socket_thread::socket_send(const char* str, int val)
        int n;
        char buffer[256];
        sprintf(buffer, str, val);
+       //printf(str, val);
 
        n = ::write(sockfd, buffer, strlen(buffer));
        if (n < 0) {
                perror("write()");
        }
-       printf(str, val);
+
+       //qDebug() << "MF624 in Qemu not runnig?";
 }
 
 
@@ -80,20 +82,46 @@ void socket_thread::run()
        }
 
 
-       memset(buffer, '\0', 256);
        while(1) {
+               memset(buffer, '\0', 256);
                n = read(sockfd, buffer, 255);
                if (n < 0) {
                        perror("read()");
+                       sleep(1);
                }
 
-               status = sscanf(buffer, "%[A-Z]=%u", reg, &val);
+               status = sscanf(buffer, "%[A-Z0-9]=%u", reg, &val);
                if (status == 2) {
                        if(!strcmp(reg, "DOUT")) {
                                mf624_io_status.DOUT = val;
                        }
+                       if(!strcmp(reg, "DA0")) {
+                               mf624_io_status.DA0 = val;
+                       }
+                       if(!strcmp(reg, "DA1")) {
+                               mf624_io_status.DA1 = val;
+                       }
+                       if(!strcmp(reg, "DA2")) {
+                               mf624_io_status.DA2 = val;
+                       }
+                       if(!strcmp(reg, "DA3")) {
+                               mf624_io_status.DA3 = val;
+                       }
+                       if(!strcmp(reg, "DA4")) {
+                               mf624_io_status.DA4 = val;
+                       }
+                       if(!strcmp(reg, "DA5")) {
+                               mf624_io_status.DA5 = val;
+                       }
+                       if(!strcmp(reg, "DA6")) {
+                               mf624_io_status.DA6 = val;
+                       }
+                       if(!strcmp(reg, "DA7")) {
+                               mf624_io_status.DA7 = val;
+                       }
                }
 
+               //Setting DOUT
                ((MainWindow*) parent())->ui->checkBox_9->setChecked(false);
                ((MainWindow*) parent())->ui->checkBox_10->setChecked(false);
                ((MainWindow*) parent())->ui->checkBox_11->setChecked(false);
@@ -127,6 +155,16 @@ void socket_thread::run()
                        ((MainWindow*) parent())->ui->checkBox_16->setChecked(true);
                }
 
+               // Setting DAC
+               ((MainWindow*) parent())->ui->dac0_slider->setValue(mf624_io_status.DA0);
+               ((MainWindow*) parent())->ui->dac1_slider->setValue(mf624_io_status.DA1);
+               ((MainWindow*) parent())->ui->dac2_slider->setValue(mf624_io_status.DA2);
+               ((MainWindow*) parent())->ui->dac3_slider->setValue(mf624_io_status.DA3);
+               ((MainWindow*) parent())->ui->dac4_slider->setValue(mf624_io_status.DA4);
+               ((MainWindow*) parent())->ui->dac5_slider->setValue(mf624_io_status.DA5);
+               ((MainWindow*) parent())->ui->dac6_slider->setValue(mf624_io_status.DA6);
+               ((MainWindow*) parent())->ui->dac7_slider->setValue(mf624_io_status.DA7);
+
                //printf("%s\n", buffer);
        }
        //close(sockfd);