Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/sh
- # This is a shell archive (produced by GNU sharutils 4.15.2).
- # To extract the files from this archive, save it to some FILE, remove
- # everything before the '#!/bin/sh' line above, then type 'sh FILE'.
- #
- lock_dir=_sh14997
- # Made on 2021-07-25 20:00 CEST by <emb@WZabHP>.
- # Source directory was '/home/emb/ePaper/wz'.
- #
- # Existing files will *not* be overwritten, unless '-c' is specified.
- #
- # This shar contains:
- # length mode name
- # ------ ---------- ------------------------------------------
- # 6327 -rw-r--r-- epd1in54b_V2.py
- # 2361 -rw-r--r-- epdconfig.py
- # 831 -rw-r--r-- epd_test.py
- #
- MD5SUM=${MD5SUM-md5sum}
- f=`${MD5SUM} --version | egrep '^md5sum .*(core|text)utils'`
- test -n "${f}" && md5check=true || md5check=false
- ${md5check} || \
- echo 'Note: not verifying md5sums. Consider installing GNU coreutils.'
- if test "X$1" = "X-c"
- then keep_file=''
- else keep_file=true
- fi
- echo=echo
- save_IFS="${IFS}"
- IFS="${IFS}:"
- gettext_dir=
- locale_dir=
- set_echo=false
- for dir in $PATH
- do
- if test -f $dir/gettext \
- && ($dir/gettext --version >/dev/null 2>&1)
- then
- case `$dir/gettext --version 2>&1 | sed 1q` in
- *GNU*) gettext_dir=$dir
- set_echo=true
- break ;;
- esac
- fi
- done
- if ${set_echo}
- then
- set_echo=false
- for dir in $PATH
- do
- if test -f $dir/shar \
- && ($dir/shar --print-text-domain-dir >/dev/null 2>&1)
- then
- locale_dir=`$dir/shar --print-text-domain-dir`
- set_echo=true
- break
- fi
- done
- if ${set_echo}
- then
- TEXTDOMAINDIR=$locale_dir
- export TEXTDOMAINDIR
- TEXTDOMAIN=sharutils
- export TEXTDOMAIN
- echo="$gettext_dir/gettext -s"
- fi
- fi
- IFS="$save_IFS"
- if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null
- then if (echo -n test; echo 1,2,3) | grep n >/dev/null
- then shar_n= shar_c='
- '
- else shar_n=-n shar_c= ; fi
- else shar_n= shar_c='\c' ; fi
- f=shar-touch.$$
- st1=200112312359.59
- st2=123123592001.59
- st2tr=123123592001.5 # old SysV 14-char limit
- st3=1231235901
- if touch -am -t ${st1} ${f} >/dev/null 2>&1 && \
- test ! -f ${st1} && test -f ${f}; then
- shar_touch='touch -am -t $1$2$3$4$5$6.$7 "$8"'
- elif touch -am ${st2} ${f} >/dev/null 2>&1 && \
- test ! -f ${st2} && test ! -f ${st2tr} && test -f ${f}; then
- shar_touch='touch -am $3$4$5$6$1$2.$7 "$8"'
- elif touch -am ${st3} ${f} >/dev/null 2>&1 && \
- test ! -f ${st3} && test -f ${f}; then
- shar_touch='touch -am $3$4$5$6$2 "$8"'
- else
- shar_touch=:
- echo
- ${echo} 'WARNING: not restoring timestamps. Consider getting and
- installing GNU '\''touch'\'', distributed in GNU coreutils...'
- echo
- fi
- rm -f ${st1} ${st2} ${st2tr} ${st3} ${f}
- #
- if test ! -d ${lock_dir} ; then :
- else ${echo} "lock directory ${lock_dir} exists"
- exit 1
- fi
- if mkdir ${lock_dir}
- then ${echo} "x - created lock directory ${lock_dir}."
- else ${echo} "x - failed to create lock directory ${lock_dir}."
- exit 1
- fi
- # ============= epd1in54b_V2.py ==============
- if test -n "${keep_file}" && test -f 'epd1in54b_V2.py'
- then
- ${echo} "x - SKIPPING epd1in54b_V2.py (file already exists)"
- else
- ${echo} "x - extracting epd1in54b_V2.py (text)"
- sed 's/^X//' << 'SHAR_EOF' > 'epd1in54b_V2.py' &&
- # *****************************************************************************
- # * | File : epd1in54b.py
- # * | Author : Waveshare team
- # * | Function : Electronic paper driver
- # * | Info :
- # *----------------
- # * | This version: V4.0
- # * | Date : 2019-06-20
- # # | Info : python demo
- # -----------------------------------------------------------------------------
- # 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.
- #
- X
- #import logging
- import epdconfig
- epdconfig = epdconfig.F767()
- # Display resolution
- EPD_WIDTH = 200
- EPD_HEIGHT = 200
- X
- class EPD:
- X def __init__(self):
- X self.reset_pin = epdconfig.RST_PIN
- X self.dc_pin = epdconfig.DC_PIN
- X self.busy_pin = epdconfig.BUSY_PIN
- X self.cs_pin = epdconfig.CS_PIN
- X self.width = EPD_WIDTH
- X self.height = EPD_HEIGHT
- X
- X
- X # Hardware reset
- X def reset(self):
- X epdconfig.digital_write(self.reset_pin, 1)
- X epdconfig.delay_ms(200)
- X epdconfig.digital_write(self.reset_pin, 0) # module reset
- X epdconfig.delay_ms(5)
- X epdconfig.digital_write(self.reset_pin, 1)
- X epdconfig.delay_ms(200)
- X
- X def send_command(self, command):
- X epdconfig.digital_write(self.dc_pin, 0)
- X epdconfig.digital_write(self.cs_pin, 0)
- X epdconfig.spi_writebyte([command])
- X epdconfig.digital_write(self.cs_pin, 1)
- X
- X def send_data(self, data):
- X epdconfig.digital_write(self.dc_pin, 1)
- X epdconfig.digital_write(self.cs_pin, 0)
- X epdconfig.spi_writebyte([data])
- X epdconfig.digital_write(self.cs_pin, 1)
- X
- X def ReadBusy(self):
- X #logging.debug("e-Paper busy")
- X while(epdconfig.digital_read(self.busy_pin) == 1):
- X epdconfig.delay_ms(100)
- X #logging.debug("e-Paper busy release")
- X
- X def init(self):
- X if (epdconfig.module_init() != 0):
- X return -1
- X # EPD hardware init start
- X self.reset()
- X
- X self.ReadBusy()
- X self.send_command(0x12) #SWRESET
- X self.ReadBusy()
- X
- X self.send_command(0x01) #Driver output control
- X self.send_data(0xC7)
- X self.send_data(0x00)
- X self.send_data(0x01)
- X
- X self.send_command(0x11) #data entry mode
- X self.send_data(0x01)
- X
- X self.send_command(0x44) #set Ram-X address start/end position
- X self.send_data(0x00)
- X self.send_data(0x18) #0x18-->(24+1)*8=200
- X
- X self.send_command(0x45) #set Ram-Y address start/end position
- X self.send_data(0xC7) #0xC7-->(199+1)=200
- X self.send_data(0x00)
- X self.send_data(0x00)
- X self.send_data(0x00)
- X
- X self.send_command(0x3C) #BorderWavefrom
- X self.send_data(0x05)
- X
- X self.send_command(0x18) #Read built-in temperature sensor
- X self.send_data(0x80)
- X
- X self.send_command(0x4E) # set RAM x address count to 0
- X self.send_data(0x00)
- X self.send_command(0x4F) # set RAM y address count to 0X199
- X self.send_data(0xC7)
- X self.send_data(0x00)
- X self.ReadBusy()
- X return 0
- X
- X def getbuffer(self, image):
- X buf = [0xFF] * int(self.width * self.height / 8)
- X # Set buffer to value of Python Imaging Library image.
- X # Image must be in mode 1.
- X image_monocolor = image.convert('1')
- X imwidth, imheight = image_monocolor.size
- X if imwidth != self.width or imheight != self.height:
- X raise ValueError('Image must be same dimensions as display \
- X ({0}x{1}).' .format(self.width, self.height))
- X
- X pixels = image_monocolor.load()
- X for y in range(self.height):
- X for x in range(self.width):
- X # Set the bits for the column of pixels at the current position.
- X if pixels[x, y] == 0:
- X buf[int((x + y * self.width) / 8)] &= ~(0x80 >> (x % 8))
- X return buf
- X
- X def display(self, blackimage, redimage):
- X # send black data
- X if (blackimage != None):
- X self.send_command(0x24) # DATA_START_TRANSMISSION_1
- X for i in range(0, int(self.width * self.height / 8)):
- X self.send_data(blackimage[i])
- X
- X # send red data
- X if (redimage != None):
- X self.send_command(0x26) # DATA_START_TRANSMISSION_2
- X for i in range(0, int(self.width * self.height / 8)):
- X self.send_data(~redimage[i])
- X
- X self.send_command(0x22) # DISPLAY_REFRESH
- X self.send_data(0xF7)
- X self.send_command(0x20) # DISPLAY_REFRESH
- X self.ReadBusy()
- X
- X def Clear(self):
- X self.send_command(0x24) # DATA_START_TRANSMISSION_1
- X for i in range(0, int(self.width * self.height / 8)):
- X self.send_data(0xFF)
- X
- X self.send_command(0x26) # DATA_START_TRANSMISSION_2
- X for i in range(0, int(self.width * self.height / 8)):
- X self.send_data(0x00)
- X
- X self.send_command(0x22) # DISPLAY_REFRESH
- X self.send_data(0xF7)
- X self.send_command(0x20) # DISPLAY_REFRESH
- X self.ReadBusy()
- X
- X
- X def sleep(self):
- X self.send_command(0x10) #enter deep sleep
- X self.send_data(0x01)
- X
- X epdconfig.delay_ms(2000)
- X epdconfig.module_exit()
- X
- ### END OF FILE ###
- SHAR_EOF
- (set 20 21 07 25 19 50 18 'epd1in54b_V2.py'
- eval "${shar_touch}") && \
- chmod 0644 'epd1in54b_V2.py'
- if test $? -ne 0
- then ${echo} "restore of epd1in54b_V2.py failed"
- fi
- if ${md5check}
- then (
- ${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'epd1in54b_V2.py': 'MD5 check failed'
- ) << \SHAR_EOF
- 14c986a2a491db78ff7b1d88d5e6da82 epd1in54b_V2.py
- SHAR_EOF
- else
- test `LC_ALL=C wc -c < 'epd1in54b_V2.py'` -ne 6327 && \
- ${echo} "restoration warning: size of 'epd1in54b_V2.py' is not 6327"
- fi
- fi
- # ============= epdconfig.py ==============
- if test -n "${keep_file}" && test -f 'epdconfig.py'
- then
- ${echo} "x - SKIPPING epdconfig.py (file already exists)"
- else
- ${echo} "x - extracting epdconfig.py (text)"
- sed 's/^X//' << 'SHAR_EOF' > 'epdconfig.py' &&
- # /*****************************************************************************
- # * | File : epdconfig.py
- # * | Author : Waveshare team
- # * | Function : Hardware underlying interface
- # * | Info :
- # *----------------
- # * | This version: V1.0
- # * | Date : 2019-06-21
- # * | 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.
- #
- X
- import machine as m
- import pyb
- import time
- X
- class F767:
- X # Pin definition
- X RST_PIN = m.Pin(m.Pin.cpu.F8,m.Pin.OUT_PP)
- X DC_PIN = m.Pin(m.Pin.cpu.E3,m.Pin.OUT_PP)
- X CS_PIN = m.Pin(m.Pin.cpu.E6,m.Pin.OUT_PP)
- X BUSY_PIN = m.Pin(m.Pin.cpu.F7,m.Pin.IN)
- X
- X def __init__(self):
- X self.SPI=pyb.SPI(3,pyb.SPI.MASTER, baudrate=4000000, polarity=0, phase=0)
- X
- X def digital_write(self, pin, value):
- X pin(value)
- X
- X def digital_read(self, pin):
- X return pin.value()
- X
- X def delay_ms(self, delaytime):
- X time.sleep(delaytime / 1000.0)
- X
- X def spi_writebyte(self, data):
- X self.SPI.write(bytearray(data))
- X
- X def module_init(self):
- X self.RST_PIN(1)
- X self.CS_PIN(1)
- X self.DC_PIN(0)
- X self.SPI.init(pyb.SPI.MASTER, baudrate=4000000, polarity=0, phase=0)
- X
- X def module_exit(self):
- X self.SPI.deinit()
- SHAR_EOF
- (set 20 21 07 25 19 53 57 'epdconfig.py'
- eval "${shar_touch}") && \
- chmod 0644 'epdconfig.py'
- if test $? -ne 0
- then ${echo} "restore of epdconfig.py failed"
- fi
- if ${md5check}
- then (
- ${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'epdconfig.py': 'MD5 check failed'
- ) << \SHAR_EOF
- debb92ff18a3ba416773e7f23a6acf69 epdconfig.py
- SHAR_EOF
- else
- test `LC_ALL=C wc -c < 'epdconfig.py'` -ne 2361 && \
- ${echo} "restoration warning: size of 'epdconfig.py' is not 2361"
- fi
- fi
- # ============= epd_test.py ==============
- if test -n "${keep_file}" && test -f 'epd_test.py'
- then
- ${echo} "x - SKIPPING epd_test.py (file already exists)"
- else
- ${echo} "x - extracting epd_test.py (text)"
- sed 's/^X//' << 'SHAR_EOF' > 'epd_test.py' &&
- import epd1in54b_V2 as ep
- epd=ep.EPD()
- epd.init()
- epd.Clear()
- h = 200; w = 200 # e-paper heigth and width.
- X
- buf_black = bytearray(w * h // 8) # used by frame buffer (landscape)
- buf_red = bytearray(w * h // 8) # used by frame buffer (landscape)
- X
- import framebuf
- fb_black = framebuf.FrameBuffer(buf_black, w, h, framebuf.MONO_HLSB)
- fb_red = framebuf.FrameBuffer(buf_red, w, h, framebuf.MONO_HLSB)
- black_red = 0 # will be black on buf_black, red on buf_red
- white = 1
- X
- #clear red & black screens, write in black on top left and in red bootom right
- fb_black.fill(white)
- fb_red.fill(white)
- fb_black.text('Hello world!', 0, 0,black_red)
- fb_red.text('Hello world!', 110, 90,black_red)
- fb_black.fill_rect(5,20,170,20,black_red)
- fb_red.fill_rect(5,150,150,30,black_red)
- epd.display(buf_black, buf_red)
- epd.sleep()
- X
- X
- SHAR_EOF
- (set 20 21 07 25 19 48 23 'epd_test.py'
- eval "${shar_touch}") && \
- chmod 0644 'epd_test.py'
- if test $? -ne 0
- then ${echo} "restore of epd_test.py failed"
- fi
- if ${md5check}
- then (
- ${MD5SUM} -c >/dev/null 2>&1 || ${echo} 'epd_test.py': 'MD5 check failed'
- ) << \SHAR_EOF
- f9ffc0a461f428c44a297ae321cbce62 epd_test.py
- SHAR_EOF
- else
- test `LC_ALL=C wc -c < 'epd_test.py'` -ne 831 && \
- ${echo} "restoration warning: size of 'epd_test.py' is not 831"
- fi
- fi
- if rm -fr ${lock_dir}
- then ${echo} "x - removed lock directory ${lock_dir}."
- else ${echo} "x - failed to remove lock directory ${lock_dir}."
- exit 1
- fi
- exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement