HRESULT Library_spot_hardware_native_Microsoft_SPOT_Hardware_HardwareProvider::NativeIsSupportedBaudRate___BOOLEAN__I4__BYREF_U4( CLR_RT_StackFrame& stack ) { TINYCLR_HEADER(); CLR_RT_HeapBlock hbBR; CLR_UINT32 port; CLR_UINT32 SupportedBaudrate; port = stack.Arg1().NumericByRef().u4; TINYCLR_CHECK_HRESULT(hbBR.LoadFromReference( stack.Arg2() )); SupportedBaudrate = hbBR.NumericByRef().u4; if (CPU_USART_IsBaudrateSupported(port,SupportedBaudrate) == TRUE) stack.SetResult_Boolean( true ); else stack.SetResult_Boolean( false ); hbBR.SetInteger( (CLR_UINT32)SupportedBaudrate ); TINYCLR_CHECK_HRESULT(hbBR.StoreToReference( stack.Arg2(), 0 )); TINYCLR_NOCLEANUP(); }
HRESULT Library_spot_net_native_Microsoft_SPOT_Net_SocketNative::ioctl___STATIC__VOID__OBJECT__U4__BYREF_U4( CLR_RT_StackFrame& stack ) { NATIVE_PROFILE_CLR_NETWORK(); TINYCLR_HEADER(); CLR_RT_HeapBlock* socket = stack.Arg0().Dereference(); CLR_INT32 handle; CLR_INT32 cmd = stack.Arg1().NumericByRef().s4; CLR_RT_HeapBlock blkArg; CLR_INT32 ret; FAULT_ON_NULL(socket); handle = socket[ FIELD__m_Handle ].NumericByRef().s4; _SIDE_ASSERTE(SUCCEEDED(blkArg.LoadFromReference( stack.Arg2() ))); ret = SOCK_ioctl( handle, cmd, (CLR_INT32*)&blkArg.NumericByRef().s4 ); TINYCLR_CHECK_HRESULT(ThrowOnError( stack, ret )); _SIDE_ASSERTE(SUCCEEDED(blkArg.StoreToReference( stack.Arg2(), 0 ))); TINYCLR_NOCLEANUP(); }
HRESULT CLR_RT_HeapBlock_Array::Copy( CLR_RT_HeapBlock_Array* arraySrc, int indexSrc, CLR_RT_HeapBlock_Array* arrayDst, int indexDst, int length ) { NATIVE_PROFILE_CLR_CORE(); TINYCLR_HEADER(); if(length) { int numElemSrc = arraySrc->m_numOfElements; int numElemDst = arrayDst->m_numOfElements; if(length < 0 || indexSrc < 0 || indexDst < 0 || length + indexSrc > numElemSrc || length + indexDst > numElemDst ) { TINYCLR_SET_AND_LEAVE(CLR_E_OUT_OF_RANGE); } // // Copy of an array on itself. // if(arraySrc == arrayDst && indexSrc == indexDst) TINYCLR_SET_AND_LEAVE(S_OK); if(arraySrc->SameHeader( *arrayDst )) { CLR_UINT8* dataSrc = arraySrc->GetFirstElement(); CLR_UINT8* dataDst = arrayDst->GetFirstElement(); CLR_UINT8 sizeElem = arraySrc->m_sizeOfElement; dataSrc += indexSrc * sizeElem; dataDst += indexDst * sizeElem; if(!arraySrc->m_fReference) { memmove( dataDst, dataSrc, length * sizeElem ); } else { CLR_RT_HeapBlock* ptrSrc = (CLR_RT_HeapBlock*)dataSrc; CLR_RT_HeapBlock* ptrDst = (CLR_RT_HeapBlock*)dataDst; int incr; if(arraySrc == arrayDst && ptrSrc < ptrDst) { incr = -1; ptrSrc += length-1; ptrDst += length-1; } else { incr = 1; } for(int i=0; i<length; i++, ptrSrc += incr, ptrDst += incr) { TINYCLR_CHECK_HRESULT(ptrDst->Reassign( *ptrSrc )); } } } else if(arraySrc->m_fReference && arrayDst->m_fReference) { CLR_RT_TypeDescriptor descSrc; CLR_RT_TypeDescriptor descDst; CLR_RT_HeapBlock* ptrSrc = (CLR_RT_HeapBlock*)arraySrc->GetElement( indexSrc ); CLR_RT_HeapBlock* ptrDst = (CLR_RT_HeapBlock*)arrayDst->GetElement( indexDst ); TINYCLR_CHECK_HRESULT(descDst.InitializeFromObject( *arrayDst )); descDst.GetElementType( descDst ); for(int i=0; i<length; i++, ptrSrc++, ptrDst++) { if(ptrSrc->DataType() == DATATYPE_OBJECT && ptrSrc->Dereference() == NULL) { ; } else { TINYCLR_CHECK_HRESULT(descSrc.InitializeFromObject( *ptrSrc )); if(CLR_RT_ExecutionEngine::IsInstanceOf( descSrc, descDst ) == false) { TINYCLR_SET_AND_LEAVE(CLR_E_INVALID_CAST); } } TINYCLR_CHECK_HRESULT(ptrDst->Reassign( *ptrSrc )); } } else { CLR_RT_TypeDescriptor descSrc; CLR_RT_TypeDescriptor descDst; CLR_RT_HeapBlock ref; CLR_RT_HeapBlock elem; elem.SetObjectReference( NULL ); CLR_RT_ProtectFromGC gc( elem ); TINYCLR_CHECK_HRESULT(descDst.InitializeFromObject( *arrayDst )); descDst.GetElementType( descDst ); for(int i=0; i<length; i++) { ref.InitializeArrayReferenceDirect( *arraySrc, indexSrc++ ); TINYCLR_CHECK_HRESULT(elem.LoadFromReference( ref )); if(elem.DataType() == DATATYPE_OBJECT && elem.Dereference() == NULL) { ; } else { TINYCLR_CHECK_HRESULT(descSrc.InitializeFromObject( elem )); if(CLR_RT_ExecutionEngine::IsInstanceOf( descSrc, descDst ) == false) { TINYCLR_SET_AND_LEAVE(CLR_E_INVALID_CAST); } } ref.InitializeArrayReferenceDirect( *arrayDst, indexDst++ ); TINYCLR_CHECK_HRESULT(elem.StoreToReference( ref, 0 )); } } } TINYCLR_NOCLEANUP(); }