Compare commits

..

No commits in common. "5a460f7b5498ec307a3d5b3991a4fd4d77ac2369" and "9eb08d9d96ac9fd3a50b52b7dbdaa193e72fc583" have entirely different histories.

7 changed files with 302 additions and 347 deletions

3
.gitignore vendored
View File

@ -1,5 +1,2 @@
/.idea/
/venv/
/images/ /images/
/tmp?.jpg /tmp?.jpg

View File

@ -1,27 +0,0 @@
BOARD = 1
HIGH = 1
LOW = 0
OUT = 1
IN = 0
FALLING = 0
RISING = 1
def setmode(x):
pass
def setwarnings(x):
pass
def setup(gpio, mode, initial=None):
pass
def output(gpio, state):
pass
def add_event_detect(gpio, edge, callback, bouncetime=None):
pass

Binary file not shown.

View File

@ -1,28 +0,0 @@
from PIL import Image
class Overlay(object):
def __init__(self):
self.alpha = 0
class PiCamera(object):
def __init__(self):
self.resolution = None
def start_preview(self, *args, **kwargs):
pass
def add_overlay(self, *args, **kwargs):
return Overlay()
def remove_overlay(self, *args, **kwargs):
pass
def capture(self, filename, format, *args, **kwargs):
print("FAKE: capture(%s, %s)" % (filename, format))
img = Image.new("RGB", self.resolution, (255, 255, 255))
img.save(filename, format)
def close(self, *args, **kwargs):
pass

Binary file not shown.

View File

@ -1,28 +1,22 @@
#!/usr/bin/python #!/usr/bin/python
import datetime import sys, os, inspect
import imp import pytz, datetime
import inspect
import os
import sys
from math import floor
from shutil import copyfile
from time import sleep from time import sleep
import pygame
from PIL import Image from PIL import Image
from shutil import copyfile
from math import floor
import RPi.GPIO as GPIO
import picamera
import pygame
import random
import time
# ~ import server
try:
imp.find_module('RPi')
import RPi.GPIO as GPIO
except ImportError:
import FakeGPIO as GPIO
try:
imp.find_module('picamera')
import picamera
except ImportError:
import FakePicamera as picamera
__all__ = ["monotonic_time"] __all__ = ["monotonic_time"]
@ -30,29 +24,29 @@ import ctypes
CLOCK_MONOTONIC_RAW = 4 # see <linux/time.h> CLOCK_MONOTONIC_RAW = 4 # see <linux/time.h>
class timespec(ctypes.Structure): class timespec(ctypes.Structure):
_fields_ = [ _fields_ = [
('tv_sec', ctypes.c_long), ('tv_sec', ctypes.c_long),
('tv_nsec', ctypes.c_long) ('tv_nsec', ctypes.c_long)
] ]
librt = ctypes.CDLL('librt.so.1', use_errno=True) librt = ctypes.CDLL('librt.so.1', use_errno=True)
clock_gettime = librt.clock_gettime clock_gettime = librt.clock_gettime
clock_gettime.argtypes = [ctypes.c_int, ctypes.POINTER(timespec)] clock_gettime.argtypes = [ctypes.c_int, ctypes.POINTER(timespec)]
def monotonic_time(): def monotonic_time():
t = timespec() t = timespec()
if clock_gettime(CLOCK_MONOTONIC_RAW, ctypes.pointer(t)) != 0: if clock_gettime(CLOCK_MONOTONIC_RAW , ctypes.pointer(t)) != 0:
errno_ = ctypes.get_errno() errno_ = ctypes.get_errno()
raise OSError(errno_, os.strerror(errno_)) raise OSError(errno_, os.strerror(errno_))
return t.tv_sec + t.tv_nsec * 1e-9 return t.tv_sec + t.tv_nsec * 1e-9
os.chdir(os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))) os.chdir(os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))))
# CONFIGURATION # CONFIGURATION
WIDTH = 800 WIDTH = 800
HEIGHT = 480 HEIGHT = 480
@ -81,11 +75,14 @@ THUMB_HEIGHT = int(THUMB_WIDTH / 1.333)
IMAGES_ORIGINAL = os.path.join(IMAGE_DIR, "original") IMAGES_ORIGINAL = os.path.join(IMAGE_DIR, "original")
IMAGES_TODO = os.path.join(IMAGE_DIR, "todo") IMAGES_TODO = os.path.join(IMAGE_DIR, "todo")
# global variables # global variables
spot_mode = 0 spot_mode = 0
session_start = monotonic_time() session_start = monotonic_time()
# GPIO helpers # GPIO helpers
def led_border(state): def led_border(state):
@ -105,12 +102,14 @@ def next_spot_mode():
set_spot_mode(spot_mode + 1) set_spot_mode(spot_mode + 1)
# user interface # user interface
def button_press(gpio_id): def button_press(gpio_id):
next_spot_mode() next_spot_mode()
# INIT GPIO # INIT GPIO
GPIO.setmode(GPIO.BOARD) GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False) GPIO.setwarnings(False)
@ -137,15 +136,18 @@ led_border(True)
sleep(0.02) sleep(0.02)
led_border(False) led_border(False)
# INIT PYGAME # INIT PYGAME
pygame.init() pygame.init()
pygame.mouse.set_visible(False) pygame.mouse.set_visible(False)
screen = pygame.display.set_mode((WIDTH, HEIGHT)) screen = pygame.display.set_mode((WIDTH,HEIGHT))
# LOAD GRAPHICS # LOAD GRAPHICS
gfx = {} gfx = {}
def _load(name): def _load(name):
filename = "%s.png" % name filename = "%s.png" % name
path = os.path.join(GRAPHICS_DIR, filename) path = os.path.join(GRAPHICS_DIR, filename)
@ -155,7 +157,6 @@ def _load(name):
gfx[name] = (img, rect) gfx[name] = (img, rect)
_load("begin") _load("begin")
_load("loading") _load("loading")
_load("yes") _load("yes")
@ -165,6 +166,8 @@ _load("end_no")
_load("saved") _load("saved")
_load("canceled") _load("canceled")
# LOAD COUNTDOWN OVERLAYS # LOAD COUNTDOWN OVERLAYS
img_cdn = [] img_cdn = []
pad_cdn = [] pad_cdn = []
@ -182,6 +185,7 @@ for i in range(0, COUNTDOWN):
pad_cdn.append(pad) pad_cdn.append(pad)
# FUNCTIONS ======================================================================================== # FUNCTIONS ========================================================================================
def waitForEvent(): def waitForEvent():
@ -197,6 +201,7 @@ def waitForEvent():
return events return events
def waitForTouch(): def waitForTouch():
pos = (-1, -1) pos = (-1, -1)
while True: while True:
@ -208,6 +213,7 @@ def waitForTouch():
return pos return pos
def maintainance(): def maintainance():
screen.fill(COLOR_BACK) screen.fill(COLOR_BACK)
screen.blit(maintain, maintain_rect) screen.blit(maintain, maintain_rect)
@ -217,6 +223,7 @@ def maintainance():
pos = waitForTouch() pos = waitForTouch()
def waitForBegin(): def waitForBegin():
screen.fill(COLOR_BACK) screen.fill(COLOR_BACK)
screen.blit(*gfx["begin"]) screen.blit(*gfx["begin"])
@ -228,15 +235,17 @@ def waitForBegin():
maintainance() maintainance()
def countdown(camera, pad, img): def countdown(camera, pad, img):
sleep(PIC_INTERVAL) sleep(PIC_INTERVAL)
o = camera.add_overlay(pad.tobytes(), size=img.size) o = camera.add_overlay(pad.tostring(), size=img.size)
o.alpha = OVERLAY_ALPHA o.alpha = OVERLAY_ALPHA
o.layer = 3 o.layer = 3
sleep(TEXT_INTERVAL) sleep(TEXT_INTERVAL)
camera.remove_overlay(o) camera.remove_overlay(o)
def makePhotos(): def makePhotos():
# CLEAR SCREEN # CLEAR SCREEN
screen.fill(COLOR_BACK) screen.fill(COLOR_BACK)
@ -275,6 +284,7 @@ def makePhotos():
camera.close() camera.close()
def chooseImages(): def chooseImages():
# clear screen # clear screen
screen.fill(COLOR_BACK) screen.fill(COLOR_BACK)
@ -299,6 +309,7 @@ def chooseImages():
x = x + THUMB_WIDTH + BORDER x = x + THUMB_WIDTH + BORDER
save = False save = False
cancel = False cancel = False
any_choice = False any_choice = False
@ -358,6 +369,7 @@ def chooseImages():
return (choices, save) return (choices, save)
def saveImages(choices): def saveImages(choices):
local = datetime.datetime.now() local = datetime.datetime.now()
session_age = (monotonic_time() - session_start) session_age = (monotonic_time() - session_start)
@ -387,6 +399,7 @@ def saveImages(choices):
copyfile(path_original, path_todo) copyfile(path_original, path_todo)
try: try:
while 1: while 1:
waitForBegin() waitForBegin()