accessoryservices/pluggeddisplay/edidparser/src/cea861edidparser.cpp
branchRCL_3
changeset 12 4a5c47a50617
parent 5 1a73e8f1b64d
child 20 1ddbe54d0645
equal deleted inserted replaced
10:66ecddbca914 12:4a5c47a50617
  1477     TInt auxTag = 0;
  1477     TInt auxTag = 0;
  1478     switch( tag )
  1478     switch( tag )
  1479         {
  1479         {
  1480         case 0:
  1480         case 0:
  1481             //reserved
  1481             //reserved
       
  1482             ReadUnknownTagCode( aData, aIndex, L1 );
  1482             break;
  1483             break;
  1483         case 1:
  1484         case 1:
  1484             ReadCea861ShortAudioDataBlockL( aData, aIndex, L1 );
  1485             ReadCea861ShortAudioDataBlockL( aData, aIndex, L1 );
  1485             break;
  1486             break;
  1486         case 2:
  1487         case 2:
  1533 void CCea861EdidParser::ReadCea861ShortAudioDataBlockL( const TExtDataBlock& aData,
  1534 void CCea861EdidParser::ReadCea861ShortAudioDataBlockL( const TExtDataBlock& aData,
  1534     TInt& aIndex,
  1535     TInt& aIndex,
  1535     const TInt8 aLen )
  1536     const TInt8 aLen )
  1536     {
  1537     {
  1537     FUNC_LOG;
  1538     FUNC_LOG;
       
  1539     TBool first = EFalse;
  1538 
  1540 
  1539     iAudioDataBlockSupported = ETrue;
  1541     iAudioDataBlockSupported = ETrue;
  1540 
  1542 
  1541     if( !iParsedInfo->iShortAudioDescriptors ) // linked list
  1543     if( !iParsedInfo->iShortAudioDescriptors ) // linked list
  1542         {
  1544         {
  1543         iParsedInfo->iShortAudioDescriptors
  1545         iParsedInfo->iShortAudioDescriptors
  1544             = new ( ELeave ) TCEA861AudioDataBlock();
  1546             = new ( ELeave ) TCEA861AudioDataBlock();
       
  1547 		first = ETrue;
       
  1548 		iParsedInfo->iShortAudioDescriptors->iNext = 0;
  1545         }
  1549         }
  1546     TCEA861AudioDataBlock* cur = iParsedInfo->iShortAudioDescriptors;
  1550     TCEA861AudioDataBlock* cur = iParsedInfo->iShortAudioDescriptors;
  1547 
  1551 
  1548     while( cur->iNext != 0 )
  1552     while( cur->iNext != 0 )
  1549         {
  1553         {
  1550         cur = cur->iNext; // jump to the end
  1554         cur = cur->iNext; // jump to the end
  1551         }
  1555         }
  1552 
  1556 
  1553     TBool first = ETrue;
  1557 	TInt i = 0;
  1554     for( int i = 0; i < aLen; i++ )
  1558 	while (i < aLen)
  1555         {
  1559         {
  1556         // read aLen-amount of short video descriptors
  1560         // read aLen-amount of short video descriptors
  1557 
  1561 
  1558         // first link is a special case
  1562         // first link is a special case
  1559         if( ( iParsedInfo->iShortAudioDescriptors == cur ) && first )
  1563         if( ( iParsedInfo->iShortAudioDescriptors == cur ) && first )
  1592     TInt& aIndex,
  1596     TInt& aIndex,
  1593     const TInt8 aLen )
  1597     const TInt8 aLen )
  1594     {
  1598     {
  1595     FUNC_LOG;
  1599     FUNC_LOG;
  1596 
  1600 
  1597     TBool first = ETrue;
  1601     TBool first = EFalse;
  1598     iVideoDataBlockSupported = ETrue;
  1602     iVideoDataBlockSupported = ETrue;
  1599     if( !iParsedInfo->iShortVideoDescriptors ) // linked list
  1603     if( !iParsedInfo->iShortVideoDescriptors ) // linked list
  1600         {
  1604         {
  1601         iParsedInfo->iShortVideoDescriptors
  1605         iParsedInfo->iShortVideoDescriptors
  1602             = new ( ELeave ) TCEA861VideoDataBlock();
  1606             = new ( ELeave ) TCEA861VideoDataBlock();
  1603         iParsedInfo->iShortVideoDescriptors->iNext = 0; // make sure there are no stray pointers
  1607         iParsedInfo->iShortVideoDescriptors->iNext = 0; // make sure there are no stray pointers
       
  1608         first = ETrue;
  1604         }
  1609         }
  1605 
  1610 
  1606     TCEA861VideoDataBlock* cur = iParsedInfo->iShortVideoDescriptors;
  1611     TCEA861VideoDataBlock* cur = iParsedInfo->iShortVideoDescriptors;
  1607     while( cur->iNext != 0 )
  1612     while( cur->iNext != 0 )
  1608         {
  1613         {
  1609         cur = cur->iNext; // jump to the end
  1614         cur = cur->iNext; // jump to the end
  1610         first = EFalse; // there is already some links, so set first to false
       
  1611         }
  1615         }
  1612 
  1616 
  1613     for( int i = 0; i < aLen; i++ )
  1617     for( int i = 0; i < aLen; i++ )
  1614         {
  1618         {
  1615 
  1619 
  1671             << 8;
  1675             << 8;
  1672     iParsedInfo->iVendorSpecificData->iIEEE24bitRegistrationIdentifier += data1;
  1676     iParsedInfo->iVendorSpecificData->iIEEE24bitRegistrationIdentifier += data1;
  1673 
  1677 
  1674     aLen -= 3; // this is needed: Vendor specific payload length = L4-3bytes
  1678     aLen -= 3; // this is needed: Vendor specific payload length = L4-3bytes
  1675 
  1679 
  1676     TBool first = ETrue;
  1680     TBool first = EFalse;
  1677     if( iParsedInfo->iVendorSpecificData->iVendorSpecificPayloadStart == 0 )
  1681     if( iParsedInfo->iVendorSpecificData->iVendorSpecificPayloadStart == 0 )
  1678         {
  1682         {
  1679         iParsedInfo->iVendorSpecificData->iVendorSpecificPayloadStart
  1683         iParsedInfo->iVendorSpecificData->iVendorSpecificPayloadStart
  1680             = new ( ELeave ) TCEA861VendorSpecificDataBlockPayload();
  1684             = new ( ELeave ) TCEA861VendorSpecificDataBlockPayload();
       
  1685 		iParsedInfo->iVendorSpecificData->iVendorSpecificPayloadStart->iNext = 0;
       
  1686 		first = ETrue;
  1681         }
  1687         }
  1682     TCEA861VendorSpecificDataBlockPayload* cur =
  1688     TCEA861VendorSpecificDataBlockPayload* cur =
  1683         iParsedInfo->iVendorSpecificData->iVendorSpecificPayloadStart;
  1689         iParsedInfo->iVendorSpecificData->iVendorSpecificPayloadStart;
  1684     // traverse to the end of the list
  1690     // traverse to the end of the list
  1685     while( cur->iNext != 0 )
  1691     while( cur->iNext != 0 )
  1754 void CCea861EdidParser::ReadVideoCapabilityDataBlockL( const TExtDataBlock& aData,
  1760 void CCea861EdidParser::ReadVideoCapabilityDataBlockL( const TExtDataBlock& aData,
  1755     TInt& aIndex,
  1761     TInt& aIndex,
  1756     const TInt8 aLen )
  1762     const TInt8 aLen )
  1757     {
  1763     {
  1758     FUNC_LOG;
  1764     FUNC_LOG;
       
  1765 	TBool first = EFalse;
  1759 
  1766 
  1760     aIndex++; // jump to the extended tag code (aLen is the length from extended tag to the end)
  1767     aIndex++; // jump to the extended tag code (aLen is the length from extended tag to the end)
  1761 
  1768 
  1762     if( iParsedInfo->iVideoCapabilityDataBlock == 0 )
  1769     if( iParsedInfo->iVideoCapabilityDataBlock == 0 )
  1763         {
  1770         {
  1764         iParsedInfo->iVideoCapabilityDataBlock
  1771         iParsedInfo->iVideoCapabilityDataBlock
  1765             = new ( ELeave ) TCEA861VideoCapabilityDataBlock();
  1772             = new ( ELeave ) TCEA861VideoCapabilityDataBlock();
       
  1773 		first = ETrue;
  1766         }
  1774         }
  1767     TCEA861VideoCapabilityDataBlock* cur =
  1775     TCEA861VideoCapabilityDataBlock* cur =
  1768         iParsedInfo->iVideoCapabilityDataBlock;
  1776         iParsedInfo->iVideoCapabilityDataBlock;
  1769     TBool first = ETrue;
       
  1770     while( cur->iNext != 0 )
  1777     while( cur->iNext != 0 )
  1771         {
  1778         {
  1772         first = EFalse;
       
  1773         cur = cur->iNext;
  1779         cur = cur->iNext;
  1774         }
  1780         }
  1775 
  1781 
  1776     // Payload currently only contains a single byte in addition to the extended tag code. The Source should ignore such additional bytes when present.
  1782     // Payload currently only contains a single byte in addition to the extended tag code. The Source should ignore such additional bytes when present.
  1777     for( int i = 0; i < aLen; i++ )
  1783     for( int i = 0; i < aLen; i++ )