Digi XBee(R) ANSI C Host Library
Todo List
Global _xbee_cmd_release_request (xbee_cmd_request_t FAR *request)
add bounds checking on request to make sure it's in the table?
Global _xbee_handle_transmit_status (xbee_dev_t *xbee, const void FAR *frame, uint16_t length, void FAR *context)
Figure out what needs to happen with these frames. Does atcmd layer need to pass errors down to callbacks? Registered endpoints? Tracked conversations?
Global _zcl_onoff_handler (const wpan_envelope_t FAR *envelope, void FAR *context)

set the OnOff attribute to off and break

set the OnOff attribute to on and break

toggle the OnOff attribute and break

Global _zcl_send_read_from_zdo_match (wpan_conversation_t FAR *conversation, const wpan_envelope_t FAR *envelope)

support a flag in the client_read object for sending ZCL request to first endpoint in list (current behavior) or all endpoints (for example, to query ALL meter endpoints on ALL radios).

find a way to track whether frame came in from broadcast or unicast response – if unicast, can return WPAN_CONVERSATION_END

Global _zcl_write_attributes (zcl_command_t *cmd)

Generate error if command is not one of the three expected commands.

Update to limit number of status records in response.

Class addr64
update all addr64 variables and structure elements to end in _be (big-endian) or _le (little-endian) where appropriate. Add functions to convert 64-bit values between host byte order and big/little endian.
Global addr64_format (char FAR *buffer, const addr64 FAR *address)
Add a parameter to indicate big or little endian and update code to work with either. (for little-endian, b starts at address->b + 8 and is decremented)
File firmware.h
Create typedefs for xbee_fw_source_t read() and seek() handlers, write documentation including what the return values are.
File platform.h
find pre-processor macro to identify POSIX platform
File platform_config.h

need a configure script to find location of endian.h?

figure out a way to handle XBEE_NATIVE_64BIT

better way to determine timer resolution?

Global wpan_endpoint_send_fn )(const wpan_envelope_t FAR *envelope, uint16_t flags)

Add support for a broadcast radius? Don't send Tx Status? Use frame ID 0?

come up with standard error codes for the following possible errors? outbound frame buffer is full, invalid data in envelope, payload is too big

File xbee_atcmd.c

move xbee_cmd_simple and xbee_identify into xbee_device layer?

Add code to return an error (and disable the stack) if the XBee responds with an IEEE address not in Digi's allocation?

review todo list at the top of the file – lots to do

Global xbee_comm_SC (zcl_comm_startup_param_t FAR *p, const void FAR *value_be)
Depending on the value of StartupControl, the extended_panid attribute might be set from ID (extended PAN ID) or OP (operating PAN ID).
Global xbee_fw_read_byte (xbee_fw_source_t *source)
check return value of source->read here and in _uint16 and _uint32?
Global xbee_io_configure (xbee_dev_t *xbee, xbee_io_t FAR *io, uint_fast8_t index, enum xbee_io_type type, const wpan_address_t FAR *address)
: this is a relatively crude test. Need to look at hardware
Global xbee_io_response_parse (xbee_io_t FAR *parsed, const void FAR *source)
: the 0x0F constant is an artifact of the sharing of AD0-3 with
Global xbee_mktime (struct tm *time_rec)
Handle DST and time zones.
File xbee_platform_posix.c
Create a platform unit test, one that can verify that the millisecond timer doesn't run backwards and that it matches up accurately with the seconds timer (base it on the HCS08 regression).
File xbee_serial_posix.c

missing a way to hold Tx in break condition

missing a way to hold Tx in break condition

File xbee_serial_rabbit.c
Need code to make sure IN and OUT buffers are large enough for XBee. Does the out buffer need to be large enough to hold an entire frame?
File xbee_sxa_socket.c
Need a better path MTU discovery mechanism.
File xbee_xmodem.c
Have timeout values adjust based on link latency. Start out with a high timeout (10 seconds?) and adjust down based on actual response time (maybe 150% of last ACK's delay?) Timeout for EOT should start at timeout value from last block.
File zcl64.h
add a ZCL64_SPLIT macro to split zcl64_t into high and low halves
Global zcl64_t
Actually code up support for 56-bit values like we did for 24 bit.
File zcl_basic.h
Explore how we would support the DeviceEnabled attribute. Does each application need to check it? Does the endpoint dispatcher need to know about it? What about clients?
Global zcl_comm_sas_is_valid (const zcl_comm_state_t FAR *comm)
add more tests to this function
File zcl_onoff.h
Write code to support OnOff commands. Create sample program demonstrating use of these clusters (perhaps using LEDs and switches of XBIB-U-DEV board). REQUIRES: need to have reporting in place before this cluster is really useful. Devices need to receive updates whenever switch status changes.
Global zcl_parse_attribute_record (const zcl_attribute_base_t FAR *entry, zcl_attribute_write_rec_t *write_rec)
should we set a flag in write_rec to indicate that the status was not success?
Global zdo_send_match_desc (wpan_dev_t *dev, const uint16_t *clusters, uint16_t profile_id, wpan_response_fn callback, const void FAR *context)
update API to allow for unicast request in addition to broadcast
File zigbee_zdo.c
Create a cluster table and have the ZDO_ENDPOINT() macro use it instead of having zdo_handler use a switch on cluster_id to call the handlers for each command.