Browse Source

Add README and LICENSE

Thomas Dy 7 years ago
parent
commit
b80bdea677
3 changed files with 86 additions and 0 deletions
  1. 14 0
      LICENSE
  2. 71 0
      README.md
  3. 1 0
      package.json

+ 14 - 0
LICENSE

@@ -0,0 +1,14 @@
+Copyright 2017 Thomas Dy
+
+Permission to use, copy, modify, and/or distribute this software for any purpose
+with or without fee is hereby granted, provided that the above copyright notice
+and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+THIS SOFTWARE.
+

+ 71 - 0
README.md

@@ -0,0 +1,71 @@
+# OpenPrepPad
+
+This allows use of the Orange Chef Prep Pad on Linux (and maybe OSX) machines.
+
+Make sure bluetooth is powered on when running. You can run it by
+
+```
+npm install
+npm start
+```
+
+## Protocol Details
+
+The Prep Pad is a standard Bluetooth LE device and exposes all functionality via
+GATT. The relevant service is `ffa0` which is the Accelerometer service. You
+then need to write `0x01` to characteristic `ffa1` which is "Accel Enable".
+After this, you should be able to listen to characteristic `ffa3` which is
+"Accel X-Coordinate". This should give you a stream of little endian 32-bit
+integers.  Heavier is less while lighter is greater. To convert the value to
+grams, you can divide the value by 14 and that should be it. Writing `0x00` to
+"Accel Enable" will cause the device to disconnect and turn off.
+
+The other available characteristics are `ffa2` which is "Accel Range". It's
+read/write but I don't know what the values are supposed to mean. `ffa4` and
+`ffa5` are "Accel Y-Coordinate" and "Accel Z-Coordinate" but I didn't find those
+values changing often.
+
+There is another service `f000ffc0-0451-4000-b000-000000000000` which contains
+characteristics `f000ffc1-...` and `f000ffc2-...` for "Img Block" and "Img
+Identify", but I don't know what those are.
+
+## Light Indicator
+
+When it's off and you press the button, the light constantly flashes which means
+it's waiting for a connection. Once something connects, the light will remain
+steady. After writing `0x01` to "Accel Range", the light will turn off but the
+device is still on and sending data. If you disconnect during this, the device
+will remain on but the light will remain off. Even when you reconnect, the light
+will not turn on again but that's normal.
+
+When it's on, and you press the button, the light will flash twice for a longer
+interval than when it's waiting for connections. After that, it will turn off.
+
+## Device Quirks
+
+Normally the device continuously sends data but I've found that it will
+sometimes enter a weird state where it will send 8-10 values and then
+disconnect. Even after reconnecting, it will still just send 8-10 values and
+disconnect. Restarting the device seems to fix the problem.
+
+Another issue I've found is that the data received from the device is delayed.
+I'm not sure if this is a problem with bluetooth or if the device itself is
+sending it with lag.
+
+I have experienced some occasions where the device itself hangs. Pressing the
+button doesn't do anything, the light doesn't respond. I had to physically
+remove the batteries to get it responding again. I'm not sure if this is just
+because I'm not connecting/disconnecting properly.
+
+This might be obvious but the device's 4 stubby legs must be on a firm surface
+for it to work correctly since those are the things that are actually connected
+to the sensor. The entire top body is just one solid piece and the legs are the
+things that actually "move".
+
+## Reference
+
+I found this [book preview][1] pretty handy for understanding Bluetooth LE /
+GATT. Besides that, playing with bluetoothctl is pretty handy for exploring
+what's on the device itself.
+
+[1]: https://www.safaribooksonline.com/library/view/getting-started-with/9781491900550/ch04.html

+ 1 - 0
package.json

@@ -10,6 +10,7 @@
   },
   "devDependencies": {},
   "scripts": {
+    "start": "node index.js",
     "test": "echo \"Error: no test specified\" && exit 1"
   },
   "author": "Thomas Dy <thatsmydoing@gmail.com>",