Wire the UART pins to the CH341A:
TX = SDA
RX = SCL
Power on camera and immediately start snander within a few milliseconds:
sudo ./snander -i
| for REMOTE_BRANCH in $(git branch -r | grep origin); do echo "$REMOTE_BRANCH"; git log $REMOTE_BRANCH --format='%ci|%an|%s' | grep -F -x -v -f ../"${PWD##*/}".csv >> ../"${PWD##*/}".csv; done |
| Basic Manual for DaFit Fitness Tracker firmware update protocol, works for nearly any nRF52832 tracker from Company DaFit | |
| The minimum size of update file is 0x10000(can be filled with garbage to get to size) and the maximum size is 0x2F000 | |
| the update will first get stored onto the external flash at position 0x3D1000 by the stock firmware(not by the bootloader) | |
| the size of the update will get stored at 0x3D0000 on external flash with 4 bytes uint32_t | |
| when bootloader gets activated it will copy the update from external flash to 0x23000 of the nRF52 internal flash. | |
| Connect to device, |
| List with Compatible devices: | |
| Look under About on the watch for the device Id. | |
| looks something like this: | |
| MOY-TEH5-1.7.7 | |
| the middle section is the interesting part, if that is in this list here | |
| it has the compatible bootloader and the same pinout as pinetime for Display and External Flash |
| <?php | |
| class 💩💩💩💩 | |
| { | |
| function 💩💩💩($😎, $🐯) | |
| { | |
| return $😎 + $🐯; | |
| } | |
| } | |
| $🐔 = 3; |
| #!/bin/bash | |
| set -euo pipefail | |
| IFS=$'\n\t' | |
| # Ubuntu 20/22 dev Server | |
| # Run like (without sudo) - bash install_lamp.sh | |
| # Script should auto terminate on errors | |
| export DEBIAN_FRONTEND=noninteractive |
| /** | |
| * This is too show the use of waiting for a jquery selector in the browser | |
| * using promises. Much like how webdriverio works from outside the browser. | |
| * | |
| * Tested with jQuery v1.11.3 and chrome Version 48.0.* (64-bit) | |
| **/ | |
| /** | |
| * Wait for a jquery css selector |
| #!/usr/bin/env python | |
| #fileencoding: utf-8 | |
| #Author: Stain & Liu <[email protected] & [email protected]> | |
| #Created : 17 Oct 2010 11:19:58 AM CST | |
| #Modified : 15 Sep 2017 10:12:42 PM CST | |
| import os | |
| import sys | |
| import mmap | |
| import json |
| //return an array of objects according to key, value, or key and value matching | |
| function getObjects(obj, key, val) { | |
| var objects = []; | |
| for (var i in obj) { | |
| if (!obj.hasOwnProperty(i)) continue; | |
| if (typeof obj[i] == 'object') { | |
| objects = objects.concat(getObjects(obj[i], key, val)); | |
| } else | |
| //if key matches and value matches or if key matches and value is not passed (eliminating the case where key matches but passed value does not) | |
| if (i == key && obj[i] == val || i == key && val == '') { // |
| #include <libmaple/pwr.h> | |
| #include <libmaple/scb.h> | |
| #include <RTClock.h> | |
| // Define the Base address of the RTC registers (battery backed up CMOS Ram), so we can use them for config of touch screen or whatever. | |
| // See http://stm32duino.com/viewtopic.php?f=15&t=132&hilit=rtc&start=40 for a more details about the RTC NVRam | |
| // 10x 16 bit registers are available on the STM32F103CXXX more on the higher density device. | |
| #define BKP_REG_BASE ((uint32_t *)(0x40006C00 + 0x04)) |