#!/usr/bin/env python2 # -*- coding: utf-8 -*- """ pySim: card handler utilities """ # # (C) 2019 by Sysmocom s.f.m.c. GmbH # All Rights Reserved # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # import subprocess import sys import yaml # Manual card handler: User is prompted to insert/remove card from the reader. class card_handler: sl = None def __init__(self, sl): self.sl = sl def get(self, first = False): print "Ready for Programming: Insert card now (or CTRL-C to cancel)" self.sl.wait_for_card(newcardonly=not first) def error(self): print "Programming failed: Remove card from reader" print "" def done(self): print "Programming successful: Remove card from reader" print "" # Automatic card handler: A machine is used to handle the cards. class card_handler_auto: sl = None cmds = None verbose = True def __init__(self, sl, config_file): print "Card handler Config-file: " + str(config_file) self.sl = sl with open(config_file) as cfg: self.cmds = yaml.load(cfg, Loader=yaml.FullLoader) self.verbose = (self.cmds.get('verbose') == True) def __print_outout(self,out): print "" print "Card handler output:" print "---------------------8<---------------------" stdout = out[0].strip() if len(stdout) > 0: print "stdout:" print stdout stderr = out[1].strip() if len(stderr) > 0: print "stderr:" print stderr print "---------------------8<---------------------" print "" def __exec_cmd(self, command): print "Card handler Commandline: " + str(command) proc = subprocess.Popen([command], stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) out = proc.communicate() rc = proc.returncode if rc != 0 or self.verbose: self.__print_outout(out) if rc != 0: print "" print "Error: Card handler failure! (rc=" + str(rc) + ")" sys.exit(rc) def get(self, first = False): print "Ready for Programming: Transporting card into the reader-bay..." self.__exec_cmd(self.cmds['get']) self.sl.connect() def error(self): print "Programming failed: Transporting card to the error-bin..." self.__exec_cmd(self.cmds['error']) print "" def done(self): print "Programming successful: Transporting card into the collector bin..." self.__exec_cmd(self.cmds['done']) print ""