clock

Dependencies:   mbed

Committer:
donghuoyinzi
Date:
Tue May 22 09:10:05 2018 +0000
Revision:
3:b8766d623f01
Parent:
2:e54d9d87c6cb
0522

Who changed what in which revision?

UserRevisionLine numberNew contents of line
donghuoyinzi 0:17e9016529cf 1 #include "mybc95.h"
donghuoyinzi 0:17e9016529cf 2
donghuoyinzi 1:013b9fdc4e78 3 char buf_bc95Tx[7]="";
donghuoyinzi 1:013b9fdc4e78 4 char bc95Act::buf[50]= {0x00};
donghuoyinzi 1:013b9fdc4e78 5 char bc95Act::buf_bc95Tx[buf_bc95TxSize]= {0x00};
donghuoyinzi 1:013b9fdc4e78 6 char bc95Act::buf_bc95Rx[buf_bc95RxSize]= {0x00};
donghuoyinzi 1:013b9fdc4e78 7 int bc95Act::stpSe=0;
donghuoyinzi 1:013b9fdc4e78 8 int bc95Act::cnt=0;
donghuoyinzi 1:013b9fdc4e78 9 int bc95Act::cntche;
donghuoyinzi 1:013b9fdc4e78 10 int bc95Act::cntlink=0;
donghuoyinzi 1:013b9fdc4e78 11 int bc95Act::year=0;
donghuoyinzi 1:013b9fdc4e78 12 int bc95Act::mon=0;
donghuoyinzi 1:013b9fdc4e78 13 int bc95Act::day=0;
donghuoyinzi 1:013b9fdc4e78 14 int bc95Act::hour=0;
donghuoyinzi 1:013b9fdc4e78 15 int bc95Act::min=0;
donghuoyinzi 1:013b9fdc4e78 16 int bc95Act::sec=0;
donghuoyinzi 1:013b9fdc4e78 17 const int mon_table[12]= {31,28,31,30,31,30,31,31,30,31,30,31};
donghuoyinzi 0:17e9016529cf 18 /*****************************
donghuoyinzi 0:17e9016529cf 19 Fun.: base initialization of bc95。
donghuoyinzi 0:17e9016529cf 20 Desc.:
donghuoyinzi 0:17e9016529cf 21 Auth. Vesion:2017.7.2
donghuoyinzi 0:17e9016529cf 22 *****************************/
donghuoyinzi 0:17e9016529cf 23 void bc95Act::init(void)
donghuoyinzi 0:17e9016529cf 24 {
donghuoyinzi 0:17e9016529cf 25 know::uart3.baud(9600);
donghuoyinzi 0:17e9016529cf 26 know::uart3.attach(&getISR,SerialBase::RxIrq);
donghuoyinzi 0:17e9016529cf 27 }
donghuoyinzi 0:17e9016529cf 28
donghuoyinzi 0:17e9016529cf 29 /*****************************
donghuoyinzi 0:17e9016529cf 30 Fun.: initialization of bc95 start。
donghuoyinzi 0:17e9016529cf 31 Desc.:
donghuoyinzi 0:17e9016529cf 32 Auth. Vesion:2017.7.2
donghuoyinzi 0:17e9016529cf 33 *****************************/
donghuoyinzi 0:17e9016529cf 34 void bc95Act::start(void)
donghuoyinzi 0:17e9016529cf 35 {
donghuoyinzi 0:17e9016529cf 36 know::pow.write(1); //BC95POW_ON();
donghuoyinzi 0:17e9016529cf 37 wait(50);
donghuoyinzi 0:17e9016529cf 38 }
donghuoyinzi 0:17e9016529cf 39
donghuoyinzi 0:17e9016529cf 40 /*****************************
donghuoyinzi 0:17e9016529cf 41 Fun.: initialization of bc95 data。
donghuoyinzi 0:17e9016529cf 42 Desc.:
donghuoyinzi 0:17e9016529cf 43 Auth. Vesion:2017.7.2
donghuoyinzi 0:17e9016529cf 44 *****************************/
donghuoyinzi 0:17e9016529cf 45 void bc95Act::data(void)
donghuoyinzi 0:17e9016529cf 46 {
donghuoyinzi 0:17e9016529cf 47 stpSe=1;
donghuoyinzi 0:17e9016529cf 48 cnt=0;
donghuoyinzi 0:17e9016529cf 49 }
donghuoyinzi 0:17e9016529cf 50
donghuoyinzi 0:17e9016529cf 51 /*****************************
donghuoyinzi 0:17e9016529cf 52 Fun.: initialization of bc95 ready。
donghuoyinzi 0:17e9016529cf 53 Desc.:
donghuoyinzi 0:17e9016529cf 54 Auth. Vesion:2017.7.2
donghuoyinzi 0:17e9016529cf 55 *****************************/
donghuoyinzi 0:17e9016529cf 56 void bc95Act::ready(void)
donghuoyinzi 0:17e9016529cf 57 {
donghuoyinzi 0:17e9016529cf 58
donghuoyinzi 0:17e9016529cf 59 }
donghuoyinzi 0:17e9016529cf 60
donghuoyinzi 0:17e9016529cf 61 /*****************************
donghuoyinzi 0:17e9016529cf 62 Fun.: bc95 revoke
donghuoyinzi 0:17e9016529cf 63 Desc.:
donghuoyinzi 0:17e9016529cf 64 Auth. Vesion:2017.7.2
donghuoyinzi 0:17e9016529cf 65 *****************************/
donghuoyinzi 0:17e9016529cf 66 void bc95Act::revok(void)
donghuoyinzi 0:17e9016529cf 67 {
donghuoyinzi 0:17e9016529cf 68 know::pow.write(0); //BC95POW_OFF();
donghuoyinzi 0:17e9016529cf 69 }
donghuoyinzi 0:17e9016529cf 70
donghuoyinzi 0:17e9016529cf 71 /*****************************
donghuoyinzi 0:17e9016529cf 72 Fun.: get time。
donghuoyinzi 0:17e9016529cf 73 Desc.:
donghuoyinzi 0:17e9016529cf 74 Auth. Vesion:2017.7.2
donghuoyinzi 0:17e9016529cf 75 *****************************/
donghuoyinzi 2:e54d9d87c6cb 76 char *bc95Act::get_tim(void)
donghuoyinzi 0:17e9016529cf 77 {
donghuoyinzi 2:e54d9d87c6cb 78 static char buf_tim[7]="";
donghuoyinzi 1:013b9fdc4e78 79 tm *tim;
donghuoyinzi 1:013b9fdc4e78 80 time_t seconds=time(NULL);
donghuoyinzi 1:013b9fdc4e78 81 tim=localtime(&seconds);
donghuoyinzi 1:013b9fdc4e78 82
donghuoyinzi 2:e54d9d87c6cb 83 buf_tim[0]=char(tim->tm_year-100);
donghuoyinzi 2:e54d9d87c6cb 84 buf_tim[1]=char(tim->tm_mon);
donghuoyinzi 2:e54d9d87c6cb 85 buf_tim[2]=char(tim->tm_mday);
donghuoyinzi 2:e54d9d87c6cb 86 buf_tim[3]=char(tim->tm_hour);
donghuoyinzi 2:e54d9d87c6cb 87 buf_tim[4]=char(tim->tm_min);
donghuoyinzi 2:e54d9d87c6cb 88 buf_tim[5]=char(tim->tm_sec);
donghuoyinzi 2:e54d9d87c6cb 89
donghuoyinzi 2:e54d9d87c6cb 90 return buf_tim;
donghuoyinzi 0:17e9016529cf 91 }
donghuoyinzi 0:17e9016529cf 92
donghuoyinzi 0:17e9016529cf 93 /*****************************
donghuoyinzi 0:17e9016529cf 94 Fun.: get know。
donghuoyinzi 0:17e9016529cf 95 Desc.:
donghuoyinzi 0:17e9016529cf 96 Auth. Vesion:2017.7.2
donghuoyinzi 0:17e9016529cf 97 *****************************/
donghuoyinzi 0:17e9016529cf 98 void bc95Act::get_knw(void)
donghuoyinzi 0:17e9016529cf 99 {
donghuoyinzi 0:17e9016529cf 100 if(bc95Act::stpSe==1){
donghuoyinzi 0:17e9016529cf 101 know::uart3.printf("AT+CCLK?\r\n");
donghuoyinzi 0:17e9016529cf 102 jump_Judg(2,250);
donghuoyinzi 0:17e9016529cf 103
donghuoyinzi 0:17e9016529cf 104 }
donghuoyinzi 0:17e9016529cf 105 if(bc95Act::stpSe==2) CheckOK(200,1,10); //10是最大的查询次数
donghuoyinzi 0:17e9016529cf 106 if(bc95Act::stpSe==250){ //规范250是失败
donghuoyinzi 3:b8766d623f01 107 know::polSta[15]='2';
donghuoyinzi 0:17e9016529cf 108 bc95Act::stpSe=0;
donghuoyinzi 0:17e9016529cf 109 }
donghuoyinzi 0:17e9016529cf 110 if(bc95Act::stpSe==200){ //规范200是成功,
donghuoyinzi 0:17e9016529cf 111 bc95Act::stpSe=0;
donghuoyinzi 0:17e9016529cf 112 //know::magtsk();
donghuoyinzi 3:b8766d623f01 113 know::polSta[15]='1';
donghuoyinzi 0:17e9016529cf 114 }
donghuoyinzi 0:17e9016529cf 115 return;
donghuoyinzi 0:17e9016529cf 116 }
donghuoyinzi 0:17e9016529cf 117
donghuoyinzi 0:17e9016529cf 118 /*****************************************
donghuoyinzi 0:17e9016529cf 119 Fun.: rtc set。
donghuoyinzi 0:17e9016529cf 120 Desc.:
donghuoyinzi 0:17e9016529cf 121 Auth. Vesion:2017.7.2
donghuoyinzi 0:17e9016529cf 122 *****************************************/
donghuoyinzi 0:17e9016529cf 123 void bc95Act::setrtc(void)
donghuoyinzi 0:17e9016529cf 124 {
donghuoyinzi 0:17e9016529cf 125 uint32_t secc;
donghuoyinzi 0:17e9016529cf 126
donghuoyinzi 0:17e9016529cf 127 changdate();
donghuoyinzi 0:17e9016529cf 128 secc=changsec();
donghuoyinzi 0:17e9016529cf 129 set_time(secc);
donghuoyinzi 0:17e9016529cf 130 }
donghuoyinzi 0:17e9016529cf 131
donghuoyinzi 2:e54d9d87c6cb 132 void bc95Act::changdate(void)
donghuoyinzi 0:17e9016529cf 133 {
donghuoyinzi 2:e54d9d87c6cb 134 year= (buf_bc95Rx[5]-0x30)*10+(buf_bc95Rx[6]-0x30)+2000; //年
donghuoyinzi 2:e54d9d87c6cb 135 mon = (buf_bc95Rx[8]-0x30)*10+(buf_bc95Rx[9]-0x30); //月
donghuoyinzi 2:e54d9d87c6cb 136 day = (buf_bc95Rx[11]-0x30)*10+(buf_bc95Rx[12]-0x30); //日
donghuoyinzi 2:e54d9d87c6cb 137 hour= (buf_bc95Rx[14]-0x30)*10+(buf_bc95Rx[15]-0x30); //时
donghuoyinzi 2:e54d9d87c6cb 138 min = (buf_bc95Rx[17]-0x30)*10+(buf_bc95Rx[18]-0x30); //分
donghuoyinzi 2:e54d9d87c6cb 139 sec = (buf_bc95Rx[20]-0x30)*10+(buf_bc95Rx[21]-0x30); //秒
donghuoyinzi 0:17e9016529cf 140 }
donghuoyinzi 0:17e9016529cf 141
donghuoyinzi 2:e54d9d87c6cb 142 uint32_t bc95Act::changsec(void)
donghuoyinzi 0:17e9016529cf 143 {
donghuoyinzi 0:17e9016529cf 144 uint16_t t;
donghuoyinzi 0:17e9016529cf 145 uint32_t seccount=0;
donghuoyinzi 0:17e9016529cf 146
donghuoyinzi 1:013b9fdc4e78 147 for(t=1970; t< year; t++) {
donghuoyinzi 0:17e9016529cf 148 if(Is_Leap_Year(t)) seccount+=31622400;
donghuoyinzi 1:013b9fdc4e78 149 else seccount+=31536000;
donghuoyinzi 0:17e9016529cf 150 }
donghuoyinzi 0:17e9016529cf 151 mon-=1;
donghuoyinzi 1:013b9fdc4e78 152 for(t=0; t< mon; t++) {
donghuoyinzi 0:17e9016529cf 153 seccount+=(uint32_t) mon_table[t]*86400;
donghuoyinzi 1:013b9fdc4e78 154 if(Is_Leap_Year(year)&&t==1) seccount+=86400;
donghuoyinzi 0:17e9016529cf 155 }
donghuoyinzi 1:013b9fdc4e78 156 seccount+=(uint32_t)( day-1)*86400;
donghuoyinzi 0:17e9016529cf 157 seccount+=(uint32_t) hour*3600;
donghuoyinzi 1:013b9fdc4e78 158 seccount+=(uint32_t) min*60;
donghuoyinzi 0:17e9016529cf 159 seccount+= sec;
donghuoyinzi 1:013b9fdc4e78 160 return seccount;
donghuoyinzi 0:17e9016529cf 161 }
donghuoyinzi 0:17e9016529cf 162
donghuoyinzi 0:17e9016529cf 163 /*****************************************
donghuoyinzi 0:17e9016529cf 164 Fun.: 闰年判断。
donghuoyinzi 0:17e9016529cf 165 Desc.:
donghuoyinzi 0:17e9016529cf 166 Auth. Vesion:2017.7.2
donghuoyinzi 0:17e9016529cf 167 *****************************************/
donghuoyinzi 0:17e9016529cf 168 uint8_t bc95Act::Is_Leap_Year(uint16_t year)
donghuoyinzi 0:17e9016529cf 169 {
donghuoyinzi 1:013b9fdc4e78 170 if(year%4==0) {
donghuoyinzi 1:013b9fdc4e78 171 if(year%100==0) {
donghuoyinzi 1:013b9fdc4e78 172 if(year%400==0)return 1;//
donghuoyinzi 1:013b9fdc4e78 173 else return 0;
donghuoyinzi 1:013b9fdc4e78 174 } else return 1;
donghuoyinzi 1:013b9fdc4e78 175 } else return 0;
donghuoyinzi 0:17e9016529cf 176 }
donghuoyinzi 0:17e9016529cf 177
donghuoyinzi 0:17e9016529cf 178 /*****************************
donghuoyinzi 0:17e9016529cf 179 Fun.: 判断AT指令返回值。
donghuoyinzi 0:17e9016529cf 180 Desc.:
donghuoyinzi 0:17e9016529cf 181 Auth. Vesion:2017.7.2
donghuoyinzi 0:17e9016529cf 182 *****************************/
donghuoyinzi 0:17e9016529cf 183 void bc95Act::jump_Judg(int Chekstep,int Nexnexstep){
donghuoyinzi 0:17e9016529cf 184 bc95Act::stpSe =Chekstep;
donghuoyinzi 0:17e9016529cf 185 bc95Act::cntche=0;
donghuoyinzi 0:17e9016529cf 186 bc95Act::cntlink++;
donghuoyinzi 0:17e9016529cf 187 if(bc95Act::cntlink>2){
donghuoyinzi 0:17e9016529cf 188 bc95Act::stpSe=Nexnexstep;
donghuoyinzi 0:17e9016529cf 189 bc95Act::cntlink=0;
donghuoyinzi 0:17e9016529cf 190 }
donghuoyinzi 0:17e9016529cf 191 }
donghuoyinzi 0:17e9016529cf 192
donghuoyinzi 0:17e9016529cf 193 void bc95Act::CheckOK(int Nexstp,int Lastp,int maxstp)
donghuoyinzi 0:17e9016529cf 194 {
donghuoyinzi 3:b8766d623f01 195 if(know::polSta[17]=='1'){
donghuoyinzi 3:b8766d623f01 196 know::polSta[17]='0';
donghuoyinzi 0:17e9016529cf 197 bc95Act::stpSe=Nexstp;
donghuoyinzi 0:17e9016529cf 198 bc95Act::cntlink=0;
donghuoyinzi 0:17e9016529cf 199 }
donghuoyinzi 0:17e9016529cf 200 else{
donghuoyinzi 0:17e9016529cf 201 bc95Act::stpSe= bc95Act::stpSe;
donghuoyinzi 0:17e9016529cf 202 bc95Act::cntche++;
donghuoyinzi 0:17e9016529cf 203 if(bc95Act::cntche>maxstp) bc95Act::stpSe=Lastp;
donghuoyinzi 0:17e9016529cf 204 }
donghuoyinzi 0:17e9016529cf 205 }
donghuoyinzi 0:17e9016529cf 206
donghuoyinzi 0:17e9016529cf 207 void bc95Act::put(void)
donghuoyinzi 0:17e9016529cf 208 {
donghuoyinzi 1:013b9fdc4e78 209 know::uart3.printf("AT+NSOCR=DGRAM,17,9090,1\r\n");
donghuoyinzi 0:17e9016529cf 210 wait_ms(50);
donghuoyinzi 3:b8766d623f01 211 know::uart3.printf("%s",know::polDat[2]);
donghuoyinzi 0:17e9016529cf 212 wait_ms(50);
donghuoyinzi 1:013b9fdc4e78 213 know::uart3.printf("AT+NSOCL=0\r\n");
donghuoyinzi 0:17e9016529cf 214 wait_ms(50);
donghuoyinzi 0:17e9016529cf 215
donghuoyinzi 1:013b9fdc4e78 216 know::polSta[16]=1;
donghuoyinzi 0:17e9016529cf 217 }
donghuoyinzi 0:17e9016529cf 218
donghuoyinzi 0:17e9016529cf 219 /*****************************
donghuoyinzi 0:17e9016529cf 220 Fun.: bc95接收数据中断函数。
donghuoyinzi 0:17e9016529cf 221 Desc.:
donghuoyinzi 0:17e9016529cf 222 Auth. Vesion:2017.7.2
donghuoyinzi 0:17e9016529cf 223 *****************************/
donghuoyinzi 0:17e9016529cf 224 void bc95Act::getISR(void)
donghuoyinzi 0:17e9016529cf 225 {
donghuoyinzi 0:17e9016529cf 226 char buf;
donghuoyinzi 3:b8766d623f01 227
donghuoyinzi 0:17e9016529cf 228 buf=know::uart3.getc();
donghuoyinzi 0:17e9016529cf 229 bc95Act::buf[cnt]=buf;
donghuoyinzi 0:17e9016529cf 230 cnt++;
donghuoyinzi 0:17e9016529cf 231 if(cnt>5&&buf==0x0D) cnt=0;
donghuoyinzi 0:17e9016529cf 232 if(cnt>40) cnt=0;
donghuoyinzi 0:17e9016529cf 233 }