From 30697ec832550fc45fbc53e786a036699fe60f56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Je=CC=81re=CC=81mie=20Ducastel?= Date: Wed, 22 Jun 2022 23:32:57 +0200 Subject: [PATCH] Badger 2040, tests Ferreol et Capucine --- badger2040/badge-image.bin | Bin 0 -> 1664 bytes badger2040/badge.txt | 6 + badger2040/capucine-badge.png | Bin 0 -> 15860 bytes badger2040/diane-badge-image.bin | Bin 0 -> 1664 bytes badger2040/diane-badge-image.png | Bin 0 -> 48273 bytes badger2040/ferreol-badge-2.png | Bin 0 -> 15813 bytes badger2040/ferreol-badge-image.bin | Bin 0 -> 1664 bytes badger2040/ferreol-badge.png | Bin 0 -> 49403 bytes badger2040/images/QR-code-buzz-1.bin | Bin 0 -> 4736 bytes badger2040/images/QR-code-buzz-2.bin | Bin 0 -> 4736 bytes badger2040/images/badgerpunk.bin | Bin 0 -> 4736 bytes badger2040/images/readme.txt | 8 + badger2040/launcher.json | 1 + badger2040/libs/image_converter/convert.py | 136 ++ badger2040/libs/image_converter/data_to_py.py | 154 ++ .../libs/image_converter/test-images/adam.png | Bin 0 -> 45400 bytes .../libs/image_converter/test-images/paul.png | Bin 0 -> 49990 bytes .../image_converter/test-images/shaun.png | Bin 0 -> 47431 bytes badger2040/os/badger2040/README.md | 92 ++ .../289-0-wind-in-the-willows-abridged.txt | 1341 +++++++++++++++++ .../os/badger2040/assets/badge_image.png | Bin 0 -> 3498 bytes .../os/badger2040/assets/badgerpunk.png | Bin 0 -> 36468 bytes badger2040/os/badger2040/assets/boot.py | 6 + .../os/badger2040/assets/launchericons.png | Bin 0 -> 9981 bytes badger2040/os/badger2040/badge.py | 267 ++++ badger2040/os/badger2040/battery.py | 163 ++ badger2040/os/badger2040/button_test.py | 67 + badger2040/os/badger2040/clock.py | 148 ++ badger2040/os/badger2040/conway.py | 211 +++ badger2040/os/badger2040/ebook.py | 276 ++++ badger2040/os/badger2040/fonts.py | 141 ++ badger2040/os/badger2040/help.py | 40 + badger2040/os/badger2040/image.py | 154 ++ badger2040/os/badger2040/info.py | 38 + badger2040/os/badger2040/launcher.py | 260 ++++ badger2040/os/badger2040/led.py | 12 + badger2040/os/badger2040/list.py | 311 ++++ .../os/badger2040/micropython-builtins.cmake | 54 + badger2040/os/badger2040/pin_interrupt.py | 65 + badger2040/os/badger2040/qrgen.py | 70 + badger2040/poetry.lock | 58 + badger2040/pyproject.toml | 15 + 42 files changed, 4094 insertions(+) create mode 100644 badger2040/badge-image.bin create mode 100644 badger2040/badge.txt create mode 100644 badger2040/capucine-badge.png create mode 100644 badger2040/diane-badge-image.bin create mode 100644 badger2040/diane-badge-image.png create mode 100644 badger2040/ferreol-badge-2.png create mode 100644 badger2040/ferreol-badge-image.bin create mode 100644 badger2040/ferreol-badge.png create mode 100644 badger2040/images/QR-code-buzz-1.bin create mode 100644 badger2040/images/QR-code-buzz-2.bin create mode 100644 badger2040/images/badgerpunk.bin create mode 100644 badger2040/images/readme.txt create mode 100644 badger2040/launcher.json create mode 100755 badger2040/libs/image_converter/convert.py create mode 100644 badger2040/libs/image_converter/data_to_py.py create mode 100644 badger2040/libs/image_converter/test-images/adam.png create mode 100644 badger2040/libs/image_converter/test-images/paul.png create mode 100644 badger2040/libs/image_converter/test-images/shaun.png create mode 100644 badger2040/os/badger2040/README.md create mode 100644 badger2040/os/badger2040/assets/289-0-wind-in-the-willows-abridged.txt create mode 100644 badger2040/os/badger2040/assets/badge_image.png create mode 100644 badger2040/os/badger2040/assets/badgerpunk.png create mode 100644 badger2040/os/badger2040/assets/boot.py create mode 100644 badger2040/os/badger2040/assets/launchericons.png create mode 100644 badger2040/os/badger2040/badge.py create mode 100644 badger2040/os/badger2040/battery.py create mode 100644 badger2040/os/badger2040/button_test.py create mode 100644 badger2040/os/badger2040/clock.py create mode 100644 badger2040/os/badger2040/conway.py create mode 100644 badger2040/os/badger2040/ebook.py create mode 100644 badger2040/os/badger2040/fonts.py create mode 100644 badger2040/os/badger2040/help.py create mode 100644 badger2040/os/badger2040/image.py create mode 100644 badger2040/os/badger2040/info.py create mode 100644 badger2040/os/badger2040/launcher.py create mode 100644 badger2040/os/badger2040/led.py create mode 100644 badger2040/os/badger2040/list.py create mode 100644 badger2040/os/badger2040/micropython-builtins.cmake create mode 100644 badger2040/os/badger2040/pin_interrupt.py create mode 100644 badger2040/os/badger2040/qrgen.py create mode 100644 badger2040/poetry.lock create mode 100644 badger2040/pyproject.toml diff --git a/badger2040/badge-image.bin b/badger2040/badge-image.bin new file mode 100644 index 0000000000000000000000000000000000000000..a0e7bdb08c162dd585d42ad97229998ee9b84d42 GIT binary patch literal 1664 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 literal 0 HcmV?d00001 diff --git a/badger2040/diane-badge-image.png b/badger2040/diane-badge-image.png new file mode 100644 index 0000000000000000000000000000000000000000..be4f515f55868e5ffa139f2d29162321b862f7b3 GIT binary patch literal 48273 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 IM6N<$f*@lRJOBUy literal 0 HcmV?d00001 diff --git a/badger2040/ferreol-badge-2.png b/badger2040/ferreol-badge-2.png new file mode 100644 index 0000000000000000000000000000000000000000..1e48727217f0dedd4d48abdf87be10d3e512affe GIT binary patch literal 15813 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 literal 0 HcmV?d00001 diff --git a/badger2040/images/QR-code-buzz-1.bin b/badger2040/images/QR-code-buzz-1.bin new file mode 100644 index 0000000000000000000000000000000000000000..6d3778993995cb1250892da6fff017c0786d1d89 GIT binary patch literal 4736 zcmd6qJ#O1T5QT>k1Qsq>g(-Og!#B`g!*GhI6d(k?fM8nCc?7tTU7AKNkSZ~(Lb`xq zRrUg;IeD{`D(#;E!pK(A>eHLY-QmnGQN+mqtd*48{&r@QHqaj zg;Wew#6TZZ$~~UobViiys7NcK!fIS*gOG}WM5zgdQ^VzWmJjdhFPuJ1Ck{_3?`8!a zYypTHJEXD*2qL?tHzng~6Y@kfqS6ByPa()WT?i5-?43WHQObur<&dYsEOv0kWk=kQ z@zk$UyK#q;%!HjP<82_vLy#z8gZogrT`gsaN`6hBm#cdS9}iOt0CkD(t12O=ccmAv zr|wbGR;or|d>(X@jL%UCr|o)jIzD&U(uq9S1B$R#^4{1+q6cA!pd=d{P>Kjg@AKUi zAC#^tnGYh-}EW39iFr-F}8QXdW6y<-;PES15peVrS$cEj?C^nsY{2a0>>2T2-&sd zs3XS}%ZdjeQEEbviV4?wx*27Uxju7xlIl%ZY;=2tM7NG2t1uscRBuXn!*M#?hpQ*K z)e{apI34N{dIwh2aaJK3#6VF>vCua?I)R;0)@~feF>O4{E-(0hfb!qT&uMw1%62_1 zFCCr=)Dqqzy$5(1_`0wfR~o;Dph%^Na7O9v{jUD*@nnn^0I)3yUt4{5lb;8f8<2!+ zc{t~%%4*8kA#RZ+sKe#f3Mq)-n&gLiSK?C6UoY9ewRp4P8c zW`$i^5%F55~W!Pl5Gz{%G`kTSSUCT#i*@lXNiWsOrC7aKqxqs-A Bt;_%b literal 0 HcmV?d00001 diff --git a/badger2040/images/QR-code-buzz-2.bin b/badger2040/images/QR-code-buzz-2.bin new file mode 100644 index 0000000000000000000000000000000000000000..4fabf69a3233306803c8ea4fea0302a557220b27 GIT binary patch literal 4736 zcmchbv2N5r5QfLG&`MCaprCZiQ=A(bphG$e8Xkk@|GsNn^uuc1MrBNycz5K1I) z-oQeF7`S-&XYHKD-OhRsPF$0V{pFwEvoqt}5Jh|}GuK4CG;M~jt@lrG!$DORfNTu3 zRtklSQo5c_r!fBHpTnA=M5w%?Nzm)Yp9kFUp;U)|_**QgWWuaL6-bU@#_7cGQib zZSPN)XA8#+2mUp+c)y4_?>lSLPq(LCO#P8K21s2*X@XBWenepnmfZ zSe6}>BwR>IcJ?VR7H^S^Z%U1KTW#b}Hfvg*x=p)m2^{3l_-;y}a84RegjAvD_{Ts literal 0 HcmV?d00001 diff --git a/badger2040/images/badgerpunk.bin b/badger2040/images/badgerpunk.bin new file mode 100644 index 0000000000000000000000000000000000000000..34953f6d199ab095b6303c41cf26693af2c532f4 GIT binary patch literal 4736 zcmai&Z)_CD6~Je1&)LICSqM-PHT7AdRa!@_zf_79*{n%Q9YPfc2Z96*cB`sNlMq{J zDXwjp1*d`_wM3O$KD1JdR8^3QIFUfEV!>{cHl*|et`f&;iP;S_!ii&Ullpwi?Vr~- zv-fY;ckV;p+j;Zb_ujmDJ2ML*QBk7J>aDa+is<4E$?pb$?8dl0(pD^r&|G&!8E>c>VIHAi#5*e6K&WaFl3sRr!TP=3FiPa* zhDV+I7IT?^(4f+M?4DZ9W)NViSgfP6Nk8ibH|N@9x!I#Z1~bsRKoq0$+2}n59shwt zBrDnxX}M_Vy#FdrUql^kfQi&NW^1_|AQI#POn86v;YbT1FinJ(s{;-JW0OP;w8+yH z4VnYU`2aRip?1=RApno00rOr%xHE7ePnyQTs=;t~DA^}qX8Y~6Qbk>u0iOx-qgtt= za{>4{^azV*Q?*h>vpF{h!3{os+FC27`K>p*ujVd~l0S8kT9B0e;f|dQUP|EXoNB0H zN%~|p-Eu7;I?UN?YppGkt!-bm_Jd|vp-m|O#rM|p?mB*5D+ zRuj^Yp&kJkP0?Q7s3Nk4N-0o4OC(8}H>!vj5H1-8Jt%)58C3{W2}lBmGEW*Ct^uv& z&*GZGf?rA6ni^1;KR5!TNt&W@h~mW05)#e?sIzqo!?Nrw*a5ZTm(u5|H=cXamQ!(GV@@bmzYVs9sP8p)Pb z0_=VKsfS-Wb#^R|11UZk{z}&2VStaZq5bCOME&Nbzrm-3gh?xrlA#PUoO@I}t z-Hs;6Yh+`oU))GqAO4OF0A{B4HE&sQMdYml;+-xVQizFyUm^7mAS{89F|oB?pX`>R<>uRZnk;Q@172tod0H3+L`--{WRVIh^- zT@4!g_G9|=Ie(BdxKBZEHON`x?fYZi5vx3PKCzpe;~oy1yFjV10Hh-+zyaZDi> zM|Fs@H1JjecD;5>ATH#T05^sumRcmR$J$%R1f|1U=#N!_eEU($-!CBa$84f#ajIWF zbSvGy>ja0~%dmj{WCNFn_DZntHu9~ztpnW!OMr_9KaHg$(c{{a`hCx0IJyjg#S94n z7Ky%(B$Ib-3it~J!34hY=~Dz((&#JGM|9HC15fvL+nHo3_&h!2vcBABQMPb?vTjlSARfd?7_67%0#|86b zsMhLP1uMOBcn=&Q-bP@ifU+hSva{}4%m6yp7p zqyVc5fK?<)>D+F$nR;&s!L);~3-~&&9cI~*()^;qJl_{k06K=Ng2zLwsN$6;Fn`m9 zz=Irz6u6avjGxg;rW)=AjRklVF9<>u-ks*H5L9go;hQwf?T# z7mhVG2uk9`5xC>Vn~1L*q*Yb@Oi}%8)4a!{l(KBcJ0SM zoC-b1ouq-7krZ63|Fw^qD+@v@99F39RQJm%kYAYSyHXNSM^o)a5 z=_mUYw};_Cg*4o)4>5!$@DFDfXU9|V_oyum_LYv3_pBQX7gYfP15qUYSHFMsM?vwc zv8A<5jJ`0x#cBw)T{qHD{AvUzoHYDM5;7K+LvZq;qhA2ypoj=h;NJ*)!z+F(g*S(P zdF*zuRgF_J*burXWW4yqwj)!ofu&d+QZCv>b@*F|4ce!(t$ywh|P z$q$Y+=7XsrG-}@NGi5S=RI)!2C%Wyq>w(xTDZq5LV zVL7M)U-n5Gyp1gsQ(W;$n_LRM g_^n461)FDT5T;bF0bN{q)Wz{R_@5BChhXIY1A__oQ2+n{ literal 0 HcmV?d00001 diff --git a/badger2040/images/readme.txt b/badger2040/images/readme.txt new file mode 100644 index 0000000..75907dc --- /dev/null +++ b/badger2040/images/readme.txt @@ -0,0 +1,8 @@ + +Images must be 296x128 pixel with 1bit colour depth. + +You can use examples/badger2040/image_converter/convert.py to convert them: + +python3 convert.py --binary --resize image_file_1.png image_file_2.png image_file_3.png + +Create a new "images" directory via Thonny, and upload the .bin files there. diff --git a/badger2040/launcher.json b/badger2040/launcher.json new file mode 100644 index 0000000..89da7ec --- /dev/null +++ b/badger2040/launcher.json @@ -0,0 +1 @@ +{"font_size": 1, "running": "badge", "page": 1, "inverted": false} \ No newline at end of file diff --git a/badger2040/libs/image_converter/convert.py b/badger2040/libs/image_converter/convert.py new file mode 100755 index 0000000..d8613cc --- /dev/null +++ b/badger2040/libs/image_converter/convert.py @@ -0,0 +1,136 @@ +#!/usr/bin/env python3 +""" +Converts images into a format suitable for display on Badger 2040. + +Optionally resizes images to 296x128 to fit the display. + +Crunches images down to dithered, 1bit colour depth. + +Outputs either in raw binary format or as a .py file for embedding into MicroPython. + +Output to py functionality is borrwed from data_to_py.py, Copyright (c) 2016 Peter Hinch +""" + +import io +import argparse +from PIL import Image, ImageEnhance +from pathlib import Path + + +PY_HEADER = """# Code generated by convert.py. +""" + +PY_FOOTER = """_mvdata = memoryview(_data) + +def data(): + return _mvdata + +""" + + +parser = argparse.ArgumentParser(description='Converts images into the format used by Badger2040.') +parser.add_argument('file', nargs="+", help='input files to convert') +parser.add_argument('--out_dir', type=Path, default=None, help='output directory') +parser.add_argument('--binary', action="store_true", help='output binary file for MicroPython') +parser.add_argument('--py', action="store_true", help='output .py file for MicroPython embedding') +parser.add_argument('--resize', action="store_true", help='force images to 296x128 pixels') + +options = parser.parse_args() + + +class ByteWriter(object): + bytes_per_line = 16 + + def __init__(self, stream, varname): + self.stream = stream + self.stream.write('{} =\\\n'.format(varname)) + self.bytecount = 0 # For line breaks + + def _eol(self): + self.stream.write("'\\\n") + + def _eot(self): + self.stream.write("'\n") + + def _bol(self): + self.stream.write("b'") + + # Output a single byte + def obyte(self, data): + if not self.bytecount: + self._bol() + self.stream.write('\\x{:02x}'.format(data)) + self.bytecount += 1 + self.bytecount %= self.bytes_per_line + if not self.bytecount: + self._eol() + + # Output from a sequence + def odata(self, bytelist): + for byt in bytelist: + self.obyte(byt) + + # ensure a correct final line + def eot(self): # User force EOL if one hasn't occurred + if self.bytecount: + self._eot() + self.stream.write('\n') + + +def convert_image(img): + if options.resize: + img = img.resize((296, 128)) # resize + try: + enhancer = ImageEnhance.Contrast(img) + img = enhancer.enhance(2.0) + except ValueError: + pass + img = img.convert("1") # convert to black and white + return img + + +def write_stream(header, footer, ip_stream, op_stream): + op_stream.write(header) + op_stream.write('\n') + data = ip_stream.read() + bw_data = ByteWriter(op_stream, '_data') + bw_data.odata(data) + bw_data.eot() + op_stream.write(footer) + + +# create map of images based on input filenames +for input_filename in options.file: + with Image.open(input_filename) as img: + img = convert_image(img) + + image_name = Path(input_filename).stem + + w, h = img.size + + output_data = [~b & 0xff for b in list(img.tobytes())] + + if options.binary: + if options.out_dir is not None: + output_filename = (options.out_dir / image_name).with_suffix(".bin") + else: + output_filename = Path(input_filename).with_suffix(".bin") + print(f"Saving to {output_filename}, {w}x{h}") + with open(output_filename, "wb") as out: + out.write(bytearray(output_data)) + elif options.py: + if options.out_dir is not None: + output_filename = (options.out_dir / image_name).with_suffix(".py") + else: + output_filename = Path(input_filename).with_suffix(".py") + print(f"Saving to {output_filename}, {w}x{h}") + with open(output_filename, "w") as out: + write_stream(PY_HEADER, PY_FOOTER, io.BytesIO(bytes(output_data)), out) + else: + image_code = '''\ +static const uint8_t {image_name}[{count}] = {{ + {byte_data} +}}; + '''.format(image_name=image_name, count=len(output_data), byte_data=", ".join(str(b) for b in output_data)) + + print(image_code) diff --git a/badger2040/libs/image_converter/data_to_py.py b/badger2040/libs/image_converter/data_to_py.py new file mode 100644 index 0000000..e5515f1 --- /dev/null +++ b/badger2040/libs/image_converter/data_to_py.py @@ -0,0 +1,154 @@ +#! /usr/bin/python3 +# -*- coding: utf-8 -*- + +# The MIT License (MIT) +# +# Copyright (c) 2016 Peter Hinch +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation 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 +# furnished 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 FOR 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 argparse +import sys +import os + +# UTILITIES FOR WRITING PYTHON SOURCECODE TO A FILE + +# ByteWriter takes as input a variable name and data values and writes +# Python source to an output stream of the form +# my_variable = b'\x01\x02\x03\x04\x05\x06\x07\x08'\ + +# Lines are broken with \ for readability. + + +class ByteWriter(object): + bytes_per_line = 16 + + def __init__(self, stream, varname): + self.stream = stream + self.stream.write('{} =\\\n'.format(varname)) + self.bytecount = 0 # For line breaks + + def _eol(self): + self.stream.write("'\\\n") + + def _eot(self): + self.stream.write("'\n") + + def _bol(self): + self.stream.write("b'") + + # Output a single byte + def obyte(self, data): + if not self.bytecount: + self._bol() + self.stream.write('\\x{:02x}'.format(data)) + self.bytecount += 1 + self.bytecount %= self.bytes_per_line + if not self.bytecount: + self._eol() + + # Output from a sequence + def odata(self, bytelist): + for byt in bytelist: + self.obyte(byt) + + # ensure a correct final line + def eot(self): # User force EOL if one hasn't occurred + if self.bytecount: + self._eot() + self.stream.write('\n') + + +# PYTHON FILE WRITING + +STR01 = """# Code generated by data_to_py.py. +version = '0.1' +""" + +STR02 = """_mvdata = memoryview(_data) + +def data(): + return _mvdata + +""" + + +def write_func(stream, name, arg): + stream.write('def {}():\n return {}\n\n'.format(name, arg)) + + +def write_data(op_path, ip_path): + try: + with open(ip_path, 'rb') as ip_stream: + try: + with open(op_path, 'w') as op_stream: + write_stream(ip_stream, op_stream) + except OSError: + print("Can't open", op_path, 'for writing') + return False + except OSError: + print("Can't open", ip_path) + return False + return True + + +def write_stream(ip_stream, op_stream): + op_stream.write(STR01) + op_stream.write('\n') + data = ip_stream.read() + bw_data = ByteWriter(op_stream, '_data') + bw_data.odata(data) + bw_data.eot() + op_stream.write(STR02) + + +# PARSE COMMAND LINE ARGUMENTS + +def quit(msg): + print(msg) + sys.exit(1) + + +DESC = """data_to_py.py +Utility to convert an arbitrary binary file to Python source. +Sample usage: +data_to_py.py image.jpg image.py + +""" + +if __name__ == "__main__": + parser = argparse.ArgumentParser(__file__, description=DESC, + formatter_class=argparse.RawDescriptionHelpFormatter) + parser.add_argument('infile', type=str, help='Input file path') + parser.add_argument('outfile', type=str, + help='Path and name of output file. Must have .py extension.') + + args = parser.parse_args() + + if not os.path.isfile(args.infile): + quit("Data filename does not exist") + + if not os.path.splitext(args.outfile)[1].upper() == '.PY': + quit('Output filename must have a .py extension.') + + print('Writing Python file.') + if not write_data(args.outfile, args.infile): + sys.exit(1) + + print(args.outfile, 'written successfully.') diff --git a/badger2040/libs/image_converter/test-images/adam.png b/badger2040/libs/image_converter/test-images/adam.png new file mode 100644 index 0000000000000000000000000000000000000000..0ab424480bae61c7466a3fca3e79bc496448283b GIT binary patch literal 45400 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 BsYw6; literal 0 HcmV?d00001 diff --git a/badger2040/libs/image_converter/test-images/paul.png b/badger2040/libs/image_converter/test-images/paul.png new file mode 100644 index 0000000000000000000000000000000000000000..4015b41924b4aa691b907f38ab4a2bc379f9a430 GIT binary patch literal 49990 zcmZs?Wl$VU*er?$4HBFn3j}wE#ogWAo#5`8;BJe%ySux)1ec(J-~_+Rd%knesay94 z#ViF?%sevP{q%$@%1eAk#7BgHfcPvWDXI(s0gVFz0jUWO1^!9(LdrAv8-jzRmNNtd z1KGzHq(_l}8w3OZLP}If)g$vymyUz3h8wxZO(L!yxQmX z@%x|0;SjI8vH9l+mlb+Wv1Fs!s2NWVFps-vgmatd{jr+p3%izi7D4Qr+1WJxDvE96 z3~jLJUds8BXge4HNYlO7aaq}eHH#YFhi`E(7$6);hZ@wAt%E7&nSF}u1AXtB-#S`a zjxbPxf&eslnAq^0?U$+TS)K%Io~G7X!ICQv-JWch?+xP<6UP8dMD7??0Re>)R#sLQ zCU*7{uIYnC%q(%rd>1B8P6;@_o^8iWL4aUMxM+W;2@9xETv1y){nV04vgG;UZ$a=; zw)d7}CNvz%ag3VktPrTZyRvezGYbe`>UQfZBTRk>OFK>GmdHO+QiJ+$N~74K*mLK} z(8XoZF*7g_68QRbRx{;hZEby=o0k`8!NT4c8Y%|V(_NHds=}|_ZVQ%2CH9L!p;?lg z7{3*U2`1s6RZ&&a%1&=d_+kUkHgMxp;He)E>nbtnLt3q2s?UeKY60gt_HvrrsM->n zos?X3@pT75!6BI6z&ihhpD$3;%O%accLe93k7oTMElGD}VPR4YY8!U{tGM;&SJhZi zkXOH}KlVS8_m>++f{`}AS6~(cJwrMU-Sx@#+xa%|zf(2sWmF*rpDp-99JDD8`Ts1D zf@EZ54%emAKG8Vd2<;3($=1+Sa0dMwfF-#b9;|=$f@QUvn3$kY5dDK3Ml?$`x%fjnp<#xCrb=ypUJ{^t45O5YW_Gu$uuNlbL{WUOR!e}a*< zJg(MPS$2kz)DuJPy3E$^ym=*IVf2@BxK^%mP5WHC>Do5=9`O7Z4hfX%jKAlNdkOHV zn$4Q1G#!H*<@OAgU?UG6A&Vnh5vsLIe%Fn_AJ(|GjZ6}|l)&OqK?IZ~65 z*sl?sU-ZsooLhIWRb*H>EAS@U+O(VlZUu`ikH@5dt*&P&`&=d_CU~#tABO?>94?0N zzw+)N2mtj3-WBaKn174}TbMK^Y$yR#YGayOLdw9}@N~paN((7}RvgSF!4Gi?@nj+< zjn*qj_51#uhvsf|y6V1zi~uVWB^KL-ldE4SFgn10DqtjHyyoHY@jOhdtR*SwbX^Rp z>2Uq4JEt})lheB&4JkX{6h;P{LwY8_$Zyv%HskF9r540 z8e46DR60P4<)Oh2PO8LxLKU2S4WavXH&3=K#u}_b3!~O=KO$UMpnLibe`u6Pm3DAc zB*hrmL3jp18@Xa-IYD3|!sYD5k|KSx-L{aaIpS!y(Q33T@?SF4(tN}If0N<=&Wl_n zs-HNvD95<@dc6gKIr-4K0z4IXU7!=Z)PHC#s87YhMJB;Q(DuSDwUz+a$PiDmOLmvY z3=t6*Z48tJ$P*b7oz6m03@P$*Xe;1YAhNQ9+EpIg_JOmMrq-lkDNIuSg{GJ%O|0M1 zv=tG}LLAp!2&nMKOa>>f-!9iUqt1@pt7lHU{c~!k2gl^HY3dMlLxdqj% zV$4lUn)$IREDcWSF7&g;N&CX=8kqAyz{ENfmDt{&IEq*pA20IhlSlp$wXgtKX$p|b zeH#%`Ve|~OpQn$HZchEEmYP}eK9|S~{Oi-oyDZ!-lfe6nbA_AEM+<^_eI>v7Z}I=F z7bXuaMYf-eA{^nkMPf`|ve4+L?0AuL)Po+_Sb@n_2T)dP9)*TwNYcJsZ~Y(33C>G zS2|B~&=A^-PM;GQ(+S{KXUF<+k#u%moUi6qD6_SEsayz@^B?XxRpv6kV8LpxT)E;n zbL|QKN#8bpH*Abv`O}(wG?UIbi!JVvTW)pe@my8V>-`Nr%kOE;!iDMn(rCPps$4EY zkZ?XTHa1$o>kBIr8=K43o>-^X{hu`g{EzAoQtFi#{sIs4wQqKIR>!`Jyn_ndpgq2z ziLM4EwC1HZ9xt;=I6#9sld$+(a{V7>rl&wP(4*Kb_06wBgg>dwBDEr#=$shb@XmOZ z77?ekArV6Ai&x+O4c{fLDsWXUWq=#{U2-|4gNl4)RRy-Xj~ieRG1_!EU()Mq#Fiv< ziLRAtq)2Gkh7SfPj|>Z=e=|40%#Ei(V01{nr{8F(5MQQyRNF)sjkbkt#M4X-ZZ;aL zM+Rm5Z_Dp2md1&5yke4(eS`)=F4F;6JR$ao5(fG@O1l&qtSZ_cP7T%Sd)v?hJ z$UFvMSS0o9?wJrxSsdvuyeG=fXHw~c${588DX(vtv3}We4YY(HFm_MUPb7(Q0G-Q{ zZa;rwfrq5;Fk2T}9p92?4Y2vU9SF=aThE6>CEC&ZZ|{|` z|EDKHmCa$mXX_3c*98U!2BEx<#*;NQF%(>YKjG3Af^(!#UEJH-`+f`d=+O0Cr}wYZ z5`>U=vSKX;WL}DD4IP6eDe5FZ>w$8kUfHgX^2T4jS8uSTzJ7Q(=7a)GCj~Z|oDFvS zt-`>^C}uQO$x>Ziy@_s%Q*mkQ^#8IvRSZYbmzXjpt?8fn#zpXoe3>({Wa66~aP zr6AF-Q@m7jq6yq z?sIyPaIYmcbR=%CXExMtF(4jQA$^VCnKzTSyGDMcE`|4hw|lbfaMp%kU8ha$x|79Nuhr#rufXNH04b?b3E$0t;zD{pFA>O_A0Q)p{P3Q^_o zK3-l&WwSF(JEkVWrC$0;YgcFqvJ_8F!Dg2>VY=$2cEN69S{@-CwXL1xEs4mc5p-EJBaSq*w6aZkE*$Oc{ODmi z=bBP$DRvkKWr7brk7m+B<;CI)Y>K_*)#YrSb@hgzC4iDi?f2$178gL4L=8$DY^<)i zHJU1!Zpg`UT3o9BaweHlwBhaPsjHJqv~jv%__TxF-R&(Ms^@Ygbm^r{Syf0jadTzg zVjEsNTW~QD`H?(8JYqsIOppu~Cn}tDcvkTqQR_3s=G(YO2wiFhfU~vG+%_<=@8}TWhoFlc)&cVHBuBrZK?HOEzR+x4WC4HIJ1i>LBXt< zzi;|27KWcnkGB+s1%cfft|S*feB|*UQNiUWh?-U{1QXe4)=;ZW&1RU~%BGZ9OPm&W zl+-yLE26%zy%zKPpy+CMm$$0ksyy(!o!v6DLc8^EL0R40`_8LRw;U#QX|tYCfrhkXKk1VO^I?K0(LYWKDlmMbS+R_%4~mi}H7O}w zYT1!LS99*55XE+K@|gJITWzDs&$qT%aK$5_QETZgQn$lPD}_N(52qNjCyZBV%EUnv z6%q93Ro;-tRBF;lfULza0|8prBaYqO_gIAB7^xPPlt;+3hE@jUA+l=VM`#@z(4y0B8AA*-g08-@vk`@1m_ZA5s+DkF4`DUH{Lct;(kf}eK~Wv1~HvB!C~dI zDaD_!ZZm$)B;ZX}1&J>Z*nY*IZ|>8mDMo}Z)^s?#=<+`7^}h@zz6?1=i31!A4#H$D zJGnhJ&(J>nm`>D75(H2o9(0B#XeJ3>4(8R=%mkC@xMahTp8Q8QIO;~p_<0omA+Zm?;FQog0-q$_bZ8|r+Sgo{6-wUz4CK{vrN_ANWLo(hYX zgFF6a9I9$vJ7N7vvg46rV^450HD1D&l-b@jD~+y}RcL)F?UAfoPx3j(viEPe+J4@NJWGLXA2ir&(7R;ASE5MI2#?uZ*QZl zG5+Xt7B-t=1Yy84pia~0_}=3Y@_JnMHs+GR zvWz(LzrP@{M!t-qSB*AlDCI~Bm$a0;L}4w!nbn+!fNz@JT_e;_rt_X#qCMdB+o_xV z_3PKl%Fj|yySR@thUvTh#DJ!)qoZVfx+VwioQAKX6WG$KoUlQZNayG00&iEb#3#z# zLb|OEeYQJ))*5ualaY@jfiJ2s2QJxz&8z(pVk_28d6+(*_<{*1<25g`D@M^TML?wr zP)*pL(4`j^k_37zGzScOz)3ob!Nx76mSZGD;5!tf2#YYSoffsCD+s78+8C(ZNML2C z0p)j8QKLNM#iLnW)~UN7SSnQEQZAcb#!=Z){VkxevGkEbS5aHt`d3tdVn#-mTDchT zEwvbGDJs;a-%D54SAMv75@o>qh}O)EmAmM9+hr%<0wUIthAAADB@(gh7YeJ&)HjNy zVzE8>1}L$XJ;{@XIl>}w7}Grsi6))>91lj(MX7%N z__53#$Zhg!lLXC61>ZFPw&im(C9HDrI24M6qnO}!GG7$*sbr;LnaD>U@oDtY@81CN z{9NX>2jr`0V-gLX47yIT+Al`($uiA@SEzNg#XWRIc~~OKK6Xpd^PvUy05n(CX?n-h z_(*H(twv5r4ap`G&}q7AzqzG+yEU|oX1Y^49aYfC1Um*1JiJ|)dg9@G# zNT;|A;&1R5?))vLxUn*+21>)@9e?2@a#hZX^2P-uS1eI|IZYKmRB`1Wl$@X7Tm>F% z)D$!a71c~$rwP5RTFs32%-4=!qIAT>iprS@TI?2cHRW|txo6Xy(%P6k7BU6dNsNXv zPC{$Bmd%zWU=`7%6_fzyvq98ypG|#qD~w}U_U}(9%c4>g1YR@cM}}QTUQY42dND2L zr=a}bpSMdEL==eggP$KH2u2?7YW&PxEAvT*PW^7@BwVC3{{rV$RvxFJ#S|X7BhQ`8J^ROwbok#-#iC< zdwXeXI+c&7GhDJcVT}C(N0x$PEw~7#voW}tm}a-OF8Xr9Xf>*BMW+Es|6Q=~y6rAw z!S)iXqF)$vTX%kAOCwyN)>z;qZ(pY2fiBInk-+5*i3%h>+_v)k$*H8Ef;6?kheOC) z%giKz4+dJ*0yq6ym1YAn~_iT#LS}z4+Ip=#R~xj|{A$m<|~*WKN0G z3>r0p{D>N)2~g1VA%0jy zLIV=qOS|hdV%jIdZQZNbTv|Nns7|OD#rlg>8PD=%Dd@hocFX5UywA2YqAeDvS^AHX z5)Brri{(KD38UC0hC14eH2W4*++DaR%U;okhd8PYzi2F6OhZt_FJjX#hOATo?h~5Q zUiW@)H#rL@QyIXhm0FvY2+2)wkbk1gLyFCzk#7=RZt>VR+;TALwI^i(MmsFk>tv$3 zuZF+6>`XBfI!K8T$@;0NUh% zLkV-Lj@#s#(eOE4Ca>r9>%%sq3mosNa8WDLfvCzgy9YCx!mYGbxI71=nIm8?wl|eT zWwqv*Bu?8QA@CFxfo?ZQxfmrpPh{LVplrZwN#s(O|1kUu4bRtlWsibwdNf#4>by@u zQ6{FIHl$H)fJ@`gpMgByCDIGkhW*vqu4xqc)Dx-C4;NaTq=;YI<`sw26*CE8>f-$5 zvsrg~Af$6B2^ld^)e`RJ6YMy!7yO%uc^9RYn|ATp1-q12dfw7e`lU~-jfE*~BuI6s zdO7%)BW9Da`{2qu9No#XmVGoVn*1vhx+TPK?{@N}NRfsaHH9?CXIDvHVWXLyyzq=j z|6)5Q&1qut0uTw~!u`+F*bCytc$Aepuvq)B%;#SiG|O)*s9+X1Bj z_3dWYny?g|G{A#&hfk$J%Y}#psVsGyF}Aq4*tq28Qtc>uUO7b+6y5vPuY46_CwJpK z+U>oZ=MdbP59@e2kUH0d|5u1FZADD{Mr^A!JyYykU)*fZYzdq{eeP=zJ;^V=iQv09 zCeLc2arFi_Xo1H>fvcV6o_|A(;J+@y<%8#;FZH4t6&2D5hwwveL?ZmA1#9hDg~((6 zU3#Mt-THOBO+ALD3cwPA9kvQ}!zECHR~?Wa=u=4#^CRX*oH>owQCa`g?UW-ATO5YJ zOOSle$Tkc;J-t_qYN}!g7k62k7!4kD9>++({31X#y}Y7glIO`o*pN`f^my7!4s&{P zT3bafz$`k&z&M|2_!a{ORLbv2>HTZt@Or>|99Wz(5!Lf@iciQ^LE639;XX$VUo$j> zHDq`y&8Zj|^7`CFrxK9*2kUq1_1#Ll7L|5Y{$Ym^!;Mnx|qZz6zq6``^ta z=r-RBl*6S4?IC<~kKs~l`y+Y2xHaz0X#r}nQYng1|98~40G^b5s2u+{SYQ`>CEft| z2Btfozvd{LyZKQD$$aozZUyRu&{X~Rfp3lBThZ1A$W#rC0ymueDO+hw&07Ljwb zvlDcne%Sm@&#eePv{1cVP8~s;D)5cVJIj9Qhm;)A0PytmqPUaka)~!lBKSpu`U~(g z1`Uum3dQ0BDZMQoRbDSGVT|TO`ba*Q8Dw>%ojg2ELLk~B31exUKIN-L9_I8jnBXT< zQVp~@kXO}TnnngNU0C1jn!6`K>3_gAo%4ExBFI$trdfnqG2w9PkVEk0UM zvO38=eNughx7y)egU6+X?09VEHk_$hIHuxZ4{8{-(X5YzDNVs%<4kuhjki<){WI_@ zORPjcCv)G`_Up&z{&#!kFK?#i|E#lJ59H1)oHP-IJgBmlf=>c)rwUx z7>RP)qtM<_`1+a?@lAabR#aMU@2bi7ZL!}x1m)~fBZ89A!kp&jH5}g!JjG&@z8na= z{!szGu57>jK>3xN{)mg@C}cpR`&FqXmU}2RFOS6DvbgG=aA9R7wG2ObyDMnS5WCC; z4O|)1I8@Z*&)WzejrYKt(d$d(PzYSC`0YkF1U=v@>voS6PHtM{Caqs!?>2k zcj{Kn1D%XJcS|O}2f__gheD*Rn*jeFj3tJ?1%sh7kcp|5TBj7#ANDlbgS1vyvN$_S zLCG)qCjH+{2X!abvR41u0T7usMvI~|S6FlsGokXc$`;l_8!V3EHM^{*(XMdRS9q@0 z$1jhX%6-)Xvam5R#il8K&n^BL@?ajcT@<{c|C};W61p&-r--HE*1wRcisEi0JfZTm zvSg8C<-Ae4mj{q#=dafDJ5u}kmFwi|*t84zKRSPHu`&B=b&YD>ykL=^+3I6EpP$ZU z9sBvCRyCOtc-B(Va4T$9T<#yxm!m zkBn8{d}0-L1=DYfi-j;)EpMSYyV2^m$s0=I!qnRS4R;EQ!Y%VWF~|FYTZI@&Mnt65 zTf<^oB+Xi%@BB@0?tOSQslTF1#O(vHL=hjj7c{_f#>65qHkcLy?VSTH>qZt_uMftA zWki~qoA2-Lu%;>g#>3k!N5eu1F?=57o*l%gZS4u z`Ud{*2`}no5?Flm-0csAV!!Bf!f^Gz+8YA@6W>GWRjqMgkFaU1p<~4pc%^f!^sNZ3 zgsbY6aeS2cFh?;3pHFWlS^?+JdGLg_tk{IXZ*;6AVjO^*$zvh;aQ!mVIRKM^klOwa zDCWhB*Fa^2r+tAp6QGz7wvtByD%*EV({8JTGC}3ibmMLWb{kPb{sU*ZZA{nVRG`>m$nCg&{N`T)k?S7XBaVu0qKX*JRudo{eA7D zGGVMUqyE2}3rQO>gwzR+4ws*@^m`n$P+}U1n0Y?UeqpTRT~bzUQCLc4mg+AQRn+dI^zu(58>?Cf+835?19}7 z-A{@h$cU=mABjapMmAL+J;bT$d3!37N#*cGBCn$gG+gh`V8oSSwW>JJ2g{!>;7sVW zcj4XQ8aA%;@onJX={Qj&uD%_2djk9uO#_VjeMM z#PET$#(+nBA!;a>yxa&;PJF_Jx}sElpKz47TZQ*UOblU&;Km;G5Rm{FW~}sl?&+GG zo!OWr4CJ^Vk=pOWkSFv)dFy{y@?tj4I(BL+@;&&Se^_ww`M-Djx(I4*Npg(jltf%3 z>LcZ}DJTCakhS{t`-IJ>%k2iKEKki5{)l#&ZM(yw#>!iFWR9H>XiR;RZhbD!%g!E+ zrcIN=nr9;8Dy?O`9r)_fUR%nDOSCMkSeWAHd`yugEaIas2Km{_>1WCGkrU71PkQCl zc~5KGje&Di5K;&gpm3u9bCU-^FG25H!C&kSMxaLy4g@uu^&-V(}{S<7-?sn(MwJ@y2C_tj$cQnS+{yL3!C(m!43T>qDLm^Huzg8<>XLqD))RXBfs~aIvC%KvT~ufr`3y{T)|bbgT?>)gwo~mWp^M#kgkOy z1vBrWAqMkLTuo_axc>^LVFKs#MkUp9;%wmg4W7|lij4vju>D$cy5AOb{+n*wzY?i#uYQTp( zDQCf49)#5~nH&x#CM(da`vicGqWfyBQg0WjH2dgSXEs!~jPUod>;rCk;TR*ZdF+>H z0c_Xklm2`F9{8EG^z&O8_pDkslA$I?Hk;qP&)W2}4C5Kw2!~EMSz`)yJeZL7J+JpE zn;)QbmRWTk7LQWVTS{zm2$ZLzWn_^I!t_=?U%1oC)ll3ow(q@DynM}_uccx56SRfN z4c6ppp>u@!gkCW-^~)>D<<5yQ^_3jA7r<=nQRb(+Em?7t=#QmvqPo?mDqY9 zaXdo$LaN*ZeQUA6!$HV%PH@ZW2<3aDatRktLKTaWzWPNum$Po6IaUQ;o~f;{TJ=;x z5Z!dSWQ51BK3QVi#-An(zst$>g{W-NcU^PK#xgHeks`E2;>oP9s{MWC#we_+oz1mX z5?7L#Cy*vV!bTP9%#IFeLRscT)}D6y8e8X;D;Tgc*n8p+j_7+Z8t-$nir#7JrOIZ( zCcOHXUpdMEeN-x$1!V2=H|hBBWeT9A<7_@^8rEry&>|}$OMw;+_*&0DX!VJ5nh*Mw8 zQ&03F!pEnv2G%%8Uw8_|L4AYx;&Ii%8!wp->KSz`mW1BJn@y%jCKQc|Q;qo~6-60G zGAsi5$pwN0Z=6;_p7S8JF@XI6u8!&pF-!d+`=~KCbCsC-V7KG`4=t?#z{Yt85QwF$ zM9#G{%uS(+QO)r?i)J%O4Zfed@SEnO9uYYG*dSA42M!FpqIC;9nHeIADJA z3f`!Yjdh0KIZfWc`X5L zAjBr-BT8(3X?Eh0{umrJ2R$r#dd7|mo*K&-@yvN{jW}Jy=iLw?L{8rT3eLcdv#P2p z)aJcJ;PnJN+6FRgz`%%P!ssb0o1~+WnWUz1T^j7<9Ya)(^mi6VyIshd@oCha!K9df}eIJiahpgDCaDlmegG6h%0MTs_z9v2Rwe zY$N*b@{AOgf&w5OC{sl6AaL+o3~G>CJTU8mkOlz+4U>Fw({^8JC9a?so@qDBoQ$P* zxE?UGs4bkgQWNssMEx6mMd4ID;&UhjL`-Cr|!|6zaB&TwW; zY^ujs*4N>$_O?^yhsLQW{dJsKEg?f*0z$9X8V`F2`i$Dh^g-czDQp~faF-gJ$L$ZM*Yp4PdJ96my_gSCf; zhs~Q8g7D(cRSba!-myl0l{V5}Z0Mi(BP}sH2?3uF@dbX*Ivb0}(hOm@Woen;8kaNC zjB5*(&XL)n4`O>z<*#C=1;Je1j?-={x>0qs<)m+ud*p{05e zTT(lu=N?!_AS-0IdP0_p&_PZ~xw7l5Ij9+ilXBMePfT2Hm9ak)n;Rx=>hfyl;s~9dc;05WegUgnp6+&Q@RiXf zj#6-7r0wXlgn8g%5N_eWS-5^v~-=HVU!ThzRT@RL6` zE?*NHzy~W(ckb%GNCV}L*skoK<>oTW7(Zcro>vjRSTCaT< zuvYN_z*+)#1l`@c*XM_YKF%aGOez^nn7E*oO&)iTfOdYvnJw`|Dmp|k{7-neCO%`_ zUnaSW0IsYy3ezZud!F`iz9hBLQvnl+Sw)63X7vv3io3eHW+xh#+>{dZ7|<~JcnfY2 z(_5{{!@w>JQ`)dJ9S#byBN$;iR6@)XhKR%M=f)o6Oa{pi53<>~N0pIaVu8Os?{6QY zslWApqhKMM%F82>agRJpVii$sO6j*itiS7|a#U<@8WZbFtw$5R(0)dJAuIuji24*Yb1h^g0AGV~ym zUJ9F_rCx%DflgDz{0fXh4;4-}Z;(194F@36olP9Jnk+)Wce{WJ_hf|*0%u73=rxxG z84+2BD$66fHNW zH2J)JtQH<1rx0CFYWgMflBkjXa?7Mc@`QKroHvZ8Iyv(|2;S4l$?1$vk*SZO!v$iE z@&I1N5;8tp8k;1B+440B7ku@$pS8{NDwGqmGePQjYdz<_*Cp!oa6 z#3*8kj)|}X+AW-J9|s3L1N~|4)70R94sZ?CUCgeCLs)HqB9YH$t zfiBNQ_I|ySdOIR4G<+L1>W)}D++Iv%IT@W2`*L@ zJ3o{T!PX0V9i8I!b5%19yC4D|80uxvaG;$Dor7Bo!-8x?pl9zAW2kS=P8gIb_0r)QTZi&boKwEZaC5^RS=l zhOpVBOA%y=y|}oOpL7XLNbTPPpf=HI060!^`O6PeRoF4qiLsSma{G7T3}H+7VvD zYj7mozF;+`UFZ%uciND4ph4gv^f_is__M7Y-8g|$Jc}_~2&r7saC7hTUUT53 z(bY5PvX}u}SdU}i@i+(Hh%Q+B5JDfw5O^qtjYxIbDtCWC9?B*UUi_DjZFxx%XKshY zOS>}4*hxp`abU6BfOf6^&v5*s^BH^OV6rnY?cjl%Uy?%-774Am_~gWnD9H}FfZ87f z2lI`&{S$4hrlzJ3rf@NgjUIy-bRkvS#}5gEk!;sT0R4$hR5CQEoqr++n_Qb?T?kS& zsEkjKY}g0KE+hp3%*rX?eb7qzNNe?dPRN0Jd&*7E56YtRC}yAX(|GjS)T{nwSuwz5 z7`u{R3kY!v%d*0HjFLx8u!hv|VQS5&A>mUR=^NDsOHo{fZ(kisn7-m*R`LS3VXVq=>$ zE$o(OjHcPkus~!V-tKdDPDhb19fD2d;w#z=yuVmGz@d8#~np zMTo%Kda-NZMMM3R?>@Rt(y|jw(q_m-FF#Jvr1x*)6NtBI>wgNKSw}3w;4B% z3?l2#+JR^}+vIj3(48@>SZ1DN{UMt1SU};Bv7AM?q~OlX+R$QxJAcVQI4%U>iThn# z<6Qhur~hAlpcp<6Y|$_`I~P4?5h=M!B5)dV%4IxTzC_Zw65i?D5v%BiQnwCBzSwB{ zY2Be9PN#GXk>AWb70#;Mvp?Ql0Vk7M_HCYq7G2-*&}AZu@D^)C@?X#K_Zg4Q{)f5OuM-$Y(LeI(e9 z%G=&o6DsT7!JCd&qjL2d%xsCGFfFaES$d$G!$hx5ATcsdDpW89-*28ft0IVBk0lN# z#9B7Yl~du`ch6oXi3I$7oQJk}gXPA-Zb4%qZ|`SDzpKcgw3qFR{HZ*&2dHKU^tCLF> zDmJ^9@e&j19=xT@1eqdX&{OCHil4J(_8MhYxDkcKnSt#`!Q9fOQW?ZZ7;!A%^S)2} z+v@y`LbySUCnoJNj%r$R4~<7i7|L2bwjamC_z4P~Y=qu3*;E|$qUWGB=q&(1CXR}1 zvLOdsolse&kMQ(e*g?unCz$Hik#(`Ak(M>2H7)6zbJ}Eh5&KX?uwnrT+=eSOXl>8W zeTH@6pbBYxZDWO{dKe~#Wklj_aJD80Yf{#%9FQA`1S@#16w(t!EfWS>TKUUV<+|gc zS6-a&C&8B$bn*;l;s3qrY3CL&ta$&;NzC=XT-u+<7;wM_Y_Lmx6!v4X@;}RyPO1t` zRC3oyq)2lh!HDPOj?n!TB6#mR2tUC>(SJt+?-U5uNdIRk zgrHT=u^QjJN5Po9Va-6f1o+udk_Twyo=S*VIRSmG%&<(CBo zH2Y9932QlGO}+4qgqiFkJ>&CKLOY&&oj$=%j>P1B=8QB1%(I z58iIksT0y0ZcV`$f>maBbmrSs2#b+LZ;2_lk{yCIqfz(VUv*76)6s}(wImz|cVsvh zK66}IyiN3nD$|&z%t%C>L!8{YvWROp(1YIL^(0O4DRy#^Yyw}T+xh&8!0RL{Q*Ypt zrL_4?V#Xl^2^_wIJ1(^6X_@)UgQF2mlSfS}{m07{MiQ`+49H<3Ka5c2(EfPBa3;!h z()*3e(Cf=cqT`J#jGv*AjhHcASLvi6tS~yHdyF#^VS-X1WGk67fCNt=eWif%TM(QP zjgNQynS)4hN_ctse7hn-a?TS4yxu`6r=J zDMqYsw);k+xc%MAiZJARZS=&e-xPSgU7)*R{5XWb|NmTInjS=(!(%dslq)z%1H4G- zl8Phz%Vf$C8~nVQG8r6@;UUc83cxJ3hT(8z3uF#4}#tPtmgeJ4vA-SD2&EHKSW(^S7b{B zjAG-kw@53|ByPYLC2chZ6$G^}>*TN~ul1gENM3=5R`O}nj z^*uoh^523`llG+37hrHeY=3QHK=1o$->9*mDP(MA2(*JHNhR9-;v+w^Dk*Cle^Iu| zDlwh?t-4>0D2t=SQjsCckbxAqB4tSD(%hv3oyFTa+$3 z#~^lyqOXJcXG)ig1NgxL;fUu|QR-wkY|}#k0*@kSrN%%bhN0cGCUZ0Jhy7=s80VYA zTz0hbGh5%s-%aM4AC;rPOYnc*!i43LN9$>ilZrbMG8y*S_(HOc(0lJF2Jl&m_^}EH za~3BTsRo}MSi%cE>Uk;Ek{9D5D5u5q5GXSjHr{f#5J!s1VHMHDm@by;?u$+9Q*xRC zvR;Gi0xfoI73wgAX}|k}=H}q6`PUk`;KeFnode>~3WD=?jU+yH zAJp{GO8)OxP>M;HZFB4Ev}diK0TYNW?(R8Uj(arWJ8U+57YRezu!9e2*29kWeJ;8msgrF#VH?_2-?PX zqyJ;+Bytj_$bnT{_M~vc){w;@@99WmNjaRaxj6~i%MjFJV2n-2fTATLs4N6^53!M? zoz@buY~t%u(%DhXZH>ImfK5IaL^2f8>}ly0AnK}nOw-{wt`V4!`hQ+DT#_p7c2LY} zRJrDVc2`?3EQBei8R?>o^5ohdr#Hdww4VIVfTW+Y1vHqmtUh<;c5$o9bfbjTynvEa zuyb(^>}BLU2_Oo;x^g^{5@y5ab3Ij6P*9MOnK)S}>1c1~@V(Tjl{u48a_6_;1r_+| z@;asD&mGs9j66L*PiYvs{^ptnv09kUG>W0oMd%}fqvG)P;`!9YUuvkoWSra3&`?xF zF2h49pDD;wBA;cgvbv$Q9i*o%5Yc|aZQ>pKt6?U+DYT#dSg=`92k`?bM0{1x+zxqc zc>@QGkdUxMA?M=wSo6*}5_occzPa*kkY3R0_cLJ@5bHc zLQ85zYB7onM-;7>Ui0S-b-mqGx%bD0s9)dwpLu>g1luvq02KhgO4Avqf6(U!O8Oz7 zaF7(UXe_EbnTxajKoYt~En6%XRuzFW|BR(iTaMK5BAyg5r`UI^Ru4q??5`BPmCbjv z7m_lTyg8mLn7$XT5!TRH zX>&eedEaSnY)liVX?RbYMtLgx3`KgxIKk^i-J>}J(PDdq6!E8EdL_8-t}cE?+ugmz z^Viy%m3-1&O}ym6Mw_#qo*ui+T@sC&Q_~L@!?T_Z+_Qu1OH>&>yIFo=pJkHrE z+1c5hFLE;`sn?Nr$PN>3-MORur#^hRLqQw-HtK+gd!vv^e=%(=1~iW-fN2Cge~YPS zu_u$?NTUAk^k=dE?FC565mA-uj+$>oR~&;0WvW~>w=^wbUw8~qodDza~$qaf5AV}$(D(u$UQah?{7h9af#F;&&gAPK?wNG3M36CV8l^y=s#N~QHvMp(z5 zXWD6fJxfK&ZO?ptAs%UvJ|?*@w4zv$0Sm$unH3=)Wu23#OUj1Uc`K3UD}s9-M1P3T zI8cJa>z4$#p&Mh|U{u@un9%^T;=c%|Ny3q~5v%<|oKR3@=`5>a$(trXir{KgQZGv@ zETBkq0>3V8t?tT^-XFEjHT|^7^tFX+%lj|ii_(S0=r?$9h0SDgn}|Vy=NuFi6kgum z)Ga2oQBFv1Ryh&?2FvOBgBHdC#D_ApP7ID;#hW9i0&&>_MznZ% zUTH-|flUk%pV#Rkb>qVNx=f9Zy=cZr4BK!)-6gokf@@ow zU5V3s0vG+R(cgHk^2R5~{EbR+J@;{4_Drb2$GJeD*7-K;p% zf?rRo*ly{F=7tP3GVJVO>Fwnup9OTiJyyCI)4F4Q)7)GK1o{0xe7$8*T+y~IoZt}L z-5r9vLvVL@*WgZYcc+`+uEB$a;KALU;O;Kr+sXG{)j4(RK7KU2y1HTSwdR^S=9neE z+P4FSlnz@XIy>-p68XDOI*|Evrth>syP~>J2;78j7>3Hc z7$c`E&7&VoDW^Giv2ux{JRE1kR~yok~WO*opM&p(MRJ0+g_73SNFi6)s9NMuI1%gnJ-*KJb5cB zu5hoVU@#sZDSd75%v&XW6Xjrxw+Z>qr0j^9NW) z?YXr+Q~MV!cR*uS98x5NS#$XOU8(a!K#?~007qXjSEyr7^YlkBr!DFyK;>HAjp`0& z@eSLZ9Uiv&J-XaAH#asmHZ_6S=QlPS*~Ir|Our=PZs^%z6*>?WWtrcaXG2nE2?zMk zE%V897CY{2Ou=Cd$>tA(eELW6UPc9T>8(UQN`NllJy=t%pw%l-laPPJ>`@p}oLtCiC% zVLNY8PtW^uwbFT?wu9}g4q+XkWCDAEh=_FZBpsm-duBf_>x7y9vJD8(4I<)JUDrfm zu>tT4-ck{yf+cCn>3rjkj*z+|rLMEHvlHJick*YU6W}=sI^{k?j`sbP`r|qF4dOV- z21iW!xj>D#rqWUxU!|%#b9f<(#|0py{IW>^Za#t3M|0gUb8RMXjF;l*Id zd;+16U8NA@9%D6MgoA^_4WAg#d7NrLbM0~9B$75BlnuXNi*Ie~;-e9QZyU78%l*cn7Z2HI!wQRU1*$ zgdJ3eEgjLvkP^p&subz^$k6kF==wTZT~i$h%uM5>@l>F7hF`SkHXaKIK#Wb;dz3RsP2 z)wLF@7uZUnBt`3jxIH2zOFHZh0ChlfLE;vXX>bTc5rY)2QW zb?Wyfm&vuK^8j?lUg;d-@U*|h9GTUl^yeSW9PK#~=`Iab_nDPTz!AISGFtOx{9DXM z6@UQa!SMK-6Pjl8c%H5H_4QeVt=_4oN{a{R>FMhJH5ZlHFE9iyl7LOdT4Ya2I;@lK734>c;JsV965F4&bVfH1*(K5DRSyf zyD2aH_wN$et?}g-9(YM#-${wfijlG3h44PDZM+%`IRAN>c&q*#K>(N{6tWkGJsym` zy}bit55)*R@+LHP%uw8fG>14i1=FFl7^2WNbR&_PO$bErbXmTdMmz|$H0au5vEoVI zo$5du+M3?0;DYavmx?XeYPLrfo_TdT+5NrwQZ=}Uj39IS>DC)-gjG|PWHJp-M|5c< z8A@)TKs}2MtO?^;yh35x2qIHb()}G7zIAJpX7IC1cb}89t#&gE#|Y>g=O*zpzJqnl zGF@ZDB%j1LDP|GoKUV9m2J2+oBY(WL%JJ4+V>*GutRmb2RFNCo6`N>wb~eGppYapK z*ZKiKm*x%N{jBVHy3WS4IyyPw@KjvtT&r%@`((J!G`wmA1Rj7A1;ynFr{d2|PjBrq z4dWYIS?zBlCyHQ|=ty_{m>m9!Y$sN=RJb8vcN(rx^^`QKwS635%`VKSL;T&({oMI) zyt64Ix_3Xo*DDPUQ2J~3vUr>U^Lvt%>`uLVZTwBwJT+cm0 zSD-go)59h9i0zK;tc2?c>rofU+sm@*j;scrNyz3aEZ)Q&=N*ekt>brGqLJWRhDcNP zCNo%#FqD5JlU4MU4@6;Z!=#wS46@VGk1dDlKt-w^ZMLh9Lnsc!7lVEhgm53Yodk_@ zepCP4y;+(khFSA%2$MTluQpA*1}azIviFej>Rsf=1w)L~EUt;)$VI&3oLK3wPDi)N zMMH=MI^-actVf~@XN2T2(N@)v76V$rx;*^XN}og2V%*>$4$oM>-~~1TnTJItpZ>H# z$5E6{G@-6G;S<{`b8y!?u_T6^vs$IGum1d3lXP`NkR*6`#UW8qQ5x>wtznek1#u^r z;2;oPNTYg!WklColAbCa9(Qx64x=zuy5Gm)B3)xOeA`dr`SRojDE+^NqLa9-y1&WZl!PsZ=D}xAH@8iK$U7PBT`p*SnHphD+sD0NsNPYgL`NbCPK2GS#_ows(viN; z-K}-^@<4B`9{KhD!?ypMiYR9h4gr|YF!oprt?D|0@ zR0N`52L}ftkLXx}CNKx{2d)7Dol6}6Ci>%k1?Ck&?#T+pwy@tM^srX;x$BD#X% zjBf7YY*kEFjuFSzA#xG%89$)GvJLX&_5-7`Zy#^T3T%D}sGQA` zWo9ODOhQYB|`&7UoH`bRp&D~Glp{x`4$sd1Jndw+dIxLq=Q@0+mO&d zSZY?lUvpiZs|4n3##pLx`tL2ULDC|t_rF2Zt`QO8qclYvI=|TWlo-IgihfbKr}eY= z3v+WiH39y&A6%&~tB}{_U%dt0E;cK!)fgis3o&^ItFYt6$-$aNI+JT_Ytz%FXJYmH z5xTyqYNd)QVCSFaXqpm^j^|MrG?CsX=jRiYBxAxqHBk;b00+NpXV||c4zaefa%489 zV6`5g#+V|sWK&)bWgV3jBqW_RM;<;|-`3oB7!ENhXl~AU$}&3a7x16wf~)LG`6WFp zZ`u3$`U(Vm&fAgD4t^TiB-r$*LVz>_hDMMDldpIp@_vm%+M`vZw)$Pj1mKP~A@Z;{ zeQgLK#0BCpudP0KmjHH174XK5=C=8Xace#n1RyIr>VQK!b#fUv`uqOohLGRmq%R8N z_;5!OW)XP6S8>4267sqr9ji^N$lcBG^fx(+sGaJr9&02Hb*gH-x$Sy}?adVQakHu5 z{zjr12`I6oa!3EYQ7{m7`gFw;@rR>GBhNMcy<>BK?b^uN)bO93z>PxTWatlVBVUE^ znws=mCf2oAxr8Q>A_mdkZOxTZDNiDcims^8b@3Ic|)?-k+(+)W2_#DykX=_X0 zI^jfAp;qXqv!Wd6Q$UDD&ruP!g1^q`?90Lne1x@#<*}&{nM*wesnLn?({lum9_pqy zeygbP2+LcIinb6?nRF#@H!UL}lazp!E@#?bR0@;Ll|tth6XNI<9j}(8g{~va%{*!h z#)z&1#oLg7K1z;~r-k&%AeET_8x_t->q$CLYg)`J)WdOPy_Z+lFq2?H;$@ z*AVHjYPM5d%Z``!fl9Bnpv)^Tf{>L(A6xUiA|r>X0VS`;#Uz>4O3)51$?*i=>v*`n z@}4Kk5+kTaTNptw5Nl`f<`WoLud`KNhHhH?xNn)r z7Vhm%2PY?^RZSe7DQq;9uwdGA5=1r_E~Cq;WCpPEN~4eJFab*SM)%KMmxsA)F94K0ZE@!8|h|`tUNN#dw%e^Q7=L&VR0KNjoaVJslwhkyEulkxLVR zg6LOWQ5Rg6uWw3QTK#VynYoG+E4KFnEa;pK1Nn9l7s0Kc=rJl@m8LpMsi zRV9vC7`IW+*2X5^jT^nDRD+8F13qEYgZaklqfw+dxq6)Rdo6LkL$eqZ$IqS&*4uXP zNw8%@3t-beTPd{MuU!)zPyUL4_gvSa6XC(KIT6JcLH3!ae$eqaG9a zF8FT34nUz0DQ7;uU2nVvDH{1aTJSBdEta`dx(D2GoaKi^9fZnq5SPsGd!9{-7PkFa z>W#SlqLUs)+wamW7-PDspU#Gagyg2&S-4Kfc4=4ccjxj&1o>l({GyH>T)W}*!`y~Q}@ z0Mw`?G{UChOlW`2&>D_RNHRrRwpLlW(1#ZV(^M;s0vazrROj4S{A3`kVWc&Iln&wy zqdlp2D@tE$a@kx6WGki!JF_rUu1+mTJ_%sst*-nKb@Bb|e9b-3kkJeldV1Lh_Bi6G>AZk6v9To}LNiN=136fNdyzt(|T8fAA1O@K52^ zQ5E6VJZR}t|I89o7#f!@5C5!Yp+Ut~h&DL%LqZ|WpNK3yf_{0nMT#Z?psY#&^7>gD zu!SfGZaD@K$4BIreh@x#XjCe3_HN?+FERe?Ffi=K__{5UF({(Pgsiv-ck&8~K(a=8 z_=HhCN&B137`zz&^{Qf6w3w)gz#1zSLq$bJ!HjASYV^na+z+eBtrueCe*T6u&V|s? zA4SvQWmW|YzZgMPO4lMJk-_Oq>63M=p~uTo-yka0XTI#1%U&{!t8_J{w;i#Z6i*?e zUtL373g4qV{A8Cv_T&{2c2n* zkKbl>Wb?5FEJThyR!)%v_oA+Ts9TJT`6+{LLA@N*QeTgoZRswh1} zBh})G6D(qTO%jODIhL64(mb3Bra&4r@{#>*?|Qy2$Va*l_W9=6rHby`o-qn$*Zp^``$j6tRH?q==kAsb9i?7!oAb!`da()p@qGDkNH^+z`jFoU{icZ{1A=Gt}zy7|1Pbz z+ub}9WfSrG;y0uk7W^v78a@o;h~Fy^;mAM1zbu{7-I{`sz};$MP6 z>+4(st)QIm-I@Ep+P^lzUtrO{%R%UF^z-*L~TNtYs+ip{7kf5hb-g!ioXP-tRsCbpG{v{aBUn*FuUqshTt7-CC- zB01(kIwHoZ@RNRGc8hD@$+XqasfaSg^CDmJZg*!9Y@Nd1N&U3|U~(Dia}%_s|t^uwHk46}e;i;!Is3v!a96W}-X zrcz(?bO}kt`jfbOQrVK*WP5aRFdyFQCK5isjiC$e55~AgTc?<GUe;14t=Px?=pXMgTfvT+FAgC`;bxRs*$L^Y}TY=GA48}9pGlDpv93h1c)c9~H z@WuTUKRdVv43f4;3V1N-bT9n1){gaBH$hO=}j%}V`~nhUL|P1I(&`TU^B z{eVS7L+dh9Rs@dzmn?==NC>yuT8wRuwVymm-z>E8Y8CwZ%^7(@T1(>8Eo+wkck!{- zmJL4*OTlWv!d{hF(EQ<}O47ap#!9d#N>%IMewO@KaXiy!d)Sd$5T~(98w+wAk;lLti_P>iNvG(~Rv4 zVAdW;+*k^kowI6czGS!B{#(9x z{~>Pwfye1qw=v+zA%G#>c>Xoqunf!<(uINEBn@XDby?iGUcM- z%l9tUl^9rUan4r6X@zV$J*6XNDf9luMqL!yqbI|pOGF)zK*ux!;4OuS#8WTk1exF& znHO+QjA0!71SICZ40BB4grhe^2(V^U@+7ah~O4% z`QV@A@6Xq?jueUoR5J03v^>~y!`Nix>FTobAXv?2G1M)7&0sT?f8(kU1F#vj8Zj$iUST@JrsZCB!Zb!a6-+@a$Ia@~5F!X5X`C2u#IDexG$lf25b5*5J>aGpEO#fruM3-+ZWQQ*Q z_`g;ffr%t-*~Rc{em+&G8caLB0YrhLczVW_27O+%W#NA~PNr2FLtypfzgi9Qccc1v zAAY9q>k*=7w-^1i&US#3r9BvhyL9a7y@}Z#OvEM;4xnn9&5F_&7uS3}Z>P(Ot!<|z zS*i3VYeR^%XpN(4Y0spwAR`n0OuRjk5si+ImuYAChvxA6fsl{p2uxHtCe(cFyatId zXNi7(bIV6f6VHG5@x9?c9G$Vo|Dpi9{m?R`9>3G|L}~;?HdLAfU`>+u9dvVbhPoEO zr=(;~g*Xbsu>mmdXUJBH0!Leo@fI1Dqy(uV&Cd0w>5(V*PP-45U2SO+=uig=$j z>3-z~-0@}$8ApHvH`1g6avK&*%C6SV{TH0GaE!cy6f;0oMXeC9Pt!5XnG_ON4}>E) zoRwL-Vg1l&f$372D*E);TV(rdYHfTjm7Y%HoGLbx0}xG8{?zf?`W-%Vr-fV7-kI5R zvA=tQskvWmVOR_gfjXYc0Af{??cN84gjVzlp5>b1ChLy&HXh$qt@gEQ`DGr2hl0%GcDC*;6P>3-Ss~ z%*@QvbVJYB>vuyUa?6RF`lLXD%f0n*F^?l9F(UjKV=68BxsO%dK40Ck~n4j=+B2D%tOzBlMGf>!7 zX2}&l(9*0;4B3w8H7Cy(h^P_loi3=ed+@?}gjhf^0tEn3pQ~t%pIaDm{7)Z%B7Wm( z&vEMT=NI3{Cq2u4ef%PfG;)Vm>Zn-0$%tW$y%Z&m!ib~6&`bo{Akq35%=|7&vCZfT zoa5G;n)nPa&AF{O*5(h24UOijn3Mm!m;Vw=sQi`=y{LDhZ}3|poSbtdY4+}ELZr|~ zREp>kl8-lT^axmHc%|@~?Bp@}YPeDFE}fI5#H7n5s6rSd%0PHJqR3aV2;tB=SI_T# zmsAI#@OLL>4^WYJNhxTa4ojO1G3iWu8@<9^)AKVa*e3rk7J%4oU-2l;NTRc3rh|~O z5EZU|5Qm51hyHFW1^3d#pMlh|xX7u|lUQC9xH5GoMGoluO(c0TCeqaJS92;|2tPMP z)Ka`Hwuv3s<&%w3ybBV|UjeFmkZ9BKg5xB>Yi`TK7K#vpW9X%5(~fd|yG;9p^R~e} z+7@))6p(-{9pe{_)sx;T?6ruU>Y~ASoCRI*Q}b}=`OXI3rRor9r&5n^Rm_dZW_i!2 zEhm@NS%dz9_Fa52fu54O;0cY0c-s4h@*@|g;O;+Xu$Jq83n(ne^-yrz#q1&?i)6=N z6xtlZ^Ox8;ix1QIqa9ku$Uk}NjKH?Z7QJzdxycxGDBe<;p?V#hSw8KxZ~Xbr%Ytf> zdLuYyb21o3okzrCQG^4HAEPh&ZZTXW0v!*vDN#yS~ZBc)*Z zL8gH&x^3bvC)Q;0vmbJ!sHz%euJVbxkYC#%-PlYDRV_9s5!7NBSI?b~qh!l@LwyXM3YAO7rb zL!2ESRTlQ z{vX!lzhJeYI9T!;8lpJSw<(K0VIo+r(LHjPYTKhqaq;of0Asj9${U1S@RpE^epFpN z<~yPk{Z5gqX%R4 zOaRY^q_{mNhqZq+Nc=$H%SAWr9#n9d7#Xg}FKU)=ORWt-1oA52V*MDc{$dYN&O}O# z;6s3gRtqZkGb|wk?Vv%l&nNH>q83`R1yX8V7dTl6Bl0`sGpCeH(MK;1TAMlgo@208 zPX5gK=$8oOGTZZEDUw61-=-Z=QR+%}CsR#vDJf5AVsm6Nwp3bPqyoKtywfQqk`+c9 z<*B*92HaFA(SplnLQgPY7XNg3+%i>j++7ajPIec#YkK`)N|g1;`MU5v$~#_OJgxq2?5pm@(+G2C5o9zWsSOd`C>;1ed8{g4KvX%} zltrP+9n&P=7NIQ0Bc3Bi^oYbKdMCYqcNk9nl;CZ=yc{ibdi>8w?mt{>(K2kbn!1Q3 zR8%MNRZ=tVUrW2<#s=F(=Mg6XV&YgXZQVIt6xj8GP)@;p+NW!kAMN)o-7C(;-6VHS zk7td|9VQs!YXGv>8z;@B`(Hd^kIS5=tMyV%hy*Fjoj+t@%`X6h#h!#x$Bszl8Nz_* zjNqyu-7LZ;5rIrRO=P)Z?1J_S3Zk!@>{M`EpPrYm_Yj(Q{IUh5b)R}k_B8MT(s=LF zthR%A2DCDt@VhOPs5dv35ixyu|7;#LmgE+Hoes8f^^?ik@4@*+=URrmVx^?Z(&Qf? zgVYyIGb!UhrvZRcc4Oh=D?oI}bRSq{hY3C>I~HD3ef(qmuG_%>Zpo?yYXVoevhn5t zZgYrIi^S{wzhM^t>re-A+b#%;9J$|?EgZ3+a%jt^&2dp=dZ&qZ4U&!0iAxxh9Gg0W z@sL}BMa*HrRmq8aUoAnTU)7=T=w~&xHLMkH&A}@*Ws?$Neb4f)Zz>oIE&Rm=H@COP zZnBD;WeO|Jj-7MAb$H$w_K?MK;p&TbG0B=nM=5ra$|}juSbPBXQFcE;OGZ?=(?^vz_y}E03XW3Q=a$K1l!$OPDaz>Qn^OF?-?3hePH&#^=vw>zfm?cr z$=sXpY(3(D?n?p+DEjG@G=U*)~faXK}Nho{^@DGT-OA7F6zMFn$uk z^n+Jmx-teiw#@h!OHszPi6vgmHdS``nXN|h3xDY69R+5jc{LP~|K>Oo<%+WtZ5#ZtD<;$az z)D`SsR0pOEjQZ-7%kaj}tUM>UIYnew*udCotG~AH=Pn4U#Ecv#rhhGM*~GLeHv+uM zEY(5fM_!U#Q!O|v|F?}70zOhsZ|k2%Z@M_-s~xUNGO1&{{{rEv|Cp%)@fZ8{?_FTL zig@@QW&-=rXWXVHK8c0>htaI#c29Rzu1j%g!SHkxqCA})@n
  • =&#!R%FB5@!LyH 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

    (hW?PZ=c*u^hKCVMn(E7w zCDo?VzwY-A);U=nvfn`+hB7fAN1uBp|PCR)Qj*T>oT z^N8b8M1IC-*z&i-i|f#3rk=X}a*!}a( zb_bV*_`}O2@%`u|W5|V{^CudmEFmABfwsRR9-wG1Q1(gr?il4_6Uyf>J<07K<9YnOIGA1q>0PJf5cP#%Cw_jvW8Q;` z=LO$S+BqlRu>+~56uJ^Y`+)z@P*XQj`2%0_ze$dR7J7=z<$e;sRft|v()I&Dli}lQ zZD`HeE>fPO_+d$WKDU^D!G`6 z;JpowA6)t@$zC3?TY({8fRq{|bY$c+KR+hy>$_mE4iG|&z5-Zj0P*6E0zha0wEp&G z^Ct(v0>5=)w++EQAm;epy8+KtOG`^DD=SAwHkP^I+WYQY&+4YxBlLf~kzi~i*?1GS zLtNk9Y&EdKV5Y{^7ANK%l;mRtn6s{elWjB2FXzXIuN>Z==4U^V-^1WrXTDRM{$DC3 zz*-+%LryI{4wPkvPW$ec#cS(_^o6a<=Aua?^6ac?;J{gPjU_5+$?G%V07u~#EOW_l zF!mA=3cxYJ*pgnapjCYU-6zP$N1#P0$i}8pIL&X5_j*7V@~!DNQ^=HJLBG4CWw6M7 zeWUhT7!2kC8HVLlvFYcHeihB*3Li7p+m~(sFh#Ncq_QU28mBSmvdsbOFP`}+w|O@y z-(o=N$lOhhWOCU=LG)$_x;0wQFON=@Ojv`UJPS))y>@4KLXIZLuMz|yb2FR`@BA&C zTvW-swGWY#H7yee%$4lM$oqF=rHs+tehy>#@wE9oHxk*Q{>Ww977mN2fngt5w&d#& zrVBGYGzVq%4H|&w3|b8KA^P99?zA#27M+jww);>DKF(FGG}pwCUMYMtfTJ{5mQqaK zk`6tzH<1^lSqQ}mhHatnrbd4}w0KUw%#Riv9BgMT4q6ZQLi~NHq-jOkLX*dwIEIa7 zg|pvbeQP9QXo006o5fuz>-D(VNgrYZPJyMyqaT;ZjSp%2R(Rc&2L)=Rfd)d)brt>F zS5e4=6MlPtuc;5xCoYW|^h+DSjRJg-%IWSSFFi36&fp5{yq+ zr6v4cJHcRPuSL5{9|En7ROoeX?9Kq!pQZT@IcCc5?k+Mj<*1==Kjc7cJ+d$`>+F%L zEv8XtDx7C)i*H~`uncIV&-cu5k5XZ zWchPF3J(r9FRIGZLt&8P?*(rnx;Lm1M?!OkvjNb9b21OCMmeN*XJBF2Mvot#%C2HV z)z}Oh`0g*9DtE<>=zFJFpWkSiu~8LL(Fj3gh~Y^CKWqfyYX_)4ew4^hd`Cemfm5hV z&{G(p4JyA;B>rUPL4={7@CaF4<~+oqq8uF-M3b{DZOGe6P91CZr?DLd-|Lbj1YJf` zGdY*~bnY|%=C#DqYQl9!mwnG9(DNA6iJdBAN5V}N3=%a-YFyECox5ZqfiMn7{stqs zzaTIXYJ!xWX0xMXGMZ$K4Oto@Zf%jzGUS9i+2Tfz5ejH8_6cn6?P(m|lcS%1j~w%x z9ACz1=e?Gm9m~wSMuMwF+_&M6c60lhufqi)ldQ~xz);cUh8nHZ#xKo}+KLMR&>Y({ zrPEsuztgeFr6TPWWq;l)Jg;|J)(`AW@9X|>%OGIc!A3(6^_DMDtjfJtm;mdG3TEqPatbeZ~WF0(A)?^8TJC!a3?Mg5AmB;*5dt* zHR6O@_*8ku^F+EWD%8%yn1;(&3mF7IK`4D+TbU)Nsc)gBgiGbzVgI2Y49iNUuf@Pi z=99U}ZgZ0zg`aNjHI#W`SmwcEt#Ed>+Qwx}edyBdq`bRnK&D<3cGYFk`&5P*3e)P| zjn?5_SMg>rJSfKNQYRNR+D_rOUMf$*;@wdFkUmBFM5_UOJOlI3*jRKS^dFN|%y$z_ z!O-DD+ppcQcl0DCL}6b7Zecs|a4eD!nFKYB$SNk0t1%MLmr66*X9|u;L;-Mgm>9h8 z(ZF@`RNb*hg~la~pj_S_A~?J~7#h*L1vbmKiZ=IecTe`aG>Dh%KHc+oNFP|lf0vcR zV2woJKPWc%2L3eCMEdAbs(>S|%$o;721%rCr)UkvWoxr>b}6Gj)3w^;Wrc8{Me26v zOv(KWSnl<&AdX6jGb*K>8iJl1B~%e%v^4GmTnZq6sbHDrh2?VH`w!9)6LT3~ z7eat@6Rr(9z3~Z8_cqDYWxC9#hs+~tXP2DraO&aA5fB{ZnQk_EpsnRn-@&+4Yf(qX zkZ_+u*|t0Z9M6e(Gx&Zd$6TuXjR8=bq87sW1b5dNiL12otBuKghjm1GLvtUQfzkkF}LIS8`031MP z7tbFN+etpSx{LN#c39IWfB?+Qfd1~+j0M=!7RZnR2yUXxqi=x8JD_Yl+vnlASf@xb zt@J?{*MZ73g0jOO{8>d4|2cqGNg-1Jr> zkt3V{r(59#3wxKuzgkwcEJQ>TF{Y#+@r8@~^l}UXQmc8T(`8ISR}`VJN^i?a`{{E} zB-_SY$~$FEE*WGiS==WTO@ddzJf9h5>tEMN;Y5 zKB*Sjb_X%wgM3hN6T#nb4xOI{m~(#s88dz5v4J}k27I)Xkq1oD!Rdj)u0qwYT@90d zjb;cNss1MD-lo_mAZ`E5^EyV!|<=0l+DcagEUU1~?$5L=|H3 zP*sr^nAejf=v5`O{6G(%$A#i#jBWQ_A7%DAJ+@QnS&5jD+_=F{*YPLEa`_b!E%@@= zg%j9uk|0;TG{Ke?d(FXxMeVrWEQQOlWVifrYreWNI}#;Q^6CiqkZDF{X8aF+W)EXj z_?Ppa?)+z<7n=ByqcyGHC>OKy50Dg3xFg4>kKI7g>C~e8m?6)XiDDv)ih}aWAgt`; zmpFOp?rm%g>|SXSWwiTXj~u{hWk?)H>X!^ec0b!0BM5fF!h}63w$yUlxnf$>H`#_@ z4D8p{`>woReeKsR4KN~4rb4nC4ZunRUd){ic6RS^!UuqSZVZhS@CbDiD18SP-IxxD$DabEi@F@LYu@FVMlFzj~{*@&Nw@xl;2tTMD z`=P{>tbJZKJSRH@8IIAo^JSNL>S2C&0a&`Z3dg|ca z{oVP5%J}PExB`$In%DqnpWLcG!6gN!Hm0@-o>&WLj6uFZC_0K0B{ZRbYCSYCm@XbOb&-e?S~KSbk^Xpb<3-=OGpo0%g<%rWL_f7MIEI6H~J|KuaP z$T>>c!+{MiNVd$k%qS9sLWg1Us=;QcZj$t&TAa&5KxLYK(5?m>C1J&^KPw4Fx5Hxi zDDF}SS9|~QnvTNuhTe6FPI4(1P~twRc0z@KUj$hHaB7qo9%eA{JS4W=DS_9fGo+JZ zD9&H|NE9tWB#L%KJR{W$pdr29`rz2Zvql*Fl<#rX))UYRUrcUfQrq(6)PBM6hn>dD z%TH7i&CVt;GUQBR+FwpnDN>^Iu|=z@YP6Lt+2`kYPVC<$iGWJPLfWY=lRV5$B7QsL zhl;-rbiE`mK7e0`z=WaV-(Rl{7759ae}%m4yD`kc*)CMijZweeq7TT1dJ9Ht&?TVd z&Y}AOrv6=dGeo6?@{HI&l@cfl^tj(BD5A z(OE~PnMxVx0ORGrD^u~9pCuK@)E`s%@+_wWD44P0FP%g6F8yg`<IQjbHWYyREVBbeE>-PJ5UxQ)g zzgw*x8T@~M-LY(n8!CoGSW+bF#a`#d>aPPE-^KyL$Hwp0H*7j>Pt-hVjg~bqWP?Bm zB#rz+i}jx9AC@=_Lm1ohPl~XBqod=MVba(C`Q21NNZ`xPkdUiKeG<;GFVqmW+tCWTr=;Qi zpo?XU@TIT4zXiCQr)@3|3Z9hfc)AUDexo_!vw911e|;=znV7b8p7O}!MmY(_H%bcb z8wog)qTJi-*^On!EG(aku$MikNGver?UsZ+p)Xq=$q~sflYOnu!)v$CZ4DGAM@3qt z<{egX()SGzSyq_~on&D*gV5A(^ItXJvi31Ji80y~-DM1mUxE*-lUMC2ZReI2o zrB%Z?@qnXnvRwEbi1pA^td5YdABT&<4!fenDbj#eMjVWc#(g}k(p0N0dK!zcqD7Yr z7ycg3E|94mVy`k`>T4Z|pt%^n&dA1d4Q=`Fo11#M-$77(lJ)psutFJF+yJosWUV=< zya@@9mMtY#I{j1Z7LUXa_&u&_BZpLRB`<3^ir=^+dqddDvRiUS1Y)9*?>X?38kON{ z&5Uj=8O<#fhi!+*lQqMZRn9=$E`9KgqjfMdSsI7G#JGz;iCVL4EL8m|Z24H#vF9q! zRHcM_RO0piv#BR9s6jN$xSx;9+MRyw*)ZF!oPKOq~#p^_tHH#&*`H-4m$vUtcCETd4 zY#hl>+4x0mjq-CoFI~p_;@^>>Y7&4oD_IOIQo7DI3P4F}g*zI3f=D zdAjj<{1k_xGwaBu1?kRT!xKPm&Wk#(V3EkO*#<^_(*p_Co58{EDqv_EQ>q5QC6Dcv zr7GLfKNpJj<6MnHg@v>{2B3eipW$_IMUu|3Ci)H0b3(kD#!cDF&OURtP^HgUgZkVB z-m{}e8b<5`mW15{JFzY-b;w3~Sq7@Ax62+z^@+hyOb#JIzv{mCh)sX#+8`tD{?he7 zq_0K+8~pzT7ep%P{-dg97WacHY+`&DwF zDl$=;&#*;o=iwoTEN|wX)ZNG_v(P>#iPlXLR}Mz1WUafjk7aJuMg%9&(uCBWQPs@n z)?(4$d$iMt|1oD9$+4NMCMGkc{rm_<=B^%7nS1T5fm}=2%;fVyAlwIa`9~6R3p$l8 zD~9;6Axs~pdVaQ!AdL8clh`*O;Pd_EAodSlkN@8%?~Z4=+NjQv6=#ig%w(?!ntMC& z9T%iBfZ`k&L!JY;>L|!-p2roWe-EVoL^UE<`U0@_^KFAkvcq!J;Y+^bKCjSB67b)1 zU+`(u`r4Ex{~K4p;oI+}rIs<@i#O=Z2PXUzY7*t;Z$Bh+J!je%4TL#{#e!2csx*?R zL}-Yk88AFVllxoy-TRf4DIfU1VIReK&$J%$l$BN7dY{G8k;_9@2SzT^?xq7!pvH#1 z@0tGUq`o(-Tw9k=T~4}ioKFEc*JToFu_OZCA(5Z5*Igw-wfp(^0UZw}qu_a=(GSX6 z#|bx2j0_AZ^IU&g8b2`l<%knX_?9V`o8?#ybPfZe8WWC`Poy3n1<2^>?P?-f#o_29 zWc9dQh0Cm5@sKf$>^&Teq?bfRsLw_d{dvdVF9>zp>ZjeZsKr$P0Q7-DV0-2`d*co- z$!RbL^A=AwzlZTz$mwUw-C!MI5Gj#lwYt5O`*B5+`vVi$;UBs1huGVgUw`W@t>Mf9 z>~t9?40J)>4E9FhNr)hHW;-sZv$j~Brpl~QXaa?cV|&hXah1oBQ6Uo&9O+uf_@~9> z=t&n(AS!bTWV#8Ne_WR=$qz4bWhhUG*e2`kZx-IHs9M?{+2+UjzQ2FoWneGTeE=g!A>68R0QLN@F1?o`JX zW<#xSk#CZPYVDKra!EXO=UgOX({tR~r#tKKyh=_V(vgoTSoBEyIHV4SVi z;Q*BVSI=DBt2}k@4&QS@E;Hncmr;p7qeHR6v zT3{p?9){26ZSkwMn&&nnv_9U zI`&vqLqqscbgqPkrVa9KX)#(4M8J^@gRDUc^QMTF_XLHGybJF~|An3L#)sDVu{J;7 zFS{NALQwZoW-$`;Jat_J#2Ft_MV=xzAfk#iG?JV>zp!Y~$8%HH$V#G8kmWZ~B527L zsE;JbL!rLQsuZstjrb+TG*tCd^C;{~CZkGf_#Q-(f|LKvI3%N2`*Sm)z5X|e!4@(( zoT#dg^WUnHCC8n_819FpaTpDdM*ghqBwBgiowPiQqwjF^n5|**7IUvXAaL1w-=&t^ zH%Y7yMeC^CKHVN$tJ+f_sS?AQi1EQT9?96UT72W@mx$9Qho)wg!;yUhej+><&hY$0 zrROTCLFxfT>c2y#_VeK3fv58hcwVI3Rr0$Ev75;FakIi8H+T>bG9s$#v`Kp5d<`%@ z#6}alVaz3&GZQxnMp70%C8d{TBml=e6?dTRCKs9`6lo^}l~5a<@dtzl_g)`MZ@LT3 z?DNKD>Y9{q{JnYzJ^k^MKo!V=_P9F_9W!?l=jGXnOBCUW;hx?KUV_An+ z9Jj`;QZ{Sje~4_i;$ea4LryjTm(A~EImE2N_)V5F7;!MhJZgZC%J}Yw#r3SRQJMUc z94=0h?p3m0%!zaZWOC(TNy+{mOVwWLzXXfv|8b<6uj1sfVA5XU+asB8-6Igd>$8M{ Kc%`VJ|NjL>|Gv5a literal 0 HcmV?d00001 diff --git a/badger2040/libs/image_converter/test-images/shaun.png b/badger2040/libs/image_converter/test-images/shaun.png new file mode 100644 index 0000000000000000000000000000000000000000..1d80751a89a234357fa778aaed884939c48fbfeb GIT binary patch literal 47431 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 literal 0 HcmV?d00001 diff --git a/badger2040/os/badger2040/README.md b/badger2040/os/badger2040/README.md new file mode 100644 index 0000000..adfa116 --- /dev/null +++ b/badger2040/os/badger2040/README.md @@ -0,0 +1,92 @@ +# Badger 2040 Examples + +- [Function Examples](#function-examples) + - [Battery](#battery) + - [Button Test](#button-test) + - [LED](#led) + - [Pin interrupt](#pin-interrupt) +- [Application Examples](#application-examples) + - [Badge](#badge) + - [Checklist](#checklist) + - [Clock](#clock) + - [E-Book](#e-book) + - [Fonts](#fonts) + - [Image](#image) + - [QR gen](#qr-gen) + - [Launcher](#launcher) + + +## Function Examples + +### Battery +[battery.py](battery.py) + +An example of how to read the battery voltage and display a battery level indicator. + +### Button Test +[button_test.py](button_test.py) + +An example of how to read Badger2040's buttons and display a unique message for each. + +### LED +[led.py](led.py) + +Blinks Badger's LED on and off. + +### Pin interrupt +[pin_interrupt.py](pin_interrupt.py) + +An example of drawing text and graphics and using the buttons. + +## Application Examples + +### Badge +[badge.py](badge.py) + +Create your own name badge! This application looks for two files on your MicroPython drive: +* `badge.txt` - A text file containing 6 lines, corresponding to the 6 different pieces of text on the badge +* `badge-image.bin` - A 108x128px 1-bit colour depth image to display alongside the text. You can use `examples/badger2040/image_converter/convert.py` to convert them: + +```shell +python3 convert.py --binary --resize image_file_1.png image_file_2.png image_file_3.png +``` + +### Checklist +[list.py](list.py) + +A checklist application, letting you navigate through items and tick each of them off. + +### Clock +[clock.py](clock.py) + +A simple clock showing the time and date, that uses the E Ink's fast speed to update every second + +### E-Book +[ebook.py](ebook.py) + +A mini text file e-reader. Comes pre-loaded with an excerpt of The Wind In the Willows. + +### Fonts +[fonts.py](fonts.py) + +A demonstration of the various fonts that can be used in your programs. + +### Image +[image.py](image.py) + +An image gallery. Displays and lets you cycle through any images stored within the MicroPython device's `/images` directory. Images must be 296x128 pixels with 1-bit colour depth. You can use `examples/badger2040/image_converter/convert.py` to convert them: + +```shell +python3 convert.py --binary --resize image_file_1.png image_file_2.png image_file_3.png +``` + +### QR gen +[qrgen.py](qrgen.py) + +This application looks for a file on your MicroPython drive: +- `qrcode.txt` - A text file containing 9 lines. The first line should be a URL which will be converted into and displayed as a QR code. Up to 8 more lines of information can be added, which will be shown as plain text to the right of the QR code. + +### Launcher +[launcher.py](launcher.py) + +A launcher-style application, that provide a menu of other applications that can be loaded, as well as information such as battery level. diff --git a/badger2040/os/badger2040/assets/289-0-wind-in-the-willows-abridged.txt b/badger2040/os/badger2040/assets/289-0-wind-in-the-willows-abridged.txt new file mode 100644 index 0000000..f6243fd --- /dev/null +++ b/badger2040/os/badger2040/assets/289-0-wind-in-the-willows-abridged.txt @@ -0,0 +1,1341 @@ +The Project Gutenberg eBook of The Wind in the Willows, by Kenneth Grahame + +This eBook is for the use of anyone anywhere in the United States and +most other parts of the world at no cost and with almost no restrictions +whatsoever. You may copy it, give it away or re-use it under the terms +of the Project Gutenberg License included with this eBook or online at +www.gutenberg.org. If you are not located in the United States, you +will have to check the laws of the country where you are located before +using this eBook. + +Title: The Wind in the Willows + +Author: Kenneth Grahame + +Release Date: July, 1995 [eBook #289] +[Most recently updated: May 15, 2021] + +Language: English + +Character set encoding: UTF-8 + +Produced by: Mike Lough and David Widger + +*** START OF THE PROJECT GUTENBERG EBOOK THE WIND IN THE WILLOWS *** + +[Illustration] + + + + +The Wind in the Willows + +by Kenneth Grahame + +Author Of “The Golden Age,” “Dream Days,” Etc. + + +Contents + + CHAPTER I. THE RIVER BANK + CHAPTER II. THE OPEN ROAD + + + + +I. +THE RIVER BANK + + +The Mole had been working very hard all the morning, spring-cleaning +his little home. First with brooms, then with dusters; then on ladders +and steps and chairs, with a brush and a pail of whitewash; till he had +dust in his throat and eyes, and splashes of whitewash all over his +black fur, and an aching back and weary arms. Spring was moving in the +air above and in the earth below and around him, penetrating even his +dark and lowly little house with its spirit of divine discontent and +longing. It was small wonder, then, that he suddenly flung down his +brush on the floor, said “Bother!” and “O blow!” and also “Hang +spring-cleaning!” and bolted out of the house without even waiting to +put on his coat. Something up above was calling him imperiously, and he +made for the steep little tunnel which answered in his case to the +gravelled carriage-drive owned by animals whose residences are nearer +to the sun and air. So he scraped and scratched and scrabbled and +scrooged and then he scrooged again and scrabbled and scratched and +scraped, working busily with his little paws and muttering to himself, +“Up we go! Up we go!” till at last, pop! his snout came out into the +sunlight, and he found himself rolling in the warm grass of a great +meadow. + +“This is fine!” he said to himself. “This is better than whitewashing!” +The sunshine struck hot on his fur, soft breezes caressed his heated +brow, and after the seclusion of the cellarage he had lived in so long +the carol of happy birds fell on his dulled hearing almost like a +shout. Jumping off all his four legs at once, in the joy of living and +the delight of spring without its cleaning, he pursued his way across +the meadow till he reached the hedge on the further side. + +“Hold up!” said an elderly rabbit at the gap. “Sixpence for the +privilege of passing by the private road!” He was bowled over in an +instant by the impatient and contemptuous Mole, who trotted along the +side of the hedge chaffing the other rabbits as they peeped hurriedly +from their holes to see what the row was about. “Onion-sauce! +Onion-sauce!” he remarked jeeringly, and was gone before they could +think of a thoroughly satisfactory reply. Then they all started +grumbling at each other. “How _stupid_ you are! Why didn’t you tell +him——” “Well, why didn’t _you_ say——” “You might have reminded him——” +and so on, in the usual way; but, of course, it was then much too late, +as is always the case. + +It all seemed too good to be true. Hither and thither through the +meadows he rambled busily, along the hedgerows, across the copses, +finding everywhere birds building, flowers budding, leaves +thrusting—everything happy, and progressive, and occupied. And instead +of having an uneasy conscience pricking him and whispering “whitewash!” +he somehow could only feel how jolly it was to be the only idle dog +among all these busy citizens. After all, the best part of a holiday is +perhaps not so much to be resting yourself, as to see all the other +fellows busy working. + +He thought his happiness was complete when, as he meandered aimlessly +along, suddenly he stood by the edge of a full-fed river. Never in his +life had he seen a river before—this sleek, sinuous, full-bodied +animal, chasing and chuckling, gripping things with a gurgle and +leaving them with a laugh, to fling itself on fresh playmates that +shook themselves free, and were caught and held again. All was a-shake +and a-shiver—glints and gleams and sparkles, rustle and swirl, chatter +and bubble. The Mole was bewitched, entranced, fascinated. By the side +of the river he trotted as one trots, when very small, by the side of a +man who holds one spell-bound by exciting stories; and when tired at +last, he sat on the bank, while the river still chattered on to him, a +babbling procession of the best stories in the world, sent from the +heart of the earth to be told at last to the insatiable sea. + +As he sat on the grass and looked across the river, a dark hole in the +bank opposite, just above the water’s edge, caught his eye, and +dreamily he fell to considering what a nice snug dwelling-place it +would make for an animal with few wants and fond of a bijou riverside +residence, above flood level and remote from noise and dust. As he +gazed, something bright and small seemed to twinkle down in the heart +of it, vanished, then twinkled once more like a tiny star. But it could +hardly be a star in such an unlikely situation; and it was too +glittering and small for a glow-worm. Then, as he looked, it winked at +him, and so declared itself to be an eye; and a small face began +gradually to grow up round it, like a frame round a picture. + +A brown little face, with whiskers. + +A grave round face, with the same twinkle in its eye that had first +attracted his notice. + +Small neat ears and thick silky hair. + +It was the Water Rat! + +Then the two animals stood and regarded each other cautiously. + +“Hullo, Mole!” said the Water Rat. + +“Hullo, Rat!” said the Mole. + +“Would you like to come over?” enquired the Rat presently. + +“Oh, its all very well to _talk_,” said the Mole, rather pettishly, he +being new to a river and riverside life and its ways. + +The Rat said nothing, but stooped and unfastened a rope and hauled on +it; then lightly stepped into a little boat which the Mole had not +observed. It was painted blue outside and white within, and was just +the size for two animals; and the Mole’s whole heart went out to it at +once, even though he did not yet fully understand its uses. + +The Rat sculled smartly across and made fast. Then he held up his +forepaw as the Mole stepped gingerly down. “Lean on that!” he said. +“Now then, step lively!” and the Mole to his surprise and rapture found +himself actually seated in the stern of a real boat. + +“This has been a wonderful day!” said he, as the Rat shoved off and +took to the sculls again. “Do you know, I’ve never been in a boat +before in all my life.” + +“What?” cried the Rat, open-mouthed: “Never been in a—you never—well +I—what have you been doing, then?” + +“Is it so nice as all that?” asked the Mole shyly, though he was quite +prepared to believe it as he leant back in his seat and surveyed the +cushions, the oars, the rowlocks, and all the fascinating fittings, and +felt the boat sway lightly under him. + +“Nice? It’s the _only_ thing,” said the Water Rat solemnly, as he leant +forward for his stroke. “Believe me, my young friend, there is +_nothing_—absolute nothing—half so much worth doing as simply messing +about in boats. Simply messing,” he went on dreamily: +“messing—about—in—boats; messing——” + +“Look ahead, Rat!” cried the Mole suddenly. + +It was too late. The boat struck the bank full tilt. The dreamer, the +joyous oarsman, lay on his back at the bottom of the boat, his heels in +the air. + +“—about in boats—or _with_ boats,” the Rat went on composedly, picking +himself up with a pleasant laugh. “In or out of ’em, it doesn’t matter. +Nothing seems really to matter, that’s the charm of it. Whether you get +away, or whether you don’t; whether you arrive at your destination or +whether you reach somewhere else, or whether you never get anywhere at +all, you’re always busy, and you never do anything in particular; and +when you’ve done it there’s always something else to do, and you can do +it if you like, but you’d much better not. Look here! If you’ve really +nothing else on hand this morning, supposing we drop down the river +together, and have a long day of it?” + +The Mole waggled his toes from sheer happiness, spread his chest with a +sigh of full contentment, and leaned back blissfully into the soft +cushions. “_What_ a day I’m having!” he said. “Let us start at once!” + +“Hold hard a minute, then!” said the Rat. He looped the painter through +a ring in his landing-stage, climbed up into his hole above, and after +a short interval reappeared staggering under a fat, wicker +luncheon-basket. + +“Shove that under your feet,” he observed to the Mole, as he passed it +down into the boat. Then he untied the painter and took the sculls +again. + +“What’s inside it?” asked the Mole, wriggling with curiosity. + +“There’s cold chicken inside it,” replied the Rat briefly; “ +coldtonguecoldhamcoldbeefpickledgherkinssaladfrenchrollscresssandwiches +pottedme atgingerbeerlemonadesodawater——” + +“O stop, stop,” cried the Mole in ecstacies: “This is too much!” + +“Do you really think so?” enquired the Rat seriously. “It’s only what I +always take on these little excursions; and the other animals are +always telling me that I’m a mean beast and cut it _very_ fine!” + +The Mole never heard a word he was saying. Absorbed in the new life he +was entering upon, intoxicated with the sparkle, the ripple, the scents +and the sounds and the sunlight, he trailed a paw in the water and +dreamed long waking dreams. The Water Rat, like the good little fellow +he was, sculled steadily on and forebore to disturb him. + +“I like your clothes awfully, old chap,” he remarked after some half an +hour or so had passed. “I’m going to get a black velvet smoking-suit +myself some day, as soon as I can afford it.” + +“I beg your pardon,” said the Mole, pulling himself together with an +effort. “You must think me very rude; but all this is so new to me. +So—this—is—a—River!” + +“_The_ River,” corrected the Rat. + +“And you really live by the river? What a jolly life!” + +“By it and with it and on it and in it,” said the Rat. “It’s brother +and sister to me, and aunts, and company, and food and drink, and +(naturally) washing. It’s my world, and I don’t want any other. What it +hasn’t got is not worth having, and what it doesn’t know is not worth +knowing. Lord! the times we’ve had together! Whether in winter or +summer, spring or autumn, it’s always got its fun and its excitements. +When the floods are on in February, and my cellars and basement are +brimming with drink that’s no good to me, and the brown water runs by +my best bedroom window; or again when it all drops away and, shows +patches of mud that smells like plum-cake, and the rushes and weed clog +the channels, and I can potter about dry shod over most of the bed of +it and find fresh food to eat, and things careless people have dropped +out of boats!” + +“But isn’t it a bit dull at times?” the Mole ventured to ask. “Just you +and the river, and no one else to pass a word with?” + +“No one else to—well, I mustn’t be hard on you,” said the Rat with +forbearance. “You’re new to it, and of course you don’t know. The bank +is so crowded nowadays that many people are moving away altogether: O +no, it isn’t what it used to be, at all. Otters, kingfishers, +dabchicks, moorhens, all of them about all day long and always wanting +you to _do_ something—as if a fellow had no business of his own to +attend to!” + +“What lies over _there?_” asked the Mole, waving a paw towards a +background of woodland that darkly framed the water-meadows on one side +of the river. + +“That? O, that’s just the Wild Wood,” said the Rat shortly. “We don’t +go there very much, we river-bankers.” + +“Aren’t they—aren’t they very _nice_ people in there?” said the Mole, a +trifle nervously. + +“W-e-ll,” replied the Rat, “let me see. The squirrels are all right. +_And_ the rabbits—some of ’em, but rabbits are a mixed lot. And then +there’s Badger, of course. He lives right in the heart of it; wouldn’t +live anywhere else, either, if you paid him to do it. Dear old Badger! +Nobody interferes with _him_. They’d better not,” he added +significantly. + +“Why, who _should_ interfere with him?” asked the Mole. + +“Well, of course—there—are others,” explained the Rat in a hesitating +sort of way. + +“Weasels—and stoats—and foxes—and so on. They’re all right in a way—I’m +very good friends with them—pass the time of day when we meet, and all +that—but they break out sometimes, there’s no denying it, and +then—well, you can’t really trust them, and that’s the fact.” + +The Mole knew well that it is quite against animal-etiquette to dwell +on possible trouble ahead, or even to allude to it; so he dropped the +subject. + +“And beyond the Wild Wood again?” he asked: “Where it’s all blue and +dim, and one sees what may be hills or perhaps they mayn’t, and +something like the smoke of towns, or is it only cloud-drift?” + +“Beyond the Wild Wood comes the Wide World,” said the Rat. “And that’s +something that doesn’t matter, either to you or me. I’ve never been +there, and I’m never going, nor you either, if you’ve got any sense at +all. Don’t ever refer to it again, please. Now then! Here’s our +backwater at last, where we’re going to lunch.” + +Leaving the main stream, they now passed into what seemed at first +sight like a little land-locked lake. Green turf sloped down to either +edge, brown snaky tree-roots gleamed below the surface of the quiet +water, while ahead of them the silvery shoulder and foamy tumble of a +weir, arm-in-arm with a restless dripping mill-wheel, that held up in +its turn a grey-gabled mill-house, filled the air with a soothing +murmur of sound, dull and smothery, yet with little clear voices +speaking up cheerfully out of it at intervals. It was so very beautiful +that the Mole could only hold up both forepaws and gasp, “O my! O my! O +my!” + +The Rat brought the boat alongside the bank, made her fast, helped the +still awkward Mole safely ashore, and swung out the luncheon-basket. +The Mole begged as a favour to be allowed to unpack it all by himself; +and the Rat was very pleased to indulge him, and to sprawl at full +length on the grass and rest, while his excited friend shook out the +table-cloth and spread it, took out all the mysterious packets one by +one and arranged their contents in due order, still gasping, “O my! O +my!” at each fresh revelation. When all was ready, the Rat said, “Now, +pitch in, old fellow!” and the Mole was indeed very glad to obey, for +he had started his spring-cleaning at a very early hour that morning, +as people _will_ do, and had not paused for bite or sup; and he had +been through a very great deal since that distant time which now seemed +so many days ago. + +“What are you looking at?” said the Rat presently, when the edge of +their hunger was somewhat dulled, and the Mole’s eyes were able to +wander off the table-cloth a little. + +“I am looking,” said the Mole, “at a streak of bubbles that I see +travelling along the surface of the water. That is a thing that strikes +me as funny.” + +“Bubbles? Oho!” said the Rat, and chirruped cheerily in an inviting +sort of way. + +A broad glistening muzzle showed itself above the edge of the bank, and +the Otter hauled himself out and shook the water from his coat. + +“Greedy beggars!” he observed, making for the provender. “Why didn’t +you invite me, Ratty?” + +“This was an impromptu affair,” explained the Rat. “By the way—my +friend Mr. Mole.” + +“Proud, I’m sure,” said the Otter, and the two animals were friends +forthwith. + +“Such a rumpus everywhere!” continued the Otter. “All the world seems +out on the river to-day. I came up this backwater to try and get a +moment’s peace, and then stumble upon you fellows!—At least—I beg +pardon—I don’t exactly mean that, you know.” + +There was a rustle behind them, proceeding from a hedge wherein last +year’s leaves still clung thick, and a stripy head, with high shoulders +behind it, peered forth on them. + +“Come on, old Badger!” shouted the Rat. + +The Badger trotted forward a pace or two; then grunted, “H’m! Company,” +and turned his back and disappeared from view. + +“That’s _just_ the sort of fellow he is!” observed the disappointed +Rat. “Simply hates Society! Now we shan’t see any more of him to-day. +Well, tell us, _who’s_ out on the river?” + +“Toad’s out, for one,” replied the Otter. “In his brand-new wager-boat; +new togs, new everything!” + +The two animals looked at each other and laughed. + +“Once, it was nothing but sailing,” said the Rat, “Then he tired of +that and took to punting. Nothing would please him but to punt all day +and every day, and a nice mess he made of it. Last year it was +house-boating, and we all had to go and stay with him in his +house-boat, and pretend we liked it. He was going to spend the rest of +his life in a house-boat. It’s all the same, whatever he takes up; he +gets tired of it, and starts on something fresh.” + +“Such a good fellow, too,” remarked the Otter reflectively: “But no +stability—especially in a boat!” + +From where they sat they could get a glimpse of the main stream across +the island that separated them; and just then a wager-boat flashed into +view, the rower—a short, stout figure—splashing badly and rolling a +good deal, but working his hardest. The Rat stood up and hailed him, +but Toad—for it was he—shook his head and settled sternly to his work. + +“He’ll be out of the boat in a minute if he rolls like that,” said the +Rat, sitting down again. + +“Of course he will,” chuckled the Otter. “Did I ever tell you that good +story about Toad and the lock-keeper? It happened this way. Toad....” + +An errant May-fly swerved unsteadily athwart the current in the +intoxicated fashion affected by young bloods of May-flies seeing life. +A swirl of water and a “cloop!” and the May-fly was visible no more. + +Neither was the Otter. + +The Mole looked down. The voice was still in his ears, but the turf +whereon he had sprawled was clearly vacant. Not an Otter to be seen, as +far as the distant horizon. + +But again there was a streak of bubbles on the surface of the river. + +The Rat hummed a tune, and the Mole recollected that animal-etiquette +forbade any sort of comment on the sudden disappearance of one’s +friends at any moment, for any reason or no reason whatever. + +“Well, well,” said the Rat, “I suppose we ought to be moving. I wonder +which of us had better pack the luncheon-basket?” He did not speak as +if he was frightfully eager for the treat. + +“O, please let me,” said the Mole. So, of course, the Rat let him. + +Packing the basket was not quite such pleasant work as unpacking the +basket. It never is. But the Mole was bent on enjoying everything, and +although just when he had got the basket packed and strapped up tightly +he saw a plate staring up at him from the grass, and when the job had +been done again the Rat pointed out a fork which anybody ought to have +seen, and last of all, behold! the mustard pot, which he had been +sitting on without knowing it—still, somehow, the thing got finished at +last, without much loss of temper. + +The afternoon sun was getting low as the Rat sculled gently homewards +in a dreamy mood, murmuring poetry-things over to himself, and not +paying much attention to Mole. But the Mole was very full of lunch, and +self-satisfaction, and pride, and already quite at home in a boat (so +he thought) and was getting a bit restless besides: and presently he +said, “Ratty! Please, _I_ want to row, now!” + +The Rat shook his head with a smile. “Not yet, my young friend,” he +said—“wait till you’ve had a few lessons. It’s not so easy as it +looks.” + +The Mole was quiet for a minute or two. But he began to feel more and +more jealous of Rat, sculling so strongly and so easily along, and his +pride began to whisper that he could do it every bit as well. He jumped +up and seized the sculls, so suddenly, that the Rat, who was gazing out +over the water and saying more poetry-things to himself, was taken by +surprise and fell backwards off his seat with his legs in the air for +the second time, while the triumphant Mole took his place and grabbed +the sculls with entire confidence. + +“Stop it, you _silly_ ass!” cried the Rat, from the bottom of the boat. +“You can’t do it! You’ll have us over!” + +The Mole flung his sculls back with a flourish, and made a great dig at +the water. He missed the surface altogether, his legs flew up above his +head, and he found himself lying on the top of the prostrate Rat. +Greatly alarmed, he made a grab at the side of the boat, and the next +moment—Sploosh! + +Over went the boat, and he found himself struggling in the river. + +O my, how cold the water was, and O, how _very_ wet it felt. How it +sang in his ears as he went down, down, down! How bright and welcome +the sun looked as he rose to the surface coughing and spluttering! How +black was his despair when he felt himself sinking again! Then a firm +paw gripped him by the back of his neck. It was the Rat, and he was +evidently laughing—the Mole could _feel_ him laughing, right down his +arm and through his paw, and so into his—the Mole’s—neck. + +The Rat got hold of a scull and shoved it under the Mole’s arm; then he +did the same by the other side of him and, swimming behind, propelled +the helpless animal to shore, hauled him out, and set him down on the +bank, a squashy, pulpy lump of misery. + +When the Rat had rubbed him down a bit, and wrung some of the wet out +of him, he said, “Now, then, old fellow! Trot up and down the +towing-path as hard as you can, till you’re warm and dry again, while I +dive for the luncheon-basket.” + +So the dismal Mole, wet without and ashamed within, trotted about till +he was fairly dry, while the Rat plunged into the water again, +recovered the boat, righted her and made her fast, fetched his floating +property to shore by degrees, and finally dived successfully for the +luncheon-basket and struggled to land with it. + +When all was ready for a start once more, the Mole, limp and dejected, +took his seat in the stern of the boat; and as they set off, he said in +a low voice, broken with emotion, “Ratty, my generous friend! I am very +sorry indeed for my foolish and ungrateful conduct. My heart quite +fails me when I think how I might have lost that beautiful +luncheon-basket. Indeed, I have been a complete ass, and I know it. +Will you overlook it this once and forgive me, and let things go on as +before?” + +“That’s all right, bless you!” responded the Rat cheerily. “What’s a +little wet to a Water Rat? I’m more in the water than out of it most +days. Don’t you think any more about it; and, look here! I really think +you had better come and stop with me for a little time. It’s very plain +and rough, you know—not like Toad’s house at all—but you haven’t seen +that yet; still, I can make you comfortable. And I’ll teach you to row, +and to swim, and you’ll soon be as handy on the water as any of us.” + +The Mole was so touched by his kind manner of speaking that he could +find no voice to answer him; and he had to brush away a tear or two +with the back of his paw. But the Rat kindly looked in another +direction, and presently the Mole’s spirits revived again, and he was +even able to give some straight back-talk to a couple of moorhens who +were sniggering to each other about his bedraggled appearance. + +When they got home, the Rat made a bright fire in the parlour, and +planted the Mole in an arm-chair in front of it, having fetched down a +dressing-gown and slippers for him, and told him river stories till +supper-time. Very thrilling stories they were, too, to an +earth-dwelling animal like Mole. Stories about weirs, and sudden +floods, and leaping pike, and steamers that flung hard bottles—at least +bottles were certainly flung, and _from_ steamers, so presumably _by_ +them; and about herons, and how particular they were whom they spoke +to; and about adventures down drains, and night-fishings with Otter, or +excursions far a-field with Badger. Supper was a most cheerful meal; +but very shortly afterwards a terribly sleepy Mole had to be escorted +upstairs by his considerate host, to the best bedroom, where he soon +laid his head on his pillow in great peace and contentment, knowing +that his new-found friend the River was lapping the sill of his window. + +This day was only the first of many similar ones for the emancipated +Mole, each of them longer and full of interest as the ripening summer +moved onward. He learnt to swim and to row, and entered into the joy of +running water; and with his ear to the reed-stems he caught, at +intervals, something of what the wind went whispering so constantly +among them. + + + + +II. +THE OPEN ROAD + + +“Ratty,” said the Mole suddenly, one bright summer morning, “if you +please, I want to ask you a favour.” + +The Rat was sitting on the river bank, singing a little song. He had +just composed it himself, so he was very taken up with it, and would +not pay proper attention to Mole or anything else. Since early morning +he had been swimming in the river, in company with his friends the +ducks. And when the ducks stood on their heads suddenly, as ducks will, +he would dive down and tickle their necks, just under where their chins +would be if ducks had chins, till they were forced to come to the +surface again in a hurry, spluttering and angry and shaking their +feathers at him, for it is impossible to say quite _all_ you feel when +your head is under water. At last they implored him to go away and +attend to his own affairs and leave them to mind theirs. So the Rat +went away, and sat on the river bank in the sun, and made up a song +about them, which he called + +“DUCKS’ DITTY.” + +All along the backwater, +Through the rushes tall, +Ducks are a-dabbling, +Up tails all! +Ducks’ tails, drakes’ tails, +Yellow feet a-quiver, +Yellow bills all out of sight +Busy in the river! + +Slushy green undergrowth +Where the roach swim— +Here we keep our larder, +Cool and full and dim. + +Everyone for what he likes! +_We_ like to be +Heads down, tails up, +Dabbling free! + +High in the blue above +Swifts whirl and call— +_We_ are down a-dabbling +Uptails all! + + +“I don’t know that I think so _very_ much of that little song, Rat,” +observed the Mole cautiously. He was no poet himself and didn’t care +who knew it; and he had a candid nature. + +“Nor don’t the ducks neither,” replied the Rat cheerfully. “They say, +‘_Why_ can’t fellows be allowed to do what they like _when_ they like +and _as_ they like, instead of other fellows sitting on banks and +watching them all the time and making remarks and poetry and things +about them? What _nonsense_ it all is!’ That’s what the ducks say.” + +“So it is, so it is,” said the Mole, with great heartiness. + +“No, it isn’t!” cried the Rat indignantly. + +“Well then, it isn’t, it isn’t,” replied the Mole soothingly. “But what +I wanted to ask you was, won’t you take me to call on Mr. Toad? I’ve +heard so much about him, and I do so want to make his acquaintance.” + +“Why, certainly,” said the good-natured Rat, jumping to his feet and +dismissing poetry from his mind for the day. “Get the boat out, and +we’ll paddle up there at once. It’s never the wrong time to call on +Toad. Early or late he’s always the same fellow. Always good-tempered, +always glad to see you, always sorry when you go!” + +“He must be a very nice animal,” observed the Mole, as he got into the +boat and took the sculls, while the Rat settled himself comfortably in +the stern. + +“He is indeed the best of animals,” replied Rat. “So simple, so +good-natured, and so affectionate. Perhaps he’s not very clever—we +can’t all be geniuses; and it may be that he is both boastful and +conceited. But he has got some great qualities, has Toady.” + +Rounding a bend in the river, they came in sight of a handsome, +dignified old house of mellowed red brick, with well-kept lawns +reaching down to the water’s edge. + +“There’s Toad Hall,” said the Rat; “and that creek on the left, where +the notice-board says, ‘Private. No landing allowed,’ leads to his +boat-house, where we’ll leave the boat. The stables are over there to +the right. That’s the banqueting-hall you’re looking at now—very old, +that is. Toad is rather rich, you know, and this is really one of the +nicest houses in these parts, though we never admit as much to Toad.” + +They glided up the creek, and the Mole shipped his sculls as they +passed into the shadow of a large boat-house. Here they saw many +handsome boats, slung from the cross beams or hauled up on a slip, but +none in the water; and the place had an unused and a deserted air. + +The Rat looked around him. “I understand,” said he. “Boating is played +out. He’s tired of it, and done with it. I wonder what new fad he has +taken up now? Come along and let’s look him up. We shall hear all about +it quite soon enough.” + +They disembarked, and strolled across the gay flower-decked lawns in +search of Toad, whom they presently happened upon resting in a wicker +garden-chair, with a pre-occupied expression of face, and a large map +spread out on his knees. + +“Hooray!” he cried, jumping up on seeing them, “this is splendid!” He +shook the paws of both of them warmly, never waiting for an +introduction to the Mole. “How _kind_ of you!” he went on, dancing +round them. “I was just going to send a boat down the river for you, +Ratty, with strict orders that you were to be fetched up here at once, +whatever you were doing. I want you badly—both of you. Now what will +you take? Come inside and have something! You don’t know how lucky it +is, your turning up just now!” + +“Let’s sit quiet a bit, Toady!” said the Rat, throwing himself into an +easy chair, while the Mole took another by the side of him and made +some civil remark about Toad’s “delightful residence.” + +“Finest house on the whole river,” cried Toad boisterously. “Or +anywhere else, for that matter,” he could not help adding. + +Here the Rat nudged the Mole. Unfortunately the Toad saw him do it, and +turned very red. There was a moment’s painful silence. Then Toad burst +out laughing. “All right, Ratty,” he said. “It’s only my way, you know. +And it’s not such a very bad house, is it? You know you rather like it +yourself. Now, look here. Let’s be sensible. You are the very animals I +wanted. You’ve got to help me. It’s most important!” + +“It’s about your rowing, I suppose,” said the Rat, with an innocent +air. “You’re getting on fairly well, though you splash a good bit +still. With a great deal of patience, and any quantity of coaching, you +may——” + +“O, pooh! boating!” interrupted the Toad, in great disgust. “Silly +boyish amusement. I’ve given that up _long_ ago. Sheer waste of time, +that’s what it is. It makes me downright sorry to see you fellows, who +ought to know better, spending all your energies in that aimless +manner. No, I’ve discovered the real thing, the only genuine occupation +for a life time. I propose to devote the remainder of mine to it, and +can only regret the wasted years that lie behind me, squandered in +trivialities. Come with me, dear Ratty, and your amiable friend also, +if he will be so very good, just as far as the stable-yard, and you +shall see what you shall see!” + +He led the way to the stable-yard accordingly, the Rat following with a +most mistrustful expression; and there, drawn out of the coach house +into the open, they saw a gipsy caravan, shining with newness, painted +a canary-yellow picked out with green, and red wheels. + +“There you are!” cried the Toad, straddling and expanding himself. +“There’s real life for you, embodied in that little cart. The open +road, the dusty highway, the heath, the common, the hedgerows, the +rolling downs! Camps, villages, towns, cities! Here to-day, up and off +to somewhere else to-morrow! Travel, change, interest, excitement! The +whole world before you, and a horizon that’s always changing! And mind! +this is the very finest cart of its sort that was ever built, without +any exception. Come inside and look at the arrangements. Planned ’em +all myself, I did!” + +The Mole was tremendously interested and excited, and followed him +eagerly up the steps and into the interior of the caravan. The Rat only +snorted and thrust his hands deep into his pockets, remaining where he +was. + +It was indeed very compact and comfortable. Little sleeping bunks—a +little table that folded up against the wall—a cooking-stove, lockers, +bookshelves, a bird-cage with a bird in it; and pots, pans, jugs and +kettles of every size and variety. + +“All complete!” said the Toad triumphantly, pulling open a locker. “You +see—biscuits, potted lobster, sardines—everything you can possibly +want. Soda-water here—baccy there—letter-paper, bacon, jam, cards and +dominoes—you’ll find,” he continued, as they descended the steps again, +“you’ll find that nothing what ever has been forgotten, when we make +our start this afternoon.” + +“I beg your pardon,” said the Rat slowly, as he chewed a straw, “but +did I overhear you say something about ‘_we_,’ and ‘_start_,’ and +‘_this afternoon?_’” + +“Now, you dear good old Ratty,” said Toad, imploringly, “don’t begin +talking in that stiff and sniffy sort of way, because you know you’ve +_got_ to come. I can’t possibly manage without you, so please consider +it settled, and don’t argue—it’s the one thing I can’t stand. You +surely don’t mean to stick to your dull fusty old river all your life, +and just live in a hole in a bank, and _boat?_ I want to show you the +world! I’m going to make an _animal_ of you, my boy!” + +“I don’t care,” said the Rat, doggedly. “I’m not coming, and that’s +flat. And I _am_ going to stick to my old river, _and_ live in a hole, +_and_ boat, as I’ve always done. And what’s more, Mole’s going to stick +to me and do as I do, aren’t you, Mole?” + +“Of course I am,” said the Mole, loyally. “I’ll always stick to you, +Rat, and what you say is to be—has got to be. All the same, it sounds +as if it might have been—well, rather fun, you know!” he added, +wistfully. Poor Mole! The Life Adventurous was so new a thing to him, +and so thrilling; and this fresh aspect of it was so tempting; and he +had fallen in love at first sight with the canary-coloured cart and all +its little fitments. + +The Rat saw what was passing in his mind, and wavered. He hated +disappointing people, and he was fond of the Mole, and would do almost +anything to oblige him. Toad was watching both of them closely. + +“Come along in, and have some lunch,” he said, diplomatically, “and +we’ll talk it over. We needn’t decide anything in a hurry. Of course, +_I_ don’t really care. I only want to give pleasure to you fellows. +‘Live for others!’ That’s my motto in life.” + +During luncheon—which was excellent, of course, as everything at Toad +Hall always was—the Toad simply let himself go. Disregarding the Rat, +he proceeded to play upon the inexperienced Mole as on a harp. +Naturally a voluble animal, and always mastered by his imagination, he +painted the prospects of the trip and the joys of the open life and the +roadside in such glowing colours that the Mole could hardly sit in his +chair for excitement. Somehow, it soon seemed taken for granted by all +three of them that the trip was a settled thing; and the Rat, though +still unconvinced in his mind, allowed his good-nature to over-ride his +personal objections. He could not bear to disappoint his two friends, +who were already deep in schemes and anticipations, planning out each +day’s separate occupation for several weeks ahead. + +When they were quite ready, the now triumphant Toad led his companions +to the paddock and set them to capture the old grey horse, who, without +having been consulted, and to his own extreme annoyance, had been told +off by Toad for the dustiest job in this dusty expedition. He frankly +preferred the paddock, and took a deal of catching. Meantime Toad +packed the lockers still tighter with necessaries, and hung nosebags, +nets of onions, bundles of hay, and baskets from the bottom of the +cart. At last the horse was caught and harnessed, and they set off, all +talking at once, each animal either trudging by the side of the cart or +sitting on the shaft, as the humour took him. It was a golden +afternoon. The smell of the dust they kicked up was rich and +satisfying; out of thick orchards on either side the road, birds called +and whistled to them cheerily; good-natured wayfarers, passing them, +gave them “Good-day,” or stopped to say nice things about their +beautiful cart; and rabbits, sitting at their front doors in the +hedgerows, held up their fore-paws, and said, “O my! O my! O my!” + +Late in the evening, tired and happy and miles from home, they drew up +on a remote common far from habitations, turned the horse loose to +graze, and ate their simple supper sitting on the grass by the side of +the cart. Toad talked big about all he was going to do in the days to +come, while stars grew fuller and larger all around them, and a yellow +moon, appearing suddenly and silently from nowhere in particular, came +to keep them company and listen to their talk. At last they turned in +to their little bunks in the cart; and Toad, kicking out his legs, +sleepily said, “Well, good night, you fellows! This is the real life +for a gentleman! Talk about your old river!” + +“I _don’t_ talk about my river,” replied the patient Rat. “You _know_ I +don’t, Toad. But I _think_ about it,” he added pathetically, in a lower +tone: “I think about it—all the time!” + +The Mole reached out from under his blanket, felt for the Rat’s paw in +the darkness, and gave it a squeeze. “I’ll do whatever you like, +Ratty,” he whispered. “Shall we run away to-morrow morning, quite +early—_very_ early—and go back to our dear old hole on the river?” + +“No, no, we’ll see it out,” whispered back the Rat. “Thanks awfully, +but I ought to stick by Toad till this trip is ended. It wouldn’t be +safe for him to be left to himself. It won’t take very long. His fads +never do. Good night!” + +The end was indeed nearer than even the Rat suspected. + +After so much open air and excitement the Toad slept very soundly, and +no amount of shaking could rouse him out of bed next morning. So the +Mole and Rat turned to, quietly and manfully, and while the Rat saw to +the horse, and lit a fire, and cleaned last night’s cups and platters, +and got things ready for breakfast, the Mole trudged off to the nearest +village, a long way off, for milk and eggs and various necessaries the +Toad had, of course, forgotten to provide. The hard work had all been +done, and the two animals were resting, thoroughly exhausted, by the +time Toad appeared on the scene, fresh and gay, remarking what a +pleasant easy life it was they were all leading now, after the cares +and worries and fatigues of housekeeping at home. + +They had a pleasant ramble that day over grassy downs and along narrow +by-lanes, and camped as before, on a common, only this time the two +guests took care that Toad should do his fair share of work. In +consequence, when the time came for starting next morning, Toad was by +no means so rapturous about the simplicity of the primitive life, and +indeed attempted to resume his place in his bunk, whence he was hauled +by force. Their way lay, as before, across country by narrow lanes, and +it was not till the afternoon that they came out on the high-road, +their first high-road; and there disaster, fleet and unforeseen, sprang +out on them—disaster momentous indeed to their expedition, but simply +overwhelming in its effect on the after-career of Toad. + +They were strolling along the high-road easily, the Mole by the horse’s +head, talking to him, since the horse had complained that he was being +frightfully left out of it, and nobody considered him in the least; the +Toad and the Water Rat walking behind the cart talking together—at +least Toad was talking, and Rat was saying at intervals, “Yes, +precisely; and what did _you_ say to _him?_”—and thinking all the time +of something very different, when far behind them they heard a faint +warning hum; like the drone of a distant bee. Glancing back, they saw a +small cloud of dust, with a dark centre of energy, advancing on them at +incredible speed, while from out the dust a faint “Poop-poop!” wailed +like an uneasy animal in pain. Hardly regarding it, they turned to +resume their conversation, when in an instant (as it seemed) the +peaceful scene was changed, and with a blast of wind and a whirl of +sound that made them jump for the nearest ditch, It was on them! The +“Poop-poop” rang with a brazen shout in their ears, they had a moment’s +glimpse of an interior of glittering plate-glass and rich morocco, and +the magnificent motor-car, immense, breath-snatching, passionate, with +its pilot tense and hugging his wheel, possessed all earth and air for +the fraction of a second, flung an enveloping cloud of dust that +blinded and enwrapped them utterly, and then dwindled to a speck in the +far distance, changed back into a droning bee once more. + +The old grey horse, dreaming, as he plodded along, of his quiet +paddock, in a new raw situation such as this simply abandoned himself +to his natural emotions. Rearing, plunging, backing steadily, in spite +of all the Mole’s efforts at his head, and all the Mole’s lively +language directed at his better feelings, he drove the cart backwards +towards the deep ditch at the side of the road. It wavered an +instant—then there was a heartrending crash—and the canary-coloured +cart, their pride and their joy, lay on its side in the ditch, an +irredeemable wreck. + +The Rat danced up and down in the road, simply transported with +passion. “You villains!” he shouted, shaking both fists, “You +scoundrels, you highwaymen, you—you—roadhogs!—I’ll have the law of you! +I’ll report you! I’ll take you through all the Courts!” His +home-sickness had quite slipped away from him, and for the moment he +was the skipper of the canary-coloured vessel driven on a shoal by the +reckless jockeying of rival mariners, and he was trying to recollect +all the fine and biting things he used to say to masters of +steam-launches when their wash, as they drove too near the bank, used +to flood his parlour-carpet at home. + +Toad sat straight down in the middle of the dusty road, his legs +stretched out before him, and stared fixedly in the direction of the +disappearing motor-car. He breathed short, his face wore a placid +satisfied expression, and at intervals he faintly murmured “Poop-poop!” + +The Mole was busy trying to quiet the horse, which he succeeded in +doing after a time. Then he went to look at the cart, on its side in +the ditch. It was indeed a sorry sight. Panels and windows smashed, +axles hopelessly bent, one wheel off, sardine-tins scattered over the +wide world, and the bird in the bird-cage sobbing pitifully and calling +to be let out. + +The Rat came to help him, but their united efforts were not sufficient +to right the cart. “Hi! Toad!” they cried. “Come and bear a hand, can’t +you!” + +The Toad never answered a word, or budged from his seat in the road; so +they went to see what was the matter with him. They found him in a sort +of a trance, a happy smile on his face, his eyes still fixed on the +dusty wake of their destroyer. At intervals he was still heard to +murmur “Poop-poop!” + +The Rat shook him by the shoulder. “Are you coming to help us, Toad?” +he demanded sternly. + +“Glorious, stirring sight!” murmured Toad, never offering to move. “The +poetry of motion! The _real_ way to travel! The _only_ way to travel! +Here to-day—in next week to-morrow! Villages skipped, towns and cities +jumped—always somebody else’s horizon! O bliss! O poop-poop! O my! O +my!” + +“O _stop_ being an ass, Toad!” cried the Mole despairingly. + +“And to think I never _knew!_” went on the Toad in a dreamy monotone. +“All those wasted years that lie behind me, I never knew, never even +_dreamt!_ But _now_—but now that I know, now that I fully realise! O +what a flowery track lies spread before me, henceforth! What +dust-clouds shall spring up behind me as I speed on my reckless way! +What carts I shall fling carelessly into the ditch in the wake of my +magnificent onset! Horrid little carts—common carts—canary-coloured +carts!” + +“What are we to do with him?” asked the Mole of the Water Rat. + +“Nothing at all,” replied the Rat firmly. “Because there is really +nothing to be done. You see, I know him from of old. He is now +possessed. He has got a new craze, and it always takes him that way, in +its first stage. He’ll continue like that for days now, like an animal +walking in a happy dream, quite useless for all practical purposes. +Never mind him. Let’s go and see what there is to be done about the +cart.” + +A careful inspection showed them that, even if they succeeded in +righting it by themselves, the cart would travel no longer. The axles +were in a hopeless state, and the missing wheel was shattered into +pieces. + +The Rat knotted the horse’s reins over his back and took him by the +head, carrying the bird cage and its hysterical occupant in the other +hand. “Come on!” he said grimly to the Mole. “It’s five or six miles to +the nearest town, and we shall just have to walk it. The sooner we make +a start the better.” + +“But what about Toad?” asked the Mole anxiously, as they set off +together. “We can’t leave him here, sitting in the middle of the road +by himself, in the distracted state he’s in! It’s not safe. Supposing +another Thing were to come along?” + +“O, _bother_ Toad,” said the Rat savagely; “I’ve done with him!” + +They had not proceeded very far on their way, however, when there was a +pattering of feet behind them, and Toad caught them up and thrust a paw +inside the elbow of each of them; still breathing short and staring +into vacancy. + +“Now, look here, Toad!” said the Rat sharply: “as soon as we get to the +town, you’ll have to go straight to the police-station, and see if they +know anything about that motor-car and who it belongs to, and lodge a +complaint against it. And then you’ll have to go to a blacksmith’s or a +wheelwright’s and arrange for the cart to be fetched and mended and put +to rights. It’ll take time, but it’s not quite a hopeless smash. +Meanwhile, the Mole and I will go to an inn and find comfortable rooms +where we can stay till the cart’s ready, and till your nerves have +recovered their shock.” + +“Police-station! Complaint!” murmured Toad dreamily. “Me _complain_ of +that beautiful, that heavenly vision that has been vouchsafed me! +_Mend_ the _cart!_ I’ve done with carts for ever. I never want to see +the cart, or to hear of it, again. O, Ratty! You can’t think how +obliged I am to you for consenting to come on this trip! I wouldn’t +have gone without you, and then I might never have seen that—that swan, +that sunbeam, that thunderbolt! I might never have heard that +entrancing sound, or smelt that bewitching smell! I owe it all to you, +my best of friends!” + +The Rat turned from him in despair. “You see what it is?” he said to +the Mole, addressing him across Toad’s head: “He’s quite hopeless. I +give it up—when we get to the town we’ll go to the railway station, and +with luck we may pick up a train there that’ll get us back to riverbank +to-night. And if ever you catch me going a-pleasuring with this +provoking animal again!”—He snorted, and during the rest of that weary +trudge addressed his remarks exclusively to Mole. + +On reaching the town they went straight to the station and deposited +Toad in the second-class waiting-room, giving a porter twopence to keep +a strict eye on him. They then left the horse at an inn stable, and +gave what directions they could about the cart and its contents. +Eventually, a slow train having landed them at a station not very far +from Toad Hall, they escorted the spell-bound, sleep-walking Toad to +his door, put him inside it, and instructed his housekeeper to feed +him, undress him, and put him to bed. Then they got out their boat from +the boat-house, sculled down the river home, and at a very late hour +sat down to supper in their own cosy riverside parlour, to the Rat’s +great joy and contentment. + +The following evening the Mole, who had risen late and taken things +very easy all day, was sitting on the bank fishing, when the Rat, who +had been looking up his friends and gossiping, came strolling along to +find him. “Heard the news?” he said. “There’s nothing else being talked +about, all along the river bank. Toad went up to Town by an early train +this morning. And he has ordered a large and very expensive motor-car.” + + + +*** END OF THE PROJECT GUTENBERG EBOOK THE WIND IN THE WILLOWS *** + +***** This file should be named 289-0.txt or 289-0.zip ***** +This and all associated files of various formats will be found in: + https://www.gutenberg.org/2/8/289/ + +Updated editions will replace the previous one--the old editions will +be renamed. + +Creating the works from print editions not protected by U.S. copyright +law means that no one owns a United States copyright in these works, +so the Foundation (and you!) can copy and distribute it in the +United States without permission and without paying copyright +royalties. Special rules, set forth in the General Terms of Use part +of this license, apply to copying and distributing Project +Gutenberg-tm electronic works to protect the PROJECT GUTENBERG-tm +concept and trademark. Project Gutenberg is a registered trademark, +and may not be used if you charge for an eBook, except by following +the terms of the trademark license, including paying royalties for use +of the Project Gutenberg trademark. If you do not charge anything for +copies of this eBook, complying with the trademark license is very +easy. You may use this eBook for nearly any purpose such as creation +of derivative works, reports, performances and research. Project +Gutenberg eBooks may be modified and printed and given away--you may +do practically ANYTHING in the United States with eBooks not protected +by U.S. copyright law. Redistribution is subject to the trademark +license, especially commercial redistribution. + +START: FULL LICENSE + +THE FULL PROJECT GUTENBERG LICENSE +PLEASE READ THIS BEFORE YOU DISTRIBUTE OR USE THIS WORK + +To protect the Project Gutenberg-tm mission of promoting the free +distribution of electronic works, by using or distributing this work +(or any other work associated in any way with the phrase "Project +Gutenberg"), you agree to comply with all the terms of the Full +Project Gutenberg-tm License available with this file or online at +www.gutenberg.org/license. + +Section 1. General Terms of Use and Redistributing Project +Gutenberg-tm electronic works + +1.A. By reading or using any part of this Project Gutenberg-tm +electronic work, you indicate that you have read, understand, agree to +and accept all the terms of this license and intellectual property +(trademark/copyright) agreement. If you do not agree to abide by all +the terms of this agreement, you must cease using and return or +destroy all copies of Project Gutenberg-tm electronic works in your +possession. If you paid a fee for obtaining a copy of or access to a +Project Gutenberg-tm electronic work and you do not agree to be bound +by the terms of this agreement, you may obtain a refund from the +person or entity to whom you paid the fee as set forth in paragraph +1.E.8. + +1.B. "Project Gutenberg" is a registered trademark. It may only be +used on or associated in any way with an electronic work by people who +agree to be bound by the terms of this agreement. There are a few +things that you can do with most Project Gutenberg-tm electronic works +even without complying with the full terms of this agreement. See +paragraph 1.C below. There are a lot of things you can do with Project +Gutenberg-tm electronic works if you follow the terms of this +agreement and help preserve free future access to Project Gutenberg-tm +electronic works. See paragraph 1.E below. + +1.C. The Project Gutenberg Literary Archive Foundation ("the +Foundation" or PGLAF), owns a compilation copyright in the collection +of Project Gutenberg-tm electronic works. Nearly all the individual +works in the collection are in the public domain in the United +States. If an individual work is unprotected by copyright law in the +United States and you are located in the United States, we do not +claim a right to prevent you from copying, distributing, performing, +displaying or creating derivative works based on the work as long as +all references to Project Gutenberg are removed. Of course, we hope +that you will support the Project Gutenberg-tm mission of promoting +free access to electronic works by freely sharing Project Gutenberg-tm +works in compliance with the terms of this agreement for keeping the +Project Gutenberg-tm name associated with the work. You can easily +comply with the terms of this agreement by keeping this work in the +same format with its attached full Project Gutenberg-tm License when +you share it without charge with others. + +1.D. The copyright laws of the place where you are located also govern +what you can do with this work. Copyright laws in most countries are +in a constant state of change. If you are outside the United States, +check the laws of your country in addition to the terms of this +agreement before downloading, copying, displaying, performing, +distributing or creating derivative works based on this work or any +other Project Gutenberg-tm work. The Foundation makes no +representations concerning the copyright status of any work in any +country other than the United States. + +1.E. Unless you have removed all references to Project Gutenberg: + +1.E.1. The following sentence, with active links to, or other +immediate access to, the full Project Gutenberg-tm License must appear +prominently whenever any copy of a Project Gutenberg-tm work (any work +on which the phrase "Project Gutenberg" appears, or with which the +phrase "Project Gutenberg" is associated) is accessed, displayed, +performed, viewed, copied or distributed: + + This eBook is for the use of anyone anywhere in the United States and + most other parts of the world at no cost and with almost no + restrictions whatsoever. You may copy it, give it away or re-use it + under the terms of the Project Gutenberg License included with this + eBook or online at www.gutenberg.org. If you are not located in the + United States, you will have to check the laws of the country where + you are located before using this eBook. + +1.E.2. If an individual Project Gutenberg-tm electronic work is +derived from texts not protected by U.S. copyright law (does not +contain a notice indicating that it is posted with permission of the +copyright holder), the work can be copied and distributed to anyone in +the United States without paying any fees or charges. If you are +redistributing or providing access to a work with the phrase "Project +Gutenberg" associated with or appearing on the work, you must comply +either with the requirements of paragraphs 1.E.1 through 1.E.7 or +obtain permission for the use of the work and the Project Gutenberg-tm +trademark as set forth in paragraphs 1.E.8 or 1.E.9. + +1.E.3. If an individual Project Gutenberg-tm electronic work is posted +with the permission of the copyright holder, your use and distribution +must comply with both paragraphs 1.E.1 through 1.E.7 and any +additional terms imposed by the copyright holder. Additional terms +will be linked to the Project Gutenberg-tm License for all works +posted with the permission of the copyright holder found at the +beginning of this work. + +1.E.4. Do not unlink or detach or remove the full Project Gutenberg-tm +License terms from this work, or any files containing a part of this +work or any other work associated with Project Gutenberg-tm. + +1.E.5. Do not copy, display, perform, distribute or redistribute this +electronic work, or any part of this electronic work, without +prominently displaying the sentence set forth in paragraph 1.E.1 with +active links or immediate access to the full terms of the Project +Gutenberg-tm License. + +1.E.6. You may convert to and distribute this work in any binary, +compressed, marked up, nonproprietary or proprietary form, including +any word processing or hypertext form. However, if you provide access +to or distribute copies of a Project Gutenberg-tm work in a format +other than "Plain Vanilla ASCII" or other format used in the official +version posted on the official Project Gutenberg-tm website +(www.gutenberg.org), you must, at no additional cost, fee or expense +to the user, provide a copy, a means of exporting a copy, or a means +of obtaining a copy upon request, of the work in its original "Plain +Vanilla ASCII" or other form. Any alternate format must include the +full Project Gutenberg-tm License as specified in paragraph 1.E.1. + +1.E.7. Do not charge a fee for access to, viewing, displaying, +performing, copying or distributing any Project Gutenberg-tm works +unless you comply with paragraph 1.E.8 or 1.E.9. + +1.E.8. You may charge a reasonable fee for copies of or providing +access to or distributing Project Gutenberg-tm electronic works +provided that: + +* You pay a royalty fee of 20% of the gross profits you derive from + the use of Project Gutenberg-tm works calculated using the method + you already use to calculate your applicable taxes. The fee is owed + to the owner of the Project Gutenberg-tm trademark, but he has + agreed to donate royalties under this paragraph to the Project + Gutenberg Literary Archive Foundation. Royalty payments must be paid + within 60 days following each date on which you prepare (or are + legally required to prepare) your periodic tax returns. Royalty + payments should be clearly marked as such and sent to the Project + Gutenberg Literary Archive Foundation at the address specified in + Section 4, "Information about donations to the Project Gutenberg + Literary Archive Foundation." + +* You provide a full refund of any money paid by a user who notifies + you in writing (or by e-mail) within 30 days of receipt that s/he + does not agree to the terms of the full Project Gutenberg-tm + License. You must require such a user to return or destroy all + copies of the works possessed in a physical medium and discontinue + all use of and all access to other copies of Project Gutenberg-tm + works. + +* You provide, in accordance with paragraph 1.F.3, a full refund of + any money paid for a work or a replacement copy, if a defect in the + electronic work is discovered and reported to you within 90 days of + receipt of the work. + +* You comply with all other terms of this agreement for free + distribution of Project Gutenberg-tm works. + +1.E.9. If you wish to charge a fee or distribute a Project +Gutenberg-tm electronic work or group of works on different terms than +are set forth in this agreement, you must obtain permission in writing +from the Project Gutenberg Literary Archive Foundation, the manager of +the Project Gutenberg-tm trademark. Contact the Foundation as set +forth in Section 3 below. + +1.F. + +1.F.1. Project Gutenberg volunteers and employees expend considerable +effort to identify, do copyright research on, transcribe and proofread +works not protected by U.S. copyright law in creating the Project +Gutenberg-tm collection. Despite these efforts, Project Gutenberg-tm +electronic works, and the medium on which they may be stored, may +contain "Defects," such as, but not limited to, incomplete, inaccurate +or corrupt data, transcription errors, a copyright or other +intellectual property infringement, a defective or damaged disk or +other medium, a computer virus, or computer codes that damage or +cannot be read by your equipment. + +1.F.2. LIMITED WARRANTY, DISCLAIMER OF DAMAGES - Except for the "Right +of Replacement or Refund" described in paragraph 1.F.3, the Project +Gutenberg Literary Archive Foundation, the owner of the Project +Gutenberg-tm trademark, and any other party distributing a Project +Gutenberg-tm electronic work under this agreement, disclaim all +liability to you for damages, costs and expenses, including legal +fees. YOU AGREE THAT YOU HAVE NO REMEDIES FOR NEGLIGENCE, STRICT +LIABILITY, BREACH OF WARRANTY OR BREACH OF CONTRACT EXCEPT THOSE +PROVIDED IN PARAGRAPH 1.F.3. YOU AGREE THAT THE FOUNDATION, THE +TRADEMARK OWNER, AND ANY DISTRIBUTOR UNDER THIS AGREEMENT WILL NOT BE +LIABLE TO YOU FOR ACTUAL, DIRECT, INDIRECT, CONSEQUENTIAL, PUNITIVE OR +INCIDENTAL DAMAGES EVEN IF YOU GIVE NOTICE OF THE POSSIBILITY OF SUCH +DAMAGE. + +1.F.3. LIMITED RIGHT OF REPLACEMENT OR REFUND - If you discover a +defect in this electronic work within 90 days of receiving it, you can +receive a refund of the money (if any) you paid for it by sending a +written explanation to the person you received the work from. If you +received the work on a physical medium, you must return the medium +with your written explanation. The person or entity that provided you +with the defective work may elect to provide a replacement copy in +lieu of a refund. If you received the work electronically, the person +or entity providing it to you may choose to give you a second +opportunity to receive the work electronically in lieu of a refund. If +the second copy is also defective, you may demand a refund in writing +without further opportunities to fix the problem. + +1.F.4. Except for the limited right of replacement or refund set forth +in paragraph 1.F.3, this work is provided to you 'AS-IS', WITH NO +OTHER WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT +LIMITED TO WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PURPOSE. + +1.F.5. Some states do not allow disclaimers of certain implied +warranties or the exclusion or limitation of certain types of +damages. If any disclaimer or limitation set forth in this agreement +violates the law of the state applicable to this agreement, the +agreement shall be interpreted to make the maximum disclaimer or +limitation permitted by the applicable state law. The invalidity or +unenforceability of any provision of this agreement shall not void the +remaining provisions. + +1.F.6. INDEMNITY - You agree to indemnify and hold the Foundation, the +trademark owner, any agent or employee of the Foundation, anyone +providing copies of Project Gutenberg-tm electronic works in +accordance with this agreement, and any volunteers associated with the +production, promotion and distribution of Project Gutenberg-tm +electronic works, harmless from all liability, costs and expenses, +including legal fees, that arise directly or indirectly from any of +the following which you do or cause to occur: (a) distribution of this +or any Project Gutenberg-tm work, (b) alteration, modification, or +additions or deletions to any Project Gutenberg-tm work, and (c) any +Defect you cause. + +Section 2. Information about the Mission of Project Gutenberg-tm + +Project Gutenberg-tm is synonymous with the free distribution of +electronic works in formats readable by the widest variety of +computers including obsolete, old, middle-aged and new computers. It +exists because of the efforts of hundreds of volunteers and donations +from people in all walks of life. + +Volunteers and financial support to provide volunteers with the +assistance they need are critical to reaching Project Gutenberg-tm's +goals and ensuring that the Project Gutenberg-tm collection will +remain freely available for generations to come. In 2001, the Project +Gutenberg Literary Archive Foundation was created to provide a secure +and permanent future for Project Gutenberg-tm and future +generations. To learn more about the Project Gutenberg Literary +Archive Foundation and how your efforts and donations can help, see +Sections 3 and 4 and the Foundation information page at +www.gutenberg.org + +Section 3. Information about the Project Gutenberg Literary +Archive Foundation + +The Project Gutenberg Literary Archive Foundation is a non-profit +501(c)(3) educational corporation organized under the laws of the +state of Mississippi and granted tax exempt status by the Internal +Revenue Service. The Foundation's EIN or federal tax identification +number is 64-6221541. Contributions to the Project Gutenberg Literary +Archive Foundation are tax deductible to the full extent permitted by +U.S. federal laws and your state's laws. + +The Foundation's business office is located at 809 North 1500 West, +Salt Lake City, UT 84116, (801) 596-1887. Email contact links and up +to date contact information can be found at the Foundation's website +and official page at www.gutenberg.org/contact + +Section 4. Information about Donations to the Project Gutenberg +Literary Archive Foundation + +Project Gutenberg-tm depends upon and cannot survive without +widespread public support and donations to carry out its mission of +increasing the number of public domain and licensed works that can be +freely distributed in machine-readable form accessible by the widest +array of equipment including outdated equipment. Many small donations +($1 to $5,000) are particularly important to maintaining tax exempt +status with the IRS. + +The Foundation is committed to complying with the laws regulating +charities and charitable donations in all 50 states of the United +States. Compliance requirements are not uniform and it takes a +considerable effort, much paperwork and many fees to meet and keep up +with these requirements. We do not solicit donations in locations +where we have not received written confirmation of compliance. To SEND +DONATIONS or determine the status of compliance for any particular +state visit www.gutenberg.org/donate + +While we cannot and do not solicit contributions from states where we +have not met the solicitation requirements, we know of no prohibition +against accepting unsolicited donations from donors in such states who +approach us with offers to donate. + +International donations are gratefully accepted, but we cannot make +any statements concerning tax treatment of donations received from +outside the United States. U.S. laws alone swamp our small staff. + +Please check the Project Gutenberg web pages for current donation +methods and addresses. Donations are accepted in a number of other +ways including checks, online payments and credit card donations. To +donate, please visit: www.gutenberg.org/donate + +Section 5. General Information About Project Gutenberg-tm electronic works + +Professor Michael S. Hart was the originator of the Project +Gutenberg-tm concept of a library of electronic works that could be +freely shared with anyone. For forty years, he produced and +distributed Project Gutenberg-tm eBooks with only a loose network of +volunteer support. + +Project Gutenberg-tm eBooks are often created from several printed +editions, all of which are confirmed as not protected by copyright in +the U.S. unless a copyright notice is included. Thus, we do not +necessarily keep eBooks in compliance with any particular paper +edition. + +Most people start at our website which has the main PG search +facility: www.gutenberg.org + +This website includes information about Project Gutenberg-tm, +including how to make donations to the Project Gutenberg Literary +Archive Foundation, how to help produce our new eBooks, and how to +subscribe to our email newsletter to hear about new eBooks. + + diff --git a/badger2040/os/badger2040/assets/badge_image.png b/badger2040/os/badger2040/assets/badge_image.png new file mode 100644 index 0000000000000000000000000000000000000000..b5147dc73af9e358ed42403bcb3a2d275e05c253 GIT binary patch literal 3498 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 Y2k?WF#JYsI@&Et;07*qoM6N<$g5A!R4FCWD literal 0 HcmV?d00001 diff --git a/badger2040/os/badger2040/assets/badgerpunk.png b/badger2040/os/badger2040/assets/badgerpunk.png new file mode 100644 index 0000000000000000000000000000000000000000..f7568a2ee3f5066b3759d9df0a3289a4110d2dfc GIT binary patch literal 36468 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 0 and length > width: + text = text[:-1] + else: + text += "" + return text + + +# ------------------------------ +# Drawing functions +# ------------------------------ + +# Draw an overlay box with a given message within it +def draw_overlay(message, width, height, line_spacing, text_size): + + # Draw a light grey background + display.pen(12) + display.rectangle((WIDTH - width) // 2, (HEIGHT - height) // 2, width, height) + + # Take the provided message and split it up into + # lines that fit within the specified width + words = message.split(" ") + lines = [] + line = "" + appended_line = "" + for word in words: + if len(word) > 0: + appended_line += " " + appended_line += word + if display.measure_text(appended_line, text_size) >= width: + lines.append(line) + appended_line = word + else: + line = appended_line + if len(line) != 0: + lines.append(line) + + display.pen(0) + display.thickness(2) + + # Display each line of text from the message, centre-aligned + num_lines = len(lines) + for i in range(num_lines): + length = display.measure_text(lines[i], text_size) + current_line = (i * line_spacing) - ((num_lines - 1) * line_spacing) // 2 + display.text(lines[i], (WIDTH - length) // 2, (HEIGHT // 2) + current_line, text_size) + + +# Draw the badge, including user text +def draw_badge(): + display.pen(0) + display.clear() + + # Draw badge image + display.image(BADGE_IMAGE, IMAGE_WIDTH, HEIGHT, WIDTH - IMAGE_WIDTH, 0) + + # Draw a border around the image + display.pen(0) + display.thickness(1) + display.line(WIDTH - IMAGE_WIDTH, 0, WIDTH - 1, 0) + display.line(WIDTH - IMAGE_WIDTH, 0, WIDTH - IMAGE_WIDTH, HEIGHT - 1) + display.line(WIDTH - IMAGE_WIDTH, HEIGHT - 1, WIDTH - 1, HEIGHT - 1) + display.line(WIDTH - 1, 0, WIDTH - 1, HEIGHT - 1) + + # Uncomment this if a white background is wanted behind the company + # display.pen(15) + # display.rectangle(1, 1, TEXT_WIDTH, COMPANY_HEIGHT - 1) + + # Draw the company + display.pen(15) # Change this to 0 if a white background is used + display.font("serif") + display.thickness(3) + display.text(company, LEFT_PADDING, (COMPANY_HEIGHT // 2) + 1, COMPANY_TEXT_SIZE) + + # Draw a white background behind the name + display.pen(15) + display.thickness(1) + display.rectangle(1, COMPANY_HEIGHT + 1, TEXT_WIDTH, NAME_HEIGHT) + + # Draw the name, scaling it based on the available width + display.pen(0) + display.font("sans") + display.thickness(4) + name_size = 2.0 # A sensible starting scale + while True: + name_length = display.measure_text(name, name_size) + if name_length >= (TEXT_WIDTH - NAME_PADDING) and name_size >= 0.1: + name_size -= 0.01 + else: + display.text(name, (TEXT_WIDTH - name_length) // 2, (NAME_HEIGHT // 2) + COMPANY_HEIGHT + 1, name_size) + break + + # Draw a white backgrounds behind the details + display.pen(15) + display.thickness(1) + display.rectangle(1, HEIGHT - DETAILS_HEIGHT * 2, TEXT_WIDTH, DETAILS_HEIGHT - 1) + display.rectangle(1, HEIGHT - DETAILS_HEIGHT, TEXT_WIDTH, DETAILS_HEIGHT - 1) + + # Draw the first detail's title and text + display.pen(0) + display.font("sans") + display.thickness(3) + name_length = display.measure_text(detail1_title, DETAILS_TEXT_SIZE) + display.text(detail1_title, LEFT_PADDING, HEIGHT - ((DETAILS_HEIGHT * 3) // 2), DETAILS_TEXT_SIZE) + display.thickness(2) + display.text(detail1_text, 5 + name_length + DETAIL_SPACING, HEIGHT - ((DETAILS_HEIGHT * 3) // 2), DETAILS_TEXT_SIZE) + + # Draw the second detail's title and text + display.thickness(3) + name_length = display.measure_text(detail2_title, DETAILS_TEXT_SIZE) + display.text(detail2_title, LEFT_PADDING, HEIGHT - (DETAILS_HEIGHT // 2), DETAILS_TEXT_SIZE) + display.thickness(2) + display.text(detail2_text, LEFT_PADDING + name_length + DETAIL_SPACING, HEIGHT - (DETAILS_HEIGHT // 2), DETAILS_TEXT_SIZE) + + +# ------------------------------ +# Program setup +# ------------------------------ + +# Global variables +show_overlay = False + +# Create a new Badger and set it to update NORMAL +display = badger2040.Badger2040() +display.update_speed(badger2040.UPDATE_NORMAL) + +# Open the badge file +try: + badge = open("badge.txt", "r") +except OSError: + badge = open("badge.txt", "w") + badge.write(DEFAULT_TEXT) + badge.flush() + badge.seek(0) + +# Read in the next 6 lines +company = badge.readline() # "mustelid inc" +name = badge.readline() # "H. Badger" +detail1_title = badge.readline() # "RP2040" +detail1_text = badge.readline() # "2MB Flash" +detail2_title = badge.readline() # "E ink" +detail2_text = badge.readline() # "296x128px" + +# Truncate all of the text (except for the name as that is scaled) +company = truncatestring(company, COMPANY_TEXT_SIZE, TEXT_WIDTH) + +detail1_title = truncatestring(detail1_title, DETAILS_TEXT_SIZE, TEXT_WIDTH) +detail1_text = truncatestring(detail1_text, DETAILS_TEXT_SIZE, + TEXT_WIDTH - DETAIL_SPACING - display.measure_text(detail1_title, DETAILS_TEXT_SIZE)) + +detail2_title = truncatestring(detail2_title, DETAILS_TEXT_SIZE, TEXT_WIDTH) +detail2_text = truncatestring(detail2_text, DETAILS_TEXT_SIZE, + TEXT_WIDTH - DETAIL_SPACING - display.measure_text(detail2_title, DETAILS_TEXT_SIZE)) + +# Set up the buttons +button_a = machine.Pin(badger2040.BUTTON_A, machine.Pin.IN, machine.Pin.PULL_DOWN) +button_b = machine.Pin(badger2040.BUTTON_B, machine.Pin.IN, machine.Pin.PULL_DOWN) +button_c = machine.Pin(badger2040.BUTTON_C, machine.Pin.IN, machine.Pin.PULL_DOWN) +button_up = machine.Pin(badger2040.BUTTON_UP, machine.Pin.IN, machine.Pin.PULL_DOWN) +button_down = machine.Pin(badger2040.BUTTON_DOWN, machine.Pin.IN, machine.Pin.PULL_DOWN) + + +# Button handling function +def button(pin): + global show_overlay + + if pin == button_a: + show_overlay = True + return + + if pin == button_b: + show_overlay = True + return + + if pin == button_c: + show_overlay = True + return + + if pin == button_up: + show_overlay = True + return + + if pin == button_down: + show_overlay = True + return + + +# Register the button handling function with the buttons +button_a.irq(trigger=machine.Pin.IRQ_RISING, handler=button) +button_b.irq(trigger=machine.Pin.IRQ_RISING, handler=button) +button_c.irq(trigger=machine.Pin.IRQ_RISING, handler=button) +button_up.irq(trigger=machine.Pin.IRQ_RISING, handler=button) +button_down.irq(trigger=machine.Pin.IRQ_RISING, handler=button) + + +# ------------------------------ +# Main program loop +# ------------------------------ + +draw_badge() +display.update() + +while True: + if show_overlay: + draw_overlay("To change the text, connect Badger2040 to a PC, load up Thonny, and modify badge.txt", + WIDTH - OVERLAY_BORDER, HEIGHT - OVERLAY_BORDER, OVERLAY_SPACING, OVERLAY_TEXT_SIZE) + display.update() + time.sleep(4) + + draw_badge() + display.update() + show_overlay = False + + time.sleep(0.1) diff --git a/badger2040/os/badger2040/battery.py b/badger2040/os/badger2040/battery.py new file mode 100644 index 0000000..eaa97bb --- /dev/null +++ b/badger2040/os/badger2040/battery.py @@ -0,0 +1,163 @@ +import badger2040 +from machine import Pin, ADC +import time + +# Global Constants +# for e.g. 2xAAA batteries, try max 3.4 min 3.0 +MAX_BATTERY_VOLTAGE = 4.0 +MIN_BATTERY_VOLTAGE = 3.2 + +WIDTH = badger2040.WIDTH +HEIGHT = badger2040.HEIGHT + +BATT_WIDTH = 200 +BATT_HEIGHT = 100 +BATT_BORDER = 10 +BATT_TERM_WIDTH = 20 +BATT_TERM_HEIGHT = 50 +BATT_BAR_PADDING = 10 +BATT_BAR_HEIGHT = BATT_HEIGHT - (BATT_BORDER * 2) - (BATT_BAR_PADDING * 2) +BATT_BAR_START = ((WIDTH - BATT_WIDTH) // 2) + BATT_BORDER + BATT_BAR_PADDING +BATT_BAR_END = ((WIDTH + BATT_WIDTH) // 2) - BATT_BORDER - BATT_BAR_PADDING + +NUM_BATT_BARS = 4 + + +# ------------------------------ +# Utility functions +# ------------------------------ + + +def map_value(input, in_min, in_max, out_min, out_max): + return (((input - in_min) * (out_max - out_min)) / (in_max - in_min)) + out_min + + +# ------------------------------ +# Drawing functions +# ------------------------------ + +# Draw the frame of the reader +def draw_battery(level, resolution): + display.pen(15) + display.clear() + + display.thickness(1) + + # Draw the battery outline + display.pen(0) + display.rectangle( + (WIDTH - BATT_WIDTH) // 2, (HEIGHT - BATT_HEIGHT) // 2, BATT_WIDTH, BATT_HEIGHT + ) + + display.rectangle( + (WIDTH + BATT_WIDTH) // 2, + (HEIGHT - BATT_TERM_HEIGHT) // 2, + BATT_TERM_WIDTH, + BATT_TERM_HEIGHT, + ) + + display.pen(15) + display.rectangle( + (WIDTH - BATT_WIDTH) // 2 + BATT_BORDER, + (HEIGHT - BATT_HEIGHT) // 2 + BATT_BORDER, + BATT_WIDTH - BATT_BORDER * 2, + BATT_HEIGHT - BATT_BORDER * 2, + ) + + # Add a special check for no battery + if level < 1: + X = WIDTH // 2 + Y = HEIGHT // 2 + + display.pen(0) + display.thickness(1) + thickness = (BATT_BORDER * 3) // 2 + start_extra = thickness // 3 + end_extra = (thickness * 2) // 3 + for i in range(0, thickness): + excess = i // 2 + display.line( + X - (BATT_HEIGHT // 2) + i - excess - start_extra, + Y - (BATT_HEIGHT // 2) - excess - start_extra, + X + (BATT_HEIGHT // 2) + i - excess + end_extra, + Y + (BATT_HEIGHT // 2) - excess + end_extra, + ) + display.pen(15) + for i in range(0 - thickness, 0): + display.line( + X - (BATT_HEIGHT // 2) + i, + Y - (BATT_HEIGHT // 2), + X + (BATT_HEIGHT // 2) + i, + Y + (BATT_HEIGHT // 2), + ) + else: + # Draw the battery bars + display.pen(0) + length = ( + BATT_BAR_END - BATT_BAR_START - ((NUM_BATT_BARS - 1) * BATT_BAR_PADDING) + ) // NUM_BATT_BARS + current_level = 0.0 + normalised_level = level / resolution + for i in range(NUM_BATT_BARS): + current_level = (1.0 * i) / NUM_BATT_BARS + if normalised_level > current_level: + pos = i * (length + BATT_BAR_PADDING) + display.rectangle( + BATT_BAR_START + pos, + (HEIGHT - BATT_BAR_HEIGHT) // 2, + length, + BATT_BAR_HEIGHT, + ) + + display.update() + + +# ------------------------------ +# Program setup +# ------------------------------ + +# Create a new Badger and set it to update FAST +display = badger2040.Badger2040() +display.update_speed(badger2040.UPDATE_FAST) + +# Set up the ADCs for measuring battery voltage +vbat_adc = ADC(badger2040.PIN_BATTERY) +vref_adc = ADC(badger2040.PIN_1V2_REF) +vref_en = Pin(badger2040.PIN_VREF_POWER) +vref_en.init(Pin.OUT) +vref_en.value(0) + + +# ------------------------------ +# Main program loop +# ------------------------------ + +last_level = -1 + +while True: + # Enable the onboard voltage reference + vref_en.value(1) + + # Calculate the logic supply voltage, as will be lower that the usual 3.3V when running off low batteries + vdd = 1.24 * (65535 / vref_adc.read_u16()) + vbat = ( + (vbat_adc.read_u16() / 65535) * 3 * vdd + ) # 3 in this is a gain, not rounding of 3.3V + + # Disable the onboard voltage reference + vref_en.value(0) + + # Print out the voltage + print("Battery Voltage = ", vbat, "V", sep="") + + # Convert the voltage to a level to display onscreen + level = int( + map_value(vbat, MIN_BATTERY_VOLTAGE, MAX_BATTERY_VOLTAGE, 0, NUM_BATT_BARS) + ) + + # Only draw if the battery level has changed significantly + if level != last_level: + draw_battery(level, NUM_BATT_BARS) + last_level = level + + time.sleep(1) diff --git a/badger2040/os/badger2040/button_test.py b/badger2040/os/badger2040/button_test.py new file mode 100644 index 0000000..2395402 --- /dev/null +++ b/badger2040/os/badger2040/button_test.py @@ -0,0 +1,67 @@ +import badger2040 +import machine +import time + +display = badger2040.Badger2040() +display.update_speed(badger2040.UPDATE_TURBO) +display.pen(15) +display.clear() +display.update() + +button_a = machine.Pin(badger2040.BUTTON_A, machine.Pin.IN, machine.Pin.PULL_DOWN) +button_b = machine.Pin(badger2040.BUTTON_B, machine.Pin.IN, machine.Pin.PULL_DOWN) +button_c = machine.Pin(badger2040.BUTTON_C, machine.Pin.IN, machine.Pin.PULL_DOWN) +button_up = machine.Pin(badger2040.BUTTON_UP, machine.Pin.IN, machine.Pin.PULL_DOWN) +button_down = machine.Pin(badger2040.BUTTON_DOWN, machine.Pin.IN, machine.Pin.PULL_DOWN) +# the User button (boot/usr on back of board) is inverted from the others +button_user = machine.Pin(badger2040.BUTTON_USER, machine.Pin.IN, machine.Pin.PULL_UP) + + +message = None +message_y = 60 + + +def button(pin): + global message + if message is not None: + return + if pin == button_a: + message = "Button a" + return + if pin == button_b: + message = "Button b" + return + if pin == button_c: + message = "Button c" + return + if pin == button_up: + message = "Button Up" + return + if pin == button_down: + message = "Button Down" + return + if pin == button_user: + message = "Button Usr" + return + + +button_a.irq(trigger=machine.Pin.IRQ_RISING, handler=button) +button_b.irq(trigger=machine.Pin.IRQ_RISING, handler=button) +button_c.irq(trigger=machine.Pin.IRQ_RISING, handler=button) + +button_up.irq(trigger=machine.Pin.IRQ_RISING, handler=button) +button_down.irq(trigger=machine.Pin.IRQ_RISING, handler=button) +button_user.irq(trigger=machine.Pin.IRQ_RISING, handler=button) + + +while True: + if message is not None: + display.pen(15) + display.clear() + display.pen(0) + display.thickness(4) + display.text(message, 6, message_y, 1.4) + for _ in range(2): + display.update() + message = None + time.sleep(0.1) diff --git a/badger2040/os/badger2040/clock.py b/badger2040/os/badger2040/clock.py new file mode 100644 index 0000000..834ab5e --- /dev/null +++ b/badger2040/os/badger2040/clock.py @@ -0,0 +1,148 @@ +import time +import machine +import badger2040 + + +rtc = machine.RTC() +screen = badger2040.Badger2040() +screen.update_speed(badger2040.UPDATE_TURBO) +screen.font("gothic") + +cursors = ["year", "month", "day", "hour", "minute"] +set_clock = False +cursor = 0 +last = 0 + +# Set up the buttons +button_down = machine.Pin(badger2040.BUTTON_DOWN, machine.Pin.IN, machine.Pin.PULL_DOWN) +button_up = machine.Pin(badger2040.BUTTON_UP, machine.Pin.IN, machine.Pin.PULL_DOWN) + +button_a = machine.Pin(badger2040.BUTTON_A, machine.Pin.IN, machine.Pin.PULL_DOWN) +button_b = machine.Pin(badger2040.BUTTON_B, machine.Pin.IN, machine.Pin.PULL_DOWN) +button_c = machine.Pin(badger2040.BUTTON_C, machine.Pin.IN, machine.Pin.PULL_DOWN) + + +def days_in_month(month, year): + if month == 2 and ((year % 4 == 0 and year % 100 != 0) or year % 400 == 0): + return 29 + return (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)[month - 1] + + +# Button handling function +def button(pin): + global last, set_clock, cursor, year, month, day, hour, minute + + time.sleep(0.05) + if not pin.value(): + return + + adjust = 0 + changed = False + + if pin == button_b: + set_clock = not set_clock + changed = True + if not set_clock: + rtc.datetime((year, month, day, 0, hour, minute, second, 0)) + + if set_clock: + if pin == button_c: + cursor += 1 + cursor %= len(cursors) + + if pin == button_a: + cursor -= 1 + cursor %= len(cursors) + + if pin == button_up: + adjust = 1 + + if pin == button_down: + adjust = -1 + + if cursors[cursor] == "year": + year += adjust + year = max(year, 2022) + day = min(day, days_in_month(month, year)) + if cursors[cursor] == "month": + month += adjust + month = min(max(month, 1), 12) + day = min(day, days_in_month(month, year)) + if cursors[cursor] == "day": + day += adjust + day = min(max(day, 1), days_in_month(month, year)) + if cursors[cursor] == "hour": + hour += adjust + hour %= 24 + if cursors[cursor] == "minute": + minute += adjust + minute %= 60 + + if set_clock or changed: + draw_clock() + + +# Register the button handling function with the buttons +button_down.irq(trigger=machine.Pin.IRQ_RISING, handler=button) +button_up.irq(trigger=machine.Pin.IRQ_RISING, handler=button) +button_a.irq(trigger=machine.Pin.IRQ_RISING, handler=button) +button_b.irq(trigger=machine.Pin.IRQ_RISING, handler=button) +button_c.irq(trigger=machine.Pin.IRQ_RISING, handler=button) + + +def draw_clock(): + hms = "{:02}:{:02}:{:02}".format(hour, minute, second) + ymd = "{:04}/{:02}/{:02}".format(year, month, day) + + hms_width = screen.measure_text(hms, 1.8) + hms_offset = int((badger2040.WIDTH / 2) - (hms_width / 2)) + h_width = screen.measure_text(hms[0:2], 1.8) + mi_width = screen.measure_text(hms[3:5], 1.8) + mi_offset = screen.measure_text(hms[0:3], 1.8) + + ymd_width = screen.measure_text(ymd, 1.0) + ymd_offset = int((badger2040.WIDTH / 2) - (ymd_width / 2)) + y_width = screen.measure_text(ymd[0:4], 1.0) + m_width = screen.measure_text(ymd[5:7], 1.0) + m_offset = screen.measure_text(ymd[0:5], 1.0) + d_width = screen.measure_text(ymd[8:10], 1.0) + d_offset = screen.measure_text(ymd[0:8], 1.0) + + screen.pen(15) + screen.clear() + screen.pen(0) + screen.thickness(5) + screen.text(hms, hms_offset, 40, 1.8) + screen.thickness(3) + screen.text(ymd, ymd_offset, 100, 1.0) + + if set_clock: + if cursors[cursor] == "year": + screen.line(ymd_offset, 120, ymd_offset + y_width, 120) + if cursors[cursor] == "month": + screen.line(ymd_offset + m_offset, 120, ymd_offset + m_offset + m_width, 120) + if cursors[cursor] == "day": + screen.line(ymd_offset + d_offset, 120, ymd_offset + d_offset + d_width, 120) + + if cursors[cursor] == "hour": + screen.line(hms_offset, 70, hms_offset + h_width, 70) + if cursors[cursor] == "minute": + screen.line(hms_offset + mi_offset, 70, hms_offset + mi_offset + mi_width, 70) + + screen.update() + + +year, month, day, wd, hour, minute, second, _ = rtc.datetime() + +if (year, month, day) == (2021, 1, 1): + rtc.datetime((2022, 2, 28, 0, 12, 0, 0, 0)) + +last_second = second + +while True: + if not set_clock: + year, month, day, wd, hour, minute, second, _ = rtc.datetime() + if second != last_second: + draw_clock() + last_second = second + time.sleep(0.1) diff --git a/badger2040/os/badger2040/conway.py b/badger2040/os/badger2040/conway.py new file mode 100644 index 0000000..7bdb23d --- /dev/null +++ b/badger2040/os/badger2040/conway.py @@ -0,0 +1,211 @@ +import math +import time +from random import random + +import machine + +import badger2040 + +# ------------------------------ +# Program setup +# ------------------------------ + +# Global constants +CELL_SIZE = 6 # Size of cell in pixels +INITIAL_DENSITY = 0.3 # Density of cells at start + +# Create a new Badger and set it to update TURBO +screen = badger2040.Badger2040() +screen.update_speed(badger2040.UPDATE_TURBO) + +restart = False # should sim be restarted + +# ------------------------------ +# Button functions +# ------------------------------ + + +# Button handling function +def button(pin): + global restart + # if 'a' button is pressed, restart the sim + if pin == button_a: + restart = True + + +# Set up button +button_a = machine.Pin(badger2040.BUTTON_A, machine.Pin.IN, machine.Pin.PULL_DOWN) +button_a.irq(trigger=machine.Pin.IRQ_RISING, handler=button) + +# ------------------------------ +# Screen functions +# ------------------------------ + + +# Remove everything from the screen +def init_screen(): + screen.update_speed(badger2040.UPDATE_NORMAL) + screen.pen(15) + screen.clear() + screen.update() + screen.update_speed(badger2040.UPDATE_TURBO) + + +# ------------------------------ +# Classes +# ------------------------------ + +# Define a 'cell' +class Cell: + def __init__(self): + self._alive = False + + def make_alive(self): + self._alive = True + + def make_dead(self): + self._alive = False + + def is_alive(self): + return self._alive + + +# Define the whole board +class Board: + def __init__(self): + self._rows = math.floor(badger2040.WIDTH / CELL_SIZE) + self._columns = math.floor(badger2040.HEIGHT / CELL_SIZE) + self._grid = [[Cell() for _ in range(self._columns)] for _ in range(self._rows)] + + self._initialise_board() + + # Draw the board to the screen + def draw_board(self): + row_idx = 0 + column_idx = 0 + + for row in self._grid: + column_idx = 0 + for cell in row: + if cell.is_alive(): + screen.pen(0) + else: + screen.pen(15) + screen.rectangle( + row_idx * CELL_SIZE, column_idx * CELL_SIZE, CELL_SIZE, CELL_SIZE + ) + column_idx += 1 + row_idx += 1 + + screen.update() + + # Generate the first iteration of the board + def _initialise_board(self): + for row in self._grid: + for cell in row: + if random() <= INITIAL_DENSITY: + cell.make_alive() + + # Get the neighbour cells for a given cell + def get_neighbours(self, current_row, current_column): + # Cells either side of current cell + neighbour_min = -1 + neighbour_max = 2 + neighbours = [] + + for row in range(neighbour_min, neighbour_max): + for column in range(neighbour_min, neighbour_max): + neighbour_row = current_row + row + neighbour_column = current_column + column + # Don't count the current cell + if not ( + neighbour_row == current_row and neighbour_column == current_column + ): + # It's a toroidal world so go all the way round if necessary + if (neighbour_row) < 0: + neighbour_row = self._rows - 1 + elif (neighbour_row) >= self._rows: + neighbour_row = 0 + + if (neighbour_column) < 0: + neighbour_column = self._columns - 1 + elif (neighbour_column) >= self._columns: + neighbour_column = 0 + + neighbours.append(self._grid[neighbour_row][neighbour_column]) + return neighbours + + # Calculate the next generation + def create_next_generation(self): + to_alive = [] + to_dead = [] + changed = False + + for row in range(len(self._grid)): + for column in range(len(self._grid[row])): + # Get all the neighours that are alive + alive_neighbours = [] + for neighbour_cell in self.get_neighbours(row, column): + if neighbour_cell.is_alive(): + alive_neighbours.append(neighbour_cell) + + current_cell = self._grid[row][column] + # Apply the Conway GoL rules (B3/S23) + if current_cell.is_alive(): + if len(alive_neighbours) < 2 or len(alive_neighbours) > 3: + to_dead.append(current_cell) + if len(alive_neighbours) == 3 or len(alive_neighbours) == 2: + to_alive.append(current_cell) + else: + if len(alive_neighbours) == 3: + to_alive.append(current_cell) + + for cell in to_alive: + if not cell.is_alive(): + # The board has changed since the previous generation + changed = True + cell.make_alive() + + for cell in to_dead: + if cell.is_alive(): + # The board has changed since the previous generation + changed = True + cell.make_dead() + + return changed + + +# ------------------------------ +# Main program loop +# ------------------------------ + + +def main(): + global restart + + init_screen() + board = Board() + board.draw_board() + time.sleep(0.5) + + while True: + # The 'a' button has been pressed so restart sim + if restart: + init_screen() + restart = False + board = Board() + board.draw_board() + time.sleep(0.5) + # The board didn't update since the previous generation + if not board.create_next_generation(): + screen.update_speed(badger2040.UPDATE_NORMAL) + board.draw_board() + screen.update_speed(badger2040.UPDATE_TURBO) + time.sleep(5) + restart = True + # Draw the next generation + else: + board.draw_board() + + +main() diff --git a/badger2040/os/badger2040/ebook.py b/badger2040/os/badger2040/ebook.py new file mode 100644 index 0000000..c2bb289 --- /dev/null +++ b/badger2040/os/badger2040/ebook.py @@ -0,0 +1,276 @@ +import badger2040 +import machine +import time +import gc + + +# **** Put the name of your text file here ***** +text_file = "book.txt" # File must be on the MicroPython device + + +try: + open(text_file, "r") +except OSError: + try: + # If the specified file doesn't exist, + # pre-populate with Wind In The Willows + import witw + open(text_file, "wb").write(witw.data()) + del witw + except ImportError: + pass + + +gc.collect() + +# Global Constants +WIDTH = badger2040.WIDTH +HEIGHT = badger2040.HEIGHT + +ARROW_THICKNESS = 3 +ARROW_WIDTH = 18 +ARROW_HEIGHT = 14 +ARROW_PADDING = 2 + +TEXT_PADDING = 4 + +TEXT_SIZE = 0.5 +TEXT_SPACING = int(34 * TEXT_SIZE) +TEXT_WIDTH = WIDTH - TEXT_PADDING - TEXT_PADDING - ARROW_WIDTH + +FONTS = ["sans", "gothic", "cursive", "serif"] +FONT_THICKNESSES = [2, 1, 1, 2] +# ------------------------------ +# Drawing functions +# ------------------------------ + + +# Draw a upward arrow +def draw_up(x, y, width, height, thickness, padding): + border = (thickness // 4) + padding + display.line(x + border, y + height - border, + x + (width // 2), y + border) + display.line(x + (width // 2), y + border, + x + width - border, y + height - border) + + +# Draw a downward arrow +def draw_down(x, y, width, height, thickness, padding): + border = (thickness // 2) + padding + display.line(x + border, y + border, + x + (width // 2), y + height - border) + display.line(x + (width // 2), y + height - border, + x + width - border, y + border) + + +# Draw the frame of the reader +def draw_frame(): + display.pen(15) + display.clear() + display.pen(12) + display.rectangle(WIDTH - ARROW_WIDTH, 0, ARROW_WIDTH, HEIGHT) + display.pen(0) + display.thickness(ARROW_THICKNESS) + if current_page > 1: + draw_up(WIDTH - ARROW_WIDTH, (HEIGHT // 4) - (ARROW_HEIGHT // 2), + ARROW_WIDTH, ARROW_HEIGHT, ARROW_THICKNESS, ARROW_PADDING) + draw_down(WIDTH - ARROW_WIDTH, ((HEIGHT * 3) // 4) - (ARROW_HEIGHT // 2), + ARROW_WIDTH, ARROW_HEIGHT, ARROW_THICKNESS, ARROW_PADDING) + + +# ------------------------------ +# Program setup +# ------------------------------ + +# Global variables +next_page = True +prev_page = False +change_font_size = False +change_font = False +last_offset = 0 +current_page = 0 + +# Create a new Badger and set it to update FAST +display = badger2040.Badger2040() +display.update_speed(badger2040.UPDATE_FAST) + +# Set up the buttons +button_down = machine.Pin(badger2040.BUTTON_DOWN, machine.Pin.IN, machine.Pin.PULL_DOWN) +button_up = machine.Pin(badger2040.BUTTON_UP, machine.Pin.IN, machine.Pin.PULL_DOWN) + +button_a = machine.Pin(badger2040.BUTTON_A, machine.Pin.IN, machine.Pin.PULL_DOWN) +button_b = machine.Pin(badger2040.BUTTON_B, machine.Pin.IN, machine.Pin.PULL_DOWN) + +# Set up the activity LED +led = machine.Pin(badger2040.PIN_LED, machine.Pin.OUT) + +offsets = [] + + +# Button handling function +def button(pin): + global next_page, prev_page, change_font_size, change_font + + if pin == button_down: + next_page = True + + if pin == button_up: + prev_page = True + + if pin == button_a: + change_font_size = True + + if pin == button_b: + change_font = True + + +# Register the button handling function with the buttons +button_down.irq(trigger=machine.Pin.IRQ_RISING, handler=button) +button_up.irq(trigger=machine.Pin.IRQ_RISING, handler=button) +button_a.irq(trigger=machine.Pin.IRQ_RISING, handler=button) +button_b.irq(trigger=machine.Pin.IRQ_RISING, handler=button) + + +# ------------------------------ +# Render page +# ------------------------------ + +def render_page(): + row = 0 + line = "" + pos = ebook.tell() + next_pos = pos + add_newline = False + display.font(FONTS[0]) + + while True: + # Read a full line and split it into words + words = ebook.readline().split(" ") + + # Take the length of the first word and advance our position + next_word = words[0] + if len(words) > 1: + next_pos += len(next_word) + 1 + else: + next_pos += len(next_word) # This is the last word on the line + + # Advance our position further if the word contains special characters + if '\u201c' in next_word: + next_word = next_word.replace('\u201c', '\"') + next_pos += 2 + if '\u201d' in next_word: + next_word = next_word.replace('\u201d', '\"') + next_pos += 2 + if '\u2019' in next_word: + next_word = next_word.replace('\u2019', '\'') + next_pos += 2 + + # Rewind the file back from the line end to the start of the next word + ebook.seek(next_pos) + + # Strip out any new line characters from the word + next_word = next_word.strip() + + # If an empty word is encountered assume that means there was a blank line + if len(next_word) == 0: + add_newline = True + + # Append the word to the current line and measure its length + appended_line = line + if len(line) > 0 and len(next_word) > 0: + appended_line += " " + appended_line += next_word + appended_length = display.measure_text(appended_line, TEXT_SIZE) + + # Would this appended line be longer than the text display area, or was a blank line spotted? + if appended_length >= TEXT_WIDTH or add_newline: + + # Yes, so write out the line prior to the append + print(line) + display.pen(0) + display.thickness(FONT_THICKNESSES[0]) + display.text(line, TEXT_PADDING, (row * TEXT_SPACING) + (TEXT_SPACING // 2) + TEXT_PADDING, TEXT_SIZE) + + # Clear the line and move on to the next row + line = "" + row += 1 + + # Have we reached the end of the page? + if (row * TEXT_SPACING) + TEXT_SPACING >= HEIGHT: + print("+++++") + display.update() + + # Reset the position to the start of the word that made this line too long + ebook.seek(pos) + return + else: + # Set the line to the word and advance the current position + line = next_word + pos = next_pos + + # A new line was spotted, so advance a row + if add_newline: + print("") + row += 1 + if (row * TEXT_SPACING) + TEXT_SPACING >= HEIGHT: + print("+++++") + display.update() + return + add_newline = False + else: + # The appended line was not too long, so set it as the line and advance the current position + line = appended_line + pos = next_pos + + +# ------------------------------ +# Main program loop +# ------------------------------ + +# Open the book file +ebook = open(text_file, "r") + +while True: + # Was the next page button pressed? + if next_page: + current_page += 1 + + # Is the next page one we've not displayed before? + if current_page > len(offsets): + offsets.append(ebook.tell()) # Add its start position to the offsets list + draw_frame() + render_page() + next_page = False # Clear the next page button flag + + # Was the previous page button pressed? + if prev_page: + if current_page > 1: + current_page -= 1 + ebook.seek(offsets[current_page - 1]) # Retrieve the start position of the last page + draw_frame() + render_page() + prev_page = False # Clear the prev page button flag + + if change_font_size: + TEXT_SIZE += 0.1 + if TEXT_SIZE > 0.8: + TEXT_SIZE = 0.5 + TEXT_SPACING = int(34 * TEXT_SIZE) + offsets = [0] + ebook.seek(0) + current_page = 1 + draw_frame() + render_page() + change_font_size = False + + if change_font: + FONTS.append(FONTS.pop(0)) + FONT_THICKNESSES.append(FONT_THICKNESSES.pop(0)) + offsets = [0] + ebook.seek(0) + current_page = 1 + draw_frame() + render_page() + change_font = False + + time.sleep(0.1) diff --git a/badger2040/os/badger2040/fonts.py b/badger2040/os/badger2040/fonts.py new file mode 100644 index 0000000..499bda4 --- /dev/null +++ b/badger2040/os/badger2040/fonts.py @@ -0,0 +1,141 @@ +import badger2040 +import machine +import time + +# Global Constants +FONT_NAMES = ("sans", "gothic", "cursive", "serif", "serif_italic") + +WIDTH = badger2040.WIDTH +HEIGHT = badger2040.HEIGHT + +MENU_TEXT_SIZE = 0.5 +MENU_SPACING = 20 +MENU_WIDTH = 84 +MENU_PADDING = 2 + +TEXT_SIZE = 0.8 +TEXT_INDENT = MENU_WIDTH + 10 + +ARROW_THICKNESS = 3 +ARROW_WIDTH = 18 +ARROW_HEIGHT = 14 +ARROW_PADDING = 2 + + +# ------------------------------ +# Drawing functions +# ------------------------------ + +# Draw a upward arrow +def draw_up(x, y, width, height, thickness, padding): + border = (thickness // 4) + padding + display.line(x + border, y + height - border, + x + (width // 2), y + border) + display.line(x + (width // 2), y + border, + x + width - border, y + height - border) + + +# Draw a downward arrow +def draw_down(x, y, width, height, thickness, padding): + border = (thickness // 2) + padding + display.line(x + border, y + border, + x + (width // 2), y + height - border) + display.line(x + (width // 2), y + height - border, + x + width - border, y + border) + + +# Draw the frame of the reader +def draw_frame(): + display.pen(15) + display.clear() + display.pen(12) + display.rectangle(WIDTH - ARROW_WIDTH, 0, ARROW_WIDTH, HEIGHT) + display.pen(0) + display.thickness(ARROW_THICKNESS) + draw_up(WIDTH - ARROW_WIDTH, (HEIGHT // 4) - (ARROW_HEIGHT // 2), + ARROW_WIDTH, ARROW_HEIGHT, ARROW_THICKNESS, ARROW_PADDING) + draw_down(WIDTH - ARROW_WIDTH, ((HEIGHT * 3) // 4) - (ARROW_HEIGHT // 2), + ARROW_WIDTH, ARROW_HEIGHT, ARROW_THICKNESS, ARROW_PADDING) + + +# Draw the fonts and menu +def draw_fonts(): + display.font("sans") + display.thickness(1) + for i in range(len(FONT_NAMES)): + name = FONT_NAMES[i] + display.pen(0) + if i == selected_font: + display.rectangle(0, i * MENU_SPACING, MENU_WIDTH, MENU_SPACING) + display.pen(15) + + display.text(name, MENU_PADDING, (i * MENU_SPACING) + (MENU_SPACING // 2), MENU_TEXT_SIZE) + + display.font(FONT_NAMES[selected_font]) + display.thickness(2) + + display.pen(0) + display.text("The quick", TEXT_INDENT, 10, TEXT_SIZE) + display.text("brown fox", TEXT_INDENT, 32, TEXT_SIZE) + display.text("jumped over", TEXT_INDENT, 54, TEXT_SIZE) + display.text("the lazy dog.", TEXT_INDENT, 76, TEXT_SIZE) + display.text("0123456789", TEXT_INDENT, 98, TEXT_SIZE) + display.text("!\"£$%^&*()", TEXT_INDENT, 120, TEXT_SIZE) + display.thickness(1) + + display.update() + + +# ------------------------------ +# Program setup +# ------------------------------ + +# Global variables +selected_font = 0 +pressed = False + +# Create a new Badger and set it to update FAST +display = badger2040.Badger2040() +display.update_speed(badger2040.UPDATE_FAST) + +# Set up the buttons +button_up = machine.Pin(badger2040.BUTTON_UP, machine.Pin.IN, machine.Pin.PULL_DOWN) +button_down = machine.Pin(badger2040.BUTTON_DOWN, machine.Pin.IN, machine.Pin.PULL_DOWN) + + +# Button handling function +def button(pin): + global pressed + global selected_font + + if not pressed: + if pin == button_up: + selected_font -= 1 + if selected_font < 0: + selected_font = len(FONT_NAMES) - 1 + pressed = True + return + if pin == button_down: + selected_font += 1 + if selected_font >= len(FONT_NAMES): + selected_font = 0 + pressed = True + return + + +# Register the button handling function with the buttons +button_up.irq(trigger=machine.Pin.IRQ_RISING, handler=button) +button_down.irq(trigger=machine.Pin.IRQ_RISING, handler=button) + + +# ------------------------------ +# Main program loop +# ------------------------------ + +while True: + draw_frame() + draw_fonts() + + pressed = False + while not pressed: + time.sleep(0.1) diff --git a/badger2040/os/badger2040/help.py b/badger2040/os/badger2040/help.py new file mode 100644 index 0000000..ff6102b --- /dev/null +++ b/badger2040/os/badger2040/help.py @@ -0,0 +1,40 @@ +import badger2040 +import time +from badger2040 import WIDTH + +TEXT_SIZE = 0.45 +LINE_HEIGHT = 16 + +display = badger2040.Badger2040() +display.pen(0) +display.rectangle(0, 0, WIDTH, 16) +display.thickness(1) +display.pen(15) +display.text("badgerOS", 3, 8, 0.4) + +display.pen(0) + +y = 16 + int(LINE_HEIGHT / 2) + +display.thickness(2) +display.text("Normal:", 0, y, TEXT_SIZE) +display.thickness(1) +y += LINE_HEIGHT +display.text("Up / Down - Change launcher page", 0, y, TEXT_SIZE) +y += LINE_HEIGHT +display.text("a, b or c - Launch app", 0, y, TEXT_SIZE) +y += LINE_HEIGHT +y += LINE_HEIGHT + +display.thickness(2) +display.text("Holding USER button:", 0, y, TEXT_SIZE) +display.thickness(1) +y += LINE_HEIGHT +display.text("Up / Down - Change font size", 0, y, TEXT_SIZE) +y += LINE_HEIGHT +display.text("a - Toggle invert", 0, y, TEXT_SIZE) +y += LINE_HEIGHT + +display.update() +while True: + time.sleep(1) diff --git a/badger2040/os/badger2040/image.py b/badger2040/os/badger2040/image.py new file mode 100644 index 0000000..d8956a2 --- /dev/null +++ b/badger2040/os/badger2040/image.py @@ -0,0 +1,154 @@ +import os +import sys +import time +import machine +import badger2040 +from badger2040 import WIDTH, HEIGHT + + +REAMDE = """ +Images must be 296x128 pixel with 1bit colour depth. + +You can use examples/badger2040/image_converter/convert.py to convert them: + +python3 convert.py --binary --resize image_file_1.png image_file_2.png image_file_3.png + +Create a new "images" directory via Thonny, and upload the .bin files there. +""" + +OVERLAY_BORDER = 40 +OVERLAY_SPACING = 20 +OVERLAY_TEXT_SIZE = 0.5 + +TOTAL_IMAGES = 0 + +# Try to preload BadgerPunk image +try: + os.mkdir("images") +except OSError: + pass + +try: + import badgerpunk + with open("images/badgerpunk.bin", "wb") as f: + f.write(badgerpunk.data()) + f.flush() + with open("images/readme.txt", "w") as f: + f.write(REAMDE) + f.flush() + del badgerpunk +except (OSError, ImportError): + pass + +try: + IMAGES = [f for f in os.listdir("/images") if f.endswith(".bin")] + TOTAL_IMAGES = len(IMAGES) +except OSError: + pass + + +display = badger2040.Badger2040() + +button_a = machine.Pin(badger2040.BUTTON_A, machine.Pin.IN, machine.Pin.PULL_DOWN) +button_b = machine.Pin(badger2040.BUTTON_B, machine.Pin.IN, machine.Pin.PULL_DOWN) +button_c = machine.Pin(badger2040.BUTTON_C, machine.Pin.IN, machine.Pin.PULL_DOWN) + +button_up = machine.Pin(badger2040.BUTTON_UP, machine.Pin.IN, machine.Pin.PULL_DOWN) +button_down = machine.Pin(badger2040.BUTTON_DOWN, machine.Pin.IN, machine.Pin.PULL_DOWN) + +image = bytearray(int(296 * 128 / 8)) +current_image = 0 +show_info = True + + +# Draw an overlay box with a given message within it +def draw_overlay(message, width, height, line_spacing, text_size): + + # Draw a light grey background + display.pen(12) + display.rectangle((WIDTH - width) // 2, (HEIGHT - height) // 2, width, height) + + # Take the provided message and split it up into + # lines that fit within the specified width + words = message.split(" ") + + lines = [] + current_line = "" + for word in words: + if display.measure_text(current_line + word + " ", text_size) < width: + current_line += word + " " + else: + lines.append(current_line.strip()) + current_line = word + " " + lines.append(current_line.strip()) + + display.pen(0) + display.thickness(2) + + # Display each line of text from the message, centre-aligned + num_lines = len(lines) + for i in range(num_lines): + length = display.measure_text(lines[i], text_size) + current_line = (i * line_spacing) - ((num_lines - 1) * line_spacing) // 2 + display.text(lines[i], (WIDTH - length) // 2, (HEIGHT // 2) + current_line, text_size) + + +def show_image(n): + file = IMAGES[n] + name = file.split(".")[0] + open("images/{}".format(file), "r").readinto(image) + display.image(image) + + if show_info: + name_length = display.measure_text(name, 0.5) + display.pen(0) + display.rectangle(0, HEIGHT - 21, name_length + 11, 21) + display.pen(15) + display.rectangle(0, HEIGHT - 20, name_length + 10, 20) + display.pen(0) + display.text(name, 5, HEIGHT - 10, 0.5) + + for i in range(TOTAL_IMAGES): + x = 286 + y = int((128 / 2) - (TOTAL_IMAGES * 10 / 2) + (i * 10)) + display.pen(0) + display.rectangle(x, y, 8, 8) + if current_image != i: + display.pen(15) + display.rectangle(x + 1, y + 1, 6, 6) + + display.update() + + +if TOTAL_IMAGES == 0: + display.pen(15) + display.clear() + draw_overlay("To run this demo, create an /images directory on your device and upload some 1bit 296x128 pixel images.", WIDTH - OVERLAY_BORDER, HEIGHT - OVERLAY_BORDER, OVERLAY_SPACING, OVERLAY_TEXT_SIZE) + display.update() + sys.exit() + + +show_image(current_image) + + +while True: + if button_up.value(): + if current_image > 0: + current_image -= 1 + show_image(current_image) + if button_down.value(): + if current_image < TOTAL_IMAGES - 1: + current_image += 1 + show_image(current_image) + if button_a.value(): + show_info = not show_info + show_image(current_image) + if button_b.value() or button_c.value(): + display.pen(15) + display.clear() + draw_overlay("To add images connect Badger2040 to a PC, load up Thonny, and see readme.txt in images/", WIDTH - OVERLAY_BORDER, HEIGHT - OVERLAY_BORDER, OVERLAY_SPACING, 0.5) + display.update() + time.sleep(4) + show_image(current_image) + + time.sleep(0.01) diff --git a/badger2040/os/badger2040/info.py b/badger2040/os/badger2040/info.py new file mode 100644 index 0000000..94c3b1a --- /dev/null +++ b/badger2040/os/badger2040/info.py @@ -0,0 +1,38 @@ +import badger2040 +import time +from badger2040 import WIDTH + +TEXT_SIZE = 0.45 +LINE_HEIGHT = 16 + +display = badger2040.Badger2040() +display.pen(0) +display.rectangle(0, 0, WIDTH, 16) +display.thickness(1) +display.pen(15) +display.text("badgerOS", 3, 8, 0.4) + +display.pen(0) + +y = 16 + int(LINE_HEIGHT / 2) + +display.text("Made by Pimoroni, powered by MicroPython", 0, y, TEXT_SIZE) +y += LINE_HEIGHT +display.text("Dual-core RP2040, 133MHz, 264KB RAM", 0, y, TEXT_SIZE) +y += LINE_HEIGHT +display.text("2MB Flash (1MB OS, 1MB Storage)", 0, y, TEXT_SIZE) +y += LINE_HEIGHT +display.text("296x128 pixel Black/White e-Ink", 0, y, TEXT_SIZE) +y += LINE_HEIGHT +y += LINE_HEIGHT + +display.thickness(2) +display.text("For more info:", 0, y, TEXT_SIZE) +display.thickness(1) +y += LINE_HEIGHT +display.text("https://pimoroni.com/badger2040", 0, y, TEXT_SIZE) + +display.update() + +while True: + time.sleep(1) diff --git a/badger2040/os/badger2040/launcher.py b/badger2040/os/badger2040/launcher.py new file mode 100644 index 0000000..0f0c108 --- /dev/null +++ b/badger2040/os/badger2040/launcher.py @@ -0,0 +1,260 @@ +import gc +import os +import time +import math +import machine +import badger2040 +from badger2040 import WIDTH +import launchericons + +# for e.g. 2xAAA batteries, try max 3.4 min 3.0 +MAX_BATTERY_VOLTAGE = 4.0 +MIN_BATTERY_VOLTAGE = 3.2 + + +page = 0 +font_size = 1 +inverted = False + +icons = bytearray(launchericons.data()) +icons_width = 576 + +examples = [ + ("_clock", 0), + ("_fonts", 1), + ("_ebook", 2), + ("_image", 3), + ("_list", 4), + ("_badge", 5), + ("_qrgen", 8), + ("_info", 6), + ("_help", 7), +] + +font_sizes = (0.5, 0.7, 0.9) + +# Approximate center lines for buttons A, B and C +centers = (41, 147, 253) + +MAX_PAGE = math.ceil(len(examples) / 3) + +button_a = machine.Pin(badger2040.BUTTON_A, machine.Pin.IN, machine.Pin.PULL_DOWN) +button_b = machine.Pin(badger2040.BUTTON_B, machine.Pin.IN, machine.Pin.PULL_DOWN) +button_c = machine.Pin(badger2040.BUTTON_C, machine.Pin.IN, machine.Pin.PULL_DOWN) +button_up = machine.Pin(badger2040.BUTTON_UP, machine.Pin.IN, machine.Pin.PULL_DOWN) +button_down = machine.Pin(badger2040.BUTTON_DOWN, machine.Pin.IN, machine.Pin.PULL_DOWN) +# Inverted. For reasons. +button_user = machine.Pin(badger2040.BUTTON_USER, machine.Pin.IN, machine.Pin.PULL_UP) + +# Battery measurement +vbat_adc = machine.ADC(badger2040.PIN_BATTERY) +vref_adc = machine.ADC(badger2040.PIN_1V2_REF) +vref_en = machine.Pin(badger2040.PIN_VREF_POWER) +vref_en.init(machine.Pin.OUT) +vref_en.value(0) + + +display = badger2040.Badger2040() + + +def map_value(input, in_min, in_max, out_min, out_max): + return (((input - in_min) * (out_max - out_min)) / (in_max - in_min)) + out_min + + +def get_battery_level(): + # Enable the onboard voltage reference + vref_en.value(1) + + # Calculate the logic supply voltage, as will be lower that the usual 3.3V when running off low batteries + vdd = 1.24 * (65535 / vref_adc.read_u16()) + vbat = ( + (vbat_adc.read_u16() / 65535) * 3 * vdd + ) # 3 in this is a gain, not rounding of 3.3V + + # Disable the onboard voltage reference + vref_en.value(0) + + # Convert the voltage to a level to display onscreen + return int(map_value(vbat, MIN_BATTERY_VOLTAGE, MAX_BATTERY_VOLTAGE, 0, 4)) + + +def draw_battery(level, x, y): + # Outline + display.thickness(1) + display.pen(15) + display.rectangle(x, y, 19, 10) + # Terminal + display.rectangle(x + 19, y + 3, 2, 4) + display.pen(0) + display.rectangle(x + 1, y + 1, 17, 8) + if level < 1: + display.pen(0) + display.line(x + 3, y, x + 3 + 10, y + 10) + display.line(x + 3 + 1, y, x + 3 + 11, y + 10) + display.pen(15) + display.line(x + 2 + 2, y - 1, x + 4 + 12, y + 11) + display.line(x + 2 + 3, y - 1, x + 4 + 13, y + 11) + return + # Battery Bars + display.pen(15) + for i in range(4): + if level / 4 > (1.0 * i) / 4: + display.rectangle(i * 4 + x + 2, y + 2, 3, 6) + + +def draw_disk_usage(x): + # f_bfree and f_bavail should be the same? + # f_files, f_ffree, f_favail and f_flag are unsupported. + f_bsize, f_frsize, f_blocks, f_bfree, _, _, _, _, _, f_namemax = os.statvfs( + "/") + + f_total_size = f_frsize * f_blocks + f_total_free = f_bsize * f_bfree + f_total_used = f_total_size - f_total_free + + f_used = 100 / f_total_size * f_total_used + # f_free = 100 / f_total_size * f_total_free + + display.image( + bytearray( + ( + 0b00000000, + 0b00111100, + 0b00111100, + 0b00111100, + 0b00111000, + 0b00000000, + 0b00000000, + 0b00000001, + ) + ), + 8, + 8, + x, + 4, + ) + display.pen(15) + display.rectangle(x + 10, 3, 80, 10) + display.pen(0) + display.rectangle(x + 11, 4, 78, 8) + display.pen(15) + display.rectangle(x + 12, 5, int(76 / 100.0 * f_used), 6) + display.text("{:.2f}%".format(f_used), x + 91, 8, 0.4) + + +def render(): + display.pen(15) + display.clear() + display.pen(0) + display.thickness(2) + + max_icons = min(3, len(examples[(page * 3):])) + + for i in range(max_icons): + x = centers[i] + label, icon = examples[i + (page * 3)] + label = label[1:].replace("_", " ") + display.pen(0) + display.icon(icons, icon, icons_width, 64, x - 32, 24) + w = display.measure_text(label, font_sizes[font_size]) + display.text(label, x - int(w / 2), 16 + 80, font_sizes[font_size]) + + for i in range(MAX_PAGE): + x = 286 + y = int((128 / 2) - (MAX_PAGE * 10 / 2) + (i * 10)) + display.pen(0) + display.rectangle(x, y, 8, 8) + if page != i: + display.pen(15) + display.rectangle(x + 1, y + 1, 6, 6) + + display.pen(0) + display.rectangle(0, 0, WIDTH, 16) + display.thickness(1) + draw_disk_usage(90) + draw_battery(get_battery_level(), WIDTH - 22 - 3, 3) + display.pen(15) + display.text("badgerOS", 3, 8, 0.4) + + display.update() + + +def launch(file): + for k in locals().keys(): + if k not in ("gc", "file", "machine"): + del locals()[k] + gc.collect() + try: + __import__(file[1:]) # Try to import _[file] (drop underscore prefix) + except ImportError: + __import__(file) # Failover to importing [_file] + machine.reset() # Exit back to launcher + + +def launch_example(index): + try: + launch(examples[(page * 3) + index][0]) + return True + except IndexError: + return False + + +def button(pin): + global page, font_size, inverted + + if button_user.value(): # User button is NOT held down + if pin == button_a: + launch_example(0) + if pin == button_b: + launch_example(1) + if pin == button_c: + launch_example(2) + if pin == button_up: + if page > 0: + page -= 1 + render() + if pin == button_down: + if page < MAX_PAGE - 1: + page += 1 + render() + else: # User button IS held down + if pin == button_up: + font_size += 1 + if font_size == len(font_sizes): + font_size = 0 + render() + if pin == button_down: + font_size -= 1 + if font_size < 0: + font_size = 0 + render() + if pin == button_a: + inverted = not inverted + display.invert(inverted) + render() + + +display.update_speed(badger2040.UPDATE_MEDIUM) +render() +display.update_speed(badger2040.UPDATE_FAST) + + +# Wait for wakeup button to be released +while button_a.value() or button_b.value() or button_c.value() or button_up.value() or button_down.value(): + pass + + +while True: + if button_a.value(): + button(button_a) + if button_b.value(): + button(button_b) + if button_c.value(): + button(button_c) + + if button_up.value(): + button(button_up) + if button_down.value(): + button(button_down) + + time.sleep(0.01) diff --git a/badger2040/os/badger2040/led.py b/badger2040/os/badger2040/led.py new file mode 100644 index 0000000..811d294 --- /dev/null +++ b/badger2040/os/badger2040/led.py @@ -0,0 +1,12 @@ +# Blinky badger fun! + +import badger2040 +import time + +badger = badger2040.Badger2040() + +while True: + badger.led(255) + time.sleep(1) + badger.led(0) + time.sleep(1) diff --git a/badger2040/os/badger2040/list.py b/badger2040/os/badger2040/list.py new file mode 100644 index 0000000..a2846ca --- /dev/null +++ b/badger2040/os/badger2040/list.py @@ -0,0 +1,311 @@ +import badger2040 +import machine +import time + +# **** Put your list title and contents here ***** +list_title = "Checklist" +list_content = ["Badger", "Badger", "Badger", "Badger", "Badger", "Mushroom", "Mushroom", "Snake"] +list_states = [False] * len(list_content) +list_file = "checklist.txt" + + +# Global Constants +WIDTH = badger2040.WIDTH +HEIGHT = badger2040.HEIGHT + +ARROW_THICKNESS = 3 +ARROW_WIDTH = 18 +ARROW_HEIGHT = 14 +ARROW_PADDING = 2 + +MAX_ITEM_CHARS = 26 +TITLE_TEXT_SIZE = 0.7 +ITEM_TEXT_SIZE = 0.6 +ITEM_SPACING = 20 + +LIST_START = 40 +LIST_PADDING = 2 +LIST_WIDTH = WIDTH - LIST_PADDING - LIST_PADDING - ARROW_WIDTH +LIST_HEIGHT = HEIGHT - LIST_START - LIST_PADDING - ARROW_HEIGHT + + +def save_list(): + with open(list_file, "w") as f: + f.write(list_title + "\n") + for i in range(len(list_content)): + list_item = list_content[i] + if list_states[i]: + list_item += " X" + f.write(list_item + "\n") + + +# ------------------------------ +# Drawing functions +# ------------------------------ + +# Draw the list of items +def draw_list(items, item_states, start_item, highlighted_item, x, y, width, height, item_height, columns): + item_x = 0 + item_y = 0 + current_col = 0 + for i in range(start_item, len(items)): + if i == highlighted_item: + display.pen(12) + display.rectangle(item_x, item_y + y - (item_height // 2), width // columns, item_height) + display.pen(0) + display.text(items[i], item_x + x + item_height, item_y + y, ITEM_TEXT_SIZE) + draw_checkbox(item_x, item_y + y - (item_height // 2), item_height, 15, 0, 2, item_states[i], 2) + item_y += item_height + if item_y >= height - (item_height // 2): + item_x += width // columns + item_y = 0 + current_col += 1 + if current_col >= columns: + return + + +# Draw a upward arrow +def draw_up(x, y, width, height, thickness, padding): + border = (thickness // 4) + padding + display.line(x + border, y + height - border, + x + (width // 2), y + border) + display.line(x + (width // 2), y + border, + x + width - border, y + height - border) + + +# Draw a downward arrow +def draw_down(x, y, width, height, thickness, padding): + border = (thickness // 2) + padding + display.line(x + border, y + border, + x + (width // 2), y + height - border) + display.line(x + (width // 2), y + height - border, + x + width - border, y + border) + + +# Draw a left arrow +def draw_left(x, y, width, height, thickness, padding): + border = (thickness // 2) + padding + display.line(x + width - border, y + border, + x + border, y + (height // 2)) + display.line(x + border, y + (height // 2), + x + width - border, y + height - border) + + +# Draw a right arrow +def draw_right(x, y, width, height, thickness, padding): + border = (thickness // 2) + padding + display.line(x + border, y + border, + x + width - border, y + (height // 2)) + display.line(x + width - border, y + (height // 2), + x + border, y + height - border) + + +# Draw a tick +def draw_tick(x, y, width, height, thickness, padding): + border = (thickness // 2) + padding + display.line(x + border, y + ((height * 2) // 3), + x + (width // 2), y + height - border) + display.line(x + (width // 2), y + height - border, + x + width - border, y + border) + + +# Draw a cross +def draw_cross(x, y, width, height, thickness, padding): + border = (thickness // 2) + padding + display.line(x + border, y + border, x + width - border, y + height - border) + display.line(x + width - border, y + border, x + border, y + height - border) + + +# Draw a checkbox with or without a tick +def draw_checkbox(x, y, size, background, foreground, thickness, tick, padding): + border = (thickness // 2) + padding + display.pen(background) + display.rectangle(x + border, y + border, size - (border * 2), size - (border * 2)) + display.pen(foreground) + display.thickness(thickness) + display.line(x + border, y + border, x + size - border, y + border) + display.line(x + border, y + border, x + border, y + size - border) + display.line(x + size - border, y + border, x + size - border, y + size - border) + display.line(x + border, y + size - border, x + size - border, y + size - border) + if tick: + draw_tick(x, y, size, size, thickness, 2 + border) + + +# ------------------------------ +# Program setup +# ------------------------------ + +# Global variables +update = True +needs_save = False +current_item = 0 +items_per_page = 0 + +# Create a new Badger and set it to update FAST +display = badger2040.Badger2040() +display.update_speed(badger2040.UPDATE_FAST) + +# Set up the buttons +button_a = machine.Pin(badger2040.BUTTON_A, machine.Pin.IN, machine.Pin.PULL_DOWN) +button_b = machine.Pin(badger2040.BUTTON_B, machine.Pin.IN, machine.Pin.PULL_DOWN) +button_c = machine.Pin(badger2040.BUTTON_C, machine.Pin.IN, machine.Pin.PULL_DOWN) +button_up = machine.Pin(badger2040.BUTTON_UP, machine.Pin.IN, machine.Pin.PULL_DOWN) +button_down = machine.Pin(badger2040.BUTTON_DOWN, machine.Pin.IN, machine.Pin.PULL_DOWN) + +# Find out what the longest item is +longest_item = 0 +for i in range(len(list_content)): + while True: + item = list_content[i] + item_length = display.measure_text(item, ITEM_TEXT_SIZE) + if item_length > 0 and item_length > LIST_WIDTH - ITEM_SPACING: + list_content[i] = item[:-1] + else: + break + longest_item = max(longest_item, display.measure_text(list_content[i], ITEM_TEXT_SIZE)) + + +# And use that to calculate the number of columns we can fit onscreen and how many items that would give +list_columns = 1 +while longest_item + ITEM_SPACING < (LIST_WIDTH // (list_columns + 1)): + list_columns += 1 + +items_per_page = ((LIST_HEIGHT // ITEM_SPACING) + 1) * list_columns + + +# Button handling function +def button(pin): + global update, current_item, needs_save + + if len(list_content) > 0 and not update: + if pin == button_a: + if current_item > 0: + current_item = max(current_item - (items_per_page) // list_columns, 0) + update = True + return + if pin == button_b: + list_states[current_item] = not list_states[current_item] + needs_save = True + update = True + return + if pin == button_c: + if current_item < len(list_content) - 1: + current_item = min(current_item + (items_per_page) // list_columns, len(list_content) - 1) + update = True + return + if pin == button_up: + if current_item > 0: + current_item -= 1 + update = True + return + if pin == button_down: + if current_item < len(list_content) - 1: + current_item += 1 + update = True + return + + +# Register the button handling function with the buttons +button_a.irq(trigger=machine.Pin.IRQ_RISING, handler=button) +button_b.irq(trigger=machine.Pin.IRQ_RISING, handler=button) +button_c.irq(trigger=machine.Pin.IRQ_RISING, handler=button) +button_up.irq(trigger=machine.Pin.IRQ_RISING, handler=button) +button_down.irq(trigger=machine.Pin.IRQ_RISING, handler=button) + + +# ------------------------------ +# Main program loop +# ------------------------------ + +try: + with open(list_file, "r") as f: + list_content = f.read().strip().split("\n") + list_title = list_content.pop(0) + list_states = [False] * len(list_content) + for i in range(len(list_content)): + list_content[i] = list_content[i].strip() + if list_content[i].endswith(" X"): + list_states[i] = True + list_content[i] = list_content[i][:-2] + +except OSError: + save_list() + + +while True: + if needs_save: + save_list() + needs_save = False + + if update: + display.pen(15) + display.clear() + + display.pen(12) + display.rectangle(WIDTH - ARROW_WIDTH, 0, ARROW_WIDTH, HEIGHT) + display.rectangle(0, HEIGHT - ARROW_HEIGHT, WIDTH, ARROW_HEIGHT) + + y = LIST_PADDING + 12 + display.pen(0) + display.thickness(3) + display.text(list_title, LIST_PADDING, y, TITLE_TEXT_SIZE) + + y += 12 + display.pen(0) + display.thickness(2) + display.line(LIST_PADDING, y, WIDTH - LIST_PADDING - ARROW_WIDTH, y) + + if len(list_content) > 0: + page_item = 0 + if items_per_page > 0: + page_item = (current_item // items_per_page) * items_per_page + + # Draw the list + display.pen(0) + display.thickness(2) + draw_list(list_content, list_states, page_item, current_item, LIST_PADDING, LIST_START, + LIST_WIDTH, LIST_HEIGHT, ITEM_SPACING, list_columns) + + # Draw the interaction button icons + display.pen(0) + display.thickness(ARROW_THICKNESS) + + # Previous item + if current_item > 0: + draw_up(WIDTH - ARROW_WIDTH, (HEIGHT // 4) - (ARROW_HEIGHT // 2), + ARROW_WIDTH, ARROW_HEIGHT, ARROW_THICKNESS, ARROW_PADDING) + + # Next item + if current_item < (len(list_content) - 1): + draw_down(WIDTH - ARROW_WIDTH, ((HEIGHT * 3) // 4) - (ARROW_HEIGHT // 2), + ARROW_WIDTH, ARROW_HEIGHT, ARROW_THICKNESS, ARROW_PADDING) + + # Previous column + if current_item > 0: + draw_left((WIDTH // 7) - (ARROW_WIDTH // 2), HEIGHT - ARROW_HEIGHT, + ARROW_WIDTH, ARROW_HEIGHT, ARROW_THICKNESS, ARROW_PADDING) + + # Next column + if current_item < (len(list_content) - 1): + draw_right(((WIDTH * 6) // 7) - (ARROW_WIDTH // 2), HEIGHT - ARROW_HEIGHT, + ARROW_WIDTH, ARROW_HEIGHT, ARROW_THICKNESS, ARROW_PADDING) + + if list_states[current_item]: + # Tick off item + draw_cross((WIDTH // 2) - (ARROW_WIDTH // 2), HEIGHT - ARROW_HEIGHT, + ARROW_HEIGHT, ARROW_HEIGHT, ARROW_THICKNESS, ARROW_PADDING) + else: + # Untick item + draw_tick((WIDTH // 2) - (ARROW_WIDTH // 2), HEIGHT - ARROW_HEIGHT, + ARROW_HEIGHT, ARROW_HEIGHT, ARROW_THICKNESS, ARROW_PADDING) + else: + # Say that the list is empty + empty_text = "Nothing Here" + text_length = display.measure_text(empty_text, ITEM_TEXT_SIZE) + display.text(empty_text, ((LIST_PADDING + LIST_WIDTH) - text_length) // 2, (LIST_HEIGHT // 2) + LIST_START - (ITEM_SPACING // 4), ITEM_TEXT_SIZE) + + display.update() + display.update_speed(badger2040.UPDATE_TURBO) + update = False + + time.sleep(0.1) diff --git a/badger2040/os/badger2040/micropython-builtins.cmake b/badger2040/os/badger2040/micropython-builtins.cmake new file mode 100644 index 0000000..1e74802 --- /dev/null +++ b/badger2040/os/badger2040/micropython-builtins.cmake @@ -0,0 +1,54 @@ +function (convert_image TARGET IMAGE) + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/../modules/${IMAGE}.py + + COMMAND + cd ${CMAKE_CURRENT_LIST_DIR}/assets && python3 ../../../../examples/badger2040/image_converter/convert.py --out_dir ${CMAKE_CURRENT_BINARY_DIR}/../modules --py ${IMAGE}.png + + DEPENDS ${CMAKE_CURRENT_LIST_DIR}/assets/${IMAGE}.png + ) + target_sources(${TARGET} INTERFACE ${CMAKE_CURRENT_BINARY_DIR}/../modules/${IMAGE}.py) +endfunction() + +function (convert_raw TARGET SRC DST) + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/../modules/${DST}.py + + COMMAND + cd ${CMAKE_CURRENT_LIST_DIR}/assets && python3 ../../../../examples/badger2040/image_converter/data_to_py.py ${CMAKE_CURRENT_LIST_DIR}/assets/${SRC} ${CMAKE_CURRENT_BINARY_DIR}/../modules/${DST}.py + + DEPENDS ${CMAKE_CURRENT_LIST_DIR}/assets/${SRC} + ) + target_sources(${TARGET} INTERFACE ${CMAKE_CURRENT_BINARY_DIR}/../modules/${DST}.py) +endfunction() + +function (copy_module TARGET SRC DST) + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/../modules/${DST}.py + + COMMAND + cp ${SRC} ${CMAKE_CURRENT_BINARY_DIR}/../modules/${DST}.py + + DEPENDS ${src} + ) + + target_sources(${TARGET} INTERFACE ${CMAKE_CURRENT_BINARY_DIR}/../modules/${DST}.py) +endfunction() + +convert_image(usermod_badger2040 badge_image) +convert_image(usermod_badger2040 badgerpunk) +convert_image(usermod_badger2040 launchericons) + +convert_raw(usermod_badger2040 289-0-wind-in-the-willows-abridged.txt witw) + +copy_module(usermod_badger2040 ${CMAKE_CURRENT_LIST_DIR}/assets/boot.py boot) +copy_module(usermod_badger2040 ${CMAKE_CURRENT_LIST_DIR}/launcher.py _launcher) +copy_module(usermod_badger2040 ${CMAKE_CURRENT_LIST_DIR}/clock.py _clock) +copy_module(usermod_badger2040 ${CMAKE_CURRENT_LIST_DIR}/fonts.py _fonts) +copy_module(usermod_badger2040 ${CMAKE_CURRENT_LIST_DIR}/ebook.py _ebook) +copy_module(usermod_badger2040 ${CMAKE_CURRENT_LIST_DIR}/image.py _image) +copy_module(usermod_badger2040 ${CMAKE_CURRENT_LIST_DIR}/list.py _list) +copy_module(usermod_badger2040 ${CMAKE_CURRENT_LIST_DIR}/badge.py _badge) +copy_module(usermod_badger2040 ${CMAKE_CURRENT_LIST_DIR}/help.py _help) +copy_module(usermod_badger2040 ${CMAKE_CURRENT_LIST_DIR}/info.py _info) +copy_module(usermod_badger2040 ${CMAKE_CURRENT_LIST_DIR}/qrgen.py _qrgen) diff --git a/badger2040/os/badger2040/pin_interrupt.py b/badger2040/os/badger2040/pin_interrupt.py new file mode 100644 index 0000000..3220dd4 --- /dev/null +++ b/badger2040/os/badger2040/pin_interrupt.py @@ -0,0 +1,65 @@ +import badger2040 +import machine + +display = badger2040.Badger2040() + +button_a = machine.Pin(badger2040.BUTTON_A, machine.Pin.IN, machine.Pin.PULL_DOWN) +button_b = machine.Pin(badger2040.BUTTON_B, machine.Pin.IN, machine.Pin.PULL_DOWN) + +display.thickness(10) +display.pen(0) +display.line(0, 5, 295, 5) +display.line(0, 123, 295, 123) + +display.thickness(1) +for x in range(14): + display.line(x * 20, 10, x * 20, 118) + +display.line(0, 0, 295, 127) +display.line(0, 127, 295, 0) + +display.font("sans") +display.thickness(5) +display.text("Hello World", 10, 30, 1.0) +display.pen(7) +display.text("Hello World", 10, 60, 1.0) +display.pen(11) +display.text("Hello World", 10, 90, 1.0) + +display.update() + +dirty = False +pressed = None + + +def button(pin): + global dirty, pressed + if pin == button_a: + pressed = "Button A" + dirty = True + return + if pin == button_b: + pressed = "Button B" + dirty = True + return + + +button_a.irq(trigger=machine.Pin.IRQ_RISING, handler=button) +button_b.irq(trigger=machine.Pin.IRQ_RISING, handler=button) + +# This breaks Thonny, since it's no longer possible to Stop the code +# need to press the reset button on the board... +# It will also crash your USB bus, probably, your whole bus... +# @micropython.asm_thumb +# def lightsleep(): +# wfi() + +while True: + if dirty: + display.pen(15) + display.clear() + display.pen(0) + display.text(pressed, 10, 60, 2.0) + display.update() + dirty = False + # machine.lightsleep() # Currently imposible to wake from this on IRQ diff --git a/badger2040/os/badger2040/qrgen.py b/badger2040/os/badger2040/qrgen.py new file mode 100644 index 0000000..1c980c1 --- /dev/null +++ b/badger2040/os/badger2040/qrgen.py @@ -0,0 +1,70 @@ +import badger2040 +import qrcode +import time + + +# Open the qrcode file +try: + text = open("qrcode.txt", "r") +except OSError: + text = open("qrcode.txt", "w") + text.write("""https://pimoroni.com/badger2040 +Badger 2040 +* 296x128 1-bit e-ink +* six user buttons +* user LED +* 2MB QSPI flash + +Scan this code to learn +more about Badger 2040. +""") + text.flush() + text.seek(0) + + +lines = text.read().strip().split("\n") +code_text = lines.pop(0) +title_text = lines.pop(0) +detail_text = lines + +display = badger2040.Badger2040() +code = qrcode.QRCode() + + +def measure_qr_code(size, code): + w, h = code.get_size() + module_size = int(size / w) + return module_size * w, module_size + + +def draw_qr_code(ox, oy, size, code): + size, module_size = measure_qr_code(size, code) + display.pen(15) + display.rectangle(ox, oy, size, size) + display.pen(0) + for x in range(size): + for y in range(size): + if code.get_module(x, y): + display.rectangle(ox + x * module_size, oy + y * module_size, module_size, module_size) + + +code.set_text(code_text) +size, _ = measure_qr_code(128, code) +left = top = int((badger2040.HEIGHT / 2) - (size / 2)) +draw_qr_code(left, top, 128, code) + +left = 128 + 5 + +display.thickness(2) +display.text(title_text, left, 20, 0.5) +display.thickness(1) + +top = 40 +for line in detail_text: + display.text(line, left, top, 0.4) + top += 10 + +display.update() + +while True: + time.sleep(1.0) diff --git a/badger2040/poetry.lock b/badger2040/poetry.lock new file mode 100644 index 0000000..bbdb9e2 --- /dev/null +++ b/badger2040/poetry.lock @@ -0,0 +1,58 @@ +[[package]] +name = "pillow" +version = "9.1.1" +description = "Python Imaging Library (Fork)" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.extras] +docs = ["olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-issues (>=3.0.1)", "sphinx-removed-in", "sphinx-rtd-theme (>=1.0)", "sphinxext-opengraph"] +tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] + +[metadata] +lock-version = "1.1" +python-versions = "^3.8" +content-hash = "8a3b1f7b4c4af4b58e7bcb3333c009c0da1516d59db4332afeca1ce6a360c1ad" + +[metadata.files] +pillow = [ + {file = "Pillow-9.1.1-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:42dfefbef90eb67c10c45a73a9bc1599d4dac920f7dfcbf4ec6b80cb620757fe"}, + {file = "Pillow-9.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ffde4c6fabb52891d81606411cbfaf77756e3b561b566efd270b3ed3791fde4e"}, + {file = "Pillow-9.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c857532c719fb30fafabd2371ce9b7031812ff3889d75273827633bca0c4602"}, + {file = "Pillow-9.1.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:59789a7d06c742e9d13b883d5e3569188c16acb02eeed2510fd3bfdbc1bd1530"}, + {file = "Pillow-9.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d45dbe4b21a9679c3e8b3f7f4f42a45a7d3ddff8a4a16109dff0e1da30a35b2"}, + {file = "Pillow-9.1.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e9ed59d1b6ee837f4515b9584f3d26cf0388b742a11ecdae0d9237a94505d03a"}, + {file = "Pillow-9.1.1-cp310-cp310-win32.whl", hash = "sha256:b3fe2ff1e1715d4475d7e2c3e8dabd7c025f4410f79513b4ff2de3d51ce0fa9c"}, + {file = "Pillow-9.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:5b650dbbc0969a4e226d98a0b440c2f07a850896aed9266b6fedc0f7e7834108"}, + {file = "Pillow-9.1.1-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:0b4d5ad2cd3a1f0d1df882d926b37dbb2ab6c823ae21d041b46910c8f8cd844b"}, + {file = "Pillow-9.1.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9370d6744d379f2de5d7fa95cdbd3a4d92f0b0ef29609b4b1687f16bc197063d"}, + {file = "Pillow-9.1.1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b761727ed7d593e49671d1827044b942dd2f4caae6e51bab144d4accf8244a84"}, + {file = "Pillow-9.1.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a66fe50386162df2da701b3722781cbe90ce043e7d53c1fd6bd801bca6b48d4"}, + {file = "Pillow-9.1.1-cp37-cp37m-win32.whl", hash = "sha256:2b291cab8a888658d72b575a03e340509b6b050b62db1f5539dd5cd18fd50578"}, + {file = "Pillow-9.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:1d4331aeb12f6b3791911a6da82de72257a99ad99726ed6b63f481c0184b6fb9"}, + {file = "Pillow-9.1.1-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:8844217cdf66eabe39567118f229e275f0727e9195635a15e0e4b9227458daaf"}, + {file = "Pillow-9.1.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b6617221ff08fbd3b7a811950b5c3f9367f6e941b86259843eab77c8e3d2b56b"}, + {file = "Pillow-9.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20d514c989fa28e73a5adbddd7a171afa5824710d0ab06d4e1234195d2a2e546"}, + {file = "Pillow-9.1.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:088df396b047477dd1bbc7de6e22f58400dae2f21310d9e2ec2933b2ef7dfa4f"}, + {file = "Pillow-9.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53c27bd452e0f1bc4bfed07ceb235663a1df7c74df08e37fd6b03eb89454946a"}, + {file = "Pillow-9.1.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:3f6c1716c473ebd1649663bf3b42702d0d53e27af8b64642be0dd3598c761fb1"}, + {file = "Pillow-9.1.1-cp38-cp38-win32.whl", hash = "sha256:c67db410508b9de9c4694c57ed754b65a460e4812126e87f5052ecf23a011a54"}, + {file = "Pillow-9.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:f054b020c4d7e9786ae0404278ea318768eb123403b18453e28e47cdb7a0a4bf"}, + {file = "Pillow-9.1.1-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:c17770a62a71718a74b7548098a74cd6880be16bcfff5f937f900ead90ca8e92"}, + {file = "Pillow-9.1.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f3f6a6034140e9e17e9abc175fc7a266a6e63652028e157750bd98e804a8ed9a"}, + {file = "Pillow-9.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f372d0f08eff1475ef426344efe42493f71f377ec52237bf153c5713de987251"}, + {file = "Pillow-9.1.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09e67ef6e430f90caa093528bd758b0616f8165e57ed8d8ce014ae32df6a831d"}, + {file = "Pillow-9.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66daa16952d5bf0c9d5389c5e9df562922a59bd16d77e2a276e575d32e38afd1"}, + {file = "Pillow-9.1.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d78ca526a559fb84faaaf84da2dd4addef5edb109db8b81677c0bb1aad342601"}, + {file = "Pillow-9.1.1-cp39-cp39-win32.whl", hash = "sha256:55e74faf8359ddda43fee01bffbc5bd99d96ea508d8a08c527099e84eb708f45"}, + {file = "Pillow-9.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:7c150dbbb4a94ea4825d1e5f2c5501af7141ea95825fadd7829f9b11c97aaf6c"}, + {file = "Pillow-9.1.1-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:769a7f131a2f43752455cc72f9f7a093c3ff3856bf976c5fb53a59d0ccc704f6"}, + {file = "Pillow-9.1.1-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:488f3383cf5159907d48d32957ac6f9ea85ccdcc296c14eca1a4e396ecc32098"}, + {file = "Pillow-9.1.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b525a356680022b0af53385944026d3486fc8c013638cf9900eb87c866afb4c"}, + {file = "Pillow-9.1.1-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:6e760cf01259a1c0a50f3c845f9cad1af30577fd8b670339b1659c6d0e7a41dd"}, + {file = "Pillow-9.1.1-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4165205a13b16a29e1ac57efeee6be2dfd5b5408122d59ef2145bc3239fa340"}, + {file = "Pillow-9.1.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:937a54e5694684f74dcbf6e24cc453bfc5b33940216ddd8f4cd8f0f79167f765"}, + {file = "Pillow-9.1.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:baf3be0b9446a4083cc0c5bb9f9c964034be5374b5bc09757be89f5d2fa247b8"}, + {file = "Pillow-9.1.1.tar.gz", hash = "sha256:7502539939b53d7565f3d11d87c78e7ec900d3c72945d4ee0e2f250d598309a0"}, +] diff --git a/badger2040/pyproject.toml b/badger2040/pyproject.toml new file mode 100644 index 0000000..cbcd7e3 --- /dev/null +++ b/badger2040/pyproject.toml @@ -0,0 +1,15 @@ +[tool.poetry] +name = "badger2040" +version = "0.1.0" +description = "scripts et libs pour badger2040" +authors = ["Your Name "] + +[tool.poetry.dependencies] +python = "^3.8" +Pillow = "^9.1.1" + +[tool.poetry.dev-dependencies] + +[build-system] +requires = ["poetry-core>=1.0.0"] +build-backend = "poetry.core.masonry.api"