embkernel
 All Classes Functions Variables Typedefs Groups Pages
ExternFunctions.cpp
1 //------------------------------------------------------------------------------
2 //This file is part of embKernel.
3 //See license.txt for the full license governing this code.
4 //------------------------------------------------------------------------------
5 
6 #include "Net.hpp"
7 #include "Rtos.hpp"
8 #include "DrvFlash.hpp"
9 #include <string.h>
10 
11 typedef struct {
12  NetDefs::MAC_ADDR macAddr;
13  NetDefs::NET_CONFIG netConfig;
14  uint32_t validityCheck;
15 } FLASH_SLOT;
16 
17 const static FLASH_SLOT* flashSlot = (FLASH_SLOT*) 0x080E0000;
18 const static uint32_t VALIDITY_CHECK_VALUE = 0x16AD06FD;
19 
20 void storeSlotToFlash(FLASH_SLOT& slot) {
21  DrvFlash::unlock();
22  DrvFlash::erasePage(11);
23  DrvFlash::write(flashSlot, &slot, sizeof(slot));
24  DrvFlash::lock();
25 }
26 
27 void storeDefaultConfigToFlash() {
28  FLASH_SLOT slot;
29  slot.macAddr.v[0] = 0x00;
30  slot.macAddr.v[1] = 0x1f;
31  slot.macAddr.v[2] = 0xd0;
32  slot.macAddr.v[3] = 0x3e;
33  slot.macAddr.v[4] = 0xaa;
34  slot.macAddr.v[5] = 0x95;
35  memset(slot.netConfig.deviceName, 0, sizeof(slot.netConfig.deviceName));
36  strcpy(slot.netConfig.deviceName, "EMB");
37  slot.netConfig.ipAddr.val = (0) + (0 << 8) + (0 << 16) + (0 << 24);
38  slot.netConfig.mask.val = (0) + (0 << 8) + (0 << 16) + (0 << 24);
39  slot.netConfig.gatewayIpAddr.val = (0) + (0 << 8) + (0 << 16) + (0 << 24);
40  slot.netConfig.dnsIpAddr.val = (0) + (0 << 8) + (0 << 16) + (0 << 24);
41  slot.netConfig.dhcpEnabled = true;
42  slot.validityCheck = VALIDITY_CHECK_VALUE;
43  storeSlotToFlash(slot);
44 }
45 
46 void Net::loadMac(NetDefs::MAC_ADDR& macAddr) {
47  if (flashSlot->validityCheck != VALIDITY_CHECK_VALUE) {
48  storeDefaultConfigToFlash();
49  }
50  macAddr = flashSlot->macAddr;
51 }
52 
53 void Net::storeMac(NetDefs::MAC_ADDR& macAddr) {
54  FLASH_SLOT slot;
55  slot.macAddr = macAddr;
56  slot.netConfig = Net::sConfig;
57  slot.validityCheck = VALIDITY_CHECK_VALUE;
58  storeSlotToFlash(slot);
59 }
60 
61 void Net::loadConfig(NetDefs::NET_CONFIG& config) {
62  if (flashSlot->validityCheck != VALIDITY_CHECK_VALUE) {
63  storeDefaultConfigToFlash();
64 
65  }
66  config = flashSlot->netConfig;
67 }
68 
69 void Net::storeConfig(NetDefs::NET_CONFIG& config) {
70  FLASH_SLOT slot;
71  slot.macAddr = Net::sMacAddr;
72  slot.netConfig = config;
73  slot.validityCheck = VALIDITY_CHECK_VALUE;
74  storeSlotToFlash(slot);
75 }
76 
77 #include "LibRtc.hpp"
78 
79 void LibRtc::getCurrentDateAndTime(DATE_AND_TIME* dateAndTime) {
80  dateAndTime->date.dayOfMonth = 18;
81  dateAndTime->date.month = AUGUST;
82  dateAndTime->date.year = 2000;
83  updateDayOfWeek(&dateAndTime->date);
84  updateDayOfYear(&dateAndTime->date);
85 
86  dateAndTime->time.ms = 0;
87  dateAndTime->time.sec = 0;
88  dateAndTime->time.min = 0;
89  dateAndTime->time.hour = 12;
90 }
91 
92 void LibRtc::setCurrentDateAndTime(DATE_AND_TIME* dateAndTime) {
93 //TODO
94 }