Vitaly Badeev / Mbed 2 deprecated Radar1

Dependencies:   FT800_2 mbed Encoder

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "encoder.h"
00003 #include "FT_Platform.h"
00004 #include "arm_const_structs.h"
00005 #include "math.h"
00006 
00007 #define screen_width 480
00008 #define screen_heigth 272
00009 #define DIR_ICON_ADDR 210000
00010 #define FILE_ICON_ADDR 212000
00011 #define CLOSE_ICON_ADDR 214000
00012 #define PALETTE_ADDR 216000
00013 
00014 #define FILE_SAVE           1
00015 #define FILE_DELETE         2
00016 
00017 #define MENU_SCAN           1
00018 #define MENU_FILES          2
00019 
00020 #define ROOT_DIR            254
00021 #define TEST_LENGTH_SAMPLES 1024
00022 
00023 #define KEY_SCAN            1
00024 #define KEY_ASCAN           2
00025 #define KEY_BSCAN           3
00026 #define KEY_START           4
00027 #define KEY_STOP            5
00028 #define KEY_FILES           6
00029 #define KEY_EPS             7
00030 #define KEY_OPTIONS         8
00031 #define KEY_LEFT            10
00032 #define KEY_RIGHT           11
00033 #define KEY_UP              12
00034 #define KEY_DOWN            13
00035 #define KEY_CLOSE           14
00036 #define KEY_TIME            15
00037 #define KEY_OK              16
00038 
00039 #define STATUS_MAIN         20
00040 #define STATUS_ASCAN        21
00041 #define STATUS_BSCAN        22
00042 #define STATUS_START        23
00043 #define STATUS_STOP         24
00044 #define STATUS_FILES        25
00045 #define STATUS_BIN          26
00046 #define STATUS_TIME         27
00047 #define STATUS_EPS          28
00048 #define STATUS_OTHER        29
00049 
00050 #define TRACK_SLIDER        34
00051 #define TRACK_DEPTH         35
00052 #define TRACK_DISTANCE      36
00053 
00054 #define MATERIAL_AIR        10
00055 #define MATERIAL_GYPSUM     27
00056 #define MATERIAL_CONCRETE   40
00057 #define MATERIAL_BRICK      37
00058 #define MATERIAL_OTHER      99
00059 
00060 #define CLICK               0x50
00061 
00062 //Serial pc(SERIAL_TX, SERIAL_RX, 2250000);
00063 AnalogIn in0(A0);
00064 AnalogIn in1(A1);
00065 AnalogOut out(PA_4);
00066 Encoder enc(D5, D6, false);
00067 FT800 TFT(D11, D12, D13, D10, D9, D8);
00068 
00069 //-----------------------------------------------------------------------------
00070 // Encoder
00071 //-----------------------------------------------------------------------------
00072 uint8_t step_done = 0;
00073 uint16_t steps = 0;
00074 
00075 //-----------------------------------------------------------------------------
00076 // FT800
00077 //-----------------------------------------------------------------------------
00078 uint8_t eps = 10, eps_temp, eps_position, ReadWord = 0, status = 0, offset = 52, temp_value[401] = {0}, meanValue[201] = {0}, sig[201], time_position, xscale = 8, yscale = 4, filename[20] = {0};
00079 uint8_t data[24] = {0xAD, 0x81, 0x00, 0x00, 0x2B, 0x04, 0x00, 0x00, 0x92, 0x8F, 0xE5, 0xFF, 0x4A, 0xFE, 0xFF, 0xFF, 0x3C, 0xB1, 0xFF, 0xFF, 0xA3, 0x2D, 0x27, 0x01};
00080 uint8_t palette[1024] = {143, 0, 0, 255, 147, 0, 0, 255, 151, 0, 0, 255, 155, 0, 0, 255, 159, 0, 0, 255, 163, 0, 0, 255, 167, 0, 0, 255, 171, 0, 0, 255, 174, 0, 0, 255, 178, 0, 0, 255, 182, 0, 0, 255, 186, 0, 0, 255, 190, 0, 0, 255, 194, 0, 0, 255, 198, 0, 0, 255, 202, 0, 0, 255, 206, 0, 0, 255, 210, 0, 0, 255, 214, 0, 0, 255, 218, 0, 0, 255, 222, 0, 0, 255, 226, 0, 0, 255, 230, 0, 0, 255, 234, 0, 0, 255, 237, 0, 0, 255, 241, 0, 0, 255, 245, 0, 0, 255, 249, 0, 0, 255, 253, 0, 0, 255, 255, 2, 0, 255, 255, 6, 0, 255, 255, 10, 0, 255, 255, 14, 0, 255, 255, 18, 0, 255, 255, 22, 0, 255, 255, 26, 0, 255, 255, 30, 0, 255, 255, 34, 0, 255, 255, 38, 0, 255, 255, 41, 0, 255, 255, 45, 0, 255, 255, 49, 0, 255, 255, 53, 0, 255, 255, 57, 0, 255, 255, 61, 0, 255, 255, 65, 0, 255, 255, 69, 0, 255, 255, 73, 0, 255, 255, 77, 0, 255, 255, 81, 0, 255, 255, 85, 0, 255, 255, 89, 0, 255, 255, 93, 0, 255, 255, 97, 0, 255, 255, 101, 0, 255, 255, 105, 0, 255, 255, 108, 0, 255, 255, 112, 0, 255, 255, 116, 0, 255, 255, 120, 0, 255, 255, 124, 0, 255, 255, 128, 0, 255, 255, 132, 0, 255, 255, 136, 0, 255, 255, 140, 0, 255, 255, 144, 0, 255, 255, 148, 0, 255, 255, 152, 0, 255, 255, 156, 0, 255, 255, 160, 0, 255, 255, 164, 0, 255, 255, 168, 0, 255, 255, 171, 0, 255, 255, 175, 0, 255, 255, 179, 0, 255, 255, 183, 0, 255, 255, 187, 0, 255, 255, 191, 0, 255, 255, 195, 0, 255, 255, 199, 0, 255, 255, 203, 0, 255, 255, 207, 0, 255, 255, 211, 0, 255, 255, 215, 0, 255, 255, 219, 0, 255, 255, 223, 0, 255, 255, 227, 0, 255, 255, 230, 0, 255, 255, 234, 0, 255, 255, 238, 0, 255, 255, 242, 0, 255, 255, 246, 0, 255, 255, 250, 0, 255, 255, 254, 0, 255, 251, 255, 3, 255, 247, 255, 7, 255, 243, 255, 11, 255, 239, 255, 15, 255, 235, 255, 19, 255, 231, 255, 23, 255, 227, 255, 27, 255, 223, 255, 31, 255, 219, 255, 35, 255, 216, 255, 38, 255, 212, 255, 42, 255, 208, 255, 46, 255, 204, 255, 50, 255, 200, 255, 54, 255, 196, 255, 58, 255, 192, 255, 62, 255, 188, 255, 66, 255, 184, 255, 70, 255, 180, 255, 74, 255, 176, 255, 78, 255, 172, 255, 82, 255, 168, 255, 86, 255, 164, 255, 90, 255, 160, 255, 94, 255, 156, 255, 98, 255, 153, 255, 101, 255, 149, 255, 105, 255, 145, 255, 109, 255, 141, 255, 113, 255, 137, 255, 117, 255, 133, 255, 121, 255, 129, 255, 125, 255, 125, 255, 129, 255, 121, 255, 133, 255, 117, 255, 137, 255, 113, 255, 141, 255, 109, 255, 145, 255, 105, 255, 149, 255, 101, 255, 153, 255, 97, 255, 157, 255, 93, 255, 161, 255, 90, 255, 164, 255, 86, 255, 168, 255, 82, 255, 172, 255, 78, 255, 176, 255, 74, 255, 180, 255, 70, 255, 184, 255, 66, 255, 188, 255, 62, 255, 192, 255, 58, 255, 196, 255, 54, 255, 200, 255, 50, 255, 204, 255, 46, 255, 208, 255, 42, 255, 212, 255, 38, 255, 216, 255, 34, 255, 220, 255, 30, 255, 224, 255, 27, 255, 227, 255, 23, 255, 231, 255, 19, 255, 235, 255, 15, 255, 239, 255, 11, 255, 243, 255, 7, 255, 247, 255, 3, 255, 251, 255, 0, 254, 255, 255, 0, 250, 255, 255, 0, 246, 255, 255, 0, 242, 255, 255, 0, 238, 255, 255, 0, 234, 255, 255, 0, 230, 255, 255, 0, 226, 255, 255, 0, 222, 255, 255, 0, 219, 255, 255, 0, 215, 255, 255, 0, 211, 255, 255, 0, 207, 255, 255, 0, 203, 255, 255, 0, 199, 255, 255, 0, 195, 255, 255, 0, 191, 255, 255, 0, 187, 255, 255, 0, 183, 255, 255, 0, 179, 255, 255, 0, 175, 255, 255, 0, 171, 255, 255, 0, 167, 255, 255, 0, 163, 255, 255, 0, 159, 255, 255, 0, 156, 255, 255, 0, 152, 255, 255, 0, 148, 255, 255, 0, 144, 255, 255, 0, 140, 255, 255, 0, 136, 255, 255, 0, 132, 255, 255, 0, 128, 255, 255, 0, 124, 255, 255, 0, 120, 255, 255, 0, 116, 255, 255, 0, 112, 255, 255, 0, 108, 255, 255, 0, 104, 255, 255, 0, 100, 255, 255, 0, 96, 255, 255, 0, 93, 255, 255, 0, 89, 255, 255, 0, 85, 255, 255, 0, 81, 255, 255, 0, 77, 255, 255, 0, 73, 255, 255, 0, 69, 255, 255, 0, 65, 255, 255, 0, 61, 255, 255, 0, 57, 255, 255, 0, 53, 255, 255, 0, 49, 255, 255, 0, 45, 255, 255, 0, 41, 255, 255, 0, 37, 255, 255, 0, 33, 255, 255, 0, 30, 255, 255, 0, 26, 255, 255, 0, 22, 255, 255, 0, 18, 255, 255, 0, 14, 255, 255, 0, 10, 255, 255, 0, 6, 255, 255, 0, 2, 255, 255, 0, 0, 253, 255, 0, 0, 249, 255, 0, 0, 245, 255, 0, 0, 241, 255, 0, 0, 237, 255, 0, 0, 233, 255, 0, 0, 229, 255, 0, 0, 225, 255, 0, 0, 222, 255, 0, 0, 218, 255, 0, 0, 214, 255, 0, 0, 210, 255, 0, 0, 206, 255, 0, 0, 202, 255, 0, 0, 198, 255, 0, 0, 194, 255, 0, 0, 190, 255, 0, 0, 186, 255, 0, 0, 182, 255, 0, 0, 178, 255, 0, 0, 174, 255, 0, 0, 170, 255, 0, 0, 166, 255, 0, 0, 162, 255, 0, 0, 159, 255, 0, 0, 155, 255, 0, 0, 151, 255, 0, 0, 147, 255, 0, 0, 143, 255, 0, 0, 139, 255, 0, 0, 135, 255, 0, 0, 131, 255, 0, 0, 127, 255};
00081 uint8_t dir_icon[256] = {255, 144, 148, 176, 176, 145, 112, 176, 144, 144, 144, 176, 255, 255, 255, 255, 255, 144, 252, 253, 176, 144, 148, 253, 253, 253, 252, 253, 144, 255, 255, 255, 255, 140, 252, 252, 252, 253, 148, 252, 252, 252, 252, 253, 145, 255, 255, 255, 255, 144, 252, 252, 252, 253, 148, 252, 252, 252, 252, 253, 140, 255, 255, 255, 255, 144, 252, 252, 252, 252, 144, 252, 252, 252, 252, 253, 144, 255, 255, 255, 255, 145, 253, 252, 252, 252, 180, 253, 252, 252, 252, 253, 112, 255, 255, 255, 255, 144, 253, 252, 252, 253, 144, 253, 252, 252, 252, 252, 252, 112, 255, 255, 255, 145, 252, 252, 252, 252, 144, 252, 252, 252, 252, 253, 252, 144, 255, 255, 255, 144, 252, 252, 252, 253, 144, 252, 252, 252, 253, 254, 254, 144, 255, 255, 255, 140, 253, 252, 252, 253, 176, 252, 253, 252, 254, 255, 255, 110, 255, 255, 255, 145, 252, 252, 252, 252, 148, 253, 252, 252, 253, 255, 255, 142, 255, 255, 255, 145, 253, 252, 252, 253, 148, 253, 252, 252, 253, 68, 36, 110, 255, 255, 255, 112, 252, 252, 252, 252, 148, 253, 252, 252, 253, 36, 36, 112, 255, 255, 255, 145, 253, 252, 252, 253, 144, 252, 252, 253, 254, 254, 254, 145, 255, 255, 255, 141, 140, 144, 252, 253, 144, 144, 144, 176, 108, 145, 145, 255, 255, 255, 255, 255, 255, 255, 176, 144, 144, 255, 255, 255, 255, 255, 255, 255, 255, 255};
00082 uint8_t file_icon[256] = {255, 255, 219, 219, 251, 219, 219, 219, 219, 219, 219, 219, 255, 255, 255, 255, 255, 255, 219, 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, 255, 255, 255, 255, 255, 219, 255, 255, 255, 255, 255, 255, 255, 255, 219, 255, 223, 255, 255, 255, 255, 219, 255, 255, 255, 255, 255, 255, 255, 255, 219, 255, 255, 187, 255, 255, 255, 219, 255, 255, 255, 255, 255, 255, 255, 255, 219, 219, 219, 219, 255, 255, 255, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 255, 255, 255, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 255, 255, 255, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 255, 255, 255, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 255, 255, 255, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 255, 255, 255, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 182, 255, 255, 255, 219, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 219, 255, 255, 255, 182, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 146, 255, 255, 255, 142, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 146, 255, 255, 255, 146, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 146, 255, 255, 255, 146, 182, 146, 145, 150, 146, 114, 182, 146, 146, 146, 146, 146, 255};
00083 uint8_t close_icon[256] = {255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 251, 105, 69, 100, 69, 68, 69, 36, 69, 68, 65, 68, 73, 251, 255, 255, 69, 210, 251, 251, 251, 255, 250, 251, 255, 251, 251, 251, 214, 68, 255, 255, 68, 251, 247, 251, 247, 247, 246, 250, 247, 247, 246, 246, 255, 37, 255, 255, 69, 250, 246, 146, 109, 105, 142, 178, 105, 106, 178, 246, 246, 69, 255, 255, 101, 250, 250, 105, 255, 255, 110, 109, 255, 255, 110, 250, 251, 65, 255, 255, 68, 250, 246, 173, 106, 255, 255, 255, 255, 142, 141, 246, 247, 100, 255, 255, 68, 250, 246, 242, 178, 106, 255, 255, 105, 173, 246, 242, 247, 68, 255, 255, 64, 246, 205, 173, 142, 105, 255, 223, 105, 141, 173, 201, 246, 68, 255, 255, 64, 242, 205, 173, 106, 251, 255, 223, 223, 106, 173, 205, 246, 68, 255, 255, 68, 245, 174, 105, 255, 255, 110, 109, 255, 255, 105, 205, 242, 64, 255, 255, 68, 246, 209, 137, 110, 109, 142, 141, 105, 110, 173, 209, 242, 64, 255, 255, 68, 250, 242, 210, 209, 210, 242, 242, 242, 242, 241, 238, 246, 68, 255, 255, 101, 210, 246, 246, 247, 246, 246, 246, 246, 247, 246, 246, 210, 69, 255, 255, 251, 68, 68, 68, 65, 65, 64, 68, 96, 64, 68, 69, 105, 251, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255};
00084 uint16_t bitmap_height = 320, border_x = 30, depth = 201, buffer[201] = {0}, shift = 0, scroll_distance_val = 0, scroll_distance_size = 1000, slider_val = 0;
00085 uint16_t dac_value[201] = {489, 498, 507, 516, 525, 534, 544, 553, 562, 571, 580, 589, 598, 607, 616, 625, 633, 642, 651, 660, 669, 678, 686, 695, 704, 713, 722, 731, 740, 748, 757, 766, 775, 784, 793, 802, 810, 819, 828, 837, 846, 855, 864, 872, 881, 890, 899, 908, 917, 925, 934, 943, 952, 961, 969, 978, 987, 996, 1005, 1013, 1022, 1031, 1040, 1048, 1057, 1066, 1075, 1084, 1092, 1101, 1110, 1119, 1128, 1136, 1145, 1154, 1163, 1172, 1180, 1189, 1198, 1207, 1216, 1224, 1233, 1242, 1251, 1259, 1268, 1277, 1286, 1295, 1303, 1312, 1321, 1330, 1338, 1347, 1356, 1365, 1374, 1382, 1391, 1400, 1409, 1417, 1426, 1435, 1444, 1453, 1461, 1470, 1479, 1488, 1496, 1505, 1514, 1523, 1531, 1540, 1549, 1558, 1566, 1575, 1584, 1593, 1601, 1610, 1619, 1628, 1636, 1645, 1654, 1663, 1671, 1680, 1689, 1698, 1706, 1715, 1724, 1733, 1741, 1750, 1759, 1768, 1776, 1785, 1794, 1803, 1811, 1820, 1828, 1837, 1845, 1854, 1862, 1871, 1879, 1888, 1896, 1905, 1913, 1922, 1930, 1939, 1947, 1956, 1964, 1973, 1981, 1990, 1998, 2007, 2015, 2024, 2032, 2041, 2049, 2058, 2066, 2075, 2083, 2092, 2101, 2109, 2118, 2127, 2136, 2145, 2154, 2163, 2172, 2181, 2190, 2199, 2208, 2217, 2226, 2235, 2243};
00086 uint16_t matched_load[201] = {2218, 2233, 2280, 2297, 2305, 2300, 2284, 2264, 2251, 2255, 2264, 2255, 2263, 2260, 2252, 2216, 2231, 2229, 2219, 2213, 2205, 2197, 2188, 2180, 2181, 2173, 2175, 2216, 2169, 2137, 2147, 2159, 2161, 2163, 2187, 2200, 2195, 2185, 2205, 2208, 2197, 2212, 2236, 2255, 2256, 2271, 2269, 2257, 2255, 2260, 2257, 2251, 2257, 2265, 2243, 2235, 2260, 2261, 2257, 2284, 2297, 2297, 2305, 2335, 2333, 2335, 2351, 2351, 2349, 2330, 2340, 2337, 2333, 2341, 2353, 2357, 2352, 2351, 2347, 2333, 2344, 2327, 2325, 2312, 2323, 2310, 2300, 2309, 2295, 2291, 2271, 2270, 2265, 2255, 2268, 2248, 2244, 2229, 2232, 2227, 2227, 2212, 2229, 2231, 2229, 2229, 2240, 2244, 2222, 2239, 2239, 2244, 2244, 2251, 2236, 2245, 2238, 2247, 2239, 2233, 2236, 2235, 2233, 2223, 2224, 2238, 2220, 2210, 2232, 2224, 2212, 2225, 2216, 2209, 2202, 2209, 2201, 2189, 2199, 2191, 2190, 2172, 2196, 2189, 2174, 2187, 2183, 2185, 2179, 2209, 2183, 2177, 2169, 2181, 2172, 2159, 2168, 2166, 2172, 2152, 2159, 2153, 2144, 2145, 2157, 2139, 2134, 2139, 2152, 2146, 2132, 2149, 2133, 2143, 2131, 2164, 2156, 2159, 2147, 2164, 2168, 2164, 2159, 2167, 2180, 2167, 2173, 2196, 2190, 2193, 2200, 2197, 2189, 2188, 2197, 2189, 2189, 2195, 2199, 2206, 2197};
00087 uint32_t testIndex = 0, addr = 0, dloffset1 = 0, dloffset2 = 0, fftSize = 512, ifftFlag = 1, doBitReverse = 1, inx = 60;
00088 char keyPressed = 0, batt[6], eps_str[10], curr_time[20];
00089 float blackman_win[201] = {0, 0.00008886, 0.0003558, 0.000802, 0.001429, 0.00224, 0.003238, 0.004428, 0.005813, 0.007399, 0.009193, 0.0112, 0.01343, 0.01589, 0.01858, 0.02152, 0.02471, 0.02817, 0.0319, 0.03591, 0.04021, 0.04482, 0.04973, 0.05497, 0.06054, 0.06645, 0.0727, 0.07932, 0.0863, 0.09365, 0.1014, 0.1095, 0.118, 0.1269, 0.1363, 0.146, 0.1561, 0.1667, 0.1776, 0.189, 0.2008, 0.213, 0.2256, 0.2385, 0.2519, 0.2657, 0.2798, 0.2944, 0.3092, 0.3245, 0.34, 0.3559, 0.372, 0.3885, 0.4052, 0.4221, 0.4393, 0.4567, 0.4742, 0.4919, 0.5098, 0.5277, 0.5457, 0.5638, 0.5819, 0.6, 0.618, 0.636, 0.6539, 0.6716, 0.6892, 0.7066, 0.7237, 0.7406, 0.7573, 0.7736, 0.7895, 0.8051, 0.8202, 0.835, 0.8492, 0.863, 0.8762, 0.8889, 0.901, 0.9125, 0.9234, 0.9336, 0.9432, 0.9521, 0.9602, 0.9677, 0.9744, 0.9803, 0.9855, 0.9899, 0.9935, 0.9964, 0.9984, 0.9996, 1, 0.9996, 0.9984, 0.9964, 0.9935, 0.9899, 0.9855, 0.9803, 0.9744, 0.9677, 0.9602, 0.9521, 0.9432, 0.9336, 0.9234, 0.9125, 0.901, 0.8889, 0.8762, 0.863, 0.8492, 0.835, 0.8202, 0.8051, 0.7895, 0.7736, 0.7573, 0.7406, 0.7237, 0.7066, 0.6892, 0.6716, 0.6539, 0.636, 0.618, 0.6, 0.5819, 0.5638, 0.5457, 0.5277, 0.5098, 0.4919, 0.4742, 0.4567, 0.4393, 0.4221, 0.4052, 0.3885, 0.372, 0.3559, 0.34, 0.3245, 0.3092, 0.2944, 0.2798, 0.2657, 0.2519, 0.2385, 0.2256, 0.213, 0.2008, 0.189, 0.1776, 0.1667, 0.1561, 0.146, 0.1363, 0.1269, 0.118, 0.1095, 0.1014, 0.09365, 0.0863, 0.07932, 0.0727, 0.06645, 0.06054, 0.05497, 0.04973, 0.04482, 0.04021, 0.03591, 0.0319, 0.02817, 0.02471, 0.02152, 0.01858, 0.01589, 0.01343, 0.0112, 0.009193, 0.007399, 0.005813, 0.004428, 0.003238, 0.00224, 0.001429, 0.000802, 0.0003558, 0.00008886, 0};
00090 float detector[201] = {24.2753, 24.0337, 23.9496, 24.1734, 24.4779, 24.386, 24.1269, 23.8651, 23.7331, 23.9027, 24.1362, 24.4595, 24.896, 25.2451, 25.5632, 25.9206, 26.2048, 26.435, 26.6127, 26.7808, 26.7892, 26.5028, 26.2219, 26.3159, 26.35, 26.2305, 25.9379, 25.5456, 25.1114, 24.905, 24.6969, 24.6696, 24.7514, 24.8057, 24.887, 24.986, 25.1382, 25.3339, 25.6421, 25.9379, 26.1533, 26.452, 26.5874, 26.6296, 26.5705, 26.4265, 26.1619, 25.8946, 25.5192, 25.1472, 24.6605, 24.1827, 24.0057, 23.9402, 23.987, 24.1734, 24.3399, 24.432, 24.5053, 24.5145, 24.4595, 24.4136, 24.3584, 24.3584, 24.4412, 24.5876, 24.7786, 24.986, 25.0846, 25.0936, 24.9411, 24.6787, 24.3584, 24.0804, 23.9214, 23.7992, 23.7236, 23.6573, 23.5718, 23.4189, 23.2361, 23.0714, 22.9054, 22.817, 22.7777, 22.8072, 22.8564, 22.9739, 23.1005, 23.1975, 23.3325, 23.4381, 23.5622, 23.6478, 23.7236, 23.7803, 23.8086, 23.8651, 23.8651, 23.8745, 23.8463, 23.7803, 23.7141, 23.5718, 23.3902, 23.2458, 23.1393, 23.0227, 22.8858, 22.7283, 22.5897, 22.4402, 22.2695, 22.0569, 21.8627, 21.6253, 21.4377, 21.2167, 21.0681, 20.8647, 20.7352, 20.6485, 20.5723, 20.5395, 20.5067, 20.4629, 20.419, 20.3419, 20.2756, 20.209, 20.1423, 20.0306, 19.907, 19.8392, 19.7485, 19.6916, 19.646, 19.6345, 19.6116, 19.6116, 19.6002, 19.6231, 19.6345, 19.6802, 19.7144, 19.7599, 19.8505, 19.8957, 19.9969, 20.0753, 20.1757, 20.2977, 20.4848, 20.6593, 20.8324, 21.0041, 21.1319, 21.2801, 21.4377, 21.6978, 21.6045, 21.5421, 21.5213, 21.5421, 21.5629, 21.6564, 21.7598, 21.8627, 21.9447, 21.9753, 21.9447, 21.8627, 21.7392, 21.5941, 21.4272, 21.2484, 21.1107, 20.897, 20.7352, 20.5395, 20.408, 20.2423, 20.0977, 19.8844, 19.6916, 19.5658, 19.393, 19.3234, 19.2653, 19.3467, 19.3814, 19.4854, 19.6116, 19.7485, 19.8618, 19.9632, 20.0194, 20.0642, 20.0977, 20.12, 20.0753};
00091 float gauss[11] = {0.00876415, 0.02699548, 0.06475879, 0.12098536, 0.17603266, 0.19947114, 0.17603266, 0.12098536, 0.06475879, 0.02699548, 0.00876415};
00092 float sig_interp[401] = {0}, maxValue_concrete = 52, maxValue = 0, testInput[TEST_LENGTH_SAMPLES] = {0}, testOutput[TEST_LENGTH_SAMPLES/2];
00093 float xs = 30/2/(3.5-1)/(fftSize-1)*(201-1);
00094 struct tm date, *tminfo;
00095 time_t seconds, temp_seconds;
00096 
00097 void buttons(void)
00098 {
00099     TFT.FgColor(0xA0A0A0);
00100     TFT.DL(TAG(KEY_START));
00101     TFT.Button(0.77*screen_width, 0.22*screen_heigth, 0.15*screen_width, 0.12*screen_heigth, 28, OPT_FLAT, "Start");
00102     TFT.DL(TAG(KEY_STOP));
00103     TFT.Button(0.77*screen_width, 0.38*screen_heigth, 0.15*screen_width, 0.12*screen_heigth, 28, OPT_FLAT, "Stop");
00104     TFT.DL(TAG(KEY_UP));
00105     TFT.Button(0.81*screen_width, 0.55*screen_heigth, 0.07*screen_width, 0.12*screen_heigth, 28, OPT_FLAT, "^");
00106     TFT.DL(TAG(KEY_DOWN));
00107     TFT.Button(0.81*screen_width, 0.85*screen_heigth, 0.07*screen_width, 0.12*screen_heigth, 28, OPT_FLAT, "v");
00108     TFT.DL(TAG(KEY_LEFT));
00109     TFT.Button(0.72*screen_width, 0.7*screen_heigth, 0.07*screen_width, 0.12*screen_heigth, 28, OPT_FLAT, "<");
00110     TFT.DL(TAG(KEY_RIGHT));
00111     TFT.Button(0.9*screen_width, 0.7*screen_heigth, 0.07*screen_width, 0.12*screen_heigth, 28, OPT_FLAT, ">");
00112     TFT.DL(TAG(KEY_CLOSE));
00113     //TFT.Button(0.9*screen_width, 0.05*screen_heigth, 0.07*screen_width, 0.12*screen_heigth, 28, OPT_FLAT, "X");    
00114     TFT.DL(BITMAP_SOURCE(CLOSE_ICON_ADDR));
00115     TFT.DL(BITMAP_LAYOUT(PALETTED, 16, 16));
00116     TFT.DL(BITMAP_SIZE(BILINEAR, BORDER, BORDER, 32, 32));
00117     TFT.DL(BEGIN(BITMAPS));
00118     TFT.DL(SAVE_CONTEXT());
00119     TFT.LoadIdentity();
00120     TFT.Scale((int)(2*65536), (int)(2*65536));
00121     TFT.SetMatrix();
00122     TFT.DL(VERTEX2F((int)(0.95*screen_width*16), (int)(0.02*screen_heigth*16)));
00123     //TFT.Track(0.71*screen_width, 0.2*screen_heigth, 10, 200, 34);
00124     //TFT.DL(TAG(34));
00125     //TFT.Slider(0.71*screen_width, 0.2*screen_heigth, 10, 200, 0, slider_val, 201);
00126     TFT.DL(END());
00127     TFT.DL(RESTORE_CONTEXT());
00128 }
00129 
00130 void get_charge(void)
00131 {
00132     uint16_t batt_value = floor(3.3*in1.read_u16()/4095);
00133     sprintf(batt, "%d.%d V", batt_value/10, batt_value%10);
00134 }
00135 
00136 char Read_Keys()
00137 {
00138     keyPressed = TFT.Rd8(REG_TOUCH_TAG);
00139     if(keyPressed)
00140         while(TFT.Rd8(REG_TOUCH_TAG));
00141     return keyPressed;
00142 }
00143 
00144 void start_screen()
00145 {
00146     TFT.DL(CMD_DLSTART);
00147     TFT.DL(CLEAR_COLOR_RGB(255, 255, 255));
00148     TFT.DL(CLEAR(1, 1, 1));
00149     TFT.FgColor(0xFFFFFF);
00150     TFT.DL(COLOR_RGB(0, 0, 0));
00151     TFT.Text(0.8*screen_width, 0.02*screen_heigth, 28, 0, batt);
00152     seconds = time(NULL);
00153     temp_seconds = seconds;
00154     //strftime(curr_time, 19, "%Y%m%d%H%M%S\n", localtime(&seconds));
00155     strftime(curr_time, 19, "%I:%M:%S %d.%m.%Y\n", localtime(&seconds));
00156     TFT.Text(0.5*screen_width, 0.3*screen_heigth, 30, OPT_CENTERX, curr_time);
00157     TFT.FgColor(0xA0A0A0);
00158     TFT.DL(COLOR_RGB(255, 255, 255));
00159     TFT.DL(TAG(KEY_SCAN));
00160     TFT.Button(0.2*screen_width, 0.7*screen_heigth, 0.12*screen_width, 0.12*screen_heigth, 28, OPT_FLAT, "Scan");
00161     TFT.DL(TAG(KEY_FILES));
00162     TFT.Button(0.45*screen_width, 0.7*screen_heigth, 0.12*screen_width, 0.12*screen_heigth, 28, OPT_FLAT, "Files");
00163     TFT.DL(TAG(KEY_TIME));
00164     TFT.Button(0.7*screen_width, 0.7*screen_heigth, 0.12*screen_width, 0.12*screen_heigth, 28, OPT_FLAT, "Time");
00165     TFT.DL(DISPLAY());
00166     TFT.Swap();
00167     TFT.Flush_Co_Buffer();
00168     TFT.WaitCmdfifo_empty();    
00169 }
00170 
00171 void time_screen()
00172 {
00173     int16_t cursor_pos, cursor_width;
00174 
00175     TFT.DL(CMD_DLSTART);
00176     TFT.DL(CLEAR_COLOR_RGB(255, 255, 255));
00177     TFT.DL(CLEAR(1, 1, 1));
00178     //TFT.DL(COLOR_RGB(0,0,0));
00179     cursor_width = 0.07*screen_width;
00180     switch(time_position)
00181     {
00182         case 0:
00183         {
00184             cursor_pos = 0.215*screen_width;
00185             break;
00186         }
00187         case 1:
00188         {
00189             cursor_pos = 0.3*screen_width;
00190             break;
00191         }
00192         case 2:
00193         {
00194             cursor_pos = 0.39*screen_width;
00195             break;
00196         }
00197         case 3:
00198         {
00199             cursor_pos = 0.475*screen_width;
00200             break;
00201         }
00202         case 4:
00203         {
00204             cursor_pos = 0.56*screen_width;
00205             break;
00206         }
00207         case 5:
00208         {
00209             cursor_pos = 0.65*screen_width;
00210             cursor_width = 0.145*screen_width;
00211             break;
00212         }
00213     }
00214     TFT.FgColor(0xE0E0E0);
00215     TFT.Button(cursor_pos, 0.32*screen_heigth, cursor_width, 0.09*screen_heigth, 28, OPT_FLAT, "");
00216     TFT.DL(COLOR_RGB(255,255,255));
00217     TFT.FgColor(0xA0A0A0);
00218     TFT.DL(TAG(KEY_UP));
00219     TFT.Button(0.81*screen_width, 0.55*screen_heigth, 0.07*screen_width, 0.12*screen_heigth, 28, OPT_FLAT, "^");
00220     TFT.DL(TAG(KEY_DOWN));
00221     TFT.Button(0.81*screen_width, 0.85*screen_heigth, 0.07*screen_width, 0.12*screen_heigth, 28, OPT_FLAT, "v");
00222     TFT.DL(TAG(KEY_LEFT));
00223     TFT.Button(0.72*screen_width, 0.7*screen_heigth, 0.07*screen_width, 0.12*screen_heigth, 28, OPT_FLAT, "<");
00224     TFT.DL(TAG(KEY_RIGHT));
00225     TFT.Button(0.9*screen_width, 0.7*screen_heigth, 0.07*screen_width, 0.12*screen_heigth, 28, OPT_FLAT, ">");
00226     TFT.DL(TAG(KEY_OK));
00227     TFT.Button(0.81*screen_width, 0.7*screen_heigth, 0.07*screen_width, 0.12*screen_heigth, 28, OPT_FLAT, "OK");
00228 //    TFT.DL(TAG(KEY_CLOSE));
00229 //    TFT.Button(0.9*screen_width, 0.05*screen_heigth, 0.07*screen_width, 0.12*screen_heigth, 28, OPT_FLAT, "X");
00230 //    TFT.DL(TAG(0));
00231     TFT.Text(0.8*screen_width, 0.02*screen_heigth, 28, 0, batt);
00232     strftime(curr_time, 19, "%I:%M:%S %d.%m.%Y\n", localtime(&seconds));
00233     TFT.DL(COLOR_RGB(0,0,0));
00234     TFT.Text(0.5*screen_width, 0.3*screen_heigth, 30, OPT_CENTERX, curr_time);
00235     
00236     TFT.DL(TAG(KEY_CLOSE));
00237     TFT.DL(BITMAP_SOURCE(CLOSE_ICON_ADDR));
00238     TFT.DL(BITMAP_LAYOUT(PALETTED, 16, 16));
00239     TFT.DL(BITMAP_SIZE(BILINEAR, BORDER, BORDER, 32, 32));
00240     TFT.DL(BEGIN(BITMAPS));
00241     TFT.LoadIdentity();
00242     TFT.Scale((int)(2*65536), (int)(2*65536));
00243     TFT.SetMatrix();
00244     TFT.DL(VERTEX2F((int)(0.95*screen_width*16), (int)(0.02*screen_heigth*16)));
00245     TFT.DL(END());
00246     TFT.DL(TAG(0));
00247     TFT.DL(DISPLAY());
00248     TFT.Swap();
00249     TFT.Flush_Co_Buffer();
00250     TFT.WaitCmdfifo_empty();
00251 }
00252 
00253 void eps_dlg()
00254 {
00255     TFT.DL(CMD_DLSTART);
00256     TFT.DL(CLEAR_COLOR_RGB(255,255,255));
00257     TFT.DL(CLEAR(1,1,1));
00258     TFT.FgColor(0xA0A0A0);
00259     TFT.Text(0.8*screen_width, 0.02*screen_heigth, 28, 0, batt);
00260     TFT.DL(TAG(MATERIAL_AIR));
00261     TFT.Button(0.3*screen_width, 0.05*screen_heigth, 0.2*screen_width, 0.1*screen_heigth, 28, OPT_FLAT, "Air");
00262     TFT.DL(TAG(MATERIAL_BRICK));
00263     TFT.Button(0.3*screen_width, 0.25*screen_heigth, 0.2*screen_width, 0.1*screen_heigth, 28, OPT_FLAT, "Brick");
00264     TFT.DL(TAG(MATERIAL_CONCRETE));
00265     TFT.Button(0.3*screen_width, 0.45*screen_heigth, 0.2*screen_width, 0.1*screen_heigth, 28, OPT_FLAT, "Concrete");
00266     TFT.DL(TAG(MATERIAL_GYPSUM));
00267     TFT.Button(0.3*screen_width, 0.65*screen_heigth, 0.2*screen_width, 0.1*screen_heigth, 28, OPT_FLAT, "Gypsum");
00268     TFT.DL(TAG(MATERIAL_OTHER));
00269     TFT.Button(0.3*screen_width, 0.85*screen_heigth, 0.2*screen_width, 0.1*screen_heigth, 28, OPT_FLAT, "Other...");
00270     TFT.DL(TAG(KEY_CLOSE));
00271     TFT.Button(0.9*screen_width, 0.05*screen_heigth, 0.07*screen_width, 0.12*screen_heigth, 28, OPT_FLAT, "X");
00272     TFT.DL(TAG(0));
00273     TFT.DL(DISPLAY());
00274     TFT.Swap();
00275     TFT.Flush_Co_Buffer();
00276     TFT.WaitCmdfifo_empty();    
00277 }
00278 
00279 void other_dlg()
00280 {
00281     TFT.DL(CMD_DLSTART);
00282     TFT.DL(CLEAR_COLOR_RGB(255,255,255));
00283     TFT.DL(CLEAR(1,1,1));
00284     TFT.DL(COLOR_RGB(0,0,0));
00285     //TFT.Romfont(2, 33);
00286     TFT.Text(0.8*screen_width, 0.02*screen_heigth, 28, 0, batt);
00287     TFT.DL(COLOR_RGB(200,200,200));
00288 
00289     sprintf(eps_str, "%d", eps/10);
00290     TFT.Text(border_x-20, 0.4*screen_heigth, 2, 0, "Epsilon = ");
00291     if(eps_position==0)
00292         TFT.DL(COLOR_RGB(0,0,0));
00293     TFT.Text(0.5*screen_width, 0.4*screen_heigth, 2, 0, eps_str);
00294     TFT.DL(COLOR_RGB(200,200,200));
00295     TFT.Text(0.55*screen_width, 0.4*screen_heigth, 2, 0, ".");
00296     sprintf(eps_str, "%d", eps%10);
00297     if(eps_position==1)
00298         TFT.DL(COLOR_RGB(0,0,0));
00299     TFT.Text(0.58*screen_width, 0.4*screen_heigth, 2, 0, eps_str);
00300     free(eps_str);
00301 
00302     TFT.DL(COLOR_RGB(255,255,255));
00303     TFT.FgColor(0xA0A0A0);
00304     TFT.DL(TAG(KEY_UP));
00305     TFT.Button(0.81*screen_width, 0.55*screen_heigth, 0.07*screen_width, 0.12*screen_heigth, 30, 0, "^");
00306     TFT.DL(TAG(KEY_DOWN));
00307     TFT.Button(0.81*screen_width, 0.85*screen_heigth, 0.07*screen_width, 0.12*screen_heigth, 30, 0, "v");
00308     TFT.DL(TAG(KEY_LEFT));
00309     TFT.Button(0.72*screen_width, 0.7*screen_heigth, 0.07*screen_width, 0.12*screen_heigth, 30, 0, "<");
00310     TFT.DL(TAG(KEY_RIGHT));
00311     TFT.Button(0.9*screen_width, 0.7*screen_heigth, 0.07*screen_width, 0.12*screen_heigth, 30, 0, ">");
00312     TFT.DL(TAG(KEY_OK));
00313     TFT.Button(0.81*screen_width, 0.7*screen_heigth, 0.07*screen_width, 0.12*screen_heigth, 28, 0, "OK");
00314     TFT.DL(TAG(KEY_CLOSE));
00315     TFT.Button(0.9*screen_width, 0.05*screen_heigth, 0.07*screen_width, 0.12*screen_heigth, 30, OPT_FLAT, "X");
00316     TFT.DL(TAG(0));
00317     TFT.DL(DISPLAY());
00318     TFT.Swap();
00319     TFT.Flush_Co_Buffer();
00320     TFT.WaitCmdfifo_empty();    
00321 }
00322 
00323 void save_dlg()
00324 {
00325     TFT.DL(CMD_DLSTART);
00326     TFT.DL(CLEAR_COLOR_RGB(255,255,255));
00327     TFT.DL(CLEAR(1,1,1));
00328     TFT.FgColor(0xA0A0A0);
00329     TFT.Text(0.8*screen_width, 0.02*screen_heigth, 28, 0, batt);
00330     TFT.DL(TAG(FILE_SAVE));
00331     TFT.Button(0.2*screen_width, 0.6*screen_heigth, 0.2*screen_width, 0.12*screen_heigth, 28, 0, "Save");
00332     TFT.DL(TAG(FILE_DELETE));
00333     TFT.Button(0.6*screen_width, 0.6*screen_heigth, 0.2*screen_width, 0.12*screen_heigth, 28, 0, "Delete");
00334     TFT.DL(COLOR_RGB(0, 0, 0));
00335     //-->>TFT.Text(0.5*screen_width, 0.3*screen_heigth, 30, OPT_CENTERX, (char *)filename);
00336     TFT.DL(DISPLAY());
00337     TFT.Swap();
00338     TFT.Flush_Co_Buffer();
00339     TFT.WaitCmdfifo_empty();    
00340 }
00341 
00342 void scan_mode_dlg()
00343 {
00344     TFT.DL(CMD_DLSTART);
00345     TFT.DL(CLEAR_COLOR_RGB(255,255,255));
00346     TFT.DL(CLEAR(1,1,1));
00347     TFT.FgColor(0xA0A0A0);
00348     TFT.Text(0.8*screen_width, 0.02*screen_heigth, 28, 0, batt);
00349     TFT.DL(TAG(KEY_ASCAN));
00350     TFT.Button(0.2*screen_width, 0.5*screen_heigth, 0.2*screen_width, 0.12*screen_heigth, 28, OPT_FLAT, "A-SCAN");
00351     TFT.DL(TAG(KEY_BSCAN));
00352     TFT.Button(0.6*screen_width, 0.5*screen_heigth, 0.2*screen_width, 0.12*screen_heigth, 28, OPT_FLAT, "B-SCAN");
00353     TFT.DL(TAG(KEY_CLOSE));
00354     TFT.Button(0.9*screen_width, 0.05*screen_heigth, 0.07*screen_width, 0.12*screen_heigth, 30, OPT_FLAT, "X");
00355     TFT.DL(TAG(0)); 
00356     TFT.DL(DISPLAY());
00357     TFT.Swap();
00358     TFT.Flush_Co_Buffer();
00359     TFT.WaitCmdfifo_empty();    
00360 }
00361 
00362 /*
00363 void disp_encoder(uint8_t count)
00364 {
00365     TFT.DLstart();
00366     TFT.DL(CLEAR_COLOR_RGB(0,0,0));
00367     TFT.DL(CLEAR(1,1,1));
00368     TFT.Text(200, 10, 31, OPT_RIGHTX, "Encoder:");
00369     TFT.Number(270, 10, 31, OPT_RIGHTX, enc.getPosition());
00370     TFT.DL(TAG(2));
00371     TFT.Button(360, 0, 120, 36, 27, 0, "Start");
00372     TFT.DL(TAG(3));
00373     TFT.Button(360, 38, 120, 36, 27, 0, "Exit");
00374     TFT.DL(END());
00375     TFT.DL(DISPLAY());
00376     TFT.Swap();
00377     
00378     uint8_t ReadWord = TFT.Rd8(REG_TOUCH_TAG);
00379     if (ReadWord == KEY_CLOSE)
00380     {
00381         status = STATUS_MAIN;
00382     }
00383 }
00384 
00385 void disp_adc(uint16_t data_adc)
00386 {
00387     TFT.DLstart();
00388     TFT.DL(CLEAR_COLOR_RGB(0,0,0));
00389     TFT.DL(CLEAR(1,1,1));
00390     TFT.Text(220, 200, 31, OPT_RIGHTX, "ADC Value:");
00391     TFT.Number(315, 200, 31, OPT_RIGHTX, (uint32_t)data_adc);
00392     TFT.DL(TAG(2));
00393     TFT.Button(360, 0, 120, 36, 27, 0, "Start");
00394     TFT.DL(TAG(3));
00395     TFT.Button(360, 38, 120, 36, 27, 0, "Exit");
00396     TFT.DL(END());
00397     TFT.DL(DISPLAY());
00398     TFT.Swap();
00399     ReadWord = TFT.Rd8(REG_TOUCH_TAG);
00400     if (ReadWord == KEY_CLOSE)
00401     {
00402         status = STATUS_MAIN;
00403     }
00404 }
00405 
00406 void disp_freq(uint64_t freq)
00407 {
00408     TFT.DLstart();
00409     TFT.DL(CLEAR_COLOR_RGB(0,0,0));
00410     TFT.DL(CLEAR(1,1,1));
00411     TFT.Text(220, 100, 31, OPT_RIGHTX, "Frequency:");
00412     TFT.Number(315, 100, 31, OPT_RIGHTX, (uint32_t)(freq/1000000));
00413     TFT.Text(325, 100, 31, OPT_RIGHTX, ".");
00414     TFT.Number(350, 100, 31, OPT_RIGHTX, (uint32_t)(freq/100000)%10);
00415     TFT.DL(TAG(2));
00416     TFT.Button(360, 0, 120, 36, 27, 0, "Start");
00417     TFT.DL(TAG(3));
00418     TFT.Button(360, 38, 120, 36, 27, 0, "Exit");
00419     TFT.DL(END());
00420     TFT.DL(DISPLAY());
00421     TFT.Swap();
00422     ReadWord = TFT.Rd8(REG_TOUCH_TAG);
00423     if (ReadWord == KEY_CLOSE)
00424     {
00425         status = STATUS_MAIN;
00426     }
00427 }
00428 */
00429 void disp_image(void)
00430 {
00431     uint8_t i = 0, tick = 0;
00432     uint32_t j = 0;
00433 
00434     TFT.DL(CMD_DLSTART);
00435     TFT.DL(CLEAR_COLOR_RGB(255,255,255));
00436     TFT.DL(CLEAR(1,1,1));
00437     buttons();
00438     TFT.DL(COLOR_RGB(0, 0, 0));
00439     TFT.Text(0.8*screen_width, 0.02*screen_heigth, 28, 0, batt);
00440     TFT.DL(BITMAP_LAYOUT(PALETTED, 201, bitmap_height));
00441     TFT.DL(BITMAP_SIZE(BILINEAR, BORDER, BORDER, bitmap_height, 2*201));
00442 
00443     float* dist = (float*)calloc(depth, sizeof(float));
00444     for(i=0; i<depth; i++)
00445     {
00446         dist[i] = i*xs/sqrt((float)(eps/10));
00447     }
00448 
00449     if(dist[depth-1]>0)
00450     {
00451         for(i=0; i<=dist[depth-1]/50; i++)
00452         {
00453             TFT.Number(0.05*screen_width, 2+200*i/(dist[depth-1]/50), 21, OPT_RIGHTX, (uint32_t)(50*i));
00454         }
00455     }
00456     if(dist[depth-1]>25&&dist[depth-1]<=50)
00457     {
00458         for(i=0; i<=dist[depth-1]/20; i++)
00459         {
00460             TFT.Number(0.05*screen_width, 2+200*i/(dist[depth-1]/20), 21, OPT_RIGHTX, (uint32_t)(20*i));
00461         }
00462     }
00463     if(dist[depth-1]>10&&dist[depth-1]<=25)
00464     {
00465         for(i=0; i<=dist[depth-1]/10; i++)
00466         {
00467             TFT.Number(0.05*screen_width, 2+200*i/(dist[depth-1]/10), 21, OPT_RIGHTX, (uint32_t)(10*i));
00468         }
00469     }
00470     if(dist[depth-1]>1&&dist[depth-1]<=10)
00471     {
00472         for(i=0; i<=dist[depth-1]/5; i++)
00473         {
00474             TFT.Number(0.05*screen_width, 2+200*i/(dist[depth-1]/5), 21, OPT_RIGHTX, (uint32_t)(5*i));
00475         }
00476     }
00477     free(dist);
00478 
00479     if(xscale*steps>bitmap_height)
00480     {
00481         TFT.DL(BITMAP_SOURCE(RAM_G+201*((xscale*steps-bitmap_height)/xscale)));
00482         for(j=0; j<12+(steps%5==0); j++)
00483         {
00484             TFT.Number(border_x+xscale*(steps%5)+40*j, 0.88*screen_heigth, 22, OPT_RIGHTX, 5*(floor((float)(steps/5))-j));
00485         }
00486     }
00487     else
00488     {
00489         TFT.DL(BITMAP_SOURCE(RAM_G));
00490         for(j=0; j<=12; j++)
00491         {
00492             TFT.Number(border_x+bitmap_height-5*xscale*j, 0.88*screen_heigth, 22, OPT_RIGHTX, 5*j);
00493         }
00494     }
00495 
00496     char* eps_str = (char*)calloc(8, sizeof(char));
00497     sprintf(eps_str, "e = %d.%d", eps/10, eps%10);
00498     TFT.DL(COLOR_RGB(255, 255, 255));
00499     TFT.DL(TAG(KEY_EPS));
00500     TFT.Button(0.67*screen_width, 0.02*screen_heigth, 0.12*screen_width, 0.07*screen_heigth, 22, OPT_FLAT, eps_str);
00501     free(eps_str);
00502 
00503     TFT.DL(BEGIN(BITMAPS));
00504     TFT.DL(BLEND_FUNC(ONE, ZERO));
00505     TFT.LoadIdentity();
00506     TFT.Rotate(90*65536/360);
00507     TFT.Translate(65536*0, 65536*(-bitmap_height));
00508     TFT.Scale(yscale*201*65536/depth, xscale*65536);
00509     TFT.SetMatrix();
00510 
00511     //Draw Alpha channel
00512     //TFT.DL(COLOR_MASK(0, 0, 0, 1));
00513     //TFT.DL(PALETTE_SOURCE(PALETTE_ADDR+3));
00514     //TFT.DL(VERTEX2II(border_x, border_y, 0, 0));
00515 
00516     //Draw Red channel
00517     //TFT.DL(BLEND_FUNC(DST_ALPHA, ONE_MINUS_DST_ALPHA));
00518     //TFT.DL(COLOR_MASK(1, 0, 0, 0));
00519     //TFT.DL(PALETTE_SOURCE(PALETTE_ADDR+2));
00520     //TFT.DL(VERTEX2II(border_x, 10, 0, 0));
00521 
00522     //Draw Green channel
00523     //TFT.DL(COLOR_MASK(0, 1, 0, 0));
00524     //TFT.DL(PALETTE_SOURCE(PALETTE_ADDR+1));
00525     //TFT.DL(VERTEX2II(border_x, 10, 0, 0));
00526 
00527     //Draw Blue channel
00528     //TFT.DL(COLOR_MASK(0, 0, 1, 0));
00529     //TFT.DL(PALETTE_SOURCE(PALETTE_ADDR));
00530     //TFT.DL(VERTEX2II(border_x, 10, 0, 0));
00531     TFT.DL(END());
00532 
00533     TFT.DL(DISPLAY());
00534     TFT.DL(CMD_SWAP);
00535     //finish();
00536 }
00537 
00538 void line(uint8_t *data_in, int points)//, uint32_t color)
00539 {
00540     uint16_t i;
00541     TFT.DL(BEGIN(LINE_STRIP));
00542     for(i=0; i<points; i++)
00543     {
00544         TFT.DL(VERTEX2II(i+30, 255-(uint32_t)(data_in[i]), 0, 0));
00545     }
00546     TFT.DL(END());
00547 }
00548 
00549 void plot()
00550 {
00551     TFT.DLstart();
00552     TFT.DL(POINT_SIZE(16*2));
00553     TFT.DL(CLEAR_COLOR_RGB(0,0,0));
00554     TFT.DL(CLEAR(1,1,1));
00555     TFT.FgColor(0x404040);
00556     TFT.DL(TAG(3));
00557     TFT.DL(COLOR_RGB(0xFF, 0x00, 0x00));
00558     line(sig, 201);
00559     TFT.DL(COLOR_RGB(0x00, 0x00, 0xFF));
00560     line(temp_value, 401);
00561     TFT.DL(DISPLAY());
00562     TFT.Swap();
00563     ReadWord = TFT.Rd8(REG_TOUCH_TAG);
00564     if(ReadWord == KEY_CLOSE)
00565     {
00566         status = STATUS_MAIN;
00567     }
00568 }
00569 
00570 void sweep()
00571 {
00572     for (uint8_t j=0; j<201; j++)
00573     {
00574         out.write_u16(dac_value[j]);
00575         wait_us(100);
00576         buffer[j] = in0.read_u16();
00577     }
00578     out.write_u16(dac_value[0]);
00579     wait_ms(10);  
00580 }
00581 
00582 void find_peaks(float *testOutput, uint8_t offset)
00583 {
00584     for(uint16_t i=offset+5; i<offset+201-5; i++)
00585     {
00586         if((testOutput[i]>testOutput[i-1])&(testOutput[i]>testOutput[i+1]))
00587         {
00588             for(uint16_t j=0;j<11;j++)
00589                 temp_value[i+j-offset-5] = (testOutput[i+j-5]*gauss[j])/gauss[5];
00590 //                sig[i+j-offset-5] = (testOutput[i+j-5]*gauss[j])/gauss[5];
00591         }
00592     }
00593     sig[0] = 0;
00594 }
00595 
00596 float interp1(float x, uint8_t a[], int n)
00597 {
00598     int j;
00599     if(x<=0) return a[0];
00600     if(x>=n-1) return a[n-1];
00601     j = (int)(x);
00602     return a[j]+(x-j)*(a[j+1]-a[j]);
00603 }
00604 
00605 // linear interpolate array a[] -> array b[]
00606 void interp1array(uint8_t a[], int n, float b[], int m)
00607 {
00608     float step;
00609     step = (float)((n-1)/(m-1));
00610     for(int j=0; j<m; j++)
00611     {
00612         b[j] = interp1(j*step, a, n);
00613     }
00614 }
00615 
00616 void get_data(void)
00617 {
00618     uint8_t i;
00619     sweep();
00620 
00621     for(i=0; i<201; i++)
00622     {
00623         testInput[2*i] = ((float)(buffer[i]-matched_load[i]))*blackman_win[i]/detector[i];
00624     }
00625 
00626     arm_cfft_f32(&arm_cfft_sR_f32_len1024, testInput, ifftFlag, doBitReverse);
00627     arm_cmplx_mag_f32(testInput, testOutput, fftSize);
00628     arm_max_f32(testOutput, fftSize, &maxValue, &testIndex);
00629 
00630     find_peaks(testOutput, offset);
00631 
00632     for(i=0; i<201; i++)
00633     {
00634         if(temp_value[i]>maxValue_concrete)
00635             sig[i] = 255;
00636         else
00637             sig[i] = floor(255*temp_value[i]/maxValue);
00638     }
00639 
00640     interp1array(sig, 201, sig_interp, 401);
00641     //TFT.Wr_STR(addr, sig, 201);
00642 }
00643 
00644 void scroll_image(uint16_t shift, uint16_t depth)
00645 {
00646     uint8_t i = 0, j = 0, tick = 0;
00647 
00648     TFT.DLstart();
00649     //TFT.Clear(1, 1, 1);
00650     //TFT.DL(COLOR_RGB(255, 255, 255));
00651 
00652     TFT.Append(220000, dloffset1);
00653 
00654     while(depth/(tick+1)>8)
00655     {
00656         tick++;
00657     }
00658 
00659     for(i=0; i<=depth/tick; i++)
00660     {
00661         TFT.Number(22, 2+200*tick*i/depth, 16, OPT_RIGHTX, tick*i);
00662     }
00663 
00664     TFT.DL(BITMAP_SOURCE(RAM_G+201*(shift-320)));
00665 
00666     if(shift<=320)
00667     {
00668         for(j = 0; j < 7; j++)
00669         {
00670             TFT.Number(border_x+320-50*j, 215, 16, OPT_RIGHTX, 50*j);
00671         }
00672     }
00673     else
00674     {
00675         for(j = 1; j < 7+((shift-20)%50==0); j++)
00676         {
00677             TFT.Number(border_x+320-50*j+(shift-320)%50, 215, 16, OPT_RIGHTX, 50*(j+(shift-320)/50));
00678         }
00679     }
00680 
00681     TFT.Number(425, 130, 16, 0, steps);
00682     TFT.Number(425, 145, 16, 0, depth);
00683     TFT.DL(BITMAP_LAYOUT(PALETTED, 201, bitmap_height));
00684     TFT.DL(BITMAP_SIZE(BILINEAR, BORDER, BORDER, bitmap_height, 201));
00685     TFT.DL(BEGIN(BITMAPS));
00686     TFT.LoadIdentity();
00687     TFT.Rotate(90*65536/360);
00688     TFT.Translate(65536*0, 65536*-bitmap_height);
00689     TFT.Scale(201*65536/depth, 65536);
00690     TFT.SetMatrix();
00691     TFT.DL(VERTEX2II(border_x, 10, 0, 0));
00692     TFT.DL(END());
00693     TFT.DL(DISPLAY());
00694     TFT.Swap();
00695     TFT.Flush_Co_Buffer();
00696     TFT.WaitCmdfifo_empty();    
00697 }
00698 
00699 void sound(uint8_t effect)
00700 {
00701     TFT.Wr8(REG_VOL_SOUND, 0xFF);
00702     TFT.Wr16(REG_SOUND, effect);
00703     TFT.Wr8(REG_PLAY, 1);
00704     while(TFT.Rd8(REG_PLAY));
00705     TFT.Wr16(REG_SOUND, 0);
00706     TFT.Wr8(REG_PLAY, 1);
00707 }
00708 
00709 void update_gui(void)
00710 {
00711     //uint8_t i = 0, tagval;
00712     //uint16_t n = 0;
00713     //uint32_t tracker = TFT.Rd32(REG_TRACKER);
00714 /*
00715     switch(tracker & 0xff)
00716     {
00717         case TRACK_DEPTH:
00718         {
00719             depth = 201-(tracker>>25);
00720             break;
00721         }
00722         case TRACK_DISTANCE:
00723         {
00724             scroll_distance_val = tracker>>23;
00725             break;
00726         }
00727         case TRACK_SLIDER:
00728         {
00729             slider_val = tracker>>16;
00730             break;
00731         }
00732         default:
00733             break;
00734     }
00735 */
00736     get_charge();
00737     switch (status)
00738     {
00739         case STATUS_MAIN:
00740         {
00741             start_screen();
00742             switch(Read_Keys())
00743             {
00744                 case KEY_SCAN:
00745                 {
00746                     sound(CLICK);
00747                     status = STATUS_BSCAN;
00748                     break;
00749                     /*scan_mode_dlg();
00750                     keyPressed = 0;
00751                     while(!keyPressed)
00752                     {
00753                         keyPressed = TFT.Rd8(REG_TOUCH_TAG);
00754                     }
00755                     if(keyPressed == KEY_BSCAN)
00756                     {
00757                         sound(CLICK);
00758                         TFT.MemZero(RAM_G, 201000);
00759                         disp_image();
00760                         status = STATUS_BSCAN;
00761                         break;
00762                     }
00763                     else
00764                     {
00765                         sound(CLICK);
00766                         addr = 0;
00767                         status = STATUS_ASCAN;
00768                         break;
00769                     }*/
00770                 }
00771                 //case KEY_FILES:
00772                 {
00773                     /*sound(CLICK);
00774                     fm_curPath = "/";
00775                     res = f_chdir(fm_curPath);
00776                     res = scan_folders(fm_curPath);
00777                     status = STATUS_FILES;
00778                     break;*/
00779                 }
00780                 case KEY_TIME:
00781                 {
00782                     sound(CLICK);
00783                     time_position = 0;
00784                     status = STATUS_TIME;
00785                     break;
00786                 }
00787             }
00788             break;
00789         }
00790         case STATUS_ASCAN:
00791         {
00792             switch(Read_Keys())
00793             {
00794                 case KEY_START:
00795                 {
00796                     sound(CLICK);
00797                     /*addr+=201;
00798                     get_data();
00799                     n = 0;
00800 
00801                     uint8_t* buff = (uint8_t*) malloc(1004);
00802                     for(i=0; i<201; i++)
00803                     {
00804                         n += sprintf(&buff[n], "%4u ", buffer[i]);
00805                     }
00806 
00807                     res = f_write(&fil_obj, buff, n-1, &len);
00808                     res = f_write(&fil_obj, "\n", 1, &len);
00809                     free(buff);*/
00810                     break;
00811                 }
00812                 case KEY_STOP:
00813                 {
00814                     sound(CLICK);
00815                     /*addr = 0;
00816                     res = f_close(&fil_obj);
00817                     save_dlg();
00818                     ReadWord = 0;
00819                     while(!keyPressed)
00820                     {
00821                         keyPressed = TFT.Rd8(REG_TOUCH_TAG);
00822                     }
00823                     if(ReadWord == FILE_DELETE)
00824                     {
00825                         res = f_unlink(filename);
00826                     }
00827                     else
00828                     {
00829                         sprintf(filename, "A20%02d%02d%02d_%02d%02d%02d.asn", date.tm_year, date.tm_mon, date.tm_mday, date.tm_hour, date.tm_min, date.tm_sec);
00830                         res = f_open(&fil_obj, filename, FA_CREATE_ALWAYS|FA_WRITE);
00831                         for(addr=0; addr<201*steps; addr+=201)
00832                         {
00833                             HOST_MEM_READ_STR(addr, sig, 201);
00834                             f_write(&fil_obj, &sig, 201, &len);
00835                         }
00836                         f_close(&fil_obj);
00837                     }*/
00838                     status = STATUS_ASCAN;
00839                     break;
00840                 }
00841                 case KEY_CLOSE:
00842                 {
00843                     sound(CLICK);
00844                     //res = f_close(&fil_obj);
00845                     //res = f_unlink(filename);
00846                     status = STATUS_MAIN;
00847                     break;
00848                 }
00849                 default:
00850                 {
00851                     keyPressed = TFT.Rd8(REG_TOUCH_TAG);
00852                     if(keyPressed == KEY_CLOSE)
00853                     {
00854                         status = STATUS_MAIN;
00855                     }
00856                     if(keyPressed == KEY_RIGHT)
00857                     {
00858                         sound(CLICK);
00859                         inx-=3;
00860                         if(inx<12) inx = 12;
00861                     }
00862                     if(keyPressed == KEY_LEFT)
00863                     {
00864                         sound(CLICK);
00865                         inx+=3;
00866                         if(inx>201) inx = 201;
00867                     }
00868                     if(keyPressed == KEY_UP)
00869                     {
00870                     }
00871                      if(keyPressed == KEY_DOWN)
00872                     {
00873                     }
00874                     get_data();
00875                     plot();
00876                     break;
00877                 }
00878             }
00879             break;
00880         }
00881         case STATUS_BSCAN:
00882         {
00883             //steps = 1000-(scroll_distance_val);
00884             disp_image();
00885             switch(Read_Keys())
00886             {
00887                 case KEY_START:
00888                 {
00889                     sound(CLICK);
00890                     addr = 0;
00891                     steps = 0;
00892                     TFT.MemZero(RAM_G, 201000);
00893                     disp_image();
00894                     //res = f_chdir("/..");
00895                     time_t t1 = time(NULL);
00896                     //sprintf(dirname, "20%02d%02d%02d", date.tm_year, date.tm_mon, date.tm_mday);
00897                     //res = f_mkdir(dirname); // Create new directory
00898                     //sprintf(filename, "A20%02d%02d%02d_%02d%02d%02d.txt", date.tm_year, date.tm_mon, date.tm_mday, date.tm_hour, date.tm_min, date.tm_sec);
00899                     //res = f_chdir(dirname); // Change current directory
00900                     //res = f_open(&fil_obj, filename, FA_CREATE_ALWAYS|FA_WRITE);    // Create new file
00901                     status = STATUS_START;
00902                     break;
00903                 }
00904                 case KEY_STOP:
00905                 {
00906                     sound(CLICK);
00907                     step_done = 0;
00908                     disp_image();
00909                     status = STATUS_BSCAN;
00910                     break;
00911                 }
00912                 case KEY_LEFT:
00913                 {
00914                     if((xscale*steps<=920)&&(steps>0))
00915                     {
00916                         sound(CLICK);
00917                         steps+=10;
00918                         disp_image();
00919                     }
00920                     break;
00921                 }
00922                 case KEY_RIGHT:
00923                 {
00924                     if((steps<=1000)&&(xscale*steps>bitmap_height))
00925                     {
00926                         sound(CLICK);
00927                         steps-=10;
00928                         disp_image();
00929                     }
00930                     break;
00931                 }
00932                 case KEY_DOWN:
00933                 {
00934                     if(depth>11)
00935                     {
00936                         sound(CLICK);
00937                         depth-=10;
00938                         disp_image();
00939                     }
00940                     break;
00941                 }
00942                 case KEY_UP:
00943                 {
00944                     if(depth<201)
00945                     {
00946                         sound(CLICK);
00947                         depth+=10;
00948                         disp_image();
00949                     }
00950                     break;
00951                 }
00952                 case KEY_EPS:
00953                 {
00954                     sound(CLICK);
00955                     status = STATUS_EPS;
00956                     break;
00957                 }
00958                 case KEY_CLOSE:
00959                 {
00960                     sound(CLICK);
00961                     step_done = 0;
00962                     steps = 0;
00963                     status = STATUS_MAIN;
00964                     break;
00965                 }
00966             }
00967             break;
00968         }
00969         //case STATUS_FILES:
00970         {
00971             /*
00972             switch(Read_Keys())
00973             {
00974                 case 0:
00975                 {
00976                     break;
00977                 }
00978                 case KEY_CLOSE:
00979                 {
00980                     sound(CLICK);
00981                     status = STATUS_MAIN;
00982                     scrollval = 0;
00983                     break;
00984                 }
00985                 case ROOT_DIR:
00986                 {
00987                     sound(CLICK);
00988                     fm_curPath = "/";
00989                     res = f_chdir(fm_curPath);
00990                     scrollval = curr_item;
00991                     res = scan_folders("");
00992                     break;
00993                 }
00994                 case KEY_DOWN:
00995                 {
00996                     sound(CLICK);
00997                     scrollval+=scrollsize;
00998                     if(scrollval>scrollrange-scrollsize)
00999                     {
01000                         scrollval = scrollrange-scrollsize;
01001                     }
01002                     if(strcmp(fm_curPath, "/") == 0)
01003                     {
01004                         res = scan_folders(fm_curPath);
01005                     }
01006                     else
01007                     {
01008                         res = scan_files(fm_curPath);
01009                     }
01010                     break;
01011                 }
01012                 case KEY_UP:
01013                 {
01014                     sound(CLICK);
01015                     scrollval-=scrollsize;
01016                     if(scrollval>scrollrange)
01017                     {
01018                         scrollval = 0;
01019                     }
01020                     if(strcmp(fm_curPath, "/") == 0)
01021                     {
01022                         res = scan_folders("/");
01023                     }
01024                     else
01025                     {
01026                         res = scan_files(fm_curPath);
01027                     }
01028                     break;
01029                 }
01030                 default:
01031                 {
01032                     sound(CLICK);
01033                     if(strcmp(fm_curPath, "/") == 0)
01034                     {
01035                         res = f_opendir(&dir, "/");
01036                         for(i=0; i<ReadWord+scrollval; i++)
01037                         {
01038                             res = f_readdir(&dir, &fno);
01039                         }
01040                         f_closedir(&dir);
01041 
01042                         sprintf(dirname, "%s", fno.fname);
01043                         fm_curPath = dirname;
01044                         curr_item = scrollval;
01045                         scrollval = 0;
01046                         res = scan_files(dirname);
01047                     }
01048                     else
01049                     {
01050                         res = f_opendir(&dir, fm_curPath);
01051                         for(i=scrollval; i<scrollval+ReadWord; i++)
01052                         {
01053                             res = f_readdir(&dir, &fno);
01054                         }
01055                          if(strstr(fno.fname, ".asn"))
01056                         {
01057                             printf("%s\n", fno.fname);
01058                             steps = data_import(fno.fname);
01059                             res = f_closedir(&dir);
01060                             plot();
01061                         }
01062                         if(strstr(fno.fname, ".bsn"))
01063                         {
01064                             printf("%s\n", fno.fname);
01065                             TFT.MemZero(RAM_G, 201000);
01066                             steps = data_import(fno.fname);
01067                             res = f_closedir(&dir);
01068                             disp_image();
01069                         }
01070                     }
01071                     break;
01072                 }
01073                 break;
01074             }
01075             break;*/
01076         }
01077         case STATUS_START:
01078         {
01079             disp_image();
01080             if(step_done)
01081             {
01082                 addr+=201;
01083                 steps++;
01084                 if((steps<=1000)&&(xscale*steps>bitmap_height))
01085                 {
01086                     scroll_distance_size--;
01087                 }
01088                 step_done = 0;
01089                 get_data();
01090                 disp_image();
01091             }
01092             if(addr>201000)
01093             {
01094                 sound(CLICK);
01095                 step_done = 0;
01096                 //mean_remove();
01097                 disp_image();
01098                 status = STATUS_BSCAN;
01099             }
01100             switch(Read_Keys())
01101             {
01102                 case KEY_DOWN:
01103                 {
01104                     if(depth>11)
01105                     {
01106                         sound(CLICK);
01107                         depth-=10;
01108                         disp_image();
01109                     }
01110                     break;
01111                 }
01112                 case KEY_UP:
01113                 {
01114                     if(depth<201)
01115                     {
01116                         sound(CLICK);
01117                         depth+=10;
01118                         disp_image();
01119                     }
01120                     break;
01121                 }
01122                 case KEY_STOP:
01123                 {
01124                     sound(CLICK);
01125                     step_done = 0;
01126                     ReadWord = 0;
01127                     save_dlg();
01128                     while(!keyPressed)
01129                     {
01130                         keyPressed = TFT.Rd8(REG_TOUCH_TAG);
01131                     }
01132                     if(keyPressed == FILE_DELETE)
01133                     {
01134                         sound(CLICK);
01135                         //res = f_unlink(filename);
01136                     }
01137                     else
01138                     {
01139                         sound(CLICK);
01140                         //res = f_close(&fil_obj);
01141                         //sprintf(filename, "A20%02d%02d%02d_%02d%02d%02d.bsn", date.tm_year, date.tm_mon, date.tm_mday, date.tm_hour, date.tm_min, date.tm_sec);
01142                         //res = f_open(&fil_obj, filename, FA_CREATE_ALWAYS|FA_WRITE);
01143                         //for(addr=0; addr<201*steps; addr+=201)
01144                         {
01145                             //HOST_MEM_READ_STR(addr, sig, 201);
01146                             //f_write(&fil_obj, &sig, 201, &len);
01147                         }
01148                         //f_close(&fil_obj);
01149                     }
01150                     addr = 0;
01151                     steps = 0;
01152                     //TFT.MemZero(RAM_G, 201000);
01153                     //mean_remove();
01154                     disp_image();
01155                     status = STATUS_BSCAN;
01156                     break;
01157                 }
01158             }
01159             break;
01160         }
01161         case STATUS_EPS:
01162         {
01163             eps_dlg();
01164             switch(Read_Keys())
01165             {
01166                 case MATERIAL_AIR:
01167                 {
01168                     sound(CLICK);
01169                     eps = MATERIAL_AIR;
01170                     status = STATUS_BSCAN;
01171                     break;
01172                 }
01173                 case MATERIAL_BRICK:
01174                 {
01175                     sound(CLICK);
01176                     eps = MATERIAL_BRICK;
01177                     status = STATUS_BSCAN;
01178                     break;
01179                 }
01180                 case MATERIAL_CONCRETE:
01181                 {
01182                     sound(CLICK);
01183                     eps = MATERIAL_CONCRETE;
01184                     status = STATUS_BSCAN;
01185                     break;
01186                 }
01187                 case MATERIAL_GYPSUM:
01188                 {
01189                     sound(CLICK);
01190                     eps = MATERIAL_GYPSUM;
01191                     status = STATUS_BSCAN;
01192                     break;
01193                 }
01194                 case MATERIAL_OTHER:
01195                 {
01196                     eps_temp = eps;
01197                     sound(CLICK);
01198                     status = STATUS_OTHER;
01199                     break;
01200                 }
01201                 case KEY_CLOSE:
01202                 {
01203                     sound(CLICK);
01204                     status = STATUS_BSCAN;
01205                     break;
01206                 }
01207             }
01208             break;
01209         }
01210         case STATUS_OTHER:
01211         {
01212             other_dlg();
01213             switch(Read_Keys())
01214             {
01215                 case KEY_LEFT:
01216                 {
01217                     if(eps_position==1)
01218                         sound(CLICK);
01219                         eps_position = 0;
01220                     break;
01221                 }
01222                 case KEY_RIGHT:
01223                 {
01224                     if(eps_position==0)
01225                         sound(CLICK);
01226                         eps_position = 1;
01227                     break;
01228                 }
01229                 case KEY_UP:
01230                 {
01231                     switch(eps_position)
01232                     {
01233                         case 0:
01234                         {
01235                             if(eps<90)
01236                             {
01237                                 sound(CLICK);
01238                                 eps+=10;
01239                             }
01240                             break;
01241                         }
01242                         case 1:
01243                         {
01244                             if(eps<99)
01245                             {
01246                                 sound(CLICK);
01247                                 eps++;
01248                             }
01249                             break;
01250                         }
01251                     }
01252                     break;
01253                 }
01254                 case KEY_DOWN:
01255                 {
01256                     switch(eps_position)
01257                     {
01258                         case 0:
01259                         {
01260                             if(eps>10)
01261                             {
01262                                 sound(CLICK);
01263                                 eps-=10;
01264                             }
01265                             break;
01266                         }
01267                         case 1:
01268                         {
01269                             if(eps>10)
01270                             {
01271                                 sound(CLICK);
01272                                 eps--;
01273                             }
01274                             break;
01275                         }
01276                     }
01277                     break;
01278                 }
01279                 case KEY_OK:
01280                 {
01281                     sound(CLICK);
01282                     status = STATUS_BSCAN;
01283                     break;
01284                 }
01285                 case KEY_CLOSE:
01286                 {
01287                     eps = eps_temp;
01288                     sound(CLICK);
01289                     status = STATUS_BSCAN;
01290                     break;
01291                 }
01292             }
01293             break;
01294         }
01295         case STATUS_TIME:
01296         {
01297             time_screen();
01298             //tminfo = localtime(&seconds);
01299             switch(Read_Keys())
01300             {
01301                 case KEY_LEFT:
01302                 {
01303                     sound(CLICK);
01304                     time_position--;
01305                     if(time_position>5)
01306                         time_position = 0;
01307                     break;
01308                 }
01309                 case KEY_RIGHT:
01310                 {
01311                     sound(CLICK);
01312                     time_position++;
01313                     if(time_position>5)
01314                         time_position = 5;
01315                     break;
01316                 }
01317                 case KEY_UP:
01318                 {
01319                     switch(time_position)
01320                     {
01321                         case 0:
01322                         {
01323                             sound(CLICK);
01324                             temp_seconds+=3600;
01325                             //date.tm_hour++;
01326                             //if(date.tm_hour==24)
01327                                 //date.tm_hour = 0;
01328                             break;
01329                         }
01330                         case 1:
01331                         {
01332                             sound(CLICK);
01333                             temp_seconds+=60;
01334                             //date.tm_min++;
01335                             //if(date.tm_min==60)
01336                                 //date.tm_min = 0;
01337                             break;
01338                         }
01339                         case 2:
01340                         {
01341                             sound(CLICK);
01342                             temp_seconds++;
01343                             //date.tm_sec++;
01344                             //if(date.tm_sec==60)
01345                                 //date.tm_sec = 0;
01346                             break;
01347                         }
01348                         case 3:
01349                         {
01350                             sound(CLICK);
01351                             date.tm_mday++;
01352                             if(date.tm_mday==32)
01353                                 date.tm_mday = 1;
01354                             break;
01355                         }
01356                         case 4:
01357                         {
01358                             sound(CLICK);
01359                             date.tm_mon++;
01360                             if(date.tm_mon==13)
01361                                 date.tm_mon = 1;
01362                             break;
01363                         }
01364                         case 5:
01365                         {
01366                             sound(CLICK);
01367                             date.tm_year++;
01368                             if(date.tm_year==100)
01369                                 date.tm_year = 0;
01370                             break;
01371                         }
01372                     }
01373                     break;
01374                 }
01375                 case KEY_DOWN:
01376                 {
01377                     switch(time_position)
01378                     {
01379                         case 0:
01380                         {
01381                             sound(CLICK);
01382                             if(date.tm_hour==0)
01383                                 date.tm_hour = 23;
01384                             else date.tm_hour--;
01385                             break;
01386                         }
01387                         case 1:
01388                         {
01389                             sound(CLICK);
01390                             if(date.tm_min==0)
01391                                 date.tm_min = 59;
01392                             else date.tm_min--;
01393                             break;
01394                         }
01395                         case 2:
01396                         {
01397                             sound(CLICK);
01398                             if(date.tm_sec==0)
01399                                 date.tm_sec = 59;
01400                             else date.tm_sec--;
01401                             break;
01402                         }
01403                         case 3:
01404                         {
01405                             sound(CLICK);
01406                             if(date.tm_mday==1)
01407                                 date.tm_mday = 1;
01408                             else date.tm_mday--;
01409                             break;
01410                         }
01411                         case 4:
01412                         {
01413                             sound(CLICK);
01414                             if(date.tm_mon==1)
01415                                 date.tm_mon = 1;
01416                             else date.tm_mon--;
01417                             break;
01418                         }
01419                         case 5:
01420                         {
01421                             sound(CLICK);
01422                             if(date.tm_year==0)
01423                                 date.tm_year = 0;
01424                             else date.tm_year--;
01425                             break;
01426                         }
01427                     }
01428                     break;
01429                 }
01430                 case KEY_OK:
01431                 {
01432                     sound(CLICK);
01433                     seconds = mktime(&date);
01434                     set_time(seconds);
01435                     status = STATUS_MAIN;
01436                     break;
01437                 }
01438                 case KEY_CLOSE:
01439                 {
01440                     sound(CLICK);
01441                     status = STATUS_MAIN;
01442                     break;
01443                 }
01444             }
01445         }
01446     }
01447 }
01448 
01449 int main()
01450 {
01451     seconds = time(NULL);
01452     temp_seconds = seconds;
01453     TFT.WrMemFromFlash(REG_TOUCH_TRANSFORM_A, data, 24);
01454     TFT.WrMemFromFlash(CLOSE_ICON_ADDR, close_icon, 256);
01455     TFT.WrMemFromFlash(DIR_ICON_ADDR, dir_icon, 256);
01456     TFT.WrMemFromFlash(FILE_ICON_ADDR, file_icon, 256);
01457     TFT.WrMemFromFlash(PALETTE_ADDR, palette, 1024);
01458     date.tm_year = 118;
01459     date.tm_mon = 11;
01460     date.tm_mday = 6;
01461     date.tm_hour = 14;
01462     date.tm_min = 40;
01463     date.tm_sec = 0;
01464 
01465     time_t seconds = mktime(&date);
01466     set_time(seconds);
01467 
01468     //TFT.Calibrate();
01469     //sweep();
01470     status = STATUS_MAIN;
01471     step_done = 0;
01472 
01473     while(1)
01474     {
01475         update_gui();
01476     }
01477 }