diff --git a/main.c b/main.c index 0b34d3c..20d3af9 100644 --- a/main.c +++ b/main.c @@ -94,35 +94,14 @@ void reset_counters(void) { #endif } -// For sending two-byte prefixed messages -void usb_send_push_ex(uint8_t message_prefix, uint8_t message_part_two, uint8_t* message, uint8_t message_length) { - usb_send_buffer[0] = message_prefix; - usb_send_buffer[1] = message_part_two; - usb_send_buffer[2] = message_length + 3; - memcpy(&usb_send_buffer[3], message, message_length); - ret_code_t ret = app_usbd_cdc_acm_write(&m_app_cdc_acm, usb_send_buffer, message_length + 3); - - NRF_LOG_INFO("[ex]Writing message of length %d, ret: %d", message_length + 3, ret); -} - -// void usb_transmit_message(uint8_t message_prefix, uint8_t* message, uint8_t message_length) { -// usb_send_buffer[0] = message_prefix; -// usb_send_buffer[1] = message_length + 2; -// memcpy(&usb_send_buffer[2], message, message_length); -// ret_code_t ret = app_usbd_cdc_acm_write(&m_app_cdc_acm, usb_send_buffer, message_length + 2); - -// NRF_LOG_INFO("[0]Writing message of length %d, ret: %d", message_length + 2, ret); +// #DO NOT USE THIS. IT BREAKS THE PACKET FORMAT. USE +// void usb_send_message_1byte(uint8_t message) { +// usb_send_buffer[0] = message; +// ret_code_t ret = app_usbd_cdc_acm_write(&m_app_cdc_acm, usb_send_buffer, 1); +// NRF_LOG_INFO("[push]Writing message of length %d, ret: %d", 1, ret); // } -void usb_send_push(void) { - ret_code_t ret = app_usbd_cdc_acm_write(&m_app_cdc_acm, usb_send_buffer, usb_send_buffer_offset); - - NRF_LOG_INFO("[1]Writing message of length %d, ret: %d", usb_send_buffer_offset, ret); - - usb_send_buffer_offset = 0; // reset. -} - -// For mushing together small messages into a 64-byte packet: +// 1. For mushing together small messages into a 64-byte packet: void usb_send_append_message(uint8_t message_prefix, uint8_t* message, uint8_t message_length) { usb_send_buffer[usb_send_buffer_offset] = message_prefix; usb_send_buffer[usb_send_buffer_offset + 1] = message_length + 2; @@ -136,6 +115,28 @@ void usb_send_append_message(uint8_t message_prefix, uint8_t* message, uint8_t m } } + +// 2. For pushing all messages queued with usb_send_append_message +void usb_send_push(void) { + ret_code_t ret = app_usbd_cdc_acm_write(&m_app_cdc_acm, usb_send_buffer, usb_send_buffer_offset); + + NRF_LOG_INFO("[push]Writing message of length %d, ret: %d", usb_send_buffer_offset, ret); + + usb_send_buffer_offset = 0; // reset. +} + +// 3. For sending two-byte prefixed messages +void usb_send_push_ex(uint8_t message_prefix, uint8_t message_part_two, uint8_t* message, uint8_t message_length) { + usb_send_buffer[0] = message_prefix; + usb_send_buffer[1] = message_part_two; + usb_send_buffer[2] = message_length + 3; + memcpy(&usb_send_buffer[3], message, message_length); + ret_code_t ret = app_usbd_cdc_acm_write(&m_app_cdc_acm, usb_send_buffer, message_length + 3); + + NRF_LOG_INFO("[push ex]Writing message of length %d, ret: %d", message_length + 3, ret); +} + + // length is always `READ_SIZE` void write_ic_settings(uint8_t* new_packet) { switch (SECOND_NIBBLE(new_packet[0])) { @@ -151,6 +152,8 @@ void write_ic_settings(uint8_t* new_packet) { ads1298_start_rdatac(); ads1298_standby(); // #TODO: readback registers into m_info.registers to confirm correct write. + uint8_t message[] = {0x00}; // LENGTH OF ZERO. + usb_send_push_ex(CTRL_ACK_WRITE_IC_REGISTER, IC_ID_ADS1298, message, strlen(message)); #endif } break; default: @@ -235,7 +238,9 @@ static void process_new_packet(uint8_t* new_packet) { run_throughput_test = true; } if (SECOND_NIBBLE(new_packet[0]) == TN_MISC_RTT_REQUEST) { - // [↓] #TODO [Later] + uint8_t message[] = {0x00}; // LENGTH OF ZERO. + usb_send_append_message(CTRL_ACK_RTT_REQUEST, message, strlen(message)); + usb_send_push(); } } break; default: diff --git a/pca10056/blank/config/custom_board.h b/pca10056/blank/config/custom_board.h index 3609269..d862c26 100644 --- a/pca10056/blank/config/custom_board.h +++ b/pca10056/blank/config/custom_board.h @@ -59,7 +59,7 @@ // some devices have more than 62 bytes worth of registers, so it may // need to be split up into pages. #define CTRL_REGISTER_READBACK 0xC8 - + #define CTRL_ACK_WRITE_IC_REGISTER 0xDF #define CTRL_ACK_RTT_REQUEST 0xE0 // %%% IC Identifiers %%%