1/* 2 * Copyright 2020, J��r��me Duval, jerome.duval@gmail.com. 3 * Distributed under the terms of the MIT License. 4 */ 5#ifndef I2C_PRIVATE_H 6#define I2C_PRIVATE_H 7 8 9#include <new> 10#include <stdio.h> 11#include <string.h> 12 13#include <lock.h> 14#include <util/AutoLock.h> 15#include <i2c.h> 16 17 18//#define I2C_TRACE 19#ifdef I2C_TRACE 20# define TRACE(x...) dprintf("\33[33mi2c:\33[0m " x) 21#else 22# define TRACE(x...) 23#endif 24#define TRACE_ALWAYS(x...) dprintf("\33[33mi2c:\33[0m " x) 25#define ERROR(x...) TRACE_ALWAYS(x) 26#define CALLED() TRACE("CALLED %s\n", __PRETTY_FUNCTION__) 27 28 29#define I2C_SIM_MODULE_NAME "bus_managers/i2c/sim/driver_v1" 30 31#define I2C_PATHID_GENERATOR "i2c/path_id" 32#define I2C_BUS_RAW_MODULE_NAME "bus_managers/i2c/bus/raw/device_v1" 33 34 35class I2CBus; 36class I2CDevice; 37 38extern device_manager_info *gDeviceManager; 39extern struct device_module_info gI2CBusRawModule; 40extern i2c_bus_interface gI2CBusModule; 41extern i2c_device_interface gI2CDeviceModule; 42 43class I2CDevice { 44public: 45 I2CDevice(device_node* node, I2CBus* bus, 46 i2c_addr slaveAddress); 47 ~I2CDevice(); 48 49 status_t InitCheck(); 50 51 status_t ExecCommand(i2c_op op, const void *cmdBuffer, 52 size_t cmdLength, void* dataBuffer, 53 size_t dataLength); 54 status_t AcquireBus(); 55 void ReleaseBus(); 56 57private: 58 device_node* fNode; 59 I2CBus* fBus; 60 i2c_addr fSlaveAddress; 61}; 62 63 64class I2CBus { 65public: 66 I2CBus(device_node *node, uint8 id); 67 ~I2CBus(); 68 69 status_t InitCheck(); 70 71 status_t ExecCommand(i2c_op op, i2c_addr slaveAddress, 72 const void *cmdBuffer, size_t cmdLength, 73 void* dataBuffer, size_t dataLength); 74 status_t Scan(); 75 status_t RegisterDevice(i2c_addr slaveAddress, 76 char* hid, char** cid, 77 acpi_handle acpiHandle); 78 status_t AcquireBus(); 79 void ReleaseBus(); 80 81private: 82 device_node* fNode; 83 uint8 fID; 84 i2c_sim_interface* fController; 85 void* fCookie; 86}; 87 88 89 90#endif // I2C_PRIVATE_H 91