SSD1306 I2C Display Driver  1.2.1
This library is developed to control SSD1306 I2C OLED Display
ssd1306_spi_hw.cpp
1 /*
2  Copyright (C) 2017 Alexey Dynda
3 
4  This file is part of SSD1306 library.
5 
6  This program is free software: you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation, either version 3 of the License, or
9  (at your option) any later version.
10 
11  This program is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with this program. If not, see <http://www.gnu.org/licenses/>.
18 */
19 
20 
21 #include "ssd1306_spi.h"
22 
23 #include "intf/ssd1306_interface.h"
24 #include "ssd1306_spi_conf.h"
25 
26 #if !defined(SSD1306_EMBEDDED_SPI)
27 /* STANDARD branch */
28  #include <SPI.h>
29 
30 static int8_t s_cs = 4;
31 static int8_t s_dc = 5;
32 
33 void ssd1306_hwSpiInit(int8_t cesPin, int8_t dcPin)
34 {
35  ssd1306_startTransmission = ssd1306_spiStart;
36  ssd1306_endTransmission = ssd1306_spiStop;
37  ssd1306_sendByte = ssd1306_spiSendByte;
38  ssd1306_commandStart = ssd1306_spiCommandStart;
39  ssd1306_dataStart = ssd1306_spiDataStart;
40  s_cs = cesPin;
41  s_dc = dcPin;
42 }
43 
44 void ssd1306_spiStart(void)
45 {
46  SPI.beginTransaction(SPISettings(4000000, MSBFIRST, SPI_MODE0));
47  if (s_cs >= 0)
48  {
49  digitalWrite(s_cs,LOW);
50  }
51 }
52 
53 void ssd1306_spiStop(void)
54 {
55  if (s_cs >= 0)
56  {
57  digitalWrite(s_cs, HIGH);
58  }
59  digitalWrite(s_dc, LOW);
60  SPI.transfer( 0x00 ); // Send NOP command to allow last data byte to pass (bug in PCD8544?)
61  // ssd1306 E3h is NOP command
62  SPI.endTransaction();
63 }
64 
65 void ssd1306_spiSendByte(uint8_t data)
66 {
67  SPI.transfer(data);
68 }
69 
70 void ssd1306_spiCommandStart()
71 {
72  digitalWrite(s_dc, LOW);
73  ssd1306_spiStart();
74 }
75 
76 void ssd1306_spiDataStart()
77 {
78  digitalWrite(s_dc, HIGH);
79  ssd1306_spiStart();
80 }
81 
82 #endif
83 
84 
void(* ssd1306_startTransmission)()
void(* ssd1306_endTransmission)()
void(* ssd1306_sendByte)(uint8_t data)
void(* ssd1306_dataStart)()
void(* ssd1306_commandStart)()