Skip to content

Instantly share code, notes, and snippets.

View cnlohr's full-sized avatar

CNLohr cnlohr

View GitHub Profile
@cnlohr
cnlohr / i2s_stream.c
Last active July 1, 2023 21:58
ESP32 I2S C Code Example/Snippet
//Almost entirelly lifted directly from https://github.com/igrr/esp32-cam-demo
//Just clocked a little differently and has chained buffers.
//This totes works with the I2S bus on the ESP32 for READING 16 wires simultaneously.
//Can be clocked off of I2S's internal controller or an external clock.
#define I2S_D0 4
#define I2S_D1 5
#define I2S_D2 18
#define I2S_D3 19
#define I2S_D4 36
@cnlohr
cnlohr / gist:83719f445cc5c6614ae51270d683fdd4
Created December 4, 2016 03:57
HTC Vive Example Data Files
Controlled environment with LED, right on edge.
POST 0: 5 (55ab) - 48 fc 30 e1 ad da c4 39 f0
POST 0: 5 (55b1) - 48 fc 40 a7 b2 30 de db f9
POST 0: 5 (55b7) - 48 fc db 6d b7 18 46 82 1c
POST 0: 5 (55ba) - 48 fc 2a 34 bc 56 8d a2 f1
POST 0: 5 (55c0) - 48 fb fd f9 c0 7b 6b a8 0c
POST 0: 5 (55c3) - 48 fc 21 c0 c5 55 28 20 d3
POST 0: 5 (55c8) - 48 fc e3 85 ca 0f c6 8f 38
POST 0: 5 (55ce) - 48 fc c8 4b cf 70 e8 5c 50
@cnlohr
cnlohr / htc_vive_watchman_codes
Last active June 22, 2017 19:40
HTC Vive Watchman Hacking Codes!
So, the way this goes is I post my AVR code, then I post what the HTC Vive does.
The output is: POST 0: (# of bytes) (IMU Timecode MSBs) (All raw light data)
(All raw light data ends with [3 bytes, LSB timecode] [OTA CRC (probably ignore)])
Events (TIME): (LED CODE 1)/(TIME CODE 1/TIMECODE 2)/(LED CODE 2)/(TIME CODE 3/TIMECODE 4)...
//NOTICE: The funky encoding of the numbers, and the fact that paramters are read from the end of the data going forward.
//We know we're done when the # of parameters read is (# of bytes left*2)-1
@cnlohr
cnlohr / htc_vive_edid.txt
Created March 16, 2017 01:14
HTC Vive EDID
parse-edid
Checksum Correct
Section "Monitor"
Identifier "HTC-VIVE"
ModelName "HTC-VIVE"
VendorName "HVR"
# Monitor Model Year: 2016
# EDID version 1.3
@cnlohr
cnlohr / Kyocera-EP-C170N-KPDL.ppd
Created January 25, 2018 05:27
PPD File for CUPS Linux and OSX Printing for Kyocera EP C170N Printer
*PPD-Adobe: "4.3"
*%=============================================================================
*%
*% PPD file for Kyocera EP C170N (English)
*% Linux Version
*%
*% Copyright (C) 2000 KYOCERA CORPORATION.
*% Copyright (C) 2007 Revised Edition KYOCERA MITA CORPORATION.
*%
*% Permission is granted for redistribution of this file as long as this
@cnlohr
cnlohr / HMD_config.json
Created March 26, 2018 20:28
Charles' Vive HMD config json
{
"acc_bias": [
0.1137,
-0.075,
-0.4349
],
"acc_scale": [
1.001,
0.9997,
0.9995
/dts-v1/; /plugin/;
/ {
// compatible = "allwinner,sun50i-h5-mali",
// "arm,mali-450";// "allwinner,sun50i-h5";
fragment@0 {
target-path = "/";
__overlay__ {
@cnlohr
cnlohr / triangle_modified.c
Created June 16, 2018 16:58
Modified triangle.c from raspberry pi, showing significant slowdown with draw calls.
/*
Copyright (c) 2012, Broadcom Europe Ltd
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
@cnlohr
cnlohr / esp32_aes_example.c
Created November 7, 2018 19:50
Example of using hardware AES 256 Crypto in CBC mode on the ESP32 using ESP-IDF
#include <string.h>
#include <stdio.h>
#include <hwcrypto/aes.h>
/*
For Encryption time: 1802.40us (9.09 MB/s) at 16kB blocks.
*/
static inline int32_t _getCycleCount(void) {
int32_t ccount;
@cnlohr
cnlohr / OpenVR Frame of reference change with cnovr
Created October 28, 2019 20:19
For converting from raw_and_uncalibrated to standing.
printf( "Conv: \n" );
struct HmdMatrix34_t mzerotoabs = cnovrstate->oSystem->GetRawZeroPoseToStandingAbsoluteTrackingPose();
printf( "%f %f %f %f\n", PFFOUR( mzerotoabs.m[0] ) );
printf( "%f %f %f %f\n", PFFOUR( mzerotoabs.m[1] ) );
printf( "%f %f %f %f\n", PFFOUR( mzerotoabs.m[2] ) );
cnovr_pose pstanding;
matrix44_to_pose( &pstanding, &mzerotoabs.m[0][0] );
printf( "%f %f %f %f %f %f %f %f\n", PFTHREE( pstanding.Pos ), PFFOUR( pstanding.Rot ), pstanding.Scale );