Skip to content

A thread-safe Swift wrapper around a modified version of George Menie's Xmodem

Notifications You must be signed in to change notification settings

NRB-Tech/CXmodem

Repository files navigation

CXmodem

A thread-safe Swift wrapper around a modified version of George Menie's Xmodem.

Installation using Swift package manager

  1. Add the project to your Xcode project by using File > Swift Packages > Add package dependency and entering https://github.com/nrbtech/CXmodem.git, or by modifying your Package.swift:
import PackageDescription

let package = Package(
    name: "MyAwesomeProject",
    dependencies: [
        .Package(url: "https://github.com/nrbtech/CXmodem.git",
                 majorVersion: 1)
    ]
)
  1. Import the CXmodem module.
import CXmodem

Usage

When providing the completeCallback parameter, CXmodem's send and receive functions are automatically performed on a background thread:

let operationQueue = CXmodem.send(data: dataToSend, sendChunkSize: 20, sendBytesOnWireCallback: { (toSendOnWire) in
    serialPort.send(data: toSendOnWire)
}) { (sendResult) in
    switch sendResult {
    case .success:
        print("Send complete!")
    case .fail(error: let e):
        print("Error: \(e.rawValue)")
    }
}

// call when receiving data on "wire". Can be called on any thread but the operation queue must be passed
CXmodem.receivedBytesOnWire(queue: operationQueue, data: receivedData)

You can also optionally provide the queue to use for the sendBytesOnWireCallback, the final completeCallback and the operation queue.

If you do not provide a callback the functions are blocking, so must be performed on a background thread. :

let callback = { (sendResult: CXmodem.SendResult) -> Void in
    switch sendResult {
    case .success:
        print("Send complete!")
    case .fail(error: let e):
        print("Error: \(e.rawValue)")
    }
}

let operationQueue = DispatchQueue(label: "Xmodem send", qos: .background)
operationQueue.async {
    let sendResult = CXmodem.send(data: dataToSend, sendChunkSize: 20) { (toSendOnWire) in
        serialPort.send(data: toSendOnWire)
    }
    DispatchQueue.main.async {
        callback(sendResult)
    }
}

// call when receiving data on "wire". Can be called on any thread but the operation queue must be passed
CXmodem.receivedBytesOnWire(queue: operationQueue, data: receivedData)

About

A thread-safe Swift wrapper around a modified version of George Menie's Xmodem

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages