updateFrom method
void
updateFrom(
- String statusString, {
- required bool sqni,
})
Implementation
void updateFrom(String statusString, {required bool sqni}) {
try {
if (statusString.isEmpty) return;
final sUp = statusString.toUpperCase();
// ---- First: look for OS in strings like "HDCSQOK#OS=0#...#SI=00"
final os = StatusParsers.extractOS(sUp);
if (os != null) {
switch (os) {
case '0': // online
_status
..ready = true
..init = false
..notExist = false
..diskError = false
..paperJam = false
..paperOut = false
..powerOff = false
..unknown = false
..headLifted = false
..maxWeightExceeded = false
..desc = 'Device is Ready'
..state = StatusState.online;
break;
case '1': // offline
_status
..ready = false
..init = false
..notExist = false
..diskError = false
..paperJam = false
..paperOut = false
..powerOff = true
..unknown = false
..headLifted = false
..maxWeightExceeded = false
..desc = 'Device is Offline'
..state = StatusState.offline;
if (sqni) {
// match your C# tweak for SQNI case
_status.powerOff = false;
_status.unknown = true;
}
break;
case '2': // print head lifted (your C# also set paperJam=true)
_status
..ready = true
..init = false
..notExist = false
..diskError = false
..paperJam = true
..headLifted = true
..paperOut = false
..powerOff = false
..unknown = false
..maxWeightExceeded = false
..desc = 'Printer Head Lifted'
..state = StatusState.printHeadLifted;
break;
case '3': // busy
_status
..ready = true
..init = false
..notExist = false
..diskError = false
..paperJam = false
..paperOut = false
..powerOff = false
..unknown = false
..headLifted = false
..maxWeightExceeded = false
..desc = 'Busy'
..state = StatusState.busy;
break;
default: // other error/unknown
_status
..ready = false
..init = false
..notExist = false
..diskError = false
..paperJam = false
..paperOut = false
..powerOff = false
..unknown = true
..headLifted = false
..maxWeightExceeded = false
..desc = 'Unknown'
..state = StatusState.unknown;
}
}
// ---- Then: look for SI=.. flags (paper state), if present
final si = StatusParsers.extractSI(sUp);
if (si != null) {
switch (si) {
case '00':
case '11':
_status.paperJam = false;
_status.paperOut = false;
break;
case '10': // normalized from 1O -> paper out
_status
..ready = true
..init = false
..notExist = false
..diskError = false
..paperJam = false
..paperOut = true
..powerOff = false
..unknown = false
..maxWeightExceeded = false
..desc = 'Paper Out'
..state = StatusState.paperOut;
break;
case '1J': // paper jam
_status
..ready = true
..init = false
..notExist = false
..diskError = false
..paperJam = true
..paperOut = false
..powerOff = false
..unknown = false
..maxWeightExceeded = false
..desc = 'Paper Jam'
..state = StatusState.paperJam;
break;
}
}
// ---- Fallbacks for single-word replies like HDCMXOK / HDCUCOK#999
if (os == null && si == null) {
if (sUp.contains('OK')) {
_status
..ready = true
..init = false
..notExist = false
..diskError = false
..paperJam = false
..paperOut = false
..powerOff = false
..unknown = false
..maxWeightExceeded = false
..desc = 'Device is Ready'
..state = StatusState.online;
} else if (sUp.contains('ERR')) {
// mirrors your C# (ERR still set to Ready/online)
_status
..ready = true
..init = false
..notExist = false
..diskError = false
..paperJam = false
..paperOut = false
..powerOff = false
..unknown = false
..maxWeightExceeded = false
..desc = 'Device is Ready'
..state = StatusState.online;
}
}
// publish snapshot
statusNotifier.value = _status.clone();
} catch (_) {
// swallow/log as in C#
}
}