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 * Copyright (c) 2026 Jason Morley <hello@jbmorley.co.uk>
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License along
19 * along with this program; if not, see <https://www.gnu.org/licenses/>.
20 *
21 */
22#pragma once
23
24#include <deque>
25#include <memory>
26#include <string>
27#include <vector>
28
29#include "Enum.h"
30#include "connectionerror.h"
31#include "plpdirent.h"
32#include "bufferstore.h"
33
34typedef std::deque<class PlpDirent> PlpDir;
35
36class TCPSocket;
37class Drive;
38
39inline const int RFSV_SENDLEN = 2000;
40
45typedef int (*cpCallback_t)(void *, uint32_t);
46
47class RFSV16;
48class RFSV32;
49
57 friend class RFSV16;
58 friend class RFSV32;
59
60private:
61 uint32_t h;
63 std::string name_;
64};
65
79class RFSV {
80public:
84 enum seek_mode {
87 PSI_SEEK_END = 3
88 };
89
96 PSI_O_RDWR = 0002
97 };
98
103 PSI_O_CREAT = 00100,
104 PSI_O_EXCL = 00200,
105 PSI_O_TRUNC = 01000,
107 PSI_O_SHARE = 04000
108 };
109
113 enum errs {
187
188 // Special error code for "Operation not permitted in RFSV16"
190 // Special error code for "internal library error"
191 E_PSI_INTERNAL = -201
192 };
193
199 PSI_A_RDONLY = 0x0001,
200 PSI_A_HIDDEN = 0x0002,
201 PSI_A_SYSTEM = 0x0004,
202 PSI_A_DIR = 0x0008,
204 PSI_A_VOLUME = 0x0020,
205
207 PSI_A_NORMAL = 0x0040,
208 PSI_A_TEMP = 0x0080,
210
212 PSI_A_READ = 0x0200,
213 PSI_A_EXEC = 0x0400,
214 PSI_A_STREAM = 0x0800,
215 PSI_A_TEXT = 0x1000
216 };
217
218 static RFSV *connect(const std::string &host, int port, Enum<ConnectionError> *error);
219
220 virtual ~RFSV();
221 void reset();
222 void reconnect();
223
230
242 virtual Enum<errs> fopen(const uint32_t attr, const char * const name, uint32_t &handle) = 0;
243
254 virtual Enum<errs> mktemp(uint32_t &handle, std::string &name) = 0;
255
267 virtual Enum<errs> fcreatefile(const uint32_t attr, const char * const name, uint32_t &handle) = 0;
268
280 virtual Enum<errs> freplacefile(const uint32_t attr, const char * const name, uint32_t &handle) = 0;
281
288 virtual Enum<errs> fclose(const uint32_t handle) = 0;
289
300 virtual Enum<errs> dir(const char * const name, PlpDir &ret) = 0;
301
302 Enum<errs> dir(const std::string &path,
303 bool recursive,
304 std::vector<PlpDirent> &files);
305
314 virtual Enum<errs> fgetmtime(const char * const name, PsiTime &mtime) = 0;
315
324 virtual Enum<errs> fsetmtime(const char * const name, const PsiTime mtime) = 0;
325
334 virtual Enum<errs> fgetattr(const char * const name, uint32_t &attr) = 0;
335
355 virtual Enum<errs> pathtest(const char * const name) = 0;
356
365 virtual Enum<errs> fgeteattr(const char * const name, PlpDirent &e) =0;
366
370 virtual Enum<errs> fsetattr(const char * const name, const uint32_t seta, const uint32_t unseta) = 0;
371
380 virtual Enum<errs> dircount(const char * const name, uint32_t &count) = 0;
381
389 virtual Enum<errs> devlist(uint32_t &devbits) = 0;
390
402 virtual Enum<errs> devinfo(const char drive, Drive &dinfo) = 0;
403
404 Enum<errs> drives(std::vector<Drive> &drives);
405
416 virtual Enum<errs> fread(const uint32_t handle, unsigned char * const buffer, const uint32_t len, uint32_t &count) = 0;
417
428 virtual Enum<errs> fwrite(const uint32_t handle, const unsigned char * const buffer, const uint32_t len, uint32_t &count) = 0;
429
444 virtual Enum<errs> copyFromPsion(const char *from, const char *to, void *context, cpCallback_t func) = 0;
445
449 virtual Enum<RFSV::errs> copyFromPsion(const char *from, int fd, cpCallback_t cb) = 0;
450
464 virtual Enum<errs> copyToPsion(const char * const from, const char * const to, void *, cpCallback_t func) = 0;
465
482 virtual Enum<errs> copyOnPsion(const char * const from, const char * const to, void *, cpCallback_t func) = 0;
483
496 virtual Enum<errs> fsetsize(const uint32_t handle, const uint32_t size) = 0;
497
508 virtual Enum<errs> fseek(const uint32_t handle, const int32_t offset, const uint32_t mode, uint32_t &resultpos) = 0;
509
517 virtual Enum<errs> mkdir(const char * const name) = 0;
518
526 virtual Enum<errs> rmdir(const char * const name) = 0;
527
536 virtual Enum<errs> rename(const char * const oldname, const char * const newname) = 0;
537
545 virtual Enum<errs> remove(const char * const name) = 0;
546
557 virtual Enum<errs> opendir(const uint32_t attr, const char * const name, RFSVDirHandle &handle) = 0;
558
569 virtual Enum<errs> readdir(RFSVDirHandle &handle, PlpDirent &entry) = 0;
570
578 virtual Enum<errs> closedir(RFSVDirHandle &handle) = 0;
579
588 virtual Enum<errs> setVolumeName(const char drive, const char * const name) = 0;
589
618 std::string attr2String(const uint32_t attr);
619
629 virtual uint32_t opMode(const uint32_t mode) = 0;
630
634 static std::string convertSlash(const std::string &name);
635
641 int getSpeed();
642
648 virtual int getProtocolVersion() = 0;
649
650 virtual char defaultInternalDriveLetter() = 0;
651
652protected:
658 const char *getConnectName();
659
660 std::unique_ptr<TCPSocket> socket_;
663};
A generic container for an array of bytes.
Definition: bufferstore.h:36
A class representing information about a Disk drive on the psion.
Definition: drive.h:51
Wrapper class featuring range-checking and string representation of enumerated values.
Definition: Enum.h:135
A class, representing a directory entry of the Psion.
Definition: plpdirent.h:79
Psion time related utility class.
Definition: psitime.h:124
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:56
uint32_t h
Definition: rfsv.h:61
BufferStore b
Definition: rfsv.h:62
std::string name_
Definition: rfsv.h:63
Access remote file services of a Psion.
Definition: rfsv.h:79
virtual Enum< errs > fsetsize(const uint32_t handle, const uint32_t size)=0
Resizes an open file 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.
open_flags
The known modes for file open.
Definition: rfsv.h:93
@ PSI_O_WRONLY
Definition: rfsv.h:95
@ PSI_O_RDWR
Definition: rfsv.h:96
@ PSI_O_RDONLY
Definition: rfsv.h:94
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.
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 Enum< errs > fgetmtime(const char *const name, PsiTime &mtime)=0
Retrieves the modification time of a file 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 > 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 > mktemp(uint32_t &handle, std::string &name)=0
Creates a unique temporary file.
virtual Enum< errs > remove(const char *const name)=0
Removes a file on the Psion.
const char * getConnectName()
Retrieves the PLP protocol name.
Definition: rfsv.cc:119
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.
virtual Enum< errs > opendir(const uint32_t attr, const char *const name, RFSVDirHandle &handle)=0
Open a directory for reading with readdir.
Enum< errs > drives(std::vector< Drive > &drives)
Definition: rfsv.cc:220
virtual Enum< errs > fopen(const uint32_t attr, const char *const name, uint32_t &handle)=0
Opens a file.
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:156
virtual Enum< errs > setVolumeName(const char drive, const char *const name)=0
Set the name of a Psion Volume (Drive).
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.
virtual Enum< errs > fsetattr(const char *const name, const uint32_t seta, const uint32_t unseta)=0
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 > fgeteattr(const char *const name, PlpDirent &e)=0
Retrieves attributes, size and modification time of a file on the Psion.
virtual Enum< errs > fcreatefile(const uint32_t attr, const char *const name, uint32_t &handle)=0
Creates a named file.
virtual Enum< errs > fsetmtime(const char *const name, const PsiTime mtime)=0
Sets the modification time of a file on the Psion.
seek_mode
The known modes for seek.
Definition: rfsv.h:84
@ PSI_SEEK_SET
Definition: rfsv.h:85
@ PSI_SEEK_END
Definition: rfsv.h:87
@ PSI_SEEK_CUR
Definition: rfsv.h:86
virtual Enum< errs > mkdir(const char *const name)=0
Creates a directory on the Psion.
virtual char defaultInternalDriveLetter()=0
Enum< errs > status_
Definition: rfsv.h:661
virtual Enum< errs > fclose(const uint32_t handle)=0
Close a file on the Psion whih was previously opened/created by using fopen , fcreatefile ,...
static RFSV * connect(const std::string &host, int port, Enum< ConnectionError > *error)
Definition: rfsv.cc:115
virtual ~RFSV()
Definition: rfsv.cc:123
Enum< errs > getStatus()
Retrieves the current connection status.
Definition: rfsv.cc:145
virtual Enum< errs > fgetattr(const char *const name, uint32_t &attr)=0
Retrieves attributes of a file on the Psion.
void reset()
Definition: rfsv.cc:133
void reconnect()
Definition: rfsv.cc:127
virtual Enum< errs > dir(const char *const name, PlpDir &ret)=0
Reads a directory on the Psion.
virtual Enum< errs > dircount(const char *const name, uint32_t &count)=0
Counts number of entries in a directory.
virtual Enum< errs > freplacefile(const uint32_t attr, const char *const name, uint32_t &handle)=0
Creates an named file, overwriting an existing file.
std::unique_ptr< TCPSocket > socket_
Definition: rfsv.h:660
virtual int getProtocolVersion()=0
Retrieves the protocol version.
int32_t operationId_
Definition: rfsv.h:662
virtual Enum< errs > rmdir(const char *const name)=0
Removes a directory on the Psion.
virtual Enum< errs > devlist(uint32_t &devbits)=0
Retrieves available drives on the Psion.
virtual Enum< errs > devinfo(const char drive, Drive &dinfo)=0
Retrieves details about a drive.
virtual Enum< errs > readdir(RFSVDirHandle &handle, PlpDirent &entry)=0
Read directory entries.
virtual Enum< errs > closedir(RFSVDirHandle &handle)=0
Close a directory, previously opened with opendir.
static std::string convertSlash(const std::string &name)
Utility method, converts '/' to '\'.
Definition: rfsv.cc:149
virtual Enum< errs > rename(const char *const oldname, const char *const newname)=0
Renames a file on the Psion.
int getSpeed()
Retrieve speed of serial link.
Definition: rfsv.cc:177
errs
The known error codes.
Definition: rfsv.h:113
@ E_PSI_GEN_POWER
Definition: rfsv.h:176
@ E_PSI_GEN_ARG
Definition: rfsv.h:116
@ E_PSI_FILE_TOOBIG
Definition: rfsv.h:177
@ E_PSI_FILE_PENDING
Definition: rfsv.h:152
@ E_PSI_FILE_ERASE
Definition: rfsv.h:174
@ E_PSI_FILE_ACCESS
Definition: rfsv.h:145
@ E_PSI_GEN_BUSY
Definition: rfsv.h:183
@ E_PSI_FILE_RDONLY
Definition: rfsv.h:150
@ E_PSI_FILE_ALLOC
Definition: rfsv.h:155
@ E_PSI_FILE_DIR
Definition: rfsv.h:148
@ E_PSI_GEN_DIED
Definition: rfsv.h:185
@ E_PSI_GEN_FSYS
Definition: rfsv.h:133
@ E_PSI_MDM_NOANS
Definition: rfsv.h:166
@ E_PSI_GEN_TOOMANY
Definition: rfsv.h:137
@ E_PSI_FILE_WRITE
Definition: rfsv.h:140
@ E_PSI_GEN_INUSE
Definition: rfsv.h:123
@ E_PSI_FILE_RETRAN
Definition: rfsv.h:158
@ E_PSI_GEN_UNDER
Definition: rfsv.h:119
@ E_PSI_GEN_FAIL
Definition: rfsv.h:115
@ E_PSI_GEN_TOOWIDE
Definition: rfsv.h:136
@ E_PSI_FILE_INACT
Definition: rfsv.h:160
@ E_PSI_GEN_NSUP
Definition: rfsv.h:118
@ E_PSI_NOT_SIBO
Definition: rfsv.h:189
@ E_PSI_GEN_TERMINATED
Definition: rfsv.h:184
@ E_PSI_GEN_NOTOPEN
Definition: rfsv.h:129
@ E_PSI_GEN_NOPROC
Definition: rfsv.h:127
@ E_PSI_GEN_NOFONT
Definition: rfsv.h:135
@ E_PSI_FILE_FULL
Definition: rfsv.h:143
@ E_PSI_FILE_NDISC
Definition: rfsv.h:180
@ E_PSI_FILE_EXIST
Definition: rfsv.h:138
@ E_PSI_GEN_NOMEMORY
Definition: rfsv.h:124
@ E_PSI_GEN_DIVIDE
Definition: rfsv.h:122
@ E_PSI_FILE_VOLUME
Definition: rfsv.h:153
@ E_PSI_MDM_BLACKLIST
Definition: rfsv.h:167
@ E_PSI_GEN_IMAGE
Definition: rfsv.h:130
@ E_PSI_MDM_BUSY
Definition: rfsv.h:165
@ E_PSI_FILE_DEVICE
Definition: rfsv.h:147
@ E_PSI_FILE_CONNECT
Definition: rfsv.h:157
@ E_PSI_FILE_CORRUPT
Definition: rfsv.h:172
@ E_PSI_FILE_DISC
Definition: rfsv.h:156
@ E_PSI_GEN_OS
Definition: rfsv.h:117
@ E_PSI_FILE_CANCEL
Definition: rfsv.h:154
@ E_PSI_GEN_NOSEM
Definition: rfsv.h:126
@ E_PSI_FILE_HANDLE
Definition: rfsv.h:186
@ E_PSI_FILE_NXIST
Definition: rfsv.h:139
@ E_PSI_FILE_READ
Definition: rfsv.h:141
@ E_PSI_FILE_RECORD
Definition: rfsv.h:149
@ E_PSI_GEN_NOSEGMENTS
Definition: rfsv.h:125
@ E_PSI_FILE_NOTREADY
Definition: rfsv.h:168
@ E_PSI_FILE_LINE
Definition: rfsv.h:159
@ E_PSI_FILE_OVERRUN
Definition: rfsv.h:163
@ E_PSI_FILE_PARITY
Definition: rfsv.h:161
@ E_PSI_GEN_DEVICE
Definition: rfsv.h:132
@ E_PSI_FILE_INV
Definition: rfsv.h:151
@ E_PSI_GEN_RECEIVER
Definition: rfsv.h:131
@ E_PSI_GEN_START
Definition: rfsv.h:134
@ E_PSI_FILE_FRAME
Definition: rfsv.h:162
@ E_PSI_FILE_NAME
Definition: rfsv.h:144
@ E_PSI_GEN_NONE
Definition: rfsv.h:114
@ E_PSI_FILE_ABORT
Definition: rfsv.h:173
@ E_PSI_GEN_DESCR
Definition: rfsv.h:178
@ E_PSI_INTERNAL
Definition: rfsv.h:191
@ E_PSI_FILE_LOCKED
Definition: rfsv.h:146
@ E_PSI_FILE_PROTECT
Definition: rfsv.h:171
@ E_PSI_FILE_DIRFULL
Definition: rfsv.h:170
@ E_PSI_FILE_COMPLETION
Definition: rfsv.h:182
@ E_PSI_GEN_RANGE
Definition: rfsv.h:121
@ E_PSI_FILE_DRIVER
Definition: rfsv.h:181
@ E_PSI_FILE_INVALID
Definition: rfsv.h:175
@ E_PSI_GEN_OPEN
Definition: rfsv.h:128
@ E_PSI_GEN_LIB
Definition: rfsv.h:179
@ E_PSI_FILE_EOF
Definition: rfsv.h:142
@ E_PSI_GEN_OVER
Definition: rfsv.h:120
@ E_PSI_MDM_CONFAIL
Definition: rfsv.h:164
@ E_PSI_FILE_UNKNOWN
Definition: rfsv.h:169
virtual Enum< errs > copyFromPsion(const char *from, const char *to, void *context, cpCallback_t func)=0
Copies a file from the Psion to the local machine.
file_attribs
The known file attributes.
Definition: rfsv.h:197
@ PSI_A_NORMAL
Attributes, valid on EPOC only.
Definition: rfsv.h:207
@ PSI_A_TEXT
Definition: rfsv.h:215
@ PSI_A_ARCHIVE
Definition: rfsv.h:203
@ PSI_A_DIR
Definition: rfsv.h:202
@ PSI_A_EXEC
Definition: rfsv.h:213
@ PSI_A_HIDDEN
Definition: rfsv.h:200
@ PSI_A_COMPRESSED
Definition: rfsv.h:209
@ PSI_A_READ
Attributes, valid on SIBO only.
Definition: rfsv.h:212
@ PSI_A_STREAM
Definition: rfsv.h:214
@ PSI_A_VOLUME
Definition: rfsv.h:204
@ PSI_A_RDONLY
Attributes, valid on both EPOC and SIBO.
Definition: rfsv.h:199
@ PSI_A_TEMP
Definition: rfsv.h:208
@ PSI_A_SYSTEM
Definition: rfsv.h:201
open_mode
The known modes for file creation.
Definition: rfsv.h:102
@ PSI_O_APPEND
Definition: rfsv.h:106
@ PSI_O_CREAT
Definition: rfsv.h:103
@ PSI_O_TRUNC
Definition: rfsv.h:105
@ PSI_O_EXCL
Definition: rfsv.h:104
@ PSI_O_SHARE
Definition: rfsv.h:107
A class for dealing with sockets.
Definition: tcpsocket.h:37
int(* cpCallback_t)(void *, uint32_t)
Defines the callback procedure for progress indication of copy operations.
Definition: rfsv.h:45
std::deque< class PlpDirent > PlpDir
Definition: rfsv.h:34
const int RFSV_SENDLEN
Definition: rfsv.h:39
static void error(int line)
Definition: sismain.cpp:44