diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..2781e51 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,12 @@ +{ + "files.associations": { + "array": "c", + "string": "c", + "string_view": "c", + "ranges": "c", + "span": "c", + "fram_map.h": "c", + "service_name.h": "c", + "variant": "c" + } +} diff --git a/OS/app/app.c b/OS/app/app.c index b77f392..2453991 100644 --- a/OS/app/app.c +++ b/OS/app/app.c @@ -13,7 +13,7 @@ #include "keyboard.h" #include "app_serv.h" #include "lpc23xx-iap.h" - +#include "rfid-spi.h" extern const TFramMap config_params; extern TFramMap *config_ram; @@ -94,6 +94,12 @@ static void AppTaskStart (void *p_arg) SpiInit(); #endif + OSTimeDly(50); + +#ifdef CONFIG_SPI_ENABLE + pcd_initialization(); +#endif + #ifdef CONFIG_SPI1_ENABLE spi1_init(); #endif diff --git a/PROJECT/app/app_serv.c b/PROJECT/app/app_serv.c index 0250634..749181f 100644 --- a/PROJECT/app/app_serv.c +++ b/PROJECT/app/app_serv.c @@ -42,6 +42,7 @@ #if defined(BOARD_SOLARIUM_VLAD) #include "app_vlad.h" #endif +#include "rfid-spi.h" #if defined(BOARD_SOLARIUM_WEB) ApplicationState app_state; @@ -676,6 +677,7 @@ void UserAppTask(void *p_arg) { PrintSolariumPassMenu(); } + break; case EVENT_KEY_STAR: @@ -2303,6 +2305,19 @@ void UserPrintPaymentErrorMenu(void) PrintUserMenuStr(buf, 3); } +void UserPrintAbonementPaymentErrorMenu(void) +{ + char buf[32]; + sprintf(buf, " По этой КАРТЕ ЗАГАРА"); + PrintUserMenuStr(buf, 0); + sprintf(buf, " сегодня посещения"); + PrintUserMenuStr(buf, 1); + sprintf(buf, " исчерпаны"); + PrintUserMenuStr(buf, 2); + sprintf(buf, " "); + PrintUserMenuStr(buf, 3); +} + int ChannelBusy(CPU_INT08U ch) { CPU_INT32U ch_en = 0; @@ -3077,8 +3092,8 @@ void InitPass(void) CPU_INT32U en_pass = 0; #endif CPU_INT32U pass,crc,crct; - GetData(&PassDesc, &pass, 0, DATA_FLAG_SYSTEM_INDEX); - GetData(&PassCRCDesc, &crc, 0, DATA_FLAG_SYSTEM_INDEX); + GetData(&PassDesc, &pass, 0, DATA_FLAG_SYSTEM_INDEX); + GetData(&PassCRCDesc, &crc, 0, DATA_FLAG_SYSTEM_INDEX); crct = crc16((unsigned char*)&pass, sizeof(CPU_INT32U)); diff --git a/PROJECT/app/app_serv.h b/PROJECT/app/app_serv.h index 651156a..f1b71cb 100644 --- a/PROJECT/app/app_serv.h +++ b/PROJECT/app/app_serv.h @@ -57,6 +57,27 @@ typedef struct #define USER_MENU_SKIN_ATTENTION_4 20 /// #define USER_MENU_SELECT_SERVICE_TIME 21 + + // меню для карточной системы + #define USER_MENU_WAIT_CARD 30 + #define USER_MENU_BALANCE_CARD 31 + #define USER_MENU_START_INSERT_CARD_MONEY 32 + #define USER_MENU_ALL_PRICE 33 + #define USER_MENU_SILVER_BONUS 34 + #define USER_MENU_GOLD_BONUS 35 + #define USER_MENU_PLATINUM_BONUS 36 + #define USER_MENU_BRILLANCE_BONUS 37 + #define USER_MENU_START_PAY_CARD 38 + #define USER_MENU_INSERT_BANK_CARD 39 + #define USER_MENU_ERROR_BANK_CARD 40 + #define USER_MENU_INSERT_BONUS_CARD 41 + #define USER_MENU_FINISH_PAY_BONUS_CARD 42 + + #define USER_MENU_ABONENT_PROCESSING 43 + #define USER_MENU_ABONENT_WRONG 44 + + #define USER_MENU_ABONEMENT_FAIL 45 + /// #define USER_MENU_ERROR 255 @@ -65,13 +86,15 @@ typedef struct CPU_INT08U menu_timeout; #define MENU_THANKS_TIMEOUT 5 #define MENU_CARD_FAIL_TIMEOUT 3 + #define MENU_CARD_ABONEMENT_FAIL_TIMEOUT 6 #define MENU_ATTENTION_TIMEOUT 5 CPU_INT08U ch_index; CPU_INT08U mode_index; CPU_INT08U pay_index; - #define PAY_TYPE_CASH 0 - #define PAY_TYPE_CARD 1 + #define PAY_TYPE_CARD_ABONEMENT 0 + #define PAY_TYPE_CARD 1 + #define PAY_TYPE_CASH 2 CPU_INT08U solar_state[CHANNELS_NUM]; #define SOLAR_STATE_FREE 0 @@ -105,7 +128,20 @@ typedef struct CPU_INT08U solar_srv[CHANNELS_NUM]; #define SOLAR_IN_SERVICE 1 #define SOLAR_IN_TEST 2 - + + CPU_INT32U last_card_manipulation_time; + #define MENU_CARD_MANIPULATION_TIMEOUT_MS 10000 + #define MENU_CARD_WRONG_TIMEOUT_MS 3000 + #define MENU_WAIT_CARD_ABONEMENT_TIMEOUT_MS 20000 + + CPU_INT08U current_abonement; + #define SILVER_ABONEMENT 0 + #define GOLD_ABONEMENT 1 + #define PLATINUM_ABONEMENT 2 + #define DIAMOND_ABONEMENT 3 + + CPU_INT32U abonementtopay; + } ApplicationState; extern ApplicationState app_state; #endif @@ -265,6 +301,11 @@ enum{ #elif defined(BOARD_CENTRAL_CARWASH) EVENT_REREAD_SIGNAL_LEVEL, #endif + + #if defined(BOARD_SOLARIUM_VLAD) + EVENT_FINISH_PAYMENT_ABONEMENT, + EVENT_FINISH_PAYMENT_ABONEMENT_SOLARIUM, + #endif }; #define EVENT_KEY_LEFT EVENT_KEY_POST2 @@ -288,6 +329,7 @@ extern void SetAcceptedMoney(CPU_INT32U money); extern void PrintCardBill(void); extern void UserPrintTerminalRequestMenu(); extern void UserPrintPaymentErrorMenu(void); +extern void UserPrintAbonementPaymentErrorMenu(void); extern void UserPrintResultMenu(void); #endif //#ifndef _APP_SERV_H_ diff --git a/PROJECT/app/app_vlad.c b/PROJECT/app/app_vlad.c index a1c447e..6ecfe15 100644 --- a/PROJECT/app/app_vlad.c +++ b/PROJECT/app/app_vlad.c @@ -24,20 +24,37 @@ #include #include "ftp_app.h" +#include "rfid-spi.h" +#include "mfrc522data.h" extern CPU_INT32U ChannelsPayedTime[CHANNELS_NUM]; ApplicationState app_state; -static CPU_INT08U fr_conn_ctr = 0; +//static CPU_INT08U fr_conn_ctr = 0; static CPU_INT08U cash_accept_enabled = 0; static CPU_INT08U incassation = 0; extern int player_conn; CPU_INT08U start_pass_ok = 0; void PrintHelloMenu(void); +void PrintStartReadCardMenu(void); +void PrintBalanceMenu(void); +void PrintMenuStartPay(void); +void PrintMenuAllPrice(CPU_INT08U blink); +void PrintSilverMenu(void); +void PrintGoldMenu(void); +void PrintPlatMenu(void); +void PrintDiamondMenu(void); +void PrintStartPayCardMenu(void); +void PrintInsertBankCardMenu(void); +void PrintInsertBonusCardMenu(void); +void PrintFinishPayMenu(void); +void PrintAnotherCardMenu(void); +void PrintSelectMethodPayCardMenu(CPU_INT08U blink); void PrintWarning1Menu(void); void PrintWarning2Menu(void); +void PrintWrongAbonementMenu(void); void PrintSelectChMenu(CPU_INT08U blink); void PrintSelectModeMenu(CPU_INT08U blink); void PrintAckModeMenu(void); @@ -72,14 +89,61 @@ void app_1ms_callback(void) } } -/// -void IncSolarCounters(CPU_INT08U ch, CPU_INT08U mode, CPU_INT32U worktime, CPU_INT32U money, CPU_INT08U card) +SolarCounters counters; + +void IncAbonentCounters(CPU_INT08U abonement, CPU_INT32U money, CPU_INT32U bonus) { - SolarCounters counters; ReadArrayFram(offsetof(TFramMap, solar_counters), sizeof(SolarCounters), (unsigned char*)&counters); - counters.solar_chm[ch * SOLAR_MODES_COUNT + mode].money += money; - counters.solar_m[mode].money += money; + counters.abonement[abonement].card_money += money; + counters.abonement[abonement].card_bonus += bonus; + counters.abonement[abonement].runs++; + + counters.abonement[4].card_money += money; + counters.abonement[4].card_bonus += bonus; + counters.abonement[4].runs++; + + counters.checksum = crc16((unsigned char*)&counters, offsetof(SolarCounters, checksum)); + WriteArrayFram(offsetof(TFramMap, solar_counters), sizeof(SolarCounters), (unsigned char*)&counters); +} + +void IncSolarAbonementCounters(CPU_INT08U ch, CPU_INT08U mode, CPU_INT32U money, CPU_INT32U bonus) +{ + ReadArrayFram(offsetof(TFramMap, solar_counters), sizeof(SolarCounters), (unsigned char*)&counters); + + counters.solar_chm[ch * SOLAR_MODES_COUNT + mode].card_money += money; + counters.solar_m[mode].card_money += money; + + counters.solar_chm[ch * SOLAR_MODES_COUNT + mode].card_bonus += bonus; + counters.solar_m[mode].card_bonus += bonus; + + counters.abonement_money += money; + counters.common_money += (money * 100); // * 100 тк переменная от банковского терминала + + counters.checksum = crc16((unsigned char*)&counters, offsetof(SolarCounters, checksum)); + WriteArrayFram(offsetof(TFramMap, solar_counters), sizeof(SolarCounters), (unsigned char*)&counters); +} + +/// +void IncSolarCounters(CPU_INT08U ch, CPU_INT08U mode, CPU_INT32U worktime, CPU_INT32U money, CPU_INT08U card, CPU_INT32U bonus) +{ + //SolarCounters counters; + ReadArrayFram(offsetof(TFramMap, solar_counters), sizeof(SolarCounters), (unsigned char*)&counters); + + if (card == 2) + { + /*counters.solar_chm[ch * SOLAR_MODES_COUNT + mode].card_money += money; + counters.solar_m[mode].card_money += money; + + counters.solar_chm[ch * SOLAR_MODES_COUNT + mode].card_bonus += bonus; + counters.solar_m[mode].card_bonus += bonus;*/ + } + else + { + counters.solar_chm[ch * SOLAR_MODES_COUNT + mode].money += money; + counters.solar_m[mode].money += money; + } + if (worktime > 0) { counters.solar_chm[ch * SOLAR_MODES_COUNT + mode].runs += 1; @@ -98,13 +162,18 @@ void IncSolarCounters(CPU_INT08U ch, CPU_INT08U mode, CPU_INT32U worktime, CPU_I counters.uf_time[ch] += worktime; } - counters.common_money += money; - if (card) + if(card == 2) { + //counters.abonement_money += money; + } + else if (card) + { + counters.common_money += money; counters.card_money += money; } else { + counters.common_money += money; counters.cash_money += money; } @@ -115,7 +184,7 @@ void IncSolarCounters(CPU_INT08U ch, CPU_INT08U mode, CPU_INT32U worktime, CPU_I /// void IncSolarTestCounters(CPU_INT08U ch, CPU_INT08U mode, CPU_INT32U worktime) { - SolarCounters counters; + //SolarCounters counters; ReadArrayFram(offsetof(TFramMap, solar_counters), sizeof(SolarCounters), (unsigned char*)&counters); if (worktime > 0) @@ -150,7 +219,7 @@ void IncSolarTestCounters(CPU_INT08U ch, CPU_INT08U mode, CPU_INT32U worktime) /// void IncSolarCleaningCounters(CPU_INT08U ch, CPU_INT32U cleaning_time) { - SolarCounters counters; + //SolarCounters counters; ReadArrayFram(offsetof(TFramMap, solar_counters), sizeof(SolarCounters), (unsigned char*)&counters); if (cleaning_time > 0) { @@ -168,7 +237,7 @@ void IncSolarCleaningCounters(CPU_INT08U ch, CPU_INT32U cleaning_time) /// void CheckSolarCounters(void) { - SolarCounters counters; + //SolarCounters counters; ReadArrayFram(offsetof(TFramMap, solar_counters), sizeof(SolarCounters), (unsigned char*)&counters); if (crc16((unsigned char*)&counters, offsetof(SolarCounters, checksum)) != counters.checksum) { @@ -178,17 +247,46 @@ void CheckSolarCounters(void) } } +void ClearAbonementCounters(void) +{ + ReadArrayFram(offsetof(TFramMap, solar_counters), sizeof(SolarCounters), (unsigned char*)&counters); + + memset(&counters.abonement[0], 0, sizeof(AbonentCountersRecord) * 5); + + counters.abonement_money = 0; + + counters.solar_chm[0].card_money = 0; + counters.solar_chm[0].card_bonus = 0; + counters.solar_chm[1].card_money = 0; + counters.solar_chm[1].card_bonus = 0; + counters.solar_chm[2].card_money = 0; + counters.solar_chm[2].card_bonus = 0; + counters.solar_chm[3].card_money = 0; + counters.solar_chm[3].card_bonus = 0; + + counters.solar_m[0].card_money = 0; + counters.solar_m[0].card_bonus = 0; + counters.solar_m[1].card_money = 0; + counters.solar_m[1].card_bonus = 0; + counters.solar_m[2].card_money = 0; + counters.solar_m[2].card_bonus = 0; + + counters.checksum = crc16((unsigned char*)&counters, offsetof(SolarCounters, checksum)); + WriteArrayFram(offsetof(TFramMap, solar_counters), sizeof(SolarCounters), (unsigned char*)&counters); +} + /// void SolarClearAllCounters(void) { - SolarCounters counters; + //SolarCounters counters; ReadArrayFram(offsetof(TFramMap, solar_counters), sizeof(SolarCounters), (unsigned char*)&counters); /// счетчики по соляриям и режимам - memset(&counters.solar_chm, 0, sizeof(SolarCountersRecord) * CHANNELS_NUM * SOLAR_MODES_COUNT); - memset(&counters.solar_chm_test, 0, sizeof(SolarCountersRecord) * CHANNELS_NUM * SOLAR_MODES_COUNT); + memset(&counters.solar_chm[0], 0, sizeof(SolarCountersRecord) * CHANNELS_NUM * SOLAR_MODES_COUNT); + memset(&counters.solar_chm_test[0], 0, sizeof(SolarCountersRecord) * CHANNELS_NUM * SOLAR_MODES_COUNT); /// счетчики по режимам - memset(&counters.solar_m, 0, sizeof(SolarCountersRecord) * SOLAR_MODES_COUNT); - memset(&counters.solar_m_test, 0, sizeof(SolarCountersRecord) * SOLAR_MODES_COUNT); + memset(&counters.solar_m[0], 0, sizeof(SolarCountersRecord) * SOLAR_MODES_COUNT); + memset(&counters.solar_m_test[0], 0, sizeof(SolarCountersRecord) * SOLAR_MODES_COUNT); + memset(&counters.abonement[0], 0, sizeof(AbonentCountersRecord) * 5); // отработанное время коллатен+макси по соляриям //CPU_INT32U collaten_time[CHANNELS_NUM]; // отработанное время ультрафиолет+макси по соляриям @@ -196,9 +294,10 @@ void SolarClearAllCounters(void) counters.common_money = 0; counters.cash_money = 0; counters.card_money = 0; + counters.abonement_money = 0; counters.bill_count = 0; - memset(&counters.cleaning_count, 0, sizeof(CPU_INT32U) * CHANNELS_NUM); - memset(&counters.cleaning_time, 0, sizeof(CPU_INT32U) * CHANNELS_NUM); + memset(&counters.cleaning_count[0], 0, sizeof(CPU_INT32U) * CHANNELS_NUM); + memset(&counters.cleaning_time[0], 0, sizeof(CPU_INT32U) * CHANNELS_NUM); counters.checksum = crc16((unsigned char*)&counters, offsetof(SolarCounters, checksum)); WriteArrayFram(offsetof(TFramMap, solar_counters), sizeof(SolarCounters), (unsigned char*)&counters); } @@ -206,7 +305,7 @@ void SolarClearAllCounters(void) /// void SolarClearLampsCounters(CPU_INT08U ch) { - SolarCounters counters; + //SolarCounters counters; ReadArrayFram(offsetof(TFramMap, solar_counters), sizeof(SolarCounters), (unsigned char*)&counters); counters.collaten_time[ch] = 0; counters.uf_time[ch] = 0; @@ -459,10 +558,12 @@ int PayTypeTermEnabled(void) /// int PayTypeCashEnabled(void) { - CPU_INT32U validator_en, coin_en; + CPU_INT32U validator_en, coin_en, abonement_en; GetData(&EnableValidatorDesc, &validator_en, 0, DATA_FLAG_SYSTEM_INDEX); GetData(&EnableCoinDesc, &coin_en, 0, DATA_FLAG_SYSTEM_INDEX); - return validator_en | coin_en; + GetData(&EnableAbonementDesc, &abonement_en, 0, DATA_FLAG_SYSTEM_INDEX); + + return validator_en | coin_en | abonement_en; } /// @@ -621,7 +722,7 @@ void AppVladEventProcess(CPU_INT32U event) { current_discount = CalcCurrentDiscount(SystemTime); } - + #if APP_DEBUG if ((SystemTime % 30) == 0) { @@ -665,7 +766,7 @@ void AppVladEventProcess(CPU_INT32U event) } // проверим фискальник, если он отвалился - if ((++fr_conn_ctr % 10) == 0) + /*if ((++fr_conn_ctr % 10) == 0) { if ((FiscalConnState == FISCAL_NOCONN) || (TstCriticalFiscalError())) { @@ -674,7 +775,7 @@ void AppVladEventProcess(CPU_INT32U event) CheckFiscalStatus(); } } - } + }*/ // сервер ошибок ErrorServer(); @@ -729,8 +830,360 @@ void AppVladEventProcess(CPU_INT32U event) // дальше только в рабочем режиме if (GetMode() != MODE_WORK) { + // Look for new cards + /*if (picc_is_new_card_present() ) { + // Select one of the cards + if (picc_read_card_serial()) { + if(read_mifare_card() != NULL) { + if(is_empty_mifare_card()) { + init_mifare_card_data(); + + if(!write_mifare_card()) + { + stop_card_working(); + break; + } + } + + stop_card_working(); + } + } + }*/ + break; } + + // Look for new cards + if (picc_is_new_card_present() ) { + + if(app_state.user_menu == USER_MENU_IDLE) { + // меню старта чтения карты + PrintStartReadCardMenu(); + RefreshMenu(); + PlayMusicFile(40); + } + + // Select one of the cards + if (picc_read_card_serial()) { + if(app_state.user_menu != USER_MENU_INSERT_BONUS_CARD + && app_state.user_menu != USER_MENU_ABONENT_PROCESSING) { + if(read_mifare_card() != NULL) { + if(is_empty_mifare_card()) { + init_mifare_card_data(); + + if(!write_mifare_card()) + { + app_state.user_menu = USER_MENU_IDLE; + stop_card_working(); + break; + } + } + + CPU_INT32U password; + GetData(&PassDescAdmin, &password, 0, DATA_FLAG_SYSTEM_INDEX); + if(get_abonement_data()->uid[0] != password) + { + app_state.last_card_manipulation_time = OSTimeGet(); + + app_state.user_menu = USER_MENU_ABONENT_WRONG; + PrintWrongAbonementMenu(); + RefreshMenu(); + StopMusic(); + + stop_card_working(); + + TEventRecord record; // 18 + 4 = 22 + record.event = JOURNAL_EVENT_ABONEMENT_WRONG; // +1 + record.type_abonement = 0; // +1 + record.money = 0; // +2 + record.bonus = 0; // +2 + record.password = get_abonement_data()->uid[0]; // +4 + record.number_abonement = get_abonement_data()->number_abonement; // +4 + record.money_sum = 0; // +2 + record.bonus_sum = 0; // +2 + + SaveEventAbonementRecord(&record); + + break; + } + + if(app_state.user_menu == USER_MENU_IDLE) + { + // проверим - не надо ли бонусы очистить + if(need_clear_bonus()) { + // нужно - запишем это + write_mifare_card(); + } + + // нужно показать баланс + app_state.last_card_manipulation_time = OSTimeGet(); + + app_state.user_menu = USER_MENU_BALANCE_CARD; + PrintBalanceMenu(); + RefreshMenu(); + + abonement_data* data = get_abonement_data(); + TEventRecord record; // 18 + 4 = 22 + record.event = JOURNAL_EVENT_ABONEMENT_BALANCE; // +1 + record.type_abonement = app_state.current_abonement; // +1 + record.money = 0; // +2 + record.bonus = 0; // +2 + record.time_before = data->best_before; // +4 + record.number_abonement = data->number_abonement; // +4 + record.money_sum = data->money; // +2 + record.bonus_sum = data->bonus; // +2 + + SaveEventAbonementRecord(&record); + + PlayMusicFile(41); + } + } else { + app_state.user_menu = USER_MENU_IDLE; + } + + stop_card_working(); + } + + if(app_state.user_menu == USER_MENU_INSERT_BONUS_CARD) + { + if(read_mifare_card() != NULL) + { + // пополняем карту + abonement_data* data = get_abonement_data(); + + CPU_INT32U password; + GetData(&PassDescAdmin, &password, 0, DATA_FLAG_SYSTEM_INDEX); + if(data->uid[0] == password) + { + uint32_t pay = 0, bonus = 0, best_before = 0; + + GetData(&AbonementMoneyDesc, &pay, app_state.current_abonement, DATA_FLAG_DIRECT_INDEX); + GetData(&AbonementBonusDesc, &bonus, app_state.current_abonement, DATA_FLAG_DIRECT_INDEX); + GetData(&AbonementBestBeforeDesc, &best_before, app_state.current_abonement, DATA_FLAG_DIRECT_INDEX); + + IncAbonentCounters(app_state.current_abonement, pay, bonus); + + uint32_t time_before = GetTimeSec() + best_before * 24L * 60L * 60L; + + data->money += pay; + data->bonus = bonus; + data->best_before = time_before; + data->type_abonement = app_state.current_abonement; + + if(!write_mifare_card()) + { + app_state.user_menu = USER_MENU_IDLE; + SaveEventRecord(bonus, JOURNAL_EVENT_ABONEMENT_PAY_REJECTED, pay); + } + else + { + app_state.user_menu = USER_MENU_FINISH_PAY_BONUS_CARD; + PrintFinishPayMenu(); + RefreshMenu(); + + TEventRecord record; // 18 + 4 = 22 + record.event = JOURNAL_EVENT_ABONEMENT_PAY_ACCEPTED; // +1 + record.type_abonement = app_state.current_abonement; // +1 + record.money = pay; // +2 + record.bonus = bonus; // +2 + record.time_before = time_before; // +4 + record.number_abonement = data->number_abonement; // +4 + record.money_sum = data->money; // +2 + record.bonus_sum = data->bonus; // +2 + + SaveEventAbonementRecord(&record); + + PlayMusicFile(52); + } + } + else + { + app_state.last_card_manipulation_time = OSTimeGet(); + + app_state.user_menu = USER_MENU_ABONENT_WRONG; + PrintWrongAbonementMenu(); + RefreshMenu(); + StopMusic(); + + TEventRecord record; // 18 + 4 = 22 + record.event = JOURNAL_EVENT_ABONEMENT_WRONG; // +1 + record.type_abonement = 0; // +1 + record.money = 0; // +2 + record.bonus = 0; // +2 + record.password = data->uid[0]; // +4 + record.number_abonement = data->number_abonement; // +4 + record.money_sum = 0; // +2 + record.bonus_sum = 0; // +2 + + SaveEventAbonementRecord(&record); + } + } + + stop_card_working(); + } + + if(app_state.user_menu == USER_MENU_ABONENT_PROCESSING) + { + abonement_data* data = get_abonement_data(); + CPU_INT32U password; + GetData(&PassDescAdmin, &password, 0, DATA_FLAG_SYSTEM_INDEX); + + CPU_INT32U moneytopay = app_state.moneytopay/100; + + if(read_mifare_card() != NULL + && data->money + data->bonus > moneytopay + && data->uid[0] == password) + { + TRTC_Data rtc_data_currnet, rtc_data_abonement; + uint32_t time_current = GetTimeSec(); + uint32_t count_use = 0; + GetData(&CountUseAbonementDesc, &count_use, 0, DATA_FLAG_SYSTEM_INDEX); + + Sec2Date(&rtc_data_currnet, time_current); + Sec2Date(&rtc_data_abonement, data->fileds.time_use); + + int32_t delta = data->money - moneytopay; + uint16_t bonus = (delta < 0) ? -delta : 0; + uint16_t money = (delta < 0) ? data->money : moneytopay; + + if(rtc_data_currnet.day == rtc_data_abonement.day + && rtc_data_currnet.mon == rtc_data_abonement.mon + && rtc_data_currnet.year == rtc_data_abonement.year + && data->fileds.count_use >= count_use) + { + TEventRecord record; // 18 + 4 = 22 + record.event = JOURNAL_EVENT_CARD_ABONEMENT_REAPEATE; // +1 + record.type_abonement = app_state.current_abonement; // +1 + record.money = 0; // +2 + record.bonus = 0; // +2 + record.time_before = 0; // +4 + record.number_abonement = data->number_abonement; // +4 + record.money_sum = data->money; // +2 + record.bonus_sum = data->bonus; // +2 + + SaveEventAbonementRecord(&record); + + // сегодня оплата уже была указанное количество раз - уходим в ошибку + UserPrintAbonementPaymentErrorMenu(); + RefreshMenu(); + app_state.user_menu = USER_MENU_ABONEMENT_FAIL; + app_state.menu_timeout = MENU_CARD_FAIL_TIMEOUT; + + stop_card_working(); + break; + } + else + { + data->bonus -= bonus; + data->money -= money; + + data->fileds.time_use = time_current; + data->fileds.count_use = + rtc_data_currnet.day != rtc_data_abonement.day + || rtc_data_currnet.mon != rtc_data_abonement.mon + || rtc_data_currnet.year != rtc_data_abonement.year ? 1 : data->fileds.count_use + 1; + } + + if(!write_mifare_card()) + { + TEventRecord record; // 18 + 4 = 22 + record.event = JOURNAL_EVENT_ABONEMENT_REJECTED; // +1 + record.type_abonement = data->type_abonement; // +1 + record.money = 0; // +2 + record.bonus = 0; // +2 + record.time_before = data->best_before; // +4 + record.number_abonement = data->number_abonement; // +4 + record.money_sum = data->money; // +2 + record.bonus_sum = data->bonus; // +2 + + SaveEventAbonementRecord(&record); + + UserPrintPaymentErrorMenu(); + RefreshMenu(); + app_state.user_menu = USER_MENU_CARD_FAIL; + app_state.menu_timeout = MENU_CARD_FAIL_TIMEOUT; + } + else + { + SetAcceptedMoney(app_state.moneytopay); + + TEventRecord record; // 18 + 4 = 22 + record.event = JOURNAL_EVENT_ABONEMENT_ACCEPTED; // +1 + record.type_abonement = data->type_abonement; // +1 + record.money = money; // +2 + record.bonus = bonus; // +2 + record.time_before = data->best_before; // +4 + record.number_abonement = data->number_abonement; // +4 + record.money_sum = data->money; // +2 + record.bonus_sum = data->bonus; // +2 + + SaveEventAbonementRecord(&record); + + IncSolarAbonementCounters(app_state.ch_index, app_state.mode_index, money, bonus); + + app_state.user_menu = USER_MENU_CARD_OK; + PostUserEvent(EVENT_FINISH_PAYMENT_ABONEMENT_SOLARIUM); + } + } + else if(data->uid[0] != password) + { + app_state.last_card_manipulation_time = OSTimeGet(); + + app_state.user_menu = USER_MENU_ABONENT_WRONG; + PrintWrongAbonementMenu(); + RefreshMenu(); + StopMusic(); + + TEventRecord record; // 18 + 4 = 22 + record.event = JOURNAL_EVENT_ABONEMENT_WRONG; // +1 + record.type_abonement = 0; // +1 + record.money = 0; // +2 + record.bonus = 0; // +2 + record.password = data->uid[0]; // +4 + record.number_abonement = data->number_abonement; // +4 + record.money_sum = 0; // +2 + record.bonus_sum = 0; // +2 + + SaveEventAbonementRecord(&record); + } + else + { + TEventRecord record; // 18 + 4 = 22 + record.event = JOURNAL_EVENT_ABONEMENT_REJECTED; // +1 + record.type_abonement = data->type_abonement; // +1 + record.money = 0; // +2 + record.bonus = 0; // +2 + record.time_before = data->best_before; // +4 + record.number_abonement = data->number_abonement; // +4 + record.money_sum = data->money; // +2 + record.bonus_sum = data->bonus; // +2 + + SaveEventAbonementRecord(&record); + + UserPrintPaymentErrorMenu(); + RefreshMenu(); + app_state.user_menu = USER_MENU_CARD_FAIL; + app_state.menu_timeout = MENU_CARD_FAIL_TIMEOUT; + } + + stop_card_working(); + } + } else { + if(app_state.user_menu == USER_MENU_ABONENT_PROCESSING) + { + app_state.user_menu = USER_MENU_SELECT_PAY_TYPE; + app_state.pay_index = 0; + app_state.blink_ctr = 0; + PrintSelectPayTypeMenu(0); + RefreshMenu(); + PlayMusicFile(8); + } + else + { + app_state.user_menu = USER_MENU_IDLE; + } + } + } // если инкассация, не работаем if (incassation) @@ -760,6 +1213,41 @@ void AppVladEventProcess(CPU_INT32U event) app_state.skin_flags = 0; PrintHelloMenu(); } + else if(app_state.user_menu == USER_MENU_BALANCE_CARD) + { + if (OSTimeGet() - app_state.last_card_manipulation_time > MENU_CARD_MANIPULATION_TIMEOUT_MS) + { + app_state.user_menu = USER_MENU_START_INSERT_CARD_MONEY; + PrintMenuStartPay(); + RefreshMenu(); + PlayMusicFile(42); + } + } + else if(app_state.user_menu == USER_MENU_ABONENT_WRONG) + { + if (OSTimeGet() - app_state.last_card_manipulation_time > MENU_CARD_WRONG_TIMEOUT_MS) + { + app_state.user_menu = USER_MENU_IDLE; + PrintHelloMenu(); + RefreshMenu(); + } + } + else if(app_state.user_menu == USER_MENU_ABONENT_PROCESSING) + { + if (OSTimeGet() - app_state.last_card_manipulation_time > MENU_WAIT_CARD_ABONEMENT_TIMEOUT_MS) + { + app_state.user_menu = USER_MENU_SELECT_PAY_TYPE; + app_state.pay_index = 0; + app_state.blink_ctr = 0; + PrintSelectPayTypeMenu(0); + RefreshMenu(); + PlayMusicFile(8); + } + } + else if(app_state.user_menu == USER_MENU_ALL_PRICE) + { + //PrintMenuAllPrice(app_state.blink_ctr >= 500); + } else if (app_state.user_menu == USER_MENU_WARNING_1) { app_state.skin_flags = 0; @@ -777,7 +1265,8 @@ void AppVladEventProcess(CPU_INT32U event) || (app_state.user_menu == USER_MENU_CARD_PAYING) || (app_state.user_menu == USER_MENU_SELECT_CH_CLEANING) || (app_state.user_menu == USER_MENU_SELECT_CH_SERVICE) - || (app_state.user_menu == USER_MENU_SELECT_CH_TESTMODE) + || (app_state.user_menu == USER_MENU_SELECT_CH_TESTMODE) + || (app_state.user_menu == USER_MENU_START_INSERT_CARD_MONEY) ) { if (OSTimeGet() - app_state.last_key_time > MENU_KEY_PRESS_TIMEOUT_MS) @@ -786,6 +1275,7 @@ void AppVladEventProcess(CPU_INT32U event) app_state.ch_index = 0; app_state.mode_index = 0; app_state.pay_index = 0; + app_state.current_abonement = 0; PrintHelloMenu(); RefreshMenu(); } @@ -793,7 +1283,7 @@ void AppVladEventProcess(CPU_INT32U event) else if (app_state.user_menu == USER_MENU_CASH_PAYING) { // принимаем наличные - CheckFiscalStatus(); + //CheckFiscalStatus(); // включим заново прием денег, если была ошибка в этом же меню if (!cash_accept_enabled) { @@ -817,7 +1307,7 @@ void AppVladEventProcess(CPU_INT32U event) } else if (app_state.user_menu == USER_MENU_CARD_PROCESSING) // если в меню приема банковской карты { - CheckFiscalStatus(); + //CheckFiscalStatus(); if (GetTermState() == TERM_STATE_DONE_PUR) { /// печать чека терминала @@ -843,6 +1333,51 @@ void AppVladEventProcess(CPU_INT32U event) RefreshMenu(); } } + else if (app_state.user_menu == USER_MENU_INSERT_BANK_CARD) // если в меню приема банковской карты для абонемента + { + //CheckFiscalStatus(); + if (GetTermState() == TERM_STATE_DONE_PUR) + { + /// печать чека терминала + SetTermCommand(TERM_COMMAND_CLEAR_STATE, NULL); + + TEventRecord record; // 18 + 4 = 22 + record.event = JOURNAL_EVENT_CARD_ABONEMENT_ACCEPTED; // +1 + record.type_abonement = app_state.current_abonement; // +1 + record.money_bank = app_state.abonementtopay; // +2 + record.bonus = 0; // +2 + record.number_abonement = 0; // +4 + record.money_sum = 0; // +2 + record.bonus_sum = 0; // +2 + + SaveEventAbonementRecord(&record); + + if (term_protocol() == TERMINAL_PROTOCOL_TTK2) PrintCardBill(); + app_state.user_menu = USER_MENU_INSERT_BONUS_CARD; + PostUserEvent(EVENT_FINISH_PAYMENT_ABONEMENT); + } + else if (GetTermState() == TERM_STATE_ERR_PUR) + { + SetTermCommand(TERM_COMMAND_CLEAR_STATE, NULL); + SaveEventRecord(app_state.current_abonement, JOURNAL_EVENT_CARD_REJECTED, 0); + PrintAnotherCardMenu(); + RefreshMenu(); + PlayMusicFile(51); + app_state.user_menu = USER_MENU_ERROR_BANK_CARD; + app_state.menu_timeout = MENU_CARD_ABONEMENT_FAIL_TIMEOUT; + } + else + { + PrintInsertBankCardMenu(); + RefreshMenu(); + + // temporally + //SetAcceptedMoney(app_state.abonementtopay); + //SaveEventRecord(app_state.current_abonement, JOURNAL_EVENT_CARD_ABONEMENT_ACCEPTED, app_state.abonementtopay); + //app_state.user_menu = USER_MENU_INSERT_BONUS_CARD; + //PostUserEvent(EVENT_FINISH_PAYMENT_ABONEMENT); + } + } else if (app_state.user_menu == USER_MENU_SHOW_THANKS) { if (!app_state.menu_timeout) @@ -863,7 +1398,10 @@ void AppVladEventProcess(CPU_INT32U event) app_state.menu_timeout--; } } - else if ((app_state.user_menu == USER_MENU_SKIN_ATTENTION_1) || (app_state.user_menu == USER_MENU_SKIN_ATTENTION_2) || (app_state.user_menu == USER_MENU_SKIN_ATTENTION_3) || (app_state.user_menu == USER_MENU_SKIN_ATTENTION_4)) + else if ((app_state.user_menu == USER_MENU_SKIN_ATTENTION_1) + || (app_state.user_menu == USER_MENU_SKIN_ATTENTION_2) + || (app_state.user_menu == USER_MENU_SKIN_ATTENTION_3) + || (app_state.user_menu == USER_MENU_SKIN_ATTENTION_4)) { if (!app_state.menu_timeout) { @@ -913,6 +1451,30 @@ void AppVladEventProcess(CPU_INT32U event) app_state.menu_timeout--; } } + else if (app_state.user_menu == USER_MENU_ABONEMENT_FAIL) + { + if (!app_state.menu_timeout) + { + PostUserEvent(EVENT_KEY_CANSEL); + } + else + { + UserPrintAbonementPaymentErrorMenu(); + app_state.menu_timeout--; + } + } + else if (app_state.user_menu == USER_MENU_ERROR_BANK_CARD) + { + if (!app_state.menu_timeout) + { + PostUserEvent(EVENT_KEY_CANSEL); + } + else + { + PrintAnotherCardMenu(); + app_state.menu_timeout--; + } + } } break; case EVENT_KEY_START: @@ -981,6 +1543,79 @@ void AppVladEventProcess(CPU_INT32U event) RefreshMenu(); PlayMusicFile(2); } + else if(app_state.user_menu == USER_MENU_FINISH_PAY_BONUS_CARD) + { + app_state.user_menu = USER_MENU_IDLE; + PrintHelloMenu(); + RefreshMenu(); + StopMusic(); + } + else if(app_state.user_menu == USER_MENU_BALANCE_CARD) + { + // предложим пополнить карту + app_state.user_menu = USER_MENU_START_INSERT_CARD_MONEY; + + PrintMenuStartPay(); + RefreshMenu(); + PlayMusicFile(42); + } + else if(app_state.user_menu == USER_MENU_START_INSERT_CARD_MONEY) + { + // покажем полный прайс + app_state.user_menu = USER_MENU_ALL_PRICE; + + PrintMenuAllPrice(app_state.blink_ctr >= 500); + RefreshMenu(); + PlayMusicFile(43); + } + else if(app_state.user_menu == USER_MENU_ALL_PRICE) + { + app_state.user_menu = USER_MENU_SILVER_BONUS + app_state.current_abonement; + + // получим сумму оплаты + GetData(&AbonementMoneyDesc, &app_state.abonementtopay, app_state.current_abonement, DATA_FLAG_DIRECT_INDEX); + + // выбрали абонемент + if(app_state.current_abonement == SILVER_ABONEMENT) { + PrintSilverMenu(); + } else if(app_state.current_abonement == GOLD_ABONEMENT) { + PrintGoldMenu(); + } else if(app_state.current_abonement == PLATINUM_ABONEMENT) { + PrintPlatMenu(); + } else if(app_state.current_abonement == DIAMOND_ABONEMENT) { + PrintDiamondMenu(); + } + + RefreshMenu(); + PlayMusicFile(44 + app_state.current_abonement); + } + else if(app_state.user_menu == USER_MENU_SILVER_BONUS + || app_state.user_menu == USER_MENU_GOLD_BONUS + || app_state.user_menu == USER_MENU_PLATINUM_BONUS + || app_state.user_menu == USER_MENU_BRILLANCE_BONUS + ) + { + app_state.user_menu = USER_MENU_START_PAY_CARD; + + PrintStartPayCardMenu(); + RefreshMenu(); + PlayMusicFile(48); + } + else if(app_state.user_menu == USER_MENU_START_PAY_CARD) + { + uint32_t pay = 0; + GetData(&AbonementMoneyDesc, &pay, app_state.current_abonement, DATA_FLAG_DIRECT_INDEX); + app_state.abonementtopay = pay * 100; // сумма в копейках + + uint32_t param[TERM_PARAM_COUNT]; + param[0] = app_state.abonementtopay; + SetTermCommand(TERM_COMMAND_PEND_PUR, param); + app_state.user_menu = USER_MENU_INSERT_BANK_CARD; + PrintInsertBankCardMenu(); + RefreshMenu(); + StopMusic(); + PlayMusicFile(49); + } else if (app_state.user_menu == USER_MENU_WARNING_1) { app_state.user_menu = USER_MENU_WARNING_2; @@ -1142,6 +1777,16 @@ void AppVladEventProcess(CPU_INT32U event) RefreshMenu(); PlayMusicFile(9 + app_state.mode_index); } + else if (app_state.pay_index == PAY_TYPE_CARD_ABONEMENT) + { + GetData(&SolarMinimumTimeMinutesDesc, &app_state.timetopay, app_state.ch_index, DATA_FLAG_DIRECT_INDEX); + app_state.timetopay *= 60; + app_state.user_menu = USER_MENU_CARD_PAYING; + app_state.blink_ctr = 0; + PrintCardPayingMenu(0); + RefreshMenu(); + PlayMusicFile(12 + app_state.mode_index); + } else if (app_state.pay_index == PAY_TYPE_CARD) { GetData(&SolarMinimumTimeMinutesDesc, &app_state.timetopay, app_state.ch_index, DATA_FLAG_DIRECT_INDEX); @@ -1159,12 +1804,24 @@ void AppVladEventProcess(CPU_INT32U event) } else if (app_state.user_menu == USER_MENU_CARD_PAYING) { - uint32_t param[TERM_PARAM_COUNT]; - param[0] = app_state.moneytopay; - SetTermCommand(TERM_COMMAND_PEND_PUR, param); - app_state.user_menu = USER_MENU_CARD_PROCESSING; - PrintTerminalRequestMenu(); - RefreshMenu(); + if(app_state.pay_index == PAY_TYPE_CARD) + { + uint32_t param[TERM_PARAM_COUNT]; + param[0] = app_state.moneytopay; + SetTermCommand(TERM_COMMAND_PEND_PUR, param); + app_state.user_menu = USER_MENU_CARD_PROCESSING; + PrintTerminalRequestMenu(); + RefreshMenu(); + } + else if(app_state.pay_index == PAY_TYPE_CARD_ABONEMENT) + { + app_state.user_menu = USER_MENU_ABONENT_PROCESSING; + app_state.last_card_manipulation_time = OSTimeGet(); + + PrintInsertBonusCardMenu(); + RefreshMenu(); + PlayMusicFile(50); + } } else if (app_state.user_menu == USER_MENU_SELECT_SERVICE_TIME) { @@ -1236,6 +1893,68 @@ void AppVladEventProcess(CPU_INT32U event) GoToPreviousMenu(); } break; + case EVENT_FINISH_PAYMENT_ABONEMENT: + { + if (app_state.user_menu != USER_MENU_INSERT_BONUS_CARD) + { + break; + } + + // пополнение карты закончили - сообщим об этом + PrintInsertBonusCardMenu(); + RefreshMenu(); + PlayMusicFile(50); + } + break; + case EVENT_FINISH_PAYMENT_ABONEMENT_SOLARIUM: + { + CPU_INT32U price, accmoney; + CPU_INT32U min_time; + + if (app_state.user_menu != USER_MENU_CARD_OK) + { + break; + } + + accmoney = GetAcceptedMoney(); + price = GetPricePerMin(app_state.ch_index, app_state.mode_index); + GetData(&SolarMinimumTimeMinutesDesc, &min_time, app_state.ch_index, DATA_FLAG_DIRECT_INDEX); + if ((accmoney * 60) / price < (min_time * 60)) + { + break; + } + + ChannelsPayedTime[app_state.ch_index] = (accmoney * 60) / price; + + IncCounter(app_state.ch_index, ChannelsPayedTime[app_state.ch_index], accmoney, 2); + IncSolarCounters(app_state.ch_index, app_state.mode_index, ChannelsPayedTime[app_state.ch_index], accmoney, 2, 0); + SetAcceptedMoney(0); + + // сохраним оплаченное время и деньги + SaveTimeMoneyForChannel(app_state.ch_index, ChannelsPayedTime[app_state.ch_index], accmoney); + + // запускаем таймаут до старта солярия + app_state.solar_state[app_state.ch_index] = SOLAR_STATE_TIMEOUT_PRE; + GetData(&SolarTimeoutBeforeMinutesDesc, &app_state.timetoend[app_state.ch_index], app_state.ch_index, DATA_FLAG_DIRECT_INDEX); + app_state.timetoend[app_state.ch_index] *= 60; + app_state.sunburn_mode[app_state.ch_index] = app_state.mode_index; + SetControl(app_state.ch_index, CONTROL_STATE_OFF); + + // сохраняем запись события + SaveEventRecord(app_state.ch_index, JOURNAL_EVENT_START_SESSION, ChannelsPayedTime[app_state.ch_index]); + + // откроем дверь + PostUserEvent(EVENT_OPEN_RELAY1 + app_state.ch_index); + + PlayMusicFile(19); + + app_state.user_menu = USER_MENU_SHOW_THANKS; + if (MusicEnabled()) app_state.menu_timeout = 0; + else app_state.menu_timeout = MENU_THANKS_TIMEOUT; + PrintThanksMenu(); + RefreshMenu(); + } + break; case EVENT_FINISH_PAYMENT: { CPU_INT32U price, accmoney; @@ -1265,7 +1984,7 @@ void AppVladEventProcess(CPU_INT32U event) } // напечатаем чек - if (IsFiscalConnected()) + /*if (IsFiscalConnected()) { CPU_INT32U format; char service_name[48]; @@ -1286,10 +2005,10 @@ void AppVladEventProcess(CPU_INT32U event) // ошибка печати чека } - } + }*/ IncCounter(app_state.ch_index, ChannelsPayedTime[app_state.ch_index], accmoney, app_state.user_menu == USER_MENU_CARD_OK); - IncSolarCounters(app_state.ch_index, app_state.mode_index, ChannelsPayedTime[app_state.ch_index], accmoney, app_state.user_menu == USER_MENU_CARD_OK); + IncSolarCounters(app_state.ch_index, app_state.mode_index, ChannelsPayedTime[app_state.ch_index], accmoney, app_state.user_menu == USER_MENU_CARD_OK, 0); SetAcceptedMoney(0); // сохраним оплаченное время и деньги @@ -1346,6 +2065,15 @@ void AppVladEventProcess(CPU_INT32U event) RefreshMenu(); } } + else if (app_state.user_menu == USER_MENU_ALL_PRICE) + { + if (AppCanStart()) + { + app_state.current_abonement = (app_state.current_abonement + 1) & 0x03; + PrintMenuAllPrice(app_state.blink_ctr >= 500); + RefreshMenu(); + } + } else if (app_state.user_menu == USER_MENU_CARD_PAYING) { if (AppCanStart()) @@ -1397,6 +2125,15 @@ void AppVladEventProcess(CPU_INT32U event) RefreshMenu(); } } + else if (app_state.user_menu == USER_MENU_ALL_PRICE) + { + if (AppCanStart()) + { + app_state.current_abonement = (app_state.current_abonement + 1) & 0x03; + PrintMenuAllPrice(app_state.blink_ctr >= 500); + RefreshMenu(); + } + } else if (app_state.user_menu == USER_MENU_CARD_PAYING) { if (AppCanStart()) @@ -1446,6 +2183,10 @@ void AppVladEventProcess(CPU_INT32U event) { PrintSelectModeMenu(app_state.blink_ctr >= 500); } + else if (app_state.user_menu == USER_MENU_ALL_PRICE) + { + PrintMenuAllPrice(app_state.blink_ctr >= 500); + } else if (app_state.user_menu == USER_MENU_SELECT_PAY_TYPE) { PrintSelectPayTypeMenu(app_state.blink_ctr >= 500); @@ -1676,6 +2417,20 @@ void AppVladEventProcess(CPU_INT32U event) || (app_state.user_menu == USER_MENU_SELECT_CH) || (app_state.user_menu == USER_MENU_SERVICE_PASS) || (app_state.user_menu == USER_MENU_SELECT_CH_CLEANING) + || (app_state.user_menu == USER_MENU_BALANCE_CARD) + || (app_state.user_menu == USER_MENU_START_INSERT_CARD_MONEY) + || (app_state.user_menu == USER_MENU_ALL_PRICE) + || (app_state.user_menu == USER_MENU_SILVER_BONUS) + || (app_state.user_menu == USER_MENU_GOLD_BONUS) + || (app_state.user_menu == USER_MENU_PLATINUM_BONUS) + || (app_state.user_menu == USER_MENU_BRILLANCE_BONUS) + || app_state.user_menu == USER_MENU_SILVER_BONUS + || app_state.user_menu == USER_MENU_GOLD_BONUS + || app_state.user_menu == USER_MENU_PLATINUM_BONUS + || app_state.user_menu == USER_MENU_BRILLANCE_BONUS + || app_state.user_menu == USER_MENU_ERROR_BANK_CARD + || app_state.user_menu == USER_MENU_FINISH_PAY_BONUS_CARD + || app_state.user_menu == USER_MENU_ABONEMENT_FAIL ) { app_state.user_menu = USER_MENU_IDLE; @@ -1683,6 +2438,15 @@ void AppVladEventProcess(CPU_INT32U event) RefreshMenu(); StopMusic(); } + else if(app_state.user_menu == USER_MENU_ABONENT_PROCESSING) + { + app_state.user_menu = USER_MENU_SELECT_PAY_TYPE; + app_state.pay_index = 0; + app_state.blink_ctr = 0; + PrintSelectPayTypeMenu(0); + RefreshMenu(); + PlayMusicFile(8); + } else if ((app_state.user_menu == USER_MENU_SELECT_CH_SERVICE) || (app_state.user_menu == USER_MENU_SELECT_CH_TESTMODE) ) @@ -1926,6 +2690,288 @@ void AppVladEventProcess(CPU_INT32U event) } // switch (event) } +void PrintStartReadCardMenu(void) +{ + PrintUserMenuStr(" ", 0); + PrintUserMenuStr(" Удерживайте карту ", 1); + PrintUserMenuStr("у специального окна!", 2); + PrintUserMenuStr(" ", 3); +} + +void PrintBalanceMenu(void) +{ + char str[32]; + abonement_data* data = get_abonement_data(); + + PrintUserMenuStr(" Ваша карта загара: ", 0); + + sprintf(str, " %d рублей", data->money); + PrintUserMenuStr(str, 1); + + sprintf(str, "%d бонусов, сгорят:", data->bonus); + PrintUserMenuStr(str, 2); + + PrintDateString(str, data->best_before); + PrintUserMenuStr(str, 3); +} + +void PrintMenuStartPay(void) +{ + PrintUserMenuStr("Не желаете пополнить", 0); + PrintUserMenuStr(" карту загара? ", 1); + PrintUserMenuStr("(Купить бонусный ", 2); + PrintUserMenuStr(" абонемент?) ", 3); +} + +void PrintMenuAllPrice(CPU_INT08U blink) +{ + char str[32]; + uint32_t pay_silver = 0, bonus_silver = 0; + uint32_t pay_gold = 0, bonus_gold = 0; + uint32_t pay_plat = 0, bonus_plat = 0; + uint32_t pay_diamond = 0, bonus_diamond = 0; + + GetData(&AbonementMoneyDesc, &pay_silver, 0, DATA_FLAG_DIRECT_INDEX); + GetData(&AbonementBonusDesc, &bonus_silver, 0, DATA_FLAG_DIRECT_INDEX); + + GetData(&AbonementMoneyDesc, &pay_gold, 1, DATA_FLAG_DIRECT_INDEX); + GetData(&AbonementBonusDesc, &bonus_gold, 1, DATA_FLAG_DIRECT_INDEX); + + GetData(&AbonementMoneyDesc, &pay_plat, 2, DATA_FLAG_DIRECT_INDEX); + GetData(&AbonementBonusDesc, &bonus_plat, 2, DATA_FLAG_DIRECT_INDEX); + + GetData(&AbonementMoneyDesc, &pay_diamond, 3, DATA_FLAG_DIRECT_INDEX); + GetData(&AbonementBonusDesc, &bonus_diamond, 3, DATA_FLAG_DIRECT_INDEX); + + if(app_state.current_abonement == SILVER_ABONEMENT) + { + if(blink) { + PrintUserMenuStr(" ", 0); + sprintf(str, "ЗОЛОТ-%5dр %5d Б", pay_gold, bonus_gold); + PrintUserMenuStr(str, 1); + sprintf(str, "ПЛАТ.-%5dр %5d Б", pay_plat, bonus_plat); + PrintUserMenuStr(str, 2); + sprintf(str, "АЛМАЗ-%5dр %5d Б", pay_diamond, bonus_diamond); + PrintUserMenuStr(str, 3); + } else { + sprintf(str, "СЕРЕБ-%5dр %5d Б", pay_silver, bonus_silver); + PrintUserMenuStr(str, 0); + sprintf(str, "ЗОЛОТ-%5dр %5d Б", pay_gold, bonus_gold); + PrintUserMenuStr(str, 1); + sprintf(str, "ПЛАТ.-%5dр %5d Б", pay_plat, bonus_plat); + PrintUserMenuStr(str, 2); + sprintf(str, "АЛМАЗ-%5dр %5d Б", pay_diamond, bonus_diamond); + PrintUserMenuStr(str, 3); + } + } + else if(app_state.current_abonement == GOLD_ABONEMENT) + { + if(blink) { + sprintf(str, "СЕРЕБ-%5dр %5d Б", pay_silver, bonus_silver); + PrintUserMenuStr(str, 0); + + PrintUserMenuStr(" ", 1); + sprintf(str, "ПЛАТ.-%5dр %5d Б", pay_plat, bonus_plat); + PrintUserMenuStr(str, 2); + sprintf(str, "АЛМАЗ-%5dр %5d Б", pay_diamond, bonus_diamond); + PrintUserMenuStr(str, 3); + } else { + sprintf(str, "СЕРЕБ-%5dр %5d Б", pay_silver, bonus_silver); + PrintUserMenuStr(str, 0); + sprintf(str, "ЗОЛОТ-%5dр %5d Б", pay_gold, bonus_gold); + PrintUserMenuStr(str, 1); + sprintf(str, "ПЛАТ.-%5dр %5d Б", pay_plat, bonus_plat); + PrintUserMenuStr(str, 2); + sprintf(str, "АЛМАЗ-%5dр %5d Б", pay_diamond, bonus_diamond); + PrintUserMenuStr(str, 3); + } + } + else if(app_state.current_abonement == PLATINUM_ABONEMENT) + { + if(blink) { + sprintf(str, "СЕРЕБ-%5dр %5d Б", pay_silver, bonus_silver); + PrintUserMenuStr(str, 0); + sprintf(str, "ЗОЛОТ-%5dр %5d Б", pay_gold, bonus_gold); + PrintUserMenuStr(str, 1); + + PrintUserMenuStr(" ", 2); + sprintf(str, "АЛМАЗ-%5dр %5d Б", pay_diamond, bonus_diamond); + PrintUserMenuStr(str, 3); + } else { + sprintf(str, "СЕРЕБ-%5dр %5d Б", pay_silver, bonus_silver); + PrintUserMenuStr(str, 0); + sprintf(str, "ЗОЛОТ-%5dр %5d Б", pay_gold, bonus_gold); + PrintUserMenuStr(str, 1); + sprintf(str, "ПЛАТ.-%5dр %5d Б", pay_plat, bonus_plat); + PrintUserMenuStr(str, 2); + sprintf(str, "АЛМАЗ-%5dр %5d Б", pay_diamond, bonus_diamond); + PrintUserMenuStr(str, 3); + } + } + else if(app_state.current_abonement == DIAMOND_ABONEMENT) + { + if(blink) { + sprintf(str, "СЕРЕБ-%5dр %5d Б", pay_silver, bonus_silver); + PrintUserMenuStr(str, 0); + sprintf(str, "ЗОЛОТ-%5dр %5d Б", pay_gold, bonus_gold); + PrintUserMenuStr(str, 1); + sprintf(str, "ПЛАТ.-%5dр %5d Б", pay_plat, bonus_plat); + PrintUserMenuStr(str, 2); + + PrintUserMenuStr(" ", 3); + } else { + sprintf(str, "СЕРЕБ-%5dр %5d Б", pay_silver, bonus_silver); + PrintUserMenuStr(str, 0); + sprintf(str, "ЗОЛОТ-%5dр %5d Б", pay_gold, bonus_gold); + PrintUserMenuStr(str, 1); + sprintf(str, "ПЛАТ.-%5dр %5d Б", pay_plat, bonus_plat); + PrintUserMenuStr(str, 2); + sprintf(str, "АЛМАЗ-%5dр %5d Б", pay_diamond, bonus_diamond); + PrintUserMenuStr(str, 3); + } + } +} + +void PrintSilverMenu(void) +{ + char str[32]; + char str1[20]; + uint32_t pay_silver = 0, bonus_silver = 0, best_before = 0; + + GetData(&AbonementMoneyDesc, &pay_silver, 0, DATA_FLAG_DIRECT_INDEX); + GetData(&AbonementBonusDesc, &bonus_silver, 0, DATA_FLAG_DIRECT_INDEX); + GetData(&AbonementBestBeforeDesc, &best_before, 0, DATA_FLAG_DIRECT_INDEX); + + uint32_t SystemTime = GetTimeSec() + best_before * 24L * 60L * 60L; + + PrintUserMenuStr("Серебрянный абонемент", 0); + + sprintf(str, "Стоимость - %d руб", pay_silver); + PrintUserMenuStr(str, 1); + + sprintf(str, "Доп.бонусы- %d руб", bonus_silver); + PrintUserMenuStr(str, 2); + + PrintDateString(str1, SystemTime); + sprintf(str, "Бонусы до %s", str1); + PrintUserMenuStr(str, 3); +} + +void PrintGoldMenu(void) +{ + char str[32]; + char str1[20]; + uint32_t pay_gold = 0, bonus_gold = 0, best_before = 0; + + GetData(&AbonementMoneyDesc, &pay_gold, 1, DATA_FLAG_DIRECT_INDEX); + GetData(&AbonementBonusDesc, &bonus_gold, 1, DATA_FLAG_DIRECT_INDEX); + GetData(&AbonementBestBeforeDesc, &best_before, 1, DATA_FLAG_DIRECT_INDEX); + + uint32_t SystemTime = GetTimeSec() + best_before * 24L * 60L * 60L; + + PrintUserMenuStr(" Золотой абонемент ", 0); + + sprintf(str, "Стоимость - %d руб", pay_gold); + PrintUserMenuStr(str, 1); + + sprintf(str, "Доп.бонусы- %d руб", bonus_gold); + PrintUserMenuStr(str, 2); + + PrintDateString(str1, SystemTime); + sprintf(str, "Бонусы до %s", str1); + PrintUserMenuStr(str, 3); +} + +void PrintPlatMenu(void) +{ + char str[32]; + char str1[20]; + uint32_t pay_plat = 0, bonus_plat = 0, best_before = 0; + + GetData(&AbonementMoneyDesc, &pay_plat, 2, DATA_FLAG_DIRECT_INDEX); + GetData(&AbonementBonusDesc, &bonus_plat, 2, DATA_FLAG_DIRECT_INDEX); + GetData(&AbonementBestBeforeDesc, &best_before, 2, DATA_FLAG_DIRECT_INDEX); + + uint32_t SystemTime = GetTimeSec() + best_before * 24L * 60L * 60L; + + PrintUserMenuStr("Платиновый абонемент", 0); + + sprintf(str, "Стоимость - %d руб", pay_plat); + PrintUserMenuStr(str, 1); + + sprintf(str, "Доп.бонусы- %d руб", bonus_plat); + PrintUserMenuStr(str, 2); + + PrintDateString(str1, SystemTime); + sprintf(str, "Бонусы до %s", str1); + PrintUserMenuStr(str, 3); +} + +void PrintDiamondMenu(void) +{ + char str[32]; + char str1[20]; + uint32_t pay_diamond = 0, bonus_diamond = 0, best_before = 0; + + GetData(&AbonementMoneyDesc, &pay_diamond, 3, DATA_FLAG_DIRECT_INDEX); + GetData(&AbonementBonusDesc, &bonus_diamond, 3, DATA_FLAG_DIRECT_INDEX); + GetData(&AbonementBestBeforeDesc, &best_before, 3, DATA_FLAG_DIRECT_INDEX); + + uint32_t SystemTime = GetTimeSec() + best_before * 24L * 60L * 60L; + + PrintUserMenuStr(" Алмазный абонемент ", 0); + + sprintf(str, "Стоимость - %d руб", pay_diamond); + PrintUserMenuStr(str, 1); + + sprintf(str, "Доп.бонусы- %d руб", bonus_diamond); + PrintUserMenuStr(str, 2); + + PrintDateString(str1, SystemTime); + sprintf(str, "Бонусы до %s", str1); + PrintUserMenuStr(str, 3); +} + +void PrintStartPayCardMenu(void) +{ + PrintUserMenuStr("При оплате:", 0); + PrintUserMenuStr("Деньги - суммируются", 1); + PrintUserMenuStr("Стар. бонусы сгорают", 2); + PrintUserMenuStr("Сроки бонусов-новые ", 3); +} + +void PrintInsertBankCardMenu(void) +{ + PrintUserMenuStr("Приложите банковскую", 0); + PrintUserMenuStr(" карту к терминалу ", 1); + PrintUserMenuStr(" или оплатите по ", 2); + PrintUserMenuStr(" Q-коду ", 3); +} + +void PrintInsertBonusCardMenu(void) +{ + PrintUserMenuStr(" Приложите ", 0); + PrintUserMenuStr(" КАРТУ ЗАГАРА ", 1); + PrintUserMenuStr("к специальному окну!", 2); + PrintUserMenuStr(" ", 3); +} + +void PrintFinishPayMenu(void) +{ + PrintUserMenuStr(" Ваша КАРТА ЗАГАРА ", 0); + PrintUserMenuStr(" готова ", 1); + PrintUserMenuStr(" Для продолжения ", 2); + PrintUserMenuStr(" нажмите СТАРТ! ", 3); +} + +void PrintAnotherCardMenu(void) +{ + PrintUserMenuStr(" Приложите другую ", 0); + PrintUserMenuStr(" карту к терминалу! ", 1); + PrintUserMenuStr(" или оплатите по ", 2); + PrintUserMenuStr(" Q-коду ", 3); +} + void PrintHelloMenu(void) { PrintUserMenuStr(" Здравствуйте!", 0); @@ -1946,10 +2992,18 @@ void PrintWarning2Menu(void) { PrintUserMenuStrUnalign("Перед использованием", 0); PrintUserMenuStrUnalign("АВТОМАТА необходимо", 1); - PrintUserMenuStrUnalign(" ознакомиться", 2); + PrintUserMenuStrUnalign(" ознакомиться ", 2); PrintUserMenuStrUnalign(" с его инструкцией", 3); } +void PrintWrongAbonementMenu(void) +{ + PrintUserMenuStrUnalign(" Ваша КАРТА ЗАГАРА ", 0); + PrintUserMenuStrUnalign(" не может быть ", 1); + PrintUserMenuStrUnalign(" использована ", 2); + PrintUserMenuStrUnalign(" на этом АВТОМАТЕ ", 3); +} + void PrintSelectChMenu(CPU_INT08U blink) { CPU_INT08U i; @@ -2072,7 +3126,7 @@ void PrintSelectPayTypeMenu(CPU_INT08U blink) { PrintUserMenuStrUnalign(" Выберите способ", 0); PrintUserMenuStrUnalign(" оплаты", 1); - if (app_state.pay_index == PAY_TYPE_CASH) + if (app_state.pay_index == PAY_TYPE_CARD_ABONEMENT) { if (blink) { @@ -2081,7 +3135,7 @@ void PrintSelectPayTypeMenu(CPU_INT08U blink) } else { - PrintUserMenuStrUnalign("1. Наличными", 2); + PrintUserMenuStrUnalign("1. Картой загара", 2); PrintUserMenuStrUnalign("2. Банковской картой", 3); } } @@ -2089,12 +3143,12 @@ void PrintSelectPayTypeMenu(CPU_INT08U blink) { if (blink) { - PrintUserMenuStrUnalign("1. Наличными", 2); + PrintUserMenuStrUnalign("1. Картой загара", 2); PrintUserMenuStrUnalign(" ", 3); } else { - PrintUserMenuStrUnalign("1. Наличными", 2); + PrintUserMenuStrUnalign("1. Картой загара", 2); PrintUserMenuStrUnalign("2. Банковской картой", 3); } } @@ -2354,4 +3408,3 @@ void PlayMusicFile(int file_index) } } } - diff --git a/PROJECT/app/ftp_app.c b/PROJECT/app/ftp_app.c index 5b5a4b1..0ef4ebb 100644 --- a/PROJECT/app/ftp_app.c +++ b/PROJECT/app/ftp_app.c @@ -285,6 +285,8 @@ int ReadFtpCountersString(int index, char *buf) } // чтение очередной строки для создания файла csv журналов +TEventRecord record; + int ReadFtpLogString(int index, char *buf) { static const char header[] = "Номер записи;Время;Событие;Данные\r\n"; @@ -295,7 +297,6 @@ int ReadFtpLogString(int index, char *buf) } else if ((index >= 1) && (index <= EVENT_RECORDS_COUNT)) { - TEventRecord record; index -= 1; GetEventRecord(&record, index); sprintf(buf, "%d;", index); diff --git a/PROJECT/app/journal.c b/PROJECT/app/journal.c index 35efbc2..268d3de 100644 --- a/PROJECT/app/journal.c +++ b/PROJECT/app/journal.c @@ -119,6 +119,26 @@ int GetEventRecord(TEventRecord* record, CPU_INT32U index) return 0; } +void SaveEventAbonementRecord(TEventRecord * record) +{ + journal_getSem(); + + record->time = GetTimeSec(); + + WriteArrayFram(offsetof(TFramMap, EventRecords[0])+journal_rec_index*sizeof(TEventRecord), sizeof(TEventRecord), (unsigned char*)record); + + journal_rec_index = (journal_rec_index + 1) % EVENT_RECORDS_COUNT; + + #ifdef CONFIG_FTP_CLIENT_ENABLE + if ((journal_rec_index == 0) || (journal_rec_index == EVENT_RECORDS_COUNT / 2)) + { + time_to_ftp = FTP_FLAG_SEND_COUNTERS | FTP_FLAG_SEND_LOGS; + } + #endif + + journal_freeSem(); +} + // запись в журнал записи о событии void SaveEventRecord(CPU_INT08U channel, CPU_INT08U event, CPU_INT16U data) { @@ -191,9 +211,33 @@ void GetEventStr(char* str, char event) case JOURNAL_EVENT_CARD_ACCEPTED: sprintf(str, "Банк.оплата "); break; + case JOURNAL_EVENT_CARD_ABONEMENT_ACCEPTED: + sprintf(str, "Банк.оплата пополн."); + break; case JOURNAL_EVENT_CARD_REJECTED: sprintf(str, "Банк.оплата "); break; + case JOURNAL_EVENT_ABONEMENT_ACCEPTED: + sprintf(str, "БКЗ.оплата "); + break; + case JOURNAL_EVENT_ABONEMENT_REJECTED: + sprintf(str, "БКЗ.отказ "); + break; + case JOURNAL_EVENT_ABONEMENT_PAY_ACCEPTED: + sprintf(str, "БКЗ.пополн."); + break; + case JOURNAL_EVENT_CARD_ABONEMENT_REAPEATE: + sprintf(str, "БКЗ.отказ.Повтор"); + break; + case JOURNAL_EVENT_ABONEMENT_PAY_REJECTED: + sprintf(str, "БКЗ.пополн."); + break; + case JOURNAL_EVENT_ABONEMENT_BALANCE: + sprintf(str, "БКЗ.баланс "); + break; + case JOURNAL_EVENT_ABONEMENT_WRONG: + sprintf(str, "БКЗ.карта "); + break; case JOURNAL_EVENT_START_SESSION: #if defined(BOARD_CENTRAL_CARWASH) sprintf(str, "Нач.работы "); @@ -387,8 +431,14 @@ void IncCounter(CPU_INT08U ch, CPU_INT32U time, CPU_INT32U money, CPU_INT08U car t+=time; WriteArrayFram(offsetof(TFramMap, Counters.CounterChannelRun)+sizeof(CPU_INT32U)*ch, sizeof(CPU_INT32U), (unsigned char*)&r); WriteArrayFram(offsetof(TFramMap, Counters.CounterChannelTime)+sizeof(CPU_INT32U)*ch, sizeof(CPU_INT32U), (unsigned char*)&t); - - if (card) + + if (card == 2) + { + ReadArrayFram(offsetof(TFramMap, Counters.CounterChannelAbonement)+sizeof(CPU_INT32U)*ch, sizeof(CPU_INT32U), (unsigned char*)&m); + m+=money; + WriteArrayFram(offsetof(TFramMap, Counters.CounterChannelAbonement)+sizeof(CPU_INT32U)*ch, sizeof(CPU_INT32U), (unsigned char*)&m); + } + else if (card) { ReadArrayFram(offsetof(TFramMap, Counters.CounterChannelCard)+sizeof(CPU_INT32U)*ch, sizeof(CPU_INT32U), (unsigned char*)&m); m+=money; @@ -409,7 +459,13 @@ void IncCounter(CPU_INT08U ch, CPU_INT32U time, CPU_INT32U money, CPU_INT08U car WriteArrayFram(offsetof(TFramMap, Counters.CounterRun), sizeof(CPU_INT32U), (unsigned char*)&r); WriteArrayFram(offsetof(TFramMap, Counters.CounterTime), sizeof(CPU_INT32U), (unsigned char*)&t); - if (card) + if (card == 2) + { + ReadArrayFram(offsetof(TFramMap, Counters.CounterAbonement), sizeof(CPU_INT32U), (unsigned char*)&m); + m+=money; + WriteArrayFram(offsetof(TFramMap, Counters.CounterAbonement), sizeof(CPU_INT32U), (unsigned char*)&m); + } + else if (card) { ReadArrayFram(offsetof(TFramMap, Counters.CounterCard), sizeof(CPU_INT32U), (unsigned char*)&m); m+=money; @@ -429,7 +485,12 @@ void IncCounter(CPU_INT08U ch, CPU_INT32U time, CPU_INT32U money, CPU_INT08U car long_ctrs.CounterRunLong++; long_ctrs.CounterTimeLong += time; - if (card) + if (card == 2) + { + long_ctrs.CounterChannelAbonementLong[ch] += money; + long_ctrs.CounterAbonementLong += money; + } + else if (card) { long_ctrs.CounterChannelCardLong[ch] += money; long_ctrs.CounterCardLong += money; diff --git a/PROJECT/app/journal.h b/PROJECT/app/journal.h index 7b47ea7..a5436e5 100644 --- a/PROJECT/app/journal.h +++ b/PROJECT/app/journal.h @@ -4,7 +4,7 @@ #include "control.h" #include "fiscal.h" -#define EVENT_RECORDS_COUNT 512 // число записей в журнале +#define EVENT_RECORDS_COUNT 150 // число записей в журнале #pragma pack(push, 1) /// структура записи журнала рабочих событий @@ -99,18 +99,71 @@ typedef struct{ // ошибка связи с фискальником #define ERROR_FR_CONN 52 - // ВСЕ ОШИБКИ ФР ФАТАЛЬНЫЕ - #define ERROR_FR 53 + #define JOURNAL_EVENT_ABONEMENT_ACCEPTED 53 // принят абонемент, сумма безнала + #define JOURNAL_EVENT_ABONEMENT_REJECTED 54 // абонемент отклонен - #define JOURNAL_EVENTS_COUNT (ERROR_FR+FR_ERROR_NUMBER) // число событий + #define JOURNAL_EVENT_ABONEMENT_PAY_ACCEPTED 55 // куплен абонемент, сумма безнала + #define JOURNAL_EVENT_ABONEMENT_PAY_REJECTED 56 // покупка абонемента отклонена + + #define JOURNAL_EVENT_ABONEMENT_BALANCE 57 // чтение баланса + #define JOURNAL_EVENT_ABONEMENT_WRONG 58 // не верная карта + + #define JOURNAL_EVENT_CARD_ABONEMENT_ACCEPTED 59 // принята карта, сумма безнала - оплата абонемента + + #define JOURNAL_EVENT_CARD_ABONEMENT_REAPEATE 60 // превышено количество посещений в день + + // ВСЕ ОШИБКИ ФР ФАТАЛЬНЫЕ + #define ERROR_FR 61 + + #define JOURNAL_EVENTS_COUNT (ERROR_FR + FR_ERROR_NUMBER) // число событий // канал - CPU_INT08U channel; - - // данные: для получения денег - номинал купюры, для сеанса - длительность оплаченного времени, мин. - CPU_INT16U data; + union + { + CPU_INT08U channel; + CPU_INT08U type_abonement; + }; -}TEventRecord; + /// @brief данные: для получения денег - номинал купюры, для сеанса - длительность оплаченного времени, мин., потраченные деньги + union + { + CPU_INT16U data; + CPU_INT16U money; + }; + + /// @brief Потраченные бонусы + union + { + CPU_INT16U bonus; + }; + + /// @brief Дата окончания абонемента, пароль, сумма для банка в копейках + union + { + CPU_INT32U time_before; + CPU_INT32U password; + CPU_INT32U money_bank; + }; + + /// @brief Номер карты + union + { + CPU_INT32U number_abonement; + }; + + /// @brief Деньги на карте + union + { + CPU_INT16U money_sum; + }; + + /// @brief Бонусы на карте + union + { + CPU_INT16U bonus_sum; + }; + +}TEventRecord; // 22 байта #pragma pack(pop) #if defined(BOARD_SOLARIUM_VLAD) @@ -123,8 +176,23 @@ typedef struct{ CPU_INT32U runs; /// количество секунд работы CPU_INT32U worktime; + + // деньги с карт + CPU_INT32U card_money; + // бонуса с карт + CPU_INT32U card_bonus; }SolarCountersRecord; +/// структура записи счетчиков о солярии в одном режиме +typedef struct{ + /// число запусков + CPU_INT32U runs; + // деньги с карт + CPU_INT32U card_money; + // бонуса с карт + CPU_INT32U card_bonus; +}AbonentCountersRecord; + /// структура всех счетчиков для солярия typedef struct{ /// счетчики по соляриям и режимам @@ -135,6 +203,10 @@ typedef struct{ SolarCountersRecord solar_m[SOLAR_MODES_COUNT]; /// счетчики теста по режимам SolarCountersRecord solar_m_test[SOLAR_MODES_COUNT]; + + /// счетчики по абонементам + AbonentCountersRecord abonement[5]; + /// отработанное время коллатен+макси по соляриям CPU_INT32U collaten_time[CHANNELS_NUM]; /// отработанное время ультрафиолет+макси по соляриям @@ -145,6 +217,8 @@ typedef struct{ CPU_INT32U cash_money; /// денег по карте CPU_INT32U card_money; + /// денег по абонементам + CPU_INT32U abonement_money; /// количество купюр CPU_INT32U bill_count; /// количество уборок @@ -175,6 +249,8 @@ typedef struct{ CPU_INT32U CounterChannelMoney[CHANNELS_NUM]; // Сумма безнала поканально CPU_INT32U CounterChannelCard[CHANNELS_NUM]; + // Сумма по абонементу + CPU_INT32U CounterChannelAbonement[CHANNELS_NUM]; // общее число запусков CPU_INT32U CounterRun; @@ -184,7 +260,9 @@ typedef struct{ CPU_INT32U CounterMoney; // общее Сумма безнала CPU_INT32U CounterCard; - + // общее Сумма по абонементу + CPU_INT32U CounterAbonement; + // счетчики купюр в купюрнике по номиналам CPU_INT32U CounterBillNominals[24]; // общий счетчик купюр (всего в кассете) @@ -202,11 +280,15 @@ typedef struct{ CPU_INT32U CounterChannelMoneyLong[CHANNELS_NUM]; // Сумма безнала поканально CPU_INT32U CounterChannelCardLong[CHANNELS_NUM]; + // Сумма по абонементу + CPU_INT32U CounterChannelAbonementLong[CHANNELS_NUM]; CPU_INT32U CounterRunLong; CPU_INT32U CounterTimeLong; CPU_INT32U CounterMoneyLong; CPU_INT32U CounterCardLong; + CPU_INT32U CounterAbonementLong; + CPU_INT16U crc; }TCountersLong; @@ -214,6 +296,11 @@ typedef struct{ extern void IncBillnomCounter(CPU_INT32U index); extern void CheckLongCounters(void); extern void SaveEventRecord(CPU_INT08U channel, CPU_INT08U event, CPU_INT16U data); + +/// @brief Сохранение записи журнала +/// @param record запись журнала +extern void SaveEventAbonementRecord(TEventRecord * record); + extern void SetErrorFlag(CPU_INT08U error); extern void ClrErrorFlag(CPU_INT08U error); extern int TstErrorFlag(CPU_INT08U error); diff --git a/PROJECT/app/service_name.c b/PROJECT/app/service_name.c new file mode 100644 index 0000000..ec03ba6 --- /dev/null +++ b/PROJECT/app/service_name.c @@ -0,0 +1,8 @@ +#include "service_name.h" + +char service_name[] = "Услуга загара РІ солярии"; + +char* get_service_name() +{ + return service_name; +} diff --git a/PROJECT/app/service_name.h b/PROJECT/app/service_name.h new file mode 100644 index 0000000..c4ca63b --- /dev/null +++ b/PROJECT/app/service_name.h @@ -0,0 +1,13 @@ +#ifndef _SERVICE_NAME_H_ +#define _SERVICE_NAME_H_ + +#include +#include +#include +#include + +/// @brief Возвращаем РёРјСЏ услуги +/// @return +extern char* get_service_name(); + +#endif \ No newline at end of file diff --git a/PROJECT/app/term_tsk.c b/PROJECT/app/term_tsk.c index dd4ab4b..bee3f73 100644 --- a/PROJECT/app/term_tsk.c +++ b/PROJECT/app/term_tsk.c @@ -10,6 +10,7 @@ #include #include "time.h" #include "ftp_app.h" +#include "service_name.h" static OS_STK TermTaskStk[TERM_TASK_STK_SIZE]; @@ -153,7 +154,7 @@ int TermReadPacket(NET_SOCK_ID sock, CPU_INT08U *packet, CPU_INT32U maxlen, CPU_ CPU_INT08U c; CPU_INT16U packet_len = 0; - // длина + // пїЅпїЅпїЅпїЅпїЅ if (!TermReadChar(sock, &packet[0], timeout)) return len; len++; if (!TermReadChar(sock, &packet[1], timeout)) return len; @@ -161,7 +162,7 @@ int TermReadPacket(NET_SOCK_ID sock, CPU_INT08U *packet, CPU_INT32U maxlen, CPU_ packet_len = (uint16_t)packet[0] * 256UL + (uint16_t)packet[1]; if (packet_len < 2) return 0; - // метка + // пїЅпїЅпїЅпїЅпїЅ if (!TermReadChar(sock, &packet[2], timeout)) return len; len++; if (!TermReadChar(sock, &packet[3], timeout)) return len; @@ -175,7 +176,7 @@ int TermReadPacket(NET_SOCK_ID sock, CPU_INT08U *packet, CPU_INT32U maxlen, CPU_ if ((packet[2] != 0x97) || (packet[3] != 0xFB)) return 0; } - // тэги + // пїЅпїЅпїЅпїЅ while (len < packet_len + 2) { CPU_INT16U tag; @@ -290,7 +291,7 @@ uint32_t SetTermCommand(uint32_t cmd, uint32_t* param) return curr_cmd; } -/// создать заголовок +/// пїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ uint32_t ttk2_tag_header(char *buf) { buf[2] = '\x96'; @@ -298,7 +299,7 @@ uint32_t ttk2_tag_header(char *buf) return 4; } -/// создать заголовок +/// пїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ uint32_t vtk_tag_header(char *buf) { buf[2] = '\x96'; @@ -306,7 +307,7 @@ uint32_t vtk_tag_header(char *buf) return 4; } -/// задать длину +/// пїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅ uint32_t ttk2_tag_setlen(char *buf, uint16_t len) { buf[0] = (len >> 8) & 0xFF; @@ -314,7 +315,7 @@ uint32_t ttk2_tag_setlen(char *buf, uint16_t len) return 2; } -/// записать тэг, возвращает длину +/// пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅ, пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅ uint32_t ttk2_tag_add(char *buf, uint16_t id, char *value, uint8_t value_len) { buf[0] = (char)(id & 0xFF); @@ -376,7 +377,7 @@ int ttk2_get_field(CPU_INT08U *packet, uint32_t packet_len, uint16_t field, uint return 0; } -/// получение параметров из последнего удачного запроса (информация для чека) +/// пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅ (пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅ пїЅпїЅпїЅпїЅ) int ttk2_get_field_string(uint16_t field, char* str, uint16_t maxlen) { int tag_size; @@ -448,6 +449,7 @@ void TermAppTask(void *p_arg) if (time_to_ftp & FTP_FLAG_CLEAR_LOGS) { ClearEventJournal(); + JournalInit(); } } else @@ -472,8 +474,8 @@ void TermAppTask(void *p_arg) GetData(&TerminalProtocolDesc, &proto, 0, DATA_FLAG_SYSTEM_INDEX); if (proto == TERMINAL_PROTOCOL_VTK) { - // дальше протокол VTK - // периодический запрос IDL + // пїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ VTK + // пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ IDL if (OSTimeGet() - idl_stamp > op_timeout * 1000UL / 2) { NET_ERR err; @@ -488,15 +490,15 @@ void TermAppTask(void *p_arg) uint32_t packet_len; char *content; - // заголовок + // пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ vtk_tag_header(term_buffer); - // содержимое + // пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ content = &term_buffer[4]; packet_len = 0; - // код операции + // пїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ packet_len += ttk2_tag_add(&content[packet_len], 0x01, "IDL", 3); ttk2_tag_setlen(term_buffer, packet_len + 2); - // общая длина для передачи + // пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ packet_len += 4; OSTimeDly(50); @@ -512,11 +514,11 @@ void TermAppTask(void *p_arg) char opcode[16]; int tag_size; memset(opcode, 0, 16); - // код сообщения + // пїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ tag_size = ttk2_get_field((CPU_INT08U *)term_buffer, plen, 0x01, (uint8_t*)opcode, 15); if ((tag_size == 3) && (strcmp(opcode, "IDL") == 0)) { - // таймаут операции + // пїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ int value; memset(opcode, 0, 16); tag_size = ttk2_get_field((CPU_INT08U *)term_buffer, plen, 0x06, (uint8_t*)opcode, 15); @@ -524,7 +526,7 @@ void TermAppTask(void *p_arg) { op_timeout = value; } - // номер операции + // пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ memset(opcode, 0, 16); tag_size = ttk2_get_field((CPU_INT08U *)term_buffer, plen, 0x03, (uint8_t*)opcode, 15); if (sscanf(opcode, "%d", &value) == 1) @@ -562,7 +564,7 @@ void TermAppTask(void *p_arg) { uint32_t packet_len; char *content; - char str[16]; + char str[32]; term_state = TERM_STATE_WAITING_PUR; term_command_new &= ~TERM_COMMAND_ABORT_PUR; @@ -571,9 +573,9 @@ void TermAppTask(void *p_arg) content = &term_buffer[4]; packet_len = 0; - // код операции + // пїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ packet_len += ttk2_tag_add(&content[packet_len], 0x01, "VRP", 3); - // номер операции + // пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ ++op_number; sprintf(str, "%d", op_number); packet_len += ttk2_tag_add(&content[packet_len], 0x03, str, strlen(str)); @@ -588,9 +590,13 @@ void TermAppTask(void *p_arg) packet_len += ttk2_tag_add(&content[packet_len], 0x09, "1", 1); // timeout packet_len += ttk2_tag_add(&content[packet_len], 0x06, "60", 1); - // длина в пакете + + // Product name + packet_len += ttk2_tag_add(&content[packet_len], 0x0F, get_service_name(), 43); + + // пїЅпїЅпїЅпїЅпїЅ пїЅ пїЅпїЅпїЅпїЅпїЅпїЅ ttk2_tag_setlen(term_buffer, packet_len + 2); - // общая длина для передачи + // пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ packet_len += 4; OSTimeDly(50); @@ -629,14 +635,14 @@ void TermAppTask(void *p_arg) content = &term_buffer[4]; packet_len = 0; - // код операции + // пїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ packet_len += ttk2_tag_add(&content[packet_len], 0x01, "ABR", 3); - // номер операции + // пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ sprintf(str, "%d", op_number); packet_len += ttk2_tag_add(&content[packet_len], 0x03, str, strlen(str)); - // длина в пакете + // пїЅпїЅпїЅпїЅпїЅ пїЅ пїЅпїЅпїЅпїЅпїЅпїЅ ttk2_tag_setlen(term_buffer, packet_len + 2); - // общая длина для передачи + // пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ packet_len += 4; int writed = HostWriteData(sock, term_buffer, packet_len); @@ -665,14 +671,14 @@ void TermAppTask(void *p_arg) tag_size = ttk2_get_field((CPU_INT08U *)term_buffer, plen, 0x04, (uint8_t*)opcode, 15); if ((tag_size > 0) && (strcmp(opcode, str) == 0)) { - // VRP OK, посылаем FIN + // VRP OK, пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ FIN vtk_tag_header(term_buffer); content = &term_buffer[4]; packet_len = 0; - // код операции + // пїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ packet_len += ttk2_tag_add(&content[packet_len], 0x01, "FIN", 3); - // номер операции + // пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ sprintf(str, "%d", op_number); packet_len += ttk2_tag_add(&content[packet_len], 0x03, str, strlen(str)); // transaction amount (money * 100) @@ -680,9 +686,9 @@ void TermAppTask(void *p_arg) packet_len += ttk2_tag_add(&content[packet_len], 0x04, str, strlen(str)); // product id packet_len += ttk2_tag_add(&content[packet_len], 0x09, "1", 1); - // длина в пакете + // пїЅпїЅпїЅпїЅпїЅ пїЅ пїЅпїЅпїЅпїЅпїЅпїЅ ttk2_tag_setlen(term_buffer, packet_len + 2); - // общая длина для передачи + // пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ packet_len += 4; OSTimeDly(50); @@ -781,7 +787,7 @@ void TermAppTask(void *p_arg) continue; } - // дальше протокол ТТК2 + // пїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅ2 if (term_state == TERM_STATE_IDLE) { if (term_command_new & TERM_COMMAND_MAKE_SVERKA) @@ -806,18 +812,18 @@ void TermAppTask(void *p_arg) content = &term_buffer[4]; packet_len = 0; - // код операции + // пїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ packet_len += ttk2_tag_add(&content[packet_len], 0x01, "SRV", 3); - // номер клиента + // пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅ packet_len += ttk2_tag_add(&content[packet_len], 0x02, "1", 1); - // номер документа (ERN) + // пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ (ERN) sprintf(str, "%d", terminal_info.ern); packet_len += ttk2_tag_add(&content[packet_len], 0x03, str, strlen(str)); - // код операции + // пїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ packet_len += ttk2_tag_add(&content[packet_len], 0x1A, "2", 1); ttk2_tag_setlen(term_buffer, packet_len + 2); - // общая длина для передачи + // пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ packet_len += 4; OSTimeDly(50); @@ -919,18 +925,18 @@ void TermAppTask(void *p_arg) content = &term_buffer[4]; packet_len = 0; - // код операции + // пїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ packet_len += ttk2_tag_add(&content[packet_len], 0x01, "SRV", 3); - // номер клиента + // пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅ packet_len += ttk2_tag_add(&content[packet_len], 0x02, "1", 1); - // номер документа (ERN) + // пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ (ERN) sprintf(str, "%d", terminal_info.ern); packet_len += ttk2_tag_add(&content[packet_len], 0x03, str, strlen(str)); - // код операции + // пїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ packet_len += ttk2_tag_add(&content[packet_len], 0x1A, "8", 1); ttk2_tag_setlen(term_buffer, packet_len + 2); - // общая длина для передачи + // пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ packet_len += 4; OSTimeDly(50); @@ -1041,11 +1047,11 @@ void TermAppTask(void *p_arg) content = &term_buffer[4]; packet_len = 0; - // код операции + // пїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ packet_len += ttk2_tag_add(&content[packet_len], 0x01, "PUR", 3); - // номер клиента + // пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅ packet_len += ttk2_tag_add(&content[packet_len], 0x02, "1", 1); - // номер документа (ERN) + // пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ (ERN) sprintf(str, "%d", terminal_info.ern); packet_len += ttk2_tag_add(&content[packet_len], 0x03, str, strlen(str)); // transaction amount (money * 100) @@ -1056,13 +1062,13 @@ void TermAppTask(void *p_arg) sprintf(str, "%d", money); packet_len += ttk2_tag_add(&content[packet_len], 0x04, str, strlen(str)); // transaction mode (bit field) - packet_len += ttk2_tag_add(&content[packet_len], 0x08, "\xC0", 1); + packet_len += ttk2_tag_add(&content[packet_len], 0x08, "\xC0", 1); ttk2_tag_setlen(term_buffer, packet_len + 2); - // общая длина для передачи + // пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ packet_len += 4; - // сохраним признак операции + // пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ terminal_info.request_active = 1; SaveTerminalInfo(&terminal_info); @@ -1072,7 +1078,7 @@ void TermAppTask(void *p_arg) if (writed != packet_len) { term_state = TERM_STATE_ERR_PUR; - // надо отменить, наверное + // пїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ, пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ terminal_info.ern++; terminal_info.request_active = 0; SaveTerminalInfo(&terminal_info); @@ -1108,22 +1114,22 @@ void TermAppTask(void *p_arg) content = &term_buffer[4]; packet_len = 0; - // код операции + // пїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ packet_len += ttk2_tag_add(&content[packet_len], 0x01, "ABR", 3); - // номер клиента + // пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅ packet_len += ttk2_tag_add(&content[packet_len], 0x02, "1", 1); - // номер документа (ERN) + // пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ (ERN) sprintf(str, "%d", terminal_info.ern); packet_len += ttk2_tag_add(&content[packet_len], 0x03, str, strlen(str)); ttk2_tag_setlen(term_buffer, packet_len + 2); - // общая длина для передачи + // пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ packet_len += 4; int writed = HostWriteData(sock, term_buffer, packet_len); OSTimeDly(100); - // сбросим признак операции + // пїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ terminal_info.request_active = 0; terminal_info.ern++; SaveTerminalInfo(&terminal_info); @@ -1179,7 +1185,7 @@ void TermAppTask(void *p_arg) rx_packet_len = 0; } - // Код ответа + // пїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ char resp_code[3] = "\x0\x0\x0"; tag_size = ttk2_get_field((CPU_INT08U *)term_buffer, plen, 0x9B, (uint8_t*)&resp_code, 2); if (tag_size > 0) @@ -1195,7 +1201,7 @@ void TermAppTask(void *p_arg) } else if (strcmp(resp_code, "BB") == 0) { - // требуется синхронизация журнала + // пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅ OS_ENTER_CRITICAL(); term_command_new |= TERM_COMMAND_MAKE_SYNCHRO; OS_EXIT_CRITICAL(); diff --git a/PROJECT/data/datadesc.c b/PROJECT/data/datadesc.c index 1f12d83..359e70a 100644 --- a/PROJECT/data/datadesc.c +++ b/PROJECT/data/datadesc.c @@ -22,6 +22,9 @@ #include "mode.h" #include "ftp_app.h" +#include "rfid-spi.h" +#include "mfrc522data.h" + extern CPU_INT32U modem_status; extern CPU_INT08U start_pass_ok; extern int player_conn; @@ -467,7 +470,7 @@ TDataDescStruct const EnableValidatorDesc = { DATA_IS_INDEX, // признак индексного параметра (список строк) EnableValidatorList, // указатель на список строк для индексного параметра DATA_INIT_DISABLE, - 1 // значение по умолчанию + 0 // значение по умолчанию }; /************************************* @@ -665,6 +668,119 @@ TDataDescStruct const EnableCoinDesc = { 0 }; +/************************************* + Включение абонемента +*************************************/ +TRangeValueULONG const EnableAbonementRange = {0, 1}; +CPU_INT08U const EnableAbonementName[] = "Абонемент"; +CPU_INT08U const *EnableAbonementList[] = {OnOffList_str0, OnOffList_str1}; + +void OnchangeEnableAbonement(void) +{ +} + +TDataDescStruct const EnableAbonementDesc = { + DATA_DESC_EDIT, // тип дескриптора + DATA_TYPE_ULONG, // тип параметра + DATA_LOC_FRAM, // расположение параметра + DATA_NO_ARRAY, // признак массива + 0, // размер массива + 0, // указатель на дескриптор индекса массива + (void*)offsetof(TFramMap, DeviceConfig.EnableAbonementAcceptor), // указатель на переменную или адрес FRAM + (void*)&EnableAbonementRange, // указатель на границы параметра + OnchangeEnableAbonement, // функция по изменению + sizeof(CPU_INT32U), // смещение между элементами в массиве + EnableAbonementName, // указатель на строку названия параметра + DATA_IS_INDEX, // признак индексного параметра (список строк) + EnableAbonementList, // указатель на список строк для индексного параметра + DATA_INIT_DISABLE, + 0 +}; + +/************************************* + Количество использований абонемента в день +*************************************/ +TRangeValueULONG const CountUseAbonementRange = {1, 9}; +CPU_INT08U const CountUseAbonementName[] = "Кол.использ."; + +void OnchangeCountUseAbonement(void) +{ +} + +TDataDescStruct const CountUseAbonementDesc = { + DATA_DESC_EDIT, // тип дескриптора + DATA_TYPE_ULONG, // тип параметра + DATA_LOC_FRAM, // расположение параметра + DATA_NO_ARRAY, // признак массива + 0, // размер массива + 0, // указатель на дескриптор индекса массива + (void*)offsetof(TFramMap, DeviceConfig.CountUseAbonement), // указатель на переменную или адрес FRAM + (void*)&CountUseAbonementRange, // указатель на границы параметра + OnchangeCountUseAbonement, // функция по изменению + sizeof(CPU_INT32U), // смещение между элементами в массиве + CountUseAbonementName, // указатель на строку названия параметра + DATA_NO_INDEX, // признак индексного параметра (список строк) + NULL, // указатель на список строк для индексного параметра + DATA_INIT_ENABLE, + 2 +}; + +/************************************* + Команда на очистку статистики абонементов +*************************************/ +CPU_INT32U ClearStatAbonementCmd = 0; + +TRangeValueULONG const InitByDefaultAbonementRange = {0, 1}; + +extern void ClearAbonementCounters(void); + +CPU_INT08U const ClearAbonementCmdName[] = "Очистка"; +CPU_INT08U const ClearAbonementCmdList_str0[] = "нет"; +CPU_INT08U const ClearAbonementCmdList_str1[] = "да"; +CPU_INT08U const *ClearAbonementCmdList[] = {ClearAbonementCmdList_str0, ClearAbonementCmdList_str1}; + +void OnChangeClearStatAbonementCmd(void) +{ + if (ClearStatAbonementCmd) + { + while (1) + { + if (picc_is_new_card_present()) + { + if (picc_read_card_serial()) + { + init_mifare_card_data(); + write_mifare_card(); + stop_card_working(); + break; + } + } + + OSTimeDly(100); + } + + ClearStatAbonementCmd = 0; + } +} + +TDataDescStruct const ClearStatAbonementCmdDesc = { + DATA_DESC_EDIT, // тип дескриптора + DATA_TYPE_ULONG, // тип параметра + DATA_LOC_RAM, // расположение параметра + DATA_NO_ARRAY, // признак массива + 0, // размер массива + NULL, // указатель на дескриптор индекса массива + (void*)&ClearStatAbonementCmd, // указатель на переменную или адрес FRAM + (void*)&InitByDefaultAbonementRange, // указатель на границы параметра + OnChangeClearStatAbonementCmd, // функция по изменению + 0, // смещение между элементами в массиве + ClearAbonementCmdName, // указатель на строку названия параметра + DATA_IS_INDEX, // признак индексного параметра (список строк) + ClearAbonementCmdList, // указатель на список строк для индексного параметра + DATA_INIT_ENABLE, + 0 +}; + /************************************* Цена импульса монетоприемника *************************************/ @@ -789,7 +905,7 @@ TDataDescStruct const EnableFiscalDesc = { DATA_IS_INDEX, // признак индексного параметра (список строк) EnableFiscalList, // указатель на список строк для индексного параметра DATA_INIT_DISABLE, - 1 + 0 }; /************************************* @@ -1540,6 +1656,33 @@ void OnChangeInitByDefault(void) temp32 = 2; SetData(&SolarControlChannelDesc, &temp32, 2, DATA_FLAG_DIRECT_INDEX); + temp32 = 3000; + SetData(&AbonementMoneyDesc, &temp32, 0, DATA_FLAG_DIRECT_INDEX); + temp32 = 600; + SetData(&AbonementBonusDesc, &temp32, 0, DATA_FLAG_DIRECT_INDEX); + temp32 = 45; + SetData(&AbonementBestBeforeDesc, &temp32, 0, DATA_FLAG_DIRECT_INDEX); + + temp32 = 6000; + SetData(&AbonementMoneyDesc, &temp32, 1, DATA_FLAG_DIRECT_INDEX); + temp32 = 1800; + SetData(&AbonementBonusDesc, &temp32, 1, DATA_FLAG_DIRECT_INDEX); + temp32 = 90; + SetData(&AbonementBestBeforeDesc, &temp32, 1, DATA_FLAG_DIRECT_INDEX); + + temp32 = 12000; + SetData(&AbonementMoneyDesc, &temp32, 2, DATA_FLAG_DIRECT_INDEX); + temp32 = 4800; + SetData(&AbonementBonusDesc, &temp32, 2, DATA_FLAG_DIRECT_INDEX); + temp32 = 180; + SetData(&AbonementBestBeforeDesc, &temp32, 2, DATA_FLAG_DIRECT_INDEX); + + temp32 = 24000; + SetData(&AbonementMoneyDesc, &temp32, 3, DATA_FLAG_DIRECT_INDEX); + temp32 = 10800; + SetData(&AbonementBonusDesc, &temp32, 3, DATA_FLAG_DIRECT_INDEX); + temp32 = 360; + SetData(&AbonementBestBeforeDesc, &temp32, 3, DATA_FLAG_DIRECT_INDEX); #endif @@ -1737,6 +1880,8 @@ CPU_INT08U const *ErrorNumberList0[JOURNAL_EVENTS_COUNT] = {" "", "ошибка", "ошибка", + "", "", "", "", + "", "", "", "", "ФР:01h-Неизвестная", "ФР:02h-Неверное", @@ -1900,7 +2045,9 @@ CPU_INT08U const *ErrorNumberList1[JOURNAL_EVENTS_COUNT] = {"", "", "", "", "модема", "", "связи с ФР", - "", + "", "", "", "", + "", "", "", "", + "", "команда", // ФР:01h "состояние ФН", @@ -2070,7 +2217,10 @@ CPU_INT08U const *ErrorNumberListEng[JOURNAL_EVENTS_COUNT] = "Oshibka svyazi s modemom", "", - "Oshibka svyazi s FR", + "Oshibka svyazi s FR", + "", "", "", "", + "", "", "", "", + "Oshibka FR 0x01", "Oshibka FR 0x02", "Oshibka FR 0x03", @@ -2364,6 +2514,7 @@ void OnChangeClearJournalCmd(void) { ClearEventJournal(); ClearJournalCmd = 0; + JournalInit(); } } @@ -2418,7 +2569,7 @@ TDataDescStruct const CounterRunDesc = { *************************************/ CPU_INT08U const CounterMoneyName[] = "Деньги,руб."; CPU_INT08U const CounterCardName[] = "Банк,руб."; - +CPU_INT08U const CounterAbonementName[] = "Абонем.,руб."; TDataDescStruct const CounterMoneyDesc = { DATA_DESC_VIEW, // тип дескриптора @@ -2459,6 +2610,27 @@ TDataDescStruct const CounterCardDesc = { 0 }; +/************************************* + Общий счетчик абонемента +*************************************/ +TDataDescStruct const CounterAbonementDesc = { + DATA_DESC_VIEW, // тип дескриптора + DATA_TYPE_ULONG, // тип параметра + DATA_LOC_FRAM, // расположение параметра + DATA_NO_ARRAY, // признак массива + 0, // размер массива + NULL, // указатель на дескриптор индекса массива + (void*)offsetof(TFramMap, Counters.CounterAbonement), // указатель на переменную или адрес FRAM + NULL, // указатель на границы параметра + NULL, // функция по изменению + 0, // смещение между элементами в массиве + CounterAbonementName, // указатель на строку названия параметра + DATA_NO_INDEX, // признак индексного параметра (список строк) + NULL, // указатель на список строк для индексного параметра + DATA_INIT_DISABLE, + 0 +}; + /************************************* Общий счетчик времени работы *************************************/ @@ -2550,6 +2722,27 @@ TDataDescStruct const CounterLongCardDesc = { 0 }; +/************************************* + Общий счетчик абонемента ДЛИННЫЙ +*************************************/ +TDataDescStruct const CounterLongAbonementDesc = { + DATA_DESC_VIEW, // тип дескриптора + DATA_TYPE_ULONG, // тип параметра + DATA_LOC_FRAM, // расположение параметра + DATA_NO_ARRAY, // признак массива + 0, // размер массива + NULL, // указатель на дескриптор индекса массива + (void*)offsetof(TFramMap, CountersLong.CounterAbonementLong), // указатель на переменную или адрес FRAM + NULL, // указатель на границы параметра + NULL, // функция по изменению + 0, // смещение между элементами в массиве + CounterAbonementName, // указатель на строку названия параметра + DATA_NO_INDEX, // признак индексного параметра (список строк) + NULL, // указатель на список строк для индексного параметра + DATA_INIT_DISABLE, + 0 +}; + /************************************* Общий счетчик времени работы *************************************/ @@ -2634,6 +2827,27 @@ TDataDescStruct const CounterChannelCardDesc = { 0 }; +/************************************* + Канальный счетчик абонемента +*************************************/ +TDataDescStruct const CounterChannelAbonementDesc = { + DATA_DESC_VIEW, // тип дескриптора + DATA_TYPE_ULONG, // тип параметра + DATA_LOC_FRAM, // расположение параметра + DATA_IS_ARRAY, // признак массива + CHANNELS_NUM, // размер массива + &ChannelStIndexDesc, // указатель на дескриптор индекса массива + (void*)offsetof(TFramMap, Counters.CounterChannelAbonement[0]), // указатель на переменную или адрес FRAM + NULL, // указатель на границы параметра + NULL, // функция по изменению + sizeof(CPU_INT32U), // смещение между элементами в массиве + CounterCardName, // указатель на строку названия параметра + DATA_NO_INDEX, // признак индексного параметра (список строк) + NULL, // указатель на список строк для индексного параметра + DATA_INIT_DISABLE, + 0 +}; + /************************************* Канальный счетчик времени работы *************************************/ @@ -2719,6 +2933,27 @@ TDataDescStruct const CounterChannelCardLongDesc = { 0 }; +/************************************* + Канальный счетчик безнала +*************************************/ +TDataDescStruct const CounterChannelAbonementLongDesc = { + DATA_DESC_VIEW, // тип дескриптора + DATA_TYPE_ULONG, // тип параметра + DATA_LOC_FRAM, // расположение параметра + DATA_IS_ARRAY, // признак массива + CHANNELS_NUM, // размер массива + &ChannelStIndexDesc, // указатель на дескриптор индекса массива + (void*)offsetof(TFramMap, CountersLong.CounterChannelAbonementLong[0]), // указатель на переменную или адрес FRAM + NULL, // указатель на границы параметра + NULL, // функция по изменению + sizeof(CPU_INT32U), // смещение между элементами в массиве + CounterAbonementName, // указатель на строку названия параметра + DATA_NO_INDEX, // признак индексного параметра (список строк) + NULL, // указатель на список строк для индексного параметра + DATA_INIT_DISABLE, + 0 +}; + /************************************* Канальный счетчик времени работы *************************************/ @@ -4970,6 +5205,215 @@ TDataDescStruct const SolarCleaningTimeoutMinutesDesc = { }; char const SolarCleaningTimeoutMinutesDescId[] = "SolarCleaningTimeoutMinutesDesc"; +/************************************* + Индекс абонемента +*************************************/ +CPU_INT08U const AbonementIndexName[] = ""; +TRangeValueULONG const AbonementIndexHourRange = {0, 3}; +CPU_INT08U const AbonementIndexHour_str0[] = "СЕРЕБРЯННЫй"; +CPU_INT08U const AbonementIndexHour_str1[] = "ЗОЛОТОй"; +CPU_INT08U const AbonementIndexHour_str2[] = "ПЛАТИНОВЫй"; +CPU_INT08U const AbonementIndexHour_str3[] = "АЛМАЗНЫй"; +CPU_INT08U const *AbonementIndexHourList[] = {AbonementIndexHour_str0, AbonementIndexHour_str1, AbonementIndexHour_str2, AbonementIndexHour_str3}; + +CPU_INT32U abonement_index; + +TDataDescStruct const AbonementIndexDesc = { + DATA_DESC_EDIT, // тип дескриптора + DATA_TYPE_ULONG, // тип параметра + DATA_LOC_RAM, // расположение параметра + DATA_NO_ARRAY, // признак массива + 0, // размер массива + 0, // указатель на дескриптор индекса массива + &abonement_index, // указатель на переменную или адрес FRAM + (void*)&AbonementIndexHourRange, // указатель на границы параметра + NULL, // функция по изменению + 0, // смещение между элементами в массиве + AbonementIndexName, // указатель на строку названия параметра + DATA_IS_INDEX, // признак индексного параметра (список строк) + AbonementIndexHourList, // указатель на список строк для индексного параметра + DATA_INIT_ENABLE, + 0 +}; +char const AbonementIndexDescId[] = "AbonementIndexDesc"; + + +/************************************* + Деньги +*************************************/ +TRangeValueULONG const AbonementMoneyRange = {0, 99999}; +CPU_INT08U const AbonementMoneyName[] = "Деньги"; + +TDataDescStruct const AbonementMoneyDesc = { + DATA_DESC_EDIT, // тип дескриптора + DATA_TYPE_ULONG, // тип параметра + DATA_LOC_FRAM, // расположение параметра + DATA_IS_ARRAY, // признак массива + 4, // размер массива + &AbonementIndexDesc, // указатель на дескриптор индекса массива + (void*)offsetof(TFramMap, AbonementMoney), // указатель на переменную или адрес FRAM + (void*)&AbonementMoneyRange, // указатель на границы параметра + NULL, // функция по изменению + sizeof(CPU_INT32U), // смещение между элементами в массиве + AbonementMoneyName, // указатель на строку названия параметра + DATA_NO_INDEX, // признак индексного параметра (список строк) + NULL, // указатель на список строк для индексного параметра + DATA_INIT_DISABLE, + 3000 +}; + +/************************************* + Индекс абонемента +*************************************/ + +TRangeValueULONG const AbonementIndexRange = {0, 4}; +CPU_INT08U const AbonementIndex_str0[] = "СЕРЕБРЯННЫй"; +CPU_INT08U const AbonementIndex_str1[] = "ЗОЛОТОй"; +CPU_INT08U const AbonementIndex_str2[] = "ПЛАТИНОВЫй"; +CPU_INT08U const AbonementIndex_str3[] = "АЛМАЗНЫй"; +CPU_INT08U const AbonementIndex_str4[] = "ИТОГО"; +CPU_INT08U const *AbonementIndexList[] = {AbonementIndex_str0, AbonementIndex_str1, AbonementIndex_str2, AbonementIndex_str3, AbonementIndex_str4}; + +TDataDescStruct const AbonementCounterIndexDesc = { + DATA_DESC_EDIT, // тип дескриптора + DATA_TYPE_ULONG, // тип параметра + DATA_LOC_RAM, // расположение параметра + DATA_NO_ARRAY, // признак массива + 0, // размер массива + 0, // указатель на дескриптор индекса массива + &abonement_index, // указатель на переменную или адрес FRAM + (void*)&AbonementIndexRange, // указатель на границы параметра + NULL, // функция по изменению + 0, // смещение между элементами в массиве + AbonementIndexName, // указатель на строку названия параметра + DATA_IS_INDEX, // признак индексного параметра (список строк) + AbonementIndexList, // указатель на список строк для индексного параметра + DATA_INIT_ENABLE, + 0 +}; +char const AbonementCounterIndexDescId[] = "AbonementCounterIndexDesc"; + +/************************************* + Деньги +*************************************/ + +CPU_INT08U const AbonementMoneyAbonementName[] = "Оплачено,руб"; + +TDataDescStruct const CounterMoneyAbonementDesc = { + DATA_DESC_VIEW, // тип дескриптора + DATA_TYPE_ULONG, // тип параметра + DATA_LOC_FRAM, // расположение параметра + DATA_IS_ARRAY, // признак массива + 5, // размер массива + &AbonementCounterIndexDesc, // указатель на дескриптор индекса массива + (void*)offsetof(TFramMap, solar_counters.abonement[0].card_money), // указатель на переменную или адрес FRAM + NULL, // указатель на границы параметра + NULL, // функция по изменению + sizeof(AbonentCountersRecord), // смещение между элементами в массиве + AbonementMoneyAbonementName, // указатель на строку названия параметра + DATA_NO_INDEX, // признак индексного параметра (список строк) + NULL, // указатель на список строк для индексного параметра + DATA_INIT_DISABLE, + 0 +}; +char const CounterMoneyAbonementDescId[] = "CounterMoneyAbonementDesc"; + +/************************************* + Бонусы +*************************************/ + +CPU_INT08U const AbonementBonusName[] = "Бонусы"; + +TDataDescStruct const CounterBonusAbonementDesc = { + DATA_DESC_VIEW, // тип дескриптора + DATA_TYPE_ULONG, // тип параметра + DATA_LOC_FRAM, // расположение параметра + DATA_IS_ARRAY, // признак массива + 5, // размер массива + &AbonementCounterIndexDesc, // указатель на дескриптор индекса массива + (void*)offsetof(TFramMap, solar_counters.abonement[0].card_bonus), // указатель на переменную или адрес FRAM + NULL, // указатель на границы параметра + NULL, // функция по изменению + sizeof(AbonentCountersRecord), // смещение между элементами в массиве + AbonementBonusName, // указатель на строку названия параметра + DATA_NO_INDEX, // признак индексного параметра (список строк) + NULL, // указатель на список строк для индексного параметра + DATA_INIT_DISABLE, + 0 +}; +char const CounterBonusAbonementDescId[] = "CounterBonusAbonementDesc"; + +/************************************* + Количество запусков +*************************************/ + +CPU_INT08U const AbonementRunsName[] = "Кол-во"; + +TDataDescStruct const CounterRunsAbonementDesc = { + DATA_DESC_VIEW, // тип дескриптора + DATA_TYPE_ULONG, // тип параметра + DATA_LOC_FRAM, // расположение параметра + DATA_IS_ARRAY, // признак массива + 5, // размер массива + &AbonementCounterIndexDesc, // указатель на дескриптор индекса массива + (void*)offsetof(TFramMap, solar_counters.abonement[0].runs), // указатель на переменную или адрес FRAM + NULL, // указатель на границы параметра + NULL, // функция по изменению + sizeof(AbonentCountersRecord), // смещение между элементами в массиве + AbonementRunsName, // указатель на строку названия параметра + DATA_NO_INDEX, // признак индексного параметра (список строк) + NULL, // указатель на список строк для индексного параметра + DATA_INIT_DISABLE, + 0 +}; +char const CounterRunsAbonementDescId[] = "CounterRunsAbonementDesc"; + +/************************************* + Бонусы +*************************************/ +TRangeValueULONG const AbonementBonusRange = {0, 99999}; + +TDataDescStruct const AbonementBonusDesc = { + DATA_DESC_EDIT, // тип дескриптора + DATA_TYPE_ULONG, // тип параметра + DATA_LOC_FRAM, // расположение параметра + DATA_IS_ARRAY, // признак массива + 4, // размер массива + &AbonementIndexDesc, // указатель на дескриптор индекса массива + (void*)offsetof(TFramMap, AbonementBonus), // указатель на переменную или адрес FRAM + (void*)&AbonementBonusRange, // указатель на границы параметра + NULL, // функция по изменению + sizeof(CPU_INT32U), // смещение между элементами в массиве + AbonementBonusName, // указатель на строку названия параметра + DATA_NO_INDEX, // признак индексного параметра (список строк) + NULL, // указатель на список строк для индексного параметра + DATA_INIT_DISABLE, + 600 +}; + +/************************************* + Срок действия +*************************************/ +TRangeValueULONG const AbonementBestBeforeRange = {0, 1000}; +CPU_INT08U const AbonementBestBeforeName[] = "Срок дейст,дн."; + +TDataDescStruct const AbonementBestBeforeDesc = { + DATA_DESC_EDIT, // тип дескриптора + DATA_TYPE_ULONG, // тип параметра + DATA_LOC_FRAM, // расположение параметра + DATA_IS_ARRAY, // признак массива + 4, // размер массива + &AbonementIndexDesc, // указатель на дескриптор индекса массива + (void*)offsetof(TFramMap, AbonementBestBefore), // указатель на переменную или адрес FRAM + (void*)&AbonementBestBeforeRange, // указатель на границы параметра + NULL, // функция по изменению + sizeof(CPU_INT32U), // смещение между элементами в массиве + AbonementBestBeforeName, // указатель на строку названия параметра + DATA_NO_INDEX, // признак индексного параметра (список строк) + NULL, // указатель на список строк для индексного параметра + DATA_INIT_DISABLE, + 180 +}; /************************************* Индекс скидки по часам @@ -5899,6 +6343,54 @@ TDataDescStruct const CounterSolarMoneyDesc = { }; char const CounterSolarMoneyDescId[] = "CounterSolarMoneyDesc"; +/************************************* + Сумма с карт абонентов денег раздельно по соляриям и режимам +*************************************/ +CPU_INT08U const CounterSolarCardMoneyName[] = "К_Деньги,руб."; + +TDataDescStruct const CounterSolarCardMoneyDesc = { + DATA_DESC_VIEW, // тип дескриптора + DATA_TYPE_ULONG, // тип параметра + DATA_LOC_FRAM, // расположение параметра + DATA_IS_ARRAY, // признак массива + CHANNELS_NUM * SOLAR_MODES_COUNT, // размер массива + &SolariumModesDesc, // указатель на дескриптор индекса массива + (void*)offsetof(TFramMap, solar_counters.solar_chm[0].card_money), // указатель на переменную или адрес FRAM + NULL, // указатель на границы параметра + NULL, // функция по изменению + sizeof(SolarCountersRecord), // смещение между элементами в массиве + CounterSolarCardMoneyName, // указатель на строку названия параметра + DATA_NO_INDEX, // признак индексного параметра (список строк) + NULL, // указатель на список строк для индексного параметра + DATA_INIT_DISABLE, + 0 +}; +char const CounterSolarCardMoneyDescId[] = "CounterSolarCardMoneyDesc"; + +/************************************* + Сумма с карт абонентов бонусов раздельно по соляриям и режимам +*************************************/ +CPU_INT08U const CounterSolarCardBonusName[] = "К_Бонусы,руб."; + +TDataDescStruct const CounterSolarCardBonusDesc = { + DATA_DESC_VIEW, // тип дескриптора + DATA_TYPE_ULONG, // тип параметра + DATA_LOC_FRAM, // расположение параметра + DATA_IS_ARRAY, // признак массива + CHANNELS_NUM * SOLAR_MODES_COUNT, // размер массива + &SolariumModesDesc, // указатель на дескриптор индекса массива + (void*)offsetof(TFramMap, solar_counters.solar_chm[0].card_bonus), // указатель на переменную или адрес FRAM + NULL, // указатель на границы параметра + NULL, // функция по изменению + sizeof(SolarCountersRecord), // смещение между элементами в массиве + CounterSolarCardBonusName, // указатель на строку названия параметра + DATA_NO_INDEX, // признак индексного параметра (список строк) + NULL, // указатель на список строк для индексного параметра + DATA_INIT_DISABLE, + 0 +}; +char const CounterSolarCardBonusDescId[] = "CounterSolarCardBonusDesc"; + /************************************* Количество запусков раздельно по соляриям и режимам *************************************/ @@ -6019,6 +6511,54 @@ TDataDescStruct const CounterModeMoneyDesc = { }; char const CounterModeMoneyDescId[] = "CounterModeMoneyDesc"; +/************************************* + Сумма денег по режимам по абонементам +*************************************/ +CPU_INT08U const CounterModeCardMoneyName[] = "К_Деньги,руб."; + +TDataDescStruct const CounterModeCardMoneyDesc = { + DATA_DESC_VIEW, // тип дескриптора + DATA_TYPE_ULONG, // тип параметра + DATA_LOC_FRAM, // расположение параметра + DATA_IS_ARRAY, // признак массива + SOLAR_MODES_COUNT, // размер массива + &SolariumModeIndexDesc, // указатель на дескриптор индекса массива + (void*)offsetof(TFramMap, solar_counters.solar_m[0].card_money), // указатель на переменную или адрес FRAM + NULL, // указатель на границы параметра + NULL, // функция по изменению + sizeof(SolarCountersRecord), // смещение между элементами в массиве + CounterModeCardMoneyName, // указатель на строку названия параметра + DATA_NO_INDEX, // признак индексного параметра (список строк) + NULL, // указатель на список строк для индексного параметра + DATA_INIT_DISABLE, + 0 +}; +char const CounterModeCardMoneyDescId[] = "CounterModeCardMoneyDesc"; + +/************************************* + Сумма бонусов по режимам по абонементам +*************************************/ +CPU_INT08U const CounterModeCardBonusName[] = "К_Бонусы,руб."; + +TDataDescStruct const CounterModeCardBonusDesc = { + DATA_DESC_VIEW, // тип дескриптора + DATA_TYPE_ULONG, // тип параметра + DATA_LOC_FRAM, // расположение параметра + DATA_IS_ARRAY, // признак массива + SOLAR_MODES_COUNT, // размер массива + &SolariumModeIndexDesc, // указатель на дескриптор индекса массива + (void*)offsetof(TFramMap, solar_counters.solar_m[0].card_bonus), // указатель на переменную или адрес FRAM + NULL, // указатель на границы параметра + NULL, // функция по изменению + sizeof(SolarCountersRecord), // смещение между элементами в массиве + CounterModeCardBonusName, // указатель на строку названия параметра + DATA_NO_INDEX, // признак индексного параметра (список строк) + NULL, // указатель на список строк для индексного параметра + DATA_INIT_DISABLE, + 0 +}; +char const CounterModeCardBonusDescId[] = "CounterModeCardBonusDesc"; + /************************************* Количество запусков по режимам *************************************/ @@ -6380,6 +6920,30 @@ TDataDescStruct const CounterCardMoneyDesc = { }; char const CounterCardMoneyDescId[] = "CounterCardMoneyDesc"; +/************************************* + Cчетчик денег по абонементам +*************************************/ +CPU_INT08U const CounterAbonementMoneyName[] = "АБОНЕМ.,руб."; + +TDataDescStruct const CounterAbonementMoneyDesc = { + DATA_DESC_VIEW, // тип дескриптора + DATA_TYPE_ULONG, // тип параметра + DATA_LOC_FRAM, // расположение параметра + DATA_NO_ARRAY, // признак массива + 0, // размер массива + NULL, // указатель на дескриптор индекса массива + (void*)offsetof(TFramMap, solar_counters.abonement_money), // указатель на переменную или адрес FRAM + NULL, // указатель на границы параметра + NULL, // функция по изменению + 0, // смещение между элементами в массиве + CounterAbonementMoneyName, // указатель на строку названия параметра + DATA_NO_INDEX, // признак индексного параметра (список строк) + NULL, // указатель на список строк для индексного параметра + DATA_INIT_DISABLE, + 0 +}; +char const CounterAbonementMoneyDescId[] = "CounterAbonementMoneyDesc"; + /************************************* Включение общего доступа по паролю *************************************/ @@ -6640,7 +7204,7 @@ TDataDescStruct const FtpServerIpAddrDesc = { DATA_NO_INDEX, // признак индексного параметра (список строк) NULL, // указатель на список строк для индексного параметра DATA_INIT_DISABLE, - 0x5C35600A // "92.53.96.10" + 0x5C356065 // "92.53.96.101" }; char const FtpServerIpAddrDescId[] = "FtpServerIpAddrDesc"; @@ -6927,12 +7491,19 @@ char const KeyActionDescArrId[] = "KeyActionDesc"; char const MakeSverkaDescArrId[] = "MakeSverkaDesc"; char const MakeSyncDescArrId[] = "MakeSyncDesc"; char const CounterChannelCardDescArrId[] = "CounterChannelCardDesc"; +char const CounterChannelAbonementDescArrId[] = "CounterChannelAbonementDesc"; char const CounterCardDescArrId[] = "CounterCardDesc"; char const CounterChannelCardLongDescArrId[] = "CounterChannelCardLongDesc"; +char const CounterChannelAbonementLongDescArrId[] = "CounterChannelAbonementLongDesc"; char const CounterLongCardDescArrId[] = "CounterLongCardDesc"; +char const CounterLongAbonementDescArrId[] = "CounterLongAbonementDesc"; char const PostTimerDescArrId[] = "PostTimerDesc"; char const PostSignalDescArrId[] = "PostSignalDesc"; char const PostPauseLenCostDescId[] = "PostPauseLenCostDesc"; +char const AbonementMoneyDescId[] = "AbonementMoneyDesc"; +char const AbonementBonusDescId[] = "AbonementBonusDesc"; +char const AbonementBestBeforeDescId[] = "AbonementBestBeforeDesc"; +char const CountUseAbonementDescId[] = "CountUseAbonementDesc"; #if defined(BOARD_SOLARIUM_WEB) char const SolariumTypeDescId[] = "SolariumTypeDescId"; @@ -7029,7 +7600,10 @@ const TDataDescArrayStruct AllDataArray[] = {&CounterChannelCardDesc, CounterChannelCardDescArrId}, {&CounterCardDesc, CounterCardDescArrId}, {&CounterChannelCardLongDesc, CounterChannelCardLongDescArrId}, + {&CounterChannelAbonementLongDesc, CounterChannelAbonementLongDescArrId}, {&CounterLongCardDesc, CounterLongCardDescArrId}, + {&CounterChannelAbonementDesc, CounterChannelAbonementDescArrId}, + {&CounterLongAbonementDesc, CounterLongAbonementDescArrId}, #if defined(BOARD_SOLARIUM_WEB) {&SolariumTypeDesc, SolariumTypeDescId}, @@ -7167,6 +7741,11 @@ const TDataDescArrayStruct AllDataArray[] = {&CoinPauseLenDesc, CoinPauseLenDescId}, {&CoinPulseDeltaDesc, CoinPulseDeltaDescId}, + {&AbonementMoneyDesc, AbonementMoneyDescId}, + {&AbonementBonusDesc, AbonementBonusDescId}, + {&AbonementBestBeforeDesc, AbonementBestBeforeDescId}, + {&CountUseAbonementDesc, CountUseAbonementDescId}, + {NULL, NULL} }; diff --git a/PROJECT/data/datadesc.h b/PROJECT/data/datadesc.h index 2c74952..266a7ee 100644 --- a/PROJECT/data/datadesc.h +++ b/PROJECT/data/datadesc.h @@ -23,35 +23,35 @@ #define MONEY_KEY_COUNT 8 -// структура конфигурации каналов +// пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅ typedef struct{ - // включение канала + // пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ CPU_INT32U Enable[CHANNELS_NUM]; - // тайм-аут перед включением, сек. + // пїЅпїЅпїЅпїЅ-пїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ, пїЅпїЅпїЅ. CPU_INT32U TimeOutBefore[CHANNELS_NUM]; - // тайм-аут после выключения, мин. + // пїЅпїЅпїЅпїЅ-пїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ, пїЅпїЅпїЅ. CPU_INT32U TimeOutAfter[CHANNELS_NUM]; - // максимальное время работы, мин. + // пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ, пїЅпїЅпїЅ. CPU_INT32U MaxWorkTime[CHANNELS_NUM]; - // минимальное время работы, мин. + // пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ, пїЅпїЅпїЅ. CPU_INT32U MinWorkTime[CHANNELS_NUM]; - // настройка уикенда, индекс + // пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅ, пїЅпїЅпїЅпїЅпїЅпїЅ CPU_INT32U WeekEnd[CHANNELS_NUM]; #define WEEKEND_NO 0 #define WEEKEND_FRIDAY_SUNDAY 1 #define WEEKEND_SATURDAY_SUNDAY 2 #define WEEKEND_FRIDAY_SATURDAY 3 #define WEEKEND_FRIDAY_MONDAY 4 - // название канала + // пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ CPU_INT32U Name[CHANNELS_NUM]; - // периоды + // пїЅпїЅпїЅпїЅпїЅпїЅпїЅ #define PRICE_PERIODS_NUM 4 CPU_INT32U T_Start_Weekdays[CHANNELS_NUM][PRICE_PERIODS_NUM]; CPU_INT32U T_End_Weekdays[CHANNELS_NUM][PRICE_PERIODS_NUM]; CPU_INT32U T_Start_Weekend[CHANNELS_NUM][PRICE_PERIODS_NUM]; CPU_INT32U T_End_Weekend[CHANNELS_NUM][PRICE_PERIODS_NUM]; - // цены + // пїЅпїЅпїЅпїЅ CPU_INT32U Price_Weekdays[CHANNELS_NUM][PRICE_PERIODS_NUM]; CPU_INT32U Price_Weekend[CHANNELS_NUM][PRICE_PERIODS_NUM]; CPU_INT32U PriceTime_Weekdays[CHANNELS_NUM][PRICE_PERIODS_NUM]; @@ -72,19 +72,21 @@ typedef struct{ -// структура конфигурации аппаратуры +// пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ typedef struct{ CPU_INT32U EnableValidator; CPU_INT32U EnableCoinAcceptor; + CPU_INT32U EnableAbonementAcceptor; + CPU_INT32U CountUseAbonement; CPU_INT32U EnableModem; CPU_INT32U EnableFiscal; CPU_INT32U EnableFiscalDayClear; CPU_INT32U ServiceName; - CPU_INT32U CoinPerPulse; // цена импульса монетоприемника + CPU_INT32U CoinPerPulse; // пїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ CPU_INT32U BillFormat; - CPU_INT32U DisableFiscalErrors; // отключение реакции на ошибки ФР + CPU_INT32U DisableFiscalErrors; // пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅ CPU_INT32U EnableEmailErrorSend; CPU_INT32U EnableEmailStatSend; @@ -140,6 +142,10 @@ extern TDataDescStruct const T_End_WeekendDesc; extern TDataDescStruct const EnableFiscalDesc; extern TDataDescStruct const EnableCoinDesc; +extern TDataDescStruct const EnableAbonementDesc; +extern TDataDescStruct const CountUseAbonementDesc; +extern TDataDescStruct const ClearStatAbonementCmdDesc; +extern TDataDescStruct const AbonementCounterIndexDesc; extern TDataDescStruct const EnableModemDesc; extern TDataDescStruct const EnableValidatorDesc; extern TDataDescStruct const CoinPerPulseDesc; @@ -170,6 +176,7 @@ extern TDataDescStruct const CounterMoneyDesc; extern TDataDescStruct const CounterTimeDesc; extern TDataDescStruct const CounterChannelRunDesc; extern TDataDescStruct const CounterChannelMoneyDesc; +extern TDataDescStruct const CounterChannelAbonementDesc; extern TDataDescStruct const CounterChannelTimeDesc; extern TDataDescStruct const ChannelStIndexDesc; extern TDataDescStruct const ClearStatCmdDesc; @@ -235,8 +242,11 @@ extern TDataDescStruct const MakeSyncDesc; extern TDataDescStruct const CounterChannelCardDesc; extern TDataDescStruct const CounterCardDesc; +extern TDataDescStruct const CounterAbonementDesc; extern TDataDescStruct const CounterChannelCardLongDesc; +extern TDataDescStruct const CounterChannelAbonementLongDesc; extern TDataDescStruct const CounterLongCardDesc; +extern TDataDescStruct const CounterLongAbonementDesc; extern int ReadPrecheckText(char *buf, int i); extern void OnChangeInitByDefault(void); @@ -308,10 +318,14 @@ extern TDataDescStruct const SolariumTimePayedCrc16Desc; extern TDataDescStruct const SolarTimeoutAfterMinutesDesc; extern TDataDescStruct const SolarControlChannelDesc; extern TDataDescStruct const CounterSolarMoneyDesc; +extern TDataDescStruct const CounterSolarCardMoneyDesc; +extern TDataDescStruct const CounterSolarCardBonusDesc; extern TDataDescStruct const CounterSolarRunsDesc; extern TDataDescStruct const CounterSolarWorkTimeDesc; extern TDataDescStruct const SolariumModeIndexDesc; extern TDataDescStruct const CounterModeMoneyDesc; +extern TDataDescStruct const CounterModeCardMoneyDesc; +extern TDataDescStruct const CounterModeCardBonusDesc; extern TDataDescStruct const CounterModeRunsDesc; extern TDataDescStruct const CounterModeWorkTimeDesc; extern TDataDescStruct const CounterCollatenTimeDesc; @@ -319,6 +333,7 @@ extern TDataDescStruct const CounterUFTimeDesc; extern TDataDescStruct const CounterCommonMoneyDesc; extern TDataDescStruct const CounterCashMoneyDesc; extern TDataDescStruct const CounterCardMoneyDesc; +extern TDataDescStruct const CounterAbonementMoneyDesc; extern TDataDescStruct const SolarCurrentPricePerMinuteDesc; extern TDataDescStruct const SolarCurrentPricePerMinuteForViewDesc; extern TDataDescStruct const ScoreColumnDesc; @@ -358,11 +373,19 @@ extern TDataDescStruct const CounterAllTestTimeDesc; extern TDataDescStruct const CounterAllTestCountDesc; extern TDataDescStruct const CounterTestMeanTimeDesc; extern TDataDescStruct const SolarCleaningTimeoutMinutesDesc; +extern TDataDescStruct const AbonementIndexDesc; +extern TDataDescStruct const AbonementMoneyDesc; +extern TDataDescStruct const AbonementBonusDesc; +extern TDataDescStruct const AbonementBestBeforeDesc; +extern TDataDescStruct const CounterMoneyAbonementDesc; +extern TDataDescStruct const CounterBonusAbonementDesc; +extern TDataDescStruct const CounterRunsAbonementDesc; extern void CheckVladPasswords(void); extern CPU_INT32U solar_modes_index; extern CPU_INT32U discount_index; +extern CPU_INT32U abonement_index; extern CPU_INT32U current_discount; extern CPU_INT32U score_cmd; extern CPU_INT32U relay_cmd; diff --git a/PROJECT/data/fram_map.h b/PROJECT/data/fram_map.h index 3b47e4a..015f044 100644 --- a/PROJECT/data/fram_map.h +++ b/PROJECT/data/fram_map.h @@ -26,9 +26,6 @@ typedef struct CPU_INT32U FRAM_AcceptedMoney; CPU_INT32U crc_AcceptedMoney; - - // журнал событий+ошибок - TEventRecord EventRecords[EVENT_RECORDS_COUNT]; CPU_INT32U Pass; CPU_INT32U crc_Pass; @@ -112,6 +109,10 @@ typedef struct CPU_INT32U SkinUFMaxTime[4]; CPU_INT32U SkinMaximalMaxTime[4]; + CPU_INT32U AbonementMoney[4]; + CPU_INT32U AbonementBonus[4]; + CPU_INT32U AbonementBestBefore[4]; + #endif #if defined(CONFIG_RELAY_ENABLE) @@ -163,5 +164,8 @@ typedef struct CPU_INT32U SolarControlChannels[CHANNELS_NUM]; #endif + // журнал событий+ошибок + TEventRecord EventRecords[EVENT_RECORDS_COUNT]; + }TFramMap; diff --git a/PROJECT/drivers/fram/spi.c b/PROJECT/drivers/fram/spi.c index 1a9db77..a830d02 100644 --- a/PROJECT/drivers/fram/spi.c +++ b/PROJECT/drivers/fram/spi.c @@ -3,6 +3,7 @@ #include #include "cpu.h" #include "spi.h" +#include OS_EVENT *SpiLock = NULL; @@ -15,6 +16,14 @@ unsigned char SpiExchange(unsigned char spi, unsigned char ch) return SSP0DR; } +void us_delay_spi(unsigned long x) +{ + while (x--) + { + for (int i=0; i<10; i++) __no_operation(); + } +} + void SpiInit(void) { // on spi power @@ -25,19 +34,28 @@ void SpiInit(void) // pin select PINSEL0_bit.P0_15 = 0x2; + PINSEL1_bit.P0_16 = 0x0; // FRAM CS + PINSEL4_bit.P2_10 = 0x0; // MFRC522 CS + PINSEL1_bit.P0_17 = 0x2; PINSEL1_bit.P0_18 = 0x2; PINMODE0_bit.P0_15 = 2; - PINMODE1_bit.P0_16 = 0; + PINMODE1_bit.P0_16 = 0; // FRAM CS + PINMODE4_bit.P2_10 = 0; // MFRC522 CS PINMODE1_bit.P0_17 = 2; PINMODE1_bit.P0_18 = 2; - // Chip select + // Chip select FRAM FIO0MASK_bit.P0_16 = 0; FIO0DIR_bit.P0_16 = 1; FIO0SET_bit.P0_16 = 1; + + // Chip select MFRC522 + FIO2MASK_bit.P2_10 = 0; + FIO2DIR_bit.P2_10 = 1; + FIO2SET_bit.P2_10 = 1; FIO0MASK_bit.P0_15 = 1; FIO0MASK_bit.P0_17 = 1; @@ -59,15 +77,34 @@ void SpiInit(void) SSP0IMSC = 0; SSP0DMACR = 0; + PINSEL1_bit.P0_26 = 0x0; + PINMODE1_bit.P0_26 = 0; + FIO0MASK_bit.P0_26 = 0; + FIO0DIR_bit.P0_26 = 1; + FIO0SET_bit.P0_26 = 1; + if (!SpiLock) SpiLock = OSSemCreate(1); } +void mfr_reset_up() +{ + FIO0SET_bit.P0_26 = 1; +} + +void mfr_reset_down() +{ + FIO0CLR_bit.P0_26 = 1; +} unsigned char spi_selectChip(unsigned char spi) { if (spi == FM25_SPI){ FIO0CLR_bit.P0_16 = 1; } + else if (spi == MFRC522_SPI){ + FIO2CLR_bit.P2_10 = 1; + } + return 0; } @@ -76,6 +113,10 @@ unsigned char spi_unselectChip(unsigned char spi) if (spi == FM25_SPI){ FIO0SET_bit.P0_16 = 1; } + else if (spi == MFRC522_SPI){ + FIO2SET_bit.P2_10 = 1; + } + return 0; } diff --git a/PROJECT/drivers/fram/spi.h b/PROJECT/drivers/fram/spi.h index 12881ad..5d0cff1 100644 --- a/PROJECT/drivers/fram/spi.h +++ b/PROJECT/drivers/fram/spi.h @@ -2,7 +2,8 @@ #define __SPI_H__ // номер spi для fram -#define FM25_SPI 0 +#define FM25_SPI 0 +#define MFRC522_SPI 1 extern unsigned char spi_unselectChip(unsigned char spi); extern unsigned char spi_selectChip(unsigned char spi); @@ -11,5 +12,8 @@ extern unsigned char SpiExchange(unsigned char spi, unsigned char ch); extern void spi_getSem(); extern void spi_freeSem(); +extern void mfr_reset_up(); +extern void mfr_reset_down(); +extern void us_delay_spi(unsigned long x); #endif //#ifndef __SPI_H__ \ No newline at end of file diff --git a/PROJECT/drivers/mfrc522/mfrc522data.c b/PROJECT/drivers/mfrc522/mfrc522data.c new file mode 100644 index 0000000..88b4d8c --- /dev/null +++ b/PROJECT/drivers/mfrc522/mfrc522data.c @@ -0,0 +1,337 @@ +#include "mfrc522data.h" +#include + +#include "rfid-spi.h" +#include "time.h" +#include "CRC16.h" +#include "datadesc.h" + +// данные считанные с карты +mifaredata_t mifare_card_data; +// валидные данные абонемента +abonement_data abonement; + +#define START_BLOCK 12 +#define NR_KNOWN_KEYS 2 + +uint8_t knownKeys[NR_KNOWN_KEYS][MF_KEY_SIZE] = { + {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, // FF FF FF FF FF FF = factory default + {0xa5, 0xaa, 0xa5, 0xa5, 0xaa, 0xaa}, // A5 AA A5 A5 AA AA +}; + +mifaredata_t* get_mifare_data() +{ + return &mifare_card_data; +} + +void set_mifare_data(mifaredata_t* data) +{ + memcpy(&mifare_card_data, &data, sizeof(mifaredata_t)); +} + +abonement_data* get_abonement_data() +{ + return &abonement; +} + +void set_abonement_data(abonement_data* data) +{ + memcpy(&abonement, &data, sizeof(abonement_data)); +} + +uint32_t get_mifare_uid() +{ + uint32_t card_uid = 0; + uid_struct * uid = get_uid(); + + if(uid->size == 4) + { + memcpy(&card_uid, &uid->uidByte[0], 4); + } + + return card_uid; +} + +/** + * Calculates the bit pattern needed for the specified access bits. In the [C1 C2 C3] tuples C1 is MSB (=4) and C3 is LSB (=1). + */ +void MIFARE_SetAccessBits( uint8_t *accessBitBuffer, ///< Pointer to byte 6, 7 and 8 in the sector trailer. Bytes [0..2] will be set. + uint8_t g0, ///< Access bits [C1 C2 C3] for block 0 (for sectors 0-31) or blocks 0-4 (for sectors 32-39) + uint8_t g1, ///< Access bits C1 C2 C3] for block 1 (for sectors 0-31) or blocks 5-9 (for sectors 32-39) + uint8_t g2, ///< Access bits C1 C2 C3] for block 2 (for sectors 0-31) or blocks 10-14 (for sectors 32-39) + uint8_t g3 ///< Access bits C1 C2 C3] for the sector trailer, block 3 (for sectors 0-31) or block 15 (for sectors 32-39) + ) { + uint8_t c1 = ((g3 & 4) << 1) | ((g2 & 4) << 0) | ((g1 & 4) >> 1) | ((g0 & 4) >> 2); + uint8_t c2 = ((g3 & 2) << 2) | ((g2 & 2) << 1) | ((g1 & 2) << 0) | ((g0 & 2) >> 1); + uint8_t c3 = ((g3 & 1) << 3) | ((g2 & 1) << 2) | ((g1 & 1) << 1) | ((g0 & 1) << 0); + + accessBitBuffer[0] = (~c2 & 0xF) << 4 | (~c1 & 0xF); + accessBitBuffer[1] = c1 << 4 | (~c3 & 0xF); + accessBitBuffer[2] = c3 << 4 | c2; +} // End MIFARE_SetAccessBits() + +bool try_key_a(MIFARE_Key *key) +{ + bool result = false; + uint8_t buffer[18]; + uint8_t block = START_BLOCK + 3; + status_code status; + + status = pcd_authenticate(PICC_CMD_MF_AUTH_KEY_A, block, key, get_uid()); + if (status != STATUS_OK) { + return false; + } + + // Read block + uint8_t byteCount = sizeof(buffer); + status = mifare_read(block, buffer, &byteCount); + if (status != STATUS_OK) { + + } + else { + // Successful read + result = true; + } + + return result; +} + +bool try_key_b(MIFARE_Key *key) +{ + bool result = false; + uint8_t buffer[18]; + uint8_t block = START_BLOCK + 3; + status_code status; + + status = pcd_authenticate(PICC_CMD_MF_AUTH_KEY_B, block, key, get_uid()); + if (status != STATUS_OK) { + return false; + } + + // Read block + uint8_t byteCount = sizeof(buffer); + status = mifare_read(block, buffer, &byteCount); + if (status != STATUS_OK) { + + } + else { + // Successful read + result = true; + } + + return result; +} + +mifaredata_t* read_mifare_card() +{ + status_code status; + uint8_t block = START_BLOCK; + uint8_t len = 18; + uint8_t buffer[18]; + uint8_t count = 0; + + MIFARE_Key key; + for (uint8_t k = 0; k < NR_KNOWN_KEYS; k++) { + for (uint8_t i = 0; i < MF_KEY_SIZE; i++) { + key.keyByte[i] = knownKeys[k][i]; + } + + if (try_key_a(&key)) { + break; + } + count++; + + picc_is_new_card_present(); + picc_read_card_serial(); + } + + if(count == NR_KNOWN_KEYS) { + stop_card_working(); + return NULL; + } + + for(uint8_t i = 0; i < sizeof(mifare_card_data); i += 16) + { + status = pcd_authenticate(PICC_CMD_MF_AUTH_KEY_A, block, &key, get_uid()); + if (status != STATUS_OK) { + return NULL; + } + + status = mifare_read(block, buffer, &len); + if (status != STATUS_OK) { + return NULL; + } + + block++; + + for (uint8_t j = 0; j < 16; j++) { + ((uint8_t *)&mifare_card_data)[i + j] = buffer[j]; + } + + if(block%4 == 3) block++; + } + + CPU_INT32U crc1; + crc1 = crc16((unsigned char*)&mifare_card_data.abonement_data_copy1.init, sizeof(abonement_data) - sizeof(CPU_INT32U)); + + if(crc1 == mifare_card_data.abonement_data_copy1.crc) + { + memcpy(&abonement, &mifare_card_data.abonement_data_copy1.init, sizeof(abonement_data)); + } + else + { + CPU_INT32U crc2 = crc16((unsigned char*)&mifare_card_data.abonement_data_copy2.init, sizeof(abonement_data) - sizeof(CPU_INT32U)); + if(crc2 == mifare_card_data.abonement_data_copy2.crc) + { + memcpy(&abonement, &mifare_card_data.abonement_data_copy2.init, sizeof(abonement_data)); + } + else + { + for(uint8_t i = 0; i < sizeof(abonement_data); i++) + { + ((uint8_t *)&abonement)[i] = 0x00; + } + } + } + + return &mifare_card_data; +} + +bool write_mifare_card() +{ + status_code status; + uint8_t block = START_BLOCK; + uint8_t count = 0; + + uint8_t trailerBuffer[] = { + 255, 255, 255, 255, 255, 255, // Keep default key A + 0, 0, 0, + 0, + 255, 255, 255, 255, 255, 255}; // Keep default key B + + for (uint8_t i = 0; i < MF_KEY_SIZE; i++){ + trailerBuffer[i] = knownKeys[1][i]; + trailerBuffer[i + 10] = knownKeys[1][i]; + } + MIFARE_SetAccessBits(&trailerBuffer[6], 4, 4, 4, 1); + + MIFARE_Key key; + for (uint8_t k = 0; k < NR_KNOWN_KEYS; k++) { + for (uint8_t i = 0; i < MF_KEY_SIZE; i++) { + key.keyByte[i] = knownKeys[k][i]; + } + + if (try_key_b(&key)) { + break; + } + + picc_is_new_card_present(); + picc_read_card_serial(); + + count++; + } + + if(count == NR_KNOWN_KEYS) { + stop_card_working(); + return false; + } + + CPU_INT32U crc; + + memcpy(&mifare_card_data.abonement_data_copy1.init, &abonement, sizeof(abonement_data) - sizeof(CPU_INT32U)); + crc = crc16((unsigned char*)&mifare_card_data.abonement_data_copy1.init, sizeof(abonement_data) - sizeof(CPU_INT32U)); + mifare_card_data.abonement_data_copy1.crc = crc; + + memcpy(&mifare_card_data.abonement_data_copy2.init, &abonement, sizeof(abonement_data) - sizeof(CPU_INT32U)); + crc = crc16((unsigned char*)&mifare_card_data.abonement_data_copy2.init, sizeof(abonement_data) - sizeof(CPU_INT32U)); + mifare_card_data.abonement_data_copy2.crc = crc; + + for(uint8_t i = 0; i < sizeof(mifare_card_data); i += 16) + { + status = pcd_authenticate(PICC_CMD_MF_AUTH_KEY_B, block, &key, get_uid()); + if (status != STATUS_OK) { + return false; + } + + status = mifare_write(block, &(((uint8_t *)&mifare_card_data)[i]), 16); + if (status != STATUS_OK) { + return false; + } + + block++; + + if(block%4 == 3) { + // write security + status = pcd_authenticate(PICC_CMD_MF_AUTH_KEY_B, block, &key, get_uid()); + if (status != STATUS_OK) { + return false; + } + status = mifare_write(block, &trailerBuffer[0], 16); + if (status != STATUS_OK) { + return false; + } + block++; + } + } + + return true; +} + +void stop_card_working() +{ + picc_halt_a(); + pcd_stop_cryptol(); +} + +mifaredata_t* init_mifare_card_data() +{ + for(uint8_t i = 0; i < sizeof(mifaredata_t); i++) + { + ((uint8_t *)&mifare_card_data)[i] = 0x00; + } + + for(uint8_t i = 0; i < sizeof(abonement_data); i++) + { + ((uint8_t *)&abonement)[i] = 0x00; + } + + abonement.init = 0xDEADBEEF; + + CPU_INT32U password; + GetData(&PassDescAdmin, &password, 0, DATA_FLAG_SYSTEM_INDEX); + abonement.uid[0] = password; + abonement.number_abonement = get_mifare_uid(); + + return &mifare_card_data; +} + +bool is_empty_mifare_card() +{ + bool empty = false; + + CPU_INT32U crc1, crc2; + crc1 = crc16((unsigned char*)&mifare_card_data.abonement_data_copy1.init, sizeof(abonement_data) - sizeof(CPU_INT32U)); + crc2 = crc16((unsigned char*)&mifare_card_data.abonement_data_copy2.init, sizeof(abonement_data) - sizeof(CPU_INT32U)); + + if((mifare_card_data.abonement_data_copy1.init != 0xDEADBEEF || crc1 != mifare_card_data.abonement_data_copy1.crc) + && (mifare_card_data.abonement_data_copy2.init != 0xDEADBEEF || crc2 != mifare_card_data.abonement_data_copy2.crc) + ) + { + empty = true; + } + + return empty; +} + +bool need_clear_bonus() +{ + uint32_t SystemTime = GetTimeSec(); + + if(SystemTime > abonement.best_before) + { + abonement.bonus = 0; + return true; + } + + return false; +} diff --git a/PROJECT/drivers/mfrc522/mfrc522data.h b/PROJECT/drivers/mfrc522/mfrc522data.h new file mode 100644 index 0000000..b4feaef --- /dev/null +++ b/PROJECT/drivers/mfrc522/mfrc522data.h @@ -0,0 +1,65 @@ +#ifndef _RFID_DATA_H_ +#define _RFID_DATA_H_ + +#include +#include + +/// @brief Расшифровка дополнительных полей +typedef struct { + /// @brief Пароль карты + uint32_t password; + /// @brief Дата последнего использования + uint32_t time_use; + /// @brief Количество использований в один день + uint32_t count_use; + + uint32_t reserv1; + uint32_t reserv2; +} external_fields; + +typedef struct { + uint32_t init; // 4 - обязательно должна быть в начале + + union { + uint32_t uid[5]; // 20 + external_fields fileds; + }; + + uint32_t money; // 4 + uint32_t bonus; // 4 + uint32_t type_abonement; // 4 + uint32_t number_abonement; // 4 + uint32_t best_before; // 4 + uint32_t crc; // 4 + +} abonement_data; // 48 + +typedef struct { + abonement_data abonement_data_copy1; // 48 + abonement_data abonement_data_copy2; // 48 + +} mifaredata_t; // 96 + +extern mifaredata_t* get_mifare_data(); +extern void set_mifare_data(mifaredata_t* data); + +/// @brief Установка данных абонемента +/// @param data +extern void set_abonement_data(abonement_data* data); + +/// @brief Данные абонемента, получение +/// @return +extern abonement_data* get_abonement_data(); + +extern mifaredata_t* read_mifare_card(); +extern bool write_mifare_card(); +extern mifaredata_t* init_mifare_card_data(); +extern bool is_empty_mifare_card(); +extern bool need_clear_bonus(); +extern void stop_card_working(); + +/// @brief +/// @return +uint32_t get_mifare_uid(); + +#endif \ No newline at end of file diff --git a/PROJECT/drivers/mfrc522/rfid-spi.c b/PROJECT/drivers/mfrc522/rfid-spi.c new file mode 100644 index 0000000..72b37b1 --- /dev/null +++ b/PROJECT/drivers/mfrc522/rfid-spi.c @@ -0,0 +1,955 @@ +#include "rfid-spi.h" + +uid_struct uid; // Used by picc_read_card_serial(). + +uid_struct * get_uid() +{ + return &uid; +} + +/** + * Writes a number of bytes to the specified register in the MFRC522 chip. + * The interface is described in the datasheet section 8.1.2. + */ +void +write_bytes_mfrc522( pcd_register reg, uint8_t count, uint8_t *values) +{ + spi_getSem(); + spi_selectChip(MFRC522_SPI); + + SpiExchange(MFRC522_SPI, (reg << 1) & 0x7e); + uint8_t index; + for (index = 0; index < count; index++) + { + SpiExchange(MFRC522_SPI, values[index]); + } + + spi_unselectChip(MFRC522_SPI); + spi_freeSem(); +} // End PCD_WriteRegister() + +/** + * Writes a byte to the specified register in the MFRC522 chip. + * The interface is described in the datasheet section 8.1.2. + */ +void +write_mfrc522(uint8_t adr, uint8_t val) +{ + spi_getSem(); + spi_selectChip(MFRC522_SPI); + + SpiExchange(MFRC522_SPI, (adr << 1) & 0x7e); + SpiExchange(MFRC522_SPI, val); + + spi_unselectChip(MFRC522_SPI); + spi_freeSem(); +} + +/** + * Reads a byte from the specified register in the MFRC522 chip. + * The interface is described in the datasheet section 8.1.2. + */ +uint8_t +read_mfrc522(uint8_t dev_cmd) +{ + uint8_t ret = 0x0; + spi_getSem(); + spi_selectChip(MFRC522_SPI); + + SpiExchange(MFRC522_SPI, ((dev_cmd << 1) & 0x7e) | 0x80); + ret = SpiExchange(MFRC522_SPI, 0x00); + + spi_unselectChip(MFRC522_SPI); + spi_freeSem(); + return ret; +} + +/** + * Reads a number of bytes from the specified register in the MFRC522 chip. + * The interface is described in the datasheet section 8.1.2. + */ +void read_fifo_mfrc522( pcd_register reg, uint8_t count, uint8_t *values, uint8_t rx_align) +{ + if (count == 0) + { + return; + } + //Serial.print(F("Reading ")); Serial.print(count); Serial.println(F(" bytes from register.")); + uint8_t index = 0; // Index in values array. + uint8_t ret = 0; + uint8_t address = ((reg << 1) & 0x7e) | 0x80; + + spi_getSem(); + spi_selectChip(MFRC522_SPI); + + count--; // One read is performed outside of the loop + SpiExchange(MFRC522_SPI, address); + + if (rx_align) { // Only update bit positions rx_align..7 in values[0] + // Create bit mask for bit positions rx_align..7 + uint8_t mask = (0xFF << rx_align) & 0xFF; + // Read value and tell that we want to read the same address again. + uint8_t value; + ret = SpiExchange(MFRC522_SPI, address); + value=ret; + // Apply mask to both current value of values[0] and the new data in value. + values[0] = (values[0] & ~mask) | (value & mask); + index++; + } + + while (index < count) { + ret = SpiExchange(MFRC522_SPI, address); + values[index] = ret; // Read value and tell that we want to read the same address again. + index++; + } + + ret = SpiExchange(MFRC522_SPI, 0); + values[index] = ret; // Read value and tell that we want to read the same address again. + + spi_unselectChip(MFRC522_SPI); // Release slave again + spi_freeSem(); +} // End PCD_ReadRegister() + +/** + * Translates the SAK (Select Acknowledge) to a PICC type. + * + * @return PICC_Type + */ +picc_type +picc_get_type(uint8_t sak) +{ + // http://www.nxp.com/documents/application_note/AN10833.pdf + // 3.2 Coding of Select Acknowledge (SAK) + // ignore 8-bit (iso14443 starts with LSBit = bit 1) + // fixes wrong type for manufacturer Infineon (http://nfc-tools.org/index.php?title=ISO14443A) + sak &= 0x7F; + switch (sak) + { + case 0x04: return PICC_TYPE_NOT_COMPLETE; // uid_struct not complete + case 0x09: return PICC_TYPE_MIFARE_MINI; + case 0x08: return PICC_TYPE_MIFARE_1K; + case 0x18: return PICC_TYPE_MIFARE_4K; + case 0x00: return PICC_TYPE_MIFARE_UL; + case 0x10: + case 0x11: return PICC_TYPE_MIFARE_PLUS; + case 0x01: return PICC_TYPE_TNP3XXX; + case 0x20: return PICC_TYPE_ISO_14443_4; + case 0x40: return PICC_TYPE_ISO_18092; + default: return PICC_TYPE_UNKNOWN; + } +} // End picc_get_type() + + +/** + * Sets the bits given in mask in register reg. + */ +void +pcd_set_register_bit_mask(pcd_register reg, uint8_t mask) +{ + uint8_t tmp; + tmp = read_mfrc522(reg); + write_mfrc522(reg, tmp | mask); // set bit mask +} // End pcd_set_register_bit_mask() + + +/** + * Use the CRC coprocessor in the MFRC522 to calculate a CRC_A. + * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +status_code +pcd_calculate_crc(uint8_t *data, uint8_t length, uint8_t *result) +{ + write_mfrc522(CommandReg, PCD_Idle); // Stop any active command. + write_mfrc522(DivIrqReg, 0x04); // Clear the CRCIRq interrupt request bit + write_mfrc522(FIFOLevelReg, 0x80); // FlushBuffer = 1, FIFO initialization + write_bytes_mfrc522(FIFODataReg, length, data); // Write data to the FIFO + write_mfrc522(CommandReg, PCD_CalcCRC); // Start the calculation + + // Wait for the CRC calculation to complete. Each iteration of the while-loop takes 17.73Ојs. + // TODO check/modify for other architectures than Arduino Uno 16bit + // Wait for the CRC calculation to complete. Each iteration of the while-loop takes 17.73us. + uint16_t i; + for ( i = 89; i > 0; i--) + { + // DivIrqReg[7..0] bits are: Set2 reserved reserved MfinActIRq reserved CRCIRq reserved reserved + uint8_t n = read_mfrc522(DivIrqReg); + if (n & 0x04) + { // CRCIRq bit set - calculation done + write_mfrc522(CommandReg, PCD_Idle); // Stop calculating CRC for new content in the FIFO. + // Transfer the result from the registers to the result buffer + result[0] = read_mfrc522(CRCResultRegL); + result[1] = read_mfrc522(CRCResultRegH); + return STATUS_OK; + } + + OSTimeDly(1); + } + // 89ms passed and nothing happend. Communication with the MFRC522 might be down. + //printf("89ms passed and nothing happend.\n"); + return STATUS_TIMEOUT; +} // End pcd_calculate_crc() + + +/** + * Performs a soft reset on the MFRC522 chip and waits for it to be ready again. + */ +void +pcd_reset() +{ + write_mfrc522(CommandReg, PCD_SoftReset); // Issue the SoftReset command. + // The datasheet does not mention how long the SoftRest command takes to complete. + // But the MFRC522 might have been in soft power-down mode (triggered by bit 4 of CommandReg) + // Section 8.8.2 in the datasheet says the oscillator start-up time is the start up time of the crystal + 37,74Ојs. Let us be generous: 50ms. + + //BUSYWAIT_UNTIL_ABS(RTIMER_NOW(), US_TO_RTIMERTICKS(1000)); + // Wait for the PowerDown bit in CommandReg to be cleared + uint8_t count = 0; + do { + // Wait for the PowerDown bit in CommandReg to be cleared (max 3x50ms) + us_delay_spi(50000); + } while ((read_mfrc522(CommandReg) & (1 << 4)) && (++count) < 3); +} // End pcd_reset() + +/** + * Transfers data to the MFRC522 FIFO, executes a command, waits for completion and transfers data back from the FIFO. + * CRC validation can only be done if back_data and back_len are specified. + * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +status_code +pcd_communicate_tith_picc(uint8_t command, uint8_t wait_irq, uint8_t *send_data, uint8_t send_len, uint8_t *back_data, uint8_t *back_len, uint8_t *valid_bits, uint8_t rx_align, bool check_crc) +{ + // Prepare values for BitFramingReg + uint8_t txLastBits = valid_bits ? *valid_bits : 0; + uint8_t bitFraming = (rx_align << 4) + txLastBits; // rx_align = BitFramingReg[6..4]. TxLastBits = BitFramingReg[2..0] + + write_mfrc522(CommandReg, PCD_Idle); // Stop any active command. + write_mfrc522(ComIrqReg, 0x7F); // Clear all seven interrupt request bits + write_mfrc522(FIFOLevelReg, 0x80); // FlushBuffer = 1, FIFO initialization + write_bytes_mfrc522(FIFODataReg, send_len, send_data); // Write send_data to the FIFO + write_mfrc522(BitFramingReg, bitFraming); // Bit adjustments + write_mfrc522(CommandReg, command); // Execute the command + + if (command == PCD_Transceive) + { + pcd_set_register_bit_mask(BitFramingReg, 0x80); // StartSend=1, transmission of data starts + } + + // Wait for the command to complete. + // In pcd_initialization() we set the TAuto flag in TModeReg. This means the timer automatically starts when the PCD stops transmitting. + // Each iteration of the do-while-loop takes 17.86Ојs. + // TODO check/modify for other architectures than Arduino Uno 16bit + + uint16_t i; + for (i = 36; i > 0; i--) + { + uint8_t n = read_mfrc522(ComIrqReg); // ComIrqReg[7..0] bits are: Set1 TxIRq RxIRq IdleIRq HiAlertIRq LoAlertIRq ErrIRq TimerIRq + if (n & wait_irq) + { // One of the that signal success has been set. + break; + } + if (n & 0x01) + { // Timer interrupt - nothing received in 25ms + return STATUS_TIMEOUT; + } + + OSTimeDly(1); + } + + // 35.7ms and nothing happend. Communication with the MFRC522 might be down. + if (i == 0) + { + return STATUS_TIMEOUT; + } + + // Stop now if any errors except collisions were detected. + uint8_t errorRegValue = read_mfrc522(ErrorReg); // ErrorReg[7..0] bits are: WrErr TempErr reserved BufferOvfl CollErr CRCErr ParityErr ProtocolErr + if (errorRegValue & 0x13) + { // BufferOvfl ParityErr ProtocolErr + return STATUS_ERROR; + } + + uint8_t _valid_bits = 0; + + // If the caller wants data back, get it from the MFRC522. + if (back_data && back_len) + { + uint8_t n = read_mfrc522(FIFOLevelReg); // Number of bytes in the FIFO + if (n > *back_len) + { + return STATUS_NO_ROOM; + } + *back_len = n; // Number of bytes returned + read_fifo_mfrc522(FIFODataReg, n, back_data, rx_align); // Get received data from FIFO + _valid_bits = read_mfrc522(ControlReg) & 0x07; // RxLastBits[2:0] indicates the number of valid bits in the last received byte. If this value is 000b, the whole byte is valid. + if (valid_bits) + { + *valid_bits = _valid_bits; + //printf(" *valid_bits = %x _valid_bits = %x\n",*valid_bits, _valid_bits); + + } + } + // Tell about collisions + if (errorRegValue & 0x08) + { // CollErr + return STATUS_COLLISION; + } + + // Perform CRC_A validation if requested. + if (back_data && back_len && check_crc) + { + // In this case a MIFARE Classic NAK is not OK. + if (*back_len == 1 && _valid_bits == 4) + { + return STATUS_MIFARE_NACK; + } + // We need at least the CRC_A value and all 8 bits of the last byte must be received. + if (*back_len < 2 || _valid_bits != 0) + { + return STATUS_CRC_WRONG; + } + // Verify CRC_A - do our own calculation and store the control in controlBuffer. + uint8_t controlBuffer[2]; + status_code status = pcd_calculate_crc(&back_data[0], *back_len - 2, &controlBuffer[0]); + if (status != STATUS_OK) + { + return status; + } + if ((back_data[*back_len - 2] != controlBuffer[0]) || (back_data[*back_len - 1] != controlBuffer[1])) + { + return STATUS_CRC_WRONG; + } + } + + return STATUS_OK; +} // End pcd_communicate_tith_picc() + +///////////////////////////////////////////////////////////////////////////////////// +// Functions for communicating with PICCs +///////////////////////////////////////////////////////////////////////////////////// + +/** + * Executes the Transceive command. + * CRC validation can only be done if back_data and back_len are specified. + * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +status_code +pcd_transceive_data(uint8_t *send_data, uint8_t send_len, uint8_t *back_data, uint8_t *back_len, uint8_t *valid_bits, uint8_t rx_align, bool check_crc) +{ + uint8_t wait_irq = 0x30; // RxIRq and IdleIRq + status_code result = (status_code)pcd_communicate_tith_picc(PCD_Transceive, wait_irq, send_data, send_len, back_data, back_len, valid_bits, rx_align, check_crc); + return result; +} // End pcd_transceive_data() + +/** + * Reads 16 bytes (+ 2 bytes CRC_A) from the active PICC. + * + * For MIFARE Classic the sector containing the block must be authenticated before calling this function. + * + * For MIFARE Ultralight only addresses 00h to 0Fh are decoded. + * The MF0ICU1 returns a NAK for higher addresses. + * The MF0ICU1 responds to the READ command by sending 16 bytes starting from the page address defined by the command argument. + * For example; if blockAddr is 03h then pages 03h, 04h, 05h, 06h are returned. + * A roll-back is implemented: If blockAddr is 0Eh, then the contents of pages 0Eh, 0Fh, 00h and 01h are returned. + * + * The buffer must be at least 18 bytes because a CRC_A is also returned. + * Checks the CRC_A before returning STATUS_OK. + * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +status_code +mifare_read( uint8_t blockAddr,uint8_t *buffer,uint8_t *bufferSize) +{ + status_code result; + + // Sanity check + if (buffer == NULL || *bufferSize < 18) + { + return STATUS_NO_ROOM; + } + + // Build command buffer + buffer[0] = PICC_CMD_MF_READ; + buffer[1] = blockAddr; + // Calculate CRC_A + result = pcd_calculate_crc(buffer, 2, &buffer[2]); + if (result != STATUS_OK) + { + return result; + } + + // Transmit the buffer and receive the response, validate CRC_A. + return pcd_transceive_data(buffer, 4, buffer, bufferSize, NULL, 0, true); +} // End mifare_read() + +/** + * Wrapper for MIFARE protocol communication. + * Adds CRC_A, executes the Transceive command and checks that the response is MF_ACK or a timeout. + * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +status_code pcd_mifare_transceive( uint8_t *sendData, ///< Pointer to the data to transfer to the FIFO. Do NOT include the CRC_A. + uint8_t sendLen, ///< Number of bytes in sendData. + bool acceptTimeout ///< True => A timeout is also success + ) { + status_code result; + uint8_t cmdBuffer[18]; // We need room for 16 bytes data and 2 bytes CRC_A. + + // Sanity check + if (sendData == NULL || sendLen > 16) { + return STATUS_INVALID; + } + + // Copy sendData[] to cmdBuffer[] and add CRC_A + memcpy(cmdBuffer, sendData, sendLen); + result = pcd_calculate_crc(cmdBuffer, sendLen, &cmdBuffer[sendLen]); + if (result != STATUS_OK) { + return result; + } + sendLen += 2; + + // Transceive the data, store the reply in cmdBuffer[] + uint8_t waitIRq = 0x30; // RxIRq and IdleIRq + uint8_t cmdBufferSize = sizeof(cmdBuffer); + uint8_t validBits = 0; + result = pcd_communicate_tith_picc(PCD_Transceive, waitIRq, cmdBuffer, sendLen, cmdBuffer, &cmdBufferSize, &validBits, 0, false); + if (acceptTimeout && result == STATUS_TIMEOUT) { + return STATUS_OK; + } + if (result != STATUS_OK) { + return result; + } + // The PICC must reply with a 4 bit ACK + if (cmdBufferSize != 1 || validBits != 4) { + return STATUS_ERROR; + } + if (cmdBuffer[0] != MF_ACK) { + return STATUS_MIFARE_NACK; + } + return STATUS_OK; +} + +/** + * Writes 16 bytes to the active PICC. + * + * For MIFARE Classic the sector containing the block must be authenticated before calling this function. + * + * For MIFARE Ultralight the operation is called "COMPATIBILITY WRITE". + * Even though 16 bytes are transferred to the Ultralight PICC, only the least significant 4 bytes (bytes 0 to 3) + * are written to the specified address. It is recommended to set the remaining bytes 04h to 0Fh to all logic 0. + * * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +status_code mifare_write(uint8_t blockAddr, ///< MIFARE Classic: The block (0-0xff) number. MIFARE Ultralight: The page (2-15) to write to. + uint8_t *buffer, ///< The 16 bytes to write to the PICC + uint8_t bufferSize ///< Buffer size, must be at least 16 bytes. Exactly 16 bytes are written. + ) { + status_code result; + + // Sanity check + if (buffer == NULL|| bufferSize < 16) { + return STATUS_NO_ROOM; + } + + // Mifare Classic protocol requires two communications to perform a write. + // Step 1: Tell the PICC we want to write to block blockAddr. + uint8_t cmdBuffer[2]; + cmdBuffer[0] = PICC_CMD_MF_WRITE; + cmdBuffer[1] = blockAddr; + result = pcd_mifare_transceive(cmdBuffer, 2, false); // Adds CRC_A and checks that the response is MF_ACK. + if (result != STATUS_OK) { + return result; + } + + // Step 2: Transfer the data + result = pcd_mifare_transceive(buffer, bufferSize, false); // Adds CRC_A and checks that the response is MF_ACK. + if (result != STATUS_OK) { + return result; + } + + return STATUS_OK; +} // End MIFARE_Write() + +/** + * Clears the bits given in mask from register reg. + */ +void +pcd_clear_register_bit_mask(pcd_register reg, uint8_t mask) +{ + uint8_t tmp; + tmp = read_mfrc522(reg); + write_mfrc522(reg, tmp & (~mask)); // clear bit mask +} // End pcd_clear_register_bit_mask() + +/** + * Used to exit the PCD from its authenticated state. + * Remember to call this function after communicating with an authenticated PICC - otherwise no new communications can start. + */ +void +pcd_stop_cryptol() +{ + // Clear MFCrypto1On bit + pcd_clear_register_bit_mask(Status2Reg, 0x08); // Status2Reg[7..0] bits are: TempSensClear I2CForceHS reserved reserved MFCrypto1On ModemState[2:0] +} // End pcd_stop_cryptol() + +status_code +picc_select( uid_struct *uid, uint8_t valid_bits) +{ + bool uidComplete; + bool selectDone; + bool use_cascade_tag; + uint8_t cascadeLevel = 1; + uint8_t count; + uint8_t index; + uint8_t uid_index; // The first index in uid->uidByte[] that is used in the current Cascade Level. + int8_t current_level_known_bits; // The number of known uid_struct bits in the current Cascade Level. + uint8_t buffer[9]; // The SELECT/ANTICOLLISION commands uses a 7 byte standard frame + 2 bytes CRC_A + uint8_t bufferUsed; // The number of bytes used in the buffer, ie the number of bytes to transfer to the FIFO. + uint8_t rx_align; // Used in BitFramingReg. Defines the bit position for the first bit received. + uint8_t txLastBits; // Used in BitFramingReg. The number of valid bits in the last transmitted byte. + uint8_t *responseBuffer; + uint8_t responseLength; + status_code result; + + // Description of buffer structure: + // Byte 0: SEL Indicates the Cascade Level: PICC_CMD_SEL_CL1, PICC_CMD_SEL_CL2 or PICC_CMD_SEL_CL3 + // Byte 1: NVB Number of Valid Bits (in complete command, not just the UID): High nibble: complete bytes, Low nibble: Extra bits. + // Byte 2: UID-data or CT See explanation below. CT means Cascade Tag. + // Byte 3: UID-data + // Byte 4: UID-data + // Byte 5: UID-data + // Byte 6: BCC Block Check Character - XOR of bytes 2-5 + // Byte 7: CRC_A + // Byte 8: CRC_A + // The BCC and CRC_A are only transmitted if we know all the uid_struct bits of the current Cascade Level. + // + // Description of bytes 2-5: (Section 6.5.4 of the ISO/IEC 14443-3 draft: uid_struct contents and cascade levels) + // uid_struct size Cascade level Byte2 Byte3 Byte4 Byte5 + // ======== ============= ===== ===== ===== ===== + // 4 bytes 1 uid0 uid1 uid2 uid3 + // 7 bytes 1 CT uid0 uid1 uid2 + // 2 uid3 uid4 uid5 uid6 + // 10 bytes 1 CT uid0 uid1 uid2 + // 2 CT uid3 uid4 uid5 + // 3 uid6 uid7 uid8 uid9 + + // Sanity checks + if (valid_bits > 80) + { + return STATUS_INVALID; + } + + // Prepare MFRC522 + pcd_clear_register_bit_mask(CollReg, 0x80); // ValuesAfterColl=1 => Bits received after collision are cleared. + // Repeat Cascade Level loop until we have a complete UID. + uidComplete = false; + while (!uidComplete) + { + // Set the Cascade Level in the SEL byte, find out if we need to use the Cascade Tag in byte 2. + switch (cascadeLevel) + { + case 1: + buffer[0] = PICC_CMD_SEL_CL1; + uid_index = 0; + use_cascade_tag = valid_bits && uid->size > 4; // When we know that the uid_struct has more than 4 bytes + break; + case 2: + buffer[0] = PICC_CMD_SEL_CL2; + uid_index = 3; + use_cascade_tag = valid_bits && uid->size > 7; // When we know that the uid_struct has more than 7 bytes + break; + case 3: + buffer[0] = PICC_CMD_SEL_CL3; + uid_index = 6; + use_cascade_tag = false; // Never used in CL3. + break; + default: + //printf("INTERNAL ERROR"); + return STATUS_INTERNAL_ERROR; + break; + } + + // How many uid_struct bits are known in this Cascade Level? + current_level_known_bits = valid_bits - (8 * uid_index); + if (current_level_known_bits < 0) + { + current_level_known_bits = 0; + } + // Copy the known bits from uid->uidByte[] to buffer[] + index = 2; // destination index in buffer[] + if (use_cascade_tag) + { + buffer[index++] = PICC_CMD_CT; + } + uint8_t bytes_to_copy = current_level_known_bits / 8 + (current_level_known_bits % 8 ? 1 : 0); // The number of bytes needed to represent the known bits for this level. + if (bytes_to_copy) + { + uint8_t maxBytes = use_cascade_tag ? 3 : 4; // Max 4 bytes in each Cascade Level. Only 3 left if we use the Cascade Tag + if (bytes_to_copy > maxBytes) + { + bytes_to_copy = maxBytes; + } + for (count = 0; count < bytes_to_copy; count++) { + buffer[index++] = uid->uidByte[uid_index + count]; + } + } + // Now that the data has been copied we need to include the 8 bits in CT in current_level_known_bits + if (use_cascade_tag) + { + current_level_known_bits += 8; + } + + // Repeat anti collision loop until we can transmit all uid_struct bits + BCC and receive a SAK - max 32 iterations. + selectDone = false; + while (!selectDone) + { + // Find out how many bits and bytes to send and receive. + if (current_level_known_bits >= 32) + { // All uid_struct bits in this Cascade Level are known. This is a SELECT. + buffer[1] = 0x70; // NVB - Number of Valid Bits: Seven whole bytes + // Calculate BCC - Block Check Character + buffer[6] = buffer[2] ^ buffer[3] ^ buffer[4] ^ buffer[5]; + // Calculate CRC_A + result = pcd_calculate_crc(buffer, 7, &buffer[7]); + if (result != STATUS_OK) + { + return result; + } + txLastBits = 0; // 0 => All 8 bits are valid. + bufferUsed = 9; + // Store response in the last 3 bytes of buffer (BCC and CRC_A - not needed after tx) + responseBuffer = &buffer[6]; + responseLength = 3; + } + else + { // This is an ANTICOLLISION. + txLastBits = current_level_known_bits % 8; + count = current_level_known_bits / 8; // Number of whole bytes in the uid_struct part. + index = 2 + count; // Number of whole bytes: SEL + NVB + UIDs + buffer[1] = (index << 4) + txLastBits; // NVB - Number of Valid Bits + bufferUsed = index + (txLastBits ? 1 : 0); + // Store response in the unused part of buffer + responseBuffer = &buffer[index]; + responseLength = sizeof(buffer) - index; + } + + // Set bit adjustments + rx_align = txLastBits; // Having a separate variable is overkill. But it makes the next line easier to read. + write_mfrc522(BitFramingReg, (rx_align << 4) + txLastBits); // rx_align = BitFramingReg[6..4]. TxLastBits = BitFramingReg[2..0] + + // Transmit the buffer and receive the response. + result = pcd_transceive_data(buffer, bufferUsed, responseBuffer, &responseLength, &txLastBits, rx_align, false); + if (result == STATUS_COLLISION) + { // More than one PICC in the field => collision. + uint8_t valueOfCollReg = read_mfrc522(CollReg); // CollReg[7..0] bits are: ValuesAfterColl reserved CollPosNotValid CollPos[4:0] + if (valueOfCollReg & 0x20) + { // CollPosNotValid + return STATUS_COLLISION; // Without a valid collision position we cannot continue + } + uint8_t collisionPos = valueOfCollReg & 0x1F; // Values 0-31, 0 means bit 32. + if (collisionPos == 0) + { + collisionPos = 32; + } + if (collisionPos <= current_level_known_bits) + { // No progress - should not happen + return STATUS_INTERNAL_ERROR; + } + // Choose the PICC with the bit set. + current_level_known_bits = collisionPos; + count = (current_level_known_bits - 1) % 8; // The bit to modify + index = 1 + (current_level_known_bits / 8) + (count ? 1 : 0); // First byte is index 0. + buffer[index] |= (1 << count); + } + else if (result != STATUS_OK) + { + return result; + } + else + { // STATUS_OK + if (current_level_known_bits >= 32) + { // This was a SELECT. + selectDone = true; // No more anticollision + // We continue below outside the while. + } + else + { // This was an ANTICOLLISION. + // We now have all 32 bits of the uid_struct in this Cascade Level + current_level_known_bits = 32; + // Run loop again to do the SELECT. + } + } + } // End of while (!selectDone) + + // We do not check the CBB - it was constructed by us above. + + // Copy the found uid_struct bytes from buffer[] to uid->uidByte[] + index = (buffer[2] == PICC_CMD_CT) ? 3 : 2; // source index in buffer[] + bytes_to_copy = (buffer[2] == PICC_CMD_CT) ? 3 : 4; + for (count = 0; count < bytes_to_copy; count++) + { + uid->uidByte[uid_index + count] = buffer[index++]; + } + + // Check response SAK (Select Acknowledge) + if (responseLength != 3 || txLastBits != 0) + { // SAK must be exactly 24 bits (1 byte + CRC_A).Select Acknowledge + return STATUS_ERROR; + } + // Verify CRC_A - do our own calculation and store the control in buffer[2..3] - those bytes are not needed anymore. + result = pcd_calculate_crc(responseBuffer, 1, &buffer[2]); + if (result != STATUS_OK) + { + return result; + } + if ((buffer[2] != responseBuffer[1]) || (buffer[3] != responseBuffer[2])) + { + return STATUS_CRC_WRONG; + } + if (responseBuffer[0] & 0x04) + { // Cascade bit set - uid_struct not complete yes + cascadeLevel++; + } + else { + uidComplete = true; + uid->sak = responseBuffer[0]; + } + } // End of while (!uidComplete) + + // Set correct uid->size + uid->size = 3 * cascadeLevel + 1; + + return STATUS_OK; +} // End picc_select() + +/** + * Instructs a PICC in state ACTIVE(*) to go to state HALT. + * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +status_code +picc_halt_a() +{ + status_code result; + uint8_t buffer[4]; + + // Build command buffer + buffer[0] = PICC_CMD_HLTA; + buffer[1] = 0; + // Calculate CRC_A + result = pcd_calculate_crc(buffer, 2, &buffer[2]); + if (result != STATUS_OK) + { + return result; + } + // Send the command. + // The standard says: + // If the PICC responds with any modulation during a period of 1 ms after the end of the frame containing the + // HLTA command, this response shall be interpreted as 'not acknowledge'. + // We interpret that this way: Only STATUS_TIMEOUT is a success. + result = pcd_transceive_data(buffer, sizeof(buffer), NULL, 0, NULL, 0, false); + if (result == STATUS_TIMEOUT) + { + return STATUS_OK; + } + if (result == STATUS_OK) + { // That is ironically NOT ok in this case ;-) + return STATUS_ERROR; + } + return result; +} // End picc_halt_a() + +/** + * Returns a __FlashStringHelper pointer to the PICC type name. + * + * @return const __FlashStringHelper * + */ +void +picc_get_type_name(picc_type piccType) +{ + /*switch (piccType) + { + case PICC_TYPE_ISO_14443_4: printf("PICC compliant with ISO/IEC 14443-4\n"); break; + case PICC_TYPE_ISO_18092: printf("PICC compliant with ISO/IEC 18092 (NFC)\n");break; + case PICC_TYPE_MIFARE_MINI: printf("MIFARE Mini, 320 bytes\n");break; + case PICC_TYPE_MIFARE_1K: printf("MIFARE 1KB\n");break; + case PICC_TYPE_MIFARE_4K: printf("MIFARE 4KB\n");break; + case PICC_TYPE_MIFARE_UL: printf("MIFARE Ultralight or Ultralight C\n");break; + case PICC_TYPE_MIFARE_PLUS: printf("MIFARE Plus\n");break; + case PICC_TYPE_MIFARE_DESFIRE: printf("MIFARE DESFire\n");break; + case PICC_TYPE_TNP3XXX: printf("MIFARE TNP3XXX\n");break; + case PICC_TYPE_NOT_COMPLETE: printf("SAK indicates uid_struct is not complete.\n");break; + case PICC_TYPE_UNKNOWN: + default: printf("Unknown type\n"); + }*/ +} // End picc_get_type_name() + + +/** + * Transmits REQA or WUPA commands. + * Beware: When two PICCs are in the field at the same time I often get STATUS_TIMEOUT - probably due do bad antenna design. + * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +status_code +picc_reqa_or_wupa( uint8_t command, uint8_t *bufferATQA, uint8_t *bufferSize) +{ + uint8_t valid_bits; + status_code status; + + if (bufferATQA == NULL || *bufferSize < 2) + { // The ATQA response is 2 bytes long. + //printf("picc_reqa_or_wupa > STATUS_NO_ROOM: %x\n", STATUS_NO_ROOM); + return STATUS_NO_ROOM; + } + + pcd_clear_register_bit_mask(CollReg, 0x80); // ValuesAfterColl=1 => Bits received after collision are cleared. + valid_bits = 7; // For REQA and WUPA we need the short frame format - transmit only 7 bits of the last (and only) byte. TxLastBits = BitFramingReg[2..0] + status = pcd_transceive_data(&command, 1, bufferATQA, bufferSize, &valid_bits, 0, false); + if (status != STATUS_OK) + { + //printf("picc_reqa_or_wupa > status: %x\n", status); + return status; + } + if (*bufferSize != 2 || valid_bits != 0) + { // ATQA must be exactly 16 bits. + //printf("STATUS_ERROR: %x\n", STATUS_ERROR); + return STATUS_ERROR; + } + return STATUS_OK; +} // End picc_reqa_or_wupa() + + +/** + * Transmits a REQuest command, Type A. Invites PICCs in state IDLE to go to READY and prepare for anticollision or selection. 7 bit frame. + * Beware: When two PICCs are in the field at the same time I often get STATUS_TIMEOUT - probably due do bad antenna design. + * + * @return STATUS_OK on success, STATUS_??? otherwise. + */ +status_code +picc_request_a( uint8_t *bufferATQA,uint8_t *bufferSize) +{ + return picc_reqa_or_wupa(PICC_CMD_REQA, bufferATQA, bufferSize); +} // End picc_request_a() + +/** + * Returns true if a PICC responds to PICC_CMD_REQA. + * Only "new" cards in state IDLE are invited. Sleeping cards in state HALT are ignored. + * + * @return bool + */ +bool +picc_is_new_card_present() +{ + uint8_t bufferATQA[2]; + uint8_t bufferSize = sizeof(bufferATQA); + + // Reset baud rates + write_mfrc522(TxModeReg, 0x00); + write_mfrc522(RxModeReg, 0x00); + // Reset ModWidthReg + write_mfrc522(ModWidthReg, 0x26); + + + status_code result = picc_request_a(bufferATQA, &bufferSize); + + return (result == STATUS_OK || result == STATUS_COLLISION); +} // End picc_is_new_card_present() + +/** + * Simple wrapper around picc_select. + * Returns true if a uid_struct could be read. + * Remember to call picc_is_new_card_present(), picc_request_a() or PICC_WakeupA() first. + * The read uid_struct is available in the class variable uid. + * + * @return bool + */ +bool +picc_read_card_serial() +{ + status_code result = picc_select(&uid,0); + return (result == STATUS_OK); +} // End + +status_code +pcd_authenticate (uint8_t command, uint8_t blockAddr, MIFARE_Key *key, uid_struct *uid) +{ + uint8_t wait_irq = 0x10; // IdleIRq + uint8_t i; + // Build command buffer + uint8_t send_data[12]; + send_data[0] = command; + send_data[1] = blockAddr; + for ( i = 0; i < MF_KEY_SIZE; i++) + { // 6 key bytes + send_data[2+i] = key->keyByte[i]; + } + // Use the last uid_struct bytes as specified in http://cache.nxp.com/documents/application_note/AN10927.pdf + // section 3.2.5 "MIFARE Classic Authentication". + // The only missed case is the MF1Sxxxx shortcut activation, + // but it requires cascade tag (CT) byte, that is not part of uid. + for ( i = 0; i < 4; i++) + { // The last 4 bytes of the UID + send_data[8+i] = uid->uidByte[i+uid->size-4]; + } + + // Start the authentication. + return pcd_communicate_tith_picc(pcd_mf_authent, wait_irq, &send_data[0], sizeof(send_data), NULL, NULL, NULL, 0, false); +} // End pcd_authenticate() + +void +antenna_on() +{ + uint8_t value ; + value = read_mfrc522(TxControlReg); + if ((value & 0x03) != 0x03) { + write_mfrc522(TxControlReg, value | 0x03); + } + value = read_mfrc522(TxControlReg); +} + +/* + * Initializes the MFRC522 chip. + */ +bool +pcd_initialization() +{ + //printf("pcd_initialization()\n"); + + mfr_reset_down(); + us_delay_spi(2); + mfr_reset_up(); + + us_delay_spi(50000); + + pcd_reset(); + + // Reset baud rates + write_mfrc522(TxModeReg, 0x00); + write_mfrc522(RxModeReg, 0xb0); + //Reset ModWidthReg + write_mfrc522(ModWidthReg, 0x26); + // When communicating with a PICC we need a timeout if something goes wrong. + // f_timer = 13.56 MHz / (2*TPreScaler+1) where TPreScaler = [TPrescaler_Hi:TPrescaler_Lo]. + // TPrescaler_Hi are the four low bits in TModeReg. TPrescaler_Lo is TPrescalerReg. + write_mfrc522(TModeReg, 0x80); // TAuto=1; timer starts automatically at the end of the transmission in all communication modes at all speeds + write_mfrc522(TPrescalerReg, 0xA9); // TPreScaler = TModeReg[3..0]:TPrescalerReg, ie 0x0A9 = 169 => f_timer=40kHz, ie a timer period of 25Ојs. + write_mfrc522(TReloadRegH, 0x03); // Reload timer with 0x3E8 = 1000, ie 25ms before timeout. + write_mfrc522(TReloadRegL, 0xE8); + write_mfrc522(TxASKReg, 0x40); // Default 0x00. Force a 100 % ASK modulation independent of the ModGsPReg register setting + write_mfrc522(ModeReg, 0x3D); // Default 0x3F. Set the preset value for the CRC coprocessor for the CalcCRC command to 0x6363 (ISO 14443-3 part 6.2.4) + write_mfrc522(RFCfgReg,0x70); + write_mfrc522(ComIEnReg,0x80); + write_mfrc522(FIFOLevelReg,0x00); + antenna_on(); // Enable the antenna driver pins TX1 and TX2 (they were disabled by the reset) + + //printf("initialization Done()\n"); + + return 1; +} // End pcd_initialization() */ + + + + diff --git a/PROJECT/drivers/mfrc522/rfid-spi.h b/PROJECT/drivers/mfrc522/rfid-spi.h new file mode 100644 index 0000000..05b0260 --- /dev/null +++ b/PROJECT/drivers/mfrc522/rfid-spi.h @@ -0,0 +1,237 @@ +#ifndef _RFID_SPI_H_ +#define _RFID_SPI_H_ + +#include +#include "spi.h" +#include +#include + +#define SPI_CS 0x01 //PC0 +#define SPI_MOSI 0x10 //PA4 +#define SPI_MISO 0x02 //PB1 +#define SPI_Ck 0x04 //PA2 + +#define GPIO_PIN_6 0x40 //SDA (SLAVE SELECT) + +#define MAX_LEN 16 // Maximum length of the array +#define MI_OK 0 +#define MI_NOTAGERR 1 +#define MI_ERR 2 + +#define PICC_REQIDL 0x26 // Area of ​​the antenna is not trying to get into the idle state + +#define Reserved00 0x00 + +#define CommIEnReg 0x02 +#define DivlEnReg 0x03 +#define CommIrqReg 0x04 + +#define PCD_IDLE 0x00 // No action; And cancel the command +#define PCD_AUTHENT 0x0E // authentication key +#define PCD_RECEIVE 0x08 // receiving data +#define PCD_TRANSMIT 0x04 // Send data +#define PCD_TRANSCEIVE 0x0C // Send and receive data +#define PCD_RESETPHASE 0x0F // reset +#define PCD_CALCCRC 0x03 // calculate CRC +#define Reserved01 0x0F +//Page 1:Command +#define Reserved10 0x10 +#define Reserved11 0x1A +#define Reserved12 0x1B +#define MifareReg 0x1C +#define Reserved13 0x1D +#define Reserved14 0x1E +//Page 2:CFG +#define Reserved20 0x20 +#define Reserved21 0x23 +#define CRCResultRegM 0x21 // shows the MSB and LSB values of the CRC calculation +// MFRC522 commands. Described in chapter 10 of the datasheet. +#define PCD_Idle 0x00 // no action, cancels current command execution +#define PCD_Mem 0x01 // stores 25 bytes into the internal buffer +#define PCD_GenerateRandomID 0x02 // generates a 10-byte random ID number +#define PCD_CalcCRC 0x03 // activates the CRC coprocessor or performs a self test +#define PCD_Transmit 0x04 // transmits data from the FIFO buffer +#define PCD_NoCmdChange 0x07 // no command change, can be used to modify the CommandReg register bits without affecting the command, for example, the PowerDown bit +#define PCD_Receive 0x08 // activates the receiver circuits +#define PCD_Transceive 0x0C // transmits data from FIFO buffer to antenna and automatically activates the receiver after transmission +#define pcd_mf_authent 0x0E // performs the MIFARE standard authentication as a reader +#define PCD_SoftReset 0x0F // resets the MFRC522 +#define TxAutoReg 0x15 +#define delay_ms(i) (ti_lib_cpu_delay(8000 * (i))) + +typedef enum { + // Page 0: Command and status + // 0x00 // reserved for future use + CommandReg = 0x01 , // starts and stops command execution + ComIEnReg = 0x02 , // enable and disable interrupt request control bits + DivIEnReg = 0x03 , // enable and disable interrupt request control bits + ComIrqReg = 0x04 , // interrupt request bits + DivIrqReg = 0x05 , // interrupt request bits + ErrorReg = 0x06 , // error bits showing the error status of the last command executed + Status1Reg = 0x07 , // communication status bits + Status2Reg = 0x08 , // receiver and transmitter status bits + FIFODataReg = 0x09 , // input and output of 64 byte FIFO buffer + FIFOLevelReg = 0x0A , // number of bytes stored in the FIFO buffer + WaterLevelReg = 0x0B , // level for FIFO underflow and overflow warning + ControlReg = 0x0C , // miscellaneous control registers + BitFramingReg = 0x0D , // adjustments for bit-oriented frames + CollReg = 0x0E , // bit position of the first bit-collision detected on the RF interface + // 0x0F // reserved for future use + + // Page 1: Command + // 0x10 // reserved for future use + ModeReg = 0x11 , // defines general modes for transmitting and receiving + TxModeReg = 0x12 , // defines transmission data rate and framing + RxModeReg = 0x13 , // defines reception data rate and framing + TxControlReg = 0x14 , // controls the logical behavior of the antenna driver pins TX1 and TX2 + TxASKReg = 0x15 , // controls the setting of the transmission modulation + TxSelReg = 0x16 , // selects the internal sources for the antenna driver + RxSelReg = 0x17 , // selects internal receiver settings + RxThresholdReg = 0x18 , // selects thresholds for the bit decoder + DemodReg = 0x19 , // defines demodulator settings + // 0x1A // reserved for future use + // 0x1B // reserved for future use + MfTxReg = 0x1C , // controls some MIFARE communication transmit parameters + MfRxReg = 0x1D , // controls some MIFARE communication receive parameters + // 0x1E // reserved for future use + SerialSpeedReg = 0x1F , // selects the speed of the serial UART interface + + // Page 2: Configuration + // 0x20 // reserved for future use + CRCResultRegH = 0x21 , // shows the MSB and LSB values of the CRC calculation + CRCResultRegL = 0x22 , + // 0x23 // reserved for future use + ModWidthReg = 0x24 , // controls the ModWidth setting? + // 0x25 // reserved for future use + RFCfgReg = 0x26 , // configures the receiver gain + GsNReg = 0x27 , // selects the conductance of the antenna driver pins TX1 and TX2 for modulation + CWGsPReg = 0x28 , // defines the conductance of the p-driver output during periods of no modulation + ModGsPReg = 0x29 , // defines the conductance of the p-driver output during periods of modulation + TModeReg = 0x2A , // defines settings for the internal timer + TPrescalerReg = 0x2B , // the lower 8 bits of the TPrescaler value. The 4 high bits are in TModeReg. + TReloadRegH = 0x2C , // defines the 16-bit timer reload value + TReloadRegL = 0x2D , + TCounterValueRegH = 0x2E , // shows the 16-bit timer value + TCounterValueRegL = 0x2F , + + // Page 3: Test Registers + // 0x30 // reserved for future use + TestSel1Reg = 0x31 , // general test signal configuration + TestSel2Reg = 0x32 , // general test signal configuration + TestPinEnReg = 0x33 , // enables pin output driver on pins D1 to D7 + TestPinValueReg = 0x34 , // defines the values for D1 to D7 when it is used as an I/O bus + TestBusReg = 0x35 , // shows the status of the internal test bus + AutoTestReg = 0x36 , // controls the digital self-test + VersionReg = 0x37 , // shows the software version + AnalogTestReg = 0x38 , // controls the pins AUX1 and AUX2 + TestDAC1Reg = 0x39 , // defines the test value for TestDAC1 + TestDAC2Reg = 0x3A , // defines the test value for TestDAC2 + TestADCReg = 0x3B // shows the value of ADC I and Q channels + // 0x3C // reserved for production tests + // 0x3D // reserved for production tests + // 0x3E // reserved for production tests + // 0x3F // reserved for production tests + }pcd_register; + + // Commands sent to the PICC. + typedef enum { + // The commands used by the PCD to manage communication with several PICCs (ISO 14443-3, Type A, section 6.4) + PICC_CMD_REQA = 0x26, // REQuest command, Type A. Invites PICCs in state IDLE to go to READY and prepare for anticollision or selection. 7 bit frame. + PICC_CMD_WUPA = 0x52, // Wake-UP command, Type A. Invites PICCs in state IDLE and HALT to go to READY(*) and prepare for anticollision or selection. 7 bit frame. + PICC_CMD_CT = 0x88, // Cascade Tag. Not really a command, but used during anti collision. + PICC_CMD_SEL_CL1 = 0x93, // Anti collision/Select, Cascade Level 1 + PICC_CMD_SEL_CL2 = 0x95, // Anti collision/Select, Cascade Level 2 + PICC_CMD_SEL_CL3 = 0x97, // Anti collision/Select, Cascade Level 3 + PICC_CMD_HLTA = 0x50, // HaLT command, Type A. Instructs an ACTIVE PICC to go to state HALT. + PICC_CMD_RATS = 0xE0, // Request command for Answer To Reset. + // The commands used for MIFARE Classic (from http://www.mouser.com/ds/2/302/MF1S503x-89574.pdf, Section 9) + // Use pcd_mf_authent to authenticate access to a sector, then use these commands to read/write/modify the blocks on the sector. + // The read/write commands can also be used for MIFARE Ultralight. + PICC_CMD_MF_AUTH_KEY_A = 0x60, // Perform authentication with Key A + PICC_CMD_MF_AUTH_KEY_B = 0x61, // Perform authentication with Key B + PICC_CMD_MF_READ = 0x30, // Reads one 16 byte block from the authenticated sector of the PICC. Also used for MIFARE Ultralight. + PICC_CMD_MF_WRITE = 0xA0, // Writes one 16 byte block to the authenticated sector of the PICC. Called "COMPATIBILITY WRITE" for MIFARE Ultralight. + PICC_CMD_MF_DECREMENT = 0xC0, // Decrements the contents of a block and stores the result in the internal data register. + PICC_CMD_MF_INCREMENT = 0xC1, // Increments the contents of a block and stores the result in the internal data register. + PICC_CMD_MF_RESTORE = 0xC2, // Reads the contents of a block into the internal data register. + PICC_CMD_MF_TRANSFER = 0xB0, // Writes the contents of the internal data register to a block. + // The commands used for MIFARE Ultralight (from http://www.nxp.com/documents/data_sheet/MF0ICU1.pdf, Section 8.6) + // The PICC_CMD_MF_READ and PICC_CMD_MF_WRITE can also be used for MIFARE Ultralight. + PICC_CMD_UL_WRITE = 0xA2 // Writes one 4 byte page to the PICC. + }PICC_Command; + + typedef enum { + PICC_TYPE_UNKNOWN , + PICC_TYPE_ISO_14443_4 , // PICC compliant with ISO/IEC 14443-4 + PICC_TYPE_ISO_18092 , // PICC compliant with ISO/IEC 18092 (NFC) + PICC_TYPE_MIFARE_MINI , // MIFARE Classic protocol, 320 bytes + PICC_TYPE_MIFARE_1K , // MIFARE Classic protocol, 1KB + PICC_TYPE_MIFARE_4K , // MIFARE Classic protocol, 4KB + PICC_TYPE_MIFARE_UL , // MIFARE Ultralight or Ultralight C + PICC_TYPE_MIFARE_PLUS , // MIFARE Plus + PICC_TYPE_MIFARE_DESFIRE, // MIFARE DESFire + PICC_TYPE_TNP3XXX , // Only mentioned in NXP AN 10833 MIFARE Type Identification Procedure + PICC_TYPE_NOT_COMPLETE = 0xff // SAK indicates uid_struct is not complete. + }picc_type; + + // Return codes from the functions in this class. Remember to update Getstatus_codeName() if you add more. + // last value set to 0xff, then compiler uses less ram, it seems some optimisations are triggered + typedef enum { + STATUS_OK , // Success + STATUS_ERROR , // Error in communication + STATUS_COLLISION , // Collission detected + STATUS_TIMEOUT , // Timeout in communication. + STATUS_NO_ROOM , // A buffer is not big enough. + STATUS_INTERNAL_ERROR , // Internal error in the code. Should not happen ;-) + STATUS_INVALID , // Invalid argument. + STATUS_CRC_WRONG , // The CRC_A does not match + STATUS_MIFARE_NACK = 0xff // A MIFARE PICC responded with NAK. + }status_code; + + typedef enum { + MF_ACK = 0xA, // The MIFARE Classic uses a 4 bit ACK/NAK. Any other value than 0xA is NAK. + MF_KEY_SIZE = 6 // A Mifare Crypto1 key is 6 bytes. + }MIFARE_Misc; + + // A struct used for passing a MIFARE Crypto1 key + typedef struct { + uint8_t keyByte[MF_KEY_SIZE]; + } MIFARE_Key; + + // A struct used for passing the uid_struct of a PICC. + typedef struct { + uint8_t size; // Number of bytes in the UID. 4, 7 or 10. + uint8_t uidByte[10]; + uint8_t sak; // The SAK (Select acknowledge) byte returned from the PICC after successful selection. + } uid_struct; + +void write_bytes_mfrc522( pcd_register reg, uint8_t count, uint8_t *values); +void write_mfrc522(uint8_t adr, uint8_t val); +uint8_t read_mfrc522(uint8_t dev_cmd); +void read_fifo_mfrc522( pcd_register reg, uint8_t count, uint8_t *values, uint8_t rx_align); +picc_type picc_get_type(uint8_t sak); +void pcd_set_register_bit_mask(pcd_register reg, uint8_t mask); +status_code pcd_calculate_crc(uint8_t *data, uint8_t length, uint8_t *result); +void pcd_reset(); +status_code pcd_communicate_tith_picc(uint8_t command, uint8_t wait_irq, uint8_t *send_data, uint8_t send_len, uint8_t *back_data, uint8_t *back_len, uint8_t *valid_bits, uint8_t rx_align, bool check_crc); +status_code pcd_transceive_data(uint8_t *send_data, uint8_t send_len, uint8_t *back_data, uint8_t *back_len, uint8_t *valid_bits, uint8_t rx_align, bool check_crc); +status_code mifare_read( uint8_t blockAddr, uint8_t *buffer, uint8_t *bufferSize); +status_code mifare_write(uint8_t blockAddr, uint8_t *buffer, uint8_t bufferSize); +void pcd_clear_register_bit_mask(pcd_register reg, uint8_t mask); +void pcd_stop_cryptol(); +status_code picc_select( uid_struct *uid, uint8_t valid_bits); +status_code picc_halt_a(); +void picc_get_type_name(picc_type piccType); +status_code picc_reqa_or_wupa( uint8_t command, uint8_t *bufferATQA, uint8_t *bufferSize); +status_code picc_request_a( uint8_t *bufferATQA,uint8_t *bufferSize); +bool picc_is_new_card_present(); +bool picc_read_card_serial(); +status_code pcd_authenticate (uint8_t command, uint8_t blockAddr, MIFARE_Key *key, uid_struct *uid); +void get_status_code_name (status_code code); + +void antenna_on(); +bool pcd_initialization(); + +uid_struct * get_uid(); + +#endif \ No newline at end of file diff --git a/PROJECT/menu/menudesc.c b/PROJECT/menu/menudesc.c index 98a0862..1022513 100644 --- a/PROJECT/menu/menudesc.c +++ b/PROJECT/menu/menudesc.c @@ -443,16 +443,15 @@ const TMenuLine line_ChannelCountersMenu_3 = { NULL // панель для перехода }; -/* const TMenuLine line_ChannelCountersMenu_4 = { MENU_LINE_SHOW_DESC, // тип пункта меню 0, // доп. флаги - (void*)&CounterChannelTimeDesc, // указатель на текстовую строку или дескриптор + (void*)&CounterChannelAbonementDesc, // указатель на текстовую строку или дескриптор NULL // панель для перехода }; -*/ -const TMenuLineArray arr_ChannelCountersArray[] = {&line_ChannelCountersMenu_0, &line_ChannelCountersMenu_1, &line_ChannelCountersMenu_2, &line_ChannelCountersMenu_3, NULL}; -const TMenuPanel ChannelCountersPanel[] = {arr_ChannelCountersArray, NULL, 4, MENU_PANEL_STATIC}; + +const TMenuLineArray arr_ChannelCountersArray[] = {&line_ChannelCountersMenu_0, &line_ChannelCountersMenu_1, &line_ChannelCountersMenu_2, &line_ChannelCountersMenu_3, &line_ChannelCountersMenu_4, NULL}; +const TMenuPanel ChannelCountersPanel[] = {arr_ChannelCountersArray, NULL, 5, MENU_PANEL_STATIC}; /*********************************** @@ -526,6 +525,13 @@ const TMenuLine line_CommonCountersMenu_2 = { NULL // панель для перехода }; +const TMenuLine line_CommonCountersMenu_3 = { + MENU_LINE_SHOW_DESC, // тип пункта меню + 0, // доп. флаги + (void*)&CounterAbonementDesc, // указатель на текстовую строку или дескриптор + NULL // панель для перехода +}; + #elif defined(BOARD_SOLARIUM_WEB) const TMenuLine line_CommonCountersMenu_1 = { @@ -545,8 +551,8 @@ const TMenuLine line_CommonCountersMenu_2 = { #endif -const TMenuLineArray arr_CommonCountersArray[] = {&line_CommonCountersMenu_0, &line_CommonCountersMenu_1, &line_CommonCountersMenu_2, NULL}; -const TMenuPanel CommonCountersPanel[] = {arr_CommonCountersArray, NULL, 3, MENU_PANEL_STANDARD}; +const TMenuLineArray arr_CommonCountersArray[] = {&line_CommonCountersMenu_0, &line_CommonCountersMenu_1, &line_CommonCountersMenu_2, &line_CommonCountersMenu_3, NULL}; +const TMenuPanel CommonCountersPanel[] = {arr_CommonCountersArray, NULL, 4, MENU_PANEL_STANDARD}; /*********************************** МЕНЮ ОБЩАЯ СТАТИСТИКА ДЛИННЫЕ СЧЕТЧИКИ @@ -576,6 +582,13 @@ const TMenuLine line_CommonCountersLongMenu_2 = { NULL // панель для перехода }; +const TMenuLine line_CommonCountersLongMenu_3 = { + MENU_LINE_SHOW_DESC, // тип пункта меню + 0, // доп. флаги + (void*)&CounterLongAbonementDesc, // указатель на текстовую строку или дескриптор + NULL // панель для перехода +}; + #elif defined(BOARD_SOLARIUM_WEB) const TMenuLine line_CommonCountersLongMenu_1 = { @@ -595,8 +608,8 @@ const TMenuLine line_CommonCountersLongMenu_2 = { #endif -const TMenuLineArray arr_CommonCountersLongArray[] = {&line_CommonCountersLongMenu_0, &line_CommonCountersLongMenu_1, &line_CommonCountersLongMenu_2, NULL}; -const TMenuPanel CommonCountersLongPanel[] = {arr_CommonCountersLongArray, NULL, 3, MENU_PANEL_STANDARD}; +const TMenuLineArray arr_CommonCountersLongArray[] = {&line_CommonCountersLongMenu_0, &line_CommonCountersLongMenu_1, &line_CommonCountersLongMenu_2, &line_CommonCountersLongMenu_3, NULL}; +const TMenuPanel CommonCountersLongPanel[] = {arr_CommonCountersLongArray, NULL, 4, MENU_PANEL_STANDARD}; /*********************************** МЕНЮ НАСТРОЙКИ @@ -612,6 +625,7 @@ const CPU_INT08U str_SettingsMenu_7[] = " #if defined(BOARD_SOLARIUM_VLAD) const CPU_INT08U str_SettingsMenu_1[] = "Солярии"; const CPU_INT08U str_SettingsMenu_7[] = "Скидки"; +const CPU_INT08U str_SettingsMenu_10[] = "Абонементы"; const CPU_INT08U str_SettingsMenu_8[] = "Типы кожи"; #else const CPU_INT08U str_SettingsMenu_1[] = "Посты"; @@ -676,6 +690,13 @@ const TMenuLine line_SettingsMenu_10 = { (void*)str_SettingsMenu_8, // указатель на текстовую строку или дескриптор (void*)&SkinTypeSettingsMenuPanel // панель для перехода }; + +const TMenuLine line_SettingsMenu_12 = { + MENU_LINE_GOTO_MENU, // тип пункта меню + 0, // доп. флаги + (void*)str_SettingsMenu_10, // указатель на текстовую строку или дескриптор + (void*)&AbonementMenuPanel // панель для перехода +}; #endif const TMenuLine line_SettingsMenu_8 = { @@ -730,6 +751,7 @@ const TMenuLineArray arr_SettingsMenuArray[] = {&line_SettingsMenu_0, #endif #if defined(BOARD_SOLARIUM_VLAD) &line_SettingsMenu_10, + &line_SettingsMenu_12, &line_SettingsMenu_9, #endif #if defined(BOARD_CENTRAL_CARWASH) || defined(BOARD_SOLARIUM_VLAD) @@ -757,7 +779,7 @@ const TMenuPanel SettingsMenuPanel[] = {arr_SettingsMenuArray, NULL, #if defined(BOARD_CENTRAL_CARWASH) 7 #elif defined(BOARD_SOLARIUM_VLAD) - 9 + 10 #else 6 #endif @@ -1190,6 +1212,7 @@ const CPU_INT08U str_DeviceMenu_6[] = " #endif #if defined(BOARD_SOLARIUM_VLAD) const CPU_INT08U str_DeviceMenu_7[] = "Табло"; +const CPU_INT08U str_DeviceMenu_9[] = "Абонемент"; #endif #if defined(CONFIG_RELAY_ENABLE) const CPU_INT08U str_DeviceMenu_8[] = "Реле"; @@ -1253,6 +1276,13 @@ const TMenuLine line_DeviceMenu_7 = { (void*)str_DeviceMenu_7, // указатель на текстовую строку или дескриптор (void*)&ScoreSettingsPanel // панель для перехода }; + +const TMenuLine line_DeviceMenu_9 = { + MENU_LINE_GOTO_MENU, // тип пункта меню + 0, // доп. флаги + (void*)str_DeviceMenu_9, // указатель на текстовую строку или дескриптор + (void*)&AbonementSetupPanel // панель для перехода +}; #endif #if defined(CONFIG_RELAY_ENABLE) @@ -1264,7 +1294,7 @@ const TMenuLine line_DeviceMenu_8 = { }; #endif -const TMenuLineArray arr_DeviceMenuArray[] = {&line_DeviceMenu_0, &line_DeviceMenu_1, &line_DeviceMenu_2, &line_DeviceMenu_3, +const TMenuLineArray arr_DeviceMenuArray[] = {&line_DeviceMenu_0, /*&line_DeviceMenu_1, &line_DeviceMenu_2, &line_DeviceMenu_3,*/ #if defined(CONFIG_MODEM_ENABLE) &line_DeviceMenu_4, #endif @@ -1274,13 +1304,14 @@ const TMenuLineArray arr_DeviceMenuArray[] = {&line_DeviceMenu_0, &line_DeviceMe #endif #if defined(BOARD_SOLARIUM_VLAD) &line_DeviceMenu_7, + &line_DeviceMenu_9, #endif #if defined(CONFIG_RELAY_ENABLE) &line_DeviceMenu_8, #endif NULL}; const TMenuPanel DeviceMenuPanel[] = {arr_DeviceMenuArray, NULL, - 5 + 2 #if defined(CONFIG_MUSIC_ENABLE) + 1 #endif @@ -1288,7 +1319,7 @@ const TMenuPanel DeviceMenuPanel[] = {arr_DeviceMenuArray, NULL, + 1 #endif #if defined(BOARD_SOLARIUM_VLAD) - + 1 + + 2 #endif #if defined(CONFIG_RELAY_ENABLE) + 1 @@ -1526,6 +1557,42 @@ const TMenuLine line_CoinMenu_5 = { 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}; +/*********************************** + МЕНЮ НАСТРОЙКА АБОНЕМЕНТА +***********************************/ +const CPU_INT08U str_AbonementMenuSet_0[] = "НАСТРОйКИ АБОНЕМЕН."; + +const TMenuLine line_AbonementMenuSet_0 = { + MENU_LINE_STRING, // тип пункта меню + MENU_FIXED_LINE, // доп. флаги + (void*)str_AbonementMenuSet_0, // указатель на текстовую строку или дескриптор + NULL // панель для перехода +}; + +const TMenuLine line_AbonementMenuSet_1 = { + MENU_LINE_SHOW_DESC, // тип пункта меню + 0, // доп. флаги + (void*)&EnableAbonementDesc, // указатель на текстовую строку или дескриптор + NULL // панель для перехода +}; + +const TMenuLine line_AbonementMenuSet_2 = { + MENU_LINE_SHOW_DESC, // тип пункта меню + 0, // доп. флаги + (void*)&CountUseAbonementDesc, // указатель на текстовую строку или дескриптор + NULL // панель для перехода +}; + +const TMenuLine line_AbonementMenuSet_3 = { + MENU_LINE_SHOW_DESC, // тип пункта меню + 0, // доп. флаги + (void*)&ClearStatAbonementCmdDesc, // указатель на текстовую строку или дескриптор + NULL // панель для перехода +}; + +const TMenuLineArray arr_AbonementMenuArray[] = {&line_AbonementMenuSet_0, &line_AbonementMenuSet_1, &line_AbonementMenuSet_2, &line_AbonementMenuSet_3, NULL}; +const TMenuPanel AbonementSetupPanel[] = {arr_AbonementMenuArray, NULL, 4, MENU_PANEL_STANDARD}; + /*********************************** МЕНЮ НАСТРОЙКА МОДЕМА ***********************************/ @@ -2212,8 +2279,8 @@ const TMenuPanel FrIsOffMenuPanel[] = {arr_FrIsOffMenuArray, NULL, 3, MENU_PANEL /*********************************** МЕНЮ ПРОСМОТР ЖУРНАЛА СОБЫТИЙ ***********************************/ -char str_EventNumber[24]; -char str_EventData[24]; +char str_EventNumber[40]; +char str_EventData[40]; const TMenuLine line_EventJournalMenu_0 = { MENU_LINE_SHOW_DESC, // тип пункта меню @@ -2294,9 +2361,71 @@ void PrintEventJournalRecord(TEventRecord *record, char *str_event, char *str_da #if defined(BOARD_SOLARIUM_VLAD) sprintf(str_data, "%dруб.%02dкоп.", record->data / 100, record->data % 100); #else - sprintf(str_data, "%d руб.", record->data); + sprintf(str_data, "%d руб.", record->data); #endif } + else if (record->event == JOURNAL_EVENT_CARD_ABONEMENT_ACCEPTED) + { + sprintf(str_data, "%dруб.%02dкоп.", record->money_bank / 100, record->money_bank % 100); + } + else if (record->event == JOURNAL_EVENT_ABONEMENT_ACCEPTED) + { + sprintf(&str_event[strlen(str_event)], " %dр %d", record->money, record->bonus); + + char str[32]; + PrintDateString(str, record->time_before); + + sprintf(str_data, "%x %dр %dБ %s", record->number_abonement, record->money_sum, record->bonus_sum, str); + + // добавим в str_event пробелов до длины str_data чтобы они одновременно прокручивались + CPU_INT08U len_event = strlen(str_event); + CPU_INT08U len_data = strlen(str_data); + + if(len_data > len_event) + { + CPU_INT08U i = 0; + + for(i = 0; i < len_data - len_event; i++) + { + str_event[len_event + i] = 0x20; + } + + str_event[len_event + i] = 0x00; + } + } + else if (record->event == JOURNAL_EVENT_ABONEMENT_PAY_ACCEPTED) + { + sprintf(&str_event[strlen(str_event)], " %dр %d", record->money, record->type_abonement + 1); + + char str[32]; + PrintDateString(str, record->time_before); + + sprintf(str_data, "%x %dр %dБ %s", record->number_abonement, record->money_sum, record->bonus_sum, str); + } + else if (record->event == JOURNAL_EVENT_ABONEMENT_REJECTED) + { + sprintf(str_data, "%x %dруб %dБ", record->number_abonement, record->money_sum, record->bonus_sum); + } + else if (record->event == JOURNAL_EVENT_CARD_ABONEMENT_REAPEATE) + { + sprintf(str_data, "%x %dруб %dБ", record->number_abonement, record->money_sum, record->bonus_sum); + } + else if (record->event == JOURNAL_EVENT_ABONEMENT_PAY_REJECTED) + { + sprintf(&str_event[strlen(str_event)], "Пост %d", record->channel+1); + strcpy(str_data, "Отказ"); + } + else if (record->event == JOURNAL_EVENT_ABONEMENT_BALANCE) + { + char str[32]; + PrintDateString(str, record->time_before); + + sprintf(str_data, "%x %dр %dБ %s", record->number_abonement, record->money_sum, record->bonus_sum, str); + } + else if (record->event == JOURNAL_EVENT_ABONEMENT_WRONG) + { + sprintf(str_data, "%x. Код ошибки %ld", record->number_abonement, record->password); + } else if (record->event == JOURNAL_EVENT_CARD_REJECTED) { sprintf(&str_event[strlen(str_event)], "Пост %d", record->channel+1); @@ -2544,8 +2673,15 @@ const TMenuLine line_ChannelCountersLongMenu_3 = { NULL // панель для перехода }; -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_STANDARD}; +const TMenuLine line_ChannelCountersLongMenu_4 = { + MENU_LINE_SHOW_DESC, // тип пункта меню + 0, // доп. флаги + (void*)&CounterChannelAbonementLongDesc, // указатель на текстовую строку или дескриптор + NULL // панель для перехода +}; + +const TMenuLineArray arr_ChannelCountersLongArray[] = {&line_ChannelCountersLongMenu_0, &line_ChannelCountersLongMenu_1, &line_ChannelCountersLongMenu_2, &line_ChannelCountersLongMenu_3, &line_ChannelCountersLongMenu_4, NULL}; +const TMenuPanel ChannelCountersLongPanel[] = {arr_ChannelCountersLongArray, NULL, 5, MENU_PANEL_STANDARD}; #if defined(BOARD_SOLARIUM_WEB) @@ -2857,6 +2993,45 @@ const TMenuLine line_DiscountMainMenu_5 = { const TMenuLineArray arr_DiscountMainArray[] = {&line_DiscountMainMenu_0, &line_DiscountMainMenu_1, &line_DiscountMainMenu_2, &line_DiscountMainMenu_3, &line_DiscountMainMenu_4, &line_DiscountMainMenu_5, NULL}; const TMenuPanel DiscountMainMenuPanel[] = {arr_DiscountMainArray, NULL, 6, MENU_PANEL_STANDARD}; +/*********************************** + МЕНЮ АБОНЕМЕНТЫ +***********************************/ +const TMenuLine line_AbonementMenu_0 = { + MENU_LINE_SHOW_DESC, // тип пункта меню + MENU_FIXED_LINE|MENU_INDEX_LINE, // доп. флаги + (void*)&AbonementIndexDesc, // указатель на текстовую строку или дескриптор + NULL // панель для перехода +}; + +const TMenuLine line_AbonementMenu_1 = { + MENU_LINE_SHOW_DESC, // тип пункта меню + 0, // доп. флаги + (void*)&AbonementMoneyDesc, // указатель на текстовую строку или дескриптор + NULL // панель для перехода +}; + +const TMenuLine line_AbonementMenu_2 = { + MENU_LINE_SHOW_DESC, // тип пункта меню + 0, // доп. флаги + (void*)&AbonementBonusDesc, // указатель на текстовую строку или дескриптор + NULL // панель для перехода +}; + +const TMenuLine line_AbonementMenu_3 = { + MENU_LINE_SHOW_DESC, // тип пункта меню + 0, // доп. флаги + (void*)&AbonementBestBeforeDesc, // указатель на текстовую строку или дескриптор + NULL // панель для перехода +}; + +void OnEnterAbonementMenu(void) +{ + abonement_index = 0; +} + +const TMenuLineArray arr_AbonementArray[] = {&line_AbonementMenu_0, &line_AbonementMenu_1, &line_AbonementMenu_2, &line_AbonementMenu_3, NULL}; +const TMenuPanel AbonementMenuPanel[] = {arr_AbonementArray, OnEnterAbonementMenu, 4, MENU_PANEL_STANDARD}; + /*********************************** МЕНЮ СКИДКИ ПО ЧАСАМ ***********************************/ @@ -3111,6 +3286,20 @@ const TMenuLine line_SolarModesCountersMenu_1 = { NULL // панель для перехода }; +const TMenuLine line_SolarModesCountersMenu_6 = { + MENU_LINE_SHOW_DESC, // тип пункта меню + 0, // доп. флаги + (void*)&CounterModeCardMoneyDesc, // указатель на текстовую строку или дескриптор + NULL // панель для перехода +}; + +const TMenuLine line_SolarModesCountersMenu_7 = { + MENU_LINE_SHOW_DESC, // тип пункта меню + 0, // доп. флаги + (void*)&CounterModeCardBonusDesc, // указатель на текстовую строку или дескриптор + NULL // панель для перехода +}; + const TMenuLine line_SolarModesCountersMenu_2 = { MENU_LINE_SHOW_DESC, // тип пункта меню 0, // доп. флаги @@ -3144,8 +3333,8 @@ void OnEnterSolarModesCountersMenu(void) solar_modes_index = 0; } -const TMenuLineArray arr_SolarModesCountersArray[] = {&line_SolarModesCountersMenu_0, &line_SolarModesCountersMenu_1, &line_SolarModesCountersMenu_2, &line_SolarModesCountersMenu_3, &line_SolarModesCountersMenu_4, &line_SolarModesCountersMenu_5, NULL}; -const TMenuPanel SolarModesCountersPanel[] = {arr_SolarModesCountersArray, OnEnterSolarModesCountersMenu, 6, MENU_PANEL_STANDARD}; +const TMenuLineArray arr_SolarModesCountersArray[] = {&line_SolarModesCountersMenu_0, &line_SolarModesCountersMenu_1, &line_SolarModesCountersMenu_6, &line_SolarModesCountersMenu_7, &line_SolarModesCountersMenu_2, &line_SolarModesCountersMenu_3, &line_SolarModesCountersMenu_4, &line_SolarModesCountersMenu_5, NULL}; +const TMenuPanel SolarModesCountersPanel[] = {arr_SolarModesCountersArray, OnEnterSolarModesCountersMenu, 8, MENU_PANEL_STANDARD}; /*********************************** МЕНЮ СЧЕТЧИКОВ ПО СОЛЯРИЯМ И РЕЖИМАМ @@ -3164,6 +3353,20 @@ const TMenuLine line_SolarChannelsCountersMenu_1 = { NULL // панель для перехода }; +const TMenuLine line_SolarChannelsCountersMenu_6 = { + MENU_LINE_SHOW_DESC, // тип пункта меню + 0, // доп. флаги + (void*)&CounterSolarCardMoneyDesc, // указатель на текстовую строку или дескриптор + NULL // панель для перехода +}; + +const TMenuLine line_SolarChannelsCountersMenu_7 = { + MENU_LINE_SHOW_DESC, // тип пункта меню + 0, // доп. флаги + (void*)&CounterSolarCardBonusDesc, // указатель на текстовую строку или дескриптор + NULL // панель для перехода +}; + const TMenuLine line_SolarChannelsCountersMenu_2 = { MENU_LINE_SHOW_DESC, // тип пункта меню 0, // доп. флаги @@ -3198,8 +3401,47 @@ void OnEnterSolarChannelsCountersMenu(void) solar_modes_index = 0; } -const TMenuLineArray arr_SolarChannelsCountersArray[] = {&line_SolarChannelsCountersMenu_0, &line_SolarChannelsCountersMenu_1, &line_SolarChannelsCountersMenu_2, &line_SolarChannelsCountersMenu_3, &line_SolarChannelsCountersMenu_4, &line_SolarChannelsCountersMenu_5, NULL}; -const TMenuPanel SolarChannelsCountersPanel[] = {arr_SolarChannelsCountersArray, OnEnterSolarChannelsCountersMenu, 6, MENU_PANEL_STANDARD}; +const TMenuLineArray arr_SolarChannelsCountersArray[] = {&line_SolarChannelsCountersMenu_0, &line_SolarChannelsCountersMenu_1, &line_SolarChannelsCountersMenu_6, &line_SolarChannelsCountersMenu_7, &line_SolarChannelsCountersMenu_2, &line_SolarChannelsCountersMenu_3, &line_SolarChannelsCountersMenu_4, &line_SolarChannelsCountersMenu_5, NULL}; +const TMenuPanel SolarChannelsCountersPanel[] = {arr_SolarChannelsCountersArray, OnEnterSolarChannelsCountersMenu, 8, MENU_PANEL_STANDARD}; + +/*********************************** + МЕНЮ счетчиков по абонементам +***********************************/ +const TMenuLine line_AbonementsCountersMenu_0 = { + MENU_LINE_SHOW_DESC, // тип пункта меню + MENU_FIXED_LINE|MENU_INDEX_LINE, // доп. флаги + (void*)&AbonementCounterIndexDesc, // указатель на текстовую строку или дескриптор + NULL // панель для перехода +}; + +const TMenuLine line_AbonementsCountersMenu_1 = { + MENU_LINE_SHOW_DESC, // тип пункта меню + 0, // доп. флаги + (void*)&CounterMoneyAbonementDesc, // указатель на текстовую строку или дескриптор + NULL // панель для перехода +}; + +const TMenuLine line_AbonementsCountersMenu_2 = { + MENU_LINE_SHOW_DESC, // тип пункта меню + 0, // доп. флаги + (void*)&CounterRunsAbonementDesc, // указатель на текстовую строку или дескриптор + NULL // панель для перехода +}; + +const TMenuLine line_AbonementsCountersMenu_3 = { + MENU_LINE_SHOW_DESC, // тип пункта меню + 0, // доп. флаги + (void*)&CounterBonusAbonementDesc, // указатель на текстовую строку или дескриптор + NULL // панель для перехода +}; + +void OnEnterAbonementCountersMenu(void) +{ +// abonement_index = 0; +} + +const TMenuLineArray arr_AbonementCountersArray[] = {&line_AbonementsCountersMenu_0, &line_AbonementsCountersMenu_1, &line_AbonementsCountersMenu_2, &line_AbonementsCountersMenu_3, NULL}; +const TMenuPanel AbonementCountersPanel[] = {arr_AbonementCountersArray, OnEnterAbonementCountersMenu, 4, MENU_PANEL_STANDARD}; /*********************************** МЕНЮ СЧЕТЧИКОВ ПО ВРЕМЕНИ НАРАБОТКИ ЛАМП @@ -3317,8 +3559,15 @@ const TMenuLine line_SolarCommonCountersMenu_3 = { NULL // панель для перехода }; -const TMenuLineArray arr_SolarCommonCountersArray[] = {&line_SolarCommonCountersMenu_0, &line_SolarCommonCountersMenu_1, &line_SolarCommonCountersMenu_2, &line_SolarCommonCountersMenu_3, NULL}; -const TMenuPanel SolarCommonCountersPanel[] = {arr_SolarCommonCountersArray, NULL, 4, MENU_PANEL_STANDARD}; +const TMenuLine line_SolarCommonCountersMenu_4 = { + MENU_LINE_SHOW_DESC, // тип пункта меню + 0, // доп. флаги + (void*)&CounterAbonementMoneyDesc, // указатель на текстовую строку или дескриптор + NULL // панель для перехода +}; + +const TMenuLineArray arr_SolarCommonCountersArray[] = {&line_SolarCommonCountersMenu_0, &line_SolarCommonCountersMenu_1, &line_SolarCommonCountersMenu_2, &line_SolarCommonCountersMenu_3, &line_SolarCommonCountersMenu_4, NULL}; +const TMenuPanel SolarCommonCountersPanel[] = {arr_SolarCommonCountersArray, NULL, 5, MENU_PANEL_STANDARD}; /*********************************** МЕНЮ ПРОСМОТР СТАТИСТИКИ @@ -3328,6 +3577,7 @@ const CPU_INT08U str_CommonStatMenu_1[] = " const CPU_INT08U str_CommonStatMenu_2[] = "По режимам"; const CPU_INT08U str_CommonStatMenu_3[] = "Наработка"; const CPU_INT08U str_CommonStatMenu_4[] = "Деньги"; +const CPU_INT08U str_CommonStatMenu_5[] = "Абомементы"; const TMenuLine line_StatMenu_0 = { MENU_LINE_STRING, // тип пункта меню @@ -3364,8 +3614,15 @@ const TMenuLine line_StatMenu_4 = { (void*)SolarCommonCountersPanel // панель для перехода }; -const TMenuLineArray arr_StatMenuArray[] = {&line_StatMenu_0, &line_StatMenu_1, &line_StatMenu_2, &line_StatMenu_3, &line_StatMenu_4, NULL}; -const TMenuPanel CommStatMenuPanel[] = {arr_StatMenuArray, NULL, 5, MENU_PANEL_STANDARD}; +const TMenuLine line_StatMenu_5 = { + MENU_LINE_GOTO_MENU, // тип пункта меню + 0, // доп. флаги + (void*)str_CommonStatMenu_5, // указатель на текстовую строку или дескриптор + (void*)AbonementCountersPanel // панель для перехода +}; + +const TMenuLineArray arr_StatMenuArray[] = {&line_StatMenu_0, &line_StatMenu_1, &line_StatMenu_2, &line_StatMenu_3, &line_StatMenu_4, &line_StatMenu_5, NULL}; +const TMenuPanel CommStatMenuPanel[] = {arr_StatMenuArray, NULL, 6, MENU_PANEL_STANDARD}; /*********************************** diff --git a/PROJECT/menu/menudesc.h b/PROJECT/menu/menudesc.h index d952711..6df39fa 100644 --- a/PROJECT/menu/menudesc.h +++ b/PROJECT/menu/menudesc.h @@ -20,6 +20,7 @@ extern const TMenuPanel CommonCountersLongPanel[]; extern const TMenuPanel BillCountersPanel[]; extern const TMenuPanel ModemSetupPanel[]; extern const TMenuPanel CoinSetupPanel[]; +extern const TMenuPanel AbonementSetupPanel[]; extern const TMenuPanel JournalIsReset[]; extern const TMenuPanel ClearJournalMenuPanel[]; extern const TMenuPanel StatIsReset[]; @@ -78,13 +79,14 @@ extern const TMenuPanel FtpUploadInProgressMenu[]; extern const TMenuPanel FtpOKMenu[]; extern const TMenuPanel FtpFAILMenu[]; extern const TMenuPanel CanselCheckMenuPanel[]; +extern const TMenuPanel AbonementMenuPanel[]; extern int PrintUserMenuStr(char* str, CPU_INT08U n); extern int PrintUserMenuStrUnalign(char* str, CPU_INT08U n); extern void PrintEventJournalRecord(TEventRecord *record, char *str_event, char *str_data); -extern char str_EventNumber[24]; -extern char str_EventData[24]; +extern char str_EventNumber[40]; +extern char str_EventData[40]; extern char str_UserMenu_0[22]; extern char str_UserMenu_1[22]; diff --git a/PROJECT/version.h b/PROJECT/version.h index 6cc8851..cea3e31 100644 --- a/PROJECT/version.h +++ b/PROJECT/version.h @@ -4,7 +4,7 @@ #if defined(BOARD_SOLARIUM_WEB) #define DEVICE_FW_VERSION "7.09" #elif defined(BOARD_SOLARIUM_VLAD) - #define DEVICE_FW_VERSION "8.46" + #define DEVICE_FW_VERSION "8.56" #elif defined(BOARD_CENTRAL_CARWASH) || defined(BOARD_POST_CARWASH) #define DEVICE_FW_VERSION "5.55" #endif diff --git a/settings/sk-mlpc2368.Solarium_Vlad.driver.xcl b/settings/sk-mlpc2368.Solarium_Vlad.driver.xcl index 97d52f3..67520ef 100644 --- a/settings/sk-mlpc2368.Solarium_Vlad.driver.xcl +++ b/settings/sk-mlpc2368.Solarium_Vlad.driver.xcl @@ -12,7 +12,11 @@ "--device=LPC2368" -"--multicore_nr_of_cores=1" +"--drv_communication=USB0" + +"--drv_interface_speed=auto" + +"--jlink_initial_speed=1000" diff --git a/settings/sk-mlpc2368.Solarium_Vlad.general.xcl b/settings/sk-mlpc2368.Solarium_Vlad.general.xcl index 3aba980..0e48e2d 100644 --- a/settings/sk-mlpc2368.Solarium_Vlad.general.xcl +++ b/settings/sk-mlpc2368.Solarium_Vlad.general.xcl @@ -1,6 +1,6 @@ "C:\Program Files\IAR Systems\Embedded Workbench 9.0\arm\bin\armPROC.dll" -"C:\Program Files\IAR Systems\Embedded Workbench 9.0\arm\bin\armSIM2.dll" +"C:\Program Files\IAR Systems\Embedded Workbench 9.0\arm\bin\armJLINK.dll" "C:\git_work\solarium.vlad\Solarium Vlad\Exe\sk_mlpc2368.out" @@ -8,6 +8,8 @@ --device_macro="C:\Program Files\IAR Systems\Embedded Workbench 9.0\arm\config\debugger\NXP\LPC23xx.dmac" +--flash_loader="C:\Program Files\IAR Systems\Embedded Workbench 9.0\arm\config\flashloader\NXP\FlashNXPLPC512K2.board" + diff --git a/settings/sk-mlpc2368.dbgdt b/settings/sk-mlpc2368.dbgdt index 73e71f6..d5d240b 100644 --- a/settings/sk-mlpc2368.dbgdt +++ b/settings/sk-mlpc2368.dbgdt @@ -1,4 +1,1067 @@ - + - + + + 34048 + 34049 + 34050 + 34051 + 34052 + 34053 + 34054 + 34055 + 34056 + 34057 + 34058 + 34059 + 34060 + 34061 + 34062 + 34063 + 34064 + 34065 + 34066 + 34067 + 34068 + 34069 + 34070 + 34071 + 34072 + 34073 + 34074 + 34075 + 34076 + 34077 + 34078 + 34079 + 34080 + 34081 + 34082 + 34083 + 34084 + 34085 + 34086 + 34087 + 34088 + 34089 + 34090 + 34091 + 34092 + 34093 + 34094 + 34095 + 34096 + 34097 + 34098 + 34099 + 34100 + 34101 + 34102 + 34103 + 34104 + 34105 + 34106 + + + + + 34001 + 0 + + + + + 34390 + 34323 + 34398 + 34400 + 34397 + 34320 + 34321 + 34324 + 0 + + + + + 37459 + 37460 + + + + + 57600 + 57601 + 57603 + 33024 + 0 + 57607 + 0 + 57635 + 57634 + 57637 + 0 + 57643 + 57644 + 0 + 33090 + 33057 + 57636 + 57640 + 57641 + 33026 + 33065 + 33063 + 33064 + 33053 + 33054 + 0 + 33035 + 33036 + 34399 + 0 + 33055 + 33056 + 33094 + 0 + + + + + + Disassembly + _I0 + + + 500 + 20 + + 1 + 1 + + + 14 + 31 + + + 1 + 1 + 0 + 0 + 1 + 1 + 1 + DF0C000016002981000006000000138600007300000010860000CB0300000F8100000100000020810000100000001D81000006000000568600009A07000028810000020000001781000001000000148100000500000028E100000D00000000810000130000001F810000010000000E810000010000005E86000018000000E9800000010000001486000007000000058100000200000011860000070000004681000086000000218100000D0000005D86000005000000 + + + 08000D8400000F84000008840000FFFFFFFF54840000328100001C81000009840000 + 04000E8400007700000030840000790000000B810000480000000D8100004A000000 + + + 0 + 0A0000000A0000006E0000006E000000 + 00000000AE02000056050000C1020000 + 4096 + 0 + 0 + 32767 + 0 + + + 1 + + + 4294967295 + 000000005F0100005605000010020000 + 000000004801000056050000F9010000 + 4096 + 0 + 0 + 32767 + 0 + + + 0 + + + 34052 + 00000000170000000601000078010000 + 060400004A0000005205000094020000 + 16384 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34072 + 00000000170000000601000078010000 + 060400004A0000005205000094020000 + 4096 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34096 + 00000000170000000601000078010000 + 060400004A0000005205000094020000 + 4096 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34102 + 00000000170000000601000078010000 + 020400004600000056050000AE020000 + 4096 + 0 + 0 + 32767 + 0 + + + 1 + + + + responseBuffer[0] + responseBuffer[1] + responseBuffer[2] + responseBuffer[3] + responseBuffer[4] + responseBuffer[5] + responseBuffer[6] + responseBuffer[7] + buffer[0] + buffer[1] + buffer[2] + buffer[3] + buffer[4] + buffer[5] + buffer[6] + buffer[7] + buffer[8] + uid + mifare_card_data + trailerBuffer + app_state.user_menu + str + str1 + + + + Expression + Location + Type + Value + + + 123 + 150 + 100 + 263 + + + + 34103 + 00000000170000000601000078010000 + 060400004A0000005205000094020000 + 4096 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34104 + 00000000170000000601000078010000 + 060400004A0000005205000094020000 + 4096 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34105 + 00000000170000000601000078010000 + 060400004A0000005205000094020000 + 4096 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34053 + 000000001700000022010000C8000000 + 000000000000000022010000B1000000 + 32768 + 0 + 0 + 32767 + 0 + + + 0 + + + 34054 + 000000001700000022010000C8000000 + 04000000F7010000FA03000094020000 + 32768 + 0 + 0 + 32767 + 0 + + + 1 + + + 34062 + 000000001700000022010000C8000000 + 04000000F7010000FA03000094020000 + 4096 + 0 + 0 + 32767 + 0 + + + 1 + + + 34066 + 000000001700000022010000C8000000 + 04000000F7010000FA03000094020000 + 4096 + 0 + 0 + 32767 + 0 + + + 0 + + + 34067 + 000000001700000022010000C8000000 + 04000000F7010000FA03000094020000 + 4096 + 0 + 0 + 32767 + 0 + + + 0 + + + 34068 + 000000001700000022010000C8000000 + 04000000F7010000FA03000094020000 + 4096 + 0 + 0 + 32767 + 0 + + + 1 + + + 34088 + 000000001700000022010000C8000000 + 04000000F7010000FA03000094020000 + 4096 + 0 + 0 + 32767 + 0 + + + 1 + + + 34091 + 000000001700000022010000C8000000 + 04000000F7010000FA03000094020000 + 4096 + 0 + 0 + 32767 + 0 + + + 0 + + + 34101 + 000000001700000022010000C8000000 + 04000000F7010000FA03000094020000 + 4096 + 0 + 0 + 32767 + 0 + + + 0 + + + 34055 + 000000001700000080020000A8000000 + 00000000000000008002000091000000 + 32768 + 0 + 0 + 32767 + 0 + + + 0 + + + 34056 + 00000000170000000601000078010000 + 040000003000000002010000DF010000 + 4096 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34093 + 00000000170000000601000078010000 + 040000003000000002010000DF010000 + 4096 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34094 + 00000000170000000601000078010000 + 040000003000000002010000DF010000 + 4096 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34057 + 00000000170000000601000078010000 + 00000000000000000601000061010000 + 16384 + 0 + 1 + 32767 + 0 + + + 0 + + + + 34058 + 000000001700000022010000C8000000 + 000000000000000022010000B1000000 + 32768 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34059 + 000000001700000022010000C8000000 + 000000000000000022010000B1000000 + 32768 + 0 + 0 + 32767 + 0 + + + 0 + + + 34060 + 000000001700000022010000C8000000 + 000000000000000022010000B1000000 + 32768 + 0 + 0 + 32767 + 0 + + + 0 + + + 34061 + 00000000170000000601000078010000 + 540400003000000052050000DF010000 + 16384 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34073 + 00000000170000000601000078010000 + 540400003000000052050000DF010000 + 4096 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34063 + 00000000170000000601000078010000 + 5C02000032000000CE0300000C020000 + 16384 + 0 + 0 + 32767 + 0 + + + 0 + + + 34064 + 000000001700000022010000C8000000 + 000000000000000022010000B1000000 + 32768 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34065 + 000000001700000022010000C8000000 + 000000000000000022010000B1000000 + 32768 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34069 + 000000001700000022010000C8000000 + 000000000000000022010000B1000000 + 32768 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34070 + 000000001700000022010000C8000000 + 000000000000000022010000B1000000 + 32768 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34071 + 000000001700000022010000C8000000 + 000000000000000022010000B1000000 + 32768 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34074 + 00000000170000000601000078010000 + 540400003000000052050000DF010000 + 16384 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34083 + 00000000170000000601000078010000 + 540400003000000052050000DF010000 + 4096 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34084 + 00000000170000000601000078010000 + 540400003000000052050000DF010000 + 4096 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34085 + 00000000170000000601000078010000 + 540400003000000052050000DF010000 + 4096 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34086 + 00000000170000000601000078010000 + 540400003000000052050000DF010000 + 4096 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34075 + 000000001700000022010000C8000000 + 040000006001000052050000DF010000 + 32768 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34076 + 000000001700000022010000C8000000 + 040000006001000052050000DF010000 + 4096 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34077 + 000000001700000022010000C8000000 + 040000006001000052050000DF010000 + 4096 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34078 + 000000001700000022010000C8000000 + 040000006001000052050000DF010000 + 4096 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34079 + 000000001700000022010000C8000000 + 000000000000000022010000B1000000 + 32768 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34080 + 000000001700000022010000C8000000 + 000000000000000022010000B1000000 + 32768 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34081 + 000000001700000022010000C8000000 + 000000000000000022010000B1000000 + 32768 + 0 + 1 + 32767 + 0 + + + 0 + + + + 34082 + 000000001700000022010000C8000000 + 000000004801000056050000F9010000 + 32768 + 0 + 0 + 32767 + 0 + + + 0 + + + + + Expression + Location + Type + Value + + + 100 + 150 + 100 + 100 + + + + 34087 + 00000000170000000601000078010000 + 00000000000000000601000061010000 + 16384 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34089 + 000000001700000022010000C8000000 + 000000000000000022010000B1000000 + 32768 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34090 + 000000001700000022010000C8000000 + 000000000000000022010000B1000000 + 32768 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34092 + 000000001700000080020000A8000000 + 00000000000000008002000091000000 + 32768 + 0 + 0 + 32767 + 0 + + + 0 + + + 34095 + 00000000170000000601000078010000 + 00000000000000000601000061010000 + 16384 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34097 + 000000001700000022010000C8000000 + 000000000000000022010000B1000000 + 32768 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34098 + 000000001700000022010000C8000000 + 000000000000000022010000B1000000 + 32768 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34099 + 00000000170000000601000078010000 + 00000000000000000601000061010000 + 16384 + 0 + 0 + 32767 + 0 + + + 0 + + + + 34100 + 0000000017000000AE010000D8000000 + 0000000000000000AE010000C1000000 + 32768 + 0 + 1 + 32767 + 0 + + + 0 + + + + 34106 + 00000000170000000601000078010000 + 000000003200000006010000DB010000 + 4096 + 0 + 0 + 32767 + 0 + + + 1 + + + 000000003A000000000000000010000001000000FFFFFFFFFFFFFFFF06010000320000000A010000DB0100000100000002000010040000000100000000000000000000003A85000000000000000000000000000000000000010000003A850000010000003A850000000000000040000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000200000004000000010000000000000000000000338500000000000000000000000000000000000001000000338500000100000033850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000328500000000000000000000000000000000000001000000328500000100000032850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000318500000000000000000000000000000000000001000000318500000100000031850000000000000040000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000002000000040000000100000000000000000000002F85000000000000000000000000000000000000010000002F850000010000002F850000000000000080000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000001000000040000000100000000000000000000002C85000000000000000000000000000000000000010000002C850000010000002C850000000000000080000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000001000000040000000100000000000000000000002A85000000000000000000000000000000000000010000002A850000010000002A850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000298500000000000000000000000000000000000001000000298500000100000029850000000000000040000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000200000004000000010000000000000000000000278500000000000000000000000000000000000001000000278500000100000027850000000000000080000000000000FFFFFFFFFFFFFFFF00000000440100005605000048010000000000000100000004000000010000000000000000000000228500000000000000000000000000000000000001000000228500000100000022850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000208500000000000000000000000000000000000001000000208500000100000020850000000000000080000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000001000000040000000100000000000000000000001F85000000000000000000000000000000000000010000001F850000010000001F850000000000000080000000000000FFFFFFFFFFFFFFFF00000000440100005605000048010000000000000100000004000000010000000000000000000000FFFFFFFF040000001B8500001C8500001D8500001E850000FFFF02000B004354616262656450616E650080000000000000000000005F0100005605000010020000000000004801000056050000F9010000000000004080004604000000FFFEFF084D0065006D006F007200790020003100000000001B85000001000000FFFFFFFFFFFFFFFFFFFEFF084D0065006D006F007200790020003200000000001C85000001000000FFFFFFFFFFFFFFFFFFFEFF084D0065006D006F007200790020003300000000001D85000001000000FFFFFFFFFFFFFFFFFFFEFF084D0065006D006F007200790020003400000000001E85000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFF1B85000001000000FFFFFFFF1B850000000000000040000000000000FFFFFFFFFFFFFFFF4C0400001800000050040000F9010000000000000200000004000000010000000000000000000000FFFFFFFF050000001A8500002385000024850000258500002685000001800040000000000000500400002F0000005605000010020000500400001800000056050000F9010000000000004040004605000000FFFEFF124D006100630072006F00200052006500670069007300740072006100740069006F006E00000000001A85000001000000FFFFFFFFFFFFFFFFFFFEFF0B52006500670069007300740065007200730020003100000000002385000001000000FFFFFFFFFFFFFFFFFFFEFF0B52006500670069007300740065007200730020003200000000002485000001000000FFFFFFFFFFFFFFFFFFFEFF0B52006500670069007300740065007200730020003300000000002585000001000000FFFFFFFFFFFFFFFFFFFEFF0B52006500670069007300740065007200730020003400000000002685000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFF1A85000001000000FFFFFFFF1A850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000178500000000000000000000000000000000000001000000178500000100000017850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000168500000000000000000000000000000000000001000000168500000100000016850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000158500000000000000000000000000000000000001000000158500000100000015850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000118500000000000000000000000000000000000001000000118500000100000011850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000108500000000000000000000000000000000000001000000108500000100000010850000000000000040000000000000FFFFFFFFFFFFFFFF58020000320000005C0200000C02000000000000020000000400000001000000C3FCFFFFB50000000F85000000000000000000000000000000000000010000000F850000010000000F850000000000000040000000000000FFFFFFFFFFFFFFFF4C0400001800000050040000F9010000000000000200000004000000010000000000000000000000FFFFFFFF020000000D8500001985000001800040000000000000500400002F0000005605000010020000500400001800000056050000F9010000000000004040004602000000FFFEFF0F4400650062007500670067006500720020004D006100630072006F007300000000000D85000001000000FFFFFFFFFFFFFFFFFFFEFF114D006100630072006F00200051007500690063006B006C00610075006E0063006800000000001985000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFF0D85000001000000FFFFFFFF0D850000000000000080000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000001000000040000000100000000000000000000000C85000000000000000000000000000000000000010000000C850000010000000C850000000000000080000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000001000000040000000100000000000000000000000B85000000000000000000000000000000000000010000000B850000010000000B850000000000000080000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000001000000040000000100000000000000000000000A85000000000000000000000000000000000000010000000A850000010000000A850000000000000010000000000000FFFFFFFFFFFFFFFF06010000180000000A010000F9010000000000000200000004000000010000000000000000000000FFFFFFFF03000000088500002D8500002E85000001800010000000000000000000002F0000000601000010020000000000001800000006010000F9010000000000004010004603000000FFFEFF0A430061006C006C00200053007400610063006B00000000000885000001000000FFFFFFFFFFFFFFFFFFFEFF0753007400610063006B0020003100000000002D85000001000000FFFFFFFFFFFFFFFFFFFEFF0753007400610063006B0020003200000000002E85000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFF0885000001000000FFFFFFFF08850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000078500000000000000000000000000000000000001000000078500000100000007850000000000000080000001000000FFFFFFFFFFFFFFFF00000000DB010000FE030000DF010000010000000100001004000000010000002BFEFFFF5C000000FFFFFFFF08000000068500000E850000128500001385000014850000288500002B850000358500000180008000000100000000000000F6010000FE030000C502000000000000DF010000FE030000AE020000000000004080005608000000FFFEFF054200750069006C006400010000000685000001000000FFFFFFFFFFFFFFFFFFFEFF094400650062007500670020004C006F006700010000000E85000001000000FFFFFFFFFFFFFFFFFFFEFF0C4400650063006C00610072006100740069006F006E007300000000001285000001000000FFFFFFFFFFFFFFFFFFFEFF0A5200650066006500720065006E00630065007300000000001385000001000000FFFFFFFFFFFFFFFFFFFEFF0D460069006E006400200049006E002000460069006C0065007300010000001485000001000000FFFFFFFFFFFFFFFFFFFEFF1541006D0062006900670075006F0075007300200044006500660069006E006900740069006F006E007300010000002885000001000000FFFFFFFFFFFFFFFFFFFEFF1153006F0075007200630065002000420072006F0077007300650020004C006F006700000000002B85000001000000FFFFFFFFFFFFFFFFFFFEFF0B54006F006F006C0020004F0075007400700075007400000000003585000001000000FFFFFFFFFFFFFFFF04000000000000000000000000000000000000000000000001000000FFFFFFFF0685000001000000FFFFFFFF06850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000058500000000000000000000000000000000000001000000058500000100000005850000000000000040000001000000FFFFFFFFFFFFFFFFFE0300003200000002040000AE02000001000000020000100400000001000000BDFCFFFFAF000000FFFFFFFF070000000485000018850000308500003685000037850000388500003985000001800040000001000000020400004900000056050000C5020000020400003200000056050000AE020000000000004040005607000000FFFEFF044100750074006F00000000000485000001000000FFFFFFFFFFFFFFFFFFFEFF064C006F00630061006C007300000000001885000001000000FFFFFFFFFFFFFFFFFFFEFF0A4C00690076006500200057006100740063006800000000003085000001000000FFFFFFFFFFFFFFFFFFFEFF075700610074006300680020003100010000003685000001000000FFFFFFFFFFFFFFFFFFFEFF075700610074006300680020003200000000003785000001000000FFFFFFFFFFFFFFFFFFFEFF075700610074006300680020003300000000003885000001000000FFFFFFFFFFFFFFFFFFFEFF075700610074006300680020003400000000003985000001000000FFFFFFFFFFFFFFFF03000000000000000000000000000000000000000000000001000000FFFFFFFF0485000001000000FFFFFFFF0485000003000000FFFF02001200434D756C746950616E654672616D65576E6400010084000000001700000006010000780100000000000000000000020000000000000009850000000000000000000000000000000000000100000009850000088000010084000000001700000022010000C800000000000000000000000200000000000000218500000000000000000000000000000000000001000000218500000880000100840000000017000000AE010000D800000000000000000000000200000000000000348500000000000000000000000000000000000001000000348500000000000000000000 + + + CMSIS-Pack + 00200000010000000100FFFF01001100434D4643546F6F6C426172427574746F6ED1840000020000000E000000FFFEFF00000000000000000000000000010000000100000000000000FFFEFF0A43004D005300490053002D005000610063006B0018000000 + + + 34048 + 0A0000000A0000006E0000006E000000 + 6704000000000000950400001A000000 + 8192 + 0 + 0 + 24 + 0 + + + 1 + + + Debug + 00200000010000000800FFFF01001100434D4643546F6F6C426172427574746F6E568600000200040018000000FFFEFF0000000000000000000000000001000000010000000180138600000200040019000000FFFEFF00000000000000000000000000010000000100000001805E860000020004001A000000FFFEFF000000000000000000000000000100000001000000018060860000020004001B000000FFFEFF00000000000000000000000000010000000100000001805D860000020004001C000000FFFEFF0000000000000000000000000001000000010000000180108600000200040015000000FFFEFF0000000000000000000000000001000000010000000180118600000200000016000000FFFEFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E148600000200040017000000FFFEFF205200650073006500740020007400680065002000640065006200750067006700650064002000700072006F006700720061006D000A00520065007300650074000000000000000000000000000100000001000000000000000000000001000000020009800000000000000400FFFFFFFFFFFEFF000000000000000000000000000100000001000000000000000000000001000000000009801986000000000000FFFFFFFFFFFEFF000100000000000000000000000100000001000000000000000000000001000000000000000000FFFEFF0544006500620075006700C6000000 + + + 34049 + 0A0000000A0000006E0000006E000000 + 51030000000000002D0400001A000000 + 8192 + 0 + 0 + 198 + 0 + + + 1 + + + Trace + 00200000010000000200FFFF01001100434D4643546F6F6C426172427574746F6E539200000000000080000000FFFEFF03450054004D0000000000000000000000000001000000010000000180549200000000040081000000FFFEFF03530057004F00000000000000000000000000010000000100000000000000FFFEFF05540072006100630065002F000000 + + + 34050 + 0A0000000A0000006E0000006E000000 + 2D04000000000000670400001A000000 + 8192 + 0 + 0 + 47 + 0 + + + 1 + + + Main + 00200000010000002100FFFF01001100434D4643546F6F6C426172427574746F6E00E10000000000005C000000FFFEFF000000000000000000000000000100000001000000018001E10000000000005D000000FFFEFF000000000000000000000000000100000001000000018003E10000000000005F000000FFFEFF0000000000000000000000000001000000010000000180008100000000000043000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018007E100000000000062000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018023E100000000040064000000FFFEFF000000000000000000000000000100000001000000018022E100000000040063000000FFFEFF000000000000000000000000000100000001000000018025E100000000000066000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001802BE100000000040069000000FFFEFF00000000000000000000000000010000000100000001802CE10000000004006A000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000FFFF01000D005061737465436F6D626F426F784281000000000000FFFFFFFFFFFEFF000000000000000000010000000000000001000000B400000002002050FFFFFFFFFFFEFF0096000000000000000800FFFEFF094500560045004E0054005F00530045004300FFFEFF115000720069006E0074004D0065006E00750041006C006C0050007200690063006500FFFEFF11630075007200720065006E0074005F00610062006F006E0065006D0065006E007400FFFEFF2155005300450052005F004D0045004E0055005F00530054004100520054005F0049004E0053004500520054005F0043004100520044005F004D004F004E0045005900FFFEFF0D5000720069006E00740047006F006C0064004D0065006E007500FFFEFF175000720069006E00740049006E007300650072007400420061006E006B0043006100720064004D0065006E007500FFFEFF04530054004F005000FFFEFF1F55005300450052005F004D0045004E0055005F00460049004E004900530048005F005000410059005F0042004F004E00550053005F00430041005200440000000000000000000000000000000000000000000000000000000000000000000180218100000000040055000000FFFEFF000000000000000000000000000100000001000000018024E100000000000065000000FFFEFF000000000000000000000000000100000001000000018028E100000000040067000000FFFEFF000000000000000000000000000100000001000000018029E100000000000068000000FFFEFF0000000000000000000000000001000000010000000180028100000000000044000000FFFEFF0000000000000000000000000001000000010000000180298100000000000059000000FFFEFF0000000000000000000000000001000000010000000180278100000000000057000000FFFEFF0000000000000000000000000001000000010000000180288100000000000058000000FFFEFF00000000000000000000000000010000000100000001801D8100000000000051000000FFFEFF00000000000000000000000000010000000100000001801E8100000000040052000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001800B8100000200000048000000FFFEFF00000000000000000000000000010000000100000001800C8100000200000049000000FFFEFF00000000000000000000000000010000000100000001805F860000000000005B000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001801F8100000200000053000000FFFEFF0000000000000000000000000001000000010000000180208100000200000054000000FFFEFF0000000000000000000000000001000000010000000180468100000200020042000000FFFEFF00000000000000000000000000010000000100000000000000FFFEFF044D00610069006E003B030000 + + + 34051 + 0A0000000A0000006E0000006E000000 + 0000000000000000510300001A000000 + 8192 + 0 + 0 + 827 + 0 + + + 1 + + + diff --git a/settings/sk-mlpc2368.dnx b/settings/sk-mlpc2368.dnx index 1872e83..e378e56 100644 --- a/settings/sk-mlpc2368.dnx +++ b/settings/sk-mlpc2368.dnx @@ -1,5 +1,20 @@ + + 0 + 1 + 90 + 1 + 1 + 1 + main + 0 + 50 + + + 0 + 1 + 0 0 @@ -15,23 +30,6 @@ 0 1 - - 0 - 1 - 90 - 1 - 1 - 1 - main - 0 - 50 - - - 0 - - - 0 - 1 @@ -42,17 +40,86 @@ 0 1 - - 0 - 1 - - - 0 - 0 - 10000000 0 1 + + 0 + C:\Program Files\IAR Systems\Embedded Workbench 9.0\arm\CONFIG\debugger\NXP\LPC2368.ddf + + + 2586745689 + + + _ 0 + _ 0 + + + 1 + 0 + + + 0 + + + _ 0 + _ 0 "" 0 "" 0 "" 0 "" 0 0 0 0 + _ 0 "" 0 "" 0 "" 0 "" 0 0 0 0 + 12 + 0 + _ 0 + _ 0 + + + 0 + + + mifaredata_t-bonus 4 0 + mifaredata_t-init 4 0 + + + uint32_t[10] 4 0 + + + {W}1:app_state.user_menu 3 0 + + + 0 + 1 + 0 + 0 + + + 0 + + + 1 + + + _ 0 + _ "" + + + 0 + 0 + + + _ 0 + _ "" + _ 0 + + + 0 + + + _ 1 "EMUL_CODE" "{$PROJ_DIR$\PROJECT\drivers\mfrc522\rfid-spi.c}.321.7" 0 0 1 "" 0 "" 0 + _ 1 "EMUL_CODE" "{$PROJ_DIR$\PROJECT\drivers\mfrc522\rfid-spi.c}.190.3" 0 0 1 "" 0 "" 0 + 2 + + + 0 + 0 + diff --git a/settings/sk-mlpc2368.wsdt b/settings/sk-mlpc2368.wsdt index 6a08ca5..374936b 100644 --- a/settings/sk-mlpc2368.wsdt +++ b/settings/sk-mlpc2368.wsdt @@ -1,4 +1,4 @@ - + @@ -8,8 +8,8 @@ - 18 - 1869 + 26 + 1307 2 0 @@ -50,7 +50,7 @@ 33054 0 33035 - 33037 + 33036 34399 0 33038 @@ -60,15 +60,18 @@ - 220 + 203 30 30 sk-mlpc2368 - sk-mlpc2368/OS sk-mlpc2368/PROJECT + sk-mlpc2368/PROJECT/app sk-mlpc2368/PROJECT/drivers + sk-mlpc2368/PROJECT/drivers/lcd + sk-mlpc2368/PROJECT/drivers/mfrc522 + sk-mlpc2368/PROJECT/menu @@ -83,11 +86,11 @@ 1 1 1 - 38000000090029810000020000001D8100000100000017810000010000001481000004000000008100001300000028E100000D000000E9800000010000000581000002000000218100000D000000 + 70020000170013860000010000002981000004000000108600000200000020810000010000000F810000010000001D8100000F00000017810000010000002881000002000000568600005D0000001481000005000000008100001600000028E100000D0000005E860000010000000E810000220200001F81000001000000E9800000010000001486000001000000118600000200000005810000020000004681000001000000218100000D0000000D810000020000005D86000001000000 - 0A000D8400000F84000008840000FFFFFFFF54840000328100001C810000098400000E84000030840000 - 02000B8100001B0000000D8100001D000000 + 0B000D8400000F84000008840000FFFFFFFF54840000328100001C81000009840000538400000E84000030840000 + 1300048400004D000000158100002800000007E100003C00000004E100003A0000000D8000001800000001E1000037000000068400004F000000178100002A0000001481000027000000008100001D00000003E10000390000000B8100001B00000000E100003600000041E10000460000001681000029000000518400005700000005E100003B0000000D8100001D00000002E1000038000000 0 @@ -108,7 +111,7 @@ 000000000000000022010000B1000000 32768 0 - 0 + 1 32767 0 @@ -118,8 +121,8 @@ 4294967295 - 000000004C03000080070000FD030000 - 000000008002000080070000E6030000 + 000000001A03000080070000FD030000 + 000000000303000080070000E6030000 4096 0 0 @@ -132,7 +135,7 @@ 34052 000000001700000022010000C8000000 - 04000000980200007C070000CC030000 + 040000001B0300007C070000CC030000 32768 0 0 @@ -150,9 +153,9 @@ _I0 - 610 + 600 40 - 1220 + 1229 20 2 @@ -162,9 +165,9 @@ 34048 - 000000001700000022010000C8000000 - 04000000980200007C070000CC030000 - 4096 + 7100000056020000C7050000F6020000 + 040000001B0300007C070000CC030000 + 32768 0 0 32767 @@ -175,9 +178,9 @@ 34056 - 000000001700000022010000C8000000 - 04000000980200007C07000017030000 - 4096 + 7100000056020000C7050000F6020000 + 040000001B0300007C070000CC030000 + 32768 0 0 32767 @@ -187,9 +190,9 @@ 0 - 667 + 666 95 - 1144 + 1142 2 0 @@ -197,9 +200,9 @@ 34057 - 000000001700000022010000C8000000 - 04000000980200007C07000017030000 - 4096 + 7100000056020000C7050000F6020000 + 040000001B0300007C070000CC030000 + 32768 0 0 32767 @@ -209,9 +212,9 @@ 0 - 667 + 666 95 - 1144 + 1142 2 0 @@ -220,8 +223,8 @@ 34058 000000001700000022010000C8000000 - 04000000980200007C070000CC030000 - 4096 + 040000001B0300007C070000CC030000 + 32768 0 0 32767 @@ -241,26 +244,26 @@ 67 100 444 - 246 + 516 34059 - 000000001700000022010000C8000000 - 04000000980200007C07000017030000 - 4096 + 7100000056020000C7050000F6020000 + 040000001B0300007C070000CC030000 + 32768 0 0 32767 0 - 0 + 1 - 667 + 666 95 - 1144 + 1142 2 0 @@ -268,9 +271,9 @@ 34060 - 000000001700000022010000C8000000 - 04000000980200007C07000017030000 - 4096 + 7100000056020000C7050000F6020000 + 040000001B0300007C070000CC030000 + 32768 0 0 32767 @@ -287,9 +290,9 @@ 34062 - 000000001700000022010000C8000000 - 04000000980200007C07000017030000 - 4096 + 7100000056020000C7050000F6020000 + 040000001B0300007C070000CC030000 + 32768 0 0 32767 @@ -307,7 +310,7 @@ 34053 000000001700000080020000A8000000 - 00000000000000008002000091000000 + 00000000C40000005605000055010000 32768 0 0 @@ -365,7 +368,7 @@ 000000000000000022010000B1000000 32768 0 - 0 + 1 32767 0 @@ -376,7 +379,7 @@ 34055 000000001700000022010000C8000000 - 000000000000000022010000B1000000 + 000000007F00000056050000C0000000 32768 0 0 @@ -405,7 +408,7 @@ 34061 000000001700000080020000A8000000 - 00000000000000008002000091000000 + 000000003A000000560500007B000000 32768 0 0 @@ -469,7 +472,7 @@ 34065 00000000170000000601000078010000 - 0000000032000000060100007C020000 + 000000003200000006010000FF020000 4096 0 0 @@ -480,7 +483,7 @@ 1 - 0000000012000000000000000010000001000000FFFFFFFFFFFFFFFF06010000320000000A0100007C020000010000000200001004000000010000000000000000000000118500000000000000000000000000000000000001000000118500000100000011850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000108500000000000000000000000000000000000001000000108500000100000010850000000000000080000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000001000000040000000100000000000000000000000F85000000000000000000000000000000000000010000000F850000010000000F850000000000000080000000000000FFFFFFFFFFFFFFFF000000000000000004000000040000000000000001000000040000000100000000000000000000000D85000000000000000000000000000000000000010000000D850000010000000D850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000078500000000000000000000000000000000000001000000078500000100000007850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000068500000000000000000000000000000000000001000000068500000100000006850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000058500000000000000000000000000000000000001000000058500000100000005850000000000000080000001000000FFFFFFFFFFFFFFFF000000007C02000080070000800200000100000001000010040000000100000006FDFFFF6F000000FFFFFFFF08000000048500000085000008850000098500000A8500000B8500000C8500000E850000FFFF02000B004354616262656450616E650080000001000000000000004C03000080070000FD030000000000008002000080070000E6030000000000004080005608000000FFFEFF054200750069006C006400010000000485000001000000FFFFFFFFFFFFFFFFFFFEFF094400650062007500670020004C006F006700010000000085000001000000FFFFFFFFFFFFFFFFFFFEFF0C4400650063006C00610072006100740069006F006E007300000000000885000001000000FFFFFFFFFFFFFFFFFFFEFF0A5200650066006500720065006E00630065007300000000000985000001000000FFFFFFFFFFFFFFFFFFFEFF0D460069006E006400200049006E002000460069006C0065007300010000000A85000001000000FFFFFFFFFFFFFFFFFFFEFF1541006D0062006900670075006F0075007300200044006500660069006E006900740069006F006E007300000000000B85000001000000FFFFFFFFFFFFFFFFFFFEFF1153006F0075007200630065002000420072006F0077007300650020004C006F006700000000000C85000001000000FFFFFFFFFFFFFFFFFFFEFF0B54006F006F006C0020004F0075007400700075007400000000000E85000001000000FFFFFFFFFFFFFFFF04000000000000000000000000000000000000000000000001000000FFFFFFFF0485000001000000FFFFFFFF04850000000000000080000000000000FFFFFFFFFFFFFFFF00000000000000000400000004000000000000000100000004000000010000000000000000000000038500000000000000000000000000000000000001000000038500000100000003850000000000000000000000000000 + 000000000A000000000000000010000001000000FFFFFFFFFFFFFFFF06010000320000000A010000FF020000010000000200001004000000010000000000000000000000118500000000000000000000000000000000000001000000118500000100000011850000000000000080000000000000FFFFFFFFFFFFFFFF0000000036000000560500003A0000000000000001000000040000000100000000000000000000000D85000000000000000000000000000000000000010000000D850000010000000D850000000000000080000000000000FFFFFFFFFFFFFFFF000000007B000000560500007F000000000000000100000004000000010000000000000000000000078500000000000000000000000000000000000001000000078500000100000007850000000000000080000000000000FFFFFFFFFFFFFFFF00000000C000000056050000C4000000000000000100000004000000010000000000000000000000058500000000000000000000000000000000000001000000058500000100000005850000000000000080000001000000FFFFFFFFFFFFFFFF00000000FF02000080070000030300000100000001000010040000000100000081FFFFFFAA010000FFFFFFFF08000000048500000A8500000085000008850000098500000B8500000C8500000E850000FFFF02000B004354616262656450616E650080000001000000000000001A03000080070000FD030000000000000303000080070000E6030000000000004080005608000000FFFEFF054200750069006C006400010000000485000001000000FFFFFFFFFFFFFFFFFFFEFF0D460069006E006400200049006E002000460069006C0065007300010000000A85000001000000FFFFFFFFFFFFFFFFFFFEFF094400650062007500670020004C006F006700010000000085000001000000FFFFFFFFFFFFFFFFFFFEFF0C4400650063006C00610072006100740069006F006E007300000000000885000001000000FFFFFFFFFFFFFFFFFFFEFF0A5200650066006500720065006E00630065007300000000000985000001000000FFFFFFFFFFFFFFFFFFFEFF1541006D0062006900670075006F0075007300200044006500660069006E006900740069006F006E007300010000000B85000001000000FFFFFFFFFFFFFFFFFFFEFF1153006F0075007200630065002000420072006F0077007300650020004C006F006700000000000C85000001000000FFFFFFFFFFFFFFFFFFFEFF0B54006F006F006C0020004F0075007400700075007400000000000E85000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFF0485000001000000FFFFFFFF0485000002000000FFFF02001200434D756C746950616E654672616D65576E6400010084000000001700000022010000C80000000000000000000000020000000000000006850000000000000000000000000000000000000100000006850000038000010084000000001700000022010000C800000000000000000000000200000000000000038500000000000000000000000000000000000001000000038500000000000000000000 CMSIS-Pack @@ -501,7 +504,7 @@ Main - 00200000010000002000FFFF01001100434D4643546F6F6C426172427574746F6E00E10000000000002F000000FFFEFF000000000000000000000000000100000001000000018001E100000000000030000000FFFEFF000000000000000000000000000100000001000000018003E100000000000032000000FFFEFF0000000000000000000000000001000000010000000180008100000000000016000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018007E100000000000035000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018023E100000000040037000000FFFEFF000000000000000000000000000100000001000000018022E100000000040036000000FFFEFF000000000000000000000000000100000001000000018025E100000000000039000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001802BE10000000000003C000000FFFEFF00000000000000000000000000010000000100000001802CE10000000004003D000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000FFFF01000D005061737465436F6D626F426F784281000000000000FFFFFFFFFFFEFF000100000000000000010000000000000001000000B400000002002050FFFFFFFFFFFEFF00960000000000000000000180218100000000040028000000FFFEFF000000000000000000000000000100000001000000018024E100000000000038000000FFFEFF000000000000000000000000000100000001000000018028E10000000004003A000000FFFEFF000000000000000000000000000100000001000000018029E10000000000003B000000FFFEFF0000000000000000000000000001000000010000000180028100000000000017000000FFFEFF000000000000000000000000000100000001000000018029810000000000002C000000FFFEFF000000000000000000000000000100000001000000018027810000000000002A000000FFFEFF000000000000000000000000000100000001000000018028810000000000002B000000FFFEFF00000000000000000000000000010000000100000001801D8100000000040024000000FFFEFF00000000000000000000000000010000000100000001801E8100000000040025000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001800B810000020004001B000000FFFEFF00000000000000000000000000010000000100000001800D810000020000001D000000FFFEFF00000000000000000000000000010000000100000001805F860000000000002E000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001800E810000020000001E000000FFFEFF00000000000000000000000000010000000100000001800F810000020000001F000000FFFEFF00000000000000000000000000010000000100000000000000FFFEFF044D00610069006E0024030000 + 00200000010000002000FFFF01001100434D4643546F6F6C426172427574746F6E00E10000000000002F000000FFFEFF000000000000000000000000000100000001000000018001E100000000000030000000FFFEFF000000000000000000000000000100000001000000018003E100000000040032000000FFFEFF0000000000000000000000000001000000010000000180008100000000000016000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018007E100000000040035000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000018023E100000000000037000000FFFEFF000000000000000000000000000100000001000000018022E100000000000036000000FFFEFF000000000000000000000000000100000001000000018025E100000000000039000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001802BE10000000004003C000000FFFEFF00000000000000000000000000010000000100000001802CE10000000004003D000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF000000000000000000000000000100000001000000FFFF01000D005061737465436F6D626F426F784281000000000400FFFFFFFFFFFEFF000000000000000000010000000000000001000000B400000002002050FFFFFFFFFFFEFF0096000000000000000C00FFFEFF03530045004300FFFEFF066E00740065006E006E006100FFFEFF067000720069006E0074006600FFFEFF197000630064005F0063006F006D006D0075006E00690063006100740065005F0074006900740068005F007000690063006300FFFEFF117000630064005F00630061006C00630075006C006100740065005F00630072006300FFFEFF175000720069006E00740049006E007300650072007400420061006E006B0043006100720064004D0065006E007500FFFEFF04530054004F005000FFFEFF144500560045004E0054005F00460049004E004900530048005F005000410059004D0045004E005400FFFEFF1E4500560045004E0054005F00460049004E004900530048005F005000410059004D0045004E0054005F00410042004F004E0045004D0045004E005400FFFEFF185000720069006E00740049006E00730065007200740042006F006E007500730043006100720064004D0065006E007500FFFEFF1B55005300450052005F004D0045004E0055005F0049004E0053004500520054005F0042004F004E00550053005F004300410052004400FFFEFF135000720069006E007400430061007200640050006100790069006E0067004D0065006E0075000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000180218100000000040028000000FFFEFF000000000000000000000000000100000001000000018024E100000000040038000000FFFEFF000000000000000000000000000100000001000000018028E10000000004003A000000FFFEFF000000000000000000000000000100000001000000018029E10000000004003B000000FFFEFF0000000000000000000000000001000000010000000180028100000000040017000000FFFEFF000000000000000000000000000100000001000000018029810000000004002C000000FFFEFF000000000000000000000000000100000001000000018027810000000004002A000000FFFEFF000000000000000000000000000100000001000000018028810000000004002B000000FFFEFF00000000000000000000000000010000000100000001801D8100000000040024000000FFFEFF00000000000000000000000000010000000100000001801E8100000000040025000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001800B810000020004001B000000FFFEFF00000000000000000000000000010000000100000001800C810000020000001C000000FFFEFF00000000000000000000000000010000000100000001805F860000000000002E000000FFFEFF00000000000000000000000000010000000100000001800000000001000000FFFFFFFFFFFEFF00000000000000000000000000010000000100000001800E810000020000001E000000FFFEFF00000000000000000000000000010000000100000001800F810000020000001F000000FFFEFF00000000000000000000000000010000000100000000000000FFFEFF044D00610069006E0024030000 34050 @@ -539,7 +542,7 @@ - 010000000300000001000000000000000000000001000000010000000200000000000000010000000100000000000000280000002800000001000000010000000000000001000000FFFEFF262400570053005F0044004900520024005C00500052004F004A004500430054005C0064007200690076006500720073005C006D006F00640065006D005C006D006F00640065006D002E00680001000000FFFF010014004966436F6E74656E7453746F72616765496D706CFFFEFF00FFFEFFFF27013C003F0078006D006C002000760065007200730069006F006E003D00220031002E0030002200200065006E0063006F00640069006E0067003D0022005500540046002D00380022003F003E000A003C0052006F006F0074003E000A0020002000200020003C004E0075006D0052006F00770073003E0031003C002F004E0075006D0052006F00770073003E000A0020002000200020003C004E0075006D0043006F006C0073003E0031003C002F004E0075006D0043006F006C0073003E000A0020002000200020003C00580050006F0073003E0030003C002F00580050006F0073003E000A0020002000200020003C00590050006F0073003E0030003C002F00590050006F0073003E000A0020002000200020003C00530065006C00530074006100720074003E0030003C002F00530065006C00530074006100720074003E000A0020002000200020003C00530065006C0045006E0064003E0030003C002F00530065006C0045006E0064003E000A0020002000200020003C00580050006F00730032003E0030003C002F00580050006F00730032003E000A0020002000200020003C00590050006F00730032003E00330030003C002F00590050006F00730032003E000A0020002000200020003C00530065006C005300740061007200740032003E0031003400360032003C002F00530065006C005300740061007200740032003E000A0020002000200020003C00530065006C0045006E00640032003E0031003400360032003C002F00530065006C0045006E00640032003E000A003C002F0052006F006F0074003E000A00FFFEFF076D006F00640065006D002E00680000000000FFFFFFFFFFFFFFFF0000000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000001000000020000000A010000490000008007000093020000 + 010000000300000001000000000000000000000001000000010000000200000000000000010000000100000000000000280000002800000001000000150000001200000001000000FFFEFF1F2400570053005F0044004900520024005C00500052004F004A004500430054005C006100700070005C006100700070005F0076006C00610064002E00630001000000FFFF010014004966436F6E74656E7453746F72616765496D706CFFFEFF00FFFEFFFF23013C003F0078006D006C002000760065007200730069006F006E003D00220031002E0030002200200065006E0063006F00640069006E0067003D0022005500540046002D00380022003F003E000A003C0052006F006F0074003E000A0020002000200020003C004E0075006D0052006F00770073003E0031003C002F004E0075006D0052006F00770073003E000A0020002000200020003C004E0075006D0043006F006C0073003E0031003C002F004E0075006D0043006F006C0073003E000A0020002000200020003C00580050006F0073003E0030003C002F00580050006F0073003E000A0020002000200020003C00590050006F0073003E0030003C002F00590050006F0073003E000A0020002000200020003C00530065006C00530074006100720074003E0030003C002F00530065006C00530074006100720074003E000A0020002000200020003C00530065006C0045006E0064003E0030003C002F00530065006C0045006E0064003E000A0020002000200020003C00580050006F00730032003E0030003C002F00580050006F00730032003E000A0020002000200020003C00590050006F00730032003E0031003400380039003C002F00590050006F00730032003E000A0020002000200020003C00530065006C005300740061007200740032003E0030003C002F00530065006C005300740061007200740032003E000A0020002000200020003C00530065006C0045006E00640032003E0030003C002F00530065006C0045006E00640032003E000A003C002F0052006F006F0074003E000A00FFFEFF0A6100700070005F0076006C00610064002E00630000000000FFFFFFFFFFFFFFFFFFFEFF2B2400570053005F0044004900520024005C00500052004F004A004500430054005C0064007200690076006500720073005C006D006600720063003500320032005C0072006600690064002D007300700069002E006800010000000180FFFEFF00FFFEFFFF2A013C003F0078006D006C002000760065007200730069006F006E003D00220031002E0030002200200065006E0063006F00640069006E0067003D0022005500540046002D00380022003F003E000A003C0052006F006F0074003E000A0020002000200020003C004E0075006D0052006F00770073003E0031003C002F004E0075006D0052006F00770073003E000A0020002000200020003C004E0075006D0043006F006C0073003E0031003C002F004E0075006D0043006F006C0073003E000A0020002000200020003C00580050006F0073003E0030003C002F00580050006F0073003E000A0020002000200020003C00590050006F0073003E0030003C002F00590050006F0073003E000A0020002000200020003C00530065006C00530074006100720074003E0030003C002F00530065006C00530074006100720074003E000A0020002000200020003C00530065006C0045006E0064003E0030003C002F00530065006C0045006E0064003E000A0020002000200020003C00580050006F00730032003E0030003C002F00580050006F00730032003E000A0020002000200020003C00590050006F00730032003E003100370039003C002F00590050006F00730032003E000A0020002000200020003C00530065006C005300740061007200740032003E00310031003300350033003C002F00530065006C005300740061007200740032003E000A0020002000200020003C00530065006C0045006E00640032003E00310031003300360034003C002F00530065006C0045006E00640032003E000A003C002F0052006F006F0074003E000A00FFFEFF0A72006600690064002D007300700069002E00680000000000FFFFFFFFFFFFFFFFFFFEFF152400570053005F0044004900520024005C004F0053005C006100700070005C006100700070002E006300010000000180FFFEFF00FFFEFFFF27013C003F0078006D006C002000760065007200730069006F006E003D00220031002E0030002200200065006E0063006F00640069006E0067003D0022005500540046002D00380022003F003E000A003C0052006F006F0074003E000A0020002000200020003C004E0075006D0052006F00770073003E0031003C002F004E0075006D0052006F00770073003E000A0020002000200020003C004E0075006D0043006F006C0073003E0031003C002F004E0075006D0043006F006C0073003E000A0020002000200020003C00580050006F0073003E0030003C002F00580050006F0073003E000A0020002000200020003C00590050006F0073003E0030003C002F00590050006F0073003E000A0020002000200020003C00530065006C00530074006100720074003E0030003C002F00530065006C00530074006100720074003E000A0020002000200020003C00530065006C0045006E0064003E0030003C002F00530065006C0045006E0064003E000A0020002000200020003C00580050006F00730032003E0030003C002F00580050006F00730032003E000A0020002000200020003C00590050006F00730032003E00330035003C002F00590050006F00730032003E000A0020002000200020003C00530065006C005300740061007200740032003E0031003200310036003C002F00530065006C005300740061007200740032003E000A0020002000200020003C00530065006C0045006E00640032003E0031003200310036003C002F00530065006C0045006E00640032003E000A003C002F0052006F006F0074003E000A00FFFEFF056100700070002E00630000000000FFFFFFFFFFFFFFFFFFFEFF2E2400570053005F0044004900520024005C00500052004F004A004500430054005C0064007200690076006500720073005C006D006600720063003500320032005C006D0066007200630035003200320064006100740061002E006300010000000180FFFEFF00FFFEFFFF22013C003F0078006D006C002000760065007200730069006F006E003D00220031002E0030002200200065006E0063006F00640069006E0067003D0022005500540046002D00380022003F003E000A003C0052006F006F0074003E000A0020002000200020003C004E0075006D0052006F00770073003E0031003C002F004E0075006D0052006F00770073003E000A0020002000200020003C004E0075006D0043006F006C0073003E0031003C002F004E0075006D0043006F006C0073003E000A0020002000200020003C00580050006F0073003E0030003C002F00580050006F0073003E000A0020002000200020003C00590050006F0073003E0030003C002F00590050006F0073003E000A0020002000200020003C00530065006C00530074006100720074003E0030003C002F00530065006C00530074006100720074003E000A0020002000200020003C00530065006C0045006E0064003E0030003C002F00530065006C0045006E0064003E000A0020002000200020003C00580050006F00730032003E0030003C002F00580050006F00730032003E000A0020002000200020003C00590050006F00730032003E003100360035003C002F00590050006F00730032003E000A0020002000200020003C00530065006C005300740061007200740032003E0030003C002F00530065006C005300740061007200740032003E000A0020002000200020003C00530065006C0045006E00640032003E0030003C002F00530065006C0045006E00640032003E000A003C002F0052006F006F0074003E000A00FFFEFF0D6D0066007200630035003200320064006100740061002E00630000000000FFFFFFFFFFFFFFFFFFFEFF2E2400570053005F0044004900520024005C00500052004F004A004500430054005C0064007200690076006500720073005C006D006600720063003500320032005C006D0066007200630035003200320064006100740061002E006800010000000180FFFEFF00FFFEFFFF20013C003F0078006D006C002000760065007200730069006F006E003D00220031002E0030002200200065006E0063006F00640069006E0067003D0022005500540046002D00380022003F003E000A003C0052006F006F0074003E000A0020002000200020003C004E0075006D0052006F00770073003E0031003C002F004E0075006D0052006F00770073003E000A0020002000200020003C004E0075006D0043006F006C0073003E0031003C002F004E0075006D0043006F006C0073003E000A0020002000200020003C00580050006F0073003E0030003C002F00580050006F0073003E000A0020002000200020003C00590050006F0073003E0030003C002F00590050006F0073003E000A0020002000200020003C00530065006C00530074006100720074003E0030003C002F00530065006C00530074006100720074003E000A0020002000200020003C00530065006C0045006E0064003E0030003C002F00530065006C0045006E0064003E000A0020002000200020003C00580050006F00730032003E0030003C002F00580050006F00730032003E000A0020002000200020003C00590050006F00730032003E0030003C002F00590050006F00730032003E000A0020002000200020003C00530065006C005300740061007200740032003E0030003C002F00530065006C005300740061007200740032003E000A0020002000200020003C00530065006C0045006E00640032003E0030003C002F00530065006C0045006E00640032003E000A003C002F0052006F006F0074003E000A00FFFEFF0D6D0066007200630035003200320064006100740061002E00680000000000FFFFFFFFFFFFFFFFFFFEFF202400570053005F0044004900520024005C00500052004F004A004500430054005C006D0065006E0075005C006D0065006E00750064006500730063002E006300010000000180FFFEFF00FFFEFFFF2B013C003F0078006D006C002000760065007200730069006F006E003D00220031002E0030002200200065006E0063006F00640069006E0067003D0022005500540046002D00380022003F003E000A003C0052006F006F0074003E000A0020002000200020003C004E0075006D0052006F00770073003E0031003C002F004E0075006D0052006F00770073003E000A0020002000200020003C004E0075006D0043006F006C0073003E0031003C002F004E0075006D0043006F006C0073003E000A0020002000200020003C00580050006F0073003E0030003C002F00580050006F0073003E000A0020002000200020003C00590050006F0073003E0030003C002F00590050006F0073003E000A0020002000200020003C00530065006C00530074006100720074003E0030003C002F00530065006C00530074006100720074003E000A0020002000200020003C00530065006C0045006E0064003E0030003C002F00530065006C0045006E0064003E000A0020002000200020003C00580050006F00730032003E0030003C002F00580050006F00730032003E000A0020002000200020003C00590050006F00730032003E0032003300360036003C002F00590050006F00730032003E000A0020002000200020003C00530065006C005300740061007200740032003E00390039003300300039003C002F00530065006C005300740061007200740032003E000A0020002000200020003C00530065006C0045006E00640032003E00390039003300300039003C002F00530065006C0045006E00640032003E000A003C002F0052006F006F0074003E000A00FFFEFF0A6D0065006E00750064006500730063002E00630000000000FFFFFFFFFFFFFFFFFFFEFF202400570053005F0044004900520024005C00500052004F004A004500430054005C0064006100740061005C00640061007400610064006500730063002E006300010000000180FFFEFF00FFFEFFFF22013C003F0078006D006C002000760065007200730069006F006E003D00220031002E0030002200200065006E0063006F00640069006E0067003D0022005500540046002D00380022003F003E000A003C0052006F006F0074003E000A0020002000200020003C004E0075006D0052006F00770073003E0031003C002F004E0075006D0052006F00770073003E000A0020002000200020003C004E0075006D0043006F006C0073003E0031003C002F004E0075006D0043006F006C0073003E000A0020002000200020003C00580050006F0073003E0030003C002F00580050006F0073003E000A0020002000200020003C00590050006F0073003E0030003C002F00590050006F0073003E000A0020002000200020003C00530065006C00530074006100720074003E0030003C002F00530065006C00530074006100720074003E000A0020002000200020003C00530065006C0045006E0064003E0030003C002F00530065006C0045006E0064003E000A0020002000200020003C00580050006F00730032003E0030003C002F00580050006F00730032003E000A0020002000200020003C00590050006F00730032003E003700310036003C002F00590050006F00730032003E000A0020002000200020003C00530065006C005300740061007200740032003E0030003C002F00530065006C005300740061007200740032003E000A0020002000200020003C00530065006C0045006E00640032003E0030003C002F00530065006C0045006E00640032003E000A003C002F0052006F006F0074003E000A00FFFEFF0A640061007400610064006500730063002E00630000000000FFFFFFFFFFFFFFFFFFFEFF1F2400570053005F0044004900520024005C00500052004F004A004500430054005C006100700070005C006100700070005F0073006500720076002E006800010000000180FFFEFF00FFFEFFFF22013C003F0078006D006C002000760065007200730069006F006E003D00220031002E0030002200200065006E0063006F00640069006E0067003D0022005500540046002D00380022003F003E000A003C0052006F006F0074003E000A0020002000200020003C004E0075006D0052006F00770073003E0031003C002F004E0075006D0052006F00770073003E000A0020002000200020003C004E0075006D0043006F006C0073003E0031003C002F004E0075006D0043006F006C0073003E000A0020002000200020003C00580050006F0073003E0030003C002F00580050006F0073003E000A0020002000200020003C00590050006F0073003E0030003C002F00590050006F0073003E000A0020002000200020003C00530065006C00530074006100720074003E0030003C002F00530065006C00530074006100720074003E000A0020002000200020003C00530065006C0045006E0064003E0030003C002F00530065006C0045006E0064003E000A0020002000200020003C00580050006F00730032003E0030003C002F00580050006F00730032003E000A0020002000200020003C00590050006F00730032003E003100310033003C002F00590050006F00730032003E000A0020002000200020003C00530065006C005300740061007200740032003E0030003C002F00530065006C005300740061007200740032003E000A0020002000200020003C00530065006C0045006E00640032003E0030003C002F00530065006C0045006E00640032003E000A003C002F0052006F006F0074003E000A00FFFEFF0A6100700070005F0073006500720076002E00680000000000FFFFFFFFFFFFFFFFFFFEFF1C2400570053005F0044004900520024005C00500052004F004A004500430054005C0064006100740061005C0064006100740061002E006300010000000180FFFEFF00FFFEFFFF28013C003F0078006D006C002000760065007200730069006F006E003D00220031002E0030002200200065006E0063006F00640069006E0067003D0022005500540046002D00380022003F003E000A003C0052006F006F0074003E000A0020002000200020003C004E0075006D0052006F00770073003E0031003C002F004E0075006D0052006F00770073003E000A0020002000200020003C004E0075006D0043006F006C0073003E0031003C002F004E0075006D0043006F006C0073003E000A0020002000200020003C00580050006F0073003E0030003C002F00580050006F0073003E000A0020002000200020003C00590050006F0073003E0030003C002F00590050006F0073003E000A0020002000200020003C00530065006C00530074006100720074003E0030003C002F00530065006C00530074006100720074003E000A0020002000200020003C00530065006C0045006E0064003E0030003C002F00530065006C0045006E0064003E000A0020002000200020003C00580050006F00730032003E0030003C002F00580050006F00730032003E000A0020002000200020003C00590050006F00730032003E003300320034003C002F00590050006F00730032003E000A0020002000200020003C00530065006C005300740061007200740032003E0039003700370037003C002F00530065006C005300740061007200740032003E000A0020002000200020003C00530065006C0045006E00640032003E0039003700370037003C002F00530065006C0045006E00640032003E000A003C002F0052006F006F0074003E000A00FFFEFF0664006100740061002E00630000000000FFFFFFFFFFFFFFFFFFFEFF202400570053005F0044004900520024005C00500052004F004A004500430054005C00730065007200760069006300650073005C00740069006D0065002E006300010000000180FFFEFF00FFFEFFFF22013C003F0078006D006C002000760065007200730069006F006E003D00220031002E0030002200200065006E0063006F00640069006E0067003D0022005500540046002D00380022003F003E000A003C0052006F006F0074003E000A0020002000200020003C004E0075006D0052006F00770073003E0031003C002F004E0075006D0052006F00770073003E000A0020002000200020003C004E0075006D0043006F006C0073003E0031003C002F004E0075006D0043006F006C0073003E000A0020002000200020003C00580050006F0073003E0030003C002F00580050006F0073003E000A0020002000200020003C00590050006F0073003E0030003C002F00590050006F0073003E000A0020002000200020003C00530065006C00530074006100720074003E0030003C002F00530065006C00530074006100720074003E000A0020002000200020003C00530065006C0045006E0064003E0030003C002F00530065006C0045006E0064003E000A0020002000200020003C00580050006F00730032003E0030003C002F00580050006F00730032003E000A0020002000200020003C00590050006F00730032003E003100320038003C002F00590050006F00730032003E000A0020002000200020003C00530065006C005300740061007200740032003E0030003C002F00530065006C005300740061007200740032003E000A0020002000200020003C00530065006C0045006E00640032003E0030003C002F00530065006C0045006E00640032003E000A003C002F0052006F006F0074003E000A00FFFEFF06740069006D0065002E00630000000000FFFFFFFFFFFFFFFFFFFEFF1F2400570053005F0044004900520024005C00500052004F004A004500430054005C006100700070005C006100700070005F0073006500720076002E006300010000000180FFFEFF00FFFEFFFF2B013C003F0078006D006C002000760065007200730069006F006E003D00220031002E0030002200200065006E0063006F00640069006E0067003D0022005500540046002D00380022003F003E000A003C0052006F006F0074003E000A0020002000200020003C004E0075006D0052006F00770073003E0031003C002F004E0075006D0052006F00770073003E000A0020002000200020003C004E0075006D0043006F006C0073003E0031003C002F004E0075006D0043006F006C0073003E000A0020002000200020003C00580050006F0073003E0030003C002F00580050006F0073003E000A0020002000200020003C00590050006F0073003E0030003C002F00590050006F0073003E000A0020002000200020003C00530065006C00530074006100720074003E0030003C002F00530065006C00530074006100720074003E000A0020002000200020003C00530065006C0045006E0064003E0030003C002F00530065006C0045006E0064003E000A0020002000200020003C00580050006F00730032003E0030003C002F00580050006F00730032003E000A0020002000200020003C00590050006F00730032003E0033003000350035003C002F00590050006F00730032003E000A0020002000200020003C00530065006C005300740061007200740032003E00390039003300310031003C002F00530065006C005300740061007200740032003E000A0020002000200020003C00530065006C0045006E00640032003E00390039003300310031003C002F00530065006C0045006E00640032003E000A003C002F0052006F006F0074003E000A00FFFEFF0A6100700070005F0073006500720076002E00630000000000FFFFFFFFFFFFFFFFFFFEFF1E2400570053005F0044004900520024005C00500052004F004A004500430054005C006100700070005C006A006F00750072006E0061006C002E006300010000000180FFFEFF00FFFEFFFF22013C003F0078006D006C002000760065007200730069006F006E003D00220031002E0030002200200065006E0063006F00640069006E0067003D0022005500540046002D00380022003F003E000A003C0052006F006F0074003E000A0020002000200020003C004E0075006D0052006F00770073003E0031003C002F004E0075006D0052006F00770073003E000A0020002000200020003C004E0075006D0043006F006C0073003E0031003C002F004E0075006D0043006F006C0073003E000A0020002000200020003C00580050006F0073003E0030003C002F00580050006F0073003E000A0020002000200020003C00590050006F0073003E0030003C002F00590050006F0073003E000A0020002000200020003C00530065006C00530074006100720074003E0030003C002F00530065006C00530074006100720074003E000A0020002000200020003C00530065006C0045006E0064003E0030003C002F00530065006C0045006E0064003E000A0020002000200020003C00580050006F00730032003E0030003C002F00580050006F00730032003E000A0020002000200020003C00590050006F00730032003E003400340036003C002F00590050006F00730032003E000A0020002000200020003C00530065006C005300740061007200740032003E0030003C002F00530065006C005300740061007200740032003E000A0020002000200020003C00530065006C0045006E00640032003E0030003C002F00530065006C0045006E00640032003E000A003C002F0052006F006F0074003E000A00FFFEFF096A006F00750072006E0061006C002E00630000000000FFFFFFFFFFFFFFFFFFFEFF202400570053005F0044004900520024005C00500052004F004A004500430054005C0064006100740061005C006600720061006D005F006D00610070002E006800010000000180FFFEFF00FFFEFFFF21013C003F0078006D006C002000760065007200730069006F006E003D00220031002E0030002200200065006E0063006F00640069006E0067003D0022005500540046002D00380022003F003E000A003C0052006F006F0074003E000A0020002000200020003C004E0075006D0052006F00770073003E0031003C002F004E0075006D0052006F00770073003E000A0020002000200020003C004E0075006D0043006F006C0073003E0031003C002F004E0075006D0043006F006C0073003E000A0020002000200020003C00580050006F0073003E0030003C002F00580050006F0073003E000A0020002000200020003C00590050006F0073003E0030003C002F00590050006F0073003E000A0020002000200020003C00530065006C00530074006100720074003E0030003C002F00530065006C00530074006100720074003E000A0020002000200020003C00530065006C0045006E0064003E0030003C002F00530065006C0045006E0064003E000A0020002000200020003C00580050006F00730032003E0030003C002F00580050006F00730032003E000A0020002000200020003C00590050006F00730032003E00310035003C002F00590050006F00730032003E000A0020002000200020003C00530065006C005300740061007200740032003E0030003C002F00530065006C005300740061007200740032003E000A0020002000200020003C00530065006C0045006E00640032003E0030003C002F00530065006C0045006E00640032003E000A003C002F0052006F006F0074003E000A00FFFEFF0A6600720061006D005F006D00610070002E00680000000000FFFFFFFFFFFFFFFFFFFEFF1E2400570053005F0044004900520024005C00500052004F004A004500430054005C006100700070005C006A006F00750072006E0061006C002E006800010000000180FFFEFF00FFFEFFFF22013C003F0078006D006C002000760065007200730069006F006E003D00220031002E0030002200200065006E0063006F00640069006E0067003D0022005500540046002D00380022003F003E000A003C0052006F006F0074003E000A0020002000200020003C004E0075006D0052006F00770073003E0031003C002F004E0075006D0052006F00770073003E000A0020002000200020003C004E0075006D0043006F006C0073003E0031003C002F004E0075006D0043006F006C0073003E000A0020002000200020003C00580050006F0073003E0030003C002F00580050006F0073003E000A0020002000200020003C00590050006F0073003E0030003C002F00590050006F0073003E000A0020002000200020003C00530065006C00530074006100720074003E0030003C002F00530065006C00530074006100720074003E000A0020002000200020003C00530065006C0045006E0064003E0030003C002F00530065006C0045006E0064003E000A0020002000200020003C00580050006F00730032003E0030003C002F00580050006F00730032003E000A0020002000200020003C00590050006F00730032003E003100330034003C002F00590050006F00730032003E000A0020002000200020003C00530065006C005300740061007200740032003E0030003C002F00530065006C005300740061007200740032003E000A0020002000200020003C00530065006C0045006E00640032003E0030003C002F00530065006C0045006E00640032003E000A003C002F0052006F006F0074003E000A00FFFEFF096A006F00750072006E0061006C002E00680000000000FFFFFFFFFFFFFFFFFFFEFF202400570053005F0044004900520024005C00500052004F004A004500430054005C0064006100740061005C00640061007400610064006500730063002E006800010000000180FFFEFF00FFFEFFFF20013C003F0078006D006C002000760065007200730069006F006E003D00220031002E0030002200200065006E0063006F00640069006E0067003D0022005500540046002D00380022003F003E000A003C0052006F006F0074003E000A0020002000200020003C004E0075006D0052006F00770073003E0031003C002F004E0075006D0052006F00770073003E000A0020002000200020003C004E0075006D0043006F006C0073003E0031003C002F004E0075006D0043006F006C0073003E000A0020002000200020003C00580050006F0073003E0030003C002F00580050006F0073003E000A0020002000200020003C00590050006F0073003E0030003C002F00590050006F0073003E000A0020002000200020003C00530065006C00530074006100720074003E0030003C002F00530065006C00530074006100720074003E000A0020002000200020003C00530065006C0045006E0064003E0030003C002F00530065006C0045006E0064003E000A0020002000200020003C00580050006F00730032003E0030003C002F00580050006F00730032003E000A0020002000200020003C00590050006F00730032003E0030003C002F00590050006F00730032003E000A0020002000200020003C00530065006C005300740061007200740032003E0030003C002F00530065006C005300740061007200740032003E000A0020002000200020003C00530065006C0045006E00640032003E0030003C002F00530065006C0045006E00640032003E000A003C002F0052006F006F0074003E000A00FFFEFF0A640061007400610064006500730063002E00680000000000FFFFFFFFFFFFFFFFFFFEFF212400570053005F0044004900520024005C00500052004F004A004500430054005C006100700070005C006D006F00640065006D005F007400610073006B002E006300010000000180FFFEFF00FFFEFFFF2A013C003F0078006D006C002000760065007200730069006F006E003D00220031002E0030002200200065006E0063006F00640069006E0067003D0022005500540046002D00380022003F003E000A003C0052006F006F0074003E000A0020002000200020003C004E0075006D0052006F00770073003E0031003C002F004E0075006D0052006F00770073003E000A0020002000200020003C004E0075006D0043006F006C0073003E0031003C002F004E0075006D0043006F006C0073003E000A0020002000200020003C00580050006F0073003E0030003C002F00580050006F0073003E000A0020002000200020003C00590050006F0073003E0030003C002F00590050006F0073003E000A0020002000200020003C00530065006C00530074006100720074003E0030003C002F00530065006C00530074006100720074003E000A0020002000200020003C00530065006C0045006E0064003E0030003C002F00530065006C0045006E0064003E000A0020002000200020003C00580050006F00730032003E0030003C002F00580050006F00730032003E000A0020002000200020003C00590050006F00730032003E003500390037003C002F00590050006F00730032003E000A0020002000200020003C00530065006C005300740061007200740032003E00310039003100340032003C002F00530065006C005300740061007200740032003E000A0020002000200020003C00530065006C0045006E00640032003E00310039003100340032003C002F00530065006C0045006E00640032003E000A003C002F0052006F006F0074003E000A00FFFEFF0C6D006F00640065006D005F007400610073006B002E00630000000000FFFFFFFFFFFFFFFFFFFEFF1F2400570053005F0044004900520024005C00500052004F004A004500430054005C006100700070005C007400650072006D005F00740073006B002E006300010000000180FFFEFF00FFFEFFFF24013C003F0078006D006C002000760065007200730069006F006E003D00220031002E0030002200200065006E0063006F00640069006E0067003D0022005500540046002D00380022003F003E000A003C0052006F006F0074003E000A0020002000200020003C004E0075006D0052006F00770073003E0031003C002F004E0075006D0052006F00770073003E000A0020002000200020003C004E0075006D0043006F006C0073003E0031003C002F004E0075006D0043006F006C0073003E000A0020002000200020003C00580050006F0073003E0030003C002F00580050006F0073003E000A0020002000200020003C00590050006F0073003E0030003C002F00590050006F0073003E000A0020002000200020003C00530065006C00530074006100720074003E0030003C002F00530065006C00530074006100720074003E000A0020002000200020003C00530065006C0045006E0064003E0030003C002F00530065006C0045006E0064003E000A0020002000200020003C00580050006F00730032003E0030003C002F00580050006F00730032003E000A0020002000200020003C00590050006F00730032003E0030003C002F00590050006F00730032003E000A0020002000200020003C00530065006C005300740061007200740032003E003200370031003C002F00530065006C005300740061007200740032003E000A0020002000200020003C00530065006C0045006E00640032003E003200370031003C002F00530065006C0045006E00640032003E000A003C002F0052006F006F0074003E000A00FFFEFF0A7400650072006D005F00740073006B002E00630000000000FFFFFFFFFFFFFFFFFFFEFF1C2400570053005F0044004900520024005C00500052004F004A004500430054005C006D0065006E0075005C006D0065006E0075002E006300010000000180FFFEFF00FFFEFFFF2A013C003F0078006D006C002000760065007200730069006F006E003D00220031002E0030002200200065006E0063006F00640069006E0067003D0022005500540046002D00380022003F003E000A003C0052006F006F0074003E000A0020002000200020003C004E0075006D0052006F00770073003E0031003C002F004E0075006D0052006F00770073003E000A0020002000200020003C004E0075006D0043006F006C0073003E0031003C002F004E0075006D0043006F006C0073003E000A0020002000200020003C00580050006F0073003E0030003C002F00580050006F0073003E000A0020002000200020003C00590050006F0073003E0030003C002F00590050006F0073003E000A0020002000200020003C00530065006C00530074006100720074003E0030003C002F00530065006C00530074006100720074003E000A0020002000200020003C00530065006C0045006E0064003E0030003C002F00530065006C0045006E0064003E000A0020002000200020003C00580050006F00730032003E0030003C002F00580050006F00730032003E000A0020002000200020003C00590050006F00730032003E003700300034003C002F00590050006F00730032003E000A0020002000200020003C00530065006C005300740061007200740032003E00320030003700300034003C002F00530065006C005300740061007200740032003E000A0020002000200020003C00530065006C0045006E00640032003E00320030003700300034003C002F00530065006C0045006E00640032003E000A003C002F0052006F006F0074003E000A00FFFEFF066D0065006E0075002E00630000000000FFFFFFFFFFFFFFFFFFFEFF1A2400570053005F0044004900520024005C00500052004F004A004500430054005C00760065007200730069006F006E002E006800010000000180FFFEFF00FFFEFFFF24013C003F0078006D006C002000760065007200730069006F006E003D00220031002E0030002200200065006E0063006F00640069006E0067003D0022005500540046002D00380022003F003E000A003C0052006F006F0074003E000A0020002000200020003C004E0075006D0052006F00770073003E0031003C002F004E0075006D0052006F00770073003E000A0020002000200020003C004E0075006D0043006F006C0073003E0031003C002F004E0075006D0043006F006C0073003E000A0020002000200020003C00580050006F0073003E0030003C002F00580050006F0073003E000A0020002000200020003C00590050006F0073003E0030003C002F00590050006F0073003E000A0020002000200020003C00530065006C00530074006100720074003E0030003C002F00530065006C00530074006100720074003E000A0020002000200020003C00530065006C0045006E0064003E0030003C002F00530065006C0045006E0064003E000A0020002000200020003C00580050006F00730032003E0030003C002F00580050006F00730032003E000A0020002000200020003C00590050006F00730032003E0030003C002F00590050006F00730032003E000A0020002000200020003C00530065006C005300740061007200740032003E003100380038003C002F00530065006C005300740061007200740032003E000A0020002000200020003C00530065006C0045006E00640032003E003100380038003C002F00530065006C0045006E00640032003E000A003C002F0052006F006F0074003E000A00FFFEFF09760065007200730069006F006E002E00680000000000FFFFFFFFFFFFFFFFFFFEFF1E2400570053005F0044004900520024005C00500052004F004A004500430054005C00730065007200760069006300650073005C00660072002E006800010000000180FFFEFF00FFFEFFFF24013C003F0078006D006C002000760065007200730069006F006E003D00220031002E0030002200200065006E0063006F00640069006E0067003D0022005500540046002D00380022003F003E000A003C0052006F006F0074003E000A0020002000200020003C004E0075006D0052006F00770073003E0031003C002F004E0075006D0052006F00770073003E000A0020002000200020003C004E0075006D0043006F006C0073003E0031003C002F004E0075006D0043006F006C0073003E000A0020002000200020003C00580050006F0073003E0030003C002F00580050006F0073003E000A0020002000200020003C00590050006F0073003E0030003C002F00590050006F0073003E000A0020002000200020003C00530065006C00530074006100720074003E0030003C002F00530065006C00530074006100720074003E000A0020002000200020003C00530065006C0045006E0064003E0030003C002F00530065006C0045006E0064003E000A0020002000200020003C00580050006F00730032003E0030003C002F00580050006F00730032003E000A0020002000200020003C00590050006F00730032003E0030003C002F00590050006F00730032003E000A0020002000200020003C00530065006C005300740061007200740032003E003400330038003C002F00530065006C005300740061007200740032003E000A0020002000200020003C00530065006C0045006E00640032003E003400330038003C002F00530065006C0045006E00640032003E000A003C002F0052006F006F0074003E000A00FFFEFF04660072002E00680000000000FFFFFFFFFFFFFFFFFFFEFF1E2400570053005F0044004900520024005C00500052004F004A004500430054005C00730065007200760069006300650073005C00660072002E006300010000000180FFFEFF00FFFEFFFF2A013C003F0078006D006C002000760065007200730069006F006E003D00220031002E0030002200200065006E0063006F00640069006E0067003D0022005500540046002D00380022003F003E000A003C0052006F006F0074003E000A0020002000200020003C004E0075006D0052006F00770073003E0031003C002F004E0075006D0052006F00770073003E000A0020002000200020003C004E0075006D0043006F006C0073003E0031003C002F004E0075006D0043006F006C0073003E000A0020002000200020003C00580050006F0073003E0030003C002F00580050006F0073003E000A0020002000200020003C00590050006F0073003E0030003C002F00590050006F0073003E000A0020002000200020003C00530065006C00530074006100720074003E0030003C002F00530065006C00530074006100720074003E000A0020002000200020003C00530065006C0045006E0064003E0030003C002F00530065006C0045006E0064003E000A0020002000200020003C00580050006F00730032003E0030003C002F00580050006F00730032003E000A0020002000200020003C00590050006F00730032003E003600300037003C002F00590050006F00730032003E000A0020002000200020003C00530065006C005300740061007200740032003E00310037003100310037003C002F00530065006C005300740061007200740032003E000A0020002000200020003C00530065006C0045006E00640032003E00310037003100310037003C002F00530065006C0045006E00640032003E000A003C002F0052006F006F0074003E000A00FFFEFF04660072002E00630000000000FFFFFFFFFFFFFFFF0000000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000001000000020000000A010000490000008007000016030000 diff --git a/settings/sk-mlpc2368_Solarium Vlad.jlink b/settings/sk-mlpc2368_Solarium Vlad.jlink new file mode 100644 index 0000000..7835810 --- /dev/null +++ b/settings/sk-mlpc2368_Solarium Vlad.jlink @@ -0,0 +1,40 @@ +[BREAKPOINTS] +ForceImpTypeAny = 0 +ShowInfoWin = 1 +EnableFlashBP = 2 +BPDuringExecution = 0 +[CFI] +CFISize = 0x00 +CFIAddr = 0x00 +[CPU] +MonModeVTableAddr = 0xFFFFFFFF +MonModeDebug = 0 +MaxNumAPs = 0 +LowPowerHandlingMode = 0 +OverrideMemMap = 0 +AllowSimulation = 1 +ScriptFile="" +[FLASH] +EraseType = 0x00 +CacheExcludeSize = 0x00 +CacheExcludeAddr = 0x00 +MinNumBytesFlashDL = 0 +SkipProgOnCRCMatch = 1 +VerifyDownload = 1 +AllowCaching = 1 +EnableFlashDL = 2 +Override = 0 +Device="ARM7" +[GENERAL] +WorkRAMSize = 0x00 +WorkRAMAddr = 0x00 +RAMUsageLimit = 0x00 +[SWO] +SWOLogFile="" +[MEM] +RdOverrideOrMask = 0x00 +RdOverrideAndMask = 0xFFFFFFFF +RdOverrideAddr = 0xFFFFFFFF +WrOverrideOrMask = 0x00 +WrOverrideAndMask = 0xFFFFFFFF +WrOverrideAddr = 0xFFFFFFFF diff --git a/sk-mlpc2368.dep b/sk-mlpc2368.dep index bae5451..50b0ee3 100644 --- a/sk-mlpc2368.dep +++ b/sk-mlpc2368.dep @@ -1,7 +1,7 @@ 5 - 4179730381 + 126273521 Flash Central @@ -29,754 +29,341 @@ Solarium Vlad - $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\drivers\modem\modem.o - $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\drivers\fram\spi.o + $PROJ_DIR$\OS\app\includes.h + $PROJ_DIR$\OS\app\net_cfg.h + $PROJ_DIR$\OS\app\os_cfg.h $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\drivers\keyboard\keyboard.o - $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\app\journal.o - $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\app\term_tsk.o - $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\app\modem_task.o - $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\drivers\ccnet\uart1.o - $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\drivers\fiscal\fiscal.o - $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\app\host_app.o - $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\data\datadesc.o - $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\drivers\lcd\lcd.o + $TOOLKIT_DIR$\inc\c\aarch32\intrinsics.h $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\services\ftp_client.o - $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\drivers\fiscal\uart0.o - $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\drivers\ccnet\CCRSProtocol.o + $TOOLKIT_DIR$\inc\c\DLib_float_setup.h + $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\os_ii\port\os_dbg.o + $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\Source\net_udp.o + $PROJ_DIR$\Solarium Vlad\Obj\OS\bsp\net_bsp.o + $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\app\console_cmd.o + $PROJ_DIR$\Solarium Vlad\Obj\OS\bsp\net_isr.o + $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\services\console.o + $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\libs\crc16.o + $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\os_ii\source\os_tmr.o + $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\drivers\mfrc522\rfid-spi.o + $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\os_ii\source\os_sem.o + $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\app\app_serv.o + $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\Source\net_icmp.o + $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\libs\FatFs\diskio.o + $TOOLKIT_DIR$\inc\c\stdbool.h $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\drivers\fram\fram.o + $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\Source\net_ip.o + $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\data\datadesc.o + $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\drivers\modem\modem.o + $PROJ_DIR$\Solarium Vlad\Exe\sk_mlpc2368.out + $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\os_ii\source\os_mbox.o + $TOOLKIT_DIR$\inc\c\ysizet.h + $TOOLKIT_DIR$\inc\c\ctype.h + $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\os_ii\source\os_core.o + $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\libs\lpc23xx-iap.o + $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\NIC\ETHER\LPC2368\net_nic.o + $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\drivers\mfrc522\mfrc522data.o + $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\IF\net_if_pkt.o + $TOOLKIT_DIR$\inc\c\stdio.h + $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\os_ii\source\os_time.o + $PROJ_DIR$\Solarium Vlad\Obj\OS\bsp\cstartup.o.rsp + $PROJ_DIR$\Solarium Vlad\Obj\OS\bsp\bsp.o + $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\drivers\modem\uart2.o + $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\drivers\fiscal\uart0.o + $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\app\service_name.o $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\data\data.o - $PROJ_DIR$\PROJECT\app\app_serv.h - $PROJ_DIR$\PROJECT\app\app_vlad.h - $PROJ_DIR$\OS\uc\tcpip\Source\net_tcp.h + $TOOLKIT_DIR$\inc\c\aarch32\iccarm_builtin.h + $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\drivers\fiscal\fiscal.o + $TOOLKIT_DIR$\inc\c\aarch32\iar_intrinsics_common.h + $TOOLKIT_DIR$\inc\c\ycheck.h + $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\services\music_tsk.o + $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\os_ii\source\os_q.o + $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\os_ii\source\os_flag.o + $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\Source\net_dbg.o + $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\Source\net_arp.o + $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\app\modem_task.o + $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\Ports\ARM\IAR\net_util_a.o.rsp + $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\OS\net_os.o + $TOOLKIT_DIR$\lib\dl4t_tln.a + $TOOLKIT_DIR$\inc\c\stdarg.h + $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\app\term_tsk.o + $TOOLKIT_DIR$\inc\c\DLib_Defaults.h + $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\os_ii\source\os_mutex.o + $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\services\validator.o + $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\drivers\sdcard.o + $TOOLKIT_DIR$\lib\shs_l.a + $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\Source\net_ascii.o + $PROJ_DIR$\OS\app\app.c + $PROJ_DIR$\OS\app\app_cfg.h + $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\libs\FatFs\syncobj.o + $TOOLKIT_DIR$\inc\c\io_macros.h + $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\services\coin.o + $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\drivers\ccnet\CCRSProtocol.o + $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\os_ii\source\os_task.o + $TOOLKIT_DIR$\inc\c\math.h + $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\app\host_app.o + $PROJ_DIR$\Solarium Vlad\Obj\OS\bsp\cstartup.o + $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\lib\lib_mem.o + $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\drivers\spi1.o + $TOOLKIT_DIR$\lib\m4t_al.a + $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\libs\FatFs\ff.o + $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\Source\net_buf.o + $TOOLKIT_DIR$\inc\c\stdlib.h + $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\drivers\fram\spi.o + $TOOLKIT_DIR$\inc\c\yvals.h + $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\os_ii\port\os_cpu_a.o + $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\os_ii\port\os_cpu_a.o.rsp + $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\Source\net_stat.o + $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\services\mode.o + $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\services\score_tsk.o + $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\Source\net_util.o + $TOOLKIT_DIR$\inc\c\string.h + $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\Source\net_conn.o + $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\libs\FatFs\ccsbcs.o + $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\menu\menudesc.o + $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\Source\net.o + $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\Source\net_tmr.o + $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\services\time.o + $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\Source\net_ctr.o + $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\os_ii\source\os_mem.o + $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\lib\lib_str.o + $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\Ports\ARM\IAR\net_util_a.o + $PROJ_DIR$\OS\uc\tcpip\IF\net_if_pkt.h + $PROJ_DIR$\OS\bsp\net_isr.c + $PROJ_DIR$\OS\uc\tcpip\NIC\ETHER\PHY\KS8721BL\net_phy.c + $PROJ_DIR$\OS\uc\os_ii\source\ucos_ii.h + $PROJ_DIR$\OS\uc\lib\lib_mem.h + $PROJ_DIR$\OS\uc\os_ii\port\os_cpu_a.asm + $PROJ_DIR$\OS\uc\lib\lib_mem.c + $PROJ_DIR$\OS\uc\cpu\cpu_a.s + $PROJ_DIR$\OS\uc\tcpip\NIC\ETHER\LPC2368\net_nic.c + $PROJ_DIR$\OS\uc\cpu\cpu_def.h + $PROJ_DIR$\OS\uc\tcpip\NIC\ETHER\LPC2368\net_nic.h + $PROJ_DIR$\OS\uc\tcpip\NIC\ETHER\PHY\KS8721BL\net_phy.h + $PROJ_DIR$\OS\uc\lib\lib_str.c + $PROJ_DIR$\OS\uc\os_ii\source\os_sem.c + $PROJ_DIR$\OS\uc\tcpip\NIC\ETHER\PHY\net_phy_def.h + $PROJ_DIR$\OS\uc\os_ii\port\os_cpu_c.c + $PROJ_DIR$\OS\bsp\iolpc2368.h + $PROJ_DIR$\OS\bsp\bsp.c + $PROJ_DIR$\OS\uc\lib\lib_def.h + $PROJ_DIR$\OS\uc\os_ii\source\os_mbox.c + $PROJ_DIR$\OS\uc\os_ii\source\os_task.c + $PROJ_DIR$\OS\uc\os_ii\source\os_time.c + $PROJ_DIR$\OS\uc\os_ii\source\os_q.c + $PROJ_DIR$\OS\uc\lib\lib_str.h + $PROJ_DIR$\OS\uc\os_ii\source\os_tmr.c + $PROJ_DIR$\OS\bsp\net_bsp.h + $PROJ_DIR$\OS\bsp\net_bsp.c + $PROJ_DIR$\OS\uc\os_ii\port\os_cpu.h + $PROJ_DIR$\OS\uc\os_ii\source\os_mutex.c + $PROJ_DIR$\OS\bsp\bsp.h + $PROJ_DIR$\OS\bsp\LPC2368_Flash.icf + $PROJ_DIR$\OS\uc\os_ii\source\os_flag.c + $PROJ_DIR$\OS\uc\tcpip\NIC\ETHER\LPC2368\net_nic_def.h + $PROJ_DIR$\OS\bsp\cstartup.s + $PROJ_DIR$\OS\uc\os_ii\source\os_core.c + $PROJ_DIR$\OS\uc\tcpip\IF\Ether\net_if.c + $PROJ_DIR$\OS\uc\os_ii\port\os_dcc.c + $PROJ_DIR$\OS\uc\tcpip\IF\Ether\net_if.h + $PROJ_DIR$\OS\uc\cpu\cpu.h + $PROJ_DIR$\OS\uc\os_ii\port\os_dbg.c + $PROJ_DIR$\OS\uc\os_ii\source\os_mem.c + $PROJ_DIR$\OS\uc\tcpip\IF\net_if_pkt.c $PROJ_DIR$\OS\uc\tcpip\Source\net_sock.c - $PROJ_DIR$\OS\uc\tcpip\Source\net_type.h - $PROJ_DIR$\OS\uc\tcpip\Source\net_udp.h - $PROJ_DIR$\PROJECT\app\app_serv.c - $PROJ_DIR$\PROJECT\app\app_vlad.c - $PROJ_DIR$\OS\uc\tcpip\Source\net_ip.c - $PROJ_DIR$\OS\uc\tcpip\Source\net_ip.h - $PROJ_DIR$\OS\uc\tcpip\Source\net_tcp.c - $PROJ_DIR$\OS\uc\tcpip\Source\net_tmr.h - $PROJ_DIR$\OS\uc\tcpip\Source\net_udp.c - $PROJ_DIR$\OS\uc\tcpip\Source\net_err.h - $PROJ_DIR$\OS\uc\tcpip\Source\net_icmp.h - $PROJ_DIR$\OS\uc\tcpip\Source\net_icmp.c - $PROJ_DIR$\OS\uc\tcpip\Source\net_stat.c + $PROJ_DIR$\OS\uc\tcpip\Source\net_arp.c $PROJ_DIR$\OS\uc\tcpip\Source\net_stat.h $PROJ_DIR$\OS\uc\tcpip\Source\net_tmr.c - $PROJ_DIR$\OS\uc\tcpip\Source\net_sock.h - $PROJ_DIR$\OS\uc\tcpip\Source\net_util.c + $PROJ_DIR$\OS\uc\tcpip\Source\net_err.h + $PROJ_DIR$\OS\uc\tcpip\Source\net_udp.h + $PROJ_DIR$\OS\uc\tcpip\Source\net_ctr.h + $PROJ_DIR$\OS\uc\tcpip\Source\net_icmp.c + $PROJ_DIR$\OS\uc\tcpip\Source\net_tcp.h + $PROJ_DIR$\OS\uc\tcpip\Source\net_bsd.c + $PROJ_DIR$\PROJECT\app\app_serv.c + $PROJ_DIR$\OS\uc\tcpip\Source\net_conn.h + $PROJ_DIR$\OS\uc\tcpip\Source\net_conn.c + $PROJ_DIR$\OS\uc\tcpip\Source\net_buf.h + $PROJ_DIR$\OS\uc\tcpip\Source\net_cfg_net.h + $PROJ_DIR$\OS\uc\tcpip\Source\net_tmr.h + $PROJ_DIR$\OS\uc\tcpip\Source\net_ctr.c + $PROJ_DIR$\OS\uc\tcpip\Source\net_udp.c $PROJ_DIR$\OS\uc\tcpip\Source\net_util.h - $TOOLKIT_DIR$\inc\c\stdio.h - $TOOLKIT_DIR$\inc\c\stddef.h - $TOOLKIT_DIR$\inc\c\stdint.h - $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\cpu\cpu_a.o.rsp - $TOOLKIT_DIR$\inc\c\io_macros.h - $TOOLKIT_DIR$\inc\c\aarch32\intrinsics.h - $TOOLKIT_DIR$\inc\c\aarch32\iar_intrinsics_common.h - $TOOLKIT_DIR$\inc\c\ctype.h - $TOOLKIT_DIR$\inc\c\ycheck.h - $PROJ_DIR$\Solarium Vlad\Obj\OS\bsp\cstartup.o.rsp - $TOOLKIT_DIR$\inc\c\DLib_Defaults.h - $TOOLKIT_DIR$\inc\c\limits.h - $TOOLKIT_DIR$\inc\c\stdlib.h - $TOOLKIT_DIR$\inc\c\aarch32\iccarm_builtin.h - $TOOLKIT_DIR$\inc\c\DLib_Product_string.h - $TOOLKIT_DIR$\inc\c\errno.h - $TOOLKIT_DIR$\inc\c\string.h - $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\os_ii\port\os_cpu_a.o.rsp - $TOOLKIT_DIR$\inc\c\DLib_Config_Normal.h - $TOOLKIT_DIR$\inc\c\DLib_Product.h - $TOOLKIT_DIR$\inc\c\yvals.h - $TOOLKIT_DIR$\inc\c\DLib_Product_stdlib.h - $TOOLKIT_DIR$\inc\c\stdarg.h - $TOOLKIT_DIR$\inc\c\DLib_float_setup.h - $TOOLKIT_DIR$\inc\c\math.h - $TOOLKIT_DIR$\inc\c\ysizet.h - $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\Ports\ARM\IAR\net_util_a.o.rsp - $PROJ_DIR$\Solarium Vlad\Exe\sk_mlpc2368.out - $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\cpu\cpu_a.o - $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\os_ii\port\os_cpu_a.o - $PROJ_DIR$\Solarium Vlad\Obj\OS\bsp\cstartup.o - $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\Ports\ARM\IAR\net_util_a.o - $PROJ_DIR$\Solarium Vlad\Exe\sk_mlpc2368.hex - $PROJ_DIR$\PROJECT\menu\menu.c - $PROJ_DIR$\PROJECT\menu\menudesc.c - $PROJ_DIR$\PROJECT\menu\menu.h - $PROJ_DIR$\PROJECT\drivers\sdcard.h - $PROJ_DIR$\PROJECT\drivers\uart.h - $PROJ_DIR$\PROJECT\libs\FatFs\diskio.h - $PROJ_DIR$\PROJECT\drivers\spi1.h - $PROJ_DIR$\PROJECT\libs\FatFs\syncobj.c - $PROJ_DIR$\PROJECT\libs\FatFs\ff.h - $PROJ_DIR$\PROJECT\libs\FatFs\ffconf.h - $PROJ_DIR$\PROJECT\libs\crc16.h - $PROJ_DIR$\PROJECT\libs\lpc23xx-iap.c - $PROJ_DIR$\PROJECT\drivers\uart.c - $PROJ_DIR$\PROJECT\libs\FatFs\ccsbcs.c - $PROJ_DIR$\PROJECT\libs\FatFs\diskio.c - $PROJ_DIR$\PROJECT\libs\FatFs\fattime.c - $PROJ_DIR$\PROJECT\libs\FatFs\fattime.h - $PROJ_DIR$\PROJECT\libs\FatFs\ff.c - $PROJ_DIR$\PROJECT\drivers\spi1.c - $PROJ_DIR$\PROJECT\libs\crc16.c - $PROJ_DIR$\PROJECT\libs\lpc23xx-iap.h - $PROJ_DIR$\PROJECT\drivers\sdcard.c - $PROJ_DIR$\PROJECT\services\score_tsk.h - $PROJ_DIR$\PROJECT\services\time.h - $PROJ_DIR$\PROJECT\services\ftp_client.h - $PROJ_DIR$\PROJECT\version.h - $PROJ_DIR$\PROJECT\services\fr.h - $PROJ_DIR$\PROJECT\services\console.c - $PROJ_DIR$\PROJECT\services\mode.c - $PROJ_DIR$\PROJECT\services\ftp_client.c - $PROJ_DIR$\PROJECT\services\time.c - $PROJ_DIR$\PROJECT\services\validator.c - $PROJ_DIR$\PROJECT\services\score_tsk.c - $PROJ_DIR$\PROJECT\services\coin.h - $PROJ_DIR$\PROJECT\services\console.h - $PROJ_DIR$\PROJECT\services\mode.h - $PROJ_DIR$\PROJECT\services\music_tsk.c - $PROJ_DIR$\PROJECT\services\validator.h - $PROJ_DIR$\PROJECT\menu\menudesc.h - $PROJ_DIR$\PROJECT\services\coin.c - $PROJ_DIR$\PROJECT\services\fr.c - $PROJ_DIR$\PROJECT\services\music_tsk.h - $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\services\time.o - $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\services\score_tsk.o - $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\services\validator.o - $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\services\music_tsk.o - $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\libs\FatFs\ccsbcs.o - $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\services\fr.o - $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\services\mode.o - $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\drivers\sdcard.o - $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\drivers\spi1.o - $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\drivers\modem\uart2.o - $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\drivers\player1053\player1053.o - $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\libs\FatFs\diskio.o - $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\libs\FatFs\ff.o - $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\libs\FatFs\fattime.o - $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\libs\FatFs\syncobj.o - $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\libs\lpc23xx-iap.o - $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\menu\menu.o - $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\menu\menudesc.o - $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\libs\crc16.o - $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\services\coin.o - $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\services\console.o - $PROJ_DIR$\OS\bsp\net_bsp.c - $PROJ_DIR$\OS\uc\os_ii\port\os_dbg.c - $PROJ_DIR$\OS\bsp\net_bsp.h - $PROJ_DIR$\OS\uc\os_ii\port\os_cpu_a.asm - $PROJ_DIR$\OS\uc\os_ii\port\os_dcc.c - $PROJ_DIR$\OS\uc\lib\lib_mem.c - $PROJ_DIR$\OS\uc\lib\lib_str.c - $PROJ_DIR$\OS\uc\lib\lib_def.h - $PROJ_DIR$\OS\uc\lib\lib_str.h - $PROJ_DIR$\OS\uc\os_ii\port\os_cpu_c.c - $PROJ_DIR$\OS\uc\os_ii\source\os_core.c - $PROJ_DIR$\OS\uc\os_ii\source\os_flag.c - $PROJ_DIR$\OS\bsp\net_isr.c - $PROJ_DIR$\OS\uc\cpu\cpu.h - $PROJ_DIR$\OS\uc\cpu\cpu_a.s - $PROJ_DIR$\OS\bsp\cstartup.s - $PROJ_DIR$\OS\uc\lib\lib_mem.h - $PROJ_DIR$\OS\uc\cpu\cpu_def.h - $PROJ_DIR$\OS\bsp\iolpc2368.h - $PROJ_DIR$\OS\uc\os_ii\port\os_cpu.h - $PROJ_DIR$\PROJECT\drivers\fiscal\fiscal.h - $PROJ_DIR$\PROJECT\drivers\player1053\vs10xx_uc.h - $PROJ_DIR$\PROJECT\drivers\fiscal\fiscal.c - $PROJ_DIR$\PROJECT\drivers\fram\spi.h - $PROJ_DIR$\PROJECT\drivers\keyboard\keyboard.c - $PROJ_DIR$\PROJECT\drivers\fiscal\uart0.c - $PROJ_DIR$\PROJECT\drivers\ccnet\VMCConst.h + $PROJ_DIR$\OS\uc\tcpip\Source\net_ip.c + $PROJ_DIR$\OS\uc\tcpip\Source\net.h + $PROJ_DIR$\OS\uc\tcpip\Source\net_sock.h + $PROJ_DIR$\OS\uc\tcpip\Source\net_stat.c + $PROJ_DIR$\PROJECT\app\app_serv.h + $PROJ_DIR$\PROJECT\app\app_vlad.c + $PROJ_DIR$\OS\uc\tcpip\Source\net_ascii.h + $PROJ_DIR$\PROJECT\app\app_vlad.h + $PROJ_DIR$\PROJECT\app\console_cmd.c + $PROJ_DIR$\OS\uc\tcpip\Source\net_type.h + $PROJ_DIR$\OS\uc\tcpip\Source\net_util.c + $PROJ_DIR$\PROJECT\app\console_cmd.h + $PROJ_DIR$\OS\uc\tcpip\Source\net_def.h + $PROJ_DIR$\OS\uc\tcpip\Source\net_arp.h + $PROJ_DIR$\OS\uc\tcpip\Source\net_icmp.h + $PROJ_DIR$\OS\uc\tcpip\Source\net_bsd.h + $PROJ_DIR$\OS\uc\tcpip\Source\net_buf.c + $PROJ_DIR$\OS\uc\tcpip\Source\net_dbg.h + $PROJ_DIR$\OS\uc\tcpip\Source\net_tcp.c + $PROJ_DIR$\OS\uc\tcpip\Ports\ARM\IAR\net_util_a.asm + $PROJ_DIR$\OS\uc\tcpip\OS\net_os.h + $PROJ_DIR$\OS\uc\tcpip\Source\net_dbg.c + $PROJ_DIR$\OS\uc\tcpip\Source\net_ip.h + $PROJ_DIR$\OS\uc\tcpip\OS\net_os.c + $PROJ_DIR$\OS\uc\tcpip\Source\net.c + $PROJ_DIR$\OS\uc\tcpip\Source\net_err.c + $PROJ_DIR$\OS\uc\tcpip\Source\net_ascii.c + $PROJ_DIR$\PROJECT\drivers\mfrc522\mfrc522data.c + $PROJ_DIR$\PROJECT\drivers\ccnet\CCRSProtocol.c + $PROJ_DIR$\PROJECT\app\ftp_app.h $PROJ_DIR$\PROJECT\drivers\keyboard\keyboard.h - $PROJ_DIR$\PROJECT\drivers\fiscal\uart0.h - $PROJ_DIR$\PROJECT\drivers\fram\fram.c - $PROJ_DIR$\PROJECT\drivers\lcd\lcd.h - $PROJ_DIR$\PROJECT\drivers\ccnet\uart1.h - $PROJ_DIR$\PROJECT\drivers\lcd\symtab.h - $PROJ_DIR$\PROJECT\drivers\lcd\lcd.c + $PROJ_DIR$\PROJECT\app\journal.c + $PROJ_DIR$\PROJECT\drivers\mfrc522\mfrc522data.h + $PROJ_DIR$\PROJECT\drivers\mfrc522\rfid-spi.c + $PROJ_DIR$\PROJECT\data\fram_map.h + $PROJ_DIR$\PROJECT\drivers\mfrc522\rfid-spi.h $PROJ_DIR$\PROJECT\drivers\modem\modem.c + $PROJ_DIR$\PROJECT\drivers\lcd\lcd.c + $PROJ_DIR$\PROJECT\drivers\modem\modem.h $PROJ_DIR$\PROJECT\drivers\modem\uart2.c $PROJ_DIR$\PROJECT\drivers\modem\uart2.h - $PROJ_DIR$\PROJECT\drivers\fram\fram.h - $PROJ_DIR$\PROJECT\drivers\fram\spi.c - $PROJ_DIR$\PROJECT\drivers\player1053\player1053.c - $PROJ_DIR$\PROJECT\drivers\modem\modem.h $PROJ_DIR$\PROJECT\drivers\player1053\player.h - $PROJ_DIR$\PROJECT\app\journal.h - $PROJ_DIR$\PROJECT\app\ftp_app.c - $PROJ_DIR$\PROJECT\app\control.c - $PROJ_DIR$\PROJECT\app\control.h - $PROJ_DIR$\PROJECT\app\modem_task.c - $PROJ_DIR$\PROJECT\app\modem_task.h + $PROJ_DIR$\PROJECT\drivers\fram\spi.c $PROJ_DIR$\PROJECT\app\term_tsk.c + $PROJ_DIR$\PROJECT\drivers\ccnet\VMCConst.h + $PROJ_DIR$\PROJECT\drivers\fiscal\fiscal.c + $PROJ_DIR$\PROJECT\drivers\lcd\lcd.h + $PROJ_DIR$\PROJECT\app\journal.h + $PROJ_DIR$\PROJECT\app\host_app.h + $PROJ_DIR$\PROJECT\app\service_name.h + $PROJ_DIR$\PROJECT\drivers\fiscal\uart0.c $PROJ_DIR$\PROJECT\data\data.c + $PROJ_DIR$\PROJECT\drivers\ccnet\uart1.h + $PROJ_DIR$\PROJECT\drivers\fram\spi.h + $PROJ_DIR$\PROJECT\data\data.h + $PROJ_DIR$\PROJECT\app\control.c + $PROJ_DIR$\PROJECT\app\modem_task.c + $PROJ_DIR$\PROJECT\drivers\ccnet\uart1.c + $PROJ_DIR$\PROJECT\app\control.h + $PROJ_DIR$\PROJECT\drivers\fram\fram.c + $PROJ_DIR$\PROJECT\app\host_app.c + $PROJ_DIR$\PROJECT\app\modem_task.h + $PROJ_DIR$\PROJECT\drivers\ccnet\CCRSProtocol.h + $PROJ_DIR$\PROJECT\drivers\fiscal\uart0.h + $PROJ_DIR$\PROJECT\app\ftp_app.c + $PROJ_DIR$\PROJECT\app\service_name.c $PROJ_DIR$\PROJECT\app\term_tsk.h $PROJ_DIR$\PROJECT\data\datadesc.h - $PROJ_DIR$\PROJECT\data\data.h + $PROJ_DIR$\PROJECT\drivers\fram\fram.h + $PROJ_DIR$\PROJECT\drivers\keyboard\keyboard.c + $PROJ_DIR$\PROJECT\drivers\lcd\symtab.h $PROJ_DIR$\PROJECT\data\datadesc.c - $PROJ_DIR$\PROJECT\app\host_app.c - $PROJ_DIR$\PROJECT\data\fram_map.h - $PROJ_DIR$\PROJECT\drivers\ccnet\CCRSProtocol.c - $PROJ_DIR$\PROJECT\drivers\ccnet\CCRSProtocol.h - $PROJ_DIR$\PROJECT\drivers\ccnet\uart1.c - $PROJ_DIR$\PROJECT\app\console_cmd.c - $PROJ_DIR$\PROJECT\app\console_cmd.h - $PROJ_DIR$\PROJECT\app\ftp_app.h - $PROJ_DIR$\PROJECT\app\host_app.h - $PROJ_DIR$\PROJECT\app\journal.c - $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\Source\net_buf.o - $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\Source\net_conn.o - $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\NIC\ETHER\PHY\KS8721BL\net_phy.o - $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\Source\net_arp.o - $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\Source\net_ascii.o - $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\app\control.o - $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\IF\Ether\net_if.o - $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\os_ii\source\os_time.o - $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\IF\net_if_pkt.o - $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\NIC\ETHER\LPC2368\net_nic.o - $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\OS\net_os.o - $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\Source\net.o - $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\os_ii\source\os_tmr.o - $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\Source\net_bsd.o - $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\app\console_cmd.o - $PROJ_DIR$\OS\uc\tcpip\Source\net_ctr.h - $PROJ_DIR$\OS\uc\tcpip\Source\net_buf.c - $PROJ_DIR$\OS\uc\tcpip\OS\net_os.h - $PROJ_DIR$\OS\uc\tcpip\Ports\ARM\IAR\net_util_a.asm - $PROJ_DIR$\OS\uc\tcpip\Source\net_dbg.c - $PROJ_DIR$\OS\uc\tcpip\Source\net_buf.h - $PROJ_DIR$\OS\uc\tcpip\Source\net.h - $PROJ_DIR$\OS\uc\tcpip\Source\net_cfg_net.h - $PROJ_DIR$\OS\uc\tcpip\OS\net_os.c - $PROJ_DIR$\OS\uc\tcpip\Source\net_bsd.h - $PROJ_DIR$\OS\uc\tcpip\Source\net_dbg.h - $PROJ_DIR$\OS\uc\tcpip\Source\net_def.h - $PROJ_DIR$\OS\uc\tcpip\Source\net_conn.c - $PROJ_DIR$\OS\uc\tcpip\Source\net_err.c - $PROJ_DIR$\OS\uc\tcpip\Source\net_ctr.c - $PROJ_DIR$\OS\uc\tcpip\Source\net.c - $PROJ_DIR$\OS\uc\tcpip\Source\net_arp.c - $PROJ_DIR$\OS\uc\tcpip\Source\net_arp.h - $PROJ_DIR$\OS\uc\tcpip\Source\net_ascii.c - $PROJ_DIR$\OS\uc\tcpip\Source\net_ascii.h - $PROJ_DIR$\OS\uc\tcpip\Source\net_bsd.c - $PROJ_DIR$\OS\uc\tcpip\Source\net_conn.h - $PROJ_DIR$\OS\uc\tcpip\NIC\ETHER\PHY\net_phy_def.h - $PROJ_DIR$\OS\uc\os_ii\source\os_mbox.c - $PROJ_DIR$\OS\uc\os_ii\source\os_sem.c - $PROJ_DIR$\OS\uc\os_ii\source\os_tmr.c - $PROJ_DIR$\OS\uc\tcpip\IF\Ether\net_if.h - $PROJ_DIR$\OS\uc\tcpip\IF\net_if_pkt.c - $PROJ_DIR$\OS\uc\tcpip\NIC\ETHER\LPC2368\net_nic.c - $PROJ_DIR$\OS\uc\os_ii\source\os_mutex.c - $PROJ_DIR$\OS\uc\os_ii\source\os_q.c - $PROJ_DIR$\OS\uc\os_ii\source\ucos_ii.h - $PROJ_DIR$\OS\uc\os_ii\source\os_task.c - $PROJ_DIR$\OS\uc\tcpip\IF\net_if_pkt.h - $PROJ_DIR$\OS\uc\tcpip\NIC\ETHER\LPC2368\net_nic.h - $PROJ_DIR$\OS\uc\tcpip\NIC\ETHER\LPC2368\net_nic_def.h - $PROJ_DIR$\OS\uc\os_ii\source\os_mem.c - $PROJ_DIR$\OS\uc\tcpip\NIC\ETHER\PHY\KS8721BL\net_phy.c - $PROJ_DIR$\OS\uc\os_ii\source\os_time.c - $PROJ_DIR$\OS\uc\tcpip\NIC\ETHER\PHY\KS8721BL\net_phy.h - $PROJ_DIR$\OS\uc\tcpip\IF\Ether\net_if.c - $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\Source\net_ctr.o - $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\os_ii\source\os_sem.o - $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\os_ii\source\os_q.o - $PROJ_DIR$\OS\app\os_cfg.h - $PROJ_DIR$\OS\bsp\bsp.h - $PROJ_DIR$\OS\app\net_cfg.h - $PROJ_DIR$\OS\bsp\bsp.c - $PROJ_DIR$\OS\app\includes.h - $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\os_ii\port\os_dcc.o - $PROJ_DIR$\Solarium Vlad\Obj\OS\bsp\net_isr.o - $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\os_ii\source\os_mem.o + $PROJ_DIR$\PROJECT\drivers\fiscal\fiscal.h + $PROJ_DIR$\PROJECT\libs\FatFs\ffconf.h + $PROJ_DIR$\PROJECT\menu\menu.c + $PROJ_DIR$\PROJECT\menu\menudesc.c + $PROJ_DIR$\PROJECT\services\fr.h + $PROJ_DIR$\PROJECT\services\mode.c + $PROJ_DIR$\PROJECT\drivers\player1053\player1053.c + $PROJ_DIR$\PROJECT\services\score_tsk.h + $PROJ_DIR$\PROJECT\libs\FatFs\syncobj.c + $PROJ_DIR$\PROJECT\services\fr.c + $PROJ_DIR$\PROJECT\drivers\spi1.h + $PROJ_DIR$\PROJECT\services\coin.h + $PROJ_DIR$\PROJECT\services\time.h + $PROJ_DIR$\PROJECT\menu\menu.h + $PROJ_DIR$\PROJECT\services\coin.c + $PROJ_DIR$\PROJECT\services\ftp_client.c + $PROJ_DIR$\PROJECT\services\ftp_client.h + $PROJ_DIR$\PROJECT\drivers\spi1.c + $PROJ_DIR$\PROJECT\services\validator.h + $PROJ_DIR$\PROJECT\drivers\player1053\vs10xx_uc.h + $PROJ_DIR$\PROJECT\libs\FatFs\ccsbcs.c + $PROJ_DIR$\PROJECT\libs\crc16.h + $PROJ_DIR$\PROJECT\libs\FatFs\diskio.c + $PROJ_DIR$\PROJECT\drivers\uart.c + $PROJ_DIR$\PROJECT\libs\FatFs\diskio.h + $PROJ_DIR$\PROJECT\drivers\uart.h + $PROJ_DIR$\PROJECT\libs\FatFs\fattime.c + $PROJ_DIR$\PROJECT\services\score_tsk.c + $PROJ_DIR$\PROJECT\services\validator.c + $PROJ_DIR$\PROJECT\libs\lpc23xx-iap.c + $PROJ_DIR$\PROJECT\menu\menudesc.h + $PROJ_DIR$\PROJECT\libs\crc16.c + $PROJ_DIR$\PROJECT\libs\FatFs\ff.h + $PROJ_DIR$\PROJECT\services\console.c + $PROJ_DIR$\PROJECT\services\console.h + $PROJ_DIR$\PROJECT\drivers\sdcard.c + $PROJ_DIR$\PROJECT\libs\FatFs\ff.c + $PROJ_DIR$\PROJECT\services\mode.h + $PROJ_DIR$\PROJECT\services\music_tsk.h + $PROJ_DIR$\PROJECT\services\time.c + $PROJ_DIR$\PROJECT\libs\lpc23xx-iap.h + $PROJ_DIR$\PROJECT\services\music_tsk.c + $PROJ_DIR$\PROJECT\drivers\sdcard.h + $PROJ_DIR$\PROJECT\libs\FatFs\fattime.h $PROJ_DIR$\Solarium Vlad\Obj\OS\app\app.o - $PROJ_DIR$\Solarium Vlad\Obj\OS\bsp\bsp.o - $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\lib\lib_mem.o - $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\os_ii\source\os_flag.o - $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\os_ii\port\os_cpu_c.o - $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\os_ii\source\os_task.o - $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\os_ii\source\os_core.o - $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\os_ii\source\os_mbox.o - $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\lib\lib_str.o - $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\os_ii\source\os_mutex.o - $PROJ_DIR$\Solarium Vlad\Obj\OS\bsp\net_bsp.o - $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\os_ii\port\os_dbg.o - $PROJ_DIR$\OS\app\app_cfg.h - $PROJ_DIR$\OS\app\app.c - $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\Source\net_icmp.o - $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\Source\net_stat.o - $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\Source\net_sock.o - $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\Source\net_ip.o - $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\Source\net_udp.o - $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\Source\net_dbg.o - $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\Source\net_tmr.o + $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\os_ii\port\os_dcc.o $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\Source\net_err.o - $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\Source\net_tcp.o - $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\app\app_serv.o - $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\app\app_vlad.o - $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\Source\net_util.o + $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\app\journal.o + $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\services\fr.o + $TOOLKIT_DIR$\inc\c\limits.h + $TOOLKIT_DIR$\inc\c\stdint.h + $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\app\control.o + $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\cpu\cpu_a.o + $PROJ_DIR$\PROJECT\version.h + $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\libs\FatFs\fattime.o + $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\Source\net_bsd.o + $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\drivers\ccnet\uart1.o + $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\drivers\lcd\lcd.o + $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\drivers\player1053\player1053.o + $TOOLKIT_DIR$\inc\c\DLib_Product.h + $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\cpu\cpu_a.o.rsp $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\app\ftp_app.o + $TOOLKIT_DIR$\inc\c\errno.h + $TOOLKIT_DIR$\inc\c\DLib_Product_string.h + $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\os_ii\port\os_cpu_c.o + $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\Source\net_tcp.o + $TOOLKIT_DIR$\inc\c\DLib_Product_stdlib.h + $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\Source\net_sock.o + $PROJ_DIR$\Solarium Vlad\List\sk_mlpc2368.map + $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\menu\menu.o + $TOOLKIT_DIR$\inc\c\DLib_Config_Normal.h + $TOOLKIT_DIR$\lib\rt4t_al.a + $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\NIC\ETHER\PHY\KS8721BL\net_phy.o + $PROJ_DIR$\Solarium Vlad\Obj\OS\uc\tcpip\IF\Ether\net_if.o + $TOOLKIT_DIR$\inc\c\stddef.h + $PROJ_DIR$\Solarium Vlad\Obj\PROJECT\app\app_vlad.o + $PROJ_DIR$\Solarium Vlad\Exe\solarium_vlad_8_56.hex - - $PROJ_DIR$\OS\uc\tcpip\Source\net_sock.c - - - ICCARM - 281 - - - - - ICCARM - 277 259 257 136 147 151 141 150 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 - - - - - $PROJ_DIR$\PROJECT\app\app_serv.c - - - ICCARM - 288 - - - - - ICCARM - 56 48 57 59 52 45 53 42 49 60 39 40 38 50 54 46 63 58 277 261 259 257 258 152 136 147 151 141 150 142 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 16 17 179 196 176 181 184 186 185 189 191 154 171 161 174 175 155 74 81 73 109 104 105 97 106 112 93 94 108 - - - - - $PROJ_DIR$\PROJECT\app\app_vlad.c - - - ICCARM - 289 - - - - - ICCARM - 56 48 57 59 52 61 45 53 42 49 62 60 39 40 38 50 54 46 63 58 277 261 259 257 258 152 136 147 151 141 150 142 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 16 17 179 195 196 176 181 184 186 185 189 191 154 171 161 81 73 109 104 97 106 112 93 94 108 - - - - - $PROJ_DIR$\OS\uc\tcpip\Source\net_ip.c - - - ICCARM - 282 - - - - - ICCARM - 277 259 257 136 147 151 141 150 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 - - - - - $PROJ_DIR$\OS\uc\tcpip\Source\net_tcp.c - - - ICCARM - 287 - - - - - ICCARM - 277 259 257 136 147 151 141 150 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 - - - - - $PROJ_DIR$\OS\uc\tcpip\Source\net_udp.c - - - ICCARM - 283 - - - - - ICCARM - 277 259 257 136 147 151 141 150 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 - - - - - $PROJ_DIR$\OS\uc\tcpip\Source\net_icmp.c - - - ICCARM - 279 - - - - - ICCARM - 277 259 257 136 147 151 141 150 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 - - - - - $PROJ_DIR$\OS\uc\tcpip\Source\net_stat.c - - - ICCARM - 280 - - - - - ICCARM - 277 259 257 136 147 151 141 150 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 - - - - - $PROJ_DIR$\OS\uc\tcpip\Source\net_tmr.c - - - ICCARM - 285 - - - - - ICCARM - 277 259 257 136 147 151 141 150 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 - - - - - $PROJ_DIR$\OS\uc\tcpip\Source\net_util.c - - - ICCARM - 290 - - - - - ICCARM - 277 259 257 136 147 151 141 150 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 - - - $PROJ_DIR$\Solarium Vlad\Exe\sk_mlpc2368.out - OBJCOPY - 70 - - - - - $PROJ_DIR$\PROJECT\menu\menu.c - - - ICCARM - 129 + ILINK + 299 - ICCARM - 56 48 57 59 52 45 53 42 49 60 39 38 50 54 46 63 58 277 261 259 257 258 152 136 147 151 141 150 142 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 16 179 176 186 154 161 164 73 109 106 94 + ILINK + 54 75 302 61 128 275 37 72 9 11 283 73 96 81 295 7 276 29 48 26 95 58 47 16 69 35 14 304 33 31 303 53 97 91 50 62 286 77 88 94 49 277 18 22 298 83 296 92 8 86 17 306 10 282 292 71 278 51 40 56 41 23 68 287 43 39 21 79 3 288 32 15 24 38 289 60 74 89 19 285 76 65 13 30 300 90 67 12 279 5 84 46 85 93 59 - $PROJ_DIR$\PROJECT\menu\menudesc.c + [ROOT_NODE] - ICCARM - 130 - - - - - ICCARM - 56 48 57 59 52 45 53 42 49 60 39 38 50 54 46 63 58 277 261 259 257 258 152 136 147 151 141 150 142 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 16 179 195 176 186 185 154 161 73 109 106 94 96 - - - - - $PROJ_DIR$\PROJECT\libs\FatFs\syncobj.c - - - ICCARM - 127 - - - - - ICCARM - 56 48 57 59 52 45 53 42 49 60 39 40 38 50 54 46 63 58 277 261 259 257 258 152 136 147 151 141 150 142 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 79 80 - - - - - $PROJ_DIR$\PROJECT\libs\lpc23xx-iap.c - - - ICCARM - 128 - - - - - ICCARM - 56 48 57 59 52 45 53 42 49 60 39 40 38 50 54 46 63 58 277 261 259 257 258 152 136 147 151 141 150 142 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 - - - - - $PROJ_DIR$\PROJECT\libs\FatFs\ccsbcs.c - - - ICCARM - 117 - - - - - ICCARM - 56 48 57 59 52 45 53 42 49 60 39 40 38 50 54 46 63 58 277 261 259 257 258 152 136 147 151 141 150 142 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 79 80 - - - - - $PROJ_DIR$\PROJECT\libs\FatFs\diskio.c - - - ICCARM - 124 - - - - - ICCARM - 56 48 57 59 52 45 53 42 49 60 39 40 38 50 54 46 63 58 277 261 259 257 258 152 136 147 151 141 150 142 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 74 76 79 80 - - - - - $PROJ_DIR$\PROJECT\libs\FatFs\fattime.c - - - ICCARM - 126 - - - - - ICCARM - 56 48 57 59 52 45 53 42 49 60 39 40 38 50 54 46 63 58 277 261 259 257 258 152 136 147 151 141 150 142 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 87 79 80 94 - - - - - $PROJ_DIR$\PROJECT\libs\FatFs\ff.c - - - ICCARM - 125 - - - - - ICCARM - 56 48 57 59 52 45 53 42 49 60 39 40 38 50 54 46 63 58 277 261 259 257 258 152 136 147 151 141 150 142 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 76 79 80 - - - - - $PROJ_DIR$\PROJECT\drivers\spi1.c - - - ICCARM - 121 - - - - - ICCARM - 56 48 57 59 42 50 46 63 58 277 257 152 147 151 153 244 77 - - - - - $PROJ_DIR$\PROJECT\libs\crc16.c - - - ICCARM - 131 + ILINK + 25 299 - $PROJ_DIR$\PROJECT\drivers\sdcard.c - - - ICCARM - 120 - - - - - ICCARM - 56 48 57 59 52 45 53 42 49 60 39 40 38 50 54 46 63 58 277 261 259 257 258 152 136 147 151 141 150 142 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 74 77 - - - - - $PROJ_DIR$\PROJECT\services\console.c - - - ICCARM - 133 - - - - - ICCARM - 56 48 57 59 52 45 53 42 49 60 39 40 38 50 54 46 63 58 277 261 259 257 258 152 136 147 151 141 150 142 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 16 194 179 176 184 186 185 189 154 171 105 93 - - - - - $PROJ_DIR$\PROJECT\services\mode.c - - - ICCARM - 119 - - - - - ICCARM - 56 48 57 59 52 45 53 42 49 60 39 38 50 54 46 63 58 277 261 259 257 258 152 136 147 151 141 150 142 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 16 179 106 - - - - - $PROJ_DIR$\PROJECT\services\ftp_client.c - - - ICCARM - 11 - - - - - ICCARM - 56 48 57 59 52 45 53 42 49 60 39 40 38 50 54 46 63 58 277 261 259 257 258 152 136 147 151 141 150 142 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 16 179 196 95 94 - - - - - $PROJ_DIR$\PROJECT\services\time.c - - - ICCARM - 113 - - - - - ICCARM - 56 48 57 59 52 42 38 50 54 46 63 58 277 257 152 147 151 153 244 16 179 94 - - - - - $PROJ_DIR$\PROJECT\services\validator.c - - - ICCARM - 115 - - - - - ICCARM - 56 48 57 59 52 45 53 42 49 60 39 38 50 54 46 63 58 277 261 259 257 258 152 136 147 151 141 150 142 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 16 179 176 186 185 191 165 154 108 - - - - - $PROJ_DIR$\PROJECT\services\score_tsk.c - - - ICCARM - 114 - - - - - ICCARM - 56 48 57 59 52 45 53 42 49 60 39 38 50 54 46 63 58 277 261 259 257 258 152 136 147 151 141 150 142 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 16 179 186 185 170 93 94 - - - - - $PROJ_DIR$\PROJECT\services\music_tsk.c - - - ICCARM - 116 - - - - - ICCARM - 56 48 57 59 52 45 53 42 49 60 39 40 38 50 54 46 63 58 277 261 259 257 258 152 136 147 151 141 150 142 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 16 179 186 185 175 155 74 79 80 112 - - - - - $PROJ_DIR$\PROJECT\services\coin.c - - - ICCARM - 132 - - - - - ICCARM - 56 48 57 59 42 50 46 63 58 277 257 152 147 151 153 244 16 179 186 185 174 104 - - - - - $PROJ_DIR$\PROJECT\services\fr.c - - - ICCARM - 118 - - - - - ICCARM - 56 48 57 59 52 45 53 42 49 60 39 38 50 54 46 63 58 277 261 259 257 258 152 136 147 151 141 150 142 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 16 179 176 186 185 154 162 97 94 - - - - - $PROJ_DIR$\OS\bsp\net_bsp.c + $PROJ_DIR$\OS\app\app.c ICCARM @@ -786,127 +373,7 @@ ICCARM - 56 48 57 59 52 45 53 42 49 60 39 38 50 54 46 63 58 277 261 259 257 258 152 136 147 151 141 150 142 153 244 239 246 247 248 252 235 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 - - - - - $PROJ_DIR$\OS\uc\os_ii\port\os_dbg.c - - - ICCARM - 276 - - - - - ICCARM - 277 257 153 244 - - - - - $PROJ_DIR$\OS\uc\os_ii\port\os_cpu_a.asm - - - AARM - 67 - - - - - AARM - 55 - - - - - $PROJ_DIR$\OS\uc\os_ii\port\os_dcc.c - - - ICCARM - 262 - - - - - ICCARM - 277 257 153 244 - - - - - $PROJ_DIR$\OS\uc\lib\lib_mem.c - - - ICCARM - 267 - - - - - ICCARM - 277 147 151 141 150 - - - - - $PROJ_DIR$\OS\uc\lib\lib_str.c - - - ICCARM - 273 - - - - - ICCARM - 56 48 57 59 45 53 49 38 50 46 63 58 277 147 151 141 142 - - - - - $PROJ_DIR$\OS\uc\os_ii\port\os_cpu_c.c - - - ICCARM - 269 - - - - - ICCARM - 277 257 153 244 - - - - - $PROJ_DIR$\OS\uc\os_ii\source\os_core.c - - - ICCARM - 271 - - - - - ICCARM - 277 257 153 244 - - - - - $PROJ_DIR$\OS\uc\os_ii\source\os_flag.c - - - ICCARM - 268 - - - - - ICCARM - 277 257 153 244 + 301 57 290 297 294 28 293 66 280 55 20 305 281 34 78 87 45 27 80 64 0 1 2 127 114 123 136 107 116 102 121 125 101 135 98 108 130 109 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 163 217 206 225 213 226 193 231 227 212 189 205 194 241 271 265 238 @@ -915,13 +382,58 @@ ICCARM - 263 + 11 ICCARM - 56 48 57 59 52 45 53 42 49 60 39 38 50 54 46 63 58 277 261 259 257 258 152 136 147 151 141 150 142 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 + 301 57 290 297 294 28 293 66 280 55 305 34 78 87 45 27 80 64 0 1 2 127 114 123 136 107 116 102 121 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 + + + + + $PROJ_DIR$\OS\uc\tcpip\NIC\ETHER\PHY\KS8721BL\net_phy.c + + + ICCARM + 303 + + + + + ICCARM + 64 1 2 123 136 107 116 102 125 101 135 98 108 130 109 112 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 + + + + + $PROJ_DIR$\OS\uc\os_ii\port\os_cpu_a.asm + + + AARM + 81 + + + + + AARM + 82 + + + + + $PROJ_DIR$\OS\uc\lib\lib_mem.c + + + ICCARM + 73 + + + + + ICCARM + 64 136 107 116 102 @@ -930,78 +442,153 @@ AARM - 66 + 283 AARM - 41 + 291 - $PROJ_DIR$\OS\bsp\cstartup.s + $PROJ_DIR$\OS\uc\tcpip\NIC\ETHER\LPC2368\net_nic.c - AARM - 68 + ICCARM + 31 - AARM + ICCARM + 64 1 2 123 136 107 116 102 125 101 135 98 108 130 109 112 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 + + + + + $PROJ_DIR$\OS\uc\lib\lib_str.c + + + ICCARM + 96 + + + + + ICCARM + 301 57 290 297 28 293 280 34 78 45 27 80 64 136 107 116 121 + + + + + $PROJ_DIR$\OS\uc\os_ii\source\os_sem.c + + + ICCARM + 16 + + + + + ICCARM + 64 2 125 101 + + + + + $PROJ_DIR$\OS\uc\os_ii\port\os_cpu_c.c + + + ICCARM + 295 + + + + + ICCARM + 64 2 125 101 + + + + + $PROJ_DIR$\OS\bsp\bsp.c + + + ICCARM + 37 + + + + + ICCARM + 301 57 290 297 294 28 293 66 280 55 305 34 78 87 45 27 80 64 0 1 2 127 114 123 136 107 116 102 121 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 + + + + + $PROJ_DIR$\OS\uc\os_ii\source\os_mbox.c + + + ICCARM + 26 + + + + + ICCARM + 64 2 125 101 + + + + + $PROJ_DIR$\OS\uc\os_ii\source\os_task.c + + + ICCARM + 69 + + + + + ICCARM + 64 2 125 101 + + + + + $PROJ_DIR$\OS\uc\os_ii\source\os_time.c + + + ICCARM + 35 + + + + + ICCARM + 64 2 125 101 + + + + + $PROJ_DIR$\OS\uc\os_ii\source\os_q.c + + + ICCARM 47 - - - - $PROJ_DIR$\PROJECT\drivers\fiscal\fiscal.c - - - ICCARM - 7 - ICCARM - 56 48 57 59 52 45 53 42 49 60 39 38 50 54 46 63 58 277 261 259 257 258 152 136 147 151 141 150 142 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 154 162 97 + 64 2 125 101 - $PROJ_DIR$\PROJECT\drivers\keyboard\keyboard.c - - - ICCARM - 2 - - - - - ICCARM - 56 48 57 59 52 45 53 42 49 60 39 38 50 54 46 63 58 277 261 259 257 258 152 136 147 151 141 150 142 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 16 179 186 185 161 106 - - - - - $PROJ_DIR$\PROJECT\drivers\fiscal\uart0.c - - - ICCARM - 12 - - - - - ICCARM - 56 48 57 59 52 45 53 42 49 60 39 38 50 54 46 63 58 277 261 259 257 258 152 136 147 151 141 150 142 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 162 - - - - - $PROJ_DIR$\PROJECT\drivers\fram\fram.c + $PROJ_DIR$\OS\uc\os_ii\source\os_tmr.c ICCARM @@ -1011,156 +598,12 @@ ICCARM - 56 48 57 59 52 45 53 42 49 60 39 38 50 54 46 63 58 277 261 259 257 258 152 136 147 151 141 150 142 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 171 157 + 64 2 125 101 - $PROJ_DIR$\PROJECT\drivers\lcd\lcd.c - - - ICCARM - 10 - - - - - ICCARM - 56 48 57 59 52 44 51 43 45 53 42 49 60 39 38 50 54 46 63 58 277 261 259 257 258 152 136 147 151 141 150 142 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 164 166 - - - - - $PROJ_DIR$\PROJECT\drivers\modem\modem.c - - - ICCARM - 56 48 57 59 52 45 53 42 49 60 39 38 50 54 46 63 58 277 261 259 257 258 152 136 147 151 141 150 142 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 16 179 181 186 185 174 170 - - - - - $PROJ_DIR$\PROJECT\drivers\modem\uart2.c - - - ICCARM - 122 - - - - - ICCARM - 56 48 57 59 52 45 53 42 49 60 39 38 50 54 46 63 58 277 261 259 257 258 152 136 147 151 141 150 142 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 170 - - - - - $PROJ_DIR$\PROJECT\drivers\fram\spi.c - - - ICCARM - 1 - - - - - ICCARM - 56 48 57 59 42 50 46 63 58 277 257 152 147 151 153 244 157 - - - - - $PROJ_DIR$\PROJECT\drivers\player1053\player1053.c - - - ICCARM - 123 - - - - - ICCARM - 56 48 57 59 52 45 53 42 49 60 39 38 50 54 46 63 58 277 261 259 257 258 152 136 147 151 141 150 142 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 175 155 77 - - - - - $PROJ_DIR$\PROJECT\app\ftp_app.c - - - ICCARM - 291 - - - - - ICCARM - 56 48 57 59 52 45 53 42 49 60 39 40 38 50 54 46 63 58 277 261 259 257 258 152 136 147 151 141 150 142 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 16 179 195 176 184 186 185 154 95 94 - - - - - $PROJ_DIR$\PROJECT\app\control.c - - - ICCARM - 203 - - - - - ICCARM - 56 48 57 59 52 45 53 42 49 60 39 38 50 54 46 63 58 277 261 259 257 258 152 136 147 151 141 150 142 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 179 186 185 - - - - - $PROJ_DIR$\PROJECT\app\modem_task.c - - - ICCARM - 5 - - - - - ICCARM - 56 48 57 59 52 45 53 42 49 60 39 38 50 54 46 63 58 277 261 259 257 258 152 136 147 151 141 150 142 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 16 179 176 181 186 185 154 174 94 - - - - - $PROJ_DIR$\PROJECT\app\term_tsk.c - - - ICCARM - 4 - - - - - ICCARM - 56 48 57 59 52 45 53 42 49 60 39 40 38 50 54 46 63 58 277 261 259 257 258 152 136 147 151 141 150 142 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 16 179 195 196 176 184 186 185 189 154 171 81 93 94 - - - - - $PROJ_DIR$\PROJECT\data\data.c - - - ICCARM - 15 - - - - - ICCARM - 56 48 57 59 52 45 53 42 49 60 39 38 50 54 46 63 58 277 261 259 257 258 152 136 147 151 141 150 142 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 179 186 185 171 94 - - - - - $PROJ_DIR$\PROJECT\data\datadesc.c + $PROJ_DIR$\OS\bsp\net_bsp.c ICCARM @@ -1170,171 +613,207 @@ ICCARM - 56 48 57 59 52 45 53 42 49 60 39 40 38 50 54 46 63 58 277 261 259 257 258 152 136 147 151 141 150 142 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 16 179 195 196 176 181 184 186 185 189 154 171 161 174 81 73 109 106 112 93 94 + 301 57 290 297 294 28 293 66 280 55 305 34 78 87 45 27 80 64 0 1 2 127 114 123 136 107 116 102 121 125 101 135 98 108 130 109 112 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 - $PROJ_DIR$\PROJECT\app\host_app.c + $PROJ_DIR$\OS\uc\os_ii\source\os_mutex.c ICCARM - 8 + 58 ICCARM - 56 48 57 59 52 45 53 42 49 60 39 38 50 54 46 63 58 277 261 259 257 258 152 136 147 151 141 150 142 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 16 179 196 + 64 2 125 101 - $PROJ_DIR$\PROJECT\drivers\ccnet\CCRSProtocol.c + $PROJ_DIR$\OS\uc\os_ii\source\os_flag.c ICCARM - 13 + 48 ICCARM - 56 48 57 59 52 61 45 53 42 49 62 60 39 38 50 54 46 63 58 277 261 259 257 258 152 136 147 151 141 150 142 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 191 160 165 108 + 64 2 125 101 - $PROJ_DIR$\PROJECT\drivers\ccnet\uart1.c - - - ICCARM - 6 - - - - - ICCARM - 56 48 57 59 52 45 53 42 49 60 39 38 50 54 46 63 58 277 261 259 257 258 152 136 147 151 141 150 142 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 165 - - - - - $PROJ_DIR$\PROJECT\app\console_cmd.c - - - ICCARM - 212 - - - - - ICCARM - 56 48 57 59 52 45 53 42 49 60 39 40 38 50 54 46 63 58 277 261 259 257 258 152 136 147 151 141 150 142 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 16 194 179 176 184 186 185 189 154 171 81 93 94 96 - - - - - $PROJ_DIR$\PROJECT\app\journal.c - - - ICCARM - 3 - - - - - ICCARM - 56 48 57 59 52 45 53 42 49 60 39 40 38 50 54 46 63 58 277 261 259 257 258 152 136 147 151 141 150 142 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 16 179 195 176 184 186 185 189 154 171 81 97 106 93 94 - - - - - [ROOT_NODE] - - - ILINK - 65 - - - - - $PROJ_DIR$\OS\uc\tcpip\Source\net_buf.c - - - ICCARM - 198 - - - - - ICCARM - 277 259 257 136 147 151 141 150 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 - - - - - $PROJ_DIR$\OS\uc\tcpip\Ports\ARM\IAR\net_util_a.asm + $PROJ_DIR$\OS\bsp\cstartup.s AARM - 69 + 72 AARM - 64 + 36 - $PROJ_DIR$\OS\uc\tcpip\Source\net_dbg.c + $PROJ_DIR$\OS\uc\os_ii\source\os_core.c ICCARM - 284 + 29 ICCARM - 277 259 257 136 147 151 141 150 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 + 64 2 125 101 - $PROJ_DIR$\OS\uc\tcpip\OS\net_os.c + $PROJ_DIR$\OS\uc\tcpip\IF\Ether\net_if.c ICCARM - 208 + 304 ICCARM - 277 259 257 136 147 151 141 150 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 + 64 1 2 123 136 107 116 102 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 - $PROJ_DIR$\OS\uc\tcpip\Source\net_conn.c + $PROJ_DIR$\OS\uc\os_ii\port\os_dcc.c ICCARM - 199 + 276 ICCARM - 277 259 257 136 147 151 141 150 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 + 64 2 125 101 - $PROJ_DIR$\OS\uc\tcpip\Source\net_err.c + $PROJ_DIR$\OS\uc\os_ii\port\os_dbg.c + + + ICCARM + 7 + + + + + ICCARM + 64 2 125 101 + + + + + $PROJ_DIR$\OS\uc\os_ii\source\os_mem.c + + + ICCARM + 95 + + + + + ICCARM + 64 2 125 101 + + + + + $PROJ_DIR$\OS\uc\tcpip\IF\net_if_pkt.c + + + ICCARM + 33 + + + + + ICCARM + 64 1 2 123 136 107 116 102 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 + + + + + $PROJ_DIR$\OS\uc\tcpip\Source\net_sock.c + + + ICCARM + 298 + + + + + ICCARM + 64 1 2 123 136 107 116 102 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 + + + + + $PROJ_DIR$\OS\uc\tcpip\Source\net_arp.c + + + ICCARM + 50 + + + + + ICCARM + 64 1 2 123 136 107 116 102 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 + + + + + $PROJ_DIR$\OS\uc\tcpip\Source\net_tmr.c + + + ICCARM + 92 + + + + + ICCARM + 64 1 2 123 136 107 116 102 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 + + + + + $PROJ_DIR$\OS\uc\tcpip\Source\net_icmp.c + + + ICCARM + 18 + + + + + ICCARM + 64 1 2 123 136 107 116 102 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 + + + + + $PROJ_DIR$\OS\uc\tcpip\Source\net_bsd.c ICCARM @@ -1344,975 +823,39 @@ ICCARM - 277 259 257 136 147 151 141 150 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 + 64 1 2 123 136 107 116 102 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 - - $PROJ_DIR$\OS\uc\tcpip\Source\net_ctr.c - - - ICCARM - 254 - - - - - ICCARM - 277 259 257 136 147 151 141 150 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 - - - - - $PROJ_DIR$\OS\uc\tcpip\Source\net.c - - - ICCARM - 209 - - - - - ICCARM - 277 259 257 136 147 151 141 150 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 - - - - - $PROJ_DIR$\OS\uc\tcpip\Source\net_arp.c - - - ICCARM - 201 - - - - - ICCARM - 277 259 257 136 147 151 141 150 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 - - - - - $PROJ_DIR$\OS\uc\tcpip\Source\net_ascii.c - - - ICCARM - 202 - - - - - ICCARM - 277 259 257 136 147 151 141 150 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 - - - - - $PROJ_DIR$\OS\uc\tcpip\Source\net_bsd.c - - - ICCARM - 211 - - - - - ICCARM - 277 259 257 136 147 151 141 150 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 - - - - - $PROJ_DIR$\OS\uc\os_ii\source\os_mbox.c - - - ICCARM - 272 - - - - - ICCARM - 277 257 153 244 - - - - - $PROJ_DIR$\OS\uc\os_ii\source\os_sem.c - - - ICCARM - 255 - - - - - ICCARM - 277 257 153 244 - - - - - $PROJ_DIR$\OS\uc\os_ii\source\os_tmr.c - - - ICCARM - 210 - - - - - ICCARM - 277 257 153 244 - - - - - $PROJ_DIR$\OS\uc\tcpip\IF\net_if_pkt.c - - - ICCARM - 206 - - - - - ICCARM - 277 259 257 136 147 151 141 150 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 - - - - - $PROJ_DIR$\OS\uc\tcpip\NIC\ETHER\LPC2368\net_nic.c - - - ICCARM - 207 - - - - - ICCARM - 277 259 257 136 147 151 141 150 153 244 239 246 247 248 252 235 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 - - - - - $PROJ_DIR$\OS\uc\os_ii\source\os_mutex.c - - - ICCARM - 274 - - - - - ICCARM - 277 257 153 244 - - - - - $PROJ_DIR$\OS\uc\os_ii\source\os_q.c - - - ICCARM - 256 - - - - - ICCARM - 277 257 153 244 - - - - - $PROJ_DIR$\OS\uc\os_ii\source\os_task.c - - - ICCARM - 270 - - - - - ICCARM - 277 257 153 244 - - - - - $PROJ_DIR$\OS\uc\os_ii\source\os_mem.c - - - ICCARM - 264 - - - - - ICCARM - 277 257 153 244 - - - - - $PROJ_DIR$\OS\uc\tcpip\NIC\ETHER\PHY\KS8721BL\net_phy.c - - - ICCARM - 200 - - - - - ICCARM - 277 259 257 136 147 151 141 150 153 244 239 246 247 248 252 235 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 - - - - - $PROJ_DIR$\OS\uc\os_ii\source\os_time.c - - - ICCARM - 205 - - - - - ICCARM - 277 257 153 244 - - - - - $PROJ_DIR$\OS\uc\tcpip\IF\Ether\net_if.c - - - ICCARM - 204 - - - - - ICCARM - 277 259 257 136 147 151 141 150 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 - - - - - $PROJ_DIR$\OS\bsp\bsp.c - - - ICCARM - 266 - - - - - ICCARM - 56 48 57 59 52 45 53 42 49 60 39 38 50 54 46 63 58 277 261 259 257 258 152 136 147 151 141 150 142 153 244 239 246 247 248 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 - - - - - $PROJ_DIR$\OS\app\app.c - - - ICCARM - 265 - - - - - ICCARM - 56 48 57 59 52 45 53 42 49 60 39 40 38 50 54 46 63 58 277 261 259 257 258 152 136 147 151 141 150 142 153 244 239 246 247 248 252 215 219 230 232 222 218 220 234 213 223 224 29 30 25 35 33 18 27 20 21 37 16 179 176 184 186 185 189 154 171 157 161 164 77 91 105 93 - - - - - - SolariumWeb - - $PROJ_DIR$\OS\uc\tcpip\Source\net_sock.c - $PROJ_DIR$\PROJECT\app\app_serv.c - $PROJ_DIR$\OS\uc\tcpip\Source\net_ip.c - $PROJ_DIR$\OS\uc\tcpip\Source\net_tcp.c - $PROJ_DIR$\OS\uc\tcpip\Source\net_udp.c - $PROJ_DIR$\OS\uc\tcpip\Source\net_icmp.c - $PROJ_DIR$\OS\uc\tcpip\Source\net_stat.c - $PROJ_DIR$\OS\uc\tcpip\Source\net_tmr.c - $PROJ_DIR$\OS\uc\tcpip\Source\net_util.c - $PROJ_DIR$\PROJECT\menu\menu.c - $PROJ_DIR$\PROJECT\menu\menudesc.c - $PROJ_DIR$\PROJECT\libs\lpc23xx-iap.c - $PROJ_DIR$\PROJECT\libs\crc16.c - $PROJ_DIR$\SolariumWeb\Obj\PROJECT\drivers\modem\modem.o - $PROJ_DIR$\SolariumWeb\Obj\PROJECT\drivers\modem\uart2.o - $PROJ_DIR$\SolariumWeb\Obj\PROJECT\services\console.o - $PROJ_DIR$\SolariumWeb\Obj\PROJECT\services\time.o - $PROJ_DIR$\SolariumWeb\Obj\PROJECT\drivers\keyboard\keyboard.o - $PROJ_DIR$\SolariumWeb\Obj\PROJECT\webserver\http-strings.o - $PROJ_DIR$\SolariumWeb\Obj\PROJECT\webserver\httpd-fsdata.o - $PROJ_DIR$\SolariumWeb\Obj\PROJECT\services\validator.o - $PROJ_DIR$\SolariumWeb\Obj\PROJECT\drivers\lcd\lcd.o - $PROJ_DIR$\SolariumWeb\Obj\PROJECT\webserver\httpd-fs.o - $PROJ_DIR$\SolariumWeb\Obj\PROJECT\drivers\fiscal\uart0.o - $PROJ_DIR$\SolariumWeb\Obj\PROJECT\drivers\fram\spi.o - $PROJ_DIR$\SolariumWeb\Obj\PROJECT\drivers\fiscal\fiscal.o - $PROJ_DIR$\SolariumWeb\Obj\PROJECT\app\term_tsk.o - $PROJ_DIR$\SolariumWeb\Obj\PROJECT\libs\lpc23xx-iap.o - $PROJ_DIR$\SolariumWeb\Obj\PROJECT\menu\menudesc.o - $PROJ_DIR$\SolariumWeb\Obj\PROJECT\services\coin.o - $PROJ_DIR$\SolariumWeb\Obj\PROJECT\data\data.o - $PROJ_DIR$\SolariumWeb\Obj\PROJECT\data\datadesc.o - $PROJ_DIR$\SolariumWeb\Obj\PROJECT\drivers\ccnet\CCRSProtocol.o - $PROJ_DIR$\SolariumWeb\Obj\PROJECT\libs\crc16.o - $PROJ_DIR$\SolariumWeb\Obj\PROJECT\webserver\httpd.o - $PROJ_DIR$\SolariumWeb\Obj\PROJECT\services\ftp_client.o - $PROJ_DIR$\SolariumWeb\Obj\PROJECT\services\fr.o - $PROJ_DIR$\SolariumWeb\Obj\PROJECT\menu\menu.o - $PROJ_DIR$\SolariumWeb\Obj\PROJECT\services\mode.o - $PROJ_DIR$\SolariumWeb\Obj\PROJECT\services\score_tsk.o - $PROJ_DIR$\SolariumWeb\Obj\PROJECT\drivers\ccnet\uart1.o - $PROJ_DIR$\SolariumWeb\Obj\PROJECT\app\modem_task.o - $PROJ_DIR$\SolariumWeb\Obj\PROJECT\drivers\fram\fram.o - $PROJ_DIR$\PROJECT\webserver\http-strings.c - $PROJ_DIR$\PROJECT\webserver\httpd-fs.c - $PROJ_DIR$\PROJECT\services\console.c - $PROJ_DIR$\PROJECT\services\mode.c - $PROJ_DIR$\PROJECT\webserver\httpd.c - $PROJ_DIR$\PROJECT\services\ftp_client.c - $PROJ_DIR$\SolariumWeb\Obj\OS\bsp\bsp.o - $PROJ_DIR$\PROJECT\services\time.c - $PROJ_DIR$\PROJECT\services\validator.c - $PROJ_DIR$\PROJECT\webserver\httpd-fsdata.c - $PROJ_DIR$\PROJECT\services\score_tsk.c - $PROJ_DIR$\PROJECT\services\coin.c - $PROJ_DIR$\PROJECT\services\fr.c - $PROJ_DIR$\OS\bsp\net_bsp.c - $PROJ_DIR$\OS\uc\os_ii\port\os_dbg.c - $PROJ_DIR$\OS\uc\os_ii\port\os_dcc.c - $PROJ_DIR$\OS\uc\lib\lib_mem.c - $PROJ_DIR$\OS\uc\lib\lib_str.c - $PROJ_DIR$\OS\uc\os_ii\port\os_cpu_c.c - $PROJ_DIR$\OS\uc\os_ii\source\os_core.c - $PROJ_DIR$\OS\uc\os_ii\source\os_flag.c - $PROJ_DIR$\OS\bsp\net_isr.c - $PROJ_DIR$\PROJECT\drivers\fiscal\fiscal.c - $PROJ_DIR$\PROJECT\drivers\keyboard\keyboard.c - $PROJ_DIR$\PROJECT\drivers\fiscal\uart0.c - $PROJ_DIR$\PROJECT\drivers\fram\fram.c - $PROJ_DIR$\PROJECT\drivers\lcd\lcd.c - $PROJ_DIR$\PROJECT\drivers\modem\modem.c - $PROJ_DIR$\PROJECT\drivers\modem\uart2.c - $PROJ_DIR$\PROJECT\drivers\fram\spi.c - $PROJ_DIR$\PROJECT\app\ftp_app.c - $PROJ_DIR$\PROJECT\app\control.c - $PROJ_DIR$\PROJECT\app\modem_task.c - $PROJ_DIR$\PROJECT\app\term_tsk.c - $PROJ_DIR$\PROJECT\data\data.c - $PROJ_DIR$\PROJECT\data\datadesc.c - $PROJ_DIR$\PROJECT\app\host_app.c - $PROJ_DIR$\PROJECT\drivers\ccnet\CCRSProtocol.c - $PROJ_DIR$\PROJECT\drivers\ccnet\uart1.c - $PROJ_DIR$\PROJECT\app\console_cmd.c - $PROJ_DIR$\PROJECT\app\journal.c - $PROJ_DIR$\SolariumWeb\Obj\OS\uc\os_ii\port\os_dcc.o - $PROJ_DIR$\SolariumWeb\Obj\OS\uc\lib\lib_str.o - $PROJ_DIR$\SolariumWeb\Obj\OS\uc\os_ii\port\os_dbg.o - $PROJ_DIR$\SolariumWeb\Obj\OS\uc\os_ii\source\os_time.o - $PROJ_DIR$\SolariumWeb\Obj\OS\uc\tcpip\Source\net_dbg.o - $PROJ_DIR$\SolariumWeb\Obj\OS\uc\tcpip\Source\net_stat.o - $PROJ_DIR$\SolariumWeb\Obj\OS\uc\os_ii\source\os_sem.o - $PROJ_DIR$\SolariumWeb\Obj\OS\uc\tcpip\Source\net_buf.o - $PROJ_DIR$\SolariumWeb\Obj\OS\uc\os_ii\port\os_cpu_c.o - $PROJ_DIR$\SolariumWeb\Obj\OS\uc\os_ii\source\os_q.o - $PROJ_DIR$\SolariumWeb\Obj\OS\uc\tcpip\Source\net_ctr.o - $PROJ_DIR$\SolariumWeb\Obj\OS\uc\tcpip\Source\net_ip.o - $PROJ_DIR$\SolariumWeb\Obj\OS\uc\tcpip\Source\net_sock.o - $PROJ_DIR$\SolariumWeb\Obj\PROJECT\app\console_cmd.o - $PROJ_DIR$\SolariumWeb\Obj\PROJECT\app\ftp_app.o - $PROJ_DIR$\SolariumWeb\Obj\PROJECT\app\control.o - $PROJ_DIR$\SolariumWeb\Obj\PROJECT\app\host_app.o - $PROJ_DIR$\SolariumWeb\Obj\PROJECT\app\journal.o - $PROJ_DIR$\SolariumWeb\Obj\OS\bsp\net_bsp.o - $PROJ_DIR$\SolariumWeb\Obj\OS\uc\os_ii\source\os_task.o - $PROJ_DIR$\SolariumWeb\Obj\OS\uc\tcpip\IF\Ether\net_if.o - $PROJ_DIR$\SolariumWeb\Obj\OS\uc\tcpip\IF\net_if_pkt.o - $PROJ_DIR$\SolariumWeb\Obj\OS\uc\tcpip\Source\net.o - $PROJ_DIR$\SolariumWeb\Obj\OS\uc\os_ii\source\os_tmr.o - $PROJ_DIR$\SolariumWeb\Obj\OS\uc\tcpip\Source\net_arp.o - $PROJ_DIR$\SolariumWeb\Obj\OS\uc\tcpip\NIC\ETHER\LPC2368\net_nic.o - $PROJ_DIR$\SolariumWeb\Obj\OS\uc\lib\lib_mem.o - $PROJ_DIR$\SolariumWeb\Obj\OS\uc\tcpip\Source\net_ascii.o - $PROJ_DIR$\SolariumWeb\Obj\OS\uc\tcpip\Source\net_icmp.o - $PROJ_DIR$\SolariumWeb\Obj\OS\bsp\net_isr.o - $PROJ_DIR$\SolariumWeb\Obj\OS\uc\tcpip\Source\net_tcp.o - $PROJ_DIR$\SolariumWeb\Obj\OS\uc\tcpip\Source\net_tmr.o - $PROJ_DIR$\SolariumWeb\Obj\OS\uc\tcpip\NIC\ETHER\PHY\KS8721BL\net_phy.o - $PROJ_DIR$\SolariumWeb\Obj\OS\uc\os_ii\source\os_core.o - $PROJ_DIR$\SolariumWeb\Obj\OS\uc\os_ii\source\os_mutex.o - $PROJ_DIR$\SolariumWeb\Obj\OS\uc\os_ii\source\os_mem.o - $PROJ_DIR$\SolariumWeb\Obj\OS\uc\tcpip\OS\net_os.o - $PROJ_DIR$\SolariumWeb\Obj\OS\uc\tcpip\Source\net_err.o - $PROJ_DIR$\SolariumWeb\Obj\OS\uc\tcpip\Source\net_udp.o - $PROJ_DIR$\SolariumWeb\Obj\OS\uc\tcpip\Source\net_bsd.o - $PROJ_DIR$\SolariumWeb\Obj\OS\uc\os_ii\source\os_mbox.o - $PROJ_DIR$\SolariumWeb\Obj\OS\uc\tcpip\Source\net_conn.o - $PROJ_DIR$\SolariumWeb\Obj\OS\uc\tcpip\Source\net_util.o - $PROJ_DIR$\SolariumWeb\Obj\PROJECT\app\app_serv.o - $PROJ_DIR$\SolariumWeb\Obj\OS\uc\os_ii\source\os_flag.o - $PROJ_DIR$\OS\uc\tcpip\Source\net_buf.c - $PROJ_DIR$\OS\uc\tcpip\Source\net_dbg.c - $PROJ_DIR$\OS\uc\tcpip\OS\net_os.c - $PROJ_DIR$\OS\uc\tcpip\Source\net_conn.c - $PROJ_DIR$\OS\uc\tcpip\Source\net_err.c - $PROJ_DIR$\OS\uc\tcpip\Source\net_ctr.c - $PROJ_DIR$\OS\uc\tcpip\Source\net.c - $PROJ_DIR$\OS\uc\tcpip\Source\net_arp.c - $PROJ_DIR$\OS\uc\tcpip\Source\net_ascii.c - $PROJ_DIR$\OS\uc\tcpip\Source\net_bsd.c - $PROJ_DIR$\OS\uc\os_ii\source\os_mbox.c - $PROJ_DIR$\OS\uc\os_ii\source\os_sem.c - $PROJ_DIR$\OS\uc\os_ii\source\os_tmr.c - $PROJ_DIR$\OS\uc\tcpip\IF\net_if_pkt.c - $PROJ_DIR$\OS\uc\tcpip\NIC\ETHER\LPC2368\net_nic.c - $PROJ_DIR$\OS\uc\os_ii\source\os_mutex.c - $PROJ_DIR$\OS\uc\os_ii\source\os_q.c - $PROJ_DIR$\OS\uc\os_ii\source\os_task.c - $PROJ_DIR$\OS\uc\os_ii\source\os_mem.c - $PROJ_DIR$\OS\uc\tcpip\NIC\ETHER\PHY\KS8721BL\net_phy.c - $PROJ_DIR$\OS\uc\os_ii\source\os_time.c - $PROJ_DIR$\OS\uc\tcpip\IF\Ether\net_if.c - $PROJ_DIR$\OS\bsp\bsp.c - $PROJ_DIR$\SolariumWeb\Obj\OS\app\app.o - $PROJ_DIR$\OS\app\app.c - - - $PROJ_DIR$\OS\uc\tcpip\Source\net_sock.c - - - ICCARM - 96 - - - $PROJ_DIR$\PROJECT\app\app_serv.c - - - ICCARM - 127 - - - - - $PROJ_DIR$\OS\uc\tcpip\Source\net_ip.c - - - ICCARM - 95 - - - - - $PROJ_DIR$\OS\uc\tcpip\Source\net_tcp.c - - - ICCARM - 114 - - - - - $PROJ_DIR$\OS\uc\tcpip\Source\net_udp.c - - - ICCARM - 122 - - - - - $PROJ_DIR$\OS\uc\tcpip\Source\net_icmp.c - - - ICCARM - 112 - - - - - $PROJ_DIR$\OS\uc\tcpip\Source\net_stat.c - - - ICCARM - 89 - - - - - $PROJ_DIR$\OS\uc\tcpip\Source\net_tmr.c - - - ICCARM - 115 - - - - - $PROJ_DIR$\OS\uc\tcpip\Source\net_util.c - - - ICCARM - 126 - - - - - $PROJ_DIR$\PROJECT\menu\menu.c - - - ICCARM - 37 - - - - - $PROJ_DIR$\PROJECT\menu\menudesc.c - - - ICCARM - 28 - - - - - $PROJ_DIR$\PROJECT\libs\lpc23xx-iap.c - - - ICCARM - 27 - - - - - $PROJ_DIR$\PROJECT\libs\crc16.c - - - ICCARM - 33 - - - - - $PROJ_DIR$\PROJECT\webserver\http-strings.c - - - ICCARM - 18 - - - - - $PROJ_DIR$\PROJECT\webserver\httpd-fs.c - - - ICCARM - 22 - - - - - $PROJ_DIR$\PROJECT\services\console.c - - - ICCARM - 15 - - - - - $PROJ_DIR$\PROJECT\services\mode.c - - - ICCARM - 38 - - - - - $PROJ_DIR$\PROJECT\webserver\httpd.c - - - ICCARM - 34 - - - - - $PROJ_DIR$\PROJECT\services\ftp_client.c - - - ICCARM - 35 - - - - - $PROJ_DIR$\PROJECT\services\time.c - - - ICCARM - 16 - - - - - $PROJ_DIR$\PROJECT\services\validator.c - - - ICCARM - 20 - - - - - $PROJ_DIR$\PROJECT\webserver\httpd-fsdata.c - - - ICCARM - 19 - - - - - $PROJ_DIR$\PROJECT\services\score_tsk.c - - - ICCARM - 39 - - - - - $PROJ_DIR$\PROJECT\services\coin.c - - - ICCARM - 29 - - - - - $PROJ_DIR$\PROJECT\services\fr.c - - - ICCARM - 36 - - - - - $PROJ_DIR$\OS\bsp\net_bsp.c - - - ICCARM - 102 - - - - - $PROJ_DIR$\OS\uc\os_ii\port\os_dbg.c - - - ICCARM - 86 - - - - - $PROJ_DIR$\OS\uc\os_ii\port\os_dcc.c - - - ICCARM - 84 - - - - - $PROJ_DIR$\OS\uc\lib\lib_mem.c - - - ICCARM - 110 - - - - - $PROJ_DIR$\OS\uc\lib\lib_str.c - - - ICCARM - 85 - - - - - $PROJ_DIR$\OS\uc\os_ii\port\os_cpu_c.c - - - ICCARM - 92 - - - - - $PROJ_DIR$\OS\uc\os_ii\source\os_core.c - - - ICCARM - 117 - - - - - $PROJ_DIR$\OS\uc\os_ii\source\os_flag.c - - - ICCARM - 128 - - - - - $PROJ_DIR$\OS\bsp\net_isr.c - - - ICCARM - 113 - - - - - $PROJ_DIR$\PROJECT\drivers\fiscal\fiscal.c - - - ICCARM - 25 - - - - - $PROJ_DIR$\PROJECT\drivers\keyboard\keyboard.c ICCARM 17 - - - $PROJ_DIR$\PROJECT\drivers\fiscal\uart0.c - + ICCARM - 23 + 301 57 290 297 294 28 293 66 280 55 20 305 281 34 78 87 45 27 80 64 0 1 2 127 114 123 136 107 116 102 121 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 163 166 217 207 206 220 225 213 226 193 221 231 227 212 189 194 197 200 250 273 252 244 261 242 265 235 268 269 238 243 249 - - - - $PROJ_DIR$\PROJECT\drivers\fram\fram.c - - - ICCARM - 42 - - - - - $PROJ_DIR$\PROJECT\drivers\lcd\lcd.c - - - ICCARM - 21 - - - - - $PROJ_DIR$\PROJECT\drivers\modem\modem.c - - - ICCARM - 13 - - - - - $PROJ_DIR$\PROJECT\drivers\modem\uart2.c - - - ICCARM - 14 - - - - - $PROJ_DIR$\PROJECT\drivers\fram\spi.c - - - ICCARM - 24 - - - - - $PROJ_DIR$\PROJECT\app\ftp_app.c - - - ICCARM - 98 - - - - - $PROJ_DIR$\PROJECT\app\control.c - - - ICCARM - 99 - - - - - $PROJ_DIR$\PROJECT\app\modem_task.c - - - ICCARM - 41 - - - - - $PROJ_DIR$\PROJECT\app\term_tsk.c - - - ICCARM - 26 - - - - - $PROJ_DIR$\PROJECT\data\data.c - - - ICCARM - 30 - - - - - $PROJ_DIR$\PROJECT\data\datadesc.c - - - ICCARM - 31 - - - - - $PROJ_DIR$\PROJECT\app\host_app.c - - - ICCARM - 100 - - - - - $PROJ_DIR$\PROJECT\drivers\ccnet\CCRSProtocol.c - - - ICCARM - 32 - - - - - $PROJ_DIR$\PROJECT\drivers\ccnet\uart1.c - - - ICCARM - 40 - - - - - $PROJ_DIR$\PROJECT\app\console_cmd.c - - - ICCARM - 97 - - - - - $PROJ_DIR$\PROJECT\app\journal.c - - - ICCARM - 101 - - - - - $PROJ_DIR$\OS\uc\tcpip\Source\net_buf.c - - - ICCARM - 91 - - - - - $PROJ_DIR$\OS\uc\tcpip\Source\net_dbg.c - - - ICCARM - 88 - - - - - $PROJ_DIR$\OS\uc\tcpip\OS\net_os.c - - - ICCARM - 120 - - + $PROJ_DIR$\OS\uc\tcpip\Source\net_conn.c ICCARM - 125 + 88 - - - $PROJ_DIR$\OS\uc\tcpip\Source\net_err.c - + ICCARM - 121 + 64 1 2 123 136 107 116 102 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 - + $PROJ_DIR$\OS\uc\tcpip\Source\net_ctr.c @@ -2322,169 +865,860 @@ 94 + + + ICCARM + 64 1 2 123 136 107 116 102 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 + + - $PROJ_DIR$\OS\uc\tcpip\Source\net.c + $PROJ_DIR$\OS\uc\tcpip\Source\net_udp.c ICCARM - 106 + 8 + + + ICCARM + 64 1 2 123 136 107 116 102 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 + + - $PROJ_DIR$\OS\uc\tcpip\Source\net_arp.c + $PROJ_DIR$\OS\uc\tcpip\Source\net_ip.c ICCARM - 108 + 22 + + + ICCARM + 64 1 2 123 136 107 116 102 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 + + - $PROJ_DIR$\OS\uc\tcpip\Source\net_ascii.c + $PROJ_DIR$\OS\uc\tcpip\Source\net_stat.c ICCARM - 111 + 83 + + + ICCARM + 64 1 2 123 136 107 116 102 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 + + - $PROJ_DIR$\OS\uc\tcpip\Source\net_bsd.c + $PROJ_DIR$\PROJECT\app\app_vlad.c ICCARM - 123 + 306 + + + ICCARM + 301 57 290 297 294 6 28 293 66 280 70 55 20 305 281 34 78 87 45 27 80 64 0 1 2 127 114 123 136 107 116 102 121 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 163 166 217 188 207 206 220 225 213 226 193 221 231 227 212 189 191 194 252 244 261 242 235 268 269 238 243 249 + + - $PROJ_DIR$\OS\uc\os_ii\source\os_mbox.c + $PROJ_DIR$\PROJECT\app\console_cmd.c ICCARM - 124 + 10 + + + ICCARM + 301 57 290 297 294 28 293 66 280 55 305 281 34 78 87 45 27 80 64 0 1 2 127 114 123 136 107 116 102 121 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 163 170 217 206 225 213 226 193 231 227 252 238 243 284 + + - $PROJ_DIR$\OS\uc\os_ii\source\os_sem.c + $PROJ_DIR$\OS\uc\tcpip\Source\net_util.c ICCARM - 90 + 86 + + + ICCARM + 64 1 2 123 136 107 116 102 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 + + - $PROJ_DIR$\OS\uc\os_ii\source\os_tmr.c + $PROJ_DIR$\OS\uc\tcpip\Source\net_buf.c ICCARM - 107 + 77 + + + ICCARM + 64 1 2 123 136 107 116 102 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 + + - $PROJ_DIR$\OS\uc\tcpip\IF\net_if_pkt.c + $PROJ_DIR$\OS\uc\tcpip\Source\net_tcp.c ICCARM - 105 + 296 - - - $PROJ_DIR$\OS\uc\tcpip\NIC\ETHER\LPC2368\net_nic.c - + ICCARM - 109 + 64 1 2 123 136 107 116 102 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 - + - $PROJ_DIR$\OS\uc\os_ii\source\os_mutex.c + $PROJ_DIR$\OS\uc\tcpip\Ports\ARM\IAR\net_util_a.asm - ICCARM - 118 + AARM + 97 - - - $PROJ_DIR$\OS\uc\os_ii\source\os_q.c - + - ICCARM - 93 + AARM + 52 - + - $PROJ_DIR$\OS\uc\os_ii\source\os_task.c - - - ICCARM - 103 - - - - - $PROJ_DIR$\OS\uc\os_ii\source\os_mem.c - - - ICCARM - 119 - - - - - $PROJ_DIR$\OS\uc\tcpip\NIC\ETHER\PHY\KS8721BL\net_phy.c - - - ICCARM - 116 - - - - - $PROJ_DIR$\OS\uc\os_ii\source\os_time.c - - - ICCARM - 87 - - - - - $PROJ_DIR$\OS\uc\tcpip\IF\Ether\net_if.c - - - ICCARM - 104 - - - - - $PROJ_DIR$\OS\bsp\bsp.c + $PROJ_DIR$\OS\uc\tcpip\Source\net_dbg.c ICCARM 49 + + + ICCARM + 64 1 2 123 136 107 116 102 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 + + - $PROJ_DIR$\OS\app\app.c + $PROJ_DIR$\OS\uc\tcpip\OS\net_os.c ICCARM - 152 + 53 + + + + + ICCARM + 64 1 2 123 136 107 116 102 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 + + + + + $PROJ_DIR$\OS\uc\tcpip\Source\net.c + + + ICCARM + 91 + + + + + ICCARM + 64 1 2 123 136 107 116 102 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 + + + + + $PROJ_DIR$\OS\uc\tcpip\Source\net_err.c + + + ICCARM + 277 + + + + + ICCARM + 64 1 2 123 136 107 116 102 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 + + + + + $PROJ_DIR$\OS\uc\tcpip\Source\net_ascii.c + + + ICCARM + 62 + + + + + ICCARM + 64 1 2 123 136 107 116 102 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 + + + + + $PROJ_DIR$\PROJECT\drivers\mfrc522\mfrc522data.c + + + ICCARM + 32 + + + + + ICCARM + 301 57 290 297 294 28 293 66 280 55 20 305 281 34 78 87 45 27 80 64 0 1 2 127 114 123 136 107 116 102 121 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 217 213 226 212 191 194 252 243 + + + + + $PROJ_DIR$\PROJECT\drivers\ccnet\CCRSProtocol.c + + + ICCARM + 68 + + + + + ICCARM + 301 57 290 297 294 6 28 293 66 280 70 55 305 34 78 87 45 27 80 64 0 1 2 127 114 123 136 107 116 102 121 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 221 203 211 249 + + + + + $PROJ_DIR$\PROJECT\app\journal.c + + + ICCARM + 278 + + + + + ICCARM + 301 57 290 297 294 28 293 66 280 55 305 281 34 78 87 45 27 80 64 0 1 2 127 114 123 136 107 116 102 121 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 163 217 188 206 225 213 226 193 231 227 252 235 268 238 243 + + + + + $PROJ_DIR$\PROJECT\drivers\mfrc522\rfid-spi.c + + + ICCARM + 15 + + + + + ICCARM + 301 57 290 297 294 28 293 66 280 55 20 305 281 34 78 87 45 27 80 64 0 1 2 127 114 123 136 107 116 102 121 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 212 194 + + + + + $PROJ_DIR$\PROJECT\drivers\modem\modem.c + + + ICCARM + 24 + + + + + ICCARM + 301 57 290 297 294 28 293 66 280 55 305 34 78 87 45 27 80 64 0 1 2 127 114 123 136 107 116 102 121 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 163 217 220 213 226 197 199 + + + + + $PROJ_DIR$\PROJECT\drivers\lcd\lcd.c + + + ICCARM + 288 + + + + + ICCARM + 301 57 290 297 294 44 42 4 28 293 66 280 55 305 34 78 87 45 27 80 64 0 1 2 127 114 123 136 107 116 102 121 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 205 229 + + + + + $PROJ_DIR$\PROJECT\drivers\modem\uart2.c + + + ICCARM + 38 + + + + + ICCARM + 301 57 290 297 294 28 293 66 280 55 305 34 78 87 45 27 80 64 0 1 2 127 114 123 136 107 116 102 121 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 199 + + + + + $PROJ_DIR$\PROJECT\drivers\fram\spi.c + + + ICCARM + 79 + + + + + ICCARM + 301 57 290 297 44 42 4 66 78 45 27 80 64 2 114 136 107 125 101 212 + + + + + $PROJ_DIR$\PROJECT\app\term_tsk.c + + + ICCARM + 56 + + + + + ICCARM + 301 57 290 297 294 28 293 66 280 55 305 281 34 78 87 45 27 80 64 0 1 2 127 114 123 136 107 116 102 121 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 163 217 188 207 206 208 225 213 226 193 231 227 252 238 243 + + + + + $PROJ_DIR$\PROJECT\drivers\fiscal\fiscal.c + + + ICCARM + 43 + + + + + ICCARM + 301 57 290 297 294 28 293 66 280 55 305 34 78 87 45 27 80 64 0 1 2 127 114 123 136 107 116 102 121 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 231 222 235 + + + + + $PROJ_DIR$\PROJECT\drivers\fiscal\uart0.c + + + ICCARM + 39 + + + + + ICCARM + 301 57 290 297 294 28 293 66 280 55 305 34 78 87 45 27 80 64 0 1 2 127 114 123 136 107 116 102 121 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 222 + + + + + $PROJ_DIR$\PROJECT\data\data.c + + + ICCARM + 41 + + + + + ICCARM + 301 57 290 297 294 28 293 66 280 55 305 34 78 87 45 27 80 64 0 1 2 127 114 123 136 107 116 102 121 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 217 213 226 227 243 + + + + + $PROJ_DIR$\PROJECT\app\control.c + + + ICCARM + 282 + + + + + ICCARM + 301 57 290 297 294 28 293 66 280 55 305 34 78 87 45 27 80 64 0 1 2 127 114 123 136 107 116 102 121 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 217 213 226 + + + + + $PROJ_DIR$\PROJECT\app\modem_task.c + + + ICCARM + 51 + + + + + ICCARM + 301 57 290 297 294 28 293 66 280 55 305 34 78 87 45 27 80 64 0 1 2 127 114 123 136 107 116 102 121 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 163 217 206 220 213 226 231 197 243 + + + + + $PROJ_DIR$\PROJECT\drivers\ccnet\uart1.c + + + ICCARM + 287 + + + + + ICCARM + 301 57 290 297 294 28 293 66 280 55 305 34 78 87 45 27 80 64 0 1 2 127 114 123 136 107 116 102 121 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 211 + + + + + $PROJ_DIR$\PROJECT\drivers\fram\fram.c + + + ICCARM + 21 + + + + + ICCARM + 301 57 290 297 294 28 293 66 280 55 305 34 78 87 45 27 80 64 0 1 2 127 114 123 136 107 116 102 121 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 227 212 + + + + + $PROJ_DIR$\PROJECT\app\host_app.c + + + ICCARM + 71 + + + + + ICCARM + 301 57 290 297 294 28 293 66 280 55 305 34 78 87 45 27 80 64 0 1 2 127 114 123 136 107 116 102 121 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 163 217 207 + + + + + $PROJ_DIR$\PROJECT\app\ftp_app.c + + + ICCARM + 292 + + + + + ICCARM + 301 57 290 297 294 28 293 66 280 55 305 281 34 78 87 45 27 80 64 0 1 2 127 114 123 136 107 116 102 121 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 163 217 188 206 225 213 226 231 247 243 + + + + + $PROJ_DIR$\PROJECT\app\service_name.c + + + ICCARM + 40 + + + + + ICCARM + 301 57 290 297 294 28 34 78 87 45 27 80 208 + + + + + $PROJ_DIR$\PROJECT\drivers\keyboard\keyboard.c + + + ICCARM + 3 + + + + + ICCARM + 301 57 290 297 294 28 293 66 280 55 305 34 78 87 45 27 80 64 0 1 2 127 114 123 136 107 116 102 121 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 163 217 213 226 189 268 + + + + + $PROJ_DIR$\PROJECT\data\datadesc.c + + + ICCARM + 23 + + + + + ICCARM + 301 57 290 297 294 28 293 66 280 55 20 305 281 34 78 87 45 27 80 64 0 1 2 127 114 123 136 107 116 102 121 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 163 217 188 207 206 220 225 213 226 193 231 227 212 189 191 194 197 252 244 261 268 269 238 243 + + + + + $PROJ_DIR$\PROJECT\menu\menu.c + + + ICCARM + 300 + + + + + ICCARM + 301 57 290 297 294 28 293 66 280 55 305 34 78 87 45 27 80 64 0 1 2 127 114 123 136 107 116 102 121 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 163 217 206 213 231 189 205 244 261 268 243 + + + + + $PROJ_DIR$\PROJECT\menu\menudesc.c + + + ICCARM + 90 + + + + + ICCARM + 301 57 290 297 294 28 293 66 280 55 305 34 78 87 45 27 80 64 0 1 2 127 114 123 136 107 116 102 121 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 163 217 188 206 213 226 231 189 244 261 268 243 284 + + + + + $PROJ_DIR$\PROJECT\services\mode.c + + + ICCARM + 84 + + + + + ICCARM + 301 57 290 297 294 28 293 66 280 55 305 34 78 87 45 27 80 64 0 1 2 127 114 123 136 107 116 102 121 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 163 217 268 + + + + + $PROJ_DIR$\PROJECT\drivers\player1053\player1053.c + + + ICCARM + 289 + + + + + ICCARM + 301 57 290 297 294 28 293 66 280 55 305 34 78 87 45 27 80 64 0 1 2 127 114 123 136 107 116 102 121 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 200 250 241 + + + + + $PROJ_DIR$\PROJECT\libs\FatFs\syncobj.c + + + ICCARM + 65 + + + + + ICCARM + 301 57 290 297 294 28 293 66 280 55 305 281 34 78 87 45 27 80 64 0 1 2 127 114 123 136 107 116 102 121 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 263 232 + + + + + $PROJ_DIR$\PROJECT\services\fr.c + + + ICCARM + 279 + + + + + ICCARM + 301 57 290 297 294 28 293 66 280 55 305 34 78 87 45 27 80 64 0 1 2 127 114 123 136 107 116 102 121 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 163 217 206 213 226 231 222 235 243 + + + + + $PROJ_DIR$\PROJECT\services\coin.c + + + ICCARM + 67 + + + + + ICCARM + 301 57 290 297 66 78 45 27 80 64 2 114 136 107 125 101 163 217 213 226 197 242 + + + + + $PROJ_DIR$\PROJECT\services\ftp_client.c + + + ICCARM + 5 + + + + + ICCARM + 301 57 290 297 294 28 293 66 280 55 305 281 34 78 87 45 27 80 64 0 1 2 127 114 123 136 107 116 102 121 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 163 217 207 247 243 + + + + + $PROJ_DIR$\PROJECT\drivers\spi1.c + + + ICCARM + 74 + + + + + ICCARM + 301 57 290 297 66 78 45 27 80 64 2 114 136 107 125 101 241 + + + + + $PROJ_DIR$\PROJECT\libs\FatFs\ccsbcs.c + + + ICCARM + 89 + + + + + ICCARM + 301 57 290 297 294 28 293 66 280 55 305 281 34 78 87 45 27 80 64 0 1 2 127 114 123 136 107 116 102 121 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 263 232 + + + + + $PROJ_DIR$\PROJECT\libs\FatFs\diskio.c + + + ICCARM + 19 + + + + + ICCARM + 301 57 290 297 294 28 293 66 280 55 305 281 34 78 87 45 27 80 64 0 1 2 127 114 123 136 107 116 102 121 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 273 255 263 232 + + + + + $PROJ_DIR$\PROJECT\libs\FatFs\fattime.c + + + ICCARM + 285 + + + + + ICCARM + 301 57 290 297 294 28 293 66 280 55 305 281 34 78 87 45 27 80 64 0 1 2 127 114 123 136 107 116 102 121 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 274 263 232 243 + + + + + $PROJ_DIR$\PROJECT\services\score_tsk.c + + + ICCARM + 85 + + + + + ICCARM + 301 57 290 297 294 28 293 66 280 55 305 34 78 87 45 27 80 64 0 1 2 127 114 123 136 107 116 102 121 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 163 217 213 226 199 238 243 + + + + + $PROJ_DIR$\PROJECT\services\validator.c + + + ICCARM + 59 + + + + + ICCARM + 301 57 290 297 294 28 293 66 280 55 305 34 78 87 45 27 80 64 0 1 2 127 114 123 136 107 116 102 121 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 163 217 206 213 226 221 211 231 249 + + + + + $PROJ_DIR$\PROJECT\libs\lpc23xx-iap.c + + + ICCARM + 30 + + + + + ICCARM + 301 57 290 297 294 28 293 66 280 55 305 281 34 78 87 45 27 80 64 0 1 2 127 114 123 136 107 116 102 121 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 + + + + + $PROJ_DIR$\PROJECT\libs\crc16.c + + + ICCARM + 13 + + $PROJ_DIR$\PROJECT\services\console.c + + + ICCARM + 12 + + + + + ICCARM + 301 57 290 297 294 28 293 66 280 55 305 281 34 78 87 45 27 80 64 0 1 2 127 114 123 136 107 116 102 121 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 163 170 217 206 225 213 226 193 231 227 265 238 + + + + + $PROJ_DIR$\PROJECT\drivers\sdcard.c + + + ICCARM + 60 + + + + + ICCARM + 301 57 290 297 294 28 293 66 280 55 305 281 34 78 87 45 27 80 64 0 1 2 127 114 123 136 107 116 102 121 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 273 241 + + + + + $PROJ_DIR$\PROJECT\libs\FatFs\ff.c + + + ICCARM + 76 + + + + + ICCARM + 301 57 290 297 294 28 293 66 280 55 305 281 34 78 87 45 27 80 64 0 1 2 127 114 123 136 107 116 102 121 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 255 263 232 + + + + + $PROJ_DIR$\PROJECT\services\time.c + + + ICCARM + 93 + + + + + ICCARM + 301 57 290 297 294 66 34 78 87 45 27 80 64 2 114 136 107 125 101 163 217 243 + + + + + $PROJ_DIR$\PROJECT\services\music_tsk.c + + + ICCARM + 46 + + + + + ICCARM + 301 57 290 297 294 28 293 66 280 55 305 281 34 78 87 45 27 80 64 0 1 2 127 114 123 136 107 116 102 121 125 101 135 98 108 130 179 160 172 165 174 153 154 151 146 176 171 144 173 181 161 142 148 155 168 145 158 163 217 213 226 200 250 273 263 232 269 + + + + + $PROJ_DIR$\Solarium Vlad\Exe\solarium_vlad_8_56.hex + + + OBJCOPY + 25 + + + + + + SolariumWeb + [MULTI_TOOL] ILINK diff --git a/sk-mlpc2368.ewd b/sk-mlpc2368.ewd index f556706..2c7c7fa 100644 --- a/sk-mlpc2368.ewd +++ b/sk-mlpc2368.ewd @@ -6136,7 +6136,7 @@