123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217 |
- #include <iostream>
- #include <vector>
- #include <string>
- #define UPS_MODE_MONITOR
- using namespace std;
- #define TM_RTC_LEAP_YEAR(year) ((((year) % 4 == 0) && ((year) % 100 != 0)) || ((year) % 400 == 0))
- #define TM_RTC_DAYS_IN_YEAR(x) (bool)TM_RTC_LEAP_YEAR(x) ? 366 : 365
- #define TM_RTC_OFFSET_YEAR 1970
- #define TM_RTC_SECONDS_PER_DAY 86400
- #define TM_RTC_SECONDS_PER_HOUR 3600
- #define TM_RTC_SECONDS_PER_MINUTE 60
- #define TM_RTC_BCD2BIN(x) ((((x) >> 4) & 0x0F) * 10 + ((x) & 0x0F))
- #define TM_RTC_CHAR2NUM(x) ((x) - '0')
- #define TM_RTC_CHARISNUM(x) ((x) >= '0' && (x) <= '9')
- typedef struct {
- uint8_t seconds;
- uint16_t subseconds;
- uint8_t minutes;
- uint8_t hours;
- uint8_t day;
- uint8_t date;
- uint8_t month;
- uint8_t year;
- uint32_t unixx;
- } TM_RTC_t;
- uint8_t TM_RTC_Months[2][12] = {
- {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
- {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
- };
- void TM_RTC_GetDateTimeFromUnix(TM_RTC_t* data, uint32_t unixx);
- int main()
- {
- #if 0
- vector<string> msg {"Hello", "C++", "World", "from", "VS Code", "and the C++ extension!"};
-
- for (const string& word : msg)
- {
- cout << word << " ";
- }
- cout << endl;
- #endif
-
-
- TM_RTC_t data;
- TM_RTC_GetDateTimeFromUnix(&data, 1672640327);
- printf("Month %u, Date %u, Year %u, %u:%u:%u\r\n", data.month, data.date, data.year, data.hours, data.minutes, data.seconds);
- TM_RTC_GetDateTimeFromUnix(&data, 1676189542);
- printf("Month %u, Date %u, Year %u, %u:%u:%u\r\n", data.month, data.date, data.year, data.hours, data.minutes, data.seconds);
- TM_RTC_GetDateTimeFromUnix(&data, 1683619942);
- printf("Month %u, Date %u, Year %u, %u:%u:%u\r\n", data.month, data.date, data.year, data.hours, data.minutes, data.seconds);
- TM_RTC_GetDateTimeFromUnix(&data, 1694333542);
- printf("Month %u, Date %u, Year %u, %u:%u:%u\r\n", data.month, data.date, data.year, data.hours, data.minutes, data.seconds);
- TM_RTC_GetDateTimeFromUnix(&data, 1704010342);
- printf("Month %u, Date %u, Year %u, %u:%u:%u\r\n", data.month, data.date, data.year, data.hours, data.minutes, data.seconds);
- printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n");
- TM_RTC_GetDateTimeFromUnix(&data, 1706688742);
- printf("Month %u, Date %u, Year %u, %u:%u:%u\r\n", data.month, data.date, data.year, data.hours, data.minutes, data.seconds);
- TM_RTC_GetDateTimeFromUnix(&data, 1709194342);
- printf("Month %u, Date %u, Year %u, %u:%u:%u\r\n", data.month, data.date, data.year, data.hours, data.minutes, data.seconds);
- TM_RTC_GetDateTimeFromUnix(&data, 1709281315);
- printf("Month %u, Date %u, Year %u, %u:%u:%u\r\n", data.month, data.date, data.year, data.hours, data.minutes, data.seconds);
- TM_RTC_GetDateTimeFromUnix(&data, 1718180601);
- printf("Month %u, Date %u, Year %u, %u:%u:%u\r\n", data.month, data.date, data.year, data.hours, data.minutes, data.seconds);
- TM_RTC_GetDateTimeFromUnix(&data, 1735633401);
- printf("Month %u, Date %u, Year %u, %u:%u:%u\r\n", data.month, data.date, data.year, data.hours, data.minutes, data.seconds);
-
- TM_RTC_GetDateTimeFromUnix(&data, 1709101127);
- printf("Month %u, Date %u, Year %u, %u:%u:%u\r\n", data.month, data.date, data.year, data.hours, data.minutes, data.seconds);
-
- }
- void TM_RTC_GetDateTimeFromUnix(TM_RTC_t* data, uint32_t unixx) {
- uint16_t year;
-
-
- data->unixx = unixx;
-
- data->seconds = unix % 60;
-
- unixx /= 60;
-
- data->minutes = unixx % 60;
-
- unixx /= 60;
-
- data->hours = unixx % 24;
-
- unixx /= 24;
-
-
-
- data->day = (unix + 3) % 7 + 1;
-
- year = 1970;
- while (1) {
- if (TM_RTC_LEAP_YEAR(year)) {
- if (unixx >= 366) {
- unixx -= 366;
- } else {
- break;
- }
- } else if (unixx >= 365) {
- unixx -= 365;
- } else {
- break;
- }
- year++;
- }
-
- data->year = (uint8_t) (year - 2000);
-
- for (data->month = 0; data->month < 12; data->month++) {
-
- if (TM_RTC_LEAP_YEAR(year) && unixx >= (uint32_t)TM_RTC_Months[1][data->month]) {
- unixx -= TM_RTC_Months[1][data->month];
- } else if (!TM_RTC_LEAP_YEAR(year) && unixx >= (uint32_t)TM_RTC_Months[0][data->month]) {
- unixx -= TM_RTC_Months[0][data->month];
- } else {
- break;
- }
- }
-
-
- data->month++;
-
-
- data->date = unixx + 1;
- }
- void ups_mode_response(char *data)
- {
- char value[50];
- uint8_t len = 0;
- DBG printf("ups_serialresponse: %s\r\n", data);
- if (data[0] != '(') {
- return;
- }
- DBG printf("ups_serial_parser_start\r\n");
- UPS.Present = UPS_CONNECTED;
- UPS.Flag_Present = true;
- UPS.cnt_err_ups = 0;
- data++;
- DBG printf("UPS ups_mode_parser_start: %s\r\n", data);
- if (UPS.Mode != data[0]) {
- UPS.Mode = data[0];
- #if 1
- memset(value, 0, sizeof(value));
- GetModeStr(value, &len);
- if(UPS.Mode == 'F') {
- memset(ups_pdu.data, 0, UPS_PDU_MAX_LEN);
- send_MegaTec_cmd(ups_fault_status);
- if (ups_megatec_rx_pdu()) {
- if (ups_pdu.data[0] != '(' || strncmp(ups_pdu.data, "(OK", 3) == 0) {
- return;
- }
- UPS.fault_type = (ups_pdu.data[1] - 0x30) << 4 | (ups_pdu.data[2] - 0x30);
- strncat(value, &ups_pdu.data[1], 6);
- strncat(value, &ups_pdu.data[14], 4);
- strncat(value, &ups_pdu.data[25], 8);
- strncat(value, &ups_pdu.data[35], 4);
- strncat(value, &ups_pdu.data[41], 4);
- strncat(value, &ups_pdu.data[47], 4);
- strncat(value, &ups_pdu.data[53], 4);
- strncat(value, &ups_pdu.data[59], 8);
- }
- }
- SNMP_SendUserTrap(UPS_MODE);
- syslog(SYSLOG_INFORMATIONAL, "Режим ИБП: %s", value);
- log_event_data(LOG_UPS_MODE, value);
- #endif
- }
-
- }
|