33333f0954c9b1a097785360f9acd1a3a8b746e3
Stefan Schuermans iplemented 1st part of BBM...

Stefan Schuermans authored 12 years ago

1) /* flaneth - flash and ethernet
2)    Copyright (C) 2007-2012 Stefan Schuermans <stefan@schuermans.info>
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)