打印
[Atmel]

用SAM-BA或JLINK跑ATSAM4E16的程序(23) USB PHDC

[复制链接]
898|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
何为PHDC
PHDC为personal health care device class ,人类健康关心设备类。

这个类我第一次听说。

基本上同其它的USB例程一样,只不过多了一个a IEEEE11073 stack skeleton,好像这种类就必须得使用这个协议栈。

程序只是在循环处理ieee11073_skeleton_process()

循环程序如下:

int main(void)
{
        irq_initialize_vectors();
        cpu_irq_enable();

        /* Initialize the sleep manager */
        sleepmgr_init();
#if !SAM0
        sysclk_init();
        board_init();
#else
        system_init();
#endif
        ui_init();
        ui_powerdown();

        /* Start USB stack to authorize VBus monitoring */
        udc_start();

        /* The main loop manages only the power mode
         * because the USB management is done by interrupt
         */
        while (true) {
                sleepmgr_enter_sleep();
                if (main_b_phdc_enable) {
                        if (ieee11073_skeleton_process()) {
                                ui_association(true); /* Association Ok */
                        } else {
                                ui_association(false); /* No association */
                        }
                }
        }
}



主处理在这里:

void ui_process(uint16_t framenumber)
{
        static uint8_t cpt_sof = 0;
        bool b_btn_state;
        static bool btn0_last_state = false;
        static bool btn1_last_state = false;

        if ((framenumber % 1000) == 0) {
                LED_On(LED1);
        }
        if ((framenumber % 1000) == 500) {
                LED_Off(LED1);
        }

        /* Scan process running each 20ms */
        cpt_sof++;
        if (20 > cpt_sof) {
                return;
        }

        cpt_sof = 0;

        /* Use buttons to send measures */
        b_btn_state = !ioport_get_pin_level(GPIO_PUSH_BUTTON_1);
        if (b_btn_state != btn0_last_state) {
                btn0_last_state = b_btn_state;
                if (b_btn_state) {
                        ieee11073_skeleton_send_measure_1();
                }
        }
        b_btn_state = !ioport_get_pin_level(GPIO_PUSH_BUTTON_2);
        if (b_btn_state != btn1_last_state) {
                btn1_last_state = b_btn_state;
                if (b_btn_state) {
                        ieee11073_skeleton_send_measure_2();
                }
        }
}
而根据ieee11073_skeleton.c
uint8_t phd_assoc_req[] = {
        0xE2, 0x00,
        0x00, 0x32,
        0x80, 0x00, 0x00, 0x00,
        0x00, 0x01,
        0x00, 0x2A,
        0x50, 0x79,
        0x00, 0x26,
        0x80, 0x00, 0x00, 0x00,
        0x80, 0x00,
        0x80, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00,
        0x00, 0x80, 0x00, 0x00,
        0x00, 0x08,
        0x4C, 0x4E, 0x49, 0x41, 0x47, 0x45, 0x4E, 0x54,
        0x40, 0x00,
        0x00, 0x01, 0x01, 0x00,
        0x00, 0x00, 0x00, 0x00
};

/* ! Sample of measure */
uint8_t phd_measure[] = {
        0xE7, 0x00, 0x00, 0x5A, 0x00, 0x58, 0x12, 0x36, 0x01, 0x01, 0x00, 0x52,
        0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x0D, 0x1D, 0x00, 0x48, 0xF0, 0x00, 0x00, 0x00,
        0x00, 0x04,
        0x00, 0x40, 0x00, 0x01, 0x00, 0x0C, 0xFF, 0x00, 0x02, 0xFA, 0x20, 0x07,
        0x12, 0x06,
        0x12, 0x10, 0x00, 0x00, 0x00, 0x03, 0x00, 0x0C, 0xFF, 0x00, 0x00, 0xF3,
        0x20, 0x09, 0x06, 0x12,
        0x12, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0C, 0xFF, 0x00, 0x02, 0xF8,
        0x20, 0x09, 0x06, 0x12,
        0x20, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x0C, 0xFF, 0x00, 0x00, 0xF2,
        0x20, 0x09, 0x06, 0x12,
        0x20, 0x05, 0x00, 0x00
};

/* ! Device Attributes */
uint8_t phd_attr[] = {
        0xE7, 0x00, 0x00, 0x6E, 0x00, 0x6C, 0x00, 0x02, 0x02, 0x03, 0x00, 0x66,
        0x00, 0x00, 0x00, 0x06,
        0x00, 0x60, 0x0A, 0x5A, 0x00, 0x08, 0x00, 0x01, 0x00, 0x04, 0x10, 0x0F,
        0x00, 0x01, 0x09, 0x28,
        0x00, 0x1A, 0x00, 0x0A, 0x46, 0x72, 0x65, 0x65, 0x73, 0x63, 0x61, 0x6C,
        0x65, 0x20, 0x00, 0x0C, 0x4D, 0x65,
        0x64, 0x69, 0x63, 0x61, 0x6C, 0x20, 0x43, 0x46, 0x56, 0x31, 0x09, 0x84,
        0x00, 0x0A,
        0x00, 0x08, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x0a, 0x44,
        0x00, 0x02, 0x40, 0x00,
        0x09, 0x2D, 0x00, 0x12, 0x00, 0x01, 0x00, 0x0E, 0x00, 0x01, 0x00, 0x00,
        0x00, 0x08, 0x44, 0x45,
        0x31, 0x32, 0x34, 0x35, 0x36, 0x37, 0x09, 0x87, 0x00, 0x08, 0x20, 0x09,
        0x06, 0x12,
        0x12, 0x05, 0x00, 0x00
};



说明该程序是向主机发送人体的测量数据。

当把程序下进去时,再开机会提示安装驱动:



但没有找到驱动,看了提示才明白,得用

CV2.0 and execute Chapter 9 and PHDC tests.




相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2398

主题

6956

帖子

67

粉丝