from flask import Flask, request, jsonify, Response import threading import json import low_level from config import DISPLAY_MAX_X, DISPLAY_MAX_Y app = Flask(__name__) # Shared state — written by Flask thread, read by main loop state = { 'brightness': 100, 'program_top_text_enabled': True, 'program_bottom_text_enabled': True, 'program_vehicles_enabled': True, } _lock = threading.Lock() INDEX_HTML = """ LED Panel Control

LED Panel Control

Top TextWitamy w PTI
Bottom TextSchool programs
VehiclesVehicle interruptions
100
""" @app.route('/') def index(): return Response(INDEX_HTML, mimetype='text/html') @app.route('/display', methods=['GET']) def handle_display(): pixels = [] for y in range(DISPLAY_MAX_Y + 1): row = [] for x in range(DISPLAY_MAX_X + 1): row.append(low_level.get_pixel_color(x, y)) pixels.append(row) return Response(json.dumps(pixels), mimetype='application/json') @app.route('/brightness', methods=['POST']) def handle_brightness(): value = request.form.get('value') if value is not None: with _lock: state['brightness'] = max(0, min(100, int(value))) return 'OK' @app.route('/toggle-program', methods=['POST']) def handle_toggle(): program = request.form.get('program') enabled_str = request.form.get('enabled') if not program or enabled_str is None: return 'Missing program or enabled parameter', 400 enabled = enabled_str.lower() == 'true' key_map = { 'top_text': 'program_top_text_enabled', 'bottom_text': 'program_bottom_text_enabled', 'vehicles': 'program_vehicles_enabled', } if program not in key_map: return 'Unknown program', 400 with _lock: state[key_map[program]] = enabled return 'OK' @app.route('/program-status', methods=['GET']) def handle_status(): with _lock: s = dict(state) return jsonify({ 'top_text': s['program_top_text_enabled'], 'bottom_text': s['program_bottom_text_enabled'], 'vehicles': s['program_vehicles_enabled'], 'brightness': s['brightness'], }) def start_server(host='0.0.0.0', port=80): t = threading.Thread(target=lambda: app.run(host=host, port=port, use_reloader=False), daemon=True) t.start()