module MTP.Foreign where
import Foreign
import Foreign.C
version :: Integer
version = 134533045
newtype FileType = FileType { unFileType :: CInt }
deriving (Eq, Ord, Show)
wav :: FileType
wav = FileType 0
mp3 :: FileType
mp3 = FileType 1
wma :: FileType
wma = FileType 2
ogg :: FileType
ogg = FileType 3
audible :: FileType
audible = FileType 4
mp4 :: FileType
mp4 = FileType 5
undef_audio :: FileType
undef_audio = FileType 6
wmv :: FileType
wmv = FileType 7
avi :: FileType
avi = FileType 8
mpeg :: FileType
mpeg = FileType 9
asf :: FileType
asf = FileType 10
qt :: FileType
qt = FileType 11
undef_video :: FileType
undef_video = FileType 12
jpeg :: FileType
jpeg = FileType 13
jfif :: FileType
jfif = FileType 14
tiff :: FileType
tiff = FileType 15
bmp :: FileType
bmp = FileType 16
gif :: FileType
gif = FileType 17
pict :: FileType
pict = FileType 18
png :: FileType
png = FileType 19
vcalendar1 :: FileType
vcalendar1 = FileType 20
vcalendar2 :: FileType
vcalendar2 = FileType 21
vcard2 :: FileType
vcard2 = FileType 22
vcard3 :: FileType
vcard3 = FileType 23
windowsimageformat :: FileType
windowsimageformat = FileType 24
winexec :: FileType
winexec = FileType 25
text :: FileType
text = FileType 26
html :: FileType
html = FileType 27
firmware :: FileType
firmware = FileType 28
aac :: FileType
aac = FileType 29
mediacard :: FileType
mediacard = FileType 30
flac :: FileType
flac = FileType 31
mp2 :: FileType
mp2 = FileType 32
m4a :: FileType
m4a = FileType 33
doc :: FileType
doc = FileType 34
xml :: FileType
xml = FileType 35
xls :: FileType
xls = FileType 36
ppt :: FileType
ppt = FileType 37
mht :: FileType
mht = FileType 38
jp2 :: FileType
jp2 = FileType 39
jpx :: FileType
jpx = FileType 40
album :: FileType
album = FileType 41
playlist :: FileType
playlist = FileType 42
unknown :: FileType
unknown = FileType 43
newtype ErrorCode = ErrorCode { unErrorCode :: CInt }
deriving (Eq, Show)
general :: ErrorCode
general = ErrorCode 1
noDevice :: ErrorCode
noDevice = ErrorCode 5
storageFull :: ErrorCode
storageFull = ErrorCode 6
connectionFailed :: ErrorCode
connectionFailed = ErrorCode 7
cancelled :: ErrorCode
cancelled = ErrorCode 8
data MTPDevice
data Data
data Callback
data Error_t = Error_t
{ et_errornumber :: CInt
, et_errortext :: CString
, et_next :: Ptr Error_t
}
instance Storable Error_t where
sizeOf _ = (12)
alignment _ = 4
peek ptr = do
en <- (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr
et <- (\hsc_ptr -> peekByteOff hsc_ptr 4) ptr
next <- (\hsc_ptr -> peekByteOff hsc_ptr 8) ptr
return $! Error_t { et_errornumber = en
, et_errortext = et
, et_next = next
}
data File_t = File_t
{ ft_item_id :: CInt
, ft_parent_id :: CInt
, ft_storage_id :: CInt
, ft_filename :: CString
, ft_filesize :: CInt
, ft_filetype :: CInt
, ft_next :: Ptr File_t
}
instance Storable File_t where
sizeOf _ = (36)
alignment _ = 4
peek ptr = do
fid <- (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr
pid <- (\hsc_ptr -> peekByteOff hsc_ptr 4) ptr
sid <- (\hsc_ptr -> peekByteOff hsc_ptr 8) ptr
name <- (\hsc_ptr -> peekByteOff hsc_ptr 12) ptr
size <- (\hsc_ptr -> peekByteOff hsc_ptr 16) ptr
typ <- (\hsc_ptr -> peekByteOff hsc_ptr 28) ptr
next <- (\hsc_ptr -> peekByteOff hsc_ptr 32) ptr
return $! File_t fid pid sid name size typ next
poke ptr ft = do
(\hsc_ptr -> pokeByteOff hsc_ptr 0) ptr (ft_item_id ft)
(\hsc_ptr -> pokeByteOff hsc_ptr 4) ptr (ft_parent_id ft)
(\hsc_ptr -> pokeByteOff hsc_ptr 12) ptr (ft_filename ft)
(\hsc_ptr -> pokeByteOff hsc_ptr 16) ptr (ft_filesize ft)
(\hsc_ptr -> pokeByteOff hsc_ptr 32) ptr (ft_next ft)
data Track_t = Track_t
{ tt_item_id :: CInt
, tt_parent_id :: CInt
, tt_storage_id :: CInt
, tt_title :: CString
, tt_artist :: CString
, tt_composer :: CString
, tt_genre :: CString
, tt_album :: CString
, tt_date :: CString
, tt_filename :: CString
, tt_tracknumber :: CInt
, tt_duration :: CInt
, tt_samplerate :: CInt
, tt_nochannels :: CInt
, tt_wavecodec :: CInt
, tt_bitrate :: CInt
, tt_bitratetype :: CInt
, tt_rating :: CInt
, tt_usecount :: CInt
, tt_filesize :: CInt
, tt_filetype :: CInt
, tt_next :: Ptr Track_t
}
instance Storable Track_t where
sizeOf _ = (92)
alignment _ = 4
peek ptr = do
iid <- (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr
pid <- (\hsc_ptr -> peekByteOff hsc_ptr 4) ptr
sid <- (\hsc_ptr -> peekByteOff hsc_ptr 8) ptr
title <- (\hsc_ptr -> peekByteOff hsc_ptr 12) ptr
artist <- (\hsc_ptr -> peekByteOff hsc_ptr 16) ptr
composer <- (\hsc_ptr -> peekByteOff hsc_ptr 20) ptr
genre <- (\hsc_ptr -> peekByteOff hsc_ptr 24) ptr
alb <- (\hsc_ptr -> peekByteOff hsc_ptr 28) ptr
date <- (\hsc_ptr -> peekByteOff hsc_ptr 32) ptr
fname <- (\hsc_ptr -> peekByteOff hsc_ptr 36) ptr
trackno <- (\hsc_ptr -> peekByteOff hsc_ptr 40) ptr
dur <- (\hsc_ptr -> peekByteOff hsc_ptr 44) ptr
srate <- (\hsc_ptr -> peekByteOff hsc_ptr 48) ptr
chans <- (\hsc_ptr -> peekByteOff hsc_ptr 52) ptr
codec <- (\hsc_ptr -> peekByteOff hsc_ptr 56) ptr
brate <- (\hsc_ptr -> peekByteOff hsc_ptr 60) ptr
bratetype <- (\hsc_ptr -> peekByteOff hsc_ptr 64) ptr
rating <- (\hsc_ptr -> peekByteOff hsc_ptr 66) ptr
count <- (\hsc_ptr -> peekByteOff hsc_ptr 68) ptr
fsize <- (\hsc_ptr -> peekByteOff hsc_ptr 72) ptr
ftype <- (\hsc_ptr -> peekByteOff hsc_ptr 84) ptr
next <- (\hsc_ptr -> peekByteOff hsc_ptr 88) ptr
return $! Track_t iid pid sid title artist composer genre alb
date fname trackno dur srate chans codec brate
bratetype rating count fsize ftype next
poke ptr tt = do
(\hsc_ptr -> pokeByteOff hsc_ptr 0) ptr (tt_item_id tt)
(\hsc_ptr -> pokeByteOff hsc_ptr 4) ptr (tt_parent_id tt)
(\hsc_ptr -> pokeByteOff hsc_ptr 8) ptr (tt_storage_id tt)
(\hsc_ptr -> pokeByteOff hsc_ptr 12) ptr (tt_title tt)
(\hsc_ptr -> pokeByteOff hsc_ptr 16) ptr (tt_artist tt)
(\hsc_ptr -> pokeByteOff hsc_ptr 20) ptr (tt_composer tt)
(\hsc_ptr -> pokeByteOff hsc_ptr 24) ptr (tt_genre tt)
(\hsc_ptr -> pokeByteOff hsc_ptr 28) ptr (tt_album tt)
(\hsc_ptr -> pokeByteOff hsc_ptr 32) ptr (tt_date tt)
(\hsc_ptr -> pokeByteOff hsc_ptr 36) ptr (tt_filename tt)
(\hsc_ptr -> pokeByteOff hsc_ptr 40) ptr (tt_tracknumber tt)
(\hsc_ptr -> pokeByteOff hsc_ptr 44) ptr (tt_duration tt)
(\hsc_ptr -> pokeByteOff hsc_ptr 48) ptr (tt_samplerate tt)
(\hsc_ptr -> pokeByteOff hsc_ptr 52) ptr (tt_nochannels tt)
(\hsc_ptr -> pokeByteOff hsc_ptr 56) ptr (tt_wavecodec tt)
(\hsc_ptr -> pokeByteOff hsc_ptr 60) ptr (tt_bitrate tt)
(\hsc_ptr -> pokeByteOff hsc_ptr 64) ptr (tt_bitratetype tt)
(\hsc_ptr -> pokeByteOff hsc_ptr 66) ptr (tt_rating tt)
(\hsc_ptr -> pokeByteOff hsc_ptr 68) ptr (tt_usecount tt)
(\hsc_ptr -> pokeByteOff hsc_ptr 72) ptr (tt_filesize tt)
(\hsc_ptr -> pokeByteOff hsc_ptr 84) ptr (tt_filetype tt)
(\hsc_ptr -> pokeByteOff hsc_ptr 88) ptr (tt_next tt)
data Folder_t = Folder_t
{ fdt_folder_id :: CInt
, fdt_parent_id :: CInt
, fdt_storage_id :: CInt
, fdt_name :: CString
, fdt_sibling :: Ptr Folder_t
, fdt_child :: Ptr Folder_t
}
instance Storable Folder_t where
sizeOf _ = (24)
alignment _ = 4
peek ptr = do
fid <- (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr
pid <- (\hsc_ptr -> peekByteOff hsc_ptr 4) ptr
sid <- (\hsc_ptr -> peekByteOff hsc_ptr 8) ptr
name <- (\hsc_ptr -> peekByteOff hsc_ptr 12) ptr
sibling <- (\hsc_ptr -> peekByteOff hsc_ptr 16) ptr
child <- (\hsc_ptr -> peekByteOff hsc_ptr 20) ptr
return $! Folder_t { fdt_folder_id = fid
, fdt_parent_id = pid
, fdt_storage_id = sid
, fdt_name = name
, fdt_sibling = sibling
, fdt_child = child
}
poke ptr fdt = do
(\hsc_ptr -> pokeByteOff hsc_ptr 0) ptr (fdt_folder_id fdt)
(\hsc_ptr -> pokeByteOff hsc_ptr 4) ptr (fdt_parent_id fdt)
(\hsc_ptr -> pokeByteOff hsc_ptr 8) ptr (fdt_storage_id fdt)
(\hsc_ptr -> pokeByteOff hsc_ptr 12) ptr (fdt_name fdt)
(\hsc_ptr -> pokeByteOff hsc_ptr 16) ptr (fdt_sibling fdt)
(\hsc_ptr -> pokeByteOff hsc_ptr 20) ptr (fdt_child fdt)
data Playlist_t = Playlist_t
{ pt_playlist_id :: CInt
, pt_parent_id :: CInt
, pt_storage_id :: CInt
, pt_name :: CString
, pt_tracks :: Ptr CInt
, pt_no_tracks :: CInt
, pt_next :: Ptr Playlist_t
}
instance Storable Playlist_t where
sizeOf _ = (28)
alignment _ = 4
peek ptr = do
plid <- (\hsc_ptr -> peekByteOff hsc_ptr 0) ptr
pid <- (\hsc_ptr -> peekByteOff hsc_ptr 4) ptr
sid <- (\hsc_ptr -> peekByteOff hsc_ptr 8) ptr
name <- (\hsc_ptr -> peekByteOff hsc_ptr 12) ptr
tracks <- (\hsc_ptr -> peekByteOff hsc_ptr 16) ptr
ntracks <- (\hsc_ptr -> peekByteOff hsc_ptr 20) ptr
next <- (\hsc_ptr -> peekByteOff hsc_ptr 24) ptr
return $ Playlist_t plid pid sid name tracks ntracks next
poke ptr pt = do
(\hsc_ptr -> pokeByteOff hsc_ptr 0) ptr (pt_playlist_id pt)
(\hsc_ptr -> pokeByteOff hsc_ptr 4) ptr (pt_parent_id pt)
(\hsc_ptr -> pokeByteOff hsc_ptr 8) ptr (pt_storage_id pt)
(\hsc_ptr -> pokeByteOff hsc_ptr 12) ptr (pt_name pt)
(\hsc_ptr -> pokeByteOff hsc_ptr 16) ptr (pt_tracks pt)
(\hsc_ptr -> pokeByteOff hsc_ptr 20) ptr (pt_no_tracks pt)
(\hsc_ptr -> pokeByteOff hsc_ptr 24) ptr (pt_next pt)
foreign import ccall unsafe "LIBMTP_Init" c_init :: IO ()
foreign import ccall unsafe "LIBMTP_Get_First_Device" c_get_first_device
:: IO (Ptr MTPDevice)
foreign import ccall unsafe "LIBMTP_Release_Device" c_release_device
:: Ptr MTPDevice -> IO ()
foreign import ccall unsafe "LIBMTP_Reset_Device" c_reset_device
:: Ptr MTPDevice
-> IO CInt
foreign import ccall unsafe "LIBMTP_Get_Errorstack" c_get_errorstack
:: Ptr MTPDevice
-> IO (Ptr Error_t)
foreign import ccall unsafe "LIBMTP_Clear_Errorstack" c_clear_errorstack
:: Ptr MTPDevice
-> IO ()
foreign import ccall unsafe "LIBMTP_Get_Manufacturername"
c_get_manufacturername :: Ptr MTPDevice -> IO CString
foreign import ccall unsafe "LIBMTP_Get_Modelname"
c_get_modelname :: Ptr MTPDevice -> IO CString
foreign import ccall unsafe "LIBMTP_Get_Serialnumber"
c_get_serialnumber :: Ptr MTPDevice -> IO CString
foreign import ccall unsafe "LIBMTP_Get_Friendlyname"
c_get_friendlyname :: Ptr MTPDevice -> IO CString
foreign import ccall unsafe "LIBMTP_Get_Deviceversion" c_get_deviceversion
:: Ptr MTPDevice -> IO CString
foreign import ccall unsafe "LIBMTP_Get_Batterylevel" c_get_batterylevel
:: Ptr MTPDevice
-> Ptr CInt
-> Ptr CInt
-> IO CInt
foreign import ccall unsafe "LIBMTP_Get_Supported_Filetypes"
c_get_supported_filetypes :: Ptr MTPDevice
-> Ptr CInt
-> Ptr CInt
-> IO CInt
foreign import ccall unsafe "LIBMTP_Get_Filelisting_With_Callback" c_get_filelisting
:: Ptr MTPDevice
-> Ptr Callback
-> Ptr Data
-> IO (Ptr File_t)
foreign import ccall unsafe "LIBMTP_Track_Exists" c_track_exists
:: Ptr MTPDevice
-> CInt
-> IO CInt
foreign import ccall unsafe "LIBMTP_Get_File_To_File" c_get_file_to_file
:: Ptr MTPDevice
-> CInt
-> CString
-> Ptr Callback
-> Ptr Data
-> IO CInt
foreign import ccall unsafe "LIBMTP_Send_File_From_File" c_send_file_from_file
:: Ptr MTPDevice
-> CString
-> Ptr Callback
-> Ptr Data
-> IO CInt
foreign import ccall unsafe "LIBMTP_Get_File_To_File_Descriptor"
c_get_file_to_file_descriptor :: Ptr MTPDevice
-> CInt
-> Ptr CFile
-> Ptr Callback
-> Ptr Data
-> IO CInt
foreign import ccall unsafe "LIBMTP_Send_File_From_File_Descriptor"
c_send_file_from_file_descriptor :: Ptr MTPDevice
-> Ptr CFile
-> Ptr File_t
-> Ptr Callback
-> Ptr Data
-> IO CInt
foreign import ccall unsafe "LIBMTP_Set_File_Name" c_set_file_name
:: Ptr MTPDevice
-> Ptr File_t
-> CString
-> IO CInt
foreign import ccall unsafe "LIBMTP_Get_Tracklisting_With_Callback" c_get_tracklisting
:: Ptr MTPDevice
-> Ptr Callback
-> Ptr Data
-> IO (Ptr Track_t)
foreign import ccall unsafe "LIBMTP_Get_Track_To_File" c_get_track_to_file
:: Ptr MTPDevice
-> CInt
-> CString
-> Ptr Callback
-> Ptr Data
-> IO CInt
foreign import ccall unsafe "LIBMTP_Send_Track_From_File" c_send_track_from_file
:: Ptr MTPDevice
-> CString
-> (Ptr Track_t)
-> Ptr Callback
-> Ptr Data
-> IO CInt
foreign import ccall unsafe "LIBMTP_Send_Track_From_File_Descriptor"
c_send_track_from_file_descriptor :: Ptr MTPDevice
-> Ptr CFile
-> Ptr Track_t
-> Ptr Callback
-> Ptr Data
-> IO CInt
foreign import ccall unsafe "LIBMTP_Get_Track_To_File_Descriptor"
c_get_track_to_file_descriptor :: Ptr MTPDevice
-> CInt
-> Ptr CFile
-> Ptr Callback
-> Ptr Data
-> IO CInt
foreign import ccall unsafe "LIBMTP_Get_Trackmetadata"
c_get_trackmetadata :: Ptr MTPDevice
-> CInt
-> IO (Ptr Track_t)
foreign import ccall unsafe "LIBMTP_Update_Track_Metadata"
c_update_track_metadata :: Ptr MTPDevice
-> Ptr Track_t
-> IO CInt
foreign import ccall unsafe "LIBMTP_Set_Track_Name" c_set_track_name
:: Ptr MTPDevice
-> Ptr Track_t
-> CString
-> IO CInt
foreign import ccall unsafe "LIBMTP_Create_Folder" c_create_folder
:: Ptr MTPDevice
-> CString
-> CInt
-> CInt
-> IO CInt
foreign import ccall unsafe "LIBMTP_Get_Folder_List" c_folder_list
:: Ptr MTPDevice
-> IO (Ptr Folder_t)
foreign import ccall unsafe "LIBMTP_Set_Folder_Name" c_set_folder_name
:: Ptr MTPDevice
-> Ptr Folder_t
-> CString
-> IO CInt
foreign import ccall unsafe "LIBMTP_Get_Playlist_List"
c_get_playlist_list :: Ptr MTPDevice
-> IO (Ptr Playlist_t)
foreign import ccall unsafe "LIBMTP_Get_Playlist"
c_get_playlist :: Ptr MTPDevice
-> CInt
-> IO (Ptr Playlist_t)
foreign import ccall unsafe "LIBMTP_Create_New_Playlist"
c_create_new_playlist :: Ptr MTPDevice
-> Ptr Playlist_t
-> IO CInt
foreign import ccall unsafe "LIBMTP_Update_Playlist"
c_update_playlist :: Ptr MTPDevice
-> Ptr Playlist_t
-> IO CInt
foreign import ccall unsafe "LIBMTP_Set_Playlist_Name"
c_set_playlist_name :: Ptr MTPDevice
-> Ptr Playlist_t
-> CString
-> IO CInt
foreign import ccall unsafe "LIBMTP_Delete_Object"
c_delete_object :: Ptr MTPDevice
-> CInt
-> IO CInt
foreign import ccall unsafe "LIBMTP_Set_Object_Filename"
c_set_object_filename :: Ptr MTPDevice
-> CInt
-> CString
-> IO CInt