Skip to content

Instantly share code, notes, and snippets.

@arpruss
arpruss / dmapwm.ino
Created October 26, 2017 14:59
Arduino stm32f1 code to do PWM with DMA
#include <dma_private.h>
#define PIN_TO_PULSE PB12
#define DMA_PWM_MAX_DUTY 32
uint32_t data[DMA_PWM_MAX_DUTY];
void setDMAPWM(uint32_t pin, uint32_t duty_cycle) {
gpio_dev *dev = digitalPinToPort(pin);
uint32_t maskOn = digitalPinToBitMask(pin);
@arpruss
arpruss / bitbandgpio.ino
Last active November 26, 2017 21:15
stm32f1 bitbanding gpio
#define BITBAND_SRAM_BASE 0x22000000u
#define SRAM_START 0x20000000u
#define BITBAND_PERIPHERAL_BASE 0x42000000u
#define PERIPHERAL_START 0x40000000u
#define BITBAND_SRAM(address, bit) ( *(volatile uint32*)( BITBAND_SRAM_BASE + ((uint32)(address)-SRAM_START) * 32u + (uint32)(bit)*4u) )
#define BITBAND_PERIPHERAL(address, bit) *( (volatile uint32*)( BITBAND_PERIPHERAL_BASE + ((uint32)(address)-PERIPHERAL_START) * 32u + (uint32)(bit)*4u) )
#define GPIO_OFFSET(gpioLetter) (0x400u * (uint32)((gpioLetter)-'A'))
#define BITBAND_GPIO_INPUT(gpioLetter, bit) BITBAND_PERIPHERAL((uint32)&(GPIOA_BASE->IDR)+GPIO_OFFSET(gpioLetter), (bit))
#define BITBAND_GPIO_OUTPUT(gpioLetter, bit) BITBAND_PERIPHERAL((uint32)&(GPIOA_BASE->ODR)+GPIO_OFFSET(gpioLetter), (bit))
@arpruss
arpruss / grab.py
Last active January 11, 2018 19:48
screenshot grabber
import PIL
import PIL.ImageGrab
import os.path
import sys
import keyboard
import ctypes.wintypes
from getopt import getopt
def makefilename(base):
if base.lower().endswith(".png"):
@arpruss
arpruss / disablezoomcontrol.js
Last active August 13, 2018 00:33
Disable zoom control
var meta = document.querySelector('meta[name="viewport"]');
if (meta != null)
meta.content = 'min-width=10, max-width=10000, min-height=10, max-height=10000, initial-scale=1.0, maximum-scale=50.0, minimum-scale=0.02, user-scalable=1';
@arpruss
arpruss / template.py
Last active August 14, 2018 17:32
Process wildcard templates to generate Arduino board files
import re
import sys
dict = {}
overrideDict = {}
ignore = set()
unknown = []
equalRE = re.compile(r'\s*([^<=\s]+)\s*\=\s*(.*)')
copyRE = re.compile(r'\s*([^<=\s]+)\s*\<\=\s*(.*)')
@arpruss
arpruss / remote.py
Created November 26, 2018 04:18
espremote
# Volume and pause/play in Netflix and Acorn with Philips 642 DVD remote
# PageUp/Down with projector remote
import win32com.client
import win32api, win32con, win32gui
from espremote import ESPRemote
try:
from showtime import showtime
except:
pass
@arpruss
arpruss / conciliatepriors.py
Last active February 19, 2019 19:24
averaging priors vs averaging posteriors
from random import *
from math import *
def randomOpen():
while True:
r = random()
if 0 < r:
return r
class Grid(object):
/**
The MIT License (MIT)
Copyright (c) 2015 Don McCurdy
Copyright (c) 2018 Alexander Pruss
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
@arpruss
arpruss / ctrlwmonitor.py
Last active June 28, 2019 20:36
Runs specified commands on ctrl-w press
import evdev
from select import select
from sys import argv, exit
from os import system
TRIGGER_KEY = evdev.ecodes.KEY_W
TRIGGER_MODIFIER_DISJUNCTIVE = set((evdev.ecodes.KEY_LEFTCTRL, evdev.ecodes.KEY_RIGHTCTRL))
keysDown = set()
(function(){
var url = window.location.href;
var m = url.match("/(dp|gp/product)/([^/]+)");
var pid = undefined;
if(m) {
var pid = m[2];
var s = url.match("[^:]*://[^/]+")[0];
window.open(s+"/gp/offer-listing/"+pid);
}})();