X-Git-Url: http://rtime.felk.cvut.cz/gitweb/lincan.git/blobdiff_plain/8bb61362e6640738a252b1d7cdf325617fd80926..6b854a1ee07ddd8638beebf0076c866df50881eb:/embedded/app/usbcan/main.c diff --git a/embedded/app/usbcan/main.c b/embedded/app/usbcan/main.c index d28cc13..205ae35 100644 --- a/embedded/app/usbcan/main.c +++ b/embedded/app/usbcan/main.c @@ -15,8 +15,16 @@ #include #include -#include "can/can.h" -#include "can/sja1000p.h" +#include "./can/can.h" +#include "./can/sja1000p.h" +#include "./can/main.h" + +#include "./can/can_sysdep.h" +#include "./can/modparms.h" +#include "./can/devcommon.h" + +#include "./can/ul_usb1.h" +//#include "./can/setup.h" #define MASK_EP1RX 0x01 #define MASK_EP1TX 0x02 @@ -53,6 +61,13 @@ volatile uint8_t bootloader_run; int processlocal; +int baudrate[MAX_TOT_CHIPS]; +struct canhardware_t canhardware; +struct canhardware_t *hardware_p=&canhardware; +struct canchip_t *chips_p[MAX_TOT_CHIPS]; +struct msgobj_t *objects_p[MAX_TOT_MSGOBJS]; + + /** SOMETHING BAD HAPPENED */ @@ -96,6 +111,10 @@ void timer_10ms(void) /***********************************/ int main(void) { + struct candevice_t *candev; + struct canchip_t *chip; + int chipnr,bd; + // volatile int i=0; bootloader_run=0; /***********************************/ @@ -106,12 +125,79 @@ int main(void) SET_OUT_PIN(LED_PORT,LED_ERR); CLR_OUT_PIN(LED_PORT,LED_GP); - //******************** - // USB init - memset( &usb_device, 0, sizeof( usb_device)); - usb_device.id = 1; - usb_device.init = usb_lpc_init; - usb_debug_set_level(DEBUG_LEVEL_NONE); + /// ************************* + /// CAN device initialization + + baudrate[0]=1000; + + canqueue_kern_initialize(); + + hardware_p->nr_boards=1; + + candev=(struct candevice_t *)malloc(sizeof(struct candevice_t)); + if (candev==NULL) sys_err(); + memset(candev, 0, sizeof(struct candevice_t)); + + hardware_p->candevice[0]=candev; + candev->candev_idx=0; + candev->io_addr=0; + candev->dev_base_addr=0; + + candev->hwspecops=(struct hwspecops_t *)malloc(sizeof(struct hwspecops_t)); + if (candev->hwspecops==NULL) sys_err(); + memset(candev->hwspecops, 0, sizeof(struct hwspecops_t)); + + ul_usb1_register(candev->hwspecops); + + bd=baudrate[0]; + if (candev->hwspecops->init_hw_data(candev)) sys_err(); + /* Alocate and initialize the chip structures */ + for (chipnr=0; chipnr < candev->nr_all_chips; chipnr++) { +/* if(chipnrhwspecops->request_io(candev)) + sys_err(); + candev->flags|=CANDEV_IO_RESERVED; + if (candev->hwspecops->reset(candev)) + sys_err(); + for(chipnr=0; chipnrnr_all_chips; chipnr++) { + if((chip=candev->chip[chipnr])==NULL) + continue; + + if(chip->chipspecops->attach_to_chip(chip)<0) { +// CANMSG("Initial attach to the chip HW failed\n"); + sys_err(); + } + + chip->flags |= CHIP_ATTACHED; + +// Interrupts from chip are served in main cycle +/* if(can_chip_setup_irq(chip)<0) { +// CANMSG("Error to setup chip IRQ\n"); + sys_err(); + }*/ + } + + if (candev->flags & CANDEV_PROGRAMMABLE_IRQ) + if (candev->hwspecops->program_irq(candev)){ +// CANMSG("Error to program board interrupt\n"); + sys_err(); + } + + + + /// *************************************** + /// CAN device initialization - client side + + ///********* + /// USB init + + memset( &usb_device, 0, sizeof( usb_device)); + usb_device.id = 1; + usb_device.init = usb_lpc_init; + usb_debug_set_level(DEBUG_LEVEL_NONE); usb_device.cntep = 3; usb_device.ep = eps; @@ -126,8 +212,8 @@ int main(void) // usb_device.vendor_fnc=usb_loader; - usb_init(&usb_device); - usb_connect(&usb_device); + usb_init(&usb_device); + usb_connect(&usb_device); can_init(); usb_can_send=1;