/// <summary> /// 読み込み /// </summary> /// <returns>The read.</returns> /// <param name="buffer">読み取りデータの格納バッファ</param> /// <param name="offset">オフセット(インデックス)</param> /// <param name="count">読み取りデータバイト数</param> /// <returns>読み取りバイト数</returns> public Int32 Read(byte[] buffer, Int32 offset, Int32 count) { ArraySegment <byte> segment = new ArraySegment <byte>(buffer, offset, count); RPi.bcm2835_i2c_read(segment); return(count); }
/// <summary> /// 汎用:レジイスタ書き込み /// </summary> /// <param name="registerAddress">レジスタ アドレス</param> /// <param name="buffer">書き込むデータのバッファ</param> /// <param name="offset">オフセット(インデックス)</param> public void WriteRegister(byte registerAddress, byte[] buffer, int offset) { byte[] data = new byte[buffer.Length + 1]; data[0] = registerAddress; Buffer.BlockCopy(buffer, offset, data, 1, buffer.Length); RPi.bcm2835_i2c_write(data); }
/// <summary> /// 廃棄 /// </summary> /// <remarks>Call <see cref="Dispose"/> when you are finished using the <see cref="T:PiAccessLib.PiI2C"/>. The /// <see cref="Dispose"/> method leaves the <see cref="T:PiAccessLib.PiI2C"/> in an unusable state. After /// calling <see cref="Dispose"/>, you must release all references to the <see cref="T:PiAccessLib.PiI2C"/> so /// the garbage collector can reclaim the memory that the <see cref="T:PiAccessLib.PiI2C"/> was occupying.</remarks> public void Dispose() { if (IsUsed == false) { return; } RPi.bcm2835_i2c_end(); IsUsed = false; }
/// <summary> /// コンストラクタ /// </summary> /// <param name="desiredFrequency">Desired frequency.</param> /// <param name="slaveAddress">Slave address.</param> public PiI2C(UInt32 desiredFrequency, byte slaveAddress) { if (IsUsed == true) { throw new InvalidOperationException("I2C is in used."); } RPi.bcm2835_i2c_begin(false, HighSpeedCore); Frequency = RPi.bcm2835_i2c_set_baudrate(desiredFrequency, HighSpeedCore); RPi.bcm2835_i2c_setSlaveAddress(slaveAddress); }
/// <summary> /// レジスタへの書き込み(非同期) /// </summary> /// <param name="registerAddress">レジスタ アドレス</param> /// <param name="writeData">書き込みデータ</param> /// <returns>タスク</returns> public Task WriteRegisterAsync(Byte registerAddress, Byte[] writeData) { return(Task.Run(() => { byte[] data = new byte[writeData.Length + 1]; data[0] = registerAddress; Buffer.BlockCopy(writeData, 0, data, 1, writeData.Length); RPi.bcm2835_i2c_write(data); })); }
/// <summary> /// レジスタからの読み込み(非同期) /// </summary> /// <param name="registerAddress">レジスタ アドレス</param> /// <param name="readByte">読み取りバイト数</param> /// <returns>タスク</returns> public Task <Byte[]> ReadRegisterAsync(Byte registerAddress, Int32 readByte) { return(Task.Run(() => { Byte[] buffer = new byte[readByte]; ArraySegment <byte> segment = new ArraySegment <byte>(buffer, 0, buffer.Length); RPi.bcm2835_i2c_read_register_rs(registerAddress, segment); return buffer; })); }
/// <summary> /// 書き込み /// </summary> /// <param name="buffer">書き込むデータのバッファ</param> /// <param name="offset">オフセット(インデックス)</param> public void Write(Byte[] buffer, Int32 offset) { ArraySegment <byte> segment = new ArraySegment <byte>(buffer, offset, buffer.Length); RPi.bcm2835_i2c_write(segment); }
/// <summary> /// 汎用:レジスタ読み込み /// </summary> /// <param name="registerAddress">レジスタ アドレス</param> /// <param name="buffer">読み取りデータの格納バッファ</param> /// <param name="offset">オフセット(インデックス)</param> /// <param name="count">読み取りデータバイト数</param> public void ReadRegister(byte registerAddress, byte[] buffer, int offset, int count) { ArraySegment <byte> segment = new ArraySegment <byte>(buffer, offset, count); RPi.bcm2835_i2c_read_register_rs(registerAddress, segment); }