1 #include <system_def.h>
4 #include <hal_machperiph.h>
7 #include "appl_version.h"
12 #include <keyval_id.h>
13 #include <keyval_loc.h>
14 #include <lpciap_kvpb.h>
15 #include <bbconf_info.h>
17 #endif /*CONFIG_KEYVAL*/
19 #ifdef CONFIG_OC_I2C_DRV_SYSLESS
21 extern i2c_drv_t i2c_drv;
24 #ifdef CONFIG_OC_SPI_DRV_SYSLESS
29 #include <ul_logreg.h>
31 #if defined(APPL_WITH_SUITK) && defined(OMK_FOR_TARGET)
32 #define UL_LOG_TO_STDOUT
33 extern FILE *ul_log_default_file;
36 /***********************************/
39 kvpb_block_t kvpb_block_global;
40 kvpb_block_t *kvpb_block = &kvpb_block_global;
41 #endif /*CONFIG_KEYVAL*/
44 uloi_con_ulan_t uloi_con_ulan_global;
45 uloi_coninfo_t *coninfo = &uloi_con_ulan_global.con;
48 UL_DYAC_VAR_LOC ul_dyac_t ul_dyac_global;
49 ul_dyac_t *ul_dyac = &ul_dyac_global;
50 char ul_dyac_gst_reply[4 + 2];
51 #endif /*CONFIG_ULAN_DY*/
54 ul_fd_t ul_fd, ul_fd1;
58 #ifdef APPL_WITH_UL_FD4TIMEPROG
59 ul_fd_t ul_fd4timeprog;
61 #endif /*APPL_WITH_ULAN*/
63 uint32_t usn; /* uLAN/USB device serial number */
65 int usb_enable_flag = 1;
67 LT_TIMER_IMP(lt_10msec)
69 /***********************************/
70 /* alternative memory reservation for framebuffer and uLan*/
71 #ifndef APPL_WITH_SIM_POSIX
72 void *(* const gr_driver_reserve_ram)(size_t size) =
75 void *(* const ul_drv_reserve_ram)(size_t size) =
78 void *(* const timeprog_reserve_ram)(size_t size) =
81 void *(* const appl_distore_reserve_ram)(size_t size) =
83 #endif /*APPL_WITH_SIM_POSIX*/
85 /***********************************/
88 printf("System error at %p\n", __builtin_return_address(0));
93 /***********************************/
94 char ul_save_sn(uint32_t usn)
97 kvpb_set_key(kvpb_block, KVPB_KEYID_ULAN_SN, 4, &usn);
98 #endif /*CONFIG_KEYVAL*/
102 /***********************************/
103 char ul_save_adr(uint8_t uaddr)
106 kvpb_set_key(kvpb_block, KVPB_KEYID_ULAN_ADDR, 1, &uaddr);
107 #endif /*CONFIG_KEYVAL*/
113 // kvpb_set_key(kvpb_block,KVPB_KEYID_APPL_PARAM,sizeof(appl_param_t),&appl_param);
116 /***********************************/
117 #ifdef CONFIG_OC_SPI_DRV_SYSLESS
118 // received data bits 28..31 KBD variant (1)
121 // send data bits 12..15 LED indicators
122 // bits 0.. 7 LED indicators
123 // bit 10 backlight full
124 // bit 11 backlight medium
126 // bit 9 tone freq select
127 // LEDs RUN 0, HOLD 1, PURGE 2, ERROR 3, A 5, B 6, C 7
129 // Keys '1'-'9' 1-9, '.' 10, '0' 11, ENTER 12, STOP 13, START 14,
130 // down 15, right 16, up 17, lesft 18, ESC 19, P/M 20,
131 // D 21, C 22, B 23, A 24, MENU 25
132 int check_spi_kbd_presence()
135 uint8_t tx_buff[4] = {0x00, 0x00, 0x09, 0x55};
137 spi_drv_t *spi_drv = spi_find_drv(NULL, 0);
142 res = spi_transfer(spi_drv, 4, 4, tx_buff, rx_buff);
147 printf("kbd_presence %02x %02x %02x %02x\n",
148 rx_buff[0], rx_buff[1], rx_buff[2], rx_buff[3]);
152 #endif /*CONFIG_OC_SPI_DRV_SYSLESS*/
154 /***********************************/
156 #ifndef APPL_WITH_SIM_POSIX
157 #include <hal_gpio.h>
160 hal_pin_conf(ADC0_PIN);
161 hal_pin_conf(ADC1_PIN);
162 hal_pin_conf(ADC2_PIN);
163 hal_pin_conf(ADC3_PIN);
164 hal_pin_conf(ADC7_PIN);
166 LPC_SC->PCONP |= (1 << 12); /*PCADC*/
168 LPC_ADC->CR = (1 << 21); /*PDN*/
170 LPC_ADC->CR |= 0x8F; /*SEL selsect channels 0 to 3 and 7*/
171 LPC_ADC->CR |= (9 << 8); /*CLKDIV*/
172 LPC_ADC->CR |= (1 << 16); /*BURST start burst mode*/
176 #endif /*APPL_WITH_SIM_POSIX*/
178 /***********************************/
180 #if !defined(APPL_WITH_SIM_POSIX) && \
181 defined(APPL_RUN_AT_FAST_SFI)
182 extern void (*timer0_isr_appl_call)(void);
184 #ifdef APPL_RUN_AT_SLOW_SFI
185 long appl_run_fast_sfi_usec = 1000000 / SYS_TIMER_HZ;
186 long appl_run_slow_sfi_usec = APPL_SLOW_SFI_USEC;
187 long appl_run_fast2slow_sfi_accum;
188 #endif /*APPL_RUN_AT_SLOW_SFI*/
190 void appl_run_at_fast_sfi(void)
192 APPL_RUN_AT_FAST_SFI;
193 #if defined(SLOW_SFI_INVOKE_IRQn) && defined(APPL_RUN_AT_SLOW_SFI)
195 appl_run_fast2slow_sfi_accum += appl_run_fast_sfi_usec;
197 if (appl_run_fast2slow_sfi_accum >= appl_run_slow_sfi_usec)
199 appl_run_fast2slow_sfi_accum -= appl_run_slow_sfi_usec;
200 NVIC->STIR = SLOW_SFI_INVOKE_IRQn;
203 #endif /*SLOW_SFI_INVOKE_IRQn*/
206 int appl_run_at_fast_sfi_setup(void)
208 timer0_isr_appl_call = appl_run_at_fast_sfi;
212 #else /*APPL_WITH_SIM_POSIX APPL_RUN_AT_FAST_SFI */
213 int appl_run_at_fast_sfi_setup(void)
217 #endif /*APPL_WITH_SIM_POSIX APPL_RUN_AT_FAST_SFI */
219 /***********************************/
221 #if !defined(APPL_WITH_SIM_POSIX) && \
222 defined(APPL_RUN_AT_SLOW_SFI)
224 IRQ_HANDLER_FNC(appl_run_at_slow_sfi_isr)
226 APPL_RUN_AT_SLOW_SFI;
229 int appl_run_at_slow_sfi_setup(void)
231 if (request_irq(SLOW_SFI_INVOKE_IRQn, appl_run_at_slow_sfi_isr,
232 0, "slow_sfi", NULL) < 0)
237 #else /* APPL_WITH_SIM_POSIX APPL_RUN_AT_SLOW_SFI */
239 int appl_run_at_slow_sfi_setup(void)
244 #endif /* APPL_WITH_SIM_POSIX APPL_RUN_AT_SLOW_SFI */
246 /***********************************/
249 UL_LOG_CUST(ulogd_main)
252 #define UL_LOGL_DEF UL_LOGL_MSG
254 #include "log_domains.inc"
256 static void register_logdomains(void)
258 ul_logreg_domains_static(ul_log_domains_array, sizeof(ul_log_domains_array) / sizeof(ul_log_domains_array[0]));
262 /***********************************/
267 #ifndef APPL_WITH_SIM_POSIX
269 /* Setup default interrupt priority into middle of the range */
270 for (i = 0; i < sizeof(NVIC->IP); i++)
273 #ifdef SLOW_SFI_INVOKE_IRQn
274 /* The lowes priority to IRQ invoking slow activities */
275 NVIC->IP[SLOW_SFI_INVOKE_IRQn] = 0xc0;
278 /* Higher priority for SPI to gradient valves */
279 NVIC->IP[SSP1_IRQn] = 0x40;
281 /* Start of the cam period */
282 NVIC->IP[MCPWM_IRQn] = 0x20;
284 /* The most critical - position compare events */
285 NVIC->IP[QEI_IRQn] = 0x00;
286 #endif /*APPL_WITH_SIM_POSIX*/
289 unsigned long bb_val;
290 bbconf_get_param(BBCONF_PTTAG_BBVER, &bb_val);
292 #ifdef UL_LOG_TO_STDOUT
293 ul_log_default_file = stdout;
295 register_logdomains();
297 printf(APP_VER_ID " initializing\n");
301 if (((void *)main >= (void *)SDRAM_BASE) &&
302 ((void *)main <= (void *)(SDRAM_BASE + SDRAM_SIZE)))
303 printf("running from SDRAM\n");
305 #endif /*SDRAM_BASE*/
308 /***********************************/
310 kvpb_block->base = (uint8_t *)KEYVAL_START;
311 kvpb_block->size = KEYVAL_PAGE_LEN;
312 kvpb_block->flags = KVPB_DESC_DOUBLE | KVPB_DESC_CHUNKWO;
313 kvpb_block->chunk_size = KVPB_CHUNK_SIZE;
314 kvpb_block->erase = lpcisp_kvpb_erase;
315 kvpb_block->copy = lpcisp_kvpb_copy;
316 kvpb_block->flush = lpcisp_kvpb_flush;
318 if (kvpb_check(kvpb_block, 1) < 0) sys_err();
320 if (kvpb_check(kvpb_block, 1) < 0) sys_err();
322 printf("Keyval ready\n");
324 /***********************************/
325 // set configuration for device
326 #ifdef APPL_WITH_ULAN
327 kvpb_get_key(kvpb_block, KVPB_KEYID_ULAN_ADDR, 1, &uaddr);
328 kvpb_get_key(kvpb_block, KVPB_KEYID_ULAN_SN, 4, &usn);
329 #endif /*APPL_WITH_ULAN*/
331 // kvpb_get_key(kvpb_block,KVPB_KEYID_APPL_PARAM,sizeof(appl_param_t),&appl_param);
333 printf("Keyval variables read\n");
334 #endif /*CONFIG_KEYVAL*/
336 /***********************************/
340 #ifdef APPL_WITH_ULAN
341 /***********************************/
343 // uld_printk_flush();
344 ul_fd = ul_open(NULL, NULL);
346 if (ul_fd == UL_FD_INVALID) sys_err();
348 ul_fd1 = ul_open(NULL, NULL);
350 if (ul_fd1 == UL_FD_INVALID) sys_err();
352 ul_setidstr(ul_fd, ul_idstr);
353 #ifdef APPL_WITH_UL_FD4TIMEPROG
354 ul_fd4timeprog = ul_open(NULL, NULL);
356 if (ul_fd4timeprog == UL_FD_INVALID) sys_err();
358 #endif /*APPL_WITH_UL_FD4TIMEPROG*/
360 printf("uLAN open\n");
362 ul_setmyadr(ul_fd, uaddr);
363 printf("Setting address %d\n", uaddr);
368 //ul_addfilt(ul_fd,&umsginfo);
370 #ifndef APPL_WITH_SIM_POSIX
372 #endif /*APPL_WITH_SIM_POSIX*/
376 umsginfo.flg = UL_BFL_SND;
377 //ul_newmsg(ul_fd,&umsginfo);
380 /***********************************/
381 #ifdef CONFIG_ULAN_DY
383 uldy_init(ul_dyac, ul_fd, ul_save_sn, ul_save_adr, (char *)ul_idstr, usn);
385 memset(&umsginfo, 0, sizeof(umsginfo));
386 umsginfo.cmd = UL_CMD_NCS;
387 ul_addfilt(ul_fd, &umsginfo);
389 ul_opdata_add_iac(ul_fd, UL_CMD_GST, UL_IAC_OP_SND, ul_iac_call_gst, ul_dyac_gst_reply, sizeof(ul_dyac_gst_reply), 0, ul_dyac);
391 printf("uLAN dynamic adressing initialized\n");
392 #endif /*CONFIG_ULAN_DY*/
394 /***********************************/
395 // uLan object interface init
396 uloi_con_ulan_set_cmd_fd(coninfo, UL_CMD_OISV, ul_fd, ul_fd1);
398 memset(&umsginfo, 0, sizeof(umsginfo));
399 umsginfo.cmd = UL_CMD_OISV;
400 ul_addfilt(uloi_con_ulan_rdfd(coninfo), &umsginfo);
401 #endif /*APPL_WITH_ULAN*/
402 /***********************************/
403 // DINFO and other persistent data
404 #ifdef APPL_WITH_DISTORE_EEPROM_USER
406 #endif /* APPL_WITH_DISTORE_EEPROM_USER */
408 /***********************************/
411 #ifdef CONFIG_OC_MWENGINE
412 #ifdef CONFIG_OC_SPI_DRV_SYSLESS
413 check_spi_kbd_presence();
414 #endif /*CONFIG_OC_SPI_DRV_SYSLESS*/
416 printf("gui_init ret %d\n", i);
417 #endif /*CONFIG_OC_MWENGINE*/
419 /***********************************/
420 // USB initialization
423 usb_app_fill_serial_number(usn);
428 printf("usb_app_init\n");
431 #endif /*APPL_WITH_USB*/
433 /***********************************/
434 // LCP engine initialization
436 #ifndef APPL_WITH_SIM_POSIX
438 #ifdef APPL_WITH_AUX_IO
440 #endif /*APPL_WITH_AUX_IO*/
441 #endif /*APPL_WITH_SIM_POSIX*/
443 #ifdef APPL_WITH_DISTORE_KEYVAL_SERVICE
444 setup_distore_restore();
445 #endif /*APPL_WITH_DISTORE_KEYVAL_SERVICE*/
447 #ifdef APPL_WITH_DISTORE_EEPROM_USER
448 appl_distore_user_restore();
449 #endif /* APPL_WITH_DISTORE_EEPROM_USER */
451 #ifdef APPL_WITH_TIMEPROG_EEPROM_STORE
452 appl_timeprog_eeprom_restore();
453 #endif /*APPL_WITH_TIMEPROG_EEPROM_STORE*/
459 fpga_reconfiguaration_initiated = pxmc_done;
460 fpga_reconfiguaration_finished = pxmc_initialize;
461 printf("setup pxmc_initialize hook for FPGA\n");
462 #endif /*CONFIG_PXMC*/
464 appl_run_at_slow_sfi_setup();
465 appl_run_at_fast_sfi_setup();
467 #ifdef APPL_WITH_AUX_IO
468 aux_out_set_init_val();
469 #endif /*APPL_WITH_AUX_IO*/
471 /***********************************/
472 // Main application loop
475 /***********************************/
476 // Greace finalization of application to check memory leakage
477 #ifdef APPL_WITH_FINALIZATION_CHECK
479 #ifdef CONFIG_OC_MWENGINE
481 #endif /*CONFIG_OC_MWENGINE*/
483 #endif /*APPL_WITH_FINALIZATION_CHECK*/