new file: include/OSAL.c

new file:   include/OSAL.h
	new file:   include/ZComDef.h
	new file:   include/i2c.h
This commit is contained in:
2025-02-22 22:20:57 +01:00
parent ddba6725bb
commit d7f91ac9bb
4 changed files with 2852 additions and 0 deletions

1821
include/OSAL.c Normal file

File diff suppressed because it is too large Load Diff

361
include/OSAL.h Normal file
View File

@@ -0,0 +1,361 @@
/******************************************************************************
Filename: OSAL.h
Revised: $Date: 2014-06-30 16:38:56 -0700 (Mon, 30 Jun 2014) $
Revision: $Revision: 39297 $
Description: This API allows the software components in the Z-Stack to be
written independently of the specifics of the operating system,
kernel, or tasking environment (including control loops or
connect-to-interrupt systems).
Copyright 2004-2014 Texas Instruments Incorporated. All rights reserved.
IMPORTANT: Your use of this Software is limited to those specific rights
granted under the terms of a software license agreement between the user
who downloaded the software, his/her employer (which must be your employer)
and Texas Instruments Incorporated (the "License"). You may not use this
Software unless you agree to abide by the terms of the License. The License
limits your use, and you acknowledge, that the Software may not be modified,
copied or distributed unless embedded on a Texas Instruments microcontroller
or used solely and exclusively in conjunction with a Texas Instruments radio
frequency transceiver, which is integrated into your product. Other than for
the foregoing purpose, you may not use, reproduce, copy, prepare derivative
works of, modify, distribute, perform, display or sell this Software and/or
its documentation for any purpose.
YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE
PROVIDED <20>AS IS<49> WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,
INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE,
NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL
TEXAS INSTRUMENTS OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT,
NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER
LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES
INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE
OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT
OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES
(INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS.
Should you have any questions regarding your right to use this Software,
contact Texas Instruments Incorporated at www.TI.com.
******************************************************************************/
#ifndef OSAL_H
#define OSAL_H
#ifdef __cplusplus
extern "C"
{
#endif
/*********************************************************************
* INCLUDES
*/
#include <limits.h>
#include "comdef.h"
#include "OSAL_Memory.h"
#include "OSAL_Timers.h"
#ifdef USE_ICALL
#include <ICall.h>
#endif /* USE_ICALL */
/*********************************************************************
* MACROS
*/
#if ( UINT_MAX == 65535 ) /* 8-bit and 16-bit devices */
#define osal_offsetof(type, member) ((uint16) &(((type *) 0)->member))
#else /* 32-bit devices */
#define osal_offsetof(type, member) ((uint32) &(((type *) 0)->member))
#endif
#define OSAL_MSG_NEXT(msg_ptr) ((osal_msg_hdr_t *) (msg_ptr) - 1)->next
#define OSAL_MSG_Q_INIT(q_ptr) *(q_ptr) = NULL
#define OSAL_MSG_Q_EMPTY(q_ptr) (*(q_ptr) == NULL)
#define OSAL_MSG_Q_HEAD(q_ptr) (*(q_ptr))
#define OSAL_MSG_LEN(msg_ptr) ((osal_msg_hdr_t *) (msg_ptr) - 1)->len
#define OSAL_MSG_ID(msg_ptr) ((osal_msg_hdr_t *) (msg_ptr) - 1)->dest_id
/*********************************************************************
* CONSTANTS
*/
/*** Interrupts ***/
#define INTS_ALL 0xFF
/*********************************************************************
* TYPEDEFS
*/
#ifdef USE_ICALL
typedef ICall_MsgHdr osal_msg_hdr_t;
#else /* USE_ICALL */
typedef struct
{
void *next;
#ifdef OSAL_PORT2TIRTOS
/* Limited OSAL port to TI-RTOS requires compatibility with ROM
* code compiled with USE_ICALL compile flag. */
uint32 reserved;
#endif /* OSAL_PORT2TIRTOS */
uint16 len;
uint8 dest_id;
} osal_msg_hdr_t;
#endif /* USE_ICALL */
typedef struct
{
uint8 event;
uint8 status;
} osal_event_hdr_t;
typedef void * osal_msg_q_t;
#ifdef USE_ICALL
/* High resolution timer callback function type */
typedef void (*osal_highres_timer_cback_t)(void *arg);
#endif /* USE_ICALL */
/*********************************************************************
* GLOBAL VARIABLES
*/
#ifdef USE_ICALL
extern ICall_Semaphore osal_semaphore;
extern ICall_EntityID osal_entity;
extern uint_least32_t osal_tickperiod;
extern void (*osal_eventloop_hook)(void);
#endif /* USE_ICALL */
/*********************************************************************
* FUNCTIONS
*/
/*** Message Management ***/
/*
* Task Message Allocation
*/
extern uint8 * osal_msg_allocate(uint16 len );
/*
* Task Message Deallocation
*/
extern uint8 osal_msg_deallocate( uint8 *msg_ptr );
/*
* Send a Task Message
*/
extern uint8 osal_msg_send( uint8 destination_task, uint8 *msg_ptr );
/*
* Push a Task Message to head of queue
*/
extern uint8 osal_msg_push_front( uint8 destination_task, uint8 *msg_ptr );
/*
* Receive a Task Message
*/
extern uint8 *osal_msg_receive( uint8 task_id );
/*
* Find in place a matching Task Message / Event.
*/
extern osal_event_hdr_t *osal_msg_find(uint8 task_id, uint8 event);
/*
* Count the number of queued OSAL messages matching Task ID / Event.
*/
extern uint8 osal_msg_count(uint8 task_id, uint8 event);
/*
* Enqueue a Task Message
*/
extern void osal_msg_enqueue( osal_msg_q_t *q_ptr, void *msg_ptr );
/*
* Enqueue a Task Message Up to Max
*/
extern uint8 osal_msg_enqueue_max( osal_msg_q_t *q_ptr, void *msg_ptr, uint8 max );
/*
* Dequeue a Task Message
*/
extern void *osal_msg_dequeue( osal_msg_q_t *q_ptr );
/*
* Push a Task Message to head of queue
*/
extern void osal_msg_push( osal_msg_q_t *q_ptr, void *msg_ptr );
/*
* Extract and remove a Task Message from queue
*/
extern void osal_msg_extract( osal_msg_q_t *q_ptr, void *msg_ptr, void *prev_ptr );
#ifdef USE_ICALL
extern ICall_Errno osal_service_entry(ICall_FuncArgsHdr *args);
#endif /* USE_ICALL */
/*** Task Synchronization ***/
/*
* Set a Task Event
*/
extern uint8 osal_set_event( uint8 task_id, uint16 event_flag );
/*
* Clear a Task Event
*/
extern uint8 osal_clear_event( uint8 task_id, uint16 event_flag );
/*** Interrupt Management ***/
/*
* Register Interrupt Service Routine (ISR)
*/
extern uint8 osal_isr_register( uint8 interrupt_id, void (*isr_ptr)( uint8* ) );
/*
* Enable Interrupt
*/
extern uint8 osal_int_enable( uint8 interrupt_id );
/*
* Disable Interrupt
*/
extern uint8 osal_int_disable( uint8 interrupt_id );
/*** Task Management ***/
#ifdef USE_ICALL
/*
* Enroll dispatcher registered entity ID
*/
extern void osal_enroll_dispatchid(uint8 taskid,
ICall_EntityID dispatchid);
/*
* Enroll an OSAL task to use another OSAL task's enrolled entity ID
* when sending a message.
*/
extern void osal_enroll_senderid(uint8 taskid, ICall_EntityID dispatchid);
/*
* Enroll entity ID to be used as sender entity ID for non OSAL task
*/
extern void osal_enroll_notasksender(ICall_EntityID dispatchid);
#endif /* USE_ICALL */
/*
* Initialize the Task System
*/
extern uint8 osal_init_system( void );
/*
* System Processing Loop
*/
#if defined (ZBIT)
extern __declspec(dllexport) void osal_start_system( void );
#else
extern void osal_start_system( void );
#endif
/*
* One Pass Throu the OSAL Processing Loop
*/
extern void osal_run_system( void );
/*
* Get the active task ID
*/
extern uint8 osal_self( void );
/*** Helper Functions ***/
/*
* String Length
*/
extern int osal_strlen( char *pString );
/*
* Memory copy
*/
extern void *osal_memcpy( void*, const void GENERIC *, unsigned int );
/*
* Memory Duplicate - allocates and copies
*/
extern void *osal_memdup( const void GENERIC *src, unsigned int len );
/*
* Reverse Memory copy
*/
extern void *osal_revmemcpy( void*, const void GENERIC *, unsigned int );
/*
* Memory compare
*/
extern uint8 osal_memcmp( const void GENERIC *src1, const void GENERIC *src2, unsigned int len );
/*
* Memory set
*/
extern void *osal_memset( void *dest, uint8 value, int len );
/*
* Build a uint16 out of 2 bytes (0 then 1).
*/
extern uint16 osal_build_uint16( uint8 *swapped );
/*
* Build a uint32 out of sequential bytes.
*/
extern uint32 osal_build_uint32( uint8 *swapped, uint8 len );
/*
* Convert long to ascii string
*/
#if !defined ( ZBIT ) && !defined ( ZBIT2 ) && !defined (UBIT)
extern uint8 *_ltoa( uint32 l, uint8 * buf, uint8 radix );
#endif
/*
* Random number generator
*/
extern uint16 osal_rand( void );
/*
* Buffer an uint32 value - LSB first.
*/
extern uint8* osal_buffer_uint32( uint8 *buf, uint32 val );
/*
* Buffer an uint24 value - LSB first
*/
extern uint8* osal_buffer_uint24( uint8 *buf, uint24 val );
/*
* Is all of the array elements set to a value?
*/
extern uint8 osal_isbufset( uint8 *buf, uint8 val, uint8 len );
/*********************************************************************
*********************************************************************/
#ifdef __cplusplus
}
#endif
#endif /* OSAL_H */

489
include/ZComDef.h Normal file
View File

@@ -0,0 +1,489 @@
/**************************************************************************************************
Filename: ZComDef.h
Revised: $Date: 2014-11-24 23:50:22 -0800 (Mon, 24 Nov 2014) $
Revision: $Revision: 41235 $
Description: Type definitions and macros.
Copyright 2004-2014 Texas Instruments Incorporated. All rights reserved.
IMPORTANT: Your use of this Software is limited to those specific rights
granted under the terms of a software license agreement between the user
who downloaded the software, his/her employer (which must be your employer)
and Texas Instruments Incorporated (the "License"). You may not use this
Software unless you agree to abide by the terms of the License. The License
limits your use, and you acknowledge, that the Software may not be modified,
copied or distributed unless embedded on a Texas Instruments microcontroller
or used solely and exclusively in conjunction with a Texas Instruments radio
frequency transceiver, which is integrated into your product. Other than for
the foregoing purpose, you may not use, reproduce, copy, prepare derivative
works of, modify, distribute, perform, display or sell this Software and/or
its documentation for any purpose.
YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE
PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,
INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE,
NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL
TEXAS INSTRUMENTS OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT,
NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER
LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES
INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE
OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT
OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES
(INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS.
Should you have any questions regarding your right to use this Software,
contact Texas Instruments Incorporated at www.TI.com.
**************************************************************************************************/
#ifndef ZCOMDEF_H
#define ZCOMDEF_H
#ifdef __cplusplus
extern "C"
{
#endif
/*********************************************************************
* INCLUDES
*/
#include "comdef.h"
#include "saddr.h"
/*********************************************************************
* CONSTANTS
*/
#define osal_cpyExtAddr(a, b) sAddrExtCpy((a), (const uint8 *)(b))
#define osal_ExtAddrEqual(a, b) sAddrExtCmp((const uint8 *)(a), (const uint8 *)(b))
#define osal_copyAddress(a, b) sAddrCpy( (sAddr_t *)(a), (const sAddr_t *)(b) )
/*********************************************************************
* CONSTANTS
*/
// Build Device Types - Used during compilation
// These are the types of devices to build
// Bit masked into ZSTACK_DEVICE_BUILD
#define DEVICE_BUILD_COORDINATOR 0x01
#define DEVICE_BUILD_ROUTER 0x02
#define DEVICE_BUILD_ENDDEVICE 0x04
/*** Return Values ***/
#define ZSUCCESS SUCCESS
/*** Component IDs ***/
#define COMPID_OSAL 0
#define COMPID_MTEL 1
#define COMPID_MTSPCI 2
#define COMPID_NWK 3
#define COMPID_NWKIF 4
#define COMPID_MACCB 5
#define COMPID_MAC 6
#define COMPID_APP 7
#define COMPID_TEST 8
#define COMPID_RTG 9
#define COMPID_DATA 11
/* Temp CompIDs for testing */
#define COMPID_TEST_NWK_STARTUP 20
#define COMPID_TEST_SCAN_CONFIRM 21
#define COMPID_TEST_ASSOC_CONFIRM 22
#define COMPID_TEST_REMOTE_DATA_CONFIRM 23
// OSAL NV Item IDs
#define ZCD_NV_EX_LEGACY 0x0000
#define ZCD_NV_EX_ADDRMGR 0x0001
#define ZCD_NV_EX_BINDING_TABLE 0x0002
#define ZCD_NV_EX_DEVICE_LIST 0x0003
// OSAL NV item IDs
#define ZCD_NV_EXTADDR 0x0001
#define ZCD_NV_BOOTCOUNTER 0x0002
#define ZCD_NV_STARTUP_OPTION 0x0003
#define ZCD_NV_START_DELAY 0x0004
// NWK Layer NV item IDs
#define ZCD_NV_NIB 0x0021
#define ZCD_NV_DEVICE_LIST 0x0022
#define ZCD_NV_ADDRMGR 0x0023
#define ZCD_NV_POLL_RATE_OLD16 0x0024 // Deprecated when poll rate changed from 16 to 32 bits
#define ZCD_NV_POLL_RATE 0x0035
#define ZCD_NV_QUEUED_POLL_RATE 0x0025
#define ZCD_NV_RESPONSE_POLL_RATE 0x0026
#define ZCD_NV_REJOIN_POLL_RATE 0x0027
#define ZCD_NV_DATA_RETRIES 0x0028
#define ZCD_NV_POLL_FAILURE_RETRIES 0x0029
#define ZCD_NV_STACK_PROFILE 0x002A
#define ZCD_NV_INDIRECT_MSG_TIMEOUT 0x002B
#define ZCD_NV_ROUTE_EXPIRY_TIME 0x002C
#define ZCD_NV_EXTENDED_PAN_ID 0x002D
#define ZCD_NV_BCAST_RETRIES 0x002E
#define ZCD_NV_PASSIVE_ACK_TIMEOUT 0x002F
#define ZCD_NV_BCAST_DELIVERY_TIME 0x0030
#define ZCD_NV_NWK_MODE 0x0031
#define ZCD_NV_CONCENTRATOR_ENABLE 0x0032
#define ZCD_NV_CONCENTRATOR_DISCOVERY 0x0033
#define ZCD_NV_CONCENTRATOR_RADIUS 0x0034
// 0x0035 used above for new 32 bit Poll Rate
#define ZCD_NV_CONCENTRATOR_RC 0x0036
#define ZCD_NV_NWK_MGR_MODE 0x0037
#define ZCD_NV_SRC_RTG_EXPIRY_TIME 0x0038
#define ZCD_NV_ROUTE_DISCOVERY_TIME 0x0039
#define ZCD_NV_NWK_ACTIVE_KEY_INFO 0x003A
#define ZCD_NV_NWK_ALTERN_KEY_INFO 0x003B
#define ZCD_NV_ROUTER_OFF_ASSOC_CLEANUP 0x003C
#define ZCD_NV_NWK_LEAVE_REQ_ALLOWED 0x003D
#define ZCD_NV_NWK_CHILD_AGE_ENABLE 0x003E
#define ZCD_NV_DEVICE_LIST_KA_TIMEOUT 0x003F
// APS Layer NV item IDs
#define ZCD_NV_BINDING_TABLE 0x0041
#define ZCD_NV_GROUP_TABLE 0x0042
#define ZCD_NV_APS_FRAME_RETRIES 0x0043
#define ZCD_NV_APS_ACK_WAIT_DURATION 0x0044
#define ZCD_NV_APS_ACK_WAIT_MULTIPLIER 0x0045
#define ZCD_NV_BINDING_TIME 0x0046
#define ZCD_NV_APS_USE_EXT_PANID 0x0047
#define ZCD_NV_APS_USE_INSECURE_JOIN 0x0048
#define ZCD_NV_COMMISSIONED_NWK_ADDR 0x0049
#define ZCD_NV_APS_NONMEMBER_RADIUS 0x004B // Multicast non_member radius
#define ZCD_NV_APS_LINK_KEY_TABLE 0x004C
#define ZCD_NV_APS_DUPREJ_TIMEOUT_INC 0x004D
#define ZCD_NV_APS_DUPREJ_TIMEOUT_COUNT 0x004E
#define ZCD_NV_APS_DUPREJ_TABLE_SIZE 0x004F
// System statistics and metrics NV ID
#define ZCD_NV_DIAGNOSTIC_STATS 0x0050
// Additional NWK Layer NV item IDs
#define ZCD_NV_NWK_PARENT_INFO 0x0051
#define ZCD_NV_NWK_ENDDEV_TIMEOUT_DEF 0x0052
#define ZCD_NV_END_DEV_TIMEOUT_VALUE 0x0053
#define ZCD_NV_END_DEV_CONFIGURATION 0x0054
#define ZCD_NV_BDBNODEISONANETWORK 0x0055 //bdbNodeIsOnANetwork attribute
#define ZCD_NV_BDBREPORTINGCONFIG 0x0056
// Security NV Item IDs
#define ZCD_NV_SECURITY_LEVEL 0x0061
#define ZCD_NV_PRECFGKEY 0x0062
#define ZCD_NV_PRECFGKEYS_ENABLE 0x0063
#define ZCD_NV_SECURITY_MODE 0x0064
#define ZCD_NV_SECURE_PERMIT_JOIN 0x0065
#define ZCD_NV_APS_LINK_KEY_TYPE 0x0066
#define ZCD_NV_APS_ALLOW_R19_SECURITY 0x0067
#define ZCD_NV_DISTRIBUTED_KEY 0x0068 //Default distributed nwk key Id. Nv ID not in use
#define ZCD_NV_IMPLICIT_CERTIFICATE 0x0069
#define ZCD_NV_DEVICE_PRIVATE_KEY 0x006A
#define ZCD_NV_CA_PUBLIC_KEY 0x006B
#define ZCD_NV_KE_MAX_DEVICES 0x006C
#define ZCD_NV_USE_DEFAULT_TCLK 0x006D
//deprecated: TRUSTCENTER_ADDR (16-bit) 0x006E
#define ZCD_NV_RNG_COUNTER 0x006F
#define ZCD_NV_RANDOM_SEED 0x0070
#define ZCD_NV_TRUSTCENTER_ADDR 0x0071
#define ZCD_NV_CERT_283 0x0072
#define ZCD_NV_PRIVATE_KEY_283 0x0073
#define ZCD_NV_PUBLIC_KEY_283 0x0074
#define ZCD_NV_NWK_SEC_MATERIAL_TABLE_START 0x0075
#define ZCD_NV_NWK_SEC_MATERIAL_TABLE_END 0x0080
// ZDO NV Item IDs
#define ZCD_NV_USERDESC 0x0081
#define ZCD_NV_NWKKEY 0x0082
#define ZCD_NV_PANID 0x0083
#define ZCD_NV_CHANLIST 0x0084
#define ZCD_NV_LEAVE_CTRL 0x0085
#define ZCD_NV_SCAN_DURATION 0x0086
#define ZCD_NV_LOGICAL_TYPE 0x0087
#define ZCD_NV_NWKMGR_MIN_TX 0x0088
#define ZCD_NV_NWKMGR_ADDR 0x0089
#define ZCD_NV_ZDO_DIRECT_CB 0x008F
// ZCL NV item IDs
#define ZCD_NV_SCENE_TABLE 0x0091
#define ZCD_NV_MIN_FREE_NWK_ADDR 0x0092
#define ZCD_NV_MAX_FREE_NWK_ADDR 0x0093
#define ZCD_NV_MIN_FREE_GRP_ID 0x0094
#define ZCD_NV_MAX_FREE_GRP_ID 0x0095
#define ZCD_NV_MIN_GRP_IDS 0x0096
#define ZCD_NV_MAX_GRP_IDS 0x0097
#define ZCD_NV_OTA_BLOCK_REQ_DELAY 0x0098
// Non-standard NV item IDs
#define ZCD_NV_SAPI_ENDPOINT 0x00A1
// NV Items Reserved for Commissioning Cluster Startup Attribute Set (SAS):
// 0x00B1 - 0x00BF: Parameters related to APS and NWK layers
// 0x00C1 - 0x00CF: Parameters related to Security
// 0x00D1 - 0x00DF: Current key parameters
#define ZCD_NV_SAS_SHORT_ADDR 0x00B1
#define ZCD_NV_SAS_EXT_PANID 0x00B2
#define ZCD_NV_SAS_PANID 0x00B3
#define ZCD_NV_SAS_CHANNEL_MASK 0x00B4
#define ZCD_NV_SAS_PROTOCOL_VER 0x00B5
#define ZCD_NV_SAS_STACK_PROFILE 0x00B6
#define ZCD_NV_SAS_STARTUP_CTRL 0x00B7
#define ZCD_NV_SAS_TC_ADDR 0x00C1
#define ZCD_NV_SAS_TC_MASTER_KEY 0x00C2
#define ZCD_NV_SAS_NWK_KEY 0x00C3
#define ZCD_NV_SAS_USE_INSEC_JOIN 0x00C4
#define ZCD_NV_SAS_PRECFG_LINK_KEY 0x00C5
#define ZCD_NV_SAS_NWK_KEY_SEQ_NUM 0x00C6
#define ZCD_NV_SAS_NWK_KEY_TYPE 0x00C7
#define ZCD_NV_SAS_NWK_MGR_ADDR 0x00C8
#define ZCD_NV_SAS_CURR_TC_MASTER_KEY 0x00D1
#define ZCD_NV_SAS_CURR_NWK_KEY 0x00D2
#define ZCD_NV_SAS_CURR_PRECFG_LINK_KEY 0x00D3
// NV Items Reserved for Trust Center Link Key Table entries
// 0x0101 - 0x01FF
#define ZCD_NV_TCLK_SEED 0x0101 //Seed
#define ZCD_NV_TCLK_JOIN_DEV 0x0102 //Nv Id where Joining device store their APS key. Key is in plain text.
#define ZCD_NV_TCLK_DEFAULT 0x0103 //Not accually a Nv Item but Id used by SecMgr
#define ZCD_NV_TCLK_IC_TABLE_START 0x0104 //IC keys, refered with shift byte
#define ZCD_NV_TCLK_IC_TABLE_END 0x0110
#define ZCD_NV_TCLK_TABLE_START 0x0111 //Entries to store users of the keys
#define ZCD_NV_TCLK_TABLE_END 0x01FF
// NV Items Reserved for APS Link Key Table entries
// 0x0201 - 0x02FF
#define ZCD_NV_APS_LINK_KEY_DATA_START 0x0201 // APS key data
#define ZCD_NV_APS_LINK_KEY_DATA_END 0x02FF
// NV items used to duplicate system elements
#define ZCD_NV_DUPLICATE_BINDING_TABLE 0x0300
#define ZCD_NV_DUPLICATE_DEVICE_LIST 0x0301
#define ZCD_NV_DUPLICATE_DEVICE_LIST_KA_TIMEOUT 0x0302
// NV Items Reserved for Proxy Table entries
// 0x0310 - 0x033F
#define ZCD_NV_PROXY_TABLE_START 0x0310
#define ZCD_NV_PROXY_TABLE_END 0x033F
// NV Items Reserved for applications (user applications)
// 0x0401 <20> 0x0FFF
// ZCD_NV_STARTUP_OPTION values
// These are bit weighted - you can OR these together.
// Setting one of these bits will set their associated NV items
// to code initialized values.
#define ZCD_STARTOPT_DEFAULT_CONFIG_STATE 0x01
#define ZCD_STARTOPT_DEFAULT_NETWORK_STATE 0x02
#define ZCD_STARTOPT_AUTO_START 0x04
#define ZCD_STARTOPT_CLEAR_CONFIG ZCD_STARTOPT_DEFAULT_CONFIG_STATE
#define ZCD_STARTOPT_CLEAR_STATE ZCD_STARTOPT_DEFAULT_NETWORK_STATE
//FrameCounter should be persistence across factory new resets, this should not
//used as part of FN reset procedure. Set to reset the FrameCounter of all
//Nwk Security Material
#define ZCD_STARTOPT_CLEAR_NWK_FRAME_COUNTER 0x80
#define ZCL_KE_IMPLICIT_CERTIFICATE_LEN 48
#define ZCL_KE_CA_PUBLIC_KEY_LEN 22
#define ZCL_KE_DEVICE_PRIVATE_KEY_LEN 21
/*********************************************************************
* TYPEDEFS
*/
/*** Data Types ***/
typedef uint8 byte;
typedef uint16 UINT16;
typedef int16 INT16;
enum
{
AddrNotPresent = 0,
AddrGroup = 1,
Addr16Bit = 2,
Addr64Bit = 3,
AddrBroadcast = 15
};
#define Z_EXTADDR_LEN 8
typedef byte ZLongAddr_t[Z_EXTADDR_LEN];
typedef struct
{
union
{
uint16 shortAddr;
ZLongAddr_t extAddr;
} addr;
byte addrMode;
} zAddrType_t;
// Redefined Generic Status Return Values for code backwards compatibility
#define ZSuccess SUCCESS
#define ZFailure FAILURE
#define ZInvalidParameter INVALIDPARAMETER
// ZStack status values must start at 0x10, after the generic status values (defined in comdef.h)
#define ZMemError 0x10
#define ZBufferFull 0x11
#define ZUnsupportedMode 0x12
#define ZMacMemError 0x13
#define ZSapiInProgress 0x20
#define ZSapiTimeout 0x21
#define ZSapiInit 0x22
#define ZNotAuthorized 0x7E
#define ZMalformedCmd 0x80
#define ZUnsupClusterCmd 0x81
// OTA Status values
#define ZOtaAbort 0x95
#define ZOtaImageInvalid 0x96
#define ZOtaWaitForData 0x97
#define ZOtaNoImageAvailable 0x98
#define ZOtaRequireMoreImage 0x99
// APS status values
#define ZApsFail 0xb1
#define ZApsTableFull 0xb2
#define ZApsIllegalRequest 0xb3
#define ZApsInvalidBinding 0xb4
#define ZApsUnsupportedAttrib 0xb5
#define ZApsNotSupported 0xb6
#define ZApsNoAck 0xb7
#define ZApsDuplicateEntry 0xb8
#define ZApsNoBoundDevice 0xb9
#define ZApsNotAllowed 0xba
#define ZApsNotAuthenticated 0xbb
// Security status values
#define ZSecNoKey 0xa1
#define ZSecOldFrmCount 0xa2
#define ZSecMaxFrmCount 0xa3
#define ZSecCcmFail 0xa4
#define ZSecFailure 0xad
// NWK status values
#define ZNwkInvalidParam 0xc1
#define ZNwkInvalidRequest 0xc2
#define ZNwkNotPermitted 0xc3
#define ZNwkStartupFailure 0xc4
#define ZNwkAlreadyPresent 0xc5
#define ZNwkSyncFailure 0xc6
#define ZNwkTableFull 0xc7
#define ZNwkUnknownDevice 0xc8
#define ZNwkUnsupportedAttribute 0xc9
#define ZNwkNoNetworks 0xca
#define ZNwkLeaveUnconfirmed 0xcb
#define ZNwkNoAck 0xcc // not in spec
#define ZNwkNoRoute 0xcd
// MAC status values
#define ZMacSuccess 0x00
#define ZMacBeaconLoss 0xe0
#define ZMacChannelAccessFailure 0xe1
#define ZMacDenied 0xe2
#define ZMacDisableTrxFailure 0xe3
#define ZMacFailedSecurityCheck 0xe4
#define ZMacFrameTooLong 0xe5
#define ZMacInvalidGTS 0xe6
#define ZMacInvalidHandle 0xe7
#define ZMacInvalidParameter 0xe8
#define ZMacNoACK 0xe9
#define ZMacNoBeacon 0xea
#define ZMacNoData 0xeb
#define ZMacNoShortAddr 0xec
#define ZMacOutOfCap 0xed
#define ZMacPANIDConflict 0xee
#define ZMacRealignment 0xef
#define ZMacTransactionExpired 0xf0
#define ZMacTransactionOverFlow 0xf1
#define ZMacTxActive 0xf2
#define ZMacUnAvailableKey 0xf3
#define ZMacUnsupportedAttribute 0xf4
#define ZMacUnsupported 0xf5
#define ZMacSrcMatchInvalidIndex 0xff
typedef Status_t ZStatus_t;
typedef struct
{
uint8 txCounter; // Counter of transmission success/failures
uint8 txCost; // Average of sending rssi values if link staus is enabled
// i.e. NWK_LINK_STATUS_PERIOD is defined as non zero
uint8 rxLqi; // average of received rssi values
// needs to be converted to link cost (1-7) before used
uint8 inKeySeqNum; // security key sequence number
uint32 inFrmCntr; // security frame counter..
uint16 txFailure; // higher values indicate more failures
} linkInfo_t;
/*********************************************************************
* Global System Messages
*/
#define SPI_INCOMING_ZTOOL_PORT 0x21 // Raw data from ZTool Port (not implemented)
#define SPI_INCOMING_ZAPP_DATA 0x22 // Raw data from the ZAPP port (see serialApp.c)
#define MT_SYS_APP_MSG 0x23 // Raw data from an MT Sys message
#define MT_SYS_APP_RSP_MSG 0x24 // Raw data output for an MT Sys message
#define MT_SYS_OTA_MSG 0x25 // Raw data output for an MT OTA Rsp
#define MT_SYS_APP_PB_ZCL_CMD 0x26 // MT APP PB ZCL command
#define AF_DATA_CONFIRM_CMD 0xFD // Data confirmation
#define AF_REFLECT_ERROR_CMD 0xFE // Reflected message error message
#define AF_INCOMING_MSG_CMD 0x1A // Incoming MSG type message
#define AF_INCOMING_KVP_CMD 0x1B // Incoming KVP type message
#define AF_INCOMING_GRP_KVP_CMD 0x1C // Incoming Group KVP type message
//#define KEY_CHANGE 0xC0 // Key Events
#define ZDO_NEW_DSTADDR 0xD0 // ZDO has received a new DstAddr for this app
#define ZDO_STATE_CHANGE 0xD1 // ZDO has changed the device's network state
#define ZDO_MATCH_DESC_RSP_SENT 0xD2 // ZDO match descriptor response was sent
#define ZDO_CB_MSG 0xD3 // ZDO incoming message callback
#define ZDO_NETWORK_REPORT 0xD4 // ZDO received a Network Report message
#define ZDO_NETWORK_UPDATE 0xD5 // ZDO received a Network Update message
#define ZDO_ADDR_CHANGE_IND 0xD6 // ZDO was informed of device address change
#define NM_CHANNEL_INTERFERE 0x31 // NwkMgr received a Channel Interference message
#define NM_ED_SCAN_CONFIRM 0x32 // NwkMgr received an ED Scan Confirm message
#define SAPS_CHANNEL_CHANGE 0x33 // Stub APS has changed the device's channel
#define ZCL_INCOMING_MSG 0x34 // Incoming ZCL foundation message
#define ZCL_KEY_ESTABLISH_IND 0x35 // ZCL Key Establishment Completion Indication
#define ZCL_OTA_CALLBACK_IND 0x36 // ZCL OTA Completion Indication
// OSAL System Message IDs/Events Reserved for applications (user applications)
// 0xE0 <20> 0xFC
/*********************************************************************
* GLOBAL VARIABLES
*/
/*********************************************************************
* FUNCTIONS
*/
/*********************************************************************
*********************************************************************/
#ifdef __cplusplus
}
#endif
#endif /* ZCOMDEF_H */

181
include/i2c.h Normal file
View File

@@ -0,0 +1,181 @@
/******************************************************************************
* Filename: i2c.h
* Revised: $Date: 2013-01-21 06:25:21 -0800 (Mon, 21 Jan 2013) $
* Revision: $Revision: 9178 $
*
* Description: Prototypes for the I2C Driver.
*
*
* Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
*
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* Neither the name of Texas Instruments Incorporated nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
******************************************************************************/
#ifndef __I2C_H__
#define __I2C_H__
//*****************************************************************************
//
// If building with a C++ compiler, make all of the definitions in this header
// have a C binding.
//
//*****************************************************************************
#ifdef __cplusplus
extern "C"
{
#endif
#include "hw_types.h"
//*****************************************************************************
//
// Defines for the API.
//
//*****************************************************************************
//*****************************************************************************
//
// Interrupt defines.
//
//*****************************************************************************
#define I2C_INT_MASTER 0x00000001
#define I2C_INT_SLAVE 0x00000002
//*****************************************************************************
//
// I2C Master commands.
//
//*****************************************************************************
#define I2C_MASTER_CMD_SINGLE_SEND \
0x00000007
#define I2C_MASTER_CMD_SINGLE_RECEIVE \
0x00000007
#define I2C_MASTER_CMD_BURST_SEND_START \
0x00000003
#define I2C_MASTER_CMD_BURST_SEND_CONT \
0x00000001
#define I2C_MASTER_CMD_BURST_SEND_FINISH \
0x00000005
#define I2C_MASTER_CMD_BURST_SEND_ERROR_STOP \
0x00000004
#define I2C_MASTER_CMD_BURST_RECEIVE_START \
0x0000000b
#define I2C_MASTER_CMD_BURST_RECEIVE_CONT \
0x00000009
#define I2C_MASTER_CMD_BURST_RECEIVE_FINISH \
0x00000005
#define I2C_MASTER_CMD_BURST_RECEIVE_ERROR_STOP \
0x00000004
//*****************************************************************************
//
// I2C Master error status.
//
//*****************************************************************************
#define I2C_MASTER_ERR_NONE 0
#define I2C_MASTER_ERR_ADDR_ACK 0x00000004
#define I2C_MASTER_ERR_DATA_ACK 0x00000008
#define I2C_MASTER_ERR_ARB_LOST 0x00000010
//*****************************************************************************
//
// I2C Slave action requests
//
//*****************************************************************************
#define I2C_SLAVE_ACT_NONE 0
#define I2C_SLAVE_ACT_RREQ 0x00000001 // Master has sent data
#define I2C_SLAVE_ACT_TREQ 0x00000002 // Master has requested data
#define I2C_SLAVE_ACT_RREQ_FBR 0x00000005 // Master has sent first byte
//*****************************************************************************
//
// Miscellaneous I2C driver definitions.
//
//*****************************************************************************
#define I2C_MASTER_MAX_RETRIES 1000 // Number of retries
//*****************************************************************************
//
// I2C Slave interrupts.
//
//*****************************************************************************
#define I2C_SLAVE_INT_STOP 0x00000004 // Stop Condition Interrupt.
#define I2C_SLAVE_INT_START 0x00000002 // Start Condition Interrupt.
#define I2C_SLAVE_INT_DATA 0x00000001 // Data Interrupt.
//*****************************************************************************
//
// Prototypes for the APIs.
//
//*****************************************************************************
extern void I2CIntRegister(void (*pfnHandler)(void));
extern void I2CIntUnregister(void);
extern bool I2CMasterBusBusy(void);
extern bool I2CMasterBusy(void);
extern void I2CMasterControl(uint32_t ui32Cmd);
extern uint32_t I2CMasterDataGet(void);
extern void I2CMasterDataPut(uint8_t ui8Data);
extern void I2CMasterDisable(void);
extern void I2CMasterEnable(void);
extern uint32_t I2CMasterErr(void);
extern void I2CMasterInitExpClk(uint32_t ui32I2CClk, bool bFast);
extern void I2CMasterIntClear(void);
extern void I2CMasterIntDisable(void);
extern void I2CMasterIntEnable(void);
extern bool I2CMasterIntStatus(bool bMasked);
extern void I2CMasterSlaveAddrSet(uint8_t ui8SlaveAddr,
bool bReceive);
extern uint32_t I2CSlaveDataGet(void);
extern void I2CSlaveDataPut(uint8_t ui8Data);
extern void I2CSlaveDisable(void);
extern void I2CSlaveEnable(void);
extern void I2CSlaveInit(uint8_t ui8SlaveAddr);
extern void I2CSlaveIntClear(void);
extern void I2CSlaveIntDisable(void);
extern void I2CSlaveIntEnable(void);
extern void I2CSlaveIntClearEx(uint32_t ui32IntFlags);
extern void I2CSlaveIntDisableEx(uint32_t ui32IntFlags);
extern void I2CSlaveIntEnableEx(uint32_t ui32IntFlags);
extern bool I2CSlaveIntStatus(bool bMasked);
extern uint32_t I2CSlaveIntStatusEx(bool bMasked);
extern uint32_t I2CSlaveStatus(void);
//*****************************************************************************
//
// Mark the end of the C bindings section for C++ compilers.
//
//*****************************************************************************
#ifdef __cplusplus
}
#endif
#endif // __I2C_H__