mbed Weather Platform firmware http://mbed.org/users/okini3939/notebook/mbed-weather-platform-firmware/

Dependencies:   EthernetNetIf SDHCFileSystem I2CLEDDisp Agentbed NTPClient_NetServices mbed BMP085 HTTPClient ConfigFile I2CLCD

Committer:
okini3939
Date:
Wed Jan 12 11:18:44 2011 +0000
Revision:
5:9fa79cb5ec98
Child:
7:0d3484dc13a9

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okini3939 5:9fa79cb5ec98 1 /**
okini3939 5:9fa79cb5ec98 2 * Agentbed library (SNMP)
okini3939 5:9fa79cb5ec98 3 * Modified for mbed, 2010 Suga.
okini3939 5:9fa79cb5ec98 4 *
okini3939 5:9fa79cb5ec98 5 * Agentuino SNMP Agent Library Prototyping...
okini3939 5:9fa79cb5ec98 6 *
okini3939 5:9fa79cb5ec98 7 * Copyright 2010 Eric C. Gionet <lavco_eg@hotmail.com>
okini3939 5:9fa79cb5ec98 8 *
okini3939 5:9fa79cb5ec98 9 */
okini3939 5:9fa79cb5ec98 10 #include "mbed.h"
okini3939 5:9fa79cb5ec98 11 #include "Agentbed.h"
okini3939 5:9fa79cb5ec98 12 #include "EthernetNetIf.h"
okini3939 5:9fa79cb5ec98 13 #include "ConfigFile.h"
okini3939 5:9fa79cb5ec98 14
okini3939 5:9fa79cb5ec98 15 AgentbedClass Agentbed;
okini3939 5:9fa79cb5ec98 16
okini3939 5:9fa79cb5ec98 17 // RFC1213-MIB OIDs
okini3939 5:9fa79cb5ec98 18 // .iso (.1)
okini3939 5:9fa79cb5ec98 19 // .iso.org (.1.3)
okini3939 5:9fa79cb5ec98 20 // .iso.org.dod (.1.3.6)
okini3939 5:9fa79cb5ec98 21 // .iso.org.dod.internet (.1.3.6.1)
okini3939 5:9fa79cb5ec98 22 // .iso.org.dod.internet.mgmt (.1.3.6.1.2)
okini3939 5:9fa79cb5ec98 23 // .iso.org.dod.internet.mgmt.mib-2 (.1.3.6.1.2.1)
okini3939 5:9fa79cb5ec98 24 // .iso.org.dod.internet.mgmt.mib-2.system (.1.3.6.1.2.1.1)
okini3939 5:9fa79cb5ec98 25 // .iso.org.dod.internet.mgmt.mib-2.system.sysDescr (.1.3.6.1.2.1.1.1)
okini3939 5:9fa79cb5ec98 26 const char sysDescr[] = "1.3.6.1.2.1.1.1.0"; // read-only (DisplayString)
okini3939 5:9fa79cb5ec98 27 // .iso.org.dod.internet.mgmt.mib-2.system.sysObjectID (.1.3.6.1.2.1.1.2)
okini3939 5:9fa79cb5ec98 28 const char sysObjectID[] = "1.3.6.1.2.1.1.2.0"; // read-only (ObjectIdentifier)
okini3939 5:9fa79cb5ec98 29 // .iso.org.dod.internet.mgmt.mib-2.system.sysUpTime (.1.3.6.1.2.1.1.3)
okini3939 5:9fa79cb5ec98 30 const char sysUpTime[] = "1.3.6.1.2.1.1.3.0"; // read-only (TimeTicks)
okini3939 5:9fa79cb5ec98 31 // .iso.org.dod.internet.mgmt.mib-2.system.sysContact (.1.3.6.1.2.1.1.4)
okini3939 5:9fa79cb5ec98 32 const char sysContact[] = "1.3.6.1.2.1.1.4.0"; // read-write (DisplayString)
okini3939 5:9fa79cb5ec98 33 // .iso.org.dod.internet.mgmt.mib-2.system.sysName (.1.3.6.1.2.1.1.5)
okini3939 5:9fa79cb5ec98 34 const char sysName[] = "1.3.6.1.2.1.1.5.0"; // read-write (DisplayString)
okini3939 5:9fa79cb5ec98 35 // .iso.org.dod.internet.mgmt.mib-2.system.sysLocation (.1.3.6.1.2.1.1.6)
okini3939 5:9fa79cb5ec98 36 const char sysLocation[] = "1.3.6.1.2.1.1.6.0"; // read-write (DisplayString)
okini3939 5:9fa79cb5ec98 37 // .iso.org.dod.internet.mgmt.mib-2.system.sysServices (.1.3.6.1.2.1.1.7)
okini3939 5:9fa79cb5ec98 38 const char sysServices[] = "1.3.6.1.2.1.1.7.0"; // read-only (Integer)
okini3939 5:9fa79cb5ec98 39 //
okini3939 5:9fa79cb5ec98 40 // Arduino defined OIDs
okini3939 5:9fa79cb5ec98 41 // .iso.org.dod.internet.private (.1.3.6.1.4)
okini3939 5:9fa79cb5ec98 42 // .iso.org.dod.internet.private.enterprises (.1.3.6.1.4.1)
okini3939 5:9fa79cb5ec98 43 // .iso.org.dod.internet.private.enterprises.arduino (.1.3.6.1.4.1.36582)
okini3939 5:9fa79cb5ec98 44 const char enterprises[] = "1.3.6.1.4.1.36582."; // read-only (Integer)
okini3939 5:9fa79cb5ec98 45 //
okini3939 5:9fa79cb5ec98 46 //
okini3939 5:9fa79cb5ec98 47 // RFC1213 local values
okini3939 5:9fa79cb5ec98 48 static char locDescr[] = "mbed Weather Platform"; // read-only (static)
okini3939 5:9fa79cb5ec98 49 static char locObjectID[] = "1.3.6.1.4.1.36582"; // read-only (static)
okini3939 5:9fa79cb5ec98 50 uint32_t locUpTime = 0; // read-only (static)
okini3939 5:9fa79cb5ec98 51 static char locContact[] = "<root@weather>"; // should be stored/read from EEPROM - read/write (not done for simplicity)
okini3939 5:9fa79cb5ec98 52 static char locName[] = "weather.mbed"; // should be stored/read from EEPROM - read/write (not done for simplicity)
okini3939 5:9fa79cb5ec98 53 static char locLocation[] = "weather"; // should be stored/read from EEPROM - read/write (not done for simplicity)
okini3939 5:9fa79cb5ec98 54 static int32_t locServices = 7; // read-only (static)
okini3939 5:9fa79cb5ec98 55
okini3939 5:9fa79cb5ec98 56 uint32_t prevMillis = 0;
okini3939 5:9fa79cb5ec98 57 char oid[SNMP_MAX_OID_LEN];
okini3939 5:9fa79cb5ec98 58 SNMP_API_STAT_CODES api_status;
okini3939 5:9fa79cb5ec98 59 SNMP_ERR_CODES status;
okini3939 5:9fa79cb5ec98 60
okini3939 5:9fa79cb5ec98 61 extern float pres, temp, humi, light, anemo, vane, rain, uv, moist, temp2;
okini3939 5:9fa79cb5ec98 62
okini3939 5:9fa79cb5ec98 63 void pduReceived()
okini3939 5:9fa79cb5ec98 64 {
okini3939 5:9fa79cb5ec98 65 SNMP_PDU pdu;
okini3939 5:9fa79cb5ec98 66 //
okini3939 5:9fa79cb5ec98 67 api_status = Agentbed.requestPdu(&pdu);
okini3939 5:9fa79cb5ec98 68 //
okini3939 5:9fa79cb5ec98 69 if ( pdu.type == SNMP_PDU_GET || pdu.type == SNMP_PDU_GET_NEXT || pdu.type == SNMP_PDU_SET
okini3939 5:9fa79cb5ec98 70 && pdu.error == SNMP_ERR_NO_ERROR && api_status == SNMP_API_STAT_SUCCESS ) {
okini3939 5:9fa79cb5ec98 71 //
okini3939 5:9fa79cb5ec98 72 pdu.OID.toString(oid);
okini3939 5:9fa79cb5ec98 73 //
okini3939 5:9fa79cb5ec98 74 pdu.error = SNMP_ERR_READ_ONLY;
okini3939 5:9fa79cb5ec98 75 //
okini3939 5:9fa79cb5ec98 76 if ( strcmp(oid, sysDescr ) == 0 ) {
okini3939 5:9fa79cb5ec98 77 // handle sysDescr (set/get) requests
okini3939 5:9fa79cb5ec98 78 if ( pdu.type == SNMP_PDU_GET ) {
okini3939 5:9fa79cb5ec98 79 // response packet from get-request - locDescr
okini3939 5:9fa79cb5ec98 80 status = pdu.VALUE.encode(SNMP_SYNTAX_OCTETS, locDescr);
okini3939 5:9fa79cb5ec98 81 pdu.error = status;
okini3939 5:9fa79cb5ec98 82 }
okini3939 5:9fa79cb5ec98 83 } else if ( strcmp(oid, sysObjectID ) == 0 ) {
okini3939 5:9fa79cb5ec98 84 // handle sysName (set/get) requests
okini3939 5:9fa79cb5ec98 85 if ( pdu.type == SNMP_PDU_GET ) {
okini3939 5:9fa79cb5ec98 86 // response packet from get-request - locUpTime
okini3939 5:9fa79cb5ec98 87 status = pdu.VALUE.encode(SNMP_SYNTAX_OCTETS, locObjectID);
okini3939 5:9fa79cb5ec98 88 pdu.error = status;
okini3939 5:9fa79cb5ec98 89 }
okini3939 5:9fa79cb5ec98 90 } else if ( strcmp(oid, sysUpTime ) == 0 ) {
okini3939 5:9fa79cb5ec98 91 // handle sysName (set/get) requests
okini3939 5:9fa79cb5ec98 92 if ( pdu.type == SNMP_PDU_GET ) {
okini3939 5:9fa79cb5ec98 93 // response packet from get-request - locUpTime
okini3939 5:9fa79cb5ec98 94 status = pdu.VALUE.encode(SNMP_SYNTAX_TIME_TICKS, locUpTime);
okini3939 5:9fa79cb5ec98 95 pdu.error = status;
okini3939 5:9fa79cb5ec98 96 }
okini3939 5:9fa79cb5ec98 97 } else if ( strcmp(oid, sysName ) == 0 ) {
okini3939 5:9fa79cb5ec98 98 // handle sysName (set/get) requests
okini3939 5:9fa79cb5ec98 99 if ( pdu.type == SNMP_PDU_GET ) {
okini3939 5:9fa79cb5ec98 100 // response packet from get-request - locName
okini3939 5:9fa79cb5ec98 101 status = pdu.VALUE.encode(SNMP_SYNTAX_OCTETS, locName);
okini3939 5:9fa79cb5ec98 102 pdu.error = status;
okini3939 5:9fa79cb5ec98 103 }
okini3939 5:9fa79cb5ec98 104 } else if ( strcmp(oid, sysContact ) == 0 ) {
okini3939 5:9fa79cb5ec98 105 // handle sysContact (set/get) requests
okini3939 5:9fa79cb5ec98 106 if ( pdu.type == SNMP_PDU_GET ) {
okini3939 5:9fa79cb5ec98 107 // response packet from get-request - locContact
okini3939 5:9fa79cb5ec98 108 status = pdu.VALUE.encode(SNMP_SYNTAX_OCTETS, locContact);
okini3939 5:9fa79cb5ec98 109 pdu.error = status;
okini3939 5:9fa79cb5ec98 110 }
okini3939 5:9fa79cb5ec98 111 } else if ( strcmp(oid, sysLocation ) == 0 ) {
okini3939 5:9fa79cb5ec98 112 // handle sysLocation (set/get) requests
okini3939 5:9fa79cb5ec98 113 if ( pdu.type == SNMP_PDU_GET ) {
okini3939 5:9fa79cb5ec98 114 // response packet from get-request - locLocation
okini3939 5:9fa79cb5ec98 115 status = pdu.VALUE.encode(SNMP_SYNTAX_OCTETS, locLocation);
okini3939 5:9fa79cb5ec98 116 pdu.error = status;
okini3939 5:9fa79cb5ec98 117 }
okini3939 5:9fa79cb5ec98 118 } else if ( strcmp(oid, sysServices) == 0 ) {
okini3939 5:9fa79cb5ec98 119 // handle sysServices (set/get) requests
okini3939 5:9fa79cb5ec98 120 if ( pdu.type == SNMP_PDU_GET ) {
okini3939 5:9fa79cb5ec98 121 // response packet from get-request - locServices
okini3939 5:9fa79cb5ec98 122 status = pdu.VALUE.encode(SNMP_SYNTAX_INT, locServices);
okini3939 5:9fa79cb5ec98 123 pdu.error = status;
okini3939 5:9fa79cb5ec98 124 }
okini3939 5:9fa79cb5ec98 125 } else if ( strncmp(oid, enterprises, strlen(enterprises)) == 0 ) {
okini3939 5:9fa79cb5ec98 126 // handle enterprises (set/get) requests
okini3939 5:9fa79cb5ec98 127 if ( pdu.type == SNMP_PDU_GET ) {
okini3939 5:9fa79cb5ec98 128 // response packet from get-request - enterprises
okini3939 5:9fa79cb5ec98 129 switch (oid[strlen(enterprises)]) {
okini3939 5:9fa79cb5ec98 130 case '0':
okini3939 5:9fa79cb5ec98 131 status = pdu.VALUE.encode(SNMP_SYNTAX_OPAQUE_FLOAT, pres);
okini3939 5:9fa79cb5ec98 132 break;
okini3939 5:9fa79cb5ec98 133 case '1':
okini3939 5:9fa79cb5ec98 134 status = pdu.VALUE.encode(SNMP_SYNTAX_OPAQUE_FLOAT, temp);
okini3939 5:9fa79cb5ec98 135 break;
okini3939 5:9fa79cb5ec98 136 case '2':
okini3939 5:9fa79cb5ec98 137 status = pdu.VALUE.encode(SNMP_SYNTAX_OPAQUE_FLOAT, humi);
okini3939 5:9fa79cb5ec98 138 break;
okini3939 5:9fa79cb5ec98 139 case '3':
okini3939 5:9fa79cb5ec98 140 status = pdu.VALUE.encode(SNMP_SYNTAX_OPAQUE_FLOAT, anemo);
okini3939 5:9fa79cb5ec98 141 break;
okini3939 5:9fa79cb5ec98 142 case '4':
okini3939 5:9fa79cb5ec98 143 status = pdu.VALUE.encode(SNMP_SYNTAX_OPAQUE_FLOAT, vane);
okini3939 5:9fa79cb5ec98 144 break;
okini3939 5:9fa79cb5ec98 145 case '5':
okini3939 5:9fa79cb5ec98 146 status = pdu.VALUE.encode(SNMP_SYNTAX_OPAQUE_FLOAT, rain);
okini3939 5:9fa79cb5ec98 147 break;
okini3939 5:9fa79cb5ec98 148 case '6':
okini3939 5:9fa79cb5ec98 149 status = pdu.VALUE.encode(SNMP_SYNTAX_OPAQUE_FLOAT, light);
okini3939 5:9fa79cb5ec98 150 break;
okini3939 5:9fa79cb5ec98 151 case '7':
okini3939 5:9fa79cb5ec98 152 status = pdu.VALUE.encode(SNMP_SYNTAX_OPAQUE_FLOAT, uv);
okini3939 5:9fa79cb5ec98 153 break;
okini3939 5:9fa79cb5ec98 154 case '8':
okini3939 5:9fa79cb5ec98 155 status = pdu.VALUE.encode(SNMP_SYNTAX_OPAQUE_FLOAT, moist);
okini3939 5:9fa79cb5ec98 156 break;
okini3939 5:9fa79cb5ec98 157 case '9':
okini3939 5:9fa79cb5ec98 158 status = pdu.VALUE.encode(SNMP_SYNTAX_OPAQUE_FLOAT, temp2);
okini3939 5:9fa79cb5ec98 159 break;
okini3939 5:9fa79cb5ec98 160 }
okini3939 5:9fa79cb5ec98 161 pdu.error = status;
okini3939 5:9fa79cb5ec98 162 }
okini3939 5:9fa79cb5ec98 163 } else {
okini3939 5:9fa79cb5ec98 164 // oid does not exist
okini3939 5:9fa79cb5ec98 165 //
okini3939 5:9fa79cb5ec98 166 // response packet - object not found
okini3939 5:9fa79cb5ec98 167 pdu.error = SNMP_ERR_NO_SUCH_NAME;
okini3939 5:9fa79cb5ec98 168 }
okini3939 5:9fa79cb5ec98 169 //
okini3939 5:9fa79cb5ec98 170 pdu.type = SNMP_PDU_RESPONSE;
okini3939 5:9fa79cb5ec98 171
okini3939 5:9fa79cb5ec98 172 Agentbed.responsePdu(&pdu);
okini3939 5:9fa79cb5ec98 173 }
okini3939 5:9fa79cb5ec98 174 //
okini3939 5:9fa79cb5ec98 175 Agentbed.freePdu(&pdu);
okini3939 5:9fa79cb5ec98 176 //
okini3939 5:9fa79cb5ec98 177 //Serial << "UDP Packet Received End.." << " RAM:" << freeMemory() << endl;
okini3939 5:9fa79cb5ec98 178 }