Advertisement
Guest User

Untitled

a guest
Jun 25th, 2017
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.18 KB | None | 0 0
  1. // We have to nibble swap and mask off other nibbles, because original code likely used bitfields
  2. // that truncated to chars, which were then nibble-swapped for little-endianness
  3. // lo x y hi when only nibble swapped = x lo hi y == correct endianness for ARM
  4. #define GETHORIZ(hi,lo) (((hi & 0x0F) << 4) | ((lo & 0xF0) >> 4))
  5. #define _16_BSWAP(x) (((x & 0xFF00) >> 8) | ((x & 0xFF) << 8))
  6.  
  7. struct CmdBTBtn
  8. {
  9. unsigned char res1;
  10. unsigned char res2;
  11. unsigned char dstick;
  12. };
  13.  
  14. struct CmdBTUpd_lr1
  15. {
  16. unsigned char res;
  17. unsigned short states;
  18. };
  19.  
  20. struct CmdBTUpd_lr2
  21. {
  22. unsigned short states;
  23. unsigned char res;
  24. };
  25.  
  26. struct StickData
  27. {
  28. unsigned char horiz_lo : 4;
  29. unsigned char res1 : 4;
  30. unsigned char battery : 4;
  31. unsigned char horiz_hi : 4;
  32. unsigned char vert : 8;
  33. };
  34.  
  35. struct GyroData
  36. {
  37. unsigned char pitch_hi : 4; //0
  38. unsigned char res1 : 4;
  39. unsigned char res2 : 4; //1
  40. unsigned char pitch_lo : 4;
  41. unsigned char res3 : 4; //2
  42. unsigned char roll_hi : 4;
  43. unsigned char res4 : 4; //3
  44. unsigned char roll_lo : 4;
  45. unsigned char res5; //4
  46. unsigned char res6; //5
  47. unsigned char res7; //6
  48. unsigned char res8 : 4; //7
  49. unsigned char rroll; //8
  50. unsigned char res9 : 4;
  51. unsigned char res10 : 4; //9
  52. unsigned char rpitch; //10
  53. unsigned char res11 : 4;
  54. unsigned char res12 : 4; //11
  55. unsigned char ryaw; //12
  56. unsigned char res : 4;
  57. };
  58.  
  59. struct Packet // # = char number
  60. {
  61. unsigned char type; // 0 0x3f, 0x21, 0x31,
  62. union // 1, 2, 3
  63. {
  64. struct CmdBTBtn btbtn;
  65. struct CmdBTUpd_lr1 btupd_lr1;
  66. struct CmdBTUpd_lr2 btupd_lr2;
  67. };
  68. unsigned char unknown1; // 4
  69. unsigned char unknown2; // 5 Subtype? 0x3f - see gyro_data
  70. struct StickData stick_lr1; // 6,7,8
  71. struct StickData stick_lr2; // 9,10,11
  72. unsigned char unknown3; // 12
  73. union
  74. {
  75. struct GyroData gyro_data; // 13-25
  76. struct stick_data2 // if packet[5] == 0x31, then +16/+19 is StickData?
  77. {
  78. unsigned char res1; //13
  79. unsigned char res2; //14
  80. unsigned char res3; //15
  81. struct StickData stick2_lr1; // 16,17,18
  82. struct StickData stick2_lr2; // 19,20,21
  83. unsigned int res4; // 22-25
  84. };
  85. };
  86. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement