老 姚
/
OnenetTest
example -connect to china mobile oneNet
Embed:
(wiki syntax)
Show/hide line numbers
main.cpp
00001 #include "mbed.h" 00002 #include "BC95B.h" 00003 #define READ 0 00004 #define WRITE 1 00005 #define DISCOVER 2 00006 DigitalOut myled(PC_6); 00007 BC95B oneNet(PB_6,PB_7,true); 00008 DigitalOut Enable(PD_13); 00009 DigitalOut RST(PD_12); 00010 double temperature=0.8; 00011 double min_value=0; 00012 double max_value=180; 00013 //Signal Strength And bit error rate 00014 int rssi,ber; 00015 unsigned char hex_char(char c) 00016 { 00017 if ('0' <= c && c <= '9') return (unsigned char)(c - '0'); 00018 if ('A' <= c && c <= 'F') return (unsigned char)(c - 'A' + 10); 00019 if ('a' <= c && c <= 'f') return (unsigned char)(c - 'a' + 10); 00020 // printf("Error Val=%d\n",c); 00021 return 0xFF; 00022 } 00023 double convertHextoDouble(char * buf,int len) 00024 { double result ; 00025 uint64_t temp; 00026 int i; 00027 00028 temp=0; 00029 for (i=0;i<len;i++) 00030 temp=(uint64_t)(temp<<4)| hex_char(buf[i]); 00031 memcpy(&result,&temp,8); 00032 return result; 00033 } 00034 00035 int readValue(int objId, int insId, int resId,char *ValueString) 00036 { 00037 int len; 00038 printf("read %d Value\n",resId); 00039 switch (resId) 00040 { 00041 case 5700:{len= sprintf(ValueString,"%0.1f",temperature);break;} 00042 case 5601:{len= sprintf(ValueString,"%0.1f",min_value);break;} 00043 case 5602:{len= sprintf(ValueString,"%0.1f",max_value);break;} 00044 } 00045 return len; 00046 } 00047 int writeValue(int objId, int insId, int resId,char *ValueString,int len) 00048 { 00049 double analog; 00050 analog=convertHextoDouble(ValueString,len); 00051 printf("write %d value \n",resId); 00052 switch(resId) 00053 { 00054 case 5700:{min_value=analog;} 00055 case 5601:{max_value=analog;} 00056 case 5602:{temperature=analog;} 00057 } 00058 00059 return len; 00060 } 00061 // OneNet callback function 00062 void eventProcess() 00063 { int EventCode; 00064 int objId,insId,resId; 00065 long msgId; 00066 char ValueString[12]; 00067 int len; 00068 EventCode = oneNet.getEventCode(); 00069 //printf("event Processing %d\n",EventCode); 00070 switch(EventCode) 00071 { 00072 case READ:{ 00073 oneNet.getCurrentID(&msgId,&objId,&insId,&resId); 00074 len=readValue(objId, insId, resId,ValueString); 00075 oneNet.putCurrentValue(4,ValueString,len); 00076 break; 00077 } 00078 case WRITE:{ 00079 oneNet.getCurrentID(&msgId,&objId,&insId,&resId); 00080 len=oneNet.getCurrentValue(ValueString); 00081 00082 writeValue(objId, insId, resId,ValueString,len); 00083 break; 00084 } 00085 case DISCOVER:{ 00086 // printf("Discover callback\n"); 00087 oneNet.getCurrentID(&msgId,&objId,&insId,&resId); 00088 // memcpy(ValueString,"5700:5601:5602",14); 00089 oneNet.putCurrentResNames(0,"5700;5601;5602",14); 00090 break; 00091 } 00092 } 00093 00094 } 00095 00096 int main() { 00097 int time_counter=0; 00098 const char * ss; 00099 int result; 00100 char temp[12]; 00101 Enable=1; 00102 RST=0; 00103 RST=1; 00104 printf("BC95B8 China Mobile ooneNet Demo \n"); 00105 temperature=0.8; 00106 oneNet.attach(&eventProcess); 00107 if(oneNet.reset()) 00108 printf("Rest OK\n"); 00109 wait(10); 00110 ss=oneNet.get_firmware_version(); 00111 printf("firmware version =%s\n",ss); 00112 ss=oneNet.get_imei(); 00113 printf("IMEI=%s\n",ss); 00114 ss=oneNet.get_imsi(); 00115 printf("IMSI=%s\n",ss); 00116 ss=oneNet.get_imsi(); 00117 printf("IMSI=%s\n",ss); 00118 oneNet.get_SignalStrength(&rssi,&ber); 00119 printf("signal strength: rssi=%d,ber=%d\n",rssi,ber); 00120 result=oneNet.create_suite(); 00121 printf("create communication suite=%d\n",result); 00122 00123 // +MIPLADDOBJ:<ref>,<objId>,<insCount>,<insBitmap>,< attrCount>,<actCount> 00124 oneNet.create_object(result,3303,1,"1",3,0) ; //Attribute count=3 00125 while(!oneNet.register_request(result,3600,600)) 00126 { 00127 wait(1); 00128 }; 00129 printf("register request OK\n"); 00130 // oneNet.respond_discover(0,msgid,1,19,"5850;5851;5706;5805"); 00131 00132 while(1) { 00133 oneNet.recv(); 00134 wait(0.5); // 200 ms 00135 myled = !myled; // LED is OFF 00136 time_counter++; 00137 if (time_counter>10) 00138 { 00139 time_counter=0; 00140 00141 temperature=temperature+1.5; 00142 if (temperature>20) temperature=-20; 00143 sprintf(temp,"%0.1f",temperature); 00144 oneNet.notify_resource(0,3303,0,5700,4,4,temp,0,0); 00145 } 00146 } 00147 }
Generated on Mon Jul 18 2022 14:39:41 by 1.7.2