OLED Driver Integration¶
Introduction¶
This module facilitates platform-specific initialization of OLED displays by providing a standardized initialization parameter structure. It decouples the generic OLED driver from platform-specific details (I2C bus selection, display models, timing parameters, etc.).
Integration Flow¶
Platform Code (board/system initialization)¶
- Initialize the I2C bus using platform-specific code
- Create a
[CFBD_OLED_IICInitsParams](Classes/structCFBD__OLED__IICInitsParams.md)structure with:- I2C bus handle
- Device address (0x3C or 0x3D for typical OLED displays)
- Device-specific callbacks and configuration
- Optional I2C callback for transaction status
- Call OLED driver's init function with the parameters
Typical Platform Initialization¶
// In platform/board initialization code
// Step 1: I2C bus is already initialized
extern CFBD_I2CHandle i2c1_bus;
// Step 2: Define OLED device specifics (e.g., SSD1306)
extern CFBD_OLED_DeviceSpecific ssd1306_specs;
// Step 3: Create initialization parameters
CFBD_OLED_IICInitsParams oled_params = {
.i2cHandle = &i2c1_bus,
.accepted_time_delay = 1, // 1 tick delay
.device_address = 0x3C, // SSD1306 default
.device_specifics = &ssd1306_specs,
.iic_transition_callback = my_iic_handler
};
// Step 4: Initialize OLED
int status = CFBD_OLED_Init(&oled_params);
if (status != OLED_OK) {
// Handle initialization error
handle_error();
}
Supported Device Models¶
The framework supports multiple OLED controller models through the [CFBD_OLED_DeviceSpecific](Classes/structCFBD__OLED__DeviceSpecific.md) structure:
- SSD1306: 128×64 I2C OLED displays
- SSD1309: Enhanced variant with higher speeds
- SH1106: Alternative controller (less common)
Callback Pattern¶
The I2C transition callback enables asynchronous notification when I2C transactions complete:
void my_iic_handler(int status) {
if (status == I2C_OK) {
// I2C transaction succeeded
signal_display_updated();
} else if (status == I2C_ERR_NACK) {
// Display not responding
log_error("Display not found on I2C bus");
} else if (status == I2C_ERR_TIMEOUT) {
// Transaction timeout
log_error("Display I2C timeout");
}
}
Timing Configuration¶
The accepted_time_delay parameter controls inter-transaction delays. This is useful for:
- Allowing display controller time to process commands
- Pacing rapid consecutive updates
- Accommodating system scheduler granularity
Updated on 2026-02-03 at 13:21:55 +0000