Пример #1
0
def newP400m_1v34(source, freq, num):
    ''' (str, int, int) -> str
        
        Корректирует файл прошивки версии 1v34 для Р400м для указанной частоты
        и номера аппарата.
    '''
    def calcCrc1(freq, num):
        ''' (int, int) -> int
            
        Вычисление КС для заданной частоты и номера аппарата. 
        '''
        if (num == 1):
            crc = 64
        elif (num == 2):
            crc = -64
        return crc + 32 * freq

    def calcCrc2(freq, num):
        ''' (int, int) -> int
        
            Вычисление КС для заданной частоты и номера аппарата.
        '''
        if (num == 1):
            crc = -16
        elif (num == 2):
            crc = 16
        return crc + 8 * freq

    def calcFreq(freq):
        ''' (int) -> int
        
            Вычисление значения для частоты.
        '''
        return 32 * freq

    if not isinstance(source, str):
        raise TypeError(u"Ошибочный тип данных 'str'", unicode(type(source)))

    if not isinstance(freq, int):
        raise TypeError(u"Ошибочный тип данных 'freq'", unicode(type(freq)))

    if not isinstance(num, int):
        raise TypeError(u"Ошибочный тип данных 'num'", unicode(type(num)))

    # два байта по адресу '1C49' зависят только от частоты
    fr = my_func.intToStrHex(calcFreq(freq), 4, "le").decode('hex')
    adr = my_func.strHexToInt('1C49')
    source = source[:adr] + fr + source[adr + len(fr):]

    # два байта по адресу '5892' зависят от частоты и номера аппарата
    crc1 = my_func.intToStrHex(calcCrc1(freq, num), 4, "le").decode('hex')
    adr = my_func.strHexToInt('5892')
    source = source[:adr] + crc1 + source[adr + len(crc1):]

    # два байта по адресу '5894' зависят от частоты и номера аппарата
    crc2 = my_func.intToStrHex(calcCrc2(freq, num), 4, "le").decode('hex')
    adr = my_func.strHexToInt('5894')
    source = source[:adr] + crc2 + source[adr + len(crc2):]

    return source
Пример #2
0
def newRZSK_1v30(source, freq, num):
    """ (str, int, int) -> str
        
        Корректирует файл прошивки версии 1v30 для РЗСК для указанной частоты
        и номера аппарата.
    """

    def calcCrc1(freq, num):
        """ (int, int) -> int
            
        Вычисление КС для заданной частоты и номера аппарата. 
        """
        if num == 1:
            crc = -39
        elif num == 2:
            crc = 38
        return crc + 32 * freq

    def calcCrc2(freq, num):
        """ (int, int) -> int
        
            Вычисление КС для заданной частоты и номера аппарата.
        """
        if num == 1:
            crc = 9
        elif num == 2:
            crc = -10
        return crc + 8 * freq

    def calcFreq(freq):
        """ (int) -> int
        
            Вычисление значения для частоты.
        """
        return 16 * freq

    if not isinstance(source, str):
        raise TypeError(u"Ошибочный тип данных 'str'", unicode(type(source)))

    if not isinstance(freq, int):
        raise TypeError(u"Ошибочный тип данных 'freq'", unicode(type(freq)))

    if not isinstance(num, int):
        raise TypeError(u"Ошибочный тип данных 'num'", unicode(type(num)))

    fr = my_func.intToStrHex(calcFreq(freq), 4, "le").decode("hex")
    adr = my_func.strHexToInt("4DE6")
    source = source[:adr] + fr + source[adr + len(fr) :]

    crc1 = my_func.intToStrHex(calcCrc1(freq, num), 4, "le").decode("hex")
    adr = my_func.strHexToInt("7C1E")
    source = source[:adr] + crc1 + source[adr + len(crc1) :]

    crc2 = my_func.intToStrHex(calcCrc2(freq, num), 4, "le").decode("hex")
    adr = my_func.strHexToInt("7C22")
    source = source[:adr] + crc2 + source[adr + len(crc2) :]

    return source
Пример #3
0
def newRZSK_1v30(source, freq, num):
    ''' (str, int, int) -> str
        
        Корректирует файл прошивки версии 1v30 для РЗСК для указанной частоты
        и номера аппарата.
    '''
    def calcCrc1(freq, num):
        ''' (int, int) -> int
            
        Вычисление КС для заданной частоты и номера аппарата. 
        '''
        if (num == 1):
            crc = -39
        elif (num == 2):
            crc = 38
        return crc + 32 * freq

    def calcCrc2(freq, num):
        ''' (int, int) -> int
        
            Вычисление КС для заданной частоты и номера аппарата.
        '''
        if (num == 1):
            crc = 9
        elif (num == 2):
            crc = -10
        return crc + 8 * freq

    def calcFreq(freq):
        ''' (int) -> int
        
            Вычисление значения для частоты.
        '''
        return 16 * freq

    if not isinstance(source, str):
        raise TypeError(u"Ошибочный тип данных 'str'", unicode(type(source)))

    if not isinstance(freq, int):
        raise TypeError(u"Ошибочный тип данных 'freq'", unicode(type(freq)))

    if not isinstance(num, int):
        raise TypeError(u"Ошибочный тип данных 'num'", unicode(type(num)))

    fr = my_func.intToStrHex(calcFreq(freq), 4, "le").decode('hex')
    adr = my_func.strHexToInt('4DE6')
    source = source[:adr] + fr + source[adr + len(fr):]

    crc1 = my_func.intToStrHex(calcCrc1(freq, num), 4, "le").decode('hex')
    adr = my_func.strHexToInt('7C1E')
    source = source[:adr] + crc1 + source[adr + len(crc1):]

    crc2 = my_func.intToStrHex(calcCrc2(freq, num), 4, "le").decode('hex')
    adr = my_func.strHexToInt('7C22')
    source = source[:adr] + crc2 + source[adr + len(crc2):]

    return source
Пример #4
0
def newP400_1v34c(source, freq, num):
    ''' (str, int, int) -> str

        Корректирует файл прошивки версии 1v34c для Р400 для указанной частоты.
        Номер аппарата не используется.
    '''

    #
    def calcFreq(freq):
        ''' (int) -> int
            
        Вычисление КС для заданной частоты. 
        '''
        return 32 * freq

    def calcCrc1(freq, num):
        ''' (int, int) -> int
            
        Вычисление КС для заданной частоты. 
        '''
        return 32 * freq

    def calcCrc2(freq, num):
        ''' (int, int) -> int
        
            Вычисление КС для заданной частоты и номера аппарата.
        '''
        return 8 * freq

    if not isinstance(source, str):
        raise TypeError(u"Ошибочный тип данных 'str'", unicode(type(source)))

    if not isinstance(freq, int):
        raise TypeError(u"Ошибочный тип данных 'freq'", unicode(type(freq)))

    if not isinstance(num, int):
        raise TypeError(u"Ошибочный тип данных 'num'", unicode(type(num)))


    # два байта по адресу '1CDC' зависят от частоты
    fr = my_func.intToStrHex(calcFreq(freq), 4, "le").decode('hex')
    adr = my_func.strHexToInt('1CDC')
    source = source[:adr] + fr + source[adr + len(fr):]

    # два байта по адресу '5845' зависят от частоты
    crc1 = my_func.intToStrHex(calcCrc1(freq, num), 4, "le").decode('hex')
    adr = my_func.strHexToInt('5845')
    source = source[:adr] + crc1 + source[adr + len(crc1):]

    # два байта по адресу '5847' зависят от частоты
    crc2 = my_func.intToStrHex(calcCrc2(freq, num), 4, "le").decode('hex')
    adr = my_func.strHexToInt('5847')
    source = source[:adr] + crc2 + source[adr + len(crc2):]

    return source
Пример #5
0
def newP400_1v34c(source, freq, num):
    ''' (str, int, int) -> str

        Корректирует файл прошивки версии 1v34c для Р400 для указанной частоты.
        Номер аппарата не используется.
    '''

    #
    def calcFreq(freq):
        ''' (int) -> int
            
        Вычисление КС для заданной частоты. 
        '''
        return 32 * freq

    def calcCrc1(freq, num):
        ''' (int, int) -> int
            
        Вычисление КС для заданной частоты. 
        '''
        return 32 * freq

    def calcCrc2(freq, num):
        ''' (int, int) -> int
        
            Вычисление КС для заданной частоты и номера аппарата.
        '''
        return 8 * freq

    if not isinstance(source, str):
        raise TypeError(u"Ошибочный тип данных 'str'", unicode(type(source)))

    if not isinstance(freq, int):
        raise TypeError(u"Ошибочный тип данных 'freq'", unicode(type(freq)))

    if not isinstance(num, int):
        raise TypeError(u"Ошибочный тип данных 'num'", unicode(type(num)))

    # два байта по адресу '1CDC' зависят от частоты
    fr = my_func.intToStrHex(calcFreq(freq), 4, "le").decode('hex')
    adr = my_func.strHexToInt('1CDC')
    source = source[:adr] + fr + source[adr + len(fr):]

    # два байта по адресу '5845' зависят от частоты
    crc1 = my_func.intToStrHex(calcCrc1(freq, num), 4, "le").decode('hex')
    adr = my_func.strHexToInt('5845')
    source = source[:adr] + crc1 + source[adr + len(crc1):]

    # два байта по адресу '5847' зависят от частоты
    crc2 = my_func.intToStrHex(calcCrc2(freq, num), 4, "le").decode('hex')
    adr = my_func.strHexToInt('5847')
    source = source[:adr] + crc2 + source[adr + len(crc2):]

    return source
Пример #6
0
    def testIntToStrHex(self):
        """ (self) -> None
        
            �������� ���������� ������ ������� intToStrHex.
        """
        self.assertEqual(my_func.intToStrHex(12), '0C')
        self.assertEqual(my_func.intToStrHex(12, num=4), '000C')
        self.assertEqual(my_func.intToStrHex(2049), '0801')
        self.assertEqual(my_func.intToStrHex(2049, num=2), '01')
        self.assertEqual(my_func.intToStrHex(2049, arch="le"), '0108')

        self.assertRaises(TypeError, my_func.intToStrHex, "1")
        self.assertRaises(TypeError, my_func.intToStrHex, 12, '12')
        self.assertRaises(ValueError, my_func.intToStrHex, 12, None, "d")
Пример #7
0
    def saveFile(self, chacked=False, name='check.dat'):
        ''' (self, name) -> None
            
            Сохранение файла данных с путем/имененм name
            chacked - для SIGNAL от кнопки
        '''
        # считаем файл прошивки и разобъем ее на строки
        
        data = ['00', ]
        data.append(my_func.intToStrHex(75))
        
        for i in range(self.adjTable.rowCount()):
            val = float(self.adjTable.item(i, 0).text())
            data.append(my_func.floatToStrHex(val, 'le'))
        
#        for i in range(self.adjTable.rowCount()):
            val = float(self.adjTable.item(i, 1).text())
            data.append(my_func.floatToStrHex(val, 'le'))
            
#        for i in range(self.adjTable.rowCount()):
            val = int(self.adjTable.item(i, 2).text())
            data.append(my_func.intToStrHex(val, 4, 'le'))
            
#        for i in range(self.adjTable.rowCount()):
            val = int(self.adjTable.item(i, 3).text())
            data.append(my_func.intToStrHex(val, 4, 'le'))
            
#        for i in range(self.adjTable.rowCount()):
            val = float(self.adjTable.item(i, 4).text())
            data.append(my_func.floatToStrHex(val, 'le'))
        
        # bin-file
        fSave = open(name, 'wb')
        for val in data:
            tmp = val.decode('hex')
            fSave.write(tmp)
        fSave.close()
Пример #8
0
 def calcCrc2(freq, num):
     val = freq * 8
     if num == 1:
         val -= 16
     elif num == 2:
         val += 16
     else:
         print u"calcCrc2"
         print u"Значения кроме 1 и 2 не принимаются:", num, type(num)
         raise ValueError
     val = my_func.intToStrHex(val)
     while len(val) < 4:
         val = '0' + val
     val = val[2:] + val[:2]
     return val
Пример #9
0
 def calcCrc2(freq, num):
     val = freq * 8
     if num == 1:
         val -= 16
     elif num == 2:
         val += 16
     else:
         print u"calcCrc2"
         print u"Значения кроме 1 и 2 не принимаются:", num, type(num)
         raise ValueError
     val = my_func.intToStrHex(val)
     while len(val) < 4:
         val = '0' + val
     val = val[2:] + val[:2]
     return val
Пример #10
0
def newP400_1v36(source, freq, num):
    ''' (str) -> sr

        Корректирует файл прошивки версии 1v36 для Р400 для указанной частоты
        и номера аппарата.
    '''
    #
    def calcFreq(freq):
        ''' (int) -> int
            
        Вычисление КС для заданной частоты. 
        '''
        return 16 * freq

    def calcCrc1(freq, num):
        ''' (int, int) -> int
            
        Вычисление КС для заданной частоты. 
        '''
        if (num == 1):
            crc = 64
        elif (num == 2):
            crc = -64
        return crc + 32 * freq

    def calcCrc2(freq, num):
        ''' (int, int) -> int
        
            Вычисление КС для заданной частоты и номера аппарата.
        '''
        if (num == 1):
            crc = -16
        elif (num == 2):
            crc = 16
        return crc + 8 * freq

    if not isinstance(source, str):
        raise TypeError(u"Ошибочный тип данных 'str'", unicode(type(source)))

    if not isinstance(freq, int):
        raise TypeError(u"Ошибочный тип данных 'freq'", unicode(type(freq)))

    if not isinstance(num, int):
        raise TypeError(u"Ошибочный тип данных 'num'", unicode(type(num)))


    # два байта  зависят от частоты
    fr = my_func.intToStrHex(calcFreq(freq), 4, "le").decode('hex')
    adr = my_func.strHexToInt('1BEB')
    source = source[:adr] + fr + source[adr + len(fr):]

    # два байта  зависят от частоты и номера аппарата
    crc1 = my_func.intToStrHex(calcCrc1(freq, num), 4, "le").decode('hex')
    adr = my_func.strHexToInt('57EC')
    source = source[:adr] + crc1 + source[adr + len(crc1):]

    # два байта  зависят от частоты и номера аппарата
    crc2 = my_func.intToStrHex(calcCrc2(freq, num), 4, "le").decode('hex')
    adr = my_func.strHexToInt('57EE')
    source = source[:adr] + crc2 + source[adr + len(crc2):]

    return source
Пример #11
0
def newP400m_1v34(source, freq, num):
    """ (str, int, int) -> str
        
        Корректирует файл прошивки версии 1v34 для Р400м для указанной частоты
        и номера аппарата.
    """

    def calcCrc1(freq, num):
        """ (int, int) -> int
            
        Вычисление КС для заданной частоты и номера аппарата. 
        """
        if num == 1:
            crc = 64
        elif num == 2:
            crc = -64
        return crc + 32 * freq

    def calcCrc2(freq, num):
        """ (int, int) -> int
        
            Вычисление КС для заданной частоты и номера аппарата.
        """
        if num == 1:
            crc = -16
        elif num == 2:
            crc = 16
        return crc + 8 * freq

    def calcFreq(freq):
        """ (int) -> int
        
            Вычисление значения для частоты.
        """
        return 32 * freq

    if not isinstance(source, str):
        raise TypeError(u"Ошибочный тип данных 'str'", unicode(type(source)))

    if not isinstance(freq, int):
        raise TypeError(u"Ошибочный тип данных 'freq'", unicode(type(freq)))

    if not isinstance(num, int):
        raise TypeError(u"Ошибочный тип данных 'num'", unicode(type(num)))

    # два байта по адресу '1C49' зависят только от частоты
    fr = my_func.intToStrHex(calcFreq(freq), 4, "le").decode("hex")
    adr = my_func.strHexToInt("1C49")
    source = source[:adr] + fr + source[adr + len(fr) :]

    # два байта по адресу '5892' зависят от частоты и номера аппарата
    crc1 = my_func.intToStrHex(calcCrc1(freq, num), 4, "le").decode("hex")
    adr = my_func.strHexToInt("5892")
    source = source[:adr] + crc1 + source[adr + len(crc1) :]

    # два байта по адресу '5894' зависят от частоты и номера аппарата
    crc2 = my_func.intToStrHex(calcCrc2(freq, num), 4, "le").decode("hex")
    adr = my_func.strHexToInt("5894")
    source = source[:adr] + crc2 + source[adr + len(crc2) :]

    return source