Compare commits

..

1 Commits

Author SHA1 Message Date
975707de4c start 2025-12-23 16:23:11 +00:00
3 changed files with 24 additions and 6 deletions

View File

@ -69,7 +69,7 @@ var (
}
)
func checkStatus(statusResp []byte) (string, error) {
func checkStatus(statusResp []byte) ([]string, error) {
if len(statusResp) > 3 {
statusBytes := statusResp[7:11] // Extract the relevant bytes from the response
// For each position, get the ASCII character, hex value, and mapped meaning.
@ -84,17 +84,17 @@ func checkStatus(statusResp []byte) (string, error) {
{pos: 4, value: statusBytes[3], mapper: statusPos3},
}
result := ""
result := make([]string, len(posStatus))
for _, p := range posStatus {
statusMsg, exists := p.mapper[p.value]
if !exists {
statusMsg = "Unknown status"
}
if p.value != 0x30 {
result += fmt.Sprintf("Status: %s; ", statusMsg)
result = append(result, fmt.Sprintf("Status: %s; ", statusMsg))
}
if p.pos == 4 && p.value == 0x38 {
return result, fmt.Errorf("Card well empty")
return nil, fmt.Errorf("Card well empty")
}
}
return result, nil

View File

@ -271,7 +271,7 @@ func (app *App) issueDoorCard(w http.ResponseWriter, r *http.Request) {
return
}
// dispenser sequence
// card to encoder position if not there already
if status, err := dispenser.DispenserSequence(app.dispPort); err != nil {
if status != "" {
logging.Error(serviceName, status, "Dispense error", string(op), "", "", 0)
@ -294,10 +294,11 @@ func (app *App) issueDoorCard(w http.ResponseWriter, r *http.Request) {
logging.Error(serviceName, err.Error(), "Key encoding", string(op), "", "", 0)
writeError(w, http.StatusBadGateway, err.Error())
dispenser.CardOutOfMouth(app.dispPort)
dispenser.DispenserSequence(app.dispPort)
return
}
// final dispenser steps
// card out of mouth
if status, err := dispenser.CardOutOfMouth(app.dispPort); err != nil {
logging.Error(serviceName, err.Error(), "Dispenser eject error", string(op), "", "", 0)
writeError(w, http.StatusServiceUnavailable, "Dispenser eject error: "+err.Error())
@ -306,6 +307,20 @@ func (app *App) issueDoorCard(w http.ResponseWriter, r *http.Request) {
log.Info(status)
}
// card to encoder position
if status, err := dispenser.DispenserSequence(app.dispPort); err != nil {
if status != "" {
logging.Error(serviceName, status, "Dispense error", string(op), "", "", 0)
writeError(w, http.StatusServiceUnavailable, "Dispense error: "+err.Error())
} else {
logging.Error(serviceName, err.Error(), "Dispense error", string(op), "", "", 0)
writeError(w, http.StatusServiceUnavailable, "Dispense error: "+err.Error()+"; check card stock")
}
return
} else {
log.Info(status)
}
theResponse.Code = http.StatusOK
theResponse.Message = "Card issued successfully"
// success! return 200 and any data you like

View File

@ -65,6 +65,9 @@ func main() {
fmt.Println(err.Error())
}
}
if status, err = dispenser.DispenserSequence(dispHandle); err != nil {
handlers.FatalError(err)
}
log.Infof("Dispenser initialized on port %s, %s", config.DispenserPort, status)
}