plptools
Loading...
Searching...
No Matches
rfsv.h
Go to the documentation of this file.
1/*
2 * This file is part of plptools.
3 *
4 * Copyright (C) 1999 Philip Proudman <philip.proudman@btinternet.com>
5 * Copyright (C) 1999-2002 Fritz Elfert <felfert@to.com>
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License along
18 * along with this program; if not, see <https://www.gnu.org/licenses/>.
19 *
20 */
21#ifndef _RFSV_H_
22#define _RFSV_H_
23
24#include <deque>
25#include <string>
26
27#include "Enum.h"
28#include "plpdirent.h"
29#include "bufferstore.h"
30
31typedef std::deque<class PlpDirent> PlpDir;
32
33class TCPSocket;
34class PlpDrive;
35
36inline const int RFSV_SENDLEN = 2000;
37
42typedef int (*cpCallback_t)(void *, uint32_t);
43
44class rfsv16;
45class rfsv32;
46
54 friend class rfsv16;
55 friend class rfsv32;
56
57private:
58 uint32_t h;
60};
61
75class rfsv {
76public:
80 enum seek_mode {
83 PSI_SEEK_END = 3
84 };
85
92 PSI_O_RDWR = 0002
93 };
94
98 enum open_mode {
99 PSI_O_CREAT = 00100,
100 PSI_O_EXCL = 00200,
101 PSI_O_TRUNC = 01000,
103 PSI_O_SHARE = 04000
104 };
105
109 enum errs {
183
184 // Special error code for "Operation not permitted in RFSV16"
186 // Special error code for "internal library error"
187 E_PSI_INTERNAL = -201
188 };
189
195 PSI_A_RDONLY = 0x0001,
196 PSI_A_HIDDEN = 0x0002,
197 PSI_A_SYSTEM = 0x0004,
198 PSI_A_DIR = 0x0008,
200 PSI_A_VOLUME = 0x0020,
201
203 PSI_A_NORMAL = 0x0040,
204 PSI_A_TEMP = 0x0080,
206
208 PSI_A_READ = 0x0200,
209 PSI_A_EXEC = 0x0400,
210 PSI_A_STREAM = 0x0800,
211 PSI_A_TEXT = 0x1000
212 };
213
214 virtual ~rfsv();
215 void reset();
216 void reconnect();
217
224
236 virtual Enum<errs> fopen(const uint32_t attr, const char * const name, uint32_t &handle) = 0;
237
248 virtual Enum<errs> mktemp(uint32_t &handle, std::string &name) = 0;
249
261 virtual Enum<errs> fcreatefile(const uint32_t attr, const char * const name, uint32_t &handle) = 0;
262
274 virtual Enum<errs> freplacefile(const uint32_t attr, const char * const name, uint32_t &handle) = 0;
275
282 virtual Enum<errs> fclose(const uint32_t handle) = 0;
283
294 virtual Enum<errs> dir(const char * const name, PlpDir &ret) = 0;
295
304 virtual Enum<errs> fgetmtime(const char * const name, PsiTime &mtime) = 0;
305
314 virtual Enum<errs> fsetmtime(const char * const name, const PsiTime mtime) = 0;
315
324 virtual Enum<errs> fgetattr(const char * const name, uint32_t &attr) = 0;
325
345 virtual Enum<errs> pathtest(const char * const name) = 0;
346
355 virtual Enum<errs> fgeteattr(const char * const name, PlpDirent &e) =0;
356
360 virtual Enum<errs> fsetattr(const char * const name, const uint32_t seta, const uint32_t unseta) = 0;
361
370 virtual Enum<errs> dircount(const char * const name, uint32_t &count) = 0;
371
379 virtual Enum<errs> devlist(uint32_t &devbits) = 0;
380
392 virtual Enum<errs> devinfo(const char drive, PlpDrive &dinfo) = 0;
393
404 virtual Enum<errs> fread(const uint32_t handle, unsigned char * const buffer, const uint32_t len, uint32_t &count) = 0;
405
416 virtual Enum<errs> fwrite(const uint32_t handle, const unsigned char * const buffer, const uint32_t len, uint32_t &count) = 0;
417
431 virtual Enum<errs> copyFromPsion(const char *from, const char *to, void *, cpCallback_t func) = 0;
432
436 virtual Enum<rfsv::errs> copyFromPsion(const char *from, int fd, cpCallback_t cb) = 0;
437
451 virtual Enum<errs> copyToPsion(const char * const from, const char * const to, void *, cpCallback_t func) = 0;
452
469 virtual Enum<errs> copyOnPsion(const char * const from, const char * const to, void *, cpCallback_t func) = 0;
470
483 virtual Enum<errs> fsetsize(const uint32_t handle, const uint32_t size) = 0;
484
495 virtual Enum<errs> fseek(const uint32_t handle, const int32_t offset, const uint32_t mode, uint32_t &resultpos) = 0;
496
504 virtual Enum<errs> mkdir(const char * const name) = 0;
505
513 virtual Enum<errs> rmdir(const char * const name) = 0;
514
523 virtual Enum<errs> rename(const char * const oldname, const char * const newname) = 0;
524
532 virtual Enum<errs> remove(const char * const name) = 0;
533
544 virtual Enum<errs> opendir(const uint32_t attr, const char * const name, rfsvDirhandle &handle) = 0;
545
556 virtual Enum<errs> readdir(rfsvDirhandle &handle, PlpDirent &entry) = 0;
557
565 virtual Enum<errs> closedir(rfsvDirhandle &handle) = 0;
566
575 virtual Enum<errs> setVolumeName(const char drive, const char * const name) = 0;
576
605 std::string attr2String(const uint32_t attr);
606
616 virtual uint32_t opMode(const uint32_t mode) = 0;
617
621 static std::string convertSlash(const std::string &name);
622
628 int getSpeed();
629
635 virtual int getProtocolVersion() = 0;
636
637protected:
643 const char *getConnectName();
644
647 int32_t serNum;
648};
649
650#endif
Wrapper class featuring range-checking and string representation of enumerated values.
Definition: Enum.h:136
A class, representing a directory entry of the Psion.
Definition: plpdirent.h:78
A class representing information about a Disk drive on the psion.
Definition: plpdirent.h:196
Psion time related utility class.
Definition: psitime.h:125
A class for dealing with sockets.
Definition: tcpsocket.h:38
A generic container for an array of bytes.
Definition: bufferstore.h:37
This is the implementation of the rfsv protocol for Psion series 3 (SIBO) variant.
Definition: rfsv16.h:35
This is the implementation of the rfsv protocol for Psion series 5 (EPOC) variant.
Definition: rfsv32.h:37
A helper class for storing intermediate internal information in rfsv16 and rfsv32 .
Definition: rfsv.h:53
bufferStore b
Definition: rfsv.h:59
uint32_t h
Definition: rfsv.h:58
Access remote file services of a Psion.
Definition: rfsv.h:75
virtual Enum< errs > mkdir(const char *const name)=0
Creates a directory on the Psion.
virtual uint32_t opMode(const uint32_t mode)=0
Converts an open-mode (A combination of the PSI_O_ constants.) from generic representation to the mac...
virtual Enum< errs > copyToPsion(const char *const from, const char *const to, void *, cpCallback_t func)=0
Copies a file from local machine to the Psion.
virtual Enum< errs > opendir(const uint32_t attr, const char *const name, rfsvDirhandle &handle)=0
Open a directory for reading with readdir.
virtual Enum< errs > fgetattr(const char *const name, uint32_t &attr)=0
Retrieves attributes of a file on the Psion.
open_mode
The known modes for file creation.
Definition: rfsv.h:98
@ PSI_O_CREAT
Definition: rfsv.h:99
@ PSI_O_EXCL
Definition: rfsv.h:100
@ PSI_O_TRUNC
Definition: rfsv.h:101
@ PSI_O_SHARE
Definition: rfsv.h:103
@ PSI_O_APPEND
Definition: rfsv.h:102
Enum< errs > getStatus()
Retrieves the current connection status.
Definition: rfsv.cc:136
virtual Enum< errs > fwrite(const uint32_t handle, const unsigned char *const buffer, const uint32_t len, uint32_t &count)=0
Write to a file on the Psion.
virtual ~rfsv()
Definition: rfsv.cc:113
int getSpeed()
Retrieve speed of serial link.
Definition: rfsv.cc:173
virtual Enum< errs > copyOnPsion(const char *const from, const char *const to, void *, cpCallback_t func)=0
Copies a file from the Psion to the Psion.
const char * getConnectName()
Retrieves the PLP protocol name.
Definition: rfsv.cc:109
virtual Enum< errs > fsetattr(const char *const name, const uint32_t seta, const uint32_t unseta)=0
virtual Enum< errs > copyFromPsion(const char *from, const char *to, void *, cpCallback_t func)=0
Copies a file from the Psion to the local machine.
virtual Enum< errs > devlist(uint32_t &devbits)=0
Retrieves available drives on the Psion.
virtual Enum< rfsv::errs > copyFromPsion(const char *from, int fd, cpCallback_t cb)=0
Copies a file from the Psion to the local machine.
seek_mode
The kown modes for seek.
Definition: rfsv.h:80
@ PSI_SEEK_END
Definition: rfsv.h:83
@ PSI_SEEK_CUR
Definition: rfsv.h:82
@ PSI_SEEK_SET
Definition: rfsv.h:81
errs
The known error codes.
Definition: rfsv.h:109
@ E_PSI_FILE_ERASE
Definition: rfsv.h:170
@ E_PSI_GEN_LIB
Definition: rfsv.h:175
@ E_PSI_GEN_NSUP
Definition: rfsv.h:114
@ E_PSI_GEN_NONE
Definition: rfsv.h:110
@ E_PSI_NOT_SIBO
Definition: rfsv.h:185
@ E_PSI_FILE_PROTECT
Definition: rfsv.h:167
@ E_PSI_GEN_DIED
Definition: rfsv.h:181
@ E_PSI_GEN_IMAGE
Definition: rfsv.h:126
@ E_PSI_FILE_VOLUME
Definition: rfsv.h:149
@ E_PSI_GEN_START
Definition: rfsv.h:130
@ E_PSI_FILE_NXIST
Definition: rfsv.h:135
@ E_PSI_FILE_DEVICE
Definition: rfsv.h:143
@ E_PSI_FILE_INVALID
Definition: rfsv.h:171
@ E_PSI_GEN_RANGE
Definition: rfsv.h:117
@ E_PSI_FILE_PARITY
Definition: rfsv.h:157
@ E_PSI_GEN_NOFONT
Definition: rfsv.h:131
@ E_PSI_FILE_ACCESS
Definition: rfsv.h:141
@ E_PSI_FILE_TOOBIG
Definition: rfsv.h:173
@ E_PSI_FILE_RECORD
Definition: rfsv.h:145
@ E_PSI_FILE_UNKNOWN
Definition: rfsv.h:165
@ E_PSI_GEN_INUSE
Definition: rfsv.h:119
@ E_PSI_FILE_FRAME
Definition: rfsv.h:158
@ E_PSI_MDM_BLACKLIST
Definition: rfsv.h:163
@ E_PSI_FILE_EOF
Definition: rfsv.h:138
@ E_PSI_FILE_LINE
Definition: rfsv.h:155
@ E_PSI_FILE_PENDING
Definition: rfsv.h:148
@ E_PSI_FILE_NAME
Definition: rfsv.h:140
@ E_PSI_FILE_LOCKED
Definition: rfsv.h:142
@ E_PSI_FILE_HANDLE
Definition: rfsv.h:182
@ E_PSI_GEN_TOOMANY
Definition: rfsv.h:133
@ E_PSI_FILE_CANCEL
Definition: rfsv.h:150
@ E_PSI_FILE_WRITE
Definition: rfsv.h:136
@ E_PSI_GEN_OS
Definition: rfsv.h:113
@ E_PSI_FILE_EXIST
Definition: rfsv.h:134
@ E_PSI_FILE_READ
Definition: rfsv.h:137
@ E_PSI_GEN_TOOWIDE
Definition: rfsv.h:132
@ E_PSI_MDM_BUSY
Definition: rfsv.h:161
@ E_PSI_GEN_TERMINATED
Definition: rfsv.h:180
@ E_PSI_FILE_DIR
Definition: rfsv.h:144
@ E_PSI_GEN_UNDER
Definition: rfsv.h:115
@ E_PSI_FILE_COMPLETION
Definition: rfsv.h:178
@ E_PSI_GEN_BUSY
Definition: rfsv.h:179
@ E_PSI_GEN_NOTOPEN
Definition: rfsv.h:125
@ E_PSI_FILE_ALLOC
Definition: rfsv.h:151
@ E_PSI_FILE_RDONLY
Definition: rfsv.h:146
@ E_PSI_FILE_NOTREADY
Definition: rfsv.h:164
@ E_PSI_GEN_OPEN
Definition: rfsv.h:124
@ E_PSI_FILE_OVERRUN
Definition: rfsv.h:159
@ E_PSI_GEN_FSYS
Definition: rfsv.h:129
@ E_PSI_FILE_DRIVER
Definition: rfsv.h:177
@ E_PSI_GEN_DIVIDE
Definition: rfsv.h:118
@ E_PSI_FILE_DIRFULL
Definition: rfsv.h:166
@ E_PSI_GEN_DEVICE
Definition: rfsv.h:128
@ E_PSI_FILE_CORRUPT
Definition: rfsv.h:168
@ E_PSI_INTERNAL
Definition: rfsv.h:187
@ E_PSI_FILE_INACT
Definition: rfsv.h:156
@ E_PSI_GEN_FAIL
Definition: rfsv.h:111
@ E_PSI_GEN_NOPROC
Definition: rfsv.h:123
@ E_PSI_FILE_NDISC
Definition: rfsv.h:176
@ E_PSI_GEN_POWER
Definition: rfsv.h:172
@ E_PSI_FILE_FULL
Definition: rfsv.h:139
@ E_PSI_FILE_INV
Definition: rfsv.h:147
@ E_PSI_FILE_RETRAN
Definition: rfsv.h:154
@ E_PSI_FILE_CONNECT
Definition: rfsv.h:153
@ E_PSI_MDM_CONFAIL
Definition: rfsv.h:160
@ E_PSI_GEN_NOSEGMENTS
Definition: rfsv.h:121
@ E_PSI_GEN_OVER
Definition: rfsv.h:116
@ E_PSI_FILE_DISC
Definition: rfsv.h:152
@ E_PSI_GEN_RECEIVER
Definition: rfsv.h:127
@ E_PSI_GEN_ARG
Definition: rfsv.h:112
@ E_PSI_MDM_NOANS
Definition: rfsv.h:162
@ E_PSI_GEN_NOSEM
Definition: rfsv.h:122
@ E_PSI_GEN_NOMEMORY
Definition: rfsv.h:120
@ E_PSI_FILE_ABORT
Definition: rfsv.h:169
@ E_PSI_GEN_DESCR
Definition: rfsv.h:174
virtual Enum< errs > readdir(rfsvDirhandle &handle, PlpDirent &entry)=0
Read directory entries.
virtual Enum< errs > fsetmtime(const char *const name, const PsiTime mtime)=0
Sets the modification time of a file on the Psion.
open_flags
The known modes for file open.
Definition: rfsv.h:89
@ PSI_O_RDONLY
Definition: rfsv.h:90
@ PSI_O_WRONLY
Definition: rfsv.h:91
@ PSI_O_RDWR
Definition: rfsv.h:92
virtual Enum< errs > fclose(const uint32_t handle)=0
Close a file on the Psion whih was previously opened/created by using fopen , fcreatefile ,...
virtual Enum< errs > fsetsize(const uint32_t handle, const uint32_t size)=0
Resizes an open file on the Psion.
std::string attr2String(const uint32_t attr)
Converts a file attribute rfsv::file_attribs to human readable format, usable for showing them in dir...
Definition: rfsv.cc:150
virtual Enum< errs > setVolumeName(const char drive, const char *const name)=0
Set the name of a Psion Volume (Drive).
virtual Enum< errs > fseek(const uint32_t handle, const int32_t offset, const uint32_t mode, uint32_t &resultpos)=0
Sets the current file position of a file on the Psion.
file_attribs
The known file attributes.
Definition: rfsv.h:193
@ PSI_A_NORMAL
Attributes, valid on EPOC only.
Definition: rfsv.h:203
@ PSI_A_RDONLY
Attributes, valid on both EPOC and SIBO.
Definition: rfsv.h:195
@ PSI_A_COMPRESSED
Definition: rfsv.h:205
@ PSI_A_TEXT
Definition: rfsv.h:211
@ PSI_A_STREAM
Definition: rfsv.h:210
@ PSI_A_READ
Attributes, valid on SIBO only.
Definition: rfsv.h:208
@ PSI_A_ARCHIVE
Definition: rfsv.h:199
@ PSI_A_VOLUME
Definition: rfsv.h:200
@ PSI_A_HIDDEN
Definition: rfsv.h:196
@ PSI_A_EXEC
Definition: rfsv.h:209
@ PSI_A_DIR
Definition: rfsv.h:198
@ PSI_A_TEMP
Definition: rfsv.h:204
@ PSI_A_SYSTEM
Definition: rfsv.h:197
virtual Enum< errs > rename(const char *const oldname, const char *const newname)=0
Renames a file on the Psion.
virtual Enum< errs > freplacefile(const uint32_t attr, const char *const name, uint32_t &handle)=0
Creates an named file, overwriting an existing file.
Enum< errs > status
Definition: rfsv.h:646
virtual int getProtocolVersion()=0
Retrieves the protocol version.
virtual Enum< errs > fopen(const uint32_t attr, const char *const name, uint32_t &handle)=0
Opens a file.
static std::string convertSlash(const std::string &name)
Utility method, converts '/' to '\'.
Definition: rfsv.cc:141
virtual Enum< errs > fgetmtime(const char *const name, PsiTime &mtime)=0
Retrieves the modification time of a file on the Psion.
virtual Enum< errs > dircount(const char *const name, uint32_t &count)=0
Counts number of entries in a directory.
int32_t serNum
Definition: rfsv.h:647
virtual Enum< errs > closedir(rfsvDirhandle &handle)=0
Close a directory, previously opened with opendir.
virtual Enum< errs > fread(const uint32_t handle, unsigned char *const buffer, const uint32_t len, uint32_t &count)=0
Reads from a file on the Psion.
void reconnect()
Definition: rfsv.cc:117
virtual Enum< errs > fgeteattr(const char *const name, PlpDirent &e)=0
Retrieves attributes, size and modification time of a file on the Psion.
virtual Enum< errs > rmdir(const char *const name)=0
Removes a directory on the Psion.
void reset()
Definition: rfsv.cc:124
TCPSocket * skt
Definition: rfsv.h:645
virtual Enum< errs > remove(const char *const name)=0
Removes a file on the Psion.
virtual Enum< errs > dir(const char *const name, PlpDir &ret)=0
Reads a directory on the Psion.
virtual Enum< errs > pathtest(const char *const name)=0
Checks to see if the directory component of a path or file name exists and is valid.
virtual Enum< errs > fcreatefile(const uint32_t attr, const char *const name, uint32_t &handle)=0
Creates a named file.
virtual Enum< errs > mktemp(uint32_t &handle, std::string &name)=0
Creates a unique temporary file.
virtual Enum< errs > devinfo(const char drive, PlpDrive &dinfo)=0
Retrieves details about a drive.
int(* cpCallback_t)(void *, uint32_t)
Defines the callback procedure for progress indication of copy operations.
Definition: rfsv.h:42
std::deque< class PlpDirent > PlpDir
Definition: rfsv.h:31
const int RFSV_SENDLEN
Definition: rfsv.h:36