1 #include <system_def.h>
3 #include <ul_lib/ulan.h>
6 #include <local_config.h>
9 #include <hal_machperiph.h>
10 #include <keyval_loc.h>
11 #include <lpciap_kvpb.h>
18 LT_TIMER_DEC(lt_100msec)
19 LT_TIMER_IMP(lt_100msec)
23 /***********************************/
25 KVPB_BLOCK_LOC kvpb_block_t kvpb_block_global;
26 UL_DYAC_VAR_LOC ul_dyac_t ul_dyac_global;
28 #ifndef UL_WITHOUT_HANDLE
29 kvpb_block_t *kvpb_block=&kvpb_block_global;
30 ul_dyac_t *ul_dyac=&ul_dyac_global;
33 #endif /* UL_WITHOUT_HANDLE */
36 unsigned int XDATA uaddr;
37 unsigned long XDATA usn;
40 typedef void (*FNC)(); //function ptr
42 /***********************************/
49 /* serve interrupt rutine for timer */
53 if (lt_100msec_expired(100)) {
56 SET_OUT_PIN(LED_PORT,LED_ERR);
58 CLR_OUT_PIN(LED_PORT,LED_ERR);
60 #ifdef WATCHDOG_ENABLED
62 #endif /* WATCHDOG_ENABLED */
67 /***********************************/
68 char ul_save_sn(uint32_t usn)
70 kvpb_set_key(kvpb_block,KVPB_KEYID_ULAN_SN,sizeof(unsigned long),&usn);
74 /***********************************/
75 char ul_save_adr(uint8_t uaddr_new)
78 kvpb_set_key(kvpb_block,KVPB_KEYID_ULAN_ADDR,sizeof(unsigned int),&uaddr);
82 /***********************************/
86 /***********************************/
92 CLR_OUT_PIN(LED_PORT,LED_GP);
94 /***********************************/
96 kvpb_block->base=(CODE uint8_t *)KEYVAL_START;
97 kvpb_block->size=KEYVAL_PAGE_LEN;
98 kvpb_block->flags=KVPB_DEFAULT_FLAGS;
99 #ifndef KVPB_MINIMALIZED
100 kvpb_block->chunk_size=KVPB_CHUNK_SIZE;
101 kvpb_block->erase=kvpb_erase;
102 kvpb_block->copy=kvpb_copy;
103 kvpb_block->flush=kvpb_flush;
105 if (kvpb_check(kvpb_block,1)<0) sys_err();
107 /***********************************/
108 // set configuration for device
111 kvpb_get_key(kvpb_block,KVPB_KEYID_ULAN_ADDR,sizeof(unsigned int),&uaddr);
112 kvpb_get_key(kvpb_block,KVPB_KEYID_ULAN_SN,sizeof(unsigned long),&usn);
114 /***********************************/
116 #ifdef UL_WITHOUT_HANDLE
117 ul_drv_set_bdiv(BAUD2BAUDDIV(19200));
120 ul_fd=ul_open(NULL,NULL);
121 if (ul_fd==UL_FD_INVALID) sys_err();
122 ul_setidstr(ul_fd,ul_idstr);
123 ul_setmyadr(ul_fd,uaddr);
127 ul_addfilt(ul_fd,&msginfo);
130 /***********************************/
132 uldy_init(ULDY_ARG_ul_dyac ULDY_ARG_ul_fd ul_save_sn,ul_save_adr,(char*)ul_idstr,usn);
134 /********************/
137 if(!(ul_dyac->boot_activated)) {
138 if(*(int CODE*)MEM_APP_START != (int) ~0)
139 if(lt_2sec_expired(2000))
144 /* serve interrupt rutine for uLan */
147 /* serve interrupt rutine for timer */
151 /* test for ulan message */
152 if(ul_inepoll(ul_fd)>0){
153 uldy_process_msg(ULDY_ARG_ul_dyac NULL);
156 /* test request for address */
157 if (uldy_rqa(ULDY_ARG1_ul_dyac))
158 uldy_addr_rq(ULDY_ARG1_ul_dyac);
161 #ifdef WATCHDOG_ENABLED
163 #endif /* WATCHDOG_ENABLED */
165 /* serve 100ms timer */
166 if (lt_100msec_expired(100)) {
172 SET_OUT_PIN(LED_PORT,LED_GP);
173 ((FNC)MEM_APP_START)();
174 /* unreachable code */
176 vec_jmp(0x0); /* need to call a function from misc to correct linking */