plptools
Loading...
Searching...
No Matches
rpcs.h
Go to the documentation of this file.
1/*
2 * This file is part of plptools.
3 *
4 * Copyright (C) 1999-2002 Fritz Elfert <felfert@to.com>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License along
17 * along with this program; if not, see <https://www.gnu.org/licenses/>.
18 *
19 */
20#pragma once
21
22#include "connectionerror.h"
23#include "psitime.h"
24#include "psiprocess.h"
25#include "rfsv.h"
26#include "Enum.h"
27
28#include <memory>
29#include <vector>
30
31class TCPSocket;
32class BufferStore;
33class BufferArray;
34
35typedef std::vector<PsiProcess> processList;
36
52class RPCS {
53public:
57 enum machs {
68 PSI_MACH_WINC = 33
69 // TODO: Code for 5mx
70 };
71
75 enum languages {
104 PSI_LANG_sl_SI = 28
105 };
106
114 PSI_BATT_GOOD = 3
115 };
116
121 typedef struct machineInfo_t {
123 char machineName[17];
124 unsigned long long machineUID;
125 unsigned long countryCode;
127
128 unsigned short romMajor;
129 unsigned short romMinor;
130 unsigned short romBuild;
131 unsigned long romSize;
133
134 unsigned long ramSize;
135 unsigned long ramFree;
136 unsigned long ramMaxFree;
137 unsigned long ramDiskSize;
138
139 unsigned long registrySize;
140 unsigned long displayWidth;
141 unsigned long displayHeight;
142
145
149 unsigned long mainBatteryCurrent;
150 unsigned long mainBatteryUsedPower;
151 unsigned long mainBatteryVoltage;
153
155 unsigned long backupBatteryVoltage;
157
161
162 static RPCS *connect(const std::string &host, int port, Enum<ConnectionError> *error);
163
167 virtual ~RPCS();
168
173 void reset();
174
181 void reconnect();
182
190
205 Enum<RFSV::errs> getNCPversion(int &major, int &minor);
206
218 Enum<RFSV::errs> execProgram(const char *program, const char *args);
219
231 Enum<RFSV::errs> stopProgram(const char *program);
232
233 Enum<RFSV::errs> queryProgram(const char *);
234
250 Enum<RFSV::errs> formatOpen(const char drive, int &handle, int &count);
251
260 Enum<RFSV::errs> formatRead(int handle);
261
262 Enum<RFSV::errs> getUniqueID(const char *, long &);
263
276
290
303 Enum<RFSV::errs> fuser(const char *name, char *buf, int maxlen);
304
316
327
341 virtual Enum<RFSV::errs> getCmdLine(const char *process, std::string &ret) = 0;
342
355 (void)machineInfo;
357 }
358
371 virtual Enum<RFSV::errs> closeHandle(uint32_t handle) {
372 (void)handle;
374 }
375
376 virtual Enum<RFSV::errs> regOpenIter(uint32_t, char *, uint16_t &) {
378 }
379
380 virtual Enum<RFSV::errs> regReadIter(uint16_t) {
382 }
383
386 }
387
388 virtual Enum<RFSV::errs> regRead(void) {
390 }
391
394 }
395
396 virtual Enum<RFSV::errs> setTime(time_t time) {
397 (void)time;
399 }
400
413 virtual Enum<RFSV::errs> configRead(uint32_t size, BufferStore &data) {
414 (void)size;
415 (void)data;
417 }
418
431 (void)data;
433 }
434
437 }
438
441 }
442
443protected:
447 std::unique_ptr<TCPSocket> socket_;
448
453
457 enum commands {
458 QUERY_NCP = 0x00,
459 EXEC_PROG = 0x01,
461 STOP_PROG = 0x03,
469 FUSER = 0x0b,
474 REG_WRITE = 0x68,
475 REG_READ = 0x69,
477 SET_TIME = 0x6b,
483 QUIT_SERVER = 0xff
484 };
485
491
510 virtual Enum<RFSV::errs> configOpen(uint16_t &handle, uint32_t size) {
511 (void)handle;
512 (void)size;
514 }
515
530 bool sendCommand(enum commands cc, BufferStore &data);
531 Enum<RFSV::errs> getResponse(BufferStore &data, bool statusIsFirstByte);
532 const char *getConnectName();
533};
An array of BufferStores.
Definition: bufferarray.h:30
A generic container for an array of bytes.
Definition: bufferstore.h:36
Wrapper class featuring range-checking and string representation of enumerated values.
Definition: Enum.h:135
@ E_PSI_NOT_SIBO
Definition: rfsv.h:189
Remote procedure call services via PLP.
Definition: rpcs.h:52
virtual Enum< RFSV::errs > configWrite(BufferStore data)
Write to Series 5 scratch RAM.
Definition: rpcs.h:430
virtual Enum< RFSV::errs > getOwnerInfo(BufferArray &owner)=0
Retrieve owner information of the remote machine.
Enum< RFSV::errs > queryPrograms(processList &ret)
Retrieves a list of all running Programs.
Definition: rpcs.cc:245
virtual Enum< RFSV::errs > getCmdLine(const char *process, std::string &ret)=0
Retrieves the command line of a running process.
Enum< RFSV::errs > quitServer(void)
Requests the remote server to terminate.
Definition: rpcs.cc:417
Enum< RFSV::errs > getUniqueID(const char *, long &)
Definition: rpcs.cc:357
batterystates
The known battery states.
Definition: rpcs.h:110
@ PSI_BATT_LOW
Definition: rpcs.h:113
@ PSI_BATT_VERYLOW
Definition: rpcs.h:112
@ PSI_BATT_DEAD
Definition: rpcs.h:111
@ PSI_BATT_GOOD
Definition: rpcs.h:114
const char * getConnectName()
Definition: rpcs.cc:127
Enum< RFSV::errs > formatRead(int handle)
Continues a running format.
Definition: rpcs.cc:347
virtual Enum< RFSV::errs > getMachineInfo(machineInfo &machineInfo)
Retrieve general Information about the connected machine.
Definition: rpcs.h:354
virtual Enum< RFSV::errs > closeHandle(uint32_t handle)
Release an RPCS handle.
Definition: rpcs.h:371
void reconnect()
Attempts to re-establish a remote connection by first closing the socket, then connecting again to th...
Definition: rpcs.cc:104
virtual ~RPCS()
Virtual destructor.
Definition: rpcs.cc:97
virtual Enum< RFSV::errs > configRead(uint32_t size, BufferStore &data)
Read from Series 5 scratch RAM.
Definition: rpcs.h:413
languages
The known interface languages.
Definition: rpcs.h:75
@ PSI_LANG_it_IT
Definition: rpcs.h:81
@ PSI_LANG_de_CH
Definition: rpcs.h:88
@ PSI_LANG_pl_PL
Definition: rpcs.h:103
@ PSI_LANG_de_DE
Definition: rpcs.h:79
@ PSI_LANG_sl_SI
Definition: rpcs.h:104
@ PSI_LANG_TEST
Definition: rpcs.h:76
@ PSI_LANG_no_NO
Definition: rpcs.h:84
@ PSI_LANG_fr_CH
Definition: rpcs.h:87
@ PSI_LANG_nl_NL
Definition: rpcs.h:94
@ PSI_LANG_ru_RU
Definition: rpcs.h:92
@ PSI_LANG_fr_BE
Definition: rpcs.h:97
@ PSI_LANG_nl_BE
Definition: rpcs.h:95
@ PSI_LANG_hu_HU
Definition: rpcs.h:93
@ PSI_LANG_en_US
Definition: rpcs.h:86
@ PSI_LANG_cs_CZ
Definition: rpcs.h:101
@ PSI_LANG_fr_CA
Definition: rpcs.h:100
@ PSI_LANG_fi_FI
Definition: rpcs.h:85
@ PSI_LANG_en_GB
Definition: rpcs.h:77
@ PSI_LANG_pt_PT
Definition: rpcs.h:89
@ PSI_LANG_es_ES
Definition: rpcs.h:80
@ PSI_LANG_da_DK
Definition: rpcs.h:83
@ PSI_LANG_tr_TR
Definition: rpcs.h:90
@ PSI_LANG_fr_FR
Definition: rpcs.h:78
@ PSI_LANG_sk_SK
Definition: rpcs.h:102
@ PSI_LANG_de_AT
Definition: rpcs.h:98
@ PSI_LANG_en_AU
Definition: rpcs.h:96
@ PSI_LANG_en_NZ
Definition: rpcs.h:99
@ PSI_LANG_is_IS
Definition: rpcs.h:91
@ PSI_LANG_sv_SE
Definition: rpcs.h:82
virtual Enum< RFSV::errs > regRead(void)
Definition: rpcs.h:388
Enum< RFSV::errs > stopProgram(const char *program)
Requests termination of a program running on the remote machine.
Definition: rpcs.cc:225
virtual Enum< RFSV::errs > configOpen(uint16_t &handle, uint32_t size)
Prepare scratch RAM in Series 5 for read/write.
Definition: rpcs.h:510
virtual Enum< RFSV::errs > regDelete(void)
Definition: rpcs.h:392
Enum< RFSV::errs > getNCPversion(int &major, int &minor)
Retrieves the version of the NCP protocol on the remote side.
Definition: rpcs.cc:181
Enum< RFSV::errs > getMachineType(Enum< machs > &type)
Retrieves the type of machine on the remote side as defined in machs.
Definition: rpcs.cc:375
static RPCS * connect(const std::string &host, int port, Enum< ConnectionError > *error)
Definition: rpcs.cc:93
virtual Enum< RFSV::errs > queryOpen()
Definition: rpcs.h:435
virtual Enum< RFSV::errs > regReadIter(uint16_t)
Definition: rpcs.h:380
std::unique_ptr< TCPSocket > socket_
The socket, used for communication with ncpd.
Definition: rpcs.h:447
machs
The known machine types.
Definition: rpcs.h:57
@ PSI_MACH_MC
Definition: rpcs.h:60
@ PSI_MACH_S3A
Definition: rpcs.h:63
@ PSI_MACH_WINC
Definition: rpcs.h:68
@ PSI_MACH_S3C
Definition: rpcs.h:66
@ PSI_MACH_S5
Definition: rpcs.h:67
@ PSI_MACH_PC
Definition: rpcs.h:59
@ PSI_MACH_S3
Definition: rpcs.h:62
@ PSI_MACH_WORKABOUT
Definition: rpcs.h:64
@ PSI_MACH_SIENA
Definition: rpcs.h:65
@ PSI_MACH_UNKNOWN
Definition: rpcs.h:58
@ PSI_MACH_HC
Definition: rpcs.h:61
Enum< RFSV::errs > queryProgram(const char *)
Definition: rpcs.cc:235
Enum< RFSV::errs > execProgram(const char *program, const char *args)
Starts execution of a program on the remote machine.
Definition: rpcs.cc:199
Enum< RFSV::errs > getStatus()
Retrieves the current status of the connection.
Definition: rpcs.cc:123
int mtCacheS5mx
Flag: getMachineType and getMachineInfo have been called and the machine is an S5mx.
Definition: rpcs.h:490
Enum< RFSV::errs > fuser(const char *name, char *buf, int maxlen)
Retrieves the name of a process, having a given file opened on the remote side.
Definition: rpcs.cc:398
Enum< RFSV::errs > status
The current status of the connection.
Definition: rpcs.h:452
struct RPCS::machineInfo_t machineInfo
This struct holds the data returned by RPCS::getMachineInfo.
virtual Enum< RFSV::errs > regOpenIter(uint32_t, char *, uint16_t &)
Definition: rpcs.h:376
virtual Enum< RFSV::errs > regWrite(void)
Definition: rpcs.h:384
virtual Enum< RFSV::errs > queryRead()
Definition: rpcs.h:439
virtual Enum< RFSV::errs > setTime(time_t time)
Definition: rpcs.h:396
bool sendCommand(enum commands cc, BufferStore &data)
Sends a command to the remote side.
Definition: rpcs.cc:134
void reset()
Initializes a connection to the remote machine.
Definition: rpcs.cc:109
Enum< RFSV::errs > getResponse(BufferStore &data, bool statusIsFirstByte)
Definition: rpcs.cc:156
commands
The possible commands.
Definition: rpcs.h:457
@ EXEC_PROG
Definition: rpcs.h:459
@ QUIT_SERVER
Definition: rpcs.h:483
@ REG_WRITE
Definition: rpcs.h:474
@ GET_UNIQUEID
Definition: rpcs.h:465
@ FORMAT_READ
Definition: rpcs.h:464
@ REG_DELETE
Definition: rpcs.h:476
@ REG_READ_ITER
Definition: rpcs.h:473
@ REG_OPEN_ITER
Definition: rpcs.h:472
@ QUERY_DRIVE
Definition: rpcs.h:460
@ SET_TIME
Definition: rpcs.h:477
@ QUERY_OPEN
Definition: rpcs.h:481
@ CLOSE_HANDLE
Definition: rpcs.h:471
@ QUERY_PROG
Definition: rpcs.h:462
@ GET_CMDLINE
Definition: rpcs.h:468
@ GET_MACHINETYPE
Definition: rpcs.h:467
@ FORMAT_OPEN
Definition: rpcs.h:463
@ CONFIG_WRITE
Definition: rpcs.h:480
@ QUERY_NCP
Definition: rpcs.h:458
@ CONFIG_OPEN
Definition: rpcs.h:478
@ QUERY_READ
Definition: rpcs.h:482
@ CONFIG_READ
Definition: rpcs.h:479
@ GET_MACHINE_INFO
Definition: rpcs.h:470
@ FUSER
Definition: rpcs.h:469
@ STOP_PROG
Definition: rpcs.h:461
@ GET_OWNERINFO
Definition: rpcs.h:466
@ REG_READ
Definition: rpcs.h:475
Enum< RFSV::errs > formatOpen(const char drive, int &handle, int &count)
Starts formatting a drive.
Definition: rpcs.cc:326
A class for dealing with sockets.
Definition: tcpsocket.h:37
static BufferStore owner
Definition: main.cc:60
std::vector< PsiProcess > processList
Definition: rpcs.h:35
static void error(int line)
Definition: sismain.cpp:44
This struct holds the data returned by RPCS::getMachineInfo.
Definition: rpcs.h:121
unsigned long ramSize
Definition: rpcs.h:134
unsigned long mainBatteryUsedPower
Definition: rpcs.h:150
Enum< languages > uiLanguage
Definition: rpcs.h:126
unsigned long displayHeight
Definition: rpcs.h:141
unsigned long mainBatteryVoltage
Definition: rpcs.h:151
psi_timeval externalPowerUsedTime
Definition: rpcs.h:158
bool externalPower
Definition: rpcs.h:159
bool romProgrammable
Definition: rpcs.h:132
Enum< batterystates > backupBatteryStatus
Definition: rpcs.h:154
psi_timeval mainBatteryInsertionTime
Definition: rpcs.h:146
psi_timeval time
Definition: rpcs.h:143
Enum< machs > machineType
Definition: rpcs.h:122
unsigned short romMajor
Definition: rpcs.h:128
unsigned long ramDiskSize
Definition: rpcs.h:137
unsigned long mainBatteryCurrent
Definition: rpcs.h:149
psi_timeval mainBatteryUsedTime
Definition: rpcs.h:148
Enum< batterystates > mainBatteryStatus
Definition: rpcs.h:147
unsigned short romBuild
Definition: rpcs.h:130
unsigned long countryCode
Definition: rpcs.h:125
unsigned short romMinor
Definition: rpcs.h:129
char machineName[17]
Definition: rpcs.h:123
unsigned long ramMaxFree
Definition: rpcs.h:136
unsigned long long machineUID
Definition: rpcs.h:124
unsigned long backupBatteryMaxVoltage
Definition: rpcs.h:156
unsigned long registrySize
Definition: rpcs.h:139
unsigned long displayWidth
Definition: rpcs.h:140
unsigned long ramFree
Definition: rpcs.h:135
unsigned long mainBatteryMaxVoltage
Definition: rpcs.h:152
psi_timezone tz
Definition: rpcs.h:144
unsigned long romSize
Definition: rpcs.h:131
unsigned long backupBatteryVoltage
Definition: rpcs.h:155
Holds a Psion time value.
Definition: psitime.h:40
holds a Psion time zone description.
Definition: psitime.h:84