Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python2.7
- #-*- coding: utf-8 -*-
- import time
- import curses
- import locale
- import os
- import re
- ENTER_KEY = (curses.KEY_ENTER, ord('\n'), ord('\r'))
- modem_path = ''
- APN = ''
- interface = ''
- def cls(win):
- win.clear()
- def print_main_menu(win, initial_line = 0, initial_column = 0):
- win.addstr(initial_line , initial_column, "Выберите действие: ")
- win.addstr(initial_line + 1, initial_column, "")
- win.addstr(initial_line + 2, initial_column, "1. Выбрать APN")
- win.addstr(initial_line + 3, initial_column, "2. Выбрать файл модема")
- win.addstr(initial_line + 4, initial_column, "3. Выбрать имя интерфейса (e.g. wwan0)")
- win.addstr(initial_line + 5, initial_column, "4. Включить модем")
- win.addstr(initial_line + 6, initial_column, "5. Выключить модем")
- win.addstr(initial_line + 7, initial_column, "6: Запустить dhcpcd для модема")
- win.addstr(initial_line + 8, initial_column, "7: Выбрать режим работы модема")
- win.addstr(initial_line + 9, initial_column, "0: Выход")
- win.addstr(initial_line + 10, initial_column, "")
- win.addstr(initial_line + 11, initial_column, "> ")
- def read_input(win, read_interval = 0.05):
- returnValue = []
- while True:
- start_time = time.time()
- reading = True
- while reading:
- c = win.getch()
- elapsed_time = time.time() - start_time
- if c in ENTER_KEY:
- break
- elif c >= 0:
- returnValue.append(chr(c))
- if elapsed_time >= read_interval:
- returnValue.append(-1)
- reading = False
- if returnValue[-1] == -1:
- returnValue.pop()
- if len(returnValue) > 0:
- return ''.join(returnValue)
- def print_info_message(win, str, initial_line = 18, initial_column = 0):
- win.addstr(initial_line, initial_column, str)
- def print_modem_mode_menu(win, initial_line = 0, initial_column = 0):
- win.addstr(initial_line + 1 , initial_column, "Выберите режимы работы модема: ")
- win.addstr(initial_line + 2 , initial_column, "")
- win.addstr(initial_line + 3 , initial_column, "1: BLUE TOOTH")
- win.addstr(initial_line + 4 , initial_column, "2: CDROM")
- win.addstr(initial_line + 5 , initial_column, "3: SD")
- win.addstr(initial_line + 6 , initial_column, "4: 3G MODEM")
- win.addstr(initial_line + 7 , initial_column, "5: 3G PCUI")
- win.addstr(initial_line + 8 , initial_column, "6: 3G DIAG")
- win.addstr(initial_line + 9 , initial_column, "7: 3G GPS")
- win.addstr(initial_line + 10, initial_column, "8: 4G MODEM")
- win.addstr(initial_line + 11, initial_column, "9: 4G PCUI")
- win.addstr(initial_line + 12, initial_column, "a: 4G DIAG")
- win.addstr(initial_line + 13, initial_column, "b: 4G GPS")
- win.addstr(initial_line + 14, initial_column, "c: NCM (Network card mode)")
- win.addstr(initial_line + 15, initial_column, "")
- win.addstr(initial_line + 16, initial_column, "e.g. 3G only: 234567c; 4G only: 2389ac")
- win.addstr(initial_line + 17, initial_column, "> ")
- def send_command(modem_file, command):
- f = open(modem_file, 'w')
- f.write('\r\n' + command + '\r\n')
- f.close()
- def load_config(config_file = '/home/glaciuse/.modem_manager.conf'):
- _mod_path = ''
- _APN = ''
- _interface = ''
- if os.path.exists(config_file):
- if os.path.isfile(config_file):
- d = open(config_file, 'r').read()
- if len(d) > 5:
- d = eval(d)
- if 'modem_path' in d.keys():
- _mod_path = d['modem_path']
- if 'apn' in d.keys():
- _APN = d['apn']
- if 'interface' in d.keys():
- _interface = d['interface']
- return [_mod_path, _APN, _interface]
- def save_config():
- global modem_path, APN, interface
- f = open('.modem_manager.conf', 'w')
- os.popen('chmod 755 .modem_manager.conf')
- f.write('{\'modem_path\' : \'' + modem_path + '\', \'apn\' : \'' + APN + '\', \'interface\' : \'' + interface + '\'}')
- f.close()
- def curses_main(win):
- global APN, interface, modem_path
- timeout = 2
- curses.echo()
- win.timeout(0) #Non-cblock read
- cfg = load_config()
- modem_path = cfg[0]
- APN = cfg[1]
- interface = cfg[2]
- print_info_message(win, 'Текущие настройки:\n\tAPN:\t\t\'' + (APN if APN != '' else 'Не назначен') + '\'\n\tModem file:\t\'' + (modem_path if modem_path != '' else 'Не назначен') + '\'\n\tInterface:\t\'' + (interface if interface != '' else 'Не назначен') + '\'')
- while True:
- print_main_menu(win)
- value = read_input(win)
- cls(win)
- if value == '1':
- win.addstr(1, 0, 'Введите APN вашего провайдера: ')
- while True:
- APN = read_input(win, 300)
- cls(win)
- if APN != '':
- print_info_message(win, 'Текущие настройки:\n\tAPN:\t\t\'' + (APN if APN != '' else 'Не назначен') + '\'\n\tModem file:\t\'' + (modem_path if modem_path != '' else 'Не назначен') + '\'\n\tInterface:\t\'' + (interface if interface != '' else 'Не назначен') + '\'')
- break
- else:
- print_info_message(win, 'Неверный APN! Повторите ввод!')
- elif value == '2':
- win.addstr(1, 0, 'Введите файл модема: ')
- while True:
- modem_path = read_input(win, 3000)
- cls(win)
- if APN != '':
- print_info_message(win, 'Текущие настройки:\n\tAPN:\t\t\'' + (APN if APN != '' else 'Не назначен') + '\'\n\tModem file:\t\'' + (modem_path if modem_path != '' else 'Не назначен') + '\'\n\tInterface:\t\'' + (interface if interface != '' else 'Не назначен') + '\'')
- break
- else:
- print_info_message(win, 'Неверный файл модема! Повторите ввод!')
- elif value == '3':
- win.addstr(1, 0, 'Введите название интерфейса: ')
- while True:
- interface = read_input(win, 3000)
- cls(win)
- if APN != '':
- print_info_message(win, 'Текущие настройки:\n\tAPN:\t\t\'' + (APN if APN != '' else 'Не назначен') + '\'\n\tModem file:\t\'' + (modem_path if modem_path != '' else 'Не назначен') + '\'\n\tInterface:\t\'' + (interface if interface != '' else 'Не назначен') + '\'')
- break
- else:
- print_info_message(win, 'Неверное название интерфейса! Повторите ввод!')
- elif value == '4':
- cls(win)
- if APN != '':
- if modem_path != '':
- send_command(modem_path, 'AT^NDISDUP=1,1,\"' + APN + '\"')
- print_info_message(win, 'Текущие настройки:\n\tAPN:\t\t\'' + (APN if APN != '' else 'Не назначен') + '\'\n\tModem file:\t\'' + (modem_path if modem_path != '' else 'Не назначен') + '\'\n\tInterface:\t\'' + (interface if interface != '' else 'Не назначен') + '\'')
- else:
- print_info_message(win, 'Не выбран файл модема! Обычно этот файл имеет вид /dev/ttyUSBX, где X = [1, 2, ..., N]')
- else:
- print_info_message(win, 'Не указан APN! Сначала укажите APN, потом включайте модем!')
- elif value == '5':
- send_command(modem_path, 'AT^NDISDUP=1,0')
- elif value == '6':
- cls(win)
- if interface != '':
- os.popen('dhcpcd ' + interface)
- print_info_message(win, 'Текущие настройки:\n\tAPN:\t\t\'' + (APN if APN != '' else 'Не назначен') + '\'\n\tModem file:\t\'' + (modem_path if modem_path != '' else 'Не назначен') + '\'\n\tInterface:\t\'' + (interface if interface != '' else 'Не назначен') + '\'')
- else:
- print_info_message(win, 'Не указан Interface! Сначала укажите Interface, потом запускайпе dhcpcd!\nСписок интерфейсов можно посмотреть командой ifconfig -a')
- elif value == '7':
- if modem_path != '':
- while True:
- print_modem_mode_menu(win)
- value = read_input(win, 3000)
- cls(win)
- if len(re.findall('[^0-9abcd]', value)) == 0:
- if len(value) > 1:
- command = '^SETPORT:\"'
- else:
- command = '^SETPORT:'
- while len(value) > 0:
- if '1' in value: # BLUE TOOTH
- command += 'A'
- value = value.replace('1', '')
- if len(re.findall('[23]', value)) == 0:
- command += ';'
- else:
- command += ','
- if '2' in value: # CDROM
- command += 'A1'
- value = value.replace('2', '')
- if len(re.findall('[13]', value)) == 0:
- command += ';'
- else:
- command += ','
- if '3' in value: # SD
- command += 'A2'
- value = value.replace('3', '')
- if len(re.findall('[12]', value)) == 0:
- command += ';'
- else:
- command += ','
- if '4' in value: # 3G MODEM
- command += '1'
- value = value.replace('4', '')
- if len(value) != 0:
- command += ','
- if '5' in value: # 3G PCUI
- command += '2'
- value = value.replace('5', '')
- if len(value) != 0:
- command += ','
- if '6' in value: # 3G DIAG
- command += '3'
- value = value.replace('6', '')
- if len(value) != 0:
- command += ','
- if '7' in value: # 3G GPS
- command += '5'
- value = value.replace('7', '')
- if len(value) != 0:
- command += ','
- if '8' in value: # 4G MODEM
- command += '10'
- value = value.replace('8', '')
- if len(value) != 0:
- command += ','
- if '9' in value: # 4G PCUI
- command += '12'
- value = value.replace('9', '')
- if len(value) != 0:
- command += ','
- if 'a' in value: # 4G DIAG
- command += '13'
- value = value.replace('a', '')
- if len(value) != 0:
- command += ','
- if 'b' in value: # 4G GPS
- command += '14'
- value = value.replace('b', '')
- if len(value) != 0:
- command += ','
- if 'c' in value: # NCM
- command += '16'
- value = value.replace('c', '')
- if len(value) != 0:
- command += ','
- if '\"' in command:
- command = command + '\"'
- send_command(modem_path, command)
- print_info_message(win, 'Текущие настройки:\n\tAPN:\t\t\'' + (APN if APN != '' else 'Не назначен') + '\'\n\tModem file:\t\'' + (modem_path if modem_path != '' else 'Не назначен') + '\'\n\tInterface:\t\'' + (interface if interface != '' else 'Не назначен') + '\'')
- break
- else:
- print_info_message(win, 'Неверная команда! Повторите ввод!')
- else:
- print_info_message(win, 'Не выбран файл модема! Обычно этот файл имеет вид /dev/ttyUSBX, где X = [1, 2, ..., N]')
- elif value == '0':
- save_config()
- break
- else:
- print_info_message(win, 'Неверная команда! Повторите ввод!')
- def main():
- locale.setlocale(locale.LC_ALL, '')
- curses.wrapper(curses_main)
- if __name__ == '__main__':
- main()
Advertisement
Add Comment
Please, Sign In to add comment