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
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
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
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
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")
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()
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
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
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