Skip to content

Commit

Permalink
added address calculator for SC16IS7x2
Browse files Browse the repository at this point in the history
  • Loading branch information
ctacke committed Jan 8, 2025
1 parent d5ead53 commit d36308f
Showing 1 changed file with 76 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -1,7 +1,82 @@
namespace Meadow.Foundation.ICs.IOExpanders
using System;

namespace Meadow.Foundation.ICs.IOExpanders
{
public partial class Sc16is7x2
{
/// <summary>
/// Address pin connection used for calculating peripherla addresses
/// </summary>
public enum AddressConnection
{
/// <summary>
/// Address pin tied to VDD
/// </summary>
VDD,
/// <summary>
/// Address pin tied to GND
/// </summary>
GND,
/// <summary>
/// Address pin tied to SCL
/// </summary>
SCL,
/// <summary>
/// Address pin tied to SDA
/// </summary>
SDA
}

/// <summary>
/// Calculates a bus address based on the connection of the address pins
/// </summary>
/// <param name="a0">A0's pin connection</param>
/// <param name="a1">A1's pin connection</param>
public static Addresses CalculateAddress(AddressConnection a0, AddressConnection a1)
{
switch (a1)
{
case AddressConnection.VDD:
switch (a0)
{
case AddressConnection.VDD: return Addresses.Address_0x48;
case AddressConnection.GND: return Addresses.Address_0x49;
case AddressConnection.SCL: return Addresses.Address_0x4A;
case AddressConnection.SDA: return Addresses.Address_0x4B;
}
break;
case AddressConnection.GND:
switch (a0)
{
case AddressConnection.VDD: return Addresses.Address_0x4C;
case AddressConnection.GND: return Addresses.Address_0x4D;
case AddressConnection.SCL: return Addresses.Address_0x4E;
case AddressConnection.SDA: return Addresses.Address_0x4F;
}
break;
case AddressConnection.SCL:
switch (a0)
{
case AddressConnection.VDD: return Addresses.Address_0x50;
case AddressConnection.GND: return Addresses.Address_0x51;
case AddressConnection.SCL: return Addresses.Address_0x52;
case AddressConnection.SDA: return Addresses.Address_0x53;
}
break;
case AddressConnection.SDA:
switch (a0)
{
case AddressConnection.VDD: return Addresses.Address_0x54;
case AddressConnection.GND: return Addresses.Address_0x55;
case AddressConnection.SCL: return Addresses.Address_0x56;
case AddressConnection.SDA: return Addresses.Address_0x57;
}
break;
}

throw new ArgumentException();
}

/// <summary>
/// The list of possible I2C addresses for the peripheral
/// </summary>
Expand Down

0 comments on commit d36308f

Please sign in to comment.