Пример #1
0
 def test_min_max(self):
     i = database.get_raw_item("ALT")
     val = str(i.min - 100)
     self.sock.sendall("@wALT;{}\n".format(val).encode())
     res = self.sock.recv(1024).decode()
     self.assertEqual(res, "@wALT;{};00000\n".format(i.min))
     i = database.get_raw_item("ALT")
     val = str(i.max + 100)
     self.sock.sendall("@wALT;{}\n".format(val).encode())
     res = self.sock.recv(1024).decode()
     self.assertEqual(res, "@wALT;{};00000\n".format(i.max))
Пример #2
0
 def test_min_max(self):
     i = database.get_raw_item("ALT")
     val = str(i.min - 100)
     self.sock.sendall("@wALT;{}\n".format(val).encode())
     res = self.sock.recv(1024).decode()
     self.assertEqual(res, "@wALT;{};00000\n".format(i.min))
     i = database.get_raw_item("ALT")
     val = str(i.max + 100)
     self.sock.sendall("@wALT;{}\n".format(val).encode())
     res = self.sock.recv(1024).decode()
     self.assertEqual(res, "@wALT;{};00000\n".format(i.max))
Пример #3
0
    def getInputFunction(self, dbKey):
        dbItem = database.get_raw_item(dbKey)
        if dbItem == None: return None

        # The output exclusion keeps us from constantly sending updates on the
        # CAN Bus when the change that we recieved was from the CAN Bus.
        # Basically when the input function is called we'll first exclude
        # the output then make the change.  The output callback will be
        # called but will do nothing but reset the exclusion flag.
        if dbKey in self.output_mapping:
            output_exclude = True
        else:
            output_exclude = False

        def InputFunc(cfpar):
            if output_exclude:
                self.output_mapping[dbItem.key]['exclude'] = True
                self.output_mapping[dbItem.key]["lastValue"] = cfpar.value
            if cfpar.meta:
                try:
                    # Check to see if we have a replacemtn string in the dictionary
                    if cfpar.meta in self.meta_replacements_in:
                        m = self.meta_replacements_in[cfpar.meta]
                    else:  # Just use the one we were sent
                        m = cfpar.meta
                    dbItem.set_aux_value(m, cfpar.value)
                except:
                    self.log.warning(
                        "Problem setting Aux Value for {0}".format(dbItem.key))
            else:
                dbItem.value = (cfpar.value, cfpar.annunciate, cfpar.quality,
                                cfpar.failure)

        return InputFunc
Пример #4
0
    def getInputFunction(self, dbKey):
        dbItem = database.get_raw_item(dbKey)
        if dbItem == None: return None

        # The output exclusion keeps us from constantly sending updates on the
        # CAN Bus when the change that we recieved was from the CAN Bus.
        # Basically when the input function is called we'll first exclude
        # the output then make the change.  The output callback will be
        # called but will do nothing but reset the exclusion flag.
        if dbKey in self.output_mapping:
            output_exclude = True
        else:
            output_exclude = False

        def InputFunc(cfpar):
            if output_exclude:
                self.output_mapping[dbItem.key]['exclude'] = True
                self.output_mapping[dbItem.key]["lastValue"] = cfpar.value
            if cfpar.meta:
                try:
                    # Check to see if we have a replacemtn string in the dictionary
                    if cfpar.meta in self.meta_replacements_in:
                        m = self.meta_replacements_in[cfpar.meta]
                    else: # Just use the one we were sent
                        m = cfpar.meta
                    dbItem.set_aux_value(m, cfpar.value)
                except:
                    self.log.warning("Problem setting Aux Value for {0}".format(dbItem.key))
            else:
                dbItem.value = (cfpar.value, cfpar.annunciate, cfpar.quality, cfpar.failure)

        return InputFunc
Пример #5
0
    def test_database_callbacks(self):
        """Test database callback routines"""
        sf = io.StringIO(general_config)
        database.init(sf)
        rval = None

        def test_cb(key, val, udata):  # Use a closure for our callback
            nonlocal rval
            rval = (key, val)

        database.callback_add("test", "PITCH", test_cb, None)
        database.write("PITCH", -11.4)
        self.assertEqual(rval,
                         ("PITCH", (-11.4, False, False, False, False, False)))
        database.write("PITCH", 10.2)
        self.assertEqual(rval,
                         ("PITCH", (10.2, False, False, False, False, False)))
        i = database.get_raw_item("PITCH")
        i.fail = True
        self.assertEqual(rval,
                         ("PITCH", (10.2, False, False, False, True, False)))
        i.annunciate = True
        self.assertEqual(rval,
                         ("PITCH", (10.2, True, False, False, True, False)))
        i.bad = True
        self.assertEqual(rval,
                         ("PITCH", (10.2, True, False, True, True, False)))
        time.sleep(0.250)
        database.update()  # force the update
        self.assertEqual(rval,
                         ("PITCH", (10.2, True, True, True, True, False)))
Пример #6
0
 def test_subscribe_flags(self):
     """Test that writing just the flags will trigger a subscription response"""
     self.sock.sendall("@sALT\n".encode())
     res = self.sock.recv(1024).decode()
     self.assertEqual(res, "@sALT\n")
     i = database.get_raw_item("ALT")
     i.annunciate = True
     res = self.sock.recv(1024).decode()
     self.assertEqual(res, "ALT;0.0;10000\n")
     i.annunciate = False
     res = self.sock.recv(1024).decode()
     self.assertEqual(res, "ALT;0.0;00000\n")
     i.bad = True
     res = self.sock.recv(1024).decode()
     self.assertEqual(res, "ALT;0.0;00100\n")
     i.bad = False
     res = self.sock.recv(1024).decode()
     self.assertEqual(res, "ALT;0.0;00000\n")
     i.fail = True
     res = self.sock.recv(1024).decode()
     self.assertEqual(res, "ALT;0.0;00010\n")
     i.fail = False
     res = self.sock.recv(1024).decode()
     self.assertEqual(res, "ALT;0.0;00000\n")
     i.secfail = True
     res = self.sock.recv(1024).decode()
     self.assertEqual(res, "ALT;0.0;00001\n")
     i.secfail = False
     res = self.sock.recv(1024).decode()
     self.assertEqual(res, "ALT;0.0;00000\n")
Пример #7
0
 def test_quality_bits(self):
     """Test quality bits"""
     sf = io.StringIO(general_config)
     database.init(sf)
     i = database.get_raw_item("OILP1")
     database.write("OILP1", 15.4)
     x = database.read("OILP1")
     self.assertEqual(x, (15.4, False, False, False, False, False))
     i.annunciate = True
     x = database.read("OILP1")
     self.assertEqual(x, (15.4, True, False, False, False, False))
     i.annunciate = False
     x = database.read("OILP1")
     self.assertEqual(x, (15.4, False, False, False, False, False))
     i.fail = True
     x = database.read("OILP1")
     self.assertEqual(x, (15.4, False, False, False, True, False))
     i.fail = False
     x = database.read("OILP1")
     self.assertEqual(x, (15.4, False, False, False, False, False))
     i.bad = True
     x = database.read("OILP1")
     self.assertEqual(x, (15.4, False, False, True, False, False))
     i.bad = False
     x = database.read("OILP1")
     self.assertEqual(x, (15.4, False, False, False, False, False))
Пример #8
0
 def test_description_units(self):
     """Test description and units"""
     sf = io.StringIO(general_config)
     database.init(sf)
     i = database.get_raw_item("ROLL")
     self.assertEqual(i.description, "Roll Angle")
     self.assertEqual(i.units, "deg")
Пример #9
0
 def test_missing_description_units(self):
     """Test missing description and units"""
     sf = io.StringIO(general_config)
     database.init(sf)
     i = database.get_raw_item("DUMMY")
     self.assertEqual(i.description, '')
     self.assertEqual(i.units, '')
Пример #10
0
 def test_subscribe_flags(self):
     """Test that writing just the flags will trigger a subscription response"""
     self.sock.sendall("@sALT\n".encode())
     res = self.sock.recv(1024).decode()
     self.assertEqual(res, "@sALT\n")
     i = database.get_raw_item("ALT")
     i.annunciate = True
     res = self.sock.recv(1024).decode()
     self.assertEqual(res, "ALT;0.0;10000\n")
     i.annunciate = False
     res = self.sock.recv(1024).decode()
     self.assertEqual(res, "ALT;0.0;00000\n")
     i.bad = True
     res = self.sock.recv(1024).decode()
     self.assertEqual(res, "ALT;0.0;00100\n")
     i.bad = False
     res = self.sock.recv(1024).decode()
     self.assertEqual(res, "ALT;0.0;00000\n")
     i.fail = True
     res = self.sock.recv(1024).decode()
     self.assertEqual(res, "ALT;0.0;00010\n")
     i.fail = False
     res = self.sock.recv(1024).decode()
     self.assertEqual(res, "ALT;0.0;00000\n")
     i.secfail = True
     res = self.sock.recv(1024).decode()
     self.assertEqual(res, "ALT;0.0;00001\n")
     i.secfail = False
     res = self.sock.recv(1024).decode()
     self.assertEqual(res, "ALT;0.0;00000\n")
Пример #11
0
 def test_get_report(self):
     self.sock.sendall("@qAOA\n".encode())
     res = self.sock.recv(1024).decode()
     i = database.get_raw_item("AOA")
     s = "@qAOA;{};{};{};{};{};{};{}\n".format(i.description, i.typestring,
                                               i.min, i.max, i.units, i.tol,
                                               ','.join(i.aux.keys()))
     self.assertEqual(res, s)
Пример #12
0
 def test_get_report(self):
     self.sock.sendall("@qAOA\n".encode())
     res = self.sock.recv(1024).decode()
     i = database.get_raw_item("AOA")
     s = "@qAOA;{};{};{};{};{};{};{}\n".format(i.description, i.typestring,
                                             i.min, i.max, i.units, i.tol,
                                             ','.join(i.aux.keys()))
     self.assertEqual(res, s)
Пример #13
0
 def test_aux_data_creation(self):
     """Test database auxillary data creation"""
     sf = io.StringIO(general_config)
     database.init(sf)
     tests = ["Min", "Max", "0g", "Warn", "Stall"]
     tests.sort()
     i = database.get_raw_item("AOA")
     l = i.get_aux_list()
     l.sort()
     self.assertEqual(l, tests)
Пример #14
0
    def getEncoderFunction(self, dbKeys):
        # the dbKeys parameter should be three fix ids separated by commas
        # the first two are the encoder ids for each of the encoders that
        # are contained in the fix message and the third is the button.
        try:
            ids = dbKeys.split(",")
            encoder1 = database.get_raw_item(ids[0].strip())
            encoder2 = database.get_raw_item(ids[1].strip())
            button = database.get_raw_item(ids[2].strip())
        except KeyError:
            return None

        def InputFunc(cfpar):
            x = encoder1.value[0]
            encoder1.value = x + cfpar.value[0]
            x = encoder2.value[0]
            encoder2.value = x + cfpar.value[1]
            button.value = cfpar.value[2][0]

        return InputFunc
Пример #15
0
 def test_Variable_Expansion(self):
     """Test database variable expansion"""
     sf = io.StringIO(variable_config)
     database.init(sf)
     l = database.listkeys()
     l.sort()
     self.assertEqual(l, variable_list)
     for e in range(4):
         for c in range(6):
             key = "EGT{}{}".format(e+1,c+1)
             item = database.get_raw_item(key)
             s = "Exhaust Gas Temp Engine {}, Cylinder {}".format(e+1,c+1)
             self.assertEqual(item.description, s)
Пример #16
0
    def getSwitchFunction(self, dbKeys):
        try:
            switches = []
            ids = dbKeys.split(",")
            for each in ids:
                switches.append(database.get_raw_item(each.strip()))
        except KeyError:
            return None

        def InputFunc(cfpar):
            x = cfpar.value
            bit = 0
            byte = 0
            for each in switches:
                each.value = x[byte][bit]
                bit += 1
                if bit >= 8:
                    bit = 0
                    byte += 1

        return InputFunc
Пример #17
0
    def test_read(self):
        database.write("IAS", 105.4)
        self.sock.sendall("@rIAS\n".encode())
        res = self.sock.recv(1024).decode()
        self.assertEqual(res, "@rIAS;105.4;00000\n")

        i = database.get_raw_item("IAS")
        i.annunciate = True
        self.sock.sendall("@rIAS\n".encode())
        res = self.sock.recv(1024).decode()
        self.assertEqual(res, "@rIAS;105.4;10000\n")
        i.bad = True
        self.sock.sendall("@rIAS\n".encode())
        res = self.sock.recv(1024).decode()
        self.assertEqual(res, "@rIAS;105.4;10100\n")
        i.fail = True
        self.sock.sendall("@rIAS\n".encode())
        res = self.sock.recv(1024).decode()
        self.assertEqual(res, "@rIAS;105.4;10110\n")
        i.secfail = True
        self.sock.sendall("@rIAS\n".encode())
        res = self.sock.recv(1024).decode()
        self.assertEqual(res, "@rIAS;105.4;10111\n")

        i.annunciate = False
        self.sock.sendall("@rIAS\n".encode())
        res = self.sock.recv(1024).decode()
        self.assertEqual(res, "@rIAS;105.4;00111\n")
        i.bad = False
        self.sock.sendall("@rIAS\n".encode())
        res = self.sock.recv(1024).decode()
        self.assertEqual(res, "@rIAS;105.4;00011\n")
        i.fail = False
        self.sock.sendall("@rIAS\n".encode())
        res = self.sock.recv(1024).decode()
        self.assertEqual(res, "@rIAS;105.4;00001\n")
        i.secfail = False
        self.sock.sendall("@rIAS\n".encode())
        res = self.sock.recv(1024).decode()
        self.assertEqual(res, "@rIAS;105.4;00000\n")
Пример #18
0
    def test_read(self):
        database.write("IAS", 105.4)
        self.sock.sendall("@rIAS\n".encode())
        res = self.sock.recv(1024).decode()
        self.assertEqual(res, "@rIAS;105.4;00000\n")

        i = database.get_raw_item("IAS")
        i.annunciate = True
        self.sock.sendall("@rIAS\n".encode())
        res = self.sock.recv(1024).decode()
        self.assertEqual(res, "@rIAS;105.4;10000\n")
        i.bad = True
        self.sock.sendall("@rIAS\n".encode())
        res = self.sock.recv(1024).decode()
        self.assertEqual(res, "@rIAS;105.4;10100\n")
        i.fail = True
        self.sock.sendall("@rIAS\n".encode())
        res = self.sock.recv(1024).decode()
        self.assertEqual(res, "@rIAS;105.4;10110\n")
        i.secfail = True
        self.sock.sendall("@rIAS\n".encode())
        res = self.sock.recv(1024).decode()
        self.assertEqual(res, "@rIAS;105.4;10111\n")

        i.annunciate = False
        self.sock.sendall("@rIAS\n".encode())
        res = self.sock.recv(1024).decode()
        self.assertEqual(res, "@rIAS;105.4;00111\n")
        i.bad = False
        self.sock.sendall("@rIAS\n".encode())
        res = self.sock.recv(1024).decode()
        self.assertEqual(res, "@rIAS;105.4;00011\n")
        i.fail = False
        self.sock.sendall("@rIAS\n".encode())
        res = self.sock.recv(1024).decode()
        self.assertEqual(res, "@rIAS;105.4;00001\n")
        i.secfail = False
        self.sock.sendall("@rIAS\n".encode())
        res = self.sock.recv(1024).decode()
        self.assertEqual(res, "@rIAS;105.4;00000\n")
Пример #19
0
    def __init__(self, parent=None):
        super(DataTable, self).__init__(parent)
        cols = ["Description", "Value", "Set", "A", "O", "B", "F"]
        self.setColumnCount(len(cols))
        self.setHorizontalHeaderLabels(cols)
        self.dblist = database.listkeys()
        self.dblist.sort()
        self.setRowCount(len(self.dblist))
        self.setVerticalHeaderLabels(self.dblist)
        for i, key in enumerate(self.dblist):
            item = database.get_raw_item(key)
            cell = QTableWidgetItem(item.description)
            cell.setFlags(Qt.ItemIsEnabled)
            self.setItem(i, 0, cell)
            cell = QTableWidgetItem(str(item.value[0]))
            cell.setFlags(Qt.ItemIsEnabled)
            self.setItem(i, 1, cell)

        self.resizeColumnsToContents()
        self.timer = QTimer()
        self.timer.setInterval(1000)
        self.timer.timeout.connect(self.update)
Пример #20
0
    def __init__(self, parent=None):
        super(DataTable, self).__init__(parent)
        cols = ["Description", "Value", "Set", "A", "O", "B", "F"]
        self.setColumnCount(len(cols))
        self.setHorizontalHeaderLabels(cols)
        self.dblist = database.listkeys()
        self.dblist.sort()
        self.setRowCount(len(self.dblist))
        self.setVerticalHeaderLabels(self.dblist)
        for i, key in enumerate(self.dblist):
            item = database.get_raw_item(key)
            cell = QTableWidgetItem(item.description)
            cell.setFlags(Qt.ItemIsEnabled)
            self.setItem(i, 0, cell)
            cell = QTableWidgetItem(str(item.value[0]))
            cell.setFlags(Qt.ItemIsEnabled)
            self.setItem(i, 1, cell)

        self.resizeColumnsToContents()
        self.timer = QTimer()
        self.timer.setInterval(1000)
        self.timer.timeout.connect(self.update)
Пример #21
0
    def test_database_callbacks(self):
        """Test database callback routines"""
        sf = io.StringIO(general_config)
        database.init(sf)
        rval = None
        def test_cb(key, val, udata): # Use a closure for our callback
            nonlocal rval
            rval = (key, val)

        database.callback_add("test", "PITCH", test_cb, None)
        database.write("PITCH", -11.4)
        self.assertEqual(rval, ("PITCH", (-11.4, False, False, False, False, False)))
        database.write("PITCH", 10.2)
        self.assertEqual(rval, ("PITCH", (10.2, False, False, False, False, False)))
        i = database.get_raw_item("PITCH")
        i.fail = True
        self.assertEqual(rval, ("PITCH", (10.2, False, False, False, True, False)))
        i.annunciate = True
        self.assertEqual(rval, ("PITCH", (10.2, True, False, False, True, False)))
        i.bad = True
        self.assertEqual(rval, ("PITCH", (10.2, True, False, True, True, False)))
        time.sleep(0.250)
        database.update() # force the update
        self.assertEqual(rval, ("PITCH", (10.2, True, True, True, True, False)))
Пример #22
0
 def db_get_item(self, key):
     return database.get_raw_item(key)
Пример #23
0
 def db_get_item(self, key):
     return database.get_raw_item(key)