1 #include <system_def.h>
6 #include "appl_version.h"
9 #ifdef CONFIG_OC_MTD_DRV_SYSLESS
10 #include <mtd_spi_drv.h>
13 #ifndef APPL_WITH_SIM_POSIX
14 #include <hal_machperiph.h>
15 #endif /*APPL_WITH_SIM_POSIX*/
19 #include <keyval_id.h>
20 #include <keyval_loc.h>
21 #include <lpciap_kvpb.h>
22 #include <bbconf_info.h>
24 #endif /*CONFIG_KEYVAL*/
26 #ifdef CONFIG_OC_I2C_DRV_SYSLESS
28 extern i2c_drv_t i2c_drv;
31 #ifdef CONFIG_OC_SPI_DRV_SYSLESS
36 #include <ul_logreg.h>
38 #if defined(APPL_WITH_SUITK) && defined(OMK_FOR_TARGET)
39 #define UL_LOG_TO_STDOUT
40 extern FILE *ul_log_default_file;
43 /***********************************/
46 kvpb_block_t kvpb_block_global;
47 kvpb_block_t *kvpb_block = &kvpb_block_global;
48 #endif /*CONFIG_KEYVAL*/
51 uloi_con_ulan_t uloi_con_ulan_global;
52 uloi_coninfo_t *coninfo = &uloi_con_ulan_global.con;
55 UL_DYAC_VAR_LOC ul_dyac_t ul_dyac_global;
56 ul_dyac_t *ul_dyac = &ul_dyac_global;
57 char ul_dyac_gst_reply[4 + 2];
58 #endif /*CONFIG_ULAN_DY*/
61 ul_fd_t ul_fd, ul_fd1;
65 #ifdef APPL_WITH_UL_FD4TIMEPROG
66 ul_fd_t ul_fd4timeprog;
68 #endif /*APPL_WITH_ULAN*/
70 #ifdef CONFIG_OC_MTD_DRV_SYSLESS
71 struct mtd_spi_state_t mtd_spi_state = {
77 uint32_t usn; /* uLAN/USB device serial number */
79 int usb_enable_flag = 1;
81 LT_TIMER_IMP(lt_10msec)
83 /***********************************/
84 /* alternative memory reservation for framebuffer and uLan*/
85 #ifndef APPL_WITH_SIM_POSIX
86 void *(* const gr_driver_reserve_ram)(size_t size) =
89 void *(* const ul_drv_reserve_ram)(size_t size) =
92 void *(* const timeprog_reserve_ram)(size_t size) =
95 void *(* const appl_distore_reserve_ram)(size_t size) =
97 #endif /*APPL_WITH_SIM_POSIX*/
99 /***********************************/
102 printf("System error at %p\n", __builtin_return_address(0));
107 /***********************************/
108 char ul_save_sn(uint32_t usn)
111 kvpb_set_key(kvpb_block, KVPB_KEYID_ULAN_SN, 4, &usn);
112 #endif /*CONFIG_KEYVAL*/
116 /***********************************/
117 char ul_save_adr(uint8_t uaddr)
120 kvpb_set_key(kvpb_block, KVPB_KEYID_ULAN_ADDR, 1, &uaddr);
121 #endif /*CONFIG_KEYVAL*/
127 // kvpb_set_key(kvpb_block,KVPB_KEYID_APPL_PARAM,sizeof(appl_param_t),&appl_param);
130 /***********************************/
131 #ifdef CONFIG_OC_SPI_DRV_SYSLESS
132 // received data bits 28..31 KBD variant (1)
135 // send data bits 12..15 LED indicators
136 // bits 0.. 7 LED indicators
137 // bit 10 backlight full
138 // bit 11 backlight medium
140 // bit 9 tone freq select
141 // LEDs RUN 0, HOLD 1, PURGE 2, ERROR 3, A 5, B 6, C 7
143 // Keys '1'-'9' 1-9, '.' 10, '0' 11, ENTER 12, STOP 13, START 14,
144 // down 15, right 16, up 17, lesft 18, ESC 19, P/M 20,
145 // D 21, C 22, B 23, A 24, MENU 25
146 int check_spi_kbd_presence()
149 uint8_t tx_buff[4] = {0x00, 0x00, 0x09, 0x55};
151 spi_drv_t *spi_drv = spi_find_drv(NULL, 0);
156 res = spi_transfer(spi_drv, 4, 4, tx_buff, rx_buff);
161 printf("kbd_presence %02x %02x %02x %02x\n",
162 rx_buff[0], rx_buff[1], rx_buff[2], rx_buff[3]);
166 #endif /*CONFIG_OC_SPI_DRV_SYSLESS*/
168 /***********************************/
170 #ifndef APPL_WITH_SIM_POSIX
171 #include <hal_gpio.h>
174 hal_pin_conf(ADC0_PIN);
175 hal_pin_conf(ADC1_PIN);
176 hal_pin_conf(ADC2_PIN);
177 hal_pin_conf(ADC3_PIN);
178 hal_pin_conf(ADC7_PIN);
180 LPC_SC->PCONP |= (1 << 12); /*PCADC*/
182 LPC_ADC->CR = (1 << 21); /*PDN*/
184 LPC_ADC->CR |= 0x8F; /*SEL selsect channels 0 to 3 and 7*/
185 LPC_ADC->CR |= (9 << 8); /*CLKDIV*/
186 LPC_ADC->CR |= (1 << 16); /*BURST start burst mode*/
190 #endif /*APPL_WITH_SIM_POSIX*/
192 /***********************************/
194 #if !defined(APPL_WITH_SIM_POSIX) && \
195 defined(APPL_RUN_AT_FAST_SFI)
196 extern void (*timer0_isr_appl_call)(void);
198 #ifdef APPL_RUN_AT_SLOW_SFI
199 long appl_run_fast_sfi_usec = 1000000 / SYS_TIMER_HZ;
200 long appl_run_slow_sfi_usec = APPL_SLOW_SFI_USEC;
201 long appl_run_fast2slow_sfi_accum;
202 #endif /*APPL_RUN_AT_SLOW_SFI*/
204 void appl_run_at_fast_sfi(void)
206 APPL_RUN_AT_FAST_SFI;
207 #if defined(SLOW_SFI_INVOKE_IRQn) && defined(APPL_RUN_AT_SLOW_SFI)
209 appl_run_fast2slow_sfi_accum += appl_run_fast_sfi_usec;
211 if (appl_run_fast2slow_sfi_accum >= appl_run_slow_sfi_usec)
213 appl_run_fast2slow_sfi_accum -= appl_run_slow_sfi_usec;
214 NVIC->STIR = SLOW_SFI_INVOKE_IRQn;
217 #endif /*SLOW_SFI_INVOKE_IRQn*/
220 int appl_run_at_fast_sfi_setup(void)
222 timer0_isr_appl_call = appl_run_at_fast_sfi;
226 #else /*APPL_WITH_SIM_POSIX APPL_RUN_AT_FAST_SFI */
227 int appl_run_at_fast_sfi_setup(void)
231 #endif /*APPL_WITH_SIM_POSIX APPL_RUN_AT_FAST_SFI */
233 /***********************************/
235 #if !defined(APPL_WITH_SIM_POSIX) && \
236 defined(APPL_RUN_AT_SLOW_SFI)
238 IRQ_HANDLER_FNC(appl_run_at_slow_sfi_isr)
240 APPL_RUN_AT_SLOW_SFI;
243 int appl_run_at_slow_sfi_setup(void)
245 if (request_irq(SLOW_SFI_INVOKE_IRQn, appl_run_at_slow_sfi_isr,
246 0, "slow_sfi", NULL) < 0)
251 #else /* APPL_WITH_SIM_POSIX APPL_RUN_AT_SLOW_SFI */
253 int appl_run_at_slow_sfi_setup(void)
258 #endif /* APPL_WITH_SIM_POSIX APPL_RUN_AT_SLOW_SFI */
260 /***********************************/
263 UL_LOG_CUST(ulogd_main)
266 #define UL_LOGL_DEF UL_LOGL_MSG
268 #include "log_domains.inc"
270 static void register_logdomains(void)
272 ul_logreg_domains_static(ul_log_domains_array, sizeof(ul_log_domains_array) / sizeof(ul_log_domains_array[0]));
276 /***********************************/
281 #ifndef APPL_WITH_SIM_POSIX
283 /* Setup default interrupt priority into middle of the range */
284 for (i = 0; i < sizeof(NVIC->IP); i++)
287 #ifdef SLOW_SFI_INVOKE_IRQn
288 /* The lowes priority to IRQ invoking slow activities */
289 NVIC->IP[SLOW_SFI_INVOKE_IRQn] = 0xc0;
292 /* Higher priority for SPI to gradient valves */
293 NVIC->IP[SSP1_IRQn] = 0x40;
295 /* LXPWR master receive interrupt (deadline under 50 usec) */
296 NVIC->IP[TIMER2_IRQn] = 0x30;
298 /* Start of the cam period */
299 NVIC->IP[MCPWM_IRQn] = 0x20;
301 /* The most critical - position compare events */
302 NVIC->IP[QEI_IRQn] = 0x00;
303 #endif /*APPL_WITH_SIM_POSIX*/
306 unsigned long bb_val;
307 bbconf_get_param(BBCONF_PTTAG_BBVER, &bb_val);
309 #ifdef UL_LOG_TO_STDOUT
310 ul_log_default_file = stdout;
312 register_logdomains();
314 printf(APP_VER_ID " initializing\n");
318 if (((void *)main >= (void *)SDRAM_BASE) &&
319 ((void *)main <= (void *)(SDRAM_BASE + SDRAM_SIZE)))
320 printf("running from SDRAM\n");
322 #endif /*SDRAM_BASE*/
325 /***********************************/
327 kvpb_block->base = (uint8_t *)KEYVAL_START;
328 kvpb_block->size = KEYVAL_PAGE_LEN;
329 kvpb_block->flags = KVPB_DESC_DOUBLE | KVPB_DESC_CHUNKWO;
330 kvpb_block->chunk_size = KVPB_CHUNK_SIZE;
331 kvpb_block->erase = lpcisp_kvpb_erase;
332 kvpb_block->copy = lpcisp_kvpb_copy;
333 kvpb_block->flush = lpcisp_kvpb_flush;
335 if (kvpb_check(kvpb_block, 1) < 0) sys_err();
337 if (kvpb_check(kvpb_block, 1) < 0) sys_err();
339 printf("Keyval ready\n");
341 /***********************************/
342 // set configuration for device
343 #ifdef APPL_WITH_ULAN
344 kvpb_get_key(kvpb_block, KVPB_KEYID_ULAN_ADDR, 1, &uaddr);
345 kvpb_get_key(kvpb_block, KVPB_KEYID_ULAN_SN, 4, &usn);
346 #endif /*APPL_WITH_ULAN*/
348 // kvpb_get_key(kvpb_block,KVPB_KEYID_APPL_PARAM,sizeof(appl_param_t),&appl_param);
350 printf("Keyval variables read\n");
351 #endif /*CONFIG_KEYVAL*/
353 /***********************************/
357 #ifdef APPL_WITH_ULAN
358 /***********************************/
360 // uld_printk_flush();
361 ul_fd = ul_open(NULL, NULL);
363 if (ul_fd == UL_FD_INVALID) sys_err();
365 ul_fd1 = ul_open(NULL, NULL);
367 if (ul_fd1 == UL_FD_INVALID) sys_err();
369 ul_setidstr(ul_fd, ul_idstr);
370 #ifdef APPL_WITH_UL_FD4TIMEPROG
371 ul_fd4timeprog = ul_open(NULL, NULL);
373 if (ul_fd4timeprog == UL_FD_INVALID) sys_err();
375 #endif /*APPL_WITH_UL_FD4TIMEPROG*/
377 printf("uLAN open\n");
379 ul_setmyadr(ul_fd, uaddr);
380 printf("Setting address %d\n", uaddr);
385 //ul_addfilt(ul_fd,&umsginfo);
387 #ifndef APPL_WITH_SIM_POSIX
389 #endif /*APPL_WITH_SIM_POSIX*/
393 umsginfo.flg = UL_BFL_SND;
394 //ul_newmsg(ul_fd,&umsginfo);
397 /***********************************/
398 #ifdef CONFIG_ULAN_DY
400 uldy_init(ul_dyac, ul_fd, ul_save_sn, ul_save_adr, (char *)ul_idstr, usn);
402 memset(&umsginfo, 0, sizeof(umsginfo));
403 umsginfo.cmd = UL_CMD_NCS;
404 ul_addfilt(ul_fd, &umsginfo);
406 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);
408 printf("uLAN dynamic adressing initialized\n");
409 #endif /*CONFIG_ULAN_DY*/
411 /***********************************/
412 // uLan object interface init
413 uloi_con_ulan_set_cmd_fd(coninfo, UL_CMD_OISV, ul_fd, ul_fd1);
415 memset(&umsginfo, 0, sizeof(umsginfo));
416 umsginfo.cmd = UL_CMD_OISV;
417 ul_addfilt(uloi_con_ulan_rdfd(coninfo), &umsginfo);
418 #endif /*APPL_WITH_ULAN*/
419 /***********************************/
420 // DINFO and other persistent data
421 #ifdef APPL_WITH_DISTORE_EEPROM_USER
423 #endif /* APPL_WITH_DISTORE_EEPROM_USER */
425 /***********************************/
426 // SPI connected FLASH
427 #ifdef CONFIG_OC_MTD_DRV_SYSLESS
428 mtd_spi_state.spi_drv = spi_find_drv(NULL, 0);
431 /***********************************/
434 #ifdef CONFIG_OC_MWENGINE
435 #ifdef CONFIG_OC_SPI_DRV_SYSLESS
436 check_spi_kbd_presence();
437 #endif /*CONFIG_OC_SPI_DRV_SYSLESS*/
439 printf("gui_init ret %d\n", i);
440 #endif /*CONFIG_OC_MWENGINE*/
442 /***********************************/
443 // USB initialization
446 usb_app_fill_serial_number(usn);
451 printf("usb_app_init\n");
454 #endif /*APPL_WITH_USB*/
456 /***********************************/
457 // LCP engine initialization
459 #ifndef APPL_WITH_SIM_POSIX
461 #ifdef APPL_WITH_AUX_IO
463 #endif /*APPL_WITH_AUX_IO*/
464 #endif /*APPL_WITH_SIM_POSIX*/
466 #ifdef APPL_WITH_DISTORE_KEYVAL_SERVICE
467 setup_distore_restore();
468 #endif /*APPL_WITH_DISTORE_KEYVAL_SERVICE*/
470 #ifdef APPL_WITH_DISTORE_EEPROM_USER
471 appl_distore_user_restore();
472 #endif /* APPL_WITH_DISTORE_EEPROM_USER */
474 #ifdef APPL_WITH_TIMEPROG_EEPROM_STORE
475 appl_timeprog_eeprom_restore();
476 #endif /*APPL_WITH_TIMEPROG_EEPROM_STORE*/
482 fpga_reconfiguaration_initiated = pxmc_done;
483 fpga_reconfiguaration_finished = pxmc_initialize;
484 printf("setup pxmc_initialize hook for FPGA\n");
485 #endif /*CONFIG_PXMC*/
487 appl_run_at_slow_sfi_setup();
488 appl_run_at_fast_sfi_setup();
490 #ifdef APPL_WITH_AUX_IO
491 aux_out_set_init_val();
492 #endif /*APPL_WITH_AUX_IO*/
494 /***********************************/
495 // Main application loop
498 /***********************************/
499 // Greace finalization of application to check memory leakage
500 #ifdef APPL_WITH_FINALIZATION_CHECK
502 #ifdef CONFIG_OC_MWENGINE
504 #endif /*CONFIG_OC_MWENGINE*/
506 #endif /*APPL_WITH_FINALIZATION_CHECK*/