diff options
author | Fritz Elfert <felfert@to.com> | 2002-03-16 23:10:52 +0000 |
---|---|---|
committer | Fritz Elfert <felfert@to.com> | 2002-03-16 23:10:52 +0000 |
commit | 193af441a127a0daabbd17c512e34817ddbcadfd (patch) | |
tree | deef4cbfdf258ae3c7d8cde2b43a611520f73632 /lib | |
parent | 7121719ec7f473c3d26873d688179a7d7f466026 (diff) | |
download | plptools-193af441a127a0daabbd17c512e34817ddbcadfd.tar.gz plptools-193af441a127a0daabbd17c512e34817ddbcadfd.tar.bz2 plptools-193af441a127a0daabbd17c512e34817ddbcadfd.zip |
- ncpd now works with both Series 3 and Series 5
- ncpd now has autobaud feature (default on), which cycles baudrate
- lib: added getSpeed() for retrieving current speed of connection
- plpftp: Use getSpeed()
- plpbackup: Ongoing work
- configure stuff: removed several entries from acconfig.h comments now
defined as 3rd arg to AC_DEFINE...
Diffstat (limited to 'lib')
-rw-r--r-- | lib/rfsv.cc | 16 | ||||
-rw-r--r-- | lib/rfsv.h | 7 | ||||
-rw-r--r-- | lib/rfsv16.cc | 19 | ||||
-rw-r--r-- | lib/rpcs.h | 4 | ||||
-rw-r--r-- | lib/rpcs32.cc | 28 | ||||
-rw-r--r-- | lib/rpcs32.h | 4 |
6 files changed, 66 insertions, 12 deletions
diff --git a/lib/rfsv.cc b/lib/rfsv.cc index 25bf91c..310d7c4 100644 --- a/lib/rfsv.cc +++ b/lib/rfsv.cc @@ -167,6 +167,22 @@ attr2String(const u_int32_t attr) return tmp; } +int rfsv:: +getSpeed() +{ + bufferStore a; + a.addStringT("NCP$GSPD"); + if (!skt->sendBufferStore(a)) + return -1; + if (skt->getBufferStore(a) != 1) + return -1; + if (a.getLen() != 5) + return -1; + if (a.getByte(0) != E_PSI_GEN_NONE) + return -1; + return a.getDWord(1); +} + /* * Local variables: * c-basic-offset: 4 @@ -600,6 +600,13 @@ public: */ static string convertSlash(const string &name); + /** + * Retrieve speed of serial link. + * + * @returns The speed of the serial link in baud or -1 on error. + */ + int getSpeed(); + protected: /** * Retrieves the PLP protocol name. Mainly internal use. diff --git a/lib/rfsv16.cc b/lib/rfsv16.cc index 2474060..773a5c1 100644 --- a/lib/rfsv16.cc +++ b/lib/rfsv16.cc @@ -222,10 +222,21 @@ fgetmtime(const char * const name, PsiTime &mtime) Enum<rfsv::errs> rfsv16:: fsetmtime(const char *name, PsiTime mtime) { - cerr << "rfsv16::fsetmtime ***" << endl; - // I don't think there's a protocol frame that allows us to set the - // modification time. SFDATE allows setting of creation time... - return E_PSI_NOT_SIBO; + // According to Alexander's protocol doc, SFDATE sets the modification + // time - and as far as I can see SIBO only keeps a modification + // time. So call SFDATE here. + bufferStore a; + string realName = convertSlash(name); + a.addDWord(mtime.getTime()); + a.addStringT(realName.c_str()); + // and this needs sending in the length word. + if (!sendCommand(SFDATE, a)) + return E_PSI_FILE_DISC; + + Enum<rfsv::errs> res = getResponse(a); + if (res != E_PSI_GEN_NONE) + cerr << "fsetmtime: Error " << res << " on file " << name << endl; + return res; } Enum<rfsv::errs> rfsv16:: @@ -338,8 +338,8 @@ public: */ virtual Enum<rfsv::errs> getMachineInfo(machineInfo &) { return rfsv::E_PSI_NOT_SIBO;} virtual Enum<rfsv::errs> closeHandle(int) { return rfsv::E_PSI_NOT_SIBO;} - virtual Enum<rfsv::errs> regOpenIter(void) { return rfsv::E_PSI_NOT_SIBO;} - virtual Enum<rfsv::errs> regReadIter(void) { return rfsv::E_PSI_NOT_SIBO;} + virtual Enum<rfsv::errs> regOpenIter(u_int32_t, char *, u_int16_t &) { return rfsv::E_PSI_NOT_SIBO;} + virtual Enum<rfsv::errs> regReadIter(u_int16_t) { return rfsv::E_PSI_NOT_SIBO;} virtual Enum<rfsv::errs> regWrite(void) { return rfsv::E_PSI_NOT_SIBO;} virtual Enum<rfsv::errs> regRead(void) { return rfsv::E_PSI_NOT_SIBO;} virtual Enum<rfsv::errs> regDelete(void) { return rfsv::E_PSI_NOT_SIBO;} diff --git a/lib/rpcs32.cc b/lib/rpcs32.cc index 38d7933..ebb4f9c 100644 --- a/lib/rpcs32.cc +++ b/lib/rpcs32.cc @@ -169,18 +169,38 @@ getMachineInfo(machineInfo &mi) static unsigned long hhh; Enum<rfsv::errs> rpcs32:: -regOpenIter(void) +regOpenIter(u_int32_t uid, char *match, u_int16_t &handle) { bufferStore a; Enum<rfsv::errs> res; - a.addStringT("HKLM\\"); + cout << "Oiter" << endl; + a.addDWord(uid); + a.addDWord(strlen(match)); + a.addStringT(match); if (!sendCommand(rpcs::REG_OPEN_ITER, a)) return rfsv::E_PSI_FILE_DISC; res = getResponse(a, true); cout << "ro: r=" << res << " a=" << a << endl; - if (a.getLen() > 0) - hhh = a.getDWord(0); + if (a.getLen() == 2) + handle = a.getWord(0); + return rfsv::E_PSI_GEN_NONE; +} + +Enum<rfsv::errs> rpcs32:: +regReadIter(u_int16_t handle) +{ + bufferStore a; + Enum<rfsv::errs> res; + + cout << "Riter" << endl; + a.addWord(handle); + if (!sendCommand(rpcs::REG_READ_ITER, a)) + return rfsv::E_PSI_FILE_DISC; + res = getResponse(a, true); + cout << "ro: r=" << res << " a=" << a << endl; + if ((a.getLen() == 3) && (a.getByte(2) == 0xff)) + return rfsv::E_PSI_FILE_EOF; return rfsv::E_PSI_GEN_NONE; } diff --git a/lib/rpcs32.h b/lib/rpcs32.h index 0256b66..70644da 100644 --- a/lib/rpcs32.h +++ b/lib/rpcs32.h @@ -48,9 +48,9 @@ class rpcs32 : public rpcs { #if 0 Enum<rfsv::errs> closeHandle(int); #endif - Enum<rfsv::errs> regOpenIter(void); + Enum<rfsv::errs> regOpenIter(u_int32_t uid, char *match, u_int16_t &handle); + Enum<rfsv::errs> regReadIter(u_int16_t handle); #if 0 - Enum<rfsv::errs> regReadIter(void); Enum<rfsv::errs> regWrite(void); Enum<rfsv::errs> regRead(void); Enum<rfsv::errs> regDelete(void); |