Private Sub btnStartLiveView_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStartLiveView.Click
Dim err As Integer = EDS_ERR_OK
Dim prop As Integer = EdsEvfOutputDevice.kEdsEvfOutputDevice_PC
Dim proptype As Integer = EDSDKTypes.kEdsPropID_Evf_OutputDevice
'// Stock the property.'
Dim wkIntPtr As IntPtr = Marshal.AllocHGlobal(Marshal.SizeOf(prop))
Marshal.StructureToPtr(prop, wkIntPtr, False)
'send property/command to the camera'
EdsSetPropertyData(model.getCameraObject(), proptype, 0, Marshal.SizeOf(prop), prop)
Dim stream As IntPtr
Dim outMemoryRef As IntPtr
Dim evfImage As IntPtr
err = EdsCreateMemoryStream(0, stream)
If err = EDS_ERR_OK Then
err = EdsCreateImageRef(stream, outMemoryRef) '(stream, evfImage)'
Else
Dim str As String = Hex(err)
MessageBox.Show(str)
End If
If err = EDS_ERR_OK Then
err = EdsDownloadEvfImage(model.getCameraObject(), evfImage)
Else
Dim str As String = Hex(err)
MessageBox.Show("&H" & str & "L") ' Shows &H2CL which = ERR_FILE_FORMAT_NOT_RECOGNIZED'
End If
' Get the Incidental Data of the Image'
If err = EDS_ERR_OK Then
Dim zoom As UInt32
Dim point As IntPtr
EdsGetPropertyData(outMemoryRef, kEdsPropID_Evf_ZoomPosition, 0, Marshal.SizeOf(zoom), zoom)
EdsGetPropertyData(outMemoryRef, kEdsPropID_Evf_ZoomPosition, 0, Marshal.SizeOf(point), point)
Else
'MessageBox.Show(err.ToString())'
End If
Dim buffer(Marshal.SizeOf(stream)) As Byte
Dim mStream As System.IO.Stream = New System.IO.MemoryStream(Marshal.SizeOf(stream))
Dim gcTime As GCHandle = GCHandle.Alloc(0, GCHandleType.Pinned)
Dim pTime As IntPtr = gcTime.AddrOfPinnedObject()
Marshal.Copy(stream, buffer, 0, Marshal.SizeOf(stream))
mStream.Write(buffer, 0, Marshal.SizeOf(stream))
Me.PictureBox1.Image = Image.FromStream(mStream)
EdsRelease(stream)
End Sub
Dim camera as New Camera
camera.EstablishSession()
camera.TakePicture("C:pathtosave.jpg")
camera.StartLiveView(me.LiveViewPictureBox)
camera.StopLiveView()
camera.FlushTransferQueue()
Imports CanonCamera.Sdk ' the .vb header file for the EDSDK
Imports System.Runtime.InteropServices
Imports System.Threading
Imports System.Drawing
Imports System.IO
Public Class Camera
Implements IDisposable
Private m_cam As IntPtr
Private m_oeh As EdsObjectEventHandler
Private m_seh As EdsStateEventHandler
Private m_peh As EdsPropertyEventHandler
Private Shared s_instance As Camera = Nothing
Private m_waitingOnPic As Boolean
Private m_picOutFile As String
' live view
Private Const LiveViewDelay = 200
Private Const LiveViewFrameBufferSize = &H80000
Private m_liveViewThread As Thread
Private m_liveViewOn As Boolean
Private m_waitingToStartLiveView As Boolean
Private m_liveViewPicBox As PictureBox
Private m_stoppingLiveView As Boolean
Private m_liveViewFrameBuffer As Byte()
Private m_liveViewBufferHandle As GCHandle
Private m_liveViewStreamPtr As IntPtr
Private Const SleepTimeout = 20000 ' how many milliseconds to wait before giving up
Private Const SleepAmount = 50 ' how many milliseconds to sleep before doing the event pump
Private m_transferQueue As Queue(Of TransferItem)
Public Sub New()
If s_instance Is Nothing Then
s_instance = Me
m_waitingOnPic = False
m_liveViewOn = False
m_waitingToStartLiveView = False
m_liveViewPicBox = Nothing
m_liveViewThread = Nothing
m_stoppingLiveView = False
ReDim m_liveViewFrameBuffer(0)
m_liveViewBufferHandle = Nothing
m_liveViewStreamPtr = IntPtr.Zero
m_transferQueue = New Queue(Of TransferItem)
CheckError(EdsInitializeSDK())
Else
Throw New OnlyOneInstanceAllowedException
End If
End Sub
'''
''' connect the computer to the camera. must be called before doing anything else.
'''
'''
Public Sub EstablishSession()
Dim camList As IntPtr
Dim numCams As Integer
CheckError(EdsGetCameraList(camList))
CheckError(EdsGetChildCount(camList, numCams))
If numCams > 1 Then
CheckError(EdsRelease(camList))
Throw New TooManyCamerasFoundException
ElseIf numCams = 0 Then
CheckError(EdsRelease(camList))
Throw New NoCameraFoundException
End If
'get the only camera
CheckError(EdsGetChildAtIndex(camList, 0, m_cam))
'release the camera list data
CheckError(EdsRelease(camList))
'open a session
CheckError(EdsOpenSession(m_cam))
' handlers
m_seh = New EdsStateEventHandler(AddressOf StaticStateEventHandler)
CheckError(EdsSetCameraStateEventHandler(m_cam, kEdsStateEvent_All, m_seh, New IntPtr(0)))
m_oeh = New EdsObjectEventHandler(AddressOf StaticObjectEventHandler)
CheckError(EdsSetObjectEventHandler(m_cam, kEdsObjectEvent_All, m_oeh, New IntPtr(0)))
m_peh = New EdsPropertyEventHandler(AddressOf StaticPropertyEventHandler)
CheckError(EdsSetPropertyEventHandler(m_cam, kEdsPropertyEvent_All, m_peh, New IntPtr(0)))
'set default options
'save to computer, not memory card
CheckError(EdsSetPropertyData(m_cam, kEdsPropID_SaveTo, 0, Marshal.SizeOf(GetType(Integer)), CType(EdsSaveTo.kEdsSaveTo_Host, Integer)))
' enforce JPEG format
Dim qs As New StructurePointer(Of UInt32)
CheckError(EdsGetPropertyData(m_cam, kEdsPropID_ImageQuality, 0, qs.Size, qs.Pointer))
' clear the old image type setting and set the new one
qs.Value = qs.Value And &HFF0FFFFFL Or (EdsImageType.kEdsImageType_Jpeg << 20)
CheckError(EdsSetPropertyData(m_cam, kEdsPropID_ImageQuality, 0, qs.Size, qs.Value))
End Sub
Public Sub Dispose() Implements System.IDisposable.Dispose
StopLiveView() 'stops it only if it's running
FlushTransferQueue()
CheckError(EdsCloseSession(m_cam))
CheckError(EdsRelease(m_cam))
CheckError(EdsTerminateSDK())
s_instance = Nothing
End Sub
Private Sub CheckError(ByVal Err As Integer)
' throw errors if necessary
If Err <> EDS_ERR_OK Then Throw New SdkException(Err)
End Sub
Private Shared Function StaticObjectEventHandler(ByVal inEvent As Integer, ByVal inRef As IntPtr, ByVal inContext As IntPtr) As Long
'transfer from static to member
s_instance.ObjectEventHandler(inEvent, inRef, inContext)
Return 0
End Function
Private Shared Function StaticStateEventHandler(ByVal inEvent As Integer, ByVal inParameter As Integer, ByVal inContext As IntPtr) As Long
'transfer from static to member
s_instance.StateEventHandler(inEvent, inParameter, inContext)
Return 0
End Function
Private Shared Function StaticPropertyEventHandler(ByVal inEvent As Integer, ByVal inPropertyID As Integer, ByVal inParam As Integer, ByVal inContext As IntPtr) As Long
'transfer from static to member
s_instance.PropertyEventHandler(inEvent, inPropertyID, inParam, inContext)
Return 0
End Function
Private Sub ObjectEventHandler(ByVal inEvent As Integer, ByVal inRef As IntPtr, ByVal inContext As IntPtr)
Select Case inEvent
Case kEdsObjectEvent_DirItemRequestTransfer
' queue up the transfer request
Dim transfer As New TransferItem
transfer.sdkRef = inRef
transfer.outFile = m_picOutFile
m_transferQueue.Enqueue(transfer)
m_waitingOnPic = False ' allow other thread to continue
Case Else
Debug.Print(String.Format("ObjectEventHandler: event {0}", inEvent))
End Select
End Sub
Public Sub FlushTransferQueue()
While m_transferQueue.Count > 0
' transfer the image in memory to disk
Dim transfer As TransferItem = m_transferQueue.Dequeue()
Dim dirItemInfo As EdsDirectoryItemInfo = Nothing
Dim outStream As IntPtr
CheckError(EdsGetDirectoryItemInfo(transfer.sdkRef, dirItemInfo))
' This creates the outStream that is used by EdsDownload to actually grab and write out the file.
CheckError(EdsCreateFileStream(transfer.outFile, EdsFileCreateDisposition.kEdsFileCreateDisposition_CreateAlways, EdsAccess.kEdsAccess_Write, outStream))
' do the transfer
CheckError(EdsDownload(transfer.sdkRef, dirItemInfo.size, outStream))
CheckError(EdsDownloadComplete(transfer.sdkRef))
CheckError(EdsRelease(outStream))
End While
End Sub
Private Sub StateEventHandler(ByVal inEvent As Integer, ByVal inParameter As Integer, ByVal inContext As IntPtr)
Debug.Print(String.Format("stateEventHandler: event {0}, parameter {1}", inEvent, inParameter))
End Sub
Private Sub PropertyEventHandler(ByVal inEvent As Integer, ByVal inPropertyID As Integer, ByVal inParam As Integer, ByVal inContext As IntPtr)
Select Case inPropertyID
Case kEdsPropID_Evf_OutputDevice
If m_waitingToStartLiveView Then
'start live view thread
m_liveViewThread = New Thread(AddressOf UpdateLiveView)
m_liveViewThread.Start()
'save state
m_waitingToStartLiveView = False
m_liveViewOn = True
End If
Case Else
Debug.Print("property event handler called, propid = " & inPropertyID)
End Select
End Sub
'''snap a photo with the camera and write it to outfile
''' the file to save the picture to
Public Sub TakePicture(ByVal OutFile As String)
Dim interuptingLiveView As Boolean = m_liveViewOn
Dim lvBox As PictureBox = m_liveViewPicBox
If m_waitingOnPic Or m_waitingToStartLiveView Then
' bad programmer. should have disabled user controls
Throw New CameraIsBusyException
Exit Sub
End If
If interuptingLiveView Then StopLiveView()
' set flag indicating we are waiting on a callback call
m_waitingOnPic = True
m_picOutFile = OutFile
' take a picture with the camera and save it to outfile
Dim err As Integer = EdsSendCommand(m_cam, EdsCameraCommand.kEdsCameraCommand_TakePicture, 0)
If err <> EDS_ERR_OK Then
m_waitingOnPic = False
CheckError(err)
End If
Dim I As Integer
For I = 0 To SleepTimeout / SleepAmount
System.Threading.Thread.Sleep(SleepAmount)
Application.DoEvents()
If Not m_waitingOnPic Then
If interuptingLiveView Then StartLiveView(lvBox)
Exit Sub 'success
End If
Next I
' we never got a callback. throw an error
If interuptingLiveView Then StartLiveView(lvBox)
m_waitingOnPic = False
Throw New TakePictureFailedException
End Sub
Private Sub StartBulb()
Dim err As Integer
CheckError(EdsSendStatusCommand(m_cam, EdsCameraStatusCommand.kEdsCameraStatusCommand_UILock, 0))
err = EdsSendCommand(m_cam, EdsCameraCommand.kEdsCameraCommand_BulbStart, 0)
' call ui unlock if bulbstart fails
If err <> EDS_ERR_OK Then
EdsSendStatusCommand(m_cam, EdsCameraStatusCommand.kEdsCameraStatusCommand_UIUnLock, 0)
CheckError(err)
End If
End Sub
Private Sub StopBulb()
Dim err As Integer, err2 As Integer
' call ui unlock even if bulb end fails
err = EdsSendCommand(m_cam, EdsCameraCommand.kEdsCameraCommand_BulbEnd, 0)
err2 = EdsSendCommand(m_cam, EdsCameraStatusCommand.kEdsCameraStatusCommand_UIUnLock, 0)
CheckError(err)
CheckError(err2)
End Sub
'''start streaming live video to pbox
'''the picture box to send live video to
''' you can only have one live view going at a time.
Public Sub StartLiveView(ByVal pbox As PictureBox)
While m_stoppingLiveView
Application.DoEvents()
End While
If m_waitingToStartLiveView Then
m_liveViewPicBox = pbox
Return
ElseIf m_liveViewOn Then
StopLiveView()
End If
Dim device As New StructurePointer(Of UInt32)
' tell the camera to send live data to the computer
CheckError(EdsGetPropertyData(m_cam, kEdsPropID_Evf_OutputDevice, 0, device.Size, device.Pointer))
device.Value = device.Value Or EdsEvfOutputDevice.kEdsEvfOutputDevice_PC
CheckError(EdsSetPropertyData(m_cam, kEdsPropID_Evf_OutputDevice, 0, device.Size, device.Value))
' get ready to stream
m_liveViewPicBox = pbox
m_waitingToStartLiveView = True
' set up buffer
ReDim m_liveViewFrameBuffer(LiveViewFrameBufferSize)
m_liveViewBufferHandle = GCHandle.Alloc(m_liveViewFrameBuffer, GCHandleType.Pinned)
CheckError(EdsCreateMemoryStreamFromPointer(m_liveViewBufferHandle.AddrOfPinnedObject, LiveViewFrameBufferSize, m_liveViewStreamPtr))
' pause this thread until live view starts
Dim I As Integer
For I = 0 To SleepTimeout / SleepAmount
System.Threading.Thread.Sleep(SleepAmount)
Application.DoEvents()
If Not m_waitingToStartLiveView Then Exit Sub 'success
Next I
' we never got a callback. throw an error
StopLiveView()
Throw New LiveViewFailedException
End Sub
'''
''' stop streaming live video
'''
'''
Public Sub StopLiveView()
Dim device As New StructurePointer(Of UInt32)
If m_stoppingLiveView Or (Not m_waitingToStartLiveView And Not m_liveViewOn) Then Exit Sub
If m_liveViewOn Then
' stop thread
m_stoppingLiveView = True
m_liveViewThread.Join()
End If
' save state
m_liveViewOn = False
m_waitingToStartLiveView = False
m_liveViewPicBox = Nothing
m_stoppingLiveView = False
' tell the camera not to send live data to the computer
CheckError(EdsGetPropertyData(m_cam, kEdsPropID_Evf_OutputDevice, 0, device.Size, device.Pointer))
device.Value = device.Value And Not EdsEvfOutputDevice.kEdsEvfOutputDevice_PC
CheckError(EdsSetPropertyData(m_cam, kEdsPropID_Evf_OutputDevice, 0, device.Size, device.Value))
' clean up
CheckError(EdsRelease(m_liveViewStreamPtr))
m_liveViewBufferHandle.Free()
End Sub
Private Sub UpdateLiveView()
Dim nowPlusInterval As Long
While Not m_stoppingLiveView
nowPlusInterval = Now.Ticks + LiveViewDelay
ShowLiveViewFrame()
Thread.Sleep(Math.Max(nowPlusInterval - Now.Ticks, 0))
End While
End Sub
Private Sub ShowLiveViewFrame()
Dim err As Integer = 0
Dim imagePtr As IntPtr
' create image
CheckError(EdsCreateEvfImageRef(m_liveViewStreamPtr, imagePtr))
' download the frame
Try
CheckError(EdsDownloadEvfImage(m_cam, imagePtr))
Catch ex As SdkException When ex.SdkError = SdkErrors.ObjectNotready
CheckError(EdsRelease(imagePtr))
Exit Sub
End Try
' get it into the picture box image
Dim canonImg As Image = Image.FromStream(New MemoryStream(m_liveViewFrameBuffer)) 'do not dispose the MemoryStream (Image.FromStream)
Dim oldImg As Image = m_liveViewPicBox.Image
m_liveViewPicBox.Image = canonImg
If oldImg IsNot Nothing Then oldImg.Dispose() 'really is required.
' release image
CheckError(EdsRelease(imagePtr))
End Sub
Protected Overrides Sub Finalize()
Dispose()
MyBase.Finalize()
End Sub
Private Class StructurePointer(Of T As Structure)
Implements IDisposable
Private m_Size As Integer 'in bytes
Private m_ptr As IntPtr
Public ReadOnly Property Size() As Integer
Get
Return m_Size
End Get
End Property
Public ReadOnly Property Pointer() As IntPtr
Get
Return m_ptr
End Get
End Property
Public Property Value() As T
Get
Return Marshal.PtrToStructure(m_ptr, GetType(T))
End Get
Set(ByVal value As T)
Marshal.StructureToPtr(value, m_ptr, True)
End Set
End Property
Public Sub New()
m_Size = Marshal.SizeOf(GetType(T))
m_ptr = Marshal.AllocHGlobal(m_Size)
End Sub
Public Sub Dispose() Implements IDisposable.Dispose
Marshal.FreeHGlobal(m_ptr)
End Sub
Protected Overrides Sub Finalize()
Dispose()
MyBase.Finalize()
End Sub
End Class
Private Structure TransferItem
Public sdkRef As IntPtr
Public outFile As String
End Structure
End Class
Public Class SdkException
Inherits Exception
Private m_Message As String
Public ReadOnly Property SdkError() As String
Get
Return m_Message
End Get
End Property
Public Sub New(ByVal errCode As Integer)
m_Message = SdkErrors.StringFromErrorCode(errCode)
End Sub
Public Overrides ReadOnly Property Message() As String
Get
Return m_Message
End Get
End Property
End Class
Public NotInheritable Class SdkErrors
Private Sub New() 'static class
End Sub
Private Shared m_dict As Dictionary(Of Integer, String)
Public Shared Function StringFromErrorCode(ByVal errCode As Integer) As String
If m_dict Is Nothing Then initDict()
If m_dict.ContainsKey(errCode) Then
Return m_dict.Item(errCode)
Else
Return "Error code: " & errCode
End If
End Function
#Region "Generated Code"
Private Shared Sub initDict()
m_dict = New Dictionary(Of Integer, String)(117)
' Miscellaneous errors
m_dict.Add(EDS_ERR_UNIMPLEMENTED, Unimplemented)
m_dict.Add(EDS_ERR_INTERNAL_ERROR, InternalError)
m_dict.Add(EDS_ERR_MEM_ALLOC_FAILED, MemAllocFailed)
m_dict.Add(EDS_ERR_MEM_FREE_FAILED, MemFreeFailed)
m_dict.Add(EDS_ERR_OPERATION_CANCELLED, OperationCancelled)
m_dict.Add(EDS_ERR_INCOMPATIBLE_VERSION, IncompatibleVersion)
m_dict.Add(EDS_ERR_NOT_SUPPORTED, NotSupported)
m_dict.Add(EDS_ERR_UNEXPECTED_EXCEPTION, UnexpectedException)
m_dict.Add(EDS_ERR_PROTECTION_VIOLATION, ProtectionViolation)
m_dict.Add(EDS_ERR_MISSING_SUBCOMPONENT, MissingSubcomponent)
m_dict.Add(EDS_ERR_SELECTION_UNAVAILABLE, SelectionUnavailable)
' File errors
m_dict.Add(EDS_ERR_FILE_IO_ERROR, FileIoError)
m_dict.Add(EDS_ERR_FILE_TOO_MANY_OPEN, FileTooManyOpen)
m_dict.Add(EDS_ERR_FILE_NOT_FOUND, FileNotFound)
m_dict.Add(EDS_ERR_FILE_OPEN_ERROR, FileOpenError)
m_dict.Add(EDS_ERR_FILE_CLOSE_ERROR, FileCloseError)
m_dict.Add(EDS_ERR_FILE_SEEK_ERROR, FileSeekError)
m_dict.Add(EDS_ERR_FILE_TELL_ERROR, FileTellError)
m_dict.Add(EDS_ERR_FILE_READ_ERROR, FileReadError)
m_dict.Add(EDS_ERR_FILE_WRITE_ERROR, FileWriteError)
m_dict.Add(EDS_ERR_FILE_PERMISSION_ERROR, FilePermissionError)
m_dict.Add(EDS_ERR_FILE_DISK_FULL_ERROR, FileDiskFullError)
m_dict.Add(EDS_ERR_FILE_ALREADY_EXISTS, FileAlreadyExists)
m_dict.Add(EDS_ERR_FILE_FORMAT_UNRECOGNIZED, FileFormatUnrecognized)
m_dict.Add(EDS_ERR_FILE_DATA_CORRUPT, FileDataCorrupt)
m_dict.Add(EDS_ERR_FILE_NAMING_NA, FileNamingNa)
' Directory errors
m_dict.Add(EDS_ERR_DIR_NOT_FOUND, DirNotFound)
m_dict.Add(EDS_ERR_DIR_IO_ERROR, DirIoError)
m_dict.Add(EDS_ERR_DIR_ENTRY_NOT_FOUND, DirEntryNotFound)
m_dict.Add(EDS_ERR_DIR_ENTRY_EXISTS, DirEntryExists)
m_dict.Add(EDS_ERR_DIR_NOT_EMPTY, DirNotEmpty)
' Property errors
m_dict.Add(EDS_ERR_PROPERTIES_UNAVAILABLE, PropertiesUnavailable)
m_dict.Add(EDS_ERR_PROPERTIES_MISMATCH, PropertiesMismatch)
m_dict.Add(EDS_ERR_PROPERTIES_NOT_LOADED, PropertiesNotLoaded)
' Function Parameter errors
m_dict.Add(EDS_ERR_INVALID_PARAMETER, InvalidParameter)
m_dict.Add(EDS_ERR_INVALID_HANDLE, InvalidHandle)
m_dict.Add(EDS_ERR_INVALID_POINTER, InvalidPointer)
m_dict.Add(EDS_ERR_INVALID_INDEX, InvalidIndex)
m_dict.Add(EDS_ERR_INVALID_LENGTH, InvalidLength)
m_dict.Add(EDS_ERR_INVALID_FN_POINTER, InvalidFnPointer)
m_dict.Add(EDS_ERR_INVALID_SORT_FN, InvalidSortFn)
' Device errors
m_dict.Add(EDS_ERR_DEVICE_NOT_FOUND, DeviceNotFound)
m_dict.Add(EDS_ERR_DEVICE_BUSY, DeviceBusy)
m_dict.Add(EDS_ERR_DEVICE_INVALID, DeviceInvalid)
m_dict.Add(EDS_ERR_DEVICE_EMERGENCY, DeviceEmergency)
m_dict.Add(EDS_ERR_DEVICE_MEMORY_FULL, DeviceMemoryFull)
m_dict.Add(EDS_ERR_DEVICE_INTERNAL_ERROR, DeviceInternalError)
m_dict.Add(EDS_ERR_DEVICE_INVALID_PARAMETER, DeviceInvalidParameter)
m_dict.Add(EDS_ERR_DEVICE_NO_DISK, DeviceNoDisk)
m_dict.Add(EDS_ERR_DEVICE_DISK_ERROR, DeviceDiskError)
m_dict.Add(EDS_ERR_DEVICE_CF_GATE_CHANGED, DeviceCfGateChanged)
m_dict.Add(EDS_ERR_DEVICE_DIAL_CHANGED, DeviceDialChanged)
m_dict.Add(EDS_ERR_DEVICE_NOT_INSTALLED, DeviceNotInstalled)
m_dict.Add(EDS_ERR_DEVICE_STAY_AWAKE, DeviceStayAwake)
m_dict.Add(EDS_ERR_DEVICE_NOT_RELEASED, DeviceNotReleased)
' Stream errors
m_dict.Add(EDS_ERR_STREAM_IO_ERROR, StreamIoError)
m_dict.Add(EDS_ERR_STREAM_NOT_OPEN, StreamNotOpen)
m_dict.Add(EDS_ERR_STREAM_ALREADY_OPEN, StreamAlreadyOpen)
m_dict.Add(EDS_ERR_STREAM_OPEN_ERROR, StreamOpenError)
m_dict.Add(EDS_ERR_STREAM_CLOSE_ERROR, StreamCloseError)
m_dict.Add(EDS_ERR_STREAM_SEEK_ERROR, StreamSeekError)
m_dict.Add(EDS_ERR_STREAM_TELL_ERROR, StreamTellError)
m_dict.Add(EDS_ERR_STREAM_READ_ERROR, StreamReadError)
m_dict.Add(EDS_ERR_STREAM_WRITE_ERROR, StreamWriteError)
m_dict.Add(EDS_ERR_STREAM_PERMISSION_ERROR, StreamPermissionError)
m_dict.Add(EDS_ERR_STREAM_COULDNT_BEGIN_THREAD, StreamCouldntBeginThread)
m_dict.Add(EDS_ERR_STREAM_BAD_OPTIONS, StreamBadOptions)
m_dict.Add(EDS_ERR_STREAM_END_OF_STREAM, StreamEndOfStream)
' Communications errors
m_dict.Add(EDS_ERR_COMM_PORT_IS_IN_USE, CommPortIsInUse)
m_dict.Add(EDS_ERR_COMM_DISCONNECTED, CommDisconnected)
m_dict.Add(EDS_ERR_COMM_DEVICE_INCOMPATIBLE, CommDeviceIncompatible)
m_dict.Add(EDS_ERR_COMM_BUFFER_FULL, CommBufferFull)
m_dict.Add(EDS_ERR_COMM_USB_BUS_ERR, CommUsbBusErr)
' Lock/Unlock
m_dict.Add(EDS_ERR_USB_DEVICE_LOCK_ERROR, UsbDeviceLockError)
m_dict.Add(EDS_ERR_USB_DEVICE_UNLOCK_ERROR, UsbDeviceUnlockError)
' STI/WIA
m_dict.Add(EDS_ERR_STI_UNKNOWN_ERROR, StiUnknownError)
m_dict.Add(EDS_ERR_STI_INTERNAL_ERROR, StiInternalError)
m_dict.Add(EDS_ERR_STI_DEVICE_CREATE_ERROR, StiDeviceCreateError)
m_dict.Add(EDS_ERR_STI_DEVICE_RELEASE_ERROR, StiDeviceReleaseError)
m_dict.Add(EDS_ERR_DEVICE_NOT_LAUNCHED, DeviceNotLaunched)
m_dict.Add(EDS_ERR_ENUM_NA, EnumNa)
m_dict.Add(EDS_ERR_INVALID_FN_CALL, InvalidFnCall)
m_dict.Add(EDS_ERR_HANDLE_NOT_FOUND, HandleNotFound)
m_dict.Add(EDS_ERR_INVALID_ID, InvalidId)
m_dict.Add(EDS_ERR_WAIT_TIMEOUT_ERROR, WaitTimeoutError)
' PTP
m_dict.Add(EDS_ERR_SESSION_NOT_OPEN, SessionNotOpen)
m_dict.Add(EDS_ERR_INVALID_TRANSACTIONID, InvalidTransactionid)
m_dict.Add(EDS_ERR_INCOMPLETE_TRANSFER, IncompleteTransfer)
m_dict.Add(EDS_ERR_INVALID_STRAGEID, InvalidStrageid)
m_dict.Add(EDS_ERR_DEVICEPROP_NOT_SUPPORTED, DevicepropNotSupported)
m_dict.Add(EDS_ERR_INVALID_OBJECTFORMATCODE, InvalidObjectformatcode)
m_dict.Add(EDS_ERR_SELF_TEST_FAILED, SelfTestFailed)
m_dict.Add(EDS_ERR_PARTIAL_DELETION, PartialDeletion)
m_dict.Add(EDS_ERR_SPECIFICATION_BY_FORMAT_UNSUPPORTED, SpecificationByFormatUnsupported)
m_dict.Add(EDS_ERR_NO_VALID_OBJECTINFO, NoValidObjectinfo)
m_dict.Add(EDS_ERR_INVALID_CODE_FORMAT, InvalidCodeFormat)
m_dict.Add(EDS_ERR_UNKNOWN_VENDER_CODE, UnknownVenderCode)
m_dict.Add(EDS_ERR_CAPTURE_ALREADY_TERMINATED, CaptureAlreadyTerminated)
m_dict.Add(EDS_ERR_INVALID_PARENTOBJECT, InvalidParentobject)
m_dict.Add(EDS_ERR_INVALID_DEVICEPROP_FORMAT, InvalidDevicepropFormat)
m_dict.Add(EDS_ERR_INVALID_DEVICEPROP_VALUE, InvalidDevicepropValue)
m_dict.Add(EDS_ERR_SESSION_ALREADY_OPEN, SessionAlreadyOpen)
m_dict.Add(EDS_ERR_TRANSACTION_CANCELLED, TransactionCancelled)
m_dict.Add(EDS_ERR_SPECIFICATION_OF_DESTINATION_UNSUPPORTED, SpecificationOfDestinationUnsupported)
m_dict.Add(EDS_ERR_UNKNOWN_COMMAND, UnknownCommand)
m_dict.Add(EDS_ERR_OPERATION_REFUSED, OperationRefused)
m_dict.Add(EDS_ERR_LENS_COVER_CLOSE, LensCoverClose)
m_dict.Add(EDS_ERR_LOW_BATTERY, LowBattery)
m_dict.Add(EDS_ERR_OBJECT_NOTREADY, ObjectNotready)
m_dict.Add(EDS_ERR_TAKE_PICTURE_AF_NG, TakePictureAfNg)
m_dict.Add(EDS_ERR_TAKE_PICTURE_RESERVED, TakePictureReserved)
m_dict.Add(EDS_ERR_TAKE_PICTURE_MIRROR_UP_NG, TakePictureMirrorUpNg)
m_dict.Add(EDS_ERR_TAKE_PICTURE_SENSOR_CLEANING_NG, TakePictureSensorCleaningNg)
m_dict.Add(EDS_ERR_TAKE_PICTURE_SILENCE_NG, TakePictureSilenceNg)
m_dict.Add(EDS_ERR_TAKE_PICTURE_NO_CARD_NG, TakePictureNoCardNg)
m_dict.Add(EDS_ERR_TAKE_PICTURE_CARD_NG, TakePictureCardNg)
m_dict.Add(EDS_ERR_TAKE_PICTURE_CARD_PROTECT_NG, TakePictureCardProtectNg)
' 44313 ???
End Sub
' Miscellaneous errors
Public Const Unimplemented = "Unimplemented"
Public Const InternalError = "Internal Error"
Public Const MemAllocFailed = "Mem Alloc Failed"
Public Const MemFreeFailed = "Mem Free Failed"
Public Const OperationCancelled = "Operation Cancelled"
Public Const IncompatibleVersion = "Incompatible Version"
Public Const NotSupported = "Not Supported"
Public Const UnexpectedException = "Unexpected Exception"
Public Const ProtectionViolation = "Protection Violation"
Public Const MissingSubcomponent = "Missing Subcomponent"
Public Const SelectionUnavailable = "Selection Unavailable"
' File errors
Public Const FileIoError = "File IO Error"
Public Const FileTooManyOpen = "File Too Many Open"
Public Const FileNotFound = "File Not Found"
Public Const FileOpenError = "File Open Error"
Public Const FileCloseError = "File Close Error"
Public Const FileSeekError = "File Seek Error"
Public Const FileTellError = "File Tell Error"
Public Const FileReadError = "File Read Error"
Public Const FileWriteError = "File Write Error"
Public Const FilePermissionError = "File Permission Error"
Public Const FileDiskFullError = "File Disk Full Error"
Public Const FileAlreadyExists = "File Already Exists"
Public Const FileFormatUnrecognized = "File Format Unrecognized"
Public Const FileDataCorrupt = "File Data Corrupt"
Public Const FileNamingNa = "File Naming NA"
' Directory errors
Public Const DirNotFound = "Dir Not Found"
Public Const DirIoError = "Dir IO Error"
Public Const DirEntryNotFound = "Dir Entry Not Found"
Public Const DirEntryExists = "Dir Entry Exists"
Public Const DirNotEmpty = "Dir Not Empty"
' Property errors