diff --git a/clients/switch/framebuffer/framebuffer_grpc_pb.js b/clients/switch/framebuffer/framebuffer_grpc_pb.js deleted file mode 100644 index dbcae04..0000000 --- a/clients/switch/framebuffer/framebuffer_grpc_pb.js +++ /dev/null @@ -1,68 +0,0 @@ -// GENERATED CODE -- DO NOT EDIT! - -'use strict'; -var grpc = require('grpc'); -var framebuffer_pb = require('./framebuffer_pb.js'); - -function serialize_DrawResponse(arg) { - if (!(arg instanceof framebuffer_pb.DrawResponse)) { - throw new Error('Expected argument of type DrawResponse'); - } - return Buffer.from(arg.serializeBinary()); -} - -function deserialize_DrawResponse(buffer_arg) { - return framebuffer_pb.DrawResponse.deserializeBinary(new Uint8Array(buffer_arg)); -} - -function serialize_FrameBuffer(arg) { - if (!(arg instanceof framebuffer_pb.FrameBuffer)) { - throw new Error('Expected argument of type FrameBuffer'); - } - return Buffer.from(arg.serializeBinary()); -} - -function deserialize_FrameBuffer(buffer_arg) { - return framebuffer_pb.FrameBuffer.deserializeBinary(new Uint8Array(buffer_arg)); -} - -function serialize_FrameSequence(arg) { - if (!(arg instanceof framebuffer_pb.FrameSequence)) { - throw new Error('Expected argument of type FrameSequence'); - } - return Buffer.from(arg.serializeBinary()); -} - -function deserialize_FrameSequence(buffer_arg) { - return framebuffer_pb.FrameSequence.deserializeBinary(new Uint8Array(buffer_arg)); -} - - -var DrawerService = exports.DrawerService = { - // DrawFrame draws one frame - drawFrame: { - path: '/Drawer/DrawFrame', - requestStream: false, - responseStream: false, - requestType: framebuffer_pb.FrameBuffer, - responseType: framebuffer_pb.DrawResponse, - requestSerialize: serialize_FrameBuffer, - requestDeserialize: deserialize_FrameBuffer, - responseSerialize: serialize_DrawResponse, - responseDeserialize: deserialize_DrawResponse, - }, - // DrawFrames draws a series of frames - drawFrames: { - path: '/Drawer/DrawFrames', - requestStream: false, - responseStream: false, - requestType: framebuffer_pb.FrameSequence, - responseType: framebuffer_pb.DrawResponse, - requestSerialize: serialize_FrameSequence, - requestDeserialize: deserialize_FrameSequence, - responseSerialize: serialize_DrawResponse, - responseDeserialize: deserialize_DrawResponse, - }, -}; - -exports.DrawerClient = grpc.makeGenericClientConstructor(DrawerService); diff --git a/clients/switch/framebuffer/framebuffer_pb.js b/clients/switch/framebuffer/framebuffer_pb.js deleted file mode 100644 index ceb57fb..0000000 --- a/clients/switch/framebuffer/framebuffer_pb.js +++ /dev/null @@ -1,778 +0,0 @@ -/** - * @fileoverview - * @enhanceable - * @public - */ -// GENERATED CODE -- DO NOT EDIT! - -var jspb = require('google-protobuf'); -var goog = jspb; -var global = Function('return this')(); - -goog.exportSymbol('proto.DrawResponse', null, global); -goog.exportSymbol('proto.FrameBuffer', null, global); -goog.exportSymbol('proto.FrameData', null, global); -goog.exportSymbol('proto.FrameSequence', null, global); -goog.exportSymbol('proto.Layer', null, global); - -/** - * Generated by JsPbCodeGenerator. - * @param {Array=} opt_data Optional initial data array, typically from a - * server response, or constructed directly in Javascript. The array is used - * in place and becomes part of the constructed object. It is not cloned. - * If no data is provided, the constructed object will be empty, but still - * valid. - * @extends {jspb.Message} - * @constructor - */ -proto.FrameData = function(opt_data) { - jspb.Message.initialize(this, opt_data, 0, -1, proto.FrameData.repeatedFields_, null); -}; -goog.inherits(proto.FrameData, jspb.Message); -if (goog.DEBUG && !COMPILED) { - proto.FrameData.displayName = 'proto.FrameData'; -} -/** - * List of repeated fields within this message type. - * @private {!Array} - * @const - */ -proto.FrameData.repeatedFields_ = [1]; - - - -if (jspb.Message.GENERATE_TO_OBJECT) { -/** - * Creates an object representation of this proto suitable for use in Soy templates. - * Field names that are reserved in JavaScript and will be renamed to pb_name. - * To access a reserved field use, foo.pb_, eg, foo.pb_default. - * For the list of reserved names please see: - * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. - * @param {boolean=} opt_includeInstance Whether to include the JSPB instance - * for transitional soy proto support: http://goto/soy-param-migration - * @return {!Object} - */ -proto.FrameData.prototype.toObject = function(opt_includeInstance) { - return proto.FrameData.toObject(opt_includeInstance, this); -}; - - -/** - * Static version of the {@see toObject} method. - * @param {boolean|undefined} includeInstance Whether to include the JSPB - * instance for transitional soy proto support: - * http://goto/soy-param-migration - * @param {!proto.FrameData} msg The msg instance to transform. - * @return {!Object} - */ -proto.FrameData.toObject = function(includeInstance, msg) { - var f, obj = { - dotsList: jspb.Message.getField(msg, 1), - fill: msg.getFill() - }; - - if (includeInstance) { - obj.$jspbMessageInstance = msg; - } - return obj; -}; -} - - -/** - * Deserializes binary data (in protobuf wire format). - * @param {jspb.ByteSource} bytes The bytes to deserialize. - * @return {!proto.FrameData} - */ -proto.FrameData.deserializeBinary = function(bytes) { - var reader = new jspb.BinaryReader(bytes); - var msg = new proto.FrameData; - return proto.FrameData.deserializeBinaryFromReader(msg, reader); -}; - - -/** - * Deserializes binary data (in protobuf wire format) from the - * given reader into the given message object. - * @param {!proto.FrameData} msg The message object to deserialize into. - * @param {!jspb.BinaryReader} reader The BinaryReader to use. - * @return {!proto.FrameData} - */ -proto.FrameData.deserializeBinaryFromReader = function(msg, reader) { - while (reader.nextField()) { - if (reader.isEndGroup()) { - break; - } - var field = reader.getFieldNumber(); - switch (field) { - case 1: - var value = /** @type {!Array.} */ (reader.readPackedFixed32()); - msg.setDotsList(value); - break; - case 2: - var value = /** @type {number} */ (reader.readFixed32()); - msg.setFill(value); - break; - default: - reader.skipField(); - break; - } - } - return msg; -}; - - -/** - * Class method variant: serializes the given message to binary data - * (in protobuf wire format), writing to the given BinaryWriter. - * @param {!proto.FrameData} message - * @param {!jspb.BinaryWriter} writer - */ -proto.FrameData.serializeBinaryToWriter = function(message, writer) { - message.serializeBinaryToWriter(writer); -}; - - -/** - * Serializes the message to binary data (in protobuf wire format). - * @return {!Uint8Array} - */ -proto.FrameData.prototype.serializeBinary = function() { - var writer = new jspb.BinaryWriter(); - this.serializeBinaryToWriter(writer); - return writer.getResultBuffer(); -}; - - -/** - * Serializes the message to binary data (in protobuf wire format), - * writing to the given BinaryWriter. - * @param {!jspb.BinaryWriter} writer - */ -proto.FrameData.prototype.serializeBinaryToWriter = function (writer) { - var f = undefined; - f = this.getDotsList(); - if (f.length > 0) { - writer.writePackedFixed32( - 1, - f - ); - } - f = this.getFill(); - if (f !== 0) { - writer.writeFixed32( - 2, - f - ); - } -}; - - -/** - * Creates a deep clone of this proto. No data is shared with the original. - * @return {!proto.FrameData} The clone. - */ -proto.FrameData.prototype.cloneMessage = function() { - return /** @type {!proto.FrameData} */ (jspb.Message.cloneMessage(this)); -}; - - -/** - * repeated fixed32 dots = 1; - * If you change this array by adding, removing or replacing elements, or if you - * replace the array itself, then you must call the setter to update it. - * @return {!Array.} - */ -proto.FrameData.prototype.getDotsList = function() { - return /** @type {!Array.} */ (jspb.Message.getField(this, 1)); -}; - - -/** @param {Array.} value */ -proto.FrameData.prototype.setDotsList = function(value) { - jspb.Message.setField(this, 1, value || []); -}; - - -proto.FrameData.prototype.clearDotsList = function() { - jspb.Message.setField(this, 1, []); -}; - - -/** - * optional fixed32 fill = 2; - * @return {number} - */ -proto.FrameData.prototype.getFill = function() { - return /** @type {number} */ (jspb.Message.getFieldProto3(this, 2, 0)); -}; - - -/** @param {number} value */ -proto.FrameData.prototype.setFill = function(value) { - jspb.Message.setField(this, 2, value); -}; - - - -/** - * Generated by JsPbCodeGenerator. - * @param {Array=} opt_data Optional initial data array, typically from a - * server response, or constructed directly in Javascript. The array is used - * in place and becomes part of the constructed object. It is not cloned. - * If no data is provided, the constructed object will be empty, but still - * valid. - * @extends {jspb.Message} - * @constructor - */ -proto.FrameBuffer = function(opt_data) { - jspb.Message.initialize(this, opt_data, 0, -1, null, null); -}; -goog.inherits(proto.FrameBuffer, jspb.Message); -if (goog.DEBUG && !COMPILED) { - proto.FrameBuffer.displayName = 'proto.FrameBuffer'; -} - - -if (jspb.Message.GENERATE_TO_OBJECT) { -/** - * Creates an object representation of this proto suitable for use in Soy templates. - * Field names that are reserved in JavaScript and will be renamed to pb_name. - * To access a reserved field use, foo.pb_, eg, foo.pb_default. - * For the list of reserved names please see: - * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. - * @param {boolean=} opt_includeInstance Whether to include the JSPB instance - * for transitional soy proto support: http://goto/soy-param-migration - * @return {!Object} - */ -proto.FrameBuffer.prototype.toObject = function(opt_includeInstance) { - return proto.FrameBuffer.toObject(opt_includeInstance, this); -}; - - -/** - * Static version of the {@see toObject} method. - * @param {boolean|undefined} includeInstance Whether to include the JSPB - * instance for transitional soy proto support: - * http://goto/soy-param-migration - * @param {!proto.FrameBuffer} msg The msg instance to transform. - * @return {!Object} - */ -proto.FrameBuffer.toObject = function(includeInstance, msg) { - var f, obj = { - frame: (f = msg.getFrame()) && proto.FrameData.toObject(includeInstance, f), - timestamp: msg.getTimestamp(), - layer: msg.getLayer() - }; - - if (includeInstance) { - obj.$jspbMessageInstance = msg; - } - return obj; -}; -} - - -/** - * Deserializes binary data (in protobuf wire format). - * @param {jspb.ByteSource} bytes The bytes to deserialize. - * @return {!proto.FrameBuffer} - */ -proto.FrameBuffer.deserializeBinary = function(bytes) { - var reader = new jspb.BinaryReader(bytes); - var msg = new proto.FrameBuffer; - return proto.FrameBuffer.deserializeBinaryFromReader(msg, reader); -}; - - -/** - * Deserializes binary data (in protobuf wire format) from the - * given reader into the given message object. - * @param {!proto.FrameBuffer} msg The message object to deserialize into. - * @param {!jspb.BinaryReader} reader The BinaryReader to use. - * @return {!proto.FrameBuffer} - */ -proto.FrameBuffer.deserializeBinaryFromReader = function(msg, reader) { - while (reader.nextField()) { - if (reader.isEndGroup()) { - break; - } - var field = reader.getFieldNumber(); - switch (field) { - case 1: - var value = new proto.FrameData; - reader.readMessage(value,proto.FrameData.deserializeBinaryFromReader); - msg.setFrame(value); - break; - case 3: - var value = /** @type {number} */ (reader.readFixed32()); - msg.setTimestamp(value); - break; - case 4: - var value = /** @type {!proto.Layer} */ (reader.readEnum()); - msg.setLayer(value); - break; - default: - reader.skipField(); - break; - } - } - return msg; -}; - - -/** - * Class method variant: serializes the given message to binary data - * (in protobuf wire format), writing to the given BinaryWriter. - * @param {!proto.FrameBuffer} message - * @param {!jspb.BinaryWriter} writer - */ -proto.FrameBuffer.serializeBinaryToWriter = function(message, writer) { - message.serializeBinaryToWriter(writer); -}; - - -/** - * Serializes the message to binary data (in protobuf wire format). - * @return {!Uint8Array} - */ -proto.FrameBuffer.prototype.serializeBinary = function() { - var writer = new jspb.BinaryWriter(); - this.serializeBinaryToWriter(writer); - return writer.getResultBuffer(); -}; - - -/** - * Serializes the message to binary data (in protobuf wire format), - * writing to the given BinaryWriter. - * @param {!jspb.BinaryWriter} writer - */ -proto.FrameBuffer.prototype.serializeBinaryToWriter = function (writer) { - var f = undefined; - f = this.getFrame(); - if (f != null) { - writer.writeMessage( - 1, - f, - proto.FrameData.serializeBinaryToWriter - ); - } - f = this.getTimestamp(); - if (f !== 0) { - writer.writeFixed32( - 3, - f - ); - } - f = this.getLayer(); - if (f !== 0.0) { - writer.writeEnum( - 4, - f - ); - } -}; - - -/** - * Creates a deep clone of this proto. No data is shared with the original. - * @return {!proto.FrameBuffer} The clone. - */ -proto.FrameBuffer.prototype.cloneMessage = function() { - return /** @type {!proto.FrameBuffer} */ (jspb.Message.cloneMessage(this)); -}; - - -/** - * optional FrameData frame = 1; - * @return {proto.FrameData} - */ -proto.FrameBuffer.prototype.getFrame = function() { - return /** @type{proto.FrameData} */ ( - jspb.Message.getWrapperField(this, proto.FrameData, 1)); -}; - - -/** @param {proto.FrameData|undefined} value */ -proto.FrameBuffer.prototype.setFrame = function(value) { - jspb.Message.setWrapperField(this, 1, value); -}; - - -proto.FrameBuffer.prototype.clearFrame = function() { - this.setFrame(undefined); -}; - - -/** - * Returns whether this field is set. - * @return{!boolean} - */ -proto.FrameBuffer.prototype.hasFrame = function() { - return jspb.Message.getField(this, 1) != null; -}; - - -/** - * optional fixed32 timestamp = 3; - * @return {number} - */ -proto.FrameBuffer.prototype.getTimestamp = function() { - return /** @type {number} */ (jspb.Message.getFieldProto3(this, 3, 0)); -}; - - -/** @param {number} value */ -proto.FrameBuffer.prototype.setTimestamp = function(value) { - jspb.Message.setField(this, 3, value); -}; - - -/** - * optional Layer layer = 4; - * @return {!proto.Layer} - */ -proto.FrameBuffer.prototype.getLayer = function() { - return /** @type {!proto.Layer} */ (jspb.Message.getFieldProto3(this, 4, 0)); -}; - - -/** @param {!proto.Layer} value */ -proto.FrameBuffer.prototype.setLayer = function(value) { - jspb.Message.setField(this, 4, value); -}; - - - -/** - * Generated by JsPbCodeGenerator. - * @param {Array=} opt_data Optional initial data array, typically from a - * server response, or constructed directly in Javascript. The array is used - * in place and becomes part of the constructed object. It is not cloned. - * If no data is provided, the constructed object will be empty, but still - * valid. - * @extends {jspb.Message} - * @constructor - */ -proto.FrameSequence = function(opt_data) { - jspb.Message.initialize(this, opt_data, 0, -1, proto.FrameSequence.repeatedFields_, null); -}; -goog.inherits(proto.FrameSequence, jspb.Message); -if (goog.DEBUG && !COMPILED) { - proto.FrameSequence.displayName = 'proto.FrameSequence'; -} -/** - * List of repeated fields within this message type. - * @private {!Array} - * @const - */ -proto.FrameSequence.repeatedFields_ = [1]; - - - -if (jspb.Message.GENERATE_TO_OBJECT) { -/** - * Creates an object representation of this proto suitable for use in Soy templates. - * Field names that are reserved in JavaScript and will be renamed to pb_name. - * To access a reserved field use, foo.pb_, eg, foo.pb_default. - * For the list of reserved names please see: - * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. - * @param {boolean=} opt_includeInstance Whether to include the JSPB instance - * for transitional soy proto support: http://goto/soy-param-migration - * @return {!Object} - */ -proto.FrameSequence.prototype.toObject = function(opt_includeInstance) { - return proto.FrameSequence.toObject(opt_includeInstance, this); -}; - - -/** - * Static version of the {@see toObject} method. - * @param {boolean|undefined} includeInstance Whether to include the JSPB - * instance for transitional soy proto support: - * http://goto/soy-param-migration - * @param {!proto.FrameSequence} msg The msg instance to transform. - * @return {!Object} - */ -proto.FrameSequence.toObject = function(includeInstance, msg) { - var f, obj = { - framesList: jspb.Message.toObjectList(msg.getFramesList(), - proto.FrameBuffer.toObject, includeInstance) - }; - - if (includeInstance) { - obj.$jspbMessageInstance = msg; - } - return obj; -}; -} - - -/** - * Deserializes binary data (in protobuf wire format). - * @param {jspb.ByteSource} bytes The bytes to deserialize. - * @return {!proto.FrameSequence} - */ -proto.FrameSequence.deserializeBinary = function(bytes) { - var reader = new jspb.BinaryReader(bytes); - var msg = new proto.FrameSequence; - return proto.FrameSequence.deserializeBinaryFromReader(msg, reader); -}; - - -/** - * Deserializes binary data (in protobuf wire format) from the - * given reader into the given message object. - * @param {!proto.FrameSequence} msg The message object to deserialize into. - * @param {!jspb.BinaryReader} reader The BinaryReader to use. - * @return {!proto.FrameSequence} - */ -proto.FrameSequence.deserializeBinaryFromReader = function(msg, reader) { - while (reader.nextField()) { - if (reader.isEndGroup()) { - break; - } - var field = reader.getFieldNumber(); - switch (field) { - case 1: - var value = new proto.FrameBuffer; - reader.readMessage(value,proto.FrameBuffer.deserializeBinaryFromReader); - msg.getFramesList().push(value); - msg.setFramesList(msg.getFramesList()); - break; - default: - reader.skipField(); - break; - } - } - return msg; -}; - - -/** - * Class method variant: serializes the given message to binary data - * (in protobuf wire format), writing to the given BinaryWriter. - * @param {!proto.FrameSequence} message - * @param {!jspb.BinaryWriter} writer - */ -proto.FrameSequence.serializeBinaryToWriter = function(message, writer) { - message.serializeBinaryToWriter(writer); -}; - - -/** - * Serializes the message to binary data (in protobuf wire format). - * @return {!Uint8Array} - */ -proto.FrameSequence.prototype.serializeBinary = function() { - var writer = new jspb.BinaryWriter(); - this.serializeBinaryToWriter(writer); - return writer.getResultBuffer(); -}; - - -/** - * Serializes the message to binary data (in protobuf wire format), - * writing to the given BinaryWriter. - * @param {!jspb.BinaryWriter} writer - */ -proto.FrameSequence.prototype.serializeBinaryToWriter = function (writer) { - var f = undefined; - f = this.getFramesList(); - if (f.length > 0) { - writer.writeRepeatedMessage( - 1, - f, - proto.FrameBuffer.serializeBinaryToWriter - ); - } -}; - - -/** - * Creates a deep clone of this proto. No data is shared with the original. - * @return {!proto.FrameSequence} The clone. - */ -proto.FrameSequence.prototype.cloneMessage = function() { - return /** @type {!proto.FrameSequence} */ (jspb.Message.cloneMessage(this)); -}; - - -/** - * repeated FrameBuffer frames = 1; - * If you change this array by adding, removing or replacing elements, or if you - * replace the array itself, then you must call the setter to update it. - * @return {!Array.} - */ -proto.FrameSequence.prototype.getFramesList = function() { - return /** @type{!Array.} */ ( - jspb.Message.getRepeatedWrapperField(this, proto.FrameBuffer, 1)); -}; - - -/** @param {Array.} value */ -proto.FrameSequence.prototype.setFramesList = function(value) { - jspb.Message.setRepeatedWrapperField(this, 1, value); -}; - - -proto.FrameSequence.prototype.clearFramesList = function() { - this.setFramesList([]); -}; - - - -/** - * Generated by JsPbCodeGenerator. - * @param {Array=} opt_data Optional initial data array, typically from a - * server response, or constructed directly in Javascript. The array is used - * in place and becomes part of the constructed object. It is not cloned. - * If no data is provided, the constructed object will be empty, but still - * valid. - * @extends {jspb.Message} - * @constructor - */ -proto.DrawResponse = function(opt_data) { - jspb.Message.initialize(this, opt_data, 0, -1, null, null); -}; -goog.inherits(proto.DrawResponse, jspb.Message); -if (goog.DEBUG && !COMPILED) { - proto.DrawResponse.displayName = 'proto.DrawResponse'; -} - - -if (jspb.Message.GENERATE_TO_OBJECT) { -/** - * Creates an object representation of this proto suitable for use in Soy templates. - * Field names that are reserved in JavaScript and will be renamed to pb_name. - * To access a reserved field use, foo.pb_, eg, foo.pb_default. - * For the list of reserved names please see: - * com.google.apps.jspb.JsClassTemplate.JS_RESERVED_WORDS. - * @param {boolean=} opt_includeInstance Whether to include the JSPB instance - * for transitional soy proto support: http://goto/soy-param-migration - * @return {!Object} - */ -proto.DrawResponse.prototype.toObject = function(opt_includeInstance) { - return proto.DrawResponse.toObject(opt_includeInstance, this); -}; - - -/** - * Static version of the {@see toObject} method. - * @param {boolean|undefined} includeInstance Whether to include the JSPB - * instance for transitional soy proto support: - * http://goto/soy-param-migration - * @param {!proto.DrawResponse} msg The msg instance to transform. - * @return {!Object} - */ -proto.DrawResponse.toObject = function(includeInstance, msg) { - var f, obj = { - - }; - - if (includeInstance) { - obj.$jspbMessageInstance = msg; - } - return obj; -}; -} - - -/** - * Deserializes binary data (in protobuf wire format). - * @param {jspb.ByteSource} bytes The bytes to deserialize. - * @return {!proto.DrawResponse} - */ -proto.DrawResponse.deserializeBinary = function(bytes) { - var reader = new jspb.BinaryReader(bytes); - var msg = new proto.DrawResponse; - return proto.DrawResponse.deserializeBinaryFromReader(msg, reader); -}; - - -/** - * Deserializes binary data (in protobuf wire format) from the - * given reader into the given message object. - * @param {!proto.DrawResponse} msg The message object to deserialize into. - * @param {!jspb.BinaryReader} reader The BinaryReader to use. - * @return {!proto.DrawResponse} - */ -proto.DrawResponse.deserializeBinaryFromReader = function(msg, reader) { - while (reader.nextField()) { - if (reader.isEndGroup()) { - break; - } - var field = reader.getFieldNumber(); - switch (field) { - default: - reader.skipField(); - break; - } - } - return msg; -}; - - -/** - * Class method variant: serializes the given message to binary data - * (in protobuf wire format), writing to the given BinaryWriter. - * @param {!proto.DrawResponse} message - * @param {!jspb.BinaryWriter} writer - */ -proto.DrawResponse.serializeBinaryToWriter = function(message, writer) { - message.serializeBinaryToWriter(writer); -}; - - -/** - * Serializes the message to binary data (in protobuf wire format). - * @return {!Uint8Array} - */ -proto.DrawResponse.prototype.serializeBinary = function() { - var writer = new jspb.BinaryWriter(); - this.serializeBinaryToWriter(writer); - return writer.getResultBuffer(); -}; - - -/** - * Serializes the message to binary data (in protobuf wire format), - * writing to the given BinaryWriter. - * @param {!jspb.BinaryWriter} writer - */ -proto.DrawResponse.prototype.serializeBinaryToWriter = function (writer) { - var f = undefined; -}; - - -/** - * Creates a deep clone of this proto. No data is shared with the original. - * @return {!proto.DrawResponse} The clone. - */ -proto.DrawResponse.prototype.cloneMessage = function() { - return /** @type {!proto.DrawResponse} */ (jspb.Message.cloneMessage(this)); -}; - - -/** - * @enum {number} - */ -proto.Layer = { - NONE: 0, - LIGHT: 10, - COLOR: 20, - NOTIFICATIONS: 90, - GENERAL_0: 40, - GENERAL_1: 41, - GENERAL_2: 42, - GENERAL_3: 43, - GENERAL_4: 44, - GENERAL_5: 45, - GENERAL_6: 46, - GENERAL_7: 47, - GENERAL_8: 48, - GENERAL_9: 49 -}; - -goog.object.extend(exports, proto); diff --git a/clients/switch/package.json b/clients/switch/package.json index 6afef58..7d24d81 100644 --- a/clients/switch/package.json +++ b/clients/switch/package.json @@ -6,9 +6,9 @@ "author": "Ambrose Chua", "license": "MPL-2.0", "dependencies": { - "@grpc/grpc-js": "^0.3.6", - "@grpc/proto-loader": "^0.5.0", - "express": "^4.16.4", - "grpc": "^1.19.0" + "@grpc/grpc-js": "^1.0.1", + "@grpc/proto-loader": "^0.5.4", + "express": "^4.17.1", + "grpc": "^1.24.2" } } diff --git a/clients/switch/server.js b/clients/switch/server.js index d1f2bd8..f134c82 100644 --- a/clients/switch/server.js +++ b/clients/switch/server.js @@ -16,6 +16,7 @@ const express = require('express'); const app = express(); const PORT = 5001; +const PIXEL_COUNT = 275; // TODO: async app.post('/on', (req, res, next) => { @@ -31,7 +32,7 @@ app.post('/on', (req, res, next) => { } client.drawFrame({ frame: { - fill, + dots: Array(PIXEL_COUNT-1).fill(fill).concat([0xBBFF0000]), }, layer: 'LIGHT', }, (err, resp) => { @@ -45,7 +46,7 @@ app.post('/on', (req, res, next) => { app.post('/off', (req, res, next) => { client.drawFrame({ frame: { - fill: 0x00000000, + dots: Array(PIXEL_COUNT).fill(0x00000000), }, layer: 'LIGHT', }, (err, resp) => { diff --git a/clients/switch/yarn.lock b/clients/switch/yarn.lock index 49f2827..97da121 100644 --- a/clients/switch/yarn.lock +++ b/clients/switch/yarn.lock @@ -2,17 +2,17 @@ # yarn lockfile v1 -"@grpc/grpc-js@^0.3.6": - version "0.3.6" - resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-0.3.6.tgz#d9b52043907170d38e06711d9477fde29ab46fa8" - integrity sha512-SmLNuPGlUur64bNS9aHZguqWDVQ8+Df1CGn+xsh7l6T2wiP5ArOMlywZ3TZo6z/rwKtGQgUJY9ZrPYUmHEXd/Q== +"@grpc/grpc-js@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.0.1.tgz#1c09a7a3e276cb1003ff3497f5707e5a74d6c6c5" + integrity sha512-qgdvnNy8IY9LExVNne1vFZAgiVfbZAP+8j0Z8fSN23pjmxlIn5YKze8JV6QkSHIYPmqiufcIw7VNeo4Z+64WlA== dependencies: - semver "^5.5.0" + semver "^6.2.0" -"@grpc/proto-loader@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.5.0.tgz#6d21930530db6089ed68a90f10a22b76fdc3387d" - integrity sha512-kF5toaC4A7PRjAuIxE0fYAv8WarJ6JELYlmHpkoo4EGTFvXUsQwVfyj2bgPV2023M77s2TtDn36wPMJB0sz8nA== +"@grpc/proto-loader@^0.5.4": + version "0.5.4" + resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.5.4.tgz#038a3820540f621eeb1b05d81fbedfb045e14de0" + integrity sha512-HTM4QpI9B2XFkPz7pjwMyMgZchJ93TVkL3kWPW8GDMDKYxsMnmf4w2TNMJK7+KNiYHS5cJrCEAFlF+AwtXWVPA== dependencies: lodash.camelcase "^4.3.0" protobufjs "^6.8.6" @@ -70,28 +70,36 @@ resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" integrity sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA= -"@types/long@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.0.tgz#719551d2352d301ac8b81db732acb6bdc28dbdef" - integrity sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q== +"@types/bytebuffer@^5.0.40": + version "5.0.40" + resolved "https://registry.yarnpkg.com/@types/bytebuffer/-/bytebuffer-5.0.40.tgz#d6faac40dcfb09cd856cdc4c01d3690ba536d3ee" + integrity sha512-h48dyzZrPMz25K6Q4+NCwWaxwXany2FhQg/ErOcdZS1ZpsaDnDMZg8JYLMTGz7uvXKrcKGJUZJlZObyfgdaN9g== + dependencies: + "@types/long" "*" + "@types/node" "*" -"@types/node@^10.1.0": - version "10.14.4" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.4.tgz#1c586b991457cbb58fef51bc4e0cfcfa347714b5" - integrity sha512-DT25xX/YgyPKiHFOpNuANIQIVvYEwCWXgK2jYYwqgaMrYE6+tq+DtmMwlD3drl6DJbUwtlIDnn0d7tIn/EbXBg== +"@types/long@*", "@types/long@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.1.tgz#459c65fa1867dafe6a8f322c4c51695663cc55e9" + integrity sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w== + +"@types/node@*", "@types/node@^13.7.0": + version "13.13.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.2.tgz#160d82623610db590a64e8ca81784e11117e5a54" + integrity sha512-LB2R1Oyhpg8gu4SON/mfforE525+Hi/M1ineICEDftqNVTyFg1aRIeGuTvXAoWHc4nbrFncWtJgMmoyRvuGh7A== abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -accepts@~1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" - integrity sha1-63d99gEXI6OxTopywIBcjoZ0a9I= +accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== dependencies: - mime-types "~2.1.18" - negotiator "0.6.1" + mime-types "~2.1.24" + negotiator "0.6.2" ansi-regex@^2.0.0: version "2.1.1" @@ -134,21 +142,21 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= -body-parser@1.18.3: - version "1.18.3" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.3.tgz#5b292198ffdd553b3a0f20ded0592b956955c8b4" - integrity sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ= +body-parser@1.19.0: + version "1.19.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== dependencies: - bytes "3.0.0" + bytes "3.1.0" content-type "~1.0.4" debug "2.6.9" depd "~1.1.2" - http-errors "~1.6.3" - iconv-lite "0.4.23" + http-errors "1.7.2" + iconv-lite "0.4.24" on-finished "~2.3.0" - qs "6.5.2" - raw-body "2.3.3" - type-is "~1.6.16" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" brace-expansion@^1.1.7: version "1.1.11" @@ -165,10 +173,10 @@ bytebuffer@~5: dependencies: long "~3" -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== camelcase@^2.0.1: version "2.1.1" @@ -176,9 +184,9 @@ camelcase@^2.0.1: integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= chownr@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" - integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g== + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== cliui@^3.0.3: version "3.2.0" @@ -209,10 +217,12 @@ console-control-strings@^1.0.0, console-control-strings@~1.1.0: resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= -content-disposition@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" - integrity sha1-DPaLud318r55YcOoUXjLhdunjLQ= +content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" content-type@~1.0.4: version "1.0.4" @@ -224,10 +234,10 @@ cookie-signature@1.0.6: resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= -cookie@0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" - integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s= +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== core-util-is@~1.0.0: version "1.0.2" @@ -241,10 +251,10 @@ debug@2.6.9: dependencies: ms "2.0.0" -debug@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" - integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== +debug@^3.2.6: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== dependencies: ms "^2.1.1" @@ -298,53 +308,53 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= -express@^4.16.4: - version "4.16.4" - resolved "https://registry.yarnpkg.com/express/-/express-4.16.4.tgz#fddef61926109e24c515ea97fd2f1bdbf62df12e" - integrity sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg== +express@^4.17.1: + version "4.17.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== dependencies: - accepts "~1.3.5" + accepts "~1.3.7" array-flatten "1.1.1" - body-parser "1.18.3" - content-disposition "0.5.2" + body-parser "1.19.0" + content-disposition "0.5.3" content-type "~1.0.4" - cookie "0.3.1" + cookie "0.4.0" cookie-signature "1.0.6" debug "2.6.9" depd "~1.1.2" encodeurl "~1.0.2" escape-html "~1.0.3" etag "~1.8.1" - finalhandler "1.1.1" + finalhandler "~1.1.2" fresh "0.5.2" merge-descriptors "1.0.1" methods "~1.1.2" on-finished "~2.3.0" - parseurl "~1.3.2" + parseurl "~1.3.3" path-to-regexp "0.1.7" - proxy-addr "~2.0.4" - qs "6.5.2" - range-parser "~1.2.0" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" safe-buffer "5.1.2" - send "0.16.2" - serve-static "1.13.2" - setprototypeof "1.1.0" - statuses "~1.4.0" - type-is "~1.6.16" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" utils-merge "1.0.1" vary "~1.1.2" -finalhandler@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105" - integrity sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg== +finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== dependencies: debug "2.6.9" encodeurl "~1.0.2" escape-html "~1.0.3" on-finished "~2.3.0" - parseurl "~1.3.2" - statuses "~1.4.0" + parseurl "~1.3.3" + statuses "~1.5.0" unpipe "~1.0.0" forwarded@~0.1.2: @@ -358,11 +368,11 @@ fresh@0.5.2: integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= fs-minipass@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" - integrity sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ== + version "1.2.7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== dependencies: - minipass "^2.2.1" + minipass "^2.6.0" fs.realpath@^1.0.0: version "1.0.0" @@ -384,9 +394,9 @@ gauge@~2.7.3: wide-align "^1.1.0" glob@^7.0.5, glob@^7.1.3: - version "7.1.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" - integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -395,15 +405,16 @@ glob@^7.0.5, glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" -grpc@^1.19.0: - version "1.19.0" - resolved "https://registry.yarnpkg.com/grpc/-/grpc-1.19.0.tgz#129fb30923ea2fa7a9b2623f9e7930eda91a242f" - integrity sha512-xX+jZ1M3YXjngsRj/gTxB4EwM0WoWUr54DmyNq9xTeg1oSuVaTPD/PK9wnZKOJWTt1pkeFspXqwJPhddZNxHOA== +grpc@^1.24.2: + version "1.24.2" + resolved "https://registry.yarnpkg.com/grpc/-/grpc-1.24.2.tgz#76d047bfa7b05b607cbbe3abb99065dcefe0c099" + integrity sha512-EG3WH6AWMVvAiV15d+lr+K77HJ/KV/3FvMpjKjulXHbTwgDZkhkcWbwhxFAoTdxTkQvy0WFcO3Nog50QBbHZWw== dependencies: + "@types/bytebuffer" "^5.0.40" lodash.camelcase "^4.3.0" lodash.clone "^4.5.0" - nan "^2.0.0" - node-pre-gyp "^0.12.0" + nan "^2.13.2" + node-pre-gyp "^0.14.0" protobufjs "^5.0.3" has-unicode@^2.0.0: @@ -411,24 +422,29 @@ has-unicode@^2.0.0: resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= -http-errors@1.6.3, http-errors@~1.6.2, http-errors@~1.6.3: - version "1.6.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" - integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= +http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== dependencies: depd "~1.1.2" inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" -iconv-lite@0.4.23: - version "0.4.23" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" - integrity sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA== +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== dependencies: - safer-buffer ">= 2.1.2 < 3" + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" -iconv-lite@^0.4.4: +iconv-lite@0.4.24, iconv-lite@^0.4.4: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -436,9 +452,9 @@ iconv-lite@^0.4.4: safer-buffer ">= 2.1.2 < 3" ignore-walk@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" - integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ== + version "3.0.3" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" + integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== dependencies: minimatch "^3.0.4" @@ -450,7 +466,12 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.3, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= @@ -465,10 +486,10 @@ invert-kv@^1.0.0: resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= -ipaddr.js@1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.0.tgz#eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e" - integrity sha1-6qM9bd16zo9/b+DJygRA5wZzix4= +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== is-fullwidth-code-point@^1.0.0: version "1.0.0" @@ -529,22 +550,22 @@ methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= -mime-db@~1.38.0: - version "1.38.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.38.0.tgz#1a2aab16da9eb167b49c6e4df2d9c68d63d8e2ad" - integrity sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg== +mime-db@1.43.0: + version "1.43.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" + integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ== -mime-types@~2.1.18: - version "2.1.22" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.22.tgz#fe6b355a190926ab7698c9a0556a11199b2199bd" - integrity sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog== +mime-types@~2.1.24: + version "2.1.26" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06" + integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ== dependencies: - mime-db "~1.38.0" + mime-db "1.43.0" -mime@1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" - integrity sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ== +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== minimatch@^3.0.4: version "3.0.4" @@ -553,71 +574,71 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= +minimist@^1.2.0, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== -minimist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= - -minipass@^2.2.1, minipass@^2.3.4: - version "2.3.5" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" - integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA== +minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== dependencies: safe-buffer "^5.1.2" yallist "^3.0.0" -minizlib@^1.1.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" - integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA== +minizlib@^1.2.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== dependencies: - minipass "^2.2.1" + minipass "^2.9.0" mkdirp@^0.5.0, mkdirp@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== dependencies: - minimist "0.0.8" + minimist "^1.2.5" ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= -ms@^2.1.1: +ms@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== -nan@^2.0.0: - version "2.13.2" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.13.2.tgz#f51dc7ae66ba7d5d55e1e6d4d8092e802c9aefe7" - integrity sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw== +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +nan@^2.13.2: + version "2.14.1" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" + integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== needle@^2.2.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.3.0.tgz#ce3fea21197267bacb310705a7bbe24f2a3a3492" - integrity sha512-QBZu7aAFR0522EyaXZM0FZ9GLpq6lvQ3uq8gteiDUp7wKdy0lSd2hPlgFwVuW1CBkfEs9PfDQsQzZghLs/psdg== + version "2.4.1" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.1.tgz#14af48732463d7475696f937626b1b993247a56a" + integrity sha512-x/gi6ijr4B7fwl6WYL9FwlCvRQKGlUNvnceho8wxkwXqN8jvVmmmATTmZPRRG7b/yC1eode26C2HO9jl78Du9g== dependencies: - debug "^4.1.0" + debug "^3.2.6" iconv-lite "^0.4.4" sax "^1.2.4" -negotiator@0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" - integrity sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk= +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== -node-pre-gyp@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149" - integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A== +node-pre-gyp@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz#9a0596533b877289bcad4e143982ca3d904ddc83" + integrity sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA== dependencies: detect-libc "^1.0.2" mkdirp "^0.5.1" @@ -628,28 +649,36 @@ node-pre-gyp@^0.12.0: rc "^1.2.7" rimraf "^2.6.1" semver "^5.3.0" - tar "^4" + tar "^4.4.2" nopt@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= + version "4.0.3" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" + integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== dependencies: abbrev "1" osenv "^0.1.4" npm-bundled@^1.0.1: - version "1.0.6" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" - integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== + version "1.1.1" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" + integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== + dependencies: + npm-normalize-package-bin "^1.0.1" + +npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== npm-packlist@^1.1.6: - version "1.4.1" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.1.tgz#19064cdf988da80ea3cee45533879d90192bbfbc" - integrity sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw== + version "1.4.8" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" + integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== dependencies: ignore-walk "^3.0.1" npm-bundled "^1.0.1" + npm-normalize-package-bin "^1.0.1" npmlog@^4.0.2: version "4.1.2" @@ -715,10 +744,10 @@ osenv@^0.1.4: os-homedir "^1.0.0" os-tmpdir "^1.0.0" -parseurl@~1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" - integrity sha1-/CidTtiZMRlGDBViUyYs3I3mW/M= +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== path-is-absolute@^1.0.0: version "1.0.1" @@ -731,9 +760,9 @@ path-to-regexp@0.1.7: integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= process-nextick-args@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" - integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== protobufjs@^5.0.3: version "5.0.3" @@ -746,9 +775,9 @@ protobufjs@^5.0.3: yargs "^3.10.0" protobufjs@^6.8.6: - version "6.8.8" - resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.8.8.tgz#c8b4f1282fd7a90e6f5b109ed11c84af82908e7c" - integrity sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw== + version "6.9.0" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.9.0.tgz#c08b2bf636682598e6fabbf0edb0b1256ff090bd" + integrity sha512-LlGVfEWDXoI/STstRDdZZKb/qusoAWUnmLg9R8OLSO473mBLWHowx8clbX5/+mKDEI+v7GzjoK9tRPZMMcoTrg== dependencies: "@protobufjs/aspromise" "^1.1.2" "@protobufjs/base64" "^1.1.2" @@ -760,36 +789,36 @@ protobufjs@^6.8.6: "@protobufjs/path" "^1.1.2" "@protobufjs/pool" "^1.1.0" "@protobufjs/utf8" "^1.1.0" - "@types/long" "^4.0.0" - "@types/node" "^10.1.0" + "@types/long" "^4.0.1" + "@types/node" "^13.7.0" long "^4.0.0" -proxy-addr@~2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93" - integrity sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA== +proxy-addr@~2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" + integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== dependencies: forwarded "~0.1.2" - ipaddr.js "1.8.0" + ipaddr.js "1.9.1" -qs@6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== +qs@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== -range-parser@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" - integrity sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4= +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3" - integrity sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw== +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== dependencies: - bytes "3.0.0" - http-errors "1.6.3" - iconv-lite "0.4.23" + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" unpipe "1.0.0" rc@^1.2.7: @@ -803,9 +832,9 @@ rc@^1.2.7: strip-json-comments "~2.0.1" readable-stream@^2.0.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" - integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -816,17 +845,22 @@ readable-stream@^2.0.6: util-deprecate "~1.0.1" rimraf@^2.6.1: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== dependencies: glob "^7.1.3" -safe-buffer@5.1.2, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +safe-buffer@^5.1.2: + version "5.2.0" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" + integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== + "safer-buffer@>= 2.1.2 < 3": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" @@ -837,15 +871,20 @@ sax@^1.2.4: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -semver@^5.3.0, semver@^5.5.0: - version "5.7.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" - integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== +semver@^5.3.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -send@0.16.2: - version "0.16.2" - resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" - integrity sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw== +semver@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +send@0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== dependencies: debug "2.6.9" depd "~1.1.2" @@ -854,48 +893,43 @@ send@0.16.2: escape-html "~1.0.3" etag "~1.8.1" fresh "0.5.2" - http-errors "~1.6.2" - mime "1.4.1" - ms "2.0.0" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" on-finished "~2.3.0" - range-parser "~1.2.0" - statuses "~1.4.0" + range-parser "~1.2.1" + statuses "~1.5.0" -serve-static@1.13.2: - version "1.13.2" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" - integrity sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw== +serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== dependencies: encodeurl "~1.0.2" escape-html "~1.0.3" - parseurl "~1.3.2" - send "0.16.2" + parseurl "~1.3.3" + send "0.17.1" set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= -setprototypeof@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" - integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== signal-exit@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== -"statuses@>= 1.4.0 < 2": +"statuses@>= 1.5.0 < 2", statuses@~1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= -statuses@~1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" - integrity sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew== - string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -939,26 +973,31 @@ strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= -tar@^4: - version "4.4.8" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d" - integrity sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ== +tar@^4.4.2: + version "4.4.13" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" + integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== dependencies: chownr "^1.1.1" fs-minipass "^1.2.5" - minipass "^2.3.4" - minizlib "^1.1.1" + minipass "^2.8.6" + minizlib "^1.2.1" mkdirp "^0.5.0" safe-buffer "^5.1.2" - yallist "^3.0.2" + yallist "^3.0.3" -type-is@~1.6.16: - version "1.6.16" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" - integrity sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q== +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + +type-is@~1.6.17, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== dependencies: media-typer "0.3.0" - mime-types "~2.1.18" + mime-types "~2.1.24" unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" @@ -1010,10 +1049,10 @@ y18n@^3.2.0: resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= -yallist@^3.0.0, yallist@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" - integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== +yallist@^3.0.0, yallist@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yargs@^3.10.0: version "3.32.0" diff --git a/draw.go b/draw.go index ee01d78..4ed4578 100644 --- a/draw.go +++ b/draw.go @@ -2,15 +2,20 @@ package main // import "github.com/serverwentdown/leet" import ( "log" + "time" ws2811 "github.com/rpi-ws281x/rpi-ws281x-go" ) // TODO: full-sized grid with multiple channels mapped onto the grid +const ( + MAX_LAYERS = 10 +) + type Drawer struct { + Length int layers [][]uint32 - length int device *ws2811.WS2811 } @@ -20,8 +25,14 @@ func NewDrawer(length int) (*Drawer, error) { opt.Channels[0].Brightness = 255 d := &Drawer{} - d.length = length - d.layers = make([][]uint32, 100) + d.Length = length + d.layers = make([][]uint32, MAX_LAYERS) + for i := range d.layers { + d.layers[i] = make([]uint32, length) + } + for i := range d.layers[0] { + d.layers[0][i] = 0xff000000 + } dev, err := ws2811.MakeWS2811(&opt) if err != nil { return nil, err @@ -36,40 +47,37 @@ func NewDrawer(length int) (*Drawer, error) { } func (d *Drawer) SetLayer(layer int32, dots []uint32) { - d.layers[layer] = dots -} - -func (d *Drawer) SetLayerOrFill(layer int32, dots []uint32, fill uint32) { - if dots == nil { - fillDots := make([]uint32, d.length) - for i := 0; i < d.length; i++ { - fillDots[i] = fill + for i, dot := range dots { + if i > d.Length { + break } - d.layers[layer] = fillDots - } else { - d.SetLayer(layer, dots) + d.layers[layer][i] = dot } } func (d *Drawer) Draw() error { - for i := 0; i < len(d.device.Leds(0)); i++ { + timeMixStart := time.Now() + for i := 0; i < d.Length; i++ { dot := mix(d.layers, i) d.device.Leds(0)[i] = dot } + timeMixEnd := time.Now() if err := d.device.Render(); err != nil { return err } + + log.Printf("mix took %d milliseconds", timeMixEnd.Sub(timeMixStart)/1000/1000) return nil } -func mix(layers [][]uint32, j int) uint32 { +func mix(layers [][]uint32, i int) uint32 { var base uint32 - for i := 0; i < len(layers); i++ { - if j >= len(layers[i]) { + for _, layer := range layers { + if i >= len(layer) { continue } - base = mixColors(base, layers[i][j]) + base = mixColors(layer[i], base) } return base } @@ -81,7 +89,6 @@ func mixColors(a uint32, b uint32) uint32 { ag, bg := a&uint32(0x0000FF00)>>8, b&uint32(0x0000FF00)>>8 ab, bb := a&uint32(0x000000FF), b&uint32(0x000000FF) // Apply alpha computation to each channel - log.Println(aa, ar, ag, ab, ba, br, bg, bb) oa := uint32(ba*(255-aa)/255 + aa) or := uint32(br*ba*(255-aa)/(255*255) + ar*aa/255) og := uint32(bg*ba*(255-aa)/(255*255) + ag*aa/255) diff --git a/framebuffer/framebuffer.pb.go b/framebuffer/framebuffer.pb.go index 836925f..46ac3c2 100644 --- a/framebuffer/framebuffer.pb.go +++ b/framebuffer/framebuffer.pb.go @@ -1,204 +1,208 @@ // Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.21.0 +// protoc (unknown) // source: framebuffer.proto package framebuffer import ( context "context" - fmt "fmt" proto "github.com/golang/protobuf/proto" grpc "google.golang.org/grpc" - math "math" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" ) -// Reference imports to suppress errors if they are not otherwise used. -var _ = proto.Marshal -var _ = fmt.Errorf -var _ = math.Inf +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) -// This is a compile-time assertion to ensure that this generated file -// is compatible with the proto package it is being compiled against. -// A compilation error at this line likely means your copy of the -// proto package needs to be updated. -const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 // //Layer defines some default layers for compositing animations onto for -//various purposes, and also defines some generic layers. Each service -//should be allocated a unique enum eventually. -// -//In the future, this system should be replaced by a configuration file -//that assigns priorities to each service. +//various purposes. type Layer int32 const ( Layer_NONE Layer = 0 // Well-known layers - Layer_LIGHT Layer = 10 - Layer_COLOR Layer = 20 - Layer_NOTIFICATIONS Layer = 90 - // Public layers - Layer_GENERAL_0 Layer = 40 - Layer_GENERAL_1 Layer = 41 - Layer_GENERAL_2 Layer = 42 - Layer_GENERAL_3 Layer = 43 - Layer_GENERAL_4 Layer = 44 - Layer_GENERAL_5 Layer = 45 - Layer_GENERAL_6 Layer = 46 - Layer_GENERAL_7 Layer = 47 - Layer_GENERAL_8 Layer = 48 - Layer_GENERAL_9 Layer = 49 + Layer_LIGHT Layer = 1 + Layer_COLOR Layer = 2 + Layer_NOTIFICATIONS Layer = 8 + Layer_PRIORITY Layer = 9 ) -var Layer_name = map[int32]string{ - 0: "NONE", - 10: "LIGHT", - 20: "COLOR", - 90: "NOTIFICATIONS", - 40: "GENERAL_0", - 41: "GENERAL_1", - 42: "GENERAL_2", - 43: "GENERAL_3", - 44: "GENERAL_4", - 45: "GENERAL_5", - 46: "GENERAL_6", - 47: "GENERAL_7", - 48: "GENERAL_8", - 49: "GENERAL_9", -} +// Enum value maps for Layer. +var ( + Layer_name = map[int32]string{ + 0: "NONE", + 1: "LIGHT", + 2: "COLOR", + 8: "NOTIFICATIONS", + 9: "PRIORITY", + } + Layer_value = map[string]int32{ + "NONE": 0, + "LIGHT": 1, + "COLOR": 2, + "NOTIFICATIONS": 8, + "PRIORITY": 9, + } +) -var Layer_value = map[string]int32{ - "NONE": 0, - "LIGHT": 10, - "COLOR": 20, - "NOTIFICATIONS": 90, - "GENERAL_0": 40, - "GENERAL_1": 41, - "GENERAL_2": 42, - "GENERAL_3": 43, - "GENERAL_4": 44, - "GENERAL_5": 45, - "GENERAL_6": 46, - "GENERAL_7": 47, - "GENERAL_8": 48, - "GENERAL_9": 49, +func (x Layer) Enum() *Layer { + p := new(Layer) + *p = x + return p } func (x Layer) String() string { - return proto.EnumName(Layer_name, int32(x)) + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } +func (Layer) Descriptor() protoreflect.EnumDescriptor { + return file_framebuffer_proto_enumTypes[0].Descriptor() +} + +func (Layer) Type() protoreflect.EnumType { + return &file_framebuffer_proto_enumTypes[0] +} + +func (x Layer) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Layer.Descriptor instead. func (Layer) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_4476fbda566a3634, []int{0} + return file_framebuffer_proto_rawDescGZIP(), []int{0} } // -//FrameData represents either an array of dots or a fixed fill color to apply -//to all dots. Having two use cases makes it easier for applications to -//draw solid fill colors. +//FrameData represents an ARGB array of dots. type FrameData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + // ARGB - Dots []uint32 `protobuf:"fixed32,1,rep,packed,name=dots,proto3" json:"dots,omitempty"` - Fill uint32 `protobuf:"fixed32,2,opt,name=fill,proto3" json:"fill,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Dots []uint32 `protobuf:"fixed32,1,rep,packed,name=dots,proto3" json:"dots,omitempty"` } -func (m *FrameData) Reset() { *m = FrameData{} } -func (m *FrameData) String() string { return proto.CompactTextString(m) } -func (*FrameData) ProtoMessage() {} +func (x *FrameData) Reset() { + *x = FrameData{} + if protoimpl.UnsafeEnabled { + mi := &file_framebuffer_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FrameData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FrameData) ProtoMessage() {} + +func (x *FrameData) ProtoReflect() protoreflect.Message { + mi := &file_framebuffer_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FrameData.ProtoReflect.Descriptor instead. func (*FrameData) Descriptor() ([]byte, []int) { - return fileDescriptor_4476fbda566a3634, []int{0} + return file_framebuffer_proto_rawDescGZIP(), []int{0} } -func (m *FrameData) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FrameData.Unmarshal(m, b) -} -func (m *FrameData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FrameData.Marshal(b, m, deterministic) -} -func (m *FrameData) XXX_Merge(src proto.Message) { - xxx_messageInfo_FrameData.Merge(m, src) -} -func (m *FrameData) XXX_Size() int { - return xxx_messageInfo_FrameData.Size(m) -} -func (m *FrameData) XXX_DiscardUnknown() { - xxx_messageInfo_FrameData.DiscardUnknown(m) -} - -var xxx_messageInfo_FrameData proto.InternalMessageInfo - -func (m *FrameData) GetDots() []uint32 { - if m != nil { - return m.Dots +func (x *FrameData) GetDots() []uint32 { + if x != nil { + return x.Dots } return nil } -func (m *FrameData) GetFill() uint32 { - if m != nil { - return m.Fill - } - return 0 -} - // //FrameBuffer represents an entire frame together with a layer tag. It also //defines a timestamp that can be used within a FrameSequence to define the //duration a frame will be shown. type FrameBuffer struct { - Frame *FrameData `protobuf:"bytes,1,opt,name=frame,proto3" json:"frame,omitempty"` - Timestamp uint32 `protobuf:"fixed32,3,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - Layer Layer `protobuf:"varint,4,opt,name=layer,proto3,enum=Layer" json:"layer,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Frame *FrameData `protobuf:"bytes,1,opt,name=frame,proto3" json:"frame,omitempty"` + // Time offset from start of frame in milliseconds + Timestamp uint32 `protobuf:"fixed32,2,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + // Layer to apply the frame to + Layer Layer `protobuf:"varint,3,opt,name=layer,proto3,enum=Layer" json:"layer,omitempty"` } -func (m *FrameBuffer) Reset() { *m = FrameBuffer{} } -func (m *FrameBuffer) String() string { return proto.CompactTextString(m) } -func (*FrameBuffer) ProtoMessage() {} +func (x *FrameBuffer) Reset() { + *x = FrameBuffer{} + if protoimpl.UnsafeEnabled { + mi := &file_framebuffer_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FrameBuffer) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FrameBuffer) ProtoMessage() {} + +func (x *FrameBuffer) ProtoReflect() protoreflect.Message { + mi := &file_framebuffer_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FrameBuffer.ProtoReflect.Descriptor instead. func (*FrameBuffer) Descriptor() ([]byte, []int) { - return fileDescriptor_4476fbda566a3634, []int{1} + return file_framebuffer_proto_rawDescGZIP(), []int{1} } -func (m *FrameBuffer) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FrameBuffer.Unmarshal(m, b) -} -func (m *FrameBuffer) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FrameBuffer.Marshal(b, m, deterministic) -} -func (m *FrameBuffer) XXX_Merge(src proto.Message) { - xxx_messageInfo_FrameBuffer.Merge(m, src) -} -func (m *FrameBuffer) XXX_Size() int { - return xxx_messageInfo_FrameBuffer.Size(m) -} -func (m *FrameBuffer) XXX_DiscardUnknown() { - xxx_messageInfo_FrameBuffer.DiscardUnknown(m) -} - -var xxx_messageInfo_FrameBuffer proto.InternalMessageInfo - -func (m *FrameBuffer) GetFrame() *FrameData { - if m != nil { - return m.Frame +func (x *FrameBuffer) GetFrame() *FrameData { + if x != nil { + return x.Frame } return nil } -func (m *FrameBuffer) GetTimestamp() uint32 { - if m != nil { - return m.Timestamp +func (x *FrameBuffer) GetTimestamp() uint32 { + if x != nil { + return x.Timestamp } return 0 } -func (m *FrameBuffer) GetLayer() Layer { - if m != nil { - return m.Layer +func (x *FrameBuffer) GetLayer() Layer { + if x != nil { + return x.Layer } return Layer_NONE } @@ -211,118 +215,370 @@ func (m *FrameBuffer) GetLayer() Layer { //In the future, this should have more metadata like looping counts and async //animations. type FrameSequence struct { - Frames []*FrameBuffer `protobuf:"bytes,1,rep,name=frames,proto3" json:"frames,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Frames []*FrameBuffer `protobuf:"bytes,1,rep,name=frames,proto3" json:"frames,omitempty"` + // Number of times to loop the sequence + Loop int32 `protobuf:"varint,2,opt,name=loop,proto3" json:"loop,omitempty"` } -func (m *FrameSequence) Reset() { *m = FrameSequence{} } -func (m *FrameSequence) String() string { return proto.CompactTextString(m) } -func (*FrameSequence) ProtoMessage() {} +func (x *FrameSequence) Reset() { + *x = FrameSequence{} + if protoimpl.UnsafeEnabled { + mi := &file_framebuffer_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *FrameSequence) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FrameSequence) ProtoMessage() {} + +func (x *FrameSequence) ProtoReflect() protoreflect.Message { + mi := &file_framebuffer_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FrameSequence.ProtoReflect.Descriptor instead. func (*FrameSequence) Descriptor() ([]byte, []int) { - return fileDescriptor_4476fbda566a3634, []int{2} + return file_framebuffer_proto_rawDescGZIP(), []int{2} } -func (m *FrameSequence) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_FrameSequence.Unmarshal(m, b) -} -func (m *FrameSequence) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_FrameSequence.Marshal(b, m, deterministic) -} -func (m *FrameSequence) XXX_Merge(src proto.Message) { - xxx_messageInfo_FrameSequence.Merge(m, src) -} -func (m *FrameSequence) XXX_Size() int { - return xxx_messageInfo_FrameSequence.Size(m) -} -func (m *FrameSequence) XXX_DiscardUnknown() { - xxx_messageInfo_FrameSequence.DiscardUnknown(m) -} - -var xxx_messageInfo_FrameSequence proto.InternalMessageInfo - -func (m *FrameSequence) GetFrames() []*FrameBuffer { - if m != nil { - return m.Frames +func (x *FrameSequence) GetFrames() []*FrameBuffer { + if x != nil { + return x.Frames } return nil } +func (x *FrameSequence) GetLoop() int32 { + if x != nil { + return x.Loop + } + return 0 +} + type DrawResponse struct { - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields } -func (m *DrawResponse) Reset() { *m = DrawResponse{} } -func (m *DrawResponse) String() string { return proto.CompactTextString(m) } -func (*DrawResponse) ProtoMessage() {} +func (x *DrawResponse) Reset() { + *x = DrawResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_framebuffer_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DrawResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DrawResponse) ProtoMessage() {} + +func (x *DrawResponse) ProtoReflect() protoreflect.Message { + mi := &file_framebuffer_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DrawResponse.ProtoReflect.Descriptor instead. func (*DrawResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_4476fbda566a3634, []int{3} + return file_framebuffer_proto_rawDescGZIP(), []int{3} } -func (m *DrawResponse) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_DrawResponse.Unmarshal(m, b) -} -func (m *DrawResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_DrawResponse.Marshal(b, m, deterministic) -} -func (m *DrawResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_DrawResponse.Merge(m, src) -} -func (m *DrawResponse) XXX_Size() int { - return xxx_messageInfo_DrawResponse.Size(m) -} -func (m *DrawResponse) XXX_DiscardUnknown() { - xxx_messageInfo_DrawResponse.DiscardUnknown(m) +type LengthRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields } -var xxx_messageInfo_DrawResponse proto.InternalMessageInfo - -func init() { - proto.RegisterEnum("Layer", Layer_name, Layer_value) - proto.RegisterType((*FrameData)(nil), "FrameData") - proto.RegisterType((*FrameBuffer)(nil), "FrameBuffer") - proto.RegisterType((*FrameSequence)(nil), "FrameSequence") - proto.RegisterType((*DrawResponse)(nil), "DrawResponse") +func (x *LengthRequest) Reset() { + *x = LengthRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_framebuffer_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } } -func init() { proto.RegisterFile("framebuffer.proto", fileDescriptor_4476fbda566a3634) } +func (x *LengthRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} -var fileDescriptor_4476fbda566a3634 = []byte{ - // 349 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x92, 0x4f, 0x6f, 0xaa, 0x40, - 0x14, 0xc5, 0xe5, 0x29, 0xbc, 0xc7, 0x55, 0xcc, 0x78, 0xf3, 0x16, 0xe4, 0xc5, 0x05, 0x21, 0x6f, - 0x41, 0x6d, 0xa5, 0x8a, 0xb5, 0x7f, 0x96, 0xd6, 0x7f, 0x25, 0x21, 0x90, 0x8c, 0xae, 0xba, 0x69, - 0xd0, 0x0e, 0x89, 0xa9, 0x8a, 0x05, 0x4c, 0xd3, 0x6f, 0xd9, 0x8f, 0xd4, 0xcc, 0xd8, 0xd8, 0x31, - 0xdd, 0x9d, 0xdf, 0xb9, 0x97, 0x93, 0xcb, 0xc9, 0x40, 0x23, 0xc9, 0xe2, 0x0d, 0x5b, 0xec, 0x93, - 0x84, 0x65, 0xee, 0x2e, 0x4b, 0x8b, 0xd4, 0xee, 0x81, 0x3e, 0xe1, 0xe6, 0x28, 0x2e, 0x62, 0x44, - 0xa8, 0x3c, 0xa7, 0x45, 0x6e, 0x2a, 0x56, 0xd9, 0xf9, 0x4d, 0x85, 0xe6, 0x5e, 0xb2, 0x5a, 0xaf, - 0xcd, 0x5f, 0x96, 0xc2, 0x3d, 0xae, 0xed, 0x17, 0xa8, 0x8a, 0x8f, 0xee, 0x45, 0x12, 0x5a, 0xa0, - 0x8a, 0x60, 0x53, 0xb1, 0x14, 0xa7, 0xea, 0x81, 0x7b, 0x4c, 0xa4, 0x87, 0x01, 0x36, 0x41, 0x2f, - 0x56, 0x1b, 0x96, 0x17, 0xf1, 0x66, 0x67, 0x96, 0x45, 0xd2, 0xb7, 0x81, 0x4d, 0x50, 0xd7, 0xf1, - 0x3b, 0xcb, 0xcc, 0x8a, 0xa5, 0x38, 0x75, 0x4f, 0x73, 0x03, 0x4e, 0xf4, 0x60, 0xda, 0x7d, 0x30, - 0x44, 0xde, 0x8c, 0xbd, 0xee, 0xd9, 0x76, 0xc9, 0xf0, 0x3f, 0x68, 0x22, 0xf5, 0x70, 0x67, 0xd5, - 0xab, 0xb9, 0xd2, 0x31, 0xf4, 0x6b, 0x66, 0xd7, 0xa1, 0x36, 0xca, 0xe2, 0x37, 0xca, 0xf2, 0x5d, - 0xba, 0xcd, 0x59, 0xeb, 0x43, 0x01, 0x55, 0xe4, 0xe2, 0x1f, 0xa8, 0x84, 0x51, 0x38, 0x26, 0x25, - 0xd4, 0x41, 0x0d, 0xfc, 0xe9, 0xc3, 0x9c, 0x00, 0x97, 0xc3, 0x28, 0x88, 0x28, 0xf9, 0x8b, 0x0d, - 0x30, 0xc2, 0x68, 0xee, 0x4f, 0xfc, 0xe1, 0x60, 0xee, 0x47, 0xe1, 0x8c, 0x3c, 0xa2, 0x01, 0xfa, - 0x74, 0x1c, 0x8e, 0xe9, 0x20, 0x78, 0xea, 0x10, 0x47, 0xc6, 0x2e, 0x39, 0x93, 0xd1, 0x23, 0x2d, - 0x19, 0x7b, 0xe4, 0x5c, 0xc6, 0x2b, 0x72, 0x21, 0x63, 0x9f, 0xb4, 0x65, 0xbc, 0x26, 0xae, 0x8c, - 0x37, 0xe4, 0x52, 0xc6, 0x5b, 0xd2, 0x91, 0xf1, 0x8e, 0x74, 0xbd, 0x25, 0x68, 0xfc, 0x17, 0x59, - 0x86, 0x2d, 0xd0, 0xb9, 0x12, 0x3d, 0xe0, 0x49, 0x1f, 0xff, 0x0c, 0x57, 0xae, 0xc1, 0x2e, 0x61, - 0x1b, 0xe0, 0xb8, 0x9b, 0x63, 0xdd, 0x3d, 0x29, 0xf7, 0xc7, 0xfa, 0x42, 0x13, 0xef, 0xa4, 0xf7, - 0x19, 0x00, 0x00, 0xff, 0xff, 0xb6, 0x99, 0xbe, 0xf0, 0x3c, 0x02, 0x00, 0x00, +func (*LengthRequest) ProtoMessage() {} + +func (x *LengthRequest) ProtoReflect() protoreflect.Message { + mi := &file_framebuffer_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LengthRequest.ProtoReflect.Descriptor instead. +func (*LengthRequest) Descriptor() ([]byte, []int) { + return file_framebuffer_proto_rawDescGZIP(), []int{4} +} + +type LengthResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Length uint32 `protobuf:"fixed32,1,opt,name=length,proto3" json:"length,omitempty"` +} + +func (x *LengthResponse) Reset() { + *x = LengthResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_framebuffer_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LengthResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LengthResponse) ProtoMessage() {} + +func (x *LengthResponse) ProtoReflect() protoreflect.Message { + mi := &file_framebuffer_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LengthResponse.ProtoReflect.Descriptor instead. +func (*LengthResponse) Descriptor() ([]byte, []int) { + return file_framebuffer_proto_rawDescGZIP(), []int{5} +} + +func (x *LengthResponse) GetLength() uint32 { + if x != nil { + return x.Length + } + return 0 +} + +var File_framebuffer_proto protoreflect.FileDescriptor + +var file_framebuffer_proto_rawDesc = []byte{ + 0x0a, 0x11, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x22, 0x1f, 0x0a, 0x09, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x12, 0x12, 0x0a, 0x04, 0x64, 0x6f, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x07, 0x52, 0x04, + 0x64, 0x6f, 0x74, 0x73, 0x22, 0x6b, 0x0a, 0x0b, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x42, 0x75, 0x66, + 0x66, 0x65, 0x72, 0x12, 0x20, 0x0a, 0x05, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x05, + 0x66, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x07, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x12, 0x1c, 0x0a, 0x05, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x06, 0x2e, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x52, 0x05, 0x6c, 0x61, 0x79, 0x65, + 0x72, 0x22, 0x49, 0x0a, 0x0d, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x71, 0x75, 0x65, 0x6e, + 0x63, 0x65, 0x12, 0x24, 0x0a, 0x06, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, + 0x52, 0x06, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x6f, 0x6f, 0x70, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x6c, 0x6f, 0x6f, 0x70, 0x22, 0x0e, 0x0a, 0x0c, + 0x44, 0x72, 0x61, 0x77, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x0f, 0x0a, 0x0d, + 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x28, 0x0a, + 0x0e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x07, 0x52, + 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x2a, 0x48, 0x0a, 0x05, 0x4c, 0x61, 0x79, 0x65, 0x72, + 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x4c, 0x49, + 0x47, 0x48, 0x54, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x10, 0x02, + 0x12, 0x11, 0x0a, 0x0d, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, + 0x53, 0x10, 0x08, 0x12, 0x0c, 0x0a, 0x08, 0x50, 0x52, 0x49, 0x4f, 0x52, 0x49, 0x54, 0x59, 0x10, + 0x09, 0x32, 0x93, 0x01, 0x0a, 0x06, 0x44, 0x72, 0x61, 0x77, 0x65, 0x72, 0x12, 0x2a, 0x0a, 0x09, + 0x44, 0x72, 0x61, 0x77, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x0c, 0x2e, 0x46, 0x72, 0x61, 0x6d, + 0x65, 0x42, 0x75, 0x66, 0x66, 0x65, 0x72, 0x1a, 0x0d, 0x2e, 0x44, 0x72, 0x61, 0x77, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x2d, 0x0a, 0x0a, 0x44, 0x72, 0x61, 0x77, + 0x46, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x0e, 0x2e, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x53, 0x65, + 0x71, 0x75, 0x65, 0x6e, 0x63, 0x65, 0x1a, 0x0d, 0x2e, 0x44, 0x72, 0x61, 0x77, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x2e, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x4c, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0x12, 0x0e, 0x2e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x4c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_framebuffer_proto_rawDescOnce sync.Once + file_framebuffer_proto_rawDescData = file_framebuffer_proto_rawDesc +) + +func file_framebuffer_proto_rawDescGZIP() []byte { + file_framebuffer_proto_rawDescOnce.Do(func() { + file_framebuffer_proto_rawDescData = protoimpl.X.CompressGZIP(file_framebuffer_proto_rawDescData) + }) + return file_framebuffer_proto_rawDescData +} + +var file_framebuffer_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_framebuffer_proto_msgTypes = make([]protoimpl.MessageInfo, 6) +var file_framebuffer_proto_goTypes = []interface{}{ + (Layer)(0), // 0: Layer + (*FrameData)(nil), // 1: FrameData + (*FrameBuffer)(nil), // 2: FrameBuffer + (*FrameSequence)(nil), // 3: FrameSequence + (*DrawResponse)(nil), // 4: DrawResponse + (*LengthRequest)(nil), // 5: LengthRequest + (*LengthResponse)(nil), // 6: LengthResponse +} +var file_framebuffer_proto_depIdxs = []int32{ + 1, // 0: FrameBuffer.frame:type_name -> FrameData + 0, // 1: FrameBuffer.layer:type_name -> Layer + 2, // 2: FrameSequence.frames:type_name -> FrameBuffer + 2, // 3: Drawer.DrawFrame:input_type -> FrameBuffer + 3, // 4: Drawer.DrawFrames:input_type -> FrameSequence + 5, // 5: Drawer.GetLength:input_type -> LengthRequest + 4, // 6: Drawer.DrawFrame:output_type -> DrawResponse + 4, // 7: Drawer.DrawFrames:output_type -> DrawResponse + 6, // 8: Drawer.GetLength:output_type -> LengthResponse + 6, // [6:9] is the sub-list for method output_type + 3, // [3:6] is the sub-list for method input_type + 3, // [3:3] is the sub-list for extension type_name + 3, // [3:3] is the sub-list for extension extendee + 0, // [0:3] is the sub-list for field type_name +} + +func init() { file_framebuffer_proto_init() } +func file_framebuffer_proto_init() { + if File_framebuffer_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_framebuffer_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FrameData); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_framebuffer_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FrameBuffer); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_framebuffer_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*FrameSequence); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_framebuffer_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DrawResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_framebuffer_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LengthRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_framebuffer_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LengthResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_framebuffer_proto_rawDesc, + NumEnums: 1, + NumMessages: 6, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_framebuffer_proto_goTypes, + DependencyIndexes: file_framebuffer_proto_depIdxs, + EnumInfos: file_framebuffer_proto_enumTypes, + MessageInfos: file_framebuffer_proto_msgTypes, + }.Build() + File_framebuffer_proto = out.File + file_framebuffer_proto_rawDesc = nil + file_framebuffer_proto_goTypes = nil + file_framebuffer_proto_depIdxs = nil } // Reference imports to suppress errors if they are not otherwise used. var _ context.Context -var _ grpc.ClientConn +var _ grpc.ClientConnInterface // This is a compile-time assertion to ensure that this generated file // is compatible with the grpc package it is being compiled against. -const _ = grpc.SupportPackageIsVersion4 +const _ = grpc.SupportPackageIsVersion6 // DrawerClient is the client API for Drawer service. // @@ -332,13 +588,15 @@ type DrawerClient interface { DrawFrame(ctx context.Context, in *FrameBuffer, opts ...grpc.CallOption) (*DrawResponse, error) // DrawFrames draws a series of frames DrawFrames(ctx context.Context, in *FrameSequence, opts ...grpc.CallOption) (*DrawResponse, error) + // GetLength returns the length of the strip + GetLength(ctx context.Context, in *LengthRequest, opts ...grpc.CallOption) (*LengthResponse, error) } type drawerClient struct { - cc *grpc.ClientConn + cc grpc.ClientConnInterface } -func NewDrawerClient(cc *grpc.ClientConn) DrawerClient { +func NewDrawerClient(cc grpc.ClientConnInterface) DrawerClient { return &drawerClient{cc} } @@ -360,12 +618,37 @@ func (c *drawerClient) DrawFrames(ctx context.Context, in *FrameSequence, opts . return out, nil } +func (c *drawerClient) GetLength(ctx context.Context, in *LengthRequest, opts ...grpc.CallOption) (*LengthResponse, error) { + out := new(LengthResponse) + err := c.cc.Invoke(ctx, "/Drawer/GetLength", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // DrawerServer is the server API for Drawer service. type DrawerServer interface { // DrawFrame draws one frame DrawFrame(context.Context, *FrameBuffer) (*DrawResponse, error) // DrawFrames draws a series of frames DrawFrames(context.Context, *FrameSequence) (*DrawResponse, error) + // GetLength returns the length of the strip + GetLength(context.Context, *LengthRequest) (*LengthResponse, error) +} + +// UnimplementedDrawerServer can be embedded to have forward compatible implementations. +type UnimplementedDrawerServer struct { +} + +func (*UnimplementedDrawerServer) DrawFrame(context.Context, *FrameBuffer) (*DrawResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method DrawFrame not implemented") +} +func (*UnimplementedDrawerServer) DrawFrames(context.Context, *FrameSequence) (*DrawResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method DrawFrames not implemented") +} +func (*UnimplementedDrawerServer) GetLength(context.Context, *LengthRequest) (*LengthResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetLength not implemented") } func RegisterDrawerServer(s *grpc.Server, srv DrawerServer) { @@ -408,6 +691,24 @@ func _Drawer_DrawFrames_Handler(srv interface{}, ctx context.Context, dec func(i return interceptor(ctx, in, info, handler) } +func _Drawer_GetLength_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(LengthRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(DrawerServer).GetLength(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/Drawer/GetLength", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(DrawerServer).GetLength(ctx, req.(*LengthRequest)) + } + return interceptor(ctx, in, info, handler) +} + var _Drawer_serviceDesc = grpc.ServiceDesc{ ServiceName: "Drawer", HandlerType: (*DrawerServer)(nil), @@ -420,6 +721,10 @@ var _Drawer_serviceDesc = grpc.ServiceDesc{ MethodName: "DrawFrames", Handler: _Drawer_DrawFrames_Handler, }, + { + MethodName: "GetLength", + Handler: _Drawer_GetLength_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "framebuffer.proto", diff --git a/framebuffer/framebuffer.proto b/framebuffer/framebuffer.proto index d787e39..80341dc 100644 --- a/framebuffer/framebuffer.proto +++ b/framebuffer/framebuffer.proto @@ -2,40 +2,23 @@ syntax = "proto3"; /* Layer defines some default layers for compositing animations onto for - various purposes, and also defines some generic layers. Each service - should be allocated a unique enum eventually. - - In the future, this system should be replaced by a configuration file - that assigns priorities to each service. + various purposes. */ enum Layer { NONE = 0; // Well-known layers - LIGHT = 10; - COLOR = 20; - NOTIFICATIONS = 90; - // Public layers - GENERAL_0 = 40; - GENERAL_1 = 41; - GENERAL_2 = 42; - GENERAL_3 = 43; - GENERAL_4 = 44; - GENERAL_5 = 45; - GENERAL_6 = 46; - GENERAL_7 = 47; - GENERAL_8 = 48; - GENERAL_9 = 49; + LIGHT = 1; + COLOR = 2; + NOTIFICATIONS = 8; + PRIORITY = 9; } /* - FrameData represents either an array of dots or a fixed fill color to apply - to all dots. Having two use cases makes it easier for applications to - draw solid fill colors. + FrameData represents an ARGB array of dots. */ message FrameData { // ARGB repeated fixed32 dots = 1; - fixed32 fill = 2; } /* @@ -45,8 +28,10 @@ message FrameData { */ message FrameBuffer { FrameData frame = 1; - fixed32 timestamp = 3; - Layer layer = 4; + // Time offset from start of frame in milliseconds + fixed32 timestamp = 2; + // Layer to apply the frame to + Layer layer = 3; } /* @@ -59,15 +44,26 @@ message FrameBuffer { */ message FrameSequence { repeated FrameBuffer frames = 1; + // Number of times to loop the sequence + int32 loop = 2; } message DrawResponse { } +message LengthRequest { +} + +message LengthResponse { + fixed32 length = 1; +} + service Drawer { // DrawFrame draws one frame rpc DrawFrame (FrameBuffer) returns (DrawResponse) {} // DrawFrames draws a series of frames rpc DrawFrames (FrameSequence) returns (DrawResponse) {} + // GetLength returns the length of the strip + rpc GetLength (LengthRequest) returns (LengthResponse) {} } diff --git a/go.mod b/go.mod index 2fd8b4a..9d60a22 100644 --- a/go.mod +++ b/go.mod @@ -2,10 +2,9 @@ module github.com/serverwentdown/leet go 1.12 -replace github.com/rpi-ws281x/rpi-ws281x-go => github.com/serverwentdown/rpi-ws281x-go v1.0.4 - require ( - github.com/golang/protobuf v1.3.1 - github.com/rpi-ws281x/rpi-ws281x-go v0.0.0-00010101000000-000000000000 - google.golang.org/grpc v1.19.1 + github.com/golang/protobuf v1.4.0 + github.com/rpi-ws281x/rpi-ws281x-go v1.0.5 + google.golang.org/grpc v1.29.0 + google.golang.org/protobuf v1.21.0 ) diff --git a/go.sum b/go.sum index e62b8d9..d29ffcc 100644 --- a/go.sum +++ b/go.sum @@ -1,6 +1,13 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= @@ -8,23 +15,77 @@ github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0 h1:aRz0NBceriICVtjhCgKkDvl+RudKu1CT6h0ZvUTrNfE= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0 h1:oOuy+ugB+P/kBdUnG5QaMXSIyJ1q38wWSojYCb3z5VQ= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/pkg/errors v0.8.0 h1:WdK/asTD0HN+q6hsWO3/vpuAkAr+tw6aNJNDFFf0+qw= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/rpi-ws281x/rpi-ws281x-go v1.0.5 h1:XZ4S5je+Sj3PKbTKGcsg92AhThZHQ0jnYG5YFqRU3YQ= +github.com/rpi-ws281x/rpi-ws281x-go v1.0.5/go.mod h1:Swt7ePLxEtCqQvFZZPHsnfstkaVRVICwC8Di6SdeO30= github.com/serverwentdown/rpi-ws281x-go v1.0.4 h1:Ti+oxrYcU/lp0NjBl/y0EMcJp9gqvKJka2zFSCM2r2c= github.com/serverwentdown/rpi-ws281x-go v1.0.4/go.mod h1:NJ9ZCa/NPRHHb841qr+G9IEJe1J4aOgBMwkf9xyDnmk= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d h1:g9qWBGx4puODJTMVyoPrpoxPFgVGd+z1DZwjfRu4d0I= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a h1:oWX7TPOiFAMXLq8o0ikBYfCJVlRHBcsciT5bXOrH628= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522 h1:Ve1ORMCxvRmSXBwJK+t3Oy+V2vRW2OetUQBq4rJIkZE= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8 h1:Nw54tB0rB7hY/N0NQvRW8DG4Yk3Q6T9cu9RcFQDu1tc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55 h1:gSJIx1SDwno+2ElGhA4+qG2zF97qiUzTM+rQ0klBOcE= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.19.1 h1:TrBcJ1yqAl1G++wO39nD/qtgpsW9/1+QGrluyMGEYgM= google.golang.org/grpc v1.19.1/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.29.0 h1:2pJjwYOdkZ9HlN4sWRYBg9ttH5bCOlsueaM+b/oYjwo= +google.golang.org/grpc v1.29.0/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0 h1:qdOKuR/EIArgaWNjetjgTzgVTAZ+S/WXVrq9HW9zimw= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/main.go b/main.go index 8167848..0f2c9ab 100644 --- a/main.go +++ b/main.go @@ -9,7 +9,7 @@ import ( ) const listen = ":5000" -const length = 287 +const length = 275 func main() { log.Print("starting server") @@ -20,7 +20,7 @@ func main() { } s := grpc.NewServer() - drawer, err := NewDrawer(287) + drawer, err := NewDrawer(length) if err != nil { log.Fatalf("failed to setup WS281x library: %v", err) } diff --git a/server.go b/server.go index 44387de..d99ab90 100644 --- a/server.go +++ b/server.go @@ -5,6 +5,7 @@ package main // import "github.com/serverwentdown/leet" import ( "context" "log" + "time" "github.com/serverwentdown/leet/framebuffer" ) @@ -21,12 +22,14 @@ func NewServer(drawer *Drawer) *Server { } func (s *Server) DrawFrame(ctx context.Context, in *framebuffer.FrameBuffer) (*framebuffer.DrawResponse, error) { - log.Print("DrawFrame") - s.drawer.SetLayerOrFill(int32(in.Layer), in.Frame.Dots, in.Frame.Fill) + s.drawer.SetLayer(int32(in.Layer), in.Frame.Dots) + timeDrawStart := time.Now() err := s.drawer.Draw() + timeDrawEnd := time.Now() if err != nil { return nil, err } + log.Printf("Draw took %d milliseconds", timeDrawEnd.Sub(timeDrawStart)/1000/1000) return &framebuffer.DrawResponse{}, nil } @@ -34,3 +37,10 @@ func (s *Server) DrawFrames(ctx context.Context, in *framebuffer.FrameSequence) log.Print("Received FrameSequence, but not implemented") return &framebuffer.DrawResponse{}, nil } + +func (s *Server) GetLength(ctx context.Context, in *framebuffer.LengthRequest) (*framebuffer.LengthResponse, error) { + length := uint32(s.drawer.Length) + return &framebuffer.LengthResponse{ + Length: length, + }, nil +}