1
0

SerialPortDeprecated.swift 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. import Foundation
  2. extension SerialPort {
  3. @available(*, deprecated, message: "Use `open(portMode:)` instead")
  4. public func openPort(toReceive receive: Bool, andTransmit transmit: Bool) throws {
  5. switch (receive, transmit) {
  6. case (true, false):
  7. try openPort(portMode: .receive)
  8. case (false, true):
  9. try openPort(portMode: .transmit)
  10. case (true, true):
  11. try openPort(portMode: .receiveAndTransmit)
  12. case (false, false):
  13. throw PortError.mustReceiveOrTransmit
  14. }
  15. }
  16. @available(*, deprecated, message: "Use async reading methods")
  17. public func readBytes(into buffer: UnsafeMutablePointer<UInt8>, size: Int) throws -> Int {
  18. guard let fileDescriptor = fileDescriptor else {
  19. throw PortError.mustBeOpen
  20. }
  21. var s: stat = stat()
  22. fstat(fileDescriptor, &s)
  23. if s.st_nlink != 1 {
  24. throw PortError.deviceNotConnected
  25. }
  26. let bytesRead = read(fileDescriptor, buffer, size)
  27. return bytesRead
  28. }
  29. @available(*, deprecated, message: "Use async reading methods")
  30. public func readData(ofLength length: Int) throws -> Data {
  31. let buffer = UnsafeMutablePointer<UInt8>.allocate(capacity: length)
  32. defer {
  33. buffer.deallocate()
  34. }
  35. let bytesRead = try readBytes(into: buffer, size: length)
  36. var data : Data
  37. if bytesRead > 0 {
  38. data = Data(bytes: buffer, count: bytesRead)
  39. } else {
  40. //This is to avoid the case where bytesRead can be negative causing problems allocating the Data buffer
  41. data = Data(bytes: buffer, count: 0)
  42. }
  43. return data
  44. }
  45. @available(*, deprecated, message: "Use async reading methods")
  46. public func readString(ofLength length: Int) throws -> String {
  47. var remainingBytesToRead = length
  48. var result = ""
  49. while remainingBytesToRead > 0 {
  50. let data = try readData(ofLength: remainingBytesToRead)
  51. if let string = String(data: data, encoding: String.Encoding.utf8) {
  52. result += string
  53. remainingBytesToRead -= data.count
  54. } else {
  55. return result
  56. }
  57. }
  58. return result
  59. }
  60. @available(*, deprecated, message: "Use async reading methods")
  61. public func readUntilChar(_ terminator: CChar) throws -> String {
  62. var data = Data()
  63. let buffer = UnsafeMutablePointer<UInt8>.allocate(capacity: 1)
  64. defer {
  65. buffer.deallocate()
  66. }
  67. while true {
  68. let bytesRead = try readBytes(into: buffer, size: 1)
  69. if bytesRead > 0 {
  70. if ( buffer[0] > 127) {
  71. throw PortError.unableToConvertByteToCharacter
  72. }
  73. let character = CChar(buffer[0])
  74. if character == terminator {
  75. break
  76. } else {
  77. data.append(buffer, count: 1)
  78. }
  79. }
  80. }
  81. if let string = String(data: data, encoding: String.Encoding.utf8) {
  82. return string
  83. } else {
  84. throw PortError.stringsMustBeUTF8
  85. }
  86. }
  87. @available(*, deprecated, message: "Use async reading methods")
  88. public func readLine() throws -> String {
  89. let newlineChar = CChar(10) // Newline/Line feed character `\n` is 10
  90. return try readUntilChar(newlineChar)
  91. }
  92. @available(*, deprecated, message: "Use async reading methods")
  93. public func readByte() throws -> UInt8 {
  94. let buffer = UnsafeMutablePointer<UInt8>.allocate(capacity: 1)
  95. defer {
  96. buffer.deallocate()
  97. }
  98. while true {
  99. let bytesRead = try readBytes(into: buffer, size: 1)
  100. if bytesRead > 0 {
  101. return buffer[0]
  102. }
  103. }
  104. }
  105. @available(*, deprecated, message: "Use async reading methods")
  106. public func readChar() throws -> UnicodeScalar {
  107. let byteRead = try readByte()
  108. let character = UnicodeScalar(byteRead)
  109. return character
  110. }
  111. }