public void SetLevel(EapiGpioId id, GpioLevelEnum levelEnum) { GpioCapability gpioCapabilities = GetGpioCapabilities(); if (!gpioCapabilities.IsOutput(id)) { throw new Exception(id + " is not an output"); } uint bitmask = (uint)(gpioCapabilities.OutputCapabilityMask & (1 << (int)id)); int newLevelVAlues = (int)ReadGpioRegister(); if (levelEnum == GpioLevelEnum.EapiGpioHigh) { newLevelVAlues |= 1 << (int)id; } else { newLevelVAlues &= ~(1 << (int)id); } _logger.Information("SetLevel {0} to {1} => bitmask={2}, newLevelVAlues={3}", id, levelEnum, Convert.ToString(bitmask, 2), Convert.ToString(newLevelVAlues, 2)); uint resultCode = EApiGPIOSetLevel(_eapiIdGpioBank00, bitmask, (uint)(0xffff & newLevelVAlues)); if (!_eApiStatusCodes.IsSuccess(resultCode)) { throw new Exception("EApiGPIOSetLevel: " + _eApiStatusCodes.GetStatusStringFrom(resultCode)); } }
public void SetAll(GpioLevelEnum levelEnum) { GpioCapability gpioCapabilities = GetGpioCapabilities(); uint bitmask = gpioCapabilities.OutputCapabilityMask; uint newLevelValues = (uint)(levelEnum == GpioLevelEnum.EapiGpioHigh ? 0xffff : 0); _logger.Information("SetAll: id={0}, bitmask={1}, new level={2}", _eapiIdGpioBank00, bitmask.ToBinaryString(), newLevelValues.ToBinaryString()); uint resultCode = EApiGPIOSetLevel(_eapiIdGpioBank00, bitmask, newLevelValues); if (!_eApiStatusCodes.IsSuccess(resultCode)) { throw new Exception("EApiGPIOSetLevel: " + _eApiStatusCodes.GetStatusStringFrom(resultCode)); } }