Files
OneWireAPI/owAdapter.cs
2014-05-01 16:19:33 -04:00

166 lines
4.1 KiB
C#

using System;
namespace OneWireAPI
{
public class owAdapter
{
#region Member variables
private static owSession m_oSession; // The current session
private static owIdentifier m_oLastID; // Last ID selected
#endregion
#region Methods
public static void Initialize(owSession Session)
{
// Store the session we are dealing with
m_oSession = Session;
}
public static void Select(owIdentifier ID)
{
// Set the ID of the device we want to talk to
short nResult = TMEX.TMRom(m_oSession.SessionHandle, m_oSession.StateBuffer, ID.RawID);
// Check the result
if (nResult != 1)
{
// Throw a ROM exception
throw new owException(owException.owExceptionFunction.Select, ID, nResult);
}
// Copy the ID as the last selected ID
m_oLastID = ID;
// Access the device
Access();
}
public static void Access()
{
// Attempt to access the device
short nResult = TMEX.TMAccess(m_oSession.SessionHandle, m_oSession.StateBuffer);
// Check to see if we could access the device
if (nResult != 1)
{
// Throw an access exception
throw new owException(owException.owExceptionFunction.Access, m_oLastID, nResult);
}
}
public static short SendBlock(byte[] Data, short ByteCount)
{
// Send the block and return the result
short nResult = TMEX.TMBlockStream(m_oSession.SessionHandle, Data, ByteCount);
// Check to see if the bytes sent matches the value returned
if (nResult != ByteCount)
{
// Throw an access exception
throw new owException(owException.owExceptionFunction.SendBlock, m_oLastID, nResult);
}
// Return the result
return nResult;
}
public static short SendBlock(byte[] Data, short ByteCount, bool Reset)
{
short nResult;
// Send the block and return the result
if (Reset)
nResult = TMEX.TMBlockStream(m_oSession.SessionHandle, Data, ByteCount);
else
nResult = TMEX.TMBlockIO(m_oSession.SessionHandle, Data, ByteCount);
// Check to see if the bytes sent matches the value returned
if (nResult != ByteCount)
{
// Throw an access exception
throw new owException(owException.owExceptionFunction.SendBlock, m_oLastID, nResult);
}
// Return the result
return nResult;
}
public static short ReadBit()
{
// Send the byte and get back what was sent
short nResult = TMEX.TMTouchBit(m_oSession.SessionHandle, 0xFF);
// Return the result
return nResult;
}
public static short SendBit(short Output)
{
// Send the byte and get back what was sent
short nResult = TMEX.TMTouchBit(m_oSession.SessionHandle, Output);
// Check that the value was sent correctly
if (nResult != Output)
{
// Throw an exception
throw new owException(owException.owExceptionFunction.SendBit, m_oLastID);
}
// Return the result
return nResult;
}
public static short ReadByte()
{
// Send the byte and get back what was sent
short nResult = TMEX.TMTouchByte(m_oSession.SessionHandle, 0xFF);
// Return the result
return nResult;
}
public static short Reset()
{
// Reset all devices
return TMEX.TMTouchReset(m_oSession.SessionHandle);
}
public static short SendByte(short Output)
{
// Send the byte and get back what was sent
short nResult = TMEX.TMTouchByte(m_oSession.SessionHandle, Output);
// Check that the value was sent correctly
if (nResult != Output)
{
// Throw an exception
throw new owException(owException.owExceptionFunction.SendByte, m_oLastID);
}
// Return the result
return nResult;
}
public static short SetLevel(TMEX.TMOneWireLevelOperation nOperation, TMEX.TMOneWireLevelMode nLevelMode, TMEX.TMOneWireLevelPrime nPrimed)
{
// Set the level
short nResult = TMEX.TMOneWireLevel(m_oSession.SessionHandle, TMEX.TMOneWireLevelOperation.Write, TMEX.TMOneWireLevelMode.Normal, TMEX.TMOneWireLevelPrime.Immediate);
// Check the result
if (nResult < 0)
{
// Throw an exception
throw new owException(owException.owExceptionFunction.SetLevel, nResult);
}
// Return the result
return nResult;
}
#endregion
}
}