Added test RPC server + client; started LED module

This commit is contained in:
MaMe82 2018-04-30 22:43:15 +00:00
parent a95f493fe2
commit 86021e193a
7 changed files with 927 additions and 0 deletions

View File

@ -0,0 +1,34 @@
package main
import (
"log"
"time"
"reflect"
"golang.org/x/net/context"
"google.golang.org/grpc"
pb "../proto"
)
const (
address = "localhost:50051"
)
func main() {
// Set up a connection to the server.
conn, err := grpc.Dial(address, grpc.WithInsecure())
if err != nil {
log.Fatalf("did not connect: %v", err)
}
defer conn.Close()
c := pb.NewP4WNP1Client(conn)
// Contact the server and print out its response.
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel()
r, err := c.GetGadgetSettings(ctx, &pb.Empty{})
if err != nil {
log.Fatalf("could not get GadgetSettings: %v", err)
}
log.Printf("USB Settings %s: %+v", reflect.TypeOf(*r), *r)
}

87
P4wnP1_service/service.go Normal file
View File

@ -0,0 +1,87 @@
package main
import (
"log"
"net"
"encoding/json"
"golang.org/x/net/context"
"google.golang.org/grpc"
pb "../proto"
"google.golang.org/grpc/reflection"
)
type server struct{}
//Attach handler function implementing the "GetGadgetSettings" interface to server
func (s *server) GetGadgetSettings(context.Context, *pb.Empty) (*pb.GadgetSettings, error) {
usbset := &pb.GadgetSettings {
Pid: "0x1337",
Vid: "0x1222",
Manufacturer: "MaMe82",
Serial: "deadbeef13371337",
Product: "P4wnP1 by MaMe82",
Use_RNDIS: false,
Use_CDC_ECM: true,
Use_HID_KEYBOARD: false,
Use_HID_MOUSE: false,
Use_HID_RAW: false,
Use_UMS: false,
Use_SERIAL: false,
RndisSettings: &pb.GadgetSettingsEthernet { HostAddr: "11:22:33:44:55:66", DevAddr: "66:55:44:33:22:11", },
CdcEcmSettings: &pb.GadgetSettingsEthernet { HostAddr: "11:22:33:54:76:98", DevAddr: "66:55:44:98:76:54", },
}
j_usbset, _ := json.Marshal(usbset)
log.Printf("Gadget settings requested %v", string(j_usbset))
return usbset, nil
}
//Attach handler function implementing the "SetGadgetSettings" interface to server
func (s *server) SetGadgetSettings(context.Context, *pb.GadgetSettings) (*pb.Error, error) {
return &pb.Error{Err: 0}, nil
}
//Attach handler function implementing the "StartGadget" interface to server
func (s *server) StartGadget(context.Context, *pb.Empty) (*pb.Error, error) {
return &pb.Error{Err: 0}, nil
}
//Attach handler function implementing the "StopGadget" interface to server
func (s *server) StopGadget(context.Context, *pb.Empty) (*pb.Error, error) {
return &pb.Error{Err: 0}, nil
}
func (s *server) GetLEDSettings(context.Context, *pb.Empty) (*pb.LEDSettings, error) {
led_settings := &pb.LEDSettings{}
return led_settings, nil
}
func (s *server) SetLEDSettings(context.Context, *pb.LEDSettings) (*pb.Error, error) {
return &pb.Error{Err: 0}, nil
}
func start_rpc_server(host string, port string) {
listen_address := host+":"+port
//Open TCP listener
log.Printf("P4wnP1 RPC server lsitening on " + listen_address)
lis, err := net.Listen("tcp", listen_address)
if err != nil {
log.Fatalf("failed to listen: %v", err)
}
//Create gRPC Server
s := grpc.NewServer()
pb.RegisterP4WNP1Server(s, &server{})
// Register reflection service on gRPC server.
reflection.Register(s)
if err := s.Serve(lis); err != nil {
log.Fatalf("failed to serve: %v", err)
}
}
func main() {
start_rpc_server("127.0.0.1", "50051")
}

2
build_proto.sh Executable file
View File

@ -0,0 +1,2 @@
#!/bin/bash
protoc -I proto/ proto/grpc.proto --go_out=plugins=grpc:proto

66
core/led.go Normal file
View File

@ -0,0 +1,66 @@
//package led
package main
import(
"os"
"log"
"io/ioutil"
"time"
pb "../proto"
)
const (
LED_TRIGGER_PATH = "/sys/class/leds/led0/trigger"
LED_BRIGHTNESS_PATH = "/sys/class/leds/led0/brightness"
LED_TRIGGER_MANUAL = "none"
LED_ON = "0"
LED_OFF = "1"
LED_DELAY_ON = 200 * time.Millisecond
LED_DELAY_OFF = 200 * time.Millisecond
LED_DELAY_PAUSE = 500 * time.Millisecond
)
func initLed(led_on bool) (error) {
//set trigger of LED to manual
log.Println("Setting LED to manual trigger ...")
ioutil.WriteFile(LED_TRIGGER_PATH, []byte(LED_TRIGGER_MANUAL), os.ModePerm)
if led_on {
log.Println("Setting LED to ON ...")
ioutil.WriteFile(LED_BRIGHTNESS_PATH, []byte(LED_ON), os.ModePerm)
} else {
log.Println("Setting LED to OFF ...")
ioutil.WriteFile(LED_BRIGHTNESS_PATH, []byte(LED_OFF), os.ModePerm)
}
return nil
}
func led_loop() {
blink_count := 10
for {
for i := 0; i <= blink_count; i++ {
ioutil.WriteFile(LED_BRIGHTNESS_PATH, []byte(LED_ON), os.ModePerm)
time.Sleep(LED_DELAY_ON)
ioutil.WriteFile(LED_BRIGHTNESS_PATH, []byte(LED_OFF), os.ModePerm)
time.Sleep(LED_DELAY_OFF)
}
time.Sleep(LED_DELAY_PAUSE)
}
}
func setLed(s pb.LEDSettings) (error) {
return nil
}
func main() {
initLed(false)
log.Println("testing led")
settings := pb.LEDSettings{}
setLed(settings)
go led_loop()
time.Sleep(10 * time.Second)
}

View File

@ -5,3 +5,4 @@ sudo tar -C /usr/local -xzf go1.9.linux-armv6l.tar.gz
export PATH=$PATH:/usr/local/go/bin # put into ~/.profile
echo export PATH=$PATH:/usr/local/go/bin >> ~/.profile
sudo bash -c 'echo export PATH=\$PATH:/usr/local/go/bin >> ~/.profile'
go get google.golang.org/grpc

667
proto/grpc.pb.go Normal file
View File

@ -0,0 +1,667 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// source: grpc.proto
/*
Package P4wnP1_grpc is a generated protocol buffer package.
It is generated from these files:
grpc.proto
It has these top-level messages:
LEDSettings
GadgetSettingsEthernet
GadgetSettings
WiFiSettings
Error
Empty
*/
package P4wnP1_grpc
import proto "github.com/golang/protobuf/proto"
import fmt "fmt"
import math "math"
import (
context "golang.org/x/net/context"
grpc "google.golang.org/grpc"
)
// Reference imports to suppress errors if they are not otherwise used.
var _ = proto.Marshal
var _ = fmt.Errorf
var _ = math.Inf
// 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.ProtoPackageIsVersion2 // please upgrade the proto package
type WiFiSettings_Mode int32
const (
WiFiSettings_AP WiFiSettings_Mode = 0
WiFiSettings_STA WiFiSettings_Mode = 1
WiFiSettings_STA_FAILOVER_AP WiFiSettings_Mode = 2
)
var WiFiSettings_Mode_name = map[int32]string{
0: "AP",
1: "STA",
2: "STA_FAILOVER_AP",
}
var WiFiSettings_Mode_value = map[string]int32{
"AP": 0,
"STA": 1,
"STA_FAILOVER_AP": 2,
}
func (x WiFiSettings_Mode) String() string {
return proto.EnumName(WiFiSettings_Mode_name, int32(x))
}
func (WiFiSettings_Mode) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{3, 0} }
type WiFiSettings_APAuthMode int32
const (
WiFiSettings_WPA2_PSK WiFiSettings_APAuthMode = 0
WiFiSettings_OPEN WiFiSettings_APAuthMode = 1
)
var WiFiSettings_APAuthMode_name = map[int32]string{
0: "WPA2_PSK",
1: "OPEN",
}
var WiFiSettings_APAuthMode_value = map[string]int32{
"WPA2_PSK": 0,
"OPEN": 1,
}
func (x WiFiSettings_APAuthMode) String() string {
return proto.EnumName(WiFiSettings_APAuthMode_name, int32(x))
}
func (WiFiSettings_APAuthMode) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{3, 1} }
type LEDSettings struct {
BlinkCount uint32 `protobuf:"varint,1,opt,name=blink_count,json=blinkCount" json:"blink_count,omitempty"`
}
func (m *LEDSettings) Reset() { *m = LEDSettings{} }
func (m *LEDSettings) String() string { return proto.CompactTextString(m) }
func (*LEDSettings) ProtoMessage() {}
func (*LEDSettings) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
func (m *LEDSettings) GetBlinkCount() uint32 {
if m != nil {
return m.BlinkCount
}
return 0
}
type GadgetSettingsEthernet struct {
HostAddr string `protobuf:"bytes,1,opt,name=host_addr,json=hostAddr" json:"host_addr,omitempty"`
DevAddr string `protobuf:"bytes,2,opt,name=dev_addr,json=devAddr" json:"dev_addr,omitempty"`
}
func (m *GadgetSettingsEthernet) Reset() { *m = GadgetSettingsEthernet{} }
func (m *GadgetSettingsEthernet) String() string { return proto.CompactTextString(m) }
func (*GadgetSettingsEthernet) ProtoMessage() {}
func (*GadgetSettingsEthernet) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
func (m *GadgetSettingsEthernet) GetHostAddr() string {
if m != nil {
return m.HostAddr
}
return ""
}
func (m *GadgetSettingsEthernet) GetDevAddr() string {
if m != nil {
return m.DevAddr
}
return ""
}
type GadgetSettings struct {
Vid string `protobuf:"bytes,1,opt,name=vid" json:"vid,omitempty"`
Pid string `protobuf:"bytes,2,opt,name=pid" json:"pid,omitempty"`
Manufacturer string `protobuf:"bytes,3,opt,name=manufacturer" json:"manufacturer,omitempty"`
Product string `protobuf:"bytes,4,opt,name=product" json:"product,omitempty"`
Serial string `protobuf:"bytes,5,opt,name=serial" json:"serial,omitempty"`
Use_CDC_ECM bool `protobuf:"varint,6,opt,name=use_CDC_ECM,json=useCDCECM" json:"use_CDC_ECM,omitempty"`
Use_RNDIS bool `protobuf:"varint,7,opt,name=use_RNDIS,json=useRNDIS" json:"use_RNDIS,omitempty"`
Use_HID_KEYBOARD bool `protobuf:"varint,8,opt,name=use_HID_KEYBOARD,json=useHIDKEYBOARD" json:"use_HID_KEYBOARD,omitempty"`
Use_HID_MOUSE bool `protobuf:"varint,9,opt,name=use_HID_MOUSE,json=useHIDMOUSE" json:"use_HID_MOUSE,omitempty"`
Use_HID_RAW bool `protobuf:"varint,10,opt,name=use_HID_RAW,json=useHIDRAW" json:"use_HID_RAW,omitempty"`
Use_UMS bool `protobuf:"varint,11,opt,name=use_UMS,json=useUMS" json:"use_UMS,omitempty"`
Use_SERIAL bool `protobuf:"varint,12,opt,name=use_SERIAL,json=useSERIAL" json:"use_SERIAL,omitempty"`
RndisSettings *GadgetSettingsEthernet `protobuf:"bytes,13,opt,name=rndis_settings,json=rndisSettings" json:"rndis_settings,omitempty"`
CdcEcmSettings *GadgetSettingsEthernet `protobuf:"bytes,14,opt,name=cdc_ecm_settings,json=cdcEcmSettings" json:"cdc_ecm_settings,omitempty"`
}
func (m *GadgetSettings) Reset() { *m = GadgetSettings{} }
func (m *GadgetSettings) String() string { return proto.CompactTextString(m) }
func (*GadgetSettings) ProtoMessage() {}
func (*GadgetSettings) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
func (m *GadgetSettings) GetVid() string {
if m != nil {
return m.Vid
}
return ""
}
func (m *GadgetSettings) GetPid() string {
if m != nil {
return m.Pid
}
return ""
}
func (m *GadgetSettings) GetManufacturer() string {
if m != nil {
return m.Manufacturer
}
return ""
}
func (m *GadgetSettings) GetProduct() string {
if m != nil {
return m.Product
}
return ""
}
func (m *GadgetSettings) GetSerial() string {
if m != nil {
return m.Serial
}
return ""
}
func (m *GadgetSettings) GetUse_CDC_ECM() bool {
if m != nil {
return m.Use_CDC_ECM
}
return false
}
func (m *GadgetSettings) GetUse_RNDIS() bool {
if m != nil {
return m.Use_RNDIS
}
return false
}
func (m *GadgetSettings) GetUse_HID_KEYBOARD() bool {
if m != nil {
return m.Use_HID_KEYBOARD
}
return false
}
func (m *GadgetSettings) GetUse_HID_MOUSE() bool {
if m != nil {
return m.Use_HID_MOUSE
}
return false
}
func (m *GadgetSettings) GetUse_HID_RAW() bool {
if m != nil {
return m.Use_HID_RAW
}
return false
}
func (m *GadgetSettings) GetUse_UMS() bool {
if m != nil {
return m.Use_UMS
}
return false
}
func (m *GadgetSettings) GetUse_SERIAL() bool {
if m != nil {
return m.Use_SERIAL
}
return false
}
func (m *GadgetSettings) GetRndisSettings() *GadgetSettingsEthernet {
if m != nil {
return m.RndisSettings
}
return nil
}
func (m *GadgetSettings) GetCdcEcmSettings() *GadgetSettingsEthernet {
if m != nil {
return m.CdcEcmSettings
}
return nil
}
type WiFiSettings struct {
Diasabled bool `protobuf:"varint,1,opt,name=diasabled" json:"diasabled,omitempty"`
Reg string `protobuf:"bytes,2,opt,name=reg" json:"reg,omitempty"`
Mode WiFiSettings_Mode `protobuf:"varint,3,opt,name=mode,enum=P4wnP1_grpc.WiFiSettings_Mode" json:"mode,omitempty"`
ApSsid string `protobuf:"bytes,4,opt,name=ap_ssid,json=apSsid" json:"ap_ssid,omitempty"`
AuthMode WiFiSettings_APAuthMode `protobuf:"varint,5,opt,name=auth_mode,json=authMode,enum=P4wnP1_grpc.WiFiSettings_APAuthMode" json:"auth_mode,omitempty"`
ApChannel uint32 `protobuf:"varint,6,opt,name=ap_channel,json=apChannel" json:"ap_channel,omitempty"`
ApPsk string `protobuf:"bytes,7,opt,name=ap_psk,json=apPsk" json:"ap_psk,omitempty"`
ApHideSsid bool `protobuf:"varint,8,opt,name=ap_hide_ssid,json=apHideSsid" json:"ap_hide_ssid,omitempty"`
ClientSsid string `protobuf:"bytes,9,opt,name=client_ssid,json=clientSsid" json:"client_ssid,omitempty"`
ClientPsk string `protobuf:"bytes,10,opt,name=client_psk,json=clientPsk" json:"client_psk,omitempty"`
DisableNexmon bool `protobuf:"varint,11,opt,name=disable_nexmon,json=disableNexmon" json:"disable_nexmon,omitempty"`
}
func (m *WiFiSettings) Reset() { *m = WiFiSettings{} }
func (m *WiFiSettings) String() string { return proto.CompactTextString(m) }
func (*WiFiSettings) ProtoMessage() {}
func (*WiFiSettings) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} }
func (m *WiFiSettings) GetDiasabled() bool {
if m != nil {
return m.Diasabled
}
return false
}
func (m *WiFiSettings) GetReg() string {
if m != nil {
return m.Reg
}
return ""
}
func (m *WiFiSettings) GetMode() WiFiSettings_Mode {
if m != nil {
return m.Mode
}
return WiFiSettings_AP
}
func (m *WiFiSettings) GetApSsid() string {
if m != nil {
return m.ApSsid
}
return ""
}
func (m *WiFiSettings) GetAuthMode() WiFiSettings_APAuthMode {
if m != nil {
return m.AuthMode
}
return WiFiSettings_WPA2_PSK
}
func (m *WiFiSettings) GetApChannel() uint32 {
if m != nil {
return m.ApChannel
}
return 0
}
func (m *WiFiSettings) GetApPsk() string {
if m != nil {
return m.ApPsk
}
return ""
}
func (m *WiFiSettings) GetApHideSsid() bool {
if m != nil {
return m.ApHideSsid
}
return false
}
func (m *WiFiSettings) GetClientSsid() string {
if m != nil {
return m.ClientSsid
}
return ""
}
func (m *WiFiSettings) GetClientPsk() string {
if m != nil {
return m.ClientPsk
}
return ""
}
func (m *WiFiSettings) GetDisableNexmon() bool {
if m != nil {
return m.DisableNexmon
}
return false
}
type Error struct {
Err int32 `protobuf:"varint,1,opt,name=err" json:"err,omitempty"`
}
func (m *Error) Reset() { *m = Error{} }
func (m *Error) String() string { return proto.CompactTextString(m) }
func (*Error) ProtoMessage() {}
func (*Error) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} }
func (m *Error) GetErr() int32 {
if m != nil {
return m.Err
}
return 0
}
type Empty struct {
}
func (m *Empty) Reset() { *m = Empty{} }
func (m *Empty) String() string { return proto.CompactTextString(m) }
func (*Empty) ProtoMessage() {}
func (*Empty) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} }
func init() {
proto.RegisterType((*LEDSettings)(nil), "P4wnP1_grpc.LEDSettings")
proto.RegisterType((*GadgetSettingsEthernet)(nil), "P4wnP1_grpc.GadgetSettingsEthernet")
proto.RegisterType((*GadgetSettings)(nil), "P4wnP1_grpc.GadgetSettings")
proto.RegisterType((*WiFiSettings)(nil), "P4wnP1_grpc.WiFiSettings")
proto.RegisterType((*Error)(nil), "P4wnP1_grpc.Error")
proto.RegisterType((*Empty)(nil), "P4wnP1_grpc.Empty")
proto.RegisterEnum("P4wnP1_grpc.WiFiSettings_Mode", WiFiSettings_Mode_name, WiFiSettings_Mode_value)
proto.RegisterEnum("P4wnP1_grpc.WiFiSettings_APAuthMode", WiFiSettings_APAuthMode_name, WiFiSettings_APAuthMode_value)
}
// Reference imports to suppress errors if they are not otherwise used.
var _ context.Context
var _ grpc.ClientConn
// 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
// Client API for P4WNP1 service
type P4WNP1Client interface {
GetGadgetSettings(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*GadgetSettings, error)
SetGadgetSettings(ctx context.Context, in *GadgetSettings, opts ...grpc.CallOption) (*Error, error)
GetLEDSettings(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*LEDSettings, error)
SetLEDSettings(ctx context.Context, in *LEDSettings, opts ...grpc.CallOption) (*Error, error)
StopGadget(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*Error, error)
StartGadget(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*Error, error)
}
type p4WNP1Client struct {
cc *grpc.ClientConn
}
func NewP4WNP1Client(cc *grpc.ClientConn) P4WNP1Client {
return &p4WNP1Client{cc}
}
func (c *p4WNP1Client) GetGadgetSettings(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*GadgetSettings, error) {
out := new(GadgetSettings)
err := grpc.Invoke(ctx, "/P4wnP1_grpc.P4WNP1/GetGadgetSettings", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *p4WNP1Client) SetGadgetSettings(ctx context.Context, in *GadgetSettings, opts ...grpc.CallOption) (*Error, error) {
out := new(Error)
err := grpc.Invoke(ctx, "/P4wnP1_grpc.P4WNP1/SetGadgetSettings", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *p4WNP1Client) GetLEDSettings(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*LEDSettings, error) {
out := new(LEDSettings)
err := grpc.Invoke(ctx, "/P4wnP1_grpc.P4WNP1/GetLEDSettings", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *p4WNP1Client) SetLEDSettings(ctx context.Context, in *LEDSettings, opts ...grpc.CallOption) (*Error, error) {
out := new(Error)
err := grpc.Invoke(ctx, "/P4wnP1_grpc.P4WNP1/SetLEDSettings", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *p4WNP1Client) StopGadget(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*Error, error) {
out := new(Error)
err := grpc.Invoke(ctx, "/P4wnP1_grpc.P4WNP1/StopGadget", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
func (c *p4WNP1Client) StartGadget(ctx context.Context, in *Empty, opts ...grpc.CallOption) (*Error, error) {
out := new(Error)
err := grpc.Invoke(ctx, "/P4wnP1_grpc.P4WNP1/StartGadget", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// Server API for P4WNP1 service
type P4WNP1Server interface {
GetGadgetSettings(context.Context, *Empty) (*GadgetSettings, error)
SetGadgetSettings(context.Context, *GadgetSettings) (*Error, error)
GetLEDSettings(context.Context, *Empty) (*LEDSettings, error)
SetLEDSettings(context.Context, *LEDSettings) (*Error, error)
StopGadget(context.Context, *Empty) (*Error, error)
StartGadget(context.Context, *Empty) (*Error, error)
}
func RegisterP4WNP1Server(s *grpc.Server, srv P4WNP1Server) {
s.RegisterService(&_P4WNP1_serviceDesc, srv)
}
func _P4WNP1_GetGadgetSettings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(Empty)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(P4WNP1Server).GetGadgetSettings(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/P4wnP1_grpc.P4WNP1/GetGadgetSettings",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(P4WNP1Server).GetGadgetSettings(ctx, req.(*Empty))
}
return interceptor(ctx, in, info, handler)
}
func _P4WNP1_SetGadgetSettings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(GadgetSettings)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(P4WNP1Server).SetGadgetSettings(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/P4wnP1_grpc.P4WNP1/SetGadgetSettings",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(P4WNP1Server).SetGadgetSettings(ctx, req.(*GadgetSettings))
}
return interceptor(ctx, in, info, handler)
}
func _P4WNP1_GetLEDSettings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(Empty)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(P4WNP1Server).GetLEDSettings(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/P4wnP1_grpc.P4WNP1/GetLEDSettings",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(P4WNP1Server).GetLEDSettings(ctx, req.(*Empty))
}
return interceptor(ctx, in, info, handler)
}
func _P4WNP1_SetLEDSettings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(LEDSettings)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(P4WNP1Server).SetLEDSettings(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/P4wnP1_grpc.P4WNP1/SetLEDSettings",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(P4WNP1Server).SetLEDSettings(ctx, req.(*LEDSettings))
}
return interceptor(ctx, in, info, handler)
}
func _P4WNP1_StopGadget_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(Empty)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(P4WNP1Server).StopGadget(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/P4wnP1_grpc.P4WNP1/StopGadget",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(P4WNP1Server).StopGadget(ctx, req.(*Empty))
}
return interceptor(ctx, in, info, handler)
}
func _P4WNP1_StartGadget_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(Empty)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(P4WNP1Server).StartGadget(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/P4wnP1_grpc.P4WNP1/StartGadget",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(P4WNP1Server).StartGadget(ctx, req.(*Empty))
}
return interceptor(ctx, in, info, handler)
}
var _P4WNP1_serviceDesc = grpc.ServiceDesc{
ServiceName: "P4wnP1_grpc.P4WNP1",
HandlerType: (*P4WNP1Server)(nil),
Methods: []grpc.MethodDesc{
{
MethodName: "GetGadgetSettings",
Handler: _P4WNP1_GetGadgetSettings_Handler,
},
{
MethodName: "SetGadgetSettings",
Handler: _P4WNP1_SetGadgetSettings_Handler,
},
{
MethodName: "GetLEDSettings",
Handler: _P4WNP1_GetLEDSettings_Handler,
},
{
MethodName: "SetLEDSettings",
Handler: _P4WNP1_SetLEDSettings_Handler,
},
{
MethodName: "StopGadget",
Handler: _P4WNP1_StopGadget_Handler,
},
{
MethodName: "StartGadget",
Handler: _P4WNP1_StartGadget_Handler,
},
},
Streams: []grpc.StreamDesc{},
Metadata: "grpc.proto",
}
func init() { proto.RegisterFile("grpc.proto", fileDescriptor0) }
var fileDescriptor0 = []byte{
// 791 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x55, 0x5d, 0x6f, 0xdb, 0x36,
0x14, 0x8d, 0xe3, 0x2f, 0xe9, 0xca, 0xd6, 0x34, 0x0e, 0xeb, 0xd4, 0x76, 0x6d, 0x03, 0xad, 0x03,
0xf2, 0x30, 0x18, 0xa8, 0x57, 0x6c, 0xaf, 0xd3, 0x24, 0x25, 0xf1, 0x1a, 0x27, 0x82, 0xd4, 0xcc,
0xd8, 0x13, 0xc1, 0x88, 0x9c, 0x2d, 0xc4, 0x96, 0x04, 0x92, 0xca, 0xb6, 0x7f, 0xb0, 0x97, 0xfd,
0xc8, 0xfd, 0x93, 0x81, 0x94, 0x9c, 0xc4, 0x9d, 0x53, 0x6c, 0x6f, 0xe4, 0x39, 0xf7, 0x1c, 0x5e,
0xf1, 0x1e, 0x50, 0x00, 0x4b, 0x5e, 0x65, 0x93, 0x8a, 0x97, 0xb2, 0x44, 0x56, 0xfc, 0xf6, 0xb7,
0x22, 0x7e, 0x83, 0x15, 0xe4, 0x4d, 0xc0, 0x3a, 0x8f, 0xc2, 0x94, 0x49, 0x99, 0x17, 0x4b, 0x81,
0x5e, 0x81, 0x75, 0xbd, 0xce, 0x8b, 0x1b, 0x9c, 0x95, 0x75, 0x21, 0xdd, 0xce, 0x51, 0xe7, 0x78,
0x9c, 0x80, 0x86, 0x02, 0x85, 0x78, 0x31, 0x3c, 0x39, 0x25, 0x74, 0xc9, 0xe4, 0x56, 0x12, 0xc9,
0x15, 0xe3, 0x05, 0x93, 0xe8, 0x39, 0x98, 0xab, 0x52, 0x48, 0x4c, 0x28, 0xe5, 0x5a, 0x68, 0x26,
0x86, 0x02, 0x7c, 0x4a, 0x39, 0x7a, 0x0a, 0x06, 0x65, 0xb7, 0x0d, 0x77, 0xa8, 0xb9, 0x21, 0x65,
0xb7, 0x8a, 0xf2, 0xfe, 0xec, 0x81, 0xbd, 0x6b, 0x89, 0x1c, 0xe8, 0xde, 0xe6, 0xb4, 0x35, 0x51,
0x4b, 0x85, 0x54, 0x39, 0x6d, 0xa5, 0x6a, 0x89, 0x3c, 0x18, 0x6d, 0x48, 0x51, 0xff, 0x4a, 0x32,
0x59, 0x73, 0xc6, 0xdd, 0xae, 0xa6, 0x76, 0x30, 0xe4, 0xc2, 0xb0, 0xe2, 0x25, 0xad, 0x33, 0xe9,
0xf6, 0x9a, 0x43, 0xdb, 0x2d, 0x7a, 0x02, 0x03, 0xc1, 0x78, 0x4e, 0xd6, 0x6e, 0x5f, 0x13, 0xed,
0x0e, 0xbd, 0x04, 0xab, 0x16, 0x0c, 0x07, 0x61, 0x80, 0xa3, 0x60, 0xee, 0x0e, 0x8e, 0x3a, 0xc7,
0x46, 0x62, 0xd6, 0x82, 0x05, 0x61, 0x10, 0x05, 0x73, 0xf5, 0x91, 0x8a, 0x4f, 0x2e, 0xc2, 0x59,
0xea, 0x0e, 0x35, 0x6b, 0xd4, 0x82, 0xe9, 0x3d, 0x3a, 0x06, 0x47, 0x91, 0x67, 0xb3, 0x10, 0xbf,
0x8b, 0x7e, 0xf9, 0xf1, 0xd2, 0x4f, 0x42, 0xd7, 0xd0, 0x35, 0x76, 0x2d, 0xd8, 0xd9, 0x2c, 0xdc,
0xa2, 0xc8, 0x83, 0xf1, 0xb6, 0x72, 0x7e, 0x79, 0x95, 0x46, 0xae, 0xa9, 0xcb, 0xac, 0xa6, 0x4c,
0x43, 0xdb, 0x56, 0x54, 0x4d, 0xe2, 0x2f, 0x5c, 0xb8, 0x6b, 0xe5, 0x6c, 0x16, 0x26, 0xfe, 0x02,
0x7d, 0x01, 0x43, 0xc5, 0x5f, 0xcd, 0x53, 0xd7, 0xd2, 0xdc, 0xa0, 0x16, 0xec, 0x6a, 0x9e, 0xa2,
0x17, 0x00, 0x8a, 0x48, 0xa3, 0x64, 0xe6, 0x9f, 0xbb, 0xa3, 0x3b, 0x5d, 0x03, 0xa0, 0x9f, 0xc0,
0xe6, 0x05, 0xcd, 0x05, 0x16, 0xed, 0x75, 0xbb, 0xe3, 0xa3, 0xce, 0xb1, 0x35, 0xfd, 0x6a, 0xf2,
0x20, 0x17, 0x93, 0xfd, 0x43, 0x4e, 0xc6, 0x5a, 0x7a, 0x37, 0xa8, 0x39, 0x38, 0x19, 0xcd, 0x30,
0xcb, 0x36, 0xf7, 0x6e, 0xf6, 0x7f, 0x77, 0xb3, 0x33, 0x9a, 0x45, 0xd9, 0x66, 0x8b, 0x7b, 0x7f,
0x77, 0x61, 0xb4, 0xc8, 0x4f, 0xf2, 0x3b, 0xff, 0x2f, 0xc1, 0xa4, 0x39, 0x11, 0xe4, 0x7a, 0xcd,
0x9a, 0x38, 0x18, 0xc9, 0x3d, 0xa0, 0x42, 0xc1, 0xd9, 0x72, 0x1b, 0x0a, 0xce, 0x96, 0x68, 0x0a,
0xbd, 0x4d, 0x49, 0x99, 0x0e, 0x83, 0x3d, 0x7d, 0xb9, 0xd3, 0xc3, 0x43, 0xe3, 0xc9, 0xbc, 0xa4,
0x2c, 0xd1, 0xb5, 0xea, 0x1e, 0x49, 0x85, 0x85, 0xc8, 0x69, 0x1b, 0x92, 0x01, 0xa9, 0x52, 0x91,
0x53, 0xe4, 0x83, 0x49, 0x6a, 0xb9, 0xc2, 0xda, 0xb1, 0xaf, 0x1d, 0x5f, 0x3f, 0xee, 0xe8, 0xc7,
0x7e, 0x2d, 0x57, 0xda, 0xd7, 0x20, 0xed, 0x4a, 0x8d, 0x82, 0x54, 0x38, 0x5b, 0x91, 0xa2, 0x60,
0x6b, 0x9d, 0xa6, 0x71, 0x62, 0x92, 0x2a, 0x68, 0x00, 0xf4, 0x39, 0x0c, 0x48, 0x85, 0x2b, 0x71,
0xa3, 0xa3, 0x64, 0x26, 0x7d, 0x52, 0xc5, 0xe2, 0x06, 0x1d, 0xc1, 0x88, 0x54, 0x78, 0x95, 0x53,
0xd6, 0xb4, 0xd5, 0x64, 0x08, 0x48, 0x75, 0x96, 0x53, 0xa6, 0x5b, 0x7b, 0x05, 0x56, 0xb6, 0xce,
0x59, 0x21, 0x9b, 0x02, 0x53, 0xab, 0xa1, 0x81, 0x74, 0xc1, 0x0b, 0x68, 0x77, 0xda, 0x1d, 0x34,
0x6f, 0x36, 0x88, 0x3a, 0xe1, 0x6b, 0xb0, 0x69, 0xae, 0x6f, 0x11, 0x17, 0xec, 0xf7, 0x4d, 0x59,
0xb4, 0x11, 0x1a, 0xb7, 0xe8, 0x85, 0x06, 0xbd, 0x6f, 0xa0, 0xa7, 0x3f, 0x63, 0x00, 0x87, 0x7e,
0xec, 0x1c, 0xa0, 0x21, 0x74, 0xd3, 0xf7, 0xbe, 0xd3, 0x41, 0x9f, 0xc1, 0x27, 0xe9, 0x7b, 0x1f,
0x9f, 0xf8, 0xb3, 0xf3, 0xcb, 0x9f, 0xa3, 0x04, 0xfb, 0xb1, 0x73, 0xe8, 0xbd, 0x06, 0xb8, 0xbf,
0x04, 0x34, 0x02, 0x63, 0x11, 0xfb, 0x53, 0x1c, 0xa7, 0xef, 0x9c, 0x03, 0x64, 0x40, 0xef, 0x32,
0x8e, 0x2e, 0x9c, 0x8e, 0xf7, 0x14, 0xfa, 0x11, 0xe7, 0x25, 0x57, 0xd3, 0x63, 0xbc, 0x79, 0x29,
0xfa, 0x89, 0x5a, 0x7a, 0x43, 0xe8, 0x47, 0x9b, 0x4a, 0xfe, 0x31, 0xfd, 0xab, 0x0b, 0x83, 0xf8,
0xed, 0xe2, 0x22, 0x7e, 0x83, 0x4e, 0xe0, 0xd3, 0x53, 0x26, 0x3f, 0x78, 0x1f, 0xd0, 0xce, 0x18,
0xb4, 0xe6, 0xd9, 0xf3, 0x8f, 0x04, 0xce, 0x3b, 0x50, 0x3e, 0xe9, 0xbf, 0x7c, 0x3e, 0xa6, 0x79,
0xf6, 0xc1, 0x21, 0xaa, 0x67, 0xef, 0x00, 0xfd, 0x00, 0xf6, 0x29, 0x93, 0x0f, 0x9f, 0xcc, 0x7d,
0xcd, 0xb8, 0x3b, 0xd8, 0x83, 0xea, 0xc6, 0x21, 0xdd, 0x75, 0x78, 0xb4, 0xfa, 0x91, 0x1e, 0xbe,
0x03, 0x48, 0x65, 0x59, 0x35, 0xfd, 0xee, 0x3d, 0x7f, 0xbf, 0xee, 0x7b, 0xb0, 0x52, 0x49, 0xb8,
0xfc, 0xbf, 0xc2, 0xeb, 0x81, 0xfe, 0x71, 0x7c, 0xfb, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x18,
0x23, 0xdf, 0x1e, 0x46, 0x06, 0x00, 0x00,
}

70
proto/grpc.proto Normal file
View File

@ -0,0 +1,70 @@
syntax = "proto3";
package P4wnP1_grpc;
service P4WNP1 {
rpc GetGadgetSettings (Empty) returns (GadgetSettings) {}
rpc SetGadgetSettings (GadgetSettings) returns (Error) {}
rpc GetLEDSettings (Empty) returns (LEDSettings) {}
rpc SetLEDSettings (LEDSettings) returns (Error) {}
rpc StopGadget (Empty) returns (Error) {}
rpc StartGadget (Empty) returns (Error) {}
}
message LEDSettings {
uint32 blink_count = 1;
}
message GadgetSettingsEthernet {
string host_addr = 1;
string dev_addr = 2;
}
message GadgetSettings {
string vid = 1;
string pid = 2;
string manufacturer = 3;
string product = 4;
string serial = 5;
bool use_CDC_ECM = 6;
bool use_RNDIS = 7;
bool use_HID_KEYBOARD = 8;
bool use_HID_MOUSE = 9;
bool use_HID_RAW = 10;
bool use_UMS = 11;
bool use_SERIAL = 12;
GadgetSettingsEthernet rndis_settings = 13;
GadgetSettingsEthernet cdc_ecm_settings = 14;
}
message WiFiSettings {
bool diasabled = 1;
string reg = 2; //Regulatory domain per ISO/IEC 3166-1 alpha2
enum Mode {
AP = 0; //acts as access point
STA = 1; //acts as station for an existing access point
STA_FAILOVER_AP = 2; //acts as station, if connection to the given AP isn't possible spawns an own AP
}
Mode mode = 3;
string ap_ssid = 4; //SSID of AP to spawn
enum APAuthMode {
WPA2_PSK = 0; //AP uses WPA2 pre-shared key
OPEN = 1; //Open System Authentication (no authentication)
}
APAuthMode auth_mode = 5;
uint32 ap_channel = 6;
string ap_psk = 7; //pre-shared key if auth_mode == WPA2_PSK
bool ap_hide_ssid = 8; //if true, SSID gets hidden for spawned AP
string client_ssid = 9;
string client_psk = 10;
bool disable_nexmon = 11; //if true, legacy driver / firmware is used instead of nexmon
}
message Error {
int32 err = 1;
}
message Empty {}