Subversion Repositories NaviCtrl

Rev

Rev 41 | Rev 89 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 41 Rev 88
Line 5... Line 5...
5
// + Copyright (c) 2008 Ingo Busker, Holger Buss
5
// + Copyright (c) 2008 Ingo Busker, Holger Buss
6
// + Nur für den privaten Gebrauch
6
// + Nur für den privaten Gebrauch
7
// + FOR NON COMMERCIAL USE ONLY
7
// + FOR NON COMMERCIAL USE ONLY
8
// + www.MikroKopter.com
8
// + www.MikroKopter.com
9
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
9
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
10
// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation), 
10
// + Es gilt für das gesamte Projekt (Hardware, Software, Binärfiles, Sourcecode und Dokumentation),
11
// + dass eine Nutzung (auch auszugsweise) nur für den privaten (nicht-kommerziellen) Gebrauch zulässig ist. 
11
// + dass eine Nutzung (auch auszugsweise) nur für den privaten (nicht-kommerziellen) Gebrauch zulässig ist.
12
// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt 
12
// + Sollten direkte oder indirekte kommerzielle Absichten verfolgt werden, ist mit uns (info@mikrokopter.de) Kontakt
13
// + bzgl. der Nutzungsbedingungen aufzunehmen. 
13
// + bzgl. der Nutzungsbedingungen aufzunehmen.
14
// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen,
14
// + Eine kommerzielle Nutzung ist z.B.Verkauf von MikroKoptern, Bestückung und Verkauf von Platinen oder Bausätzen,
15
// + Verkauf von Luftbildaufnahmen, usw.
15
// + Verkauf von Luftbildaufnahmen, usw.
16
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
16
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
17
// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht, 
17
// + Werden Teile des Quellcodes (mit oder ohne Modifikation) weiterverwendet oder veröffentlicht,
18
// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen
18
// + unterliegen sie auch diesen Nutzungsbedingungen und diese Nutzungsbedingungen incl. Copyright müssen dann beiliegen
19
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
19
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
20
// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts
20
// + Sollte die Software (auch auszugesweise) oder sonstige Informationen des MikroKopter-Projekts
21
// + auf anderen Webseiten oder sonstigen Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de"
21
// + auf anderen Webseiten oder sonstigen Medien veröffentlicht werden, muss unsere Webseite "http://www.mikrokopter.de"
22
// + eindeutig als Ursprung verlinkt werden
22
// + eindeutig als Ursprung verlinkt werden
23
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
23
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
24
// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion
24
// + Keine Gewähr auf Fehlerfreiheit, Vollständigkeit oder Funktion
25
// + Benutzung auf eigene Gefahr
25
// + Benutzung auf eigene Gefahr
26
// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden
26
// + Wir übernehmen keinerlei Haftung für direkte oder indirekte Personen- oder Sachschäden
27
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
27
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
28
// + Die PORTIERUNG der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur 
28
// + Die PORTIERUNG der Software (oder Teile davon) auf andere Systeme (ausser der Hardware von www.mikrokopter.de) ist nur
29
// + mit unserer Zustimmung zulässig
29
// + mit unserer Zustimmung zulässig
30
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
30
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
31
// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen
31
// + Die Funktion printf_P() unterliegt ihrer eigenen Lizenz und ist hiervon nicht betroffen
32
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
32
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
33
// + Redistributions of source code (with or without modifications) must retain the above copyright notice, 
33
// + Redistributions of source code (with or without modifications) must retain the above copyright notice,
34
// + this list of conditions and the following disclaimer.
34
// + this list of conditions and the following disclaimer.
35
// +   * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived
35
// +   * Neither the name of the copyright holders nor the names of contributors may be used to endorse or promote products derived
36
// +     from this software without specific prior written permission.
36
// +     from this software without specific prior written permission.
37
// +   * The use of this project (hardware, software, binary files, sources and documentation) is only permitted 
37
// +   * The use of this project (hardware, software, binary files, sources and documentation) is only permitted
38
// +     for non-commercial use (directly or indirectly)
38
// +     for non-commercial use (directly or indirectly)
39
// +     Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted 
39
// +     Commercial use (for excample: selling of MikroKopters, selling of PCBs, assembly, ...) is only permitted
40
// +     with our written permission
40
// +     with our written permission
41
// +   * If sources or documentations are redistributet on other webpages, out webpage (http://www.MikroKopter.de) must be 
41
// +   * If sources or documentations are redistributet on other webpages, out webpage (http://www.MikroKopter.de) must be
42
// +     clearly linked as origin 
42
// +     clearly linked as origin
43
// +   * PORTING this software (or part of it) to systems (other than hardware from www.mikrokopter.de) is NOT allowed
43
// +   * PORTING this software (or part of it) to systems (other than hardware from www.mikrokopter.de) is NOT allowed
44
//
44
//
45
// +  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
45
// +  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
46
// +  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
46
// +  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
47
// +  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
47
// +  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
Line 50... Line 50...
50
// +  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
50
// +  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
51
// +  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
51
// +  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
52
// +  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
52
// +  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
53
// +  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
53
// +  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
54
// +  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
54
// +  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
55
// +  POSSIBILITY OF SUCH DAMAGE. 
55
// +  POSSIBILITY OF SUCH DAMAGE.
56
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
56
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
57
#include <stdio.h>
57
#include <stdio.h>
58
#include <stdlib.h>
58
#include <stdlib.h>
59
#include <string.h>
59
#include <string.h>
60
#include "91x_lib.h"
60
#include "91x_lib.h"
61
#include "fat16.h"
61
#include "fat16.h"
62
#include "settings.h"
62
#include "settings.h"
63
#include "uart1.h"
63
#include "uart1.h"
Line 64... Line 64...
64
 
64
 
65
struct str_setting_parameter CFG_Parameter[] =
65
typedef struct
-
 
66
{
-
 
67
        ParamId_t ParamId;
66
{
68
        s8  Name[16];
-
 
69
        u8  Group;   // 0 = reserved  1,2,3,4
-
 
70
        u16 Value;
-
 
71
        u16 Default;
-
 
72
        u16 Min;
-
 
73
        u16 Max;
-
 
74
} __attribute__((packed)) Parameter_t;
-
 
75
 
-
 
76
Parameter_t CFG_Parameter[] =
67
  //{"1234567890123456"   , "12345678901234567890123456789012", Group, Value, Default  , Min,   Max },
77
{
68
    {"Parameter1      " , "12345678901234567890123456789012",     1    , 0     , 222   , 200  , 230 },
78
  //{PID             , "1234567890123456" , Group, Value, Default,   Min,       Max },
69
    {"Parameter2      " , "12345678901234567890123456789012",     1    , 0     , 0     , 0    , 220 },
79
        {PID_KML_LOGGING , "KMLLogging      " ,     1,   500,     500,          0,      60000}, // the log interval for KML logging, 0 = off
70
    {"Parameter22     " , "12345678901234567890123456789012",     1    , 0     , 0     , 0    , 220 },
80
        {PID_GPX_LOGGING , "GPXLogging      " ,     1,     0,       0,          0,      60000}   // the log interval for GPX logging, 0 = off
Line 71... Line 81...
71
};
81
};
-
 
82
 
72
 
83
 
73
 
84
//----------------------------------------------------------------------------------
74
//----------------------------------------------------------------------------------
85
// initialize all parameters by its default value
-
 
86
void Settings_SetDefaultValues(void)
75
void InitDefaultParameters(void)
87
{
76
{
88
        u8 i;
77
  u8 i;
89
        // run thrue all parameters and set value to default
78
  for (i=0;i<sizeof(CFG_Parameter) / sizeof(struct str_setting_parameter);i++)
90
        for (i = 0; i < sizeof(CFG_Parameter) / sizeof(Parameter_t); i++)
79
  {
-
 
80
    CFG_Parameter[i].Value  = CFG_Parameter[i].Default;
91
        {
Line 81... Line 92...
81
  }      
92
                CFG_Parameter[i].Value  = CFG_Parameter[i].Default;
-
 
93
        }
82
 
94
}
83
}
95
 
84
 
96
//----------------------------------------------------------------------------------
85
//----------------------------------------------------------------------------------
97
// set parameter from string based name and value
86
void SetParameter(char *name, char *value)
98
void Settings_SetParameterFromString(s8 *name, s8 *value)
87
{
99
{
88
  u8 i;
100
        u8 i;
89
  char string[] = "                \0";
101
        s8 string[] = "                \0"; // null terminated string of 16 characters
90
   
102
 
91
  i=strlen(name);
103
        i = strlen(name);                                       // lenght of the parameter name
92
  if (i>16) i=16;
104
        if (i > 16) i = 16;                                     // cut off at 16
-
 
105
 
93
 
106
        memcpy(string, name, i);                        // copy name to local buffer
94
  memcpy(string, name, i);
107
        //sprintf(text,"#%s#%s#\n\r", name, string);  SerialPutString(text);
95
//  sprintf(text,"#%s#%s#\n\r", name, string);  SerialPutString(text);
108
 
96
   
109
    // search name in parameter list
97
  for (i=0;i<sizeof(CFG_Parameter) / sizeof(struct str_setting_parameter);i++)
110
        for (i = 0; i < sizeof(CFG_Parameter) / sizeof(Parameter_t); i++)
98
  {
111
        {
99
 //   sprintf(text,"#%s#\n\r", CFG_Parameter[i].Name);    SerialPutString(text);
-
 
-
 
112
                //sprintf(text,"#%s#\n\r", CFG_Parameter[i].Name);    SerialPutString(text);
100
     if (strncmp(string, CFG_Parameter[i].Name, 16) == 0)
113
                if(strncmp(string, CFG_Parameter[i].Name, 16) == 0) // names are matching
101
          {
-
 
102
            CFG_Parameter[i].Value = (unsigned char) atoi(value);
114
                {
103
           
115
                        CFG_Parameter[i].Value = (u16)atoi(value); // convert string to number and set value
-
 
116
                        // range within min/max
104
                if (CFG_Parameter[i].Value < CFG_Parameter[i].Min || CFG_Parameter[i].Value > CFG_Parameter[i].Max)
117
                        if(CFG_Parameter[i].Value < CFG_Parameter[i].Min) CFG_Parameter[i].Value = CFG_Parameter[i].Min;
105
                    CFG_Parameter[i].Value  = CFG_Parameter[i].Default;
118
 
106
                   
119
                        //sprintf(text,"%s = %d\n\r", string, CFG_Parameter[i].Value);
107
                sprintf(text,"%s = %d\n\r", string, CFG_Parameter[i].Value);    SerialPutString(text);
120
                        //SerialPutString(text);
Line 108... Line 121...
108
                break;
121
                        break; // end loop
-
 
122
                }
109
          }
123
        }
110
   }    
124
}
-
 
125
 
111
}
126
//----------------------------------------------------------------------------------
112
 
127
// read settings from file on sd-card
113
//----------------------------------------------------------------------------------
-
 
114
void ReadSetting(u8 number)
128
void Settings_Init(void)
115
 {
129
{
116
   File_t *fp;
130
        #define LINE_MAX 32
117
   u8 text[32];
-
 
118
   u8 tmp;
131
        File_t *fp;
119
   u8 *token;
132
        u8 text[LINE_MAX];
120
   
133
        u8 *token;
121
   InitDefaultParameters();
134
 
122
 
135
        Settings_SetDefaultValues();
123
   SerialPutString("\n\rReading setting file...\n\r");
136
        SerialPutString("\n\rReading settings from file...\n\r");
124
   fp = fopen_("setting1.txt", 'r');
137
        fp = fopen_("settings.ini", 'r');
125
   
138
 
126
   if (fp == NULL)
139
        if (fp == NULL) // could not open the file
127
   {
140
        {
-
 
141
                SerialPutString("ERROR: File not found !");
128
     SerialPutString("ERROR: File not found !\n\r");
142
                return;
-
 
143
        }
-
 
144
 
129
     return;
145
        // read all lines from file
130
   }
146
        while(fgets_(text, LINE_MAX, fp) != NULL)
-
 
147
        {
-
 
148
                if ( // ignorelines starting with \r,\n,' ',';','#'
131
   
149
                        (text[0] != '\n') &&
132
   for (tmp=0;tmp<10;tmp++)
-
 
133
   {
150
                        (text[0] != '\r') &&
134
            fgets_(text , 31, fp);
151
                        (text[0] != ' ' ) &&
135
                if (text[0] == 0) break;
152
                        (text[0] != ';' ) &&
136
               
153
                        (text[0] != '#' )
137
                if (text[0] != '\n' && text[0] != '\r' && text[0] != ' ' && text[0] != ';' && text[0] != '#')
154
                        )
138
                {
155
                {
139
                        token = strtok(text, "=");
-
 
140
                        if (token != NULL)
156
                        token = strtok(text, "="); //find the '='
141
                        {
157
                        if (token != NULL) // if '=' has been found
142
                          //SerialPutString(token);SerialPutString(" --> ");
158
                        {
143
                  SetParameter(token, strtok(NULL, "="));
159
                          //SerialPutString(token);SerialPutString(" --> ");
144
                         
160
                  Settings_SetParameterFromString(token, strtok(NULL, "="));
145
                          //SerialPutString("\n\r");
-
 
-
 
161
                          //SerialPutString("\n\r");
146
                        }
162
                        }
Line -... Line 163...
-
 
163
                }
-
 
164
        }
-
 
165
        fclose_(fp);
-
 
166
        SerialPutString("ok");
-
 
167
}
-
 
168
 
-
 
169
 
-
 
170
//----------------------------------------------------------------------------------
-
 
171
// read value of a paramter identified by its id
-
 
172
// returns 1 on success and 0 on error
-
 
173
u8 Settings_GetParamValue(ParamId_t Pid, u16 * pValue)
-
 
174
{
-
 
175
        u8 i, retval = 0;
-
 
176
 
-
 
177
        for (i = 0; i < sizeof(CFG_Parameter) / sizeof(Parameter_t); i++)
-
 
178
        {
-
 
179
                if(CFG_Parameter[i].ParamId == Pid)
-
 
180
                {
-
 
181
                        *pValue = CFG_Parameter[i].Value;