コード例 #1
0
 def write(self, data):
     """Output the given byte string over the serial port."""
     if not self.is_open:
         raise portNotOpenError
     #~ if not isinstance(data, (bytes, bytearray)):
     #~ raise TypeError('expected %s or bytearray, got %s' % (bytes, type(data)))
     # convert data (needed in case of memoryview instance: Py 3.1 io lib), ctypes doesn't like memoryview
     data = to_bytes(data)
     if data:
         #~ win32event.ResetEvent(self._overlapped_write.hEvent)
         n = win32.DWORD()
         err = win32.WriteFile(self._port_handle, data, len(data),
                               ctypes.byref(n), self._overlapped_write)
         if not err and win32.GetLastError() != win32.ERROR_IO_PENDING:
             raise SerialException("WriteFile failed ({!r})".format(
                 ctypes.WinError()))
         if self._write_timeout != 0:  # if blocking (None) or w/ write timeout (>0)
             # Wait for the write to complete.
             #~ win32.WaitForSingleObject(self._overlapped_write.hEvent, win32.INFINITE)
             err = win32.GetOverlappedResult(self._port_handle,
                                             self._overlapped_write,
                                             ctypes.byref(n), True)
             if win32.GetLastError() == win32.ERROR_OPERATION_ABORTED:
                 return n.value  # canceled IO is no error
             if n.value != len(data):
                 raise writeTimeoutError
         return n.value
     else:
         return 0
コード例 #2
0
    def ft_write_system(self, data):
        if not self.is_open:
            print("Port is not opened")
            exit(1)

        data_encode = encode(data)
        # data_encode_with_errors = set_errors(data_encode)
        data_encode_with_errors = data_encode.encode('utf-8')
        n = win32.DWORD()
        success = win32.WriteFile(self._port_handle, data_encode_with_errors,
                                  len(data_encode_with_errors),
                                  ctypes.byref(n), self._overlapped_write)
        self._buffer.append(data_encode_with_errors)
        return len(data)
コード例 #3
0
    def write(self, data):
        """Output the given byte string over the serial port."""
        if not self.is_open:
            raise PortNotOpenError()
        #~ if not isinstance(data, (bytes, bytearray)):
        #~ raise TypeError('expected %s or bytearray, got %s' % (bytes, type(data)))
        # convert data (needed in case of memoryview instance: Py 3.1 io lib), ctypes doesn't like memoryview
        data = to_bytes(data)
        if data:
            #~ win32event.ResetEvent(self._overlapped_write.hEvent)
            n = win32.DWORD()
            success = win32.WriteFile(self._port_handle, data, len(data),
                                      ctypes.byref(n), self._overlapped_write)
            if self._write_timeout != 0:  # if blocking (None) or w/ write timeout (>0)
                if not success and win32.GetLastError() not in (
                        win32.ERROR_SUCCESS, win32.ERROR_IO_PENDING):
                    raise SerialException("WriteFile failed ({!r})".format(
                        ctypes.WinError()))

                # Wait for the write to complete.
                #~ win32.WaitForSingleObject(self._overlapped_write.hEvent, win32.INFINITE)
                win32.GetOverlappedResult(self._port_handle,
                                          self._overlapped_write,
                                          ctypes.byref(n), True)
                if win32.GetLastError() == win32.ERROR_OPERATION_ABORTED:
                    return n.value  # canceled IO is no error
                if n.value != len(data):
                    raise SerialTimeoutException('Write timeout')
                return n.value
            else:
                errorcode = win32.ERROR_SUCCESS if success else win32.GetLastError(
                )
                if errorcode in (win32.ERROR_INVALID_USER_BUFFER,
                                 win32.ERROR_NOT_ENOUGH_MEMORY,
                                 win32.ERROR_OPERATION_ABORTED):
                    return 0
                elif errorcode in (win32.ERROR_SUCCESS,
                                   win32.ERROR_IO_PENDING):
                    # no info on true length provided by OS function in async mode
                    return len(data)
                else:
                    raise SerialException("WriteFile failed ({!r})".format(
                        ctypes.WinError()))
        else:
            return 0
コード例 #4
0
    def ft_write(self, data):
        if not self.is_open:
            print("Port is not opened")
            exit(1)

        # data = data.split('\n')
        # data = [message for message in data if message]
        # data = [message + '\r\n' for message in data]
        # for message in data:
        data_encode = encode(data)
        # data_encode_with_errors = set_errors(data_encode)
        data_encode_with_errors = data_encode.encode('utf-8')
        n = win32.DWORD()
        success = win32.WriteFile(self._port_handle, data_encode_with_errors,
                                  len(data_encode_with_errors),
                                  ctypes.byref(n), self._overlapped_write)
        self._buffer.append(data_encode_with_errors)
        return len(data)
コード例 #5
0
 def write(self, data):
     if not self.is_open:
         print("Port is not opened")
         exit(1)
     data = to_bytes(data)
     if data:
         n = win32.DWORD()
         success = win32.WriteFile(self._port_handle, data, len(data),
                                   ctypes.byref(n), self._overlapped_write)
         if self._write_timeout != 0:
             if not success and win32.GetLastError() not in (
                     win32.ERROR_SUCCESS, win32.ERROR_IO_PENDING):
                 print("WriteFile failed ({!r})".format(ctypes.WinError()))
                 exit(1)
             win32.GetOverlappedResult(self._port_handle,
                                       self._overlapped_write,
                                       ctypes.byref(n), True)
             if win32.GetLastError() == win32.ERROR_OPERATION_ABORTED:
                 return n.value
             if n.value != len(data):
                 print("Write timeout")
                 exit(1)
             return n.value
         else:
             errorcode = win32.ERROR_SUCCESS if success else win32.GetLastError(
             )
             if errorcode in (win32.ERROR_INVALID_USER_BUFFER,
                              win32.ERROR_NOT_ENOUGH_MEMORY,
                              win32.ERROR_OPERATION_ABORTED):
                 return 0
             elif errorcode in (win32.ERROR_SUCCESS,
                                win32.ERROR_IO_PENDING):
                 # no info on true length provided by OS function in async mode
                 return len(data)
             else:
                 print("WriteFile failed ({!r})".format(ctypes.WinError()))
                 exit(1)
     else:
         return 0