Last active
August 29, 2015 14:04
-
-
Save yume190/ffa6902707e7dc0a877c to your computer and use it in GitHub Desktop.
Swift Struct to NSData
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
protocol Constructible { | |
init() | |
} | |
struct devicePacketHeader{ | |
var head:Byte = 1; | |
var checksum:Byte = 2; | |
var deviceID:Byte = 3; | |
var command:Byte = 4; | |
var len:Int16 = 5; | |
} | |
struct devicePacketAskDeviceID : Constructible{ | |
var revVersion:Int = 1 | |
// init() { | |
// revVersion = 1 | |
// } | |
} | |
struct devicePacketSetting:Constructible{ | |
var revVersion:UInt16 = 6 | |
var subVersion:UInt8 = 7 | |
var mainVersion:UInt8 = 8 | |
} | |
struct devicePacketRadios:Constructible{ | |
var Aileron:Float = 10; | |
var Elevator:Float = 11; | |
var Throttle:Float = 12; | |
var Rudder:Float = 13; | |
var Gear_Mode:Float = 14; | |
var Pitch_Return_Home:Float = 15; | |
var Aux1_Smart:Float = 16; | |
var Aux2:Float = 17; | |
} | |
struct devicePacketSingleParameter:Constructible{ | |
var index:Float = 20 | |
var value:Float = 21 | |
} | |
struct devicePacketAck:Constructible{ | |
var ack:Byte = 30 | |
} | |
struct devicePacketNil:Constructible{ | |
// init | |
} | |
struct devicePacket <T:Constructible> { | |
var deviceHeader:devicePacketHeader = devicePacketHeader(); | |
var deviceContent: T = T() | |
} | |
var packet0 = devicePacketHeader() | |
var data0 = NSData(bytes: &packet0, length: sizeof(devicePacketHeader)) | |
print("data0 : \(data0)\n") //data0 : <01020304 0500> | |
var packet1 = devicePacket<devicePacketNil>() | |
var data1 = NSData(bytes: &packet1, length: sizeof(devicePacket<devicePacketNil>)) | |
//var data1 = NSData(bytes: &packet1, length: sizeof(devicePacketNil) + sizeof(devicePacketHeader)) | |
print("data1 : \(data1)\n") //data1 : <01020304 0500> | |
var packet2 = devicePacket(deviceHeader: devicePacketHeader(), deviceContent: devicePacketSetting()) | |
packet2.deviceContent.mainVersion = 25 | |
var data2 = NSData(bytes: &packet2, length: sizeof(devicePacketSetting) + sizeof(devicePacketHeader)) | |
print("data2 : \(data2)\n") //data2 : <01020304 05000600 0719> | |
var packet3 = devicePacket(deviceHeader: devicePacketHeader(), deviceContent: devicePacketRadios()) | |
var data3 = NSData(bytes: &packet3, length: sizeof(devicePacket<devicePacketRadios>)) | |
print("data3 : \(data3)\n") //data3 : <01020304 05000000 00002041 00003041 00004041 00005041 00006041 00007041 00008041 00008841> | |
//0500 + 0000 X | |
var packet4 = devicePacket(deviceHeader: devicePacketHeader(), deviceContent: devicePacketSingleParameter()) | |
var data4 = NSData(bytes: &packet4, length: sizeof(devicePacket<devicePacketSingleParameter>)) | |
print("data4 : \(data4)\n") //data4 : <01020304 05000000 0000a041 0000a841> | |
//0500 + 0000 X | |
var packet5 = devicePacket(deviceHeader: devicePacketHeader(), deviceContent: devicePacketAck()) | |
var data5 = NSData(bytes: &packet5, length: sizeof(devicePacket<devicePacketAck>)) | |
print("data5 : \(data5)\n") //data5 : <01020304 05001e> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment