Estoy trabajando en una solución para enviar comandos a unImpresora de recibos en el punto de venta y tener algunos problemas para obtener el formato de comando correcto. Tengo un zócalo abierto para el dispositivo y eso funciona, porque se imprimen los comandos incorrectos. Lo que el SPEC solicita en este comando es enviar lo siguiente:
1B 07 o en decimal 27 7. El cual en ASCII es ESC_KEY BEL. El único ejemplo que muestra la especificación es para .NET:
MSComm1.Output = Chr $ (& H1B) & Chr $ (& H07)
Lo que he estado intentando:
// Socket está abierto previamente usando CFStreamCreatePairWithSocketToHost.
var cmd = "27 07"
if let dataString = "(cmd)r".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false), let oStream = self.outputStream {
self.outputData.append(dataString)
if oStream.hasSpaceAvailable {
oStream.write(UnsafePointer((self.outputData.first! as NSData).bytes), maxLength: self.outputData.first!length)
}
}
Los datos están llegando, pero creo que el formato del mensaje es incorrecto. Cualquier ayuda sería apreciada.
Respuestas
2 para la respuesta № 1Solo crea un byte (alias UInt8
) matriz con los datos que desea enviar, y pasar eso directamente a la write()
método de NSOutputStream
:
let cmd: [UInt8] = [0x1B, 0x07]
oStream.write(cmd, maxLength: cmd.count)
Tenga en cuenta que usted envía bytes al flujo de salida, no datos hexadecimales. No hace ninguna diferencia si crea la matriz con hexadecimal literales enteros como arriba, o como
let cmd: [UInt8] = [27, 7]
Los datos son exactamente los mismos.