function [] = PSpringCanCallback(rxCh)

global Int1_0 Int2_0 Int3_0 Int4_0;
global Int1_1 Int2_1 Int3_1 Int4_1;
global Int1_2 Int2_2 Int3_2 Int4_2;


rxMsg = receive(rxCh, Inf);
[srcID, dataID, seq_num] = DecodeCanID(rxMsg);

idx = find((dataID == 0) & (srcID == 1));
if(~isempty(idx))
 Int1_0 = unpack(rxMsg(idx), 0, 16, 'LittleEndian', 'int16');
 Int2_0 = unpack(rxMsg(idx), 16, 16, 'LittleEndian', 'uint16');  
 Int3_0 = unpack(rxMsg(idx), 32, 16, 'LittleEndian', 'uint16');
 Int4_0 = unpack(rxMsg(idx), 48, 16, 'LittleEndian', 'int16'); 
end


idx = find((dataID == 1) & (srcID == 1));
if(~isempty(idx))
 Int1_1 = unpack(rxMsg(idx), 0, 16, 'LittleEndian', 'uint16');
 Int2_1 = unpack(rxMsg(idx), 16, 16, 'LittleEndian', 'int16');  
 Int3_1 = unpack(rxMsg(idx), 32, 16, 'LittleEndian', 'uint16');
 Int4_1 = unpack(rxMsg(idx), 48, 16, 'LittleEndian', 'uint16'); 
end

idx = find((dataID == 2) & (srcID == 1));
if(~isempty(idx))
 Int1_2 = unpack(rxMsg(idx), 0, 16, 'LittleEndian', 'uint16');
 Int2_2 = unpack(rxMsg(idx), 16, 16, 'LittleEndian', 'int16');  
 Int3_2 = unpack(rxMsg(idx), 32, 16, 'LittleEndian', 'uint16');
 Int4_2 = unpack(rxMsg(idx), 48, 16, 'LittleEndian', 'int16'); 
end
 
 disp([num2str(Int1_0) '  ' num2str(Int2_0) '  ' num2str(Int3_0) '  ' num2str(Int4_0) ...
     '  ' num2str(Int1_1) '  ' num2str(Int2_1) '  ' num2str(Int3_1) '  ' num2str(Int4_1) ...
     '  ' num2str(Int1_2) '  ' num2str(Int2_2) '  ' num2str(Int3_2) '  ' num2str(Int4_2)]);
        
    
end
    


