I found time to work on this a bit, and I got usb_msd to work without 
POSTINC1. I don't see why the other USB samples don't work with this. This 
code can be added at the top of usb_drv_core.jal

-- 
--------------------------------------------------------------------------------------
-- Some PICs do not support the memory_pointer1 library since they don't 
have
-- the POSTINC1 or FSR1 registers.
-- 
--------------------------------------------------------------------------------------
if !defined(POSTINC1) then

   ;Store the next array read/write location
   var word usb_buff_address
   
   ;The current endpoint to read/write to.
   var byte endpoint_array_selected
   const byte USB_EP0_OUT = 0
   const byte USB_EP0_IN = 1
   const byte USB_EP1_OUT = 2
   const byte USB_EP1_IN = 3
   const byte USB_EP2_OUT = 4
   const byte USB_EP2_IN = 5
   const byte USB_EP3_OUT = 6
   const byte USB_EP3_IN = 7
   
   ;Set the array address to read/write to next
   procedure mem_pointer1_address'put(word in address) is
      usb_buff_address = address
      
      ;Find what endpoint the memory address is in, and set the array 
address.
      if (address >= USB_EP0_OUT_ADDR) & (address < USB_EP0_OUT_ADDR + 
USB_EP0_OUT_SIZE) then
         endpoint_array_selected = USB_EP0_OUT
         usb_buff_address = address - USB_EP0_OUT_ADDR
      end if
      if (address >= USB_EP0_IN_ADDR) & (address < USB_EP0_IN_ADDR + 
USB_EP0_IN_SIZE) then
         endpoint_array_selected = USB_EP0_IN
         usb_buff_address = address - USB_EP0_IN_ADDR
      end if
      if (address >= USB_EP1_OUT_ADDR) & (address < USB_EP1_OUT_ADDR + 
USB_EP1_OUT_SIZE) then
         endpoint_array_selected = USB_EP1_OUT
         usb_buff_address = address - USB_EP1_OUT_ADDR
      end if
      if (address >= USB_EP1_IN_ADDR) & (address < USB_EP1_IN_ADDR + 
USB_EP1_IN_SIZE) then
         endpoint_array_selected = USB_EP1_IN
         usb_buff_address = address - USB_EP1_IN_ADDR
      end if
      if defined(usb_ep2out_buf) then
         if (address >= USB_EP2_OUT_ADDR) & (address < USB_EP2_OUT_ADDR + 
USB_EP2_OUT_SIZE) then
            endpoint_array_selected = USB_EP2_OUT
            usb_buff_address = address - USB_EP2_OUT_ADDR
         end if
         if (address >= USB_EP2_IN_ADDR) & (address < USB_EP2_IN_ADDR + 
USB_EP2_IN_SIZE) then
            endpoint_array_selected = USB_EP2_IN
            usb_buff_address = address - USB_EP2_IN_ADDR
         end if
      end if
      if defined(usb_ep3out_buf) then
         if (address >= USB_EP3_OUT_ADDR) & (address < USB_EP3_OUT_ADDR + 
USB_EP3_OUT_SIZE) then
            endpoint_array_selected = USB_EP3_OUT
            usb_buff_address = address - USB_EP3_OUT_ADDR
         end if
         if (address >= USB_EP3_IN_ADDR) & (address < USB_EP3_IN_ADDR + 
USB_EP3_IN_SIZE) then
            endpoint_array_selected = USB_EP3_IN
            usb_buff_address = address - USB_EP3_IN_ADDR
         end if
      end if
   end procedure
   
   ;Put data into the correct endpoint, and increment to the next array 
location.
   procedure mem_pointer1'put(byte in data) is
      if endpoint_array_selected == USB_EP0_OUT then
         usb_ep0out_buf[usb_buff_address] = data
      elsif endpoint_array_selected == USB_EP0_IN then
         usb_ep0in_buf[usb_buff_address] = data
      elsif endpoint_array_selected == USB_EP1_OUT then
         usb_ep1out_buf[usb_buff_address] = data
      elsif endpoint_array_selected == USB_EP1_IN then
         usb_ep1in_buf[usb_buff_address] = data
      end if
      if defined(usb_ep2out_buf) then
         if endpoint_array_selected == USB_EP2_OUT then
            usb_EP2out_buf[usb_buff_address] = data
         elsif endpoint_array_selected == USB_EP2_IN then
            usb_EP2in_buf[usb_buff_address] = data
         end if
      end if
      if defined(usb_ep3out_buf) then
         if endpoint_array_selected == USB_EP3_OUT then
            usb_EP3out_buf[usb_buff_address] = data
         elsif endpoint_array_selected == USB_EP3_IN then
            usb_EP3in_buf[usb_buff_address] = data
         end if
      end if
      usb_buff_address = usb_buff_address + 1
   end procedure

   function mem_pointer1'get() return byte is
      var byte data
      if endpoint_array_selected == USB_EP0_OUT then
         data = usb_ep0out_buf[usb_buff_address]
      elsif endpoint_array_selected == USB_EP0_IN then
         data = usb_ep0in_buf[usb_buff_address]
      elsif endpoint_array_selected == USB_EP1_OUT then
         data = usb_ep1out_buf[usb_buff_address]
      elsif endpoint_array_selected == USB_EP1_IN then
         data = usb_ep1in_buf[usb_buff_address]
      end if
      if defined(usb_EP2out_buf) then
         if endpoint_array_selected == USB_EP2_OUT then
            data = usb_EP2out_buf[usb_buff_address]
         elsif endpoint_array_selected == USB_EP2_IN then
            data = usb_ep2in_buf[usb_buff_address]
         end if
      end if
      if defined(usb_ep3out_buf) then
         if endpoint_array_selected == USB_EP3_OUT then
            data = usb_EP3out_buf[usb_buff_address]
         elsif endpoint_array_selected == USB_EP3_IN then
            data = usb_EP3in_buf[usb_buff_address]
         end if
      end if
      
      usb_buff_address = usb_buff_address + 1
      return data
   end function
else
    include memory_pointer1
end if

-- 
You received this message because you are subscribed to the Google Groups 
"jallib" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/jallib.
For more options, visit https://groups.google.com/d/optout.

Reply via email to