boolean GetChanelValueFromPacket(BowlerPacket * Packet) { uint8_t pin = Packet->use.data[0]; uint8_t mode = GetChannelMode(pin); uint8_t numValues = 1; int32_t data; if (getChanelValueHWPtr != NULL) { getChanelValueHWPtr(pin, &numValues, &data); } else { return false; } if(isOutputMode(GetChannelMode(pin))==false ){ setDataTableCurrentValue(pin,data); }else{ if(mode== IS_UART_RX){ setDataTableCurrentValue(pin,data); }else{ data = getBcsIoDataTable(pin)->PIN.currentValue; } } set32bit(Packet, data, 1); numValues = 4; Packet->use.head.DataLegnth = 4 + 1 + numValues; FixPacket(Packet); return true; }
boolean GetAllChanelValueFromPacket(BowlerPacket * Packet) { int32_t * data = (int32_t *) (&Packet->use.data[1]); if (getAllChanelValueHWPtr != NULL) { int i; int32_t tmp; getAllChanelValueHWPtr(data); for (i = 0; i < GetNumberOfIOChannels(); i++) { tmp = data[i]; if(isOutputMode(GetChannelMode(i))==false){ setDataTableCurrentValue(i,tmp); }else{ if(GetChannelMode(i) == IS_SERVO){ tmp = GetServoPos(i); }else if(GetChannelMode(i)== IS_UART_RX){ setDataTableCurrentValue(i,tmp); }else{ tmp = getBcsIoDataTable(i)->PIN.currentValue; } } set32bit(Packet, tmp, (i*4)+1); } Packet->use.data[0]=(GetNumberOfIOChannels()); Packet->use.head.RPC=GetRPCValue("gacv"); Packet->use.head.DataLegnth = 4+1+(GetNumberOfIOChannels()*4); } else return false; FixPacket(Packet); return true; }
boolean SetAllChannelValueFromPacket(BowlerPacket * Packet) { int32_t * data = (int32_t *) (&Packet->use.data[5] ); int32_t tmp; if (setAllChanelValueHWPtr != NULL) { uint32_t time; uint8_t i; time=get32bit(Packet, 0); for (i = 0; i < GetNumberOfIOChannels(); i++) { if(isOutputMode(GetChannelMode(i))==true){ tmp = get32bit(Packet, (i*4) +5); // if(GetChannelMode(i) == IS_SERVO) // data[i] = (tmp & 0x000000ff) | (time<<16); // else data[i] = tmp; }else{ data[i] = getBcsIoDataTable(i)->PIN.currentValue; } } setAllChanelValueHWPtr(data, time); for (i = 0; i < GetNumberOfIOChannels(); i++) { if(isOutputMode(GetChannelMode(i))==true){ //println_E(__FILE__);println_E("SetAllChannelValueFromPacket"); if(GetChannelMode(i)!=IS_SERVO) setDataTableCurrentValue(i,data[i]); } } //READY(Packet, 3, 3); GetAllChanelValueFromPacket(Packet); } else { return false; } return true; }
uint8_t SetAllCoProcValues() { int i = 0; boolean send = true; int32_t tmp; if (send) { LoadCorePacket(&downstreamPacketTemp); downstreamPacketTemp.use.head.Method = BOWLER_POST; downstreamPacketTemp.use.head.RPC = GetRPCValue("sacv"); set32bit(&downstreamPacketTemp, 0, 0); // setting the translation time downstreamPacketTemp.use.data[4] = GetNumberOfIOChannels(); for (i = 0; i < GetNumberOfIOChannels(); i++) { tmp = getBcsIoDataTable(i)->PIN.currentValue; down[i].changeValue = false; set32bit(&downstreamPacketTemp, tmp, (i * 4) + 5); } downstreamPacketTemp.use.head.DataLegnth = 4 + 4 + 1 + (4 * GetNumberOfIOChannels()); SendPacketToCoProc(&downstreamPacketTemp); } for (i = 0; i < GetNumberOfIOChannels(); i++) { int index = (i * 4) + 1; if (isOutputMode(GetChannelMode(i)) == false) { tmp= get32bit(&downstreamPacketTemp, index); boolean back = (tmp != getBcsIoDataTable(i)->PIN.currentValue); setDataTableCurrentValue(i,tmp); if (back) { getBcsIoDataTable(i)->PIN.asyncDataenabled = true; } } if (GetChannelMode(i) == IS_SERVO) { SetServoPos(i, get32bit(&downstreamPacketTemp, index) & 0x000000ff); } if (GetChannelMode(i) == IS_UART_RX) { } } return true; }