iplemented 1st part of BBM...
Stefan Schuermans authored 12 years ago
|
3) Copyleft: GNU public license V2 - http://www.gnu.org/copyleft/gpl.html
4) a BlinkenArea project - http://www.blinkenarea.org/ */
5)
6) #include <stdio.h>
7) #include <string.h>
8)
9) #include "apps_tools.h"
10) #include "debug.h"
11) #include "dosfs.h"
12)
13) /**
14) * @brief read string from file
15) * @param[in] sectorBuf scratch buffer to store a sector
16) * @param[in] vi volume information structure
17) * @param[in] filename name of file to read
18) * @param[out] buf buffer to put string to
19) * @param[in] sz size of buffer
20) * @return 0 on success, -1 on error
21) */
22) char AppsToolsReadStr(uint8_t sectorBuf[SECTOR_SIZE], VOLINFO *vi,
23) const char *filename, char *buf, unsigned int sz) // (extern)
24) {
25) FILEINFO fi;
26) uint32_t len;
27)
28) // open file
29) if (DFS_OpenFile(vi, (uint8_t *)filename, DFS_READ,
30) sectorBuf, &fi) != DFS_OK) {
31) debug_app_cfg_printf("cannot open file %s", filename);
32) return -1;
33) }
34)
35) // read string from file
36) if (DFS_ReadFile(&fi, sectorBuf, (uint8_t *)buf, &len, sz - 1) != DFS_OK)
37) len = 0;
38) if (len > sz - 1)
39) len = sz - 1;
40) buf[len] = 0; // terminate string
41) debug_apps_tools_printf("string read from file %s: %s", filename, buf);
42) return 0;
43) }
44)
45) /**
46) * @brief read MAC address from file
47) * @param[in] sectorBuf scratch buffer to store a sector
48) * @param[in] vi volume information structure
49) * @param[in] filename name of file to read
50) * @param[out] mac MAC address read
51) * @return 0 on success, -1 on error
52) */
53) char AppsToolsReadMac(uint8_t sectorBuf[SECTOR_SIZE], VOLINFO *vi,
54) const char *filename, unsigned char mac[6]) // (extern)
55) {
56) char bufStr[18];
57) unsigned char bufMac[6];
58)
59) // get string from file
60) if (AppsToolsReadStr(sectorBuf, vi, filename, bufStr, sizeof(bufStr)) != 0)
61) return -1;
62)
63) // parse string
64) if (sscanf(bufStr, "%hhX:%hhX:%hhX:%hhX:%hhX:%hhX",
65) &bufMac[0], &bufMac[1], &bufMac[2],
66) &bufMac[3], &bufMac[4], &bufMac[5]) != 6) {
67) debug_apps_tools_printf("MAC parse error");
68) return -1;
69) }
70)
71) // copy MAC to output
72) debug_apps_tools_printf("MAC read: %02hhX:%02hhX:%02hhX:%02hhX:%02hhX:%02hhX",
73) bufMac[0], bufMac[1], bufMac[2],
74) bufMac[3], bufMac[4], bufMac[5]);
75) memcpy(mac, bufMac, 6);
76) return 0;
77) }
78)
79) /**
80) * @brief read IP address from file
81) * @param[in] sectorBuf scratch buffer to store a sector
82) * @param[in] vi volume information structure
83) * @param[in] filename name of file to read
84) * @param[out] ip IP address read
85) * @return 0 on success, -1 on error
86) */
87) char AppsToolsReadIp(uint8_t sectorBuf[SECTOR_SIZE], VOLINFO *vi,
88) const char *filename, unsigned char ip[4]) // (extern)
89) {
90) char bufStr[16];
91) unsigned char bufIp[4];
92)
93) // get string from file
94) if (AppsToolsReadStr(sectorBuf, vi, filename, bufStr, sizeof(bufStr)) != 0)
95) return -1;
96)
97) // parse string
98) if (sscanf(bufStr, "%hhu.%hhu.%hhu.%hhu",
99) &bufIp[0], &bufIp[1], &bufIp[2], &bufIp[3]) != 4) {
100) debug_apps_tools_printf("IP parse error");
101) return -1;
102) }
103)
104) // copy IP to output
105) debug_apps_tools_printf("IP read: %hhu.%hhu.%hhu.%hhu",
106) bufIp[0], bufIp[1], bufIp[2], bufIp[3]);
107) memcpy(ip, bufIp, 4);
108) return 0;
109) }
110)
|