Easycard #2: Address 0x80 and 0x90 VALUE BLOCK containing the amount in NTD 0000080 0125 0000 feda ffff 0125 0000 ff00 ff00 VALUE BLOCK containing the amount in NTD 0000090 0184 0000 fe7b ffff 0184 0000 ff00 ff00 Address 0xa0 DATA block containing transaction log of last re-charge 00000a0 c408 6708 304c 0064 0089 5b42 c50b 0031 08 transaction id / counter 4c6708 upper 24 bits of unix timestamp 30 transaction type: add value 0064 100 NTD added 0089 137 NTD remaining on card 5b MRT station code ZhongXiao DunHua c50b most likely reader number Address 0xe0 and 0x100 DATA block containing transaction entering MRT Liuzhangli 00000e0 de01 63d8 004c 0000 0190 0d00 6ad6 0002 0000100 de01 63d8 004c 0000 0190 0d02 6ad6 0002 01 transaction id / counter 4c63d8 upper 24 bits of unix timestamp 0000 no charge 0190 remaining balance on card 0d MRT station code Liuzhangli 6ad6 most likely reader number Address 0xd0 and 0x110 DATA BLOCK containing transaction leaving MRT Liuzhangli 00000d0 b502 63d9 114c 000c 0184 0d01 6d19 0002 0000110 b502 63d9 114c 000c 0184 0d02 6d19 0002 02 transaction id / counter 4c6349 upper 24 bits of unix timestamp 000c 12 NTD charge 0184 remaining account balance on card 0d MRT station code Liuzhangli 6d19 most likely reader number Address 0x1d0: DATA BLOCK containing part of leaving MRT station 00001d0 0000 0000 000d 0000 b500 63d9 004c 0000 000d MRT station code Liuzhangli 4c63d9 upper 24 bits of unix timestamp Address 0x1e0: DATA BLOCK containing part of last MRT entering transaction 00001e0 0000 0100 000d 0000 de00 63d8 004c 0000 0x0d == Station Number (Liuzhangli) 4c63d8 upper 24 bits of unix timestamp Address 0x120 DATA BLOCK containing transaction at Starbucks in XinDian (close Openmoko): 0000120 4403 63fc 204c 005f 0125 0197 d07b 0097 0x03 transaction number 4c63fc upper 24 bits of unix timestamp 0x5f == 95 -> NTD amount of purchase 0x125 == 293 -> NTD remaining after transaction Address 0x3e0 DATA BLOCK somehow related to shop purchasing 00003e0 0000 0000 0000 0000 0000 0b00 233d 0000 first purchase with easycard.1 (7eleven) 0x0b == day of month of purchase (11th) 0x0023 == 35 -> amount of purchase 00003e0 0000 0000 0000 0000 0000 0c00 4b3d 0000 second purchase with easycard.1 (7eleven) 0x0c == day of month of purchase (12th) 0x004b == 75 -> amount of purchase 00003e0 0000 0000 0000 0000 0000 0c00 5f3d 0000 first purchase with easycard.2 (starbucks) 0x0c == day of month of purchase (12th) 0x005f == 95 -> amount of purchase 00003e0 0000 0000 0000 0000 0000 0c00 233d 0001 second purchase with easycard.2 (cosmed) 0x0c == day of month of purchase (12th) 0x0123 == 291 -> total of all purchases today == timestamp == 0x63fc equals 2010-08-12 13:50 0x63d9 is abt. 2010-08-12 11:30 0x63d8 is abt. 2010-08-12 11:22 0x6316 is abt. 2010-08-12 21:30 current working assumption: one tick of the timestamp equals 4 minutes. this means last wrap of counter was 71 days ago, about june 2nd. UPDATE: the 0x4c in front actually makes it the upper 24 bits of a unix timestamp. However, it doesn't count in UTC but in local time. == procedures == === adding value (commit 63bfce7655ee367b079c914ecfbfaa73d5ce9169) === * update the two value blocks * add a transaction log record of type 0x30 to address 0xa0(!) * station name (0x5b == 91) same like at MRT enter/exit * 'amount' and 'remaining balance' as expected * timestamp as expected * transaction_id++ == Futher notes == * purchase at Starbucks prints UID of card in decimal (3224478099 == 0xc031a193) on receipt * purchase at other shops indicates this is standard practise +00000d0 b502 63d9 114c 000c 0184 0d01 6d19 0002 +0000110 b502 63d9 114c 000c 0184 0d02 6d19 0002 === station numbers == 0x0d Liuzhangli 0x24 Dapinglin they are the same as the decimal values in the OnMouseOver in the map at http://english.trtc.com.tw/ct.asp?xItem=1056373&CtNode=27496&mp=122032