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);
}
Exemple #2
0
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;
	}