motor.c 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. /*
  2. * Copyright (c) 2019, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2019-08-26 sogwms The first version
  9. */
  10. #include "motor.h"
  11. #define DBG_SECTION_NAME "motor"
  12. #define DBG_LEVEL DBG_LOG
  13. #include <rtdbg.h>
  14. motor_t motor_create(rt_size_t size)
  15. {
  16. motor_t new_motor = (motor_t)rt_malloc(size);
  17. if (new_motor == RT_NULL)
  18. {
  19. LOG_E("Falied to allocate memory for new motor\n");
  20. return RT_NULL;
  21. }
  22. return new_motor;
  23. }
  24. rt_err_t motor_enable(motor_t mot)
  25. {
  26. RT_ASSERT(mot != RT_NULL);
  27. // Enable PWM
  28. LOG_D("Enabling motor");
  29. mot->enable(mot);
  30. return RT_EOK;
  31. }
  32. rt_err_t motor_disable(motor_t mot)
  33. {
  34. RT_ASSERT(mot != RT_NULL);
  35. // Disable PWM
  36. LOG_D("Disabling motor");
  37. mot->disable(mot);
  38. return RT_EOK;
  39. }
  40. rt_err_t motor_run(motor_t mot, rt_int16_t thousands)
  41. {
  42. RT_ASSERT(mot != RT_NULL);
  43. // Set speed (pwm) to desired value
  44. mot->set_speed(mot, thousands);
  45. return RT_EOK;
  46. }
  47. rt_err_t motor_stop(motor_t mot)
  48. {
  49. RT_ASSERT(mot != RT_NULL);
  50. // Set Speed to 0
  51. motor_run(mot, 0);
  52. return RT_EOK;
  53. }
  54. rt_err_t motor_destroy(motor_t mot)
  55. {
  56. RT_ASSERT(mot != RT_NULL);
  57. // Disable first
  58. motor_disable(mot);
  59. // Free memory
  60. LOG_D("Free motor");
  61. rt_free(mot);
  62. return RT_EOK;
  63. }
  64. rt_err_t motor_reset(motor_t mot)
  65. {
  66. RT_ASSERT(mot != RT_NULL);
  67. return mot->reset(mot);
  68. }