Add a method to read the OLED display buffer from user space (#8777)
* Adding extern and declaration * Change to mediated buffer read * Adding raw byte read * Restore write raw... D'Oh * Working struct return * Pack that struct * Remove conditional packing and add example to docs * Cleanup tab/spaces * Update docs/feature_oled_driver.md Prettify formatting * Update drivers/oled/oled_driver.h Prettify formatting
This commit is contained in:
		
							parent
							
								
									92385b3fb6
								
							
						
					
					
						commit
						fa6cf85727
					
				
					 3 changed files with 58 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -444,6 +444,14 @@ void oled_pan(bool left) {
 | 
			
		|||
    oled_dirty = ~((OLED_BLOCK_TYPE)0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
oled_buffer_reader_t oled_read_raw(uint16_t start_index) {
 | 
			
		||||
    if (start_index > OLED_MATRIX_SIZE) start_index = OLED_MATRIX_SIZE;
 | 
			
		||||
    oled_buffer_reader_t ret_reader;
 | 
			
		||||
    ret_reader.current_element = &oled_buffer[start_index];
 | 
			
		||||
    ret_reader.remaining_element_count = OLED_MATRIX_SIZE - start_index;
 | 
			
		||||
    return ret_reader;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void oled_write_raw_byte(const char data, uint16_t index) {
 | 
			
		||||
    if (index > OLED_MATRIX_SIZE) index = OLED_MATRIX_SIZE;
 | 
			
		||||
    if (oled_buffer[index] == data) return;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -154,6 +154,11 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		|||
#    define OLED_I2C_TIMEOUT 100
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
typedef struct __attribute__((__packed__)) {
 | 
			
		||||
    uint8_t  *current_element;
 | 
			
		||||
    uint16_t remaining_element_count;
 | 
			
		||||
} oled_buffer_reader_t;
 | 
			
		||||
 | 
			
		||||
// OLED Rotation enum values are flags
 | 
			
		||||
typedef enum {
 | 
			
		||||
    OLED_ROTATION_0   = 0,
 | 
			
		||||
| 
						 | 
				
			
			@ -207,6 +212,10 @@ void oled_write_ln(const char *data, bool invert);
 | 
			
		|||
// Pans the buffer to the right (or left by passing true) by moving contents of the buffer
 | 
			
		||||
void oled_pan(bool left);
 | 
			
		||||
 | 
			
		||||
// Returns a pointer to the requested start index in the buffer plus remaining
 | 
			
		||||
// buffer length as struct
 | 
			
		||||
oled_buffer_reader_t oled_read_raw(uint16_t start_index);
 | 
			
		||||
 | 
			
		||||
void oled_write_raw(const char *data, uint16_t size);
 | 
			
		||||
void oled_write_raw_byte(const char data, uint16_t index);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue