- Main Page
- Modules
- Data Structures
- Files
- Related Pages

# ctrl_access.c File Reference

`#include "config.h"`
`#include "ctrl_access.h"`
`#include "modules/file_system/fat.h"`

Include dependency graph for ctrl_access.c:

Go to the source code of this file.

## Defines
#define | LUN_0_EN 1
| Computed the maximum of static lun (don't add the lun of Mass Storage in mode USB Host).
#define | LUN_1_EN 1
#define | LUN_2_EN 1
#define | LUN_3_EN 1
#define | LUN_4_EN 1
#define | LUN_5_EN 1
#define | LUN_6_EN 1
#define | LUN_7_EN 1
#define | LUN_USB_EN 1
#define | LUN_ID_0 (0)
#define | LUN_ID_1 (LUN_0_EN)
#define | LUN_ID_2 (LUN_0_EN+LUN_1_EN)
#define | LUN_ID_3 (LUN_0_EN+LUN_1_EN+LUN_2_EN)
#define | LUN_ID_4 (LUN_0_EN+LUN_1_EN+LUN_2_EN+LUN_3_EN)
#define | LUN_ID_5 (LUN_0_EN+LUN_1_EN+LUN_2_EN+LUN_3_EN+LUN_4_EN)
#define | LUN_ID_6 (LUN_0_EN+LUN_1_EN+LUN_2_EN+LUN_3_EN+LUN_4_EN+LUN_5_EN)
#define | LUN_ID_7 (LUN_0_EN+LUN_1_EN+LUN_2_EN+LUN_3_EN+LUN_4_EN+LUN_5_EN+LUN_6_EN)
#define | MAX_LUN (LUN_0_EN+LUN_1_EN+LUN_2_EN+LUN_3_EN+LUN_4_EN+LUN_5_EN+LUN_6_EN+LUN_7_EN)
#define | LUN_ID_USB (MAX_LUN)
## Functions
U8 | get_nb_lun ()
| This function return the number of logical unit.
U8 | get_cur_lun ()
| This function return the current logical unit.
Ctrl_status | mem_test_unit_ready (U8 lun)
| This function test the state of memory, and start the initialisation of the memory.
Ctrl_status | mem_read_capacity (U8 lun, U32 _MEM_TYPE_SLOW_ *u32_last_sector)
| This function return the capacity of the memory.
U8 | mem_sector_size (U8 lun)
| This function return the sector size of the memory.
Bool | mem_wr_protect (U8 lun)
| This function return is the write protected mode.
Bool | mem_removal (U8 lun)
| This function inform about the memory type.
U8 code * | mem_name (U8 lun)
| This function returns a pointer to the LUN name.
Ctrl_status | memory_2_usb (U8 lun, U32 addr, U16 nb_sector)
| This function tranfer a data from memory to usb.
Ctrl_status | usb_2_memory (U8 lun, U32 addr, U16 nb_sector)
| This function transfer a data from usb to memory.
Ctrl_status | memory_2_ram (U8 lun, const U32 _MEM_TYPE_SLOW_ addr, U8 _MEM_TYPE_SLOW_ *ram)
| Interface for RAM.
Ctrl_status | ram_2_memory (U8 lun, const U32 _MEM_TYPE_SLOW_ addr, U8 _MEM_TYPE_SLOW_ *ram)
| This function transfer a data from ram to memory.
U8 | stream_mem_to_mem (U8 src_lun, U32 src_addr, U8 dest_lun, U32 dest_addr, U16 nb_sector)
| This function copy a data from memory to other memory.
Ctrl_status | stream_state (U8 Id)
| Returns the state on a data transfer.
U16 | stream_stop (U8 Id)
| Stop the data transfer.
## Variables
U8 code | lun0_name [] = "VIRTUAL_MEM_ON_CHIP"
U8 code | lun1_name [] = "\"NAND Flash\""
U8 code | lun2_name [] = "\"On board data flash\""
U8 code | lun3_name [] = "\"MMC\""
U8 code | lun4_name [] = LUN_4_NAME
U8 code | lun5_name [] = LUN_5_NAME
U8 code | lun6_name [] = LUN_6_NAME
U8 code | lun7_name [] = LUN_7_NAME
U8 code | lunusb_name [] = "\"USB Remote memory\""

## Detailed Description

This file contains the interface :

- between MEMORY <-> USB (chip in USB device mode)
- between MEMORY* <-> RAM (e.g. Embedded FileSystem control) in this case the memory may be a USB MS device connected on the USB host of the chip

- Compiler: IAR EWAVR and GNU GCC for AVR
- Supported devices: AT90USB1287, AT90USB1286, AT90USB647, AT90USB646

Author:
  Atmel Corporation: http://www.atmel.com
  Support and FAQ: http://support.atmel.no/

Definition in file ctrl_access.c.

## Define Documentation

#define LUN_0_EN 1

Computed the maximum of static lun (don't add the lun of Mass Storage in mode USB Host).

Definition at line 92 of file ctrl_access.c.

#define LUN_1_EN 1

Definition at line 98 of file ctrl_access.c.

#define LUN_2_EN 1

Definition at line 104 of file ctrl_access.c.

#define LUN_3_EN 1

Definition at line 110 of file ctrl_access.c.

#define LUN_4_EN 1

Definition at line 116 of file ctrl_access.c.

#define LUN_5_EN 1

Definition at line 122 of file ctrl_access.c.

#define LUN_6_EN 1

Definition at line 128 of file ctrl_access.c.

#define LUN_7_EN 1

Definition at line 134 of file ctrl_access.c.

#define LUN_USB_EN 1

Definition at line 140 of file ctrl_access.c.

#define LUN_ID_0 (0)

Definition at line 147 of file ctrl_access.c.

Referenced by mem_name(), mem_read_capacity(), mem_removal(), mem_test_unit_ready(), mem_wr_protect(), memory_2_ram(), memory_2_usb(), ram_2_memory(), and usb_2_memory().

#define LUN_ID_1 (LUN_0_EN)

Definition at line 148 of file ctrl_access.c.

Referenced by mem_name(), mem_read_capacity(), mem_removal(), mem_test_unit_ready(), mem_wr_protect(), memory_2_ram(), memory_2_usb(), ram_2_memory(), and usb_2_memory().

#define LUN_ID_2 (LUN_0_EN+LUN_1_EN)

Definition at line 149 of file ctrl_access.c.

Referenced by mem_name(), mem_read_capacity(), mem_removal(), mem_test_unit_ready(), mem_wr_protect(), memory_2_ram(), memory_2_usb(), ram_2_memory(), and usb_2_memory().

#define LUN_ID_3 (LUN_0_EN+LUN_1_EN+LUN_2_EN)

Definition at line 150 of file ctrl_access.c.

Referenced by mem_name(), mem_read_capacity(), mem_removal(), mem_test_unit_ready(), mem_wr_protect(), memory_2_ram(), memory_2_usb(), ram_2_memory(), and usb_2_memory().

#define LUN_ID_4 (LUN_0_EN+LUN_1_EN+LUN_2_EN+LUN_3_EN)

Definition at line 151 of file ctrl_access.c.

Referenced by mem_name(), mem_read_capacity(), mem_removal(), mem_test_unit_ready(), mem_wr_protect(), memory_2_ram(), memory_2_usb(), ram_2_memory(), and usb_2_memory().

#define LUN_ID_5 (LUN_0_EN+LUN_1_EN+LUN_2_EN+LUN_3_EN+LUN_4_EN)

Definition at line 152 of file ctrl_access.c.

Referenced by mem_name(), mem_read_capacity(), mem_removal(), mem_test_unit_ready(), mem_wr_protect(), memory_2_ram(), memory_2_usb(), ram_2_memory(), and usb_2_memory().

#define LUN_ID_6 (LUN_0_EN+LUN_1_EN+LUN_2_EN+LUN_3_EN+LUN_4_EN+LUN_5_EN)

Definition at line 153 of file ctrl_access.c.

Referenced by mem_name(), mem_read_capacity(), mem_removal(), mem_test_unit_ready(), mem_wr_protect(), memory_2_ram(), memory_2_usb(), ram_2_memory(), and usb_2_memory().

#define LUN_ID_7 (LUN_0_EN+LUN_1_EN+LUN_2_EN+LUN_3_EN+LUN_4_EN+LUN_5_EN+LUN_6_EN)

Definition at line 154 of file ctrl_access.c.

Referenced by mem_name(), mem_read_capacity(), mem_removal(), mem_test_unit_ready(), mem_wr_protect(), memory_2_ram(), memory_2_usb(), ram_2_memory(), and usb_2_memory().

#define MAX_LUN (LUN_0_EN+LUN_1_EN+LUN_2_EN+LUN_3_EN+LUN_4_EN+LUN_5_EN+LUN_6_EN+LUN_7_EN)

Definition at line 155 of file ctrl_access.c.

Referenced by get_nb_lun().

#define LUN_ID_USB (MAX_LUN)

Definition at line 156 of file ctrl_access.c.

Referenced by mem_read_capacity(), mem_sector_size(), mem_test_unit_ready(), mem_wr_protect(), memory_2_ram(), and ram_2_memory().

## Function Documentation

U8 get_nb_lun | ( |  | ) |

This function return the number of logical unit.

Returns:
  U8 number of logical unit in the system

Definition at line 172 of file ctrl_access.c.

Referenced by nav_drive_nb(), nav_drive_set(), and usb_user_read_request().

    00173 {
    00174 #if   (LUN_USB == ENABLED)
    00175    return   (MAX_LUN + Lun_usb_get_lun());
    00176 #else
    00177    return   MAX_LUN;
    00178 #endif
    00179 }

Here is the caller graph for this function:

U8 get_cur_lun | ( |  | ) |

This function return the current logical unit.

Returns:
  U8 number of logical unit in the system

Definition at line 186 of file ctrl_access.c.

Referenced by usb_mass_storage_cbw().

    00187 {
    00188    return   0; //TODO a specific management
    00189 }

Here is the caller graph for this function:

Ctrl_status mem_test_unit_ready | ( | U8 | lun | ) |

This function test the state of memory, and start the initialisation of the memory.

MORE (see SPC-3 §5.2.4) : The TEST UNIT READY command allows an application client to poll a logical unit until it is ready without the need to allocate space for returned data. The TEST UNIT READY command may be used to check the media status of logical units with removable media.

Parameters:

  | lun | Logical unit number

Returns:
  Ctrl_status It is ready -> CTRL_GOOD Memory unplug -> CTRL_NO_PRESENT Not initialize -> CTRL_BUSY

Definition at line 205 of file ctrl_access.c.

Referenced by fat_check_device(), and sbc_test_unit_ready().

    00206 {
    00207    switch( lun )
    00208    {
    00209 #     if (LUN_0 == ENABLE)
    00210       case LUN_ID_0:
    00211       return Lun_0_test_unit_ready();
    00212       break;
    00213 #     endif
    00214 #     if (LUN_1 == ENABLE)
    00215       case LUN_ID_1:
    00216       return Lun_1_test_unit_ready();
    00217       break;
    00218 #     endif
    00219 #     if (LUN_2 == ENABLE)
    00220       case LUN_ID_2:
    00221       return Lun_2_test_unit_ready();
    00222       break;
    00223 #     endif
    00224 #     if (LUN_3 == ENABLE)
    00225       case LUN_ID_3:
    00226       return Lun_3_test_unit_ready();
    00227       break;
    00228 #     endif
    00229 #     if (LUN_4 == ENABLE)
    00230       case LUN_ID_4:
    00231       return Lun_4_test_unit_ready();
    00232       break;
    00233 #     endif
    00234 #     if (LUN_5 == ENABLE)
    00235       case LUN_ID_5:
    00236       return Lun_5_test_unit_ready();
    00237       break;
    00238 #     endif
    00239 #     if (LUN_6 == ENABLE)
    00240       case LUN_ID_6:
    00241       return Lun_6_test_unit_ready();
    00242       break;
    00243 #     endif
    00244 #     if (LUN_7 == ENABLE)
    00245       case LUN_ID_7:
    00246       return Lun_7_test_unit_ready();
    00247       break;
    00248 #     endif
    00249 #     if (LUN_USB == ENABLE)
    00250       default:
    00251       return Lun_usb_test_unit_ready(lun - LUN_ID_USB);
    00252       break;
    00253 #     endif
    00254    }
    00255    return   CTRL_FAIL;
    00256 }

Here is the caller graph for this function:

Ctrl_status mem_read_capacity | ( | U8 | lun,
|  | U32 _MEM_TYPE_SLOW_ * | u32_last_sector |
| ) |  |  |

This function return the capacity of the memory.

Parameters:

  | lun | Logical unit number

Returns:
  *u32_last_sector the last address sector

  Ctrl_status It is ready -> CTRL_GOOD Memory unplug -> CTRL_NO_PRESENT

Definition at line 268 of file ctrl_access.c.

Referenced by sbc_read_capacity().

    00269 {
    00270    switch( lun )
    00271    {
    00272 #     if (LUN_0 == ENABLE)
    00273       case LUN_ID_0:
    00274       return Lun_0_read_capacity( u32_last_sector );
    00275       break;
    00276 #     endif
    00277 #     if (LUN_1 == ENABLE)
    00278       case LUN_ID_1:
    00279       return Lun_1_read_capacity( u32_last_sector );
    00280       break;
    00281 #     endif
    00282 #     if (LUN_2 == ENABLE)
    00283       case LUN_ID_2:
    00284       return Lun_2_read_capacity( u32_last_sector );
    00285       break;
    00286 #     endif
    00287 #     if (LUN_3 == ENABLE)
    00288       case LUN_ID_3:
    00289       return Lun_3_read_capacity( u32_last_sector );
    00290       break;
    00291 #     endif
    00292 #     if (LUN_4 == ENABLE)
    00293       case LUN_ID_4:
    00294       return Lun_4_read_capacity( u32_last_sector );
    00295       break;
    00296 #     endif
    00297 #     if (LUN_5 == ENABLE)
    00298       case LUN_ID_5:
    00299       return Lun_5_read_capacity( u32_last_sector );
    00300       break;
    00301 #     endif
    00302 #     if (LUN_6 == ENABLE)
    00303       case LUN_ID_6:
    00304       return Lun_6_read_capacity( u32_last_sector );
    00305       break;
    00306 #     endif
    00307 #     if (LUN_7 == ENABLE)
    00308       case LUN_ID_7:
    00309       return Lun_7_read_capacity( u32_last_sector );
    00310       break;
    00311 #     endif
    00312 #     if (LUN_USB == ENABLE)
    00313       default:
    00314       return Lun_usb_read_capacity( lun - LUN_ID_USB, u32_last_sector );
    00315       break;
    00316 #     endif
    00317    }
    00318    return   CTRL_FAIL;
    00319 }

Here is the caller graph for this function:

U8 mem_sector_size | ( | U8 | lun | ) |

This function return the sector size of the memory.

Parameters:

  | lun | Logical unit number

Returns:
  size of sector (unit 512B)

Definition at line 328 of file ctrl_access.c.

Referenced by fat_mount().

    00329 {
    00330 # if (LUN_USB == ENABLE)
    00331    return (lun < LUN_ID_USB) ? 1 : Lun_usb_read_sector_size(lun- LUN_ID_USB);
    00332 #else
    00333    return 1;
    00334 #endif
    00335 }

Here is the caller graph for this function:

Bool mem_wr_protect | ( | U8 | lun | ) |

This function return is the write protected mode.

Parameters:

  | lun | Logical unit number

Only used by memory removal with a HARDWARE SPECIFIC write protected detection !!! The customer must be unplug the card for change this write protected mode.

Returns:
  TRUE -> the memory is protected

Definition at line 347 of file ctrl_access.c.

Referenced by fat_cache_flush(), file_open(), nav_file_isreadonly(), sbc_header_mode_sense(), and sbc_write_10().

    00348 {
    00349    switch( lun )
    00350    {
    00351 #     if (LUN_0 == ENABLE)
    00352       case LUN_ID_0:
    00353       return Lun_0_wr_protect();
    00354       break;
    00355 #     endif
    00356 #     if (LUN_1 == ENABLE)
    00357       case LUN_ID_1:
    00358       return Lun_1_wr_protect();
    00359       break;
    00360 #     endif
    00361 #     if (LUN_2 == ENABLE)
    00362       case LUN_ID_2:
    00363       return Lun_2_wr_protect();
    00364       break;
    00365 #     endif
    00366 #     if (LUN_3 == ENABLE)
    00367       case LUN_ID_3:
    00368       return Lun_3_wr_protect();
    00369       break;
    00370 #     endif
    00371 #     if (LUN_4 == ENABLE)
    00372       case LUN_ID_4:
    00373       return Lun_4_wr_protect();
    00374       break;
    00375 #     endif
    00376 #     if (LUN_5 == ENABLE)
    00377       case LUN_ID_5:
    00378       return Lun_5_wr_protect();
    00379       break;
    00380 #     endif
    00381 #     if (LUN_6 == ENABLE)
    00382       case LUN_ID_6:
    00383       return Lun_6_wr_protect();
    00384       break;
    00385 #     endif
    00386 #     if (LUN_7 == ENABLE)
    00387       case LUN_ID_7:
    00388       return Lun_7_wr_protect();
    00389       break;
    00390 #     endif
    00391 #     if (LUN_USB == ENABLE)
    00392       default:
    00393       return Lun_usb_wr_protect(lun - LUN_ID_USB);
    00394       break;
    00395 #     endif
    00396    }
    00397    return   CTRL_FAIL;
    00398 }

Here is the caller graph for this function:

Bool mem_removal | ( | U8 | lun | ) |

This function inform about the memory type.

Parameters:

  | lun | Logical unit number

Returns:
  TRUE -> The memory is removal

Definition at line 407 of file ctrl_access.c.

    00408 {
    00409    switch( lun )
    00410    {
    00411 #     if (LUN_0 == ENABLE)
    00412       case LUN_ID_0:
    00413       return Lun_0_removal();
    00414       break;
    00415 #     endif
    00416 #     if (LUN_1 == ENABLE)
    00417       case LUN_ID_1:
    00418       return Lun_1_removal();
    00419       break;
    00420 #     endif
    00421 #     if (LUN_2 == ENABLE)
    00422       case LUN_ID_2:
    00423       return Lun_2_removal();
    00424       break;
    00425 #     endif
    00426 #     if (LUN_3 == ENABLE)
    00427       case LUN_ID_3:
    00428       return Lun_3_removal();
    00429       break;
    00430 #     endif
    00431 #     if (LUN_4 == ENABLE)
    00432       case LUN_ID_4:
    00433       return Lun_4_removal();
    00434       break;
    00435 #     endif
    00436 #     if (LUN_5 == ENABLE)
    00437       case LUN_ID_5:
    00438       return Lun_5_removal();
    00439       break;
    00440 #     endif
    00441 #     if (LUN_6 == ENABLE)
    00442       case LUN_ID_6:
    00443       return Lun_6_removal();
    00444       break;
    00445 #     endif
    00446 #     if (LUN_7 == ENABLE)
    00447       case LUN_ID_7:
    00448       return Lun_7_removal();
    00449       break;
    00450 #     endif
    00451 #     if (LUN_USB == ENABLE)
    00452       default:
    00453       return Lun_usb_removal();
    00454       break;
    00455 #     endif
    00456    }
    00457    return   CTRL_FAIL;
    00458 }

U8 code* mem_name | ( | U8 | lun | ) |

This function returns a pointer to the LUN name.

Parameters:

  | lun | Logical unit number

Returns:
  pointer to code string

Definition at line 470 of file ctrl_access.c.

Referenced by ushell_cmd_free_space(), ushell_cmd_ls(), ushell_cmd_nb_drive(), and ushell_cmd_space().

    00472 {
    00473    switch( lun )
    00474    {
    00475 #     if (LUN_0 == ENABLE)
    00476       case LUN_ID_0:
    00477       return (U8 code*)lun0_name;
    00478       break;
    00479 #     endif
    00480 #     if (LUN_1 == ENABLE)
    00481       case LUN_ID_1:
    00482       return (U8 code*)lun1_name;
    00483       break;
    00484 #     endif
    00485 #     if (LUN_2 == ENABLE)
    00486       case LUN_ID_2:
    00487       return (U8 code*)lun2_name;
    00488       break;
    00489 #     endif
    00490 #     if (LUN_3 == ENABLE)
    00491       case LUN_ID_3:
    00492       return (U8 code*)lun3_name;
    00493       break;
    00494 #     endif
    00495 #     if (LUN_4 == ENABLE)
    00496       case LUN_ID_4:
    00497       return (U8 code*)lun4_name;
    00498       break;
    00499 #     endif
    00500 #     if (LUN_5 == ENABLE)
    00501       case LUN_ID_5:
    00502       return (U8 code*)lun5_name;
    00503       break;
    00504 #     endif
    00505 #     if (LUN_6 == ENABLE)
    00506       case LUN_ID_6:
    00507       return (U8 code*)lun6_name;
    00508       break;
    00509 #     endif
    00510 #     if (LUN_7 == ENABLE)
    00511       case LUN_ID_7:
    00512       return (U8 code*)lun7_name;
    00513       break;
    00514 #     endif
    00515 #     if (LUN_USB == ENABLE)
    00516       default:
    00517       return (U8 code*)lunusb_name;
    00518       break;
    00519 #     endif
    00520    }
    00521    return 0;   // Remove compiler warning
    00522 }

Here is the caller graph for this function:

Ctrl_status memory_2_usb | ( | U8 | lun,
|  | U32 | addr,
|  | U16 | nb_sector |
| ) |  |  |

This function tranfer a data from memory to usb.

Parameters:

  | lun | Logical unit number
  | addr | Sector address to start read (sector = 512B)
  | nb_sector | Number of sectors to transfer

Returns:
  Ctrl_status It is ready -> CTRL_GOOD A error occur -> CTRL_FAIL Memory unplug -> CTRL_NO_PRESENT

Definition at line 542 of file ctrl_access.c.

Referenced by sbc_read_10().

    00543 {
    00544    Ctrl_status status=CTRL_FAIL;
    00545
    00546    switch( lun )
    00547    {
    00548 #     if (LUN_0 == ENABLE)
    00549       case LUN_ID_0:
    00550       status = Lun_0_read_10(addr , nb_sector);
    00551       break;
    00552 #     endif
    00553 #     if (LUN_1 == ENABLE)
    00554       case LUN_ID_1:
    00555       status = Lun_1_read_10(addr , nb_sector);
    00556       break;
    00557 #     endif
    00558 #     if (LUN_2 == ENABLE)
    00559       case LUN_ID_2:
    00560       status = Lun_2_read_10(addr , nb_sector);
    00561       break;
    00562 #     endif
    00563 #     if (LUN_3 == ENABLE)
    00564       case LUN_ID_3:
    00565       status = Lun_3_read_10(addr , nb_sector);
    00566       break;
    00567 #     endif
    00568 #     if (LUN_4 == ENABLE)
    00569       case LUN_ID_4:
    00570       status = Lun_4_read_10(addr , nb_sector);
    00571       break;
    00572 #     endif
    00573 #     if (LUN_5 == ENABLE)
    00574       case LUN_ID_5:
    00575       status = Lun_5_read_10(addr , nb_sector);
    00576       break;
    00577 #     endif
    00578 #     if (LUN_6 == ENABLE)
    00579       case LUN_ID_6:
    00580       status = Lun_6_read_10(addr , nb_sector);
    00581       break;
    00582 #     endif
    00583 #     if (LUN_7 == ENABLE)
    00584       case LUN_ID_7:
    00585       status = Lun_7_read_10(addr , nb_sector);
    00586       break;
    00587 #     endif
    00588    }
    00589    return   status;
    00590 }

Here is the caller graph for this function:

Ctrl_status usb_2_memory | ( | U8 | lun,
|  | U32 | addr,
|  | U16 | nb_sector |
| ) |  |  |

This function transfer a data from usb to memory.

Parameters:

  | lun | Logical unit number
  | addr | Sector address to start write (sector = 512B)
  | nb_sector | Number of sectors to transfer

Returns:
  Ctrl_status It is ready -> CTRL_GOOD A error occur -> CTRL_FAIL Memory unplug -> CTRL_NO_PRESENT

Definition at line 603 of file ctrl_access.c.

Referenced by sbc_write_10().

    00604 {
    00605    Ctrl_status status=CTRL_FAIL;
    00606
    00607    switch( lun )
    00608    {
    00609 #     if (LUN_0 == ENABLE)
    00610       case LUN_ID_0:
    00611       status = Lun_0_write_10(addr , nb_sector);
    00612       break;
    00613 #     endif
    00614 #     if (LUN_1 == ENABLE)
    00615       case LUN_ID_1:
    00616       status = Lun_1_write_10(addr , nb_sector);
    00617       break;
    00618 #     endif
    00619 #     if (LUN_2 == ENABLE)
    00620       case LUN_ID_2:
    00621       status = Lun_2_write_10(addr , nb_sector);
    00622       break;
    00623 #     endif
    00624 #     if (LUN_3 == ENABLE)
    00625       case LUN_ID_3:
    00626       status = Lun_3_write_10(addr , nb_sector);
    00627       break;
    00628 #     endif
    00629 #     if (LUN_4 == ENABLE)
    00630       case LUN_ID_4:
    00631       status = Lun_4_write_10(addr , nb_sector);
    00632       break;
    00633 #     endif
    00634 #     if (LUN_5 == ENABLE)
    00635       case LUN_ID_5:
    00636       status = Lun_5_write_10(addr , nb_sector);
    00637       break;
    00638 #     endif
    00639 #     if (LUN_6 == ENABLE)
    00640       case LUN_ID_6:
    00641       status = Lun_6_write_10(addr , nb_sector);
    00642       break;
    00643 #     endif
    00644 #     if (LUN_7 == ENABLE)
    00645       case LUN_ID_7:
    00646       status = Lun_7_write_10(addr , nb_sector);
    00647       break;
    00648 #     endif
    00649    }
    00650    return   status;
    00651 }

Here is the caller graph for this function:

Ctrl_status memory_2_ram | ( | U8 | lun,
|  | const U32 _MEM_TYPE_SLOW_ | addr,
|  | U8 _MEM_TYPE_SLOW_ * | ram |
| ) |  |  |

Interface for RAM.

This function tranfer one sector data from memory to ram

Parameters:

  | lun | Logical unit number
  | addr | Sector address to start read (sector = 512B)
  | nb_sector | Number of sectors to transfer
  | ram | Adresse of ram buffer (only xdata)

Returns:
  Ctrl_status It is ready -> CTRL_GOOD A error occur -> CTRL_FAIL Memory unplug -> CTRL_NO_PRESENT

Definition at line 668 of file ctrl_access.c.

Referenced by fat_cache_read_sector(), file_read_buf(), stream_mem_to_mem(), and ushell_cmd_perform_access().

    00669 {
    00670
    00671    Ctrl_status status=CTRL_FAIL;
    00672
    00673    switch( lun )
    00674    {
    00675 #     if (LUN_0 == ENABLE)
    00676       case LUN_ID_0:
    00677       status = Lun_0_mem_2_ram(addr , ram);
    00678       break;
    00679 #     endif
    00680 #     if (LUN_1 == ENABLE)
    00681       case LUN_ID_1:
    00682       status = Lun_1_mem_2_ram(addr , ram);
    00683       break;
    00684 #     endif
    00685 #     if (LUN_2 == ENABLE)
    00686       case LUN_ID_2:
    00687       status = Lun_2_mem_2_ram(addr , ram);
    00688       break;
    00689 #     endif
    00690 #     if (LUN_3 == ENABLE)
    00691       case LUN_ID_3:
    00692       status = Lun_3_mem_2_ram(addr , ram);
    00693       break;
    00694 #     endif
    00695 #     if (LUN_4 == ENABLE)
    00696       case LUN_ID_4:
    00697       status = Lun_4_mem_2_ram(addr , ram);
    00698       break;
    00699 #     endif
    00700 #     if (LUN_5 == ENABLE)
    00701       case LUN_ID_5:
    00702       status = Lun_5_mem_2_ram(addr , ram);
    00703       break;
    00704 #     endif
    00705 #     if (LUN_6 == ENABLE)
    00706       case LUN_ID_6:
    00707       status = Lun_6_mem_2_ram(addr , ram);
    00708       break;
    00709 #     endif
    00710 #     if (LUN_7 == ENABLE)
    00711       case LUN_ID_7:
    00712       status = Lun_7_mem_2_ram(addr , ram);
    00713       break;
    00714 #     endif
    00715 #     if (LUN_USB == ENABLE)
    00716       default:
    00717       return  Lun_usb_mem_2_ram(lun - LUN_ID_USB,addr , ram);
    00718 #     endif
    00719    }
    00720    return   status;
    00721 }

Here is the caller graph for this function:

Ctrl_status ram_2_memory | ( | U8 | lun,
|  | const U32 _MEM_TYPE_SLOW_ | addr,
|  | U8 _MEM_TYPE_SLOW_ * | ram |
| ) |  |  |

This function transfer a data from ram to memory.

Parameters:

  | lun | Logical unit number
  | addr | Sector address to start write (sector = 512B)
  | nb_sector | Number of sectors to transfer
  | ram | Adresse of ram buffer (only xdata)

Returns:
  Ctrl_status It is ready -> CTRL_GOOD A error occur -> CTRL_FAIL Memory unplug -> CTRL_NO_PRESENT

Definition at line 740 of file ctrl_access.c.

Referenced by fat_cache_flush(), stream_mem_to_mem(), and ushell_cmd_perform_access().

    00741 {
    00742    Ctrl_status status=CTRL_FAIL;
    00743
    00744    switch( lun )
    00745    {
    00746 #     if (LUN_0 == ENABLE)
    00747       case LUN_ID_0:
    00748       status = Lun_0_ram_2_mem(addr , ram);
    00749       break;
    00750 #     endif
    00751 #     if (LUN_1 == ENABLE)
    00752       case LUN_ID_1:
    00753       status = Lun_1_ram_2_mem(addr , ram);
    00754       break;
    00755 #     endif
    00756 #     if (LUN_2 == ENABLE)
    00757       case LUN_ID_2:
    00758       status = Lun_2_ram_2_mem(addr , ram);
    00759       break;
    00760 #     endif
    00761 #     if (LUN_3 == ENABLE)
    00762       case LUN_ID_3:
    00763       status = Lun_3_ram_2_mem(addr , ram);
    00764       break;
    00765 #     endif
    00766 #     if (LUN_4 == ENABLE)
    00767       case LUN_ID_4:
    00768       status = Lun_4_ram_2_mem(addr , ram);
    00769       break;
    00770 #     endif
    00771 #     if (LUN_5 == ENABLE)
    00772       case LUN_ID_5:
    00773       status = Lun_5_ram_2_mem(addr , ram);
    00774       break;
    00775 #     endif
    00776 #     if (LUN_6 == ENABLE)
    00777       case LUN_ID_6:
    00778       status = Lun_6_ram_2_mem(addr , ram);
    00779       break;
    00780 #     endif
    00781 #     if (LUN_7 == ENABLE)
    00782       case LUN_ID_7:
    00783       status = Lun_7_ram_2_mem(addr , ram);
    00784       break;
    00785 #     endif
    00786 #     if (LUN_USB == ENABLE)
    00787       default:
    00788       return  Lun_usb_ram_2_mem(lun - LUN_ID_USB,addr , ram);
    00789       break;
    00790 #     endif
    00791    }
    00792    return   status;
    00793 }

Here is the caller graph for this function:

U8 stream_mem_to_mem | ( | U8 | src_lun,
|  | U32 | src_addr,
|  | U8 | dest_lun,
|  | U32 | dest_addr,
|  | U16 | nb_sector |
| ) |  |  |

This function copy a data from memory to other memory.

Parameters:

  | addr | Sector address to start write
  | nb_sector | Number of sectors to transfer

Definition at line 801 of file ctrl_access.c.

Referenced by ushell_cmd_perform_transfer().

    00802 {
    00803    Ctrl_status status=CTRL_FAIL;
    00804    fat_cache_flush();
    00805    while(nb_sector)
    00806    {
    00807       status = memory_2_ram( src_lun , src_addr , fs_g_sector );
    00808       if( status != CTRL_GOOD )
    00809          break;
    00810       status = ram_2_memory( dest_lun , dest_addr , fs_g_sector );
    00811       if( status != CTRL_GOOD )
    00812          break;
    00813       src_addr++;
    00814       dest_addr++;
    00815       nb_sector--;
    00816    }
    00817    fat_cache_reset();
    00818    return (status != CTRL_GOOD)? ID_STREAM_ERR:0;
    00819 }

Here is the caller graph for this function:

Ctrl_status stream_state | ( | U8 | Id | ) |

Returns the state on a data transfer.

Parameters:

  | id | transfer id

Returns:
  the state of the transfer CTRL_GOOD It is finish CTRL_BUSY It is running CTRL_FAIL It is fail

Definition at line 831 of file ctrl_access.c.

Referenced by ushell_cmd_perform_transfer().

    00832 {
    00833    return CTRL_GOOD;
    00834 }

Here is the caller graph for this function:

U16 stream_stop | ( | U8 | Id | ) |

Stop the data transfer.

Parameters:

  | id | Transfer id

Returns:
  the number of sector remainder

Definition at line 842 of file ctrl_access.c.

    00843 {
    00844    return 0;
    00845 }

## Variable Documentation

U8 code lun0_name[] = "VIRTUAL_MEM_ON_CHIP"

Definition at line 93 of file ctrl_access.c.

Referenced by mem_name().

U8 code lun1_name[] = "\"NAND Flash\""

Definition at line 99 of file ctrl_access.c.

Referenced by mem_name().

U8 code lun2_name[] = "\"On board data flash\""

Definition at line 105 of file ctrl_access.c.

Referenced by mem_name().

U8 code lun3_name[] = "\"MMC\""

Definition at line 111 of file ctrl_access.c.

Referenced by mem_name().

U8 code lun4_name[] = LUN_4_NAME

Definition at line 117 of file ctrl_access.c.

Referenced by mem_name().

U8 code lun5_name[] = LUN_5_NAME

Definition at line 123 of file ctrl_access.c.

Referenced by mem_name().

U8 code lun6_name[] = LUN_6_NAME

Definition at line 129 of file ctrl_access.c.

Referenced by mem_name().

U8 code lun7_name[] = LUN_7_NAME

Definition at line 135 of file ctrl_access.c.

Referenced by mem_name().

U8 code lunusb_name[] = "\"USB Remote memory\""

Definition at line 141 of file ctrl_access.c.

Referenced by mem_name().