1765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang/*
2765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang * Author: Yevgeniy Kiveisha <yevgeniy.kiveisha@intel.com>
3765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang * Copyright (c) 2014 Intel Corporation.
4765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang *
5765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang * Permission is hereby granted, free of charge, to any person obtaining
6765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang * a copy of this software and associated documentation files (the
7765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang * "Software"), to deal in the Software without restriction, including
8765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang * without limitation the rights to use, copy, modify, merge, publish,
9765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang * distribute, sublicense, and/or sell copies of the Software, and to
10765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang * permit persons to whom the Software is furnished to do so, subject to
11765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang * the following conditions:
12765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang *
13765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang * The above copyright notice and this permission notice shall be
14765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang * included in all copies or substantial portions of the Software.
15765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang *
16765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang */
24765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
25765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang#include <iostream>
26765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang#include <string>
27765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang#include <stdexcept>
28765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang#include <unistd.h>
29765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang#include <stdlib.h>
30765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang#include <stdio.h>
31765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang#include <string.h>
32765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
33765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang#include "st7735.h"
34765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
35765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhangusing namespace upm;
36765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
37765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun ZhangST7735::ST7735 (uint8_t csLCD, uint8_t cSD, uint8_t rs, uint8_t rst)
38765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    : GFX (160, 128, m_map, font), m_csLCDPinCtx(csLCD), m_cSDPinCtx(cSD),
39765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang      m_rSTPinCtx(rst), m_rSPinCtx(rs), m_spi(0) {
40765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
41765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang      initModule ();
42765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    configModule ();
43765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang}
44765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
45765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhangvoid
46765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun ZhangST7735::initModule () {
47765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    mraa::Result error = mraa::SUCCESS;
48765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
49765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    m_height = 160;
50765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    m_width  = 128;
51765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
52765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    m_spi.frequency(15 * 1000000);
53765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
54765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    error = m_csLCDPinCtx.dir(mraa::DIR_OUT);
55765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    if (error != mraa::SUCCESS) {
56765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang        mraa::printError (error);
57765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    }
58765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
59765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    error = m_cSDPinCtx.dir(mraa::DIR_OUT);
60765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    if (error != mraa::SUCCESS) {
61765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang        mraa::printError (error);
62765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    }
63765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
64765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    error = m_rSTPinCtx.dir(mraa::DIR_OUT);
65765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    if (error != mraa::SUCCESS) {
66765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang        mraa::printError (error);
67765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    }
68765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
69765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    error = m_rSPinCtx.dir(mraa::DIR_OUT);
70765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    if (error != mraa::SUCCESS) {
71765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang        mraa::printError (error);
72765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    }
73765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
74765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    error = m_spi.frequency(15 * 1000000);
75765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    if (error != mraa::SUCCESS) {
76765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang        mraa::printError (error);
77765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    }
78765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
79765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    lcdCSOn ();
80765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang}
81765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
82765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhangvoid
83765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun ZhangST7735::write (uint8_t value) {
84765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    rsLOW ();
85765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    m_spi.writeByte(value);
86765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang}
87765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
88765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhangvoid
89765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun ZhangST7735::data (uint8_t value) {
90765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    rsHIGH ();
91765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    m_spi.writeByte(value);
92765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang}
93765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
94765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhangvoid
95765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun ZhangST7735::executeCMDList(const uint8_t *addr) {
96765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    uint8_t  numCommands, numArgs;
97765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    uint16_t ms;
98765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
99765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    numCommands = *(addr++);           // Number of commands to follow
100765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    while(numCommands--) {             // For each command...
101765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang        write (*(addr++));             // Read, issue command
102765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang        numArgs  = *(addr++);          // Number of args to follow
103765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang        ms       = numArgs & DELAY;    // If hibit set, delay follows args
104765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang        numArgs &= ~DELAY;             // Mask out delay bit
105765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang        while(numArgs--) {             // For each argument...
106765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang            data (*(addr++));          // Read, issue argument
107765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang        }
108765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
109765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang        if(ms) {
110765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang            ms = *(addr++);            // Read post-command delay time (ms)
111765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang            if (ms == 255) {
112765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang                ms = 500;              // If 255, delay for 500 ms
113765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang            }
114765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang            usleep (ms * 1000);
115765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang        }
116765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    }
117765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang}
118765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
119765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhangvoid
120765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun ZhangST7735::setAddrWindow(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1) {
121765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    uint8_t colstart, rowstart;
122765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    colstart  = rowstart = 0;
123765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
124765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    write (ST7735_CASET);                       // Column addr set
125765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
126765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    rsHIGH ();
127765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    m_spiBuffer[0] = 0x00;
128765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    m_spiBuffer[1] = x0 + colstart;             // XSTART
129765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    m_spiBuffer[2] = 0x00;
130765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    m_spiBuffer[3] = x1 + colstart;             // XEND
131765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    m_spi.write(m_spiBuffer, 4);
132765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
133765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    write (ST7735_RASET);                       // Row addr set
134765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
135765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    rsHIGH ();
136765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    m_spiBuffer[0] = 0x00;
137765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    m_spiBuffer[1] = y0 + rowstart;             // YSTART
138765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    m_spiBuffer[2] = 0x00;
139765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    m_spiBuffer[3] = y1 + rowstart;             // YEND
140765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    m_spi.write(m_spiBuffer, 4);
141765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
142765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    write (ST7735_RAMWR);                       // write to RAM
143765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang}
144765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
145765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhangvoid
146765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun ZhangST7735::drawPixel(int16_t x, int16_t y, uint16_t color) {
147765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    if (mraa::SUCCESS != setPixel (x, y, color)) {
148765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang        return;
149765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    }
150765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
151765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    refresh ();
152765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang}
153765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
154765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhangvoid
155765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun ZhangST7735::refresh () {
156765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    rsHIGH ();
157765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
158765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    int fragmentSize = m_height * m_width * 2 / 20;
159765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    for (int fragment = 0; fragment < 20; fragment++) {
160765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang        m_spi.write(&m_map[fragment * fragmentSize], fragmentSize);
161765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    }
162765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang}
163765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
164765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhangvoid
165765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun ZhangST7735::configModule() {
166765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    rsHIGH ();
167765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    lcdCSOff ();
168765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    lcdCSOn ();
169765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
170765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    m_rSTPinCtx.write(HIGH);
171765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    usleep (500000);
172765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    m_rSTPinCtx.write(LOW);
173765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    usleep (500000);
174765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    m_rSTPinCtx.write(HIGH);
175765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    usleep (500000);
176765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
177765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    executeCMDList (Rcmd1);
178765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    executeCMDList (Rcmd2red);
179765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    executeCMDList (Rcmd3);
180765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
181765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    write (ST7735_MADCTL);
182765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    data (0xC0);
183765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
184765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    setAddrWindow (0, 0, m_width - 1, m_height - 1);
185765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
186765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    fillScreen (ST7735_BLACK);
187765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    refresh ();
188765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang}
189765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
190765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhangmraa::Result
191765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun ZhangST7735::lcdCSOn () {
192765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    mraa::Result error = mraa::SUCCESS;
193765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
194765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    error = m_csLCDPinCtx.write(LOW);
195765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    if (error != mraa::SUCCESS) {
196765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang        mraa::printError (error);
197765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    }
198765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
199765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    error = m_cSDPinCtx.write(HIGH);
200765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    if (error != mraa::SUCCESS) {
201765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang        mraa::printError (error);
202765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    }
203765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
204765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    return error;
205765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang}
206765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
207765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhangmraa::Result
208765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun ZhangST7735::lcdCSOff () {
209765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    mraa::Result error = mraa::SUCCESS;
210765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
211765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    error = m_csLCDPinCtx.write(HIGH);
212765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    if (error != mraa::SUCCESS) {
213765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang        mraa::printError (error);
214765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    }
215765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
216765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    return error;
217765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang}
218765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
219765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhangmraa::Result
220765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun ZhangST7735::sdCSOn () {
221765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    mraa::Result error = mraa::SUCCESS;
222765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
223765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    error = m_cSDPinCtx.write(LOW);
224765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    if (error != mraa::SUCCESS) {
225765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang        mraa::printError (error);
226765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    }
227765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
228765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    error = m_csLCDPinCtx.write(HIGH);
229765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    if (error != mraa::SUCCESS) {
230765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang        mraa::printError (error);
231765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    }
232765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
233765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    return error;
234765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang}
235765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
236765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhangmraa::Result
237765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun ZhangST7735::sdCSOff () {
238765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    mraa::Result error = mraa::SUCCESS;
239765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
240765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    error = m_cSDPinCtx.write(HIGH);
241765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    if (error != mraa::SUCCESS) {
242765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang        mraa::printError (error);
243765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    }
244765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
245765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    return error;
246765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang}
247765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
248765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhangmraa::Result
249765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun ZhangST7735::rsHIGH () {
250765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    mraa::Result error = mraa::SUCCESS;
251765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
252765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    error = m_rSPinCtx.write(HIGH);
253765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    if (error != mraa::SUCCESS) {
254765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang        mraa::printError (error);
255765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    }
256765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
257765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    return error;
258765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang}
259765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
260765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhangmraa::Result
261765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun ZhangST7735::rsLOW () {
262765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    mraa::Result error = mraa::SUCCESS;
263765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
264765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    error = m_rSPinCtx.write(LOW);
265765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    if (error != mraa::SUCCESS) {
266765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang        mraa::printError (error);
267765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    }
268765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang
269765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang    return error;
270765adb95dc941c32690d6c43bc08b9d07d197fcbJianxun Zhang}
271