From baf7ed527c7abd281c6cd8c2c337c4bf84da0ce2 Mon Sep 17 00:00:00 2001 From: Andrew Kay Date: Tue, 25 Aug 2020 20:29:09 -0500 Subject: [PATCH] stress test --- interface1/firmware/include/CoaxTransceiver.h | 2 +- interface1/firmware/src/main.cpp | 204 +----------------- 2 files changed, 8 insertions(+), 198 deletions(-) diff --git a/interface1/firmware/include/CoaxTransceiver.h b/interface1/firmware/include/CoaxTransceiver.h index b711b12..aa17aff 100644 --- a/interface1/firmware/include/CoaxTransceiver.h +++ b/interface1/firmware/include/CoaxTransceiver.h @@ -24,7 +24,7 @@ public: static void setup(); static int /* ssize_t */ transmitReceive(uint16_t *transmitBuffer, size_t transmitBufferCount, uint16_t *receiveBuffer, size_t receiveBufferSize, uint16_t receiveTimeout); -private: +//private: static void dataBusSetup(); static void rxSetup(); static void txSetup(); diff --git a/interface1/firmware/src/main.cpp b/interface1/firmware/src/main.cpp index c790ea4..18c6b4e 100644 --- a/interface1/firmware/src/main.cpp +++ b/interface1/firmware/src/main.cpp @@ -16,178 +16,14 @@ #include "CoaxTransceiver.h" -#define FRAME_END 0xc0 -#define FRAME_ESCAPE 0xdb -#define FRAME_ESCAPE_END 0xdc -#define FRAME_ESCAPE_ESCAPE 0xdd - -enum { - WAIT_START, - DATA, - ESCAPE -} frameState; - -#define FRAME_BUFFER_SIZE ((25 * 80) * 2) + 32 - -uint8_t frameBuffer[FRAME_BUFFER_SIZE]; -int frameBufferCount = 0; - -#define ERROR_INVALID_MESSAGE 1 -#define ERROR_UNKNOWN_COMMAND 2 - -void sendMessage(uint8_t *buffer, int bufferCount) -{ - Serial.write((char) FRAME_END); - - // Write the length. - Serial.write((char) bufferCount >> 8); - Serial.write((char) bufferCount); - - for (int index = 0; index < bufferCount; index++) { - if (buffer[index] == FRAME_END) { - Serial.write((char) FRAME_ESCAPE); - Serial.write((char) FRAME_ESCAPE_END); - } else if (buffer[index] == FRAME_ESCAPE) { - Serial.write((char) FRAME_ESCAPE); - Serial.write((char) FRAME_ESCAPE_ESCAPE); - } else { - Serial.write((char) buffer[index]); - } - } - - // Write the placeholder for checksum. - Serial.write((char) 0x00); - Serial.write((char) 0x00); - - Serial.write((char) FRAME_END); - - Serial.flush(); -} - -void sendErrorMessage(uint8_t code, const char *description) -{ - uint8_t message[2 + 62 + 1] = { 0x02, code }; - int count = 2; - - if (description != NULL) { - strncpy((char *) (message + 2), description, 62); - - count += strlen(description); - } - - sendMessage(message, count); -} - -#define COMMAND_RESET 0x01 -#define COMMAND_TRANSMIT 0x02 -#define COMMAND_RECEIVE 0x04 -#define COMMAND_TRANSMIT_RECEIVE 0x06 - -void handleResetCommand(uint8_t *buffer, int bufferCount) -{ - uint8_t response[] = { 0x01, 0x00, 0x00, 0x01 }; - - sendMessage(response, 4); -} - -void handleTransmitReceiveCommand(uint8_t *buffer, int bufferCount) -{ - if (bufferCount < 6) { - sendErrorMessage(ERROR_INVALID_MESSAGE, "HANDLE_TXRX_BUFFER_COUNT_6"); - return; - } - - uint16_t *transmitBuffer = (uint16_t *) (buffer + 2); - uint16_t transmitBufferCount = (bufferCount - 6) / 2; - - uint16_t transmitRepeatCount = ((buffer[0] << 8) | buffer[1]) & 0x7fff; - uint16_t transmitRepeatOffset = buffer[0] >> 7; - - uint16_t receiveBufferSize = (buffer[bufferCount - 4] << 8) | buffer[bufferCount - 3]; - uint16_t receiveTimeout = (buffer[bufferCount - 2] << 8) | buffer[bufferCount - 1]; - - if (transmitBufferCount < 1) { - sendErrorMessage(ERROR_INVALID_MESSAGE, "HANDLE_TXRX_TX_BUFFER_COUNT_1"); - return; - } - - // Expand the provided data if applicable. - if (transmitRepeatCount > 1) { - uint8_t *source = ((uint8_t *) transmitBuffer) + (transmitRepeatOffset * 2); - uint8_t *destination = ((uint8_t *) transmitBuffer) + (transmitBufferCount * 2); - - uint16_t sourceCount = transmitBufferCount - transmitRepeatOffset; - - size_t length = sourceCount * 2; - - for (int index = 1; index < transmitRepeatCount; index++) { - memcpy(destination, source, length); - - transmitBufferCount += sourceCount; - - destination += length; - } - } - - uint16_t *receiveBuffer = (uint16_t *) (buffer + 2); - - bufferCount = CoaxTransceiver::transmitReceive(transmitBuffer, transmitBufferCount, receiveBuffer, receiveBufferSize, receiveTimeout); - - if (bufferCount < 0) { - sendErrorMessage(100 + ((-1) * bufferCount), NULL); - return; - } - - // Send the response message. - buffer[1] = 0x01; - - bufferCount = 1 + (bufferCount * 2); - - sendMessage(buffer + 1, bufferCount); -} - -void handleMessage(uint8_t *buffer, int bufferCount) -{ - if (bufferCount < 1) { - sendErrorMessage(ERROR_INVALID_MESSAGE, "HANDLE_MESSAGE_BUFFER_COUNT_1"); - return; - } - - uint8_t command = buffer[0]; - - if (command == COMMAND_RESET) { - handleResetCommand(buffer + 1, bufferCount - 1); - } else if (command == COMMAND_TRANSMIT_RECEIVE) { - handleTransmitReceiveCommand(buffer + 1, bufferCount - 1); - } else { - sendErrorMessage(ERROR_UNKNOWN_COMMAND, NULL); - } -} - -void handleFrame(uint8_t *buffer, int bufferCount) -{ - if (bufferCount < 4) { - sendErrorMessage(ERROR_INVALID_MESSAGE, "HANDLE_FRAME_BUFFER_COUNT_4"); - return; - } - - int count = (buffer[0] << 8) | buffer[1]; - - if (bufferCount - 4 != count) { - sendErrorMessage(ERROR_INVALID_MESSAGE, "HANDLE_FRAME_BUFFER_COUNT_MISMATCH"); - return; - } - - handleMessage(buffer + 2, count); -} +uint16_t buffer[1024] = { + 0x0031, 0x0200, 0x0206, 0x020a, 0x020c, 0x0212, 0x0214, 0x0218, 0x021e, 0x0222, 0x0224, 0x0228, 0x022e, 0x0230, 0x0236, 0x023a, 0x023c, 0x0242, 0x0244, 0x0248, 0x024e, 0x0250, 0x0256, 0x025a, 0x025c, 0x0260, 0x0266, 0x026a, 0x026c, 0x0272, 0x0274, 0x0278, 0x027e, 0x0282, 0x0284, 0x0288, 0x028e, 0x0290, 0x0296, 0x029a, 0x029c, 0x02a0, 0x02a6, 0x02aa, 0x02ac, 0x02b2, 0x02b4, 0x02b8, 0x02be, 0x02c0, 0x02c6, 0x02ca, 0x02cc, 0x02d2, 0x02d4, 0x02d8, 0x02de, 0x02e2, 0x02e4, 0x0200, 0x0206, 0x020a, 0x020c, 0x0212, 0x0214, 0x0218, 0x021e, 0x0222, 0x0224, 0x0228, 0x022e, 0x0230, 0x0236, 0x023a, 0x023c, 0x0242, 0x0244, 0x0248, 0x024e, 0x0250, 0x0256, 0x025a, 0x025c, 0x0260, 0x0266, 0x026a, 0x026c, 0x0272, 0x0274, 0x0278, 0x027e, 0x0282, 0x0284, 0x0288, 0x028e, 0x0290, 0x0296, 0x029a, 0x029c, 0x02a0, 0x02a6, 0x02aa, 0x02ac, 0x02b2, 0x02b4, 0x02b8, 0x02be, 0x02c0, 0x02c6, 0x02ca, 0x02cc, 0x02d2, 0x02d4, 0x02d8, 0x02de, 0x02e2, 0x02e4, 0x0200, 0x0206, 0x020a, 0x020c, 0x0212, 0x0214, 0x0218, 0x021e, 0x0222, 0x0224, 0x0228, 0x022e, 0x0230, 0x0236, 0x023a, 0x023c, 0x0242, 0x0244, 0x0248, 0x024e, 0x0250, 0x0256, 0x025a, 0x025c, 0x0260, 0x0266, 0x026a, 0x026c, 0x0272, 0x0274, 0x0278, 0x027e, 0x0282, 0x0284, 0x0288, 0x028e, 0x0290, 0x0296, 0x029a, 0x029c, 0x02a0, 0x02a6, 0x02aa, 0x02ac, 0x02b2, 0x02b4, 0x02b8, 0x02be, 0x02c0, 0x02c6, 0x02ca, 0x02cc, 0x02d2, 0x02d4, 0x02d8, 0x02de, 0x02e2, 0x02e4, 0x0200, 0x0206, 0x020a, 0x020c, 0x0212, 0x0214, 0x0218, 0x021e, 0x0222, 0x0224, 0x0228, 0x022e, 0x0230, 0x0236, 0x023a, 0x023c, 0x0242, 0x0244, 0x0248, 0x024e, 0x0250, 0x0256, 0x025a, 0x025c, 0x0260, 0x0266, 0x026a, 0x026c, 0x0272, 0x0274, 0x0278, 0x027e, 0x0282, 0x0284, 0x0288, 0x028e, 0x0290, 0x0296, 0x029a, 0x029c, 0x02a0, 0x02a6, 0x02aa, 0x02ac, 0x02b2, 0x02b4, 0x02b8, 0x02be, 0x02c0, 0x02c6, 0x02ca, 0x02cc, 0x02d2, 0x02d4, 0x02d8, 0x02de, 0x02e2, 0x02e4, 0x0200, 0x0206, 0x020a, 0x020c, 0x0212, 0x0214, 0x0218, 0x021e, 0x0222, 0x0224, 0x0228, 0x022e, 0x0230, 0x0236, 0x023a, 0x023c, 0x0242, 0x0244, 0x0248, 0x024e, 0x0250, 0x0256, 0x025a, 0x025c, 0x0260, 0x0266, 0x026a, 0x026c, 0x0272, 0x0274, 0x0278, 0x027e, 0x0282, 0x0284, 0x0288, 0x028e, 0x0290, 0x0296, 0x029a, 0x029c, 0x02a0, 0x02a6, 0x02aa, 0x02ac, 0x02b2, 0x02b4, 0x02b8, 0x02be, 0x02c0, 0x02c6, 0x02ca, 0x02cc, 0x02d2, 0x02d4, 0x02d8, 0x02de, 0x02e2, 0x02e4, 0x0200, 0x0206, 0x020a, 0x020c, 0x0212, 0x0214, 0x0218, 0x021e, 0x0222, 0x0224, 0x0228, 0x022e, 0x0230, 0x0236, 0x023a, 0x023c, 0x0242, 0x0244, 0x0248, 0x024e, 0x0250, 0x0256, 0x025a, 0x025c, 0x0260, 0x0266, 0x026a, 0x026c, 0x0272, 0x0274, 0x0278, 0x027e, 0x0282, 0x0284, 0x0288, 0x028e, 0x0290, 0x0296, 0x029a, 0x029c, 0x02a0, 0x02a6, 0x02aa, 0x02ac, 0x02b2, 0x02b4, 0x02b8, 0x02be, 0x02c0, 0x02c6, 0x02ca, 0x02cc, 0x02d2, 0x02d4, 0x02d8, 0x02de, 0x02e2, 0x02e4, 0x0200, 0x0206, 0x020a, 0x020c, 0x0212, 0x0214, 0x0218, 0x021e, 0x0222, 0x0224, 0x0228, 0x022e, 0x0230, 0x0236, 0x023a, 0x023c, 0x0242, 0x0244, 0x0248, 0x024e, 0x0250, 0x0256, 0x025a, 0x025c, 0x0260, 0x0266, 0x026a, 0x026c, 0x0272, 0x0274, 0x0278, 0x027e, 0x0282, 0x0284, 0x0288, 0x028e, 0x0290, 0x0296, 0x029a, 0x029c, 0x02a0, 0x02a6, 0x02aa, 0x02ac, 0x02b2, 0x02b4, 0x02b8, 0x02be, 0x02c0, 0x02c6, 0x02ca, 0x02cc, 0x02d2, 0x02d4, 0x02d8, 0x02de, 0x02e2, 0x02e4, 0x0200, 0x0206, 0x020a, 0x020c, 0x0212, 0x0214, 0x0218, 0x021e, 0x0222, 0x0224, 0x0228, 0x022e, 0x0230, 0x0236, 0x023a, 0x023c, 0x0242, 0x0244, 0x0248, 0x024e, 0x0250, 0x0256, 0x025a, 0x025c, 0x0260, 0x0266, 0x026a, 0x026c, 0x0272, 0x0274, 0x0278, 0x027e, 0x0282, 0x0284, 0x0288, 0x028e, 0x0290, 0x0296, 0x029a, 0x029c, 0x02a0, 0x02a6, 0x02aa, 0x02ac, 0x02b2, 0x02b4, 0x02b8, 0x02be, 0x02c0, 0x02c6, 0x02ca, 0x02cc, 0x02d2, 0x02d4, 0x02d8, 0x02de, 0x02e2, 0x02e4, 0x0200, 0x0206, 0x020a, 0x020c, 0x0212, 0x0214, 0x0218, 0x021e, 0x0222, 0x0224, 0x0228, 0x022e, 0x0230, 0x0236, 0x023a, 0x023c, 0x0242, 0x0244, 0x0248, 0x024e, 0x0250, 0x0256, 0x025a, 0x025c, 0x0260, 0x0266, 0x026a, 0x026c, 0x0272, 0x0274, 0x0278, 0x027e, 0x0282, 0x0284, 0x0288, 0x028e, 0x0290, 0x0296, 0x029a, 0x029c, 0x02a0, 0x02a6, 0x02aa, 0x02ac, 0x02b2, 0x02b4, 0x02b8, 0x02be, 0x02c0, 0x02c6, 0x02ca, 0x02cc, 0x02d2, 0x02d4, 0x02d8, 0x02de, 0x02e2, 0x02e4, 0x0200, 0x0206, 0x020a, 0x020c, 0x0212, 0x0214, 0x0218, 0x021e, 0x0222, 0x0224, 0x0228, 0x022e, 0x0230, 0x0236, 0x023a, 0x023c, 0x0242, 0x0244, 0x0248, 0x024e, 0x0250, 0x0256, 0x025a, 0x025c, 0x0260, 0x0266, 0x026a, 0x026c, 0x0272, 0x0274, 0x0278, 0x027e, 0x0282, 0x0284, 0x0288, 0x028e, 0x0290, 0x0296, 0x029a, 0x029c, 0x02a0, 0x02a6, 0x02aa, 0x02ac, 0x02b2, 0x02b4, 0x02b8, 0x02be, 0x02c0, 0x02c6, 0x02ca, 0x02cc, 0x02d2, 0x02d4, 0x02d8, 0x02de, 0x02e2, 0x02e4, 0x0200, 0x0206, 0x020a, 0x020c, 0x0212, 0x0214, 0x0218, 0x021e, 0x0222, 0x0224, 0x0228, 0x022e, 0x0230, 0x0236, 0x023a, 0x023c, 0x0242, 0x0244, 0x0248, 0x024e, 0x0250, 0x0256, 0x025a, 0x025c, 0x0260, 0x0266, 0x026a, 0x026c, 0x0272, 0x0274, 0x0278, 0x027e, 0x0282, 0x0284, 0x0288, 0x028e, 0x0290, 0x0296, 0x029a, 0x029c, 0x02a0, 0x02a6, 0x02aa, 0x02ac, 0x02b2, 0x02b4, 0x02b8, 0x02be, 0x02c0, 0x02c6, 0x02ca, 0x02cc, 0x02d2, 0x02d4, 0x02d8, 0x02de, 0x02e2, 0x02e4, 0x0200, 0x0206, 0x020a, 0x020c, 0x0212, 0x0214, 0x0218, 0x021e, 0x0222, 0x0224, 0x0228, 0x022e, 0x0230, 0x0236, 0x023a, 0x023c, 0x0242, 0x0244, 0x0248, 0x024e, 0x0250, 0x0256, 0x025a, 0x025c, 0x0260, 0x0266, 0x026a, 0x026c, 0x0272, 0x0274, 0x0278, 0x027e, 0x0282, 0x0284, 0x0288, 0x028e, 0x0290, 0x0296, 0x029a, 0x029c, 0x02a0, 0x02a6, 0x02aa, 0x02ac, 0x02b2, 0x02b4, 0x02b8, 0x02be, 0x02c0, 0x02c6, 0x02ca, 0x02cc, 0x02d2, 0x02d4, 0x02d8, 0x02de, 0x02e2, 0x02e4, 0x0200, 0x0206, 0x020a, 0x020c, 0x0212, 0x0214, 0x0218, 0x021e, 0x0222, 0x0224, 0x0228, 0x022e, 0x0230, 0x0236, 0x023a, 0x023c, 0x0242, 0x0244, 0x0248, 0x024e, 0x0250, 0x0256, 0x025a, 0x025c, 0x0260, 0x0266, 0x026a, 0x026c, 0x0272, 0x0274, 0x0278, 0x027e, 0x0282, 0x0284, 0x0288, 0x028e, 0x0290, 0x0296, 0x029a, 0x029c, 0x02a0, 0x02a6, 0x02aa, 0x02ac, 0x02b2, 0x02b4, 0x02b8, 0x02be, 0x02c0, 0x02c6, 0x02ca, 0x02cc, 0x02d2, 0x02d4, 0x02d8, 0x02de, 0x02e2, 0x02e4, 0x0200, 0x0206, 0x020a, 0x020c, 0x0212, 0x0214, 0x0218, 0x021e, 0x0222, 0x0224, 0x0228, 0x022e, 0x0230, 0x0236, 0x023a, 0x023c, 0x0242, 0x0244, 0x0248, 0x024e, 0x0250, 0x0256, 0x025a, 0x025c, 0x0260, 0x0266, 0x026a, 0x026c, 0x0272, 0x0274, 0x0278, 0x027e, 0x0282, 0x0284, 0x0288, 0x028e, 0x0290, 0x0296, 0x029a, 0x029c, 0x02a0, 0x02a6, 0x02aa, 0x02ac, 0x02b2, 0x02b4, 0x02b8, 0x02be, 0x02c0, 0x02c6, 0x02ca, 0x02cc, 0x02d2, 0x02d4, 0x02d8, 0x02de, 0x02e2, 0x02e4, 0x0200, 0x0206, 0x020a, 0x020c, 0x0212, 0x0214, 0x0218, 0x021e, 0x0222, 0x0224, 0x0228, 0x022e, 0x0230, 0x0236, 0x023a, 0x023c, 0x0242, 0x0244, 0x0248, 0x024e, 0x0250, 0x0256, 0x025a, 0x025c, 0x0260, 0x0266, 0x026a, 0x026c, 0x0272, 0x0274, 0x0278, 0x027e, 0x0282, 0x0284, 0x0288, 0x028e, 0x0290, 0x0296, 0x029a, 0x029c, 0x02a0, 0x02a6, 0x02aa, 0x02ac, 0x02b2, 0x02b4, 0x02b8, 0x02be, 0x02c0, 0x02c6, 0x02ca, 0x02cc, 0x02d2, 0x02d4, 0x02d8, 0x02de, 0x02e2, 0x02e4, 0x0200, 0x0206, 0x020a, 0x020c, 0x0212, 0x0214, 0x0218, 0x021e, 0x0222, 0x0224, 0x0228, 0x022e, 0x0230, 0x0236, 0x023a, 0x023c, 0x0242, 0x0244, 0x0248, 0x024e, 0x0250, 0x0256, 0x025a, 0x025c, 0x0260, 0x0266, 0x026a, 0x026c, 0x0272, 0x0274, 0x0278, 0x027e, 0x0282, 0x0284, 0x0288, 0x028e, 0x0290, 0x0296, 0x029a, 0x029c, 0x02a0, 0x02a6, 0x02aa, 0x02ac, 0x02b2, 0x02b4, 0x02b8, 0x02be, 0x02c0, 0x02c6, 0x02ca, 0x02cc, 0x02d2, 0x02d4, 0x02d8, 0x02de, 0x02e2, 0x02e4, 0x0200, 0x0206, 0x020a, 0x020c, 0x0212, 0x0214, 0x0218, 0x021e, 0x0222, 0x0224, 0x0228, 0x022e, 0x0230, 0x0236, 0x023a, 0x023c, 0x0242, 0x0244, 0x0248, 0x024e, 0x0250, 0x0256, 0x025a, 0x025c, 0x0260, 0x0266, 0x026a, 0x026c, 0x0272, 0x0274, 0x0278, 0x027e, 0x0282, 0x0284, 0x0288, 0x028e, 0x0290, 0x0296, 0x029a, 0x029c, 0x02a0, 0x02a6, 0x02aa, 0x02ac, 0x02b2, 0x02b4, 0x02b8, 0x02be, 0x02c0, 0x02c6, 0x02ca, 0x02cc, 0x02d2, 0x02d4, 0x02d8, 0x02de, 0x02e2, 0x02e4, 0x0200, 0x0206, 0x020a, 0x020c, 0x0212, 0x0214, 0x0218, 0x021e, 0x0222, 0x0224, 0x0228, 0x022e, 0x0230, 0x0236, 0x023a, 0x023c, 0x0242, 0x0244, 0x0248, 0x024e, 0x0250, 0x0256, 0x025a, 0x025c, 0x0260, 0x0266, 0x026a, 0x026c, 0x0272, 0x0274, 0x0278, 0x027e, 0x0282, 0x0284, 0x0288, 0x028e, 0x0290 }; void setup() { // Configure serial port and state machine. Serial.begin(115200); - frameState = WAIT_START; - while (Serial.available() > 0) { Serial.read(); } @@ -198,37 +34,11 @@ void setup() void loop() { - if (Serial.available() > 0) { - uint8_t byte = Serial.read(); + for (int length = 2; length < 1024; length++) { + CoaxTransceiver::transmit(buffer, length); - if (frameState == WAIT_START) { - if (byte == FRAME_END) { - frameState = DATA; - } - } else if (frameState == DATA) { - if (byte == FRAME_END) { - if (frameBufferCount > 0) { - handleFrame(frameBuffer, frameBufferCount); - } - - frameBufferCount = 0; - frameState = WAIT_START; - } else if (byte == FRAME_ESCAPE) { - frameState = ESCAPE; - } else { - // TODO: overflow... - frameBuffer[frameBufferCount++] = byte; - } - } else if (frameState == ESCAPE) { - if (byte == FRAME_ESCAPE_END) { - // TODO: overflow... - frameBuffer[frameBufferCount++] = FRAME_END; - } else if (byte == FRAME_ESCAPE_ESCAPE) { - // TODO: overflow... - frameBuffer[frameBufferCount++] = FRAME_ESCAPE; - } - - frameState = DATA; - } + delay(1); } + + delay(10000); }