mirror of
https://github.com/ckaczor/OneWireAPI.git
synced 2026-01-13 17:23:02 -05:00
166 lines
4.1 KiB
C#
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
|
|
}
|
|
}
|