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