[关闭]
@Pigmon 2018-03-08T16:40:47.000000Z 字数 1896 阅读 1172

罗技方向盘同步接口说明

慧拓


文件

G29WheelSync.h
G29WheelSync.cpp

接口

类:G29Sync

主要函数:

  1. Sync, PostSync

API:

  1. /*
  2. @Func:
  3. IsInited
  4. @Summary:
  5. 是否经过初始化且获取过 state
  6. @Params:
  7. @Return:
  8. Bool
  9. */
  10. bool G29Sync::IsInited()
  11. /*
  12. @Func:
  13. Sync
  14. @Summary:
  15. 将方向盘转角同步到输入的目标转向比例。(通过设置方向盘回弹位置)
  16. 每帧调用,如在 Timer, Update, Tick 等函数中调用。单次调用无效
  17. @Params:
  18. _target: 目标转向比例,取值 [-100, 100]. 100: 右转满; -100: 左转满
  19. @Return:
  20. 当前方向盘转向,取值 [-100, 100]. 100: 右转满; -100: 左转满
  21. */
  22. int G29Sync::Sync(const int _target)
  23. /*
  24. @Func:
  25. PostSync
  26. @Summary:
  27. 强制结束同步,将方向盘回弹位置回零
  28. @Params:
  29. @Return:
  30. */
  31. void G29Sync::PostSync() const
  32. /*
  33. @Func:
  34. SyncDone
  35. @Summary:
  36. 判断同步是否完成
  37. @Params:
  38. _target: 同步目标
  39. _eps:判断2个角度相等的阈值,默认3
  40. @Return:
  41. True: 完成; False:未完成
  42. */
  43. bool G29Sync::SyncDone(int _target, int _eps)
  44. /*
  45. @Func:
  46. CurrentState
  47. @Summary:
  48. 更新 m_state ; 在 LogiUpdate() 后调用
  49. @Params:
  50. @Return:
  51. m_state : DIJOYSTATE2*
  52. */
  53. DIJOYSTATE2* G29Sync::CurrentState()
  54. /*
  55. @Func:
  56. CurrentWheelPct
  57. @Summary:
  58. 得到当前方向盘转角。取值 [-100, 100]. 100: 右转满; -100: 左转满
  59. @Params:
  60. @Return:
  61. 转角:int [-100, 100]
  62. */
  63. int G29Sync::CurrentWheelPct()
  64. /*
  65. @Func:
  66. WheelAngleToPos
  67. @Summary:
  68. 将方向盘[-32767, 32767] 转角 归一化到 [-100, 100]
  69. @Params:
  70. _angle: int ,state.lx
  71. @Return:
  72. 转角:int [-100, 100]
  73. */
  74. int G29Sync::WheelAngleToPos(int _angle)

调用说明

  1. // 在每帧执行的函数,如 OnTimer, Update, Tick 等
  2. G29Sync::GetInstance()->Sync(target);
  3. // 判断是否同步完成
  4. if (G29Sync::GetInstance()->SyncDone(target)) {
  5. // Do sth.
  6. }
  7. // 进入遥控接管前,将方向盘回复到遥控状态
  8. G29Sync::GetInstance()->PostSync();

简单测试程序

  1. #include <iostream>
  2. #include <windows.h>
  3. #include "G29WheelSync.h"
  4. void main()
  5. {
  6. // 1. 在一个持续轮询过程中将方向盘转至左满舵
  7. int counter = 0, target = -100;
  8. int current_wheel = -65535;
  9. while (counter < 10000)
  10. {
  11. counter++;
  12. current_wheel = G29Sync::GetInstance()->Sync(target);
  13. Sleep(10);
  14. if (G29Sync::GetInstance()->SyncDone(target)) {
  15. std::cout << "Sync Over." << std::endl;
  16. break;
  17. }
  18. else {
  19. std::cout << current_wheel << std::endl;
  20. }
  21. }
  22. // 2. 转完后回转至 0,并将方向盘阻力放松。
  23. G29Sync::GetInstance()->PostSync();
  24. // 3. 显示回转过程中的方向盘转角 [-100, 100]
  25. while (!G29Sync::GetInstance()->SyncDone(0, 3))
  26. {
  27. if (LogiUpdate() && G29Sync::GetInstance()->CurrentState())
  28. {
  29. current_wheel = G29Sync::GetInstance()->CurrentWheelPct();
  30. std::cout << current_wheel << std::endl;
  31. }
  32. }
  33. system("pause");
  34. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注