You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
1.8 KiB
76 lines
1.8 KiB
package main
|
|
|
|
import (
|
|
"git.tomans.ru/Tomansru/sl500-api"
|
|
"log"
|
|
"time"
|
|
)
|
|
|
|
func main() {
|
|
log.SetFlags(log.LstdFlags | log.Lmicroseconds)
|
|
|
|
reader, err := sl500_api.NewConnection("COM5", sl500_api.Baud.Baud19200, false)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
_, _ = reader.RfLight(sl500_api.ColorOff)
|
|
|
|
_, err = reader.RfAntennaSta(sl500_api.AntennaOn)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
_, _ = reader.RfLight(sl500_api.ColorRed)
|
|
|
|
ch := time.Tick(100 * time.Millisecond)
|
|
|
|
var resp, cardId, cardCapacity, blockData []byte
|
|
|
|
for range ch {
|
|
// Get card type and detect card
|
|
resp, _ = reader.RfRequest(sl500_api.RequestAll)
|
|
if len(resp) != 2 {
|
|
_, _ = reader.RfLight(sl500_api.ColorRed)
|
|
log.Printf("[ERROR 1]: Wrong length for rf request %v\n", resp)
|
|
continue
|
|
}
|
|
|
|
// Anti collision check and get card capacity
|
|
cardId, _ = reader.RfAnticoll()
|
|
cardCapacity, _ = reader.RfSelect(cardId)
|
|
if len(cardCapacity) == 0 {
|
|
log.Printf("[ERROR 2]: Capacity length is wrong %v\n", cardCapacity)
|
|
continue
|
|
}
|
|
|
|
// Set Authentication
|
|
_, err = reader.RfM1Authentication2(sl500_api.AuthModeKeyA, 28, []byte{0x6a, 0xa9, 0xd7, 0x71, 0x3e, 0xb3})
|
|
if err != nil {
|
|
log.Println("[ERROR 3]:", err)
|
|
continue
|
|
}
|
|
|
|
// Get Data
|
|
blockData, err = reader.RfM1Read(28)
|
|
if err != nil {
|
|
log.Println("[ERROR 4]:", err)
|
|
continue
|
|
}
|
|
if len(blockData) != 16 {
|
|
log.Printf("[ERROR 5]: Wrong block data length %v\n", blockData)
|
|
continue
|
|
}
|
|
|
|
_, _ = reader.RfLight(sl500_api.ColorGreen)
|
|
time.Sleep(80 * time.Millisecond)
|
|
_, _ = reader.RfLight(sl500_api.ColorOff)
|
|
time.Sleep(80 * time.Millisecond)
|
|
_, _ = reader.RfLight(sl500_api.ColorGreen)
|
|
time.Sleep(80 * time.Millisecond)
|
|
_, _ = reader.RfLight(sl500_api.ColorOff)
|
|
//_, _ = reader.RfBeep(30)
|
|
|
|
log.Printf("% x\n", blockData)
|
|
}
|
|
} |