Guest User

Untitled

a guest
Oct 9th, 2013
947
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 11.09 KB | None | 0 0
  1. #!/usr/bin/python2.7
  2. #-*- coding: utf-8 -*-
  3.  
  4. import time
  5. import curses
  6. import locale
  7. import os
  8. import re
  9.  
  10.  
  11. ENTER_KEY = (curses.KEY_ENTER, ord('\n'), ord('\r'))
  12. modem_path = ''
  13. APN = ''
  14. interface = ''
  15.  
  16. def cls(win):
  17.     win.clear()
  18.  
  19. def print_main_menu(win, initial_line = 0, initial_column = 0):
  20.     win.addstr(initial_line    , initial_column, "Выберите действие: ")
  21.     win.addstr(initial_line + 1, initial_column, "")
  22.     win.addstr(initial_line + 2, initial_column, "1. Выбрать APN")
  23.     win.addstr(initial_line + 3, initial_column, "2. Выбрать файл модема")
  24.     win.addstr(initial_line + 4, initial_column, "3. Выбрать имя интерфейса (e.g. wwan0)")
  25.     win.addstr(initial_line + 5, initial_column, "4. Включить модем")
  26.     win.addstr(initial_line + 6, initial_column, "5. Выключить модем")
  27.     win.addstr(initial_line + 7, initial_column, "6: Запустить dhcpcd для модема")
  28.     win.addstr(initial_line + 8, initial_column, "7: Выбрать режим работы модема")
  29.     win.addstr(initial_line + 9, initial_column, "0: Выход")
  30.     win.addstr(initial_line + 10, initial_column, "")
  31.     win.addstr(initial_line + 11, initial_column, "> ")
  32.  
  33. def read_input(win, read_interval = 0.05):
  34.    
  35.     returnValue = []
  36.  
  37.     while True:
  38.  
  39.         start_time = time.time()
  40.         reading = True
  41.  
  42.         while reading:
  43.             c = win.getch()
  44.             elapsed_time = time.time() - start_time
  45.        
  46.             if c in ENTER_KEY:
  47.                 break
  48.  
  49.             elif c >= 0:
  50.                 returnValue.append(chr(c))
  51.  
  52.             if elapsed_time >= read_interval:
  53.                 returnValue.append(-1)
  54.                 reading = False
  55.  
  56.         if returnValue[-1] == -1:
  57.             returnValue.pop()
  58.  
  59.         if len(returnValue) > 0:
  60.             return ''.join(returnValue)
  61.  
  62.  
  63. def print_info_message(win, str, initial_line = 18, initial_column = 0):
  64.     win.addstr(initial_line, initial_column, str)
  65.  
  66. def print_modem_mode_menu(win, initial_line = 0, initial_column = 0):
  67.    
  68.     win.addstr(initial_line + 1 , initial_column, "Выберите режимы работы модема: ")
  69.     win.addstr(initial_line + 2 , initial_column, "")
  70.     win.addstr(initial_line + 3 , initial_column, "1: BLUE TOOTH")
  71.     win.addstr(initial_line + 4 , initial_column, "2: CDROM")
  72.     win.addstr(initial_line + 5 , initial_column, "3: SD")
  73.     win.addstr(initial_line + 6 , initial_column, "4: 3G MODEM")
  74.     win.addstr(initial_line + 7 , initial_column, "5: 3G PCUI")
  75.     win.addstr(initial_line + 8 , initial_column, "6: 3G DIAG")
  76.     win.addstr(initial_line + 9 , initial_column, "7: 3G GPS")
  77.     win.addstr(initial_line + 10, initial_column, "8: 4G MODEM")
  78.     win.addstr(initial_line + 11, initial_column, "9: 4G PCUI")
  79.     win.addstr(initial_line + 12, initial_column, "a: 4G DIAG")
  80.     win.addstr(initial_line + 13, initial_column, "b: 4G GPS")
  81.     win.addstr(initial_line + 14, initial_column, "c: NCM (Network card mode)")
  82.     win.addstr(initial_line + 15, initial_column, "")
  83.     win.addstr(initial_line + 16, initial_column, "e.g. 3G only: 234567c; 4G only: 2389ac")
  84.     win.addstr(initial_line + 17, initial_column, "> ")
  85.  
  86. def send_command(modem_file, command):
  87.     f = open(modem_file, 'w')
  88.     f.write('\r\n' + command + '\r\n')
  89.     f.close()
  90.  
  91.  
  92. def load_config(config_file = '/home/glaciuse/.modem_manager.conf'):
  93.     _mod_path = ''
  94.     _APN = ''
  95.     _interface = ''
  96.  
  97.     if os.path.exists(config_file):
  98.         if os.path.isfile(config_file):
  99.             d = open(config_file, 'r').read()
  100.             if len(d) > 5:
  101.                 d = eval(d)
  102.                 if 'modem_path' in d.keys():
  103.                     _mod_path = d['modem_path']
  104.                 if 'apn' in d.keys():
  105.                     _APN = d['apn']
  106.                 if 'interface' in d.keys():
  107.                     _interface = d['interface']
  108.  
  109.     return [_mod_path, _APN, _interface]
  110.  
  111. def save_config():
  112.     global modem_path, APN, interface
  113.     f = open('.modem_manager.conf', 'w')
  114.     os.popen('chmod 755 .modem_manager.conf')
  115.     f.write('{\'modem_path\' : \'' + modem_path + '\', \'apn\' : \'' + APN + '\', \'interface\' : \'' + interface + '\'}')
  116.     f.close()
  117.  
  118. def curses_main(win):
  119.     global APN, interface, modem_path
  120.  
  121.     timeout = 2
  122.     curses.echo()
  123.     win.timeout(0) #Non-cblock read
  124.     cfg = load_config()
  125.     modem_path = cfg[0]
  126.     APN = cfg[1]
  127.     interface = cfg[2]
  128.    
  129.     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 'Не назначен') + '\'')
  130.    
  131.     while True:
  132.         print_main_menu(win)
  133.         value = read_input(win)
  134.         cls(win)
  135.  
  136.         if value == '1':
  137.             win.addstr(1, 0, 'Введите APN вашего провайдера: ')
  138.             while True:
  139.                 APN = read_input(win, 300)
  140.                 cls(win)
  141.                 if APN != '':
  142.                     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 'Не назначен') + '\'')
  143.                     break
  144.                 else:
  145.                     print_info_message(win, 'Неверный APN! Повторите ввод!')
  146.        
  147.         elif value == '2':
  148.             win.addstr(1, 0, 'Введите файл модема: ')
  149.             while True:
  150.                 modem_path = read_input(win, 3000)
  151.                 cls(win)
  152.                 if APN != '':
  153.                     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 'Не назначен') + '\'')
  154.                     break
  155.                 else:
  156.                     print_info_message(win, 'Неверный файл модема! Повторите ввод!')
  157.  
  158.         elif value == '3':
  159.             win.addstr(1, 0, 'Введите название интерфейса: ')
  160.             while True:
  161.                 interface = read_input(win, 3000)
  162.                 cls(win)
  163.                 if APN != '':
  164.                     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 'Не назначен') + '\'')
  165.                     break
  166.                 else:
  167.                     print_info_message(win, 'Неверное название интерфейса! Повторите ввод!')    
  168.  
  169.         elif value == '4':
  170.             cls(win)
  171.             if APN != '':
  172.                 if modem_path != '':
  173.                     send_command(modem_path, 'AT^NDISDUP=1,1,\"' + APN + '\"')
  174.                     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 'Не назначен') + '\'')
  175.                 else:
  176.                     print_info_message(win, 'Не выбран файл модема! Обычно этот файл имеет вид /dev/ttyUSBX, где X = [1, 2, ..., N]')           
  177.             else:
  178.                 print_info_message(win, 'Не указан APN! Сначала укажите APN, потом включайте модем!')     
  179.  
  180.         elif value == '5':
  181.             send_command(modem_path, 'AT^NDISDUP=1,0')
  182.  
  183.         elif value == '6':
  184.             cls(win)
  185.             if interface != '':
  186.                 os.popen('dhcpcd ' + interface)
  187.                 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 'Не назначен') + '\'')
  188.             else:
  189.                 print_info_message(win, 'Не указан Interface! Сначала укажите Interface, потом запускайпе dhcpcd!\nСписок интерфейсов можно посмотреть командой ifconfig -a')
  190.         elif value == '7':
  191.             if modem_path != '':
  192.                 while True:
  193.                     print_modem_mode_menu(win)
  194.                     value = read_input(win, 3000)
  195.                     cls(win)
  196.                
  197.                     if len(re.findall('[^0-9abcd]', value)) == 0:
  198.                         if len(value) > 1:
  199.                             command =  '^SETPORT:\"'
  200.                         else:
  201.                             command =  '^SETPORT:'
  202.                    
  203.                         while len(value) > 0:
  204.                             if '1' in value:    # BLUE TOOTH
  205.                                 command += 'A'
  206.                                 value = value.replace('1', '')
  207.                                 if len(re.findall('[23]', value)) == 0:
  208.                                     command += ';'
  209.                                 else:
  210.                                     command += ','
  211.  
  212.                             if '2' in value:    # CDROM
  213.                                 command += 'A1'
  214.                                 value = value.replace('2', '')
  215.                                 if len(re.findall('[13]', value)) == 0:
  216.                                     command += ';'
  217.                                 else:
  218.                                     command += ','
  219.  
  220.                             if '3' in value:    # SD
  221.                                 command += 'A2'
  222.                                 value = value.replace('3', '')
  223.                                 if len(re.findall('[12]', value)) == 0:
  224.                                     command += ';'
  225.                                 else:
  226.                                     command += ','
  227.  
  228.                             if '4' in value:    # 3G MODEM
  229.                                 command += '1'
  230.                                 value = value.replace('4', '')
  231.                                 if len(value) != 0:
  232.                                     command += ','
  233.                
  234.                             if '5' in value:    # 3G PCUI
  235.                                 command += '2'
  236.                                 value = value.replace('5', '')
  237.                                 if len(value) != 0:
  238.                                     command += ','
  239.  
  240.                             if '6' in value:    # 3G DIAG
  241.                                 command += '3'
  242.                                 value = value.replace('6', '')
  243.                                 if len(value) != 0:
  244.                                     command += ','
  245.  
  246.                             if '7' in value:    # 3G GPS
  247.                                 command += '5'
  248.                                 value = value.replace('7', '')
  249.                                 if len(value) != 0:
  250.                                     command += ','
  251.                    
  252.                             if '8' in value:    # 4G MODEM
  253.                                 command += '10'
  254.                                 value = value.replace('8', '')
  255.                                 if len(value) != 0:
  256.                                     command += ','
  257.  
  258.                             if '9' in value:    # 4G PCUI
  259.                                 command += '12'
  260.                                 value = value.replace('9', '')
  261.                                 if len(value) != 0:
  262.                                     command += ','
  263.  
  264.                             if 'a' in value:    # 4G DIAG
  265.                                 command += '13'
  266.                                 value = value.replace('a', '')
  267.                                 if len(value) != 0:
  268.                                     command += ','
  269.  
  270.                             if 'b' in value:    # 4G GPS
  271.                                 command += '14'
  272.                                 value = value.replace('b', '')
  273.                                 if len(value) != 0:
  274.                                     command += ','
  275.  
  276.                             if 'c' in value:    # NCM
  277.                                 command += '16'
  278.                                 value = value.replace('c', '')
  279.                                 if len(value) != 0:
  280.                                     command += ','
  281.  
  282.                         if '\"' in command:
  283.                             command = command + '\"'
  284.  
  285.                         send_command(modem_path, command)
  286.                         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 'Не назначен') + '\'')
  287.                         break
  288.  
  289.                     else:
  290.                         print_info_message(win, 'Неверная команда! Повторите ввод!')
  291.             else:
  292.                 print_info_message(win, 'Не выбран файл модема! Обычно этот файл имеет вид /dev/ttyUSBX, где X = [1, 2, ..., N]')
  293.  
  294.         elif value == '0':
  295.             save_config()
  296.             break
  297.         else:
  298.             print_info_message(win, 'Неверная команда! Повторите ввод!')
  299.  
  300. def main():
  301.     locale.setlocale(locale.LC_ALL, '')
  302.     curses.wrapper(curses_main)
  303.  
  304.  
  305. if __name__ == '__main__':
  306.     main()
Advertisement
Add Comment
Please, Sign In to add comment