1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
volatile int8_t configuration = -1;
void udc_tick_task(void)
{
    uint32_t dev_info = DEV_INFO;

    /* This tick task polls for DEV_EN bit set in DEV_INFO  register
     * as well as tracks current requested configuration
     * (DEV_INFO [11:8]). On state change it notifies usb stack
     * about it.
     *
     * It is registered on usb connection and removed on usb
     * extraction.
     */

    if (dev_info & DEV_EN)
    {
        if (configuration != ((dev_info >> 8) & 0x0f))
        {
            /* Configuration has changed */
            configuration = ((dev_info >> 8) & 0x0f);

            /* Notify usb stack somehow */
        }
    }
}