def init(card,aid,pix,deposit): from transport_card import validate,set_deposit,register_contract,clear validate(card) set_deposit(card,deposit) clear(card,[(STATIC,KEY,'dynamic'),(DYNAMIC,KEY,'dynamic')]) static_sector = card.sector(num = STATIC, key = 0, enc = ENC, method = 'full', read = False) term_init(p(static_sector.data),p(TERM_INIT(aid,pix))) static_sector.data.crc16_calc(low_endian = 1) event = EVENT_CONTRACT(card, AID = aid, PIX = pix, TransactionType = 0) try: static_sector.write() static_sector.set_trailer(KEY, mode = 'dynamic') dynamic_sector = card.sector(num = DYNAMIC, key = 0, enc = 0xFF, method = 'full', read = False) dynamic_sector.data.cast(DYNAMIC_A).__init__(TERM_DYNAMIC) dynamic_sector.write() dynamic_sector.set_trailer(KEY, mode = 'dynamic') register_contract(card,STATIC,aid,pix) except Exception as e: event.set_error_code(e); raise finally: event.save(card)
def remove(card): from transport_card import validate,set_deposit,clear,register_contract validate(card) event = EVENT_CONTRACT(card, AID = AID, PIX = PIX, TransactionType = 1) try: clear(card,sectors = [(SECTOR,KEY,'static')]) register_contract(card,SECTOR,0,0) except Exception as e: event.set_error_code(e); raise finally: event.save(card) set_deposit(card,0)
def remove(card): from transport_card import validate,set_deposit,register_contract,clear validate(card) aidpix = card.contract_list[0] if len(card.contract_list) else 0 event = EVENT_CONTRACT(card, AID = aidpix >> 12, PIX = aidpix & 0xFFF, TransactionType = 1) try: clear(card,[(STATIC,KEY,'dynamic'),(DYNAMIC,KEY,'dynamic')]) register_contract(card,STATIC,0,0) except Exception as e: event.set_error_code(e); raise finally: event.save(card) set_deposit(card,0)
def test_available(): from interface import Reader import transport_card card = Reader().scan() transport_card.validate(card) sector,static = read_static(card) now = datetime.now() days_for_test = [datetime(year = now.year,month = now.month,day = d) for d in xrange(1,monthrange(now.year,now.month)[1]+1)] for date in days_for_test: ret = available_refill(static.aid,static.pix,date=date) if ret: print date.strftime("%d/%m/%y"),':',ret[0],[i.strftime("%d/%m/%y") for i in ret[1]]
def init(card,deposit): from transport_card import validate,set_deposit,register_contract validate(card) set_deposit(card,deposit) jsector = CONTRACT_A(CONTRACT1_STATIC,CONTRACT1_DYNAMIC) sector = card.sector(num=SECTOR,key=0,enc=ENCRYPTION,read=False) sector.data = ByteArray(jsector) event = EVENT_CONTRACT(card, AID = AID, PIX = PIX, TransactionType = 0) try: sector.write() sector.set_trailer(KEY) register_contract(card,SECTOR,AID,PIX) except Exception as e: event.set_error_code(e); raise finally: event.save(card)
('EventVer', c_uint8), ('CashCardSN', c_uint32), ('CashASPPSN', ASPP10), ('Amount', c_uint32), ('Value', c_uint32) # TagAmount ] def __init__(self,**kw): self.EventVer = 2 self.CashCardSN = config.cash_card_sn self.CashASPPSN = ASPP10(config.cash_card_aspp) Event.__init__(self,**kw) if __name__ == '__main__': import config config.cash_card_sn = 100 import events from interface import Reader import transport_card card = Reader().scan() transport_card.validate(card) x = events.EVENT_ENCASHMENT(Amount = 1000) print x x.save() print events.ServiceEvent.load_last()