привидение меню настроек оборудования к общему виду

1 час
This commit is contained in:
Dmitriy 2021-02-11 22:04:50 +03:00
parent d91ced8f65
commit 0f6c9e54a1
13 changed files with 8465 additions and 8018 deletions

File diff suppressed because it is too large Load Diff

View File

@ -554,7 +554,7 @@ void UserStartupFunc(void)
// запустим валидатор // запустим валидатор
StartUpValidator(); StartUpValidator();
OSTimeDly(10000); OSTimeDly(1000);
InitFiscal(); InitFiscal();
// проинициализируем часы // проинициализируем часы

View File

@ -12,7 +12,7 @@ extern CPU_INT32U incas_common_bill_counter;
#define KBRD_TASK_STK_SIZE 128 #define KBRD_TASK_STK_SIZE 128
#define USER_TASK_STK_SIZE 384 #define USER_TASK_STK_SIZE 384
#define MENU_TASK_STK_SIZE 384 #define MENU_TASK_STK_SIZE 384
#define COIN_TASK_STK_SIZE 128 #define COIN_TASK_STK_SIZE 384
#define VALIDATOR_TASK_STK_SIZE 384 #define VALIDATOR_TASK_STK_SIZE 384
#define FISCAL_TASK_STK_SIZE 384 #define FISCAL_TASK_STK_SIZE 384
#define MODEM_TASK_STK_SIZE 768 #define MODEM_TASK_STK_SIZE 768

View File

@ -142,6 +142,63 @@ TDataDescStruct const EnableChannelDesc = {
0 0
}; };
/*************************************
Длина импульса входа монетоприемника, мс
*************************************/
TRangeValueULONG const CoinPulseLenRange = {20, 250};
CPU_INT08U const CoinPulseLenName[] = "Длина имп.,мс";
void OnChangeCoinPulseLen()
{
CPU_INT32U pulse, pause;
GetData(&CoinPulseLenDesc, &pulse, 0, DATA_FLAG_SYSTEM_INDEX);
GetData(&CoinPauseLenDesc, &pause, 0, DATA_FLAG_SYSTEM_INDEX);
SetCoinPulseParam(pulse, pause);
}
TDataDescStruct const CoinPulseLenDesc = {
DATA_DESC_EDIT, // тип дескриптора
DATA_TYPE_ULONG, // тип параметра
DATA_LOC_FRAM, // расположение параметра
DATA_NO_ARRAY, // признак массива
0, // размер массива
NULL, // указатель на десриптор индекса массива
(void*)offsetof(TFramMap, coin_pulse_len), // указатель на переменную или адрес FRAM
(void*)&CoinPulseLenRange, // указатель на границы параметра
OnChangeCoinPulseLen, // функция по изменению
sizeof(CPU_INT32U), // смещение между элементами в массиве
CoinPulseLenName, // указатель на строку названия параметра
DATA_NO_INDEX, // признак индексного параметра (список строк)
NULL, // указатель на список строк для индексного параметра
DATA_INIT_DISABLE,
50
};
/*************************************
Длина паузы входа монетника, мс
*************************************/
TRangeValueULONG const CoinPauseLenRange = {20, 250};
CPU_INT08U const CoinPauseLenName[] = "Пауза имп.,мс";
TDataDescStruct const CoinPauseLenDesc = {
DATA_DESC_EDIT, // тип дескриптора
DATA_TYPE_ULONG, // тип параметра
DATA_LOC_FRAM, // расположение параметра
DATA_NO_ARRAY, // признак массива
0, // размер массива
NULL, // указатель на десриптор индекса массива
(void*)offsetof(TFramMap, coin_pause_len), // указатель на переменную или адрес FRAM
(void*)&CoinPauseLenRange, // указатель на границы параметра
OnChangeCoinPulseLen, // функция по изменению
sizeof(CPU_INT32U), // смещение между элементами в массиве
CoinPauseLenName, // указатель на строку названия параметра
DATA_NO_INDEX, // признак индексного параметра (список строк)
NULL, // указатель на список строк для индексного параметра
DATA_INIT_DISABLE,
20
};
/************************************* /*************************************
Длина импульса входа купюрника, мс Длина импульса входа купюрника, мс
*************************************/ *************************************/
@ -199,6 +256,186 @@ TDataDescStruct const CashPauseLenDesc = {
20 20
}; };
/*************************************
Длина импульса входа банковского терминала, мс
*************************************/
TRangeValueULONG const BankPulseLenRange = {20, 250};
CPU_INT08U const BankPulseLenName[] = "Длина имп.,мс";
void OnChangeBankPulseLen()
{
CPU_INT32U pulse, pause;
GetData(&BankPulseLenDesc, &pulse, 0, DATA_FLAG_SYSTEM_INDEX);
GetData(&BankPauseLenDesc, &pause, 0, DATA_FLAG_SYSTEM_INDEX);
SetBankPulseParam(pulse, pause);
}
TDataDescStruct const BankPulseLenDesc = {
DATA_DESC_EDIT, // тип дескриптора
DATA_TYPE_ULONG, // тип параметра
DATA_LOC_FRAM, // расположение параметра
DATA_NO_ARRAY, // признак массива
0, // размер массива
NULL, // указатель на десриптор индекса массива
(void*)offsetof(TFramMap, bank_pulse_len), // указатель на переменную или адрес FRAM
(void*)&BankPulseLenRange, // указатель на границы параметра
OnChangeBankPulseLen, // функция по изменению
sizeof(CPU_INT32U), // смещение между элементами в массиве
BankPulseLenName, // указатель на строку названия параметра
DATA_NO_INDEX, // признак индексного параметра (список строк)
NULL, // указатель на список строк для индексного параметра
DATA_INIT_DISABLE,
50
};
/*************************************
Длина паузы входа банковского терминала, мс
*************************************/
TRangeValueULONG const BankPauseLenRange = {20, 250};
CPU_INT08U const BankPauseLenName[] = "Пауза имп.,мс";
TDataDescStruct const BankPauseLenDesc = {
DATA_DESC_EDIT, // тип дескриптора
DATA_TYPE_ULONG, // тип параметра
DATA_LOC_FRAM, // расположение параметра
DATA_NO_ARRAY, // признак массива
0, // размер массива
NULL, // указатель на десриптор индекса массива
(void*)offsetof(TFramMap, bank_pause_len), // указатель на переменную или адрес FRAM
(void*)&BankPauseLenRange, // указатель на границы параметра
OnChangeBankPulseLen, // функция по изменению
sizeof(CPU_INT32U), // смещение между элементами в массиве
BankPauseLenName, // указатель на строку названия параметра
DATA_NO_INDEX, // признак индексного параметра (список строк)
NULL, // указатель на список строк для индексного параметра
DATA_INIT_DISABLE,
20
};
/*************************************
Цена импульса банковского терминала в импульсном режиме
*************************************/
TRangeValueULONG const BankPerPulseRange = {1, 9999};
CPU_INT08U const BankPerPulseName[] = "Руб./имп.";
TDataDescStruct const BankPerPulseDesc = {
DATA_DESC_EDIT, // тип дескриптора
DATA_TYPE_ULONG, // тип параметра
DATA_LOC_FRAM, // расположение параметра
DATA_NO_ARRAY, // признак массива
0, // размер массива
NULL, // указатель на десриптор индекса массива
(void*)offsetof(TFramMap, DeviceConfig.BankPerPulse), // указатель на переменную или адрес FRAM
(void*)&BankPerPulseRange, // указатель на границы параметра
NULL, // функция по изменению
sizeof(CPU_INT32U), // смещение между элементами в массиве
BankPerPulseName, // указатель на строку названия параметра
DATA_NO_INDEX, // признак индексного параметра (список строк)
NULL, // указатель на список строк для индексного параметра
DATA_INIT_DISABLE,
10 // значение по умолчанию
};
void OnChangeLevel()
{
CPU_INT32U level1, level2, level3;
GetData(&CashLevelDesc, &level1, 0, DATA_FLAG_SYSTEM_INDEX);
GetData(&BankLevelDesc, &level2, 0, DATA_FLAG_SYSTEM_INDEX);
GetData(&CoinLevelDesc, &level3, 0, DATA_FLAG_SYSTEM_INDEX);
SetLevelParam(level1, level2, level3);
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr = 0;
#endif
OS_ENTER_CRITICAL();
InitInputPorts();
OS_EXIT_CRITICAL();
}
void OnChangeLevelWithoutInit()
{
CPU_INT32U level1, level2, level3;
GetData(&CashLevelDesc, &level1, 0, DATA_FLAG_SYSTEM_INDEX);
GetData(&BankLevelDesc, &level2, 0, DATA_FLAG_SYSTEM_INDEX);
GetData(&CoinLevelDesc, &level3, 0, DATA_FLAG_SYSTEM_INDEX);
SetLevelParam(level1, level2, level3);
}
/*************************************
Уровень сигнала монетника
*************************************/
TRangeValueULONG const LevelRange = {0, 1};
CPU_INT08U const LevelName[] = "Уровень";
CPU_INT08U const Level_str0[] = "LOW";
CPU_INT08U const Level_str1[] = "HIGH";
CPU_INT08U const *LevelList[] = {Level_str0, Level_str1};
TDataDescStruct const CoinLevelDesc = {
DATA_DESC_EDIT, // тип дескриптора
DATA_TYPE_ULONG, // тип параметра
DATA_LOC_FRAM, // расположение параметра
DATA_NO_ARRAY, // признак массива
0, // размер массива
NULL, // указатель на десриптор индекса массива
(void*)offsetof(TFramMap, DeviceConfig.CoinLevel), // указатель на переменную или адрес FRAM
(void*)&LevelRange, // указатель на границы параметра
OnChangeLevel, // функция по изменению
sizeof(CPU_INT32U), // смещение между элементами в массиве
LevelName, // указатель на строку названия параметра
DATA_IS_INDEX, // признак индексного параметра (список строк)
LevelList, // указатель на список строк для индексного параметра
DATA_INIT_DISABLE,
0 // значение по умолчанию
};
/*************************************
Уровень сигнала купюрника
*************************************/
TDataDescStruct const CashLevelDesc = {
DATA_DESC_EDIT, // тип дескриптора
DATA_TYPE_ULONG, // тип параметра
DATA_LOC_FRAM, // расположение параметра
DATA_NO_ARRAY, // признак массива
0, // размер массива
NULL, // указатель на десриптор индекса массива
(void*)offsetof(TFramMap, DeviceConfig.CashLevel), // указатель на переменную или адрес FRAM
(void*)&LevelRange, // указатель на границы параметра
OnChangeLevel, // функция по изменению
sizeof(CPU_INT32U), // смещение между элементами в массиве
LevelName, // указатель на строку названия параметра
DATA_IS_INDEX, // признак индексного параметра (список строк)
LevelList, // указатель на список строк для индексного параметра
DATA_INIT_DISABLE,
0 // значение по умолчанию
};
/*************************************
Уровень сигнала банковского терминала
*************************************/
TDataDescStruct const BankLevelDesc = {
DATA_DESC_EDIT, // тип дескриптора
DATA_TYPE_ULONG, // тип параметра
DATA_LOC_FRAM, // расположение параметра
DATA_NO_ARRAY, // признак массива
0, // размер массива
NULL, // указатель на десриптор индекса массива
(void*)offsetof(TFramMap, DeviceConfig.BankLevel), // указатель на переменную или адрес FRAM
(void*)&LevelRange, // указатель на границы параметра
OnChangeLevel, // функция по изменению
sizeof(CPU_INT32U), // смещение между элементами в массиве
LevelName, // указатель на строку названия параметра
DATA_IS_INDEX, // признак индексного параметра (список строк)
LevelList, // указатель на список строк для индексного параметра
DATA_INIT_DISABLE,
0 // значение по умолчанию
};
/************************************* /*************************************
IP-адрес поста IP-адрес поста
*************************************/ *************************************/
@ -408,6 +645,30 @@ TDataDescStruct const EnableValidatorDesc = {
1 // значение по умолчанию 1 // значение по умолчанию
}; };
/*************************************
Включение банковского терминала
*************************************/
TRangeValueULONG const EnableBankRange = {0, 1};
CPU_INT08U const EnableBankName[] = "Банк.термин.";
TDataDescStruct const EnableBankDesc = {
DATA_DESC_EDIT, // тип дескриптора
DATA_TYPE_ULONG, // тип параметра
DATA_LOC_FRAM, // расположение параметра
DATA_NO_ARRAY, // признак массива
0, // размер массива
NULL, // указатель на десриптор индекса массива
(void*)offsetof(TFramMap, DeviceConfig.EnableBank), // указатель на переменную или адрес FRAM
(void*)&EnableBankRange, // указатель на границы параметра
NULL, // функция по изменению
sizeof(CPU_INT32U), // смещение между элементами в массиве
EnableBankName, // указатель на строку названия параметра
DATA_IS_INDEX, // признак индексного параметра (список строк)
EnableValidatorList, // указатель на список строк для индексного параметра
DATA_INIT_DISABLE,
0 // значение по умолчанию
};
/************************************* /*************************************
Включение модема Включение модема
*************************************/ *************************************/
@ -3135,6 +3396,30 @@ TDataDescStruct const IncasTimeDesc = {
0 0
}; };
/*************************************
Стоимость жетона, руб. хоппера
*************************************/
CPU_INT08U const HopperCostName[] = "Жетон, руб";
TRangeValueULONG const HopperCostRange = {0, 9999};
TDataDescStruct const HopperCostDesc = {
DATA_DESC_EDIT, // тип дескриптора
DATA_TYPE_ULONG, // тип параметра
DATA_LOC_FRAM, // расположение параметра
DATA_NO_ARRAY, // признак массива
0, // размер массива
NULL, // указатель на десриптор индекса массива
(void*)offsetof(TFramMap, DeviceConfig.hopperCost), // указатель на переменную или адрес FRAM
(void*)&HopperCostRange, // указатель на границы параметра
NULL, // функция по изменению
0, // смещение между элементами в массиве
HopperCostName, // указатель на строку названия параметра
DATA_NO_INDEX, // признак индексного параметра (список строк)
NULL, // указатель на список строк для индексного параметра
DATA_INIT_DISABLE,
10
};
//************************************************** //**************************************************
//************************************************** //**************************************************
//************************************************** //**************************************************
@ -3211,8 +3496,19 @@ const TDataDescArrayStruct AllDataArray[] =
{&CashPulseLenDesc, "CashPulseLenDesc"}, {&CashPulseLenDesc, "CashPulseLenDesc"},
{&CashPauseLenDesc, "CashPauseLenDesc"}, {&CashPauseLenDesc, "CashPauseLenDesc"},
{&EnableBankDesc, "EnableBankDesc"},
{&BankPerPulseDesc, "BankPerPulseDesc"},
{&BankPulseLenDesc, "BankPulseLenDesc"},
{&BankPauseLenDesc, "BankPauseLenDesc"},
{&BankLevelDesc, "BankLevelDesc"},
{&CashLevelDesc, "CashLevelDesc"},
{&CoinLevelDesc, "CoinLevelDesc"},
{&CoinPulseLenDesc, "CoinPulseLenDesc"},
{&CoinPauseLenDesc, "CoinPauseLenDesc"},
{&HopperCostDesc, "HopperCostDesc"},
{NULL, ""} {NULL, ""}
}; };

View File

@ -56,11 +56,12 @@ typedef struct{
}TChannelConfig; }TChannelConfig;
// ñòðóêòóðà êîíôèãóðàöèè àïïàðàòóðû // ñòðóêòóðà êîíôèãóðàöèè àïïàðàòóðû
typedef struct{ typedef struct{
CPU_INT32U EnableValidator; CPU_INT32U EnableValidator;
CPU_INT32U EnableCoinAcceptor; CPU_INT32U EnableCoinAcceptor;
CPU_INT32U EnableBank;
CPU_INT32U EnableModem; CPU_INT32U EnableModem;
CPU_INT32U EnableFiscal; CPU_INT32U EnableFiscal;
CPU_INT32U EnableFiscalDayClear; CPU_INT32U EnableFiscalDayClear;
@ -79,6 +80,13 @@ typedef struct{
CPU_INT32U CashMode; CPU_INT32U CashMode;
CPU_INT32U CashPerPulse; // öåíà èìïóëüñà êóïþðíèêà CPU_INT32U CashPerPulse; // öåíà èìïóëüñà êóïþðíèêà
CPU_INT32U BankPerPulse; // öåíà èìïóëüñà áàíêîâñêîãî òåðìèíàëà
CPU_INT32U CoinLevel; // óðîâåíü ñèãíàëà ìîíåòíèêà
CPU_INT32U CashLevel; // óðîâåíü ñèãíàëà êóïþðíèêà
CPU_INT32U BankLevel; // óðîâåíü ñèãíàëà áàíêîâñêîãî òåðìèíàëà
CPU_INT32U PrintTimeout; CPU_INT32U PrintTimeout;
CPU_INT32U PrintTimeoutAfter; CPU_INT32U PrintTimeoutAfter;
@ -86,8 +94,14 @@ typedef struct{
CPU_INT32U DeviceId; CPU_INT32U DeviceId;
// íàñòðîéêè õîïïåðà
CPU_INT32U hopperCost;
}TDeviceConfig; }TDeviceConfig;
extern void OnChangeCashPulseLen();
extern void OnChangeCoinPulseLen();
extern void OnChangeSinalPulseLen();
extern CPU_INT32U PeriodIndex; extern CPU_INT32U PeriodIndex;
extern CPU_INT32U ChannelIndex; extern CPU_INT32U ChannelIndex;
@ -227,4 +241,21 @@ extern TDataDescStruct const SubjSellDesc;
extern TDataDescStruct const CommandV2Desc; extern TDataDescStruct const CommandV2Desc;
extern TDataDescStruct const TaxSystemDesc; extern TDataDescStruct const TaxSystemDesc;
extern void OnChangeBankPulseLen();
extern TDataDescStruct const BankPerPulseDesc;
extern TDataDescStruct const BankPulseLenDesc;
extern TDataDescStruct const BankPauseLenDesc;
extern TDataDescStruct const BankLevelDesc;
extern TDataDescStruct const CashLevelDesc;
extern TDataDescStruct const CoinLevelDesc;
extern TDataDescStruct const EnableBankDesc;
extern TDataDescStruct const CoinPulseLenDesc;
extern TDataDescStruct const CoinPauseLenDesc;
extern TDataDescStruct const HopperCostDesc;
#endif //#ifndef _DATADESC_H_ #endif //#ifndef _DATADESC_H_

View File

@ -50,9 +50,18 @@ typedef struct
CPU_INT08U manual_service_flag[4]; CPU_INT08U manual_service_flag[4];
char manual_service_name[32]; char manual_service_name[32];
// íàñòðîéêè ìîíåòíèêà
CPU_INT32U coin_pulse_len;
CPU_INT32U coin_pause_len;
// íàñòðîéêè êóïþðíèêà
CPU_INT32U cash_pulse_len; CPU_INT32U cash_pulse_len;
CPU_INT32U cash_pause_len; CPU_INT32U cash_pause_len;
// íàñòðîéêè áàíêîâñêîãî òåðìèíàëà
CPU_INT32U bank_pulse_len;
CPU_INT32U bank_pause_len;
CPU_INT32U TaxFormat; CPU_INT32U TaxFormat;
CPU_INT32U SubjSell; CPU_INT32U SubjSell;
CPU_INT32U CommandV2; CPU_INT32U CommandV2;

View File

@ -845,8 +845,9 @@ const TMenuPanel PriceWeekendMenuPanel[] = {arr_PriceMenuArrayWend, OnEnterPanel
const CPU_INT08U str_DeviceMenu_0[] = " ÎÁÎÐÓÄÎÂÀÍÈÅ"; const CPU_INT08U str_DeviceMenu_0[] = " ÎÁÎÐÓÄÎÂÀÍÈÅ";
const CPU_INT08U str_DeviceMenu_1[] = "ÔÐ"; const CPU_INT08U str_DeviceMenu_1[] = "ÔÐ";
const CPU_INT08U str_DeviceMenu_2[] = "Ìîíåòîïðèåìíèê"; const CPU_INT08U str_DeviceMenu_2[] = "Ìîíåòîïðèåìíèê";
const CPU_INT08U str_DeviceMenu_3[] = "Ìîäåì"; const CPU_INT08U str_DeviceMenu_3[] = "Áàíê.òåðìèíàë";
const CPU_INT08U str_DeviceMenu_4[] = "Êóïþðîïðèåìíèê"; const CPU_INT08U str_DeviceMenu_4[] = "Êóïþðîïðèåìíèê";
const CPU_INT08U str_DeviceMenu_5[] = "Õîïïåð";
const TMenuLine line_DeviceMenu_0 = { const TMenuLine line_DeviceMenu_0 = {
MENU_LINE_STRING, // òèï ïóíêòà ìåíþ MENU_LINE_STRING, // òèï ïóíêòà ìåíþ
@ -880,11 +881,18 @@ const TMenuLine line_DeviceMenu_4 = {
MENU_LINE_GOTO_MENU, // òèï ïóíêòà ìåíþ MENU_LINE_GOTO_MENU, // òèï ïóíêòà ìåíþ
0, // äîï. ôëàãè 0, // äîï. ôëàãè
(void*)str_DeviceMenu_3, // óêàçàòåëü íà òåêñòîâóþ ñòðîêó èëè äåñêðèïòîð (void*)str_DeviceMenu_3, // óêàçàòåëü íà òåêñòîâóþ ñòðîêó èëè äåñêðèïòîð
(void*)&ModemSetupPanel // ïàíåëü äëÿ ïåðåõîäà (void*)&BankSetupPanel // ïàíåëü äëÿ ïåðåõîäà
}; };
const TMenuLineArray arr_DeviceMenuArray[] = {&line_DeviceMenu_0, &line_DeviceMenu_1, &line_DeviceMenu_2, &line_DeviceMenu_3, &line_DeviceMenu_4, NULL}; const TMenuLine line_DeviceMenu_5 = {
const TMenuPanel DeviceMenuPanel[] = {arr_DeviceMenuArray, NULL, 5, MENU_PANEL_STANDARD}; MENU_LINE_GOTO_MENU, // òèï ïóíêòà ìåíþ
0, // äîï. ôëàãè
(void*)str_DeviceMenu_5, // óêàçàòåëü íà òåêñòîâóþ ñòðîêó èëè äåñêðèïòîð
(void*)&HopperSetupPanel // ïàíåëü äëÿ ïåðåõîäà
};
const TMenuLineArray arr_DeviceMenuArray[] = {&line_DeviceMenu_0, &line_DeviceMenu_1, &line_DeviceMenu_2, &line_DeviceMenu_3, &line_DeviceMenu_4, &line_DeviceMenu_5, NULL};
const TMenuPanel DeviceMenuPanel[] = {arr_DeviceMenuArray, NULL, 6, MENU_PANEL_STANDARD};
/*********************************** /***********************************
@ -1013,8 +1021,29 @@ const TMenuLine line_CoinMenu_2 = {
NULL // ïàíåëü äëÿ ïåðåõîäà NULL // ïàíåëü äëÿ ïåðåõîäà
}; };
const TMenuLineArray arr_CoinMenuArray[] = {&line_CoinMenu_0, &line_CoinMenu_1, &line_CoinMenu_2, NULL}; const TMenuLine line_CoinMenu_3 = {
const TMenuPanel CoinSetupPanel[] = {arr_CoinMenuArray, NULL, 3, MENU_PANEL_STANDARD}; MENU_LINE_SHOW_DESC, // òèï ïóíêòà ìåíþ
0, // äîï. ôëàãè
(void*)&CoinPulseLenDesc, // óêàçàòåëü íà òåêñòîâóþ ñòðîêó èëè äåñêðèïòîð
NULL // ïàíåëü äëÿ ïåðåõîäà
};
const TMenuLine line_CoinMenu_4 = {
MENU_LINE_SHOW_DESC, // òèï ïóíêòà ìåíþ
0, // äîï. ôëàãè
(void*)&CoinPauseLenDesc, // óêàçàòåëü íà òåêñòîâóþ ñòðîêó èëè äåñêðèïòîð
NULL // ïàíåëü äëÿ ïåðåõîäà
};
const TMenuLine line_CoinMenu_5 = {
MENU_LINE_SHOW_DESC, // òèï ïóíêòà ìåíþ
0, // äîï. ôëàãè
(void*)&CoinLevelDesc, // óêàçàòåëü íà òåêñòîâóþ ñòðîêó èëè äåñêðèïòîð
NULL // ïàíåëü äëÿ ïåðåõîäà
};
const TMenuLineArray arr_CoinMenuArray[] = {&line_CoinMenu_0, &line_CoinMenu_1, &line_CoinMenu_2, &line_CoinMenu_3, &line_CoinMenu_4, &line_CoinMenu_5, NULL};
const TMenuPanel CoinSetupPanel[] = {arr_CoinMenuArray, NULL, 6, MENU_PANEL_STANDARD};
/*********************************** /***********************************
ÌÅÍÞ ÍÀÑÒÐÎÉÊÀ ÊÓÏÞÐÎÏÐÈÅÌÍÈÊÀ ÌÅÍÞ ÍÀÑÒÐÎÉÊÀ ÊÓÏÞÐÎÏÐÈÅÌÍÈÊÀ
@ -1066,6 +1095,78 @@ const TMenuLine line_CashMenu_5 = {
const TMenuLineArray arr_ValidatorMenuArray[] = {&line_CashMenu_0, &line_CashMenu_1, &line_CashMenu_2, &line_CashMenu_3, &line_CashMenu_4, &line_CashMenu_5, NULL}; const TMenuLineArray arr_ValidatorMenuArray[] = {&line_CashMenu_0, &line_CashMenu_1, &line_CashMenu_2, &line_CashMenu_3, &line_CashMenu_4, &line_CashMenu_5, NULL};
const TMenuPanel ValidatorSetupPanel[] = {arr_ValidatorMenuArray, NULL, 6, MENU_PANEL_STANDARD}; const TMenuPanel ValidatorSetupPanel[] = {arr_ValidatorMenuArray, NULL, 6, MENU_PANEL_STANDARD};
/***********************************
ÌÅÍÞ ÍÀÑÒÐÎÉÊÀ ÁÀÍÊÎÂÑÊÈÕ ÒÅÐÌÈÍÀËÎÂ
***********************************/
const CPU_INT08U str_BankMenu_0[] = "ÍÀÑÒÐ.ÁÀÍÊ.ÒÅÐÌ";
const TMenuLine line_BankMenu_0 = {
MENU_LINE_STRING, // òèï ïóíêòà ìåíþ
MENU_FIXED_LINE, // äîï. ôëàãè
(void*)str_CashMenu_0, // óêàçàòåëü íà òåêñòîâóþ ñòðîêó èëè äåñêðèïòîð
NULL // ïàíåëü äëÿ ïåðåõîäà
};
const TMenuLine line_BankMenu_1 = {
MENU_LINE_SHOW_DESC, // òèï ïóíêòà ìåíþ
0, // äîï. ôëàãè
(void*)&EnableBankDesc, // óêàçàòåëü íà òåêñòîâóþ ñòðîêó èëè äåñêðèïòîð
NULL // ïàíåëü äëÿ ïåðåõîäà
};
const TMenuLine line_BankMenu_3 = {
MENU_LINE_SHOW_DESC, // òèï ïóíêòà ìåíþ
0, // äîï. ôëàãè
(void*)&BankPerPulseDesc, // óêàçàòåëü íà òåêñòîâóþ ñòðîêó èëè äåñêðèïòîð
NULL // ïàíåëü äëÿ ïåðåõîäà
};
const TMenuLine line_BankMenu_4 = {
MENU_LINE_SHOW_DESC, // òèï ïóíêòà ìåíþ
0, // äîï. ôëàãè
(void*)&BankPulseLenDesc, // óêàçàòåëü íà òåêñòîâóþ ñòðîêó èëè äåñêðèïòîð
NULL // ïàíåëü äëÿ ïåðåõîäà
};
const TMenuLine line_BankMenu_5 = {
MENU_LINE_SHOW_DESC, // òèï ïóíêòà ìåíþ
0, // äîï. ôëàãè
(void*)&BankPauseLenDesc, // óêàçàòåëü íà òåêñòîâóþ ñòðîêó èëè äåñêðèïòîð
NULL // ïàíåëü äëÿ ïåðåõîäà
};
const TMenuLine line_BankMenu_6 = {
MENU_LINE_SHOW_DESC, // òèï ïóíêòà ìåíþ
0, // äîï. ôëàãè
(void*)&BankLevelDesc, // óêàçàòåëü íà òåêñòîâóþ ñòðîêó èëè äåñêðèïòîð
NULL // ïàíåëü äëÿ ïåðåõîäà
};
const TMenuLineArray arr_BankMenuArray[] = {&line_BankMenu_0, &line_BankMenu_1, &line_BankMenu_3, &line_BankMenu_4, &line_BankMenu_5, &line_BankMenu_6, NULL};
const TMenuPanel BankSetupPanel[] = {arr_BankMenuArray, NULL, 6, MENU_PANEL_STANDARD};
/***********************************
ÌÅÍÞ ÍÀÑÒÐÎÉÊÀ ÕÎÏÏÅÐÀ
***********************************/
const CPU_INT08U str_HopperMenu_0[] = "ÍÀÑÒÐÎéÊÈ ÕÎÏÏÅÐÀ";
const TMenuLine line_HopperMenu_0 = {
MENU_LINE_STRING, // òèï ïóíêòà ìåíþ
MENU_FIXED_LINE, // äîï. ôëàãè
(void*)str_HopperMenu_0, // óêàçàòåëü íà òåêñòîâóþ ñòðîêó èëè äåñêðèïòîð
NULL // ïàíåëü äëÿ ïåðåõîäà
};
const TMenuLine line_HopperMenu_1 = {
MENU_LINE_SHOW_DESC, // òèï ïóíêòà ìåíþ
0, // äîï. ôëàãè
(void*)&HopperCostDesc, // óêàçàòåëü íà òåêñòîâóþ ñòðîêó èëè äåñêðèïòîð
NULL // ïàíåëü äëÿ ïåðåõîäà
};
const TMenuLineArray arr_HopperMenuArray[] = {&line_HopperMenu_0, &line_HopperMenu_1, NULL};
const TMenuPanel HopperSetupPanel[] = {arr_HopperMenuArray, NULL, 2, MENU_PANEL_STANDARD};
/*********************************** /***********************************
ÌÅÍÞ ÍÀÑÒÐÎÉÊÀ ÌÎÄÅÌÀ ÌÅÍÞ ÍÀÑÒÐÎÉÊÀ ÌÎÄÅÌÀ
***********************************/ ***********************************/

View File

@ -20,6 +20,8 @@ extern const TMenuPanel CommonCountersLongPanel[];
extern const TMenuPanel BillCountersPanel[]; extern const TMenuPanel BillCountersPanel[];
extern const TMenuPanel ModemSetupPanel[]; extern const TMenuPanel ModemSetupPanel[];
extern const TMenuPanel CoinSetupPanel[]; extern const TMenuPanel CoinSetupPanel[];
extern const TMenuPanel BankSetupPanel[];
extern const TMenuPanel HopperSetupPanel[];
extern const TMenuPanel JournalIsReset[]; extern const TMenuPanel JournalIsReset[];
extern const TMenuPanel ClearJournalMenuPanel[]; extern const TMenuPanel ClearJournalMenuPanel[];
extern const TMenuPanel StatIsReset[]; extern const TMenuPanel StatIsReset[];

View File

@ -59,17 +59,53 @@ CPU_INT32U period_bank;
CPU_INT32U period_signal; CPU_INT32U period_signal;
CPU_INT32U period_hopper; CPU_INT32U period_hopper;
void SetCoinPulseParam(CPU_INT32U pulse, CPU_INT32U pause)
{
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr = 0;
#endif
OS_ENTER_CRITICAL();
coin_pulse = pulse * 1;
coin_pause = pause;
OS_EXIT_CRITICAL();
}
void SetCashPulseParam(CPU_INT32U pulse, CPU_INT32U pause) void SetCashPulseParam(CPU_INT32U pulse, CPU_INT32U pause)
{ {
#if OS_CRITICAL_METHOD == 3 #if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr = 0; OS_CPU_SR cpu_sr = 0;
#endif #endif
OS_ENTER_CRITICAL(); OS_ENTER_CRITICAL();
cash_pulse = pulse * 100; cash_pulse = pulse * 1;
cash_pause = pause; cash_pause = pause;
OS_EXIT_CRITICAL(); OS_EXIT_CRITICAL();
} }
void SetBankPulseParam(CPU_INT32U pulse, CPU_INT32U pause)
{
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr = 0;
#endif
OS_ENTER_CRITICAL();
bank_pulse = pulse * 1;
bank_pause = pause;
OS_EXIT_CRITICAL();
}
void SetLevelParam(CPU_INT32U level1, CPU_INT32U level2, CPU_INT32U level3)
{
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr = 0;
#endif
OS_ENTER_CRITICAL();
cashLevel = level1;
bankLevel = level2;
coinLevel = level3;
OS_EXIT_CRITICAL();
}
void CoinTask(void *p_arg) void CoinTask(void *p_arg)
{ {
CPU_INT32U enable_coin; CPU_INT32U enable_coin;
@ -486,7 +522,7 @@ void InitImpInput (void)
OnChangeCoinPulseLen(); OnChangeCoinPulseLen();
OnChangeCashPulseLen(); OnChangeCashPulseLen();
OnChangeBankPulseLen(); OnChangeBankPulseLen();
OnChangeHopperPulseLen(); //OnChangeHopperPulseLen();
OS_ENTER_CRITICAL(); OS_ENTER_CRITICAL();

View File

@ -15,9 +15,14 @@ extern CPU_INT32U GetCoinCount(void);
extern CPU_INT32U GetResetCoinCount(void); extern CPU_INT32U GetResetCoinCount(void);
extern void CoinDisable(void); extern void CoinDisable(void);
extern void CoinEnable(void); extern void CoinEnable(void);
extern void InitInputPorts();
extern CPU_INT32U GetCashCount(void); extern CPU_INT32U GetCashCount(void);
extern CPU_INT32U GetResetCashCount(void); extern CPU_INT32U GetResetCashCount(void);
extern void SetCoinPulseParam(CPU_INT32U pulse, CPU_INT32U pause);
extern void SetCashPulseParam(CPU_INT32U pulse, CPU_INT32U pause); extern void SetCashPulseParam(CPU_INT32U pulse, CPU_INT32U pause);
extern void SetBankPulseParam(CPU_INT32U pulse, CPU_INT32U pause);
extern void SetLevelParam(CPU_INT32U level1, CPU_INT32U level2, CPU_INT32U level3);
#define BIT(bit) (1UL << (bit)) #define BIT(bit) (1UL << (bit))

View File

@ -9,7 +9,7 @@ TriggerName=main
LimitSize=0 LimitSize=0
ByteLimit=50 ByteLimit=50
[DebugChecksum] [DebugChecksum]
Checksum=803613283 Checksum=-314564541
[Exceptions] [Exceptions]
StopOnUncaught=_ 0 StopOnUncaught=_ 0
StopOnThrow=_ 0 StopOnThrow=_ 0

View File

@ -2,57 +2,47 @@
<Workspace> <Workspace>
<ConfigDictionary> <ConfigDictionary>
<CurrentConfigs>
<Project>sk-mlpc2368/Flash Central</Project> <CurrentConfigs><Project>sk-mlpc2368/Flash Central</Project></CurrentConfigs></ConfigDictionary>
</CurrentConfigs>
</ConfigDictionary>
<Desktop> <Desktop>
<Static> <Static>
<Workspace> <Workspace>
<ColumnWidths> <ColumnWidths>
<Column0>177</Column0>
<Column1>27</Column1>
<Column2>27</Column2>
<Column3>27</Column3>
</ColumnWidths> <Column0>177</Column0><Column1>27</Column1><Column2>27</Column2><Column3>27</Column3></ColumnWidths>
</Workspace> </Workspace>
<Build> <Build>
<ColumnWidth0>20</ColumnWidth0>
<ColumnWidth1>980</ColumnWidth1>
<ColumnWidth2>261</ColumnWidth2>
<ColumnWidth3>65</ColumnWidth3>
</Build> <ColumnWidth0>20</ColumnWidth0><ColumnWidth1>980</ColumnWidth1><ColumnWidth2>261</ColumnWidth2><ColumnWidth3>65</ColumnWidth3></Build>
<Find-in-Files> <Find-in-Files>
<ColumnWidth0>470</ColumnWidth0>
<ColumnWidth1>67</ColumnWidth1>
<ColumnWidth2>806</ColumnWidth2>
</Find-in-Files> <ColumnWidth0>470</ColumnWidth0><ColumnWidth1>67</ColumnWidth1><ColumnWidth2>806</ColumnWidth2></Find-in-Files>
<TerminalIO/> <TerminalIO/>
</Static> </Static>
<Windows> <Windows>
<Wnd2>
<Wnd0>
<Tabs> <Tabs>
<Tab> <Tab>
<Identity>TabID-22094-17165</Identity> <Identity>TabID-22094-17165</Identity>
<TabName>Workspace</TabName> <TabName>Workspace</TabName>
<Factory>Workspace</Factory> <Factory>Workspace</Factory>
<Session> <Session>
<NodeDict>
<ExpandedNode>sk-mlpc2368</ExpandedNode> <NodeDict><ExpandedNode>sk-mlpc2368</ExpandedNode><ExpandedNode>sk-mlpc2368/PROJECT</ExpandedNode><ExpandedNode>sk-mlpc2368/PROJECT/app</ExpandedNode><ExpandedNode>sk-mlpc2368/PROJECT/data</ExpandedNode><ExpandedNode>sk-mlpc2368/PROJECT/drivers</ExpandedNode><ExpandedNode>sk-mlpc2368/PROJECT/drivers/ccnet</ExpandedNode><ExpandedNode>sk-mlpc2368/PROJECT/drivers/lcd</ExpandedNode><ExpandedNode>sk-mlpc2368/PROJECT/menu</ExpandedNode><ExpandedNode>sk-mlpc2368/PROJECT/services</ExpandedNode></NodeDict></Session>
<ExpandedNode>sk-mlpc2368/PROJECT</ExpandedNode>
<ExpandedNode>sk-mlpc2368/PROJECT/app</ExpandedNode>
<ExpandedNode>sk-mlpc2368/PROJECT/drivers</ExpandedNode>
<ExpandedNode>sk-mlpc2368/PROJECT/drivers/ccnet</ExpandedNode>
<ExpandedNode>sk-mlpc2368/PROJECT/drivers/lcd</ExpandedNode>
<ExpandedNode>sk-mlpc2368/PROJECT/menu</ExpandedNode>
<ExpandedNode>sk-mlpc2368/PROJECT/services</ExpandedNode>
</NodeDict>
</Session>
</Tab> </Tab>
</Tabs> </Tabs>
<SelectedTab>0</SelectedTab>
</Wnd2> <SelectedTab>0</SelectedTab></Wnd0><Wnd1>
<Wnd3>
<Tabs> <Tabs>
<Tab> <Tab>
<Identity>TabID-15821-17283</Identity> <Identity>TabID-15821-17283</Identity>
@ -67,168 +57,21 @@
<Session/> <Session/>
</Tab> </Tab>
</Tabs> </Tabs>
<SelectedTab>0</SelectedTab>
</Wnd3> <SelectedTab>0</SelectedTab></Wnd1></Windows>
</Windows>
<Editor> <Editor>
<Pane>
<Tab>
<Factory>TextEditor</Factory>
<Filename>$WS_DIR$\PROJECT\app\app_serv.c</Filename>
<XPos>0</XPos> <Pane><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\PROJECT\app\app_serv.c</Filename><XPos>0</XPos><YPos>532</YPos><SelStart>18305</SelStart><SelEnd>18305</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\PROJECT\services\validator.c</Filename><XPos>0</XPos><YPos>338</YPos><SelStart>8384</SelStart><SelEnd>8384</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\PROJECT\services\coin.c</Filename><XPos>0</XPos><YPos>511</YPos><SelStart>11916</SelStart><SelEnd>11916</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\PROJECT\services\coin.h</Filename><XPos>0</XPos><YPos>3</YPos><SelStart>485</SelStart><SelEnd>485</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\PROJECT\services\time.c</Filename><XPos>0</XPos><YPos>55</YPos><SelStart>1532</SelStart><SelEnd>1532</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\PROJECT\drivers\ccnet\CCRSProtocol.h</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>434</SelStart><SelEnd>434</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\PROJECT\app\app_serv.h</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>360</SelStart><SelEnd>360</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\PROJECT\data\datadesc.h</Filename><XPos>0</XPos><YPos>73</YPos><SelStart>2838</SelStart><SelEnd>2838</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\PROJECT\data\datadesc.c</Filename><XPos>0</XPos><YPos>3399</YPos><SelStart>157293</SelStart><SelEnd>157293</SelEnd></Tab><ActiveTab>8</ActiveTab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\OS\bsp\iolpc2368.h</Filename><XPos>0</XPos><YPos>797</YPos><SelStart>17962</SelStart><SelEnd>17962</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\PROJECT\data\fram_map.h</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>176</SelStart><SelEnd>176</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\PROJECT\menu\menudesc.c</Filename><XPos>0</XPos><YPos>879</YPos><SelStart>37022</SelStart><SelEnd>37022</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\PROJECT\menu\menudesc.h</Filename><XPos>0</XPos><YPos>0</YPos><SelStart>779</SelStart><SelEnd>779</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\OS\app\app.c</Filename><XPos>0</XPos><YPos>33</YPos><SelStart>1131</SelStart><SelEnd>1131</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>$WS_DIR$\OS\bsp\bsp.c</Filename><XPos>0</XPos><YPos>278</YPos><SelStart>11612</SelStart><SelEnd>11612</SelEnd></Tab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>
<YPos>566</YPos>
<SelStart>18843</SelStart>
<SelEnd>18843</SelEnd>
</Tab>
<Tab>
<Factory>TextEditor</Factory>
<Filename>$WS_DIR$\PROJECT\services\validator.c</Filename>
<XPos>0</XPos>
<YPos>338</YPos>
<SelStart>8384</SelStart>
<SelEnd>8384</SelEnd>
</Tab>
<Tab>
<Factory>TextEditor</Factory>
<Filename>$WS_DIR$\PROJECT\services\coin.c</Filename>
<XPos>0</XPos>
<YPos>221</YPos>
<SelStart>5327</SelStart>
<SelEnd>5327</SelEnd>
</Tab>
<ActiveTab>2</ActiveTab>
<Tab>
<Factory>TextEditor</Factory>
<Filename>$WS_DIR$\PROJECT\services\coin.h</Filename>
<XPos>0</XPos>
<YPos>0</YPos>
<SelStart>741</SelStart>
<SelEnd>741</SelEnd>
</Tab>
<Tab>
<Factory>TextEditor</Factory>
<Filename>$WS_DIR$\PROJECT\services\time.c</Filename>
<XPos>0</XPos>
<YPos>55</YPos>
<SelStart>1532</SelStart>
<SelEnd>1532</SelEnd>
</Tab>
<Tab>
<Factory>TextEditor</Factory>
<Filename>$WS_DIR$\PROJECT\drivers\ccnet\CCRSProtocol.h</Filename>
<XPos>0</XPos>
<YPos>0</YPos>
<SelStart>434</SelStart>
<SelEnd>434</SelEnd>
</Tab>
<Tab>
<Factory>TextEditor</Factory>
<Filename>$WS_DIR$\PROJECT\app\app_serv.h</Filename>
<XPos>0</XPos>
<YPos>27</YPos>
<SelStart>1127</SelStart>
<SelEnd>1127</SelEnd>
</Tab>
<Tab>
<Factory>TextEditor</Factory>
<Filename>$WS_DIR$\PROJECT\data\datadesc.h</Filename>
<XPos>0</XPos>
<YPos>201</YPos>
<SelStart>7402</SelStart>
<SelEnd>7402</SelEnd>
</Tab>
<Tab>
<Factory>TextEditor</Factory>
<Filename>$WS_DIR$\PROJECT\data\datadesc.c</Filename>
<XPos>0</XPos>
<YPos>136</YPos>
<SelStart>6348</SelStart>
<SelEnd>6348</SelEnd>
</Tab>
<Tab>
<Factory>TextEditor</Factory>
<Filename>$WS_DIR$\OS\bsp\iolpc2368.h</Filename>
<XPos>0</XPos>
<YPos>797</YPos>
<SelStart>17962</SelStart>
<SelEnd>17962</SelEnd>
</Tab>
</Pane>
<ActivePane>0</ActivePane>
<Sizes>
<Pane>
<X>1000000</X>
<Y>1000000</Y>
</Pane>
</Sizes>
<SplitMode>1</SplitMode>
</Editor>
<Positions> <Positions>
<Top>
<Row0>
<Sizes>
<Toolbar-04b829c8>
<key>iaridepm.enu1</key>
</Toolbar-04b829c8> <Top><Row0><Sizes><Toolbar-049429c8><key>iaridepm.enu1</key></Toolbar-049429c8></Sizes></Row0><Row1><Sizes/></Row1></Top><Left><Row0><Sizes><Wnd0><Rect><Top>-2</Top><Left>-2</Left><Bottom>517</Bottom><Right>268</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>146413</sizeHorzCX><sizeHorzCY>275862</sizeHorzCY><sizeVertCX>197657</sizeVertCX><sizeVertCY>715862</sizeVertCY></Rect></Wnd0></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd1><Rect><Top>-2</Top><Left>-2</Left><Bottom>163</Bottom><Right>1368</Right><x>-2</x><y>-2</y><xscreen>1370</xscreen><yscreen>165</yscreen><sizeHorzCX>1002928</sizeHorzCX><sizeHorzCY>227586</sizeHorzCY><sizeVertCX>146413</sizeVertCX><sizeVertCY>275862</sizeVertCY></Rect></Wnd1></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>
</Sizes>
</Row0>
<Row1>
<Sizes/>
</Row1>
</Top>
<Left>
<Row0>
<Sizes>
<Wnd2>
<Rect>
<Top>-2</Top>
<Left>-2</Left>
<Bottom>517</Bottom>
<Right>268</Right>
<x>-2</x>
<y>-2</y>
<xscreen>200</xscreen>
<yscreen>200</yscreen>
<sizeHorzCX>146413</sizeHorzCX>
<sizeHorzCY>275862</sizeHorzCY>
<sizeVertCX>197657</sizeVertCX>
<sizeVertCY>715862</sizeVertCY>
</Rect>
</Wnd2>
</Sizes>
</Row0>
</Left>
<Right>
<Row0>
<Sizes/>
</Row0>
</Right>
<Bottom>
<Row0>
<Sizes>
<Wnd3>
<Rect>
<Top>-2</Top>
<Left>-2</Left>
<Bottom>163</Bottom>
<Right>1368</Right>
<x>-2</x>
<y>-2</y>
<xscreen>1370</xscreen>
<yscreen>165</yscreen>
<sizeHorzCX>1002928</sizeHorzCX>
<sizeHorzCY>227586</sizeHorzCY>
<sizeVertCX>146413</sizeVertCX>
<sizeVertCY>275862</sizeVertCY>
</Rect>
</Wnd3>
</Sizes>
</Row0>
</Bottom>
<Float>
<Sizes/>
</Float>
</Positions>
</Desktop> </Desktop>
</Workspace> </Workspace>

File diff suppressed because it is too large Load Diff