/* Copyright (c) 2012 Texas Instruments Incorporated. All rights reserved. * Software License Agreement * * Texas Instruments (TI) is supplying this software for use solely and * exclusively on TI's microcontroller products. The software is owned by * TI and/or its suppliers, and is protected under applicable copyright * laws. You may not combine this software with "viral" open-source * software in order to form a larger program. * * THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. * NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT * NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY * CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL * DAMAGES, FOR ANY REASON WHATSOEVER. * * This is part of revision 9453 of the EK-LM4F120XL Firmware Package. */ #include "inc/hw_ints.h" #include "inc/hw_memmap.h" #include "inc/hw_types.h" #include "inc/hw_ssi.h" #include "driverlib/debug.h" #include "driverlib/fpu.h" #include "driverlib/gpio.h" #include "driverlib/interrupt.h" #include "driverlib/pin_map.h" #include "driverlib/sysctl.h" #include "driverlib/systick.h" #include "driverlib/timer.h" #include "driverlib/uart.h" #include "driverlib/rom.h" #include "driverlib/udma.h" #include "driverlib/ssi.h" #include "usblib/usblib.h" #include "usblib/usb-ids.h" #include "usblib/device/usbdevice.h" #include "usblib/device/usbdbulk.h" #include "utils/uartstdio.h" #include "utils/ustdlib.h" #include "usb_bulk_structs.h" #define CRATE_WIDTH 5 #define CRATE_HEIGHT 4 #define CRATES_X 4 #define CRATES_Y 2 #define BUS_COUNT 4 #define BYTES_PER_PIXEL 3 #define BUS_ROWS (CRATES_Y*CRATE_HEIGHT) #define BUS_COLUMNS (CRATES_X*CRATE_WIDTH) #define CRATES_PER_BUS (CRATES_X*CRATES_Y) #define CRATE_SIZE (CRATE_WIDTH*CRATE_HEIGHT) #define BUS_SIZE (CRATES_PER_BUS*CRATE_SIZE*BYTES_PER_PIXEL) unsigned const char const BOTTLE_MAP[CRATE_SIZE] = { 0, 1, 2, 3, 4, 19, 8, 7, 6, 5, 18, 9, 10, 11, 12, 17, 16, 15, 14, 13 }; unsigned const char const CRATE_MAP[CRATES_PER_BUS] = { 6, 4, 2, 0, 7, 5, 3, 1 }; #define SYSTICKS_PER_SECOND 100 #define SYSTICK_PERIOD_MS (1000 / SYSTICKS_PER_SECOND) unsigned char framebuffer[BUS_COUNT*BUS_SIZE]; /* Kick off DMA from RAM to SPI interfaces */ void start_dma(void); unsigned long framebuffer_read(void *fb, unsigned long len); unsigned char ucControlTable[1024] __attribute__ ((aligned(1024))); volatile unsigned long g_ulSysTickCount = 0; #ifdef DEBUG unsigned long g_ulUARTRxErrors = 0; #endif //Debug output is available via UART0 if DEBUG is defined during build. #ifdef DEBUG //Map all debug print calls to UARTprintf in debug builds. #define DEBUG_PRINT UARTprintf #else //Compile out all debug print calls in release builds. #define DEBUG_PRINT while(0) ((int (*)(char *, ...))0) #endif volatile unsigned long g_ulFlags = 0; char *g_pcStatus; static volatile tBoolean g_bUSBConfigured = false; void SysTickIntHandler(void){ g_ulSysTickCount++; } unsigned long RxHandler(void *pvCBData, unsigned long ulEvent, unsigned long ulMsgValue, void *pvMsgData) { switch(ulEvent) { case USB_EVENT_CONNECTED: g_bUSBConfigured = true; UARTprintf("Host connected.\n"); USBBufferFlush(&g_sRxBuffer); break; case USB_EVENT_DISCONNECTED: g_bUSBConfigured = false; UARTprintf("Host disconnected.\n"); break; case USB_EVENT_RX_AVAILABLE: UARTprintf("Handling host data.\n\n"); return framebuffer_read(pvMsgData, ulMsgValue); case USB_EVENT_SUSPEND: case USB_EVENT_RESUME: break; default: break; } return 0; } unsigned long framebuffer_read(void *fb, unsigned long len){ if(len != BUS_COUNT*BUS_COLUMNS*BUS_ROWS) return 0; for(unsigned int bus=0; bus