1. 21 May, 2020 1 commit
  2. 13 May, 2020 1 commit
  3. 11 May, 2020 4 commits
    • Don Froula's avatar
      Fixed pulse_imts_ani() function to properly play the inter-digit period. · 3f82a2b0
      Don Froula authored and David Griffith's avatar David Griffith committed
      As written, the "for" loop in the pulse_imts_ani() function will never
      play the inter-digit space, regardless of parity.
      
      The changed "for" loop statement plays the inter-digit space or tone
      correctly.
      
      Tested on prototype hardware and working correctly per Audacity timing
      check.
      3f82a2b0
    • Don Froula's avatar
      Changed rbuf_insert() to not wrap and simply discard additional keypresses. · efb4f596
      Don Froula authored and David Griffith's avatar David Griffith committed
      Wrapping the buffer and storage after 40 key entries in the current code
      destroys the beginning of the tone sequence if a wrap occurs, with no
      warning to the user.
      
      In my original PIC12F683 code, I only buffered and wrote the first 32
      digits. Anything entered after was simply ignored without wrapping.
      
      This change prevents the buffer from wrapping after the 40th key press,
      and simply drops any additional keys, similar to the 12F683 design.
      
      The fix is somewhat dependent upon fixing the other issue with the
      EEPROM_CHUNK_SIZE and BUFFER_SIZE.
      efb4f596
    • Don Froula's avatar
      Fixed 40-key circular buffer wraparound. · 48a56d56
      Don Froula authored and David Griffith's avatar David Griffith committed
      The current code is supposed to write 40 key presses after a
      buffer-clear event, then wrap to the beginning of the buffer,
      overwriting the initial values. However, the code currently allows 41
      key presses to be stored. If >=42 keys are entered and the buffer saved,
      several keys are lost in the EEPROM write and the first part of the
      stored EEPROM is incorrect.
      
      Changing the EEPROM_CHUNK_SIZE from 0x2A to 0x29 and BUFFER_SIZE to
      EEPROM_CHUNK_SIZE - 1 solves the issue. The correct number of bytes (40)
      are stored and the circular buffer wraps correctly to the beginning of
      the buffer on the 41st key press.
      
      In an image of the EEPROM contents after a write of > 40 keys with the
      new change to memory slot 1, followed by two additional writes of <= 40
      keys to test memory slot boundaries, all seems to be correct.
      
      - Byte 0 is FF, as it is not used, by design.
      
      - Byte 1 is the default Tone Mode (MF or 0, in this case).
      
      - Byte 2 is the default Tone Length (4B or 120 ms, in this case).
      
      - Byte 3 starts the first memory storage location. The first byte is the
        stored Tone Mode (MF or 0, in this case).
      
      - Bytes 4 - 43 are the 40 bytes of the stored key presses. In this case, I
        entered 48 keys, and the buffer and storage wrapped back to byte 4 after
        the 40th key. Note the sequence is maintained so the wrap happened
        correctly.
      
      - The memory slot boundaries of subsequent slots are correct.
      
      I think the issue with the current code is that EEPROM_CHUNK_SIZE is set
      to 2A or 42, but only 41 bytes are required to store the Tone Mode plus
      40 key presses before wrapping.
      
      BUFFER_SIZE should be one less than the EEPROM_CHUNK_SIZE, since you are
      setting the stored Tone Mode separately from the key data in the EEPROM
      write routine.
      48a56d56
    • Don Froula's avatar
      Improve debounce and ADC noise immunity in getkey(). · eac8363b
      Don Froula authored and David Griffith's avatar David Griffith committed
      Changing from 8-bit to 10-bit ADC reads was insufficient to prevent
      noise issues.  The original key debounce routine was looking for two
      identical ADC values separated by a delay for debounce.  Due to ADC
      noise, it was sometimes taking many seconds for two identical values to
      be returned, causing erratic keypad operation that would change with the
      ambient noise environment and battery voltage.
      
      This change looks for two consecutive identical decoded key values,
      rather than two identical ADC values.  This allows each ADC read to vary
      within the bounds of the key press ADC range and still provide
      debouncing.  The 10-bit ADC value should also be retained as it reduces
      the changes of incorrect detection as Vcc voltage droops (although the
      increased resolution probably makes it more difficult to achieve two
      consecutive ADC values).
      
      This change was tested in prototype hardware and verified over several
      days and verified to eliminate all ADC noise issues causing erratic key
      operation.
      eac8363b
  4. 09 May, 2020 3 commits
  5. 05 May, 2020 2 commits
  6. 03 May, 2020 2 commits
  7. 01 May, 2020 1 commit
    • David Griffith's avatar
      Added five more tone modes: AC1, AC9, IMTS-ANI, IMTS-DIAL, and MTS. · 6edbd693
      David Griffith authored
      *  AC1 is a very old pulse dialing tone system used in the UK. AC9 is a
         somewhat newer pulse tone dialing system used in the UK.
      *  IMTS-ANI is used in the pre-cellular IMTS system to authenticate a
         mobile phone to the base station.
      *  IMTS-DIAL is used to actually dial the desired phone number in an IMTS
         system.
      *  MTS is an even earlier pre-cellular mobile phone system that has no
         authentication whatsoever.
      6edbd693
  8. 22 Apr, 2020 4 commits
  9. 28 Nov, 2018 5 commits
  10. 27 Nov, 2018 1 commit
  11. 04 Nov, 2018 1 commit
  12. 23 Sep, 2018 1 commit
  13. 19 Sep, 2018 1 commit
  14. 18 Sep, 2018 3 commits
  15. 20 Mar, 2018 2 commits
  16. 19 Mar, 2018 3 commits
  17. 15 Mar, 2018 1 commit
    • David Griffith's avatar
      First stab at allowing a playback to be aborted. · 51972216
      David Griffith authored
      It only works if the first keystroke made is holding 2600 to shift to
      playback mode and then the second being a key to play back a memory. At
      this point, pressing and holding a key will abort playback after the
      current one is finished. Subsequence playbacks are not aborted.  Nor are
      playbacks aborted if one of the twelve other keys are pressed before shifting
      into playback mode.
      51972216
  18. 13 Mar, 2018 4 commits