123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372 |
- #ifndef NONWK
- #include "AF.h"
- #endif
- #include "hal_adc.h"
- #include "hal_flash.h"
- #include "hal_lcd.h"
- #include "hal_led.h"
- #include "hal_drivers.h"
- #include "OnBoard.h"
- #include "OSAL.h"
- #include "OSAL_Nv.h"
- #include "ZComDef.h"
- #include "ZMAC.h"
- #include "znp_app.h"
- extern void osal_start_znp( void );
- static void zmain_ext_addr( void );
- #if defined ZCL_KEY_ESTABLISH
- static void zmain_cert_init( void );
- #endif
- static void zmain_dev_info( void );
- static void zmain_vdd_check( void );
- #ifdef LCD_SUPPORTED
- static void zmain_lcd_init( void );
- #endif
- int main( void )
- {
-
- osal_int_disable( INTS_ALL );
-
- HAL_BOARD_INIT();
-
- zmain_vdd_check();
-
- InitBoard( OB_COLD );
-
- HalDriverInit();
-
- osal_nv_init( NULL );
-
- znpTestRF();
-
- ZMacInit();
-
- zmain_ext_addr();
- #if defined ZCL_KEY_ESTABLISH
-
- zmain_cert_init();
- #endif
-
- zgInit();
- #ifndef NONWK
-
- afInit();
- #endif
-
- osal_init_system();
-
- osal_int_enable( INTS_ALL );
-
- InitBoard( OB_READY );
-
- zmain_dev_info();
-
- #ifdef LCD_SUPPORTED
- zmain_lcd_init();
- #endif
- #ifdef WDT_IN_PM1
-
- WatchDogEnable( WDTIMX );
- #endif
- osal_start_znp();
- return 0;
- }
- static void zmain_vdd_check( void )
- {
- uint8 cnt = 16;
-
- do {
- while (!HalAdcCheckVdd(VDD_MIN_RUN));
- } while (--cnt);
- }
- static void zmain_ext_addr(void)
- {
- uint8 nullAddr[Z_EXTADDR_LEN] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
- uint8 writeNV = TRUE;
-
- if ((SUCCESS != osal_nv_item_init(ZCD_NV_EXTADDR, Z_EXTADDR_LEN, NULL)) ||
- (SUCCESS != osal_nv_read(ZCD_NV_EXTADDR, 0, Z_EXTADDR_LEN, aExtendedAddress)) ||
- (osal_memcmp(aExtendedAddress, nullAddr, Z_EXTADDR_LEN)))
- {
-
-
- HalFlashRead(HAL_FLASH_IEEE_PAGE, HAL_FLASH_IEEE_OSET, aExtendedAddress, Z_EXTADDR_LEN);
- if (osal_memcmp(aExtendedAddress, nullAddr, Z_EXTADDR_LEN))
- {
-
- if (!osal_memcmp((uint8 *)(P_INFOPAGE+HAL_INFOP_IEEE_OSET), nullAddr, Z_EXTADDR_LEN))
- {
- osal_memcpy(aExtendedAddress, (uint8 *)(P_INFOPAGE+HAL_INFOP_IEEE_OSET), Z_EXTADDR_LEN);
- }
- else
- {
- uint8 idx;
-
- #if !defined ( NV_RESTORE )
- writeNV = FALSE;
- #endif
-
- for (idx = 0; idx < (Z_EXTADDR_LEN - 2);)
- {
- uint16 randy = osal_rand();
- aExtendedAddress[idx++] = LO_UINT16(randy);
- aExtendedAddress[idx++] = HI_UINT16(randy);
- }
-
- #if ZG_BUILD_COORDINATOR_TYPE && !ZG_BUILD_JOINING_TYPE
- aExtendedAddress[idx++] = 0x10;
- #elif ZG_BUILD_RTRONLY_TYPE
- aExtendedAddress[idx++] = 0x20;
- #else
- aExtendedAddress[idx++] = 0x30;
- #endif
-
- aExtendedAddress[idx] = 0xF8;
- }
- }
- if (writeNV)
- {
- (void)osal_nv_write(ZCD_NV_EXTADDR, 0, Z_EXTADDR_LEN, aExtendedAddress);
- }
- }
-
- (void)ZMacSetReq(MAC_EXTENDED_ADDRESS, aExtendedAddress);
- }
- #if defined ZCL_KEY_ESTABLISH
- static void zmain_cert_init(void)
- {
- uint8 certData[ZCL_KE_IMPLICIT_CERTIFICATE_LEN];
- uint8 nullData[ZCL_KE_IMPLICIT_CERTIFICATE_LEN] = {
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
- };
- (void)osal_nv_item_init(ZCD_NV_IMPLICIT_CERTIFICATE, ZCL_KE_IMPLICIT_CERTIFICATE_LEN, NULL);
- (void)osal_nv_item_init(ZCD_NV_DEVICE_PRIVATE_KEY, ZCL_KE_DEVICE_PRIVATE_KEY_LEN, NULL);
-
-
- if ((SUCCESS != osal_nv_item_init(ZCD_NV_CA_PUBLIC_KEY, ZCL_KE_CA_PUBLIC_KEY_LEN, NULL)) ||
- (SUCCESS != osal_nv_read(ZCD_NV_CA_PUBLIC_KEY, 0, ZCL_KE_CA_PUBLIC_KEY_LEN, certData)) ||
- (osal_memcmp(certData, nullData, ZCL_KE_CA_PUBLIC_KEY_LEN)))
- {
-
- HalFlashRead(HAL_FLASH_IEEE_PAGE, HAL_FLASH_CA_PUBLIC_KEY_OSET, certData,
- ZCL_KE_CA_PUBLIC_KEY_LEN);
-
- if (!osal_memcmp(certData, nullData, ZCL_KE_CA_PUBLIC_KEY_LEN))
- {
- (void)osal_nv_write(ZCD_NV_CA_PUBLIC_KEY, 0, ZCL_KE_CA_PUBLIC_KEY_LEN, certData);
- HalFlashRead(HAL_FLASH_IEEE_PAGE, HAL_FLASH_IMPLICIT_CERT_OSET, certData,
- ZCL_KE_IMPLICIT_CERTIFICATE_LEN);
- (void)osal_nv_write(ZCD_NV_IMPLICIT_CERTIFICATE, 0,
- ZCL_KE_IMPLICIT_CERTIFICATE_LEN, certData);
- HalFlashRead(HAL_FLASH_IEEE_PAGE, HAL_FLASH_DEV_PRIVATE_KEY_OSET, certData,
- ZCL_KE_DEVICE_PRIVATE_KEY_LEN);
- (void)osal_nv_write(ZCD_NV_DEVICE_PRIVATE_KEY, 0, ZCL_KE_DEVICE_PRIVATE_KEY_LEN, certData);
- }
- }
- }
- #endif
- static void zmain_dev_info(void)
- {
- #ifdef LCD_SUPPORTED
- uint8 i;
- uint8 *xad;
- uint8 lcd_buf[Z_EXTADDR_LEN*2+1];
-
- xad = aExtendedAddress + Z_EXTADDR_LEN - 1;
- for (i = 0; i < Z_EXTADDR_LEN*2; xad--)
- {
- uint8 ch;
- ch = (*xad >> 4) & 0x0F;
- lcd_buf[i++] = ch + (( ch < 10 ) ? '0' : '7');
- ch = *xad & 0x0F;
- lcd_buf[i++] = ch + (( ch < 10 ) ? '0' : '7');
- }
- lcd_buf[Z_EXTADDR_LEN*2] = '\0';
- HalLcdWriteString( "IEEE: ", HAL_LCD_LINE_1 );
- HalLcdWriteString( (char*)lcd_buf, HAL_LCD_LINE_2 );
- #endif
- }
- #ifdef LCD_SUPPORTED
- static void zmain_lcd_init ( void )
- {
- #ifdef SERIAL_DEBUG_SUPPORTED
- {
- HalLcdWriteString( "TexasInstruments", HAL_LCD_LINE_1 );
- #if defined( MT_MAC_FUNC )
- #if defined( ZDO_COORDINATOR )
- HalLcdWriteString( "MAC-MT Coord", HAL_LCD_LINE_2 );
- #else
- HalLcdWriteString( "MAC-MT Device", HAL_LCD_LINE_2 );
- #endif
- #elif defined( MT_NWK_FUNC )
- #if defined( ZDO_COORDINATOR )
- HalLcdWriteString( "NWK Coordinator", HAL_LCD_LINE_2 );
- #else
- HalLcdWriteString( "NWK Device", HAL_LCD_LINE_2 );
- #endif
- #endif
- }
- #endif
- }
- #endif
|