| 95 | } |
| 96 | |
| 97 | void sendFlasherAnswer(uint8_t answer_cmd, uint8_t* ans_buff, uint32_t len, uint8_t transportType) { |
| 98 | uint8_t* answer_buffer = (uint8_t*)calloc(3 + 2 + 2 + len + 2 + 13, 1); |
| 99 | if (answer_buffer == nullptr) return; |
| 100 | uint32_t CRC_value = 0xAB34; |
| 101 | answer_buffer[0] = 'A'; |
| 102 | answer_buffer[1] = 'T'; |
| 103 | answer_buffer[2] = answer_cmd; |
| 104 | CRC_value += answer_cmd; |
| 105 | |
| 106 | for (uint8_t c = 0; c < 4; c++) { |
| 107 | answer_buffer[3 + c] = (uint8_t)(len >> (24 - (c * 8))); |
| 108 | CRC_value += answer_buffer[3 + c]; |
| 109 | } |
| 110 | |
| 111 | for (int i = 0; i < len; i++) { |
| 112 | answer_buffer[7 + i] = ans_buff[i]; |
| 113 | CRC_value += ans_buff[i]; |
| 114 | } |
| 115 | |
| 116 | answer_buffer[3 + 2 + 2 + len] = CRC_value >> 8; |
| 117 | answer_buffer[3 + 2 + 2 + len + 1] = CRC_value; |
| 118 | if (transportType == TRANSPORT_USB) { |
| 119 | cmdSerial.write(answer_buffer, 3 + 2 + 2 + len + 2); |
| 120 | } else { |
| 121 | sendDataToClient(answer_buffer, 3 + 2 + 2 + len + 2); |
| 122 | } |
| 123 | // for(uint16_t c = 0; c< 3+2+2+len+2; c++){ |
| 124 | |
| 125 | //} |
| 126 | free(answer_buffer); |
| 127 | } |
| 128 | |
| 129 | void flasherDataHandler(uint8_t* data, size_t len, uint8_t transportType) { |
| 130 | static struct flasherCommand* cmd = nullptr; |
no test coverage detected