Added new VirtualSerialMassStorage Device Class Driver demo.
[pub/lufa.git] / Demos / Device / ClassDriver / VirtualSerialMassStorage / Lib / DataflashManager.h
diff --git a/Demos/Device/ClassDriver/VirtualSerialMassStorage/Lib/DataflashManager.h b/Demos/Device/ClassDriver/VirtualSerialMassStorage/Lib/DataflashManager.h
new file mode 100644 (file)
index 0000000..eac0653
--- /dev/null
@@ -0,0 +1,85 @@
+/*\r
+             LUFA Library\r
+     Copyright (C) Dean Camera, 2011.\r
+\r
+  dean [at] fourwalledcubicle [dot] com\r
+           www.lufa-lib.org\r
+*/\r
+\r
+/*\r
+  Copyright 2011  Dean Camera (dean [at] fourwalledcubicle [dot] com)\r
+\r
+  Permission to use, copy, modify, distribute, and sell this\r
+  software and its documentation for any purpose is hereby granted\r
+  without fee, provided that the above copyright notice appear in\r
+  all copies and that both that the copyright notice and this\r
+  permission notice and warranty disclaimer appear in supporting\r
+  documentation, and that the name of the author not be used in\r
+  advertising or publicity pertaining to distribution of the\r
+  software without specific, written prior permission.\r
+\r
+  The author disclaim all warranties with regard to this\r
+  software, including all implied warranties of merchantability\r
+  and fitness.  In no event shall the author be liable for any\r
+  special, indirect or consequential damages or any damages\r
+  whatsoever resulting from loss of use, data or profits, whether\r
+  in an action of contract, negligence or other tortious action,\r
+  arising out of or in connection with the use or performance of\r
+  this software.\r
+*/\r
+\r
+/** \file\r
+ *\r
+ *  Header file for DataflashManager.c.\r
+ */\r
+\r
+#ifndef _DATAFLASH_MANAGER_H_\r
+#define _DATAFLASH_MANAGER_H_\r
+\r
+       /* Includes: */\r
+               #include <avr/io.h>\r
+\r
+               #include "VirtualSerialMassStorage.h"\r
+               #include "Descriptors.h"\r
+\r
+               #include <LUFA/Common/Common.h>\r
+               #include <LUFA/Drivers/USB/USB.h>\r
+               #include <LUFA/Drivers/Board/Dataflash.h>\r
+\r
+       /* Preprocessor Checks: */\r
+               #if (DATAFLASH_PAGE_SIZE % 16)\r
+                       #error Dataflash page size must be a multiple of 16 bytes.\r
+               #endif\r
+\r
+       /* Defines: */\r
+               /** Total number of bytes of the storage medium, comprised of one or more Dataflash ICs. */\r
+               #define VIRTUAL_MEMORY_BYTES                ((uint32_t)DATAFLASH_PAGES * DATAFLASH_PAGE_SIZE * DATAFLASH_TOTALCHIPS)\r
+\r
+               /** Block size of the device. This is kept at 512 to remain compatible with the OS despite the underlying\r
+                *  storage media (Dataflash) using a different native block size. Do not change this value.\r
+                */\r
+               #define VIRTUAL_MEMORY_BLOCK_SIZE           512\r
+\r
+               /** Total number of blocks of the virtual memory for reporting to the host as the device's total capacity. Do not\r
+                *  change this value; change VIRTUAL_MEMORY_BYTES instead to alter the media size.\r
+                */\r
+               #define VIRTUAL_MEMORY_BLOCKS               (VIRTUAL_MEMORY_BYTES / VIRTUAL_MEMORY_BLOCK_SIZE)\r
+\r
+       /* Function Prototypes: */\r
+               void DataflashManager_WriteBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo,\r
+                                                 const uint32_t BlockAddress,\r
+                                                 uint16_t TotalBlocks);\r
+               void DataflashManager_ReadBlocks(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo,\r
+                                                const uint32_t BlockAddress,\r
+                                                uint16_t TotalBlocks);\r
+               void DataflashManager_WriteBlocks_RAM(const uint32_t BlockAddress,\r
+                                                     uint16_t TotalBlocks,\r
+                                                     uint8_t* BufferPtr) ATTR_NON_NULL_PTR_ARG(3);\r
+               void DataflashManager_ReadBlocks_RAM(const uint32_t BlockAddress,\r
+                                                    uint16_t TotalBlocks,\r
+                                                    uint8_t* BufferPtr) ATTR_NON_NULL_PTR_ARG(3);\r
+               void DataflashManager_ResetDataflashProtections(void);\r
+               bool DataflashManager_CheckDataflashOperation(void);\r
+\r
+#endif\r
+\r