Jump to content

Recommended Posts

Posted

hi all..

i need a clue about this modification

here is my attempt:

i use ain64_din128_dout128_v2c..i did manage to:

1. use 2 encoders at SR1 pin 0-3

2. use 48 toggles at SR 3-SR 8

3. keep 78 buttons in on/off mode at SR 9-SR 16, SR 2, SR 1 pin 4-7

i did modify:

main.c

/////////////////////////////////////////////////////////////////////////////
// Application specific encoder table
// the default (dummy) table has been disabled via -DDONT_INCLUDE_MIOS_ENC_TABLE
/////////////////////////////////////////////////////////////////////////////
MIOS_ENC_TABLE {
             // sr pin mode
  MIOS_ENC_ENTRY(1, 0, MIOS_ENC_MODE_DETENTED2),
  MIOS_ENC_ENTRY(1, 2, MIOS_ENC_MODE_DETENTED2),
  MIOS_ENC_EOT
};

/////////////////////////////////////////////////////////////////////////////
// This function is called by MIOS when an encoder has been moved
// incrementer is positive when encoder has been turned clockwise, else
// it is negative
/////////////////////////////////////////////////////////////////////////////
void ENC_NotifyChange(unsigned char encoder, char incrementer) __wparam
{
  MIOS_MIDI_TxBufferPut(0xb0);           // CC at MIDI Channel #1
  MIOS_MIDI_TxBufferPut(0x10 + encoder); // CC# is 0x10 (16) for first encoder
  MIOS_MIDI_TxBufferPut((0x40 + incrementer) & 0x7f);
  // this "40 +/- speed" format is used by NI software and some others
}

/////////////////////////////////////////////////////////////////////////////
// This function is called by MIOS when an button has been toggled
// pin_value is 1 when button released, and 0 when button pressed
/////////////////////////////////////////////////////////////////////////////
void DIN_NotifyToggle(unsigned char pin, unsigned char pin_value) __wparam
{
  unsigned char array_index;
  unsigned char bit_index;

  // DIN 16..63 should toggle
  if( pin >= 16 && pin <= 63 ) {
    if( pin_value == 0 ) { // only react when button is pressed
      // determine the index of the array element (starts from 0)
      array_index = (pin - 16) >> 3; // fastest way to divide value / 8;

      // determine bit position
      bit_index = (pin - 16) & 0x07; // remainder of x/8

      // toggle the flag which saves the current button state
      toggle_state[array_index] ^= (1 << bit_index); // '^' is a XOR operation

      // send MIDI Note event depending on toggle state
      MIOS_MIDI_TxBufferPut(0x90);
      MIOS_MIDI_TxBufferPut(0x30 + pin - 16);
      MIOS_MIDI_TxBufferPut((toggle_state[array_index] & (1 << bit_index)) ? 0x7f : 0x00);

      // set LED (same pin number like button)
      MIOS_DOUT_PinSet(pin, (toggle_state[array_index] & (1 << bit_index)) ? 0x7f : 0x00);
    }
  } else {
    // this branch handles DIN 0..15 and DIN 64..127
  }
}
makefile.orig
# $Id: Makefile 311 2008-05-01 17:56:23Z tk $

# define the processor, linker file and project name
PROCESSOR = 18f452
LKR_FILE  = $(MIOS_PATH)/etc/lkr/p$(PROCESSOR).lkr
PROJECT   = project

# list of objects that should be created and linked
OBJS = mios_wrapper.o app_lcd.o main.o

# include pathes (more will be added by .mk files)
GPASM_INCLUDE = 
SDCC_INCLUDE  = 

# optional defines that should be passed to GPASM/SDCC
GPASM_DEFINES = -DDEBUG_MODE=0
SDCC_DEFINES  = -DDEBUG_MODE=0

# pass parameters to MIOS wrapper
MIOS_WRAPPER_DEFINES = -DSTACK_HEAD=0x37f -DSTACK_IRQ_HEAD=0x33f -DDONT_INCLUDE_MIOS_ENC_TABLE

# directories and files that should be part of the distribution (release) package
# more will be added by *.mk files
DIST = ./


# include the common.mk file
include $(MIOS_PATH)/include/makefile/common.mk

# include application specific driver (select app_lcd/dummy if MIOS internal driver used)
include $(MIOS_PATH)/modules/app_lcd/dummy/app_lcd.mk
mios_enc_table.inc
; $Id: mios_enc_table.inc 69 2008-02-01 00:20:18Z tk $
;
; "Dummy" Configuration Table for Rotary Encoders
; 
; Should be included by the application, if no rotary encoders are connected
; in order to pre-initialize the table area with EOT's
; 
; ==========================================================================

	org	0x3280		; never change the origin!

;; --------------------------------------------------------------------------
;; In this table DIN pins have to be assigned to rotary encoders for the
;; MIOS_ENC driver 
;; 
;; up to 64 entries are provided
;; 
;; The table must be terminated with an ENC_EOT entry. Unused entries should
;; be filled with ENC_EOT
;; 
;; ENC_ENTRY provides following parameters
;;    o first parameter: number of shift register - 1, 2, 3, ... 16
;;    o second parameter: number of pin; since two pins are necessary
;;      for each encoder, an even number is expected: 0, 2, 4 or 6
;;    o the third parameter contains the encoder mode:
;;      either MIOS_ENC_MODE_NON_DETENTED
;;          or MIOS_ENC_MODE_DETENTED
;;          or MIOS_ENC_MODE_DETENTED2
;;          or MIOS_ENC_MODE_DETENTED3
;;
;; Configuration Examples:
;;    ENC_ENTRY  1,  0,  MIOS_ENC_MODE_NON_DETENTED    ; non-detented encoder at pin 0 and 1 of SR 1
;;    ENC_ENTRY  1,  2,  MIOS_ENC_MODE_DETENTED        ; detented encoder at pin 2 and 3 of SR 1
;;    ENC_ENTRY  9,  6,  MIOS_ENC_MODE_NON_DETENTED    ; non-detented encoder at pin 6 and 7 of SR 9
;; --------------------------------------------------------------------------

	;; encoder entry structure
ENC_ENTRY MACRO sr, din_0, mode
	dw	(mode << 8) | (din_0 + 8*(sr-1))
	ENDM	
ENC_EOT	MACRO
	dw	0xffff
	ENDM

_MIOS_ENC_PIN_TABLE
MIOS_ENC_PIN_TABLE
	;; encoders 1-16
	;;        SR  Pin  Mode
	ENC_ENTRY  1,  0,  MIOS_ENC_MODE_DETENTED2       ; detented encoder at pin 0 and 1 of SR 1
	ENC_ENTRY  1,  2,  MIOS_ENC_MODE_DETENTED2       ; detented encoder at pin 2 and 3 of SR 1
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT

	;; encoders 17-32
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT

	;; encoders 33-48
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT

	;; encoders 49-64
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
	ENC_EOT
and here is the error message:
rm -rf _output/*
rm -rf _output
rm -rf *.cod *.map *.lst
rm -rf *.hex
mkdir -p _output
sh ./bin/mios-gpasm -c -p p18f452 -I./src -I ./include/asm -I ./include/share -I
 ./modules/app_lcd/dummy -DDEBUG_MODE=0  -DSTACK_HEAD=0x37f -DSTACK_IRQ_HEAD=0x3
3f -DDONT_INCLUDE_MIOS_ENC_TABLE -I ./modules/mios_wrapper modules/mios_wrapper/
mios_wrapper.asm  -o _output/mios_wrapper.o
sh ./bin/mios-gpasm -c -p p18f452 -I./src -I ./include/asm -I ./include/share -I
 ./modules/app_lcd/dummy -DDEBUG_MODE=0   modules/app_lcd/dummy/app_lcd.asm -o _
output/app_lcd.o
sh ./bin/mios-sdcc -c -mpic16 -p18f452 --fommit-frame-pointer --optimize-goto --
optimize-cmp --disable-warning 85 --obanksel=2  -I./src -I ./include/c -I ./incl
ude/share -DDEBUG_MODE=0  main.c -o _output/main.o
at 1: warning 117: unknown compiler option '--optimize-goto' ignored
main.c:215: error 20: Undefined identifier 'toggle_state'
main.c:215: error 22: Array or pointer required for '[]' operation
main.c:215: error 20: Undefined identifier 'toggle_state'
main.c:215: error 22: Array or pointer required for '[]' operation
main.c:220: error 20: Undefined identifier 'toggle_state'
main.c:220: error 22: Array or pointer required for '[]' operation
main.c:223: error 20: Undefined identifier 'toggle_state'
main.c:223: error 22: Array or pointer required for '[]' operation
make: *** [_output/main.o] Error 1
they are: line 215
     toggle_state[array_index] ^= (1 << bit_index); // '^' is a XOR operation
line 220
     MIOS_MIDI_TxBufferPut((toggle_state[array_index] & (1 << bit_index)) ? 0x7f : 0x00);
line 223
     MIOS_DOUT_PinSet(pin, (toggle_state[array_index] & (1 << bit_index)) ? 0x7f : 0x00);

what did i do wrong? what about the warning 117 message? what should i do?

any helps will be very appeciated...

regards,

anto

Posted
Where (and how) is toggle_state defined?

what do you mean?..(if i didn't misunderstand), i put it in the main.c as follows:

void DIN_NotifyToggle(unsigned char pin, unsigned char pin_value) __wparam
{
  unsigned char array_index;
  unsigned char bit_index;

  // DIN 16..63 should toggle
  if( pin >= 16 && pin <= 63 ) {
    if( pin_value == 0 ) { // only react when button is pressed
      // determine the index of the array element (starts from 0)
      array_index = (pin - 16) >> 3; // fastest way to divide value / 8;

      // determine bit position
      bit_index = (pin - 16) & 0x07; // remainder of x/8

      // toggle the flag which saves the current button state
      toggle_state[array_index] ^= (1 << bit_index); // '^' is a XOR operation

      // send MIDI Note event depending on toggle state
      MIOS_MIDI_TxBufferPut(0x90);
      MIOS_MIDI_TxBufferPut(0x30 + pin - 16);
      MIOS_MIDI_TxBufferPut((toggle_state[array_index] & (1 << bit_index)) ? 0x7f : 0x00);

      // set LED (same pin number like button)
      MIOS_DOUT_PinSet(pin, (toggle_state[array_index] & (1 << bit_index)) ? 0x7f : 0x00);
    }
  } else {
    // this branch handles DIN 0..15 and DIN 64..127
  }
}

is that what you mean?

thanks heaps for your response :)

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...