You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

72 lines
2.7 KiB

  1. // Copyright 2021 Nick Brassel (@tzarc)
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #include "qp_comms.h"
  4. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  5. // Base comms APIs
  6. bool qp_comms_init(painter_device_t device) {
  7. struct painter_driver_t *driver = (struct painter_driver_t *)device;
  8. if (!driver->validate_ok) {
  9. qp_dprintf("qp_comms_init: fail (validation_ok == false)\n");
  10. return false;
  11. }
  12. return driver->comms_vtable->comms_init(device);
  13. }
  14. bool qp_comms_start(painter_device_t device) {
  15. struct painter_driver_t *driver = (struct painter_driver_t *)device;
  16. if (!driver->validate_ok) {
  17. qp_dprintf("qp_comms_start: fail (validation_ok == false)\n");
  18. return false;
  19. }
  20. return driver->comms_vtable->comms_start(device);
  21. }
  22. void qp_comms_stop(painter_device_t device) {
  23. struct painter_driver_t *driver = (struct painter_driver_t *)device;
  24. if (!driver->validate_ok) {
  25. qp_dprintf("qp_comms_stop: fail (validation_ok == false)\n");
  26. return;
  27. }
  28. driver->comms_vtable->comms_stop(device);
  29. }
  30. uint32_t qp_comms_send(painter_device_t device, const void *data, uint32_t byte_count) {
  31. struct painter_driver_t *driver = (struct painter_driver_t *)device;
  32. if (!driver->validate_ok) {
  33. qp_dprintf("qp_comms_send: fail (validation_ok == false)\n");
  34. return false;
  35. }
  36. return driver->comms_vtable->comms_send(device, data, byte_count);
  37. }
  38. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  39. // Comms APIs that use a D/C pin
  40. void qp_comms_command(painter_device_t device, uint8_t cmd) {
  41. struct painter_driver_t * driver = (struct painter_driver_t *)device;
  42. struct painter_comms_with_command_vtable_t *comms_vtable = (struct painter_comms_with_command_vtable_t *)driver->comms_vtable;
  43. comms_vtable->send_command(device, cmd);
  44. }
  45. void qp_comms_command_databyte(painter_device_t device, uint8_t cmd, uint8_t data) {
  46. qp_comms_command(device, cmd);
  47. qp_comms_send(device, &data, sizeof(data));
  48. }
  49. uint32_t qp_comms_command_databuf(painter_device_t device, uint8_t cmd, const void *data, uint32_t byte_count) {
  50. qp_comms_command(device, cmd);
  51. return qp_comms_send(device, data, byte_count);
  52. }
  53. void qp_comms_bulk_command_sequence(painter_device_t device, const uint8_t *sequence, size_t sequence_len) {
  54. struct painter_driver_t * driver = (struct painter_driver_t *)device;
  55. struct painter_comms_with_command_vtable_t *comms_vtable = (struct painter_comms_with_command_vtable_t *)driver->comms_vtable;
  56. comms_vtable->bulk_command_sequence(device, sequence, sequence_len);
  57. }