Example Sessions

NCP Initialization

Check the protocol version to see if it is supported:

  • CMD_VALUE_GET:PROP_PROTOCOL_VERSION
  • CMD_VALUE_IS:PROP_PROTOCOL_VERSION

Check the NCP version to see if a firmware update may be necessary:

  • CMD_VALUE_GET:PROP_NCP_VERSION
  • CMD_VALUE_IS:PROP_NCP_VERSION

Check interface type to make sure that it is what we expect:

  • CMD_VALUE_GET:PROP_INTERFACE_TYPE
  • CMD_VALUE_IS:PROP_INTERFACE_TYPE

If the host supports using vendor-specific commands, the vendor should be verified before using them:

  • CMD_VALUE_GET:PROP_VENDOR_ID
  • CMD_VALUE_IS:PROP_VENDOR_ID

Fetch the capability list so that we know what features this NCP supports:

  • CMD_VALUE_GET:PROP_CAPS
  • CMD_VALUE_IS:PROP_CAPS

If the NCP supports CAP_NET_SAVE, then we go ahead and recall the network:

  • CMD_NET_RECALL

Attaching to a network

We make the assumption that the NCP is not currently associated with a network.

Set the network properties, if they were not already set:

  • CMD_VALUE_SET:PROP_PHY_CHAN

  • CMD_VALUE_IS:PROP_PHY_CHAN

  • CMD_VALUE_SET:PROP_NET_XPANID

  • CMD_VALUE_IS:PROP_NET_XPANID

  • CMD_VALUE_SET:PROP_MAC_15_4_PANID

  • CMD_VALUE_IS:PROP_MAC_15_4_PANID

  • CMD_VALUE_SET:PROP_NET_NETWORK_NAME

  • CMD_VALUE_IS:PROP_NET_NETWORK_NAME

  • CMD_VALUE_SET:PROP_NET_MASTER_KEY

  • CMD_VALUE_IS:PROP_NET_MASTER_KEY

  • CMD_VALUE_SET:PROP_NET_KEY_SEQUENCE_COUNTER

  • CMD_VALUE_IS:PROP_NET_KEY_SEQUENCE_COUNTER

  • CMD_VALUE_SET:PROP_NET_KEY_SWITCH_GUARDTIME

  • CMD_VALUE_IS:PROP_NET_KEY_SWITCH_GUARDTIME

Bring the network interface up:

  • CMD_VALUE_SET:PROP_NET_IF_UP:TRUE
  • CMD_VALUE_IS:PROP_NET_IF_UP:TRUE

Bring the routing stack up:

  • CMD_VALUE_SET:PROP_NET_STACK_UP:TRUE
  • CMD_VALUE_IS:PROP_NET_STACK_UP:TRUE

Some asynchronous events from the NCP:

  • CMD_VALUE_IS:PROP_NET_ROLE
  • CMD_VALUE_IS:PROP_NET_PARTITION_ID
  • CMD_VALUE_IS:PROP_THREAD_ON_MESH_NETS

Successfully joining a pre-existing network

This example session is identical to the above session up to the point where we set PROP_NET_IF_UP to true. From there, the behavior changes.

  • CMD_VALUE_SET:PROP_NET_REQUIRE_JOIN_EXISTING:TRUE
  • CMD_VALUE_IS:PROP_NET_REQUIRE_JOIN_EXISTING:TRUE

Bring the routing stack up:

  • CMD_VALUE_SET:PROP_NET_STACK_UP:TRUE
  • CMD_VALUE_IS:PROP_NET_STACK_UP:TRUE

Some asynchronous events from the NCP:

  • CMD_VALUE_IS:PROP_NET_ROLE
  • CMD_VALUE_IS:PROP_NET_PARTITION_ID
  • CMD_VALUE_IS:PROP_THREAD_ON_MESH_NETS

Now let's save the network settings to NVRAM:

  • CMD_NET_SAVE

Unsuccessfully joining a pre-existing network

This example session is identical to the above session up to the point where we set PROP_NET_IF_UP to true. From there, the behavior changes.

  • CMD_VALUE_SET:PROP_NET_REQUIRE_JOIN_EXISTING:TRUE
  • CMD_VALUE_IS:PROP_NET_REQUIRE_JOIN_EXISTING:TRUE

Bring the routing stack up:

  • CMD_VALUE_SET:PROP_NET_STACK_UP:TRUE
  • CMD_VALUE_IS:PROP_NET_STACK_UP:TRUE

Some asynchronous events from the NCP:

  • CMD_VALUE_IS:PROP_LAST_STATUS:STATUS_JOIN_NO_PEERS
  • CMD_VALUE_IS:PROP_NET_STACK_UP:FALSE

Detaching from a network

TBD

Attaching to a saved network

Recall the saved network if you haven't already done so:

  • CMD_NET_RECALL

Bring the network interface up:

  • CMD_VALUE_SET:PROP_NET_IF_UP:TRUE
  • CMD_VALUE_IS:PROP_NET_IF_UP:TRUE

Bring the routing stack up:

  • CMD_VALUE_SET:PROP_NET_STACK_UP:TRUE
  • CMD_VALUE_IS:PROP_NET_STACK_UP:TRUE

Some asynchronous events from the NCP:

  • CMD_VALUE_IS:PROP_NET_ROLE
  • CMD_VALUE_IS:PROP_NET_PARTITION_ID
  • CMD_VALUE_IS:PROP_THREAD_ON_MESH_NETS

NCP Software Reset

  • CMD_RESET
  • CMD_VALUE_IS:PROP_LAST_STATUS:STATUS_RESET_SOFTWARE

Then jump to (#ncp-initialization).

Adding an on-mesh prefix

TBD

Entering low-power modes

TBD

Sniffing raw packets

This assumes that the NCP has been initialized.

Optionally set the channel:

  • CMD_VALUE_SET:PROP_PHY_CHAN:x
  • CMD_VALUE_IS:PROP_PHY_CHAN

Set the filter mode:

  • CMD_VALUE_SET:PROP_MAC_PROMISCUOUS_MODE:MAC_PROMISCUOUS_MODE_MONITOR
  • CMD_VALUE_IS:PROP_MAC_PROMISCUOUS_MODE:MAC_PROMISCUOUS_MODE_MONITOR

Enable the raw stream:

  • CMD_VALUE_SET:PROP_MAC_RAW_STREAM_ENABLED:TRUE
  • CMD_VALUE_IS:PROP_MAC_RAW_STREAM_ENABLED:TRUE

Enable the PHY directly:

  • CMD_VALUE_SET:PROP_PHY_ENABLED:TRUE
  • CMD_VALUE_IS:PROP_PHY_ENABLED:TRUE

Now we will get raw 802.15.4 packets asynchronously on PROP_STREAM_RAW:

  • CMD_VALUE_IS:PROP_STREAM_RAW:...
  • CMD_VALUE_IS:PROP_STREAM_RAW:...
  • CMD_VALUE_IS:PROP_STREAM_RAW:...

This mode may be entered even when associated with a network. In that case, you should set PROP_MAC_PROMISCUOUS_MODE to MAC_PROMISCUOUS_MODE_PROMISCUOUS or MAC_PROMISCUOUS_MODE_NORMAL, so that you can avoid receiving packets from other networks or that are destined for other nodes.