def softReset(self):
        self.simRouter.logging.info("\n")
        self.simRouter.logging.info("<- Soft reset")
        for cardDict in self.simRouter.cardsDict:
            if (not cardDict[MAIN_INTERFACE].routingAttr or
                    #skip SIM with no common instruction
                    cardDict[MAIN_INTERFACE].routingAttr.insCommon == [] or
                    not self.simRouter.simCtrl):
                continue
            #select MF
            if self.simRouter.simType == types.TYPE_USIM:
                apdu = "00A40004023F00"
            else:
                apdu = "A0A40000023F00"
            rapdu = self.simRouter.injectApdu(apdu, cardDict[MAIN_INTERFACE], mode=INJECT_NO_FORWARD)
            if not rapdu:
                #Skip resetting if there is USB apdu to handle
                self.simRouter.logging.info("Soft reset not completed, USB apdu ongoing")
                return
            # Close opened logical channel so the are not exhousted when UE
            # assign new channels after SIM reset.
            ctrlLogicalChannel = self.simRouter.simCtrl.logicalChannel
            for channel in range(1,4):
                if channel != ctrlLogicalChannel: #skip control logical channel
                    originChannel = 0
                    if self.simRouter.simType == types.TYPE_SIM:
                        cla = 0xA0
                    else:
                        cla = 0x00
                    cla = cla | (originChannel & 0x0F)
                    apdu = "%02X7080%02X00" %(cla, channel)
                    rapdu = self.simRouter.injectApdu(apdu, cardDict[MAIN_INTERFACE], mode=INJECT_NO_FORWARD)
                    if not rapdu:
                        #Skip resetting if there is USB apdu to handle
                        self.simRouter.logging.info("Soft reset not completed, USB apdu ongoing")
                        break
        self.simRouter.logging.info("-> reset end")