example -connect to china mobile oneNet

Dependencies:   LM005A-driver

Committer:
yao6116601
Date:
Tue Jul 31 02:56:23 2018 +0000
Revision:
0:674dfddde401
modular-2 connect to China Mobile OneNet IoT plateform

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yao6116601 0:674dfddde401 1 #include "mbed.h"
yao6116601 0:674dfddde401 2 #include "BC95B.h"
yao6116601 0:674dfddde401 3 #define READ 0
yao6116601 0:674dfddde401 4 #define WRITE 1
yao6116601 0:674dfddde401 5 #define DISCOVER 2
yao6116601 0:674dfddde401 6 DigitalOut myled(PC_6);
yao6116601 0:674dfddde401 7 BC95B oneNet(PB_6,PB_7,true);
yao6116601 0:674dfddde401 8 DigitalOut Enable(PD_13);
yao6116601 0:674dfddde401 9 DigitalOut RST(PD_12);
yao6116601 0:674dfddde401 10 double temperature=0.8;
yao6116601 0:674dfddde401 11 double min_value=0;
yao6116601 0:674dfddde401 12 double max_value=180;
yao6116601 0:674dfddde401 13 //Signal Strength And bit error rate
yao6116601 0:674dfddde401 14 int rssi,ber;
yao6116601 0:674dfddde401 15 unsigned char hex_char(char c)
yao6116601 0:674dfddde401 16 {
yao6116601 0:674dfddde401 17 if ('0' <= c && c <= '9') return (unsigned char)(c - '0');
yao6116601 0:674dfddde401 18 if ('A' <= c && c <= 'F') return (unsigned char)(c - 'A' + 10);
yao6116601 0:674dfddde401 19 if ('a' <= c && c <= 'f') return (unsigned char)(c - 'a' + 10);
yao6116601 0:674dfddde401 20 // printf("Error Val=%d\n",c);
yao6116601 0:674dfddde401 21 return 0xFF;
yao6116601 0:674dfddde401 22 }
yao6116601 0:674dfddde401 23 double convertHextoDouble(char * buf,int len)
yao6116601 0:674dfddde401 24 { double result ;
yao6116601 0:674dfddde401 25 uint64_t temp;
yao6116601 0:674dfddde401 26 int i;
yao6116601 0:674dfddde401 27
yao6116601 0:674dfddde401 28 temp=0;
yao6116601 0:674dfddde401 29 for (i=0;i<len;i++)
yao6116601 0:674dfddde401 30 temp=(uint64_t)(temp<<4)| hex_char(buf[i]);
yao6116601 0:674dfddde401 31 memcpy(&result,&temp,8);
yao6116601 0:674dfddde401 32 return result;
yao6116601 0:674dfddde401 33 }
yao6116601 0:674dfddde401 34
yao6116601 0:674dfddde401 35 int readValue(int objId, int insId, int resId,char *ValueString)
yao6116601 0:674dfddde401 36 {
yao6116601 0:674dfddde401 37 int len;
yao6116601 0:674dfddde401 38 printf("read %d Value\n",resId);
yao6116601 0:674dfddde401 39 switch (resId)
yao6116601 0:674dfddde401 40 {
yao6116601 0:674dfddde401 41 case 5700:{len= sprintf(ValueString,"%0.1f",temperature);break;}
yao6116601 0:674dfddde401 42 case 5601:{len= sprintf(ValueString,"%0.1f",min_value);break;}
yao6116601 0:674dfddde401 43 case 5602:{len= sprintf(ValueString,"%0.1f",max_value);break;}
yao6116601 0:674dfddde401 44 }
yao6116601 0:674dfddde401 45 return len;
yao6116601 0:674dfddde401 46 }
yao6116601 0:674dfddde401 47 int writeValue(int objId, int insId, int resId,char *ValueString,int len)
yao6116601 0:674dfddde401 48 {
yao6116601 0:674dfddde401 49 double analog;
yao6116601 0:674dfddde401 50 analog=convertHextoDouble(ValueString,len);
yao6116601 0:674dfddde401 51 printf("write %d value \n",resId);
yao6116601 0:674dfddde401 52 switch(resId)
yao6116601 0:674dfddde401 53 {
yao6116601 0:674dfddde401 54 case 5700:{min_value=analog;}
yao6116601 0:674dfddde401 55 case 5601:{max_value=analog;}
yao6116601 0:674dfddde401 56 case 5602:{temperature=analog;}
yao6116601 0:674dfddde401 57 }
yao6116601 0:674dfddde401 58
yao6116601 0:674dfddde401 59 return len;
yao6116601 0:674dfddde401 60 }
yao6116601 0:674dfddde401 61 // OneNet callback function
yao6116601 0:674dfddde401 62 void eventProcess()
yao6116601 0:674dfddde401 63 { int EventCode;
yao6116601 0:674dfddde401 64 int objId,insId,resId;
yao6116601 0:674dfddde401 65 long msgId;
yao6116601 0:674dfddde401 66 char ValueString[12];
yao6116601 0:674dfddde401 67 int len;
yao6116601 0:674dfddde401 68 EventCode = oneNet.getEventCode();
yao6116601 0:674dfddde401 69 //printf("event Processing %d\n",EventCode);
yao6116601 0:674dfddde401 70 switch(EventCode)
yao6116601 0:674dfddde401 71 {
yao6116601 0:674dfddde401 72 case READ:{
yao6116601 0:674dfddde401 73 oneNet.getCurrentID(&msgId,&objId,&insId,&resId);
yao6116601 0:674dfddde401 74 len=readValue(objId, insId, resId,ValueString);
yao6116601 0:674dfddde401 75 oneNet.putCurrentValue(4,ValueString,len);
yao6116601 0:674dfddde401 76 break;
yao6116601 0:674dfddde401 77 }
yao6116601 0:674dfddde401 78 case WRITE:{
yao6116601 0:674dfddde401 79 oneNet.getCurrentID(&msgId,&objId,&insId,&resId);
yao6116601 0:674dfddde401 80 len=oneNet.getCurrentValue(ValueString);
yao6116601 0:674dfddde401 81
yao6116601 0:674dfddde401 82 writeValue(objId, insId, resId,ValueString,len);
yao6116601 0:674dfddde401 83 break;
yao6116601 0:674dfddde401 84 }
yao6116601 0:674dfddde401 85 case DISCOVER:{
yao6116601 0:674dfddde401 86 // printf("Discover callback\n");
yao6116601 0:674dfddde401 87 oneNet.getCurrentID(&msgId,&objId,&insId,&resId);
yao6116601 0:674dfddde401 88 // memcpy(ValueString,"5700:5601:5602",14);
yao6116601 0:674dfddde401 89 oneNet.putCurrentResNames(0,"5700;5601;5602",14);
yao6116601 0:674dfddde401 90 break;
yao6116601 0:674dfddde401 91 }
yao6116601 0:674dfddde401 92 }
yao6116601 0:674dfddde401 93
yao6116601 0:674dfddde401 94 }
yao6116601 0:674dfddde401 95
yao6116601 0:674dfddde401 96 int main() {
yao6116601 0:674dfddde401 97 int time_counter=0;
yao6116601 0:674dfddde401 98 const char * ss;
yao6116601 0:674dfddde401 99 int result;
yao6116601 0:674dfddde401 100 char temp[12];
yao6116601 0:674dfddde401 101 Enable=1;
yao6116601 0:674dfddde401 102 RST=0;
yao6116601 0:674dfddde401 103 RST=1;
yao6116601 0:674dfddde401 104 printf("BC95B8 China Mobile ooneNet Demo \n");
yao6116601 0:674dfddde401 105 temperature=0.8;
yao6116601 0:674dfddde401 106 oneNet.attach(&eventProcess);
yao6116601 0:674dfddde401 107 if(oneNet.reset())
yao6116601 0:674dfddde401 108 printf("Rest OK\n");
yao6116601 0:674dfddde401 109 wait(10);
yao6116601 0:674dfddde401 110 ss=oneNet.get_firmware_version();
yao6116601 0:674dfddde401 111 printf("firmware version =%s\n",ss);
yao6116601 0:674dfddde401 112 ss=oneNet.get_imei();
yao6116601 0:674dfddde401 113 printf("IMEI=%s\n",ss);
yao6116601 0:674dfddde401 114 ss=oneNet.get_imsi();
yao6116601 0:674dfddde401 115 printf("IMSI=%s\n",ss);
yao6116601 0:674dfddde401 116 ss=oneNet.get_imsi();
yao6116601 0:674dfddde401 117 printf("IMSI=%s\n",ss);
yao6116601 0:674dfddde401 118 oneNet.get_SignalStrength(&rssi,&ber);
yao6116601 0:674dfddde401 119 printf("signal strength: rssi=%d,ber=%d\n",rssi,ber);
yao6116601 0:674dfddde401 120 result=oneNet.create_suite();
yao6116601 0:674dfddde401 121 printf("create communication suite=%d\n",result);
yao6116601 0:674dfddde401 122
yao6116601 0:674dfddde401 123 // +MIPLADDOBJ:<ref>,<objId>,<insCount>,<insBitmap>,< attrCount>,<actCount>
yao6116601 0:674dfddde401 124 oneNet.create_object(result,3303,1,"1",3,0) ; //Attribute count=3
yao6116601 0:674dfddde401 125 while(!oneNet.register_request(result,3600,600))
yao6116601 0:674dfddde401 126 {
yao6116601 0:674dfddde401 127 wait(1);
yao6116601 0:674dfddde401 128 };
yao6116601 0:674dfddde401 129 printf("register request OK\n");
yao6116601 0:674dfddde401 130 // oneNet.respond_discover(0,msgid,1,19,"5850;5851;5706;5805");
yao6116601 0:674dfddde401 131
yao6116601 0:674dfddde401 132 while(1) {
yao6116601 0:674dfddde401 133 oneNet.recv();
yao6116601 0:674dfddde401 134 wait(0.5); // 200 ms
yao6116601 0:674dfddde401 135 myled = !myled; // LED is OFF
yao6116601 0:674dfddde401 136 time_counter++;
yao6116601 0:674dfddde401 137 if (time_counter>10)
yao6116601 0:674dfddde401 138 {
yao6116601 0:674dfddde401 139 time_counter=0;
yao6116601 0:674dfddde401 140
yao6116601 0:674dfddde401 141 temperature=temperature+1.5;
yao6116601 0:674dfddde401 142 if (temperature>20) temperature=-20;
yao6116601 0:674dfddde401 143 sprintf(temp,"%0.1f",temperature);
yao6116601 0:674dfddde401 144 oneNet.notify_resource(0,3303,0,5700,4,4,temp,0,0);
yao6116601 0:674dfddde401 145 }
yao6116601 0:674dfddde401 146 }
yao6116601 0:674dfddde401 147 }