int spw_open(int portnumber) { ER er; UW data; int asize; int dd; if(portnumber==1){ dd = tk_opn_dev((UB*)"spwa", TD_UPDATE); }else if(portnumber==2){ dd = tk_opn_dev((UB*)"spwb", TD_UPDATE); }else if(portnumber==3){ dd = tk_opn_dev((UB*)"spwc", TD_UPDATE); }else{ printf("open error : invalid port number\n"); return -1; } er = tk_srea_dev(dd, DN_SIGN, &data, sizeof(data), &asize); spw_set_read_timeout(dd,1000); spw_set_write_timeout(dd,1000); if (er == E_PAR) printf("E_PAR"); else { printf("fpga ver. = 0x%04x\n", (unsigned short)(0x0000ffff & data)); } return dd; }
int spwr_open(int portnum) { ER er; UW data; int asize; int dd; if(portnum==4){ dd = tk_opn_dev((UB*)"spwa", TD_UPDATE); }else if(portnum==5){ dd = tk_opn_dev((UB*)"spwb", TD_UPDATE); }else if(portnum==6){ dd = tk_opn_dev((UB*)"spwc", TD_UPDATE); }else{ printf("open error : invalid port number\n"); return -1; } if (dd < 0) { printf("open error (er=0x%8x)\n", dd); return dd; } /* Enable Timecode output to Port 1,2,3 */ data=0x0000000e; //enable timecode output to port 1,2,3 er = tk_swri_dev(dd, DN_TCODEEN, &data, sizeof(data), &asize); er = tk_srea_dev(dd, DN_SIGN, &data, sizeof(data), &asize); if (er == E_PAR) printf("E_PAR"); else { printf("fpga ver. = 0x%04x\n", (unsigned short)(0x0000ffff & data)); } return dd; }
METHOD System_led(Ctx *ctx, knh_sfp_t *sfp) { int v = p_int(sfp[1]); int ddl, asize; ddl = tk_opn_dev("led_test",TD_UPDATE); tk_swri_dev(ddl, DN_LEMode, &v, sizeof(v), &asize); KNH_RETURN_void(ctx, sfp); }
METHOD System_segLed(Ctx *ctx, knh_sfp_t *sfp) { int x = p_int(sfp[1]); int dd, asize; dd = tk_opn_dev("led", TD_UPDATE); tk_swri_dev(dd, DN_LEDEC, &x, sizeof(x), &asize); KNH_RETURN_void(ctx, sfp); }
/* initial setting at driver start up time */ LOCAL ER kpStartUp(void) { W w[L_DEVCONF_VAL]; W dd, n; ER er; RawEvt evt; T_CMBF cmbf; T_CFLG cflg; ID datatsk; void* name; union { FlgInStat stat; UW uw; } u; /* extract ID of the mailbox for event notification to KB/PD driver */ dd = er = tk_opn_dev(devkbpd, TD_READ); if (er >= E_OK) { er = tk_srea_dev(dd, DN_KPINPUT, (VB*)&EvtMbx, sizeof(EvtMbx), &n); tk_cls_dev(dd, 0); } if (er < E_OK) goto EEXIT1; /* KBID is extracted from DEVCONF parameter */ KbdId = (GetDevConf("KBTYPE", w) == 1) ? w[0] : KID_IBM_JP; /* input message buffer creation */ SetOBJNAME(cmbf.exinf, "lkbM"); cmbf.mbfatr = TA_TFIFO; cmbf.bufsz = sizeof(InMsg) * MAX_INMSG; cmbf.maxmsz = sizeof(InMsg); if ((er = tk_cre_mbf(&cmbf)) < E_OK) goto EEXIT1; InpMbf = er; /* creating the event flag for command */ SetOBJNAME(cflg.exinf, "lkbC"); cflg.flgatr = TA_WMUL; cflg.iflgptn = 0; if ((er = tk_cre_flg(&cflg)) < E_OK) goto EEXIT2; CmdFlg = (ID)er; /* create and start data processing task */ SetOBJNAME(name, "lkbD"); er = kpCreTask((W)name, kpDataTask); if (er < E_OK) goto EEXIT3; datatsk = (ID)er; /* create and start command processing task */ SetOBJNAME(name, "lkbC"); er = kpCreTask((W)name, kpCmdTask); if (er < E_OK) goto EEXIT4; CmdTsk = (ID)er; /* registering event flag for commands */ u.uw = 0; evt.f.stat = u.stat; evt.f.stat.cmd = INP_FLG; evt.f.stat.kb = 1; evt.f.stat.kbid = KbdId; evt.f.stat.reg = 1; evt.f.flgid = CmdFlg; if ((er = kpSendMsg(&evt)) < E_OK) goto EEXIT5; /* device initialization processing */ er = hwInit(DC_OPEN); if (er < E_OK) goto EEXIT5; return E_OK; EEXIT5: tk_ter_tsk(CmdTsk); tk_del_tsk(CmdTsk); EEXIT4: tk_ter_tsk(datatsk); tk_del_tsk(datatsk); EEXIT3: tk_del_flg(CmdFlg); EEXIT2: tk_del_mbf(InpMbf); EEXIT1: DP(("kpStartUp: err=%#x\n", er)); return er; }
/* Get from / Set to RTC */ LOCAL void rtc_get_set(SYSTIM *stm, BOOL set) { ID dd; W asz; ER er; DATE_TIM dt; struct tm ctm; struct tzinfo tz; /* open RTC (CLOCK) driver */ dd = tk_opn_dev("CLOCK", (set == TRUE) ? TD_WRITE : TD_READ); if (dd < E_OK) { P("Can't open CLOCK device [%#x]\n", dd); goto exit0; } /* Note: The RTC is set to UTC rather than local time. because UTC is not affected by time zone and daylight saving time. */ if (set == TRUE) { /* set date to RTC */ /* convert system time to UTC date/time */ dt_gmtime_ms(stm, &ctm); /* set local date/time to RTC */ dt.d_year = ctm.tm_year; dt.d_month = ctm.tm_mon + 1; dt.d_day = ctm.tm_mday; dt.d_hour = ctm.tm_hour; dt.d_min = ctm.tm_min; dt.d_sec = ctm.tm_sec; dt.d_wday = ctm.tm_wday; er = tk_swri_dev(dd, DN_CKDATETIME, &dt, sizeof(dt), &asz); if (er < E_OK) { P("Can't set CLOCK [%#x]\n", er); goto exit1; } } else { /* get date from RTC */ /* get timezone of "UTC+0" */ memset(&tz, 0, sizeof(tz)); er = dt_tzset(&tz, "UTC+0"); if (er < E_OK ) { P("dt_tzset(UTC+0) ERR [%#x]\n", er); goto exit1; } /* get UTC date/time from RTC */ er = tk_srea_dev(dd, DN_CKDATETIME, &dt, sizeof(dt), &asz); if (er < E_OK) { P("Can't get CLOCK [%#x]\n", er); goto exit1; } /* convert to system time */ ctm.tm_year = dt.d_year; ctm.tm_mon = dt.d_month - 1; ctm.tm_mday = dt.d_day; ctm.tm_hour = dt.d_hour; ctm.tm_min = dt.d_min; ctm.tm_sec = dt.d_sec; ctm.tm_wday = dt.d_wday; ctm.tm_usec = 0; ctm.tm_wday = -1; ctm.tm_isdst = 0; ctm.tm_yday = 0; dt_mktime_ms(&ctm, &tz, stm); } exit1: tk_cls_dev(dd, 0); exit0: return; }