ftp добавил

1 час
This commit is contained in:
Dmitriy 2021-02-19 22:00:24 +03:00
parent 4b12925a98
commit 16721055a0
16 changed files with 11716 additions and 10174 deletions

File diff suppressed because it is too large Load Diff

View File

@ -265,8 +265,8 @@
/* Configure total number of BUFFERs ... */
/* ... (see Note #1) : */
#define NET_BUF_CFG_NBR_SMALL 5 /* Configure total number of SMALL BUFFERs. */
#define NET_BUF_CFG_NBR_LARGE 3 /* Configure total number of LARGE BUFFERs. */
#define NET_BUF_CFG_NBR_SMALL 6 /* Configure total number of SMALL BUFFERs. */
#define NET_BUF_CFG_NBR_LARGE 1 /* Configure total number of LARGE BUFFERs. */
/* Configure size of BUFFER DATA areas ... */
/* ... (see Note #2) : */

View File

@ -41,7 +41,7 @@
#define OS_MAX_FLAGS 5 /* Max. number of Event Flag Groups in your application */
#define OS_MAX_MEM_PART 5 /* Max. number of memory partitions */
#define OS_MAX_QS 4 /* Max. number of queue control blocks in your application */
#define OS_MAX_TASKS 32 /* Max. number of tasks in your application, MUST be >= 2 */
#define OS_MAX_TASKS 16 /* Max. number of tasks in your application, MUST be >= 2 */
#define OS_SCHED_LOCK_EN 1 /* Include code for OSSchedLock() and OSSchedUnlock() */
@ -90,7 +90,7 @@
/* --------------------- MEMORY MANAGEMENT -------------------- */
#define OS_MEM_EN 1 /* Enable (1) or Disable (0) code generation for MEMORY MANAGER */
#define OS_MEM_EN 0 /* Enable (1) or Disable (0) code generation for MEMORY MANAGER */
#define OS_MEM_NAME_SIZE 0 /* Determine the size of a memory partition name */
#define OS_MEM_QUERY_EN 1 /* Include code for OSMemQuery() */

View File

@ -906,8 +906,8 @@ void UserStartupFunc(void)
InitHostApp();
#endif
#if defined(CONFIG_TERMINAL_ENABLE)
InitTerminalApp();
#ifdef CONFIG_FTP_CLIENT_ENABLE
InitFTPApp();
#endif
SystemTime = GetTimeSec();

View File

@ -15,4 +15,6 @@ extern CPU_INT08U time_to_ftp;
extern int FtpUploadCsvReport(NET_IP_ADDR ip, CPU_INT32U id, char* login, char* pass, CPU_INT32U time, CPU_INT08U flags);
extern void FtpCheckTimeToSend(CPU_INT32U systime);
extern void InitFTPApp();
#endif //_FTP_APP_H_

View File

@ -6,6 +6,22 @@
#include <stdlib.h>
#include <stddef.h>
// ïîëó÷åíèå äîñòóïíîãî èíäåêñà ìàññèâà
CPU_INT32U GetDataValidIndex(const TDataDescStruct* desc, CPU_INT32U index)
{
if (desc->IsArray)
{
if (index >= desc->ArraySize)
{
return desc->ArraySize;
}
else
{
return index;
}
}
return 0;
}
// ïîëó÷åíèå äàííûõ
int GetData(const TDataDescStruct* desc, void* buf, CPU_INT32U index, CPU_INT08U flags)
@ -21,7 +37,7 @@ int GetData(const TDataDescStruct* desc, void* buf, CPU_INT32U index, CPU_INT08U
}
return DATA_OK;
}
// îïðåäåëèì äîï. ñìåùåíèå äëÿ ìàññèâà
if (desc->IsArray)
{
@ -58,6 +74,138 @@ int GetData(const TDataDescStruct* desc, void* buf, CPU_INT32U index, CPU_INT08U
return DATA_OK;
}
///
int SetDataFromStr(const TDataDescStruct* desc, char* buf, CPU_INT32U index, CPU_INT08U flags)
{
CPU_INT32U value;
switch (desc->Type)
{
case DATA_TYPE_RUB_CENT:
{
CPU_INT32U value1, value2;
if ((sscanf(buf, "%d,%02d", &value1, &value2) == 2) && (value2 < 100))
{
value1 = value1 * 100 + value2;
return SetData(desc, (void*)&value1, index, flags);
}
}
break;
case DATA_TYPE_TIME_COUNT:
case DATA_TYPE_SLONG:
case DATA_TYPE_ULONG:
if (sscanf(buf, "%d", &value) == 1)
{
return SetData(desc, (void*)&value, index, flags);
}
else
{
if ((desc->IsIndex) && (desc->Desc == DATA_DESC_EDIT))
{
// ïîïðîáóåì íàéòè èíäåêñ òåêñòîâîãî çíà÷åíèÿ
if ((desc->RangeValue) && (desc->Items))
{
TRangeValueULONG* range = (TRangeValueULONG*)desc->RangeValue;
CPU_INT32U val_i;
for (val_i = range->Min; val_i <= range->Max; val_i++)
{
if (strcmp(buf, (char const*)desc->Items[val_i]) == 0)
{
value = val_i;
return SetData(desc, (void*)&value, index, flags);
}
}
}
}
}
break;
case DATA_TYPE_FLOAT:
{
float value_fl;
if (sscanf(buf, "%f", &value_fl) == 1)
{
return SetData(desc, (void*)&value_fl, index, flags);
}
}
break;
case DATA_TYPE_TIME:
{
TRTC_Data rtc;
ScanRTCDateTimeStringRus((char*)buf, &rtc);
if (RTCCheckTime(&rtc) == 0)
{
value = GetSec(&rtc);
return SetData(desc, &value, index, flags);
}
}
break;
case DATA_TYPE_HOUR_MIN:
{
int hour, min, hour_min;
if (sscanf((char*)buf, "%02d:%02d", &hour, &min) == 2)
{
hour_min = hour * 60 + min;
return SetData(desc, &hour_min, index, flags);
}
}
break;
case DATA_TYPE_TIME_SEC_H_MM:
{
int hour, min, sec;
if (sscanf((char*)buf, "%02d:%02d", &hour, &min) == 2)
{
sec = hour * 3600 + min * 60;
return SetData(desc, &sec, index, flags);
}
}
break;
case DATA_TYPE_TIME_SEC_M:
{
int min, sec;
if (sscanf((char*)buf, "%d", &min) == 1)
{
sec = min * 60;
return SetData(desc, &sec, index, flags);
}
}
break;
case DATA_TYPE_DATE:
{
TRTC_Data rtc;
ScanRTCDateStringRus((char*)buf, &rtc);
if (RTCCheckTime(&rtc) == 0)
{
value = GetSec(&rtc);
return SetData(desc, &value, index, flags);
}
}
break;
case DATA_TYPE_IP_ADDR:
{
CPU_INT32U ip[4];
if ((sscanf((char*)buf, "%d.%d.%d.%d", &ip[3], &ip[2], &ip[1], &ip[0]) == 4)
&& (ip[0] <= 255)
&& (ip[1] <= 255)
&& (ip[2] <= 255)
&& (ip[3] <= 255)
)
{
value = ip[0] + (ip[1] << 8) + (ip[2] << 16) + (ip[3] << 24);
return SetData(desc, &ip[0], index, flags);
}
}
break;
case DATA_TYPE_CHAR_STRING:
{
return SetData(desc, buf, index, flags);
}
break;
}
return DATA_ERR;
}
// çàïèñü äàííûõ
int SetData(const TDataDescStruct* desc, void* buf, CPU_INT32U index, CPU_INT08U flags)
{
@ -66,6 +214,42 @@ int SetData(const TDataDescStruct* desc, void* buf, CPU_INT32U index, CPU_INT08U
if (desc->Desc == DATA_DESC_VIEW) return DATA_ERR;
if (desc->Type == DATA_TYPE_CHAR_STRING)
{
char *s = buf;
int i;
for (i = 0; i < desc->ArraySize; i++, s++)
{
if (*s == 0) break;
if ((*s < '!') || (*s > 'z'))
{
return DATA_ERR;
}
}
if (desc->Location == DATA_LOC_RAM)
{
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr = 0;
#endif
OS_ENTER_CRITICAL();
memcpy((CPU_INT08U*)desc->Data, buf, i + 1);
OS_EXIT_CRITICAL();
}
else if (desc->Location == DATA_LOC_FRAM)
{
CPU_INT08U byte = 0;
WriteArrayFram((CPU_INT32U)desc->Data, i, buf);
WriteArrayFram((CPU_INT32U)desc->Data + i, 1, &byte);
}
else return DATA_ERR;
if (desc->OnchangeFunc) desc->OnchangeFunc();
return DATA_OK;
}
// ïðîâåðèì äîïóñòèìîñòü çíà÷åíèé
if (desc->RangeValue)
{
@ -95,16 +279,24 @@ int SetData(const TDataDescStruct* desc, void* buf, CPU_INT32U index, CPU_INT08U
else if (desc->Type == DATA_TYPE_IP_ADDR)
{
}
else if (desc->Type == DATA_TYPE_RUB_CENT)
{
}
else if (desc->Type == DATA_TYPE_HOUR_MIN)
{
if (Val.Val32U >= 24*60) return DATA_ERR;
}
else if (desc->Type == DATA_TYPE_TIME_SEC_H_MM)
{
}
else return DATA_ERR;
}
else
{
memcpy(&Val, buf, sizeof(CPU_INT32U));
memcpy(&Val, buf, sizeof(CPU_INT32U));
}
// îïðåäåëèì äîï. ñìåùåíèå äëÿ ìàññèâà
if (desc->IsArray)
@ -177,6 +369,12 @@ int GetDataMin(const TDataDescStruct* desc, void* buf)
int GetDataStr(const TDataDescStruct* desc, CPU_INT08U* buf, CPU_INT32U index, CPU_INT08U flags)
{
TVariant32 Val;
if (desc->Type == DATA_TYPE_CHAR_STRING)
{
return GetData(desc, buf, index, flags);
}
GetData(desc, &Val, index, flags);
if (desc->Type == DATA_TYPE_ULONG)
@ -215,6 +413,10 @@ int GetDataStr(const TDataDescStruct* desc, CPU_INT08U* buf, CPU_INT32U index, C
{
PrintTimeString((char*)buf, Val.Val32U);
}
else if (desc->Type == DATA_TYPE_RUB_CENT)
{
sprintf((char*)buf, "%d,%02d", Val.Val32U / 100, Val.Val32U % 100);
}
else if (desc->Type == DATA_TYPE_IP_ADDR)
{
NET_ERR err;
@ -230,6 +432,36 @@ int GetDataStr(const TDataDescStruct* desc, CPU_INT08U* buf, CPU_INT32U index, C
int hour_ = Val.Val32U / 60;
sprintf((char*)buf, "%02d:%02d", hour_, min_);
}
else if (desc->Type == DATA_TYPE_TIME_SEC_H_MM)
{
int min_ = (Val.Val32U / 60) % 60;
int hour_ = Val.Val32U / 3600;
sprintf((char*)buf, "%d:%02d", hour_, min_);
}
else if (desc->Type == DATA_TYPE_TIME_SEC_M_SS)
{
int sec_ = Val.Val32U % 60;
int min_ = Val.Val32U / 60;
if (min_ < 60)
{
sprintf((char*)buf, "%d:%02d", min_, sec_);
}
else
{
int hour_ = min_ / 60;
min_ = (Val.Val32U / 60) % 60;
sprintf((char*)buf, "%d:%02d:%02d", hour_, min_, sec_);
}
}
else if (desc->Type == DATA_TYPE_TIME_SEC_M)
{
int min_ = Val.Val32U / 60;
sprintf((char*)buf, "%d", min_);
}
else if (desc->Type == DATA_TYPE_DATE)
{
PrintDateString((char*)buf, Val.Val32U);
}
else return DATA_ERR;
return DATA_OK;
@ -282,7 +514,8 @@ int GetDataItem(const TDataDescStruct* desc, CPU_INT08U* buf, CPU_INT32U itemind
// èíèöèàëèçàöèÿ ïî óìîë÷àíèþ
int InitDataByDefault(const TDataDescStruct* desc, CPU_INT32U index)
{
SetData(desc, (void*)&desc->DefaultValue, index, DATA_FLAG_DIRECT_INDEX);
if (desc->Type == DATA_TYPE_CHAR_STRING) SetData(desc, (void*)desc->DefaultValue.Val32U, 0, DATA_FLAG_SYSTEM_INDEX);
else SetData(desc, (void*)&desc->DefaultValue, index, DATA_FLAG_DIRECT_INDEX);
return DATA_OK;
}
@ -374,11 +607,11 @@ int CheckAllData(void)
return DATA_OK;
}
static char justname[128];
/// ïîèñê äåñêðèïòîðà äëÿ èìåíè
void FindDescByName(char* name, TDataDescStruct const** desc, CPU_INT32U *index)
{
char justname[48];
char *name_ptr = name;
*index = 0;
@ -406,3 +639,37 @@ void FindDescByName(char* name, TDataDescStruct const** desc, CPU_INT32U *index)
i++;
}
}
/// ÷òåíèå èìåíè äåñêðèïòîðà
void GetDescIdStr(TDataDescStruct const* desc, char* name)
{
*name = '\0';
int i = 0;
while (AllDataArray[i].ptr != NULL)
{
if (desc == AllDataArray[i].ptr)
{
strcpy(name, AllDataArray[i].name);
break;
}
i++;
}
}
/// ïîèñê äåñêðèïòîðà ïî èìåíè
void GetDescByIdStr(char* name, TDataDescStruct const** desc)
{
int i = 0;
*desc = NULL;
while (AllDataArray[i].ptr != NULL)
{
if (strcmp(AllDataArray[i].name, name) == 0)
{
*desc = AllDataArray[i].ptr;
break;
}
i++;
}
}

View File

@ -46,13 +46,19 @@ typedef struct{
CPU_INT08U Type;
//#define DATA_TYPE_UCHAR 0
//#define DATA_TYPE_SCHAR 1
#define DATA_TYPE_ULONG 2
#define DATA_TYPE_SLONG 3
#define DATA_TYPE_FLOAT 4
#define DATA_TYPE_TIME 5
#define DATA_TYPE_TIME_COUNT 6
#define DATA_TYPE_HOUR_MIN 7
#define DATA_TYPE_IP_ADDR 8
#define DATA_TYPE_ULONG 2
#define DATA_TYPE_SLONG 3
#define DATA_TYPE_FLOAT 4
#define DATA_TYPE_TIME 5
#define DATA_TYPE_TIME_COUNT 6 // ñ÷åò÷èê â ñåêóíäàõ
#define DATA_TYPE_HOUR_MIN 7 // âðåìÿ â ìèíóòàõ, îòîáðàæàåòñÿ êàê ××:ÌÌ
#define DATA_TYPE_TIME_SEC_H_MM 8 // ñ÷åò÷èê â ñåêóíäàõ, îòîáðàæàåòñÿ êàê ×:ÌÌ
#define DATA_TYPE_TIME_SEC_M_SS 9 // ñ÷åò÷èê â ñåêóíäàõ, îòîáðàæàåòñÿ êàê Ì:ÑÑ
#define DATA_TYPE_TIME_SEC_M 10 // ñ÷åò÷èê â ñåêóíäàõ, îòîáðàæàåòñÿ êàê ìèíóòû
#define DATA_TYPE_DATE 11
#define DATA_TYPE_IP_ADDR 12
#define DATA_TYPE_CHAR_STRING 13
#define DATA_TYPE_RUB_CENT 14
// ðàñïîëîæåíèå ïàðàìåòðà
CPU_INT08U Location;
@ -142,5 +148,9 @@ extern int GetDataMin(const TDataDescStruct* desc, void* buf);
extern int GetDataMax(const TDataDescStruct* desc, void* buf);
extern void FindDescByName(char* name, TDataDescStruct const** desc, CPU_INT32U *index);
extern void GetDescIdStr(TDataDescStruct const* desc, char* name);
extern void GetDescByIdStr(char* name, TDataDescStruct const** desc);
extern CPU_INT32U GetDataValidIndex(const TDataDescStruct* desc, CPU_INT32U index);
extern int SetDataFromStr(const TDataDescStruct* desc, char* buf, CPU_INT32U index, CPU_INT08U flags);
#endif //#ifndef _DATA_H_

View File

@ -30,6 +30,13 @@ const CPU_INT08U EditTimePos[12] =
12,13,
15,16
};
// ïîçèöèè äëÿ ðåäàêòèðîâàíèÿ äàòû
const CPU_INT08U EditDatePos[6] =
{
0, 1,
3, 4,
6, 7,
};
// ïîçèöèè äëÿ ðåäàêòèðîâàíèÿ ip-àäðåñà
const CPU_INT08U EditIpPos[12] =
{
@ -38,57 +45,143 @@ const CPU_INT08U EditIpPos[12] =
8, 9, 10,
12, 13, 14
};
CPU_INT08U EditBuf[32];
CPU_INT08U EditBuf[96];
#define EDIT_TYPE_NUMBER 0
#define EDIT_TYPE_ITEMS 1
CPU_INT08U refresh_menu = 0;
CPU_INT08U str_start_sym = 0;
CPU_INT32U str_last_time = 0;
extern TDataDescStruct const EventJournalIndexDesc;
static CPU_INT08U cursor_pos_x;
static CPU_INT08U cursor_pos_y;
static CPU_INT08U cursor_on_flag = 0;
void MenuCursorOn(CPU_INT08U x, CPU_INT08U y)
{
cursor_pos_x = x;
cursor_pos_y = y;
cursor_on_flag = 1;
}
void MenuCursorOff(void)
{
cursor_on_flag = 0;
}
void ShowMenuLine(TMenuLine* line_ptr, CPU_INT08U pos)
{
CPU_INT08U strbuf[32];
CPU_INT08U strbuf[96];
if (line_ptr->LineType == MENU_LINE_STRING)
memset(strbuf, 0, sizeof(strbuf));
if (line_ptr->LineType == MENU_LINE_STRING)
{
sprintf((char*)strbuf, " %s", (CPU_INT08U*)line_ptr->Ptr);
LCD_puts(strbuf, pos);
#if defined(CONFIG_LCD_1602A)
strcpy((char*)strbuf, (char const*)line_ptr->Ptr);
#else
if (MenuCurrentPanel == WORK_MENU)
sprintf((char*)strbuf, "%s", (CPU_INT08U*)line_ptr->Ptr);
else
sprintf((char*)strbuf, " %s", (CPU_INT08U*)line_ptr->Ptr);
#endif
}
else if (line_ptr->LineType == MENU_LINE_SHOW_DESC)
else if (line_ptr->LineType == MENU_LINE_SHOW_DESC)
{
strbuf[0] = ' ';
if ((MenuEditStatus) && (pos == EditLine))
#if !defined(CONFIG_LCD_1602A)
strbuf[0] = ' ';
#endif
if ((MenuEditStatus) && (pos == EditLine))
{
// âûâîäèì ðåäàêòèðóåìóþ ñòðîêó
if (EditDesc->IsIndex)
{
GetDataNameStr((const TDataDescStruct*)EditDesc, &strbuf[1]);
strcat((char*)strbuf, "<");
strcat((char*)strbuf, (char const*)EditBuf);
strcat((char*)strbuf, ">");
LCD_puts(strbuf, pos);
}
else
{
GetDataNameStr((const TDataDescStruct*)EditDesc, &strbuf[1]);
if (EditDesc->Name) strcat((char*)strbuf, "=");
strcat((char*)strbuf, (char const*)EditBuf);
LCD_puts(strbuf, pos);
}
// âûâîäèì ðåäàêòèðóåìóþ ñòðîêó
if (EditDesc->IsIndex)
{
GetDataNameStr((const TDataDescStruct*)EditDesc, &strbuf[strlen((char*)strbuf)]);
strcat((char*)strbuf, "<");
strcat((char*)strbuf, (char const*)EditBuf);
strcat((char*)strbuf, ">");
}
else
{
#if defined(CONFIG_LCD_1602A)
if ((EditDesc->Type == DATA_TYPE_TIME) || (EditDesc->Type == DATA_TYPE_IP_ADDR))
{
strcat((char*)&strbuf[strlen((char*)strbuf)], (char const*)EditBuf);
}
else
#endif
if (EditDesc->Type == DATA_TYPE_CHAR_STRING)
{
strcat((char*)&strbuf[strlen((char*)strbuf)], (char const*)EditBuf);
}
else
{
GetDataNameStr((const TDataDescStruct*)EditDesc, &strbuf[strlen((char*)strbuf)]);
if (EditDesc->Name) strcat((char*)strbuf, "=");
strcat((char*)strbuf, (char const*)EditBuf);
}
}
}
else
else
{
GetDataFullStr((const TDataDescStruct*)line_ptr->Ptr, &strbuf[1], 0, DATA_FLAG_SYSTEM_INDEX);
LCD_puts(strbuf, pos);
if (line_ptr->Ptr != &EventJournalIndexDesc)
{
GetDataFullStr((const TDataDescStruct*)line_ptr->Ptr, &strbuf[strlen((char*)strbuf)], 0, DATA_FLAG_SYSTEM_INDEX);
}
else
{
GetDataNameStr((const TDataDescStruct*)line_ptr->Ptr, &strbuf[strlen((char*)strbuf)]);
GetDataStr((const TDataDescStruct*)line_ptr->Ptr, &strbuf[strlen((char*)strbuf)], 0, DATA_FLAG_SYSTEM_INDEX);
}
}
}
else if (line_ptr->LineType == MENU_LINE_GOTO_MENU)
else if (line_ptr->LineType == MENU_LINE_GOTO_MENU)
{
sprintf((char*)strbuf, " %s", (CPU_INT08U*)line_ptr->Ptr);
LCD_puts(strbuf, pos);
#if defined(CONFIG_LCD_1602A)
sprintf((char*)strbuf, "%s", (CPU_INT08U*)line_ptr->Ptr);
#else
sprintf((char*)strbuf, " %s", (CPU_INT08U*)line_ptr->Ptr);
#endif
}
if (strlen((char*)strbuf) > MENU_SYMB_NUMBER)
{
if (!MenuEditStatus)
{
if (OSTimeGet() - str_last_time > 1000)
{
str_last_time = OSTimeGet();
str_start_sym++;
str_start_sym %= (strlen((char*)strbuf) - MENU_SYMB_NUMBER + 1);
}
LCD_puts(&strbuf[str_start_sym], pos);
}
else
{
if (EditDesc->Type == DATA_TYPE_TIME)
{
if (EditStart+EditTimePos[EditPos] > MENU_SYMB_NUMBER - 1)
{
str_start_sym = EditStart+EditTimePos[EditPos] - MENU_SYMB_NUMBER + 1;
}
else
{
str_start_sym = 0;
}
}
else
{
str_start_sym = 0;
}
LCD_puts(&strbuf[str_start_sym], pos);
}
}
else
{
LCD_puts(strbuf, pos);
}
}
void ClearMenuLine(CPU_INT08U pos)
@ -115,12 +208,17 @@ void ShowCurrentMenu(void)
CPU_INT08U i, j;
TMenuLine* pLine;
//MenuCurrentPanel->LineNum
#if !defined(CONFIG_LCD_1602A)
LCD_cursor_off();
#endif
// åñëè ïàíåëü ñòàòè÷åñêàÿ, ïðîñòî âûâîäèì ïåðâûå 4 ñòðîêè
if (MenuCurrentPanel->PanelType == MENU_PANEL_STATIC)
{
j=0;
LCD_cursor_off();
if (!cursor_on_flag) LCD_cursor_off();
for (i=0; i<MENU_LINES_NUMBER; i++)
{
pLine = (TMenuLine*)MenuCurrentPanel->LineArray[i].pMenuLine;
@ -135,6 +233,9 @@ void ShowCurrentMenu(void)
{
LCD_putc_embed(SYMB_IND_MARK, MENU_SYMB_NUMBER-2, 0); LCD_putc_embed(SYMB_DESC_MARK, MENU_SYMB_NUMBER-1, 0);
}
if (cursor_on_flag) {LCD_goto(cursor_pos_x, cursor_pos_y); LCD_cursor_on();}
return;
}
@ -146,6 +247,7 @@ void ShowCurrentMenu(void)
// âûâîäèì 3 ñòðîêè ñ ïåðåìåùåíèåì ïî ìåíþ
// MenuFirstLine - âåðõíÿÿ ñòðîêà äëÿ îòîáðàæåíèÿ
#if !defined(CONFIG_LCD_1602A)
if (MenuActiveLine == 0) MenuFirstLine = 0;
else
{
@ -156,6 +258,9 @@ void ShowCurrentMenu(void)
else MenuFirstLine = MenuActiveLine-2;
}
}
#else
MenuFirstLine = MenuActiveLine;
#endif
i=MenuFirstLine+1;
j=1;
@ -169,8 +274,9 @@ void ShowCurrentMenu(void)
}
while(j<MENU_LINES_NUMBER) ClearMenuLine(j++);
// ñòðåëî÷êà òåêóùåãî âûáðàííîãî ïóíêòà
#if !defined(CONFIG_LCD_1602A)
CPU_INT08U linetype = (((TMenuLine*)MenuCurrentPanel->LineArray[MenuActiveLine+1].pMenuLine)->LineType);
if (linetype == MENU_LINE_STRING)
{
@ -189,14 +295,17 @@ void ShowCurrentMenu(void)
else
LCD_putc_embed(SYMB_POINT_MARK, 0, MenuActiveLine-MenuFirstLine+1);
}
#endif
// çíàê èíäåêñà
#if !defined(CONFIG_LCD_1602A)
CPU_INT08U lineflags = (((TMenuLine*)MenuCurrentPanel->LineArray[0].pMenuLine)->Flags);
if (lineflags & MENU_INDEX_LINE)
{
LCD_putc_embed(SYMB_IND_MARK, MENU_SYMB_NUMBER-2, 0); LCD_putc_embed(SYMB_DESC_MARK, MENU_SYMB_NUMBER-1, 0);
}
#endif
// êóðñîð (àïïàðàòíûé)
if ((MenuEditStatus) && (!EditDesc->IsIndex))
{
@ -204,14 +313,40 @@ void ShowCurrentMenu(void)
{
LCD_goto(EditStart+EditPos, MenuActiveLine-MenuFirstLine+1);
}
else if (EditDesc->Type == DATA_TYPE_RUB_CENT)
{
LCD_goto(EditStart+EditPos, MenuActiveLine-MenuFirstLine+1);
}
else if ((EditDesc->Type == DATA_TYPE_TIME) || (EditDesc->Type == DATA_TYPE_HOUR_MIN))
{
LCD_goto(EditStart+EditTimePos[EditPos], MenuActiveLine-MenuFirstLine+1);
if (EditStart+EditTimePos[EditPos] >= MENU_SYMB_NUMBER - 1)
{
LCD_goto(MENU_SYMB_NUMBER - 1, MenuActiveLine-MenuFirstLine+1);
}
else
{
LCD_goto(EditStart+EditTimePos[EditPos], MenuActiveLine-MenuFirstLine+1);
}
}
else if (EditDesc->Type == DATA_TYPE_DATE)
{
if (EditStart+EditDatePos[EditPos] >= MENU_SYMB_NUMBER - 1)
{
LCD_goto(MENU_SYMB_NUMBER - 1, MenuActiveLine-MenuFirstLine+1);
}
else
{
LCD_goto(EditStart+EditDatePos[EditPos], MenuActiveLine-MenuFirstLine+1);
}
}
else if (EditDesc->Type == DATA_TYPE_IP_ADDR)
{
{
LCD_goto(EditStart+EditIpPos[EditPos], MenuActiveLine-MenuFirstLine+1);
}
}
else if (EditDesc->Type == DATA_TYPE_CHAR_STRING)
{
LCD_goto(EditStart+EditPos, MenuActiveLine-MenuFirstLine+1);
}
LCD_cursor_on();
}
else
@ -250,7 +385,11 @@ CPU_INT08U GetNextActiveLine(TMenuPanel *menu, CPU_INT08U recent)
while (i++ < menu->LineNum)
{
TMenuLine* mline = (TMenuLine*)menu->LineArray[i].pMenuLine;
if ((mline->LineType == MENU_LINE_GOTO_MENU) || (mline->LineType == MENU_LINE_SHOW_DESC))
if ((mline->LineType == MENU_LINE_GOTO_MENU) || (mline->LineType == MENU_LINE_SHOW_DESC)
#if defined(CONFIG_LCD_1602A)
|| (mline->LineType == MENU_LINE_STRING)
#endif
)
{
line = i;
break;
@ -327,7 +466,22 @@ void MenuSprintf(CPU_INT08U* str, CPU_INT08U len, CPU_INT32U Val)
format[5]=0;
sprintf((char*)str, (char const*)format, Val);
}
else if ((EditDesc->Type == DATA_TYPE_TIME) || (EditDesc->Type == DATA_TYPE_HOUR_MIN))
else if (EditDesc->Type == DATA_TYPE_RUB_CENT)
{
CPU_INT08U format[10];
format[0]='%';
format[1]='0';
format[2]='0'+(strlen((char*)str) - 3);
format[3]='u';
format[4]=',';
format[5]='%';
format[6]='0';
format[7]='2';
format[8]='d';
format[9]=0;
sprintf((char*)str, (char const*)format, Val / 100, Val % 100);
}
else if ((EditDesc->Type == DATA_TYPE_TIME) || (EditDesc->Type == DATA_TYPE_HOUR_MIN) || (EditDesc->Type == DATA_TYPE_DATE) || (EditDesc->Type == DATA_TYPE_TIME_SEC_H_MM) || (EditDesc->Type == DATA_TYPE_TIME_SEC_M))
{
GetDataStr(EditDesc, str, 0, DATA_FLAG_SYSTEM_INDEX);
}
@ -335,11 +489,20 @@ void MenuSprintf(CPU_INT08U* str, CPU_INT08U len, CPU_INT32U Val)
{
sprintf((char*)str, "%03d.%03d.%03d.%03d", (int)((Val >> 24) & 0xFF), (int)((Val >> 16) & 0xFF), (int)((Val >> 8) & 0xFF), (int)((Val >> 0) & 0xFF));
}
else if (EditDesc->Type == DATA_TYPE_CHAR_STRING)
{
GetDataStr(EditDesc, str, 0, DATA_FLAG_SYSTEM_INDEX);
while (strlen((char*)str) < len)
{
strcat((char*)str, " ");
}
}
}
// íà÷àëî ðåäàêòèðîâàíèÿ
void EnterEdit(void)
{
TRangeValueULONG* RVal;
// ïîçèöèÿ ðåäàêòèðîâàíèÿ, 0 - ñàìîå ñòàðøåå äåñÿòè÷íîå ÷èñëî
EditPos = 0;
// óêàçàòåëü íà ðåäàêòèðóåìûé äåñêðèïòîð
@ -347,26 +510,58 @@ void EnterEdit(void)
// íîìåð ñòðîêè ñ ðåäàêòèðóåìûì äåñêðèïòîðîì
EditLine = MenuActiveLine+1-MenuFirstLine;
// ðåäàêòèðóåìîå ÷èñëî
GetData(EditDesc, &EditVal, 0, DATA_FLAG_SYSTEM_INDEX);
// ãðàíèöû
TRangeValueULONG* RVal = EditDesc->RangeValue;
memcpy(&EditMin, &RVal->Min, sizeof(CPU_INT32U));
memcpy(&EditMax, &RVal->Max, sizeof(CPU_INT32U));
if (EditDesc->Type != DATA_TYPE_CHAR_STRING)
{
GetData(EditDesc, &EditVal, 0, DATA_FLAG_SYSTEM_INDEX);
// ãðàíèöû
RVal = EditDesc->RangeValue;
memcpy(&EditMin, &RVal->Min, sizeof(CPU_INT32U));
memcpy(&EditMax, &RVal->Max, sizeof(CPU_INT32U));
}
memset(EditBuf, 0, sizeof(EditBuf));
if (EditDesc->IsIndex)
{
GetDataStr((const TDataDescStruct*)EditDesc, EditBuf, 0, DATA_FLAG_SYSTEM_INDEX);
}
else
{
GetDataNameStr((const TDataDescStruct*)EditDesc, EditBuf);
if (EditDesc->Name) strcat((char*)EditBuf, "=");
#if defined(CONFIG_LCD_1602A)
if ((EditDesc->Type != DATA_TYPE_TIME) && (EditDesc->Type != DATA_TYPE_IP_ADDR))
{
#endif
GetDataNameStr((const TDataDescStruct*)EditDesc, EditBuf);
if (EditDesc->Name) strcat((char*)EditBuf, "=");
#if defined(CONFIG_LCD_1602A)
}
#endif
#if defined(CONFIG_LCD_1602A)
EditStart = strlen((char const*)EditBuf);
#else
EditStart = strlen((char const*)EditBuf)+1;
#endif
if (EditDesc->Type == DATA_TYPE_ULONG)
{
sprintf((char*)EditBuf, "%u", RVal->Max);
EditLen = strlen((char const*)EditBuf);
}
else if (EditDesc->Type == DATA_TYPE_RUB_CENT)
{
if (RVal->Max / 100 < 10)
{
sprintf((char*)EditBuf, "%d,%02d", RVal->Max / 100, RVal->Max % 100);
}
else if ((RVal->Max / 100 >= 10) && ((RVal->Max / 100 < 100)))
{
sprintf((char*)EditBuf, "%02d,%02d", RVal->Max / 100, RVal->Max % 100);
}
else if ((RVal->Max / 100 >= 100) && ((RVal->Max / 100 < 1000)))
{
sprintf((char*)EditBuf, "%03d,%02d", RVal->Max / 100, RVal->Max % 100);
}
EditLen = strlen((char const*)EditBuf);
}
else if (EditDesc->Type == DATA_TYPE_TIME)
{
EditLen = 12;
@ -379,6 +574,15 @@ void EnterEdit(void)
{
EditLen = 4;
}
else if (EditDesc->Type == DATA_TYPE_DATE)
{
EditLen = 6;
}
else if (EditDesc->Type == DATA_TYPE_CHAR_STRING)
{
EditStart=1;
EditLen = EditDesc->ArraySize;
}
else
{
EditLen = 0;
@ -406,6 +610,10 @@ void SaveEdit(void)
}
SetData(EditDesc, &EditVal, 0, DATA_FLAG_SYSTEM_INDEX);
}
else if (EditDesc->Type == DATA_TYPE_RUB_CENT)
{
SetDataFromStr(EditDesc, (char*)EditBuf, 0, DATA_FLAG_SYSTEM_INDEX);
}
else if (EditDesc->Type == DATA_TYPE_TIME)
{
TRTC_Data rtc;
@ -433,14 +641,73 @@ void SaveEdit(void)
hour_min = hour * 60 + min;
SetData(EditDesc, &hour_min, 0, DATA_FLAG_SYSTEM_INDEX);
}
else if (EditDesc->Type == DATA_TYPE_DATE)
{
TRTC_Data rtc;
ScanRTCDateStringRus((char*)EditBuf, &rtc);
if (RTCCheckTime(&rtc) == 0)
{ // îê
CPU_INT32U time;
time = GetSec(&rtc);
SetData(EditDesc, &time, 0, DATA_FLAG_SYSTEM_INDEX);
}
}
else if (EditDesc->Type == DATA_TYPE_CHAR_STRING)
{
for (int i = 0; i < EditDesc->ArraySize; i++)
{
if (EditBuf[i] == ' ')
{
EditBuf[i] = 0;
break;
}
}
SetData(EditDesc, EditBuf, 0, DATA_FLAG_SYSTEM_INDEX);
}
MenuEditStatus = 0;
}
#if defined(BOARD_SOLARIUM_WEB)
void ProcessDigitKey(int key)
{
if (EditDesc->Type == DATA_TYPE_ULONG)
{
EditBuf[EditPos] = '0' + key - KEY_DIGIT0;
}
else if (EditDesc->Type == DATA_TYPE_RUB_CENT)
{
EditBuf[EditPos] = '0' + key - KEY_DIGIT0;
}
else if (EditDesc->Type == DATA_TYPE_TIME)
{
EditBuf[EditTimePos[EditPos]] = '0' + key - KEY_DIGIT0;
}
else if (EditDesc->Type == DATA_TYPE_IP_ADDR)
{
EditBuf[EditIpPos[EditPos]] = '0' + key - KEY_DIGIT0;
}
else if (EditDesc->Type == DATA_TYPE_HOUR_MIN)
{
EditBuf[EditTimePos[EditPos]] = '0' + key - KEY_DIGIT0;;
}
else if (EditDesc->Type == DATA_TYPE_DATE)
{
EditBuf[EditDatePos[EditPos]] = '0' + key - KEY_DIGIT0;;
}
if (EditPos < EditLen-1) EditPos++;
else
{
if (EditDesc->Type != DATA_TYPE_TIME) EditPos = 0;
}
}
#endif
void MenuTask(void *p_arg)
{
int pause = 0;
str_last_time = OSTimeGet();
SetMenu(START_MENU);
while (1)
@ -453,27 +720,76 @@ void MenuTask(void *p_arg)
if (!MenuEditStatus)
{ // îòîáðàæåíèå ìåíþ
pause = 0;
#if defined(BOARD_SOLARIUM_WEB)
key_repeat1:
#endif
if (key)
{
switch (key){
#if defined(BOARD_SOLARIUM_WEB)
case KEY_DIGIT0:
break;
case KEY_DIGIT1:
break;
case KEY_DIGIT2:
key = KEY_UP;
goto key_repeat1;
case KEY_DIGIT3:
break;
case KEY_DIGIT4:
key = KEY_LEFT;
goto key_repeat1;
case KEY_DIGIT5:
break;
case KEY_DIGIT6:
key = KEY_RIGHT;
goto key_repeat1;
case KEY_DIGIT7:
break;
case KEY_DIGIT8:
key = KEY_DOWN;
goto key_repeat1;
case KEY_DIGIT9:
break;
case KEY_STAR:
key = KEY_CANSEL;
goto key_repeat1;
case KEY_SHARP:
key = KEY_START;
goto key_repeat1;
#endif
case KEY_UP:
//if (MenuActiveLine) MenuActiveLine--;
MenuActiveLine = GetPrevActiveLine(MenuCurrentPanel, MenuActiveLine);
ShowCurrentMenu();
{
CPU_INT08U active_line = GetPrevActiveLine(MenuCurrentPanel, MenuActiveLine);
if (MenuActiveLine != active_line)
{
str_start_sym = 0;
str_last_time = OSTimeGet();
}
MenuActiveLine = active_line;
ShowCurrentMenu();
}
break;
case KEY_DOWN:
//MenuActiveLine++;
//if (MenuActiveLine+1 >= MenuCurrentPanel->LineNum) MenuActiveLine--;
MenuActiveLine = GetNextActiveLine(MenuCurrentPanel, MenuActiveLine);
ShowCurrentMenu();
{
CPU_INT08U active_line = GetNextActiveLine(MenuCurrentPanel, MenuActiveLine);
if (MenuActiveLine != active_line)
{
str_start_sym = 0;
str_last_time = OSTimeGet();
}
MenuActiveLine = active_line;
ShowCurrentMenu();
}
break;
case KEY_LEFT:
{
TMenuLine* pLine = (TMenuLine*)MenuCurrentPanel->LineArray[0].pMenuLine;
if (pLine->Flags & MENU_INDEX_LINE)
TMenuLine* pLine = (TMenuLine*)MenuCurrentPanel->LineArray[0].pMenuLine;
if (pLine->Flags & MENU_INDEX_LINE)
{// ñâåðõó èíäåêñíûé ïàðàìåòð - ïîïðîáóåì åãî ïåðåêëþ÷èòü
TDataDescStruct* desc = (TDataDescStruct*)pLine->Ptr;
if (desc->Type == DATA_TYPE_ULONG)
@ -486,6 +802,8 @@ void MenuTask(void *p_arg)
if ((i < min) || (i > max)) i = max;
SetData(desc, &i, 0, DATA_FLAG_SYSTEM_INDEX);
}
str_start_sym = 0;
str_last_time = OSTimeGet();
ShowCurrentMenu();
}
}
@ -493,8 +811,8 @@ void MenuTask(void *p_arg)
case KEY_RIGHT:
{
TMenuLine* pLine = (TMenuLine*)MenuCurrentPanel->LineArray[0].pMenuLine;
if (pLine->Flags & MENU_INDEX_LINE)
TMenuLine* pLine = (TMenuLine*)MenuCurrentPanel->LineArray[0].pMenuLine;
if (pLine->Flags & MENU_INDEX_LINE)
{// ñâåðõó èíäåêñíûé ïàðàìåòð - ïîïðîáóåì åãî ïåðåêëþ÷èòü
TDataDescStruct* desc = (TDataDescStruct*)pLine->Ptr;
if (desc->Type == DATA_TYPE_ULONG)
@ -507,6 +825,8 @@ void MenuTask(void *p_arg)
if ((i < min) || (i > max)) i = min;
SetData(desc, &i, 0, DATA_FLAG_SYSTEM_INDEX);
}
str_start_sym = 0;
str_last_time = OSTimeGet();
ShowCurrentMenu();
}
}
@ -514,6 +834,8 @@ void MenuTask(void *p_arg)
case KEY_STOP:
// ïðîáóåì âûéòè â ïðåäûäóùåå ìåíþ
str_start_sym = 0;
str_last_time = OSTimeGet();
GoToPreviousMenu();
break;
@ -524,10 +846,14 @@ void MenuTask(void *p_arg)
if (pLine->LineType == MENU_LINE_SHOW_DESC)
{// âõîäèì â ðåäàêòèðîâàíèå, åñëè ìîæíî
TDataDescStruct* desc = (TDataDescStruct*)pLine->Ptr;
str_start_sym = 0;
str_last_time = OSTimeGet();
if (desc->Desc == DATA_DESC_EDIT) {EnterEdit(); pause=1000;}
}
else if (pLine->LineType == MENU_LINE_GOTO_MENU)
{// ïðîáóåì ïåðåéòè â ñëåäóþùåå ìåíþ
str_start_sym = 0;
str_last_time = OSTimeGet();
GoToNextMenu();
}
}
@ -543,7 +869,45 @@ void MenuTask(void *p_arg)
{ // ðåäàêòèðîâàíèå ïàðàìåòðà
if (key)
{
#if defined(BOARD_SOLARIUM_WEB)
key_repeat2:
#endif
switch (key){
#if defined(BOARD_SOLARIUM_WEB)
case KEY_DIGIT8:
if (EditDesc->IsIndex)
{
key = KEY_DOWN;
goto key_repeat2;
}
ProcessDigitKey(key);
break;
case KEY_DIGIT2:
if (EditDesc->IsIndex)
{
key = KEY_UP;
goto key_repeat2;
}
ProcessDigitKey(key);
break;
case KEY_DIGIT0:
case KEY_DIGIT1:
case KEY_DIGIT3:
case KEY_DIGIT4:
case KEY_DIGIT5:
case KEY_DIGIT6:
case KEY_DIGIT7:
case KEY_DIGIT9:
ProcessDigitKey(key);
break;
case KEY_STAR:
key = KEY_CANSEL;
goto key_repeat2;
case KEY_SHARP:
key = KEY_START;
goto key_repeat2;
#endif
case KEY_UP:
if (EditDesc->IsIndex)
{
@ -561,6 +925,11 @@ void MenuTask(void *p_arg)
EditBuf[EditPos]++;
if (EditBuf[EditPos] > '9') EditBuf[EditPos] = '0';
}
else if (EditDesc->Type == DATA_TYPE_RUB_CENT)
{
EditBuf[EditPos]++;
if (EditBuf[EditPos] > '9') EditBuf[EditPos] = '0';
}
else if (EditDesc->Type == DATA_TYPE_TIME)
{
EditBuf[EditTimePos[EditPos]]++;
@ -576,6 +945,16 @@ void MenuTask(void *p_arg)
EditBuf[EditTimePos[EditPos]]++;
if (EditBuf[EditTimePos[EditPos]] > '9') EditBuf[EditTimePos[EditPos]] = '0';
}
else if (EditDesc->Type == DATA_TYPE_DATE)
{
EditBuf[EditDatePos[EditPos]]++;
if (EditBuf[EditDatePos[EditPos]] > '9') EditBuf[EditDatePos[EditPos]] = '0';
}
else if (EditDesc->Type == DATA_TYPE_CHAR_STRING)
{
EditBuf[EditPos]++;
if (EditBuf[EditPos] > 'z') EditBuf[EditPos] = ' ';
}
}
break;
case KEY_DOWN:
@ -595,6 +974,11 @@ void MenuTask(void *p_arg)
EditBuf[EditPos]--;
if (EditBuf[EditPos] < '0') EditBuf[EditPos] = '9';
}
else if (EditDesc->Type == DATA_TYPE_RUB_CENT)
{
EditBuf[EditPos]--;
if (EditBuf[EditPos] < '0') EditBuf[EditPos] = '9';
}
else if (EditDesc->Type == DATA_TYPE_TIME)
{
EditBuf[EditTimePos[EditPos]]--;
@ -610,6 +994,17 @@ void MenuTask(void *p_arg)
EditBuf[EditTimePos[EditPos]]--;
if (EditBuf[EditTimePos[EditPos]] < '0') EditBuf[EditTimePos[EditPos]] = '9';
}
else if (EditDesc->Type == DATA_TYPE_DATE)
{
EditBuf[EditDatePos[EditPos]]--;
if (EditBuf[EditDatePos[EditPos]] < '0') EditBuf[EditDatePos[EditPos]] = '9';
}
else if (EditDesc->Type == DATA_TYPE_CHAR_STRING)
{
EditBuf[EditPos]--;
if (EditBuf[EditPos] < ' ') EditBuf[EditPos] = 'z';
}
}
break;
case KEY_LEFT:
@ -624,7 +1019,14 @@ void MenuTask(void *p_arg)
}
else
{
if (EditPos) EditPos--;
if (EditPos)
{
EditPos--;
if (EditDesc->Type == DATA_TYPE_RUB_CENT)
{
if (EditBuf[EditPos] == ',') EditPos--;
}
}
}
break;
case KEY_RIGHT:
@ -639,7 +1041,14 @@ void MenuTask(void *p_arg)
}
else
{
if (EditPos < EditLen-1) EditPos++;
if (EditPos < EditLen-1)
{
EditPos++;
if (EditDesc->Type == DATA_TYPE_RUB_CENT)
{
if (EditBuf[EditPos] == ',') EditPos++;
}
}
}
break;
case KEY_STOP:
@ -667,6 +1076,7 @@ void MenuTask(void *p_arg)
void InitMenu(void)
{
INT8U err;
MenuStackPtr = 0;
MenuActiveLine = 0;
@ -677,6 +1087,7 @@ void InitMenu(void)
memset(&MenuStack, 0, sizeof(TMenuStack)*STACKPANELSIZE);
OSTaskCreate(MenuTask, (void *)0, (OS_STK *)&MenuTaskStk[MENU_TASK_STK_SIZE-1], MENU_TASK_PRIO);
OSTaskNameSet(MENU_TASK_PRIO, "Menu Task", &err);
}

View File

@ -3,18 +3,31 @@
#include "cpu.h"
#define MENU_LINES_NUMBER 4
#define MENU_SYMB_NUMBER 20
#ifdef CONFIG_LCD_1602A
#define MENU_LINES_NUMBER 2
#define MENU_SYMB_NUMBER 16
#else
#define MENU_LINES_NUMBER 4
#define MENU_SYMB_NUMBER 20
#endif
// ñëóæåáíûå ñèìâîëû
#define SYMB_GO_UP 0x87
#define SYMB_GO_DOWN 0x86
#define SYMB_RIGHT_ARROW 0x3E
#define SYMB_DESC_MARK 0x3E
#define SYMB_IND_MARK 0x3C
#define SYMB_POINT_MARK 0x3E
#ifdef CONFIG_LCD_1602A
#define SYMB_RIGHT_ARROW '>'
#else
#define SYMB_RIGHT_ARROW '>' //0x13
#endif
#define SYMB_DESC_MARK '>'//0x84
#define SYMB_IND_MARK '<'//0x85
#define SYMB_POINT_MARK '*'//0xDF
#define MENU_MAX_INPUT_STRING_LEN 16
// ñòðóêòóðà îïèñàíèÿ ïóíêòà ìåíþ
@ -94,5 +107,8 @@ extern void ReInitMenu(void);
extern void MenuSprintf(CPU_INT08U* str, CPU_INT08U len, CPU_INT32U Val);
extern TMenuPanel* GetCurrentMenu(void);
extern void RefreshMenu(void);
extern void MenuCursorOn(CPU_INT08U x, CPU_INT08U y);
extern void MenuCursorOff(void);
#endif //#ifndef _MENU_H_

View File

@ -483,6 +483,9 @@ const CPU_INT08U str_SettingsMenu_6[] = "
const CPU_INT08U str_SettingsMenu_3[] = "Óñòàíîâêà ïàðîëÿ";
const CPU_INT08U str_SettingsMenu_4[] = "Óñòàíîâêà âðåìåíè";
const CPU_INT08U str_SettingsMenu_5[] = "Ñáðîñ íàñòðîåê";
#ifdef CONFIG_FTP_CLIENT_ENABLE
const CPU_INT08U str_SettingsMenu_9[] = "FTP";
#endif
const TMenuLine line_SettingsMenu_0 = {
MENU_LINE_STRING, // òèï ïóíêòà ìåíþ
@ -541,9 +544,18 @@ const TMenuLine line_SettingsMenu_7 = {
NULL // ïàíåëü äëÿ ïåðåõîäà
};
*/
const TMenuLineArray arr_SettingsMenuArray[] = {&line_SettingsMenu_0, &line_SettingsMenu_2, &line_SettingsMenu_5, &line_SettingsMenu_3, &line_SettingsMenu_6, &line_SettingsMenu_8, NULL};
const TMenuPanel SettingsMenuPanel[] = {arr_SettingsMenuArray, NULL, 6, MENU_PANEL_STANDARD};
#ifdef CONFIG_FTP_CLIENT_ENABLE
const TMenuLine line_SettingsMenu_9 = {
MENU_LINE_GOTO_MENU, // òèï ïóíêòà ìåíþ
0, // äîï. ôëàãè
(void*)&str_SettingsMenu_9, // óêàçàòåëü íà òåêñòîâóþ ñòðîêó èëè äåñêðèïòîð
(void*)&FtpSettingsMenuPanel // ïàíåëü äëÿ ïåðåõîäà
};
#endif
const TMenuLineArray arr_SettingsMenuArray[] = {&line_SettingsMenu_0, &line_SettingsMenu_2, &line_SettingsMenu_5, &line_SettingsMenu_3, &line_SettingsMenu_6, &line_SettingsMenu_8, &line_SettingsMenu_9, NULL};
const TMenuPanel SettingsMenuPanel[] = {arr_SettingsMenuArray, NULL, 7, MENU_PANEL_STANDARD};
/***********************************
@ -2061,3 +2073,92 @@ const TMenuLine line_ChannelCountersLongMenu_3 = {
const TMenuLineArray arr_ChannelCountersLongArray[] = {&line_ChannelCountersLongMenu_0, &line_ChannelCountersLongMenu_1, &line_ChannelCountersLongMenu_2, &line_ChannelCountersLongMenu_3, NULL};
const TMenuPanel ChannelCountersLongPanel[] = {arr_ChannelCountersLongArray, NULL, 4, MENU_PANEL_STATIC};
#ifdef CONFIG_FTP_CLIENT_ENABLE
/***********************************
ÌÅÍÞ ÍÀÑÒÐÎÉÊÀ FTP-ÊËÈÅÍÒÀ
***********************************/
const char str_FtpSettings_0[] = " ÍÀÑÒÐÎéÊÀ FTP";
const TMenuLine line_FtpSettingsMenu_0 = {
MENU_LINE_STRING, // òèï ïóíêòà ìåíþ
MENU_FIXED_LINE, // äîï. ôëàãè
(void*)&str_FtpSettings_0, // óêàçàòåëü íà òåêñòîâóþ ñòðîêó èëè äåñêðèïòîð
NULL // ïàíåëü äëÿ ïåðåõîäà
};
const TMenuLine line_FtpSettingsMenu_1 = {
MENU_LINE_SHOW_DESC, // òèï ïóíêòà ìåíþ
0, // äîï. ôëàãè
(void*)&FtpEnableDesc, // óêàçàòåëü íà òåêñòîâóþ ñòðîêó èëè äåñêðèïòîð
NULL // ïàíåëü äëÿ ïåðåõîäà
};
const TMenuLine line_FtpSettingsMenu_2 = {
MENU_LINE_SHOW_DESC, // òèï ïóíêòà ìåíþ
0, // äîï. ôëàãè
(void*)&FtpServerIpAddrDesc, // óêàçàòåëü íà òåêñòîâóþ ñòðîêó èëè äåñêðèïòîð
NULL // ïàíåëü äëÿ ïåðåõîäà
};
const TMenuLine line_FtpSettingsMenu_3 = {
MENU_LINE_SHOW_DESC, // òèï ïóíêòà ìåíþ
0, // äîï. ôëàãè
(void*)&FtpServerLoginDesc, // óêàçàòåëü íà òåêñòîâóþ ñòðîêó èëè äåñêðèïòîð
NULL // ïàíåëü äëÿ ïåðåõîäà
};
const TMenuLine line_FtpSettingsMenu_4 = {
MENU_LINE_SHOW_DESC, // òèï ïóíêòà ìåíþ
0, // äîï. ôëàãè
(void*)&FtpServerPassDesc, // óêàçàòåëü íà òåêñòîâóþ ñòðîêó èëè äåñêðèïòîð
NULL // ïàíåëü äëÿ ïåðåõîäà
};
const TMenuLine line_FtpSettingsMenu_5 = {
MENU_LINE_SHOW_DESC, // òèï ïóíêòà ìåíþ
0, // äîï. ôëàãè
(void*)&FtpDeviceNumberDesc, // óêàçàòåëü íà òåêñòîâóþ ñòðîêó èëè äåñêðèïòîð
NULL // ïàíåëü äëÿ ïåðåõîäà
};
const TMenuLine line_FtpSettingsMenu_6 = {
MENU_LINE_SHOW_DESC, // òèï ïóíêòà ìåíþ
0, // äîï. ôëàãè
(void*)&FtpSendHourMinDesc, // óêàçàòåëü íà òåêñòîâóþ ñòðîêó èëè äåñêðèïòîð
NULL // ïàíåëü äëÿ ïåðåõîäà
};
const TMenuLine line_FtpSettingsMenu_7 = {
MENU_LINE_SHOW_DESC, // òèï ïóíêòà ìåíþ
0, // äîï. ôëàãè
(void*)&FtpSendIntervalDesc, // óêàçàòåëü íà òåêñòîâóþ ñòðîêó èëè äåñêðèïòîð
NULL // ïàíåëü äëÿ ïåðåõîäà
};
const TMenuLine line_FtpSettingsMenu_8 = {
MENU_LINE_SHOW_DESC, // òèï ïóíêòà ìåíþ
0, // äîï. ôëàãè
(void*)&FtpLastSendTimeDesc, // óêàçàòåëü íà òåêñòîâóþ ñòðîêó èëè äåñêðèïòîð
NULL // ïàíåëü äëÿ ïåðåõîäà
};
const TMenuLine line_FtpSettingsMenu_9 = {
MENU_LINE_SHOW_DESC, // òèï ïóíêòà ìåíþ
0, // äîï. ôëàãè
(void*)&FtpLastSendResultDesc, // óêàçàòåëü íà òåêñòîâóþ ñòðîêó èëè äåñêðèïòîð
NULL // ïàíåëü äëÿ ïåðåõîäà
};
const TMenuLine line_FtpSettingsMenu_10 = {
MENU_LINE_SHOW_DESC, // òèï ïóíêòà ìåíþ
0, // äîï. ôëàãè
(void*)&FtpSendNowCmdDesc, // óêàçàòåëü íà òåêñòîâóþ ñòðîêó èëè äåñêðèïòîð
NULL // ïàíåëü äëÿ ïåðåõîäà
};
const TMenuLineArray arr_FtpSettingsArray[] = {&line_FtpSettingsMenu_0, &line_FtpSettingsMenu_1, &line_FtpSettingsMenu_2, &line_FtpSettingsMenu_3, &line_FtpSettingsMenu_4, &line_FtpSettingsMenu_5, &line_FtpSettingsMenu_6, &line_FtpSettingsMenu_7, &line_FtpSettingsMenu_8, &line_FtpSettingsMenu_9, &line_FtpSettingsMenu_10, NULL};
const TMenuPanel FtpSettingsMenuPanel[] = {arr_FtpSettingsArray, NULL, 11, MENU_PANEL_STANDARD};
#endif

View File

@ -63,5 +63,6 @@ extern void PrintEventJournalRecord(TEventRecord *record);
extern char str_EventNumber[24];
extern char str_EventData[24];
extern const TMenuPanel FtpSettingsMenuPanel[];
#endif //#ifndef _MENUDESC_H_

View File

@ -325,3 +325,28 @@ void PrintSecDateTimeStringRaw(char *str, CPU_INT32U time)
Sec2Date(&rtc_data, time);
sprintf(str, "20%02d%02d%02d_%02d%02d%02d", rtc_data.year, rtc_data.mon, rtc_data.date, rtc_data.hour, rtc_data.min, rtc_data.sec);
}
void ScanRTCDateStringRus(char *str, TRTC_Data *rtc)
{
int date, mon, year;
sscanf(str, "%02d/%02d/%02d", &date, &mon, &year);
rtc->year = year;
rtc->mon = mon;
rtc->date = date;
rtc->hour = 0;
rtc->min = 0;
rtc->sec = 0;
}
void PrintDateString(char *str, CPU_INT32U time)
{
TRTC_Data rtc_data;
Sec2Date(&rtc_data, time);
PrintRTCDateStringRus(str, &rtc_data);
}
void PrintRTCDateStringRus(char *str, TRTC_Data *rtc)
{
sprintf(str, "%02d/%02d/%02d", rtc->date, rtc->mon, rtc->year);
}

View File

@ -40,5 +40,8 @@ extern void PrintTimeString(char *str, CPU_INT32U time);
extern void PrintSecToHourMinSec(char *str, int seconds);
extern void PrintSecToBigHourMinSec(char *str, int seconds);
extern void PrintSecDateTimeStringRaw(char *str, CPU_INT32U time);
extern void ScanRTCDateStringRus(char *str, TRTC_Data *rtc);
extern void PrintDateString(char *str, CPU_INT32U time);
extern void PrintRTCDateStringRus(char *str, TRTC_Data *rtc);
#endif //#ifndef _TIME_H_

View File

@ -9,7 +9,7 @@ TriggerName=main
LimitSize=0
ByteLimit=50
[DebugChecksum]
Checksum=1364593978
Checksum=-408815470
[Exceptions]
StopOnUncaught=_ 0
StopOnThrow=_ 0
@ -38,8 +38,12 @@ Enabled=0
ShowSource=1
[JLinkDriver]
WatchCond=_ 0
Watch0=_ 0 "" 0 "" 0 "" 0 "" 0 0 0 0
Watch1=_ 0 "" 0 "" 0 "" 0 "" 0 0 0 0
Watch0=_ 0 "0x00000000" 0 "0x00000000" 0 "0x00000000" 0 "0x00000000" 0 0 0 0
Watch1=_ 0 "0x00000000" 0 "0x00000000" 0 "0x00000000" 0 "0x00000000" 0 0 0 0
[Disassemble mode]
mode=0
[Breakpoints2]
Count=0
[Log file]
LoggingEnabled=_ 0
LogFile=_ ""
@ -47,6 +51,9 @@ Category=_ 0
[TermIOLog]
LoggingEnabled=_ 0
LogFile=_ ""
[Aliases]
Count=0
SuppressDialog=0
[CallStackLog]
Enabled=0
[DriverProfiling]
@ -54,10 +61,3 @@ Enabled=0
Mode=0
Graph=0
Symbiont=0
[Disassemble mode]
mode=0
[Breakpoints2]
Count=0
[Aliases]
Count=0
SuppressDialog=0

File diff suppressed because one or more lines are too long

View File

@ -1646,6 +1646,10 @@
<name>BICOMP</name>
<file> 170</file>
</tool>
<tool>
<name>ICCARM</name>
<file> 194</file>
</tool>
</outputs>
<inputs>
<tool>