<% {symbol_table_id, symbol_code} = AprsmeWeb.MapLive.PacketUtils.get_symbol_info(@packet || %{}) %> <% symbol_table = if symbol_table_id in ["/", "\\", "]"], do: symbol_table_id, else: "/" %> <% symbol_code = symbol_code || ">" %> <% symbol_table_num = case symbol_table do "/" -> 0 "\\" -> 1 "]" -> 2 _ -> 0 end %> <% symbol_code_ord = symbol_code |> String.to_charlist() |> List.first() |> (fn c -> if is_integer(c), do: c, else: 63 end).() %> <% _symbol_img = "/aprs-symbols/aprs-symbols-24-#{symbol_table_num}@2x.png" %> <% _symbol_index = symbol_code_ord - 33 %>

APRS Station

{@callsign} <%= if @packet do %> <% {symbol_table_id, symbol_code} = AprsmeWeb.MapLive.PacketUtils.get_symbol_info(@packet) %> <% symbol_table = if symbol_table_id in ["/", "\\", "]"], do: symbol_table_id, else: "/" %> <% symbol_code = symbol_code || ">" %> <% table_id = if symbol_table == "/", do: "0", else: if(symbol_table == "]", do: "2", else: "1") %> <% symbol_code_ord = symbol_code |> String.to_charlist() |> List.first() |> (fn c -> if is_integer(c), do: c, else: 63 end).() %> <% index = symbol_code_ord - 33 %> <% safe_index = max(0, min(index, 93)) %> <% column = rem(safe_index, 16) %> <% row = div(safe_index, 16) %> <% x = -column * 128 %> <% y = -row * 128 %> <% symbol_img = "/aprs-symbols/aprs-symbols-128-#{table_id}@2x.png" %>
<% end %>
<.link navigate={~p"/packets/#{@callsign}"} class="btn btn-outline btn-sm"> View packets <%= if AprsmeWeb.MapLive.PacketUtils.has_weather_packets?(@callsign) do %> <.link navigate={~p"/weather/#{@callsign}"} class="btn btn-primary btn-sm"> Weather charts <% end %>
<%= if @packet do %>

Position Information

Location
{@packet.lat || ""}, {@packet.lon || ""}
Last Position
{AprsmeWeb.MapLive.PacketUtils.get_timestamp(@packet)}
<%= if @packet.altitude do %>
Altitude
{@packet.altitude} ft
<% end %> <%= if @packet.course do %>
Course
{@packet.course}°
<% end %> <%= if @packet.speed do %>
Speed
{@packet.speed} MPH
<% end %>

Device Information

Device
<%= if @packet.device_model || @packet.device_vendor do %> {[ @packet.device_model, @packet.device_vendor, @packet.device_contact ] |> Enum.reject(&is_nil/1) |> Enum.join(" ")} <%= if @packet.device_class do %> ({@packet.device_class}) <% end %> <% else %> {@packet.device_identifier || "Unknown"} <% end %>
Path
{@packet.path || ""}
Raw Packet
<%= if is_binary(@packet.raw_packet) do %> {Aprsme.EncodingUtils.sanitize_string(@packet.raw_packet)} <% else %> {@packet.raw_packet || ""} <% end %>

Stations Near Current Position

<%= for neighbor <- @neighbors do %> <% end %>
Callsign Distance & Course Last Heard
<.link navigate={~p"/info/#{neighbor.callsign}"} class="link link-primary"> {neighbor.callsign} <%= if neighbor.packet do %> <% {symbol_table_id, symbol_code} = AprsmeWeb.MapLive.PacketUtils.get_symbol_info(neighbor.packet) %> <% symbol_table = if symbol_table_id in ["/", "\\", "]"], do: symbol_table_id, else: "/" %> <% symbol_code = symbol_code || ">" %> <% table_id = if symbol_table == "/", do: "0", else: if(symbol_table == "]", do: "2", else: "1") %> <% symbol_code_ord = symbol_code |> String.to_charlist() |> List.first() |> (fn c -> if is_integer(c), do: c, else: 63 end).() %> <% index = symbol_code_ord - 33 %> <% safe_index = max(0, min(index, 93)) %> <% column = rem(safe_index, 16) %> <% row = div(safe_index, 16) %> <% x = -column * 128 %> <% y = -row * 128 %> <% symbol_img = "/aprs-symbols/aprs-symbols-128-#{table_id}@2x.png" %>
<% end %>
<%= if neighbor.course do %> {neighbor.distance || ""} @ {Float.round(neighbor.course, 0)}° <% else %> {neighbor.distance || ""} <% end %> {neighbor.last_heard || ""}
<% else %>

No data available

No recent packet data available for this callsign.

<% end %>