blob: 46ec93e5e22e4b63c600b70b78d3cac2693eae71 [file] [log] [blame]
#!/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 <http://www.gnu.org/licenses/>.
#
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 ""