generation.h 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #pragma once
  2. #include "config.h"
  3. #include "buttons.h"
  4. #include <stdint.h>
  5. #define FXP_SCALING 4000
  6. #define DIV_ROUND(a,b) (((a)+(b)/2)/(b))
  7. static const int32_t MIN_FREQ1 = 7000;
  8. static const int32_t MAX_FREQ1 = 30000;
  9. static const int32_t MIN_FREQ3 = 1000000;
  10. static const int32_t MAX_FREQ3 = 3000000;
  11. static const int32_t MIN_D1D2 = 0.005 * FXP_SCALING;//0.5%
  12. static const int32_t MAX_D1D2 = 0.495 * FXP_SCALING;//49.5%
  13. static const int32_t MAX_PH3 = 3000;
  14. typedef enum {
  15. ENABLE_FORCE_NONE = 0,
  16. ENABLE_FORCE_ENABLE,
  17. ENABLE_FORCE_DISABLE
  18. } enable_force_t;
  19. typedef struct {
  20. uint32_t f1;//Hz
  21. uint32_t _period1;//steps
  22. uint32_t D1;//4000/100%
  23. uint32_t _duty1;//steps
  24. uint32_t D2;//4000/100%
  25. uint32_t _duty2;//steps
  26. uint32_t Ph2;//4000steps/360*
  27. uint32_t _phase2;//steps
  28. uint32_t Ph3;//4000steps/360*
  29. uint32_t f3;//Hz
  30. uint32_t _period3;//steps
  31. uint32_t D3;//*0.1%
  32. uint32_t N3;//n
  33. enable_force_t ena;
  34. } tweaked_params_s;
  35. typedef struct {
  36. union {
  37. uint32_t data[14];
  38. tweaked_params_s regs;
  39. };
  40. } tweaked_params_union_s;
  41. void init_params(tweaked_params_s * pParams);
  42. uint32_t validate_generation_values(tweaked_params_s * pParams);
  43. void update_three_signal_values(tweaked_params_s * pParams, button_deltas_t * pDeltas);
  44. void obtain_button_deltas(volatile wb_mailbox_button_regs_t * pCurrentButtons, button_regs_t * pOldButtons, button_deltas_t * pDeltas);
  45. void inc_f1(tweaked_params_s * pParams, int16_t val);
  46. void dec_f1(tweaked_params_s * pParams, int16_t val);
  47. void inc_D1(tweaked_params_s * pParams, int16_t val);
  48. void dec_D1(tweaked_params_s * pParams, int16_t val);
  49. void inc_D2(tweaked_params_s * pParams, int16_t val);
  50. void dec_D2(tweaked_params_s * pParams, int16_t val);
  51. void inc_Ph2(tweaked_params_s * pParams, int16_t val);
  52. void dec_Ph2(tweaked_params_s * pParams, int16_t val);
  53. void inc_Ph3(tweaked_params_s * pParams, int16_t val);
  54. void dec_Ph3(tweaked_params_s * pParams, int16_t val);
  55. void inc_f3(tweaked_params_s * pParams, int16_t val);
  56. void dec_f3(tweaked_params_s * pParams, int16_t val);
  57. void inc_D3(tweaked_params_s * pParams, int16_t val);
  58. void dec_D3(tweaked_params_s * pParams, int16_t val);
  59. void inc_N3(tweaked_params_s * pParams, int16_t val);
  60. void dec_N3(tweaked_params_s * pParams, int16_t val);
  61. void ena_force_toggle(tweaked_params_s * pParams);