158 lines
4.3 KiB
Python
158 lines
4.3 KiB
Python
"""
|
|
* | File : epdconfig.py
|
|
* | Author : Waveshare electrices
|
|
* | Function : Hardware underlying interface
|
|
* | Info :
|
|
*----------------
|
|
* | This version: V1.0
|
|
* | Date : 2019-11-01
|
|
* | Info :
|
|
******************************************************************************/
|
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
of this software and associated documnetation files (the "Software"), to deal
|
|
in the Software without restriction, including without limitation the rights
|
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
copies of the Software, and to permit persons to whom the Software is
|
|
furished to do so, subject to the following conditions:
|
|
|
|
The above copyright notice and this permission notice shall be included in
|
|
all copies or substantial portions of the Software.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
THE SOFTWARE.
|
|
"""
|
|
import logging
|
|
import os
|
|
import time
|
|
from ctypes import *
|
|
|
|
import RPi.GPIO as GPIO
|
|
|
|
EPD_SCK_PIN = 11
|
|
EPD_MOSI_PIN = 10
|
|
|
|
EPD_M1_CS_PIN = 8
|
|
EPD_S1_CS_PIN = 7
|
|
EPD_M2_CS_PIN = 17
|
|
EPD_S2_CS_PIN = 18
|
|
|
|
EPD_M1S1_DC_PIN = 13
|
|
EPD_M2S2_DC_PIN = 22
|
|
|
|
EPD_M1S1_RST_PIN = 6
|
|
EPD_M2S2_RST_PIN = 23
|
|
|
|
EPD_M1_BUSY_PIN = 5
|
|
EPD_S1_BUSY_PIN = 19
|
|
EPD_M2_BUSY_PIN = 27
|
|
EPD_S2_BUSY_PIN = 24
|
|
|
|
find_dirs = [
|
|
os.path.dirname(os.path.realpath(__file__)),
|
|
'/usr/local/lib',
|
|
'/usr/lib',
|
|
]
|
|
spi = None
|
|
for find_dir in find_dirs:
|
|
val = int(os.popen('getconf LONG_BIT').read())
|
|
logging.debug("System is %d bit" % val)
|
|
if val == 64:
|
|
so_filename = os.path.join(find_dir, 'epd_12_in_48_lib_64bit.so')
|
|
else:
|
|
so_filename = os.path.join(find_dir, 'epd_12_in_48_lib_32bit.so')
|
|
if os.path.exists(so_filename):
|
|
spi = CDLL(so_filename)
|
|
break
|
|
if spi is None:
|
|
RuntimeError('Cannot find DEV_Config.so')
|
|
|
|
|
|
def digital_write(pin, value):
|
|
GPIO.output(pin, value)
|
|
|
|
|
|
def digital_read(pin):
|
|
return GPIO.input(pin)
|
|
|
|
|
|
def spi_writebyte(value):
|
|
spi.DEV_SPI_WriteByte(value)
|
|
|
|
|
|
def delay_ms(delaytime):
|
|
time.sleep(delaytime / 1000.0)
|
|
|
|
|
|
def module_init():
|
|
GPIO.setmode(GPIO.BCM)
|
|
GPIO.setwarnings(False)
|
|
GPIO.setup(EPD_SCK_PIN, GPIO.OUT)
|
|
GPIO.setup(EPD_MOSI_PIN, GPIO.OUT)
|
|
|
|
logging.debug("python call bcm2835 Lib")
|
|
|
|
GPIO.setup(EPD_M2S2_RST_PIN, GPIO.OUT)
|
|
GPIO.setup(EPD_M1S1_RST_PIN, GPIO.OUT)
|
|
GPIO.setup(EPD_M2S2_DC_PIN, GPIO.OUT)
|
|
GPIO.setup(EPD_M1S1_DC_PIN, GPIO.OUT)
|
|
GPIO.setup(EPD_S1_CS_PIN, GPIO.OUT)
|
|
GPIO.setup(EPD_S2_CS_PIN, GPIO.OUT)
|
|
GPIO.setup(EPD_M1_CS_PIN, GPIO.OUT)
|
|
GPIO.setup(EPD_M2_CS_PIN, GPIO.OUT)
|
|
|
|
GPIO.setup(EPD_S1_BUSY_PIN, GPIO.IN)
|
|
GPIO.setup(EPD_S2_BUSY_PIN, GPIO.IN)
|
|
GPIO.setup(EPD_M1_BUSY_PIN, GPIO.IN)
|
|
GPIO.setup(EPD_M2_BUSY_PIN, GPIO.IN)
|
|
|
|
digital_write(EPD_M1_CS_PIN, 1)
|
|
digital_write(EPD_S1_CS_PIN, 1)
|
|
digital_write(EPD_M2_CS_PIN, 1)
|
|
digital_write(EPD_S2_CS_PIN, 1)
|
|
|
|
digital_write(EPD_M2S2_RST_PIN, 0)
|
|
digital_write(EPD_M1S1_RST_PIN, 0)
|
|
digital_write(EPD_M2S2_DC_PIN, 1)
|
|
digital_write(EPD_M1S1_DC_PIN, 1)
|
|
|
|
spi.DEV_ModuleInit()
|
|
|
|
|
|
def module_exit():
|
|
digital_write(EPD_M2S2_RST_PIN, 0)
|
|
digital_write(EPD_M1S1_RST_PIN, 0)
|
|
digital_write(EPD_M2S2_DC_PIN, 0)
|
|
digital_write(EPD_M1S1_DC_PIN, 0)
|
|
digital_write(EPD_S1_CS_PIN, 1)
|
|
digital_write(EPD_S2_CS_PIN, 1)
|
|
digital_write(EPD_M1_CS_PIN, 1)
|
|
digital_write(EPD_M2_CS_PIN, 1)
|
|
|
|
|
|
def spi_readbyte(Reg):
|
|
GPIO.setup(EPD_MOSI_PIN, GPIO.IN)
|
|
j = 0
|
|
# time.sleep(0.01)
|
|
for i in range(0, 8):
|
|
GPIO.output(EPD_SCK_PIN, GPIO.LOW)
|
|
# time.sleep(0.01)
|
|
j = j << 1
|
|
if (GPIO.input(EPD_MOSI_PIN) == GPIO.HIGH):
|
|
j |= 0x01
|
|
else:
|
|
j &= 0xfe
|
|
# time.sleep(0.01)
|
|
GPIO.output(EPD_SCK_PIN, GPIO.HIGH)
|
|
# time.sleep(0.01)
|
|
GPIO.setup(EPD_MOSI_PIN, GPIO.OUT)
|
|
return j
|
|
|
|
|
|
def delay_ms(delaytime):
|
|
time.sleep(delaytime / 1000.0)
|