BOOL ConfigureChannelFromPacket(BowlerPacket * Packet){
	BYTE pin = Packet->use.data[0];
	BYTE mode = GetChannelMode(pin);
	INT32 * data = (INT32 *)(Packet->use.data+1);
	INT32 tmp;
	int i;
	if(configChannelHWPtr!=NULL){
		if(Packet->use.head.DataLegnth>5 && mode != IS_SERVO){
			int numVals = (Packet->use.head.DataLegnth-(4+1))/4;
			for(i=0;i<numVals;i++){
				tmp = get32bit(Packet, (i*4)+1);
				getBcsIoDataTable()[i].PIN.currentValue = tmp;
				data[i]=tmp;
			}
			configChannelHWPtr(pin,numVals,(INT32 * )(Packet->use.data+1));
		}else{
			// Single Byte Servo, legacy HACK
			INT32 value  = Packet->use.data[1];
			configChannelHWPtr(pin,1,&value);
		}
	}else{
		return FALSE;
	}
	FixPacket(Packet);
	return TRUE;
}
boolean ConfigureChannelFromPacket(BowlerPacket * Packet) {
    uint8_t pin = Packet->use.data[0];
    boolean setValues = Packet->use.data[1];
    uint8_t mode = GetChannelMode(pin);

    int32_t tmp;
    if(mode != 0xff && setValues){
		if (configChannelHWPtr != NULL) {

//			println_E("Pushing configs from packet ");
//			p_int_E(pin);

			tmp = get32bit(Packet,  3);

//			print_E(" value = ");
//			p_int_E(tmp);

			//println_E(__FILE__);println_E("ConfigureChannelFromPacket");
			setDataTableCurrentValue(pin,tmp);

			configChannelHWPtr(pin, 1, &tmp);
		} else {
			return false;
		}

    }
    //println_E("Loading configs into packet");
    Packet->use.head.RPC= GetRPCValue("cchn");
    Packet->use.head.Method = BOWLER_CRIT;
    Packet->use.head.DataLegnth = 4+1+(GetNumberOfIOChannels()*4);
    int32_t * data = (int32_t *) (Packet->use.data + 1);
    configChannelHWPtr(0xff, GetNumberOfIOChannels(), data);
    Packet->use.data[0] =GetNumberOfIOChannels();
    int i;
    for (i = 0; i < GetNumberOfIOChannels(); i++) {
		tmp = data[i];
		set32bit(Packet, tmp, (i*4)+1);
	}
    FixPacket(Packet);
    return true;
}