Grizzly.ZWave.DSK (grizzly v1.0.0) View Source
Module for working with the SmartStart and S2 DSKs
Link to this section Summary
Types
The DSK binary is the elixir binary string form of the DSK
The DSK string is the string version of the DSK
Functions
Take a binary representation of the DSK and change it into the string representation
Make a new DSK
Parse a textual representation of a DSK
Parse a DSK PIN
Take a string representation of the DSK and change it into the binary representation
Return the first five digits of a DSK for use as a PIN
Convert the DSK to a string
Generate a DSK that is all zeros
Link to this section Types
Specs
dsk_binary() :: <<_::128>>
The DSK binary is the elixir binary string form of the DSK
The format is <<b1, b2, b3, ... b16>>
That is 16 bytes.
An example of this would be:
<<196, 109, 73, 131, 38, 196, 119, 227, 62, 101, 131, 175, 15, 165, 14, 39>>
Specs
dsk_string() :: <<_::376>>
The DSK string is the string version of the DSK
The general format is XXXXX-XXXXX-XXXXX-XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
That is 8 blocks of 16 bit integers separated by a dash.
An example of this would be 50285-18819-09924-30691-15973-33711-04005-03623
Specs
t() :: %Grizzly.ZWave.DSK{raw: <<_::128>>}
Link to this section Functions
Specs
binary_to_string(dsk_binary()) :: {:ok, dsk_string()}
Take a binary representation of the DSK and change it into the string representation
Specs
Make a new DSK
If less than 16 bytes are passed in, the rest are initialized to zero. Due to how DSKs are constructed, odd length binaries aren't allowed since they should never be possible.
Specs
parse(dsk_string()) :: {:ok, t()} | {:error, :invalid_dsk}
Parse a textual representation of a DSK
Specs
parse_pin(String.t() | non_neg_integer()) :: {:ok, t()} | {:error, :invalid_dsk}
Parse a DSK PIN
PINs can also be parsed by parse/1
. When working with PINs, though, it's
nice to be more forgiving and accept PINs as integers or strings without
leading zeros.
String examples:
iex> {:ok, dsk} = DSK.parse_pin("12345"); dsk
#DSK<12345-00000-00000-00000-00000-00000-00000-00000>
iex> {:ok, dsk} = DSK.parse_pin("123"); dsk
#DSK<00123-00000-00000-00000-00000-00000-00000-00000>
Integer examples:
iex> {:ok, dsk} = DSK.parse_pin(12345); dsk
#DSK<12345-00000-00000-00000-00000-00000-00000-00000>
iex> {:ok, dsk} = DSK.parse_pin(123); dsk
#DSK<00123-00000-00000-00000-00000-00000-00000-00000>
Specs
string_to_binary(dsk_string()) :: {:ok, dsk_binary()} | {:error, :invalid_dsk}
Take a string representation of the DSK and change it into the binary representation
Specs
Return the first five digits of a DSK for use as a PIN
iex> {:ok, dsk} = DSK.parse("50285-18819-09924-30691-15973-33711-04005-03623")
iex> DSK.to_pin_string(dsk)
"50285"
iex> {:ok, dsk} = DSK.parse("00001-18819-09924-30691-15973-33711-04005-03623")
iex> DSK.to_pin_string(dsk)
"00001"
Specs
Convert the DSK to a string
iex> {:ok, dsk} = DSK.parse("50285-18819-09924-30691-15973-33711-04005-03623")
iex> DSK.to_string(dsk)
"50285-18819-09924-30691-15973-33711-04005-03623"
iex> {:ok, dsk} = DSK.parse("50285-18819-09924-30691-15973-33711-04005-03623")
iex> DSK.to_string(dsk, delimiter: "")
"5028518819099243069115973337110400503623"
Options:
:delimiter
- character to join the 5 byte sections together (default"-"
)
Specs
zeros() :: t()
Generate a DSK that is all zeros
This is useful for placeholder/default DSKs.