Star Micronics TSP650II蓝牙打印机,无法写入EASession.OutputStream

时间:2013-05-12 23:24:23

标签: ios printing xamarin.ios xamarin eaaccessory

我试图在Monotouch应用程序中使用Star Micronics TSP650II打印机打印标签。

问题是session.OutputStream.HasSpaceAvailable()总是返回false。我错过了什么?

我已经使用了C#代码(为简单起见):

    var manager = EAAccessoryManager.SharedAccessoryManager;
            var starPrinter = manager.ConnectedAccessories.FirstOrDefault (p => p.Name.IndexOf ("Star") >= 0); // this does find the EAAccessory correctly

    var session = new EASession (starPrinter, starPrinter.ProtocolStrings [0]); // the second parameter resolves to "jp.star-m.starpro"
    session.OutputStream.Schedule (NSRunLoop.Current, "kCFRunLoopDefaultMode"); 
    session.OutputStream.Open ();

    byte[] toSend = GetInitData(); // this comes from another project where the same printer with ethernet cable was used in a windows environment and worked, not null for sure

   if (session.OutputStream.HasSpaceAvailable()) {
       int bytesWritten = session.OutputStream.Write (toSend, (uint)stillToSend.Length);  
       if (bytesWritten < 0) { 
           Debug.WriteLine ("ERROR WRITING DATA"); 
        } else {
             Debug.WriteLine("Some data written, ignoring the rest, just a test");
        } 
   } else
       Debug.WriteLine ("NO SPACE"); // THIS ALWAYS PRINTS, the output stream is never ready to take any output

更新: 我能够通过将Star Micronics iOS SDK绑定到我的项目来解决这个问题,但这不太理想,因为它为包装添加了700K,以便在没有绑定的情况下工作。

更新2: 我一直在收到绑定代码的请求。我仍然强烈建议您尝试找出蓝牙连接,而不是使用绑定,但对于那些勇敢的人,here it is

2 个答案:

答案 0 :(得分:0)

你说this does find the EAAccessory correctly

如果会话实际上为空,这可能是OutputStream返回false的原因吗?

最诚挚的问候,

明星支持

答案 1 :(得分:0)

这是Star Micronics的软件集成工程师Kale Evans。

虽然Apple的EADemo没有显示这一点,但下面的代码对于打印到EAAccessory很重要。(注意,下面的代码是Objective-C示例)。

    if ([[_session outputStream] hasSpaceAvailable] == NO) 
    { 
   [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; 
    }

这为操作系统提供了处理所有输入源的时间。