I am working with the sw_usb_audio_sw_v8_1_0 framework and both XUD_UserSuspend and XUD_UserResume seem not to be overridden properly in the XUA lib.
My project highly depends on the UserHostActive function being called properly from within the XUA lib when the USB is connected and disconnected from the PC.
When the code is left untouched in the "lib_xua\lib_xua\src\core\xuduser\xuduser.c"
Code: Select all
// Copyright 2013-2023 XMOS LIMITED.
// This Software is subject to the terms of the XMOS Public Licence: Version 1.
#include "xua.h"
#if XUA_USB_EN
#include "hostactive.h"
#include "audiostream.h"
/* Implementations over-riding empty versions in lib_xud/sec/core/XUD_User.c */
void XUD_UserSuspend(void) __attribute__ ((weak));
void XUD_UserSuspend(void)
{
UserAudioStreamStop();
UserHostActive(0);
}
void XUD_UserResume(void) __attribute__ ((weak));
void XUD_UserResume(void)
{
unsigned config;
asm("ldw %0, dp[g_currentConfig]" : "=r" (config):);
if(config == 1)
{
UserHostActive(1);
}
}
#endif /* XUA_USB_EN*/
When I modify the code to comment out the weak attributes
Code: Select all
// Copyright 2013-2023 XMOS LIMITED.
// This Software is subject to the terms of the XMOS Public Licence: Version 1.
#include "xua.h"
#if XUA_USB_EN
#include "hostactive.h"
#include "audiostream.h"
/* Implementations over-riding empty versions in lib_xud/sec/core/XUD_User.c */
// void XUD_UserSuspend(void) __attribute__ ((weak));
void XUD_UserSuspend(void)
{
UserAudioStreamStop();
UserHostActive(0);
}
// void XUD_UserResume(void) __attribute__ ((weak));
void XUD_UserResume(void)
{
unsigned config;
asm("ldw %0, dp[g_currentConfig]" : "=r" (config):);
if(config == 1)
{
UserHostActive(1);
}
}
#endif /* XUA_USB_EN*/
The UserHostActive is then called properly whenever the USB is connected/disconnected from the PC.
Is there something I am missing or is that a bug?