syntax = "proto3"; package api; // Empty message for endpoints which only needs a status message EmptyMessage {} // ============================================================================= // AP (Access Point) Settings - shared data types // ============================================================================= enum APProvisionMode { AP_MODE_ALWAYS = 0; AP_MODE_DISCONNECTED = 1; AP_MODE_NEVER = 2; } enum APNetworkStatus { AP_ACTIVE = 0; AP_INACTIVE = 1; AP_LINGERING = 2; } message APSettings { APProvisionMode provision_mode = 1; string ssid = 2; string password = 3; uint32 channel = 4; bool ssid_hidden = 5; uint32 max_clients = 6; uint32 local_ip = 7; uint32 gateway_ip = 8; uint32 subnet_mask = 9; } message APStatus { APNetworkStatus status = 1; uint32 ip_address = 2; string mac_address = 3; uint32 station_num = 4; } // Empty request types for GET-like operations message APSettingsRequest {} message APStatusRequest {} // ============================================================================= // Servo Settings - shared data types // ============================================================================= message Servo { float center_pwm = 1; float direction = 2; float center_angle = 3; float conversion = 4; string name = 5; } message ServoSettings { repeated Servo servos = 1; // max 12 servos } message ServoSettingsRequest {} // ============================================================================= // WiFi STA Settings - shared data types // ============================================================================= message WifiNetwork { string ssid = 1; string password = 2; bool static_ip_config = 3; uint32 local_ip = 4; uint32 gateway_ip = 5; uint32 subnet_mask = 6; uint32 dns_ip_1 = 7; uint32 dns_ip_2 = 8; } message WifiSettings { string hostname = 1; bool priority_rssi = 2; repeated WifiNetwork wifi_networks = 3; // max 5 networks } message WifiSettingsRequest {} // ============================================================================= // File System - shared data types // ============================================================================= message FileEntry { string name = 1; bool is_directory = 2; uint32 size = 3; // Only for files repeated FileEntry children = 4; // Only for directories } message FileList { repeated FileEntry entries = 1; } message FileListRequest {} message FileDeleteRequest { string path = 1; } message FileEditRequest { string path = 1; bytes content = 2; } message FileMkdirRequest { string path = 1; } // ============================================================================= // REST API wrappers - used by HTTP endpoints // ============================================================================= // Request wrapper for REST endpoints message Request { oneof payload { APSettings ap_settings = 10; APSettingsRequest ap_settings_request = 11; APStatusRequest ap_status_request = 12; ServoSettings servo_settings = 20; ServoSettingsRequest servo_settings_request = 21; FileListRequest file_list_request = 30; FileDeleteRequest file_delete_request = 31; FileEditRequest file_edit_request = 32; FileMkdirRequest file_mkdir_request = 33; WifiSettings wifi_settings = 40; WifiSettingsRequest wifi_settings_request = 41; } } // Response wrapper for REST endpoints message Response { uint32 status_code = 1; string error_message = 2; oneof payload { EmptyMessage empty_message = 5; APSettings ap_settings = 10; APStatus ap_status = 11; ServoSettings servo_settings = 20; FileList file_list = 30; WifiSettings wifi_settings = 40; } }