Subversion Repositories svn.mios32

Rev

Rev 1298 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1260 tk 1
// $Id: midio_file.c 1653 2013-01-09 23:08:59Z tk $
2
/*
1261 tk 3
 * File access functions for MIDIO128
1260 tk 4
 *
5
 * NOTE: before accessing the SD Card, the upper level function should
6
 * synchronize with the SD Card semaphore!
7
 *   MUTEX_SDCARD_TAKE; // to take the semaphore
8
 *   MUTEX_SDCARD_GIVE; // to release the semaphore
9
 *
10
 * ==========================================================================
11
 *
1261 tk 12
 *  Copyright (C) 2011 Thorsten Klose (tk@midibox.org)
1260 tk 13
 *  Licensed for personal non-commercial use only.
14
 *  All other rights reserved.
15
 *
16
 * ==========================================================================
17
 */
18
 
19
/////////////////////////////////////////////////////////////////////////////
20
// Include files
21
/////////////////////////////////////////////////////////////////////////////
22
 
23
#include <mios32.h>
1298 tk 24
#include <string.h>
1260 tk 25
 
1261 tk 26
#include "file.h"
1653 tk 27
#include "tasks.h"
1260 tk 28
#include "midio_file.h"
29
#include "midio_file_p.h"
30
 
31
 
32
/////////////////////////////////////////////////////////////////////////////
33
// for optional debugging messages via DEBUG_MSG (defined in mios32_config.h)
34
/////////////////////////////////////////////////////////////////////////////
35
 
36
// Note: verbose level 1 is default - it prints error messages
37
// and useful info messages during backups
38
#define DEBUG_VERBOSE_LEVEL 1
39
 
40
 
41
/////////////////////////////////////////////////////////////////////////////
42
// Global variables
43
/////////////////////////////////////////////////////////////////////////////
44
 
45
 
46
/////////////////////////////////////////////////////////////////////////////
47
// Local variables
48
/////////////////////////////////////////////////////////////////////////////
49
 
1298 tk 50
static char sd_card_msg[13];
1260 tk 51
 
1298 tk 52
 
1260 tk 53
/////////////////////////////////////////////////////////////////////////////
54
// Initialisation
55
/////////////////////////////////////////////////////////////////////////////
56
s32 MIDIO_FILE_Init(u32 mode)
57
{
1261 tk 58
  s32 status = 0;
1260 tk 59
 
1298 tk 60
  strcpy(sd_card_msg, "SD Card?"); // 12 chars maximum
61
 
1261 tk 62
  status |= FILE_Init(0);
63
  status |= MIDIO_FILE_P_Init(0);
1260 tk 64
 
1261 tk 65
  return status;
1260 tk 66
}
67
 
68
 
69
/////////////////////////////////////////////////////////////////////////////
70
// Loads all files
71
/////////////////////////////////////////////////////////////////////////////
72
s32 MIDIO_FILE_LoadAllFiles(u8 including_hw)
73
{
74
  s32 status = 0;
75
 
76
  if( including_hw ) {
77
    //status |= MIDIO_FILE_HW_Load();
78
  }
79
 
1264 tk 80
  status |= MIDIO_FILE_P_Load("DEFAULT");
1260 tk 81
 
82
  return status;
83
}
84
 
85
 
86
/////////////////////////////////////////////////////////////////////////////
87
// invalidate all file infos
88
/////////////////////////////////////////////////////////////////////////////
89
s32 MIDIO_FILE_UnloadAllFiles(void)
90
{
91
  s32 status = 0;
92
  status |= MIDIO_FILE_P_Unload();
93
  return status;
94
}
1298 tk 95
 
96
 
97
/////////////////////////////////////////////////////////////////////////////
1653 tk 98
// creates the default files if they don't exist on SD Card
99
/////////////////////////////////////////////////////////////////////////////
100
s32 MIDIO_FILE_CreateDefaultFiles(void)
101
{
102
  s32 status;
103
 
104
  portENTER_CRITICAL();
105
 
106
  // check if patch file exists
107
  if( !MIDIO_FILE_P_Valid() ) {
108
    // create new one
109
    DEBUG_MSG("Creating initial DEFAULT.MIO file\n");
110
 
111
    if( (status=MIDIO_FILE_P_Write("DEFAULT")) < 0 ) {
112
      DEBUG_MSG("Failed to create file! (status: %d)\n", status);
113
    }
114
  }
115
 
116
  portEXIT_CRITICAL();
117
 
118
  return 0; // no error
119
}
120
 
121
 
122
/////////////////////////////////////////////////////////////////////////////
1298 tk 123
// sets the SD Card status
124
// 12 characters max.
125
// if msg == NULL: ok, no special status, print filename
126
/////////////////////////////////////////////////////////////////////////////
127
s32 MIDIO_FILE_StatusMsgSet(char *msg)
128
{
129
  if( msg == NULL ) {
130
    sd_card_msg[0] = 0;
131
  } else {
132
    memcpy(sd_card_msg, msg, 13);
133
    sd_card_msg[12] = 0; // ensure that terminator set
134
  }
135
 
136
  return 0;
137
}
138
 
139
/////////////////////////////////////////////////////////////////////////////
140
// returns the current SD Card status
141
// if NULL: ok, no special status, print filename
142
/////////////////////////////////////////////////////////////////////////////
143
char *MIDIO_FILE_StatusMsgGet(void)
144
{
145
  return sd_card_msg[0] ? sd_card_msg : NULL;
146
}
147