You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					134 lines
				
				4.3 KiB
			
		
		
			
		
	
	
					134 lines
				
				4.3 KiB
			| 
								 
											7 years ago
										 
									 | 
							
								/* Jim Lindblom @ SparkFun Electronics
							 | 
						||
| 
								 | 
							
								 * October 26, 2014
							 | 
						||
| 
								 | 
							
								 * https://github.com/sparkfun/Micro_OLED_Breakout/tree/master/Firmware/Arduino/libraries/SFE_MicroOLED
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Modified by:
							 | 
						||
| 
								 | 
							
								 * Emil Varughese @ Edwin Robotics Pvt. Ltd.
							 | 
						||
| 
								 | 
							
								 * July 27, 2015
							 | 
						||
| 
								 | 
							
								 * https://github.com/emil01/SparkFun_Micro_OLED_Arduino_Library/
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * This code was heavily based around the MicroView library, written by GeekAmmo
							 | 
						||
| 
								 | 
							
								 * (https://github.com/geekammo/MicroView-Arduino-Library).
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Adapted for QMK by:
							 | 
						||
| 
								 | 
							
								 * Jack Humbert <jack.humb@gmail.com>
							 | 
						||
| 
								 | 
							
								 * October 11, 2018
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * This program is free software: you can redistribute it and/or modify
							 | 
						||
| 
								 | 
							
								 * it under the terms of the GNU General Public License as published by
							 | 
						||
| 
								 | 
							
								 * the Free Software Foundation, either version 3 of the License, or
							 | 
						||
| 
								 | 
							
								 * (at your option) any later version.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * This program is distributed in the hope that it will be useful,
							 | 
						||
| 
								 | 
							
								 * but WITHOUT ANY WARRANTY; without even the implied warranty of
							 | 
						||
| 
								 | 
							
								 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
							 | 
						||
| 
								 | 
							
								 * GNU General Public License for more details.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * You should have received a copy of the GNU General Public License
							 | 
						||
| 
								 | 
							
								 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								#pragma once
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "qwiic.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void micro_oled_init(void);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								void send_command(uint8_t command);
							 | 
						||
| 
								 | 
							
								void send_data(uint8_t data);
							 | 
						||
| 
								 | 
							
								void set_page_address(uint8_t address);
							 | 
						||
| 
								 | 
							
								void set_column_address(uint8_t address);
							 | 
						||
| 
								 | 
							
								void clear_screen(void);
							 | 
						||
| 
								 | 
							
								void clear_buffer(void);
							 | 
						||
| 
								 | 
							
								void send_buffer(void);
							 | 
						||
| 
								 | 
							
								void draw_pixel(uint8_t x, uint8_t y, uint8_t color, uint8_t mode);
							 | 
						||
| 
								 | 
							
								void draw_line(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1, uint8_t color, uint8_t mode);
							 | 
						||
| 
								 | 
							
								void draw_line_hori(uint8_t x, uint8_t y, uint8_t width, uint8_t color, uint8_t mode);
							 | 
						||
| 
								 | 
							
								void draw_line_vert(uint8_t x, uint8_t y, uint8_t height, bool color, uint8_t mode);
							 | 
						||
| 
								 | 
							
								void draw_rect(uint8_t x, uint8_t y, uint8_t width, uint8_t height, uint8_t color, uint8_t mode);
							 | 
						||
| 
								 | 
							
								void draw_rect_soft(uint8_t x, uint8_t y, uint8_t width, uint8_t height, uint8_t color, uint8_t mode);
							 | 
						||
| 
								 | 
							
								void draw_rect_filled(uint8_t x, uint8_t y, uint8_t width, uint8_t height, uint8_t color, uint8_t mode);
							 | 
						||
| 
								 | 
							
								void draw_rect_filled_soft(uint8_t x, uint8_t y, uint8_t width, uint8_t height, uint8_t color, uint8_t mode);
							 | 
						||
| 
								 | 
							
								void draw_char(uint8_t x, uint8_t y, uint8_t c, uint8_t color, uint8_t mode, uint8_t font);
							 | 
						||
| 
								 | 
							
								void draw_string(uint8_t x, uint8_t y, char * string, uint8_t color, uint8_t mode, uint8_t font);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define I2C_ADDRESS_SA0_0 0b0111100
							 | 
						||
| 
								 | 
							
								#ifndef I2C_ADDRESS_SA0_1
							 | 
						||
| 
								 | 
							
								#define I2C_ADDRESS_SA0_1 0b0111101
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								#define I2C_COMMAND 0x00
							 | 
						||
| 
								 | 
							
								#define I2C_DATA 0x40
							 | 
						||
| 
								 | 
							
								#define PIXEL_OFF 0
							 | 
						||
| 
								 | 
							
								#define PIXEL_ON  1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef LCDWIDTH
							 | 
						||
| 
								 | 
							
								#define LCDWIDTH      64
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								#ifndef LCDWIDTH
							 | 
						||
| 
								 | 
							
								#define LCDHEIGHT     48
							 | 
						||
| 
								 | 
							
								#endif
							 | 
						||
| 
								 | 
							
								#define FONTHEADERSIZE    6
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define NORM        0
							 | 
						||
| 
								 | 
							
								#define XOR         1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define PAGE        0
							 | 
						||
| 
								 | 
							
								#define ALL         1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define WIDGETSTYLE0      0
							 | 
						||
| 
								 | 
							
								#define WIDGETSTYLE1      1
							 | 
						||
| 
								 | 
							
								#define WIDGETSTYLE2      2
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#define SETCONTRAST     0x81
							 | 
						||
| 
								 | 
							
								#define DISPLAYALLONRESUME  0xA4
							 | 
						||
| 
								 | 
							
								#define DISPLAYALLON    0xA5
							 | 
						||
| 
								 | 
							
								#define NORMALDISPLAY     0xA6
							 | 
						||
| 
								 | 
							
								#define INVERTDISPLAY     0xA7
							 | 
						||
| 
								 | 
							
								#define DISPLAYOFF      0xAE
							 | 
						||
| 
								 | 
							
								#define DISPLAYON       0xAF
							 | 
						||
| 
								 | 
							
								#define SETDISPLAYOFFSET  0xD3
							 | 
						||
| 
								 | 
							
								#define SETCOMPINS      0xDA
							 | 
						||
| 
								 | 
							
								#define SETVCOMDESELECT   0xDB
							 | 
						||
| 
								 | 
							
								#define SETDISPLAYCLOCKDIV  0xD5
							 | 
						||
| 
								 | 
							
								#define SETPRECHARGE    0xD9
							 | 
						||
| 
								 | 
							
								#define SETMULTIPLEX    0xA8
							 | 
						||
| 
								 | 
							
								#define SETLOWCOLUMN    0x00
							 | 
						||
| 
								 | 
							
								#define SETHIGHCOLUMN     0x10
							 | 
						||
| 
								 | 
							
								#define SETSTARTLINE    0x40
							 | 
						||
| 
								 | 
							
								#define MEMORYMODE      0x20
							 | 
						||
| 
								 | 
							
								#define COMSCANINC      0xC0
							 | 
						||
| 
								 | 
							
								#define COMSCANDEC      0xC8
							 | 
						||
| 
								 | 
							
								#define SEGREMAP      0xA0
							 | 
						||
| 
								 | 
							
								#define CHARGEPUMP      0x8D
							 | 
						||
| 
								 | 
							
								#define EXTERNALVCC     0x01
							 | 
						||
| 
								 | 
							
								#define SWITCHCAPVCC    0x02
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Scroll
							 | 
						||
| 
								 | 
							
								#define ACTIVATESCROLL          0x2F
							 | 
						||
| 
								 | 
							
								#define DEACTIVATESCROLL        0x2E
							 | 
						||
| 
								 | 
							
								#define SETVERTICALSCROLLAREA       0xA3
							 | 
						||
| 
								 | 
							
								#define RIGHTHORIZONTALSCROLL       0x26
							 | 
						||
| 
								 | 
							
								#define LEFT_HORIZONTALSCROLL       0x27
							 | 
						||
| 
								 | 
							
								#define VERTICALRIGHTHORIZONTALSCROLL 0x29
							 | 
						||
| 
								 | 
							
								#define VERTICALLEFTHORIZONTALSCROLL  0x2A
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef enum CMD {
							 | 
						||
| 
								 | 
							
								  CMD_CLEAR,      //0
							 | 
						||
| 
								 | 
							
								  CMD_INVERT,     //1
							 | 
						||
| 
								 | 
							
								  CMD_CONTRAST,   //2
							 | 
						||
| 
								 | 
							
								  CMD_DISPLAY,    //3
							 | 
						||
| 
								 | 
							
								  CMD_SETCURSOR,    //4
							 | 
						||
| 
								 | 
							
								  CMD_PIXEL,      //5
							 | 
						||
| 
								 | 
							
								  CMD_LINE,     //6
							 | 
						||
| 
								 | 
							
								  CMD_LINEH,      //7
							 | 
						||
| 
								 | 
							
								  CMD_LINEV,      //8
							 | 
						||
| 
								 | 
							
								  CMD_RECT,     //9
							 | 
						||
| 
								 | 
							
								  CMD_RECTFILL,   //10
							 | 
						||
| 
								 | 
							
								  CMD_CIRCLE,     //11
							 | 
						||
| 
								 | 
							
								  CMD_CIRCLEFILL,   //12
							 | 
						||
| 
								 | 
							
								  CMD_DRAWCHAR,   //13
							 | 
						||
| 
								 | 
							
								  CMD_DRAWBITMAP,   //14
							 | 
						||
| 
								 | 
							
								  CMD_GETLCDWIDTH,  //15
							 | 
						||
| 
								 | 
							
								  CMD_GETLCDHEIGHT, //16
							 | 
						||
| 
								 | 
							
								  CMD_SETCOLOR,   //17
							 | 
						||
| 
								 | 
							
								  CMD_SETDRAWMODE   //18
							 | 
						||
| 
								 | 
							
								} commCommand_t;
							 |