/** * @file i2c.h * @brief I2C service IPC wrapper. * @author SciresM * @copyright libnx Authors */ #pragma once #include "../types.h" #include "../sf/service.h" typedef enum { I2cDevice_DebugPad = 0, I2cDevice_TouchPanel = 1, I2cDevice_Tmp451 = 2, I2cDevice_Nct72 = 3, I2cDevice_Alc5639 = 4, I2cDevice_Max77620Rtc = 5, I2cDevice_Max77620Pmic = 6, I2cDevice_Max77621Cpu = 7, I2cDevice_Max77621Gpu = 8, I2cDevice_Bq24193 = 9, I2cDevice_Max17050 = 10, I2cDevice_Bm92t30mwv = 11, I2cDevice_Ina226Vdd15v0Hb = 12, I2cDevice_Ina226VsysCpuDs = 13, I2cDevice_Ina226VsysGpuDs = 14, I2cDevice_Ina226VsysDdrDs = 15, I2cDevice_Ina226VsysAp = 16, I2cDevice_Ina226VsysBlDs = 17, I2cDevice_Bh1730 = 18, I2cDevice_Ina226VsysCore = 19, I2cDevice_Ina226Soc1V8 = 20, I2cDevice_Ina226Lpddr1V8 = 21, I2cDevice_Ina226Reg1V32 = 22, I2cDevice_Ina226Vdd3V3Sys = 23, I2cDevice_HdmiDdc = 24, I2cDevice_HdmiScdc = 25, I2cDevice_HdmiHdcp = 26, I2cDevice_Fan53528 = 27, I2cDevice_Max77812_3 = 28, I2cDevice_Max77812_2 = 29, I2cDevice_Ina226VddDdr0V6 = 30, I2cDevice_Count, } I2cDevice; typedef struct { Service s; } I2cSession; typedef enum { I2cTransactionOption_Start = (1 << 0), I2cTransactionOption_Stop = (1 << 1), I2cTransactionOption_All = I2cTransactionOption_Start | I2cTransactionOption_Stop, } I2cTransactionOption; /// Initialize i2c. Result i2cInitialize(void); /// Exit i2c. void i2cExit(void); /// Gets the Service object for the actual i2c service session. Service* i2cGetServiceSession(void); Result i2cOpenSession(I2cSession *out, I2cDevice dev); Result i2csessionSendAuto(I2cSession *s, const void *buf, size_t size, I2cTransactionOption option); Result i2csessionReceiveAuto(I2cSession *s, void *buf, size_t size, I2cTransactionOption option); Result i2csessionExecuteCommandList(I2cSession *s, void *dst, size_t dst_size, const void *cmd_list, size_t cmd_list_size); void i2csessionClose(I2cSession *s);