void mntinit(int argc, char **argv) { int tries; config = "config"; starttime = time(0); clog("nfs mount server init, starttime = %lud\n", starttime); tries = 0; ARGBEGIN{ case 'a': ++tries; srvinit(-1, 0, EARGF(usage())); break; case 'c': config = EARGF(usage()); break; case 'f': ++tries; srvinit(-1, EARGF(usage()), 0); break; case 'n': ++noauth; break; case 's': ++tries; srvinit(1, 0, 0); break; case 'T': staletime = atoi(EARGF(usage())); break; default: if(argopt(ARGC()) < 0) sysfatal("usage: %s %s [-ns] [-a dialstring] " "[-c uidmap] [-f srvfile] [-T staletime]", argv0, commonopts); break; }ARGEND noauth=1; /* ZZZ */ if(tries == 0 && head == 0) srvinit(-1, 0, "tcp!fs"); if(head == 0) panic("can't initialize services"); readunixidmaps(config); }
void main(void) { uint32 nrftx = 0, nrxuf = 0; int i = 0; static __xdata Rcall c; uint8 state = Idle; uint8 waitflag = 0, clearflag = 0; uint8 laststate, lastflag, lastMARCSTATE; laststate = state; lastflag = flag; lastMARCSTATE = MARCSTATE; memset(&curcall, 0, sizeof curcall); SLEEP &= ~SLEEP_OSC_PD; await(SLEEP & SLEEP_XOSC_S); CLKCON = (CLKCON & ~(CLKCON_CLKSPD | CLKCON_OSC)) | CLKSPD_DIV_1; await(!(CLKCON & CLKCON_OSC)); SLEEP |= SLEEP_OSC_PD; await(SLEEP & SLEEP_XOSC_S); P1DIR |= LEDBITS; printinit(); srvinit(); rfinit(); GREEN = RED = 0; // Enables interrupts. (Go go go) EA = 1; wdinit(); dprint("pingrf started.\n"); srvrx(); for(;;){ wdreset(); if(flag&Fpanic){ GREEN = 0; RED = 0; for(;;){ RED ^= 1; sleep(1000); /* TODO: reset */ } } if((flag&clearflag) != 0) flag &= ~(flag&clearflag); switch(state){ case Idle: if(peekcall()->type == Nop) break; nextcall(&c); waitflag = clearflag = 0; call(&c, &state, &waitflag, &clearflag); break; case Reply: reply(&c); state = Replying; break; case Replying: if(flag&Ftxcall){ flag &= ~Ftxcall; state = Idle; } // GREEN=1; break; default: if((flag&waitflag) != 0){ waitflag = flag&waitflag; flag &= ~waitflag; call(&c, &state, &waitflag, &clearflag); } /* if((flag&waitflag)==waitflag){ flag &= ~waitflag; call(&c, &state, &waitflag, &clearflag); } */ break; } #ifdef DEBUG if((i++%100000 == 0) || (flag != lastflag || state != laststate | lastMARCSTATE != MARCSTATE)){ //__critical { wdreset(); switch(state){ case Idle: dprint("idle"); break; case Replying: case Reply: dprint("replying %d", c.type); break; default: dprint("handling(%d) %d", state, c.type);; break; } lastflag = flag; laststate = state; lastMARCSTATE = MARCSTATE; dprint(" flag="); printflag(flag); dprint(" waitflag="); printflag(waitflag); dprint(" radio=%s\n", strmarcstate(lastMARCSTATE)); // dprint(" flag=%F waitflag=%F radio=%S\n", flag, waitflag, lastMARCSTATE); // // putchar('.'); // putchar('\n'); //} } #endif } }