With VP5300, how do I know the card is inserted or not after the Transaction started?

The VP5300 has the ability to broadcast card insert/removal notifications, even during a transaction. If you look in USDK demo, it is Device-> Start Listen Notifications. Once that is on, you will get a callback for every card state change: Inserted, seated, removed.

IDT_Device.SharedController.device_listenForNotifications(true);

Send "false" to turn them back off.

Once enabled, you will get all notifications to your main message callback as a DeviceState.Notification:

                case DeviceState.Notification:
                    if (cardData.Notification == EVENT_NOTIFICATION_Types.EVENT_NOTIFICATION_Card_Inserted_Not_Seated)
                    {
                        SetOutputText(IP2 + " Notification: Card inserted but not Seated\n");
                    }
                    if (cardData.Notification == EVENT_NOTIFICATION_Types.EVENT_NOTIFICATION_Card_Removed)
                    {
                        SetOutputText(IP2 + " Notification: Card Removed\n");
                    }
                    if (cardData.Notification == EVENT_NOTIFICATION_Types.EVENT_NOTIFICATION_Card_Not_Seated)
                    {
                        SetOutputText(IP2 + " Notification: Card not Seated\n");
                    }

                    if (cardData.Notification == EVENT_NOTIFICATION_Types.EVENT_NOTIFICATION_Card_Seated)
                    {
                        SetOutputText(IP2 + " Notification: Card Seated\n");
                    }

                    if (cardData.Notification == EVENT_NOTIFICATION_Types.EVENT_NOTIFICATION_Swipe_Card)
                    {
                        SetOutputText(IP2 + " Notification: Swipe Card\n");
                    }