{"id":372370,"date":"2024-05-21T05:10:26","date_gmt":"2024-05-21T05:10:26","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=372370"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=372370","title":{"rendered":"<span>KatWalk C2: \u0447.4: \u043f\u043e\u0438\u0433\u0440\u0430\u0435\u043c\u0441\u044f \u0441 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u043e\u0439<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0414\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b\u0441\u044f &#8212; \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u044e \u043f\u0440\u043e <a href=\"https:\/\/habr.com\/ru\/articles\/798029\/\" rel=\"noopener noreferrer nofollow\">\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 \u0434\u043b\u044f VR \u0438\u0433\u0440<\/a>, \u043a\u0430\u043a \u0441 <a href=\"https:\/\/habr.com\/ru\/articles\/799197\/\" rel=\"noopener noreferrer nofollow\">\u043d\u0435\u0439 \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f<\/a> \u0438  \u043a\u0430\u043a \u0434\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f <a href=\"https:\/\/habr.com\/ru\/articles\/802125\/\" rel=\"noopener noreferrer nofollow\">\u0434\u043e \u0435\u0435 \u0441\u0435\u043d\u0441\u043e\u0440\u043e\u0432 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e<\/a>.<\/p>\n<p>\u042f \u0443\u0436\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u043b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0433\u043b\u044e\u043a\u0438 \u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u0441\u0435\u043d\u0441\u043e\u0440\u0430\u043c\u0438 &#8212; \u0437\u043d\u0430\u0447\u0438\u0442, \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0438\u0445 \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c. \u041d\u043e \u0447\u0442\u043e\u0431\u044b \u0438\u0445 \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c, \u043d\u0430\u0434\u043e \u043f\u043e\u043d\u044f\u0442\u044c \u0447\u0442\u043e \u043e\u043d\u0438 \u0437\u0430 \u0437\u0432\u0435\u0440\u044c, \u0438 \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u0438\u0445 \u043a\u0430\u043a-\u0442\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c. \u0418\u0437-\u0437\u0430 \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0441\u0442\u0430\u0442\u044c\u0438, \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u0438 \u0431\u0435\u0437 \u0442\u043e\u0433\u043e \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 \u0440\u0435\u0444\u0435\u0440\u0430\u0442\u0438\u043a \u043d\u0430 \u0435\u0449\u0435 \u0431\u043e\u043b\u0435\u0435 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0435 \u043a\u0443\u0441\u043e\u0447\u043a\u0438 &#8212; \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u0433\u043b\u044f\u043d\u0435\u043c \u0432\u043d\u0443\u0442\u0440\u044c \u0441\u0435\u043d\u0441\u043e\u0440\u0430 \u0438 \u043d\u0430\u0443\u0447\u0438\u043c\u0441\u044f \u043c\u0435\u043d\u044f\u0442\u044c \u0435\u043c\u0443 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u0432 \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u0438 \u0443\u0434\u043e\u0431\u043d\u043e\u043c \u0432\u0438\u0434\u0435.<\/p>\n<h2>\u0412\u0441\u043a\u0440\u044b\u0442\u0438\u0435 \u043f\u043e\u043a\u0430\u0436\u0435\u0442<\/h2>\n<p>\u0418\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u0447\u0435\u0433\u043e \u043b\u0438\u0431\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0445\u0430\u043e\u0442\u0438\u0447\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441 \u0437\u0430\u0445\u043e\u0434\u0430\u043c\u0438 \u0441 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0442\u043e\u0440\u043e\u043d, \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 &#171;\u043c\u0435\u0442\u043e\u0434 \u043d\u0430\u0443\u0447\u043d\u043e\u0433\u043e \u0442\u044b\u043a\u0430&#187;. \u041d\u0438\u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043d\u0435 \u0441\u043a\u0430\u0436\u0435\u0448\u044c, \u0433\u0434\u0435 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u0442\u044c, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0448\u044c \u043d\u0430 \u0438\u0442\u043e\u0433 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043d\u0430 \u0440\u0435\u0442\u0440\u043e\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u043e\u043f\u0443\u0441 \u043a\u0430\u043a \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043a \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044e, \u0441\u043a\u043e\u0440\u0435\u0435 \u043a\u0430\u043a \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043e\u0431\u0437\u043e\u0440 \u043d\u0430 \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0434\u0430 \u0433\u0434\u0435 \u0438\u0441\u043a\u0430\u0442\u044c \u043a\u0440\u0443\u043f\u0438\u0446\u044b \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0441\u0442\u0435\u0439. \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0432\u0441\u0451 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u0443\u0442\u0435\u0439 \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0442 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0443 \u0438 \u0432 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432 \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442 \u043a \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044e.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/d54\/83f\/383\/d5483f38348f23264d3d09756f692da8.jpg\" alt=\"\u0412\u0441\u043a\u0440\u043e\u0435\u043c...\" title=\"\u0412\u0441\u043a\u0440\u043e\u0435\u043c...\" width=\"1020\" height=\"768\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d54\/83f\/383\/d5483f38348f23264d3d09756f692da8.jpg\" data-blurred=\"true\"\/><\/p>\n<div><figcaption>\u0412\u0441\u043a\u0440\u043e\u0435\u043c&#8230;<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u043e \u0447\u0442\u043e \u0442\u043e\u0447\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 (\u043a\u043e\u0433\u0434\u0430 \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c) &#8212; \u044d\u0442\u043e \u0437\u0430\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u043d\u0438\u0435 \u0432\u043d\u0443\u0442\u0440\u044c. \u0415\u0441\u043b\u0438 \u043c\u044b \u0437\u0430\u0433\u043b\u044f\u043d\u0435\u043c \u0432\u043d\u0443\u0442\u0440\u044c \u0441\u0435\u043d\u0441\u043e\u0440\u0430 \u0434\u043b\u044f \u043d\u043e\u0433, \u043c\u044b \u0441\u0445\u043e\u0434\u0443 \u0437\u0430\u043c\u0435\u0442\u0438\u043c \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043c\u043e\u0434\u0443\u043b\u044c, \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 <a href=\"https:\/\/ttcble.com\/ProductList\/info.aspx?itemid=355\" rel=\"noopener noreferrer nofollow\">HY-40R201C<\/a>. \u042d\u0442\u043e BLE5.0 \u043c\u043e\u0434\u0443\u043b\u044c, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 <a href=\"https:\/\/www.ti.com\/product\/CC2640R2F\" rel=\"noopener noreferrer nofollow\">TI CC2640R2<\/a>. \u0422\u043e \u0435\u0441\u0442\u044c \u044d\u0442\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 (\u0442\u043e\u0447\u043d\u0435\u0435, \u0434\u0432\u0430) \u043f\u043b\u044e\u0441 \u0440\u0430\u0434\u0438\u043e\u043c\u043e\u0434\u0443\u043b\u044c. \u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u043a\u0430\u043a \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044f \u0441\u0432\u043e\u044e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u0432 \u043d\u0435\u0433\u043e, \u0442\u0430\u043a \u0438 \u0432 \u0442\u0430\u043d\u0434\u0435\u043c\u0435 \u0441 \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u043c.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/b8c\/39d\/330\/b8c39d3302f1a7d45332ba444498b7bb.jpg\" alt=\"\u043f\u0435\u0440\u0435\u0432\u0435\u0440\u043d\u0451\u043c \u043d\u0430 \u0436\u0438\u0432\u043e\u0442\u0438\u043a...\" title=\"\u043f\u0435\u0440\u0435\u0432\u0435\u0440\u043d\u0451\u043c \u043d\u0430 \u0436\u0438\u0432\u043e\u0442\u0438\u043a...\" width=\"2710\" height=\"1570\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b8c\/39d\/330\/b8c39d3302f1a7d45332ba444498b7bb.jpg\" data-blurred=\"true\"\/><\/p>\n<div><figcaption>\u043f\u0435\u0440\u0435\u0432\u0435\u0440\u043d\u0451\u043c \u043d\u0430 \u0436\u0438\u0432\u043e\u0442\u0438\u043a&#8230;<\/figcaption><\/div>\n<\/figure>\n<p>\u0414\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432 \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 \u043d\u0435 \u0432\u0438\u0434\u043d\u043e, \u043d\u0430 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043d\u0438\u0447\u0435\u0433\u043e, \u043a\u0440\u043e\u043c\u0435 \u043c\u043e\u0434\u0443\u043b\u044f \u043e\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043c\u044b\u0448\u0438 <a href=\"https:\/\/datasheet.octopart.com\/ADNS-9800-Avago-datasheet-10666463.pdf\" rel=\"noopener noreferrer nofollow\">A9800<\/a> \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e.<\/p>\n<p>\u0412\u044b\u0432\u043e\u0434: \u043c\u043e\u0434\u0443\u043b\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043a\u0430\u043a \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440. \u041d\u0430 \u043f\u043b\u0430\u0442\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0434\u0432\u0430 \u043f\u043e\u0440\u0442\u0430 \u0434\u043b\u044f \u0431\u0430\u0442\u0430\u0440\u0435\u0439, \u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0430. \u0415\u0441\u0442\u044c \u043a\u043d\u043e\u043f\u043a\u0438 Reset \u0438 Boot. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u0435\u043c \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0434\u0430\u0442\u0430\u0448\u0438\u0442, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c \u0433\u0434\u0435 \u043a\u0430\u043a\u0438\u0435 \u043f\u043e\u0440\u0442\u044b \u0438 \u0430\u0434\u0440\u0435\u0441\u0430 \u0436\u0435\u043b\u0435\u0437\u0430 \u043b\u0435\u0436\u0430\u0442, \u0434\u0430 \u0437\u043d\u0430\u0435\u043c \u0447\u0442\u043e \u044d\u0442\u043e ARM Cortex M3 \u0441 \u041f\u0417\u0423 \u043d\u0430 128\u043a\u0431, \u0440\u0430\u043c \u043d\u0430 8\u043a\u0431. \u041d\u0435 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e, \u043d\u043e \u044f\u0432\u043d\u043e \u0445\u0432\u0430\u0442\u0430\u0435\u0442.<\/p>\n<p>\u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 Nordic \u043c\u043e\u0434\u0443\u043b\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u044f \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 USB \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442. \u0417\u0430\u0442\u043e \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 \u0432\u0438\u0434\u0435\u043d <a href=\"https:\/\/www.wch-ic.com\/products\/CH9326.html\" rel=\"noopener noreferrer nofollow\">CH9326<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u043f\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e \u0441 \u043b\u0435\u0436\u0430\u0449\u0435\u0439 \u0432 \u043f\u0430\u043f\u043a\u0435 \u0433\u0435\u0439\u0442\u0432\u0435\u044f DLL\u043a\u0435.<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u044b \u043b\u0438\u0431\u043e \u0443\u0437\u043d\u0430\u043b\u0438, \u043b\u0438\u0431\u043e \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u043b\u0438, \u0447\u0442\u043e \u0441\u0435\u043d\u0441\u043e\u0440\u044b \u043e\u0431\u0449\u0430\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 USB-HID \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440-\u0447\u0438\u043f, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043d\u0430 ARM, \u0438 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u044b \u043d\u0430 Texas Instruments <a href=\"https:\/\/www.ti.com\/tool\/SIMPLELINK-CC2640R2-SDK\" rel=\"noopener noreferrer nofollow\">SIMPLELINK-CC2640R2-SDK<\/a>. \u041a SDK \u0435\u0449\u0435 \u0438\u0434\u0451\u0442 <a href=\"https:\/\/dev.ti.com\/tirex\/global?id=com.ti.SIMPLELINK_ACADEMY_CC2640R2SDK\" rel=\"noopener noreferrer nofollow\">&#171;Academy&#187;<\/a>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432 \u0441\u0436\u0430\u0442\u043e\u0439 \u0444\u043e\u0440\u043c\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0442\u0438\u0442\u0430\u0442\u044c \u043f\u0440\u043e BLE, \u043a\u0430\u043a \u0435\u0433\u043e \u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0438 \u0421\u0414\u041a, \u0434\u0430 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432. \u0412 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u0434\u0435\u0432\u043a\u0438\u0442\u0430 \u043d\u0435\u0442, \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0441\u0435\u043d\u0441\u043e\u0440\u0435 \u043f\u043e\u0438\u0433\u0440\u0430\u0442\u044c\u0441\u044f \u0441\u0445\u043e\u0434\u0443 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f, \u0432 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u043c \u043f\u043e\u0438\u0441\u043a\u043e\u043c \u0432\u043d\u0443\u0442\u0440\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e SDK.<\/p>\n<h2>\u0427\u0442\u043e \u0432 ROM\u0443\u0448\u043a\u0435 \u0442\u0435\u0431\u0435 \u043c\u043e\u0451\u043c<\/h2>\n<p>\u0412\u043d\u0435\u0448\u043d\u0438\u0439 \u043e\u0441\u043c\u043e\u0442\u0440 \u044d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u043e, \u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u0432\u043d\u0443\u0442\u0440\u0438, \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0441\u043c\u043e\u0442\u0440\u043e\u043c \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f. \u041d\u0430 \u043f\u043b\u0430\u0442\u0435 \u0435\u0441\u0442\u044c \u043f\u044f\u0442\u0430\u0447\u043a\u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 &#171;V R C M G&#187;, \u0433\u0434\u0435 G \u044f\u0432\u043d\u043e Ground, \u0432\u0441\u0451 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 &#8212; \u0432\u043e\u043f\u0440\u043e\u0441. \u041c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0437\u0432\u043e\u043d\u0438\u0442\u044c, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u043e&#8230; JTAG \u0443 \u043c\u0435\u043d\u044f \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043d\u0435\u0442.<\/p>\n<p>\u0422\u0443\u0442, \u043a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u043c\u043e\u0436\u043d\u043e \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u0447\u0442\u043e \u0433\u0435\u0439\u0442\u0432\u0435\u0439 \u0443\u043c\u0435\u0435\u0442 \u043f\u0440\u043e\u0448\u0438\u0432\u0430\u0442\u044c \u0441\u0435\u043d\u0441\u043e\u0440\u044b. \u042f \u043a\u043e\u0433\u0434\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437 \u0438\u0445 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u043b, \u043e\u043d \u043c\u043d\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043b, \u0447\u0442\u043e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u0441\u0442\u0430\u0440\u0430\u044f, \u0438 \u043d\u0430\u0434\u043e \u0437\u0430\u043b\u0438\u0442\u044c \u043d\u043e\u0432\u0443\u044e. \u0418 \u0437\u0430\u043b\u0438\u043b. \u0412\u044b\u0432\u043e\u0434 &#8212; \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u0433\u0435\u0439\u0442\u0432\u0435\u044e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430. \u041e\u0431\u0437\u043e\u0440 \u0433\u043b\u0430\u0437\u0430\u043c\u0438 \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u043f\u0430\u043f\u043a\u0435 \u0433\u0435\u0439\u0442\u0432\u0435\u044f:<\/p>\n<pre><code>C:\\>dir \/b \/d \"C:\\Program Files (x86)\\KAT Gateway\\*bin\" loco_ankle_by_embeded.bin loco_receiver_by_embeded.bin loco_sensor_group_application_foot_release_by_embeded_engineer.bin loco_sensor_group_application_waist_release_by_embeded_engineer.bin loco_s_ankle_by_embeded.bin loco_s_foot_by_embeded.bin loco_s_receiver_by_embeded.bin loco_s_waist_by_embeded.bin loco_waist_by_embeded.bin walk_c_foot_by_embeded.bin walk_c_hall_by_embeded.bin walk_c_receiver_by_embeded.bin walk_c_v2_foot_by_embeded.bin walk_c_v2_hall_by_embeded.bin walk_c_v2_receiver_by_embeded.bin<\/code><\/pre>\n<p>\u041f\u0440\u0438\u043a\u043e\u043b\u044c\u043d\u043e, \u0430 \u0433\u0434\u0435 C2?!<\/p>\n<pre><code>C:\\>dir \/b \/d \"C:\\Program Files (x86)\\KAT Gateway\\*hex\" katvr_direction.hex katvr_foot.hex katvr_receiver.hex<\/code><\/pre>\n<p>\u0425\u043c. \u0413\u0440\u0443\u0437\u0438\u043c dotPeek \u043e\u043f\u044f\u0442\u044c, Ctrl+Alt+T, &#171;.hex&#187;&#8230; \u0425\u0430!<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/06e\/08f\/665\/06e08f66577123d96dcd3d632d71215d.png\" alt=\"\u043f\u043e\u0438\u0441\u043a \u043f\u043e \u0442\u043e\u0447\u043a\u0430\u0433\u0435\u043a\u0441\u0443\" title=\"\u043f\u043e\u0438\u0441\u043a \u043f\u043e \u0442\u043e\u0447\u043a\u0430\u0433\u0435\u043a\u0441\u0443\" width=\"1032\" height=\"318\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/06e\/08f\/665\/06e08f66577123d96dcd3d632d71215d.png\"\/><\/p>\n<div><figcaption>\u043f\u043e\u0438\u0441\u043a \u043f\u043e \u0442\u043e\u0447\u043a\u0430\u0433\u0435\u043a\u0441\u0443<\/figcaption><\/div>\n<\/figure>\n<pre><code class=\"cs\">    byte index = 0;      int num1 = (int) KatvrFirmwareHelper.ch9326_find();     assert(num1 != 0)      int num2 = (int) KatvrFirmwareHelper.ch9326_open(Update_Firmware_Upgrading_Form.vid, Update_Firmware_Upgrading_Form.pid);     assert(num2 != 0)      int num21 = KatvrFirmwareHelper.ch9326_set_gpio(index, (byte) 15, (byte) 15)     assert(num21 != 0)      int num3 = (int) KatvrFirmwareHelper.ch9326_connected(index);     assert(num3 != 0)      int num4 = (int) KatvrFirmwareHelper.flash(_hex_path, device_type, device_state);     assert(num4 == 1)      KatvrFirmwareHelper.ch9326_ClearThreadData();     KatvrFirmwareHelper.close_ch9326();      \/* Write MACs of sensors into receiver if we updated receiver *\/     if (Update_Firmware_Upgrading_Form.deviceType == C2FirmwareUpdaeManager.C2DeviceType.Receiver) {         KATSDKInterfaceHelper.WriteSensorPair(...)     }<\/code><\/pre>\n<p>\u041f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e, \u0442\u043e \u0435\u0441\u0442\u044c \u0434\u043b\u044f \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0430\u0440\u0430 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0438\u0437 <code>KatvrFirmwareHelper<\/code> \u0438 \u0433\u0435\u043a\u0441 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438. \u041d\u043e \u0432 \u0434\u0438\u0437\u0430\u0441\u043c \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043d\u0430\u0434\u043e \u0433\u0440\u0443\u0437\u0438\u0442\u044c BIN, \u0430 \u043d\u0435 HEX. \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u044d\u0442\u043e \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432. \u042f \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b WSL:<\/p>\n<pre><code class=\"bash\">$ cd \/mnt\/c\/Program\\ Files\\ \\(x86\\)\/KAT\\ Gateway\/ $ for k in foot direction receiver; do objcopy --input-target=ihex --output-target=binary katvr_$k.hex katvr_$k.bin; done $ ls -la kat*bin -rwxrwxrwx 1 datacompboy datacompboy 131072 Mar 29 21:46 katvr_direction.bin -rwxrwxrwx 1 datacompboy datacompboy 131072 Mar 29 21:46 katvr_foot.bin -rwxrwxrwx 1 datacompboy datacompboy 131072 Mar 29 21:46 katvr_receiver.bin<\/code><\/pre>\n<p>\u041e\u0431\u0440\u0430\u0449\u0430\u0435\u043c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0432\u0441\u0435 \u0444\u0430\u0439\u043b\u044b \u0440\u043e\u0432\u043d\u043e 128\u043a\u0411, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c hex \u0440\u0430\u0437\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432, \u0437\u043d\u0430\u0447\u0438\u0442, \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0441\u0435\u043a\u0446\u0438\u0439, \u0438, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0447\u0430\u0441\u0442\u0438 \u0432 \u043d\u0435\u0439 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a, \u0438\u043b\u0438 \u0435\u0449\u0435 \u0447\u0442\u043e. \u041f\u0440\u043e\u0441\u0442\u043e \u0443\u0447\u0442\u0451\u043c \u043d\u0430 \u0431\u0443\u0434\u0443\u0449\u0435\u0435.<\/p>\n<p>\u041a\u0441\u0442\u0430\u0442\u0438, \u0435\u0441\u043b\u0438 \u043c\u044b \u0435\u0449\u0435 \u043d\u0435 \u0432\u0441\u043a\u0440\u044b\u0432\u0430\u043b\u0438 \u0441\u0435\u043d\u0441\u043e\u0440, \u0438 \u043d\u0435 \u0437\u043d\u0430\u0435\u043c \u0447\u0442\u043e \u0437\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0442\u044b\u043a\u0430\u0442\u044c \u0432 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u0447\u0435\u043a \u0447\u0435\u0440\u0435\u0437 binwalk:<\/p>\n<pre><code class=\"bash\">$ binwalk --disasm .\/katvr_direction.bin   DECIMAL       HEXADECIMAL     DESCRIPTION -------------------------------------------------------------------------------- 0             0x0             ARM executable code, 16-bit (Thumb), little endian, at least 1624 valid instructions<\/code><\/pre>\n<p>\u0438\u043b\u0438 <a href=\"https:\/\/github.com\/airbus-seclab\/cpu_rec\" rel=\"noopener noreferrer nofollow\">cpu_rec<\/a>:<\/p>\n<pre><code class=\"bash\">$ python cpu_rec.py .\/katvr_direction.bin  .\/katvr_direction.bin       full(0x20000)  None        chunk(0x10000;32)   ARMhf<\/code><\/pre>\n<p>\u0413\u0434\u0435 \u043c\u044b \u0443\u0431\u0435\u0436\u0434\u0430\u0435\u043c\u0441\u044f, \u0447\u0442\u043e \u0434\u0430, \u044d\u0442\u043e ARM \u0438 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0432 Thumb \u0440\u0435\u0436\u0438\u043c\u0435.<\/p>\n<p>\u041f\u043e\u0442\u044b\u043a\u0430\u0432 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0447\u0435\u0440\u0435\u0437 strings:<\/p>\n<pre><code class=\"bash\">$ strings -n 10 katvr_direction.bin inputNormal FinputGyroRv executable N]_]>CNUW]>@FUm `(i0a(}0uh}pu [USQOMKIFCA?&lt;:8 p>\"`hBp!`h k +# p(F#p !i\"hQ\\)pch!i pGpGpGpGpG {unknown-instance-name} {empty-instance-name} F{static-instance-name}<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0417\u0430\u043c\u0435\u0442\u043a\u0438 \u043d\u0430 \u043f\u043e\u043b\u044f\u0445<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041f\u043e\u0438\u0441\u043a \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0431\u044b\u0432\u0430\u0435\u0442 \u043b\u0438\u0448\u043d\u0438\u043c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043e\u0442 \u044d\u0442\u043e\u0442 \u0432\u044b\u0432\u043e\u0434 strings, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0435\u0441\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 &#8212; &#171;inputGyroRv&#187; \u0438 &#171;inputNormal&#187;. <a href=\"https:\/\/www.google.com\/search?q=inputGyroRv+inputNormal+site%3Agithub.com\" rel=\"noopener noreferrer nofollow\">\u041f\u043e\u0438\u0441\u043a \u043f\u043e \u043d\u0438\u043c \u043d\u0430 github<\/a> \u0434\u0430\u043b \u0441\u0445\u043e\u0434\u0443 <a href=\"https:\/\/github.com\/hcrest\/bno080-driver\/blob\/master\/sh2.c\" rel=\"noopener noreferrer nofollow\">\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0443\u044e \u0432\u0435\u0449\u044c<\/a>, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e \u0440\u0430\u0437\u043c\u0435\u0442\u0438\u0442\u044c \u0447\u0430\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u0435\u043d\u0441\u043e\u0440 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f. \u0414\u043b\u044f \u043d\u043e\u0433 \u043e\u0434\u043d\u0430\u043a\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0439 \u0444\u043a\u0443\u0441\u043d\u043e\u0441\u0442\u0438 \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u043e\u0441\u044c.<\/p>\n<\/div>\n<\/details>\n<h2>\u0417\u0430\u043b\u0438\u0432\u043a\u0430 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u043d\u0430 \u0445\u043e\u0434\u0443<\/h2>\n<p>\u0420\u0430\u0437\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u043d\u0438\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043d\u0430 <a href=\"https:\/\/www.ti.com\/lit\/an\/swra466d\/swra466d.pdf\" rel=\"noopener noreferrer nofollow\">Serial Boot Loader<\/a> \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0431\u0443\u0442\u043b\u043e\u0430\u0434\u0435\u0440 \u043f\u0440\u043e\u0441\u0442\u043e \u0433\u043e\u0442\u043e\u0432 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u0435\u0441\u043b\u0438 \u0432 \u043d\u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c\u0441\u044f, 0x55 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0443\u0435\u0442 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c, \u0432 \u043e\u0431\u0449\u0435\u043c, \u0432\u0441\u0451 \u043a\u0430\u043a \u0432\u0441\u0435\u0433\u0434\u0430. \u041c\u044b, \u0432\u043f\u0440\u043e\u0447\u0435\u043c, \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0440\u043e\u0434\u043d\u044b\u043c \u043f\u0440\u043e\u0448\u0438\u0432\u0430\u043b\u044c\u0449\u0438\u043a\u043e\u043c, \u0442\u0430\u043a \u043a\u0430\u043a \u0443 \u043d\u0430\u0441 \u043d\u0435\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 &#8212; \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c HID2Serial, \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0438\u0434\u0442\u0438 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e. \u041d\u043e, \u043a\u0430\u043a \u043c\u044b \u0443\u0436\u0435 \u0432\u044b\u0448\u0435 \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u0438, \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043d\u0430\u0440\u0443\u0436\u0443, \u0442\u0430\u043a \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0438\u0445.<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 C# \u043f\u0440\u043e\u0435\u043a\u0442, \u043a\u0443\u0434\u0430 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c KatvrFirmwareHelper \u0438 katvr_firmware.dll \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043e\u043d \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f:<\/p>\n<pre><code class=\"cs\">    static void Main(string[] args)     {         uint vid = 0xC4F4u;         byte device_state = 0;         byte index = 0;         uint pid = 28471u;         byte device_type = 3;         string hex_path = \"C:\\\\Program Files (x86)\\\\KAT Gateway\\\\katvr_foot.hex\";          if (KatvrFirmwareHelper.ch9326_find() == 0)         {             Console.WriteLine(\"ch9326_find failed\");             return;         }          if (KatvrFirmwareHelper.ch9326_open(vid, pid) == 0)         {             Console.WriteLine(\"ch9326_open failed\");             return;         }          if (KatvrFirmwareHelper.ch9326_set_gpio(index, (byte)15, (byte)15) == 0)         {             Console.WriteLine(\"ch9326_set_gpio failed\");             return;         }          if (KatvrFirmwareHelper.ch9326_connected(index) == 0)         {             Console.WriteLine(\"ch9326_connected failed\");             return;         }          if (KatvrFirmwareHelper.flash(hex_path, device_type, device_state) != 1)         {             Console.WriteLine(\"KatvrFirmwareHelper.flash failed\");             Console.ReadKey();             return;         }          KatvrFirmwareHelper.ch9326_ClearThreadData();         KatvrFirmwareHelper.close_ch9326();     }<\/code><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043c &#8212; \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0435 \u0440\u0430\u0441\u043f\u0435\u0447\u0430\u0442\u043a\u0438, \u043e\u0448\u0438\u0431\u043a\u0430. \u042d\u043c&#8230; \u0410, \u043d\u0443 \u0434\u0430, \u0437\u0430\u0436\u0438\u043c\u0430\u0435\u043c Flash \u043a\u043d\u043e\u043f\u043a\u0443, \u0442\u044b\u043a\u0430\u0435\u043c Reset, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043e\u043f\u044f\u0442\u044c &#8212; \u043f\u043e\u0431\u0435\u0436\u0430\u043b\u0438 \u0442\u043e\u0447\u043a\u0438 \u043f\u043e \u044d\u043a\u0440\u0430\u043d\u0443. \u0427\u0435\u0440\u0435\u0437 \u043c\u0438\u043d\u0443\u0442\u044b \u043f\u043e\u043b\u0442\u043e\u0440\u044b &#8212; \u0433\u043e\u0442\u043e\u0432\u043e. \u0421\u0435\u043d\u0441\u043e\u0440 \u0432\u0441\u0451 \u0435\u0449\u0435 \u0436\u0438\u0432. \u041f\u0440\u0430\u0432\u0434\u0430, \u043c\u0438\u0433\u0430\u0435\u0442 \u043b\u0435\u0432\u043e\u0439 \u043b\u0430\u043c\u043f\u043e\u0447\u043a\u043e\u0439 \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u0440\u0430\u0432\u043e\u0439, \u043a\u0430\u043a \u043c\u0438\u0433\u0430\u043b \u0434\u043e \u044d\u0442\u043e\u0433\u043e. \u0423\u043f\u0441. \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u0442\u0435\u0440\u043b\u0438\u0441\u044c.<\/p>\n<h2>\u041f\u0430\u0442\u0447\u0438\u043c \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443<\/h2>\n<p>\u041d\u043e \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u043a\u043e\u043c\u0444\u043e\u0440\u0442\u043d\u043e\u0433\u043e \u043f\u0430\u0442\u0447\u0438\u043d\u0433\u0430. \u0423 \u0433\u0438\u0434\u0440\u044b \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0444\u0430\u0439\u043b \u043a\u0430\u043a Hex \u0438\u043b\u0438 Raw, \u043d\u043e \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432\u0441\u0451, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0440\u0430\u043c \u0438 \u043e\u0431\u043b\u0430\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435 \u0431\u044b\u043b\u043e \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c hex&#8217;\u0435. \u0412\u044b\u0432\u043e\u0434 &#8212; \u043d\u0430\u0434\u043e \u043f\u0430\u0442\u0447\u0438\u0442\u044c \u043f\u0440\u044f\u043c\u043e HEX \u0444\u0430\u0439\u043b, \u0430 \u043a\u0430\u043a?<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 &#8212; \u043d\u0430 \u0447\u0435\u043c-\u0442\u043e \u043d\u0430\u0434\u043e \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u041f\u0440\u043e\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u043f\u0430\u0442\u0447 &#8212; \u043f\u043e\u043c\u0435\u043d\u044f\u0435\u043c &#171;KATVR&#187; \u0441\u0442\u0440\u043e\u043a\u0443 \u043d\u0430 &#171;KAT-F&#187;, \u0442\u043e \u0435\u0441\u0442\u044c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u0435\u0431\u044f \u0430\u043d\u043e\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a &#171;KAT-F&#187; (\u0442\u0438\u043f\u0430 Foot\/\u043d\u043e\u0433\u0430). \u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043b\u044e\u0431\u044b\u043c hex \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/www.x-ways.net\/winhex\/\" rel=\"noopener noreferrer nofollow\">WinHex<\/a>, \u0438 \u043f\u0440\u0430\u0432\u0438\u043c. \u0417\u0430\u0442\u0435\u043c \u0431\u0435\u0440\u0451\u043c \u0434\u0438\u0444\u0444:<\/p>\n<pre><code class=\"powershell\">> fc.exe \/b .\\katvr_foot_orig.bin .\\katvr_foot.bin Comparing files .\\katvr_foot_orig.bin and .\\KATVR_FOOT.BIN 000129E9: 56 2D 000129EA: 52 46<\/code><\/pre>\n<p>\u041e\u0442\u043b\u0438\u0447\u043d\u043e, \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043f\u0430\u0442\u0447, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043b\u0435\u0433\u043a\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043a\u0430\u043a \u0435\u0441\u0442\u044c \u0438\u043b\u0438 \u0441\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 C#:<\/p>\n<pre><code class=\"cs\">    static readonly PatchEntry[] PatchFoot = {         ( 0x000129e9, 0x56, 0x2D ), \/\/ V => -         ( 0x000129ea, 0x52, 0x46 ), \/\/ R => F     };<\/code><\/pre>\n<p>\u0418\u0437 \u0432\u043a\u0443\u0441\u043d\u044b\u0445 \u0442\u0440\u044e\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u0434\u043b\u044f C# (\u044f \u043e\u0447\u0435\u043d\u044c \u0440\u0435\u0434\u043a\u043e \u0435\u0433\u043e \u0442\u0440\u043e\u0433\u0430\u044e) &#8212; \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0442\u0443\u043f\u043b\u0430 \u043a \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u043c\u043d\u043e\u0433\u0430\u0431\u0443\u043a\u0430\u0432 \u0432 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u0445. \u041f\u0440\u043e\u0441\u0442\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u043d \u043d\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442, \u043d\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0438 implicit operator \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0437\u043e\u0432\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435:<\/p>\n<pre><code class=\"cs\">    struct PatchEntry {         readonly public int addr;         readonly public byte orig;         readonly public byte patch;         public PatchEntry(int addr, byte orig, byte patch) {             this.addr = addr;             this.orig = orig;             this.patch = patch;          }         public static implicit operator PatchEntry((int addr, uint orig, uint patch) tuple) {             return new PatchEntry(tuple.addr, (byte)tuple.orig, (byte)tuple.patch);          }     };<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043f\u0430\u0442\u0447 \u0432 \u0443\u0434\u043e\u0431\u043d\u043e\u043c \u043c\u0430\u0448\u0438\u043d\u043e-\u0447\u0438\u0442\u0430\u0435\u043c\u043e\u043c \u0432\u0438\u0434\u0435, \u0435\u0433\u043e \u043d\u0430\u0434\u043e \u043d\u0430\u043b\u043e\u0436\u0438\u0442\u044c \u043d\u0430 HEX.<\/p>\n<p>\u0412\u043e\u0437\u044c\u043c\u0451\u043c <a href=\"https:\/\/github.com\/DerekGn\/HexIO\" rel=\"noopener noreferrer nofollow\">HexIO<\/a> \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0438 \u043d\u0430\u043a\u0438\u0434\u0430\u0435\u043c \u0444\u0438\u043a\u0441\u0438\u043b\u043a\u0443. \u0417\u043d\u0430\u0442\u044c \u043d\u0430\u0434\u043e \u043d\u0435 \u043c\u043d\u043e\u0433\u043e: \u0441\u043b\u0435\u0434\u0438\u043c \u0437\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u043c \u0430\u0434\u0440\u0435\u0441\u043e\u043c, \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f \u0430\u0434\u0440\u0435\u0441 \u043f\u0430\u0442\u0447\u0430 &#8212; \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, HexIO \u043d\u0435 \u0441\u043b\u0435\u0434\u0438\u0442 \u0437\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c\u0438 \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435, \u0438 \u043d\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0443\u044e \u0441\u0443\u043c\u043c\u0443 &#8212; \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0432\u044b\u043a\u0440\u0443\u0442\u0438\u0442\u044c\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0437\u0430\u043f\u0438\u0441\u0438. \u041d\u0435 \u043e\u0447\u0435\u043d\u044c \u043a\u0440\u0430\u0441\u0438\u0432\u043e, \u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442:<\/p>\n<pre><code class=\"cs\">    static string PatchHex(string input, PatchEntry[] patch)     {         string output = System.IO.Path.GetTempFileName() + \".hex\";          IIntelHexStreamReader hexInput = new IntelHexStreamReader(input);         using (StreamWriter hexOutput = new StreamWriter(output))         {             uint offset = 0;             var patch_i = 0;             do             {                 IntelHexRecord rec = hexInput.ReadHexRecord();                 if (rec.RecordType == IntelHexRecordType.Data)                 {                     while (patch_i &lt; patch.Length) {                         var pe = patch[patch_i];                         if (pe.addr >= offset + rec.Offset)                         {                             long idx = pe.addr - offset - rec.Offset;                             if (idx >= rec.RecordLength)                             {                                 break;                             }                             if (rec.Data[(int)idx] != pe.orig)                             {                                 Console.WriteLine(\"File data doesn't match expected.\");                                 throw new InvalidDataException();                             }                             rec.Data[(int)idx] = pe.patch;                             rec = new IntelHexRecord(rec.Offset, rec.RecordType, rec.Data);                             patch_i++;                         }                         else                         {                             Console.WriteLine(\"Can't apply patch to a gap.\");                             throw new InvalidDataException();                         }                     };                 }                 else if (rec.RecordType == IntelHexRecordType.ExtendedLinearAddress &amp;&amp; rec.RecordLength == 2)                 {                     offset = (uint)((rec.Data[0] &lt;&lt; 8 | rec.Data[1]) &lt;&lt; 16);                 }                 else if (rec.RecordType == IntelHexRecordType.EndOfFile)                 {                     if (patch_i &lt; patch.Length)                     {                         Console.WriteLine(\"Not all patch was applied!\");                         throw new InvalidDataException();                     }                 }                 else                 {                     Console.WriteLine(rec.ToString());                     throw new InvalidDataException();                 }                 hexOutput.WriteLine(rec.ToHexRecordString());             } while (!hexInput.State.Eof);         };          return output;     }<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c \u043f\u0430\u0442\u0447 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043f\u0430\u0442\u0447\u0435\u043d\u043d\u044b\u0439 hex \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u0430:<\/p>\n<pre><code class=\"cs\">    static void Main(string[] args)     {         string orig_hex = \"C:\\\\Program Files (x86)\\\\KAT Gateway\\\\katvr_foot.hex\";         string hex_path = PatchHex(orig_hex, PatchFoot);         ...     }<\/code><\/pre>\n<p>\u041f\u0440\u043e\u0448\u0438\u0432\u0430\u0435\u043c, \u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u0432\u0438\u0434\u043d\u043e \u0432 Bluetooth \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0438: \u0445\u0430! \u0435\u0441\u0442\u044c &#171;KAT-F&#187; \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e.<\/p>\n<details class=\"spoiler\">\n<summary>\u0417\u0430\u043c\u0435\u0442\u043a\u0438 \u043d\u0430 \u043f\u043e\u043b\u044f\u0445:<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041a\u043e\u0433\u0434\u0430 \u043f\u043e\u0437\u0434\u043d\u0435\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0432 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443, \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u043e\u0432\u043e\u0437\u0438\u0442\u044c\u0441\u044f \u0441\u043e \u0432\u0441\u0442\u0430\u0432\u043a\u043e\u0439 \u043d\u043e\u0432\u044b\u0445 \u0441\u0442\u0440\u043e\u043a. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 Else \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u0440\u043e Gap \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u043a\u0443\u0441\u043e\u043a, \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u043d\u043e\u0432\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0438 \u0432\u044b\u0432\u043e\u0434\u044f\u0449\u0438\u0439 \u0438\u0445 \u0441\u0440\u0430\u0437\u0443:<\/p>\n<pre><code class=\"cs\">    } else {         int start = pe.addr;         List&lt;byte> data = new List&lt;byte>();         do         {             data.Add(patch[patch_i++].patch);         } while (patch_i &lt; patch.Length &amp;&amp;                     patch[patch_i].addr - 1 == patch[patch_i-1].addr &amp;&amp;                     patch[patch_i].addr - start &lt; 0x20);         if (start - offset >= 0x10000)         {             Console.WriteLine(\"Can't inject a record: cross boundary\");             throw new InvalidDataException();         }         var newrec = new IntelHexRecord((ushort)(start - offset), rec.RecordType, data);         hexOutput.WriteLine(newrec.ToHexRecordString());     }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h2>User-friendly \u043f\u0430\u0442\u0447\u0438\u043d\u0433<\/h2>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u044f \u0445\u043e\u0447\u0443 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0430\u0442\u0447\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043b\u044e\u0434\u0438, \u043d\u0443\u0436\u043d\u043e \u043e\u0444\u043e\u0440\u043c\u0438\u0442\u044c \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u0432 \u0432\u0438\u0434\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0430.<\/p>\n<p>\u0412 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u043a\u0430\u043a \u0443\u0436\u0435 \u0431\u044b\u043b\u043e \u0441\u043a\u0430\u0437\u0430\u043d\u043e, C# \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u0432 PowerShell \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e:<\/p>\n<pre><code class=\"powershell\">param (     [string]$firmware = \"\",     [int]$dvid = 0xC4F4,     [int]$dpid = 28471,     [int]$type = 3,     [int]$index = 0 )  Add-Type -Path \"C:\\Program Files (x86)\\KAT Gateway\\KAT_WalkC2_Dx.dll\"  if ($firmware -eq \"\") {   $firmware = $katPath + \"C:\\Program Files (x86)\\KAT Gateway\\katvr_foot.hex\" } Write-Host \"Want to flash $firmware\"  if ([KAT_WalkC2_Dx.KatvrFirmwareHelper]::ch9326_find() -eq 0) {     throw \"ch9326_find failed\" } if ([KAT_WalkC2_Dx.KatvrFirmwareHelper]::ch9326_open($dvid, $dpid) -eq 0) {     throw \"ch9326_open failed\" } if ([KAT_WalkC2_Dx.KatvrFirmwareHelper]::ch9326_set_gpio($index, 15, 15) -eq 0) {     throw \"ch9326_set_gpio failed\" } if ([KAT_WalkC2_Dx.KatvrFirmwareHelper]::ch9326_connected($index) -eq 0) {     throw \"ch9326_connected failed\" } if ([KAT_WalkC2_Dx.KatvrFirmwareHelper]::flash($firmware, $type, 0) -ne 1) {     throw \"KatvrFirmwareHelper.flash failed\" } [KAT_WalkC2_Dx.KatvrFirmwareHelper]::ch9326_ClearThreadData() [KAT_WalkC2_Dx.KatvrFirmwareHelper]::close_ch9326()<\/code><\/pre>\n<p>\u0423\u0436\u0435 \u043d\u0435\u043f\u043b\u043e\u0445\u043e, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u043e\u0448\u0438\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u043f\u0430\u0442\u0447 \u0438\u043b\u0438 \u043e\u0442\u043a\u0430\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443. \u041d\u043e \u0432\u043e\u0442 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0441\u0435\u043d\u0441\u043e\u0440 \u0442\u0435\u0440\u044f\u0435\u0442 \u0435\u0433\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 (\u043b\u0435\u0432\u044b\u0439-\u043f\u0440\u0430\u0432\u044b\u0439), \u0437\u043d\u0430\u0447\u0438\u0442, \u043d\u0430\u0434\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u0436\u0438\u043c\u0430 \u0441\u043f\u0430\u0440\u0438\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>\u041f\u043e\u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u0432 \u043a\u043e\u0434 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0441\u043f\u0430\u0440\u0438\u0432\u0430\u043d\u0438\u044f \u0438\u0437 \u043f\u0440\u043e\u0448\u043b\u044b\u0445 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432, \u043f\u043e \u0441\u0443\u0442\u0438 \u043d\u0430\u0434\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c <a href=\"https:\/\/github.com\/datacompboy\/nrf-katvr-receiver\/blob\/19b3746dac5967739d294d279693e2d4e44be105\/scripts\/restore-sensor-config.ps1\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u0438\u0441\u043a \u0441\u0435\u043d\u0441\u043e\u0440\u0430 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u044b<\/a><\/p>\n<p>\u041f\u0440\u0438\u0447\u0435\u043c \u0438 ReadDeviceId \u0438 WriteDeviceId \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0435:<\/p>\n<pre><code class=\"powershell\">... $id = -1 [IBizLibrary.KATSDKInterfaceHelper]::ReadDeviceId($dev.serialNumber, [ref]$id) $sensor = New-Object IBizLibrary.KATSDKInterfaceHelper+sensorInformation [IBizLibrary.KATSDKInterfaceHelper]::GetSensorInformation([ref]$sensor, $dev.serialNumber) $leftmac = [IBizLibrary.KATSDKInterfaceHelper]::receiverPairingInfoSave.ReceiverPairingByte[7..12] $rightmac = [IBizLibrary.KATSDKInterfaceHelper]::receiverPairingInfoSave.ReceiverPairingByte[13..19] if(-not(Compare-Object $leftmac $sensor.mac)) {     [IBizLibrary.KATSDKInterfaceHelper]::WriteDeviceId($dev.serialNumber, 2)     Write-Host \"Made the sensor to be Left Foot\" } elseif(-not(Compare-Object $rightmac $sensor.mac)) {     [IBizLibrary.KATSDKInterfaceHelper]::WriteDeviceId($dev.serialNumber, 3)     Write-Host \"Made the sensor to be Right Foot\" } else {     throw \"The sensor's mac is not paired to the treadmill\" }<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u0449\u0435 cmd \u0431\u0430\u0442\u043d\u0438\u0447\u043a\u0438:<\/p>\n<pre><code class=\"powershell\">:: restore-foot.cmd powershell.exe -ExecutionPolicy Bypass -File flush-feet-sensor.ps1  :: update-foot.cmd powershell.exe -ExecutionPolicy Bypass -File flush-feet-sensor.ps1 --firmware .\\my-foot.hex<\/code><\/pre>\n<p>\u0422\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u043d\u0430\u0434\u043e \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442.<\/p>\n<h2>\u041f\u0430\u0442\u0447\u0438\u043c \u043f\u0430\u0442\u0447\u0438, \u0447\u0442\u043e\u0431\u044b \u043f\u0430\u0442\u0447\u0438\u0442\u044c \u043f\u0430\u0442\u0447\u0438<\/h2>\n<p>\u0421\u0442\u0440\u043e\u0433\u043e \u0433\u043e\u0432\u043e\u0440\u044f \u043c\u044b \u043d\u0435 \u0432\u043b\u0430\u0434\u0435\u0435\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u043e\u0439, \u0430 \u043f\u043e\u0442\u043e\u043c\u0443 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0442\u044c \u0435\u0451 \u043a\u0430\u043a-\u0442\u043e \u043d\u0435 \u043e\u0447. \u0421 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u0443 \u0432\u0441\u0435\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0443\u0436\u0435 \u0441\u0442\u043e\u0438\u0442 \u0433\u0435\u0439\u0442\u0432\u0435\u0439, \u0442\u043e \u0435\u0441\u0442\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0443\u044e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 &#8212; \u043d\u0430\u0434\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u043b\u043e\u0436\u0438\u0442\u044c \u0442\u0430\u043a\u0438 \u043f\u0430\u0442\u0447 \u043f\u043e\u0432\u0435\u0440\u0445 \u043d\u0435\u0451. \u0425\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u043e\u0432 \u0438\u043b\u0438 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0441\u043b\u043e\u0436\u043d\u043e\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430 (\u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0432\u0441\u044e \u043b\u043e\u0433\u0438\u043a\u0443 HEX \u043f\u0430\u0442\u0447\u0430 \u0441 C# \u043d\u0430 PowerShell). \u0412\u044b\u0432\u043e\u0434 &#8212; \u043d\u0430\u0434\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c <em>\u043f\u0440\u043e\u0441\u0442\u043e\u0439<\/em> \u043f\u0430\u0442\u0447\u0438\u043d\u0433.<\/p>\n<p>\u0418\u043d\u0430\u0447\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u043f\u0430\u0442\u0447\u0438\u0442\u044c \u043f\u0430\u0442\u0447, \u043d\u0430\u0434\u043e \u043d\u0430\u043b\u043e\u0436\u0438\u0442\u044c \u043f\u0430\u0442\u0447. \u041d\u0443 \u0432\u044b \u043f\u043e\u043d\u044f\u043b\u0438, \u0434\u0430?<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/469\/425\/5f1\/4694255f1a7400fcf7bd4079b2f73de1.jpg\" alt=\"We need to go deeper\" title=\"We need to go deeper\" width=\"279\" height=\"181\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/469\/425\/5f1\/4694255f1a7400fcf7bd4079b2f73de1.jpg\" data-blurred=\"true\"\/><\/p>\n<div><figcaption>We need to go deeper<\/figcaption><\/div>\n<\/figure>\n<p>\u0423 \u043d\u0430\u0441 \u0442\u0435\u043f\u0435\u0440\u044c \u0435\u0441\u0442\u044c \u0434\u0432\u0430 HEX\u0430: \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439, \u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0441\u043b\u0435 \u043d\u0430\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u043d\u0435\u0433\u043e \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u043f\u0430\u0442\u0447\u0430. \u041c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 diff \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438:<\/p>\n<pre><code>> fc.exe \/l \/n 'C:\\Program Files (x86)\\KAT Gateway\\katvr_foot.hex' patch.hex Comparing files C:\\PROGRAM FILES (X86)\\KAT GATEWAY\\katvr_foot.hex and PATCH.HEX ***** C:\\PROGRAM FILES (X86)\\KAT GATEWAY\\katvr_foot.hex  2463:  :2029C80000010203AEC2E6ED0001C3AA9D00F802CF01060302040F02013F050609FF4B41D2  2464:  :2029E8005456520512089F000900020A039F1902AF9607B039043D4FF703636505771064CC  2465:  :202A0800115ED1F9E86567676215F40000E979FA175FBD027BA63075FFFF79BF19070080C2 ***** PATCH.HEX  2463:  :2029C80000010203AEC2E6ED0001C3AA9D00F802CF01060302040F02013F050609FF4B41D2  2464:  :2029E800542D460512089F000900020A039F1902AF9607B039043D4FF70363650577106401  2465:  :202A0800115ED1F9E86567676215F40000E979FA175FBD027BA63075FFFF79BF19070080C2 *****<\/code><\/pre>\n<p>\u0412\u043e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u0430\u043a \u0435\u0433\u043e \u043d\u0430\u043b\u043e\u0436\u0438\u0442\u044c? \u041d\u0443 \u0442\u043e \u0435\u0441\u0442\u044c diff \u0435\u0441\u0442\u044c (fc.exe) \u0430 \u0432\u043e\u0442 patch \u043d\u0435\u0442\u0443! \u0427\u0442\u043e \u0436, \u0442\u0430\u043a \u043a\u0430\u043a \u0444\u043e\u0440\u043c\u0430\u0442 \u043f\u0430\u0442\u0447\u0430 \u043f\u0440\u043e\u0441\u0442 \u0438 \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043d\u0430\u043b\u043e\u0436\u0435\u043d\u0438\u044f (\u043d\u0443\u0436\u043d\u043e \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043b\u0441\u044f 1-\u0432-1, \u044d\u0442\u043e \u0435\u0449\u0435 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442 \u0447\u0442\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u0430\u044f \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0430\u044f), \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e: \u0447\u0438\u0442\u0430\u0435\u043c \u0444\u0430\u0439\u043b, \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0440\u0430\u0432\u0435\u043d\u0441\u0442\u0432\u043e, \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u043c \u0435\u0451.<\/p>\n<p>\u0410 \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u043e\u0431\u0449\u0435, \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0434\u0438\u0444\u0444 \u0432 \u0441\u043a\u0440\u0438\u043f\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u044f\u043c\u043e \u043f\u0430\u0442\u0447\u0438\u0442\u044c. \u041d\u0435 \u0437\u043d\u0430\u044e \u0447\u0442\u043e \u043f\u0440\u043e\u0449\u0435, \u0435\u0441\u043b\u0438 \u0447\u0435\u0441\u0442\u043d\u043e, \u043d\u043e \u044f \u043f\u043e\u0448\u0435\u043b \u0432\u0442\u043e\u0440\u044b\u043c \u043f\u0443\u0442\u0451\u043c (\u0435\u0441\u043b\u0438 \u0447\u0435\u0441\u0442\u043d\u043e &#8212; \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0432\u043e\u0437\u0438\u0442\u044c\u0441\u044f \u0441 \u0447\u0442\u0435\u043d\u0438\u0435\u043c \u0434\u0432\u0443\u0445 \u0444\u0430\u0439\u043b\u043e\u0432, \u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u0430\u043a \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043f\u0430\u0439\u043f\u0430). \u041a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u0442\u0435\u0439\u0442 \u043c\u0430\u0448\u0438\u043d\u043e\u0439:<\/p>\n<ul>\n<li>\n<p>&#171;Comparing files&#187; \u0441\u0442\u0440\u043e\u043a\u0430 => \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a, \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u043f\u0430\u0442\u0447\u0430<\/p>\n<\/li>\n<li>\n<p>&#171;*****&#187; \u0432 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0438 \u043f\u0430\u0442\u0447\u0430 => \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e<\/p>\n<\/li>\n<li>\n<p>&#171;*****&#187; \u0432 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0438 \u0441\u0442\u0440\u043e\u043a \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e => \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u043f\u0430\u0442\u0447\u0435\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a<\/p>\n<\/li>\n<li>\n<p>\u0434\u0440\u0443\u0433\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0432 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0438 \u0441\u0442\u0440\u043e\u043a \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e => \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u043c if \u043d\u0430 \u043d\u043e\u043c\u0435\u0440 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438 \u0435\u0451 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435<\/p>\n<\/li>\n<li>\n<p>&#171;*****&#187; \u0432 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0438 \u043f\u0430\u0442\u0447\u0435\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a => \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u0432 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u043f\u0430\u0442\u0447\u0430<\/p>\n<\/li>\n<li>\n<p>\u0441\u0440\u043e\u043a\u0430 \u0432 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0438 \u043f\u0430\u0442\u0447\u0435\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a => \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u043c \u0435\u0451<\/p>\n<\/li>\n<\/ul>\n<p><a href=\"https:\/\/github.com\/datacompboy\/nrf-katvr-receiver\/blob\/19b3746dac5967739d294d279693e2d4e44be105\/scripts\/fc-text-to-patcher.ps1\" rel=\"noopener noreferrer nofollow\">\u0412\u0440\u043e\u0434\u0435 \u043f\u0440\u043e\u0441\u0442\u043e.<\/a><\/p>\n<p>\u0418\u0437 \u0432\u0430\u0436\u043d\u044b\u0445 \u0432\u0435\u0449\u0435\u0439 \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f: \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435 \u0432 \u0442\u043e\u0439 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0435, \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 \u0438 \u043d\u0435 \u0432 utf8, \u0430 \u0432 utf-16. \u0422\u0430\u043a \u0447\u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442 \u043e\u0442\u0441\u044b\u043b\u0430\u0442\u044c \u0432 <code>Out-File -Encoding Ascii<\/code>. \u041d\u043e \u044d\u0442\u043e \u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u043c\u0435\u0448\u0430\u0435\u0442.<\/p>\n<p>\u0418\u0442\u0430\u043a, \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u043e\u0440\u043c\u0438\u0442\u044c \u0435\u043c\u0443 \u043f\u0430\u0442\u0447, \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c:<\/p>\n<pre><code class=\"powershell\">> fc.exe \/l \/n 'C:\\Program Files (x86)\\KAT Gateway\\katvr_foot.hex' patch.hex | .\\fc-text-to-patcher.ps1 | Out-File -Filepath foot-patch.ps1 -Encoding Ascii > cat .\\foot-patch.ps1 $in_line = 0 $Input | ForEach-Object {   $in_line++   $skip = 0   if ($in_line -eq  2463) {     if ($_ -ne ':2029C80000010203AEC2E6ED0001C3AA9D00F802CF01060302040F02013F050609FF4B41D2') { throw 'File content mismatch'; }     $skip = 1   }   if ($in_line -eq  2464) {     if ($_ -ne ':2029E8005456520512089F000900020A039F1902AF9607B039043D4FF703636505771064CC') { throw 'File content mismatch'; }     $skip = 1   }   if ($in_line -eq  2465) {     if ($_ -ne ':202A0800115ED1F9E86567676215F40000E979FA175FBD027BA63075FFFF79BF19070080C2') { throw 'File content mismatch'; }     $skip = 1   }   if ($in_line -eq  2465) {     Write-Output ':2029C80000010203AEC2E6ED0001C3AA9D00F802CF01060302040F02013F050609FF4B41D2'   }   if ($in_line -eq  2465) {     Write-Output ':2029E800542D460512089F000900020A039F1902AF9607B039043D4FF70363650577106401'   }   if ($in_line -eq  2465) {     Write-Output ':202A0800115ED1F9E86567676215F40000E979FA175FBD027BA63075FFFF79BF19070080C2'   }   if ($skip -eq 0) {     Write-Output $_   } }<\/code><\/pre>\n<p>\u041e\u0442\u043b\u0438\u0447\u043d\u043e! \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c:<\/p>\n<pre><code class=\"powershell\">> cat 'C:\\Program Files (x86)\\KAT Gateway\\katvr_foot.hex' | .\\foot-patch.ps1 | Out-File -Filepath out.hex -Encoding ascii > fc.exe .\\out.hex .\\patch.hex Comparing files .\\out.hex and .\\PATCH.HEX FC: no differences encountered<\/code><\/pre>\n<h2>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0448\u0442\u0440\u0438\u0445\u0438<\/h2>\n<p>\u041f\u043e\u043f\u0440\u0430\u0432\u0438\u043c \u0441\u043a\u0440\u0438\u043f\u0442, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432\u044b\u0437\u043e\u0432 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u043a\u043e\u0434 \u0434\u043b\u044f \u043d\u0430\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u0430\u0442\u0447\u0430. \u041f\u043e\u0439\u043c\u0451\u043c, \u0447\u0442\u043e \u0432 \u043f\u0430\u043f\u043a\u0435 scripts \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u043a\u0430\u0448\u0430, \u0442\u0430\u043a \u0447\u0442\u043e&#8230; \u0412\u0440\u0435\u043c\u044f \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433\u0430! \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u0438\u043c\u0435\u043d\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 \u0434\u043b\u044f .cmd &#8212; \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u0447\u0442\u043e\u0431 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0431\u044b\u043b\u0438.<\/p>\n<p>\u041e\u0431\u0430 \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 (\u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a) \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0451\u043c \u0432 \u043a\u043e\u043d\u0435\u0446, \u043e\u0431\u043e\u0437\u0432\u0430\u0432 \u0438\u0445 <code>y-$script.ps1<\/code>. \u0410 \u043f\u0430\u0442\u0447\u0438 \u043f\u043e\u043b\u043e\u0436\u0438\u043c \u0432 <code>z_patch_$sensor.ps1<\/code>.<\/p>\n<details class=\"spoiler\">\n<summary>\u0415\u0449\u0435 \u0437\u0430\u043c\u0435\u0442\u043a\u0430 \u043d\u0430 \u043f\u043e\u043b\u044f\u0445:<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0412\u044b\u0437\u0432\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442 \u043a\u043e\u0441\u0432\u0435\u043d\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e &#8212; \u0430\u043c\u043f\u0435\u0440\u0441\u0430\u043d\u0434. \u041d\u0443 \u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0430\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u0430\u0442\u0447\u0430 \u0438\u0434\u0451\u0442 \u0447\u0435\u0440\u0435\u0437:<\/p>\n<pre><code class=\"cs\">$newfw = $ENV:TEMP + \"\\katvr_\" + $orig + \"_patch.hex\" $patchscript = \".\\z_patch_\" + $patch + \".ps1\" Get-Content $firmware | &amp; $patchscript | Out-File -FilePath $newfw -Encoding ascii<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p><a href=\"https:\/\/github.com\/datacompboy\/nrf-katvr-receiver\/tree\/master\/scripts\/sensors\" rel=\"noopener noreferrer nofollow\">\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u0443\u044e \u043a\u0430\u0448\u0438\u0446\u0443<\/a> \u0443\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0444\u0438\u043d\u0430\u043b\u043e\u043c.<\/p>\n<h2>\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0435\u0440\u0438\u0438<\/h2>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043b\u0438 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u0431\u0430\u0437\u0443, \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u0441\u0430\u043c\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u044c\u044e &#8212; \u0440\u0430\u0437\u0431\u043e\u0440\u043e\u043c \u043f\u0430\u0440\u0448\u0438\u0432\u043e\u043a \u0438 \u043f\u0440\u0430\u0432\u043a\u043e\u0439 \u0438\u0445 \u043f\u043e-\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c\u0443, \u0430 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u044f\u043c\u043e\u0439 \u043f\u0440\u0430\u0432\u043a\u043e\u0439 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442. \u041d\u0435 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0439\u0442\u0435\u0441\u044c!<\/p>\n<h2>\u0421\u0441\u044b\u043b\u043a\u0438<\/h2>\n<ul>\n<li>\n<p>\u0427\u0430\u0441\u0442\u044c 1: &#171;\u0418\u0433\u0440\u0430\u0435\u043c \u0441 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u043e\u0439&#187; \u043d\u0430 [<a href=\"https:\/\/habr.com\/ru\/articles\/798029\/\" rel=\"noopener noreferrer nofollow\">Habr<\/a>], [<a href=\"https:\/\/medium.com\/@datacompboy\/3364c324e710?source=friends_link&amp;sk=5535c9f1c834b35af2ac1d282fd41826\" rel=\"noopener noreferrer nofollow\">Medium<\/a>] \u0438 [<a href=\"https:\/\/www.linkedin.com\/pulse\/playing-kat-walk-c2-part-1-actually-anton-fedorov-frtwe\/\" rel=\"noopener noreferrer nofollow\">LinkedIn<\/a>].<\/p>\n<\/li>\n<li>\n<p>\u0427\u0430\u0441\u0442\u044c 2: &#171;\u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u043f\u043e\u0433\u0440\u0443\u0436\u0435\u043d\u0438\u0435&#187; \u043d\u0430 [<a href=\"https:\/\/habr.com\/ru\/articles\/799197\/\" rel=\"noopener noreferrer nofollow\">Habr<\/a>], [<a href=\"https:\/\/medium.com\/@datacompboy\/katwalk-c2-part-2-peeking-eavesdropping-sniffing-and-learning-how-to-communicate-with-unknown-bb390c089a00\" rel=\"noopener noreferrer nofollow\">Medium<\/a>] \u0438 [<a href=\"https:\/\/www.linkedin.com\/pulse\/katwalk-c2-part-2-peeking-eavesdropping-sniffing-learning-fedorov-bcbme\" rel=\"noopener noreferrer nofollow\">LinkedIn<\/a>].<\/p>\n<\/li>\n<li>\n<p>\u0427\u0430\u0441\u0442\u044c 3: &#171;\u041e\u0442\u0440\u0435\u0437\u0430\u0435\u043c \u043f\u0440\u043e\u0432\u043e\u0434&#187; \u043d\u0430 [<a href=\"https:\/\/habr.com\/ru\/articles\/802125\/\" rel=\"noopener noreferrer nofollow\">Habr<\/a>], [<a href=\"https:\/\/medium.com\/@datacompboy\/katwalk-c2-p-3-cutting-the-wire-987753f49da8?source=friends_link&amp;sk=a4e0e2d3f71be681bc206b1d9a3d307a\" rel=\"noopener noreferrer nofollow\">Medium<\/a>] \u0438 [<a href=\"https:\/\/www.linkedin.com\/pulse\/katwalk-c2-p3-cutting-wire-anton-fedorov-4abae\/\" rel=\"noopener noreferrer nofollow\">LinkedIn<\/a>].<\/p>\n<\/li>\n<li>\n<p>\u0427\u0430\u0441\u0442\u044c 4: &#171;\u0418\u0433\u0440\u0430\u0435\u043c\u0441\u044f \u0441 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u043e\u0439&#187; \u043d\u0430 [<a href=\"https:\/\/habr.com\/ru\/articles\/804327\/\" rel=\"noopener noreferrer nofollow\">Habr<\/a>], [<a href=\"https:\/\/medium.com\/@datacompboy\/katwalk-c2-p-4-playing-with-firmware-ccad00d9eeeb?source=friends_link&amp;sk=3b0779685140b65e84d667950f07f7d6\" rel=\"noopener noreferrer nofollow\">Medium<\/a>] \u0438 [<a href=\"https:\/\/www.linkedin.com\/pulse\/katwalk-c2-p4-playing-firmware-anton-fedorov-wirce\/\" rel=\"noopener noreferrer nofollow\">LinkedIn<\/a>].<\/p>\n<\/li>\n<li>\n<p>\u0427\u0430\u0441\u0442\u044c 5: &#171;\u041e\u0432\u0435\u0440\u043a\u043b\u043e\u043a\u0438\u043d\u0433 \u0438 \u0431\u0430\u0433\u0444\u0438\u043a\u0441\u0438\u043d\u0433&#187; \u043d\u0430 [<a href=\"https:\/\/habr.com\/ru\/articles\/805747\/\" rel=\"noopener noreferrer nofollow\">Habr<\/a>], [<a href=\"https:\/\/medium.com\/@datacompboy\/katwalk-c2-p-5-overclocking-and-bugfixing-0ff1fd853e49?source=friends_link&amp;sk=4f44bf29291c8c3ad1b2522c5fd2d3a9\" rel=\"noopener noreferrer nofollow\">Medium<\/a>] \u0438 [<a href=\"https:\/\/www.linkedin.com\/pulse\/katwalk-c2-p5-overclocking-bugfixing-how-use-ghidra-analyse-fedorov-5nome\/\" rel=\"noopener noreferrer nofollow\">LinkedIn<\/a>].<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/804327\/\"> https:\/\/habr.com\/ru\/articles\/804327\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0414\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b\u0441\u044f &#8212; \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u044e \u043f\u0440\u043e <a href=\"https:\/\/habr.com\/ru\/articles\/798029\/\" rel=\"noopener noreferrer nofollow\">\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 \u0434\u043b\u044f VR \u0438\u0433\u0440<\/a>, \u043a\u0430\u043a \u0441 <a href=\"https:\/\/habr.com\/ru\/articles\/799197\/\" rel=\"noopener noreferrer nofollow\">\u043d\u0435\u0439 \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f<\/a> \u0438  \u043a\u0430\u043a \u0434\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f <a href=\"https:\/\/habr.com\/ru\/articles\/802125\/\" rel=\"noopener noreferrer nofollow\">\u0434\u043e \u0435\u0435 \u0441\u0435\u043d\u0441\u043e\u0440\u043e\u0432 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e<\/a>.<\/p>\n<p>\u042f \u0443\u0436\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u043b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0433\u043b\u044e\u043a\u0438 \u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u0441\u0435\u043d\u0441\u043e\u0440\u0430\u043c\u0438 &#8212; \u0437\u043d\u0430\u0447\u0438\u0442, \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0438\u0445 \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c. \u041d\u043e \u0447\u0442\u043e\u0431\u044b \u0438\u0445 \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c, \u043d\u0430\u0434\u043e \u043f\u043e\u043d\u044f\u0442\u044c \u0447\u0442\u043e \u043e\u043d\u0438 \u0437\u0430 \u0437\u0432\u0435\u0440\u044c, \u0438 \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u0438\u0445 \u043a\u0430\u043a-\u0442\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c. \u0418\u0437-\u0437\u0430 \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0441\u0442\u0430\u0442\u044c\u0438, \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u0438 \u0431\u0435\u0437 \u0442\u043e\u0433\u043e \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 \u0440\u0435\u0444\u0435\u0440\u0430\u0442\u0438\u043a \u043d\u0430 \u0435\u0449\u0435 \u0431\u043e\u043b\u0435\u0435 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0435 \u043a\u0443\u0441\u043e\u0447\u043a\u0438 &#8212; \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u0433\u043b\u044f\u043d\u0435\u043c \u0432\u043d\u0443\u0442\u0440\u044c \u0441\u0435\u043d\u0441\u043e\u0440\u0430 \u0438 \u043d\u0430\u0443\u0447\u0438\u043c\u0441\u044f \u043c\u0435\u043d\u044f\u0442\u044c \u0435\u043c\u0443 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u0432 \u043f\u0440\u043e\u0441\u0442\u043e\u043c \u0438 \u0443\u0434\u043e\u0431\u043d\u043e\u043c \u0432\u0438\u0434\u0435.<\/p>\n<h2>\u0412\u0441\u043a\u0440\u044b\u0442\u0438\u0435 \u043f\u043e\u043a\u0430\u0436\u0435\u0442<\/h2>\n<p>\u0418\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u0447\u0435\u0433\u043e \u043b\u0438\u0431\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0445\u0430\u043e\u0442\u0438\u0447\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441 \u0437\u0430\u0445\u043e\u0434\u0430\u043c\u0438 \u0441 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0442\u043e\u0440\u043e\u043d, \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 &#171;\u043c\u0435\u0442\u043e\u0434 \u043d\u0430\u0443\u0447\u043d\u043e\u0433\u043e \u0442\u044b\u043a\u0430&#187;. \u041d\u0438\u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043d\u0435 \u0441\u043a\u0430\u0436\u0435\u0448\u044c, \u0433\u0434\u0435 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u0442\u044c, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0448\u044c \u043d\u0430 \u0438\u0442\u043e\u0433 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043d\u0430 \u0440\u0435\u0442\u0440\u043e\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u043e\u043f\u0443\u0441 \u043a\u0430\u043a \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043a \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044e, \u0441\u043a\u043e\u0440\u0435\u0435 \u043a\u0430\u043a \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043e\u0431\u0437\u043e\u0440 \u043d\u0430 \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u0434\u0430 \u0433\u0434\u0435 \u0438\u0441\u043a\u0430\u0442\u044c \u043a\u0440\u0443\u043f\u0438\u0446\u044b \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0441\u0442\u0435\u0439. \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0432\u0441\u0451 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u0443\u0442\u0435\u0439 \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0442 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0443 \u0438 \u0432 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432 \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442 \u043a \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044e.<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0412\u0441\u043a\u0440\u043e\u0435\u043c&#8230;<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u043e \u0447\u0442\u043e \u0442\u043e\u0447\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 (\u043a\u043e\u0433\u0434\u0430 \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c) &#8212; \u044d\u0442\u043e \u0437\u0430\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u043d\u0438\u0435 \u0432\u043d\u0443\u0442\u0440\u044c. \u0415\u0441\u043b\u0438 \u043c\u044b \u0437\u0430\u0433\u043b\u044f\u043d\u0435\u043c \u0432\u043d\u0443\u0442\u0440\u044c \u0441\u0435\u043d\u0441\u043e\u0440\u0430 \u0434\u043b\u044f \u043d\u043e\u0433, \u043c\u044b \u0441\u0445\u043e\u0434\u0443 \u0437\u0430\u043c\u0435\u0442\u0438\u043c \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043c\u043e\u0434\u0443\u043b\u044c, \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 <a href=\"https:\/\/ttcble.com\/ProductList\/info.aspx?itemid=355\" rel=\"noopener noreferrer nofollow\">HY-40R201C<\/a>. \u042d\u0442\u043e BLE5.0 \u043c\u043e\u0434\u0443\u043b\u044c, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 <a href=\"https:\/\/www.ti.com\/product\/CC2640R2F\" rel=\"noopener noreferrer nofollow\">TI CC2640R2<\/a>. \u0422\u043e \u0435\u0441\u0442\u044c \u044d\u0442\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 (\u0442\u043e\u0447\u043d\u0435\u0435, \u0434\u0432\u0430) \u043f\u043b\u044e\u0441 \u0440\u0430\u0434\u0438\u043e\u043c\u043e\u0434\u0443\u043b\u044c. \u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u043a\u0430\u043a \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044f \u0441\u0432\u043e\u044e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u0432 \u043d\u0435\u0433\u043e, \u0442\u0430\u043a \u0438 \u0432 \u0442\u0430\u043d\u0434\u0435\u043c\u0435 \u0441 \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u043c.<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u043f\u0435\u0440\u0435\u0432\u0435\u0440\u043d\u0451\u043c \u043d\u0430 \u0436\u0438\u0432\u043e\u0442\u0438\u043a&#8230;<\/figcaption><\/div>\n<\/figure>\n<p>\u0414\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432 \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 \u043d\u0435 \u0432\u0438\u0434\u043d\u043e, \u043d\u0430 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043d\u0438\u0447\u0435\u0433\u043e, \u043a\u0440\u043e\u043c\u0435 \u043c\u043e\u0434\u0443\u043b\u044f \u043e\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043c\u044b\u0448\u0438 <a href=\"https:\/\/datasheet.octopart.com\/ADNS-9800-Avago-datasheet-10666463.pdf\" rel=\"noopener noreferrer nofollow\">A9800<\/a> \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e.<\/p>\n<p>\u0412\u044b\u0432\u043e\u0434: \u043c\u043e\u0434\u0443\u043b\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043a\u0430\u043a \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440. \u041d\u0430 \u043f\u043b\u0430\u0442\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0434\u0432\u0430 \u043f\u043e\u0440\u0442\u0430 \u0434\u043b\u044f \u0431\u0430\u0442\u0430\u0440\u0435\u0439, \u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0430. \u0415\u0441\u0442\u044c \u043a\u043d\u043e\u043f\u043a\u0438 Reset \u0438 Boot. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u0435\u043c \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0434\u0430\u0442\u0430\u0448\u0438\u0442, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c \u0433\u0434\u0435 \u043a\u0430\u043a\u0438\u0435 \u043f\u043e\u0440\u0442\u044b \u0438 \u0430\u0434\u0440\u0435\u0441\u0430 \u0436\u0435\u043b\u0435\u0437\u0430 \u043b\u0435\u0436\u0430\u0442, \u0434\u0430 \u0437\u043d\u0430\u0435\u043c \u0447\u0442\u043e \u044d\u0442\u043e ARM Cortex M3 \u0441 \u041f\u0417\u0423 \u043d\u0430 128\u043a\u0431, \u0440\u0430\u043c \u043d\u0430 8\u043a\u0431. \u041d\u0435 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e, \u043d\u043e \u044f\u0432\u043d\u043e \u0445\u0432\u0430\u0442\u0430\u0435\u0442.<\/p>\n<p>\u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 Nordic \u043c\u043e\u0434\u0443\u043b\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u044f \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 USB \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442. \u0417\u0430\u0442\u043e \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 \u0432\u0438\u0434\u0435\u043d <a href=\"https:\/\/www.wch-ic.com\/products\/CH9326.html\" rel=\"noopener noreferrer nofollow\">CH9326<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u043f\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e \u0441 \u043b\u0435\u0436\u0430\u0449\u0435\u0439 \u0432 \u043f\u0430\u043f\u043a\u0435 \u0433\u0435\u0439\u0442\u0432\u0435\u044f DLL\u043a\u0435.<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u044b \u043b\u0438\u0431\u043e \u0443\u0437\u043d\u0430\u043b\u0438, \u043b\u0438\u0431\u043e \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u043b\u0438, \u0447\u0442\u043e \u0441\u0435\u043d\u0441\u043e\u0440\u044b \u043e\u0431\u0449\u0430\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 USB-HID \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440-\u0447\u0438\u043f, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043d\u0430 ARM, \u0438 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u044b \u043d\u0430 Texas Instruments <a href=\"https:\/\/www.ti.com\/tool\/SIMPLELINK-CC2640R2-SDK\" rel=\"noopener noreferrer nofollow\">SIMPLELINK-CC2640R2-SDK<\/a>. \u041a SDK \u0435\u0449\u0435 \u0438\u0434\u0451\u0442 <a href=\"https:\/\/dev.ti.com\/tirex\/global?id=com.ti.SIMPLELINK_ACADEMY_CC2640R2SDK\" rel=\"noopener noreferrer nofollow\">&#171;Academy&#187;<\/a>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432 \u0441\u0436\u0430\u0442\u043e\u0439 \u0444\u043e\u0440\u043c\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0442\u0438\u0442\u0430\u0442\u044c \u043f\u0440\u043e BLE, \u043a\u0430\u043a \u0435\u0433\u043e \u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0438 \u0421\u0414\u041a, \u0434\u0430 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432. \u0412 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u0434\u0435\u0432\u043a\u0438\u0442\u0430 \u043d\u0435\u0442, \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0441\u0435\u043d\u0441\u043e\u0440\u0435 \u043f\u043e\u0438\u0433\u0440\u0430\u0442\u044c\u0441\u044f \u0441\u0445\u043e\u0434\u0443 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f, \u0432 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u043c \u043f\u043e\u0438\u0441\u043a\u043e\u043c \u0432\u043d\u0443\u0442\u0440\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e SDK.<\/p>\n<h2>\u0427\u0442\u043e \u0432 ROM\u0443\u0448\u043a\u0435 \u0442\u0435\u0431\u0435 \u043c\u043e\u0451\u043c<\/h2>\n<p>\u0412\u043d\u0435\u0448\u043d\u0438\u0439 \u043e\u0441\u043c\u043e\u0442\u0440 \u044d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u043e, \u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u0432\u043d\u0443\u0442\u0440\u0438, \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0441\u043c\u043e\u0442\u0440\u043e\u043c \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f. \u041d\u0430 \u043f\u043b\u0430\u0442\u0435 \u0435\u0441\u0442\u044c \u043f\u044f\u0442\u0430\u0447\u043a\u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 &#171;V R C M G&#187;, \u0433\u0434\u0435 G \u044f\u0432\u043d\u043e Ground, \u0432\u0441\u0451 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 &#8212; \u0432\u043e\u043f\u0440\u043e\u0441. \u041c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0437\u0432\u043e\u043d\u0438\u0442\u044c, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u043e&#8230; JTAG \u0443 \u043c\u0435\u043d\u044f \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043d\u0435\u0442.<\/p>\n<p>\u0422\u0443\u0442, \u043a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u043c\u043e\u0436\u043d\u043e \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u0447\u0442\u043e \u0433\u0435\u0439\u0442\u0432\u0435\u0439 \u0443\u043c\u0435\u0435\u0442 \u043f\u0440\u043e\u0448\u0438\u0432\u0430\u0442\u044c \u0441\u0435\u043d\u0441\u043e\u0440\u044b. \u042f \u043a\u043e\u0433\u0434\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437 \u0438\u0445 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u043b, \u043e\u043d \u043c\u043d\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043b, \u0447\u0442\u043e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u0441\u0442\u0430\u0440\u0430\u044f, \u0438 \u043d\u0430\u0434\u043e \u0437\u0430\u043b\u0438\u0442\u044c \u043d\u043e\u0432\u0443\u044e. \u0418 \u0437\u0430\u043b\u0438\u043b. \u0412\u044b\u0432\u043e\u0434 &#8212; \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u0433\u0435\u0439\u0442\u0432\u0435\u044e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430. \u041e\u0431\u0437\u043e\u0440 \u0433\u043b\u0430\u0437\u0430\u043c\u0438 \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u043f\u0430\u043f\u043a\u0435 \u0433\u0435\u0439\u0442\u0432\u0435\u044f:<\/p>\n<pre><code>C:\\>dir \/b \/d \"C:\\Program Files (x86)\\KAT Gateway\\*bin\" loco_ankle_by_embeded.bin loco_receiver_by_embeded.bin loco_sensor_group_application_foot_release_by_embeded_engineer.bin loco_sensor_group_application_waist_release_by_embeded_engineer.bin loco_s_ankle_by_embeded.bin loco_s_foot_by_embeded.bin loco_s_receiver_by_embeded.bin loco_s_waist_by_embeded.bin loco_waist_by_embeded.bin walk_c_foot_by_embeded.bin walk_c_hall_by_embeded.bin walk_c_receiver_by_embeded.bin walk_c_v2_foot_by_embeded.bin walk_c_v2_hall_by_embeded.bin walk_c_v2_receiver_by_embeded.bin<\/code><\/pre>\n<p>\u041f\u0440\u0438\u043a\u043e\u043b\u044c\u043d\u043e, \u0430 \u0433\u0434\u0435 C2?!<\/p>\n<pre><code>C:\\>dir \/b \/d \"C:\\Program Files (x86)\\KAT Gateway\\*hex\" katvr_direction.hex katvr_foot.hex katvr_receiver.hex<\/code><\/pre>\n<p>\u0425\u043c. \u0413\u0440\u0443\u0437\u0438\u043c dotPeek \u043e\u043f\u044f\u0442\u044c, Ctrl+Alt+T, &#171;.hex&#187;&#8230; \u0425\u0430!<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u043f\u043e\u0438\u0441\u043a \u043f\u043e \u0442\u043e\u0447\u043a\u0430\u0433\u0435\u043a\u0441\u0443<\/figcaption><\/div>\n<\/figure>\n<pre><code class=\"cs\">    byte index = 0;      int num1 = (int) KatvrFirmwareHelper.ch9326_find();     assert(num1 != 0)      int num2 = (int) KatvrFirmwareHelper.ch9326_open(Update_Firmware_Upgrading_Form.vid, Update_Firmware_Upgrading_Form.pid);     assert(num2 != 0)      int num21 = KatvrFirmwareHelper.ch9326_set_gpio(index, (byte) 15, (byte) 15)     assert(num21 != 0)      int num3 = (int) KatvrFirmwareHelper.ch9326_connected(index);     assert(num3 != 0)      int num4 = (int) KatvrFirmwareHelper.flash(_hex_path, device_type, device_state);     assert(num4 == 1)      KatvrFirmwareHelper.ch9326_ClearThreadData();     KatvrFirmwareHelper.close_ch9326();      \/* Write MACs of sensors into receiver if we updated receiver *\/     if (Update_Firmware_Upgrading_Form.deviceType == C2FirmwareUpdaeManager.C2DeviceType.Receiver) {         KATSDKInterfaceHelper.WriteSensorPair(...)     }<\/code><\/pre>\n<p>\u041f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e, \u0442\u043e \u0435\u0441\u0442\u044c \u0434\u043b\u044f \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0430\u0440\u0430 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0438\u0437 <code>KatvrFirmwareHelper<\/code> \u0438 \u0433\u0435\u043a\u0441 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438. \u041d\u043e \u0432 \u0434\u0438\u0437\u0430\u0441\u043c \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043d\u0430\u0434\u043e \u0433\u0440\u0443\u0437\u0438\u0442\u044c BIN, \u0430 \u043d\u0435 HEX. \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u044d\u0442\u043e \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432. \u042f \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b WSL:<\/p>\n<pre><code class=\"bash\">$ cd \/mnt\/c\/Program\\ Files\\ \\(x86\\)\/KAT\\ Gateway\/ $ for k in foot direction receiver; do objcopy --input-target=ihex --output-target=binary katvr_$k.hex katvr_$k.bin; done $ ls -la kat*bin -rwxrwxrwx 1 datacompboy datacompboy 131072 Mar 29 21:46 katvr_direction.bin -rwxrwxrwx 1 datacompboy datacompboy 131072 Mar 29 21:46 katvr_foot.bin -rwxrwxrwx 1 datacompboy datacompboy 131072 Mar 29 21:46 katvr_receiver.bin<\/code><\/pre>\n<p>\u041e\u0431\u0440\u0430\u0449\u0430\u0435\u043c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0432\u0441\u0435 \u0444\u0430\u0439\u043b\u044b \u0440\u043e\u0432\u043d\u043e 128\u043a\u0411, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c hex \u0440\u0430\u0437\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432, \u0437\u043d\u0430\u0447\u0438\u0442, \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0441\u0435\u043a\u0446\u0438\u0439, \u0438, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0447\u0430\u0441\u0442\u0438 \u0432 \u043d\u0435\u0439 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a, \u0438\u043b\u0438 \u0435\u0449\u0435 \u0447\u0442\u043e. \u041f\u0440\u043e\u0441\u0442\u043e \u0443\u0447\u0442\u0451\u043c \u043d\u0430 \u0431\u0443\u0434\u0443\u0449\u0435\u0435.<\/p>\n<p>\u041a\u0441\u0442\u0430\u0442\u0438, \u0435\u0441\u043b\u0438 \u043c\u044b \u0435\u0449\u0435 \u043d\u0435 \u0432\u0441\u043a\u0440\u044b\u0432\u0430\u043b\u0438 \u0441\u0435\u043d\u0441\u043e\u0440, \u0438 \u043d\u0435 \u0437\u043d\u0430\u0435\u043c \u0447\u0442\u043e \u0437\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0442\u044b\u043a\u0430\u0442\u044c \u0432 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u0447\u0435\u043a \u0447\u0435\u0440\u0435\u0437 binwalk:<\/p>\n<pre><code class=\"bash\">$ binwalk --disasm .\/katvr_direction.bin   DECIMAL       HEXADECIMAL     DESCRIPTION -------------------------------------------------------------------------------- 0             0x0             ARM executable code, 16-bit (Thumb), little endian, at least 1624 valid instructions<\/code><\/pre>\n<p>\u0438\u043b\u0438 <a href=\"https:\/\/github.com\/airbus-seclab\/cpu_rec\" rel=\"noopener noreferrer nofollow\">cpu_rec<\/a>:<\/p>\n<pre><code class=\"bash\">$ python cpu_rec.py .\/katvr_direction.bin  .\/katvr_direction.bin       full(0x20000)  None        chunk(0x10000;32)   ARMhf<\/code><\/pre>\n<p>\u0413\u0434\u0435 \u043c\u044b \u0443\u0431\u0435\u0436\u0434\u0430\u0435\u043c\u0441\u044f, \u0447\u0442\u043e \u0434\u0430, \u044d\u0442\u043e ARM \u0438 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0432 Thumb \u0440\u0435\u0436\u0438\u043c\u0435.<\/p>\n<p>\u041f\u043e\u0442\u044b\u043a\u0430\u0432 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0447\u0435\u0440\u0435\u0437 strings:<\/p>\n<pre><code class=\"bash\">$ strings -n 10 katvr_direction.bin inputNormal FinputGyroRv executable N]_]>CNUW]>@FUm `(i0a(}0uh}pu [USQOMKIFCA?&lt;:8 p>\"`hBp!`h k +# p(F#p !i\"hQ\\)pch!i pGpGpGpGpG {unknown-instance-name} {empty-instance-name} F{static-instance-name}<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0417\u0430\u043c\u0435\u0442\u043a\u0438 \u043d\u0430 \u043f\u043e\u043b\u044f\u0445<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041f\u043e\u0438\u0441\u043a \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0431\u044b\u0432\u0430\u0435\u0442 \u043b\u0438\u0448\u043d\u0438\u043c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043e\u0442 \u044d\u0442\u043e\u0442 \u0432\u044b\u0432\u043e\u0434 strings, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0435\u0441\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 &#8212; &#171;inputGyroRv&#187; \u0438 &#171;inputNormal&#187;. <a href=\"https:\/\/www.google.com\/search?q=inputGyroRv+inputNormal+site%3Agithub.com\" rel=\"noopener noreferrer nofollow\">\u041f\u043e\u0438\u0441\u043a \u043f\u043e \u043d\u0438\u043c \u043d\u0430 github<\/a> \u0434\u0430\u043b \u0441\u0445\u043e\u0434\u0443 <a href=\"https:\/\/github.com\/hcrest\/bno080-driver\/blob\/master\/sh2.c\" rel=\"noopener noreferrer nofollow\">\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0443\u044e \u0432\u0435\u0449\u044c<\/a>, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e \u0440\u0430\u0437\u043c\u0435\u0442\u0438\u0442\u044c \u0447\u0430\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u0435\u043d\u0441\u043e\u0440 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f. \u0414\u043b\u044f \u043d\u043e\u0433 \u043e\u0434\u043d\u0430\u043a\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0439 \u0444\u043a\u0443\u0441\u043d\u043e\u0441\u0442\u0438 \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u043e\u0441\u044c.<\/p>\n<\/div>\n<\/details>\n<h2>\u0417\u0430\u043b\u0438\u0432\u043a\u0430 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u043d\u0430 \u0445\u043e\u0434\u0443<\/h2>\n<p>\u0420\u0430\u0437\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u043d\u0438\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043d\u0430 <a href=\"https:\/\/www.ti.com\/lit\/an\/swra466d\/swra466d.pdf\" rel=\"noopener noreferrer nofollow\">Serial Boot Loader<\/a> \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0431\u0443\u0442\u043b\u043e\u0430\u0434\u0435\u0440 \u043f\u0440\u043e\u0441\u0442\u043e \u0433\u043e\u0442\u043e\u0432 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u0435\u0441\u043b\u0438 \u0432 \u043d\u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c\u0441\u044f, 0x55 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0443\u0435\u0442 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c, \u0432 \u043e\u0431\u0449\u0435\u043c, \u0432\u0441\u0451 \u043a\u0430\u043a \u0432\u0441\u0435\u0433\u0434\u0430. \u041c\u044b, \u0432\u043f\u0440\u043e\u0447\u0435\u043c, \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0440\u043e\u0434\u043d\u044b\u043c \u043f\u0440\u043e\u0448\u0438\u0432\u0430\u043b\u044c\u0449\u0438\u043a\u043e\u043c, \u0442\u0430\u043a \u043a\u0430\u043a \u0443 \u043d\u0430\u0441 \u043d\u0435\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 &#8212; \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c HID2Serial, \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0438\u0434\u0442\u0438 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e. \u041d\u043e, \u043a\u0430\u043a \u043c\u044b \u0443\u0436\u0435 \u0432\u044b\u0448\u0435 \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u0438, \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043d\u0430\u0440\u0443\u0436\u0443, \u0442\u0430\u043a \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0438\u0445.<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 C# \u043f\u0440\u043e\u0435\u043a\u0442, \u043a\u0443\u0434\u0430 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c KatvrFirmwareHelper \u0438 katvr_firmware.dll \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043e\u043d \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f:<\/p>\n<pre><code class=\"cs\">    static void Main(string[] args)     {         uint vid = 0xC4F4u;         byte device_state = 0;         byte index = 0;         uint pid = 28471u;         byte device_type = 3;         string hex_path = \"C:\\\\Program Files (x86)\\\\KAT Gateway\\\\katvr_foot.hex\";          if (KatvrFirmwareHelper.ch9326_find() == 0)         {             Console.WriteLine(\"ch9326_find failed\");             return;         }          if (KatvrFirmwareHelper.ch9326_open(vid, pid) == 0)         {             Console.WriteLine(\"ch9326_open failed\");             return;         }          if (KatvrFirmwareHelper.ch9326_set_gpio(index, (byte)15, (byte)15) == 0)         {             Console.WriteLine(\"ch9326_set_gpio failed\");             return;         }          if (KatvrFirmwareHelper.ch9326_connected(index) == 0)         {             Console.WriteLine(\"ch9326_connected failed\");             return;         }          if (KatvrFirmwareHelper.flash(hex_path, device_type, device_state) != 1)         {             Console.WriteLine(\"KatvrFirmwareHelper.flash failed\");             Console.ReadKey();             return;         }          KatvrFirmwareHelper.ch9326_ClearThreadData();         KatvrFirmwareHelper.close_ch9326();     }<\/code><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043c &#8212; \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0435 \u0440\u0430\u0441\u043f\u0435\u0447\u0430\u0442\u043a\u0438, \u043e\u0448\u0438\u0431\u043a\u0430. \u042d\u043c&#8230; \u0410, \u043d\u0443 \u0434\u0430, \u0437\u0430\u0436\u0438\u043c\u0430\u0435\u043c Flash \u043a\u043d\u043e\u043f\u043a\u0443, \u0442\u044b\u043a\u0430\u0435\u043c Reset, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043e\u043f\u044f\u0442\u044c &#8212; \u043f\u043e\u0431\u0435\u0436\u0430\u043b\u0438 \u0442\u043e\u0447\u043a\u0438 \u043f\u043e \u044d\u043a\u0440\u0430\u043d\u0443. \u0427\u0435\u0440\u0435\u0437 \u043c\u0438\u043d\u0443\u0442\u044b \u043f\u043e\u043b\u0442\u043e\u0440\u044b &#8212; \u0433\u043e\u0442\u043e\u0432\u043e. \u0421\u0435\u043d\u0441\u043e\u0440 \u0432\u0441\u0451 \u0435\u0449\u0435 \u0436\u0438\u0432. \u041f\u0440\u0430\u0432\u0434\u0430, \u043c\u0438\u0433\u0430\u0435\u0442 \u043b\u0435\u0432\u043e\u0439 \u043b\u0430\u043c\u043f\u043e\u0447\u043a\u043e\u0439 \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u0440\u0430\u0432\u043e\u0439, \u043a\u0430\u043a \u043c\u0438\u0433\u0430\u043b \u0434\u043e \u044d\u0442\u043e\u0433\u043e. \u0423\u043f\u0441. \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u0442\u0435\u0440\u043b\u0438\u0441\u044c.<\/p>\n<h2>\u041f\u0430\u0442\u0447\u0438\u043c \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443<\/h2>\n<p>\u041d\u043e \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u043a\u043e\u043c\u0444\u043e\u0440\u0442\u043d\u043e\u0433\u043e \u043f\u0430\u0442\u0447\u0438\u043d\u0433\u0430. \u0423 \u0433\u0438\u0434\u0440\u044b \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0444\u0430\u0439\u043b \u043a\u0430\u043a Hex \u0438\u043b\u0438 Raw, \u043d\u043e \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432\u0441\u0451, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0440\u0430\u043c \u0438 \u043e\u0431\u043b\u0430\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435 \u0431\u044b\u043b\u043e \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c hex&#8217;\u0435. \u0412\u044b\u0432\u043e\u0434 &#8212; \u043d\u0430\u0434\u043e \u043f\u0430\u0442\u0447\u0438\u0442\u044c \u043f\u0440\u044f\u043c\u043e HEX \u0444\u0430\u0439\u043b, \u0430 \u043a\u0430\u043a?<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 &#8212; \u043d\u0430 \u0447\u0435\u043c-\u0442\u043e \u043d\u0430\u0434\u043e \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f. \u041f\u0440\u043e\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u043f\u0430\u0442\u0447 &#8212; \u043f\u043e\u043c\u0435\u043d\u044f\u0435\u043c &#171;KATVR&#187; \u0441\u0442\u0440\u043e\u043a\u0443 \u043d\u0430 &#171;KAT-F&#187;, \u0442\u043e \u0435\u0441\u0442\u044c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u0435\u0431\u044f \u0430\u043d\u043e\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a &#171;KAT-F&#187; (\u0442\u0438\u043f\u0430 Foot\/\u043d\u043e\u0433\u0430). \u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043b\u044e\u0431\u044b\u043c hex \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/www.x-ways.net\/winhex\/\" rel=\"noopener noreferrer nofollow\">WinHex<\/a>, \u0438 \u043f\u0440\u0430\u0432\u0438\u043c. \u0417\u0430\u0442\u0435\u043c \u0431\u0435\u0440\u0451\u043c \u0434\u0438\u0444\u0444:<\/p>\n<pre><code class=\"powershell\">> fc.exe \/b .\\katvr_foot_orig.bin .\\katvr_foot.bin Comparing files .\\katvr_foot_orig.bin and .\\KATVR_FOOT.BIN 000129E9: 56 2D 000129EA: 52 46<\/code><\/pre>\n<p>\u041e\u0442\u043b\u0438\u0447\u043d\u043e, \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043f\u0430\u0442\u0447, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043b\u0435\u0433\u043a\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043a\u0430\u043a \u0435\u0441\u0442\u044c \u0438\u043b\u0438 \u0441\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 C#:<\/p>\n<pre><code class=\"cs\">    static readonly PatchEntry[] PatchFoot = {         ( 0x000129e9, 0x56, 0x2D ), \/\/ V => -         ( 0x000129ea, 0x52, 0x46 ), \/\/ R => F     };<\/code><\/pre>\n<p>\u0418\u0437 \u0432\u043a\u0443\u0441\u043d\u044b\u0445 \u0442\u0440\u044e\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u0434\u043b\u044f C# (\u044f \u043e\u0447\u0435\u043d\u044c \u0440\u0435\u0434\u043a\u043e \u0435\u0433\u043e \u0442\u0440\u043e\u0433\u0430\u044e) &#8212; \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0442\u0443\u043f\u043b\u0430<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-372370","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/372370","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=372370"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/372370\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=372370"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=372370"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=372370"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}