From 135486403809cde6562e11d6a0d9a22ec40fb0bd Mon Sep 17 00:00:00 2001 From: Adam Honse Date: Tue, 22 Sep 2020 13:22:24 -0700 Subject: [PATCH] Get master building on MacOS --- OpenRGB.pro | 6 +++++ i2c_smbus/i2c_smbus.h | 22 ++++++++++++--- qt/OpenRGB.icns | Bin 0 -> 63448 bytes serial_port/serial_port.cpp | 64 ++++++++++++++++++++++++++++++-------------- serial_port/serial_port.h | 9 ++++--- 5 files changed, 75 insertions(+), 26 deletions(-) create mode 100644 qt/OpenRGB.icns diff --git a/OpenRGB.pro b/OpenRGB.pro index fef8c81b..ad65eb90 100644 --- a/OpenRGB.pro +++ b/OpenRGB.pro @@ -629,9 +629,15 @@ QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.15 macx:ICON = qt/OpenRGB.icns unix:macx { + SOURCES += \ + serial_port/find_usb_serial_port_linux.cpp \ + INCLUDEPATH += \ /usr/local/include \ LIBS += \ -L/usr/local/lib -lusb-1.0 -lhidapi \ + + CONFIG += \ + c++14 \ } diff --git a/i2c_smbus/i2c_smbus.h b/i2c_smbus/i2c_smbus.h index 976af0ef..0fecc950 100644 --- a/i2c_smbus/i2c_smbus.h +++ b/i2c_smbus/i2c_smbus.h @@ -21,7 +21,7 @@ typedef unsigned short u16; typedef unsigned int u32; typedef int s32; -#ifdef WIN32 +#ifdef _WIN32 //Data for SMBus Messages #define I2C_SMBUS_BLOCK_MAX 32 @@ -33,11 +33,27 @@ union i2c_smbus_data u8 block[I2C_SMBUS_BLOCK_MAX + 2]; }; -#else /* WIN32 */ +#endif /* _WIN32 */ + +#ifdef __linux__ #include -#endif /* WIN32 */ +#endif /* __linux__ */ + +#ifdef __APPLE__ + +//Data for SMBus Messages +#define I2C_SMBUS_BLOCK_MAX 32 + +union i2c_smbus_data +{ + u8 byte; + u16 word; + u8 block[I2C_SMBUS_BLOCK_MAX + 2]; +}; + +#endif /* __APPLE__ */ // i2c_smbus_xfer read or write markers #define I2C_SMBUS_READ 1 diff --git a/qt/OpenRGB.icns b/qt/OpenRGB.icns new file mode 100644 index 0000000000000000000000000000000000000000..737f1fa3628dcdb14aca5478ed77115e2ab7749a GIT binary patch literal 63448 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
    >}rv9a^d-3y&}&S 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 literal 0 HcmV?d00001 diff --git a/serial_port/serial_port.cpp b/serial_port/serial_port.cpp index d4eb7da9..819bd4f6 100644 --- a/serial_port/serial_port.cpp +++ b/serial_port/serial_port.cpp @@ -40,7 +40,7 @@ bool serial_port::serial_open() { // printf("SerialPort: Opening serial port %s at baud rate %d.\n", port_name, baud_rate); - #ifdef WIN32 +#ifdef _WIN32 file_descriptor = CreateFile(port_name, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); if((int)file_descriptor < 0) @@ -74,7 +74,9 @@ bool serial_port::serial_open() timeouts.WriteTotalTimeoutMultiplier=10; SetCommTimeouts(file_descriptor, &timeouts); - #else +#endif /* _WIN32 */ + +#ifdef __linux__ file_descriptor = open(port_name, O_RDWR | O_NOCTTY | O_NDELAY); @@ -116,7 +118,7 @@ bool serial_port::serial_open() //} //fcntl(file_descriptor, F_SETFL, 0); - #endif +#endif /* __linux__ */ // printf("SerialPort: Serial port %s opened successfully.\n", port_name); return true; @@ -143,12 +145,15 @@ bool serial_port::serial_open(const char* name, unsigned int baud) void serial_port::serial_close() { // printf("SerialPort: Closing port %s.\n", port_name); - #ifdef WIN32 +#ifdef _WIN32 + +#endif /* _WIN32 */ - #else +#ifdef __linux__ close(file_descriptor); - #endif + +#endif /* __linux__ */ } // read @@ -158,18 +163,24 @@ void serial_port::serial_close() // available bytes int serial_port::serial_read(char * buffer, int length) { - #ifdef WIN32 +#ifdef _WIN32 + DWORD bytesread; ReadFile(file_descriptor, buffer, length, &bytesread, NULL); + return bytesread; - #else +#endif /* _WIN32 */ + +#ifdef __linux__ int bytesread; bytesread = read(file_descriptor, buffer, length); - #endif + return bytesread; + +#endif /* __linux__ */ //printf("SerialPort: Read %d bytes on port %s.\n", bytesread, port_name); - return bytesread; + return 0; } //write @@ -180,40 +191,53 @@ int serial_port::serial_read(char * buffer, int length) // past and may cause a segfault int serial_port::serial_write(char * buffer, int length) { - #ifdef WIN32 +#ifdef _WIN32 + DWORD byteswritten; WriteFile(file_descriptor, buffer, length, &byteswritten, NULL); + return byteswritten; + +#endif /* _WIN32 */ - #else +#ifdef __linux__ int byteswritten; byteswritten = write(file_descriptor, buffer, length); - #endif + return byteswritten; + +#endif /* __linux__ */ //printf("SerialPort: Wrote %d bytes on port %s.\n", byteswritten, port_name); - return byteswritten; + return 0; } //flush void serial_port::serial_flush_rx() { - #ifdef WIN32 +#ifdef _WIN32 + PurgeComm(file_descriptor, PURGE_RXABORT | PURGE_RXCLEAR); - #else +#endif /* _WIN32 */ + +#ifdef __linux__ tcflush(file_descriptor, TCIFLUSH); - #endif + +#endif /* __linux__ */ } void serial_port::serial_flush_tx() { +#ifdef _WIN32 - #ifdef WIN32 PurgeComm(file_descriptor, PURGE_TXABORT | PURGE_TXCLEAR); - #else +#endif /* _WIN32 */ + +#ifdef __linux__ tcflush(file_descriptor, TCOFLUSH); - #endif + +#endif /* __linux__ */ } diff --git a/serial_port/serial_port.h b/serial_port/serial_port.h index 4986ea59..73fb9311 100644 --- a/serial_port/serial_port.h +++ b/serial_port/serial_port.h @@ -13,10 +13,13 @@ #include #include -#ifdef WIN32 +#ifdef _WIN32 + #include -#else +#endif /* _WIN32 */ + +#ifdef __linux__ #include #include @@ -35,7 +38,7 @@ #include -#endif +#endif /* __linux__ */ //Serial Port Class