void sendData (void *theData, uint8_t theLeng) { uint8_t pro_size = theLeng+3; uint8_t buffer[pro_size]; buffer[0]= 0xff; buffer[1] = theLeng; memcpy ((void*)(buffer+2), theData, theLeng); buffer[pro_size-1] = getChecksum ((uint8_t*)theData, pro_size-1); #ifdef _debug printHex (buffer, pro_size); #endif bleSend ((uint8_t*)(buffer), pro_size); }
void uartDecode(void) { u8 length = 0, command = 0, verify = 0, readOrWrite = 0; u8 i; timeStructure timeSetBLE; u8 data[20]; extern u16 temperature; command = receiveBuffer[1]; readOrWrite = receiveBuffer[2]; length = receiveBuffer[3]; for(i = 1; i < (length - 1); i++) { verify += receiveBuffer[i]; } if(verify != receiveBuffer[length - 1]) return; switch(command) { //时间 case 0x01: if(readOrWrite == 1) { timeSetBLE.year = receiveBuffer[4]; timeSetBLE.month = receiveBuffer[5]; timeSetBLE.data = receiveBuffer[6]; timeSetBLE.hour = receiveBuffer[7]; timeSetBLE.minute = receiveBuffer[8]; timeSetBLE.second = receiveBuffer[9]; timeSetBLE.weekday = receiveBuffer[10]; timeSet(timeSetBLE); } break; //关屏时间 case 0x02: //写 if(readOrWrite == 1) { timeScreenOff = receiveBuffer[4]; } //读 else if(readOrWrite == 0) { data[0] = 0x7f; data[1] = 0x02; data[2] = 0x00; data[3] = 0x06; data[4] = timeScreenOff; data[5] = data[1] + data[2] + data[3] + data[4]; bleSend(data, 6); } break; //系统状态 case 0x03: if (readOrWrite == 0) { data[0] = 0x7f; data[1] = 0x03; data[2] = 0x00; data[3] = 0x0C; data[4] = stateCharging; // 是否充电中 data[5] = voltageBattery - 200; // 电池电压 data[6] = batteryState; // 电池电量等级 data[7] = ledDelaySecond / 60; // 照明延时时间 data[8] = SW_VERSION; // 固件版本 data[9] = temperature >> 8; // 温度 data[10] = temperature; // 温度 data[11] = 0; for (i = 1; i < 11; i++) { data[11] += data[i]; } bleSend(data, 12); } break; //LED case 0x04: //写 if(readOrWrite == 1) { u8 mode = receiveBuffer[4]; u8 delay = receiveBuffer[5]; pwmWhite = receiveBuffer[6]; // 照明亮度 flagBreathLedEnable = receiveBuffer[7]; // 呼吸灯使能 pwmRedSet = receiveBuffer[8]; // 红灯亮度 pwmGreenSet = receiveBuffer[9]; // 绿灯亮度 pwmBlueSet = receiveBuffer[10]; // 蓝灯亮度 // 照明模式 if (0 == mode) { // 改变亮度 flagColorLedEnable = 0; pwmChange(pwmWhite, pwmWhite, pwmWhite); modeBreathLed = breathOff; } // 彩灯模式 else { // 改变颜色 flagColorLedEnable = 1; pwmChange(pwmRedSet, pwmGreenSet, pwmBlueSet); if (flagBreathLedEnable) { modeBreathLed = breathColor; } else { modeBreathLed = breathOff; } } if((delay > 0) && (pwmWhite > 0) && (flagColorLedEnable == DISABLE)) { //开始计时 flagDelayLedEnable = ENABLE; //计算延时秒数 ledDelaySecond = delay * 60; } else { flagDelayLedEnable = DISABLE; ledDelaySecond = 0; } } //读 else if(readOrWrite == 0) { data[0] = 0x7f; data[1] = 0x04; data[2] = 0x00; data[3] = 0x0c; data[4] = flagColorLedEnable; // 模式 data[5] = (ledDelaySecond + 59) / 60; // 延时时间 data[6] = pwmWhite; // 照明亮度 data[7] = flagBreathLedEnable; // 呼吸灯 data[8] = pwmRedSet; // 红灯亮度 data[9] = pwmGreenSet; // 绿灯亮度 data[10] = pwmBlueSet; // 蓝灯亮度 data[11] = 0; for (i = 1; i < 11; i++) { data[11] += data[i]; } bleSend(data, 12); } break; default: break; }