Livt packages
Livt.Usb
Version 0.0.5
USB 2.0 low/full-speed PHY, host transfers, device discovery, HID keyboard, and read-only mass storage for Livt.
Published files (57)
- BulkOnlyControllerModel.lvt
- BulkOnlyTransportTest.lvt
- ControllerClient.lvt
- ControllerDispatchProbe.lvt
- ControllerDispatchTest.lvt
- DescriptorKeyboardTest.lvt
- DescriptorStorageTest.lvt
- HostControllerTest.lvt
- MassStorageHostTest.lvt
- PacketBufferConfigurationTest.lvt
- PacketBufferTest.lvt
- PacketCodecTest.lvt
- PacketReceiverTest.lvt
- RootPortTiming144Test.lvt
- RootPortTiming48Test.lvt
- RootPortTiming96Test.lvt
- TransactionBypassTest.lvt
- TransactionPipelineProbe.lvt
- TransactionPipelineTest.lvt
- Usb2PhyTest.lvt
tests/PacketCodecTest.lvt
namespace Livt.Usb.Tests
using Livt.Usb.Packets
using Livt.Utils.Hashing
/**
* Checks packet constants and token layout against independently fixed vectors.
*/
@Test
component PacketCodecTest
{
// Owned compile-time USB token CRC profile.
crc: Crc<5, 0x05, true>
/**
* Creates a combinational checksum helper with no packet policy.
*/
new()
{
crc = new Crc<5, 0x05, true>()
}
/**
* All sixteen correctly complemented PID bytes pass redundancy checking;
* supported protocol kinds are a separate restriction.
*/
@Test
fn ChecksPidRedundancy()
{
for (var nibble = 0; nibble < 16; nibble++) {
var encoded = (nibble | ((15 - nibble) << 4)) as byte
assert PacketPid.IsValid(encoded)
assert !PacketPid.IsValid((encoded ^ 0x10) as byte)
}
assert PacketPid.IsToken(PacketPid.SOF)
assert PacketPid.IsData(PacketPid.DATA1)
assert PacketPid.IsHandshake(PacketPid.ACK)
assert !PacketPid.IsToken(0x78)
assert !PacketPid.IsData(0x87)
assert !PacketPid.IsHandshake(0x96)
}
/**
* Address zero/endpoint zero serializes as 00 10 after PID. All field values
* round-trip without sign extension or overlap with CRC bits.
*/
@Test
fn PacksTokenFields()
{
var check = crc.UpdateBits(0x1F, 0, 11) ^ 0x1F
assert check == 2
assert TokenCodec.Pack(0, check) == 0x1000
for (var address = 0; address < 128; address++) {
for (var endpoint = 0; endpoint < 16; endpoint++) {
var fields = TokenCodec.Fields(address as logic[7], endpoint as logic[4])
assert (TokenCodec.Address(fields) as uint) == (address as uint)
assert (TokenCodec.Endpoint(fields) as uint) == (endpoint as uint)
}
}
}
}