]> git.donarmstrong.com Git - qmk_firmware.git/blobdiff - drivers/qwiic/micro_oled.h
adding Hadron v3 keyboard, QWIIC devices support, haptic feedback support (#4462)
[qmk_firmware.git] / drivers / qwiic / micro_oled.h
diff --git a/drivers/qwiic/micro_oled.h b/drivers/qwiic/micro_oled.h
new file mode 100644 (file)
index 0000000..5d6a102
--- /dev/null
@@ -0,0 +1,134 @@
+/* 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;
\ No newline at end of file