plptools
Loading...
Searching...
No Matches
rfsv16.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-2001 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#pragma once
22
23#include "rfsv.h"
24#include <memory>
25
26class RFSVFactory;
27
35class RFSV16 : public RFSV {
36public:
37 RFSV16(std::unique_ptr<TCPSocket> socket);
38
39 Enum<RFSV::errs> fopen(const uint32_t, const char * const, uint32_t &);
40 Enum<RFSV::errs> mktemp(uint32_t &, std::string &);
41 Enum<RFSV::errs> fcreatefile(const uint32_t, const char * const, uint32_t &);
42 Enum<RFSV::errs> freplacefile(const uint32_t, const char * const, uint32_t &);
43 Enum<RFSV::errs> fclose(const uint32_t);
44 Enum<RFSV::errs> dir(const char * const, PlpDir &);
45 Enum<RFSV::errs> pathtest(const char * const);
46 Enum<RFSV::errs> fgetmtime(const char * const, PsiTime &);
47 Enum<RFSV::errs> fsetmtime(const char * const, const PsiTime);
48 Enum<RFSV::errs> fgetattr(const char * const, uint32_t &);
49 Enum<RFSV::errs> fgeteattr(const char * const, PlpDirent &);
50 Enum<RFSV::errs> fsetattr(const char * const, const uint32_t seta, const uint32_t unseta);
51 Enum<RFSV::errs> dircount(const char * const, uint32_t &);
52 Enum<RFSV::errs> devlist(uint32_t &);
53 Enum<RFSV::errs> devinfo(const char, Drive &);
54 Enum<RFSV::errs> fread(const uint32_t, unsigned char * const, const uint32_t, uint32_t &);
55 Enum<RFSV::errs> fwrite(const uint32_t, const unsigned char * const, const uint32_t, uint32_t &);
56 Enum<RFSV::errs> copyFromPsion(const char * const, const char * const, void *, cpCallback_t);
57 Enum<RFSV::errs> copyFromPsion(const char *from, int fd, cpCallback_t cb);
58 Enum<RFSV::errs> copyToPsion(const char * const, const char * const, void *, cpCallback_t);
59 Enum<RFSV::errs> copyOnPsion(const char *, const char *, void *, cpCallback_t);
60 Enum<RFSV::errs> fsetsize(const uint32_t, const uint32_t);
61 Enum<RFSV::errs> fseek(const uint32_t, const int32_t, const uint32_t, uint32_t &);
62 Enum<RFSV::errs> mkdir(const char * const);
63 Enum<RFSV::errs> rmdir(const char * const);
64 Enum<RFSV::errs> rename(const char * const, const char * const);
65 Enum<RFSV::errs> remove(const char * const);
66 Enum<RFSV::errs> opendir(const uint32_t, const char * const, RFSVDirHandle &);
69 Enum<RFSV::errs> setVolumeName(const char, const char * const);
70
71 uint32_t opMode(const uint32_t);
72 int getProtocolVersion() { return 3; }
73 char defaultInternalDriveLetter() { return 'M'; };
74
75private:
76 enum commands {
77 SIBO_FOPEN = 0, // File Open
78 SIBO_FCLOSE = 2, // File Close
79 SIBO_FREAD = 4, // File Read
80 SIBO_FDIRREAD = 6, // Read Directory entries
81 SIBO_FDEVICEREAD = 8, // Device Information
82 SIBO_FWRITE = 10, // File Write
83 SIBO_FSEEK = 12, // File Seek
84 SIBO_FFLUSH = 14, // Flush
98 SIBO_RESPONSE = 42
99 };
100
102 P_FOPEN = 0x0000, /* Open file */
103 P_FCREATE = 0x0001, /* Create file */
104 P_FREPLACE = 0x0002, /* Replace file */
105 P_FAPPEND = 0x0003, /* Append records */
106 P_FUNIQUE = 0x0004, /* Unique file open */
107 P_FSTREAM = 0x0000, /* Stream access to a binary file */
108 P_FSTREAM_TEXT = 0x0010, /* Stream access to a text file */
109 P_FTEXT = 0x0020, /* Record access to a text file */
110 P_FDIR = 0x0030, /* Record access to a directory file */
111 P_FFORMAT = 0x0040, /* Format a device */
112 P_FDEVICE = 0x0050, /* Record access to device name list */
113 P_FNODE = 0x0060, /* Record access to node name list */
114 P_FUPDATE = 0x0100, /* Read and write access */
115 P_FRANDOM = 0x0200, /* Random access */
116 P_FSHARE = 0x0400 /* File can be shared */
117 };
118
120 P_FAWRITE = 0x0001, /* can the file be written to? */
121 P_FAHIDDEN = 0x0002, /* set if file is hidden */
122 P_FASYSTEM = 0x0004, /* set if file is a system file */
123 P_FAVOLUME = 0x0008, /* set if the name is a volume name */
124 P_FADIR = 0x0010, /* set if file is a directory file */
125 P_FAMOD = 0x0020, /* has the file been modified? */
126 P_FAREAD = 0x0100, /* can the file be read? */
127 P_FAEXEC = 0x0200, /* is the file executable? */
128 P_FASTREAM = 0x0400, /* is the file a byte stream file? */
129 P_FATEXT = 0x0800, /* is it a text file? */
130 P_FAMASK = 0x0f3f /* All of the above */
131 };
132
133 // Miscellaneous
134 Enum<RFSV::errs> fopendir(const char * const, uint32_t &);
135 uint32_t attr2std(const uint32_t);
136 uint32_t std2attr(const uint32_t);
137
138 // Communication
139 bool sendCommand(enum commands, BufferStore &);
141};
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
Enum< RFSV::errs > mktemp(uint32_t &, std::string &)
Creates a unique temporary file.
Definition: rfsv16.cc:72
Enum< RFSV::errs > getResponse(BufferStore &)
Definition: rfsv16.cc:469
Enum< RFSV::errs > devlist(uint32_t &)
Retrieves available drives on the Psion.
Definition: rfsv16.cc:311
int getProtocolVersion()
Retrieves the protocol version.
Definition: rfsv16.h:72
status_enum
Definition: rfsv16.h:119
@ P_FATEXT
Definition: rfsv16.h:129
@ P_FAEXEC
Definition: rfsv16.h:127
@ P_FAVOLUME
Definition: rfsv16.h:123
@ P_FAREAD
Definition: rfsv16.h:126
@ P_FAHIDDEN
Definition: rfsv16.h:121
@ P_FAMASK
Definition: rfsv16.h:130
@ P_FAWRITE
Definition: rfsv16.h:120
@ P_FADIR
Definition: rfsv16.h:124
@ P_FASTREAM
Definition: rfsv16.h:128
@ P_FAMOD
Definition: rfsv16.h:125
@ P_FASYSTEM
Definition: rfsv16.h:122
Enum< RFSV::errs > fseek(const uint32_t, const int32_t, const uint32_t, uint32_t &)
Sets the current file position of a file on the Psion.
Definition: rfsv16.cc:723
Enum< RFSV::errs > freplacefile(const uint32_t, const char *const, uint32_t &)
Creates an named file, overwriting an existing file.
Definition: rfsv16.cc:94
commands
Definition: rfsv16.h:76
@ SIBO_DELETE
Definition: rfsv16.h:87
@ SIBO_PATHTEST
Definition: rfsv16.h:94
@ SIBO_OPENUNIQUE
Definition: rfsv16.h:92
@ SIBO_RENAME
Definition: rfsv16.h:86
@ SIBO_MKDIR
Definition: rfsv16.h:91
@ SIBO_FDIRREAD
Definition: rfsv16.h:80
@ SIBO_CHANGEDIR
Definition: rfsv16.h:96
@ SIBO_SFDATE
Definition: rfsv16.h:97
@ SIBO_RESPONSE
Definition: rfsv16.h:98
@ SIBO_PARSE
Definition: rfsv16.h:90
@ SIBO_FSETEOF
Definition: rfsv16.h:85
@ SIBO_SFSTAT
Definition: rfsv16.h:89
@ SIBO_FDEVICEREAD
Definition: rfsv16.h:81
@ SIBO_FREAD
Definition: rfsv16.h:79
@ SIBO_STATUSSYSTEM
Definition: rfsv16.h:95
@ SIBO_FCLOSE
Definition: rfsv16.h:78
@ SIBO_STATUSDEVICE
Definition: rfsv16.h:93
@ SIBO_FINFO
Definition: rfsv16.h:88
@ SIBO_FFLUSH
Definition: rfsv16.h:84
@ SIBO_FWRITE
Definition: rfsv16.h:82
@ SIBO_FOPEN
Definition: rfsv16.h:77
@ SIBO_FSEEK
Definition: rfsv16.h:83
Enum< RFSV::errs > fsetsize(const uint32_t, const uint32_t)
Resizes an open file on the Psion.
Definition: rfsv16.cc:708
char defaultInternalDriveLetter()
Definition: rfsv16.h:73
Enum< RFSV::errs > copyOnPsion(const char *, const char *, void *, cpCallback_t)
Copies a file from the Psion to the Psion.
Definition: rfsv16.cc:661
Enum< RFSV::errs > rmdir(const char *const)
Removes a directory on the Psion.
Definition: rfsv16.cc:836
Enum< RFSV::errs > closedir(RFSVDirHandle &)
Close a directory, previously opened with opendir.
Definition: rfsv16.cc:121
Enum< RFSV::errs > readdir(RFSVDirHandle &, PlpDirent &)
Read directory entries.
Definition: rfsv16.cc:125
Enum< RFSV::errs > fclose(const uint32_t)
Close a file on the Psion whih was previously opened/created by using fopen , fcreatefile ,...
Definition: rfsv16.cc:102
Enum< RFSV::errs > fopendir(const char *const, uint32_t &)
Definition: rfsv16.cc:98
Enum< RFSV::errs > setVolumeName(const char, const char *const)
Set the name of a Psion Volume (Drive).
Definition: rfsv16.cc:884
Enum< RFSV::errs > fopen(const uint32_t, const char *const, uint32_t &)
Opens a file.
Definition: rfsv16.cc:53
Enum< RFSV::errs > fsetattr(const char *const, const uint32_t seta, const uint32_t unseta)
Definition: rfsv16.cc:280
Enum< RFSV::errs > fwrite(const uint32_t, const unsigned char *const, const uint32_t, uint32_t &)
Write to a file on the Psion.
Definition: rfsv16.cc:529
Enum< RFSV::errs > rename(const char *const, const char *const)
Renames a file on the Psion.
Definition: rfsv16.cc:865
Enum< RFSV::errs > dir(const char *const, PlpDir &)
Reads a directory on the Psion.
Definition: rfsv16.cc:161
Enum< RFSV::errs > opendir(const uint32_t, const char *const, RFSVDirHandle &)
Open a directory for reading with readdir.
Definition: rfsv16.cc:111
Enum< RFSV::errs > fgetmtime(const char *const, PsiTime &)
Retrieves the modification time of a file on the Psion.
Definition: rfsv16.cc:192
uint32_t std2attr(const uint32_t)
Definition: rfsv16.cc:940
Enum< RFSV::errs > mkdir(const char *const)
Creates a directory on the Psion.
Definition: rfsv16.cc:828
Enum< RFSV::errs > fcreatefile(const uint32_t, const char *const, uint32_t &)
Creates a named file.
Definition: rfsv16.cc:90
Enum< RFSV::errs > fsetmtime(const char *const, const PsiTime)
Sets the modification time of a file on the Psion.
Definition: rfsv16.cc:212
Enum< RFSV::errs > copyFromPsion(const char *const, const char *const, void *, cpCallback_t)
Copies a file from the Psion to the local machine.
Definition: rfsv16.cc:565
Enum< RFSV::errs > dircount(const char *const, uint32_t &)
Counts number of entries in a directory.
Definition: rfsv16.cc:294
bool sendCommand(enum commands, BufferStore &)
Definition: rfsv16.cc:444
Enum< RFSV::errs > fgeteattr(const char *const, PlpDirent &)
Retrieves attributes, size and modification time of a file on the Psion.
Definition: rfsv16.cc:246
Enum< RFSV::errs > fread(const uint32_t, unsigned char *const, const uint32_t, uint32_t &)
Reads from a file on the Psion.
Definition: rfsv16.cc:491
Enum< RFSV::errs > fgetattr(const char *const, uint32_t &)
Retrieves attributes of a file on the Psion.
Definition: rfsv16.cc:228
Enum< RFSV::errs > copyToPsion(const char *const, const char *const, void *, cpCallback_t)
Copies a file from local machine to the Psion.
Definition: rfsv16.cc:628
uint32_t attr2std(const uint32_t)
Definition: rfsv16.cc:894
Enum< RFSV::errs > pathtest(const char *const)
Checks to see if the directory component of a path or file name exists and is valid.
Definition: rfsv16.cc:700
uint32_t opMode(const uint32_t)
Converts an open-mode (A combination of the PSI_O_ constants.) from generic representation to the mac...
Definition: rfsv16.cc:179
Enum< RFSV::errs > remove(const char *const)
Removes a file on the Psion.
Definition: rfsv16.cc:875
Enum< RFSV::errs > devinfo(const char, Drive &)
Retrieves details about a drive.
Definition: rfsv16.cc:384
fopen_attrib
Definition: rfsv16.h:101
@ P_FREPLACE
Definition: rfsv16.h:104
@ P_FTEXT
Definition: rfsv16.h:109
@ P_FUPDATE
Definition: rfsv16.h:114
@ P_FOPEN
Definition: rfsv16.h:102
@ P_FNODE
Definition: rfsv16.h:113
@ P_FAPPEND
Definition: rfsv16.h:105
@ P_FSTREAM_TEXT
Definition: rfsv16.h:108
@ P_FCREATE
Definition: rfsv16.h:103
@ P_FSTREAM
Definition: rfsv16.h:107
@ P_FDEVICE
Definition: rfsv16.h:112
@ P_FUNIQUE
Definition: rfsv16.h:106
@ P_FFORMAT
Definition: rfsv16.h:111
@ P_FDIR
Definition: rfsv16.h:110
@ P_FRANDOM
Definition: rfsv16.h:115
@ P_FSHARE
Definition: rfsv16.h:116
A helper class for storing intermediate internal information in RFSV16 and RFSV32 .
Definition: rfsv.h:56
A factory for automatically instantiating the correct RFSV protocol variant depending on the connecte...
Definition: rfsvfactory.h:36
Access remote file services of a Psion.
Definition: rfsv.h:79
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