mirror of
https://github.com/aaru-dps/Aaru.Server.git
synced 2025-12-16 19:24:27 +00:00
838 lines
30 KiB
Plaintext
838 lines
30 KiB
Plaintext
@page "/Report/View/{Id:int}"
|
|
@using Aaru.CommonTypes.Metadata
|
|
@using Aaru.Server.Database
|
|
@using Blazorise
|
|
@rendermode InteractiveServer
|
|
|
|
@inject Microsoft.EntityFrameworkCore.IDbContextFactory<DbContext> DbContextFactory
|
|
|
|
<PageTitle>@_pageTitle</PageTitle>
|
|
<style>
|
|
.list-group-item {
|
|
background-color: #212529; color: white; border-color: #373b3e;
|
|
}
|
|
</style>
|
|
@if(_notFound)
|
|
{
|
|
<div class="stats-section">
|
|
<h1 style="color: red; align-content: center; padding: 2rem">The requested device report has not been found...</h1>
|
|
</div>
|
|
|
|
return;
|
|
}
|
|
@if(!_initialized)
|
|
{
|
|
<div class="stats-section">
|
|
<h1 style="color: red; align-content: center; padding: 2rem">Loading...</h1>
|
|
</div>
|
|
|
|
return;
|
|
}
|
|
|
|
<div class="stats-section">
|
|
<h1 style="color: #e18fdc; align-content: center; padding: 2rem">@_pageTitle</h1>
|
|
</div>
|
|
|
|
<div class="stats-section">
|
|
<h3 style="font-weight: bold;">
|
|
@lblDeviceType<br/>
|
|
</h3>
|
|
<Accordion>
|
|
@if(UsbItem is not null)
|
|
{
|
|
<AccordionItem>
|
|
<AccordionHeader>
|
|
<Heading Size="HeadingSize.Is5">
|
|
<AccordionToggle>USB characteristics</AccordionToggle>
|
|
</Heading>
|
|
</AccordionHeader>
|
|
<AccordionBody>
|
|
<Table FullWidth>
|
|
<TableBody>
|
|
<TableRow>
|
|
<TableRowHeader class="text-end">Manufacturer</TableRowHeader>
|
|
<TableRowCell>@UsbItem.Manufacturer</TableRowCell>
|
|
</TableRow>
|
|
<TableRow>
|
|
<TableRowHeader class="text-end">Product</TableRowHeader>
|
|
<TableRowCell>@UsbItem.Product</TableRowCell>
|
|
</TableRow>
|
|
<TableRow>
|
|
<TableRowHeader class="text-end">Vendor ID</TableRowHeader>
|
|
<TableRowCell>@UsbItem.VendorDescription</TableRowCell>
|
|
</TableRow>
|
|
<TableRow>
|
|
<TableRowHeader class="text-end">Product ID</TableRowHeader>
|
|
<TableRowCell>@UsbItem.ProductDescription</TableRowCell>
|
|
</TableRow>
|
|
</TableBody>
|
|
</Table>
|
|
</AccordionBody>
|
|
</AccordionItem>
|
|
}
|
|
@if(FireWireItem is not null)
|
|
{
|
|
<AccordionItem>
|
|
<AccordionHeader>
|
|
<Heading Size="HeadingSize.Is5">
|
|
<AccordionToggle>FireWire characteristics</AccordionToggle>
|
|
</Heading>
|
|
</AccordionHeader>
|
|
<AccordionBody>
|
|
<Table FullWidth>
|
|
<TableBody>
|
|
<TableRow>
|
|
<TableRowHeader class="text-end">Manufacturer</TableRowHeader>
|
|
<TableRowCell>@FireWireItem.Manufacturer</TableRowCell>
|
|
</TableRow>
|
|
<TableRow>
|
|
<TableRowHeader class="text-end">Product</TableRowHeader>
|
|
<TableRowCell>@FireWireItem.Product</TableRowCell>
|
|
</TableRow>
|
|
<TableRow>
|
|
<TableRowHeader class="text-end">Vendor ID</TableRowHeader>
|
|
<TableRowCell>@FireWireItem.VendorDescription</TableRowCell>
|
|
</TableRow>
|
|
<TableRow>
|
|
<TableRowHeader class="text-end">Product ID</TableRowHeader>
|
|
<TableRowCell>@FireWireItem.ProductDescription</TableRowCell>
|
|
</TableRow>
|
|
</TableBody>
|
|
</Table>
|
|
</AccordionBody>
|
|
</AccordionItem>
|
|
}
|
|
@if(PcmciaItem != null)
|
|
{
|
|
<AccordionItem>
|
|
<AccordionHeader>
|
|
<Heading Size="HeadingSize.Is5">
|
|
<AccordionToggle>PCMCIA characteristics</AccordionToggle>
|
|
</Heading>
|
|
</AccordionHeader>
|
|
<AccordionBody>
|
|
<Table FullWidth>
|
|
<TableBody>
|
|
<TableRow>
|
|
<TableRowHeader class="text-end">Manufacturer</TableRowHeader>
|
|
<TableRowCell>@PcmciaItem.Manufacturer</TableRowCell>
|
|
</TableRow>
|
|
<TableRow>
|
|
<TableRowHeader class="text-end">Product</TableRowHeader>
|
|
<TableRowCell>@PcmciaItem.Product</TableRowCell>
|
|
</TableRow>
|
|
<TableRow>
|
|
<TableRowHeader class="text-end">Manufacturer code</TableRowHeader>
|
|
<TableRowCell>@PcmciaItem.VendorDescription</TableRowCell>
|
|
</TableRow>
|
|
<TableRow>
|
|
<TableRowHeader class="text-end">Card code</TableRowHeader>
|
|
<TableRowCell>@PcmciaItem.ProductDescription</TableRowCell>
|
|
</TableRow>
|
|
<TableRow>
|
|
<TableRowHeader class="text-end">Compliance</TableRowHeader>
|
|
<TableRowCell>@PcmciaItem.Compliance</TableRowCell>
|
|
</TableRow>
|
|
@if(PcmciaTuples != null)
|
|
{
|
|
foreach(KeyValuePair<string, string> kvp in PcmciaTuples)
|
|
{
|
|
<TableRow>
|
|
<TableRowHeader class="text-end">@kvp.Key</TableRowHeader>
|
|
<TableRowCell>@kvp.Value</TableRowCell>
|
|
</TableRow>
|
|
}
|
|
}
|
|
</TableBody>
|
|
</Table>
|
|
</AccordionBody>
|
|
</AccordionItem>
|
|
}
|
|
@if(DeviceIdentification != null)
|
|
{
|
|
<AccordionItem>
|
|
<AccordionHeader>
|
|
<Heading Size="HeadingSize.Is5">
|
|
<AccordionToggle>Device identification</AccordionToggle>
|
|
</Heading>
|
|
</AccordionHeader>
|
|
<AccordionBody>
|
|
<Table class="table-borderless table-dark" FullWidth>
|
|
<TableBody>
|
|
@foreach(KeyValuePair<string, string> kvp in DeviceIdentification)
|
|
{
|
|
<TableRow>
|
|
<TableRowHeader>@kvp.Key</TableRowHeader>
|
|
<TableRowCell>@kvp.Value</TableRowCell>
|
|
</TableRow>
|
|
}
|
|
</TableBody>
|
|
</Table>
|
|
</AccordionBody>
|
|
</AccordionItem>
|
|
}
|
|
@if(SupportedAtaVersions != null)
|
|
{
|
|
<AccordionItem>
|
|
<AccordionHeader>
|
|
<Heading Size="HeadingSize.Is5">
|
|
<AccordionToggle>Supported ATA versions</AccordionToggle>
|
|
</Heading>
|
|
</AccordionHeader>
|
|
<AccordionBody>
|
|
<ListGroup>
|
|
@foreach(string version in SupportedAtaVersions)
|
|
{
|
|
<ListGroupItem>@version</ListGroupItem>
|
|
}
|
|
</ListGroup>
|
|
@if(MaximumAtaRevision is not null)
|
|
{
|
|
<span style="font-style: italic">Maximum ATA revision supported:</span>
|
|
<span> @MaximumAtaRevision</span>
|
|
}
|
|
</AccordionBody>
|
|
</AccordionItem>
|
|
}
|
|
@if(AtaTransport != null)
|
|
{
|
|
<AccordionItem>
|
|
<AccordionHeader>
|
|
<Heading Size="HeadingSize.Is5">
|
|
<AccordionToggle>@AtaTransport</AccordionToggle>
|
|
</Heading>
|
|
</AccordionHeader>
|
|
@if(AtaTransportVersions is not null)
|
|
{
|
|
<AccordionBody>
|
|
<ListGroup>
|
|
@foreach(string version in AtaTransportVersions)
|
|
{
|
|
<ListGroupItem>@version</ListGroupItem>
|
|
}
|
|
</ListGroup>
|
|
</AccordionBody>
|
|
}
|
|
</AccordionItem>
|
|
}
|
|
@if(GeneralConfiguration != null)
|
|
{
|
|
<AccordionItem>
|
|
<AccordionHeader>
|
|
<Heading Size="HeadingSize.Is5">
|
|
<AccordionToggle>General configuration</AccordionToggle>
|
|
</Heading>
|
|
</AccordionHeader>
|
|
<AccordionBody>
|
|
<ListGroup>
|
|
@foreach(string cfg in GeneralConfiguration)
|
|
{
|
|
<ListGroupItem>@cfg</ListGroupItem>
|
|
}
|
|
</ListGroup>
|
|
</AccordionBody>
|
|
</AccordionItem>
|
|
}
|
|
@if(SpecificConfiguration != null)
|
|
{
|
|
<AccordionItem>
|
|
<AccordionHeader>
|
|
<Heading Size="HeadingSize.Is5">
|
|
<AccordionToggle>Specific configuration</AccordionToggle>
|
|
</Heading>
|
|
</AccordionHeader>
|
|
<AccordionBody>
|
|
<ListGroup>
|
|
@foreach(string cfg in SpecificConfiguration)
|
|
{
|
|
<ListGroupItem>@cfg</ListGroupItem>
|
|
}
|
|
</ListGroup>
|
|
</AccordionBody>
|
|
</AccordionItem>
|
|
}
|
|
@if(DeviceCapabilities != null)
|
|
{
|
|
<AccordionItem>
|
|
<AccordionHeader>
|
|
<Heading Size="HeadingSize.Is5">
|
|
<AccordionToggle>Device capabilities</AccordionToggle>
|
|
</Heading>
|
|
</AccordionHeader>
|
|
<AccordionBody>
|
|
<ListGroup>
|
|
@foreach(string cap in DeviceCapabilities)
|
|
{
|
|
<ListGroupItem>@cap</ListGroupItem>
|
|
}
|
|
</ListGroup>
|
|
</AccordionBody>
|
|
</AccordionItem>
|
|
}
|
|
@if(PioTransferModes != null)
|
|
{
|
|
<AccordionItem>
|
|
<AccordionHeader>
|
|
<Heading Size="HeadingSize.Is5">
|
|
<AccordionToggle>Programmed I/O (PIO) transfer modes</AccordionToggle>
|
|
</Heading>
|
|
</AccordionHeader>
|
|
<AccordionBody>
|
|
<ListGroup>
|
|
@foreach(string cap in PioTransferModes)
|
|
{
|
|
<ListGroupItem>@cap</ListGroupItem>
|
|
}
|
|
</ListGroup>
|
|
</AccordionBody>
|
|
</AccordionItem>
|
|
}
|
|
@if(DmaTransferModes != null)
|
|
{
|
|
<AccordionItem>
|
|
<AccordionHeader>
|
|
<Heading Size="HeadingSize.Is5">
|
|
<AccordionToggle>Single-word DMA (DMA) transfer modes</AccordionToggle>
|
|
</Heading>
|
|
</AccordionHeader>
|
|
<AccordionBody>
|
|
<ListGroup>
|
|
@foreach(string cap in DmaTransferModes)
|
|
{
|
|
if(cap.Contains("active"))
|
|
{
|
|
<ListGroupItem class="active">@cap</ListGroupItem>
|
|
}
|
|
else
|
|
{
|
|
<ListGroupItem>@cap</ListGroupItem>
|
|
}
|
|
}
|
|
</ListGroup>
|
|
</AccordionBody>
|
|
</AccordionItem>
|
|
}
|
|
@if(MDmaTransferModes != null)
|
|
{
|
|
<AccordionItem>
|
|
<AccordionHeader>
|
|
<Heading Size="HeadingSize.Is5">
|
|
<AccordionToggle>Multi-word DMA (MDMA) transfer modes</AccordionToggle>
|
|
</Heading>
|
|
</AccordionHeader>
|
|
<AccordionBody>
|
|
<ListGroup>
|
|
@foreach(string cap in MDmaTransferModes)
|
|
{
|
|
if(cap.Contains("active"))
|
|
{
|
|
<ListGroupItem class="active">@cap</ListGroupItem>
|
|
}
|
|
else
|
|
{
|
|
<ListGroupItem>@cap</ListGroupItem>
|
|
}
|
|
}
|
|
</ListGroup>
|
|
</AccordionBody>
|
|
</AccordionItem>
|
|
}
|
|
@if(UltraDmaTransferModes != null)
|
|
{
|
|
<AccordionItem>
|
|
<AccordionHeader>
|
|
<Heading Size="HeadingSize.Is5">
|
|
<AccordionToggle>Ultra DMA transfer modes</AccordionToggle>
|
|
</Heading>
|
|
</AccordionHeader>
|
|
<AccordionBody>
|
|
<ListGroup>
|
|
@foreach(string cap in UltraDmaTransferModes)
|
|
{
|
|
if(cap.Contains("active"))
|
|
{
|
|
<ListGroupItem class="active">@cap</ListGroupItem>
|
|
}
|
|
else
|
|
{
|
|
<ListGroupItem>@cap</ListGroupItem>
|
|
}
|
|
}
|
|
</ListGroup>
|
|
</AccordionBody>
|
|
</AccordionItem>
|
|
}
|
|
@if(CommandSetAndFeatures != null)
|
|
{
|
|
<AccordionItem>
|
|
<AccordionHeader>
|
|
<Heading Size="HeadingSize.Is5">
|
|
<AccordionToggle>Command set and features</AccordionToggle>
|
|
</Heading>
|
|
</AccordionHeader>
|
|
<AccordionBody>
|
|
<ListGroup>
|
|
@foreach(string feature in CommandSetAndFeatures)
|
|
{
|
|
<ListGroupItem>@feature</ListGroupItem>
|
|
}
|
|
</ListGroup>
|
|
</AccordionBody>
|
|
</AccordionItem>
|
|
}
|
|
@if(Security != null)
|
|
{
|
|
<AccordionItem>
|
|
<AccordionHeader>
|
|
<Heading Size="HeadingSize.Is5">
|
|
<AccordionToggle>Security</AccordionToggle>
|
|
</Heading>
|
|
</AccordionHeader>
|
|
<AccordionBody>
|
|
<ListGroup>
|
|
@foreach(string feature in Security)
|
|
{
|
|
<ListGroupItem>@feature</ListGroupItem>
|
|
}
|
|
</ListGroup>
|
|
</AccordionBody>
|
|
</AccordionItem>
|
|
}
|
|
@if(Streaming != null)
|
|
{
|
|
<AccordionItem>
|
|
<AccordionHeader>
|
|
<Heading Size="HeadingSize.Is5">
|
|
<AccordionToggle>Streaming</AccordionToggle>
|
|
</Heading>
|
|
</AccordionHeader>
|
|
<AccordionBody>
|
|
<ListGroup>
|
|
@foreach(string feature in Streaming)
|
|
{
|
|
<ListGroupItem>@feature</ListGroupItem>
|
|
}
|
|
</ListGroup>
|
|
</AccordionBody>
|
|
</AccordionItem>
|
|
}
|
|
@if(SmartCommandTransport != null)
|
|
{
|
|
<AccordionItem>
|
|
<AccordionHeader>
|
|
<Heading Size="HeadingSize.Is5">
|
|
<AccordionToggle>S.M.A.R.T. Command Transport (SCT)</AccordionToggle>
|
|
</Heading>
|
|
</AccordionHeader>
|
|
<AccordionBody>
|
|
<ListGroup>
|
|
@foreach(string feature in SmartCommandTransport)
|
|
{
|
|
<ListGroupItem>@feature</ListGroupItem>
|
|
}
|
|
</ListGroup>
|
|
</AccordionBody>
|
|
</AccordionItem>
|
|
}
|
|
@if(NvCache != null)
|
|
{
|
|
<AccordionItem>
|
|
<AccordionHeader>
|
|
<Heading Size="HeadingSize.Is5">
|
|
<AccordionToggle>Non-Volatile Cache</AccordionToggle>
|
|
</Heading>
|
|
</AccordionHeader>
|
|
<AccordionBody>
|
|
<ListGroup>
|
|
@foreach(string feature in NvCache)
|
|
{
|
|
<ListGroupItem>@feature</ListGroupItem>
|
|
}
|
|
</ListGroup>
|
|
</AccordionBody>
|
|
</AccordionItem>
|
|
}
|
|
@if(Cid != null)
|
|
{
|
|
<AccordionItem>
|
|
<AccordionHeader>
|
|
<Heading Size="HeadingSize.Is5">
|
|
<AccordionToggle>Card Identification Register</AccordionToggle>
|
|
</Heading>
|
|
</AccordionHeader>
|
|
<AccordionBody>
|
|
@((MarkupString)Cid)
|
|
</AccordionBody>
|
|
</AccordionItem>
|
|
}
|
|
@if(Csd != null)
|
|
{
|
|
<AccordionItem>
|
|
<AccordionHeader>
|
|
<Heading Size="HeadingSize.Is5">
|
|
<AccordionToggle>Card Specific Data Register</AccordionToggle>
|
|
</Heading>
|
|
</AccordionHeader>
|
|
<AccordionBody>
|
|
@((MarkupString)Csd)
|
|
</AccordionBody>
|
|
</AccordionItem>
|
|
}
|
|
@if(ExtendedCsd != null)
|
|
{
|
|
<AccordionItem>
|
|
<AccordionHeader>
|
|
<Heading Size="HeadingSize.Is5">
|
|
<AccordionToggle>Extended Device Specific Data Register</AccordionToggle>
|
|
</Heading>
|
|
</AccordionHeader>
|
|
<AccordionBody>
|
|
@((MarkupString)ExtendedCsd)
|
|
</AccordionBody>
|
|
</AccordionItem>
|
|
}
|
|
@if(Scr != null)
|
|
{
|
|
<AccordionItem>
|
|
<AccordionHeader>
|
|
<Heading Size="HeadingSize.Is5">
|
|
<AccordionToggle>Card configuration register</AccordionToggle>
|
|
</Heading>
|
|
</AccordionHeader>
|
|
<AccordionBody>
|
|
@((MarkupString)Scr)
|
|
</AccordionBody>
|
|
</AccordionItem>
|
|
}
|
|
@if(Ocr != null)
|
|
{
|
|
<AccordionItem>
|
|
<AccordionHeader>
|
|
<Heading Size="HeadingSize.Is5">
|
|
<AccordionToggle>Operation Conditions Register</AccordionToggle>
|
|
</Heading>
|
|
</AccordionHeader>
|
|
<AccordionBody>
|
|
@((MarkupString)Ocr)
|
|
</AccordionBody>
|
|
</AccordionItem>
|
|
}
|
|
|
|
@if(ReadCapabilitiesDictionary is not null && ReadCapabilitiesList is not null)
|
|
{
|
|
<AccordionItem>
|
|
<AccordionHeader>
|
|
<Heading Size="HeadingSize.Is5">
|
|
<AccordionToggle>Read capabilities</AccordionToggle>
|
|
</Heading>
|
|
</AccordionHeader>
|
|
<AccordionBody>
|
|
<Table class="table-borderless table-dark" FullWidth>
|
|
<TableBody>
|
|
@foreach(KeyValuePair<string, string> kvp in ReadCapabilitiesDictionary)
|
|
{
|
|
<TableRow>
|
|
<TableRowHeader>@kvp.Key</TableRowHeader>
|
|
<TableRowCell>@kvp.Value</TableRowCell>
|
|
</TableRow>
|
|
}
|
|
</TableBody>
|
|
</Table>
|
|
<ListGroup>
|
|
@foreach(string cap in ReadCapabilitiesList)
|
|
{
|
|
<ListGroupItem>@cap</ListGroupItem>
|
|
}
|
|
</ListGroup>
|
|
</AccordionBody>
|
|
</AccordionItem>
|
|
}
|
|
@if(DeviceInquiry is not null)
|
|
{
|
|
<AccordionItem>
|
|
<AccordionHeader>
|
|
<Heading Size="HeadingSize.Is5">
|
|
<AccordionToggle>Device inquiry</AccordionToggle>
|
|
</Heading>
|
|
</AccordionHeader>
|
|
<AccordionBody>
|
|
<Table class="table-borderless table-dark" FullWidth>
|
|
<TableBody>
|
|
@foreach(KeyValuePair<string, string> kvp in DeviceInquiry)
|
|
{
|
|
<TableRow>
|
|
<TableRowHeader>@kvp.Key</TableRowHeader>
|
|
<TableRowCell>@kvp.Value</TableRowCell>
|
|
</TableRow>
|
|
}
|
|
</TableBody>
|
|
</Table>
|
|
@if(InquiryCapabilities is not null)
|
|
{
|
|
<ListGroup>
|
|
@foreach(string cap in InquiryCapabilities)
|
|
{
|
|
<ListGroupItem>@cap</ListGroupItem>
|
|
}
|
|
</ListGroup>
|
|
}
|
|
</AccordionBody>
|
|
</AccordionItem>
|
|
}
|
|
@if(ModeSenseCapabilities is not null || ModeSensePages is not null)
|
|
{
|
|
<AccordionItem>
|
|
<AccordionHeader>
|
|
<Heading Size="HeadingSize.Is5">
|
|
<AccordionToggle>MODE SENSE pages</AccordionToggle>
|
|
</Heading>
|
|
</AccordionHeader>
|
|
<AccordionBody>
|
|
@if(ModeSenseCapabilities is not null)
|
|
{
|
|
<ListGroup>
|
|
@foreach(string cap in ModeSenseCapabilities)
|
|
{
|
|
<ListGroupItem>@cap</ListGroupItem>
|
|
}
|
|
</ListGroup>
|
|
}
|
|
@if(BlockDescriptors is not null)
|
|
{
|
|
<Accordion>
|
|
<AccordionItem>
|
|
|
|
<AccordionHeader>
|
|
<Heading Size="HeadingSize.Is6">
|
|
<AccordionToggle>Block descriptors</AccordionToggle>
|
|
</Heading>
|
|
</AccordionHeader>
|
|
<AccordionBody>
|
|
<ListGroup>
|
|
@foreach(string descriptor in BlockDescriptors)
|
|
{
|
|
<ListGroupItem>@descriptor</ListGroupItem>
|
|
}
|
|
</ListGroup>
|
|
</AccordionBody>
|
|
</AccordionItem>
|
|
</Accordion>
|
|
}
|
|
@if(ModeSensePages is not null)
|
|
{
|
|
foreach(KeyValuePair<string, List<string>> kvp in ModeSensePages)
|
|
{
|
|
<Accordion>
|
|
<AccordionItem>
|
|
<AccordionHeader>
|
|
<Heading Size="HeadingSize.Is6">
|
|
<AccordionToggle>@kvp.Key</AccordionToggle>
|
|
</Heading>
|
|
</AccordionHeader>
|
|
@if(kvp.Value.Count > 0)
|
|
{
|
|
<AccordionBody>
|
|
<ListGroup>
|
|
@foreach(string cap in kvp.Value)
|
|
{
|
|
<ListGroupItem>@cap</ListGroupItem>
|
|
}
|
|
</ListGroup>
|
|
</AccordionBody>
|
|
}
|
|
</AccordionItem>
|
|
</Accordion>
|
|
}
|
|
}
|
|
</AccordionBody>
|
|
</AccordionItem>
|
|
}
|
|
@if(EvpdPages?.Count > 0)
|
|
{
|
|
<AccordionItem>
|
|
<AccordionHeader>
|
|
<Heading Size="HeadingSize.Is5">
|
|
<AccordionToggle>Extended Vital Product Data pages</AccordionToggle>
|
|
</Heading>
|
|
</AccordionHeader>
|
|
<AccordionBody>
|
|
@foreach(KeyValuePair<string, List<string>> kvp in EvpdPages)
|
|
{
|
|
<Accordion>
|
|
<AccordionItem>
|
|
<AccordionHeader>
|
|
<Heading Size="HeadingSize.Is6">
|
|
<AccordionToggle>@kvp.Key</AccordionToggle>
|
|
</Heading>
|
|
</AccordionHeader>
|
|
@if(kvp.Value.Count > 0)
|
|
{
|
|
<AccordionBody>
|
|
<ListGroup>
|
|
@foreach(string cap in kvp.Value)
|
|
{
|
|
<ListGroupItem>@cap</ListGroupItem>
|
|
}
|
|
</ListGroup>
|
|
</AccordionBody>
|
|
}
|
|
</AccordionItem>
|
|
</Accordion>
|
|
}
|
|
</AccordionBody>
|
|
</AccordionItem>
|
|
}
|
|
@if(MmcModeList?.Count > 0)
|
|
{
|
|
<AccordionItem>
|
|
<AccordionHeader>
|
|
<Heading Size="HeadingSize.Is5">
|
|
<AccordionToggle>CD-ROM capabilities</AccordionToggle>
|
|
</Heading>
|
|
</AccordionHeader>
|
|
<AccordionBody>
|
|
<ListGroup>
|
|
@foreach(string cap in MmcModeList)
|
|
{
|
|
<ListGroupItem>@cap</ListGroupItem>
|
|
}
|
|
</ListGroup>
|
|
</AccordionBody>
|
|
</AccordionItem>
|
|
}
|
|
@if(MmcFeaturesList?.Count > 0)
|
|
{
|
|
<AccordionItem>
|
|
<AccordionHeader>
|
|
<Heading Size="HeadingSize.Is5">
|
|
<AccordionToggle>MMC features</AccordionToggle>
|
|
</Heading>
|
|
</AccordionHeader>
|
|
<AccordionBody>
|
|
<ListGroup>
|
|
@foreach(string feature in MmcFeaturesList)
|
|
{
|
|
<ListGroupItem>@feature</ListGroupItem>
|
|
}
|
|
</ListGroup>
|
|
</AccordionBody>
|
|
</AccordionItem>
|
|
}
|
|
@if(ScsiSscVisible)
|
|
{
|
|
<AccordionItem>
|
|
<AccordionHeader>
|
|
<Heading Size="HeadingSize.Is5">
|
|
<AccordionToggle>SCSI Streaming device capabilities:</AccordionToggle>
|
|
</Heading>
|
|
</AccordionHeader>
|
|
<AccordionBody>
|
|
<Table class="table-borderless table-dark" FullWidth>
|
|
<TableBody>
|
|
<TableRow>
|
|
<TableRowHeader>Block size granularity</TableRowHeader>
|
|
<TableRowCell>@ScsiSscGranularity</TableRowCell>
|
|
</TableRow>
|
|
<TableRow>
|
|
<TableRowHeader>Maximum block length</TableRowHeader>
|
|
<TableRowCell>@ScsiSscMaxBlock bytes</TableRowCell>
|
|
</TableRow>
|
|
<TableRow>
|
|
<TableRowHeader>Minimum block length</TableRowHeader>
|
|
<TableRowCell>@ScsiSscMinBlock bytes</TableRowCell>
|
|
</TableRow>
|
|
</TableBody>
|
|
</Table>
|
|
@if(ScsiSscDensities?.Count > 0)
|
|
{
|
|
foreach(SupportedDensity density in ScsiSscDensities)
|
|
{
|
|
<Accordion>
|
|
<AccordionItem>
|
|
<AccordionHeader>
|
|
<Heading Size="HeadingSize.Is6">
|
|
<AccordionToggle>Information for supported density with primary code @($"{density.PrimaryCode:X2}h") and secondary code @($"{density.SecondaryCode:X2}h")</AccordionToggle>
|
|
</Heading>
|
|
</AccordionHeader>
|
|
<AccordionBody>
|
|
<Table class="table-borderless table-dark" FullWidth>
|
|
<TableBody>
|
|
<TableRow>
|
|
<TableRowHeader>Drive can write this density</TableRowHeader>
|
|
<TableRowCell>@density.Writable</TableRowCell>
|
|
</TableRow>
|
|
<TableRow>
|
|
<TableRowHeader>Duplicate density</TableRowHeader>
|
|
<TableRowCell>@density.Duplicate</TableRowCell>
|
|
</TableRow>
|
|
<TableRow>
|
|
<TableRowHeader>Default density</TableRowHeader>
|
|
<TableRowCell>@density.DefaultDensity</TableRowCell>
|
|
</TableRow>
|
|
<TableRow>
|
|
<TableRowHeader>Name</TableRowHeader>
|
|
<TableRowCell>@density.Name</TableRowCell>
|
|
</TableRow>
|
|
<TableRow>
|
|
<TableRowHeader>Organization</TableRowHeader>
|
|
<TableRowCell>@density.Organization</TableRowCell>
|
|
</TableRow>
|
|
<TableRow>
|
|
<TableRowHeader>Description</TableRowHeader>
|
|
<TableRowCell>@density.Description</TableRowCell>
|
|
</TableRow>
|
|
<TableRow>
|
|
<TableRowHeader>Maximum capacity</TableRowHeader>
|
|
<TableRowCell>@density.Capacity megabytes</TableRowCell>
|
|
</TableRow>
|
|
<TableRow>
|
|
<TableRowCell ColumnSpan="2">Density has @density.BitsPerMm bits per mm, with @density.Tracks tracks in a @density.Width mm width tape</TableRowCell>
|
|
</TableRow>
|
|
</TableBody>
|
|
</Table>
|
|
</AccordionBody>
|
|
</AccordionItem>
|
|
</Accordion>
|
|
}
|
|
}
|
|
@if(ScsiSscMedias?.Count > 0)
|
|
{
|
|
foreach(SscSupportedMedia media in ScsiSscMedias)
|
|
{
|
|
<Accordion>
|
|
<AccordionItem>
|
|
<AccordionHeader>
|
|
<Heading Size="HeadingSize.Is6">
|
|
<AccordionToggle>Information for supported media with type code @($"{media.MediumType:X2}h")</AccordionToggle>
|
|
</Heading>
|
|
</AccordionHeader>
|
|
<AccordionBody>
|
|
<Table class="table-borderless table-dark" FullWidth>
|
|
<TableBody>
|
|
<TableRow>
|
|
<TableRowCell ColumnSpan="2">Media is @media.Length m long in a @media.Width mm width tape</TableRowCell>
|
|
</TableRow>
|
|
<TableRow>
|
|
<TableRowHeader>Name</TableRowHeader>
|
|
<TableRowCell>@media.Name</TableRowCell>
|
|
</TableRow>
|
|
<TableRow>
|
|
<TableRowHeader>Organization</TableRowHeader>
|
|
<TableRowCell>@media.Organization</TableRowCell>
|
|
</TableRow>
|
|
<TableRow>
|
|
<TableRowHeader>Description</TableRowHeader>
|
|
<TableRowCell>@media.Description</TableRowCell>
|
|
</TableRow>
|
|
</TableBody>
|
|
</Table>
|
|
</AccordionBody>
|
|
</AccordionItem>
|
|
</Accordion>
|
|
}
|
|
}
|
|
</AccordionBody>
|
|
</AccordionItem>
|
|
}
|
|
</Accordion>
|
|
</div> |