@@ -248,10 +248,15 @@ class TMAPI:
248248 def __init__ (self ):
249249 self .NativeAPI = TMAPIExports ()
250250 self .PS3TargetIndex = - 1
251+ self .IsConnected = False
251252
252253 if self .NativeAPI .SNPS3InitTargetComms () != SNResult .SN_S_OK :
253254 raise Exception ("SNPS3InitTargetComms() Failed" )
254255
256+ def ThrowIfNotConnected (self ):
257+ if self .IsConnected == False :
258+ raise Exception ("Error: Not Connected to PS3" )
259+
255260 def GetDefaultTarget (self ):
256261 DefaultTargetIndex = pointer (c_uint32 (0 ))
257262
@@ -261,6 +266,8 @@ def GetDefaultTarget(self):
261266 return DefaultTargetIndex [0 ]
262267
263268 def ConnectTarget (self , TargetIndex = - 1 ):
269+ self .IsConnected = False
270+
264271 if TargetIndex == - 1 :
265272 TargetIndex = self .GetDefaultTarget ()
266273
@@ -269,9 +276,13 @@ def ConnectTarget(self, TargetIndex=-1):
269276
270277 self .PS3TargetIndex = TargetIndex
271278
279+ self .IsConnected = True
280+
272281 return True
273282
274- def AttachProcess (self ):
283+ def GetProcessList (self ):
284+ self .ThrowIfNotConnected ()
285+
275286 NumProcessesPtr = pointer (c_uint32 (0 ))
276287
277288 if self .NativeAPI .SNPS3ProcessList (self .PS3TargetIndex , NumProcessesPtr , None ) != SNResult .SN_S_OK :
@@ -287,7 +298,18 @@ def AttachProcess(self):
287298 if self .NativeAPI .SNPS3ProcessList (self .PS3TargetIndex , NumProcessesPtr , ProcessList ) != SNResult .SN_S_OK :
288299 raise Exception ("SNPS3ProcessList(): GetProcessInfos Failed" )
289300
290- ProcessID = ProcessList [0 ]
301+ return list (ProcessList )
302+
303+ def AttachProcess (self , ProcessID = - 1 ):
304+ self .ThrowIfNotConnected ()
305+
306+ if ProcessID == - 1 :
307+ ProcessList = self .GetProcessList ()
308+
309+ if len (ProcessList ) == 0 :
310+ return False
311+
312+ ProcessID = ProcessList [0 ]
291313
292314 if self .NativeAPI .SNPS3ProcessAttach (self .PS3TargetIndex , 0 , ProcessID ) != SNResult .SN_S_OK :
293315 return False
@@ -300,13 +322,17 @@ def AttachProcess(self):
300322 return True
301323
302324 def ReadMemory (self , Address , Size ):
325+ self .ThrowIfNotConnected ()
326+
303327 MemoryBuffer = (c_char * Size )()
304328
305329 self .NativeAPI .SNPS3ProcessGetMemory (self .PS3TargetIndex , 0 , self .ProcessID , 0 , Address , Size , MemoryBuffer )
306330
307331 return bytes (MemoryBuffer )
308332
309333 def WriteMemory (self , Address , Bytes ):
334+ self .ThrowIfNotConnected ()
335+
310336 WriteBuffer = (c_char * len (Bytes )).from_buffer (bytearray (Bytes ))
311337
312338 return self .NativeAPI .SNPS3ProcessSetMemory (self .PS3TargetIndex , 0 , self .ProcessID , 0 , Address , len (Bytes ), WriteBuffer )
0 commit comments