Giter Club home page Giter Club logo

cxmodem's Introduction

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)

cxmodem's People

Contributors

nrbrook avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.