Skip to content

Instantly share code, notes, and snippets.

@yume190
Last active August 29, 2015 14:04
Show Gist options
  • Save yume190/ffa6902707e7dc0a877c to your computer and use it in GitHub Desktop.
Save yume190/ffa6902707e7dc0a877c to your computer and use it in GitHub Desktop.
Swift Struct to NSData
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