diff --git a/README.md b/README.md index 63fb651cdde812209af6d960b39892390f784851..f0e761b42b5535e526307c751c466de1746accfb 100644 --- a/README.md +++ b/README.md @@ -76,6 +76,8 @@ This project is a collection of reusable pieces you can take or leave. The overa * WS2811 data cables < 10ft * No more than about 10000 LED pixels total * There's no hard limit, but it gets more difficult after this point. +* Experimental support for APA102/APA102C/SK9822 via SPI + * Currently only works on Raspberry Pi and requires the WiringPi library. Compile with FCSERVER_HAS_WIRINGPI defined to enable support. These are fuzzy limitations based on current software capabilities and rough electrical limits, so you may be able to stretch them. But this gives you an idea about the kind of art we try to support. Projects are generally larger than wearables, but smaller than entire buildings. diff --git a/doc/fc_server_config.md b/doc/fc_server_config.md index ad7852d8b54cd0bdcdf2d76f1a3307b2012b041f..13d2f72d1eab3d6b8db463024e381f33031d8a8e 100644 --- a/doc/fc_server_config.md +++ b/doc/fc_server_config.md @@ -189,3 +189,30 @@ Enttec DMX devices use a different format for their mapping objects: * DMX channels are numbered from 1 to 512. * [ *Value*, *DMX Channel* ] * Map a constant value to a DMX channel; good for configuration modes + +Using Open Pixel Control with the APA102/APA102C/SK9822 +--------------------------------- + +The Fadecandy server now has experimental support for the APA102 family of LEDs. + +APA102 devices can be configured in the same way as a Fadecandy device. For example: + + { + "listen": ["127.0.0.1", 7890], + "verbose": true, + + "devices": [ + { + "type": "apa102spi", + "port": 0, + "numLights": 144, + "map": [ [ 0, 0, 0, 144 ] ] + ] + } + ] + } + +Supported mapping objects for APA102 devices: + +* [ *OPC Channel*, *First OPC Pixel*, *First output pixel*, *Pixel count* ] + * Map a contiguous range of pixels from the specified OPC channel to the current device diff --git a/server/CMakeLists.txt b/server/CMakeLists.txt index 2f10f0cf88d01962ca576c03eadafd887b2cd278..b43792198f58ca6df57f3a0cdc57f908fe80188a 100644 --- a/server/CMakeLists.txt +++ b/server/CMakeLists.txt @@ -121,6 +121,8 @@ set(SRC "${PROJECT_SOURCE_DIR}/src/fcserver.cpp" "${PROJECT_SOURCE_DIR}/src/version.cpp" "${PROJECT_SOURCE_DIR}/src/tinythread.cpp" + "${PROJECT_SOURCE_DIR}/src/spidevice.cpp" + "${PROJECT_SOURCE_DIR}/src/apa102spidevice.cpp" "${PROJECT_BINARY_DIR}/httpdocs.cpp" ) diff --git a/server/Makefile b/server/Makefile index d78a5fc52ace5ee5e5120bd1a4ac36c1377b345a..aaf7ee4742ab6ebd3a0ab578b7b4f8cfcff390ae 100644 --- a/server/Makefile +++ b/server/Makefile @@ -12,6 +12,8 @@ CPP_FILES += \ src/fcserver.cpp \ src/version.cpp \ src/tinythread.cpp \ + src/spidevice.cpp \ + src/apa102spidevice.cpp \ src/httpdocs.cpp INCLUDES += -Isrc diff --git a/server/http/js/home.js b/server/http/js/home.js index 035d37ea064d7fa563c9e5d8a18ac4c9f6543633..1e218cc4e3e95fbbf1480df1bd5967533d5ca68c 100644 --- a/server/http/js/home.js +++ b/server/http/js/home.js @@ -78,6 +78,8 @@ jQuery(function ($) { // Other initialization is device-type-specific if (json.type == "fadecandy") { this.initTypeFadecandy(); + } else if (json.type == "apa102spi") { + this.initTypeAPA102SPI(); } else { this.initTypeOther(); } @@ -217,6 +219,8 @@ jQuery(function ($) { // Common text fields m.find(".device-serial").text(device.json.serial); + m.find(".device-port").text(device.json.port); + m.find(".device-numLights").text(device.json.numLights); return m; }, @@ -310,6 +314,68 @@ jQuery(function ($) { }); }, + initTypeAPA102SPI: function () { + /* + * For Fadecandy devices, we can show some meaningful properties, and we can + * show a dropdown with actions to perform on those devices. + */ + + var device = this; + + this.view.find(".list-group-item-heading") + .text("APA102/APA102C/SK9822 Device via SPI") + .after('\ + <p> \ + SPI Port <code class="device-port"></code>, \ + Number of Lights <code class="device-numLights"></code> \ + </p> \ + <div class="btn-group"> \ + \ + <div class="btn-group"> \ + <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"> \ + Test Patterns <span class="caret"></span> \ + </button> \ + <ul class="dropdown-menu" role="menu"> \ + <li><a class="action-off" href="#">All pixels off</a></li> \ + <li><a class="action-full" href="#">Full brightness</a></li> \ + <li><a class="action-half" href="#">50% brightness</a></li> \ + <li><a class="action-red-full" href="#">Full Red Only</a></li> \ + <li><a class="action-green-full" href="#">Full Green Only</a></li> \ + <li><a class="action-blue-full" href="#">Full Blue Only</a></li> \ + </ul> \ + </div> \ + </div> \ + '); + + this.view.find(".device-port").text(this.json.port); + this.view.find(".device-numLights").text(this.json.numLights); + this.maxPixels = this.json.numLights; + + this.view.find(".action-off").click(function (evt) { + device.fadeInSingleFrame(device.singleColorFrame(0, 0, 0)); + }); + + this.view.find(".action-half").click(function (evt) { + device.fadeInSingleFrame(device.singleColorFrame(128, 128, 128)); + }); + + this.view.find(".action-full").click(function (evt) { + device.fadeInSingleFrame(device.singleColorFrame(255, 255, 255)); + }); + + this.view.find(".action-red-full").click(function (evt) { + device.fadeInSingleFrame(device.singleColorFrame(255, 0, 0)); + }); + + this.view.find(".action-green-full").click(function (evt) { + device.fadeInSingleFrame(device.singleColorFrame(0, 255, 0)); + }); + + this.view.find(".action-blue-full").click(function (evt) { + device.fadeInSingleFrame(device.singleColorFrame(0, 0, 255)); + }); + }, + initTypeOther: function() { /* * Some other kind of device that our web frontend doesn't support. diff --git a/server/src/apa102spidevice.cpp b/server/src/apa102spidevice.cpp new file mode 100644 index 0000000000000000000000000000000000000000..e94abcacdf712bae7e0223dfa5398a28277fda68 --- /dev/null +++ b/server/src/apa102spidevice.cpp @@ -0,0 +1,271 @@ +/* + * Fadecandy driver for the APA102/APA102C/SK9822 via SPI. + * + * Copyright (c) 2013 Micah Elizabeth Scott + * Copyright (c) 2017 Lance Gilbert <lance@lancegilbert.us> + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include "apa102spidevice.h" +#include "rapidjson/stringbuffer.h" +#include "rapidjson/writer.h" +#include "opc.h" +#include <sstream> +#include <iostream> + +const char* APA102SPIDevice::DEVICE_TYPE = "apa102spi"; + +APA102SPIDevice::APA102SPIDevice(uint32_t numLights, bool verbose) + : SPIDevice(DEVICE_TYPE, verbose), + mConfigMap(0), + mNumLights(numLights) +{ + uint32_t bufferSize = sizeof(PixelFrame) * (numLights + 2); // Number of lights plus start and end frames + mFrameBuffer = (PixelFrame*)malloc(bufferSize); + + uint32_t flushCount = (numLights / 2) + (numLights % 2); + mFlushBuffer = (PixelFrame*)malloc(flushCount); + + // Initialize all buffers to zero + memset(mFlushBuffer, 0, flushCount); + memset(mFrameBuffer, 0, bufferSize); + + // Initialize start and end frames + mFrameBuffer[0].value = START_FRAME; + mFrameBuffer[numLights + 1].value = END_FRAME; +} + +APA102SPIDevice::~APA102SPIDevice() +{ + free(mFrameBuffer); + free(mFlushBuffer); + + flush(); +} + +void APA102SPIDevice::loadConfiguration(const Value &config) +{ + mConfigMap = findConfigMap(config); +} + +std::string APA102SPIDevice::getName() +{ + std::ostringstream s; + s << "APA102/APA102C/SK9822 via SPI Port " << mPort; + return s.str(); +} + +void APA102SPIDevice::flush() +{ + /* + * Flush the buffer by writing zeros through every LED + * + * This is nessecary in the event that we are not following up a writeBuffer() + * with another writeBuffer immediately. + * + */ + uint32_t flushCount = (mNumLights / 2) + (mNumLights % 2); + SPIDevice::write(mFlushBuffer, flushCount); +} + +void APA102SPIDevice::writeBuffer() +{ + SPIDevice::write(mFrameBuffer, sizeof(PixelFrame) * (mNumLights + 2)); +} + +void APA102SPIDevice::writeMessage(Document &msg) +{ + /* + * Dispatch a device-specific JSON command. + * + * This can be used to send frames or settings directly to one device, + * bypassing the mapping we use for Open Pixel Control clients. This isn't + * intended to be the fast path for regular applications, but it can be used + * by configuration tools that need to operate regardless of the mapping setup. + */ + + const char *type = msg["type"].GetString(); + + if (!strcmp(type, "device_pixels")) { + // Write raw pixels, without any mapping + writeDevicePixels(msg); + flush(); + return; + } + + // Chain to default handler + SPIDevice::writeMessage(msg); +} + +void APA102SPIDevice::writeDevicePixels(Document &msg) +{ + /* + * Write pixels without mapping, from a JSON integer + * array in msg["pixels"]. The pixel array is removed from + * the reply to save network bandwidth. + * + * Pixel values are clamped to [0, 255], for convenience. + */ + + const Value &pixels = msg["pixels"]; + if (!pixels.IsArray()) { + msg.AddMember("error", "Pixel array is missing", msg.GetAllocator()); + } + else { + + // Truncate to the framebuffer size, and only deal in whole pixels. + uint32_t numPixels = pixels.Size() / 3; + if (numPixels > mNumLights) + numPixels = mNumLights; + + for (uint32_t i = 0; i < numPixels; i++) { + PixelFrame *out = fbPixel(i); + + const Value &r = pixels[i * 3 + 0]; + const Value &g = pixels[i * 3 + 1]; + const Value &b = pixels[i * 3 + 2]; + + out->r = std::max(0, std::min(255, r.IsInt() ? r.GetInt() : 0)); + out->g = std::max(0, std::min(255, g.IsInt() ? g.GetInt() : 0)); + out->b = std::max(0, std::min(255, b.IsInt() ? b.GetInt() : 0)); + out->l = 0xEF; // todo: fix so we actually pass brightness + } + + writeBuffer(); + } +} + +void APA102SPIDevice::writeMessage(const OPC::Message &msg) +{ + /* + * Dispatch an incoming OPC command + */ + + switch (msg.command) { + + case OPC::SetPixelColors: + opcSetPixelColors(msg); + writeBuffer(); + return; + + case OPC::SystemExclusive: + // No relevant SysEx for this device + return; + } + + if (mVerbose) { + std::clog << "Unsupported OPC command: " << unsigned(msg.command) << "\n"; + } +} + +void APA102SPIDevice::opcSetPixelColors(const OPC::Message &msg) +{ + /* + * Parse through our device's mapping, and store any relevant portions of 'msg' + * in the framebuffer. + */ + + if (!mConfigMap) { + // No mapping defined yet. This device is inactive. + return; + } + + const Value &map = *mConfigMap; + for (unsigned i = 0, e = map.Size(); i != e; i++) { + opcMapPixelColors(msg, map[i]); + } +} + +void APA102SPIDevice::opcMapPixelColors(const OPC::Message &msg, const Value &inst) +{ + /* + * Parse one JSON mapping instruction, and copy any relevant parts of 'msg' + * into our framebuffer. This looks for any mapping instructions that we + * recognize: + * + * [ OPC Channel, First OPC Pixel, First output pixel, Pixel count ] + */ + + unsigned msgPixelCount = msg.length() / 3; + + if (inst.IsArray() && inst.Size() == 4) { + // Map a range from an OPC channel to our framebuffer + + const Value &vChannel = inst[0u]; + const Value &vFirstOPC = inst[1]; + const Value &vFirstOut = inst[2]; + const Value &vCount = inst[3]; + + if (vChannel.IsUint() && vFirstOPC.IsUint() && vFirstOut.IsUint() && vCount.IsInt()) { + unsigned channel = vChannel.GetUint(); + unsigned firstOPC = vFirstOPC.GetUint(); + unsigned firstOut = vFirstOut.GetUint(); + unsigned count; + int direction; + if (vCount.GetInt() >= 0) { + count = vCount.GetInt(); + direction = 1; + } + else { + count = -vCount.GetInt(); + direction = -1; + } + + if (channel != msg.channel) { + return; + } + + // Clamping, overflow-safe + firstOPC = std::min<unsigned>(firstOPC, msgPixelCount); + firstOut = std::min<unsigned>(firstOut, mNumLights); + count = std::min<unsigned>(count, msgPixelCount - firstOPC); + count = std::min<unsigned>(count, + direction > 0 ? mNumLights - firstOut : firstOut + 1); + + // Copy pixels + const uint8_t *inPtr = msg.data + (firstOPC * 3); + unsigned outIndex = firstOut; + while (count--) { + PixelFrame *outPtr = fbPixel(outIndex); + outIndex += direction; + outPtr->r = inPtr[0]; + outPtr->g = inPtr[1]; + outPtr->b = inPtr[2]; + outPtr->l = 0xEF; // todo: fix so we actually pass brightness + inPtr += 3; + } + + return; + } + } + + // Still haven't found a match? + if (mVerbose) { + rapidjson::GenericStringBuffer<rapidjson::UTF8<> > buffer; + rapidjson::Writer<rapidjson::GenericStringBuffer<rapidjson::UTF8<> > > writer(buffer); + inst.Accept(writer); + std::clog << "Unsupported JSON mapping instruction: " << buffer.GetString() << "\n"; + } +} + +void APA102SPIDevice::describe(rapidjson::Value &object, Allocator &alloc) +{ + SPIDevice::describe(object, alloc); + object.AddMember("numLights", mNumLights, alloc); +} diff --git a/server/src/apa102spidevice.h b/server/src/apa102spidevice.h new file mode 100644 index 0000000000000000000000000000000000000000..cca7b2dc0c9fd963424121c9c54a79fcb3dd3c8e --- /dev/null +++ b/server/src/apa102spidevice.h @@ -0,0 +1,80 @@ +/* + * Fadecandy driver for the APA102/APA102C/SK9822 via SPI. + * + * Copyright (c) 2013 Micah Elizabeth Scott + * Copyright (c) 2017 Lance Gilbert <lance@lancegilbert.us> + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#pragma once +#include "spidevice.h" +#include "opc.h" +#include <set> + + +class APA102SPIDevice : public SPIDevice +{ +public: + APA102SPIDevice(uint32_t numLights, bool verbose); + virtual ~APA102SPIDevice(); + + virtual void loadConfiguration(const Value &config); + virtual void writeMessage(const OPC::Message &msg); + virtual void writeMessage(Document &msg); + virtual std::string getName(); + virtual void flush(); + + static const char* DEVICE_TYPE; + + virtual void describe(rapidjson::Value &object, Allocator &alloc); + +private: + static const uint32_t START_FRAME = 0x00000000; + static const uint32_t END_FRAME = 0xFFFFFFFF; + static const uint32_t BRIGHTNESS_MASK = 0xE0; + + union PixelFrame + { + struct + { + uint8_t l; + uint8_t b; + uint8_t g; + uint8_t r; + }; + + uint32_t value; + }; + + const Value *mConfigMap; + PixelFrame* mFrameBuffer; + PixelFrame* mFlushBuffer; + uint32_t mNumLights; + + // buffer accessor + PixelFrame *fbPixel(unsigned num) { + return &mFrameBuffer[num + 1]; + } + + void writeBuffer(); + void writeDevicePixels(Document &msg); + + void opcSetPixelColors(const OPC::Message &msg); + void opcMapPixelColors(const OPC::Message &msg, const Value &inst); +}; diff --git a/server/src/fcserver.cpp b/server/src/fcserver.cpp index 6172d449df446bc9af163604ae5b1054d737f77a..86bf398afca77ef340812fba540505bc0865eeef 100644 --- a/server/src/fcserver.cpp +++ b/server/src/fcserver.cpp @@ -23,12 +23,15 @@ #include "fcserver.h" #include "usbdevice.h" +#include "apa102spidevice.h" #include "fcdevice.h" #include "version.h" #include "enttecdmxdevice.h" #include <ctype.h> #include <iostream> +#include <wiringPi.h> +#include <wiringPiSPI.h> FCServer::FCServer(rapidjson::Document &config) : mConfig(config), @@ -78,7 +81,7 @@ bool FCServer::start(libusb_context *usb) const Value &port = mListen[1]; const char *hostStr = host.IsString() ? host.GetString() : NULL; - return mTcpNetServer.start(hostStr, port.GetUint()) && startUSB(usb); + return mTcpNetServer.start(hostStr, port.GetUint()) && startUSB(usb) && startSPI(); } bool FCServer::startUSB(libusb_context *usb) @@ -117,6 +120,11 @@ void FCServer::cbOpcMessage(OPC::Message &msg, void *context) dev->writeMessage(msg); } + for (std::vector<SPIDevice*>::iterator i = self->mSPIDevices.begin(), e = self->mSPIDevices.end(); i != e; ++i) { + SPIDevice *dev = *i; + dev->writeMessage(msg); + } + self->mEventMutex.unlock(); } @@ -235,6 +243,65 @@ void FCServer::usbDeviceLeft(std::vector<USBDevice*>::iterator iter) jsonConnectedDevicesChanged(); } +bool FCServer::startSPI() +{ + wiringPiSetup(); + + for (unsigned i = 0; i < mDevices.Size(); ++i) { + const Value &device = mDevices[i]; + + const Value &vtype = device["type"]; + const Value &vport = device["port"]; + const Value &vnumLights = device["numLights"]; + + if (vtype.IsNull() || (!vtype.IsString() || strcmp(vtype.GetString(), APA102SPIDevice::DEVICE_TYPE))) { + continue; + } + + if (vport.IsNull() || (!vport.IsUint())) { + continue; + } + + if (vnumLights.IsNull() || (!vnumLights.IsUint())) { + continue; + } + + openAPA102SPIDevice(vport.GetUint(), vnumLights.GetUint()); + } + + return true; +} + +void FCServer::openAPA102SPIDevice(uint32_t port, int numLights) +{ + APA102SPIDevice* dev = new APA102SPIDevice(numLights, mVerbose); + + int r = dev->open(port); + if (r < 0) { + if (mVerbose) { + std::clog << "Error opening " << dev->getName() << "\n"; + } + delete dev; + return; + } + + for (unsigned i = 0; i < mDevices.Size(); ++i) { + if (dev->matchConfiguration(mDevices[i])) { + // Found a matching configuration for this device. We're keeping it! + + dev->loadConfiguration(mDevices[i]); + dev->writeColorCorrection(mColor); + mSPIDevices.push_back(dev); + + if (mVerbose) { + std::clog << "SPI device " << dev->getName() << " attached.\n"; + } + jsonConnectedDevicesChanged(); + return; + } + } +} + void FCServer::mainLoop() { for (;;) { @@ -395,6 +462,16 @@ void FCServer::jsonDeviceMessage(rapidjson::Document &message) break; } } + for (unsigned i = 0; i != mSPIDevices.size(); i++) { + SPIDevice *spiDev = mSPIDevices[i]; + + if (spiDev->matchConfiguration(device)) { + matched = true; + spiDev->writeMessage(message); + if (message.HasMember("error")) + break; + } + } } if (!matched) { @@ -412,6 +489,12 @@ void FCServer::jsonListConnectedDevices(rapidjson::Document &message) list.PushBack(rapidjson::kObjectType, message.GetAllocator()); mUSBDevices[i]->describe(list[i], message.GetAllocator()); } + + for (unsigned i = 0; i != mSPIDevices.size(); i++) { + SPIDevice *spiDev = mSPIDevices[i]; + list.PushBack(rapidjson::kObjectType, message.GetAllocator()); + mSPIDevices[i]->describe(list[i], message.GetAllocator()); + } } void FCServer::jsonServerInfo(rapidjson::Document &message) diff --git a/server/src/fcserver.h b/server/src/fcserver.h index 43f10f6b86954ea4a2fc8d40e7acaed4c3f4ed5c..b1567116526018e11c8acd612175949b30b272a3 100644 --- a/server/src/fcserver.h +++ b/server/src/fcserver.h @@ -26,6 +26,7 @@ #include "opc.h" #include "tcpnetserver.h" #include "usbdevice.h" +#include "spidevice.h" #include <sstream> #include <vector> #include <libusb.h> @@ -63,6 +64,8 @@ private: std::vector<USBDevice*> mUSBDevices; struct libusb_context *mUSB; + std::vector<SPIDevice*> mSPIDevices; + static void cbOpcMessage(OPC::Message &msg, void *context); static void cbJsonMessage(libwebsocket *wsi, rapidjson::Document &message, void *context); @@ -76,6 +79,9 @@ private: static void usbHotplugThreadFunc(void *arg); + bool startSPI(); + void openAPA102SPIDevice(uint32_t port, int numLights); + // JSON event broadcasters void jsonConnectedDevicesChanged(); diff --git a/server/src/spidevice.cpp b/server/src/spidevice.cpp new file mode 100644 index 0000000000000000000000000000000000000000..77fbaa549df43a8e7dce6d3a0f8481bd46b1b228 --- /dev/null +++ b/server/src/spidevice.cpp @@ -0,0 +1,140 @@ +/* +* Abstract base class for SPI-attached devices. +* +* Copyright (c) 2013 Micah Elizabeth Scott +* Copyright (c) 2017 Lance Gilbert <lance@lancegilbert.us> +* +* Permission is hereby granted, free of charge, to any person obtaining a copy of +* this software and associated documentation files (the "Software"), to deal in +* the Software without restriction, including without limitation the rights to +* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +* the Software, and to permit persons to whom the Software is furnished to do so, +* subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +#include "spidevice.h" +#include <iostream> + +#ifdef FCSERVER_HAS_WIRINGPI +#include <wiringPi.h> +#include <wiringPiSPI.h> +#endif + +#ifndef SPI_FREQUENCY_MHZ +#define SPI_FREQUENCY_MHZ 20 +#endif + +#define SPI_FREQUENCY (SPI_FREQUENCY_MHZ*1000000) + +SPIDevice::SPIDevice(const char *type, bool verbose) + : mTypeString(type), + mVerbose(verbose), + mPort(0) +{ + gettimeofday(&mTimestamp, NULL); +} + +SPIDevice::~SPIDevice() +{ + +} + +int SPIDevice::open(uint32_t port) +{ + mPort = port; + +#ifdef FCSERVER_HAS_WIRINGPI + return wiringPiSPISetup(mPort, SPI_FREQUENCY); +#else + return -1; +#endif +} + +void SPIDevice::write(void* buffer, int length) +{ +#ifdef FCSERVER_HAS_WIRINGPI + wiringPiSPIDataRW(mPort, (unsigned char*)buffer, length); +#endif +} + +void SPIDevice::writeColorCorrection(const Value &color) +{ + // Optional. By default, ignore color correction messages. +} + +bool SPIDevice::matchConfiguration(const Value &config) +{ + if (!config.IsObject()) { + return false; + } + + const Value &vtype = config["type"]; + const Value &vport = config["port"]; + + if (!vtype.IsNull() && (!vtype.IsString() || strcmp(vtype.GetString(), mTypeString))) { + return false; + } + + if (!vport.IsNull() && (!vport.IsUint() || vport.GetUint() != mPort)) { + return false; + } + + return true; +} + +const SPIDevice::Value *SPIDevice::findConfigMap(const Value &config) +{ + const Value &vmap = config["map"]; + + if (vmap.IsArray()) { + // The map is optional, but if it exists it needs to be an array. + return &vmap; + } + + if (!vmap.IsNull() && mVerbose) { + std::clog << "Device configuration 'map' must be an array.\n"; + } + + return 0; +} + +void SPIDevice::writeMessage(Document &msg) +{ + const char *type = msg["type"].GetString(); + + if (!strcmp(type, "device_color_correction")) { + // Single-device color correction + writeColorCorrection(msg["color"]); + return; + } + + msg.AddMember("error", "Unknown device-specific message type", msg.GetAllocator()); +} + +void SPIDevice::describe(rapidjson::Value &object, Allocator &alloc) +{ + object.AddMember("type", mTypeString, alloc); + + object.AddMember("port", mPort, alloc); + + /* + * The connection timestamp lets a particular connection instance be identified + * reliably, even if the same device connects and disconnects. + * + * We encode the timestamp as 64-bit millisecond count, so we don't have to worry about + * the portability of string/float conversions. This also matches a common JS format. + */ + + uint64_t timestamp = (uint64_t)mTimestamp.tv_sec * 1000 + mTimestamp.tv_usec / 1000; + object.AddMember("timestamp", timestamp, alloc); +} diff --git a/server/src/spidevice.h b/server/src/spidevice.h new file mode 100644 index 0000000000000000000000000000000000000000..341f955ee1723e69429f93084ada1095ee929827 --- /dev/null +++ b/server/src/spidevice.h @@ -0,0 +1,77 @@ +/* +* Abstract base class for SPI-attached devices. +* +* Copyright (c) 2013 Micah Elizabeth Scott +* Copyright (c) 2017 Lance Gilbert <lance@lancegilbert.us> +* +* Permission is hereby granted, free of charge, to any person obtaining a copy of +* this software and associated documentation files (the "Software"), to deal in +* the Software without restriction, including without limitation the rights to +* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +* the Software, and to permit persons to whom the Software is furnished to do so, +* subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +#pragma once + +#include "rapidjson/document.h" +#include "opc.h" +#include <string> +#include <libusb.h> // Also brings in gettimeofday() in a portable way + +class SPIDevice +{ +public: + typedef rapidjson::Value Value; + typedef rapidjson::Document Document; + typedef rapidjson::MemoryPoolAllocator<> Allocator; + + SPIDevice(const char *type, bool verbose); + virtual ~SPIDevice(); + + // Must be opened before any other methods are called. + virtual int open(uint32_t port); + + virtual void write(void* buffer, int length); + + // Check a configuration. Does it describe this device? + virtual bool matchConfiguration(const Value &config); + + // Load a matching configuration + virtual void loadConfiguration(const Value &config) = 0; + + // Handle an incoming OPC message + virtual void writeMessage(const OPC::Message &msg) = 0; + + // Handle a device-specific JSON message + virtual void writeMessage(Document &msg); + + // Write color LUT from parsed JSON + virtual void writeColorCorrection(const Value &color); + + // Describe this device by adding keys to a JSON object + virtual void describe(Value &object, Allocator &alloc); + + virtual std::string getName() = 0; + + const char *getTypeString() { return mTypeString; } + +protected: + struct timeval mTimestamp; + const char *mTypeString; + bool mVerbose; + uint32_t mPort; + + // Utilities + const Value *findConfigMap(const Value &config); +}; diff --git a/server/src/usbdevice.cpp b/server/src/usbdevice.cpp index 7e5ec398a8b43e5c9b29e3dee157cbb077c57df5..7dc01bacec0fa633fe8117ec2138b9444e5d4d69 100644 --- a/server/src/usbdevice.cpp +++ b/server/src/usbdevice.cpp @@ -21,7 +21,6 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#include "libwebsockets.h" // Lazy portable way to get gettimeofday() #include "usbdevice.h" #include <iostream> diff --git a/server/src/usbdevice.h b/server/src/usbdevice.h index 73eb2af2e58f408e1ae16d4fe4e5e58be9c6c49d..bffd7359777d83f5076ee1bc1b0bb0166c4d5167 100644 --- a/server/src/usbdevice.h +++ b/server/src/usbdevice.h @@ -26,7 +26,7 @@ #include "rapidjson/document.h" #include "opc.h" #include <string> -#include <libusb.h> +#include <libusb.h> // Also brings in gettimeofday() in a portable way /* diff --git a/server/vsbuild/vs2017_linux_raspberrypi/server_vs2017_linux_raspberrypi.sln b/server/vsbuild/vs2017_linux_raspberrypi/server_vs2017_linux_raspberrypi.sln new file mode 100644 index 0000000000000000000000000000000000000000..c6902c5b76079a0515f302b91164b15a328cc71b --- /dev/null +++ b/server/vsbuild/vs2017_linux_raspberrypi/server_vs2017_linux_raspberrypi.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.27130.2024 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "server", "server_vs2017_linux_raspberrypi.vcxproj", "{0C0A9651-812D-49F1-8B47-6C29242B376D}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|ARM = Debug|ARM + Release|ARM = Release|ARM + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {0C0A9651-812D-49F1-8B47-6C29242B376D}.Debug|ARM.ActiveCfg = Debug|ARM + {0C0A9651-812D-49F1-8B47-6C29242B376D}.Debug|ARM.Build.0 = Debug|ARM + {0C0A9651-812D-49F1-8B47-6C29242B376D}.Release|ARM.ActiveCfg = Release|ARM + {0C0A9651-812D-49F1-8B47-6C29242B376D}.Release|ARM.Build.0 = Release|ARM + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {35E75549-3D4F-4C02-9D69-164FBBD0F8A4} + EndGlobalSection +EndGlobal diff --git a/server/vsbuild/vs2017_linux_raspberrypi/server_vs2017_linux_raspberrypi.vcxproj b/server/vsbuild/vs2017_linux_raspberrypi/server_vs2017_linux_raspberrypi.vcxproj new file mode 100644 index 0000000000000000000000000000000000000000..3efa21489197e9ffce4eaf1334f398c115f03198 --- /dev/null +++ b/server/vsbuild/vs2017_linux_raspberrypi/server_vs2017_linux_raspberrypi.vcxproj @@ -0,0 +1,956 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|ARM"> + <Configuration>Debug</Configuration> + <Platform>ARM</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|ARM"> + <Configuration>Release</Configuration> + <Platform>ARM</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{0c0a9651-812d-49f1-8b47-6c29242b376d}</ProjectGuid> + <Keyword>Linux</Keyword> + <RootNamespace>server_vs2017_linux_raspberrypi</RootNamespace> + <MinimumVisualStudioVersion>15.0</MinimumVisualStudioVersion> + <ApplicationType>Linux</ApplicationType> + <ApplicationTypeRevision>1.0</ApplicationTypeRevision> + <TargetLinuxPlatform>Raspberry</TargetLinuxPlatform> + <LinuxProjectType>{8748239F-558C-44D1-944B-07B09C35B330}</LinuxProjectType> + <ProjectName>server</ProjectName> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'" Label="Configuration"> + <UseDebugLibraries>true</UseDebugLibraries> + <UseOfStl /> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'" Label="Configuration"> + <UseDebugLibraries>false</UseDebugLibraries> + <UseOfStl /> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings" /> + <ImportGroup Label="Shared" /> + <ImportGroup Label="PropertySheets" /> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + <TargetExt /> + <RemoteProjectDir>$(RemoteRootDir)/$(SolutionName)</RemoteProjectDir> + <RemoteCCompileToolExe>cc</RemoteCCompileToolExe> + <IncludePath>.;./server;./server/src;./server/libwebsockets/lib;./server/libusbx/libusb;./server/libusbx/libusb/os</IncludePath> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + <TargetExt /> + <RemoteProjectDir>$(RemoteRootDir)/$(SolutionName)</RemoteProjectDir> + <RemoteCCompileToolExe>cc</RemoteCCompileToolExe> + <IncludePath>.;./server;./server/src;./server/libwebsockets/lib;./server/libusbx/libusb;./server/libusbx/libusb/os</IncludePath> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + <Link> + <LibraryDependencies> + </LibraryDependencies> + </Link> + <RemotePostBuildEvent> + <Command> + </Command> + <Message> + </Message> + </RemotePostBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + <Link> + <LibraryDependencies> + </LibraryDependencies> + <AdditionalDependencies>-lstdc++;-lm;-lpthread;-lrt;-lwiringPi</AdditionalDependencies> + <AdditionalOptions>$(RemoteRootDir)/$(SolutionName)httpdocs.o</AdditionalOptions> + <Relocation> + </Relocation> + <FunctionBinding>false</FunctionBinding> + <NoExecStackRequired>false</NoExecStackRequired> + <UnresolvedSymbolReferences /> + </Link> + <RemotePostBuildEvent> + <Command> + </Command> + <Message> + </Message> + </RemotePostBuildEvent> + <ClCompile> + <AdditionalIncludeDirectories> + </AdditionalIncludeDirectories> + <PreprocessorDefinitions>FCSERVER_VERSION=fcserver-1.04-101-g686ab1f;FCSERVER_HAS_WIRINGPI;NDEBUG;LWS_LIBRARY_VERSION=;LWS_BUILD_HASH=;LWS_NO_EXTENSIONS;LWS_NO_CLIENT;LWS_NO_WSAPOLL;LWS_NO_DAEMONIZE;OS_LINUX;THREADS_POSIX;POLL_NFDS_TYPE=nfds_t;LIBUSB_CALL=;DEFAULT_VISIBILITY=;HAVE_GETTIMEOFDAY;HAVE_POLL_H;HAVE_ASM_TYPES_H;HAVE_SYS_SOCKET_H;HAVE_LINUX_NETLINK_H;HAVE_LINUX_FILTER_H</PreprocessorDefinitions> + <CompileAs>CompileAsCpp</CompileAs> + <RuntimeTypeInfo>false</RuntimeTypeInfo> + <CppLanguageStandard>gnu++11</CppLanguageStandard> + <ExceptionHandling>Disabled</ExceptionHandling> + <CAdditionalWarning>no-strict-aliasing</CAdditionalWarning> + <CppAdditionalWarning>no-strict-aliasing</CppAdditionalWarning> + <Verbose>true</Verbose> + <AdditionalOptions /> + </ClCompile> + <RemotePreLinkEvent> + <Command>(cd server/http; python manifest.py) > $(RemoteRootDir)/$(SolutionName)httpdocs.cpp && g++ -DFCSERVER_VERSION=fcserver-1.04-101-g686ab1f -std=gnu++0x -felide-constructors -fno-exceptions -fno-rtti -Wno-strict-aliasing -Os -DNDEBUG -DLWS_LIBRARY_VERSION= -DLWS_BUILD_HASH= -DLWS_NO_EXTENSIONS -DLWS_NO_CLIENT -DLWS_NO_WSAPOLL -DLWS_NO_DAEMONIZE -DOS_LINUX -DTHREADS_POSIX -DPOLL_NFDS_TYPE=nfds_t -DLIBUSB_CALL= -DDEFAULT_VISIBILITY= -DHAVE_GETTIMEOFDAY -DHAVE_POLL_H -DHAVE_ASM_TYPES_H -DHAVE_SYS_SOCKET_H -DHAVE_LINUX_NETLINK_H -DHAVE_LINUX_FILTER_H -MMD -Iserver/src -Iserver -lserver/rapidjson -Iserver/libwebsockets/lib -Iserver/libusbx/libusb -c -o $(RemoteRootDir)/$(SolutionName)httpdocs.o $(RemoteRootDir)/$(SolutionName)httpdocs.cpp</Command> + <Message>Generating and compiling httpdocs.cpp</Message> + </RemotePreLinkEvent> + </ItemDefinitionGroup> + <ItemGroup> + <ClInclude Include="..\..\libusbx\libusb\hotplug.h" /> + <ClInclude Include="..\..\libusbx\libusb\libusb.h" /> + <ClInclude Include="..\..\libusbx\libusb\libusbi.h" /> + <ClInclude Include="..\..\libusbx\libusb\os\darwin_usb.h"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</ExcludedFromBuild> + </ClInclude> + <ClInclude Include="..\..\libusbx\libusb\os\linux_usbfs.h" /> + <ClInclude Include="..\..\libusbx\libusb\os\poll_posix.h" /> + <ClInclude Include="..\..\libusbx\libusb\os\poll_windows.h"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</ExcludedFromBuild> + </ClInclude> + <ClInclude Include="..\..\libusbx\libusb\os\threads_posix.h" /> + <ClInclude Include="..\..\libusbx\libusb\os\threads_windows.h"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</ExcludedFromBuild> + </ClInclude> + <ClInclude Include="..\..\libusbx\libusb\os\wince_usb.h"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</ExcludedFromBuild> + </ClInclude> + <ClInclude Include="..\..\libusbx\libusb\os\windows_common.h"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</ExcludedFromBuild> + </ClInclude> + <ClInclude Include="..\..\libusbx\libusb\os\windows_usb.h"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</ExcludedFromBuild> + </ClInclude> + <ClInclude Include="..\..\libusbx\libusb\version.h" /> + <ClInclude Include="..\..\libusbx\libusb\version_nano.h" /> + <ClInclude Include="..\..\libwebsockets\lib\extension-deflate-frame.h" /> + <ClInclude Include="..\..\libwebsockets\lib\extension-deflate-stream.h" /> + <ClInclude Include="..\..\libwebsockets\lib\getifaddrs.h" /> + <ClInclude Include="..\..\libwebsockets\lib\libwebsockets.h" /> + <ClInclude Include="..\..\libwebsockets\lib\private-libwebsockets.h" /> + <ClInclude Include="..\..\rapidjson\document.h" /> + <ClInclude Include="..\..\rapidjson\filestream.h" /> + <ClInclude Include="..\..\rapidjson\internal\pow10.h" /> + <ClInclude Include="..\..\rapidjson\internal\stack.h" /> + <ClInclude Include="..\..\rapidjson\internal\strfunc.h" /> + <ClInclude Include="..\..\rapidjson\prettywriter.h" /> + <ClInclude Include="..\..\rapidjson\rapidjson.h" /> + <ClInclude Include="..\..\rapidjson\reader.h" /> + <ClInclude Include="..\..\rapidjson\stringbuffer.h" /> + <ClInclude Include="..\..\rapidjson\writer.h" /> + <ClInclude Include="..\..\src\apa102spidevice.h" /> + <ClInclude Include="..\..\src\config.h" /> + <ClInclude Include="..\..\src\enttecdmxdevice.h" /> + <ClInclude Include="..\..\src\fast_mutex.h" /> + <ClInclude Include="..\..\src\fcdevice.h" /> + <ClInclude Include="..\..\src\fcserver.h" /> + <ClInclude Include="..\..\src\opc.h" /> + <ClInclude Include="..\..\src\spidevice.h" /> + <ClInclude Include="..\..\src\tcpnetserver.h" /> + <ClInclude Include="..\..\src\tinythread.h" /> + <ClInclude Include="..\..\src\usbdevice.h" /> + <ClInclude Include="..\..\src\version.h" /> + </ItemGroup> + <ItemGroup> + <None Include="..\..\..\.gitignore" /> + <None Include="..\..\..\README.md" /> + <None Include="..\..\http\404.html"> + <RemoteCopyFile Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</RemoteCopyFile> + <RemoteCopyFile Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</RemoteCopyFile> + </None> + <None Include="..\..\http\css\narrow.css"> + <RemoteCopyFile Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</RemoteCopyFile> + <RemoteCopyFile Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</RemoteCopyFile> + </None> + <None Include="..\..\http\dist\css\bootstrap.min.css"> + <RemoteCopyFile Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</RemoteCopyFile> + <RemoteCopyFile Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</RemoteCopyFile> + </None> + <None Include="..\..\http\dist\js\bootstrap.min.js"> + <RemoteCopyFile Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</RemoteCopyFile> + <RemoteCopyFile Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</RemoteCopyFile> + </None> + <None Include="..\..\http\dist\js\jquery-1.10.2.min.js"> + <RemoteCopyFile Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</RemoteCopyFile> + <RemoteCopyFile Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</RemoteCopyFile> + </None> + <None Include="..\..\http\index.html"> + <RemoteCopyFile Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</RemoteCopyFile> + <RemoteCopyFile Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</RemoteCopyFile> + </None> + <None Include="..\..\http\js\home.js"> + <RemoteCopyFile Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</RemoteCopyFile> + <RemoteCopyFile Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</RemoteCopyFile> + </None> + <None Include="..\..\http\manifest.py"> + <FileType>Document</FileType> + <Command Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">(cd %(RelativeDir); python %(Identity)) > %(RelativeDir)/../src/httpdocs.cpp</Command> + <Command Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">(cd %(RelativeDir); python %(Identity)) > %(RelativeDir)/../src/httpdocs.cpp</Command> + <Message Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">(cd %(RelativeDir); python %(Identity)) > %(RelativeDir)/../src/httpdocs.cpp</Message> + <Message Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">(cd %(RelativeDir); python %(Identity)) > %(RelativeDir)/../src/httpdocs.cpp</Message> + <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </Outputs> + <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </Outputs> + <LinkObjects Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</LinkObjects> + <LinkObjects Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</LinkObjects> + <RemoteCopyFile Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</RemoteCopyFile> + <RemoteCopyFile Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</RemoteCopyFile> + <TreatOutputAsContent Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</TreatOutputAsContent> + <TreatOutputAsContent Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</TreatOutputAsContent> + </None> + <None Include="..\..\libwebsockets\lib\.gitignore" /> + </ItemGroup> + <ItemGroup> + <ClCompile Include="..\..\libusbx\libusb\core.c"> + <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </WarningLevel> + <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </WarningLevel> + <OmitFramePointers Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </OmitFramePointers> + <OmitFramePointers Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </OmitFramePointers> + <ThreadSafeStatics Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </ThreadSafeStatics> + <ExceptionHandling Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </ExceptionHandling> + <ThreadSafeStatics Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </ThreadSafeStatics> + <ExceptionHandling Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </ExceptionHandling> + <RuntimeTypeInfo Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </RuntimeTypeInfo> + <CppLanguageStandard Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </CppLanguageStandard> + <RuntimeTypeInfo Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </RuntimeTypeInfo> + <CppLanguageStandard Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </CppLanguageStandard> + <CompileAs Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">CompileAsC</CompileAs> + <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">CompileAsC</CompileAs> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">_DEFAULT_SOURCE;NDEBUG;LWS_LIBRARY_VERSION=;LWS_BUILD_HASH=;LWS_NO_EXTENSIONS;LWS_NO_CLIENT;LWS_NO_WSAPOLL;LWS_NO_DAEMONIZE;OS_LINUX;THREADS_POSIX;POLL_NFDS_TYPE=nfds_t;LIBUSB_CALL=;DEFAULT_VISIBILITY=;HAVE_GETTIMEOFDAY;HAVE_POLL_H;HAVE_ASM_TYPES_H;HAVE_SYS_SOCKET_H;HAVE_LINUX_NETLINK_H;HAVE_LINUX_FILTER_H</PreprocessorDefinitions> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">_DEFAULT_SOURCE;NDEBUG;LWS_LIBRARY_VERSION=;LWS_BUILD_HASH=;LWS_NO_EXTENSIONS;LWS_NO_CLIENT;LWS_NO_WSAPOLL;LWS_NO_DAEMONIZE;OS_LINUX;THREADS_POSIX;POLL_NFDS_TYPE=nfds_t;LIBUSB_CALL=;DEFAULT_VISIBILITY=;HAVE_GETTIMEOFDAY;HAVE_POLL_H;HAVE_ASM_TYPES_H;HAVE_SYS_SOCKET_H;HAVE_LINUX_NETLINK_H;HAVE_LINUX_FILTER_H</PreprocessorDefinitions> + <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">-MMD</AdditionalOptions> + <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">-MMD</AdditionalOptions> + </ClCompile> + <ClCompile Include="..\..\libusbx\libusb\descriptor.c"> + <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </WarningLevel> + <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </WarningLevel> + <OmitFramePointers Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </OmitFramePointers> + <OmitFramePointers Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </OmitFramePointers> + <ThreadSafeStatics Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </ThreadSafeStatics> + <ExceptionHandling Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </ExceptionHandling> + <ThreadSafeStatics Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </ThreadSafeStatics> + <ExceptionHandling Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </ExceptionHandling> + <RuntimeTypeInfo Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </RuntimeTypeInfo> + <CppLanguageStandard Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </CppLanguageStandard> + <RuntimeTypeInfo Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </RuntimeTypeInfo> + <CppLanguageStandard Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </CppLanguageStandard> + <CompileAs Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">CompileAsC</CompileAs> + <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">CompileAsC</CompileAs> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">_DEFAULT_SOURCE;NDEBUG;LWS_LIBRARY_VERSION=;LWS_BUILD_HASH=;LWS_NO_EXTENSIONS;LWS_NO_CLIENT;LWS_NO_WSAPOLL;LWS_NO_DAEMONIZE;OS_LINUX;THREADS_POSIX;POLL_NFDS_TYPE=nfds_t;LIBUSB_CALL=;DEFAULT_VISIBILITY=;HAVE_GETTIMEOFDAY;HAVE_POLL_H;HAVE_ASM_TYPES_H;HAVE_SYS_SOCKET_H;HAVE_LINUX_NETLINK_H;HAVE_LINUX_FILTER_H</PreprocessorDefinitions> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">_DEFAULT_SOURCE;NDEBUG;LWS_LIBRARY_VERSION=;LWS_BUILD_HASH=;LWS_NO_EXTENSIONS;LWS_NO_CLIENT;LWS_NO_WSAPOLL;LWS_NO_DAEMONIZE;OS_LINUX;THREADS_POSIX;POLL_NFDS_TYPE=nfds_t;LIBUSB_CALL=;DEFAULT_VISIBILITY=;HAVE_GETTIMEOFDAY;HAVE_POLL_H;HAVE_ASM_TYPES_H;HAVE_SYS_SOCKET_H;HAVE_LINUX_NETLINK_H;HAVE_LINUX_FILTER_H</PreprocessorDefinitions> + <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">-MMD</AdditionalOptions> + <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">-MMD</AdditionalOptions> + </ClCompile> + <ClCompile Include="..\..\libusbx\libusb\hotplug.c"> + <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </WarningLevel> + <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </WarningLevel> + <OmitFramePointers Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </OmitFramePointers> + <OmitFramePointers Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </OmitFramePointers> + <ThreadSafeStatics Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </ThreadSafeStatics> + <ExceptionHandling Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </ExceptionHandling> + <ThreadSafeStatics Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </ThreadSafeStatics> + <ExceptionHandling Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </ExceptionHandling> + <RuntimeTypeInfo Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </RuntimeTypeInfo> + <CppLanguageStandard Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </CppLanguageStandard> + <RuntimeTypeInfo Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </RuntimeTypeInfo> + <CppLanguageStandard Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </CppLanguageStandard> + <CompileAs Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">CompileAsC</CompileAs> + <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">CompileAsC</CompileAs> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">_DEFAULT_SOURCE;NDEBUG;LWS_LIBRARY_VERSION=;LWS_BUILD_HASH=;LWS_NO_EXTENSIONS;LWS_NO_CLIENT;LWS_NO_WSAPOLL;LWS_NO_DAEMONIZE;OS_LINUX;THREADS_POSIX;POLL_NFDS_TYPE=nfds_t;LIBUSB_CALL=;DEFAULT_VISIBILITY=;HAVE_GETTIMEOFDAY;HAVE_POLL_H;HAVE_ASM_TYPES_H;HAVE_SYS_SOCKET_H;HAVE_LINUX_NETLINK_H;HAVE_LINUX_FILTER_H</PreprocessorDefinitions> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">_DEFAULT_SOURCE;NDEBUG;LWS_LIBRARY_VERSION=;LWS_BUILD_HASH=;LWS_NO_EXTENSIONS;LWS_NO_CLIENT;LWS_NO_WSAPOLL;LWS_NO_DAEMONIZE;OS_LINUX;THREADS_POSIX;POLL_NFDS_TYPE=nfds_t;LIBUSB_CALL=;DEFAULT_VISIBILITY=;HAVE_GETTIMEOFDAY;HAVE_POLL_H;HAVE_ASM_TYPES_H;HAVE_SYS_SOCKET_H;HAVE_LINUX_NETLINK_H;HAVE_LINUX_FILTER_H</PreprocessorDefinitions> + <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">-MMD</AdditionalOptions> + <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">-MMD</AdditionalOptions> + </ClCompile> + <ClCompile Include="..\..\libusbx\libusb\io.c"> + <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </WarningLevel> + <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </WarningLevel> + <OmitFramePointers Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </OmitFramePointers> + <OmitFramePointers Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </OmitFramePointers> + <ThreadSafeStatics Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </ThreadSafeStatics> + <ExceptionHandling Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </ExceptionHandling> + <ThreadSafeStatics Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </ThreadSafeStatics> + <ExceptionHandling Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </ExceptionHandling> + <RuntimeTypeInfo Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </RuntimeTypeInfo> + <CppLanguageStandard Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </CppLanguageStandard> + <RuntimeTypeInfo Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </RuntimeTypeInfo> + <CppLanguageStandard Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </CppLanguageStandard> + <CompileAs Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">CompileAsC</CompileAs> + <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">CompileAsC</CompileAs> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">_DEFAULT_SOURCE;NDEBUG;LWS_LIBRARY_VERSION=;LWS_BUILD_HASH=;LWS_NO_EXTENSIONS;LWS_NO_CLIENT;LWS_NO_WSAPOLL;LWS_NO_DAEMONIZE;OS_LINUX;THREADS_POSIX;POLL_NFDS_TYPE=nfds_t;LIBUSB_CALL=;DEFAULT_VISIBILITY=;HAVE_GETTIMEOFDAY;HAVE_POLL_H;HAVE_ASM_TYPES_H;HAVE_SYS_SOCKET_H;HAVE_LINUX_NETLINK_H;HAVE_LINUX_FILTER_H</PreprocessorDefinitions> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">_DEFAULT_SOURCE;NDEBUG;LWS_LIBRARY_VERSION=;LWS_BUILD_HASH=;LWS_NO_EXTENSIONS;LWS_NO_CLIENT;LWS_NO_WSAPOLL;LWS_NO_DAEMONIZE;OS_LINUX;THREADS_POSIX;POLL_NFDS_TYPE=nfds_t;LIBUSB_CALL=;DEFAULT_VISIBILITY=;HAVE_GETTIMEOFDAY;HAVE_POLL_H;HAVE_ASM_TYPES_H;HAVE_SYS_SOCKET_H;HAVE_LINUX_NETLINK_H;HAVE_LINUX_FILTER_H</PreprocessorDefinitions> + <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">-MMD</AdditionalOptions> + <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">-MMD</AdditionalOptions> + </ClCompile> + <ClCompile Include="..\..\libusbx\libusb\os\darwin_usb.c"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</ExcludedFromBuild> + </ClCompile> + <ClCompile Include="..\..\libusbx\libusb\os\linux_netlink.c"> + <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </WarningLevel> + <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </WarningLevel> + <OmitFramePointers Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </OmitFramePointers> + <OmitFramePointers Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </OmitFramePointers> + <ThreadSafeStatics Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </ThreadSafeStatics> + <ExceptionHandling Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </ExceptionHandling> + <ThreadSafeStatics Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </ThreadSafeStatics> + <ExceptionHandling Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </ExceptionHandling> + <RuntimeTypeInfo Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </RuntimeTypeInfo> + <CppLanguageStandard Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </CppLanguageStandard> + <RuntimeTypeInfo Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </RuntimeTypeInfo> + <CppLanguageStandard Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </CppLanguageStandard> + <CompileAs Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">CompileAsC</CompileAs> + <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">CompileAsC</CompileAs> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">_DEFAULT_SOURCE;NDEBUG;LWS_LIBRARY_VERSION=;LWS_BUILD_HASH=;LWS_NO_EXTENSIONS;LWS_NO_CLIENT;LWS_NO_WSAPOLL;LWS_NO_DAEMONIZE;OS_LINUX;THREADS_POSIX;POLL_NFDS_TYPE=nfds_t;LIBUSB_CALL=;DEFAULT_VISIBILITY=;HAVE_GETTIMEOFDAY;HAVE_POLL_H;HAVE_ASM_TYPES_H;HAVE_SYS_SOCKET_H;HAVE_LINUX_NETLINK_H;HAVE_LINUX_FILTER_H</PreprocessorDefinitions> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">_DEFAULT_SOURCE;NDEBUG;LWS_LIBRARY_VERSION=;LWS_BUILD_HASH=;LWS_NO_EXTENSIONS;LWS_NO_CLIENT;LWS_NO_WSAPOLL;LWS_NO_DAEMONIZE;OS_LINUX;THREADS_POSIX;POLL_NFDS_TYPE=nfds_t;LIBUSB_CALL=;DEFAULT_VISIBILITY=;HAVE_GETTIMEOFDAY;HAVE_POLL_H;HAVE_ASM_TYPES_H;HAVE_SYS_SOCKET_H;HAVE_LINUX_NETLINK_H;HAVE_LINUX_FILTER_H</PreprocessorDefinitions> + <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">-MMD</AdditionalOptions> + <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">-MMD</AdditionalOptions> + </ClCompile> + <ClCompile Include="..\..\libusbx\libusb\os\linux_udev.c"> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">FCSERVER_VERSION=fcserver-1.04-101-g686ab1f;NDEBUG -DLWS_LIBRARY_VERSION=;LWS_BUILD_HASH=;LWS_NO_EXTENSIONS;LWS_NO_CLIENT;LWS_NO_WSAPOLL;LWS_NO_DAEMONIZE;OS_LINUX;THREADS_POSIX;POLL_NFDS_TYPE=nfds_t;LIBUSB_CALL=;DEFAULT_VISIBILITY=;HAVE_GETTIMEOFDAY;HAVE_POLL_H;HAVE_ASM_TYPES_H;HAVE_SYS_SOCKET_H;HAVE_LINUX_NETLINK_H;HAVE_LINUX_FILTER_H</PreprocessorDefinitions> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">FCSERVER_VERSION=fcserver-1.04-101-g686ab1f;NDEBUG -DLWS_LIBRARY_VERSION=;LWS_BUILD_HASH=;LWS_NO_EXTENSIONS;LWS_NO_CLIENT;LWS_NO_WSAPOLL;LWS_NO_DAEMONIZE;OS_LINUX;THREADS_POSIX;POLL_NFDS_TYPE=nfds_t;LIBUSB_CALL=;DEFAULT_VISIBILITY=;HAVE_GETTIMEOFDAY;HAVE_POLL_H;HAVE_ASM_TYPES_H;HAVE_SYS_SOCKET_H;HAVE_LINUX_NETLINK_H;HAVE_LINUX_FILTER_H</PreprocessorDefinitions> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</ExcludedFromBuild> + </ClCompile> + <ClCompile Include="..\..\libusbx\libusb\os\linux_usbfs.c"> + <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </WarningLevel> + <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </WarningLevel> + <OmitFramePointers Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </OmitFramePointers> + <OmitFramePointers Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </OmitFramePointers> + <ThreadSafeStatics Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </ThreadSafeStatics> + <ExceptionHandling Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </ExceptionHandling> + <ThreadSafeStatics Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </ThreadSafeStatics> + <ExceptionHandling Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </ExceptionHandling> + <RuntimeTypeInfo Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </RuntimeTypeInfo> + <CppLanguageStandard Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </CppLanguageStandard> + <RuntimeTypeInfo Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </RuntimeTypeInfo> + <CppLanguageStandard Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </CppLanguageStandard> + <CompileAs Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">CompileAsC</CompileAs> + <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">CompileAsC</CompileAs> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">_DEFAULT_SOURCE;NDEBUG;LWS_LIBRARY_VERSION=;LWS_BUILD_HASH=;LWS_NO_EXTENSIONS;LWS_NO_CLIENT;LWS_NO_WSAPOLL;LWS_NO_DAEMONIZE;OS_LINUX;THREADS_POSIX;POLL_NFDS_TYPE=nfds_t;LIBUSB_CALL=;DEFAULT_VISIBILITY=;HAVE_GETTIMEOFDAY;HAVE_POLL_H;HAVE_ASM_TYPES_H;HAVE_SYS_SOCKET_H;HAVE_LINUX_NETLINK_H;HAVE_LINUX_FILTER_H</PreprocessorDefinitions> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">_DEFAULT_SOURCE;NDEBUG;LWS_LIBRARY_VERSION=;LWS_BUILD_HASH=;LWS_NO_EXTENSIONS;LWS_NO_CLIENT;LWS_NO_WSAPOLL;LWS_NO_DAEMONIZE;OS_LINUX;THREADS_POSIX;POLL_NFDS_TYPE=nfds_t;LIBUSB_CALL=;DEFAULT_VISIBILITY=;HAVE_GETTIMEOFDAY;HAVE_POLL_H;HAVE_ASM_TYPES_H;HAVE_SYS_SOCKET_H;HAVE_LINUX_NETLINK_H;HAVE_LINUX_FILTER_H</PreprocessorDefinitions> + <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">-MMD</AdditionalOptions> + <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">-MMD</AdditionalOptions> + </ClCompile> + <ClCompile Include="..\..\libusbx\libusb\os\netbsd_usb.c"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</ExcludedFromBuild> + </ClCompile> + <ClCompile Include="..\..\libusbx\libusb\os\openbsd_usb.c"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</ExcludedFromBuild> + </ClCompile> + <ClCompile Include="..\..\libusbx\libusb\os\poll_posix.c"> + <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </WarningLevel> + <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </WarningLevel> + <OmitFramePointers Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </OmitFramePointers> + <OmitFramePointers Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </OmitFramePointers> + <ThreadSafeStatics Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </ThreadSafeStatics> + <ExceptionHandling Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </ExceptionHandling> + <ThreadSafeStatics Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </ThreadSafeStatics> + <ExceptionHandling Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </ExceptionHandling> + <RuntimeTypeInfo Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </RuntimeTypeInfo> + <CppLanguageStandard Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </CppLanguageStandard> + <RuntimeTypeInfo Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </RuntimeTypeInfo> + <CppLanguageStandard Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </CppLanguageStandard> + <CompileAs Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">CompileAsC</CompileAs> + <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">CompileAsC</CompileAs> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">_DEFAULT_SOURCE;NDEBUG;LWS_LIBRARY_VERSION=;LWS_BUILD_HASH=;LWS_NO_EXTENSIONS;LWS_NO_CLIENT;LWS_NO_WSAPOLL;LWS_NO_DAEMONIZE;OS_LINUX;THREADS_POSIX;POLL_NFDS_TYPE=nfds_t;LIBUSB_CALL=;DEFAULT_VISIBILITY=;HAVE_GETTIMEOFDAY;HAVE_POLL_H;HAVE_ASM_TYPES_H;HAVE_SYS_SOCKET_H;HAVE_LINUX_NETLINK_H;HAVE_LINUX_FILTER_H</PreprocessorDefinitions> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">_DEFAULT_SOURCE;NDEBUG;LWS_LIBRARY_VERSION=;LWS_BUILD_HASH=;LWS_NO_EXTENSIONS;LWS_NO_CLIENT;LWS_NO_WSAPOLL;LWS_NO_DAEMONIZE;OS_LINUX;THREADS_POSIX;POLL_NFDS_TYPE=nfds_t;LIBUSB_CALL=;DEFAULT_VISIBILITY=;HAVE_GETTIMEOFDAY;HAVE_POLL_H;HAVE_ASM_TYPES_H;HAVE_SYS_SOCKET_H;HAVE_LINUX_NETLINK_H;HAVE_LINUX_FILTER_H</PreprocessorDefinitions> + <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">-MMD</AdditionalOptions> + <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">-MMD</AdditionalOptions> + </ClCompile> + <ClCompile Include="..\..\libusbx\libusb\os\poll_windows.c"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</ExcludedFromBuild> + </ClCompile> + <ClCompile Include="..\..\libusbx\libusb\os\threads_posix.c"> + <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </WarningLevel> + <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </WarningLevel> + <OmitFramePointers Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </OmitFramePointers> + <OmitFramePointers Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </OmitFramePointers> + <ThreadSafeStatics Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </ThreadSafeStatics> + <ExceptionHandling Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </ExceptionHandling> + <ThreadSafeStatics Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </ThreadSafeStatics> + <ExceptionHandling Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </ExceptionHandling> + <RuntimeTypeInfo Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </RuntimeTypeInfo> + <CppLanguageStandard Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </CppLanguageStandard> + <RuntimeTypeInfo Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </RuntimeTypeInfo> + <CppLanguageStandard Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </CppLanguageStandard> + <CompileAs Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">CompileAsC</CompileAs> + <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">CompileAsC</CompileAs> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">_DEFAULT_SOURCE;NDEBUG;LWS_LIBRARY_VERSION=;LWS_BUILD_HASH=;LWS_NO_EXTENSIONS;LWS_NO_CLIENT;LWS_NO_WSAPOLL;LWS_NO_DAEMONIZE;OS_LINUX;THREADS_POSIX;POLL_NFDS_TYPE=nfds_t;LIBUSB_CALL=;DEFAULT_VISIBILITY=;HAVE_GETTIMEOFDAY;HAVE_POLL_H;HAVE_ASM_TYPES_H;HAVE_SYS_SOCKET_H;HAVE_LINUX_NETLINK_H;HAVE_LINUX_FILTER_H</PreprocessorDefinitions> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">_DEFAULT_SOURCE;NDEBUG;LWS_LIBRARY_VERSION=;LWS_BUILD_HASH=;LWS_NO_EXTENSIONS;LWS_NO_CLIENT;LWS_NO_WSAPOLL;LWS_NO_DAEMONIZE;OS_LINUX;THREADS_POSIX;POLL_NFDS_TYPE=nfds_t;LIBUSB_CALL=;DEFAULT_VISIBILITY=;HAVE_GETTIMEOFDAY;HAVE_POLL_H;HAVE_ASM_TYPES_H;HAVE_SYS_SOCKET_H;HAVE_LINUX_NETLINK_H;HAVE_LINUX_FILTER_H</PreprocessorDefinitions> + <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">-MMD</AdditionalOptions> + <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">-MMD</AdditionalOptions> + </ClCompile> + <ClCompile Include="..\..\libusbx\libusb\os\threads_windows.c"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</ExcludedFromBuild> + </ClCompile> + <ClCompile Include="..\..\libusbx\libusb\os\wince_usb.c"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</ExcludedFromBuild> + </ClCompile> + <ClCompile Include="..\..\libusbx\libusb\os\windows_usb.c"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</ExcludedFromBuild> + </ClCompile> + <ClCompile Include="..\..\libusbx\libusb\strerror.c"> + <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </WarningLevel> + <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </WarningLevel> + <OmitFramePointers Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </OmitFramePointers> + <OmitFramePointers Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </OmitFramePointers> + <ThreadSafeStatics Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </ThreadSafeStatics> + <ExceptionHandling Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </ExceptionHandling> + <ThreadSafeStatics Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </ThreadSafeStatics> + <ExceptionHandling Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </ExceptionHandling> + <RuntimeTypeInfo Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </RuntimeTypeInfo> + <CppLanguageStandard Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </CppLanguageStandard> + <RuntimeTypeInfo Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </RuntimeTypeInfo> + <CppLanguageStandard Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </CppLanguageStandard> + <CompileAs Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">CompileAsC</CompileAs> + <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">CompileAsC</CompileAs> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">_DEFAULT_SOURCE;NDEBUG;LWS_LIBRARY_VERSION=;LWS_BUILD_HASH=;LWS_NO_EXTENSIONS;LWS_NO_CLIENT;LWS_NO_WSAPOLL;LWS_NO_DAEMONIZE;OS_LINUX;THREADS_POSIX;POLL_NFDS_TYPE=nfds_t;LIBUSB_CALL=;DEFAULT_VISIBILITY=;HAVE_GETTIMEOFDAY;HAVE_POLL_H;HAVE_ASM_TYPES_H;HAVE_SYS_SOCKET_H;HAVE_LINUX_NETLINK_H;HAVE_LINUX_FILTER_H</PreprocessorDefinitions> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">_DEFAULT_SOURCE;NDEBUG;LWS_LIBRARY_VERSION=;LWS_BUILD_HASH=;LWS_NO_EXTENSIONS;LWS_NO_CLIENT;LWS_NO_WSAPOLL;LWS_NO_DAEMONIZE;OS_LINUX;THREADS_POSIX;POLL_NFDS_TYPE=nfds_t;LIBUSB_CALL=;DEFAULT_VISIBILITY=;HAVE_GETTIMEOFDAY;HAVE_POLL_H;HAVE_ASM_TYPES_H;HAVE_SYS_SOCKET_H;HAVE_LINUX_NETLINK_H;HAVE_LINUX_FILTER_H</PreprocessorDefinitions> + <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">-MMD</AdditionalOptions> + <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">-MMD</AdditionalOptions> + </ClCompile> + <ClCompile Include="..\..\libusbx\libusb\sync.c"> + <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </WarningLevel> + <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </WarningLevel> + <OmitFramePointers Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </OmitFramePointers> + <OmitFramePointers Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </OmitFramePointers> + <ThreadSafeStatics Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </ThreadSafeStatics> + <ExceptionHandling Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </ExceptionHandling> + <ThreadSafeStatics Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </ThreadSafeStatics> + <ExceptionHandling Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </ExceptionHandling> + <RuntimeTypeInfo Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </RuntimeTypeInfo> + <CppLanguageStandard Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </CppLanguageStandard> + <RuntimeTypeInfo Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </RuntimeTypeInfo> + <CppLanguageStandard Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </CppLanguageStandard> + <CompileAs Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">CompileAsC</CompileAs> + <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">CompileAsC</CompileAs> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">_DEFAULT_SOURCE;NDEBUG;LWS_LIBRARY_VERSION=;LWS_BUILD_HASH=;LWS_NO_EXTENSIONS;LWS_NO_CLIENT;LWS_NO_WSAPOLL;LWS_NO_DAEMONIZE;OS_LINUX;THREADS_POSIX;POLL_NFDS_TYPE=nfds_t;LIBUSB_CALL=;DEFAULT_VISIBILITY=;HAVE_GETTIMEOFDAY;HAVE_POLL_H;HAVE_ASM_TYPES_H;HAVE_SYS_SOCKET_H;HAVE_LINUX_NETLINK_H;HAVE_LINUX_FILTER_H</PreprocessorDefinitions> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">_DEFAULT_SOURCE;NDEBUG;LWS_LIBRARY_VERSION=;LWS_BUILD_HASH=;LWS_NO_EXTENSIONS;LWS_NO_CLIENT;LWS_NO_WSAPOLL;LWS_NO_DAEMONIZE;OS_LINUX;THREADS_POSIX;POLL_NFDS_TYPE=nfds_t;LIBUSB_CALL=;DEFAULT_VISIBILITY=;HAVE_GETTIMEOFDAY;HAVE_POLL_H;HAVE_ASM_TYPES_H;HAVE_SYS_SOCKET_H;HAVE_LINUX_NETLINK_H;HAVE_LINUX_FILTER_H</PreprocessorDefinitions> + <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">-MMD</AdditionalOptions> + <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">-MMD</AdditionalOptions> + </ClCompile> + <ClCompile Include="..\..\libwebsockets\lib\base64-decode.c"> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">_DEFAULT_SOURCE;NDEBUG;LWS_LIBRARY_VERSION=;LWS_BUILD_HASH=;LWS_NO_EXTENSIONS;LWS_NO_CLIENT;LWS_NO_WSAPOLL;LWS_NO_DAEMONIZE;OS_LINUX;THREADS_POSIX;POLL_NFDS_TYPE=nfds_t;LIBUSB_CALL=;DEFAULT_VISIBILITY=;HAVE_GETTIMEOFDAY;HAVE_POLL_H;HAVE_ASM_TYPES_H;HAVE_SYS_SOCKET_H;HAVE_LINUX_NETLINK_H;HAVE_LINUX_FILTER_H</PreprocessorDefinitions> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">_DEFAULT_SOURCE;NDEBUG;LWS_LIBRARY_VERSION=;LWS_BUILD_HASH=;LWS_NO_EXTENSIONS;LWS_NO_CLIENT;LWS_NO_WSAPOLL;LWS_NO_DAEMONIZE;OS_LINUX;THREADS_POSIX;POLL_NFDS_TYPE=nfds_t;LIBUSB_CALL=;DEFAULT_VISIBILITY=;HAVE_GETTIMEOFDAY;HAVE_POLL_H;HAVE_ASM_TYPES_H;HAVE_SYS_SOCKET_H;HAVE_LINUX_NETLINK_H;HAVE_LINUX_FILTER_H</PreprocessorDefinitions> + <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </WarningLevel> + <CAdditionalWarning Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">no-strict-aliasing</CAdditionalWarning> + <CppAdditionalWarning Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </CppAdditionalWarning> + <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </WarningLevel> + <CAdditionalWarning Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">no-strict-aliasing</CAdditionalWarning> + <CppAdditionalWarning Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </CppAdditionalWarning> + <RuntimeTypeInfo Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </RuntimeTypeInfo> + <CppLanguageStandard Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </CppLanguageStandard> + <RuntimeTypeInfo Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </RuntimeTypeInfo> + <CppLanguageStandard Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </CppLanguageStandard> + <ThreadSafeStatics Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </ThreadSafeStatics> + <ExceptionHandling Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </ExceptionHandling> + <ThreadSafeStatics Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </ThreadSafeStatics> + <ExceptionHandling Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </ExceptionHandling> + <OmitFramePointers Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </OmitFramePointers> + <OmitFramePointers Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </OmitFramePointers> + <CompileAs Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">CompileAsC</CompileAs> + <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">CompileAsC</CompileAs> + <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">-MMD</AdditionalOptions> + <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">-MMD</AdditionalOptions> + </ClCompile> + <ClCompile Include="..\..\libwebsockets\lib\client-handshake.c"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</ExcludedFromBuild> + </ClCompile> + <ClCompile Include="..\..\libwebsockets\lib\client-parser.c"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</ExcludedFromBuild> + </ClCompile> + <ClCompile Include="..\..\libwebsockets\lib\client.c"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</ExcludedFromBuild> + </ClCompile> + <ClCompile Include="..\..\libwebsockets\lib\daemonize.c"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</ExcludedFromBuild> + </ClCompile> + <ClCompile Include="..\..\libwebsockets\lib\extension-deflate-frame.c"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</ExcludedFromBuild> + </ClCompile> + <ClCompile Include="..\..\libwebsockets\lib\extension-deflate-stream.c"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</ExcludedFromBuild> + </ClCompile> + <ClCompile Include="..\..\libwebsockets\lib\extension.c"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</ExcludedFromBuild> + </ClCompile> + <ClCompile Include="..\..\libwebsockets\lib\getifaddrs.c"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</ExcludedFromBuild> + </ClCompile> + <ClCompile Include="..\..\libwebsockets\lib\handshake.c"> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">_DEFAULT_SOURCE;NDEBUG;LWS_LIBRARY_VERSION=;LWS_BUILD_HASH=;LWS_NO_EXTENSIONS;LWS_NO_CLIENT;LWS_NO_WSAPOLL;LWS_NO_DAEMONIZE;OS_LINUX;THREADS_POSIX;POLL_NFDS_TYPE=nfds_t;LIBUSB_CALL=;DEFAULT_VISIBILITY=;HAVE_GETTIMEOFDAY;HAVE_POLL_H;HAVE_ASM_TYPES_H;HAVE_SYS_SOCKET_H;HAVE_LINUX_NETLINK_H;HAVE_LINUX_FILTER_H</PreprocessorDefinitions> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">_DEFAULT_SOURCE;NDEBUG;LWS_LIBRARY_VERSION=;LWS_BUILD_HASH=;LWS_NO_EXTENSIONS;LWS_NO_CLIENT;LWS_NO_WSAPOLL;LWS_NO_DAEMONIZE;OS_LINUX;THREADS_POSIX;POLL_NFDS_TYPE=nfds_t;LIBUSB_CALL=;DEFAULT_VISIBILITY=;HAVE_GETTIMEOFDAY;HAVE_POLL_H;HAVE_ASM_TYPES_H;HAVE_SYS_SOCKET_H;HAVE_LINUX_NETLINK_H;HAVE_LINUX_FILTER_H</PreprocessorDefinitions> + <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </WarningLevel> + <CAdditionalWarning Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">no-strict-aliasing</CAdditionalWarning> + <CppAdditionalWarning Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </CppAdditionalWarning> + <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </WarningLevel> + <CAdditionalWarning Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">no-strict-aliasing</CAdditionalWarning> + <CppAdditionalWarning Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </CppAdditionalWarning> + <RuntimeTypeInfo Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </RuntimeTypeInfo> + <CppLanguageStandard Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </CppLanguageStandard> + <RuntimeTypeInfo Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </RuntimeTypeInfo> + <CppLanguageStandard Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </CppLanguageStandard> + <ThreadSafeStatics Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </ThreadSafeStatics> + <ExceptionHandling Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </ExceptionHandling> + <ThreadSafeStatics Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </ThreadSafeStatics> + <ExceptionHandling Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </ExceptionHandling> + <OmitFramePointers Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </OmitFramePointers> + <OmitFramePointers Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </OmitFramePointers> + <CompileAs Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">CompileAsC</CompileAs> + <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">CompileAsC</CompileAs> + <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">-MMD</AdditionalOptions> + <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">-MMD</AdditionalOptions> + </ClCompile> + <ClCompile Include="..\..\libwebsockets\lib\libwebsockets.c"> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">_DEFAULT_SOURCE;NDEBUG;LWS_LIBRARY_VERSION=;LWS_BUILD_HASH=;LWS_NO_EXTENSIONS;LWS_NO_CLIENT;LWS_NO_WSAPOLL;LWS_NO_DAEMONIZE;OS_LINUX;THREADS_POSIX;POLL_NFDS_TYPE=nfds_t;LIBUSB_CALL=;DEFAULT_VISIBILITY=;HAVE_GETTIMEOFDAY;HAVE_POLL_H;HAVE_ASM_TYPES_H;HAVE_SYS_SOCKET_H;HAVE_LINUX_NETLINK_H;HAVE_LINUX_FILTER_H</PreprocessorDefinitions> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">_DEFAULT_SOURCE;NDEBUG;LWS_LIBRARY_VERSION=;LWS_BUILD_HASH=;LWS_NO_EXTENSIONS;LWS_NO_CLIENT;LWS_NO_WSAPOLL;LWS_NO_DAEMONIZE;OS_LINUX;THREADS_POSIX;POLL_NFDS_TYPE=nfds_t;LIBUSB_CALL=;DEFAULT_VISIBILITY=;HAVE_GETTIMEOFDAY;HAVE_POLL_H;HAVE_ASM_TYPES_H;HAVE_SYS_SOCKET_H;HAVE_LINUX_NETLINK_H;HAVE_LINUX_FILTER_H</PreprocessorDefinitions> + <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </WarningLevel> + <CAdditionalWarning Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">no-strict-aliasing</CAdditionalWarning> + <CppAdditionalWarning Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </CppAdditionalWarning> + <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </WarningLevel> + <CAdditionalWarning Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">no-strict-aliasing</CAdditionalWarning> + <CppAdditionalWarning Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </CppAdditionalWarning> + <RuntimeTypeInfo Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </RuntimeTypeInfo> + <CppLanguageStandard Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </CppLanguageStandard> + <RuntimeTypeInfo Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </RuntimeTypeInfo> + <CppLanguageStandard Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </CppLanguageStandard> + <ThreadSafeStatics Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </ThreadSafeStatics> + <ExceptionHandling Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </ExceptionHandling> + <ThreadSafeStatics Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </ThreadSafeStatics> + <ExceptionHandling Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </ExceptionHandling> + <OmitFramePointers Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </OmitFramePointers> + <OmitFramePointers Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </OmitFramePointers> + <CompileAs Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">CompileAsC</CompileAs> + <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">CompileAsC</CompileAs> + <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">-MMD</AdditionalOptions> + <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">-MMD</AdditionalOptions> + </ClCompile> + <ClCompile Include="..\..\libwebsockets\lib\minilex.c"> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</ExcludedFromBuild> + <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</ExcludedFromBuild> + </ClCompile> + <ClCompile Include="..\..\libwebsockets\lib\output.c"> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">_DEFAULT_SOURCE;NDEBUG;LWS_LIBRARY_VERSION=;LWS_BUILD_HASH=;LWS_NO_EXTENSIONS;LWS_NO_CLIENT;LWS_NO_WSAPOLL;LWS_NO_DAEMONIZE;OS_LINUX;THREADS_POSIX;POLL_NFDS_TYPE=nfds_t;LIBUSB_CALL=;DEFAULT_VISIBILITY=;HAVE_GETTIMEOFDAY;HAVE_POLL_H;HAVE_ASM_TYPES_H;HAVE_SYS_SOCKET_H;HAVE_LINUX_NETLINK_H;HAVE_LINUX_FILTER_H</PreprocessorDefinitions> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">_DEFAULT_SOURCE;NDEBUG;LWS_LIBRARY_VERSION=;LWS_BUILD_HASH=;LWS_NO_EXTENSIONS;LWS_NO_CLIENT;LWS_NO_WSAPOLL;LWS_NO_DAEMONIZE;OS_LINUX;THREADS_POSIX;POLL_NFDS_TYPE=nfds_t;LIBUSB_CALL=;DEFAULT_VISIBILITY=;HAVE_GETTIMEOFDAY;HAVE_POLL_H;HAVE_ASM_TYPES_H;HAVE_SYS_SOCKET_H;HAVE_LINUX_NETLINK_H;HAVE_LINUX_FILTER_H</PreprocessorDefinitions> + <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </WarningLevel> + <CAdditionalWarning Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">no-strict-aliasing</CAdditionalWarning> + <CppAdditionalWarning Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </CppAdditionalWarning> + <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </WarningLevel> + <CAdditionalWarning Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">no-strict-aliasing</CAdditionalWarning> + <CppAdditionalWarning Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </CppAdditionalWarning> + <RuntimeTypeInfo Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </RuntimeTypeInfo> + <CppLanguageStandard Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </CppLanguageStandard> + <RuntimeTypeInfo Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </RuntimeTypeInfo> + <CppLanguageStandard Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </CppLanguageStandard> + <ThreadSafeStatics Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </ThreadSafeStatics> + <ExceptionHandling Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </ExceptionHandling> + <ThreadSafeStatics Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </ThreadSafeStatics> + <ExceptionHandling Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </ExceptionHandling> + <OmitFramePointers Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </OmitFramePointers> + <OmitFramePointers Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </OmitFramePointers> + <CompileAs Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">CompileAsC</CompileAs> + <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">CompileAsC</CompileAs> + <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">-MMD</AdditionalOptions> + <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">-MMD</AdditionalOptions> + </ClCompile> + <ClCompile Include="..\..\libwebsockets\lib\parsers.c"> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">_DEFAULT_SOURCE;NDEBUG;LWS_LIBRARY_VERSION=;LWS_BUILD_HASH=;LWS_NO_EXTENSIONS;LWS_NO_CLIENT;LWS_NO_WSAPOLL;LWS_NO_DAEMONIZE;OS_LINUX;THREADS_POSIX;POLL_NFDS_TYPE=nfds_t;LIBUSB_CALL=;DEFAULT_VISIBILITY=;HAVE_GETTIMEOFDAY;HAVE_POLL_H;HAVE_ASM_TYPES_H;HAVE_SYS_SOCKET_H;HAVE_LINUX_NETLINK_H;HAVE_LINUX_FILTER_H</PreprocessorDefinitions> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">_DEFAULT_SOURCE;NDEBUG;LWS_LIBRARY_VERSION=;LWS_BUILD_HASH=;LWS_NO_EXTENSIONS;LWS_NO_CLIENT;LWS_NO_WSAPOLL;LWS_NO_DAEMONIZE;OS_LINUX;THREADS_POSIX;POLL_NFDS_TYPE=nfds_t;LIBUSB_CALL=;DEFAULT_VISIBILITY=;HAVE_GETTIMEOFDAY;HAVE_POLL_H;HAVE_ASM_TYPES_H;HAVE_SYS_SOCKET_H;HAVE_LINUX_NETLINK_H;HAVE_LINUX_FILTER_H</PreprocessorDefinitions> + <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </WarningLevel> + <CAdditionalWarning Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">no-strict-aliasing</CAdditionalWarning> + <CppAdditionalWarning Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </CppAdditionalWarning> + <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </WarningLevel> + <CAdditionalWarning Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">no-strict-aliasing</CAdditionalWarning> + <CppAdditionalWarning Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </CppAdditionalWarning> + <RuntimeTypeInfo Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </RuntimeTypeInfo> + <CppLanguageStandard Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </CppLanguageStandard> + <RuntimeTypeInfo Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </RuntimeTypeInfo> + <CppLanguageStandard Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </CppLanguageStandard> + <ThreadSafeStatics Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </ThreadSafeStatics> + <ExceptionHandling Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </ExceptionHandling> + <ThreadSafeStatics Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </ThreadSafeStatics> + <ExceptionHandling Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </ExceptionHandling> + <OmitFramePointers Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </OmitFramePointers> + <OmitFramePointers Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </OmitFramePointers> + <CompileAs Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">CompileAsC</CompileAs> + <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">CompileAsC</CompileAs> + <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">-MMD</AdditionalOptions> + <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">-MMD</AdditionalOptions> + </ClCompile> + <ClCompile Include="..\..\libwebsockets\lib\server-handshake.c"> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">_DEFAULT_SOURCE;NDEBUG;LWS_LIBRARY_VERSION=;LWS_BUILD_HASH=;LWS_NO_EXTENSIONS;LWS_NO_CLIENT;LWS_NO_WSAPOLL;LWS_NO_DAEMONIZE;OS_LINUX;THREADS_POSIX;POLL_NFDS_TYPE=nfds_t;LIBUSB_CALL=;DEFAULT_VISIBILITY=;HAVE_GETTIMEOFDAY;HAVE_POLL_H;HAVE_ASM_TYPES_H;HAVE_SYS_SOCKET_H;HAVE_LINUX_NETLINK_H;HAVE_LINUX_FILTER_H</PreprocessorDefinitions> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">_DEFAULT_SOURCE;NDEBUG;LWS_LIBRARY_VERSION=;LWS_BUILD_HASH=;LWS_NO_EXTENSIONS;LWS_NO_CLIENT;LWS_NO_WSAPOLL;LWS_NO_DAEMONIZE;OS_LINUX;THREADS_POSIX;POLL_NFDS_TYPE=nfds_t;LIBUSB_CALL=;DEFAULT_VISIBILITY=;HAVE_GETTIMEOFDAY;HAVE_POLL_H;HAVE_ASM_TYPES_H;HAVE_SYS_SOCKET_H;HAVE_LINUX_NETLINK_H;HAVE_LINUX_FILTER_H</PreprocessorDefinitions> + <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </WarningLevel> + <CAdditionalWarning Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">no-strict-aliasing</CAdditionalWarning> + <CppAdditionalWarning Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </CppAdditionalWarning> + <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </WarningLevel> + <CAdditionalWarning Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">no-strict-aliasing</CAdditionalWarning> + <CppAdditionalWarning Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </CppAdditionalWarning> + <RuntimeTypeInfo Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </RuntimeTypeInfo> + <CppLanguageStandard Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </CppLanguageStandard> + <RuntimeTypeInfo Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </RuntimeTypeInfo> + <CppLanguageStandard Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </CppLanguageStandard> + <ThreadSafeStatics Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </ThreadSafeStatics> + <ExceptionHandling Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </ExceptionHandling> + <ThreadSafeStatics Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </ThreadSafeStatics> + <ExceptionHandling Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </ExceptionHandling> + <OmitFramePointers Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </OmitFramePointers> + <OmitFramePointers Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </OmitFramePointers> + <CompileAs Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">CompileAsC</CompileAs> + <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">CompileAsC</CompileAs> + <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">-MMD</AdditionalOptions> + <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">-MMD</AdditionalOptions> + </ClCompile> + <ClCompile Include="..\..\libwebsockets\lib\server.c"> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">_DEFAULT_SOURCE;NDEBUG;LWS_LIBRARY_VERSION=;LWS_BUILD_HASH=;LWS_NO_EXTENSIONS;LWS_NO_CLIENT;LWS_NO_WSAPOLL;LWS_NO_DAEMONIZE;OS_LINUX;THREADS_POSIX;POLL_NFDS_TYPE=nfds_t;LIBUSB_CALL=;DEFAULT_VISIBILITY=;HAVE_GETTIMEOFDAY;HAVE_POLL_H;HAVE_ASM_TYPES_H;HAVE_SYS_SOCKET_H;HAVE_LINUX_NETLINK_H;HAVE_LINUX_FILTER_H</PreprocessorDefinitions> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">_DEFAULT_SOURCE;NDEBUG;LWS_LIBRARY_VERSION=;LWS_BUILD_HASH=;LWS_NO_EXTENSIONS;LWS_NO_CLIENT;LWS_NO_WSAPOLL;LWS_NO_DAEMONIZE;OS_LINUX;THREADS_POSIX;POLL_NFDS_TYPE=nfds_t;LIBUSB_CALL=;DEFAULT_VISIBILITY=;HAVE_GETTIMEOFDAY;HAVE_POLL_H;HAVE_ASM_TYPES_H;HAVE_SYS_SOCKET_H;HAVE_LINUX_NETLINK_H;HAVE_LINUX_FILTER_H</PreprocessorDefinitions> + <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </WarningLevel> + <CAdditionalWarning Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">no-strict-aliasing</CAdditionalWarning> + <CppAdditionalWarning Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </CppAdditionalWarning> + <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </WarningLevel> + <CAdditionalWarning Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">no-strict-aliasing</CAdditionalWarning> + <CppAdditionalWarning Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </CppAdditionalWarning> + <RuntimeTypeInfo Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </RuntimeTypeInfo> + <CppLanguageStandard Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </CppLanguageStandard> + <RuntimeTypeInfo Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </RuntimeTypeInfo> + <CppLanguageStandard Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </CppLanguageStandard> + <ThreadSafeStatics Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </ThreadSafeStatics> + <ExceptionHandling Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </ExceptionHandling> + <ThreadSafeStatics Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </ThreadSafeStatics> + <ExceptionHandling Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </ExceptionHandling> + <OmitFramePointers Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </OmitFramePointers> + <OmitFramePointers Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </OmitFramePointers> + <CompileAs Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">CompileAsC</CompileAs> + <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">CompileAsC</CompileAs> + <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">-MMD</AdditionalOptions> + <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">-MMD</AdditionalOptions> + </ClCompile> + <ClCompile Include="..\..\libwebsockets\lib\sha-1.c"> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">_DEFAULT_SOURCE;NDEBUG;LWS_LIBRARY_VERSION=;LWS_BUILD_HASH=;LWS_NO_EXTENSIONS;LWS_NO_CLIENT;LWS_NO_WSAPOLL;LWS_NO_DAEMONIZE;OS_LINUX;THREADS_POSIX;POLL_NFDS_TYPE=nfds_t;LIBUSB_CALL=;DEFAULT_VISIBILITY=;HAVE_GETTIMEOFDAY;HAVE_POLL_H;HAVE_ASM_TYPES_H;HAVE_SYS_SOCKET_H;HAVE_LINUX_NETLINK_H;HAVE_LINUX_FILTER_H</PreprocessorDefinitions> + <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">_DEFAULT_SOURCE;NDEBUG;LWS_LIBRARY_VERSION=;LWS_BUILD_HASH=;LWS_NO_EXTENSIONS;LWS_NO_CLIENT;LWS_NO_WSAPOLL;LWS_NO_DAEMONIZE;OS_LINUX;THREADS_POSIX;POLL_NFDS_TYPE=nfds_t;LIBUSB_CALL=;DEFAULT_VISIBILITY=;HAVE_GETTIMEOFDAY;HAVE_POLL_H;HAVE_ASM_TYPES_H;HAVE_SYS_SOCKET_H;HAVE_LINUX_NETLINK_H;HAVE_LINUX_FILTER_H</PreprocessorDefinitions> + <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </WarningLevel> + <CAdditionalWarning Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">no-strict-aliasing</CAdditionalWarning> + <CppAdditionalWarning Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </CppAdditionalWarning> + <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </WarningLevel> + <CAdditionalWarning Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">no-strict-aliasing</CAdditionalWarning> + <CppAdditionalWarning Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </CppAdditionalWarning> + <RuntimeTypeInfo Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </RuntimeTypeInfo> + <CppLanguageStandard Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </CppLanguageStandard> + <RuntimeTypeInfo Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </RuntimeTypeInfo> + <CppLanguageStandard Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </CppLanguageStandard> + <ThreadSafeStatics Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </ThreadSafeStatics> + <ExceptionHandling Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </ExceptionHandling> + <ThreadSafeStatics Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </ThreadSafeStatics> + <ExceptionHandling Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </ExceptionHandling> + <OmitFramePointers Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + </OmitFramePointers> + <OmitFramePointers Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> + </OmitFramePointers> + <CompileAs Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">CompileAsC</CompileAs> + <CompileAs Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">CompileAsC</CompileAs> + <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">-MMD</AdditionalOptions> + <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">-MMD</AdditionalOptions> + </ClCompile> + <ClCompile Include="..\..\src\apa102spidevice.cpp" /> + <ClCompile Include="..\..\src\enttecdmxdevice.cpp" /> + <ClCompile Include="..\..\src\fcdevice.cpp" /> + <ClCompile Include="..\..\src\fcserver.cpp" /> + <ClCompile Include="..\..\src\main.cpp" /> + <ClCompile Include="..\..\src\spidevice.cpp" /> + <ClCompile Include="..\..\src\tcpnetserver.cpp" /> + <ClCompile Include="..\..\src\tinythread.cpp" /> + <ClCompile Include="..\..\src\usbdevice.cpp" /> + <ClCompile Include="..\..\src\version.cpp" /> + </ItemGroup> + <ItemGroup> + <Image Include="..\..\http\media\favicon.ico"> + <RemoteCopyFile Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</RemoteCopyFile> + <RemoteCopyFile Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</RemoteCopyFile> + </Image> + <Image Include="..\..\http\media\favicon.png"> + <RemoteCopyFile Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'">true</RemoteCopyFile> + <RemoteCopyFile Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">true</RemoteCopyFile> + </Image> + </ItemGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM'"> + <ClCompile> + <AdditionalIncludeDirectories> + </AdditionalIncludeDirectories> + <PreprocessorDefinitions>FCSERVER_VERSION=fcserver-1.04-101-g686ab1f;FCSERVER_HAS_WIRINGPI;NDEBUG;LWS_LIBRARY_VERSION=;LWS_BUILD_HASH=;LWS_NO_EXTENSIONS;LWS_NO_CLIENT;LWS_NO_WSAPOLL;LWS_NO_DAEMONIZE;OS_LINUX;THREADS_POSIX;POLL_NFDS_TYPE=nfds_t;LIBUSB_CALL=;DEFAULT_VISIBILITY=;HAVE_GETTIMEOFDAY;HAVE_POLL_H;HAVE_ASM_TYPES_H;HAVE_SYS_SOCKET_H;HAVE_LINUX_NETLINK_H;HAVE_LINUX_FILTER_H</PreprocessorDefinitions> + <CompileAs>CompileAsCpp</CompileAs> + <RuntimeTypeInfo>false</RuntimeTypeInfo> + <CppLanguageStandard>gnu++11</CppLanguageStandard> + <ExceptionHandling>Disabled</ExceptionHandling> + <CAdditionalWarning>no-strict-aliasing</CAdditionalWarning> + <CppAdditionalWarning>no-strict-aliasing</CppAdditionalWarning> + <Verbose>true</Verbose> + <AdditionalOptions /> + </ClCompile> + <Link> + <AdditionalDependencies>-lstdc++;-lm;-lpthread;-lrt;-lwiringPi</AdditionalDependencies> + <AdditionalOptions>$(RemoteRootDir)/$(SolutionName)httpdocs.o</AdditionalOptions> + <Relocation> + </Relocation> + <FunctionBinding>false</FunctionBinding> + <NoExecStackRequired>false</NoExecStackRequired> + <UnresolvedSymbolReferences> + </UnresolvedSymbolReferences> + </Link> + <RemotePreLinkEvent> + <Command>(cd server/http; python manifest.py) > $(RemoteRootDir)/$(SolutionName)httpdocs.cpp && g++ -DFCSERVER_VERSION=fcserver-1.04-101-g686ab1f -std=gnu++0x -felide-constructors -fno-exceptions -fno-rtti -Wno-strict-aliasing -Os -DNDEBUG -DLWS_LIBRARY_VERSION= -DLWS_BUILD_HASH= -DLWS_NO_EXTENSIONS -DLWS_NO_CLIENT -DLWS_NO_WSAPOLL -DLWS_NO_DAEMONIZE -DOS_LINUX -DTHREADS_POSIX -DPOLL_NFDS_TYPE=nfds_t -DLIBUSB_CALL= -DDEFAULT_VISIBILITY= -DHAVE_GETTIMEOFDAY -DHAVE_POLL_H -DHAVE_ASM_TYPES_H -DHAVE_SYS_SOCKET_H -DHAVE_LINUX_NETLINK_H -DHAVE_LINUX_FILTER_H -MMD -Iserver/src -Iserver -lserver/rapidjson -Iserver/libwebsockets/lib -Iserver/libusbx/libusb -c -o $(RemoteRootDir)/$(SolutionName)httpdocs.o $(RemoteRootDir)/$(SolutionName)httpdocs.cpp</Command> + <Message>Generating and compiling httpdocs.cpp</Message> + </RemotePreLinkEvent> + </ItemDefinitionGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets" /> +</Project> \ No newline at end of file diff --git a/server/vsbuild/vs2017_linux_raspberrypi/server_vs2017_linux_raspberrypi.vcxproj.filters b/server/vsbuild/vs2017_linux_raspberrypi/server_vs2017_linux_raspberrypi.vcxproj.filters new file mode 100644 index 0000000000000000000000000000000000000000..cd77cccb126202746f12f6e2c5ab9345b40c4c37 --- /dev/null +++ b/server/vsbuild/vs2017_linux_raspberrypi/server_vs2017_linux_raspberrypi.vcxproj.filters @@ -0,0 +1,366 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup> + <Filter Include="src"> + <UniqueIdentifier>{f4d936f6-fee9-440f-82b8-e153a185f8cd}</UniqueIdentifier> + </Filter> + <Filter Include="libwebsockets"> + <UniqueIdentifier>{ae960df6-1f86-4189-bfb7-ab9c5b63e838}</UniqueIdentifier> + </Filter> + <Filter Include="libusbx"> + <UniqueIdentifier>{f551f232-76e0-4bac-ac00-e1063e88956f}</UniqueIdentifier> + </Filter> + <Filter Include="libusbx\os"> + <UniqueIdentifier>{ba4c6d83-1339-4859-808f-c634164bbd0b}</UniqueIdentifier> + </Filter> + <Filter Include="libusbx\os\linux"> + <UniqueIdentifier>{1389f851-a9c4-4c1d-9ea5-a15a41a6b087}</UniqueIdentifier> + </Filter> + <Filter Include="libusbx\os\posix"> + <UniqueIdentifier>{d0e0ba4f-88bc-4795-8347-ea71ff5f7be3}</UniqueIdentifier> + </Filter> + <Filter Include="libusbx\os\darwin"> + <UniqueIdentifier>{149930c5-ce5c-4b5b-9f66-af4c06dd0377}</UniqueIdentifier> + </Filter> + <Filter Include="libusbx\os\windows"> + <UniqueIdentifier>{f8cf92fb-c972-44fc-90e6-77c27b5210e5}</UniqueIdentifier> + </Filter> + <Filter Include="libusbx\os\wince"> + <UniqueIdentifier>{1fa5204b-e426-4fc0-9e05-b76980a4ed99}</UniqueIdentifier> + </Filter> + <Filter Include="libusbx\os\netbsd"> + <UniqueIdentifier>{715c461b-70d8-4ce3-9daf-92a0270cd52f}</UniqueIdentifier> + </Filter> + <Filter Include="libusbx\os\openbsd"> + <UniqueIdentifier>{1a0a5db0-4d8d-42ef-831b-72d4aeef8e37}</UniqueIdentifier> + </Filter> + <Filter Include="rapidjson"> + <UniqueIdentifier>{bb496c80-4dd8-4f6c-acd9-52276c818ed4}</UniqueIdentifier> + </Filter> + <Filter Include="rapidjson\internal"> + <UniqueIdentifier>{c217c729-620d-46ca-8666-9ee9308fcdb1}</UniqueIdentifier> + </Filter> + <Filter Include="http"> + <UniqueIdentifier>{961499f5-4701-4bda-bf0b-4874bbc31ac3}</UniqueIdentifier> + </Filter> + <Filter Include="http\css"> + <UniqueIdentifier>{e5fd3758-4bfe-43f7-81dd-db9cdc5ef638}</UniqueIdentifier> + </Filter> + <Filter Include="http\dist"> + <UniqueIdentifier>{9cf9f43b-cd0d-4523-8919-d8c99ca82e2d}</UniqueIdentifier> + </Filter> + <Filter Include="http\dist\css"> + <UniqueIdentifier>{0e85c7c8-4fd6-4415-a299-6960d6e23c47}</UniqueIdentifier> + </Filter> + <Filter Include="http\dist\js"> + <UniqueIdentifier>{7206ac51-1b73-4b2a-8cd0-57e6726ccc22}</UniqueIdentifier> + </Filter> + <Filter Include="http\js"> + <UniqueIdentifier>{197fff70-eda8-4431-b144-5d19923206dd}</UniqueIdentifier> + </Filter> + <Filter Include="http\media"> + <UniqueIdentifier>{36b7d449-e946-459d-866e-2344e6ba6945}</UniqueIdentifier> + </Filter> + </ItemGroup> + <ItemGroup> + <ClInclude Include="..\..\src\config.h"> + <Filter>src</Filter> + </ClInclude> + <ClInclude Include="..\..\src\enttecdmxdevice.h"> + <Filter>src</Filter> + </ClInclude> + <ClInclude Include="..\..\src\fast_mutex.h"> + <Filter>src</Filter> + </ClInclude> + <ClInclude Include="..\..\src\fcdevice.h"> + <Filter>src</Filter> + </ClInclude> + <ClInclude Include="..\..\src\fcserver.h"> + <Filter>src</Filter> + </ClInclude> + <ClInclude Include="..\..\src\opc.h"> + <Filter>src</Filter> + </ClInclude> + <ClInclude Include="..\..\src\tcpnetserver.h"> + <Filter>src</Filter> + </ClInclude> + <ClInclude Include="..\..\src\tinythread.h"> + <Filter>src</Filter> + </ClInclude> + <ClInclude Include="..\..\src\usbdevice.h"> + <Filter>src</Filter> + </ClInclude> + <ClInclude Include="..\..\src\version.h"> + <Filter>src</Filter> + </ClInclude> + <ClInclude Include="..\..\libwebsockets\lib\extension-deflate-frame.h"> + <Filter>libwebsockets</Filter> + </ClInclude> + <ClInclude Include="..\..\libwebsockets\lib\extension-deflate-stream.h"> + <Filter>libwebsockets</Filter> + </ClInclude> + <ClInclude Include="..\..\libwebsockets\lib\getifaddrs.h"> + <Filter>libwebsockets</Filter> + </ClInclude> + <ClInclude Include="..\..\libwebsockets\lib\libwebsockets.h"> + <Filter>libwebsockets</Filter> + </ClInclude> + <ClInclude Include="..\..\libwebsockets\lib\private-libwebsockets.h"> + <Filter>libwebsockets</Filter> + </ClInclude> + <ClInclude Include="..\..\libusbx\libusb\version_nano.h"> + <Filter>libusbx</Filter> + </ClInclude> + <ClInclude Include="..\..\libusbx\libusb\os\linux_usbfs.h"> + <Filter>libusbx\os\linux</Filter> + </ClInclude> + <ClInclude Include="..\..\libusbx\libusb\os\threads_posix.h"> + <Filter>libusbx\os\posix</Filter> + </ClInclude> + <ClInclude Include="..\..\libusbx\libusb\os\poll_posix.h"> + <Filter>libusbx\os\posix</Filter> + </ClInclude> + <ClInclude Include="..\..\libusbx\libusb\os\darwin_usb.h"> + <Filter>libusbx\os\darwin</Filter> + </ClInclude> + <ClInclude Include="..\..\libusbx\libusb\os\poll_windows.h"> + <Filter>libusbx\os\windows</Filter> + </ClInclude> + <ClInclude Include="..\..\libusbx\libusb\os\threads_windows.h"> + <Filter>libusbx\os\windows</Filter> + </ClInclude> + <ClInclude Include="..\..\libusbx\libusb\os\windows_common.h"> + <Filter>libusbx\os\windows</Filter> + </ClInclude> + <ClInclude Include="..\..\libusbx\libusb\os\windows_usb.h"> + <Filter>libusbx\os\windows</Filter> + </ClInclude> + <ClInclude Include="..\..\libusbx\libusb\os\wince_usb.h"> + <Filter>libusbx\os\wince</Filter> + </ClInclude> + <ClInclude Include="..\..\libusbx\libusb\hotplug.h"> + <Filter>libusbx</Filter> + </ClInclude> + <ClInclude Include="..\..\libusbx\libusb\libusb.h"> + <Filter>libusbx</Filter> + </ClInclude> + <ClInclude Include="..\..\libusbx\libusb\libusbi.h"> + <Filter>libusbx</Filter> + </ClInclude> + <ClInclude Include="..\..\libusbx\libusb\version.h"> + <Filter>libusbx</Filter> + </ClInclude> + <ClInclude Include="..\..\rapidjson\document.h"> + <Filter>rapidjson</Filter> + </ClInclude> + <ClInclude Include="..\..\rapidjson\filestream.h"> + <Filter>rapidjson</Filter> + </ClInclude> + <ClInclude Include="..\..\rapidjson\prettywriter.h"> + <Filter>rapidjson</Filter> + </ClInclude> + <ClInclude Include="..\..\rapidjson\rapidjson.h"> + <Filter>rapidjson</Filter> + </ClInclude> + <ClInclude Include="..\..\rapidjson\reader.h"> + <Filter>rapidjson</Filter> + </ClInclude> + <ClInclude Include="..\..\rapidjson\stringbuffer.h"> + <Filter>rapidjson</Filter> + </ClInclude> + <ClInclude Include="..\..\rapidjson\writer.h"> + <Filter>rapidjson</Filter> + </ClInclude> + <ClInclude Include="..\..\rapidjson\internal\pow10.h"> + <Filter>rapidjson\internal</Filter> + </ClInclude> + <ClInclude Include="..\..\rapidjson\internal\stack.h"> + <Filter>rapidjson\internal</Filter> + </ClInclude> + <ClInclude Include="..\..\rapidjson\internal\strfunc.h"> + <Filter>rapidjson\internal</Filter> + </ClInclude> + <ClInclude Include="..\..\src\spidevice.h"> + <Filter>src</Filter> + </ClInclude> + <ClInclude Include="..\..\src\apa102spidevice.h"> + <Filter>src</Filter> + </ClInclude> + </ItemGroup> + <ItemGroup> + <None Include="..\..\..\.gitignore" /> + <None Include="..\..\..\README.md" /> + <None Include="..\..\libwebsockets\lib\.gitignore"> + <Filter>libwebsockets</Filter> + </None> + <None Include="..\..\http\404.html"> + <Filter>http</Filter> + </None> + <None Include="..\..\http\index.html"> + <Filter>http</Filter> + </None> + <None Include="..\..\http\dist\css\bootstrap.min.css"> + <Filter>http\dist\css</Filter> + </None> + <None Include="..\..\http\css\narrow.css"> + <Filter>http\css</Filter> + </None> + <None Include="..\..\http\dist\js\bootstrap.min.js"> + <Filter>http\dist\js</Filter> + </None> + <None Include="..\..\http\dist\js\jquery-1.10.2.min.js"> + <Filter>http\dist\js</Filter> + </None> + <None Include="..\..\http\js\home.js"> + <Filter>http\js</Filter> + </None> + <None Include="..\..\http\manifest.py"> + <Filter>http</Filter> + </None> + </ItemGroup> + <ItemGroup> + <ClCompile Include="..\..\src\enttecdmxdevice.cpp"> + <Filter>src</Filter> + </ClCompile> + <ClCompile Include="..\..\src\fcdevice.cpp"> + <Filter>src</Filter> + </ClCompile> + <ClCompile Include="..\..\src\fcserver.cpp"> + <Filter>src</Filter> + </ClCompile> + <ClCompile Include="..\..\src\main.cpp"> + <Filter>src</Filter> + </ClCompile> + <ClCompile Include="..\..\src\tcpnetserver.cpp"> + <Filter>src</Filter> + </ClCompile> + <ClCompile Include="..\..\src\tinythread.cpp"> + <Filter>src</Filter> + </ClCompile> + <ClCompile Include="..\..\src\usbdevice.cpp"> + <Filter>src</Filter> + </ClCompile> + <ClCompile Include="..\..\src\version.cpp"> + <Filter>src</Filter> + </ClCompile> + <ClCompile Include="..\..\libwebsockets\lib\base64-decode.c"> + <Filter>libwebsockets</Filter> + </ClCompile> + <ClCompile Include="..\..\libwebsockets\lib\client.c"> + <Filter>libwebsockets</Filter> + </ClCompile> + <ClCompile Include="..\..\libwebsockets\lib\client-handshake.c"> + <Filter>libwebsockets</Filter> + </ClCompile> + <ClCompile Include="..\..\libwebsockets\lib\client-parser.c"> + <Filter>libwebsockets</Filter> + </ClCompile> + <ClCompile Include="..\..\libwebsockets\lib\daemonize.c"> + <Filter>libwebsockets</Filter> + </ClCompile> + <ClCompile Include="..\..\libwebsockets\lib\extension.c"> + <Filter>libwebsockets</Filter> + </ClCompile> + <ClCompile Include="..\..\libwebsockets\lib\extension-deflate-frame.c"> + <Filter>libwebsockets</Filter> + </ClCompile> + <ClCompile Include="..\..\libwebsockets\lib\extension-deflate-stream.c"> + <Filter>libwebsockets</Filter> + </ClCompile> + <ClCompile Include="..\..\libwebsockets\lib\getifaddrs.c"> + <Filter>libwebsockets</Filter> + </ClCompile> + <ClCompile Include="..\..\libwebsockets\lib\handshake.c"> + <Filter>libwebsockets</Filter> + </ClCompile> + <ClCompile Include="..\..\libwebsockets\lib\libwebsockets.c"> + <Filter>libwebsockets</Filter> + </ClCompile> + <ClCompile Include="..\..\libwebsockets\lib\minilex.c"> + <Filter>libwebsockets</Filter> + </ClCompile> + <ClCompile Include="..\..\libwebsockets\lib\output.c"> + <Filter>libwebsockets</Filter> + </ClCompile> + <ClCompile Include="..\..\libwebsockets\lib\parsers.c"> + <Filter>libwebsockets</Filter> + </ClCompile> + <ClCompile Include="..\..\libwebsockets\lib\server.c"> + <Filter>libwebsockets</Filter> + </ClCompile> + <ClCompile Include="..\..\libwebsockets\lib\server-handshake.c"> + <Filter>libwebsockets</Filter> + </ClCompile> + <ClCompile Include="..\..\libwebsockets\lib\sha-1.c"> + <Filter>libwebsockets</Filter> + </ClCompile> + <ClCompile Include="..\..\libusbx\libusb\os\linux_netlink.c"> + <Filter>libusbx\os\linux</Filter> + </ClCompile> + <ClCompile Include="..\..\libusbx\libusb\os\linux_udev.c"> + <Filter>libusbx\os\linux</Filter> + </ClCompile> + <ClCompile Include="..\..\libusbx\libusb\os\linux_usbfs.c"> + <Filter>libusbx\os\linux</Filter> + </ClCompile> + <ClCompile Include="..\..\libusbx\libusb\os\poll_posix.c"> + <Filter>libusbx\os\posix</Filter> + </ClCompile> + <ClCompile Include="..\..\libusbx\libusb\os\threads_posix.c"> + <Filter>libusbx\os\posix</Filter> + </ClCompile> + <ClCompile Include="..\..\libusbx\libusb\os\darwin_usb.c"> + <Filter>libusbx\os\darwin</Filter> + </ClCompile> + <ClCompile Include="..\..\libusbx\libusb\os\poll_windows.c"> + <Filter>libusbx\os\windows</Filter> + </ClCompile> + <ClCompile Include="..\..\libusbx\libusb\os\threads_windows.c"> + <Filter>libusbx\os\windows</Filter> + </ClCompile> + <ClCompile Include="..\..\libusbx\libusb\os\windows_usb.c"> + <Filter>libusbx\os\windows</Filter> + </ClCompile> + <ClCompile Include="..\..\libusbx\libusb\os\wince_usb.c"> + <Filter>libusbx\os\wince</Filter> + </ClCompile> + <ClCompile Include="..\..\libusbx\libusb\os\netbsd_usb.c"> + <Filter>libusbx\os\netbsd</Filter> + </ClCompile> + <ClCompile Include="..\..\libusbx\libusb\os\openbsd_usb.c"> + <Filter>libusbx\os\openbsd</Filter> + </ClCompile> + <ClCompile Include="..\..\libusbx\libusb\core.c"> + <Filter>libusbx</Filter> + </ClCompile> + <ClCompile Include="..\..\libusbx\libusb\descriptor.c"> + <Filter>libusbx</Filter> + </ClCompile> + <ClCompile Include="..\..\libusbx\libusb\hotplug.c"> + <Filter>libusbx</Filter> + </ClCompile> + <ClCompile Include="..\..\libusbx\libusb\io.c"> + <Filter>libusbx</Filter> + </ClCompile> + <ClCompile Include="..\..\libusbx\libusb\strerror.c"> + <Filter>libusbx</Filter> + </ClCompile> + <ClCompile Include="..\..\libusbx\libusb\sync.c"> + <Filter>libusbx</Filter> + </ClCompile> + <ClCompile Include="..\..\src\spidevice.cpp"> + <Filter>src</Filter> + </ClCompile> + <ClCompile Include="..\..\src\apa102spidevice.cpp"> + <Filter>src</Filter> + </ClCompile> + </ItemGroup> + <ItemGroup> + <Image Include="..\..\http\media\favicon.ico"> + <Filter>http\media</Filter> + </Image> + <Image Include="..\..\http\media\favicon.png"> + <Filter>http\media</Filter> + </Image> + </ItemGroup> +</Project> \ No newline at end of file