example -connect to china mobile oneNet

Dependencies:   LM005A-driver

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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 }