X-Git-Url: http://rtime.felk.cvut.cz/gitweb/lincan.git/blobdiff_plain/2fc9be1994ae2be41a743f5c4b3aa38d65efaffb..a73d6ffea8948a9abc9bfb32728bb255cec18317:/embedded/app/usbcan/usb_vend.c diff --git a/embedded/app/usbcan/usb_vend.c b/embedded/app/usbcan/usb_vend.c index 29cd74b..1f5d41f 100644 --- a/embedded/app/usbcan/usb_vend.c +++ b/embedded/app/usbcan/usb_vend.c @@ -2,9 +2,9 @@ #include #include -#include +//#include #include "./can/can.h" -#include "./can/can_sysless.h" +#include "./can/can_sysdep.h" #include "./can/main.h" #include "./can/devcommon.h" #include "./usb/usb_vend.h" @@ -14,6 +14,10 @@ #include #endif +// lpc17xx debug +#include "./can/lpc17xx_can.h" +// lpc17xx debug - end + extern struct canuser_t *canuser; extern uint8_t vendor_ret; @@ -97,6 +101,51 @@ nodata: return -1; } +int set_canbtr_complete_fnc(struct usb_ep_t *ep, int status){ + int dest_chip; + + uint32_t brp, sjw, tseg1, tseg2; + + struct can_lmc1_chip_data *chip_data=NULL; + + usb_device_t *udev=ep->udev; + unsigned char *data=ep->ptr - ep->actual; + + if (udev->request.bRequest==USBCAN_VENDOR_SET_CANBTR){ + dest_chip=(udev->request.wIndex); + if ((dest_chip>=MAX_TOT_CHIPS)||(dest_chip<0)) + goto error; + if (!chips_p[dest_chip]) + goto error; + if ((chip_data=((struct can_lmc1_chip_data*)(chips_p[dest_chip]->chip_data)))==NULL) + goto nodata; + + brp=*(uint32_t *)(data); + sjw=*(uint32_t *)(data+4); + tseg1=*(uint32_t *)(data+8); + tseg2=*(uint32_t *)(data+12); + #if __BYTE_ORDER == __BIG_ENDIAN + brp = bswap_32(brp); + sjw = bswap_32(sjw); + tseg1 = bswap_32(tseg1); + tseg2 = bswap_32(tseg2); + #endif + + + printf("BRP: %d, SJW: %d, TSEG1: %d, TSEG2: %d \n", brp, sjw, tseg1, tseg2); + CAN_set_bittiming(chips_p[dest_chip], brp--, sjw--, tseg1--, tseg2--); + +// if (chips_p[dest_chip]->chipspecops->baud_rate(chips_p[dest_chip], rate, chips_p[dest_chip]->clock, sjw, sampl_pt, flags)<0) +// goto error; + chip_data->flags |= CAN_LMC1_CHIP_CANBTR_SET; + } + return 0; +error: + chip_data->flags &= ~CAN_LMC1_CHIP_CANBTR_SET; +nodata: + return -1; +} + int usbcan_vendor(usb_device_t *udev) { // wIndex, wValue, bRequest, wLength @@ -110,6 +159,13 @@ int usbcan_vendor(usb_device_t *udev) return -1; // Should look like ok (0) or stall (-1)? switch ( udev->request.bRequest) { + + //lpc17xx debug + case USBCAN_VENDOR_SET_CANBTR: + udev->ep0.complete_fnc=set_canbtr_complete_fnc; + return 1; + //lpc17xx debug - end + case USBCAN_VENDOR_EXT_MASK_SET: udev->ep0.complete_fnc=set_ext_mask_complete_fnc; return 1;