// STL includes #include #include #include #include //Used for UART #include //Used for UART #include //Used for UART #include std::vector encode(const std::vector & data); uint8_t encode(const bool bit1, const bool bit2, const bool bit3); void printClockSignal(const std::vector & signal) { bool prevBit = true; bool nextBit = true; for (uint8_t byte : signal) { for (int i=-1; i<9; ++i) { if (i == -1) // Start bit nextBit = true; else if (i == 8) // Stop bit nextBit = false; else nextBit = ~byte & (1 << i); if (!prevBit && nextBit) { std::cout << ' '; } if (nextBit) std::cout << '1'; else std::cout << '0'; prevBit = nextBit; } } } int main() { const std::vector white{0xff,0xff,0xff, 0xff,0xff,0xff, 0xff,0xff,0xff}; const std::vector green{0xff, 0x00, 0x00}; const std::vector red {0x00, 0xff, 0x00}; const std::vector blue {0x00, 0x00, 0xff}; const std::vector cyan {0xff, 0x00, 0xff}; const std::vector mix {0x55, 0x55, 0x55}; const std::vector black{0x00, 0x00, 0x00}; const std::vector gray{0x01, 0x01, 0x01}; // printClockSignal(encode(mix));std::cout << std::endl; //OPEN THE UART // int uart0_filestream = open("/dev/ttyAMA0", O_WRONLY | O_NOCTTY | O_NDELAY); int uart0_filestream = open("/dev/ttyUSB0", O_WRONLY | O_NOCTTY | O_NDELAY); if (uart0_filestream == -1) { //ERROR - CAN'T OPEN SERIAL PORT printf("Error - Unable to open UART. Ensure it is not in use by another application\n"); return -1; } // Configure the port struct termios options; tcgetattr(uart0_filestream, &options); options.c_cflag = B2500000 | CS8 | CLOCAL; options.c_iflag = IGNPAR; options.c_oflag = 0; options.c_lflag = 0; tcflush(uart0_filestream, TCIFLUSH); tcsetattr(uart0_filestream, TCSANOW, &options); { getchar(); const std::vector encGreenData = encode(green); const std::vector encBlueData = encode(blue); const std::vector encRedData = encode(red); const std::vector encGrayData = encode(gray); const std::vector encBlackData = encode(black); //std::cout << "Writing GREEN ("; printClockSignal(encode(green)); std::cout << ")" << std::endl; // const std::vector garbage {0x0f}; // write(uart0_filestream, garbage.data(), garbage.size()); // write(uart0_filestream, encGreenData.data(), encGreenData.size()); // write(uart0_filestream, encRedData.data(), encRedData.size()); // write(uart0_filestream, encBlueData.data(), encBlueData.size()); // write(uart0_filestream, encGrayData.data(), encGrayData.size()); // write(uart0_filestream, encBlackData.data(), encBlackData.size()); // } // { // getchar(); const std::vector encData = encode(white); std::cout << "Writing WHITE ("; printClockSignal(encode(white)); std::cout << ")" << std::endl; // const std::vector garbage {0x0f}; // write(uart0_filestream, garbage.data(), garbage.size()); write(uart0_filestream, encData.data(), encData.size()); write(uart0_filestream, encData.data(), encData.size()); write(uart0_filestream, encData.data(), encData.size()); } { getchar(); const std::vector encData = encode(green); std::cout << "Writing GREEN ("; printClockSignal(encode(green)); std::cout << ")" << std::endl; write(uart0_filestream, encData.data(), encData.size()); } { getchar(); const std::vector encData = encode(red); std::cout << "Writing RED ("; printClockSignal(encode(red)); std::cout << ")" << std::endl; write(uart0_filestream, encData.data(), encData.size()); } { getchar(); const std::vector encData = encode(blue); std::cout << "Writing BLUE ("; printClockSignal(encode(blue)); std::cout << ")" << std::endl; write(uart0_filestream, encData.data(), encData.size()); } { getchar(); const std::vector encData = encode(cyan); std::cout << "Writing CYAN? ("; printClockSignal(encode(cyan)); std::cout << ")" << std::endl; write(uart0_filestream, encData.data(), encData.size()); } { getchar(); const std::vector encData = encode(mix); std::cout << "Writing MIX ("; printClockSignal(encode(mix)); std::cout << ")" << std::endl; write(uart0_filestream, encData.data(), encData.size()); } { getchar(); const std::vector encData = encode(black); std::cout << "Writing BLACK ("; printClockSignal(encode(black)); std::cout << ")" << std::endl; write(uart0_filestream, encData.data(), encData.size()); write(uart0_filestream, encData.data(), encData.size()); write(uart0_filestream, encData.data(), encData.size()); write(uart0_filestream, encData.data(), encData.size()); } close(uart0_filestream); return 0; } std::vector encode(const std::vector & data) { std::vector result; for (size_t iByte=0; iByte