-
-
Notifications
You must be signed in to change notification settings - Fork 0
Deprecated
Records saved in the NDEF Manager's record library can be found under NDEFRecords\
. The naming of the record files follows this pattern:
NDEFRecord-[arbitrary unique index].JSON
{
"tnf":1,
"recordType":[
85
],
"payload":[
4,
115
],
"recordID":[
],
"simpleRecordType":5,
"text":"",
"languageCode":"",
"textEncoding":0,
"uri":"https://xyz.com",
"mimeType":"",
"packageName":"",
"domain":"",
"domainDataType":""
}
-
tnf
: Record type name format. -
recordType
: The record type. Represented in Integers for serialization purposes. -
payload
: Full record byte content. Represented in Integers for serialization purposes. -
recordID
: The record's ID. Represented in Integers for serialization purposes.
Used in "simplified" records:
-
simpleRecordType
: A predefined record type. -
text
: Record's text for appropriate record types. -
uri
: Record's URI for appropriate record types. -
languageCode
: Record's language tag for appropriate record types. -
textEncoding
: Record's text encoding for appropriate record types. 0 - UTF8, 1 - UTF16. -
mimeType
: Record's mime type for appropriate record types. -
packageName
: Android package name for appropriate record types. -
domain
: Domain for appropriate record types. -
domainDataType
: Domain data type for appropriate record types.
Simple Record Type
public enum SimpleRecordType {
None,
Text,
Application,
External,
Mime,
URI
}
Type Name Format
public enum SimpleRecordType {
None,
Text,
Application,
External,
Mime,
URI
}
Language Code
public enum LanguageCode {
en
}
Text Encoding
public enum TextEncoding {
UTF8,
UTF16
}
Custom products are listed in a unique file UserData\CustomProducts.JSON
.
{
"customProducts":[
{
"readableName":"DoNext",
"url":"https://forum.dangerousthings.com/t/the-donext-is-in/8037",
"imageURL":"https://upload.wikimedia.org/wikipedia/commons/thumb/a/a5/Glazed-Donut.jpg/220px-Glazed-Donut.jpg",
"isCustom":true,
"xSizeMM":42.0,
"ySizeMM":0.5,
"zSizeMM":42.0,
"typicalInfo":{
"ID":"",
"technologies":[
],
"manufacturer":"",
"scanDuration":0,
"versionData":"",
"writable":false,
"storageSize":0,
"ndefMessage":{
"Success":false,
"Error":0,
"records":[
]
},
"rawContents":[
],
"icName":""
},
"typicalIC":"",
"brands":[
"Dangerous Things"
],
"tags":14
},
{
"readableName":"Kirby",
"url":"https://en.wikipedia.org/wiki/Kirby_%28character%29",
"imageURL":"https://upload.wikimedia.org/wikipedia/en/thumb/2/2d/SSU_Kirby_artwork.png/220px-SSU_Kirby_artwork.png",
"isCustom":true,
"xSizeMM":120.0,
"ySizeMM":100.0,
"zSizeMM":120.0,
"typicalInfo":{
"ID":"",
"technologies":[
],
"manufacturer":"",
"scanDuration":0,
"versionData":"",
"writable":false,
"storageSize":0,
"ndefMessage":{
"Success":false,
"Error":0,
"records":[
]
},
"rawContents":[
],
"icName":""
},
"typicalIC":"",
"brands":[
"Custom"
],
"tags":40
}
]
}
-
readableName
: The literal product name, is and should remain unique. -
url
: A link to the product's web page. -
imageUrl
: A link to an online image of the product. -
isCustom
: Has this product been added by the user? Always true for custom products. -
xSizeMM
, ySizeMM, zSizeMM: Dimensions of the product in millimeters. -
typicalInfo
: The standard NFC chip information for products with the "HF" tag. Used mostly for product matching when scanning NFC tags. -
typicalIC
: References thereadableName
of an internal IC database. For products with the "HF" tag. Used mostly for product matching when scanning NFC tags. -
brands
: List of references toreadableName
of an internal Brands database. -
tags
: List of tags defining the product's capabilities. These are important since they are used to hide or enable options within other features such as haptic tests for magnets.
Product Tags
enum ProductTag {
none = 0,
LF = 1 << 0,
HF = 1 << 1,
led = 1 << 2,
glow = 1 << 3,
magnet = 1 << 4,
sensor = 1 << 5,
payment = 1 << 6
}
Sources for the feed as well as the filters for those sources are fully customizable. Just modify the file at UserData\FeedSubscriptions.JSON
.
This is the default subscriptions file:
{
"subscriptions":[
{
"readableName":"Dangerous Things Forum",
"rssUrl":"https://forum.dangerousthings.com/latest.rss",
"categoryFilters":[
"Dangerous Announcements",
"DT Info",
"Community Projects",
"VivoKey Apex",
"Projects"
],
"brands":[
"Dangerous Things"
]
},
{
"readableName":"Biohack.me Forum",
"rssUrl":"https://forum.biohack.me/index.php?p=/discussions/feed.rss",
"categoryFilters":[
"Announcements",
"Magnets",
"RFID/NFC",
"Coatings, transdermals, other implants",
"Prosthetics, wearables, and haptics",
"Genetic and biology based mods",
"Supplements, pharmaceuticals, and nootropics"
],
"brands":[
"Biohack.me"
]
},
{
"readableName":"Walletmor",
"rssUrl":"https://walletmor.com/blogs/news.atom",
"categoryFilters":[
],
"brands":[
"Walletmor"
]
},
{
"readableName":"Vivokey",
"rssUrl":"https://vivokey.com/feed/",
"categoryFilters":[
],
"brands":[
"Vivokey"
]
},
{
"readableName":"Dangerous Things Website",
"rssUrl":"https://dangerousthings.com/feed/",
"categoryFilters":[
],
"brands":[
"Dangerous Things"
]
},
{
"readableName":"Dsruprive",
"rssUrl":"https://dsruptive.com/feed/",
"categoryFilters":[
],
"brands":[
"Dsruptive"
]
}
]
}
-
readableName
: The source name that will be displayed when necessary in the app -
rssUrl
: The RSS or Atom feed url of the source -
categoryFilters
: These filters will apply on the category field of the items coming from said source, leave empty for no filtering -
brands
: A list of references to thereadableName
field of the internal brand database. Used to decorate feed items with icons representing the source.
The naming of the test result files follows this pattern:
HapticTestResults\[upgradeID]\[Test_Type]_[WaveType]\[year]_[month]_[day]_[hours]_[seconds]([optional id]).JSON
Each file represents a single question (see Haptic Analytics.
{
"testType":0,
"waveType":0,
"timestamp":"2024_07_01_12_40",
"product":"Titan",
"upgradeId":"c4e...52026",
"amplitude":0.0,
"frequency":250.0,
"gap":0.0,
"duration":1.0,
"response":0
}
-
testType
: Type of test for this question. -
waveType
: Type of wave used for this question. -
timestamp
: Time when question answer was saved. -
product
: The product name of the biomagnet being tested. -
upgradeId
: Unique id of the upgrade being tested. -
amplitude
: Amplitude value tested, for test types where applicable. -
frequecy
: Frequency value tested, for test types where applicable. -
gap
: Gap value tested, for test types where applicable. -
Duration
: Duration value tested, for test types where applicable. -
response
: User response.
Possible responses
"yes","no","a","b","same"
Response sets
YN: yes,no
AB: a,b
ASB: a,same,b
Test types
enum HapticTestType {
Amplitude_Detection, //YN
Amplitude_Discrimination, //ASB
Frequency_Discrimination, //tbd
Temporal_Discrimination //tbd
}
Wave types
enum TestWaveType {
Sine,
Square,
Saw
};
NDEF scan results share a common file structure with NFC scan results. They are saved and processed in NDEFResults\
. Only the latest result for each upgrade is saved.
The naming of the scan result files follows this pattern:
NDEFScan-[upgradeID].JSON
Same as NFC scan results.
NFC scan results share a common file structure with NDEF scan results. They are saved and processed in NFCResults\
.
The naming of the scan result files follows this pattern:
[NFCScan|NDEFScan]-[year]_[month]_[day]_[upgradeID|tagUID].JSON
While the types and the date are purely indicative, the name must contain the upgrade id to be properly processed by ZINC.
{
"time":"2023_07_13_14_27",
"tag":{
"ID":"0429A6D2CD5280",
"atqa":[
68,
0
],
"sak":0,
"technologies":[
6,
3,
4
],
"manufacturer":"04",
"scanDuration":2734,
"versionData":"0004040502021503",
"writable":false,
"storageSize":1912,
"ndefMessage":{
"Success":true,
"Error":0,
"records":[
{
"type":2,
"payload":[
99,
...
108
],
"uri":"vnd.android.nfc://ext/android.com:pkg",
"text":"",
"languageCode":"",
"textEncoding":0,
"mimeType":"",
"mimeData":[
]
}
]
},
"rawContents":[
{
"sector":0,
"content":[
{
"blockIndex":0,
"blockContent":[
4,
41,
166,
210
],
"byteTypes":[
3,
3,
3,
3
],
"writable":true,
"readable":true,
"locked":false,
"blocked":false
},
...
{
"blockIndex":255,
"blockContent":[
0,
0,
0,
0
],
"byteTypes":[
0,
0,
0,
0
],
"writable":false,
"readable":false,
"locked":true,
"blocked":true
}
]
}
],
"icName":"NTAG I2C plus 2k"
},
"userUpgradeID":""
}
-
time
: The time and date of the scan. -
tag
: Information about the tag and its contents.-
ID
: The tag's UID. -
atqa
: The tag's ATQA (NFC scan only). -
sak
: The tag's SAK (NFC scan only). -
technologies
: A list of technology tags detected by Android. -
manufacturer
: The tag's standard NFC manufacturer id. -
scanDuration
: Total scan duration from TagTechnology.connect() to TagTechnology.close() in ms. -
versionData
: Used internally for chip identification (NFC scan only). -
writable
: Is the tag writable (not implemented) (NFC scan only). -
storageSize
: User available storage size in bytes (NFC scan only). -
ndefMessage
: NDEF contents and read results (NDEF scan only).-
Success
: Did the NDEF scan succeed. -
Error
: Optional error message from the NDEF read. -
records
: List of NDEF records detected on the tag.- See NDEF records
-
-
rawContent
: Raw tag memory content, a list of sectors (NFC scan only).-
sector
: Sector index. -
content
: List of block within the sector.-
blockIndex
: Block's index within the sector. -
blockContent
: Block's byte content. Represented in Integers for serialization purposes. -
byteTypes
: Block's bytes semantic representation. See Block Colorization Scheme semantics -
writable
: Is the block writable. -
readable
: Is the block readable. -
locked
: Is the block locked. -
blocked
: Is the block blocked.
-
-
-
icName
: Name of the chip if identified. Coresponds to internal IC database's readableName field (NFC scan only).
-
-
userUpgradeID
: The associated user upgrade ID if any.
Technology tags
public enum NFCTechnology {
UNKNOWN,
ISO_DEP,
MIFARE_CLASSIC,
MIFARE_ULTRALIGHT,
NDEF,
NDEF_FORMATABLE,
NFC_A,
NFC_B,
NFC_BARCODE,
NFC_F,
NFC_V
}
NDEF Read Error
public enum NDEFReadError {
NONE,
HAS_UNREADABLE_RECORDS,
UNKNOWN,
USER_CANCEL,
TIMEOUT,
NO_RECORDS
}
A custom theme can be placed in Theme\
.
The file (if formatted correctly) will automatically be used in ZINC instead of the default themes.
Naming: *.JSON
{
"background1":{
"r":0.054901961237192157,
"g":0.8352941274642944,
"b":0.6549019813537598,
"a":1.0
},
"background2":{
"r":0.0,
"g":0.3333333432674408,
"b":0.34117648005485537,
"a":1.0
},
"backgroundAngle":-45,
"panel1":{
"r":1.0,
"g":1.0,
"b":1.0,
"a":0.4000000059604645
},
"panel2":{
"r":1.0,
"g":1.0,
"b":1.0,
"a":0.10196078568696976
},
"panelAngle":-45,
"highlight1":{
"r":0.0,
"g":1.0,
"b":0.7294118404388428,
"a":1.0
},
"highlight2":{
"r":0.0,
"g":0.7972411513328552,
"b":0.8159999847412109,
"a":1.0
},
"highlightAngle":-45,
"baseColor":{
"r":1.0,
"g":1.0,
"b":1.0,
"a":1.0
},
"accentColor":{
"r":0.0,
"g":1.0,
"b":0.7287983894348145,
"a":1.0
},
"halfTone":{
"r":0.06666667014360428,
"g":0.07058823853731156,
"b":0.07450980693101883,
"a":0.2980392277240753
},
"blockColorizationScheme":[
{
"r":0.4745098054409027,
"g":0.4745098054409027,
"b":0.4745098054409027,
"a":1.0
},
{
"r":0.8392156958580017,
"g":0.8392156958580017,
"b":0.8392156958580017,
"a":1.0
},
{
"r":1.0,
"g":0.0,
"b":0.0,
"a":1.0
},
{
"r":0.42352941632270815,
"g":0.6000000238418579,
"b":0.7333333492279053,
"a":1.0
},
{
"r":0.6196078658103943,
"g":0.5254902243614197,
"b":0.7843137383460999,
"a":1.0
},
{
"r":0.9098039269447327,
"g":0.4901960790157318,
"b":0.24313725531101228,
"a":1.0
},
{
"r":0.6196078658103943,
"g":0.5254902243614197,
"b":0.7843137383460999,
"a":1.0
},
{
"r":0.6901960968971252,
"g":0.32156863808631899,
"b":0.4745098054409027,
"a":1.0
},
{
"r":0.6901960968971252,
"g":0.32156863808631899,
"b":0.4745098054409027,
"a":1.0
},
{
"r":0.8980392217636108,
"g":0.7098039388656616,
"b":0.40392157435417178,
"a":1.0
},
{
"r":0.6196078658103943,
"g":0.5254902243614197,
"b":0.7843137383460999,
"a":1.0
},
{
"r":0.6196078658103943,
"g":0.5254902243614197,
"b":0.7843137383460999,
"a":1.0
},
{
"r":1.0,
"g":0.0,
"b":0.0,
"a":1.0
},
{
"r":0.7058823704719544,
"g":0.8235294222831726,
"b":0.45098039507865908,
"a":1.0
},
{
"r":0.7058823704719544,
"g":0.8235294222831726,
"b":0.45098039507865908,
"a":1.0
},
{
"r":0.9098039269447327,
"g":0.4901960790157318,
"b":0.24313725531101228,
"a":1.0
},
{
"r":0.6196078658103943,
"g":0.5254902243614197,
"b":0.7843137383460999,
"a":1.0
},
{
"r":0.8392156958580017,
"g":0.8392156958580017,
"b":0.8392156958580017,
"a":1.0
}
]
}
-
background
: Is a gradient from color 1 to color 2 with an angle ofbackgroundAngle
. It mostly applies to large background surfaces. -
panel
: Is a gradient from color 1 to color 2 with an angle ofpanelAngle
. It applies mostly to buttons and other medium-sized surfaces. -
highlight
: Is a gradient from color 1 to color 2 with an angle ofhighlightAngle
. It applies mostly to outlines, icons, and accent elements. -
baseColor
: The default flat color. Mostly for text and icons. -
accent
: Similar to highlight but for text and some icons. -
halfTone
: A faded-out color for less intrusive text and de-selected or unavailable icons. -
blockColorizationScheme
: A list of colors used for raw tag content semantic coloration.
Total of 18 colors in the following order:
// 0 - inaccessible
// 1 - user memory
// 2 - CNT_MAX Counter max value
// 3 - UID
// 4 - Internal
// 5 - Dynamic lock bytes
// 6 - RFU reserved for future use
// 7 - AUTH0
// 8 - ACCESS
// 9 - PWD
//10 - PACK
//11 - PT_I2C
//13 - Config Registers
//12 - Keys
//14 - Session Registers
//15 - Static Lock Bytes
//16 - Capability Container CC
//17 - OTP
User Upgrades are listed in a unique file UserData\MyUpgrades.JSON
.
{
"savableUserUpgrades":[
{
"id":"e03ca88b7f6903bf5cc0b1cb3d65ae301708539372",
"readableName":"Pincher",
"product":"Spark 2",
"location":"Arm_right/Hand/Middle_finger/Pad",
"installDate":"20-04-2024"
},
{
"id":"e03ca88b7f6903bf5cc0b1cb3d65ae301708539370",
"readableName":"Titanion",
"product":"xNT",
"location":"Head",
"installDate":"20-04-2024"
}
]
}
-
id
: A unique identifier composed of the device's id and an incremental integer. -
readableName
: a literal name modifiable by the user. -
product
: the product associated with this upgrade, chosen by the user. -
location
: where the upgrade is located on the user, set by the user. -
installDate
: date of installation set by the user.
Locations
Body
Head
Face
Nose
Mouth
Eye_left
Eye_right
Forehead
Chin
Temple_left
Temple_right
Cheek_left
Cheek_right
Ear_right
Ear_left
Back
Top
Core
Neck
Left
Right
Front
Back
Clavicle_left
Clavicle_right
Chest
Left
Right
Abdomen
Left
Right
Genitals
Rear
Left
Right
Arm_right
Shoulder
Armpit
Upper
Elbow
Lower
Wrist
Top
Bottom
Hand
Thumb
Pad_left
Pad_Right
Pad
Metacarpal
Proximal
Distal
Index_finger
Pad_left
Pad_Right
Pad
Metacarpal
Proximal
Middle
Distal
Middle_finger
[Same as Index_finger]
Ring_finger
[Same as Index_finger]
Little_finger
[Same as Index_finger]
Palm
Knife_edge
Thumb_edge
P0
P1
P2
P3
Arm_left
[Same as Arm_right]
Leg_right
Hip
Upper
Knee
Lower
Ankle
Foot
Heel
Big_toe
Index_toe
Middle_toe
Ring_toe
Pinkie_toe
Leg_left
[Same as Leg_right]
}
This feature brings you the latest news from a curated and customizable collection of online resources like forums, manufacturer websites, blogs, and news channels!
Just scroll through the news! See something interesting? Tap it to open the source post.
News older than a fixed number of days won't be loaded. Currently, this threshold is fixed at 60 but eventually, it will be modifiable.
The goal of the haptic database is to collect as many test results as possible so that meaningful analysis can be done. It also provides average test results for each magnet model to the app so that ZINC users can compare their personal results to a global baseline. All the data will be made public.
Currently the feature isn't available but don't worry your results are saved locally and when the database goes online you will be able to contribute them!
Coming soon.