Jump to content

ain64_din128_dout128_v2c modification warning and error problem


axiomriddler
 Share

Recommended Posts

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

Link to comment
Share on other sites

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 :)

Link to comment
Share on other sites

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...
 Share

×
×
  • Create New...