@@ -79,14 +79,10 @@ typedef struct {
79
79
//--------------------------------------------------------------------+
80
80
// Checker
81
81
static mtp_phase_type_t mtpd_chk_generic (const char * func_name , const bool err_cd , const uint16_t ret_code , const char * message );
82
- static mtp_phase_type_t mtpd_chk_session_open (const char * func_name );
83
82
84
83
// MTP commands
85
84
static mtp_phase_type_t mtpd_handle_cmd (mtpd_interface_t * p_mtp );
86
85
static mtp_phase_type_t mtpd_handle_data (void );
87
- static mtp_phase_type_t mtpd_handle_cmd_close_session (void );
88
- static mtp_phase_type_t mtpd_handle_cmd_get_object (void );
89
- static mtp_phase_type_t mtpd_handle_dti_get_object (void );
90
86
static mtp_phase_type_t mtpd_handle_cmd_delete_object (void );
91
87
static mtp_phase_type_t mtpd_handle_cmd_send_object_info (void );
92
88
static mtp_phase_type_t mtpd_handle_dto_send_object_info (void );
@@ -272,6 +268,7 @@ bool mtpd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t event, uint32_t
272
268
break ;
273
269
}
274
270
271
+ #if 0
275
272
case MTP_PHASE_DATA_IN :
276
273
p_mtp -> xferred_len += xferred_bytes ;
277
274
p_mtp -> handled_len = p_mtp -> xferred_len ;
@@ -333,16 +330,17 @@ bool mtpd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t event, uint32_t
333
330
} else if (p_mtp -> handled_len == 0 ) {
334
331
// First data block includes container header + container data
335
332
TU_ASSERT (usbd_edpt_xfer (rhport , p_mtp -> ep_out ,
336
- (uint8_t * ) p_container + p_mtp -> xferred_len ,
333
+ (uint8_t * ) p_container + p_mtp -> xferred_len ,
337
334
(uint16_t )TU_MIN (p_mtp -> total_len - p_mtp -> xferred_len , CFG_MTP_EP_SIZE )));
338
335
} else {
339
336
// Successive data block includes only container data
340
337
TU_ASSERT (usbd_edpt_xfer (rhport , p_mtp -> ep_out ,
341
- ((uint8_t * )(& p_container -> data )) + p_mtp -> xferred_len - p_mtp -> handled_len ,
342
- (uint16_t )TU_MIN (p_mtp -> total_len - p_mtp -> xferred_len , CFG_MTP_EP_SIZE )));
338
+ ((uint8_t * )(& p_container -> data )) + p_mtp -> xferred_len - p_mtp -> handled_len ,
339
+ (uint16_t )TU_MIN (p_mtp -> total_len - p_mtp -> xferred_len , CFG_MTP_EP_SIZE )));
343
340
}
344
341
}
345
342
break ;
343
+ #endif
346
344
347
345
case MTP_PHASE_RESPONSE_QUEUED :
348
346
// response phase is complete -> prepare for new command
@@ -391,12 +389,16 @@ mtp_phase_type_t mtpd_handle_cmd(mtpd_interface_t* p_mtp) {
391
389
TU_LOG_DRV (" MTP command: MTP_OP_GET_DEVICE_INFO\n" );
392
390
tud_mtp_device_info_t dev_info = {
393
391
.standard_version = 100 ,
394
- .mtp_vendor_extension_id = 0xFFFFFFFFU ,
392
+ .mtp_vendor_extension_id = 6 , // MTP specs say 0xFFFFFFFF but libMTP check for value 6
395
393
.mtp_version = 100 ,
394
+ #ifdef CFG_TUD_MTP_DEVICEINFO_EXTENSIONS
396
395
.mtp_extensions = {
397
396
.count = sizeof (CFG_TUD_MTP_DEVICEINFO_EXTENSIONS ),
398
397
.utf16 = { 0 }
399
398
},
399
+ #else
400
+ .mtp_extensions = 0 ,
401
+ #endif
400
402
.functional_mode = 0x0000 ,
401
403
.supported_operations = {
402
404
.count = TU_ARGS_NUM (CFG_TUD_MTP_DEVICEINFO_SUPPORTED_OPERATIONS ),
@@ -419,9 +421,11 @@ mtp_phase_type_t mtpd_handle_cmd(mtpd_interface_t* p_mtp) {
419
421
.arr = { CFG_TUD_MTP_DEVICEINFO_PLAYBACK_FORMATS }
420
422
}
421
423
};
424
+ #ifdef CFG_TUD_MTP_DEVICEINFO_EXTENSIONS
422
425
for (uint8_t i = 0 ; i < dev_info .mtp_extensions .count ; i ++ ) {
423
426
dev_info .mtp_extensions .utf16 [i ] = (uint16_t )CFG_TUD_MTP_DEVICEINFO_EXTENSIONS [i ];
424
427
}
428
+ #endif
425
429
p_container -> len = MTP_CONTAINER_HEADER_LENGTH + sizeof (tud_mtp_device_info_t );
426
430
p_container -> type = MTP_CONTAINER_TYPE_DATA_BLOCK ;
427
431
p_container -> code = MTP_OP_GET_DEVICE_INFO ;
@@ -437,7 +441,7 @@ mtp_phase_type_t mtpd_handle_cmd(mtpd_interface_t* p_mtp) {
437
441
438
442
case MTP_OP_CLOSE_SESSION :
439
443
TU_LOG_DRV (" MTP command: MTP_OP_CLOSE_SESSION\n" );
440
- return mtpd_handle_cmd_close_session () ;
444
+ break ;
441
445
442
446
case MTP_OP_GET_STORAGE_IDS :
443
447
TU_LOG_DRV (" MTP command: MTP_OP_GET_STORAGE_IDS\n" );
@@ -457,7 +461,8 @@ mtp_phase_type_t mtpd_handle_cmd(mtpd_interface_t* p_mtp) {
457
461
458
462
case MTP_OP_GET_OBJECT :
459
463
TU_LOG_DRV (" MTP command: MTP_OP_GET_OBJECT\n" );
460
- return mtpd_handle_cmd_get_object ();
464
+ break ;
465
+
461
466
case MTP_OP_DELETE_OBJECT :
462
467
TU_LOG_DRV (" MTP command: MTP_OP_DELETE_OBJECT\n" );
463
468
return mtpd_handle_cmd_delete_object ();
@@ -495,9 +500,6 @@ mtp_phase_type_t mtpd_handle_data(void)
495
500
496
501
switch (p_container -> code )
497
502
{
498
- case MTP_OP_GET_OBJECT :
499
- TU_LOG_DRV (" MTP command: MTP_OP_GET_OBJECT-DATA_IN\n" );
500
- return mtpd_handle_dti_get_object ();
501
503
case MTP_OP_SEND_OBJECT_INFO :
502
504
TU_LOG_DRV (" MTP command: MTP_OP_SEND_OBJECT_INFO-DATA_OUT\n" );
503
505
return mtpd_handle_dto_send_object_info ();
@@ -511,79 +513,6 @@ mtp_phase_type_t mtpd_handle_data(void)
511
513
return true;
512
514
}
513
515
514
-
515
- mtp_phase_type_t mtpd_handle_cmd_close_session (void )
516
- {
517
- mtp_generic_container_t * p_container = & _mtpd_epbuf .container ;
518
- uint32_t session_id = p_container -> data [0 ];
519
-
520
- mtp_response_t res = tud_mtp_storage_close_session (session_id );
521
-
522
- _mtpd_itf .session_id = session_id ;
523
-
524
- p_container -> len = MTP_CONTAINER_HEADER_LENGTH ;
525
- p_container -> type = MTP_CONTAINER_TYPE_RESPONSE_BLOCK ;
526
- p_container -> code = res ;
527
-
528
- return MTP_PHASE_RESPONSE ;
529
- }
530
-
531
- mtp_phase_type_t mtpd_handle_cmd_get_object (void )
532
- {
533
- mtp_generic_container_t * p_container = & _mtpd_epbuf .container ;
534
- _mtpd_get_object_handle = p_container -> data [0 ];
535
-
536
- // Continue with DATA-IN
537
- return mtpd_handle_dti_get_object ();
538
- }
539
-
540
- mtp_phase_type_t mtpd_handle_dti_get_object (void )
541
- {
542
- mtp_response_t res ;
543
- mtp_phase_type_t phase ;
544
- uint32_t file_size = 0 ;
545
- mtp_generic_container_t * p_container = & _mtpd_epbuf .container ;
546
- res = tud_mtp_storage_object_size (_mtpd_get_object_handle , & file_size );
547
- if ((phase = mtpd_chk_generic (__func__ , (res != MTP_RESP_OK ), res , "" )) != MTP_PHASE_NONE ) {
548
- return phase ;
549
- }
550
- p_container -> len = MTP_CONTAINER_HEADER_LENGTH + file_size ;
551
- p_container -> type = MTP_CONTAINER_TYPE_DATA_BLOCK ;
552
- p_container -> code = MTP_OP_GET_OBJECT ;
553
-
554
- uint32_t buffer_size ;
555
- uint32_t read_count ;
556
- // Data block must be multiple of EP size
557
- if (_mtpd_itf .handled_len == 0 )
558
- {
559
- // First data block: include container header
560
- buffer_size = ((MTP_MAX_PACKET_SIZE + MTP_CONTAINER_HEADER_LENGTH ) / CFG_MTP_EP_SIZE ) * CFG_MTP_EP_SIZE - MTP_CONTAINER_HEADER_LENGTH ;
561
- res = tud_mtp_storage_object_read (_mtpd_get_object_handle , (void * )& p_container -> data , buffer_size , & read_count );
562
- if ((phase = mtpd_chk_generic (__func__ , (res != MTP_RESP_OK ), res , "" )) != MTP_PHASE_NONE ) {
563
- return phase ;
564
- }
565
- _mtpd_itf .queued_len = MTP_CONTAINER_HEADER_LENGTH + read_count ;
566
- }
567
- else
568
- {
569
- // Successive data block: consider only container data
570
- buffer_size = (MTP_MAX_PACKET_SIZE / CFG_MTP_EP_SIZE ) * CFG_MTP_EP_SIZE ;
571
- res = tud_mtp_storage_object_read (_mtpd_get_object_handle , (void * )& p_container -> data , buffer_size , & read_count );
572
- if ((phase = mtpd_chk_generic (__func__ , (res != MTP_RESP_OK ), res , "" )) != MTP_PHASE_NONE ) {
573
- return phase ;
574
- }
575
- _mtpd_itf .queued_len = read_count ;
576
- }
577
-
578
- // File completed
579
- if (read_count < buffer_size )
580
- {
581
- tud_mtp_storage_object_done ();
582
- }
583
-
584
- return MTP_PHASE_DATA_IN ;
585
- }
586
-
587
516
mtp_phase_type_t mtpd_handle_cmd_delete_object (void )
588
517
{
589
518
mtp_generic_container_t * p_container = & _mtpd_epbuf .container ;
@@ -689,21 +618,6 @@ mtp_phase_type_t mtpd_handle_cmd_format_store(void)
689
618
//--------------------------------------------------------------------+
690
619
// Checker
691
620
//--------------------------------------------------------------------+
692
- mtp_phase_type_t mtpd_chk_session_open (const char * func_name )
693
- {
694
- (void )func_name ;
695
- mtp_generic_container_t * p_container = & _mtpd_epbuf .container ;
696
- if (_mtpd_itf .session_id == 0 )
697
- {
698
- TU_LOG_DRV (" MTP error: %s session not open\n" , func_name );
699
- p_container -> type = MTP_CONTAINER_TYPE_RESPONSE_BLOCK ;
700
- p_container -> code = MTP_RESP_SESSION_NOT_OPEN ;
701
- p_container -> len = MTP_CONTAINER_HEADER_LENGTH ;
702
- return MTP_PHASE_RESPONSE ;
703
- }
704
- return MTP_PHASE_NONE ;
705
- }
706
-
707
621
mtp_phase_type_t mtpd_chk_generic (const char * func_name , const bool err_cd , const uint16_t ret_code , const char * message )
708
622
{
709
623
(void )func_name ;
0 commit comments