diff --git a/Server/Controllers/SerialController.cs b/Server/Controllers/SerialController.cs
new file mode 100644
index 0000000..640dbd1
--- /dev/null
+++ b/Server/Controllers/SerialController.cs
@@ -0,0 +1,59 @@
+using Microsoft.AspNetCore.Mvc;
+using Server.Models;
+using Server.Services;
+
+namespace Server.Controllers
+{
+ ///
+ /// Controller for serial port management operations
+ ///
+ [ApiController]
+ [Route("api/[controller]")]
+ [Produces("application/json")]
+ public class SerialController : ControllerBase
+ {
+ private readonly ISerialCommunicationService _serialService;
+ private readonly ILogger _logger;
+
+ public SerialController(ISerialCommunicationService serialService, ILogger logger)
+ {
+ _serialService = serialService ?? throw new ArgumentNullException(nameof(serialService));
+ _logger = logger ?? throw new ArgumentNullException(nameof(logger));
+ }
+
+ ///
+ /// Gets all available serial ports on the server
+ ///
+ /// JSON array of available serial port names
+ /// Returns the list of available serial ports
+ /// Internal server error
+ [HttpGet("ports")]
+ [ProducesResponseType(typeof(PortListResponse), StatusCodes.Status200OK)]
+ [ProducesResponseType(typeof(ErrorResponse), StatusCodes.Status500InternalServerError)]
+ public ActionResult GetPorts()
+ {
+ try
+ {
+ _logger.LogInformation("Getting available serial ports");
+ var ports = _serialService.GetAvailablePorts();
+
+ var response = new PortListResponse
+ {
+ Ports = ports
+ };
+
+ _logger.LogInformation("Found {PortCount} available ports", response.Count);
+ return Ok(response);
+ }
+ catch (Exception ex)
+ {
+ _logger.LogError(ex, "Error getting available ports");
+ return StatusCode(500, new ErrorResponse
+ {
+ Error = "Internal server error while getting ports",
+ Details = ex.Message
+ });
+ }
+ }
+ }
+}
\ No newline at end of file