commit a80465c6c1079a4fe9224b4edb1870facb35e310 Author: Eveldee Date: Sat May 24 19:54:06 2025 +0200 Add server api definition diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bc78471 --- /dev/null +++ b/.gitignore @@ -0,0 +1,484 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from `dotnet new gitignore` + +# dotenv files +.env + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET +project.lock.json +project.fragment.lock.json +artifacts/ + +# Tye +.tye/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.tlog +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio 6 auto-generated project file (contains which files were open etc.) +*.vbp + +# Visual Studio 6 workspace and project file (working project files containing files to include in project) +*.dsw +*.dsp + +# Visual Studio 6 technical files +*.ncb +*.aps + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# Visual Studio History (VSHistory) files +.vshistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +# VS Code files for those working on multiple tools +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# Local History for Visual Studio Code +.history/ + +# Windows Installer files from build outputs +*.cab +*.msi +*.msix +*.msm +*.msp + +# JetBrains Rider +*.sln.iml +.idea/ + +## +## Visual studio for Mac +## + + +# globs +Makefile.in +*.userprefs +*.usertasks +config.make +config.status +aclocal.m4 +install-sh +autom4te.cache/ +*.tar.gz +tarballs/ +test-results/ + +# Mac bundle stuff +*.dmg +*.app + +# content below from: https://github.com/github/gitignore/blob/main/Global/macOS.gitignore +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +# content below from: https://github.com/github/gitignore/blob/main/Global/Windows.gitignore +# Windows thumbnail cache files +Thumbs.db +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# Vim temporary swap files +*.swp diff --git a/MusicCast.Net.Api.Server/Controllers/DistController.cs b/MusicCast.Net.Api.Server/Controllers/DistController.cs new file mode 100644 index 0000000..ec92011 --- /dev/null +++ b/MusicCast.Net.Api.Server/Controllers/DistController.cs @@ -0,0 +1,16 @@ +using Microsoft.AspNetCore.Mvc; +using MusicCast.Net.Api.Server.Models; + +namespace MusicCast.Net.Api.Server.Controllers; + +[ApiController] +[Route("/YamahaExtendedControl/v1/dist/")] +public class DistController +{ + [HttpGet] + [Route("getDistributionInfo")] + public GetDistributionInfoResponse GetDistributionInfo() + { + throw new NotImplementedException(); + } +} \ No newline at end of file diff --git a/MusicCast.Net.Api.Server/Controllers/MainController.cs b/MusicCast.Net.Api.Server/Controllers/MainController.cs new file mode 100644 index 0000000..65fafd8 --- /dev/null +++ b/MusicCast.Net.Api.Server/Controllers/MainController.cs @@ -0,0 +1,59 @@ +using Microsoft.AspNetCore.Mvc; +using MusicCast.Net.Api.Server.Models; + +namespace MusicCast.Net.Api.Server.Controllers; + +[ApiController] +[Route("/YamahaExtendedControl/v1/main/")] +public class MainController +{ + [HttpGet] + [Route("getStatus")] + public GetStatusResponse GetStatus() + { + throw new NotImplementedException(); + } + + [HttpGet] + [Route("getSignalInfo")] + public GetSignalInfoResponse GetSignalInfo() + { + throw new NotImplementedException(); + } + + [HttpGet] + [Route("setVolume")] + public BaseResponse SetVolume([FromQuery] int volume) + { + throw new NotImplementedException(); + } + + [HttpGet] + [Route("prepareInputChange")] + public BaseResponse PrepareInputChange([FromQuery] string input) + { + throw new NotImplementedException(); + } + + [HttpGet] + [Route("setInput")] + public BaseResponse SetInput([FromQuery] string input) + { + throw new NotImplementedException(); + } + + [EndpointSummary("Shutdown after the specified interval in minutes")] + [HttpGet] + [Route("setSleep")] + public BaseResponse SetSleep([FromQuery] int sleep) + { + throw new NotImplementedException(); + } + + [HttpGet] + [Route("setPower")] + public BaseResponse SetPower([FromQuery] PowerState power) + { + throw new NotImplementedException(); + } +} \ No newline at end of file diff --git a/MusicCast.Net.Api.Server/Controllers/NetUsbController.cs b/MusicCast.Net.Api.Server/Controllers/NetUsbController.cs new file mode 100644 index 0000000..4490007 --- /dev/null +++ b/MusicCast.Net.Api.Server/Controllers/NetUsbController.cs @@ -0,0 +1,124 @@ +using Microsoft.AspNetCore.Mvc; +using MusicCast.Net.Api.Server.Models; + +namespace MusicCast.Net.Api.Server.Controllers; + +[ApiController] +[Route("/YamahaExtendedControl/v1/netusb/")] +public class NetUsbController +{ + [HttpGet] + [Route("getMcPlaylistName")] + public GetMcPlaylistNameResponse GetMcPlaylistName() + { + throw new NotImplementedException(); + } + + [HttpGet] + [Route("getStreamingServiceSettings")] + public GetStreamingServiceSettingsResponse GetStreamingServiceSettings() + { + throw new NotImplementedException(); + } + + [HttpGet] + [Route("getPlayInfo")] + public GetPlayInfoResponse GetPlayInfo() + { + throw new NotImplementedException(); + } + + [HttpGet] + [Route("getPlayQueue")] + public GetPlayQueueResponse GetPlayQueue([FromQuery] int index) + { + throw new NotImplementedException(); + } + + [HttpGet] + [Route("getRecentInfo")] + public GetRecentInfoResponse GetRecentInfo() + { + throw new NotImplementedException(); + } + + [HttpGet] + [Route("recallRecentItem")] + public BaseResponse RecallRecentItem([FromQuery] string zone, [FromQuery] int num) + { + throw new NotImplementedException(); + } + + [HttpGet] + [Route("setPlayback")] + public BaseResponse SetPlayback([FromQuery] PlaybackAction playback) + { + throw new NotImplementedException(); + } + + [HttpGet] + [Route("toggleShuffle")] + public BaseResponse ToggleShuffle() + { + throw new NotImplementedException(); + } + + [HttpGet] + [Route("toggleRepeat")] + public BaseResponse ToggleRepeat() + { + throw new NotImplementedException(); + } + + [HttpGet] + [Route("getListInfo")] + public GetListInfoResponse GetListInfo([FromQuery] string list_id, [FromQuery] string input, [FromQuery] int size, [FromQuery] string lang) + { + throw new NotImplementedException(); + } + + [HttpGet] + [Route("setListControl")] + public BaseResponse SetListControl([FromQuery] ListControlAction type, [FromQuery] int index, [FromQuery] string zone) + { + throw new NotImplementedException(); + } + + [HttpGet] + [Route("manageList")] + public BaseResponse ManageList( + [FromQuery] string list_id, + [FromQuery] ManageListAction type, + [FromQuery] int index, + [FromQuery] int timeout, + [FromQuery] string zone + ) + { + throw new NotImplementedException(); + } + + [HttpGet] + [Route("managePlayQueue")] + public BaseResponse ManagePlayQueue( + [FromQuery] ManagePlayQueueAction type, + [FromQuery] int index, + [FromQuery] string zone + ) + { + throw new NotImplementedException(); + } + + [HttpGet] + [Route("copyPlayQueue")] + public BaseResponse CopyPlayQueue([FromQuery] int index) + { + throw new NotImplementedException(); + } + + [HttpGet] + [Route("movePlayQueueItem")] + public BaseResponse MovePlayQueueItem([FromQuery] int from, [FromQuery] int to) + { + throw new NotImplementedException(); + } +} \ No newline at end of file diff --git a/MusicCast.Net.Api.Server/Controllers/SystemController.cs b/MusicCast.Net.Api.Server/Controllers/SystemController.cs new file mode 100644 index 0000000..5e47bc2 --- /dev/null +++ b/MusicCast.Net.Api.Server/Controllers/SystemController.cs @@ -0,0 +1,95 @@ +using Microsoft.AspNetCore.Mvc; +using MusicCast.Net.Api.Server.Models; + +namespace MusicCast.Net.Api.Server.Controllers; + +[ApiController] +[Route("/YamahaExtendedControl/v1/system/")] +public class SystemController : ControllerBase +{ + [HttpGet] + [Route("getFeatures")] + [EndpointSummary("Get the available features for this device")] + public GetFeaturesResponse GetFeatures() + { + throw new NotImplementedException(); + } + + [HttpGet] + [Route("getLocationInfo")] + public GetLocationInfoResponse GetLocationInfo() + { + throw new NotImplementedException(); + } + + [HttpGet] + [Route("getNameText")] + [EndpointSummary("Get sources friendly names")] + public GetNameTextResponse GetNameText() + { + throw new NotImplementedException(); + } + + [HttpGet] + [Route("getDeviceInfo")] + public GetDeviceInfoResponse GetDeviceInfo() + { + throw new NotImplementedException(); + } + + [HttpGet] + [Route("isNewFirmwareAvailable")] + public IsNewFirmwareAvailableResponse IsNewFirmwareAvailable([FromQuery] string type) + { + throw new NotImplementedException(); + } + + [HttpGet] + [Route("getFuncStatus")] + public GetFuncStatusResponse GetFuncStatus() + { + throw new NotImplementedException(); + } + + [HttpGet] + [Route("getDisklavierSettings")] + public GetDisklavierSettingsResponse GetDisklavierSettings() + { + throw new NotImplementedException(); + } + + [HttpGet] + [Route("getTag")] + public GetTagResponse GetTag() + { + throw new NotImplementedException(); + } + + [HttpGet] + [Route("getYpaoConfig")] + public GetYpaoConfigResponse GetYpaoConfig() + { + throw new NotImplementedException(); + } + + [HttpGet] + [Route("setSpeakerA")] + public BaseResponse setSpeakerA([FromQuery] bool enable) + { + throw new NotImplementedException(); + } + + [HttpGet] + [Route("setSpeakerB")] + public BaseResponse setSpeakerB([FromQuery] bool enable) + { + throw new NotImplementedException(); + } + + [HttpGet] + [Route("getNetworkStandby")] + public GetNetworkStandbyResponse GetNetworkStandby() + { + throw new NotImplementedException(); + } +} \ No newline at end of file diff --git a/MusicCast.Net.Api.Server/Models/BaseResponse.cs b/MusicCast.Net.Api.Server/Models/BaseResponse.cs new file mode 100644 index 0000000..ee0a012 --- /dev/null +++ b/MusicCast.Net.Api.Server/Models/BaseResponse.cs @@ -0,0 +1,6 @@ +namespace MusicCast.Net.Api.Server.Models; + +public class BaseResponse +{ + public string response_code { get; set; } +} \ No newline at end of file diff --git a/MusicCast.Net.Api.Server/Models/GetDeviceInfoResponse.cs b/MusicCast.Net.Api.Server/Models/GetDeviceInfoResponse.cs new file mode 100644 index 0000000..51e266a --- /dev/null +++ b/MusicCast.Net.Api.Server/Models/GetDeviceInfoResponse.cs @@ -0,0 +1,17 @@ +namespace MusicCast.Net.Api.Server.Models; + +public class GetDeviceInfoResponse +{ + public int response_code { get; set; } + public string model_name { get; set; } + public string destination { get; set; } + public string device_id { get; set; } + public string system_id { get; set; } + public int system_version { get; set; } + public double api_version { get; set; } + public int netmodule_generation { get; set; } + public string netmodule_version { get; set; } + public string netmodule_checksum { get; set; } + public string operation_mode { get; set; } + public string update_error_code { get; set; } +} \ No newline at end of file diff --git a/MusicCast.Net.Api.Server/Models/GetDisklavierSettingsResponse.cs b/MusicCast.Net.Api.Server/Models/GetDisklavierSettingsResponse.cs new file mode 100644 index 0000000..2bf6c66 --- /dev/null +++ b/MusicCast.Net.Api.Server/Models/GetDisklavierSettingsResponse.cs @@ -0,0 +1,21 @@ +namespace MusicCast.Net.Api.Server.Models; + +public class GetDisklavierSettingsResponse +{ + public int response_code { get; set; } + public bool enable { get; set; } + public string mode { get; set; } + public string input { get; set; } + public Pair pair { get; set; } + public Disklavier disklavier { get; set; } + + public class Pair + { + public string mac_address { get; set; } + } + + public class Disklavier + { + public string ip_address { get; set; } + } +} \ No newline at end of file diff --git a/MusicCast.Net.Api.Server/Models/GetDistributionInfoResponse.cs b/MusicCast.Net.Api.Server/Models/GetDistributionInfoResponse.cs new file mode 100644 index 0000000..6fd76cb --- /dev/null +++ b/MusicCast.Net.Api.Server/Models/GetDistributionInfoResponse.cs @@ -0,0 +1,11 @@ +namespace MusicCast.Net.Api.Server.Models; + +public class GetDistributionInfoResponse +{ + public int response_code { get; set; } + public string group_id { get; set; } + public string group_name { get; set; } + public string role { get; set; } + public string server_zone { get; set; } + public object[] client_list { get; set; } +} \ No newline at end of file diff --git a/MusicCast.Net.Api.Server/Models/GetFeaturesResponse.cs b/MusicCast.Net.Api.Server/Models/GetFeaturesResponse.cs new file mode 100644 index 0000000..6451838 --- /dev/null +++ b/MusicCast.Net.Api.Server/Models/GetFeaturesResponse.cs @@ -0,0 +1,190 @@ +namespace MusicCast.Net.Api.Server.Models; + +public class GetFeaturesResponse +{ + public int response_code { get; set; } + public System system { get; set; } + public Zone[] zone { get; set; } + public Tuner tuner { get; set; } + public Netusb netusb { get; set; } + public Distribution distribution { get; set; } + public Ccs ccs { get; set; } + + public class System + { + public string[] func_list { get; set; } + public int zone_num { get; set; } + public Input_list[] input_list { get; set; } + public Speaker_settings speaker_settings { get; set; } + public string[] ypao_speaker_unit_list { get; set; } + } + + public class Input_list + { + public string id { get; set; } + public bool distribution_enable { get; set; } + public bool rename_enable { get; set; } + public bool account_enable { get; set; } + public string play_info_type { get; set; } + } + + public class Speaker_settings + { + public string type { get; set; } + public Common common { get; set; } + public Front_l front_l { get; set; } + public Front_r front_r { get; set; } + public Swfr swfr { get; set; } + } + + public class Common + { + public int attribute { get; set; } + public int[] swfr_crossover_list { get; set; } + public Speaker_size[] speaker_size { get; set; } + } + + public class Speaker_size + { + public string id { get; set; } + public string[] size_list { get; set; } + } + + public class Front_l + { + public int attribute { get; set; } + public Range_step[] range_step { get; set; } + } + + public class Range_step + { + public string id { get; set; } + public int min { get; set; } + public int max { get; set; } + public int step { get; set; } + } + + public class Front_r + { + public int attribute { get; set; } + public Range_step1[] range_step { get; set; } + } + + public class Range_step1 + { + public string id { get; set; } + public int min { get; set; } + public int max { get; set; } + public int step { get; set; } + } + + public class Swfr + { + public int attribute { get; set; } + public Range_step2[] range_step { get; set; } + } + + public class Range_step2 + { + public string id { get; set; } + public int min { get; set; } + public int max { get; set; } + public int step { get; set; } + } + + public class Zone + { + public string id { get; set; } + public string[] func_list { get; set; } + public string[] input_list { get; set; } + public string[] link_control_list { get; set; } + public string[] link_audio_delay_list { get; set; } + public string[] link_audio_quality_list { get; set; } + public Range_step3[] range_step { get; set; } + } + + public class Range_step3 + { + public string id { get; set; } + public int min { get; set; } + public int max { get; set; } + public int step { get; set; } + } + + public class Tuner + { + public string[] func_list { get; set; } + public Range_step4[] range_step { get; set; } + public Preset preset { get; set; } + } + + public class Range_step4 + { + public string id { get; set; } + public int min { get; set; } + public int max { get; set; } + public int step { get; set; } + } + + public class Preset + { + public string type { get; set; } + public int num { get; set; } + } + + public class Netusb + { + public string[] func_list { get; set; } + public Preset1 preset { get; set; } + public Recent_info recent_info { get; set; } + public Play_queue play_queue { get; set; } + public Mc_playlist mc_playlist { get; set; } + public string net_radio_type { get; set; } + public Pandora pandora { get; set; } + public Siriusxm siriusxm { get; set; } + } + + public class Preset1 + { + public int num { get; set; } + } + + public class Recent_info + { + public int num { get; set; } + } + + public class Play_queue + { + public int size { get; set; } + } + + public class Mc_playlist + { + public int size { get; set; } + public int num { get; set; } + } + + public class Pandora + { + public string[] sort_option_list { get; set; } + } + + public class Siriusxm + { + public string api_type { get; set; } + } + + public class Distribution + { + public int version { get; set; } + public int[] compatible_client { get; set; } + public int client_max { get; set; } + public string[] server_zone_list { get; set; } + } + + public class Ccs + { + public bool supported { get; set; } + } +} \ No newline at end of file diff --git a/MusicCast.Net.Api.Server/Models/GetFuncStatusResponse.cs b/MusicCast.Net.Api.Server/Models/GetFuncStatusResponse.cs new file mode 100644 index 0000000..4c831d4 --- /dev/null +++ b/MusicCast.Net.Api.Server/Models/GetFuncStatusResponse.cs @@ -0,0 +1,10 @@ +namespace MusicCast.Net.Api.Server.Models; + +public class GetFuncStatusResponse +{ + public int response_code { get; set; } + public bool auto_power_standby { get; set; } + public bool speaker_a { get; set; } + public bool speaker_b { get; set; } + public bool headphone { get; set; } +} \ No newline at end of file diff --git a/MusicCast.Net.Api.Server/Models/GetListInfoResponse.cs b/MusicCast.Net.Api.Server/Models/GetListInfoResponse.cs new file mode 100644 index 0000000..c33530f --- /dev/null +++ b/MusicCast.Net.Api.Server/Models/GetListInfoResponse.cs @@ -0,0 +1,22 @@ +namespace MusicCast.Net.Api.Server.Models; + +public class GetListInfoResponse +{ + public int response_code { get; set; } + public string input { get; set; } + public int menu_layer { get; set; } + public int max_line { get; set; } + public int index { get; set; } + public int playing_index { get; set; } + public string menu_name { get; set; } + public List_info[] list_info { get; set; } + + public class List_info + { + public string text { get; set; } + public object[] subtexts { get; set; } + public string thumbnail { get; set; } + public string logo { get; set; } + public int attribute { get; set; } + } +} \ No newline at end of file diff --git a/MusicCast.Net.Api.Server/Models/GetLocationInfoResponse.cs b/MusicCast.Net.Api.Server/Models/GetLocationInfoResponse.cs new file mode 100644 index 0000000..5abf348 --- /dev/null +++ b/MusicCast.Net.Api.Server/Models/GetLocationInfoResponse.cs @@ -0,0 +1,14 @@ +namespace MusicCast.Net.Api.Server.Models; + +public class GetLocationInfoResponse +{ + public int response_code { get; set; } + public string id { get; set; } + public string name { get; set; } + public Zone_list zone_list { get; set; } + + public class Zone_list + { + public bool main { get; set; } + } +} \ No newline at end of file diff --git a/MusicCast.Net.Api.Server/Models/GetMcPlaylistNameResponse.cs b/MusicCast.Net.Api.Server/Models/GetMcPlaylistNameResponse.cs new file mode 100644 index 0000000..24cda8b --- /dev/null +++ b/MusicCast.Net.Api.Server/Models/GetMcPlaylistNameResponse.cs @@ -0,0 +1,7 @@ +namespace MusicCast.Net.Api.Server.Models; + +public class GetMcPlaylistNameResponse +{ + public int response_code { get; set; } + public string[] name_list { get; set; } +} \ No newline at end of file diff --git a/MusicCast.Net.Api.Server/Models/GetNameTextResponse.cs b/MusicCast.Net.Api.Server/Models/GetNameTextResponse.cs new file mode 100644 index 0000000..22e8ddb --- /dev/null +++ b/MusicCast.Net.Api.Server/Models/GetNameTextResponse.cs @@ -0,0 +1,21 @@ +namespace MusicCast.Net.Api.Server.Models; + +public class GetNameTextResponse +{ + public int response_code { get; set; } + public Zone_list[] zone_list { get; set; } + public Input_list[] input_list { get; set; } + public object[] sound_program_list { get; set; } + + public class Zone_list + { + public string id { get; set; } + public string text { get; set; } + } + + public class Input_list + { + public string id { get; set; } + public string text { get; set; } + } +} \ No newline at end of file diff --git a/MusicCast.Net.Api.Server/Models/GetNetworkStandbyResponse.cs b/MusicCast.Net.Api.Server/Models/GetNetworkStandbyResponse.cs new file mode 100644 index 0000000..0f63ba5 --- /dev/null +++ b/MusicCast.Net.Api.Server/Models/GetNetworkStandbyResponse.cs @@ -0,0 +1,7 @@ +namespace MusicCast.Net.Api.Server.Models; + +public class GetNetworkStandbyResponse +{ + public int response_code { get; set; } + public string network_standby { get; set; } +} \ No newline at end of file diff --git a/MusicCast.Net.Api.Server/Models/GetPlayInfoResponse.cs b/MusicCast.Net.Api.Server/Models/GetPlayInfoResponse.cs new file mode 100644 index 0000000..45b064d --- /dev/null +++ b/MusicCast.Net.Api.Server/Models/GetPlayInfoResponse.cs @@ -0,0 +1,23 @@ +namespace MusicCast.Net.Api.Server.Models; + +public class GetPlayInfoResponse +{ + public int response_code { get; set; } + public string input { get; set; } + public string play_queue_type { get; set; } + public string playback { get; set; } + public string repeat { get; set; } + public string shuffle { get; set; } + public int play_time { get; set; } + public int total_time { get; set; } + public string artist { get; set; } + public string album { get; set; } + public string track { get; set; } + public string albumart_url { get; set; } + public int albumart_id { get; set; } + public string usb_devicetype { get; set; } + public bool auto_stopped { get; set; } + public int attribute { get; set; } + public string[] repeat_available { get; set; } + public string[] shuffle_available { get; set; } +} \ No newline at end of file diff --git a/MusicCast.Net.Api.Server/Models/GetPlayQueueResponse.cs b/MusicCast.Net.Api.Server/Models/GetPlayQueueResponse.cs new file mode 100644 index 0000000..703dc90 --- /dev/null +++ b/MusicCast.Net.Api.Server/Models/GetPlayQueueResponse.cs @@ -0,0 +1,22 @@ +namespace MusicCast.Net.Api.Server.Models; + +public class GetPlayQueueResponse +{ + public int response_code { get; set; } + public string type { get; set; } + public int max_line { get; set; } + public int playing_index { get; set; } + public int index { get; set; } + public Track_info[] track_info { get; set; } + + public class Track_info + { + public string input { get; set; } + public string text { get; set; } + public string thumbnail { get; set; } + public int attribute { get; set; } + } +} + + + diff --git a/MusicCast.Net.Api.Server/Models/GetRecentInfoResponse.cs b/MusicCast.Net.Api.Server/Models/GetRecentInfoResponse.cs new file mode 100644 index 0000000..08ec47a --- /dev/null +++ b/MusicCast.Net.Api.Server/Models/GetRecentInfoResponse.cs @@ -0,0 +1,16 @@ +namespace MusicCast.Net.Api.Server.Models; + +public class GetRecentInfoResponse +{ + public int response_code { get; set; } + public Recent_info[] recent_info { get; set; } + + public class Recent_info + { + public string input { get; set; } + public string text { get; set; } + public string albumart_url { get; set; } + public int play_count { get; set; } + public int attribute { get; set; } + } +} \ No newline at end of file diff --git a/MusicCast.Net.Api.Server/Models/GetSignalInfoResponse.cs b/MusicCast.Net.Api.Server/Models/GetSignalInfoResponse.cs new file mode 100644 index 0000000..1142840 --- /dev/null +++ b/MusicCast.Net.Api.Server/Models/GetSignalInfoResponse.cs @@ -0,0 +1,14 @@ +namespace MusicCast.Net.Api.Server.Models; + +public class GetSignalInfoResponse +{ + public int response_code { get; set; } + public Audio audio { get; set; } + + public class Audio + { + public int error { get; set; } + public string format { get; set; } + public string fs { get; set; } + } +} \ No newline at end of file diff --git a/MusicCast.Net.Api.Server/Models/GetStatusResponse.cs b/MusicCast.Net.Api.Server/Models/GetStatusResponse.cs new file mode 100644 index 0000000..2860535 --- /dev/null +++ b/MusicCast.Net.Api.Server/Models/GetStatusResponse.cs @@ -0,0 +1,17 @@ +namespace MusicCast.Net.Api.Server.Models; + +public class GetStatusResponse +{ + public int response_code { get; set; } + public string power { get; set; } + public int sleep { get; set; } + public int volume { get; set; } + public bool mute { get; set; } + public int max_volume { get; set; } + public string input { get; set; } + public bool distribution_enable { get; set; } + public string link_control { get; set; } + public string link_audio_delay { get; set; } + public string link_audio_quality { get; set; } + public int disable_flags { get; set; } +} \ No newline at end of file diff --git a/MusicCast.Net.Api.Server/Models/GetStreamingServiceSettingsResponse.cs b/MusicCast.Net.Api.Server/Models/GetStreamingServiceSettingsResponse.cs new file mode 100644 index 0000000..915a66b --- /dev/null +++ b/MusicCast.Net.Api.Server/Models/GetStreamingServiceSettingsResponse.cs @@ -0,0 +1,14 @@ +namespace MusicCast.Net.Api.Server.Models; + +public class GetStreamingServiceSettingsResponse +{ + public int response_code { get; set; } + public Services[] services { get; set; } + + public class Services + { + public string input { get; set; } + public bool confirmed { get; set; } + public bool use_service { get; set; } + } +} \ No newline at end of file diff --git a/MusicCast.Net.Api.Server/Models/GetTagResponse.cs b/MusicCast.Net.Api.Server/Models/GetTagResponse.cs new file mode 100644 index 0000000..0d681ec --- /dev/null +++ b/MusicCast.Net.Api.Server/Models/GetTagResponse.cs @@ -0,0 +1,20 @@ +namespace MusicCast.Net.Api.Server.Models; + +public class GetTagResponse +{ + public int response_code { get; set; } + public Zone_list[] zone_list { get; set; } + public Input_list[] input_list { get; set; } + + public class Zone_list + { + public string id { get; set; } + public int tag { get; set; } + } + + public class Input_list + { + public string id { get; set; } + public int tag { get; set; } + } +} \ No newline at end of file diff --git a/MusicCast.Net.Api.Server/Models/GetYpaoConfigResponse.cs b/MusicCast.Net.Api.Server/Models/GetYpaoConfigResponse.cs new file mode 100644 index 0000000..74c2ddb --- /dev/null +++ b/MusicCast.Net.Api.Server/Models/GetYpaoConfigResponse.cs @@ -0,0 +1,11 @@ +namespace MusicCast.Net.Api.Server.Models; + +public class GetYpaoConfigResponse +{ + public int response_code { get; set; } + public string ypao_status { get; set; } + public bool ypao_setting { get; set; } + public string ypao_speaker_unit { get; set; } + public bool ypao_volume { get; set; } + public int disable_flags { get; set; } +} \ No newline at end of file diff --git a/MusicCast.Net.Api.Server/Models/IsNewFirmwareAvailableResponse.cs b/MusicCast.Net.Api.Server/Models/IsNewFirmwareAvailableResponse.cs new file mode 100644 index 0000000..ec91607 --- /dev/null +++ b/MusicCast.Net.Api.Server/Models/IsNewFirmwareAvailableResponse.cs @@ -0,0 +1,7 @@ +namespace MusicCast.Net.Api.Server.Models; + +public class IsNewFirmwareAvailableResponse +{ + public int response_code { get; set; } + public bool available { get; set; } +} \ No newline at end of file diff --git a/MusicCast.Net.Api.Server/Models/ListControlAction.cs b/MusicCast.Net.Api.Server/Models/ListControlAction.cs new file mode 100644 index 0000000..d6975e2 --- /dev/null +++ b/MusicCast.Net.Api.Server/Models/ListControlAction.cs @@ -0,0 +1,8 @@ +namespace MusicCast.Net.Api.Server.Models; + +public enum ListControlAction +{ + select, + play, + @return, +} \ No newline at end of file diff --git a/MusicCast.Net.Api.Server/Models/ManageListAction.cs b/MusicCast.Net.Api.Server/Models/ManageListAction.cs new file mode 100644 index 0000000..caf430e --- /dev/null +++ b/MusicCast.Net.Api.Server/Models/ManageListAction.cs @@ -0,0 +1,8 @@ +namespace MusicCast.Net.Api.Server.Models; + +public enum ManageListAction +{ + play_now, + play_next, + add_to_queue +} \ No newline at end of file diff --git a/MusicCast.Net.Api.Server/Models/ManagePlayQueueAction.cs b/MusicCast.Net.Api.Server/Models/ManagePlayQueueAction.cs new file mode 100644 index 0000000..06dffd4 --- /dev/null +++ b/MusicCast.Net.Api.Server/Models/ManagePlayQueueAction.cs @@ -0,0 +1,7 @@ +namespace MusicCast.Net.Api.Server.Models; + +public enum ManagePlayQueueAction +{ + play, + remove +} \ No newline at end of file diff --git a/MusicCast.Net.Api.Server/Models/PlaybackAction.cs b/MusicCast.Net.Api.Server/Models/PlaybackAction.cs new file mode 100644 index 0000000..421a029 --- /dev/null +++ b/MusicCast.Net.Api.Server/Models/PlaybackAction.cs @@ -0,0 +1,9 @@ +namespace MusicCast.Net.Api.Server.Models; + +public enum PlaybackAction +{ + pause, + previous, + next, + stop +} \ No newline at end of file diff --git a/MusicCast.Net.Api.Server/Models/PowerState.cs b/MusicCast.Net.Api.Server/Models/PowerState.cs new file mode 100644 index 0000000..6f2f7a2 --- /dev/null +++ b/MusicCast.Net.Api.Server/Models/PowerState.cs @@ -0,0 +1,7 @@ +namespace MusicCast.Net.Api.Server.Models; + +public enum PowerState +{ + on, + standby +} \ No newline at end of file diff --git a/MusicCast.Net.Api.Server/MusicCast.Net.Api.Server.csproj b/MusicCast.Net.Api.Server/MusicCast.Net.Api.Server.csproj new file mode 100644 index 0000000..b2a47f5 --- /dev/null +++ b/MusicCast.Net.Api.Server/MusicCast.Net.Api.Server.csproj @@ -0,0 +1,21 @@ + + + + net9.0 + enable + enable + + . + CS8618 + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + diff --git a/MusicCast.Net.Api.Server/MusicCast.Net.Api.Server.json b/MusicCast.Net.Api.Server/MusicCast.Net.Api.Server.json new file mode 100644 index 0000000..c4d4dc8 --- /dev/null +++ b/MusicCast.Net.Api.Server/MusicCast.Net.Api.Server.json @@ -0,0 +1,2436 @@ +{ + "openapi": "3.0.1", + "info": { + "title": "MusicCast.Net.Api.Server | v1", + "version": "1.0.0" + }, + "paths": { + "/YamahaExtendedControl/v1/dist/getDistributionInfo": { + "get": { + "tags": [ + "Dist" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/GetDistributionInfoResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetDistributionInfoResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/GetDistributionInfoResponse" + } + } + } + } + } + } + }, + "/YamahaExtendedControl/v1/main/getStatus": { + "get": { + "tags": [ + "Main" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/GetStatusResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetStatusResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/GetStatusResponse" + } + } + } + } + } + } + }, + "/YamahaExtendedControl/v1/main/getSignalInfo": { + "get": { + "tags": [ + "Main" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/GetSignalInfoResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetSignalInfoResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/GetSignalInfoResponse" + } + } + } + } + } + } + }, + "/YamahaExtendedControl/v1/main/setVolume": { + "get": { + "tags": [ + "Main" + ], + "parameters": [ + { + "name": "volume", + "in": "query", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + } + } + } + } + } + }, + "/YamahaExtendedControl/v1/main/prepareInputChange": { + "get": { + "tags": [ + "Main" + ], + "parameters": [ + { + "name": "input", + "in": "query", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + } + } + } + } + } + }, + "/YamahaExtendedControl/v1/main/setInput": { + "get": { + "tags": [ + "Main" + ], + "parameters": [ + { + "name": "input", + "in": "query", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + } + } + } + } + } + }, + "/YamahaExtendedControl/v1/main/setSleep": { + "get": { + "tags": [ + "Main" + ], + "summary": "Shutdown after the specified interval in minutes", + "parameters": [ + { + "name": "sleep", + "in": "query", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + } + } + } + } + } + }, + "/YamahaExtendedControl/v1/main/setPower": { + "get": { + "tags": [ + "Main" + ], + "parameters": [ + { + "name": "power", + "in": "query", + "schema": { + "enum": [ + "on", + "standby" + ] + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + } + } + } + } + } + }, + "/YamahaExtendedControl/v1/netusb/getMcPlaylistName": { + "get": { + "tags": [ + "NetUsb" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/GetMcPlaylistNameResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetMcPlaylistNameResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/GetMcPlaylistNameResponse" + } + } + } + } + } + } + }, + "/YamahaExtendedControl/v1/netusb/getStreamingServiceSettings": { + "get": { + "tags": [ + "NetUsb" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/GetStreamingServiceSettingsResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetStreamingServiceSettingsResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/GetStreamingServiceSettingsResponse" + } + } + } + } + } + } + }, + "/YamahaExtendedControl/v1/netusb/getPlayInfo": { + "get": { + "tags": [ + "NetUsb" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/GetPlayInfoResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetPlayInfoResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/GetPlayInfoResponse" + } + } + } + } + } + } + }, + "/YamahaExtendedControl/v1/netusb/getPlayQueue": { + "get": { + "tags": [ + "NetUsb" + ], + "parameters": [ + { + "name": "index", + "in": "query", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/GetPlayQueueResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetPlayQueueResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/GetPlayQueueResponse" + } + } + } + } + } + } + }, + "/YamahaExtendedControl/v1/netusb/getRecentInfo": { + "get": { + "tags": [ + "NetUsb" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/GetRecentInfoResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetRecentInfoResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/GetRecentInfoResponse" + } + } + } + } + } + } + }, + "/YamahaExtendedControl/v1/netusb/recallRecentItem": { + "get": { + "tags": [ + "NetUsb" + ], + "parameters": [ + { + "name": "zone", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "num", + "in": "query", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + } + } + } + } + } + }, + "/YamahaExtendedControl/v1/netusb/setPlayback": { + "get": { + "tags": [ + "NetUsb" + ], + "parameters": [ + { + "name": "playback", + "in": "query", + "schema": { + "enum": [ + "pause", + "previous", + "next", + "stop" + ] + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + } + } + } + } + } + }, + "/YamahaExtendedControl/v1/netusb/toggleShuffle": { + "get": { + "tags": [ + "NetUsb" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + } + } + } + } + } + }, + "/YamahaExtendedControl/v1/netusb/toggleRepeat": { + "get": { + "tags": [ + "NetUsb" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + } + } + } + } + } + }, + "/YamahaExtendedControl/v1/netusb/getListInfo": { + "get": { + "tags": [ + "NetUsb" + ], + "parameters": [ + { + "name": "list_id", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "input", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "size", + "in": "query", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "lang", + "in": "query", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/GetListInfoResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetListInfoResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/GetListInfoResponse" + } + } + } + } + } + } + }, + "/YamahaExtendedControl/v1/netusb/setListControl": { + "get": { + "tags": [ + "NetUsb" + ], + "parameters": [ + { + "name": "type", + "in": "query", + "schema": { + "enum": [ + "select", + "play", + "return" + ] + } + }, + { + "name": "index", + "in": "query", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "zone", + "in": "query", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + } + } + } + } + } + }, + "/YamahaExtendedControl/v1/netusb/manageList": { + "get": { + "tags": [ + "NetUsb" + ], + "parameters": [ + { + "name": "list_id", + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "type", + "in": "query", + "schema": { + "enum": [ + "play_now", + "play_next", + "add_to_queue" + ] + } + }, + { + "name": "index", + "in": "query", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "timeout", + "in": "query", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "zone", + "in": "query", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + } + } + } + } + } + }, + "/YamahaExtendedControl/v1/netusb/managePlayQueue": { + "get": { + "tags": [ + "NetUsb" + ], + "parameters": [ + { + "name": "type", + "in": "query", + "schema": { + "enum": [ + "play", + "remove" + ] + } + }, + { + "name": "index", + "in": "query", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "zone", + "in": "query", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + } + } + } + } + } + }, + "/YamahaExtendedControl/v1/netusb/copyPlayQueue": { + "get": { + "tags": [ + "NetUsb" + ], + "parameters": [ + { + "name": "index", + "in": "query", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + } + } + } + } + } + }, + "/YamahaExtendedControl/v1/netusb/movePlayQueueItem": { + "get": { + "tags": [ + "NetUsb" + ], + "parameters": [ + { + "name": "from", + "in": "query", + "schema": { + "type": "integer", + "format": "int32" + } + }, + { + "name": "to", + "in": "query", + "schema": { + "type": "integer", + "format": "int32" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + } + } + } + } + } + }, + "/YamahaExtendedControl/v1/system/getFeatures": { + "get": { + "tags": [ + "System" + ], + "summary": "Get the available features for this device", + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/GetFeaturesResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetFeaturesResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/GetFeaturesResponse" + } + } + } + } + } + } + }, + "/YamahaExtendedControl/v1/system/getLocationInfo": { + "get": { + "tags": [ + "System" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/GetLocationInfoResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetLocationInfoResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/GetLocationInfoResponse" + } + } + } + } + } + } + }, + "/YamahaExtendedControl/v1/system/getNameText": { + "get": { + "tags": [ + "System" + ], + "summary": "Get sources friendly names", + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/GetNameTextResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetNameTextResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/GetNameTextResponse" + } + } + } + } + } + } + }, + "/YamahaExtendedControl/v1/system/getDeviceInfo": { + "get": { + "tags": [ + "System" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/GetDeviceInfoResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetDeviceInfoResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/GetDeviceInfoResponse" + } + } + } + } + } + } + }, + "/YamahaExtendedControl/v1/system/isNewFirmwareAvailable": { + "get": { + "tags": [ + "System" + ], + "parameters": [ + { + "name": "type", + "in": "query", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/IsNewFirmwareAvailableResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/IsNewFirmwareAvailableResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/IsNewFirmwareAvailableResponse" + } + } + } + } + } + } + }, + "/YamahaExtendedControl/v1/system/getFuncStatus": { + "get": { + "tags": [ + "System" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/GetFuncStatusResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetFuncStatusResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/GetFuncStatusResponse" + } + } + } + } + } + } + }, + "/YamahaExtendedControl/v1/system/getDisklavierSettings": { + "get": { + "tags": [ + "System" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/GetDisklavierSettingsResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetDisklavierSettingsResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/GetDisklavierSettingsResponse" + } + } + } + } + } + } + }, + "/YamahaExtendedControl/v1/system/getTag": { + "get": { + "tags": [ + "System" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/GetTagResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetTagResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/GetTagResponse" + } + } + } + } + } + } + }, + "/YamahaExtendedControl/v1/system/getYpaoConfig": { + "get": { + "tags": [ + "System" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/GetYpaoConfigResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetYpaoConfigResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/GetYpaoConfigResponse" + } + } + } + } + } + } + }, + "/YamahaExtendedControl/v1/system/setSpeakerA": { + "get": { + "tags": [ + "System" + ], + "parameters": [ + { + "name": "enable", + "in": "query", + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + } + } + } + } + } + }, + "/YamahaExtendedControl/v1/system/setSpeakerB": { + "get": { + "tags": [ + "System" + ], + "parameters": [ + { + "name": "enable", + "in": "query", + "schema": { + "type": "boolean" + } + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/BaseResponse" + } + } + } + } + } + } + }, + "/YamahaExtendedControl/v1/system/getNetworkStandby": { + "get": { + "tags": [ + "System" + ], + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/GetNetworkStandbyResponse" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetNetworkStandbyResponse" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/GetNetworkStandbyResponse" + } + } + } + } + } + } + } + }, + "components": { + "schemas": { + "Audio": { + "type": "object", + "properties": { + "error": { + "type": "integer", + "format": "int32" + }, + "format": { + "type": "string" + }, + "fs": { + "type": "string" + } + } + }, + "BaseResponse": { + "type": "object", + "properties": { + "response_code": { + "type": "string" + } + } + }, + "Ccs": { + "type": "object", + "properties": { + "supported": { + "type": "boolean" + } + } + }, + "Common": { + "type": "object", + "properties": { + "attribute": { + "type": "integer", + "format": "int32" + }, + "swfr_crossover_list": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + } + }, + "speaker_size": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Speaker_size" + } + } + } + }, + "Disklavier": { + "type": "object", + "properties": { + "ip_address": { + "type": "string" + } + } + }, + "Distribution": { + "type": "object", + "properties": { + "version": { + "type": "integer", + "format": "int32" + }, + "compatible_client": { + "type": "array", + "items": { + "type": "integer", + "format": "int32" + } + }, + "client_max": { + "type": "integer", + "format": "int32" + }, + "server_zone_list": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "Front_l": { + "type": "object", + "properties": { + "attribute": { + "type": "integer", + "format": "int32" + }, + "range_step": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Range_step" + } + } + } + }, + "Front_r": { + "type": "object", + "properties": { + "attribute": { + "type": "integer", + "format": "int32" + }, + "range_step": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Range_step1" + } + } + } + }, + "GetDeviceInfoResponse": { + "type": "object", + "properties": { + "response_code": { + "type": "integer", + "format": "int32" + }, + "model_name": { + "type": "string" + }, + "destination": { + "type": "string" + }, + "device_id": { + "type": "string" + }, + "system_id": { + "type": "string" + }, + "system_version": { + "type": "integer", + "format": "int32" + }, + "api_version": { + "type": "number", + "format": "double" + }, + "netmodule_generation": { + "type": "integer", + "format": "int32" + }, + "netmodule_version": { + "type": "string" + }, + "netmodule_checksum": { + "type": "string" + }, + "operation_mode": { + "type": "string" + }, + "update_error_code": { + "type": "string" + } + } + }, + "GetDisklavierSettingsResponse": { + "type": "object", + "properties": { + "response_code": { + "type": "integer", + "format": "int32" + }, + "enable": { + "type": "boolean" + }, + "mode": { + "type": "string" + }, + "input": { + "type": "string" + }, + "pair": { + "$ref": "#/components/schemas/Pair" + }, + "disklavier": { + "$ref": "#/components/schemas/Disklavier" + } + } + }, + "GetDistributionInfoResponse": { + "type": "object", + "properties": { + "response_code": { + "type": "integer", + "format": "int32" + }, + "group_id": { + "type": "string" + }, + "group_name": { + "type": "string" + }, + "role": { + "type": "string" + }, + "server_zone": { + "type": "string" + }, + "client_list": { + "type": "array" + } + } + }, + "GetFeaturesResponse": { + "type": "object", + "properties": { + "response_code": { + "type": "integer", + "format": "int32" + }, + "system": { + "$ref": "#/components/schemas/System" + }, + "zone": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Zone" + } + }, + "tuner": { + "$ref": "#/components/schemas/Tuner" + }, + "netusb": { + "$ref": "#/components/schemas/Netusb" + }, + "distribution": { + "$ref": "#/components/schemas/Distribution" + }, + "ccs": { + "$ref": "#/components/schemas/Ccs" + } + } + }, + "GetFuncStatusResponse": { + "type": "object", + "properties": { + "response_code": { + "type": "integer", + "format": "int32" + }, + "auto_power_standby": { + "type": "boolean" + }, + "speaker_a": { + "type": "boolean" + }, + "speaker_b": { + "type": "boolean" + }, + "headphone": { + "type": "boolean" + } + } + }, + "GetListInfoResponse": { + "type": "object", + "properties": { + "response_code": { + "type": "integer", + "format": "int32" + }, + "input": { + "type": "string" + }, + "menu_layer": { + "type": "integer", + "format": "int32" + }, + "max_line": { + "type": "integer", + "format": "int32" + }, + "index": { + "type": "integer", + "format": "int32" + }, + "playing_index": { + "type": "integer", + "format": "int32" + }, + "menu_name": { + "type": "string" + }, + "list_info": { + "type": "array", + "items": { + "$ref": "#/components/schemas/List_info" + } + } + } + }, + "GetLocationInfoResponse": { + "type": "object", + "properties": { + "response_code": { + "type": "integer", + "format": "int32" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "zone_list": { + "$ref": "#/components/schemas/Zone_list" + } + } + }, + "GetMcPlaylistNameResponse": { + "type": "object", + "properties": { + "response_code": { + "type": "integer", + "format": "int32" + }, + "name_list": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "GetNameTextResponse": { + "type": "object", + "properties": { + "response_code": { + "type": "integer", + "format": "int32" + }, + "zone_list": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Zone_list2" + } + }, + "input_list": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Input_list2" + } + }, + "sound_program_list": { + "type": "array" + } + } + }, + "GetNetworkStandbyResponse": { + "type": "object", + "properties": { + "response_code": { + "type": "integer", + "format": "int32" + }, + "network_standby": { + "type": "string" + } + } + }, + "GetPlayInfoResponse": { + "type": "object", + "properties": { + "response_code": { + "type": "integer", + "format": "int32" + }, + "input": { + "type": "string" + }, + "play_queue_type": { + "type": "string" + }, + "playback": { + "type": "string" + }, + "repeat": { + "type": "string" + }, + "shuffle": { + "type": "string" + }, + "play_time": { + "type": "integer", + "format": "int32" + }, + "total_time": { + "type": "integer", + "format": "int32" + }, + "artist": { + "type": "string" + }, + "album": { + "type": "string" + }, + "track": { + "type": "string" + }, + "albumart_url": { + "type": "string" + }, + "albumart_id": { + "type": "integer", + "format": "int32" + }, + "usb_devicetype": { + "type": "string" + }, + "auto_stopped": { + "type": "boolean" + }, + "attribute": { + "type": "integer", + "format": "int32" + }, + "repeat_available": { + "type": "array", + "items": { + "type": "string" + } + }, + "shuffle_available": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "GetPlayQueueResponse": { + "type": "object", + "properties": { + "response_code": { + "type": "integer", + "format": "int32" + }, + "type": { + "type": "string" + }, + "max_line": { + "type": "integer", + "format": "int32" + }, + "playing_index": { + "type": "integer", + "format": "int32" + }, + "index": { + "type": "integer", + "format": "int32" + }, + "track_info": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Track_info" + } + } + } + }, + "GetRecentInfoResponse": { + "type": "object", + "properties": { + "response_code": { + "type": "integer", + "format": "int32" + }, + "recent_info": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Recent_info" + } + } + } + }, + "GetSignalInfoResponse": { + "type": "object", + "properties": { + "response_code": { + "type": "integer", + "format": "int32" + }, + "audio": { + "$ref": "#/components/schemas/Audio" + } + } + }, + "GetStatusResponse": { + "type": "object", + "properties": { + "response_code": { + "type": "integer", + "format": "int32" + }, + "power": { + "type": "string" + }, + "sleep": { + "type": "integer", + "format": "int32" + }, + "volume": { + "type": "integer", + "format": "int32" + }, + "mute": { + "type": "boolean" + }, + "max_volume": { + "type": "integer", + "format": "int32" + }, + "input": { + "type": "string" + }, + "distribution_enable": { + "type": "boolean" + }, + "link_control": { + "type": "string" + }, + "link_audio_delay": { + "type": "string" + }, + "link_audio_quality": { + "type": "string" + }, + "disable_flags": { + "type": "integer", + "format": "int32" + } + } + }, + "GetStreamingServiceSettingsResponse": { + "type": "object", + "properties": { + "response_code": { + "type": "integer", + "format": "int32" + }, + "services": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Services" + } + } + } + }, + "GetTagResponse": { + "type": "object", + "properties": { + "response_code": { + "type": "integer", + "format": "int32" + }, + "zone_list": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Zone_list3" + } + }, + "input_list": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Input_list3" + } + } + } + }, + "GetYpaoConfigResponse": { + "type": "object", + "properties": { + "response_code": { + "type": "integer", + "format": "int32" + }, + "ypao_status": { + "type": "string" + }, + "ypao_setting": { + "type": "boolean" + }, + "ypao_speaker_unit": { + "type": "string" + }, + "ypao_volume": { + "type": "boolean" + }, + "disable_flags": { + "type": "integer", + "format": "int32" + } + } + }, + "Input_list": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "distribution_enable": { + "type": "boolean" + }, + "rename_enable": { + "type": "boolean" + }, + "account_enable": { + "type": "boolean" + }, + "play_info_type": { + "type": "string" + } + } + }, + "Input_list2": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "text": { + "type": "string" + } + } + }, + "Input_list3": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "tag": { + "type": "integer", + "format": "int32" + } + } + }, + "IsNewFirmwareAvailableResponse": { + "type": "object", + "properties": { + "response_code": { + "type": "integer", + "format": "int32" + }, + "available": { + "type": "boolean" + } + } + }, + "List_info": { + "type": "object", + "properties": { + "text": { + "type": "string" + }, + "subtexts": { + "type": "array" + }, + "thumbnail": { + "type": "string" + }, + "logo": { + "type": "string" + }, + "attribute": { + "type": "integer", + "format": "int32" + } + } + }, + "Mc_playlist": { + "type": "object", + "properties": { + "size": { + "type": "integer", + "format": "int32" + }, + "num": { + "type": "integer", + "format": "int32" + } + } + }, + "Netusb": { + "type": "object", + "properties": { + "func_list": { + "type": "array", + "items": { + "type": "string" + } + }, + "preset": { + "$ref": "#/components/schemas/Preset1" + }, + "recent_info": { + "$ref": "#/components/schemas/Recent_info2" + }, + "play_queue": { + "$ref": "#/components/schemas/Play_queue" + }, + "mc_playlist": { + "$ref": "#/components/schemas/Mc_playlist" + }, + "net_radio_type": { + "type": "string" + }, + "pandora": { + "$ref": "#/components/schemas/Pandora" + }, + "siriusxm": { + "$ref": "#/components/schemas/Siriusxm" + } + } + }, + "Pair": { + "type": "object", + "properties": { + "mac_address": { + "type": "string" + } + } + }, + "Pandora": { + "type": "object", + "properties": { + "sort_option_list": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "Play_queue": { + "type": "object", + "properties": { + "size": { + "type": "integer", + "format": "int32" + } + } + }, + "Preset": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "num": { + "type": "integer", + "format": "int32" + } + } + }, + "Preset1": { + "type": "object", + "properties": { + "num": { + "type": "integer", + "format": "int32" + } + } + }, + "Range_step": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "min": { + "type": "integer", + "format": "int32" + }, + "max": { + "type": "integer", + "format": "int32" + }, + "step": { + "type": "integer", + "format": "int32" + } + } + }, + "Range_step1": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "min": { + "type": "integer", + "format": "int32" + }, + "max": { + "type": "integer", + "format": "int32" + }, + "step": { + "type": "integer", + "format": "int32" + } + } + }, + "Range_step2": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "min": { + "type": "integer", + "format": "int32" + }, + "max": { + "type": "integer", + "format": "int32" + }, + "step": { + "type": "integer", + "format": "int32" + } + } + }, + "Range_step3": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "min": { + "type": "integer", + "format": "int32" + }, + "max": { + "type": "integer", + "format": "int32" + }, + "step": { + "type": "integer", + "format": "int32" + } + } + }, + "Range_step4": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "min": { + "type": "integer", + "format": "int32" + }, + "max": { + "type": "integer", + "format": "int32" + }, + "step": { + "type": "integer", + "format": "int32" + } + } + }, + "Recent_info": { + "type": "object", + "properties": { + "input": { + "type": "string" + }, + "text": { + "type": "string" + }, + "albumart_url": { + "type": "string" + }, + "play_count": { + "type": "integer", + "format": "int32" + }, + "attribute": { + "type": "integer", + "format": "int32" + } + } + }, + "Recent_info2": { + "type": "object", + "properties": { + "num": { + "type": "integer", + "format": "int32" + } + } + }, + "Services": { + "type": "object", + "properties": { + "input": { + "type": "string" + }, + "confirmed": { + "type": "boolean" + }, + "use_service": { + "type": "boolean" + } + } + }, + "Siriusxm": { + "type": "object", + "properties": { + "api_type": { + "type": "string" + } + } + }, + "Speaker_settings": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "common": { + "$ref": "#/components/schemas/Common" + }, + "front_l": { + "$ref": "#/components/schemas/Front_l" + }, + "front_r": { + "$ref": "#/components/schemas/Front_r" + }, + "swfr": { + "$ref": "#/components/schemas/Swfr" + } + } + }, + "Speaker_size": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "size_list": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "Swfr": { + "type": "object", + "properties": { + "attribute": { + "type": "integer", + "format": "int32" + }, + "range_step": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Range_step2" + } + } + } + }, + "System": { + "type": "object", + "properties": { + "func_list": { + "type": "array", + "items": { + "type": "string" + } + }, + "zone_num": { + "type": "integer", + "format": "int32" + }, + "input_list": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Input_list" + } + }, + "speaker_settings": { + "$ref": "#/components/schemas/Speaker_settings" + }, + "ypao_speaker_unit_list": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "Track_info": { + "type": "object", + "properties": { + "input": { + "type": "string" + }, + "text": { + "type": "string" + }, + "thumbnail": { + "type": "string" + }, + "attribute": { + "type": "integer", + "format": "int32" + } + } + }, + "Tuner": { + "type": "object", + "properties": { + "func_list": { + "type": "array", + "items": { + "type": "string" + } + }, + "range_step": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Range_step4" + } + }, + "preset": { + "$ref": "#/components/schemas/Preset" + } + } + }, + "Zone": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "func_list": { + "type": "array", + "items": { + "type": "string" + } + }, + "input_list": { + "type": "array", + "items": { + "type": "string" + } + }, + "link_control_list": { + "type": "array", + "items": { + "type": "string" + } + }, + "link_audio_delay_list": { + "type": "array", + "items": { + "type": "string" + } + }, + "link_audio_quality_list": { + "type": "array", + "items": { + "type": "string" + } + }, + "range_step": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Range_step3" + } + } + } + }, + "Zone_list": { + "type": "object", + "properties": { + "main": { + "type": "boolean" + } + } + }, + "Zone_list2": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "text": { + "type": "string" + } + } + }, + "Zone_list3": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "tag": { + "type": "integer", + "format": "int32" + } + } + } + } + }, + "tags": [ + { + "name": "Dist" + }, + { + "name": "Main" + }, + { + "name": "NetUsb" + }, + { + "name": "System" + } + ] +} \ No newline at end of file diff --git a/MusicCast.Net.Api.Server/Program.cs b/MusicCast.Net.Api.Server/Program.cs new file mode 100644 index 0000000..3e6fd58 --- /dev/null +++ b/MusicCast.Net.Api.Server/Program.cs @@ -0,0 +1,40 @@ +using System.Text.Json.Serialization; + +var builder = WebApplication.CreateBuilder(args); + +// Add services to the container. + +builder.Services.AddControllers(); +// Learn more about configuring OpenAPI at https://aka.ms/aspnet/openapi +builder.Services.AddOpenApi(); + +// String enums: https://stackoverflow.com/a/76644093 +builder.Services.ConfigureHttpJsonOptions(options => +{ + options.SerializerOptions.Converters.Add(new JsonStringEnumConverter()); +}); +builder.Services.Configure(options => +{ + options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()); +}); + +var app = builder.Build(); + +// Configure the HTTP request pipeline. +if (app.Environment.IsDevelopment()) +{ + app.MapOpenApi(); + + app.UseSwaggerUI(options => + { + options.SwaggerEndpoint("/openapi/v1.json", "v1"); + }); +} + +app.UseHttpsRedirection(); + +app.UseAuthorization(); + +app.MapControllers(); + +app.Run(); \ No newline at end of file diff --git a/MusicCast.Net.Api.Server/Properties/launchSettings.json b/MusicCast.Net.Api.Server/Properties/launchSettings.json new file mode 100644 index 0000000..e4e40c8 --- /dev/null +++ b/MusicCast.Net.Api.Server/Properties/launchSettings.json @@ -0,0 +1,25 @@ +{ + "$schema": "https://json.schemastore.org/launchsettings.json", + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "launchUrl": "swagger", + "applicationUrl": "http://localhost:5235", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": true, + "launchUrl": "swagger", + "applicationUrl": "https://localhost:7211;http://localhost:5235", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/MusicCast.Net.Api.Server/appsettings.Development.json b/MusicCast.Net.Api.Server/appsettings.Development.json new file mode 100644 index 0000000..0c208ae --- /dev/null +++ b/MusicCast.Net.Api.Server/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/MusicCast.Net.Api.Server/appsettings.json b/MusicCast.Net.Api.Server/appsettings.json new file mode 100644 index 0000000..10f68b8 --- /dev/null +++ b/MusicCast.Net.Api.Server/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/MusicCast.Net.sln b/MusicCast.Net.sln new file mode 100644 index 0000000..a8b9b65 --- /dev/null +++ b/MusicCast.Net.sln @@ -0,0 +1,16 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MusicCast.Net.Api.Server", "MusicCast.Net.Api.Server\MusicCast.Net.Api.Server.csproj", "{7FE615F0-07A3-4A1D-8144-E22B96639F8B}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {7FE615F0-07A3-4A1D-8144-E22B96639F8B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7FE615F0-07A3-4A1D-8144-E22B96639F8B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7FE615F0-07A3-4A1D-8144-E22B96639F8B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7FE615F0-07A3-4A1D-8144-E22B96639F8B}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal