This commit is contained in:
yurii 2025-12-23 16:23:11 +00:00
parent 7941e2065e
commit 975707de4c
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 { if len(statusResp) > 3 {
statusBytes := statusResp[7:11] // Extract the relevant bytes from the response statusBytes := statusResp[7:11] // Extract the relevant bytes from the response
// For each position, get the ASCII character, hex value, and mapped meaning. // 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}, {pos: 4, value: statusBytes[3], mapper: statusPos3},
} }
result := "" result := make([]string, len(posStatus))
for _, p := range posStatus { for _, p := range posStatus {
statusMsg, exists := p.mapper[p.value] statusMsg, exists := p.mapper[p.value]
if !exists { if !exists {
statusMsg = "Unknown status" statusMsg = "Unknown status"
} }
if p.value != 0x30 { 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 { if p.pos == 4 && p.value == 0x38 {
return result, fmt.Errorf("Card well empty") return nil, fmt.Errorf("Card well empty")
} }
} }
return result, nil return result, nil

View File

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

View File

@ -65,6 +65,9 @@ func main() {
fmt.Println(err.Error()) 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) log.Infof("Dispenser initialized on port %s, %s", config.DispenserPort, status)
} }