/**
* 
* @brief Perform a test using the scanner card of the Instek in 
*        the 8261
*/
void Instek8261Serial::ScanTest(void) {
    UtilTimer cmdTimer;
    UtilTimer scanTimer;
    int length;
    int numBytesRx;

    for (int j = 0; j < 1; j++) {

        cmdTimer.ResetStartTimestamp();

        for (int i = 0; i < 4; i++) {

            scanTimer.ResetStartTimestamp();
            uint64_t elapsedScanTime = 0;
            sprintf(m_buffer, "rout:func scan\n");
            printf("%ld ms, Sending cmd: %s", cmdTimer.GetElapsedMillisec(), m_buffer);
            length = strlen(m_buffer);
            SendCmd(m_buffer, length);

            numBytesRx = GetResponse(m_buffer, SERIAL_BUF_LENGTH, 10000);
            m_buffer[numBytesRx] = 0;
            printf("%ld ms, %s", cmdTimer.GetElapsedMillisec(), m_buffer);
            elapsedScanTime = scanTimer.GetElapsedMillisec();
            printf(">>>> SCAN DURATION: %ld ms <<<<\n", elapsedScanTime);

            sprintf(m_buffer, "*trg\n");
            printf("%ld ms, Sending cmd: %s", cmdTimer.GetElapsedMillisec(), m_buffer);
            length = strlen(m_buffer);
            SendCmd(m_buffer, length);

            sprintf(m_buffer, "fetc?\n");
            printf("%ld ms, Sending cmd: %s", cmdTimer.GetElapsedMillisec(), m_buffer);
            length = strlen(m_buffer);
            SendCmd(m_buffer, length);

            numBytesRx = GetMultiResponse(m_buffer, SERIAL_BUF_LENGTH, 10000, 3);
            m_buffer[numBytesRx] = 0;
            printf("%ld ms, response:\n%s", cmdTimer.GetElapsedMillisec(), m_buffer);

            sprintf(m_buffer, "ROUT:FUNC OFF\n");
            printf("%ld ms, Sending cmd: %s", cmdTimer.GetElapsedMillisec(), m_buffer);
            length = strlen(m_buffer);
            SendCmd(m_buffer, length);

            // float tempF;
            // In8261ReadTemp(tempF);
            // printf("Temp: %f\n", tempF);

            // float voltF;
            // In8261ReadDCVolt(voltF);
            // printf("Volt: %f\n", tempF);

        }

        sprintf(m_buffer, "ROUT:FUNC OFF\n");
        printf("%ld ms, Sending cmd: %s", cmdTimer.GetElapsedMillisec(), m_buffer);
        length = strlen(m_buffer);
        SendCmd(m_buffer, length);

        sprintf(m_buffer, "*trg\n");
        printf("%ld ms, Sending cmd: %s", cmdTimer.GetElapsedMillisec(), m_buffer);
        length = strlen(m_buffer);
        SendCmd(m_buffer, length);

    }
}
/**
* 
* @brief Perform Instek Configuration 
*/
void Instek8261Serial::ScanInit(void) {
    // bool status = false;
    UtilTimer cmdTimer;
    int length;
    // int numBytesRx;

    for (auto& x: m_CmdInitStrings) {
        char *cmdP = (char *)x.data();
        printf("Sending cmd: %s", cmdP);
        length = strlen(cmdP);
        SendCmd(cmdP, length);
        QThread::sleep(500);
    }

    sprintf(m_buffer, "rout:adv on\n");
    printf("Sending cmd: %s", m_buffer);
    length = strlen(m_buffer);
    SendCmd(m_buffer, length);

#if 0
    sprintf(m_buffer, "AVER:COUN?\n");
    printf("Sending cmd: %s", m_buffer);
    length = strlen(m_buffer);
    numBytesRx = SendCmdAndGetResponse(m_buffer, length, m_buffer, SERIAL_BUF_LENGTH, MILLISEC_1000);
    printf("response: %s", m_buffer);

    sprintf(m_buffer, "AVER:STAT?\n");
    printf("Sending cmd: %s", m_buffer);
    length = strlen(m_buffer);
    numBytesRx = SendCmdAndGetResponse(m_buffer, length, m_buffer, SERIAL_BUF_LENGTH, MILLISEC_1000);
    printf("response: %s", m_buffer);

    sprintf(m_buffer, "rout:mult:stat?\n");
    printf("Sending cmd: %s", m_buffer);
    length = strlen(m_buffer);
    SendCmd(m_buffer, length);
    numBytesRx = GetMultiResponse(m_buffer, SERIAL_BUF_LENGTH, 10000, 18);
    m_buffer[numBytesRx] = 0;
    printf("%response:\n%s", m_buffer);
    Sleep(1000);

    sprintf(m_buffer, "rout:chan? 101\n");
    printf("Sending cmd: %s", m_buffer);
    length = strlen(m_buffer);
    numBytesRx = SendCmdAndGetResponse(m_buffer, length, m_buffer, SERIAL_BUF_LENGTH, MILLISEC_1000);
    printf("response: %s", m_buffer);
    // Sleep(1000);

    sprintf(m_buffer, "rout:chan? 102\n");
    printf("Sending cmd: %s", m_buffer);
    length = strlen(m_buffer);
    numBytesRx = SendCmdAndGetResponse(m_buffer, length, m_buffer, SERIAL_BUF_LENGTH, MILLISEC_1000);
    printf("response: %s", m_buffer);
    // Sleep(1000);

    sprintf(m_buffer, "rout:chan? 103\n");
    printf("Sending cmd: %s", m_buffer);
    length = strlen(m_buffer);
    numBytesRx = SendCmdAndGetResponse(m_buffer, length, m_buffer, SERIAL_BUF_LENGTH, MILLISEC_1000);
    printf("response: %s", m_buffer);
    // Sleep(1000);

    sprintf(m_buffer, "temp:tco:type?\n");
    printf("Sending cmd: %s", m_buffer);
    length = strlen(m_buffer);
    numBytesRx = SendCmdAndGetResponse(m_buffer, length, m_buffer, SERIAL_BUF_LENGTH, MILLISEC_1000);
    printf("response: %s", m_buffer);
    Sleep(1000);

    sprintf(m_buffer, "temp:tco:res?\n");
    printf("Sending cmd: %s", m_buffer);
    length = strlen(m_buffer);
    numBytesRx = SendCmdAndGetResponse(m_buffer, length, m_buffer, SERIAL_BUF_LENGTH, MILLISEC_1000);
    printf("response: %s", m_buffer);
    Sleep(1000);

    sprintf(m_buffer, "sens:det:rate M\n");
    printf("Sending cmd: %s", m_buffer);
    length = strlen(m_buffer);
    SendCmd(m_buffer, length);
    Sleep(2000);

    sprintf(m_buffer, "det:rate?\n");
    printf("Sending cmd: %s", m_buffer);
    length = strlen(m_buffer);
    numBytesRx = SendCmdAndGetResponse(m_buffer, length, m_buffer, SERIAL_BUF_LENGTH, MILLISEC_1000);
    printf("response: %s", m_buffer);
    Sleep(500);

    sprintf(m_buffer, "rout:adv on\n");
    printf("%ld ms, Sending cmd: %s", cmdTimer.GetElapsedMillisec(), m_buffer);
    length = strlen(m_buffer);
    SendCmd(m_buffer, length);

    sprintf(m_buffer, "ROUT:FUNC OFF\n");
    printf("%ld ms, Sending cmd: %s", cmdTimer.GetElapsedMillisec(), m_buffer);
    length = strlen(m_buffer);
    SendCmd(m_buffer, length);

    sprintf(m_buffer, "*trg\n");
    printf("%ld ms, Sending cmd: %s", cmdTimer.GetElapsedMillisec(), m_buffer);
    length = strlen(m_buffer);
    SendCmd(m_buffer, length);
#endif

}