增加ABAC业务逻辑-称重模块校准

程序设计(放弃):
在内存页0X0807E800设置FLAG
如果是0XFF代表是新设备没有校准过--此后称重模块任务挂起直到配置成功才走正常流程
如果是0X5A代表是旧设备以及校准好--此后走正常流程
说明:人为恢复出厂设置会把FLAG清为0XFF

程序设计(采纳):
称重任务一直走正常流程--当BLE/net收到指令的时候跳到校准模式处理完毕在跳回来即可
无需FLAG 无需设计程序 只需要修改任务流程!

第一步:数据接口
蓝牙BM77传递过来数据:
typedef struct  
{
  uint8_t type;
  uint8_t len;
  uint8_t value[10];
}BleAppMsgTypeEasy;
W0000过来--执行0点校准
W3100过来--执行输入点长度为3重量是100g
说明:采用的是字符传输 不是十六进制 我需要自己算一算 
不是十进制->十六进制 因为数据都是一样的 不用转化!
uint8_t BleDataProcess_easy(BleAppMsgType *msg)
{
    BleAppMsgTypeEasy   BleAppMsg;
    uint8_t  i; 
    uint32_t w=0;

    memset(&BleAppMsg , 0x00 , sizeof(BleAppMsgTypeEasy));
    memcpy(&BleAppMsg , msg->Data ,  sizeof(BleAppMsgTypeEasy));   
    
    BleAppMsg.len=G_strTobyte(BleAppMsg.len);
    if(BleAppMsg.len==0)
    {
      Set_inputweight(0);
      Scale.SetStatus(ScaleCalib);
      btModule.send(NULL ,"ZERO-OK",7);
      BeepOpen(uRt);
    }
    else 
    {

     for(i=0;i<BleAppMsg.len;i++)
       BleAppMsg.value[i]=G_strTobyte(BleAppMsg.value[i]);
     
     for(i=0;i<BleAppMsg.len;i++)/*十进制我算出数据“100”->100*/
        w+=BleAppMsg.value[i]* Power(10,BleAppMsg.len-1);
       
      Set_inputweight(w);
      Scale.SetStatus(ScaleCalib);
      btModule.send(NULL ,"WEIG-OK",7);       
    }
    return uRt;
} 

第二步:流程处理
            case ScaleInit:    Scale.init();          break;
            case ScaleRuning:  Scale.run();           break;
            case ScaleCalib:   ScaleCalibration();    break; 
            default:           Scale.abnormal();      break;	
void  ScaleCalibration(void)
{
  if(Get_inputweight() == 0)
  {
    ScaleCalibZERO();
    Scale.SetStatus(ScaleAbnormal);
  }
  else
  { 
    ScaleCalib1250(inputweight);
    Scale.SetStatus(ScaleInit);
  }

}


第三步:下发指令

String2Bytes(Write1250g,tem,strlen((const char*)Write1250g),1);
tem[3] = (Get_inputweight()&0XFF000000)>>24;
tem[4] = (Get_inputweight()&0X00FF0000)>>16;
tem[5] = (Get_inputweight()&0X0000FF00)>>8;
tem[6] = (Get_inputweight()&0X000000FF)>>0;
G_print(tem,MAXCMDLEN,0);
back = usart_send_receive_repeat(tem,strlen((const char*)Write1250g)/2,100,1,&respone);
我在这里好像错误了很多次!!
        tem[3] = Get_inputweight()&0XFF000000;
        tem[4] = Get_inputweight()&0X00FF0000;
        tem[5] = Get_inputweight()&0X0000FF00;
        tem[6] = Get_inputweight()&0X000000FF;
		随手写bug!


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值