syntax = "proto3"; package remoteio; import "google/protobuf/timestamp.proto"; message DigitalState { uint32 pin = 1; bool state = 2; google.protobuf.Timestamp Timestamp = 3; } message AnalogState { uint32 pin = 1; uint32 value = 2; google.protobuf.Timestamp Timestamp = 3; } message PinModeMessage { enum PortType { DIGITAL_IN = 0; DIGITAL_OUT = 1; ANALOG_IN = 2; ANALOG_OUT = 3; } uint32 pin = 1; PortType mode = 2; google.protobuf.Timestamp Timestamp = 3; } message SPIMessage{ uint32 speed = 1; uint32 cs = 2; uint32 mode = 3; repeated uint32 bytes = 4; google.protobuf.Timestamp Timestamp = 5; } message I2CMessage{ uint32 addr = 1; repeated uint32 bytes = 2; google.protobuf.Timestamp Timestamp = 3; } message InterruptMessage{ uint32 pin = 1; enum Edge{ RISING_EDGE = 0; FALLING_EDGE = 1; BOTH_EDGE = 2; } Edge triggerType = 2; } service RemoteIO { rpc pinMode(PinModeMessage) returns (PinModeMessage){}; rpc digitalRead(DigitalState) returns (DigitalState){}; rpc digitalWrite(DigitalState) returns (DigitalState){}; rpc analogRead(AnalogState) returns (AnalogState){}; rpc analogWrite(AnalogState) returns (AnalogState){}; rpc spiRead(SPIMessage) returns (SPIMessage){}; rpc spiWrite(SPIMessage) returns (SPIMessage){}; rpc i2cRead(I2CMessage) returns (I2CMessage){}; rpc i2cWrite(I2CMessage) returns (I2CMessage){}; rpc subscribeInterrupt(InterruptMessage) returns (stream DigitalState){}; }