| /* |
| * Copyright (C) 2008 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| /* ---- includes ----------------------------------------------------------- */ |
| |
| #include "b_BasicEm/Functions.h" |
| #include "b_BasicEm/Context.h" |
| |
| /* ---- related objects --------------------------------------------------- */ |
| |
| /* ---- typedefs ----------------------------------------------------------- */ |
| |
| /* ---- constants ---------------------------------------------------------- */ |
| |
| /* ---- globals ---------------------------------------------------------- */ |
| |
| /* ------------------------------------------------------------------------- */ |
| |
| /* ========================================================================= */ |
| /* */ |
| /* ---- \ghd{ external functions } ----------------------------------------- */ |
| /* */ |
| /* ========================================================================= */ |
| |
| /* ------------------------------------------------------------------------- */ |
| |
| uint16 bbs_swapBytes( uint16 valA ) |
| { |
| return ( ( valA >> 8 ) & 0x00FF ) | ( ( valA << 8 ) & 0xFF00 ); |
| } |
| |
| /* ------------------------------------------------------------------------- */ |
| |
| uint32 bbs_memWrite32( const void* ptrA, |
| uint16* memPtrA ) |
| { |
| uint32 valL = *( uint32* )ptrA; |
| |
| #ifdef HW_BIG_ENDIAN |
| *memPtrA++ = bbs_swapBytes( ( uint16 )( ( valL >> 0 ) & 0xFFFF ) ); |
| *memPtrA++ = bbs_swapBytes( ( uint16 )( ( valL >> 16 ) & 0xFFFF ) ); |
| #else |
| *memPtrA++ = ( valL >> 0 ) & 0xFFFF; |
| *memPtrA++ = ( valL >> 16 ) & 0xFFFF; |
| #endif |
| |
| |
| return bbs_SIZEOF16( uint32 ); |
| } |
| |
| /* ------------------------------------------------------------------------- */ |
| |
| uint32 bbs_memRead32( void* ptrA, |
| const uint16* memPtrA ) |
| { |
| uint32 valL = 0; |
| |
| #ifdef HW_BIG_ENDIAN |
| valL |= ( ( uint32 )bbs_swapBytes( *memPtrA++ ) << 0 ); |
| valL |= ( ( uint32 )bbs_swapBytes( *memPtrA++ ) << 16 ); |
| #else |
| valL |= ( ( uint32 )*memPtrA++ << 0 ); |
| valL |= ( ( uint32 )*memPtrA++ << 16 ); |
| #endif |
| |
| *( uint32* )ptrA = valL; |
| |
| return bbs_SIZEOF16( uint32 ); |
| } |
| |
| /* ------------------------------------------------------------------------- */ |
| |
| uint32 bbs_memPeek32( const uint16* memPtrA ) |
| { |
| uint32 valL = 0; |
| |
| #ifdef HW_BIG_ENDIAN |
| valL |= ( ( uint32 )bbs_swapBytes( *memPtrA++ ) << 0 ); |
| valL |= ( ( uint32 )bbs_swapBytes( *memPtrA++ ) << 16 ); |
| #else |
| valL |= ( ( uint32 )*memPtrA++ << 0 ); |
| valL |= ( ( uint32 )*memPtrA++ << 16 ); |
| #endif |
| |
| return valL; |
| } |
| |
| /* ------------------------------------------------------------------------- */ |
| |
| uint32 bbs_memWrite16( const void* ptrA, |
| uint16* memPtrA ) |
| { |
| #ifdef HW_BIG_ENDIAN |
| *memPtrA++ = bbs_swapBytes( *( uint16* )ptrA ); |
| #else |
| *memPtrA++ = *( uint16* )ptrA; |
| #endif |
| return bbs_SIZEOF16( uint16 ); |
| } |
| |
| /* ------------------------------------------------------------------------- */ |
| |
| uint32 bbs_memRead16( void* ptrA, |
| const uint16* memPtrA ) |
| { |
| #ifdef HW_BIG_ENDIAN |
| *( uint16* )ptrA = bbs_swapBytes( *memPtrA++ ); |
| #else |
| *( uint16* )ptrA = *memPtrA++; |
| #endif |
| |
| return bbs_SIZEOF16( uint16 ); |
| } |
| |
| /* ------------------------------------------------------------------------- */ |
| |
| uint32 bbs_memWrite32Arr( struct bbs_Context* cpA, |
| const void* ptrA, |
| uint32 sizeA, uint16* memPtrA ) |
| { |
| uint32 iL; |
| const uint32* srcL = ( uint32* )ptrA; |
| |
| if( bbs_Context_error( cpA ) ) return 0; |
| |
| for( iL = 0; iL < sizeA; iL++ ) |
| { |
| memPtrA += bbs_memWrite32( srcL++, memPtrA ); |
| } |
| |
| return sizeA * bbs_SIZEOF16( uint32 ); |
| } |
| |
| /* ------------------------------------------------------------------------- */ |
| |
| uint32 bbs_memRead32Arr( struct bbs_Context* cpA, |
| void* ptrA, |
| uint32 sizeA, |
| const uint16* memPtrA ) |
| { |
| uint32 iL; |
| uint32* dstL = ( uint32* )ptrA; |
| |
| if( bbs_Context_error( cpA ) ) return 0; |
| |
| for( iL = 0; iL < sizeA; iL++ ) |
| { |
| memPtrA += bbs_memRead32( dstL++, memPtrA ); |
| } |
| |
| return sizeA * bbs_SIZEOF16( uint32 ); |
| } |
| |
| /* ------------------------------------------------------------------------- */ |
| |
| uint32 bbs_memWrite16Arr( struct bbs_Context* cpA, |
| const void* ptrA, |
| uint32 sizeA, |
| uint16* memPtrA ) |
| { |
| uint32 iL; |
| const uint16* srcL = ( uint16* )ptrA; |
| |
| if( bbs_Context_error( cpA ) ) return 0; |
| |
| for( iL = 0; iL < sizeA; iL++ ) |
| { |
| memPtrA += bbs_memWrite16( srcL++, memPtrA ); |
| } |
| |
| return sizeA * bbs_SIZEOF16( uint16 ); |
| } |
| |
| /* ------------------------------------------------------------------------- */ |
| |
| uint32 bbs_memRead16Arr( struct bbs_Context* cpA, |
| void* ptrA, |
| uint32 sizeA, |
| const uint16* memPtrA ) |
| { |
| uint32 iL; |
| uint16* dstL = ( uint16* )ptrA; |
| |
| if( bbs_Context_error( cpA ) ) return 0; |
| |
| for( iL = 0; iL < sizeA; iL++ ) |
| { |
| memPtrA += bbs_memRead16( dstL++, memPtrA ); |
| } |
| |
| return sizeA * bbs_SIZEOF16( uint16 ); |
| } |
| |
| /* ------------------------------------------------------------------------- */ |
| |
| uint32 bbs_memWriteUInt32( uint32 valA, |
| uint16* memPtrA ) |
| { |
| #ifdef HW_BIG_ENDIAN |
| *memPtrA++ = bbs_swapBytes( ( uint16 )( ( valA >> 0 ) & 0xFFFF ) ); |
| *memPtrA++ = bbs_swapBytes( ( uint16 )( ( valA >> 16 ) & 0xFFFF ) ); |
| #else |
| *memPtrA++ = ( valA >> 0 ) & 0xFFFF; |
| *memPtrA++ = ( valA >> 16 ) & 0xFFFF; |
| #endif |
| |
| return bbs_SIZEOF16( valA ); |
| } |
| |
| /* ------------------------------------------------------------------------- */ |
| |
| uint32 bbs_memWriteUInt16( uint16 valA, |
| uint16* memPtrA ) |
| { |
| #ifdef HW_BIG_ENDIAN |
| *memPtrA++ = bbs_swapBytes( valA ); |
| #else |
| *memPtrA++ = valA; |
| #endif |
| |
| return bbs_SIZEOF16( valA ); |
| } |
| |
| /* ------------------------------------------------------------------------- */ |
| |
| uint32 bbs_memReadVersion32( struct bbs_Context* cpA, |
| uint32* versionPtrA, |
| uint32 refVersionA, |
| const uint16* memPtrA ) |
| { |
| if( bbs_Context_error( cpA ) ) return 0; |
| |
| bbs_memRead32( versionPtrA, memPtrA ); |
| if( *versionPtrA > refVersionA ) |
| { |
| bbs_ERR0( bbs_ERR_WRONG_VERSION, "uint32 bbs_memReadVersion32( .... ):\n" |
| "Data format is newer than software or corrupt\n" ); |
| } |
| return bbs_SIZEOF16( uint32 ); |
| } |
| |
| /* ------------------------------------------------------------------------- */ |
| |
| uint16 bbs_memCheckSum16( const uint16* memPtrA, uint32 sizeA ) |
| { |
| uint32 iL; |
| uint16 sumL = 0; |
| for( iL = 0; iL < sizeA; iL++ ) |
| { |
| #ifdef HW_BIG_ENDIAN |
| sumL += bbs_swapBytes( memPtrA[ iL ] ); |
| #else |
| sumL += memPtrA[ iL ]; |
| #endif |
| } |
| |
| return sumL; |
| } |
| |
| /* ------------------------------------------------------------------------- */ |
| |