Версия 3.48

Нужна небольшая доработка для прошивки solarium_3_45.hex:
на платах, которые давно в использовании, иногда выгорает нога контроллера MK_P9.
P0.23	MK_P9	IMPULSE OUTPUT (импульсный выход монетоприемника)
И надо в программе MK_P9 заменить на
P0.25	MK_P7
А мы на плате замкнем эти 2 ноги, одна из которых итак не работает.
This commit is contained in:
Dmitriy 2025-08-19 22:25:35 +03:00
parent 067e029937
commit 83c3ed98fa
6 changed files with 747 additions and 690 deletions

Binary file not shown.

View File

@ -85,20 +85,27 @@ void UserAppTask(void *p_arg)
static CPU_INT32U time_last_insert_coin = 0; static CPU_INT32U time_last_insert_coin = 0;
{ {
CPU_INT32U m=0; EnabledChannelsNum = 0;
GetData(&AcceptedMoneyDesc, &m, 0, DATA_FLAG_SYSTEM_INDEX); for (CPU_INT08U i=0; i<CHANNELS_NUM; i++)
if (m) {
{ CPU_INT32U en = 0;
EnabledChannelsNum = 0; GetData(&EnableChannelDesc, &en, i, DATA_FLAG_DIRECT_INDEX);
for (CPU_INT08U i=0; i<CHANNELS_NUM; i++) if (en) {EnabledChannelsNum++;}
{ }
CPU_INT32U en = 0;
GetData(&EnableChannelDesc, &en, i, DATA_FLAG_DIRECT_INDEX); if(EnabledChannelsNum == 1)
if (en) {EnabledChannelsNum++;} {
} UserMenuState = USER_STATE_ACCEPT_MONEY;
UserMenuState = USER_STATE_ACCEPT_MONEY; CoinEnable();
}
} }
{
CPU_INT32U m=0;
GetData(&AcceptedMoneyDesc, &m, 0, DATA_FLAG_SYSTEM_INDEX);
if (m)
{
UserMenuState = USER_STATE_ACCEPT_MONEY;
}
} }
incassation = 0; incassation = 0;
@ -400,8 +407,19 @@ void UserAppTask(void *p_arg)
case EVENT_KEY_STOP: case EVENT_KEY_STOP:
if ((GetMode() != MODE_WORK) || (incassation)) break; if ((GetMode() != MODE_WORK) || (incassation)) break;
if (TstCriticalErrors()) {UserPrintErrorMenu(); RefreshMenu(); break;} if (TstCriticalErrors()) {UserPrintErrorMenu(); RefreshMenu(); break;}
UserMenuState = USER_STATE_FIRST_PAGE;
UserPrintFirstMenu(RecentChannel); if ((EnabledChannelsNum == 1) && (!IsChannelOn(RecentChannel)))
{
UserMenuState = USER_STATE_ACCEPT_MONEY;
UserPrintMoneyMenu();
CoinEnable();
}
else
{
UserMenuState = USER_STATE_FIRST_PAGE;
UserPrintFirstMenu(RecentChannel);
}
RefreshMenu(); RefreshMenu();
if (IsValidatorConnected()) CC_CmdBillType(0x000000, 0x000000, ADDR_FL); if (IsValidatorConnected()) CC_CmdBillType(0x000000, 0x000000, ADDR_FL);
break; break;
@ -430,12 +448,12 @@ void UserAppTask(void *p_arg)
UserPrintThanksMenu(); UserPrintThanksMenu();
RefreshMenu(); RefreshMenu();
UserMenuState = USER_STATE_SHOW_THANKS; UserMenuState = USER_STATE_SHOW_THANKS;
ThanksCtr = 3;
} }
else else
{ {
UserMenuState = USER_STATE_FIRST_PAGE; UserMenuState = USER_STATE_FIRST_PAGE;
} }
ThanksCtr = 3;
LED_off(); LED_off();
} }
break; break;
@ -507,8 +525,8 @@ void UserAppTask(void *p_arg)
// íàõîäèìñÿ â ðàáî÷åì ðåæèìå // íàõîäèìñÿ â ðàáî÷åì ðåæèìå
// -------------------------- // --------------------------
if (EnabledChannelsNum == 0) break; if (EnabledChannelsNum == 0) break;
if (UserMenuState == USER_STATE_FIRST_PAGE) if (UserMenuState == USER_STATE_FIRST_PAGE)
{ // ïîëüçîâàòåëü âûáðàë êàíàë è íàæàë ÑÒÀÐÒ { // ïîëüçîâàòåëü âûáðàë êàíàë è íàæàë ÑÒÀÐÒ
if (IsChannelOn(RecentChannel)) break; if (IsChannelOn(RecentChannel)) break;
@ -521,6 +539,8 @@ void UserAppTask(void *p_arg)
break; break;
} }
FPost(); FPost();
if (EnabledChannelsNum == 1) break;
UserMenuState = USER_STATE_ACCEPT_MONEY; UserMenuState = USER_STATE_ACCEPT_MONEY;
UserPrintMoneyMenu(); UserPrintMoneyMenu();
RefreshMenu(); RefreshMenu();
@ -612,26 +632,21 @@ void UserAppTask(void *p_arg)
UserPrintThanksMenu(); UserPrintThanksMenu();
RefreshMenu(); RefreshMenu();
UserMenuState = USER_STATE_SHOW_THANKS; UserMenuState = USER_STATE_SHOW_THANKS;
ThanksCtr = 5;
} }
else else
{ {
UserMenuState = USER_STATE_FIRST_PAGE; UserMenuState = USER_STATE_FIRST_PAGE;
} }
ThanksCtr = 5;
} }
} }
else else
{ // äåíåã íåäîñòàòî÷íî äëÿ ðàáîòû { // äåíåã íåäîñòàòî÷íî äëÿ ðàáîòû
} }
break; break;
} }
break; break;
} }
} }
else else
@ -767,7 +782,42 @@ void UserPrintMoneyMenu(void)
{ {
char buf[32]; char buf[32];
CPU_INT32U accmoney; CPU_INT32U accmoney;
if (EnabledChannelsNum == 1)
{
CPU_INT32U price=1, pricetime=0, time=0;
GetRecentChannelPrice(RecentChannel, &price, &pricetime);
sprintf(buf, "ÖÅÍÀ %dðóá./%dìèí.", price, pricetime);
PrintUserMenuStr(buf, 0);
accmoney = GetAcceptedMoney() + GetAcceptedBankMoney();
sprintf(buf, "ÏÐÈÍßÒÎ %d ðóá.", accmoney);
PrintUserMenuStr(buf, 1);
time = (pricetime*accmoney*60)/price;
sprintf(buf, "ÎÏËÀ×ÅÍÎ %d:%02d", time/60, time%60);
PrintUserMenuStr(buf, 2);
CPU_INT32U mintime=0, maxtime=0;
GetData(&MinWorkTimeDesc, &mintime, RecentChannel, DATA_FLAG_DIRECT_INDEX);
GetData(&MaxWorkTimeDesc, &maxtime, RecentChannel, DATA_FLAG_DIRECT_INDEX);
if (time >= mintime*60)
{
LED_on();
sprintf(buf, "ÍÀÆÌÈÒÅ CTAPT");
}
else
{
LED_off();
sprintf(buf, "ÂÍÅÑÈÒÅ ÄÅÍbÃÈ");
}
PrintUserMenuStr(buf, 3);
return;
}
sprintf(buf, "Âíåñèòå äåíüãè"); sprintf(buf, "Âíåñèòå äåíüãè");
PrintUserMenuStr(buf, 0); PrintUserMenuStr(buf, 0);
accmoney = GetAcceptedMoney() + GetAcceptedBankMoney(); accmoney = GetAcceptedMoney() + GetAcceptedBankMoney();
@ -1024,12 +1074,17 @@ void WorkServer(void)
{ // çàêîí÷èëè ïàóçó { // çàêîí÷èëè ïàóçó
ChannelsState[i] = CHANNEL_STATE_EMPTY; ChannelsState[i] = CHANNEL_STATE_EMPTY;
ChannelsPayedTime[i] = 0; ChannelsPayedTime[i] = 0;
if (EnabledChannelsNum == 1)
{
UserMenuState = USER_STATE_ACCEPT_MONEY;
UserPrintMoneyMenu();
CoinEnable();
}
} }
break; break;
} }
} }
} }

View File

@ -1,7 +1,7 @@
#ifndef _VERSION_H_ #ifndef _VERSION_H_
#define _VERSION_H_ #define _VERSION_H_
#define DEVICE_FW_VERSION "03.45" #define DEVICE_FW_VERSION "03.48"
#endif // #ifndef _VERSION_H_ #endif // #ifndef _VERSION_H_

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -650,7 +650,7 @@
</option> </option>
<option> <option>
<name>OOCOutputFile</name> <name>OOCOutputFile</name>
<state>solarium_3_45.hex</state> <state>solarium_3_48.hex</state>
</option> </option>
<option> <option>
<name>OOCCommandLineProducer</name> <name>OOCCommandLineProducer</name>